SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
ver_interp_lin_surf.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 ! ######################
7 ! ######################
9 ! ##############################################
10  FUNCTION ver_interp_lin3d_surf_bis(PVAR1,KKLIN,PCOEFLIN) RESULT(PVAR2)
11 ! ##############################################
12 !
13 ! third dimension of the arrays is vertical
14 !
15 REAL, DIMENSION(:,:,:), INTENT(IN) :: pvar1 ! variable values on the initial
16 ! ! grid
17 INTEGER,DIMENSION(:,:,:), INTENT(IN) :: kklin ! lower interpolating level of
18 ! ! grid 1 for each level of grid 2
19 REAL, DIMENSION(:,:,:), INTENT(IN) :: pcoeflin ! coefficient for level KKLIN
20 !
21 REAL, DIMENSION(SIZE(KKLIN,1),SIZE(KKLIN,2),SIZE(KKLIN,3)) &
22  :: pvar2 ! variable values on target
23 ! ! grid
24 END FUNCTION ver_interp_lin3d_surf_bis
25 ! ##############################################
26  FUNCTION ver_interp_lin2d_surf(PVAR1,KKLIN,PCOEFLIN) RESULT(PVAR2)
27 ! ##############################################
28 !
29 ! second dimension of the arrays is vertical
30 !
31 REAL, DIMENSION(:,:), INTENT(IN) :: pvar1 ! variable values on the initial
32 ! ! grid
33 INTEGER,DIMENSION(:,:), INTENT(IN) :: kklin ! lower interpolating level of
34 ! ! grid 1 for each level of grid 2
35 REAL, DIMENSION(:,:), INTENT(IN) :: pcoeflin ! coefficient for level KKLIN
36 !
37 REAL, DIMENSION(SIZE(KKLIN,1),SIZE(KKLIN,2)) &
38  :: pvar2 ! variable values on target
39 ! ! grid
40 END FUNCTION ver_interp_lin2d_surf
41 ! ##############################################
42  FUNCTION ver_interp_lin1d_surf(PVAR1,KKLIN,PCOEFLIN) RESULT(PVAR2)
43 ! ##############################################
44 !
45 ! first dimension of the arrays is vertical
46 !
47 REAL, DIMENSION(:), INTENT(IN) :: pvar1 ! variable values on the initial
48 ! ! grid
49 INTEGER,DIMENSION(:), INTENT(IN) :: kklin ! lower interpolating level of
50 ! ! grid 1 for each level of grid 2
51 REAL, DIMENSION(:), INTENT(IN) :: pcoeflin ! coefficient for level KKLIN
52 !
53 REAL, DIMENSION(SIZE(KKLIN)) :: pvar2 ! variable values on target
54 ! ! grid
55 END FUNCTION ver_interp_lin1d_surf
56 !
57 !
58 END INTERFACE
59 END MODULE modi_ver_interp_lin_surf
60 ! ##############################################
61  FUNCTION ver_interp_lin3d_surf_bis(PVAR1,KKLIN,PCOEFLIN) RESULT(PVAR2)
62 ! ##############################################
63 !
64 !!**** *VER_INTERP_LIN* - vertical linear interpolation
65 !!
66 !! PURPOSE
67 !! -------
68 ! This function interpolates the 3D fields from one grid
69 ! to another using linear interpolation cofficients stored in module
70 ! MODD_VER_INTERP_LIN.
71 !
72 !!
73 !!** METHOD
74 !! ------
75 !!
76 !! EXTERNAL
77 !! --------
78 !!
79 !! IMPLICIT ARGUMENTS
80 !! ------------------
81 !!
82 !! REFERENCE
83 !! ---------
84 !!
85 !! Book 2
86 !!
87 !! AUTHOR
88 !! ------
89 !!
90 ! V.Masson Meteo-France
91 !!
92 !! MODIFICATIONS
93 !! -------------
94 !! Original 18/07/97
95 !-------------------------------------------------------------------------------
96 !
97 !* 0. DECLARATIONS
98 ! ------------
99 !
100 !
101 USE yomhook ,ONLY : lhook, dr_hook
102 USE parkind1 ,ONLY : jprb
103 !
104 USE modi_ver_interp_lin3d_surf
105 !
106 IMPLICIT NONE
107 !
108 !* 0.1 Declaration of arguments
109 ! ------------------------
110 REAL, DIMENSION(:,:,:), INTENT(IN) :: pvar1 ! variable values on the initial
111 ! ! grid
112 INTEGER,DIMENSION(:,:,:), INTENT(IN) :: kklin ! lower interpolating level of
113 ! ! grid 1 for each level of grid 2
114 REAL, DIMENSION(:,:,:), INTENT(IN) :: pcoeflin ! coefficient for level KKLIN
115 !
116 REAL, DIMENSION(SIZE(KKLIN,1),SIZE(KKLIN,2),SIZE(KKLIN,3)) &
117  :: pvar2 ! variable values on target
118 ! ! grid
119 !
120 !* 0.2 Declaration of local variables
121 ! ------------------------------
122 !
123 INTEGER :: ji,jj,jk2
124 REAL(KIND=JPRB) :: zhook_handle
125 !-------------------------------------------------------------------------------
126 !
127 IF (lhook) CALL dr_hook('MODI_VER_INTERP_LIN_SURF:VER_INTERP_LIN3D_SURF_BIS',0,zhook_handle)
128 pvar2(:,:,:)=ver_interp_lin3d_surf(pvar1(:,:,:),kklin(:,:,:),pcoeflin(:,:,:))
129 IF (lhook) CALL dr_hook('MODI_VER_INTERP_LIN_SURF:VER_INTERP_LIN3D_SURF_BIS',1,zhook_handle)
130 !
131 !-------------------------------------------------------------------------------
132 !
133 END FUNCTION ver_interp_lin3d_surf_bis
134 ! ##############################################
135  FUNCTION ver_interp_lin2d_surf(PVAR1,KKLIN,PCOEFLIN) RESULT(PVAR2)
136 ! ##############################################
137 !
138 !!**** *VER_INTERP_LIN* - vertical linear interpolation
139 !!
140 !! PURPOSE
141 !! -------
142 !
143 !!
144 !!** METHOD
145 !! ------
146 !!
147 !! This routine calls the 3D version of VER_INTERP_LIN after rewritting of
148 !! the fields under 3D form.
149 !!
150 !! EXTERNAL
151 !! --------
152 !!
153 !! function VER_INTERP_LIN3D
154 !! module MODI_VER_INTERP_LIN3D
155 !!
156 !! IMPLICIT ARGUMENTS
157 !! ------------------
158 !!
159 !! REFERENCE
160 !! ---------
161 !!
162 !! Book 2
163 !!
164 !! AUTHOR
165 !! ------
166 !!
167 ! V.Masson Meteo-France
168 !!
169 !! MODIFICATIONS
170 !! -------------
171 !! Original 17/07/97
172 !-------------------------------------------------------------------------------
173 !
174 !* 0. DECLARATIONS
175 ! ------------
176 !
177 USE modi_ver_interp_lin3d_surf
178 !
179 !
180 USE yomhook ,ONLY : lhook, dr_hook
181 USE parkind1 ,ONLY : jprb
182 !
183 IMPLICIT NONE
184 !
185 !* 0.1 Declaration of arguments
186 ! ------------------------
187 REAL, DIMENSION(:,:), INTENT(IN) :: pvar1 ! variable values on the initial
188 ! ! grid
189 INTEGER,DIMENSION(:,:), INTENT(IN) :: kklin ! lower interpolating level of
190 ! ! grid 1 for each level of grid 2
191 REAL, DIMENSION(:,:), INTENT(IN) :: pcoeflin ! coefficient for level KKLIN
192 !
193 REAL, DIMENSION(SIZE(KKLIN,1),SIZE(KKLIN,2)) :: pvar2 ! variable values on
194 ! ! target grid
195 !
196 !* 0.2 Declaration of local variables
197 ! ------------------------------
198 !
199 REAL, DIMENSION(1,SIZE(PVAR1,1),SIZE(PVAR1,2)) :: zvar1 ! variable values on the initial
200 ! ! grid
201 REAL, DIMENSION(1,SIZE(KKLIN,1),SIZE(KKLIN,2)) :: zvar2 ! variable values on target
202 !
203 INTEGER,DIMENSION(1,SIZE(KKLIN,1),SIZE(KKLIN,2)) :: iklin ! lower interpolating level of
204 ! ! grid 1 for each level of grid 2
205 REAL, DIMENSION(1,SIZE(PCOEFLIN,1),SIZE(PCOEFLIN,2)):: zcoeflin ! coefficient for level KKLIN
206 REAL(KIND=JPRB) :: zhook_handle
207 !
208 !-------------------------------------------------------------------------------
209 !
210 IF (lhook) CALL dr_hook('MODI_VER_INTERP_LIN_SURF:VER_INTERP_LIN2D_SURF',0,zhook_handle)
211 zvar1(1,:,:)=pvar1(:,:)
212 iklin(1,:,:)=kklin(:,:)
213 zcoeflin(1,:,:)=pcoeflin(:,:)
214 !
215 zvar2(:,:,:)=ver_interp_lin3d_surf(zvar1(:,:,:),iklin(:,:,:),zcoeflin(:,:,:))
216 !
217 pvar2(:,:) =zvar2(1,:,:)
218 IF (lhook) CALL dr_hook('MODI_VER_INTERP_LIN_SURF:VER_INTERP_LIN2D_SURF',1,zhook_handle)
219 !
220 !-------------------------------------------------------------------------------
221 !
222 END FUNCTION ver_interp_lin2d_surf
223 ! ##############################################
224  FUNCTION ver_interp_lin1d_surf(PVAR1,KKLIN,PCOEFLIN) RESULT(PVAR2)
225 ! ##############################################
226 !
227 !!**** *VER_INTERP_LIN* - vertical linear interpolation
228 !!
229 !! PURPOSE
230 !! -------
231 !
232 !!
233 !!** METHOD
234 !! ------
235 !!
236 !! This routine calls the 3D version of VER_INTERP_LIN after rewritting of
237 !! the fields under 3D form.
238 !!
239 !! EXTERNAL
240 !! --------
241 !!
242 !! function VER_INTERP_LIN3D
243 !! module MODI_VER_INTERP_LIN3D
244 !!
245 !! IMPLICIT ARGUMENTS
246 !! ------------------
247 !!
248 !! REFERENCE
249 !! ---------
250 !!
251 !! Book 2
252 !!
253 !! AUTHOR
254 !! ------
255 !!
256 ! V.Masson Meteo-France
257 !!
258 !! MODIFICATIONS
259 !! -------------
260 !! Original 17/07/97
261 !-------------------------------------------------------------------------------
262 !
263 !* 0. DECLARATIONS
264 ! ------------
265 !
266 USE modi_ver_interp_lin3d_surf
267 !
268 !
269 USE yomhook ,ONLY : lhook, dr_hook
270 USE parkind1 ,ONLY : jprb
271 !
272 IMPLICIT NONE
273 !
274 !* 0.1 Declaration of arguments
275 ! ------------------------
276 REAL, DIMENSION(:), INTENT(IN) :: pvar1 ! variable values on the initial
277 ! ! grid
278 INTEGER,DIMENSION(:), INTENT(IN) :: kklin ! lower interpolating level of
279 ! ! grid 1 for each level of grid 2
280 REAL, DIMENSION(:), INTENT(IN) :: pcoeflin ! coefficient for level KKLIN
281 
282 REAL, DIMENSION(SIZE(KKLIN)) :: pvar2 ! variable values on target
283 ! ! grid
284 !
285 !* 0.2 Declaration of local variables
286 ! ------------------------------
287 !
288 INTEGER,DIMENSION(1,1,SIZE(KKLIN)) :: iklin ! lower interpolating level of
289 ! ! grid 1 for each level of grid 2
290 REAL, DIMENSION(1,1,SIZE(PCOEFLIN)) :: zcoeflin ! coefficient for level KKLIN
291 !
292 REAL, DIMENSION(1,1,SIZE(PVAR1)) :: zvar1 ! variable values on the initial
293 ! ! grid
294 REAL, DIMENSION(1,1,SIZE(KKLIN)) :: zvar2 ! variable values on target
295 REAL(KIND=JPRB) :: zhook_handle
296 !
297 !-------------------------------------------------------------------------------
298 !
299 IF (lhook) CALL dr_hook('MODI_VER_INTERP_LIN_SURF:VER_INTERP_LIN1D_SURF',0,zhook_handle)
300 zvar1(1,1,:)=pvar1(:)
301 iklin(1,1,:)=kklin(:)
302 zcoeflin(1,1,:)=pcoeflin(:)
303 !
304 zvar2(:,:,:)=ver_interp_lin3d_surf(zvar1(:,:,:),iklin(:,:,:),zcoeflin(:,:,:))
305 !
306 pvar2(:) =zvar2(1,1,:)
307 IF (lhook) CALL dr_hook('MODI_VER_INTERP_LIN_SURF:VER_INTERP_LIN1D_SURF',1,zhook_handle)
308 !
309 !-------------------------------------------------------------------------------
310 !
311 END FUNCTION ver_interp_lin1d_surf
real function, dimension(size(kklin, 1), size(kklin, 2), size(kklin, 3)) ver_interp_lin3d_surf(PVAR1, KKLIN, PCOEFLIN)
real function, dimension(size(kklin)) ver_interp_lin1d_surf(PVAR1, KKLIN, PCOEFLIN)
real function, dimension(size(kklin, 1), size(kklin, 2), size(kklin, 3)) ver_interp_lin3d_surf_bis(PVAR1, KKLIN, PCOEFLIN)
real function, dimension(size(kklin, 1), size(kklin, 2)) ver_interp_lin2d_surf(PVAR1, KKLIN, PCOEFLIN)