New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
Changeset 13677 for branches/UKMO/dev_r5518_GO6_package_FOAMv14_biophys/NEMOGCM/NEMO/TOP_SRC/MEDUSA/trcopt_medusa.F90 – NEMO

Ignore:
Timestamp:
2020-10-26T18:37:31+01:00 (4 years ago)
Author:
dford
Message:

Add option for MEDUSA to use RGB light scheme.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/UKMO/dev_r5518_GO6_package_FOAMv14_biophys/NEMOGCM/NEMO/TOP_SRC/MEDUSA/trcopt_medusa.F90

    r8074 r13677  
    2828 
    2929   PUBLIC   trc_opt_medusa   ! called in trcprg.F90 
     30 
     31   REAL(wp), DIMENSION(3,61) :: okrgb   !: tabulated attenuation coefficients for RGB absorption 
    3032 
    3133   !!* Substitution 
     
    5052      !!--------------------------------------------------------------------- 
    5153      INTEGER, INTENT( in ) ::   kt   ! index of the time stepping 
    52       INTEGER  ::   ji, jj, jk 
     54      INTEGER  ::   ji, jj, jk, irgb 
    5355      REAL(wp) ::   zpig                                    ! total pigment 
    5456      REAL(wp) ::   zkr                                     ! total absorption coefficient in red 
     
    5860      REAL(wp), DIMENSION(jpi,jpj)     ::   zpar0m          ! irradiance just below the surface 
    5961      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zparr, zparg    ! red and green compound of par 
     62      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zekb, zekg, zekr 
     63      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   ze1, ze2, ze3 
    6064 
    6165      CHARACTER (len=25) :: charout 
     
    113117      ! --------------------- 
    114118 
    115       DO jk = 2, jpk                     ! determination of local par in w levels 
    116          DO jj = 1, jpj 
    117             DO ji = 1, jpi 
    118                totchl =trn(ji,jj,jk-1,jpchn)+trn(ji,jj,jk-1,jpchd) 
    119                zpig = MAX( TINY(0.), totchl/rpig)  
    120                zkr  = xkr0 + xkrp * EXP( xlr * LOG( zpig ) ) 
    121                zkg  = xkg0 + xkgp * EXP( xlg * LOG( zpig ) ) 
    122                zparr(ji,jj,jk) = zparr(ji,jj,jk-1) * EXP( -zkr * fse3t(ji,jj,jk-1) ) 
    123                zparg(ji,jj,jk) = zparg(ji,jj,jk-1) * EXP( -zkg * fse3t(ji,jj,jk-1) ) 
     119      IF ( ln_rgb ) THEN 
     120         ! Mean PAR in T levels using RGB scheme 
     121         ! Should be same as in traqsr, but T rather than W levels 
     122         IF( kt == nittrc000 ) THEN 
     123            CALL trc_oce_rgb( okrgb ) 
     124         ENDIF 
     125         DO jk = 1, jpkm1 
     126            DO jj = 1, jpj 
     127               DO ji = 1, jpi 
     128                  totchl = trn(ji,jj,jk,jpchn) + trn(ji,jj,jk,jpchd) 
     129                  totchl = MIN( 10. , MAX( 0.05, totchl ) ) 
     130                  irgb = NINT( 41 + 20.* LOG10( totchl ) + 1.e-15 ) 
     131                  !                                                          
     132                  zekb(ji,jj,jk) = okrgb(1,irgb) * fse3t(ji,jj,jk) 
     133                  zekg(ji,jj,jk) = okrgb(2,irgb) * fse3t(ji,jj,jk) 
     134                  zekr(ji,jj,jk) = okrgb(3,irgb) * fse3t(ji,jj,jk) 
     135               END DO 
    124136            END DO 
    125         END DO 
    126       END DO 
    127  
    128       DO jk = 1, jpkm1                   ! mean par in t levels 
    129          DO jj = 1, jpj 
    130             DO ji = 1, jpi 
    131                totchl =trn(ji,jj,jk  ,jpchn)+trn(ji,jj,jk  ,jpchd) 
    132                zpig = MAX( TINY(0.), totchl/rpig)  
    133                zkr  = xkr0 + xkrp * EXP( xlr * LOG( zpig ) ) 
    134                zkg  = xkg0 + xkgp * EXP( xlg * LOG( zpig ) ) 
    135                zparr(ji,jj,jk)    = zparr(ji,jj,jk) / zkr / fse3t(ji,jj,jk) * ( 1 - EXP( -zkr*fse3t(ji,jj,jk) ) ) 
    136                zparg(ji,jj,jk)    = zparg(ji,jj,jk) / zkg / fse3t(ji,jj,jk) * ( 1 - EXP( -zkg*fse3t(ji,jj,jk) ) ) 
    137                xpar (ji,jj,jk) = MAX( zparr(ji,jj,jk) + zparg(ji,jj,jk), 1.e-15 ) 
     137         END DO 
     138         ze1(:,:,1) = zpar0m(:,:) * EXP( -0.5 * zekb(:,:,1) ) / 3.0 
     139         ze2(:,:,1) = zpar0m(:,:) * EXP( -0.5 * zekg(:,:,1) ) / 3.0 
     140         ze3(:,:,1) = zpar0m(:,:) * EXP( -0.5 * zekr(:,:,1) ) / 3.0 
     141         ! 
     142         DO jk = 2, jpk 
     143            DO jj = 1, jpj 
     144               DO ji = 1, jpi 
     145                  ze1(ji,jj,jk) = ze1(ji,jj,jk-1) * EXP( -0.5 * ( zekb(ji,jj,jk-1) + zekb(ji,jj,jk) ) ) 
     146                  ze2(ji,jj,jk) = ze2(ji,jj,jk-1) * EXP( -0.5 * ( zekg(ji,jj,jk-1) + zekg(ji,jj,jk) ) ) 
     147                  ze3(ji,jj,jk) = ze3(ji,jj,jk-1) * EXP( -0.5 * ( zekr(ji,jj,jk-1) + zekr(ji,jj,jk) ) ) 
     148                  xpar(ji,jj,jk) = MAX( ze1(ji,jj,jk) + ze2(ji,jj,jk) + ze3(ji,jj,jk), 1.e-15 ) 
     149               END DO 
    138150            END DO 
    139151         END DO 
    140       END DO 
     152      ELSE 
     153         DO jk = 2, jpk                     ! determination of local par in w levels 
     154            DO jj = 1, jpj 
     155               DO ji = 1, jpi 
     156                  totchl =trn(ji,jj,jk-1,jpchn)+trn(ji,jj,jk-1,jpchd) 
     157                  zpig = MAX( TINY(0.), totchl/rpig)  
     158                  zkr  = xkr0 + xkrp * EXP( xlr * LOG( zpig ) ) 
     159                  zkg  = xkg0 + xkgp * EXP( xlg * LOG( zpig ) ) 
     160                  zparr(ji,jj,jk) = zparr(ji,jj,jk-1) * EXP( -zkr * fse3t(ji,jj,jk-1) ) 
     161                  zparg(ji,jj,jk) = zparg(ji,jj,jk-1) * EXP( -zkg * fse3t(ji,jj,jk-1) ) 
     162               END DO 
     163           END DO 
     164         END DO 
     165 
     166         DO jk = 1, jpkm1                   ! mean par in t levels 
     167            DO jj = 1, jpj 
     168               DO ji = 1, jpi 
     169                  totchl =trn(ji,jj,jk  ,jpchn)+trn(ji,jj,jk  ,jpchd) 
     170                  zpig = MAX( TINY(0.), totchl/rpig)  
     171                  zkr  = xkr0 + xkrp * EXP( xlr * LOG( zpig ) ) 
     172                  zkg  = xkg0 + xkgp * EXP( xlg * LOG( zpig ) ) 
     173                  zparr(ji,jj,jk)    = zparr(ji,jj,jk) / zkr / fse3t(ji,jj,jk) * ( 1 - EXP( -zkr*fse3t(ji,jj,jk) ) ) 
     174                  zparg(ji,jj,jk)    = zparg(ji,jj,jk) / zkg / fse3t(ji,jj,jk) * ( 1 - EXP( -zkg*fse3t(ji,jj,jk) ) ) 
     175                  xpar (ji,jj,jk) = MAX( zparr(ji,jj,jk) + zparg(ji,jj,jk), 1.e-15 ) 
     176               END DO 
     177            END DO 
     178         END DO 
     179      ENDIF 
    141180 
    142181      ! 3. Determination of euphotic layer depth 
Note: See TracChangeset for help on using the changeset viewer.