SURFEX v8.1
General documentation of Surfex
write_diag_seb_seaicen.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 ! #########
6  SUBROUTINE write_diag_seb_seaice_n (DTCO, DUO, U, DSO, DI, DIC, HPROGRAM)
7 ! #################################
8 !
9 !!**** *WRITE_DIAG_SEB_SEAICE_n* - write the seaice diagnostic fields
10 !!
11 !! PURPOSE
12 !! -------
13 !!
14 !!
15 !!** METHOD
16 !! ------
17 !!
18 !! REFERENCE
19 !! ---------
20 !!
21 !!
22 !! AUTHOR
23 !! ------
24 !! S.Senesi *Meteo France*
25 !!
26 !! MODIFICATIONS
27 !! -------------
28 !! Original 01/2014
29 !-------------------------------------------------------------------------------
30 !
31 !* 0. DECLARATIONS
32 ! ------------
33 !
34 !
36 USE modd_surf_atm_n, ONLY : surf_atm_t
38 !
39 USE modd_sfx_oasis, ONLY : lcpl_seaice
40 !
41 USE modi_init_io_surf_n
43 USE modi_end_io_surf_n
44 !
45 USE yomhook ,ONLY : lhook, dr_hook
46 USE parkind1 ,ONLY : jprb
47 !
48 IMPLICIT NONE
49 !
50 !* 0.1 Declarations of arguments
51 ! -------------------------
52 !
53 TYPE(data_cover_t), INTENT(INOUT) :: DTCO
54 TYPE(diag_options_t), INTENT(INOUT) :: DUO
55 TYPE(surf_atm_t), INTENT(INOUT) :: U
56 TYPE(diag_options_t), INTENT(INOUT) :: DSO
57 TYPE(diag_t), INTENT(INOUT) :: DI
58 TYPE(diag_t), INTENT(INOUT) :: DIC
59 !
60  CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! program calling
61 !
62 !* 0.2 Declarations of local variables
63 ! -------------------------------
64 !
65 INTEGER :: IRESP ! IRESP : return-code if a problem appears
66  CHARACTER(LEN=12) :: YRECFM ! Name of the article to be read
67  CHARACTER(LEN=100):: YCOMMENT ! Comment string
68  CHARACTER(LEN=2) :: YNUM
69 INTEGER :: JSV, JSW
70 !
71 REAL(KIND=JPRB) :: ZHOOK_HANDLE
72 !
73 !-------------------------------------------------------------------------------
74 !
75 ! Initialisation for IO
76 !
77 IF (lhook) CALL dr_hook('WRITE_DIAG_SEB_SEAICE_N',0,zhook_handle)
78 !
79  CALL init_io_surf_n(dtco, u, hprogram,'SEA ','SEAFLX','WRITE','SEAFLUX_DIAGNOSTICS.OUT.nc')
80 !
81 !
82 !* 8.2. Richardson number :
83 ! -----------------
84 IF (dso%N2M>=1) THEN
85  !
86  yrecfm='RI_SEAICE'
87  ycomment='X_Y_'//yrecfm
88  !
89  CALL write_surf(duo%CSELECT,hprogram,yrecfm,di%XRI(:),iresp,hcomment=ycomment)
90  !
91 END IF
92 !
93 !* 8.3 Energy fluxes :
94 ! -------------
95 !
96 IF (dso%LSURF_BUDGET) THEN
97 
98  yrecfm='RN_SEAICE'
99  ycomment='X_Y_'//yrecfm//' (W/m2)'
100  !
101  CALL write_surf(duo%CSELECT,hprogram,yrecfm,di%XRN(:),iresp,hcomment=ycomment)
102  !
103  yrecfm='H_SEAICE'
104  ycomment='X_Y_'//yrecfm//' (W/m2)'
105  !
106  CALL write_surf(duo%CSELECT,hprogram,yrecfm,di%XH(:),iresp,hcomment=ycomment)
107  !
108  yrecfm='LE_SEAICE'
109  ycomment='X_Y_'//yrecfm//' (W/m2)'
110  !
111  CALL write_surf(duo%CSELECT,hprogram,yrecfm,di%XLE(:),iresp,hcomment=ycomment)
112  !
113  yrecfm='GFLX_SEAICE'
114  ycomment='X_Y_'//yrecfm//' (W/m2)'
115  !
116  CALL write_surf(duo%CSELECT,hprogram,yrecfm,di%XGFLUX(:),iresp,hcomment=ycomment)
117  !
118  IF (dso%LRAD_BUDGET) THEN
119  !
120  yrecfm='SWU_SEAICE'
121  ycomment='X_Y_'//yrecfm//' (W/m2)'
122  !
123  CALL write_surf(duo%CSELECT,hprogram,yrecfm,di%XSWU(:),iresp,hcomment=ycomment)
124  !
125  yrecfm='LWU_SEAICE'
126  ycomment='X_Y_'//yrecfm//' (W/m2)'
127  !
128  CALL write_surf(duo%CSELECT,hprogram,yrecfm,di%XLWU(:),iresp,hcomment=ycomment)
129  !
130  DO jsw=1, SIZE(di%XSWBU,2)
131  ynum=achar(48+jsw)
132  !
133  yrecfm='SWU_SEAICE_'//ynum
134  ycomment='X_Y_'//yrecfm//' (W/m2)'
135  !
136  CALL write_surf(duo%CSELECT,hprogram,yrecfm,di%XSWBU(:,jsw),iresp,hcomment=ycomment)
137  !
138  ENDDO
139  !
140  ENDIF
141  !
142  yrecfm='FMU_SEAICE'
143  ycomment='X_Y_'//yrecfm//' (kg/ms2)'
144  !
145  CALL write_surf(duo%CSELECT,hprogram,yrecfm,di%XFMU(:),iresp,hcomment=ycomment)
146  !
147  yrecfm='FMV_SEAICE'
148  ycomment='X_Y_'//yrecfm//' (kg/ms2)'
149  !
150  CALL write_surf(duo%CSELECT,hprogram,yrecfm,di%XFMV(:),iresp,hcomment=ycomment)
151  !
152 END IF
153 !
154 IF (dso%LSURF_BUDGETC) THEN
155  !
156  yrecfm='RNC_SEAICE'
157  ycomment='X_Y_'//yrecfm//' (J/m2)'
158  !
159  CALL write_surf(duo%CSELECT,hprogram,yrecfm,dic%XRN(:),iresp,hcomment=ycomment)
160  !
161  yrecfm='HC_SEAICE'
162  ycomment='X_Y_'//yrecfm//' (J/m2)'
163  !
164  CALL write_surf(duo%CSELECT,hprogram,yrecfm,dic%XH(:),iresp,hcomment=ycomment)
165  !
166  yrecfm='LEC_SEAICE'
167  ycomment='X_Y_'//yrecfm//' (J/m2)'
168  !
169  CALL write_surf(duo%CSELECT,hprogram,yrecfm,dic%XLE(:),iresp,hcomment=ycomment)
170  !
171  yrecfm='GFLXC_SEAICE'
172  ycomment='X_Y_'//yrecfm//' (J/m2)'
173  !
174  CALL write_surf(duo%CSELECT,hprogram,yrecfm,dic%XGFLUX(:),iresp,hcomment=ycomment)
175  IF (dso%LRAD_BUDGET .OR. (dso%LSURF_BUDGETC .AND. .NOT.duo%LRESET_BUDGETC)) THEN
176  !
177  yrecfm='SWUC_SEAICE'
178  ycomment='X_Y_'//yrecfm//' (J/m2)'
179  !
180  CALL write_surf(duo%CSELECT,hprogram,yrecfm,dic%XSWU(:),iresp,hcomment=ycomment)
181  !
182  yrecfm='LWUC_SEAICE'
183  ycomment='X_Y_'//yrecfm//' (J/m2)'
184  !
185  CALL write_surf(duo%CSELECT,hprogram,yrecfm,dic%XLWU(:),iresp,hcomment=ycomment)
186  !
187  ENDIF
188  !
189  yrecfm='FMUC_SEAICE'
190  ycomment='X_Y_'//yrecfm//' (kg/ms)'
191  !
192  CALL write_surf(duo%CSELECT,hprogram,yrecfm,dic%XFMU(:),iresp,hcomment=ycomment)
193  !
194  yrecfm='FMVC_SEAICE'
195  ycomment='X_Y_'//yrecfm//' (kg/ms)'
196  !
197  CALL write_surf(duo%CSELECT,hprogram,yrecfm,dic%XFMV(:),iresp,hcomment=ycomment)
198  !
199 END IF
200 !
201 !* 8.4 transfer coefficients
202 ! ---------------------
203 !
204 IF (dso%LCOEF) THEN
205  !
206  yrecfm='CD_SEAICE'
207  ycomment='X_Y_'//yrecfm//' (W/s2)'
208  !
209  CALL write_surf(duo%CSELECT,hprogram,yrecfm,di%XCD(:),iresp,hcomment=ycomment)
210  !
211  yrecfm='CH_SEAICE'
212  ycomment='X_Y_'//yrecfm//' (W/s)'
213  !
214  CALL write_surf(duo%CSELECT,hprogram,yrecfm,di%XCH(:),iresp,hcomment=ycomment)
215  !
216  yrecfm='Z0_SEAICE'
217  ycomment='X_Y_'//yrecfm//' (M)'
218  !
219  CALL write_surf(duo%CSELECT,hprogram,yrecfm,di%XZ0(:),iresp,hcomment=ycomment)
220  !
221  yrecfm='Z0H_SEAICE'
222  ycomment='X_Y_'//yrecfm//' (M)'
223  !
224  CALL write_surf(duo%CSELECT,hprogram,yrecfm,di%XZ0H(:),iresp,hcomment=ycomment)
225  !
226 END IF
227 !
228 !
229 !* 8.5 Surface humidity
230 ! ----------------
231 !
232 IF (dso%LSURF_VARS) THEN
233  yrecfm='QS_SEAICE'
234  ycomment='X_Y_'//yrecfm//' (KG/KG)'
235  !
236  CALL write_surf(duo%CSELECT,hprogram,yrecfm,di%XQS(:),iresp,hcomment=ycomment)
237  !
238 ENDIF
239 !
240 
241 !
242 !* 8.6. parameters at 2 and 10 meters :
243 ! -----------------------------
244 !
245 IF (dso%N2M>=1) THEN
246  !
247  yrecfm='T2M_SEAICE'
248  ycomment='X_Y_'//yrecfm//' (K)'
249  !
250  CALL write_surf(duo%CSELECT,hprogram,yrecfm,di%XT2M(:),iresp,hcomment=ycomment)
251  !
252  yrecfm='Q2M_SEAICE'
253  ycomment='X_Y_'//yrecfm//' (KG/KG)'
254  !
255  CALL write_surf(duo%CSELECT,hprogram,yrecfm,di%XQ2M(:),iresp,hcomment=ycomment)
256  !
257  yrecfm='HU2M_SEAICE'
258  ycomment='X_Y_'//yrecfm//' (-)'
259  !
260  CALL write_surf(duo%CSELECT,hprogram,yrecfm,di%XHU2M(:),iresp,hcomment=ycomment)
261  !
262  yrecfm='ZON10M_SEAICE'
263  ycomment='X_Y_'//yrecfm//' (M/S)'
264  !
265  CALL write_surf(duo%CSELECT,hprogram,yrecfm,di%XZON10M(:),iresp,hcomment=ycomment)
266  !
267  yrecfm='MER10M_SEAICE'
268  ycomment='X_Y_'//yrecfm//' (M/S)'
269  !
270  CALL write_surf(duo%CSELECT,hprogram,yrecfm,di%XMER10M(:),iresp,hcomment=ycomment)
271  !
272  yrecfm='W10M_SEAICE'
273  ycomment='X_Y_'//yrecfm//' (M/S)'
274  !
275  CALL write_surf(duo%CSELECT,hprogram,yrecfm,di%XWIND10M(:),iresp,hcomment=ycomment)
276  !
277 END IF
278 !
279 ! End of IO
280 !
281  CALL end_io_surf_n(hprogram)
282 
283 IF (lhook) CALL dr_hook('WRITE_DIAG_SEB_SEAICE_N',1,zhook_handle)
284 !
285 !
286 END SUBROUTINE write_diag_seb_seaice_n
subroutine write_diag_seb_seaice_n(DTCO, DUO, U, DSO, DI, DIC, HP
integer, parameter jprb
Definition: parkind1.F90:32
subroutine end_io_surf_n(HPROGRAM)
Definition: end_io_surfn.F90:7
logical lhook
Definition: yomhook.F90:15
subroutine init_io_surf_n(DTCO, U, HPROGRAM, HMASK, HSCHEME, HACTION