1 |
dimitri |
1.1 |
C $Header: /u/gcmpack/MITgcm/pkg/seaice/seaice_summary.F,v 1.50 2012/03/14 22:55:53 heimbach Exp $ |
2 |
|
|
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( SEAICE_tauAreaObsRelax,INDEX_NONE, |
136 |
|
|
& 'SEAICE_tauAreaObsRelax=', |
137 |
|
|
& ' /* relaxation timescale of sea-ice concentration */') |
138 |
|
|
CALL WRITE_0D_RL( OCEAN_drag ,INDEX_NONE, |
139 |
|
|
& 'OCEAN_drag =', ' /* air-ocean drag coefficient */') |
140 |
|
|
CALL WRITE_0D_RL( SEAICE_drag ,INDEX_NONE, |
141 |
|
|
& 'SEAICE_drag =', ' /* air-ice drag coefficient */') |
142 |
|
|
CALL WRITE_0D_RL( SEAICE_drag_south ,INDEX_NONE, |
143 |
|
|
& 'SEAICE_drag_south =', ' /* Southern Ocean SEAICE_drag */') |
144 |
|
|
CALL WRITE_0D_RL( SEAICE_waterDrag ,INDEX_NONE, |
145 |
|
|
& 'SEAICE_waterDrag =', ' /* water-ice drag * density */') |
146 |
|
|
CALL WRITE_0D_RL( SEAICE_waterDrag_south ,INDEX_NONE, |
147 |
|
|
& 'SEAICE_waterDrag_south =', ' /* Southern Ocean waterDrag */') |
148 |
|
|
CALL WRITE_0D_L ( SEAICEuseTEM, INDEX_NONE, |
149 |
|
|
& 'SEAICEuseTEM =', ' /* use truncated ellipse rheology */') |
150 |
|
|
CALL WRITE_0D_RL( SEAICE_strength ,INDEX_NONE, |
151 |
|
|
& 'SEAICE_strength =', ' /* sea-ice strength Pstar */') |
152 |
|
|
CALL WRITE_0D_RL( SEAICE_zetaMin ,INDEX_NONE, |
153 |
|
|
& 'SEAICE_zetaMin =', ' /* lower bound for viscosity */') |
154 |
|
|
CALL WRITE_0D_RL( SEAICE_eccen,INDEX_NONE,'SEAICE_eccen =', |
155 |
|
|
& ' /* elliptical yield curve eccent */') |
156 |
|
|
CALL WRITE_0D_RL( SEAICEstressFactor,INDEX_NONE, |
157 |
|
|
& 'SEAICEstressFactor =',' /* wind stress scaling factor */') |
158 |
|
|
CALL WRITE_0D_RL( SEAICE_airTurnAngle,INDEX_NONE, |
159 |
|
|
& 'SEAICE_airTurnAngle =',' /* air-ice turning angle */') |
160 |
|
|
CALL WRITE_0D_RL( SEAICE_waterTurnAngle,INDEX_NONE, |
161 |
|
|
& 'SEAICE_waterTurnAngle =',' /* ice-water turning angle */') |
162 |
|
|
CALL WRITE_0D_L ( SEAICEuseMetricTerms, INDEX_NONE, |
163 |
|
|
& 'SEAICEuseMetricTerms =', ' /* use metric terms */') |
164 |
|
|
CALL WRITE_0D_L ( SEAICE_no_slip, INDEX_NONE, |
165 |
|
|
& 'SEAICE_no_slip =', ' /* no slip boundary conditions */') |
166 |
|
|
CALL WRITE_0D_L ( SEAICE_clipVelocities, INDEX_NONE, |
167 |
|
|
& 'SEAICE_clipVeloctities =', ' /* impose max. vels. */') |
168 |
|
|
CALL WRITE_0D_L ( useHB87stressCoupling, INDEX_NONE, |
169 |
|
|
& 'useHB87stressCoupling =', ' /* altern. ice-ocean stress */') |
170 |
|
|
CALL WRITE_0D_L ( SEAICE_maskRHS, INDEX_NONE, |
171 |
|
|
& 'SEAICE_maskRHS =', ' /* mask RHS of solver */') |
172 |
|
|
IF (.NOT.SEAICEuseEVP) THEN |
173 |
|
|
CALL WRITE_0D_I ( LSR_mixIniGuess, INDEX_NONE, |
174 |
|
|
& 'LSR_mixIniGuess =', |
175 |
|
|
& ' /* mix free-drift sol. into LSR initial Guess */') |
176 |
|
|
CALL WRITE_0D_I ( SOLV_MAX_ITERS, INDEX_NONE, |
177 |
|
|
& 'SOLV_MAX_ITERS =', ' /* max. number of LSR solver steps */') |
178 |
|
|
CALL WRITE_0D_RL( LSR_ERROR ,INDEX_NONE, |
179 |
|
|
& 'LSR_ERROR =', ' /* sets accuracy of LSR solver */') |
180 |
|
|
CALL WRITE_0D_I ( SOLV_NCHECK, INDEX_NONE, |
181 |
|
|
& 'SOLV_NCHECK =', ' /* test interval for LSR solver */') |
182 |
|
|
CALL WRITE_0D_I ( NPSEUDOTIMESTEPS, INDEX_NONE, |
183 |
|
|
& 'NPSEUDOTIMESTEPS =', ' /* num. of extra pseudo time steps */') |
184 |
|
|
#ifdef SEAICE_ALLOW_EVP |
185 |
|
|
ELSE |
186 |
|
|
CALL WRITE_0D_RL( SEAICE_elasticParm ,INDEX_NONE, |
187 |
|
|
& 'SEAICE_elasticParm=', ' /* EVP elastic parameter */') |
188 |
|
|
CALL WRITE_0D_RL( SEAICE_evpTauRelax ,INDEX_NONE, |
189 |
|
|
& 'SEAICE_evpTauRelax=', ' /* EVP relaxation timescale */') |
190 |
|
|
CALL WRITE_0D_RL( SEAICE_evpDampC ,INDEX_NONE, |
191 |
|
|
& 'SEAICE_evpDampC =', ' /* EVP damping parameter */') |
192 |
|
|
CALL WRITE_0D_L ( SEAICEuseEVPpickup, INDEX_NONE, |
193 |
|
|
& 'SEAICEuseEVPpickup=', ' /* start EVP solver with EVP pickup*/') |
194 |
|
|
#endif /* SEAICE_ALLOW_EVP */ |
195 |
|
|
ENDIF |
196 |
|
|
|
197 |
|
|
C end if SEAICEuseDYNAMICS bloc |
198 |
|
|
ENDIF |
199 |
|
|
|
200 |
|
|
C-- Thermodynamics parameters |
201 |
|
|
WRITE(msgBuf,'(A)') |
202 |
|
|
&' ' |
203 |
|
|
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
204 |
|
|
& SQUEEZE_RIGHT , myThid) |
205 |
|
|
WRITE(msgBuf,'(A)') |
206 |
|
|
&' Seaice thermodynamics configuration > START < ' |
207 |
|
|
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
208 |
|
|
& SQUEEZE_RIGHT , myThid) |
209 |
|
|
WRITE(msgBuf,'(A)') |
210 |
|
|
&' -----------------------------------------------' |
211 |
|
|
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
212 |
|
|
& SQUEEZE_RIGHT , myThid) |
213 |
|
|
C- note: air and seaice (+ snow ?) density are used in both dynamics & thermo |
214 |
|
|
CALL WRITE_0D_RL( SEAICE_rhoIce ,INDEX_NONE, |
215 |
|
|
& 'SEAICE_rhoIce =', ' /* density of sea ice (kg/m3) */') |
216 |
|
|
CALL WRITE_0D_RL( SEAICE_rhoSnow ,INDEX_NONE, |
217 |
|
|
& 'SEAICE_rhoSnow =', ' /* density of snow (kg/m3) */') |
218 |
|
|
CALL WRITE_0D_RL( SEAICE_rhoAir ,INDEX_NONE, |
219 |
|
|
& 'SEAICE_rhoAir =', ' /* density of air (kg/m3) */') |
220 |
|
|
|
221 |
|
|
CALL WRITE_0D_L ( usePW79thermodynamics, INDEX_NONE, |
222 |
|
|
& 'usePW79thermodynamics =', ' /* default 0-layer TD */') |
223 |
|
|
IF (.NOT.usePW79thermodynamics) THEN |
224 |
|
|
WRITE(msgBuf,'(A)') ' pkg/seaice thermodynamics is OFF ' |
225 |
|
|
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
226 |
|
|
& SQUEEZE_RIGHT , myThid) |
227 |
|
|
ELSE |
228 |
|
|
|
229 |
|
|
CALL WRITE_0D_RL( SEAICE_lhEvap ,INDEX_NONE, |
230 |
|
|
& 'SEAICE_lhEvap =', ' /* latent heat of evaporation */') |
231 |
|
|
CALL WRITE_0D_RL( SEAICE_lhFusion ,INDEX_NONE, |
232 |
|
|
& 'SEAICE_lhFusion =', ' /* latent heat of fusion */') |
233 |
|
|
CALL WRITE_0D_RL ( SEAICE_mcPheePiston, INDEX_NONE, |
234 |
|
|
& 'SEAICE_mcPheePiston =', |
235 |
|
|
& ' /* turbulent flux "piston velocity" a la McPhee (m/s) */') |
236 |
|
|
CALL WRITE_0D_RL ( SEAICE_mcPheeTaper, INDEX_NONE, |
237 |
|
|
& 'SEAICE_mcPheeTaper =', |
238 |
|
|
& ' /* tapering of turbulent flux (0.< <1.) for AREA=1. */') |
239 |
|
|
CALL WRITE_0D_L ( SEAICE_mcPheeStepFunc, INDEX_NONE, |
240 |
|
|
& 'SEAICE_mcPheeStepFunc =', |
241 |
|
|
& ' /* replace linear tapering with step funct. */') |
242 |
|
|
CALL WRITE_0D_RL ( SEAICE_frazilFrac, INDEX_NONE, |
243 |
|
|
& 'SEAICE_frazilFrac =', |
244 |
|
|
& ' /* frazil (T<tempFrz) to seaice conversion rate (0.< <1.) */') |
245 |
|
|
CALL WRITE_0D_RL( SEAICE_tempFrz0 ,INDEX_NONE, |
246 |
|
|
& 'SEAICE_tempFrz0 =', |
247 |
|
|
& ' /* freezing temp. of sea water (intercept) */') |
248 |
|
|
CALL WRITE_0D_RL( SEAICE_dTempFrz_dS,INDEX_NONE, |
249 |
|
|
& 'SEAICE_dTempFrz_dS=', |
250 |
|
|
& ' /* freezing temp. of sea water (slope) */') |
251 |
|
|
c print the various values meining for SEAICE_areaGain/LossFormula |
252 |
|
|
WRITE(msgBuf,'(2A)') 'SEAICE_areaGainFormula =', |
253 |
|
|
& ' /* ice cover gain formula (1,2)*/' |
254 |
|
|
CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid ) |
255 |
|
|
buffI(1) = SEAICE_areaGainFormula |
256 |
|
|
CALL PRINT_LIST_I( buffI, 1, 1, INDEX_NONE, |
257 |
|
|
& .FALSE., .TRUE., ioUnit ) |
258 |
|
|
WRITE(msgBuf,'(A)') ' 1=from growth by ATM ' |
259 |
|
|
CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid ) |
260 |
|
|
WRITE(msgBuf,'(A)') ' 2=from predicted growth by ATM' |
261 |
|
|
CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid ) |
262 |
|
|
CALL PRINT_MESSAGE(endList, ioUnit, SQUEEZE_RIGHT, myThid ) |
263 |
|
|
c |
264 |
|
|
WRITE(msgBuf,'(2A)') 'SEAICE_areaLossFormula =', |
265 |
|
|
& ' /* ice cover loss formula (1,2)*/' |
266 |
|
|
CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid ) |
267 |
|
|
buffI(1) = SEAICE_areaLossFormula |
268 |
|
|
CALL PRINT_LIST_I( buffI, 1, 1, INDEX_NONE, |
269 |
|
|
& .FALSE., .TRUE., ioUnit ) |
270 |
|
|
WRITE(msgBuf,'(2A)') ' 1=from all but only melt ', |
271 |
|
|
& 'conributions by ATM and OCN' |
272 |
|
|
CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid ) |
273 |
|
|
WRITE(msgBuf,'(A)') ' 2=from net melt-grow>0 by ATM and OCN' |
274 |
|
|
CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid ) |
275 |
|
|
WRITE(msgBuf,'(A)') ' 3=from predicted melt by ATM' |
276 |
|
|
CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid ) |
277 |
|
|
CALL PRINT_MESSAGE(endList, ioUnit, SQUEEZE_RIGHT, myThid ) |
278 |
|
|
c |
279 |
|
|
CALL WRITE_0D_RL( HO ,INDEX_NONE, |
280 |
|
|
& 'HO =', ' /* nominal thickness of new ice */') |
281 |
|
|
CALL WRITE_0D_RL( HO_south ,INDEX_NONE, |
282 |
|
|
& 'HO_south =', ' /* Southern Ocean HO */') |
283 |
|
|
CALL WRITE_0D_RL( SEAICE_area_max ,INDEX_NONE, |
284 |
|
|
& 'SEAICE_area_max =', |
285 |
|
|
& ' /* set to les than 1. to mimic open leads */') |
286 |
|
|
#ifdef SEAICE_VARIABLE_SALINITY |
287 |
|
|
WRITE(msgBuf,'(A)') |
288 |
|
|
&' Sea ice has a variable salinity such that ' |
289 |
|
|
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
290 |
|
|
& SQUEEZE_RIGHT , myThid) |
291 |
|
|
CALL WRITE_0D_RL( SEAICE_saltFrac, INDEX_NONE, |
292 |
|
|
& 'SEAICE_saltFrac =', |
293 |
|
|
& ' /* fraction of ocn salinity in new ice */') |
294 |
|
|
#else |
295 |
|
|
CALL WRITE_0D_RL( SEAICE_salt0, INDEX_NONE, |
296 |
|
|
& 'SEAICE_salt0 =', ' /* constant sea ice salinity */') |
297 |
|
|
#endif |
298 |
|
|
CALL WRITE_0D_L ( SEAICE_salinityTracer, INDEX_NONE, |
299 |
|
|
& 'SEAICE_salinityTracer =', ' /* test SITR varia. salinity */') |
300 |
|
|
CALL WRITE_0D_L ( SEAICEuseFlooding, INDEX_NONE, |
301 |
|
|
& 'SEAICEuseFlooding =', ' /* turn submerged snow into ice */') |
302 |
|
|
#ifndef SEAICE_CAP_HEFF |
303 |
|
|
WRITE(msgBuf,'(A,A)') |
304 |
|
|
& 'MAX_HEFF has no effect because SEAICE_CAP_HEFF is undefined' |
305 |
|
|
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
306 |
|
|
& SQUEEZE_RIGHT , myThid) |
307 |
|
|
#endif /* SEAICE_CAP_HEFF */ |
308 |
|
|
CALL WRITE_0D_RL( MAX_HEFF ,INDEX_NONE, |
309 |
|
|
& 'MAX_HEFF =', ' /* maximum ice thickness */') |
310 |
|
|
|
311 |
|
|
WRITE(msgBuf,'(A)') |
312 |
|
|
&' ' |
313 |
|
|
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
314 |
|
|
& SQUEEZE_RIGHT , myThid) |
315 |
|
|
WRITE(msgBuf,'(A)') |
316 |
|
|
&' Seaice advection diffusion config, > START < ' |
317 |
|
|
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
318 |
|
|
& SQUEEZE_RIGHT , myThid) |
319 |
|
|
WRITE(msgBuf,'(A)') |
320 |
|
|
&' -----------------------------------------------' |
321 |
|
|
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
322 |
|
|
& SQUEEZE_RIGHT , myThid) |
323 |
|
|
|
324 |
|
|
CALL WRITE_0D_L ( SEAICEadvHeff, INDEX_NONE, |
325 |
|
|
& 'SEAICEadvHeff =', ' /* advect effective ice thickness */') |
326 |
|
|
CALL WRITE_0D_L ( SEAICEadvArea, INDEX_NONE, |
327 |
|
|
& 'SEAICEadvArea =', ' /* advect fractional ice area */') |
328 |
|
|
CALL WRITE_0D_L ( SEAICEadvSnow, INDEX_NONE, |
329 |
|
|
& 'SEAICEadvSnow =', ' /* advect snow layer together with ice */') |
330 |
|
|
#ifdef SEAICE_VARIABLE_SALINITY |
331 |
|
|
CALL WRITE_0D_L ( SEAICEadvSalt, INDEX_NONE, |
332 |
|
|
& 'SEAICEadvSalt =', ' /* advect salinity together with ice */') |
333 |
|
|
#endif |
334 |
|
|
CALL WRITE_0D_I ( SEAICEadvScheme, INDEX_NONE, |
335 |
|
|
& 'SEAICEadvScheme =', ' /* advection scheme for ice */') |
336 |
|
|
IF ( SEAICEadvScheme .EQ. 2 ) |
337 |
|
|
& CALL WRITE_0D_L ( SEAICEuseFluxForm, INDEX_NONE, |
338 |
|
|
& 'SEAICEuseFluxForm =', ' /* advection in FV flux form */') |
339 |
|
|
IF ( SEAICEadvArea ) |
340 |
|
|
&CALL WRITE_0D_I ( SEAICEadvSchArea, INDEX_NONE, |
341 |
|
|
& 'SEAICEadvSchArea =', ' /* advection scheme for area */') |
342 |
|
|
IF ( SEAICEadvHeff ) |
343 |
|
|
&CALL WRITE_0D_I ( SEAICEadvSchHeff, INDEX_NONE, |
344 |
|
|
& 'SEAICEadvSchHeff =', ' /* advection scheme for thickness */') |
345 |
|
|
IF ( SEAICEadvSnow ) |
346 |
|
|
&CALL WRITE_0D_I ( SEAICEadvSchSnow, INDEX_NONE, |
347 |
|
|
& 'SEAICEadvSchSnow =', ' /* advection scheme for snow */') |
348 |
|
|
#ifdef SEAICE_VARIABLE_SALINITY |
349 |
|
|
IF ( SEAICEadvSalt ) |
350 |
|
|
&CALL WRITE_0D_I ( SEAICEadvSchSalt, INDEX_NONE, |
351 |
|
|
& 'SEAICEadvSchSalt =', ' /* advection scheme for salt */') |
352 |
|
|
#endif |
353 |
|
|
CALL WRITE_0D_RL( SEAICEdiffKhArea, INDEX_NONE, |
354 |
|
|
& 'SEAICEdiffKhArea =', ' /* diffusivity (m^2/s) for area */') |
355 |
|
|
CALL WRITE_0D_RL( SEAICEdiffKhHeff, INDEX_NONE, |
356 |
|
|
& 'SEAICEdiffKhHeff =', ' /* diffusivity (m^2/s) for heff */') |
357 |
|
|
CALL WRITE_0D_RL( SEAICEdiffKhSnow, INDEX_NONE, |
358 |
|
|
& 'SEAICEdiffKhSnow =', ' /* diffusivity (m^2/s) for snow */') |
359 |
|
|
IF ( SEAICEadvSalt ) |
360 |
|
|
&CALL WRITE_0D_RL( SEAICEdiffKhSalt, INDEX_NONE, |
361 |
|
|
& 'SEAICEdiffKhSalt =', ' /* diffusivity (m^2/s) for salt */') |
362 |
|
|
CALL WRITE_0D_RL( DIFF1, INDEX_NONE, 'DIFF1 =', |
363 |
|
|
& ' /* parameter used in advect.F [m/s] */') |
364 |
|
|
|
365 |
|
|
WRITE(msgBuf,'(A)') |
366 |
|
|
&' ' |
367 |
|
|
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
368 |
|
|
& SQUEEZE_RIGHT , myThid) |
369 |
|
|
WRITE(msgBuf,'(A)') |
370 |
|
|
&' Seaice air-sea fluxes configuration, > START < ' |
371 |
|
|
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
372 |
|
|
& SQUEEZE_RIGHT , myThid) |
373 |
|
|
WRITE(msgBuf,'(A)') |
374 |
|
|
&' -----------------------------------------------' |
375 |
|
|
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
376 |
|
|
& SQUEEZE_RIGHT , myThid) |
377 |
|
|
|
378 |
|
|
CALL WRITE_0D_L ( SEAICEheatConsFix, INDEX_NONE, |
379 |
|
|
& 'SEAICEheatConsFix =', |
380 |
|
|
& ' /* accound for ocn<->seaice advect. heat flux */') |
381 |
|
|
CALL WRITE_0D_I (SEAICE_multDim,INDEX_NONE,'SEAICE_multDim =' |
382 |
|
|
& , ' /* number of ice categories (1 or 7) */') |
383 |
|
|
CALL WRITE_0D_I ( IMAX_TICE, INDEX_NONE, |
384 |
|
|
& 'IMAX_TICE =', ' /* iterations for ice surface temp */') |
385 |
|
|
CALL WRITE_0D_I ( postSolvTempIter, INDEX_NONE, |
386 |
|
|
& 'postSolvTempIter=', |
387 |
|
|
& ' /* flux calculation after surf. temp iter */') |
388 |
|
|
#ifndef SEAICE_EXTERNAL_FLUXES |
389 |
|
|
CALL WRITE_0D_RL( SEAICE_waterAlbedo,INDEX_NONE, |
390 |
|
|
& 'SEAICE_waterAlbedo=', ' /* water albedo */') |
391 |
|
|
CALL WRITE_0D_RL( SEAICE_emissivity, INDEX_NONE, |
392 |
|
|
& 'SEAICE_emissivity =', ' /* ocean-surface emissivity */') |
393 |
|
|
#endif /* SEAICE_EXTERNAL_FLUXES */ |
394 |
|
|
CALL WRITE_0D_RL( SEAICE_dryIceAlb ,INDEX_NONE, |
395 |
|
|
& 'SEAICE_dryIceAlb =', ' /* winter albedo */') |
396 |
|
|
CALL WRITE_0D_RL( SEAICE_wetIceAlb ,INDEX_NONE, |
397 |
|
|
& 'SEAICE_wetIceAlb =', ' /* summer albedo */') |
398 |
|
|
CALL WRITE_0D_RL( SEAICE_drySnowAlb ,INDEX_NONE, |
399 |
|
|
& 'SEAICE_drySnowAlb =', ' /* dry snow albedo */') |
400 |
|
|
CALL WRITE_0D_RL( SEAICE_wetSnowAlb ,INDEX_NONE, |
401 |
|
|
& 'SEAICE_wetSnowAlb =', ' /* wet snow albedo */') |
402 |
|
|
CALL WRITE_0D_RL( SEAICE_dryIceAlb_south ,INDEX_NONE, |
403 |
|
|
& 'SEAICE_dryIceAlb_south =', ' /* Southern Ocean dryIceAlb */') |
404 |
|
|
CALL WRITE_0D_RL( SEAICE_wetIceAlb_south ,INDEX_NONE, |
405 |
|
|
& 'SEAICE_wetIceAlb_south =', ' /* Southern Ocean wetIceAlb */') |
406 |
|
|
CALL WRITE_0D_RL( SEAICE_drySnowAlb_south ,INDEX_NONE, |
407 |
|
|
& 'SEAICE_drySnowAlb_south=', ' /* Southern Ocean drySnowAlb */') |
408 |
|
|
CALL WRITE_0D_RL( SEAICE_wetSnowAlb_south ,INDEX_NONE, |
409 |
|
|
& 'SEAICE_wetSnowAlb_south=', ' /* Southern Ocean wetSnowAlb */') |
410 |
|
|
CALL WRITE_0D_RL( SEAICE_wetAlbTemp ,INDEX_NONE, |
411 |
|
|
& 'SEAICE_wetAlbTemp=', |
412 |
|
|
& ' /* Temp (o.C) threshold for wet-albedo */') |
413 |
|
|
CALL WRITE_0D_RL( SEAICE_snow_emiss ,INDEX_NONE, |
414 |
|
|
& 'SEAICE_snow_emiss =', ' /* snow emissivity */') |
415 |
|
|
CALL WRITE_0D_RL( SEAICE_ice_emiss ,INDEX_NONE, |
416 |
|
|
& 'SEAICE_ice_emiss =', ' /* seaice emissivity */') |
417 |
|
|
CALL WRITE_0D_RL( SEAICE_cpAir ,INDEX_NONE, |
418 |
|
|
& 'SEAICE_cpAir =', ' /* heat capacity of air */') |
419 |
|
|
CALL WRITE_0D_RL( SEAICE_dalton ,INDEX_NONE, |
420 |
|
|
& 'SEAICE_dalton =', ' /* constant dalton number */') |
421 |
|
|
CALL WRITE_0D_RL( SEAICE_iceConduct ,INDEX_NONE, |
422 |
|
|
& 'SEAICE_iceConduct =', ' /* sea-ice conductivity */') |
423 |
|
|
CALL WRITE_0D_RL( SEAICE_snowConduct,INDEX_NONE, |
424 |
|
|
& 'SEAICE_snowConduct=', ' /* snow conductivity */') |
425 |
|
|
CALL WRITE_0D_RL( SEAICE_snowThick ,INDEX_NONE, |
426 |
|
|
& 'SEAICE_snowThick =', |
427 |
|
|
& ' /* cutoff snow thickness (for albedo) */') |
428 |
|
|
CALL WRITE_0D_RL( SEAICE_shortwave ,INDEX_NONE, |
429 |
|
|
& 'SEAICE_shortwave =', ' /* penetration shortwave radiation */') |
430 |
|
|
CALL WRITE_0D_L ( useMaykutSatVapPoly, INDEX_NONE, |
431 |
|
|
& 'useMaykutSatVapPoly =', |
432 |
|
|
& ' /* use Maykut Polynomial for Sat.Vap.Pr */') |
433 |
|
|
CALL WRITE_0D_RL( MIN_ATEMP ,INDEX_NONE, |
434 |
|
|
& 'MIN_ATEMP =', ' /* minimum air temperature */') |
435 |
|
|
CALL WRITE_0D_RL( MIN_LWDOWN ,INDEX_NONE, |
436 |
|
|
& 'MIN_LWDOWN =', ' /* minimum downward longwave */') |
437 |
|
|
CALL WRITE_0D_RL( MIN_TICE ,INDEX_NONE, |
438 |
|
|
& 'MIN_TICE =', ' /* minimum ice temperature */') |
439 |
|
|
|
440 |
|
|
C end if usePW79thermodynamics bloc |
441 |
|
|
ENDIF |
442 |
|
|
|
443 |
|
|
WRITE(msgBuf,'(A)') |
444 |
|
|
&' ' |
445 |
|
|
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
446 |
|
|
& SQUEEZE_RIGHT , myThid) |
447 |
|
|
WRITE(msgBuf,'(A)') |
448 |
|
|
&' Seaice initialization and IO config., > START < ' |
449 |
|
|
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
450 |
|
|
& SQUEEZE_RIGHT , myThid) |
451 |
|
|
WRITE(msgBuf,'(A)') |
452 |
|
|
&' -------------------------------------------------' |
453 |
|
|
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
454 |
|
|
& SQUEEZE_RIGHT , myThid) |
455 |
|
|
|
456 |
|
|
C-- Initial Condition/Input related param. |
457 |
|
|
CALL WRITE_0D_RL( SEAICE_initialHEFF,INDEX_NONE, |
458 |
|
|
& 'SEAICE_initialHEFF=', ' /* initial sea-ice thickness */') |
459 |
|
|
CALL WRITE_0D_C( AreaFile, -1, INDEX_NONE, |
460 |
|
|
& 'AreaFile =', ' /* Initial ice concentration File */') |
461 |
|
|
CALL WRITE_0D_C( HeffFile, -1, INDEX_NONE, |
462 |
|
|
& 'HeffFile =', ' /* Initial effective ice thickness File */') |
463 |
|
|
CALL WRITE_0D_C( HsnowFile, -1, INDEX_NONE, |
464 |
|
|
& 'HsnowFile =', ' /* Initial snow thickness File */') |
465 |
|
|
#ifdef SEAICE_VARIABLE_SALINITY |
466 |
|
|
CALL WRITE_0D_C( HsaltFile, -1, INDEX_NONE, |
467 |
|
|
& 'HsaltFile =', ' /* Initial HSALT File */') |
468 |
|
|
#endif |
469 |
|
|
CALL WRITE_0D_C( uIceFile, -1, INDEX_NONE, |
470 |
|
|
& 'uIceFile =', ' /* Initial U-ice velocity File */') |
471 |
|
|
CALL WRITE_0D_C( vIceFile, -1, INDEX_NONE, |
472 |
|
|
& 'vIceFile =', ' /* Initial V-ice velocity File */') |
473 |
|
|
|
474 |
|
|
C-- Output related param. |
475 |
|
|
CALL WRITE_0D_L ( SEAICEwriteState, INDEX_NONE, |
476 |
|
|
& 'SEAICEwriteState =', ' /* write sea ice state to file */') |
477 |
|
|
CALL WRITE_0D_RL( SEAICE_monFreq, INDEX_NONE, |
478 |
|
|
& 'SEAICE_monFreq =',' /* monitor frequency */') |
479 |
|
|
CALL WRITE_0D_RL( SEAICE_dumpFreq ,INDEX_NONE, |
480 |
|
|
& 'SEAICE_dumpFreq =', ' /* dump frequency */') |
481 |
|
|
CALL WRITE_0D_RL( SEAICE_taveFreq ,INDEX_NONE, |
482 |
|
|
& 'SEAICE_taveFreq =', ' /* time-averaging frequency */') |
483 |
|
|
CALL WRITE_0D_L ( SEAICE_mon_stdio, INDEX_NONE, |
484 |
|
|
& 'SEAICE_mon_stdio =',' /* write monitor to std-outp */') |
485 |
|
|
CALL WRITE_0D_L ( SEAICE_dump_mdsio, INDEX_NONE, |
486 |
|
|
& 'SEAICE_dump_mdsio =',' /* write snap-shot using MDSIO */') |
487 |
|
|
CALL WRITE_0D_L ( SEAICE_tave_mdsio, INDEX_NONE, |
488 |
|
|
& 'SEAICE_tave_mdsio =',' /* write TimeAverage using MDSIO */') |
489 |
|
|
#ifdef ALLOW_MNC |
490 |
|
|
CALL WRITE_0D_L ( SEAICE_mon_mnc, INDEX_NONE, |
491 |
|
|
& 'SEAICE_mon_mnc =',' /* write monitor to netcdf file */') |
492 |
|
|
CALL WRITE_0D_L ( SEAICE_dump_mnc, INDEX_NONE, |
493 |
|
|
& 'SEAICE_dump_mnc =',' /* write snap-shot using MNC */') |
494 |
|
|
CALL WRITE_0D_L ( SEAICE_tave_mnc, INDEX_NONE, |
495 |
|
|
& 'SEAICE_tave_mnc =',' /* write TimeAverage using MNC */') |
496 |
|
|
#endif /* ALLOW_MNC */ |
497 |
|
|
|
498 |
|
|
#ifdef ALLOW_SITRACER |
499 |
|
|
CALL WRITE_0D_I ( SItrNumInUse, INDEX_NONE, |
500 |
|
|
& 'SItrNumInUse =', |
501 |
|
|
& ' /* number of tracers that are in use (<SItrMaxNum) */') |
502 |
|
|
DO iTracer = 1, SItrNumInUse |
503 |
|
|
IF (SItrName(iTracer).NE.' ') THEN |
504 |
|
|
WRITE(msgBuf,'(A,I3,A)') '== SItracer no. ',iTracer, |
505 |
|
|
&' is in use and defined as' |
506 |
|
|
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
507 |
|
|
& SQUEEZE_RIGHT , myThid) |
508 |
|
|
CALL WRITE_0D_C ( SItrMate(iTracer), -1, INDEX_NONE, |
509 |
|
|
& ' -- SItrMate =',' /* tracer of HEFF or AREA */') |
510 |
|
|
CALL WRITE_0D_C ( SItrName(iTracer), -1, INDEX_NONE, |
511 |
|
|
& ' -- SItrName =',' /* tracer name*/') |
512 |
|
|
CALL WRITE_0D_C ( SItrNameLong(iTracer), -1, INDEX_NONE, |
513 |
|
|
& ' -- SItrNameLong =',' /* tracer long name*/') |
514 |
|
|
CALL WRITE_0D_C ( SItrFile(iTracer), -1, INDEX_NONE, |
515 |
|
|
& ' -- SItrFile =',' /* tracer initial condition file */') |
516 |
|
|
CALL WRITE_0D_C ( SItrUnit(iTracer), -1, INDEX_NONE, |
517 |
|
|
& ' -- SItrUnit =',' /* tracer unit */') |
518 |
|
|
CALL WRITE_0D_RL ( SItrFromOcean0(iTracer), INDEX_NONE, |
519 |
|
|
& ' -- SItrFromOcean0 =',' /* for new ice from freeze */') |
520 |
|
|
CALL WRITE_0D_RL ( SItrFromOceanFrac(iTracer), INDEX_NONE, |
521 |
|
|
& ' -- SItrFromOceanFrac =',' /* for new ice from freeze */') |
522 |
|
|
CALL WRITE_0D_RL ( SItrFromFlood0(iTracer), INDEX_NONE, |
523 |
|
|
& ' -- SItrFromFlood0 =',' /* for new ice from freeze */') |
524 |
|
|
CALL WRITE_0D_RL ( SItrFromFloodFrac(iTracer), INDEX_NONE, |
525 |
|
|
& ' -- SItrFromFloodFrac =',' /* for new ice from freeze */') |
526 |
|
|
CALL WRITE_0D_RL ( SItrExpand0(iTracer), INDEX_NONE, |
527 |
|
|
& ' -- SItrExpand0 =',' /* for ice cover thermo. expans. */') |
528 |
|
|
|
529 |
|
|
ENDIF |
530 |
|
|
ENDDO |
531 |
|
|
#endif /* ALLOW_SITRACER */ |
532 |
|
|
|
533 |
|
|
WRITE(msgBuf,'(A)') |
534 |
|
|
&' ' |
535 |
|
|
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
536 |
|
|
& SQUEEZE_RIGHT , myThid) |
537 |
|
|
WRITE(msgBuf,'(A)') |
538 |
|
|
&' Seaice regularization numbers, > START < ' |
539 |
|
|
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
540 |
|
|
& SQUEEZE_RIGHT , myThid) |
541 |
|
|
WRITE(msgBuf,'(A)') |
542 |
|
|
&' -----------------------------------------------' |
543 |
|
|
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
544 |
|
|
& SQUEEZE_RIGHT , myThid) |
545 |
|
|
|
546 |
|
|
CALL WRITE_0D_RL( SEAICE_EPS ,INDEX_NONE, |
547 |
|
|
& 'SEAICE_EPS =', ' /* reduce derivative singularities */') |
548 |
|
|
CALL WRITE_0D_RL( SEAICE_EPS_SQ ,INDEX_NONE, |
549 |
|
|
& 'SEAICE_EPS_SQ =', ' /* reduce derivative singularities */') |
550 |
|
|
CALL WRITE_0D_RL( SEAICE_area_reg ,INDEX_NONE, |
551 |
|
|
& 'SEAICE_area_reg =', ' /* reduce derivative singularities */') |
552 |
|
|
CALL WRITE_0D_RL( SEAICE_hice_reg ,INDEX_NONE, |
553 |
|
|
& 'SEAICE_hice_reg =', ' /* reduce derivative singularities */') |
554 |
|
|
CALL WRITE_0D_RL( SEAICE_area_floor ,INDEX_NONE, |
555 |
|
|
& 'SEAICE_area_floor =', ' /* reduce derivative singularities */') |
556 |
|
|
|
557 |
|
|
WRITE(msgBuf,'(A)') |
558 |
|
|
&'// =======================================================' |
559 |
|
|
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
560 |
|
|
& SQUEEZE_RIGHT , myThid) |
561 |
|
|
WRITE(msgBuf,'(A)') |
562 |
|
|
&'// Seaice configuration (SEAICE_PARM01) >>> END <<<' |
563 |
|
|
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
564 |
|
|
& SQUEEZE_RIGHT , myThid) |
565 |
|
|
WRITE(msgBuf,'(A)') |
566 |
|
|
&'// =======================================================' |
567 |
|
|
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
568 |
|
|
& SQUEEZE_RIGHT , myThid) |
569 |
|
|
WRITE(msgBuf,'(A)') |
570 |
|
|
|
571 |
|
|
_END_MASTER(myThid) |
572 |
|
|
|
573 |
|
|
RETURN |
574 |
|
|
END |