62 integer (kind=int_kind) :: &
126 integer (kind=int_kind) :: &
140 write (nu_diag,*)
'Remapping the ITD is not allowed for ncat=1' 141 write (nu_diag,*)
'Use the delta function ITD option instead' 146 d1 = 3.0_dbl_kind / rncat
147 d2 = 0.5_dbl_kind / rncat
188 x1 = real(ni-1,kind=
dbl_kind) / rncat
190 + cc1 + cc2*(
c1i + tanh(cc3*(x1-
c1i)))
203 if (my_task == master_task)
then 204 write (nu_diag,*)
' ' 205 write (nu_diag,*)
'The thickness categories are:' 206 write (nu_diag,*)
' ' 207 write (nu_diag,*)
'hin_max(n-1) < Cat n < hin_max(n)' 211 write (nu_diag,*)
' ' 254 integer (kind=int_kind) :: i, j, k, ni
256 integer (kind=int_kind),
dimension (1:(ihi-ilo+1)*(jhi-jlo+1)) :: &
260 integer (kind=int_kind) :: &
371 integer (kind=int_kind) :: i, j, ni
373 logical (kind=log_kind) :: &
546 integer (kind=int_kind) :: &
551 integer (kind=int_kind),
dimension (ilo:ihi,jlo:jhi) :: &
577 if (zerout(i,j)==1)
then 641 integer (kind=int_kind) :: &
645 logical (kind=log_kind) :: &
648 real (kind=
dbl_kind),
dimension(ilo:ihi,jlo:jhi,ncat) :: &
651 integer (kind=int_kind),
dimension(ilo:ihi,jlo:jhi,ncat) :: &
654 real (kind=
dbl_kind),
dimension(ilo:ihi,jlo:jhi,ncat) :: &
713 hicen(i,j,ni) >
hin_max(ni))
then 716 daice(i,j,ni) =
aicen(i,j,ni)
717 dvice(i,j,ni) =
vicen(i,j,ni)
727 call shift_ice (donor, daice, dvice, hicen)
748 do ni =
ncat-1, 1, -1
757 hicen(i,j,ni+1) <=
hin_max(ni))
then 760 daice(i,j,ni) =
aicen(i,j,ni+1)
761 dvice(i,j,ni) =
vicen(i,j,ni+1)
771 call shift_ice (donor, daice, dvice, hicen)
820 real (kind=
dbl_kind),
dimension(ilo:ihi,jlo:jhi), &
824 real (kind=
dbl_kind),
dimension(ilo:ihi,jlo:jhi), &
830 integer (kind=int_kind) :: &
852 dhi = hice1(i,j) - hice1_old(i,j)
855 dai0 =
vicen(i,j,1) / (hi0-
p5*dhi) &
874 subroutine shift_ice (donor, daice, dvice, hicen)
895 integer (kind=int_kind),
dimension(ilo:ihi,jlo:jhi,ncat), &
899 real (kind=
dbl_kind),
dimension(ilo:ihi,jlo:jhi,ncat), &
904 real (kind=
dbl_kind),
dimension(ilo:ihi,jlo:jhi,ncat), &
910 integer (kind=int_kind) :: &
917 real (kind=
dbl_kind),
dimension(ilo:ihi,jlo:jhi,ncat) :: &
926 integer (kind=int_kind),
dimension (1:(ihi-ilo+1)*(jhi-jlo+1)) :: &
930 integer (kind=int_kind) :: &
934 logical (kind=log_kind) :: &
937 , daice_greater_aicen &
938 , dvice_greater_vicen
962 daice_negative = .false.
963 dvice_negative = .false.
964 daice_greater_aicen = .false.
965 dvice_greater_vicen = .false.
970 if (donor(i,j,ni) > 0)
then 973 if (daice(i,j,ni) <
c0i)
then 974 if (daice(i,j,ni) > -
puny*
aicen(i,j,n1))
then 978 daice_negative = .true.
982 if (dvice(i,j,ni) <
c0i)
then 983 if (dvice(i,j,ni) > -
puny*
vicen(i,j,n1))
then 987 dvice_negative = .true.
993 daice(i,j,ni) =
aicen(i,j,n1)
994 dvice(i,j,ni) =
vicen(i,j,n1)
996 daice_greater_aicen = .true.
1002 daice(i,j,ni) =
aicen(i,j,n1)
1003 dvice(i,j,ni) =
vicen(i,j,n1)
1005 dvice_greater_vicen = .true.
1017 if (daice_negative)
then 1020 if (donor(i,j,ni) > 0 .and. &
1021 daice(i,j,ni) <= -
puny*
aicen(i,j,n1))
then 1022 write(nu_diag,*) my_task,
':',i,j, &
1023 'ITD Neg daice =',daice(i,j,ni),
' boundary',ni
1030 if (dvice_negative)
then 1033 if (donor(i,j,ni) > 0 .and. &
1034 dvice(i,j,ni) <= -
puny*
vicen(i,j,n1))
then 1035 write(nu_diag,*) my_task,
':',i,j, &
1036 'ITD Neg dvice =',dvice(i,j,ni),
' boundary',ni
1043 if (daice_greater_aicen)
then 1046 if (donor(i,j,ni) > 0)
then 1049 write(nu_diag,*) my_task,
':',i,j, &
1050 'ITD daice > aicen, cat',n1
1051 write(nu_diag,*) my_task,
':',i,j, &
1052 'daice =', daice(i,j,ni), &
1053 'aicen =',
aicen(i,j,n1)
1061 if (dvice_greater_vicen)
then 1064 if (donor(i,j,ni) > 0)
then 1067 write(nu_diag,*) my_task,
':',i,j, &
1068 'ITD dvice > vicen, cat',n1
1069 write(nu_diag,*) my_task,
':',i,j, &
1070 'dvice =', dvice(i,j,ni), &
1071 'vicen =',
vicen(i,j,n1)
1086 if (daice(i,j,ni) >
c0i)
then 1104 worka(i,j) = dvice(i,j,ni) / (
vicen(i,j,n1)+epsilon(eps))
1113 aicen(i,j,n1) =
aicen(i,j,n1) - daice(i,j,ni)
1114 aicen(i,j,n2) =
aicen(i,j,n2) + daice(i,j,ni)
1115 vicen(i,j,n1) =
vicen(i,j,n1) - dvice(i,j,ni)
1116 vicen(i,j,n2) =
vicen(i,j,n2) + dvice(i,j,ni)
1122 datsf = daice(i,j,ni)*
tsfcn(i,j,n1)
1123 atsfn(i,j,n1) = atsfn(i,j,n1) - datsf
1124 atsfn(i,j,n2) = atsfn(i,j,n2) + datsf
1168 hicen(i,j,ni) =
vicen(i,j,ni) /(
aicen(i,j,ni)+epsilon(eps))
1169 tsfcn(i,j,ni) = atsfn(i,j,ni) /(
aicen(i,j,ni)+epsilon(eps))
1203 integer (kind=int_kind),
intent(in) :: &
1206 real (kind=
dbl_kind),
intent(in) :: &
1207 xin(imt_local,jmt_local,nsum)
1210 real (kind=
dbl_kind),
intent(out) :: &
1211 xout(imt_local,jmt_local)
1215 integer (kind=int_kind) :: &
1228 xout(i,j) = xout(i,j) + xin(i,j,ni)
1257 real (kind=
dbl_kind),
intent(in) :: &
1258 x1(imt_local,jmt_local)
1260 real (kind=
dbl_kind),
intent(in) :: &
1261 x2(imt_local,jmt_local)
1263 real (kind=
dbl_kind),
intent(in) :: &
1266 character (len=char_len),
intent(in) :: &
1271 integer (kind=int_kind) :: &
1274 logical (kind=log_kind) :: &
1277 conserv_err = .false.
1281 if (abs(x2(i,j) - x1(i,j)) > max_err)
then 1282 conserv_err = .true.
1287 if ( conserv_err )
then 1290 if (abs(x2(i,j) - x1(i,j)) > max_err)
then 1291 write (nu_diag,*)
' ' 1292 write (nu_diag,*)
'Conservation error: ', fieldid
1293 write (nu_diag,*) my_task,
':', i, j
1294 write (nu_diag,*)
'Initial value =', x1(i,j)
1295 write (nu_diag,*)
'Final value =', x2(i,j)
1296 write (nu_diag,*)
'Difference =', x2(i,j) - x1(i,j)
1338 integer (kind=int_kind) :: &
1345 integer (kind=int_kind),
dimension (1:(ihi-ilo+1)*(jhi-jlo+1)) :: &
1363 write (nu_diag,*)
'Negative ice area: i, j, n:', i, j, ni
1364 write (nu_diag,*)
'aicen =',
aicen(i,j,ni)
real(kind=dbl_kind), dimension(:,:), allocatable, save tf
real(kind=dbl_kind), dimension(:,:), allocatable, save fsalt_hist
real(kind=dbl_kind), dimension(:,:), allocatable, target, save eice
integer(kind=int_kind), parameter nilyr
subroutine column_sum(nsum, xin, xout)
integer(kind=int_kind) kcatbound
real(kind=dbl_kind), dimension(:,:,:), allocatable, target, save esnon
real(kind=dbl_kind), dimension(:,:), allocatable, target, save esno
integer, parameter dbl_kind
subroutine reduce_area(hice1_old, hice1)
integer(kind=int_kind) ihi
real(kind=dbl_kind), parameter c0i
real(kind=dbl_kind), parameter c3i
real(kind=dbl_kind), parameter rhos
real(kind=dbl_kind), dimension(:,:), allocatable tlat
real(kind=dbl_kind), parameter lfresh
real(kind=dbl_kind), parameter ice_ref_salinity
real(kind=dbl_kind), dimension(:,:), allocatable, save fhnet_hist
subroutine column_conservation_check(x1, x2, max_err, fieldid)
integer(kind=int_kind) kitd
real(kind=dbl_kind), dimension(:,:), allocatable, save fresh
real(kind=dbl_kind), parameter hi_min
integer(kind=int_kind) jlo
real(kind=dbl_kind), parameter c25
real(kind=dbl_kind), dimension(:,:), allocatable, target, save vsno
integer(kind=int_kind) ilo
real(kind=dbl_kind), parameter p5
real(kind=dbl_kind), parameter puny
real(kind=dbl_kind) dtice
integer(kind=int_kind) jhi
real(kind=dbl_kind), dimension(:,:,:), allocatable, target, save tsfcn
real(kind=dbl_kind), dimension(:,:), allocatable worka
real(kind=dbl_kind), parameter p001
real(kind=dbl_kind), dimension(:,:,:), allocatable, target, save vicen
integer(kind=int_kind), dimension(ncat) ilyrn
real(kind=dbl_kind), dimension(:,:), allocatable, target, save aice
real(kind=dbl_kind), dimension(:,:), allocatable, save fresh_hist
real(kind=dbl_kind), dimension(:,:), allocatable, save fsalt
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), dimension(:,:,:), allocatable, target, save aicen
real(kind=dbl_kind), dimension(0:ncat) hin_max
real(kind=dbl_kind), dimension(:,:), allocatable, target, save vice
real(kind=dbl_kind), parameter c1i
real(kind=dbl_kind), parameter c15
subroutine bound_aggregate
real(kind=dbl_kind), parameter rhoi
real(kind=dbl_kind), dimension(:,:), allocatable tlon
integer(kind=int_kind), dimension(ncat) ilyr1
real(kind=dbl_kind), dimension(:,:), allocatable, target, save tsfc
real(kind=dbl_kind), parameter p01
subroutine shift_ice(donor, daice, dvice, hicen)
logical(kind=log_kind), dimension(:,:), allocatable tmask
real(kind=dbl_kind), dimension(:,:), allocatable, save fhnet
real(kind=dbl_kind), dimension(:,:,:), allocatable, target, save vsnon
real(kind=dbl_kind), parameter eps04
subroutine zap_small_areas
subroutine aggregate_area