(git:374b731)
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-2024 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%wavelet_geocode = "F"
151 params%wavelet_method = wavelet0d
152 CASE (use_perd_xz)
153 params%wavelet_geocode = "S"
154 params%wavelet_method = wavelet2d
155 params%wavelet_special_dimension = 2
156 CASE (use_perd_xyz)
157 params%wavelet_geocode = "P"
158 params%wavelet_method = wavelet3d
160 cpabort("Poisson solver for this periodicity not yet implemented")
161 CASE DEFAULT
162 cpabort("")
163 END SELECT
164
165 END SUBROUTINE decode_periodic_wavelet
166
167! **************************************************************************************************
168!> \brief Reads the subsection IMPLICIT and initializes corresponding parameters in
169!> pw_poisson_parameter_type
170!> \param poisson_section poisson section to be read from input
171!> \param params poisson_env parameters
172!> \par History
173!> 08.2014 created [Hossein Bani-Hashemian]
174!> \author Mohammad Hossein Bani-Hashemian
175! **************************************************************************************************
176 SUBROUTINE ps_implicit_read_parameters(poisson_section, params)
177 TYPE(section_vals_type), POINTER :: poisson_section
178 TYPE(pw_poisson_parameter_type), INTENT(INOUT) :: params
179
180 LOGICAL :: has_dielectric
181 TYPE(section_vals_type), POINTER :: dbc_section, dielectric_section, &
182 ps_implicit_section
183
184 NULLIFY (ps_implicit_section, dielectric_section, dbc_section)
185
186 ! parsing IMPLICIT subsection
187 ps_implicit_section => section_vals_get_subs_vals(poisson_section, "IMPLICIT")
188 CALL section_vals_val_get(ps_implicit_section, "BOUNDARY_CONDITIONS", &
189 i_val=params%ps_implicit_params%boundary_condition)
190 CALL section_vals_val_get(ps_implicit_section, "ZERO_INITIAL_GUESS", &
191 l_val=params%ps_implicit_params%zero_initial_guess)
192 CALL section_vals_val_get(ps_implicit_section, "max_iter", i_val=params%ps_implicit_params%max_iter)
193 CALL section_vals_val_get(ps_implicit_section, "tol", r_val=params%ps_implicit_params%tol)
194 CALL section_vals_val_get(ps_implicit_section, "omega", r_val=params%ps_implicit_params%omega)
195 CALL section_vals_val_get(ps_implicit_section, "neumann_directions", &
196 i_val=params%ps_implicit_params%neumann_directions)
197
198 ! parsing DIELECTRIC subsection
199 dielectric_section => section_vals_get_subs_vals(ps_implicit_section, "DIELECTRIC")
200 CALL section_vals_get(dielectric_section, explicit=has_dielectric)
201 params%has_dielectric = has_dielectric
202 CALL dielectric_read_parameters(dielectric_section, params)
203
204 ! parsing DIRICHLET_BC subsection
205 dbc_section => section_vals_get_subs_vals(ps_implicit_section, "DIRICHLET_BC")
206 CALL dirichlet_bc_read_parameters(dbc_section, params)
207
208 END SUBROUTINE ps_implicit_read_parameters
209
210! **************************************************************************************************
211!> \brief Reads the subsection DIELECTRIC and initializes corresponding parameters in
212!> pw_poisson_parameter_type
213!> \param dielectric_section dielectric section to be read from input
214!> \param params poisson_env parameters
215!> \par History
216!> 07.2015 created [Hossein Bani-Hashemian]
217!> \author Mohammad Hossein Bani-Hashemian
218! **************************************************************************************************
219 SUBROUTINE dielectric_read_parameters(dielectric_section, params)
220 TYPE(section_vals_type), POINTER :: dielectric_section
221 TYPE(pw_poisson_parameter_type), INTENT(INOUT) :: params
222
223 INTEGER :: i, n_aac_rep, n_xaaa_rep
224 LOGICAL :: aa_cuboidal_explicit, &
225 xaa_annular_explicit
226 REAL(dp) :: eps, zeta
227 REAL(dp), DIMENSION(:), POINTER :: aa_cuboidal_xxtnt, aa_cuboidal_yxtnt, aa_cuboidal_zxtnt, &
228 xaa_annular_bctr, xaa_annular_brad, xaa_annular_xxtnt
229 TYPE(section_vals_type), POINTER :: aa_cuboidal_section, xaa_annular_section
230
231 CALL section_vals_val_get(dielectric_section, "DIELECTRIC_CORE_CORRECTION", &
232 l_val=params%dielectric_params%dielec_core_correction)
233 CALL section_vals_val_get(dielectric_section, "DIELECTRIC_FUNCTION_TYPE", &
234 i_val=params%dielectric_params%dielec_functiontype)
235 CALL section_vals_val_get(dielectric_section, "epsilon", r_val=params%dielectric_params%eps0)
236 CALL section_vals_val_get(dielectric_section, "rho_min", r_val=params%dielectric_params%rho_min)
237 CALL section_vals_val_get(dielectric_section, "rho_max", r_val=params%dielectric_params%rho_max)
238 CALL section_vals_val_get(dielectric_section, "DERIVATIVE_METHOD", &
239 i_val=params%dielectric_params%derivative_method)
240
241 aa_cuboidal_section => section_vals_get_subs_vals(dielectric_section, "DIELEC_AA_CUBOIDAL")
242 xaa_annular_section => section_vals_get_subs_vals(dielectric_section, "DIELEC_XAA_ANNULAR")
243 CALL section_vals_get(aa_cuboidal_section, explicit=aa_cuboidal_explicit, n_repetition=n_aac_rep)
244 CALL section_vals_get(xaa_annular_section, explicit=xaa_annular_explicit, n_repetition=n_xaaa_rep)
245
246 IF (params%solver .EQ. pw_poisson_implicit) THEN
247
248 IF (aa_cuboidal_explicit) THEN
249 params%dielectric_params%n_aa_cuboidal = n_aac_rep
250 ALLOCATE (params%dielectric_params%aa_cuboidal_xxtnt(2, n_aac_rep), &
251 params%dielectric_params%aa_cuboidal_yxtnt(2, n_aac_rep), &
252 params%dielectric_params%aa_cuboidal_zxtnt(2, n_aac_rep), &
253 params%dielectric_params%aa_cuboidal_eps(n_aac_rep), &
254 params%dielectric_params%aa_cuboidal_zeta(n_aac_rep))
255 NULLIFY (aa_cuboidal_xxtnt, aa_cuboidal_yxtnt, aa_cuboidal_zxtnt)
256 DO i = 1, n_aac_rep
257 CALL section_vals_val_get(aa_cuboidal_section, "epsilon", i_rep_section=i, r_val=eps)
258 CALL section_vals_val_get(aa_cuboidal_section, "zeta", i_rep_section=i, r_val=zeta)
259 CALL section_vals_val_get(aa_cuboidal_section, "X_xtnt", i_rep_section=i, r_vals=aa_cuboidal_xxtnt)
260 CALL section_vals_val_get(aa_cuboidal_section, "Y_xtnt", i_rep_section=i, r_vals=aa_cuboidal_yxtnt)
261 CALL section_vals_val_get(aa_cuboidal_section, "Z_xtnt", i_rep_section=i, r_vals=aa_cuboidal_zxtnt)
262 params%dielectric_params%aa_cuboidal_eps(i) = eps
263 params%dielectric_params%aa_cuboidal_zeta(i) = zeta
264 params%dielectric_params%aa_cuboidal_xxtnt(:, i) = aa_cuboidal_xxtnt
265 params%dielectric_params%aa_cuboidal_yxtnt(:, i) = aa_cuboidal_yxtnt
266 params%dielectric_params%aa_cuboidal_zxtnt(:, i) = aa_cuboidal_zxtnt
267 END DO
268 ELSE
269 params%dielectric_params%n_aa_cuboidal = 0
270 END IF
271
272 IF (xaa_annular_explicit) THEN
273 params%dielectric_params%n_xaa_annular = n_xaaa_rep
274 ALLOCATE (params%dielectric_params%xaa_annular_xxtnt(2, n_xaaa_rep), &
275 params%dielectric_params%xaa_annular_bctr(2, n_xaaa_rep), &
276 params%dielectric_params%xaa_annular_brad(2, n_xaaa_rep), &
277 params%dielectric_params%xaa_annular_eps(n_xaaa_rep), &
278 params%dielectric_params%xaa_annular_zeta(n_xaaa_rep))
279 NULLIFY (xaa_annular_xxtnt, xaa_annular_bctr, xaa_annular_brad)
280 DO i = 1, n_xaaa_rep
281 CALL section_vals_val_get(xaa_annular_section, "epsilon", i_rep_section=i, r_val=eps)
282 CALL section_vals_val_get(xaa_annular_section, "zeta", i_rep_section=i, r_val=zeta)
283 CALL section_vals_val_get(xaa_annular_section, "X_xtnt", i_rep_section=i, r_vals=xaa_annular_xxtnt)
284 CALL section_vals_val_get(xaa_annular_section, "BASE_CENTER", i_rep_section=i, r_vals=xaa_annular_bctr)
285 CALL section_vals_val_get(xaa_annular_section, "BASE_RADII", i_rep_section=i, r_vals=xaa_annular_brad)
286 params%dielectric_params%xaa_annular_eps(i) = eps
287 params%dielectric_params%xaa_annular_zeta(i) = zeta
288 params%dielectric_params%xaa_annular_xxtnt(:, i) = xaa_annular_xxtnt
289 params%dielectric_params%xaa_annular_bctr(:, i) = xaa_annular_bctr
290 params%dielectric_params%xaa_annular_brad(:, i) = xaa_annular_brad
291 END DO
292 ELSE
293 params%dielectric_params%n_xaa_annular = 0
294 END IF
295
296 END IF
297
298 END SUBROUTINE dielectric_read_parameters
299
300! **************************************************************************************************
301!> \brief Reads the subsection DIRICHLET_BC and initializes corresponding parameters in
302!> pw_poisson_parameter_type
303!> \param dbc_section dirichlet_bc section to be read from input
304!> \param params poisson_env parameters
305!> \par History
306!> 08.2014 created [Hossein Bani-Hashemian]
307!> 07.2015 refactored [Hossein Bani-Hashemian]
308!> 10.2015 revised [Hossein Bani-Hashemian]
309!> \author Mohammad Hossein Bani-Hashemian
310! **************************************************************************************************
311 SUBROUTINE dirichlet_bc_read_parameters(dbc_section, params)
312 TYPE(section_vals_type), POINTER :: dbc_section
313 TYPE(pw_poisson_parameter_type), INTENT(INOUT) :: params
314
315 INTEGER :: aa_cylindrical_apxtyp, aa_cylindrical_nsides, i, n_aac_rep, n_aacyl_rep, &
316 n_aap_rep, n_p_rep, parallel_axis, parallel_plane
317 INTEGER, DIMENSION(:), POINTER :: aa_cuboidal_nprtn, aa_cylindrical_nprtn, &
318 aa_planar_nprtn, planar_nprtn
319 LOGICAL :: aa_cuboidal_explicit, &
320 aa_cylindrical_explicit, &
321 aa_planar_explicit, is_periodic, &
322 planar_explicit
323 REAL(dp) :: aa_cylindrical_brad, delta_alpha, freq, &
324 intercept, osc_frac, phase, sigma, &
325 thickness, v_d
326 REAL(dp), DIMENSION(:), POINTER :: aa_cuboidal_xxtnt, aa_cuboidal_yxtnt, aa_cuboidal_zxtnt, &
327 aa_cylindrical_bctr, aa_cylindrical_xtnt, aa_planar_xxtnt, aa_planar_yxtnt, &
328 aa_planar_zxtnt, planar_avtx, planar_bvtx, planar_cvtx
329 TYPE(section_vals_type), POINTER :: aa_cuboidal_section, &
330 aa_cylindrical_section, &
331 aa_planar_section, planar_section
332
333 CALL section_vals_val_get(dbc_section, "VERBOSE_OUTPUT", l_val=params%dbc_params%verbose_output)
334 aa_planar_section => section_vals_get_subs_vals(dbc_section, "AA_PLANAR")
335 planar_section => section_vals_get_subs_vals(dbc_section, "PLANAR")
336 aa_cylindrical_section => section_vals_get_subs_vals(dbc_section, "AA_CYLINDRICAL")
337 aa_cuboidal_section => section_vals_get_subs_vals(dbc_section, "AA_CUBOIDAL")
338 CALL section_vals_get(aa_planar_section, explicit=aa_planar_explicit, n_repetition=n_aap_rep)
339 CALL section_vals_get(planar_section, explicit=planar_explicit, n_repetition=n_p_rep)
340 CALL section_vals_get(aa_cylindrical_section, explicit=aa_cylindrical_explicit, n_repetition=n_aacyl_rep)
341 CALL section_vals_get(aa_cuboidal_section, explicit=aa_cuboidal_explicit, n_repetition=n_aac_rep)
342
343 IF (params%solver .EQ. pw_poisson_implicit) THEN
344
345 IF (aa_planar_explicit) THEN
346 params%dbc_params%n_aa_planar = n_aap_rep
347 ALLOCATE (params%dbc_params%aa_planar_nprtn(3, n_aap_rep), &
348 params%dbc_params%aa_planar_pplane(n_aap_rep), &
349 params%dbc_params%aa_planar_xxtnt(2, n_aap_rep), &
350 params%dbc_params%aa_planar_yxtnt(2, n_aap_rep), &
351 params%dbc_params%aa_planar_zxtnt(2, n_aap_rep), &
352 params%dbc_params%aa_planar_vD(n_aap_rep), &
353 params%dbc_params%aa_planar_frequency(n_aap_rep), &
354 params%dbc_params%aa_planar_phase(n_aap_rep), &
355 params%dbc_params%aa_planar_osc_frac(n_aap_rep), &
356 params%dbc_params%aa_planar_sigma(n_aap_rep), &
357 params%dbc_params%aa_planar_thickness(n_aap_rep), &
358 params%dbc_params%aa_planar_is_periodic(n_aap_rep))
359 NULLIFY (aa_planar_nprtn, aa_planar_xxtnt, aa_planar_yxtnt, aa_planar_zxtnt)
360 DO i = 1, n_aap_rep
361 CALL section_vals_val_get(aa_planar_section, "v_D", i_rep_section=i, r_val=v_d)
362 CALL section_vals_val_get(aa_planar_section, "OSCILLATING_FRACTION", i_rep_section=i, r_val=osc_frac)
363 CALL section_vals_val_get(aa_planar_section, "FREQUENCY", i_rep_section=i, r_val=freq)
364 CALL section_vals_val_get(aa_planar_section, "PHASE", i_rep_section=i, r_val=phase)
365 CALL section_vals_val_get(aa_planar_section, "SIGMA", i_rep_section=i, r_val=sigma)
366 CALL section_vals_val_get(aa_planar_section, "THICKNESS", i_rep_section=i, r_val=thickness)
367 CALL section_vals_val_get(aa_planar_section, "PERIODIC_REGION", i_rep_section=i, l_val=is_periodic)
368 params%dbc_params%aa_planar_vD(i) = v_d
369 params%dbc_params%aa_planar_frequency(i) = freq
370 params%dbc_params%aa_planar_phase(i) = phase
371 params%dbc_params%aa_planar_osc_frac(i) = osc_frac
372 params%dbc_params%aa_planar_sigma(i) = sigma
373 params%dbc_params%aa_planar_thickness(i) = thickness
374 params%dbc_params%aa_planar_is_periodic(i) = is_periodic
375
376 CALL section_vals_val_get(aa_planar_section, "PARALLEL_PLANE", i_rep_section=i, i_val=parallel_plane)
377 CALL section_vals_val_get(aa_planar_section, "INTERCEPT", i_rep_section=i, r_val=intercept)
378 SELECT CASE (parallel_plane)
379 CASE (xy_plane)
380 params%dbc_params%aa_planar_pplane(i) = xy_plane
381 CALL section_vals_val_get(aa_planar_section, "X_xtnt", i_rep_section=i, r_vals=aa_planar_xxtnt)
382 CALL section_vals_val_get(aa_planar_section, "Y_xtnt", i_rep_section=i, r_vals=aa_planar_yxtnt)
383 params%dbc_params%aa_planar_xxtnt(:, i) = aa_planar_xxtnt
384 params%dbc_params%aa_planar_yxtnt(:, i) = aa_planar_yxtnt
385 params%dbc_params%aa_planar_zxtnt(:, i) = intercept
386
387 CALL section_vals_val_get(aa_planar_section, "N_PRTN", i_rep_section=i, i_vals=aa_planar_nprtn)
388 params%dbc_params%aa_planar_nprtn(1, i) = aa_planar_nprtn(1)
389 params%dbc_params%aa_planar_nprtn(2, i) = aa_planar_nprtn(2)
390 params%dbc_params%aa_planar_nprtn(3, i) = 1
391 CASE (yz_plane)
392 params%dbc_params%aa_planar_pplane(i) = yz_plane
393 CALL section_vals_val_get(aa_planar_section, "Y_xtnt", i_rep_section=i, r_vals=aa_planar_yxtnt)
394 CALL section_vals_val_get(aa_planar_section, "Z_xtnt", i_rep_section=i, r_vals=aa_planar_zxtnt)
395 params%dbc_params%aa_planar_xxtnt(:, i) = intercept
396 params%dbc_params%aa_planar_yxtnt(:, i) = aa_planar_yxtnt
397 params%dbc_params%aa_planar_zxtnt(:, i) = aa_planar_zxtnt
398
399 CALL section_vals_val_get(aa_planar_section, "N_PRTN", i_rep_section=i, i_vals=aa_planar_nprtn)
400 params%dbc_params%aa_planar_nprtn(1, i) = 1
401 params%dbc_params%aa_planar_nprtn(2, i) = aa_planar_nprtn(1)
402 params%dbc_params%aa_planar_nprtn(3, i) = aa_planar_nprtn(2)
403 CASE (xz_plane)
404 params%dbc_params%aa_planar_pplane(i) = xz_plane
405 CALL section_vals_val_get(aa_planar_section, "X_xtnt", i_rep_section=i, r_vals=aa_planar_xxtnt)
406 CALL section_vals_val_get(aa_planar_section, "Z_xtnt", i_rep_section=i, r_vals=aa_planar_zxtnt)
407 params%dbc_params%aa_planar_xxtnt(:, i) = aa_planar_xxtnt
408 params%dbc_params%aa_planar_yxtnt(:, i) = intercept
409 params%dbc_params%aa_planar_zxtnt(:, i) = aa_planar_zxtnt
410
411 CALL section_vals_val_get(aa_planar_section, "N_PRTN", i_rep_section=i, i_vals=aa_planar_nprtn)
412 params%dbc_params%aa_planar_nprtn(1, i) = aa_planar_nprtn(1)
413 params%dbc_params%aa_planar_nprtn(2, i) = 1
414 params%dbc_params%aa_planar_nprtn(3, i) = aa_planar_nprtn(2)
415 END SELECT
416
417 END DO
418 ELSE
419 params%dbc_params%n_aa_planar = 0
420 END IF
421
422 IF (planar_explicit) THEN
423 params%dbc_params%n_planar = n_p_rep
424 ALLOCATE (params%dbc_params%planar_nprtn(2, n_p_rep), &
425 params%dbc_params%planar_Avtx(3, n_p_rep), &
426 params%dbc_params%planar_Bvtx(3, n_p_rep), &
427 params%dbc_params%planar_Cvtx(3, n_p_rep), &
428 params%dbc_params%planar_vD(n_p_rep), &
429 params%dbc_params%planar_frequency(n_p_rep), &
430 params%dbc_params%planar_phase(n_p_rep), &
431 params%dbc_params%planar_osc_frac(n_p_rep), &
432 params%dbc_params%planar_sigma(n_p_rep), &
433 params%dbc_params%planar_thickness(n_p_rep), &
434 params%dbc_params%planar_is_periodic(n_p_rep))
435 NULLIFY (planar_nprtn, planar_avtx, planar_bvtx, planar_cvtx)
436 DO i = 1, n_p_rep
437 CALL section_vals_val_get(planar_section, "N_PRTN", i_rep_section=i, i_vals=planar_nprtn)
438 CALL section_vals_val_get(planar_section, "A", i_rep_section=i, r_vals=planar_avtx)
439 CALL section_vals_val_get(planar_section, "B", i_rep_section=i, r_vals=planar_bvtx)
440 CALL section_vals_val_get(planar_section, "C", i_rep_section=i, r_vals=planar_cvtx)
441 CALL section_vals_val_get(planar_section, "v_D", i_rep_section=i, r_val=v_d)
442 CALL section_vals_val_get(planar_section, "OSCILLATING_FRACTION", i_rep_section=i, r_val=osc_frac)
443 CALL section_vals_val_get(planar_section, "FREQUENCY", i_rep_section=i, r_val=freq)
444 CALL section_vals_val_get(planar_section, "PHASE", i_rep_section=i, r_val=phase)
445 CALL section_vals_val_get(planar_section, "SIGMA", i_rep_section=i, r_val=sigma)
446 CALL section_vals_val_get(planar_section, "THICKNESS", i_rep_section=i, r_val=thickness)
447 params%dbc_params%planar_nprtn(:, i) = planar_nprtn
448 params%dbc_params%planar_Avtx(:, i) = planar_avtx
449 params%dbc_params%planar_Bvtx(:, i) = planar_bvtx
450 params%dbc_params%planar_Cvtx(:, i) = planar_cvtx
451 params%dbc_params%planar_vD(i) = v_d
452 params%dbc_params%planar_frequency(i) = freq
453 params%dbc_params%planar_phase(i) = phase
454 params%dbc_params%planar_osc_frac(i) = osc_frac
455 params%dbc_params%planar_sigma(i) = sigma
456 params%dbc_params%planar_thickness(i) = thickness
457 params%dbc_params%planar_is_periodic(i) = .false. ! periodic not yet implemented
458 END DO
459 ELSE
460 params%dbc_params%n_planar = 0
461 END IF
462
463 IF (aa_cylindrical_explicit) THEN
464 params%dbc_params%n_aa_cylindrical = n_aacyl_rep
465 ALLOCATE (params%dbc_params%aa_cylindrical_paxis(n_aacyl_rep), &
466 params%dbc_params%aa_cylindrical_nprtn(2, n_aacyl_rep), &
467 params%dbc_params%aa_cylindrical_nsides(n_aacyl_rep), &
468 params%dbc_params%aa_cylindrical_apxtyp(n_aacyl_rep), &
469 params%dbc_params%aa_cylindrical_xtnt(2, n_aacyl_rep), &
470 params%dbc_params%aa_cylindrical_bctr(2, n_aacyl_rep), &
471 params%dbc_params%aa_cylindrical_brad(n_aacyl_rep), &
472 params%dbc_params%aa_cylindrical_vD(n_aacyl_rep), &
473 params%dbc_params%aa_cylindrical_frequency(n_aacyl_rep), &
474 params%dbc_params%aa_cylindrical_phase(n_aacyl_rep), &
475 params%dbc_params%aa_cylindrical_osc_frac(n_aacyl_rep), &
476 params%dbc_params%aa_cylindrical_sigma(n_aacyl_rep), &
477 params%dbc_params%aa_cylindrical_thickness(n_aacyl_rep), &
478 params%dbc_params%aa_cylindrical_sgap(n_aacyl_rep), &
479 params%dbc_params%aa_cylindrical_is_periodic(n_aacyl_rep))
480 NULLIFY (aa_cylindrical_nprtn, aa_cylindrical_xtnt, aa_cylindrical_bctr)
481 DO i = 1, n_aacyl_rep
482 CALL section_vals_val_get(aa_cylindrical_section, "PARALLEL_AXIS", i_rep_section=i, i_val=parallel_axis)
483 CALL section_vals_val_get(aa_cylindrical_section, "N_PRTN", i_rep_section=i, i_vals=aa_cylindrical_nprtn)
484 CALL section_vals_val_get(aa_cylindrical_section, "N_SIDES", i_rep_section=i, i_val=aa_cylindrical_nsides)
485 CALL section_vals_val_get(aa_cylindrical_section, "APX_TYPE", i_rep_section=i, i_val=aa_cylindrical_apxtyp)
486 CALL section_vals_val_get(aa_cylindrical_section, "xtnt", i_rep_section=i, r_vals=aa_cylindrical_xtnt)
487 CALL section_vals_val_get(aa_cylindrical_section, "BASE_CENTER", i_rep_section=i, r_vals=aa_cylindrical_bctr)
488 CALL section_vals_val_get(aa_cylindrical_section, "BASE_RADIUS", i_rep_section=i, r_val=aa_cylindrical_brad)
489 CALL section_vals_val_get(aa_cylindrical_section, "v_D", i_rep_section=i, r_val=v_d)
490 CALL section_vals_val_get(aa_cylindrical_section, "OSCILLATING_FRACTION", i_rep_section=i, r_val=osc_frac)
491 CALL section_vals_val_get(aa_cylindrical_section, "FREQUENCY", i_rep_section=i, r_val=freq)
492 CALL section_vals_val_get(aa_cylindrical_section, "PHASE", i_rep_section=i, r_val=phase)
493 CALL section_vals_val_get(aa_cylindrical_section, "SIGMA", i_rep_section=i, r_val=sigma)
494 CALL section_vals_val_get(aa_cylindrical_section, "THICKNESS", i_rep_section=i, r_val=thickness)
495 CALL section_vals_val_get(aa_cylindrical_section, "delta_alpha", i_rep_section=i, r_val=delta_alpha)
496 params%dbc_params%aa_cylindrical_paxis(i) = parallel_axis
497 params%dbc_params%aa_cylindrical_nprtn(:, i) = aa_cylindrical_nprtn
498 params%dbc_params%aa_cylindrical_nsides(i) = aa_cylindrical_nsides
499 params%dbc_params%aa_cylindrical_apxtyp(i) = aa_cylindrical_apxtyp
500 params%dbc_params%aa_cylindrical_xtnt(:, i) = aa_cylindrical_xtnt
501 params%dbc_params%aa_cylindrical_bctr(:, i) = aa_cylindrical_bctr
502 params%dbc_params%aa_cylindrical_brad(i) = aa_cylindrical_brad
503 params%dbc_params%aa_cylindrical_vD(i) = v_d
504 params%dbc_params%aa_cylindrical_frequency(i) = freq
505 params%dbc_params%aa_cylindrical_phase(i) = phase
506 params%dbc_params%aa_cylindrical_osc_frac(i) = osc_frac
507 params%dbc_params%aa_cylindrical_sigma(i) = sigma
508 params%dbc_params%aa_cylindrical_thickness(i) = thickness
509 params%dbc_params%aa_cylindrical_sgap(i) = delta_alpha
510 params%dbc_params%aa_cylindrical_is_periodic(i) = .false. ! periodic not yet implemented
511 END DO
512 ELSE
513 params%dbc_params%n_aa_cylindrical = 0
514 ALLOCATE (params%dbc_params%aa_cylindrical_nsides(n_aacyl_rep))
515 END IF
516
517 IF (aa_cuboidal_explicit) THEN
518 params%dbc_params%n_aa_cuboidal = n_aac_rep
519 ALLOCATE (params%dbc_params%aa_cuboidal_nprtn(3, n_aac_rep), &
520 params%dbc_params%aa_cuboidal_xxtnt(2, n_aac_rep), &
521 params%dbc_params%aa_cuboidal_yxtnt(2, n_aac_rep), &
522 params%dbc_params%aa_cuboidal_zxtnt(2, n_aac_rep), &
523 params%dbc_params%aa_cuboidal_vD(n_aac_rep), &
524 params%dbc_params%aa_cuboidal_frequency(n_aac_rep), &
525 params%dbc_params%aa_cuboidal_phase(n_aac_rep), &
526 params%dbc_params%aa_cuboidal_osc_frac(n_aac_rep), &
527 params%dbc_params%aa_cuboidal_sigma(n_aac_rep), &
528 params%dbc_params%aa_cuboidal_is_periodic(n_aac_rep))
529 NULLIFY (aa_cuboidal_nprtn, aa_cuboidal_xxtnt, aa_cuboidal_yxtnt, aa_cuboidal_zxtnt)
530 DO i = 1, n_aac_rep
531 CALL section_vals_val_get(aa_cuboidal_section, "N_PRTN", i_rep_section=i, i_vals=aa_cuboidal_nprtn)
532 CALL section_vals_val_get(aa_cuboidal_section, "X_xtnt", i_rep_section=i, r_vals=aa_cuboidal_xxtnt)
533 CALL section_vals_val_get(aa_cuboidal_section, "Y_xtnt", i_rep_section=i, r_vals=aa_cuboidal_yxtnt)
534 CALL section_vals_val_get(aa_cuboidal_section, "Z_xtnt", i_rep_section=i, r_vals=aa_cuboidal_zxtnt)
535 CALL section_vals_val_get(aa_cuboidal_section, "v_D", i_rep_section=i, r_val=v_d)
536 CALL section_vals_val_get(aa_cuboidal_section, "OSCILLATING_FRACTION", i_rep_section=i, r_val=osc_frac)
537 CALL section_vals_val_get(aa_cuboidal_section, "FREQUENCY", i_rep_section=i, r_val=freq)
538 CALL section_vals_val_get(aa_cuboidal_section, "PHASE", i_rep_section=i, r_val=phase)
539 CALL section_vals_val_get(aa_cuboidal_section, "SIGMA", i_rep_section=i, r_val=sigma)
540 CALL section_vals_val_get(aa_cuboidal_section, "PERIODIC_REGION", i_rep_section=i, l_val=is_periodic)
541 params%dbc_params%aa_cuboidal_nprtn(:, i) = aa_cuboidal_nprtn
542 params%dbc_params%aa_cuboidal_xxtnt(:, i) = aa_cuboidal_xxtnt
543 params%dbc_params%aa_cuboidal_yxtnt(:, i) = aa_cuboidal_yxtnt
544 params%dbc_params%aa_cuboidal_zxtnt(:, i) = aa_cuboidal_zxtnt
545 params%dbc_params%aa_cuboidal_vD(i) = v_d
546 params%dbc_params%aa_cuboidal_frequency(i) = freq
547 params%dbc_params%aa_cuboidal_phase(i) = phase
548 params%dbc_params%aa_cuboidal_osc_frac(i) = osc_frac
549 params%dbc_params%aa_cuboidal_sigma(i) = sigma
550 params%dbc_params%aa_cuboidal_is_periodic(i) = is_periodic
551 END DO
552 ELSE
553 params%dbc_params%n_aa_cuboidal = 0
554 END IF
555
556 END IF
557
558 END SUBROUTINE dirichlet_bc_read_parameters
559
560END 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