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 13496 for branches – NEMO

Changeset 13496 for branches


Ignore:
Timestamp:
2020-09-21T12:33:32+02:00 (4 years ago)
Author:
dford
Message:

Two-way NEMO-ERSEM coupling via chlorophyll field.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/UKMO/AMM15_v3_6_STABLE_package_collate_utils366_fabmv1_v2/NEMOGCM/NEMO/OPA_SRC/TRA/traqsr.F90

    r13489 r13496  
    3232   USE wrk_nemo       ! Memory Allocation 
    3333   USE timing         ! Timing 
     34#if defined key_fabm 
     35   USE trc, ONLY: trn  ! FABM variables 
     36   USE par_fabm        ! FABM parameters 
     37#endif 
    3438 
    3539   IMPLICIT NONE 
     
    107111      REAL(wp) ::   zz0, zz1, z1_e3t     !    -         - 
    108112      REAL(wp), POINTER, DIMENSION(:,:  ) :: zekb, zekg, zekr 
     113      REAL(wp), POINTER, DIMENSION(:,:,:) :: zekb_3d, zekg_3d, zekr_3d 
    109114      REAL(wp), POINTER, DIMENSION(:,:,:) :: ze0, ze1, ze2, ze3, zea, ztrdt 
    110115      !!---------------------------------------------------------------------- 
     
    114119      CALL wrk_alloc( jpi, jpj,      zekb, zekg, zekr        )  
    115120      CALL wrk_alloc( jpi, jpj, jpk, ze0, ze1, ze2, ze3, zea )  
     121      CALL wrk_alloc( jpi, jpj, jpk, zekb_3d, zekg_3d, zekr_3d )   
    116122      ! 
    117123      IF( kt == nit000 ) THEN 
     
    215221            !                                             ! ------------------------- ! 
    216222            ! Set chlorophyl concentration 
    217             IF( nn_chldta == 1 .OR. lk_vvl ) THEN            !*  Variable Chlorophyll or ocean volume 
    218                ! 
    219                IF( nn_chldta == 1 ) THEN                             !*  Variable Chlorophyll 
     223            IF( nn_chldta == 2 .OR. nn_chldta == 1 .OR. lk_vvl ) THEN   !*  Variable Chlorophyll or ocean volume 
     224               ! 
     225               IF( nn_chldta == 2 ) THEN 
     226                  DO jk = 1, nksr+1 
     227                     DO jj = 1, jpj 
     228                        DO ji = 1, jpi 
     229#if defined key_fabm 
     230                           zchl = trn(ji,jj,jk,jp_fabm_m1+jp_fabm_chl1) + trn(ji,jj,jk,jp_fabm_m1+jp_fabm_chl2) + & 
     231                              &   trn(ji,jj,jk,jp_fabm_m1+jp_fabm_chl3) + trn(ji,jj,jk,jp_fabm_m1+jp_fabm_chl4) 
     232#endif 
     233                           zchl = MIN(  10. , MAX( 0.03, zchl )  ) 
     234                           irgb = NINT( 41 + 20.*LOG10(zchl) + 1.e-15 ) 
     235                           !                                                          
     236                           zekb_3d(ji,jj,jk) = rkrgb(1,irgb) 
     237                           zekg_3d(ji,jj,jk) = rkrgb(2,irgb) 
     238                           zekr_3d(ji,jj,jk) = rkrgb(3,irgb) 
     239                        END DO 
     240                     END DO 
     241                  END DO 
     242                  ! 
     243               ELSEIF( nn_chldta == 1 ) THEN                             !*  Variable Chlorophyll 
    220244                  ! 
    221245                  CALL fld_read( kt, 1, sf_chl )                         ! Read Chl data and provides it at the current time step 
     
    249273               ! 
    250274               DO jk = 2, nksr+1 
     275                  IF( nn_chldta == 2 ) THEN 
     276                     zekb(:,:) = zekb_3d(:,:,jk) 
     277                     zekg(:,:) = zekg_3d(:,:,jk) 
     278                     zekr(:,:) = zekr_3d(:,:,jk) 
     279                  ENDIF 
    251280!CDIR NOVERRCHK 
    252281                  DO jj = 1, jpj 
     
    267296               ! clem: store attenuation coefficient of the first ocean level 
    268297               IF ( ln_qsr_ice ) THEN 
     298                  IF( nn_chldta == 2 ) THEN 
     299                     zekb(:,:) = zekb_3d(:,:,1) 
     300                     zekg(:,:) = zekg_3d(:,:,1) 
     301                     zekr(:,:) = zekr_3d(:,:,1) 
     302                  ENDIF 
    269303                  DO jj = 1, jpj 
    270304                     DO ji = 1, jpi 
     
    416450      CALL wrk_dealloc( jpi, jpj,      zekb, zekg, zekr        )  
    417451      CALL wrk_dealloc( jpi, jpj, jpk, ze0, ze1, ze2, ze3, zea )  
     452      CALL wrk_dealloc( jpi, jpj, jpk, zekb_3d, zekg_3d, zekr_3d )  
    418453      ! 
    419454      IF( nn_timing == 1 )  CALL timing_stop('tra_qsr') 
     
    483518         WRITE(numout,*) '      ERSEM spectral heating model             ln_qsr_spec= ', ln_qsr_spec 
    484519         WRITE(numout,*) '      light penetration for ice-model LIM3     ln_qsr_ice = ', ln_qsr_ice 
    485          WRITE(numout,*) '      RGB : Chl data (=1) or cst value (=0)    nn_chldta = ', nn_chldta 
     520         WRITE(numout,*) '      RGB: model (2), file (1) or cst (0) chl   nn_chldta = ', nn_chldta 
    486521         WRITE(numout,*) '      RGB & 2 bands: fraction of light (rn_si1)    rn_abs = ', rn_abs 
    487522         WRITE(numout,*) '      RGB & 2 bands: shortess depth of extinction  rn_si0 = ', rn_si0 
     
    510545         IF( ln_qsr_rgb .AND. nn_chldta == 0 )   nqsr =  1  
    511546         IF( ln_qsr_rgb .AND. nn_chldta == 1 )   nqsr =  2 
    512          IF( ln_qsr_2bd                      )   nqsr =  3 
    513          IF( ln_qsr_bio                      )   nqsr =  4 
    514          IF( nn_kd490dta == 1                )   nqsr =  5 
    515          IF( ln_qsr_spec                     )   nqsr =  6 
     547         IF( ln_qsr_rgb .AND. nn_chldta == 2 )   nqsr =  3 
     548         IF( ln_qsr_2bd                      )   nqsr =  4 
     549         IF( ln_qsr_bio                      )   nqsr =  5 
     550         IF( nn_kd490dta == 1                )   nqsr =  6 
     551         IF( ln_qsr_spec                     )   nqsr =  7 
    516552         ! 
    517553         IF(lwp) THEN                   ! Print the choice 
    518554            WRITE(numout,*) 
    519555            IF( nqsr ==  1 )   WRITE(numout,*) '         R-G-B   light penetration - Constant Chlorophyll' 
    520             IF( nqsr ==  2 )   WRITE(numout,*) '         R-G-B   light penetration - Chl data ' 
    521             IF( nqsr ==  3 )   WRITE(numout,*) '         2 bands light penetration' 
    522             IF( nqsr ==  4 )   WRITE(numout,*) '         bio-model light penetration' 
    523             IF( nqsr ==  5 )   WRITE(numout,*) '         KD490 light penetration' 
    524             IF( nqsr ==  6 )   WRITE(numout,*) '         ERSEM spectral light penetration' 
     556            IF( nqsr ==  2 )   WRITE(numout,*) '         R-G-B   light penetration - Chl data from file' 
     557            IF( nqsr ==  3 )   WRITE(numout,*) '         R-G-B   light penetration - Chl data from model' 
     558            IF( nqsr ==  4 )   WRITE(numout,*) '         2 bands light penetration' 
     559            IF( nqsr ==  5 )   WRITE(numout,*) '         bio-model light penetration' 
     560            IF( nqsr ==  6 )   WRITE(numout,*) '         KD490 light penetration' 
     561            IF( nqsr ==  7 )   WRITE(numout,*) '         ERSEM spectral light penetration' 
    525562         ENDIF 
    526563#if ! defined key_fabm 
    527564         ! 
    528          IF( nqsr ==  6 ) THEN 
     565         IF( nqsr ==  2 ) THEN 
     566            CALL ctl_stop( 'nn_chldta=2 so trying to use ERSEM chlorophyll for light penetration', & 
     567               &           'but not running with ERSEM' ) 
     568         ELSEIF( nqsr ==  7 ) THEN 
    529569            CALL ctl_stop( 'ln_qsr_spec=.true. so trying to use ERSEM spectral light penetration', & 
    530570               &           'but not running with ERSEM' ) 
     
    577617                  &                                         'Solar penetration function of read chlorophyll', 'namtra_qsr' ) 
    578618               ! 
     619            ELSEIF( nn_chldta == 2 ) THEN       !* Chl data will be got from model at each time step 
     620               IF(lwp) WRITE(numout,*) 
     621               IF(lwp) WRITE(numout,*) '        Chlorophyll will be taken from model at each time step' 
    579622            ELSE                                !* constant Chl : compute once for all the distribution of light (etot3) 
    580623               IF(lwp) WRITE(numout,*) 
Note: See TracChangeset for help on using the changeset viewer.