Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
MODULE agrif_oce
!!======================================================================
!! *** MODULE agrif_oce ***
!! AGRIF : define in memory AGRIF variables
!!----------------------------------------------------------------------
!! History : 2.0 ! 2007-12 (R. Benshila) Original code
!!----------------------------------------------------------------------
#if defined key_agrif
!!----------------------------------------------------------------------
!! 'key_agrif' AGRIF zoom
!!----------------------------------------------------------------------
USE par_oce ! ocean parameters
USE dom_oce ! domain parameters
IMPLICIT NONE
PRIVATE
PUBLIC agrif_oce_alloc ! routine called by nemo_init in nemogcm.F90
! !!* Namelist namagrif: AGRIF parameters
LOGICAL , PUBLIC :: ln_init_chfrpar = .FALSE. !: set child grids initial state from parent
LOGICAL , PUBLIC :: ln_agrif_2way = .TRUE. !: activate two way nesting
LOGICAL , PUBLIC :: ln_spc_dyn = .FALSE. !: use zeros (.false.) or not (.true.) in
!: bdys dynamical fields interpolation
LOGICAL , PUBLIC :: ln_vert_remap = .FALSE. !: use vertical remapping
REAL(wp), PUBLIC :: rn_sponge_tra = 0.002 !: sponge coeff. for tracers
REAL(wp), PUBLIC :: rn_sponge_dyn = 0.002 !: sponge coeff. for dynamics
REAL(wp), PUBLIC :: rn_trelax_tra = 0.01 !: time relaxation parameter for tracers
REAL(wp), PUBLIC :: rn_trelax_dyn = 0.01 !: time relaxation parameter for momentum
LOGICAL , PUBLIC :: ln_chk_bathy = .FALSE. !: check of parent bathymetry
!
INTEGER , PUBLIC, PARAMETER :: nn_sponge_len = 2 !: Sponge width (in number of parent grid points)
INTEGER , PUBLIC, PARAMETER :: nn_shift_bar = 0 !: nb of coarse grid points by which we shift 2d interface
LOGICAL , PUBLIC :: spongedoneT = .FALSE. !: tracer sponge layer indicator
LOGICAL , PUBLIC :: spongedoneU = .FALSE. !: dynamics sponge layer indicator
LOGICAL , PUBLIC :: lk_agrif_fstep = .TRUE. !: if true: first step
LOGICAL , PUBLIC :: lk_agrif_debug = .FALSE. !: if true: print debugging info
LOGICAL , PUBLIC :: lk_tint2d_notinterp = .FALSE. !: if true, no time interp
LOGICAL , PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: tabspongedone_tsn
# if defined key_top
LOGICAL , PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: tabspongedone_trn
# endif
LOGICAL , PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: tabspongedone_u
LOGICAL , PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: tabspongedone_v
INTEGER , PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: utint_stage
INTEGER , PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: vtint_stage
REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: fspu, fspv !: sponge arrays
REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: fspt, fspf !: " "
REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: fspu_2d,fspv_2d !: sponge arrays (2d mode)
REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: fspt_2d, fspf_2d !: " " " "
! Barotropic arrays used to store open boundary data during time-splitting loop:
REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: ubdy, vbdy, hbdy
INTEGER , PUBLIC, SAVE :: Kbb_a, Kmm_a, Krhs_a !: AGRIF module-specific copies of time-level indices
REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: ht0_parent, hu0_parent, hv0_parent
REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: e3t0_parent, e3u0_parent, e3v0_parent
INTEGER, PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: mbkt_parent, mbku_parent, mbkv_parent
INTEGER, PUBLIC :: ts_interp_id, ts_update_id ! AGRIF profile for tracers interpolation and update
INTEGER, PUBLIC :: un_interp_id, vn_interp_id ! AGRIF profiles for interpolations
INTEGER, PUBLIC :: un_update_id, vn_update_id ! AGRIF profiles for udpates
INTEGER, PUBLIC :: ts_sponge_id, un_sponge_id, vn_sponge_id ! AGRIF profiles for sponge layers (3d)
INTEGER, PUBLIC :: unb_sponge_id, vnb_sponge_id ! AGRIF profiles for sponge layers (2d)
INTEGER, PUBLIC :: tsini_id, uini_id, vini_id, sshini_id ! AGRIF profile for initialization
# if defined key_top
INTEGER, PUBLIC :: trn_id, trn_sponge_id
# endif
INTEGER, PUBLIC :: unb_interp_id, vnb_interp_id, ub2b_interp_id, vb2b_interp_id
INTEGER, PUBLIC :: ub2b_update_id, vb2b_update_id, unb_update_id, vnb_update_id
INTEGER, PUBLIC :: ub2b_cor_id, vb2b_cor_id
INTEGER, PUBLIC :: e3t_id, sshn_id
INTEGER, PUBLIC :: scales_t_id
INTEGER, PUBLIC :: avt_id, avm_id, en_id ! TKE related identificators
INTEGER, PUBLIC :: mbkt_id, ht0_id, e3t0_interp_id
INTEGER, PUBLIC :: glamt_id, gphit_id
INTEGER, PUBLIC :: batupd_id
INTEGER, PUBLIC :: kindic_agr
! North fold
!$AGRIF_DO_NOT_TREAT
LOGICAL, PUBLIC :: use_sign_north
REAL, PUBLIC :: sign_north
LOGICAL, PUBLIC :: l_ini_child = .FALSE.
LOGICAL, PUBLIC :: l_vremap = .FALSE.
!$AGRIF_END_DO_NOT_TREAT
!!----------------------------------------------------------------------
!! NEMO/NST 4.0 , NEMO Consortium (2018)
!! $Id: agrif_oce.F90 14086 2020-12-04 11:37:14Z cetlod $
!! Software governed by the CeCILL license (see ./LICENSE)
!!----------------------------------------------------------------------
CONTAINS
INTEGER FUNCTION agrif_oce_alloc()
!!----------------------------------------------------------------------
!! *** FUNCTION agrif_oce_alloc ***
!!----------------------------------------------------------------------
INTEGER, DIMENSION(2) :: ierr
!!----------------------------------------------------------------------
ierr(:) = 0
!
ALLOCATE( fspu(jpi,jpj), fspv(jpi,jpj), &
& fspt(jpi,jpj), fspf(jpi,jpj), &
& fspu_2d(jpi,jpj), fspv_2d(jpi,jpj), &
& fspt_2d(jpi,jpj), fspf_2d(jpi,jpj), &
& tabspongedone_tsn(jpi,jpj), &
& utint_stage(jpi,jpj), vtint_stage(jpi,jpj), &
# if defined key_top
& tabspongedone_trn(jpi,jpj), &
# endif
& ht0_parent(jpi,jpj), mbkt_parent(jpi,jpj), &
& hu0_parent(jpi,jpj), mbku_parent(jpi,jpj), &
& hv0_parent(jpi,jpj), mbkv_parent(jpi,jpj), &
& tabspongedone_u (jpi,jpj), &
& tabspongedone_v (jpi,jpj), STAT = ierr(1) )
ALLOCATE( ubdy(jpi,jpj), vbdy(jpi,jpj), hbdy(jpi,jpj), STAT = ierr(2) )
agrif_oce_alloc = MAXVAL(ierr)
!
END FUNCTION agrif_oce_alloc
#endif
!!======================================================================
END MODULE agrif_oce