SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
get_vegn.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 get_veg_n(HPROGRAM, KI, U, I, PLAI, PVH)
7 ! #######################################################################
8 !
9 !!**** *GET_VEG_n* - gets some veg fields on atmospheric grid
10 !!
11 !! PURPOSE
12 !! -------
13 !!
14 !! This program returns some veg variables needed by the atmosphere
15 !!
16 !! EXTERNAL
17 !! --------
18 !!
19 !! IMPLICIT ARGUMENTS
20 !! ------------------
21 !!
22 !! REFERENCE
23 !! ---------
24 !!
25 !! AUTHOR
26 !! ------
27 !! P. Aumond
28 !!
29 !! MODIFICATIONS
30 !! -------------
31 !! Original 07/2009
32 !-------------------------------------------------------------------------------
33 !
34 !* 0. DECLARATIONS
35 ! ------------
36 !
37 USE modd_surf_atm_n, ONLY : surf_atm_t
38 USE modd_isba_n, ONLY : isba_t
39 !
40 USE modd_surf_par, ONLY : xundef
42 
43 USE modi_get_luout
44 USE modi_vegtype_to_patch
45 !
46 USE modi_abor1_sfx
47 !
48 IMPLICIT NONE
49 !
50 !* 0.1 Declarations of arguments
51 ! -------------------------
52 !
53  CHARACTER(LEN=6), INTENT(IN) :: hprogram
54 INTEGER, INTENT(IN) :: ki ! number of points
55 !
56 TYPE(surf_atm_t), INTENT(INOUT) :: u
57 TYPE(isba_t), INTENT(INOUT) :: i
58 !
59 REAL, DIMENSION(KI), INTENT(OUT) :: pvh ! Tree height
60 REAL, DIMENSION(KI), INTENT(OUT) :: plai
61 !-------------------------------------------------------------------------------
62 !
63 !
64 !* 0.2 Declarations of local variables
65 ! -------------------------------
66 !
67 ! Arrays defined for each tile
68 !
69 !
70 INTEGER :: ji,jj ! loop index over tiles
71 INTEGER :: iluout ! unit numberi
72 REAL, DIMENSION(U%NSIZE_FULL) :: zh_tree_full, zlai_full
73 REAL, DIMENSION(U%NSIZE_NATURE) :: zh_tree, zlai,zwork
74 INTEGER:: ipatch_trbe, ipatch_trbd, ipatch_tebe, ipatch_tebd, ipatch_tene, &
75  ipatch_bobd, ipatch_bone, ipatch_bond
76 !
77 !-------------------------------------------------------------------------------
78 !
79 !* 0. Logical unit for writing out
80 !
81  CALL get_luout(hprogram,iluout)
82 !
83 !-------------------------------------------------------------------------------
84 !
85 !* 1. Passage dur le masque global
86 ! -------------------------------
87 
88 
89 zh_tree_full(:) = 0.
90 zlai_full(:) = xundef
91 
92 ipatch_trbe = vegtype_to_patch(nvt_trbe, i%NPATCH)
93 ipatch_trbd = vegtype_to_patch(nvt_trbd, i%NPATCH)
94 ipatch_tebe = vegtype_to_patch(nvt_tebe, i%NPATCH)
95 ipatch_tebd = vegtype_to_patch(nvt_tebd, i%NPATCH)
96 ipatch_tene = vegtype_to_patch(nvt_tene, i%NPATCH)
97 ipatch_bobd = vegtype_to_patch(nvt_bobd, i%NPATCH)
98 ipatch_bone = vegtype_to_patch(nvt_bone, i%NPATCH)
99 ipatch_bond = vegtype_to_patch(nvt_bond, i%NPATCH)
100 
101 
102 zwork(:) = i%XVEGTYPE(:,nvt_trbe) + i%XVEGTYPE(:,nvt_trbd) + i%XVEGTYPE(:,nvt_tebe) + &
103  i%XVEGTYPE(:,nvt_tebd) + i%XVEGTYPE(:,nvt_tene) + i%XVEGTYPE(:,nvt_bobd) + &
104  i%XVEGTYPE(:,nvt_bone) + i%XVEGTYPE(:,nvt_bond)
105 
106 DO jj=1,u%NSIZE_NATURE
107  !
108  IF (zwork(jj)==0) THEN
109  !
110  zh_tree(jj) = 0.
111  zlai(jj) = 0.
112  !
113  ELSE
114  !
115  zh_tree(jj) = ( (i%XH_TREE(jj,ipatch_trbe) * i%XVEGTYPE(jj,nvt_trbe) ) + &
116  (i%XH_TREE(jj,ipatch_trbd) * i%XVEGTYPE(jj,nvt_trbd) ) + &
117  (i%XH_TREE(jj,ipatch_tebe) * i%XVEGTYPE(jj,nvt_tebe) ) + &
118  (i%XH_TREE(jj,ipatch_tebd) * i%XVEGTYPE(jj,nvt_tebd) ) + &
119  (i%XH_TREE(jj,ipatch_tene) * i%XVEGTYPE(jj,nvt_tene) ) + &
120  (i%XH_TREE(jj,ipatch_bobd) * i%XVEGTYPE(jj,nvt_bobd) ) + &
121  (i%XH_TREE(jj,ipatch_bone) * i%XVEGTYPE(jj,nvt_bone) ) + &
122  (i%XH_TREE(jj,ipatch_bond) * i%XVEGTYPE(jj,nvt_bond) ) &
123  ) / zwork(jj)
124 
125  zlai(jj) = ( i%XLAI(jj,ipatch_trbe) * i%XVEGTYPE(jj,nvt_trbe) ) + &
126  ( i%XLAI(jj,ipatch_trbd) * i%XVEGTYPE(jj,nvt_trbd) ) + &
127  ( i%XLAI(jj,ipatch_tebe) * i%XVEGTYPE(jj,nvt_tebe) ) + &
128  ( i%XLAI(jj,ipatch_tebd) * i%XVEGTYPE(jj,nvt_tebd) ) + &
129  ( i%XLAI(jj,ipatch_tene) * i%XVEGTYPE(jj,nvt_tene) ) + &
130  ( i%XLAI(jj,ipatch_bobd) * i%XVEGTYPE(jj,nvt_bobd) ) + &
131  ( i%XLAI(jj,ipatch_bone) * i%XVEGTYPE(jj,nvt_bone) )+ &
132  ( i%XLAI(jj,ipatch_bond) * i%XVEGTYPE(jj,nvt_bond) )
133 
134  zh_tree_full(u%NR_NATURE(jj)) = zh_tree(jj)
135  zlai_full(u%NR_NATURE(jj)) = zlai(jj)
136  !
137  END IF
138  !
139 END DO
140 !
141 zlai_full(:) = u%XNATURE(:) * zlai_full(:)
142 !
143 !* 2. Envoi les variables vers mesonH
144 ! ------------------------------
145 
146 IF ( SIZE(pvh) /= SIZE(zh_tree_full) ) THEN
147  WRITE(iluout,*) 'try to get VH field from atmospheric model, but size is not correct'
148  WRITE(iluout,*) 'size of field expected by the atmospheric model (PVH) :', SIZE(pvh)
149  WRITE(iluout,*) 'size of field inthe surface (XVH) :', SIZE(zh_tree_full)
150  CALL abor1_sfx('GET_VHN: VH SIZE NOT CORRECT')
151 ELSE
152  pvh = zh_tree_full
153 END IF
154 !
155 !==============================================================================
156 !
157 !-------------------------------------------------------------------------------
158 !
159 IF ( SIZE(plai) /= SIZE(zlai_full) ) THEN
160  WRITE(iluout,*) 'try to get LAI field from atmospheric model, but size is not correct'
161  WRITE(iluout,*) 'size of field expected by the atmospheric model (PLAI) :', SIZE(plai)
162  WRITE(iluout,*) 'size of field inthe surface (XLAI) :', SIZE(zlai_full)
163  CALL abor1_sfx('GET_LAIN: LAI SIZE NOT CORRECT')
164 ELSE
165  plai = zlai_full
166 END IF
167 !
168 !==============================================================================
169 !
170 !-------------------------------------------------------------------------------
171 !
172 !==============================================================================
173 !
174 END SUBROUTINE get_veg_n
subroutine get_veg_n(HPROGRAM, KI, U, I, PLAI, PVH)
Definition: get_vegn.F90:6
integer function vegtype_to_patch(IVEGTYPE, INPATCH)
subroutine abor1_sfx(YTEXT)
Definition: abor1_sfx.F90:6
subroutine get_luout(HPROGRAM, KLUOUT)
Definition: get_luout.F90:6