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 5989 for branches/2014/dev_r4650_UKMO10_Tidally_Meaned_Diagnostics/NEMOGCM/NEMO/NST_SRC/agrif_user.F90 – NEMO

Ignore:
Timestamp:
2015-12-03T09:10:32+01:00 (8 years ago)
Author:
deazer
Message:

Merging TMB and 25h diagnostics to head of trunk
added brief documentation

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2014/dev_r4650_UKMO10_Tidally_Meaned_Diagnostics/NEMOGCM/NEMO/NST_SRC/agrif_user.F90

    r4624 r5989  
    1717   USE par_oce 
    1818   USE dom_oce 
    19    USE Agrif_Util 
    2019   USE nemogcm 
    2120   ! 
     
    3130      jpi     = ( jpiglo-2*jpreci + (jpni-1+0) ) / jpni + 2*jpreci 
    3231      jpj     = ( jpjglo-2*jprecj + (jpnj-1+0) ) / jpnj + 2*jprecj 
    33       jpk     = jpkdta  
     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  
    3437      jpim1   = jpi-1  
    3538      jpjm1   = jpj-1  
     
    6467   ! 0. Initializations 
    6568   !------------------- 
    66    IF( cp_cfg == 'orca' ) then 
     69   IF( cp_cfg == 'orca' ) THEN 
    6770      IF ( jp_cfg == 2 .OR. jp_cfg == 025 .OR. jp_cfg == 05 & 
    68   &                      .OR. jp_cfg == 4 ) THEN 
     71            &                      .OR. jp_cfg == 4 ) THEN 
    6972         jp_cfg = -1    ! set special value for jp_cfg on fine grids 
    7073         cp_cfg = "default" 
     
    101104   USE dom_oce 
    102105   USE nemogcm 
    103    USE sol_oce 
    104106   USE in_out_manager 
    105107   USE agrif_opa_update 
     
    120122SUBROUTINE agrif_declare_var_dom 
    121123   !!---------------------------------------------------------------------- 
    122    !!                 *** ROUTINE agrif_declarE_var *** 
     124   !!                 *** ROUTINE agrif_declare_var *** 
    123125   !! 
    124126   !! ** Purpose :: Declaration of variables to be interpolated 
    125127   !!---------------------------------------------------------------------- 
    126128   USE agrif_util 
    127    USE par_oce       !   ONLY : jpts 
     129   USE par_oce        
    128130   USE oce 
    129131   IMPLICIT NONE 
     
    132134   ! 1. Declaration of the type of variable which have to be interpolated 
    133135   !--------------------------------------------------------------------- 
    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  
     136   CALL agrif_declare_variable((/1,2/),(/2,3/),(/'x','y'/),(/1,1/),(/nlci,nlcj/),e1u_id) 
     137   CALL agrif_declare_variable((/2,1/),(/3,2/),(/'x','y'/),(/1,1/),(/nlci,nlcj/),e2v_id) 
    137138 
    138139   ! 2. Type of interpolation 
    139140   !------------------------- 
    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) 
     141   CALL Agrif_Set_bcinterp(e1u_id,interp1=Agrif_linear,interp2=AGRIF_ppm) 
     142   CALL Agrif_Set_bcinterp(e2v_id,interp1=AGRIF_ppm,interp2=Agrif_linear) 
    142143 
    143144   ! 3. Location of interpolation 
    144145   !----------------------------- 
    145    Call Agrif_Set_bc(e1u_id,(/0,0/)) 
    146    Call Agrif_Set_bc(e2v_id,(/0,0/)) 
     146   CALL Agrif_Set_bc(e1u_id,(/0,0/)) 
     147   CALL Agrif_Set_bc(e2v_id,(/0,0/)) 
    147148 
    148149   ! 5. Update type 
    149150   !---------------  
    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  
     151   CALL Agrif_Set_Updatetype(e1u_id,update1 = Agrif_Update_Copy, update2=Agrif_Update_Average) 
     152   CALL Agrif_Set_Updatetype(e2v_id,update1 = Agrif_Update_Average, update2=Agrif_Update_Copy) 
     153 
     154! High order updates 
     155!   CALL Agrif_Set_Updatetype(e1u_id,update1 = Agrif_Update_Average,            update2=Agrif_Update_Full_Weighting) 
     156!   CALL Agrif_Set_Updatetype(e2v_id,update1 = Agrif_Update_Full_Weighting,     update2=Agrif_Update_Average) 
     157    ! 
    153158END SUBROUTINE agrif_declare_var_dom 
    154159 
     
    166171   USE dom_oce 
    167172   USE nemogcm 
    168    USE sol_oce 
     173   USE lib_mpp 
    169174   USE in_out_manager 
    170175   USE agrif_opa_update 
     
    174179   IMPLICIT NONE 
    175180   ! 
    176    REAL(wp), DIMENSION(:,:,:,:), ALLOCATABLE :: tabtstemp 
    177    REAL(wp), DIMENSION(:,:,:  ), ALLOCATABLE :: tabuvtemp 
    178    REAL(wp), DIMENSION(:,:    ), ALLOCATABLE :: tab2d 
    179181   LOGICAL :: check_namelist 
    180    !!---------------------------------------------------------------------- 
    181  
    182    ALLOCATE( tabtstemp(jpi, jpj, jpk, jpts) ) 
    183    ALLOCATE( tabuvtemp(jpi, jpj, jpk)       ) 
    184    ALLOCATE( tab2d(jpi, jpj)                ) 
    185  
     182   CHARACTER(len=15) :: cl_check1, cl_check2, cl_check3 
     183   !!---------------------------------------------------------------------- 
    186184 
    187185   ! 1. Declaration of the type of variable which have to be interpolated 
     
    193191   Agrif_SpecialValue=0. 
    194192   Agrif_UseSpecialValue = .TRUE. 
    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. 
     193   CALL Agrif_Bc_variable(tsn_id,calledweight=1.,procname=interptsn) 
     194   CALL Agrif_Sponge 
     195   tabspongedone_tsn = .FALSE. 
     196   CALL Agrif_Bc_variable(tsn_sponge_id,calledweight=1.,procname=interptsn_sponge) 
     197   ! reset tsa to zero 
     198   tsa(:,:,:,:) = 0. 
     199 
     200   Agrif_UseSpecialValue = ln_spc_dyn 
     201   CALL Agrif_Bc_variable(un_interp_id,calledweight=1.,procname=interpun) 
     202   CALL Agrif_Bc_variable(vn_interp_id,calledweight=1.,procname=interpvn) 
     203   tabspongedone_u = .FALSE. 
     204   tabspongedone_v = .FALSE. 
     205   CALL Agrif_Bc_variable(un_sponge_id,calledweight=1.,procname=interpun_sponge) 
     206   tabspongedone_u = .FALSE. 
     207   tabspongedone_v = .FALSE. 
     208   CALL Agrif_Bc_variable(vn_sponge_id,calledweight=1.,procname=interpvn_sponge) 
     209 
     210   Agrif_UseSpecialValue = .TRUE. 
     211   CALL Agrif_Bc_variable(sshn_id,calledweight=1., procname=interpsshn ) 
     212 
     213   IF ( ln_dynspg_ts ) THEN 
     214      Agrif_UseSpecialValue = ln_spc_dyn 
     215      CALL Agrif_Bc_variable(unb_id,calledweight=1.,procname=interpunb) 
     216      CALL Agrif_Bc_variable(vnb_id,calledweight=1.,procname=interpvnb) 
     217      CALL Agrif_Bc_variable(ub2b_interp_id,calledweight=1.,procname=interpub2b) 
     218      CALL Agrif_Bc_variable(vb2b_interp_id,calledweight=1.,procname=interpvb2b) 
     219      ubdy_w(:) = 0.e0 ; vbdy_w(:) = 0.e0 ; hbdy_w(:) =0.e0 
     220      ubdy_e(:) = 0.e0 ; vbdy_e(:) = 0.e0 ; hbdy_e(:) =0.e0  
     221      ubdy_n(:) = 0.e0 ; vbdy_n(:) = 0.e0 ; hbdy_n(:) =0.e0  
     222      ubdy_s(:) = 0.e0 ; vbdy_s(:) = 0.e0 ; hbdy_s(:) =0.e0 
     223   ENDIF 
     224 
     225   Agrif_UseSpecialValue = .FALSE.  
     226   ! reset velocities to zero 
     227   ua(:,:,:) = 0. 
     228   va(:,:,:) = 0. 
    207229 
    208230   ! 3. Some controls 
    209231   !----------------- 
    210    check_namelist = .true. 
    211  
    212    IF( check_namelist ) THEN 
     232   check_namelist = .TRUE. 
     233 
     234   IF( check_namelist ) THEN  
    213235 
    214236      ! Check time steps            
    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 
     237      IF( NINT(Agrif_Rhot()) * NINT(rdt) .NE. Agrif_Parent(rdt) ) THEN 
     238         WRITE(cl_check1,*)  NINT(Agrif_Parent(rdt)) 
     239         WRITE(cl_check2,*)  NINT(rdt) 
     240         WRITE(cl_check3,*)  NINT(Agrif_Parent(rdt)/Agrif_Rhot()) 
     241         CALL ctl_warn( 'incompatible time step between grids',   & 
     242               &               'parent grid value : '//cl_check1    ,   &  
     243               &               'child  grid value : '//cl_check2    ,   &  
     244               &               'value on child grid will be changed to : '//cl_check3 ) 
     245         rdt=Agrif_Parent(rdt)/Agrif_Rhot() 
    221246      ENDIF 
    222247 
    223248      ! Check run length 
    224249      IF( Agrif_IRhot() * (Agrif_Parent(nitend)- & 
    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 
     250            Agrif_Parent(nit000)+1) .NE. (nitend-nit000+1) ) THEN 
     251         WRITE(cl_check1,*)  (Agrif_Parent(nit000)-1)*Agrif_IRhot() + 1 
     252         WRITE(cl_check2,*)   Agrif_Parent(nitend)   *Agrif_IRhot() 
     253         CALL ctl_warn( 'incompatible run length between grids'               ,   & 
     254               &              ' nit000 on fine grid will be change to : '//cl_check1,   & 
     255               &              ' nitend on fine grid will be change to : '//cl_check2    ) 
     256         nit000 = (Agrif_Parent(nit000)-1)*Agrif_IRhot() + 1 
     257         nitend =  Agrif_Parent(nitend)   *Agrif_IRhot() 
    235258      ENDIF 
    236259 
     
    238261      IF( ln_zps ) THEN 
    239262         ! check parameters for partial steps  
    240          IF( Agrif_Parent(e3zps_min) .ne. e3zps_min ) THEN 
     263         IF( Agrif_Parent(e3zps_min) .NE. e3zps_min ) THEN 
    241264            WRITE(*,*) 'incompatible e3zps_min between grids' 
    242265            WRITE(*,*) 'parent grid :',Agrif_Parent(e3zps_min) 
     
    253276         ENDIF 
    254277      ENDIF 
     278 
     279      ! Check free surface scheme 
     280      IF ( ( Agrif_Parent(ln_dynspg_ts ).AND.ln_dynspg_exp ).OR.& 
     281         & ( Agrif_Parent(ln_dynspg_exp).AND.ln_dynspg_ts ) ) THEN 
     282         WRITE(*,*) 'incompatible free surface scheme between grids' 
     283         WRITE(*,*) 'parent grid ln_dynspg_ts  :', Agrif_Parent(ln_dynspg_ts ) 
     284         WRITE(*,*) 'parent grid ln_dynspg_exp :', Agrif_Parent(ln_dynspg_exp) 
     285         WRITE(*,*) 'child grid  ln_dynspg_ts  :', ln_dynspg_ts 
     286         WRITE(*,*) 'child grid  ln_dynspg_exp :', ln_dynspg_exp 
     287         WRITE(*,*) 'those logicals should be identical'                   
     288         STOP 
     289      ENDIF 
     290 
     291      ! check if masks and bathymetries match 
     292      IF(ln_chk_bathy) THEN 
     293         ! 
     294         IF(lwp) WRITE(numout,*) 'AGRIF: Check Bathymetry and masks near bdys. Level: ', Agrif_Level() 
     295         ! 
     296         kindic_agr = 0 
     297         ! check if umask agree with parent along western and eastern boundaries: 
     298         CALL Agrif_Bc_variable(umsk_id,calledweight=1.,procname=interpumsk) 
     299         ! check if vmask agree with parent along northern and southern boundaries: 
     300         CALL Agrif_Bc_variable(vmsk_id,calledweight=1.,procname=interpvmsk) 
     301    ! check if tmask and vertical scale factors agree with parent over first two coarse grid points: 
     302         CALL Agrif_Bc_variable(e3t_id,calledweight=1.,procname=interpe3t) 
     303         ! 
     304         IF (lk_mpp) CALL mpp_sum( kindic_agr ) 
     305         IF( kindic_agr /= 0 ) THEN                    
     306            CALL ctl_stop('Child Bathymetry is not correct near boundaries.') 
     307         ELSE 
     308            IF(lwp) WRITE(numout,*) 'Child Bathymetry is ok near boundaries.' 
     309         END IF 
     310      ENDIF 
     311      ! 
    255312   ENDIF 
    256  
    257    CALL Agrif_Update_tra(0) 
    258    CALL Agrif_Update_dyn(0) 
    259  
    260    nbcline = 0 
    261    ! 
    262    DEALLOCATE(tabtstemp) 
    263    DEALLOCATE(tabuvtemp) 
    264    DEALLOCATE(tab2d) 
     313   !  
     314   ! Do update at initialisation because not done before writing restarts 
     315   ! This would indeed change boundary conditions values at initial time 
     316   ! hence produce restartability issues. 
     317   ! Note that update below is recursive (with lk_agrif_doupd=T): 
     318   !  
     319! JC: I am not sure if Agrif_MaxLevel() is the "relative" 
     320!     or the absolute maximum nesting level...TBC                         
     321   IF ( Agrif_Level().EQ.Agrif_MaxLevel() ) THEN  
     322      ! NB: Do tracers first, dynamics after because nbcline incremented in dynamics 
     323      CALL Agrif_Update_tra() 
     324      CALL Agrif_Update_dyn() 
     325   ENDIF 
     326   ! 
     327# if defined key_zdftke 
     328   CALL Agrif_Update_tke(0) 
     329# endif 
     330   ! 
     331   Agrif_UseSpecialValueInUpdate = .FALSE. 
     332   nbcline = 0  
     333   lk_agrif_doupd = .FALSE. 
    265334   ! 
    266335END SUBROUTINE Agrif_InitValues_cont 
     
    276345   USE par_oce       !   ONLY : jpts 
    277346   USE oce 
     347   USE agrif_oce 
    278348   IMPLICIT NONE 
    279349   !!---------------------------------------------------------------------- 
     
    281351   ! 1. Declaration of the type of variable which have to be interpolated 
    282352   !--------------------------------------------------------------------- 
    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) 
     353   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) 
     354   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) 
     355 
     356   CALL agrif_declare_variable((/1,2,0/),(/2,3,0/),(/'x','y','N'/),(/1,1,1/),(/nlci,nlcj,jpk/),un_interp_id) 
     357   CALL agrif_declare_variable((/2,1,0/),(/3,2,0/),(/'x','y','N'/),(/1,1,1/),(/nlci,nlcj,jpk/),vn_interp_id) 
     358   CALL agrif_declare_variable((/1,2,0/),(/2,3,0/),(/'x','y','N'/),(/1,1,1/),(/nlci,nlcj,jpk/),un_update_id) 
     359   CALL agrif_declare_variable((/2,1,0/),(/3,2,0/),(/'x','y','N'/),(/1,1,1/),(/nlci,nlcj,jpk/),vn_update_id) 
     360   CALL agrif_declare_variable((/1,2,0/),(/2,3,0/),(/'x','y','N'/),(/1,1,1/),(/nlci,nlcj,jpk/),un_sponge_id) 
     361   CALL agrif_declare_variable((/2,1,0/),(/3,2,0/),(/'x','y','N'/),(/1,1,1/),(/nlci,nlcj,jpk/),vn_sponge_id) 
     362 
     363   CALL agrif_declare_variable((/2,2,0/),(/3,3,0/),(/'x','y','N'/),(/1,1,1/),(/nlci,nlcj,jpk/),e3t_id) 
     364   CALL agrif_declare_variable((/1,2,0/),(/2,3,0/),(/'x','y','N'/),(/1,1,1/),(/nlci,nlcj,jpk/),umsk_id) 
     365   CALL agrif_declare_variable((/2,1,0/),(/3,2,0/),(/'x','y','N'/),(/1,1,1/),(/nlci,nlcj,jpk/),vmsk_id) 
     366 
     367   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) 
     368 
     369   CALL agrif_declare_variable((/1,2/),(/2,3/),(/'x','y'/),(/1,1/),(/nlci,nlcj/),unb_id) 
     370   CALL agrif_declare_variable((/2,1/),(/3,2/),(/'x','y'/),(/1,1/),(/nlci,nlcj/),vnb_id) 
     371   CALL agrif_declare_variable((/1,2/),(/2,3/),(/'x','y'/),(/1,1/),(/nlci,nlcj/),ub2b_interp_id) 
     372   CALL agrif_declare_variable((/2,1/),(/3,2/),(/'x','y'/),(/1,1/),(/nlci,nlcj/),vb2b_interp_id) 
     373   CALL agrif_declare_variable((/1,2/),(/2,3/),(/'x','y'/),(/1,1/),(/nlci,nlcj/),ub2b_update_id) 
     374   CALL agrif_declare_variable((/2,1/),(/3,2/),(/'x','y'/),(/1,1/),(/nlci,nlcj/),vb2b_update_id) 
     375 
     376   CALL agrif_declare_variable((/2,2/),(/3,3/),(/'x','y'/),(/1,1/),(/nlci,nlcj/),sshn_id) 
     377 
     378# if defined key_zdftke 
     379   CALL agrif_declare_variable((/2,2,0/),(/3,3,0/),(/'x','y','N'/),(/1,1,1/),(/jpi,jpj,jpk/), en_id) 
     380   CALL agrif_declare_variable((/2,2,0/),(/3,3,0/),(/'x','y','N'/),(/1,1,1/),(/jpi,jpj,jpk/),avt_id) 
     381   CALL agrif_declare_variable((/2,2,0/),(/3,3,0/),(/'x','y','N'/),(/1,1,1/),(/jpi,jpj,jpk/),avm_id) 
     382# endif 
    298383 
    299384   ! 2. Type of interpolation 
    300385   !------------------------- 
    301386   CALL Agrif_Set_bcinterp(tsn_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) 
     387 
     388   CALL Agrif_Set_bcinterp(un_interp_id,interp1=Agrif_linear,interp2=AGRIF_ppm) 
     389   CALL Agrif_Set_bcinterp(vn_interp_id,interp1=AGRIF_ppm,interp2=Agrif_linear) 
     390 
     391   CALL Agrif_Set_bcinterp(tsn_sponge_id,interp=AGRIF_linear) 
    309392 
    310393   CALL Agrif_Set_bcinterp(sshn_id,interp=AGRIF_linear) 
    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) 
     394   CALL Agrif_Set_bcinterp(unb_id,interp1=Agrif_linear,interp2=AGRIF_ppm) 
     395   CALL Agrif_Set_bcinterp(vnb_id,interp1=AGRIF_ppm,interp2=Agrif_linear) 
     396   CALL Agrif_Set_bcinterp(ub2b_interp_id,interp1=Agrif_linear,interp2=AGRIF_ppm) 
     397   CALL Agrif_Set_bcinterp(vb2b_interp_id,interp1=AGRIF_ppm,interp2=Agrif_linear) 
     398 
     399 
     400   CALL Agrif_Set_bcinterp(un_sponge_id,interp1=Agrif_linear,interp2=AGRIF_ppm) 
     401   CALL Agrif_Set_bcinterp(vn_sponge_id,interp1=AGRIF_ppm,interp2=Agrif_linear) 
     402 
     403   CALL Agrif_Set_bcinterp(e3t_id,interp=AGRIF_constant) 
     404   CALL Agrif_Set_bcinterp(umsk_id,interp=AGRIF_constant) 
     405   CALL Agrif_Set_bcinterp(vmsk_id,interp=AGRIF_constant) 
     406 
     407# if defined key_zdftke 
     408   CALL Agrif_Set_bcinterp(avm_id ,interp=AGRIF_linear) 
     409# endif 
     410 
    315411 
    316412   ! 3. Location of interpolation 
    317413   !----------------------------- 
    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/)) 
     414   CALL Agrif_Set_bc(tsn_id,(/0,1/)) 
     415   CALL Agrif_Set_bc(un_interp_id,(/0,1/)) 
     416   CALL Agrif_Set_bc(vn_interp_id,(/0,1/)) 
     417 
     418!   CALL Agrif_Set_bc(tsn_sponge_id,(/-3*Agrif_irhox(),0/)) 
     419!   CALL Agrif_Set_bc(un_sponge_id,(/-2*Agrif_irhox()-1,0/)) 
     420!   CALL Agrif_Set_bc(vn_sponge_id,(/-2*Agrif_irhox()-1,0/)) 
     421   CALL Agrif_Set_bc(tsn_sponge_id,(/-nn_sponge_len*Agrif_irhox()-1,0/)) 
     422   CALL Agrif_Set_bc(un_sponge_id ,(/-nn_sponge_len*Agrif_irhox()-1,0/)) 
     423   CALL Agrif_Set_bc(vn_sponge_id ,(/-nn_sponge_len*Agrif_irhox()-1,0/)) 
     424 
     425   CALL Agrif_Set_bc(sshn_id,(/0,0/)) 
     426   CALL Agrif_Set_bc(unb_id ,(/0,0/)) 
     427   CALL Agrif_Set_bc(vnb_id ,(/0,0/)) 
     428   CALL Agrif_Set_bc(ub2b_interp_id,(/0,0/)) 
     429   CALL Agrif_Set_bc(vb2b_interp_id,(/0,0/)) 
     430 
     431   CALL Agrif_Set_bc(e3t_id,(/-2*Agrif_irhox()-1,0/))   ! if west and rhox=3: column 2 to 9 
     432   CALL Agrif_Set_bc(umsk_id,(/0,0/)) 
     433   CALL Agrif_Set_bc(vmsk_id,(/0,0/)) 
     434 
     435# if defined key_zdftke 
     436   CALL Agrif_Set_bc(avm_id ,(/0,1/)) 
     437# endif 
    332438 
    333439   ! 5. Update type 
    334440   !---------------  
    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  
     441   CALL Agrif_Set_Updatetype(tsn_id, update = AGRIF_Update_Average) 
     442 
     443   CALL Agrif_Set_Updatetype(scales_t_id, update = AGRIF_Update_Average) 
     444 
     445   CALL Agrif_Set_Updatetype(un_update_id,update1 = Agrif_Update_Copy, update2 = Agrif_Update_Average) 
     446   CALL Agrif_Set_Updatetype(vn_update_id,update1 = Agrif_Update_Average, update2 = Agrif_Update_Copy) 
     447 
     448   CALL Agrif_Set_Updatetype(sshn_id, update = AGRIF_Update_Average) 
     449 
     450   CALL Agrif_Set_Updatetype(ub2b_update_id,update1 = Agrif_Update_Copy, update2 = Agrif_Update_Average) 
     451   CALL Agrif_Set_Updatetype(vb2b_update_id,update1 = Agrif_Update_Average, update2 = Agrif_Update_Copy) 
     452 
     453# if defined key_zdftke 
     454   CALL Agrif_Set_Updatetype( en_id, update = AGRIF_Update_Average) 
     455   CALL Agrif_Set_Updatetype(avt_id, update = AGRIF_Update_Average) 
     456   CALL Agrif_Set_Updatetype(avm_id, update = AGRIF_Update_Average) 
     457# endif 
     458 
     459! High order updates 
     460!   CALL Agrif_Set_Updatetype(tsn_id, update = Agrif_Update_Full_Weighting) 
     461!   CALL Agrif_Set_Updatetype(un_update_id,update1 = Agrif_Update_Average, update2 = Agrif_Update_Full_Weighting) 
     462!   CALL Agrif_Set_Updatetype(vn_update_id,update1 = Agrif_Update_Full_Weighting, update2 = Agrif_Update_Average) 
     463! 
     464!   CALL Agrif_Set_Updatetype(ub2b_update_id,update1 = Agrif_Update_Average, update2 = Agrif_Update_Full_Weighting) 
     465!   CALL Agrif_Set_Updatetype(vb2b_update_id,update1 = Agrif_Update_Full_Weighting, update2 = Agrif_Update_Average) 
     466!   CALL Agrif_Set_Updatetype(sshn_id, update = Agrif_Update_Full_Weighting) 
     467  
     468   ! 
    347469END SUBROUTINE agrif_declare_var 
    348470# endif 
     
    365487   IMPLICIT NONE 
    366488   ! 
    367    REAL(wp), DIMENSION(:,:)  , ALLOCATABLE :: zvel 
    368    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: zadv 
    369    !!---------------------------------------------------------------------- 
    370  
    371    ALLOCATE( zvel(jpi,jpj), zadv(jpi,jpj,7)) 
     489   !!---------------------------------------------------------------------- 
    372490 
    373491   ! 1. Declaration of the type of variable which have to be interpolated 
     
    401519   CALL Agrif_Update_lim2(0) 
    402520   ! 
    403    DEALLOCATE( zvel, zadv ) 
    404    ! 
    405521END SUBROUTINE Agrif_InitValues_cont_lim2 
    406522 
     
    431547   !------------------------- 
    432548   CALL Agrif_Set_bcinterp(adv_ice_id ,interp=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) 
     549   CALL Agrif_Set_bcinterp(u_ice_id,interp1=Agrif_linear,interp2=AGRIF_ppm) 
     550   CALL Agrif_Set_bcinterp(v_ice_id,interp1=AGRIF_ppm,interp2=Agrif_linear) 
    435551 
    436552   ! 3. Location of interpolation 
    437553   !----------------------------- 
    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/)) 
     554   CALL Agrif_Set_bc(adv_ice_id ,(/0,1/)) 
     555   CALL Agrif_Set_bc(u_ice_id,(/0,1/)) 
     556   CALL Agrif_Set_bc(v_ice_id,(/0,1/)) 
    441557 
    442558   ! 5. Update type 
    443559   !--------------- 
    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  
     560   CALL Agrif_Set_Updatetype(adv_ice_id , update = AGRIF_Update_Average) 
     561   CALL Agrif_Set_Updatetype(u_ice_id,update1 = Agrif_Update_Copy, update2 = Agrif_Update_Average) 
     562   CALL Agrif_Set_Updatetype(v_ice_id,update1 = Agrif_Update_Average, update2 = Agrif_Update_Copy) 
     563   !  
    448564END SUBROUTINE agrif_declare_var_lim2 
    449565#  endif 
     
    462578   USE nemogcm 
    463579   USE par_trc 
     580   USE lib_mpp 
    464581   USE trc 
    465582   USE in_out_manager 
     583   USE agrif_opa_sponge 
    466584   USE agrif_top_update 
    467585   USE agrif_top_interp 
     
    470588   IMPLICIT NONE 
    471589   ! 
    472    REAL(wp), DIMENSION(:,:,:,:), ALLOCATABLE :: tabtrtemp 
     590   CHARACTER(len=10) :: cl_check1, cl_check2, cl_check3 
    473591   LOGICAL :: check_namelist 
    474592   !!---------------------------------------------------------------------- 
    475  
    476    ALLOCATE( tabtrtemp(jpi,jpj,jpk,jptra) ) 
    477593 
    478594 
     
    485601   Agrif_SpecialValue=0. 
    486602   Agrif_UseSpecialValue = .TRUE. 
    487    Call Agrif_Bc_variable(tabtrtemp,trn_id,calledweight=1.,procname=interptrn) 
    488    Call Agrif_Bc_variable(tabtrtemp,tra_id,calledweight=1.,procname=interptrn) 
     603   CALL Agrif_Bc_variable(trn_id,calledweight=1.,procname=interptrn) 
    489604   Agrif_UseSpecialValue = .FALSE. 
     605   CALL Agrif_Sponge 
     606   tabspongedone_trn = .FALSE. 
     607   CALL Agrif_Bc_variable(trn_sponge_id,calledweight=1.,procname=interptrn_sponge) 
     608   ! reset tsa to zero 
     609   tra(:,:,:,:) = 0. 
     610 
    490611 
    491612   ! 3. Some controls 
    492613   !----------------- 
    493    check_namelist = .true. 
     614   check_namelist = .TRUE. 
    494615 
    495616   IF( check_namelist ) THEN 
    496 #  if defined offline      
     617# if defined key_offline 
    497618      ! Check time steps 
    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 
     619      IF( NINT(Agrif_Rhot()) * NINT(rdt) .NE. Agrif_Parent(rdt) ) THEN 
     620         WRITE(cl_check1,*)  Agrif_Parent(rdt) 
     621         WRITE(cl_check2,*)  rdt 
     622         WRITE(cl_check3,*)  rdt*Agrif_Rhot() 
     623         CALL ctl_warn( 'incompatible time step between grids',   & 
     624               &               'parent grid value : '//cl_check1    ,   &  
     625               &               'child  grid value : '//cl_check2    ,   &  
     626               &               'value on child grid will be changed to  & 
     627               &               :'//cl_check3  ) 
     628         rdt=rdt*Agrif_Rhot() 
    504629      ENDIF 
    505630 
    506631      ! Check run length 
    507632      IF( Agrif_IRhot() * (Agrif_Parent(nitend)- & 
    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 
     633            Agrif_Parent(nit000)+1) .NE. (nitend-nit000+1) ) THEN 
     634         WRITE(cl_check1,*)  (Agrif_Parent(nit000)-1)*Agrif_IRhot() + 1 
     635         WRITE(cl_check2,*)   Agrif_Parent(nitend)   *Agrif_IRhot() 
     636         CALL ctl_warn( 'incompatible run length between grids'               ,   & 
     637               &              ' nit000 on fine grid will be change to : '//cl_check1,   & 
     638               &              ' nitend on fine grid will be change to : '//cl_check2    ) 
     639         nit000 = (Agrif_Parent(nit000)-1)*Agrif_IRhot() + 1 
     640         nitend =  Agrif_Parent(nitend)   *Agrif_IRhot() 
    518641      ENDIF 
    519642 
     
    521644      IF( ln_zps ) THEN 
    522645         ! check parameters for partial steps  
    523          IF( Agrif_Parent(e3zps_min) .ne. e3zps_min ) THEN 
     646         IF( Agrif_Parent(e3zps_min) .NE. e3zps_min ) THEN 
    524647            WRITE(*,*) 'incompatible e3zps_min between grids' 
    525648            WRITE(*,*) 'parent grid :',Agrif_Parent(e3zps_min) 
     
    528651            STOP 
    529652         ENDIF 
    530          IF( Agrif_Parent(e3zps_rat) .ne. e3zps_rat ) THEN 
     653         IF( Agrif_Parent(e3zps_rat) .NE. e3zps_rat ) THEN 
    531654            WRITE(*,*) 'incompatible e3zps_rat between grids' 
    532655            WRITE(*,*) 'parent grid :',Agrif_Parent(e3zps_rat) 
     
    538661#  endif          
    539662      ! Check passive tracer cell 
    540       IF( nn_dttrc .ne. 1 ) THEN 
     663      IF( nn_dttrc .NE. 1 ) THEN 
    541664         WRITE(*,*) 'nn_dttrc should be equal to 1' 
    542665      ENDIF 
    543666   ENDIF 
    544667 
    545 !ch   CALL Agrif_Update_trc(0) 
     668   CALL Agrif_Update_trc(0) 
     669   ! 
     670   Agrif_UseSpecialValueInUpdate = .FALSE. 
    546671   nbcline_trc = 0 
    547    ! 
    548    DEALLOCATE(tabtrtemp) 
    549672   ! 
    550673END SUBROUTINE Agrif_InitValues_cont_top 
     
    558681   !!---------------------------------------------------------------------- 
    559682   USE agrif_util 
     683   USE agrif_oce 
    560684   USE dom_oce 
    561685   USE trc 
     
    565689   ! 1. Declaration of the type of variable which have to be interpolated 
    566690   !--------------------------------------------------------------------- 
    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) 
     691   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) 
     692   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) 
    570693 
    571694   ! 2. Type of interpolation 
    572695   !------------------------- 
    573696   CALL Agrif_Set_bcinterp(trn_id,interp=AGRIF_linear) 
    574    CALL Agrif_Set_bcinterp(tra_id,interp=AGRIF_linear) 
     697   CALL Agrif_Set_bcinterp(trn_sponge_id,interp=AGRIF_linear) 
    575698 
    576699   ! 3. Location of interpolation 
    577700   !----------------------------- 
    578    Call Agrif_Set_bc(trn_id,(/0,1/)) 
    579    Call Agrif_Set_bc(tra_id,(/-3*Agrif_irhox(),0/)) 
     701   CALL Agrif_Set_bc(trn_id,(/0,1/)) 
     702!   CALL Agrif_Set_bc(trn_sponge_id,(/-3*Agrif_irhox(),0/)) 
     703   CALL Agrif_Set_bc(trn_sponge_id,(/-nn_sponge_len*Agrif_irhox()-1,0/)) 
    580704 
    581705   ! 5. Update type 
    582706   !---------------  
    583    Call Agrif_Set_Updatetype(trn_id, update = AGRIF_Update_Average) 
    584    Call Agrif_Set_Updatetype(trb_id, update = AGRIF_Update_Average) 
    585  
    586  
     707   CALL Agrif_Set_Updatetype(trn_id, update = AGRIF_Update_Average) 
     708 
     709!   Higher order update 
     710!   CALL Agrif_Set_Updatetype(tsn_id, update = Agrif_Update_Full_Weighting) 
     711 
     712   ! 
    587713END SUBROUTINE agrif_declare_var_top 
    588714# endif 
     
    592718   !!   *** ROUTINE Agrif_detect *** 
    593719   !!---------------------------------------------------------------------- 
    594    USE Agrif_Types 
    595720   ! 
    596721   INTEGER, DIMENSION(2) :: ksizex 
     
    614739   ! 
    615740   INTEGER  ::   ios                 ! Local integer output status for namelist read 
    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) 
    621 901   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 ) 
    625 902   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namagrif in configuration namelist', lwp ) 
    626       IF(lwm) WRITE ( numond, namagrif ) 
     741   INTEGER  ::   iminspon 
     742   NAMELIST/namagrif/ nn_cln_update, rn_sponge_tra, rn_sponge_dyn, ln_spc_dyn, ln_chk_bathy 
     743   !!-------------------------------------------------------------------------------------- 
     744   ! 
     745   REWIND( numnam_ref )              ! Namelist namagrif in reference namelist : AGRIF zoom 
     746   READ  ( numnam_ref, namagrif, IOSTAT = ios, ERR = 901) 
     747901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namagrif in reference namelist', lwp ) 
     748 
     749   REWIND( numnam_cfg )              ! Namelist namagrif in configuration namelist : AGRIF zoom 
     750   READ  ( numnam_cfg, namagrif, IOSTAT = ios, ERR = 902 ) 
     751902 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namagrif in configuration namelist', lwp ) 
     752   IF(lwm) WRITE ( numond, namagrif ) 
    627753   ! 
    628754   IF(lwp) THEN                    ! control print 
     
    635761      WRITE(numout,*) '      sponge coefficient for dynamics   rn_sponge_tra = ', rn_sponge_dyn, ' s' 
    636762      WRITE(numout,*) '      use special values for dynamics   ln_spc_dyn    = ', ln_spc_dyn 
     763      WRITE(numout,*) '      check bathymetry                  ln_chk_bathy  = ', ln_chk_bathy 
    637764      WRITE(numout,*)  
    638765   ENDIF 
     
    643770   visc_dyn      = rn_sponge_dyn 
    644771   ! 
    645    IF( agrif_oce_alloc()  > 0 )   CALL ctl_warn('agrif sol_oce_alloc: allocation of arrays failed') 
     772   ! Check sponge length: 
     773   iminspon = MIN(FLOOR(REAL(jpiglo-4)/REAL(2*Agrif_irhox())), FLOOR(REAL(jpjglo-4)/REAL(2*Agrif_irhox())) ) 
     774   IF (lk_mpp) iminspon = MIN(iminspon,FLOOR(REAL(jpi-2)/REAL(Agrif_irhox())), FLOOR(REAL(jpj-2)/REAL(Agrif_irhox())) ) 
     775   IF (nn_sponge_len > iminspon)  CALL ctl_stop('agrif sponge length is too large') 
     776   ! 
     777   IF( agrif_oce_alloc()  > 0 )   CALL ctl_warn('agrif agrif_oce_alloc: allocation of arrays failed') 
    646778# if defined key_lim2 
    647779   IF( agrif_ice_alloc()  > 0 )   CALL ctl_stop('agrif agrif_ice_alloc: allocation of arrays failed') 
     
    664796   SELECT CASE( i ) 
    665797   CASE(1)   ;   indglob = indloc + nimppt(nprocloc+1) - 1 
    666    CASE(2)   ;   indglob = indloc + njmppt(nprocloc+1) - 1  
    667    CASE(3)   ;   indglob = indloc 
    668    CASE(4)   ;   indglob = indloc 
     798   CASE(2)   ;   indglob = indloc + njmppt(nprocloc+1) - 1 
     799   CASE DEFAULT 
     800      indglob = indloc 
    669801   END SELECT 
    670802   ! 
    671803END SUBROUTINE Agrif_InvLoc 
     804 
     805SUBROUTINE Agrif_get_proc_info( imin, imax, jmin, jmax ) 
     806   !!---------------------------------------------------------------------- 
     807   !!                 *** ROUTINE Agrif_get_proc_info *** 
     808   !!---------------------------------------------------------------------- 
     809   USE par_oce 
     810   IMPLICIT NONE 
     811   ! 
     812   INTEGER, INTENT(out) :: imin, imax 
     813   INTEGER, INTENT(out) :: jmin, jmax 
     814   !!---------------------------------------------------------------------- 
     815   ! 
     816   imin = nimppt(Agrif_Procrank+1)  ! ????? 
     817   jmin = njmppt(Agrif_Procrank+1)  ! ????? 
     818   imax = imin + jpi - 1 
     819   jmax = jmin + jpj - 1 
     820   !  
     821END SUBROUTINE Agrif_get_proc_info 
     822 
     823SUBROUTINE Agrif_estimate_parallel_cost(imin, imax,jmin, jmax, nbprocs, grid_cost) 
     824   !!---------------------------------------------------------------------- 
     825   !!                 *** ROUTINE Agrif_estimate_parallel_cost *** 
     826   !!---------------------------------------------------------------------- 
     827   USE par_oce 
     828   IMPLICIT NONE 
     829   ! 
     830   INTEGER,  INTENT(in)  :: imin, imax 
     831   INTEGER,  INTENT(in)  :: jmin, jmax 
     832   INTEGER,  INTENT(in)  :: nbprocs 
     833   REAL(wp), INTENT(out) :: grid_cost 
     834   !!---------------------------------------------------------------------- 
     835   ! 
     836   grid_cost = REAL(imax-imin+1,wp)*REAL(jmax-jmin+1,wp) / REAL(nbprocs,wp) 
     837   ! 
     838END SUBROUTINE Agrif_estimate_parallel_cost 
    672839 
    673840# endif 
Note: See TracChangeset for help on using the changeset viewer.