26 integer(kind=kint) :: N
27 real(kind=
kreal),
pointer :: dlu0(:) => null()
28 real(kind=
kreal),
pointer :: allu0(:) => null()
29 real(kind=
kreal),
pointer :: aulu0(:) => null()
30 integer(kind=kint),
pointer :: inumFI1L(:) => null()
31 integer(kind=kint),
pointer :: inumFI1U(:) => null()
32 integer(kind=kint),
pointer :: FI1L(:) => null()
33 integer(kind=kint),
pointer :: FI1U(:) => null()
35 logical,
save :: INITIALIZED = .false.
38 real(kind=
kreal),
pointer :: d(:) => null()
39 real(kind=
kreal),
pointer :: al(:) => null()
40 real(kind=
kreal),
pointer :: au(:) => null()
41 integer(kind=kint),
pointer :: indexL(:) => null()
42 integer(kind=kint),
pointer :: indexU(:) => null()
43 integer(kind=kint),
pointer :: itemL(:) => null()
44 integer(kind=kint),
pointer :: itemU(:) => null()
46 integer(kind=kint) :: NColor
47 integer(kind=kint),
pointer :: COLORindex(:) => null()
48 integer(kind=kint),
pointer :: perm(:) => null()
49 integer(kind=kint),
pointer :: iperm(:) => null()
52 logical,
save :: isFirst = .true.
53 integer(kind=kint),
parameter :: numOfBlockPerThread = 100
54 integer(kind=kint),
save :: numOfThread = 1, numofblock
55 integer(kind=kint),
save,
allocatable :: icToBlockIndex(:)
56 integer(kind=kint),
save,
allocatable :: blockIndexToColorIndex(:)
57 integer(kind=kint),
save :: sectorCacheSize0, sectorCacheSize1
58 integer(kind=kint),
parameter :: DEBUG = 0
65 integer(kind=kint ) :: np, npu, npl
66 integer(kind=kint ) :: precond
67 real (kind=
kreal) :: sigma, sigma_diag
76 integer(kind=kint ) :: ncolor_in
77 integer(kind=kint ) :: ii, i, j, k
78 integer(kind=kint ) :: nthreads = 1
79 integer(kind=kint ),
allocatable :: perm_tmp(:)
80 real (kind=
kreal) :: t0
84 write(*,*)
'DEBUG: BILU start setup',
hecmw_wtime()-t0
88 if (hecmat%Iarray(98) == 1)
then
90 else if (hecmat%Iarray(97) == 1)
then
116 if (nthreads == 1)
then
118 allocate(colorindex(0:1), perm(n), iperm(n))
126 allocate(colorindex(0:n), perm_tmp(n), perm(n), iperm(n))
128 hecmat%indexU, hecmat%itemU, perm_tmp, iperm)
129 if (debug >= 1)
write(*,*)
'DEBUG: RCM ordering done',
hecmw_wtime()-t0
130 if (precond.eq.10)
then
132 hecmat%indexU, hecmat%itemU, perm_tmp, &
133 ncolor_in, ncolor, colorindex, perm, iperm)
134 elseif (precond.eq.11)
then
136 hecmat%indexU, hecmat%itemU, perm_tmp, &
137 ncolor_in, ncolor, colorindex, perm, iperm)
138 elseif (precond.eq.12)
then
140 hecmat%indexU, hecmat%itemU, perm_tmp, &
141 ncolor_in, ncolor, colorindex, perm, iperm)
147 do j=hecmat%indexU(i-1)+1,hecmat%indexU(i)
148 if( hecmat%itemU(j) > n )
exit
152 npl = max(hecmat%indexL(n),npl)
153 npu = hecmat%indexU(n)
154 allocate(indexl(0:n), indexu(0:n), iteml(npl), itemu(npu))
156 hecmat%indexL, hecmat%indexU, hecmat%itemL, hecmat%itemU, &
157 indexl, indexu, iteml, itemu)
158 if (debug >= 1)
write(*,*)
'DEBUG: reordering profile done',
hecmw_wtime()-t0
160 allocate(d(9*n), al(9*npl), au(9*npu))
162 hecmat%indexL, hecmat%indexU, hecmat%itemL, hecmat%itemU, &
163 hecmat%AL, hecmat%AU, hecmat%D, &
164 indexl, indexu, iteml, itemu, al, au, d)
165 if (debug >= 1)
write(*,*)
'DEBUG: reordering values done',
hecmw_wtime()-t0
170 if (precond.eq.10)
call form_ilu0_33 &
171 & (n, n, npl, npu, d, al, indexl, iteml, au, indexu, itemu, &
174 if (precond.eq.11)
call form_ilu1_33 &
175 & (n, n, npl, npu, d, al, indexl, iteml, au, indexu, itemu, &
177 if (precond.eq.12)
call form_ilu2_33 &
178 & (n, n, npl, npu, d, al, indexl, iteml, au, indexu, itemu, &
184 hecmat%Iarray(98) = 0
185 hecmat%Iarray(97) = 0
187 if (debug >= 1)
write(*,*)
'DEBUG: BILU setup done',
hecmw_wtime()-t0
191 subroutine setup_tuning_parameters
194 integer(kind=kint) :: blockindex, elementcount, numofelement, ii
195 real(kind=
kreal) :: numofelementperblock
196 integer(kind=kint) :: my_rank
197 integer(kind=kint) :: ic, i
199 if (debug >= 1)
write(*,*)
'DEBUG: setting up tuning parameters for SSOR'
201 numofblock = numofthread * numofblockperthread
202 if (
allocated(ictoblockindex))
deallocate(ictoblockindex)
203 if (
allocated(blockindextocolorindex))
deallocate(blockindextocolorindex)
204 allocate (ictoblockindex(0:ncolor), &
205 blockindextocolorindex(0:numofblock + ncolor))
206 numofelement = n + indexl(n) + indexu(n)
207 numofelementperblock = dble(numofelement) / numofblock
210 ictoblockindex(0) = 0
211 blockindextocolorindex = -1
212 blockindextocolorindex(0) = 0
221 do i = colorindex(ic-1)+1, colorindex(ic)
222 elementcount = elementcount + 1
223 elementcount = elementcount + (indexl(i) - indexl(i-1))
224 elementcount = elementcount + (indexu(i) - indexu(i-1))
225 if (elementcount > ii * numofelementperblock &
226 .or. i == colorindex(ic))
then
228 blockindex = blockindex + 1
229 blockindextocolorindex(blockindex) = i
234 ictoblockindex(ic) = blockindex
236 numofblock = blockindex
239 sectorcachesize0, sectorcachesize1 )
240 end subroutine setup_tuning_parameters
244 real(kind=
kreal),
intent(inout) :: ww(:)
245 integer(kind=kint) :: i, j, isl, iel, isu, ieu, k
246 real(kind=
kreal) :: sw1, sw2, sw3, x1, x2, x3
248 integer(kind=kint) :: ic, iold
251 integer(kind=kint) :: blockindex
254 call setup_tuning_parameters
267 do blockindex = ictoblockindex(ic-1)+1, ictoblockindex(ic)
268 do i = blockindextocolorindex(blockindex-1)+1, &
269 blockindextocolorindex(blockindex)
281 sw1= sw1 - allu0(9*j-8)*x1-allu0(9*j-7)*x2-allu0(9*j-6)*x3
282 sw2= sw2 - allu0(9*j-5)*x1-allu0(9*j-4)*x2-allu0(9*j-3)*x3
283 sw3= sw3 - allu0(9*j-2)*x1-allu0(9*j-1)*x2-allu0(9*j )*x3
289 x2= x2 - dlu0(9*i-5)*x1
290 x3= x3 - dlu0(9*i-2)*x1 - dlu0(9*i-1)*x2
292 x2= dlu0(9*i-4)*( x2 - dlu0(9*i-3)*x3 )
293 x1= dlu0(9*i-8)*( x1 - dlu0(9*i-6)*x3 - dlu0(9*i-7)*x2)
305 do ic = ncolor, 1, -1
307 do blockindex = ictoblockindex(ic), ictoblockindex(ic-1)+1, -1
308 do i = blockindextocolorindex(blockindex), &
309 blockindextocolorindex(blockindex-1)+1, -1
310 isu= inumfi1u(i-1) + 1
320 sw1= sw1 + aulu0(9*j-8)*x1+aulu0(9*j-7)*x2+aulu0(9*j-6)*x3
321 sw2= sw2 + aulu0(9*j-5)*x1+aulu0(9*j-4)*x2+aulu0(9*j-3)*x3
322 sw3= sw3 + aulu0(9*j-2)*x1+aulu0(9*j-1)*x2+aulu0(9*j )*x3
327 x2= x2 - dlu0(9*i-5)*x1
328 x3= x3 - dlu0(9*i-2)*x1 - dlu0(9*i-1)*x2
330 x2= dlu0(9*i-4)*( x2 - dlu0(9*i-3)*x3 )
331 x1= dlu0(9*i-8)*( x1 - dlu0(9*i-6)*x3 - dlu0(9*i-7)*x2)
333 ww(3*iold-2)= ww(3*iold-2) - x1
334 ww(3*iold-1)= ww(3*iold-1) - x2
335 ww(3*iold )= ww(3*iold ) - x3
345 if (
associated(dlu0))
deallocate(dlu0)
346 if (
associated(allu0))
deallocate(allu0)
347 if (
associated(aulu0))
deallocate(aulu0)
348 if (
associated(inumfi1l))
deallocate(inumfi1l)
349 if (
associated(inumfi1u))
deallocate(inumfi1u)
350 if (
associated(fi1l))
deallocate(fi1l)
351 if (
associated(fi1u))
deallocate(fi1u)
352 if (
associated(colorindex))
deallocate(colorindex)
353 if (
associated(perm))
deallocate(perm)
354 if (
associated(iperm))
deallocate(iperm)
355 if (
associated(d))
deallocate(d)
356 if (
associated(al))
deallocate(al)
357 if (
associated(au))
deallocate(au)
358 if (
associated(indexl))
deallocate(indexl)
359 if (
associated(indexu))
deallocate(indexu)
360 if (
associated(iteml))
deallocate(iteml)
361 if (
associated(itemu))
deallocate(itemu)
379 initialized = .false.
389 subroutine form_ilu0_33 &
390 & (n, np, npl, npu, d, al, inl, ial, au, inu, iau, &
393 integer(kind=kint ),
intent(in):: n, np, npu, npl
394 real (kind=
kreal),
intent(in):: sigma, sigma_diag
396 real(kind=
kreal),
dimension(9*NPL),
intent(in):: al
397 real(kind=
kreal),
dimension(9*NPU),
intent(in):: au
398 real(kind=
kreal),
dimension(9*NP ),
intent(in):: d
400 integer(kind=kint ),
dimension(0:NP) ,
intent(in) :: inu, inl
401 integer(kind=kint ),
dimension( NPL),
intent(in) :: ial
402 integer(kind=kint ),
dimension( NPU),
intent(in) :: iau
404 integer(kind=kint),
dimension(:),
allocatable :: iw1, iw2
405 real (kind=
kreal),
dimension(3,3) :: rhs_aij, dkinv, aik, akj
406 integer(kind=kint) :: i,jj,ij0,kk
407 integer(kind=kint) :: j,k, j_old, k_old
408 allocate (iw1(np) , iw2(np))
409 allocate(dlu0(9*np), allu0(9*npl), aulu0(9*npu))
410 allocate(inumfi1l(0:np), inumfi1u(0:np), fi1l(npl), fi1u(npu))
438 dlu0(9*i-8)=dlu0(9*i-8)*sigma_diag
439 dlu0(9*i-4)=dlu0(9*i-4)*sigma_diag
440 dlu0(9*i )=dlu0(9*i )*sigma_diag
445 dlu0(9*i-8), dlu0(9*i-7), dlu0(9*i-6), &
446 dlu0(9*i-5), dlu0(9*i-4), dlu0(9*i-3), &
447 dlu0(9*i-2), dlu0(9*i-1), dlu0(9*i ))
448 dlu0(9*i-8)= dkinv(1,1)
449 dlu0(9*i-7)= dkinv(1,2)
450 dlu0(9*i-6)= dkinv(1,3)
451 dlu0(9*i-5)= dkinv(2,1)
452 dlu0(9*i-4)= dkinv(2,2)
453 dlu0(9*i-3)= dkinv(2,3)
454 dlu0(9*i-2)= dkinv(3,1)
455 dlu0(9*i-1)= dkinv(3,2)
456 dlu0(9*i )= dkinv(3,3)
462 do k= inumfi1l(i-1)+1, inumfi1l(i)
466 do k= inumfi1u(i-1)+1, inumfi1u(i)
470 do kk= inl(i-1)+1, inl(i)
474 dkinv(1,1)= dlu0(9*k-8)
475 dkinv(1,2)= dlu0(9*k-7)
476 dkinv(1,3)= dlu0(9*k-6)
477 dkinv(2,1)= dlu0(9*k-5)
478 dkinv(2,2)= dlu0(9*k-4)
479 dkinv(2,3)= dlu0(9*k-3)
480 dkinv(3,1)= dlu0(9*k-2)
481 dkinv(3,2)= dlu0(9*k-1)
482 dkinv(3,3)= dlu0(9*k )
484 aik(1,1)= allu0(9*kk-8)
485 aik(1,2)= allu0(9*kk-7)
486 aik(1,3)= allu0(9*kk-6)
487 aik(2,1)= allu0(9*kk-5)
488 aik(2,2)= allu0(9*kk-4)
489 aik(2,3)= allu0(9*kk-3)
490 aik(3,1)= allu0(9*kk-2)
491 aik(3,2)= allu0(9*kk-1)
492 aik(3,3)= allu0(9*kk )
494 do jj= inu(k-1)+1, inu(k)
497 if (iw1(j_old).eq.0.and.iw2(j_old).eq.0) cycle
499 akj(1,1)= aulu0(9*jj-8)
500 akj(1,2)= aulu0(9*jj-7)
501 akj(1,3)= aulu0(9*jj-6)
502 akj(2,1)= aulu0(9*jj-5)
503 akj(2,2)= aulu0(9*jj-4)
504 akj(2,3)= aulu0(9*jj-3)
505 akj(3,1)= aulu0(9*jj-2)
506 akj(3,2)= aulu0(9*jj-1)
507 akj(3,3)= aulu0(9*jj )
509 call ilu1b33 (rhs_aij, dkinv, aik, akj)
512 dlu0(9*i-8)= dlu0(9*i-8) - rhs_aij(1,1)
513 dlu0(9*i-7)= dlu0(9*i-7) - rhs_aij(1,2)
514 dlu0(9*i-6)= dlu0(9*i-6) - rhs_aij(1,3)
515 dlu0(9*i-5)= dlu0(9*i-5) - rhs_aij(2,1)
516 dlu0(9*i-4)= dlu0(9*i-4) - rhs_aij(2,2)
517 dlu0(9*i-3)= dlu0(9*i-3) - rhs_aij(2,3)
518 dlu0(9*i-2)= dlu0(9*i-2) - rhs_aij(3,1)
519 dlu0(9*i-1)= dlu0(9*i-1) - rhs_aij(3,2)
520 dlu0(9*i )= dlu0(9*i ) - rhs_aij(3,3)
525 allu0(9*ij0-8)= allu0(9*ij0-8) - rhs_aij(1,1)
526 allu0(9*ij0-7)= allu0(9*ij0-7) - rhs_aij(1,2)
527 allu0(9*ij0-6)= allu0(9*ij0-6) - rhs_aij(1,3)
528 allu0(9*ij0-5)= allu0(9*ij0-5) - rhs_aij(2,1)
529 allu0(9*ij0-4)= allu0(9*ij0-4) - rhs_aij(2,2)
530 allu0(9*ij0-3)= allu0(9*ij0-3) - rhs_aij(2,3)
531 allu0(9*ij0-2)= allu0(9*ij0-2) - rhs_aij(3,1)
532 allu0(9*ij0-1)= allu0(9*ij0-1) - rhs_aij(3,2)
533 allu0(9*ij0 )= allu0(9*ij0 ) - rhs_aij(3,3)
538 aulu0(9*ij0-8)= aulu0(9*ij0-8) - rhs_aij(1,1)
539 aulu0(9*ij0-7)= aulu0(9*ij0-7) - rhs_aij(1,2)
540 aulu0(9*ij0-6)= aulu0(9*ij0-6) - rhs_aij(1,3)
541 aulu0(9*ij0-5)= aulu0(9*ij0-5) - rhs_aij(2,1)
542 aulu0(9*ij0-4)= aulu0(9*ij0-4) - rhs_aij(2,2)
543 aulu0(9*ij0-3)= aulu0(9*ij0-3) - rhs_aij(2,3)
544 aulu0(9*ij0-2)= aulu0(9*ij0-2) - rhs_aij(3,1)
545 aulu0(9*ij0-1)= aulu0(9*ij0-1) - rhs_aij(3,2)
546 aulu0(9*ij0 )= aulu0(9*ij0 ) - rhs_aij(3,3)
553 dlu0(9*i-8), dlu0(9*i-7), dlu0(9*i-6), &
554 dlu0(9*i-5), dlu0(9*i-4), dlu0(9*i-3), &
555 dlu0(9*i-2), dlu0(9*i-1), dlu0(9*i ))
556 dlu0(9*i-8)= dkinv(1,1)
557 dlu0(9*i-7)= dkinv(1,2)
558 dlu0(9*i-6)= dkinv(1,3)
559 dlu0(9*i-5)= dkinv(2,1)
560 dlu0(9*i-4)= dkinv(2,2)
561 dlu0(9*i-3)= dkinv(2,3)
562 dlu0(9*i-2)= dkinv(3,1)
563 dlu0(9*i-1)= dkinv(3,2)
564 dlu0(9*i )= dkinv(3,3)
567 deallocate (iw1, iw2)
568 end subroutine form_ilu0_33
577 subroutine form_ilu1_33 &
578 & (n, np, npl, npu, d, al, inl, ial, au, inu, iau, &
581 integer(kind=kint ),
intent(in):: n, np, npu, npl
582 real (kind=
kreal),
intent(in):: sigma, sigma_diag
584 real(kind=
kreal),
dimension(9*NPL),
intent(in):: al
585 real(kind=
kreal),
dimension(9*NPU),
intent(in):: au
586 real(kind=
kreal),
dimension(9*NP ),
intent(in):: d
588 integer(kind=kint ),
dimension(0:NP) ,
intent(in) :: inu, inl
589 integer(kind=kint ),
dimension( NPL),
intent(in) :: ial
590 integer(kind=kint ),
dimension( NPU),
intent(in) :: iau
592 integer(kind=kint),
dimension(:),
allocatable :: iw1, iw2
593 integer(kind=kint),
dimension(:),
allocatable :: iwsl, iwsu
594 real (kind=
kreal),
dimension(3,3) :: rhs_aij, dkinv, aik, akj
595 integer(kind=kint) :: nplf1,npuf1
596 integer(kind=kint) :: i,jj,jj1,ij0,kk,ik,kk1,kk2,l,isk,iek,isj,iej
597 integer(kind=kint) :: icou,icou0,icouu,icouu1,icouu2,icouu3,icoul,icoul1,icoul2,icoul3
598 integer(kind=kint) :: j,k,isl,isu
599 integer(kind=kint) :: kk_old, k_old, j_old, jj_old
608 allocate (iw1(np) , iw2(np))
609 allocate (inumfi1l(0:np), inumfi1u(0:np))
620 do l= inl(i-1)+1, inl(i)
621 iw1(iperm(ial(l)))= 1
623 do l= inu(i-1)+1, inu(i)
624 iw1(iperm(iau(l)))= 1
638 if (iw1(jj).eq.0 .and. jj.lt.i)
then
639 inumfi1l(i)= inumfi1l(i)+1
642 if (iw1(jj).eq.0 .and. jj.gt.i)
then
643 inumfi1u(i)= inumfi1u(i)+1
648 nplf1= nplf1 + inumfi1l(i)
649 npuf1= npuf1 + inumfi1u(i)
654 allocate (iwsl(0:np), iwsu(0:np))
655 allocate (fi1l(npl+nplf1), fi1u(npu+npuf1))
656 allocate (allu0(9*(npl+nplf1)), aulu0(9*(npu+npuf1)))
664 iwsl(i)= inl(i)-inl(i-1) + inumfi1l(i) + iwsl(i-1)
665 iwsu(i)= inu(i)-inu(i-1) + inumfi1u(i) + iwsu(i-1)
671 inumfi1l(i)= inumfi1l(i-1) + inumfi1l(i)
672 inumfi1u(i)= inumfi1u(i-1) + inumfi1u(i)
676 do l= inl(i-1)+1, inl(i)
677 iw1(iperm(ial(l)))= 1
679 do l= inu(i-1)+1, inu(i)
680 iw1(iperm(iau(l)))= 1
693 if (iw1(jj).eq.0 .and. jj.lt.i)
then
695 fi1l(icoul+iwsl(i-1)+inl(i)-inl(i-1))= jj_old
698 if (iw1(jj).eq.0 .and. jj.gt.i)
then
700 fi1u(icouu+iwsu(i-1)+inu(i)-inu(i-1))= jj_old
718 icoul1= inl(i) - inl(i-1)
719 icoul2= inumfi1l(i) - inumfi1l(i-1)
720 icoul3= icoul1 + icoul2
721 icouu1= inu(i) - inu(i-1)
722 icouu2= inumfi1u(i) - inumfi1u(i-1)
723 icouu3= icouu1 + icouu2
729 do k= inl(i-1)+1, inl(i)
731 iw1(icou0)= iperm(ial(k))
734 do k= inumfi1l(i-1)+1, inumfi1l(i)
736 iw1(icou0)= iperm(fi1l(icou0+iwsl(i-1)))
742 call fill_in_s33_sort (iw1, iw2, icoul3, np)
745 fi1l(k+isl)= perm(iw1(k))
747 if (ik.le.inl(i)-inl(i-1))
then
750 allu0(kk1-8)= al(kk2-8)
751 allu0(kk1-7)= al(kk2-7)
752 allu0(kk1-6)= al(kk2-6)
753 allu0(kk1-5)= al(kk2-5)
754 allu0(kk1-4)= al(kk2-4)
755 allu0(kk1-3)= al(kk2-3)
756 allu0(kk1-2)= al(kk2-2)
757 allu0(kk1-1)= al(kk2-1)
758 allu0(kk1 )= al(kk2 )
764 do k= inu(i-1)+1, inu(i)
766 iw1(icou0)= iperm(iau(k))
769 do k= inumfi1u(i-1)+1, inumfi1u(i)
771 iw1(icou0)= iperm(fi1u(icou0+iwsu(i-1)))
777 call fill_in_s33_sort (iw1, iw2, icouu3, np)
780 fi1u(k+isu)= perm(iw1(k))
782 if (ik.le.inu(i)-inu(i-1))
then
785 aulu0(kk1-8)= au(kk2-8)
786 aulu0(kk1-7)= au(kk2-7)
787 aulu0(kk1-6)= au(kk2-6)
788 aulu0(kk1-5)= au(kk2-5)
789 aulu0(kk1-4)= au(kk2-4)
790 aulu0(kk1-3)= au(kk2-3)
791 aulu0(kk1-2)= au(kk2-2)
792 aulu0(kk1-1)= au(kk2-1)
793 aulu0(kk1 )= au(kk2 )
806 deallocate (iwsl, iwsu)
813 allocate (dlu0(9*np))
816 dlu0(9*i-8)=dlu0(9*i-8)*sigma_diag
817 dlu0(9*i-4)=dlu0(9*i-4)*sigma_diag
818 dlu0(9*i )=dlu0(9*i )*sigma_diag
823 dlu0(9*i-8), dlu0(9*i-7), dlu0(9*i-6), &
824 dlu0(9*i-5), dlu0(9*i-4), dlu0(9*i-3), &
825 dlu0(9*i-2), dlu0(9*i-1), dlu0(9*i ))
826 dlu0(9*i-8)= dkinv(1,1)
827 dlu0(9*i-7)= dkinv(1,2)
828 dlu0(9*i-6)= dkinv(1,3)
829 dlu0(9*i-5)= dkinv(2,1)
830 dlu0(9*i-4)= dkinv(2,2)
831 dlu0(9*i-3)= dkinv(2,3)
832 dlu0(9*i-2)= dkinv(3,1)
833 dlu0(9*i-1)= dkinv(3,2)
834 dlu0(9*i )= dkinv(3,3)
840 do k= inumfi1l(i-1)+1, inumfi1l(i)
844 do k= inumfi1u(i-1)+1, inumfi1u(i)
848 do kk= inl(i-1)+1, inl(i)
852 dkinv(1,1)= dlu0(9*k-8)
853 dkinv(1,2)= dlu0(9*k-7)
854 dkinv(1,3)= dlu0(9*k-6)
855 dkinv(2,1)= dlu0(9*k-5)
856 dkinv(2,2)= dlu0(9*k-4)
857 dkinv(2,3)= dlu0(9*k-3)
858 dkinv(3,1)= dlu0(9*k-2)
859 dkinv(3,2)= dlu0(9*k-1)
860 dkinv(3,3)= dlu0(9*k )
862 do kk1= inumfi1l(i-1)+1, inumfi1l(i)
863 if (k_old.eq.fi1l(kk1))
then
864 aik(1,1)= allu0(9*kk1-8)
865 aik(1,2)= allu0(9*kk1-7)
866 aik(1,3)= allu0(9*kk1-6)
867 aik(2,1)= allu0(9*kk1-5)
868 aik(2,2)= allu0(9*kk1-4)
869 aik(2,3)= allu0(9*kk1-3)
870 aik(3,1)= allu0(9*kk1-2)
871 aik(3,2)= allu0(9*kk1-1)
872 aik(3,3)= allu0(9*kk1 )
877 do jj= inu(k-1)+1, inu(k)
880 do jj1= inumfi1u(k-1)+1, inumfi1u(k)
881 if (j_old.eq.fi1u(jj1))
then
882 akj(1,1)= aulu0(9*jj1-8)
883 akj(1,2)= aulu0(9*jj1-7)
884 akj(1,3)= aulu0(9*jj1-6)
885 akj(2,1)= aulu0(9*jj1-5)
886 akj(2,2)= aulu0(9*jj1-4)
887 akj(2,3)= aulu0(9*jj1-3)
888 akj(3,1)= aulu0(9*jj1-2)
889 akj(3,2)= aulu0(9*jj1-1)
890 akj(3,3)= aulu0(9*jj1 )
895 call ilu1b33 (rhs_aij, dkinv, aik, akj)
898 dlu0(9*i-8)= dlu0(9*i-8) - rhs_aij(1,1)
899 dlu0(9*i-7)= dlu0(9*i-7) - rhs_aij(1,2)
900 dlu0(9*i-6)= dlu0(9*i-6) - rhs_aij(1,3)
901 dlu0(9*i-5)= dlu0(9*i-5) - rhs_aij(2,1)
902 dlu0(9*i-4)= dlu0(9*i-4) - rhs_aij(2,2)
903 dlu0(9*i-3)= dlu0(9*i-3) - rhs_aij(2,3)
904 dlu0(9*i-2)= dlu0(9*i-2) - rhs_aij(3,1)
905 dlu0(9*i-1)= dlu0(9*i-1) - rhs_aij(3,2)
906 dlu0(9*i )= dlu0(9*i ) - rhs_aij(3,3)
911 allu0(9*ij0-8)= allu0(9*ij0-8) - rhs_aij(1,1)
912 allu0(9*ij0-7)= allu0(9*ij0-7) - rhs_aij(1,2)
913 allu0(9*ij0-6)= allu0(9*ij0-6) - rhs_aij(1,3)
914 allu0(9*ij0-5)= allu0(9*ij0-5) - rhs_aij(2,1)
915 allu0(9*ij0-4)= allu0(9*ij0-4) - rhs_aij(2,2)
916 allu0(9*ij0-3)= allu0(9*ij0-3) - rhs_aij(2,3)
917 allu0(9*ij0-2)= allu0(9*ij0-2) - rhs_aij(3,1)
918 allu0(9*ij0-1)= allu0(9*ij0-1) - rhs_aij(3,2)
919 allu0(9*ij0 )= allu0(9*ij0 ) - rhs_aij(3,3)
924 aulu0(9*ij0-8)= aulu0(9*ij0-8) - rhs_aij(1,1)
925 aulu0(9*ij0-7)= aulu0(9*ij0-7) - rhs_aij(1,2)
926 aulu0(9*ij0-6)= aulu0(9*ij0-6) - rhs_aij(1,3)
927 aulu0(9*ij0-5)= aulu0(9*ij0-5) - rhs_aij(2,1)
928 aulu0(9*ij0-4)= aulu0(9*ij0-4) - rhs_aij(2,2)
929 aulu0(9*ij0-3)= aulu0(9*ij0-3) - rhs_aij(2,3)
930 aulu0(9*ij0-2)= aulu0(9*ij0-2) - rhs_aij(3,1)
931 aulu0(9*ij0-1)= aulu0(9*ij0-1) - rhs_aij(3,2)
932 aulu0(9*ij0 )= aulu0(9*ij0 ) - rhs_aij(3,3)
939 dlu0(9*i-8), dlu0(9*i-7), dlu0(9*i-6), &
940 dlu0(9*i-5), dlu0(9*i-4), dlu0(9*i-3), &
941 dlu0(9*i-2), dlu0(9*i-1), dlu0(9*i ))
942 dlu0(9*i-8)= dkinv(1,1)
943 dlu0(9*i-7)= dkinv(1,2)
944 dlu0(9*i-6)= dkinv(1,3)
945 dlu0(9*i-5)= dkinv(2,1)
946 dlu0(9*i-4)= dkinv(2,2)
947 dlu0(9*i-3)= dkinv(2,3)
948 dlu0(9*i-2)= dkinv(3,1)
949 dlu0(9*i-1)= dkinv(3,2)
950 dlu0(9*i )= dkinv(3,3)
953 deallocate (iw1, iw2)
955 end subroutine form_ilu1_33
964 subroutine form_ilu2_33 &
965 & (n, np, npl, npu, d, al, inl, ial, au, inu, iau, &
968 integer(kind=kint ),
intent(in):: n, np, npu, npl
969 real (kind=
kreal),
intent(in):: sigma, sigma_diag
971 real(kind=
kreal),
dimension(9*NPL),
intent(in):: al
972 real(kind=
kreal),
dimension(9*NPU),
intent(in):: au
973 real(kind=
kreal),
dimension(9*NP ),
intent(in):: d
975 integer(kind=kint ),
dimension(0:NP) ,
intent(in) :: inu, inl
976 integer(kind=kint ),
dimension( NPL),
intent(in) :: ial
977 integer(kind=kint ),
dimension( NPU),
intent(in) :: iau
979 integer(kind=kint),
dimension(:),
allocatable:: iw1 , iw2
980 integer(kind=kint),
dimension(:),
allocatable:: iwsl, iwsu
981 integer(kind=kint),
dimension(:),
allocatable:: iconfi1l, iconfi1u
982 integer(kind=kint),
dimension(:),
allocatable:: inumfi2l, inumfi2u
983 integer(kind=kint),
dimension(:),
allocatable:: fi2l, fi2u
984 real (kind=
kreal),
dimension(3,3) :: rhs_aij, dkinv, aik, akj
985 integer(kind=kint) :: nplf1,nplf2,npuf1,npuf2,ias,iconik,iconkj
986 integer(kind=kint) :: i,jj,ij0,kk,ik,kk1,kk2,l,isk,iek,isj,iej
987 integer(kind=kint) :: icou,icouu,icouu1,icouu2,icouu3,icoul,icoul1,icoul2,icoul3
988 integer(kind=kint) :: j,k,isl,isu
989 integer(kind=kint) :: j_old, jj_old, k_old, kk_old, l_old, ll_old
990 integer(kind=kint) :: jj1
1000 allocate (iw1(np) , iw2(np))
1001 allocate (inumfi2l(0:np), inumfi2u(0:np))
1012 do l= inl(i-1)+1, inl(i)
1013 iw1(iperm(ial(l)))= 1
1015 do l= inu(i-1)+1, inu(i)
1016 iw1(iperm(iau(l)))= 1
1029 if (iw1(jj).eq.0 .and. jj.lt.i)
then
1030 inumfi2l(i)= inumfi2l(i)+1
1033 if (iw1(jj).eq.0 .and. jj.gt.i)
then
1034 inumfi2u(i)= inumfi2u(i)+1
1039 nplf1= nplf1 + inumfi2l(i)
1040 npuf1= npuf1 + inumfi2u(i)
1045 allocate (iwsl(0:np), iwsu(0:np))
1046 allocate (fi2l(nplf1), fi2u(npuf1))
1054 inumfi2l(i)= inumfi2l(i-1) + inumfi2l(i)
1055 inumfi2u(i)= inumfi2u(i-1) + inumfi2u(i)
1059 do l= inl(i-1)+1, inl(i)
1060 iw1(iperm(ial(l)))= 1
1062 do l= inu(i-1)+1, inu(i)
1063 iw1(iperm(iau(l)))= 1
1076 if (iw1(jj).eq.0 .and. jj.lt.i)
then
1078 fi2l(icoul+inumfi2l(i-1))= jj_old
1081 if (iw1(jj).eq.0 .and. jj.gt.i)
then
1083 fi2u(icouu+inumfi2u(i-1))= jj_old
1096 allocate (inumfi1l(0:np), inumfi1u(0:np))
1107 do l= inl(i-1)+1, inl(i)
1108 iw1(iperm(ial(l)))= 2
1110 do l= inu(i-1)+1, inu(i)
1111 iw1(iperm(iau(l)))= 2
1114 do l= inumfi2l(i-1)+1, inumfi2l(i)
1115 iw1(iperm(fi2l(l)))= 1
1118 do l= inumfi2u(i-1)+1, inumfi2u(i)
1119 iw1(iperm(fi2u(l)))= 1
1127 isj= inumfi2u(kk-1) + 1
1132 if (iw1(jj).eq.0 .and. jj.lt.i)
then
1133 inumfi1l(i)= inumfi1l(i) + 1
1136 if (iw1(jj).eq.0 .and. jj.gt.i)
then
1137 inumfi1u(i)= inumfi1u(i) + 1
1143 isk= inumfi2l(i-1)+1
1153 if (iw1(jj).eq.0 .and. jj.lt.i)
then
1154 inumfi1l(i)= inumfi1l(i) + 1
1157 if (iw1(jj).eq.0 .and. jj.gt.i)
then
1158 inumfi1u(i)= inumfi1u(i) + 1
1163 nplf2= nplf2 + inumfi1l(i)
1164 npuf2= npuf2 + inumfi1u(i)
1169 allocate (fi1l(npl+nplf1+nplf2))
1170 allocate (fi1u(npu+npuf1+npuf2))
1172 allocate (iconfi1l(npl+nplf1+nplf2))
1173 allocate (iconfi1u(npu+npuf1+npuf2))
1178 iwsl(i)= inl(i)-inl(i-1) + inumfi2l(i)-inumfi2l(i-1) + &
1179 & inumfi1l(i) + iwsl(i-1)
1180 iwsu(i)= inu(i)-inu(i-1) + inumfi2u(i)-inumfi2u(i-1) + &
1181 & inumfi1u(i) + iwsu(i-1)
1187 inumfi1l(i)= inumfi1l(i-1) + inumfi1l(i)
1188 inumfi1u(i)= inumfi1u(i-1) + inumfi1u(i)
1192 do l= inl(i-1)+1, inl(i)
1193 iw1(iperm(ial(l)))= 1
1195 do l= inu(i-1)+1, inu(i)
1196 iw1(iperm(iau(l)))= 1
1199 do l= inumfi2l(i-1)+1, inumfi2l(i)
1200 iw1(iperm(fi2l(l)))= 1
1203 do l= inumfi2u(i-1)+1, inumfi2u(i)
1204 iw1(iperm(fi2u(l)))= 1
1212 isj= inumfi2u(kk-1) + 1
1217 if (iw1(jj).eq.0 .and. jj.lt.i)
then
1218 ias= inl(i)-inl(i-1)+inumfi2l(i)-inumfi2l(i-1)+iwsl(i-1)
1220 fi1l(icoul+ias)= jj_old
1223 if (iw1(jj).eq.0 .and. jj.gt.i)
then
1224 ias= inu(i)-inu(i-1)+inumfi2u(i)-inumfi2u(i-1)+iwsu(i-1)
1226 fi1u(icouu+ias)= jj_old
1232 isk= inumfi2l(i-1) + 1
1242 if (iw1(jj).eq.0 .and. jj.lt.i)
then
1243 ias= inl(i)-inl(i-1)+inumfi2l(i)-inumfi2l(i-1)+iwsl(i-1)
1245 fi1l(icoul+ias)= jj_old
1248 if (iw1(jj).eq.0 .and. jj.gt.i)
then
1249 ias= inu(i)-inu(i-1)+inumfi2u(i)-inumfi2u(i-1)+iwsu(i-1)
1251 fi1u(icouu+ias)= jj_old
1264 allocate (allu0(9*(npl+nplf1+nplf2)))
1265 allocate (aulu0(9*(npu+npuf1+npuf2)))
1277 icoul1= inl(i) - inl(i-1)
1278 icoul2= inumfi2l(i) - inumfi2l(i-1) + icoul1
1279 icoul3= inumfi1l(i) - inumfi1l(i-1) + icoul2
1281 icouu1= inu(i) - inu(i-1)
1282 icouu2= inumfi2u(i) - inumfi2u(i-1) + icouu1
1283 icouu3= inumfi1u(i) - inumfi1u(i-1) + icouu2
1290 do k= inl(i-1)+1, inl(i)
1292 iw1(icou)= iperm(ial(k))
1296 do k= inumfi2l(i-1)+1, inumfi2l(i)
1298 iw1(icou+icoul1)= iperm(fi2l(k))
1302 do k= inumfi1l(i-1)+1, inumfi1l(i)
1304 iw1(icou+icoul2)= iperm(fi1l(icou+icoul2+isl))
1311 call fill_in_s33_sort (iw1, iw2, icoul3, np)
1314 fi1l(k+isl)= perm(iw1(k))
1316 if (ik.le.inl(i)-inl(i-1))
then
1318 kk2= 9*(ik+inl(i-1))
1319 allu0(kk1-8)= al(kk2-8)
1320 allu0(kk1-7)= al(kk2-7)
1321 allu0(kk1-6)= al(kk2-6)
1322 allu0(kk1-5)= al(kk2-5)
1323 allu0(kk1-4)= al(kk2-4)
1324 allu0(kk1-3)= al(kk2-3)
1325 allu0(kk1-2)= al(kk2-2)
1326 allu0(kk1-1)= al(kk2-1)
1327 allu0(kk1 )= al(kk2 )
1332 do k= inl(i-1)+1, inl(i)
1338 do k= inumfi2l(i-1)+1, inumfi2l(i)
1344 do k= inumfi1l(i-1)+1, inumfi1l(i)
1350 iconfi1l(k+isl)= iw1(iw2(k))
1355 do k= inu(i-1)+1, inu(i)
1357 iw1(icou)= iperm(iau(k))
1361 do k= inumfi2u(i-1)+1, inumfi2u(i)
1363 iw1(icou+icouu1)= iperm(fi2u(k))
1367 do k= inumfi1u(i-1)+1, inumfi1u(i)
1369 iw1(icou+icouu2)= iperm(fi1u(icou+icouu2+isu))
1375 call fill_in_s33_sort (iw1, iw2, icouu3, np)
1378 fi1u(k+isu)= perm(iw1(k))
1380 if (ik.le.inu(i)-inu(i-1))
then
1382 kk2= 9*(ik+inu(i-1))
1383 aulu0(kk1-8)= au(kk2-8)
1384 aulu0(kk1-7)= au(kk2-7)
1385 aulu0(kk1-6)= au(kk2-6)
1386 aulu0(kk1-5)= au(kk2-5)
1387 aulu0(kk1-4)= au(kk2-4)
1388 aulu0(kk1-3)= au(kk2-3)
1389 aulu0(kk1-2)= au(kk2-2)
1390 aulu0(kk1-1)= au(kk2-1)
1391 aulu0(kk1 )= au(kk2 )
1396 do k= inu(i-1)+1, inu(i)
1402 do k= inumfi2u(i-1)+1, inumfi2u(i)
1408 do k= inumfi1u(i-1)+1, inumfi1u(i)
1414 iconfi1u(k+isu)= iw1(iw2(k))
1422 inumfi1l(i)= iwsl(i)
1423 inumfi1u(i)= iwsu(i)
1426 deallocate (iwsl, iwsu)
1427 deallocate (inumfi2l, inumfi2u)
1428 deallocate ( fi2l, fi2u)
1435 allocate (dlu0(9*np))
1438 dlu0(9*i-8)=dlu0(9*i-8)*sigma_diag
1439 dlu0(9*i-4)=dlu0(9*i-4)*sigma_diag
1440 dlu0(9*i )=dlu0(9*i )*sigma_diag
1445 dlu0(9*i-8), dlu0(9*i-7), dlu0(9*i-6), &
1446 dlu0(9*i-5), dlu0(9*i-4), dlu0(9*i-3), &
1447 dlu0(9*i-2), dlu0(9*i-1), dlu0(9*i ))
1448 dlu0(9*i-8)= dkinv(1,1)
1449 dlu0(9*i-7)= dkinv(1,2)
1450 dlu0(9*i-6)= dkinv(1,3)
1451 dlu0(9*i-5)= dkinv(2,1)
1452 dlu0(9*i-4)= dkinv(2,2)
1453 dlu0(9*i-3)= dkinv(2,3)
1454 dlu0(9*i-2)= dkinv(3,1)
1455 dlu0(9*i-1)= dkinv(3,2)
1456 dlu0(9*i )= dkinv(3,3)
1462 do k= inumfi1l(i-1)+1, inumfi1l(i)
1466 do k= inumfi1u(i-1)+1, inumfi1u(i)
1470 do kk= inumfi1l(i-1)+1, inumfi1l(i)
1473 iconik= iconfi1l(kk)
1475 dkinv(1,1)= dlu0(9*k-8)
1476 dkinv(1,2)= dlu0(9*k-7)
1477 dkinv(1,3)= dlu0(9*k-6)
1478 dkinv(2,1)= dlu0(9*k-5)
1479 dkinv(2,2)= dlu0(9*k-4)
1480 dkinv(2,3)= dlu0(9*k-3)
1481 dkinv(3,1)= dlu0(9*k-2)
1482 dkinv(3,2)= dlu0(9*k-1)
1483 dkinv(3,3)= dlu0(9*k )
1485 aik(1,1)= allu0(9*kk-8)
1486 aik(1,2)= allu0(9*kk-7)
1487 aik(1,3)= allu0(9*kk-6)
1488 aik(2,1)= allu0(9*kk-5)
1489 aik(2,2)= allu0(9*kk-4)
1490 aik(2,3)= allu0(9*kk-3)
1491 aik(3,1)= allu0(9*kk-2)
1492 aik(3,2)= allu0(9*kk-1)
1493 aik(3,3)= allu0(9*kk )
1495 do jj= inumfi1u(k-1)+1, inumfi1u(k)
1498 iconkj= iconfi1u(jj)
1500 if ((iconik+iconkj).lt.2)
then
1501 akj(1,1)= aulu0(9*jj-8)
1502 akj(1,2)= aulu0(9*jj-7)
1503 akj(1,3)= aulu0(9*jj-6)
1504 akj(2,1)= aulu0(9*jj-5)
1505 akj(2,2)= aulu0(9*jj-4)
1506 akj(2,3)= aulu0(9*jj-3)
1507 akj(3,1)= aulu0(9*jj-2)
1508 akj(3,2)= aulu0(9*jj-1)
1509 akj(3,3)= aulu0(9*jj )
1511 call ilu1b33 (rhs_aij, dkinv, aik, akj)
1514 dlu0(9*i-8)= dlu0(9*i-8) - rhs_aij(1,1)
1515 dlu0(9*i-7)= dlu0(9*i-7) - rhs_aij(1,2)
1516 dlu0(9*i-6)= dlu0(9*i-6) - rhs_aij(1,3)
1517 dlu0(9*i-5)= dlu0(9*i-5) - rhs_aij(2,1)
1518 dlu0(9*i-4)= dlu0(9*i-4) - rhs_aij(2,2)
1519 dlu0(9*i-3)= dlu0(9*i-3) - rhs_aij(2,3)
1520 dlu0(9*i-2)= dlu0(9*i-2) - rhs_aij(3,1)
1521 dlu0(9*i-1)= dlu0(9*i-1) - rhs_aij(3,2)
1522 dlu0(9*i )= dlu0(9*i ) - rhs_aij(3,3)
1527 allu0(9*ij0-8)= allu0(9*ij0-8) - rhs_aij(1,1)
1528 allu0(9*ij0-7)= allu0(9*ij0-7) - rhs_aij(1,2)
1529 allu0(9*ij0-6)= allu0(9*ij0-6) - rhs_aij(1,3)
1530 allu0(9*ij0-5)= allu0(9*ij0-5) - rhs_aij(2,1)
1531 allu0(9*ij0-4)= allu0(9*ij0-4) - rhs_aij(2,2)
1532 allu0(9*ij0-3)= allu0(9*ij0-3) - rhs_aij(2,3)
1533 allu0(9*ij0-2)= allu0(9*ij0-2) - rhs_aij(3,1)
1534 allu0(9*ij0-1)= allu0(9*ij0-1) - rhs_aij(3,2)
1535 allu0(9*ij0 )= allu0(9*ij0 ) - rhs_aij(3,3)
1540 aulu0(9*ij0-8)= aulu0(9*ij0-8) - rhs_aij(1,1)
1541 aulu0(9*ij0-7)= aulu0(9*ij0-7) - rhs_aij(1,2)
1542 aulu0(9*ij0-6)= aulu0(9*ij0-6) - rhs_aij(1,3)
1543 aulu0(9*ij0-5)= aulu0(9*ij0-5) - rhs_aij(2,1)
1544 aulu0(9*ij0-4)= aulu0(9*ij0-4) - rhs_aij(2,2)
1545 aulu0(9*ij0-3)= aulu0(9*ij0-3) - rhs_aij(2,3)
1546 aulu0(9*ij0-2)= aulu0(9*ij0-2) - rhs_aij(3,1)
1547 aulu0(9*ij0-1)= aulu0(9*ij0-1) - rhs_aij(3,2)
1548 aulu0(9*ij0 )= aulu0(9*ij0 ) - rhs_aij(3,3)
1555 dlu0(9*i-8), dlu0(9*i-7), dlu0(9*i-6), &
1556 dlu0(9*i-5), dlu0(9*i-4), dlu0(9*i-3), &
1557 dlu0(9*i-2), dlu0(9*i-1), dlu0(9*i ))
1558 dlu0(9*i-8)= dkinv(1,1)
1559 dlu0(9*i-7)= dkinv(1,2)
1560 dlu0(9*i-6)= dkinv(1,3)
1561 dlu0(9*i-5)= dkinv(2,1)
1562 dlu0(9*i-4)= dkinv(2,2)
1563 dlu0(9*i-3)= dkinv(2,3)
1564 dlu0(9*i-2)= dkinv(3,1)
1565 dlu0(9*i-1)= dkinv(3,2)
1566 dlu0(9*i )= dkinv(3,3)
1569 deallocate (iw1, iw2)
1570 deallocate (iconfi1l, iconfi1u)
1572 end subroutine form_ilu2_33
1580 subroutine fill_in_s33_sort (STEM, INUM, N, NP)
1583 integer(kind=kint) :: n, np
1584 integer(kind=kint),
dimension(NP) :: stem
1585 integer(kind=kint),
dimension(NP) :: inum
1586 integer(kind=kint),
dimension(:),
allocatable :: istack
1587 integer(kind=kint) :: m,nstack,jstack,l,ir,ip,i,j,k,ss,ii,temp,it
1589 allocate (istack(-np:+np))
1608 if (stem(i).le.ss)
goto 2
1619 if (jstack.eq.0)
then
1625 l = istack(jstack-1)
1638 if (stem(l+1).gt.stem(ir))
then
1647 if (stem(l).gt.stem(ir))
then
1656 if (stem(l+1).gt.stem(l))
then
1673 if (stem(i).lt.ss)
goto 3
1677 if (stem(j).gt.ss)
goto 4
1700 if (jstack.gt.nstack)
then
1701 write (*,*)
'NSTACK overflow'
1705 if (ir-i+1.ge.j-1)
then
1710 istack(jstack )= j-1
1719 end subroutine fill_in_s33_sort
1728 subroutine ilu1a33 (ALU, D11,D12,D13,D21,D22,D23,D31,D32,D33)
1731 real(kind=
kreal) :: alu(3,3), pw(3)
1732 real(kind=
kreal) :: d11,d12,d13,d21,d22,d23,d31,d32,d33
1733 integer(kind=kint) :: i,j,k
1746 if (alu(k,k) == 0.d0)
then
1748 stop
'ERROR: Divide by zero in ILU setup'
1750 alu(k,k)= 1.d0/alu(k,k)
1752 alu(i,k)= alu(i,k) * alu(k,k)
1754 pw(j)= alu(i,j) - alu(i,k)*alu(k,j)
1776 real(kind=
kreal) :: rhs_aij(3,3), dkinv(3,3), aik(3,3), akj(3,3)
1777 real(kind=
kreal) :: x1,x2,x3
1785 x2= x2 - dkinv(2,1)*x1
1786 x3= x3 - dkinv(3,1)*x1 - dkinv(3,2)*x2
1789 x2= dkinv(2,2)*( x2 - dkinv(2,3)*x3 )
1790 x1= dkinv(1,1)*( x1 - dkinv(1,3)*x3 - dkinv(1,2)*x2)
1792 rhs_aij(1,1)= aik(1,1)*x1 + aik(1,2)*x2 + aik(1,3)*x3
1793 rhs_aij(2,1)= aik(2,1)*x1 + aik(2,2)*x2 + aik(2,3)*x3
1794 rhs_aij(3,1)= aik(3,1)*x1 + aik(3,2)*x2 + aik(3,3)*x3
1802 x2= x2 - dkinv(2,1)*x1
1803 x3= x3 - dkinv(3,1)*x1 - dkinv(3,2)*x2
1806 x2= dkinv(2,2)*( x2 - dkinv(2,3)*x3 )
1807 x1= dkinv(1,1)*( x1 - dkinv(1,3)*x3 - dkinv(1,2)*x2)
1809 rhs_aij(1,2)= aik(1,1)*x1 + aik(1,2)*x2 + aik(1,3)*x3
1810 rhs_aij(2,2)= aik(2,1)*x1 + aik(2,2)*x2 + aik(2,3)*x3
1811 rhs_aij(3,2)= aik(3,1)*x1 + aik(3,2)*x2 + aik(3,3)*x3
1819 x2= x2 - dkinv(2,1)*x1
1820 x3= x3 - dkinv(3,1)*x1 - dkinv(3,2)*x2
1823 x2= dkinv(2,2)*( x2 - dkinv(2,3)*x3 )
1824 x1= dkinv(1,1)*( x1 - dkinv(1,3)*x3 - dkinv(1,2)*x2)
1826 rhs_aij(1,3)= aik(1,1)*x1 + aik(1,2)*x2 + aik(1,3)*x3
1827 rhs_aij(2,3)= aik(2,1)*x1 + aik(2,2)*x2 + aik(2,3)*x3
1828 rhs_aij(3,3)= aik(3,1)*x1 + aik(3,2)*x2 + aik(3,3)*x3
real(kind=kreal) function, public hecmw_mat_get_sigma_diag(hecMAT)
integer(kind=kint) function, public hecmw_mat_get_precond(hecMAT)
integer(kind=kint) function, public hecmw_mat_get_ncolor_in(hecMAT)
real(kind=kreal) function, public hecmw_mat_get_sigma(hecMAT)
subroutine, public hecmw_matrix_reorder_values(N, NDOF, perm, iperm, indexL, indexU, itemL, itemU, AL, AU, D, indexLp, indexUp, itemLp, itemUp, ALp, AUp, Dp)
subroutine, public hecmw_matrix_reorder_renum_item(N, perm, indexXp, itemXp)
subroutine, public hecmw_matrix_reorder_profile(N, perm, iperm, indexL, indexU, itemL, itemU, indexLp, indexUp, itemLp, itemUp)
subroutine, public hecmw_precond_bilu_33_clear
subroutine, public hecmw_precond_bilu_33_apply(WW)
subroutine ilu1b33(RHS_Aij, DkINV, Aik, Akj)
subroutine ilu1a33(ALU, D11, D12, D13, D21, D22, D23, D31, D32, D33)
subroutine, public hecmw_precond_bilu_33_setup(hecMAT)
subroutine, public hecmw_tuning_fx_calc_sector_cache(N, NDOF, sectorCacheSize0, sectorCacheSize1)
integer(kind=4), parameter kreal
integer(kind=kint) function hecmw_comm_get_rank()
real(kind=kreal) function hecmw_wtime()
subroutine, public hecmw_matrix_ordering_rcm(N, indexL, itemL, indexU, itemU, perm, iperm)
subroutine, public hecmw_matrix_ordering_mc(N, indexL, itemL, indexU, itemU, perm_cur, ncolor_in, ncolor_out, COLORindex, perm, iperm)
subroutine, public hecmw_matrix_ordering_mc_l2(N, indexL, itemL, indexU, itemU, perm_cur, ncolor_in, ncolor_out, COLORindex, perm, iperm)
subroutine, public hecmw_matrix_ordering_mc_l1(N, indexL, itemL, indexU, itemU, perm_cur, ncolor_in, ncolor_out, COLORindex, perm, iperm)