varmix_assemble Function

private pure function varmix_assemble(kh_bg, cff, l2, sn, res_fn, resoln, kh_min, kh_max, do_visbeck) result(kh)

Assembly chain in the load-bearing order: background + Visbeck addend, THEN Res_fn scale, THEN clamp. kh_max <= 0 ⇒ no upper cap.

Arguments

Type IntentOptional Attributes Name
real(kind=wp), intent(in) :: kh_bg
real(kind=wp), intent(in) :: cff
real(kind=wp), intent(in) :: l2
real(kind=wp), intent(in) :: sn
real(kind=wp), intent(in) :: res_fn
logical, intent(in) :: resoln
real(kind=wp), intent(in) :: kh_min
real(kind=wp), intent(in) :: kh_max
logical, intent(in) :: do_visbeck

Return Value real(kind=wp)


Called by

proc~~varmix_assemble~~CalledByGraph proc~varmix_assemble varmix_assemble proc~varmix_compute_impl varmix_compute_impl proc~varmix_compute_impl->proc~varmix_assemble proc~varmix_compute varmix_compute proc~varmix_compute->proc~varmix_compute_impl proc~ocean_dyn_step_split ocean_dyn_step_split proc~ocean_dyn_step_split->proc~varmix_compute proc~engine_step engine_step proc~engine_step->proc~ocean_dyn_step_split proc~driver_run_ocean driver_run_ocean proc~driver_run_ocean->proc~engine_step proc~rdb_ocean_step rdb_ocean_step proc~rdb_ocean_step->proc~engine_step

Source Code

   pure function varmix_assemble(kh_bg, cff, l2, sn, res_fn, resoln, &
                                 kh_min, kh_max, do_visbeck) result(kh)
      !$acc routine seq
      !! Assembly chain in the load-bearing order: background + Visbeck
      !! addend, THEN Res_fn scale, THEN clamp.  `kh_max <= 0` ⇒ no upper cap.
      real(wp), intent(in) :: kh_bg, cff, l2, sn, res_fn, kh_min, kh_max
      logical, intent(in) :: resoln, do_visbeck
      real(wp) :: kh
      kh = kh_bg
      if (do_visbeck) kh = kh + cff*l2*sn
      if (resoln) kh = kh*res_fn
      if (kh_max > 0.0_wp) then
         kh = max(kh_min, min(kh, kh_max))
      else
         kh = max(kh_min, kh)
      end if
   end function varmix_assemble