Statistiques
| Révision :

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