SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
arrange_cover.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 arrange_cover (DTCO, U, &
7  pdata_nature,pdata_town,pdata_sea,pdata_water,pdata_vegtype, &
8  pdata_garden, ogarden, pdata_bld, pdata_wall_o_hor )
9 ! #########################
10 !
11 !!**** *ARRANGE_COVER*
12 !!
13 !! PURPOSE
14 !! -------
15 !!
16 !! change water and intertidal (not lake) to nature and/or town to rock : arrange cover properly
17 !!
18 !! METHOD
19 !! ------
20 !!
21 !!
22 !! EXTERNAL
23 !! --------
24 !!
25 !! IMPLICIT ARGUMENTS
26 !! ------------------
27 !!
28 !! REFERENCE
29 !! ---------
30 !!
31 !! AUTHOR
32 !! ------
33 !!
34 !! B. Decharme Meteo-France
35 !!
36 !! MODIFICATION
37 !! ------------
38 !!
39 !! Original 03/2009
40 !! 04/2013 (V. Masson) Fusion of Arrange_cover & update_data_frac
41 !! to allow distinct cover change options between submodels (_n)
42 !----------------------------------------------------------------------------
43 !
44 !* 0. DECLARATION
45 ! -----------
46 !
47 !
49 USE modd_surf_atm_n, ONLY : surf_atm_t
50 !
51 USE modd_surf_par, ONLY : xundef
52 !
53 !
54 USE modd_data_cover, ONLY : xdata_root_depth, xdata_ground_depth, xdata_dice, &
55  xdata_lai, xdata_lai_all_years, &
56  xdata_alb_veg_nir, xdata_alb_veg_vis, &
57  xdata_alb_soil_nir, xdata_alb_soil_vis
58 !
59 USE modd_data_cover_par, ONLY : nvegtype, jpcover, nrock, nvt_rock
60 !
61 !
62 USE yomhook ,ONLY : lhook, dr_hook
63 USE parkind1 ,ONLY : jprb
64 !
65 IMPLICIT NONE
66 !
67 !* 0.1 Declaration of arguments
68 ! ------------------------
69 !
70 !
71 TYPE(data_cover_t), INTENT(INOUT) :: dtco
72 TYPE(surf_atm_t), INTENT(INOUT) :: u
73 !
74 REAL, DIMENSION(:), INTENT(IN) :: pdata_nature
75 REAL, DIMENSION(:), INTENT(IN) :: pdata_town
76 REAL, DIMENSION(:), INTENT(IN) :: pdata_sea
77 REAL, DIMENSION(:), INTENT(IN) :: pdata_water
78 REAL, DIMENSION(:), INTENT(IN) :: pdata_garden
79 REAL, DIMENSION(:,:),INTENT(IN) :: pdata_vegtype
80 LOGICAL, INTENT(IN) :: ogarden
81 REAL, DIMENSION(:), INTENT(IN) :: pdata_bld
82 REAL, DIMENSION(:), INTENT(IN) :: pdata_wall_o_hor
83 !
84 !
85 !* 0.2 Declaration of local variables
86 ! ------------------------------
87 !
88 REAL :: zwork
89 !
90 INTEGER :: jcover, jvegtype, jl
91 REAL(KIND=JPRB) :: zhook_handle
92 !
93 !-------------------------------------------------------------------------------
94 IF (lhook) CALL dr_hook('ARRANGE_COVER',0,zhook_handle)
95 !-------------------------------------------------------------------------------
96 ! Allocate fields from submodel module
97 !-------------------------------------------------------------------------------
98 !
99 IF (ASSOCIATED(dtco%XDATA_NATURE)) DEALLOCATE(dtco%XDATA_NATURE)
100 IF (ASSOCIATED(dtco%XDATA_TOWN)) DEALLOCATE(dtco%XDATA_TOWN)
101 IF (ASSOCIATED(dtco%XDATA_SEA)) DEALLOCATE(dtco%XDATA_SEA)
102 IF (ASSOCIATED(dtco%XDATA_WATER)) DEALLOCATE(dtco%XDATA_WATER)
103 IF (ASSOCIATED(dtco%XDATA_VEGTYPE)) DEALLOCATE(dtco%XDATA_VEGTYPE)
104 IF (ASSOCIATED(dtco%XDATA_GARDEN)) DEALLOCATE(dtco%XDATA_GARDEN)
105 IF (ASSOCIATED(dtco%XDATA_BLD)) DEALLOCATE(dtco%XDATA_BLD)
106 IF (ASSOCIATED(dtco%XDATA_WALL_O_HOR)) DEALLOCATE(dtco%XDATA_WALL_O_HOR)
107 !
108 ALLOCATE(dtco%XDATA_NATURE (jpcover))
109 ALLOCATE(dtco%XDATA_TOWN (jpcover))
110 ALLOCATE(dtco%XDATA_SEA (jpcover))
111 ALLOCATE(dtco%XDATA_WATER (jpcover))
112 ALLOCATE(dtco%XDATA_VEGTYPE (jpcover,nvegtype))
113 ALLOCATE(dtco%XDATA_GARDEN (jpcover))
114 ALLOCATE(dtco%XDATA_BLD (jpcover))
115 ALLOCATE(dtco%XDATA_WALL_O_HOR(jpcover))
116 !
117 !-------------------------------------------------------------------------------
118 ! Default values
119 !-------------------------------------------------------------------------------
120 !
121 dtco%LGARDEN = ogarden
122 !
123 dtco%XDATA_NATURE = pdata_nature
124 dtco%XDATA_TOWN = pdata_town
125 dtco%XDATA_SEA = pdata_sea
126 dtco%XDATA_WATER = pdata_water
127 dtco%XDATA_VEGTYPE = pdata_vegtype
128 dtco%XDATA_GARDEN = pdata_garden
129 dtco%XDATA_BLD = pdata_bld
130 dtco%XDATA_WALL_O_HOR = pdata_wall_o_hor
131 !
132 !-------------------------------------------------------------------------------
133 ! Change water (not lake) to nature
134 !-------------------------------------------------------------------------------
135 !
136 IF(u%LWATER_TO_NATURE)THEN
137  DO jcover=1,jpcover
138  IF(dtco%XDATA_WATER(jcover)>0.0.AND.dtco%XDATA_WATER(jcover)<1.0)THEN
139  dtco%XDATA_NATURE(jcover)=dtco%XDATA_NATURE(jcover)+dtco%XDATA_WATER(jcover)
140  dtco%XDATA_WATER (jcover)=0.0
141  ENDIF
142  ENDDO
143 ENDIF
144 !
145 !-------------------------------------------------------------------------------
146 ! Change town to rock but keep other natural fraction
147 !-------------------------------------------------------------------------------
148 !
149 IF(u%LTOWN_TO_ROCK)THEN
150 !
151  DO jcover=1,jpcover
152  IF(dtco%XDATA_TOWN(jcover)>0.0.OR.dtco%XDATA_GARDEN(jcover)>0.0)THEN
153 !
154  dtco%XDATA_NATURE(jcover) = dtco%XDATA_NATURE(jcover) + dtco%XDATA_GARDEN(jcover) * dtco%XDATA_TOWN(jcover)
155  dtco%XDATA_TOWN (jcover) = dtco%XDATA_TOWN (jcover) * ( 1. - dtco%XDATA_GARDEN(jcover))
156  dtco%XDATA_GARDEN(jcover) = 0.0
157 !
158  zwork=dtco%XDATA_NATURE(jcover)+dtco%XDATA_TOWN(jcover)
159 !
160  DO jvegtype=1,nvegtype
161  dtco%XDATA_VEGTYPE(jcover,jvegtype)=dtco%XDATA_VEGTYPE(jcover,jvegtype)*dtco%XDATA_NATURE(jcover)/zwork
162  ENDDO
163 !
164  dtco%XDATA_VEGTYPE(jcover,nvt_rock) = dtco%XDATA_VEGTYPE(jcover,nvt_rock)+dtco%XDATA_TOWN(jcover)/zwork
165 !
166  dtco%XDATA_NATURE(jcover)=dtco%XDATA_NATURE(jcover)+dtco%XDATA_TOWN(jcover)
167 !
168  dtco%XDATA_TOWN (jcover)=0.0
169 !
170 ! Initialise some variables
171  xdata_lai(jcover,:,nvt_rock) = 0.0
172  xdata_lai_all_years(jcover,:,nvt_rock) = 0.0
173  xdata_root_depth(jcover, nvt_rock) = 0.2
174  xdata_ground_depth(jcover, nvt_rock) = 0.2
175  xdata_dice(jcover, nvt_rock) = 0.2
176  xdata_alb_veg_nir(jcover,:,nvt_rock) = 0.3
177  xdata_alb_veg_vis(jcover,:,nvt_rock) = 0.1
178  xdata_alb_soil_nir(jcover,:,nvt_rock) = 0.3
179  xdata_alb_soil_vis(jcover,:,nvt_rock) = 0.1
180 !
181  ENDIF
182  ENDDO
183 !
184 ELSE
185 !-------------------------------------------------------------------------------
186 ! Town is kept, but if gardens are not treated specifically,
187 ! they are included into nature fraction.
188 !-------------------------------------------------------------------------------
189 !
190  IF (.NOT. ogarden) THEN
191  dtco%XDATA_NATURE = dtco%XDATA_NATURE + dtco%XDATA_GARDEN * dtco%XDATA_TOWN
192  dtco%XDATA_TOWN = dtco%XDATA_TOWN * ( 1. - dtco%XDATA_GARDEN)
193  dtco%XDATA_GARDEN = 0.
194  dtco%XDATA_BLD = dtco%XDATA_BLD / (1. - dtco%XDATA_GARDEN)
195  dtco%XDATA_WALL_O_HOR = dtco%XDATA_WALL_O_HOR / (1. - dtco%XDATA_GARDEN)
196  END IF
197 !
198 ENDIF
199 !-------------------------------------------------------------------------------
200 !-------------------------------------------------------------------------------
201 !
202 IF (lhook) CALL dr_hook('ARRANGE_COVER',1,zhook_handle)
203 !
204 !-------------------------------------------------------------------------------
205 !
206 END SUBROUTINE arrange_cover
subroutine arrange_cover(DTCO, U, PDATA_NATURE, PDATA_TOWN, PDATA_SEA, PDATA_WATER, PDATA_VEGTYPE, PDATA_GARDEN, OGARDEN, PDATA_BLD, PDATA_WALL_O_HOR)