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
0004
0005
0006 SUBROUTINE DARWIN_INIT_CHL( bi, bj, myTime, myIter, myThid )
0007
0008
311ed820e7 Oliv*0009
0010
0011
0012
0013
0014
0015
e52aba8ed2 Oliv*0016
0017
311ed820e7 Oliv*0018
0019
0020
0021
8fbfd1f382 Oliv*0022
0023
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
0046 _RL myTime
0047 INTEGER bi, bj, myIter, myThid
0048
0049
0050 #ifdef ALLOW_DARWIN
0051
0052
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
311ed820e7 Oliv*0059
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
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
311ed820e7 Oliv*0112
ab02399485 Oliv*0113
0114
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
8fbfd1f382 Oliv*0138 ENDIF
0139
311ed820e7 Oliv*0140
0141
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