varmix_res_fn Function

private pure function varmix_res_fn(f2_dx2, beta_dx2, cg1, alpha, p) result(r)

Divide-free resolution function for power p (even). p=2: dx_term/(dx_term + (alpha*cg1)^2); general even p: dx_term^(p/2)/(dx_term^(p/2) + (alpha*cg1)^p). dx_term = f2_dx2 + cg1*beta_dx2. -> 1 where unresolved, -> 0 where Ld>>dx.

Arguments

Type IntentOptional Attributes Name
real(kind=wp), intent(in) :: f2_dx2
real(kind=wp), intent(in) :: beta_dx2
real(kind=wp), intent(in) :: cg1
real(kind=wp), intent(in) :: alpha
integer, intent(in) :: p

Return Value real(kind=wp)


Called by

proc~~varmix_res_fn~~CalledByGraph proc~varmix_res_fn varmix_res_fn proc~varmix_compute_impl varmix_compute_impl proc~varmix_compute_impl->proc~varmix_res_fn 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

Variables

Type Visibility Attributes Name Initial
real(kind=wp), private :: den_add
real(kind=wp), private :: dx_term
real(kind=wp), private :: num
integer, private :: ph

Source Code

   pure function varmix_res_fn(f2_dx2, beta_dx2, cg1, alpha, p) result(r)
      !$acc routine seq
      !! Divide-free resolution function for power `p` (even).  p=2:
      !! `dx_term/(dx_term + (alpha*cg1)^2)`; general even p:
      !! `dx_term^(p/2)/(dx_term^(p/2) + (alpha*cg1)^p)`.  `dx_term =
      !! f2_dx2 + cg1*beta_dx2`.  -> 1 where unresolved, -> 0 where Ld>>dx.
      real(wp), intent(in) :: f2_dx2, beta_dx2, cg1, alpha
      integer, intent(in) :: p
      real(wp) :: r, dx_term, num, den_add
      integer :: ph
      dx_term = f2_dx2 + cg1*beta_dx2
      if (p == 2) then
         num = dx_term
         den_add = (alpha*cg1)*(alpha*cg1)
      else
         ph = p/2
         num = dx_term**ph
         den_add = (alpha*cg1)**p
      end if
      r = num/(num + den_add)
   end function varmix_res_fn