SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
modd_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 !!**** *MODD_SEAFLUX_n - declaration of surface parameters for an inland water surface
10 !!
11 !! PURPOSE
12 !! -------
13 ! Declaration of surface parameters
14 !
15 !!
16 !!** IMPLICIT ARGUMENTS
17 !! ------------------
18 !! None
19 !!
20 !! REFERENCE
21 !! ---------
22 !!
23 !! AUTHOR
24 !! ------
25 !! V. Masson *Meteo France*
26 !!
27 !! MODIFICATIONS
28 !! -------------
29 !! Original 01/2004
30 !! S. Senesi 01/2014 adapt to fractional seaice, and to seaice scheme
31 !! S. Belamari 03/2014 Include NZ0
32 !
33 !* 0. DECLARATIONS
34 ! ------------
35 !
36 USE modd_surf_par, ONLY : xundef
38 !
39 USE modd_types_glt, ONLY : t_glt
40 !
41 !
42 USE yomhook ,ONLY : lhook, dr_hook
43 USE parkind1 ,ONLY : jprb
44 !
45 IMPLICIT NONE
46 
48 !
49 ! General surface:
50 !
51  REAL, POINTER, DIMENSION(:) :: XZS ! orography
52  REAL, POINTER, DIMENSION(:,:) :: XCOVER ! fraction of each ecosystem (-)
53  LOGICAL, POINTER, DIMENSION(:):: LCOVER ! GCOVER(i)=T --> ith cover field is not 0.
54  LOGICAL :: LSBL ! T: SBL scheme between sea and atm. forcing level
55 ! ! F: no atmospheric layers below forcing level
56  LOGICAL :: LHANDLE_SIC ! T: we do weight seaice and open sea fluxes
57  CHARACTER(LEN=6) :: CSEAICE_SCHEME! Name of the seaice scheme
58  REAL, POINTER, DIMENSION(:) :: XSEABATHY ! bathymetry
59 !
60  LOGICAL :: LINTERPOL_SST ! Interpolation of monthly SST
61  CHARACTER(LEN=6) :: CINTERPOL_SST ! Interpolation method of monthly SST
62  LOGICAL :: LINTERPOL_SSS ! Interpolation of monthly SSS
63  CHARACTER(LEN=6) :: CINTERPOL_SSS ! Interpolation method of monthly SSS
64  LOGICAL :: LINTERPOL_SIC ! Interpolation of monthly SIC
65  CHARACTER(LEN=6) :: CINTERPOL_SIC ! Interpolation method of monthly SIC
66  LOGICAL :: LINTERPOL_SIT ! Interpolation of monthly SIT
67  CHARACTER(LEN=6) :: CINTERPOL_SIT ! Interpolation method of monthly SIT
68  REAL :: XFREEZING_SST ! Value marking frozen sea in SST data
69  REAL :: XSIC_EFOLDING_TIME ! For damping of SIC (days)
70  REAL :: XSIT_EFOLDING_TIME ! For damping of SIT (days)
71  REAL :: XSEAICE_TSTEP ! Sea ice model time step
72  REAL :: XCD_ICE_CST ! Turbulent exchange coefficient for seaice
73  REAL :: XSI_FLX_DRV ! Derivative of fluxes on seaice w.r.t to the temperature (W m-2 K-1)
74 
75 !
76 ! Type of formulation for the fluxes
77 !
78  CHARACTER(LEN=6) :: CSEA_FLUX ! type of flux computation
79  CHARACTER(LEN=4) :: CSEA_ALB ! type of albedo
80  LOGICAL :: LPWG ! flag for gust
81  LOGICAL :: LPRECIP ! flag for precip correction
82  LOGICAL :: LPWEBB ! flag for Webb correction
83  INTEGER :: NZ0 ! set to 0,1 or 2 according to Z0 formulation
84  ! 0= ARPEGE / 1= Smith (1988) / 2= Direct
85  INTEGER :: NGRVWAVES ! set to 0,1 or 2 according to the
86  ! gravity waves model used in coare30_flux
87  REAL :: XICHCE ! CE coef calculation for ECUME
88  LOGICAL :: LPERTFLUX ! flag for stochastic flux perturbation
89 !
90 ! Sea/Ocean:
91 !
92  REAL, POINTER, DIMENSION(:) :: XSST ! sea surface temperature
93  REAL, POINTER, DIMENSION(:) :: XSSS ! sea surface salinity
94  REAL, POINTER, DIMENSION(:) :: XTICE ! sea ice temperature
95  REAL, POINTER, DIMENSION(:) :: XSIC ! sea ice concentration ( constraint for seaice scheme )
96  REAL, POINTER, DIMENSION(:) :: XSST_INI! initial sea surface temperature
97  REAL, POINTER, DIMENSION(:) :: XZ0 ! roughness length
98  REAL, POINTER, DIMENSION(:) :: XZ0H ! roughness length for heat
99  REAL, POINTER, DIMENSION(:) :: XEMIS ! emissivity
100  REAL, POINTER, DIMENSION(:) :: XDIR_ALB! direct albedo
101  REAL, POINTER, DIMENSION(:) :: XSCA_ALB! diffuse albedo
102  REAL, POINTER, DIMENSION(:) :: XICE_ALB! sea-ice albedo from seaice model (ESM or embedded)
103  REAL, POINTER, DIMENSION(:) :: XUMER ! U component of sea current (for ESM coupling)
104  REAL, POINTER, DIMENSION(:) :: XVMER ! V component of sea current (for ESM coupling)
105 !
106  REAL, POINTER, DIMENSION(:,:) :: XSST_MTH! monthly sea surface temperature (precedent, current and next)
107  REAL, POINTER, DIMENSION(:,:) :: XSSS_MTH! monthly sea surface salinity (precedent, current and next)
108  REAL, POINTER, DIMENSION(:,:) :: XSIC_MTH! monthly sea ice cover (precedent, current and next)
109  REAL, POINTER, DIMENSION(:,:) :: XSIT_MTH! monthly sea ice thickness (precedent, current and next)
110  REAL, POINTER, DIMENSION(:) :: XFSIC ! nudging (or forcing) sea ice cover
111  REAL, POINTER, DIMENSION(:) :: XFSIT ! nudging sea ice thickness
112 !
113  REAL, POINTER, DIMENSION(:) :: XCPL_SEA_WIND ! 10m wind speed for ESM coupling
114  REAL, POINTER, DIMENSION(:) :: XCPL_SEA_FWSU ! zonal wind stress for ESM coupling
115  REAL, POINTER, DIMENSION(:) :: XCPL_SEA_FWSV ! meridian wind stress for ESM coupling
116  REAL, POINTER, DIMENSION(:) :: XCPL_SEA_SNET ! Solar net heat flux
117  REAL, POINTER, DIMENSION(:) :: XCPL_SEA_HEAT ! Non solar net heat flux
118  REAL, POINTER, DIMENSION(:) :: XCPL_SEA_EVAP ! Evaporation for ESM coupling
119  REAL, POINTER, DIMENSION(:) :: XCPL_SEA_RAIN ! Rainfall for ESM coupling
120  REAL, POINTER, DIMENSION(:) :: XCPL_SEA_SNOW ! Snowfall for ESM coupling
121  REAL, POINTER, DIMENSION(:) :: XCPL_SEA_FWSM ! wind stress for ESM coupling
122 !
123  REAL, POINTER, DIMENSION(:) :: XCPL_SEAICE_SNET ! Solar net heat flux for ESM coupling
124  REAL, POINTER, DIMENSION(:) :: XCPL_SEAICE_HEAT ! Non solar net heat flux
125  REAL, POINTER, DIMENSION(:) :: XCPL_SEAICE_EVAP ! Ice sublimation for ESM coupling
126 !
127  REAL, POINTER, DIMENSION(:) :: XPERTFLUX ! Stochastic flux perturbation pattern
128 !
129 ! Sea-ice :
130 !
131  TYPE(t_glt) :: TGLT ! Sea-ice state , diagnostics and auxilliaries
132  ! for the case of embedded Gelato Seaice model
133 !
134 ! Date:
135 !
136  TYPE (date_time) :: TTIME ! current date and time
137  TYPE (date_time) :: TZTIME
138  LOGICAL :: LTZTIME_DONE
139  INTEGER :: JSX
140 !
141 ! Time-step:
142 !
143  REAL :: XTSTEP ! time step
144 !
145  REAL :: XOUT_TSTEP ! output writing time step
146 !
147 !
148 !
149 END TYPE seaflux_t
150 
151 
152 
153  CONTAINS
154 
155 !
156 
157 
158 
159 
160 SUBROUTINE seaflux_init(YSEAFLUX)
161 TYPE(seaflux_t), INTENT(INOUT) :: yseaflux
162 REAL(KIND=JPRB) :: zhook_handle
163 IF (lhook) CALL dr_hook("MODD_SEAFLUX_N:SEAFLUX_INIT",0,zhook_handle)
164  nullify(yseaflux%XZS)
165  nullify(yseaflux%XCOVER)
166  nullify(yseaflux%LCOVER)
167  nullify(yseaflux%XSEABATHY)
168  nullify(yseaflux%XSST)
169  nullify(yseaflux%XSSS)
170  nullify(yseaflux%XSIC)
171  nullify(yseaflux%XTICE)
172  nullify(yseaflux%XSST_INI)
173  nullify(yseaflux%XZ0)
174  nullify(yseaflux%XZ0H)
175  nullify(yseaflux%XEMIS)
176  nullify(yseaflux%XDIR_ALB)
177  nullify(yseaflux%XSCA_ALB)
178  nullify(yseaflux%XICE_ALB)
179  nullify(yseaflux%XUMER)
180  nullify(yseaflux%XVMER)
181  nullify(yseaflux%XSST_MTH)
182  nullify(yseaflux%XSSS_MTH)
183  nullify(yseaflux%XSIC_MTH)
184  nullify(yseaflux%XSIT_MTH)
185  nullify(yseaflux%XFSIC)
186  nullify(yseaflux%XFSIT)
187  nullify(yseaflux%XCPL_SEA_WIND)
188  nullify(yseaflux%XCPL_SEA_FWSU)
189  nullify(yseaflux%XCPL_SEA_FWSV)
190  nullify(yseaflux%XCPL_SEA_SNET)
191  nullify(yseaflux%XCPL_SEA_HEAT)
192  nullify(yseaflux%XCPL_SEA_EVAP)
193  nullify(yseaflux%XCPL_SEA_RAIN)
194  nullify(yseaflux%XCPL_SEA_SNOW)
195  nullify(yseaflux%XCPL_SEA_FWSM)
196  nullify(yseaflux%XCPL_SEAICE_SNET)
197  nullify(yseaflux%XCPL_SEAICE_HEAT)
198  nullify(yseaflux%XCPL_SEAICE_EVAP)
199  nullify(yseaflux%XPERTFLUX)
200 yseaflux%LSBL=.false.
201 yseaflux%LHANDLE_SIC=.false.
202 yseaflux%CSEAICE_SCHEME='NONE '
203 yseaflux%LINTERPOL_SST=.false.
204 yseaflux%CINTERPOL_SST=' '
205 yseaflux%LINTERPOL_SSS=.false.
206 yseaflux%CINTERPOL_SSS=' '
207 yseaflux%LINTERPOL_SIC=.false.
208 yseaflux%CINTERPOL_SIC=' '
209 yseaflux%LINTERPOL_SIT=.false.
210 yseaflux%CINTERPOL_SIT=' '
211 yseaflux%XFREEZING_SST=-1.8
212 yseaflux%XSIC_EFOLDING_TIME=0. ! means : no damping
213 yseaflux%XSIT_EFOLDING_TIME=0. ! means : no damping
214 yseaflux%XSEAICE_TSTEP=xundef
215 yseaflux%XCD_ICE_CST=0.
216 yseaflux%XSI_FLX_DRV=-20.
217 yseaflux%CSEA_FLUX=' '
218 yseaflux%CSEA_ALB=' '
219 yseaflux%LPWG=.false.
220 yseaflux%LPRECIP=.false.
221 yseaflux%LPWEBB=.false.
222 yseaflux%NZ0=0
223 yseaflux%NGRVWAVES=0
224 yseaflux%XICHCE=0.
225 yseaflux%LPERTFLUX=.false.
226 yseaflux%JSX=0
227 yseaflux%LTZTIME_DONE = .false.
228 yseaflux%XTSTEP=0.
229 yseaflux%XOUT_TSTEP=0.
230 IF (lhook) CALL dr_hook("MODD_SEAFLUX_N:SEAFLUX_INIT",1,zhook_handle)
231 END SUBROUTINE seaflux_init
232 
233 
234 END MODULE modd_seaflux_n
subroutine seaflux_init(YSEAFLUX)