370 integer :: i,
j,
k,
l
372# 38 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
373 real(wp),
dimension(num_fluids) :: alpha_rho, alpha
374# 40 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
375 real(wp) :: rho, gamma, pi_inf, qv_mix
376 integer :: hit_cap, hit_cap_sum, unusable, unusable_sum
377 real(wp) :: resid, resid_max
385# 49 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
387# 49 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
388#if defined(MFC_OpenACC)
389# 49 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
391# 49 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
393# 49 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
394#elif defined(MFC_OpenMP)
395# 49 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
397# 49 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
399# 49 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
401# 49 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
403# 49 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
405# 49 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
407# 51 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
419 hit_cap_sum = hit_cap_sum + hit_cap
420 unusable_sum = unusable_sum + unusable
421 resid_max = max(resid_max, resid)
424# 66 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
425#if defined(MFC_OpenACC)
426# 66 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
428# 66 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
429#elif defined(MFC_OpenMP)
430# 66 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
432# 66 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
446# 78 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
447#if defined(MFC_OpenACC)
448# 78 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
450# 78 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
451#elif defined(MFC_OpenMP)
452# 78 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
454# 78 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
456# 78 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
463 if (unusable_sum > 0)
then
464 call s_mpi_abort(
'Pressure relaxation produced a non-physical phasic density. Exiting.')
527# 123 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
529# 123 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
531# 123 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
533# 123 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
535# 123 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
537# 123 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
539# 123 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
542 type(
scalar_field),
dimension(sys_size),
intent(inout) :: q_cons_vf
543 integer,
intent(in) :: j, k, l
544 real(wp) :: sum_alpha
549# 131 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
550#if defined(MFC_OpenACC)
551# 131 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
553# 131 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
554#elif defined(MFC_OpenMP)
555# 131 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
557# 131 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
560 if ((q_cons_vf(i + eqn_idx%cont%beg - 1)%sf(j, k, l) < 0._wp) .or. (q_cons_vf(i + eqn_idx%adv%beg - 1)%sf(j, k, &
562 q_cons_vf(i + eqn_idx%cont%beg - 1)%sf(j, k, l) = 0._wp
563 q_cons_vf(i + eqn_idx%adv%beg - 1)%sf(j, k, l) = 0._wp
564 q_cons_vf(i + eqn_idx%int_en%beg - 1)%sf(j, k, l) = 0._wp
566 if (q_cons_vf(i + eqn_idx%adv%beg - 1)%sf(j, k, l) > 1._wp) q_cons_vf(i + eqn_idx%adv%beg - 1)%sf(j, k, l) = 1._wp
567 sum_alpha = sum_alpha + q_cons_vf(i + eqn_idx%adv%beg - 1)%sf(j, k, l)
571# 143 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
572#if defined(MFC_OpenACC)
573# 143 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
575# 143 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
576#elif defined(MFC_OpenMP)
577# 143 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
579# 143 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
582 q_cons_vf(i + eqn_idx%adv%beg - 1)%sf(j, k, l) = q_cons_vf(i + eqn_idx%adv%beg - 1)%sf(j, k, l)/sum_alpha
591# 153 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
593# 153 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
595# 153 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
597# 153 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
599# 153 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
601# 153 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
603# 153 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
606 type(
scalar_field),
dimension(sys_size),
intent(inout) :: q_cons_vf
607 integer,
intent(in) :: j, k, l
608 integer,
intent(out) :: hit_cap, unusable
609 real(wp),
intent(out) :: resid
610 real(wp) :: pres_relax, f_pres, df_pres
611# 163 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
612 real(wp),
dimension(num_fluids) :: pres_K_init, rho_K_init, rho_K_s
613# 165 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
614 real(wp) :: gamma_K, pi_inf_K, dpi_K, dgamma_K, c2_K, alpha_i, alpha_rho_i, rho_i, p_i, rho_s_i
615 integer,
parameter :: MAX_ITER = 50
617 real(wp),
parameter :: TOLERANCE = 1.e-10_wp
624# 174 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
625#if defined(MFC_OpenACC)
626# 174 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
628# 174 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
629#elif defined(MFC_OpenMP)
630# 174 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
632# 174 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
635 if (q_cons_vf(i + eqn_idx%adv%beg - 1)%sf(j, k, l) > sgm_eps)
then
639 alpha_rho_i = q_cons_vf(i + eqn_idx%cont%beg - 1)%sf(j, k, l)
640 alpha_i = q_cons_vf(i + eqn_idx%adv%beg - 1)%sf(j, k, l)
642 rho_k_init(i) = rho_i
643 pres_k_init(i) = ((q_cons_vf(i + eqn_idx%int_en%beg - 1)%sf(j, k, l) - q_cons_vf(i + eqn_idx%cont%beg - 1)%sf(j, &
644 & k, l)*qvs(i))/q_cons_vf(i + eqn_idx%adv%beg - 1)%sf(j, k, l) - pi_inf_k)/gamma_k
646 if (pres_k_init(i) <= -(1._wp - 1.e-8_wp)*isentrope_b(i) + 1.e-8_wp) pres_k_init(i) = -(1._wp - 1.e-8_wp) &
647 & *isentrope_b(i) + 1.e-8_wp
650 pres_k_init(i) = 0._wp
652 pres_relax = pres_relax + q_cons_vf(i + eqn_idx%adv%beg - 1)%sf(j, k, l)*pres_k_init(i)
659# 199 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
660#if defined(MFC_OpenACC)
661# 199 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
663# 199 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
664#elif defined(MFC_OpenMP)
665# 199 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
667# 199 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
669 do iter = 0, max_iter - 1
670 if (abs(f_pres) > tolerance)
then
671 pres_relax = pres_relax - f_pres/df_pres
676 if (pres_relax <= -(1._wp - 1.e-8_wp)*isentrope_b(i) + 1.e-8_wp) pres_relax = -(1._wp - 1.e-8_wp) &
677 & *isentrope_b(i) + 1.e-8_wp
685# 215 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
686#if defined(MFC_OpenACC)
687# 215 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
689# 215 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
690#elif defined(MFC_OpenMP)
691# 215 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
693# 215 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
696 if (q_cons_vf(i + eqn_idx%adv%beg - 1)%sf(j, k, l) > sgm_eps .and. any_state_dependent_eos)
then
697 rho_i = rho_k_init(i)
701 f_pres = f_pres + q_cons_vf(i + eqn_idx%cont%beg - 1)%sf(j, k, l)/rho_k_s(i)
702 df_pres = df_pres - q_cons_vf(i + eqn_idx%cont%beg - 1)%sf(j, k, l)/(rho_k_s(i)**2*c2_k)
703 else if (q_cons_vf(i + eqn_idx%adv%beg - 1)%sf(j, k, l) > sgm_eps)
then
705 rho_k_s(i) = q_cons_vf(i + eqn_idx%cont%beg - 1)%sf(j, k, l)/max(q_cons_vf(i + eqn_idx%adv%beg - 1)%sf(j, &
707 & sgm_eps)*((pres_relax + isentrope_b(i))/(pres_k_init(i) + isentrope_b(i)))**(1._wp/isentrope_n(i))
708 f_pres = f_pres + q_cons_vf(i + eqn_idx%cont%beg - 1)%sf(j, k, l)/rho_k_s(i)
709 df_pres = df_pres - q_cons_vf(i + eqn_idx%cont%beg - 1)%sf(j, k, &
710 & l)/(isentrope_n(i)*rho_k_s(i)*(pres_relax + isentrope_b(i)))
720 if (.not. (abs(f_pres) <= tolerance))
then
725 if (f_pres /= f_pres) resid = huge(1._wp)
736# 256 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
737#if defined(MFC_OpenACC)
738# 256 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
740# 256 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
741#elif defined(MFC_OpenMP)
742# 256 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
744# 256 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
747 if (q_cons_vf(i + eqn_idx%adv%beg - 1)%sf(j, k, l) > sgm_eps .and. .not. (rho_k_s(i) > 0._wp)) usable = .false.
752# 262 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
753#if defined(MFC_OpenACC)
754# 262 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
756# 262 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
757#elif defined(MFC_OpenMP)
758# 262 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
760# 262 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
763 if (q_cons_vf(i + eqn_idx%adv%beg - 1)%sf(j, k, l) > sgm_eps) q_cons_vf(i + eqn_idx%adv%beg - 1)%sf(j, k, &
764 & l) = q_cons_vf(i + eqn_idx%cont%beg - 1)%sf(j, k, l)/rho_k_s(i)
776# 276 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
778# 276 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
780# 276 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
782# 276 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
784# 276 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
786# 276 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
788# 276 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
791 type(
scalar_field),
dimension(sys_size),
intent(inout) :: q_cons_vf
792 integer,
intent(in) :: j, k, l
793 real(wp),
intent(in) :: rho, gamma, pi_inf, qv_mix
794 real(wp) :: dyn_pres, pres_relax, alpha_i, alpha_rho_i, e_i
799# 285 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
800#if defined(MFC_OpenACC)
801# 285 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
803# 285 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
804#elif defined(MFC_OpenMP)
805# 285 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
807# 285 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
809 do i = eqn_idx%mom%beg, eqn_idx%mom%end
810 dyn_pres = dyn_pres + 5.e-1_wp*q_cons_vf(i)%sf(j, k, l)*q_cons_vf(i)%sf(j, k, l)/max(rho, sgm_eps)
813 pres_relax =
f_pressure(q_cons_vf(eqn_idx%E)%sf(j, k, l) - dyn_pres, gamma, pi_inf, qv_mix)
816# 292 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
817#if defined(MFC_OpenACC)
818# 292 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
820# 292 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
821#elif defined(MFC_OpenMP)
822# 292 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
824# 292 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
827 alpha_i = q_cons_vf(i + eqn_idx%adv%beg - 1)%sf(j, k, l)
828 alpha_rho_i = q_cons_vf(i + eqn_idx%cont%beg - 1)%sf(j, k, l)
830 q_cons_vf(i + eqn_idx%int_en%beg - 1)%sf(j, k, l) = e_i