Line data Source code
1 : !--------------------------------------------------------------------------------------------------!
2 : ! CP2K: A general program to perform molecular dynamics simulations !
3 : ! Copyright 2000-2025 CP2K developers group <https://cp2k.org> !
4 : ! !
5 : ! SPDX-License-Identifier: GPL-2.0-or-later !
6 : !--------------------------------------------------------------------------------------------------!
7 :
8 : ! **************************************************************************************************
9 : !> \note
10 : !> Routine to initialize a real space grid from a given input section
11 : !> \par History
12 : !> 01.2014 moved routine from realspace_grid_types into separate file.
13 : !> \author Ole Schuett
14 : ! **************************************************************************************************
15 : MODULE cp_realspace_grid_init
16 : USE input_section_types, ONLY: section_vals_get,&
17 : section_vals_type,&
18 : section_vals_val_get
19 : USE realspace_grid_types, ONLY: realspace_grid_input_type,&
20 : rsgrid_automatic,&
21 : rsgrid_replicated
22 : #include "./base/base_uses.f90"
23 :
24 : IMPLICIT NONE
25 :
26 : PRIVATE
27 :
28 : PUBLIC :: init_input_type
29 :
30 : CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'cp_realspace_grid_init'
31 :
32 : CONTAINS
33 :
34 : ! **************************************************************************************************
35 : !> \brief parses an input section to assign the proper values to the input type
36 : !> \param input_settings ...
37 : !> \param nsmax ...
38 : !> \param rs_grid_section ...
39 : !> \param ilevel ...
40 : !> \param higher_grid_layout the layout of a higher level grid. layouts with
41 : !> negative or zero values are ignored
42 : !> \par History
43 : !> 01.2008 created [Joost VandeVondele]
44 : !> \note
45 : !> if rs_grid_section is not present we setup for an replicated setup
46 : ! **************************************************************************************************
47 129304 : SUBROUTINE init_input_type(input_settings, nsmax, rs_grid_section, ilevel, higher_grid_layout)
48 : TYPE(realspace_grid_input_type), INTENT(OUT) :: input_settings
49 : INTEGER, INTENT(IN) :: nsmax
50 : TYPE(section_vals_type), OPTIONAL, POINTER :: rs_grid_section
51 : INTEGER, INTENT(IN) :: ilevel
52 : INTEGER, DIMENSION(3), INTENT(IN) :: higher_grid_layout
53 :
54 : INTEGER :: isection, max_distributed_level, nsection
55 32326 : INTEGER, DIMENSION(:), POINTER :: tmp
56 :
57 32326 : IF (PRESENT(rs_grid_section)) THEN
58 32326 : input_settings%nsmax = nsmax
59 : ! we use the section corresponding to the level, or the largest available one
60 : ! i.e. the last section defines all following ones
61 32326 : CALL section_vals_get(rs_grid_section, n_repetition=nsection)
62 32326 : isection = MAX(1, MIN(ilevel, nsection))
63 : CALL section_vals_val_get(rs_grid_section, "DISTRIBUTION_TYPE", &
64 : i_rep_section=isection, &
65 32326 : i_val=input_settings%distribution_type)
66 : CALL section_vals_val_get(rs_grid_section, "DISTRIBUTION_LAYOUT", &
67 : i_rep_section=isection, &
68 32326 : i_vals=tmp)
69 129304 : input_settings%distribution_layout = tmp
70 : CALL section_vals_val_get(rs_grid_section, "MEMORY_FACTOR", &
71 : i_rep_section=isection, &
72 32326 : r_val=input_settings%memory_factor)
73 : CALL section_vals_val_get(rs_grid_section, "HALO_REDUCTION_FACTOR", &
74 : i_rep_section=isection, &
75 32326 : r_val=input_settings%halo_reduction_factor)
76 : CALL section_vals_val_get(rs_grid_section, "LOCK_DISTRIBUTION", &
77 : i_rep_section=isection, &
78 32326 : l_val=input_settings%lock_distribution)
79 : CALL section_vals_val_get(rs_grid_section, "MAX_DISTRIBUTED_LEVEL", &
80 : i_rep_section=isection, &
81 32326 : i_val=max_distributed_level)
82 :
83 : ! multigrids that are to coarse are not distributed in the automatic scheme
84 32326 : IF (input_settings%distribution_type == rsgrid_automatic) THEN
85 31620 : IF (ilevel > max_distributed_level) THEN
86 13078 : input_settings%distribution_type = rsgrid_replicated
87 : END IF
88 : END IF
89 : END IF
90 32326 : IF (input_settings%lock_distribution) THEN
91 32704 : IF (ALL(higher_grid_layout > 0)) input_settings%distribution_layout = higher_grid_layout
92 : END IF
93 32326 : END SUBROUTINE init_input_type
94 :
95 : END MODULE cp_realspace_grid_init
|