SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
pgd_bathyfield.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 pgd_bathyfield (UG, U, USS, &
7  hprogram,hfield,harea,hfile,hfiletype,&
8  hncvarname,punif,pfield)
9 ! ##############################################################
10 !
11 !!**** *PGD_FIELD* monitor for averaging and interpolations of ISBA physiographic fields
12 !!
13 !! PURPOSE
14 !! -------
15 !!
16 !! METHOD
17 !! ------
18 !!
19 !
20 !! EXTERNAL
21 !! --------
22 !!
23 !! IMPLICIT ARGUMENTS
24 !! ------------------
25 !!
26 !! REFERENCE
27 !! ---------
28 !!
29 !! AUTHOR
30 !! ------
31 !!
32 !! C. Lebeaupin Brossier Meteo-France
33 !!
34 !! MODIFICATION
35 !! ------------
36 !!
37 !! Original 01/2008
38 !!
39 !----------------------------------------------------------------------------
40 !
41 !* 0. DECLARATION
42 ! -----------
43 !
44 !
45 !
47 USE modd_surf_atm_n, ONLY : surf_atm_t
49 !
50 USE modd_surf_par, ONLY : xundef
51 USE modd_pgd_grid, ONLY : nl
52 USE modd_pgdwork, ONLY : xsumval, nsize
53 !
54 USE modi_get_luout
55 USE modi_treat_bathyfield
56 USE modi_interpol_field
57 !
58 USE yomhook ,ONLY : lhook, dr_hook
59 USE parkind1 ,ONLY : jprb
60 !
61 USE modi_abor1_sfx
62 !
63 IMPLICIT NONE
64 !
65 !* 0.1 Declaration of arguments
66 ! ------------------------
67 !
68 !
69 TYPE(surf_atm_grid_t), INTENT(INOUT) :: ug
70 TYPE(surf_atm_t), INTENT(INOUT) :: u
71 TYPE(surf_atm_sso_t), INTENT(INOUT) :: uss
72 !
73  CHARACTER(LEN=6), INTENT(IN) :: hprogram ! Type of program
74  CHARACTER(LEN=*), INTENT(IN) :: hfield ! field name for prints
75  CHARACTER(LEN=3), INTENT(IN) :: harea ! area where field is defined
76 ! ! 'ALL' : everywhere
77 ! ! 'NAT' : on nature
78 ! ! 'TWN' : on town
79 ! ! 'SEA' : on sea
80 ! ! 'WAT' : on inland waters
81 ! ! 'LAN' : on nature + on town
82  CHARACTER(LEN=28), INTENT(IN) :: hfile ! data file name
83  CHARACTER(LEN=6), INTENT(IN) :: hfiletype ! data file type
84  CHARACTER(LEN=28), INTENT(IN) :: hncvarname! variable name to read
85 REAL, INTENT(IN) :: punif ! prescribed uniform value for field
86 REAL, DIMENSION(:),INTENT(OUT):: pfield ! physiographic field
87 !
88 !
89 !* 0.2 Declaration of local variables
90 ! ------------------------------
91 !
92 INTEGER :: iluout ! output listing logical unit
93 !
94  CHARACTER(LEN=20) :: yfield
95 INTEGER :: jloop
96 REAL(KIND=JPRB) :: zhook_handle
97 !-------------------------------------------------------------------------------
98 !
99 !* 1. Initializations
100 ! ---------------
101 !
102 IF (lhook) CALL dr_hook('PGD_BATHYFIELD',0,zhook_handle)
103 pfield(:) = xundef
104 !-------------------------------------------------------------------------------
105 !
106 !* 2. Output listing logical unit
107 ! ---------------------------
108 !
109  CALL get_luout(hprogram,iluout)
110 !
111 !-------------------------------------------------------------------------------
112 !
113 !* 3.2 No data
114 ! -------
115 !
116 IF (len_trim(hfile)/=0) THEN
117 !
118 !-------------------------------------------------------------------------------
119 !
120 !* 3. Averages the field
121 ! ------------------
122 !
123  ALLOCATE(nsize(nl))
124  ALLOCATE(xsumval(nl))
125 !
126  nsize(:) = 0.
127  xsumval(:) = 0.
128 !
129  yfield = ' '
130  yfield = hfield(1:min(len(hfield),20))
131 !
132  CALL treat_bathyfield(ug, u, uss, &
133  hprogram,'SURF ',hfiletype,'A_MESH',hfile, hncvarname,&
134  yfield,pfield,harea )
135 !
136 !-------------------------------------------------------------------------------
137 !
138 !* 4. Mask for the interpolations
139 ! ---------------------------
140 !
141  SELECT CASE (harea)
142  CASE ('LAN')
143  WHERE (u%XTOWN(:)+u%XNATURE(:)==0. .AND. nsize(:)==0 ) nsize(:) = -1
144  CASE ('TWN')
145  WHERE (u%XTOWN (:)==0. .AND. nsize(:)==0 ) nsize(:) = -1
146  CASE ('NAT')
147  WHERE (u%XNATURE(:)==0. .AND. nsize(:)==0 ) nsize(:) = -1
148  CASE ('SEA')
149  WHERE (u%XSEA (:)==0. .AND. nsize(:)==0 ) nsize(:) = -1
150  CASE ('WAT')
151  WHERE (u%XWATER (:)==0. .AND. nsize(:)==0 ) nsize(:) = -1
152 
153  END SELECT
154 !
155 !-------------------------------------------------------------------------------
156 !
157 !* 5. Interpolation if some points are not initialized (no data for these points)
158 ! ------------------------------------------------
159 !
160  CALL interpol_field(ug, u, &
161  hprogram,iluout,nsize,pfield(:),hfield)
162 !
163  DO jloop=1,SIZE(pfield)
164  pfield(jloop)=min(pfield(jloop),-1.)
165  ENDDO
166  DEALLOCATE(nsize )
167  DEALLOCATE(xsumval )
168 !
169 !-------------------------------------------------------------------------------
170 !
171 !
172 !* 3. Uniform field is prescribed
173 ! ---------------------------
174 !
175 !
176 ELSEIF (punif/=xundef) THEN
177 !
178 !* 3.1 Use of the presribed field
179 ! --------------------------
180 !
181  pfield(:) = punif
182 !
183 ELSE
184 !
185  WRITE(iluout,*) ' '
186  WRITE(iluout,*) '***********************************************************'
187  WRITE(iluout,*) '* Error in PGD field preparation of field : ', hfield
188  WRITE(iluout,*) '* There is no prescribed value and no input file *'
189  WRITE(iluout,*) '***********************************************************'
190  WRITE(iluout,*) ' '
191  CALL abor1_sfx('PGD_BATHYFIELD: NO PRESCRIBED VALUE NOR INPUT FILE FOR '//hfield)
192 !
193 END IF
194 !-------------------------------------------------------------------------------
195 !
196 !* 6. Mask for the field
197 ! ------------------
198 !
199 SELECT CASE (harea)
200  CASE ('LAN')
201  WHERE (u%XTOWN(:)+u%XNATURE(:)==0.) pfield(:) = xundef
202  CASE ('TWN')
203  WHERE (u%XTOWN (:)==0.) pfield(:) = xundef
204  CASE ('NAT')
205  WHERE (u%XNATURE(:)==0.) pfield(:) = xundef
206  CASE ('SEA')
207  WHERE (u%XSEA (:)==0.) pfield(:) = xundef
208  CASE ('WAT')
209  WHERE (u%XWATER (:)==0.) pfield(:) = xundef
210 
211 END SELECT
212 IF (lhook) CALL dr_hook('PGD_BATHYFIELD',1,zhook_handle)
213 !
214 !-------------------------------------------------------------------------------
215 !
216 END SUBROUTINE pgd_bathyfield
subroutine abor1_sfx(YTEXT)
Definition: abor1_sfx.F90:6
subroutine get_luout(HPROGRAM, KLUOUT)
Definition: get_luout.F90:6
subroutine interpol_field(UG, U, HPROGRAM, KLUOUT, KCODE, PFIELD, HFIELD, PDEF, KNPTS)
subroutine pgd_bathyfield(UG, U, USS, HPROGRAM, HFIELD, HAREA, HFILE, HFILETYPE, HNCVARNAME, PUNIF, PFIELD)
subroutine treat_bathyfield(UG, U, USS, HPROGRAM, HSCHEME, HFILETYPE, HSUBROUTINE, HFILENAME, HNCVARNAME, HFIELD, PPGDARRAY, HSFTYPE)