*IF DEF,SEAICE ORH1F305.450
C ******************************COPYRIGHT****************************** GTS2F400.4303
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved. GTS2F400.4304
C GTS2F400.4305
C Use, duplication or disclosure of this code is subject to the GTS2F400.4306
C restrictions as set forth in the contract. GTS2F400.4307
C GTS2F400.4308
C Meteorological Office GTS2F400.4309
C London Road GTS2F400.4310
C BRACKNELL GTS2F400.4311
C Berkshire UK GTS2F400.4312
C RG12 2SZ GTS2F400.4313
C GTS2F400.4314
C If no contract has been raised with this copy of the code, the use, GTS2F400.4315
C duplication or disclosure of it is strictly prohibited. Permission GTS2F400.4316
C to do so must first be obtained in writing from the Head of Numerical GTS2F400.4317
C Modelling at the above address. GTS2F400.4318
C ******************************COPYRIGHT****************************** GTS2F400.4319
C GTS2F400.4320
C*LL ICEDRIFT.3
CLL SUBROUTINE ICEDRIFT ICEDRIFT.4
CLL ------------------- ICEDRIFT.5
CLL ICEDRIFT.6
CLL Set up masks and variables ready for call to advection ODC1F405.209
CLL routine ODC1F405.210
CLL ICEDRIFT.10
CLL THIS ROUTINE FORMS PART OF SYSTEM COMPONENT P4. ICEDRIFT.11
CLL IT CAN BE COMPILED BY CFT77, BUT DOES NOT CONFORM TO ANSI ICEDRIFT.12
CLL FORTRAN77 STANDARDS, BECAUSE OF THE INLINE COMMENTS. ICEDRIFT.13
CLL ICEDRIFT.14
CLL ALL QUANTITIES IN THIS ROUTINE ARE IN S.I. UNITS UNLESS ICEDRIFT.15
CLL OTHERWISE STATED. ICEDRIFT.16
CLL ICEDRIFT.17
CLL WRITTEN BY J.F.THOMSON (25/01/93) ICEDRIFT.18
CLL ICEDRIFT.19
CLL Modified 13/05/93 J.F.Thomson ICEDRIFT.20
CLL Interpolates between grids in a consistent manner. ICEDRIFT.21
CLL Modified 11/08/93 J.F.Thomson ICEDRIFT.22
CLL Simplified for immediate use as GFDL type ice advection. ICEDRIFT.23
CLL Modified 02/09/93 J.F.Thomson ICEDRIFT.24
CLL Diffusion term added and zeroing advection in thick ice ICEDRIFT.25
CLL tidied up. ICEDRIFT.26
CLL Modified 08/10/93 T.C.Johns ICEDRIFT.27
CLL Converted to nupdate format for compatibility with vn3.2. ICEDRIFT.28
CLL Modified 27/03/95 C.Cooper OCC0F400.127
CCL Converted to remove locally set variables, passing them OCC0F400.128
CLL through subroutine call instead. OCC0F400.129
CLL ICEDRIFT.29
! 3.5 16.01.95 Remove *IF dependency. R.Hill ORH1F305.4204
! 4.0 28.09.95 Fix to prevent out of bounds messages ORH1F400.4
! - HICE(1->imt+1) was previously referred to, ORH1F400.5
! but only dimensioned 1->imt. ORH1F400.6
CLL MODEL MODIFICATION HISTORY SINCE INSERTION IN UM 3.3: ICEDRIFT.30
CLL VERSION DATE ICEDRIFT.31
CLL 4.0 Logical OCEAN passed from ICE_CTL. J.F.Crossley OJC2F400.49
CLL ICEDRIFT.32
CLL 4.0 8/95 Remove redundant arrays, give diagnostics OJC3F400.41
CLL meaningful names and tidy code. J.F.Crossley OJC3F400.42
CLL 4.3 delhs_dyn becomes a grid-box-mean quantity J.M.Gregory OJG3F403.5
! 4.3 01.02.97 Include further SWAPBOUNDS for mpp. R.Hill ORH3F403.71
! 4.5 8/97 Changes for free drift model. ODC1F405.211
! Chris Sherlock and Doug Cresswell ODC1F405.212
CLL 4.5 J M Gregory Rate diagnostics corresponding to increments OJG1F405.48
CLL ICEDRIFT.33
CLL ADHERES TO THE STANDARDS OF DOCUMENTATION PAPER 4, VERSION 1. ICEDRIFT.34
CLLEND--------------------------------------------------------------- ICEDRIFT.35
C*L ICEDRIFT.36
subroutine icedrift( 1,13ICEDRIFT.37
*CALL ARGOINDX
ORH7F402.222
C ICEDRIFT.38
C inout : primary variables, ancillary fields and arrays to communicate ICEDRIFT.39
C with section 30 and with the thermodynamic ice model. ICEDRIFT.40
& aice,hice,hsnow ICEDRIFT.41
&,uice,vice ODC1F405.213
&,icy,newice ICEDRIFT.43
&,ocean OJC2F400.50
C ICEDRIFT.45
C in : model data. ICEDRIFT.46
&,imt,imtm1,imtm2,jmt,jmtm1,km,fkmp ORH3F405.95
C ICEDRIFT.48
C out : fields required by icefloe and ocean model. ICEDRIFT.49
C ICEDRIFT.53
C in : constants required by pseudair. ICEDRIFT.54
C ICEDRIFT.55
&,phi,phit,aicemin,aicemax ORH3F405.94
&,hicemin,ah_ice OCC0F400.130
&,dphi,dlambda,dtts ICEDRIFT.57
&,cs,cstr,dyur,dytr,dxu2r,dxt4r ICEDRIFT.58
&,radius ODC1F405.214
&,delhi_dyn,delhs_dyn,diag_uice,diag_vice ODC1F405.215
&,dela_dyn,delhi_diff OJC3F400.45
&,sf_delhi_dyn,sf_delhs_dyn,sf_diag_uice,sf_diag_vice ODC1F405.216
&,sf_dela_dyn,sf_delhi_diff OJC3F400.47
&,ddt_aice_dyn,ddt_hice_dyn,ddt_snow_dyn,ddt_hice_diff OJG1F405.49
&,sf_ddt_aice_dyn,sf_ddt_hice_dyn,sf_ddt_snow_dyn,sf_ddt_hice_diff OJG1F405.50
& ) ICEDRIFT.65
C ICEDRIFT.66
IMPLICIT NONE ODC1F405.217
C ICEDRIFT.68
*CALL CNTLOCN
ORH1F305.4205
*CALL OARRYSIZ
ORH1F305.4206
*CALL TYPOINDX
ORH7F402.223
integer ICEDRIFT.69
& imt ! in number of tracer columns. ICEDRIFT.70
&,imtm2 ! in number of tracer columns minus 2. ICEDRIFT.71
&,jmt ! in number of tracer rows. ICEDRIFT.72
&,jmtm1 ! in number of tracer rows minus 1. ICEDRIFT.73
&,km ! in no of levels ORH6F402.114
real ICEDRIFT.75
& aice(imt,jmt) ! inout fractional ice concentration. ICEDRIFT.76
&,hice(imt,jmt) ! inout depth averaged over grid square (m) ICEDRIFT.77
&,hsnow(imt,jmt) ! inout snow depth over ice fraction only (m) ICEDRIFT.78
logical ICEDRIFT.81
& icy(imt,jmt) ! inout true for ocean points with aice > .001 ICEDRIFT.82
&,newice(imt,jmt) ! inout true for points where ice is forming. ICEDRIFT.83
&,ocean(imt,jmt) ! inout true for ocean points OJC2F400.51
real ICEDRIFT.84
& fkmp(imt,jmt) ! in number of levels at tracer points. ICEDRIFT.85
&,uice(imt,jmtm1)! in zonal ice velocity. ODC1F405.218
&,vice(imt,jmtm1)! in meridional ice velocity. ODC1F405.219
&,phi(jmt) ! in latitude of velocity rows in radians. ICEDRIFT.90
&,phit(jmt) ! in latitude of mass rows in radians. ICEDRIFT.91
real ICEDRIFT.92
& radius ! in radius of the earth in metres. ODC1F405.220
&,dphi(jmt) ! in meridional grid spacing in radians. ICEDRIFT.98
&,dlambda(imt) ! in zonal grid spacing in radians. ICEDRIFT.99
&,dtts ! in tracer timestep in seconds. ICEDRIFT.100
&,aicemin ! in minimum ice fraction. ICEDRIFT.101
&,aicemax(jmt) ! in maximum ice fraction. ICEDRIFT.102
&,hicemin ! in minimum ice depth. OCC0F400.135
&,ah_ice ! in ice diffusion coefficient OCC0F400.136
real cs(jmt),cstr(jmt),dyur(jmt),dytr(jmt) ICEDRIFT.103
&,dxu2r(imt),dxt4r(imt) ICEDRIFT.104
real ORH1F305.4207
& delhi_dyn(icol_cyc,jmt) ! out increment in hice (dynamics) OJC3F400.48
&,delhs_dyn(icol_cyc,jmt) ! out GBM increment in hsno (dynamics) OJG3F403.6
&,diag_uice(icol_cyc,jmtm1)! out u ice (dynamics) ODC1F405.221
&,diag_vice(icol_cyc,jmtm1)! out v ice (dynamics) ODC1F405.222
&,dela_dyn(icol_cyc,jmt) ! out increment in aice (dynamics) OJC3F400.52
&,delhi_diff(icol_cyc,jmt) ! out increment in hice (diffusion) OJC3F400.53
&,ddt_aice_dyn(icol_cyc,jmt) ! OUT d/dt AICE OJG1F405.51
&,ddt_hice_dyn(icol_cyc,jmt) ! OUT d/dt HICE OJG1F405.52
&,ddt_snow_dyn(icol_cyc,jmt) ! OUT d/dt GBM snowdepth OJG1F405.53
&,ddt_hice_diff(icol_cyc,jmt) ! OUT d/dt HICE diffusion OJG1F405.54
LOGICAL ICEDRIFT.129
& sf_delhi_dyn,sf_delhs_dyn,sf_diag_uice,sf_diag_vice ODC1F405.223
+,sf_dela_dyn,sf_delhi_diff ! in stash flags OJC3F400.55
&,sf_ddt_aice_dyn,sf_ddt_hice_dyn,sf_ddt_snow_dyn,sf_ddt_hice_diff OJG1F405.55
C ICEDRIFT.132
C variables local to this subroutine are now defined ICEDRIFT.133
C ICEDRIFT.134
integer ICEDRIFT.135
& i,j ! loop counters ICEDRIFT.136
&,imtm1 ! number of tracer columns minus 1 ICEDRIFT.137
C ICEDRIFT.138
real ICEDRIFT.139
& zero ! 0.0 ICEDRIFT.140
&, uv ! workspace scalar. ICEDRIFT.143
C ICEDRIFT.153
real ICEDRIFT.154
& hmask(imt,jmt) ! 1.0 for land 0.0 for sea points. ICEDRIFT.155
&,umask(imt,jmtm1) ! 1.0 for uv land 0.0 for sea. ICEDRIFT.156
C ICEDRIFT.159
real ICEDRIFT.160
& uice_c(imt,jmtm1)! u ice on C grid h pts ODC1F405.224
&,vice_c(imt,jmtm1)! v ice on C grid h pts ODC1F405.225
&,aice_old(imt,jmt) ! initial ice fraction ICEDRIFT.163
&,hice_old(imt,jmt) ! initial ice depth ICEDRIFT.164
&,hice_cu(imt,jmtm1) ! ice depth on c grid u points ICEDRIFT.165
&,hice_cv(imt,jmtm1) ! ice depth on c grid v points ICEDRIFT.166
&,hsnow_old(imt,jmt) ! initial snow depth ICEDRIFT.167
&,diffus(imt,jmt) ! ice depth increments due to diffusion ICEDRIFT.168
&,aa ICEDRIFT.170
&,bb ICEDRIFT.171
&,cc ICEDRIFT.172
&,dd ICEDRIFT.173
&,tempa(imt) ICEDRIFT.174
&,dttsr ! Reciprocal of timestep OJG1F405.56
C* ICEDRIFT.176
C start executable code ICEDRIFT.177
C ICEDRIFT.178
C initialise various constants. OJC3F400.56
zero = 0.000E+00 ICEDRIFT.187
dttsr=1.0/dtts OJG1F405.57
C ICEDRIFT.191
C First set up land sea and ice-free sea masks ICEDRIFT.192
C ICEDRIFT.193
do j = J_1,J_jmt ORH3F402.208
do i = 1,imt ICEDRIFT.195
hmask(i,j) = min ( 1.0 , fkmp(i,j) ) ICEDRIFT.197
end do ICEDRIFT.203
end do ICEDRIFT.204
C ICEDRIFT.205
*IF DEF,MPP ORH4F402.113
C===================================================================== ORH4F402.114
C CALL TO SWAPBOUNDS FOR HALO UPDATE IN MPP VERSION ORH4F402.115
C===================================================================== ORH4F402.116
ORH4F402.117
CALL SWAPBOUNDS
(HMASK,IMT,JMT,O_EW_HALO,O_NS_HALO,1) ORH4F402.118
ORH4F402.119
*ENDIF ORH4F402.120
ORH4F402.121
C Calculate Arakawa B grid ice velocity mask. ICEDRIFT.206
C ??? needs extra code to run without cyclic boundary conditions. ICEDRIFT.207
do j = J_1,J_jmtm1 ORH3F402.209
do i = 2,imtm1 ICEDRIFT.209
umask(i,j) = 1.0 ICEDRIFT.210
uv = hmask(i,j)+hmask(i+1,j)+hmask(i,j+1)+hmask(i+1,j+1) ICEDRIFT.211
if (uv.lt.3.5) umask(i,j) = 0.0 ICEDRIFT.212
end do ICEDRIFT.213
IF (.NOT.(L_OCYCLIC)) THEN ORH1F305.4214
umask(1,j) = 1.0 ICEDRIFT.215
uv = hmask(1,j) + hmask(1,j+1) ICEDRIFT.216
if (uv.lt.1.5) umask(1,j) = 0.0 ICEDRIFT.217
umask(imt,j) = 1.0 ICEDRIFT.218
uv = hmask(imt,j) + hmask(imt,j+1) ICEDRIFT.219
if (uv.lt.1.5) umask(imt,j) = 0.0 ICEDRIFT.220
ENDIF ORH1F305.4215
end do ICEDRIFT.222
IF (L_OCYCLIC) THEN ORH1F305.4216
C ICEDRIFT.224
C Make masking arrays cyclic if necessary. ICEDRIFT.225
C ICEDRIFT.226
do j = J_1,J_jmt ORH3F402.210
ocean(1,j) = ocean(imtm1,j) ICEDRIFT.228
ocean(imt,j) = ocean(2,j) ICEDRIFT.229
hmask(1,j) = hmask(imtm1,j) ICEDRIFT.230
hmask(imt,j) = hmask(2,j) ICEDRIFT.231
end do ICEDRIFT.232
do j = J_1,J_jmtm1 ORH3F402.211
umask(1,j) = umask(imtm1,j) ICEDRIFT.234
umask(imt,j) = umask(2,j) ICEDRIFT.235
end do ICEDRIFT.236
ENDIF ORH1F305.4217
C ICEDRIFT.238
C Interpolate velocities to C grid. ODC1F405.226
C ICEDRIFT.240
call uv_to_cu
( ORH7F402.224
*CALL ARGOINDX
ORH7F402.225
& uice,uice_c,jmtm1,imt) ODC1F405.227
call uv_to_cv
( ORH7F402.227
*CALL ARGOINDX
ORH7F402.228
& vice,vice_c,jmtm1,imt) ODC1F405.228
C Copy initial ice depths and snow depths to workspace ICEDRIFT.243
do j = J_1,J_jmt ORH3F402.212
do i=1,imt ICEDRIFT.245
aice_old(i,j) = aice(i,j) ICEDRIFT.246
hice_old(i,j) = hice(i,j) ICEDRIFT.247
hsnow_old(i,j) = hsnow(i,j) ICEDRIFT.248
diffus(i,j) = 0.0 ICEDRIFT.249
end do ICEDRIFT.250
end do ICEDRIFT.251
*IF DEF,MPP ORH3F403.72
CALL SWAPBOUNDS
(HMASK,IMT,JMT,O_EW_HALO,O_NS_HALO,1) ORH3F403.74
*ENDIF ORH3F403.75
ORH3F403.76
IF(L_ICESIMPLE)THEN ODC1F405.229
C Zero currents if ice depth >= 4 metres and ice flowing to thicker area ODC1F405.230
call h_to_cu
( ORH7F402.230
*CALL ARGOINDX
ORH7F402.231
& hice,hice_cu,jmt,jmtm1,imt) ORH7F402.232
do j = J_1,J_jmtm1 ORH3F402.213
do i=1,imt-1 ICEDRIFT.255
if (hice_cu(i,j) .gt. 4.0 ICEDRIFT.256
& .and.uice_c(i,j)*(hice(i+1,j+1)-hice(i,j+1)).gt.0) ODC1F405.232
& uice_c(i,j)=0.0 ODC1F405.233
end do ICEDRIFT.259
IF (L_OCYCLIC) THEN ORH1F305.4218
uice_c(imt,j)=uice_c(2,j) ODC1F405.234
ENDIF ORH1F305.4219
end do ICEDRIFT.263
call h_to_cv
( ORH7F402.233
*CALL ARGOINDX
ORH7F402.234
& hice,hice_cv,jmt,jmtm1,imt) ORH7F402.235
do j = J_1,J_jmtm1 ORH3F402.214
do i=1,imt-1 ORH1F400.7
if (hice_cv(i,j) .gt. 4.0 ICEDRIFT.267
& .and.vice_c(i,j)*(hice(i+1,j+1)-hice(i+1,j)).gt.0) ODC1F405.235
& vice_c(i,j)=0.0 ODC1F405.236
end do ICEDRIFT.270
end do ICEDRIFT.271
ENDIF ODC1F405.231
C ICEDRIFT.272
C Call ice_advect to advect ice thickness, compactness and snow depth. ICEDRIFT.273
C ICEDRIFT.274
call ice_advect
( ICEDRIFT.275
*CALL ARGOINDX
ORH7F402.236
& uice_c,vice_c,aice,hice,hsnow,hmask,umask,icy ODC1F405.237
& ,imt,imtm2,jmt,jmtm1 ORH3F405.96
& ,phi,phit,dphi,dlambda,radius,dtts ORH6F402.116
& ) ICEDRIFT.278
IF (L_OCYCLIC) THEN ORH1F305.4220
C ICEDRIFT.280
C Make primary arrays cyclic if necessary ICEDRIFT.281
C ICEDRIFT.282
do j = J_1,J_jmt ORH3F402.215
hice(1,j) = hice(imtm1,j) ICEDRIFT.284
hice(imt,j) = hice(2,j) ICEDRIFT.285
aice(1,j) = hice(imtm1,j) ICEDRIFT.286
aice(imt,j) = hice(2,j) ICEDRIFT.287
hsnow(1,j) = hice(imtm1,j) ICEDRIFT.288
hsnow(imt,j) = hice(2,j) ICEDRIFT.289
end do ICEDRIFT.290
ENDIF ORH1F305.4221
C ICEDRIFT.292
C Calculate diffusion increments using del2 (taken from TRACER) ICEDRIFT.293
C ICEDRIFT.294
C Extend hmask to be zero over all ice-free areas to prevent diffusion ICEDRIFT.295
C out from ice edge ICEDRIFT.296
C ICEDRIFT.297
do j = J_1,J_jmt ORH3F402.216
do i=1,imt ICEDRIFT.299
if (ocean(i,j) .and. (aice(i,j).eq.zero)) hmask(i,j)=0.0 ICEDRIFT.300
end do ICEDRIFT.301
end do ICEDRIFT.302
*IF DEF,MPP ORH3F403.77
CALL SWAPBOUNDS
(HICE,IMT,JMT,O_EW_HALO,O_NS_HALO,1) ORH3F403.78
CALL SWAPBOUNDS
(HMASK,IMT,JMT,O_EW_HALO,O_NS_HALO,1) ORH3F403.79
*ENDIF ORH3F403.80
do j = J_2,J_jmtm1 ORH3F402.217
BB=8.0*AH_ICE*CSTR(J)*CSTR(J) OCC0F400.141
CC=AH_ICE*CS(J )*DYUR(J )*DYTR(J)*CSTR(J)*1.0E4 OCC0F400.142
DD=AH_ICE*CS(J-1)*DYUR(J-1)*DYTR(J)*CSTR(J)*1.0E4 OCC0F400.143
do i=2,imtm1 ICEDRIFT.307
TEMPA(I)=DXU2R(I-1)*(HICE(I,J)-HICE(I-1,J))*1.0E2 ICEDRIFT.308
end do ICEDRIFT.309
IF (L_OCYCLIC) THEN ORH1F305.4222
TEMPA(IMT) = TEMPA(2) ICEDRIFT.311
TEMPA(1) = TEMPA(IMTM1) ICEDRIFT.312
ENDIF ORH1F305.4223
do i=2,imtm1 ICEDRIFT.314
DIFFUS(I,J)=hmask(i,j)*( BB*DXT4R(I)*1.0E2 ICEDRIFT.315
* *(HMASK(I+1,J)*TEMPA(I+1)-HMASK(I-1,J)*TEMPA(I)) ICEDRIFT.316
* +CC*HMASK(I,J+1)*(HICE(I,J+1)-HICE(I,J)) ICEDRIFT.317
* +DD*HMASK(I,J-1)*(HICE(I,J-1)-HICE(I,J)) ) ICEDRIFT.318
end do ICEDRIFT.319
IF (L_OCYCLIC) THEN ORH1F305.4224
diffus(imt,j) = diffus(2,j) ICEDRIFT.321
diffus(1,j) = diffus(imtm1,j) ICEDRIFT.322
ENDIF ORH1F305.4225
end do ICEDRIFT.324
C ICEDRIFT.325
C Add in diffusion increments. ICEDRIFT.326
C ICEDRIFT.327
do j = J_2,J_jmtm1 ORH3F402.218
do i=2,imtm1 ICEDRIFT.329
hice(i,j) = hice(i,j) + diffus(i,j)*dtts ICEDRIFT.330
end do ICEDRIFT.331
hice(1,j) = hice(imtm1,j) ICEDRIFT.332
hice(imt,j) = hice(2,j) ICEDRIFT.333
end do ICEDRIFT.334
C ICEDRIFT.335
C Adjust ice fractions greater than the max, or less than the min. ICEDRIFT.336
C Also adjust snow depth accordingly and reset icy and newice. ICEDRIFT.337
C ICEDRIFT.338
do j = J_1,J_jmt ORH3F402.219
do i=1,imt ICEDRIFT.340
if (aice(i,j).gt.aicemax(j)) then ICEDRIFT.341
hsnow(i,j) = hsnow(i,j)*aice(i,j)/aicemax(j) ICEDRIFT.342
aice(i,j) = aicemax(j) ICEDRIFT.343
elseif (aice(i,j).gt.zero .and. aice(i,j).lt.aicemin ICEDRIFT.344
& .and. fkmp(i,j).gt.0.5) then ICEDRIFT.345
hsnow(i,j) = hsnow(i,j)*aice(i,j)/aicemin ICEDRIFT.346
aice(i,j) = aicemin ICEDRIFT.347
endif ICEDRIFT.348
icy(i,j) = (aice(i,j).gt.zero) ICEDRIFT.349
if (icy(i,j)) newice(i,j)=.false. ICEDRIFT.365
end do ICEDRIFT.366
end do ICEDRIFT.367
IF (L_OCYCLIC) THEN ORH1F305.4226
C ICEDRIFT.369
C make cyclic if necessary ICEDRIFT.370
C ICEDRIFT.371
do j = J_1,J_jmt ORH3F402.220
aice(1,j) = aice(imtm1,j) ICEDRIFT.373
aice(imt,j) = aice(2,j) ICEDRIFT.374
hice(1,j) = hice(imtm1,j) ICEDRIFT.375
hice(imt,j) = hice(2,j) ICEDRIFT.376
hsnow(1,j) = hsnow(imtm1,j) ICEDRIFT.377
hsnow(imt,j) = hsnow(2,j) ICEDRIFT.378
icy(1,j) = icy(imtm1,j) ICEDRIFT.379
icy(imt,j) = icy(2,j) ICEDRIFT.380
newice(1,j) = newice(imtm1,j) ICEDRIFT.381
newice(imt,j) = newice(2,j) ICEDRIFT.382
end do ICEDRIFT.383
ENDIF ORH1F305.4227
C copy diagnostics to stash workspace ICEDRIFT.385
IF (sf_delhi_dyn) THEN OJG1F405.58
do j = J_1,J_jmt OJG1F405.59
do i = 1, icol_cyc OJG1F405.60
IF (OCEAN(I,J)) THEN OJG1F405.61
delhi_dyn(I,J) = HICE(I,J)-HICE_OLD(I,J) OJG1F405.62
ENDIF OJG1F405.63
end do OJG1F405.64
end do OJG1F405.65
ENDIF OJG1F405.66
IF (sf_ddt_aice_dyn) THEN OJG1F405.67
do j = J_1,J_jmt OJG1F405.68
do i = 1, icol_cyc OJG1F405.69
IF (OCEAN(I,J)) THEN OJG1F405.70
ddt_aice_dyn(I,J) = dttsr*(AICE(I,J)-AICE_OLD(I,J)) OJG1F405.71
ENDIF OJG1F405.72
end do OJG1F405.73
end do OJG1F405.74
ENDIF OJG1F405.75
IF (sf_ddt_hice_dyn) THEN OJG1F405.76
do j = J_1,J_jmt OJG1F405.77
do i = 1, icol_cyc OJG1F405.78
IF (OCEAN(I,J)) THEN OJG1F405.79
ddt_hice_dyn(I,J) = dttsr*(HICE(I,J)-HICE_OLD(I,J)) OJG1F405.80
ENDIF OJG1F405.81
end do OJG1F405.82
end do OJG1F405.83
ENDIF OJG1F405.84
IF (sf_delhs_dyn) THEN OJG1F405.85
do j = J_1,J_jmt OJG1F405.86
do i = 1, icol_cyc OJG1F405.87
IF (OCEAN(I,J)) THEN OJG1F405.88
delhs_dyn(I,J) = HSNOW(I,J)*AICE(I,J) OJG1F405.89
& -HSNOW_OLD(I,J)*AICE_OLD(I,J) OJG1F405.90
ENDIF OJG1F405.91
end do OJG1F405.92
end do OJG1F405.93
ENDIF OJG1F405.94
IF (sf_ddt_snow_dyn) THEN OJG1F405.95
do j = J_1,J_jmt OJG1F405.96
do i = 1, icol_cyc OJG1F405.97
IF (OCEAN(I,J)) THEN OJG1F405.98
ddt_snow_dyn(I,J) = dttsr*(HSNOW(I,J)*AICE(I,J) OJG1F405.99
& -HSNOW_OLD(I,J)*AICE_OLD(I,J)) OJG1F405.100
ENDIF OJG1F405.101
end do OJG1F405.102
end do OJG1F405.103
ENDIF OJG1F405.104
IF (sf_diag_uice) THEN ODC1F405.238
do j = J_1,J_jmtm1 ORH3F402.222
do i = 1, icol_cyc ORH1F305.4229
if (umask(i,j).gt.0.5) ICEDRIFT.411
& diag_uice(I,J) = uice(i,j) ODC1F405.239
end do ICEDRIFT.413
end do ICEDRIFT.414
ENDIF ICEDRIFT.415
IF (sf_diag_vice) THEN ODC1F405.240
do j = J_1,J_jmtm1 ORH3F402.223
do i = 1, icol_cyc ORH1F305.4230
if (umask(i,j).gt.0.5) ICEDRIFT.423
& diag_vice(I,J) = vice(i,j) ODC1F405.241
end do ICEDRIFT.425
end do ICEDRIFT.426
ENDIF ICEDRIFT.427
IF (sf_dela_dyn) THEN OJC3F400.65
do j = J_1,J_jmt ORH3F402.224
do i = 1, icol_cyc ORH1F305.4231
if (ocean(i,j)) ICEDRIFT.435
& dela_dyn(I,J) = AICE(I,J) - AICE_OLD(I,J) OJC3F400.66
end do ICEDRIFT.437
end do ICEDRIFT.438
ENDIF ICEDRIFT.439
IF (sf_delhi_diff) THEN OJC3F400.67
do j = J_1,J_jmt ORH3F402.225
do i = 1, icol_cyc ORH1F305.4232
if (ocean(i,j)) ICEDRIFT.447
& delhi_diff(I,J) = DIFFUS(I,J)*dtts OJC3F400.68
end do ICEDRIFT.449
end do ICEDRIFT.450
ENDIF ICEDRIFT.451
IF (sf_ddt_hice_diff) THEN OJG1F405.105
do j = J_1,J_jmt OJG1F405.106
do i = 1, icol_cyc OJG1F405.107
if (ocean(i,j)) ddt_hice_diff(I,J) = DIFFUS(I,J) OJG1F405.108
end do OJG1F405.109
end do OJG1F405.110
ENDIF OJG1F405.111
C ICEDRIFT.452
*IF DEF,MPP ORH5F403.249
IF (sf_delhi_dyn) ORH5F403.250
&CALL SWAPBOUNDS(delhi_dyn,ICOL_CYC,JMT,O_EW_HALO,O_NS_HALO,1) ORH5F403.251
IF (sf_delhs_dyn) ORH5F403.252
&CALL SWAPBOUNDS(delhs_dyn,ICOL_CYC,JMT,O_EW_HALO,O_NS_HALO,1) ORH5F403.253
*IF DEF,MPP ODC1F405.242
IF (sf_diag_uice) ODC1F405.243
&CALL SWAPBOUNDS(diag_uice,ICOL_CYC,JMTM1,O_EW_HALO,O_NS_HALO,1) ODC1F405.244
IF (sf_diag_vice) ODC1F405.245
&CALL SWAPBOUNDS(diag_vice,ICOL_CYC,JMTM1,O_EW_HALO,O_NS_HALO,1) ODC1F405.246
*ENDIF ODC1F405.247
IF (sf_dela_dyn) ORH5F403.258
&CALL SWAPBOUNDS(dela_dyn,ICOL_CYC,JMT,O_EW_HALO,O_NS_HALO,1) ORH5F403.259
IF (sf_delhi_diff) ORH5F403.260
&CALL SWAPBOUNDS(delhi_diff,ICOL_CYC,JMT,O_EW_HALO,O_NS_HALO,1) ORH5F403.261
if (sf_ddt_aice_dyn) call swapbounds
(ddt_aice_dyn OJG1F405.112
&,ICOL_CYC,JMT,O_EW_HALO,O_NS_HALO,1) OJG1F405.113
if (sf_ddt_hice_dyn) call swapbounds
(ddt_hice_dyn OJG1F405.114
&,ICOL_CYC,JMT,O_EW_HALO,O_NS_HALO,1) OJG1F405.115
if (sf_ddt_snow_dyn) call swapbounds
(ddt_snow_dyn OJG1F405.116
&,ICOL_CYC,JMT,O_EW_HALO,O_NS_HALO,1) OJG1F405.117
if (sf_ddt_hice_diff) call swapbounds
(ddt_hice_diff OJG1F405.118
&,ICOL_CYC,JMT,O_EW_HALO,O_NS_HALO,1) OJG1F405.119
*ENDIF ORH5F403.262
return ICEDRIFT.453
end ICEDRIFT.454
*ENDIF ICEDRIFT.455