SURFEX v8.1
General documentation of Surfex
diag_watflux_initn.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 diag_watflux_init_n (OREAD_BUDGETC, DGO, D, DC, W, HPROGRAM,KLU,KSW)
7 ! #####################
8 !
9 !!**** *DIAG_WATFLUX_INIT_n* - routine to initialize WATFLUX diagnostic variables
10 !!
11 !! PURPOSE
12 !! -------
13 !!
14 !!** METHOD
15 !! ------
16 !!
17 !! EXTERNAL
18 !! --------
19 !!
20 !!
21 !! IMPLICIT ARGUMENTS
22 !! ------------------
23 !!
24 !! REFERENCE
25 !! ---------
26 !!
27 !!
28 !! AUTHOR
29 !! ------
30 !! V. Masson *Meteo France*
31 !!
32 !! MODIFICATIONS
33 !! -------------
34 !! Original 01/2004
35 ! B. decharme 04/2013 : Add EVAP and SUBL diag
36 !-------------------------------------------------------------------------------
37 !
38 !* 0. DECLARATIONS
39 ! ------------
40 !
41 USE mode_diag
42 !
44 USE modd_watflux_n, ONLY : watflux_t
45 !
46 #ifdef SFX_OL
47 USE modn_io_offline, ONLY : lrestart
48 #endif
49 USE modd_surf_par, ONLY : xundef
51 !
52 !
54 !
55 USE yomhook ,ONLY : lhook, dr_hook
56 USE parkind1 ,ONLY : jprb
57 !
58 IMPLICIT NONE
59 !
60 !* 0.1 Declarations of arguments
61 ! -------------------------
62 !
63 !
64 !
65 LOGICAL, INTENT(IN) :: OREAD_BUDGETC
66 TYPE(diag_options_t), INTENT(INOUT) :: DGO
67 TYPE(diag_t), INTENT(INOUT) :: D
68 TYPE(diag_t), INTENT(INOUT) :: DC
69 TYPE(watflux_t), INTENT(INOUT) :: W
70 !
71 INTEGER, INTENT(IN) :: KLU ! size of arrays
72 INTEGER, INTENT(IN) :: KSW ! number of SW spectral bands
73  CHARACTER(LEN=6), INTENT(IN):: HPROGRAM ! program calling
74 !
75 !* 0.2 Declarations of local variables
76 ! -------------------------------
77 !
78 INTEGER :: IVERSION
79 INTEGER :: IRESP ! IRESP : return-code if a problem appears
80  CHARACTER(LEN=12) :: YREC ! Name of the article to be read
81 REAL(KIND=JPRB) :: ZHOOK_HANDLE
82 !
83 !-------------------------------------------------------------------------------
84 !
85 !* surface energy budget
86 !
87 IF (lhook) CALL dr_hook('DIAG_WATFLUX_INIT_N',0,zhook_handle)
88 !
89  CALL alloc_bud(dgo,d,klu,ksw)
90 !
91 IF (dgo%LSURF_BUDGET.OR.dgo%LSURF_BUDGETC) THEN
92  !
93  ALLOCATE(d%XEVAP (klu))
94  ALLOCATE(d%XSUBL (klu))
95  d%XEVAP = xundef
96  d%XSUBL = xundef
97  !
98 ELSE
99  !
100  ALLOCATE(d%XEVAP (0))
101  ALLOCATE(d%XSUBL (0))
102  !
103 END IF
104 !
105 !* cumulative surface energy budget
106 !
107 #ifdef SFX_OL
108 IF (dgo%LSURF_BUDGETC .OR. (lrestart .AND. .NOT.dgo%LRESET_BUDGETC)) THEN
109 #else
110 IF (dgo%LSURF_BUDGETC .OR. .NOT.dgo%LRESET_BUDGETC) THEN
111 #endif
112  !
113  CALL alloc_surf_bud(dc,klu,klu,ksw)
114  ALLOCATE(dc%XEVAP (klu))
115  ALLOCATE(dc%XSUBL (klu))
116  !
117  IF (.NOT. oread_budgetc .OR. oread_budgetc.AND.dgo%LRESET_BUDGETC) THEN
118  CALL init_surf_bud(dc,0.)
119  dc%XEVAP = 0.0
120  dc%XSUBL = 0.0
121  ELSE
122  yrec='RNC_WAT'
123  CALL read_surf(hprogram,yrec,dc%XRN,iresp)
124  yrec='HC_WAT'
125  CALL read_surf(hprogram,yrec,dc%XH,iresp)
126  yrec='LEC_WAT'
127  CALL read_surf(hprogram,yrec,dc%XLE,iresp)
128  yrec='LEIC_WAT'
129  CALL read_surf(hprogram,yrec,dc%XLEI,iresp)
130  yrec='GFLUXC_WAT'
131  CALL read_surf(hprogram,yrec,dc%XGFLUX,iresp)
132  yrec='SWDC_WAT'
133  CALL read_surf(hprogram,yrec,dc%XSWD,iresp)
134  yrec='SWUC_WAT'
135  CALL read_surf(hprogram,yrec,dc%XSWU,iresp)
136  yrec='LWDC_WAT'
137  CALL read_surf(hprogram,yrec,dc%XLWD,iresp)
138  yrec='LWUC_WAT'
139  CALL read_surf(hprogram,yrec,dc%XLWU,iresp)
140  yrec='FMUC_WAT'
141  CALL read_surf(hprogram,yrec,dc%XFMU,iresp)
142  yrec='FMVC_WAT'
143  CALL read_surf(hprogram,yrec,dc%XFMV,iresp)
144 !
145  CALL read_surf(hprogram,'VERSION',iversion,iresp)
146  IF (iversion<8)THEN
147  dc%XEVAP = 0.0
148  dc%XSUBL = 0.0
149  ELSE
150  yrec='EVAPC_WAT'
151  CALL read_surf(hprogram,yrec,dc%XEVAP,iresp)
152  yrec='SUBLC_WAT'
153  CALL read_surf(hprogram,yrec,dc%XSUBL,iresp)
154  ENDIF
155  !
156  ENDIF
157  !
158 ELSE
159  CALL alloc_surf_bud(dc,0,0,0)
160  ALLOCATE(dc%XEVAP (0))
161  ALLOCATE(dc%XSUBL (0))
162 ENDIF
163 !
164 IF(lcpl_sea)THEN
165 !
166  ALLOCATE(w%XCPL_WATER_WIND(klu))
167  ALLOCATE(w%XCPL_WATER_FWSU(klu))
168  ALLOCATE(w%XCPL_WATER_FWSV(klu))
169  ALLOCATE(w%XCPL_WATER_SNET(klu))
170  ALLOCATE(w%XCPL_WATER_HEAT(klu))
171  ALLOCATE(w%XCPL_WATER_EVAP(klu))
172  ALLOCATE(w%XCPL_WATER_RAIN(klu))
173  ALLOCATE(w%XCPL_WATER_SNOW(klu))
174  ALLOCATE(w%XCPL_WATER_FWSM(klu))
175  w%XCPL_WATER_WIND(:) = 0.0
176  w%XCPL_WATER_FWSU(:) = 0.0
177  w%XCPL_WATER_FWSV(:) = 0.0
178  w%XCPL_WATER_SNET(:) = 0.0
179  w%XCPL_WATER_HEAT(:) = 0.0
180  w%XCPL_WATER_EVAP(:) = 0.0
181  w%XCPL_WATER_RAIN(:) = 0.0
182  w%XCPL_WATER_SNOW(:) = 0.0
183  w%XCPL_WATER_FWSM(:) = 0.0
184 !
185 ELSE
186  ALLOCATE(w%XCPL_WATER_WIND(0))
187  ALLOCATE(w%XCPL_WATER_FWSU(0))
188  ALLOCATE(w%XCPL_WATER_FWSV(0))
189  ALLOCATE(w%XCPL_WATER_SNET(0))
190  ALLOCATE(w%XCPL_WATER_HEAT(0))
191  ALLOCATE(w%XCPL_WATER_EVAP(0))
192  ALLOCATE(w%XCPL_WATER_RAIN(0))
193  ALLOCATE(w%XCPL_WATER_SNOW(0))
194  ALLOCATE(w%XCPL_WATER_FWSM(0))
195 ENDIF
196 !
197 IF(lcpl_seaice)THEN
198  ALLOCATE(w%XCPL_WATERICE_SNET(klu))
199  ALLOCATE(w%XCPL_WATERICE_HEAT(klu))
200  ALLOCATE(w%XCPL_WATERICE_EVAP(klu))
201  w%XCPL_WATERICE_SNET(:) = 0.0
202  w%XCPL_WATERICE_HEAT(:) = 0.0
203  w%XCPL_WATERICE_EVAP(:) = 0.0
204 ELSE
205  ALLOCATE(w%XCPL_WATERICE_SNET(0))
206  ALLOCATE(w%XCPL_WATERICE_HEAT(0))
207  ALLOCATE(w%XCPL_WATERICE_EVAP(0))
208 ENDIF
209 IF (lhook) CALL dr_hook('DIAG_WATFLUX_INIT_N',1,zhook_handle)
210 !
211 !-------------------------------------------------------------------------------
212 !
213 END SUBROUTINE diag_watflux_init_n
subroutine init_surf_bud(DA, PVAL)
Definition: mode_diag.F90:213
real, parameter xundef
subroutine alloc_bud(DGO, DA, KLU, KSW)
Definition: mode_diag.F90:137
integer, parameter jprb
Definition: parkind1.F90:32
logical lhook
Definition: yomhook.F90:15
subroutine diag_watflux_init_n(OREAD_BUDGETC, DGO, D, DC, W, HPRO
subroutine alloc_surf_bud(DA, KLUA, KLUAC, KSWA)
Definition: mode_diag.F90:21