(git:f7b9015)
Loading...
Searching...
No Matches
cell_opt_types.F
Go to the documentation of this file.
1!--------------------------------------------------------------------------------------------------!
2! CP2K: A general program to perform molecular dynamics simulations !
3! Copyright 2000-2026 CP2K developers group <https://cp2k.org> !
4! !
5! SPDX-License-Identifier: GPL-2.0-or-later !
6!--------------------------------------------------------------------------------------------------!
7
8! **************************************************************************************************
9!> \brief Contains type used for a Simulation Cell Optimization
10!> \par History
11!> none
12!> \author Teodoro Laino - created [tlaino] - 03.2008 - Zurich University
13! **************************************************************************************************
15
16 USE cell_manifold_utils, ONLY: &
27 USE cell_types, ONLY: cell_clone,&
38 USE input_constants, ONLY: fix_none
42 USE kinds, ONLY: default_string_length,&
43 dp
45#include "../base/base_uses.f90"
46
47 IMPLICIT NONE
48 PRIVATE
49
50 CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'cell_opt_types'
51 REAL(KIND=dp), PARAMETER, PRIVATE :: canonical_frame_warn_tol = 1.0e-6_dp
52
53 PUBLIC :: cell_opt_env_type, &
58
59! **************************************************************************************************
60!> \brief Type containing all informations abour the simulation cell optimization
61!> \par History
62!> none
63!> \author Teodoro Laino - created [tlaino] - 03.2008 - Zurich University
64! **************************************************************************************************
66 ! Simulation cell optimization parameters
67 ! Bit mask of cell components and angles from CONSTRAINT (comp_* and gfix_*, 0 = fix_none).
68 INTEGER :: constraint_id = fix_none
69 LOGICAL :: keep_angles = .false., &
70 keep_symmetry = .false., &
71 keep_volume = .false.
72 REAL(kind=dp) :: pres_ext = 0.0_dp, pres_int = 0.0_dp, pres_tol = 0.0_dp, pres_constr = 0.0_dp
73 REAL(kind=dp), DIMENSION(3, 3) :: mtrx = 0.0_dp
74 ! Fixed rotations between the user's Cartesian frame and the canonical
75 ! frame used for the six independent cell optimization variables.
76 REAL(kind=dp), DIMENSION(3, 3) :: input_to_opt = 0.0_dp, &
77 opt_to_input = 0.0_dp
78 TYPE(cell_type), POINTER :: opt_cell => null()
79 ! Active cell constraints and reduced-coordinate chart.
80 TYPE(cell_manifold_type) :: manifold
81 END TYPE cell_opt_env_type
82
83CONTAINS
84
85! **************************************************************************************************
86!> \brief ...
87!> \param cell_env ...
88!> \param force_env ...
89!> \param geo_section ...
90!> \par History
91!> none
92!> \author Teodoro Laino - created [tlaino] - 03.2008 - Zurich University
93! **************************************************************************************************
94 SUBROUTINE cell_opt_env_create(cell_env, force_env, geo_section)
95 TYPE(cell_opt_env_type), INTENT(OUT) :: cell_env
96 TYPE(force_env_type), POINTER :: force_env
97 TYPE(section_vals_type), POINTER :: geo_section
98
99 CHARACTER(LEN=default_string_length) :: label
100 CHARACTER(LEN=default_string_length), &
101 DIMENSION(:), POINTER :: canonical_tokens, constraint_tokens
102 INTEGER :: i, output_unit
103 LOGICAL :: constraint_explicit, &
104 has_frame_dep_constraint
105 TYPE(cell_type), POINTER :: cell
106 TYPE(cp_logger_type), POINTER :: logger
107
108 NULLIFY (cell_env%opt_cell, cell, canonical_tokens, constraint_tokens)
109 CALL force_env_get(force_env, cell=cell)
110 CALL cell_create(cell_env%opt_cell)
111 CALL cell_clone(cell, cell_env%opt_cell, tag="CELL_OPT_CANONICAL")
112 CALL canonicalize_cell_matrix(cell_env%opt_cell)
113 ! Keep the physical cell in the input orientation while the optimizer
114 ! works with the canonical cell and its six non-redundant components.
115 cell_env%input_to_opt = matmul(cell_env%opt_cell%hmat, cell%h_inv)
116 cell_env%opt_to_input = matmul(cell%hmat, cell_env%opt_cell%h_inv)
117 CALL section_vals_val_get(geo_section, "KEEP_VOLUME", l_val=cell_env%keep_volume)
118 CALL section_vals_val_get(geo_section, "KEEP_ANGLES", l_val=cell_env%keep_angles)
119 CALL section_vals_val_get(geo_section, "KEEP_SYMMETRY", l_val=cell_env%keep_symmetry)
120 CALL section_vals_val_get(geo_section, "PRESSURE_TOLERANCE", r_val=cell_env%pres_tol)
121 CALL section_vals_val_get(geo_section, "CONSTRAINT", &
122 c_vals=constraint_tokens, explicit=constraint_explicit)
123 CALL parse_cell_constraint(constraint_tokens, cell, constraint_explicit, &
124 cell_env%constraint_id)
125
126 IF (cell_env%keep_symmetry .AND. cell_env%opt_cell%symmetry_id == cell_sym_none) THEN
127 ! &SUBSYS/&CELL SYMMETRY defaults to NONE and is never auto-detected.
128 CALL cp_warn(__location__, &
129 "CELL_OPT: KEEP_SYMMETRY is active, but &SUBSYS/&CELL SYMMETRY "// &
130 "is NONE. CELL_OPT applies no symmetry constraint. Set "// &
131 "&SUBSYS/&CELL SYMMETRY to specify the crystal system.")
132 END IF
133
134 has_frame_dep_constraint = (.NOT. constraint_explicit .AND. &
135 cell_env%constraint_id /= fix_none)
136 ! Only for explicitly set values: an unset keyword must stay unparsed so
137 ! the restart echo keeps omitting the line, as it always has.
138 IF (constraint_explicit) THEN
139 ALLOCATE (canonical_tokens(SIZE(constraint_tokens)))
140 canonical_tokens = constraint_tokens
141 CALL uppercase(canonical_tokens)
142 DO i = 1, SIZE(canonical_tokens)
143 SELECT CASE (trim(adjustl(canonical_tokens(i))))
144 CASE ("NONE", "A", "B", "C", "ALPHA", "BETA", "GAMMA")
145 CONTINUE
146 CASE DEFAULT
147 has_frame_dep_constraint = .true.
148 END SELECT
149 END DO
150 CALL section_vals_val_set(geo_section, "CONSTRAINT", c_vals_ptr=canonical_tokens)
151 END IF
152
153 IF (has_frame_dep_constraint .AND. &
154 maxval(abs(cell%hmat - cell_env%opt_cell%hmat)) > &
155 canonical_frame_warn_tol*max(1.0_dp, maxval(abs(cell%hmat)))) THEN
156 CALL cp_warn(__location__, &
157 "CELL_OPT: Axis and component constraints act on the canonical "// &
158 "upper-triangular cell, not on the rotated input axes.")
159 END IF
160
161 ! Get the external pressure
162 CALL read_external_press_tensor(geo_section, cell_env%opt_cell, cell_env%pres_ext, &
163 cell_env%mtrx, cell_env%input_to_opt)
164
165 ! Print cell optimisation setup
166 NULLIFY (logger)
167 logger => cp_get_default_logger()
168 output_unit = cp_print_key_unit_nr(logger, geo_section, "PRINT%CELL", extension=".Log")
169 IF (output_unit > 0) THEN
170 WRITE (unit=output_unit, fmt="(/,T2,A,T61,F20.1)") &
171 "CELL_OPT| Pressure tolerance [bar]: ", cp_unit_from_cp2k(cell_env%pres_tol, "bar")
172 IF (cell_env%keep_volume) THEN
173 WRITE (unit=output_unit, fmt="(T2,A,T78,A3)") &
174 "CELL_OPT| Keep volume of cell: ", "YES"
175 ELSE
176 WRITE (unit=output_unit, fmt="(T2,A,T78,A3)") &
177 "CELL_OPT| Keep volume of cell: ", " NO"
178 END IF
179 IF (cell_env%keep_angles) THEN
180 WRITE (unit=output_unit, fmt="(T2,A,T78,A3)") &
181 "CELL_OPT| Keep angles between the cell vectors: ", "YES"
182 ELSE
183 WRITE (unit=output_unit, fmt="(T2,A,T78,A3)") &
184 "CELL_OPT| Keep angles between the cell vectors: ", " NO"
185 END IF
186 IF (cell_env%keep_symmetry) THEN
187 WRITE (unit=output_unit, fmt="(T2,A,T78,A3)") &
188 "CELL_OPT| Keep cell symmetry: ", "YES"
189 ELSE
190 WRITE (unit=output_unit, fmt="(T2,A,T78,A3)") &
191 "CELL_OPT| Keep cell symmetry: ", " NO"
192 END IF
193 label = cell_opt_constraint_label(cell_env%constraint_id)
194 IF (count(cell%perd /= 0) == 2 .AND. .NOT. constraint_explicit) THEN
195 label = trim(label)//" (auto)"
196 END IF
197 WRITE (unit=output_unit, fmt="(T2,A,T77,A)") &
198 "CELL_OPT| Constraint: ", trim(label)
199 END IF
200 CALL cp_print_key_finished_output(output_unit, logger, geo_section, "PRINT%CELL")
201
202 END SUBROUTINE cell_opt_env_create
203
204! **************************************************************************************************
205!> \brief Initialize cell constraints from CONSTRAINT, KEEP_SYMMETRY, KEEP_ANGLES, and KEEP_VOLUME.
206!> \param cell_env cell optimization environment to populate
207!> \param emit_warnings optional flag to emit user warnings (default .TRUE.)
208! **************************************************************************************************
209 SUBROUTINE cell_opt_setup_manifold(cell_env, emit_warnings)
210 TYPE(cell_opt_env_type), INTENT(INOUT) :: cell_env
211 LOGICAL, INTENT(IN), OPTIONAL :: emit_warnings
212
213 INTEGER :: angle_bits, info
214 LOGICAL :: do_warn
215 REAL(kind=dp) :: q0(n_slot)
216
217 do_warn = .true.
218 IF (PRESENT(emit_warnings)) do_warn = emit_warnings
219 q0 = cell_manifold_pack_hmat(cell_env%opt_cell%hmat)
220
221 ! Anchor q0 with explicit component rows, then fold explicit angle rows.
222 CALL cell_manifold_init(cell_env%manifold, q0, iand(cell_env%constraint_id, mask_all), info)
223 IF (info /= info_ok) THEN
224 CALL cp_abort(__location__, &
225 "CELL_OPT: initial cell or CONSTRAINT is invalid ("// &
226 trim(cell_manifold_status_label(info))//").")
227 END IF
228 CALL try_add_mask_bits(cell_env%manifold, iand(cell_env%constraint_id, gfix_all), &
229 "CONSTRAINT", do_warn)
230
231 IF (cell_env%keep_symmetry) THEN
232 CALL cell_opt_fold_symmetry_rows(cell_env, cell_env%opt_cell%symmetry_id, &
233 emit_warnings=do_warn)
234 END IF
235
236 IF (cell_env%keep_angles) THEN
237 ! On an orthorhombic cell, BX = CX = CY = 0 fixes all angles to 90 deg.
238 ! Off-diagonal hmat entries stay 0.0_dp so cell%orthorhombic stays TRUE.
239 IF (cell_env%opt_cell%orthorhombic) THEN
240 angle_bits = comp_bx + comp_cx + comp_cy
241 ELSE
242 angle_bits = gfix_alpha + gfix_beta + gfix_gamma
243 END IF
244 CALL try_add_mask_bits(cell_env%manifold, angle_bits, "KEEP_ANGLES", do_warn)
245 END IF
246
247 IF (cell_env%keep_volume) THEN
248 CALL try_add_mask_bits(cell_env%manifold, gfix_v, "KEEP_VOLUME", do_warn)
249 END IF
250
251 END SUBROUTINE cell_opt_setup_manifold
252
253! **************************************************************************************************
254!> \brief Add independent constraint rows for crystal system symmetry_id.
255!> \param cell_env cell optimization environment
256!> \param symmetry_id crystal system identifier (cell_sym_*)
257!> \param emit_warnings optional flag to emit user warnings (default .TRUE.)
258!> \note This routine skips redundant rows and aborts on unresolvable singularities.
259!> When a row is second-order semidefinite at q0, it pins the implied
260!> directions and emits a warning. KEEP_SPACE_GROUP passes the point-group
261!> crystal system here because the point group fixes the same cell metric.
262! **************************************************************************************************
263 SUBROUTINE cell_opt_fold_symmetry_rows(cell_env, symmetry_id, emit_warnings)
264 TYPE(cell_opt_env_type), INTENT(INOUT) :: cell_env
265 INTEGER, INTENT(IN) :: symmetry_id
266 LOGICAL, INTENT(IN), OPTIONAL :: emit_warnings
267
268 INTEGER :: cand_eq_pair(2, n_geom), cand_n_eq, &
269 cand_n_lin, i, info, n_next, &
270 probe_eq_pair(2, n_geom), sym_bits
271 LOGICAL :: do_warn
272 REAL(kind=dp) :: cand_lin_w(n_slot, n_slot), &
273 probe_lin_w(n_slot, n_slot)
274 TYPE(cell_manifold_type) :: m_probe
275
276 do_warn = .true.
277 IF (PRESENT(emit_warnings)) do_warn = emit_warnings
278
279 CALL symmetry_constraint_rows(symmetry_id, sym_bits, cand_lin_w, cand_n_lin, &
280 cand_eq_pair, cand_n_eq)
281 CALL try_add_mask_bits(cell_env%manifold, sym_bits, "symmetry component constraint", do_warn)
282
283 DO i = 1, cand_n_lin
284 n_next = cell_env%manifold%n_lin_rows + 1
285 IF (n_next > n_slot) EXIT
286 probe_lin_w = cell_env%manifold%lin_w
287 probe_lin_w(:, n_next) = cand_lin_w(:, i)
288 CALL cell_manifold_init( &
289 m_probe, cell_env%manifold%q0, cell_env%manifold%mask, info, &
290 lin_w=probe_lin_w(:, 1:n_next), &
291 eq_pair=cell_env%manifold%eq_pair(:, 1:cell_env%manifold%n_eq_rows))
292 IF (info == info_ok) THEN
293 cell_env%manifold = m_probe
294 ELSE
295 CALL resolve_degenerate_constraint(cell_env%manifold, info, &
296 "symmetry linear constraint", 0, do_warn, &
297 lin_w=cand_lin_w(:, i:i))
298 END IF
299 END DO
300
301 DO i = 1, cand_n_eq
302 n_next = cell_env%manifold%n_eq_rows + 1
303 IF (n_next > n_geom - 1) EXIT
304 probe_eq_pair = cell_env%manifold%eq_pair
305 probe_eq_pair(:, n_next) = cand_eq_pair(:, i)
306 CALL cell_manifold_init( &
307 m_probe, cell_env%manifold%q0, cell_env%manifold%mask, info, &
308 lin_w=cell_env%manifold%lin_w(:, 1:cell_env%manifold%n_lin_rows), &
309 eq_pair=probe_eq_pair(:, 1:n_next))
310 IF (info == info_ok) THEN
311 cell_env%manifold = m_probe
312 ELSE
313 CALL resolve_degenerate_constraint(cell_env%manifold, info, &
314 "symmetry equality constraint", 0, do_warn, &
315 eq_pair=cand_eq_pair(:, i:i))
316 END IF
317 END DO
318
319 END SUBROUTINE cell_opt_fold_symmetry_rows
320
321! **************************************************************************************************
322!> \brief Add each independent bit from candidate_bits into m%mask.
323!> \param m active constraint state
324!> \param candidate_bits comp_* or gfix_* flags to test one bit at a time
325!> \param source_label constraint source label for warning and abort messages
326!> \param do_warn .TRUE. to emit a warning when this routine pins a row
327! **************************************************************************************************
328 SUBROUTINE try_add_mask_bits(m, candidate_bits, source_label, do_warn)
329 TYPE(cell_manifold_type), INTENT(INOUT) :: m
330 INTEGER, INTENT(IN) :: candidate_bits
331 CHARACTER(LEN=*), INTENT(IN) :: source_label
332 LOGICAL, INTENT(IN) :: do_warn
333
334 INTEGER :: b, flag, info
335 TYPE(cell_manifold_type) :: m_probe
336
337 DO b = 0, n_constraint_bits - 1
338 flag = ishft(1, b)
339 IF (iand(candidate_bits, flag) /= 0 .AND. iand(m%mask, flag) == 0) THEN
340 CALL cell_manifold_init(m_probe, m%q0, ior(m%mask, flag), info, &
341 lin_w=m%lin_w(:, 1:m%n_lin_rows), &
342 eq_pair=m%eq_pair(:, 1:m%n_eq_rows))
343 IF (info == info_ok) THEN
344 m = m_probe
345 ELSE
346 CALL resolve_degenerate_constraint(m, info, source_label, flag, do_warn)
347 END IF
348 END IF
349 END DO
350
351 END SUBROUTINE try_add_mask_bits
352
353! **************************************************************************************************
354!> \brief Resolve or reject a candidate constraint row that failed LICQ at q0.
355!> \param m active constraint state. This routine updates m when it pins a row.
356!> \param info failure code from cell_manifold_init
357!> \param source_label constraint source label for warning and abort messages
358!> \param mask candidate comp_* or gfix_* bit, or 0 for a lin_w or eq_pair test
359!> \param do_warn .TRUE. to emit a warning when this routine pins a row
360!> \param lin_w optional 6 x 1 column of candidate linear weights
361!> \param eq_pair optional 2 x 1 index pair for a candidate equality
362! **************************************************************************************************
363 SUBROUTINE resolve_degenerate_constraint(m, info, source_label, mask, do_warn, lin_w, eq_pair)
364 TYPE(cell_manifold_type), INTENT(INOUT) :: m
365 INTEGER, INTENT(IN) :: info
366 CHARACTER(LEN=*), INTENT(IN) :: source_label
367 INTEGER, INTENT(IN) :: mask
368 LOGICAL, INTENT(IN) :: do_warn
369 REAL(kind=dp), INTENT(IN), OPTIONAL :: lin_w(:, :)
370 INTEGER, INTENT(IN), OPTIONAL :: eq_pair(:, :)
371
372 INTEGER :: old_mask, old_n_lin, pinned_bits
373 LOGICAL :: is_pinned
374
375 IF (info == info_licq) THEN
376 old_mask = m%mask
377 old_n_lin = m%n_lin_rows
378 CALL cell_manifold_pin_semidefinite(m, mask, is_pinned, lin_w=lin_w, eq_pair=eq_pair)
379 IF (is_pinned) THEN
380 IF (do_warn) THEN
381 pinned_bits = iand(iand(not(old_mask), m%mask), mask_all)
382 IF (pinned_bits /= 0 .AND. m%n_lin_rows == old_n_lin) THEN
383 CALL cp_warn(__location__, &
384 "CELL_OPT: "//trim(source_label)//" is locally degenerate at "// &
385 "the initial cell. CELL_OPT pins implied cell component(s): "// &
386 trim(adjustl(cell_opt_constraint_label(pinned_bits)))//".")
387 ELSE
388 CALL cp_warn(__location__, &
389 "CELL_OPT: "//trim(source_label)//" is locally degenerate at "// &
390 "the initial cell. CELL_OPT pins implied tangent direction(s).")
391 END IF
392 END IF
393 RETURN
394 END IF
395 IF (cell_manifold_is_redundant(m, mask, lin_w=lin_w, eq_pair=eq_pair)) RETURN
396 END IF
397
398 CALL cp_abort(__location__, &
399 "CELL_OPT: "//trim(source_label)//" is locally degenerate at "// &
400 "the initial cell ("// &
401 trim(cell_manifold_status_label(info))//").")
402
403 END SUBROUTINE resolve_degenerate_constraint
404
405! **************************************************************************************************
406!> \brief ...
407!> \param cell_env ...
408!> \par History
409!> none
410!> \author Teodoro Laino - created [tlaino] - 03.2008 - Zurich University
411! **************************************************************************************************
412 SUBROUTINE cell_opt_env_release(cell_env)
413 TYPE(cell_opt_env_type), INTENT(INOUT) :: cell_env
414
415 CALL cell_release(cell_env%opt_cell)
416
417 END SUBROUTINE cell_opt_env_release
418
419END MODULE cell_opt_types
Reduced-coordinate parameterization of cell constraints for CELL_OPT.
integer, parameter, public comp_cx
integer, parameter, public gfix_gamma
subroutine, public cell_manifold_pin_semidefinite(m, mask, is_pinned, lin_w, eq_pair)
Pin implied directions when a candidate constraint is semidefinite at q0.
integer, parameter, public n_constraint_bits
integer, parameter, public gfix_v
integer, parameter, public n_geom
integer, parameter, public n_slot
integer, parameter, public gfix_all
subroutine, public cell_manifold_init(m, q0, mask, info, lin_w, eq_pair)
Record constraint targets at q0, check row independence, and build [Y, Z].
integer, parameter, public info_licq
integer, parameter, public gfix_beta
logical function, public cell_manifold_is_redundant(m, mask, lin_w, eq_pair)
Test whether one candidate constraint stays zero on manifold m near q0.
integer, parameter, public mask_all
pure character(len=default_string_length) function, public cell_manifold_status_label(info)
Return a short description of a cell_manifold_utils status code.
pure real(kind=dp) function, dimension(n_slot), public cell_manifold_pack_hmat(hmat)
Pack the upper-triangular canonical cell matrix into q(1:6).
integer, parameter, public comp_bx
integer, parameter, public comp_cy
integer, parameter, public gfix_alpha
integer, parameter, public info_ok
Handles all functions related to the CELL.
subroutine, public canonicalize_cell_matrix(cell)
Canonicalize a general cell matrix without changing lengths and angles.
subroutine, public cell_create(cell, hmat, periodic, tag)
allocates and initializes a cell
Contains type used for a Simulation Cell Optimization.
subroutine, public cell_opt_setup_manifold(cell_env, emit_warnings)
Initialize cell constraints from CONSTRAINT, KEEP_SYMMETRY, KEEP_ANGLES, and KEEP_VOLUME.
subroutine, public cell_opt_fold_symmetry_rows(cell_env, symmetry_id, emit_warnings)
Add independent constraint rows for crystal system symmetry_id.
subroutine, public cell_opt_env_release(cell_env)
...
subroutine, public cell_opt_env_create(cell_env, force_env, geo_section)
...
Parse CELL_OPT constraints, build symmetry constraint rows, and compute the cell enthalpy gradient.
subroutine, public parse_cell_constraint(constraint_tokens, cell, explicit, mask)
Parses the tokens of the CONSTRAINT keyword into a cell component mask.
subroutine, public read_external_press_tensor(geo_section, cell, pres_ext, mtrx, input_to_opt)
Reads the external pressure tensor.
subroutine, public symmetry_constraint_rows(symmetry_id, mask, lin_w, n_lin_rows, eq_pair, n_eq_rows)
Translate a crystal system into cell constraint rows.
pure character(len=default_string_length) function, public cell_opt_constraint_label(mask)
Returns the label of the cell constraint mask.
Handles all functions related to the CELL.
Definition cell_types.F:15
subroutine, public cell_release(cell)
releases the given cell (see doc/ReferenceCounting.html)
Definition cell_types.F:704
subroutine, public cell_clone(cell_in, cell_out, tag)
Clone cell variable.
Definition cell_types.F:142
integer, parameter, public cell_sym_none
Definition cell_types.F:29
various routines to log and control the output. The idea is that decisions about where to log should ...
type(cp_logger_type) function, pointer, public cp_get_default_logger()
returns the default logger
routines to handle the output, The idea is to remove the decision of wheter to output and what to out...
subroutine, public cp_print_key_finished_output(unit_nr, logger, basis_section, print_key_path, local, ignore_should_output, on_file, mpi_io)
should be called after you finish working with a unit obtained with cp_print_key_unit_nr,...
integer function, public cp_print_key_unit_nr(logger, basis_section, print_key_path, extension, middle_name, local, log_filename, ignore_should_output, file_form, file_position, file_action, file_status, do_backup, on_file, is_new_file, mpi_io, fout, file_access)
...
unit conversion facility
Definition cp_units.F:30
real(kind=dp) function, public cp_unit_from_cp2k(value, unit_str, defaults, power)
converts from the internal cp2k units to the given unit
Definition cp_units.F:1311
Interface for the force calculations.
recursive subroutine, public force_env_get(force_env, in_use, fist_env, qs_env, meta_env, fp_env, subsys, para_env, potential_energy, additional_potential, kinetic_energy, harmonic_shell, kinetic_shell, cell, sub_force_env, qmmm_env, qmmmx_env, eip_env, pwdft_env, globenv, input, force_env_section, method_name_id, root_section, mixed_env, nnp_env, embed_env, ipi_env)
returns various attributes about the force environment
collects all constants needed in input so that they can be used without circular dependencies
integer, parameter, public fix_none
objects that represent the structure of input sections and the data contained in an input section
subroutine, public section_vals_val_set(section_vals, keyword_name, i_rep_section, i_rep_val, val, l_val, i_val, r_val, c_val, l_vals_ptr, i_vals_ptr, r_vals_ptr, c_vals_ptr)
sets the requested value
subroutine, public section_vals_val_get(section_vals, keyword_name, i_rep_section, i_rep_val, n_rep_val, val, l_val, i_val, r_val, c_val, l_vals, i_vals, r_vals, c_vals, explicit)
returns the requested value
Defines the basic variable types.
Definition kinds.F:23
integer, parameter, public dp
Definition kinds.F:34
integer, parameter, public default_string_length
Definition kinds.F:57
Utilities for string manipulations.
elemental subroutine, public uppercase(string)
Convert all lower case characters in a string to upper case.
Active constraint set and fixed coordinate bases anchored at q0.
Type containing all informations abour the simulation cell optimization.
Type defining parameters related to the simulation cell.
Definition cell_types.F:60
type of a logger, at the moment it contains just a print level starting at which level it should be l...
wrapper to abstract the force evaluation of the various methods