Statistiques
| Révision :

root / src / Path_module.f90 @ 2

Historique | Voir | Annoter | Télécharger (11,13 ko)

1 1 equemene
MODULE Path_module
2 1 equemene
! This module contains most of the variables needed for the path
3 1 equemene
4 1 equemene
  use VarTypes
5 1 equemene
6 1 equemene
  IMPLICIT NONE
7 1 equemene
8 1 equemene
  SAVE
9 1 equemene
10 1 equemene
  INTEGER(KINT), PARAMETER :: NMaxL=21
11 1 equemene
  INTEGER(KINT), PARAMETER :: Max_Z=86
12 1 equemene
  INTEGER(KINT), PARAMETER :: MaxFroz=100
13 1 equemene
  REAL(KREAL), PARAMETER :: a0=0.529177249d0
14 1 equemene
  REAL(KREAL), PARAMETER :: Unit=1.d0/a0
15 1 equemene
  REAL(KREAL), PARAMETER :: au2kcal=627.509608d0
16 1 equemene
  REAL(KREAL) :: Pi
17 1 equemene
18 1 equemene
 ! Frozen contains the indices of frozen atoms
19 1 equemene
  INTEGER(KINT),ALLOCATABLE :: Frozen(:) !Nat
20 1 equemene
 ! Cart contains the indices of atoms described in cartesian coords
21 1 equemene
  INTEGER(KINT),ALLOCATABLE :: Cart(:) !Nat
22 1 equemene
! intFroz is the number of internal coord frozen
23 1 equemene
! NFroz the number of frozen atoms
24 1 equemene
! Ncart the number of  atoms described in cartesian coords
25 1 equemene
  INTEGER(KINT) :: IntFroz, NFroz, NCart
26 1 equemene
! FrozAtoms is true for a frozen atom, false else.
27 1 equemene
  LOGICAL, ALLOCATABLE :: FrozAtoms(:)  !! Nat
28 1 equemene
! Number of Primitives (mainly for Baker coordinates)
29 1 equemene
  INTEGER(KINT) :: NPrim
30 1 equemene
! Nat number of atoms
31 1 equemene
  INTEGER(KINT) :: Nat
32 1 equemene
! NGeomI number of initial geometries
33 1 equemene
! NgeomF number of final geometries
34 1 equemene
  INTEGER(KINT) :: NGeomI, NGeomF
35 1 equemene
! NCoord=3*Nat or NFree depending on the coordinate choice
36 1 equemene
  INTEGER(KINT) :: NCoord
37 1 equemene
  INTEGER(KINT) :: NMaxPtPath=1000
38 1 equemene
! IReparam is the period of reparameterization of the Path
39 1 equemene
  INTEGER(KINT) :: IReparam=1
40 1 equemene
! IReparamT is the period of reparameterization of the tangents along the path
41 1 equemene
! Be default IReparamT=IReparam
42 1 equemene
  INTEGER(KINT) :: IReparamT
43 1 equemene
! ISpline is the iteration number where spline interpolation starts to be used
44 1 equemene
! instead of linear interpolation
45 1 equemene
  INTEGER(KINT) :: ISpline=1
46 1 equemene
! Linear: if TRUE, then we perform linear interpolation and not spline
47 1 equemene
  LOGICAL :: Linear
48 1 equemene
49 1 equemene
! FrozTol is the criterion to decide wether a frozen atom has moved between
50 1 equemene
! two initial geometries
51 1 equemene
  REAL(KREAL) :: FrozTol=1e-4
52 1 equemene
53 1 equemene
! BoxTol is the criterion to decide wether an atom has crossed the box between
54 1 equemene
! two initial geometries
55 1 equemene
  REAL(KREAL) :: BoxTol=0.5
56 1 equemene
57 1 equemene
58 1 equemene
  LOGICAL :: Freq, MW, Bohr, Renum, Hinv
59 1 equemene
  LOGICAL :: OptReac, OptProd, PathOnly
60 1 equemene
  LOGICAL :: IniHup,HupNeighbour
61 1 equemene
62 1 equemene
  REAL(KREAL) :: Fact,FTan
63 1 equemene
! IGeomRef is the index of the reference geometry, used to calculate the Zmat
64 1 equemene
! or the Baker coordinates.
65 1 equemene
  INTEGER(KINT) :: IGeomRef=-1
66 1 equemene
! For geometry optimization , OptGeom is the index of the starting geometry
67 1 equemene
  INTEGER(KINT) :: OptGeom=-1
68 1 equemene
69 1 equemene
! Optimization parameter
70 1 equemene
  INTEGER(KINT) :: MaxCyc
71 1 equemene
  REAL(KREAL) :: SThresh, Smax, SthreshRms
72 1 equemene
  REAL(KREAL) :: GThresh, GThreshRMS
73 1 equemene
74 1 equemene
! Number of steps in memory for Step_RFO_all
75 1 equemene
  INTEGER(KINT) :: NGintMax = 10
76 1 equemene
77 1 equemene
  CHARACTER(SCHARS) :: Coord='HYBRID'
78 1 equemene
  CHARACTER(SCHARS) :: Step_method='RFO'
79 1 equemene
  CHARACTER(SCHARS) :: Prog="GAUSSIAN"
80 1 equemene
  CHARACTER(VLCHARS) :: ProgExe="g03"
81 1 equemene
82 1 equemene
  CHARACTER(SCHARS) :: runtyp='GEOMETRY OPTIMIZATION'
83 1 equemene
  CHARACTER(SCHARS) :: hesupd="BFGS"
84 1 equemene
85 1 equemene
  REAL(KREAL), ALLOCATABLE, TARGET :: XyzGeomI(:,:,:) ! (NGeomI,3,Nat)
86 1 equemene
  REAL(KREAL), ALLOCATABLE :: XyzGeomF(:,:,:) ! (NGeomF,3,Nat)
87 1 equemene
  REAL(KREAL), ALLOCATABLE :: XyzTangent(:,:)   ! (NGeomF,3*Nat)
88 1 equemene
  REAL(KREAL), ALLOCATABLE :: IntTangent(:,:)   ! (NGeomF,Nfree=3Nat-6)
89 1 equemene
  REAL(KREAL), ALLOCATABLE :: IntCoordI(:,:) ! (NGeomI,3*Nat-6)
90 1 equemene
  ! IntCoordF: Final Internal coordinates for number of final geometries.
91 1 equemene
  ! 3*Nat-6 is the number of coordinates (NCoord) of each geometry.
92 1 equemene
  REAL(KREAL), ALLOCATABLE :: IntCoordF(:,:) ! (NGeomF,3*Nat-6)
93 1 equemene
  REAL(KREAL), ALLOCATABLE :: Vfree(:,:) ! (Ncoord,Ncoord)
94 1 equemene
  REAL(KREAL), ALLOCATABLE :: SGeom(:) ! (NGeomF)
95 1 equemene
  REAL(KREAL), ALLOCATABLE :: Energies(:) ! NGeomF
96 1 equemene
! NCoord=3*Nat or NFree depending on the coordinate choice
97 1 equemene
  REAL(KREAL), ALLOCATABLE :: Grad(:,:) ! (NGeomF,NCoord)
98 1 equemene
  REAL(KREAL), ALLOCATABLE :: Hess(:,:,:)  !(NgeomF, N,N)
99 1 equemene
  REAL(KREAL), ALLOCATABLE :: DzDc(:,:,:,:) ! (3,Nat,3,Nat)
100 1 equemene
  REAL(KREAL), ALLOCATABLE :: BMat_BakerT(:,:) ! (3*Nat,NCoord)
101 1 equemene
  INTEGER(KINT), ALLOCATABLE :: IndZmat(:,:)   ! (Nat,5)
102 1 equemene
  INTEGER(KINT), ALLOCATABLE :: Order(:),OrderInv(:) ! Nat
103 1 equemene
  CHARACTER(10), ALLOCATABLE :: AtName(:) ! Nat
104 1 equemene
  INTEGER(KINT), ALLOCATABLE :: Atome(:) ! Nat
105 1 equemene
  REAL(KREAL), ALLOCATABLE :: MassAt(:)   ! Nat
106 1 equemene
  REAL(KREAL), ALLOCATABLE :: BTransInv(:,:) ! BTransInv (3*Nat-6,3*Nat), used for Baker case.
107 1 equemene
  REAL(KREAL), ALLOCATABLE :: BTransInvF(:,:,:) ! BTransInvF (NGeomF,3*Nat-6,3*Nat)
108 1 equemene
  ! BTransInv_local (3*Nat-6,3*Nat), used for Baker case in Opt_Geom.f90
109 1 equemene
  REAL(KREAL), ALLOCATABLE :: BTransInv_local(:,:)
110 1 equemene
  REAL(KREAL), ALLOCATABLE :: UMat(:,:) !(NPrim,3*Nat-6)
111 1 equemene
  REAL(KREAL), ALLOCATABLE :: UMat_local(:,:) !(NPrim,3*Nat-6)
112 1 equemene
  REAL(KREAL), ALLOCATABLE :: UMatF(:,:,:) !(NGeomF,NPrim,3*Nat-6)
113 1 equemene
  !REAL(KREAL), ALLOCATABLE :: IntCoordIBaker(:,:) ! (NGeomI,NCoord=3*Nat-6)
114 1 equemene
  ! IntCoordIBaker allocated in PathCreate.f90
115 1 equemene
  REAL(KREAL), ALLOCATABLE :: Xprimitive(:,:) ! Xprimitive(NgeomI,NPrim)
116 1 equemene
  REAL(KREAL), ALLOCATABLE :: Xprimitive_t(:) ! used in ConvertBakerInternal_cart.f as a temporary variable.
117 1 equemene
  REAL(KREAL), ALLOCATABLE :: XprimitiveF(:,:) ! Xprimitive(NgeomF,NPrim)
118 1 equemene
  REAL(KREAL), ALLOCATABLE :: GeomOld_all(:,:)
119 1 equemene
  REAL(KREAL), ALLOCATABLE :: GeomOld(:) ! Used in DIIS step method.
120 1 equemene
121 1 equemene
  LOGICAL, PARAMETER :: FRot=.TRUE., FAlign=.TRUE.
122 1 equemene
  REAL(KREAL), ALLOCATABLE :: BprimT(:,:) !(3*Nat,NPrim). This is B^prim.
123 1 equemene
  REAL(KREAL), ALLOCATABLE :: BBT(:,:) ! BBT (3*Nat-6,3*Nat-6), used for Baker case
124 1 equemene
  REAL(KREAL), ALLOCATABLE :: BBT_inv(:,:) ! BBT_inv (3*Nat-6,3*Nat-6), used for Baker case
125 1 equemene
  INTEGER(KINT) :: Symmetry_elimination
126 1 equemene
  LOGICAL :: FirstTimePathCreate
127 1 equemene
128 1 equemene
  Type (ListCoord), POINTER :: Coordinate, CurrentCoord
129 1 equemene
  Type (ListCoord), POINTER :: ScanCoord
130 1 equemene
131 1 equemene
! Triggers the dynamical update of the maximum step
132 1 equemene
  LOGICAL :: DynMaxStep
133 1 equemene
134 1 equemene
! Triggers the alignment of not
135 1 equemene
  LOGICAL :: Align
136 1 equemene
137 1 equemene
138 1 equemene
139 1 equemene
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
140 1 equemene
!
141 1 equemene
! Flags for printing
142 1 equemene
!
143 1 equemene
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
144 1 equemene
145 1 equemene
! Vmd is set to TRUE if user wants to use VMD to look
146 1 equemene
! at the Path.
147 1 equemene
! For now, used only for VASP
148 1 equemene
149 1 equemene
  LOGICAL :: Vmd
150 1 equemene
151 1 equemene
152 1 equemene
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
153 1 equemene
!
154 1 equemene
! Variables for VASP input/output
155 1 equemene
!
156 1 equemene
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
157 1 equemene
158 1 equemene
  REAL(KREAL) :: lat_a(3), lat_b(3), lat_c(3)
159 1 equemene
  REAL(KREAL), ALLOCATABLE :: X0_vasp(:),Y0_vasp(:), Z0_vasp(:) ! nat
160 1 equemene
  REAL(KREAL) :: Latr(3,3)
161 1 equemene
  CHARACTER(LCHARS) :: V_direct
162 1 equemene
! AutoCart : true if user let PATH determines which atoms should be
163 1 equemene
! described in cartesian when COORD=MIXED
164 1 equemene
  LOGICAL :: AutoCart
165 1 equemene
166 1 equemene
167 1 equemene
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
168 1 equemene
!
169 1 equemene
! General
170 1 equemene
!
171 1 equemene
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
172 1 equemene
173 1 equemene
  CHARACTER(2) :: Nom(0:max_Z)=(/ ' X',' H',                   'HE',  &
174 1 equemene
                'LI','BE',            ' B',' C',' N',' O',' F','NE',  &
175 1 equemene
                'NA','MG',            'AL','SI',' P',' S','CL','AR',  &
176 1 equemene
                ' K','CA',                                            &
177 1 equemene
            'SC','TI',' V','CR','MN','FE','CO','NI','CU','ZN',        &
178 1 equemene
                                      'GA','GE','AS','SE','BR','KR',  &
179 1 equemene
                'RB','SR',                                            &
180 1 equemene
            ' Y','ZR','NB','MO','TC','RU','RH','PD','AG','CD',        &
181 1 equemene
                                      'IN','SN','SB','TE',' I','XE',  &
182 1 equemene
                'CS','BA',                                            &
183 1 equemene
            'LA',                                                     &
184 1 equemene
              'CE','PR','ND','PM','SM','EU','GD','TB','DY','HO',      &
185 1 equemene
              'ER','TM','YB','LU',                                    &
186 1 equemene
                     'HF','TA',' W','RE','OS','IR','PT','AU','HG',    &
187 1 equemene
                                      'TL','PB','BI','PO','AT','RN'/)
188 1 equemene
189 1 equemene
! This is the new table, more complete, taken from a periodic table
190 1 equemene
! some value have been changed to be consistent
191 1 equemene
  REAL(KREAL) ::  r_cov(0:max_Z)=(/ 1e-13, 37.,                93.,     &
192 1 equemene
!     2           'LI','BE',          ' B',' C',' N',' O',' F','NE',
193 1 equemene
                  123.,90.,            82., 77., 75., 73., 71., 69.,     &
194 1 equemene
!     3           'NA','MG',          'AL','SI',' P',' S','CL','AR',
195 1 equemene
                  154.,136.,          118.,111.,106.,102., 99., 97.,     &
196 1 equemene
!     4           ' K','CA',
197 1 equemene
                  203.,  174.,                                           &
198 1 equemene
!     4       'SC','TI',' V','CR','MN','FE','CO','NI','CU','ZN',
199 1 equemene
             144.,132.,122.,118.,117.,117.,116.,115.,117.,125.,          &
200 1 equemene
!     4                               'GA','GE','AS','SE','BR','KR',
201 1 equemene
                                     120.,122.,122.,117.,114.,110.,      &
202 1 equemene
!     5           'RB','SR',
203 1 equemene
                 216.,191.,                                              &
204 1 equemene
!     5       ' Y','ZR','NB','MO','TC','RU','RH','PD','AG','CD',
205 1 equemene
              162.,145.,134.,130.,127.,125.,125.,128.,134.,148.,         &
206 1 equemene
!     5                               'IN','SN','SB','TE',' I','XE',
207 1 equemene
                                     144.,140.,143.,135.,133.,130.,      &
208 1 equemene
!     6           'CS','BA',
209 1 equemene
                 235., 198.,                                             &
210 1 equemene
!     6       'LA',
211 1 equemene
!               'CE','PR','ND','PM','SM','EU','GD','TB','DY','HO',      &
212 1 equemene
!               'ER','TM','YB','LU',                                    &
213 1 equemene
             169.,                                                       &
214 1 equemene
             165., 165., 164., 163., 162., 185., 161., 159., 159., 158., &
215 1 equemene
             157., 156., 184.,156.,                                      &
216 1 equemene
!     6                'HF','TA',' W','RE','OS','IR','PT','AU','HG',
217 1 equemene
!     6                                 'TL','PB','BI','PO','AT','RN'/
218 1 equemene
             144., 134., 130., 126., 126., 127., 120., 134., 149.,       &
219 1 equemene
                        148., 147., 146., 146., 148., 151. /)
220 1 equemene
221 1 equemene
  REAL(KREAL) :: Mass(0:Max_Z)=(/0.0D0,1.0078D0,          4.0026D0,      &
222 1 equemene
                  7.0160D0, 9.0122D0,11.0093D0,                          &
223 1 equemene
                 12.0000D0,14.0031D0,15.9949D0,18.9984D0,19.9924D0,      &
224 1 equemene
                 22.9898D0,23.9850D0,26.9815D0,                          &
225 1 equemene
                 27.9769D0,30.9738D0,31.9721D0,34.9688D0,39.9624D0,      &
226 1 equemene
                 39.0983D0,40.08D0,                                      &
227 1 equemene
                   44.9559D0, 47.88D0, 50.9415D0, 51.996D0, 54.9380D0,   &
228 1 equemene
                   55.847D0, 58.9332D0, 58.69D0, 63.546D0, 65.39D0,      &
229 1 equemene
                 69.72D0,72.59D0,74.9216D0,78.96D0,79.904D0,83.80D0,     &
230 1 equemene
                 85.4678D0,87.62D0,88.9059D0,91.224D0,92.9064D0,         &
231 1 equemene
         95.94D0,98D0,101.07D0,102.906D0,106.42D0,107.868D0,112.41D0,    &
232 1 equemene
         114.82D0,118.71D0,121.75D0,127.60D0,126.905D0,131.29D0,         &
233 1 equemene
!     6           'CS','BA',
234 1 equemene
                 132.905D0,137.34D0,                                      &
235 1 equemene
!     6       'LA',
236 1 equemene
!               'CE','PR','ND','PM','SM','EU','GD',
237 1 equemene
!               'TB','DY','HO', 'ER','TM','YB','LU',
238 1 equemene
            138.91D0,                                                      &
239 1 equemene
            140.12D0, 130.91D0, 144.24D0,147.D0,150.35D0, 151.96D0,157.25D0,  &
240 1 equemene
          158.924D0, 162.50D0, 164.93D0, 167.26D0,168.93D0,173.04D0,174.97D0, &
241 1 equemene
!     6                'HF','TA',' W','RE','OS','IR','PT',
242 1 equemene
!                      'AU','HG',
243 1 equemene
!     6                                 'TL','PB','BI','PO','AT','RN'/
244 1 equemene
         178.49D0, 180.95D0, 183.85D0, 186.2D0, 190.2D0, 192.2D0, 195.09D0,  &
245 1 equemene
             196.97D0, 200.59D0,                                             &
246 1 equemene
             204.37D0, 207.19D0,208.98D0,210.D0,210.D0,222.D0 /)
247 1 equemene
248 1 equemene
      END MODULE Path_module