310 integer,
intent(in) :: nBubs
311 real(wp),
dimension(1:lag_params%nBubs_glb, 1:3, 1:2),
intent(in) :: lbk_s, lbk_pos
312 real(wp),
dimension(1:lag_params%nBubs_glb, 1:2),
intent(in) :: lbk_rad, lbk_vel
313 type(scalar_field),
dimension(:),
intent(inout) :: updatedvar
315 smoothfunc:
select case(lag_params%smooth_type)
317 call s_gaussian(nbubs, lbk_rad, lbk_vel, lbk_s, lbk_pos, updatedvar)
319 call s_deltafunc(nbubs, lbk_rad, lbk_vel, lbk_s, updatedvar)
320 end select smoothfunc
326 subroutine s_deltafunc(nBubs, lbk_rad, lbk_vel, lbk_s, updatedvar)
328 integer,
intent(in) :: nBubs
329 real(wp),
dimension(1:lag_params%nBubs_glb, 1:3, 1:2),
intent(in) :: lbk_s
330 real(wp),
dimension(1:lag_params%nBubs_glb, 1:2),
intent(in) :: lbk_rad, lbk_vel
331 type(scalar_field),
dimension(:),
intent(inout) :: updatedvar
333 integer,
dimension(3) :: cell
334 real(wp) :: strength_vel, strength_vol
336 real(wp) :: addFun1, addFun2, addFun3
337 real(wp) :: volpart, Vol
338 real(wp),
dimension(3) :: s_coord
342# 57 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
344# 57 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
345#if defined(MFC_OpenACC)
346# 57 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
348# 57 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
349#elif defined(MFC_OpenMP)
350# 57 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
352# 57 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
354# 57 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
356# 57 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
358# 57 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
360# 57 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
364 volpart = 4._wp/3._wp*pi*lbk_rad(l, 2)**3._wp
365 s_coord(1:3) = lbk_s(l, 1:3, 2)
368 strength_vol = volpart
369 strength_vel = 4._wp*pi*lbk_rad(l, 2)**2._wp*lbk_vel(l, 2)
371 if (num_dims == 2)
then
372 vol = dx(cell(1))*dy(cell(2))*lag_params%charwidth
373 if (cyl_coord) vol = dx(cell(1))*dy(cell(2))*y_cc(cell(2))*2._wp*pi
375 vol = dx(cell(1))*dy(cell(2))*dz(cell(3))
379 addfun1 = strength_vol/vol
381# 76 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
382#if defined(MFC_OpenACC)
383# 76 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
385# 76 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
386#elif defined(MFC_OpenMP)
387# 76 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
389# 76 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
391 updatedvar(1)%sf(cell(1), cell(2), cell(3)) = updatedvar(1)%sf(cell(1), cell(2), cell(3)) + real(addfun1, kind=stp)
394 addfun2 = strength_vel/vol
396# 81 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
397#if defined(MFC_OpenACC)
398# 81 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
400# 81 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
401#elif defined(MFC_OpenMP)
402# 81 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
404# 81 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
406 updatedvar(2)%sf(cell(1), cell(2), cell(3)) = updatedvar(2)%sf(cell(1), cell(2), cell(3)) + real(addfun2, kind=stp)
410 if (lag_params%cluster_type >= 4)
then
411 addfun3 = (strength_vol*strength_vel)/vol
413# 88 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
414#if defined(MFC_OpenACC)
415# 88 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
417# 88 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
418#elif defined(MFC_OpenMP)
419# 88 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
421# 88 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
423 updatedvar(5)%sf(cell(1), cell(2), cell(3)) = updatedvar(5)%sf(cell(1), cell(2), cell(3)) + real(addfun3, kind=stp)
427# 92 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
429# 92 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
430#if defined(MFC_OpenACC)
431# 92 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
433# 92 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
434#elif defined(MFC_OpenMP)
435# 92 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
437# 92 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
439# 92 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
441# 92 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
443# 92 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
450 subroutine s_gaussian(nBubs, lbk_rad, lbk_vel, lbk_s, lbk_pos, updatedvar)
452 integer,
intent(in) :: nBubs
453 real(wp),
dimension(1:lag_params%nBubs_glb, 1:3, 1:2),
intent(in) :: lbk_s, lbk_pos
454 real(wp),
dimension(1:lag_params%nBubs_glb, 1:2),
intent(in) :: lbk_rad, lbk_vel
455 type(scalar_field),
dimension(:),
intent(inout) :: updatedvar
457 real(wp),
dimension(3) :: center
458 integer,
dimension(3) :: cell
460 real(wp) :: strength_vel, strength_vol
462 real(wp),
dimension(3) :: nodecoord
463 real(wp) :: addFun1, addFun2, addFun3
464 real(wp) :: func, func2, volpart
465 integer,
dimension(3) :: cellaux
466 real(wp),
dimension(3) :: s_coord
467 integer :: l, i, j, k
468 logical :: celloutside
469 integer :: smearGrid, smearGridz
471 smeargrid = mapcells - (-mapcells) + 1
472 smeargridz = smeargrid
473 if (p == 0) smeargridz = 1
476# 123 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
478# 123 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
479#if defined(MFC_OpenACC)
480# 123 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
482# 123 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
483#elif defined(MFC_OpenMP)
484# 123 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
486# 123 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
488# 123 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
490# 123 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
492# 123 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
494# 123 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
499 volpart = 4._wp/3._wp*pi*lbk_rad(l, 2)**3._wp
500 s_coord(1:3) = lbk_s(l, 1:3, 2)
501 center(1:2) = lbk_pos(l, 1:2, 2)
502 if (p > 0) center(3) = lbk_pos(l, 3, 2)
506 strength_vol = volpart
507 strength_vel = 4._wp*pi*lbk_rad(l, 2)**2._wp*lbk_vel(l, 2)
510# 137 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
511#if defined(MFC_OpenACC)
512# 137 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
514# 137 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
515#elif defined(MFC_OpenMP)
516# 137 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
518# 137 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
523 cellaux(1) = cell(1) + i - (mapcells + 1)
524 cellaux(2) = cell(2) + j - (mapcells + 1)
525 cellaux(3) = cell(3) + k - (mapcells + 1)
526 if (p == 0) cellaux(3) = 0
532 if (.not. celloutside)
then
534 nodecoord(1) = x_cc(cellaux(1))
535 nodecoord(2) = y_cc(cellaux(2))
536 if (p > 0) nodecoord(3) = z_cc(cellaux(3))
538 if (lag_params%cluster_type >= 4)
call s_applygaussian(center, cellaux, nodecoord, stddsv, 1._wp, func2)
541 if (any((/bc_x%beg, bc_x%end, bc_y%beg, bc_y%end, bc_z%beg, bc_z%end/) == bc_reflective))
then
550 if (p == 0) cellaux(3) = 0
554 addfun1 = func*strength_vol
556# 173 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
557#if defined(MFC_OpenACC)
558# 173 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
560# 173 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
561#elif defined(MFC_OpenMP)
562# 173 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
564# 173 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
566 updatedvar(1)%sf(cellaux(1), cellaux(2), cellaux(3)) = &
567 updatedvar(1)%sf(cellaux(1), cellaux(2), cellaux(3)) &
568 + real(addfun1, kind=stp)
571 addfun2 = func*strength_vel
573# 180 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
574#if defined(MFC_OpenACC)
575# 180 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
577# 180 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
578#elif defined(MFC_OpenMP)
579# 180 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
581# 180 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
583 updatedvar(2)%sf(cellaux(1), cellaux(2), cellaux(3)) = &
584 updatedvar(2)%sf(cellaux(1), cellaux(2), cellaux(3)) &
585 + real(addfun2, kind=stp)
589 if (lag_params%cluster_type >= 4)
then
590 addfun3 = func2*strength_vol*strength_vel
592# 189 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
593#if defined(MFC_OpenACC)
594# 189 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
596# 189 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
597#elif defined(MFC_OpenMP)
598# 189 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
600# 189 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
602 updatedvar(5)%sf(cellaux(1), cellaux(2), cellaux(3)) = &
603 updatedvar(5)%sf(cellaux(1), cellaux(2), cellaux(3)) &
604 + real(addfun3, kind=stp)
611# 198 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
613# 198 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
614#if defined(MFC_OpenACC)
615# 198 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
617# 198 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
618#elif defined(MFC_OpenMP)
619# 198 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
621# 198 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
623# 198 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
625# 198 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
627# 198 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
635# 204 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
637# 204 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
639# 204 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
641# 204 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
643# 204 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
645# 204 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
647# 204 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
649# 204 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
651# 204 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
653# 206 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
655 real(wp),
dimension(3),
intent(in) :: center
656 integer,
dimension(3),
intent(in) :: cellaux
657 real(wp),
dimension(3),
intent(in) :: nodecoord
658 real(wp),
intent(in) :: stddsv
659 real(wp),
intent(in) :: strength_idx
660 real(wp),
intent(out) :: func
663 real(wp) :: theta, dtheta, L2, dzp, Lz2
664 real(wp) :: Nr, Nr_count
666 distance = sqrt((center(1) - nodecoord(1))**2._wp + (center(2) - nodecoord(2))**2._wp + (center(3) - nodecoord(3))**2._wp)
668 if (num_dims == 3)
then
670 func = exp(-0.5_wp*(distance/stddsv)**2._wp)/(sqrt(2._wp*pi)*stddsv)**3._wp
676 nr = ceiling(2._wp*pi*nodecoord(2)/(y_cb(cellaux(2)) - y_cb(cellaux(2) - 1)))
678 l2 = center(2)**2._wp + nodecoord(2)**2._wp - 2._wp*center(2)*nodecoord(2)*cos(theta)
679 distance = sqrt((center(1) - nodecoord(1))**2._wp + l2)
681 func = dtheta/2._wp/pi*exp(-0.5_wp*(distance/stddsv)**2._wp)/(sqrt(2._wp*pi)*stddsv)**3._wp
683 do while (nr_count < nr - 1._wp)
684 nr_count = nr_count + 1._wp
685 theta = nr_count*dtheta
687 l2 = center(2)**2._wp + nodecoord(2)**2._wp - 2._wp*center(2)*nodecoord(2)*cos(theta)
688 distance = sqrt((center(1) - nodecoord(1))**2._wp + l2)
691 dtheta/2._wp/pi*exp(-0.5_wp*(distance/stddsv)**2._wp)/(sqrt(2._wp*pi)*stddsv)**(3._wp*(strength_idx + 1._wp))
698 nr = ceiling(lag_params%charwidth/(y_cb(cellaux(2)) - y_cb(cellaux(2) - 1)))
699 nr_count = 1._wp - mapcells*1._wp
700 dzp = y_cb(cellaux(2) + 1) - y_cb(cellaux(2))
701 lz2 = (center(3) - (dzp*(0.5_wp + nr_count) - lag_params%charwidth/2._wp))**2._wp
702 distance = sqrt((center(1) - nodecoord(1))**2._wp + (center(2) - nodecoord(2))**2._wp + lz2)
703 func = dzp/lag_params%charwidth*exp(-0.5_wp*(distance/stddsv)**2._wp)/(sqrt(2._wp*pi)*stddsv)**3._wp
704 do while (nr_count < nr - 1._wp + ((mapcells - 1)*1._wp))
705 nr_count = nr_count + 1._wp
706 lz2 = (center(3) - (dzp*(0.5_wp + nr_count) - lag_params%charwidth/2._wp))**2._wp
707 distance = sqrt((center(1) - nodecoord(1))**2._wp + (center(2) - nodecoord(2))**2._wp + lz2)
709 dzp/lag_params%charwidth*exp(-0.5_wp*(distance/stddsv)**2._wp)/(sqrt(2._wp*pi)*stddsv)**(3._wp*(strength_idx + 1._wp))
773# 306 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
775# 306 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
777# 306 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
779# 306 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
781# 306 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
783# 306 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
785# 306 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
787# 306 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
789# 306 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
791# 308 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
793 integer,
dimension(3),
intent(inout) :: cellaux
794 integer,
dimension(3),
intent(in) :: cell
797 if (bc_x%beg == bc_reflective .and. (cell(1) <= mapcells - 1))
then
798 cellaux(1) = abs(cellaux(1)) - 1
800 if (bc_x%end == bc_reflective .and. (cell(1) >= m + 1 - mapcells))
then
801 cellaux(1) = cellaux(1) - (2*(cellaux(1) - m) - 1)
805 if (bc_y%beg == bc_reflective .and. (cell(2) <= mapcells - 1))
then
806 cellaux(2) = abs(cellaux(2)) - 1
808 if (bc_y%end == bc_reflective .and. (cell(2) >= n + 1 - mapcells))
then
809 cellaux(2) = cellaux(2) - (2*(cellaux(2) - n) - 1)
814 if (bc_z%beg == bc_reflective .and. (cell(3) <= mapcells - 1))
then
815 cellaux(3) = abs(cellaux(3)) - 1
817 if (bc_z%end == bc_reflective .and. (cell(3) >= p + 1 - mapcells))
then
818 cellaux(3) = cellaux(3) - (2*(cellaux(3) - p) - 1)
830# 345 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
832# 345 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
834# 345 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
836# 345 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
838# 345 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
840# 345 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
842# 345 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
844# 345 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
846# 345 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
848# 347 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL_kernels.fpp"
850 integer,
dimension(3),
intent(in) :: cell
851 real(wp),
intent(in) :: volpart
852 real(wp),
intent(out) :: stddsv
854 real(wp) :: chardist, charvol
858 chardist = sqrt(dx(cell(1))*dy(cell(2)))
859 if (p > 0) chardist = (dx(cell(1))*dy(cell(2))*dz(cell(3)))**(1._wp/3._wp)
863 charvol = dx(cell(1))*dy(cell(2))*dz(cell(3))
866 charvol = dx(cell(1))*dy(cell(2))*y_cc(cell(2))*2._wp*pi
868 charvol = dx(cell(1))*dy(cell(2))*lag_params%charwidth
873 if (((volpart/charvol) > 0.5_wp*lag_params%valmaxvoid) .or. (lag_params%smooth_type == 1))
then
874 rad = (3._wp*volpart/(4._wp*pi))**(1._wp/3._wp)
875 stddsv = 1._wp*lag_params%epsilonb*max(chardist, rad)