SURFEX v8.1
General documentation of Surfex
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 USE modd_surfex_mpi, ONLY : nrank, npio
47 USE modd_surf_atm_n, ONLY : surf_atm_t
48 USE modd_sso_n, ONLY : sso_t
49 !
50 USE modd_surf_par, ONLY : xundef
51 USE modd_pgd_grid, ONLY : nl
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(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 !-------------------------------------------------------------------------------
104 !
105 !* 2. Output listing logical unit
106 ! ---------------------------
107 !
108  CALL get_luout(hprogram,iluout)
109 !
110 !-------------------------------------------------------------------------------
111 !
112 !* 3.2 No data
113 ! -------
114 !
115 IF (len_trim(hfile)/=0) THEN
116 !
117 !-------------------------------------------------------------------------------
118 !
119 !* 3. Averages the field
120 ! ------------------
121 !
122  ALLOCATE(nsize_all(u%NDIM_FULL,1))
123  ALLOCATE(xall(u%NDIM_FULL,1,1))
124 !
125  nsize_all(:,:) = 0
126  xall(:,:,:) = 0.
127 !
128  yfield = ' '
129  yfield = hfield(1:min(len(hfield),20))
130 !
131  pfield(:) = xundef
132 
133  CALL treat_bathyfield(ug, u, uss, &
134  hprogram,'SURF ',hfiletype,'A_MESH',hfile, hncvarname,&
135  yfield,pfield,harea )
136 !
137 !-------------------------------------------------------------------------------
138 !
139 !* 4. Mask for the interpolations
140 ! ---------------------------
141 !
142  SELECT CASE (harea)
143  CASE ('LAN')
144  WHERE (u%XTOWN(:)+u%XNATURE(:)==0. .AND. nsize(:,1)==0 ) nsize(:,1) = -1
145  CASE ('TWN')
146  WHERE (u%XTOWN (:)==0. .AND. nsize(:,1)==0 ) nsize(:,1) = -1
147  CASE ('NAT')
148  WHERE (u%XNATURE(:)==0. .AND. nsize(:,1)==0 ) nsize(:,1) = -1
149  CASE ('SEA')
150  WHERE (u%XSEA (:)==0. .AND. nsize(:,1)==0 ) nsize(:,1) = -1
151  CASE ('WAT')
152  WHERE (u%XWATER (:)==0. .AND. nsize(:,1)==0 ) nsize(:,1) = -1
153 
154  END SELECT
155 !
156 !-------------------------------------------------------------------------------
157 !
158 !* 5. Interpolation if some points are not initialized (no data for these points)
159 ! ------------------------------------------------
160 !
161  CALL interpol_field(ug, u, &
162  hprogram,iluout,nsize(:,1),pfield(:),hfield)
163 !
164  DO jloop=1,SIZE(pfield)
165  pfield(jloop)=min(pfield(jloop),-1.)
166  ENDDO
167  DEALLOCATE(nsize )
168  DEALLOCATE(xsumval )
169 !
170 !-------------------------------------------------------------------------------
171 !
172 !
173 !* 3. Uniform field is prescribed
174 ! ---------------------------
175 !
176 !
177 ELSEIF (punif/=xundef) THEN
178 !
179 !* 3.1 Use of the presribed field
180 ! --------------------------
181 !
182  pfield(:) = punif
183 !
184 ELSE
185 !
186  WRITE(iluout,*) ' '
187  WRITE(iluout,*) '***********************************************************'
188  WRITE(iluout,*) '* Error in PGD field preparation of field : ', hfield
189  WRITE(iluout,*) '* There is no prescribed value and no input file *'
190  WRITE(iluout,*) '***********************************************************'
191  WRITE(iluout,*) ' '
192  CALL abor1_sfx('PGD_BATHYFIELD: NO PRESCRIBED VALUE NOR INPUT FILE FOR '//hfield)
193 !
194 END IF
195 !-------------------------------------------------------------------------------
196 !
197 !* 6. Mask for the field
198 ! ------------------
199 !
200 SELECT CASE (harea)
201  CASE ('LAN')
202  WHERE (u%XTOWN(:)+u%XNATURE(:)==0.) pfield(:) = xundef
203  CASE ('TWN')
204  WHERE (u%XTOWN (:)==0.) pfield(:) = xundef
205  CASE ('NAT')
206  WHERE (u%XNATURE(:)==0.) pfield(:) = xundef
207  CASE ('SEA')
208  WHERE (u%XSEA (:)==0.) pfield(:) = xundef
209  CASE ('WAT')
210  WHERE (u%XWATER (:)==0.) pfield(:) = xundef
211 
212 END SELECT
213 IF (lhook) CALL dr_hook('PGD_BATHYFIELD',1,zhook_handle)
214 !
215 !-------------------------------------------------------------------------------
216 !
217 END SUBROUTINE pgd_bathyfield
integer, dimension(:,:), allocatable nsize_all
real, dimension(:,:,:), allocatable xall
subroutine abor1_sfx(YTEXT)
Definition: abor1_sfx.F90:7
real, parameter xundef
integer, parameter jprb
Definition: parkind1.F90:32
real, dimension(:,:), allocatable xsumval
subroutine get_luout(HPROGRAM, KLUOUT)
Definition: get_luout.F90:7
logical lhook
Definition: yomhook.F90:15
integer, dimension(:,:), allocatable nsize
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)
subroutine interpol_field(UG, U, HPROGRAM, KLUOUT, KCODE, PFIELD, HFIELD, PDE