28 #include "../base/base_uses.f90"
34 LOGICAL,
PRIVATE,
PARAMETER :: debug_this_module = .true.
35 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'helium_types'
38 INTEGER,
PARAMETER,
PUBLIC :: &
53 INTEGER,
PARAMETER,
PUBLIC :: &
61 PUBLIC :: helium_solvent_type
62 PUBLIC :: helium_solvent_p_type
73 TYPE helium_vector_type
76 REAL(kind=
dp),
DIMENSION(3) :: inst = 0.0_dp
79 REAL(kind=
dp),
DIMENSION(3) :: accu = 0.0_dp
82 REAL(kind=
dp),
DIMENSION(3) :: ravr = 0.0_dp
85 REAL(kind=
dp),
DIMENSION(3) :: rstr = 0.0_dp
87 END TYPE helium_vector_type
93 TYPE helium_solvent_type
95 TYPE(section_vals_type),
POINTER :: input => null()
96 TYPE(cp_logger_type),
POINTER :: logger => null()
98 INTEGER :: num_env = 0
102 INTEGER :: bead_ratio = 0
103 REAL(kind=
dp) :: density = 0.0_dp
107 REAL(kind=
dp) :: he_mass_au = 0.0_dp
108 REAL(kind=
dp) :: hb2m = 0.0_dp
109 REAL(kind=
dp) :: tau = 0.0_dp
110 REAL(kind=
dp) :: wpref = 0.0_dp
111 REAL(kind=
dp) :: apref = 0.0_dp
115 LOGICAL :: periodic = .false.
116 INTEGER :: cell_shape = 0
117 REAL(kind=
dp) :: cell_size = 0.0_dp
118 REAL(kind=
dp) :: cell_size_inv = 0.0_dp
119 REAL(kind=
dp),
DIMENSION(3, 3) :: cell_m = 0.0_dp
120 REAL(kind=
dp),
DIMENSION(3, 3) :: cell_m_inv = 0.0_dp
121 REAL(kind=
dp),
DIMENSION(3) :: origin = 0.0_dp
122 REAL(kind=
dp) :: droplet_radius = 0.0_dp
124 REAL(kind=
dp),
DIMENSION(3) :: center = 0.0_dp
128 REAL(kind=
dp) :: worm_centroid_drmax = 0.0_dp
129 INTEGER :: worm_nstat = 0
130 INTEGER :: worm_staging_l = 0
131 INTEGER :: worm_repeat_crawl = 0
132 INTEGER :: worm_all_limit = 0
133 INTEGER :: worm_centroid_min = 0, worm_centroid_max = 0
134 INTEGER :: worm_staging_min = 0, worm_staging_max = 0
135 INTEGER :: worm_fcrawl_min = 0, worm_fcrawl_max = 0
136 INTEGER :: worm_bcrawl_min = 0, worm_bcrawl_max = 0
137 INTEGER :: worm_head_min = 0, worm_head_max = 0
138 INTEGER :: worm_tail_min = 0, worm_tail_max = 0
139 INTEGER :: worm_swap_min = 0, worm_swap_max = 0
140 INTEGER :: worm_open_close_min = 0, worm_open_close_max = 0
141 INTEGER :: worm_max_open_cycles = 0
142 REAL(kind=
dp) :: worm_open_close_scale = 0.0_dp
143 REAL(kind=
dp) :: worm_ln_openclose_scale = 0.0_dp
144 LOGICAL :: worm_allow_open = .false., worm_show_statistics = .false.
147 REAL(kind=
dp),
DIMENSION(3) :: worm_xtra_bead = 0.0_dp, worm_xtra_bead_work = 0.0_dp
148 INTEGER :: worm_atom_idx = 0, worm_bead_idx = 0
149 INTEGER :: worm_atom_idx_work = 0, worm_bead_idx_work = 0
150 INTEGER :: iw = 0, it = 0
151 LOGICAL :: worm_is_closed = .false.
153 INTEGER :: iter_norot = 0
154 INTEGER :: iter_rot = 0
156 INTEGER :: maxcycle = 0
157 INTEGER :: m_dist_type = 0
158 INTEGER :: m_value = 0
159 REAL(kind=
dp) :: m_ratio = 0.0_dp
161 INTEGER :: relrot = 0
162 INTEGER :: bisection = 0
163 INTEGER :: bisctlog2 = 0
165 REAL(kind=
dp) :: e_corr = 0.0_dp
170 INTEGER :: num_steps = 0
171 INTEGER :: first_step = 0
172 INTEGER :: last_step = 0
173 INTEGER :: current_step = 0
177 REAL(kind=
dp),
DIMENSION(:, :, :),
POINTER :: pos => null()
178 REAL(kind=
dp),
DIMENSION(:, :, :),
POINTER :: savepos => null()
179 REAL(kind=
dp),
DIMENSION(:, :, :),
POINTER :: work => null()
181 INTEGER,
DIMENSION(:),
POINTER :: permutation => null()
182 INTEGER,
DIMENSION(:),
POINTER :: savepermutation => null()
183 INTEGER,
DIMENSION(:),
POINTER :: iperm => null()
184 INTEGER,
DIMENSION(:),
POINTER :: saveiperm => null()
185 INTEGER,
DIMENSION(:),
POINTER :: ptable => null()
186 INTEGER(KIND=int_8) :: accepts = 0_int_8
188 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: tmatrix => null()
189 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: pmatrix => null()
190 REAL(kind=
dp) :: pweight = 0.0_dp
191 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: ipmatrix => null()
192 INTEGER,
DIMENSION(:, :),
POINTER :: nmatrix => null()
194 TYPE(spline_data_type),
POINTER :: vij => null()
195 TYPE(spline_data_type),
POINTER :: u0 => null()
196 TYPE(spline_data_type),
POINTER :: e0 => null()
198 REAL(kind=
dp),
CONTIGUOUS,
DIMENSION(:, :, :),
POINTER :: uoffdiag => null()
199 REAL(kind=
dp),
CONTIGUOUS,
DIMENSION(:, :, :),
POINTER :: eoffdiag => null()
203 REAL(kind=
dp),
DIMENSION(e_num_ids) :: energy_inst = 0.0_dp
204 REAL(kind=
dp),
DIMENSION(e_num_ids) :: energy_avrg = 0.0_dp
205 TYPE(helium_vector_type) :: wnumber = helium_vector_type()
206 TYPE(helium_vector_type) :: wnmber2 = helium_vector_type()
207 TYPE(helium_vector_type) :: proarea = helium_vector_type()
208 TYPE(helium_vector_type) :: prarea2 = helium_vector_type()
209 TYPE(helium_vector_type) :: mominer = helium_vector_type()
210 INTEGER :: averages_iweight = 0
211 LOGICAL :: averages_restarted = .false.
213 REAL(kind=
dp) :: link_action = 0.0_dp, inter_action = 0.0_dp, pair_action = 0.0_dp
216 INTEGER :: rdf_nbin = 0
217 INTEGER :: rdf_iweight = 0
218 INTEGER :: rho_iweight = 0
219 INTEGER :: rdf_num = 0
220 INTEGER :: rdf_num_ctr = 0
221 REAL(kind=
dp) :: rdf_delr = 0.0_dp
222 REAL(kind=
dp) :: rdf_maxr = 0.0_dp
223 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: rdf_centers => null()
224 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: rdf_inst => null()
225 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: rdf_rstr => null()
226 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: rdf_accu => null()
227 LOGICAL :: rdf_present = .false.
228 LOGICAL :: rdf_sol_he = .false.
229 LOGICAL :: rdf_he_he = .false.
231 INTEGER :: rho_nbin = 0
232 INTEGER :: rho_num_act = 0
233 INTEGER :: rho_num_min_len_wdg = 0
234 INTEGER :: rho_num_min_len_non = 0
235 INTEGER :: rho_num_min_len_all = 0
236 INTEGER,
DIMENSION(:),
POINTER :: rho_min_len_wdg_vals => null()
237 INTEGER,
DIMENSION(:),
POINTER :: rho_min_len_non_vals => null()
238 INTEGER,
DIMENSION(:),
POINTER :: rho_min_len_all_vals => null()
239 REAL(kind=
dp) :: rho_delr = 0.0_dp, rho_maxr = 0.0_dp
240 REAL(kind=
dp),
DIMENSION(:, :, :, :),
POINTER :: rho_inst => null()
241 REAL(kind=
dp),
DIMENSION(:, :, :, :),
POINTER :: rho_rstr => null()
242 REAL(kind=
dp),
DIMENSION(:, :, :, :),
POINTER :: rho_accu => null()
243 LOGICAL :: rho_present = .false.
244 REAL(kind=
dp),
DIMENSION(:, :, :),
POINTER :: rho_incr => null()
246 TYPE(density_properties_type),
DIMENSION(:),
POINTER :: rho_property => null()
248 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: num_accepted => null()
255 REAL(kind=
dp),
DIMENSION(:),
POINTER :: plength_avrg => null()
256 REAL(kind=
dp),
DIMENSION(:),
POINTER :: plength_inst => null()
257 INTEGER,
DIMENSION(:),
POINTER :: atom_plength => null()
259 TYPE(rng_stream_type),
POINTER :: rng_stream_uniform => null()
260 TYPE(rng_stream_type),
POINTER :: rng_stream_gaussian => null()
264 LOGICAL :: solute_present = .false.
265 INTEGER :: solute_atoms = 0
266 INTEGER :: solute_beads = 0
267 INTEGER :: get_helium_forces = 0
268 CHARACTER(LEN=2),
DIMENSION(:),
POINTER :: solute_element => null()
269 TYPE(cell_type),
POINTER :: solute_cell => null()
270 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: force_avrg => null()
271 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: force_inst => null()
272 CHARACTER(LEN=2),
DIMENSION(:),
POINTER :: ename => null()
274 INTEGER :: solute_interaction = 0
276 LOGICAL :: interaction_pot_scan = .false.
278 TYPE(nnp_type),
POINTER :: nnp => null()
279 REAL(kind=
dp),
DIMENSION(:),
POINTER :: nnp_sr_cut => null()
283 INTEGER,
DIMENSION(:),
POINTER :: itmp_atoms_1d => null()
284 INTEGER,
DIMENSION(:),
POINTER :: itmp_atoms_np_1d => null()
285 REAL(kind=
dp),
DIMENSION(:),
POINTER :: rtmp_3_np_1d => null()
286 REAL(kind=
dp),
DIMENSION(:),
POINTER :: rtmp_p_ndim_1d => null()
287 REAL(kind=
dp),
DIMENSION(:),
POINTER :: rtmp_p_ndim_np_1d => null()
288 REAL(kind=
dp),
DIMENSION(:),
POINTER :: rtmp_3_atoms_beads_1d => null()
289 REAL(kind=
dp),
DIMENSION(:),
POINTER :: rtmp_3_atoms_beads_np_1d => null()
290 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: rtmp_p_ndim_2d => null()
291 LOGICAL,
DIMENSION(:, :, :),
POINTER :: ltmp_3_atoms_beads_3d => null()
292 LOGICAL,
DIMENSION(:),
POINTER :: ltmp_atoms_1d => null()
294 END TYPE helium_solvent_type
300 TYPE helium_solvent_p_type
301 TYPE(helium_solvent_type),
POINTER :: helium => null()
302 TYPE(mp_para_env_type),
POINTER :: comm => null()
303 INTEGER,
DIMENSION(:),
POINTER :: env_all => null()
304 END TYPE helium_solvent_p_type
311 TYPE density_properties_type
314 CHARACTER(len=default_string_length) :: name =
""
317 LOGICAL :: is_calculated = .false.
320 INTEGER :: num_components = 0
323 CHARACTER(len=default_string_length),
DIMENSION(:),
POINTER :: filename_suffix => null()
326 CHARACTER(len=default_string_length),
DIMENSION(:),
POINTER :: component_name => null()
329 INTEGER,
DIMENSION(:),
POINTER :: component_index => null()
331 END TYPE density_properties_type
340 INTEGER,
DIMENSION(:),
POINTER :: iap => null()
350 REAL(kind=
dp),
DIMENSION(:),
POINTER :: rap => null()
351 END TYPE real_arr_ptr
364 TYPE(int_arr_ptr),
DIMENSION(:),
POINTER :: int_arr_p
370 DO ip = 1,
SIZE(int_arr_p)
371 IF (
ASSOCIATED(int_arr_p(ip)%iap))
THEN
372 DEALLOCATE (int_arr_p(ip)%iap)
377 IF (
ASSOCIATED(int_arr_p))
THEN
378 DEALLOCATE (int_arr_p)
391 SUBROUTINE helium_destroy_real_arr_ptr(real_arr_p)
393 TYPE(real_arr_ptr),
DIMENSION(:),
POINTER :: real_arr_p
399 IF (.NOT.
ASSOCIATED(real_arr_p))
THEN
404 DO ip = 1,
SIZE(real_arr_p)
405 IF (
ASSOCIATED(real_arr_p(ip)%rap))
THEN
406 DEALLOCATE (real_arr_p(ip)%rap)
411 IF (
ASSOCIATED(real_arr_p))
THEN
412 DEALLOCATE (real_arr_p)
416 END SUBROUTINE helium_destroy_real_arr_ptr
Handles all functions related to the CELL.
various routines to log and control the output. The idea is that decisions about where to log should ...
Data types representing superfluid helium.
integer, parameter, public e_id_potential
integer, parameter, public e_id_thermo
integer, parameter, public rho_moment_of_inertia
integer, parameter, public rho_winding_number
integer, parameter, public rho_atom_number
density function identifier names
integer, parameter, public rho_winding_cycle
integer, parameter, public rho_projected_area
integer, parameter, public e_id_virial
integer, parameter, public e_num_ids
Number of energy contributions for static array allocation.
subroutine, public helium_destroy_int_arr_ptr(int_arr_p)
Deallocate all arrays pointed to by the pointers stored in the integer pointer array.
integer, parameter, public e_id_interact
integer, parameter, public e_id_kinetic
integer, parameter, public e_id_total
Energy contributions - symbolic names for indexing energy arrays.
integer, parameter, public rho_num
number of density function identifiers
Defines the basic variable types.
integer, parameter, public int_8
integer, parameter, public dp
integer, parameter, public default_string_length
Interface to the message passing library MPI.
Data types for neural network potentials.
Parallel (pseudo)random number generator (RNG) for multiple streams and substreams of random numbers.
routines for handling splines_types