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

Changeset 4978


Ignore:
Timestamp:
2014-12-08T17:03:48+01:00 (9 years ago)
Author:
jchanut
Message:

Recursive update for active tracers and dynamics

Location:
branches/2014/dev_r4765_CNRS_agrif/NEMOGCM/NEMO
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • branches/2014/dev_r4765_CNRS_agrif/NEMOGCM/NEMO/NST_SRC/agrif_oce.F90

    r4954 r4978  
    3333   REAL(wp), PUBLIC ::   visc_dyn                  !: sponge coeff. for dynamics 
    3434 
    35    LOGICAL , PUBLIC :: spongedoneT = .FALSE.   !: tracer   sponge layer indicator 
    36    LOGICAL , PUBLIC :: spongedoneU = .FALSE.   !: dynamics sponge layer indicator 
    37    LOGICAL , PUBLIC :: lk_agrif_fstep = .TRUE. !: if true: first step 
     35   LOGICAL , PUBLIC :: spongedoneT = .FALSE.       !: tracer   sponge layer indicator 
     36   LOGICAL , PUBLIC :: spongedoneU = .FALSE.       !: dynamics sponge layer indicator 
     37   LOGICAL , PUBLIC :: lk_agrif_fstep = .TRUE.     !: if true: first step 
     38   LOGICAL , PUBLIC :: lk_agrif_doupd = .TRUE.     !: if true: send update from current grid 
     39   LOGICAL , PUBLIC :: lk_agrif_debug = .FALSE.    !: if true: print debugging info 
    3840 
    3941   LOGICAL , PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: tabspongedone_tsn 
  • branches/2014/dev_r4765_CNRS_agrif/NEMOGCM/NEMO/NST_SRC/agrif_opa_update.F90

    r4875 r4978  
    2929CONTAINS 
    3030 
    31    SUBROUTINE Agrif_Update_Tra( kt ) 
     31   RECURSIVE SUBROUTINE Agrif_Update_Tra( ) 
    3232      !!--------------------------------------------- 
    3333      !!   *** ROUTINE Agrif_Update_Tra *** 
    3434      !!--------------------------------------------- 
    35       INTEGER, INTENT(in) :: kt 
    36       !!--------------------------------------------- 
    37       !  
    38       IF((Agrif_NbStepint() .NE. (Agrif_irhot()-1)).AND.(kt /= 0)) RETURN 
    39 #if defined TWO_WAY    
     35      !  
     36      IF (Agrif_Root().OR.(.NOT.lk_agrif_doupd)) RETURN 
     37      ! 
     38#if defined TWO_WAY   
     39      IF (lwp.AND.lk_agrif_debug) Write(*,*) 'Update tracers  from grid Number',Agrif_Fixed(), 'nbcline', nbcline 
     40 
    4041      Agrif_UseSpecialValueInUpdate = .TRUE. 
    4142      Agrif_SpecialValueFineGrid = 0. 
     
    5657      ! 
    5758      Agrif_UseSpecialValueInUpdate = .FALSE. 
     59      ! 
     60      ! Do recursive update: 
     61      CALL Agrif_ChildGrid_To_ParentGrid() 
     62      CALL Agrif_Update_Tra() 
     63      CALL Agrif_ParentGrid_To_ChildGrid() 
     64      ! 
    5865#endif 
    5966      ! 
    6067   END SUBROUTINE Agrif_Update_Tra 
    6168 
    62    SUBROUTINE Agrif_Update_Dyn( kt ) 
     69   RECURSIVE SUBROUTINE Agrif_Update_Dyn( ) 
    6370      !!--------------------------------------------- 
    6471      !!   *** ROUTINE Agrif_Update_Dyn *** 
    6572      !!--------------------------------------------- 
    66       INTEGER, INTENT(in) :: kt 
    67       !!--------------------------------------------- 
    68       !  
    69       IF ((Agrif_NbStepint() .NE. (Agrif_irhot()-1)).AND.(kt /= 0)) Return 
     73      !  
     74      IF (Agrif_Root().OR.(.NOT.lk_agrif_doupd)) RETURN 
     75      ! 
    7076#if defined TWO_WAY 
     77      IF (lwp.AND.lk_agrif_debug) Write(*,*) 'Update momentum from grid Number',Agrif_Fixed(), 'nbcline', nbcline 
     78 
    7179      Agrif_UseSpecialValueInUpdate = .FALSE. 
    7280      Agrif_SpecialValueFineGrid = 0. 
     
    133141      !  
    134142#endif 
     143      ! 
     144      ! Do recursive update: 
     145      CALL Agrif_ChildGrid_To_ParentGrid() 
     146      CALL Agrif_Update_Dyn() 
     147      CALL Agrif_ParentGrid_To_ChildGrid() 
     148      ! 
    135149   END SUBROUTINE Agrif_Update_Dyn 
    136150 
  • branches/2014/dev_r4765_CNRS_agrif/NEMOGCM/NEMO/NST_SRC/agrif_user.F90

    r4954 r4978  
    280280   ENDIF 
    281281   !  
    282    CALL Agrif_Update_tra(0) 
    283    CALL Agrif_Update_dyn(0) 
     282   ! Do update at initialisation because not done before writing restarts 
     283   ! This would indeed change boundary conditions values at initial time 
     284   ! hence produce restartability issues. 
     285   ! Note that update below is recursive (with lk_agrif_doupd=T): 
     286   !  
     287! JC: I am not sure if Agrif_MaxLevel() is the "relative" 
     288!     or the absolute maximum nesting level...TBC                         
     289   IF ( Agrif_Level().EQ.Agrif_MaxLevel() ) THEN  
     290      ! NB: Do tracers first, dynamics after because nbcline incremented in dynamics 
     291      CALL Agrif_Update_tra() 
     292      CALL Agrif_Update_dyn() 
     293   ENDIF 
     294   ! 
    284295# if defined key_zdftke 
    285296   IF( ln_agrif_tke ) THEN 
     
    377388!   CALL Agrif_Set_bc(un_sponge_id,(/-2*Agrif_irhox()-1,0/)) 
    378389!   CALL Agrif_Set_bc(vn_sponge_id,(/-2*Agrif_irhox()-1,0/)) 
    379    CALL Agrif_Set_bc(tsn_sponge_id,(/-nn_sponge_len*Agrif_irhox(),0/)) 
    380    CALL Agrif_Set_bc(un_sponge_id ,(/-nn_sponge_len*Agrif_irhox(),0/)) 
    381    CALL Agrif_Set_bc(vn_sponge_id ,(/-nn_sponge_len*Agrif_irhox(),0/)) 
     390   CALL Agrif_Set_bc(tsn_sponge_id,(/-nn_sponge_len*Agrif_irhox()-1,0/)) 
     391   CALL Agrif_Set_bc(un_sponge_id ,(/-nn_sponge_len*Agrif_irhox()-1,0/)) 
     392   CALL Agrif_Set_bc(vn_sponge_id ,(/-nn_sponge_len*Agrif_irhox()-1,0/)) 
    382393 
    383394   CALL Agrif_Set_bc(sshn_id,(/0,0/)) 
     
    660671   CALL Agrif_Set_bc(trn_id,(/0,1/)) 
    661672!   CALL Agrif_Set_bc(trn_sponge_id,(/-3*Agrif_irhox(),0/)) 
    662    CALL Agrif_Set_bc(trn_sponge_id,(/-nn_sponge_len*Agrif_irhox(),0/)) 
     673   CALL Agrif_Set_bc(trn_sponge_id,(/-nn_sponge_len*Agrif_irhox()-1,0/)) 
    663674 
    664675   ! 5. Update type 
  • branches/2014/dev_r4765_CNRS_agrif/NEMOGCM/NEMO/OPA_SRC/step.F90

    r4954 r4978  
    7777#if defined key_agrif 
    7878      kstp = nit000 + Agrif_Nb_Step() 
    79       IF ( Agrif_Root() .and. lwp) Write(*,*) '---' 
    80       IF (lwp) Write(*,*) 'Grid Number',Agrif_Fixed(),' time step ',kstp 
     79      IF ( lk_agrif_debug ) THEN 
     80         IF ( Agrif_Root() .and. lwp) Write(*,*) '---' 
     81         IF (lwp) Write(*,*) 'Grid Number',Agrif_Fixed(),' time step ',kstp, 'int tstep',Agrif_NbStepint() 
     82      ENDIF 
     83 
    8184      IF ( kstp == (nit000 + 1) ) lk_agrif_fstep = .FALSE. 
     85 
     86      IF ( Agrif_NbStepint() .EQ. (Agrif_irhot()-1)) THEN  
     87         lk_agrif_doupd = .TRUE. 
     88      ELSE 
     89         lk_agrif_doupd = .FALSE. 
     90      ENDIF 
     91 
    8292# if defined key_iomput 
    8393      IF( Agrif_Nbstepint() == 0 )   CALL iom_swap( "nemo" ) 
     
    298308                               CALL ssh_swp( kstp )         ! swap of sea surface height 
    299309      IF( lk_vvl           )   CALL dom_vvl_sf_swp( kstp )  ! swap of vertical scale factors 
    300  
    301 #if defined key_agrif 
    302       ! AGRIF update 
    303       IF (.NOT.Agrif_Root()) THEN 
    304                                CALL Agrif_Update_Tra( kstp )! Update active tracers 
    305                                CALL Agrif_Update_Dyn( kstp )! Update momentum 
    306       ENDIF 
    307 #endif 
    308310      ! 
    309311      IF( ln_diahsb        )   CALL dia_hsb( kstp )         ! - ML - global conservation diagnostics 
    310312      IF( lk_diaobs  )         CALL dia_obs( kstp )         ! obs-minus-model (assimilation) diagnostics (call after dynamics update) 
     313 
     314#if defined key_agrif 
     315      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
     316      ! AGRIF update (TWO WAY) 
     317      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
     318      IF ( Agrif_Level().EQ.Agrif_MaxLevel() ) THEN 
     319                               CALL Agrif_Update_Tra()      ! Update active tracers 
     320                               CALL Agrif_Update_Dyn()      ! Update momentum 
     321      ENDIF 
     322#endif 
    311323 
    312324      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
     
    348360      ! 
    349361      IF( nn_timing == 1 .AND.  kstp == nit000  )   CALL timing_reset 
    350       ! 
    351 #if defined key_agrif 
    352       CALL Agrif_Integrate_ChildGrids( stp )    
    353 #endif       
     362      !      
     363#if defined key_agrif 
     364                               CALL Agrif_Integrate_ChildGrids( stp )    
     365#endif 
    354366      ! 
    355367   END SUBROUTINE stp 
Note: See TracChangeset for help on using the changeset viewer.