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 9169 for branches/2017/dev_merge_2017/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zopt.F90 – NEMO

Ignore:
Timestamp:
2017-12-26T17:32:56+01:00 (6 years ago)
Author:
gm
Message:

dev_merge_2017: all SRC: finalize the removal of useless warning when reading namelist_cfg + remove all nn_closea + nn_msh replaced by a logical

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2017/dev_merge_2017/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zopt.F90

    r9125 r9169  
    44   !! TOP - PISCES : Compute the light availability in the water column 
    55   !!====================================================================== 
    6    !! History :   1.0  !  2004     (O. Aumont) Original code 
    7    !!             2.0  !  2007-12  (C. Ethe, G. Madec)  F90 
    8    !!             3.2  !  2009-04  (C. Ethe, G. Madec)  optimisation 
    9    !!             3.4  !  2011-06  (O. Aumont, C. Ethe) Improve light availability of nano & diat 
     6   !! History :  1.0  !  2004     (O. Aumont) Original code 
     7   !!            2.0  !  2007-12  (C. Ethe, G. Madec)  F90 
     8   !!            3.2  !  2009-04  (C. Ethe, G. Madec)  optimisation 
     9   !!            3.4  !  2011-06  (O. Aumont, C. Ethe) Improve light availability of nano & diat 
    1010   !!---------------------------------------------------------------------- 
    1111   !!   p4z_opt       : light availability in the water column 
     
    1515   USE sms_pisces     ! Source Minus Sink of PISCES 
    1616   USE iom            ! I/O manager 
    17    USE fldread         !  time interpolation 
    18    USE prtctl_trc      !  print control for debugging 
     17   USE fldread        !  time interpolation 
     18   USE prtctl_trc     !  print control for debugging 
    1919 
    2020   IMPLICIT NONE 
     
    2727   !! * Shared module variables 
    2828 
    29    LOGICAL  :: ln_varpar   !: boolean for variable PAR fraction 
    30    REAL(wp) :: parlux      !: Fraction of shortwave as PAR 
    31    REAL(wp) :: xparsw                 !: parlux/3 
    32    REAL(wp) :: xsi0r                 !: 1. /rn_si0 
     29   LOGICAL  ::   ln_varpar   ! boolean for variable PAR fraction 
     30   REAL(wp) ::   parlux      ! Fraction of shortwave as PAR 
     31   REAL(wp) ::   xparsw      ! parlux/3 
     32   REAL(wp) ::   xsi0r       ! 1. /rn_si0 
    3333 
    3434   TYPE(FLD), ALLOCATABLE, DIMENSION(:) ::   sf_par      ! structure of input par 
    3535   INTEGER , PARAMETER :: nbtimes = 366  !: maximum number of times record in a file 
    3636   INTEGER  :: ntimes_par                ! number of time steps in a file 
    37    REAL(wp), ALLOCATABLE, SAVE,   DIMENSION(:,:) :: par_varsw    !: PAR fraction of shortwave 
    38    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: ekb, ekg, ekr  !: wavelength (Red-Green-Blue) 
     37   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   par_varsw      ! PAR fraction of shortwave 
     38   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   ekb, ekg, ekr  ! wavelength (Red-Green-Blue) 
    3939 
    4040   INTEGER  ::   nksrp   ! levels below which the light cannot penetrate ( depth larger than 391 m) 
    4141 
    42    REAL(wp), DIMENSION(3,61) ::   xkrgb   !: tabulated attenuation coefficients for RGB absorption 
     42   REAL(wp), DIMENSION(3,61) ::   xkrgb   ! tabulated attenuation coefficients for RGB absorption 
    4343    
    4444   !!---------------------------------------------------------------------- 
     
    7070      !!--------------------------------------------------------------------- 
    7171      ! 
    72       IF( ln_timing )  CALL timing_start('p4z_opt') 
    73       ! 
    74       ! Allocate temporary workspace 
    75       IF( ln_p5z ) ALLOCATE( zetmp5(jpi,jpj) ) 
    76  
    77       IF( knt == 1 .AND. ln_varpar ) CALL p4z_opt_sbc( kt ) 
     72      IF( ln_timing )   CALL timing_start('p4z_opt') 
     73      IF( ln_p5z    )   ALLOCATE( zetmp5(jpi,jpj) ) 
     74 
     75      IF( knt == 1 .AND. ln_varpar )   CALL p4z_opt_sbc( kt ) 
    7876 
    7977      !     Initialisation of variables used to compute PAR 
     
    8482      ! 
    8583      !                                        !* attenuation coef. function of Chlorophyll and wavelength (Red-Green-Blue) 
    86                                                !  -------------------------------------------------------- 
    87                     zchl3d(:,:,:) = trb(:,:,:,jpnch) + trb(:,:,:,jpdch) 
    88       IF( ln_p5z )  zchl3d(:,:,:) = zchl3d(:,:,:) + trb(:,:,:,jppch) 
     84      !                                        !  -------------------------------------------------------- 
     85                     zchl3d(:,:,:) = trb(:,:,:,jpnch) + trb(:,:,:,jpdch) 
     86      IF( ln_p5z )   zchl3d(:,:,:) = zchl3d(:,:,:)    + trb(:,:,:,jppch) 
    8987      ! 
    9088      DO jk = 1, jpkm1    
     
    105103      IF( l_trcdm2dc ) THEN                     !  diurnal cycle 
    106104         ! 
    107          zqsr_corr(:,:) = qsr_mean(:,:) / ( 1. - fr_i(:,:) + rtrn ) 
     105         zqsr_corr(:,:) = qsr_mean(:,:) / ( 1.-fr_i(:,:) + rtrn ) 
    108106         ! 
    109107         CALL p4z_opt_par( kt, zqsr_corr, ze1, ze2, ze3, pqsr100 = zqsr100 )  
     
    120118         ENDIF 
    121119         ! 
    122          zqsr_corr(:,:) = qsr(:,:) / ( 1. - fr_i(:,:) + rtrn ) 
     120         zqsr_corr(:,:) = qsr(:,:) / ( 1.-fr_i(:,:) + rtrn ) 
    123121         ! 
    124122         CALL p4z_opt_par( kt, zqsr_corr, ze1, ze2, ze3 )  
     
    130128      ELSE 
    131129         ! 
    132          zqsr_corr(:,:) = qsr(:,:) / ( 1. - fr_i(:,:) + rtrn ) 
     130         zqsr_corr(:,:) = qsr(:,:) / ( 1.-fr_i(:,:) + rtrn ) 
    133131         ! 
    134132         CALL p4z_opt_par( kt, zqsr_corr, ze1, ze2, ze3, pqsr100 = zqsr100  )  
     
    240238      ENDIF 
    241239      ! 
    242       IF( ln_p5z ) DEALLOCATE( zetmp5 ) 
    243       ! 
    244       IF( ln_timing )  CALL timing_stop('p4z_opt') 
     240      IF( ln_p5z    )   DEALLOCATE( zetmp5 ) 
     241      IF( ln_timing )   CALL timing_stop('p4z_opt') 
    245242      ! 
    246243   END SUBROUTINE p4z_opt 
     
    255252      !! 
    256253      !!---------------------------------------------------------------------- 
    257       !! * arguments 
    258       INTEGER, INTENT(in)                                       ::  kt            !   ocean time-step 
    259       REAL(wp), DIMENSION(jpi,jpj)    , INTENT(in)              ::  pqsr          !   shortwave 
    260       REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout)           ::  pe1 , pe2 , pe3   !  PAR ( R-G-B) 
    261       REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout), OPTIONAL ::  pe0   
    262       REAL(wp), DIMENSION(jpi,jpj)    , INTENT(out)  , OPTIONAL  ::  pqsr100   
    263       !! * local variables 
     254      INTEGER                         , INTENT(in)              ::   kt                ! ocean time-step 
     255      REAL(wp), DIMENSION(jpi,jpj)    , INTENT(in   )           ::   pqsr              ! shortwave 
     256      REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout)           ::   pe1 , pe2 , pe3   ! PAR ( R-G-B) 
     257      REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout), OPTIONAL ::   pe0               ! 
     258      REAL(wp), DIMENSION(jpi,jpj)    , INTENT(  out), OPTIONAL ::   pqsr100           ! 
     259      ! 
    264260      INTEGER    ::   ji, jj, jk     ! dummy loop indices 
    265       REAL(wp), DIMENSION(jpi,jpj)     ::  zqsr          !  shortwave 
     261      REAL(wp), DIMENSION(jpi,jpj) ::  zqsr   ! shortwave 
    266262      !!---------------------------------------------------------------------- 
    267263 
     
    272268       
    273269      !  Light at the euphotic depth  
    274       IF( PRESENT( pqsr100 ) )  pqsr100(:,:) = 0.01 * 3. * zqsr(:,:) 
     270      IF( PRESENT( pqsr100 ) )   pqsr100(:,:) = 0.01 * 3. * zqsr(:,:) 
    275271 
    276272      IF( PRESENT( pe0 ) ) THEN     !  W-level 
     
    285281               DO ji = 1, jpi 
    286282                  pe0(ji,jj,jk) = pe0(ji,jj,jk-1) * EXP( -e3t_n(ji,jj,jk-1) * xsi0r ) 
    287                   pe1(ji,jj,jk) = pe1(ji,jj,jk-1) * EXP( -ekb(ji,jj,jk-1 ) ) 
    288                   pe2(ji,jj,jk) = pe2(ji,jj,jk-1) * EXP( -ekg(ji,jj,jk-1 ) ) 
    289                   pe3(ji,jj,jk) = pe3(ji,jj,jk-1) * EXP( -ekr(ji,jj,jk-1 ) ) 
     283                  pe1(ji,jj,jk) = pe1(ji,jj,jk-1) * EXP( -ekb  (ji,jj,jk-1 )        ) 
     284                  pe2(ji,jj,jk) = pe2(ji,jj,jk-1) * EXP( -ekg  (ji,jj,jk-1 )        ) 
     285                  pe3(ji,jj,jk) = pe3(ji,jj,jk-1) * EXP( -ekr  (ji,jj,jk-1 )        ) 
    290286               END DO 
    291287              ! 
     
    327323      !! 
    328324      !!---------------------------------------------------------------------- 
    329       INTEGER ,                INTENT(in) ::   kt     ! ocean time step 
     325      INTEGER, INTENT(in) ::   kt   ! ocean time step 
    330326      ! 
    331327      INTEGER  :: ji,jj 
     
    357353      !! ** Input   :   external ascii and netcdf files 
    358354      !!---------------------------------------------------------------------- 
    359       INTEGER :: numpar 
    360       INTEGER :: ierr 
    361       INTEGER :: ios                 ! Local integer output status for namelist read 
    362       REAL(wp), DIMENSION(nbtimes) :: zsteps                 ! times records 
     355      INTEGER :: numpar, ierr, ios   ! Local integer  
     356      REAL(wp), DIMENSION(nbtimes) ::   zsteps   ! times records 
    363357      ! 
    364358      CHARACTER(len=100) ::  cn_dir          ! Root directory for location of ssr files 
     
    367361      NAMELIST/nampisopt/cn_dir, sn_par, ln_varpar, parlux 
    368362      !!---------------------------------------------------------------------- 
    369  
     363      IF(lwp) THEN 
     364         WRITE(numout,*) 
     365         WRITE(numout,*) 'p4z_opt_init : ' 
     366         WRITE(numout,*) '~~~~~~~~~~~~ ' 
     367      ENDIF 
    370368      REWIND( numnatp_ref )              ! Namelist nampisopt in reference namelist : Pisces attenuation coef. and PAR 
    371369      READ  ( numnatp_ref, nampisopt, IOSTAT = ios, ERR = 901) 
    372 901   IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampisopt in reference namelist', lwp ) 
    373  
     370901   IF( ios /= 0 )   CALL ctl_nam ( ios , 'nampisopt in reference namelist', lwp ) 
    374371      REWIND( numnatp_cfg )              ! Namelist nampisopt in configuration namelist : Pisces attenuation coef. and PAR 
    375372      READ  ( numnatp_cfg, nampisopt, IOSTAT = ios, ERR = 902 ) 
    376 902   IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampisopt in configuration namelist', lwp ) 
     373902   IF( ios >  0 )  CALL ctl_nam ( ios , 'nampisopt in configuration namelist', lwp ) 
    377374      IF(lwm) WRITE ( numonp, nampisopt ) 
    378375 
    379376      IF(lwp) THEN 
    380          WRITE(numout,*) ' ' 
    381          WRITE(numout,*) ' namelist : nampisopt ' 
    382          WRITE(numout,*) ' ~~~~~~~~~~~~~~~~~ ' 
    383          WRITE(numout,*) '    PAR as a variable fraction of SW     ln_varpar      = ', ln_varpar 
    384          WRITE(numout,*) '    Default value for the PAR fraction   parlux         = ', parlux 
     377         WRITE(numout,*) '   Namelist : nampisopt ' 
     378         WRITE(numout,*) '      PAR as a variable fraction of SW     ln_varpar      = ', ln_varpar 
     379         WRITE(numout,*) '      Default value for the PAR fraction   parlux         = ', parlux 
    385380      ENDIF 
    386381      ! 
     
    391386      ! ---------------------------------------- 
    392387      IF( ln_varpar ) THEN 
    393          IF(lwp) WRITE(numout,*) '    initialize variable par fraction ' 
    394          IF(lwp) WRITE(numout,*) '    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~' 
     388         IF(lwp) WRITE(numout,*) 
     389         IF(lwp) WRITE(numout,*) '   ==>>>   initialize variable par fraction (ln_varpar=T)' 
    395390         ! 
    396391         ALLOCATE( par_varsw(jpi,jpj) ) 
Note: See TracChangeset for help on using the changeset viewer.