1 |
#include "CPP_OPTIONS.h" |
#include "DIC_OPTIONS.h" |
2 |
#include "GCHEM_OPTIONS.h" |
#include "GCHEM_OPTIONS.h" |
3 |
|
|
4 |
CStartOfInterFace |
CStartOfInterFace |
22 |
#include "DIC_ABIOTIC.h" |
#include "DIC_ABIOTIC.h" |
23 |
#ifdef DIC_BIOTIC |
#ifdef DIC_BIOTIC |
24 |
#include "DIC_BIOTIC.h" |
#include "DIC_BIOTIC.h" |
25 |
#endif |
#include "DIC_LOAD.h" |
|
#ifdef ALLOW_SEAICE |
|
|
#include "ICE.h" |
|
26 |
#endif |
#endif |
27 |
|
|
28 |
C == Routine arguments == |
C == Routine arguments == |
32 |
|
|
33 |
#ifdef ALLOW_PTRACERS |
#ifdef ALLOW_PTRACERS |
34 |
C == Local variables == |
C == Local variables == |
|
COMMON /dic_load/ |
|
|
& wspeed0, wspeed1, ice0, ice1, atmosp0, |
|
|
& atmosp1, silica0, silica1 |
|
|
#ifdef DIC_BIOTIC |
|
|
& ,feinput0,feinput1 |
|
|
#endif |
|
|
_RS wspeed0 (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) |
|
|
_RS wspeed1 (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) |
|
|
_RS wind (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) |
|
|
_RS ice0 (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) |
|
|
_RS ice1 (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) |
|
|
_RS atmosp0 (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) |
|
|
_RS atmosp1 (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) |
|
|
_RS silica0 (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) |
|
|
_RS silica1 (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) |
|
|
#ifdef DIC_BIOTIC |
|
|
_RS feinput0 (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) |
|
|
_RS feinput1 (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) |
|
|
#endif |
|
35 |
INTEGER bi,bj,i,j,intime0,intime1 |
INTEGER bi,bj,i,j,intime0,intime1 |
36 |
_RL aWght,bWght,rdt |
_RL aWght,bWght,rdt |
37 |
INTEGER nForcingPeriods,Imytm,Ifprd,Ifcyc,Iftm |
INTEGER nForcingPeriods,Imytm,Ifprd,Ifcyc,Iftm |
38 |
c |
c |
|
c |
|
|
IF ( periodicExternalForcing ) THEN |
|
|
|
|
|
|
|
39 |
C First call requires that we initialize everything to zero for safety |
C First call requires that we initialize everything to zero for safety |
40 |
cQQQ need to check timing |
IF (myIter .EQ. nIter0) THEN |
|
IF ( myIter .EQ. nIter0+1 ) THEN |
|
41 |
CALL LEF_ZERO( wspeed0,myThid ) |
CALL LEF_ZERO( wspeed0,myThid ) |
42 |
CALL LEF_ZERO( wspeed1,myThid ) |
CALL LEF_ZERO( wspeed1,myThid ) |
43 |
CALL LEF_ZERO( atmosp0,myThid ) |
CALL LEF_ZERO( atmosp0,myThid ) |
46 |
CALL LEF_ZERO( silica1,myThid ) |
CALL LEF_ZERO( silica1,myThid ) |
47 |
CALL LEF_ZERO( ice0,myThid ) |
CALL LEF_ZERO( ice0,myThid ) |
48 |
CALL LEF_ZERO( ice1,myThid ) |
CALL LEF_ZERO( ice1,myThid ) |
49 |
#ifdef DIC_BIOTIC |
#ifdef ALLOW_FE |
50 |
CALL LEF_ZERO( feinput0,myThid ) |
CALL LEF_ZERO( feinput0,myThid ) |
51 |
CALL LEF_ZERO( feinput1,myThid ) |
CALL LEF_ZERO( feinput1,myThid ) |
52 |
#endif |
#endif |
53 |
ENDIF |
ENDIF |
54 |
|
c |
55 |
|
IF ( periodicExternalForcing ) THEN |
56 |
|
|
57 |
|
|
58 |
C Now calculate whether it is time to update the forcing arrays |
C Now calculate whether it is time to update the forcing arrays |
60 |
nForcingPeriods= |
nForcingPeriods= |
61 |
& int(externForcingCycle/externForcingPeriod+0.5) |
& int(externForcingCycle/externForcingPeriod+0.5) |
62 |
cswd QQ change for placement of chem forcing (ie. after timestep) |
cswd QQ change for placement of chem forcing (ie. after timestep) |
63 |
Imytm=int((myTime-deltaTclock)*rdt+0.5) |
Imytm=int(myTime*rdt+0.5) |
64 |
Ifprd=int(externForcingPeriod*rdt+0.5) |
Ifprd=int(externForcingPeriod*rdt+0.5) |
65 |
Ifcyc=int(externForcingCycle*rdt+0.5) |
Ifcyc=int(externForcingCycle*rdt+0.5) |
66 |
Iftm=mod( Imytm+Ifcyc-Ifprd/2 ,Ifcyc) |
Iftm=mod( Imytm+Ifcyc-Ifprd/2 ,Ifcyc) |
75 |
intime1=intime1+1 |
intime1=intime1+1 |
76 |
|
|
77 |
|
|
|
cswd QQ need nIter0+1 since chem forcing after time step |
|
78 |
IF ( |
IF ( |
79 |
& Iftm-Ifprd*(intime0-1).EQ. 0 |
& Iftm-Ifprd*(intime0-1).EQ. 0 |
80 |
& .OR. myIter .EQ. nIter0+1 |
& .OR. myIter .EQ. nIter0 |
81 |
& ) THEN |
& ) THEN |
82 |
|
|
83 |
|
|
107 |
CALL READ_REC_XY_RS( SilicaFile,silica1,intime1, |
CALL READ_REC_XY_RS( SilicaFile,silica1,intime1, |
108 |
& myIter,myThid ) |
& myIter,myThid ) |
109 |
ENDIF |
ENDIF |
|
#ifndef ALLOW_SEAICE |
|
110 |
IF ( IceFile .NE. ' ' ) THEN |
IF ( IceFile .NE. ' ' ) THEN |
111 |
CALL READ_REC_XY_RS( IceFile,ice0,intime0, |
CALL READ_REC_XY_RS( IceFile,ice0,intime0, |
112 |
& myIter,myThid ) |
& myIter,myThid ) |
113 |
CALL READ_REC_XY_RS( IceFile,ice1,intime1, |
CALL READ_REC_XY_RS( IceFile,ice1,intime1, |
114 |
& myIter,myThid ) |
& myIter,myThid ) |
115 |
ENDIF |
ENDIF |
116 |
#endif |
#ifdef ALLOW_FE |
|
#ifdef DIC_BIOTIC |
|
117 |
IF ( IronFile .NE. ' ' ) THEN |
IF ( IronFile .NE. ' ' ) THEN |
118 |
CALL READ_REC_XY_RS( IronFile,feinput0,intime0, |
CALL READ_REC_XY_RS( IronFile,feinput0,intime0, |
119 |
& myIter,myThid ) |
& myIter,myThid ) |
131 |
_EXCH_XY_R4(atmosp1, myThid ) |
_EXCH_XY_R4(atmosp1, myThid ) |
132 |
_EXCH_XY_R4(silica0, myThid ) |
_EXCH_XY_R4(silica0, myThid ) |
133 |
_EXCH_XY_R4(silica1, myThid ) |
_EXCH_XY_R4(silica1, myThid ) |
|
#ifndef ALLOW_SEAICE |
|
134 |
_EXCH_XY_R4(ice0, myThid ) |
_EXCH_XY_R4(ice0, myThid ) |
135 |
_EXCH_XY_R4(ice1, myThid ) |
_EXCH_XY_R4(ice1, myThid ) |
136 |
#endif |
#ifdef ALLOW_FE |
|
#ifdef DIC_BIOTIC |
|
137 |
_EXCH_XY_R4(feinput0, myThid ) |
_EXCH_XY_R4(feinput0, myThid ) |
138 |
_EXCH_XY_R4(feinput1, myThid ) |
_EXCH_XY_R4(feinput1, myThid ) |
139 |
#endif |
#endif |
167 |
ELSE |
ELSE |
168 |
SILICA(i,j,bi,bj) =7.6838e-3*maskC(i,j,1,bi,bj) |
SILICA(i,j,bi,bj) =7.6838e-3*maskC(i,j,1,bi,bj) |
169 |
ENDIF |
ENDIF |
|
#ifndef ALLOW_SEAICE |
|
170 |
IF ( IceFile .NE. ' ' ) THEN |
IF ( IceFile .NE. ' ' ) THEN |
171 |
FIce(i,j,bi,bj) = bWght*ice0(i,j,bi,bj) |
FIce(i,j,bi,bj) = bWght*ice0(i,j,bi,bj) |
172 |
& +aWght*ice1(i,j,bi,bj) |
& +aWght*ice1(i,j,bi,bj) |
173 |
ELSE |
ELSE |
174 |
FIce(i,j,bi,bj) =0.d0 |
FIce(i,j,bi,bj) =0.d0 |
175 |
ENDIF |
ENDIF |
|
#else |
|
|
FIce(i,j,bi,bj) = IceMask(i,j,bi,bj) |
|
|
#endif |
|
176 |
if (FIce(i,j,bi,bj).lt.1d-2) then |
if (FIce(i,j,bi,bj).lt.1d-2) then |
177 |
FIce(i,j,bi,bj) = 0.d0 |
FIce(i,j,bi,bj) = 0.d0 |
178 |
endif |
endif |
179 |
#ifdef DIC_BIOTIC |
#ifdef ALLOW_FE |
180 |
IF ( IronFile .NE. ' ' ) THEN |
IF ( IronFile .NE. ' ' ) THEN |
181 |
InputFe(i,j,bi,bj) = bWght*feinput0(i,j,bi,bj) |
InputFe(i,j,bi,bj) = bWght*feinput0(i,j,bi,bj) |
182 |
& +aWght*feinput1(i,j,bi,bj) |
& +aWght*feinput1(i,j,bi,bj) |