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 12397 for NEMO/branches/2020/KERNEL-03_Storkey_Coward_RK3_stage2/src/OCE/TRA – NEMO

Ignore:
Timestamp:
2020-02-18T11:58:37+01:00 (4 years ago)
Author:
davestorkey
Message:

2020/KERNEL-03_Storkey_Coward_RK3_stage2 : Consolidation of code to
handle initial Euler timestep in the context of leapfrog
timestepping. This version passes all SETTE tests but fails to bit
compare with the control for several tests (ORCA2_ICE_PISCES, AMM12,
ISOMIP, AGRIF_DEMO, SPITZ12).

Location:
NEMO/branches/2020/KERNEL-03_Storkey_Coward_RK3_stage2/src/OCE/TRA
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2020/KERNEL-03_Storkey_Coward_RK3_stage2/src/OCE/TRA/traadv.F90

    r12377 r12397  
    9292      IF( ln_timing )   CALL timing_start('tra_adv') 
    9393      ! 
    94       !                                          ! set time step 
    95       IF( neuler == 0 .AND. kt == nit000 ) THEN   ;   r2dt =         rdt   ! at nit000             (Euler) 
    96       ELSEIF( kt <= nit000 + 1 )           THEN   ;   r2dt = 2._wp * rdt   ! at nit000 or nit000+1 (Leapfrog) 
    97       ENDIF 
    98       ! 
    9994      !                                         !==  effective transport  ==! 
    10095      zuu(:,:,jpk) = 0._wp 
  • NEMO/branches/2020/KERNEL-03_Storkey_Coward_RK3_stage2/src/OCE/TRA/traatf.F90

    r12377 r12397  
    113113      IF( ln_bdy )   CALL bdy_tra( kt, Kbb, pts, Kaa )  ! BDY open boundaries 
    114114  
    115       ! set time step size (Euler/Leapfrog) 
    116       IF( neuler == 0 .AND. kt == nit000 ) THEN   ;   r2dt =        rdt   ! at nit000             (Euler) 
    117       ELSEIF( kt <= nit000 + 1 )           THEN   ;   r2dt = 2._wp* rdt   ! at nit000 or nit000+1 (Leapfrog) 
    118       ENDIF 
    119  
    120115      ! trends computation initialisation 
    121116      IF( l_trdtra )   THEN                     
     
    144139      ENDIF 
    145140 
    146       IF( neuler == 0 .AND. kt == nit000 ) THEN       ! Euler time-stepping  
     141      IF( l_1st_euler ) THEN       ! Euler time-stepping  
    147142         ! 
    148143         IF (l_trdtra .AND. .NOT. ln_linssh ) THEN   ! Zero Asselin filter contribution must be explicitly written out since for vvl 
  • NEMO/branches/2020/KERNEL-03_Storkey_Coward_RK3_stage2/src/OCE/TRA/traldf_iso.F90

    r12377 r12397  
    109109      REAL(wp) ::  zmsku, zahu_w, zabe1, zcof1, zcoef3   ! local scalars 
    110110      REAL(wp) ::  zmskv, zahv_w, zabe2, zcof2, zcoef4   !   -      - 
    111       REAL(wp) ::  zcoef0, ze3w_2, zsign, z2dt, z1_2dt   !   -      - 
     111      REAL(wp) ::  zcoef0, ze3w_2, zsign                 !   -      - 
    112112      REAL(wp), DIMENSION(jpi,jpj)     ::   zdkt, zdk1t, z2d 
    113113      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zdit, zdjt, zftu, zftv, ztfw  
     
    129129         &                        iom_use("uadv_salttr") .OR. iom_use("vadv_salttr")  ) )   l_hst = .TRUE. 
    130130      ! 
    131       !                                            ! set time step size (Euler/Leapfrog) 
    132       IF( neuler == 0 .AND. kt == nit000 ) THEN   ;   z2dt =     rdt      ! at nit000   (Euler) 
    133       ELSE                                        ;   z2dt = 2.* rdt      !             (Leapfrog) 
    134       ENDIF 
    135       z1_2dt = 1._wp / z2dt 
    136131      ! 
    137132      IF( kpass == 1 ) THEN   ;   zsign =  1._wp      ! bilaplacian operator require a minus sign (eddy diffusivity >0) 
     
    178173               DO_3D_10_10( 2, jpkm1 ) 
    179174                  ze3w_2 = e3w(ji,jj,jk,Kmm) * e3w(ji,jj,jk,Kmm) 
    180                   zcoef0 = z2dt * (  akz(ji,jj,jk) + ah_wslp2(ji,jj,jk) / ze3w_2  ) 
    181                   akz(ji,jj,jk) = MAX( zcoef0 - 0.5_wp , 0._wp ) * ze3w_2 * z1_2dt 
     175                  zcoef0 = r2dt * (  akz(ji,jj,jk) + ah_wslp2(ji,jj,jk) / ze3w_2  ) 
     176                  akz(ji,jj,jk) = MAX( zcoef0 - 0.5_wp , 0._wp ) * ze3w_2 * r1_2dt 
    182177               END_3D 
    183178           ENDIF 
  • NEMO/branches/2020/KERNEL-03_Storkey_Coward_RK3_stage2/src/OCE/TRA/traldf_triad.F90

    r12377 r12397  
    8686      INTEGER  ::  ip,jp,kp         ! dummy loop indices 
    8787      INTEGER  ::  ierr            ! local integer 
    88       REAL(wp) ::  zmsku, zabe1, zcof1, zcoef3          ! local scalars 
    89       REAL(wp) ::  zmskv, zabe2, zcof2, zcoef4          !   -      - 
    90       REAL(wp) ::  zcoef0, ze3w_2, zsign, z2dt, z1_2dt  !   -      - 
     88      REAL(wp) ::  zmsku, zabe1, zcof1, zcoef3    ! local scalars 
     89      REAL(wp) ::  zmskv, zabe2, zcof2, zcoef4    !   -      - 
     90      REAL(wp) ::  zcoef0, ze3w_2, zsign          !   -      - 
    9191      ! 
    9292      REAL(wp) ::   zslope_skew, zslope_iso, zslope2, zbu, zbv 
     
    111111      l_hst = .FALSE. 
    112112      l_ptr = .FALSE. 
    113       IF( cdtype == 'TRA' .AND. ( iom_use( 'sophtldf' ) .OR. iom_use( 'sopstldf' ) ) )      l_ptr = .TRUE.  
    114       IF( cdtype == 'TRA' .AND. ( iom_use("uadv_heattr") .OR. iom_use("vadv_heattr") .OR. & 
    115          &                        iom_use("uadv_salttr") .OR. iom_use("vadv_salttr")  ) )   l_hst = .TRUE. 
    116       ! 
    117       !                                                        ! set time step size (Euler/Leapfrog) 
    118       IF( neuler == 0 .AND. kt == kit000 ) THEN   ;   z2dt =     rdt      ! at nit000   (Euler) 
    119       ELSE                                        ;   z2dt = 2.* rdt      !             (Leapfrog) 
     113      IF( cdtype == 'TRA' ) THEN 
     114         IF( iom_use( 'sophtldf' ) .OR. iom_use( 'sopstldf') )      l_ptr = .TRUE.  
     115         IF( iom_use("uadv_heattr") .OR. iom_use("vadv_heattr") .OR.                   & 
     116         &   iom_use("uadv_salttr") .OR. iom_use("vadv_salttr")  )   l_hst = .TRUE. 
    120117      ENDIF 
    121       z1_2dt = 1._wp / z2dt 
    122118      ! 
    123119      IF( kpass == 1 ) THEN   ;   zsign =  1._wp      ! bilaplacian operator require a minus sign (eddy diffusivity >0) 
     
    189185               DO_3D_10_10( 2, jpkm1 ) 
    190186                  ze3w_2 = e3w(ji,jj,jk,Kmm) * e3w(ji,jj,jk,Kmm) 
    191                   zcoef0 = z2dt * (  akz(ji,jj,jk) + ah_wslp2(ji,jj,jk) / ze3w_2  ) 
    192                   akz(ji,jj,jk) = MAX( zcoef0 - 0.5_wp , 0._wp ) * ze3w_2 * z1_2dt 
     187                  zcoef0 = r2dt * (  akz(ji,jj,jk) + ah_wslp2(ji,jj,jk) / ze3w_2  ) 
     188                  akz(ji,jj,jk) = MAX( zcoef0 - 0.5_wp , 0._wp ) * ze3w_2 * r1_2dt 
    193189               END_3D 
    194190           ENDIF 
  • NEMO/branches/2020/KERNEL-03_Storkey_Coward_RK3_stage2/src/OCE/TRA/traqsr.F90

    r12377 r12397  
    135135      !                         !-----------------------------------! 
    136136      IF( kt == nit000 ) THEN          !==  1st time step  ==! 
    137 !!gm case neuler  not taken into account.... 
    138          IF( ln_rstart .AND. iom_varid( numror, 'qsr_hc_b', ldstop = .FALSE. ) > 0 ) THEN    ! read in restart 
     137         IF( ln_rstart .AND. iom_varid( numror, 'qsr_hc_b', ldstop = .FALSE. ) > 0  .AND. .NOT.l_1st_euler ) THEN    ! read in restart 
    139138            IF(lwp) WRITE(numout,*) '          nit000-1 qsr tracer content forcing field read in the restart file' 
    140139            z1_2 = 0.5_wp 
  • NEMO/branches/2020/KERNEL-03_Storkey_Coward_RK3_stage2/src/OCE/TRA/trazdf.F90

    r12377 r12397  
    6464         IF(lwp)WRITE(numout,*) 'tra_zdf : implicit vertical mixing on T & S' 
    6565         IF(lwp)WRITE(numout,*) '~~~~~~~ ' 
    66       ENDIF 
    67       ! 
    68       IF( neuler == 0 .AND. kt == nit000 ) THEN   ;   r2dt =      rdt   ! at nit000, =   rdt (restarting with Euler time stepping) 
    69       ELSEIF( kt <= nit000 + 1           ) THEN   ;   r2dt = 2. * rdt   ! otherwise, = 2 rdt (leapfrog) 
    7066      ENDIF 
    7167      ! 
Note: See TracChangeset for help on using the changeset viewer.