SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
allocate_gr_snow.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 allocate_gr_snow(TPSNOW,KLU,KPATCH)
7 ! ##############################################
8 !
9 !!**** *ALLOCATE_GR_SNOW* -
10 !!
11 !! PURPOSE
12 !! -------
13 !!
14 !!
15 !!** METHOD
16 !! ------
17 !!
18 !! TPSNOW%SCHEME must yet be initialized
19 !!
20 !! EXTERNAL
21 !! --------
22 !!
23 !! IMPLICIT ARGUMENTS
24 !! ------------------
25 !!
26 !!
27 !! REFERENCE
28 !! ---------
29 !!
30 !! Book 2
31 !!
32 !! AUTHOR
33 !! ------
34 !!
35 !! V.Masson Meteo-France
36 !!
37 !! MODIFICATIONS
38 !! -------------
39 !! Original 20/01/99
40 !
41 !! F.Solmon 06/00 Adapt for patch cases
42 !! V. Masson 01/2004 Externalization
43 !! A. Bogatchev 09/2005 EBA snow option
44 !! P. Samuelsson 07/2014 Added snow albedos
45 !-------------------------------------------------------------------------------
46 !
47 !* 0. DECLARATIONS
48 ! ------------
49 !
51 USE modd_surf_par, ONLY : xundef
52 !
53 !
54 USE yomhook ,ONLY : lhook, dr_hook
55 USE parkind1 ,ONLY : jprb
56 !
57 IMPLICIT NONE
58 !
59 !* 0.1 Declaration of arguments
60 ! ------------------------
61 !
62 TYPE(surf_snow), INTENT(INOUT) :: tpsnow
63 INTEGER, INTENT(IN) :: klu
64 INTEGER, INTENT(IN) :: kpatch
65 REAL(KIND=JPRB) :: zhook_handle
66 !
67 !* 0.2 Declaration of local variables
68 ! ------------------------------
69 !
70 !-------------------------------------------------------------------------------
71 !
72 IF (lhook) CALL dr_hook('ALLOCATE_GR_SNOW',0,zhook_handle)
73 !
74 IF (tpsnow%SCHEME=='3-L' .OR. tpsnow%SCHEME=='CRO' .OR. tpsnow%SCHEME=='1-L' .OR. &
75  tpsnow%SCHEME=='D95' .OR. tpsnow%SCHEME=='EBA') THEN
76  !
77  ALLOCATE(tpsnow%WSNOW (klu,tpsnow%NLAYER,kpatch))
78  ALLOCATE(tpsnow%RHO (klu,tpsnow%NLAYER,kpatch))
79  ALLOCATE(tpsnow%ALB (klu,kpatch))
80  ALLOCATE(tpsnow%ALBVIS (klu,kpatch))
81  ALLOCATE(tpsnow%ALBNIR (klu,kpatch))
82  ALLOCATE(tpsnow%ALBFIR (klu,kpatch))
83  tpsnow%WSNOW = 0.
84  tpsnow%RHO = xundef
85  tpsnow%ALB = xundef
86  tpsnow%ALBVIS = xundef
87  tpsnow%ALBNIR = xundef
88  tpsnow%ALBFIR = xundef
89  !
90  IF (tpsnow%SCHEME/='D95' .AND. tpsnow%SCHEME/='EBA') THEN
91  !
92  ALLOCATE(tpsnow%EMIS(klu,kpatch))
93  ALLOCATE(tpsnow%TS (klu,kpatch))
94  tpsnow%EMIS = xundef
95  tpsnow%TS = xundef
96  !
97  IF (tpsnow%SCHEME/='1-L') THEN
98  !
99  ALLOCATE(tpsnow%TEMP(klu,tpsnow%NLAYER,kpatch))
100  ALLOCATE(tpsnow%HEAT(klu,tpsnow%NLAYER,kpatch))
101  ALLOCATE(tpsnow%AGE (klu,tpsnow%NLAYER,kpatch))
102  tpsnow%TEMP = xundef
103  tpsnow%HEAT = xundef
104  tpsnow%AGE = xundef
105  !
106  IF(tpsnow%SCHEME=='CRO') THEN
107  !
108  ALLOCATE(tpsnow%GRAN1(klu,tpsnow%NLAYER,kpatch))
109  ALLOCATE(tpsnow%GRAN2(klu,tpsnow%NLAYER,kpatch))
110  ALLOCATE(tpsnow%HIST (klu,tpsnow%NLAYER,kpatch))
111  tpsnow%GRAN1 = xundef
112  tpsnow%GRAN2 = xundef
113  tpsnow%HIST = xundef
114  !
115  END IF
116  !
117  ELSE
118  !
119  ALLOCATE(tpsnow%T(klu,tpsnow%NLAYER,kpatch))
120  tpsnow%T = xundef
121  !
122  END IF
123  ENDIF
124 ENDIF
125 !
126 !
127 IF (tpsnow%SCHEME/='CRO') THEN
128  !
129  ALLOCATE(tpsnow%GRAN1(0,0,0))
130  ALLOCATE(tpsnow%GRAN2(0,0,0))
131  ALLOCATE(tpsnow%HIST (0,0,0))
132  !
133  IF (tpsnow%SCHEME/='3-L') THEN
134  !
135  ALLOCATE(tpsnow%TEMP(0,0,0))
136  ALLOCATE(tpsnow%HEAT(0,0,0))
137  ALLOCATE(tpsnow%AGE (0,0,0))
138  !
139  IF (tpsnow%SCHEME/='1-L') THEN
140  !
141  ALLOCATE(tpsnow%EMIS (0,0))
142  ALLOCATE(tpsnow%TS (0,0))
143  !
144  IF (tpsnow%SCHEME/='D95' .AND. tpsnow%SCHEME/='EBA') THEN
145  !
146  ALLOCATE(tpsnow%WSNOW (0,0,0))
147  ALLOCATE(tpsnow%RHO (0,0,0))
148  ALLOCATE(tpsnow%ALB (0,0))
149  ALLOCATE(tpsnow%ALBVIS (0,0))
150  ALLOCATE(tpsnow%ALBNIR (0,0))
151  ALLOCATE(tpsnow%ALBFIR (0,0))
152  !
153  ENDIF
154  !
155  ENDIF
156  !
157  ENDIF
158  !
159 END IF
160 !
161 IF (tpsnow%SCHEME/='1-L') THEN
162  !
163  ALLOCATE(tpsnow%T(0,0,0))
164  !
165 ENDIF
166 !
167 IF (lhook) CALL dr_hook('ALLOCATE_GR_SNOW',1,zhook_handle)
168 !-------------------------------------------------------------------------------
169 END SUBROUTINE allocate_gr_snow
subroutine allocate_gr_snow(TPSNOW, KLU, KPATCH)