@@ -38,12 +38,11 @@ module m_compute_levelset
3838
3939contains
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%sf (i, j, 0 , ib_patch_id, :) = 0
6867 else
69- levelset_norm(i, j, 0 , ib_patch_id, :) = &
68+ levelset_norm%sf (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
@@ -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%sf (i, j, 0 , ib_patch_id, :) = 0
151150 else
152- levelset_norm(i, j, 0 , ib_patch_id, :) = &
151+ levelset_norm%sf (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
@@ -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%sf (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%sf (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%sf (i, j, l, ib_patch_id, :) = 0
250249 else
251- levelset_norm(i, j, l, ib_patch_id, :) = &
250+ levelset_norm%sf (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%sf (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%sf (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%sf (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%sf (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%sf (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%sf (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%sf (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%sf (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%sf (i, j, k, ib_patch_id, :) = (/ 1 , 0 , 0 / )
375374 else
376- levelset_norm(i, j, k, ib_patch_id, :) = &
375+ levelset_norm%sf (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%sf (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%sf (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%sf (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%sf (i, j, k, ib_patch_id, :) = &
448+ levelset_norm%sf (i, j, k, ib_patch_id, :)/ &
449+ norm2(levelset_norm%sf (i, j, k, ib_patch_id, :))
451450 end if
452451 end do
453452 end do
0 commit comments