Skip to content

Commit 3c60bbe

Browse files
committed
Initial commit for testing
1 parent 8bd76d7 commit 3c60bbe

File tree

15 files changed

+477
-202
lines changed

15 files changed

+477
-202
lines changed

src/common/m_derived_types.fpp

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,16 @@ module m_derived_types
3333
integer, pointer, dimension(:, :, :) :: sf => null()
3434
end type integer_field
3535

36+
!> Derived type for levelset
37+
type levelset_field
38+
real(kind(0d0)), pointer, dimension(:, :, :, :) :: sf => null()
39+
end type levelset_field
40+
41+
!> Derived type for levelset norm
42+
type levelset_norm_field
43+
real(kind(0d0)), pointer, dimension(:, :, :, :, :) :: vf => null()
44+
end type levelset_norm_field
45+
3646
type mpi_io_var
3747
integer, allocatable, dimension(:) :: view
3848
type(scalar_field), allocatable, dimension(:) :: var
@@ -43,6 +53,16 @@ module m_derived_types
4353
type(integer_field) :: var
4454
end type mpi_io_ib_var
4555

56+
type mpi_io_levelset_var
57+
integer :: view
58+
type(levelset_field) :: var
59+
end type mpi_io_levelset_var
60+
61+
type mpi_io_levelset_norm_var
62+
integer :: view
63+
type(levelset_norm_field) :: var
64+
end type mpi_io_levelset_norm_var
65+
4666
!> Derived type annexing a vector field (VF)
4767
type vector_field
4868
type(scalar_field), allocatable, dimension(:) :: vf !< Vector field

src/common/m_mpi_common.fpp

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,9 @@ contains
6262
6363
!! @param q_cons_vf Conservative variables
6464
!! @param ib_markers track if a cell is within the immersed boundary
65-
subroutine s_initialize_mpi_data(q_cons_vf, ib_markers)
65+
!! @param levelset closest distance from every cell to the IB
66+
!! @param levelset_norm normalized vector from every cell to the closest point to the IB
67+
subroutine s_initialize_mpi_data(q_cons_vf, ib_markers, levelset, levelset_norm)
6668
6769
type(scalar_field), &
6870
dimension(sys_size), &
@@ -72,6 +74,14 @@ contains
7274
optional, &
7375
intent(in) :: ib_markers
7476
77+
type(levelset_field), &
78+
optional, &
79+
intent(IN) :: levelset
80+
81+
type(levelset_norm_field), &
82+
optional, &
83+
intent(IN) :: levelset_norm
84+
7585
integer, dimension(num_dims) :: sizes_glb, sizes_loc
7686
integer, dimension(1) :: airfoil_glb, airfoil_loc, airfoil_start
7787
@@ -137,12 +147,23 @@ contains
137147
138148
#ifdef MFC_PRE_PROCESS
139149
MPI_IO_IB_DATA%var%sf => ib_markers%sf
150+
MPI_IO_levelset_DATA%var%sf => levelset%sf
151+
MPI_IO_levelsetnorm_DATA%var%vf => levelset_norm%vf
140152
#else
141153
MPI_IO_IB_DATA%var%sf => ib_markers%sf(0:m, 0:n, 0:p)
154+
MPI_IO_levelset_DATA%var%sf => levelset%sf(0:m, 0:n, 0:p, 1:num_ibs)
155+
MPI_IO_levelsetnorm_DATA%var%vf => levelset_norm%vf(0:m, 0:n, 0:p, 1:num_ibs, 1:3)
142156
#endif
143157
call MPI_TYPE_CREATE_SUBARRAY(num_dims, sizes_glb, sizes_loc, start_idx, &
144158
MPI_ORDER_FORTRAN, MPI_INTEGER, MPI_IO_IB_DATA%view, ierr)
159+
call MPI_TYPE_CREATE_SUBARRAY(num_dims, sizes_glb, sizes_loc, start_idx, &
160+
MPI_ORDER_FORTRAN, MPI_DOUBLE_PRECISION, MPI_IO_levelset_DATA%view, ierr)
161+
call MPI_TYPE_CREATE_SUBARRAY(num_dims, sizes_glb, sizes_loc, start_idx, &
162+
MPI_ORDER_FORTRAN, MPI_DOUBLE_PRECISION, MPI_IO_levelsetnorm_DATA%view, ierr)
163+
145164
call MPI_TYPE_COMMIT(MPI_IO_IB_DATA%view, ierr)
165+
call MPI_TYPE_COMMIT(MPI_IO_levelset_DATA%view, ierr)
166+
call MPI_TYPE_COMMIT(MPI_IO_levelsetnorm_DATA%view, ierr)
146167
147168
end if
148169

src/post_process/m_global_parameters.fpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,10 +144,14 @@ module m_global_parameters
144144
integer, allocatable, dimension(:) :: start_idx !<
145145
!! Starting cell-center index of local processor in global grid
146146

147+
integer :: num_ibs !< Number of immersed boundaries
148+
147149
#ifdef MFC_MPI
148150

149151
type(mpi_io_var), public :: MPI_IO_DATA
150152
type(mpi_io_ib_var), public :: MPI_IO_IB_DATA
153+
type(mpi_io_levelset_var), public :: MPI_IO_levelset_DATA
154+
type(mpi_io_levelset_norm_var), public :: MPI_IO_levelsetnorm_DATA
151155

152156
#endif
153157

@@ -389,6 +393,9 @@ contains
389393
sigma = dflt_real
390394
adv_n = .false.
391395

396+
! IBM
397+
num_ibs = dflt_int
398+
392399
end subroutine s_assign_default_values_to_user_inputs
393400

394401
!> Computation of parameters, allocation procedures, and/or

src/post_process/m_mpi_proxy.fpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ contains
159159
& 'model_eqns', 'num_fluids', 'bc_x%beg', 'bc_x%end', 'bc_y%beg', &
160160
& 'bc_y%end', 'bc_z%beg', 'bc_z%end', 'flux_lim', 'format', &
161161
& 'precision', 'fd_order', 'thermal', 'nb', 'relax_model', &
162-
& 'n_start' ]
162+
& 'n_start', 'num_ibs' ]
163163
call MPI_BCAST(${VAR}$, 1, MPI_INTEGER, 0, MPI_COMM_WORLD, ierr)
164164
#:endfor
165165

src/post_process/m_start_up.f90

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ subroutine s_read_input_file
8181
parallel_io, rhoref, pref, bubbles, qbmm, sigR, &
8282
R0ref, nb, polytropic, thermal, Ca, Web, Re_inv, &
8383
polydisperse, poly_sigma, file_per_process, relax, &
84-
relax_model, cf_wrt, sigma, adv_n, ib, &
84+
relax_model, cf_wrt, sigma, adv_n, ib, num_ibs, &
8585
cfl_adap_dt, cfl_const_dt, t_save, t_stop, n_start, &
8686
cfl_target
8787

src/simulation/m_compute_levelset.fpp renamed to src/pre_process/m_compute_levelset.fpp

Lines changed: 57 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -38,12 +38,11 @@ module m_compute_levelset
3838

3939
contains
4040

41-
!> Initialize IBM module
4241
subroutine s_compute_circle_levelset(levelset, levelset_norm, ib_patch_id)
4342

44-
real(kind(0d0)), dimension(0:m, 0:n, 0:p, num_ibs), intent(inout) :: levelset
45-
real(kind(0d0)), dimension(0:m, 0:n, 0:p, num_ibs, 3), intent(inout) :: levelset_norm
46-
integer, intent(in) :: ib_patch_id
43+
type(levelset_field), intent(INOUT) :: levelset
44+
type(levelset_norm_field), intent(INOUT) :: levelset_norm
45+
integer, intent(IN) :: ib_patch_id
4746

4847
real(kind(0d0)) :: radius, dist
4948
real(kind(0d0)) :: x_centroid, y_centroid
@@ -62,11 +61,11 @@ contains
6261
dist_vec(2) = y_cc(j) - y_centroid
6362
dist_vec(3) = 0
6463
dist = dsqrt(sum(dist_vec**2))
65-
levelset(i, j, 0, ib_patch_id) = dist - radius
64+
levelset%sf(i, j, 0, ib_patch_id) = dist - radius
6665
if (dist == 0) then
67-
levelset_norm(i, j, 0, ib_patch_id, :) = 0
66+
levelset_norm%vf(i, j, 0, ib_patch_id, :) = 0
6867
else
69-
levelset_norm(i, j, 0, ib_patch_id, :) = &
68+
levelset_norm%vf(i, j, 0, ib_patch_id, :) = &
7069
dist_vec(:)/dist
7170
end if
7271

@@ -77,9 +76,9 @@ contains
7776

7877
subroutine s_compute_airfoil_levelset(levelset, levelset_norm, ib_patch_id)
7978

80-
real(kind(0d0)), dimension(0:m, 0:n, 0:p, num_ibs), intent(inout) :: levelset
81-
real(kind(0d0)), dimension(0:m, 0:n, 0:p, num_ibs, 3), intent(inout) :: levelset_norm
82-
integer, intent(in) :: ib_patch_id
79+
type(levelset_field), intent(INOUT) :: levelset
80+
type(levelset_norm_field), intent(INOUT) :: levelset_norm
81+
integer, intent(IN) :: ib_patch_id
8382

8483
real(kind(0d0)) :: radius, dist, global_dist
8584
integer :: global_id
@@ -95,7 +94,7 @@ contains
9594
do i = 0, m
9695
do j = 0, n
9796

98-
if (.not. f_is_default(patch_ib(ib_patch_id)%theta)) then
97+
if (patch_ib(ib_patch_id)%theta /= dflt_real) then
9998
x_act = (x_cc(i) - x_centroid)*cos(theta) - (y_cc(j) - y_centroid)*sin(theta) + x_centroid
10099
y_act = (x_cc(i) - x_centroid)*sin(theta) + (y_cc(j) - y_centroid)*cos(theta) + y_centroid
101100
else
@@ -145,11 +144,11 @@ contains
145144
dist = global_dist
146145
end if
147146

148-
levelset(i, j, 0, ib_patch_id) = dist
147+
levelset%sf(i, j, 0, ib_patch_id) = dist
149148
if (dist == 0) then
150-
levelset_norm(i, j, 0, ib_patch_id, :) = 0
149+
levelset_norm%vf(i, j, 0, ib_patch_id, :) = 0
151150
else
152-
levelset_norm(i, j, 0, ib_patch_id, :) = &
151+
levelset_norm%vf(i, j, 0, ib_patch_id, :) = &
153152
dist_vec(:)/dist
154153
end if
155154

@@ -160,9 +159,9 @@ contains
160159

161160
subroutine s_compute_3D_airfoil_levelset(levelset, levelset_norm, ib_patch_id)
162161

163-
real(kind(0d0)), dimension(0:m, 0:n, 0:p, num_ibs), intent(inout) :: levelset
164-
real(kind(0d0)), dimension(0:m, 0:n, 0:p, num_ibs, 3), intent(inout) :: levelset_norm
165-
integer, intent(in) :: ib_patch_id
162+
type(levelset_field), intent(INOUT) :: levelset
163+
type(levelset_norm_field), intent(INOUT) :: levelset_norm
164+
integer, intent(IN) :: ib_patch_id
166165

167166
real(kind(0d0)) :: radius, dist, dist_surf, dist_side, global_dist
168167
integer :: global_id
@@ -184,7 +183,7 @@ contains
184183
do j = 0, n
185184
do i = 0, m
186185

187-
if (.not. f_is_default(patch_ib(ib_patch_id)%theta)) then
186+
if (patch_ib(ib_patch_id)%theta /= dflt_real) then
188187
x_act = (x_cc(i) - x_centroid)*cos(theta) - (y_cc(j) - y_centroid)*sin(theta) + x_centroid
189188
y_act = (x_cc(i) - x_centroid)*sin(theta) + (y_cc(j) - y_centroid)*cos(theta) + y_centroid
190189
else
@@ -237,18 +236,18 @@ contains
237236
dist_side = min(abs(z_cc(l) - z_min), abs(z_max - z_cc(l)))
238237

239238
if (dist_side < dist_surf) then
240-
levelset(i, j, l, ib_patch_id) = dist_side
239+
levelset%sf(i, j, l, ib_patch_id) = dist_side
241240
if (dist_side == abs(z_cc(l) - z_min)) then
242-
levelset_norm(i, j, l, ib_patch_id, :) = (/0, 0, -1/)
241+
levelset_norm%vf(i, j, l, ib_patch_id, :) = (/0, 0, -1/)
243242
else
244-
levelset_norm(i, j, l, ib_patch_id, :) = (/0, 0, 1/)
243+
levelset_norm%vf(i, j, l, ib_patch_id, :) = (/0, 0, 1/)
245244
end if
246245
else
247-
levelset(i, j, l, ib_patch_id) = dist_surf
246+
levelset%sf(i, j, l, ib_patch_id) = dist_surf
248247
if (dist == 0) then
249-
levelset_norm(i, j, l, ib_patch_id, :) = 0
248+
levelset_norm%vf(i, j, l, ib_patch_id, :) = 0
250249
else
251-
levelset_norm(i, j, l, ib_patch_id, :) = &
250+
levelset_norm%vf(i, j, l, ib_patch_id, :) = &
252251
dist_vec(:)/dist_surf
253252
end if
254253
end if
@@ -262,10 +261,10 @@ contains
262261
!> Initialize IBM module
263262
subroutine s_compute_rectangle_levelset(levelset, levelset_norm, ib_patch_id)
264263

265-
real(kind(0d0)), dimension(0:m, 0:n, 0:p, num_ibs), intent(inout) :: levelset
266-
real(kind(0d0)), dimension(0:m, 0:n, 0:p, num_ibs, 3), intent(inout) :: levelset_norm
267-
integer, intent(in) :: ib_patch_id
264+
type(levelset_field), intent(INOUT) :: levelset
265+
type(levelset_norm_field), intent(INOUT) :: levelset_norm
268266

267+
integer :: ib_patch_id
269268
real(kind(0d0)) :: top_right(2), bottom_left(2)
270269
real(kind(0d0)) :: x, y, min_dist
271270
real(kind(0d0)) :: side_dists(4)
@@ -303,37 +302,37 @@ contains
303302
end if
304303

305304
if (min_dist == abs(side_dists(1))) then
306-
levelset(i, j, 0, ib_patch_id) = side_dists(1)
305+
levelset%sf(i, j, 0, ib_patch_id) = side_dists(1)
307306
if (side_dists(1) == 0) then
308-
levelset_norm(i, j, 0, ib_patch_id, 1) = 0d0
307+
levelset_norm%vf(i, j, 0, ib_patch_id, 1) = 0d0
309308
else
310-
levelset_norm(i, j, 0, ib_patch_id, 1) = side_dists(1)/ &
311-
abs(side_dists(1))
309+
levelset_norm%vf(i, j, 0, ib_patch_id, 1) = side_dists(1)/ &
310+
abs(side_dists(1))
312311
end if
313312

314313
else if (min_dist == abs(side_dists(2))) then
315-
levelset(i, j, 0, ib_patch_id) = side_dists(2)
314+
levelset%sf(i, j, 0, ib_patch_id) = side_dists(2)
316315
if (side_dists(2) == 0) then
317-
levelset_norm(i, j, 0, ib_patch_id, 1) = 0d0
316+
levelset_norm%vf(i, j, 0, ib_patch_id, 1) = 0d0
318317
else
319-
levelset_norm(i, j, 0, ib_patch_id, 1) = side_dists(2)/ &
320-
abs(side_dists(2))
318+
levelset_norm%vf(i, j, 0, ib_patch_id, 1) = side_dists(2)/ &
319+
abs(side_dists(2))
321320
end if
322321

323322
else if (min_dist == abs(side_dists(3))) then
324323
if (side_dists(3) == 0) then
325-
levelset_norm(i, j, 0, ib_patch_id, 1) = 0d0
324+
levelset_norm%vf(i, j, 0, ib_patch_id, 1) = 0d0
326325
else
327-
levelset_norm(i, j, 0, ib_patch_id, 1) = side_dists(3)/ &
328-
abs(side_dists(3))
326+
levelset_norm%vf(i, j, 0, ib_patch_id, 1) = side_dists(3)/ &
327+
abs(side_dists(3))
329328
end if
330329

331330
else if (min_dist == abs(side_dists(4))) then
332331
if (side_dists(4) == 0) then
333-
levelset_norm(i, j, 0, ib_patch_id, 1) = 0d0
332+
levelset_norm%vf(i, j, 0, ib_patch_id, 1) = 0d0
334333
else
335-
levelset_norm(i, j, 0, ib_patch_id, 1) = side_dists(4)/ &
336-
abs(side_dists(4))
334+
levelset_norm%vf(i, j, 0, ib_patch_id, 1) = side_dists(4)/ &
335+
abs(side_dists(4))
337336
end if
338337

339338
end if
@@ -347,9 +346,9 @@ contains
347346

348347
subroutine s_compute_sphere_levelset(levelset, levelset_norm, ib_patch_id)
349348

350-
real(kind(0d0)), dimension(0:m, 0:n, 0:p, num_ibs), intent(inout) :: levelset
351-
real(kind(0d0)), dimension(0:m, 0:n, 0:p, num_ibs, 3), intent(inout) :: levelset_norm
352-
integer, intent(in) :: ib_patch_id
349+
type(levelset_field), intent(INOUT) :: levelset
350+
type(levelset_norm_field), intent(INOUT) :: levelset_norm
351+
integer, intent(IN) :: ib_patch_id
353352

354353
real(kind(0d0)) :: radius, dist
355354
real(kind(0d0)) :: x_centroid, y_centroid, z_centroid
@@ -369,11 +368,11 @@ contains
369368
dist_vec(2) = y_cc(j) - y_centroid
370369
dist_vec(3) = z_cc(k) - z_centroid
371370
dist = dsqrt(sum(dist_vec**2))
372-
levelset(i, j, k, ib_patch_id) = dist - radius
371+
levelset%sf(i, j, k, ib_patch_id) = dist - radius
373372
if (dist == 0) then
374-
levelset_norm(i, j, k, ib_patch_id, :) = (/1, 0, 0/)
373+
levelset_norm%vf(i, j, k, ib_patch_id, :) = (/1, 0, 0/)
375374
else
376-
levelset_norm(i, j, k, ib_patch_id, :) = &
375+
levelset_norm%vf(i, j, k, ib_patch_id, :) = &
377376
dist_vec(:)/dist
378377
end if
379378
end do
@@ -384,9 +383,9 @@ contains
384383

385384
subroutine s_compute_cylinder_levelset(levelset, levelset_norm, ib_patch_id)
386385

387-
real(kind(0d0)), dimension(0:m, 0:n, 0:p, num_ibs), intent(inout) :: levelset
388-
real(kind(0d0)), dimension(0:m, 0:n, 0:p, num_ibs, 3), intent(inout) :: levelset_norm
389-
integer, intent(in) :: ib_patch_id
386+
type(levelset_field), intent(INOUT) :: levelset
387+
type(levelset_norm_field), intent(INOUT) :: levelset_norm
388+
integer, intent(IN) :: ib_patch_id
390389

391390
real(kind(0d0)) :: radius, dist
392391
real(kind(0d0)) :: x_centroid, y_centroid, z_centroid
@@ -434,20 +433,20 @@ contains
434433
- radius
435434

436435
if (dist_side < abs(dist_surface)) then
437-
levelset(i, j, k, ib_patch_id) = -dist_side
436+
levelset%sf(i, j, k, ib_patch_id) = -dist_side
438437
if (dist_side == abs(side_pos - boundary%beg)) then
439-
levelset_norm(i, j, k, ib_patch_id, :) = -dist_sides_vec
438+
levelset_norm%vf(i, j, k, ib_patch_id, :) = -dist_sides_vec
440439
else
441-
levelset_norm(i, j, k, ib_patch_id, :) = dist_sides_vec
440+
levelset_norm%vf(i, j, k, ib_patch_id, :) = dist_sides_vec
442441
end if
443442
else
444-
levelset(i, j, k, ib_patch_id) = dist_surface
443+
levelset%sf(i, j, k, ib_patch_id) = dist_surface
445444

446-
levelset_norm(i, j, k, ib_patch_id, :) = &
445+
levelset_norm%vf(i, j, k, ib_patch_id, :) = &
447446
(pos_vec - centroid_vec)*dist_surface_vec
448-
levelset_norm(i, j, k, ib_patch_id, :) = &
449-
levelset_norm(i, j, k, ib_patch_id, :)/ &
450-
norm2(levelset_norm(i, j, k, ib_patch_id, :))
447+
levelset_norm%vf(i, j, k, ib_patch_id, :) = &
448+
levelset_norm%vf(i, j, k, ib_patch_id, :)/ &
449+
norm2(levelset_norm%vf(i, j, k, ib_patch_id, :))
451450
end if
452451
end do
453452
end do

0 commit comments

Comments
 (0)