Back to home page

darwin3

 
 

    


File indexing completed on 2025-12-02 20:42:56 UTC

view on githubraw file Latest commit a092808e on 2025-12-02 20:09:45 UTC
8fbfd1f382 Oliv*0001 #include "DARWIN_OPTIONS.h"
                0002 
                0003 CBOP
                0004 C !ROUTINE: DARWIN_INIT_CHL
                0005 C !INTERFACE: ==========================================================
                0006       SUBROUTINE DARWIN_INIT_CHL( bi, bj, myTime, myIter, myThid )
                0007 
                0008 C !DESCRIPTION:
311ed820e7 Oliv*0009 C     Make sure Chl/C is bounded by chl2cmin and chl2cmax.
                0010 C     If not DARWIN_ALLOW_CHLQUOTA, assign ChlPrev.
                0011 C     If darwin_chlInitBalanced is true, initialize Chl from c assuming
                0012 C     balanced growth following Geider, Macintyre, Kana 1997.
                0013 C     If DARWIN_CHL_INIT_LEGACY,
                0014 C     - with radtrans, use zero light for backwards compatibility
                0015 C       (code for using radtrans lite is included).
e52aba8ed2 Oliv*0016 C     - without radtrans, use PARfile if given, else use 200 uEin/m2/s
                0017 C       and attenuate assuming pure water (no orgamic matter)
311ed820e7 Oliv*0018 C     If not DARWIN_CHL_INIT_LEGACY, compute light using initial Chl
                0019 C     (usually 0 if darwin_chlInitBalanced).
                0020 C     For backwards compatibility, ice is taken into account only
                0021 C     without radtrans and without DARWIN_CHL_INIT_LEGACY.
8fbfd1f382 Oliv*0022 
                0023 C !USES: ===============================================================
                0024       IMPLICIT NONE
                0025 #include "SIZE.h"
                0026 #include "GRID.h"
                0027 #include "EEPARAMS.h"
                0028 #include "PARAMS.h"
                0029 #include "DYNVARS.h"
                0030 #include "PTRACERS_SIZE.h"
                0031 #include "PTRACERS_FIELDS.h"
                0032 #ifdef ALLOW_RADTRANS
                0033 #include "RADTRANS_SIZE.h"
                0034 #include "RADTRANS_PARAMS.h"
                0035 #include "RADTRANS_FIELDS.h"
                0036 #endif
                0037 #include "DARWIN_SIZE.h"
                0038 #include "DARWIN_INDICES.h"
                0039 #include "DARWIN_EXF_FIELDS.h"
                0040 #include "DARWIN_RADTRANS.h"
                0041 #include "DARWIN_PARAMS.h"
                0042 #include "DARWIN_TRAITS.h"
                0043 #include "DARWIN_FIELDS.h"
                0044 
                0045 C !INPUT PARAMETERS: ===================================================
                0046       _RL myTime
                0047       INTEGER bi, bj, myIter, myThid
                0048 CEOP
                0049 
                0050 #ifdef ALLOW_DARWIN
                0051 
                0052 C!LOCAL VARIABLES: ====================================================
                0053       INTEGER i,j,k,l,jp
                0054       _RL PAR(1-OLx:sNx+OLx, 1-OLy:sNy+OLy, Nr, nlam)
                0055       _RL alpha_I, chltmp
                0056       _RL lite, atten
                0057 
                0058 C ======================================================================
311ed820e7 Oliv*0059 C compute light
8fbfd1f382 Oliv*0060       IF (darwin_chlInitBalanced) THEN
311ed820e7 Oliv*0061 
8fbfd1f382 Oliv*0062 #ifdef DARWIN_CHL_INIT_LEGACY
311ed820e7 Oliv*0063 
                0064 # ifdef ALLOW_RADTRANS
8fbfd1f382 Oliv*0065        DO j=1-OLy,sNy+OLy
                0066         DO i=1-OLx,sNx+OLx
                0067          lite = 0 _d 0
                0068          DO l=1,nlam
                0069           lite = lite + RT_WtouEins(l)*(RT_Ed_sfc(i,j,bi,bj,l)+
                0070      &                                  RT_Es_sfc(i,j,bi,bj,l))
                0071          ENDDO
                0072          atten = 0 _d 0
                0073          DO k=1,nR
                0074           IF (HFacC(i,j,k,bi,bj).GT.0. _d 0) THEN
                0075            atten= atten + katten_w*5. _d -1*drF(k)
                0076            IF (k.gt.1)THEN
                0077             atten = atten + katten_w*5. _d -1*drF(k-1)
                0078            ENDIF
                0079            PAR(i,j,k,1) = lite*EXP(-atten)
                0080           ENDIF
                0081          ENDDO
                0082         ENDDO
                0083        ENDDO
311ed820e7 Oliv*0084 # else
ab02399485 Oliv*0085        IF (PARfile .NE. ' ') THEN
311ed820e7 Oliv*0086 C!!!!!  do not take ice into account for backwards compatibility
ab02399485 Oliv*0087         j = -99
                0088         CALL DARWIN_LIGHT(PAR,myTime,bi,bj,1-OLx,sNx+OLx,1-OLy,sNy+OLy,
                0089      &                    myTime,j,myThid)
                0090        ELSE
                0091         DO j=1-OLy,sNy+OLy
                0092          DO i=1-OLx,sNx+OLx
                0093           lite = 200 _d 0
                0094           atten = 0 _d 0
                0095           DO k=1,nR
                0096            IF (HFacC(i,j,k,bi,bj).GT.0. _d 0) THEN
                0097             atten= atten + katten_w*5. _d -1*drF(k)
                0098             IF (k.gt.1)THEN
                0099              atten = atten + katten_w*5. _d -1*drF(k-1)
                0100             ENDIF
                0101             PAR(i,j,k,1) = lite*EXP(-atten)
                0102            ENDIF
                0103           ENDDO
                0104          ENDDO
                0105         ENDDO
                0106        ENDIF
311ed820e7 Oliv*0107 # endif
                0108 
                0109 #else /* not DARWIN_CHL_INIT_LEGACY */
                0110 
a092808e6b shlo*0111 C      compute PAR from current Chl 
311ed820e7 Oliv*0112 C      (usually initialized to 0 if darwin_chlInitBalanced)
ab02399485 Oliv*0113 C      do not fill diagnostics,
                0114 C      do not take ice into account for backwards compatibility
311ed820e7 Oliv*0115 # ifdef ALLOW_RADTRANS
2f3c6eaa6e Oliv*0116 #  ifdef ALLOW_OASIM
                0117        IF ( useOASIM ) THEN
                0118 #   ifdef ALLOW_DEBUG
                0119         IF (debugMode) CALL DEBUG_CALL('OASIM_FIELDS_LOAD',myThid)
                0120 #   endif /* ALLOW_DEBUG */
                0121         CALL TIMER_START('OASIM_FIELDS_LOAD  [DARWIN_INIT_CHL]',myThid)
                0122         CALL OASIM_FIELDS_LOAD( .FALSE., myTime, myIter, myThid )
                0123         CALL TIMER_STOP ('OASIM_FIELDS_LOAD  [DARWIN_INIT_CHL]',myThid)
                0124        ENDIF
                0125 #  endif /* ALLOW_OASIM */
ab02399485 Oliv*0126        j = -1
8fbfd1f382 Oliv*0127        CALL DARWIN_LIGHT_RADTRANS(PAR,myTime,bi,bj,1-OLx,sNx+OLx,
2f3c6eaa6e Oliv*0128      &                            1-OLy,sNy+OLy,myTime,j,myThid)
311ed820e7 Oliv*0129 # else
ab02399485 Oliv*0130        j = -99
8fbfd1f382 Oliv*0131        CALL DARWIN_LIGHT(PAR,myTime,bi,bj,1-OLx,sNx+OLx,1-OLy,sNy+OLy,
311ed820e7 Oliv*0132      &                   myTime,j,myThid)
                0133 # endif
                0134 
                0135 #endif /* not DARWIN_CHL_INIT_LEGACY */
                0136 
                0137 C     endif not darwin_chlInitBalanced
8fbfd1f382 Oliv*0138       ENDIF
                0139 
311ed820e7 Oliv*0140 C ======================================================================
                0141 C compute Chlorophyll
                0142 
8fbfd1f382 Oliv*0143       DO jp=1,nPhoto
311ed820e7 Oliv*0144        DO k=1,Nr
                0145         DO j=1-OLy,sNy+OLy
                0146          DO i=1-OLx,sNx+OLx
8fbfd1f382 Oliv*0147 #ifdef DARWIN_ALLOW_CHLQUOTA
311ed820e7 Oliv*0148           chltmp = Ptracer(i,j,k,bi,bj,iChl+jp-1)
8fbfd1f382 Oliv*0149 #else
311ed820e7 Oliv*0150           chltmp = 0.0 _d 0
8fbfd1f382 Oliv*0151 #endif
311ed820e7 Oliv*0152           IF (darwin_chlInitBalanced) THEN
8fbfd1f382 Oliv*0153 #if defined(ALLOW_RADTRANS) && defined(DARWIN_CHL_INIT_LEGACY)
311ed820e7 Oliv*0154            alpha_I = alpha_mean(jp) * PAR(i,j,k,1)
                0155            alpha_I = 0 _d 0
8fbfd1f382 Oliv*0156 #else
311ed820e7 Oliv*0157            alpha_I = 0.0
                0158            DO l = 1, nlam
                0159             alpha_I = alpha_I + alphachl(jp,l) * PAR(i,j,k,l)
                0160            ENDDO
8fbfd1f382 Oliv*0161 #endif
311ed820e7 Oliv*0162            chltmp = Ptracer(i,j,k,bi,bj,ic+jp-1)*
                0163      &              chl2cmax(jp)/(1+chl2cmax(jp)*alpha_I/(2*PCmax(jp)))
                0164           ENDIF
                0165           chltmp = MAX(Ptracer(i,j,k,bi,bj,ic+jp-1)*chl2cmin(jp),
                0166      &                 chltmp)
                0167           chltmp = MIN(Ptracer(i,j,k,bi,bj,ic+jp-1)*chl2cmax(jp),
                0168      &                 chltmp)
8fbfd1f382 Oliv*0169 #ifdef DARWIN_ALLOW_CHLQUOTA
311ed820e7 Oliv*0170           Ptracer(i,j,k,bi,bj,iChl+jp-1) = chltmp
8fbfd1f382 Oliv*0171 #else
311ed820e7 Oliv*0172 # ifdef ALLOW_RADTRANS
                0173           ChlPrev(i,j,k,bi,bj,jp) = chltmp
                0174 # else
                0175           ChlPrev(i,j,k,bi,bj)=ChlPrev(i,j,k,bi,bj)+chltmp
                0176 # endif
8fbfd1f382 Oliv*0177 #endif
311ed820e7 Oliv*0178          ENDDO
                0179         ENDDO
                0180        ENDDO
8fbfd1f382 Oliv*0181       ENDDO
                0182 
                0183 #endif /* ALLOW_DARWIN */
                0184 
                0185       RETURN
                0186       END