SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
prep_isba_cc_extern.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 prep_isba_cc_extern (&
7  hprogram,hsurf,hfile,hfiletype,hfilepgd,hfilepgdtype,kluout,pfield,oprep_ags)
8 ! #################################################################################
9 !
10 !!**** *PREP_ISBA_CC_EXTERN* - initializes ISBA-CC fields from external isba field
11 !!
12 !! PURPOSE
13 !! -------
14 !
15 !!** METHOD
16 !! ------
17 !!
18 !! REFERENCE
19 !! ---------
20 !!
21 !!
22 !! AUTHOR
23 !! ------
24 !! V. Masson
25 !!
26 !! MODIFICATIONS
27 !! -------------
28 !! Original 01/2004
29 !! B. Decharme 04/2014, external init with FA files
30 !!------------------------------------------------------------------
31 !
32 !
33 !
34 !
36 !
38 !
39 USE modi_prep_grid_extern
41 USE modi_open_aux_io_surf
42 USE modi_close_aux_io_surf
43 !
44 USE modd_prep, ONLY : cingrid_type, cinterp_type
45 USE modd_surf_par, ONLY : xundef
46 !
47 USE yomhook ,ONLY : lhook, dr_hook
48 USE parkind1 ,ONLY : jprb
49 !
50 IMPLICIT NONE
51 !
52 !* 0.1 declarations of arguments
53 !
54 !
55 !
56  CHARACTER(LEN=6), INTENT(IN) :: hprogram ! program calling surf. schemes
57  CHARACTER(LEN=8), INTENT(IN) :: hsurf ! type of field
58  CHARACTER(LEN=28), INTENT(IN) :: hfile ! name of file
59  CHARACTER(LEN=6), INTENT(IN) :: hfiletype ! type of input file
60  CHARACTER(LEN=28), INTENT(IN) :: hfilepgd ! name of file
61  CHARACTER(LEN=6), INTENT(IN) :: hfilepgdtype ! type of input file
62 INTEGER, INTENT(IN) :: kluout ! logical unit of output listing
63 REAL,DIMENSION(:,:,:), POINTER :: pfield ! field to interpolate horizontally (on final soil grid)
64 LOGICAL, INTENT(INOUT):: oprep_ags
65 !
66 !* 0.2 declarations of local variables
67 !
68  CHARACTER(LEN=12) :: yrecfm ! Name of the article to be read
69 INTEGER :: iresp ! reading return code
70 INTEGER :: ini ! total 1D dimension
71 INTEGER :: ipatch ! number of patch
72  CHARACTER(LEN=3) :: yphoto
73  CHARACTER(LEN=3) :: yrespsl
74  CHARACTER(LEN=4) :: ylvl
75 !
76 INTEGER :: jnbiomass ! loop counter
77 INTEGER :: jnlitter ! loop counter
78 INTEGER :: jnlittlevs ! loop counter
79 INTEGER :: jnsoilcarb ! loop counter
80 INTEGER :: iversion ! surface version
81 INTEGER :: iwork,inbiomass,inlitter, &
82  inlittlevs,insoilcarb
83 !
84 REAL(KIND=JPRB) :: zhook_handle
85 !
86 !------------------------------------------------------------------------------
87 !
88 !* 1. Preparation of IO for reading in the file
89 ! -----------------------------------------
90 !
91 !* Note that all points are read, even those without physical meaning.
92 ! These points will not be used during the horizontal interpolation step.
93 ! Their value must be defined as XUNDEF.
94 !
95 IF (lhook) CALL dr_hook('PREP_ISBA_CC_EXTERN',0,zhook_handle)
96 !
97 !------------------------------------------------------------------------------
98 !
99 !* 2. Reading of grid
100 ! ---------------
101 !
102  CALL open_aux_io_surf(&
103  hfilepgd,hfilepgdtype,'FULL ')
104 !
105  CALL prep_grid_extern(&
106  hfilepgdtype,kluout,cingrid_type,cinterp_type,ini)
107 !
108 yrecfm='VERSION'
109  CALL read_surf(&
110  hfilepgdtype,yrecfm,iversion,iresp)
111 !
112  CALL close_aux_io_surf(hfilepgd,hfilepgdtype)
113 !
114 !---------------------------------------------------------------------------------------
115 !
116 !* 3. Transformation into physical quantity to be interpolated
117 ! --------------------------------------------------------
118 !
119  CALL open_aux_io_surf(&
120  hfilepgd,hfilepgdtype,'NATURE')
121 yrecfm='PHOTO'
122  CALL read_surf(&
123  hfilepgdtype,yrecfm,yphoto,iresp)
124 yrecfm='PATCH_NUMBER'
125  CALL read_surf(&
126  hfilepgdtype,yrecfm,ipatch,iresp)
127  CALL close_aux_io_surf(hfilepgd,hfilepgdtype)
128 !
129 IF(iversion<8.OR.(yphoto/='NIT'.AND.yphoto/='NCB'))THEN
130  oprep_ags = .false.
131  IF (lhook) CALL dr_hook('PREP_ISBA_CC_EXTERN',1,zhook_handle)
132  RETURN
133 ENDIF
134 !
135 SELECT CASE(hsurf)
136 !
137  CASE('BIOMASS')
138  CALL open_aux_io_surf(&
139  hfilepgd,hfilepgdtype,'NATURE')
140  yrecfm='NBIOMASS'
141  CALL read_surf(&
142  hfilepgdtype,yrecfm,inbiomass,iresp)
143  CALL close_aux_io_surf(hfilepgd,hfilepgdtype)
144  IF (yphoto=='NIT' .OR. yphoto=='NCB') THEN
145  ALLOCATE(pfield(ini,inbiomass,ipatch))
146  pfield(:,:,:) = xundef
147  CALL open_aux_io_surf(&
148  hfile,hfiletype,'NATURE')
149  DO jnbiomass=1,inbiomass
150  WRITE(ylvl,'(I1)') jnbiomass
151  yrecfm='BIOMA'//adjustl(ylvl(:len_trim(ylvl)))
152  CALL read_surf(&
153  hfiletype,yrecfm,pfield(:,jnbiomass,:),iresp,hdir='A')
154  ENDDO
155  CALL close_aux_io_surf(hfile,hfiletype)
156  ELSE
157  oprep_ags = .false.
158  ENDIF
159 !
160  CASE('LITTER')
161  CALL open_aux_io_surf(&
162  hfile,hfiletype,'NATURE')
163  yrecfm='RESPSL'
164  CALL read_surf(&
165  hfiletype,yrecfm,yrespsl,iresp)
166  IF(yrespsl=='CNT')THEN
167  yrecfm='NLITTER'
168  CALL read_surf(&
169  hfiletype,yrecfm,inlitter,iresp)
170  yrecfm='NLITTLEVS'
171  CALL read_surf(&
172  hfiletype,yrecfm,inlittlevs,iresp)
173  ALLOCATE(pfield(ini,inlitter*inlittlevs,ipatch))
174  pfield(:,:,:) = xundef
175  iwork=0
176  DO jnlitter=1,inlitter
177  DO jnlittlevs=1,inlittlevs
178  iwork=iwork+1
179  WRITE(ylvl,'(I1,A1,I1)') jnlitter,'_',jnlittlevs
180  yrecfm='LITTER'//adjustl(ylvl(:len_trim(ylvl)))
181  CALL read_surf(&
182  hfiletype,yrecfm,pfield(:,iwork,:),iresp,hdir='A')
183  ENDDO
184  ENDDO
185  ELSE
186  oprep_ags = .false.
187  ENDIF
188  CALL close_aux_io_surf(hfile,hfiletype)
189 !
190  CASE('SOILCARB')
191  CALL open_aux_io_surf(&
192  hfile,hfiletype,'NATURE')
193  yrecfm='RESPSL'
194  CALL read_surf(&
195  hfiletype,yrecfm,yrespsl,iresp)
196  IF(yrespsl=='CNT')THEN
197  yrecfm='NSOILCARB'
198  CALL read_surf(&
199  hfiletype,yrecfm,insoilcarb,iresp)
200  ALLOCATE(pfield(ini,insoilcarb,ipatch))
201  pfield(:,:,:) = xundef
202  DO jnsoilcarb=1,insoilcarb
203  WRITE(ylvl,'(I4)') jnsoilcarb
204  yrecfm='SOILCARB'//adjustl(ylvl(:len_trim(ylvl)))
205  CALL read_surf(&
206  hfiletype,yrecfm,pfield(:,jnsoilcarb,:),iresp,hdir='A')
207  ENDDO
208  ELSE
209  oprep_ags = .false.
210  ENDIF
211  CALL close_aux_io_surf(hfile,hfiletype)
212 !
213  CASE('LIGNIN')
214  CALL open_aux_io_surf(&
215  hfile,hfiletype,'NATURE')
216  yrecfm='RESPSL'
217  CALL read_surf(&
218  hfiletype,yrecfm,yrespsl,iresp)
219  IF(yrespsl=='CNT')THEN
220  yrecfm='NLITTLEVS'
221  CALL read_surf(&
222  hfiletype,yrecfm,inlittlevs,iresp)
223  ALLOCATE(pfield(ini,inlittlevs,ipatch))
224  pfield(:,:,:) = xundef
225  DO jnlittlevs=1,inlittlevs
226  WRITE(ylvl,'(I4)') jnlittlevs
227  yrecfm='LIGNIN_STR'//adjustl(ylvl(:len_trim(ylvl)))
228  CALL read_surf(&
229  hfiletype,yrecfm,pfield(:,jnlittlevs,:),iresp,hdir='A')
230  ENDDO
231  ELSE
232  oprep_ags = .false.
233  ENDIF
234  CALL close_aux_io_surf(hfile,hfiletype)
235 !
236 END SELECT
237 !
238 !
239 !---------------------------------------------------------------------------
240 !
241 !* 6. End of IO
242 ! ---------
243 !
244 IF (lhook) CALL dr_hook('PREP_ISBA_CC_EXTERN',1,zhook_handle)
245 !
246 !---------------------------------------------------------------------------
247 !---------------------------------------------------------------------------
248 END SUBROUTINE prep_isba_cc_extern
subroutine close_aux_io_surf(HFILE, HFILETYPE)
subroutine open_aux_io_surf(HFILE, HFILETYPE, HMASK)
subroutine prep_isba_cc_extern(HPROGRAM, HSURF, HFILE, HFILETYPE, HFILEPGD, HFILEPGDTYPE, KLUOUT, PFIELD, OPREP_AGS)
subroutine prep_grid_extern(HFILETYPE, KLUOUT, HGRIDTYPE, HINTERP_TYPE, KNI)