SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
init_surf_landusen.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 init_surf_landuse_n (YSC, &
7  hprogram,hinit,oland_use, &
8  ki,ksv,ksw, &
9  hsv,pco2,prhoa, &
10  pzenith,pazim,psw_bands,pdir_alb,psca_alb, &
11  pemis,ptsrad,ptsurf, &
12  kyear, kmonth,kday, ptime, &
13  hatmfile,hatmfiletype, &
14  htest )
15 !#############################################################
16 !
17 !!**** *INIT_SURF_LANDUSE_n* - routine to initialize LAND USE
18 !!
19 !! PURPOSE
20 !! -------
21 !!
22 !!** METHOD
23 !! ------
24 !!
25 !! EXTERNAL
26 !! --------
27 !!
28 !!
29 !! IMPLICIT ARGUMENTS
30 !! ------------------
31 !!
32 !! REFERENCE
33 !! ---------
34 !!
35 !!
36 !! AUTHOR
37 !! ------
38 !! S. Faroux *Meteo France*
39 !!
40 !! MODIFICATIONS
41 !! -------------
42 !!
43 !! modified 06-13 B. Decharme : New coupling variable
44 !-------------------------------------------------------------------------------
45 !
46 !* 0. DECLARATIONS
47 ! ------------
48 !
49 !
50 USE modd_surfex_n, ONLY : surfex_t
51 !
52 USE yomhook , ONLY : lhook, dr_hook
53 USE parkind1 ,ONLY : jprb
54 !
55 USE modd_data_cover_par, ONLY : nvegtype
56 !
57 !
58 USE modi_init_io_surf_n
59 USE modi_end_io_surf_n
60 !
61 USE modi_get_type_dim_n
63 !
64 USE modi_set_vegtypes_fractions
65 USE modi_compute_isba_parameters
66 USE modi_abor1_sfx
67 !
68 IMPLICIT NONE
69 !
70 !* 0.1 Declarations of arguments
71 ! -------------------------
72 !
73 TYPE(surfex_t), INTENT(INOUT) :: ysc
74 !
75  CHARACTER(LEN=6), INTENT(IN) :: hprogram ! program calling surf. schemes
76  CHARACTER(LEN=3), INTENT(IN) :: hinit ! choice of fields to initialize
77 LOGICAL, INTENT(IN) :: oland_use ! choice of doing land use or not
78 INTEGER, INTENT(IN) :: ki ! number of points
79 INTEGER, INTENT(IN) :: ksv ! number of scalars
80 INTEGER, INTENT(IN) :: ksw ! number of short-wave spectral bands
81  CHARACTER(LEN=6), DIMENSION(KSV), INTENT(IN) :: hsv ! name of all scalar variables
82 REAL, DIMENSION(KI), INTENT(IN) :: pco2 ! CO2 concentration (kg/m3)
83 REAL, DIMENSION(KI), INTENT(IN) :: prhoa ! air density
84 REAL, DIMENSION(KI), INTENT(IN) :: pzenith ! solar zenithal angle
85 REAL, DIMENSION(KI), INTENT(IN) :: pazim ! solar azimuthal angle (rad from N, clock)
86 REAL, DIMENSION(KSW), INTENT(IN) :: psw_bands ! middle wavelength of each band
87 REAL, DIMENSION(KI,KSW),INTENT(OUT) :: pdir_alb ! direct albedo for each band
88 REAL, DIMENSION(KI,KSW),INTENT(OUT) :: psca_alb ! diffuse albedo for each band
89 REAL, DIMENSION(KI), INTENT(OUT) :: pemis ! emissivity
90 REAL, DIMENSION(KI), INTENT(OUT) :: ptsrad ! radiative temperature
91 REAL, DIMENSION(KI), INTENT(OUT) :: ptsurf ! surface effective temperature (K)
92 !
93 INTEGER, INTENT(IN) :: kyear ! current year (UTC)
94 INTEGER, INTENT(IN) :: kmonth ! current month (UTC)
95 INTEGER, INTENT(IN) :: kday ! current day (UTC)
96 REAL, INTENT(IN) :: ptime ! current time since
97  ! midnight (UTC, s)
98 !
99  CHARACTER(LEN=28), INTENT(IN) :: hatmfile ! atmospheric file name
100  CHARACTER(LEN=6), INTENT(IN) :: hatmfiletype! atmospheric file type
101  CHARACTER(LEN=2), INTENT(IN) :: htest ! must be equal to 'OK'
102 !
103 !
104 !* 0.2 Declarations of local variables
105 ! -------------------------------
106 REAL, DIMENSION(:,:),ALLOCATABLE :: zwork ! 2D array to write data in file
107 INTEGER :: jlayer
108 INTEGER :: ilu ! 1D physical dimension
109 INTEGER :: iresp ! Error code after redding
110  CHARACTER(LEN=12) :: yrecfm ! Name of the article to be read
111  CHARACTER(LEN=4) :: ylvl
112 REAL(KIND=JPRB) :: zhook_handle
113 !
114 !-------------------------------------------------------------------------------
115 !
116 IF (lhook) CALL dr_hook('INIT_SURF_LANDUSE_N',0,zhook_handle)
117 !
118 IF (htest/='OK') THEN
119  CALL abor1_sfx('INIT_SURF_LANDUSEN: FATAL ERROR DURING ARGUMENT TRANSFER')
120 END IF
121 !
122 IF (.NOT. oland_use)THEN
123  IF (lhook) CALL dr_hook('INIT_SURF_LANDUSE_N',1,zhook_handle)
124  RETURN
125 ENDIF
126 !
127 IF (ysc%IM%I%CISBA=='DIF') THEN
128  CALL abor1_sfx('INIT_SURF_LANDUSEN: LAND USE NOT IMPLEMENTED WITH DIF')
129 ENDIF
130 !
131 !-------------------------------------------------------------------------------
132 !
133 !* initialization for I/O
134 !
135  CALL init_io_surf_n(ysc%DTCO, ysc%DGU, ysc%U, &
136  hprogram,'NATURE','ISBA ','READ ')
137 !
138 !* 1D physical dimension
139 !
140  CALL get_type_dim_n(ysc%DTCO, ysc%U, &
141  'NATURE',ilu)
142 ALLOCATE(zwork(ilu,ysc%IM%I%NPATCH))
143 !
144 ysc%IM%DTI%LDATA_MIXPAR = .true.
145 IF (.NOT.ASSOCIATED(ysc%IM%DTI%XPAR_VEGTYPE)) ALLOCATE(ysc%IM%DTI%XPAR_VEGTYPE(ilu,nvegtype))
146 IF (ysc%IM%DTI%NTIME==0) ysc%IM%DTI%NTIME = 36
147 IF (.NOT.ASSOCIATED(ysc%IM%DTI%XPAR_LAI)) ALLOCATE(ysc%IM%DTI%XPAR_LAI(ilu,ysc%IM%DTI%NTIME,nvegtype))
148 IF (.NOT.ASSOCIATED(ysc%IM%DTI%XPAR_H_TREE)) ALLOCATE(ysc%IM%DTI%XPAR_H_TREE(ilu,nvegtype))
149 IF (.NOT.ASSOCIATED(ysc%IM%DTI%XPAR_ROOT_DEPTH)) ALLOCATE(ysc%IM%DTI%XPAR_ROOT_DEPTH(ilu,nvegtype))
150 IF (.NOT.ASSOCIATED(ysc%IM%DTI%XPAR_ROOT_DEPTHGV)) ALLOCATE(ysc%IM%DTI%XPAR_ROOT_DEPTHGV(ilu,nvegtype))
151 IF (.NOT.ASSOCIATED(ysc%IM%DTI%XPAR_GROUND_DEPTH)) ALLOCATE(ysc%IM%DTI%XPAR_GROUND_DEPTH(ilu,nvegtype))
152 IF (.NOT.ASSOCIATED(ysc%IM%DTI%XPAR_IRRIG)) ALLOCATE(ysc%IM%DTI%XPAR_IRRIG(ilu,ysc%IM%DTI%NTIME,nvegtype))
153 IF (.NOT.ASSOCIATED(ysc%IM%DTI%XPAR_WATSUP)) ALLOCATE(ysc%IM%DTI%XPAR_WATSUP(ilu,ysc%IM%DTI%NTIME,nvegtype))
154 !
155 !* read old patch fraction
156 !
157 ALLOCATE(ysc%IM%I%XPATCH_OLD(ilu,ysc%IM%I%NPATCH))
158 yrecfm = 'PATCH'
159  CALL read_surf(&
160  hprogram,yrecfm,ysc%IM%I%XPATCH_OLD(:,:),iresp)
161 !
162 !* read old soil layer thicknesses (m)
163 !
164 ALLOCATE(ysc%IM%I%XDG_OLD(ilu,ysc%IM%I%NGROUND_LAYER,ysc%IM%I%NPATCH))
165 !
166 DO jlayer=1,ysc%IM%I%NGROUND_LAYER
167  WRITE(ylvl,'(I4)') jlayer
168  yrecfm='OLD_DG'//adjustl(ylvl(:len_trim(ylvl)))
169  CALL read_surf(&
170  hprogram,yrecfm,zwork(:,:),iresp)
171  ysc%IM%I%XDG_OLD(:,jlayer,:)=zwork
172 END DO
173 DEALLOCATE(zwork)
174 !
175 !* End of IO
176 !
177  CALL end_io_surf_n(hprogram)
178 !
179 !-------------------------------------------------------------------------------
180 !
181 !* read new fraction of each vege type
182 ! and then extrapolate parameters defined by cover
183 !
184  CALL set_vegtypes_fractions(ysc%DTCO, ysc%DGU, ysc%IM%DTI, ysc%IM%IG, ysc%IM%I, ysc%UG, ysc%U, &
185  hprogram)
186 !
187 !* re-initialize ISBA with new parameters
188 !
189  CALL compute_isba_parameters(ysc%DTCO, ysc%DGU, ysc%UG, ysc%U, ysc%IM, &
190  ysc%DST, ysc%SLT, ysc%SV, &
191  hprogram,hinit,oland_use, &
192  ilu,ksv,ksw, &
193  hsv,pco2,prhoa, &
194  pzenith,psw_bands,pdir_alb,psca_alb, &
195  pemis,ptsrad,ptsurf, &
196  htest )
197 !-------------------------------------------------------------------------------
198 !
199 IF (lhook) CALL dr_hook('INIT_SURF_LANDUSE_N',1,zhook_handle)
200 !
201 END SUBROUTINE init_surf_landuse_n
subroutine get_type_dim_n(DTCO, U, HTYPE, KDIM)
subroutine init_io_surf_n(DTCO, DGU, U, HPROGRAM, HMASK, HSCHEME, HACTION)
subroutine abor1_sfx(YTEXT)
Definition: abor1_sfx.F90:6
subroutine set_vegtypes_fractions(DTCO, DGU, DTI, IG, I, UG, U, HPROGRAM)
subroutine end_io_surf_n(HPROGRAM)
Definition: end_io_surfn.F90:6
subroutine init_surf_landuse_n(YSC, HPROGRAM, HINIT, OLAND_USE, KI, KSV, KSW, HSV, PCO2, PRHOA, PZENITH, PAZIM, PSW_BANDS, PDIR_ALB, PSCA_ALB, PEMIS, PTSRAD, PTSURF, KYEAR, KMONTH, KDAY, PTIME, HATMFILE, HATMFILETYPE, HTEST)
subroutine compute_isba_parameters(DTCO, DGU, UG, U, IM, DST, SLT, SV, HPROGRAM, HINIT, OLAND_USE, KI, KSV, KSW, HSV, PCO2, PRHOA, PZENITH, PSW_BANDS, PDIR_ALB, PSCA_ALB, PEMIS, PTSRAD, PTSURF, HTEST)