/[MITgcm]/MITgcm_contrib/ecco_darwin/v4_3deg/code/darwin_fields_load.F
ViewVC logotype

Contents of /MITgcm_contrib/ecco_darwin/v4_3deg/code/darwin_fields_load.F

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


Revision 1.2 - (show annotations) (download)
Mon Jan 27 06:31:50 2020 UTC (6 years, 7 months ago) by dimitri
Branch: MAIN
CVS Tags: HEAD
Changes since 1.1: +1 -1 lines
FILE REMOVED
where possible, using code and input files from va_llc270

1 C $Header: /u/gcmpack/MITgcm_contrib/ecco_darwin/v4_3deg/code/darwin_fields_load.F,v 1.1 2020/01/27 02:52:02 dimitri Exp $
2 C $Name: $
3
4 #include "CPP_OPTIONS.h"
5 #include "PTRACERS_OPTIONS.h"
6 #include "DARWIN_OPTIONS.h"
7
8 #ifdef ALLOW_PTRACERS
9 #ifdef ALLOW_DARWIN
10
11 CStartOfInterFace
12 SUBROUTINE DARWIN_FIELDS_LOAD (
13 I myIter,myTime,myThid)
14
15 C /==========================================================\
16 C | SUBROUTINE DARWIN_FIELDS_LOAD |
17 C | o Read in fields needed for ice fraction and |
18 C | iron aeolian flux terms, PAR and nut_wvel |
19 C | adapted from NPZD2Fe - Stephanie Dutkiewicz 2005 |
20 C |==========================================================|
21 IMPLICIT NONE
22
23 C == GLobal variables ==
24 #include "SIZE.h"
25 #include "EEPARAMS.h"
26 #include "PARAMS.h"
27 #include "GRID.h"
28 #include "DARWIN_SIZE.h"
29 #include "SPECTRAL_SIZE.h"
30 #include "DARWIN_IO.h"
31 #include "DARWIN_FLUX.h"
32 c#include "GCHEM.h"
33 #ifdef ALLOW_SEAICE
34 #include "SEAICE_SIZE.h"
35 #include "SEAICE.h"
36 #endif
37 #ifdef ALLOW_THSICE
38 #include "THSICE_VARS.h"
39 #endif
40 #ifdef ALLOW_OFFLINE
41 #include "OFFLINE.h"
42 #endif
43 #ifdef OASIM
44 #include "SPECTRAL.h"
45 #endif
46
47 C == Routine arguments ==
48 INTEGER myIter
49 _RL myTime
50 INTEGER myThid
51 C == Local variables ==
52 C msgBuf - Informational/error meesage buffer
53 CHARACTER*(MAX_LEN_MBUF) msgBuf
54 COMMON/ darwin_load /
55 & fice0, fice1, featmos0, featmos1, sur_par0, sur_par1
56 #ifdef ALLOW_CARBON
57 & ,dicwind0, dicwind1,atmosp0, atmosp1
58 #endif
59 #ifdef NUT_SUPPLY
60 & , nut_wvel0, nut_wvel1
61 #endif
62 #ifdef RELAX_NUTS
63 & , po4_obs0, po4_obs1, no3_obs0, no3_obs1
64 & , fet_obs0, fet_obs1, si_obs0, si_obs1
65 #endif
66 #ifdef FLUX_NUTS
67 & , po4_flx0, po4_flx1, no3_flx0, no3_flx1
68 & , fet_flx0, fet_flx1, si_flx0, si_flx1
69 #endif
70 #ifdef ADKINNS_SURF_FLUX
71 & , dicSurf_flx0, dicSurf_flx1
72 & , alkSurf_flx0, alkSurf_flx1
73 & , caSurf_flx0, caSurf_flx1
74 #endif
75 #ifdef ALLOW_SED_DISS_FLUX
76 & , BBLThickness
77 #endif
78 #ifdef OASIM
79 & , oasim_ed0, oasim_ed1, oasim_es0, oasim_es1
80 #endif
81 _RS fice0 (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
82 _RS fice1 (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
83 _RS featmos0 (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
84 _RS featmos1 (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
85 _RS sur_par0 (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
86 _RS sur_par1 (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
87 #ifdef ALLOW_CARBON
88 _RS dicwind0 (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
89 _RS dicwind1 (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
90 _RS atmosp0 (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
91 _RS atmosp1 (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
92 #endif
93 #ifdef NUT_SUPPLY
94 _RS nut_wvel0 (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nR,nSx,nSy)
95 _RS nut_wvel1 (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nR,nSx,nSy)
96 #endif
97 #ifdef RELAX_NUTS
98 _RS po4_obs0(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nR,nSx,nSy)
99 _RS po4_obs1(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nR,nSx,nSy)
100 _RS no3_obs0(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nR,nSx,nSy)
101 _RS no3_obs1(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nR,nSx,nSy)
102 _RS fet_obs0(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nR,nSx,nSy)
103 _RS fet_obs1(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nR,nSx,nSy)
104 _RS si_obs0(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nR,nSx,nSy)
105 _RS si_obs1(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nR,nSx,nSy)
106 #endif
107 #ifdef FLUX_NUTS
108 _RS po4_flx0(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nR,nSx,nSy)
109 _RS po4_flx1(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nR,nSx,nSy)
110 _RS no3_flx0(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nR,nSx,nSy)
111 _RS no3_flx1(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nR,nSx,nSy)
112 _RS fet_flx0(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nR,nSx,nSy)
113 _RS fet_flx1(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nR,nSx,nSy)
114 _RS si_flx0(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nR,nSx,nSy)
115 _RS si_flx1(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nR,nSx,nSy)
116 #endif
117 #ifdef ADKINS_SURF_FLUX
118 _RS dicSurf_flx0(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
119 _RS dicSurf_flx1(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
120 _RS alkSurf_flx0(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
121 _RS alkSurf_flx1(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
122 _RS caSurf_flx0(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
123 _RS caSurf_flx1(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
124 #endif
125 #ifdef OASIM
126 _RS oasim_ed0(1-OLx:sNx+OLx,1-OLy:sNy+OLy,tlam,nSx,nSy)
127 _RS oasim_ed1(1-OLx:sNx+OLx,1-OLy:sNy+OLy,tlam,nSx,nSy)
128 _RS oasim_es0(1-OLx:sNx+OLx,1-OLy:sNy+OLy,tlam,nSx,nSy)
129 _RS oasim_es1(1-OLx:sNx+OLx,1-OLy:sNy+OLy,tlam,nSx,nSy)
130 _RS tmp1(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
131 _RS tmp2(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
132 INTEGER ilam, fp, nj0, nj1
133 #endif
134 INTEGER bi,bj,i,j,k,intime0,intime1
135 _RL aWght,bWght,rdt
136 _RL tmp1Wght, tmp2Wght
137 INTEGER nForcingPeriods,Imytm,Ifprd,Ifcyc,Iftm
138 c
139 c
140
141 #ifdef ALLOW_SED_DISS_FLUX
142
143 C initialize BBL thickness
144 DO bj = myByLo(myThid), myByHi(myThid)
145 DO bi = myBxLo(myThid), myBxHi(myThid)
146 DO j=1-OLy,sNy+OLy
147 DO i=1-OLx,sNx+OLx
148 BBLThickness(i,j,bi,bj) = 0. _d 0
149 ENDDO
150 ENDDO
151 ENDDO
152 ENDDO
153
154 if (darwin_BBLFile .NE. ' ') then
155 CALL READ_REC_XY_RS(darwin_BBLFile,BBLThickness,
156 & 1,0,myThid)
157 endif
158
159 _EXCH_XY_RS(BBLThickness, myThid)
160
161 #endif /* ALLOW_SED_DISS_FLUX */
162
163 IF ( darwin_ForcingPeriod .NE. 0. _d 0 ) THEN
164
165 C First call requires that we initialize everything to zero for safety
166 cQQQ need to check timing
167 IF ( myIter .EQ. nIter0 ) THEN
168 CALL LEF_ZERO( fice0,myThid )
169 CALL LEF_ZERO( fice1,myThid )
170 CALL LEF_ZERO( featmos0,myThid )
171 CALL LEF_ZERO( featmos1,myThid )
172 CALL LEF_ZERO( sur_par0,myThid )
173 CALL LEF_ZERO( sur_par1,myThid )
174 #ifdef ALLOW_CARBON
175 CALL LEF_ZERO( dicwind0,myThid )
176 CALL LEF_ZERO( dicwind1,myThid )
177 CALL LEF_ZERO( atmosp0,myThid )
178 CALL LEF_ZERO( atmosp1,myThid )
179 #endif
180 #ifdef NUT_SUPPLY
181 DO bj = myByLo(myThid), myByHi(myThid)
182 DO bi = myBxLo(myThid), myBxHi(myThid)
183 DO j=1-Oly,sNy+Oly
184 DO i=1-Olx,sNx+Olx
185 DO k=1,nR
186 nut_wvel0(i,j,k,bi,bj) = 0. _d 0
187 nut_wvel1(i,j,k,bi,bj) = 0. _d 0
188 ENDDO
189 ENDDO
190 ENDDO
191 ENDDO
192 ENDDO
193 #endif
194 #ifdef RELAX_NUTS
195 DO bj = myByLo(myThid), myByHi(myThid)
196 DO bi = myBxLo(myThid), myBxHi(myThid)
197 DO j=1-Oly,sNy+Oly
198 DO i=1-Olx,sNx+Olx
199 DO k=1,nR
200 po4_obs0(i,j,k,bi,bj) = 0. _d 0
201 po4_obs1(i,j,k,bi,bj) = 0. _d 0
202 no3_obs0(i,j,k,bi,bj) = 0. _d 0
203 no3_obs1(i,j,k,bi,bj) = 0. _d 0
204 fet_obs0(i,j,k,bi,bj) = 0. _d 0
205 fet_obs1(i,j,k,bi,bj) = 0. _d 0
206 si_obs0(i,j,k,bi,bj) = 0. _d 0
207 si_obs1(i,j,k,bi,bj) = 0. _d 0
208 ENDDO
209 ENDDO
210 ENDDO
211 ENDDO
212 ENDDO
213 #endif
214 #ifdef FLUX_NUTS
215 DO bj = myByLo(myThid), myByHi(myThid)
216 DO bi = myBxLo(myThid), myBxHi(myThid)
217 DO j=1-Oly,sNy+Oly
218 DO i=1-Olx,sNx+Olx
219 DO k=1,nR
220 po4_flx0(i,j,k,bi,bj) = 0. _d 0
221 po4_flx1(i,j,k,bi,bj) = 0. _d 0
222 no3_flx0(i,j,k,bi,bj) = 0. _d 0
223 no3_flx1(i,j,k,bi,bj) = 0. _d 0
224 fet_flx0(i,j,k,bi,bj) = 0. _d 0
225 fet_flx1(i,j,k,bi,bj) = 0. _d 0
226 si_flx0(i,j,k,bi,bj) = 0. _d 0
227 si_flx1(i,j,k,bi,bj) = 0. _d 0
228 ENDDO
229 ENDDO
230 ENDDO
231 ENDDO
232 ENDDO
233 #endif
234 #ifdef ADKINS_SURF_FLUX
235 DO bj = myByLo(myThid), myByHi(myThid)
236 DO bi = myBxLo(myThid), myBxHi(myThid)
237 DO j=1-Oly,sNy+Oly
238 DO i=1-Olx,sNx+Olx
239 dicSurf_flx0(i,j,bi,bj) = 0. _d 0
240 dicSurf_flx1(i,j,bi,bj) = 0. _d 0
241 alkSurf_flx0(i,j,bi,bj) = 0. _d 0
242 alkSurf_flx1(i,j,bi,bj) = 0. _d 0
243 caSurf_flx0(i,j,bi,bj) = 0. _d 0
244 caSurf_flx1(i,j,bi,bj) = 0. _d 0
245 ENDDO
246 ENDDO
247 ENDDO
248 ENDDO
249 #endif
250 #ifdef OASIM
251 DO bj = myByLo(myThid), myByHi(myThid)
252 DO bi = myBxLo(myThid), myBxHi(myThid)
253 DO j=1-Oly,sNy+Oly
254 DO i=1-Olx,sNx+Olx
255 tmp1(i,j,bi,bj) = 0. _d 0
256 tmp2(i,j,bi,bj) = 0. _d 0
257 DO ilam=1,tlam
258 oasim_ed0(i,j,ilam,bi,bj) = 0. _d 0
259 oasim_ed1(i,j,ilam,bi,bj) = 0. _d 0
260 oasim_es0(i,j,ilam,bi,bj) = 0. _d 0
261 oasim_es1(i,j,ilam,bi,bj) = 0. _d 0
262 ENDDO
263 ENDDO
264 ENDDO
265 ENDDO
266 ENDDO
267 #endif
268 DO bj = myByLo(myThid), myByHi(myThid)
269 DO bi = myBxLo(myThid), myBxHi(myThid)
270 DO j=1-Oly,sNy+Oly
271 DO i=1-Olx,sNx+Olx
272 DO k=1,nR
273 budgetConsumpDIC_PIC(i,j,k,bi,bj) = 0. _d 0
274 disscPIC(i,j,k,bi,bj) = 0. _d 0
275 ENDDO
276 ENDDO
277 ENDDO
278 ENDDO
279 ENDDO
280
281 ENDIF
282
283 C Now calculate whether it is time to update the forcing arrays
284 rdt=1. _d 0 / deltaTclock
285 nForcingPeriods=
286 & int(darwin_ForcingCycle/darwin_ForcingPeriod+0.5 _d 0)
287 Imytm=int(myTime*rdt+0.5 _d 0)
288 Ifprd=int(darwin_ForcingPeriod*rdt+0.5 _d 0)
289 Ifcyc=int(darwin_ForcingCycle*rdt+0.5 _d 0)
290 Iftm=mod( Imytm+Ifcyc-Ifprd/2,Ifcyc)
291
292 intime0=int(Iftm/Ifprd)
293 intime1=mod(intime0+1,nForcingPeriods)
294 tmp1Wght = FLOAT( Iftm-Ifprd*intime0 )
295 tmp2Wght = FLOAT( Ifprd )
296 aWght = tmp1Wght / tmp2Wght
297 bWght = 1. _d 0 - aWght
298
299 intime0=intime0+1
300 intime1=intime1+1
301
302
303 cQQ something funny about timing here - need nIter0+1
304 c but seems okay for remaining timesteps
305 IF (
306 & Iftm-Ifprd*(intime0-1) .EQ. 0
307 & .OR. myIter .EQ. nIter0
308 & ) THEN
309
310
311 _BEGIN_MASTER(myThid)
312
313 C If the above condition is met then we need to read in
314 C data for the period ahead and the period behind myTime.
315 WRITE(msgBuf,'(A,1P1E20.12,X,I10)')
316 & 'S/R DARWIN_FIELDS_LOAD: Reading forcing data',
317 & myTime,myIter
318 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
319 & SQUEEZE_RIGHT, myThid )
320
321 IF ( darwin_iceFile .NE. ' ' ) THEN
322 CALL READ_REC_XY_RS( darwin_iceFile,fice0,intime0,
323 & myIter,myThid )
324 CALL READ_REC_XY_RS( darwin_IceFile,fice1,intime1,
325 & myIter,myThid )
326 ENDIF
327 IF ( darwin_ironFile .NE. ' ' ) THEN
328 CALL READ_REC_XY_RS( darwin_ironFile,featmos0,intime0,
329 & myIter,myThid )
330 CALL READ_REC_XY_RS( darwin_ironFile,featmos1,intime1,
331 & myIter,myThid )
332 ENDIF
333 IF ( darwin_PARFile .NE. ' ' ) THEN
334 CALL READ_REC_XY_RS( darwin_PARFile,sur_par0,intime0,
335 & myIter,myThid )
336 CALL READ_REC_XY_RS( darwin_PARFile,sur_par1,intime1,
337 & myIter,myThid )
338 ENDIF
339 #ifdef ALLOW_CARBON
340 IF ( DIC_windFile .NE. ' ' ) THEN
341 CALL READ_REC_XY_RS( DIC_windFile,dicwind0,intime0,
342 & myIter,myThid )
343 CALL READ_REC_XY_RS( DIC_windFile,dicwind1,intime1,
344 & myIter,myThid )
345 ENDIF
346 IF ( DIC_atmospFile .NE. ' ' ) THEN
347 CALL READ_REC_XY_RS( DIC_atmospFile,atmosp0,intime0,
348 & myIter,myThid )
349 CALL READ_REC_XY_RS( DIC_atmospFile,atmosp1,intime1,
350 & myIter,myThid )
351 ENDIF
352 #endif
353 #ifdef NUT_SUPPLY
354 IF ( darwin_nutWVelFile .NE. ' ' ) THEN
355 CALL READ_REC_XYZ_RS( darwin_nutWVelFile,nut_wvel0,intime0,
356 & myIter,myThid )
357 CALL READ_REC_XYZ_RS( darwin_nutWVelFile,nut_wvel1,intime1,
358 & myIter,myThid )
359 ENDIF
360 #endif
361 #ifdef RELAX_NUTS
362 IF ( darwin_PO4_RelaxFile .NE. ' ' ) THEN
363 CALL READ_REC_XYZ_RS( darwin_PO4_RelaxFile,po4_obs0,intime0,
364 & myIter,myThid )
365 CALL READ_REC_XYZ_RS( darwin_PO4_RelaxFile,po4_obs1,intime1,
366 & myIter,myThid )
367 ENDIF
368 IF ( darwin_NO3_RelaxFile .NE. ' ' ) THEN
369 CALL READ_REC_XYZ_RS( darwin_NO3_RelaxFile,no3_obs0,intime0,
370 & myIter,myThid )
371 CALL READ_REC_XYZ_RS( darwin_NO3_RelaxFile,no3_obs1,intime1,
372 & myIter,myThid )
373 ENDIF
374 IF ( darwin_Fet_RelaxFile .NE. ' ' ) THEN
375 CALL READ_REC_XYZ_RS( darwin_Fet_RelaxFile,fet_obs0,intime0,
376 & myIter,myThid )
377 CALL READ_REC_XYZ_RS( darwin_Fet_RelaxFile,fet_obs1,intime1,
378 & myIter,myThid )
379 ENDIF
380 IF ( darwin_Si_RelaxFile .NE. ' ' ) THEN
381 CALL READ_REC_XYZ_RS( darwin_Si_RelaxFile,si_obs0,intime0,
382 & myIter,myThid )
383 CALL READ_REC_XYZ_RS( darwin_Si_RelaxFile,si_obs1,intime1,
384 & myIter,myThid )
385 ENDIF
386 #endif
387 #ifdef FLUX_NUTS
388 IF ( darwin_PO4_FluxFile .NE. ' ' ) THEN
389 CALL READ_REC_XYZ_RS( darwin_PO4_FluxFile,po4_flx0,intime0,
390 & myIter,myThid )
391 CALL READ_REC_XYZ_RS( darwin_PO4_FluxFile,po4_flx1,intime1,
392 & myIter,myThid )
393 ENDIF
394 IF ( darwin_NO3_FluxFile .NE. ' ' ) THEN
395 CALL READ_REC_XYZ_RS( darwin_NO3_FluxFile,no3_flx0,intime0,
396 & myIter,myThid )
397 CALL READ_REC_XYZ_RS( darwin_NO3_FluxFile,no3_flx1,intime1,
398 & myIter,myThid )
399 ENDIF
400 IF ( darwin_Fet_FluxFile .NE. ' ' ) THEN
401 CALL READ_REC_XYZ_RS( darwin_Fet_FluxFile,fet_flx0,intime0,
402 & myIter,myThid )
403 CALL READ_REC_XYZ_RS( darwin_Fet_FluxFile,fet_flx1,intime1,
404 & myIter,myThid )
405 ENDIF
406 IF ( darwin_Si_FluxFile .NE. ' ' ) THEN
407 CALL READ_REC_XYZ_RS( darwin_Si_FluxFile,si_flx0,intime0,
408 & myIter,myThid )
409 CALL READ_REC_XYZ_RS( darwin_Si_FluxFile,si_flx1,intime1,
410 & myIter,myThid )
411 ENDIF
412 #endif
413 #ifdef ADKINS_SURF_FLUX
414 IF ( darwin_dicSurfFluxFile .NE. ' ' ) THEN
415 CALL READ_REC_XY_RS( darwin_dicSurfFluxFile,dicSurf_flx0,
416 & intime0,myIter,myThid )
417 CALL READ_REC_XY_RS( darwin_dicSurfFluxFile,dicSurf_flx1,
418 & intime1,myIter,myThid )
419 ENDIF
420 IF ( darwin_alkSurfFluxFile .NE. ' ' ) THEN
421 CALL READ_REC_XY_RS( darwin_alkSurfFluxFile,alkSurf_flx0,
422 & intime0,myIter,myThid )
423 CALL READ_REC_XY_RS( darwin_alkSurfFluxFile,alkSurf_flx1,
424 & intime1,myIter,myThid )
425 ENDIF
426 IF ( darwin_caSurfFluxFile .NE. ' ' ) THEN
427 CALL READ_REC_XY_RS( darwin_caSurfFluxFile,caSurf_flx0,
428 & intime0,myIter,myThid )
429 CALL READ_REC_XY_RS( darwin_caSurfFluxFile,caSurf_flx1,
430 & intime1,myIter,myThid )
431 ENDIF
432 #endif
433 #ifdef OASIM
434 IF ( darwin_oasim_edFile .NE. ' ' ) THEN
435 nj0= (intime0-1)*tlam
436 nj1= (intime1-1)*tlam
437 c print*,'ZZ nj0,nj1',nj0, nj1, intime0, intime1
438 do ilam=1,tlam
439 nj0=nj0+1
440 CALL READ_REC_XY_RS( darwin_oasim_edFile, tmp1,nj0,
441 & myIter,myThid )
442 nj1=nj1+1
443 CALL READ_REC_XY_RS( darwin_oasim_edFile, tmp2,nj1,
444 & myIter,myThid )
445 DO bj = myByLo(myThid), myByHi(myThid)
446 DO bi = myBxLo(myThid), myBxHi(myThid)
447 DO j=1-Oly,sNy+Oly
448 DO i=1-Olx,sNx+Olx
449 oasim_ed0(i,j,ilam,bi,bj) = tmp1(i,j,bi,bj)
450 oasim_ed1(i,j,ilam,bi,bj) = tmp2(i,j,bi,bj)
451 ENDDO
452 ENDDO
453 ENDDO
454 ENDDO
455 c print*,oasim_ed0(1,1,ilam,1,1), oasim_ed1(1,1,ilam,1,1)
456 enddo
457 c CALL READ_MFLDS_3D_RS( darwin_oasim_edFile, oasim_ed0,
458 c & nj0, fp, tlam, myIter,myThid )
459 c CALL READ_MFLDS_3D_RS( darwin_oasim_edFile, oasim_ed1,
460 c & nj1, fp, tlam, myIter,myThid )
461 ENDIF
462 IF ( darwin_oasim_esFile .NE. ' ' ) THEN
463 nj0= (intime0-1)*tlam
464 nj1= (intime1-1)*tlam
465 do ilam=1,tlam
466 nj0=nj0+1
467 CALL READ_REC_XY_RS( darwin_oasim_esFile, tmp1,nj0,
468 & myIter,myThid )
469 nj1=nj1+1
470 CALL READ_REC_XY_RS( darwin_oasim_esFile, tmp2,nj1,
471 & myIter,myThid )
472 DO bj = myByLo(myThid), myByHi(myThid)
473 DO bi = myBxLo(myThid), myBxHi(myThid)
474 DO j=1-Oly,sNy+Oly
475 DO i=1-Olx,sNx+Olx
476 oasim_es0(i,j,ilam,bi,bj) = tmp1(i,j,bi,bj)
477 oasim_es1(i,j,ilam,bi,bj) = tmp2(i,j,bi,bj)
478 ENDDO
479 ENDDO
480 ENDDO
481 ENDDO
482 enddo
483 c CALL READ_MFLDS_3D_RS( darwin_oasim_esFile, oasim_es0,
484 c & nj0, fp, tlam, myIter,myThid )
485 c CALL READ_MFLDS_3D_RS( darwin_oasim_esFile, oasim_es1,
486 c & nj1, fp, tlam, myIter,myThid )
487 ENDIF
488 #endif
489
490 _END_MASTER(myThid)
491 C
492 _EXCH_XY_RS(fice0, myThid )
493 _EXCH_XY_RS(fice1, myThid )
494 _EXCH_XY_RS(featmos0, myThid )
495 _EXCH_XY_RS(featmos1, myThid )
496 _EXCH_XY_RS(sur_par0, myThid )
497 _EXCH_XY_RS(sur_par1, myThid )
498 #ifdef ALLOW_CARBON
499 _EXCH_XY_RS(dicwind0, myThid )
500 _EXCH_XY_RS(dicwind1, myThid )
501 _EXCH_XY_RS(atmosp0, myThid )
502 _EXCH_XY_RS(atmosp1, myThid )
503 #endif
504 #ifdef NUT_SUPPLY
505 _EXCH_XYZ_RS(nut_wvel0, myThid )
506 _EXCH_XYZ_RS(nut_wvel1, myThid )
507 #endif
508 #ifdef RELAX_NUTS
509 _EXCH_XYZ_RS(po4_obs0, myThid )
510 _EXCH_XYZ_RS(po4_obs1, myThid )
511 _EXCH_XYZ_RS(no3_obs0, myThid )
512 _EXCH_XYZ_RS(no3_obs1, myThid )
513 _EXCH_XYZ_RS(fet_obs0, myThid )
514 _EXCH_XYZ_RS(fet_obs1, myThid )
515 _EXCH_XYZ_RS(si_obs0, myThid )
516 _EXCH_XYZ_RS(si_obs1, myThid )
517 #endif
518 #ifdef FLUX_NUTS
519 _EXCH_XYZ_RS(po4_flx0, myThid )
520 _EXCH_XYZ_RS(po4_flx1, myThid )
521 _EXCH_XYZ_RS(no3_flx0, myThid )
522 _EXCH_XYZ_RS(no3_flx1, myThid )
523 _EXCH_XYZ_RS(fet_flx0, myThid )
524 _EXCH_XYZ_RS(fet_flx1, myThid )
525 _EXCH_XYZ_RS(si_flx0, myThid )
526 _EXCH_XYZ_RS(si_flx1, myThid )
527 #endif
528 #ifdef ADKINS_SURF_FLUX
529 _EXCH_XY_RS(dicSurf_flx0, myThid )
530 _EXCH_XY_RS(dicSurf_flx1, myThid )
531 _EXCH_XY_RS(alkSurf_flx0, myThid )
532 _EXCH_XY_RS(alkSurf_flx1, myThid )
533 _EXCH_XY_RS(caSurf_flx0, myThid )
534 _EXCH_XY_RS(caSurf_flx1, myThid )
535 #endif
536 #ifdef OASIM
537 CALL EXCH_3D_RS (oasim_ed0, tlam, myThid)
538 CALL EXCH_3D_RS (oasim_ed1, tlam, myThid)
539 CALL EXCH_3D_RS (oasim_es0, tlam, myThid)
540 CALL EXCH_3D_RS (oasim_es1, tlam, myThid)
541 #endif
542
543
544 C
545 ENDIF
546
547 DO bj = myByLo(myThid), myByHi(myThid)
548 DO bi = myBxLo(myThid), myBxHi(myThid)
549 DO j=1-Oly,sNy+Oly
550 DO i=1-Olx,sNx+Olx
551 cQQ need to include ice model here, if used
552 #ifdef ALLOW_THSICE
553 FIce(i,j,bi,bj) = iceMask(i,j,bi,bj)
554 #else
555 #ifdef ALLOW_SEAICE
556 FIce(i,j,bi,bj) = AREA(i,j,bi,bj)
557 #else
558 IF ( darwin_iceFile .NE. ' ' ) THEN
559 fice(i,j,bi,bj) = bWght*fice0(i,j,bi,bj)
560 & +aWght*fice1(i,j,bi,bj)
561 ELSE
562 fice(i,j,bi,bj) = 0. _d 0
563 ENDIF
564 #endif
565 #endif
566 c or use offline fields if provided
567 #ifdef ALLOW_OFFLINE
568 IF (IceFile .NE. ' ') THEN
569 fice(i,j,bi,bj) = ICEM(i,j,bi,bj)
570 ENDIF
571 #endif
572
573 IF ( darwin_ironFile .NE. ' ' ) THEN
574 inputFe(i,j,bi,bj) = bWght*featmos0(i,j,bi,bj)
575 & +aWght*featmos1(i,j,bi,bj)
576 c convert to mmol/m2/s
577 inputFe(i,j,bi,bj) = 1000.d0*inputFe(i,j,bi,bj)
578 ELSE
579 inputFe(i,j,bi,bj) = 0. _d 0
580 ENDIF
581 c light (load as Ein/m2/d; convert to uEin/m2/s)
582 IF ( darwin_PARFile .NE. ' ' ) THEN
583 sur_par(i,j,bi,bj) = bWght*sur_par0(i,j,bi,bj)
584 & +aWght*sur_par1(i,j,bi,bj)
585 sur_par(i,j,bi,bj) = sur_par(i,j,bi,bj)*1. _d 6/86400. _d 0
586 ELSE
587 sur_par(i,j,bi,bj) = 200. _d 0*maskC(i,j,1,bi,bj)
588 ENDIF
589 #ifdef ALLOW_CARBON
590 IF ( DIC_windFile .NE. ' ' ) THEN
591 WIND(i,j,bi,bj) = bWght*dicwind0(i,j,bi,bj)
592 & + aWght*dicwind1(i,j,bi,bj)
593 ELSE
594 WIND(i,j,bi,bj) = 5. _d 0
595 ENDIF
596 #ifndef USE_PLOAD
597 IF ( DIC_atmospFile .NE. ' ' ) THEN
598 AtmosP(i,j,bi,bj) = bWght*atmosp0(i,j,bi,bj)
599 & + aWght*atmosp1(i,j,bi,bj)
600 ELSE
601 AtmosP(i,j,bi,bj) = 1. _d 0
602 ENDIF
603 #endif
604 #endif
605 #ifdef NUT_SUPPLY
606 c artificial wvel for nutrient supply in 1-d and 2-d models
607 IF ( darwin_nutWVelFile .NE. ' ' ) THEN
608 DO k=1,nR
609 nut_wvel(i,j,k,bi,bj) = bWght*nut_wvel0(i,j,k,bi,bj)
610 & +aWght*nut_wvel1(i,j,k,bi,bj)
611 ENDDO
612 ENDIF
613 #endif
614 #ifdef RELAX_NUTS
615 IF ( darwin_PO4_RelaxFile .NE. ' ' ) THEN
616 DO k=1,nR
617 po4_obs(i,j,k,bi,bj) = bWght*po4_obs0(i,j,k,bi,bj)
618 & +aWght*po4_obs1(i,j,k,bi,bj)
619 ENDDO
620 ENDIF
621 IF ( darwin_NO3_RelaxFile .NE. ' ' ) THEN
622 DO k=1,nR
623 no3_obs(i,j,k,bi,bj) = bWght*no3_obs0(i,j,k,bi,bj)
624 & +aWght*no3_obs1(i,j,k,bi,bj)
625 ENDDO
626 ENDIF
627 IF ( darwin_Fet_RelaxFile .NE. ' ' ) THEN
628 DO k=1,nR
629 fet_obs(i,j,k,bi,bj) = bWght*fet_obs0(i,j,k,bi,bj)
630 & +aWght*fet_obs1(i,j,k,bi,bj)
631 ENDDO
632 ENDIF
633 IF ( darwin_Si_RelaxFile .NE. ' ' ) THEN
634 DO k=1,nR
635 si_obs(i,j,k,bi,bj) = bWght*si_obs0(i,j,k,bi,bj)
636 & +aWght*si_obs1(i,j,k,bi,bj)
637 ENDDO
638 ENDIF
639 #endif
640 #ifdef FLUX_NUTS
641 IF ( darwin_PO4_FluxFile .NE. ' ' ) THEN
642 DO k=1,nR
643 po4_flx(i,j,k,bi,bj) = bWght*po4_flx0(i,j,k,bi,bj)
644 & +aWght*po4_flx1(i,j,k,bi,bj)
645 ENDDO
646 ENDIF
647 IF ( darwin_NO3_FluxFile .NE. ' ' ) THEN
648 DO k=1,nR
649 no3_flx(i,j,k,bi,bj) = bWght*no3_flx0(i,j,k,bi,bj)
650 & +aWght*no3_flx1(i,j,k,bi,bj)
651 ENDDO
652 ENDIF
653 IF ( darwin_Fet_FluxFile .NE. ' ' ) THEN
654 DO k=1,nR
655 fet_flx(i,j,k,bi,bj) = bWght*fet_flx0(i,j,k,bi,bj)
656 & +aWght*fet_flx1(i,j,k,bi,bj)
657 ENDDO
658 ENDIF
659 IF ( darwin_Si_FluxFile .NE. ' ' ) THEN
660 DO k=1,nR
661 si_flx(i,j,k,bi,bj) = bWght*si_flx0(i,j,k,bi,bj)
662 & +aWght*si_flx1(i,j,k,bi,bj)
663 ENDDO
664 ENDIF
665 #endif
666
667 #ifdef ADKINS_SURF_FLUX
668 IF ( darwin_dicSurfFluxFile .NE. ' ' ) THEN
669 dicSurf_flx(i,j,bi,bj) = bWght*dicSurf_flx0(i,j,bi,bj)
670 & +aWght*dicSurf_flx1(i,j,bi,bj)
671 ENDIF
672 IF ( darwin_alkSurfFluxFile .NE. ' ' ) THEN
673 alkSurf_flx(i,j,bi,bj) = bWght*alkSurf_flx0(i,j,bi,bj)
674 & +aWght*alkSurf_flx1(i,j,bi,bj)
675 ENDIF
676 IF ( darwin_caSurfFluxFile .NE. ' ' ) THEN
677 caSurf_flx(i,j,bi,bj) = bWght*caSurf_flx0(i,j,bi,bj)
678 & +aWght*caSurf_flx1(i,j,bi,bj)
679 ENDIF
680 #endif
681
682 #ifdef OASIM
683 IF ( darwin_oasim_edFile .NE. ' ' ) THEN
684 c oasim data (load as W/m2 per band)
685 DO ilam=1,tlam
686 oasim_ed(i,j,ilam,bi,bj) =
687 & bWght*oasim_ed0(i,j,ilam,bi,bj)
688 & +aWght*oasim_ed1(i,j,ilam,bi,bj)
689 c oasim_ed(i,j,ilam,bi,bj) =
690 c & oasim_ed(i,j,ilam,bi,bj)*1. _d 6/86400. _d 0
691 ENDDO
692 ENDIF
693 IF ( darwin_oasim_esFile .NE. ' ' ) THEN
694 DO ilam=1,tlam
695 oasim_es(i,j,ilam,bi,bj) =
696 & bWght*oasim_es0(i,j,ilam,bi,bj)
697 & +aWght*oasim_es1(i,j,ilam,bi,bj)
698 c oasim_es(i,j,ilam,bi,bj) =
699 c & oasim_es(i,j,ilam,bi,bj)*1. _d 6/86400. _d 0
700 ENDDO
701 ENDIF
702 #ifndef WAVEBANDS
703 c if not spectral add wavebands to give a single surface PAR
704 c and convert to uEin/m2/s
705 sur_par(i,j,bi,bj)= 0. _d 0
706 DO ilam=1,tlam
707 sur_par(i,j,bi,bj)=sur_par(i,j,bi,bj)+WtouEins(ilam)
708 & *(oasim_ed(i,j,ilam,bi,bj)+
709 & oasim_es(i,j,ilam,bi,bj))
710 ENDDO
711 #endif
712 #endif
713 c
714 ENDDO
715 ENDDO
716 ENDDO
717 ENDDO
718
719 C endif for periodicForcing
720 ENDIF
721
722 RETURN
723 END
724 #endif
725 #endif
726

  ViewVC Help
Powered by ViewVC 1.1.22