20 #include "../base/base_uses.f90"
24 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'dirichlet_bc_types'
27 TYPE :: dirichlet_bc_parameters
28 LOGICAL :: verbose_output = .false.
29 LOGICAL :: do_dbc_cube = .false.
30 REAL(KIND=
dp) :: time = 0.0_dp
32 INTEGER :: n_aa_planar = 0
33 INTEGER,
DIMENSION(:, :),
POINTER :: aa_planar_nprtn => null()
34 INTEGER,
DIMENSION(:),
POINTER :: aa_planar_pplane => null()
35 REAL(KIND=
dp),
DIMENSION(:, :),
POINTER :: aa_planar_xxtnt => null()
36 REAL(KIND=
dp),
DIMENSION(:, :),
POINTER :: aa_planar_yxtnt => null()
37 REAL(KIND=
dp),
DIMENSION(:, :),
POINTER :: aa_planar_zxtnt => null()
38 REAL(KIND=
dp),
DIMENSION(:),
POINTER :: aa_planar_vd => null()
39 REAL(KIND=
dp),
DIMENSION(:),
POINTER :: aa_planar_osc_frac => null()
40 REAL(KIND=
dp),
DIMENSION(:),
POINTER :: aa_planar_frequency => null()
41 REAL(KIND=
dp),
DIMENSION(:),
POINTER :: aa_planar_phase => null()
42 REAL(KIND=
dp),
DIMENSION(:),
POINTER :: aa_planar_sigma => null()
43 REAL(KIND=
dp),
DIMENSION(:),
POINTER :: aa_planar_thickness => null()
44 LOGICAL,
DIMENSION(:),
POINTER :: aa_planar_is_periodic => null()
46 INTEGER :: n_planar = 0
47 INTEGER,
DIMENSION(:, :),
POINTER :: planar_nprtn => null()
48 REAL(KIND=
dp),
DIMENSION(:, :),
POINTER :: planar_avtx => null()
49 REAL(KIND=
dp),
DIMENSION(:, :),
POINTER :: planar_bvtx => null()
50 REAL(KIND=
dp),
DIMENSION(:, :),
POINTER :: planar_cvtx => null()
51 REAL(KIND=
dp),
DIMENSION(:, :),
POINTER :: planar_dvtx => null()
52 REAL(KIND=
dp),
DIMENSION(:),
POINTER :: planar_vd => null()
53 REAL(KIND=
dp),
DIMENSION(:),
POINTER :: planar_osc_frac => null()
54 REAL(KIND=
dp),
DIMENSION(:),
POINTER :: planar_frequency => null()
55 REAL(KIND=
dp),
DIMENSION(:),
POINTER :: planar_phase => null()
56 REAL(KIND=
dp),
DIMENSION(:),
POINTER :: planar_sigma => null()
57 REAL(KIND=
dp),
DIMENSION(:),
POINTER :: planar_thickness => null()
58 LOGICAL,
DIMENSION(:),
POINTER :: planar_is_periodic => null()
60 INTEGER :: n_aa_cylindrical = 0
61 INTEGER,
DIMENSION(:, :),
POINTER :: aa_cylindrical_nprtn => null()
62 INTEGER,
DIMENSION(:),
POINTER :: aa_cylindrical_paxis => null()
63 INTEGER,
DIMENSION(:),
POINTER :: aa_cylindrical_nsides => null()
64 INTEGER,
DIMENSION(:),
POINTER :: aa_cylindrical_apxtyp => null()
65 REAL(KIND=
dp),
DIMENSION(:, :),
POINTER :: aa_cylindrical_xtnt => null()
66 REAL(KIND=
dp),
DIMENSION(:, :),
POINTER :: aa_cylindrical_bctr => null()
67 REAL(KIND=
dp),
DIMENSION(:),
POINTER :: aa_cylindrical_brad => null()
68 REAL(KIND=
dp),
DIMENSION(:),
POINTER :: aa_cylindrical_vd => null()
69 REAL(KIND=
dp),
DIMENSION(:),
POINTER :: aa_cylindrical_osc_frac => null()
70 REAL(KIND=
dp),
DIMENSION(:),
POINTER :: aa_cylindrical_frequency => null()
71 REAL(KIND=
dp),
DIMENSION(:),
POINTER :: aa_cylindrical_phase => null()
72 REAL(KIND=
dp),
DIMENSION(:),
POINTER :: aa_cylindrical_sigma => null()
73 REAL(KIND=
dp),
DIMENSION(:),
POINTER :: aa_cylindrical_thickness => null()
74 REAL(KIND=
dp),
DIMENSION(:),
POINTER :: aa_cylindrical_sgap => null()
75 LOGICAL,
DIMENSION(:),
POINTER :: aa_cylindrical_is_periodic => null()
77 INTEGER :: n_aa_cuboidal = 0
78 INTEGER,
DIMENSION(:, :),
POINTER :: aa_cuboidal_nprtn => null()
79 REAL(KIND=
dp),
DIMENSION(:, :),
POINTER :: aa_cuboidal_xxtnt => null()
80 REAL(KIND=
dp),
DIMENSION(:, :),
POINTER :: aa_cuboidal_yxtnt => null()
81 REAL(KIND=
dp),
DIMENSION(:, :),
POINTER :: aa_cuboidal_zxtnt => null()
82 REAL(KIND=
dp),
DIMENSION(:),
POINTER :: aa_cuboidal_vd => null()
83 REAL(KIND=
dp),
DIMENSION(:),
POINTER :: aa_cuboidal_osc_frac => null()
84 REAL(KIND=
dp),
DIMENSION(:),
POINTER :: aa_cuboidal_frequency => null()
85 REAL(KIND=
dp),
DIMENSION(:),
POINTER :: aa_cuboidal_phase => null()
86 REAL(KIND=
dp),
DIMENSION(:),
POINTER :: aa_cuboidal_sigma => null()
87 LOGICAL,
DIMENSION(:),
POINTER :: aa_cuboidal_is_periodic => null()
88 END TYPE dirichlet_bc_parameters
90 TYPE :: dirichlet_bc_type
91 REAL(dp) :: v_D = 0.0_dp
92 REAL(dp) :: osc_frac = 0.0_dp
93 REAL(dp) :: frequency = 0.0_dp
94 REAL(dp) :: phase = 0.0_dp
96 INTEGER :: dbc_geom = 0
97 REAL(dp),
DIMENSION(3, 8) :: vertices = 0
99 DIMENSION(:),
POINTER :: tiles => null()
100 INTEGER :: n_tiles = 0
101 REAL(dp) :: smoothing_width = 0.0_dp
102 END TYPE dirichlet_bc_type
104 TYPE :: dirichlet_bc_p_type
105 TYPE(dirichlet_bc_type),
POINTER :: dirichlet_bc => null()
106 END TYPE dirichlet_bc_p_type
109 INTEGER :: tile_id = 0
110 REAL(dp),
DIMENSION(3, 8) :: vertices = 0
111 TYPE(pw_r3d_rs_type),
POINTER :: tile_pw => null()
112 REAL(dp) :: volume = 0.0_dp
116 TYPE(tile_type),
POINTER :: tile => null()
120 PUBLIC dirichlet_bc_type, dirichlet_bc_p_type, tile_type, tile_p_type
121 PUBLIC dirichlet_bc_parameters
140 INTEGER,
PARAMETER,
PUBLIC ::
x_axis = 100, &
156 TYPE(dirichlet_bc_p_type),
ALLOCATABLE, &
157 DIMENSION(:),
INTENT(INOUT) :: contacts
158 LOGICAL,
INTENT(IN) :: do_dbc_cube
159 TYPE(pw_pool_type),
INTENT(IN),
OPTIONAL,
POINTER :: pw_pool
161 CHARACTER(LEN=*),
PARAMETER :: routinen =
'dbc_release'
163 INTEGER :: handle, i, n_contacts
165 CALL timeset(routinen, handle)
167 IF (
ALLOCATED(contacts))
THEN
168 n_contacts =
SIZE(contacts)
169 IF (do_dbc_cube)
THEN
172 DEALLOCATE (contacts(i)%dirichlet_bc)
176 DEALLOCATE (contacts(i)%dirichlet_bc)
179 DEALLOCATE (contacts)
182 CALL timestop(handle)
196 TYPE(dirichlet_bc_type),
INTENT(INOUT),
POINTER :: dbc
197 TYPE(pw_pool_type),
INTENT(IN),
OPTIONAL,
POINTER :: pw_pool
199 CHARACTER(LEN=*),
PARAMETER :: routinen =
'dbc_tile_release'
201 INTEGER :: handle, k, n_tiles
203 CALL timeset(routinen, handle)
205 n_tiles = dbc%n_tiles
206 IF (
PRESENT(pw_pool))
THEN
208 CALL pw_pool%give_back_pw(dbc%tiles(k)%tile%tile_pw)
209 DEALLOCATE (dbc%tiles(k)%tile%tile_pw)
210 DEALLOCATE (dbc%tiles(k)%tile)
212 DEALLOCATE (dbc%tiles)
215 CALL dbc%tiles(k)%tile%tile_pw%release()
216 DEALLOCATE (dbc%tiles(k)%tile%tile_pw)
217 DEALLOCATE (dbc%tiles(k)%tile)
219 DEALLOCATE (dbc%tiles)
222 CALL timestop(handle)
235 TYPE(dirichlet_bc_parameters),
INTENT(INOUT) :: dbc_params
237 IF (
ASSOCIATED(dbc_params%aa_planar_nprtn))
DEALLOCATE (dbc_params%aa_planar_nprtn)
238 IF (
ASSOCIATED(dbc_params%aa_planar_pplane))
DEALLOCATE (dbc_params%aa_planar_pplane)
239 IF (
ASSOCIATED(dbc_params%aa_planar_xxtnt))
DEALLOCATE (dbc_params%aa_planar_xxtnt)
240 IF (
ASSOCIATED(dbc_params%aa_planar_yxtnt))
DEALLOCATE (dbc_params%aa_planar_yxtnt)
241 IF (
ASSOCIATED(dbc_params%aa_planar_zxtnt))
DEALLOCATE (dbc_params%aa_planar_zxtnt)
242 IF (
ASSOCIATED(dbc_params%aa_planar_vD))
DEALLOCATE (dbc_params%aa_planar_vD)
243 IF (
ASSOCIATED(dbc_params%aa_planar_frequency))
DEALLOCATE (dbc_params%aa_planar_frequency)
244 IF (
ASSOCIATED(dbc_params%aa_planar_osc_frac))
DEALLOCATE (dbc_params%aa_planar_osc_frac)
245 IF (
ASSOCIATED(dbc_params%aa_planar_phase))
DEALLOCATE (dbc_params%aa_planar_phase)
246 IF (
ASSOCIATED(dbc_params%aa_planar_sigma))
DEALLOCATE (dbc_params%aa_planar_sigma)
247 IF (
ASSOCIATED(dbc_params%aa_planar_thickness))
DEALLOCATE (dbc_params%aa_planar_thickness)
248 IF (
ASSOCIATED(dbc_params%aa_planar_is_periodic))
DEALLOCATE (dbc_params%aa_planar_is_periodic)
250 IF (
ASSOCIATED(dbc_params%planar_nprtn))
DEALLOCATE (dbc_params%planar_nprtn)
251 IF (
ASSOCIATED(dbc_params%planar_Avtx))
DEALLOCATE (dbc_params%planar_Avtx)
252 IF (
ASSOCIATED(dbc_params%planar_Bvtx))
DEALLOCATE (dbc_params%planar_Bvtx)
253 IF (
ASSOCIATED(dbc_params%planar_Cvtx))
DEALLOCATE (dbc_params%planar_Cvtx)
254 IF (
ASSOCIATED(dbc_params%planar_Dvtx))
DEALLOCATE (dbc_params%planar_Dvtx)
255 IF (
ASSOCIATED(dbc_params%planar_vD))
DEALLOCATE (dbc_params%planar_vD)
256 IF (
ASSOCIATED(dbc_params%planar_frequency))
DEALLOCATE (dbc_params%planar_frequency)
257 IF (
ASSOCIATED(dbc_params%planar_osc_frac))
DEALLOCATE (dbc_params%planar_osc_frac)
258 IF (
ASSOCIATED(dbc_params%planar_phase))
DEALLOCATE (dbc_params%planar_phase)
259 IF (
ASSOCIATED(dbc_params%planar_sigma))
DEALLOCATE (dbc_params%planar_sigma)
260 IF (
ASSOCIATED(dbc_params%planar_thickness))
DEALLOCATE (dbc_params%planar_thickness)
261 IF (
ASSOCIATED(dbc_params%planar_is_periodic))
DEALLOCATE (dbc_params%planar_is_periodic)
263 IF (
ASSOCIATED(dbc_params%aa_cylindrical_paxis))
DEALLOCATE (dbc_params%aa_cylindrical_paxis)
264 IF (
ASSOCIATED(dbc_params%aa_cylindrical_nprtn))
DEALLOCATE (dbc_params%aa_cylindrical_nprtn)
265 IF (
ASSOCIATED(dbc_params%aa_cylindrical_nsides))
DEALLOCATE (dbc_params%aa_cylindrical_nsides)
266 IF (
ASSOCIATED(dbc_params%aa_cylindrical_apxtyp))
DEALLOCATE (dbc_params%aa_cylindrical_apxtyp)
267 IF (
ASSOCIATED(dbc_params%aa_cylindrical_xtnt))
DEALLOCATE (dbc_params%aa_cylindrical_xtnt)
268 IF (
ASSOCIATED(dbc_params%aa_cylindrical_bctr))
DEALLOCATE (dbc_params%aa_cylindrical_bctr)
269 IF (
ASSOCIATED(dbc_params%aa_cylindrical_brad))
DEALLOCATE (dbc_params%aa_cylindrical_brad)
270 IF (
ASSOCIATED(dbc_params%aa_cylindrical_vD))
DEALLOCATE (dbc_params%aa_cylindrical_vD)
271 IF (
ASSOCIATED(dbc_params%aa_cylindrical_frequency))
DEALLOCATE (dbc_params%aa_cylindrical_frequency)
272 IF (
ASSOCIATED(dbc_params%aa_cylindrical_osc_frac))
DEALLOCATE (dbc_params%aa_cylindrical_osc_frac)
273 IF (
ASSOCIATED(dbc_params%aa_cylindrical_phase))
DEALLOCATE (dbc_params%aa_cylindrical_phase)
274 IF (
ASSOCIATED(dbc_params%aa_cylindrical_sigma))
DEALLOCATE (dbc_params%aa_cylindrical_sigma)
275 IF (
ASSOCIATED(dbc_params%aa_cylindrical_thickness))
DEALLOCATE (dbc_params%aa_cylindrical_thickness)
276 IF (
ASSOCIATED(dbc_params%aa_cylindrical_sgap))
DEALLOCATE (dbc_params%aa_cylindrical_sgap)
277 IF (
ASSOCIATED(dbc_params%aa_cylindrical_is_periodic))
DEALLOCATE (dbc_params%aa_cylindrical_is_periodic)
279 IF (
ASSOCIATED(dbc_params%aa_cuboidal_nprtn))
DEALLOCATE (dbc_params%aa_cuboidal_nprtn)
280 IF (
ASSOCIATED(dbc_params%aa_cuboidal_xxtnt))
DEALLOCATE (dbc_params%aa_cuboidal_xxtnt)
281 IF (
ASSOCIATED(dbc_params%aa_cuboidal_yxtnt))
DEALLOCATE (dbc_params%aa_cuboidal_yxtnt)
282 IF (
ASSOCIATED(dbc_params%aa_cuboidal_zxtnt))
DEALLOCATE (dbc_params%aa_cuboidal_zxtnt)
283 IF (
ASSOCIATED(dbc_params%aa_cuboidal_vD))
DEALLOCATE (dbc_params%aa_cuboidal_vD)
284 IF (
ASSOCIATED(dbc_params%aa_cuboidal_frequency))
DEALLOCATE (dbc_params%aa_cuboidal_frequency)
285 IF (
ASSOCIATED(dbc_params%aa_cuboidal_osc_frac))
DEALLOCATE (dbc_params%aa_cuboidal_osc_frac)
286 IF (
ASSOCIATED(dbc_params%aa_cuboidal_phase))
DEALLOCATE (dbc_params%aa_cuboidal_phase)
287 IF (
ASSOCIATED(dbc_params%aa_cuboidal_sigma))
DEALLOCATE (dbc_params%aa_cuboidal_sigma)
288 IF (
ASSOCIATED(dbc_params%aa_cuboidal_is_periodic))
DEALLOCATE (dbc_params%aa_cuboidal_is_periodic)
Dirichlet boundary condition data types.
subroutine, public dbc_parameters_dealloc(dbc_params)
deallocates dirichlet_bc_parameters type
integer, parameter, public z_axis
integer, parameter, public inscribed
integer, parameter, public cylindrical
integer, parameter, public aa_cuboidal
integer, parameter, public y_axis
subroutine, public dbc_release(contacts, do_dbc_cube, pw_pool)
releases the defined Dirichlet boundary region
integer, parameter, public circumscribed
integer, parameter, public x_axis
integer, parameter, public aa_planar
integer, parameter, public xz_plane
subroutine, public dbc_tile_release(dbc, pw_pool)
releases tiles
integer, parameter, public planar
integer, parameter, public yz_plane
integer, parameter, public xy_plane
Defines the basic variable types.
integer, parameter, public dp
Manages a pool of grids (to be used for example as tmp objects), but can also be used to instantiate ...