Neko 1.99.3
A portable framework for high-order spectral element flow simulations
Loading...
Searching...
No Matches
hip_math.f90
Go to the documentation of this file.
1! Copyright (c) 2024-2025, The Neko Authors
2! All rights reserved.
3!
4! Redistribution and use in source and binary forms, with or without
5! modification, are permitted provided that the following conditions
6! are met:
7!
8! * Redistributions of source code must retain the above copyright
9! notice, this list of conditions and the following disclaimer.
10!
11! * Redistributions in binary form must reproduce the above
12! copyright notice, this list of conditions and the following
13! disclaimer in the documentation and/or other materials provided
14! with the distribution.
15!
16! * Neither the name of the authors nor the names of its
17! contributors may be used to endorse or promote products derived
18! from this software without specific prior written permission.
19!
20! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21! "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22! LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
23! FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
24! COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
25! INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
26! BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
27! LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
28! CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29! LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
30! ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
31! POSSIBILITY OF SUCH DAMAGE.
32!
34 use num_types, only : rp, c_rp
35 implicit none
36 public
37
38 interface
39 subroutine hip_copy(a_d, b_d, n, strm) &
40 bind(c, name = 'hip_copy')
41 use, intrinsic :: iso_c_binding, only : c_ptr, c_int
42 type(c_ptr), value :: a_d, b_d, strm
43 integer(c_int) :: n
44 end subroutine hip_copy
45
46 subroutine hip_masked_copy(a_d, b_d, mask_d, n, n_mask, strm) &
47 bind(c, name = 'hip_masked_copy')
48 use, intrinsic :: iso_c_binding, only : c_ptr, c_int
49 type(c_ptr), value :: a_d, b_d, mask_d, strm
50 integer(c_int) :: n, n_mask
51 end subroutine hip_masked_copy
52
53 subroutine hip_masked_gather_copy(a_d, b_d, mask_d, n, n_mask, strm) &
54 bind(c, name = 'hip_masked_gather_copy')
55 use, intrinsic :: iso_c_binding, only : c_ptr, c_int
56 type(c_ptr), value :: a_d, b_d, mask_d, strm
57 integer(c_int) :: n, n_mask
58 end subroutine hip_masked_gather_copy
59
60 subroutine hip_masked_gather_copy_aligned(a_d, b_d, mask_d, n, n_mask, &
61 strm) bind(c, name = 'hip_masked_gather_copy_aligned')
62 use, intrinsic :: iso_c_binding, only : c_ptr, c_int
63 type(c_ptr), value :: a_d, b_d, mask_d, strm
64 integer(c_int) :: n, n_mask
66
67 subroutine hip_face_masked_gather_copy(a_d, b_d, mask_d, facet_d, n1, &
68 n2, lx, ly, lz, n_mask, strm) &
69 bind(c, name = 'hip_face_masked_gather_copy')
70 use, intrinsic :: iso_c_binding, only : c_ptr, c_int
71 type(c_ptr), value :: a_d, b_d, mask_d, facet_d, strm
72 integer(c_int) :: n1, n2, lx, ly, lz, n_mask
73 end subroutine hip_face_masked_gather_copy
74
75 subroutine hip_masked_scatter_copy(a_d, b_d, mask_d, n, n_mask, strm) &
76 bind(c, name = 'hip_masked_scatter_copy')
77 use, intrinsic :: iso_c_binding, only : c_ptr, c_int
78 type(c_ptr), value :: a_d, b_d, mask_d, strm
79 integer(c_int) :: n, n_mask
80 end subroutine hip_masked_scatter_copy
81
82 subroutine hip_masked_scatter_copy_aligned(a_d, b_d, mask_d, n, n_mask, strm) &
83 bind(c, name = 'hip_masked_scatter_copy_aligned')
84 use, intrinsic :: iso_c_binding, only : c_ptr, c_int
85 type(c_ptr), value :: a_d, b_d, mask_d, strm
86 integer(c_int) :: n, n_mask
88
89 subroutine hip_masked_atomic_reduction(a_d, b_d, mask_d, n, m, strm) &
90 bind(c, name = 'hip_masked_atomic_reduction')
91 use, intrinsic :: iso_c_binding, only : c_ptr, c_int
92 type(c_ptr), value :: a_d, b_d, mask_d, strm
93 integer(c_int) :: n, m
94 end subroutine hip_masked_atomic_reduction
95
96 subroutine hip_cfill_mask(a_d, c, n, mask_d, n_mask, strm) &
97 bind(c, name = 'hip_cfill_mask')
98 use, intrinsic :: iso_c_binding, only : c_ptr, c_int
99 import c_rp
100 type(c_ptr), value :: a_d
101 real(c_rp) :: c
102 integer(c_int) :: n
103 type(c_ptr), value :: mask_d
104 integer(c_int) :: n_mask
105 type(c_ptr), value :: strm
106 end subroutine hip_cfill_mask
107
108 subroutine hip_cmult(a_d, c, n, strm) &
109 bind(c, name = 'hip_cmult')
110 use, intrinsic :: iso_c_binding, only : c_ptr, c_int
111 import c_rp
112 type(c_ptr), value :: a_d, strm
113 real(c_rp) :: c
114 integer(c_int) :: n
115 end subroutine hip_cmult
116
117 subroutine hip_cmult2(a_d, b_d, c, n, strm) &
118 bind(c, name = 'hip_cmult2')
119 use, intrinsic :: iso_c_binding, only : c_ptr, c_int
120 import c_rp
121 type(c_ptr), value :: a_d, b_d, strm
122 real(c_rp) :: c
123 integer(c_int) :: n
124 end subroutine hip_cmult2
125
126 subroutine hip_cdiv(a_d, c, n, strm) &
127 bind(c, name = 'hip_cdiv')
128 use, intrinsic :: iso_c_binding, only : c_ptr, c_int
129 import c_rp
130 type(c_ptr), value :: a_d, strm
131 real(c_rp) :: c
132 integer(c_int) :: n
133 end subroutine hip_cdiv
134
135 subroutine hip_cdiv2(a_d, b_d, c, n, strm) &
136 bind(c, name = 'hip_cdiv2')
137 use, intrinsic :: iso_c_binding, only : c_ptr, c_int
138 import c_rp
139 type(c_ptr), value :: a_d, b_d, strm
140 real(c_rp) :: c
141 integer(c_int) :: n
142 end subroutine hip_cdiv2
143
144 subroutine hip_radd(a_d, c, n, strm) &
145 bind(c, name = 'hip_radd')
146 use, intrinsic :: iso_c_binding, only : c_ptr, c_int
147 import c_rp
148 type(c_ptr), value :: a_d, strm
149 real(c_rp) :: c
150 integer(c_int) :: n
151 end subroutine hip_radd
152
153 subroutine hip_cadd2(a_d, b_d, c, n, strm) &
154 bind(c, name = 'hip_cadd2')
155 use, intrinsic :: iso_c_binding, only : c_ptr, c_int
156 import c_rp
157 type(c_ptr), value :: a_d
158 type(c_ptr), value :: b_d
159 type(c_ptr), value :: strm
160 real(c_rp) :: c
161 integer(c_int) :: n
162 end subroutine hip_cadd2
163
164 subroutine hip_cwrap(a_d, min_val, max_val, n, strm) &
165 bind(c, name = 'hip_cwrap')
166 use, intrinsic :: iso_c_binding, only : c_ptr, c_int
167 import c_rp
168 type(c_ptr), value :: a_d
169 type(c_ptr), value :: strm
170 real(c_rp) :: min_val
171 real(c_rp) :: max_val
172 integer(c_int) :: n
173 end subroutine hip_cwrap
174
175 subroutine hip_cfill(a_d, c, n, strm) &
176 bind(c, name = 'hip_cfill')
177 use, intrinsic :: iso_c_binding, only : c_ptr, c_int
178 import c_rp
179 type(c_ptr), value :: a_d, strm
180 real(c_rp) :: c
181 integer(c_int) :: n
182 end subroutine hip_cfill
183
184 subroutine hip_rzero(a_d, n, strm) &
185 bind(c, name = 'hip_rzero')
186 use, intrinsic :: iso_c_binding, only : c_ptr, c_int
187 type(c_ptr), value :: a_d, strm
188 integer(c_int) :: n
189 end subroutine hip_rzero
190
191 subroutine hip_add2(a_d, b_d, n, strm) &
192 bind(c, name = 'hip_add2')
193 use, intrinsic :: iso_c_binding, only : c_ptr, c_int
194 import c_rp
195 type(c_ptr), value :: a_d, b_d, strm
196 integer(c_int) :: n
197 end subroutine hip_add2
198
199 subroutine hip_add4(a_d, b_d, c_d, d_d, n, strm) &
200 bind(c, name = 'hip_add4')
201 use, intrinsic :: iso_c_binding, only : c_ptr, c_int
202 import c_rp
203 type(c_ptr), value :: a_d, b_d, c_d, d_d, strm
204 integer(c_int) :: n
205 end subroutine hip_add4
206
207 subroutine hip_add2s1(a_d, b_d, c1, n, strm) &
208 bind(c, name = 'hip_add2s1')
209 use, intrinsic :: iso_c_binding, only : c_ptr, c_int
210 import c_rp
211 type(c_ptr), value :: a_d, b_d, strm
212 real(c_rp) :: c1
213 integer(c_int) :: n
214 end subroutine hip_add2s1
215
216 subroutine hip_add2s2(a_d, b_d, c1, n, strm) &
217 bind(c, name = 'hip_add2s2')
218 use, intrinsic :: iso_c_binding, only : c_ptr, c_int
219 import c_rp
220 type(c_ptr), value :: a_d, b_d, strm
221 real(c_rp) :: c1
222 integer(c_int) :: n
223 end subroutine hip_add2s2
224
225 subroutine hip_addsqr2s2(a_d, b_d, c1, n, strm) &
226 bind(c, name = 'hip_addsqr2s2')
227 use, intrinsic :: iso_c_binding, only : c_ptr, c_int
228 import c_rp
229 type(c_ptr), value :: a_d, b_d, strm
230 real(c_rp) :: c1
231 integer(c_int) :: n
232 end subroutine hip_addsqr2s2
233
234 subroutine hip_add3s2(a_d, b_d, c_d, c1, c2, n, strm) &
235 bind(c, name = 'hip_add3s2')
236 use, intrinsic :: iso_c_binding, only : c_ptr, c_int
237 import c_rp
238 type(c_ptr), value :: a_d, b_d, c_d, strm
239 real(c_rp) :: c1, c2
240 integer(c_int) :: n
241 end subroutine hip_add3s2
242
243 subroutine hip_add4s3(a_d, b_d, c_d, d_d, c1, c2, c3, n, strm) &
244 bind(c, name = 'hip_add4s3')
245 use, intrinsic :: iso_c_binding, only : c_ptr, c_int
246 import c_rp
247 type(c_ptr), value :: a_d, b_d, c_d, d_d, strm
248 real(c_rp) :: c1, c2, c3
249 integer(c_int) :: n
250 end subroutine hip_add4s3
251
252 subroutine hip_add5s4(a_d, b_d, c_d, d_d, e_d, c1, c2, c3, c4, n, strm) &
253 bind(c, name = 'hip_add5s4')
254 use, intrinsic :: iso_c_binding, only : c_ptr, c_int
255 import c_rp
256 type(c_ptr), value :: a_d, b_d, c_d, d_d, e_d, strm
257 real(c_rp) :: c1, c2, c3, c4
258 integer(c_int) :: n
259 end subroutine hip_add5s4
260
261 subroutine hip_invcol1(a_d, n, strm) &
262 bind(c, name = 'hip_invcol1')
263 use, intrinsic :: iso_c_binding, only : c_ptr, c_int
264 type(c_ptr), value :: a_d, strm
265 integer(c_int) :: n
266 end subroutine hip_invcol1
267
268 subroutine hip_invcol2(a_d, b_d, n, strm) &
269 bind(c, name = 'hip_invcol2')
270 use, intrinsic :: iso_c_binding, only : c_ptr, c_int
271 type(c_ptr), value :: a_d, b_d, strm
272 integer(c_int) :: n
273 end subroutine hip_invcol2
274
275 subroutine hip_invcol3(a_d, b_d, c_d, n, strm) &
276 bind(c, name = 'hip_invcol3')
277 use, intrinsic :: iso_c_binding, only : c_ptr, c_int
278 type(c_ptr), value :: a_d, b_d, c_d, strm
279 integer(c_int) :: n
280 end subroutine hip_invcol3
281
282 subroutine hip_col2(a_d, b_d, n, strm) &
283 bind(c, name = 'hip_col2')
284 use, intrinsic :: iso_c_binding, only : c_ptr, c_int
285 type(c_ptr), value :: a_d, b_d, strm
286 integer(c_int) :: n
287 end subroutine hip_col2
288
289 subroutine hip_col3(a_d, b_d, c_d, n, strm) &
290 bind(c, name = 'hip_col3')
291 use, intrinsic :: iso_c_binding, only : c_ptr, c_int
292 type(c_ptr), value :: a_d, b_d, c_d, strm
293 integer(c_int) :: n
294 end subroutine hip_col3
295
296 subroutine hip_subcol3(a_d, b_d, c_d, n, strm) &
297 bind(c, name = 'hip_subcol3')
298 use, intrinsic :: iso_c_binding, only : c_ptr, c_int
299 type(c_ptr), value :: a_d, b_d, c_d, strm
300 integer(c_int) :: n
301 end subroutine hip_subcol3
302
303 subroutine hip_sub2(a_d, b_d, n, strm) &
304 bind(c, name = 'hip_sub2')
305 use, intrinsic :: iso_c_binding, only : c_ptr, c_int
306 type(c_ptr), value :: a_d, b_d, strm
307 integer(c_int) :: n
308 end subroutine hip_sub2
309
310 subroutine hip_sub3(a_d, b_d, c_d, n, strm) &
311 bind(c, name = 'hip_sub3')
312 use, intrinsic :: iso_c_binding, only : c_ptr, c_int
313 type(c_ptr), value :: a_d, b_d, c_d, strm
314 integer(c_int) :: n
315 end subroutine hip_sub3
316
317 subroutine hip_add3(a_d, b_d, c_d, n, strm) &
318 bind(c, name = 'hip_add3')
319 use, intrinsic :: iso_c_binding, only : c_ptr, c_int
320 type(c_ptr), value :: a_d, b_d, c_d, strm
321 integer(c_int) :: n
322 end subroutine hip_add3
323
324 subroutine hip_addcol3(a_d, b_d, c_d, n, strm) &
325 bind(c, name = 'hip_addcol3')
326 use, intrinsic :: iso_c_binding, only : c_ptr, c_int
327 type(c_ptr), value :: a_d, b_d, c_d, strm
328 integer(c_int) :: n
329 end subroutine hip_addcol3
330
331 subroutine hip_addcol4(a_d, b_d, c_d, d_d, n, strm) &
332 bind(c, name = 'hip_addcol4')
333 use, intrinsic :: iso_c_binding, only : c_ptr, c_int
334 type(c_ptr), value :: a_d, b_d, c_d, d_d, strm
335 integer(c_int) :: n
336 end subroutine hip_addcol4
337
338 subroutine hip_addcol3s2(a_d, b_d, c_d, s, n, strm) &
339 bind(c, name = 'hip_addcol3s2')
340 use, intrinsic :: iso_c_binding, only : c_ptr, c_int
341 import c_rp
342 type(c_ptr), value :: a_d, b_d, c_d, strm
343 real(c_rp) :: s
344 integer(c_int) :: n
345 end subroutine hip_addcol3s2
346
347 subroutine hip_vdot3(dot_d, u1_d, u2_d, u3_d, v1_d, v2_d, v3_d, n, strm) &
348 bind(c, name = 'hip_vdot3')
349 use, intrinsic :: iso_c_binding, only : c_ptr, c_int
350 type(c_ptr), value :: dot_d, u1_d, u2_d, u3_d, v1_d, v2_d, v3_d, strm
351 integer(c_int) :: n
352 end subroutine hip_vdot3
353
354 subroutine hip_vcross(u1_d, u2_d, u3_d, v1_d, v2_d, v3_d, &
355 w1_d, w2_d, w3_d, n, strm) &
356 bind(c, name = 'hip_vcross')
357 use, intrinsic :: iso_c_binding, only : c_ptr, c_int
358
359 type(c_ptr), value :: u1_d, u2_d, u3_d
360 type(c_ptr), value :: v1_d, v2_d, v3_d
361 type(c_ptr), value :: w1_d, w2_d, w3_d
362 type(c_ptr), value :: strm
363 integer(c_int) :: n
364 end subroutine hip_vcross
365
366 real(c_rp) function hip_vlsc3(u_d, v_d, w_d, n, strm) &
367 bind(c, name = 'hip_vlsc3')
368 use, intrinsic :: iso_c_binding, only : c_ptr, c_int
369 import c_rp
370 type(c_ptr), value :: u_d, v_d, w_d, strm
371 integer(c_int) :: n
372 end function hip_vlsc3
373
374 subroutine hip_add2s2_many(y_d, x_d_d, a_d, j, n, strm) &
375 bind(c, name = 'hip_add2s2_many')
376 use, intrinsic :: iso_c_binding, only : c_ptr, c_int
377 import c_rp
378 type(c_ptr), value :: y_d, x_d_d, a_d, strm
379 integer(c_int) :: j, n
380 end subroutine hip_add2s2_many
381
382 real(c_rp) function hip_glsc3(a_d, b_d, c_d, n, strm) &
383 bind(c, name = 'hip_glsc3')
384 use, intrinsic :: iso_c_binding, only : c_ptr, c_int
385 import c_rp
386 type(c_ptr), value :: a_d, b_d, c_d, strm
387 integer(c_int) :: n
388 end function hip_glsc3
389
390 subroutine hip_glsc3_many(h, w_d, v_d_d, mult_d, j, n, strm) &
391 bind(c, name = 'hip_glsc3_many')
392 use, intrinsic :: iso_c_binding, only : c_ptr, c_int
393 import c_rp
394 type(c_ptr), value :: w_d, v_d_d, mult_d, strm
395 integer(c_int) :: j, n
396 real(c_rp) :: h(j)
397 end subroutine hip_glsc3_many
398
399 real(c_rp) function hip_glsc2(a_d, b_d, n, strm) &
400 bind(c, name = 'hip_glsc2')
401 use, intrinsic :: iso_c_binding, only : c_ptr, c_int
402 import c_rp
403 type(c_ptr), value :: a_d, b_d, strm
404 integer(c_int) :: n
405 end function hip_glsc2
406
407 real(c_rp) function hip_glsubnorm2(a_d, b_d, n, strm) &
408 bind(c, name = 'hip_glsubnorm2')
409 use, intrinsic :: iso_c_binding, only : c_ptr, c_int
410 import c_rp
411 type(c_ptr), value :: a_d, b_d, strm
412 integer(c_int) :: n
413 end function hip_glsubnorm2
414
415 real(c_rp) function hip_glsum(a_d, n, strm) &
416 bind(c, name = 'hip_glsum')
417 use, intrinsic :: iso_c_binding, only : c_ptr, c_int
418 import c_rp
419 type(c_ptr), value :: a_d, strm
420 integer(c_int) :: n
421 end function hip_glsum
422
423 real(c_rp) function hip_glmax(a_d, ninf, n, strm) &
424 bind(c, name = 'hip_glmax')
425 use, intrinsic :: iso_c_binding, only: c_int, c_ptr
426 import c_rp
427 type(c_ptr), value :: a_d, strm
428 real(c_rp) :: ninf
429 integer(c_int) :: n
430 end function hip_glmax
431
432 real(c_rp) function hip_glmin(a_d, pinf, n, strm) &
433 bind(c, name = 'hip_glmin')
434 use, intrinsic :: iso_c_binding, only: c_int, c_ptr
435 import c_rp
436 type(c_ptr), value :: a_d, strm
437 real(c_rp) :: pinf
438 integer(c_int) :: n
439 end function hip_glmin
440
441 subroutine hip_absval(a_d, n, strm) &
442 bind(c, name = 'hip_absval')
443 use, intrinsic :: iso_c_binding, only : c_ptr, c_int
444 import c_rp
445 type(c_ptr), value :: a_d, strm
446 integer(c_int) :: n
447 end subroutine hip_absval
448 end interface
449
450 ! ========================================================================== !
451 ! Interfaces for the pointwise operations.
452
453 interface
454 subroutine hip_pwmax_vec2(a_d, b_d, n, strm) &
455 bind(c, name = 'hip_pwmax_vec2')
456 use, intrinsic :: iso_c_binding, only : c_int, c_ptr
457 type(c_ptr), value :: a_d, b_d, strm
458 integer(c_int) :: n
459 end subroutine hip_pwmax_vec2
460
461 subroutine hip_pwmax_vec3(a_d, b_d, c_d, n, strm) &
462 bind(c, name = 'hip_pwmax_vec3')
463 use, intrinsic :: iso_c_binding, only : c_int, c_ptr
464 type(c_ptr), value :: a_d, b_d, c_d, strm
465 integer(c_int) :: n
466 end subroutine hip_pwmax_vec3
467
468 subroutine hip_pwmax_sca2(a_d, c_d, n, strm) &
469 bind(c, name = 'hip_pwmax_sca2')
470 use, intrinsic :: iso_c_binding, only : c_int, c_ptr
471 import c_rp
472 type(c_ptr), value :: a_d, strm
473 real(c_rp) :: c_d
474 integer(c_int) :: n
475 end subroutine hip_pwmax_sca2
476
477 subroutine hip_pwmax_sca3(a_d, b_d, c_d, n, strm) &
478 bind(c, name = 'hip_pwmax_sca3')
479 use, intrinsic :: iso_c_binding, only : c_int, c_ptr
480 import c_rp
481 type(c_ptr), value :: a_d, b_d, strm
482 real(c_rp) :: c_d
483 integer(c_int) :: n
484 end subroutine hip_pwmax_sca3
485
486 subroutine hip_pwmin_vec2(a_d, b_d, n, strm) &
487 bind(c, name = 'hip_pwmin_vec2')
488 use, intrinsic :: iso_c_binding, only : c_int, c_ptr
489 type(c_ptr), value :: a_d, b_d, strm
490 integer(c_int) :: n
491 end subroutine hip_pwmin_vec2
492
493 subroutine hip_pwmin_vec3(a_d, b_d, c_d, n, strm) &
494 bind(c, name = 'hip_pwmin_vec3')
495 use, intrinsic :: iso_c_binding, only : c_int, c_ptr
496 type(c_ptr), value :: a_d, b_d, c_d, strm
497 integer(c_int) :: n
498 end subroutine hip_pwmin_vec3
499
500 subroutine hip_pwmin_sca2(a_d, c_d, n, strm) &
501 bind(c, name = 'hip_pwmin_sca2')
502 use, intrinsic :: iso_c_binding, only : c_int, c_ptr
503 import c_rp
504 type(c_ptr), value :: a_d, strm
505 real(c_rp) :: c_d
506 integer(c_int) :: n
507 end subroutine hip_pwmin_sca2
508
509 subroutine hip_pwmin_sca3(a_d, b_d, c_d, n, strm) &
510 bind(c, name = 'hip_pwmin_sca3')
511 use, intrinsic :: iso_c_binding, only : c_int, c_ptr
512 import c_rp
513 type(c_ptr), value :: a_d, b_d, strm
514 real(c_rp) :: c_d
515 integer(c_int) :: n
516 end subroutine hip_pwmin_sca3
517
518 end interface
519
520 ! ========================================================================== !
521 ! Interfaces for integer operations.
522
523 interface
524
525 subroutine hip_iadd(a_d, c, n, strm) &
526 bind(c, name = 'hip_iadd')
527 use, intrinsic :: iso_c_binding, only : c_int, c_ptr
528 import c_rp
529 type(c_ptr), value :: a_d, strm
530 integer(c_int) :: c
531 integer(c_int) :: n
532 end subroutine hip_iadd
533
534 end interface
535end module hip_math
integer, parameter, public c_rp
Definition num_types.f90:13
integer, parameter, public rp
Global precision used in computations.
Definition num_types.f90:12