evp_zeta_impl Subroutine

private pure subroutine evp_zeta_impl(sh_dd, sh_dt, sh_ds, i_ec2, pres_mice, mice, del_sh_min_pr, del_sh, zeta, nx, ny)

del_sh / zeta (:1082-1095). shear_at_T averages the 4 surrounding corner sh_Ds values.

Arguments

Type IntentOptional Attributes Name
real(kind=wp), intent(in) :: sh_dd(nx,ny)
real(kind=wp), intent(in) :: sh_dt(nx,ny)
real(kind=wp), intent(in) :: sh_ds(nx+1,ny+1)
real(kind=wp), intent(in) :: i_ec2
real(kind=wp), intent(in) :: pres_mice(nx,ny)
real(kind=wp), intent(in) :: mice(nx,ny)
real(kind=wp), intent(in) :: del_sh_min_pr(nx,ny)
real(kind=wp), intent(out) :: del_sh(nx,ny)
real(kind=wp), intent(out) :: zeta(nx,ny)
integer, intent(in) :: nx
integer, intent(in) :: ny

Calls

proc~~evp_zeta_impl~~CallsGraph proc~evp_zeta_impl evp_zeta_impl local local proc~evp_zeta_impl->local

Called by

proc~~evp_zeta_impl~~CalledByGraph proc~evp_zeta_impl evp_zeta_impl proc~ice_evp_dynamics_impl ice_evp_dynamics_impl proc~ice_evp_dynamics_impl->proc~evp_zeta_impl proc~ice_evp_dynamics ice_evp_dynamics proc~ice_evp_dynamics->proc~ice_evp_dynamics_impl proc~ice_evp_step ice_evp_step proc~ice_evp_step->proc~ice_evp_dynamics proc~engine_step_ice engine_step_ice proc~engine_step_ice->proc~ice_evp_step proc~driver_run_ocean driver_run_ocean proc~driver_run_ocean->proc~engine_step_ice proc~rdb_ocean_step rdb_ocean_step proc~rdb_ocean_step->proc~engine_step_ice

Variables

Type Visibility Attributes Name Initial
real(kind=wp), private :: denom
integer, private :: i
integer, private :: j
real(kind=wp), private :: shear_at_t

Source Code

   pure subroutine evp_zeta_impl(sh_dd, sh_dt, sh_ds, i_ec2, pres_mice, mice, &
                                 del_sh_min_pr, del_sh, zeta, nx, ny)
      !! del_sh / zeta (:1082-1095). `shear_at_T` averages the 4
      !! surrounding corner sh_Ds values.
      integer, intent(in) :: nx, ny
      real(wp), intent(in) :: sh_dd(nx, ny), sh_dt(nx, ny)
      real(wp), intent(in) :: sh_ds(nx + 1, ny + 1)
      real(wp), intent(in) :: i_ec2
      real(wp), intent(in) :: pres_mice(nx, ny), mice(nx, ny)
      real(wp), intent(in) :: del_sh_min_pr(nx, ny)
      real(wp), intent(out) :: del_sh(nx, ny), zeta(nx, ny)
      integer :: i, j
      real(wp) :: shear_at_t, denom

      do concurrent(j=1:ny, i=1:nx) local(shear_at_t, denom)
         shear_at_t = 0.25_wp*((sh_ds(i, j) + sh_ds(i + 1, j + 1)) + &
                               (sh_ds(i, j + 1) + sh_ds(i + 1, j)))
         del_sh(i, j) = sqrt(sh_dd(i, j)**2 + i_ec2*(sh_dt(i, j)**2 + shear_at_t**2))
         denom = max(del_sh(i, j), del_sh_min_pr(i, j)*pres_mice(i, j))
         if (denom /= 0.0_wp) then
            zeta(i, j) = 0.5_wp*pres_mice(i, j)*mice(i, j)/denom
         else
            zeta(i, j) = 0.0_wp
         end if
      end do
   end subroutine evp_zeta_impl