24小时热门版块排行榜    

查看: 17653  |  回复: 105
本帖产生 1 个 QC强帖 ,点击这里进行查看

yjcmwgk

禁虫 (文坛精英)

密度泛函·小卒

优秀版主

关于虚频的一个简单的理解

【奖励】 本贴被会员评价14次,作者zzgyb增加金币 11 个  
zzgyb  
Moderator

小木虫警察局局长



贵宾: 2.08
金币: 7108.7
帖子: 3801
流量: 16.9 MB
注册: 2005-12-16
来自: 北京
状态: 离线  
性别: GG
专业: 木虫学
专辑: 论坛文集
关于虚频的一个简单的理解
★ ★ ★ ★
spur(金币+4,VIP+0):谢谢解惑!!

首先,什么是频率。
中学的时候我们学过简谐振动,对应的回复力是f=-kx,对应的能量曲线,是一个开口向上的二次函数E=kx^2/2. 这样的振动,对应的x=0的点是能量极小值点(简单情况下也就是最小值点)。这时的振动频率我们也会求:ω=2π sqrt(k/m)。显然它是一个正的频率,也就是通常意义下的振动频率。

那么,一维情况下,如果能量曲线是一个开口向下的二次曲线呢?首先,从能量上看,这是个不稳定的点,中学的物理书上称为“不稳平衡”。用现在的观点看,就是这一点导数是零(受力为0),且是能量极大值。如果套用上面的公式,“回复力”f=-k'x(实际上已经不是回复,而是让x越来越远了),这里k'是个负数,ω=2π sqrt(k'/m)显然就是一个虚数了,即所谓的虚频。Gaussian里面给出一个负的频率,就是对应这个虚频的。

实际情况下,分子的能量是一个高维的势能面,构型优化的时候,有时得到了极小值点,这样这个点的任意方向上,都可以近似为开口向上的二次函数,这样这里对应的振动频率就都是正的。对于极大值点,在每个方向都是开口向下的二次函数,那么频率就会都是负的——当然一般优化很少会遇到这样的情况。对于频率有正有负的情况,说明找到的点在某些方向上是极大值,有些方向上是极小值。如果要得到稳定的能量最低构型,显然需要通过微调分子的构型,消去所有的虚频。如何微调?要看虚频的振动方向。想象着虚频对应的就是开口向下的二次函数,显然,把分子坐标按照振动的方向移动一点点,分子应该就可以顺着势能面找到新的稳定点,但是也不能太小。而所谓的过渡态,则是连接反应物和产物之间的最低能量路径上的能量极大值。好比山谷中的A,B两点,它们之间的一个小土丘,就是过渡态,从A到B的反应,需要越过的是这个小土丘,而不是两边的高山。这样,过渡态就是在一个方向上是极大值,而在其它方向上都是极小值的点。因此,过渡态只有一个虚频。
21楼2011-03-20 17:01:43
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

yjcmwgk

禁虫 (文坛精英)

密度泛函·小卒

优秀版主

过渡态的优化

10月13日
过渡态的优化
寻找过渡态不是一件容易的事(对于我和大多数刚涉及量化的人来说),因此我希望通过写这个经验小结能对大家有些帮助。

   1.首先遇到的问题是,用哪种方法来寻找过渡态?
   GAUSSIAN提供的方法是QSTN和TSN方法。两种方法各有优点和缺点。QSTN方法特别QST3方法要求输入反应物,过渡态的猜测结构,产物这三者的结构。特别麻烦。但很管用,一般不会出现不收敛的情况。对于TSN(对应关键词为OPT=TS)方法,只要求输入过渡态的初始结构,但这个初始结构非常的关键,如果结构不好,则很容易出现不收敛的情况。所以我建议,如果是刚开始做过度态的话,用QSTN方法是好的选择,等有了“感觉”之后,再用TSN方法。

   2. 怎么解决经常出现的错误?
   在找过度态的时候,经常碰到的一些问题就是(1)不收敛,(2)有一个错误的本征值(错误信息为:there is a wrong sign eigenvalue in hessian matrix.....),(3)和LINK9999错误导致退出。对于不收敛的情况,可以分为两类,比如提示信息里的CONVERGENCE FAILER 提醒收敛到了10(-5),而此时你设定的SCF循环次数也仅仅是64步,那么完全有希望通过加大SCF循环次数来达到收敛的目的。倘若只收敛到10(-3)或10(-2),此时加大循环次数可能就没用了。结果还是CONVERGE FAILER。 此时可采用SCF=QC,来达到强制收敛的目的 。因为SCF=QC(LINK508)的计算量比默认的L502要大,所以不到万不得以就不用它了。出现第二个错误可以直接用 关键词OPT=NOEIGEN 来实现。LINK9999出错是因为已经走完了默认的步数,但还未完成。系统会自动跳出。出现这种情况大多数就是因为优化步数和SCF步数超过了默认值。可用OPT(MAXCYCLE=100)和SCF(MAXCYCLE=300)来改错。

   3.怎么样控制过渡态的优化,使得过渡态不至于收敛到其他的分子结构中去?
   我用GAUSS VIEW 可以解决这个问题 ,当刚开始运行GAUSSIAN时,你用GVIEW去打开输出文件时,你可以看到你的过渡态的初始输入结构,当一个循环过后(从上一个LINK502到下一个LINK502),你再打开输出文件,你就可以清晰地看到优化一步后分子的构型,这样就可以随时监控过度态分子的结构,倘若已经有收敛到其他分子构型的趋势时,你就可以把它给KILL了,而不至于需要等全部工作结束后,打开输出文件才知道已经不是想要的过渡态了。 如果收敛到其它的构型上去,可以考虑缩小OPT的步长.iop(1/8=2或3)即可。

   4. 还需要加其它的关键词吗?
   建议在OPT中加入CALCFC。这样可以加大找到过渡态的几率。本人深有体会!

   5. 如何控制寻找过渡态的步长?
   这个可以用IOP来实现。具体相应的IOP是iop(1/8)=2,此语句说明在找过度态的时候,以2A(A为基本单位长度)为单位来寻找过渡态。
22楼2011-03-20 17:04:06
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

yjcmwgk

禁虫 (文坛精英)

密度泛函·小卒

优秀版主

Si的计算

10月13日
Si的计算
最近在用Gauss研究和Si有关的体系。和导师讨论之后有一些收获,与大家共享。

  1、 理论分析

   Si原子基态组态为3s23p2,即3s轨道填满,3p轨道填2个电子。这2个同科p电子耦合可以形成3P,1D和1S共三个谱项,每个谱项对应于一个总能。其中3P为基态,是9(3×3)重简并的(这里不考虑LS耦合);1D和1S为激发态,分别是5重和单重简并的;因此共15个态。其能量由低到高的顺序可以由洪特规则判断为:3P1D–1S。

   如果允许一个s电子激发到p轨道,则可以形成3s13p3的激发组态。由1个s电子和3个同科p电子耦合可能形成的谱项可以如下判定:首先考虑3个同科p电子耦合,可以形成2P,2D和4S三个谱项;再耦合一个s电子,则可能形成的谱项为1P,3P;1D,3D;3S和5S,它们分别是3重、9重、5重、15重、3重和5重简并的,共40个态。由洪特规则判断其能量由低到高的顺序为:5S–3D–3P–3S–1D–1P。

   如果允许两个s电子都激发到p轨道,形成更高的激发组态3s03p4,则可能形成的谱项与3p2相同,为3P, 1D和1S。

   因此对于单重态Si原子,可能的谱项按能量由低到高应为:1D–1S–1D–1P–1D–1S;一共有5+1+5+3+5+1=20个不同的态;而对于三重态Si原子,可能谱项的顺序则为:3P–3D–3P–3S–3P,一共有9+15+9+3+9=45个不同的态。接下来我们用CAS分别对单重态和三重态进行计算。

  2、 使用CAS进行计算单重态Si原子

   对于CAS计算,需要指定活性空间的电子数N和分子轨道数M。对于Si原子,选择3s和3p价电子为活性空间的电子,并把3s和3p轨道作为活性空间的分子轨道,即N=4,M=4。作为一个例子,这里选择较小的基组STO-3G计算。在通常情况下,还需要使用Guess=Alter或Guess=Permute以确定所选的轨道是所需的。但由于这个例子非常简单,因此无需进行判断。

   首先用如下的输入对单重态Si原子进行计算:

  #P CASSCF(4,4)/STO-3G

  Si Atom Singlet

  0 1
  Si

  
   在输出文件中可以找到如下的信息(部分被省略):

   PRIMARY BASIS FUNCTION= 1 2 1 2
   2 SYMMETRY TYPE = 3
   1 2
   1 3
   3 SYMMETRY TYPE = 1
   1 3
   1 3
   ……
   20 SYMMETRY TYPE = 1
   3 4
   3 4
   NO OF BASIS FUNCTIONS = 20 NO TO BE DELETED = 0

   第一行“PRIMARY BASIS FUNCTION= 1 2 1 2”给出初始组态。在这个计算中活性空间一共有4个轨道,可以编号为1,2,3,4;并填入4个电子(2个alpha电子、2个beta电子)。这里“ 1 2 1 2”前面的“ 1 2”表示2个alpha电子分别填入1和2轨道,后面的“ 1 2”表示2个beta电子也填入1和2轨道。接下来输出的是激发组态,每3行表示一个组态。其中第一行是序号,及对称类型,第二行表示alpha电子的填充情况,第三行表示beta电子的填充情况。例如:

   2 SYMMETRY TYPE = 3
   1 2
   1 3

  表示第2个组态(即第1个激发组态)中2个alpha电子填入1和2轨道,而两个beta电子则填入1和3轨道。其余类推。

   从输出文件中可以看出,这4个电子在我们选定的4个轨道中一共可以形成20个不同的态,这和我们前面的分析是符合的。接下来我们加上NRoot=20选项输出所有20个能量本征值:

  #P CASSCF(4,4,NRoot=20)/STO-3G

  Si Atom Singlet

  0 1
  Si

  
   能量本征值的输出结果如下(省略了本征函数的结果):

   ( 1) EIGENVALUE -285.4244894198
   ( 2) EIGENVALUE -285.4244894198
   ( 3) EIGENVALUE -285.4244894198
   ( 4) EIGENVALUE -285.4244894198
   ( 5) EIGENVALUE -285.4244894198
   ( 6) EIGENVALUE -285.3800354911
   ( 7) EIGENVALUE -284.9597239594
   ( 8) EIGENVALUE -284.9597239594
   ( 9) EIGENVALUE -284.9597239594
   (10) EIGENVALUE -284.9597239594
   (11) EIGENVALUE -284.9597239594
   (12) EIGENVALUE -284.9050226210
   (13) EIGENVALUE -284.9050226210
   (14) EIGENVALUE -284.9050226210
   (15) EIGENVALUE -284.6587631295
   (16) EIGENVALUE -284.6587631295
   (17) EIGENVALUE -284.6587631295
   (18) EIGENVALUE -284.6587631295
   (19) EIGENVALUE -284.6587631295
   (20) EIGENVALUE -284.5391130431

   可以看出( 1)到( 5)是5重简并的,对应于我们分析的1D (3s23p2);( 6)不简并,对应于1S (3s23p2);接下来的( 7)到(11)则对应于1D (3s23p2);(12)到(14)对应于1P (3s13p3);(15)到(19)对应于1D (3s03p4);(20)对应于1S (3s03p4)。顺序与简并度都与我们的判断完全符合。另一方面,实验上可以定出Si原子在某些态跃迁时对应的光子频率(以cm-1为单位),因此可以得到对应态之间的能量差。例如对于3s23p2形成的1D和1S态,实验给出的能量差为:
  (15394.24 - 6298.81) / 109737.31 * 13.6 = 1.13 (eV);
  而计算得到的能量差则为:
  (285.4244894198 - 285.3800354911) * 27.2 = 1.21 (eV)。
  二者也符合非常好。这样我们不仅完全理解了CAS对于Si原子激发态的计算结果,并对CAS的计算精度也有了一定了解。

  3、 使用CAS计算三重态Si原子

   仍然采用CAS(4,4)/STO-3G,输入如下:

  #P CASSCF(4,4)/STO-3G

  Si Atom Singlet

  0 3
  Si

  
   在输出文件中可以看到(部分被省略)::

   PRIMARY BASIS FUNCTION= 1 2 3 1
   2 SYMMETRY TYPE = 2
   1 2 4
   1
   ……
   15 SYMMETRY TYPE = 3
   2 3 4
   4
   NO OF BASIS FUNCTIONS = 15 NO TO BE DELETED = 0

   也就是说Gauss判断只有15个态,即我们预期45个态的3分之一。考虑到我们计算的是3重态Si原子,我们可以判断:Gauss的这15个态并没有把自旋多重度包含进来;也就是说,对于3重态Si,总自旋z方向分量可以有-1、0、1三种可能,而显然Gauss只考虑了其中一种,即z方向分量为1的情况。因子只有预期的3分之一。为了验证这个判断,我们接下来我们用NRoot=15输出15个态的总能:

  #P CASSCF(4,4,NRoot=15)/STO-3G

  Si Atom Singlet

  0 3
  Si

  
   本征能量的输出结果如下(省略了本征矢量):

   ( 1) EIGENVALUE -285.4771931916
   ( 2) EIGENVALUE -285.4771705603
   ( 3) EIGENVALUE -285.4755331430
   ( 4) EIGENVALUE -285.1588544212
   ( 5) EIGENVALUE -285.1587180933
   ( 6) EIGENVALUE -285.1586346814
   ( 7) EIGENVALUE -285.1581896041
   ( 8) EIGENVALUE -285.1581891466
   ( 9) EIGENVALUE -285.1041229954
   (10) EIGENVALUE -285.1040032414
   (11) EIGENVALUE -285.1034018646
   (12) EIGENVALUE -284.9396659869
   (13) EIGENVALUE -284.7136826269
   (14) EIGENVALUE -284.7114674021
   (15) EIGENVALUE -284.7113936872

   可以看出( 1)到( 3)是近似简并的,对应于我们预期的3P (3s23p2),( 4)到( 8)也近似简并,对应于3D (3s13p3),接下来的( 9)到(11)对应于3P (3s13p3),(12)对应于3S (3s13p3),(13)到(15)则对应于3P (3s03p4)。可以看出,除了各个态能量不简并之外,结果基本上和我们的预期符合,因此这进一步证实了我们的判断。当然,如果考虑LS耦合之后,3P也会按照总角量子数J而分裂。但由于Gauss在默认情况下没有考虑这个效应,因此Gauss给出的3P内部分裂不能与实验相比较,只能比较不同态之间的能量差。例如实验上给出3D (3s13p3)和3P (3s23p2)的能量差为:
  48399.15 / 109737.31 * 13.6 = 6.00 (eV),
  而我们的结果为:
  (285.1581891466 - 285.4771931916) * 27.2 = 8.68 (eV)。
  二者有一定差别。另外,实验定出1D (3s23p2)与3P (3s23p2)的能量差(即单重态Si原子基态与三重态Si原子基态的能量差)为:
  6298.81 / 109737.31 * 13.6 = 0.78 (eV);
  计算结果为:
  (285.4771931916 - 285.4244894198) * 27.2 = 1.12 (eV)。
  这些差别应该和基组较小、没有正确处理自旋轨道耦合等有关。

  光谱数据来源:Charlotte E. Moore,《Atomic Energy Levels as Derived From the Analyses of Optical Spectra, Volume I, H to V》,1971
23楼2011-03-20 17:04:24
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

yjcmwgk

禁虫 (文坛精英)

密度泛函·小卒

优秀版主

一些乱七八糟的网址,我当时怎么就存下了这个玩意儿

内容已删除
24楼2011-03-20 17:05:08
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

yjcmwgk

禁虫 (文坛精英)

密度泛函·小卒

优秀版主

用matlab画z=3*x.^2+6*y.^3的三维图形
syms x
syms y
syms z
[x,y] = meshgrid(-5:.01:10,-1:.01:0)
z=3*x.^2+6*y.^3
mesh(x,y,z)
25楼2011-03-20 17:05:33
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

yjcmwgk

禁虫 (文坛精英)

密度泛函·小卒

优秀版主

这个东西好 发上来!何祚庥院士的神作









[ Last edited by yjcmwgk on 2011-3-20 at 17:13 ]
26楼2011-03-20 17:10:38
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

yjcmwgk

禁虫 (文坛精英)

密度泛函·小卒

优秀版主

F:\my store\多人:光的折射


27楼2011-03-20 17:14:03
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

yjcmwgk

禁虫 (文坛精英)

密度泛函·小卒

优秀版主

oniom格式详解

# opt freq=noraman oniom(mp2/6-311+g(3df,3pd):b3pw91/6-31g(d):b3lyp/3-21g)
【对High层,即H层,采用mp2/6-311+g(3df,3pd);
 对Media层,即M层,采用b3pw91/6-31g(d);
 对Low层,即L层,采用b3lyp/3-21g】

0 1 -2 1 -2 1 2 1 2 1 2 1
【对Real体系采用b3lyp/3-21g水平的计算时,Real体系采用电荷0,多重度1的设置
 对Mid体系采用b3pw91/6-31g(d)水平的计算时,Mid体系采用电荷-2,多重度1的设置
 对Mid体系采用b3lyp/3-21g水平的计算时,Real体系采用电荷-2,多重度1的设置
 对Model体系采用mp2/6-311+g(3df,3pd)水平的计算时,Model体系采用电荷2,多重度1的设置
 对Model体系采用b3pw91/6-31g(d)水平的计算时,Model体系采用电荷2,多重度1的设置
 对Model体系采用b3lyp/3-21g水平的计算时,Model体系采用电荷2,多重度1的设置】
【Real体系即是H+M+L层
 Mid体系即是H+M层
 Model体系即是H层】

C                0   -1.06827940   -2.59205361    0.00000000 L H 5
【C指的是1号原子是C
 0表示该原子不冻结
 -1.06827940   -2.59205361    0.00000000 表示分子坐标
 L表示该原子是Low层
 H表示,在对Mid体系进行计算的时候,该C原子改成H原子,成为Mid体系的悬挂原子
 5表示,该原子是与Mid体系的5号原子相连接】
=========
gjf文件开始
---------
%nprocshared=1
%mem=500MB
%chk=G:\ByHand\oniom\Li2PcONIOM.chk
# opt freq=noraman oniom(mp2/6-311+g(3df,3pd):b3pw91/6-31g(d):b3lyp/3-21g)

Li2Pc Oniom

0 1 -2 1 -2 1 2 1 2 1 2 1
C                0   -1.06827940   -2.59205361    0.00000000 L H 5
C                0   -0.64817712   -4.05208072    0.00000000 L
C                0    0.64817712   -4.05208072    0.00000000 L
C                0    1.06827940   -2.59205361    0.00000000 L H 5
N                0    0.00000000   -1.69380459    0.00000000 M
C                0   -0.64817712    4.05208072    0.00000000 L
C                0    0.64817712    4.05208072    0.00000000 L
C                0   -1.06827940    2.59205361    0.00000000 L H 10
C                0    1.06827940    2.59205361    0.00000000 L H 10
N                0    0.00000000    1.69380459    0.00000000 M
C                0    2.59205361   -1.06827940    0.00000000 L H 13
C                0    4.05208072   -0.64817712    0.00000000 L
N                0    1.69380459    0.00000000    0.00000000 M
C                0    4.05208072    0.64817712    0.00000000 L
C                0    2.59205361    1.06827940    0.00000000 L H 13
C                0   -2.59205361   -1.06827940    0.00000000 L H 18
C                0   -4.05208072   -0.64817712    0.00000000 L
N                0   -1.69380459    0.00000000    0.00000000 M
C                0   -4.05208072    0.64817712    0.00000000 L
C                0   -2.59205361    1.06827940    0.00000000 L H 18
N                0    2.29712177    2.29712177    0.00000000 L
N                0   -2.29712177    2.29712177    0.00000000 L
N                0   -2.29712177   -2.29712177    0.00000000 L
N                0    2.29712177   -2.29712177    0.00000000 L
C                0    5.23533458    1.38094601    0.00000000 L
H                0    5.20203797    2.45044856    0.00000000 L
C                0    6.46048480    0.68548141    0.00000000 L
H                0    7.38597263    1.22242753    0.00000000 L
C                0    6.46048480   -0.68548141    0.00000000 L
H                0    7.38597263   -1.22242753    0.00000000 L
C                0    5.23533458   -1.38094601    0.00000000 L
H                0    5.20203797   -2.45044856    0.00000000 L
C                0    1.38094601   -5.23533458    0.00000000 L
H                0    2.45044856   -5.20203797    0.00000000 L
C                0    0.68548141   -6.46048480    0.00000000 L
H                0    1.22242753   -7.38597263    0.00000000 L
C                0   -0.68548141   -6.46048480    0.00000000 L
H                0   -1.22242753   -7.38597263    0.00000000 L
C                0   -1.38094601   -5.23533458    0.00000000 L
H                0   -2.45044856   -5.20203797    0.00000000 L
C                0   -5.23533458   -1.38094601    0.00000000 L
H                0   -5.20203797   -2.45044856    0.00000000 L
C                0   -6.46048480   -0.68548141    0.00000000 L
H                0   -7.38597263   -1.22242753    0.00000000 L
C                0   -6.46048480    0.68548141    0.00000000 L
H                0   -7.38597263    1.22242753    0.00000000 L
C                0   -5.23533458    1.38094601    0.00000000 L
H                0   -5.20203797    2.45044856    0.00000000 L
C                0   -1.38094601    5.23533458    0.00000000 L
H                0   -2.45044856    5.20203797    0.00000000 L
C                0   -0.68548141    6.46048480    0.00000000 L
H                0   -1.22242753    7.38597263    0.00000000 L
C                0    0.68548141    6.46048480    0.00000000 L
H                0    1.22242753    7.38597263    0.00000000 L
C                0    1.38094601    5.23533458    0.00000000 L
H                0    2.45044856    5.20203797    0.00000000 L
Li               0    0.00000000    0.00000000    1.15363497 H
Li               0    0.00000000    0.00000000   -1.15363497 H
------
gjf文件结束
28楼2011-03-20 17:15:48
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

yjcmwgk

禁虫 (文坛精英)

密度泛函·小卒

优秀版主

师弟的一封信

万亮说当时发给王泉博,同时一块儿发给你们的一个信看不懂。我给他解释了之后,让ta给你们也解释一下,但是我觉得解释的不清除。现在我重新解释一下,其实吧,只要两封信对比起来一起看,就能看懂了。

先看看我给万亮写的四个文件的信息:
我们N年前好像学过批处理文件,齐冬师兄发给我们有一篇貌似叫“上两件作废,看这一个”的邮件,其中包含了一个当年他讲得天花乱坠,吾辈仍执迷不悟(读到此处,我伤心了……)的批处理文件。以下就是各输入文件的命令。

c60-sp.com的内容
%chk=c60-sp.chk
# 方法/基组 scf=tight
--------------
c60-opt.com的内容
%chk=c60-opt.chk
# 方法/基组 opt guess=read geom=allcheck
--------------
c60-freq.com的内容
%chk=c60-freq.chk
# 方法/基组 freq=noraman scf=tight guess=read geom=allcheck
--------------
c60-nbo.com的内容
%chk=c60-nbo.chk
# 方法/基组 pop=nbo scf=tight guess=read geom=allcheck
然后是以前发的那个信:
鉴于你平时要做试验还要管理很多实验室的工作,计算任务往往结束了但是你来不及交新任务,我教给你一个办法——linux下的批处理。
(一)
你可以看看我在山大的服务器上的实例。路径是“qd/qd2/N12--”。这个文件夹下的全部文件都是。你可以看我的各个com文件,尤其是看那个叫c60-bat.in的文件。(你可以复制下来看看,研究研究,但是绝不可以给我乱动!我正在计算呢!)看不懂可以问蔡雪师姐。其实Linux下的批处理比Windows下的批处理功能强多了!问蔡雪师姐前,请先参考两个资料(我都给过你,就是刚开始就给你的那个资料库)《g03L批处理方法》和《UNIX系统操作简介》。
我先跟你说说这个c60-bat.in这个批处理文件的内容是什么意思吧。总共12个命令。所有命令都是依次执行的。
1)  nohup g03 c60-sp.com c60-sp.log &
计算c60-sp.com,得到c60-sp.chk和c60-sp.log。(参考c60-sp.com的内容)
2)  formchk c60-sp.chk c60-sp.fchk &
将c60-sp.chk转化为c60-sp.fchk。
3)  scp c60-sp.chk c60-opt.chk &
将 c60-sp.chk复制一份,复制后的文件叫做c60-opt.chk(参见c60-opt.com的内容,尤其是chk行和#号行中的guess和 geom命令。我这样做,是为了将第一步计算得到的chk文件能用于下一步计算,同时能保留刚刚计算完毕的第一步chk文件。)
4)  nohup g03 c60-opt.com c60-opt.log &
计算c60-opt.com,得到c60-opt.chk和c60-opt.log。
5)  formchk c60-opt.chk c60-opt.fchk &
将c60-opt.chk转化为c60-opt.fchk
6)  scp c60-sp.chk c60-freq.chk &
将 c60-sp.chk复制一份,复制后的文件叫做c60-freq.chk(参见c60-freq.com的内容,尤其是chk行和#号行中的guess 和geom命令。我这样做,是为了将第一步计算得到的chk文件能用于第三步计算,同时能保留先前计算出来的第一步chk文件。)
7)  nohup g03 c60-freq.com c60-freq.log &
计算c60-freq.com,得到c60-freq.chk和c60-freq.log。
8)  formchk c60-freq.chk c60-freq.fchk &
将c60-freq.chk转化为c60-freq.fchk
9)  scp c60-opt.chk c60-nbo.chk &
将 c60-opt.chk复制一份,复制后的文件叫做c60-nbo.chk(参见c60-nbo.com的内容,尤其是chk行和#号行中的guess和 geom命令。我这样做,是为了将第二步计算得到的chk文件能用于第四步计算,同时能保留先前计算出来的第二步的chk文件。)
10)  nohup g03 c60-nbo.com c60-nbo.log &
计算c60-nbo.com,得到c60-nbo.chk和c60-nbo.log。
11)  formchk c60-nbo.chk c60-nbo.fchk &
将c60-nbo.chk转化为c60-nbo.fchk
12)  rm *.chk &
这是我的恶习之一。计算完毕,将全部chk文件删除,只保留fchk文件。
(二)
这个通过写in文件的方式比写bcf文件的方式要好。因为bcf这个批处理文件只能执行g03开头的命令,难以进行像这样包含各种处理方式的in文件。也比link1的连接要好,事实上link1还不如bcf文件。bcf文件好歹能实现各个命令互不影响,第一个计算出错而第二个可以继续进行,而link1的多步任务中只要有一个报错,下面的任务全部抛弃。
(三)
我再给你一个in文件的实例。这是我做了12个BSSE的单点能counterpoise计算。因为单点能的计算很快,所以我不想一个一个交任务,就把25个命令做了一个in文件全部交上去,第二天早上拿结果。这个文件中的一些命令我用了一些缺省的写法,看不懂可以蔡雪师姐之。
bsse.in的内容如下
nohup g03 t1 &
wait
formchk t1-bsse.chk &
wait
nohup g03 t1-comp &
wait
formchk t1-comp-bsse.chk &
wait
nohup g03 t2 &
wait
formchk t2-bsse.chk &
wait
nohup g03 t2-comp &
wait
formchk t2-comp-bsse.chk &
wait
nohup g03 t3 &
wait
formchk t3-bsse.chk &
wait
nohup g03 t3-comp &
wait
formchk t3-comp-bsse.chk &
wait
nohup g03 t4 &
wait
formchk t4-bsse.chk &
wait
nohup g03 t4-comp &
wait
formchk t4-comp-bsse.chk &
wait
nohup g03 t5 &
wait
formchk t5-bsse.chk &
wait
nohup g03 t5-comp &
wait
formchk t5-comp-bsse.chk &
wait
nohup g03 t6 &
wait
formchk t6-bsse.chk &
wait
nohup g03 t6-comp &
wait
formchk t6-comp-bsse.chk &
wait
rm *.chk &
29楼2011-03-20 17:16:42
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

yjcmwgk

禁虫 (文坛精英)

密度泛函·小卒

优秀版主

fortran

fortran 主要规定和主要命令

(一)变量
(1)INTEGER语句(整型说明语句)
(2)REAL语句(实型说明语句)
(3)DOUBLE PRECISION语句(双精度说明语句)
(4)COMPLEX语句(复型说明语句)
(5)LOGICAL语句(逻辑型说明语句)
(6)CHARACTER语句(字符型说明语句)
(7)I-N规则
(二)内部函数
==========================================================
函数名          含义                应用例子       备注
----------------------------------------------------------
ABS                求绝对值        ABS(X)            
EXP                指数运算        EXP(X)
SIN                正弦值                 SIN(X)
COS                余弦值                COS(X)
ASIN                反正弦                ASIN(X)
ACOS                反余弦                ACOS(X)
TAN                正切                TAN(X)
ATAN                反正切              ATAN(X)
LOG                自然对数        ALOG(X)        即lnx
LOGlO                常用对数        ALOG10(X)      即lgx
INT                取整                INT(X)
MOD                求余                  MOD(X1,X2)    MOD(8,3)表示8被3除的余数,其值为2,而MOD(3,8)则表示3被8除的余数,其值为3
SIGN                求符号               SIGN(Xl,X2)   当X2大于等于0时,返回值为|X1|,当X2小雨0时,返回值为-|X1|
REAL                转换为实型        REAL(I)
MAX                求最大值        MAX(I1,I2,I3)
MIN                求最小值        MIN(Xl,X2,X3)
==========================================================
(三)关系运算符、逻辑运算符和逻辑变量
================================
关系运算符        所代表的数学符号
--------------------------------
.GT.                > (大于)
.GE.                ≥ (大于或等于)
.LT.                < (小于)
.LE.                ≤ (小于或等于)
.EQ.                = (等于)
.NE.                ≠ (不等于)
================================
逻辑常量只有两个:.TRUE. (表示“真”,即满足逻辑条件); .FALSE. (表示“假”,即不满足逻辑条件)。
逻辑型变量用来存放逻辑常量。它的值也只能是.TRUE.或.FALSE.之一。可以将一逻辑常量赋予一个逻辑变量。如将A定义为逻辑型变量,用赋值语句对其赋值:
LOGICAL A
A=.TRUE.
=============================================
逻辑运算符        含义                逻辑运算例
---------------------------------------------
.AND.                逻辑与                A.AND.B
.OR.                逻辑或                A.OR.B
.NOT.                逻辑非                .NOT.A
.EQV.                逻辑等价        A.EQV.B
.NEQV.                逻辑不等价        A.NEQV.B
=============================================
(四)IF语句和CASE语句
IF(逻辑表达式1) THEN
…                         then 块
ELSE IF(逻辑表达式2) THEN
…                         else if 块
ELSE
…                         else 块
END IF
-----------
SELECT CASE(case表达式)
CASE(case选择符) [构造名]

[CASE DEFAULT [构造名]
块]
END SELECT [构造名]
(五)DO语句
do i=1,1O
        do j=1,20
                ………
        end do
end do
隐DO语句
如read(*,*) (value(i),i=1,20) 表示读入VALUE(1),VALUE(2),…,VALUE(20)的值
隐DO表可以嵌套,如:
PRINT *, ((A(I,J),I=1,3),J=1,3)
先把内层(A(I,J),I=1,3)隐DO表作为输出表,再与隐DO控制J=1,3合成外层隐DO表。其控制机制与嵌套DO循环一致,先内层循环完,外层循环变量加一步长,再循环完内层。其打印值的次序如下:
A(1,1),A(2,1),A(3,1),A(1,2),A(2,2),…,A(3,3)
(六)输入输出
格式列表是一系列格式描述符,之间用逗号隔开。这些格式描述符描述了将要传输的数据,例如要被读写的数字,数据类型和长度。下面是FORMAT和WRITE语句中的格式列表的例子:
例:100 FORMAT(’A=’,I5, ’B=’,F7.2)
例:WRITE(*,’(F8.5,2I3,A20) ’) REAL1,INT1,INT2,”format list example”
在Fortran中有4个预定义的外部文件(设备):       
=================================
设备号        连接的设备
---------------------------------
星号(*)        总是键盘和显示器
0        缺省状态下是键盘和显示器
5        缺省状态下是键盘
6        缺省状态下是显示器
=================================
(七)文件
a)    OPEN语句
OPEN语句用于把设备号与文件名连接起来,并且对文件的各项性质进行指定。它的一般形式为:
OPEN([UNIT=]unit[,ACCESS=access][,ACTION=action][,BLANK=blanks][,BLOCKSIZE=blocksize][,CARRIAGECONTROL=carriagecontrol][,DELIM=delim][,ERR=err][,FILE=file][,FORM=form][,IOFOCUS=iofocus][,IOSTAT=iostat][,PAD=pad][,POSITION=position][,RECL=recl][,SHARE=share][,STATUS=status])
其中的各项参数的意义及取值如下:
1) UNIT:设备号说明。unit是大于或等于0的正整数,设备号说明是OPEN语句的第—项时可以省略“UNIT=”。
2) ACCESS:存取方式说明。access是字符串表达式:
APPEND     追加方式
SEQUENTIAL 顺序访问方式
DIRECT     直接访问方式
当省略此说明项时为顺序访问方式。
3) ACTION:描述文件的读写属性。action是字符串表达式:
READ       文件为只读方式打开
WRITE      文件为只写方式打开
READWRITE  文件为可读写方式打开
当省略此说明项时,文件打开顺序:READWRITE->READ->WRITE。
4) BLANK:说明数据格式输入字段中空格的含义。blank是字符串表达式:
NULL       空格忽略不计,相当于在格式描述符中的BN编辑符
ZERO       空格处理成数字0,相当于BZ编辑符
当省略此说明项时为ZERO。此说明只能用于格式输入。
5) BLOCKSIZE:指定以字节为单位的设备缓存的大小,默认值为一4字节整数。
6) CARRIAGECONTROL:指明处理文件中的第一个字符的方式,其值为字符串表达式:
Fortran    对第一个字符作一般的Fortran解释
LIST       指出在文件的每两个记录之间有—个空格
默认状态下,对于连接到打印机和显示器这样的设备,设置值为Fortran,对于连接到文件的设备,设置值为LIST。当FORM被设成UNFORMATTED和BINARY时,其值被忽略。
7) DELIM:指明分隔直接列表或格式化名称列表记录的方式,其值为字符串表达式:
APOSTROPHE 用单撇号(’)分隔
QUOTE      用双撇号(”)分隔
NONE       不用分隔符
如果在OPEN语句中设置了分隔符,则在文件中的单撇号和双撇号都是成对出现的。
8) ERR:出错处理说明。其值是同一程序中的一条语句的标号,当OPEN语句执行出错时执行此语句。如果省略该项,则出错时给出出错信息并终止运行。
9) FILE:文件名。file是一字符串表达式,可以是空、合法的数据文件名字、设备名字或是作为内部文件的变量。在WinNT/9x中允许使用长度大于8的文件名和长度大于3的文件扩展名。省略此项时,编译器将自动产生一个文件名唯一的临时文件,这个临时文件将在结束运行或与文件连接的设备关闭后被删除掉。
10) FORM:记录格式说明。form是字符串表达式:
FORMATTED    记录按有格式存放。
UNFORMATTED  记录按无格式存放。
当省略此说明项时为:对顺序文件是有格式的;对直接文件是无格式的。
11) IOFUS:指出一个新Quickwin子窗口是否为活动窗口,其值为逻辑值。缺省值为真。
12) IOSTAT:出错状态说明。iostat是—个缺省长度为4的整形变量。当执行此OPEN语句时系统给变量赋值:
零         没有发生错误
负数       文件结尾
正数       发生错误,其值视具体计算机系统而定
若省略该项则没有此功能。
13) PAD:从格式化文件中记录的数据少于要读取的数据时,是否用空格来填充没有从记录中读到数据的变量。pad是字符串表达式:
YES        填充(默认值)
NO         不填充
14) POSITION:指定打开顺序文件的访问位置,position是字符串表达式:
ASIA       已被连接的文件的访问位置是固定的,未被连接的文件的访问位置是文件的开始处。
REWIND     把文件的访问位置定在文件的开始处(文件己存在)。
APPEND     把文件的访问位置定在文件的末尾处(文件己存在)。
对于一个新文件,文件的访问位置总是被定在文件的开始处。
15) RECL:记录长度(单位为字节)说明。recl是指定的正整型量或算术表达式,用来指定直接文件中的每条记录的字节数,或顺序文件中的记录的最大长度。
16) SHARE:指明当文件打开时是否实现文件的锁定。share是字符串表达式:
DENYRW     动态读写模式。不允许其他的进程打开这个文件。
DENYWR     动态写模式。不允许其他的进程以写的方式打开这个文件。
DENYRD     动态读模式。不允许其他的进程以读的方式打开这个文件。
DENYNONE   默认的非动态模式。允许其他的进程打开这个文件。
17) STATUS:文件状态说明。status是字符串表达式:
OLD        表示指定的文件是已经存在的老文件。这一状态一般用于读操作,如果用于写操作则重写文件,原文件内容将被覆盖。如果指定的文件并不存在,则系统将给出出错信息。
NEW        表示指定的文件尚不存在。执行OPEN语句时将在磁盘上建立该文件并使其状态改变为OLD。NEW状态一般用于写操作。如果指定的文件名已经存在将给出出错信息(有的系统不给出信息而是把这个已经存在的文件冲掉使原来的内容不复存在)。
SCRATCH    表示与设备号相连接的文件在关闭时将被自动删除。注意:此状态不能与FILE说明共存,只能用于由计算机系统指定的文件名,使该文件作为程序运行过程中的一个临时性文件。
REPLACE    表示替换一个有相同名字的文件,如果没有同名的文件存在,将产生一个新文件。
UNKNOWN    表示文件可以是已存在的或不存在的。系统打开文件状态的次序为:OLO->NEW->创建新文件。STATUS的设置值只影响磁盘文件,像键盘和显示器这样的设备将忽略这一设置。
若省略该项时默认的状态为UNKNOWN。
b)    ENDFILE语句
ENDFILE语句的功能是在文件上写一条文件结束记录,这时文件定位在结束记录的后面。它的一般形式为:
ENDFILE{unit|([UNIT=]unit[,ERR=err][,IOSTAT=iostat])}
由于用ENDFILE语句在文件中写入一条结束记录后,文件的指针被定位在结束记录之后,所以若再想向同一个文件中添加更多的记录,就必须使用BACKSPACE或REWIND语句对文件进行文件指针定位的操作。在直接访问文件中使用ENDFILE语句在文件中写入一条结束记录后,新的结束记录后的所有老的记录都将被删除掉。
c)    CLOSE语句
CLOSE语句解除设备号与文件的连接,又称关闭文件。它的一般形式为:
CLOSE([UNIT=]unit[,ERR=err][,IOSTAT=iostat][,STATUS|DISPOSE|DISP=status])
其中除STATUS以外的各项参数的意义及取值与OPEN语句中的相同。STATUS是文件关闭后状态说明,其值是一字符串:
DELETE             与设备连接的文件不保留,被删除
KEEP(或SAVE)      与设备号连接的文件保留下来不被删除
PRINT              将文件递交给打印机打印并被保留(仅对顺序文件)
PRINT/DELETE       将文件递交给打印机后被删除
SUBMIT             插入一个进程以执行文件
SUBMIT/DELETE      插入一个进程以执行文件,当插入完成后被删除
默认设置将删除带有SCRATCH属性的临时文件,对其它文件为KEEP。
在程序中,没有必要显示的进行文件的关闭,—般情况下,当程序退出时将以各个文件的默认状态关闭所有的文件。CLOSE语句不必与OPEN语句出现存同一程序单元中。
d)    文件指针定位语句
REWIND语句:称为反绕语句,它使指定设备号的文件指针指向文件的开头,通常用于顺序文件的操作。它的一般形式为:
REWIND{unit|([UNIT=]unit[,ERR=err][,IOSTAT=iostat])
BACKSPACE语句:称为回退语句,它使指定设备号的文件指针退回一个记录位置,一般用于顺序文件。它的一般形式为:
BACKSPACE{unit|([UNIT=]unit[,ERR=err][,IOSTAT=iostat])
除了以下几种情况外,使用BACKSPACE语句正好使文件的指针向前移动一条记录:本条记录前再没有记录时文件指针的位置不变;文件指针的位置在一条记录的中间时,文件指针移到本条记录的开始处;本记录的前—记录是文件结束记录时,文件指针移到文件结束记录之前。
30楼2011-03-20 17:17:49
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 yjcmwgk 的主题更新
普通表情 高级回复 (可上传附件)
信息提示
请填处理意见