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.
agrif_user.F90 in branches/2011/dev_r2802_LOCEAN10_agrif_lim/NEMOGCM/NEMO/NST_SRC – NEMO

source: branches/2011/dev_r2802_LOCEAN10_agrif_lim/NEMOGCM/NEMO/NST_SRC/agrif_user.F90 @ 2804

Last change on this file since 2804 was 2804, checked in by rblod, 13 years ago

dev_r2802_LOCEAN10_agrif_lim: first implementation see ticket #848

  • Property svn:keywords set to Id
File size: 24.8 KB
RevLine 
[393]1#if defined key_agrif
[1156]2   !!----------------------------------------------------------------------
[2528]3   !! NEMO/NST 3.3 , NEMO Consortium (2010)
[1156]4   !! $Id$
[2528]5   !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)
[1156]6   !!----------------------------------------------------------------------
[2715]7   SUBROUTINE agrif_before_regridding
8   END SUBROUTINE
[1156]9
[636]10   SUBROUTINE Agrif_InitWorkspace
[1605]11      !!----------------------------------------------------------------------
12      !!                 *** ROUTINE Agrif_InitWorkspace ***
13      !!----------------------------------------------------------------------
[636]14      USE par_oce
15      USE dom_oce
[390]16      USE Agrif_Util
[2715]17      USE nemogcm
18      !
[390]19      IMPLICIT NONE
[1605]20      !!----------------------------------------------------------------------
[2715]21      !
[636]22      IF( .NOT. Agrif_Root() ) THEN
[2715]23         jpni = Agrif_Parent(jpni)
24         jpnj = Agrif_Parent(jpnj)
25         jpnij = Agrif_Parent(jpnij)
[1605]26         jpiglo  = nbcellsx + 2 + 2*nbghostcells
27         jpjglo  = nbcellsy + 2 + 2*nbghostcells
28         jpi     = ( jpiglo-2*jpreci + (jpni-1+0) ) / jpni + 2*jpreci
29         jpj     = ( jpjglo-2*jprecj + (jpnj-1+0) ) / jpnj + 2*jprecj
[2715]30         jpk     = jpkdta
[1605]31         jpim1   = jpi-1
32         jpjm1   = jpj-1
33         jpkm1   = jpk-1                                       
34         jpij    = jpi*jpj
35         jpidta  = jpiglo
36         jpjdta  = jpjglo
[390]37         jpizoom = 1
38         jpjzoom = 1
[1605]39         nperio  = 0
40         jperio  = 0
[636]41      ENDIF
[1605]42      !
[636]43   END SUBROUTINE Agrif_InitWorkspace
[390]44
[1300]45
[636]46   SUBROUTINE Agrif_InitValues
[1605]47      !!----------------------------------------------------------------------
48      !!                 *** ROUTINE Agrif_InitValues ***
[636]49      !!
[1605]50      !! ** Purpose :: Declaration of variables to be interpolated
51      !!----------------------------------------------------------------------
[390]52      USE Agrif_Util
[636]53      USE oce 
[390]54      USE dom_oce
[2528]55      USE nemogcm
[636]56#if defined key_tradmp   ||   defined key_esopa
[390]57      USE tradmp
58#endif
[1876]59#if defined key_obc   ||   defined key_esopa
60      USE obc_par
61#endif
[636]62      IMPLICIT NONE
[1605]63      !!----------------------------------------------------------------------
[636]64
65      ! 0. Initializations
66      !-------------------
[390]67#if defined key_orca_r025 || defined key_orca_r05 || defined key_orca_r2 || defined key_orca_r4
[636]68      jp_cfg = -1    ! set special value for jp_cfg on fine grids
[390]69      cp_cfg = "default"
70#endif
71
[636]72      ! Specific fine grid Initializations
[390]73#if defined key_tradmp || defined key_esopa
[636]74      ! no tracer damping on fine grids
[390]75      lk_tradmp = .FALSE.
76#endif
[1876]77#if defined key_obc || defined key_esopa
78      ! no open boundary on fine grids
79      lk_obc = .FALSE.
80#endif
[2031]81
[2715]82      CALL nemo_init  ! Initializations of each fine grid
83      CALL agrif_nemo_init
84# if ! defined key_offline
85      CALL Agrif_InitValues_cont
[2804]86#  if defined key_lim2
87!      CALL Agrif_InitValues_cont_lim2
88#  endif       
89# endif
[2715]90# if defined key_top
91      CALL Agrif_InitValues_cont_top
92# endif     
93   END SUBROUTINE Agrif_initvalues
[2031]94
[2715]95# if ! defined key_offline
[390]96
[2715]97   SUBROUTINE Agrif_InitValues_cont
98      !!----------------------------------------------------------------------
99      !!                 *** ROUTINE Agrif_InitValues_cont ***
100      !!
101      !! ** Purpose ::   Declaration of variables to be interpolated
102      !!----------------------------------------------------------------------
103      USE Agrif_Util
104      USE oce 
105      USE dom_oce
106      USE nemogcm
107      USE sol_oce
108      USE in_out_manager
109      USE agrif_opa_update
110      USE agrif_opa_interp
111      USE agrif_opa_sponge
112      !
113      IMPLICIT NONE
114      !
115      REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: tabtemp
116      LOGICAL :: check_namelist
117      !!----------------------------------------------------------------------
[390]118
[2715]119      ALLOCATE( tabtemp(jpi,jpj,jpk) )
[636]120     
[2715]121     
122      ! 1. Declaration of the type of variable which have to be interpolated
123      !---------------------------------------------------------------------
124      CALL agrif_declare_var
[636]125
[2715]126      ! 2. First interpolations of potentially non zero fields
[636]127      !-------------------------------------------------------
128      Agrif_SpecialValue=0.
129      Agrif_UseSpecialValue = .TRUE.
[2715]130      Call Agrif_Bc_variable(tabtemp,tn_id,calledweight=1.,procname=interptn)
131   
132      Call Agrif_Bc_variable(tabtemp,sn_id,calledweight=1.,procname=interpsn)
133      Call Agrif_Bc_variable(tabtemp,un_id,calledweight=1.,procname=interpu)
134      Call Agrif_Bc_variable(tabtemp,vn_id,calledweight=1.,procname=interpv)
[390]135
[2715]136      Call Agrif_Bc_variable(tabtemp,ta_id,calledweight=1.,procname=interptn)
137      Call Agrif_Bc_variable(tabtemp,sa_id,calledweight=1.,procname=interpsn)
[390]138
[2715]139      Call Agrif_Bc_variable(tabtemp,ua_id,calledweight=1.,procname=interpun)
140      Call Agrif_Bc_variable(tabtemp,va_id,calledweight=1.,procname=interpvn)
[636]141      Agrif_UseSpecialValue = .FALSE.
[628]142
[2715]143      ! 3. Some controls
[636]144      !-----------------
145      check_namelist = .true.
146           
147      IF( check_namelist ) THEN
148     
149         ! Check time steps           
[2715]150         IF( NINT(Agrif_Rhot()) * nint(rdt) /= Agrif_Parent(rdt) ) THEN
[636]151            WRITE(*,*) 'incompatible time step between grids'
152            WRITE(*,*) 'parent grid value : ',Agrif_Parent(rdt)
153            WRITE(*,*) 'child  grid value : ',nint(rdt)
154            WRITE(*,*) 'value on parent grid should be : ',rdt*Agrif_Rhot()
155            STOP
156         ENDIF
157         
158         ! Check run length
[2727]159         IF( Agrif_IRhot() * (Agrif_Parent(nitend)- &
160            Agrif_Parent(nit000)+1) .ne. (nitend-nit000+1) ) THEN
[636]161            WRITE(*,*) 'incompatible run length between grids'
[2727]162            WRITE(*,*) 'parent grid value : ',(Agrif_Parent(nitend)- &
163               Agrif_Parent(nit000)+1),' time step'
164            WRITE(*,*) 'child  grid value : ', &
165               (nitend-nit000+1),' time step'
166            WRITE(*,*) 'value on child grid should be : ', &
167               Agrif_IRhot() * (Agrif_Parent(nitend)- &
168               Agrif_Parent(nit000)+1)
[636]169            STOP
170         ENDIF
171         
172         ! Check coordinates
173         IF( ln_zps ) THEN
174            ! check parameters for partial steps
175            IF( Agrif_Parent(e3zps_min) .ne. e3zps_min ) THEN
176               WRITE(*,*) 'incompatible e3zps_min between grids'
177               WRITE(*,*) 'parent grid :',Agrif_Parent(e3zps_min)
178               WRITE(*,*) 'child grid  :',e3zps_min
179               WRITE(*,*) 'those values should be identical'
180               STOP
181            ENDIF         
[2715]182            IF( Agrif_Parent(e3zps_rat) /= e3zps_rat ) THEN
[636]183               WRITE(*,*) 'incompatible e3zps_rat between grids'
184               WRITE(*,*) 'parent grid :',Agrif_Parent(e3zps_rat)
185               WRITE(*,*) 'child grid  :',e3zps_rat
186               WRITE(*,*) 'those values should be identical'                 
187               STOP
188            ENDIF
189         ENDIF
[390]190      ENDIF
[2715]191       
[636]192      CALL Agrif_Update_tra(0)
193      CALL Agrif_Update_dyn(0)
194
[390]195      nbcline = 0
[1605]196      !
[2715]197      DEALLOCATE(tabtemp)
198      !
199   END SUBROUTINE Agrif_InitValues_cont
[1300]200
[1605]201
[2715]202   SUBROUTINE agrif_declare_var
[1605]203      !!----------------------------------------------------------------------
[2715]204      !!                 *** ROUTINE agrif_declarE_var ***
[1300]205      !!
[1605]206      !! ** Purpose :: Declaration of variables to be interpolated
207      !!----------------------------------------------------------------------
[2715]208      USE agrif_util
209      USE oce
210      IMPLICIT NONE
211      !!----------------------------------------------------------------------
212   
213      ! 1. Declaration of the type of variable which have to be interpolated
214      !---------------------------------------------------------------------
215      CALL agrif_declare_variable((/2,2,0/),(/3,3,0/),(/'x','y','N'/),(/1,1,1/),(/jpi,jpj,jpk/),tn_id)
216      CALL agrif_declare_variable((/2,2,0/),(/3,3,0/),(/'x','y','N'/),(/1,1,1/),(/jpi,jpj,jpk/),sn_id)
217      CALL agrif_declare_variable((/2,2,0/),(/3,3,0/),(/'x','y','N'/),(/1,1,1/),(/jpi,jpj,jpk/),tb_id)
218      CALL agrif_declare_variable((/2,2,0/),(/3,3,0/),(/'x','y','N'/),(/1,1,1/),(/jpi,jpj,jpk/),sb_id)
219      CALL agrif_declare_variable((/2,2,0/),(/3,3,0/),(/'x','y','N'/),(/1,1,1/),(/jpi,jpj,jpk/),ta_id)
220      CALL agrif_declare_variable((/2,2,0/),(/3,3,0/),(/'x','y','N'/),(/1,1,1/),(/jpi,jpj,jpk/),sa_id)
221         
222      CALL agrif_declare_variable((/1,2,0/),(/2,3,0/),(/'x','y','N'/),(/1,1,1/),(/jpi,jpj,jpk/),un_id)
223      CALL agrif_declare_variable((/2,1,0/),(/3,2,0/),(/'x','y','N'/),(/1,1,1/),(/jpi,jpj,jpk/),vn_id)
224      CALL agrif_declare_variable((/1,2,0/),(/2,3,0/),(/'x','y','N'/),(/1,1,1/),(/jpi,jpj,jpk/),ua_id)
225      CALL agrif_declare_variable((/2,1,0/),(/3,2,0/),(/'x','y','N'/),(/1,1,1/),(/jpi,jpj,jpk/),va_id)
226   
227      CALL agrif_declare_variable((/1,2/),(/2,3/),(/'x','y'/),(/1,1/),(/jpi,jpj/),e1u_id)
228      CALL agrif_declare_variable((/2,1/),(/3,2/),(/'x','y'/),(/1,1/),(/jpi,jpj/),e2v_id)
229
230      CALL agrif_declare_variable((/2,2/),(/3,3/),(/'x','y'/),(/1,1/),(/jpi,jpj/),sshn_id)
231      CALL agrif_declare_variable((/2,2/),(/3,3/),(/'x','y'/),(/1,1/),(/jpi,jpj/),gcb_id)
232       
233      ! 2. Type of interpolation
234      !-------------------------
235      CALL Agrif_Set_bcinterp(tn_id,interp=AGRIF_linear)
236      CALL Agrif_Set_bcinterp(sn_id,interp=AGRIF_linear)
237      CALL Agrif_Set_bcinterp(ta_id,interp=AGRIF_linear)
238      CALL Agrif_Set_bcinterp(sa_id,interp=AGRIF_linear)
239   
240      Call Agrif_Set_bcinterp(un_id,interp1=Agrif_linear,interp2=AGRIF_ppm)
241      Call Agrif_Set_bcinterp(vn_id,interp1=AGRIF_ppm,interp2=Agrif_linear)
242
243      Call Agrif_Set_bcinterp(ua_id,interp1=Agrif_linear,interp2=AGRIF_ppm)
244      Call Agrif_Set_bcinterp(va_id,interp1=AGRIF_ppm,interp2=Agrif_linear)
245
246      Call Agrif_Set_bcinterp(e1u_id,interp1=Agrif_linear,interp2=AGRIF_ppm)
247      Call Agrif_Set_bcinterp(e2v_id,interp1=AGRIF_ppm,interp2=Agrif_linear)
248
249      ! 3. Location of interpolation
250      !-----------------------------
251      Call Agrif_Set_bc(un_id,(/0,1/))
252      Call Agrif_Set_bc(vn_id,(/0,1/))
253
254      Call Agrif_Set_bc(e1u_id,(/0,0/))
255      Call Agrif_Set_bc(e2v_id,(/0,0/))
256
257      Call Agrif_Set_bc(tn_id,(/0,1/))
258      Call Agrif_Set_bc(sn_id,(/0,1/))
259
260      Call Agrif_Set_bc(ta_id,(/-3*Agrif_irhox(),0/))
261      Call Agrif_Set_bc(sa_id,(/-3*Agrif_irhox(),0/))
262
263      Call Agrif_Set_bc(ua_id,(/-2*Agrif_irhox(),0/))
264      Call Agrif_Set_bc(va_id,(/-2*Agrif_irhox(),0/))
265
266      ! 5. Update type
267      !---------------
268      Call Agrif_Set_Updatetype(tn_id, update = AGRIF_Update_Average)
269      Call Agrif_Set_Updatetype(sn_id, update = AGRIF_Update_Average)
270
271      Call Agrif_Set_Updatetype(tb_id, update = AGRIF_Update_Average)
272      Call Agrif_Set_Updatetype(sb_id, update = AGRIF_Update_Average)
273
274      Call Agrif_Set_Updatetype(sshn_id, update = AGRIF_Update_Average)
275      Call Agrif_Set_Updatetype(gcb_id,update = AGRIF_Update_Average)
276
277      Call Agrif_Set_Updatetype(un_id,update1 = Agrif_Update_Copy, update2 = Agrif_Update_Average)
278      Call Agrif_Set_Updatetype(vn_id,update1 = Agrif_Update_Average, update2 = Agrif_Update_Copy)
279
280      Call Agrif_Set_Updatetype(e1u_id,update1 = Agrif_Update_Copy, update2=Agrif_Update_Average)
281      Call Agrif_Set_Updatetype(e2v_id,update1 = Agrif_Update_Average, update2=Agrif_Update_Copy)
282
283   END SUBROUTINE agrif_declare_var
[2804]284
285
286#  if defined key_lim2
287   SUBROUTINE Agrif_InitValues_cont_lim2
288      !!----------------------------------------------------------------------
289      !!                 *** ROUTINE Agrif_InitValues_cont_lim2 ***
290      !!
291      !! ** Purpose :: Initialisation of variables to be interpolated for LIM2
292      !!----------------------------------------------------------------------
293      USE Agrif_Util
294      USE ice_2
295      USE in_out_manager
296      USE agrif_lim2_update
297      USE agrif_lim2_interp
298      USE lib_mpp 
299      !
300      IMPLICIT NONE
301      !
302      REAL(wp), DIMENSION(:,:)  , ALLOCATABLE :: zvel
303      REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: zadv, zsadv
304      !!----------------------------------------------------------------------
305
306      ALLOCATE( zvel(jpi,jpj), zadv(jpi,jpj,7), zsadv(jpi,jpj,42) )
307     
308      ! 1. Declaration of the type of variable which have to be interpolated
309      !---------------------------------------------------------------------
310      CALL agrif_declare_var_lim2
311
312      ! 2. First interpolations of potentially non zero fields
313      !-------------------------------------------------------
314      Agrif_SpecialValue=-9999.
315      Agrif_UseSpecialValue = .TRUE.
316      Call Agrif_Bc_variable(zadv ,adv_ice_id ,calledweight=1.,procname=interp_adv_ice )   
317      Call Agrif_Bc_variable(zsadv,sadv_ice_id,calledweight=1.,procname=interp_sadv_ice)   
318      Call Agrif_Bc_variable(zvel ,u_ice_id   ,calledweight=1.,procname=interp_u_ice   )
319      Call Agrif_Bc_variable(zvel ,v_ice_id   ,calledweight=1.,procname=interp_v_ice   )
320      Agrif_SpecialValue=0.
321      Agrif_UseSpecialValue = .FALSE.
322
323      ! 3. Some controls
324      !-----------------
325       
326#   if ! defined key_lim2_vp
327      childfreq = 1.
328      CALL agrif_dyn_lim(0 ,1 , 'V')
329      CALL agrif_dyn_lim(0 ,1 , 'U')
330      childfreq = 0.
331#   endif
332!RB mandatory but why ???
333      IF( nbclineupdate /= nn_fsbc .AND. nn_ice == 2 )THEN
334         CALL ctl_warn ('With ice model on child grid, nbclineupdate is set to nn_fsbc')
335         nbclineupdate = nn_fsbc
336       ENDIF
337      CALL Agrif_Update_lim2(0)
338      !
339      DEALLOCATE( zvel, zadv, zsadv )
340      !
341   END SUBROUTINE Agrif_InitValues_cont_lim2
342
343
344   SUBROUTINE agrif_declare_var_lim2
345      !!----------------------------------------------------------------------
346      !!                 *** ROUTINE agrif_declare_var_lim2 ***
347      !!
348      !! ** Purpose :: Declaration of variables to be interpolated for LIM2
349      !!----------------------------------------------------------------------
350      USE agrif_util
351      USE ice_2
352
353      IMPLICIT NONE
354      !!----------------------------------------------------------------------
355   
356      ! 1. Declaration of the type of variable which have to be interpolated
357      !---------------------------------------------------------------------
358      CALL agrif_declare_variable((/2,2,0/),(/3,3,0/),(/'x','y','N'/),(/1,1,1/),(/jpi,jpj, 7/),adv_ice_id )         
359      CALL agrif_declare_variable((/2,2,0/),(/3,3,0/),(/'x','y','N'/),(/1,1,1/),(/jpi,jpj,42/),sadv_ice_id)         
360#   if defined key_lim2_vp
361      CALL agrif_declare_variable((/1,1/),(/3,3/),(/'x','y'/),(/1,1/),(/jpi,jpj/),u_ice_id)
362      CALL agrif_declare_variable((/1,1/),(/3,3/),(/'x','y'/),(/1,1/),(/jpi,jpj/),v_ice_id)
363#   else
364      CALL agrif_declare_variable((/1,2/),(/2,3/),(/'x','y'/),(/1,1/),(/jpi,jpj/),u_ice_id)
365      CALL agrif_declare_variable((/2,1/),(/3,2/),(/'x','y'/),(/1,1/),(/jpi,jpj/),v_ice_id)
366#   endif
367         
368      ! 2. Type of interpolation
369      !-------------------------
370      CALL Agrif_Set_bcinterp(adv_ice_id ,interp=AGRIF_linear)   
371      CALL Agrif_Set_bcinterp(sadv_ice_id,interp=AGRIF_linear)   
372      Call Agrif_Set_bcinterp(u_ice_id,interp1=Agrif_linear,interp2=AGRIF_ppm)
373      Call Agrif_Set_bcinterp(v_ice_id,interp1=AGRIF_ppm,interp2=Agrif_linear)
374
375      ! 3. Location of interpolation
376      !-----------------------------
377      Call Agrif_Set_bc(adv_ice_id ,(/0,1/))
378      Call Agrif_Set_bc(sadv_ice_id,(/0,1/))
379      Call Agrif_Set_bc(u_ice_id,(/0,1/))
380      Call Agrif_Set_bc(v_ice_id,(/0,1/))
381
382      ! 5. Update type
383      !---------------
384      Call Agrif_Set_Updatetype(adv_ice_id , update = AGRIF_Update_Average)
385      Call Agrif_Set_Updatetype(sadv_ice_id, update = AGRIF_Update_Average)
386      Call Agrif_Set_Updatetype(u_ice_id,update1 = Agrif_Update_Copy, update2 = Agrif_Update_Average)
387      Call Agrif_Set_Updatetype(v_ice_id,update1 = Agrif_Update_Average, update2 = Agrif_Update_Copy)
388
389   END SUBROUTINE agrif_declare_var_lim2
390#  endif
[2715]391# endif
392   
393# if defined key_top
394   SUBROUTINE Agrif_InitValues_cont_top
395      !!----------------------------------------------------------------------
396      !!                 *** ROUTINE Agrif_InitValues_cont_top ***
397      !!
398      !! ** Purpose :: Declaration of variables to be interpolated
399      !!----------------------------------------------------------------------
[1300]400      USE Agrif_Util
401      USE oce 
402      USE dom_oce
[2528]403      USE nemogcm
[1300]404      USE trc
405      USE in_out_manager
406      USE agrif_top_update
407      USE agrif_top_interp
408      USE agrif_top_sponge
[2715]409      !
[1300]410      IMPLICIT NONE
[2715]411      !
412      REAL(wp), DIMENSION(:,:,:,:), ALLOCATABLE :: tabtrtemp
413      LOGICAL :: check_namelist
[1605]414      !!----------------------------------------------------------------------
[1300]415
[2715]416      ALLOCATE( tabtrtemp(jpi,jpj,jpk,jptra) )
417     
418     
[1300]419      ! 1. Declaration of the type of variable which have to be interpolated
420      !---------------------------------------------------------------------
[2715]421      CALL agrif_declare_var_top
[1300]422
[2715]423      ! 2. First interpolations of potentially non zero fields
[1300]424      !-------------------------------------------------------
425      Agrif_SpecialValue=0.
426      Agrif_UseSpecialValue = .TRUE.
[2715]427      Call Agrif_Bc_variable(tabtrtemp,trn_id,calledweight=1.)
428      Call Agrif_Bc_variable(tabtrtemp,tra_id,calledweight=1.,procname=interptrn)
[1300]429      Agrif_UseSpecialValue = .FALSE.
430
[2715]431      ! 3. Some controls
[1300]432      !-----------------
433      check_namelist = .true.
434           
435      IF( check_namelist ) THEN
[2715]436#  if defined offline     
[2727]437         ! Check time steps
[1300]438         IF( nint(Agrif_Rhot()) * nint(rdt) .ne. Agrif_Parent(rdt) ) THEN
439            WRITE(*,*) 'incompatible time step between grids'
440            WRITE(*,*) 'parent grid value : ',Agrif_Parent(rdt)
441            WRITE(*,*) 'child  grid value : ',nint(rdt)
442            WRITE(*,*) 'value on parent grid should be : ',rdt*Agrif_Rhot()
443            STOP
444         ENDIF
[2727]445
[1300]446         ! Check run length
[2727]447         IF( Agrif_IRhot() * (Agrif_Parent(nitend)- &
448            Agrif_Parent(nit000)+1) .ne. (nitend-nit000+1) ) THEN
[1300]449            WRITE(*,*) 'incompatible run length between grids'
[2727]450            WRITE(*,*) 'parent grid value : ',(Agrif_Parent(nitend)- &
451               Agrif_Parent(nit000)+1),' time step'
452            WRITE(*,*) 'child  grid value : ', &
453               (nitend-nit000+1),' time step'
454            WRITE(*,*) 'value on child grid should be : ', &
455               Agrif_IRhot() * (Agrif_Parent(nitend)- &
456               Agrif_Parent(nit000)+1)
[1300]457            STOP
458         ENDIF
459         
460         ! Check coordinates
461         IF( ln_zps ) THEN
462            ! check parameters for partial steps
463            IF( Agrif_Parent(e3zps_min) .ne. e3zps_min ) THEN
464               WRITE(*,*) 'incompatible e3zps_min between grids'
465               WRITE(*,*) 'parent grid :',Agrif_Parent(e3zps_min)
466               WRITE(*,*) 'child grid  :',e3zps_min
467               WRITE(*,*) 'those values should be identical'
468               STOP
469            ENDIF         
470            IF( Agrif_Parent(e3zps_rat) .ne. e3zps_rat ) THEN
471               WRITE(*,*) 'incompatible e3zps_rat between grids'
472               WRITE(*,*) 'parent grid :',Agrif_Parent(e3zps_rat)
473               WRITE(*,*) 'child grid  :',e3zps_rat
474               WRITE(*,*) 'those values should be identical'                 
475               STOP
476            ENDIF
477         ENDIF
[2715]478#  endif         
[1300]479        ! Check passive tracer cell
[2528]480        IF( nn_dttrc .ne. 1 ) THEN
481           WRITE(*,*) 'nn_dttrc should be equal to 1'
[1300]482        ENDIF
483      ENDIF
[2715]484       
[1300]485      CALL Agrif_Update_trc(0)
486      nbcline_trc = 0
[1605]487      !
[2715]488      DEALLOCATE(tabtrtemp)
489      !
490   END SUBROUTINE Agrif_InitValues_cont_top
[1300]491
[2715]492
493   SUBROUTINE agrif_declare_var_top
494      !!----------------------------------------------------------------------
495      !!                 *** ROUTINE agrif_declare_var_top ***
496      !!
497      !! ** Purpose :: Declaration of TOP variables to be interpolated
498      !!----------------------------------------------------------------------
499      USE agrif_util
500      USE dom_oce
501      USE trc
502     
503      IMPLICIT NONE
[636]504   
[2715]505      ! 1. Declaration of the type of variable which have to be interpolated
506      !---------------------------------------------------------------------
507      CALL agrif_declare_variable((/2,2,0,0/),(/3,3,0,0/),(/'x','y','N','N'/),  &
508      &                           (/1,1,1,1/),(/jpi,jpj,jpk,jptra/),trn_id)
509      CALL agrif_declare_variable((/2,2,0,0/),(/3,3,0,0/),(/'x','y','N','N'/),  &
510      &                           (/1,1,1,1/),(/jpi,jpj,jpk,jptra/),trb_id)
511      CALL agrif_declare_variable((/2,2,0,0/),(/3,3,0,0,jptra/),(/'x','y','N','N'/),  &
512      &                           (/1,1,1,1/),(/jpi,jpj,jpk/),tra_id)
513           
514#  if defined key_offline
515      CALL agrif_declare_variable((/1,2/),(/2,3/),(/'x','y'/),(/1,1/),(/jpi,jpj/),e1u_id)
516      CALL agrif_declare_variable((/2,1/),(/3,2/),(/'x','y'/),(/1,1/),(/jpi,jpj/),e2v_id)
517#  endif
518       
519      ! 2. Type of interpolation
520      !-------------------------
521      CALL Agrif_Set_bcinterp(trn_id,interp=AGRIF_linear)
522      CALL Agrif_Set_bcinterp(tra_id,interp=AGRIF_linear)
523   
524#  if defined key_offline
525      Call Agrif_Set_bcinterp(e1u_id,interp1=Agrif_linear,interp2=AGRIF_ppm)
526      Call Agrif_Set_bcinterp(e2v_id,interp1=AGRIF_ppm,interp2=Agrif_linear)
527#  endif
528
529      ! 3. Location of interpolation
530      !-----------------------------
531#  if defined key_offline
532      Call Agrif_Set_bc(e1u_id,(/0,0/))
533      Call Agrif_Set_bc(e2v_id,(/0,0/))
534#  endif
535      Call Agrif_Set_bc(trn_id,(/0,1/))
536      Call Agrif_Set_bc(tra_id,(/-3*Agrif_irhox(),0/))
537
538      ! 5. Update type
539      !---------------
540      Call Agrif_Set_Updatetype(trn_id, update = AGRIF_Update_Average)
541      Call Agrif_Set_Updatetype(trb_id, update = AGRIF_Update_Average)
542
543#  if defined key_offline
544      Call Agrif_Set_Updatetype(e1u_id,update1 = Agrif_Update_Copy, update2=Agrif_Update_Average)
545      Call Agrif_Set_Updatetype(e2v_id,update1 = Agrif_Update_Average, update2=Agrif_Update_Copy)
546#  endif
547
548   END SUBROUTINE agrif_declare_var_top
549# endif
550   
551   SUBROUTINE Agrif_detect( kg, ksizex )
[1605]552      !!----------------------------------------------------------------------
[636]553      !!   *** ROUTINE Agrif_detect ***
[1605]554      !!----------------------------------------------------------------------
[636]555      USE Agrif_Types
[2715]556      !
557      INTEGER, DIMENSION(2) :: ksizex
558      INTEGER, DIMENSION(ksizex(1),ksizex(2)) :: kg 
[1605]559      !!----------------------------------------------------------------------
560      !
561      RETURN
562      !
563   END SUBROUTINE Agrif_detect
[636]564
[390]565
[2528]566   SUBROUTINE agrif_nemo_init
[1605]567      !!----------------------------------------------------------------------
568      !!                     *** ROUTINE agrif_init ***
569      !!----------------------------------------------------------------------
[782]570      USE agrif_oce 
[2804]571      USE agrif_ice 
[782]572      USE in_out_manager
[2715]573      USE lib_mpp
[782]574      IMPLICIT NONE
[2715]575      !
[1605]576      NAMELIST/namagrif/ nn_cln_update, rn_sponge_tra, rn_sponge_dyn, ln_spc_dyn
577      !!----------------------------------------------------------------------
[2528]578      !
[1605]579      REWIND( numnam )                ! Read namagrif namelist
580      READ  ( numnam, namagrif )
581      !
582      IF(lwp) THEN                    ! control print
[782]583         WRITE(numout,*)
[2528]584         WRITE(numout,*) 'agrif_nemo_init : AGRIF parameters'
585         WRITE(numout,*) '~~~~~~~~~~~~~~~'
[1605]586         WRITE(numout,*) '   Namelist namagrif : set AGRIF parameters'
587         WRITE(numout,*) '      baroclinic update frequency       nn_cln_update = ', nn_cln_update
588         WRITE(numout,*) '      sponge coefficient for tracers    rn_sponge_tra = ', rn_sponge_tra, ' s'
589         WRITE(numout,*) '      sponge coefficient for dynamics   rn_sponge_tra = ', rn_sponge_dyn, ' s'
590         WRITE(numout,*) '      use special values for dynamics   ln_spc_dyn    = ', ln_spc_dyn
[782]591         WRITE(numout,*) 
592      ENDIF
[1605]593      !
594      ! convert DOCTOR namelist name into OLD names
595      nbclineupdate = nn_cln_update
596      visc_tra      = rn_sponge_tra
597      visc_dyn      = rn_sponge_dyn
598      !
[2804]599      IF( agrif_oce_alloc()  > 0 )   CALL ctl_stop('agrif agrif_oce_alloc: allocation of arrays failed')
600# if defined key_lim2
601      IF( agrif_ice_alloc()  > 0 )   CALL ctl_stop('agrif agrif_ice_alloc: allocation of arrays failed')
602# endif
[2715]603      !
[2528]604    END SUBROUTINE agrif_nemo_init
[782]605
[1605]606# if defined key_mpp_mpi
607
608   SUBROUTINE Agrif_InvLoc( indloc, nprocloc, i, indglob )
609      !!----------------------------------------------------------------------
610      !!                     *** ROUTINE Agrif_detect ***
611      !!----------------------------------------------------------------------
[390]612      USE dom_oce
[636]613      IMPLICIT NONE
[2715]614      !
615      INTEGER :: indglob, indloc, nprocloc, i
[1605]616      !!----------------------------------------------------------------------
617      !
[2528]618      SELECT CASE( i )
619      CASE(1)   ;   indglob = indloc + nimppt(nprocloc+1) - 1
620      CASE(2)   ;   indglob = indloc + njmppt(nprocloc+1) - 1 
621      CASE(3)   ;   indglob = indloc
622      CASE(4)   ;   indglob = indloc
[636]623      END SELECT
[1605]624      !
625   END SUBROUTINE Agrif_InvLoc
[390]626
[1605]627# endif
628
[390]629#else
[636]630   SUBROUTINE Subcalledbyagrif
[1605]631      !!----------------------------------------------------------------------
[2715]632      !!                   *** ROUTINE Subcalledbyagrif ***
[1605]633      !!----------------------------------------------------------------------
[636]634      WRITE(*,*) 'Impossible to be here'
635   END SUBROUTINE Subcalledbyagrif
[390]636#endif
Note: See TracBrowser for help on using the repository browser.