SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
modn_seafluxn.F90
Go to the documentation of this file.
1 !SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
2 !SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
3 !SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
4 !SFX_LIC for details. version 1.
5 ! ##################
7 ! ##################
8 !
9 !!**** *MODN_SEAFLUX_n* - declaration of namelist NAM_SEAFLUXn
10 !!
11 !! PURPOSE
12 !! -------
13 ! The purpose of this module is to specify the namelist NAM_SEAFLUX_n
14 !
15 !!
16 !!** IMPLICIT ARGUMENTS
17 !! ------------------
18 !!
19 !! REFERENCE
20 !! ---------
21 !!
22 !!
23 !! AUTHOR
24 !! ------
25 !! V. Masson *Meteo France*
26 !!
27 !! MODIFICATIONS
28 !! -------------
29 !! Original 01/2004
30 !! Modified 01/2006 : sea flux parameterization.
31 !! Modified 08/2009 : LSURF_BUDGETC
32 !! Modified 01/2014 : S. Senesi : introduce sea-ice model
33 !! Modified 03/2014 : S. Belamari - add NZ0 (to choose PZ0SEA formulation)
34 !-------------------------------------------------------------------------------
35 !
36 !* 0. DECLARATIONS
37 ! ------------
38 !
39 
40 !
41 !
42 USE yomhook ,ONLY : lhook, dr_hook
43 USE parkind1 ,ONLY : jprb
44 !
45 IMPLICIT NONE
46 !
47  CHARACTER(LEN=6) :: CSEA_FLUX
48  CHARACTER(LEN=4) :: CSEA_ALB
49 REAL :: XTSTEP
50 REAL :: XOUT_TSTEP
51 REAL :: XDIAG_TSTEP
52 INTEGER :: N2M
53 LOGICAL :: L2M_MIN_ZS
54 LOGICAL :: LSURF_BUDGET
55 LOGICAL :: LRAD_BUDGET
56 LOGICAL :: LSURF_BUDGETC
57 LOGICAL :: LRESET_BUDGETC
58 LOGICAL :: LCOEF
59 LOGICAL :: LSURF_VARS
60 LOGICAL :: LPWG
61 LOGICAL :: LPRECIP
62 LOGICAL :: LPWEBB
63 LOGICAL :: LDIAG_OCEAN
64 LOGICAL :: LDIAG_SEAICE
65 INTEGER :: NZ0
66 INTEGER :: NGRVWAVES
67 REAL :: XICHCE
68  CHARACTER(LEN=6) :: CCH_DRY_DEP
69 LOGICAL :: LPROGSST
70 LOGICAL :: LPERTFLUX ! True = stochastic flux perturbation (default:False)
71 INTEGER :: NTIME_COUPLING
72 REAL :: XOCEAN_TSTEP
73  CHARACTER(LEN=6) :: CINTERPOL_SST
74  CHARACTER(LEN=6) :: CINTERPOL_SSS
75  CHARACTER(LEN=6) :: CINTERPOL_SIC
76  CHARACTER(LEN=6) :: CINTERPOL_SIT
77 REAL :: XFREEZING_SST
78 REAL :: XSIC_EFOLDING_TIME
79 REAL :: XSIT_EFOLDING_TIME
80 REAL :: XSEAICE_TSTEP
81 REAL :: XCD_ICE_CST
82 REAL :: XSI_FLX_DRV
83 !
84 namelist/nam_seafluxn/csea_flux,csea_alb, lpwg, lprecip, lpwebb, ngrvwaves, &
85  nz0, lprogsst, ntime_coupling, xocean_tstep, xichce, &
86  cinterpol_sst, cinterpol_sss, lpertflux
87 namelist/nam_diag_surfn/n2m,l2m_min_zs,lsurf_budget,lrad_budget, &
88  lsurf_budgetc,lreset_budgetc,lcoef,lsurf_vars
89 namelist/nam_ch_seafluxn/cch_dry_dep
90 namelist/nam_diag_oceann/ldiag_ocean
91 namelist/nam_seaicen/ldiag_seaice, cinterpol_sic, cinterpol_sit, &
92  xfreezing_sst, xsic_efolding_time, xsit_efolding_time,&
93  xseaice_tstep, xcd_ice_cst, xsi_flx_drv
94 !
95  CONTAINS
96 !
97 SUBROUTINE init_nam_seafluxn (O, S)
98 !
99  USE modd_ocean_n, ONLY : ocean_t
100  USE modd_seaflux_n, ONLY : seaflux_t
101 !
102  IMPLICIT NONE
103 
104 !
105  TYPE(ocean_t), INTENT(INOUT) :: o
106  TYPE(seaflux_t), INTENT(INOUT) :: s
107  REAL(KIND=JPRB) :: zhook_handle
108 
109  IF (lhook) CALL dr_hook('MODN_SEAFLUX_N:INIT_NAM_SEAFLUXN',0,zhook_handle)
110  xtstep = s%XTSTEP
111  xout_tstep = s%XOUT_TSTEP
112  csea_flux = s%CSEA_FLUX
113  csea_alb = s%CSEA_ALB
114  lpwg = s%LPWG
115  lprecip = s%LPRECIP
116  cinterpol_sst = s%CINTERPOL_SST
117  cinterpol_sss = s%CINTERPOL_SSS
118  lpwebb = s%LPWEBB
119  nz0 = s%NZ0
120  ngrvwaves = s%NGRVWAVES
121  lprogsst = o%LPROGSST
122  ntime_coupling = o%NTIME_COUPLING
123  xocean_tstep = o%XOCEAN_TSTEP
124  xichce = s%XICHCE
125  lpertflux = s%LPERTFLUX
126 IF (lhook) CALL dr_hook('MODN_SEAFLUX_N:INIT_NAM_SEAFLUXN',1,zhook_handle)
127 END SUBROUTINE init_nam_seafluxn
128 
129 SUBROUTINE update_nam_seafluxn (O, S)
130 !
131  USE modd_ocean_n, ONLY : ocean_t
132  USE modd_seaflux_n, ONLY : seaflux_t
133 !
134  IMPLICIT NONE
135 
136 !
137  TYPE(ocean_t), INTENT(INOUT) :: o
138  TYPE(seaflux_t), INTENT(INOUT) :: s
139  REAL(KIND=JPRB) :: zhook_handle
140 
141  IF (lhook) CALL dr_hook('MODN_SEAFLUX_N:UPDATE_NAM_SEAFLUXN',0,zhook_handle)
142  s%XTSTEP = xtstep
143  s%XOUT_TSTEP = xout_tstep
144  s%CSEA_FLUX = csea_flux
145  s%CSEA_ALB = csea_alb
146  s%LPWG = lpwg
147  s%LPRECIP = lprecip
148  s%CINTERPOL_SST = cinterpol_sst
149  s%CINTERPOL_SSS = cinterpol_sss
150  s%LPWEBB = lpwebb
151  s%NZ0 = nz0
152  s%NGRVWAVES = ngrvwaves
153  o%LPROGSST = lprogsst
154  o%NTIME_COUPLING = ntime_coupling
155  o%XOCEAN_TSTEP = xocean_tstep
156  s%XICHCE = xichce
157  s%LPERTFLUX = lpertflux
158 IF (lhook) CALL dr_hook('MODN_SEAFLUX_N:UPDATE_NAM_SEAFLUXN',1,zhook_handle)
159 END SUBROUTINE update_nam_seafluxn
160 !
161 SUBROUTINE init_nam_diag_surfn (DGS)
162 !
164 !
165  IMPLICIT NONE
166 
167 !
168  TYPE(diag_seaflux_t), INTENT(INOUT) :: dgs
169  REAL(KIND=JPRB) :: zhook_handle
170 
171  IF (lhook) CALL dr_hook('MODN_SEAFLUX_N:INIT_NAM_DIAG_SURFN',0,zhook_handle)
172  xdiag_tstep = dgs%XDIAG_TSTEP
173  n2m = dgs%N2M
174  l2m_min_zs = dgs%L2M_MIN_ZS
175  lsurf_budget = dgs%LSURF_BUDGET
176  lrad_budget = dgs%LRAD_BUDGET
177  lsurf_budgetc = dgs%LSURF_BUDGETC
178  lreset_budgetc = dgs%LRESET_BUDGETC
179  lcoef = dgs%LCOEF
180  lsurf_vars = dgs%LSURF_VARS
181 IF (lhook) CALL dr_hook('MODN_SEAFLUX_N:INIT_NAM_DIAG_SURFN',1,zhook_handle)
182 END SUBROUTINE init_nam_diag_surfn
183 
184 SUBROUTINE update_nam_diag_surfn (DGS)
185 !
187 !
188  IMPLICIT NONE
189 
190 !
191  TYPE(diag_seaflux_t), INTENT(INOUT) :: dgs
192  REAL(KIND=JPRB) :: zhook_handle
193 
194  IF (lhook) CALL dr_hook('MODN_SEAFLUX_N:UPDATE_NAM_DIAG_SURFN',0,zhook_handle)
195  dgs%XDIAG_TSTEP = xdiag_tstep
196  dgs%N2M = n2m
197  dgs%L2M_MIN_ZS = l2m_min_zs
198  dgs%LSURF_BUDGET = lsurf_budget
199  dgs%LRAD_BUDGET = lrad_budget
200  dgs%LSURF_BUDGETC = lsurf_budgetc
201  dgs%LRESET_BUDGETC = lreset_budgetc
202  dgs%LCOEF = lcoef
203  dgs%LSURF_VARS = lsurf_vars
204 IF (lhook) CALL dr_hook('MODN_SEAFLUX_N:UPDATE_NAM_DIAG_SURFN',1,zhook_handle)
205 END SUBROUTINE update_nam_diag_surfn
206 !
207 SUBROUTINE init_nam_ch_seafluxn (CHS)
208 !
209  USE modd_ch_seaflux_n, ONLY : ch_seaflux_t
210 !
211  IMPLICIT NONE
212 
213 !
214  TYPE(ch_seaflux_t), INTENT(INOUT) :: chs
215  REAL(KIND=JPRB) :: zhook_handle
216 
217  IF (lhook) CALL dr_hook('MODN_SEAFLUX_N:INIT_NAM_CH_SEAFLUXN',0,zhook_handle)
218  cch_dry_dep = chs%CCH_DRY_DEP
219 IF (lhook) CALL dr_hook('MODN_SEAFLUX_N:INIT_NAM_CH_SEAFLUXN',1,zhook_handle)
220 END SUBROUTINE init_nam_ch_seafluxn
221 
222 SUBROUTINE update_nam_ch_seafluxn (CHS)
223 !
224  USE modd_ch_seaflux_n, ONLY : ch_seaflux_t
225 !
226  IMPLICIT NONE
227 
228 !
229  TYPE(ch_seaflux_t), INTENT(INOUT) :: chs
230  REAL(KIND=JPRB) :: zhook_handle
231 
232  IF (lhook) CALL dr_hook('MODN_SEAFLUX_N:UPDATE_NAM_CH_SEAFLUXN',0,zhook_handle)
233  chs%CCH_DRY_DEP = cch_dry_dep
234 IF (lhook) CALL dr_hook('MODN_SEAFLUX_N:UPDATE_NAM_CH_SEAFLUXN',1,zhook_handle)
235 END SUBROUTINE update_nam_ch_seafluxn
236 
237 SUBROUTINE init_nam_diag_oceann (DGO)
238 !
239  USE modd_diag_ocean_n, ONLY : diag_ocean_t
240 !
241  IMPLICIT NONE
242 
243 !
244  TYPE(diag_ocean_t), INTENT(INOUT) :: dgo
245  REAL(KIND=JPRB) :: zhook_handle
246 
247  IF (lhook) CALL dr_hook('MODN_SEAFLUX_N:INIT_NAM_DIAG_OCEANN',0,zhook_handle)
248  ldiag_ocean = dgo%LDIAG_OCEAN
249 IF (lhook) CALL dr_hook('MODN_SEAFLUX_N:INIT_NAM_DIAG_OCEANN',1,zhook_handle)
250 END SUBROUTINE init_nam_diag_oceann
251 
252 SUBROUTINE update_nam_diag_oceann (DGO)
253 !
254  USE modd_diag_ocean_n, ONLY : diag_ocean_t
255 !
256  IMPLICIT NONE
257 
258 !
259  TYPE(diag_ocean_t), INTENT(INOUT) :: dgo
260  REAL(KIND=JPRB) :: zhook_handle
261 
262  IF (lhook) CALL dr_hook('MODN_SEAFLUX_N:UPDATE_NAM_DIAG_OCEANN',0,zhook_handle)
263  dgo%LDIAG_OCEAN = ldiag_ocean
264 IF (lhook) CALL dr_hook('MODN_SEAFLUX_N:UPDATE_NAM_DIAG_OCEANN',1,zhook_handle)
265 END SUBROUTINE update_nam_diag_oceann
266 
267 SUBROUTINE init_nam_seaicen (DGSI, S)
268 !
270  USE modd_seaflux_n, ONLY : seaflux_t
271 !
272  IMPLICIT NONE
273 
274 !
275  TYPE(diag_seaice_t), INTENT(INOUT) :: dgsi
276  TYPE(seaflux_t), INTENT(INOUT) :: s
277  REAL(KIND=JPRB) :: zhook_handle
278 
279  IF (lhook) CALL dr_hook('MODN_SEAFLUX_N:INIT_NAM_SEAICEN',0,zhook_handle)
280  ldiag_seaice = dgsi%LDIAG_SEAICE
281  cinterpol_sic = s%CINTERPOL_SIC
282  cinterpol_sit = s%CINTERPOL_SIT
283  xsic_efolding_time=s%XSIC_EFOLDING_TIME
284  xsit_efolding_time=s%XSIT_EFOLDING_TIME
285  xseaice_tstep=s%XSEAICE_TSTEP
286  xfreezing_sst = s%XFREEZING_SST
287  xcd_ice_cst = s%XCD_ICE_CST
288  xsi_flx_drv = s%XSI_FLX_DRV
289 IF (lhook) CALL dr_hook('MODN_SEAFLUX_N:INIT_NAM_SEAICEN',1,zhook_handle)
290 END SUBROUTINE init_nam_seaicen
291 
292 SUBROUTINE update_nam_seaicen (DGSI, S)
293 !
295  USE modd_seaflux_n, ONLY : seaflux_t
296 !
297  IMPLICIT NONE
298 
299 !
300  TYPE(diag_seaice_t), INTENT(INOUT) :: dgsi
301  TYPE(seaflux_t), INTENT(INOUT) :: s
302  REAL(KIND=JPRB) :: zhook_handle
303 
304  IF (lhook) CALL dr_hook('MODN_SEAFLUX_N:UPDATE_NAM_SEAICEN',0,zhook_handle)
305  dgsi%LDIAG_SEAICE = ldiag_seaice
306  s%CINTERPOL_SIC = cinterpol_sic
307  s%CINTERPOL_SIT = cinterpol_sit
308  s%XSIC_EFOLDING_TIME = xsic_efolding_time
309  s%XSIT_EFOLDING_TIME = xsit_efolding_time
310  s%XSEAICE_TSTEP = xseaice_tstep
311  s%XFREEZING_SST = xfreezing_sst
312  s%XCD_ICE_CST = xcd_ice_cst
313  s%XSI_FLX_DRV = xsi_flx_drv
314 IF (lhook) CALL dr_hook('MODN_SEAFLUX_N:UPDATE_NAM_SEAICEN',1,zhook_handle)
315 END SUBROUTINE update_nam_seaicen
316 
317 END MODULE modn_seaflux_n
subroutine update_nam_ch_seafluxn(CHS)
subroutine init_nam_ch_seafluxn(CHS)
subroutine init_nam_seaicen(DGSI, S)
subroutine init_nam_diag_surfn(DGF)
subroutine update_nam_diag_surfn(DGF)
subroutine init_nam_diag_oceann(DGO)
subroutine update_nam_seafluxn(O, S)
subroutine update_nam_seaicen(DGSI, S)
subroutine update_nam_diag_oceann(DGO)
subroutine init_nam_seafluxn(O, S)