1 !SURFEX_LIC Copyright 1994-2014 Meteo-France
2 !SURFEX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
3 !SURFEX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
4 !SURFEX_LIC for details. version 1.
6 SUBROUTINE WRITE_DIAG_SEB_SEAFLUX_n(HPROGRAM)
7 ! #################################
9 !!**** *WRITE_DIAG_SEB_SEAFLUX_n* - write the SEAFLUX diagnostic fields
24 !! V. Masson *Meteo France*
29 !! Modified 01/2006 : sea flux parameterization.
30 !! Modified 08/2009 : cumulated diag
31 !-------------------------------------------------------------------------------
36 USE MODD_DIAG_SURF_ATM_n,ONLY : LPROVAR_TO_DIAG, LRESET_BUDGETC
38 USE MODD_SEAFLUX_n, ONLY : LINTERPOL_SST
39 USE MODD_SURF_PAR, ONLY : XUNDEF
40 USE MODD_DIAG_SEAFLUX_n,ONLY : N2M, LRAD_BUDGET, LSURF_BUDGET, &
41 LCOEF, LSURF_VARS, XDIAG_SST, &
42 XRN, XH, XLE, XLEI, XGFLUX, &
43 XRI, XCD, XCH, XCE, XZ0, XZ0H, &
44 XT2M, XQ2M, XHU2M, XT2M_MIN, XT2M_MAX, &
45 XZON10M, XMER10M, XQS, &
46 XSWD, XSWU, XLWD, XLWU, XSWBD, XSWBU, &
47 XFMU, XFMV, LSURF_BUDGETC, &
48 XRNC, XHC, XLEC, XLEIC, XGFLUXC, XSWDC, &
49 XSWUC, XLWDC, XLWUC, XFMUC, XFMVC, &
50 XHU2M_MIN, XHU2M_MAX, XWIND10M, XWIND10M_MAX
52 USE MODD_CH_SEAFLUX_n, ONLY : XDEP, CCH_DRY_DEP, CCH_NAMES, NBEQ
54 USE MODI_INIT_IO_SURF_n
56 USE MODI_END_IO_SURF_n
59 USE YOMHOOK ,ONLY : LHOOK, DR_HOOK
60 USE PARKIND1 ,ONLY : JPRB
64 !* 0.1 Declarations of arguments
65 ! -------------------------
67 CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! program calling
69 !* 0.2 Declarations of local variables
70 ! -------------------------------
72 INTEGER :: IRESP ! IRESP : return-code if a problem appears
73 CHARACTER(LEN=LEN_HREC) :: YRECFM ! Name of the article to be read
74 CHARACTER(LEN=100):: YCOMMENT ! Comment string
75 CHARACTER(LEN=2) :: YNUM
78 REAL(KIND=JPRB) :: ZHOOK_HANDLE
80 !-------------------------------------------------------------------------------
82 ! Initialisation for IO
84 IF (LHOOK) CALL DR_HOOK('WRITE_DIAG_SEB_SEAFLUX_N',0,ZHOOK_HANDLE)
85 CALL INIT_IO_SURF_n(HPROGRAM,'SEA ','SEAFLX','WRITE')
88 !* 2. Richardson number :
94 YCOMMENT='X_Y_'//YRECFM
96 CALL WRITE_SURF(HPROGRAM,YRECFM,XRI(:),IRESP,HCOMMENT=YCOMMENT)
100 !* 3. Energy fluxes :
103 IF (LSURF_BUDGET) THEN
106 YCOMMENT='X_Y_'//YRECFM//' (W/m2)'
108 CALL WRITE_SURF(HPROGRAM,YRECFM,XRN(:),IRESP,HCOMMENT=YCOMMENT)
111 YCOMMENT='X_Y_'//YRECFM//' (W/m2)'
113 CALL WRITE_SURF(HPROGRAM,YRECFM,XH(:),IRESP,HCOMMENT=YCOMMENT)
116 YCOMMENT='X_Y_'//YRECFM//' (W/m2)'
118 CALL WRITE_SURF(HPROGRAM,YRECFM,XLE(:),IRESP,HCOMMENT=YCOMMENT)
121 YCOMMENT='X_Y_'//YRECFM//' (W/m2)'
123 CALL WRITE_SURF(HPROGRAM,YRECFM,XLEI(:),IRESP,HCOMMENT=YCOMMENT)
126 YCOMMENT='X_Y_'//YRECFM//' (W/m2)'
128 CALL WRITE_SURF(HPROGRAM,YRECFM,XGFLUX(:),IRESP,HCOMMENT=YCOMMENT)
130 IF (LRAD_BUDGET) THEN
133 YCOMMENT='X_Y_'//YRECFM//' (W/m2)'
135 CALL WRITE_SURF(HPROGRAM,YRECFM,XSWD(:),IRESP,HCOMMENT=YCOMMENT)
138 YCOMMENT='X_Y_'//YRECFM//' (W/m2)'
140 CALL WRITE_SURF(HPROGRAM,YRECFM,XSWU(:),IRESP,HCOMMENT=YCOMMENT)
143 YCOMMENT='X_Y_'//YRECFM//' (W/m2)'
145 CALL WRITE_SURF(HPROGRAM,YRECFM,XLWD(:),IRESP,HCOMMENT=YCOMMENT)
148 YCOMMENT='X_Y_'//YRECFM//' (W/m2)'
150 CALL WRITE_SURF(HPROGRAM,YRECFM,XLWU(:),IRESP,HCOMMENT=YCOMMENT)
152 DO JSW=1, SIZE(XSWBD,2)
155 YRECFM='SWD_SEA_'//YNUM
156 YCOMMENT='X_Y_'//YRECFM//' (W/m2)'
158 CALL WRITE_SURF(HPROGRAM,YRECFM,XSWBD(:,JSW),IRESP,HCOMMENT=YCOMMENT)
160 YRECFM='SWU_SEA_'//YNUM
161 YCOMMENT='X_Y_'//YRECFM//' (W/m2)'
163 CALL WRITE_SURF(HPROGRAM,YRECFM,XSWBU(:,JSW),IRESP,HCOMMENT=YCOMMENT)
170 YCOMMENT='X_Y_'//YRECFM//' (kg/ms2)'
172 CALL WRITE_SURF(HPROGRAM,YRECFM,XFMU(:),IRESP,HCOMMENT=YCOMMENT)
175 YCOMMENT='X_Y_'//YRECFM//' (kg/ms2)'
177 CALL WRITE_SURF(HPROGRAM,YRECFM,XFMV(:),IRESP,HCOMMENT=YCOMMENT)
181 IF (LSURF_BUDGETC) THEN
184 YCOMMENT='X_Y_'//YRECFM//' (J/m2)'
186 CALL WRITE_SURF(HPROGRAM,YRECFM,XRNC(:),IRESP,HCOMMENT=YCOMMENT)
189 YCOMMENT='X_Y_'//YRECFM//' (J/m2)'
191 CALL WRITE_SURF(HPROGRAM,YRECFM,XHC(:),IRESP,HCOMMENT=YCOMMENT)
194 YCOMMENT='X_Y_'//YRECFM//' (J/m2)'
196 CALL WRITE_SURF(HPROGRAM,YRECFM,XLEC(:),IRESP,HCOMMENT=YCOMMENT)
199 YCOMMENT='X_Y_'//YRECFM//' (J/m2)'
201 CALL WRITE_SURF(HPROGRAM,YRECFM,XLEIC(:),IRESP,HCOMMENT=YCOMMENT)
204 YCOMMENT='X_Y_'//YRECFM//' (J/m2)'
206 CALL WRITE_SURF(HPROGRAM,YRECFM,XGFLUXC(:),IRESP,HCOMMENT=YCOMMENT)
208 IF (LRAD_BUDGET .OR. (LSURF_BUDGETC .AND. .NOT.LRESET_BUDGETC)) THEN
211 YCOMMENT='X_Y_'//YRECFM//' (J/m2)'
213 CALL WRITE_SURF(HPROGRAM,YRECFM,XSWDC(:),IRESP,HCOMMENT=YCOMMENT)
216 YCOMMENT='X_Y_'//YRECFM//' (J/m2)'
218 CALL WRITE_SURF(HPROGRAM,YRECFM,XSWUC(:),IRESP,HCOMMENT=YCOMMENT)
221 YCOMMENT='X_Y_'//YRECFM//' (J/m2)'
223 CALL WRITE_SURF(HPROGRAM,YRECFM,XLWDC(:),IRESP,HCOMMENT=YCOMMENT)
226 YCOMMENT='X_Y_'//YRECFM//' (J/m2)'
228 CALL WRITE_SURF(HPROGRAM,YRECFM,XLWUC(:),IRESP,HCOMMENT=YCOMMENT)
233 YCOMMENT='X_Y_'//YRECFM//' (kg/ms)'
235 CALL WRITE_SURF(HPROGRAM,YRECFM,XFMUC(:),IRESP,HCOMMENT=YCOMMENT)
238 YCOMMENT='X_Y_'//YRECFM//' (kg/ms)'
240 CALL WRITE_SURF(HPROGRAM,YRECFM,XFMVC(:),IRESP,HCOMMENT=YCOMMENT)
244 !* 4. transfer coefficients
245 ! ---------------------
250 YCOMMENT='X_Y_'//YRECFM//' (W/s2)'
252 CALL WRITE_SURF(HPROGRAM,YRECFM,XCD(:),IRESP,HCOMMENT=YCOMMENT)
255 YCOMMENT='X_Y_'//YRECFM//' (W/s)'
257 CALL WRITE_SURF(HPROGRAM,YRECFM,XCH(:),IRESP,HCOMMENT=YCOMMENT)
260 YCOMMENT='X_Y_'//YRECFM//' (W/s/K)'
262 CALL WRITE_SURF(HPROGRAM,YRECFM,XCE(:),IRESP,HCOMMENT=YCOMMENT)
265 YCOMMENT='X_Y_'//YRECFM//' (M)'
267 CALL WRITE_SURF(HPROGRAM,YRECFM,XZ0(:),IRESP,HCOMMENT=YCOMMENT)
270 YCOMMENT='X_Y_'//YRECFM//' (M)'
272 CALL WRITE_SURF(HPROGRAM,YRECFM,XZ0H(:),IRESP,HCOMMENT=YCOMMENT)
277 !* 5. Surface humidity
283 YCOMMENT='X_Y_'//YRECFM//' (KG/KG)'
285 CALL WRITE_SURF(HPROGRAM,YRECFM,XQS(:),IRESP,HCOMMENT=YCOMMENT)
291 !* 6. parameters at 2 and 10 meters :
292 ! -----------------------------
297 YCOMMENT='X_Y_'//YRECFM//' (K)'
299 CALL WRITE_SURF(HPROGRAM,YRECFM,XT2M(:),IRESP,HCOMMENT=YCOMMENT)
302 YCOMMENT='X_Y_'//YRECFM//' (K)'
304 CALL WRITE_SURF(HPROGRAM,YRECFM,XT2M_MIN(:),IRESP,HCOMMENT=YCOMMENT)
308 YCOMMENT='X_Y_'//YRECFM//' (K)'
310 CALL WRITE_SURF(HPROGRAM,YRECFM,XT2M_MAX(:),IRESP,HCOMMENT=YCOMMENT)
314 YCOMMENT='X_Y_'//YRECFM//' (KG/KG)'
316 CALL WRITE_SURF(HPROGRAM,YRECFM,XQ2M(:),IRESP,HCOMMENT=YCOMMENT)
319 YCOMMENT='X_Y_'//YRECFM//' (-)'
321 CALL WRITE_SURF(HPROGRAM,YRECFM,XHU2M(:),IRESP,HCOMMENT=YCOMMENT)
324 YCOMMENT='X_Y_'//YRECFM//' (-)'
326 CALL WRITE_SURF(HPROGRAM,YRECFM,XHU2M_MIN(:),IRESP,HCOMMENT=YCOMMENT)
330 YCOMMENT='X_Y_'//YRECFM//' (-)'
332 CALL WRITE_SURF(HPROGRAM,YRECFM,XHU2M_MAX(:),IRESP,HCOMMENT=YCOMMENT)
336 YCOMMENT='X_Y_'//YRECFM//' (M/S)'
338 CALL WRITE_SURF(HPROGRAM,YRECFM,XZON10M(:),IRESP,HCOMMENT=YCOMMENT)
341 YCOMMENT='X_Y_'//YRECFM//' (M/S)'
343 CALL WRITE_SURF(HPROGRAM,YRECFM,XMER10M(:),IRESP,HCOMMENT=YCOMMENT)
346 YCOMMENT='X_Y_'//YRECFM//' (M/S)'
348 CALL WRITE_SURF(HPROGRAM,YRECFM,XWIND10M(:),IRESP,HCOMMENT=YCOMMENT)
351 YCOMMENT='X_Y_'//YRECFM//' (M/S)'
353 CALL WRITE_SURF(HPROGRAM,YRECFM,XWIND10M_MAX(:),IRESP,HCOMMENT=YCOMMENT)
359 !* 7. chemical diagnostics:
360 ! --------------------
362 IF (NBEQ>0 .AND. CCH_DRY_DEP=="WES89 ") THEN
363 DO JSV = 1,SIZE(CCH_NAMES,1)
364 YRECFM='DV_SEA_'//TRIM(CCH_NAMES(JSV))
365 WRITE(YCOMMENT,'(A13,I3.3)')'(m/s) DV_SEA_',JSV
366 CALL WRITE_SURF(HPROGRAM,YRECFM,XDEP(:,JSV),IRESP,HCOMMENT=YCOMMENT)
371 !* 8. prognostic variable diagnostics:
372 ! --------------------------------
374 IF(LPROVAR_TO_DIAG.OR.LINTERPOL_SST)THEN
378 CALL WRITE_SURF(HPROGRAM,YRECFM,XDIAG_SST(:),IRESP,HCOMMENT=YCOMMENT)
382 !------------------------------------------------------------------------------
386 CALL END_IO_SURF_n(HPROGRAM)
387 IF (LHOOK) CALL DR_HOOK('WRITE_DIAG_SEB_SEAFLUX_N',1,ZHOOK_HANDLE)
390 END SUBROUTINE WRITE_DIAG_SEB_SEAFLUX_n