Skip to content

Commit

Permalink
ice_dyn_vp: express rheology in terms of bulk and shear viscosities (#…
Browse files Browse the repository at this point in the history
…647)

* Added array for eta and changed name of zetaD...BFB

* Added array for replacement pressure...BFB

* Replacement pressure now used on calc...BFB

* eta is now used in the calc...BFB

* Ktens included in zeta,eta and rep_prs...roundoff errors...BFB only if Ktens=0

* Small modif to viscous coeff subroutine for passing logical capping

* Modifs to viscous_coeffs suroutine to be used for VP and EVP

* Further modifs to viscous_coeff subroutine

* cosmetic change: order of calc is ne-nw-sw-se

* vp solver also uses viscous_coeffs_and_rep_pressure subroutine

* Minor modifications following PR review
  • Loading branch information
JFLemieux73 committed Oct 21, 2021
1 parent 2207d88 commit 4147db4
Show file tree
Hide file tree
Showing 3 changed files with 175 additions and 136 deletions.
12 changes: 8 additions & 4 deletions cicecore/cicedynB/dynamics/ice_dyn_evp.F90
Original file line number Diff line number Diff line change
Expand Up @@ -656,13 +656,16 @@ subroutine stress (nx_block, ny_block, &
str12ew, str12we, str12ns, str12sn , &
strp_tmp, strm_tmp, tmp

logical :: capping ! of the viscous coef

character(len=*), parameter :: subname = '(stress)'

!-----------------------------------------------------------------
! Initialize
!-----------------------------------------------------------------

str(:,:,:) = c0
capping = .true. ! could be later included in ice_in

do ij = 1, icellt
i = indxti(ij)
Expand Down Expand Up @@ -694,13 +697,14 @@ subroutine stress (nx_block, ny_block, &

call viscous_coeffs_and_rep_pressure (strength(i,j), tinyarea(i,j),&
Deltane, Deltanw, &
Deltase, Deltasw, &
Deltasw, Deltase, &
zetax2ne, zetax2nw, &
zetax2se, zetax2sw, &
zetax2sw, zetax2se, &
etax2ne, etax2nw, &
etax2se, etax2sw, &
etax2sw, etax2se, &
rep_prsne, rep_prsnw, &
rep_prsse, rep_prssw )
rep_prssw, rep_prsse, &
capping)

!-----------------------------------------------------------------
! the stresses ! kg/s^2
Expand Down
57 changes: 34 additions & 23 deletions cicecore/cicedynB/dynamics/ice_dyn_shared.F90
Original file line number Diff line number Diff line change
Expand Up @@ -1375,53 +1375,64 @@ end subroutine strain_rates

subroutine viscous_coeffs_and_rep_pressure (strength, tinyarea, &
Deltane, Deltanw, &
Deltase, Deltasw, &
Deltasw, Deltase, &
zetax2ne, zetax2nw, &
zetax2se, zetax2sw, &
zetax2sw, zetax2se, &
etax2ne, etax2nw, &
etax2se, etax2sw, &
etax2sw, etax2se, &
rep_prsne, rep_prsnw,&
rep_prsse, rep_prssw )
rep_prssw, rep_prsse,&
capping)

real (kind=dbl_kind), intent(in):: &
strength, tinyarea ! at the t-point

real (kind=dbl_kind), intent(in):: &
Deltane, Deltanw, Deltase, Deltasw ! Delta at each corner
Deltane, Deltanw, Deltasw, Deltase ! Delta at each corner

logical , intent(in):: capping

real (kind=dbl_kind), intent(out):: &
zetax2ne, zetax2nw, zetax2se, zetax2sw, & ! zetax2 at each corner
etax2ne, etax2nw, etax2se, etax2sw, & ! etax2 at each corner
rep_prsne, rep_prsnw, rep_prsse, rep_prssw ! replacement pressure
zetax2ne, zetax2nw, zetax2sw, zetax2se, & ! zetax2 at each corner
etax2ne, etax2nw, etax2sw, etax2se, & ! etax2 at each corner
rep_prsne, rep_prsnw, rep_prssw, rep_prsse ! replacement pressure

! local variables
real (kind=dbl_kind) :: &
tmpcalc
tmpcalcne, tmpcalcnw, tmpcalcsw, tmpcalcse

! NOTE: for comp. efficiency 2 x zeta and 2 x eta are used in the code

! if (trim(yield_curve) == 'ellipse') then

tmpcalc = strength/max(Deltane,tinyarea) ! northeast
zetax2ne = (c1+Ktens)*tmpcalc
rep_prsne = (c1-Ktens)*tmpcalc*Deltane
if (capping) then
tmpcalcne = strength/max(Deltane,tinyarea)
tmpcalcnw = strength/max(Deltanw,tinyarea)
tmpcalcsw = strength/max(Deltasw,tinyarea)
tmpcalcse = strength/max(Deltase,tinyarea)
else
tmpcalcne = strength/(Deltane + tinyarea)
tmpcalcnw = strength/(Deltanw + tinyarea)
tmpcalcsw = strength/(Deltasw + tinyarea)
tmpcalcse = strength/(Deltase + tinyarea)
endif

zetax2ne = (c1+Ktens)*tmpcalcne ! northeast
rep_prsne = (c1-Ktens)*tmpcalcne*Deltane
etax2ne = ecci*zetax2ne ! CHANGE FOR e_plasticpot

tmpcalc = strength/max(Deltanw,tinyarea) ! northwest
zetax2nw = (c1+Ktens)*tmpcalc
rep_prsnw = (c1-Ktens)*tmpcalc*Deltanw
zetax2nw = (c1+Ktens)*tmpcalcnw ! northwest
rep_prsnw = (c1-Ktens)*tmpcalcnw*Deltanw
etax2nw = ecci*zetax2nw ! CHANGE FOR e_plasticpot

tmpcalc = strength/max(Deltase,tinyarea) ! southeast
zetax2se = (c1+Ktens)*tmpcalc
rep_prsse = (c1-Ktens)*tmpcalc*Deltase
etax2se = ecci*zetax2se ! CHANGE FOR e_plasticpot

tmpcalc = strength/max(Deltasw,tinyarea) ! southwest
zetax2sw = (c1+Ktens)*tmpcalc
rep_prssw = (c1-Ktens)*tmpcalc*Deltasw
zetax2sw = (c1+Ktens)*tmpcalcsw ! southwest
rep_prssw = (c1-Ktens)*tmpcalcsw*Deltasw
etax2sw = ecci*zetax2sw ! CHANGE FOR e_plasticpot

zetax2se = (c1+Ktens)*tmpcalcse ! southeast
rep_prsse = (c1-Ktens)*tmpcalcse*Deltase
etax2se = ecci*zetax2se ! CHANGE FOR e_plasticpot

! else

! endif
Expand Down
Loading

0 comments on commit 4147db4

Please sign in to comment.