root / examples / Test / PES_HCN_ana.f90 @ 4
Historique | Voir | Annoter | Télécharger (3,99 ko)
1 |
PROGRAM PES2D |
---|---|
2 |
|
3 |
IMPLICIT NONE |
4 |
integer, parameter :: KINT = kind(1) |
5 |
integer, parameter :: KREAL = kind(1.0d0) |
6 |
|
7 |
REAL(KREAL) :: E |
8 |
|
9 |
! Bohr --> Angstr |
10 |
real(KREAL), parameter :: BOHR = 0.52917726D+00 |
11 |
! |
12 |
! Parameters to define the surface |
13 |
INTEGER(KINT), DIMENSION(6), PARAMETER :: IECOEF = (/-1,9,-45,45,-9,1/) |
14 |
INTEGER(KINT), DIMENSION(6), PARAMETER :: ISCOEF = (/-3,-2,-1,1,2,3/) |
15 |
REAL(KREAL), PARAMETER :: hh=0.01d0 |
16 |
|
17 |
! Variables |
18 |
INTEGER(KINT) :: i,j,iat,jat |
19 |
REAL(KREAL), ALLOCATABLE :: Xyztmp(:,:),GradTmp(:,:) |
20 |
REAL(KREAL) :: xp,yp |
21 |
|
22 |
CHARACTER(132) :: Line |
23 |
LOGICAL :: Debug |
24 |
|
25 |
real(KREAL), parameter :: zero = 0.0_KREAL, one = 1.0_KREAL |
26 |
REAL(KREAL), external :: Eint |
27 |
|
28 |
REAL(KREAL) :: dCH,dCN,aHCN |
29 |
REAL(KREAL), PARAMETER :: dCHmin=1., dCHmax=2.5 |
30 |
REAL(KREAL), PARAMETER :: aHCNmin=0., aHCNmax=180. |
31 |
REAL(KREAL) :: StepdCH, StepaHCN |
32 |
INTEGER(KINT) :: NbStpdCH,NbStpaHCN |
33 |
|
34 |
|
35 |
|
36 |
! For now dCN=1.16 is fixed. Next version should optimize it at each step ! |
37 |
dCN=1.16 |
38 |
NbStpdCH=100 |
39 |
NbStpaHCN=100 |
40 |
StepdCH=(dCHmax-dCHmin)/(NbStpdCH-1) |
41 |
StepaHCN=(aHCNmax-aHCNmin)/(NbStpaHCN-1) |
42 |
dCH=dCHmin |
43 |
DO I=1,NbStpdCH |
44 |
aHCN=aHCNmin |
45 |
DO J=1,NbStpaHCN |
46 |
e=Eint(dCH,dCN,aHCN) |
47 |
WRITE(*,'(1X,F10.4,1X,F10.4,1X,F8.2,1X,F15.6)') dCH,dCN,aHCN,e |
48 |
aHCN=aHCN+StepaHCN |
49 |
END DO |
50 |
WRITE(*,*) |
51 |
dCH=dCH+StepdCH |
52 |
END DO |
53 |
|
54 |
!==================================================================== |
55 |
end |
56 |
|
57 |
|
58 |
function Eint(dCH,dCN,aHCN) |
59 |
|
60 |
IMPLICIT NONE |
61 |
integer, parameter :: KINT = kind(1) |
62 |
integer, parameter :: KREAL = kind(1.0d0) |
63 |
|
64 |
|
65 |
REAL(KREAL) ,INTENT(IN) :: dCH,dCN,aHCN |
66 |
REAL(KREAL) :: Eint |
67 |
|
68 |
INTEGER(KINT) :: i |
69 |
REAL(KREAL) :: dNH |
70 |
|
71 |
real(KREAL) :: autoA,autoeV,Pi |
72 |
parameter (autoA=0.52917715d0) |
73 |
parameter (autoeV=27.21183d0) |
74 |
|
75 |
|
76 |
real(KREAL) :: Q(3) |
77 |
real(KREAL) :: TT,gR,pR |
78 |
|
79 |
real(KREAL) :: mB,mC,mH |
80 |
real(KREAL) :: T,RN,RC,r1,r2,r3 |
81 |
|
82 |
real(KREAL) :: Z1,Z12,V1 |
83 |
real(KREAL) :: Z2,Z22,V2 |
84 |
real(KREAL) :: Z3,Z32,V3 |
85 |
|
86 |
real(KREAL) :: S1,S2,S3,S12,S22,S32,POLY |
87 |
real(KREAL) :: E1,E2,E3,HY1,HY2,HY3,SWITCH,V123 |
88 |
|
89 |
pi=dacos(-1.0d0) |
90 |
|
91 |
dNH=sqrt(dCH**2+dCN**2-2*dCH*dCN*cos(aHCN*pi/180.)) |
92 |
|
93 |
R1=dCH |
94 |
R2=dCN |
95 |
R3=dNH |
96 |
|
97 |
|
98 |
|
99 |
! R1=R1*autoA |
100 |
! R2=R2*autoA |
101 |
! R3=R3*autoA |
102 |
|
103 |
!.....CH |
104 |
Z1=R1-1.0823 |
105 |
Z12=Z1*Z1 |
106 |
V1=-2.8521*(1.0+5.5297*Z1+8.7166*Z12+5.3082*Z1*Z12)*dexp(-5.5297*Z1) |
107 |
!.....CN |
108 |
Z2=R2-1.1718 |
109 |
Z22=Z2*Z2 |
110 |
V2=-7.9282*(1.0+5.2448*Z2+7.3416*Z22+4.9785*Z2*Z22)*dexp(-5.2448*Z2) |
111 |
!.....NH |
112 |
Z3=R3-1.0370 |
113 |
Z32=Z3*Z3 |
114 |
V3=-3.9938*(1.0+3.0704*Z3)*dexp(-3.0704*Z3) |
115 |
|
116 |
! write(6,*) v1,v2,v3 |
117 |
|
118 |
!.....THREE BODY TERMS |
119 |
Z1=R1-1.9607 |
120 |
Z2=R2-2.2794 |
121 |
Z3=R3-1.8687 |
122 |
S1=0.4436*Z1+0.6091*Z2+0.6575*Z3 |
123 |
S2=-.8941*Z1+0.2498*Z2+0.3718*Z3 |
124 |
S3=0.0622*Z1-0.7527*Z2+0.6554*Z3 |
125 |
|
126 |
S12=S1*S1 |
127 |
S22=S2*S2 |
128 |
S32=S3*S3 |
129 |
POLY=-3.0578*(1.0+1.9076*S1-0.5008*S2-0.0149*S3+0.6695*S12 & |
130 |
-1.3535*S22-1.0501*S32+0.2698*S1*S2-1.1120*S1*S3 & |
131 |
+1.9310*S2*S3-0.0877*S1*S12+0.0044*S2*S22+0.0700 & |
132 |
*S3*S32+0.0898*S12*S2-1.0186*S1*S22-0.0911*S12 & |
133 |
*S3+0.0017*S1*S32+0.4567*S22*S3-0.8840*S2*S32 & |
134 |
+0.3333*S1*S2*S3-0.0367*S12*S12+0.4821*S22*S22 & |
135 |
+0.2564*S32*S32-0.0017*S12*S1*S2-0.2278*S12*S22 & |
136 |
-0.1287*S1*S2*S22+0.1759*S1*S12*S3-0.0399*S12*S32 & |
137 |
-0.1447*S1*S3*S32-0.3147*S2*S22*S3+0.1233*S22*S32 & |
138 |
+0.3161*S2*S3*S32+0.0919*S12*S2*S3-0.0954*S1*S22*S3 & |
139 |
+0.1778*S1*S2*S32-0.1892*S22*S22*S2) |
140 |
|
141 |
|
142 |
E1=dexp(3.9742*Z1/2.) |
143 |
E2=dexp(4.3688*Z2/2.) |
144 |
E3=dexp(1.5176*Z3/2.) |
145 |
HY1=(E1-1.0/E1)/(E1+1.0/E1) |
146 |
HY2=(E2-1.0/E2)/(E2+1.0/E2) |
147 |
HY3=(E3-1.0/E3)/(E3+1.0/E3) |
148 |
SWITCH=(1.0-HY1)*(1.0-HY2)*(1.0-HY3) |
149 |
V123=SWITCH*POLY |
150 |
|
151 |
! write(6,*) v123,V1+V2+V3+V123 |
152 |
|
153 |
Eint=(V1+V2+V3+V123)/autoeV |
154 |
|
155 |
|
156 |
|
157 |
return |
158 |
end function Eint |
159 |
|
160 |
|