1 | MODULE zdf_oce |
---|
2 | !!====================================================================== |
---|
3 | !! *** MODULE zdf_oce *** |
---|
4 | !! Ocean physics : define vertical mixing variables |
---|
5 | !!===================================================================== |
---|
6 | !! history : 1.0 ! 2002-06 (G. Madec) Original code |
---|
7 | !! 3.2 ! 2009-07 (G.Madec) addition of avm |
---|
8 | !!---------------------------------------------------------------------- |
---|
9 | USE par_oce ! ocean parameters |
---|
10 | USE in_out_manager ! I/O manager |
---|
11 | USE lib_mpp ! MPP library |
---|
12 | |
---|
13 | USE yomhook, ONLY: lhook, dr_hook |
---|
14 | USE parkind1, ONLY: jprb, jpim |
---|
15 | |
---|
16 | IMPLICIT NONE |
---|
17 | PRIVATE |
---|
18 | |
---|
19 | PUBLIC zdf_oce_alloc ! Called in nemogcm.F90 |
---|
20 | |
---|
21 | #if defined key_zdfcst || defined key_esopa |
---|
22 | LOGICAL, PARAMETER, PUBLIC :: lk_zdfcst = .TRUE. !: constant vertical mixing flag |
---|
23 | #else |
---|
24 | LOGICAL, PARAMETER, PUBLIC :: lk_zdfcst = .FALSE. !: constant vertical mixing flag |
---|
25 | #endif |
---|
26 | |
---|
27 | ! !!* namelist namzdf: vertical diffusion * |
---|
28 | REAL(wp), PUBLIC :: rn_avm0 !: vertical eddy viscosity (m2/s) |
---|
29 | REAL(wp), PUBLIC :: rn_avt0 !: vertical eddy diffusivity (m2/s) |
---|
30 | INTEGER , PUBLIC :: nn_avb !: constant or profile background on avt (=0/1) |
---|
31 | INTEGER , PUBLIC :: nn_havtb !: horizontal shape or not for avtb (=0/1) |
---|
32 | LOGICAL , PUBLIC :: ln_zdfexp !: explicit vertical diffusion scheme flag |
---|
33 | INTEGER , PUBLIC :: nn_zdfexp !: number of sub-time step (explicit time stepping) |
---|
34 | LOGICAL , PUBLIC :: ln_zdfevd !: convection: enhanced vertical diffusion flag |
---|
35 | INTEGER , PUBLIC :: nn_evdm !: =0/1 flag to apply enhanced avm or not |
---|
36 | REAL(wp), PUBLIC :: rn_avevd !: vertical eddy coeff. for enhanced vert. diff. (m2/s) |
---|
37 | LOGICAL , PUBLIC :: ln_zdfnpc !: convection: non-penetrative convection flag |
---|
38 | INTEGER , PUBLIC :: nn_npc !: non penetrative convective scheme call frequency |
---|
39 | INTEGER , PUBLIC :: nn_npcp !: non penetrative convective scheme print frequency |
---|
40 | |
---|
41 | |
---|
42 | REAL(wp), PUBLIC, SAVE, ALLOCATABLE, DIMENSION(:) :: avmb , avtb !: background profile of avm and avt |
---|
43 | REAL(wp), PUBLIC, SAVE, ALLOCATABLE, DIMENSION(:,:) :: avtb_2d !: horizontal shape of background Kz profile |
---|
44 | REAL(wp), PUBLIC, SAVE, ALLOCATABLE, DIMENSION(:,:) :: bfrua, bfrva !: Bottom friction coefficients set in zdfbfr |
---|
45 | REAL(wp), PUBLIC, SAVE, ALLOCATABLE, DIMENSION(:,:) :: tfrua, tfrva !: top friction coefficients set in zdfbfr |
---|
46 | REAL(wp), PUBLIC, SAVE, ALLOCATABLE, DIMENSION(:,:,:) :: avmu , avmv !: vertical viscosity coef at uw- & vw-pts [m2/s] |
---|
47 | REAL(wp), PUBLIC, SAVE, ALLOCATABLE, DIMENSION(:,:,:) :: avm , avt !: vertical viscosity & diffusivity coef at w-pt [m2/s] |
---|
48 | REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: avt_k , avm_k ! not enhanced Kz |
---|
49 | REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: avmu_k, avmv_k ! not enhanced Kz |
---|
50 | REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: en !: now turbulent kinetic energy [m2/s2] |
---|
51 | |
---|
52 | !!---------------------------------------------------------------------- |
---|
53 | !! NEMO/OPA 4.0 , NEMO Consortium (2011) |
---|
54 | !! $Id$ |
---|
55 | !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) |
---|
56 | !!---------------------------------------------------------------------- |
---|
57 | CONTAINS |
---|
58 | |
---|
59 | INTEGER FUNCTION zdf_oce_alloc() |
---|
60 | INTEGER(KIND=jpim), PARAMETER :: zhook_in = 0 |
---|
61 | INTEGER(KIND=jpim), PARAMETER :: zhook_out = 1 |
---|
62 | REAL(KIND=jprb) :: zhook_handle |
---|
63 | |
---|
64 | CHARACTER(LEN=*), PARAMETER :: RoutineName='ZDF_OCE_ALLOC' |
---|
65 | |
---|
66 | IF (lhook) CALL dr_hook(RoutineName,zhook_in,zhook_handle) |
---|
67 | |
---|
68 | !!---------------------------------------------------------------------- |
---|
69 | !! *** FUNCTION zdf_oce_alloc *** |
---|
70 | !!---------------------------------------------------------------------- |
---|
71 | ! |
---|
72 | ALLOCATE(avmb(jpk) , bfrua(jpi,jpj) , & |
---|
73 | & avtb(jpk) , bfrva(jpi,jpj) , avtb_2d(jpi,jpj) , & |
---|
74 | & tfrua(jpi, jpj), tfrva(jpi, jpj) , & |
---|
75 | & avmu(jpi,jpj,jpk), avm(jpi,jpj,jpk) , & |
---|
76 | & avmv (jpi,jpj,jpk), avt (jpi,jpj,jpk) , & |
---|
77 | & avt_k (jpi,jpj,jpk), avm_k (jpi,jpj,jpk) , & |
---|
78 | & avmu_k(jpi,jpj,jpk), avmv_k(jpi,jpj,jpk) , & |
---|
79 | & en (jpi,jpj,jpk), STAT = zdf_oce_alloc ) |
---|
80 | ! |
---|
81 | IF( zdf_oce_alloc /= 0 ) CALL ctl_warn('zdf_oce_alloc: failed to allocate arrays') |
---|
82 | ! |
---|
83 | IF (lhook) CALL dr_hook(RoutineName,zhook_out,zhook_handle) |
---|
84 | END FUNCTION zdf_oce_alloc |
---|
85 | |
---|
86 | !!====================================================================== |
---|
87 | END MODULE zdf_oce |
---|