/[MITgcm]/MITgcm/pkg/seaice/seaice_init_fixed.F
ViewVC logotype

Contents of /MITgcm/pkg/seaice/seaice_init_fixed.F

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.30 - (show annotations) (download)
Sat Aug 23 20:22:16 2014 UTC (9 years, 9 months ago) by torge
Branch: MAIN
CVS Tags: checkpoint66g, checkpoint66f, checkpoint66e, checkpoint66d, checkpoint66c, checkpoint66b, checkpoint66a, checkpoint66o, checkpoint66n, checkpoint66m, checkpoint66l, checkpoint66k, checkpoint66j, checkpoint66i, checkpoint66h, checkpoint65z, checkpoint65x, checkpoint65y, checkpoint65r, checkpoint65s, checkpoint65p, checkpoint65q, checkpoint65v, checkpoint65w, checkpoint65t, checkpoint65u, checkpoint65j, checkpoint65k, checkpoint65h, checkpoint65i, checkpoint65n, checkpoint65o, checkpoint65l, checkpoint65m, checkpoint65c, checkpoint65f, checkpoint65g, checkpoint65d, checkpoint65e, HEAD
Changes since 1.29: +14 -2 lines
Introducing a new parameterization for grease ice,
 i.e. newly formed sea ice in open water:

What it does:
 The grease ice parameterization delays formation of solid
 sea ice from frazil ice by a time constant and provides a
 dynamic calculation of the initial solid sea ice thickness
 HO as a function of winds, currents and available grease ice
 volume. Grease ice does not significantly reduce heat loss
 from the ocean in winter and area covered by grease is thus
 handled like open water.
 (for details see Smedsrud and Martin, 2014, Ann.Glac.)

How to use:
- enable SEAICE_GREASE in SEAICE_OPTIONS.h
- set SItrName(1) = 'grease' in namelist SEAICE_PARM03 in data.seaice
  then output SItr01 is SItrNameLong(1) = 'grease ice volume fraction',
  with SItrUnit(1) = '[0-1]', which needs to be multiplied by SIheff
  to yield grease ice volume.
- additionally, the actual grease ice layer thickness
  (diagnostic SIgrsLT) can be saved.

1 C $Header: /u/gcmpack/MITgcm/pkg/seaice/seaice_init_fixed.F,v 1.29 2014/06/24 21:54:11 jmc Exp $
2 C $Name: $
3
4 #include "SEAICE_OPTIONS.h"
5
6 CStartOfInterface
7 SUBROUTINE SEAICE_INIT_FIXED( myThid )
8 C *==========================================================*
9 C | SUBROUTINE SEAICE_INIT_FIXED
10 C | o Initialization of sea ice model.
11 C *==========================================================*
12 C *==========================================================*
13 IMPLICIT NONE
14
15 C === Global variables ===
16 #include "SIZE.h"
17 #include "EEPARAMS.h"
18 #include "PARAMS.h"
19 #include "GRID.h"
20 #include "FFIELDS.h"
21 #include "SEAICE_SIZE.h"
22 #include "SEAICE_PARAMS.h"
23 #include "SEAICE.h"
24 #include "SEAICE_TRACER.h"
25
26 C === Routine arguments ===
27 C myThid - Thread no. that called this routine.
28 INTEGER myThid
29 CEndOfInterface
30
31 C === Local variables ===
32 #ifdef SEAICE_ITD
33 C msgBuf :: Informational/error message buffer
34 CHARACTER*(MAX_LEN_MBUF) msgBuf
35 CHARACTER*15 HlimitMsgFormat
36 C k - loop counter for ITD categories
37 INTEGER k
38 _RL tmpVar
39 #endif
40 C i,j, bi,bj :: Loop counters
41 c INTEGER i, j, bi, bj
42 INTEGER kSurface
43 #ifdef ALLOW_SITRACER
44 INTEGER iTracer
45 #endif
46 #ifdef SHORTWAVE_HEATING
47 cif Helper variable for determining the fraction of sw radiation
48 cif penetrating the model shallowest layer
49 _RL dummyTime
50 _RL swfracba(2)
51 _RL tmpFac
52 #endif /* SHORTWAVE_HEATING */
53
54 IF ( buoyancyRelation .EQ. 'OCEANICP' ) THEN
55 kSurface = Nr
56 ELSE
57 kSurface = 1
58 ENDIF
59
60 C Initialize MNC variable information for SEAICE
61 IF ( useMNC .AND.
62 & (seaice_tave_mnc.OR.seaice_dump_mnc.OR.SEAICE_mon_mnc)
63 & ) THEN
64 CALL SEAICE_MNC_INIT( myThid )
65 ENDIF
66
67 C Only Master Thread updates parameter in commom block:
68 _BEGIN_MASTER(myThid)
69
70 C restart parameter
71 SEAICEmomStartBDF = 0
72 IF ( SEAICEuseBDF2 ) SEAICEmomStartBDF = nIter0
73
74 #ifdef SHORTWAVE_HEATING
75 tmpFac = -1.0
76 dummyTime = 1.0
77 swfracba(1) = ABS(rF(1))
78 swfracba(2) = ABS(rF(2))
79 CALL SWFRAC(
80 I 2, tmpFac,
81 U swfracba,
82 I dummyTime, 0, myThid )
83 SWFracB = swfracba(2)
84 #else /* SHORTWAVE_HEATING */
85 SWFracB = 0. _d 0
86 #endif /* SHORTWAVE_HEATING */
87
88 C-- Set mcPheePiston coeff (if still unset)
89 IF ( SEAICE_mcPheePiston.EQ.UNSET_RL ) THEN
90 IF ( SEAICE_availHeatFrac.NE.UNSET_RL ) THEN
91 SEAICE_mcPheePiston = SEAICE_availHeatFrac
92 & * drF(kSurface)/SEAICE_deltaTtherm
93 ELSE
94 SEAICE_mcPheePiston = MCPHEE_TAPER_FAC
95 & * STANTON_NUMBER * USTAR_BASE
96 SEAICE_mcPheePiston = MIN( SEAICE_mcPheePiston,
97 & drF(kSurface)/SEAICE_deltaTtherm )
98 ENDIF
99 ENDIF
100
101 C-- SItracer specifications for basic tracers
102 #ifdef ALLOW_SITRACER
103 DO iTracer = 1, SItrNumInUse
104 C "ice concentration" tracer that should remain .EQ.1.
105 IF (SItrName(iTracer).EQ.'one') THEN
106 SItrFromOcean0(iTracer) =ONE
107 SItrFromFlood0(iTracer) =ONE
108 SItrExpand0(iTracer) =ONE
109 SItrFromOceanFrac(iTracer) =ZERO
110 SItrFromFloodFrac(iTracer) =ZERO
111 ENDIF
112 C age tracer: no age in ocean, or effect from ice cover changes
113 IF (SItrName(iTracer).EQ.'age') THEN
114 SItrFromOcean0(iTracer) =ZERO
115 SItrFromFlood0(iTracer) =ZERO
116 SItrExpand0(iTracer) =ZERO
117 SItrFromOceanFrac(iTracer) =ZERO
118 SItrFromFloodFrac(iTracer) =ZERO
119 ENDIf
120 C salinity tracer:
121 IF (SItrName(iTracer).EQ.'salinity') THEN
122 SItrMate(iTracer) ='HEFF'
123 SItrExpand0(iTracer) =ZERO
124 IF ( SEAICE_salinityTracer ) THEN
125 SEAICE_salt0 = ZERO
126 SEAICE_saltFrac = ZERO
127 ENDIF
128 ENDIF
129 C simple, made up, ice surface roughness index prototype
130 IF (SItrName(iTracer).EQ.'ridge') THEN
131 SItrMate(iTracer) ='AREA'
132 SItrFromOcean0(iTracer) =ZERO
133 SItrFromFlood0(iTracer) =ZERO
134 SItrExpand0(iTracer) =ZERO
135 SItrFromOceanFrac(iTracer) =ZERO
136 SItrFromFloodFrac(iTracer) =ZERO
137 ENDIF
138 #ifdef SEAICE_GREASE
139 C grease ice tracer:
140 c (Smedrud and Martin, 2014, Ann. Glac.)
141 IF (SItrName(iTracer).EQ.'grease') THEN
142 SItrMate(iTracer) ='HEFF'
143 SItrFromOcean0(iTracer) =ZERO
144 SItrFromFlood0(iTracer) =ZERO
145 SItrExpand0(iTracer) =ZERO
146 SItrFromOceanFrac(iTracer) =ZERO
147 SItrFromFloodFrac(iTracer) =ZERO
148 ENDIF
149 #endif /* SEAICE_GREASE */
150 ENDDO
151 #endif /* ALLOW_SITRACER */
152
153 #ifdef SEAICE_ITD
154 C use Equ. 22 of Lipscomb et al. (2001, JGR) to generate ice
155 C thickness category limits:
156 C - dependends on given number of categories nITD
157 C - choose between original parameters of Lipscomb et al. (2001):
158 C c1=3.0/N, c2=15*c1, c3=3.0
159 C or emphasize thin end of ITD (in order to enhance ice growth):
160 C c1=1.5/N, c2=42*c1, c3=3.3
161 C -> HINT: set parameters c1, c2 and c3 in seaice_readparms.F
162 Hlimit(0) = 0. _d 0
163 IF ( nITD.GT.1 ) THEN
164 tmpVar = nITD
165 tmpVar = oneRL / tmpVar
166 Hlimit_c1 = Hlimit_c1*tmpVar
167 Hlimit_c2 = Hlimit_c2*Hlimit_c1
168 DO k=1,nITD-1
169 Hlimit(k) = Hlimit(k-1)
170 & + Hlimit_c1
171 & + Hlimit_c2
172 & *( oneRL + TANH( Hlimit_c3 *( FLOAT(k-1)*tmpVar - oneRL ) ) )
173 ENDDO
174 ENDIF
175 C thickest category is unlimited
176 Hlimit(nITD) = 999.9 _d 0
177
178 WRITE(msgBuf,'(A,I2,A)')
179 & ' SEAICE_INIT_FIXED: ', nITD,
180 & ' sea ice thickness categories'
181 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
182 & SQUEEZE_RIGHT, myThid )
183 WRITE(HlimitMsgFormat,'(A,I2,A)') '(A,',nITD,'F6.2,F6.1)'
184 WRITE(msgBuf,HlimitMsgFormat)
185 & ' SEAICE_INIT_FIXED: Hlimit = ', (Hlimit(k),k=0,nITD)
186 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
187 & SQUEEZE_RIGHT, myThid )
188 #endif /* SEAICE_ITD */
189
190 C Only Master Thread updates parameter in common block:
191 _END_MASTER(myThid)
192
193 #ifdef SEAICE_ALLOW_JFNK
194 C Only Master Thread updates parameter in common block:
195 _BEGIN_MASTER(myThid)
196 C initialise some diagnostic counters for the JFNK solver
197 totalNewtonIters = 0
198 totalNewtonFails = 0
199 totalKrylovIters = 0
200 totalKrylovFails = 0
201 totalJFNKtimeSteps = 0
202 _END_MASTER(myThid)
203 C this cannot be done here, because globalArea is only defined
204 C after S/R PACKAGES_INIT_FIXED, so we move it to S/R SEAICE_INIT_VARIA
205 CML CALL SEAICE_MAP2VEC( nVec, rAw, rAs,
206 CML & scalarProductMetric, .TRUE., myThid )
207 CML DO bj=myByLo(myThid),myByHi(myThid)
208 CML DO bi=myBxLo(myThid),myBxHi(myThid)
209 CML DO i=1,nVec
210 CML scalarProductMetric(i,1,bi,bj) =
211 CML & scalarProductMetric(i,1,bi,bj)/globalArea
212 CML ENDDO
213 CML ENDDO
214 CML ENDDO
215 #endif /* SEAICE_ALLOW_JFNK */
216
217 C-- all threads wait for master to finish initialisation of shared params
218 _BARRIER
219
220 #ifdef ALLOW_DIAGNOSTICS
221 IF ( useDiagnostics ) THEN
222 CALL SEAICE_DIAGNOSTICS_INIT( myThid )
223 ENDIF
224 #endif
225
226 C-- Summarise pkg/seaice configuration
227 CALL SEAICE_SUMMARY( myThid )
228
229 RETURN
230 END

  ViewVC Help
Powered by ViewVC 1.1.22