From 57bb8d792e4bcb8e41554b0214e95bff88139c29 Mon Sep 17 00:00:00 2001 From: Knut Date: Mon, 13 Apr 2026 13:34:52 +0200 Subject: [PATCH 1/2] some fixes for IMPLICIT NONE --- src/turbulence/massfluxeq.F90 | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/turbulence/massfluxeq.F90 b/src/turbulence/massfluxeq.F90 index 616c3b22..4f61a68a 100644 --- a/src/turbulence/massfluxeq.F90 +++ b/src/turbulence/massfluxeq.F90 @@ -295,7 +295,7 @@ subroutine tkeeq_mf(nlev,dt,h) use turbulence, only: tke,tkeo,tke_p,k_min,eps use turbulence, only: mf_Cent,mf_Cdet, mf_d0, mf_nsub ! -! IMPLICIT NONE + IMPLICIT NONE ! ! !INPUT PARAMETERS: ! @@ -317,6 +317,7 @@ subroutine tkeeq_mf(nlev,dt,h) REALTYPE, parameter :: wp_min = 0.5E-08 ! min value for plume velocity REALTYPE :: dt_sub, tke_star(0:nlev) REALTYPE :: ap,dissp,kpp,kpm,dwp,k_env,d0,rhs,FC(0:nlev) + REALTYPE :: hEnt, hDet integer :: i,isub ! !------------------------------------------------------------------------ @@ -347,7 +348,7 @@ subroutine tkeeq_mf(nlev,dt,h) rhs = rhs + hEnt*normVp(i)-ap*dissp kpm = kpp - rhs ! - if( a_p(i-1)>0. .and. w_p(i-1) < -wpmin ) then + if( a_p(i-1)>0. .and. w_p(i-1) < -wp_min ) then tke_p(i-1) = MAX( kpm/(a_p(i-1)*w_p(i-1)), k_min ) else tke_p(i-1) = k_min From a32ca01868e2f6f7d311a8420b45a7acac639c4a Mon Sep 17 00:00:00 2001 From: Knut <11868922+knutaros@users.noreply.github.com> Date: Mon, 13 Apr 2026 14:43:18 +0200 Subject: [PATCH 2/2] provide variables from meanflow as arguments --- src/gotm/gotm.F90 | 2 +- src/turbulence/massfluxeq.F90 | 9 +++++++-- src/turbulence/turbulence.F90 | 7 +++++-- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/gotm/gotm.F90 b/src/gotm/gotm.F90 index e75a00bc..0d190478 100644 --- a/src/gotm/gotm.F90 +++ b/src/gotm/gotm.F90 @@ -855,7 +855,7 @@ subroutine integrate_gotm() !GSW if(compute_massflux) then call do_density(nlev,S,T,-z,-zi) - call do_massflux ( nlev,dt,u,v,T,S,rho,h ) ! compute mass flux quantities from the meanflow variables + call do_massflux ( nlev,dt,u,v,T,S,rho,h,z,zi,gravity ) ! compute mass flux quantities from the meanflow variables call uvTSequation_mf( nlev,dt,Fmass,u_p,v_p,T_p,S_p,Pmf,mf_nsub,massflux_on_dynamics, massflux_energy ) ! add the mass flux term to the meanflow equation endif diff --git a/src/turbulence/massfluxeq.F90 b/src/turbulence/massfluxeq.F90 index 4f61a68a..44890670 100644 --- a/src/turbulence/massfluxeq.F90 +++ b/src/turbulence/massfluxeq.F90 @@ -5,7 +5,7 @@ ! !ROUTINE: The convective plume nonlinear ODEs \label{sec:massfluxeq} ! ! !INTERFACE: - subroutine massfluxeq(nlev,dt,u,v,T,S,rho,h) + subroutine massfluxeq(nlev,dt,u,v,T,S,rho,h,z,zi,gravity) ! !DESCRIPTION: ! This subroutine solves a set of nonlinear ODEs to determine @@ -30,7 +30,6 @@ subroutine massfluxeq(nlev,dt,u,v,T,S,rho,h) use turbulence, only: mf_ap0,mf_wp0,mf_Cent,mf_Cdet, mf_d0 use turbulence, only: mf_aa,mf_bb,mf_bp,mf_uv,mf_dbkg use turbulence, only: mf_zinv, Bmf, massflux_energy, mf_nsub - use meanflow, only: gravity, z, zi use density, only: rho0, get_rho ! IMPLICIT NONE @@ -55,6 +54,12 @@ subroutine massfluxeq(nlev,dt,u,v,T,S,rho,h) ! layer thickness (m) REALTYPE, intent(in) :: h(0:nlev) +! center and interface positions + REALTYPE, intent(in) :: z(0:nlev), zi(0:nlev) + +! + REALTYPE, intent(in) :: gravity + ! !REVISION HISTORY: ! Original author(s): Florian LemariƩ !EOP diff --git a/src/turbulence/turbulence.F90 b/src/turbulence/turbulence.F90 index b2e96817..6d623c0c 100644 --- a/src/turbulence/turbulence.F90 +++ b/src/turbulence/turbulence.F90 @@ -3025,7 +3025,7 @@ end subroutine do_lengthscale ! !IROUTINE: Handle convection for first-order TKE schemes using a mass flux formalism\label{sec:convec} ! ! !INTERFACE: - subroutine do_massflux(nlev,dt,umean,vmean,Tmean,Smean,Rmean,h) + subroutine do_massflux(nlev,dt,umean,vmean,Tmean,Smean,Rmean,h,z,zi,gravity) ! ! !DESCRIPTION: ! Based on user input, this routine calls the appropriate routines for @@ -3048,6 +3048,9 @@ subroutine do_massflux(nlev,dt,umean,vmean,Tmean,Smean,Rmean,h) REALTYPE, intent(in) :: Smean(0:nlev) REALTYPE, intent(in) :: Rmean(0:nlev) REALTYPE, intent(in) :: h(0:nlev) + REALTYPE, intent(in) :: z(0:nlev) + REALTYPE, intent(in) :: zi(0:nlev) + REALTYPE, intent(in) :: gravity ! ! !REVISION HISTORY: ! Original author(s): Florian LemariƩ @@ -3055,7 +3058,7 @@ subroutine do_massflux(nlev,dt,umean,vmean,Tmean,Smean,Rmean,h) !EOP !----------------------------------------------------------------------- !BOC - call massfluxeq(nlev,dt,umean,vmean,tmean,smean,Rmean,h) + call massfluxeq(nlev,dt,umean,vmean,tmean,smean,Rmean,h,z,zi,gravity) if( massflux_energy ) call tke_transport_mf(nlev,umean,vmean,h) return end subroutine do_massflux