SABER
interpolatorbump_mod.F90
Go to the documentation of this file.
1 # 1 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2 # 1 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/../generics.fypp" 1
3 !----------------------------------------------------------------------
4 ! Header: generics
5 !> Generic ranks, dimensions and types
6 ! Author: Benjamin Menetrier
7 ! Licensing: this code is distributed under the CeCILL-C license
8 ! Copyright 2015-... UCAR, CERFACS, METEO-FRANCE and IRIT
9 !----------------------------------------------------------------------
10 
11 # 57 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/../generics.fypp"
12 # 2 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp" 2
13 # 1 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/../instrumentation.fypp" 1
14 # 1 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/../subr_list.fypp" 1
15 !----------------------------------------------------------------------
16 ! Header: subr_list
17 !> Subroutines/functions list
18 ! Author: Benjamin Menetrier
19 ! Licensing: this code is distributed under the CeCILL-C license
20 ! Copyright 2015-... UCAR, CERFACS, METEO-FRANCE and IRIT
21 !----------------------------------------------------------------------
22 
23 # 926 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/../subr_list.fypp"
24 # 2 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/../instrumentation.fypp" 2
25 !----------------------------------------------------------------------
26 ! Header: instrumentation
27 !> Instrumentation functions
28 ! Author: Benjamin Menetrier
29 ! Licensing: this code is distributed under the CeCILL-C license
30 ! Copyright 2015-... UCAR, CERFACS, METEO-FRANCE and IRIT
31 !----------------------------------------------------------------------
32 
33 # 112 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/../instrumentation.fypp"
34 # 3 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp" 2
35 !----------------------------------------------------------------------
36 ! (C) Copyright 2019-2020 UCAR
37 !
38 ! This software is licensed under the terms of the Apache Licence Version 2.0
39 ! which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
40 !----------------------------------------------------------------------
41 ! Module: bump_interpolation_mod
42 !> BUMP interpolation module
43 !!
44 !! \date Jan, 2020: Created by M. Miesch (JCSDA/UCAR) based on previously exising type_obsop.F90
45 !! written by Benjamin Menetrier (JCSDA/UCAR, CERFACS, METEO-FRANCE, IRIT)
46 !! \date Dec, 2020: Updated by B. Menetrier (JCSDA/IRIT) to use FYPP preprocessing directives
47 !----------------------------------------------------------------------
49 
50 use atlas_module, only: atlas_functionspace,atlas_fieldset,atlas_field,atlas_integer,atlas_metadata,atlas_real
51 use fckit_configuration_module, only: fckit_configuration
52 use fckit_log_module, only: fckit_log
53 use fckit_mpi_module, only: fckit_mpi_comm,fckit_mpi_sum,fckit_mpi_min,fckit_mpi_max,fckit_mpi_status
54 use iso_c_binding, only: c_char
59 use tools_repro, only: rth
60 use type_bump, only: bump_type
61 use type_com, only: com_type
63 use type_geom, only: geom_type
64 use type_linop, only: linop_type
65 use type_mesh, only: mesh_type
66 use type_mpl, only: mpl_type
67 use type_nam, only: nam_type
68 
69 
70 implicit none
71 
72 private
73 public :: bump_interpolator
74 
75 integer,parameter :: max_string = 1024 !< Maximum string size
76 
77 ! BUMP interpolator type
79  private
80 
81  ! BUMP object
82  type(bump_type),public :: bump !< BUMP
83 
84  ! Grid information
85  type(geom_type) :: geom_out !< Output grid geometry
86  type(atlas_functionspace) :: afunctionspace_in !< ATLAS functionspace for input grid
87  type(atlas_functionspace) :: afunctionspace_out !< ATLAS functionspace for output grid
88 
89  ! Number of points
90  integer :: nc0b !< Halo B size
91  integer :: nout !< Global number of output grid points
92  integer :: nouta !< Local number of output grid points
93 
94  ! Interpolation data (operator)
95  type(linop_type) :: h !< Interpolation operator
96 
97  ! Communication data
98  type(com_type) :: com !< Communication data
99 
100  ! Nearest neighbor (for discrete interpolation)
101  integer,allocatable :: nn_index(:) !< Nearest neighbor index
102 
103  ! Dummy variable
104  logical :: dummy_logical !< Dummy variable
105 contains
106  private
107 
108  procedure,private :: driver => bint_driver
109  procedure,public :: init => bint_init
110  procedure,public :: bint_apply
111 # 80 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
112 # 81 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
113 # 82 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
114  procedure,public :: bint_apply_int_r1_r1
115 # 82 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
116  procedure,public :: bint_apply_int_r1_r2
117 # 82 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
118  procedure,public :: bint_apply_int_r1_r3
119 # 84 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
120 # 81 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
121 # 82 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
122  procedure,public :: bint_apply_int_r2_r1
123 # 82 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
124  procedure,public :: bint_apply_int_r2_r2
125 # 82 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
126  procedure,public :: bint_apply_int_r2_r3
127 # 84 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
128 # 81 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
129 # 82 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
130  procedure,public :: bint_apply_int_r3_r1
131 # 82 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
132  procedure,public :: bint_apply_int_r3_r2
133 # 82 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
134  procedure,public :: bint_apply_int_r3_r3
135 # 84 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
136 # 85 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
137 # 80 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
138 # 81 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
139 # 82 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
140  procedure,public :: bint_apply_real_r1_r1
141 # 82 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
142  procedure,public :: bint_apply_real_r1_r2
143 # 82 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
144  procedure,public :: bint_apply_real_r1_r3
145 # 84 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
146 # 81 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
147 # 82 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
148  procedure,public :: bint_apply_real_r2_r1
149 # 82 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
150  procedure,public :: bint_apply_real_r2_r2
151 # 82 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
152  procedure,public :: bint_apply_real_r2_r3
153 # 84 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
154 # 81 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
155 # 82 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
156  procedure,public :: bint_apply_real_r3_r1
157 # 82 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
158  procedure,public :: bint_apply_real_r3_r2
159 # 82 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
160  procedure,public :: bint_apply_real_r3_r3
161 # 84 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
162 # 85 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
163 # 80 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
164 # 81 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
165 # 82 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
166  procedure,public :: bint_apply_logical_r1_r1
167 # 82 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
168  procedure,public :: bint_apply_logical_r1_r2
169 # 82 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
170  procedure,public :: bint_apply_logical_r1_r3
171 # 84 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
172 # 81 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
173 # 82 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
174  procedure,public :: bint_apply_logical_r2_r1
175 # 82 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
176  procedure,public :: bint_apply_logical_r2_r2
177 # 82 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
178  procedure,public :: bint_apply_logical_r2_r3
179 # 84 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
180 # 81 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
181 # 82 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
182  procedure,public :: bint_apply_logical_r3_r1
183 # 82 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
184  procedure,public :: bint_apply_logical_r3_r2
185 # 82 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
186  procedure,public :: bint_apply_logical_r3_r3
187 # 84 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
188 # 85 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
189 # 86 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
190 
191  generic,public :: apply => bint_apply, &
192 # 89 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
193 # 90 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
194 # 91 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
196 # 91 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
198 # 91 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
200 # 93 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
201 # 90 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
202 # 91 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
204 # 91 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
206 # 91 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
208 # 93 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
209 # 90 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
210 # 91 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
212 # 91 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
214 # 91 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
216 # 93 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
217 # 94 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
218 # 89 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
219 # 90 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
220 # 91 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
222 # 91 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
224 # 91 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
226 # 93 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
227 # 90 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
228 # 91 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
230 # 91 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
232 # 91 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
234 # 93 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
235 # 90 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
236 # 91 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
238 # 91 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
240 # 91 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
242 # 93 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
243 # 94 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
244 # 89 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
245 # 90 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
246 # 91 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
248 # 91 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
250 # 91 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
252 # 93 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
253 # 90 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
254 # 91 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
256 # 91 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
258 # 91 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
260 # 93 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
261 # 90 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
262 # 91 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
264 # 91 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
266 # 91 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
268 # 93 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
269 # 94 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
270 # 95 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
271 # 96 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
272  procedure,private :: bint_apply_interp_int
273 # 96 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
274  procedure,private :: bint_apply_interp_real
275 # 96 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
276  procedure,private :: bint_apply_interp_logical
277 # 98 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
278 
279  generic,public :: apply_interp => &
280 # 101 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
282 # 101 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
284 # 101 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
286 # 103 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
287  procedure,public :: bint_apply_ad
288 # 105 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
289 # 106 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
290  procedure,public :: bint_apply_ad_r1_r1
291 # 106 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
292  procedure,public :: bint_apply_ad_r2_r1
293 # 106 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
294  procedure,public :: bint_apply_ad_r3_r1
295 # 108 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
296 # 105 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
297 # 106 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
298  procedure,public :: bint_apply_ad_r1_r2
299 # 106 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
300  procedure,public :: bint_apply_ad_r2_r2
301 # 106 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
302  procedure,public :: bint_apply_ad_r3_r2
303 # 108 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
304 # 105 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
305 # 106 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
306  procedure,public :: bint_apply_ad_r1_r3
307 # 106 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
308  procedure,public :: bint_apply_ad_r2_r3
309 # 106 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
310  procedure,public :: bint_apply_ad_r3_r3
311 # 108 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
312 # 109 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
313 
314  generic,public :: apply_ad => bint_apply_ad, &
315 # 112 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
316 # 113 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
318 # 113 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
320 # 113 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
322 # 115 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
323 # 112 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
324 # 113 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
326 # 113 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
328 # 113 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
330 # 115 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
331 # 112 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
332 # 113 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
334 # 113 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
336 # 113 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
338 # 115 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
339 # 116 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
340  procedure,private :: apply_interp_ad => bint_apply_interp_ad
341  procedure :: deallocate_outgrid => bint_deallocate_outgrid
342  procedure,public :: delete => bint_delete
344 end type bump_interpolator
345 
346 contains
347 
348 !----------------------------------------------------------------------
349 ! Subroutine: bint_init
350 !> Initialize interpolation object
351 !! The input and output fields are ATLAS_FieldSet objects that are assumed
352 !! to be created from ATLAS functionspaces. So, they have the grid and
353 !! mesh information built in.
354 !----------------------------------------------------------------------
355 subroutine bint_init(bint,comm, &
356  & lon1d_in,lat1d_in, &
357  & lon_in,lat_in, &
358  & afunctionspace_in, &
359  & lon1d_out,lat1d_out, &
360  & lon_out,lat_out, &
361  & afunctionspace_out, &
362  & nl,fieldset,config)
363 
364 implicit none
365 
366 ! Passed variables
367 class(bump_interpolator),intent(inout) :: bint !< BUMP interpolator
368 type(fckit_mpi_comm),intent(in) :: comm !< Communicator
369 real(kind_real),intent(in),optional :: lon1d_in(:) !< Input longitudes (regular grid) [in degrees]
370 real(kind_real),intent(in),optional :: lat1d_in(:) !< Input latitudes (regular grid) [in degrees]
371 real(kind_real),intent(in),optional :: lon_in(:) !< Input longitudes [in degrees]
372 real(kind_real),intent(in),optional :: lat_in(:) !< Input latitudes [in degrees]
373 type(atlas_functionspace),intent(in),optional :: afunctionspace_in !< Input ATLAS functionspace
374 real(kind_real),intent(in),optional :: lon1d_out(:) !< Output longitudes (regular grid) [in degrees]
375 real(kind_real),intent(in),optional :: lat1d_out(:) !< Output latitudes (regular grid) [in degrees]
376 real(kind_real),intent(in),optional :: lon_out(:) !< Output longitudes [in degrees]
377 real(kind_real),intent(in),optional :: lat_out(:) !< Output latitudes [in degrees]
378 type(atlas_functionspace),intent(in),optional :: afunctionspace_out !< Output ATLAS functionspace
379 integer,intent(in),optional :: nl !< Number of levels
380 type(fieldset_type),intent(in),optional :: fieldset !< Metadata needed for the interpolation, rendered as an ATLAS FieldSet with the following named fields: area (cell area), vunit (vertical unit), gmask (geometry mask) and smask (sampling mask). Each of these named fields is optional, if omitted default values will be provided
381 type(fckit_configuration),intent(in),optional :: config !< Configuration
382 
383 ! Local variables
384 integer :: msvali,inode,ilon,ilat
385 real(kind_real) :: msvalr
386 real(kind_real),allocatable :: lon(:),lat(:)
387 logical :: unique_points
388 type(fckit_configuration) :: bump_config
389 type(atlas_field) :: afield
390 type(atlas_metadata) :: ametadata
391 type(fieldset_type) :: lfieldset
392 
393 ! Set name
394 
395 
396 ! Get instance
397 
398 
399 ! Probe in
400 
401 
402 ! BUMP defaults
403 call bint%bump%nam%init(comm%size())
404 
405 ! Modified defaults for BUMP interpolator
406 bint%bump%nam%prefix = 'bump_interpolator'
407 bint%bump%nam%datadir = 'testdata'
408 bint%bump%nam%verbosity = 'none'
409 if (present(nl)) then
410  bint%bump%nam%nl = nl
411 else
412  bint%bump%nam%nl = 1
413 end if
414 bint%bump%nam%nv = 1
415 bint%bump%nam%variables(1) = 'var'
416 
417 ! Default missing values for integers and reals
418 msvali = -999
419 msvalr = -999.0_kind_real
420 
421 ! By default, input grid contains unique points only
422 unique_points = .true.
423 
424 if (present(config)) then
425  ! Optionally override defaults with BUMP config
426  if (config%has('bump')) then
427  call config%get_or_die('bump',bump_config)
428  call bint%bump%nam%from_conf(comm,bump_config)
429  end if
430 
431  ! Optionally set levels
432  if (config%has('nlevels')) call config%get_or_die('nlevels',bint%bump%nam%nl)
433 
434  ! Optionally set missing values for integers and reals
435  if (config%has('missingvalue_int')) call config%get_or_die('missingvalue_int',msvali)
436  if (config%has('missingvalue_real')) call config%get_or_die('missingvalue_real',msvalr)
437 
438  ! Optionnaly set unique_points flag
439  if (config%has('unique_points')) call config%get_or_die('unique_points',unique_points)
440 end if
441 
442 ! Input ATLAS functionspace
443 if (present(lon1d_in).and.present(lat1d_in)) then
444  allocate(lon(size(lon1d_in)*size(lat1d_in)))
445  allocate(lat(size(lon1d_in)*size(lat1d_in)))
446  inode = 0
447  do ilat=1,size(lat1d_in)
448  do ilon=1,size(lon1d_in)
449  inode = inode+1
450  lon(inode) = lon1d_in(ilon)
451  lat(inode) = lat1d_in(ilat)
452  end do
453  end do
454  call create_atlas_function_space(size(lon1d_in)*size(lat1d_in), lon, lat, bint%afunctionspace_in)
455  deallocate(lon)
456  deallocate(lat)
457 elseif (present(lon_in).and.present(lat_in)) then
458  if (size(lon_in)/=size(lat_in)) then
459  call fckit_log%info('input longitudes and latitudes have different sizes')
460  call comm%abort(1)
461  end if
462  call create_atlas_function_space(size(lon_in), lon_in, lat_in, bint%afunctionspace_in)
463 elseif (present(afunctionspace_in)) then
464  bint%afunctionspace_in = afunctionspace_in
465 else
466  call fckit_log%info('output ATLAS function space or lon/lat vector should be provided')
467  call comm%abort(1)
468 end if
469 
470 ! Output ATLAS functionspace
471 if (present(lon1d_out).and.present(lat1d_out)) then
472  allocate(lon(size(lon1d_out)*size(lat1d_out)))
473  allocate(lat(size(lon1d_out)*size(lat1d_out)))
474  inode = 0
475  do ilat=1,size(lat1d_out)
476  do ilon=1,size(lon1d_out)
477  inode = inode+1
478  lon(inode) = lon1d_out(ilon)
479  lat(inode) = lat1d_out(ilat)
480  end do
481  end do
482  call create_atlas_function_space(size(lon1d_out)*size(lat1d_out), lon, lat, bint%afunctionspace_out)
483  deallocate(lon)
484  deallocate(lat)
485 elseif (present(lon_out).and.present(lat_out)) then
486  if (size(lon_out)/=size(lat_out)) then
487  call fckit_log%info('output longitudes and latitudes have different sizes')
488  call comm%abort(1)
489  end if
490  call create_atlas_function_space(size(lon_out), lon_out, lat_out, bint%afunctionspace_out)
491 elseif (present(afunctionspace_out)) then
492  bint%afunctionspace_out = afunctionspace_out
493 else
494  call fckit_log%info('output ATLAS function space or lon/lat vector should be provided')
495  call comm%abort(1)
496 end if
497 
498 ! Local fieldset
499 if (present(fieldset)) then
500  lfieldset = fieldset
501 else
502  lfieldset = atlas_fieldset()
503 end if
504 
505 ! Set metadata
506 if (lfieldset%has_field('meta')) then
507  afield = lfieldset%field('meta')
508 else
509  afield = atlas_field(name='meta',kind=atlas_integer(kind_int),shape=(/0/))
510  call lfieldset%add(afield)
511 end if
512 ametadata = afield%metadata()
513 call ametadata%set('unique_points',unique_points)
514 
515 ! Initialize BUMP
516 
517 ! Clear any pre-existing data
518 call bint%delete
519 
520 ! BUMP setup
521 call bint%bump%setup(comm,bint%afunctionspace_in,lfieldset,msvali=msvali,msvalr=msvalr)
522 
523 ! Initialize output grid
524 if (bint%bump%mpl%main) then
525  call fckit_log%info('-------------------------------------------------------------------')
526  call fckit_log%info('--- Initialize output grid')
527 end if
528 
529 ! Unpack output grid from output functionspace
530 bint%geom_out%nl0 = bint%bump%nam%nl
531 call bint%geom_out%from_atlas(bint%bump%mpl,bint%afunctionspace_out)
532 bint%nouta = size(bint%geom_out%lon_mga)
533 
534 ! Run basic BUMP drivers
535 call bint%bump%run_drivers
536 
537 ! Run interpolation driver
538 if (bint%bump%mpl%main) then
539  call fckit_log%info('-------------------------------------------------------------------')
540  call fckit_log%info('--- Run bump_interpolation driver')
541 end if
542 call bint%driver(bint%bump%mpl,bint%bump%nam,bint%bump%geom)
543 
544 ! Release memory (partial)
545 if (bint%bump%mpl%main) then
546  call fckit_log%info('-------------------------------------------------------------------')
547  call fckit_log%info('--- Release memory (partial)')
548 end if
549 call bint%bump%partial_dealloc
550 call bint%geom_out%partial_dealloc
551 if (.not.present(fieldset)) call lfieldset%final()
552 call afield%final()
553 call ametadata%final()
554 
555 ! Probe out
556 
557 
558 end subroutine bint_init
559 
560 !----------------------------------------------------------------------
561 ! Subroutine: bint_driver
562 !> Initialize BUMP to perform interpolation
563 !----------------------------------------------------------------------
564 subroutine bint_driver(bint,mpl,nam,geom)
565 
566 implicit none
567 
568 ! Passed variables
569 class(bump_interpolator),intent(inout) :: bint !< BUMP interpolator
570 type(mpl_type),intent(inout) :: mpl !< MPI data
571 type(nam_type),intent(in) :: nam !< Namelist
572 type(geom_type),intent(in) :: geom !< Geometry
573 
574 ! Local variables
575 integer :: iouta,iproc,i_s,ic0,ic0u,jc0u,ic0b,ic0a,nouta_eff
576 integer :: nout_eff,nn_index(1),proc_to_nouta(mpl%nproc),proc_to_nouta_eff(mpl%nproc)
577 integer :: c0u_to_c0b(geom%nc0u)
578 integer,allocatable :: c0b_to_c0(:)
579 real(kind_real) :: nn_dist(1),N_max,C_max
580 real(kind_real),allocatable :: maxweight(:)
581 logical :: maskouta(bint%nouta),lcheck_nc0b(geom%nc0)
582 
583 ! Set name
584 
585 
586 ! Get instance
587 
588 
589 ! Probe in
590 
591 
592 ! Check that universe is global
593 if (any(.not.geom%myuniverse)) call mpl%abort('bint_driver','universe should be global for interpolation')
594 
595 ! Check whether output grid points are inside the hull boundaries
596 if (bint%nouta > 0) then
597  do iouta=1,bint%nouta
598  call inside(mpl,bint%bump%geom%mesh_c0u%vbnd,bint%geom_out%lon_mga(iouta),bint%geom_out%lat_mga(iouta),maskouta(iouta))
599  if (.not.maskouta(iouta)) then
600  ! Check for very close points
601  call geom%tree_c0u%find_nearest_neighbors(bint%geom_out%lon_mga(iouta),bint%geom_out%lat_mga(iouta), &
602  & 1,nn_index,nn_dist)
603  if (nn_dist(1)<rth) maskouta(iouta) = .true.
604  end if
605  end do
606  nouta_eff = zss_count(maskouta)
607 else
608  nouta_eff = 0
609 end if
610 
611 ! Get global number of output grid points
612 call mpl%f_comm%allgather(bint%nouta,proc_to_nouta)
613 call mpl%f_comm%allgather(nouta_eff,proc_to_nouta_eff)
614 bint%nout = sum(proc_to_nouta)
615 nout_eff = sum(proc_to_nouta_eff)
616 
617 ! Print input
618 write(mpl%info,'(a7,a)') '','Number of points in output grid / valid points per MPI task:'
619 call mpl%flush
620 do iproc=1,mpl%nproc
621  write(mpl%info,'(a10,a,i3,a,i8,a,i8)') '','Task ',iproc,': ',proc_to_nouta(iproc),' / ',proc_to_nouta_eff(iproc)
622  call mpl%flush
623 end do
624 write(mpl%info,'(a10,a,i8,a,i8)') '','Total : ',bint%nout,' / ',nout_eff
625 call mpl%flush
626 
627 ! Compute interpolation
628 bint%h%prefix = 'o'
629 write(mpl%info,'(a7,a)') '','Single level:'
630 call mpl%flush
631 call bint%h%interp(mpl,nam,0,geom%nc0u,geom%lon_c0u,geom%lat_c0u,geom%gmask_hor_c0u,geom%mesh_c0u,geom%tree_c0u, &
632  & bint%nouta,bint%geom_out%lon_mga,bint%geom_out%lat_mga,maskouta,geom%mesh_c0u,10)
633 
634 ! Define halo B
635 lcheck_nc0b = .false.
636 do ic0a=1,geom%nc0a
637  ic0u = geom%c0a_to_c0u(ic0a)
638  lcheck_nc0b(ic0u) = .true.
639 end do
640 do iouta=1,bint%nouta
641  do i_s=1,bint%h%n_s
642  jc0u = bint%h%col(i_s)
643  lcheck_nc0b(jc0u) = .true.
644  end do
645 end do
646 bint%nc0b = zss_count(lcheck_nc0b)
647 
648 ! Allocation
649 allocate(c0b_to_c0(bint%nc0b))
650 
651 ! Global-local conversion for halo B
652 c0u_to_c0b = mpl%msv%vali
653 ic0b = 0
654 do ic0u=1,geom%nc0u
655  if (lcheck_nc0b(ic0u)) then
656  ic0b = ic0b+1
657  ic0 = geom%c0u_to_c0(ic0u)
658  c0b_to_c0(ic0b) = ic0
659  c0u_to_c0b(ic0u) = ic0b
660  end if
661 end do
662 
663 ! Local interpolation source
664 bint%h%n_src = bint%nc0b
665 do i_s=1,bint%h%n_s
666  ic0u = bint%h%col(i_s)
667  ic0b = c0u_to_c0b(ic0u)
668  if (mpl%msv%isnot(ic0b)) then
669  bint%h%col(i_s) = ic0b
670  else
671  call mpl%abort('bint_driver','wrong local source for h')
672  end if
673 end do
674 
675 ! Setup communications
676 call bint%com%setup(mpl,'com',geom%nc0a,bint%nc0b,geom%nc0,geom%c0a_to_c0,c0b_to_c0)
677 
678 ! Release memory
679 deallocate(c0b_to_c0)
680 
681 ! Allocation
682 allocate(bint%nn_index(bint%nouta))
683 
684 ! Get nearest neighbor index for integer interpolation
685 if (bint%nouta > 0) then
686  ! Allocation
687  allocate(maxweight(bint%nouta))
688 
689  ! Initialization
690  bint%nn_index = bint%bump%mpl%msv%vali
691  maxweight = zero
692 
693  ! Get nearest neighbor index from the maximum interpolation coefficient
694  do i_s=1,bint%h%n_s
695  iouta = bint%h%row(i_s)
696  if (bint%h%S(i_s)>maxweight(iouta)) then
697  maxweight(iouta) = bint%h%S(i_s)
698  bint%nn_index(iouta) = bint%h%col(i_s)
699  end if
700  end do
701  if (bint%bump%mpl%msv%isany(bint%nn_index)) call bint%bump%mpl%abort('bint_driver','missing nearest neighbor')
702 
703  ! Release memory
704  deallocate(maxweight)
705 end if
706 
707 ! Compute scores
708 if (nout_eff > 0) then
709  call mpl%f_comm%allreduce(real(bint%com%nhalo,kind_real),c_max,fckit_mpi_max())
710  c_max = c_max/(three*real(nout_eff,kind_real)/real(mpl%nproc,kind_real))
711  n_max = real(maxval(proc_to_nouta_eff),kind_real)/(real(nout_eff,kind_real)/real(mpl%nproc,kind_real))
712 
713  ! Print results
714  write(mpl%info,'(a7,a,f5.1,a)') '','Output grid repartition imbalance: ',hundred*real(maxval(proc_to_nouta_eff) &
715  & -minval(proc_to_nouta_eff),kind_real)/(real(sum(proc_to_nouta_eff),kind_real)/real(mpl%nproc,kind_real)),' %'
716  call mpl%flush
717  write(mpl%info,'(a7,a,i8,a,i8,a,i8)') '','Number of grid points / halo size / number of received values: ', &
718  & bint%com%nred,' / ',bint%com%next,' / ',bint%com%nhalo
719  call mpl%flush
720  write(mpl%info,'(a7,a,f10.2,a,f10.2)') '','Scores (N_max / C_max):',n_max,' / ',c_max
721  call mpl%flush
722 end if
723 
724 ! Probe out
725 
726 
727 end subroutine bint_driver
728 
729 !----------------------------------------------------------------------
730 ! Subroutine bint_apply
731 !> Apply interpolation
732 !! If the fields that constitute the fieldset are not already allocated by
733 !! the caller, then they will be created and allocated by this method.
734 !! So, the user can optionally pass this routine an empty output fieldset.
735 !----------------------------------------------------------------------
736 subroutine bint_apply(bint,fieldset_in,fieldset_out)
737 
738 implicit none
739 
740 ! Passed variables
741 class(bump_interpolator),intent(inout) :: bint !< BUMP interpolator
742 type(fieldset_type),intent(in) :: fieldset_in !< Input fields represented as an ATLAS fieldset, created from a functionspace
743 type(fieldset_type),intent(inout) :: fieldset_out !< Output fields represented as an ATLAS fieldset
744 
745 ! Local variables
746 integer :: ifield
747 real(kind_real),allocatable :: array_in_mga(:,:),array_in_c0a(:,:),array_out(:,:)
748 character(len=max_string) :: fieldname
749 type(atlas_field) :: afield_in,afield_out
750 
751 ! Set name
752 
753 
754 ! Get instance
755 
756 
757 ! Probe in
758 
759 
760 ! Allocation
761 allocate(array_in_mga(bint%bump%geom%nmga,bint%bump%geom%nl0))
762 if (.not.bint%bump%geom%same_grid) allocate(array_in_c0a(bint%bump%geom%nc0a,bint%bump%geom%nl0))
763 allocate(array_out(bint%nouta,bint%bump%geom%nl0))
764 
765 do ifield=1,fieldset_in%size()
766  ! Copy field and field name
767  afield_in = fieldset_in%field(ifield)
768  fieldname = afield_in%name()
769 
770  ! Allocation
771  if (fieldset_out%has_field(fieldname)) then
772  afield_out = fieldset_out%field(name=fieldname)
773  else
774  afield_out = bint%afunctionspace_out%create_field(name=fieldname,kind=atlas_real(kind_real),levels=bint%bump%geom%nl0)
775  call fieldset_out%add(afield_out)
776  end if
777 
778  ! ATLAS field to BUMP array
779  call field_to_array(afield_in,bint%bump%mpl,array_in_mga)
780 
781  if (bint%bump%geom%same_grid) then
782  ! Apply interpolation
783  call bint%apply_interp(array_in_mga,array_out)
784  else
785  ! Model grid to subset Sc0
786  array_in_c0a = zero
787  call bint%bump%geom%copy_mga_to_c0a(bint%bump%mpl,array_in_mga,array_in_c0a)
788 
789  ! Apply interpolation
790  call bint%apply_interp(array_in_c0a,array_out)
791  end if
792 
793  ! BUMP array to ATLAS field
794  call field_from_array(afield_out,bint%bump%mpl,array_out)
795 
796  ! Release pointers
797  call afield_in%final()
798  call afield_out%final()
799 end do
800 
801 ! Release memory
802 deallocate(array_in_mga)
803 if (.not.bint%bump%geom%same_grid) deallocate(array_in_c0a)
804 deallocate(array_out)
805 
806 ! Probe out
807 
808 
809 end subroutine bint_apply
810 
811 # 588 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
812 # 589 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
813 # 590 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
814 !----------------------------------------------------------------------
815 ! Subroutine: bint_apply_int_r1_r1
816 !> Apply interpolation
817 !----------------------------------------------------------------------
818 subroutine bint_apply_int_r1_r1(bint,array_in,array_out,trans_in,trans_out,nn)
819 
820 implicit none
821 
822 ! Passed variables
823 class(bump_interpolator),intent(inout) :: bint !< BUMP interpolator
824 integer(kind_int),intent(in) :: array_in(:) !< Input array, the rightmost dimension being the vertical
825 integer(kind_int),intent(out) :: array_out(:) !< Output array, the rightmost dimension being the vertical
826 logical,intent(in),optional :: trans_in !< Input array should be transposed
827 logical,intent(in),optional :: trans_out !< Output array should be transposed
828 logical,intent(in),optional :: nn !< Nearest neighbor interpolation
829 
830 ! Local variables
831 integer :: nl_in,nl_out
832 integer :: shp_out(1)
833 
834 integer(kind_int),allocatable :: vec_in(:,:),vec_in_tmp(:,:),vec_out(:,:)
835 logical :: ltrans_in,ltrans_out,lnn
836 
837 ! Set name
838 
839 
840 ! Get instance
841 
842 
843 ! Probe in
844 
845 
846 ! Local flags
847 ltrans_in = .false.
848 if (present(trans_in)) ltrans_in = trans_in
849 ltrans_out = .false.
850 if (present(trans_out)) ltrans_out = trans_out
851 lnn = .false.
852 if (present(nn)) lnn = nn
853 
854 ! Get number of levels
855 # 632 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
856  nl_in = 1
857 # 640 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
858 # 641 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
859  nl_out = 1
860 # 649 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
861 bint%bump%geom%nl0 = nl_in
862 
863 ! Allocation
864 allocate(vec_in(bint%bump%geom%nmga,bint%bump%geom%nl0))
865 if (.not.bint%bump%geom%same_grid) allocate(vec_in_tmp(bint%bump%geom%nc0a,bint%bump%geom%nl0))
866 allocate(vec_out(bint%nouta,bint%bump%geom%nl0))
867 
868 ! Pack input data
869  vec_in(:,1) = array_in
870 # 665 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
871 # 674 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
872 
873 ! Interpolate
874 if (bint%bump%geom%same_grid) then
875  call bint%apply_interp(vec_in,vec_out,lnn)
876 else
877  call bint%bump%geom%copy_mga_to_c0a(bint%bump%mpl,vec_in,vec_in_tmp)
878  call bint%apply_interp(vec_in_tmp,vec_out,lnn)
879 end if
880 
881 ! Unpack output data
882 shp_out = shape(array_out)
883  array_out = vec_out(:,1)
884 # 693 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
885 # 702 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
886 
887 ! Probe out
888 
889 
890 end subroutine bint_apply_int_r1_r1
891 # 590 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
892 !----------------------------------------------------------------------
893 ! Subroutine: bint_apply_int_r1_r2
894 !> Apply interpolation
895 !----------------------------------------------------------------------
896 subroutine bint_apply_int_r1_r2(bint,array_in,array_out,trans_in,trans_out,nn)
897 
898 implicit none
899 
900 ! Passed variables
901 class(bump_interpolator),intent(inout) :: bint !< BUMP interpolator
902 integer(kind_int),intent(in) :: array_in(:) !< Input array, the rightmost dimension being the vertical
903 integer(kind_int),intent(out) :: array_out(:,:) !< Output array, the rightmost dimension being the vertical
904 logical,intent(in),optional :: trans_in !< Input array should be transposed
905 logical,intent(in),optional :: trans_out !< Output array should be transposed
906 logical,intent(in),optional :: nn !< Nearest neighbor interpolation
907 
908 ! Local variables
909 integer :: nl_in,nl_out
910 integer :: shp_out(2)
911 
912 integer(kind_int),allocatable :: vec_in(:,:),vec_in_tmp(:,:),vec_out(:,:)
913 logical :: ltrans_in,ltrans_out,lnn
914 
915 ! Set name
916 
917 
918 ! Get instance
919 
920 
921 ! Probe in
922 
923 
924 ! Local flags
925 ltrans_in = .false.
926 if (present(trans_in)) ltrans_in = trans_in
927 ltrans_out = .false.
928 if (present(trans_out)) ltrans_out = trans_out
929 lnn = .false.
930 if (present(nn)) lnn = nn
931 
932 ! Get number of levels
933 # 632 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
934  nl_in = 1
935 # 640 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
936 # 643 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
937  if (ltrans_out) then
938  nl_out = size(array_out,1)
939  else
940  nl_out = size(array_out,2)
941  end if
942 # 649 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
943 bint%bump%geom%nl0 = nl_in
944 
945 ! Allocation
946 allocate(vec_in(bint%bump%geom%nmga,bint%bump%geom%nl0))
947 if (.not.bint%bump%geom%same_grid) allocate(vec_in_tmp(bint%bump%geom%nc0a,bint%bump%geom%nl0))
948 allocate(vec_out(bint%nouta,bint%bump%geom%nl0))
949 
950 ! Pack input data
951  vec_in(:,1) = array_in
952 # 665 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
953 # 674 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
954 
955 ! Interpolate
956 if (bint%bump%geom%same_grid) then
957  call bint%apply_interp(vec_in,vec_out,lnn)
958 else
959  call bint%bump%geom%copy_mga_to_c0a(bint%bump%mpl,vec_in,vec_in_tmp)
960  call bint%apply_interp(vec_in_tmp,vec_out,lnn)
961 end if
962 
963 ! Unpack output data
964 shp_out = shape(array_out)
965 
966 # 687 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
967  if (ltrans_out) then
968  array_out = transpose(vec_out)
969  else
970  array_out = vec_out
971  end if
972 # 693 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
973 # 702 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
974 
975 ! Probe out
976 
977 
978 end subroutine bint_apply_int_r1_r2
979 # 590 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
980 !----------------------------------------------------------------------
981 ! Subroutine: bint_apply_int_r1_r3
982 !> Apply interpolation
983 !----------------------------------------------------------------------
984 subroutine bint_apply_int_r1_r3(bint,array_in,array_out,trans_in,trans_out,nn)
985 
986 implicit none
987 
988 ! Passed variables
989 class(bump_interpolator),intent(inout) :: bint !< BUMP interpolator
990 integer(kind_int),intent(in) :: array_in(:) !< Input array, the rightmost dimension being the vertical
991 integer(kind_int),intent(out) :: array_out(:,:,:) !< Output array, the rightmost dimension being the vertical
992 logical,intent(in),optional :: trans_in !< Input array should be transposed
993 logical,intent(in),optional :: trans_out !< Output array should be transposed
994 logical,intent(in),optional :: nn !< Nearest neighbor interpolation
995 
996 ! Local variables
997 integer :: nl_in,nl_out
998 integer :: shp_out(3)
999  integer :: il
1000 integer(kind_int),allocatable :: vec_in(:,:),vec_in_tmp(:,:),vec_out(:,:)
1001 logical :: ltrans_in,ltrans_out,lnn
1002 
1003 ! Set name
1004 
1005 
1006 ! Get instance
1007 
1008 
1009 ! Probe in
1010 
1011 
1012 ! Local flags
1013 ltrans_in = .false.
1014 if (present(trans_in)) ltrans_in = trans_in
1015 ltrans_out = .false.
1016 if (present(trans_out)) ltrans_out = trans_out
1017 lnn = .false.
1018 if (present(nn)) lnn = nn
1019 
1020 ! Get number of levels
1021 # 632 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1022  nl_in = 1
1023 # 640 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1024 # 643 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1025  if (ltrans_out) then
1026  nl_out = size(array_out,1)
1027  else
1028  nl_out = size(array_out,3)
1029  end if
1030 # 649 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1031 bint%bump%geom%nl0 = nl_in
1032 
1033 ! Allocation
1034 allocate(vec_in(bint%bump%geom%nmga,bint%bump%geom%nl0))
1035 if (.not.bint%bump%geom%same_grid) allocate(vec_in_tmp(bint%bump%geom%nc0a,bint%bump%geom%nl0))
1036 allocate(vec_out(bint%nouta,bint%bump%geom%nl0))
1037 
1038 ! Pack input data
1039  vec_in(:,1) = array_in
1040 # 665 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1041 # 674 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1042 
1043 ! Interpolate
1044 if (bint%bump%geom%same_grid) then
1045  call bint%apply_interp(vec_in,vec_out,lnn)
1046 else
1047  call bint%bump%geom%copy_mga_to_c0a(bint%bump%mpl,vec_in,vec_in_tmp)
1048  call bint%apply_interp(vec_in_tmp,vec_out,lnn)
1049 end if
1050 
1051 ! Unpack output data
1052 shp_out = shape(array_out)
1053 
1054 # 693 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1055 # 694 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1056  do il=1,nl_out
1057  if (ltrans_out) then
1058  array_out(:,:,il) = transpose(reshape(vec_out(:,il),(/shp_out(2),shp_out(1)/)))
1059  else
1060  array_out(:,:,il) = reshape(vec_out(:,il),shp_out(1:2))
1061  end if
1062  end do
1063 # 702 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1064 
1065 ! Probe out
1066 
1067 
1068 end subroutine bint_apply_int_r1_r3
1069 # 708 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1070 # 589 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1071 # 590 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1072 !----------------------------------------------------------------------
1073 ! Subroutine: bint_apply_int_r2_r1
1074 !> Apply interpolation
1075 !----------------------------------------------------------------------
1076 subroutine bint_apply_int_r2_r1(bint,array_in,array_out,trans_in,trans_out,nn)
1077 
1078 implicit none
1079 
1080 ! Passed variables
1081 class(bump_interpolator),intent(inout) :: bint !< BUMP interpolator
1082 integer(kind_int),intent(in) :: array_in(:,:) !< Input array, the rightmost dimension being the vertical
1083 integer(kind_int),intent(out) :: array_out(:) !< Output array, the rightmost dimension being the vertical
1084 logical,intent(in),optional :: trans_in !< Input array should be transposed
1085 logical,intent(in),optional :: trans_out !< Output array should be transposed
1086 logical,intent(in),optional :: nn !< Nearest neighbor interpolation
1087 
1088 ! Local variables
1089 integer :: nl_in,nl_out
1090 integer :: shp_out(1)
1091 
1092 integer(kind_int),allocatable :: vec_in(:,:),vec_in_tmp(:,:),vec_out(:,:)
1093 logical :: ltrans_in,ltrans_out,lnn
1094 
1095 ! Set name
1096 
1097 
1098 ! Get instance
1099 
1100 
1101 ! Probe in
1102 
1103 
1104 ! Local flags
1105 ltrans_in = .false.
1106 if (present(trans_in)) ltrans_in = trans_in
1107 ltrans_out = .false.
1108 if (present(trans_out)) ltrans_out = trans_out
1109 lnn = .false.
1110 if (present(nn)) lnn = nn
1111 
1112 ! Get number of levels
1113 # 634 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1114  if (ltrans_in) then
1115  nl_in = size(array_in,1)
1116  else
1117  nl_in = size(array_in,2)
1118  end if
1119 # 640 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1120 # 641 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1121  nl_out = 1
1122 # 649 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1123 bint%bump%geom%nl0 = nl_in
1124 
1125 ! Allocation
1126 allocate(vec_in(bint%bump%geom%nmga,bint%bump%geom%nl0))
1127 if (.not.bint%bump%geom%same_grid) allocate(vec_in_tmp(bint%bump%geom%nc0a,bint%bump%geom%nl0))
1128 allocate(vec_out(bint%nouta,bint%bump%geom%nl0))
1129 
1130 ! Pack input data
1131 
1132 # 659 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1133  if (ltrans_in) then
1134  vec_in = transpose(array_in)
1135  else
1136  vec_in = array_in
1137  end if
1138 # 665 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1139 # 674 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1140 
1141 ! Interpolate
1142 if (bint%bump%geom%same_grid) then
1143  call bint%apply_interp(vec_in,vec_out,lnn)
1144 else
1145  call bint%bump%geom%copy_mga_to_c0a(bint%bump%mpl,vec_in,vec_in_tmp)
1146  call bint%apply_interp(vec_in_tmp,vec_out,lnn)
1147 end if
1148 
1149 ! Unpack output data
1150 shp_out = shape(array_out)
1151  array_out = vec_out(:,1)
1152 # 693 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1153 # 702 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1154 
1155 ! Probe out
1156 
1157 
1158 end subroutine bint_apply_int_r2_r1
1159 # 590 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1160 !----------------------------------------------------------------------
1161 ! Subroutine: bint_apply_int_r2_r2
1162 !> Apply interpolation
1163 !----------------------------------------------------------------------
1164 subroutine bint_apply_int_r2_r2(bint,array_in,array_out,trans_in,trans_out,nn)
1165 
1166 implicit none
1167 
1168 ! Passed variables
1169 class(bump_interpolator),intent(inout) :: bint !< BUMP interpolator
1170 integer(kind_int),intent(in) :: array_in(:,:) !< Input array, the rightmost dimension being the vertical
1171 integer(kind_int),intent(out) :: array_out(:,:) !< Output array, the rightmost dimension being the vertical
1172 logical,intent(in),optional :: trans_in !< Input array should be transposed
1173 logical,intent(in),optional :: trans_out !< Output array should be transposed
1174 logical,intent(in),optional :: nn !< Nearest neighbor interpolation
1175 
1176 ! Local variables
1177 integer :: nl_in,nl_out
1178 integer :: shp_out(2)
1179 
1180 integer(kind_int),allocatable :: vec_in(:,:),vec_in_tmp(:,:),vec_out(:,:)
1181 logical :: ltrans_in,ltrans_out,lnn
1182 
1183 ! Set name
1184 
1185 
1186 ! Get instance
1187 
1188 
1189 ! Probe in
1190 
1191 
1192 ! Local flags
1193 ltrans_in = .false.
1194 if (present(trans_in)) ltrans_in = trans_in
1195 ltrans_out = .false.
1196 if (present(trans_out)) ltrans_out = trans_out
1197 lnn = .false.
1198 if (present(nn)) lnn = nn
1199 
1200 ! Get number of levels
1201 # 634 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1202  if (ltrans_in) then
1203  nl_in = size(array_in,1)
1204  else
1205  nl_in = size(array_in,2)
1206  end if
1207 # 640 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1208 # 643 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1209  if (ltrans_out) then
1210  nl_out = size(array_out,1)
1211  else
1212  nl_out = size(array_out,2)
1213  end if
1214 # 649 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1215 bint%bump%geom%nl0 = nl_in
1216 
1217 ! Allocation
1218 allocate(vec_in(bint%bump%geom%nmga,bint%bump%geom%nl0))
1219 if (.not.bint%bump%geom%same_grid) allocate(vec_in_tmp(bint%bump%geom%nc0a,bint%bump%geom%nl0))
1220 allocate(vec_out(bint%nouta,bint%bump%geom%nl0))
1221 
1222 ! Pack input data
1223 
1224 # 659 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1225  if (ltrans_in) then
1226  vec_in = transpose(array_in)
1227  else
1228  vec_in = array_in
1229  end if
1230 # 665 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1231 # 674 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1232 
1233 ! Interpolate
1234 if (bint%bump%geom%same_grid) then
1235  call bint%apply_interp(vec_in,vec_out,lnn)
1236 else
1237  call bint%bump%geom%copy_mga_to_c0a(bint%bump%mpl,vec_in,vec_in_tmp)
1238  call bint%apply_interp(vec_in_tmp,vec_out,lnn)
1239 end if
1240 
1241 ! Unpack output data
1242 shp_out = shape(array_out)
1243 
1244 # 687 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1245  if (ltrans_out) then
1246  array_out = transpose(vec_out)
1247  else
1248  array_out = vec_out
1249  end if
1250 # 693 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1251 # 702 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1252 
1253 ! Probe out
1254 
1255 
1256 end subroutine bint_apply_int_r2_r2
1257 # 590 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1258 !----------------------------------------------------------------------
1259 ! Subroutine: bint_apply_int_r2_r3
1260 !> Apply interpolation
1261 !----------------------------------------------------------------------
1262 subroutine bint_apply_int_r2_r3(bint,array_in,array_out,trans_in,trans_out,nn)
1263 
1264 implicit none
1265 
1266 ! Passed variables
1267 class(bump_interpolator),intent(inout) :: bint !< BUMP interpolator
1268 integer(kind_int),intent(in) :: array_in(:,:) !< Input array, the rightmost dimension being the vertical
1269 integer(kind_int),intent(out) :: array_out(:,:,:) !< Output array, the rightmost dimension being the vertical
1270 logical,intent(in),optional :: trans_in !< Input array should be transposed
1271 logical,intent(in),optional :: trans_out !< Output array should be transposed
1272 logical,intent(in),optional :: nn !< Nearest neighbor interpolation
1273 
1274 ! Local variables
1275 integer :: nl_in,nl_out
1276 integer :: shp_out(3)
1277  integer :: il
1278 integer(kind_int),allocatable :: vec_in(:,:),vec_in_tmp(:,:),vec_out(:,:)
1279 logical :: ltrans_in,ltrans_out,lnn
1280 
1281 ! Set name
1282 
1283 
1284 ! Get instance
1285 
1286 
1287 ! Probe in
1288 
1289 
1290 ! Local flags
1291 ltrans_in = .false.
1292 if (present(trans_in)) ltrans_in = trans_in
1293 ltrans_out = .false.
1294 if (present(trans_out)) ltrans_out = trans_out
1295 lnn = .false.
1296 if (present(nn)) lnn = nn
1297 
1298 ! Get number of levels
1299 # 634 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1300  if (ltrans_in) then
1301  nl_in = size(array_in,1)
1302  else
1303  nl_in = size(array_in,2)
1304  end if
1305 # 640 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1306 # 643 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1307  if (ltrans_out) then
1308  nl_out = size(array_out,1)
1309  else
1310  nl_out = size(array_out,3)
1311  end if
1312 # 649 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1313 bint%bump%geom%nl0 = nl_in
1314 
1315 ! Allocation
1316 allocate(vec_in(bint%bump%geom%nmga,bint%bump%geom%nl0))
1317 if (.not.bint%bump%geom%same_grid) allocate(vec_in_tmp(bint%bump%geom%nc0a,bint%bump%geom%nl0))
1318 allocate(vec_out(bint%nouta,bint%bump%geom%nl0))
1319 
1320 ! Pack input data
1321 
1322 # 659 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1323  if (ltrans_in) then
1324  vec_in = transpose(array_in)
1325  else
1326  vec_in = array_in
1327  end if
1328 # 665 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1329 # 674 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1330 
1331 ! Interpolate
1332 if (bint%bump%geom%same_grid) then
1333  call bint%apply_interp(vec_in,vec_out,lnn)
1334 else
1335  call bint%bump%geom%copy_mga_to_c0a(bint%bump%mpl,vec_in,vec_in_tmp)
1336  call bint%apply_interp(vec_in_tmp,vec_out,lnn)
1337 end if
1338 
1339 ! Unpack output data
1340 shp_out = shape(array_out)
1341 
1342 # 693 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1343 # 694 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1344  do il=1,nl_out
1345  if (ltrans_out) then
1346  array_out(:,:,il) = transpose(reshape(vec_out(:,il),(/shp_out(2),shp_out(1)/)))
1347  else
1348  array_out(:,:,il) = reshape(vec_out(:,il),shp_out(1:2))
1349  end if
1350  end do
1351 # 702 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1352 
1353 ! Probe out
1354 
1355 
1356 end subroutine bint_apply_int_r2_r3
1357 # 708 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1358 # 589 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1359 # 590 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1360 !----------------------------------------------------------------------
1361 ! Subroutine: bint_apply_int_r3_r1
1362 !> Apply interpolation
1363 !----------------------------------------------------------------------
1364 subroutine bint_apply_int_r3_r1(bint,array_in,array_out,trans_in,trans_out,nn)
1365 
1366 implicit none
1367 
1368 ! Passed variables
1369 class(bump_interpolator),intent(inout) :: bint !< BUMP interpolator
1370 integer(kind_int),intent(in) :: array_in(:,:,:) !< Input array, the rightmost dimension being the vertical
1371 integer(kind_int),intent(out) :: array_out(:) !< Output array, the rightmost dimension being the vertical
1372 logical,intent(in),optional :: trans_in !< Input array should be transposed
1373 logical,intent(in),optional :: trans_out !< Output array should be transposed
1374 logical,intent(in),optional :: nn !< Nearest neighbor interpolation
1375 
1376 ! Local variables
1377 integer :: nl_in,nl_out
1378 integer :: shp_out(1)
1379  integer :: il
1380 integer(kind_int),allocatable :: vec_in(:,:),vec_in_tmp(:,:),vec_out(:,:)
1381 logical :: ltrans_in,ltrans_out,lnn
1382 
1383 ! Set name
1384 
1385 
1386 ! Get instance
1387 
1388 
1389 ! Probe in
1390 
1391 
1392 ! Local flags
1393 ltrans_in = .false.
1394 if (present(trans_in)) ltrans_in = trans_in
1395 ltrans_out = .false.
1396 if (present(trans_out)) ltrans_out = trans_out
1397 lnn = .false.
1398 if (present(nn)) lnn = nn
1399 
1400 ! Get number of levels
1401 # 634 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1402  if (ltrans_in) then
1403  nl_in = size(array_in,1)
1404  else
1405  nl_in = size(array_in,3)
1406  end if
1407 # 640 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1408 # 641 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1409  nl_out = 1
1410 # 649 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1411 bint%bump%geom%nl0 = nl_in
1412 
1413 ! Allocation
1414 allocate(vec_in(bint%bump%geom%nmga,bint%bump%geom%nl0))
1415 if (.not.bint%bump%geom%same_grid) allocate(vec_in_tmp(bint%bump%geom%nc0a,bint%bump%geom%nl0))
1416 allocate(vec_out(bint%nouta,bint%bump%geom%nl0))
1417 
1418 ! Pack input data
1419 
1420 # 665 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1421 # 666 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1422  do il=1,nl_in
1423  if (ltrans_in) then
1424  vec_in(:,il) = reshape(transpose(array_in(:,:,il)),(/bint%bump%geom%nmga/))
1425  else
1426  vec_in(:,il) = reshape(array_in(:,:,il),(/bint%bump%geom%nmga/))
1427  end if
1428  end do
1429 # 674 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1430 
1431 ! Interpolate
1432 if (bint%bump%geom%same_grid) then
1433  call bint%apply_interp(vec_in,vec_out,lnn)
1434 else
1435  call bint%bump%geom%copy_mga_to_c0a(bint%bump%mpl,vec_in,vec_in_tmp)
1436  call bint%apply_interp(vec_in_tmp,vec_out,lnn)
1437 end if
1438 
1439 ! Unpack output data
1440 shp_out = shape(array_out)
1441  array_out = vec_out(:,1)
1442 # 693 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1443 # 702 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1444 
1445 ! Probe out
1446 
1447 
1448 end subroutine bint_apply_int_r3_r1
1449 # 590 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1450 !----------------------------------------------------------------------
1451 ! Subroutine: bint_apply_int_r3_r2
1452 !> Apply interpolation
1453 !----------------------------------------------------------------------
1454 subroutine bint_apply_int_r3_r2(bint,array_in,array_out,trans_in,trans_out,nn)
1455 
1456 implicit none
1457 
1458 ! Passed variables
1459 class(bump_interpolator),intent(inout) :: bint !< BUMP interpolator
1460 integer(kind_int),intent(in) :: array_in(:,:,:) !< Input array, the rightmost dimension being the vertical
1461 integer(kind_int),intent(out) :: array_out(:,:) !< Output array, the rightmost dimension being the vertical
1462 logical,intent(in),optional :: trans_in !< Input array should be transposed
1463 logical,intent(in),optional :: trans_out !< Output array should be transposed
1464 logical,intent(in),optional :: nn !< Nearest neighbor interpolation
1465 
1466 ! Local variables
1467 integer :: nl_in,nl_out
1468 integer :: shp_out(2)
1469  integer :: il
1470 integer(kind_int),allocatable :: vec_in(:,:),vec_in_tmp(:,:),vec_out(:,:)
1471 logical :: ltrans_in,ltrans_out,lnn
1472 
1473 ! Set name
1474 
1475 
1476 ! Get instance
1477 
1478 
1479 ! Probe in
1480 
1481 
1482 ! Local flags
1483 ltrans_in = .false.
1484 if (present(trans_in)) ltrans_in = trans_in
1485 ltrans_out = .false.
1486 if (present(trans_out)) ltrans_out = trans_out
1487 lnn = .false.
1488 if (present(nn)) lnn = nn
1489 
1490 ! Get number of levels
1491 # 634 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1492  if (ltrans_in) then
1493  nl_in = size(array_in,1)
1494  else
1495  nl_in = size(array_in,3)
1496  end if
1497 # 640 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1498 # 643 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1499  if (ltrans_out) then
1500  nl_out = size(array_out,1)
1501  else
1502  nl_out = size(array_out,2)
1503  end if
1504 # 649 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1505 bint%bump%geom%nl0 = nl_in
1506 
1507 ! Allocation
1508 allocate(vec_in(bint%bump%geom%nmga,bint%bump%geom%nl0))
1509 if (.not.bint%bump%geom%same_grid) allocate(vec_in_tmp(bint%bump%geom%nc0a,bint%bump%geom%nl0))
1510 allocate(vec_out(bint%nouta,bint%bump%geom%nl0))
1511 
1512 ! Pack input data
1513 
1514 # 665 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1515 # 666 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1516  do il=1,nl_in
1517  if (ltrans_in) then
1518  vec_in(:,il) = reshape(transpose(array_in(:,:,il)),(/bint%bump%geom%nmga/))
1519  else
1520  vec_in(:,il) = reshape(array_in(:,:,il),(/bint%bump%geom%nmga/))
1521  end if
1522  end do
1523 # 674 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1524 
1525 ! Interpolate
1526 if (bint%bump%geom%same_grid) then
1527  call bint%apply_interp(vec_in,vec_out,lnn)
1528 else
1529  call bint%bump%geom%copy_mga_to_c0a(bint%bump%mpl,vec_in,vec_in_tmp)
1530  call bint%apply_interp(vec_in_tmp,vec_out,lnn)
1531 end if
1532 
1533 ! Unpack output data
1534 shp_out = shape(array_out)
1535 
1536 # 687 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1537  if (ltrans_out) then
1538  array_out = transpose(vec_out)
1539  else
1540  array_out = vec_out
1541  end if
1542 # 693 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1543 # 702 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1544 
1545 ! Probe out
1546 
1547 
1548 end subroutine bint_apply_int_r3_r2
1549 # 590 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1550 !----------------------------------------------------------------------
1551 ! Subroutine: bint_apply_int_r3_r3
1552 !> Apply interpolation
1553 !----------------------------------------------------------------------
1554 subroutine bint_apply_int_r3_r3(bint,array_in,array_out,trans_in,trans_out,nn)
1555 
1556 implicit none
1557 
1558 ! Passed variables
1559 class(bump_interpolator),intent(inout) :: bint !< BUMP interpolator
1560 integer(kind_int),intent(in) :: array_in(:,:,:) !< Input array, the rightmost dimension being the vertical
1561 integer(kind_int),intent(out) :: array_out(:,:,:) !< Output array, the rightmost dimension being the vertical
1562 logical,intent(in),optional :: trans_in !< Input array should be transposed
1563 logical,intent(in),optional :: trans_out !< Output array should be transposed
1564 logical,intent(in),optional :: nn !< Nearest neighbor interpolation
1565 
1566 ! Local variables
1567 integer :: nl_in,nl_out
1568 integer :: shp_out(3)
1569  integer :: il
1570 integer(kind_int),allocatable :: vec_in(:,:),vec_in_tmp(:,:),vec_out(:,:)
1571 logical :: ltrans_in,ltrans_out,lnn
1572 
1573 ! Set name
1574 
1575 
1576 ! Get instance
1577 
1578 
1579 ! Probe in
1580 
1581 
1582 ! Local flags
1583 ltrans_in = .false.
1584 if (present(trans_in)) ltrans_in = trans_in
1585 ltrans_out = .false.
1586 if (present(trans_out)) ltrans_out = trans_out
1587 lnn = .false.
1588 if (present(nn)) lnn = nn
1589 
1590 ! Get number of levels
1591 # 634 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1592  if (ltrans_in) then
1593  nl_in = size(array_in,1)
1594  else
1595  nl_in = size(array_in,3)
1596  end if
1597 # 640 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1598 # 643 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1599  if (ltrans_out) then
1600  nl_out = size(array_out,1)
1601  else
1602  nl_out = size(array_out,3)
1603  end if
1604 # 649 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1605 bint%bump%geom%nl0 = nl_in
1606 
1607 ! Allocation
1608 allocate(vec_in(bint%bump%geom%nmga,bint%bump%geom%nl0))
1609 if (.not.bint%bump%geom%same_grid) allocate(vec_in_tmp(bint%bump%geom%nc0a,bint%bump%geom%nl0))
1610 allocate(vec_out(bint%nouta,bint%bump%geom%nl0))
1611 
1612 ! Pack input data
1613 
1614 # 665 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1615 # 666 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1616  do il=1,nl_in
1617  if (ltrans_in) then
1618  vec_in(:,il) = reshape(transpose(array_in(:,:,il)),(/bint%bump%geom%nmga/))
1619  else
1620  vec_in(:,il) = reshape(array_in(:,:,il),(/bint%bump%geom%nmga/))
1621  end if
1622  end do
1623 # 674 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1624 
1625 ! Interpolate
1626 if (bint%bump%geom%same_grid) then
1627  call bint%apply_interp(vec_in,vec_out,lnn)
1628 else
1629  call bint%bump%geom%copy_mga_to_c0a(bint%bump%mpl,vec_in,vec_in_tmp)
1630  call bint%apply_interp(vec_in_tmp,vec_out,lnn)
1631 end if
1632 
1633 ! Unpack output data
1634 shp_out = shape(array_out)
1635 
1636 # 693 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1637 # 694 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1638  do il=1,nl_out
1639  if (ltrans_out) then
1640  array_out(:,:,il) = transpose(reshape(vec_out(:,il),(/shp_out(2),shp_out(1)/)))
1641  else
1642  array_out(:,:,il) = reshape(vec_out(:,il),shp_out(1:2))
1643  end if
1644  end do
1645 # 702 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1646 
1647 ! Probe out
1648 
1649 
1650 end subroutine bint_apply_int_r3_r3
1651 # 708 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1652 # 709 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1653 # 588 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1654 # 589 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1655 # 590 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1656 !----------------------------------------------------------------------
1657 ! Subroutine: bint_apply_real_r1_r1
1658 !> Apply interpolation
1659 !----------------------------------------------------------------------
1660 subroutine bint_apply_real_r1_r1(bint,array_in,array_out,trans_in,trans_out,nn)
1661 
1662 implicit none
1663 
1664 ! Passed variables
1665 class(bump_interpolator),intent(inout) :: bint !< BUMP interpolator
1666 real(kind_real),intent(in) :: array_in(:) !< Input array, the rightmost dimension being the vertical
1667 real(kind_real),intent(out) :: array_out(:) !< Output array, the rightmost dimension being the vertical
1668 logical,intent(in),optional :: trans_in !< Input array should be transposed
1669 logical,intent(in),optional :: trans_out !< Output array should be transposed
1670 logical,intent(in),optional :: nn !< Nearest neighbor interpolation
1671 
1672 ! Local variables
1673 integer :: nl_in,nl_out
1674 integer :: shp_out(1)
1675 
1676 real(kind_real),allocatable :: vec_in(:,:),vec_in_tmp(:,:),vec_out(:,:)
1677 logical :: ltrans_in,ltrans_out,lnn
1678 
1679 ! Set name
1680 
1681 
1682 ! Get instance
1683 
1684 
1685 ! Probe in
1686 
1687 
1688 ! Local flags
1689 ltrans_in = .false.
1690 if (present(trans_in)) ltrans_in = trans_in
1691 ltrans_out = .false.
1692 if (present(trans_out)) ltrans_out = trans_out
1693 lnn = .false.
1694 if (present(nn)) lnn = nn
1695 
1696 ! Get number of levels
1697 # 632 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1698  nl_in = 1
1699 # 640 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1700 # 641 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1701  nl_out = 1
1702 # 649 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1703 bint%bump%geom%nl0 = nl_in
1704 
1705 ! Allocation
1706 allocate(vec_in(bint%bump%geom%nmga,bint%bump%geom%nl0))
1707 if (.not.bint%bump%geom%same_grid) allocate(vec_in_tmp(bint%bump%geom%nc0a,bint%bump%geom%nl0))
1708 allocate(vec_out(bint%nouta,bint%bump%geom%nl0))
1709 
1710 ! Pack input data
1711  vec_in(:,1) = array_in
1712 # 665 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1713 # 674 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1714 
1715 ! Interpolate
1716 if (bint%bump%geom%same_grid) then
1717  call bint%apply_interp(vec_in,vec_out,lnn)
1718 else
1719  call bint%bump%geom%copy_mga_to_c0a(bint%bump%mpl,vec_in,vec_in_tmp)
1720  call bint%apply_interp(vec_in_tmp,vec_out,lnn)
1721 end if
1722 
1723 ! Unpack output data
1724 shp_out = shape(array_out)
1725  array_out = vec_out(:,1)
1726 # 693 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1727 # 702 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1728 
1729 ! Probe out
1730 
1731 
1732 end subroutine bint_apply_real_r1_r1
1733 # 590 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1734 !----------------------------------------------------------------------
1735 ! Subroutine: bint_apply_real_r1_r2
1736 !> Apply interpolation
1737 !----------------------------------------------------------------------
1738 subroutine bint_apply_real_r1_r2(bint,array_in,array_out,trans_in,trans_out,nn)
1739 
1740 implicit none
1741 
1742 ! Passed variables
1743 class(bump_interpolator),intent(inout) :: bint !< BUMP interpolator
1744 real(kind_real),intent(in) :: array_in(:) !< Input array, the rightmost dimension being the vertical
1745 real(kind_real),intent(out) :: array_out(:,:) !< Output array, the rightmost dimension being the vertical
1746 logical,intent(in),optional :: trans_in !< Input array should be transposed
1747 logical,intent(in),optional :: trans_out !< Output array should be transposed
1748 logical,intent(in),optional :: nn !< Nearest neighbor interpolation
1749 
1750 ! Local variables
1751 integer :: nl_in,nl_out
1752 integer :: shp_out(2)
1753 
1754 real(kind_real),allocatable :: vec_in(:,:),vec_in_tmp(:,:),vec_out(:,:)
1755 logical :: ltrans_in,ltrans_out,lnn
1756 
1757 ! Set name
1758 
1759 
1760 ! Get instance
1761 
1762 
1763 ! Probe in
1764 
1765 
1766 ! Local flags
1767 ltrans_in = .false.
1768 if (present(trans_in)) ltrans_in = trans_in
1769 ltrans_out = .false.
1770 if (present(trans_out)) ltrans_out = trans_out
1771 lnn = .false.
1772 if (present(nn)) lnn = nn
1773 
1774 ! Get number of levels
1775 # 632 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1776  nl_in = 1
1777 # 640 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1778 # 643 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1779  if (ltrans_out) then
1780  nl_out = size(array_out,1)
1781  else
1782  nl_out = size(array_out,2)
1783  end if
1784 # 649 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1785 bint%bump%geom%nl0 = nl_in
1786 
1787 ! Allocation
1788 allocate(vec_in(bint%bump%geom%nmga,bint%bump%geom%nl0))
1789 if (.not.bint%bump%geom%same_grid) allocate(vec_in_tmp(bint%bump%geom%nc0a,bint%bump%geom%nl0))
1790 allocate(vec_out(bint%nouta,bint%bump%geom%nl0))
1791 
1792 ! Pack input data
1793  vec_in(:,1) = array_in
1794 # 665 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1795 # 674 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1796 
1797 ! Interpolate
1798 if (bint%bump%geom%same_grid) then
1799  call bint%apply_interp(vec_in,vec_out,lnn)
1800 else
1801  call bint%bump%geom%copy_mga_to_c0a(bint%bump%mpl,vec_in,vec_in_tmp)
1802  call bint%apply_interp(vec_in_tmp,vec_out,lnn)
1803 end if
1804 
1805 ! Unpack output data
1806 shp_out = shape(array_out)
1807 
1808 # 687 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1809  if (ltrans_out) then
1810  array_out = transpose(vec_out)
1811  else
1812  array_out = vec_out
1813  end if
1814 # 693 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1815 # 702 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1816 
1817 ! Probe out
1818 
1819 
1820 end subroutine bint_apply_real_r1_r2
1821 # 590 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1822 !----------------------------------------------------------------------
1823 ! Subroutine: bint_apply_real_r1_r3
1824 !> Apply interpolation
1825 !----------------------------------------------------------------------
1826 subroutine bint_apply_real_r1_r3(bint,array_in,array_out,trans_in,trans_out,nn)
1827 
1828 implicit none
1829 
1830 ! Passed variables
1831 class(bump_interpolator),intent(inout) :: bint !< BUMP interpolator
1832 real(kind_real),intent(in) :: array_in(:) !< Input array, the rightmost dimension being the vertical
1833 real(kind_real),intent(out) :: array_out(:,:,:) !< Output array, the rightmost dimension being the vertical
1834 logical,intent(in),optional :: trans_in !< Input array should be transposed
1835 logical,intent(in),optional :: trans_out !< Output array should be transposed
1836 logical,intent(in),optional :: nn !< Nearest neighbor interpolation
1837 
1838 ! Local variables
1839 integer :: nl_in,nl_out
1840 integer :: shp_out(3)
1841  integer :: il
1842 real(kind_real),allocatable :: vec_in(:,:),vec_in_tmp(:,:),vec_out(:,:)
1843 logical :: ltrans_in,ltrans_out,lnn
1844 
1845 ! Set name
1846 
1847 
1848 ! Get instance
1849 
1850 
1851 ! Probe in
1852 
1853 
1854 ! Local flags
1855 ltrans_in = .false.
1856 if (present(trans_in)) ltrans_in = trans_in
1857 ltrans_out = .false.
1858 if (present(trans_out)) ltrans_out = trans_out
1859 lnn = .false.
1860 if (present(nn)) lnn = nn
1861 
1862 ! Get number of levels
1863 # 632 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1864  nl_in = 1
1865 # 640 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1866 # 643 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1867  if (ltrans_out) then
1868  nl_out = size(array_out,1)
1869  else
1870  nl_out = size(array_out,3)
1871  end if
1872 # 649 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1873 bint%bump%geom%nl0 = nl_in
1874 
1875 ! Allocation
1876 allocate(vec_in(bint%bump%geom%nmga,bint%bump%geom%nl0))
1877 if (.not.bint%bump%geom%same_grid) allocate(vec_in_tmp(bint%bump%geom%nc0a,bint%bump%geom%nl0))
1878 allocate(vec_out(bint%nouta,bint%bump%geom%nl0))
1879 
1880 ! Pack input data
1881  vec_in(:,1) = array_in
1882 # 665 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1883 # 674 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1884 
1885 ! Interpolate
1886 if (bint%bump%geom%same_grid) then
1887  call bint%apply_interp(vec_in,vec_out,lnn)
1888 else
1889  call bint%bump%geom%copy_mga_to_c0a(bint%bump%mpl,vec_in,vec_in_tmp)
1890  call bint%apply_interp(vec_in_tmp,vec_out,lnn)
1891 end if
1892 
1893 ! Unpack output data
1894 shp_out = shape(array_out)
1895 
1896 # 693 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1897 # 694 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1898  do il=1,nl_out
1899  if (ltrans_out) then
1900  array_out(:,:,il) = transpose(reshape(vec_out(:,il),(/shp_out(2),shp_out(1)/)))
1901  else
1902  array_out(:,:,il) = reshape(vec_out(:,il),shp_out(1:2))
1903  end if
1904  end do
1905 # 702 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1906 
1907 ! Probe out
1908 
1909 
1910 end subroutine bint_apply_real_r1_r3
1911 # 708 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1912 # 589 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1913 # 590 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1914 !----------------------------------------------------------------------
1915 ! Subroutine: bint_apply_real_r2_r1
1916 !> Apply interpolation
1917 !----------------------------------------------------------------------
1918 subroutine bint_apply_real_r2_r1(bint,array_in,array_out,trans_in,trans_out,nn)
1919 
1920 implicit none
1921 
1922 ! Passed variables
1923 class(bump_interpolator),intent(inout) :: bint !< BUMP interpolator
1924 real(kind_real),intent(in) :: array_in(:,:) !< Input array, the rightmost dimension being the vertical
1925 real(kind_real),intent(out) :: array_out(:) !< Output array, the rightmost dimension being the vertical
1926 logical,intent(in),optional :: trans_in !< Input array should be transposed
1927 logical,intent(in),optional :: trans_out !< Output array should be transposed
1928 logical,intent(in),optional :: nn !< Nearest neighbor interpolation
1929 
1930 ! Local variables
1931 integer :: nl_in,nl_out
1932 integer :: shp_out(1)
1933 
1934 real(kind_real),allocatable :: vec_in(:,:),vec_in_tmp(:,:),vec_out(:,:)
1935 logical :: ltrans_in,ltrans_out,lnn
1936 
1937 ! Set name
1938 
1939 
1940 ! Get instance
1941 
1942 
1943 ! Probe in
1944 
1945 
1946 ! Local flags
1947 ltrans_in = .false.
1948 if (present(trans_in)) ltrans_in = trans_in
1949 ltrans_out = .false.
1950 if (present(trans_out)) ltrans_out = trans_out
1951 lnn = .false.
1952 if (present(nn)) lnn = nn
1953 
1954 ! Get number of levels
1955 # 634 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1956  if (ltrans_in) then
1957  nl_in = size(array_in,1)
1958  else
1959  nl_in = size(array_in,2)
1960  end if
1961 # 640 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1962 # 641 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1963  nl_out = 1
1964 # 649 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1965 bint%bump%geom%nl0 = nl_in
1966 
1967 ! Allocation
1968 allocate(vec_in(bint%bump%geom%nmga,bint%bump%geom%nl0))
1969 if (.not.bint%bump%geom%same_grid) allocate(vec_in_tmp(bint%bump%geom%nc0a,bint%bump%geom%nl0))
1970 allocate(vec_out(bint%nouta,bint%bump%geom%nl0))
1971 
1972 ! Pack input data
1973 
1974 # 659 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1975  if (ltrans_in) then
1976  vec_in = transpose(array_in)
1977  else
1978  vec_in = array_in
1979  end if
1980 # 665 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1981 # 674 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1982 
1983 ! Interpolate
1984 if (bint%bump%geom%same_grid) then
1985  call bint%apply_interp(vec_in,vec_out,lnn)
1986 else
1987  call bint%bump%geom%copy_mga_to_c0a(bint%bump%mpl,vec_in,vec_in_tmp)
1988  call bint%apply_interp(vec_in_tmp,vec_out,lnn)
1989 end if
1990 
1991 ! Unpack output data
1992 shp_out = shape(array_out)
1993  array_out = vec_out(:,1)
1994 # 693 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1995 # 702 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
1996 
1997 ! Probe out
1998 
1999 
2000 end subroutine bint_apply_real_r2_r1
2001 # 590 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2002 !----------------------------------------------------------------------
2003 ! Subroutine: bint_apply_real_r2_r2
2004 !> Apply interpolation
2005 !----------------------------------------------------------------------
2006 subroutine bint_apply_real_r2_r2(bint,array_in,array_out,trans_in,trans_out,nn)
2007 
2008 implicit none
2009 
2010 ! Passed variables
2011 class(bump_interpolator),intent(inout) :: bint !< BUMP interpolator
2012 real(kind_real),intent(in) :: array_in(:,:) !< Input array, the rightmost dimension being the vertical
2013 real(kind_real),intent(out) :: array_out(:,:) !< Output array, the rightmost dimension being the vertical
2014 logical,intent(in),optional :: trans_in !< Input array should be transposed
2015 logical,intent(in),optional :: trans_out !< Output array should be transposed
2016 logical,intent(in),optional :: nn !< Nearest neighbor interpolation
2017 
2018 ! Local variables
2019 integer :: nl_in,nl_out
2020 integer :: shp_out(2)
2021 
2022 real(kind_real),allocatable :: vec_in(:,:),vec_in_tmp(:,:),vec_out(:,:)
2023 logical :: ltrans_in,ltrans_out,lnn
2024 
2025 ! Set name
2026 
2027 
2028 ! Get instance
2029 
2030 
2031 ! Probe in
2032 
2033 
2034 ! Local flags
2035 ltrans_in = .false.
2036 if (present(trans_in)) ltrans_in = trans_in
2037 ltrans_out = .false.
2038 if (present(trans_out)) ltrans_out = trans_out
2039 lnn = .false.
2040 if (present(nn)) lnn = nn
2041 
2042 ! Get number of levels
2043 # 634 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2044  if (ltrans_in) then
2045  nl_in = size(array_in,1)
2046  else
2047  nl_in = size(array_in,2)
2048  end if
2049 # 640 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2050 # 643 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2051  if (ltrans_out) then
2052  nl_out = size(array_out,1)
2053  else
2054  nl_out = size(array_out,2)
2055  end if
2056 # 649 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2057 bint%bump%geom%nl0 = nl_in
2058 
2059 ! Allocation
2060 allocate(vec_in(bint%bump%geom%nmga,bint%bump%geom%nl0))
2061 if (.not.bint%bump%geom%same_grid) allocate(vec_in_tmp(bint%bump%geom%nc0a,bint%bump%geom%nl0))
2062 allocate(vec_out(bint%nouta,bint%bump%geom%nl0))
2063 
2064 ! Pack input data
2065 
2066 # 659 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2067  if (ltrans_in) then
2068  vec_in = transpose(array_in)
2069  else
2070  vec_in = array_in
2071  end if
2072 # 665 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2073 # 674 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2074 
2075 ! Interpolate
2076 if (bint%bump%geom%same_grid) then
2077  call bint%apply_interp(vec_in,vec_out,lnn)
2078 else
2079  call bint%bump%geom%copy_mga_to_c0a(bint%bump%mpl,vec_in,vec_in_tmp)
2080  call bint%apply_interp(vec_in_tmp,vec_out,lnn)
2081 end if
2082 
2083 ! Unpack output data
2084 shp_out = shape(array_out)
2085 
2086 # 687 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2087  if (ltrans_out) then
2088  array_out = transpose(vec_out)
2089  else
2090  array_out = vec_out
2091  end if
2092 # 693 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2093 # 702 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2094 
2095 ! Probe out
2096 
2097 
2098 end subroutine bint_apply_real_r2_r2
2099 # 590 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2100 !----------------------------------------------------------------------
2101 ! Subroutine: bint_apply_real_r2_r3
2102 !> Apply interpolation
2103 !----------------------------------------------------------------------
2104 subroutine bint_apply_real_r2_r3(bint,array_in,array_out,trans_in,trans_out,nn)
2105 
2106 implicit none
2107 
2108 ! Passed variables
2109 class(bump_interpolator),intent(inout) :: bint !< BUMP interpolator
2110 real(kind_real),intent(in) :: array_in(:,:) !< Input array, the rightmost dimension being the vertical
2111 real(kind_real),intent(out) :: array_out(:,:,:) !< Output array, the rightmost dimension being the vertical
2112 logical,intent(in),optional :: trans_in !< Input array should be transposed
2113 logical,intent(in),optional :: trans_out !< Output array should be transposed
2114 logical,intent(in),optional :: nn !< Nearest neighbor interpolation
2115 
2116 ! Local variables
2117 integer :: nl_in,nl_out
2118 integer :: shp_out(3)
2119  integer :: il
2120 real(kind_real),allocatable :: vec_in(:,:),vec_in_tmp(:,:),vec_out(:,:)
2121 logical :: ltrans_in,ltrans_out,lnn
2122 
2123 ! Set name
2124 
2125 
2126 ! Get instance
2127 
2128 
2129 ! Probe in
2130 
2131 
2132 ! Local flags
2133 ltrans_in = .false.
2134 if (present(trans_in)) ltrans_in = trans_in
2135 ltrans_out = .false.
2136 if (present(trans_out)) ltrans_out = trans_out
2137 lnn = .false.
2138 if (present(nn)) lnn = nn
2139 
2140 ! Get number of levels
2141 # 634 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2142  if (ltrans_in) then
2143  nl_in = size(array_in,1)
2144  else
2145  nl_in = size(array_in,2)
2146  end if
2147 # 640 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2148 # 643 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2149  if (ltrans_out) then
2150  nl_out = size(array_out,1)
2151  else
2152  nl_out = size(array_out,3)
2153  end if
2154 # 649 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2155 bint%bump%geom%nl0 = nl_in
2156 
2157 ! Allocation
2158 allocate(vec_in(bint%bump%geom%nmga,bint%bump%geom%nl0))
2159 if (.not.bint%bump%geom%same_grid) allocate(vec_in_tmp(bint%bump%geom%nc0a,bint%bump%geom%nl0))
2160 allocate(vec_out(bint%nouta,bint%bump%geom%nl0))
2161 
2162 ! Pack input data
2163 
2164 # 659 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2165  if (ltrans_in) then
2166  vec_in = transpose(array_in)
2167  else
2168  vec_in = array_in
2169  end if
2170 # 665 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2171 # 674 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2172 
2173 ! Interpolate
2174 if (bint%bump%geom%same_grid) then
2175  call bint%apply_interp(vec_in,vec_out,lnn)
2176 else
2177  call bint%bump%geom%copy_mga_to_c0a(bint%bump%mpl,vec_in,vec_in_tmp)
2178  call bint%apply_interp(vec_in_tmp,vec_out,lnn)
2179 end if
2180 
2181 ! Unpack output data
2182 shp_out = shape(array_out)
2183 
2184 # 693 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2185 # 694 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2186  do il=1,nl_out
2187  if (ltrans_out) then
2188  array_out(:,:,il) = transpose(reshape(vec_out(:,il),(/shp_out(2),shp_out(1)/)))
2189  else
2190  array_out(:,:,il) = reshape(vec_out(:,il),shp_out(1:2))
2191  end if
2192  end do
2193 # 702 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2194 
2195 ! Probe out
2196 
2197 
2198 end subroutine bint_apply_real_r2_r3
2199 # 708 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2200 # 589 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2201 # 590 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2202 !----------------------------------------------------------------------
2203 ! Subroutine: bint_apply_real_r3_r1
2204 !> Apply interpolation
2205 !----------------------------------------------------------------------
2206 subroutine bint_apply_real_r3_r1(bint,array_in,array_out,trans_in,trans_out,nn)
2207 
2208 implicit none
2209 
2210 ! Passed variables
2211 class(bump_interpolator),intent(inout) :: bint !< BUMP interpolator
2212 real(kind_real),intent(in) :: array_in(:,:,:) !< Input array, the rightmost dimension being the vertical
2213 real(kind_real),intent(out) :: array_out(:) !< Output array, the rightmost dimension being the vertical
2214 logical,intent(in),optional :: trans_in !< Input array should be transposed
2215 logical,intent(in),optional :: trans_out !< Output array should be transposed
2216 logical,intent(in),optional :: nn !< Nearest neighbor interpolation
2217 
2218 ! Local variables
2219 integer :: nl_in,nl_out
2220 integer :: shp_out(1)
2221  integer :: il
2222 real(kind_real),allocatable :: vec_in(:,:),vec_in_tmp(:,:),vec_out(:,:)
2223 logical :: ltrans_in,ltrans_out,lnn
2224 
2225 ! Set name
2226 
2227 
2228 ! Get instance
2229 
2230 
2231 ! Probe in
2232 
2233 
2234 ! Local flags
2235 ltrans_in = .false.
2236 if (present(trans_in)) ltrans_in = trans_in
2237 ltrans_out = .false.
2238 if (present(trans_out)) ltrans_out = trans_out
2239 lnn = .false.
2240 if (present(nn)) lnn = nn
2241 
2242 ! Get number of levels
2243 # 634 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2244  if (ltrans_in) then
2245  nl_in = size(array_in,1)
2246  else
2247  nl_in = size(array_in,3)
2248  end if
2249 # 640 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2250 # 641 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2251  nl_out = 1
2252 # 649 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2253 bint%bump%geom%nl0 = nl_in
2254 
2255 ! Allocation
2256 allocate(vec_in(bint%bump%geom%nmga,bint%bump%geom%nl0))
2257 if (.not.bint%bump%geom%same_grid) allocate(vec_in_tmp(bint%bump%geom%nc0a,bint%bump%geom%nl0))
2258 allocate(vec_out(bint%nouta,bint%bump%geom%nl0))
2259 
2260 ! Pack input data
2261 
2262 # 665 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2263 # 666 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2264  do il=1,nl_in
2265  if (ltrans_in) then
2266  vec_in(:,il) = reshape(transpose(array_in(:,:,il)),(/bint%bump%geom%nmga/))
2267  else
2268  vec_in(:,il) = reshape(array_in(:,:,il),(/bint%bump%geom%nmga/))
2269  end if
2270  end do
2271 # 674 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2272 
2273 ! Interpolate
2274 if (bint%bump%geom%same_grid) then
2275  call bint%apply_interp(vec_in,vec_out,lnn)
2276 else
2277  call bint%bump%geom%copy_mga_to_c0a(bint%bump%mpl,vec_in,vec_in_tmp)
2278  call bint%apply_interp(vec_in_tmp,vec_out,lnn)
2279 end if
2280 
2281 ! Unpack output data
2282 shp_out = shape(array_out)
2283  array_out = vec_out(:,1)
2284 # 693 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2285 # 702 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2286 
2287 ! Probe out
2288 
2289 
2290 end subroutine bint_apply_real_r3_r1
2291 # 590 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2292 !----------------------------------------------------------------------
2293 ! Subroutine: bint_apply_real_r3_r2
2294 !> Apply interpolation
2295 !----------------------------------------------------------------------
2296 subroutine bint_apply_real_r3_r2(bint,array_in,array_out,trans_in,trans_out,nn)
2297 
2298 implicit none
2299 
2300 ! Passed variables
2301 class(bump_interpolator),intent(inout) :: bint !< BUMP interpolator
2302 real(kind_real),intent(in) :: array_in(:,:,:) !< Input array, the rightmost dimension being the vertical
2303 real(kind_real),intent(out) :: array_out(:,:) !< Output array, the rightmost dimension being the vertical
2304 logical,intent(in),optional :: trans_in !< Input array should be transposed
2305 logical,intent(in),optional :: trans_out !< Output array should be transposed
2306 logical,intent(in),optional :: nn !< Nearest neighbor interpolation
2307 
2308 ! Local variables
2309 integer :: nl_in,nl_out
2310 integer :: shp_out(2)
2311  integer :: il
2312 real(kind_real),allocatable :: vec_in(:,:),vec_in_tmp(:,:),vec_out(:,:)
2313 logical :: ltrans_in,ltrans_out,lnn
2314 
2315 ! Set name
2316 
2317 
2318 ! Get instance
2319 
2320 
2321 ! Probe in
2322 
2323 
2324 ! Local flags
2325 ltrans_in = .false.
2326 if (present(trans_in)) ltrans_in = trans_in
2327 ltrans_out = .false.
2328 if (present(trans_out)) ltrans_out = trans_out
2329 lnn = .false.
2330 if (present(nn)) lnn = nn
2331 
2332 ! Get number of levels
2333 # 634 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2334  if (ltrans_in) then
2335  nl_in = size(array_in,1)
2336  else
2337  nl_in = size(array_in,3)
2338  end if
2339 # 640 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2340 # 643 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2341  if (ltrans_out) then
2342  nl_out = size(array_out,1)
2343  else
2344  nl_out = size(array_out,2)
2345  end if
2346 # 649 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2347 bint%bump%geom%nl0 = nl_in
2348 
2349 ! Allocation
2350 allocate(vec_in(bint%bump%geom%nmga,bint%bump%geom%nl0))
2351 if (.not.bint%bump%geom%same_grid) allocate(vec_in_tmp(bint%bump%geom%nc0a,bint%bump%geom%nl0))
2352 allocate(vec_out(bint%nouta,bint%bump%geom%nl0))
2353 
2354 ! Pack input data
2355 
2356 # 665 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2357 # 666 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2358  do il=1,nl_in
2359  if (ltrans_in) then
2360  vec_in(:,il) = reshape(transpose(array_in(:,:,il)),(/bint%bump%geom%nmga/))
2361  else
2362  vec_in(:,il) = reshape(array_in(:,:,il),(/bint%bump%geom%nmga/))
2363  end if
2364  end do
2365 # 674 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2366 
2367 ! Interpolate
2368 if (bint%bump%geom%same_grid) then
2369  call bint%apply_interp(vec_in,vec_out,lnn)
2370 else
2371  call bint%bump%geom%copy_mga_to_c0a(bint%bump%mpl,vec_in,vec_in_tmp)
2372  call bint%apply_interp(vec_in_tmp,vec_out,lnn)
2373 end if
2374 
2375 ! Unpack output data
2376 shp_out = shape(array_out)
2377 
2378 # 687 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2379  if (ltrans_out) then
2380  array_out = transpose(vec_out)
2381  else
2382  array_out = vec_out
2383  end if
2384 # 693 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2385 # 702 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2386 
2387 ! Probe out
2388 
2389 
2390 end subroutine bint_apply_real_r3_r2
2391 # 590 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2392 !----------------------------------------------------------------------
2393 ! Subroutine: bint_apply_real_r3_r3
2394 !> Apply interpolation
2395 !----------------------------------------------------------------------
2396 subroutine bint_apply_real_r3_r3(bint,array_in,array_out,trans_in,trans_out,nn)
2397 
2398 implicit none
2399 
2400 ! Passed variables
2401 class(bump_interpolator),intent(inout) :: bint !< BUMP interpolator
2402 real(kind_real),intent(in) :: array_in(:,:,:) !< Input array, the rightmost dimension being the vertical
2403 real(kind_real),intent(out) :: array_out(:,:,:) !< Output array, the rightmost dimension being the vertical
2404 logical,intent(in),optional :: trans_in !< Input array should be transposed
2405 logical,intent(in),optional :: trans_out !< Output array should be transposed
2406 logical,intent(in),optional :: nn !< Nearest neighbor interpolation
2407 
2408 ! Local variables
2409 integer :: nl_in,nl_out
2410 integer :: shp_out(3)
2411  integer :: il
2412 real(kind_real),allocatable :: vec_in(:,:),vec_in_tmp(:,:),vec_out(:,:)
2413 logical :: ltrans_in,ltrans_out,lnn
2414 
2415 ! Set name
2416 
2417 
2418 ! Get instance
2419 
2420 
2421 ! Probe in
2422 
2423 
2424 ! Local flags
2425 ltrans_in = .false.
2426 if (present(trans_in)) ltrans_in = trans_in
2427 ltrans_out = .false.
2428 if (present(trans_out)) ltrans_out = trans_out
2429 lnn = .false.
2430 if (present(nn)) lnn = nn
2431 
2432 ! Get number of levels
2433 # 634 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2434  if (ltrans_in) then
2435  nl_in = size(array_in,1)
2436  else
2437  nl_in = size(array_in,3)
2438  end if
2439 # 640 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2440 # 643 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2441  if (ltrans_out) then
2442  nl_out = size(array_out,1)
2443  else
2444  nl_out = size(array_out,3)
2445  end if
2446 # 649 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2447 bint%bump%geom%nl0 = nl_in
2448 
2449 ! Allocation
2450 allocate(vec_in(bint%bump%geom%nmga,bint%bump%geom%nl0))
2451 if (.not.bint%bump%geom%same_grid) allocate(vec_in_tmp(bint%bump%geom%nc0a,bint%bump%geom%nl0))
2452 allocate(vec_out(bint%nouta,bint%bump%geom%nl0))
2453 
2454 ! Pack input data
2455 
2456 # 665 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2457 # 666 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2458  do il=1,nl_in
2459  if (ltrans_in) then
2460  vec_in(:,il) = reshape(transpose(array_in(:,:,il)),(/bint%bump%geom%nmga/))
2461  else
2462  vec_in(:,il) = reshape(array_in(:,:,il),(/bint%bump%geom%nmga/))
2463  end if
2464  end do
2465 # 674 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2466 
2467 ! Interpolate
2468 if (bint%bump%geom%same_grid) then
2469  call bint%apply_interp(vec_in,vec_out,lnn)
2470 else
2471  call bint%bump%geom%copy_mga_to_c0a(bint%bump%mpl,vec_in,vec_in_tmp)
2472  call bint%apply_interp(vec_in_tmp,vec_out,lnn)
2473 end if
2474 
2475 ! Unpack output data
2476 shp_out = shape(array_out)
2477 
2478 # 693 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2479 # 694 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2480  do il=1,nl_out
2481  if (ltrans_out) then
2482  array_out(:,:,il) = transpose(reshape(vec_out(:,il),(/shp_out(2),shp_out(1)/)))
2483  else
2484  array_out(:,:,il) = reshape(vec_out(:,il),shp_out(1:2))
2485  end if
2486  end do
2487 # 702 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2488 
2489 ! Probe out
2490 
2491 
2492 end subroutine bint_apply_real_r3_r3
2493 # 708 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2494 # 709 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2495 # 588 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2496 # 589 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2497 # 590 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2498 !----------------------------------------------------------------------
2499 ! Subroutine: bint_apply_logical_r1_r1
2500 !> Apply interpolation
2501 !----------------------------------------------------------------------
2502 subroutine bint_apply_logical_r1_r1(bint,array_in,array_out,trans_in,trans_out,nn)
2503 
2504 implicit none
2505 
2506 ! Passed variables
2507 class(bump_interpolator),intent(inout) :: bint !< BUMP interpolator
2508 logical,intent(in) :: array_in(:) !< Input array, the rightmost dimension being the vertical
2509 logical,intent(out) :: array_out(:) !< Output array, the rightmost dimension being the vertical
2510 logical,intent(in),optional :: trans_in !< Input array should be transposed
2511 logical,intent(in),optional :: trans_out !< Output array should be transposed
2512 logical,intent(in),optional :: nn !< Nearest neighbor interpolation
2513 
2514 ! Local variables
2515 integer :: nl_in,nl_out
2516 integer :: shp_out(1)
2517 
2518 logical,allocatable :: vec_in(:,:),vec_in_tmp(:,:),vec_out(:,:)
2519 logical :: ltrans_in,ltrans_out,lnn
2520 
2521 ! Set name
2522 
2523 
2524 ! Get instance
2525 
2526 
2527 ! Probe in
2528 
2529 
2530 ! Local flags
2531 ltrans_in = .false.
2532 if (present(trans_in)) ltrans_in = trans_in
2533 ltrans_out = .false.
2534 if (present(trans_out)) ltrans_out = trans_out
2535 lnn = .false.
2536 if (present(nn)) lnn = nn
2537 
2538 ! Get number of levels
2539 # 632 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2540  nl_in = 1
2541 # 640 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2542 # 641 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2543  nl_out = 1
2544 # 649 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2545 bint%bump%geom%nl0 = nl_in
2546 
2547 ! Allocation
2548 allocate(vec_in(bint%bump%geom%nmga,bint%bump%geom%nl0))
2549 if (.not.bint%bump%geom%same_grid) allocate(vec_in_tmp(bint%bump%geom%nc0a,bint%bump%geom%nl0))
2550 allocate(vec_out(bint%nouta,bint%bump%geom%nl0))
2551 
2552 ! Pack input data
2553  vec_in(:,1) = array_in
2554 # 665 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2555 # 674 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2556 
2557 ! Interpolate
2558 if (bint%bump%geom%same_grid) then
2559  call bint%apply_interp(vec_in,vec_out,lnn)
2560 else
2561  call bint%bump%geom%copy_mga_to_c0a(bint%bump%mpl,vec_in,vec_in_tmp)
2562  call bint%apply_interp(vec_in_tmp,vec_out,lnn)
2563 end if
2564 
2565 ! Unpack output data
2566 shp_out = shape(array_out)
2567  array_out = vec_out(:,1)
2568 # 693 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2569 # 702 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2570 
2571 ! Probe out
2572 
2573 
2574 end subroutine bint_apply_logical_r1_r1
2575 # 590 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2576 !----------------------------------------------------------------------
2577 ! Subroutine: bint_apply_logical_r1_r2
2578 !> Apply interpolation
2579 !----------------------------------------------------------------------
2580 subroutine bint_apply_logical_r1_r2(bint,array_in,array_out,trans_in,trans_out,nn)
2581 
2582 implicit none
2583 
2584 ! Passed variables
2585 class(bump_interpolator),intent(inout) :: bint !< BUMP interpolator
2586 logical,intent(in) :: array_in(:) !< Input array, the rightmost dimension being the vertical
2587 logical,intent(out) :: array_out(:,:) !< Output array, the rightmost dimension being the vertical
2588 logical,intent(in),optional :: trans_in !< Input array should be transposed
2589 logical,intent(in),optional :: trans_out !< Output array should be transposed
2590 logical,intent(in),optional :: nn !< Nearest neighbor interpolation
2591 
2592 ! Local variables
2593 integer :: nl_in,nl_out
2594 integer :: shp_out(2)
2595 
2596 logical,allocatable :: vec_in(:,:),vec_in_tmp(:,:),vec_out(:,:)
2597 logical :: ltrans_in,ltrans_out,lnn
2598 
2599 ! Set name
2600 
2601 
2602 ! Get instance
2603 
2604 
2605 ! Probe in
2606 
2607 
2608 ! Local flags
2609 ltrans_in = .false.
2610 if (present(trans_in)) ltrans_in = trans_in
2611 ltrans_out = .false.
2612 if (present(trans_out)) ltrans_out = trans_out
2613 lnn = .false.
2614 if (present(nn)) lnn = nn
2615 
2616 ! Get number of levels
2617 # 632 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2618  nl_in = 1
2619 # 640 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2620 # 643 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2621  if (ltrans_out) then
2622  nl_out = size(array_out,1)
2623  else
2624  nl_out = size(array_out,2)
2625  end if
2626 # 649 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2627 bint%bump%geom%nl0 = nl_in
2628 
2629 ! Allocation
2630 allocate(vec_in(bint%bump%geom%nmga,bint%bump%geom%nl0))
2631 if (.not.bint%bump%geom%same_grid) allocate(vec_in_tmp(bint%bump%geom%nc0a,bint%bump%geom%nl0))
2632 allocate(vec_out(bint%nouta,bint%bump%geom%nl0))
2633 
2634 ! Pack input data
2635  vec_in(:,1) = array_in
2636 # 665 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2637 # 674 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2638 
2639 ! Interpolate
2640 if (bint%bump%geom%same_grid) then
2641  call bint%apply_interp(vec_in,vec_out,lnn)
2642 else
2643  call bint%bump%geom%copy_mga_to_c0a(bint%bump%mpl,vec_in,vec_in_tmp)
2644  call bint%apply_interp(vec_in_tmp,vec_out,lnn)
2645 end if
2646 
2647 ! Unpack output data
2648 shp_out = shape(array_out)
2649 
2650 # 687 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2651  if (ltrans_out) then
2652  array_out = transpose(vec_out)
2653  else
2654  array_out = vec_out
2655  end if
2656 # 693 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2657 # 702 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2658 
2659 ! Probe out
2660 
2661 
2662 end subroutine bint_apply_logical_r1_r2
2663 # 590 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2664 !----------------------------------------------------------------------
2665 ! Subroutine: bint_apply_logical_r1_r3
2666 !> Apply interpolation
2667 !----------------------------------------------------------------------
2668 subroutine bint_apply_logical_r1_r3(bint,array_in,array_out,trans_in,trans_out,nn)
2669 
2670 implicit none
2671 
2672 ! Passed variables
2673 class(bump_interpolator),intent(inout) :: bint !< BUMP interpolator
2674 logical,intent(in) :: array_in(:) !< Input array, the rightmost dimension being the vertical
2675 logical,intent(out) :: array_out(:,:,:) !< Output array, the rightmost dimension being the vertical
2676 logical,intent(in),optional :: trans_in !< Input array should be transposed
2677 logical,intent(in),optional :: trans_out !< Output array should be transposed
2678 logical,intent(in),optional :: nn !< Nearest neighbor interpolation
2679 
2680 ! Local variables
2681 integer :: nl_in,nl_out
2682 integer :: shp_out(3)
2683  integer :: il
2684 logical,allocatable :: vec_in(:,:),vec_in_tmp(:,:),vec_out(:,:)
2685 logical :: ltrans_in,ltrans_out,lnn
2686 
2687 ! Set name
2688 
2689 
2690 ! Get instance
2691 
2692 
2693 ! Probe in
2694 
2695 
2696 ! Local flags
2697 ltrans_in = .false.
2698 if (present(trans_in)) ltrans_in = trans_in
2699 ltrans_out = .false.
2700 if (present(trans_out)) ltrans_out = trans_out
2701 lnn = .false.
2702 if (present(nn)) lnn = nn
2703 
2704 ! Get number of levels
2705 # 632 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2706  nl_in = 1
2707 # 640 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2708 # 643 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2709  if (ltrans_out) then
2710  nl_out = size(array_out,1)
2711  else
2712  nl_out = size(array_out,3)
2713  end if
2714 # 649 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2715 bint%bump%geom%nl0 = nl_in
2716 
2717 ! Allocation
2718 allocate(vec_in(bint%bump%geom%nmga,bint%bump%geom%nl0))
2719 if (.not.bint%bump%geom%same_grid) allocate(vec_in_tmp(bint%bump%geom%nc0a,bint%bump%geom%nl0))
2720 allocate(vec_out(bint%nouta,bint%bump%geom%nl0))
2721 
2722 ! Pack input data
2723  vec_in(:,1) = array_in
2724 # 665 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2725 # 674 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2726 
2727 ! Interpolate
2728 if (bint%bump%geom%same_grid) then
2729  call bint%apply_interp(vec_in,vec_out,lnn)
2730 else
2731  call bint%bump%geom%copy_mga_to_c0a(bint%bump%mpl,vec_in,vec_in_tmp)
2732  call bint%apply_interp(vec_in_tmp,vec_out,lnn)
2733 end if
2734 
2735 ! Unpack output data
2736 shp_out = shape(array_out)
2737 
2738 # 693 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2739 # 694 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2740  do il=1,nl_out
2741  if (ltrans_out) then
2742  array_out(:,:,il) = transpose(reshape(vec_out(:,il),(/shp_out(2),shp_out(1)/)))
2743  else
2744  array_out(:,:,il) = reshape(vec_out(:,il),shp_out(1:2))
2745  end if
2746  end do
2747 # 702 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2748 
2749 ! Probe out
2750 
2751 
2752 end subroutine bint_apply_logical_r1_r3
2753 # 708 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2754 # 589 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2755 # 590 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2756 !----------------------------------------------------------------------
2757 ! Subroutine: bint_apply_logical_r2_r1
2758 !> Apply interpolation
2759 !----------------------------------------------------------------------
2760 subroutine bint_apply_logical_r2_r1(bint,array_in,array_out,trans_in,trans_out,nn)
2761 
2762 implicit none
2763 
2764 ! Passed variables
2765 class(bump_interpolator),intent(inout) :: bint !< BUMP interpolator
2766 logical,intent(in) :: array_in(:,:) !< Input array, the rightmost dimension being the vertical
2767 logical,intent(out) :: array_out(:) !< Output array, the rightmost dimension being the vertical
2768 logical,intent(in),optional :: trans_in !< Input array should be transposed
2769 logical,intent(in),optional :: trans_out !< Output array should be transposed
2770 logical,intent(in),optional :: nn !< Nearest neighbor interpolation
2771 
2772 ! Local variables
2773 integer :: nl_in,nl_out
2774 integer :: shp_out(1)
2775 
2776 logical,allocatable :: vec_in(:,:),vec_in_tmp(:,:),vec_out(:,:)
2777 logical :: ltrans_in,ltrans_out,lnn
2778 
2779 ! Set name
2780 
2781 
2782 ! Get instance
2783 
2784 
2785 ! Probe in
2786 
2787 
2788 ! Local flags
2789 ltrans_in = .false.
2790 if (present(trans_in)) ltrans_in = trans_in
2791 ltrans_out = .false.
2792 if (present(trans_out)) ltrans_out = trans_out
2793 lnn = .false.
2794 if (present(nn)) lnn = nn
2795 
2796 ! Get number of levels
2797 # 634 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2798  if (ltrans_in) then
2799  nl_in = size(array_in,1)
2800  else
2801  nl_in = size(array_in,2)
2802  end if
2803 # 640 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2804 # 641 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2805  nl_out = 1
2806 # 649 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2807 bint%bump%geom%nl0 = nl_in
2808 
2809 ! Allocation
2810 allocate(vec_in(bint%bump%geom%nmga,bint%bump%geom%nl0))
2811 if (.not.bint%bump%geom%same_grid) allocate(vec_in_tmp(bint%bump%geom%nc0a,bint%bump%geom%nl0))
2812 allocate(vec_out(bint%nouta,bint%bump%geom%nl0))
2813 
2814 ! Pack input data
2815 
2816 # 659 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2817  if (ltrans_in) then
2818  vec_in = transpose(array_in)
2819  else
2820  vec_in = array_in
2821  end if
2822 # 665 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2823 # 674 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2824 
2825 ! Interpolate
2826 if (bint%bump%geom%same_grid) then
2827  call bint%apply_interp(vec_in,vec_out,lnn)
2828 else
2829  call bint%bump%geom%copy_mga_to_c0a(bint%bump%mpl,vec_in,vec_in_tmp)
2830  call bint%apply_interp(vec_in_tmp,vec_out,lnn)
2831 end if
2832 
2833 ! Unpack output data
2834 shp_out = shape(array_out)
2835  array_out = vec_out(:,1)
2836 # 693 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2837 # 702 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2838 
2839 ! Probe out
2840 
2841 
2842 end subroutine bint_apply_logical_r2_r1
2843 # 590 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2844 !----------------------------------------------------------------------
2845 ! Subroutine: bint_apply_logical_r2_r2
2846 !> Apply interpolation
2847 !----------------------------------------------------------------------
2848 subroutine bint_apply_logical_r2_r2(bint,array_in,array_out,trans_in,trans_out,nn)
2849 
2850 implicit none
2851 
2852 ! Passed variables
2853 class(bump_interpolator),intent(inout) :: bint !< BUMP interpolator
2854 logical,intent(in) :: array_in(:,:) !< Input array, the rightmost dimension being the vertical
2855 logical,intent(out) :: array_out(:,:) !< Output array, the rightmost dimension being the vertical
2856 logical,intent(in),optional :: trans_in !< Input array should be transposed
2857 logical,intent(in),optional :: trans_out !< Output array should be transposed
2858 logical,intent(in),optional :: nn !< Nearest neighbor interpolation
2859 
2860 ! Local variables
2861 integer :: nl_in,nl_out
2862 integer :: shp_out(2)
2863 
2864 logical,allocatable :: vec_in(:,:),vec_in_tmp(:,:),vec_out(:,:)
2865 logical :: ltrans_in,ltrans_out,lnn
2866 
2867 ! Set name
2868 
2869 
2870 ! Get instance
2871 
2872 
2873 ! Probe in
2874 
2875 
2876 ! Local flags
2877 ltrans_in = .false.
2878 if (present(trans_in)) ltrans_in = trans_in
2879 ltrans_out = .false.
2880 if (present(trans_out)) ltrans_out = trans_out
2881 lnn = .false.
2882 if (present(nn)) lnn = nn
2883 
2884 ! Get number of levels
2885 # 634 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2886  if (ltrans_in) then
2887  nl_in = size(array_in,1)
2888  else
2889  nl_in = size(array_in,2)
2890  end if
2891 # 640 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2892 # 643 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2893  if (ltrans_out) then
2894  nl_out = size(array_out,1)
2895  else
2896  nl_out = size(array_out,2)
2897  end if
2898 # 649 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2899 bint%bump%geom%nl0 = nl_in
2900 
2901 ! Allocation
2902 allocate(vec_in(bint%bump%geom%nmga,bint%bump%geom%nl0))
2903 if (.not.bint%bump%geom%same_grid) allocate(vec_in_tmp(bint%bump%geom%nc0a,bint%bump%geom%nl0))
2904 allocate(vec_out(bint%nouta,bint%bump%geom%nl0))
2905 
2906 ! Pack input data
2907 
2908 # 659 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2909  if (ltrans_in) then
2910  vec_in = transpose(array_in)
2911  else
2912  vec_in = array_in
2913  end if
2914 # 665 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2915 # 674 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2916 
2917 ! Interpolate
2918 if (bint%bump%geom%same_grid) then
2919  call bint%apply_interp(vec_in,vec_out,lnn)
2920 else
2921  call bint%bump%geom%copy_mga_to_c0a(bint%bump%mpl,vec_in,vec_in_tmp)
2922  call bint%apply_interp(vec_in_tmp,vec_out,lnn)
2923 end if
2924 
2925 ! Unpack output data
2926 shp_out = shape(array_out)
2927 
2928 # 687 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2929  if (ltrans_out) then
2930  array_out = transpose(vec_out)
2931  else
2932  array_out = vec_out
2933  end if
2934 # 693 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2935 # 702 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2936 
2937 ! Probe out
2938 
2939 
2940 end subroutine bint_apply_logical_r2_r2
2941 # 590 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2942 !----------------------------------------------------------------------
2943 ! Subroutine: bint_apply_logical_r2_r3
2944 !> Apply interpolation
2945 !----------------------------------------------------------------------
2946 subroutine bint_apply_logical_r2_r3(bint,array_in,array_out,trans_in,trans_out,nn)
2947 
2948 implicit none
2949 
2950 ! Passed variables
2951 class(bump_interpolator),intent(inout) :: bint !< BUMP interpolator
2952 logical,intent(in) :: array_in(:,:) !< Input array, the rightmost dimension being the vertical
2953 logical,intent(out) :: array_out(:,:,:) !< Output array, the rightmost dimension being the vertical
2954 logical,intent(in),optional :: trans_in !< Input array should be transposed
2955 logical,intent(in),optional :: trans_out !< Output array should be transposed
2956 logical,intent(in),optional :: nn !< Nearest neighbor interpolation
2957 
2958 ! Local variables
2959 integer :: nl_in,nl_out
2960 integer :: shp_out(3)
2961  integer :: il
2962 logical,allocatable :: vec_in(:,:),vec_in_tmp(:,:),vec_out(:,:)
2963 logical :: ltrans_in,ltrans_out,lnn
2964 
2965 ! Set name
2966 
2967 
2968 ! Get instance
2969 
2970 
2971 ! Probe in
2972 
2973 
2974 ! Local flags
2975 ltrans_in = .false.
2976 if (present(trans_in)) ltrans_in = trans_in
2977 ltrans_out = .false.
2978 if (present(trans_out)) ltrans_out = trans_out
2979 lnn = .false.
2980 if (present(nn)) lnn = nn
2981 
2982 ! Get number of levels
2983 # 634 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2984  if (ltrans_in) then
2985  nl_in = size(array_in,1)
2986  else
2987  nl_in = size(array_in,2)
2988  end if
2989 # 640 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2990 # 643 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2991  if (ltrans_out) then
2992  nl_out = size(array_out,1)
2993  else
2994  nl_out = size(array_out,3)
2995  end if
2996 # 649 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
2997 bint%bump%geom%nl0 = nl_in
2998 
2999 ! Allocation
3000 allocate(vec_in(bint%bump%geom%nmga,bint%bump%geom%nl0))
3001 if (.not.bint%bump%geom%same_grid) allocate(vec_in_tmp(bint%bump%geom%nc0a,bint%bump%geom%nl0))
3002 allocate(vec_out(bint%nouta,bint%bump%geom%nl0))
3003 
3004 ! Pack input data
3005 
3006 # 659 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3007  if (ltrans_in) then
3008  vec_in = transpose(array_in)
3009  else
3010  vec_in = array_in
3011  end if
3012 # 665 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3013 # 674 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3014 
3015 ! Interpolate
3016 if (bint%bump%geom%same_grid) then
3017  call bint%apply_interp(vec_in,vec_out,lnn)
3018 else
3019  call bint%bump%geom%copy_mga_to_c0a(bint%bump%mpl,vec_in,vec_in_tmp)
3020  call bint%apply_interp(vec_in_tmp,vec_out,lnn)
3021 end if
3022 
3023 ! Unpack output data
3024 shp_out = shape(array_out)
3025 
3026 # 693 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3027 # 694 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3028  do il=1,nl_out
3029  if (ltrans_out) then
3030  array_out(:,:,il) = transpose(reshape(vec_out(:,il),(/shp_out(2),shp_out(1)/)))
3031  else
3032  array_out(:,:,il) = reshape(vec_out(:,il),shp_out(1:2))
3033  end if
3034  end do
3035 # 702 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3036 
3037 ! Probe out
3038 
3039 
3040 end subroutine bint_apply_logical_r2_r3
3041 # 708 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3042 # 589 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3043 # 590 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3044 !----------------------------------------------------------------------
3045 ! Subroutine: bint_apply_logical_r3_r1
3046 !> Apply interpolation
3047 !----------------------------------------------------------------------
3048 subroutine bint_apply_logical_r3_r1(bint,array_in,array_out,trans_in,trans_out,nn)
3049 
3050 implicit none
3051 
3052 ! Passed variables
3053 class(bump_interpolator),intent(inout) :: bint !< BUMP interpolator
3054 logical,intent(in) :: array_in(:,:,:) !< Input array, the rightmost dimension being the vertical
3055 logical,intent(out) :: array_out(:) !< Output array, the rightmost dimension being the vertical
3056 logical,intent(in),optional :: trans_in !< Input array should be transposed
3057 logical,intent(in),optional :: trans_out !< Output array should be transposed
3058 logical,intent(in),optional :: nn !< Nearest neighbor interpolation
3059 
3060 ! Local variables
3061 integer :: nl_in,nl_out
3062 integer :: shp_out(1)
3063  integer :: il
3064 logical,allocatable :: vec_in(:,:),vec_in_tmp(:,:),vec_out(:,:)
3065 logical :: ltrans_in,ltrans_out,lnn
3066 
3067 ! Set name
3068 
3069 
3070 ! Get instance
3071 
3072 
3073 ! Probe in
3074 
3075 
3076 ! Local flags
3077 ltrans_in = .false.
3078 if (present(trans_in)) ltrans_in = trans_in
3079 ltrans_out = .false.
3080 if (present(trans_out)) ltrans_out = trans_out
3081 lnn = .false.
3082 if (present(nn)) lnn = nn
3083 
3084 ! Get number of levels
3085 # 634 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3086  if (ltrans_in) then
3087  nl_in = size(array_in,1)
3088  else
3089  nl_in = size(array_in,3)
3090  end if
3091 # 640 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3092 # 641 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3093  nl_out = 1
3094 # 649 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3095 bint%bump%geom%nl0 = nl_in
3096 
3097 ! Allocation
3098 allocate(vec_in(bint%bump%geom%nmga,bint%bump%geom%nl0))
3099 if (.not.bint%bump%geom%same_grid) allocate(vec_in_tmp(bint%bump%geom%nc0a,bint%bump%geom%nl0))
3100 allocate(vec_out(bint%nouta,bint%bump%geom%nl0))
3101 
3102 ! Pack input data
3103 
3104 # 665 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3105 # 666 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3106  do il=1,nl_in
3107  if (ltrans_in) then
3108  vec_in(:,il) = reshape(transpose(array_in(:,:,il)),(/bint%bump%geom%nmga/))
3109  else
3110  vec_in(:,il) = reshape(array_in(:,:,il),(/bint%bump%geom%nmga/))
3111  end if
3112  end do
3113 # 674 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3114 
3115 ! Interpolate
3116 if (bint%bump%geom%same_grid) then
3117  call bint%apply_interp(vec_in,vec_out,lnn)
3118 else
3119  call bint%bump%geom%copy_mga_to_c0a(bint%bump%mpl,vec_in,vec_in_tmp)
3120  call bint%apply_interp(vec_in_tmp,vec_out,lnn)
3121 end if
3122 
3123 ! Unpack output data
3124 shp_out = shape(array_out)
3125  array_out = vec_out(:,1)
3126 # 693 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3127 # 702 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3128 
3129 ! Probe out
3130 
3131 
3132 end subroutine bint_apply_logical_r3_r1
3133 # 590 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3134 !----------------------------------------------------------------------
3135 ! Subroutine: bint_apply_logical_r3_r2
3136 !> Apply interpolation
3137 !----------------------------------------------------------------------
3138 subroutine bint_apply_logical_r3_r2(bint,array_in,array_out,trans_in,trans_out,nn)
3139 
3140 implicit none
3141 
3142 ! Passed variables
3143 class(bump_interpolator),intent(inout) :: bint !< BUMP interpolator
3144 logical,intent(in) :: array_in(:,:,:) !< Input array, the rightmost dimension being the vertical
3145 logical,intent(out) :: array_out(:,:) !< Output array, the rightmost dimension being the vertical
3146 logical,intent(in),optional :: trans_in !< Input array should be transposed
3147 logical,intent(in),optional :: trans_out !< Output array should be transposed
3148 logical,intent(in),optional :: nn !< Nearest neighbor interpolation
3149 
3150 ! Local variables
3151 integer :: nl_in,nl_out
3152 integer :: shp_out(2)
3153  integer :: il
3154 logical,allocatable :: vec_in(:,:),vec_in_tmp(:,:),vec_out(:,:)
3155 logical :: ltrans_in,ltrans_out,lnn
3156 
3157 ! Set name
3158 
3159 
3160 ! Get instance
3161 
3162 
3163 ! Probe in
3164 
3165 
3166 ! Local flags
3167 ltrans_in = .false.
3168 if (present(trans_in)) ltrans_in = trans_in
3169 ltrans_out = .false.
3170 if (present(trans_out)) ltrans_out = trans_out
3171 lnn = .false.
3172 if (present(nn)) lnn = nn
3173 
3174 ! Get number of levels
3175 # 634 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3176  if (ltrans_in) then
3177  nl_in = size(array_in,1)
3178  else
3179  nl_in = size(array_in,3)
3180  end if
3181 # 640 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3182 # 643 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3183  if (ltrans_out) then
3184  nl_out = size(array_out,1)
3185  else
3186  nl_out = size(array_out,2)
3187  end if
3188 # 649 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3189 bint%bump%geom%nl0 = nl_in
3190 
3191 ! Allocation
3192 allocate(vec_in(bint%bump%geom%nmga,bint%bump%geom%nl0))
3193 if (.not.bint%bump%geom%same_grid) allocate(vec_in_tmp(bint%bump%geom%nc0a,bint%bump%geom%nl0))
3194 allocate(vec_out(bint%nouta,bint%bump%geom%nl0))
3195 
3196 ! Pack input data
3197 
3198 # 665 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3199 # 666 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3200  do il=1,nl_in
3201  if (ltrans_in) then
3202  vec_in(:,il) = reshape(transpose(array_in(:,:,il)),(/bint%bump%geom%nmga/))
3203  else
3204  vec_in(:,il) = reshape(array_in(:,:,il),(/bint%bump%geom%nmga/))
3205  end if
3206  end do
3207 # 674 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3208 
3209 ! Interpolate
3210 if (bint%bump%geom%same_grid) then
3211  call bint%apply_interp(vec_in,vec_out,lnn)
3212 else
3213  call bint%bump%geom%copy_mga_to_c0a(bint%bump%mpl,vec_in,vec_in_tmp)
3214  call bint%apply_interp(vec_in_tmp,vec_out,lnn)
3215 end if
3216 
3217 ! Unpack output data
3218 shp_out = shape(array_out)
3219 
3220 # 687 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3221  if (ltrans_out) then
3222  array_out = transpose(vec_out)
3223  else
3224  array_out = vec_out
3225  end if
3226 # 693 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3227 # 702 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3228 
3229 ! Probe out
3230 
3231 
3232 end subroutine bint_apply_logical_r3_r2
3233 # 590 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3234 !----------------------------------------------------------------------
3235 ! Subroutine: bint_apply_logical_r3_r3
3236 !> Apply interpolation
3237 !----------------------------------------------------------------------
3238 subroutine bint_apply_logical_r3_r3(bint,array_in,array_out,trans_in,trans_out,nn)
3239 
3240 implicit none
3241 
3242 ! Passed variables
3243 class(bump_interpolator),intent(inout) :: bint !< BUMP interpolator
3244 logical,intent(in) :: array_in(:,:,:) !< Input array, the rightmost dimension being the vertical
3245 logical,intent(out) :: array_out(:,:,:) !< Output array, the rightmost dimension being the vertical
3246 logical,intent(in),optional :: trans_in !< Input array should be transposed
3247 logical,intent(in),optional :: trans_out !< Output array should be transposed
3248 logical,intent(in),optional :: nn !< Nearest neighbor interpolation
3249 
3250 ! Local variables
3251 integer :: nl_in,nl_out
3252 integer :: shp_out(3)
3253  integer :: il
3254 logical,allocatable :: vec_in(:,:),vec_in_tmp(:,:),vec_out(:,:)
3255 logical :: ltrans_in,ltrans_out,lnn
3256 
3257 ! Set name
3258 
3259 
3260 ! Get instance
3261 
3262 
3263 ! Probe in
3264 
3265 
3266 ! Local flags
3267 ltrans_in = .false.
3268 if (present(trans_in)) ltrans_in = trans_in
3269 ltrans_out = .false.
3270 if (present(trans_out)) ltrans_out = trans_out
3271 lnn = .false.
3272 if (present(nn)) lnn = nn
3273 
3274 ! Get number of levels
3275 # 634 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3276  if (ltrans_in) then
3277  nl_in = size(array_in,1)
3278  else
3279  nl_in = size(array_in,3)
3280  end if
3281 # 640 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3282 # 643 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3283  if (ltrans_out) then
3284  nl_out = size(array_out,1)
3285  else
3286  nl_out = size(array_out,3)
3287  end if
3288 # 649 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3289 bint%bump%geom%nl0 = nl_in
3290 
3291 ! Allocation
3292 allocate(vec_in(bint%bump%geom%nmga,bint%bump%geom%nl0))
3293 if (.not.bint%bump%geom%same_grid) allocate(vec_in_tmp(bint%bump%geom%nc0a,bint%bump%geom%nl0))
3294 allocate(vec_out(bint%nouta,bint%bump%geom%nl0))
3295 
3296 ! Pack input data
3297 
3298 # 665 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3299 # 666 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3300  do il=1,nl_in
3301  if (ltrans_in) then
3302  vec_in(:,il) = reshape(transpose(array_in(:,:,il)),(/bint%bump%geom%nmga/))
3303  else
3304  vec_in(:,il) = reshape(array_in(:,:,il),(/bint%bump%geom%nmga/))
3305  end if
3306  end do
3307 # 674 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3308 
3309 ! Interpolate
3310 if (bint%bump%geom%same_grid) then
3311  call bint%apply_interp(vec_in,vec_out,lnn)
3312 else
3313  call bint%bump%geom%copy_mga_to_c0a(bint%bump%mpl,vec_in,vec_in_tmp)
3314  call bint%apply_interp(vec_in_tmp,vec_out,lnn)
3315 end if
3316 
3317 ! Unpack output data
3318 shp_out = shape(array_out)
3319 
3320 # 693 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3321 # 694 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3322  do il=1,nl_out
3323  if (ltrans_out) then
3324  array_out(:,:,il) = transpose(reshape(vec_out(:,il),(/shp_out(2),shp_out(1)/)))
3325  else
3326  array_out(:,:,il) = reshape(vec_out(:,il),shp_out(1:2))
3327  end if
3328  end do
3329 # 702 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3330 
3331 ! Probe out
3332 
3333 
3334 end subroutine bint_apply_logical_r3_r3
3335 # 708 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3336 # 709 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3337 # 710 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3338 
3339 # 712 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3340 !----------------------------------------------------------------------
3341 ! Subroutine: bint_apply_interp_int
3342 !> Low-level routine to apply the interpolation to a single field on a single level
3343 !----------------------------------------------------------------------
3344 subroutine bint_apply_interp_int(bint,array_in,array_out,nn)
3345 
3346 implicit none
3347 
3348 ! Passed variables
3349 class(bump_interpolator),intent(inout) :: bint !< BUMP interpolator
3350 integer(kind_int),intent(in) :: array_in(bint%bump%geom%nc0a,bint%bump%geom%nl0) !< Input field
3351 integer(kind_int),intent(out) :: array_out(bint%nouta,bint%bump%geom%nl0) !< Output field
3352 logical,intent(in),optional :: nn !< Nearest neighbor interpolation
3353 
3354 ! Local variables
3355 
3356 integer(kind_int),allocatable :: array_in_ext(:,:)
3357 logical :: lnn
3358 
3359 ! Set name
3360 
3361 
3362 ! Get instance
3363 
3364 
3365 ! Probe in
3366 
3367 
3368 ! Local flag
3369 lnn = .false.
3370 if (present(nn)) lnn = nn
3371 
3372 ! Allocation
3373 allocate(array_in_ext(bint%nc0b,bint%bump%geom%nl0))
3374 
3375 ! Halo extension
3376 call bint%com%ext(bint%bump%mpl,array_in,array_in_ext)
3377 
3378 if (bint%nouta > 0) then
3379 # 764 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3380  ! Copy nearest neighbor
3381  array_out = array_in_ext(bint%nn_index,:)
3382 # 767 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3383 end if
3384 
3385 ! Release memory
3386 deallocate(array_in_ext)
3387 
3388 ! Probe out
3389 
3390 
3391 end subroutine bint_apply_interp_int
3392 # 712 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3393 !----------------------------------------------------------------------
3394 ! Subroutine: bint_apply_interp_real
3395 !> Low-level routine to apply the interpolation to a single field on a single level
3396 !----------------------------------------------------------------------
3397 subroutine bint_apply_interp_real(bint,array_in,array_out,nn)
3398 
3399 implicit none
3400 
3401 ! Passed variables
3402 class(bump_interpolator),intent(inout) :: bint !< BUMP interpolator
3403 real(kind_real),intent(in) :: array_in(bint%bump%geom%nc0a,bint%bump%geom%nl0) !< Input field
3404 real(kind_real),intent(out) :: array_out(bint%nouta,bint%bump%geom%nl0) !< Output field
3405 logical,intent(in),optional :: nn !< Nearest neighbor interpolation
3406 
3407 ! Local variables
3408  integer :: ilev
3409 real(kind_real),allocatable :: array_in_ext(:,:)
3410 logical :: lnn
3411 
3412 ! Set name
3413 
3414 
3415 ! Get instance
3416 
3417 
3418 ! Probe in
3419 
3420 
3421 ! Local flag
3422 lnn = .false.
3423 if (present(nn)) lnn = nn
3424 
3425 ! Allocation
3426 allocate(array_in_ext(bint%nc0b,bint%bump%geom%nl0))
3427 
3428 ! Halo extension
3429 call bint%com%ext(bint%bump%mpl,array_in,array_in_ext)
3430 
3431 if (bint%nouta > 0) then
3432 # 752 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3433  if (lnn) then
3434  ! Copy nearest neighbor
3435  array_out = array_in_ext(bint%nn_index,:)
3436  else
3437  ! Horizontal interpolation
3438  !$omp parallel do schedule(static) private(ilev)
3439  do ilev=1,bint%bump%geom%nl0
3440  call bint%h%apply(bint%bump%mpl,array_in_ext(:,ilev),array_out(:,ilev))
3441  end do
3442  !$omp end parallel do
3443  end if
3444 # 767 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3445 end if
3446 
3447 ! Release memory
3448 deallocate(array_in_ext)
3449 
3450 ! Probe out
3451 
3452 
3453 end subroutine bint_apply_interp_real
3454 # 712 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3455 !----------------------------------------------------------------------
3456 ! Subroutine: bint_apply_interp_logical
3457 !> Low-level routine to apply the interpolation to a single field on a single level
3458 !----------------------------------------------------------------------
3459 subroutine bint_apply_interp_logical(bint,array_in,array_out,nn)
3460 
3461 implicit none
3462 
3463 ! Passed variables
3464 class(bump_interpolator),intent(inout) :: bint !< BUMP interpolator
3465 logical,intent(in) :: array_in(bint%bump%geom%nc0a,bint%bump%geom%nl0) !< Input field
3466 logical,intent(out) :: array_out(bint%nouta,bint%bump%geom%nl0) !< Output field
3467 logical,intent(in),optional :: nn !< Nearest neighbor interpolation
3468 
3469 ! Local variables
3470 
3471 logical,allocatable :: array_in_ext(:,:)
3472 logical :: lnn
3473 
3474 ! Set name
3475 
3476 
3477 ! Get instance
3478 
3479 
3480 ! Probe in
3481 
3482 
3483 ! Local flag
3484 lnn = .false.
3485 if (present(nn)) lnn = nn
3486 
3487 ! Allocation
3488 allocate(array_in_ext(bint%nc0b,bint%bump%geom%nl0))
3489 
3490 ! Halo extension
3491 call bint%com%ext(bint%bump%mpl,array_in,array_in_ext)
3492 
3493 if (bint%nouta > 0) then
3494 # 764 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3495  ! Copy nearest neighbor
3496  array_out = array_in_ext(bint%nn_index,:)
3497 # 767 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3498 end if
3499 
3500 ! Release memory
3501 deallocate(array_in_ext)
3502 
3503 ! Probe out
3504 
3505 
3506 end subroutine bint_apply_interp_logical
3507 # 777 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3508 
3509 !----------------------------------------------------------------------
3510 !> Apply interpolator operator adjoint
3511 !! The caller can optionally pass this arguement as an empty fieldset and the
3512 !! routine will create and allocate each component of the fieldset. Or, if
3513 !! the field components of the fieldset are already allocated by the caller,
3514 !! then this routine will merely replace the field values with the result
3515 !! of the computation.
3516 !----------------------------------------------------------------------
3517 subroutine bint_apply_ad(bint,fieldset_out,fieldset_in)
3518 
3519 implicit none
3520 
3521 ! Passed variables
3522 class(bump_interpolator),intent(inout) :: bint !< BUMP interpolator
3523 type(fieldset_type),intent(in) :: fieldset_out !< Fields on the second grid, i.e. the target grid of the original interpolation. For the adjoint, these fields are treated as an input.
3524 type(fieldset_type),intent(inout) :: fieldset_in !< Fields defined on the first grid, i.e. the source grid of the original interpolation. For the adjoint, these are treated as an output.
3525 
3526 ! Local variables
3527 integer :: ifield
3528 real(kind_real),allocatable :: array_in_mga(:,:),array_in_c0a(:,:),array_out(:,:)
3529 character(len=max_string) :: fieldname
3530 type(atlas_field) :: afield_in,afield_out
3531 
3532 ! Set name
3533 
3534 
3535 ! Get instance
3536 
3537 
3538 ! Probe in
3539 
3540 
3541 ! Allocation
3542 allocate(array_in_mga(bint%bump%geom%nmga,bint%bump%geom%nl0))
3543 if (.not.bint%bump%geom%same_grid) allocate(array_in_c0a(bint%bump%geom%nc0a,bint%bump%geom%nl0))
3544 allocate(array_out(bint%nouta,bint%bump%geom%nl0))
3545 
3546 do ifield=1,fieldset_out%size()
3547  ! Copy field and field name
3548  afield_out = fieldset_out%field(ifield)
3549  fieldname = afield_out%name()
3550 
3551  ! Allocation
3552  if (fieldset_in%has_field(fieldname)) then
3553  afield_in = fieldset_in%field(name=fieldname)
3554  else
3555  afield_in = bint%afunctionspace_in%create_field(name=fieldname,kind=atlas_real(kind_real),levels=bint%bump%geom%nl0)
3556  call fieldset_in%add(afield_in)
3557  end if
3558 
3559  ! ATLAS field to BUMP array
3560  call field_to_array(afield_out,bint%bump%mpl,array_out)
3561  if (bint%bump%geom%same_grid) then
3562  ! Apply interpolation operator adjoint
3563  call bint%apply_interp_ad(array_out,array_in_mga)
3564  else
3565  ! Apply interpolation operator adjoint
3566  call bint%apply_interp_ad(array_out,array_in_c0a)
3567 
3568  ! Subset Sc0 to model grid
3569  call bint%bump%geom%copy_c0a_to_mga(bint%bump%mpl,array_in_c0a,array_in_mga)
3570  end if
3571 
3572  ! BUMP array to ATLAS field
3573  call field_from_array(afield_in,bint%bump%mpl,array_in_mga)
3574 
3575  ! Release pointers
3576  call afield_in%final()
3577  call afield_out%final()
3578 end do
3579 
3580 ! Release memory
3581 deallocate(array_in_mga)
3582 if (.not.bint%bump%geom%same_grid) deallocate(array_in_c0a)
3583 deallocate(array_out)
3584 
3585 ! Probe out
3586 
3587 
3588 end subroutine bint_apply_ad
3589 
3590 # 860 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3591 # 861 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3592 !----------------------------------------------------------------------
3593 ! Subroutine: bint_apply_ad_r1_r1
3594 !> Apply interpolation operator adjoint
3595 !----------------------------------------------------------------------
3596 subroutine bint_apply_ad_r1_r1(bint,array_out,array_in,trans_out,trans_in)
3597 
3598 implicit none
3599 
3600 ! Passed variables
3601 class(bump_interpolator),intent(inout) :: bint !< BUMP interpolator
3602 real(kind_real),intent(in) :: array_out(:) !< Output array, the rightmost dimension being the vertical
3603 real(kind_real),intent(inout) :: array_in(:) !< Input array, the rightmost dimension being the vertical
3604 logical,intent(in),optional :: trans_out !< Output array should be transposed
3605 logical,intent(in),optional :: trans_in !< Input array should be transposed
3606 
3607 ! Local variables
3608 integer :: nl_in,nl_out
3609 integer :: shp_in(1)
3610 
3611 real(kind_real),allocatable :: vec_in(:,:),vec_in_tmp(:,:),vec_out(:,:)
3612 logical :: ltrans_in,ltrans_out
3613 
3614 ! Set name
3615 
3616 
3617 ! Get instance
3618 
3619 
3620 ! Probe in
3621 
3622 
3623 ! Local flags
3624 ltrans_out = .false.
3625 if (present(trans_out)) ltrans_out = trans_out
3626 ltrans_in = .false.
3627 if (present(trans_in)) ltrans_in = trans_in
3628 
3629 ! Get number of levels
3630 # 900 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3631  nl_out = 1
3632 # 908 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3633 # 909 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3634  nl_in = 1
3635 # 917 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3636 bint%bump%geom%nl0 = nl_in
3637 
3638 ! Allocation
3639 allocate(vec_out(bint%nouta,bint%bump%geom%nl0))
3640 if (.not.bint%bump%geom%same_grid) allocate(vec_in_tmp(bint%bump%geom%nc0a,bint%bump%geom%nl0))
3641 allocate(vec_in(bint%bump%geom%nmga,bint%bump%geom%nl0))
3642 
3643 ! Pack output data
3644  vec_out(:,1) = array_out
3645 # 933 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3646 # 942 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3647 
3648 ! Interpolate
3649 if (bint%bump%geom%same_grid) then
3650  call bint%apply_interp_ad(vec_out,vec_in)
3651 else
3652  call bint%apply_interp_ad(vec_out,vec_in_tmp)
3653  call bint%bump%geom%copy_c0a_to_mga(bint%bump%mpl,vec_in_tmp,vec_in)
3654 end if
3655 
3656 ! Unpack input data
3657 shp_in = shape(array_in)
3658  array_in = vec_in(:,1)
3659 # 961 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3660 # 970 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3661 
3662 ! Release memory
3663 deallocate(vec_out)
3664 if (.not.bint%bump%geom%same_grid) deallocate(vec_in_tmp)
3665 deallocate(vec_in)
3666 
3667 ! Probe out
3668 
3669 
3670 end subroutine bint_apply_ad_r1_r1
3671 # 861 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3672 !----------------------------------------------------------------------
3673 ! Subroutine: bint_apply_ad_r1_r2
3674 !> Apply interpolation operator adjoint
3675 !----------------------------------------------------------------------
3676 subroutine bint_apply_ad_r1_r2(bint,array_out,array_in,trans_out,trans_in)
3677 
3678 implicit none
3679 
3680 ! Passed variables
3681 class(bump_interpolator),intent(inout) :: bint !< BUMP interpolator
3682 real(kind_real),intent(in) :: array_out(:) !< Output array, the rightmost dimension being the vertical
3683 real(kind_real),intent(inout) :: array_in(:,:) !< Input array, the rightmost dimension being the vertical
3684 logical,intent(in),optional :: trans_out !< Output array should be transposed
3685 logical,intent(in),optional :: trans_in !< Input array should be transposed
3686 
3687 ! Local variables
3688 integer :: nl_in,nl_out
3689 integer :: shp_in(2)
3690 
3691 real(kind_real),allocatable :: vec_in(:,:),vec_in_tmp(:,:),vec_out(:,:)
3692 logical :: ltrans_in,ltrans_out
3693 
3694 ! Set name
3695 
3696 
3697 ! Get instance
3698 
3699 
3700 ! Probe in
3701 
3702 
3703 ! Local flags
3704 ltrans_out = .false.
3705 if (present(trans_out)) ltrans_out = trans_out
3706 ltrans_in = .false.
3707 if (present(trans_in)) ltrans_in = trans_in
3708 
3709 ! Get number of levels
3710 # 900 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3711  nl_out = 1
3712 # 908 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3713 # 911 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3714  if (ltrans_in) then
3715  nl_in = size(array_in,1)
3716  else
3717  nl_in = size(array_in,2)
3718  end if
3719 # 917 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3720 bint%bump%geom%nl0 = nl_in
3721 
3722 ! Allocation
3723 allocate(vec_out(bint%nouta,bint%bump%geom%nl0))
3724 if (.not.bint%bump%geom%same_grid) allocate(vec_in_tmp(bint%bump%geom%nc0a,bint%bump%geom%nl0))
3725 allocate(vec_in(bint%bump%geom%nmga,bint%bump%geom%nl0))
3726 
3727 ! Pack output data
3728  vec_out(:,1) = array_out
3729 # 933 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3730 # 942 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3731 
3732 ! Interpolate
3733 if (bint%bump%geom%same_grid) then
3734  call bint%apply_interp_ad(vec_out,vec_in)
3735 else
3736  call bint%apply_interp_ad(vec_out,vec_in_tmp)
3737  call bint%bump%geom%copy_c0a_to_mga(bint%bump%mpl,vec_in_tmp,vec_in)
3738 end if
3739 
3740 ! Unpack input data
3741 shp_in = shape(array_in)
3742 
3743 # 955 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3744  if (ltrans_in) then
3745  array_in = transpose(vec_in)
3746  else
3747  array_in = vec_in
3748  end if
3749 # 961 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3750 # 970 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3751 
3752 ! Release memory
3753 deallocate(vec_out)
3754 if (.not.bint%bump%geom%same_grid) deallocate(vec_in_tmp)
3755 deallocate(vec_in)
3756 
3757 ! Probe out
3758 
3759 
3760 end subroutine bint_apply_ad_r1_r2
3761 # 861 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3762 !----------------------------------------------------------------------
3763 ! Subroutine: bint_apply_ad_r1_r3
3764 !> Apply interpolation operator adjoint
3765 !----------------------------------------------------------------------
3766 subroutine bint_apply_ad_r1_r3(bint,array_out,array_in,trans_out,trans_in)
3767 
3768 implicit none
3769 
3770 ! Passed variables
3771 class(bump_interpolator),intent(inout) :: bint !< BUMP interpolator
3772 real(kind_real),intent(in) :: array_out(:) !< Output array, the rightmost dimension being the vertical
3773 real(kind_real),intent(inout) :: array_in(:,:,:) !< Input array, the rightmost dimension being the vertical
3774 logical,intent(in),optional :: trans_out !< Output array should be transposed
3775 logical,intent(in),optional :: trans_in !< Input array should be transposed
3776 
3777 ! Local variables
3778 integer :: nl_in,nl_out
3779 integer :: shp_in(3)
3780  integer :: il
3781 real(kind_real),allocatable :: vec_in(:,:),vec_in_tmp(:,:),vec_out(:,:)
3782 logical :: ltrans_in,ltrans_out
3783 
3784 ! Set name
3785 
3786 
3787 ! Get instance
3788 
3789 
3790 ! Probe in
3791 
3792 
3793 ! Local flags
3794 ltrans_out = .false.
3795 if (present(trans_out)) ltrans_out = trans_out
3796 ltrans_in = .false.
3797 if (present(trans_in)) ltrans_in = trans_in
3798 
3799 ! Get number of levels
3800 # 900 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3801  nl_out = 1
3802 # 908 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3803 # 911 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3804  if (ltrans_in) then
3805  nl_in = size(array_in,1)
3806  else
3807  nl_in = size(array_in,3)
3808  end if
3809 # 917 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3810 bint%bump%geom%nl0 = nl_in
3811 
3812 ! Allocation
3813 allocate(vec_out(bint%nouta,bint%bump%geom%nl0))
3814 if (.not.bint%bump%geom%same_grid) allocate(vec_in_tmp(bint%bump%geom%nc0a,bint%bump%geom%nl0))
3815 allocate(vec_in(bint%bump%geom%nmga,bint%bump%geom%nl0))
3816 
3817 ! Pack output data
3818  vec_out(:,1) = array_out
3819 # 933 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3820 # 942 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3821 
3822 ! Interpolate
3823 if (bint%bump%geom%same_grid) then
3824  call bint%apply_interp_ad(vec_out,vec_in)
3825 else
3826  call bint%apply_interp_ad(vec_out,vec_in_tmp)
3827  call bint%bump%geom%copy_c0a_to_mga(bint%bump%mpl,vec_in_tmp,vec_in)
3828 end if
3829 
3830 ! Unpack input data
3831 shp_in = shape(array_in)
3832 
3833 # 961 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3834 # 962 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3835  do il=1,nl_in
3836  if (ltrans_in) then
3837  array_in(:,:,il) = transpose(reshape(vec_in(:,il),(/shp_in(2),shp_in(1)/)))
3838  else
3839  array_in(:,:,il) = reshape(vec_in(:,il),shp_in(1:2))
3840  end if
3841  end do
3842 # 970 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3843 
3844 ! Release memory
3845 deallocate(vec_out)
3846 if (.not.bint%bump%geom%same_grid) deallocate(vec_in_tmp)
3847 deallocate(vec_in)
3848 
3849 ! Probe out
3850 
3851 
3852 end subroutine bint_apply_ad_r1_r3
3853 # 981 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3854 # 860 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3855 # 861 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3856 !----------------------------------------------------------------------
3857 ! Subroutine: bint_apply_ad_r2_r1
3858 !> Apply interpolation operator adjoint
3859 !----------------------------------------------------------------------
3860 subroutine bint_apply_ad_r2_r1(bint,array_out,array_in,trans_out,trans_in)
3861 
3862 implicit none
3863 
3864 ! Passed variables
3865 class(bump_interpolator),intent(inout) :: bint !< BUMP interpolator
3866 real(kind_real),intent(in) :: array_out(:,:) !< Output array, the rightmost dimension being the vertical
3867 real(kind_real),intent(inout) :: array_in(:) !< Input array, the rightmost dimension being the vertical
3868 logical,intent(in),optional :: trans_out !< Output array should be transposed
3869 logical,intent(in),optional :: trans_in !< Input array should be transposed
3870 
3871 ! Local variables
3872 integer :: nl_in,nl_out
3873 integer :: shp_in(1)
3874 
3875 real(kind_real),allocatable :: vec_in(:,:),vec_in_tmp(:,:),vec_out(:,:)
3876 logical :: ltrans_in,ltrans_out
3877 
3878 ! Set name
3879 
3880 
3881 ! Get instance
3882 
3883 
3884 ! Probe in
3885 
3886 
3887 ! Local flags
3888 ltrans_out = .false.
3889 if (present(trans_out)) ltrans_out = trans_out
3890 ltrans_in = .false.
3891 if (present(trans_in)) ltrans_in = trans_in
3892 
3893 ! Get number of levels
3894 # 902 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3895  if (ltrans_out) then
3896  nl_out = size(array_out,1)
3897  else
3898  nl_out = size(array_out,2)
3899  end if
3900 # 908 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3901 # 909 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3902  nl_in = 1
3903 # 917 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3904 bint%bump%geom%nl0 = nl_in
3905 
3906 ! Allocation
3907 allocate(vec_out(bint%nouta,bint%bump%geom%nl0))
3908 if (.not.bint%bump%geom%same_grid) allocate(vec_in_tmp(bint%bump%geom%nc0a,bint%bump%geom%nl0))
3909 allocate(vec_in(bint%bump%geom%nmga,bint%bump%geom%nl0))
3910 
3911 ! Pack output data
3912 
3913 # 927 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3914  if (ltrans_out) then
3915  vec_out = transpose(array_out)
3916  else
3917  vec_out = array_out
3918  end if
3919 # 933 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3920 # 942 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3921 
3922 ! Interpolate
3923 if (bint%bump%geom%same_grid) then
3924  call bint%apply_interp_ad(vec_out,vec_in)
3925 else
3926  call bint%apply_interp_ad(vec_out,vec_in_tmp)
3927  call bint%bump%geom%copy_c0a_to_mga(bint%bump%mpl,vec_in_tmp,vec_in)
3928 end if
3929 
3930 ! Unpack input data
3931 shp_in = shape(array_in)
3932  array_in = vec_in(:,1)
3933 # 961 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3934 # 970 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3935 
3936 ! Release memory
3937 deallocate(vec_out)
3938 if (.not.bint%bump%geom%same_grid) deallocate(vec_in_tmp)
3939 deallocate(vec_in)
3940 
3941 ! Probe out
3942 
3943 
3944 end subroutine bint_apply_ad_r2_r1
3945 # 861 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3946 !----------------------------------------------------------------------
3947 ! Subroutine: bint_apply_ad_r2_r2
3948 !> Apply interpolation operator adjoint
3949 !----------------------------------------------------------------------
3950 subroutine bint_apply_ad_r2_r2(bint,array_out,array_in,trans_out,trans_in)
3951 
3952 implicit none
3953 
3954 ! Passed variables
3955 class(bump_interpolator),intent(inout) :: bint !< BUMP interpolator
3956 real(kind_real),intent(in) :: array_out(:,:) !< Output array, the rightmost dimension being the vertical
3957 real(kind_real),intent(inout) :: array_in(:,:) !< Input array, the rightmost dimension being the vertical
3958 logical,intent(in),optional :: trans_out !< Output array should be transposed
3959 logical,intent(in),optional :: trans_in !< Input array should be transposed
3960 
3961 ! Local variables
3962 integer :: nl_in,nl_out
3963 integer :: shp_in(2)
3964 
3965 real(kind_real),allocatable :: vec_in(:,:),vec_in_tmp(:,:),vec_out(:,:)
3966 logical :: ltrans_in,ltrans_out
3967 
3968 ! Set name
3969 
3970 
3971 ! Get instance
3972 
3973 
3974 ! Probe in
3975 
3976 
3977 ! Local flags
3978 ltrans_out = .false.
3979 if (present(trans_out)) ltrans_out = trans_out
3980 ltrans_in = .false.
3981 if (present(trans_in)) ltrans_in = trans_in
3982 
3983 ! Get number of levels
3984 # 902 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3985  if (ltrans_out) then
3986  nl_out = size(array_out,1)
3987  else
3988  nl_out = size(array_out,2)
3989  end if
3990 # 908 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3991 # 911 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3992  if (ltrans_in) then
3993  nl_in = size(array_in,1)
3994  else
3995  nl_in = size(array_in,2)
3996  end if
3997 # 917 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
3998 bint%bump%geom%nl0 = nl_in
3999 
4000 ! Allocation
4001 allocate(vec_out(bint%nouta,bint%bump%geom%nl0))
4002 if (.not.bint%bump%geom%same_grid) allocate(vec_in_tmp(bint%bump%geom%nc0a,bint%bump%geom%nl0))
4003 allocate(vec_in(bint%bump%geom%nmga,bint%bump%geom%nl0))
4004 
4005 ! Pack output data
4006 
4007 # 927 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
4008  if (ltrans_out) then
4009  vec_out = transpose(array_out)
4010  else
4011  vec_out = array_out
4012  end if
4013 # 933 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
4014 # 942 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
4015 
4016 ! Interpolate
4017 if (bint%bump%geom%same_grid) then
4018  call bint%apply_interp_ad(vec_out,vec_in)
4019 else
4020  call bint%apply_interp_ad(vec_out,vec_in_tmp)
4021  call bint%bump%geom%copy_c0a_to_mga(bint%bump%mpl,vec_in_tmp,vec_in)
4022 end if
4023 
4024 ! Unpack input data
4025 shp_in = shape(array_in)
4026 
4027 # 955 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
4028  if (ltrans_in) then
4029  array_in = transpose(vec_in)
4030  else
4031  array_in = vec_in
4032  end if
4033 # 961 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
4034 # 970 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
4035 
4036 ! Release memory
4037 deallocate(vec_out)
4038 if (.not.bint%bump%geom%same_grid) deallocate(vec_in_tmp)
4039 deallocate(vec_in)
4040 
4041 ! Probe out
4042 
4043 
4044 end subroutine bint_apply_ad_r2_r2
4045 # 861 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
4046 !----------------------------------------------------------------------
4047 ! Subroutine: bint_apply_ad_r2_r3
4048 !> Apply interpolation operator adjoint
4049 !----------------------------------------------------------------------
4050 subroutine bint_apply_ad_r2_r3(bint,array_out,array_in,trans_out,trans_in)
4051 
4052 implicit none
4053 
4054 ! Passed variables
4055 class(bump_interpolator),intent(inout) :: bint !< BUMP interpolator
4056 real(kind_real),intent(in) :: array_out(:,:) !< Output array, the rightmost dimension being the vertical
4057 real(kind_real),intent(inout) :: array_in(:,:,:) !< Input array, the rightmost dimension being the vertical
4058 logical,intent(in),optional :: trans_out !< Output array should be transposed
4059 logical,intent(in),optional :: trans_in !< Input array should be transposed
4060 
4061 ! Local variables
4062 integer :: nl_in,nl_out
4063 integer :: shp_in(3)
4064  integer :: il
4065 real(kind_real),allocatable :: vec_in(:,:),vec_in_tmp(:,:),vec_out(:,:)
4066 logical :: ltrans_in,ltrans_out
4067 
4068 ! Set name
4069 
4070 
4071 ! Get instance
4072 
4073 
4074 ! Probe in
4075 
4076 
4077 ! Local flags
4078 ltrans_out = .false.
4079 if (present(trans_out)) ltrans_out = trans_out
4080 ltrans_in = .false.
4081 if (present(trans_in)) ltrans_in = trans_in
4082 
4083 ! Get number of levels
4084 # 902 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
4085  if (ltrans_out) then
4086  nl_out = size(array_out,1)
4087  else
4088  nl_out = size(array_out,2)
4089  end if
4090 # 908 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
4091 # 911 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
4092  if (ltrans_in) then
4093  nl_in = size(array_in,1)
4094  else
4095  nl_in = size(array_in,3)
4096  end if
4097 # 917 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
4098 bint%bump%geom%nl0 = nl_in
4099 
4100 ! Allocation
4101 allocate(vec_out(bint%nouta,bint%bump%geom%nl0))
4102 if (.not.bint%bump%geom%same_grid) allocate(vec_in_tmp(bint%bump%geom%nc0a,bint%bump%geom%nl0))
4103 allocate(vec_in(bint%bump%geom%nmga,bint%bump%geom%nl0))
4104 
4105 ! Pack output data
4106 
4107 # 927 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
4108  if (ltrans_out) then
4109  vec_out = transpose(array_out)
4110  else
4111  vec_out = array_out
4112  end if
4113 # 933 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
4114 # 942 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
4115 
4116 ! Interpolate
4117 if (bint%bump%geom%same_grid) then
4118  call bint%apply_interp_ad(vec_out,vec_in)
4119 else
4120  call bint%apply_interp_ad(vec_out,vec_in_tmp)
4121  call bint%bump%geom%copy_c0a_to_mga(bint%bump%mpl,vec_in_tmp,vec_in)
4122 end if
4123 
4124 ! Unpack input data
4125 shp_in = shape(array_in)
4126 
4127 # 961 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
4128 # 962 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
4129  do il=1,nl_in
4130  if (ltrans_in) then
4131  array_in(:,:,il) = transpose(reshape(vec_in(:,il),(/shp_in(2),shp_in(1)/)))
4132  else
4133  array_in(:,:,il) = reshape(vec_in(:,il),shp_in(1:2))
4134  end if
4135  end do
4136 # 970 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
4137 
4138 ! Release memory
4139 deallocate(vec_out)
4140 if (.not.bint%bump%geom%same_grid) deallocate(vec_in_tmp)
4141 deallocate(vec_in)
4142 
4143 ! Probe out
4144 
4145 
4146 end subroutine bint_apply_ad_r2_r3
4147 # 981 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
4148 # 860 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
4149 # 861 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
4150 !----------------------------------------------------------------------
4151 ! Subroutine: bint_apply_ad_r3_r1
4152 !> Apply interpolation operator adjoint
4153 !----------------------------------------------------------------------
4154 subroutine bint_apply_ad_r3_r1(bint,array_out,array_in,trans_out,trans_in)
4155 
4156 implicit none
4157 
4158 ! Passed variables
4159 class(bump_interpolator),intent(inout) :: bint !< BUMP interpolator
4160 real(kind_real),intent(in) :: array_out(:,:,:) !< Output array, the rightmost dimension being the vertical
4161 real(kind_real),intent(inout) :: array_in(:) !< Input array, the rightmost dimension being the vertical
4162 logical,intent(in),optional :: trans_out !< Output array should be transposed
4163 logical,intent(in),optional :: trans_in !< Input array should be transposed
4164 
4165 ! Local variables
4166 integer :: nl_in,nl_out
4167 integer :: shp_in(1)
4168  integer :: il
4169 real(kind_real),allocatable :: vec_in(:,:),vec_in_tmp(:,:),vec_out(:,:)
4170 logical :: ltrans_in,ltrans_out
4171 
4172 ! Set name
4173 
4174 
4175 ! Get instance
4176 
4177 
4178 ! Probe in
4179 
4180 
4181 ! Local flags
4182 ltrans_out = .false.
4183 if (present(trans_out)) ltrans_out = trans_out
4184 ltrans_in = .false.
4185 if (present(trans_in)) ltrans_in = trans_in
4186 
4187 ! Get number of levels
4188 # 902 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
4189  if (ltrans_out) then
4190  nl_out = size(array_out,1)
4191  else
4192  nl_out = size(array_out,3)
4193  end if
4194 # 908 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
4195 # 909 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
4196  nl_in = 1
4197 # 917 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
4198 bint%bump%geom%nl0 = nl_in
4199 
4200 ! Allocation
4201 allocate(vec_out(bint%nouta,bint%bump%geom%nl0))
4202 if (.not.bint%bump%geom%same_grid) allocate(vec_in_tmp(bint%bump%geom%nc0a,bint%bump%geom%nl0))
4203 allocate(vec_in(bint%bump%geom%nmga,bint%bump%geom%nl0))
4204 
4205 ! Pack output data
4206 
4207 # 933 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
4208 # 934 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
4209  do il=1,nl_out
4210  if (ltrans_out) then
4211  vec_out(:,il) = reshape(transpose(array_out(:,:,il)),(/bint%nouta/))
4212  else
4213  vec_out(:,il) = reshape(array_out(:,:,il),(/bint%nouta/))
4214  end if
4215  end do
4216 # 942 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
4217 
4218 ! Interpolate
4219 if (bint%bump%geom%same_grid) then
4220  call bint%apply_interp_ad(vec_out,vec_in)
4221 else
4222  call bint%apply_interp_ad(vec_out,vec_in_tmp)
4223  call bint%bump%geom%copy_c0a_to_mga(bint%bump%mpl,vec_in_tmp,vec_in)
4224 end if
4225 
4226 ! Unpack input data
4227 shp_in = shape(array_in)
4228  array_in = vec_in(:,1)
4229 # 961 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
4230 # 970 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
4231 
4232 ! Release memory
4233 deallocate(vec_out)
4234 if (.not.bint%bump%geom%same_grid) deallocate(vec_in_tmp)
4235 deallocate(vec_in)
4236 
4237 ! Probe out
4238 
4239 
4240 end subroutine bint_apply_ad_r3_r1
4241 # 861 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
4242 !----------------------------------------------------------------------
4243 ! Subroutine: bint_apply_ad_r3_r2
4244 !> Apply interpolation operator adjoint
4245 !----------------------------------------------------------------------
4246 subroutine bint_apply_ad_r3_r2(bint,array_out,array_in,trans_out,trans_in)
4247 
4248 implicit none
4249 
4250 ! Passed variables
4251 class(bump_interpolator),intent(inout) :: bint !< BUMP interpolator
4252 real(kind_real),intent(in) :: array_out(:,:,:) !< Output array, the rightmost dimension being the vertical
4253 real(kind_real),intent(inout) :: array_in(:,:) !< Input array, the rightmost dimension being the vertical
4254 logical,intent(in),optional :: trans_out !< Output array should be transposed
4255 logical,intent(in),optional :: trans_in !< Input array should be transposed
4256 
4257 ! Local variables
4258 integer :: nl_in,nl_out
4259 integer :: shp_in(2)
4260  integer :: il
4261 real(kind_real),allocatable :: vec_in(:,:),vec_in_tmp(:,:),vec_out(:,:)
4262 logical :: ltrans_in,ltrans_out
4263 
4264 ! Set name
4265 
4266 
4267 ! Get instance
4268 
4269 
4270 ! Probe in
4271 
4272 
4273 ! Local flags
4274 ltrans_out = .false.
4275 if (present(trans_out)) ltrans_out = trans_out
4276 ltrans_in = .false.
4277 if (present(trans_in)) ltrans_in = trans_in
4278 
4279 ! Get number of levels
4280 # 902 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
4281  if (ltrans_out) then
4282  nl_out = size(array_out,1)
4283  else
4284  nl_out = size(array_out,3)
4285  end if
4286 # 908 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
4287 # 911 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
4288  if (ltrans_in) then
4289  nl_in = size(array_in,1)
4290  else
4291  nl_in = size(array_in,2)
4292  end if
4293 # 917 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
4294 bint%bump%geom%nl0 = nl_in
4295 
4296 ! Allocation
4297 allocate(vec_out(bint%nouta,bint%bump%geom%nl0))
4298 if (.not.bint%bump%geom%same_grid) allocate(vec_in_tmp(bint%bump%geom%nc0a,bint%bump%geom%nl0))
4299 allocate(vec_in(bint%bump%geom%nmga,bint%bump%geom%nl0))
4300 
4301 ! Pack output data
4302 
4303 # 933 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
4304 # 934 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
4305  do il=1,nl_out
4306  if (ltrans_out) then
4307  vec_out(:,il) = reshape(transpose(array_out(:,:,il)),(/bint%nouta/))
4308  else
4309  vec_out(:,il) = reshape(array_out(:,:,il),(/bint%nouta/))
4310  end if
4311  end do
4312 # 942 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
4313 
4314 ! Interpolate
4315 if (bint%bump%geom%same_grid) then
4316  call bint%apply_interp_ad(vec_out,vec_in)
4317 else
4318  call bint%apply_interp_ad(vec_out,vec_in_tmp)
4319  call bint%bump%geom%copy_c0a_to_mga(bint%bump%mpl,vec_in_tmp,vec_in)
4320 end if
4321 
4322 ! Unpack input data
4323 shp_in = shape(array_in)
4324 
4325 # 955 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
4326  if (ltrans_in) then
4327  array_in = transpose(vec_in)
4328  else
4329  array_in = vec_in
4330  end if
4331 # 961 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
4332 # 970 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
4333 
4334 ! Release memory
4335 deallocate(vec_out)
4336 if (.not.bint%bump%geom%same_grid) deallocate(vec_in_tmp)
4337 deallocate(vec_in)
4338 
4339 ! Probe out
4340 
4341 
4342 end subroutine bint_apply_ad_r3_r2
4343 # 861 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
4344 !----------------------------------------------------------------------
4345 ! Subroutine: bint_apply_ad_r3_r3
4346 !> Apply interpolation operator adjoint
4347 !----------------------------------------------------------------------
4348 subroutine bint_apply_ad_r3_r3(bint,array_out,array_in,trans_out,trans_in)
4349 
4350 implicit none
4351 
4352 ! Passed variables
4353 class(bump_interpolator),intent(inout) :: bint !< BUMP interpolator
4354 real(kind_real),intent(in) :: array_out(:,:,:) !< Output array, the rightmost dimension being the vertical
4355 real(kind_real),intent(inout) :: array_in(:,:,:) !< Input array, the rightmost dimension being the vertical
4356 logical,intent(in),optional :: trans_out !< Output array should be transposed
4357 logical,intent(in),optional :: trans_in !< Input array should be transposed
4358 
4359 ! Local variables
4360 integer :: nl_in,nl_out
4361 integer :: shp_in(3)
4362  integer :: il
4363 real(kind_real),allocatable :: vec_in(:,:),vec_in_tmp(:,:),vec_out(:,:)
4364 logical :: ltrans_in,ltrans_out
4365 
4366 ! Set name
4367 
4368 
4369 ! Get instance
4370 
4371 
4372 ! Probe in
4373 
4374 
4375 ! Local flags
4376 ltrans_out = .false.
4377 if (present(trans_out)) ltrans_out = trans_out
4378 ltrans_in = .false.
4379 if (present(trans_in)) ltrans_in = trans_in
4380 
4381 ! Get number of levels
4382 # 902 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
4383  if (ltrans_out) then
4384  nl_out = size(array_out,1)
4385  else
4386  nl_out = size(array_out,3)
4387  end if
4388 # 908 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
4389 # 911 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
4390  if (ltrans_in) then
4391  nl_in = size(array_in,1)
4392  else
4393  nl_in = size(array_in,3)
4394  end if
4395 # 917 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
4396 bint%bump%geom%nl0 = nl_in
4397 
4398 ! Allocation
4399 allocate(vec_out(bint%nouta,bint%bump%geom%nl0))
4400 if (.not.bint%bump%geom%same_grid) allocate(vec_in_tmp(bint%bump%geom%nc0a,bint%bump%geom%nl0))
4401 allocate(vec_in(bint%bump%geom%nmga,bint%bump%geom%nl0))
4402 
4403 ! Pack output data
4404 
4405 # 933 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
4406 # 934 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
4407  do il=1,nl_out
4408  if (ltrans_out) then
4409  vec_out(:,il) = reshape(transpose(array_out(:,:,il)),(/bint%nouta/))
4410  else
4411  vec_out(:,il) = reshape(array_out(:,:,il),(/bint%nouta/))
4412  end if
4413  end do
4414 # 942 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
4415 
4416 ! Interpolate
4417 if (bint%bump%geom%same_grid) then
4418  call bint%apply_interp_ad(vec_out,vec_in)
4419 else
4420  call bint%apply_interp_ad(vec_out,vec_in_tmp)
4421  call bint%bump%geom%copy_c0a_to_mga(bint%bump%mpl,vec_in_tmp,vec_in)
4422 end if
4423 
4424 ! Unpack input data
4425 shp_in = shape(array_in)
4426 
4427 # 961 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
4428 # 962 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
4429  do il=1,nl_in
4430  if (ltrans_in) then
4431  array_in(:,:,il) = transpose(reshape(vec_in(:,il),(/shp_in(2),shp_in(1)/)))
4432  else
4433  array_in(:,:,il) = reshape(vec_in(:,il),shp_in(1:2))
4434  end if
4435  end do
4436 # 970 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
4437 
4438 ! Release memory
4439 deallocate(vec_out)
4440 if (.not.bint%bump%geom%same_grid) deallocate(vec_in_tmp)
4441 deallocate(vec_in)
4442 
4443 ! Probe out
4444 
4445 
4446 end subroutine bint_apply_ad_r3_r3
4447 # 981 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
4448 # 982 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/interpolation/interpolatorbump_mod.fypp"
4449 
4450 !----------------------------------------------------------------------
4451 ! Subroutine: bint_apply_interp_ad
4452 !> Low-level routine to apply the adjoint of the interpolation operator
4453 !! to a single field on a single level
4454 !----------------------------------------------------------------------
4455 subroutine bint_apply_interp_ad(bint,array_out,array_in)
4456 
4457 implicit none
4458 
4459 ! Passed variables
4460 class(bump_interpolator),intent(inout) :: bint !< BUMP interpolator
4461 real(kind_real),intent(in) :: array_out(bint%nouta,bint%bump%geom%nl0) !< Field on input grid
4462 real(kind_real),intent(out) :: array_in(bint%bump%geom%nc0a,bint%bump%geom%nl0) !< Field on output grid
4463 
4464 ! Local variables
4465 integer :: ilev
4466 real(kind_real) :: array_in_ext(bint%nc0b,bint%bump%geom%nl0)
4467 
4468 ! Set name
4469 
4470 
4471 ! Get instance
4472 
4473 
4474 ! Probe in
4475 
4476 
4477 if (bint%nouta > 0) then
4478  ! Horizontal interpolation
4479  !$omp parallel do schedule(static) private(ilev)
4480  do ilev=1,bint%bump%geom%nl0
4481  call bint%h%apply_ad(bint%bump%mpl,array_out(:,ilev),array_in_ext(:,ilev))
4482  end do
4483  !$omp end parallel do
4484 else
4485  ! No output point on this task
4486  array_in_ext = zero
4487 end if
4488 
4489 ! Halo reduction
4490 call bint%com%red(bint%bump%mpl,array_in_ext,array_in)
4491 
4492 ! Probe out
4493 
4494 
4495 end subroutine bint_apply_interp_ad
4496 
4497 !----------------------------------------------------------------------
4498 ! Subroutine: bint_deallocate_outgrid
4499 !> Release memory (partial) by deallocating output grid
4500 !----------------------------------------------------------------------
4501 subroutine bint_deallocate_outgrid(bint)
4502 
4503 implicit none
4504 
4505 ! Passed variables
4506 class(bump_interpolator),intent(inout) :: bint !< BUMP interpolator
4507 
4508 ! Set name
4509 
4510 
4511 ! Get instance
4512 
4513 
4514 ! Probe in
4515 
4516 
4517 ! Release memory
4518 call bint%geom_out%dealloc()
4519 
4520 ! Probe out
4521 
4522 
4523 end subroutine bint_deallocate_outgrid
4524 
4525 !----------------------------------------------------------------------
4526 ! Subroutine: bint_delete
4527 !> Release all memory
4528 !----------------------------------------------------------------------
4529 subroutine bint_delete(bint)
4530 
4531 implicit none
4532 
4533 ! Passed variables
4534 class(bump_interpolator),intent(inout) :: bint !< BUMP interpolator
4535 
4536 ! Set name
4537 
4538 
4539 ! Get instance
4540 
4541 
4542 ! Probe in
4543 
4544 
4545 ! Release memory
4546 call bint%deallocate_outgrid()
4547 call bint%h%dealloc()
4548 call bint%com%dealloc()
4549 call bint%bump%dealloc()
4550 
4551 ! Probe out
4552 
4553 
4554 ! Release probe instance
4555 
4556 
4557 end subroutine bint_delete
4558 
4559 !----------------------------------------------------------------------
4560 ! Subroutine: bint_dummy_final
4561 !> Dummy finalization
4562 !----------------------------------------------------------------------
4563 subroutine bint_dummy_final(bint)
4564 
4565 implicit none
4566 
4567 ! Passed variables
4568 type(bump_interpolator),intent(inout) :: bint !< BUMP interpolator
4569 
4570 ! Set name
4571 
4572 
4573 ! Get instance
4574 
4575 
4576 ! Probe in
4577 
4578 
4579 ! Dummy action to avoid compiler warning
4580 bint%dummy_logical = .false.
4581 
4582 ! Probe out
4583 
4584 
4585 end subroutine bint_dummy_final
4586 
4587 end module interpolatorbump_mod
Generic ranks, dimensions and types.
integer, parameter max_string
Maximum string size.
subroutine bint_apply_real_r1_r2(bint, array_in, array_out, trans_in, trans_out, nn)
Apply interpolation.
subroutine bint_dummy_final(bint)
Dummy finalization.
subroutine bint_apply_ad_r3_r3(bint, array_out, array_in, trans_out, trans_in)
Apply interpolation operator adjoint.
subroutine bint_apply_logical_r1_r3(bint, array_in, array_out, trans_in, trans_out, nn)
Apply interpolation.
subroutine bint_apply_int_r1_r1(bint, array_in, array_out, trans_in, trans_out, nn)
Apply interpolation.
subroutine bint_driver(bint, mpl, nam, geom)
Initialize BUMP to perform interpolation.
subroutine bint_apply_int_r2_r2(bint, array_in, array_out, trans_in, trans_out, nn)
Apply interpolation.
subroutine bint_delete(bint)
Release all memory.
subroutine bint_apply_ad_r1_r3(bint, array_out, array_in, trans_out, trans_in)
Apply interpolation operator adjoint.
subroutine bint_apply_int_r2_r3(bint, array_in, array_out, trans_in, trans_out, nn)
Apply interpolation.
subroutine bint_apply_interp_int(bint, array_in, array_out, nn)
Low-level routine to apply the interpolation to a single field on a single level.
subroutine bint_apply_ad_r3_r1(bint, array_out, array_in, trans_out, trans_in)
Apply interpolation operator adjoint.
subroutine bint_apply_real_r3_r1(bint, array_in, array_out, trans_in, trans_out, nn)
Apply interpolation.
subroutine bint_apply_logical_r2_r2(bint, array_in, array_out, trans_in, trans_out, nn)
Apply interpolation.
subroutine bint_apply_int_r3_r2(bint, array_in, array_out, trans_in, trans_out, nn)
Apply interpolation.
subroutine bint_apply_real_r2_r3(bint, array_in, array_out, trans_in, trans_out, nn)
Apply interpolation.
subroutine bint_apply_logical_r3_r1(bint, array_in, array_out, trans_in, trans_out, nn)
Apply interpolation.
subroutine bint_apply_ad_r1_r1(bint, array_out, array_in, trans_out, trans_in)
Apply interpolation operator adjoint.
subroutine bint_apply_int_r1_r3(bint, array_in, array_out, trans_in, trans_out, nn)
Apply interpolation.
subroutine bint_apply_logical_r1_r1(bint, array_in, array_out, trans_in, trans_out, nn)
Apply interpolation.
subroutine bint_apply_logical_r2_r3(bint, array_in, array_out, trans_in, trans_out, nn)
Apply interpolation.
subroutine bint_apply_ad_r2_r3(bint, array_out, array_in, trans_out, trans_in)
Apply interpolation operator adjoint.
subroutine bint_apply(bint, fieldset_in, fieldset_out)
Apply interpolation If the fields that constitute the fieldset are not already allocated by the calle...
subroutine bint_apply_interp_logical(bint, array_in, array_out, nn)
Low-level routine to apply the interpolation to a single field on a single level.
subroutine bint_apply_logical_r3_r2(bint, array_in, array_out, trans_in, trans_out, nn)
Apply interpolation.
subroutine bint_apply_ad(bint, fieldset_out, fieldset_in)
Apply interpolator operator adjoint The caller can optionally pass this arguement as an empty fieldse...
subroutine bint_apply_ad_r2_r1(bint, array_out, array_in, trans_out, trans_in)
Apply interpolation operator adjoint.
subroutine bint_apply_int_r3_r1(bint, array_in, array_out, trans_in, trans_out, nn)
Apply interpolation.
subroutine bint_apply_int_r3_r3(bint, array_in, array_out, trans_in, trans_out, nn)
Apply interpolation.
subroutine bint_apply_ad_r3_r2(bint, array_out, array_in, trans_out, trans_in)
Apply interpolation operator adjoint.
subroutine bint_apply_logical_r1_r2(bint, array_in, array_out, trans_in, trans_out, nn)
Apply interpolation.
subroutine bint_apply_int_r2_r1(bint, array_in, array_out, trans_in, trans_out, nn)
Apply interpolation.
subroutine bint_deallocate_outgrid(bint)
Release memory (partial) by deallocating output grid.
subroutine bint_apply_real_r1_r3(bint, array_in, array_out, trans_in, trans_out, nn)
Apply interpolation.
subroutine bint_apply_logical_r3_r3(bint, array_in, array_out, trans_in, trans_out, nn)
Apply interpolation.
subroutine bint_apply_interp_real(bint, array_in, array_out, nn)
Low-level routine to apply the interpolation to a single field on a single level.
subroutine bint_apply_logical_r2_r1(bint, array_in, array_out, trans_in, trans_out, nn)
Apply interpolation.
subroutine bint_apply_ad_r1_r2(bint, array_out, array_in, trans_out, trans_in)
Apply interpolation operator adjoint.
subroutine bint_apply_real_r3_r2(bint, array_in, array_out, trans_in, trans_out, nn)
Apply interpolation.
subroutine bint_apply_ad_r2_r2(bint, array_out, array_in, trans_out, trans_in)
Apply interpolation operator adjoint.
subroutine bint_apply_real_r2_r2(bint, array_in, array_out, trans_in, trans_out, nn)
Apply interpolation.
subroutine bint_apply_int_r1_r2(bint, array_in, array_out, trans_in, trans_out, nn)
Apply interpolation.
subroutine bint_apply_interp_ad(bint, array_out, array_in)
Low-level routine to apply the adjoint of the interpolation operator to a single field on a single le...
subroutine bint_apply_real_r1_r1(bint, array_in, array_out, trans_in, trans_out, nn)
Apply interpolation.
subroutine bint_init(bint, comm, lon1d_in, lat1d_in, lon_in, lat_in, afunctionspace_in, lon1d_out, lat1d_out, lon_out, lat_out, afunctionspace_out, nl, fieldset, config)
Initialize interpolation object The input and output fields are ATLAS_FieldSet objects that are assum...
subroutine bint_apply_real_r3_r3(bint, array_in, array_out, trans_in, trans_out, nn)
Apply interpolation.
subroutine bint_apply_real_r2_r1(bint, array_in, array_out, trans_in, trans_out, nn)
Apply interpolation.
Generic ranks, dimensions and types.
Definition: tools_atlas.F90:42
Subroutines/functions list.
Definition: tools_const.F90:31
real(kind_real), parameter, public three
Three.
Definition: tools_const.F90:44
real(kind_real), parameter, public pi
Pi.
Definition: tools_const.F90:53
real(kind_real), parameter, public deg2rad
Degree to radian.
Definition: tools_const.F90:54
real(kind_real), parameter, public zero
Zero.
Definition: tools_const.F90:37
real(kind_real), parameter, public rad2deg
Radian to degree.
Definition: tools_const.F90:55
real(kind_real), parameter, public hundred
Hundred.
Definition: tools_const.F90:51
Subroutines/functions list.
Definition: tools_func.F90:42
Kinds definition.
Definition: tools_kinds.F90:9
integer, parameter, public kind_int
Integer kind.
Definition: tools_kinds.F90:17
integer, parameter, public kind_real
Real kind alias for the whole code.
Definition: tools_kinds.F90:31
Generic ranks, dimensions and types.
Definition: tools_repro.F90:42
real(kind_real), public rth
Reproducibility threshold.
Definition: tools_repro.F90:51
Subroutines/functions list.
Definition: type_bump.F90:31
Generic ranks, dimensions and types.
Definition: type_com.F90:42
Subroutines/functions list.
Generic ranks, dimensions and types.
Definition: type_geom.F90:42
Subroutines/functions list.
Definition: type_linop.F90:31
Subroutines/functions list.
Definition: type_mesh.F90:31
Generic ranks, dimensions and types.
Definition: type_mpl.F90:42
Subroutines/functions list.
Definition: type_nam.F90:31