agrif_oce.F90 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. MODULE agrif_oce
  2. !!======================================================================
  3. !! *** MODULE agrif_oce ***
  4. !! AGRIF : define in memory AGRIF variables
  5. !!----------------------------------------------------------------------
  6. !! History : 2.0 ! 2007-12 (R. Benshila) Original code
  7. !!----------------------------------------------------------------------
  8. #if defined key_agrif
  9. !!----------------------------------------------------------------------
  10. !! 'key_agrif' AGRIF zoom
  11. !!----------------------------------------------------------------------
  12. USE par_oce ! ocean parameters
  13. USE dom_oce ! domain parameters
  14. IMPLICIT NONE
  15. PRIVATE
  16. PUBLIC agrif_oce_alloc ! routine called by nemo_init in nemogcm.F90
  17. ! !!* Namelist namagrif: AGRIF parameters
  18. LOGICAL , PUBLIC :: ln_spc_dyn = .FALSE. !:
  19. INTEGER , PUBLIC :: nn_cln_update = 3 !: update frequency
  20. INTEGER , PUBLIC, PARAMETER :: nn_sponge_len = 2 !: Sponge width (in number of parent grid points)
  21. REAL(wp), PUBLIC :: rn_sponge_tra = 2800. !: sponge coeff. for tracers
  22. REAL(wp), PUBLIC :: rn_sponge_dyn = 2800. !: sponge coeff. for dynamics
  23. LOGICAL , PUBLIC :: ln_chk_bathy = .FALSE. !: check of parent bathymetry
  24. ! !!! OLD namelist names
  25. INTEGER , PUBLIC :: nbcline = 0 !: update counter
  26. INTEGER , PUBLIC :: nbclineupdate !: update frequency
  27. REAL(wp), PUBLIC :: visc_tra !: sponge coeff. for tracers
  28. REAL(wp), PUBLIC :: visc_dyn !: sponge coeff. for dynamics
  29. LOGICAL , PUBLIC :: spongedoneT = .FALSE. !: tracer sponge layer indicator
  30. LOGICAL , PUBLIC :: spongedoneU = .FALSE. !: dynamics sponge layer indicator
  31. LOGICAL , PUBLIC :: lk_agrif_fstep = .TRUE. !: if true: first step
  32. LOGICAL , PUBLIC :: lk_agrif_doupd = .TRUE. !: if true: send update from current grid
  33. LOGICAL , PUBLIC :: lk_agrif_debug = .FALSE. !: if true: print debugging info
  34. LOGICAL , PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: tabspongedone_tsn
  35. # if defined key_top
  36. LOGICAL , PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: tabspongedone_trn
  37. # endif
  38. LOGICAL , PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: tabspongedone_u
  39. LOGICAL , PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: tabspongedone_v
  40. REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: fsaht_spu, fsaht_spv !: sponge diffusivities
  41. REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: fsahm_spt, fsahm_spf !: sponge viscosities
  42. ! Barotropic arrays used to store open boundary data during
  43. ! time-splitting loop:
  44. REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:) :: ubdy_w, vbdy_w, hbdy_w
  45. REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:) :: ubdy_e, vbdy_e, hbdy_e
  46. REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:) :: ubdy_n, vbdy_n, hbdy_n
  47. REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:) :: ubdy_s, vbdy_s, hbdy_s
  48. INTEGER :: tsn_id ! AGRIF profile for tracers interpolation and update
  49. INTEGER :: un_interp_id, vn_interp_id ! AGRIF profiles for interpolations
  50. INTEGER :: un_update_id, vn_update_id ! AGRIF profiles for udpates
  51. INTEGER :: tsn_sponge_id, un_sponge_id, vn_sponge_id ! AGRIF profiles for sponge layers
  52. # if defined key_top
  53. INTEGER :: trn_id, trn_sponge_id
  54. # endif
  55. INTEGER :: unb_id, vnb_id, ub2b_interp_id, vb2b_interp_id
  56. INTEGER :: ub2b_update_id, vb2b_update_id
  57. INTEGER :: e3t_id, e1u_id, e2v_id, sshn_id
  58. INTEGER :: scales_t_id
  59. # if defined key_zdftke
  60. INTEGER :: avt_id, avm_id, en_id
  61. # endif
  62. INTEGER :: umsk_id, vmsk_id
  63. INTEGER :: kindic_agr
  64. !!----------------------------------------------------------------------
  65. !! NEMO/NST 3.3.1 , NEMO Consortium (2011)
  66. !! $Id: agrif_oce.F90 4491 2014-02-06 16:47:57Z jchanut $
  67. !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)
  68. !!----------------------------------------------------------------------
  69. CONTAINS
  70. INTEGER FUNCTION agrif_oce_alloc()
  71. !!----------------------------------------------------------------------
  72. !! *** FUNCTION agrif_oce_alloc ***
  73. !!----------------------------------------------------------------------
  74. INTEGER, DIMENSION(2) :: ierr
  75. !!----------------------------------------------------------------------
  76. ierr(:) = 0
  77. !
  78. ALLOCATE( fsaht_spu(jpi,jpj), fsaht_spv(jpi,jpj), &
  79. & fsahm_spt(jpi,jpj), fsahm_spf(jpi,jpj), &
  80. & tabspongedone_tsn(jpi,jpj), &
  81. # if defined key_top
  82. & tabspongedone_trn(jpi,jpj), &
  83. # endif
  84. & tabspongedone_u (jpi,jpj), &
  85. & tabspongedone_v (jpi,jpj), STAT = ierr(1) )
  86. ALLOCATE( ubdy_w(jpj), vbdy_w(jpj), hbdy_w(jpj), &
  87. & ubdy_e(jpj), vbdy_e(jpj), hbdy_e(jpj), &
  88. & ubdy_n(jpi), vbdy_n(jpi), hbdy_n(jpi), &
  89. & ubdy_s(jpi), vbdy_s(jpi), hbdy_s(jpi), STAT = ierr(2) )
  90. agrif_oce_alloc = MAXVAL(ierr)
  91. !
  92. END FUNCTION agrif_oce_alloc
  93. #endif
  94. !!======================================================================
  95. END MODULE agrif_oce