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 7351 for branches/2016/dev_INGV_UKMO_2016/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zopt.F90 – NEMO

Ignore:
Timestamp:
2016-11-28T17:04:10+01:00 (7 years ago)
Author:
emanuelaclementi
Message:

ticket #1805 step 3: /2016/dev_INGV_UKMO_2016 aligned to the trunk at revision 7161

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2016/dev_INGV_UKMO_2016/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zopt.F90

    r5836 r7351  
    5151   REAL(wp), DIMENSION(3,61), PUBLIC ::   xkrgb   !: tabulated attenuation coefficients for RGB absorption 
    5252    
    53    !! * Substitutions 
    54 #  include "domzgr_substitute.h90" 
    5553   !!---------------------------------------------------------------------- 
    5654   !! NEMO/TOP 3.3 , NEMO Consortium (2010) 
     
    7674      REAL(wp) ::   zchl 
    7775      REAL(wp) ::   zc0 , zc1 , zc2, zc3, z1_dep 
    78       REAL(wp), POINTER, DIMENSION(:,:  ) :: zdepmoy, zetmp1, zetmp2, zetmp3, zetmp4, zqsr100 
     76      REAL(wp), POINTER, DIMENSION(:,:  ) :: zdepmoy, zetmp1, zetmp2, zetmp3, zetmp4 
     77      REAL(wp), POINTER, DIMENSION(:,:  ) :: zqsr100, zqsr_corr 
    7978      REAL(wp), POINTER, DIMENSION(:,:,:) :: zpar, ze0, ze1, ze2, ze3 
    8079      !!--------------------------------------------------------------------- 
     
    8382      ! 
    8483      ! Allocate temporary workspace 
    85       CALL wrk_alloc( jpi, jpj,      zqsr100, zdepmoy, zetmp1, zetmp2, zetmp3, zetmp4 ) 
    86       CALL wrk_alloc( jpi, jpj, jpk, zpar, ze0, ze1, ze2, ze3 ) 
     84      CALL wrk_alloc( jpi, jpj,      zdepmoy, zetmp1, zetmp2, zetmp3, zetmp4 ) 
     85      CALL wrk_alloc( jpi, jpj,      zqsr100, zqsr_corr ) 
     86      CALL wrk_alloc( jpi, jpj, jpk, zpar   , ze0, ze1, ze2, ze3 ) 
    8787 
    8888      IF( knt == 1 .AND. ln_varpar ) CALL p4z_opt_sbc( kt ) 
     
    101101               irgb = NINT( 41 + 20.* LOG10( zchl ) + rtrn ) 
    102102               !                                                          
    103                ekb(ji,jj,jk) = xkrgb(1,irgb) * fse3t(ji,jj,jk) 
    104                ekg(ji,jj,jk) = xkrgb(2,irgb) * fse3t(ji,jj,jk) 
    105                ekr(ji,jj,jk) = xkrgb(3,irgb) * fse3t(ji,jj,jk) 
     103               ekb(ji,jj,jk) = xkrgb(1,irgb) * e3t_n(ji,jj,jk) 
     104               ekg(ji,jj,jk) = xkrgb(2,irgb) * e3t_n(ji,jj,jk) 
     105               ekr(ji,jj,jk) = xkrgb(3,irgb) * e3t_n(ji,jj,jk) 
    106106            END DO 
    107107         END DO 
     
    110110      !                                        !  -------------------------------------- 
    111111      IF( l_trcdm2dc ) THEN                     !  diurnal cycle 
    112          ! 1% of qsr to compute euphotic layer 
    113          zqsr100(:,:) = 0.01 * qsr_mean(:,:)     !  daily mean qsr 
    114          ! 
    115          CALL p4z_opt_par( kt, qsr_mean, ze1, ze2, ze3 )  
     112         ! 
     113         zqsr_corr(:,:) = qsr_mean(:,:) / ( 1. - fr_i(:,:) + rtrn ) 
     114         ! 
     115         CALL p4z_opt_par( kt, zqsr_corr, ze1, ze2, ze3, pqsr100 = zqsr100 )  
    116116         ! 
    117117         DO jk = 1, nksrp       
     
    121121         END DO 
    122122         ! 
    123          CALL p4z_opt_par( kt, qsr, ze1, ze2, ze3 )  
     123         zqsr_corr(:,:) = qsr(:,:) / ( 1. - fr_i(:,:) + rtrn ) 
     124         ! 
     125         CALL p4z_opt_par( kt, zqsr_corr, ze1, ze2, ze3 )  
    124126         ! 
    125127         DO jk = 1, nksrp       
     
    128130         ! 
    129131      ELSE 
    130          ! 1% of qsr to compute euphotic layer 
    131          zqsr100(:,:) = 0.01 * qsr(:,:) 
    132          ! 
    133          CALL p4z_opt_par( kt, qsr, ze1, ze2, ze3 )  
     132         ! 
     133         zqsr_corr(:,:) = qsr(:,:) / ( 1. - fr_i(:,:) + rtrn ) 
     134         ! 
     135         CALL p4z_opt_par( kt, zqsr_corr, ze1, ze2, ze3, pqsr100 = zqsr100 )  
    134136         ! 
    135137         DO jk = 1, nksrp       
     
    159161         DO jj = 1, jpj 
    160162           DO ji = 1, jpi 
    161               IF( etot_ndcy(ji,jj,jk) * tmask(ji,jj,jk) >= 0.43 * zqsr100(ji,jj) )  THEN 
     163              IF( etot_ndcy(ji,jj,jk) * tmask(ji,jj,jk) >= zqsr100(ji,jj) )  THEN 
    162164                 neln(ji,jj) = jk+1                    ! Euphotic level : 1rst T-level strictly below Euphotic layer 
    163165                 !                                     ! nb: ensure the compatibility with nmld_trc definition in trd_mld_trc_zint 
    164                  heup(ji,jj) = fsdepw(ji,jj,jk+1)      ! Euphotic layer depth 
     166                 heup(ji,jj) = gdepw_n(ji,jj,jk+1)     ! Euphotic layer depth 
    165167              ENDIF 
    166168           END DO 
     
    179181         DO jj = 1, jpj 
    180182            DO ji = 1, jpi 
    181                IF( fsdepw(ji,jj,jk+1) <= hmld(ji,jj) ) THEN 
    182                   zetmp1 (ji,jj) = zetmp1 (ji,jj) + etot     (ji,jj,jk) * fse3t(ji,jj,jk) ! remineralisation 
    183                   zetmp2 (ji,jj) = zetmp2 (ji,jj) + etot_ndcy(ji,jj,jk) * fse3t(ji,jj,jk) ! production 
    184                   zetmp3 (ji,jj) = zetmp3 (ji,jj) + enano    (ji,jj,jk) * fse3t(ji,jj,jk) ! production 
    185                   zetmp4 (ji,jj) = zetmp4 (ji,jj) + ediat    (ji,jj,jk) * fse3t(ji,jj,jk) ! production 
    186                   zdepmoy(ji,jj) = zdepmoy(ji,jj) + fse3t(ji,jj,jk) 
     183               IF( gdepw_n(ji,jj,jk+1) <= hmld(ji,jj) ) THEN 
     184                  zetmp1 (ji,jj) = zetmp1 (ji,jj) + etot     (ji,jj,jk) * e3t_n(ji,jj,jk) ! remineralisation 
     185                  zetmp2 (ji,jj) = zetmp2 (ji,jj) + etot_ndcy(ji,jj,jk) * e3t_n(ji,jj,jk) ! production 
     186                  zetmp3 (ji,jj) = zetmp3 (ji,jj) + enano    (ji,jj,jk) * e3t_n(ji,jj,jk) ! production 
     187                  zetmp4 (ji,jj) = zetmp4 (ji,jj) + ediat    (ji,jj,jk) * e3t_n(ji,jj,jk) ! production 
     188                  zdepmoy(ji,jj) = zdepmoy(ji,jj) +                       e3t_n(ji,jj,jk) 
    187189               ENDIF 
    188190            END DO 
     
    196198         DO jj = 1, jpj 
    197199            DO ji = 1, jpi 
    198                IF( fsdepw(ji,jj,jk+1) <= hmld(ji,jj) ) THEN 
     200               IF( gdepw_n(ji,jj,jk+1) <= hmld(ji,jj) ) THEN 
    199201                  z1_dep = 1. / ( zdepmoy(ji,jj) + rtrn ) 
    200202                  emoy (ji,jj,jk) = zetmp1(ji,jj) * z1_dep 
     
    220222      ENDIF 
    221223      ! 
    222       CALL wrk_dealloc( jpi, jpj,      zqsr100, zdepmoy, zetmp1, zetmp2, zetmp3, zetmp4 ) 
    223       CALL wrk_dealloc( jpi, jpj, jpk, zpar,  ze0, ze1, ze2, ze3 ) 
     224      CALL wrk_dealloc( jpi, jpj,      zdepmoy, zetmp1, zetmp2, zetmp3, zetmp4 ) 
     225      CALL wrk_dealloc( jpi, jpj,      zqsr100, zqsr_corr ) 
     226      CALL wrk_dealloc( jpi, jpj, jpk, zpar   ,  ze0, ze1, ze2, ze3 ) 
    224227      ! 
    225228      IF( nn_timing == 1 )  CALL timing_stop('p4z_opt') 
     
    227230   END SUBROUTINE p4z_opt 
    228231 
    229    SUBROUTINE p4z_opt_par( kt, pqsr, pe1, pe2, pe3, pe0 )  
     232   SUBROUTINE p4z_opt_par( kt, pqsr, pe1, pe2, pe3, pe0, pqsr100 )  
    230233      !!---------------------------------------------------------------------- 
    231234      !!                  ***  routine p4z_opt_par  *** 
     
    240243      REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout)           ::  pe1 , pe2 , pe3   !  PAR ( R-G-B) 
    241244      REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout), OPTIONAL ::  pe0   
     245      REAL(wp), DIMENSION(jpi,jpj)    , INTENT(out)  , OPTIONAL  ::  pqsr100   
    242246      !! * local variables 
    243247      INTEGER    ::   ji, jj, jk     ! dummy loop indices 
     
    249253      ELSE                  ;  zqsr(:,:) = xparsw         * pqsr(:,:) 
    250254      ENDIF 
    251       ! 
     255       
     256      !  Light at the euphotic depth  
     257      IF( PRESENT( pqsr100 ) )  pqsr100(:,:) = 0.01 * 3. * zqsr(:,:) 
     258 
    252259      IF( PRESENT( pe0 ) ) THEN     !  W-level 
    253260         ! 
     
    260267            DO jj = 1, jpj 
    261268               DO ji = 1, jpi 
    262                   pe0(ji,jj,jk) = pe0(ji,jj,jk-1) * EXP( -fse3t(ji,jj,jk-1) * xsi0r ) 
     269                  pe0(ji,jj,jk) = pe0(ji,jj,jk-1) * EXP( -e3t_n(ji,jj,jk-1) * xsi0r ) 
    263270                  pe1(ji,jj,jk) = pe1(ji,jj,jk-1) * EXP( -ekb(ji,jj,jk-1 ) ) 
    264271                  pe2(ji,jj,jk) = pe2(ji,jj,jk-1) * EXP( -ekg(ji,jj,jk-1 ) ) 
Note: See TracChangeset for help on using the changeset viewer.