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 trunk/NEMOGCM/NEMO/NST_SRC – NEMO

source: trunk/NEMOGCM/NEMO/NST_SRC/agrif_user.F90 @ 2727

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

Syntax in agrif_user

  • Property svn:keywords set to Id
File size: 20.1 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
86# endif       
87# if defined key_top
88      CALL Agrif_InitValues_cont_top
89# endif     
90   END SUBROUTINE Agrif_initvalues
[2031]91
[2715]92# if ! defined key_offline
[390]93
[2715]94   SUBROUTINE Agrif_InitValues_cont
95      !!----------------------------------------------------------------------
96      !!                 *** ROUTINE Agrif_InitValues_cont ***
97      !!
98      !! ** Purpose ::   Declaration of variables to be interpolated
99      !!----------------------------------------------------------------------
100      USE Agrif_Util
101      USE oce 
102      USE dom_oce
103      USE nemogcm
104      USE sol_oce
105      USE in_out_manager
106      USE agrif_opa_update
107      USE agrif_opa_interp
108      USE agrif_opa_sponge
109      !
110      IMPLICIT NONE
111      !
112      REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: tabtemp
113      LOGICAL :: check_namelist
114      !!----------------------------------------------------------------------
[390]115
[2715]116      ALLOCATE( tabtemp(jpi,jpj,jpk) )
[636]117     
[2715]118     
119      ! 1. Declaration of the type of variable which have to be interpolated
120      !---------------------------------------------------------------------
121      CALL agrif_declare_var
[636]122
[2715]123      ! 2. First interpolations of potentially non zero fields
[636]124      !-------------------------------------------------------
125      Agrif_SpecialValue=0.
126      Agrif_UseSpecialValue = .TRUE.
[2715]127      Call Agrif_Bc_variable(tabtemp,tn_id,calledweight=1.,procname=interptn)
128   
129      Call Agrif_Bc_variable(tabtemp,sn_id,calledweight=1.,procname=interpsn)
130      Call Agrif_Bc_variable(tabtemp,un_id,calledweight=1.,procname=interpu)
131      Call Agrif_Bc_variable(tabtemp,vn_id,calledweight=1.,procname=interpv)
[390]132
[2715]133      Call Agrif_Bc_variable(tabtemp,ta_id,calledweight=1.,procname=interptn)
134      Call Agrif_Bc_variable(tabtemp,sa_id,calledweight=1.,procname=interpsn)
[390]135
[2715]136      Call Agrif_Bc_variable(tabtemp,ua_id,calledweight=1.,procname=interpun)
137      Call Agrif_Bc_variable(tabtemp,va_id,calledweight=1.,procname=interpvn)
[636]138      Agrif_UseSpecialValue = .FALSE.
[628]139
[2715]140      ! 3. Some controls
[636]141      !-----------------
142      check_namelist = .true.
143           
144      IF( check_namelist ) THEN
145     
146         ! Check time steps           
[2715]147         IF( NINT(Agrif_Rhot()) * nint(rdt) /= Agrif_Parent(rdt) ) THEN
[636]148            WRITE(*,*) 'incompatible time step between grids'
149            WRITE(*,*) 'parent grid value : ',Agrif_Parent(rdt)
150            WRITE(*,*) 'child  grid value : ',nint(rdt)
151            WRITE(*,*) 'value on parent grid should be : ',rdt*Agrif_Rhot()
152            STOP
153         ENDIF
154         
155         ! Check run length
[2727]156         IF( Agrif_IRhot() * (Agrif_Parent(nitend)- &
157            Agrif_Parent(nit000)+1) .ne. (nitend-nit000+1) ) THEN
[636]158            WRITE(*,*) 'incompatible run length between grids'
[2727]159            WRITE(*,*) 'parent grid value : ',(Agrif_Parent(nitend)- &
160               Agrif_Parent(nit000)+1),' time step'
161            WRITE(*,*) 'child  grid value : ', &
162               (nitend-nit000+1),' time step'
163            WRITE(*,*) 'value on child grid should be : ', &
164               Agrif_IRhot() * (Agrif_Parent(nitend)- &
165               Agrif_Parent(nit000)+1)
[636]166            STOP
167         ENDIF
168         
169         ! Check coordinates
170         IF( ln_zps ) THEN
171            ! check parameters for partial steps
172            IF( Agrif_Parent(e3zps_min) .ne. e3zps_min ) THEN
173               WRITE(*,*) 'incompatible e3zps_min between grids'
174               WRITE(*,*) 'parent grid :',Agrif_Parent(e3zps_min)
175               WRITE(*,*) 'child grid  :',e3zps_min
176               WRITE(*,*) 'those values should be identical'
177               STOP
178            ENDIF         
[2715]179            IF( Agrif_Parent(e3zps_rat) /= e3zps_rat ) THEN
[636]180               WRITE(*,*) 'incompatible e3zps_rat between grids'
181               WRITE(*,*) 'parent grid :',Agrif_Parent(e3zps_rat)
182               WRITE(*,*) 'child grid  :',e3zps_rat
183               WRITE(*,*) 'those values should be identical'                 
184               STOP
185            ENDIF
186         ENDIF
[390]187      ENDIF
[2715]188       
[636]189      CALL Agrif_Update_tra(0)
190      CALL Agrif_Update_dyn(0)
191
[390]192      nbcline = 0
[1605]193      !
[2715]194      DEALLOCATE(tabtemp)
195      !
196   END SUBROUTINE Agrif_InitValues_cont
[1300]197
[1605]198
[2715]199   SUBROUTINE agrif_declare_var
[1605]200      !!----------------------------------------------------------------------
[2715]201      !!                 *** ROUTINE agrif_declarE_var ***
[1300]202      !!
[1605]203      !! ** Purpose :: Declaration of variables to be interpolated
204      !!----------------------------------------------------------------------
[2715]205      USE agrif_util
206      USE oce
207      IMPLICIT NONE
208      !!----------------------------------------------------------------------
209   
210      ! 1. Declaration of the type of variable which have to be interpolated
211      !---------------------------------------------------------------------
212      CALL agrif_declare_variable((/2,2,0/),(/3,3,0/),(/'x','y','N'/),(/1,1,1/),(/jpi,jpj,jpk/),tn_id)
213      CALL agrif_declare_variable((/2,2,0/),(/3,3,0/),(/'x','y','N'/),(/1,1,1/),(/jpi,jpj,jpk/),sn_id)
214      CALL agrif_declare_variable((/2,2,0/),(/3,3,0/),(/'x','y','N'/),(/1,1,1/),(/jpi,jpj,jpk/),tb_id)
215      CALL agrif_declare_variable((/2,2,0/),(/3,3,0/),(/'x','y','N'/),(/1,1,1/),(/jpi,jpj,jpk/),sb_id)
216      CALL agrif_declare_variable((/2,2,0/),(/3,3,0/),(/'x','y','N'/),(/1,1,1/),(/jpi,jpj,jpk/),ta_id)
217      CALL agrif_declare_variable((/2,2,0/),(/3,3,0/),(/'x','y','N'/),(/1,1,1/),(/jpi,jpj,jpk/),sa_id)
218         
219      CALL agrif_declare_variable((/1,2,0/),(/2,3,0/),(/'x','y','N'/),(/1,1,1/),(/jpi,jpj,jpk/),un_id)
220      CALL agrif_declare_variable((/2,1,0/),(/3,2,0/),(/'x','y','N'/),(/1,1,1/),(/jpi,jpj,jpk/),vn_id)
221      CALL agrif_declare_variable((/1,2,0/),(/2,3,0/),(/'x','y','N'/),(/1,1,1/),(/jpi,jpj,jpk/),ua_id)
222      CALL agrif_declare_variable((/2,1,0/),(/3,2,0/),(/'x','y','N'/),(/1,1,1/),(/jpi,jpj,jpk/),va_id)
223   
224      CALL agrif_declare_variable((/1,2/),(/2,3/),(/'x','y'/),(/1,1/),(/jpi,jpj/),e1u_id)
225      CALL agrif_declare_variable((/2,1/),(/3,2/),(/'x','y'/),(/1,1/),(/jpi,jpj/),e2v_id)
226
227      CALL agrif_declare_variable((/2,2/),(/3,3/),(/'x','y'/),(/1,1/),(/jpi,jpj/),sshn_id)
228      CALL agrif_declare_variable((/2,2/),(/3,3/),(/'x','y'/),(/1,1/),(/jpi,jpj/),gcb_id)
229       
230      ! 2. Type of interpolation
231      !-------------------------
232      CALL Agrif_Set_bcinterp(tn_id,interp=AGRIF_linear)
233      CALL Agrif_Set_bcinterp(sn_id,interp=AGRIF_linear)
234      CALL Agrif_Set_bcinterp(ta_id,interp=AGRIF_linear)
235      CALL Agrif_Set_bcinterp(sa_id,interp=AGRIF_linear)
236   
237      Call Agrif_Set_bcinterp(un_id,interp1=Agrif_linear,interp2=AGRIF_ppm)
238      Call Agrif_Set_bcinterp(vn_id,interp1=AGRIF_ppm,interp2=Agrif_linear)
239
240      Call Agrif_Set_bcinterp(ua_id,interp1=Agrif_linear,interp2=AGRIF_ppm)
241      Call Agrif_Set_bcinterp(va_id,interp1=AGRIF_ppm,interp2=Agrif_linear)
242
243      Call Agrif_Set_bcinterp(e1u_id,interp1=Agrif_linear,interp2=AGRIF_ppm)
244      Call Agrif_Set_bcinterp(e2v_id,interp1=AGRIF_ppm,interp2=Agrif_linear)
245
246      ! 3. Location of interpolation
247      !-----------------------------
248      Call Agrif_Set_bc(un_id,(/0,1/))
249      Call Agrif_Set_bc(vn_id,(/0,1/))
250
251      Call Agrif_Set_bc(e1u_id,(/0,0/))
252      Call Agrif_Set_bc(e2v_id,(/0,0/))
253
254      Call Agrif_Set_bc(tn_id,(/0,1/))
255      Call Agrif_Set_bc(sn_id,(/0,1/))
256
257      Call Agrif_Set_bc(ta_id,(/-3*Agrif_irhox(),0/))
258      Call Agrif_Set_bc(sa_id,(/-3*Agrif_irhox(),0/))
259
260      Call Agrif_Set_bc(ua_id,(/-2*Agrif_irhox(),0/))
261      Call Agrif_Set_bc(va_id,(/-2*Agrif_irhox(),0/))
262
263      ! 5. Update type
264      !---------------
265      Call Agrif_Set_Updatetype(tn_id, update = AGRIF_Update_Average)
266      Call Agrif_Set_Updatetype(sn_id, update = AGRIF_Update_Average)
267
268      Call Agrif_Set_Updatetype(tb_id, update = AGRIF_Update_Average)
269      Call Agrif_Set_Updatetype(sb_id, update = AGRIF_Update_Average)
270
271      Call Agrif_Set_Updatetype(sshn_id, update = AGRIF_Update_Average)
272      Call Agrif_Set_Updatetype(gcb_id,update = AGRIF_Update_Average)
273
274      Call Agrif_Set_Updatetype(un_id,update1 = Agrif_Update_Copy, update2 = Agrif_Update_Average)
275      Call Agrif_Set_Updatetype(vn_id,update1 = Agrif_Update_Average, update2 = Agrif_Update_Copy)
276
277      Call Agrif_Set_Updatetype(e1u_id,update1 = Agrif_Update_Copy, update2=Agrif_Update_Average)
278      Call Agrif_Set_Updatetype(e2v_id,update1 = Agrif_Update_Average, update2=Agrif_Update_Copy)
279
280   END SUBROUTINE agrif_declare_var
281# endif
282   
283# if defined key_top
284   SUBROUTINE Agrif_InitValues_cont_top
285      !!----------------------------------------------------------------------
286      !!                 *** ROUTINE Agrif_InitValues_cont_top ***
287      !!
288      !! ** Purpose :: Declaration of variables to be interpolated
289      !!----------------------------------------------------------------------
[1300]290      USE Agrif_Util
291      USE oce 
292      USE dom_oce
[2528]293      USE nemogcm
[1300]294      USE trc
295      USE in_out_manager
296      USE agrif_top_update
297      USE agrif_top_interp
298      USE agrif_top_sponge
[2715]299      !
[1300]300      IMPLICIT NONE
[2715]301      !
302      REAL(wp), DIMENSION(:,:,:,:), ALLOCATABLE :: tabtrtemp
303      LOGICAL :: check_namelist
[1605]304      !!----------------------------------------------------------------------
[1300]305
[2715]306      ALLOCATE( tabtrtemp(jpi,jpj,jpk,jptra) )
307     
308     
[1300]309      ! 1. Declaration of the type of variable which have to be interpolated
310      !---------------------------------------------------------------------
[2715]311      CALL agrif_declare_var_top
[1300]312
[2715]313      ! 2. First interpolations of potentially non zero fields
[1300]314      !-------------------------------------------------------
315      Agrif_SpecialValue=0.
316      Agrif_UseSpecialValue = .TRUE.
[2715]317      Call Agrif_Bc_variable(tabtrtemp,trn_id,calledweight=1.)
318      Call Agrif_Bc_variable(tabtrtemp,tra_id,calledweight=1.,procname=interptrn)
[1300]319      Agrif_UseSpecialValue = .FALSE.
320
[2715]321      ! 3. Some controls
[1300]322      !-----------------
323      check_namelist = .true.
324           
325      IF( check_namelist ) THEN
[2715]326#  if defined offline     
[2727]327         ! Check time steps
[1300]328         IF( nint(Agrif_Rhot()) * nint(rdt) .ne. Agrif_Parent(rdt) ) THEN
329            WRITE(*,*) 'incompatible time step between grids'
330            WRITE(*,*) 'parent grid value : ',Agrif_Parent(rdt)
331            WRITE(*,*) 'child  grid value : ',nint(rdt)
332            WRITE(*,*) 'value on parent grid should be : ',rdt*Agrif_Rhot()
333            STOP
334         ENDIF
[2727]335
[1300]336         ! Check run length
[2727]337         IF( Agrif_IRhot() * (Agrif_Parent(nitend)- &
338            Agrif_Parent(nit000)+1) .ne. (nitend-nit000+1) ) THEN
[1300]339            WRITE(*,*) 'incompatible run length between grids'
[2727]340            WRITE(*,*) 'parent grid value : ',(Agrif_Parent(nitend)- &
341               Agrif_Parent(nit000)+1),' time step'
342            WRITE(*,*) 'child  grid value : ', &
343               (nitend-nit000+1),' time step'
344            WRITE(*,*) 'value on child grid should be : ', &
345               Agrif_IRhot() * (Agrif_Parent(nitend)- &
346               Agrif_Parent(nit000)+1)
[1300]347            STOP
348         ENDIF
349         
350         ! Check coordinates
351         IF( ln_zps ) THEN
352            ! check parameters for partial steps
353            IF( Agrif_Parent(e3zps_min) .ne. e3zps_min ) THEN
354               WRITE(*,*) 'incompatible e3zps_min between grids'
355               WRITE(*,*) 'parent grid :',Agrif_Parent(e3zps_min)
356               WRITE(*,*) 'child grid  :',e3zps_min
357               WRITE(*,*) 'those values should be identical'
358               STOP
359            ENDIF         
360            IF( Agrif_Parent(e3zps_rat) .ne. e3zps_rat ) THEN
361               WRITE(*,*) 'incompatible e3zps_rat between grids'
362               WRITE(*,*) 'parent grid :',Agrif_Parent(e3zps_rat)
363               WRITE(*,*) 'child grid  :',e3zps_rat
364               WRITE(*,*) 'those values should be identical'                 
365               STOP
366            ENDIF
367         ENDIF
[2715]368#  endif         
[1300]369        ! Check passive tracer cell
[2528]370        IF( nn_dttrc .ne. 1 ) THEN
371           WRITE(*,*) 'nn_dttrc should be equal to 1'
[1300]372        ENDIF
373      ENDIF
[2715]374       
[1300]375      CALL Agrif_Update_trc(0)
376      nbcline_trc = 0
[1605]377      !
[2715]378      DEALLOCATE(tabtrtemp)
379      !
380   END SUBROUTINE Agrif_InitValues_cont_top
[1300]381
[2715]382
383   SUBROUTINE agrif_declare_var_top
384      !!----------------------------------------------------------------------
385      !!                 *** ROUTINE agrif_declare_var_top ***
386      !!
387      !! ** Purpose :: Declaration of TOP variables to be interpolated
388      !!----------------------------------------------------------------------
389      USE agrif_util
390      USE dom_oce
391      USE trc
392     
393      IMPLICIT NONE
[636]394   
[2715]395      ! 1. Declaration of the type of variable which have to be interpolated
396      !---------------------------------------------------------------------
397      CALL agrif_declare_variable((/2,2,0,0/),(/3,3,0,0/),(/'x','y','N','N'/),  &
398      &                           (/1,1,1,1/),(/jpi,jpj,jpk,jptra/),trn_id)
399      CALL agrif_declare_variable((/2,2,0,0/),(/3,3,0,0/),(/'x','y','N','N'/),  &
400      &                           (/1,1,1,1/),(/jpi,jpj,jpk,jptra/),trb_id)
401      CALL agrif_declare_variable((/2,2,0,0/),(/3,3,0,0,jptra/),(/'x','y','N','N'/),  &
402      &                           (/1,1,1,1/),(/jpi,jpj,jpk/),tra_id)
403           
404#  if defined key_offline
405      CALL agrif_declare_variable((/1,2/),(/2,3/),(/'x','y'/),(/1,1/),(/jpi,jpj/),e1u_id)
406      CALL agrif_declare_variable((/2,1/),(/3,2/),(/'x','y'/),(/1,1/),(/jpi,jpj/),e2v_id)
407#  endif
408       
409      ! 2. Type of interpolation
410      !-------------------------
411      CALL Agrif_Set_bcinterp(trn_id,interp=AGRIF_linear)
412      CALL Agrif_Set_bcinterp(tra_id,interp=AGRIF_linear)
413   
414#  if defined key_offline
415      Call Agrif_Set_bcinterp(e1u_id,interp1=Agrif_linear,interp2=AGRIF_ppm)
416      Call Agrif_Set_bcinterp(e2v_id,interp1=AGRIF_ppm,interp2=Agrif_linear)
417#  endif
418
419      ! 3. Location of interpolation
420      !-----------------------------
421#  if defined key_offline
422      Call Agrif_Set_bc(e1u_id,(/0,0/))
423      Call Agrif_Set_bc(e2v_id,(/0,0/))
424#  endif
425      Call Agrif_Set_bc(trn_id,(/0,1/))
426      Call Agrif_Set_bc(tra_id,(/-3*Agrif_irhox(),0/))
427
428      ! 5. Update type
429      !---------------
430      Call Agrif_Set_Updatetype(trn_id, update = AGRIF_Update_Average)
431      Call Agrif_Set_Updatetype(trb_id, update = AGRIF_Update_Average)
432
433#  if defined key_offline
434      Call Agrif_Set_Updatetype(e1u_id,update1 = Agrif_Update_Copy, update2=Agrif_Update_Average)
435      Call Agrif_Set_Updatetype(e2v_id,update1 = Agrif_Update_Average, update2=Agrif_Update_Copy)
436#  endif
437
438   END SUBROUTINE agrif_declare_var_top
439# endif
440   
441   SUBROUTINE Agrif_detect( kg, ksizex )
[1605]442      !!----------------------------------------------------------------------
[636]443      !!   *** ROUTINE Agrif_detect ***
[1605]444      !!----------------------------------------------------------------------
[636]445      USE Agrif_Types
[2715]446      !
447      INTEGER, DIMENSION(2) :: ksizex
448      INTEGER, DIMENSION(ksizex(1),ksizex(2)) :: kg 
[1605]449      !!----------------------------------------------------------------------
450      !
451      RETURN
452      !
453   END SUBROUTINE Agrif_detect
[636]454
[390]455
[2528]456   SUBROUTINE agrif_nemo_init
[1605]457      !!----------------------------------------------------------------------
458      !!                     *** ROUTINE agrif_init ***
459      !!----------------------------------------------------------------------
[782]460      USE agrif_oce 
461      USE in_out_manager
[2715]462      USE lib_mpp
[782]463      IMPLICIT NONE
[2715]464      !
[1605]465      NAMELIST/namagrif/ nn_cln_update, rn_sponge_tra, rn_sponge_dyn, ln_spc_dyn
466      !!----------------------------------------------------------------------
[2528]467      !
[1605]468      REWIND( numnam )                ! Read namagrif namelist
469      READ  ( numnam, namagrif )
470      !
471      IF(lwp) THEN                    ! control print
[782]472         WRITE(numout,*)
[2528]473         WRITE(numout,*) 'agrif_nemo_init : AGRIF parameters'
474         WRITE(numout,*) '~~~~~~~~~~~~~~~'
[1605]475         WRITE(numout,*) '   Namelist namagrif : set AGRIF parameters'
476         WRITE(numout,*) '      baroclinic update frequency       nn_cln_update = ', nn_cln_update
477         WRITE(numout,*) '      sponge coefficient for tracers    rn_sponge_tra = ', rn_sponge_tra, ' s'
478         WRITE(numout,*) '      sponge coefficient for dynamics   rn_sponge_tra = ', rn_sponge_dyn, ' s'
479         WRITE(numout,*) '      use special values for dynamics   ln_spc_dyn    = ', ln_spc_dyn
[782]480         WRITE(numout,*) 
481      ENDIF
[1605]482      !
483      ! convert DOCTOR namelist name into OLD names
484      nbclineupdate = nn_cln_update
485      visc_tra      = rn_sponge_tra
486      visc_dyn      = rn_sponge_dyn
487      !
[2715]488      IF( agrif_oce_alloc()  > 0 )   CALL ctl_warn('agrif sol_oce_alloc: allocation of arrays failed')
489      !
[2528]490    END SUBROUTINE agrif_nemo_init
[782]491
[1605]492# if defined key_mpp_mpi
493
494   SUBROUTINE Agrif_InvLoc( indloc, nprocloc, i, indglob )
495      !!----------------------------------------------------------------------
496      !!                     *** ROUTINE Agrif_detect ***
497      !!----------------------------------------------------------------------
[390]498      USE dom_oce
[636]499      IMPLICIT NONE
[2715]500      !
501      INTEGER :: indglob, indloc, nprocloc, i
[1605]502      !!----------------------------------------------------------------------
503      !
[2528]504      SELECT CASE( i )
505      CASE(1)   ;   indglob = indloc + nimppt(nprocloc+1) - 1
506      CASE(2)   ;   indglob = indloc + njmppt(nprocloc+1) - 1 
507      CASE(3)   ;   indglob = indloc
508      CASE(4)   ;   indglob = indloc
[636]509      END SELECT
[1605]510      !
511   END SUBROUTINE Agrif_InvLoc
[390]512
[1605]513# endif
514
[390]515#else
[636]516   SUBROUTINE Subcalledbyagrif
[1605]517      !!----------------------------------------------------------------------
[2715]518      !!                   *** ROUTINE Subcalledbyagrif ***
[1605]519      !!----------------------------------------------------------------------
[636]520      WRITE(*,*) 'Impossible to be here'
521   END SUBROUTINE Subcalledbyagrif
[390]522#endif
Note: See TracBrowser for help on using the repository browser.