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 15613 – NEMO

Changeset 15613


Ignore:
Timestamp:
2021-12-22T10:35:54+01:00 (2 years ago)
Author:
cetlod
Message:

r4.0-HEAD : bugfix to better manage the diurnal cycle in TOP, see ticket #2739

Location:
NEMO/releases/r4.0/r4.0-HEAD
Files:
10 edited

Legend:

Unmodified
Added
Removed
  • NEMO/releases/r4.0/r4.0-HEAD/cfgs/SHARED/namelist_top_ref

    r13255 r15613  
    100100/ 
    101101!----------------------------------------------------------------------- 
     102&namtrc_opt      !  Optical 
     103!----------------------------------------------------------------------- 
     104   ln_trcdc2dm   =  .false.   !  Diurnal cycle for TOP 
     105/ 
     106!----------------------------------------------------------------------- 
    102107&namtrc_dmp      !   passive tracer newtonian damping                   (ln_trcdmp=T) 
    103108!----------------------------------------------------------------------- 
  • NEMO/releases/r4.0/r4.0-HEAD/src/OCE/SBC/sbcblk.F90

    r14719 r15613  
    4040   USE fldread        ! read input fields 
    4141   USE sbc_oce        ! Surface boundary condition: ocean fields 
     42   USE trc_oce         ! share SMS/Ocean variables 
    4243   USE cyclone        ! Cyclone 10m wind form trac of cyclone centres 
    4344   USE sbcdcy         ! surface boundary condition: diurnal cycle 
     
    441442      ELSE                  ;   qsr(:,:) = zztmp *          sf(jp_qsr)%fnow(:,:,1)   * tmask(:,:,1) 
    442443      ENDIF 
     444 
     445#if defined key_top 
     446      IF( ln_trcdc2dm )  THEN      !  diurnal cycle in TOP 
     447         IF( ln_dm2dc )  THEN  ;  qsr_mean(:,:) = zztmp * sf(jp_qsr)%fnow(:,:,1)  * tmask(:,:,1) 
     448         ELSE                  ;  ncpl_qsr_freq = sf(jp_qsr)%freqh * 3600 !   qsr_mean will be computed in TOP 
     449         ENDIF 
     450      ENDIF 
     451#endif 
    443452 
    444453      zqlw(:,:) = (  sf(jp_qlw)%fnow(:,:,1) - Stef * zst(:,:)*zst(:,:)*zst(:,:)*zst(:,:)  ) * tmask(:,:,1)   ! Long  Wave 
  • NEMO/releases/r4.0/r4.0-HEAD/src/OCE/SBC/sbccpl.F90

    r14717 r15613  
    11531153         IF( ln_dm2dc .AND. ncpl_qsr_freq /= 86400 )   & 
    11541154            &   CALL ctl_stop( 'sbc_cpl_rcv: diurnal cycle reconstruction (ln_dm2dc) needs daily couping for solar radiation' ) 
    1155          ncpl_qsr_freq = 86400 / ncpl_qsr_freq   ! used by top 
    11561155      ENDIF 
    11571156      ! 
  • NEMO/releases/r4.0/r4.0-HEAD/src/OCE/SBC/sbcflx.F90

    r13484 r15613  
    1515   USE dom_oce         ! ocean space and time domain 
    1616   USE sbc_oce         ! surface boundary condition: ocean fields 
     17   USE trc_oce         ! share SMS/Ocean variables 
    1718   USE sbcdcy          ! surface boundary condition: diurnal cycle on qsr 
    1819   USE phycst          ! physical constants 
     
    132133         ELSE                  ;   qsr(:,:) =          sf(jp_qsr)%fnow(:,:,1)   * tmask(:,:,1) 
    133134         ENDIF 
     135#if defined key_top 
     136      IF( ln_trcdc2dm )  THEN      !  diurnal cycle in TOP 
     137         IF( ln_dm2dc )  THEN  ;  qsr_mean(:,:) = sf(jp_qsr)%fnow(:,:,1)  * tmask(:,:,1) 
     138         ELSE                  ;  ncpl_qsr_freq = sf(jp_qsr)%freqh * 3600 !  qsr_mean will be computed in TOP 
     139         ENDIF 
     140      ENDIF 
     141#endif          
    134142         DO jj = 1, jpj                                           ! set the ocean fluxes from read fields 
    135143            DO ji = 1, jpi 
  • NEMO/releases/r4.0/r4.0-HEAD/src/OCE/trc_oce.F90

    r10068 r15613  
    2828   INTEGER , PUBLIC ::   nn_dttrc              !: frequency of step on passive tracers 
    2929   REAL(wp), PUBLIC ::   r_si2                 !: largest depth of extinction (blue & 0.01 mg.m-3)  (RGB) 
     30   LOGICAL , PUBLIC ::   ln_trcdc2dm           !: Diurnal cycle for TOP 
    3031   ! 
    31    REAL(wp), PUBLIC, SAVE, ALLOCATABLE, DIMENSION(:,:,:) ::   etot3     !: light absortion coefficient 
    32    REAL(wp), PUBLIC, SAVE, ALLOCATABLE, DIMENSION(:,:)   ::   oce_co2   !: ocean carbon flux 
     32   REAL(wp), PUBLIC, SAVE, ALLOCATABLE, DIMENSION(:,:,:) ::  etot3     !: light absortion coefficient 
     33   REAL(wp), PUBLIC, SAVE, ALLOCATABLE, DIMENSION(:,:)   ::  oce_co2   !: ocean carbon flux 
     34   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)   ::  qsr_mean  !: daily mean qsr 
    3335 
    3436#if defined key_top  
     
    5456      !!                  ***  trc_oce_alloc  *** 
    5557      !!---------------------------------------------------------------------- 
    56       ALLOCATE( etot3(jpi,jpj,jpk), oce_co2(jpi,jpj), STAT=trc_oce_alloc ) 
     58      ALLOCATE( etot3(jpi,jpj,jpk), oce_co2(jpi,jpj), qsr_mean(jpi,jpj), STAT=trc_oce_alloc ) 
    5759      IF( trc_oce_alloc /= 0 )   CALL ctl_warn('trc_oce_alloc: failed to allocate etot3 array') 
    5860      ! 
  • NEMO/releases/r4.0/r4.0-HEAD/src/OFF/dtadyn.F90

    r11536 r15613  
    410410      IF(lwp) WRITE(numout,*) ' max depht of runoff : ', hrnf_max,'    max level  : ', nkrnf_max 
    411411      IF(lwp) WRITE(numout,*) ' ' 
     412      ! 
     413      ncpl_qsr_freq = sf_dyn(jf_qsr)%freqh  * 3600   !  Get qsr frequency ( needed if diurnal cycle in TOP ) 
    412414      ! 
    413415      CALL dta_dyn( nit000 ) 
  • NEMO/releases/r4.0/r4.0-HEAD/src/TOP/PISCES/P4Z/p4zopt.F90

    r14214 r15613  
    9696      !                                        !* Photosynthetically Available Radiation (PAR) 
    9797      !                                        !  -------------------------------------- 
    98       IF( l_trcdm2dc ) THEN                     !  diurnal cycle 
     98      IF( ln_trcdc2dm ) THEN                     !  diurnal cycle 
    9999         ! 
    100100         zqsr_corr(:,:) = qsr_mean(:,:) / ( 1.-fr_i(:,:) + rtrn ) 
  • NEMO/releases/r4.0/r4.0-HEAD/src/TOP/trc.F90

    r14588 r15613  
    4949   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)   ::  gtrui          !: hor. gradient at u-points at top    ocean level 
    5050   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)   ::  gtrvi          !: hor. gradient at v-points at top    ocean level 
    51    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)     ::  qsr_mean        !: daily mean qsr 
    5251    
    5352   !! passive tracers  (input and output) 
     
    153152         &      trc_ice_ratio(jptra)  , trc_ice_prescr(jptra) , cn_trc_o(jptra)       ,       & 
    154153         &      sbc_trc_b(jpi,jpj,jptra), sbc_trc(jpi,jpj,jptra)                      ,       &   
    155          &      cvol(jpi,jpj,jpk)     , trai(jptra)           , qsr_mean(jpi,jpj)     ,       & 
     154         &      cvol(jpi,jpj,jpk)     , trai(jptra)                                   ,       & 
    156155         &      ctrcnm(jptra)         , ctrcln(jptra)         , ctrcun(jptra)         ,       & 
    157156         &      ln_trc_ini(jptra)     ,                                                       & 
  • NEMO/releases/r4.0/r4.0-HEAD/src/TOP/trcnam.F90

    r11536 r15613  
    8585        WRITE(numout,*) '   ==>>>   Passive Tracer  time step    rdttrc = nn_dttrc*rdt = ', rdttrc 
    8686      ENDIF 
     87      ! 
     88                            CALL trc_nam_opt    ! Optical 
    8789      ! 
    8890      IF( l_trdtrc )        CALL trc_nam_trd    ! Passive tracer trends 
     
    236238   END SUBROUTINE trc_nam_trc 
    237239 
     240   SUBROUTINE trc_nam_opt 
     241      !!--------------------------------------------------------------------- 
     242      !!                     ***  ROUTINE trc_nam_opt  *** 
     243      !! 
     244      !! ** Purpose :   read options for the passive tracer diagnostics 
     245      !! 
     246      !!--------------------------------------------------------------------- 
     247      INTEGER  ::   ios, ierr                 ! Local integer 
     248      !! 
     249      NAMELIST/namtrc_opt/ ln_trcdc2dm 
     250      !!--------------------------------------------------------------------- 
     251      ! 
     252      IF(lwp) WRITE(numout,*) 
     253      IF(lwp) WRITE(numout,*) 'trc_nam_opt : read the passive tracer optical options' 
     254      IF(lwp) WRITE(numout,*) '~~~~~~~~~~~' 
     255      ! 
     256      ! 
     257      REWIND( numnat_ref )              ! Namelist namtrc_opt in reference namelist : Passive tracer trends 
     258      READ  ( numnat_ref, namtrc_opt, IOSTAT = ios, ERR = 905) 
     259905   IF( ios /= 0 )   CALL ctl_nam ( ios , 'namtrc_opt in reference namelist' ) 
     260      REWIND( numnat_cfg )              ! Namelist namtrc_trd in configuration namelist : Passive tracer trends 
     261      READ  ( numnat_cfg, namtrc_opt, IOSTAT = ios, ERR = 906 ) 
     262906   IF( ios >  0 )   CALL ctl_nam ( ios , 'namtrc_opt in configuration namelist' ) 
     263      IF(lwm) WRITE( numont, namtrc_opt ) 
     264 
     265      IF(lwp) THEN 
     266         WRITE(numout,*) '   Namelist : namtrc_opt                    ' 
     267         WRITE(numout,*) '      Diurnal cycle for TOP ln_trcdc2dm    = ', ln_trcdc2dm 
     268      ENDIF 
     269 
     270   END SUBROUTINE trc_nam_opt 
     271 
    238272 
    239273   SUBROUTINE trc_nam_trd 
  • NEMO/releases/r4.0/r4.0-HEAD/src/TOP/trcstp.F90

    r13323 r15613  
    134134      ! 
    135135      ! Define logical parameter ton control dirunal cycle in TOP 
    136       l_trcdm2dc = ln_dm2dc .OR. ( ln_cpl .AND. ncpl_qsr_freq /= 1 ) 
    137       l_trcdm2dc = l_trcdm2dc  .AND. .NOT. l_offline 
     136      l_trcdm2dc = ( ln_trcdc2dm .AND. .NOT. ln_dm2dc  )  
    138137      IF( l_trcdm2dc .AND. lwp )   CALL ctl_warn( 'Coupling with passive tracers and used of diurnal cycle.',   & 
    139138         &                           'Computation of a daily mean shortwave for some biogeochemical models ' ) 
     
    165164      ! 
    166165      IF( kt == nittrc000 ) THEN 
    167          IF( ln_cpl )  THEN   
    168             rdt_sampl = rday / ncpl_qsr_freq 
    169             nb_rec_per_day = ncpl_qsr_freq 
    170          ELSE   
    171             rdt_sampl = MAX( 3600., rdttrc ) 
    172             nb_rec_per_day = INT( rday / rdt_sampl ) 
    173          ENDIF 
     166         rdt_sampl = REAL( ncpl_qsr_freq ) 
     167         nb_rec_per_day = INT( rday / ncpl_qsr_freq ) 
    174168         ! 
    175169         IF(lwp) THEN 
Note: See TracChangeset for help on using the changeset viewer.