(git:0d88fc2)
Loading...
Searching...
No Matches
pw_poisson_read_input.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 Reading of input parameters for the pw_poisson-modules.
10!> \par History
11!> 01.2014 Code moved into separate module to make pw_poisson-modules
12!> independet from input_section_types and input_constants.
13!> \author Ole Schuett
14! **************************************************************************************************
16 USE cell_types, ONLY: use_perd_none,&
24 USE dirichlet_bc_types, ONLY: xy_plane,&
25 xz_plane,&
31 USE kinds, ONLY: dp
32 USE ps_wavelet_types, ONLY: wavelet0d,&
33 wavelet2d,&
35 USE pw_poisson_types, ONLY: &
39#include "./base/base_uses.f90"
40
41 IMPLICIT NONE
42 PRIVATE
43
44 CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'pw_poisson_read_input'
45
47
48CONTAINS
49
50! **************************************************************************************************
51!> \brief Reads the POISSON input-section and into pw_poisson_parameter_type.
52!> \param poisson_section ...
53!> \param params ...
54!> \par History
55!> 01.2014 Code moved into separate module from pw_poisson_types,
56!> pw_poisson_methods and ps_wavelet_types.
57!> \author Ole Schuett
58! **************************************************************************************************
59 SUBROUTINE pw_poisson_read_parameters(poisson_section, params)
60 TYPE(section_vals_type), POINTER :: poisson_section
61 TYPE(pw_poisson_parameter_type), INTENT(INOUT) :: params
62
63 INTEGER :: periodic
64 TYPE(section_vals_type), POINTER :: mt_section, wavelet_section
65
66 NULLIFY (mt_section, wavelet_section)
67
68 CALL section_vals_val_get(poisson_section, "POISSON_SOLVER", i_val=params%solver)
69
70 ! Decoding PERIODIC depending on chosen solver,
71 ! because not all solvers support every possible periodicity
72 CALL section_vals_val_get(poisson_section, "PERIODIC", i_val=periodic)
73 SELECT CASE (params%solver)
76 CALL decode_periodic_green(periodic, params)
78 CALL decode_periodic_wavelet(periodic, params)
79 CASE (pw_poisson_none)
80 CASE default
81 cpabort("")
82 END SELECT
83
84 ! Set Ewald default to NONE
85 params%ewald_type = do_ewald_none
86
87 ! parsing MT subsection
88 mt_section => section_vals_get_subs_vals(poisson_section, "MT")
89 CALL section_vals_val_get(mt_section, "REL_CUTOFF", r_val=params%mt_rel_cutoff)
90 CALL section_vals_val_get(mt_section, "ALPHA", r_val=params%mt_alpha)
91
92 ! parsing WAVELET subsection
93 wavelet_section => section_vals_get_subs_vals(poisson_section, "WAVELET")
94 CALL section_vals_val_get(wavelet_section, "SCF_TYPE", i_val=params%wavelet_scf_type)
95
96 ! parsing IMPLICIT subsection
97 CALL ps_implicit_read_parameters(poisson_section, params)
98
99 END SUBROUTINE pw_poisson_read_parameters
100
101! **************************************************************************************************
102!> \brief Helper routien for pw_poisson_read_parameters
103!> \param periodic ...
104!> \param params ...
105!> \author Ole Schuett
106! **************************************************************************************************
107 SUBROUTINE decode_periodic_green(periodic, params)
108 INTEGER, INTENT(IN) :: periodic
109 TYPE(pw_poisson_parameter_type), INTENT(INOUT) :: params
110
111 SELECT CASE (periodic)
112 CASE (use_perd_x)
113 params%periodic = [1, 0, 0]
114 CASE (use_perd_y)
115 params%periodic = [0, 1, 0]
116 CASE (use_perd_z)
117 params%periodic = [0, 0, 1]
118 CASE (use_perd_xy)
119 params%periodic = [1, 1, 0]
120 CASE (use_perd_xz)
121 params%periodic = [1, 0, 1]
122 CASE (use_perd_yz)
123 params%periodic = [0, 1, 1]
124 CASE (use_perd_xyz)
125 params%periodic = [1, 1, 1]
126 CASE (use_perd_none)
127 params%periodic = [0, 0, 0]
128 CASE DEFAULT
129 cpabort("")
130 END SELECT
131 ! check for consistent use of periodicity (cell <-> Poisson solver)
132 !CPPostcondition(ALL(perd == cell%perd),cp_fatal_level,routineP,failure)
133
134 END SUBROUTINE decode_periodic_green
135
136! **************************************************************************************************
137!> \brief Helper routien for pw_poisson_read_parameters
138!> \param periodic ...
139!> \param params ...
140!> \author Ole Schuett
141! **************************************************************************************************
142 SUBROUTINE decode_periodic_wavelet(periodic, params)
143 INTEGER, INTENT(IN) :: periodic
144 TYPE(pw_poisson_parameter_type), INTENT(INOUT) :: params
145
146 params%wavelet_special_dimension = 0
147
148 SELECT CASE (periodic)
149 CASE (use_perd_none)
150 params%periodic = [0, 0, 0]
151 params%wavelet_geocode = "F"
152 params%wavelet_method = wavelet0d
153 CASE (use_perd_xy)
154 params%periodic = [1, 1, 0]
155 params%wavelet_geocode = "S"
156 params%wavelet_method = wavelet2d
157 params%wavelet_special_dimension = 3
158 CASE (use_perd_xz)
159 params%periodic = [1, 0, 1]
160 params%wavelet_geocode = "S"
161 params%wavelet_method = wavelet2d
162 params%wavelet_special_dimension = 2
163 CASE (use_perd_yz)
164 params%periodic = [0, 1, 1]
165 params%wavelet_geocode = "S"
166 params%wavelet_method = wavelet2d
167 params%wavelet_special_dimension = 1
168 CASE (use_perd_xyz)
169 params%periodic = [1, 1, 1]
170 params%wavelet_geocode = "P"
171 params%wavelet_method = wavelet3d
173 cpabort("Poisson solver for this periodicity not yet implemented")
174 CASE DEFAULT
175 cpabort("")
176 END SELECT
177
178 END SUBROUTINE decode_periodic_wavelet
179
180! **************************************************************************************************
181!> \brief Reads the subsection IMPLICIT and initializes corresponding parameters in
182!> pw_poisson_parameter_type
183!> \param poisson_section poisson section to be read from input
184!> \param params poisson_env parameters
185!> \par History
186!> 08.2014 created [Hossein Bani-Hashemian]
187!> \author Mohammad Hossein Bani-Hashemian
188! **************************************************************************************************
189 SUBROUTINE ps_implicit_read_parameters(poisson_section, params)
190 TYPE(section_vals_type), POINTER :: poisson_section
191 TYPE(pw_poisson_parameter_type), INTENT(INOUT) :: params
192
193 LOGICAL :: has_dielectric
194 TYPE(section_vals_type), POINTER :: dbc_section, dielectric_section, &
195 ps_implicit_section
196
197 NULLIFY (ps_implicit_section, dielectric_section, dbc_section)
198
199 ! parsing IMPLICIT subsection
200 ps_implicit_section => section_vals_get_subs_vals(poisson_section, "IMPLICIT")
201 CALL section_vals_val_get(ps_implicit_section, "BOUNDARY_CONDITIONS", &
202 i_val=params%ps_implicit_params%boundary_condition)
203 CALL section_vals_val_get(ps_implicit_section, "ZERO_INITIAL_GUESS", &
204 l_val=params%ps_implicit_params%zero_initial_guess)
205 CALL section_vals_val_get(ps_implicit_section, "max_iter", i_val=params%ps_implicit_params%max_iter)
206 CALL section_vals_val_get(ps_implicit_section, "tol", r_val=params%ps_implicit_params%tol)
207 CALL section_vals_val_get(ps_implicit_section, "omega", r_val=params%ps_implicit_params%omega)
208 CALL section_vals_val_get(ps_implicit_section, "neumann_directions", &
209 i_val=params%ps_implicit_params%neumann_directions)
210
211 ! parsing DIELECTRIC subsection
212 dielectric_section => section_vals_get_subs_vals(ps_implicit_section, "DIELECTRIC")
213 CALL section_vals_get(dielectric_section, explicit=has_dielectric)
214 params%has_dielectric = has_dielectric
215 CALL dielectric_read_parameters(dielectric_section, params)
216
217 ! parsing DIRICHLET_BC subsection
218 dbc_section => section_vals_get_subs_vals(ps_implicit_section, "DIRICHLET_BC")
219 CALL dirichlet_bc_read_parameters(dbc_section, params)
220
221 END SUBROUTINE ps_implicit_read_parameters
222
223! **************************************************************************************************
224!> \brief Reads the subsection DIELECTRIC and initializes corresponding parameters in
225!> pw_poisson_parameter_type
226!> \param dielectric_section dielectric section to be read from input
227!> \param params poisson_env parameters
228!> \par History
229!> 07.2015 created [Hossein Bani-Hashemian]
230!> \author Mohammad Hossein Bani-Hashemian
231! **************************************************************************************************
232 SUBROUTINE dielectric_read_parameters(dielectric_section, params)
233 TYPE(section_vals_type), POINTER :: dielectric_section
234 TYPE(pw_poisson_parameter_type), INTENT(INOUT) :: params
235
236 INTEGER :: i, n_aac_rep, n_xaaa_rep
237 LOGICAL :: aa_cuboidal_explicit, &
238 xaa_annular_explicit
239 REAL(dp) :: eps, zeta
240 REAL(dp), DIMENSION(:), POINTER :: aa_cuboidal_xxtnt, aa_cuboidal_yxtnt, aa_cuboidal_zxtnt, &
241 xaa_annular_bctr, xaa_annular_brad, xaa_annular_xxtnt
242 TYPE(section_vals_type), POINTER :: aa_cuboidal_section, xaa_annular_section
243
244 CALL section_vals_val_get(dielectric_section, "DIELECTRIC_CORE_CORRECTION", &
245 l_val=params%dielectric_params%dielec_core_correction)
246 CALL section_vals_val_get(dielectric_section, "DIELECTRIC_FUNCTION_TYPE", &
247 i_val=params%dielectric_params%dielec_functiontype)
248 CALL section_vals_val_get(dielectric_section, "epsilon", r_val=params%dielectric_params%eps0)
249 CALL section_vals_val_get(dielectric_section, "rho_min", r_val=params%dielectric_params%rho_min)
250 CALL section_vals_val_get(dielectric_section, "rho_max", r_val=params%dielectric_params%rho_max)
251 CALL section_vals_val_get(dielectric_section, "DERIVATIVE_METHOD", &
252 i_val=params%dielectric_params%derivative_method)
253
254 aa_cuboidal_section => section_vals_get_subs_vals(dielectric_section, "DIELEC_AA_CUBOIDAL")
255 xaa_annular_section => section_vals_get_subs_vals(dielectric_section, "DIELEC_XAA_ANNULAR")
256 CALL section_vals_get(aa_cuboidal_section, explicit=aa_cuboidal_explicit, n_repetition=n_aac_rep)
257 CALL section_vals_get(xaa_annular_section, explicit=xaa_annular_explicit, n_repetition=n_xaaa_rep)
258
259 IF (params%solver == pw_poisson_implicit) THEN
260
261 IF (aa_cuboidal_explicit) THEN
262 params%dielectric_params%n_aa_cuboidal = n_aac_rep
263 ALLOCATE (params%dielectric_params%aa_cuboidal_xxtnt(2, n_aac_rep), &
264 params%dielectric_params%aa_cuboidal_yxtnt(2, n_aac_rep), &
265 params%dielectric_params%aa_cuboidal_zxtnt(2, n_aac_rep), &
266 params%dielectric_params%aa_cuboidal_eps(n_aac_rep), &
267 params%dielectric_params%aa_cuboidal_zeta(n_aac_rep))
268 NULLIFY (aa_cuboidal_xxtnt, aa_cuboidal_yxtnt, aa_cuboidal_zxtnt)
269 DO i = 1, n_aac_rep
270 CALL section_vals_val_get(aa_cuboidal_section, "epsilon", i_rep_section=i, r_val=eps)
271 CALL section_vals_val_get(aa_cuboidal_section, "zeta", i_rep_section=i, r_val=zeta)
272 CALL section_vals_val_get(aa_cuboidal_section, "X_xtnt", i_rep_section=i, r_vals=aa_cuboidal_xxtnt)
273 CALL section_vals_val_get(aa_cuboidal_section, "Y_xtnt", i_rep_section=i, r_vals=aa_cuboidal_yxtnt)
274 CALL section_vals_val_get(aa_cuboidal_section, "Z_xtnt", i_rep_section=i, r_vals=aa_cuboidal_zxtnt)
275 params%dielectric_params%aa_cuboidal_eps(i) = eps
276 params%dielectric_params%aa_cuboidal_zeta(i) = zeta
277 params%dielectric_params%aa_cuboidal_xxtnt(:, i) = aa_cuboidal_xxtnt
278 params%dielectric_params%aa_cuboidal_yxtnt(:, i) = aa_cuboidal_yxtnt
279 params%dielectric_params%aa_cuboidal_zxtnt(:, i) = aa_cuboidal_zxtnt
280 END DO
281 ELSE
282 params%dielectric_params%n_aa_cuboidal = 0
283 END IF
284
285 IF (xaa_annular_explicit) THEN
286 params%dielectric_params%n_xaa_annular = n_xaaa_rep
287 ALLOCATE (params%dielectric_params%xaa_annular_xxtnt(2, n_xaaa_rep), &
288 params%dielectric_params%xaa_annular_bctr(2, n_xaaa_rep), &
289 params%dielectric_params%xaa_annular_brad(2, n_xaaa_rep), &
290 params%dielectric_params%xaa_annular_eps(n_xaaa_rep), &
291 params%dielectric_params%xaa_annular_zeta(n_xaaa_rep))
292 NULLIFY (xaa_annular_xxtnt, xaa_annular_bctr, xaa_annular_brad)
293 DO i = 1, n_xaaa_rep
294 CALL section_vals_val_get(xaa_annular_section, "epsilon", i_rep_section=i, r_val=eps)
295 CALL section_vals_val_get(xaa_annular_section, "zeta", i_rep_section=i, r_val=zeta)
296 CALL section_vals_val_get(xaa_annular_section, "X_xtnt", i_rep_section=i, r_vals=xaa_annular_xxtnt)
297 CALL section_vals_val_get(xaa_annular_section, "BASE_CENTER", i_rep_section=i, r_vals=xaa_annular_bctr)
298 CALL section_vals_val_get(xaa_annular_section, "BASE_RADII", i_rep_section=i, r_vals=xaa_annular_brad)
299 params%dielectric_params%xaa_annular_eps(i) = eps
300 params%dielectric_params%xaa_annular_zeta(i) = zeta
301 params%dielectric_params%xaa_annular_xxtnt(:, i) = xaa_annular_xxtnt
302 params%dielectric_params%xaa_annular_bctr(:, i) = xaa_annular_bctr
303 params%dielectric_params%xaa_annular_brad(:, i) = xaa_annular_brad
304 END DO
305 ELSE
306 params%dielectric_params%n_xaa_annular = 0
307 END IF
308
309 END IF
310
311 END SUBROUTINE dielectric_read_parameters
312
313! **************************************************************************************************
314!> \brief Reads the subsection DIRICHLET_BC and initializes corresponding parameters in
315!> pw_poisson_parameter_type
316!> \param dbc_section dirichlet_bc section to be read from input
317!> \param params poisson_env parameters
318!> \par History
319!> 08.2014 created [Hossein Bani-Hashemian]
320!> 07.2015 refactored [Hossein Bani-Hashemian]
321!> 10.2015 revised [Hossein Bani-Hashemian]
322!> \author Mohammad Hossein Bani-Hashemian
323! **************************************************************************************************
324 SUBROUTINE dirichlet_bc_read_parameters(dbc_section, params)
325 TYPE(section_vals_type), POINTER :: dbc_section
326 TYPE(pw_poisson_parameter_type), INTENT(INOUT) :: params
327
328 INTEGER :: aa_cylindrical_apxtyp, aa_cylindrical_nsides, i, n_aac_rep, n_aacyl_rep, &
329 n_aap_rep, n_p_rep, parallel_axis, parallel_plane
330 INTEGER, DIMENSION(:), POINTER :: aa_cuboidal_nprtn, aa_cylindrical_nprtn, &
331 aa_planar_nprtn, planar_nprtn
332 LOGICAL :: aa_cuboidal_explicit, &
333 aa_cylindrical_explicit, &
334 aa_planar_explicit, is_periodic, &
335 planar_explicit
336 REAL(dp) :: aa_cylindrical_brad, delta_alpha, freq, &
337 intercept, osc_frac, phase, sigma, &
338 thickness, v_d
339 REAL(dp), DIMENSION(:), POINTER :: aa_cuboidal_xxtnt, aa_cuboidal_yxtnt, aa_cuboidal_zxtnt, &
340 aa_cylindrical_bctr, aa_cylindrical_xtnt, aa_planar_xxtnt, aa_planar_yxtnt, &
341 aa_planar_zxtnt, planar_avtx, planar_bvtx, planar_cvtx
342 TYPE(section_vals_type), POINTER :: aa_cuboidal_section, &
343 aa_cylindrical_section, &
344 aa_planar_section, planar_section
345
346 CALL section_vals_val_get(dbc_section, "VERBOSE_OUTPUT", l_val=params%dbc_params%verbose_output)
347 aa_planar_section => section_vals_get_subs_vals(dbc_section, "AA_PLANAR")
348 planar_section => section_vals_get_subs_vals(dbc_section, "PLANAR")
349 aa_cylindrical_section => section_vals_get_subs_vals(dbc_section, "AA_CYLINDRICAL")
350 aa_cuboidal_section => section_vals_get_subs_vals(dbc_section, "AA_CUBOIDAL")
351 CALL section_vals_get(aa_planar_section, explicit=aa_planar_explicit, n_repetition=n_aap_rep)
352 CALL section_vals_get(planar_section, explicit=planar_explicit, n_repetition=n_p_rep)
353 CALL section_vals_get(aa_cylindrical_section, explicit=aa_cylindrical_explicit, n_repetition=n_aacyl_rep)
354 CALL section_vals_get(aa_cuboidal_section, explicit=aa_cuboidal_explicit, n_repetition=n_aac_rep)
355
356 IF (params%solver == pw_poisson_implicit) THEN
357
358 IF (aa_planar_explicit) THEN
359 params%dbc_params%n_aa_planar = n_aap_rep
360 ALLOCATE (params%dbc_params%aa_planar_nprtn(3, n_aap_rep), &
361 params%dbc_params%aa_planar_pplane(n_aap_rep), &
362 params%dbc_params%aa_planar_xxtnt(2, n_aap_rep), &
363 params%dbc_params%aa_planar_yxtnt(2, n_aap_rep), &
364 params%dbc_params%aa_planar_zxtnt(2, n_aap_rep), &
365 params%dbc_params%aa_planar_vD(n_aap_rep), &
366 params%dbc_params%aa_planar_frequency(n_aap_rep), &
367 params%dbc_params%aa_planar_phase(n_aap_rep), &
368 params%dbc_params%aa_planar_osc_frac(n_aap_rep), &
369 params%dbc_params%aa_planar_sigma(n_aap_rep), &
370 params%dbc_params%aa_planar_thickness(n_aap_rep), &
371 params%dbc_params%aa_planar_is_periodic(n_aap_rep))
372 NULLIFY (aa_planar_nprtn, aa_planar_xxtnt, aa_planar_yxtnt, aa_planar_zxtnt)
373 DO i = 1, n_aap_rep
374 CALL section_vals_val_get(aa_planar_section, "v_D", i_rep_section=i, r_val=v_d)
375 CALL section_vals_val_get(aa_planar_section, "OSCILLATING_FRACTION", i_rep_section=i, r_val=osc_frac)
376 CALL section_vals_val_get(aa_planar_section, "FREQUENCY", i_rep_section=i, r_val=freq)
377 CALL section_vals_val_get(aa_planar_section, "PHASE", i_rep_section=i, r_val=phase)
378 CALL section_vals_val_get(aa_planar_section, "SIGMA", i_rep_section=i, r_val=sigma)
379 CALL section_vals_val_get(aa_planar_section, "THICKNESS", i_rep_section=i, r_val=thickness)
380 CALL section_vals_val_get(aa_planar_section, "PERIODIC_REGION", i_rep_section=i, l_val=is_periodic)
381 params%dbc_params%aa_planar_vD(i) = v_d
382 params%dbc_params%aa_planar_frequency(i) = freq
383 params%dbc_params%aa_planar_phase(i) = phase
384 params%dbc_params%aa_planar_osc_frac(i) = osc_frac
385 params%dbc_params%aa_planar_sigma(i) = sigma
386 params%dbc_params%aa_planar_thickness(i) = thickness
387 params%dbc_params%aa_planar_is_periodic(i) = is_periodic
388
389 CALL section_vals_val_get(aa_planar_section, "PARALLEL_PLANE", i_rep_section=i, i_val=parallel_plane)
390 CALL section_vals_val_get(aa_planar_section, "INTERCEPT", i_rep_section=i, r_val=intercept)
391 SELECT CASE (parallel_plane)
392 CASE (xy_plane)
393 params%dbc_params%aa_planar_pplane(i) = xy_plane
394 CALL section_vals_val_get(aa_planar_section, "X_xtnt", i_rep_section=i, r_vals=aa_planar_xxtnt)
395 CALL section_vals_val_get(aa_planar_section, "Y_xtnt", i_rep_section=i, r_vals=aa_planar_yxtnt)
396 params%dbc_params%aa_planar_xxtnt(:, i) = aa_planar_xxtnt
397 params%dbc_params%aa_planar_yxtnt(:, i) = aa_planar_yxtnt
398 params%dbc_params%aa_planar_zxtnt(:, i) = intercept
399
400 CALL section_vals_val_get(aa_planar_section, "N_PRTN", i_rep_section=i, i_vals=aa_planar_nprtn)
401 params%dbc_params%aa_planar_nprtn(1, i) = aa_planar_nprtn(1)
402 params%dbc_params%aa_planar_nprtn(2, i) = aa_planar_nprtn(2)
403 params%dbc_params%aa_planar_nprtn(3, i) = 1
404 CASE (yz_plane)
405 params%dbc_params%aa_planar_pplane(i) = yz_plane
406 CALL section_vals_val_get(aa_planar_section, "Y_xtnt", i_rep_section=i, r_vals=aa_planar_yxtnt)
407 CALL section_vals_val_get(aa_planar_section, "Z_xtnt", i_rep_section=i, r_vals=aa_planar_zxtnt)
408 params%dbc_params%aa_planar_xxtnt(:, i) = intercept
409 params%dbc_params%aa_planar_yxtnt(:, i) = aa_planar_yxtnt
410 params%dbc_params%aa_planar_zxtnt(:, i) = aa_planar_zxtnt
411
412 CALL section_vals_val_get(aa_planar_section, "N_PRTN", i_rep_section=i, i_vals=aa_planar_nprtn)
413 params%dbc_params%aa_planar_nprtn(1, i) = 1
414 params%dbc_params%aa_planar_nprtn(2, i) = aa_planar_nprtn(1)
415 params%dbc_params%aa_planar_nprtn(3, i) = aa_planar_nprtn(2)
416 CASE (xz_plane)
417 params%dbc_params%aa_planar_pplane(i) = xz_plane
418 CALL section_vals_val_get(aa_planar_section, "X_xtnt", i_rep_section=i, r_vals=aa_planar_xxtnt)
419 CALL section_vals_val_get(aa_planar_section, "Z_xtnt", i_rep_section=i, r_vals=aa_planar_zxtnt)
420 params%dbc_params%aa_planar_xxtnt(:, i) = aa_planar_xxtnt
421 params%dbc_params%aa_planar_yxtnt(:, i) = intercept
422 params%dbc_params%aa_planar_zxtnt(:, i) = aa_planar_zxtnt
423
424 CALL section_vals_val_get(aa_planar_section, "N_PRTN", i_rep_section=i, i_vals=aa_planar_nprtn)
425 params%dbc_params%aa_planar_nprtn(1, i) = aa_planar_nprtn(1)
426 params%dbc_params%aa_planar_nprtn(2, i) = 1
427 params%dbc_params%aa_planar_nprtn(3, i) = aa_planar_nprtn(2)
428 END SELECT
429
430 END DO
431 ELSE
432 params%dbc_params%n_aa_planar = 0
433 END IF
434
435 IF (planar_explicit) THEN
436 params%dbc_params%n_planar = n_p_rep
437 ALLOCATE (params%dbc_params%planar_nprtn(2, n_p_rep), &
438 params%dbc_params%planar_Avtx(3, n_p_rep), &
439 params%dbc_params%planar_Bvtx(3, n_p_rep), &
440 params%dbc_params%planar_Cvtx(3, n_p_rep), &
441 params%dbc_params%planar_vD(n_p_rep), &
442 params%dbc_params%planar_frequency(n_p_rep), &
443 params%dbc_params%planar_phase(n_p_rep), &
444 params%dbc_params%planar_osc_frac(n_p_rep), &
445 params%dbc_params%planar_sigma(n_p_rep), &
446 params%dbc_params%planar_thickness(n_p_rep), &
447 params%dbc_params%planar_is_periodic(n_p_rep))
448 NULLIFY (planar_nprtn, planar_avtx, planar_bvtx, planar_cvtx)
449 DO i = 1, n_p_rep
450 CALL section_vals_val_get(planar_section, "N_PRTN", i_rep_section=i, i_vals=planar_nprtn)
451 CALL section_vals_val_get(planar_section, "A", i_rep_section=i, r_vals=planar_avtx)
452 CALL section_vals_val_get(planar_section, "B", i_rep_section=i, r_vals=planar_bvtx)
453 CALL section_vals_val_get(planar_section, "C", i_rep_section=i, r_vals=planar_cvtx)
454 CALL section_vals_val_get(planar_section, "v_D", i_rep_section=i, r_val=v_d)
455 CALL section_vals_val_get(planar_section, "OSCILLATING_FRACTION", i_rep_section=i, r_val=osc_frac)
456 CALL section_vals_val_get(planar_section, "FREQUENCY", i_rep_section=i, r_val=freq)
457 CALL section_vals_val_get(planar_section, "PHASE", i_rep_section=i, r_val=phase)
458 CALL section_vals_val_get(planar_section, "SIGMA", i_rep_section=i, r_val=sigma)
459 CALL section_vals_val_get(planar_section, "THICKNESS", i_rep_section=i, r_val=thickness)
460 params%dbc_params%planar_nprtn(:, i) = planar_nprtn
461 params%dbc_params%planar_Avtx(:, i) = planar_avtx
462 params%dbc_params%planar_Bvtx(:, i) = planar_bvtx
463 params%dbc_params%planar_Cvtx(:, i) = planar_cvtx
464 params%dbc_params%planar_vD(i) = v_d
465 params%dbc_params%planar_frequency(i) = freq
466 params%dbc_params%planar_phase(i) = phase
467 params%dbc_params%planar_osc_frac(i) = osc_frac
468 params%dbc_params%planar_sigma(i) = sigma
469 params%dbc_params%planar_thickness(i) = thickness
470 params%dbc_params%planar_is_periodic(i) = .false. ! periodic not yet implemented
471 END DO
472 ELSE
473 params%dbc_params%n_planar = 0
474 END IF
475
476 IF (aa_cylindrical_explicit) THEN
477 params%dbc_params%n_aa_cylindrical = n_aacyl_rep
478 ALLOCATE (params%dbc_params%aa_cylindrical_paxis(n_aacyl_rep), &
479 params%dbc_params%aa_cylindrical_nprtn(2, n_aacyl_rep), &
480 params%dbc_params%aa_cylindrical_nsides(n_aacyl_rep), &
481 params%dbc_params%aa_cylindrical_apxtyp(n_aacyl_rep), &
482 params%dbc_params%aa_cylindrical_xtnt(2, n_aacyl_rep), &
483 params%dbc_params%aa_cylindrical_bctr(2, n_aacyl_rep), &
484 params%dbc_params%aa_cylindrical_brad(n_aacyl_rep), &
485 params%dbc_params%aa_cylindrical_vD(n_aacyl_rep), &
486 params%dbc_params%aa_cylindrical_frequency(n_aacyl_rep), &
487 params%dbc_params%aa_cylindrical_phase(n_aacyl_rep), &
488 params%dbc_params%aa_cylindrical_osc_frac(n_aacyl_rep), &
489 params%dbc_params%aa_cylindrical_sigma(n_aacyl_rep), &
490 params%dbc_params%aa_cylindrical_thickness(n_aacyl_rep), &
491 params%dbc_params%aa_cylindrical_sgap(n_aacyl_rep), &
492 params%dbc_params%aa_cylindrical_is_periodic(n_aacyl_rep))
493 NULLIFY (aa_cylindrical_nprtn, aa_cylindrical_xtnt, aa_cylindrical_bctr)
494 DO i = 1, n_aacyl_rep
495 CALL section_vals_val_get(aa_cylindrical_section, "PARALLEL_AXIS", i_rep_section=i, i_val=parallel_axis)
496 CALL section_vals_val_get(aa_cylindrical_section, "N_PRTN", i_rep_section=i, i_vals=aa_cylindrical_nprtn)
497 CALL section_vals_val_get(aa_cylindrical_section, "N_SIDES", i_rep_section=i, i_val=aa_cylindrical_nsides)
498 CALL section_vals_val_get(aa_cylindrical_section, "APX_TYPE", i_rep_section=i, i_val=aa_cylindrical_apxtyp)
499 CALL section_vals_val_get(aa_cylindrical_section, "xtnt", i_rep_section=i, r_vals=aa_cylindrical_xtnt)
500 CALL section_vals_val_get(aa_cylindrical_section, "BASE_CENTER", i_rep_section=i, r_vals=aa_cylindrical_bctr)
501 CALL section_vals_val_get(aa_cylindrical_section, "BASE_RADIUS", i_rep_section=i, r_val=aa_cylindrical_brad)
502 CALL section_vals_val_get(aa_cylindrical_section, "v_D", i_rep_section=i, r_val=v_d)
503 CALL section_vals_val_get(aa_cylindrical_section, "OSCILLATING_FRACTION", i_rep_section=i, r_val=osc_frac)
504 CALL section_vals_val_get(aa_cylindrical_section, "FREQUENCY", i_rep_section=i, r_val=freq)
505 CALL section_vals_val_get(aa_cylindrical_section, "PHASE", i_rep_section=i, r_val=phase)
506 CALL section_vals_val_get(aa_cylindrical_section, "SIGMA", i_rep_section=i, r_val=sigma)
507 CALL section_vals_val_get(aa_cylindrical_section, "THICKNESS", i_rep_section=i, r_val=thickness)
508 CALL section_vals_val_get(aa_cylindrical_section, "delta_alpha", i_rep_section=i, r_val=delta_alpha)
509 params%dbc_params%aa_cylindrical_paxis(i) = parallel_axis
510 params%dbc_params%aa_cylindrical_nprtn(:, i) = aa_cylindrical_nprtn
511 params%dbc_params%aa_cylindrical_nsides(i) = aa_cylindrical_nsides
512 params%dbc_params%aa_cylindrical_apxtyp(i) = aa_cylindrical_apxtyp
513 params%dbc_params%aa_cylindrical_xtnt(:, i) = aa_cylindrical_xtnt
514 params%dbc_params%aa_cylindrical_bctr(:, i) = aa_cylindrical_bctr
515 params%dbc_params%aa_cylindrical_brad(i) = aa_cylindrical_brad
516 params%dbc_params%aa_cylindrical_vD(i) = v_d
517 params%dbc_params%aa_cylindrical_frequency(i) = freq
518 params%dbc_params%aa_cylindrical_phase(i) = phase
519 params%dbc_params%aa_cylindrical_osc_frac(i) = osc_frac
520 params%dbc_params%aa_cylindrical_sigma(i) = sigma
521 params%dbc_params%aa_cylindrical_thickness(i) = thickness
522 params%dbc_params%aa_cylindrical_sgap(i) = delta_alpha
523 params%dbc_params%aa_cylindrical_is_periodic(i) = .false. ! periodic not yet implemented
524 END DO
525 ELSE
526 params%dbc_params%n_aa_cylindrical = 0
527 ALLOCATE (params%dbc_params%aa_cylindrical_nsides(n_aacyl_rep))
528 END IF
529
530 IF (aa_cuboidal_explicit) THEN
531 params%dbc_params%n_aa_cuboidal = n_aac_rep
532 ALLOCATE (params%dbc_params%aa_cuboidal_nprtn(3, n_aac_rep), &
533 params%dbc_params%aa_cuboidal_xxtnt(2, n_aac_rep), &
534 params%dbc_params%aa_cuboidal_yxtnt(2, n_aac_rep), &
535 params%dbc_params%aa_cuboidal_zxtnt(2, n_aac_rep), &
536 params%dbc_params%aa_cuboidal_vD(n_aac_rep), &
537 params%dbc_params%aa_cuboidal_frequency(n_aac_rep), &
538 params%dbc_params%aa_cuboidal_phase(n_aac_rep), &
539 params%dbc_params%aa_cuboidal_osc_frac(n_aac_rep), &
540 params%dbc_params%aa_cuboidal_sigma(n_aac_rep), &
541 params%dbc_params%aa_cuboidal_is_periodic(n_aac_rep))
542 NULLIFY (aa_cuboidal_nprtn, aa_cuboidal_xxtnt, aa_cuboidal_yxtnt, aa_cuboidal_zxtnt)
543 DO i = 1, n_aac_rep
544 CALL section_vals_val_get(aa_cuboidal_section, "N_PRTN", i_rep_section=i, i_vals=aa_cuboidal_nprtn)
545 CALL section_vals_val_get(aa_cuboidal_section, "X_xtnt", i_rep_section=i, r_vals=aa_cuboidal_xxtnt)
546 CALL section_vals_val_get(aa_cuboidal_section, "Y_xtnt", i_rep_section=i, r_vals=aa_cuboidal_yxtnt)
547 CALL section_vals_val_get(aa_cuboidal_section, "Z_xtnt", i_rep_section=i, r_vals=aa_cuboidal_zxtnt)
548 CALL section_vals_val_get(aa_cuboidal_section, "v_D", i_rep_section=i, r_val=v_d)
549 CALL section_vals_val_get(aa_cuboidal_section, "OSCILLATING_FRACTION", i_rep_section=i, r_val=osc_frac)
550 CALL section_vals_val_get(aa_cuboidal_section, "FREQUENCY", i_rep_section=i, r_val=freq)
551 CALL section_vals_val_get(aa_cuboidal_section, "PHASE", i_rep_section=i, r_val=phase)
552 CALL section_vals_val_get(aa_cuboidal_section, "SIGMA", i_rep_section=i, r_val=sigma)
553 CALL section_vals_val_get(aa_cuboidal_section, "PERIODIC_REGION", i_rep_section=i, l_val=is_periodic)
554 params%dbc_params%aa_cuboidal_nprtn(:, i) = aa_cuboidal_nprtn
555 params%dbc_params%aa_cuboidal_xxtnt(:, i) = aa_cuboidal_xxtnt
556 params%dbc_params%aa_cuboidal_yxtnt(:, i) = aa_cuboidal_yxtnt
557 params%dbc_params%aa_cuboidal_zxtnt(:, i) = aa_cuboidal_zxtnt
558 params%dbc_params%aa_cuboidal_vD(i) = v_d
559 params%dbc_params%aa_cuboidal_frequency(i) = freq
560 params%dbc_params%aa_cuboidal_phase(i) = phase
561 params%dbc_params%aa_cuboidal_osc_frac(i) = osc_frac
562 params%dbc_params%aa_cuboidal_sigma(i) = sigma
563 params%dbc_params%aa_cuboidal_is_periodic(i) = is_periodic
564 END DO
565 ELSE
566 params%dbc_params%n_aa_cuboidal = 0
567 END IF
568
569 END IF
570
571 END SUBROUTINE dirichlet_bc_read_parameters
572
573END MODULE pw_poisson_read_input
Handles all functions related to the CELL.
Definition cell_types.F:15
integer, parameter, public use_perd_xyz
Definition cell_types.F:42
integer, parameter, public use_perd_y
Definition cell_types.F:42
integer, parameter, public use_perd_xz
Definition cell_types.F:42
integer, parameter, public use_perd_x
Definition cell_types.F:42
integer, parameter, public use_perd_z
Definition cell_types.F:42
integer, parameter, public use_perd_yz
Definition cell_types.F:42
integer, parameter, public use_perd_none
Definition cell_types.F:42
integer, parameter, public use_perd_xy
Definition cell_types.F:42
Dirichlet boundary condition data types.
integer, parameter, public xz_plane
integer, parameter, public yz_plane
integer, parameter, public xy_plane
objects that represent the structure of input sections and the data contained in an input section
recursive type(section_vals_type) function, pointer, public section_vals_get_subs_vals(section_vals, subsection_name, i_rep_section, can_return_null)
returns the values of the requested subsection
subroutine, public section_vals_get(section_vals, ref_count, n_repetition, n_subs_vals_rep, section, explicit)
returns various attributes about the section_vals
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
Definition and initialisation of the ps_wavelet data type.
integer, parameter, public wavelet3d
integer, parameter, public wavelet0d
integer, parameter, public wavelet2d
Reading of input parameters for the pw_poisson-modules.
subroutine, public pw_poisson_read_parameters(poisson_section, params)
Reads the POISSON input-section and into pw_poisson_parameter_type.
functions related to the poisson solver on regular grids
integer, parameter, public pw_poisson_wavelet
integer, parameter, public pw_poisson_periodic
integer, parameter, public pw_poisson_none
integer, parameter, public pw_poisson_mt
integer, parameter, public pw_poisson_implicit
integer, parameter, public do_ewald_none
integer, parameter, public pw_poisson_analytic
integer, parameter, public pw_poisson_multipole
parameters for the poisson solver independet of input_section