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 :: BILU_DEBUG = 0
65 integer(kind=kint ) :: np, npu, npl
66 integer(kind=kint ) :: precond
67 real (kind=
kreal) :: sigma_diag
76 integer(kind=kint ) :: ncolor_in
77 integer(kind=kint ) :: i, j
78 integer(kind=kint ) :: nthreads = 1
79 integer(kind=kint ),
allocatable :: perm_tmp(:)
80 real (kind=
kreal) :: t0
82 if (bilu_debug >= 1)
then
84 write(*,*)
'DEBUG: BILU start setup',
hecmw_wtime()-t0
88 if (hecmat%Iarray(98) == 1)
then
90 else if (hecmat%Iarray(97) == 1)
then
115 if (nthreads == 1)
then
117 allocate(colorindex(0:1), perm(n), iperm(n))
125 allocate(colorindex(0:n), perm_tmp(n), perm(n), iperm(n))
127 hecmat%indexU, hecmat%itemU, perm_tmp, iperm)
128 if (bilu_debug >= 1)
write(*,*)
'DEBUG: RCM ordering done',
hecmw_wtime()-t0
129 if (precond.eq.10)
then
131 hecmat%indexU, hecmat%itemU, perm_tmp, &
132 ncolor_in, ncolor, colorindex, perm, iperm)
133 elseif (precond.eq.11)
then
135 hecmat%indexU, hecmat%itemU, perm_tmp, &
136 ncolor_in, ncolor, colorindex, perm, iperm)
137 elseif (precond.eq.12)
then
139 hecmat%indexU, hecmat%itemU, perm_tmp, &
140 ncolor_in, ncolor, colorindex, perm, iperm)
146 do j=hecmat%indexU(i-1)+1,hecmat%indexU(i)
147 if( hecmat%itemU(j) > n )
exit
151 npl = max(hecmat%indexL(n),npl)
152 npu = hecmat%indexU(n)
153 allocate(indexl(0:n), indexu(0:n), iteml(npl), itemu(npu))
155 hecmat%indexL, hecmat%indexU, hecmat%itemL, hecmat%itemU, &
156 indexl, indexu, iteml, itemu)
157 if (bilu_debug >= 1)
write(*,*)
'DEBUG: reordering profile done',
hecmw_wtime()-t0
159 allocate(d(9*n), al(9*npl), au(9*npu))
161 hecmat%indexL, hecmat%indexU, hecmat%itemL, hecmat%itemU, &
162 hecmat%AL, hecmat%AU, hecmat%D, &
163 indexl, indexu, iteml, itemu, al, au, d)
164 if (bilu_debug >= 1)
write(*,*)
'DEBUG: reordering values done',
hecmw_wtime()-t0
169 if (precond.eq.10)
call form_ilu0_33 &
170 & (n, n, npl, npu, d, al, indexl, iteml, au, indexu, itemu, &
173 if (precond.eq.11)
call form_ilu1_33 &
174 & (n, n, npl, npu, d, al, indexl, iteml, au, indexu, itemu, &
176 if (precond.eq.12)
call form_ilu2_33 &
177 & (n, n, npl, npu, d, al, indexl, iteml, au, indexu, itemu, &
183 hecmat%Iarray(98) = 0
184 hecmat%Iarray(97) = 0
186 if (bilu_debug >= 1)
write(*,*)
'DEBUG: BILU setup done',
hecmw_wtime()-t0
190 subroutine setup_tuning_parameters
193 integer(kind=kint) :: blockindex, elementcount, numofelement, ii
194 real(kind=
kreal) :: numofelementperblock
195 integer(kind=kint) :: my_rank
196 integer(kind=kint) :: ic, i
198 if (bilu_debug >= 1)
write(*,*)
'DEBUG: setting up tuning parameters for SSOR'
200 numofblock = numofthread * numofblockperthread
201 if (
allocated(ictoblockindex))
deallocate(ictoblockindex)
202 if (
allocated(blockindextocolorindex))
deallocate(blockindextocolorindex)
203 allocate (ictoblockindex(0:ncolor), &
204 blockindextocolorindex(0:numofblock + ncolor))
205 numofelement = n + indexl(n) + indexu(n)
206 numofelementperblock = dble(numofelement) / numofblock
209 ictoblockindex(0) = 0
210 blockindextocolorindex = -1
211 blockindextocolorindex(0) = 0
220 do i = colorindex(ic-1)+1, colorindex(ic)
221 elementcount = elementcount + 1
222 elementcount = elementcount + (indexl(i) - indexl(i-1))
223 elementcount = elementcount + (indexu(i) - indexu(i-1))
224 if (elementcount > ii * numofelementperblock &
225 .or. i == colorindex(ic))
then
227 blockindex = blockindex + 1
228 blockindextocolorindex(blockindex) = i
233 ictoblockindex(ic) = blockindex
235 numofblock = blockindex
238 sectorcachesize0, sectorcachesize1 )
239 end subroutine setup_tuning_parameters
243 real(kind=
kreal),
intent(inout) :: ww(:)
244 integer(kind=kint) :: i, j, isl, iel, isu, ieu, k
245 real(kind=
kreal) :: sw1, sw2, sw3, x1, x2, x3
247 integer(kind=kint) :: ic, iold
250 integer(kind=kint) :: blockindex
253 call setup_tuning_parameters
266 do blockindex = ictoblockindex(ic-1)+1, ictoblockindex(ic)
267 do i = blockindextocolorindex(blockindex-1)+1, &
268 blockindextocolorindex(blockindex)
280 sw1= sw1 - allu0(9*j-8)*x1-allu0(9*j-7)*x2-allu0(9*j-6)*x3
281 sw2= sw2 - allu0(9*j-5)*x1-allu0(9*j-4)*x2-allu0(9*j-3)*x3
282 sw3= sw3 - allu0(9*j-2)*x1-allu0(9*j-1)*x2-allu0(9*j )*x3
288 x2= x2 - dlu0(9*i-5)*x1
289 x3= x3 - dlu0(9*i-2)*x1 - dlu0(9*i-1)*x2
291 x2= dlu0(9*i-4)*( x2 - dlu0(9*i-3)*x3 )
292 x1= dlu0(9*i-8)*( x1 - dlu0(9*i-6)*x3 - dlu0(9*i-7)*x2)
304 do ic = ncolor, 1, -1
306 do blockindex = ictoblockindex(ic), ictoblockindex(ic-1)+1, -1
307 do i = blockindextocolorindex(blockindex), &
308 blockindextocolorindex(blockindex-1)+1, -1
309 isu= inumfi1u(i-1) + 1
319 sw1= sw1 + aulu0(9*j-8)*x1+aulu0(9*j-7)*x2+aulu0(9*j-6)*x3
320 sw2= sw2 + aulu0(9*j-5)*x1+aulu0(9*j-4)*x2+aulu0(9*j-3)*x3
321 sw3= sw3 + aulu0(9*j-2)*x1+aulu0(9*j-1)*x2+aulu0(9*j )*x3
326 x2= x2 - dlu0(9*i-5)*x1
327 x3= x3 - dlu0(9*i-2)*x1 - dlu0(9*i-1)*x2
329 x2= dlu0(9*i-4)*( x2 - dlu0(9*i-3)*x3 )
330 x1= dlu0(9*i-8)*( x1 - dlu0(9*i-6)*x3 - dlu0(9*i-7)*x2)
332 ww(3*iold-2)= ww(3*iold-2) - x1
333 ww(3*iold-1)= ww(3*iold-1) - x2
334 ww(3*iold )= ww(3*iold ) - x3
344 if (
associated(dlu0))
deallocate(dlu0)
345 if (
associated(allu0))
deallocate(allu0)
346 if (
associated(aulu0))
deallocate(aulu0)
347 if (
associated(inumfi1l))
deallocate(inumfi1l)
348 if (
associated(inumfi1u))
deallocate(inumfi1u)
349 if (
associated(fi1l))
deallocate(fi1l)
350 if (
associated(fi1u))
deallocate(fi1u)
351 if (
associated(colorindex))
deallocate(colorindex)
352 if (
associated(perm))
deallocate(perm)
353 if (
associated(iperm))
deallocate(iperm)
354 if (
associated(d))
deallocate(d)
355 if (
associated(al))
deallocate(al)
356 if (
associated(au))
deallocate(au)
357 if (
associated(indexl))
deallocate(indexl)
358 if (
associated(indexu))
deallocate(indexu)
359 if (
associated(iteml))
deallocate(iteml)
360 if (
associated(itemu))
deallocate(itemu)
378 initialized = .false.
388 subroutine form_ilu0_33 &
389 & (n, np, npl, npu, d, al, inl, ial, au, inu, iau, &
392 integer(kind=kint ),
intent(in):: n, np, npu, npl
393 real (kind=
kreal),
intent(in):: sigma_diag
395 real(kind=
kreal),
dimension(9*NPL),
intent(in):: al
396 real(kind=
kreal),
dimension(9*NPU),
intent(in):: au
397 real(kind=
kreal),
dimension(9*NP ),
intent(in):: d
399 integer(kind=kint ),
dimension(0:NP) ,
intent(in) :: inu, inl
400 integer(kind=kint ),
dimension( NPL),
intent(in) :: ial
401 integer(kind=kint ),
dimension( NPU),
intent(in) :: iau
403 integer(kind=kint),
dimension(:),
allocatable :: iw1, iw2
404 real (kind=
kreal),
dimension(3,3) :: rhs_aij, dkinv, aik, akj
405 integer(kind=kint) :: i,jj,ij0,kk
406 integer(kind=kint) :: j,k, j_old, k_old
407 allocate (iw1(np) , iw2(np))
408 allocate(dlu0(9*np), allu0(9*npl), aulu0(9*npu))
409 allocate(inumfi1l(0:np), inumfi1u(0:np), fi1l(npl), fi1u(npu))
437 dlu0(9*i-8)=dlu0(9*i-8)*sigma_diag
438 dlu0(9*i-4)=dlu0(9*i-4)*sigma_diag
439 dlu0(9*i )=dlu0(9*i )*sigma_diag
444 dlu0(9*i-8), dlu0(9*i-7), dlu0(9*i-6), &
445 dlu0(9*i-5), dlu0(9*i-4), dlu0(9*i-3), &
446 dlu0(9*i-2), dlu0(9*i-1), dlu0(9*i ))
447 dlu0(9*i-8)= dkinv(1,1)
448 dlu0(9*i-7)= dkinv(1,2)
449 dlu0(9*i-6)= dkinv(1,3)
450 dlu0(9*i-5)= dkinv(2,1)
451 dlu0(9*i-4)= dkinv(2,2)
452 dlu0(9*i-3)= dkinv(2,3)
453 dlu0(9*i-2)= dkinv(3,1)
454 dlu0(9*i-1)= dkinv(3,2)
455 dlu0(9*i )= dkinv(3,3)
461 do k= inumfi1l(i-1)+1, inumfi1l(i)
465 do k= inumfi1u(i-1)+1, inumfi1u(i)
469 do kk= inl(i-1)+1, inl(i)
473 dkinv(1,1)= dlu0(9*k-8)
474 dkinv(1,2)= dlu0(9*k-7)
475 dkinv(1,3)= dlu0(9*k-6)
476 dkinv(2,1)= dlu0(9*k-5)
477 dkinv(2,2)= dlu0(9*k-4)
478 dkinv(2,3)= dlu0(9*k-3)
479 dkinv(3,1)= dlu0(9*k-2)
480 dkinv(3,2)= dlu0(9*k-1)
481 dkinv(3,3)= dlu0(9*k )
483 aik(1,1)= allu0(9*kk-8)
484 aik(1,2)= allu0(9*kk-7)
485 aik(1,3)= allu0(9*kk-6)
486 aik(2,1)= allu0(9*kk-5)
487 aik(2,2)= allu0(9*kk-4)
488 aik(2,3)= allu0(9*kk-3)
489 aik(3,1)= allu0(9*kk-2)
490 aik(3,2)= allu0(9*kk-1)
491 aik(3,3)= allu0(9*kk )
493 do jj= inu(k-1)+1, inu(k)
496 if (iw1(j_old).eq.0.and.iw2(j_old).eq.0) cycle
498 akj(1,1)= aulu0(9*jj-8)
499 akj(1,2)= aulu0(9*jj-7)
500 akj(1,3)= aulu0(9*jj-6)
501 akj(2,1)= aulu0(9*jj-5)
502 akj(2,2)= aulu0(9*jj-4)
503 akj(2,3)= aulu0(9*jj-3)
504 akj(3,1)= aulu0(9*jj-2)
505 akj(3,2)= aulu0(9*jj-1)
506 akj(3,3)= aulu0(9*jj )
508 call ilu1b33 (rhs_aij, dkinv, aik, akj)
511 dlu0(9*i-8)= dlu0(9*i-8) - rhs_aij(1,1)
512 dlu0(9*i-7)= dlu0(9*i-7) - rhs_aij(1,2)
513 dlu0(9*i-6)= dlu0(9*i-6) - rhs_aij(1,3)
514 dlu0(9*i-5)= dlu0(9*i-5) - rhs_aij(2,1)
515 dlu0(9*i-4)= dlu0(9*i-4) - rhs_aij(2,2)
516 dlu0(9*i-3)= dlu0(9*i-3) - rhs_aij(2,3)
517 dlu0(9*i-2)= dlu0(9*i-2) - rhs_aij(3,1)
518 dlu0(9*i-1)= dlu0(9*i-1) - rhs_aij(3,2)
519 dlu0(9*i )= dlu0(9*i ) - rhs_aij(3,3)
524 allu0(9*ij0-8)= allu0(9*ij0-8) - rhs_aij(1,1)
525 allu0(9*ij0-7)= allu0(9*ij0-7) - rhs_aij(1,2)
526 allu0(9*ij0-6)= allu0(9*ij0-6) - rhs_aij(1,3)
527 allu0(9*ij0-5)= allu0(9*ij0-5) - rhs_aij(2,1)
528 allu0(9*ij0-4)= allu0(9*ij0-4) - rhs_aij(2,2)
529 allu0(9*ij0-3)= allu0(9*ij0-3) - rhs_aij(2,3)
530 allu0(9*ij0-2)= allu0(9*ij0-2) - rhs_aij(3,1)
531 allu0(9*ij0-1)= allu0(9*ij0-1) - rhs_aij(3,2)
532 allu0(9*ij0 )= allu0(9*ij0 ) - rhs_aij(3,3)
537 aulu0(9*ij0-8)= aulu0(9*ij0-8) - rhs_aij(1,1)
538 aulu0(9*ij0-7)= aulu0(9*ij0-7) - rhs_aij(1,2)
539 aulu0(9*ij0-6)= aulu0(9*ij0-6) - rhs_aij(1,3)
540 aulu0(9*ij0-5)= aulu0(9*ij0-5) - rhs_aij(2,1)
541 aulu0(9*ij0-4)= aulu0(9*ij0-4) - rhs_aij(2,2)
542 aulu0(9*ij0-3)= aulu0(9*ij0-3) - rhs_aij(2,3)
543 aulu0(9*ij0-2)= aulu0(9*ij0-2) - rhs_aij(3,1)
544 aulu0(9*ij0-1)= aulu0(9*ij0-1) - rhs_aij(3,2)
545 aulu0(9*ij0 )= aulu0(9*ij0 ) - rhs_aij(3,3)
552 dlu0(9*i-8), dlu0(9*i-7), dlu0(9*i-6), &
553 dlu0(9*i-5), dlu0(9*i-4), dlu0(9*i-3), &
554 dlu0(9*i-2), dlu0(9*i-1), dlu0(9*i ))
555 dlu0(9*i-8)= dkinv(1,1)
556 dlu0(9*i-7)= dkinv(1,2)
557 dlu0(9*i-6)= dkinv(1,3)
558 dlu0(9*i-5)= dkinv(2,1)
559 dlu0(9*i-4)= dkinv(2,2)
560 dlu0(9*i-3)= dkinv(2,3)
561 dlu0(9*i-2)= dkinv(3,1)
562 dlu0(9*i-1)= dkinv(3,2)
563 dlu0(9*i )= dkinv(3,3)
566 deallocate (iw1, iw2)
567 end subroutine form_ilu0_33
576 subroutine form_ilu1_33 &
577 & (n, np, npl, npu, d, al, inl, ial, au, inu, iau, &
580 integer(kind=kint ),
intent(in):: n, np, npu, npl
581 real (kind=
kreal),
intent(in):: sigma_diag
583 real(kind=
kreal),
dimension(9*NPL),
intent(in):: al
584 real(kind=
kreal),
dimension(9*NPU),
intent(in):: au
585 real(kind=
kreal),
dimension(9*NP ),
intent(in):: d
587 integer(kind=kint ),
dimension(0:NP) ,
intent(in) :: inu, inl
588 integer(kind=kint ),
dimension( NPL),
intent(in) :: ial
589 integer(kind=kint ),
dimension( NPU),
intent(in) :: iau
591 integer(kind=kint),
dimension(:),
allocatable :: iw1, iw2
592 integer(kind=kint),
dimension(:),
allocatable :: iwsl, iwsu
593 real (kind=
kreal),
dimension(3,3) :: rhs_aij, dkinv, aik, akj
594 integer(kind=kint) :: nplf1,npuf1
595 integer(kind=kint) :: i,jj,jj1,ij0,kk,ik,kk1,kk2,l,isk,iek,isj,iej
596 integer(kind=kint) :: icou,icou0,icouu,icouu1,icouu2,icouu3,icoul,icoul1,icoul2,icoul3
597 integer(kind=kint) :: j,k,isl,isu
598 integer(kind=kint) :: kk_old, k_old, j_old, jj_old
607 allocate (iw1(np) , iw2(np))
608 allocate (inumfi1l(0:np), inumfi1u(0:np))
619 do l= inl(i-1)+1, inl(i)
620 iw1(iperm(ial(l)))= 1
622 do l= inu(i-1)+1, inu(i)
623 iw1(iperm(iau(l)))= 1
637 if (iw1(jj).eq.0 .and. jj.lt.i)
then
638 inumfi1l(i)= inumfi1l(i)+1
641 if (iw1(jj).eq.0 .and. jj.gt.i)
then
642 inumfi1u(i)= inumfi1u(i)+1
647 nplf1= nplf1 + inumfi1l(i)
648 npuf1= npuf1 + inumfi1u(i)
653 allocate (iwsl(0:np), iwsu(0:np))
654 allocate (fi1l(npl+nplf1), fi1u(npu+npuf1))
655 allocate (allu0(9*(npl+nplf1)), aulu0(9*(npu+npuf1)))
663 iwsl(i)= inl(i)-inl(i-1) + inumfi1l(i) + iwsl(i-1)
664 iwsu(i)= inu(i)-inu(i-1) + inumfi1u(i) + iwsu(i-1)
670 inumfi1l(i)= inumfi1l(i-1) + inumfi1l(i)
671 inumfi1u(i)= inumfi1u(i-1) + inumfi1u(i)
675 do l= inl(i-1)+1, inl(i)
676 iw1(iperm(ial(l)))= 1
678 do l= inu(i-1)+1, inu(i)
679 iw1(iperm(iau(l)))= 1
692 if (iw1(jj).eq.0 .and. jj.lt.i)
then
694 fi1l(icoul+iwsl(i-1)+inl(i)-inl(i-1))= jj_old
697 if (iw1(jj).eq.0 .and. jj.gt.i)
then
699 fi1u(icouu+iwsu(i-1)+inu(i)-inu(i-1))= jj_old
717 icoul1= inl(i) - inl(i-1)
718 icoul2= inumfi1l(i) - inumfi1l(i-1)
719 icoul3= icoul1 + icoul2
720 icouu1= inu(i) - inu(i-1)
721 icouu2= inumfi1u(i) - inumfi1u(i-1)
722 icouu3= icouu1 + icouu2
728 do k= inl(i-1)+1, inl(i)
730 iw1(icou0)= iperm(ial(k))
733 do k= inumfi1l(i-1)+1, inumfi1l(i)
735 iw1(icou0)= iperm(fi1l(icou0+iwsl(i-1)))
741 call fill_in_s33_sort (iw1, iw2, icoul3, np)
744 fi1l(k+isl)= perm(iw1(k))
746 if (ik.le.inl(i)-inl(i-1))
then
749 allu0(kk1-8)= al(kk2-8)
750 allu0(kk1-7)= al(kk2-7)
751 allu0(kk1-6)= al(kk2-6)
752 allu0(kk1-5)= al(kk2-5)
753 allu0(kk1-4)= al(kk2-4)
754 allu0(kk1-3)= al(kk2-3)
755 allu0(kk1-2)= al(kk2-2)
756 allu0(kk1-1)= al(kk2-1)
757 allu0(kk1 )= al(kk2 )
763 do k= inu(i-1)+1, inu(i)
765 iw1(icou0)= iperm(iau(k))
768 do k= inumfi1u(i-1)+1, inumfi1u(i)
770 iw1(icou0)= iperm(fi1u(icou0+iwsu(i-1)))
776 call fill_in_s33_sort (iw1, iw2, icouu3, np)
779 fi1u(k+isu)= perm(iw1(k))
781 if (ik.le.inu(i)-inu(i-1))
then
784 aulu0(kk1-8)= au(kk2-8)
785 aulu0(kk1-7)= au(kk2-7)
786 aulu0(kk1-6)= au(kk2-6)
787 aulu0(kk1-5)= au(kk2-5)
788 aulu0(kk1-4)= au(kk2-4)
789 aulu0(kk1-3)= au(kk2-3)
790 aulu0(kk1-2)= au(kk2-2)
791 aulu0(kk1-1)= au(kk2-1)
792 aulu0(kk1 )= au(kk2 )
805 deallocate (iwsl, iwsu)
812 allocate (dlu0(9*np))
815 dlu0(9*i-8)=dlu0(9*i-8)*sigma_diag
816 dlu0(9*i-4)=dlu0(9*i-4)*sigma_diag
817 dlu0(9*i )=dlu0(9*i )*sigma_diag
822 dlu0(9*i-8), dlu0(9*i-7), dlu0(9*i-6), &
823 dlu0(9*i-5), dlu0(9*i-4), dlu0(9*i-3), &
824 dlu0(9*i-2), dlu0(9*i-1), dlu0(9*i ))
825 dlu0(9*i-8)= dkinv(1,1)
826 dlu0(9*i-7)= dkinv(1,2)
827 dlu0(9*i-6)= dkinv(1,3)
828 dlu0(9*i-5)= dkinv(2,1)
829 dlu0(9*i-4)= dkinv(2,2)
830 dlu0(9*i-3)= dkinv(2,3)
831 dlu0(9*i-2)= dkinv(3,1)
832 dlu0(9*i-1)= dkinv(3,2)
833 dlu0(9*i )= dkinv(3,3)
839 do k= inumfi1l(i-1)+1, inumfi1l(i)
843 do k= inumfi1u(i-1)+1, inumfi1u(i)
847 do kk= inl(i-1)+1, inl(i)
851 dkinv(1,1)= dlu0(9*k-8)
852 dkinv(1,2)= dlu0(9*k-7)
853 dkinv(1,3)= dlu0(9*k-6)
854 dkinv(2,1)= dlu0(9*k-5)
855 dkinv(2,2)= dlu0(9*k-4)
856 dkinv(2,3)= dlu0(9*k-3)
857 dkinv(3,1)= dlu0(9*k-2)
858 dkinv(3,2)= dlu0(9*k-1)
859 dkinv(3,3)= dlu0(9*k )
861 do kk1= inumfi1l(i-1)+1, inumfi1l(i)
862 if (k_old.eq.fi1l(kk1))
then
863 aik(1,1)= allu0(9*kk1-8)
864 aik(1,2)= allu0(9*kk1-7)
865 aik(1,3)= allu0(9*kk1-6)
866 aik(2,1)= allu0(9*kk1-5)
867 aik(2,2)= allu0(9*kk1-4)
868 aik(2,3)= allu0(9*kk1-3)
869 aik(3,1)= allu0(9*kk1-2)
870 aik(3,2)= allu0(9*kk1-1)
871 aik(3,3)= allu0(9*kk1 )
876 do jj= inu(k-1)+1, inu(k)
879 do jj1= inumfi1u(k-1)+1, inumfi1u(k)
880 if (j_old.eq.fi1u(jj1))
then
881 akj(1,1)= aulu0(9*jj1-8)
882 akj(1,2)= aulu0(9*jj1-7)
883 akj(1,3)= aulu0(9*jj1-6)
884 akj(2,1)= aulu0(9*jj1-5)
885 akj(2,2)= aulu0(9*jj1-4)
886 akj(2,3)= aulu0(9*jj1-3)
887 akj(3,1)= aulu0(9*jj1-2)
888 akj(3,2)= aulu0(9*jj1-1)
889 akj(3,3)= aulu0(9*jj1 )
894 call ilu1b33 (rhs_aij, dkinv, aik, akj)
897 dlu0(9*i-8)= dlu0(9*i-8) - rhs_aij(1,1)
898 dlu0(9*i-7)= dlu0(9*i-7) - rhs_aij(1,2)
899 dlu0(9*i-6)= dlu0(9*i-6) - rhs_aij(1,3)
900 dlu0(9*i-5)= dlu0(9*i-5) - rhs_aij(2,1)
901 dlu0(9*i-4)= dlu0(9*i-4) - rhs_aij(2,2)
902 dlu0(9*i-3)= dlu0(9*i-3) - rhs_aij(2,3)
903 dlu0(9*i-2)= dlu0(9*i-2) - rhs_aij(3,1)
904 dlu0(9*i-1)= dlu0(9*i-1) - rhs_aij(3,2)
905 dlu0(9*i )= dlu0(9*i ) - rhs_aij(3,3)
910 allu0(9*ij0-8)= allu0(9*ij0-8) - rhs_aij(1,1)
911 allu0(9*ij0-7)= allu0(9*ij0-7) - rhs_aij(1,2)
912 allu0(9*ij0-6)= allu0(9*ij0-6) - rhs_aij(1,3)
913 allu0(9*ij0-5)= allu0(9*ij0-5) - rhs_aij(2,1)
914 allu0(9*ij0-4)= allu0(9*ij0-4) - rhs_aij(2,2)
915 allu0(9*ij0-3)= allu0(9*ij0-3) - rhs_aij(2,3)
916 allu0(9*ij0-2)= allu0(9*ij0-2) - rhs_aij(3,1)
917 allu0(9*ij0-1)= allu0(9*ij0-1) - rhs_aij(3,2)
918 allu0(9*ij0 )= allu0(9*ij0 ) - rhs_aij(3,3)
923 aulu0(9*ij0-8)= aulu0(9*ij0-8) - rhs_aij(1,1)
924 aulu0(9*ij0-7)= aulu0(9*ij0-7) - rhs_aij(1,2)
925 aulu0(9*ij0-6)= aulu0(9*ij0-6) - rhs_aij(1,3)
926 aulu0(9*ij0-5)= aulu0(9*ij0-5) - rhs_aij(2,1)
927 aulu0(9*ij0-4)= aulu0(9*ij0-4) - rhs_aij(2,2)
928 aulu0(9*ij0-3)= aulu0(9*ij0-3) - rhs_aij(2,3)
929 aulu0(9*ij0-2)= aulu0(9*ij0-2) - rhs_aij(3,1)
930 aulu0(9*ij0-1)= aulu0(9*ij0-1) - rhs_aij(3,2)
931 aulu0(9*ij0 )= aulu0(9*ij0 ) - rhs_aij(3,3)
938 dlu0(9*i-8), dlu0(9*i-7), dlu0(9*i-6), &
939 dlu0(9*i-5), dlu0(9*i-4), dlu0(9*i-3), &
940 dlu0(9*i-2), dlu0(9*i-1), dlu0(9*i ))
941 dlu0(9*i-8)= dkinv(1,1)
942 dlu0(9*i-7)= dkinv(1,2)
943 dlu0(9*i-6)= dkinv(1,3)
944 dlu0(9*i-5)= dkinv(2,1)
945 dlu0(9*i-4)= dkinv(2,2)
946 dlu0(9*i-3)= dkinv(2,3)
947 dlu0(9*i-2)= dkinv(3,1)
948 dlu0(9*i-1)= dkinv(3,2)
949 dlu0(9*i )= dkinv(3,3)
952 deallocate (iw1, iw2)
954 end subroutine form_ilu1_33
963 subroutine form_ilu2_33 &
964 & (n, np, npl, npu, d, al, inl, ial, au, inu, iau, &
967 integer(kind=kint ),
intent(in):: n, np, npu, npl
968 real (kind=
kreal),
intent(in):: sigma_diag
970 real(kind=
kreal),
dimension(9*NPL),
intent(in):: al
971 real(kind=
kreal),
dimension(9*NPU),
intent(in):: au
972 real(kind=
kreal),
dimension(9*NP ),
intent(in):: d
974 integer(kind=kint ),
dimension(0:NP) ,
intent(in) :: inu, inl
975 integer(kind=kint ),
dimension( NPL),
intent(in) :: ial
976 integer(kind=kint ),
dimension( NPU),
intent(in) :: iau
978 integer(kind=kint),
dimension(:),
allocatable:: iw1 , iw2
979 integer(kind=kint),
dimension(:),
allocatable:: iwsl, iwsu
980 integer(kind=kint),
dimension(:),
allocatable:: iconfi1l, iconfi1u
981 integer(kind=kint),
dimension(:),
allocatable:: inumfi2l, inumfi2u
982 integer(kind=kint),
dimension(:),
allocatable:: fi2l, fi2u
983 real (kind=
kreal),
dimension(3,3) :: rhs_aij, dkinv, aik, akj
984 integer(kind=kint) :: nplf1,nplf2,npuf1,npuf2,ias,iconik,iconkj
985 integer(kind=kint) :: i,jj,ij0,kk,ik,kk1,kk2,l,isk,iek,isj,iej
986 integer(kind=kint) :: icou,icouu,icouu1,icouu2,icouu3,icoul,icoul1,icoul2,icoul3
987 integer(kind=kint) :: j,k,isl,isu
988 integer(kind=kint) :: j_old, jj_old, k_old, kk_old
998 allocate (iw1(np) , iw2(np))
999 allocate (inumfi2l(0:np), inumfi2u(0:np))
1010 do l= inl(i-1)+1, inl(i)
1011 iw1(iperm(ial(l)))= 1
1013 do l= inu(i-1)+1, inu(i)
1014 iw1(iperm(iau(l)))= 1
1027 if (iw1(jj).eq.0 .and. jj.lt.i)
then
1028 inumfi2l(i)= inumfi2l(i)+1
1031 if (iw1(jj).eq.0 .and. jj.gt.i)
then
1032 inumfi2u(i)= inumfi2u(i)+1
1037 nplf1= nplf1 + inumfi2l(i)
1038 npuf1= npuf1 + inumfi2u(i)
1043 allocate (iwsl(0:np), iwsu(0:np))
1044 allocate (fi2l(nplf1), fi2u(npuf1))
1052 inumfi2l(i)= inumfi2l(i-1) + inumfi2l(i)
1053 inumfi2u(i)= inumfi2u(i-1) + inumfi2u(i)
1057 do l= inl(i-1)+1, inl(i)
1058 iw1(iperm(ial(l)))= 1
1060 do l= inu(i-1)+1, inu(i)
1061 iw1(iperm(iau(l)))= 1
1074 if (iw1(jj).eq.0 .and. jj.lt.i)
then
1076 fi2l(icoul+inumfi2l(i-1))= jj_old
1079 if (iw1(jj).eq.0 .and. jj.gt.i)
then
1081 fi2u(icouu+inumfi2u(i-1))= jj_old
1094 allocate (inumfi1l(0:np), inumfi1u(0:np))
1105 do l= inl(i-1)+1, inl(i)
1106 iw1(iperm(ial(l)))= 2
1108 do l= inu(i-1)+1, inu(i)
1109 iw1(iperm(iau(l)))= 2
1112 do l= inumfi2l(i-1)+1, inumfi2l(i)
1113 iw1(iperm(fi2l(l)))= 1
1116 do l= inumfi2u(i-1)+1, inumfi2u(i)
1117 iw1(iperm(fi2u(l)))= 1
1125 isj= inumfi2u(kk-1) + 1
1130 if (iw1(jj).eq.0 .and. jj.lt.i)
then
1131 inumfi1l(i)= inumfi1l(i) + 1
1134 if (iw1(jj).eq.0 .and. jj.gt.i)
then
1135 inumfi1u(i)= inumfi1u(i) + 1
1141 isk= inumfi2l(i-1)+1
1151 if (iw1(jj).eq.0 .and. jj.lt.i)
then
1152 inumfi1l(i)= inumfi1l(i) + 1
1155 if (iw1(jj).eq.0 .and. jj.gt.i)
then
1156 inumfi1u(i)= inumfi1u(i) + 1
1161 nplf2= nplf2 + inumfi1l(i)
1162 npuf2= npuf2 + inumfi1u(i)
1167 allocate (fi1l(npl+nplf1+nplf2))
1168 allocate (fi1u(npu+npuf1+npuf2))
1170 allocate (iconfi1l(npl+nplf1+nplf2))
1171 allocate (iconfi1u(npu+npuf1+npuf2))
1176 iwsl(i)= inl(i)-inl(i-1) + inumfi2l(i)-inumfi2l(i-1) + &
1177 & inumfi1l(i) + iwsl(i-1)
1178 iwsu(i)= inu(i)-inu(i-1) + inumfi2u(i)-inumfi2u(i-1) + &
1179 & inumfi1u(i) + iwsu(i-1)
1185 inumfi1l(i)= inumfi1l(i-1) + inumfi1l(i)
1186 inumfi1u(i)= inumfi1u(i-1) + inumfi1u(i)
1190 do l= inl(i-1)+1, inl(i)
1191 iw1(iperm(ial(l)))= 1
1193 do l= inu(i-1)+1, inu(i)
1194 iw1(iperm(iau(l)))= 1
1197 do l= inumfi2l(i-1)+1, inumfi2l(i)
1198 iw1(iperm(fi2l(l)))= 1
1201 do l= inumfi2u(i-1)+1, inumfi2u(i)
1202 iw1(iperm(fi2u(l)))= 1
1210 isj= inumfi2u(kk-1) + 1
1215 if (iw1(jj).eq.0 .and. jj.lt.i)
then
1216 ias= inl(i)-inl(i-1)+inumfi2l(i)-inumfi2l(i-1)+iwsl(i-1)
1218 fi1l(icoul+ias)= jj_old
1221 if (iw1(jj).eq.0 .and. jj.gt.i)
then
1222 ias= inu(i)-inu(i-1)+inumfi2u(i)-inumfi2u(i-1)+iwsu(i-1)
1224 fi1u(icouu+ias)= jj_old
1230 isk= inumfi2l(i-1) + 1
1240 if (iw1(jj).eq.0 .and. jj.lt.i)
then
1241 ias= inl(i)-inl(i-1)+inumfi2l(i)-inumfi2l(i-1)+iwsl(i-1)
1243 fi1l(icoul+ias)= jj_old
1246 if (iw1(jj).eq.0 .and. jj.gt.i)
then
1247 ias= inu(i)-inu(i-1)+inumfi2u(i)-inumfi2u(i-1)+iwsu(i-1)
1249 fi1u(icouu+ias)= jj_old
1262 allocate (allu0(9*(npl+nplf1+nplf2)))
1263 allocate (aulu0(9*(npu+npuf1+npuf2)))
1275 icoul1= inl(i) - inl(i-1)
1276 icoul2= inumfi2l(i) - inumfi2l(i-1) + icoul1
1277 icoul3= inumfi1l(i) - inumfi1l(i-1) + icoul2
1279 icouu1= inu(i) - inu(i-1)
1280 icouu2= inumfi2u(i) - inumfi2u(i-1) + icouu1
1281 icouu3= inumfi1u(i) - inumfi1u(i-1) + icouu2
1288 do k= inl(i-1)+1, inl(i)
1290 iw1(icou)= iperm(ial(k))
1294 do k= inumfi2l(i-1)+1, inumfi2l(i)
1296 iw1(icou+icoul1)= iperm(fi2l(k))
1300 do k= inumfi1l(i-1)+1, inumfi1l(i)
1302 iw1(icou+icoul2)= iperm(fi1l(icou+icoul2+isl))
1309 call fill_in_s33_sort (iw1, iw2, icoul3, np)
1312 fi1l(k+isl)= perm(iw1(k))
1314 if (ik.le.inl(i)-inl(i-1))
then
1316 kk2= 9*(ik+inl(i-1))
1317 allu0(kk1-8)= al(kk2-8)
1318 allu0(kk1-7)= al(kk2-7)
1319 allu0(kk1-6)= al(kk2-6)
1320 allu0(kk1-5)= al(kk2-5)
1321 allu0(kk1-4)= al(kk2-4)
1322 allu0(kk1-3)= al(kk2-3)
1323 allu0(kk1-2)= al(kk2-2)
1324 allu0(kk1-1)= al(kk2-1)
1325 allu0(kk1 )= al(kk2 )
1330 do k= inl(i-1)+1, inl(i)
1336 do k= inumfi2l(i-1)+1, inumfi2l(i)
1342 do k= inumfi1l(i-1)+1, inumfi1l(i)
1348 iconfi1l(k+isl)= iw1(iw2(k))
1353 do k= inu(i-1)+1, inu(i)
1355 iw1(icou)= iperm(iau(k))
1359 do k= inumfi2u(i-1)+1, inumfi2u(i)
1361 iw1(icou+icouu1)= iperm(fi2u(k))
1365 do k= inumfi1u(i-1)+1, inumfi1u(i)
1367 iw1(icou+icouu2)= iperm(fi1u(icou+icouu2+isu))
1373 call fill_in_s33_sort (iw1, iw2, icouu3, np)
1376 fi1u(k+isu)= perm(iw1(k))
1378 if (ik.le.inu(i)-inu(i-1))
then
1380 kk2= 9*(ik+inu(i-1))
1381 aulu0(kk1-8)= au(kk2-8)
1382 aulu0(kk1-7)= au(kk2-7)
1383 aulu0(kk1-6)= au(kk2-6)
1384 aulu0(kk1-5)= au(kk2-5)
1385 aulu0(kk1-4)= au(kk2-4)
1386 aulu0(kk1-3)= au(kk2-3)
1387 aulu0(kk1-2)= au(kk2-2)
1388 aulu0(kk1-1)= au(kk2-1)
1389 aulu0(kk1 )= au(kk2 )
1394 do k= inu(i-1)+1, inu(i)
1400 do k= inumfi2u(i-1)+1, inumfi2u(i)
1406 do k= inumfi1u(i-1)+1, inumfi1u(i)
1412 iconfi1u(k+isu)= iw1(iw2(k))
1420 inumfi1l(i)= iwsl(i)
1421 inumfi1u(i)= iwsu(i)
1424 deallocate (iwsl, iwsu)
1425 deallocate (inumfi2l, inumfi2u)
1426 deallocate ( fi2l, fi2u)
1433 allocate (dlu0(9*np))
1436 dlu0(9*i-8)=dlu0(9*i-8)*sigma_diag
1437 dlu0(9*i-4)=dlu0(9*i-4)*sigma_diag
1438 dlu0(9*i )=dlu0(9*i )*sigma_diag
1443 dlu0(9*i-8), dlu0(9*i-7), dlu0(9*i-6), &
1444 dlu0(9*i-5), dlu0(9*i-4), dlu0(9*i-3), &
1445 dlu0(9*i-2), dlu0(9*i-1), dlu0(9*i ))
1446 dlu0(9*i-8)= dkinv(1,1)
1447 dlu0(9*i-7)= dkinv(1,2)
1448 dlu0(9*i-6)= dkinv(1,3)
1449 dlu0(9*i-5)= dkinv(2,1)
1450 dlu0(9*i-4)= dkinv(2,2)
1451 dlu0(9*i-3)= dkinv(2,3)
1452 dlu0(9*i-2)= dkinv(3,1)
1453 dlu0(9*i-1)= dkinv(3,2)
1454 dlu0(9*i )= dkinv(3,3)
1460 do k= inumfi1l(i-1)+1, inumfi1l(i)
1464 do k= inumfi1u(i-1)+1, inumfi1u(i)
1468 do kk= inumfi1l(i-1)+1, inumfi1l(i)
1471 iconik= iconfi1l(kk)
1473 dkinv(1,1)= dlu0(9*k-8)
1474 dkinv(1,2)= dlu0(9*k-7)
1475 dkinv(1,3)= dlu0(9*k-6)
1476 dkinv(2,1)= dlu0(9*k-5)
1477 dkinv(2,2)= dlu0(9*k-4)
1478 dkinv(2,3)= dlu0(9*k-3)
1479 dkinv(3,1)= dlu0(9*k-2)
1480 dkinv(3,2)= dlu0(9*k-1)
1481 dkinv(3,3)= dlu0(9*k )
1483 aik(1,1)= allu0(9*kk-8)
1484 aik(1,2)= allu0(9*kk-7)
1485 aik(1,3)= allu0(9*kk-6)
1486 aik(2,1)= allu0(9*kk-5)
1487 aik(2,2)= allu0(9*kk-4)
1488 aik(2,3)= allu0(9*kk-3)
1489 aik(3,1)= allu0(9*kk-2)
1490 aik(3,2)= allu0(9*kk-1)
1491 aik(3,3)= allu0(9*kk )
1493 do jj= inumfi1u(k-1)+1, inumfi1u(k)
1496 iconkj= iconfi1u(jj)
1498 if ((iconik+iconkj).lt.2)
then
1499 akj(1,1)= aulu0(9*jj-8)
1500 akj(1,2)= aulu0(9*jj-7)
1501 akj(1,3)= aulu0(9*jj-6)
1502 akj(2,1)= aulu0(9*jj-5)
1503 akj(2,2)= aulu0(9*jj-4)
1504 akj(2,3)= aulu0(9*jj-3)
1505 akj(3,1)= aulu0(9*jj-2)
1506 akj(3,2)= aulu0(9*jj-1)
1507 akj(3,3)= aulu0(9*jj )
1509 call ilu1b33 (rhs_aij, dkinv, aik, akj)
1512 dlu0(9*i-8)= dlu0(9*i-8) - rhs_aij(1,1)
1513 dlu0(9*i-7)= dlu0(9*i-7) - rhs_aij(1,2)
1514 dlu0(9*i-6)= dlu0(9*i-6) - rhs_aij(1,3)
1515 dlu0(9*i-5)= dlu0(9*i-5) - rhs_aij(2,1)
1516 dlu0(9*i-4)= dlu0(9*i-4) - rhs_aij(2,2)
1517 dlu0(9*i-3)= dlu0(9*i-3) - rhs_aij(2,3)
1518 dlu0(9*i-2)= dlu0(9*i-2) - rhs_aij(3,1)
1519 dlu0(9*i-1)= dlu0(9*i-1) - rhs_aij(3,2)
1520 dlu0(9*i )= dlu0(9*i ) - rhs_aij(3,3)
1525 allu0(9*ij0-8)= allu0(9*ij0-8) - rhs_aij(1,1)
1526 allu0(9*ij0-7)= allu0(9*ij0-7) - rhs_aij(1,2)
1527 allu0(9*ij0-6)= allu0(9*ij0-6) - rhs_aij(1,3)
1528 allu0(9*ij0-5)= allu0(9*ij0-5) - rhs_aij(2,1)
1529 allu0(9*ij0-4)= allu0(9*ij0-4) - rhs_aij(2,2)
1530 allu0(9*ij0-3)= allu0(9*ij0-3) - rhs_aij(2,3)
1531 allu0(9*ij0-2)= allu0(9*ij0-2) - rhs_aij(3,1)
1532 allu0(9*ij0-1)= allu0(9*ij0-1) - rhs_aij(3,2)
1533 allu0(9*ij0 )= allu0(9*ij0 ) - rhs_aij(3,3)
1538 aulu0(9*ij0-8)= aulu0(9*ij0-8) - rhs_aij(1,1)
1539 aulu0(9*ij0-7)= aulu0(9*ij0-7) - rhs_aij(1,2)
1540 aulu0(9*ij0-6)= aulu0(9*ij0-6) - rhs_aij(1,3)
1541 aulu0(9*ij0-5)= aulu0(9*ij0-5) - rhs_aij(2,1)
1542 aulu0(9*ij0-4)= aulu0(9*ij0-4) - rhs_aij(2,2)
1543 aulu0(9*ij0-3)= aulu0(9*ij0-3) - rhs_aij(2,3)
1544 aulu0(9*ij0-2)= aulu0(9*ij0-2) - rhs_aij(3,1)
1545 aulu0(9*ij0-1)= aulu0(9*ij0-1) - rhs_aij(3,2)
1546 aulu0(9*ij0 )= aulu0(9*ij0 ) - rhs_aij(3,3)
1553 dlu0(9*i-8), dlu0(9*i-7), dlu0(9*i-6), &
1554 dlu0(9*i-5), dlu0(9*i-4), dlu0(9*i-3), &
1555 dlu0(9*i-2), dlu0(9*i-1), dlu0(9*i ))
1556 dlu0(9*i-8)= dkinv(1,1)
1557 dlu0(9*i-7)= dkinv(1,2)
1558 dlu0(9*i-6)= dkinv(1,3)
1559 dlu0(9*i-5)= dkinv(2,1)
1560 dlu0(9*i-4)= dkinv(2,2)
1561 dlu0(9*i-3)= dkinv(2,3)
1562 dlu0(9*i-2)= dkinv(3,1)
1563 dlu0(9*i-1)= dkinv(3,2)
1564 dlu0(9*i )= dkinv(3,3)
1567 deallocate (iw1, iw2)
1568 deallocate (iconfi1l, iconfi1u)
1570 end subroutine form_ilu2_33
1578 subroutine fill_in_s33_sort (STEM, INUM, N, NP)
1581 integer(kind=kint) :: n, np
1582 integer(kind=kint),
dimension(NP) :: stem
1583 integer(kind=kint),
dimension(NP) :: inum
1584 integer(kind=kint),
dimension(:),
allocatable :: istack
1585 integer(kind=kint) :: m,nstack,jstack,l,ir,ip,i,j,k,ss,ii,temp,it
1587 allocate (istack(-np:+np))
1606 if (stem(i).le.ss)
goto 2
1617 if (jstack.eq.0)
then
1623 l = istack(jstack-1)
1636 if (stem(l+1).gt.stem(ir))
then
1645 if (stem(l).gt.stem(ir))
then
1654 if (stem(l+1).gt.stem(l))
then
1671 if (stem(i).lt.ss)
goto 3
1675 if (stem(j).gt.ss)
goto 4
1698 if (jstack.gt.nstack)
then
1699 write (*,*)
'NSTACK overflow'
1703 if (ir-i+1.ge.j-1)
then
1708 istack(jstack )= j-1
1717 end subroutine fill_in_s33_sort
1726 subroutine ilu1a33 (ALU, D11,D12,D13,D21,D22,D23,D31,D32,D33)
1729 real(kind=
kreal) :: alu(3,3), pw(3)
1730 real(kind=
kreal) :: d11,d12,d13,d21,d22,d23,d31,d32,d33
1731 integer(kind=kint) :: i,j,k
1744 if (alu(k,k) == 0.d0)
then
1746 stop
'ERROR: Divide by zero in ILU setup'
1748 alu(k,k)= 1.d0/alu(k,k)
1750 alu(i,k)= alu(i,k) * alu(k,k)
1752 pw(j)= alu(i,j) - alu(i,k)*alu(k,j)
1774 real(kind=
kreal) :: rhs_aij(3,3), dkinv(3,3), aik(3,3), akj(3,3)
1775 real(kind=
kreal) :: x1,x2,x3
1783 x2= x2 - dkinv(2,1)*x1
1784 x3= x3 - dkinv(3,1)*x1 - dkinv(3,2)*x2
1787 x2= dkinv(2,2)*( x2 - dkinv(2,3)*x3 )
1788 x1= dkinv(1,1)*( x1 - dkinv(1,3)*x3 - dkinv(1,2)*x2)
1790 rhs_aij(1,1)= aik(1,1)*x1 + aik(1,2)*x2 + aik(1,3)*x3
1791 rhs_aij(2,1)= aik(2,1)*x1 + aik(2,2)*x2 + aik(2,3)*x3
1792 rhs_aij(3,1)= aik(3,1)*x1 + aik(3,2)*x2 + aik(3,3)*x3
1800 x2= x2 - dkinv(2,1)*x1
1801 x3= x3 - dkinv(3,1)*x1 - dkinv(3,2)*x2
1804 x2= dkinv(2,2)*( x2 - dkinv(2,3)*x3 )
1805 x1= dkinv(1,1)*( x1 - dkinv(1,3)*x3 - dkinv(1,2)*x2)
1807 rhs_aij(1,2)= aik(1,1)*x1 + aik(1,2)*x2 + aik(1,3)*x3
1808 rhs_aij(2,2)= aik(2,1)*x1 + aik(2,2)*x2 + aik(2,3)*x3
1809 rhs_aij(3,2)= aik(3,1)*x1 + aik(3,2)*x2 + aik(3,3)*x3
1817 x2= x2 - dkinv(2,1)*x1
1818 x3= x3 - dkinv(3,1)*x1 - dkinv(3,2)*x2
1821 x2= dkinv(2,2)*( x2 - dkinv(2,3)*x3 )
1822 x1= dkinv(1,1)*( x1 - dkinv(1,3)*x3 - dkinv(1,2)*x2)
1824 rhs_aij(1,3)= aik(1,1)*x1 + aik(1,2)*x2 + aik(1,3)*x3
1825 rhs_aij(2,3)= aik(2,1)*x1 + aik(2,2)*x2 + aik(2,3)*x3
1826 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)
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)