cavity_l_plus_is_neutral Function

public pure function cavity_l_plus_is_neutral(l_plus) result(is_neutral)

Is this trial L+ the neutral / unsuppressed limit?

TRUE for a non-finite L+, for L+ <= 0 and for the CAVITY_L_PLUS_NEUTRAL sentinel. A non-positive L+ means the interfacial buoyancy flux is DESTABILISING (or zero), which every stratification-dependent law treats as its neutral limit: Holland & Jenkins (1999) p. 1792, “If the Obukhov length is negative (i.e., the buoyancy flux is destabilizing) the stability parameter is set to 1”; Yung et al. (2025) pp. 5832-5833, “Since the LES studies we follow do not explore freezing conditions, we use the ConstCoeff transfer coefficients … when L+ < 0”.

It also keeps log() off a negative argument in the outer residual — a real excursion, not a hypothetical: for hj99 at strong suppression Gamma_Turb -> infinity makes the heat and salt denominators converge, so gamma_s/gamma_t -> 1, S_b -> S_w, the stabilising salt term vanishes and the destabilising temperature term is left holding the sign.

Arguments

Type IntentOptional Attributes Name
real(kind=wp), intent(in) :: l_plus

Viscous Obukhov scale, or CAVITY_L_PLUS_NEUTRAL.

Return Value logical


Called by

proc~~cavity_l_plus_is_neutral~~CalledByGraph proc~cavity_l_plus_is_neutral cavity_l_plus_is_neutral proc~cavity_gamma_hj99 cavity_gamma_hj99 proc~cavity_gamma_hj99->proc~cavity_l_plus_is_neutral proc~cavity_gamma_yung25 cavity_gamma_yung25 proc~cavity_gamma_yung25->proc~cavity_l_plus_is_neutral proc~cavity_outer_residual cavity_outer_residual proc~cavity_outer_residual->proc~cavity_l_plus_is_neutral proc~cavity_exchange_velocities_f cavity_exchange_velocities_f proc~cavity_exchange_velocities_f->proc~cavity_gamma_hj99 proc~cavity_exchange_velocities_f->proc~cavity_gamma_yung25 proc~cavity_solve_melt_f cavity_solve_melt_f proc~cavity_solve_melt_f->proc~cavity_outer_residual proc~cavity_state_at_x cavity_state_at_x proc~cavity_solve_melt_f->proc~cavity_state_at_x proc~cavity_exchange_velocities cavity_exchange_velocities proc~cavity_exchange_velocities->proc~cavity_exchange_velocities_f proc~cavity_melt_point_gamma_f cavity_melt_point_gamma_f proc~cavity_melt_point_gamma_f->proc~cavity_solve_melt_f proc~cavity_solve_melt cavity_solve_melt proc~cavity_solve_melt->proc~cavity_solve_melt_f proc~cavity_state_at_x->proc~cavity_exchange_velocities_f proc~cavity_melt_columns_2d cavity_melt_columns_2d proc~cavity_melt_columns_2d->proc~cavity_melt_point_gamma_f proc~cavity_melt_point cavity_melt_point proc~cavity_melt_point->proc~cavity_solve_melt proc~cavity_melt_point_gamma cavity_melt_point_gamma proc~cavity_melt_point_gamma->proc~cavity_melt_point_gamma_f proc~cavity_melt_columns cavity_melt_columns proc~cavity_melt_columns->proc~cavity_melt_point proc~ocean_cavity_flux_step ocean_cavity_flux_step proc~ocean_cavity_flux_step->proc~cavity_melt_columns_2d

Source Code

   pure function cavity_l_plus_is_neutral(l_plus) result(is_neutral)
      !! Is this trial `L+` the neutral / unsuppressed limit?
      !!
      !! TRUE for a non-finite `L+`, for `L+ <= 0` and for the
      !! `CAVITY_L_PLUS_NEUTRAL` sentinel.  A non-positive `L+` means the
      !! interfacial buoyancy flux is DESTABILISING (or zero), which every
      !! stratification-dependent law treats as its neutral limit: Holland
      !! & Jenkins (1999) p. 1792, "If the Obukhov length is negative
      !! (i.e., the buoyancy flux is destabilizing) the stability
      !! parameter is set to 1"; Yung et al. (2025) pp. 5832-5833, "Since
      !! the LES studies we follow do not explore freezing conditions, we
      !! use the ConstCoeff transfer coefficients ... when L+ < 0".
      !!
      !! It also keeps `log()` off a negative argument in the outer
      !! residual — a real excursion, not a hypothetical: for `hj99` at
      !! strong suppression `Gamma_Turb -> infinity` makes the heat and
      !! salt denominators converge, so `gamma_s/gamma_t -> 1`,
      !! `S_b -> S_w`, the stabilising salt term vanishes and the
      !! destabilising temperature term is left holding the sign.
      !$acc routine seq
      real(wp), intent(in) :: l_plus
         !! Viscous Obukhov scale, or `CAVITY_L_PLUS_NEUTRAL`.
      logical :: is_neutral
      is_neutral = (.not. ieee_is_finite(l_plus)) .or. (l_plus <= 0.0_wp) &
                   .or. (l_plus >= CAVITY_L_PLUS_NEUTRAL)
   end function cavity_l_plus_is_neutral