30#include "./base/base_uses.f90"
36 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'qmmm_pw_grid'
37 INTEGER :: qmmm_grid_tag = 0
55 INTEGER :: auxbas_grid, ilevel, pw_mode
56 REAL(kind=
dp),
DIMENSION(3) :: maxdr, mindr
67 auxbas_grid=auxbas_grid)
69 IF (
ASSOCIATED(qmmm_env%aug_pools))
THEN
72 ALLOCATE (qmmm_env%aug_pools(
SIZE(pw_pools)))
74 DO ilevel = 1,
SIZE(pw_pools)
75 NULLIFY (pool, qmmm_env%aug_pools(ilevel)%pool)
76 pool => pw_pools(ilevel)%pool
84 CALL pw_grid_create_copy_no_pbc(pool%pw_grid, el_struct, &
89 maxdr = max(maxdr, el_struct%dr)
90 mindr = min(mindr, el_struct%dr)
91 IF (all(maxdr .EQ. el_struct%dr)) qmmm_env%gridlevel_info%coarser_grid = ilevel
92 IF (all(mindr .EQ. el_struct%dr)) qmmm_env%gridlevel_info%auxbas_grid = ilevel
115 SUBROUTINE pw_grid_create_copy_no_pbc(pw_grid_in, pw_grid_out, pw_mode)
117 INTEGER,
INTENT(IN),
OPTIONAL :: pw_mode
119 INTEGER :: pw_mode_loc
120 INTEGER,
ALLOCATABLE,
DIMENSION(:) :: pos_of_x
122 cpassert(pw_grid_in%ngpts_cut > 0)
123 cpassert(.NOT.
ASSOCIATED(pw_grid_out))
124 pw_mode_loc = pw_grid_in%para%mode
125 IF (
PRESENT(pw_mode)) pw_mode_loc = pw_mode
127 ALLOCATE (pw_grid_out)
128 CALL pw_grid_out%para%group%from_dup(pw_grid_in%para%group)
129 qmmm_grid_tag = qmmm_grid_tag + 1
130 pw_grid_out%id_nr = qmmm_grid_tag
131 pw_grid_out%ref_count = 1
132 pw_grid_out%reference = 0
133 pw_grid_out%bounds = pw_grid_in%bounds
134 pw_grid_out%bounds(2, :) = pw_grid_out%bounds(2, :) + 1
136 pw_grid_out%bounds_local = pw_grid_in%bounds_local
137 IF (pw_grid_in%bounds_local(2, 1) == pw_grid_in%bounds(2, 1) .AND. &
138 pw_grid_in%bounds_local(1, 1) <= pw_grid_in%bounds(2, 1))
THEN
139 pw_grid_out%bounds_local(2, 1) = pw_grid_out%bounds_local(2, 1) + 1
141 pw_grid_out%bounds_local(2, 2) = pw_grid_out%bounds_local(2, 2) + 1
142 pw_grid_out%bounds_local(2, 3) = pw_grid_out%bounds_local(2, 3) + 1
144 pw_grid_out%bounds_local = pw_grid_out%bounds
146 pw_grid_out%npts = pw_grid_in%npts + 1
147 pw_grid_out%ngpts = product(int(pw_grid_out%npts, kind=
int_8))
148 pw_grid_out%ngpts_cut = 0
149 pw_grid_out%npts_local = pw_grid_out%bounds_local(2, :) - pw_grid_out%bounds_local(1, :) + 1
150 pw_grid_out%ngpts_local = product(pw_grid_out%npts_local)
151 pw_grid_out%ngpts_cut_local = 0
152 pw_grid_out%dr = pw_grid_in%dr
153 pw_grid_out%dh = pw_grid_in%dh
154 pw_grid_out%dh_inv = pw_grid_in%dh_inv
155 pw_grid_out%orthorhombic = pw_grid_in%orthorhombic
156 pw_grid_out%dvol = pw_grid_in%dvol
157 pw_grid_out%vol = pw_grid_in%vol*real(pw_grid_out%ngpts,
dp) &
158 /real(pw_grid_in%ngpts,
dp)
159 pw_grid_out%cutoff = pw_grid_in%cutoff
162 pw_grid_out%para%mode = pw_mode_loc
163 ALLOCATE (pos_of_x(pw_grid_out%bounds(1, 1):pw_grid_out%bounds(2, 1)))
164 pos_of_x(:pw_grid_out%bounds(2, 1) - 1) = pw_grid_in%para%pos_of_x
165 pos_of_x(pw_grid_out%bounds(2, 1)) = pos_of_x(pw_grid_out%bounds(2, 1) - 1)
166 CALL move_alloc(pos_of_x, pw_grid_out%para%pos_of_x)
168 NULLIFY (pw_grid_out%g, pw_grid_out%gsq)
169 cpassert(pw_grid_in%grid_span ==
fullspace)
170 pw_grid_out%grid_span = pw_grid_in%grid_span
171 pw_grid_out%have_g0 = .false.
172 pw_grid_out%first_gne0 = huge(0)
173 NULLIFY (pw_grid_out%gidx)
174 pw_grid_out%spherical = .false.
175 pw_grid_out%para%ray_distribution = .false.
176 pw_grid_out%para%blocked = .false.
177 END SUBROUTINE pw_grid_create_copy_no_pbc
Defines the basic variable types.
integer, parameter, public int_8
integer, parameter, public dp
container for various plainwaves related things
subroutine, public pw_env_get(pw_env, pw_pools, cube_info, gridlevel_info, auxbas_pw_pool, auxbas_grid, auxbas_rs_desc, auxbas_rs_grid, rs_descs, rs_grids, xc_pw_pool, vdw_pw_pool, poisson_env, interp_section)
returns the various attributes of the pw env
integer, parameter, public pw_mode_local
integer, parameter, public fullspace
integer, parameter, public pw_mode_distributed
This module defines the grid data type and some basic operations on it.
subroutine, public pw_grid_release(pw_grid)
releases the given pw grid
Manages a pool of grids (to be used for example as tmp objects), but can also be used to instantiate ...
subroutine, public pw_pools_dealloc(pools)
deallocates the given pools (releasing each of the underlying pools)
subroutine, public pw_pool_create(pool, pw_grid, max_cache)
creates a pool for pw
sets variables for the qmmm pool of pw_types
subroutine, public qmmm_pw_grid_init(qmmm_env, pw_env)
Initialize the qmmm pool of pw_r3d_rs_type. Then Main difference w.r.t. QS pw_r3d_rs_type pools is th...
contained for different pw related things
to create arrays of pools
Manages a pool of grids (to be used for example as tmp objects), but can also be used to instantiate ...