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 14800 for NEMO/branches/2021 – NEMO

Changeset 14800 for NEMO/branches/2021


Ignore:
Timestamp:
2021-05-06T17:42:46+02:00 (3 years ago)
Author:
jchanut
Message:

#2605: Main changes for a straightforward use of AGRIF with RK3

Location:
NEMO/branches/2021/dev_r14318_RK3_stage1/src
Files:
13 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2021/dev_r14318_RK3_stage1/src/NST/agrif_oce_interp.F90

    r14227 r14800  
    156156 
    157157 
    158    SUBROUTINE Agrif_tra 
     158   SUBROUTINE Agrif_tra( kt, kstg ) 
    159159      !!---------------------------------------------------------------------- 
    160160      !!                  ***  ROUTINE Agrif_tra  *** 
    161161      !!---------------------------------------------------------------------- 
     162      INTEGER, INTENT(in) ::   kt 
     163      INTEGER, OPTIONAL, INTENT(in) :: kstg 
     164      REAL(wp) :: ztindex  
    162165      ! 
    163166      IF( Agrif_Root() )   RETURN 
     167      ! 
     168      ! Set time index depending on stage in case of RK3 time stepping: 
     169      IF ( PRESENT( kstg ) ) THEN 
     170         ztindex = REAL(Agrif_Nbstepint(), wp) 
     171         IF     ( kstg == 1 ) THEN 
     172            ztindex = ztindex + 1._wp / 3._wp 
     173         ELSEIF ( kstg == 2 ) THEN 
     174            ztindex = ztindex + 1._wp / 2._wp 
     175         ELSEIF ( kstg == 3 ) THEN 
     176            ztindex = ztindex + 1._wp 
     177         ENDIF 
     178         ztindex = ztindex / Agrif_Rhot() 
     179      ELSE 
     180         ztindex = REAL(Agrif_Nbstepint()+1, wp) / Agrif_Rhot() 
     181      ENDIF 
    164182      ! 
    165183      Agrif_SpecialValue    = 0._wp 
     
    167185      l_vremap           = ln_vert_remap 
    168186      ! 
    169       CALL Agrif_Bc_variable( ts_interp_id, procname=interptsn ) 
     187      CALL Agrif_Bc_variable( ts_interp_id, calledweight=ztindex, procname=interptsn ) 
    170188      ! 
    171189      Agrif_UseSpecialValue = .FALSE. 
     
    175193 
    176194 
    177    SUBROUTINE Agrif_dyn( kt ) 
     195   SUBROUTINE Agrif_dyn( kt, kstg ) 
    178196      !!---------------------------------------------------------------------- 
    179197      !!                  ***  ROUTINE Agrif_DYN  *** 
    180198      !!----------------------------------------------------------------------   
    181199      INTEGER, INTENT(in) ::   kt 
     200      INTEGER, OPTIONAL, INTENT(in) :: kstg 
    182201      ! 
    183202      INTEGER ::   ji, jj, jk       ! dummy loop indices 
    184203      INTEGER ::   ibdy1, jbdy1, ibdy2, jbdy2 
    185204      REAL(wp), DIMENSION(jpi,jpj) ::   zub, zvb 
     205      REAL(wp) :: ztindex 
    186206      !!----------------------------------------------------------------------   
    187207      ! 
    188208      IF( Agrif_Root() )   RETURN 
     209      ! 
     210      ! Set time index depending on stage in case of RK3 time stepping: 
     211      IF ( PRESENT( kstg ) ) THEN 
     212         ztindex = REAL(Agrif_Nbstepint(), wp) 
     213         IF     ( kstg == 1 ) THEN 
     214            ztindex = ztindex + 1._wp / 3._wp 
     215         ELSEIF ( kstg == 2 ) THEN 
     216            ztindex = ztindex + 1._wp / 2._wp 
     217         ELSEIF ( kstg == 3 ) THEN 
     218            ztindex = ztindex + 1._wp 
     219         ENDIF 
     220         ztindex = ztindex / Agrif_Rhot() 
     221      ELSE 
     222         ztindex = REAL(Agrif_Nbstepint()+1, wp) / Agrif_Rhot() 
     223      ENDIF 
    189224      ! 
    190225      Agrif_SpecialValue    = 0.0_wp 
     
    194229      use_sign_north = .TRUE. 
    195230      sign_north = -1.0_wp 
    196       CALL Agrif_Bc_variable( un_interp_id, procname=interpun ) 
    197       CALL Agrif_Bc_variable( vn_interp_id, procname=interpvn ) 
     231      CALL Agrif_Bc_variable( un_interp_id, calledweight=ztindex, procname=interpun ) 
     232      CALL Agrif_Bc_variable( vn_interp_id, calledweight=ztindex, procname=interpvn ) 
    198233 
    199234      IF( .NOT.ln_dynspg_ts ) THEN ! Get transports 
    200235         ubdy(:,:) = 0._wp    ;  vbdy(:,:) = 0._wp 
    201236         utint_stage(:,:) = 0 ;  vtint_stage(:,:) = 0 
    202          CALL Agrif_Bc_variable( unb_interp_id, procname=interpunb ) 
    203          CALL Agrif_Bc_variable( vnb_interp_id, procname=interpvnb ) 
     237         CALL Agrif_Bc_variable( unb_interp_id, calledweight=ztindex, procname=interpunb ) 
     238         CALL Agrif_Bc_variable( vnb_interp_id, calledweight=ztindex, procname=interpvnb ) 
    204239      ENDIF 
    205240 
     
    599634      ! 
    600635      IF( Agrif_Root() )   RETURN 
     636      ! 
     637#if defined key_RK3 
     638      Agrif_SpecialValue    = 0._wp 
     639      Agrif_UseSpecialValue = .TRUE. 
     640      CALL Agrif_Bc_variable(sshn_id, procname=interpsshn ) 
     641      Agrif_UseSpecialValue = .FALSE. 
     642#endif 
    601643      ! 
    602644      ll_int_cons = ln_bt_fw ! Assume conservative temporal integration in the forward case only 
  • NEMO/branches/2021/dev_r14318_RK3_stage1/src/NST/agrif_oce_sponge.F90

    r14227 r14800  
    5151      ! 
    5252#if defined SPONGE 
     53#if defined key_RK3 
     54      zcoef = REAL(Agrif_Nbstepint(), wp)/REAL(Agrif_rhot()) 
     55#else 
    5356      !! Assume persistence: 
    5457      zcoef = REAL(Agrif_rhot()-1,wp)/REAL(Agrif_rhot()) 
     58#endif 
    5559 
    5660      Agrif_SpecialValue    = 0._wp 
     
    7983      ! 
    8084#if defined SPONGE 
     85 
     86#if defined key_RK3 
     87      zcoef = REAL(Agrif_Nbstepint(), wp)/REAL(Agrif_rhot()) 
     88#else 
    8189      zcoef = REAL(Agrif_rhot()-1,wp)/REAL(Agrif_rhot()) 
     90#endif 
    8291 
    8392      Agrif_SpecialValue    = 0._wp 
  • NEMO/branches/2021/dev_r14318_RK3_stage1/src/NST/agrif_oce_update.F90

    r14227 r14800  
    9898# endif 
    9999      !  
     100#if ! defined key_RK3 
    100101      IF ( ln_dynspg_ts .AND. ln_bt_fw ) THEN 
    101102         ! Update time integrated transports 
     
    108109#  endif 
    109110      END IF 
     111#endif 
    110112 
    111113# if ! defined DECAL_FEEDBACK 
     
    383385            ENDDO 
    384386 
     387#if ! defined key_RK3 
    385388            IF (.NOT.(lk_agrif_fstep.AND.(l_1st_euler))) THEN 
    386389               ! Add asselin part 
     
    401404               END DO 
    402405            ENDIF 
     406#endif 
    403407            DO jn = 1,jpts 
    404408               DO jk = 1, jpkm1 
     
    417421                                            & * tmask(i1:i2,j1:j2,k1:k2) 
    418422            ENDDO 
    419   
     423#if ! defined key_RK3  
    420424            IF (.NOT.(lk_agrif_fstep.AND.(l_1st_euler))) THEN 
    421425               ! Add asselin part 
     
    436440               END DO 
    437441            ENDIF 
     442#endif 
    438443            DO jn = 1,jpts 
    439444               DO jk=k1,k2 
     
    558563            DO jj=j1,j2 
    559564               DO ji=i1,i2 
     565#if ! defined key_RK3 
    560566                  IF (.NOT.(lk_agrif_fstep.AND.(l_1st_euler))) THEN ! Add asselin part 
    561567                     zub  = uu(ji,jj,jk,Kbb_a) * e3u(ji,jj,jk,Kbb_a)  ! fse3t_b prior update should be used 
     
    565571                                    & * umask(ji,jj,jk) / e3u(ji,jj,jk,Kbb_a) 
    566572                  ENDIF 
     573#endif 
    567574                  ! 
    568575                  uu(ji,jj,jk,Kmm_a) = tabres_child(ji,jj,jk) * umask(ji,jj,jk) 
     
    705712            DO jj=j1,j2 
    706713               DO ji=i1,i2 
     714#if ! defined key_RK3 
    707715                  IF (.NOT.(lk_agrif_fstep.AND.(l_1st_euler))) THEN ! Add asselin part 
    708716                     zvb  = vv(ji,jj,jk,Kbb_a) * e3v(ji,jj,jk,Kbb_a) ! fse3t_b prior update should be used 
     
    712720                                    & * vmask(ji,jj,jk) / e3v(ji,jj,jk,Kbb_a) 
    713721                  ENDIF 
     722#endif 
    714723                  ! 
    715724                  vv(ji,jj,jk,Kmm_a) = tabres_child(ji,jj,jk) * vmask(ji,jj,jk) 
     
    781790               !     
    782791               ! Update barotropic velocities: 
     792#if ! defined key_RK3 
    783793               IF ( .NOT.ln_dynspg_ts .OR. (ln_dynspg_ts.AND.(.NOT.ln_bt_fw)) ) THEN 
    784794                  IF (.NOT.(lk_agrif_fstep.AND.(l_1st_euler))) THEN ! Add asselin part 
     
    787797                  END IF 
    788798               ENDIF     
     799#endif 
    789800               uu_b(ji,jj,Kmm_a) = tabres(ji,jj) * r1_hu(ji,jj,Kmm_a) * umask(ji,jj,1) 
    790801               !        
     
    826837               tabres(ji,jj) =  tabres(ji,jj) * r1_e1v(ji,jj)   
    827838               ! Update barotropic velocities: 
     839#if ! defined key_RK3 
    828840               IF ( .NOT.ln_dynspg_ts .OR. (ln_dynspg_ts.AND.(.NOT.ln_bt_fw)) ) THEN 
    829841                  IF (.NOT.(lk_agrif_fstep.AND.(l_1st_euler))) THEN ! Add asselin part 
     
    832844                  END IF 
    833845               ENDIF               
     846#endif 
    834847               vv_b(ji,jj,Kmm_a) = tabres(ji,jj) * r1_hv(ji,jj,Kmm_a) * vmask(ji,jj,1) 
    835848               !        
     
    864877         END DO 
    865878      ELSE 
     879#if ! defined key_RK3 
    866880         IF (.NOT.(lk_agrif_fstep.AND.(l_1st_euler))) THEN 
    867881            DO jj=j1,j2 
     
    872886            END DO 
    873887         ENDIF 
     888#endif 
    874889         ! 
    875890         DO jj=j1,j2 
     
    962977               zcor = rn_Dt * r1_e1e2t(i1  ,jj) * e2u(i1,jj) * (ub2_b(i1,jj)-tabres(i1,jj))  
    963978               ssh(i1  ,jj,Kmm_a) = ssh(i1  ,jj,Kmm_a) + zcor 
     979#if ! defined key_RK3 
    964980               IF (.NOT.(lk_agrif_fstep.AND.(l_1st_euler))) ssh(i1  ,jj,Kbb_a) = ssh(i1  ,jj,Kbb_a) + rn_atfp * zcor 
     981#endif 
    965982            END DO 
    966983         ENDIF 
     
    969986               zcor = - rn_Dt * r1_e1e2t(i2+1,jj) * e2u(i2,jj) * (ub2_b(i2,jj)-tabres(i2,jj)) 
    970987               ssh(i2+1,jj,Kmm_a) = ssh(i2+1,jj,Kmm_a) + zcor 
     988#if ! defined key_RK3 
    971989               IF (.NOT.(lk_agrif_fstep.AND.(l_1st_euler))) ssh(i2+1,jj,Kbb_a) = ssh(i2+1,jj,Kbb_a) + rn_atfp * zcor 
     990#endif 
    972991            END DO 
    973992         ENDIF 
     
    10501069               zcor = rn_Dt * r1_e1e2t(ji,j1  ) * e1v(ji,j1  ) * (vb2_b(ji,j1)-tabres(ji,j1)) 
    10511070               ssh(ji,j1  ,Kmm_a) = ssh(ji,j1  ,Kmm_a) + zcor 
     1071#if ! defined key_RK3 
    10521072               IF (.NOT.(lk_agrif_fstep.AND.(l_1st_euler))) ssh(ji,j1  ,Kbb_a) = ssh(ji,j1,Kbb_a) + rn_atfp * zcor 
     1073#endif 
    10531074            END DO 
    10541075         ENDIF 
     
    10571078               zcor = - rn_Dt * r1_e1e2t(ji,j2+1) * e1v(ji,j2  ) * (vb2_b(ji,j2)-tabres(ji,j2)) 
    10581079               ssh(ji,j2+1,Kmm_a) = ssh(ji,j2+1,Kmm_a) + zcor 
     1080#if ! defined key_RK3 
    10591081               IF (.NOT.(lk_agrif_fstep.AND.(l_1st_euler))) ssh(ji,j2+1,Kbb_a) = ssh(ji,j2+1,Kbb_a) + rn_atfp * zcor 
     1082#endif 
    10601083            END DO 
    10611084         ENDIF 
     
    12031226!         hdiv(i1:i2,j1:j2,1:jpkm1)   = e3t(i1:i2,j1:j2,1:jpkm1,Kbb_a) 
    12041227 
     1228#if ! defined key_RK3 
    12051229         IF (.NOT.(lk_agrif_fstep.AND.(l_1st_euler) )) THEN 
    12061230            DO jk = 1, jpkm1 
     
    12331257            ! 
    12341258         ENDIF         
     1259#endif 
    12351260         ! 
    12361261         ! 2) Updates at NOW time step: 
  • NEMO/branches/2021/dev_r14318_RK3_stage1/src/NST/agrif_top_interp.F90

    r14218 r14800  
    3636CONTAINS 
    3737 
    38    SUBROUTINE Agrif_trc 
     38   SUBROUTINE Agrif_trc( kt, kstg ) 
    3939      !!---------------------------------------------------------------------- 
    4040      !!                   ***  ROUTINE Agrif_trc  *** 
    4141      !!---------------------------------------------------------------------- 
     42      INTEGER, INTENT(in) ::   kt 
     43      INTEGER, OPTIONAL, INTENT(in) :: kstg 
     44      ! 
     45      REAL(wp) :: ztindex 
    4246      ! 
    4347      IF( Agrif_Root() )   RETURN 
     48      ! 
     49      ! Set time index depending on stage in case of RK3 time stepping: 
     50      IF ( PRESENT( kstg ) ) THEN 
     51         ztindex = REAL(Agrif_Nbstepint(), wp) 
     52         IF     ( kstg == 1 ) THEN 
     53            ztindex = ztindex + 1._wp / 3._wp 
     54         ELSEIF ( kstg == 2 ) THEN 
     55            ztindex = ztindex + 1._wp / 2._wp 
     56         ELSEIF ( kstg == 3 ) THEN 
     57            ztindex = ztindex + 1._wp 
     58         ENDIF 
     59         ztindex = ztindex / Agrif_Rhot() 
     60      ELSE 
     61         ztindex = REAL(Agrif_Nbstepint()+1, wp) / Agrif_Rhot() 
     62      ENDIF 
    4463      ! 
    4564      Agrif_SpecialValue    = 0._wp 
     
    4766      l_vremap              = ln_vert_remap 
    4867      ! 
    49       CALL Agrif_Bc_variable( trn_id, procname=interptrn ) 
     68      CALL Agrif_Bc_variable( trn_id,calledweight=ztindex, procname=interptrn ) 
    5069      ! 
    5170      Agrif_UseSpecialValue = .FALSE. 
  • NEMO/branches/2021/dev_r14318_RK3_stage1/src/NST/agrif_top_sponge.F90

    r14170 r14800  
    4747      ! 
    4848#if defined SPONGE_TOP 
     49#if defined key_RK3 
     50      zcoef = REAL(Agrif_Nbstepint(), wp)/REAL(Agrif_rhot()) 
     51#else 
    4952      !! Assume persistence: 
    5053      zcoef = REAL(Agrif_rhot()-1,wp)/REAL(Agrif_rhot()) 
    51  
     54#endif 
    5255      Agrif_SpecialValue    = 0._wp 
    5356      Agrif_UseSpecialValue = .TRUE. 
  • NEMO/branches/2021/dev_r14318_RK3_stage1/src/NST/agrif_top_update.F90

    r14148 r14800  
    129129               ENDDO 
    130130            ENDDO 
    131  
     131#if ! defined key_RK3 
    132132            IF (.NOT.(lk_agrif_fstep.AND.(l_1st_euler))) THEN 
    133133               ! Add asselin part 
     
    148148               END DO 
    149149            ENDIF 
     150#endif 
    150151            DO jn = 1,jptra 
    151152               DO jk = 1, jpkm1 
     
    164165                                            & * tmask(i1:i2,j1:j2,k1:k2) 
    165166            ENDDO 
     167#if ! defined key_RK3 
    166168            IF (.NOT.(lk_agrif_fstep.AND.(l_1st_euler))) THEN 
    167169               ! Add asselin part 
     
    182184               END DO 
    183185            ENDIF 
     186#endif 
    184187            DO jn = 1,jptra 
    185188               DO jk=k1,k2 
  • NEMO/branches/2021/dev_r14318_RK3_stage1/src/OCE/IOM/restart.F90

    r14239 r14800  
    424424         ENDIF 
    425425         ! 
    426 #if defined key_RK3 
    427          ssh(:,:,Kmm) = 0._wp                  !* RK3: set Kmm to 0 for AGRIF 
    428 #else 
    429          ssh(:,:,Kmm) = ssh(:,:,Kbb)           !* MLF: set now values from to before ones  
    430 #endif 
    431       ENDIF 
    432       ! 
     426         ssh(:,:,Kmm) = ssh(:,:,Kbb)           !* set now values from to before ones  
     427      ENDIF 
     428      ! 
     429!JC: line below ??? 
    433430      !                            !==========================! 
    434431      ssh(:,:,Kaa) = 0._wp         !==  Set to 0 for AGRIF  ==! 
  • NEMO/branches/2021/dev_r14318_RK3_stage1/src/OCE/TRA/traatf.F90

    r14072 r14800  
    107107      ! 
    108108#if defined key_agrif 
    109       CALL Agrif_tra                     ! AGRIF zoom boundaries 
     109      CALL Agrif_tra( kt )                           ! AGRIF zoom boundaries 
    110110#endif 
    111111      !                                              ! local domain boundaries  (T-point, unchanged sign) 
  • NEMO/branches/2021/dev_r14318_RK3_stage1/src/OCE/stp2d.F90

    r14782 r14800  
    2929#if defined key_agrif 
    3030   USE agrif_oce_interp 
     31   USE agrif_oce_sponge 
    3132#endif 
    3233 
     
    123124      !                             !*  lateral viscosity  *! 
    124125      CALL dyn_ldf( kt,   Kbb, Kbb, uu, vv, Krhs ) 
     126#if defined key_agrif 
     127      IF(.NOT. Agrif_Root() ) THEN  !*  AGRIF: sponge *! 
     128         CALL Agrif_Sponge_dyn 
     129      ENDIF 
     130#endif 
    125131      ! 
    126132      !                             !*  hydrostatic pressure gradient  *!   
  • NEMO/branches/2021/dev_r14318_RK3_stage1/src/OCE/stpmlf.F90

    r14618 r14800  
    512512      ! 
    513513# if defined key_agrif 
    514             CALL Agrif_tra                     !* AGRIF zoom boundaries 
     514            CALL Agrif_tra( kt )               !* AGRIF zoom boundaries 
    515515            CALL Agrif_dyn( kt ) 
    516516# endif 
  • NEMO/branches/2021/dev_r14318_RK3_stage1/src/OCE/stprk3.F90

    r14784 r14800  
    241241      ! AGRIF recursive integration 
    242242      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
    243                          Kbb_a = Nbb; Kmm_a = Nnn; Krhs_a = Nrhs      ! agrif_oce module copies of time level indices 
     243                         Kbb_a = Nbb; Kmm_a = Nbb; Krhs_a = Nrhs      ! agrif_oce module copies of time level indices 
    244244                         CALL Agrif_Integrate_ChildGrids( stp_RK3 )       ! allows to finish all the Child Grids before updating 
    245245 
     
    365365      ! 
    366366# if defined key_agrif 
    367             CALL Agrif_tra                     !* AGRIF zoom boundaries 
     367            CALL Agrif_tra( kt )               !* AGRIF zoom boundaries 
    368368            CALL Agrif_dyn( kt ) 
    369369# endif 
  • NEMO/branches/2021/dev_r14318_RK3_stage1/src/OCE/stprk3_stg.F90

    r14782 r14800  
    354354      ! 
    355355# if defined key_agrif 
    356             CALL Agrif_tra                     !* AGRIF zoom boundaries 
    357             CALL Agrif_dyn( kstp ) 
     356            CALL Agrif_tra( kstp, kstg )             !* AGRIF zoom boundaries 
     357            CALL Agrif_dyn( kstp, kstg ) 
    358358# endif 
    359359      !                                        ! local domain boundaries  (T-point, unchanged sign) 
  • NEMO/branches/2021/dev_r14318_RK3_stage1/src/TOP/TRP/trcatf.F90

    r14172 r14800  
    100100      ! 
    101101#if defined key_agrif 
    102       CALL Agrif_trc                   ! AGRIF zoom boundaries 
     102      CALL Agrif_trc( kt )                ! AGRIF zoom boundaries 
    103103#endif 
    104104      ! Update after tracer on domain lateral boundaries 
Note: See TracChangeset for help on using the changeset viewer.