*IF DEF,OCEAN UDG7F400.271
CLL Subroutine ICE_CTL ------------------------------------------------ ICE_CTL.3
C ******************************COPYRIGHT****************************** GTS2F400.4375
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved. GTS2F400.4376
C GTS2F400.4377
C Use, duplication or disclosure of this code is subject to the GTS2F400.4378
C restrictions as set forth in the contract. GTS2F400.4379
C GTS2F400.4380
C Meteorological Office GTS2F400.4381
C London Road GTS2F400.4382
C BRACKNELL GTS2F400.4383
C Berkshire UK GTS2F400.4384
C RG12 2SZ GTS2F400.4385
C GTS2F400.4386
C If no contract has been raised with this copy of the code, the use, GTS2F400.4387
C duplication or disclosure of it is strictly prohibited. Permission GTS2F400.4388
C to do so must first be obtained in writing from the Head of Numerical GTS2F400.4389
C Modelling at the above address. GTS2F400.4390
C ******************************COPYRIGHT****************************** GTS2F400.4391
C GTS2F400.4392
CLL ICE_CTL.4
CLL Level 2 control routine ICE_CTL.5
CLL ICE_CTL.6
CLL version for CRAY YMP ICE_CTL.7
CLL written by S. Ineson ICE_CTL.8
CLL ICE_CTL.9
CLL code reviewed by : ICE_CTL.10
CLL ICE_CTL.11
CLL version number 1.1 dated 27/01/93 ICE_CTL.12
CLL revised by: C.Cooper ICE_CTL.13
CLL Uses the arrays set up in SET_CONSTANTS_OCEAN for ice- ICE_CTL.14
CLL ocean heat flux and maximum ice concentrations. ICE_CTL.15
CLL 3.4 04/08/94 Remove ice flux correction and split sea ice OJT0F304.16
CLL haney forcing from SST/SSS haney forcing. (JFT) OJT0F304.17
CLL 3.4 22/08/94 C.G.Sherlock OCS1F304.113
CLL Zero ice conc. over land (but OCS1F304.114
CLL not the polar island) on first time step. Delete OCS1F304.115
CLL unnecessary wraparound code. OCS1F304.116
CLL Pass coriolis array to ICE_DYN if on rotated grid. OCS1F304.117
CLL 4.0 7.7.95 J.M.Gregory Add diagnostic for HTN where icy OJG4F400.1
! 3.5 16.01.95 Remove *IF dependency. R.Hill ORH1F305.5649
CLL 3.5 05/06/95 Chgs to SI array. RTHBarnes GRB4F305.203
CLL 4.0 27/03/95 C.Cooper OCC0F400.54
CCL Pass variables defined in UMSCALAR through subroutine call OCC0F400.55
CCL rather than setting in routines. OCC0F400.56
CLL 4.0 Remove redundant variables and tidy code. J.Crossley OJC3F400.3
CLL 4.0 Change CARYSALT from increment to rate. J.F.Crossley OJC0F400.14
CLL 4.0 Move initial enforcement of max ice fraction and OJC2F400.16
CLL zeroing of ice fraction at land points to new deck OJC2F400.17
CLL INITOI1A. Add arrays ICEHEATFLUX and ICESNOWRATE which OJC2F400.18
CLL ensure consistent coupling with the ocean for models OJC2F400.19
CLL with ice dynamics. J.F.Crossley OJC2F400.20
! 4.0 23/08/95 Place routine within *IF OCEAN dependency so UDG7F400.272
! that it won't be included when recnfiguration UDG7F400.273
! is built. UDG7F400.274
CLL 4.5 J M Gregory Rate diagnostics corresponding to increments OJG1F405.1
! Author D.M. Goddard UDG7F400.275
! 4.5 10/08/97 Changes to include free drift ice code ODC1F405.248
! New names for dynamic ice control logicals ODC1F405.249
! C. Sherlock ODC1F405.250
CLL programming standard : ICE_CTL.16
CLL system components covered : ICE_CTL.17
CLL system task : ICE_CTL.18
CLL ICE_CTL.19
CLL ICE_CTL.20
CLL ICE_CTL.21
CLL ICE_CTL.22
CLL Documentation : ICE_CTL.23
CLL ICE_CTL.24
CLL ICE_CTL.25
CLLEND ----------------------------------------------------------------- ICE_CTL.26
C*L Arguments ICE_CTL.27
ICE_CTL.28
SUBROUTINE ICE_CTL( 1,24@DYALLOC.4693
*CALL ARGSIZE
@DYALLOC.4694
*CALL ARGD1
@DYALLOC.4695
*CALL ARGDUMA
JT161193.108
*CALL ARGDUMO
@DYALLOC.4696
*CALL ARGDUMW
GKR1F401.209
*CALL ARGSTS
@DYALLOC.4697
*CALL ARGOCALL
@DYALLOC.4700
*CALL ARGPPX
GKR0F305.935
*CALL ARGOINDX
ORH7F402.107
* ICODE,CMESSAGE ! ############################################### @DYALLOC.4701
ICE_CTL.30
C INOUT: primary variables ICE_CTL.31
ICE_CTL.32
& ,HSNOW,AICE,HICE ICE_CTL.33
& ,UICE,VICE OJC3F400.4
ICE_CTL.34
C OUT: arrays for interfacing between ocean (section 30) and ICE_CTL.35
C ice thermodynamics (section 32) ICE_CTL.36
ICE_CTL.37
&,CARYSALT,CARYHEAT,FLXTOICE ICE_CTL.38
& ,ISX,ISY OJC3F400.5
ICE_CTL.39
C IN: ancillary fields ICE_CTL.40
ICE_CTL.41
&,HEATFLUX_c,SOLARFLX_c ORH1F305.5652
&,SNOWRATE,SUBLIM ICE_CTL.47
&,TOPMELT_c,BOTMELT_c ORH1F305.5653
&,SOLICE,TAIRDATA ICE_CTL.53
&,anomiceh ICE_CTL.56
&,WSX_ICE,WSY_ICE JT161193.118
ICE_CTL.62
C IN: arrays for interfacing between ocean (section 30) ICE_CTL.63
C and ice thermodynamics (section 32) ICE_CTL.64
ICE_CTL.65
&,SURFTEMP, SURFSAL,NEWICE,ICY ICE_CTL.66
&,ICEHEATFLUX,ICESNOWRATE OJC2F400.21
&,UCURRENT,VCURRENT JT161193.121
ICE_CTL.68
C IN: pointers and stashflags to diagnostics ICE_CTL.69
ICE_CTL.70
&,SI201_32 @DYALLOC.4702
&,SF201_32 @DYALLOC.4703
ICE_CTL.73
C IN: STASH_MAXLEN for dimensioning stash workspace JT161193.123
ICE_CTL.76
&,sw_len32 ICE_CTL.77
ICE_CTL.78
& ) ICE_CTL.79
ICE_CTL.80
ICE_CTL.81
IMPLICIT NONE ODC1F405.251
*CALL CNTLOCN
ORH1F305.5654
*CALL OARRYSIZ
ORH1F305.5655
*CALL OTIMER
ORH1F305.5656
ICE_CTL.83
INTEGER ICE_CTL.84
& SI201_32 ICE_CTL.85
&,ICODE ICE_CTL.86
&,sw_len32 ICE_CTL.87
ICE_CTL.88
CHARACTER*(80) ORH6F401.83
& CMESSAGE ICE_CTL.90
ICE_CTL.91
REAL ICE_CTL.92
& STASHWORK(sw_len32) ICE_CTL.93
ICE_CTL.94
LOGICAL ICE_CTL.95
& SF201_32 ICE_CTL.96
ICE_CTL.97
*CALL CSUBMODL
GRB4F305.204
*CALL CMAXSIZE
JT161193.124
*CALL TYPSIZE
@DYALLOC.4704
*CALL TYPD1
@DYALLOC.4705
*CALL TYPDUMA
JT161193.125
*CALL TYPDUMO
@DYALLOC.4706
*CALL TYPDUMW
GKR1F401.210
*CALL TYPSTS
@DYALLOC.4707
*CALL UMSCALAR
ICE_CTL.99
*CALL C_MDI
JT301193.1
*CALL TYPOINDX
PXORDER.22
*CALL TYPOCALL
@DYALLOC.4710
*CALL PPXLOOK
GKR0F305.936
ICE_CTL.102
C Variables for icefloe declared ICE_CTL.103
ICE_CTL.104
REAL ICE_CTL.105
& SNOWRATE(IMT_ICE,JMT_ICE) ! IN RATE OF SNOWFALL, KG M-2 S-1 ORH1F305.5657
&,HEATFLUX_C(IMT_ICE,JMT_ICE) ! IN NET NON-PENETRATIVE OJC3F400.6
& ! HEAT FLUX OVER LEADS. ORH1F305.5659
&,SOLARFLX_C(IMT_ICE,JMT_ICE) ! IN NET NON-PENETRATIVE OJC3F400.7
& ! SOL FLUX OVER LEADS. ORH1F305.5661
&,SUBLIM(IMT_ICE,JMT_ICE) ! IN RATE OF SUBLIMATION, KG M-2 S-1 ORH1F305.5662
&,TOPMELT_C(IMT_ICE_ICP,JMT_ICE_ICP) ! IN SNOW MELTING RATE W M-2. ORH1F305.5663
& ! (THIS CAN BE TRANSFERRED TO ICE.) ORH1F305.5664
&,BOTMELT_C(IMT_ICE_ICP,JMT_ICE_ICP) ! IN DIFFUSIVE HEAT FLUX ORH1F305.5665
& ! THROUGH ICE. IF THIS IS +VE, ICE MELTS AT THE BASE. ORH1F305.5666
& ! IF IT IS -VE, ICE ACCRETES THERE. ORH1F305.5667
&,SURFTEMP(IMT_ICE,JMT_ICE) ! IN TEMPRTURE OF TOP LAYER OF ORH1F305.5668
& ! OCEAN AT THE START OF THE STEP. ORH1F305.5669
&,SURFSAL(IMT_ICE,JMT_ICE) ! IN TRUE SALINITY OF TOP LAYER OF ORH1F305.5670
& ! OCEAN AT THE START OF THE STEP. ORH1F305.5671
& ! (NB DOES NOT HAVE 0.035 SUBTRACTED.) ORH1F305.5672
&,UCURRENT(imt_drsa,jmt_drsa) ! IN ZONAL COMP OF SFC VELOCITY ODC1F405.252
&,VCURRENT(imt_drsa,jmt_drsa) ! IN MERIDIONAL COMP OF SFC VELOCITY ODC1F405.253
&,WSX_ICE(imt_idr,jmt_idr) ! IN ZONAL COMPONENT OF WIND STRESS. ODC1F405.254
&,WSY_ICE(imt_idr,jmt_idr) ! IN MERIDIONAL COMPONENT OF " " ODC1F405.255
&,SOLICE(*) ! IN SOLAR RADIATION OVER SEA ICE ORH1F305.5677
& ! USED TO CALCULATE TOPMELT AND BOTMELT ORH1F305.5678
& ! IN PSEUDAIR FOR ICEFLOE ORH1F305.5679
&,TAIRDATA(*) ! IN CLIMATOLOGICAL SURFACE AIR TEMPERATURE ORH1F305.5680
& ! REQUIRED BY PSEUDAIR. ORH1F305.5681
&,ANOMICEH(*) ! IN ANOMALOUS ICE HEAT FLUX W M-2. ORH1F305.5682
ICE_CTL.147
REAL DT, ! IN TRACER TIMESTEP. ICE_CTL.148
& RHOCP ! IN Volumetric heat capacity of sea-water RH141293.140
! in J/(K*M**3) RH141293.141
REAL OJC2F400.22
& ICEHEATFLUX(IMT_ICE,JMT_ICE) ! IN HTN into ice budget OJC2F400.23
&,ICESNOWRATE(IMT_ICE,JMT_ICE) ! IN snowrate over ice OJC2F400.24
LOGICAL NEWICE(IMT,JMT) ! IN TRUE IF BOX WAS PREVIOUSLY FREE ICE_CTL.162
& ! OF ICE, BUT ICE FORMS DURING STEP. ICE_CTL.163
ICE_CTL.164
LOGICAL ICY(IMT,JMT) ! INOUT TRUE IF BOX CONTAINS ICE. ICE_CTL.165
REAL AICE(IMT,JMT), ! INOUT ICE CONCENTRATION. ICE_CTL.166
& HICE(IMT,JMT), ! INOUT MEAN ICE DEPTH OVER WHOLE GRID BOX. ICE_CTL.167
& HSNOW(IMT,JMT), ! INOUT SNOW DEPTH, NOT AVERAGED OVER GRID ICE_CTL.168
& ! BOX, JUST OVER THE ICE PORTION. ICE_CTL.169
& CARYHEAT(IMT,JMT), ! INOUT LATENT HEAT FLUX REQUIRED BY OCEAN ICE_CTL.170
& ! TO MAINTAIN LEVEL 1 TEMPS AT -1.8C (W/M2) ICE_CTL.171
& FLXTOICE(IMT,JMT) ! INOUT OCEAN TO ICE HEAT FLUX. (W/M2) ICE_CTL.172
&,UICE(IMT_idr,JMTM1_idr)! INOUT ZONAL COMP OF ICE VELOCITY. ODC1F405.256
&,VICE(IMT_idr,JMTM1_idr)! INOUT MERIDIONAL COMP OF ICE VELOCITY. ODC1F405.257
ICE_CTL.173
C Note flxtoice is called oceanflx in icefloe. ICE_CTL.174
REAL ICE_CTL.175
& CARYSALT(*) ! OUT RATE OF SALINITY INCREASE DUE TO OJC0F400.15
& ! ICE/SNOW PROCESSES. ICE_CTL.177
&,ISX(IMT_idr,JMTM1_idr) ! INOUT ZONAL COMP OF ICE-ocean stress ODC1F405.258
&,ISY(IMT_idr,JMTM1_idr) ! INOUT MERIDIONAL COMP OF ICE-ocn stress ODC1F405.259
INTEGER I,J ! Loop counting. ICE_CTL.180
INTEGER K ! Number of levels OJC2F400.26
INTEGER isubmodel ! SUBMODEL IDENTIFIER FOR CALL TO STASH JT161193.148
INTEGER IM_IDENT ! internal model identifier GRB4F305.205
INTEGER IM_INDEX ! internal model index for STASH arrays GRB4F305.206
C JT161193.151
C Local variables used by ice dynamics OJC3F400.12
C JT161193.153
REAL JT161193.154
& DPHI(JMT_drsa) ! ZONAL GRID SPACING IN RADIANS ODC1F405.260
&,DLAMBDA(IMT_drsa) ! MERIDIONAL GRID SPACING IN RADIANS ODC1F405.261
&,RADIUS_SI ! RADIUS OF EARTH IN METRES. OJC3F400.15
&,twaterx(imt_idr,jmtm1_idr) ! ocean to ice stress for STASH ODC1F405.262
&,twatery(imt_idr,jmtm1_idr) ! ocean to ice stress for STASH ODC1F405.263
&,mfx(imt_idr,jmtm1_idr) ! coriolis stress for STASH ODC1F405.264
&,mfy(imt_idr,jmtm1_idr) ! coriolis stress for STASH ODC1F405.265
&,inisx(imt_idr,jmtm1_idr) ! x-cpt internal ice stress ODC1F405.266
&,inisy(imt_idr,jmtm1_idr) ! y-cpt internal ice stress ODC1F405.267
ORH1F305.5699
LOGICAL ORH1F305.5700
& OCEAN(IMT_ICE,JMT_ICE) ! TRUE IF FKMP > 0.1 OJC2F400.25
&,OCEAN_UV(IMT_IDR,JMTM1_IDR) ! TRUE IF FKMQ > 0.1 ODC1F405.268
c Local variables calculated by PSEUDAIR in uncoupled runs. ICE_CTL.186
ICE_CTL.187
REAL ICE_CTL.188
& TOPMELT(IMT,JMT) ! RATE OF MELTING OF SNOW IN W M-2. ICE_CTL.189
& ! (THIS CAN BE TRANSFERRED TO ICE.) ICE_CTL.190
&,BOTMELT(IMT,JMT) ! DIFFUSIVE HEAT FLUX THROUGH ICE. IF ICE_CTL.191
& ! THIS IS +VE, ICE MELTS AT THE BASE. ICE_CTL.192
& ! IF IT IS -VE, ICE ACCRETES THERE. ICE_CTL.193
&,HEATFLUX(IMT,JMT) ! IN NET NON-PENETRATIVE HEAT FLUX ICE_CTL.194
& ! OVER LEADS. ICE_CTL.195
&,SOLARFLX(IMT,JMT) ! IN NET PENETRATIVE HEAT FLUX OVER LEADS. ICE_CTL.196
ICE_CTL.197
! Local variables for ice dynamics ODC1F405.269
ICE_CTL.200
REAL ODC1F405.270
& uice_local(imt_ice,jmtm1_ice) ODC1F405.271
&,vice_local(imt_ice,jmtm1_ice) ODC1F405.272
C OJG3F403.13
C Local array for calculation of GBM snowdepth diagnostic OJG3F403.14
C OJG3F403.15
real gbmhsnow(imt_ice,jmt_ice) OJG3F403.16
*IF DEF,SEAICE ORH1F305.451
C External subroutines called ICE_CTL.201
ICE_CTL.202
EXTERNAL ICE_CTL.203
& ICEFLOE ICE_CTL.204
& ,PSEUDAIR ICE_CTL.207
& ,ICEFREEDR ODC1F405.273
& ,STASH ICE_CTL.210
& ,TIMER ICE_CTL.213
& ,ICEDRIFT ODC1F405.274
ICE_CTL.216
ICE_CTL.217
ICODE=0 ICE_CTL.218
CMESSAGE=' ' ICE_CTL.219
ORH4F402.134
C Set up internal model identifier and STASH index GRB4F305.207
isubmodel = ocean_im GRB4F305.208
im_ident = ocean_im GRB4F305.209
im_index = internal_model_index(im_ident) GRB4F305.210
ICE_CTL.220
IF (L_OICECOUP) THEN ORH1F305.5735
DO J = J_1, J_JMT ORH3F402.76
DO I = 1, IMT ORH1F305.5737
HEATFLUX(I,J) = HEATFLUX_C(I,J) ORH1F305.5738
SOLARFLX(I,J) = SOLARFLX_C(I,J) ORH1F305.5739
TOPMELT(I,J) = TOPMELT_C(I,J) ORH1F305.5740
BOTMELT(I,J) = BOTMELT_C(I,J) ORH1F305.5741
ENDDO ORH1F305.5742
ENDDO ORH1F305.5743
ENDIF ! ORH1F305.5744
ORH1F305.5745
CL Section 32: Thermodynamic ice model. ICE_CTL.221
ICE_CTL.222
C CALCULATE VOLUMETRIC HEAT CAPACITY OF SEAWATER FOR ICEFLOE ICE_CTL.223
C AND PSEUDAIR FROM CONSTANTS IN UMSCALAR. ICE_CTL.224
ICE_CTL.225
RHOCP = RHO_WATER_SI * SPECIFIC_HEAT_SI ICE_CTL.226
C ICE_CTL.242
C FILL STASH WORKSPACE WITH MISSING DATA INDICATORS JT301193.19
C JT301193.20
DO I=1,sw_len32 JT301193.21
STASHWORK(I) = RMDI JT301193.22
END DO JT301193.23
C OJC2F400.27
C Initialise logical mask for use in copying diagnostics to stash space OJC2F400.28
! The following loop must run from 1 to JMT not J_1 to J_JMT ORH5F403.305
! because STASH needs all halo values. ORH5F403.306
! Since we cover the entire array, including halos, no ORH5F404.4
! subsequent swapbounds call is required for the array OCEAN. ORH5F404.5
DO J = 1, JMT ORH5F403.307
do i=1,imt OJC2F400.30
ocean(i,j) = (fkmp(i,j).gt.0.1) OJC2F400.31
end do OJC2F400.32
end do OJC2F400.33
IF (L_ICEFREEDR) THEN ODC1F405.275
! The following loop runs from 1 to JMTM1 not J_1 to ODC1F405.276
! J_JMTM1 because STASH needs all halo values and doing ODC1F405.277
! things this way means we dont need a subsequent ODC1F405.278
! SWAPBOUNDS call for OCEAN_UV. ODC1F405.279
DO J=1,JMTM1 ODC1F405.280
DO I=1,IMT ODC1F405.281
ocean_uv(i,j) = (fkmq(i,j).gt.0.1) ODC1F405.282
ENDDO ODC1F405.283
ENDDO ODC1F405.284
ENDIF ODC1F405.285
ORH5F404.6
IF (L_ICESIMPLE.OR.L_ICEFREEDR) THEN ODC1F405.286
C JT161193.167
C CALCULATE GRID SPACINGS IN RADIANS FOR USE BY ICE DYNAMICS JT161193.168
C JT161193.169
DO J = J_2, J_JMTM1 ORH3F402.78
DPHI(J) = DYT(J)/RADIUS JT161193.171
END DO JT161193.172
*IF DEF,MPP ORH3F402.79
ORH3F402.80
CALL SWAPBOUNDS
(DPHI,1,JMT,O_EW_HALO,O_NS_HALO,1) ORH3F402.81
ORH3F402.82
! Only done by process handling the 1st row ORH3F402.83
IF (JST.EQ.1) THEN ORH3F402.84
DPHI(J_1)=DPHI(J_1+1) ORH3F402.85
ENDIF ORH3F402.86
ORH3F402.87
! Only done by process handling last row ORH3F402.88
IF (JFIN.EQ.JMT_GLOBAL) THEN ORH3F402.89
DPHI(J_JMT)=DPHI(J_JMT - 1) ORH3F402.90
ENDIF ORH3F402.91
ORH3F402.92
CALL SWAPBOUNDS
(DPHI,1,JMT,O_EW_HALO,O_NS_HALO,1) ORH3F402.93
ORH3F402.94
*ELSE ORH3F402.95
DPHI(1)=DPHI(2) JT161193.173
DPHI(JMT)=DPHI(JMTM1) JT161193.174
*ENDIF ORH3F402.96
C JT161193.175
DO I=2,IMTM1 JT161193.176
DLAMBDA(I) = DXT(I)/RADIUS JT161193.177
END DO JT161193.178
DLAMBDA(1)=DLAMBDA(IMTM1) JT161193.179
DLAMBDA(IMT)=DLAMBDA(2) JT161193.180
C JT161193.181
C CONVERT RADIUS OF EARTH FROM CM TO M. JT161193.182
C JT161193.183
RADIUS_SI = RADIUS / 100. JT161193.184
C JT161193.185
ENDIF ORH1F305.5705
C OJG4F400.2
C HTN when applied to ice OJG4F400.3
C OJG4F400.4
*IF DEF,MPP ORH5F404.1
CALL SWAPBOUNDS
(ICY,IMT,JMT,O_EW_HALO,O_NS_HALO,1) ORH5F404.2
*ENDIF ORH5F404.3
IF (SF(217,32)) THEN ORH5F403.322
CALL COPYODIAGL
(IMT,JMT,1,.FALSE.,0. ORH5F403.326
&,HEATFLUX,ICY,STASHWORK(SI(217,32,im_index))) OJG4F400.6
ENDIF ORH5F403.327
ORH5F403.328
ORH1F305.5706
IF (.NOT.(L_OICECOUP)) THEN ORH1F305.5707
ORH1F305.5708
IF (L_OTIMER) CALL TIMER
('PSEUDAIR ',3) ORH1F305.5709
C -------------------------------------------------------------------- OJC3F400.16
C Call pseudo atmosphere routine to calculate surface fluxes in some OJC3F400.17
C ocean only experiments. OJC3F400.18
OJC3F400.19
CALL PSEUDAIR
( ORH7F402.109
*CALL ARGOINDX
ORH7F402.110
& ICY,AICE,HICE,HSNOW,SOLICE,TAIRDATA, ORH7F402.111
+ TOPMELT,BOTMELT,ICEHEATFLUX,SOLARFLX,TFREEZE,RHOCP,IMT,JMT) OJC3F400.21
OJC3F400.22
IF (L_OTIMER) CALL TIMER
('PSEUDAIR ',4) ORH1F305.5710
ORH1F305.5711
ENDIF ORH1F305.5712
ORH1F305.5713
IF (L_ICEFREEDR) THEN ODC1F405.287
ORH1F305.5715
IF (L_OTIMER) CALL TIMER
('ICEFREEDR',3) ODC1F405.288
ORH1F305.5717
C JT161193.193
CALL ICEFREEDR
( ODC1F405.289
*CALL ARGOINDX
ODC1F405.290
& imt,imtm1,imtm2,jmt,jmtm1,jmtm2, ODC1F405.291
& rhoice,rho_water_si,rhosnow, ODC1F405.292
& quad_ice_drag,hicestop,hiceslow, ODC1F405.293
& coriolis, ODC1F405.294
& icy,ocean,aice,hice,hsnow, ODC1F405.295
& ucurrent,vcurrent, ODC1F405.296
& wsx_ice,wsy_ice, ODC1F405.297
& uice_local,vice_local, ODC1F405.298
& isx,isy, ODC1F405.299
& twaterx,twatery, ODC1F405.300
& mfx,mfy, ODC1F405.301
& inisx,inisy, ODC1F405.302
& radius,dphi,dlambda,phit ODC1F405.303
& ) ODC1F405.304
C JT161193.208
IF (L_OTIMER) CALL TIMER
('ICEFREEDR',4) ODC1F405.305
! Copy and mask diagnostics ODC1F405.306
IF (SF(219,32)) CALL COPYODIAGL
(IMT,JMTM1,1,.TRUE.,0. ODC1F405.307
& ,twaterx,ocean_uv,STASHWORK(SI(219,32,im_index))) ODC1F405.308
ODC1F405.309
IF (SF(220,32)) CALL COPYODIAGL
(IMT,JMTM1,1,.TRUE.,0. ODC1F405.310
& ,twatery,ocean_uv,STASHWORK(SI(220,32,im_index))) ODC1F405.311
ODC1F405.312
IF (SF(221,32)) CALL COPYODIAGL
(IMT,JMTM1,1,.TRUE.,0. ODC1F405.313
& ,mfx,ocean_uv,STASHWORK(SI(221,32,im_index))) ODC1F405.314
ODC1F405.315
IF (SF(222,32)) CALL COPYODIAGL
(IMT,JMTM1,1,.TRUE.,0. ODC1F405.316
& ,mfy,ocean_uv,STASHWORK(SI(222,32,im_index))) ODC1F405.317
ODC1F405.318
IF (SF(230,32)) CALL COPYODIAGL
(IMT,JMTM1,1,.TRUE.,0. ODC1F405.319
& ,inisx,ocean_uv,STASHWORK(SI(230,32,im_index))) ODC1F405.320
ODC1F405.321
IF (SF(231,32)) CALL COPYODIAGL
(IMT,JMTM1,1,.TRUE.,0. ODC1F405.322
& ,inisy,ocean_uv,STASHWORK(SI(231,32,im_index))) ODC1F405.323
ORH1F305.5720
ENDIF ! L_ICEFREEDR = true ODC1F405.324
ORH1F305.5722
IF (L_ICESIMPLE) THEN ODC1F405.325
ORH1F305.5724
DO J=J_1,J_JMTM1 ODC1F405.326
DO i=1,imt ODC1F405.327
uice_local(i,j) = ucurrent(i,j) ODC1F405.328
vice_local(i,j) = vcurrent(i,j) ODC1F405.329
ENDDO ODC1F405.330
ENDDO ODC1F405.331
ENDIF ! L_ICESIMPLE ODC1F405.332
IF (L_ICESIMPLE.OR.L_ICEFREEDR) THEN ODC1F405.333
IF (L_OTIMER) CALL TIMER
('ICEDRIFT',3) ODC1F405.334
C JT301193.28
CALL ICEDRIFT
( ODC1F405.335
*CALL ARGOINDX
ODC1F405.336
& AICE,HICE,HSNOW,UICE_local,VICE_local,ICY,NEWICE ODC1F405.337
&,OCEAN,IMT,IMTM1,IMTM2,JMT,JMTM1,KM,FKMP ORH3F405.91
&,PHI,PHIT,AICEMIN,AMX,HICEMIN,ah_ice,DPHI,DLAMBDA ORH3F405.93
+,DTTS JT301193.35
+,CS,CSTR,DYUR,DYTR,DXU2R,DXT4R JT301193.36
&,RADIUS_SI ODC1F405.338
+,STASHWORK(SI(202,32,im_index)),STASHWORK(SI(203,32,im_index)) GRB4F305.215
+,STASHWORK(SI(209,32,im_index)),STASHWORK(SI(210,32,im_index)) GRB4F305.216
+,STASHWORK(SI(201,32,im_index)),STASHWORK(SI(204,32,im_index)) GRB4F305.217
+,SF(202,32),SF(203,32),SF(209,32),SF(210,32) JT301193.41
+,SF(201,32),SF(204,32) JT301193.42
&,stashwork(si(223,32,im_index)),stashwork(si(224,32,im_index)) OJG1F405.2
&,stashwork(si(225,32,im_index)),stashwork(si(226,32,im_index)) OJG1F405.3
&,sf(223,32),sf(224,32),sf(225,32),sf(226,32) OJG1F405.4
+ ) JT301193.43
C JT301193.44
IF (L_OTIMER) CALL TIMER
('ICEDRIFT',4) ODC1F405.339
ORH1F305.5727
ENDIF ! L_ICESIMPLE or L_ICEFREEDR ODC1F405.340
ORH1F305.5729
IF (L_OTIMER) CALL TIMER
('ICEFLOE ',3) ORH1F305.5730
ORH1F305.5731
CALL ICEFLOE
( ORH7F402.114
*CALL ARGOINDX
ORH7F402.115
& ICY,NEWICE, ORH7F402.116
+ ICEHEATFLUX,SOLARFLX, OJC2F400.35
+ HICE,HSNOW, ICE_CTL.264
+ ICESNOWRATE,SUBLIM,AICE,FLXTOICE,CARYHEAT,CARYSALT,TOPMELT, OJC2F400.36
+ BOTMELT,SURFSAL,SURFTEMP, ICE_CTL.266
+ anomiceh, ICE_CTL.269
+ FKMP, ICE_CTL.275
+ STASHWORK(SI(211,32,im_index)),STASHWORK(SI(212,32,im_index)), GRB4F305.218
+ STASHWORK(SI(213,32,im_index)), GRB4F305.219
& stashwork(si(227,32,im_index)),stashwork(si(228,32,im_index)) OJG1F405.5
&,stashwork(si(229,32,im_index)), OJG1F405.6
+ SF(211,32),SF(212,32),SF(213,32), JT161193.215
& sf(227,32),sf(228,32),sf(229,32), OJG1F405.7
+ H0,AMX,AICEMIN,HICEMIN,RHOICE,RHOSNOW,RHOWATER, OCC0F400.65
& IMT,IMTM1,JMT,DTTS,DZ(1) ORH3F405.92
+,RHOCP,TFREEZE,EDDYDIFF,SALICE,QFUSION JT161193.220
+,AICEMIZFRY ODC1F405.341
+ ,salref) OJL1F405.73
ORH1F305.5732
IF (L_OTIMER) CALL TIMER
('ICEFLOE ',4) ORH1F305.5733
ORH1F305.5734
K=1 OJC2F400.37
IF (SF(214,32)) OJC2F400.38
&CALL COPYODIAGL(IMT,JMT,K,.TRUE.,0. OJC2F400.39
& ,ICEHEATFLUX,OCEAN,STASHWORK(SI(214,32,im_index))) OJC2F400.40
IF (SF(215,32)) OJC2F400.41
&CALL COPYODIAGL(IMT,JMT,K,.TRUE.,0. OJC2F400.42
& ,ICESNOWRATE,OCEAN,STASHWORK(SI(215,32,im_index))) OJC2F400.43
IF (SF(216,32)) OJC2F400.44
&CALL COPYODIAGL(IMT,JMT,K,.TRUE.,0. OJC2F400.45
& ,SURFTEMP,OCEAN,STASHWORK(SI(216,32,im_index))) OJC2F400.46
C OJG3F403.17
C Calculate GBM snowdepth, if requested OJG3F403.18
C OJG3F403.19
if (sf(218,32)) then OJG3F403.20
do j=j_1,j_jmt OJG3F403.21
do i=1,imt_ice OJG3F403.22
if (ocean(i,j)) gbmhsnow(i,j)=aice(i,j)*hsnow(i,j) OJG3F403.23
enddo OJG3F403.24
enddo OJG3F403.25
call copyodiagl
(imt_ice,jmt_ice,1,.true.,0. OJG3F403.26
& ,gbmhsnow,ocean,stashwork(si(218,32,im_index))) OJG3F403.27
endif OJG3F403.28
ICE_CTL.283
CALL STASH
(isubmodel,im_ident,32,STASHWORK, GKR0F305.937
*CALL ARGSIZE
JT161193.223
*CALL ARGD1
JT161193.224
*CALL ARGDUMA
JT161193.225
*CALL ARGDUMO
JT161193.226
*CALL ARGDUMW
GKR1F401.211
*CALL ARGSTS
JT161193.227
*CALL ARGPPX
GKR0F305.938
& ICODE,CMESSAGE) JT161193.231
ICE_CTL.284
IF (L_OICECOUP) THEN ORH1F305.5760
DO J = J_1, J_JMT ORH3F402.97
DO I = 1, IMT ORH1F305.5762
HEATFLUX_C(I,J) = HEATFLUX(I,J) ORH1F305.5763
SOLARFLX_C(I,J) = SOLARFLX(I,J) ORH1F305.5764
TOPMELT_C(I,J) = TOPMELT(I,J) ORH1F305.5765
BOTMELT_C(I,J) = BOTMELT(I,J) ORH1F305.5766
ENDDO ORH1F305.5767
ENDDO ORH1F305.5768
ENDIF ! ORH1F305.5769
ORH1F305.5770
ICE_CTL.285
*ENDIF ORH1F305.452
RETURN ICE_CTL.286
END ICE_CTL.287
*ENDIF UDG7F400.276