23 integer,
intent(in) :: nv, nu
24 real(kind=
rp),
intent(inout) :: v(nv*nv), u(nu*nu)
25 real(kind=
rp),
intent(inout) :: a(nv, nu), bt(nu, nv)
26 real(kind=
rp) :: work(0:nu**2*nv)
28 call mxm(a, nv, u, nu, work, nu)
29 call mxm(work, nv, bt, nu, v, nv)
50 integer,
intent(in) :: nv, nu
51 real(kind=
rp),
intent(inout) :: v(nv*nv*nv), u(nu*nu*nu)
52 real(kind=
rp),
intent(inout) :: a(nv, nu), bt(nu, nv), ct(nu, nv)
85 else if (nv .eq. 1)
then
121 integer,
intent(in) :: nv, nu
122 real(kind=
rp),
intent(inout) :: v(nv*nv*nv), u(nu*nu*nu)
123 real(kind=
rp),
intent(inout) :: a(nv, nu), bt(nu, nv), ct(nu, nv)
124 real(kind=
rp) :: work(nu**2*nv), work2(nu*nv**2)
126 integer :: i, j, k, l, nunu, nvnu, nvnv
134 ii = i + nv * (j - 1)
137 tmp = tmp + a(i,k) * u(k + nu * (j - 1))
146 ii = l + nv * (j - 1) + nvnv * (i - 1)
149 jj = l + nv * (k - 1) + nvnu * (i - 1)
150 tmp = tmp + work(jj) * bt(k,j)
159 jj = i + nvnv * (j - 1)
162 ii = i + nvnv * (k - 1)
163 tmp = tmp + work2(ii) * ct(k, j)
183 integer,
intent(in) :: nu
184 real(kind=
rp),
intent(inout) :: v(1)
185 real(kind=
rp),
intent(in) :: u(nu*nu*nu)
186 real(kind=
rp),
intent(in) :: a(1, nu), bt(nu, 1), ct(nu, 1)
187 real(kind=
rp) :: work(nu**2), work2(nu)
189 integer :: i, j, k, nunu
196 tmp = tmp + a(1,k) * u(k + nu * (j - 1))
204 jj = k + nu * (i - 1)
205 tmp = tmp + work(jj) * bt(k,1)
212 tmp = tmp + work2(k) * ct(k, 1)
223 integer,
parameter :: n = 4
224 integer,
parameter :: nn = n**2
225 real(kind=
rp),
intent(inout) :: v(1)
226 real(kind=
rp),
intent(in) :: u(n*n*n)
227 real(kind=
rp),
intent(in) :: a(1,n), bt(n,1), ct(n,1)
228 real(kind=
rp) :: work(n**2), work2(n)
232 work(j) = a(1,1) * u(1 + n * (j - 1)) &
233 + a(1,2) * u(2 + n * (j - 1)) &
234 + a(1,3) * u(3 + n * (j - 1)) &
235 + a(1,4) * u(4 + n * (j - 1))
239 work2(i) = work(1 + n * (i - 1)) * bt(1,1) &
240 + work(2 + n * (i - 1)) * bt(2,1) &
241 + work(3 + n * (i - 1)) * bt(3,1) &
242 + work(4 + n * (i - 1)) * bt(4,1)
245 v(1) = work2(1) * ct(1, 1) &
246 + work2(2) * ct(2, 1) &
247 + work2(3) * ct(3, 1) &
248 + work2(4) * ct(4, 1)
257 integer,
parameter :: n = 6
258 integer,
parameter :: nn = n**2
259 real(kind=
rp),
intent(inout) :: v(1)
260 real(kind=
rp),
intent(in) :: u(n*n*n)
261 real(kind=
rp),
intent(in) :: a(1,n), bt(n,1), ct(n,1)
262 real(kind=
rp) :: work(n**2), work2(n)
266 work(j) = a(1,1) * u(1 + n * (j - 1)) &
267 + a(1,2) * u(2 + n * (j - 1)) &
268 + a(1,3) * u(3 + n * (j - 1)) &
269 + a(1,4) * u(4 + n * (j - 1)) &
270 + a(1,5) * u(5 + n * (j - 1)) &
271 + a(1,6) * u(6 + n * (j - 1))
275 work2(i) = work(1 + n * (i - 1)) * bt(1,1) &
276 + work(2 + n * (i - 1)) * bt(2,1) &
277 + work(3 + n * (i - 1)) * bt(3,1) &
278 + work(4 + n * (i - 1)) * bt(4,1) &
279 + work(5 + n * (i - 1)) * bt(5,1) &
280 + work(6 + n * (i - 1)) * bt(6,1)
283 v(1) = work2(1) * ct(1, 1) &
284 + work2(2) * ct(2, 1) &
285 + work2(3) * ct(3, 1) &
286 + work2(4) * ct(4, 1) &
287 + work2(5) * ct(5, 1) &
288 + work2(6) * ct(6, 1)
297 integer,
parameter :: n = 8
298 integer,
parameter :: nn = n**2
299 real(kind=
rp),
intent(inout) :: v(1)
300 real(kind=
rp),
intent(in) :: u(n*n*n)
301 real(kind=
rp),
intent(in) :: a(1,n), bt(n,1), ct(n,1)
302 real(kind=
rp) :: work(n**2), work2(n)
306 work(j) = a(1,1) * u(1 + n * (j - 1)) &
307 + a(1,2) * u(2 + n * (j - 1)) &
308 + a(1,3) * u(3 + n * (j - 1)) &
309 + a(1,4) * u(4 + n * (j - 1)) &
310 + a(1,5) * u(5 + n * (j - 1)) &
311 + a(1,6) * u(6 + n * (j - 1)) &
312 + a(1,7) * u(7 + n * (j - 1)) &
313 + a(1,8) * u(8 + n * (j - 1))
317 work2(i) = work(1 + n * (i - 1)) * bt(1,1) &
318 + work(2 + n * (i - 1)) * bt(2,1) &
319 + work(3 + n * (i - 1)) * bt(3,1) &
320 + work(4 + n * (i - 1)) * bt(4,1) &
321 + work(5 + n * (i - 1)) * bt(5,1) &
322 + work(6 + n * (i - 1)) * bt(6,1) &
323 + work(7 + n * (i - 1)) * bt(7,1) &
324 + work(8 + n * (i - 1)) * bt(8,1)
327 v(1) = work2(1) * ct(1, 1) &
328 + work2(2) * ct(2, 1) &
329 + work2(3) * ct(3, 1) &
330 + work2(4) * ct(4, 1) &
331 + work2(5) * ct(5, 1) &
332 + work2(6) * ct(6, 1) &
333 + work2(7) * ct(7, 1) &
334 + work2(8) * ct(8, 1)
344 integer,
parameter :: n = 10
345 integer,
parameter :: nn = n**2
346 real(kind=
rp),
intent(inout) :: v(1)
347 real(kind=
rp),
intent(in) :: u(n*n*n)
348 real(kind=
rp),
intent(in) :: a(1,n), bt(n,1), ct(n,1)
349 real(kind=
rp) :: work(n**2), work2(n)
353 work(j) = a(1,1) * u(1 + n * (j - 1)) &
354 + a(1,2) * u(2 + n * (j - 1)) &
355 + a(1,3) * u(3 + n * (j - 1)) &
356 + a(1,4) * u(4 + n * (j - 1)) &
357 + a(1,5) * u(5 + n * (j - 1)) &
358 + a(1,6) * u(6 + n * (j - 1)) &
359 + a(1,7) * u(7 + n * (j - 1)) &
360 + a(1,8) * u(8 + n * (j - 1)) &
361 + a(1,9) * u(9 + n * (j - 1)) &
362 + a(1,10) * u(10 + n * (j - 1))
366 work2(i) = work(1 + n * (i - 1)) * bt(1,1) &
367 + work(2 + n * (i - 1)) * bt(2,1) &
368 + work(3 + n * (i - 1)) * bt(3,1) &
369 + work(4 + n * (i - 1)) * bt(4,1) &
370 + work(5 + n * (i - 1)) * bt(5,1) &
371 + work(6 + n * (i - 1)) * bt(6,1) &
372 + work(7 + n * (i - 1)) * bt(7,1) &
373 + work(8 + n * (i - 1)) * bt(8,1) &
374 + work(9 + n * (i - 1)) * bt(9,1) &
375 + work(10 + n * (i - 1)) * bt(10,1)
378 v(1) = work2(1) * ct(1, 1) &
379 + work2(2) * ct(2, 1) &
380 + work2(3) * ct(3, 1) &
381 + work2(4) * ct(4, 1) &
382 + work2(5) * ct(5, 1) &
383 + work2(6) * ct(6, 1) &
384 + work2(7) * ct(7, 1) &
385 + work2(8) * ct(8, 1) &
386 + work2(9) * ct(9, 1) &
387 + work2(10) * ct(10, 1)
396 integer,
parameter :: n = 12
397 integer,
parameter :: nn = n**2
398 real(kind=
rp),
intent(inout) :: v(1)
399 real(kind=
rp),
intent(in) :: u(n*n*n)
400 real(kind=
rp),
intent(in) :: a(1,n), bt(n,1), ct(n,1)
401 real(kind=
rp) :: work(n**2), work2(n)
405 work(j) = a(1,1) * u(1 + n * (j - 1)) &
406 + a(1,2) * u(2 + n * (j - 1)) &
407 + a(1,3) * u(3 + n * (j - 1)) &
408 + a(1,4) * u(4 + n * (j - 1)) &
409 + a(1,5) * u(5 + n * (j - 1)) &
410 + a(1,6) * u(6 + n * (j - 1)) &
411 + a(1,7) * u(7 + n * (j - 1)) &
412 + a(1,8) * u(8 + n * (j - 1)) &
413 + a(1,9) * u(9 + n * (j - 1)) &
414 + a(1,10) * u(10 + n * (j - 1)) &
415 + a(1,11) * u(11 + n * (j - 1)) &
416 + a(1,12) * u(12 + n * (j - 1))
420 work2(i) = work(1 + n * (i - 1)) * bt(1,1) &
421 + work(2 + n * (i - 1)) * bt(2,1) &
422 + work(3 + n * (i - 1)) * bt(3,1) &
423 + work(4 + n * (i - 1)) * bt(4,1) &
424 + work(5 + n * (i - 1)) * bt(5,1) &
425 + work(6 + n * (i - 1)) * bt(6,1) &
426 + work(7 + n * (i - 1)) * bt(7,1) &
427 + work(8 + n * (i - 1)) * bt(8,1) &
428 + work(9 + n * (i - 1)) * bt(9,1) &
429 + work(10 + n * (i - 1)) * bt(10,1) &
430 + work(11 + n * (i - 1)) * bt(11,1) &
431 + work(12 + n * (i - 1)) * bt(12,1)
434 v(1) = work2(1) * ct(1, 1) &
435 + work2(2) * ct(2, 1) &
436 + work2(3) * ct(3, 1) &
437 + work2(4) * ct(4, 1) &
438 + work2(5) * ct(5, 1) &
439 + work2(6) * ct(6, 1) &
440 + work2(7) * ct(7, 1) &
441 + work2(8) * ct(8, 1) &
442 + work2(9) * ct(9, 1) &
443 + work2(10) * ct(10, 1) &
444 + work2(11) * ct(11, 1) &
445 + work2(12) * ct(12, 1)
461 integer,
intent(in) :: n
462 real(kind=
rp),
intent(inout) :: v(n*n*n), u(n*n*n)
463 real(kind=
rp),
intent(inout) :: a(n,n), bt(n,n), ct(n,n)
464 real(kind=
rp) :: work(n**3), work2(n**3), tmp
465 integer :: i, j, l, k
466 integer :: ii, jj, nn
475 tmp = tmp + a(i,k) * u(k + n * (j - 1))
484 ii = l + n * (j - 1) + nn * (i - 1)
487 tmp = tmp + work(l + n * (k - 1) + nn * (i - 1)) * bt(k,j)
496 jj = i + nn * (j - 1)
499 tmp = tmp + work2(i + nn * (k - 1)) * ct(k, j)
512 integer,
parameter :: n = 14
513 integer,
parameter :: nn = n**2
514 real(kind=
rp),
intent(inout) :: v(n*n*n), u(n*n*n)
515 real(kind=
rp),
intent(inout) :: a(n,n), bt(n,n), ct(n,n)
516 real(kind=
rp) :: work(n**3), work2(n**3)
523 work(ii) = a(i,1) * u(1 + n * (j - 1)) &
524 + a(i,2) * u(2 + n * (j - 1)) &
525 + a(i,3) * u(3 + n * (j - 1)) &
526 + a(i,4) * u(4 + n * (j - 1)) &
527 + a(i,5) * u(5 + n * (j - 1)) &
528 + a(i,6) * u(6 + n * (j - 1)) &
529 + a(i,7) * u(7 + n * (j - 1)) &
530 + a(i,8) * u(8 + n * (j - 1)) &
531 + a(i,9) * u(9 + n * (j - 1)) &
532 + a(i,10) * u(10 + n * (j - 1)) &
533 + a(i,11) * u(11 + n * (j - 1)) &
534 + a(i,12) * u(12 + n * (j - 1)) &
535 + a(i,13) * u(13 + n * (j - 1)) &
536 + a(i,14) * u(14 + n * (j - 1))
543 ii = l + n * (j - 1) + nn * (i - 1)
544 work2(ii) = work(l + n * (1 - 1) + nn * (i - 1)) * bt(1,j) &
545 + work(l + n * (2 - 1) + nn * (i - 1)) * bt(2,j) &
546 + work(l + n * (3 - 1) + nn * (i - 1)) * bt(3,j) &
547 + work(l + n * (4 - 1) + nn * (i - 1)) * bt(4,j) &
548 + work(l + n * (5 - 1) + nn * (i - 1)) * bt(5,j) &
549 + work(l + n * (6 - 1) + nn * (i - 1)) * bt(6,j) &
550 + work(l + n * (7 - 1) + nn * (i - 1)) * bt(7,j) &
551 + work(l + n * (8 - 1) + nn * (i - 1)) * bt(8,j) &
552 + work(l + n * (9 - 1) + nn * (i - 1)) * bt(9,j) &
553 + work(l + n * (10 - 1) + nn * (i - 1)) * bt(10,j) &
554 + work(l + n * (11 - 1) + nn * (i - 1)) * bt(11,j) &
555 + work(l + n * (12 - 1) + nn * (i - 1)) * bt(12,j) &
556 + work(l + n * (13 - 1) + nn * (i - 1)) * bt(13,j) &
557 + work(l + n * (14 - 1) + nn * (i - 1)) * bt(14,j)
564 jj = i + nn * (j - 1)
565 v(jj) = work2(i + nn * (1 - 1)) * ct(1, j) &
566 + work2(i + nn * (2 - 1)) * ct(2, j) &
567 + work2(i + nn * (3 - 1)) * ct(3, j) &
568 + work2(i + nn * (4 - 1)) * ct(4, j) &
569 + work2(i + nn * (5 - 1)) * ct(5, j) &
570 + work2(i + nn * (6 - 1)) * ct(6, j) &
571 + work2(i + nn * (7 - 1)) * ct(7, j) &
572 + work2(i + nn * (8 - 1)) * ct(8, j) &
573 + work2(i + nn * (9 - 1)) * ct(9, j) &
574 + work2(i + nn * (10 - 1)) * ct(10, j) &
575 + work2(i + nn * (11 - 1)) * ct(11, j) &
576 + work2(i + nn * (12 - 1)) * ct(12, j) &
577 + work2(i + nn * (13 - 1)) * ct(13, j) &
578 + work2(i + nn * (14 - 1)) * ct(14, j)
589 integer,
parameter :: n = 13
590 integer,
parameter :: nn = n**2
591 real(kind=
rp),
intent(inout) :: v(n*n*n), u(n*n*n)
592 real(kind=
rp),
intent(inout) :: a(n,n), bt(n,n), ct(n,n)
593 real(kind=
rp) :: work(n**3), work2(n**3)
600 work(ii) = a(i,1) * u(1 + n * (j - 1)) &
601 + a(i,2) * u(2 + n * (j - 1)) &
602 + a(i,3) * u(3 + n * (j - 1)) &
603 + a(i,4) * u(4 + n * (j - 1)) &
604 + a(i,5) * u(5 + n * (j - 1)) &
605 + a(i,6) * u(6 + n * (j - 1)) &
606 + a(i,7) * u(7 + n * (j - 1)) &
607 + a(i,8) * u(8 + n * (j - 1)) &
608 + a(i,9) * u(9 + n * (j - 1)) &
609 + a(i,10) * u(10 + n * (j - 1)) &
610 + a(i,11) * u(11 + n * (j - 1)) &
611 + a(i,12) * u(12 + n * (j - 1)) &
612 + a(i,13) * u(13 + n * (j - 1))
619 ii = l + n * (j - 1) + nn * (i - 1)
620 work2(ii) = work(l + n * (1 - 1) + nn * (i - 1)) * bt(1,j) &
621 + work(l + n * (2 - 1) + nn * (i - 1)) * bt(2,j) &
622 + work(l + n * (3 - 1) + nn * (i - 1)) * bt(3,j) &
623 + work(l + n * (4 - 1) + nn * (i - 1)) * bt(4,j) &
624 + work(l + n * (5 - 1) + nn * (i - 1)) * bt(5,j) &
625 + work(l + n * (6 - 1) + nn * (i - 1)) * bt(6,j) &
626 + work(l + n * (7 - 1) + nn * (i - 1)) * bt(7,j) &
627 + work(l + n * (8 - 1) + nn * (i - 1)) * bt(8,j) &
628 + work(l + n * (9 - 1) + nn * (i - 1)) * bt(9,j) &
629 + work(l + n * (10 - 1) + nn * (i - 1)) * bt(10,j) &
630 + work(l + n * (11 - 1) + nn * (i - 1)) * bt(11,j) &
631 + work(l + n * (12 - 1) + nn * (i - 1)) * bt(12,j) &
632 + work(l + n * (13 - 1) + nn * (i - 1)) * bt(13,j)
639 jj = i + nn * (j - 1)
640 v(jj) = work2(i + nn * (1 - 1)) * ct(1, j) &
641 + work2(i + nn * (2 - 1)) * ct(2, j) &
642 + work2(i + nn * (3 - 1)) * ct(3, j) &
643 + work2(i + nn * (4 - 1)) * ct(4, j) &
644 + work2(i + nn * (5 - 1)) * ct(5, j) &
645 + work2(i + nn * (6 - 1)) * ct(6, j) &
646 + work2(i + nn * (7 - 1)) * ct(7, j) &
647 + work2(i + nn * (8 - 1)) * ct(8, j) &
648 + work2(i + nn * (9 - 1)) * ct(9, j) &
649 + work2(i + nn * (10 - 1)) * ct(10, j) &
650 + work2(i + nn * (11 - 1)) * ct(11, j) &
651 + work2(i + nn * (12 - 1)) * ct(12, j) &
652 + work2(i + nn * (13 - 1)) * ct(13, j)
663 integer,
parameter :: n = 12
664 integer,
parameter :: nn = n**2
665 real(kind=
rp),
intent(inout) :: v(n*n*n), u(n*n*n)
666 real(kind=
rp),
intent(inout) :: a(n,n), bt(n,n), ct(n,n)
667 real(kind=
rp) :: work(n**3), work2(n**3)
674 work(ii) = a(i,1) * u(1 + n * (j - 1)) &
675 + a(i,2) * u(2 + n * (j - 1)) &
676 + a(i,3) * u(3 + n * (j - 1)) &
677 + a(i,4) * u(4 + n * (j - 1)) &
678 + a(i,5) * u(5 + n * (j - 1)) &
679 + a(i,6) * u(6 + n * (j - 1)) &
680 + a(i,7) * u(7 + n * (j - 1)) &
681 + a(i,8) * u(8 + n * (j - 1)) &
682 + a(i,9) * u(9 + n * (j - 1)) &
683 + a(i,10) * u(10 + n * (j - 1)) &
684 + a(i,11) * u(11 + n * (j - 1)) &
685 + a(i,12) * u(12 + n * (j - 1))
692 ii = l + n * (j - 1) + nn * (i - 1)
693 work2(ii) = work(l + n * (1 - 1) + nn * (i - 1)) * bt(1,j) &
694 + work(l + n * (2 - 1) + nn * (i - 1)) * bt(2,j) &
695 + work(l + n * (3 - 1) + nn * (i - 1)) * bt(3,j) &
696 + work(l + n * (4 - 1) + nn * (i - 1)) * bt(4,j) &
697 + work(l + n * (5 - 1) + nn * (i - 1)) * bt(5,j) &
698 + work(l + n * (6 - 1) + nn * (i - 1)) * bt(6,j) &
699 + work(l + n * (7 - 1) + nn * (i - 1)) * bt(7,j) &
700 + work(l + n * (8 - 1) + nn * (i - 1)) * bt(8,j) &
701 + work(l + n * (9 - 1) + nn * (i - 1)) * bt(9,j) &
702 + work(l + n * (10 - 1) + nn * (i - 1)) * bt(10,j) &
703 + work(l + n * (11 - 1) + nn * (i - 1)) * bt(11,j) &
704 + work(l + n * (12 - 1) + nn * (i - 1)) * bt(12,j)
711 jj = i + nn * (j - 1)
712 v(jj) = work2(i + nn * (1 - 1)) * ct(1, j) &
713 + work2(i + nn * (2 - 1)) * ct(2, j) &
714 + work2(i + nn * (3 - 1)) * ct(3, j) &
715 + work2(i + nn * (4 - 1)) * ct(4, j) &
716 + work2(i + nn * (5 - 1)) * ct(5, j) &
717 + work2(i + nn * (6 - 1)) * ct(6, j) &
718 + work2(i + nn * (7 - 1)) * ct(7, j) &
719 + work2(i + nn * (8 - 1)) * ct(8, j) &
720 + work2(i + nn * (9 - 1)) * ct(9, j) &
721 + work2(i + nn * (10 - 1)) * ct(10, j) &
722 + work2(i + nn * (11 - 1)) * ct(11, j) &
723 + work2(i + nn * (12 - 1)) * ct(12, j)
734 integer,
parameter :: n = 11
735 integer,
parameter :: nn = n**2
736 real(kind=
rp),
intent(inout) :: v(n*n*n), u(n*n*n)
737 real(kind=
rp),
intent(inout) :: a(n,n), bt(n,n), ct(n,n)
738 real(kind=
rp) :: work(n**3), work2(n**3)
745 work(ii) = a(i,1) * u(1 + n * (j - 1)) &
746 + a(i,2) * u(2 + n * (j - 1)) &
747 + a(i,3) * u(3 + n * (j - 1)) &
748 + a(i,4) * u(4 + n * (j - 1)) &
749 + a(i,5) * u(5 + n * (j - 1)) &
750 + a(i,6) * u(6 + n * (j - 1)) &
751 + a(i,7) * u(7 + n * (j - 1)) &
752 + a(i,8) * u(8 + n * (j - 1)) &
753 + a(i,9) * u(9 + n * (j - 1)) &
754 + a(i,10) * u(10 + n * (j - 1)) &
755 + a(i,11) * u(11 + n * (j - 1))
762 ii = l + n * (j - 1) + nn * (i - 1)
763 work2(ii) = work(l + n * (1 - 1) + nn * (i - 1)) * bt(1,j) &
764 + work(l + n * (2 - 1) + nn * (i - 1)) * bt(2,j) &
765 + work(l + n * (3 - 1) + nn * (i - 1)) * bt(3,j) &
766 + work(l + n * (4 - 1) + nn * (i - 1)) * bt(4,j) &
767 + work(l + n * (5 - 1) + nn * (i - 1)) * bt(5,j) &
768 + work(l + n * (6 - 1) + nn * (i - 1)) * bt(6,j) &
769 + work(l + n * (7 - 1) + nn * (i - 1)) * bt(7,j) &
770 + work(l + n * (8 - 1) + nn * (i - 1)) * bt(8,j) &
771 + work(l + n * (9 - 1) + nn * (i - 1)) * bt(9,j) &
772 + work(l + n * (10 - 1) + nn * (i - 1)) * bt(10,j) &
773 + work(l + n * (11 - 1) + nn * (i - 1)) * bt(11,j)
780 jj = i + nn * (j - 1)
781 v(jj) = work2(i + nn * (1 - 1)) * ct(1, j) &
782 + work2(i + nn * (2 - 1)) * ct(2, j) &
783 + work2(i + nn * (3 - 1)) * ct(3, j) &
784 + work2(i + nn * (4 - 1)) * ct(4, j) &
785 + work2(i + nn * (5 - 1)) * ct(5, j) &
786 + work2(i + nn * (6 - 1)) * ct(6, j) &
787 + work2(i + nn * (7 - 1)) * ct(7, j) &
788 + work2(i + nn * (8 - 1)) * ct(8, j) &
789 + work2(i + nn * (9 - 1)) * ct(9, j) &
790 + work2(i + nn * (10 - 1)) * ct(10, j) &
791 + work2(i + nn * (11 - 1)) * ct(11, j)
802 integer,
parameter :: n = 10
803 integer,
parameter :: nn = n**2
804 real(kind=
rp),
intent(inout) :: v(n*n*n), u(n*n*n)
805 real(kind=
rp),
intent(inout) :: a(n,n), bt(n,n), ct(n,n)
806 real(kind=
rp) :: work(n**3), work2(n**3)
813 work(ii) = a(i,1) * u(1 + n * (j - 1)) &
814 + a(i,2) * u(2 + n * (j - 1)) &
815 + a(i,3) * u(3 + n * (j - 1)) &
816 + a(i,4) * u(4 + n * (j - 1)) &
817 + a(i,5) * u(5 + n * (j - 1)) &
818 + a(i,6) * u(6 + n * (j - 1)) &
819 + a(i,7) * u(7 + n * (j - 1)) &
820 + a(i,8) * u(8 + n * (j - 1)) &
821 + a(i,9) * u(9 + n * (j - 1)) &
822 + a(i,10) * u(10 + n * (j - 1))
829 ii = l + n * (j - 1) + nn * (i - 1)
830 work2(ii) = work(l + n * (1 - 1) + nn * (i - 1)) * bt(1,j) &
831 + work(l + n * (2 - 1) + nn * (i - 1)) * bt(2,j) &
832 + work(l + n * (3 - 1) + nn * (i - 1)) * bt(3,j) &
833 + work(l + n * (4 - 1) + nn * (i - 1)) * bt(4,j) &
834 + work(l + n * (5 - 1) + nn * (i - 1)) * bt(5,j) &
835 + work(l + n * (6 - 1) + nn * (i - 1)) * bt(6,j) &
836 + work(l + n * (7 - 1) + nn * (i - 1)) * bt(7,j) &
837 + work(l + n * (8 - 1) + nn * (i - 1)) * bt(8,j) &
838 + work(l + n * (9 - 1) + nn * (i - 1)) * bt(9,j) &
839 + work(l + n * (10 - 1) + nn * (i - 1)) * bt(10,j)
846 jj = i + nn * (j - 1)
847 v(jj) = work2(i + nn * (1 - 1)) * ct(1, j) &
848 + work2(i + nn * (2 - 1)) * ct(2, j) &
849 + work2(i + nn * (3 - 1)) * ct(3, j) &
850 + work2(i + nn * (4 - 1)) * ct(4, j) &
851 + work2(i + nn * (5 - 1)) * ct(5, j) &
852 + work2(i + nn * (6 - 1)) * ct(6, j) &
853 + work2(i + nn * (7 - 1)) * ct(7, j) &
854 + work2(i + nn * (8 - 1)) * ct(8, j) &
855 + work2(i + nn * (9 - 1)) * ct(9, j) &
856 + work2(i + nn * (10 - 1)) * ct(10, j)
867 integer,
parameter :: n = 9
868 integer,
parameter :: nn = n**2
869 real(kind=
rp),
intent(inout) :: v(n*n*n), u(n*n*n)
870 real(kind=
rp),
intent(inout) :: a(n,n), bt(n,n), ct(n,n)
871 real(kind=
rp) :: work(n**3), work2(n**3)
878 work(ii) = a(i,1) * u(1 + n * (j - 1)) &
879 + a(i,2) * u(2 + n * (j - 1)) &
880 + a(i,3) * u(3 + n * (j - 1)) &
881 + a(i,4) * u(4 + n * (j - 1)) &
882 + a(i,5) * u(5 + n * (j - 1)) &
883 + a(i,6) * u(6 + n * (j - 1)) &
884 + a(i,7) * u(7 + n * (j - 1)) &
885 + a(i,8) * u(8 + n * (j - 1)) &
886 + a(i,9) * u(9 + n * (j - 1))
893 ii = l + n * (j - 1) + nn * (i - 1)
894 work2(ii) = work(l + n * (1 - 1) + nn * (i - 1)) * bt(1,j) &
895 + work(l + n * (2 - 1) + nn * (i - 1)) * bt(2,j) &
896 + work(l + n * (3 - 1) + nn * (i - 1)) * bt(3,j) &
897 + work(l + n * (4 - 1) + nn * (i - 1)) * bt(4,j) &
898 + work(l + n * (5 - 1) + nn * (i - 1)) * bt(5,j) &
899 + work(l + n * (6 - 1) + nn * (i - 1)) * bt(6,j) &
900 + work(l + n * (7 - 1) + nn * (i - 1)) * bt(7,j) &
901 + work(l + n * (8 - 1) + nn * (i - 1)) * bt(8,j) &
902 + work(l + n * (9 - 1) + nn * (i - 1)) * bt(9,j)
909 jj = i + nn * (j - 1)
910 v(jj) = work2(i + nn * (1 - 1)) * ct(1, j) &
911 + work2(i + nn * (2 - 1)) * ct(2, j) &
912 + work2(i + nn * (3 - 1)) * ct(3, j) &
913 + work2(i + nn * (4 - 1)) * ct(4, j) &
914 + work2(i + nn * (5 - 1)) * ct(5, j) &
915 + work2(i + nn * (6 - 1)) * ct(6, j) &
916 + work2(i + nn * (7 - 1)) * ct(7, j) &
917 + work2(i + nn * (8 - 1)) * ct(8, j) &
918 + work2(i + nn * (9 - 1)) * ct(9, j)
929 integer,
parameter :: n = 8
930 integer,
parameter :: nn = n**2
931 real(kind=
rp),
intent(inout) :: v(n*n*n), u(n*n*n)
932 real(kind=
rp),
intent(inout) :: a(n,n), bt(n,n), ct(n,n)
933 real(kind=
rp) :: work(n**3), work2(n**3)
940 work(ii) = a(i,1) * u(1 + n * (j - 1)) &
941 + a(i,2) * u(2 + n * (j - 1)) &
942 + a(i,3) * u(3 + n * (j - 1)) &
943 + a(i,4) * u(4 + n * (j - 1)) &
944 + a(i,5) * u(5 + n * (j - 1)) &
945 + a(i,6) * u(6 + n * (j - 1)) &
946 + a(i,7) * u(7 + n * (j - 1)) &
947 + a(i,8) * u(8 + n * (j - 1))
954 ii = l + n * (j - 1) + nn * (i - 1)
955 work2(ii) = work(l + n * (1 - 1) + nn * (i - 1)) * bt(1,j) &
956 + work(l + n * (2 - 1) + nn * (i - 1)) * bt(2,j) &
957 + work(l + n * (3 - 1) + nn * (i - 1)) * bt(3,j) &
958 + work(l + n * (4 - 1) + nn * (i - 1)) * bt(4,j) &
959 + work(l + n * (5 - 1) + nn * (i - 1)) * bt(5,j) &
960 + work(l + n * (6 - 1) + nn * (i - 1)) * bt(6,j) &
961 + work(l + n * (7 - 1) + nn * (i - 1)) * bt(7,j) &
962 + work(l + n * (8 - 1) + nn * (i - 1)) * bt(8,j)
969 jj = i + nn * (j - 1)
970 v(jj) = work2(i + nn * (1 - 1)) * ct(1, j) &
971 + work2(i + nn * (2 - 1)) * ct(2, j) &
972 + work2(i + nn * (3 - 1)) * ct(3, j) &
973 + work2(i + nn * (4 - 1)) * ct(4, j) &
974 + work2(i + nn * (5 - 1)) * ct(5, j) &
975 + work2(i + nn * (6 - 1)) * ct(6, j) &
976 + work2(i + nn * (7 - 1)) * ct(7, j) &
977 + work2(i + nn * (8 - 1)) * ct(8, j)
988 integer,
parameter :: n = 7
989 integer,
parameter :: nn = n**2
990 real(kind=
rp),
intent(inout) :: v(n*n*n), u(n*n*n)
991 real(kind=
rp),
intent(inout) :: a(n,n), bt(n,n), ct(n,n)
992 real(kind=
rp) :: work(n**3), work2(n**3)
999 work(ii) = a(i,1) * u(1 + n * (j - 1)) &
1000 + a(i,2) * u(2 + n * (j - 1)) &
1001 + a(i,3) * u(3 + n * (j - 1)) &
1002 + a(i,4) * u(4 + n * (j - 1)) &
1003 + a(i,5) * u(5 + n * (j - 1)) &
1004 + a(i,6) * u(6 + n * (j - 1)) &
1005 + a(i,7) * u(7 + n * (j - 1))
1012 ii = l + n * (j - 1) + nn * (i - 1)
1013 work2(ii) = work(l + n * (1 - 1) + nn * (i - 1)) * bt(1,j) &
1014 + work(l + n * (2 - 1) + nn * (i - 1)) * bt(2,j) &
1015 + work(l + n * (3 - 1) + nn * (i - 1)) * bt(3,j) &
1016 + work(l + n * (4 - 1) + nn * (i - 1)) * bt(4,j) &
1017 + work(l + n * (5 - 1) + nn * (i - 1)) * bt(5,j) &
1018 + work(l + n * (6 - 1) + nn * (i - 1)) * bt(6,j) &
1019 + work(l + n * (7 - 1) + nn * (i - 1)) * bt(7,j)
1026 jj = i + nn * (j - 1)
1027 v(jj) = work2(i + nn * (1 - 1)) * ct(1, j) &
1028 + work2(i + nn * (2 - 1)) * ct(2, j) &
1029 + work2(i + nn * (3 - 1)) * ct(3, j) &
1030 + work2(i + nn * (4 - 1)) * ct(4, j) &
1031 + work2(i + nn * (5 - 1)) * ct(5, j) &
1032 + work2(i + nn * (6 - 1)) * ct(6, j) &
1033 + work2(i + nn * (7 - 1)) * ct(7, j)
1044 integer,
parameter :: n = 6
1045 integer,
parameter :: nn = n**2
1046 real(kind=
rp),
intent(inout) :: v(n*n*n), u(n*n*n)
1047 real(kind=
rp),
intent(inout) :: a(n,n), bt(n,n), ct(n,n)
1048 real(kind=
rp) :: work(n**3), work2(n**3)
1054 ii = i + n * (j - 1)
1055 work(ii) = a(i,1) * u(1 + n * (j - 1)) &
1056 + a(i,2) * u(2 + n * (j - 1)) &
1057 + a(i,3) * u(3 + n * (j - 1)) &
1058 + a(i,4) * u(4 + n * (j - 1)) &
1059 + a(i,5) * u(5 + n * (j - 1)) &
1060 + a(i,6) * u(6 + n * (j - 1))
1067 ii = l + n * (j - 1) + nn * (i - 1)
1068 work2(ii) = work(l + n * (1 - 1) + nn * (i - 1)) * bt(1,j) &
1069 + work(l + n * (2 - 1) + nn * (i - 1)) * bt(2,j) &
1070 + work(l + n * (3 - 1) + nn * (i - 1)) * bt(3,j) &
1071 + work(l + n * (4 - 1) + nn * (i - 1)) * bt(4,j) &
1072 + work(l + n * (5 - 1) + nn * (i - 1)) * bt(5,j) &
1073 + work(l + n * (6 - 1) + nn * (i - 1)) * bt(6,j)
1080 jj = i + nn * (j - 1)
1081 v(jj) = work2(i + nn * (1 - 1)) * ct(1, j) &
1082 + work2(i + nn * (2 - 1)) * ct(2, j) &
1083 + work2(i + nn * (3 - 1)) * ct(3, j) &
1084 + work2(i + nn * (4 - 1)) * ct(4, j) &
1085 + work2(i + nn * (5 - 1)) * ct(5, j) &
1086 + work2(i + nn * (6 - 1)) * ct(6, j)
1097 integer,
parameter :: n = 5
1098 integer,
parameter :: nn = n**2
1099 real(kind=
rp),
intent(inout) :: v(n*n*n), u(n*n*n)
1100 real(kind=
rp),
intent(inout) :: a(n,n), bt(n,n), ct(n,n)
1101 real(kind=
rp) :: work(n**3), work2(n**3)
1107 ii = i + n * (j - 1)
1108 work(ii) = a(i,1) * u(1 + n * (j - 1)) &
1109 + a(i,2) * u(2 + n * (j - 1)) &
1110 + a(i,3) * u(3 + n * (j - 1)) &
1111 + a(i,4) * u(4 + n * (j - 1)) &
1112 + a(i,5) * u(5 + n * (j - 1))
1119 ii = l + n * (j - 1) + nn * (i - 1)
1120 work2(ii) = work(l + n * (1 - 1) + nn * (i - 1)) * bt(1,j) &
1121 + work(l + n * (2 - 1) + nn * (i - 1)) * bt(2,j) &
1122 + work(l + n * (3 - 1) + nn * (i - 1)) * bt(3,j) &
1123 + work(l + n * (4 - 1) + nn * (i - 1)) * bt(4,j) &
1124 + work(l + n * (5 - 1) + nn * (i - 1)) * bt(5,j)
1131 jj = i + nn * (j - 1)
1132 v(jj) = work2(i + nn * (1 - 1)) * ct(1, j) &
1133 + work2(i + nn * (2 - 1)) * ct(2, j) &
1134 + work2(i + nn * (3 - 1)) * ct(3, j) &
1135 + work2(i + nn * (4 - 1)) * ct(4, j) &
1136 + work2(i + nn * (5 - 1)) * ct(5, j)
1147 integer,
parameter :: n = 4
1148 integer,
parameter :: nn = n**2
1149 real(kind=
rp),
intent(inout) :: v(n*n*n), u(n*n*n)
1150 real(kind=
rp),
intent(inout) :: a(n,n), bt(n,n), ct(n,n)
1151 real(kind=
rp) :: work(n**3), work2(n**3)
1157 ii = i + n * (j - 1)
1158 work(ii) = a(i,1) * u(1 + n * (j - 1)) &
1159 + a(i,2) * u(2 + n * (j - 1)) &
1160 + a(i,3) * u(3 + n * (j - 1)) &
1161 + a(i,4) * u(4 + n * (j - 1))
1168 ii = l + n * (j - 1) + nn * (i - 1)
1169 work2(ii) = work(l + n * (1 - 1) + nn * (i - 1)) * bt(1,j) &
1170 + work(l + n * (2 - 1) + nn * (i - 1)) * bt(2,j) &
1171 + work(l + n * (3 - 1) + nn * (i - 1)) * bt(3,j) &
1172 + work(l + n * (4 - 1) + nn * (i - 1)) * bt(4,j)
1179 jj = i + nn * (j - 1)
1180 v(jj) = work2(i + nn * (1 - 1)) * ct(1, j) &
1181 + work2(i + nn * (2 - 1)) * ct(2, j) &
1182 + work2(i + nn * (3 - 1)) * ct(3, j) &
1183 + work2(i + nn * (4 - 1)) * ct(4, j)
1194 integer,
parameter :: n = 3
1195 integer,
parameter :: nn = n**2
1196 real(kind=
rp),
intent(inout) :: v(n*n*n), u(n*n*n)
1197 real(kind=
rp),
intent(inout) :: a(n,n), bt(n,n), ct(n,n)
1198 real(kind=
rp) :: work(n**3), work2(n**3)
1204 ii = i + n * (j - 1)
1205 work(ii) = a(i,1) * u(1 + n * (j - 1)) &
1206 + a(i,2) * u(2 + n * (j - 1)) &
1207 + a(i,3) * u(3 + n * (j - 1))
1214 ii = l + n * (j - 1) + nn * (i - 1)
1215 work2(ii) = work(l + n * (1 - 1) + nn * (i - 1)) * bt(1,j) &
1216 + work(l + n * (2 - 1) + nn * (i - 1)) * bt(2,j) &
1217 + work(l + n * (3 - 1) + nn * (i - 1)) * bt(3,j)
1224 jj = i + nn * (j - 1)
1225 v(jj) = work2(i + nn * (1 - 1)) * ct(1, j) &
1226 + work2(i + nn * (2 - 1)) * ct(2, j) &
1227 + work2(i + nn * (3 - 1)) * ct(3, j)
1238 integer,
parameter :: n = 2
1239 integer,
parameter :: nn = n**2
1240 real(kind=
rp),
intent(inout) :: v(n*n*n), u(n*n*n)
1241 real(kind=
rp),
intent(inout) :: a(n,n), bt(n,n), ct(n,n)
1242 real(kind=
rp) :: work(n**3), work2(n**3)
1248 ii = i + n * (j - 1)
1249 work(ii) = a(i,1) * u(1 + n * (j - 1)) &
1250 + a(i,2) * u(2 + n * (j - 1))
1257 ii = l + n * (j - 1) + nn * (i - 1)
1258 work2(ii) = work(l + n * (1 - 1) + nn * (i - 1)) * bt(1,j) &
1259 + work(l + n * (2 - 1) + nn * (i - 1)) * bt(2,j)
1266 jj = i + nn * (j - 1)
1267 v(jj) = work2(i + nn * (1 - 1)) * ct(1, j) &
1268 + work2(i + nn * (2 - 1)) * ct(2, j)
1292 integer,
intent(in) :: nv, nu, nelv
1293 real(kind=
rp),
intent(inout) :: v(nv*nv*nv, nelv)
1294 real(kind=
rp),
intent(in) :: u(nu*nu*nu, nelv)
1295 real(kind=
rp),
intent(in) :: a(nv, nu), bt(nu, nv), ct(nu, nv)
1297 if (nu .eq. 2 .and. nv .eq. 4)
then
1299 else if (nu .eq. 4)
then
1301 else if (nu .eq. 8)
then
1303 else if (nu .eq. 12)
then
1324 integer,
intent(in) :: nv, nu, nelv
1325 real(kind=
rp),
intent(inout) :: v(nv*nv*nv, nelv)
1326 real(kind=
rp),
intent(in) :: u(nu*nu*nu, nelv)
1327 real(kind=
rp),
intent(in) :: a(nv, nu), bt(nu, nv), ct(nu, nv)
1328 real(kind=
rp) :: work(nu**2*nv), work2(nu*nv**2), c
1329 integer :: ie, i, j, k, l, ii, jj, kk
1330 integer :: nunu, nvnu, nvnv
1343 work(i + ii) = a(i,1) * c
1351 work(i + ii) = work(i + ii) + a(i,k) * c
1358 ii = nv * (j - 1) + nvnv * (i - 1)
1362 work2(l + ii) = work(l + jj) * c
1366 kk = nv * (k - 1) + nvnu * (i - 1)
1371 work2(l + ii) = work2(l + ii) + work(l + kk) * c
1381 v(i + jj, ie) = work2(i) * c
1390 v(i + jj, ie) = v(i + jj, ie) + work2(i + ii) * c
1403 integer,
parameter :: nu = 2
1404 integer,
parameter :: nv = 4
1405 integer,
parameter :: nunu = 4
1406 integer,
parameter :: nvnu = 8
1407 integer,
parameter :: nvnv = 16
1408 integer,
intent(in) :: nelv
1409 real(kind=
rp),
intent(inout) :: v(nv*nv*nv, nelv)
1410 real(kind=
rp),
intent(in) :: u(nu*nu*nu, nelv)
1411 real(kind=
rp),
intent(in) :: a(nv, nu), bt(nu, nv), ct(nu, nv)
1412 real(kind=
rp) :: work(nu**2*nv), work2(nu*nv**2), tmp
1413 integer :: ie, i, j, k, l, ii, jj
1419 ii = i + nv * (j - 1)
1420 work(ii) = a(i,1) * u(1 + nu * (j - 1), ie) &
1421 + a(i,2) * u(2 + nu * (j - 1), ie)
1428 ii = l + nv * (j - 1) + nvnv * (i - 1)
1431 jj = l + nv * (k - 1) + nvnu * (i - 1)
1432 tmp = tmp + work(jj) * bt(k,j)
1441 jj = i + nvnv * (j - 1)
1442 v(jj, ie) = work2(i + nvnv * (1 - 1)) * ct(1, j) &
1443 + work2(i + nvnv * (2 - 1)) * ct(2, j)
1455 integer,
parameter :: nu = 4
1456 integer,
parameter :: nunu = 16
1457 integer,
intent(in) :: nv, nelv
1458 real(kind=
rp),
intent(inout) :: v(nv*nv*nv, nelv)
1459 real(kind=
rp),
intent(in) :: u(nu*nu*nu, nelv)
1460 real(kind=
rp),
intent(in) :: a(nv, nu), bt(nu, nv), ct(nu, nv)
1461 real(kind=
rp) :: work(nu**2*nv), work2(nu*nv**2), tmp
1462 integer :: ie, i, j, k, l, ii, jj
1463 integer :: nvnu, nvnv
1472 ii = i + nv * (j - 1)
1473 work(ii) = a(i,1) * u(1 + nu * (j - 1), ie) &
1474 + a(i,2) * u(2 + nu * (j - 1), ie) &
1475 + a(i,3) * u(3 + nu * (j - 1), ie) &
1476 + a(i,4) * u(4 + nu * (j - 1), ie)
1483 ii = l + nv * (j - 1) + nvnv * (i - 1)
1486 jj = l + nv * (k - 1) + nvnu * (i - 1)
1487 tmp = tmp + work(jj) * bt(k,j)
1496 jj = i + nvnv * (j - 1)
1497 v(jj, ie) = work2(i + nvnv * (1 - 1)) * ct(1, j) &
1498 + work2(i + nvnv * (2 - 1)) * ct(2, j) &
1499 + work2(i + nvnv * (3 - 1)) * ct(3, j) &
1500 + work2(i + nvnv * (4 - 1)) * ct(4, j)
1516 integer,
parameter :: nu = 8
1517 integer,
parameter :: nunu = 64
1518 integer,
intent(in) :: nv, nelv
1519 real(kind=
rp),
intent(inout) :: v(nv*nv*nv, nelv)
1520 real(kind=
rp),
intent(in) :: u(nu*nu*nu, nelv)
1521 real(kind=
rp),
intent(in) :: a(nv, nu), bt(nu, nv), ct(nu, nv)
1522 real(kind=
rp) :: work(nu**2*nv), work2(nu*nv**2)
1523 integer :: ie, i, j, l, ii, jj
1524 integer :: nvnu, nvnv
1533 ii = i + nv * (j - 1)
1534 work(ii) = a(i,1) * u(1 + nu * (j - 1), ie) &
1535 + a(i,2) * u(2 + nu * (j - 1), ie) &
1536 + a(i,3) * u(3 + nu * (j - 1), ie) &
1537 + a(i,4) * u(4 + nu * (j - 1), ie) &
1538 + a(i,5) * u(5 + nu * (j - 1), ie) &
1539 + a(i,6) * u(6 + nu * (j - 1), ie) &
1540 + a(i,7) * u(7 + nu * (j - 1), ie) &
1541 + a(i,8) * u(8 + nu * (j - 1), ie)
1547 ii = nv * (j - 1) + nvnv * (i - 1)
1550 work2(l + ii) = work(l + jj) * bt(1,j) &
1551 + work(l + nv + jj) * bt(2,j) &
1552 + work(l + 2 * nv + jj) * bt(3,j) &
1553 + work(l + 3 * nv + jj) * bt(4,j) &
1554 + work(l + 4 * nv + jj) * bt(5,j) &
1555 + work(l + 5 * nv + jj) * bt(6,j) &
1556 + work(l + 6 * nv + jj) * bt(7,j) &
1557 + work(l + 7 * nv + jj) * bt(8,j)
1564 jj = i + nvnv * (j - 1)
1565 v(jj, ie) = work2(i + nvnv * (1 - 1)) * ct(1, j) &
1566 + work2(i + nvnv * (2 - 1)) * ct(2, j) &
1567 + work2(i + nvnv * (3 - 1)) * ct(3, j) &
1568 + work2(i + nvnv * (4 - 1)) * ct(4, j) &
1569 + work2(i + nvnv * (5 - 1)) * ct(5, j) &
1570 + work2(i + nvnv * (6 - 1)) * ct(6, j) &
1571 + work2(i + nvnv * (7 - 1)) * ct(7, j) &
1572 + work2(i + nvnv * (8 - 1)) * ct(8, j)
1587 integer,
parameter :: nu = 12
1588 integer,
parameter :: nunu = 144
1589 integer,
intent(in) :: nv, nelv
1590 real(kind=
rp),
intent(inout) :: v(nv*nv*nv, nelv)
1591 real(kind=
rp),
intent(in) :: u(nu*nu*nu, nelv)
1592 real(kind=
rp),
intent(in) :: a(nv, nu), bt(nu, nv), ct(nu, nv)
1593 real(kind=
rp) :: work(nu**2*nv), work2(nu*nv**2)
1594 integer :: ie, i, j, l, ii, jj
1595 integer :: nvnu, nvnv
1604 ii = i + nv * (j - 1)
1605 work(ii) = a(i,1) * u(1 + nu * (j - 1), ie) &
1606 + a(i,2) * u(2 + nu * (j - 1), ie) &
1607 + a(i,3) * u(3 + nu * (j - 1), ie) &
1608 + a(i,4) * u(4 + nu * (j - 1), ie) &
1609 + a(i,5) * u(5 + nu * (j - 1), ie) &
1610 + a(i,6) * u(6 + nu * (j - 1), ie) &
1611 + a(i,7) * u(7 + nu * (j - 1), ie) &
1612 + a(i,8) * u(8 + nu * (j - 1), ie) &
1613 + a(i,9) * u(9 + nu * (j - 1), ie) &
1614 + a(i,10) * u(10 + nu * (j - 1), ie) &
1615 + a(i,11) * u(11 + nu * (j - 1), ie) &
1616 + a(i,12) * u(12 + nu * (j - 1), ie)
1622 ii = nv * (j - 1) + nvnv * (i - 1)
1625 work2(l + ii) = work(l + jj) * bt(1,j) &
1626 + work(l + nv + jj) * bt(2,j) &
1627 + work(l + 2 * nv + jj) * bt(3,j) &
1628 + work(l + 3 * nv + jj) * bt(4,j) &
1629 + work(l + 4 * nv + jj) * bt(5,j) &
1630 + work(l + 5 * nv + jj) * bt(6,j) &
1631 + work(l + 6 * nv + jj) * bt(7,j) &
1632 + work(l + 7 * nv + jj) * bt(8,j) &
1633 + work(l + 8 * nv + jj) * bt(9,j) &
1634 + work(l + 9 * nv + jj) * bt(10,j) &
1635 + work(l + 10 * nv + jj) * bt(11,j) &
1636 + work(l + 11 * nv + jj) * bt(12,j)
1643 jj = i + nvnv * (j - 1)
1644 v(jj, ie) = work2(i + nvnv * (1 - 1)) * ct(1, j) &
1645 + work2(i + nvnv * (2 - 1)) * ct(2, j) &
1646 + work2(i + nvnv * (3 - 1)) * ct(3, j) &
1647 + work2(i + nvnv * (4 - 1)) * ct(4, j) &
1648 + work2(i + nvnv * (5 - 1)) * ct(5, j) &
1649 + work2(i + nvnv * (6 - 1)) * ct(6, j) &
1650 + work2(i + nvnv * (7 - 1)) * ct(7, j) &
1651 + work2(i + nvnv * (8 - 1)) * ct(8, j) &
1652 + work2(i + nvnv * (9 - 1)) * ct(9, j) &
1653 + work2(i + nvnv * (10 - 1)) * ct(10, j) &
1654 + work2(i + nvnv * (11 - 1)) * ct(11, j) &
1655 + work2(i + nvnv * (12 - 1)) * ct(12, j)
1676 integer,
intent(in) :: nv, nu, nelv
1677 real(kind=
rp),
intent(inout) :: v(nv*nv*nv*nelv)
1678 real(kind=
rp),
intent(inout) :: a(nv, nu), bt(nu, nv), ct(nu, nv)
1680 if (nu .eq. 4 .and. nv .eq. 2)
then
1693 integer,
intent(in) :: nv, nu, nelv
1694 real(kind=
rp),
intent(inout) :: v(nv*nv*nv*nelv)
1695 real(kind=
rp),
intent(inout) :: a(nv, nu), bt(nu, nv), ct(nu, nv)
1696 real(kind=
rp) :: work(nu**2*nv), work2(nu*nv**2)
1697 integer :: e, e0, ee, es, iu, iv, nu3, nv3
1698 integer :: i, j, k, l, ii, jj, kk
1699 integer :: nunu, nvnu, nvnv
1700 real(kind=
rp) :: tmp
1710 if (nv .gt. nu)
then
1726 ii = i + nv * (j - 1)
1729 kk = k + nu * (j - 1) + iu
1730 tmp = tmp + a(i,k) * v(kk)
1739 ii = l + nv * (j - 1) + nvnv * (i - 1)
1742 jj = l + nv * (k - 1) + nvnu * (i - 1)
1743 tmp = tmp + work(jj) * bt(k,j)
1752 jj = i + nvnv * (j - 1) + iv
1755 ii = i + nvnv * (k - 1)
1756 tmp = tmp + work2(ii) * ct(k, j)
1768 integer,
parameter :: nu = 4
1769 integer,
parameter :: nv = 2
1770 integer,
parameter :: nunu = 16
1771 integer,
parameter :: nvnu = 8
1772 integer,
parameter :: nvnv = 4
1773 integer,
parameter :: nununu = 64
1774 integer,
parameter :: nvnvnv = 8
1775 integer,
intent(in) :: nelv
1776 real(kind=
rp),
intent(inout) :: v(nv*nv*nv*nelv)
1777 real(kind=
rp),
intent(inout) :: a(nv, nu), bt(nu, nv), ct(nu, nv)
1778 real(kind=
rp) :: work(nu**2*nv), work2(nu*nv**2)
1779 integer :: e, iu, iv
1780 integer :: i, j, k, l, ii, jj
1781 real(kind=
rp) :: tmp
1790 ii = i + nv * (j - 1)
1791 work(ii) = a(i,1) * v(1 + nu * (j - 1) + iu) &
1792 + a(i,2) * v(2 + nu * (j - 1) + iu) &
1793 + a(i,3) * v(3 + nu * (j - 1) + iu) &
1794 + a(i,4) * v(4 + nu * (j - 1) + iu)
1801 ii = l + nv * (j - 1) + nvnv * (i - 1)
1804 jj = l + nv * (k - 1) + nvnu * (i - 1)
1805 tmp = tmp + work(jj) * bt(k,j)
1814 jj = i + nvnv * (j - 1) + iv
1815 v(jj) = work2(i + nvnv * (1 - 1)) * ct(1, j) &
1816 + work2(i + nvnv * (2 - 1)) * ct(2, j) &
1817 + work2(i + nvnv * (3 - 1)) * ct(3, j) &
1818 + work2(i + nvnv * (4 - 1)) * ct(4, j)
Wrapper for all matrix-matrix product implementations.
subroutine, public mxm(a, n1, b, n2, c, n3)
Compute matrix-matrix product for contiguously packed matrices A,B, and C.
integer, parameter, public rp
Global precision used in computations.
subroutine tnsr3d_el_1_12_cpu(v, u, a, bt, ct)
Single-element evaluation at one point, specialised for nu = 12.
subroutine tnsr3d_el_n5_cpu(v, u, a, bt, ct)
Single-element tensor product specialised for nv = nu = 5.
subroutine tnsr3d_el_1_8_cpu(v, u, a, bt, ct)
Single-element evaluation at one point, specialised for nu = 8.
subroutine tnsr3d_el_1_6_cpu(v, u, a, bt, ct)
Single-element evaluation at one point, specialised for nu = 6.
subroutine tnsr1_3d_nvnu_cpu(v, nv, nu, a, bt, ct, nelv)
In-place tensor product for arbitrary nu and nv.
subroutine tnsr3d_nu12_cpu(v, nv, u, a, bt, ct, nelv)
Tensor-product evaluation specialised for nu = 12, generic in nv.
subroutine tnsr3d_el_n13_cpu(v, u, a, bt, ct)
Single-element tensor product specialised for nv = nu = 13.
subroutine, public tnsr3d_cpu(v, nv, u, nu, a, bt, ct, nelv)
Three-dimensional tensor product over a list of elements.
subroutine tnsr3d_el_n3_cpu(v, u, a, bt, ct)
Single-element tensor product specialised for nv = nu = 3.
subroutine tnsr3d_nu2nv4_cpu(v, u, a, bt, ct, nelv)
Batched tensor product specialised for nu = 2, nv = 4.
subroutine tnsr3d_nvnu_cpu(v, nv, u, nu, a, bt, ct, nelv)
Generic tensor-product evaluation for arbitrary nu, nv.
subroutine tnsr3d_el_n7_cpu(v, u, a, bt, ct)
Single-element tensor product specialised for nv = nu = 7.
subroutine tnsr3d_el_n11_cpu(v, u, a, bt, ct)
Single-element tensor product specialised for nv = nu = 11.
subroutine tnsr3d_el_1_nu_cpu(v, u, nu, a, bt, ct)
Single-element evaluation at one point, for arbitrary nu.
subroutine tnsr3d_nu8_cpu(v, nv, u, a, bt, ct, nelv)
Tensor-product evaluation specialised for nu = 8, generic in nv.
subroutine tnsr3d_el_n9_cpu(v, u, a, bt, ct)
Single-element tensor product specialised for nv = nu = 9.
subroutine tnsr3d_el_n6_cpu(v, u, a, bt, ct)
Single-element tensor product specialised for nv = nu = 6.
subroutine tnsr3d_el_n2_cpu(v, u, a, bt, ct)
Single-element tensor product specialised for nv = nu = 2.
subroutine tnsr3d_el_n12_cpu(v, u, a, bt, ct)
Single-element tensor product specialised for nv = nu = 12.
subroutine tnsr3d_el_1_4_cpu(v, u, a, bt, ct)
Single-element evaluation at one point, specialised for nu = 4.
subroutine tnsr3d_el_n4_cpu(v, u, a, bt, ct)
Single-element tensor product specialised for nv = nu = 4.
subroutine tnsr3d_el_1_10_cpu(v, u, a, bt, ct)
Single-element evaluation at one point, specialised for nu = 10.
subroutine tnsr1_3d_nu4nv2_cpu(v, a, bt, ct, nelv)
In-place tensor product specialised for nu = 4, nv = 2.
subroutine, public tnsr2d_el_cpu(v, nv, u, nu, a, bt)
Two-dimensional tensor product on a single element.
subroutine, public tnsr1_3d_cpu(v, nv, nu, a, bt, ct, nelv)
Three-dimensional tensor product applied in place.
subroutine tnsr3d_nu4_cpu(v, nv, u, a, bt, ct, nelv)
Batched tensor product specialised for nu = 4, generic in nv.
subroutine, public tnsr3d_el_cpu(v, nv, u, nu, a, bt, ct)
Three-dimensional tensor product on a single element.
subroutine tnsr3d_el_n_cpu(v, u, a, bt, ct, n)
Single-element tensor product with nv = nu, for arbitrary order.
subroutine tnsr3d_el_nvnu_cpu(v, nv, u, nu, a, bt, ct)
Single-element tensor product for arbitrary nu and nv.
subroutine tnsr3d_el_n14_cpu(v, u, a, bt, ct)
Single-element tensor product specialised for nv = nu = 14.
subroutine tnsr3d_el_n10_cpu(v, u, a, bt, ct)
Single-element tensor product specialised for nv = nu = 10.
subroutine tnsr3d_el_n8_cpu(v, u, a, bt, ct)
Single-element tensor product specialised for nv = nu = 8.