SURFEX v8.1
General documentation of Surfex
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
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
81 REAL :: xcd_ice_cst
82 REAL :: xsi_flx_drv
83 !
84 NAMELIST/nam_seafluxn/csea_flux,csea_alb, lpwg, lprecip, lpwebb, ngrvwaves, &
87 NAMELIST/nam_diag_surfn/n2m,l2m_min_zs,lsurf_budget,lrad_budget, &
89 NAMELIST/nam_ch_seafluxn/cch_dry_dep
90 NAMELIST/nam_diag_oceann/ldiag_ocean
91 NAMELIST/nam_seaicen/ldiag_misc_seaice, cinterpol_sic, cinterpol_sit, &
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 (DGO)
162 !
163  USE modd_diag_n, ONLY : diag_options_t
164 !
165  IMPLICIT NONE
166 
167 !
168  TYPE(diag_options_t), INTENT(INOUT) :: DGO
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 = dgo%XDIAG_TSTEP
173  n2m = dgo%N2M
174  l2m_min_zs = dgo%L2M_MIN_ZS
175  lsurf_budget = dgo%LSURF_BUDGET
176  lrad_budget = dgo%LRAD_BUDGET
177  lsurf_budgetc = dgo%LSURF_BUDGETC
178  lreset_budgetc = dgo%LRESET_BUDGETC
179  lcoef = dgo%LCOEF
180  lsurf_vars = dgo%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 (DGO)
185 !
186  USE modd_diag_n, ONLY : diag_options_t
187 !
188  IMPLICIT NONE
189 
190 !
191  TYPE(diag_options_t), INTENT(INOUT) :: DGO
192  REAL(KIND=JPRB) :: ZHOOK_HANDLE
193 
194  IF (lhook) CALL dr_hook('MODN_SEAFLUX_N:UPDATE_NAM_DIAG_SURFN',0,zhook_handle)
195  dgo%XDIAG_TSTEP = xdiag_tstep
196  dgo%N2M = n2m
197  dgo%L2M_MIN_ZS = l2m_min_zs
198  dgo%LSURF_BUDGET = lsurf_budget
199  dgo%LRAD_BUDGET = lrad_budget
200  dgo%LSURF_BUDGETC = lsurf_budgetc
201  dgo%LRESET_BUDGETC = lreset_budgetc
202  dgo%LCOEF = lcoef
203  dgo%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 (DGMSI, S)
268 !
270  USE modd_seaflux_n, ONLY : seaflux_t
271 !
272  IMPLICIT NONE
273 
274 !
275  TYPE(diag_misc_seaice_t), INTENT(INOUT) :: DGMSI
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_misc_seaice = dgmsi%LDIAG_MISC_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 (DGMSI, S)
293 !
295  USE modd_seaflux_n, ONLY : seaflux_t
296 !
297  IMPLICIT NONE
298 !
299  TYPE(diag_misc_seaice_t), INTENT(INOUT) :: DGMSI
300  TYPE(seaflux_t), INTENT(INOUT) :: S
301  REAL(KIND=JPRB) :: ZHOOK_HANDLE
302 
303  IF (lhook) CALL dr_hook('MODN_SEAFLUX_N:UPDATE_NAM_SEAICEN',0,zhook_handle)
304  dgmsi%LDIAG_MISC_SEAICE = ldiag_misc_seaice
305  s%CINTERPOL_SIC = cinterpol_sic
306  s%CINTERPOL_SIT = cinterpol_sit
307  s%XSIC_EFOLDING_TIME = xsic_efolding_time
308  s%XSIT_EFOLDING_TIME = xsit_efolding_time
309  s%XSEAICE_TSTEP = xseaice_tstep
310  s%XFREEZING_SST = xfreezing_sst
311  s%XCD_ICE_CST = xcd_ice_cst
312  s%XSI_FLX_DRV = xsi_flx_drv
313 IF (lhook) CALL dr_hook('MODN_SEAFLUX_N:UPDATE_NAM_SEAICEN',1,zhook_handle)
314 END SUBROUTINE update_nam_seaicen
315 
316 END MODULE modn_seaflux_n
subroutine init_nam_ch_seafluxn(CHS)
character(len=6) cinterpol_sic
subroutine init_nam_seafluxn(O, S)
logical ldiag_misc_seaice
subroutine init_nam_diag_surfn(DGO)
logical lsurf_budget
character(len=6) csea_flux
subroutine update_nam_diag_oceann(DGO)
integer, parameter jprb
Definition: parkind1.F90:32
logical lsurf_budgetc
character(len=4) csea_alb
character(len=6) cinterpol_sst
integer ntime_coupling
subroutine init_nam_diag_oceann(DGO)
logical lhook
Definition: yomhook.F90:15
subroutine update_nam_seaicen(DGMSI, S)
character(len=6) cch_dry_dep
logical lreset_budgetc
subroutine update_nam_diag_surfn(DGO)
subroutine update_nam_seafluxn(O, S)
subroutine update_nam_ch_seafluxn(CHS)
character(len=6) cinterpol_sss
character(len=6) cinterpol_sit
subroutine init_nam_seaicen(DGMSI, S)