SURFEX v8.1
General documentation of Surfex
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, OWATER_TO_NATURE, OTOWN_TO_ROCK, &
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 !
50 USE modd_surf_par, ONLY : xundef
51 !
52 !
57 !
58 USE modd_data_cover_par, ONLY : nvegtype, jpcover, nrock, nvt_rock
59 !
60 !
61 USE yomhook ,ONLY : lhook, dr_hook
62 USE parkind1 ,ONLY : jprb
63 !
64 IMPLICIT NONE
65 !
66 !* 0.1 Declaration of arguments
67 ! ------------------------
68 !
69 !
70 TYPE(data_cover_t), INTENT(INOUT) :: DTCO
71 !
72 LOGICAL, INTENT(IN) :: OWATER_TO_NATURE
73 LOGICAL, INTENT(IN) :: OTOWN_TO_ROCK
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(owater_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(otown_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_BLD = dtco%XDATA_BLD / (1. - dtco%XDATA_GARDEN)
194  dtco%XDATA_WALL_O_HOR = dtco%XDATA_WALL_O_HOR / (1. - dtco%XDATA_GARDEN)
195  dtco%XDATA_GARDEN = 0.
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
real, dimension(:,:,:), allocatable xdata_alb_soil_nir
real, dimension(:,:,:), allocatable xdata_lai_all_years
real, dimension(:,:), allocatable xdata_root_depth
real, parameter xundef
integer, parameter jprb
Definition: parkind1.F90:32
real, dimension(:,:,:), allocatable xdata_alb_veg_nir
subroutine arrange_cover(DTCO, OWATER_TO_NATURE, OTOWN_TO_ROCK, PDATA_NATURE, PDATA_TOWN, PDATA_SEA, PDATA_
logical lhook
Definition: yomhook.F90:15
real, dimension(:,:), allocatable xdata_dice
real, dimension(:,:,:), allocatable xdata_alb_veg_vis
real, dimension(:,:,:), allocatable xdata_lai
real, dimension(:,:), allocatable xdata_ground_depth
real, dimension(:,:,:), allocatable xdata_alb_soil_vis