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

Annotation 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.1 - (hide annotations) (download)
Mon Jan 27 02:52:02 2020 UTC (6 years, 7 months ago) by dimitri
Branch: MAIN
First complete check in with v4_llc270 ecco-darwin set-up

1 dimitri 1.1 C $Header: /u/gcmpack/MITgcm_contrib/ecco_darwin/v4_llc270/code_darwin/darwin_fields_load.F,v 1.4 2019/10/16 18:04:40 dcarroll 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