SURFEX v8.1
General documentation of Surfex
diag_ideal_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_ideal_init_n (DGO, D, DC, HPROGRAM, OREAD_BUDGETC, KLU, KSW)
7 ! #####################
8 !
9 !!**** *DIAG_IDEAL_INIT_n* - routine to initialize IDEAL 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 !! P. Le Moigne *Meteo France*
31 !!
32 !! MODIFICATIONS
33 !! -------------
34 !! Original 04/2009
35 !! P. Le Moigne 03/2015: add diagnostics IDEAL case
36 !-------------------------------------------------------------------------------
37 !
38 !* 0. DECLARATIONS
39 ! ------------
40 !
41 USE mode_diag
42 !
44 !
45 USE modd_surf_par, ONLY : xundef
46 !
48 !
49 USE yomhook ,ONLY : lhook, dr_hook
50 USE parkind1 ,ONLY : jprb
51 !
52 IMPLICIT NONE
53 !
54 !* 0.1 Declarations of arguments
55 ! -------------------------
56 !
57 !
58 TYPE(diag_options_t), INTENT(INOUT) :: DGO
59 TYPE(diag_t), INTENT(INOUT) :: D
60 TYPE(diag_t), INTENT(INOUT) :: DC
61 !
62  CHARACTER(LEN=6), INTENT(IN):: HPROGRAM ! program calling
63 LOGICAL, INTENT(IN) :: OREAD_BUDGETC
64 !
65 INTEGER, INTENT(IN) :: KLU ! size of arrays
66 INTEGER, INTENT(IN) :: KSW ! spectral bands
67 !
68 !* 0.2 Declarations of local variables
69 ! -------------------------------
70 !
71 INTEGER :: IVERSION
72 INTEGER :: IRESP ! IRESP : return-code if a problem appears
73  CHARACTER(LEN=12) :: YREC ! Name of the article to be read
74 REAL(KIND=JPRB) :: ZHOOK_HANDLE
75 !
76 !-------------------------------------------------------------------------------
77 !
78 !* surface energy budget
79 !
80 IF (lhook) CALL dr_hook('DIAG_IDEAL_INIT_N',0,zhook_handle)
81 !
82  CALL alloc_bud(dgo,d,klu,ksw)
83 !
84 IF (dgo%LSURF_BUDGET .OR. dgo%LSURF_BUDGETC) THEN
85  !
86  ALLOCATE(d%XEVAP (klu))
87  ALLOCATE(d%XSUBL (klu))
88  ALLOCATE(d%XALBT (klu))
89  ALLOCATE(d%XSWE (klu))
90  !
91  d%XEVAP = xundef
92  d%XSUBL = xundef
93  d%XALBT = xundef
94  d%XSWE = xundef
95  !
96 ELSE
97  !
98  ALLOCATE(d%XEVAP (0))
99  ALLOCATE(d%XSUBL (0))
100  ALLOCATE(d%XALBT (0))
101  ALLOCATE(d%XSWE (0))
102  !
103 END IF
104 !
105 !* cumulative surface energy budget
106 !
107 IF (dgo%LSURF_BUDGETC) THEN
108  !
109  CALL alloc_surf_bud(dc,0,klu,0)
110  !
111  ALLOCATE(dc%XEVAP (klu))
112  ALLOCATE(dc%XSUBL (klu))
113  !
114  IF (.NOT. oread_budgetc .OR. oread_budgetc.AND.dgo%LRESET_BUDGETC) THEN
115  CALL init_surf_bud(dc,0.)
116  dc%XEVAP = 0.
117  dc%XSUBL = 0.
118  ELSE
119  CALL read_surf(hprogram,'VERSION',iversion,iresp)
120  IF (iversion<8)THEN
121  CALL init_surf_bud(dc,0.)
122  dc%XEVAP = 0.
123  dc%XSUBL = 0.
124  ELSE
125  yrec='RNC_WAT'
126  CALL read_surf(hprogram,yrec,dc%XRN,iresp)
127  yrec='HC_WAT'
128  CALL read_surf(hprogram,yrec,dc%XH,iresp)
129  yrec='LEC_WAT'
130  CALL read_surf(hprogram,yrec,dc%XLE,iresp)
131  yrec='LEIC_WAT'
132  CALL read_surf(hprogram,yrec,dc%XLEI,iresp)
133  yrec='GFLUXC_WAT'
134  CALL read_surf(hprogram,yrec,dc%XGFLUX,iresp)
135  yrec='SWDC_WAT'
136  CALL read_surf(hprogram,yrec,dc%XSWD,iresp)
137  yrec='SWUC_WAT'
138  CALL read_surf(hprogram,yrec,dc%XSWU,iresp)
139  yrec='LWDC_WAT'
140  CALL read_surf(hprogram,yrec,dc%XLWD,iresp)
141  yrec='LWUC_WAT'
142  CALL read_surf(hprogram,yrec,dc%XLWU,iresp)
143  yrec='FMUC_WAT'
144  CALL read_surf(hprogram,yrec,dc%XFMU,iresp)
145  yrec='FMVC_WAT'
146  CALL read_surf(hprogram,yrec,dc%XFMV,iresp)
147  yrec='EVAPC_WAT'
148  CALL read_surf(hprogram,yrec,dc%XEVAP,iresp)
149  yrec='SUBLC_WAT'
150  CALL read_surf(hprogram,yrec,dc%XSUBL,iresp)
151  ENDIF
152  !
153  ENDIF
154 ELSE
155  CALL alloc_surf_bud(dc,0,0,0)
156  ALLOCATE(dc%XEVAP (0))
157  ALLOCATE(dc%XSUBL (0))
158 ENDIF
159 !
160 IF (lhook) CALL dr_hook('DIAG_IDEAL_INIT_N',1,zhook_handle)
161 !
162 !-------------------------------------------------------------------------------
163 !
164 END SUBROUTINE diag_ideal_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
subroutine diag_ideal_init_n(DGO, D, DC, HPROGRAM, OREAD_BUDGETC,
logical lhook
Definition: yomhook.F90:15
subroutine alloc_surf_bud(DA, KLUA, KLUAC, KSWA)
Definition: mode_diag.F90:21