总以为这世上所有东西都是国际单位制的,拿过来直接就可以用。然而年轻的我翻车了,虽然各种单位制殊途同归,但理论中的单位和实践中的单位差得很远,哪怕是理论 A 和理论 B 之间也要拐几个弯。
下午在看师姐的接口程序,其中一步涉及到简单的单位换算。初看下是个很简单的过程,真正理清楚用法,还是靠导师的一计妙招。
问题是这样的,程序中的单位制是原子单位,需换算为国际单位。对于各种物理量来说,能量转换表已够用。而程序中涉及到了能量的数值梯度,通过差分法获得的能量梯度,应该怎么转换能量?(假设 1 a.u. = 27.21 eV、1 Bohr = 0.529 177 2 Å)
师姐的程序中是这样做的,“数值导数
”,这引起了我的怀疑,似乎这样做的话,量纲可能有问题。
我试着写了一下差分法计算梯度的过程,即
,单位为
,换算过来即为
,所以应该是
,这也证实了我的猜测。
本以为万事大吉,然而又一次翻车。导师看到之后说这样做有危险,正确且安全的做法是乘以一个无量纲的数
和
,确保单位不会变化:
如此才能得到可靠的结果。
导师最后补充说,这是他本科时候学到的工科中的方法,比如理论中的温度都是开尔文,生产中得到的或用到的数据可能是摄氏度甚至是华氏度,还有各种约定俗成的单位,转换单位是必备的本领。