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 10251 for branches/UKMO/dev_r5518_AMM15_package/NEMOGCM/NEMO/NST_SRC/agrif_user.F90 – NEMO

Ignore:
Timestamp:
2018-10-29T15:20:26+01:00 (5 years ago)
Author:
kingr
Message:

Rolled back to r10247 - i.e., undid merge of pkg br and 3.6_stable br

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/UKMO/dev_r5518_AMM15_package/NEMOGCM/NEMO/NST_SRC/agrif_user.F90

    r10248 r10251  
    1717   USE par_oce 
    1818   USE dom_oce 
     19   USE Agrif_Util 
    1920   USE nemogcm 
    2021   ! 
     
    3031      jpi     = ( jpiglo-2*jpreci + (jpni-1+0) ) / jpni + 2*jpreci 
    3132      jpj     = ( jpjglo-2*jprecj + (jpnj-1+0) ) / jpnj + 2*jprecj 
    32 ! JC: change to allow for different vertical levels 
    33 !     jpk is already set 
    34 !     keep it jpk possibly different from jpkdta which  
    35 !     hold parent grid vertical levels number (set earlier) 
    36 !      jpk     = jpkdta  
     33      jpk     = jpkdta  
    3734      jpim1   = jpi-1  
    3835      jpjm1   = jpj-1  
     
    6764   ! 0. Initializations 
    6865   !------------------- 
    69    IF( cp_cfg == 'orca' ) THEN 
     66   IF( cp_cfg == 'orca' ) then 
    7067      IF ( jp_cfg == 2 .OR. jp_cfg == 025 .OR. jp_cfg == 05 & 
    71             &                      .OR. jp_cfg == 4 ) THEN 
     68  &                      .OR. jp_cfg == 4 ) THEN 
    7269         jp_cfg = -1    ! set special value for jp_cfg on fine grids 
    7370         cp_cfg = "default" 
     
    123120SUBROUTINE agrif_declare_var_dom 
    124121   !!---------------------------------------------------------------------- 
    125    !!                 *** ROUTINE agrif_declare_var *** 
     122   !!                 *** ROUTINE agrif_declarE_var *** 
    126123   !! 
    127124   !! ** Purpose :: Declaration of variables to be interpolated 
    128125   !!---------------------------------------------------------------------- 
    129126   USE agrif_util 
    130    USE par_oce        
     127   USE par_oce       !   ONLY : jpts 
    131128   USE oce 
    132129   IMPLICIT NONE 
     
    135132   ! 1. Declaration of the type of variable which have to be interpolated 
    136133   !--------------------------------------------------------------------- 
    137    CALL agrif_declare_variable((/1,2/),(/2,3/),(/'x','y'/),(/1,1/),(/nlci,nlcj/),e1u_id) 
    138    CALL agrif_declare_variable((/2,1/),(/3,2/),(/'x','y'/),(/1,1/),(/nlci,nlcj/),e2v_id) 
     134   CALL agrif_declare_variable((/1,2/),(/2,3/),(/'x','y'/),(/1,1/),(/jpi,jpj/),e1u_id) 
     135   CALL agrif_declare_variable((/2,1/),(/3,2/),(/'x','y'/),(/1,1/),(/jpi,jpj/),e2v_id) 
     136 
    139137 
    140138   ! 2. Type of interpolation 
    141139   !------------------------- 
    142    CALL Agrif_Set_bcinterp(e1u_id,interp1=Agrif_linear,interp2=AGRIF_ppm) 
    143    CALL Agrif_Set_bcinterp(e2v_id,interp1=AGRIF_ppm,interp2=Agrif_linear) 
     140   Call Agrif_Set_bcinterp(e1u_id,interp1=Agrif_linear,interp2=AGRIF_ppm) 
     141   Call Agrif_Set_bcinterp(e2v_id,interp1=AGRIF_ppm,interp2=Agrif_linear) 
    144142 
    145143   ! 3. Location of interpolation 
    146144   !----------------------------- 
    147    CALL Agrif_Set_bc(e1u_id,(/0,0/)) 
    148    CALL Agrif_Set_bc(e2v_id,(/0,0/)) 
     145   Call Agrif_Set_bc(e1u_id,(/0,0/)) 
     146   Call Agrif_Set_bc(e2v_id,(/0,0/)) 
    149147 
    150148   ! 5. Update type 
    151149   !---------------  
    152    CALL Agrif_Set_Updatetype(e1u_id,update1 = Agrif_Update_Copy, update2=Agrif_Update_Average) 
    153    CALL Agrif_Set_Updatetype(e2v_id,update1 = Agrif_Update_Average, update2=Agrif_Update_Copy) 
    154  
    155 ! High order updates 
    156 !   CALL Agrif_Set_Updatetype(e1u_id,update1 = Agrif_Update_Average,            update2=Agrif_Update_Full_Weighting) 
    157 !   CALL Agrif_Set_Updatetype(e2v_id,update1 = Agrif_Update_Full_Weighting,     update2=Agrif_Update_Average) 
    158     ! 
     150   Call Agrif_Set_Updatetype(e1u_id,update1 = Agrif_Update_Copy, update2=Agrif_Update_Average) 
     151   Call Agrif_Set_Updatetype(e2v_id,update1 = Agrif_Update_Average, update2=Agrif_Update_Copy) 
     152 
    159153END SUBROUTINE agrif_declare_var_dom 
    160154 
     
    173167   USE nemogcm 
    174168   USE sol_oce 
    175    USE lib_mpp 
    176169   USE in_out_manager 
    177170   USE agrif_opa_update 
     
    181174   IMPLICIT NONE 
    182175   ! 
     176   REAL(wp), DIMENSION(:,:,:,:), ALLOCATABLE :: tabtstemp 
     177   REAL(wp), DIMENSION(:,:,:  ), ALLOCATABLE :: tabuvtemp 
     178   REAL(wp), DIMENSION(:,:    ), ALLOCATABLE :: tab2d 
    183179   LOGICAL :: check_namelist 
    184    CHARACTER(len=15) :: cl_check1, cl_check2, cl_check3 
    185    !!---------------------------------------------------------------------- 
     180   !!---------------------------------------------------------------------- 
     181 
     182   ALLOCATE( tabtstemp(jpi, jpj, jpk, jpts) ) 
     183   ALLOCATE( tabuvtemp(jpi, jpj, jpk)       ) 
     184   ALLOCATE( tab2d(jpi, jpj)                ) 
     185 
    186186 
    187187   ! 1. Declaration of the type of variable which have to be interpolated 
     
    193193   Agrif_SpecialValue=0. 
    194194   Agrif_UseSpecialValue = .TRUE. 
    195    CALL Agrif_Bc_variable(tsn_id,calledweight=1.,procname=interptsn) 
    196    CALL Agrif_Sponge 
    197    tabspongedone_tsn = .FALSE. 
    198    CALL Agrif_Bc_variable(tsn_sponge_id,calledweight=1.,procname=interptsn_sponge) 
    199    ! reset tsa to zero 
    200    tsa(:,:,:,:) = 0. 
    201  
    202    Agrif_UseSpecialValue = ln_spc_dyn 
    203    CALL Agrif_Bc_variable(un_interp_id,calledweight=1.,procname=interpun) 
    204    CALL Agrif_Bc_variable(vn_interp_id,calledweight=1.,procname=interpvn) 
    205    tabspongedone_u = .FALSE. 
    206    tabspongedone_v = .FALSE. 
    207    CALL Agrif_Bc_variable(un_sponge_id,calledweight=1.,procname=interpun_sponge) 
    208    tabspongedone_u = .FALSE. 
    209    tabspongedone_v = .FALSE. 
    210    CALL Agrif_Bc_variable(vn_sponge_id,calledweight=1.,procname=interpvn_sponge) 
    211  
    212 #if defined key_dynspg_ts 
    213    Agrif_UseSpecialValue = .TRUE. 
    214    CALL Agrif_Bc_variable(sshn_id,calledweight=1., procname=interpsshn ) 
    215  
    216    Agrif_UseSpecialValue = ln_spc_dyn 
    217    CALL Agrif_Bc_variable(unb_id,calledweight=1.,procname=interpunb) 
    218    CALL Agrif_Bc_variable(vnb_id,calledweight=1.,procname=interpvnb) 
    219    CALL Agrif_Bc_variable(ub2b_interp_id,calledweight=1.,procname=interpub2b) 
    220    CALL Agrif_Bc_variable(vb2b_interp_id,calledweight=1.,procname=interpvb2b) 
    221    ubdy_w(:) = 0.e0 ; vbdy_w(:) = 0.e0 ; hbdy_w(:) =0.e0 
    222    ubdy_e(:) = 0.e0 ; vbdy_e(:) = 0.e0 ; hbdy_e(:) =0.e0  
    223    ubdy_n(:) = 0.e0 ; vbdy_n(:) = 0.e0 ; hbdy_n(:) =0.e0  
    224    ubdy_s(:) = 0.e0 ; vbdy_s(:) = 0.e0 ; hbdy_s(:) =0.e0 
    225 #endif 
    226  
    227    Agrif_UseSpecialValue = .FALSE.  
    228    ! reset velocities to zero 
    229    ua(:,:,:) = 0. 
    230    va(:,:,:) = 0. 
     195   Call Agrif_Bc_variable(tabtstemp,tsn_id,calledweight=1.,procname=interptsn) 
     196   Call Agrif_Bc_variable(tabtstemp,tsa_id,calledweight=1.,procname=interptsn) 
     197 
     198   Call Agrif_Bc_variable(tabuvtemp,un_id,calledweight=1.,procname=interpu) 
     199   Call Agrif_Bc_variable(tabuvtemp,vn_id,calledweight=1.,procname=interpv) 
     200   Call Agrif_Bc_variable(tabuvtemp,ua_id,calledweight=1.,procname=interpun) 
     201   Call Agrif_Bc_variable(tabuvtemp,va_id,calledweight=1.,procname=interpvn) 
     202 
     203   Call Agrif_Bc_variable(tab2d,unb_id,calledweight=1.,procname=interpunb) 
     204   Call Agrif_Bc_variable(tab2d,vnb_id,calledweight=1.,procname=interpvnb) 
     205   Call Agrif_Bc_variable(tab2d,sshn_id,calledweight=1.,procname=interpsshn) 
     206   Agrif_UseSpecialValue = .FALSE. 
    231207 
    232208   ! 3. Some controls 
    233209   !----------------- 
    234    check_namelist = .TRUE. 
    235  
    236    IF( check_namelist ) THEN  
     210   check_namelist = .true. 
     211 
     212   IF( check_namelist ) THEN 
    237213 
    238214      ! Check time steps            
    239       IF( NINT(Agrif_Rhot()) * NINT(rdt) .NE. Agrif_Parent(rdt) ) THEN 
    240          WRITE(cl_check1,*)  NINT(Agrif_Parent(rdt)) 
    241          WRITE(cl_check2,*)  NINT(rdt) 
    242          WRITE(cl_check3,*)  NINT(Agrif_Parent(rdt)/Agrif_Rhot()) 
    243          CALL ctl_warn( 'incompatible time step between grids',   & 
    244                &               'parent grid value : '//cl_check1    ,   &  
    245                &               'child  grid value : '//cl_check2    ,   &  
    246                &               'value on child grid will be changed to : '//cl_check3 ) 
    247          rdt=Agrif_Parent(rdt)/Agrif_Rhot() 
     215      IF( NINT(Agrif_Rhot()) * nint(rdt) /= Agrif_Parent(rdt) ) THEN 
     216         WRITE(*,*) 'incompatible time step between grids' 
     217         WRITE(*,*) 'parent grid value : ',Agrif_Parent(rdt) 
     218         WRITE(*,*) 'child  grid value : ',nint(rdt) 
     219         WRITE(*,*) 'value on parent grid should be : ',rdt*Agrif_Rhot() 
     220         STOP 
    248221      ENDIF 
    249222 
    250223      ! Check run length 
    251224      IF( Agrif_IRhot() * (Agrif_Parent(nitend)- & 
    252             Agrif_Parent(nit000)+1) .NE. (nitend-nit000+1) ) THEN 
    253          WRITE(cl_check1,*)  (Agrif_Parent(nit000)-1)*Agrif_IRhot() + 1 
    254          WRITE(cl_check2,*)   Agrif_Parent(nitend)   *Agrif_IRhot() 
    255          CALL ctl_warn( 'incompatible run length between grids'               ,   & 
    256                &              ' nit000 on fine grid will be change to : '//cl_check1,   & 
    257                &              ' nitend on fine grid will be change to : '//cl_check2    ) 
    258          nit000 = (Agrif_Parent(nit000)-1)*Agrif_IRhot() + 1 
    259          nitend =  Agrif_Parent(nitend)   *Agrif_IRhot() 
     225           Agrif_Parent(nit000)+1) .ne. (nitend-nit000+1) ) THEN 
     226         WRITE(*,*) 'incompatible run length between grids' 
     227         WRITE(*,*) 'parent grid value : ',(Agrif_Parent(nitend)- & 
     228              Agrif_Parent(nit000)+1),' time step' 
     229         WRITE(*,*) 'child  grid value : ', & 
     230              (nitend-nit000+1),' time step' 
     231         WRITE(*,*) 'value on child grid should be : ', & 
     232              Agrif_IRhot() * (Agrif_Parent(nitend)- & 
     233              Agrif_Parent(nit000)+1) 
     234         STOP 
    260235      ENDIF 
    261236 
     
    263238      IF( ln_zps ) THEN 
    264239         ! check parameters for partial steps  
    265          IF( Agrif_Parent(e3zps_min) .NE. e3zps_min ) THEN 
     240         IF( Agrif_Parent(e3zps_min) .ne. e3zps_min ) THEN 
    266241            WRITE(*,*) 'incompatible e3zps_min between grids' 
    267242            WRITE(*,*) 'parent grid :',Agrif_Parent(e3zps_min) 
     
    278253         ENDIF 
    279254      ENDIF 
    280       ! check if masks and bathymetries match 
    281       IF(ln_chk_bathy) THEN 
    282          ! 
    283          IF(lwp) WRITE(numout,*) 'AGRIF: Check Bathymetry and masks near bdys. Level: ', Agrif_Level() 
    284          ! 
    285          kindic_agr = 0 
    286          ! check if umask agree with parent along western and eastern boundaries: 
    287          CALL Agrif_Bc_variable(umsk_id,calledweight=1.,procname=interpumsk) 
    288          ! check if vmask agree with parent along northern and southern boundaries: 
    289          CALL Agrif_Bc_variable(vmsk_id,calledweight=1.,procname=interpvmsk) 
    290     ! check if tmask and vertical scale factors agree with parent over first two coarse grid points: 
    291          CALL Agrif_Bc_variable(e3t_id,calledweight=1.,procname=interpe3t) 
    292          ! 
    293          IF (lk_mpp) CALL mpp_sum( kindic_agr ) 
    294          IF( kindic_agr /= 0 ) THEN                    
    295             CALL ctl_stop('Child Bathymetry is not correct near boundaries.') 
    296          ELSE 
    297             IF(lwp) WRITE(numout,*) 'Child Bathymetry is ok near boundaries.' 
    298          END IF 
    299       ENDIF 
    300       ! 
    301255   ENDIF 
    302    !  
    303    ! Do update at initialisation because not done before writing restarts 
    304    ! This would indeed change boundary conditions values at initial time 
    305    ! hence produce restartability issues. 
    306    ! Note that update below is recursive (with lk_agrif_doupd=T): 
    307    !  
    308 ! JC: I am not sure if Agrif_MaxLevel() is the "relative" 
    309 !     or the absolute maximum nesting level...TBC                         
    310    IF ( Agrif_Level().EQ.Agrif_MaxLevel() ) THEN  
    311       ! NB: Do tracers first, dynamics after because nbcline incremented in dynamics 
    312       CALL Agrif_Update_tra() 
    313       CALL Agrif_Update_dyn() 
    314    ENDIF 
    315    ! 
    316 # if defined key_zdftke 
    317 !   CALL Agrif_Update_tke(0) 
    318 # endif 
    319    ! 
    320    Agrif_UseSpecialValueInUpdate = .FALSE. 
     256 
     257   CALL Agrif_Update_tra(0) 
     258   CALL Agrif_Update_dyn(0) 
     259 
    321260   nbcline = 0 
    322    lk_agrif_doupd = .FALSE. 
     261   ! 
     262   DEALLOCATE(tabtstemp) 
     263   DEALLOCATE(tabuvtemp) 
     264   DEALLOCATE(tab2d) 
    323265   ! 
    324266END SUBROUTINE Agrif_InitValues_cont 
     
    334276   USE par_oce       !   ONLY : jpts 
    335277   USE oce 
    336    USE agrif_oce 
    337278   IMPLICIT NONE 
    338279   !!---------------------------------------------------------------------- 
     
    340281   ! 1. Declaration of the type of variable which have to be interpolated 
    341282   !--------------------------------------------------------------------- 
    342    CALL agrif_declare_variable((/2,2,0,0/),(/3,3,0,0/),(/'x','y','N','N'/),(/1,1,1,1/),(/nlci,nlcj,jpk,jpts/),tsn_id) 
    343    CALL agrif_declare_variable((/2,2,0,0/),(/3,3,0,0/),(/'x','y','N','N'/),(/1,1,1,1/),(/nlci,nlcj,jpk,jpts/),tsn_sponge_id) 
    344  
    345    CALL agrif_declare_variable((/1,2,0/),(/2,3,0/),(/'x','y','N'/),(/1,1,1/),(/nlci,nlcj,jpk/),un_interp_id) 
    346    CALL agrif_declare_variable((/2,1,0/),(/3,2,0/),(/'x','y','N'/),(/1,1,1/),(/nlci,nlcj,jpk/),vn_interp_id) 
    347    CALL agrif_declare_variable((/1,2,0/),(/2,3,0/),(/'x','y','N'/),(/1,1,1/),(/nlci,nlcj,jpk/),un_update_id) 
    348    CALL agrif_declare_variable((/2,1,0/),(/3,2,0/),(/'x','y','N'/),(/1,1,1/),(/nlci,nlcj,jpk/),vn_update_id) 
    349    CALL agrif_declare_variable((/1,2,0/),(/2,3,0/),(/'x','y','N'/),(/1,1,1/),(/nlci,nlcj,jpk/),un_sponge_id) 
    350    CALL agrif_declare_variable((/2,1,0/),(/3,2,0/),(/'x','y','N'/),(/1,1,1/),(/nlci,nlcj,jpk/),vn_sponge_id) 
    351  
    352    CALL agrif_declare_variable((/2,2,0/),(/3,3,0/),(/'x','y','N'/),(/1,1,1/),(/nlci,nlcj,jpk/),e3t_id) 
    353    CALL agrif_declare_variable((/1,2,0/),(/2,3,0/),(/'x','y','N'/),(/1,1,1/),(/nlci,nlcj,jpk/),umsk_id) 
    354    CALL agrif_declare_variable((/2,1,0/),(/3,2,0/),(/'x','y','N'/),(/1,1,1/),(/nlci,nlcj,jpk/),vmsk_id) 
    355  
    356    CALL agrif_declare_variable((/2,2,0,0/),(/3,3,0,0/),(/'x','y','N','N'/),(/1,1,1,1/),(/nlci,nlcj,jpk,3/),scales_t_id) 
    357  
    358    CALL agrif_declare_variable((/1,2/),(/2,3/),(/'x','y'/),(/1,1/),(/nlci,nlcj/),unb_id) 
    359    CALL agrif_declare_variable((/2,1/),(/3,2/),(/'x','y'/),(/1,1/),(/nlci,nlcj/),vnb_id) 
    360    CALL agrif_declare_variable((/1,2/),(/2,3/),(/'x','y'/),(/1,1/),(/nlci,nlcj/),ub2b_interp_id) 
    361    CALL agrif_declare_variable((/2,1/),(/3,2/),(/'x','y'/),(/1,1/),(/nlci,nlcj/),vb2b_interp_id) 
    362    CALL agrif_declare_variable((/1,2/),(/2,3/),(/'x','y'/),(/1,1/),(/nlci,nlcj/),ub2b_update_id) 
    363    CALL agrif_declare_variable((/2,1/),(/3,2/),(/'x','y'/),(/1,1/),(/nlci,nlcj/),vb2b_update_id) 
    364  
    365    CALL agrif_declare_variable((/2,2/),(/3,3/),(/'x','y'/),(/1,1/),(/nlci,nlcj/),sshn_id) 
    366  
    367 # if defined key_zdftke 
    368    CALL agrif_declare_variable((/2,2,0/),(/3,3,0/),(/'x','y','N'/),(/1,1,1/),(/jpi,jpj,jpk/), en_id) 
    369    CALL agrif_declare_variable((/2,2,0/),(/3,3,0/),(/'x','y','N'/),(/1,1,1/),(/jpi,jpj,jpk/),avt_id) 
    370    CALL agrif_declare_variable((/2,2,0/),(/3,3,0/),(/'x','y','N'/),(/1,1,1/),(/jpi,jpj,jpk/),avm_id) 
    371 # endif 
     283   CALL agrif_declare_variable((/2,2,0,0/),(/3,3,0,0/),(/'x','y','N','N'/),(/1,1,1,1/),(/jpi,jpj,jpk,jpts/),tsn_id) 
     284   CALL agrif_declare_variable((/2,2,0,0/),(/3,3,0,0/),(/'x','y','N','N'/),(/1,1,1,1/),(/jpi,jpj,jpk,jpts/),tsa_id) 
     285   CALL agrif_declare_variable((/2,2,0,0/),(/3,3,0,0/),(/'x','y','N','N'/),(/1,1,1,1/),(/jpi,jpj,jpk,jpts/),tsb_id) 
     286 
     287   CALL agrif_declare_variable((/1,2,0/),(/2,3,0/),(/'x','y','N'/),(/1,1,1/),(/jpi,jpj,jpk/),un_id) 
     288   CALL agrif_declare_variable((/2,1,0/),(/3,2,0/),(/'x','y','N'/),(/1,1,1/),(/jpi,jpj,jpk/),vn_id) 
     289   CALL agrif_declare_variable((/1,2,0/),(/2,3,0/),(/'x','y','N'/),(/1,1,1/),(/jpi,jpj,jpk/),ua_id) 
     290   CALL agrif_declare_variable((/2,1,0/),(/3,2,0/),(/'x','y','N'/),(/1,1,1/),(/jpi,jpj,jpk/),va_id) 
     291 
     292   CALL agrif_declare_variable((/1,2/),(/2,3/),(/'x','y'/),(/1,1/),(/jpi,jpj/),unb_id) 
     293   CALL agrif_declare_variable((/2,1/),(/3,2/),(/'x','y'/),(/1,1/),(/jpi,jpj/),vnb_id) 
     294   CALL agrif_declare_variable((/2,2/),(/3,3/),(/'x','y'/),(/1,1/),(/jpi,jpj/),sshn_id) 
     295   CALL agrif_declare_variable((/2,2/),(/3,3/),(/'x','y'/),(/1,1/),(/jpi,jpj/),gcb_id) 
     296   CALL agrif_declare_variable((/1,2/),(/2,3/),(/'x','y'/),(/1,1/),(/jpi,jpj/),ub2b_id) 
     297   CALL agrif_declare_variable((/2,1/),(/3,2/),(/'x','y'/),(/1,1/),(/jpi,jpj/),vb2b_id) 
    372298 
    373299   ! 2. Type of interpolation 
    374300   !------------------------- 
    375301   CALL Agrif_Set_bcinterp(tsn_id,interp=AGRIF_linear) 
    376  
    377    CALL Agrif_Set_bcinterp(un_interp_id,interp1=Agrif_linear,interp2=AGRIF_ppm) 
    378    CALL Agrif_Set_bcinterp(vn_interp_id,interp1=AGRIF_ppm,interp2=Agrif_linear) 
    379  
    380    CALL Agrif_Set_bcinterp(tsn_sponge_id,interp=AGRIF_linear) 
     302   CALL Agrif_Set_bcinterp(tsa_id,interp=AGRIF_linear) 
     303 
     304   Call Agrif_Set_bcinterp(un_id,interp1=Agrif_linear,interp2=AGRIF_ppm) 
     305   Call Agrif_Set_bcinterp(vn_id,interp1=AGRIF_ppm,interp2=Agrif_linear) 
     306 
     307   Call Agrif_Set_bcinterp(ua_id,interp1=Agrif_linear,interp2=AGRIF_ppm) 
     308   Call Agrif_Set_bcinterp(va_id,interp1=AGRIF_ppm,interp2=Agrif_linear) 
    381309 
    382310   CALL Agrif_Set_bcinterp(sshn_id,interp=AGRIF_linear) 
    383    CALL Agrif_Set_bcinterp(unb_id,interp1=Agrif_linear,interp2=AGRIF_ppm) 
    384    CALL Agrif_Set_bcinterp(vnb_id,interp1=AGRIF_ppm,interp2=Agrif_linear) 
    385    CALL Agrif_Set_bcinterp(ub2b_interp_id,interp1=Agrif_linear,interp2=AGRIF_ppm) 
    386    CALL Agrif_Set_bcinterp(vb2b_interp_id,interp1=AGRIF_ppm,interp2=Agrif_linear) 
    387  
    388  
    389    CALL Agrif_Set_bcinterp(un_sponge_id,interp1=Agrif_linear,interp2=AGRIF_ppm) 
    390    CALL Agrif_Set_bcinterp(vn_sponge_id,interp1=AGRIF_ppm,interp2=Agrif_linear) 
    391  
    392    CALL Agrif_Set_bcinterp(e3t_id,interp=AGRIF_constant) 
    393    CALL Agrif_Set_bcinterp(umsk_id,interp=AGRIF_constant) 
    394    CALL Agrif_Set_bcinterp(vmsk_id,interp=AGRIF_constant) 
    395  
    396 # if defined key_zdftke 
    397    CALL Agrif_Set_bcinterp(avm_id ,interp=AGRIF_linear) 
    398 # endif 
    399  
     311   Call Agrif_Set_bcinterp(unb_id,interp1=Agrif_linear,interp2=AGRIF_ppm) 
     312   Call Agrif_Set_bcinterp(vnb_id,interp1=AGRIF_ppm,interp2=Agrif_linear) 
     313   Call Agrif_Set_bcinterp(ub2b_id,interp1=Agrif_linear,interp2=AGRIF_ppm) 
     314   Call Agrif_Set_bcinterp(vb2b_id,interp1=AGRIF_ppm,interp2=Agrif_linear) 
    400315 
    401316   ! 3. Location of interpolation 
    402317   !----------------------------- 
    403    CALL Agrif_Set_bc(tsn_id,(/0,1/)) 
    404    CALL Agrif_Set_bc(un_interp_id,(/0,1/)) 
    405    CALL Agrif_Set_bc(vn_interp_id,(/0,1/)) 
    406  
    407 !   CALL Agrif_Set_bc(tsn_sponge_id,(/-3*Agrif_irhox(),0/)) 
    408 !   CALL Agrif_Set_bc(un_sponge_id,(/-2*Agrif_irhox()-1,0/)) 
    409 !   CALL Agrif_Set_bc(vn_sponge_id,(/-2*Agrif_irhox()-1,0/)) 
    410    CALL Agrif_Set_bc(tsn_sponge_id,(/-nn_sponge_len*Agrif_irhox()-1,0/)) 
    411    CALL Agrif_Set_bc(un_sponge_id ,(/-nn_sponge_len*Agrif_irhox()-1,0/)) 
    412    CALL Agrif_Set_bc(vn_sponge_id ,(/-nn_sponge_len*Agrif_irhox()-1,0/)) 
    413  
    414    CALL Agrif_Set_bc(sshn_id,(/0,0/)) 
    415    CALL Agrif_Set_bc(unb_id ,(/0,0/)) 
    416    CALL Agrif_Set_bc(vnb_id ,(/0,0/)) 
    417    CALL Agrif_Set_bc(ub2b_interp_id,(/0,0/)) 
    418    CALL Agrif_Set_bc(vb2b_interp_id,(/0,0/)) 
    419  
    420    CALL Agrif_Set_bc(e3t_id,(/-2*Agrif_irhox()-1,0/))   ! if west and rhox=3: column 2 to 9 
    421    CALL Agrif_Set_bc(umsk_id,(/0,0/)) 
    422    CALL Agrif_Set_bc(vmsk_id,(/0,0/)) 
    423  
    424 # if defined key_zdftke 
    425    CALL Agrif_Set_bc(avm_id ,(/0,1/)) 
    426 # endif 
     318   Call Agrif_Set_bc(un_id,(/0,1/)) 
     319   Call Agrif_Set_bc(vn_id,(/0,1/)) 
     320 
     321   Call Agrif_Set_bc(sshn_id,(/0,1/)) 
     322   Call Agrif_Set_bc(unb_id,(/0,1/)) 
     323   Call Agrif_Set_bc(vnb_id,(/0,1/)) 
     324   Call Agrif_Set_bc(ub2b_id,(/0,1/)) 
     325   Call Agrif_Set_bc(vb2b_id,(/0,1/)) 
     326 
     327   Call Agrif_Set_bc(tsn_id,(/0,1/)) 
     328   Call Agrif_Set_bc(tsa_id,(/-3*Agrif_irhox(),0/)) 
     329 
     330   Call Agrif_Set_bc(ua_id,(/-2*Agrif_irhox(),0/)) 
     331   Call Agrif_Set_bc(va_id,(/-2*Agrif_irhox(),0/)) 
    427332 
    428333   ! 5. Update type 
    429334   !---------------  
    430    CALL Agrif_Set_Updatetype(tsn_id, update = AGRIF_Update_Average) 
    431  
    432    CALL Agrif_Set_Updatetype(scales_t_id, update = AGRIF_Update_Average) 
    433  
    434    CALL Agrif_Set_Updatetype(un_update_id,update1 = Agrif_Update_Copy, update2 = Agrif_Update_Average) 
    435    CALL Agrif_Set_Updatetype(vn_update_id,update1 = Agrif_Update_Average, update2 = Agrif_Update_Copy) 
    436  
    437    CALL Agrif_Set_Updatetype(sshn_id, update = AGRIF_Update_Average) 
    438  
    439    CALL Agrif_Set_Updatetype(ub2b_update_id,update1 = Agrif_Update_Copy, update2 = Agrif_Update_Average) 
    440    CALL Agrif_Set_Updatetype(vb2b_update_id,update1 = Agrif_Update_Average, update2 = Agrif_Update_Copy) 
    441  
    442 # if defined key_zdftke 
    443    CALL Agrif_Set_Updatetype( en_id, update = AGRIF_Update_Average) 
    444    CALL Agrif_Set_Updatetype(avt_id, update = AGRIF_Update_Average) 
    445    CALL Agrif_Set_Updatetype(avm_id, update = AGRIF_Update_Average) 
    446 # endif 
    447  
    448 ! High order updates 
    449 !   CALL Agrif_Set_Updatetype(tsn_id, update = Agrif_Update_Full_Weighting) 
    450 !   CALL Agrif_Set_Updatetype(un_update_id,update1 = Agrif_Update_Average, update2 = Agrif_Update_Full_Weighting) 
    451 !   CALL Agrif_Set_Updatetype(vn_update_id,update1 = Agrif_Update_Full_Weighting, update2 = Agrif_Update_Average) 
    452 ! 
    453 !   CALL Agrif_Set_Updatetype(ub2b_update_id,update1 = Agrif_Update_Average, update2 = Agrif_Update_Full_Weighting) 
    454 !   CALL Agrif_Set_Updatetype(vb2b_update_id,update1 = Agrif_Update_Full_Weighting, update2 = Agrif_Update_Average) 
    455 !   CALL Agrif_Set_Updatetype(sshn_id, update = Agrif_Update_Full_Weighting) 
    456   
    457    ! 
     335   Call Agrif_Set_Updatetype(tsn_id, update = AGRIF_Update_Average) 
     336   Call Agrif_Set_Updatetype(tsb_id, update = AGRIF_Update_Average) 
     337 
     338   Call Agrif_Set_Updatetype(sshn_id, update = AGRIF_Update_Average) 
     339   Call Agrif_Set_Updatetype(gcb_id,update = AGRIF_Update_Average) 
     340 
     341   Call Agrif_Set_Updatetype(un_id,update1 = Agrif_Update_Copy, update2 = Agrif_Update_Average) 
     342   Call Agrif_Set_Updatetype(vn_id,update1 = Agrif_Update_Average, update2 = Agrif_Update_Copy) 
     343 
     344   Call Agrif_Set_Updatetype(ub2b_id,update1 = Agrif_Update_Copy, update2 = Agrif_Update_Average) 
     345   Call Agrif_Set_Updatetype(vb2b_id,update1 = Agrif_Update_Average, update2 = Agrif_Update_Copy) 
     346 
    458347END SUBROUTINE agrif_declare_var 
    459348# endif 
     
    476365   IMPLICIT NONE 
    477366   ! 
    478    !!---------------------------------------------------------------------- 
     367   REAL(wp), DIMENSION(:,:)  , ALLOCATABLE :: zvel 
     368   REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: zadv 
     369   !!---------------------------------------------------------------------- 
     370 
     371   ALLOCATE( zvel(jpi,jpj), zadv(jpi,jpj,7)) 
    479372 
    480373   ! 1. Declaration of the type of variable which have to be interpolated 
     
    508401   CALL Agrif_Update_lim2(0) 
    509402   ! 
     403   DEALLOCATE( zvel, zadv ) 
     404   ! 
    510405END SUBROUTINE Agrif_InitValues_cont_lim2 
    511406 
     
    536431   !------------------------- 
    537432   CALL Agrif_Set_bcinterp(adv_ice_id ,interp=AGRIF_linear) 
    538    CALL Agrif_Set_bcinterp(u_ice_id,interp1=Agrif_linear,interp2=AGRIF_ppm) 
    539    CALL Agrif_Set_bcinterp(v_ice_id,interp1=AGRIF_ppm,interp2=Agrif_linear) 
     433   Call Agrif_Set_bcinterp(u_ice_id,interp1=Agrif_linear,interp2=AGRIF_ppm) 
     434   Call Agrif_Set_bcinterp(v_ice_id,interp1=AGRIF_ppm,interp2=Agrif_linear) 
    540435 
    541436   ! 3. Location of interpolation 
    542437   !----------------------------- 
    543    CALL Agrif_Set_bc(adv_ice_id ,(/0,1/)) 
    544    CALL Agrif_Set_bc(u_ice_id,(/0,1/)) 
    545    CALL Agrif_Set_bc(v_ice_id,(/0,1/)) 
     438   Call Agrif_Set_bc(adv_ice_id ,(/0,1/)) 
     439   Call Agrif_Set_bc(u_ice_id,(/0,1/)) 
     440   Call Agrif_Set_bc(v_ice_id,(/0,1/)) 
    546441 
    547442   ! 5. Update type 
    548443   !--------------- 
    549    CALL Agrif_Set_Updatetype(adv_ice_id , update = AGRIF_Update_Average) 
    550    CALL Agrif_Set_Updatetype(u_ice_id,update1 = Agrif_Update_Copy, update2 = Agrif_Update_Average) 
    551    CALL Agrif_Set_Updatetype(v_ice_id,update1 = Agrif_Update_Average, update2 = Agrif_Update_Copy) 
    552    !  
     444   Call Agrif_Set_Updatetype(adv_ice_id , update = AGRIF_Update_Average) 
     445   Call Agrif_Set_Updatetype(u_ice_id,update1 = Agrif_Update_Copy, update2 = Agrif_Update_Average) 
     446   Call Agrif_Set_Updatetype(v_ice_id,update1 = Agrif_Update_Average, update2 = Agrif_Update_Copy) 
     447 
    553448END SUBROUTINE agrif_declare_var_lim2 
    554449#  endif 
     
    567462   USE nemogcm 
    568463   USE par_trc 
    569    USE lib_mpp 
    570464   USE trc 
    571465   USE in_out_manager 
    572    USE agrif_opa_sponge 
    573466   USE agrif_top_update 
    574467   USE agrif_top_interp 
     
    577470   IMPLICIT NONE 
    578471   ! 
    579    CHARACTER(len=10) :: cl_check1, cl_check2, cl_check3 
     472   REAL(wp), DIMENSION(:,:,:,:), ALLOCATABLE :: tabtrtemp 
    580473   LOGICAL :: check_namelist 
    581474   !!---------------------------------------------------------------------- 
     475 
     476   ALLOCATE( tabtrtemp(jpi,jpj,jpk,jptra) ) 
    582477 
    583478 
     
    590485   Agrif_SpecialValue=0. 
    591486   Agrif_UseSpecialValue = .TRUE. 
    592    CALL Agrif_Bc_variable(trn_id,calledweight=1.,procname=interptrn) 
     487   Call Agrif_Bc_variable(tabtrtemp,trn_id,calledweight=1.,procname=interptrn) 
     488   Call Agrif_Bc_variable(tabtrtemp,tra_id,calledweight=1.,procname=interptrn) 
    593489   Agrif_UseSpecialValue = .FALSE. 
    594    CALL Agrif_Sponge 
    595    tabspongedone_trn = .FALSE. 
    596    CALL Agrif_Bc_variable(trn_sponge_id,calledweight=1.,procname=interptrn_sponge) 
    597    ! reset tsa to zero 
    598    tra(:,:,:,:) = 0. 
    599  
    600490 
    601491   ! 3. Some controls 
    602492   !----------------- 
    603    check_namelist = .TRUE. 
     493   check_namelist = .true. 
    604494 
    605495   IF( check_namelist ) THEN 
    606 # if defined key_offline 
     496#  if defined offline      
    607497      ! Check time steps 
    608       IF( NINT(Agrif_Rhot()) * NINT(rdt) .NE. Agrif_Parent(rdt) ) THEN 
    609          WRITE(cl_check1,*)  Agrif_Parent(rdt) 
    610          WRITE(cl_check2,*)  rdt 
    611          WRITE(cl_check3,*)  rdt*Agrif_Rhot() 
    612          CALL ctl_warn( 'incompatible time step between grids',   & 
    613                &               'parent grid value : '//cl_check1    ,   &  
    614                &               'child  grid value : '//cl_check2    ,   &  
    615                &               'value on child grid will be changed to  & 
    616                &               :'//cl_check3  ) 
    617          rdt=rdt*Agrif_Rhot() 
     498      IF( nint(Agrif_Rhot()) * nint(rdt) .ne. Agrif_Parent(rdt) ) THEN 
     499         WRITE(*,*) 'incompatible time step between grids' 
     500         WRITE(*,*) 'parent grid value : ',Agrif_Parent(rdt) 
     501         WRITE(*,*) 'child  grid value : ',nint(rdt) 
     502         WRITE(*,*) 'value on parent grid should be : ',rdt*Agrif_Rhot() 
     503         STOP 
    618504      ENDIF 
    619505 
    620506      ! Check run length 
    621507      IF( Agrif_IRhot() * (Agrif_Parent(nitend)- & 
    622             Agrif_Parent(nit000)+1) .NE. (nitend-nit000+1) ) THEN 
    623          WRITE(cl_check1,*)  (Agrif_Parent(nit000)-1)*Agrif_IRhot() + 1 
    624          WRITE(cl_check2,*)   Agrif_Parent(nitend)   *Agrif_IRhot() 
    625          CALL ctl_warn( 'incompatible run length between grids'               ,   & 
    626                &              ' nit000 on fine grid will be change to : '//cl_check1,   & 
    627                &              ' nitend on fine grid will be change to : '//cl_check2    ) 
    628          nit000 = (Agrif_Parent(nit000)-1)*Agrif_IRhot() + 1 
    629          nitend =  Agrif_Parent(nitend)   *Agrif_IRhot() 
     508           Agrif_Parent(nit000)+1) .ne. (nitend-nit000+1) ) THEN 
     509         WRITE(*,*) 'incompatible run length between grids' 
     510         WRITE(*,*) 'parent grid value : ',(Agrif_Parent(nitend)- & 
     511              Agrif_Parent(nit000)+1),' time step' 
     512         WRITE(*,*) 'child  grid value : ', & 
     513              (nitend-nit000+1),' time step' 
     514         WRITE(*,*) 'value on child grid should be : ', & 
     515              Agrif_IRhot() * (Agrif_Parent(nitend)- & 
     516              Agrif_Parent(nit000)+1) 
     517         STOP 
    630518      ENDIF 
    631519 
     
    633521      IF( ln_zps ) THEN 
    634522         ! check parameters for partial steps  
    635          IF( Agrif_Parent(e3zps_min) .NE. e3zps_min ) THEN 
     523         IF( Agrif_Parent(e3zps_min) .ne. e3zps_min ) THEN 
    636524            WRITE(*,*) 'incompatible e3zps_min between grids' 
    637525            WRITE(*,*) 'parent grid :',Agrif_Parent(e3zps_min) 
     
    640528            STOP 
    641529         ENDIF 
    642          IF( Agrif_Parent(e3zps_rat) .NE. e3zps_rat ) THEN 
     530         IF( Agrif_Parent(e3zps_rat) .ne. e3zps_rat ) THEN 
    643531            WRITE(*,*) 'incompatible e3zps_rat between grids' 
    644532            WRITE(*,*) 'parent grid :',Agrif_Parent(e3zps_rat) 
     
    650538#  endif          
    651539      ! Check passive tracer cell 
    652       IF( nn_dttrc .NE. 1 ) THEN 
     540      IF( nn_dttrc .ne. 1 ) THEN 
    653541         WRITE(*,*) 'nn_dttrc should be equal to 1' 
    654542      ENDIF 
    655543   ENDIF 
    656544 
    657    CALL Agrif_Update_trc(0) 
    658    ! 
    659    Agrif_UseSpecialValueInUpdate = .FALSE. 
     545!ch   CALL Agrif_Update_trc(0) 
    660546   nbcline_trc = 0 
    661547   ! 
     548   DEALLOCATE(tabtrtemp) 
     549   ! 
    662550END SUBROUTINE Agrif_InitValues_cont_top 
    663551 
     
    670558   !!---------------------------------------------------------------------- 
    671559   USE agrif_util 
    672    USE agrif_oce 
    673560   USE dom_oce 
    674561   USE trc 
     
    678565   ! 1. Declaration of the type of variable which have to be interpolated 
    679566   !--------------------------------------------------------------------- 
    680    CALL agrif_declare_variable((/2,2,0,0/),(/3,3,0,0/),(/'x','y','N','N'/),(/1,1,1,1/),(/nlci,nlcj,jpk,jptra/),trn_id) 
    681    CALL agrif_declare_variable((/2,2,0,0/),(/3,3,0,0/),(/'x','y','N','N'/),(/1,1,1,1/),(/nlci,nlcj,jpk,jptra/),trn_sponge_id) 
     567   CALL agrif_declare_variable((/2,2,0,0/),(/3,3,0,0/),(/'x','y','N','N'/),(/1,1,1,1/),(/jpi,jpj,jpk,jptra/),trn_id) 
     568   CALL agrif_declare_variable((/2,2,0,0/),(/3,3,0,0/),(/'x','y','N','N'/),(/1,1,1,1/),(/jpi,jpj,jpk,jptra/),trb_id) 
     569   CALL agrif_declare_variable((/2,2,0,0/),(/3,3,0,0/),(/'x','y','N','N'/),(/1,1,1,1/),(/jpi,jpj,jpk,jptra/),tra_id) 
    682570 
    683571   ! 2. Type of interpolation 
    684572   !------------------------- 
    685573   CALL Agrif_Set_bcinterp(trn_id,interp=AGRIF_linear) 
    686    CALL Agrif_Set_bcinterp(trn_sponge_id,interp=AGRIF_linear) 
     574   CALL Agrif_Set_bcinterp(tra_id,interp=AGRIF_linear) 
    687575 
    688576   ! 3. Location of interpolation 
    689577   !----------------------------- 
    690    CALL Agrif_Set_bc(trn_id,(/0,1/)) 
    691 !   CALL Agrif_Set_bc(trn_sponge_id,(/-3*Agrif_irhox(),0/)) 
    692    CALL Agrif_Set_bc(trn_sponge_id,(/-nn_sponge_len*Agrif_irhox()-1,0/)) 
     578   Call Agrif_Set_bc(trn_id,(/0,1/)) 
     579   Call Agrif_Set_bc(tra_id,(/-3*Agrif_irhox(),0/)) 
    693580 
    694581   ! 5. Update type 
    695582   !---------------  
    696    CALL Agrif_Set_Updatetype(trn_id, update = AGRIF_Update_Average) 
    697  
    698 !   Higher order update 
    699 !   CALL Agrif_Set_Updatetype(tsn_id, update = Agrif_Update_Full_Weighting) 
    700  
    701    ! 
     583   Call Agrif_Set_Updatetype(trn_id, update = AGRIF_Update_Average) 
     584   Call Agrif_Set_Updatetype(trb_id, update = AGRIF_Update_Average) 
     585 
     586 
    702587END SUBROUTINE agrif_declare_var_top 
    703588# endif 
     
    707592   !!   *** ROUTINE Agrif_detect *** 
    708593   !!---------------------------------------------------------------------- 
     594   USE Agrif_Types 
    709595   ! 
    710596   INTEGER, DIMENSION(2) :: ksizex 
     
    728614   ! 
    729615   INTEGER  ::   ios                 ! Local integer output status for namelist read 
    730    INTEGER  ::   iminspon 
    731    NAMELIST/namagrif/ nn_cln_update, rn_sponge_tra, rn_sponge_dyn, ln_spc_dyn, ln_chk_bathy 
    732    !!-------------------------------------------------------------------------------------- 
    733    ! 
    734    REWIND( numnam_ref )              ! Namelist namagrif in reference namelist : AGRIF zoom 
    735    READ  ( numnam_ref, namagrif, IOSTAT = ios, ERR = 901) 
    736 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namagrif in reference namelist', lwp ) 
    737  
    738    REWIND( numnam_cfg )              ! Namelist namagrif in configuration namelist : AGRIF zoom 
    739    READ  ( numnam_cfg, namagrif, IOSTAT = ios, ERR = 902 ) 
    740 902 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namagrif in configuration namelist', lwp ) 
    741    IF(lwm) WRITE ( numond, namagrif ) 
     616   NAMELIST/namagrif/ nn_cln_update, rn_sponge_tra, rn_sponge_dyn, ln_spc_dyn 
     617   !!---------------------------------------------------------------------- 
     618   ! 
     619      REWIND( numnam_ref )              ! Namelist namagrif in reference namelist : AGRIF zoom 
     620      READ  ( numnam_ref, namagrif, IOSTAT = ios, ERR = 901) 
     621901   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namagrif in reference namelist', lwp ) 
     622 
     623      REWIND( numnam_cfg )              ! Namelist namagrif in configuration namelist : AGRIF zoom 
     624      READ  ( numnam_cfg, namagrif, IOSTAT = ios, ERR = 902 ) 
     625902   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namagrif in configuration namelist', lwp ) 
     626      IF(lwm) WRITE ( numond, namagrif ) 
    742627   ! 
    743628   IF(lwp) THEN                    ! control print 
     
    750635      WRITE(numout,*) '      sponge coefficient for dynamics   rn_sponge_tra = ', rn_sponge_dyn, ' s' 
    751636      WRITE(numout,*) '      use special values for dynamics   ln_spc_dyn    = ', ln_spc_dyn 
    752       WRITE(numout,*) '      check bathymetry                  ln_chk_bathy  = ', ln_chk_bathy 
    753637      WRITE(numout,*)  
    754638   ENDIF 
     
    759643   visc_dyn      = rn_sponge_dyn 
    760644   ! 
    761    ! Check sponge length: 
    762    iminspon = MIN(FLOOR(REAL(jpiglo-4)/REAL(2*Agrif_irhox())), FLOOR(REAL(jpjglo-4)/REAL(2*Agrif_irhox())) ) 
    763    IF (lk_mpp) iminspon = MIN(iminspon,FLOOR(REAL(jpi-2)/REAL(Agrif_irhox())), FLOOR(REAL(jpj-2)/REAL(Agrif_irhox())) ) 
    764    IF (nn_sponge_len > iminspon)  CALL ctl_stop('agrif sponge length is too large') 
    765    ! 
    766    IF( agrif_oce_alloc()  > 0 )   CALL ctl_warn('agrif agrif_oce_alloc: allocation of arrays failed') 
     645   IF( agrif_oce_alloc()  > 0 )   CALL ctl_warn('agrif sol_oce_alloc: allocation of arrays failed') 
    767646# if defined key_lim2 
    768647   IF( agrif_ice_alloc()  > 0 )   CALL ctl_stop('agrif agrif_ice_alloc: allocation of arrays failed') 
     
    785664   SELECT CASE( i ) 
    786665   CASE(1)   ;   indglob = indloc + nimppt(nprocloc+1) - 1 
    787    CASE(2)   ;   indglob = indloc + njmppt(nprocloc+1) - 1 
    788    CASE DEFAULT 
    789       indglob = indloc 
     666   CASE(2)   ;   indglob = indloc + njmppt(nprocloc+1) - 1  
     667   CASE(3)   ;   indglob = indloc 
     668   CASE(4)   ;   indglob = indloc 
    790669   END SELECT 
    791670   ! 
    792671END SUBROUTINE Agrif_InvLoc 
    793  
    794 SUBROUTINE Agrif_get_proc_info( imin, imax, jmin, jmax ) 
    795    !!---------------------------------------------------------------------- 
    796    !!                 *** ROUTINE Agrif_get_proc_info *** 
    797    !!---------------------------------------------------------------------- 
    798    USE par_oce 
    799    IMPLICIT NONE 
    800    ! 
    801    INTEGER, INTENT(out) :: imin, imax 
    802    INTEGER, INTENT(out) :: jmin, jmax 
    803    !!---------------------------------------------------------------------- 
    804    ! 
    805    imin = nimppt(Agrif_Procrank+1)  ! ????? 
    806    jmin = njmppt(Agrif_Procrank+1)  ! ????? 
    807    imax = imin + jpi - 1 
    808    jmax = jmin + jpj - 1 
    809    !  
    810 END SUBROUTINE Agrif_get_proc_info 
    811  
    812 SUBROUTINE Agrif_estimate_parallel_cost(imin, imax,jmin, jmax, nbprocs, grid_cost) 
    813    !!---------------------------------------------------------------------- 
    814    !!                 *** ROUTINE Agrif_estimate_parallel_cost *** 
    815    !!---------------------------------------------------------------------- 
    816    USE par_oce 
    817    IMPLICIT NONE 
    818    ! 
    819    INTEGER,  INTENT(in)  :: imin, imax 
    820    INTEGER,  INTENT(in)  :: jmin, jmax 
    821    INTEGER,  INTENT(in)  :: nbprocs 
    822    REAL(wp), INTENT(out) :: grid_cost 
    823    !!---------------------------------------------------------------------- 
    824    ! 
    825    grid_cost = REAL(imax-imin+1,wp)*REAL(jmax-jmin+1,wp) / REAL(nbprocs,wp) 
    826    ! 
    827 END SUBROUTINE Agrif_estimate_parallel_cost 
    828672 
    829673# endif 
Note: See TracChangeset for help on using the changeset viewer.