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
e547c854e1 Step*0001 #include "DIC_OPTIONS.h"
                0002 
08536d17ba Step*0003 CBOP
254eed5bf2 Davi*0004 C !ROUTINE: DIC_INI_FORCING
08536d17ba Step*0005 
                0006 C !INTERFACE: ==========================================================
e547c854e1 Step*0007       SUBROUTINE DIC_INI_FORCING( myThid )
                0008 
08536d17ba Step*0009 C !DESCRIPTION:
                0010 c initializes forcing fields to zero
441b6e8b14 Step*0011 c (or to reasonable values)
e547c854e1 Step*0012 
08536d17ba Step*0013 C !USES: ===============================================================
                0014       IMPLICIT NONE
e547c854e1 Step*0015 #include "SIZE.h"
                0016 #include "EEPARAMS.h"
                0017 #include "PARAMS.h"
                0018 #include "GRID.h"
2ef8966791 Davi*0019 #include "DIC_VARS.h"
e547c854e1 Step*0020 #include "DIC_LOAD.h"
                0021 
08536d17ba Step*0022 C !INPUT PARAMETERS: ===================================================
                0023 C  myThid               :: thread number
e547c854e1 Step*0024       INTEGER myThid
08536d17ba Step*0025 CEOP
e547c854e1 Step*0026 
63d67d9eeb Jean*0027 #ifdef ALLOW_DIC
441b6e8b14 Step*0028 
51e381e9c9 Jean*0029 c !LOCAL VARIABLES: ====================================================
                0030        INTEGER bi, bj, i, j
                0031        INTEGER intimeP, intime0, intime1
                0032        _RL aWght, bWght
2e3e8c330d Jona*0033 #ifdef DIC_CALCITE_SAT
                0034       INTEGER k
                0035 #endif
c845fbfeae Jean*0036 
51e381e9c9 Jean*0037 C--   Initialise forcing arrays in common blocks
63d67d9eeb Jean*0038       DO bj = myByLo(myThid), myByHi(myThid)
                0039        DO bi = myBxLo(myThid), myBxHi(myThid)
51e381e9c9 Jean*0040 
                0041 C-    Initialise DIC_VARS.h forcing-field arrays:
                0042         DO j=1-OLy,sNy+OLy
                0043          DO i=1-OLx,sNx+OLx
                0044            wind      (i,j,bi,bj) = 0. _d 0
                0045            fIce      (i,j,bi,bj) = 0. _d 0
                0046            AtmosP    (i,j,bi,bj) = 0. _d 0
                0047            silicaSurf(i,j,bi,bj) = 0. _d 0
                0048 #ifdef DIC_BIOTIC
                0049            par       (i,j,bi,bj) = 0. _d 0
                0050            CHL       (i,j,bi,bj) = 0. _d 0
                0051            InputFe   (i,j,bi,bj) = 0. _d 0
                0052 #endif
                0053          ENDDO
                0054         ENDDO
                0055 #ifdef DIC_CALCITE_SAT
                0056         DO k=1,Nr
                0057          DO j=1-OLy,sNy+OLy
                0058           DO i=1-OLx,sNx+OLx
                0059            silicaDeep(i,j,k,bi,bj) = 0. _d 0
                0060           ENDDO
                0061          ENDDO
                0062         ENDDO
                0063 #endif
                0064 
                0065 C-    Initialise DIC_LOAD.h arrays:
                0066         DIC_ldRec(bi,bj) = 0
                0067         DO j=1-OLy,sNy+OLy
                0068          DO i=1-OLx,sNx+OLx
                0069            dicwind0(i,j,bi,bj) = 0. _d 0
                0070            dicwind1(i,j,bi,bj) = 0. _d 0
                0071            atmosp0 (i,j,bi,bj) = 0. _d 0
                0072            atmosp1 (i,j,bi,bj) = 0. _d 0
                0073            silicaSurf0(i,j,bi,bj) = 0. _d 0
                0074            silicaSurf1(i,j,bi,bj) = 0. _d 0
                0075            ice0    (i,j,bi,bj) = 0. _d 0
                0076            ice1    (i,j,bi,bj) = 0. _d 0
9b8a71f139 Step*0077 #ifdef READ_PAR
51e381e9c9 Jean*0078            par0    (i,j,bi,bj) = 0. _d 0
                0079            par1    (i,j,bi,bj) = 0. _d 0
9b8a71f139 Step*0080 #endif
9e77a98ea8 Jean*0081 #ifdef ALLOW_FE
51e381e9c9 Jean*0082            feinput0(i,j,bi,bj) = 0. _d 0
                0083            feinput1(i,j,bi,bj) = 0. _d 0
9e77a98ea8 Jean*0084 #endif
                0085 #ifdef LIGHT_CHL
51e381e9c9 Jean*0086            chlinput(i,j,bi,bj) = 0. _d 0
9e77a98ea8 Jean*0087 #endif
51e381e9c9 Jean*0088          ENDDO
                0089         ENDDO
2e3e8c330d Jona*0090 #ifdef DIC_CALCITE_SAT
a1d0e455fd Hann*0091         DO k=1,Nr
                0092          DO j=1-OLy,sNy+OLy
                0093           DO i=1-OLx,sNx+OLx
                0094            silicaDeep0(i,j,k,bi,bj) = 0. _d 0
                0095            silicaDeep1(i,j,k,bi,bj) = 0. _d 0
                0096           ENDDO
                0097          ENDDO
                0098         ENDDO
51e381e9c9 Jean*0099 #endif
                0100 C-   end bi,bj loops:
a1d0e455fd Hann*0101        ENDDO
                0102       ENDDO
e547c854e1 Step*0103 
51e381e9c9 Jean*0104 C ======================================================================
e393d3c4a7 Step*0105 
51e381e9c9 Jean*0106 C--   Set reasonable values to those that need at least something
                0107       DO bj = myByLo(myThid), myByHi(myThid)
                0108        DO bi = myBxLo(myThid), myBxHi(myThid)
c8a76e9bb9 Jean*0109          DO j=1-OLy,sNy+OLy
                0110           DO i=1-OLx,sNx+OLx
51e381e9c9 Jean*0111             wind(i,j,bi,bj)       = 5. _d 0*maskC(i,j,1,bi,bj)
2e3e8c330d Jona*0112             AtmosP(i,j,bi,bj)     = 1. _d 0*maskC(i,j,1,bi,bj)
a1d0e455fd Hann*0113             silicaSurf(i,j,bi,bj) = 7.6838 _d -3*maskC(i,j,1,bi,bj)
2e3e8c330d Jona*0114             fIce(i,j,bi,bj)       = 0. _d 0
441b6e8b14 Step*0115 #ifdef READ_PAR
51e381e9c9 Jean*0116             par(i,j,bi,bj)        = 100. _d 0*maskC(i,j,1,bi,bj)
441b6e8b14 Step*0117 #endif
9e77a98ea8 Jean*0118 #ifdef LIGHT_CHL
                0119 C If the chlorophyll climatology is not provided, use this default value.
2e3e8c330d Jona*0120             CHL(i,j,bi,bj)        = 1. _d -2*maskC(i,j,1,bi,bj)
9e77a98ea8 Jean*0121 #endif
441b6e8b14 Step*0122 #ifdef ALLOW_FE
2e3e8c330d Jona*0123             InputFe(i,j,bi,bj)    = 1. _d -11*maskC(i,j,1,bi,bj)
441b6e8b14 Step*0124 #endif
                0125           ENDDO
                0126          ENDDO
2e3e8c330d Jona*0127 #ifdef DIC_CALCITE_SAT
                0128          IF ( useCalciteSaturation ) THEN
                0129           DO k=1,Nr
                0130            DO j=1-OLy,sNy+OLy
                0131             DO i=1-OLx,sNx+OLx
                0132               silicaDeep(i,j,k,bi,bj) = 3. _d -2*maskC(i,j,k,bi,bj)
                0133             ENDDO
a1d0e455fd Hann*0134            ENDDO
                0135           ENDDO
2e3e8c330d Jona*0136          ENDIF
                0137 #endif
a1d0e455fd Hann*0138 C-    end bi,bj loops
441b6e8b14 Step*0139        ENDDO
51e381e9c9 Jean*0140       ENDDO
                0141 
                0142 C ======================================================================
                0143 
                0144 C--   Load constant forcing-file (used if DIC_forcingCycle=0 )
                0145 c     IF ( DIC_forcingCycle .LE. zeroRL ) THEN
                0146        IF ( DIC_windFile .NE. ' '  ) THEN
                0147          CALL READ_REC_XY_RL( DIC_windFile, wind,
                0148      &                        1, nIter0, myThid )
                0149          _EXCH_XY_RL( wind, myThid )
                0150        ENDIF
                0151        IF ( DIC_atmospFile .NE. ' '  ) THEN
                0152          CALL READ_REC_XY_RL( DIC_atmospFile, AtmosP,
                0153      &                        1, nIter0, myThid )
                0154          _EXCH_XY_RL( AtmosP, myThid )
                0155        ENDIF
                0156        IF ( DIC_silicaFile .NE. ' '  ) THEN
                0157          CALL READ_REC_XY_RL( DIC_silicaFile, silicaSurf,
                0158      &                        1, nIter0, myThid )
                0159          _EXCH_XY_RL( silicaSurf, myThid )
                0160        ENDIF
                0161        IF ( DIC_iceFile .NE. ' '  ) THEN
                0162          CALL READ_REC_XY_RL( DIC_iceFile, fIce,
                0163      &                        1, nIter0, myThid )
                0164          _EXCH_XY_RL( fIce, myThid )
                0165        ENDIF
                0166 #ifdef DIC_BIOTIC
                0167 c#ifdef READ_PAR
                0168        IF ( DIC_parFile .NE. ' '  ) THEN
                0169          CALL READ_REC_XY_RL( DIC_parFile, par,
                0170      &                        1, nIter0, myThid )
                0171          _EXCH_XY_RL( par, myThid )
                0172        ENDIF
                0173 c#endif
                0174 c#ifdef LIGHT_CHL
                0175 C--   Load chlorophyll climatology data, unit for chlorophyll : mg/m3
                0176        IF ( DIC_chlaFile .NE. ' '  ) THEN
                0177          CALL READ_REC_XY_RL( DIC_chlaFile, CHL,
                0178      &                        1, nIter0, myThid )
                0179          _EXCH_XY_RL( CHL, myThid )
                0180        ENDIF
                0181 c#endif
                0182 c#ifdef ALLOW_FE
                0183        IF ( DIC_ironFile .NE. ' '  ) THEN
                0184          CALL READ_REC_XY_RL( DIC_ironFile, InputFe,
                0185      &                        1, nIter0, myThid )
                0186          _EXCH_XY_RL( InputFe, myThid )
                0187        ENDIF
                0188 c#endif
                0189 #endif /* DIC_BIOTIC */
                0190 #ifdef DIC_CALCITE_SAT
                0191        IF ( useCalciteSaturation .AND.
                0192      &      DIC_deepSilicaFile .NE. ' '  ) THEN
                0193          CALL READ_REC_XYZ_RL( DIC_deepSilicaFile, silicaDeep,
                0194      &                        1, nIter0, myThid )
                0195          _EXCH_XYZ_RL( silicaDeep, myThid )
                0196        ENDIF
                0197 #endif
                0198 c     ENDIF
                0199 
                0200 C ======================================================================
                0201 
                0202       IF ( DIC_forcingCycle .GT. zeroRL ) THEN
                0203 C--   Load some initial forcing from file
                0204 
                0205 C-    Read in surface silica field (used to compute initial surf. pH)
                0206 C     Note: For this purpose, might be accurate enough to use first record
                0207 C           in silica file (already loaded) and skip all this block.
                0208 
                0209 C-    Get reccord number and weight for time interpolation:
                0210        CALL GET_PERIODIC_INTERVAL(
                0211      O                   intimeP, intime0, intime1, bWght, aWght,
                0212      I                   DIC_forcingCycle, DIC_forcingPeriod,
                0213      I                   deltaTClock, startTime, myThid )
                0214 
                0215        _BARRIER
                0216        _BEGIN_MASTER(myThid)
                0217         WRITE(standardMessageUnit,'(A,I10,A,2(2I5,A))')
                0218      &   ' DIC_INI_FORCING, it=', nIter0,
                0219      &   ' : Reading new data, i0,i1=', intime0, intime1
                0220        _END_MASTER(myThid)
                0221 
                0222        IF ( DIC_silicaFile .NE. ' '  ) THEN
                0223 C-    If file provided for surface silicate, read it in
                0224          CALL READ_REC_XY_RS( DIC_silicaFile,silicaSurf0,intime0,
                0225      &        nIter0,myThid )
                0226          CALL READ_REC_XY_RS( DIC_silicaFile,silicaSurf1,intime1,
                0227      &        nIter0,myThid )
                0228          DO bj = myByLo(myThid), myByHi(myThid)
                0229           DO bi = myBxLo(myThid), myBxHi(myThid)
                0230            DO j=1-OLy,sNy+OLy
                0231             DO i=1-OLx,sNx+OLx
                0232               silicaSurf(i,j,bi,bj) = bWght*silicaSurf0(i,j,bi,bj)
                0233      &                              + aWght*silicaSurf1(i,j,bi,bj)
                0234             ENDDO
                0235            ENDDO
                0236           ENDDO
                0237          ENDDO
                0238 #ifndef ALLOW_AUTODIFF
                0239 #ifdef DIC_CALCITE_SAT
                0240        ELSEIF ( DIC_deepSilicaFile .NE. ' '  ) THEN
                0241 C-    If no surface silicate file but deep (3d) silicate provided, use top level
                0242          k = 1
                0243          CALL READ_REC_XYZ_RS( DIC_deepSilicaFile, silicaDeep0,
                0244      &                         intime0, nIter0, myThid )
                0245          CALL READ_REC_XYZ_RS( DIC_deepSilicaFile, silicaDeep1,
                0246      &                         intime1, nIter0, myThid )
                0247          DO bj = myByLo(myThid), myByHi(myThid)
                0248           DO bi = myBxLo(myThid), myBxHi(myThid)
                0249            DO j=1-OLy,sNy+OLy
                0250             DO i=1-OLx,sNx+OLx
                0251               silicaSurf(i,j,bi,bj) = bWght*silicaDeep0(i,j,k,bi,bj)
                0252      &                              + aWght*silicaDeep1(i,j,k,bi,bj)
                0253             ENDDO
                0254            ENDDO
                0255           ENDDO
                0256          ENDDO
                0257 #endif /* DIC_CALCITE_SAT */
                0258 #endif /* ndef ALLOW_AUTODIFF */
                0259        ENDIF
                0260        _EXCH_XY_RL( silicaSurf, myThid )
                0261 
                0262 C end if DIC_forcingCycle > 0
                0263       ENDIF
441b6e8b14 Step*0264 
63d67d9eeb Jean*0265 #endif /* ALLOW_DIC */
e547c854e1 Step*0266       RETURN
                0267       END