SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
prep_flake_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_flake_extern (&
7  hprogram,hsurf,hfile,hfiletype,hfilepgd,hfilepgdtype,kluout,pfield)
8 ! #################################################################################
9 !
10 !
11 !
12 !
14 !
15 USE modi_prep_grid_extern
17 USE modi_open_aux_io_surf
18 USE modi_close_aux_io_surf
19 USE modi_abor1_sfx
20 USE modi_get_luout
21 !
22 USE modd_prep, ONLY : cingrid_type, cinterp_type
23 USE modd_surf_par, ONLY : xundef
24 !
25 USE yomhook ,ONLY : lhook, dr_hook
26 USE parkind1 ,ONLY : jprb
27 !
28 IMPLICIT NONE
29 !
30 !* 0.1 declarations of arguments
31 !
32 !
33 !
34  CHARACTER(LEN=6), INTENT(IN) :: hprogram ! program calling surf. schemes
35  CHARACTER(LEN=7), INTENT(IN) :: hsurf ! type of field
36  CHARACTER(LEN=28), INTENT(IN) :: hfile ! name of file
37  CHARACTER(LEN=6), INTENT(IN) :: hfiletype ! type of input file
38  CHARACTER(LEN=28), INTENT(IN) :: hfilepgd ! name of file
39  CHARACTER(LEN=6), INTENT(IN) :: hfilepgdtype ! type of input file
40 INTEGER, INTENT(IN) :: kluout ! logical unit of output listing
41 REAL,DIMENSION(:,:), POINTER :: pfield ! field to interpolate horizontally
42 !
43 !* 0.2 declarations of local variables
44 !
45 !
46 REAL, DIMENSION(:), ALLOCATABLE :: zmask
47 !
48  CHARACTER(LEN=12) :: yrecfm ! Name of the article to be read
49 INTEGER :: iresp ! reading return code
50 INTEGER :: iluout
51 !
52 INTEGER :: iversion ! total 1D dimensio
53 INTEGER :: ini ! total 1D dimension
54  CHARACTER(LEN=6) :: ywater ! lake scheme
55 INTEGER :: idim_water ! number of water points
56 REAL(KIND=JPRB) :: zhook_handle
57 !
58 !-------------------------------------------------------------------------------------
59 !
60 !* 1. Preparation of IO for reading in the file
61 ! -----------------------------------------
62 !
63 !* Note that all points are read, even those without physical meaning.
64 ! These points will not be used during the horizontal interpolation step.
65 ! Their value must be defined as XUNDEF.
66 !
67 IF (lhook) CALL dr_hook('PREP_FLAKE_EXTERN',0,zhook_handle)
68 !
69  CALL open_aux_io_surf(&
70  hfilepgd,hfilepgdtype,'FULL ')
71 !
72  CALL read_surf(&
73  hfilepgdtype,'WATER',ywater,iresp)
74 !
75 !-------------------------------------------------------------------------------------
76 !
77 !* 2. Reading of grid
78 ! ---------------
79 !
80  CALL prep_grid_extern(&
81  hfilepgdtype,kluout,cingrid_type,cinterp_type,ini)
82 !
83  CALL read_surf(&
84  hfilepgdtype,'DIM_WATER',idim_water,iresp)
85 !
86 yrecfm='VERSION'
87  CALL read_surf(hfilepgdtype,yrecfm,iversion,iresp)
88 !
89 ALLOCATE(zmask(ini))
90 IF (iversion>=7) THEN
91  yrecfm='FRAC_WATER'
92  CALL read_surf(hfilepgdtype,yrecfm,zmask,iresp,hdir='A')
93 ELSE
94  zmask(:) = 1.
95 ENDIF
96 !
97 IF (idim_water==0) THEN
98  CALL get_luout(hprogram,iluout)
99  WRITE(iluout,*) ' '
100  WRITE(iluout,*) 'No inland water data available in input file ',hfile
101  WRITE(iluout,*) 'Please change your input file '
102  WRITE(iluout,*) ' or '
103  WRITE(iluout,*) 'specify inland water temperature XTS_WATER_UNIF'
104  CALL abor1_sfx('PREP_FLAKE_EXTERN: No inland water data available in input file')
105 END IF
106 !
107 !---------------------------------------------------------------------------------------
108 SELECT CASE(hsurf)
109 !---------------------------------------------------------------------------------------
110 !
111 !* 3. Orography
112 ! ---------
113 !
114  CASE('ZS ')
115  ALLOCATE(pfield(ini,1))
116  yrecfm='ZS'
117  CALL read_surf(&
118  hfilepgdtype,yrecfm,pfield(:,1),iresp,hdir='A')
119  CALL close_aux_io_surf(hfilepgd,hfilepgdtype)
120 !
121 !* 4. Sea surface temperature
122 ! -----------------------
123 !
124  CASE('TS ')
125  ALLOCATE(pfield(ini,1))
126  yrecfm='TS_WATER'
127  CALL close_aux_io_surf(hfilepgd,hfilepgdtype)
128  CALL open_aux_io_surf(&
129  hfile,hfiletype,'WATER ')
130  CALL read_surf(&
131  hfiletype,yrecfm,pfield(:,1),iresp,hdir='A')
132  CALL close_aux_io_surf(hfile,hfiletype)
133  WHERE (zmask(:)==0.) pfield(:,1) = xundef
134 !
135 END SELECT
136 !
137 !* 5. FLake variables
138 ! -----------------------
139 !
140 IF (hsurf/='ZS ' .AND. hsurf/='TS ') THEN
141 
142  CALL close_aux_io_surf(hfilepgd,hfilepgdtype)
143 
144  IF (ywater=='FLAKE ') THEN
145 
146  CALL open_aux_io_surf(&
147  hfile,hfiletype,'WATER ')
148 
149  SELECT CASE(hsurf)
150 
151  CASE('T_SNOW ')
152  ALLOCATE(pfield(ini,1))
153  yrecfm='T_SNOW '
154  CALL read_surf(&
155  hfiletype,yrecfm,pfield(:,1),iresp,hdir='A')
156 !
157  CASE('T_ICE ')
158  ALLOCATE(pfield(ini,1))
159  yrecfm='T_ICE '
160  CALL read_surf(&
161  hfiletype,yrecfm,pfield(:,1),iresp,hdir='A')
162 !
163  CASE('T_MNW ')
164  ALLOCATE(pfield(ini,1))
165  yrecfm='T_MNW '
166  CALL read_surf(&
167  hfiletype,yrecfm,pfield(:,1),iresp,hdir='A')
168 !
169  CASE('T_BOT ')
170  ALLOCATE(pfield(ini,1))
171  yrecfm='T_BOT '
172  CALL read_surf(&
173  hfiletype,yrecfm,pfield(:,1),iresp,hdir='A')
174 !
175  CASE('T_B1 ')
176  ALLOCATE(pfield(ini,1))
177  yrecfm='T_B1 '
178  CALL read_surf(&
179  hfiletype,yrecfm,pfield(:,1),iresp,hdir='A')
180 !
181  CASE('H_SNOW ')
182  ALLOCATE(pfield(ini,1))
183  yrecfm='H_SNOW '
184  CALL read_surf(&
185  hfiletype,yrecfm,pfield(:,1),iresp,hdir='A')
186 !
187  CASE('H_ICE ')
188  ALLOCATE(pfield(ini,1))
189  yrecfm='H_ICE '
190  CALL read_surf(&
191  hfiletype,yrecfm,pfield(:,1),iresp,hdir='A')
192 !
193  CASE('H_ML ')
194  ALLOCATE(pfield(ini,1))
195  yrecfm='H_ML '
196  CALL read_surf(&
197  hfiletype,yrecfm,pfield(:,1),iresp,hdir='A')
198 !
199  CASE('H_B1 ')
200  ALLOCATE(pfield(ini,1))
201  yrecfm='H_B1 '
202  CALL read_surf(&
203  hfiletype,yrecfm,pfield(:,1),iresp,hdir='A')
204 !
205 !---------------------------------------------------------------------------------------
206  END SELECT
207 
208  WHERE (zmask(:)==0.) pfield(:,1) = xundef
209  CALL close_aux_io_surf(hfile,hfiletype)
210 
211  ELSE
212 !* no Flake field in the input file
213  ALLOCATE(pfield(ini,1))
214  pfield = xundef
215  END IF
216 END IF
217 !-------------------------------------------------------------------------------------
218 !
219 DEALLOCATE(zmask)
220 !
221 !* 6. End of IO
222 ! ---------
223 !
224 IF (lhook) CALL dr_hook('PREP_FLAKE_EXTERN',1,zhook_handle)
225 !
226 !---------------------------------------------------------------------------------------
227 !
228 END SUBROUTINE prep_flake_extern
subroutine prep_flake_extern(HPROGRAM, HSURF, HFILE, HFILETYPE, HFILEPGD, HFILEPGDTYPE, KLUOUT, PFIELD)
subroutine close_aux_io_surf(HFILE, HFILETYPE)
subroutine abor1_sfx(YTEXT)
Definition: abor1_sfx.F90:6
subroutine open_aux_io_surf(HFILE, HFILETYPE, HMASK)
subroutine get_luout(HPROGRAM, KLUOUT)
Definition: get_luout.F90:6
subroutine prep_grid_extern(HFILETYPE, KLUOUT, HGRIDTYPE, HINTERP_TYPE, KNI)