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 12489 for NEMO/trunk/src/OCE/SBC – NEMO

Ignore:
Timestamp:
2020-02-28T16:55:11+01:00 (4 years ago)
Author:
davestorkey
Message:

Preparation for new timestepping scheme #2390.
Main changes:

  1. Initial euler timestep now handled in stp and not in TRA/DYN routines.
  2. Renaming of all timestep parameters. In summary, the namelist parameter is now rn_Dt and the current timestep is rDt (and rDt_ice, rDt_trc etc).
  3. Renaming of a few miscellaneous parameters, eg. atfp -> rn_atfp (namelist parameter used everywhere) and rau0 -> rho0.

This version gives bit-comparable results to the previous version of the trunk.

Location:
NEMO/trunk/src/OCE/SBC
Files:
11 edited

Legend:

Unmodified
Added
Removed
  • NEMO/trunk/src/OCE/SBC/fldread.F90

    r12377 r12489  
    172172      ! Note that all varibles starting by nsec_* are shifted time by +1/2 time step to be centrered 
    173173      IF( PRESENT(kit) ) THEN   ! ignore kn_fsbc in this case 
    174          isecsbc = nsec_year + nsec1jan000 + NINT( (     REAL(      kit,wp) + zt_offset ) * rdt / REAL(nn_baro,wp) ) 
     174         isecsbc = nsec_year + nsec1jan000 + NINT( (     REAL(      kit,wp) + zt_offset ) * rn_Dt / REAL(nn_e,wp) ) 
    175175      ELSE                      ! middle of sbc time step 
    176176         ! note: we use kn_fsbc-1 because nsec_year is defined at the middle of the current time step 
    177          isecsbc = nsec_year + nsec1jan000 + NINT( ( 0.5*REAL(kn_fsbc-1,wp) + zt_offset ) * rdt ) 
     177         isecsbc = nsec_year + nsec1jan000 + NINT( ( 0.5*REAL(kn_fsbc-1,wp) + zt_offset ) * rn_Dt ) 
    178178      ENDIF 
    179179      imf = SIZE( sd ) 
  • NEMO/trunk/src/OCE/SBC/sbcapr.F90

    r12377 r12489  
    3636    
    3737   REAL(wp) ::   tarea                ! whole domain mean masked ocean surface 
    38    REAL(wp) ::   r1_grau              ! = 1.e0 / (grav * rau0) 
     38   REAL(wp) ::   r1_grau              ! = 1.e0 / (grav * rho0) 
    3939    
    4040   TYPE(FLD), ALLOCATABLE, DIMENSION(:) ::   sf_apr   ! structure of input fields (file informations, fields read) 
     
    9898      ENDIF 
    9999      ! 
    100       r1_grau = 1.e0 / (grav * rau0)               !* constant for optimization 
     100      r1_grau = 1.e0 / (grav * rho0)               !* constant for optimization 
    101101      ! 
    102102      !                                            !* control check 
  • NEMO/trunk/src/OCE/SBC/sbcblk.F90

    r12459 r12489  
    278278            ENDIF 
    279279            ! 
    280             IF( sf(jfpr)%freqh > 0. .AND. MOD( NINT(3600. * sf(jfpr)%freqh), nn_fsbc * NINT(rdt) ) /= 0 )   & 
    281                &  CALL ctl_warn( 'sbc_blk_init: sbcmod timestep rdt*nn_fsbc is NOT a submultiple of atmospheric forcing frequency.',   & 
    282                &                 '               This is not ideal. You should consider changing either rdt or nn_fsbc value...' ) 
     280            IF( sf(jfpr)%freqh > 0. .AND. MOD( NINT(3600. * sf(jfpr)%freqh), nn_fsbc * NINT(rn_Dt) ) /= 0 )   & 
     281               &  CALL ctl_warn( 'sbc_blk_init: sbcmod timestep rn_Dt*nn_fsbc is NOT a submultiple of atmospheric forcing frequency.',   & 
     282               &                 '               This is not ideal. You should consider changing either rn_Dt or nn_fsbc value...' ) 
    283283         ENDIF 
    284284      END DO 
  • NEMO/trunk/src/OCE/SBC/sbcblk_skin_coare.F90

    r12377 r12489  
    199199         ! Okay test on updated absorbed flux: 
    200200         !#LB: remove??? has a strong influence !!! 
    201          IF( (.NOT. l_exit).AND.(Qnt_ac(ji,jj) + zQabs*rdt <= 0._wp) ) THEN 
     201         IF( (.NOT. l_exit).AND.(Qnt_ac(ji,jj) + zQabs*rn_Dt <= 0._wp) ) THEN 
    202202            l_exit       = .TRUE. 
    203203            l_destroy_wl = .TRUE. 
     
    211211            ! 2/ Regardless of WL formed (dT==0 or dT>0), we are in the process to initiate one or warm further it ! 
    212212 
    213             ztac = Tau_ac(ji,jj) + MAX(.002_wp , pTau(ji,jj))*rdt      ! updated momentum integral 
     213            ztac = Tau_ac(ji,jj) + MAX(.002_wp , pTau(ji,jj))*rn_Dt      ! updated momentum integral 
    214214            !PRINT *, '#LBD: updated value for Tac=',  REAL(ztac,4) 
    215215 
     
    218218            DO jl = 1, 5 
    219219               zQabs = frac_solar_abs(zHwl)*pQsw(ji,jj) + pQnsol(ji,jj) 
    220                zqac  = Qnt_ac(ji,jj) + zQabs*rdt ! updated heat absorbed 
     220               zqac  = Qnt_ac(ji,jj) + zQabs*rn_Dt ! updated heat absorbed 
    221221               IF( zqac <= 0._wp ) EXIT 
    222222               zHwl = MAX( MIN( Hwl_max , zcd1*ztac/SQRT(zqac)) , 0.1_wp ) ! Warm-layer depth 
  • NEMO/trunk/src/OCE/SBC/sbcblk_skin_ecmwf.F90

    r12377 r12489  
    214214         zcst2 = zcst1 / ( 5._wp*zHwl*zusw2 )  !OR: zcst2 = zcst1*rNuwl0 / ( 5._wp*zHwl*zusw2 ) ??? 
    215215 
    216          zcst0 = rdt * (rNuwl0 + 1._wp) / zHwl 
     216         zcst0 = rn_Dt * (rNuwl0 + 1._wp) / zHwl 
    217217 
    218218         ZA = zcst0 * zQabs / ( rNuwl0 * zRhoCp_w ) 
  • NEMO/trunk/src/OCE/SBC/sbccpl.F90

    r12377 r12489  
    193193 
    194194   REAL(wp) ::   rpref = 101000._wp   ! reference atmospheric pressure[N/m2]  
    195    REAL(wp) ::   r1_grau              ! = 1.e0 / (grav * rau0)  
     195   REAL(wp) ::   r1_grau              ! = 1.e0 / (grav * rho0)  
    196196 
    197197   INTEGER , ALLOCATABLE, SAVE, DIMENSION(:) ::   nrcvinfo           ! OASIS info argument 
     
    11231123      !                                                      ! Receive all the atmos. fields (including ice information) 
    11241124      !                                                      ! ======================================================= ! 
    1125       isec = ( kt - nit000 ) * NINT( rdt )                      ! date of exchanges 
     1125      isec = ( kt - nit000 ) * NINT( rn_Dt )                      ! date of exchanges 
    11261126      DO jn = 1, jprcv                                          ! received fields sent by the atmosphere 
    11271127         IF( srcv(jn)%laction )   CALL cpl_rcv( jn, isec, frcv(jn)%z3, xcplmask(:,:,1:nn_cplmodel), nrcvinfo(jn) ) 
     
    12501250          IF( kt /= nit000 )   ssh_ibb(:,:) = ssh_ib(:,:)    !* Swap of ssh_ib fields  
    12511251 
    1252           r1_grau = 1.e0 / (grav * rau0)               !* constant for optimization  
     1252          r1_grau = 1.e0 / (grav * rho0)               !* constant for optimization  
    12531253          ssh_ib(:,:) = - ( frcv(jpr_mslp)%z3(:,:,1) - rpref ) * r1_grau    ! equivalent ssh (inverse barometer)  
    12541254          apr   (:,:) =     frcv(jpr_mslp)%z3(:,:,1)                         !atmospheric pressure  
     
    21002100      !!---------------------------------------------------------------------- 
    21012101      ! 
    2102       isec = ( kt - nit000 ) * NINT( rdt )        ! date of exchanges 
     2102      isec = ( kt - nit000 ) * NINT( rn_Dt )        ! date of exchanges 
    21032103 
    21042104      zfr_l(:,:) = 1.- fr_i(:,:) 
  • NEMO/trunk/src/OCE/SBC/sbcdcy.F90

    r12377 r12489  
    8686      ! -------------- 
    8787      ! When are we during the day (from 0 to 1) 
    88       zlo = ( REAL(nsec_day, wp) - 0.5_wp * rdt ) / rday 
    89       zup = zlo + ( REAL(nn_fsbc, wp)     * rdt ) / rday 
     88      zlo = ( REAL(nsec_day, wp) - 0.5_wp * rn_Dt ) / rday 
     89      zup = zlo + ( REAL(nn_fsbc, wp)     * rn_Dt ) / rday 
    9090      ! 
    9191      IF( nday_qsr == -1 ) THEN       ! first time step only 
     
    251251         END_2D 
    252252         ! 
    253          ztmp = rday / ( rdt * REAL(nn_fsbc, wp) ) 
     253         ztmp = rday / ( rn_Dt * REAL(nn_fsbc, wp) ) 
    254254         rscal(:,:) = rscal(:,:) * ztmp 
    255255         ! 
  • NEMO/trunk/src/OCE/SBC/sbcfwb.F90

    r12377 r12489  
    126126         ENDIF    
    127127         !                                         ! Update fwfold if new year start 
    128          ikty = 365 * 86400 / rdt                  !!bug  use of 365 days leap year or 360d year !!!!!!! 
     128         ikty = 365 * 86400 / rn_Dt                  !!bug  use of 365 days leap year or 360d year !!!!!!! 
    129129         IF( MOD( kt, ikty ) == 0 ) THEN 
    130130            a_fwb_b = a_fwb                           ! mean sea level taking into account the ice+snow 
    131131                                                      ! sum over the global domain 
    132             a_fwb   = glob_sum( 'sbcfwb', e1e2t(:,:) * ( ssh(:,:,Kmm) + snwice_mass(:,:) * r1_rau0 ) ) 
     132            a_fwb   = glob_sum( 'sbcfwb', e1e2t(:,:) * ( ssh(:,:,Kmm) + snwice_mass(:,:) * r1_rho0 ) ) 
    133133            a_fwb   = a_fwb * 1.e+3 / ( area * rday * 365. )     ! convert in Kg/m3/s = mm/s 
    134134!!gm        !                                                      !!bug 365d year  
  • NEMO/trunk/src/OCE/SBC/sbcice_cice.F90

    r12377 r12489  
    1313   USE dom_oce         ! ocean space and time domain 
    1414   USE domvvl 
    15    USE phycst, only : rcp, rau0, r1_rau0, rhos, rhoi 
     15   USE phycst, only : rcp, rho0, r1_rho0, rhos, rhoi 
    1616   USE in_out_manager  ! I/O manager 
    1717   USE iom, ONLY : iom_put,iom_use              ! I/O manager library !!Joakim edit 
     
    228228      IF( .NOT.ln_rstart ) THEN 
    229229         IF( ln_ice_embd ) THEN            ! embedded sea-ice: deplete the initial ssh below sea-ice area 
    230             ssh(:,:,Kmm) = ssh(:,:,Kmm) - snwice_mass(:,:) * r1_rau0 
    231             ssh(:,:,Kbb) = ssh(:,:,Kbb) - snwice_mass(:,:) * r1_rau0 
     230            ssh(:,:,Kmm) = ssh(:,:,Kmm) - snwice_mass(:,:) * r1_rho0 
     231            ssh(:,:,Kbb) = ssh(:,:,Kbb) - snwice_mass(:,:) * r1_rho0 
    232232 
    233233!!gm This should be put elsewhere....   (same remark for limsbc) 
     
    417417! Freezing/melting potential 
    418418! Calculated over NEMO leapfrog timestep (hence 2*dt) 
    419       nfrzmlt(:,:) = rau0 * rcp * e3t_m(:,:) * ( Tocnfrz-sst_m(:,:) ) / ( 2.0*dt ) 
     419      nfrzmlt(:,:) = rho0 * rcp * e3t_m(:,:) * ( Tocnfrz-sst_m(:,:) ) / ( 2.0*dt ) 
    420420 
    421421      ztmp(:,:) = nfrzmlt(:,:) 
     
    450450         zintb = REAL( nn_fsbc + 1 ) / REAL( nn_fsbc ) * 0.5_wp 
    451451          ! 
    452          zpice(:,:) = ssh_m(:,:) + (  zintn * snwice_mass(:,:) +  zintb * snwice_mass_b(:,:)  ) * r1_rau0 
     452         zpice(:,:) = ssh_m(:,:) + (  zintn * snwice_mass(:,:) +  zintb * snwice_mass_b(:,:)  ) * r1_rho0 
    453453          ! 
    454454         ! 
  • NEMO/trunk/src/OCE/SBC/sbcmod.F90

    r12377 r12489  
    187187      ! 
    188188      IF( .NOT.ln_usr ) THEN     ! the model calendar needs some specificities (except in user defined case) 
    189          IF( MOD( rday , rdt ) /= 0. )   CALL ctl_stop( 'the time step must devide the number of second of in a day' ) 
     189         IF( MOD( rday , rn_Dt ) /= 0. )   CALL ctl_stop( 'the time step must devide the number of second of in a day' ) 
    190190         IF( MOD( rday , 2.  ) /= 0. )   CALL ctl_stop( 'the number of second of in a day must be an even number'    ) 
    191          IF( MOD( rdt  , 2.  ) /= 0. )   CALL ctl_stop( 'the time step (in second) must be an even number'           ) 
     191         IF( MOD( rn_Dt  , 2.  ) /= 0. )   CALL ctl_stop( 'the time step (in second) must be an even number'           ) 
    192192      ENDIF 
    193193      !                       !**  check option consistency 
     
    309309      !     SAS time-step has to be declared in OASIS (mandatory) -> nn_fsbc has to be modified accordingly 
    310310      IF( nn_components /= jp_iam_nemo ) THEN 
    311          IF( nn_components == jp_iam_opa )   nn_fsbc = cpl_freq('O_SFLX') / NINT(rdt) 
    312          IF( nn_components == jp_iam_sas )   nn_fsbc = cpl_freq('I_SFLX') / NINT(rdt) 
     311         IF( nn_components == jp_iam_opa )   nn_fsbc = cpl_freq('O_SFLX') / NINT(rn_Dt) 
     312         IF( nn_components == jp_iam_sas )   nn_fsbc = cpl_freq('I_SFLX') / NINT(rn_Dt) 
    313313         ! 
    314314         IF(lwp)THEN 
     
    331331      ENDIF 
    332332      ! 
    333       IF( MOD( rday, REAL(nn_fsbc, wp) * rdt ) /= 0 )   & 
     333      IF( MOD( rday, REAL(nn_fsbc, wp) * rn_Dt ) /= 0 )   & 
    334334         &  CALL ctl_warn( 'sbc_init : nn_fsbc is NOT a multiple of the number of time steps in a day' ) 
    335335      ! 
    336       IF( ln_dm2dc .AND. NINT(rday) / ( nn_fsbc * NINT(rdt) ) < 8  )   & 
     336      IF( ln_dm2dc .AND. NINT(rday) / ( nn_fsbc * NINT(rn_Dt) ) < 8  )   & 
    337337         &   CALL ctl_warn( 'sbc_init : diurnal cycle for qsr: the sampling of the diurnal cycle is too small...' ) 
    338338      ! 
  • NEMO/trunk/src/OCE/SBC/sbcrnf.F90

    r12377 r12489  
    137137         !                                                           ! set temperature & salinity content of runoffs 
    138138         IF( ln_rnf_tem ) THEN                                       ! use runoffs temperature data 
    139             rnf_tsc(:,:,jp_tem) = ( sf_t_rnf(1)%fnow(:,:,1) ) * rnf(:,:) * r1_rau0 
     139            rnf_tsc(:,:,jp_tem) = ( sf_t_rnf(1)%fnow(:,:,1) ) * rnf(:,:) * r1_rho0 
    140140            CALL eos_fzp( sss_m(:,:), ztfrz(:,:) ) 
    141141            WHERE( sf_t_rnf(1)%fnow(:,:,1) == -999._wp )             ! if missing data value use SST as runoffs temperature 
    142                rnf_tsc(:,:,jp_tem) = sst_m(:,:) * rnf(:,:) * r1_rau0 
     142               rnf_tsc(:,:,jp_tem) = sst_m(:,:) * rnf(:,:) * r1_rho0 
    143143            END WHERE 
    144144         ELSE                                                        ! use SST as runoffs temperature 
    145145            !CEOD River is fresh water so must at least be 0 unless we consider ice 
    146             rnf_tsc(:,:,jp_tem) = MAX( sst_m(:,:), 0.0_wp ) * rnf(:,:) * r1_rau0 
     146            rnf_tsc(:,:,jp_tem) = MAX( sst_m(:,:), 0.0_wp ) * rnf(:,:) * r1_rho0 
    147147         ENDIF 
    148148         !                                                           ! use runoffs salinity data 
    149          IF( ln_rnf_sal )   rnf_tsc(:,:,jp_sal) = ( sf_s_rnf(1)%fnow(:,:,1) ) * rnf(:,:) * r1_rau0 
     149         IF( ln_rnf_sal )   rnf_tsc(:,:,jp_sal) = ( sf_s_rnf(1)%fnow(:,:,1) ) * rnf(:,:) * r1_rho0 
    150150         !                                                           ! else use S=0 for runoffs (done one for all in the init) 
    151151                                         CALL iom_put( 'runoffs'     , rnf(:,:)                         )   ! output runoff mass flux 
    152          IF( iom_use('hflx_rnf_cea') )   CALL iom_put( 'hflx_rnf_cea', rnf_tsc(:,:,jp_tem) * rau0 * rcp )   ! output runoff sensible heat (W/m2) 
     152         IF( iom_use('hflx_rnf_cea') )   CALL iom_put( 'hflx_rnf_cea', rnf_tsc(:,:,jp_tem) * rho0 * rcp )   ! output runoff sensible heat (W/m2) 
    153153      ENDIF 
    154154      ! 
     
    210210            DO_2D_11_11 
    211211               DO jk = 1, nk_rnf(ji,jj) 
    212                   phdivn(ji,jj,jk) = phdivn(ji,jj,jk) - ( rnf(ji,jj) + rnf_b(ji,jj) ) * zfact * r1_rau0 / h_rnf(ji,jj) 
     212                  phdivn(ji,jj,jk) = phdivn(ji,jj,jk) - ( rnf(ji,jj) + rnf_b(ji,jj) ) * zfact * r1_rho0 / h_rnf(ji,jj) 
    213213               END DO 
    214214            END_2D 
     
    221221               !                          ! apply the runoff input flow 
    222222               DO jk = 1, nk_rnf(ji,jj) 
    223                   phdivn(ji,jj,jk) = phdivn(ji,jj,jk) - ( rnf(ji,jj) + rnf_b(ji,jj) ) * zfact * r1_rau0 / h_rnf(ji,jj) 
     223                  phdivn(ji,jj,jk) = phdivn(ji,jj,jk) - ( rnf(ji,jj) + rnf_b(ji,jj) ) * zfact * r1_rho0 / h_rnf(ji,jj) 
    224224               END DO 
    225225            END_2D 
     
    227227      ELSE                       !==   runoff put only at the surface   ==! 
    228228         h_rnf (:,:)   = e3t (:,:,1,Kmm)        ! update h_rnf to be depth of top box 
    229          phdivn(:,:,1) = phdivn(:,:,1) - ( rnf(:,:) + rnf_b(:,:) ) * zfact * r1_rau0 / e3t(:,:,1,Kmm) 
     229         phdivn(:,:,1) = phdivn(:,:,1) - ( rnf(:,:) + rnf_b(:,:) ) * zfact * r1_rho0 / e3t(:,:,1,Kmm) 
    230230      ENDIF 
    231231      ! 
Note: See TracChangeset for help on using the changeset viewer.