Branch data Line data Source code
1 : : !!****m* ABINIT/m_m1geo
2 : : !! NAME
3 : : !! m_m1geo
4 : : !!
5 : : !! FUNCTION
6 : : !! This module contains definition the m1geo type (="move unique geometry")
7 : : !! and its related init and destroy routines
8 : : !!
9 : : !! COPYRIGHT
10 : : !! Copyright (C) 2018-2026 ABINIT group (XG)
11 : : !! This file is distributed under the terms of the
12 : : !! GNU General Public License, see ~abinit/COPYING
13 : : !! or http://www.gnu.org/copyleft/gpl.txt .
14 : : !!
15 : : !! SOURCE
16 : :
17 : : #if defined HAVE_CONFIG_H
18 : : #include "config.h"
19 : : #endif
20 : :
21 : : #include "abi_common.h"
22 : :
23 : : module m_m1geo
24 : :
25 : : use defs_basis
26 : : use m_profiling_abi
27 : : use m_abimover
28 : : use m_abihist
29 : : use m_dtset
30 : : use m_dtfil
31 : :
32 : : implicit none
33 : :
34 : : private
35 : :
36 : : public :: m1geo_init
37 : : public :: m1geo_destroy
38 : :
39 : : !!***
40 : :
41 : : !----------------------------------------------------------------------
42 : :
43 : : !!****t* m_m1geo/m1geo
44 : : !! NAME
45 : : !! m1geo type
46 : : !!
47 : : !! FUNCTION
48 : : !! This datatype has the purpose to store all the data taken
49 : : !! usually from dtset (but not only) needed to move a single geometry
50 : : !! opbtained by the weighting of different images,
51 : : !! using the algorithms defined by ionmov.
52 : : !!
53 : : !! SOURCE
54 : :
55 : : type, public :: m1geo_type
56 : : ! Scalars
57 : : integer :: dt_chkdilatmx ! chkdilatmx from dtset
58 : : integer :: hmctt ! hmctt from dtset
59 : : integer :: icycle ! cycle index
60 : : integer :: iexit ! if nonzero, will have to exit
61 : : integer :: itime ! time index for the move1geo algorithms
62 : : integer :: nctime !
63 : : integer :: ncycle ! foreseen number of cycles
64 : : integer :: nerr_dilatmx ! number of dilatmx trespass errors, if chkdilatmx
65 : : integer :: nimage ! nimage from dtset
66 : : integer :: npsp ! npsp from dtset
67 : : integer :: ntime ! number of time steps for the move1geo algorithms
68 : : integer :: usewvl ! usewvl from dtset
69 : : real(dp) :: dilatmx ! dilatmx from dtset
70 : : logical :: skipcycle ! .TRUE. when the remaining of the cycle has to be skipped. .FALSE. otherwise.
71 : : ! Arrays
72 : : real(dp) :: rprimd_orig(3,3) ! rprimd from dtset
73 : : real(dp),allocatable :: mixesimgf(:) ! mixesimgf from dtset
74 : : ! Character string
75 : : character(len=fnlen) :: filnam_ds4
76 : : ! Datatypes
77 : : type(abimover) :: ab_mover
78 : : type(abimover_specs) :: specs
79 : : type(ab_xfh_type) :: ab_xfh_1geo
80 : : type(delocint) :: deloc
81 : : type(abihist) :: hist_1geo
82 : : type(mttk_type) :: mttk_vars
83 : :
84 : : end type m1geo_type
85 : :
86 : : contains !=============================================================
87 : : !!***
88 : :
89 : : !!****f* m_gstateimg/m1geo_init
90 : : !! NAME
91 : : !! m1geo_init
92 : : !!
93 : : !! FUNCTION
94 : : !! Initializes the m1geo structure
95 : : !!
96 : : !! INPUTS
97 : : !!
98 : : !! OUTPUT
99 : : !!
100 : : !! SOURCE
101 : :
102 : 3979 : subroutine m1geo_init(dtfil,dtset,m1geo_param)
103 : :
104 : : !Arguments ------------------------------------
105 : : !scalars
106 : : type(datafiles_type),target,intent(in) :: dtfil
107 : : type(dataset_type),target,intent(in) :: dtset
108 : : type(m1geo_type),intent(inout) :: m1geo_param
109 : :
110 : : !Local variables
111 : : !integer
112 : : integer :: ionmov,natom,ncycle,nhisttot,nimage,ntimimage,ntypat
113 : 3979 : real(dp), allocatable :: amu_curr(:)
114 : :
115 : : !************************************************************************
116 : :
117 : :
118 : 3979 : ionmov=dtset%ionmov
119 : 3979 : natom=dtset%natom
120 : 3979 : nimage=dtset%nimage
121 : 3979 : ntimimage=dtset%ntimimage
122 : 3979 : ntypat=dtset%ntypat
123 : :
124 : : !Straight initialization from dtset
125 : 3979 : m1geo_param%dt_chkdilatmx =dtset%chkdilatmx
126 : 3979 : m1geo_param%dilatmx =dtset%dilatmx
127 : 3979 : m1geo_param%hmctt =dtset%hmctt
128 : 3979 : m1geo_param%nctime =dtset%nctime
129 : 3979 : m1geo_param%nimage =dtset%nimage
130 : 3979 : m1geo_param%npsp =dtset%npsp
131 : 3979 : m1geo_param%usewvl =dtset%usewvl
132 : :
133 [ - + + - : 11937 : ABI_MALLOC(m1geo_param%mixesimgf,(nimage))
+ - + - -
+ - + -
+ ]
134 [ + + ]: 8218 : m1geo_param%mixesimgf(:)=dtset%mixesimgf(1:nimage)
135 : :
136 : :
137 : : !From dtset, with change or adjustment of meaning
138 : 3979 : m1geo_param%ntime =dtset%ntimimage ! Beware ntime vs ntimimage
139 [ + + + + ]: 51727 : m1geo_param%rprimd_orig =dtset%rprimd_orig(:,:,1)
140 : :
141 [ - + + - : 11937 : ABI_MALLOC(amu_curr,(ntypat))
+ - + - -
+ - + ]
142 [ + + ]: 9065 : amu_curr(:)=dtset%amu_orig(:,1)
143 : :
144 : : !From dtfil
145 : 3979 : m1geo_param%filnam_ds4 =dtfil%filnam_ds(4)
146 : :
147 : : !###########################################################
148 : : !Init sub-datastructures
149 : :
150 : : !1) ab_mover
151 : 3979 : call abimover_ini(m1geo_param%ab_mover,amu_curr,dtfil,dtset,m1geo_param%specs)
152 [ - + ]: 3979 : ABI_FREE(amu_curr)
153 : :
154 : : !2) deloc
155 [ + + ]: 3979 : if(ionmov==10 .or. ionmov==11)then
156 : 1 : call delocint_ini(m1geo_param%deloc)
157 : : end if
158 : :
159 : : !3) hist
160 : : !In a simple approach, hist_1geo is initialized here.
161 : : !Likely one should also make an interface with the hist(nimage) from the calling routine, and average it over the images...
162 : :
163 : 3979 : ncycle=m1geo_param%specs%ncycle
164 : : if(ionmov==25.and.dtset%hmctt>=0) then
165 : : ncycle=dtset%hmctt
166 : : if(dtset%hmcsst>0.and.dtset%optcell/=0) then
167 : : ncycle=ncycle+dtset%hmcsst
168 : : endif
169 : : endif
170 : : nhisttot=ncycle*ntimimage ! WARNING, here ntime is used instead of ntimimage
171 : : if (dtset%nctime>0) nhisttot=nhisttot+1
172 : :
173 : : !We just store the needed history step not all of them.
174 : 3979 : if(m1geo_param%specs%nhist/=-1) nhisttot = m1geo_param%specs%nhist ! We don't need to store all the history
175 : :
176 : 3979 : call abihist_init(m1geo_param%hist_1geo,natom,ntimimage,m1geo_param%specs%isVused,m1geo_param%specs%isARused)
177 : :
178 : : !4) ab_xfh
179 : 3979 : m1geo_param%ab_xfh_1geo%mxfh=ntimimage
180 : 3979 : m1geo_param%ab_xfh_1geo%nxfh=0
181 : 3979 : m1geo_param%ab_xfh_1geo%nxfhr=0
182 [ + - - + : 19895 : ABI_MALLOC(m1geo_param%ab_xfh_1geo%xfhist,(3,natom+4,2,ntimimage))
+ - + - -
+ + - + -
+ - - + -
+ - + ]
183 : :
184 : : !5) mttk
185 [ + + ]: 3979 : if (ionmov==13)then
186 : 5 : call mttk_ini(m1geo_param%mttk_vars,m1geo_param%ab_mover%nnos)
187 : : end if
188 : :
189 : : !###########################################################
190 : : !Init other values
191 : :
192 : 3979 : m1geo_param%ncycle=m1geo_param%specs%ncycle
193 : 3979 : m1geo_param%icycle=0
194 : 3979 : m1geo_param%iexit=0
195 : 3979 : m1geo_param%itime=0
196 : 3979 : m1geo_param%nerr_dilatmx=0
197 : 3979 : m1geo_param%skipcycle=.FALSE.
198 : :
199 [ - + ]: 3979 : end subroutine m1geo_init
200 : : !!***
201 : :
202 : : !----------------------------------------------------------------------
203 : :
204 : : !!****f* m_gstateimg/m1geo_destroy
205 : : !! NAME
206 : : !! m1geo_destroy
207 : : !!
208 : : !! FUNCTION
209 : : !! Destroy the m1geo structure
210 : : !!
211 : : !! INPUTS
212 : : !!
213 : : !! OUTPUT
214 : : !!
215 : : !! SOURCE
216 : :
217 : 3979 : subroutine m1geo_destroy(m1geo_param)
218 : :
219 : : !Arguments ------------------------------------
220 : : !scalars
221 : : type(m1geo_type),intent(inout) :: m1geo_param
222 : :
223 : : !************************************************************************
224 : :
225 [ + - ]: 3979 : ABI_SFREE(m1geo_param%mixesimgf)
226 [ + - ]: 3979 : ABI_SFREE(m1geo_param%ab_xfh_1geo%xfhist)
227 : :
228 : 3979 : call abimover_destroy(m1geo_param%ab_mover)
229 : 3979 : call delocint_fin(m1geo_param%deloc)
230 : 3979 : call abihist_free(m1geo_param%hist_1geo)
231 : 3979 : call mttk_fin(m1geo_param%mttk_vars)
232 : :
233 : 3979 : end subroutine m1geo_destroy
234 : :
235 : : !----------------------------------------------------------------------
236 : :
237 [ # # # # : 0 : end module m_m1geo
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # ]
238 : : !!***
|