1 |
heimbach |
1.3 |
C $Header: /u/gcmpack/MITgcm/pkg/seaice/seaice_summary.F,v 1.54 2012/10/22 20:12:56 heimbach Exp $ |
2 |
dimitri |
1.1 |
C $Name: $ |
3 |
|
|
|
4 |
|
|
#include "SEAICE_OPTIONS.h" |
5 |
|
|
|
6 |
|
|
CBOP |
7 |
|
|
C !ROUTINE: SEAICE_SUMMARY |
8 |
|
|
SUBROUTINE SEAICE_SUMMARY( myThid ) |
9 |
|
|
|
10 |
|
|
C !DESCRIPTION: |
11 |
|
|
C *==========================================================* |
12 |
|
|
C | SUBROUTINE SEAICE_SUMMARY |
13 |
|
|
C | o Summarize pkg/seaice parameters. |
14 |
|
|
C *==========================================================* |
15 |
|
|
|
16 |
|
|
C !USES: |
17 |
|
|
IMPLICIT NONE |
18 |
|
|
C == global variables == |
19 |
|
|
#include "SIZE.h" |
20 |
|
|
#include "EEPARAMS.h" |
21 |
|
|
#include "SEAICE_SIZE.h" |
22 |
|
|
#include "SEAICE_PARAMS.h" |
23 |
|
|
#ifdef ALLOW_SITRACER |
24 |
|
|
# include "SEAICE_TRACER.h" |
25 |
|
|
#endif |
26 |
|
|
|
27 |
|
|
C !INPUT PARAMETERS: |
28 |
|
|
C == routine arguments == |
29 |
|
|
C myThid :: my Thread Id. number |
30 |
|
|
INTEGER myThid |
31 |
|
|
CEOP |
32 |
|
|
|
33 |
|
|
C !LOCAL VARIABLES: |
34 |
|
|
C == local variables == |
35 |
|
|
C msgBuf :: Informational/error message buffer |
36 |
|
|
CHARACTER*(MAX_LEN_MBUF) msgBuf |
37 |
|
|
INTEGER buffI(1) |
38 |
|
|
CHARACTER*10 endList |
39 |
|
|
INTEGER ioUnit |
40 |
|
|
#ifdef ALLOW_SITRACER |
41 |
|
|
INTEGER iTracer |
42 |
|
|
#endif |
43 |
|
|
|
44 |
|
|
C == end of interface == |
45 |
|
|
|
46 |
|
|
_BARRIER |
47 |
|
|
_BEGIN_MASTER(myThid) |
48 |
|
|
|
49 |
|
|
endList = ' ; ' |
50 |
|
|
ioUnit = standardMessageUnit |
51 |
|
|
|
52 |
|
|
WRITE(msgBuf,'(A)') |
53 |
|
|
&' ' |
54 |
|
|
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
55 |
|
|
& SQUEEZE_RIGHT , myThid) |
56 |
|
|
WRITE(msgBuf,'(A)') |
57 |
|
|
&'// =======================================================' |
58 |
|
|
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
59 |
|
|
& SQUEEZE_RIGHT , myThid) |
60 |
|
|
WRITE(msgBuf,'(A)') |
61 |
|
|
&'// Seaice configuration (SEAICE_PARM01) >>> START <<<' |
62 |
|
|
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
63 |
|
|
& SQUEEZE_RIGHT , myThid) |
64 |
|
|
WRITE(msgBuf,'(A)') |
65 |
|
|
&'// =======================================================' |
66 |
|
|
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
67 |
|
|
& SQUEEZE_RIGHT , myThid) |
68 |
|
|
WRITE(msgBuf,'(A)') |
69 |
|
|
&' ' |
70 |
|
|
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
71 |
|
|
& SQUEEZE_RIGHT , myThid) |
72 |
|
|
|
73 |
|
|
C-- Time-stepping related param. |
74 |
|
|
|
75 |
|
|
WRITE(msgBuf,'(A)') |
76 |
|
|
&' ' |
77 |
|
|
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
78 |
|
|
& SQUEEZE_RIGHT , myThid) |
79 |
|
|
WRITE(msgBuf,'(A)') |
80 |
|
|
&' Seaice time stepping configuration > START < ' |
81 |
|
|
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
82 |
|
|
& SQUEEZE_RIGHT , myThid) |
83 |
|
|
WRITE(msgBuf,'(A)') |
84 |
|
|
&' ----------------------------------------------' |
85 |
|
|
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
86 |
|
|
& SQUEEZE_RIGHT , myThid) |
87 |
|
|
|
88 |
|
|
CALL WRITE_0D_RL( SEAICE_deltaTtherm,INDEX_NONE, |
89 |
|
|
& 'SEAICE_deltaTtherm=', ' /* thermodynamic timestep */') |
90 |
|
|
CALL WRITE_0D_RL( SEAICE_deltaTdyn ,INDEX_NONE, |
91 |
|
|
& 'SEAICE_deltaTdyn =', ' /* dynamic timestep */') |
92 |
|
|
#ifdef SEAICE_ALLOW_EVP |
93 |
|
|
CALL WRITE_0D_RL( SEAICE_deltaTevp ,INDEX_NONE, |
94 |
|
|
& 'SEAICE_deltaTevp =', ' /* EVP timestep */') |
95 |
|
|
#endif |
96 |
|
|
CALL WRITE_0D_L ( SEAICErestoreUnderIce, INDEX_NONE, |
97 |
|
|
& 'SEAICErestoreUnderIce =', ' /* restore T and S under ice */') |
98 |
|
|
|
99 |
|
|
WRITE(msgBuf,'(A)') |
100 |
|
|
&' ' |
101 |
|
|
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
102 |
|
|
& SQUEEZE_RIGHT , myThid) |
103 |
|
|
WRITE(msgBuf,'(A)') |
104 |
|
|
&' Seaice dynamics configuration > START < ' |
105 |
|
|
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
106 |
|
|
& SQUEEZE_RIGHT , myThid) |
107 |
|
|
WRITE(msgBuf,'(A)') |
108 |
|
|
&' ------------------------------------------' |
109 |
|
|
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
110 |
|
|
& SQUEEZE_RIGHT , myThid) |
111 |
|
|
|
112 |
|
|
C-- Seaice-Dynamics parameters |
113 |
|
|
CALL WRITE_0D_L ( SEAICEuseDYNAMICS, INDEX_NONE, |
114 |
|
|
& 'SEAICEuseDYNAMICS =', ' /* use dynamics */') |
115 |
|
|
|
116 |
|
|
IF (.NOT.SEAICEuseDYNAMICS) THEN |
117 |
|
|
WRITE(msgBuf,'(A)') ' pkg/seaice dynamics is OFF ' |
118 |
|
|
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
119 |
|
|
& SQUEEZE_RIGHT , myThid) |
120 |
|
|
ELSE |
121 |
|
|
|
122 |
|
|
#ifdef SEAICE_CGRID |
123 |
|
|
CALL WRITE_0D_C( 'C-GRID', -1, INDEX_NONE, |
124 |
|
|
& 'model grid type =', ' /* type of sea ice model grid */') |
125 |
|
|
#else /* not SEAICE_CGRID */ |
126 |
|
|
CALL WRITE_0D_C( 'B-GRID', -1, INDEX_NONE, |
127 |
|
|
& 'model grid type =', ' /* type of sea ice model grid */') |
128 |
|
|
#endif /* SEAICE_CGRID */ |
129 |
|
|
CALL WRITE_0D_L ( SEAICEuseEVP, INDEX_NONE, |
130 |
|
|
& 'SEAICEuseEVP =', ' /* use EVP solver rather than LSR */') |
131 |
|
|
#ifdef SEAICE_ALLOW_FREEDRIFT |
132 |
|
|
CALL WRITE_0D_L ( SEAICEuseFREEDRIFT, INDEX_NONE, |
133 |
|
|
& 'SEAICEuseFREEDRIFT =', ' /* use free drift solution */') |
134 |
|
|
#endif /* SEAICE_ALLOW_FREEDRIFT */ |
135 |
|
|
CALL WRITE_0D_RL( OCEAN_drag ,INDEX_NONE, |
136 |
|
|
& 'OCEAN_drag =', ' /* air-ocean drag coefficient */') |
137 |
|
|
CALL WRITE_0D_RL( SEAICE_drag ,INDEX_NONE, |
138 |
|
|
& 'SEAICE_drag =', ' /* air-ice drag coefficient */') |
139 |
|
|
CALL WRITE_0D_RL( SEAICE_drag_south ,INDEX_NONE, |
140 |
|
|
& 'SEAICE_drag_south =', ' /* Southern Ocean SEAICE_drag */') |
141 |
|
|
CALL WRITE_0D_RL( SEAICE_waterDrag ,INDEX_NONE, |
142 |
|
|
& 'SEAICE_waterDrag =', ' /* water-ice drag * density */') |
143 |
|
|
CALL WRITE_0D_RL( SEAICE_waterDrag_south ,INDEX_NONE, |
144 |
|
|
& 'SEAICE_waterDrag_south =', ' /* Southern Ocean waterDrag */') |
145 |
heimbach |
1.3 |
CALL WRITE_0D_L ( SEAICEuseTILT, INDEX_NONE, |
146 |
|
|
& 'SEAICEuseTILT =', ' /* include surface tilt in dyna. */') |
147 |
dimitri |
1.1 |
CALL WRITE_0D_L ( SEAICEuseTEM, INDEX_NONE, |
148 |
|
|
& 'SEAICEuseTEM =', ' /* use truncated ellipse rheology */') |
149 |
|
|
CALL WRITE_0D_RL( SEAICE_strength ,INDEX_NONE, |
150 |
|
|
& 'SEAICE_strength =', ' /* sea-ice strength Pstar */') |
151 |
heimbach |
1.3 |
CALL WRITE_0D_RL( SEAICEpresH0 ,INDEX_NONE, |
152 |
|
|
& 'SEAICEpresH0 =', ' /* sea-ice strength Heff threshold */') |
153 |
|
|
CALL WRITE_0D_I ( SEAICEpresPow0, INDEX_NONE, |
154 |
|
|
& 'SEAICEpresPow0 =', ' /* exponent for Heff<SEAICEpresH0 */') |
155 |
|
|
CALL WRITE_0D_I ( SEAICEpresPow1, INDEX_NONE, |
156 |
|
|
& 'SEAICEpresPow1 =', ' /* exponent for Heff>SEAICEpresH0 */') |
157 |
dimitri |
1.1 |
CALL WRITE_0D_RL( SEAICE_zetaMin ,INDEX_NONE, |
158 |
|
|
& 'SEAICE_zetaMin =', ' /* lower bound for viscosity */') |
159 |
|
|
CALL WRITE_0D_RL( SEAICE_eccen,INDEX_NONE,'SEAICE_eccen =', |
160 |
|
|
& ' /* elliptical yield curve eccent */') |
161 |
|
|
CALL WRITE_0D_RL( SEAICEstressFactor,INDEX_NONE, |
162 |
|
|
& 'SEAICEstressFactor =',' /* wind stress scaling factor */') |
163 |
|
|
CALL WRITE_0D_RL( SEAICE_airTurnAngle,INDEX_NONE, |
164 |
|
|
& 'SEAICE_airTurnAngle =',' /* air-ice turning angle */') |
165 |
|
|
CALL WRITE_0D_RL( SEAICE_waterTurnAngle,INDEX_NONE, |
166 |
|
|
& 'SEAICE_waterTurnAngle =',' /* ice-water turning angle */') |
167 |
|
|
CALL WRITE_0D_L ( SEAICEuseMetricTerms, INDEX_NONE, |
168 |
|
|
& 'SEAICEuseMetricTerms =', ' /* use metric terms */') |
169 |
|
|
CALL WRITE_0D_L ( SEAICE_no_slip, INDEX_NONE, |
170 |
|
|
& 'SEAICE_no_slip =', ' /* no slip boundary conditions */') |
171 |
|
|
CALL WRITE_0D_L ( SEAICE_clipVelocities, INDEX_NONE, |
172 |
|
|
& 'SEAICE_clipVeloctities =', ' /* impose max. vels. */') |
173 |
|
|
CALL WRITE_0D_L ( useHB87stressCoupling, INDEX_NONE, |
174 |
|
|
& 'useHB87stressCoupling =', ' /* altern. ice-ocean stress */') |
175 |
|
|
CALL WRITE_0D_L ( SEAICE_maskRHS, INDEX_NONE, |
176 |
|
|
& 'SEAICE_maskRHS =', ' /* mask RHS of solver */') |
177 |
|
|
IF (.NOT.SEAICEuseEVP) THEN |
178 |
|
|
CALL WRITE_0D_I ( LSR_mixIniGuess, INDEX_NONE, |
179 |
|
|
& 'LSR_mixIniGuess =', |
180 |
|
|
& ' /* mix free-drift sol. into LSR initial Guess */') |
181 |
|
|
CALL WRITE_0D_I ( SOLV_MAX_ITERS, INDEX_NONE, |
182 |
|
|
& 'SOLV_MAX_ITERS =', ' /* max. number of LSR solver steps */') |
183 |
|
|
CALL WRITE_0D_RL( LSR_ERROR ,INDEX_NONE, |
184 |
|
|
& 'LSR_ERROR =', ' /* sets accuracy of LSR solver */') |
185 |
|
|
CALL WRITE_0D_I ( SOLV_NCHECK, INDEX_NONE, |
186 |
|
|
& 'SOLV_NCHECK =', ' /* test interval for LSR solver */') |
187 |
|
|
CALL WRITE_0D_I ( NPSEUDOTIMESTEPS, INDEX_NONE, |
188 |
|
|
& 'NPSEUDOTIMESTEPS =', ' /* num. of extra pseudo time steps */') |
189 |
|
|
#ifdef SEAICE_ALLOW_EVP |
190 |
|
|
ELSE |
191 |
|
|
CALL WRITE_0D_RL( SEAICE_elasticParm ,INDEX_NONE, |
192 |
|
|
& 'SEAICE_elasticParm=', ' /* EVP elastic parameter */') |
193 |
|
|
CALL WRITE_0D_RL( SEAICE_evpTauRelax ,INDEX_NONE, |
194 |
|
|
& 'SEAICE_evpTauRelax=', ' /* EVP relaxation timescale */') |
195 |
|
|
CALL WRITE_0D_RL( SEAICE_evpDampC ,INDEX_NONE, |
196 |
|
|
& 'SEAICE_evpDampC =', ' /* EVP damping parameter */') |
197 |
|
|
CALL WRITE_0D_L ( SEAICEuseEVPpickup, INDEX_NONE, |
198 |
|
|
& 'SEAICEuseEVPpickup=', ' /* start EVP solver with EVP pickup*/') |
199 |
|
|
#endif /* SEAICE_ALLOW_EVP */ |
200 |
|
|
ENDIF |
201 |
|
|
|
202 |
|
|
C end if SEAICEuseDYNAMICS bloc |
203 |
|
|
ENDIF |
204 |
|
|
|
205 |
|
|
C-- Thermodynamics parameters |
206 |
|
|
WRITE(msgBuf,'(A)') |
207 |
|
|
&' ' |
208 |
|
|
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
209 |
|
|
& SQUEEZE_RIGHT , myThid) |
210 |
|
|
WRITE(msgBuf,'(A)') |
211 |
|
|
&' Seaice thermodynamics configuration > START < ' |
212 |
|
|
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
213 |
|
|
& SQUEEZE_RIGHT , myThid) |
214 |
|
|
WRITE(msgBuf,'(A)') |
215 |
|
|
&' -----------------------------------------------' |
216 |
|
|
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
217 |
|
|
& SQUEEZE_RIGHT , myThid) |
218 |
|
|
C- note: air and seaice (+ snow ?) density are used in both dynamics & thermo |
219 |
|
|
CALL WRITE_0D_RL( SEAICE_rhoIce ,INDEX_NONE, |
220 |
|
|
& 'SEAICE_rhoIce =', ' /* density of sea ice (kg/m3) */') |
221 |
|
|
CALL WRITE_0D_RL( SEAICE_rhoSnow ,INDEX_NONE, |
222 |
|
|
& 'SEAICE_rhoSnow =', ' /* density of snow (kg/m3) */') |
223 |
|
|
CALL WRITE_0D_RL( SEAICE_rhoAir ,INDEX_NONE, |
224 |
|
|
& 'SEAICE_rhoAir =', ' /* density of air (kg/m3) */') |
225 |
|
|
|
226 |
|
|
CALL WRITE_0D_L ( usePW79thermodynamics, INDEX_NONE, |
227 |
|
|
& 'usePW79thermodynamics =', ' /* default 0-layer TD */') |
228 |
|
|
IF (.NOT.usePW79thermodynamics) THEN |
229 |
|
|
WRITE(msgBuf,'(A)') ' pkg/seaice thermodynamics is OFF ' |
230 |
|
|
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
231 |
|
|
& SQUEEZE_RIGHT , myThid) |
232 |
|
|
ELSE |
233 |
|
|
|
234 |
|
|
CALL WRITE_0D_RL( SEAICE_lhEvap ,INDEX_NONE, |
235 |
|
|
& 'SEAICE_lhEvap =', ' /* latent heat of evaporation */') |
236 |
|
|
CALL WRITE_0D_RL( SEAICE_lhFusion ,INDEX_NONE, |
237 |
|
|
& 'SEAICE_lhFusion =', ' /* latent heat of fusion */') |
238 |
|
|
CALL WRITE_0D_RL ( SEAICE_mcPheePiston, INDEX_NONE, |
239 |
|
|
& 'SEAICE_mcPheePiston =', |
240 |
|
|
& ' /* turbulent flux "piston velocity" a la McPhee (m/s) */') |
241 |
|
|
CALL WRITE_0D_RL ( SEAICE_mcPheeTaper, INDEX_NONE, |
242 |
|
|
& 'SEAICE_mcPheeTaper =', |
243 |
|
|
& ' /* tapering of turbulent flux (0.< <1.) for AREA=1. */') |
244 |
|
|
CALL WRITE_0D_L ( SEAICE_mcPheeStepFunc, INDEX_NONE, |
245 |
|
|
& 'SEAICE_mcPheeStepFunc =', |
246 |
|
|
& ' /* replace linear tapering with step funct. */') |
247 |
|
|
CALL WRITE_0D_RL ( SEAICE_frazilFrac, INDEX_NONE, |
248 |
|
|
& 'SEAICE_frazilFrac =', |
249 |
|
|
& ' /* frazil (T<tempFrz) to seaice conversion rate (0.< <1.) */') |
250 |
|
|
CALL WRITE_0D_RL( SEAICE_tempFrz0 ,INDEX_NONE, |
251 |
|
|
& 'SEAICE_tempFrz0 =', |
252 |
|
|
& ' /* freezing temp. of sea water (intercept) */') |
253 |
|
|
CALL WRITE_0D_RL( SEAICE_dTempFrz_dS,INDEX_NONE, |
254 |
|
|
& 'SEAICE_dTempFrz_dS=', |
255 |
|
|
& ' /* freezing temp. of sea water (slope) */') |
256 |
|
|
c print the various values meining for SEAICE_areaGain/LossFormula |
257 |
|
|
WRITE(msgBuf,'(2A)') 'SEAICE_areaGainFormula =', |
258 |
|
|
& ' /* ice cover gain formula (1,2)*/' |
259 |
|
|
CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid ) |
260 |
|
|
buffI(1) = SEAICE_areaGainFormula |
261 |
|
|
CALL PRINT_LIST_I( buffI, 1, 1, INDEX_NONE, |
262 |
|
|
& .FALSE., .TRUE., ioUnit ) |
263 |
|
|
WRITE(msgBuf,'(A)') ' 1=from growth by ATM ' |
264 |
|
|
CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid ) |
265 |
|
|
WRITE(msgBuf,'(A)') ' 2=from predicted growth by ATM' |
266 |
|
|
CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid ) |
267 |
|
|
CALL PRINT_MESSAGE(endList, ioUnit, SQUEEZE_RIGHT, myThid ) |
268 |
|
|
c |
269 |
|
|
WRITE(msgBuf,'(2A)') 'SEAICE_areaLossFormula =', |
270 |
|
|
& ' /* ice cover loss formula (1,2)*/' |
271 |
|
|
CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid ) |
272 |
|
|
buffI(1) = SEAICE_areaLossFormula |
273 |
|
|
CALL PRINT_LIST_I( buffI, 1, 1, INDEX_NONE, |
274 |
|
|
& .FALSE., .TRUE., ioUnit ) |
275 |
|
|
WRITE(msgBuf,'(2A)') ' 1=from all but only melt ', |
276 |
|
|
& 'conributions by ATM and OCN' |
277 |
|
|
CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid ) |
278 |
|
|
WRITE(msgBuf,'(A)') ' 2=from net melt-grow>0 by ATM and OCN' |
279 |
|
|
CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid ) |
280 |
|
|
WRITE(msgBuf,'(A)') ' 3=from predicted melt by ATM' |
281 |
|
|
CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid ) |
282 |
|
|
CALL PRINT_MESSAGE(endList, ioUnit, SQUEEZE_RIGHT, myThid ) |
283 |
|
|
c |
284 |
heimbach |
1.3 |
#ifdef EXF_ALLOW_SEAICE_RELAX |
285 |
|
|
CALL WRITE_0D_RL( SEAICE_tauAreaObsRelax,INDEX_NONE, |
286 |
|
|
& 'SEAICE_tauAreaObsRelax=', |
287 |
|
|
& ' /* relaxation timescale of sea-ice concentration */') |
288 |
|
|
#endif |
289 |
|
|
c |
290 |
dimitri |
1.1 |
CALL WRITE_0D_RL( HO ,INDEX_NONE, |
291 |
|
|
& 'HO =', ' /* nominal thickness of new ice */') |
292 |
|
|
CALL WRITE_0D_RL( HO_south ,INDEX_NONE, |
293 |
|
|
& 'HO_south =', ' /* Southern Ocean HO */') |
294 |
|
|
CALL WRITE_0D_RL( SEAICE_area_max ,INDEX_NONE, |
295 |
|
|
& 'SEAICE_area_max =', |
296 |
|
|
& ' /* set to les than 1. to mimic open leads */') |
297 |
|
|
#ifdef SEAICE_VARIABLE_SALINITY |
298 |
|
|
WRITE(msgBuf,'(A)') |
299 |
|
|
&' Sea ice has a variable salinity such that ' |
300 |
|
|
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
301 |
|
|
& SQUEEZE_RIGHT , myThid) |
302 |
|
|
CALL WRITE_0D_RL( SEAICE_saltFrac, INDEX_NONE, |
303 |
|
|
& 'SEAICE_saltFrac =', |
304 |
|
|
& ' /* fraction of ocn salinity in new ice */') |
305 |
|
|
#else |
306 |
|
|
CALL WRITE_0D_RL( SEAICE_salt0, INDEX_NONE, |
307 |
|
|
& 'SEAICE_salt0 =', ' /* constant sea ice salinity */') |
308 |
|
|
#endif |
309 |
|
|
CALL WRITE_0D_L ( SEAICE_salinityTracer, INDEX_NONE, |
310 |
|
|
& 'SEAICE_salinityTracer =', ' /* test SITR varia. salinity */') |
311 |
|
|
CALL WRITE_0D_L ( SEAICEuseFlooding, INDEX_NONE, |
312 |
|
|
& 'SEAICEuseFlooding =', ' /* turn submerged snow into ice */') |
313 |
|
|
#ifndef SEAICE_CAP_HEFF |
314 |
|
|
WRITE(msgBuf,'(A,A)') |
315 |
|
|
& 'MAX_HEFF has no effect because SEAICE_CAP_HEFF is undefined' |
316 |
|
|
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
317 |
|
|
& SQUEEZE_RIGHT , myThid) |
318 |
|
|
#endif /* SEAICE_CAP_HEFF */ |
319 |
|
|
CALL WRITE_0D_RL( MAX_HEFF ,INDEX_NONE, |
320 |
|
|
& 'MAX_HEFF =', ' /* maximum ice thickness */') |
321 |
|
|
|
322 |
|
|
WRITE(msgBuf,'(A)') |
323 |
|
|
&' ' |
324 |
|
|
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
325 |
|
|
& SQUEEZE_RIGHT , myThid) |
326 |
|
|
WRITE(msgBuf,'(A)') |
327 |
|
|
&' Seaice advection diffusion config, > START < ' |
328 |
|
|
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
329 |
|
|
& SQUEEZE_RIGHT , myThid) |
330 |
|
|
WRITE(msgBuf,'(A)') |
331 |
|
|
&' -----------------------------------------------' |
332 |
|
|
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
333 |
|
|
& SQUEEZE_RIGHT , myThid) |
334 |
|
|
|
335 |
|
|
CALL WRITE_0D_L ( SEAICEadvHeff, INDEX_NONE, |
336 |
|
|
& 'SEAICEadvHeff =', ' /* advect effective ice thickness */') |
337 |
|
|
CALL WRITE_0D_L ( SEAICEadvArea, INDEX_NONE, |
338 |
|
|
& 'SEAICEadvArea =', ' /* advect fractional ice area */') |
339 |
|
|
CALL WRITE_0D_L ( SEAICEadvSnow, INDEX_NONE, |
340 |
|
|
& 'SEAICEadvSnow =', ' /* advect snow layer together with ice */') |
341 |
|
|
#ifdef SEAICE_VARIABLE_SALINITY |
342 |
|
|
CALL WRITE_0D_L ( SEAICEadvSalt, INDEX_NONE, |
343 |
|
|
& 'SEAICEadvSalt =', ' /* advect salinity together with ice */') |
344 |
|
|
#endif |
345 |
|
|
CALL WRITE_0D_I ( SEAICEadvScheme, INDEX_NONE, |
346 |
|
|
& 'SEAICEadvScheme =', ' /* advection scheme for ice */') |
347 |
|
|
IF ( SEAICEadvScheme .EQ. 2 ) |
348 |
|
|
& CALL WRITE_0D_L ( SEAICEuseFluxForm, INDEX_NONE, |
349 |
|
|
& 'SEAICEuseFluxForm =', ' /* advection in FV flux form */') |
350 |
|
|
IF ( SEAICEadvArea ) |
351 |
|
|
&CALL WRITE_0D_I ( SEAICEadvSchArea, INDEX_NONE, |
352 |
|
|
& 'SEAICEadvSchArea =', ' /* advection scheme for area */') |
353 |
|
|
IF ( SEAICEadvHeff ) |
354 |
|
|
&CALL WRITE_0D_I ( SEAICEadvSchHeff, INDEX_NONE, |
355 |
|
|
& 'SEAICEadvSchHeff =', ' /* advection scheme for thickness */') |
356 |
|
|
IF ( SEAICEadvSnow ) |
357 |
|
|
&CALL WRITE_0D_I ( SEAICEadvSchSnow, INDEX_NONE, |
358 |
|
|
& 'SEAICEadvSchSnow =', ' /* advection scheme for snow */') |
359 |
|
|
#ifdef SEAICE_VARIABLE_SALINITY |
360 |
|
|
IF ( SEAICEadvSalt ) |
361 |
|
|
&CALL WRITE_0D_I ( SEAICEadvSchSalt, INDEX_NONE, |
362 |
|
|
& 'SEAICEadvSchSalt =', ' /* advection scheme for salt */') |
363 |
|
|
#endif |
364 |
|
|
CALL WRITE_0D_RL( SEAICEdiffKhArea, INDEX_NONE, |
365 |
|
|
& 'SEAICEdiffKhArea =', ' /* diffusivity (m^2/s) for area */') |
366 |
|
|
CALL WRITE_0D_RL( SEAICEdiffKhHeff, INDEX_NONE, |
367 |
|
|
& 'SEAICEdiffKhHeff =', ' /* diffusivity (m^2/s) for heff */') |
368 |
|
|
CALL WRITE_0D_RL( SEAICEdiffKhSnow, INDEX_NONE, |
369 |
|
|
& 'SEAICEdiffKhSnow =', ' /* diffusivity (m^2/s) for snow */') |
370 |
|
|
IF ( SEAICEadvSalt ) |
371 |
|
|
&CALL WRITE_0D_RL( SEAICEdiffKhSalt, INDEX_NONE, |
372 |
|
|
& 'SEAICEdiffKhSalt =', ' /* diffusivity (m^2/s) for salt */') |
373 |
|
|
CALL WRITE_0D_RL( DIFF1, INDEX_NONE, 'DIFF1 =', |
374 |
|
|
& ' /* parameter used in advect.F [m/s] */') |
375 |
|
|
|
376 |
|
|
WRITE(msgBuf,'(A)') |
377 |
|
|
&' ' |
378 |
|
|
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
379 |
|
|
& SQUEEZE_RIGHT , myThid) |
380 |
|
|
WRITE(msgBuf,'(A)') |
381 |
|
|
&' Seaice air-sea fluxes configuration, > START < ' |
382 |
|
|
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
383 |
|
|
& SQUEEZE_RIGHT , myThid) |
384 |
|
|
WRITE(msgBuf,'(A)') |
385 |
|
|
&' -----------------------------------------------' |
386 |
|
|
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
387 |
|
|
& SQUEEZE_RIGHT , myThid) |
388 |
|
|
|
389 |
|
|
CALL WRITE_0D_L ( SEAICEheatConsFix, INDEX_NONE, |
390 |
|
|
& 'SEAICEheatConsFix =', |
391 |
|
|
& ' /* accound for ocn<->seaice advect. heat flux */') |
392 |
dimitri |
1.2 |
CToM<<< |
393 |
|
|
#ifdef SEAICE_ITD |
394 |
|
|
CALL WRITE_0D_I (SEAICE_multDim,INDEX_NONE,'nITD =' |
395 |
|
|
& , ' /* number of ice thickness categories */') |
396 |
|
|
#else |
397 |
|
|
CToM>>> |
398 |
dimitri |
1.1 |
CALL WRITE_0D_I (SEAICE_multDim,INDEX_NONE,'SEAICE_multDim =' |
399 |
|
|
& , ' /* number of ice categories (1 or 7) */') |
400 |
dimitri |
1.2 |
CToM<<< |
401 |
|
|
#endif |
402 |
heimbach |
1.3 |
CToM>>> |
403 |
dimitri |
1.1 |
CALL WRITE_0D_I ( IMAX_TICE, INDEX_NONE, |
404 |
|
|
& 'IMAX_TICE =', ' /* iterations for ice surface temp */') |
405 |
|
|
CALL WRITE_0D_I ( postSolvTempIter, INDEX_NONE, |
406 |
|
|
& 'postSolvTempIter=', |
407 |
|
|
& ' /* flux calculation after surf. temp iter */') |
408 |
|
|
#ifndef SEAICE_EXTERNAL_FLUXES |
409 |
|
|
CALL WRITE_0D_RL( SEAICE_waterAlbedo,INDEX_NONE, |
410 |
|
|
& 'SEAICE_waterAlbedo=', ' /* water albedo */') |
411 |
|
|
CALL WRITE_0D_RL( SEAICE_emissivity, INDEX_NONE, |
412 |
|
|
& 'SEAICE_emissivity =', ' /* ocean-surface emissivity */') |
413 |
|
|
#endif /* SEAICE_EXTERNAL_FLUXES */ |
414 |
|
|
CALL WRITE_0D_RL( SEAICE_dryIceAlb ,INDEX_NONE, |
415 |
|
|
& 'SEAICE_dryIceAlb =', ' /* winter albedo */') |
416 |
|
|
CALL WRITE_0D_RL( SEAICE_wetIceAlb ,INDEX_NONE, |
417 |
|
|
& 'SEAICE_wetIceAlb =', ' /* summer albedo */') |
418 |
|
|
CALL WRITE_0D_RL( SEAICE_drySnowAlb ,INDEX_NONE, |
419 |
|
|
& 'SEAICE_drySnowAlb =', ' /* dry snow albedo */') |
420 |
|
|
CALL WRITE_0D_RL( SEAICE_wetSnowAlb ,INDEX_NONE, |
421 |
|
|
& 'SEAICE_wetSnowAlb =', ' /* wet snow albedo */') |
422 |
|
|
CALL WRITE_0D_RL( SEAICE_dryIceAlb_south ,INDEX_NONE, |
423 |
|
|
& 'SEAICE_dryIceAlb_south =', ' /* Southern Ocean dryIceAlb */') |
424 |
|
|
CALL WRITE_0D_RL( SEAICE_wetIceAlb_south ,INDEX_NONE, |
425 |
|
|
& 'SEAICE_wetIceAlb_south =', ' /* Southern Ocean wetIceAlb */') |
426 |
|
|
CALL WRITE_0D_RL( SEAICE_drySnowAlb_south ,INDEX_NONE, |
427 |
|
|
& 'SEAICE_drySnowAlb_south=', ' /* Southern Ocean drySnowAlb */') |
428 |
|
|
CALL WRITE_0D_RL( SEAICE_wetSnowAlb_south ,INDEX_NONE, |
429 |
|
|
& 'SEAICE_wetSnowAlb_south=', ' /* Southern Ocean wetSnowAlb */') |
430 |
|
|
CALL WRITE_0D_RL( SEAICE_wetAlbTemp ,INDEX_NONE, |
431 |
|
|
& 'SEAICE_wetAlbTemp=', |
432 |
|
|
& ' /* Temp (o.C) threshold for wet-albedo */') |
433 |
|
|
CALL WRITE_0D_RL( SEAICE_snow_emiss ,INDEX_NONE, |
434 |
|
|
& 'SEAICE_snow_emiss =', ' /* snow emissivity */') |
435 |
|
|
CALL WRITE_0D_RL( SEAICE_ice_emiss ,INDEX_NONE, |
436 |
|
|
& 'SEAICE_ice_emiss =', ' /* seaice emissivity */') |
437 |
|
|
CALL WRITE_0D_RL( SEAICE_cpAir ,INDEX_NONE, |
438 |
|
|
& 'SEAICE_cpAir =', ' /* heat capacity of air */') |
439 |
|
|
CALL WRITE_0D_RL( SEAICE_dalton ,INDEX_NONE, |
440 |
|
|
& 'SEAICE_dalton =', ' /* constant dalton number */') |
441 |
|
|
CALL WRITE_0D_RL( SEAICE_iceConduct ,INDEX_NONE, |
442 |
|
|
& 'SEAICE_iceConduct =', ' /* sea-ice conductivity */') |
443 |
|
|
CALL WRITE_0D_RL( SEAICE_snowConduct,INDEX_NONE, |
444 |
|
|
& 'SEAICE_snowConduct=', ' /* snow conductivity */') |
445 |
|
|
CALL WRITE_0D_RL( SEAICE_snowThick ,INDEX_NONE, |
446 |
|
|
& 'SEAICE_snowThick =', |
447 |
|
|
& ' /* cutoff snow thickness (for albedo) */') |
448 |
|
|
CALL WRITE_0D_RL( SEAICE_shortwave ,INDEX_NONE, |
449 |
|
|
& 'SEAICE_shortwave =', ' /* penetration shortwave radiation */') |
450 |
|
|
CALL WRITE_0D_L ( useMaykutSatVapPoly, INDEX_NONE, |
451 |
|
|
& 'useMaykutSatVapPoly =', |
452 |
|
|
& ' /* use Maykut Polynomial for Sat.Vap.Pr */') |
453 |
|
|
CALL WRITE_0D_RL( MIN_ATEMP ,INDEX_NONE, |
454 |
|
|
& 'MIN_ATEMP =', ' /* minimum air temperature */') |
455 |
|
|
CALL WRITE_0D_RL( MIN_LWDOWN ,INDEX_NONE, |
456 |
|
|
& 'MIN_LWDOWN =', ' /* minimum downward longwave */') |
457 |
|
|
CALL WRITE_0D_RL( MIN_TICE ,INDEX_NONE, |
458 |
|
|
& 'MIN_TICE =', ' /* minimum ice temperature */') |
459 |
|
|
|
460 |
|
|
C end if usePW79thermodynamics bloc |
461 |
|
|
ENDIF |
462 |
|
|
|
463 |
|
|
WRITE(msgBuf,'(A)') |
464 |
|
|
&' ' |
465 |
|
|
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
466 |
|
|
& SQUEEZE_RIGHT , myThid) |
467 |
|
|
WRITE(msgBuf,'(A)') |
468 |
|
|
&' Seaice initialization and IO config., > START < ' |
469 |
|
|
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
470 |
|
|
& SQUEEZE_RIGHT , myThid) |
471 |
|
|
WRITE(msgBuf,'(A)') |
472 |
|
|
&' -------------------------------------------------' |
473 |
|
|
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
474 |
|
|
& SQUEEZE_RIGHT , myThid) |
475 |
|
|
|
476 |
|
|
C-- Initial Condition/Input related param. |
477 |
|
|
CALL WRITE_0D_RL( SEAICE_initialHEFF,INDEX_NONE, |
478 |
|
|
& 'SEAICE_initialHEFF=', ' /* initial sea-ice thickness */') |
479 |
|
|
CALL WRITE_0D_C( AreaFile, -1, INDEX_NONE, |
480 |
|
|
& 'AreaFile =', ' /* Initial ice concentration File */') |
481 |
|
|
CALL WRITE_0D_C( HeffFile, -1, INDEX_NONE, |
482 |
|
|
& 'HeffFile =', ' /* Initial effective ice thickness File */') |
483 |
|
|
CALL WRITE_0D_C( HsnowFile, -1, INDEX_NONE, |
484 |
|
|
& 'HsnowFile =', ' /* Initial snow thickness File */') |
485 |
|
|
#ifdef SEAICE_VARIABLE_SALINITY |
486 |
|
|
CALL WRITE_0D_C( HsaltFile, -1, INDEX_NONE, |
487 |
|
|
& 'HsaltFile =', ' /* Initial HSALT File */') |
488 |
|
|
#endif |
489 |
|
|
CALL WRITE_0D_C( uIceFile, -1, INDEX_NONE, |
490 |
|
|
& 'uIceFile =', ' /* Initial U-ice velocity File */') |
491 |
|
|
CALL WRITE_0D_C( vIceFile, -1, INDEX_NONE, |
492 |
|
|
& 'vIceFile =', ' /* Initial V-ice velocity File */') |
493 |
|
|
|
494 |
|
|
C-- Output related param. |
495 |
|
|
CALL WRITE_0D_L ( SEAICEwriteState, INDEX_NONE, |
496 |
|
|
& 'SEAICEwriteState =', ' /* write sea ice state to file */') |
497 |
|
|
CALL WRITE_0D_RL( SEAICE_monFreq, INDEX_NONE, |
498 |
|
|
& 'SEAICE_monFreq =',' /* monitor frequency */') |
499 |
|
|
CALL WRITE_0D_RL( SEAICE_dumpFreq ,INDEX_NONE, |
500 |
|
|
& 'SEAICE_dumpFreq =', ' /* dump frequency */') |
501 |
|
|
CALL WRITE_0D_RL( SEAICE_taveFreq ,INDEX_NONE, |
502 |
|
|
& 'SEAICE_taveFreq =', ' /* time-averaging frequency */') |
503 |
|
|
CALL WRITE_0D_L ( SEAICE_mon_stdio, INDEX_NONE, |
504 |
|
|
& 'SEAICE_mon_stdio =',' /* write monitor to std-outp */') |
505 |
|
|
CALL WRITE_0D_L ( SEAICE_dump_mdsio, INDEX_NONE, |
506 |
|
|
& 'SEAICE_dump_mdsio =',' /* write snap-shot using MDSIO */') |
507 |
|
|
CALL WRITE_0D_L ( SEAICE_tave_mdsio, INDEX_NONE, |
508 |
|
|
& 'SEAICE_tave_mdsio =',' /* write TimeAverage using MDSIO */') |
509 |
|
|
#ifdef ALLOW_MNC |
510 |
|
|
CALL WRITE_0D_L ( SEAICE_mon_mnc, INDEX_NONE, |
511 |
|
|
& 'SEAICE_mon_mnc =',' /* write monitor to netcdf file */') |
512 |
|
|
CALL WRITE_0D_L ( SEAICE_dump_mnc, INDEX_NONE, |
513 |
|
|
& 'SEAICE_dump_mnc =',' /* write snap-shot using MNC */') |
514 |
|
|
CALL WRITE_0D_L ( SEAICE_tave_mnc, INDEX_NONE, |
515 |
|
|
& 'SEAICE_tave_mnc =',' /* write TimeAverage using MNC */') |
516 |
|
|
#endif /* ALLOW_MNC */ |
517 |
|
|
|
518 |
|
|
#ifdef ALLOW_SITRACER |
519 |
|
|
CALL WRITE_0D_I ( SItrNumInUse, INDEX_NONE, |
520 |
|
|
& 'SItrNumInUse =', |
521 |
|
|
& ' /* number of tracers that are in use (<SItrMaxNum) */') |
522 |
|
|
DO iTracer = 1, SItrNumInUse |
523 |
|
|
IF (SItrName(iTracer).NE.' ') THEN |
524 |
|
|
WRITE(msgBuf,'(A,I3,A)') '== SItracer no. ',iTracer, |
525 |
|
|
&' is in use and defined as' |
526 |
|
|
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
527 |
|
|
& SQUEEZE_RIGHT , myThid) |
528 |
|
|
CALL WRITE_0D_C ( SItrMate(iTracer), -1, INDEX_NONE, |
529 |
|
|
& ' -- SItrMate =',' /* tracer of HEFF or AREA */') |
530 |
|
|
CALL WRITE_0D_C ( SItrName(iTracer), -1, INDEX_NONE, |
531 |
|
|
& ' -- SItrName =',' /* tracer name*/') |
532 |
|
|
CALL WRITE_0D_C ( SItrNameLong(iTracer), -1, INDEX_NONE, |
533 |
|
|
& ' -- SItrNameLong =',' /* tracer long name*/') |
534 |
|
|
CALL WRITE_0D_C ( SItrFile(iTracer), -1, INDEX_NONE, |
535 |
|
|
& ' -- SItrFile =',' /* tracer initial condition file */') |
536 |
|
|
CALL WRITE_0D_C ( SItrUnit(iTracer), -1, INDEX_NONE, |
537 |
|
|
& ' -- SItrUnit =',' /* tracer unit */') |
538 |
|
|
CALL WRITE_0D_RL ( SItrFromOcean0(iTracer), INDEX_NONE, |
539 |
|
|
& ' -- SItrFromOcean0 =',' /* for new ice from freeze */') |
540 |
|
|
CALL WRITE_0D_RL ( SItrFromOceanFrac(iTracer), INDEX_NONE, |
541 |
|
|
& ' -- SItrFromOceanFrac =',' /* for new ice from freeze */') |
542 |
|
|
CALL WRITE_0D_RL ( SItrFromFlood0(iTracer), INDEX_NONE, |
543 |
|
|
& ' -- SItrFromFlood0 =',' /* for new ice from freeze */') |
544 |
|
|
CALL WRITE_0D_RL ( SItrFromFloodFrac(iTracer), INDEX_NONE, |
545 |
|
|
& ' -- SItrFromFloodFrac =',' /* for new ice from freeze */') |
546 |
|
|
CALL WRITE_0D_RL ( SItrExpand0(iTracer), INDEX_NONE, |
547 |
|
|
& ' -- SItrExpand0 =',' /* for ice cover thermo. expans. */') |
548 |
|
|
|
549 |
|
|
ENDIF |
550 |
|
|
ENDDO |
551 |
|
|
#endif /* ALLOW_SITRACER */ |
552 |
|
|
|
553 |
|
|
WRITE(msgBuf,'(A)') |
554 |
|
|
&' ' |
555 |
|
|
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
556 |
|
|
& SQUEEZE_RIGHT , myThid) |
557 |
|
|
WRITE(msgBuf,'(A)') |
558 |
|
|
&' Seaice regularization numbers, > START < ' |
559 |
|
|
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
560 |
|
|
& SQUEEZE_RIGHT , myThid) |
561 |
|
|
WRITE(msgBuf,'(A)') |
562 |
|
|
&' -----------------------------------------------' |
563 |
|
|
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
564 |
|
|
& SQUEEZE_RIGHT , myThid) |
565 |
|
|
|
566 |
|
|
CALL WRITE_0D_RL( SEAICE_EPS ,INDEX_NONE, |
567 |
|
|
& 'SEAICE_EPS =', ' /* reduce derivative singularities */') |
568 |
|
|
CALL WRITE_0D_RL( SEAICE_EPS_SQ ,INDEX_NONE, |
569 |
|
|
& 'SEAICE_EPS_SQ =', ' /* reduce derivative singularities */') |
570 |
|
|
CALL WRITE_0D_RL( SEAICE_area_reg ,INDEX_NONE, |
571 |
|
|
& 'SEAICE_area_reg =', ' /* reduce derivative singularities */') |
572 |
|
|
CALL WRITE_0D_RL( SEAICE_hice_reg ,INDEX_NONE, |
573 |
|
|
& 'SEAICE_hice_reg =', ' /* reduce derivative singularities */') |
574 |
|
|
CALL WRITE_0D_RL( SEAICE_area_floor ,INDEX_NONE, |
575 |
|
|
& 'SEAICE_area_floor =', ' /* reduce derivative singularities */') |
576 |
|
|
|
577 |
|
|
WRITE(msgBuf,'(A)') |
578 |
|
|
&'// =======================================================' |
579 |
|
|
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
580 |
|
|
& SQUEEZE_RIGHT , myThid) |
581 |
|
|
WRITE(msgBuf,'(A)') |
582 |
|
|
&'// Seaice configuration (SEAICE_PARM01) >>> END <<<' |
583 |
|
|
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
584 |
|
|
& SQUEEZE_RIGHT , myThid) |
585 |
|
|
WRITE(msgBuf,'(A)') |
586 |
|
|
&'// =======================================================' |
587 |
|
|
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
588 |
|
|
& SQUEEZE_RIGHT , myThid) |
589 |
|
|
WRITE(msgBuf,'(A)') |
590 |
|
|
|
591 |
|
|
_END_MASTER(myThid) |
592 |
|
|
|
593 |
|
|
RETURN |
594 |
|
|
END |