81 integer (kind=int_kind) :: &
89 real (kind=dbl_kind),
parameter :: &
96 ,
astar = 0.05_dbl_kind &
105 ,
pstar = 2.75e4_dbl_kind &
120 real (kind=dbl_kind),
dimension(:,:),
allocatable,
save :: &
133 real (kind=dbl_kind),
dimension (:,:),
allocatable,
save :: &
138 real (kind=dbl_kind),
dimension (:,:,:) ,
allocatable,
save:: &
143 real (kind=dbl_kind),
dimension (:,:,:),
allocatable,
save :: &
149 logical (kind=log_kind),
parameter :: &
181 integer (kind=int_kind) :: i,j
221 real (kind=dbl_kind), &
222 dimension (imt_local,jmt_local),
intent(in) :: &
229 integer (kind=int_kind),
parameter :: &
232 integer (kind=int_kind) :: &
237 real (kind=dbl_kind),
dimension(ilo:ihi,jlo:jhi) :: &
247 real (kind=dbl_kind) :: &
254 logical (kind=log_kind) :: &
257 real (kind=dbl_kind),
parameter :: &
258 big = 1.0e+8_dbl_kind
260 logical (kind=log_kind) :: &
317 cs*
p5*(delta(i,j)-abs(divu(i,j))) - min(divu(i,j),
c0i)
330 if (divu_adv(i,j) <
c0i) &
331 closing_net(i,j) = max(closing_net(i,j), -divu_adv(i,j))
337 opning(i,j) = closing_net(i,j) + divu_adv(i,j)
342 do niter = 1, nitermax
357 closing_gross(i,j) = closing_net(i,j) /
aksum(i,j)
366 if (w1 >
aice0(i,j))
then 367 tmpfac =
aice0(i,j) / w1
368 closing_gross(i,j) = closing_gross(i,j) * tmpfac
369 opning(i,j) = opning(i,j) * tmpfac
388 if (w1 >
aicen(i,j,ni))
then 389 tmpfac =
aicen(i,j,ni) / w1
390 closing_gross(i,j) = closing_gross(i,j) * tmpfac
391 opning(i,j) = opning(i,j) * tmpfac
403 msnow_mlt, esnow_mlt)
415 iterate_ridging = .false.
420 closing_net(i,j) =
c0i 423 iterate_ridging = .true.
425 closing_net(i,j) = max(
c0i, -divu_adv(i,j))
426 opning(i,j) = max(
c0i, divu_adv(i,j))
435 if (iterate_ridging)
then 436 if (niter > nitermax)
then 437 write(nu_diag,*)
'istep1, my_task, nitermax =', &
466 if (abs(
asum(i,j) -
c1i) >
puny) asum_error = .true.
474 fresh(i,j) =
fresh(i,j) + msnow_mlt(i,j)*dti_ice
478 fhnet(i,j) =
fhnet(i,j) + esnow_mlt(i,j)*dti_ice
493 write(nu_diag,*)
'Ridging error: total area =',
asum(i,j)
494 write(nu_diag,*)
'istep1, my_task, i, j:', &
497 write(nu_diag,*)
'n, aicen, apartic:' 543 integer (kind=int_kind),
intent(in) :: &
548 integer (kind=int_kind) :: &
552 real (kind=dbl_kind) :: &
567 if (kstrngth == 1)
then 587 dh2rdg = -hi*hi + h2rdg/
krdg(i,j,ni)
609 dh2rdg = -hi*hi + h2rdg/
krdg(i,j,ni)
680 integer (kind=int_kind) :: &
684 real (kind=dbl_kind) ,
parameter :: &
688 real (kind=dbl_kind) ,
dimension(ilo:ihi,jlo:jhi,-1:ncat) :: &
691 real (kind=dbl_kind) :: &
732 gsum(i,j,0) =
aice0(i,j)
734 gsum(i,j,0) = gsum(i,j,-1)
746 gsum(i,j,ni) = gsum(i,j,ni-1) +
aicen(i,j,ni)
748 gsum(i,j,ni) = gsum(i,j,ni-1)
764 gsum(i,j,ni) = gsum(i,j,ni) *
worka(i,j)
791 if (gsum(i,j,ni) <
gstar)
then 792 apartic(i,j,ni) = gstari * (gsum(i,j,ni)-gsum(i,j,ni-1)) &
793 * (
c2i - (gsum(i,j,ni-1)+gsum(i,j,ni))*gstari)
794 elseif (gsum(i,j,ni-1) <
gstar)
then 796 * (
c2i - (gsum(i,j,ni-1)+
gstar)*gstari)
814 xtmp =
c1i / (
c1i-exp(-astari))
822 gsum(i,j,ni) = exp(-gsum(i,j,ni)*astari) * xtmp
835 apartic(i,j,ni) = gsum(i,j,ni-1) - gsum(i,j,ni)
875 krdg(i,j,ni) = hrmean / hi
969 msnow_mlt, esnow_mlt)
979 real (kind=dbl_kind),
dimension(ilo:ihi,jlo:jhi),
intent(in) :: &
984 real (kind=dbl_kind),
dimension(ilo:ihi,jlo:jhi),
intent(inout) :: &
990 integer (kind=int_kind) :: &
997 integer (kind=int_kind),
dimension(1:(ihi-ilo+1)*(jhi-jlo+1)) :: &
1000 real (kind=dbl_kind),
dimension (imt_local,jmt_local) :: &
1001 vice_init, vice_final &
1002 , eice_init, eice_final
1004 real (kind=dbl_kind),
dimension (imt_local,jmt_local,ncat) :: &
1010 real (kind=dbl_kind),
dimension (imt_local,jmt_local,ntilay) :: &
1013 real (kind=dbl_kind),
dimension (ilo:ihi,jlo:jhi) :: &
1025 real (kind=dbl_kind),
dimension (ilo:ihi,jlo:jhi,nilyr) :: &
1028 real (kind=dbl_kind) :: &
1034 character (len=char_len) :: &
1037 logical (kind=log_kind) :: &
1080 write (nu_diag,*)
' ' 1081 write (nu_diag,*)
'Ridging error: aice0 < 0' 1082 write (nu_diag,*)
'istep1, my_task, i, j:', &
1085 write (nu_diag,*)
'aice0:',
aice0(i,j)
1097 aicen_init(:,:,:) =
aicen(:,:,:)
1098 vicen_init(:,:,:) =
vicen(:,:,:)
1099 vsnon_init(:,:,:) =
vsnon(:,:,:)
1100 aicen_init(:,:,:) =
aicen(:,:,:)
1101 esnon_init(:,:,:) =
esnon(:,:,:)
1102 eicen_init(:,:,:) =
eicen(:,:,:)
1119 .and. closing_gross(i,j) >
c0i)
then 1127 large_ardg = .false.
1143 if (ardg1(i,j) > aicen_init(i,j,n1) +
puny)
then 1146 ardg1(i,j) = min(ardg1(i,j),aicen_init(i,j,n1))
1149 ardg2(i,j) = ardg1(i,j) /
krdg(i,j,n1)
1150 afrac(i,j) = ardg1(i,j) / aicen_init(i,j,n1)
1157 virdg(i,j) = vicen_init(i,j,n1) * afrac(i,j)
1158 vsrdg(i,j) = vsnon_init(i,j,n1) * afrac(i,j)
1159 esrdg(i,j) = esnon_init(i,j,n1) * afrac(i,j)
1181 msnow_mlt(i,j) = msnow_mlt(i,j) &
1183 esnow_mlt(i,j) = esnow_mlt(i,j) &
1209 eirdg(i,j,k) = eicen_init(i,j,
ilyr1(n1)+k-1) * afrac(i,j)
1215 if (large_ardg)
then 1219 if (ardg1(i,j) > aicen_init(i,j,n1) +
puny)
then 1220 write (nu_diag,*)
'' 1221 write (nu_diag,*)
'ardg > aicen' 1222 write (nu_diag,*)
'istep1, my_task, i, j, n:', &
1224 write (nu_diag,*)
'ardg, aicen_init:', &
1225 ardg1(i,j), aicen_init(i,j,n1)
1258 farea(i,j) = (hr-hl) / dhr(i,j)
1259 fvol(i,j) = (hr*hr - hl*hl) / dhr2(i,j)
1277 hexp =
hrexp(i,j,n1)
1285 expl = exp(-(hl-hi1)/hexp)
1286 expr = exp(-(hr-hi1)/hexp)
1287 farea(i,j) = expl - expr
1288 fvol(i,j) = ((hl + hexp)*expl &
1289 - (hr + hexp)*expr) / (hi1 + hexp)
1300 hexp =
hrexp(i,j,n1)
1303 expl = exp(-(hl-hi1)/hexp)
1305 fvol(i,j) = (hl + hexp)*expl / (hi1 + hexp)
1324 aicen(i,j,n2) =
aicen(i,j,n2) + farea(i,j)*ardg2(i,j)
1325 vicen(i,j,n2) =
vicen(i,j,n2) + fvol(i,j) *virdg(i,j)
1344 + fvol(i,j)*eirdg(i,j,k)
1358 fieldid =
'vice, ridging' 1363 fieldid =
'eice, ridging' 1398 integer (kind=int_kind) :: i, j, ni
real(kind=dbl_kind), parameter gstar
subroutine ice_strength(kstrngth)
real(kind=dbl_kind), dimension(:,:,:), allocatable, save krdg
integer(kind=int_kind), parameter nilyr
subroutine column_sum(nsum, xin, xout)
logical(kind=log_kind), parameter l_conservation_check
real(kind=dbl_kind), dimension(:,:,:), allocatable, target, save esnon
real(kind=dbl_kind), dimension(:,:,:), allocatable, save apartic
real(kind=dbl_kind), dimension(:,:), allocatable, save dvirdgdt
integer(kind=int_kind) ihi
real(kind=dbl_kind), parameter c0i
real(kind=dbl_kind), parameter rhos
real(kind=dbl_kind), parameter lfresh
integer(kind=int_kind) krdg_partic
real(kind=dbl_kind), dimension(:,:), allocatable, save fhnet_hist
real(kind=dbl_kind), parameter hstar
subroutine column_conservation_check(x1, x2, max_err, fieldid)
real(kind=dbl_kind), dimension(:,:), allocatable, save opening
real(kind=dbl_kind), parameter maxraft
real(kind=dbl_kind), dimension(:,:), allocatable, save dardg1dt
real(kind=dbl_kind), parameter c4i
real(kind=dbl_kind), dimension(:,:), allocatable, save fresh
integer(kind=int_kind) krdg_redist
real(kind=dbl_kind), parameter cs
real(kind=dbl_kind), parameter p25
real(kind=dbl_kind), dimension(:,:), allocatable, save aksum
real(kind=dbl_kind), parameter c20
integer(kind=int_kind) jlo
real(kind=dbl_kind), parameter astar
real(kind=dbl_kind), parameter c25
real(kind=dbl_kind), parameter cf
real(kind=dbl_kind), parameter cp
real(kind=dbl_kind), parameter cstar
integer(kind=int_kind) ilo
real(kind=dbl_kind), parameter p5
real(kind=dbl_kind), parameter puny
real(kind=dbl_kind), dimension(:,:,:), allocatable, save hrmin
integer(kind=int_kind) jhi
real(kind=dbl_kind), dimension(:,:), allocatable worka
real(kind=dbl_kind), parameter rhow
real(kind=dbl_kind), dimension(:,:,:), allocatable, target, save vicen
real(kind=dbl_kind) dyn_dt
real(kind=dbl_kind), dimension(:,:), allocatable, target, save aice
real(kind=dbl_kind), dimension(:,:), allocatable, save fresh_hist
real(kind=dbl_kind), dimension(:,:,:), allocatable, target, save eicen
real(kind=dbl_kind), dimension(:,:), allocatable, target, save aice0
integer(kind=int_kind), parameter ncat
real(kind=dbl_kind), parameter mu_rdg
real(kind=dbl_kind), parameter c2i
real(kind=dbl_kind), dimension(:,:,:), allocatable, target, save aicen
integer(kind=int_kind), save my_task
real(kind=dbl_kind), dimension(0:ncat) hin_max
subroutine ridge_ice(Delta, divu)
real(kind=dbl_kind), dimension(:,:,:), allocatable, save hrexp
real(kind=dbl_kind), dimension(:,:), allocatable, target, save vice
real(kind=dbl_kind), parameter pstar
real(kind=dbl_kind), parameter gravit
real(kind=dbl_kind), parameter c1i
subroutine ridge_shift(opning, closing_gross, msnow_mlt, esnow_mlt)
real(kind=dbl_kind), dimension(:,:), allocatable, save asum
real(kind=dbl_kind), parameter rhoi
integer(kind=int_kind), parameter ntilay
real(kind=dbl_kind), parameter p333
real(kind=dbl_kind), parameter fsnowrdg
real(kind=dbl_kind), parameter p15
integer(kind=int_kind), dimension(ncat) ilyr1
real(kind=dbl_kind), dimension(:,:), allocatable, save dardg2dt
integer(kind=int_kind) istep1
real(kind=dbl_kind), dimension(:,:), allocatable, save strength
real(kind=dbl_kind), dimension(:,:), allocatable, save fhnet
real(kind=dbl_kind), dimension(:,:,:), allocatable, target, save vsnon
integer(kind=int_kind) kstrength
real(kind=dbl_kind), dimension(:,:,:), allocatable, save hrmax