Neko 0.9.99
A portable framework for high-order spectral element flow simulations
Loading...
Searching...
No Matches
field_math.f90
Go to the documentation of this file.
1! Copyright (c) 2008-2020, UCHICAGO ARGONNE, LLC.
2!
3! The UChicago Argonne, LLC as Operator of Argonne National
4! Laboratory holds copyright in the Software. The copyright holder
5! reserves all rights except those expressly granted to licensees,
6! and U.S. Government license rights.
7!
8! Redistribution and use in source and binary forms, with or without
9! modification, are permitted provided that the following conditions
10! are met:
11!
12! 1. Redistributions of source code must retain the above copyright
13! notice, this list of conditions and the disclaimer below.
14!
15! 2. Redistributions in binary form must reproduce the above copyright
16! notice, this list of conditions and the disclaimer (as noted below)
17! in the documentation and/or other materials provided with the
18! distribution.
19!
20! 3. Neither the name of ANL nor the names of its contributors
21! may be used to endorse or promote products derived from this software
22! without specific prior written permission.
23!
24! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
25! "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
26! LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
27! FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
28! UCHICAGO ARGONNE, LLC, THE U.S. DEPARTMENT OF
29! ENERGY OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
30! SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
31! TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
32! DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
33! THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
34! (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
35! OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36!
37! Additional BSD Notice
38! ---------------------
39! 1. This notice is required to be provided under our contract with
40! the U.S. Department of Energy (DOE). This work was produced at
41! Argonne National Laboratory under Contract
42! No. DE-AC02-06CH11357 with the DOE.
43!
44! 2. Neither the United States Government nor UCHICAGO ARGONNE,
45! LLC nor any of their employees, makes any warranty,
46! express or implied, or assumes any liability or responsibility for the
47! accuracy, completeness, or usefulness of any information, apparatus,
48! product, or process disclosed, or represents that its use would not
49! infringe privately-owned rights.
50!
51! 3. Also, reference herein to any specific commercial products, process,
52! or services by trade name, trademark, manufacturer or otherwise does
53! not necessarily constitute or imply its endorsement, recommendation,
54! or favoring by the United States Government or UCHICAGO ARGONNE LLC.
55! The views and opinions of authors expressed
56! herein do not necessarily state or reflect those of the United States
57! Government or UCHICAGO ARGONNE, LLC, and shall
58! not be used for advertising or product endorsement purposes.
59!
62 use num_types, only: rp
63 use field, only: field_t
64 use math, only: rzero, rone, copy, cmult, cadd, cfill, invcol1, vdot3, add2, &
73 implicit none
74 private
75
83
84contains
85
87 subroutine field_rzero(a, n)
88 integer, intent(in), optional :: n
89 type(field_t), intent(inout) :: a
90 integer :: size
91
92 if (present(n)) then
93 size = n
94 else
95 size = a%size()
96 end if
97
98 if (neko_bcknd_device .eq. 1) then
99 call device_rzero(a%x_d, size)
100 else
101 call rzero(a%x, size)
102 end if
103 end subroutine field_rzero
104
106 subroutine field_rone(a, n)
107 integer, intent(in), optional :: n
108 type(field_t), intent(inout) :: a
109 integer :: size
110
111 if (present(n)) then
112 size = n
113 else
114 size = a%size()
115 end if
116
117 if (neko_bcknd_device .eq. 1) then
118 call device_rone(a%x_d, size)
119 else
120 call rone(a%x, size)
121 end if
122 end subroutine field_rone
123
125 subroutine field_copy(a, b, n)
126 integer, intent(in), optional :: n
127 type(field_t), intent(in) :: b
128 type(field_t), intent(inout) :: a
129 integer :: size
130
131 if (present(n)) then
132 size = n
133 else
134 size = a%size()
135 end if
136
137 if (neko_bcknd_device .eq. 1) then
138 call device_copy(a%x_d, b%x_d, size)
139 else
140 call copy(a%x, b%x, size)
141 end if
142 end subroutine field_copy
143
145 subroutine field_cmult(a, c, n)
146 integer, intent(in), optional :: n
147 type(field_t), intent(inout) :: a
148 real(kind=rp), intent(in) :: c
149 integer :: size
150
151 if (present(n)) then
152 size = n
153 else
154 size = a%size()
155 end if
156
157 if (neko_bcknd_device .eq. 1) then
158 call device_cmult(a%x_d, c, size)
159 else
160 call cmult(a%x, c, size)
161 end if
162 end subroutine field_cmult
163
165 subroutine field_cadd(a, s, n)
166 integer, intent(in), optional :: n
167 type(field_t), intent(inout) :: a
168 real(kind=rp), intent(in) :: s
169 integer :: size
170
171 if (present(n)) then
172 size = n
173 else
174 size = a%size()
175 end if
176
177 if (neko_bcknd_device .eq. 1) then
178 call device_cadd(a%x_d, s, size)
179 else
180 call cadd(a%x, s, size)
181 end if
182 end subroutine field_cadd
183
185 subroutine field_cfill(a, c, n)
186 integer, intent(in), optional :: n
187 type(field_t), intent(inout) :: a
188 real(kind=rp), intent(in) :: c
189 integer :: size
190
191 if (present(n)) then
192 size = n
193 else
194 size = a%size()
195 end if
196
197 if (neko_bcknd_device .eq. 1) then
198 call device_cfill(a%x_d, c, size)
199 else
200 call cfill(a%x, c, size)
201 end if
202 end subroutine field_cfill
203
205 subroutine field_invcol1(a, n)
206 integer, intent(in), optional :: n
207 type(field_t), intent(inout) :: a
208 integer :: size
209
210 if (present(n)) then
211 size = n
212 else
213 size = a%size()
214 end if
215
216 if (neko_bcknd_device .eq. 1) then
217 call device_invcol1(a%x_d, size)
218 else
219 call invcol1(a%x, size)
220 end if
221
222 end subroutine field_invcol1
223
226 subroutine field_vdot3(dot, u1, u2, u3, v1, v2, v3, n)
227 integer, intent(in), optional :: n
228 type(field_t), intent(in) :: u1, u2, u3
229 type(field_t), intent(in) :: v1, v2, v3
230 type(field_t), intent(out) :: dot
231 integer :: size
232
233 if (present(n)) then
234 size = n
235 else
236 size = dot%size()
237 end if
238
239 if (neko_bcknd_device .eq. 1) then
240 call device_vdot3(dot%x_d, &
241 u1%x_d, u2%x_d, u3%x_d, &
242 v1%x_d, v2%x_d, v3%x_d, &
243 size)
244 else
245 call vdot3(dot%x, &
246 u1%x, u2%x, u3%x, &
247 v1%x, v2%x, v3%x, &
248 size)
249 end if
250
251 end subroutine field_vdot3
252
254 subroutine field_add2(a, b, n)
255 integer, intent(in), optional :: n
256 type(field_t), intent(inout) :: a
257 type(field_t), intent(in) :: b
258 integer :: size
259
260 if (present(n)) then
261 size = n
262 else
263 size = a%size()
264 end if
265
266 if (neko_bcknd_device .eq. 1) then
267 call device_add2(a%x_d, b%x_d, size)
268 else
269 call add2(a%x, b%x, size)
270 end if
271
272 end subroutine field_add2
273
275 subroutine field_add3(a, b, c, n)
276 integer, intent(in), optional :: n
277 type(field_t), intent(inout) :: a
278 type(field_t), intent(in) :: b, c
279 integer :: size
280
281 if (present(n)) then
282 size = n
283 else
284 size = a%size()
285 end if
286
287 if (neko_bcknd_device .eq. 1) then
288 call device_add3(a%x_d, b%x_d, c%x_d, size)
289 else
290 call add3(a%x, b%x, c%x, size)
291 end if
292
293 end subroutine field_add3
294
296 subroutine field_add4(a, b, c, d, n)
297 integer, intent(in), optional :: n
298 type(field_t), intent(inout) :: a
299 type(field_t), intent(in) :: b, c, d
300 integer :: size
301
302 if (present(n)) then
303 size = n
304 else
305 size = a%size()
306 end if
307
308 if (neko_bcknd_device .eq. 1) then
309 call device_add4(a%x_d, b%x_d, c%x_d, d%x_d, size)
310 else
311 call add4(a%x, b%x, c%x, d%x, size)
312 end if
313
314 end subroutine field_add4
315
317 subroutine field_sub2(a, b, n)
318 integer, intent(in), optional :: n
319 type(field_t), intent(inout) :: a
320 type(field_t), intent(inout) :: b
321 integer :: size
322
323 if (present(n)) then
324 size = n
325 else
326 size = a%size()
327 end if
328
329 if (neko_bcknd_device .eq. 1) then
330 call device_sub2(a%x_d, b%x_d, size)
331 else
332 call sub2(a%x, b%x, size)
333 end if
334
335 end subroutine field_sub2
336
338 subroutine field_sub3(a, b, c, n)
339 integer, intent(in), optional :: n
340 type(field_t), intent(inout) :: c
341 type(field_t), intent(inout) :: b
342 type(field_t), intent(out) :: a
343 integer :: size
344
345 if (present(n)) then
346 size = n
347 else
348 size = a%size()
349 end if
350
351 if (neko_bcknd_device .eq. 1) then
352 call device_sub3(a%x_d, b%x_d, c%x_d, size)
353 else
354 call sub3(a%x, b%x, c%x, size)
355 end if
356
357 end subroutine field_sub3
358
359
362 subroutine field_add2s1(a, b, c1, n)
363 integer, intent(in), optional :: n
364 type(field_t), intent(inout) :: a
365 type(field_t), intent(inout) :: b
366 real(kind=rp), intent(in) :: c1
367 integer :: size
368
369 if (present(n)) then
370 size = n
371 else
372 size = a%size()
373 end if
374
375 if (neko_bcknd_device .eq. 1) then
376 call device_add2s1(a%x_d, b%x_d, c1, size)
377 else
378 call add2s1(a%x, b%x, c1, size)
379 end if
380
381 end subroutine field_add2s1
382
385 subroutine field_add2s2(a, b, c1, n)
386 integer, intent(in), optional :: n
387 type(field_t), intent(inout) :: a
388 type(field_t), intent(inout) :: b
389 real(kind=rp), intent(in) :: c1
390 integer :: size
391
392 if (present(n)) then
393 size = n
394 else
395 size = a%size()
396 end if
397
398 if (neko_bcknd_device .eq. 1) then
399 call device_add2s2(a%x_d, b%x_d, c1, size)
400 else
401 call add2s2(a%x, b%x, c1, size)
402 end if
403
404 end subroutine field_add2s2
405
407 subroutine field_addsqr2s2(a, b, c1, n)
408 integer, intent(in), optional :: n
409 type(field_t), intent(inout) :: a
410 type(field_t), intent(in) :: b
411 real(kind=rp), intent(in) :: c1
412 integer :: size
413
414 if (present(n)) then
415 size = n
416 else
417 size = a%size()
418 end if
419
420 if (neko_bcknd_device .eq. 1) then
421 call device_addsqr2s2(a%x_d, b%x_d, c1, size)
422 else
423 call addsqr2s2(a%x, b%x, c1, size)
424 end if
425
426 end subroutine field_addsqr2s2
427
429 subroutine field_cmult2(a, b, c, n)
430 integer, intent(in), optional :: n
431 type(field_t), intent(inout) :: a
432 type(field_t), intent(in) :: b
433 real(kind=rp), intent(in) :: c
434 integer :: size
435
436 if (present(n)) then
437 size = n
438 else
439 size = a%size()
440 end if
441
442 if (neko_bcknd_device .eq. 1) then
443 call device_cmult2(a%x_d, b%x_d, c, size)
444 else
445 call cmult2(a%x, b%x, c, size)
446 end if
447
448 end subroutine field_cmult2
449
451 subroutine field_invcol2(a, b, n)
452 integer, intent(in), optional :: n
453 type(field_t), intent(inout) :: a
454 type(field_t), intent(in) :: b
455 integer :: size
456
457 if (present(n)) then
458 size = n
459 else
460 size = a%size()
461 end if
462
463 if (neko_bcknd_device .eq. 1) then
464 call device_invcol2(a%x_d, b%x_d, size)
465 else
466 call invcol2(a%x, b%x, size)
467 end if
468
469 end subroutine field_invcol2
470
471
473 subroutine field_col2(a, b, n)
474 integer, intent(in), optional :: n
475 type(field_t), intent(inout) :: a
476 type(field_t), intent(in) :: b
477 integer :: size
478
479 if (present(n)) then
480 size = n
481 else
482 size = a%size()
483 end if
484
485 if (neko_bcknd_device .eq. 1) then
486 call device_col2(a%x_d, b%x_d, size)
487 else
488 call col2(a%x, b%x, size)
489 end if
490
491 end subroutine field_col2
492
494 subroutine field_col3(a, b, c, n)
495 integer, intent(in), optional :: n
496 type(field_t), intent(inout) :: a
497 type(field_t), intent(in) :: b
498 type(field_t), intent(in) :: c
499 integer :: size
500
501 if (present(n)) then
502 size = n
503 else
504 size = a%size()
505 end if
506
507 if (neko_bcknd_device .eq. 1) then
508 call device_col3(a%x_d, b%x_d, c%x_d, size)
509 else
510 call col3(a%x, b%x, c%x, size)
511 end if
512
513 end subroutine field_col3
514
516 subroutine field_subcol3(a, b, c, n)
517 integer, intent(in), optional :: n
518 type(field_t), intent(inout) :: a
519 type(field_t), intent(in) :: b
520 type(field_t), intent(in) :: c
521 integer :: size
522
523 if (present(n)) then
524 size = n
525 else
526 size = a%size()
527 end if
528
529 if (neko_bcknd_device .eq. 1) then
530 call device_subcol3(a%x_d, b%x_d, c%x_d, size)
531 else
532 call subcol3(a%x, b%x, c%x, size)
533 end if
534
535 end subroutine field_subcol3
536
538 subroutine field_add3s2(a, b, c, c1, c2, n)
539 integer, intent(in), optional :: n
540 type(field_t), intent(inout) :: a
541 type(field_t), intent(in) :: b
542 type(field_t), intent(in) :: c
543 real(kind=rp), intent(in) :: c1, c2
544 integer :: size
545
546 if (present(n)) then
547 size = n
548 else
549 size = a%size()
550 end if
551
552 if (neko_bcknd_device .eq. 1) then
553 call device_add3s2(a%x_d, b%x_d, c%x_d, c1, c2, size)
554 else
555 call add3s2(a%x, b%x, c%x, c1, c2, size)
556 end if
557
558 end subroutine field_add3s2
559
561 subroutine field_addcol3(a, b, c, n)
562 integer, intent(in), optional :: n
563 type(field_t), intent(inout) :: a
564 type(field_t), intent(in) :: b
565 type(field_t), intent(in) :: c
566 integer :: size
567
568 if (present(n)) then
569 size = n
570 else
571 size = a%size()
572 end if
573
574 if (neko_bcknd_device .eq. 1) then
575 call device_addcol3(a%x_d, b%x_d, c%x_d, size)
576 else
577 call addcol3(a%x, b%x, c%x, size)
578 end if
579
580 end subroutine field_addcol3
581
583 subroutine field_addcol4(a, b, c, d, n)
584 integer, intent(in), optional :: n
585 type(field_t), intent(inout) :: a
586 type(field_t), intent(in) :: b
587 type(field_t), intent(in) :: c
588 type(field_t), intent(in) :: d
589 integer :: size
590
591 if (present(n)) then
592 size = n
593 else
594 size = a%size()
595 end if
596
597 if (neko_bcknd_device .eq. 1) then
598 call device_addcol4(a%x_d, b%x_d, c%x_d, d%x_d, size)
599 else
600 call addcol4(a%x, b%x, c%x, d%x, size)
601 end if
602
603 end subroutine field_addcol4
604
605 function field_glsum(a, n) result(sum)
606 integer, intent(in), optional :: n
607 type(field_t), intent(in) :: a
608 real(kind=rp) :: sum
609 integer :: size
610
611 if (present(n)) then
612 size = n
613 else
614 size = a%size()
615 end if
616
617 if (neko_bcknd_device .eq. 1) then
618 sum = device_glsum(a%x_d, size)
619 else
620 sum = glsum(a%x, size)
621 end if
622
623 end function field_glsum
624
625 function field_glsc2(a, b, n) result(norm)
626 integer, intent(in), optional :: n
627 type(field_t), intent(in) :: a, b
628 real(kind=rp) :: norm
629 integer :: size
630
631 if (present(n)) then
632 size = n
633 else
634 size = a%size()
635 end if
636
637 if (neko_bcknd_device .eq. 1) then
638 norm = device_glsc2(a%x_d, b%x_d, size)
639 else
640 norm = glsc2(a%x, b%x, size)
641 end if
642
643 end function field_glsc2
644
645 function field_glsc3(a, b, c, n) result(norm)
646 integer, intent(in), optional :: n
647 type(field_t), intent(in) :: a, b, c
648 real(kind=rp) :: norm
649 integer :: size
650
651 if (present(n)) then
652 size = n
653 else
654 size = a%size()
655 end if
656
657 if (neko_bcknd_device .eq. 1) then
658 norm = device_glsc3(a%x_d, b%x_d, c%x_d, size)
659 else
660 norm = glsc3(a%x, b%x, c%x, size)
661 end if
662
663 end function field_glsc3
664
665end module field_math
subroutine, public device_add2(a_d, b_d, n)
Vector addition .
subroutine, public device_addcol3(a_d, b_d, c_d, n)
Returns .
subroutine, public device_col2(a_d, b_d, n)
Vector multiplication .
subroutine, public device_add2s1(a_d, b_d, c1, n)
subroutine, public device_rzero(a_d, n)
Zero a real vector.
subroutine, public device_rone(a_d, n)
Set all elements to one.
subroutine, public device_add2s2(a_d, b_d, c1, n)
Vector addition with scalar multiplication (multiplication on first argument)
subroutine, public device_invcol1(a_d, n)
Invert a vector .
subroutine, public device_col3(a_d, b_d, c_d, n)
Vector multiplication with 3 vectors .
subroutine, public device_add4(a_d, b_d, c_d, d_d, n)
subroutine, public device_cadd(a_d, c, n)
Add a scalar to vector .
subroutine, public device_vdot3(dot_d, u1_d, u2_d, u3_d, v1_d, v2_d, v3_d, n)
Compute a dot product (3-d version) assuming vector components etc.
subroutine, public device_cmult2(a_d, b_d, c, n)
Multiplication by constant c .
subroutine, public device_cmult(a_d, c, n)
Multiplication by constant c .
real(kind=rp) function, public device_glsc2(a_d, b_d, n)
Weighted inner product .
subroutine, public device_sub3(a_d, b_d, c_d, n)
Vector subtraction .
real(kind=rp) function, public device_glsc3(a_d, b_d, c_d, n)
Weighted inner product .
subroutine, public device_add3(a_d, b_d, c_d, n)
Vector addition .
real(kind=rp) function, public device_glsum(a_d, n)
Sum a vector of length n.
subroutine, public device_copy(a_d, b_d, n)
Copy a vector .
subroutine, public device_add3s2(a_d, b_d, c_d, c1, c2, n)
Returns .
subroutine, public device_subcol3(a_d, b_d, c_d, n)
Returns .
subroutine, public device_sub2(a_d, b_d, n)
Vector substraction .
subroutine, public device_cfill(a_d, c, n)
Set all elements to a constant c .
subroutine, public device_addcol4(a_d, b_d, c_d, d_d, n)
Returns .
subroutine, public device_invcol2(a_d, b_d, n)
Vector division .
subroutine, public device_addsqr2s2(a_d, b_d, c1, n)
Returns .
subroutine, public field_add2s1(a, b, c1, n)
Vector addition with scalar multiplication (multiplication on first argument)
subroutine, public field_invcol2(a, b, n)
Vector division .
subroutine field_add4(a, b, c, d, n)
Vector addition .
subroutine field_add3(a, b, c, n)
Vector addition .
subroutine, public field_cadd(a, s, n)
Add a scalar to vector .
subroutine, public field_invcol1(a, n)
Invert a vector .
subroutine, public field_col2(a, b, n)
Vector multiplication .
subroutine, public field_sub2(a, b, n)
Vector substraction .
subroutine, public field_sub3(a, b, c, n)
Vector subtraction .
subroutine, public field_cmult2(a, b, c, n)
Multiplication by constant c .
real(kind=rp) function, public field_glsc2(a, b, n)
subroutine, public field_cfill(a, c, n)
Set all elements to a constant c .
subroutine, public field_add2s2(a, b, c1, n)
Vector addition with scalar multiplication (multiplication on second argument)
real(kind=rp) function, public field_glsum(a, n)
subroutine, public field_rzero(a, n)
Zero a real vector.
subroutine, public field_addcol3(a, b, c, n)
Returns .
subroutine, public field_rone(a, n)
Set all elements to one.
subroutine, public field_add3s2(a, b, c, c1, c2, n)
Returns .
subroutine, public field_add2(a, b, n)
Vector addition .
subroutine, public field_col3(a, b, c, n)
Vector multiplication with 3 vectors .
subroutine, public field_copy(a, b, n)
Copy a vector .
subroutine, public field_subcol3(a, b, c, n)
Returns .
subroutine, public field_cmult(a, c, n)
Multiplication by constant c .
real(kind=rp) function, public field_glsc3(a, b, c, n)
subroutine, public field_addcol4(a, b, c, d, n)
Returns .
subroutine, public field_addsqr2s2(a, b, c1, n)
Returns .
subroutine, public field_vdot3(dot, u1, u2, u3, v1, v2, v3, n)
Compute a dot product (3-d version) assuming vector components etc.
Defines a field.
Definition field.f90:34
Definition math.f90:60
subroutine, public cmult(a, c, n)
Multiplication by constant c .
Definition math.f90:310
subroutine, public cmult2(a, b, c, n)
Multiplication by constant c .
Definition math.f90:700
subroutine, public invcol2(a, b, n)
Vector division .
Definition math.f90:714
real(kind=rp) function, public glsc3(a, b, c, n)
Weighted inner product .
Definition math.f90:894
subroutine, public cadd(a, s, n)
Add a scalar to vector .
Definition math.f90:322
subroutine, public addsqr2s2(a, b, c1, n)
Returns .
Definition math.f90:686
subroutine, public add2s1(a, b, c1, n)
Vector addition with scalar multiplication (multiplication on first argument)
Definition math.f90:657
real(kind=rp) function, public glsc2(a, b, n)
Weighted inner product .
Definition math.f90:875
subroutine, public subcol3(a, b, c, n)
Returns .
Definition math.f90:755
subroutine, public rone(a, n)
Set all elements to one.
Definition math.f90:227
subroutine, public add3(a, b, c, n)
Vector addition .
Definition math.f90:599
real(kind=rp) function, public glsum(a, n)
Sum a vector of length n.
Definition math.f90:359
subroutine, public sub3(a, b, c, n)
Vector subtraction .
Definition math.f90:641
subroutine, public addcol4(a, b, c, d, n)
Returns .
Definition math.f90:814
subroutine, public add2(a, b, n)
Vector addition .
Definition math.f90:586
subroutine, public cfill(a, c, n)
Set all elements to a constant c .
Definition math.f90:347
subroutine, public add3s2(a, b, c, c1, c2, n)
Returns .
Definition math.f90:769
subroutine, public addcol3(a, b, c, n)
Returns .
Definition math.f90:800
subroutine, public invcol1(a, n)
Invert a vector .
Definition math.f90:474
subroutine, public col2(a, b, n)
Vector multiplication .
Definition math.f90:728
subroutine, public copy(a, b, n)
Copy a vector .
Definition math.f90:238
subroutine, public add4(a, b, c, d, n)
Vector addition .
Definition math.f90:613
subroutine, public col3(a, b, c, n)
Vector multiplication with 3 vectors .
Definition math.f90:741
subroutine, public vdot3(dot, u1, u2, u3, v1, v2, v3, n)
Compute a dot product (3-d version) assuming vector components etc.
Definition math.f90:544
subroutine, public rzero(a, n)
Zero a real vector.
Definition math.f90:194
subroutine, public sub2(a, b, n)
Vector substraction .
Definition math.f90:628
subroutine, public add2s2(a, b, c1, n)
Vector addition with scalar multiplication (multiplication on second argument)
Definition math.f90:672
Build configurations.
integer, parameter neko_bcknd_device
integer, parameter, public rp
Global precision used in computations.
Definition num_types.f90:12