/[MITgcm]/MITgcm_contrib/dcarroll/highres_darwin/code/darwin_readparams.F
ViewVC logotype

Contents of /MITgcm_contrib/dcarroll/highres_darwin/code/darwin_readparams.F

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


Revision 1.1 - (show annotations) (download)
Sun Sep 22 21:23:46 2019 UTC (5 years, 10 months ago) by dcarroll
Branch: MAIN
CVS Tags: HEAD
Initial check in of high resolution Darwin simulation code

1 C $Header: /u/gcmpack/MITgcm_contrib/ecco_darwin/v4_llc270/code_darwin/darwin_readparams.F,v 1.2 2019/08/26 05:33:09 dcarroll Exp $
2 C $Name: $
3
4 #include "DARWIN_OPTIONS.h"
5
6 CBOP
7 C !ROUTINE: DARWIN_READPARMS
8
9 C !INTERFACE: ==========================================================
10 SUBROUTINE DARWIN_READPARMS( myThid )
11
12 C !DESCRIPTION:
13 C Initialize DARWIN parameters, read in data.darwin
14
15 C !USES: ===============================================================
16 IMPLICIT NONE
17 #include "SIZE.h"
18 #include "EEPARAMS.h"
19 #include "PARAMS.h"
20 #include "GCHEM.h"
21 #include "DARWIN_SIZE.h"
22 #include "DARWIN_IO.h"
23 #include "DARWIN_PARAMS.h"
24 #ifdef WAVEBANDS
25 #include "SPECTRAL_SIZE.h"
26 #include "SPECTRAL.h"
27 #include "WAVEBANDS_PARAMS.h"
28 #endif
29
30 C !INPUT PARAMETERS: ===================================================
31 C myThid :: thread number
32 INTEGER myThid
33
34 C !OUTPUT PARAMETERS: ==================================================
35 C none
36
37 #ifdef ALLOW_DARWIN
38
39 C !LOCAL VARIABLES: ====================================================
40 C iUnit :: unit number for I/O
41 C msgBuf :: message buffer
42 INTEGER iUnit,errIO
43 CHARACTER*(MAX_LEN_MBUF) msgBuf
44 #if defined(WAVEBANDS) || defined(OASIM)
45 INTEGER ilam,i
46 _RL planck, c, hc, oavo, hcoavo, rlamm
47 #endif
48 CEOP
49
50 NAMELIST /DARWIN_FORCING/
51 & darwin_iceFile,
52 & darwin_ironFile,
53 & darwin_PARFile,
54 & darwin_nutWVelFile,
55 & darwin_PO4_relaxFile, darwin_NO3_relaxFile,
56 & darwin_FeT_relaxFile, darwin_Si_relaxFile,
57 & darwin_PO4_fluxFile, darwin_NO3_fluxFile,
58 & darwin_FeT_fluxFile, darwin_Si_fluxFile,
59 & darwin_waterabsorbFile, darwin_phytoabsorbFile,
60 & darwin_surfacespecFile, darwin_acdomFile,
61 & darwin_particleabsorbFile,
62 & darwin_dicSurfFluxFile,
63 & darwin_alkSurfFluxFile,
64 & darwin_caSurfFluxFile,
65 #ifdef OASIM
66 & darwin_oasim_edFile, darwin_oasim_esFile,
67 #endif
68 & darwin_relaxscale,
69 & darwin_ForcingPeriod, darwin_ForcingCycle,
70 #ifdef ALLOW_PAR_DAY
71 & darwin_PARavPeriod,
72 #endif
73 & darwin_seed
74
75 #if defined(WAVEBANDS) || defined(OASIM)
76 NAMELIST /DARWIN_SPECTRAL_PARM/
77 & darwin_waves
78 #ifdef WAVEBANDS
79 #ifdef DAR_CALC_ACDOM
80 & ,darwin_Sdom
81 #endif
82 #ifdef DAR_DIAG_ACDOM
83 & ,darwin_diag_acdom_ilam
84 #endif
85 #ifdef DAR_RADTRANS
86 & ,darwin_PAR_ilamLo
87 & ,darwin_PAR_ilamHi
88 & ,darwin_radmodThresh
89 & ,darwin_Dmax
90 & ,darwin_rmus
91 & ,darwin_rmuu
92 & ,darwin_bbw
93 & ,darwin_bbphy
94 & ,darwin_bbmin
95 & ,darwin_radtrans_kmax
96 & ,darwin_radtrans_niter
97 & ,darwin_part_size_P
98 #endif
99 #endif /* WAVEBANDS */
100 #endif /* WAVEBANDS || OASIM */
101
102 #ifdef DAR_DIAG_CHL
103 NAMELIST /DARWIN_CHL/
104 & Geider_Bigalphachl, Geider_smallalphachl,
105 & Geider_Bigchl2cmax, Geider_smallchl2cmax,
106 & Geider_Bigchl2cmin,
107 & Doney_Bmin, Doney_Bmax, Doney_PARstar,
108 & Cloern_A, Cloern_B, Cloern_C, Cloern_chl2cmin
109 #endif
110
111 #ifdef ALLOW_CARBON
112 NAMELIST /DIC_FORCING/
113 & DIC_windFile, DIC_atmospFile,
114 & dic_pCO2, dic_int1, dic_int2, dic_int3, dic_int4
115 #endif
116
117 C Set defaults values for parameters in DARWIN_IO.h
118 darwin_iceFile=' '
119 darwin_ironFile=' '
120 darwin_PARFile=' '
121 darwin_nutWVelFile=' '
122 darwin_PO4_relaxFile=' '
123 darwin_NO3_relaxFile=' '
124 darwin_FeT_relaxFile=' '
125 darwin_Si_relaxFile=' '
126 darwin_PO4_fluxFile=' '
127 darwin_NO3_fluxFile=' '
128 darwin_FeT_fluxFile=' '
129 darwin_Si_fluxFile=' '
130 darwin_waterabsorbFile=' '
131 darwin_phytoabsorbFile=' '
132 darwin_particleabsorbFile=' '
133 darwin_surfacespecFile=' '
134 darwin_acdomFile=' '
135 darwin_oasim_edFile=' '
136 darwin_oasim_esFile=' '
137 darwin_relaxscale=0. _d 0
138 darwin_seed=0
139 darwin_dicSurfFluxFile=' '
140 darwin_alkSurfFluxFile=' '
141 darwin_caSurfFluxFile=' '
142
143 c default periodic forcing to same as for GCHEM
144 darwin_forcingPeriod=gchem_ForcingPeriod
145 darwin_forcingCycle=gchem_ForcingCycle
146
147 #ifdef ALLOW_CARBON
148 DIC_windFile = ' '
149 DIC_atmospFile= ' '
150 dic_int1 = 0
151 dic_int2 = 0
152 dic_int3 = 0
153 dic_int4 = 0
154 dic_pCO2 = 0. _d 0
155 #endif
156
157 #ifdef ALLOW_PAR_DAY
158 darwin_PARavPeriod=86400. _d 0
159 #endif
160
161 #if defined(WAVEBANDS) || defined(OASIM)
162 DO ilam=1,tlam
163 darwin_waves(ilam) = 0
164 ENDDO
165 IF (tlam.EQ.13) THEN
166 darwin_waves(1) = 400
167 darwin_waves(2) = 425
168 darwin_waves(3) = 450
169 darwin_waves(4) = 475
170 darwin_waves(5) = 500
171 darwin_waves(6) = 525
172 darwin_waves(7) = 550
173 darwin_waves(8) = 575
174 darwin_waves(9) = 600
175 darwin_waves(10) = 625
176 darwin_waves(11) = 650
177 darwin_waves(12) = 675
178 darwin_waves(13) = 700
179 ENDIF
180 #endif
181
182 #ifdef WAVEBANDS
183 #ifdef DAR_CALC_ACDOM
184 darwin_Sdom = 0.014 _d 0
185 #endif
186 #ifdef DAR_DIAG_ACDOM
187 c value >= 100 will be converted to index in wavebands_init_fixed
188 darwin_diag_acdom_ilam = 450
189 #endif
190 #ifdef DAR_RADTRANS
191 darwin_PAR_ilamLo = 1
192 darwin_PAR_ilamHi = tlam
193 darwin_radmodThresh = 1 _d -4
194 darwin_Dmax = 500 _d 0
195 darwin_rmus = 1.0/0.83 _d 0
196 darwin_rmuu = 1.0/0.4 _d 0
197 darwin_bbmin = 0.0002 _d 0
198 darwin_bbw = 0.5 _d 0
199 do i=1,tnabp
200 darwin_bbphy(i) = 0 _d 0
201 enddo
202 darwin_radtrans_kmax = Nr
203 darwin_radtrans_niter = 1
204 darwin_part_size_P = 1 _d -15 ! mmol P per particle
205 #endif
206 #endif /* WAVEBANDS */
207
208 C Open and read the data.darwin file
209 _BEGIN_MASTER(myThid)
210 WRITE(msgBuf,'(A)') ' DARWIN_READPARMS: opening data.darwin'
211 CALL PRINT_MESSAGE(msgBuf, standardMessageUnit,
212 & SQUEEZE_RIGHT , 1)
213 CALL OPEN_COPY_DATA_FILE(
214 I 'data.darwin', 'DARWIN_READPARAMS',
215 O iUnit,
216 I myThid )
217 READ(UNIT=iUnit,NML=DARWIN_FORCING)
218 #ifdef ALLOW_PAR_DAY
219 darwin_PARnav = NINT(darwin_PARavPeriod*nsubtime/dTtracerLev(1))
220 #endif
221
222 #ifdef DAR_DIAG_CHL
223 C default values
224 C Geider: chl:c = max(chl2cmin, chl2cmax/(1+(chl2cmax*alphachl*PARday)/(2*Pcm)))
225 C Pcm = mu*limit*phytoTempFunction
226 Geider_smallalphachl = 2. _d -6 ! mmol C (mg Chl)-1 m2 (uEin)-1
227 Geider_Bigalphachl = 1. _d -6 ! mmol C (mg Chl)-1 m2 (uEin)-1
228 Geider_smallchl2cmax = 0.35 _d 0 ! mg Chl (mmol C)-1
229 Geider_Bigchl2cmax = 0.65 _d 0 ! mg Chl (mmol C)-1
230 Geider_smallchl2cmin = 0.003 _d 0 * 12. _d 0 ! mg Chl a/mmol C
231 Geider_Bigchl2cmin = 0.003 _d 0 * 12. _d 0 ! mg Chl a/mmol C
232
233 C Doney: chl:c = (Bmax - (Bmax-Bmin)*MIN(1,PARday/PARstar))*limit
234 Doney_Bmax = 12. _d 0 / 37. _d 0 ! mg Chl a/mmol C
235 Doney_Bmin = 12. _d 0 / 90. _d 0 ! mg Chl a/mmol C
236 Doney_PARstar = 90. _d 0 / 0.2174 _d 0 ! uEin/m2/s
237
238 C Cloern: chl:c = chl2cmin + A*exp(B*T)*exp(-C*PARday)*limit
239 Cloern_chl2cmin = 0.003 _d 0 * 12. _d 0 ! mg Chl a/mmol C
240 Cloern_A = 0.0154 _d 0 * 12. _d 0 ! mg Chl a/mmol C
241 Cloern_B = 0.050 _d 0 ! (degree C)^{-1}
242 Cloern_C = 0.059 _d 0 * 86400. _d 0 / 1. _d 6 ! m^2 s/uEin
243
244 READ(UNIT=iUnit,NML=DARWIN_CHL)
245 #endif /* DAR_DIAG_CHL */
246
247 #ifdef ALLOW_CARBON
248 READ(UNIT=iUnit,NML=DIC_FORCING)
249 #endif
250
251 #ifdef DAR_RADTRANS
252 #ifndef DAR_NONSPECTRAL_BACKSCATTERING_RATIO
253 DO i=1,tnabp
254 IF ( darwin_bbphy(i) .NE. 0 _d 0 ) THEN
255 WRITE(msgBuf,'(2A)') 'S/R DARWIN_READPARMS:',
256 & 'darwin_bbphy is obsolete.'
257 CALL PRINT_ERROR( msgBuf , 1)
258 WRITE(msgBuf,'(2A)') 'S/R DARWIN_READPARMS:',
259 & 'Backscattering coefficients are now read from'
260 CALL PRINT_ERROR( msgBuf , 1)
261 WRITE(msgBuf,'(2A)') 'S/R DARWIN_READPARMS:',
262 & 'darwin_phytoabsorbFile.'
263 CALL PRINT_ERROR( msgBuf , 1)
264 ENDIF
265 ENDDO
266 #endif
267 #endif
268
269 #if defined(WAVEBANDS) || defined(OASIM)
270 READ(UNIT=iUnit,NML=DARWIN_SPECTRAL_PARM,IOSTAT=errIO)
271 IF ( errIO .LT. 0 ) THEN
272 WRITE(msgBuf,'(A)')
273 & 'S/R DARWIN_READPARMS'
274 CALL PRINT_ERROR( msgBuf , 1)
275 WRITE(msgBuf,'(A)')
276 & 'Error reading darwin package'
277 CALL PRINT_ERROR( msgBuf , 1)
278 WRITE(msgBuf,'(A)')
279 & 'parameter file "data.darwin"'
280 CALL PRINT_ERROR( msgBuf , 1)
281 WRITE(msgBuf,'(A)')
282 & 'Problem in namelist DARWIN_SPECTRAL_PARM'
283 CALL PRINT_ERROR( msgBuf , 1)
284 STOP 'ABNORMAL END: S/R DARWIN_READPARMS'
285 ENDIF
286 #endif
287
288 WRITE(msgBuf,'(A)')
289 & ' DARWIN_READPARMS: finished reading data.darwin'
290 CALL PRINT_MESSAGE(msgBuf, standardMessageUnit,
291 & SQUEEZE_RIGHT , 1)
292
293 C Close the open data file
294 CLOSE(iUnit)
295
296 #if defined(WAVEBANDS) || defined(OASIM)
297 c Quanta conversion
298 planck = 6.6256 _d -34 !Plancks constant J sec
299 c = 2.998 _d 8 !speed of light m/sec
300 hc = 1.0/(planck*c)
301 oavo = 1.0/6.023 _d 23 ! 1/Avogadros number
302 hcoavo = hc*oavo
303 do ilam = 1,tlam
304 rlamm = darwin_waves(ilam)*1 _d -9 !lambda in m
305 WtouEins(ilam) = 1 _d 6*rlamm*hcoavo !Watts to uEin/s conversion
306 enddo
307 #endif
308
309 C-- Print a summary of parameter values:
310 iUnit = standardMessageUnit
311 WRITE(msgBuf,'(A)') '// ==================================='
312 CALL PRINT_MESSAGE( msgBuf, iUnit, SQUEEZE_RIGHT , myThid )
313 WRITE(msgBuf,'(A)') '// darwin parameters '
314 CALL PRINT_MESSAGE( msgBuf, iUnit, SQUEEZE_RIGHT , myThid )
315 WRITE(msgBuf,'(A)') '// ==================================='
316 CALL PRINT_MESSAGE( msgBuf, iUnit, SQUEEZE_RIGHT , myThid )
317 CALL WRITE_0D_I( darwin_seed, INDEX_NONE,
318 & 'darwin_seed =',
319 & ' /* seed for random number generator */')
320
321 WRITE(msgBuf,'(A)') ' -----------------------------------'
322 CALL PRINT_MESSAGE( msgBuf, iUnit, SQUEEZE_RIGHT, myThid )
323
324 #if defined(WAVEBANDS) || defined(OASIM)
325 CALL WRITE_1D_I( darwin_waves, tlam, 0,
326 & 'darwin_waves =',
327 &' /* "central" wavelengths of wavebands */')
328 #endif
329 #ifdef WAVEBANDS
330 #ifdef DAR_CALC_ACDOM
331 CALL WRITE_0D_RL( darwin_Sdom, INDEX_NONE,
332 & 'darwin_Sdom =',
333 &' /* spectral slope for aCDOM */')
334 #endif
335 #ifdef DAR_DIAG_ACDOM
336 CALL WRITE_0D_I( darwin_diag_acdom_ilam, INDEX_NONE,
337 & 'darwin_diag_acdom_ilam =',
338 &' /* waveband to use for aCDOM diagnostic */')
339 #endif
340 #ifdef DAR_RADTRANS
341 CALL WRITE_0D_I( darwin_PAR_ilamLo, INDEX_NONE,
342 & 'darwin_PAR_ilamLo =',
343 &' /* waveband index of PAR lower bound */')
344 CALL WRITE_0D_I( darwin_PAR_ilamHi, INDEX_NONE,
345 & 'darwin_PAR_ilamHi =',
346 &' /* waveband index of PAR upper bound */')
347 CALL WRITE_0D_RL( darwin_radmodThresh, INDEX_NONE,
348 & 'darwin_radmodThresh =',
349 &' /* threshold for calling radmod (W/m2/waveband) */')
350 CALL WRITE_0D_RL( darwin_Dmax, INDEX_NONE,
351 & 'darwin_Dmax =',
352 &' /* depth at which Ed is assumed zero */')
353 CALL WRITE_0D_RL( darwin_rmus, INDEX_NONE,
354 & 'darwin_rmus =',
355 &' /* inverse average cosine of downward diffuse irradiance */')
356 CALL WRITE_0D_RL( darwin_rmuu, INDEX_NONE,
357 & 'darwin_rmuu =',
358 &' /* inverse average cosine of upward diffuse irradiance */')
359 CALL WRITE_0D_RL( darwin_bbw, INDEX_NONE,
360 & 'darwin_bbw =',
361 &' /* backscattering to forward scattering ratio for water */')
362 CALL WRITE_0D_RL( darwin_bbmin, INDEX_NONE,
363 & 'darwin_bbmin =',
364 &' /* minimum backscattering coefficient (1/m) */')
365 CALL WRITE_1D_RL( darwin_bbphy, tnabp, 0,
366 & 'darwin_bbphy =',
367 &' /* backscattering to forward scattering ratio for phyto */')
368 CALL WRITE_0D_I( darwin_radtrans_kmax, INDEX_NONE,
369 & 'darwin_radtrans_kmax =',
370 &' /* deepest level in which to compute irradiances */')
371 CALL WRITE_0D_I( darwin_radtrans_niter, INDEX_NONE,
372 & 'darwin_radtrans_niter =',
373 &' /* number of "radtrans improvement" iterations */')
374 #endif /* DAR_RADTRANS */
375 #endif /* WAVEBANDS */
376
377 WRITE(msgBuf,'(A)') ' ==================================='
378 CALL PRINT_MESSAGE( msgBuf, iUnit, SQUEEZE_RIGHT, myThid )
379
380 _END_MASTER(myThid)
381
382 C Everyone else must wait for the parameters to be loaded
383 _BARRIER
384
385 #endif /* ALLOW_DARWIN */
386
387 RETURN
388 END

  ViewVC Help
Powered by ViewVC 1.1.22