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

Ignore:
Timestamp:
2014-09-24T14:03:02+02:00 (10 years ago)
Author:
rblod
Message:

dev_r4765_CNRS_agrif: First update of AGRIF for dynamic only (_flt and _ts), see ticket #1380 and associated wiki page

File:
1 edited

Legend:

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

    r4624 r4785  
    125125   !!---------------------------------------------------------------------- 
    126126   USE agrif_util 
    127    USE par_oce       !   ONLY : jpts 
     127   USE par_oce        
    128128   USE oce 
    129129   IMPLICIT NONE 
     
    132132   ! 1. Declaration of the type of variable which have to be interpolated 
    133133   !--------------------------------------------------------------------- 
    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  
     134   CALL agrif_declare_variable((/1,2/),(/2,3/),(/'x','y'/),(/1,1/),(/nlci,nlcj/),e1u_id) 
     135   CALL agrif_declare_variable((/2,1/),(/3,2/),(/'x','y'/),(/1,1/),(/nlci,nlcj/),e2v_id) 
    137136 
    138137   ! 2. Type of interpolation 
     
    167166   USE nemogcm 
    168167   USE sol_oce 
     168   USE lib_mpp 
    169169   USE in_out_manager 
    170170   USE agrif_opa_update 
     
    174174   IMPLICIT NONE 
    175175   ! 
    176    REAL(wp), DIMENSION(:,:,:,:), ALLOCATABLE :: tabtstemp 
    177    REAL(wp), DIMENSION(:,:,:  ), ALLOCATABLE :: tabuvtemp 
    178    REAL(wp), DIMENSION(:,:    ), ALLOCATABLE :: tab2d 
    179176   LOGICAL :: check_namelist 
    180    !!---------------------------------------------------------------------- 
    181  
    182    ALLOCATE( tabtstemp(jpi, jpj, jpk, jpts) ) 
    183    ALLOCATE( tabuvtemp(jpi, jpj, jpk)       ) 
    184    ALLOCATE( tab2d(jpi, jpj)                ) 
    185  
     177   CHARACTER(len=15) :: cl_check1, cl_check2, cl_check3 
     178   !!---------------------------------------------------------------------- 
    186179 
    187180   ! 1. Declaration of the type of variable which have to be interpolated 
     
    193186   Agrif_SpecialValue=0. 
    194187   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. 
     188   CALL Agrif_Bc_variable(tsn_id,calledweight=1.,procname=interptsn) 
     189   CALL Agrif_Sponge 
     190   tabspongedone = .FALSE. 
     191   CALL Agrif_Bc_variable(tsn_sponge_id,calledweight=1.,procname=interptsn_sponge) 
     192   ! reset tsa to zero 
     193   tsa(:,:,:,:) = 0. 
     194 
     195   Agrif_UseSpecialValue = ln_spc_dyn 
     196   CALL Agrif_Bc_variable(un_interp_id,calledweight=1.,procname=interpun) 
     197   CALL Agrif_Bc_variable(vn_interp_id,calledweight=1.,procname=interpvn) 
     198   tabspongedone_u = .FALSE. 
     199   tabspongedone_v = .FALSE. 
     200   CALL Agrif_Bc_variable(un_sponge_id,calledweight=1.,procname=interpun_sponge) 
     201   tabspongedone_u = .FALSE. 
     202   tabspongedone_v = .FALSE. 
     203   CALL Agrif_Bc_variable(vn_sponge_id,calledweight=1.,procname=interpvn_sponge) 
     204 
     205#if defined key_dynspg_ts 
     206   CALL Agrif_Bc_variable(sshn_id,calledweight=1.,procname=interpsshn) 
     207   CALL Agrif_Bc_variable(unb_id,calledweight=1.,procname=interpunb) 
     208   CALL Agrif_Bc_variable(vnb_id,calledweight=1.,procname=interpvnb) 
     209   CALL Agrif_Bc_variable(ub2b_interp_id,calledweight=1.,procname=interpub2b) 
     210   CALL Agrif_Bc_variable(vb2b_interp_id,calledweight=1.,procname=interpvb2b) 
     211   ubdy_w(:) = 0.e0 ; vbdy_w(:) = 0.e0 ; hbdy_w(:) =0.e0 
     212   ubdy_e(:) = 0.e0 ; vbdy_e(:) = 0.e0 ; hbdy_e(:) =0.e0  
     213   ubdy_n(:) = 0.e0 ; vbdy_n(:) = 0.e0 ; hbdy_n(:) =0.e0  
     214   ubdy_s(:) = 0.e0 ; vbdy_s(:) = 0.e0 ; hbdy_s(:) =0.e0 
     215#endif 
     216 
     217   Agrif_UseSpecialValue = .FALSE.  
     218   ! reset velocities to zero 
     219   ua(:,:,:) = 0. 
     220   va(:,:,:) = 0. 
    207221 
    208222   ! 3. Some controls 
     
    210224   check_namelist = .true. 
    211225 
    212    IF( check_namelist ) THEN 
     226   IF( check_namelist ) THEN  
    213227 
    214228      ! 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 
     229      IF( nint(Agrif_Rhot()) * nint(rdt) .ne. Agrif_Parent(rdt) ) THEN 
     230         write(cl_check1,*)  nint(Agrif_Parent(rdt)) 
     231         write(cl_check2,*)  nint(rdt) 
     232         write(cl_check3,*)  nint(Agrif_Parent(rdt)/Agrif_Rhot()) 
     233         CALL ctl_warn( 'incompatible time step between grids',   & 
     234         &               'parent grid value : '//cl_check1    ,   &  
     235         &               'child  grid value : '//cl_check2    ,   &  
     236         &               'value on child grid will be changed to : '//cl_check3 ) 
     237         rdt=Agrif_Parent(rdt)/Agrif_Rhot() 
    221238      ENDIF 
    222239 
     
    224241      IF( Agrif_IRhot() * (Agrif_Parent(nitend)- & 
    225242           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 
     243         write(cl_check1,*)  (Agrif_Parent(nit000)-1)*Agrif_IRhot() + 1 
     244         write(cl_check2,*)   Agrif_Parent(nitend)   *Agrif_IRhot() 
     245         CALL ctl_warn( 'incompatible run length between grids'               ,   & 
     246         &              ' nit000 on fine grid will be change to : '//cl_check1,   & 
     247         &              ' nitend on fine grid will be change to : '//cl_check2    ) 
     248         nit000 = (Agrif_Parent(nit000)-1)*Agrif_IRhot() + 1 
     249         nitend =  Agrif_Parent(nitend)   *Agrif_IRhot() 
    235250      ENDIF 
    236251 
     
    254269      ENDIF 
    255270   ENDIF 
    256  
     271   !  
    257272   CALL Agrif_Update_tra(0) 
    258273   CALL Agrif_Update_dyn(0) 
    259  
     274   ! 
     275   Agrif_UseSpecialValueInUpdate = .FALSE. 
    260276   nbcline = 0 
    261    ! 
    262    DEALLOCATE(tabtstemp) 
    263    DEALLOCATE(tabuvtemp) 
    264    DEALLOCATE(tab2d) 
    265277   ! 
    266278END SUBROUTINE Agrif_InitValues_cont 
     
    281293   ! 1. Declaration of the type of variable which have to be interpolated 
    282294   !--------------------------------------------------------------------- 
    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) 
     295   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) 
     296   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) 
     297 
     298   CALL agrif_declare_variable((/1,2,0/),(/2,3,0/),(/'x','y','N'/),(/1,1,1/),(/nlci,nlcj,jpk/),un_interp_id) 
     299   CALL agrif_declare_variable((/2,1,0/),(/3,2,0/),(/'x','y','N'/),(/1,1,1/),(/nlci,nlcj,jpk/),vn_interp_id) 
     300   CALL agrif_declare_variable((/1,2,0/),(/2,3,0/),(/'x','y','N'/),(/1,1,1/),(/nlci,nlcj,jpk/),un_update_id) 
     301   CALL agrif_declare_variable((/2,1,0/),(/3,2,0/),(/'x','y','N'/),(/1,1,1/),(/nlci,nlcj,jpk/),vn_update_id) 
     302   CALL agrif_declare_variable((/1,2,0/),(/2,3,0/),(/'x','y','N'/),(/1,1,1/),(/nlci,nlcj,jpk/),un_sponge_id) 
     303   CALL agrif_declare_variable((/2,1,0/),(/3,2,0/),(/'x','y','N'/),(/1,1,1/),(/nlci,nlcj,jpk/),vn_sponge_id) 
     304 
     305   CALL agrif_declare_variable((/2,2,0/),(/3,3,0/),(/'x','y','N'/),(/1,1,1/),(/nlci,nlcj,jpk/),e3t_id) 
     306  
     307   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) 
     308 
     309   CALL agrif_declare_variable((/1,2/),(/2,3/),(/'x','y'/),(/1,1/),(/nlci,nlcj/),unb_id) 
     310   CALL agrif_declare_variable((/2,1/),(/3,2/),(/'x','y'/),(/1,1/),(/nlci,nlcj/),vnb_id) 
     311   CALL agrif_declare_variable((/1,2/),(/2,3/),(/'x','y'/),(/1,1/),(/nlci,nlcj/),ub2b_interp_id) 
     312   CALL agrif_declare_variable((/2,1/),(/3,2/),(/'x','y'/),(/1,1/),(/nlci,nlcj/),vb2b_interp_id) 
     313   CALL agrif_declare_variable((/1,2/),(/2,3/),(/'x','y'/),(/1,1/),(/nlci,nlcj/),ub2b_update_id) 
     314   CALL agrif_declare_variable((/2,1/),(/3,2/),(/'x','y'/),(/1,1/),(/nlci,nlcj/),vb2b_update_id) 
     315 
     316   CALL agrif_declare_variable((/2,2/),(/3,3/),(/'x','y'/),(/1,1/),(/nlci,nlcj/),sshn_id) 
     317 
    298318 
    299319   ! 2. Type of interpolation 
    300320   !------------------------- 
    301321   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) 
     322  
     323   CALL Agrif_Set_bcinterp(un_interp_id,interp1=Agrif_linear,interp2=AGRIF_ppm) 
     324   CALL Agrif_Set_bcinterp(vn_interp_id,interp1=AGRIF_ppm,interp2=Agrif_linear) 
     325  
     326   CALL Agrif_Set_bcinterp(tsn_sponge_id,interp=AGRIF_linear) 
    309327 
    310328   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) 
     329   CALL Agrif_Set_bcinterp(unb_id,interp1=Agrif_linear,interp2=AGRIF_ppm) 
     330   CALL Agrif_Set_bcinterp(vnb_id,interp1=AGRIF_ppm,interp2=Agrif_linear) 
     331   CALL Agrif_Set_bcinterp(ub2b_interp_id,interp1=Agrif_linear,interp2=AGRIF_ppm) 
     332   CALL Agrif_Set_bcinterp(vb2b_interp_id,interp1=AGRIF_ppm,interp2=Agrif_linear) 
     333 
     334 
     335   CALL Agrif_Set_bcinterp(un_sponge_id,interp1=Agrif_linear,interp2=AGRIF_ppm) 
     336   CALL Agrif_Set_bcinterp(vn_sponge_id,interp1=AGRIF_ppm,interp2=Agrif_linear) 
     337  
     338   CALL Agrif_Set_bcinterp(e3t_id,interp=AGRIF_constant) 
     339  
    315340 
    316341   ! 3. Location of interpolation 
    317342   !----------------------------- 
    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/)) 
     343   CALL Agrif_Set_bc(tsn_id,(/0,1/)) 
     344   CALL Agrif_Set_bc(un_interp_id,(/0,1/)) 
     345   CALL Agrif_Set_bc(vn_interp_id,(/0,1/)) 
     346 
     347   CALL Agrif_Set_bc(tsn_sponge_id,(/-3*Agrif_irhox(),0/)) 
     348   CALL Agrif_Set_bc(un_sponge_id,(/-2*Agrif_irhox()-1,0/)) 
     349   CALL Agrif_Set_bc(vn_sponge_id,(/-2*Agrif_irhox()-1,0/)) 
     350 
     351   CALL Agrif_Set_bc(sshn_id,(/0,0/)) 
     352   CALL Agrif_Set_bc(unb_id ,(/0,0/)) 
     353   CALL Agrif_Set_bc(vnb_id ,(/0,0/)) 
     354   Call Agrif_Set_bc(ub2b_interp_id,(/0,0/)) 
     355   Call Agrif_Set_bc(vb2b_interp_id,(/0,0/)) 
     356 
     357   CALL Agrif_Set_bc(e3t_id,(/-3*Agrif_irhox(),0/))   ! if west and rhox=3: column 2 to 11 
    332358 
    333359   ! 5. Update type 
    334360   !---------------  
    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  
     361   CALL Agrif_Set_Updatetype(tsn_id, update = AGRIF_Update_Average) 
     362 
     363   CALL Agrif_Set_Updatetype(scales_t_id, update = AGRIF_Update_Average) 
     364   CALL Agrif_Set_Updatetype(un_update_id,update1 = Agrif_Update_Copy, update2 = Agrif_Update_Average) 
     365   CALL Agrif_Set_Updatetype(vn_update_id,update1 = Agrif_Update_Average, update2 = Agrif_Update_Copy) 
     366 
     367   CALL Agrif_Set_Updatetype(sshn_id, update = AGRIF_Update_Average) 
     368 
     369   Call Agrif_Set_Updatetype(ub2b_update_id,update1 = Agrif_Update_Copy, update2 = Agrif_Update_Average) 
     370   Call Agrif_Set_Updatetype(vb2b_update_id,update1 = Agrif_Update_Average, update2 = Agrif_Update_Copy) 
     371 
     372   ! 
    347373END SUBROUTINE agrif_declare_var 
    348374# endif 
     
    462488   USE nemogcm 
    463489   USE par_trc 
     490   USE lib_mpp 
    464491   USE trc 
    465492   USE in_out_manager 
     
    471498   ! 
    472499   REAL(wp), DIMENSION(:,:,:,:), ALLOCATABLE :: tabtrtemp 
     500   CHARACTER(len=10) :: cl_check1, cl_check2, cl_check3 
    473501   LOGICAL :: check_namelist 
    474502   !!---------------------------------------------------------------------- 
     
    494522 
    495523   IF( check_namelist ) THEN 
    496 #  if defined offline      
     524# if defined key_offline 
    497525      ! Check time steps 
    498526      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 
     527         write(cl_check1,*)  Agrif_Parent(rdt) 
     528         write(cl_check2,*)  rdt 
     529         write(cl_check3,*)  rdt*Agrif_Rhot() 
     530         CALL ctl_warn( 'incompatible time step between grids',   & 
     531         &               'parent grid value : '//cl_check1    ,   &  
     532         &               'child  grid value : '//cl_check2    ,   &  
     533         &               'value on child grid will be changed to  & 
     534         &               :'//cl_check3  ) 
     535         rdt=rdt*Agrif_Rhot() 
    504536      ENDIF 
    505537 
     
    515547              Agrif_IRhot() * (Agrif_Parent(nitend)- & 
    516548              Agrif_Parent(nit000)+1) 
    517          STOP 
     549         CALL ctl_warn( 'incompatible run length between grids',   & 
     550         &              'value on child grid will be change to '  & 
     551         &             ) 
     552 
     553 
    518554      ENDIF 
    519555 
     
    664700   SELECT CASE( i ) 
    665701   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 
     702   CASE(2)   ;   indglob = indloc + njmppt(nprocloc+1) - 1 
     703   CASE DEFAULT 
     704                 indglob = indloc 
    669705   END SELECT 
    670706   ! 
    671707END SUBROUTINE Agrif_InvLoc 
     708 
     709SUBROUTINE Agrif_get_proc_info( imin, imax, jmin, jmax ) 
     710   !!---------------------------------------------------------------------- 
     711   !!                 *** ROUTINE Agrif_get_proc_info *** 
     712   !!---------------------------------------------------------------------- 
     713   USE par_oce 
     714   IMPLICIT NONE 
     715   ! 
     716   INTEGER, INTENT(out) :: imin, imax 
     717   INTEGER, INTENT(out) :: jmin, jmax 
     718   !!---------------------------------------------------------------------- 
     719   ! 
     720   imin = nimppt(Agrif_Procrank+1)  ! ????? 
     721   jmin = njmppt(Agrif_Procrank+1)  ! ????? 
     722   imax = imin + jpi - 1 
     723   jmax = jmin + jpj - 1 
     724   !  
     725END SUBROUTINE Agrif_get_proc_info 
     726 
     727SUBROUTINE Agrif_estimate_parallel_cost(imin, imax,jmin, jmax, nbprocs, grid_cost) 
     728   !!---------------------------------------------------------------------- 
     729   !!                 *** ROUTINE Agrif_estimate_parallel_cost *** 
     730   !!---------------------------------------------------------------------- 
     731   USE par_oce 
     732   IMPLICIT NONE 
     733   ! 
     734   INTEGER,  INTENT(in)  :: imin, imax 
     735   INTEGER,  INTENT(in)  :: jmin, jmax 
     736   INTEGER,  INTENT(in)  :: nbprocs 
     737   REAL(wp), INTENT(out) :: grid_cost 
     738   !!---------------------------------------------------------------------- 
     739   ! 
     740   grid_cost = REAL(imax-imin+1,wp)*REAL(jmax-jmin+1,wp) / REAL(nbprocs,wp) 
     741   ! 
     742END SUBROUTINE Agrif_estimate_parallel_cost 
     743 
    672744 
    673745# endif 
Note: See TracChangeset for help on using the changeset viewer.