Back to home page

MITgcm

 
 

    


File indexing completed on 2023-11-08 06:10:16 UTC

view on githubraw file Latest commit 51e381e9 on 2023-11-07 18:00:07 UTC
6d54cf9ca1 Ed H*0001 #include "DIC_OPTIONS.h"
daab022f42 Step*0002 
08536d17ba Step*0003 CBOP
                0004 C !ROUTINE: DIC_FIELDS_LOAD
                0005 
                0006 C !INTERFACE: ==========================================================
daab022f42 Step*0007       SUBROUTINE DIC_FIELDS_LOAD (
2e3e8c330d Jona*0008      I           myTime, myIter, myThid )
daab022f42 Step*0009 
08536d17ba Step*0010 C !DESCRIPTION:
                0011 C  Read in fields needed for CO2,O2 fluxterms, silica for pH calculation
daab022f42 Step*0012 
08536d17ba Step*0013 C !USES: ===============================================================
                0014       IMPLICIT NONE
daab022f42 Step*0015 #include "SIZE.h"
                0016 #include "EEPARAMS.h"
                0017 #include "PARAMS.h"
                0018 #include "GRID.h"
2ef8966791 Davi*0019 #include "DIC_VARS.h"
29ad036528 Step*0020 #include "DIC_LOAD.h"
daab022f42 Step*0021 
08536d17ba Step*0022 C !INPUT PARAMETERS: ===================================================
                0023 C  myTime               :: current time
2e3e8c330d Jona*0024 C  myIter               :: current timestep
c6839165c8 Jean*0025 C  myThid               :: thread number
daab022f42 Step*0026       _RL myTime
2e3e8c330d Jona*0027       INTEGER myIter
daab022f42 Step*0028       INTEGER myThid
                0029 
63d67d9eeb Jean*0030 #ifdef ALLOW_DIC
08536d17ba Step*0031 
                0032 c !LOCAL VARIABLES: ===================================================
2e3e8c330d Jona*0033       INTEGER bi, bj, i, j
63d67d9eeb Jean*0034       INTEGER intimeP, intime0, intime1
                0035       _RL aWght,bWght
2e3e8c330d Jona*0036 #ifdef DIC_CALCITE_SAT
                0037       INTEGER k
                0038 #endif
08536d17ba Step*0039 CEOP
                0040 
c6839165c8 Jean*0041       IF (  DIC_forcingCycle.GT.0. _d 0 ) THEN
daab022f42 Step*0042 
63d67d9eeb Jean*0043 C--   Now calculate whether it is time to update the forcing arrays
                0044        CALL GET_PERIODIC_INTERVAL(
                0045      O                   intimeP, intime0, intime1, bWght, aWght,
                0046      I                   DIC_forcingCycle, DIC_forcingPeriod,
c6839165c8 Jean*0047      I                   deltaTClock, myTime, myThid )
daab022f42 Step*0048 
63d67d9eeb Jean*0049        bi = myBxLo(myThid)
                0050        bj = myByLo(myThid)
                0051 #ifdef ALLOW_DEBUG
7250857647 Jean*0052        IF ( debugLevel.GE.debLevB ) THEN
63d67d9eeb Jean*0053         _BEGIN_MASTER(myThid)
                0054         WRITE(standardMessageUnit,'(A,I10,A,4I5,A,2F14.10)')
                0055      &   ' DIC_FIELDS_LOAD,', myIter,
                0056      &   ' : iP,iLd,i0,i1=', intimeP,DIC_ldRec(bi,bj), intime0,intime1,
                0057      &   ' ; Wght=', bWght, aWght
                0058         _END_MASTER(myThid)
                0059        ENDIF
                0060 #endif /* ALLOW_DEBUG */
daab022f42 Step*0061 
c6839165c8 Jean*0062 #ifdef ALLOW_AUTODIFF
63d67d9eeb Jean*0063 C-    assuming that we call S/R DIC_FIELDS_LOAD at each time-step and
                0064 C     with increasing time, this will catch when we need to load new records;
                0065 C     But with Adjoint run, this is not always the case => might end-up using
                0066 C     the wrong time-records
                0067        IF ( intime0.NE.intimeP .OR. myIter.EQ.nIter0 ) THEN
c6839165c8 Jean*0068 #else /* ALLOW_AUTODIFF */
63d67d9eeb Jean*0069 C-    Make no assumption on sequence of calls to DIC_FIELDS_LOAD ;
                0070 C     This is the correct formulation (works in Adjoint run).
                0071 C     Unfortunatly, produces many recomputations <== not used until it is fixed
                0072        IF ( intime1.NE.DIC_ldRec(bi,bj) ) THEN
c6839165c8 Jean*0073 #endif /* ALLOW_AUTODIFF */
daab022f42 Step*0074 
63d67d9eeb Jean*0075 C--   If the above condition is met then we need to read in
                0076 C     data for the period ahead and the period behind myTime.
7250857647 Jean*0077         IF ( debugLevel.GE.debLevZero ) THEN
                0078          _BEGIN_MASTER(myThid)
                0079          WRITE(standardMessageUnit,'(A,I10,A,2(2I5,A))')
                0080      &    ' DIC_FIELDS_LOAD, it=', myIter,
                0081      &    ' : Reading new data, i0,i1=', intime0, intime1,
63d67d9eeb Jean*0082      &    ' (prev=', intimeP, DIC_ldRec(bi,bj), ' )'
7250857647 Jean*0083          _END_MASTER(myThid)
                0084         ENDIF
b5faedaf88 Jean*0085 
63d67d9eeb Jean*0086         _BARRIER
daab022f42 Step*0087 
5625485478 Jean*0088         IF ( DIC_windFile .NE. ' '  ) THEN
ad6cffb5e8 Gael*0089          CALL READ_REC_XY_RS( DIC_windFile,dicwind0,intime0,
daab022f42 Step*0090      &        myIter,myThid )
ad6cffb5e8 Gael*0091          CALL READ_REC_XY_RS( DIC_windFile,dicwind1,intime1,
daab022f42 Step*0092      &        myIter,myThid )
5625485478 Jean*0093         ENDIF
                0094         IF ( DIC_atmospFile .NE. ' '  ) THEN
946d3aa393 Jean*0095          CALL READ_REC_XY_RS( DIC_atmospFile,atmosp0,intime0,
daab022f42 Step*0096      &        myIter,myThid )
946d3aa393 Jean*0097          CALL READ_REC_XY_RS( DIC_atmospFile,atmosp1,intime1,
daab022f42 Step*0098      &        myIter,myThid )
5625485478 Jean*0099         ENDIF
                0100         IF ( DIC_silicaFile .NE. ' '  ) THEN
a1d0e455fd Hann*0101          CALL READ_REC_XY_RS( DIC_silicaFile,silicaSurf0,intime0,
6891e8b81c Step*0102      &        myIter,myThid )
a1d0e455fd Hann*0103          CALL READ_REC_XY_RS( DIC_silicaFile,silicaSurf1,intime1,
                0104      &        myIter,myThid )
                0105         ENDIF
2e3e8c330d Jona*0106 #ifdef DIC_CALCITE_SAT
a1d0e455fd Hann*0107         IF ( DIC_deepSilicaFile .NE. ' '  ) THEN
                0108          CALL READ_REC_XYZ_RS( DIC_deepSilicaFile,silicaDeep0,intime0,
                0109      &        myIter,myThid )
                0110          CALL READ_REC_XYZ_RS( DIC_deepSilicaFile,silicaDeep1,intime1,
6891e8b81c Step*0111      &        myIter,myThid )
5625485478 Jean*0112         ENDIF
2e3e8c330d Jona*0113 #endif
5625485478 Jean*0114         IF ( DIC_iceFile .NE. ' '  ) THEN
946d3aa393 Jean*0115          CALL READ_REC_XY_RS( DIC_iceFile,ice0,intime0,
daab022f42 Step*0116      &       myIter,myThid )
946d3aa393 Jean*0117          CALL READ_REC_XY_RS( DIC_iceFile,ice1,intime1,
daab022f42 Step*0118      &       myIter,myThid )
5625485478 Jean*0119         ENDIF
9b8a71f139 Step*0120 #ifdef READ_PAR
10167de8af Step*0121         IF ( DIC_parFile .NE. ' '  ) THEN
                0122          CALL READ_REC_XY_RS( DIC_parFile,par0,intime0,
9b8a71f139 Step*0123      &       myIter,myThid )
10167de8af Step*0124          CALL READ_REC_XY_RS( DIC_parFile,par1,intime1,
9b8a71f139 Step*0125      &       myIter,myThid )
5625485478 Jean*0126         ENDIF
9b8a71f139 Step*0127 #endif
9e77a98ea8 Jean*0128 #ifdef LIGHT_CHL
                0129 C--   Load chlorophyll climatology data, unit for chlorophyll : mg/m3
                0130         IF ( DIC_chlaFile .NE. ' '  ) THEN
                0131          CALL READ_REC_XY_RS( DIC_chlaFile,chlinput,1,
                0132      &       myIter,myThid )
                0133         ENDIF
                0134 #endif
29ad036528 Step*0135 #ifdef ALLOW_FE
5625485478 Jean*0136         IF ( DIC_ironFile .NE. ' '  ) THEN
946d3aa393 Jean*0137          CALL READ_REC_XY_RS( DIC_ironFile,feinput0,intime0,
daab022f42 Step*0138      &       myIter,myThid )
946d3aa393 Jean*0139          CALL READ_REC_XY_RS( DIC_ironFile,feinput1,intime1,
daab022f42 Step*0140      &       myIter,myThid )
5625485478 Jean*0141         ENDIF
daab022f42 Step*0142 #endif
63d67d9eeb Jean*0143 
                0144 C--   fill-in overlap after loading temp arrays:
                0145         _EXCH_XY_RS(dicwind0, myThid )
                0146         _EXCH_XY_RS(dicwind1, myThid )
                0147         _EXCH_XY_RS(atmosp0, myThid )
                0148         _EXCH_XY_RS(atmosp1, myThid )
a1d0e455fd Hann*0149         _EXCH_XY_RS(silicaSurf0, myThid )
                0150         _EXCH_XY_RS(silicaSurf1, myThid )
2e3e8c330d Jona*0151 #ifdef DIC_CALCITE_SAT
                0152       IF ( DIC_deepSilicaFile .NE. ' '  ) THEN
a1d0e455fd Hann*0153         _EXCH_XYZ_RS(silicaDeep0, myThid )
                0154         _EXCH_XYZ_RS(silicaDeep1, myThid )
2e3e8c330d Jona*0155       ENDIF
                0156 #endif
63d67d9eeb Jean*0157         _EXCH_XY_RS(ice0, myThid )
                0158         _EXCH_XY_RS(ice1, myThid )
                0159 #ifdef READ_PAR
                0160         _EXCH_XY_RS(par0, myThid )
                0161         _EXCH_XY_RS(par1, myThid )
                0162 #endif
9e77a98ea8 Jean*0163 #ifdef LIGHT_CHL
                0164         _EXCH_XY_RS(chlinput, myThid )
                0165 #endif
63d67d9eeb Jean*0166 #ifdef ALLOW_FE
                0167         _EXCH_XY_RS(feinput0, myThid )
                0168         _EXCH_XY_RS(feinput1, myThid )
                0169 #endif
                0170 
                0171 C-    save newly loaded time-record
                0172         DO bj = myByLo(myThid), myByHi(myThid)
                0173          DO bi = myBxLo(myThid), myBxHi(myThid)
                0174            DIC_ldRec(bi,bj) = intime1
                0175          ENDDO
                0176         ENDDO
daab022f42 Step*0177 
5625485478 Jean*0178 C-     end if-bloc (time to load new fields)
daab022f42 Step*0179        ENDIF
                0180 
                0181        DO bj = myByLo(myThid), myByHi(myThid)
                0182         DO bi = myBxLo(myThid), myBxHi(myThid)
946d3aa393 Jean*0183          IF ( DIC_windFile .NE. ' '  ) THEN
a34cef4f76 Jean*0184            DO j=1-OLy,sNy+OLy
                0185             DO i=1-OLx,sNx+OLx
ad6cffb5e8 Gael*0186              WIND(i,j,bi,bj) = bWght*dicwind0(i,j,bi,bj)
                0187      &                       + aWght*dicwind1(i,j,bi,bj)
e31f9c5af1 Davi*0188             ENDDO
                0189            ENDDO
a1d0e455fd Hann*0190 
946d3aa393 Jean*0191 C calculate piston velocity
                0192 C QQ: note - we should have wind speed variance in here
                0193 C QQ         also need to check units, and conversion factors
4237a3338f Step*0194 c          pisvel(i,j,bi,bj)  =0.337*wind(i,j,bi,bj)**2/3.6d5    !QQQQ
e31f9c5af1 Davi*0195          ENDIF
                0196 #ifndef USE_PLOAD
946d3aa393 Jean*0197          IF ( DIC_atmospFile .NE. ' '  ) THEN
a34cef4f76 Jean*0198            DO j=1-OLy,sNy+OLy
                0199             DO i=1-OLx,sNx+OLx
e31f9c5af1 Davi*0200              AtmosP(i,j,bi,bj) = bWght*atmosp0(i,j,bi,bj)
                0201      &                         + aWght*atmosp1(i,j,bi,bj)
                0202             ENDDO
                0203            ENDDO
                0204          ENDIF
                0205 #endif
2e3e8c330d Jona*0206 #ifdef DIC_CALCITE_SAT
                0207          IF ( useCalciteSaturation .AND.
                0208      &        DIC_deepSilicaFile .NE. ' '  ) THEN
a1d0e455fd Hann*0209           DO k=1,Nr
                0210            DO j=1-OLy,sNy+OLy
                0211             DO i=1-OLx,sNx+OLx
                0212              silicaDeep(i,j,k,bi,bj) = bWght*silicaDeep0(i,j,k,bi,bj)
                0213      &                               + aWght*silicaDeep1(i,j,k,bi,bj)
                0214             ENDDO
                0215            ENDDO
                0216           ENDDO
                0217          ENDIF
2e3e8c330d Jona*0218 #endif
946d3aa393 Jean*0219          IF ( DIC_silicaFile .NE. ' '  ) THEN
a34cef4f76 Jean*0220            DO j=1-OLy,sNy+OLy
                0221             DO i=1-OLx,sNx+OLx
a1d0e455fd Hann*0222 C If file provided for surface silicate, read it in
                0223              silicaSurf(i,j,bi,bj) = bWght*silicaSurf0(i,j,bi,bj)
                0224      &                             + aWght*silicaSurf1(i,j,bi,bj)
                0225             ENDDO
                0226            ENDDO
                0227 #ifndef ALLOW_AUTODIFF
2e3e8c330d Jona*0228 #ifdef DIC_CALCITE_SAT
a1d0e455fd Hann*0229          ELSEIF ( DIC_deepSilicaFile .NE. ' '  ) THEN
                0230            DO j=1-OLy,sNy+OLy
                0231             DO i=1-OLx,sNx+OLx
                0232 C If no surface silicate file but deep (3d) silicate provided, use top level
2e3e8c330d Jona*0233              silicaSurf(i,j,bi,bj) = bWght*silicaDeep0(i,j,1,bi,bj)
                0234      &                             + aWght*silicaDeep1(i,j,1,bi,bj)
e31f9c5af1 Davi*0235             ENDDO
                0236            ENDDO
2e3e8c330d Jona*0237 #endif /* DIC_CALCITE_SAT */
                0238 #endif /* not ALLOW_AUTODIFF */
e31f9c5af1 Davi*0239          ENDIF
a1d0e455fd Hann*0240 
946d3aa393 Jean*0241          IF ( DIC_iceFile .NE. ' '  ) THEN
a34cef4f76 Jean*0242            DO j=1-OLy,sNy+OLy
                0243             DO i=1-OLx,sNx+OLx
f18a542536 Jean*0244              fIce(i,j,bi,bj) = bWght*ice0(i,j,bi,bj)
e31f9c5af1 Davi*0245      &                       + aWght*ice1(i,j,bi,bj)
                0246             ENDDO
                0247            ENDDO
                0248          ENDIF
751b5628dd Step*0249 
9b8a71f139 Step*0250 #ifdef READ_PAR
10167de8af Step*0251          IF ( DIC_parFile .NE. ' '  ) THEN
a34cef4f76 Jean*0252            DO j=1-OLy,sNy+OLy
                0253             DO i=1-OLx,sNx+OLx
e31f9c5af1 Davi*0254              PAR(i,j,bi,bj) = bWght*par0(i,j,bi,bj)
                0255      &                      + aWght*par1(i,j,bi,bj)
                0256             ENDDO
                0257            ENDDO
                0258          ENDIF
9b8a71f139 Step*0259 #endif
9e77a98ea8 Jean*0260 #ifdef LIGHT_CHL
                0261          IF ( DIC_chlaFile .NE. ' '  ) THEN
                0262            DO j=1-OLy,sNy+OLy
                0263             DO i=1-OLx,sNx+OLx
                0264              CHL(i,j,bi,bj) = chlinput(i,j,bi,bj)
                0265             ENDDO
                0266            ENDDO
                0267          ENDIF
                0268 #endif
29ad036528 Step*0269 #ifdef ALLOW_FE
946d3aa393 Jean*0270          IF ( DIC_ironFile .NE. ' '  ) THEN
a34cef4f76 Jean*0271            DO j=1-OLy,sNy+OLy
                0272             DO i=1-OLx,sNx+OLx
e31f9c5af1 Davi*0273              InputFe(i,j,bi,bj) = bWght*feinput0(i,j,bi,bj)
                0274      &                          + aWght*feinput1(i,j,bi,bj)
                0275             ENDDO
                0276            ENDDO
                0277          ENDIF
daab022f42 Step*0278 #endif
                0279         ENDDO
                0280        ENDDO
                0281 
946d3aa393 Jean*0282 C endif for DIC_forcingCycle
b5faedaf88 Jean*0283       ENDIF
daab022f42 Step*0284 
63d67d9eeb Jean*0285 #endif /* ALLOW_DIC */
daab022f42 Step*0286       RETURN
                0287       END