401 real(wp) :: rhoe, dyne, rhos
402 real(wp) :: rho,
rm, m1, m2,
mct
405# 65 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
406 real(wp),
dimension(num_fluids) :: p_infpt, sk, hk, gk, ek, rhok
407# 67 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
410 integer :: i,
j,
k,
l
422# 80 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
424# 80 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
425#if defined(MFC_OpenACC)
426# 80 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
428# 80 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
429#elif defined(MFC_OpenMP)
430# 80 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
432# 80 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
434# 80 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
436# 80 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
438# 80 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
440# 80 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
442# 82 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
446 rho = 0.0_wp; tvf = 0.0_wp
448# 86 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
449#if defined(MFC_OpenACC)
450# 86 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
452# 86 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
453#elif defined(MFC_OpenMP)
454# 86 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
456# 86 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
460 rho = rho +
q_cons_vf(i + eqn_idx%cont%beg - 1)%sf(
j,
k,
l)
463 tvf = tvf +
q_cons_vf(i + eqn_idx%adv%beg - 1)%sf(
j,
k,
l)
482# 110 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
483#if defined(MFC_OpenACC)
484# 110 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
486# 110 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
487#elif defined(MFC_OpenMP)
488# 110 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
490# 110 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
492 do i = eqn_idx%mom%beg, eqn_idx%mom%end
506 if ((relax_model == 6) .and. ((
q_cons_vf(
lp + eqn_idx%cont%beg - 1)%sf(
j,
k, &
524# 142 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
525#if defined(MFC_OpenACC)
526# 142 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
528# 142 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
529#elif defined(MFC_OpenMP)
530# 142 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
532# 142 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
536 sk(i) = cvs(i)*log((ts**isentrope_n(i))/((ps + isentrope_b(i))**(isentrope_n(i) - 1.0_wp))) + qvps(i)
539 hk(i) = isentrope_n(i)*cvs(i)*ts + qvs(i)
542 gk(i) = hk(i) - ts*sk(i)
545 rhok(i) =
f_sg_thermal(ps, ts, isentrope_n(i), isentrope_b(i), cvs(i))
548 ek(i) = (ps + isentrope_n(i)*isentrope_b(i))/(ps + isentrope_b(i))*cvs(i)*ts + qvs(i)
554# 162 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
555#if defined(MFC_OpenACC)
556# 162 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
558# 162 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
559#elif defined(MFC_OpenMP)
560# 162 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
562# 162 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
575 rhos = rhos +
q_cons_vf(i + eqn_idx%cont%beg - 1)%sf(
j,
k,
l)*sk(i)
581# 179 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
582#if defined(MFC_OpenACC)
583# 179 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
585# 179 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
586#elif defined(MFC_OpenMP)
587# 179 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
589# 179 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
591# 179 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
601# 187 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
603# 187 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
605# 187 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
607# 187 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
609# 187 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
611# 187 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
613# 187 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
615# 187 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
617# 187 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
619# 187 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
621# 187 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
623# 187 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
625# 187 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
627# 187 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
629# 187 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
631# 187 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
633# 187 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
637 integer,
intent(in) :: j, k, l, MFL
638 real(wp),
intent(out) :: pS
639 real(wp),
dimension(1:),
intent(out) :: p_infpT
640 type(
scalar_field),
dimension(sys_size),
intent(in) :: q_cons_vf
641 real(wp),
intent(in) :: rhoe
642 real(wp),
intent(out) :: TS
643 real(wp) :: gp, gpp, hp, pO, mCP, mQ
644 real(wp) :: p_infpT_sum
647 mcp = 0.0_wp; mq = 0.0_wp; p_infpt_sum = 0._wp
649# 201 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
650#if defined(MFC_OpenACC)
651# 201 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
653# 201 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
654#elif defined(MFC_OpenMP)
655# 201 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
657# 201 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
660 p_infpt(i) = isentrope_b(i)
661 p_infpt_sum = p_infpt_sum + abs(p_infpt(i))
665# 207 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
666#if defined(MFC_OpenACC)
667# 207 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
669# 207 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
670#elif defined(MFC_OpenMP)
671# 207 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
673# 207 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
677 mcp = mcp + q_cons_vf(i + eqn_idx%cont%beg - 1)%sf(j, k, l)*cvs(i)*isentrope_n(i)
680 mq = mq + q_cons_vf(i + eqn_idx%cont%beg - 1)%sf(j, k, l)*qvs(i)
683# 224 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
686 if ((rhoe - mq - minval(p_infpt)) < 0.0_wp)
then
687 if ((mfl == 0) .or. (mfl == 1))
then
711 do while ((abs(ps - po) > palpha_eps) .and. (abs(ps - po) > (palpha_eps/1.e4_wp)*abs(po)) .or. (ns == 0))
721 gpp = 0.0_wp; gp = 0.0_wp; hp = 0.0_wp
723# 262 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
724#if defined(MFC_OpenACC)
725# 262 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
727# 262 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
728#elif defined(MFC_OpenMP)
729# 262 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
731# 262 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
734 gp = gp + (isentrope_n(i) - 1.0_wp)*q_cons_vf(i + eqn_idx%cont%beg - 1)%sf(j, k, &
735 & l)*cvs(i)*(rhoe + ps - mq)/(mcp*(ps + p_infpt(i)))
737 gpp = gpp + (isentrope_n(i) - 1.0_wp)*q_cons_vf(i + eqn_idx%cont%beg - 1)%sf(j, k, &
738 & l)*cvs(i)*(p_infpt(i) - rhoe + mq)/(mcp*(ps + p_infpt(i))**2)
741 hp = 1.0_wp/(rhoe + ps - mq) + 1.0_wp/(ps + minval(p_infpt))
744 ps = po + ((1.0_wp - gp)/gpp)/(1.0_wp - (1.0_wp - gp + abs(1.0_wp - gp))/(2.0_wp*gpp)*hp)
748 ts = (rhoe + ps - mq)/mcp
755 subroutine s_compute_ptg_residual(ml, mT, pS, j, k, l, q_cons_vf, rhoe, R2D, TS, mCP, mQ, mCVGP, mCVGP2, mCPD)
758# 287 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
760# 287 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
762# 287 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
764# 287 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
766# 287 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
768# 287 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
770# 287 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
773 real(wp),
intent(in) :: ml, mT, pS, rhoe
774 integer,
intent(in) :: j, k, l
775 type(
scalar_field),
dimension(sys_size),
intent(in) :: q_cons_vf
776 real(wp),
dimension(2),
intent(out) :: R2D
777 real(wp),
intent(out) :: TS, mCP, mQ, mCVGP, mCVGP2, mCPD
782 mcp = ml*cvs(
lp)*isentrope_n(
lp) + (mt - ml)*cvs(
vp)*isentrope_n(
vp)
783 mq = ml*qvs(
lp) + (mt - ml)*qvs(
vp)
784 mcvgp = 0.0_wp; mcvgp2 = 0.0_wp; mcpd = 0.0_wp; mqd = 0.0_wp
786# 301 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
787#if defined(MFC_OpenACC)
788# 301 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
790# 301 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
791#elif defined(MFC_OpenMP)
792# 301 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
794# 301 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
797 if ((i /=
lp) .and. (i /=
vp))
then
798 mcp = mcp + q_cons_vf(i + eqn_idx%cont%beg - 1)%sf(j, k, l)*cvs(i)*isentrope_n(i)
799 mq = mq + q_cons_vf(i + eqn_idx%cont%beg - 1)%sf(j, k, l)*qvs(i)
800 mcvgp = mcvgp + q_cons_vf(i + eqn_idx%cont%beg - 1)%sf(j, k, l)*cvs(i)*(isentrope_n(i) - 1)/(ps + isentrope_b(i))
801 mcvgp2 = mcvgp2 + q_cons_vf(i + eqn_idx%cont%beg - 1)%sf(j, k, &
802 & l)*cvs(i)*(isentrope_n(i) - 1)/((ps + isentrope_b(i))**2)
803 mqd = mqd + q_cons_vf(i + eqn_idx%cont%beg - 1)%sf(j, k, l)*qvs(i)
804 mcpd = mcpd + q_cons_vf(i + eqn_idx%cont%beg - 1)%sf(j, k, l)*cvs(i)*isentrope_n(i)
808 ts = 1.0_wp/(mt*cvs(
vp)*(isentrope_n(
vp) - 1)/(ps + isentrope_b(
vp)) + ml*(cvs(
lp)*(isentrope_n(
lp) - 1)/(ps &
809 & + isentrope_b(
lp)) - cvs(
vp)*(isentrope_n(
vp) - 1)/(ps + isentrope_b(
vp))) + mcvgp)
812 r2d(1) = ts*((cvs(
lp)*isentrope_n(
lp) - cvs(
vp)*isentrope_n(
vp))*(1 - log(ts)) - (qvps(
lp) - qvps(
vp)) + cvs(
lp) &
813 & *(isentrope_n(
lp) - 1)*log(ps + isentrope_b(
lp)) - cvs(
vp)*(isentrope_n(
vp) - 1)*log(ps + isentrope_b(
vp))) &
814 & + qvs(
lp) - qvs(
vp)
817 r2d(2) = rhoe + ps + ml*(qvs(
vp) - qvs(
lp)) - mt*qvs(
vp) - mqd + (ml*(isentrope_n(
vp)*cvs(
vp) - isentrope_n(
lp)*cvs(
lp)) &
818 & - mt*isentrope_n(
vp)*cvs(
vp) - mcpd)/(ml*(cvs(
lp)*(isentrope_n(
lp) - 1)/(ps + isentrope_b(
lp)) - cvs(
vp) &
819 & *(isentrope_n(
vp) - 1)/(ps + isentrope_b(
vp))) + mt*cvs(
vp)*(isentrope_n(
vp) - 1)/(ps + isentrope_b(
vp)) + mcvgp)
831# 336 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
833# 336 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
835# 336 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
837# 336 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
839# 336 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
841# 336 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
843# 336 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
845# 336 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
847# 336 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
849# 336 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
851# 336 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
853# 336 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
855# 336 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
857# 336 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
859# 336 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
861# 336 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
863# 336 "/home/runner/work/MFC/MFC/src/common/m_phase_change.fpp"
866 integer,
intent(in) :: j, k, l
867 real(wp),
intent(inout) :: pS
868 real(wp),
intent(in) :: rhoe
869 type(
scalar_field),
dimension(sys_size),
intent(inout) :: q_cons_vf
870 real(wp),
intent(inout) :: TS
871 real(wp),
dimension(2, 2) :: Jac, InvJac
872 real(wp),
dimension(2) :: R2D, R2D_try, DeltamP
873 real(wp) :: mCP, mCPD, mCVGP, mCVGP2, mQ
874 real(wp) :: ml, ml_try, mT, pS_try, pmin, lambda, resnorm, resnorm_try
875 real(wp) :: dFdT, dTdm, dTdp, detJ
879 mt = q_cons_vf(
lp + eqn_idx%cont%beg - 1)%sf(j, k, l) + q_cons_vf(
vp + eqn_idx%cont%beg - 1)%sf(j, k, l)
880 ml = q_cons_vf(
lp + eqn_idx%cont%beg - 1)%sf(j, k, l)
883 if (((ps < 0.0_wp) .and. ((q_cons_vf(
lp + eqn_idx%cont%beg - 1)%sf(j, k, l) + q_cons_vf(
vp + eqn_idx%cont%beg - 1)%sf(j, &
885 & l)) > ((rhoe - isentrope_n(
lp)*isentrope_b(
lp)/(isentrope_n(
lp) - 1))/qvs(
lp)))) .or. ((ps >= 0.0_wp) &
886 & .and. (ps < 1.0e-1_wp)))
then
891 pmin = -min(isentrope_b(
lp), isentrope_b(
vp)) + 1.0_wp
893 call s_compute_ptg_residual(ml, mt, ps, j, k, l, q_cons_vf, rhoe, r2d, ts, mcp, mq, mcvgp, mcvgp2, mcpd)
894 resnorm = sqrt(r2d(1)**2 + r2d(2)**2)
898 if ((resnorm <= ptgalpha_eps) .or. (resnorm <= (ptgalpha_eps/1.e6_wp)*rhoe))
exit
901 dfdt = -(cvs(
lp)*isentrope_n(
lp) - cvs(
vp)*isentrope_n(
vp))*log(ts) - (qvps(
lp) - qvps(
vp)) + cvs(
lp)*(isentrope_n(
lp) &
902 & - 1)*log(ps + isentrope_b(
lp)) - cvs(
vp)*(isentrope_n(
vp) - 1)*log(ps + isentrope_b(
vp))
903 dtdm = -(cvs(
lp)*(isentrope_n(
lp) - 1)/(ps + isentrope_b(
lp)) - cvs(
vp)*(isentrope_n(
vp) - 1)/(ps + isentrope_b(
vp))) &
905 dtdp = (mt*cvs(
vp)*(isentrope_n(
vp) - 1)/(ps + isentrope_b(
vp))**2 + ml*(cvs(
lp)*(isentrope_n(
lp) - 1)/(ps &
906 & + isentrope_b(
lp))**2 - cvs(
vp)*(isentrope_n(
vp) - 1)/(ps + isentrope_b(
vp))**2) + mcvgp2)*ts**2
908 jac(1, 1) = dfdt*dtdm
910 & 2) = dfdt*dtdp + ts*(cvs(
lp)*(isentrope_n(
lp) - 1)/(ps + isentrope_b(
lp)) - cvs(
vp)*(isentrope_n(
vp) - 1)/(ps &
911 & + isentrope_b(
vp)))
913 & 1) = qvs(
vp) - qvs(
lp) + (cvs(
vp)*isentrope_n(
vp) - cvs(
lp)*isentrope_n(
lp))/(ml*(cvs(
lp)*(isentrope_n(
lp) - 1) &
914 & /(ps + isentrope_b(
lp)) - cvs(
vp)*(isentrope_n(
vp) - 1)/(ps + isentrope_b(
vp))) + mt*cvs(
vp)*(isentrope_n(
vp) &
915 & - 1)/(ps + isentrope_b(
vp)) + mcvgp) - (ml*(cvs(
vp)*isentrope_n(
vp) - cvs(
lp)*isentrope_n(
lp)) - mt*cvs(
vp) &
916 & *isentrope_n(
vp) - mcpd)*(cvs(
lp)*(isentrope_n(
lp) - 1)/(ps + isentrope_b(
lp)) - cvs(
vp)*(isentrope_n(
vp) - 1) &
917 & /(ps + isentrope_b(
vp)))/((ml*(cvs(
lp)*(isentrope_n(
lp) - 1)/(ps + isentrope_b(
lp)) - cvs(
vp)*(isentrope_n(
vp) &
918 & - 1)/(ps + isentrope_b(
vp))) + mt*cvs(
vp)*(isentrope_n(
vp) - 1)/(ps + isentrope_b(
vp)) + mcvgp)**2)
920 & 2) = 1 + (ml*(cvs(
vp)*isentrope_n(
vp) - cvs(
lp)*isentrope_n(
lp)) - mt*cvs(
vp)*isentrope_n(
vp) - mcpd) &
921 & *(ml*(cvs(
lp)*(isentrope_n(
lp) - 1)/(ps + isentrope_b(
lp))**2 - cvs(
vp)*(isentrope_n(
vp) - 1)/(ps &
922 & + isentrope_b(
vp))**2) + mt*cvs(
vp)*(isentrope_n(
vp) - 1)/(ps + isentrope_b(
vp))**2 + mcvgp2)/(ml*(cvs(
lp) &
923 & *(isentrope_n(
lp) - 1)/(ps + isentrope_b(
lp)) - cvs(
vp)*(isentrope_n(
vp) - 1)/(ps + isentrope_b(
vp))) &
924 & + mt*cvs(
vp)*(isentrope_n(
vp) - 1)/(ps + isentrope_b(
vp)) + mcvgp)**2
926 detj = jac(1, 1)*jac(2, 2) - jac(1, 2)*jac(2, 1)
928 if (detj == 0.0_wp)
exit
930 invjac(1, 1) = jac(2, 2)/detj
931 invjac(1, 2) = -jac(1, 2)/detj
932 invjac(2, 1) = -jac(2, 1)/detj
933 invjac(2, 2) = jac(1, 1)/detj
935 deltamp(1) = -(invjac(1, 1)*r2d(1) + invjac(1, 2)*r2d(2))
936 deltamp(2) = -(invjac(2, 1)*r2d(1) + invjac(2, 2)*r2d(2))
942 ml_try = min(max(ml + lambda*deltamp(1), 0.0_wp), mt)
943 ps_try = max(ps + lambda*deltamp(2), pmin)
944 call s_compute_ptg_residual(ml_try, mt, ps_try, j, k, l, q_cons_vf, rhoe, r2d_try, ts, mcp, mq, mcvgp, mcvgp2, mcpd)
945 resnorm_try = sqrt(r2d_try(1)**2 + r2d_try(2)**2)
946 if ((resnorm_try < resnorm) .or. (ls ==
ptg_ls_max))
exit
947 lambda = 0.5_wp*lambda
951 ml = ml_try; ps = ps_try; r2d = r2d_try; resnorm = resnorm_try
955 q_cons_vf(
lp + eqn_idx%cont%beg - 1)%sf(j, k, l) = ml
956 q_cons_vf(
vp + eqn_idx%cont%beg - 1)%sf(j, k, l) = mt - ml
958 ts = (rhoe + ps - mq)/mcp