evp_pres_mice_impl Subroutine

private pure subroutine evp_pres_mice_impl(dxT, dyT, ci, p0_rho, c0, del_sh_min_scale, tdamp_eff, dt, pres_mice, del_sh_min_pr, nx, ny)

pres_mice = p0_rho*exp(-c0*max(1-ci,0)) (:878); dxharm = 2*dxT*dyT/(dxT+dyT); del_sh_min_pr = 2*del_sh_min_scale*dt^2 / (Tdamp*dxharm^2) guarded on dxharm > 0 (:880-890).

Arguments

Type IntentOptional Attributes Name
real(kind=wp), intent(in) :: dxT(nx,ny)
real(kind=wp), intent(in) :: dyT(nx,ny)
real(kind=wp), intent(in) :: ci(nx,ny)
real(kind=wp), intent(in) :: p0_rho
real(kind=wp), intent(in) :: c0
real(kind=wp), intent(in) :: del_sh_min_scale
real(kind=wp), intent(in) :: tdamp_eff
real(kind=wp), intent(in) :: dt
real(kind=wp), intent(out) :: pres_mice(nx,ny)
real(kind=wp), intent(out) :: del_sh_min_pr(nx,ny)
integer, intent(in) :: nx
integer, intent(in) :: ny

Calls

proc~~evp_pres_mice_impl~~CallsGraph proc~evp_pres_mice_impl evp_pres_mice_impl local local proc~evp_pres_mice_impl->local

Called by

proc~~evp_pres_mice_impl~~CalledByGraph proc~evp_pres_mice_impl evp_pres_mice_impl proc~ice_evp_dynamics_impl ice_evp_dynamics_impl proc~ice_evp_dynamics_impl->proc~evp_pres_mice_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 :: dxharm
integer, private :: i
integer, private :: j

Source Code

   pure subroutine evp_pres_mice_impl(dxT, dyT, ci, p0_rho, c0, del_sh_min_scale, &
                                      tdamp_eff, dt, pres_mice, del_sh_min_pr, nx, ny)
      !! `pres_mice = p0_rho*exp(-c0*max(1-ci,0))` (:878); `dxharm =
      !! 2*dxT*dyT/(dxT+dyT)`; `del_sh_min_pr = 2*del_sh_min_scale*dt^2 /
      !! (Tdamp*dxharm^2)` guarded on `dxharm > 0` (:880-890).
      integer, intent(in) :: nx, ny
      real(wp), intent(in) :: dxT(nx, ny), dyT(nx, ny), ci(nx, ny)
      real(wp), intent(in) :: p0_rho, c0, del_sh_min_scale, tdamp_eff, dt
      real(wp), intent(out) :: pres_mice(nx, ny), del_sh_min_pr(nx, ny)
      integer :: i, j
      real(wp) :: dxharm

      do concurrent(j=1:ny, i=1:nx) local(dxharm)
         pres_mice(i, j) = p0_rho*exp(-c0*max(1.0_wp - ci(i, j), 0.0_wp))
         dxharm = 2.0_wp*dxT(i, j)*dyT(i, j)/(dxT(i, j) + dyT(i, j))
         if (dxharm > 0.0_wp) then
            del_sh_min_pr(i, j) = (2.0_wp*del_sh_min_scale*dt**2)/(tdamp_eff*dxharm**2)
         else
            del_sh_min_pr(i, j) = 0.0_wp
         end if
      end do
   end subroutine evp_pres_mice_impl