Back to home page

darwin3

 
 

    


File indexing completed on 2024-12-17 18:33:59 UTC

view on githubraw file Latest commit 086a45f2 on 2024-08-16 18:53:56 UTC
8fbfd1f382 Oliv*0001 #include "DARWIN_OPTIONS.h"
                0002 
                0003 CBOP
                0004 C !ROUTINE: DARWIN_LIGHT
                0005 C !INTERFACE: ==========================================================
                0006       SUBROUTINE DARWIN_LIGHT(
                0007      O                         PAR,
                0008      I                         midTime, bi, bj, iMin, iMax, jMin, jMax,
                0009      I                         myTime, myIter, myThid )
                0010 
                0011 C !DESCRIPTION:
                0012 
                0013 C !USES: ===============================================================
                0014       IMPLICIT NONE
                0015 #include "SIZE.h"
                0016 #include "GRID.h"
                0017 #include "EEPARAMS.h"
                0018 #include "PARAMS.h"
                0019 C#include "DYNVARS.h"
                0020 #include "FFIELDS.h"
                0021 #include "PTRACERS_SIZE.h"
                0022 #include "PTRACERS_FIELDS.h"
                0023 #ifdef ALLOW_DARWIN
                0024 #include "DARWIN_SIZE.h"
                0025 #include "DARWIN_INDICES.h"
                0026 #include "DARWIN_EXF_FIELDS.h"
                0027 #include "DARWIN_PARAMS.h"
                0028 #include "DARWIN_TRAITS.h"
                0029 #include "DARWIN_FIELDS.h"
                0030 #endif
                0031 
                0032 C !INPUT PARAMETERS: ===================================================
                0033 C  myThid               :: thread number
                0034       _RL midTime
                0035       _RL myTime
                0036       INTEGER bi, bj, iMin, iMax, jMin, jMax, myIter, myThid
                0037 
                0038 C !OUTPUT PARAMETERS: ==================================================
                0039       _RL PAR(1-OLx:sNx+OLx, 1-OLy:sNy+OLy, Nr)
                0040 CEOP
                0041 
                0042 #ifdef ALLOW_DARWIN
                0043 #ifndef ALLOW_RADTRANS
                0044 
                0045 C!LOCAL VARIABLES: ====================================================
                0046 C  i,j                  :: loop indices
                0047 C  k                    :: vertical level
                0048       INTEGER i,j,k,jp
                0049       _RL PARlat(1-OLy:sNy+OLy)
                0050       _RL Chl(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
                0051       _RL PARF(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
                0052       _RL atten(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
                0053 
                0054 C ======================================================================
                0055       IF (DARWIN_haveSurfPAR) THEN
                0056        DO j=jMin,jMax
                0057         DO i=iMin,iMax
                0058          PARF(i,j) = surfPAR(i,j,bi,bj)
                0059         ENDDO
                0060        ENDDO
                0061       ELSEIF (DARWIN_useQsw) THEN
                0062        DO j=jMin,jMax
                0063         DO i=iMin,iMax
                0064          PARF(i,j) = -parfrac*parconv*Qsw(i,j,bi,bj)*maskC(i,j,1,bi,bj)
                0065         ENDDO
                0066        ENDDO
                0067       ELSE
                0068        CALL DARWIN_INSOL(midTime, PARlat, bj, .FALSE.)
                0069        DO j=jMin,jMax
                0070         DO i=iMin,iMax
                0071 C        convert W/m2 to uEin/s/m2
                0072          PARF(i,j) = PARlat(j)/.2174
                0073         ENDDO
                0074        ENDDO
                0075       ENDIF
                0076 
                0077 #ifdef ALLOW_DIAGNOSTICS
                0078       IF (useDiagnostics .AND. myIter .GE.0) THEN
                0079        CALL DIAGNOSTICS_FILL(PARF,'surfPAR ',1,1,2,bi,bj,myThid)
                0080       ENDIF
                0081 #endif
                0082 
1a51d9d680 Oliv*0083       IF (myiter .gt. -99 .AND. .NOT.DARWIN_useQsw) THEN
8fbfd1f382 Oliv*0084        DO j=jMin,jMax
                0085         DO i=iMin,iMax
                0086          PARF(i,j) = PARF(i,j) * (1.0 _d 0 - iceFrac(i,j,bi,bj))
                0087         ENDDO
                0088        ENDDO
                0089       ENDIF
                0090 
                0091       DO k=1,Nr
                0092 
                0093        DO j=jMin,jMax
                0094         DO i=iMin,iMax
                0095          Chl(i,j) = 0.0 _d 0
                0096         ENDDO
                0097        ENDDO
                0098 #ifdef DARWIN_ALLOW_GEIDER
                0099 #ifdef DARWIN_ALLOW_CHLQUOTA
                0100        DO jp=1,nPhoto
                0101         DO j=jMin,jMax
                0102          DO i=iMin,iMax
086a45f245 Oliv*0103           Chl(i,j) = Chl(i,j) + MAX(0 _d 0,
                0104      &                              Ptracer(i,j,k,bi,bj,iChl+jp-1))
8fbfd1f382 Oliv*0105          ENDDO
                0106         ENDDO
                0107        ENDDO
                0108 #else
                0109        DO j=jMin,jMax
                0110         DO i=iMin,iMax
                0111          Chl(i,j) = ChlPrev(i,j,k,bi,bj)
                0112         ENDDO
                0113        ENDDO
                0114 #endif
                0115 #else
                0116        DO jp=1,nPhoto
                0117         DO j=jMin,jMax
                0118          DO i=iMin,iMax
086a45f245 Oliv*0119           Chl(i,j) = Chl(i,j) + MAX(0 _d 0,
8fbfd1f382 Oliv*0120      &                 Ptracer(i,j,k,bi,bj,ic+jp-1)*R_ChlC(jp))
                0121          ENDDO
                0122         ENDDO
                0123        ENDDO
                0124 #endif
                0125 
                0126        DO j=jMin,jMax
                0127         DO i=iMin,iMax
                0128 C TODO should include hFacC
                0129          atten(i,j) = (katten_w + katten_Chl*Chl(i,j))*DRF(k)
                0130 #ifdef DARWIN_AVPAR
                0131          PAR(i,j,k) = PARF(i,j)*(1.0 - EXP(-atten(i,j)))/atten(i,j)
                0132 #else /* USE_MIDPAR */
                0133          PAR(i,j,k) = PARF(i,j)*EXP(-0.5*atten(i,j))
                0134 #endif
                0135          PAR(i,j,k) = PAR(i,j,k)*maskC(i,j,k,bi,bj)
                0136         ENDDO
                0137        ENDDO
                0138 
                0139 #ifdef ALLOW_DIAGNOSTICS
                0140        IF (useDiagnostics .AND. myIter .GE.0) THEN
                0141         CALL DIAGNOSTICS_FILL(PARF,'PARF    ',k,1,2,bi,bj,myThid)
                0142         CALL DIAGNOSTICS_FILL(atten,'atten   ',k,1,2,bi,bj,myThid)
                0143        ENDIF
                0144 #endif
                0145        DO j=jMin,jMax
                0146         DO i=iMin,iMax
                0147          PARF(i,j) = PARF(i,j)*EXP(-atten(i,j))
                0148         ENDDO
                0149        ENDDO
                0150 
                0151 C     k
                0152       ENDDO
                0153 
                0154 #endif /* not ALLOW_RADTRANS */
                0155 #endif /* ALLOW_DARWIN */
                0156 
                0157       RETURN
                0158       END