21 integer(kind=kint) :: N
22 real(kind=
kreal),
pointer :: dlu0(:) => null()
23 real(kind=
kreal),
pointer :: allu0(:) => null()
24 real(kind=
kreal),
pointer :: aulu0(:) => null()
25 integer(kind=kint),
pointer :: inumFI1L(:) => null()
26 integer(kind=kint),
pointer :: inumFI1U(:) => null()
27 integer(kind=kint),
pointer :: FI1L(:) => null()
28 integer(kind=kint),
pointer :: FI1U(:) => null()
30 logical,
save :: INITIALIZED = .false.
37 integer(kind=kint ) :: np, npu, npl
38 integer(kind=kint ) :: precond
39 real (kind=
kreal) :: sigma, sigma_diag
41 real(kind=
kreal),
pointer :: d(:)
42 real(kind=
kreal),
pointer :: al(:)
43 real(kind=
kreal),
pointer :: au(:)
45 integer(kind=kint ),
pointer :: inl(:), inu(:)
46 integer(kind=kint ),
pointer :: ial(:)
47 integer(kind=kint ),
pointer :: iau(:)
50 if (hecmat%Iarray(98) == 1)
then
52 else if (hecmat%Iarray(97) == 1)
then
74 if (precond.eq.10)
call form_ilu0_33 &
75 & (n, np, npl, npu, d, al, inl, ial, au, inu, iau, &
77 if (precond.eq.11)
call form_ilu1_33 &
78 & (n, np, npl, npu, d, al, inl, ial, au, inu, iau, &
80 if (precond.eq.12)
call form_ilu2_33 &
81 & (n, np, npl, npu, d, al, inl, ial, au, inu, iau, &
92 real(kind=
kreal),
intent(inout) :: ww(:)
93 integer(kind=kint) :: i, j, isl, iel, isu, ieu, k
94 real(kind=
kreal) :: sw1, sw2, sw3, x1, x2, x3
109 sw1= sw1 - allu0(9*j-8)*x1-allu0(9*j-7)*x2-allu0(9*j-6)*x3
110 sw2= sw2 - allu0(9*j-5)*x1-allu0(9*j-4)*x2-allu0(9*j-3)*x3
111 sw3= sw3 - allu0(9*j-2)*x1-allu0(9*j-1)*x2-allu0(9*j )*x3
117 x2= x2 - dlu0(9*i-5)*x1
118 x3= x3 - dlu0(9*i-2)*x1 - dlu0(9*i-1)*x2
120 x2= dlu0(9*i-4)*( x2 - dlu0(9*i-3)*x3 )
121 x1= dlu0(9*i-8)*( x1 - dlu0(9*i-6)*x3 - dlu0(9*i-7)*x2)
131 isu= inumfi1u(i-1) + 1
141 sw1= sw1 + aulu0(9*j-8)*x1+aulu0(9*j-7)*x2+aulu0(9*j-6)*x3
142 sw2= sw2 + aulu0(9*j-5)*x1+aulu0(9*j-4)*x2+aulu0(9*j-3)*x3
143 sw3= sw3 + aulu0(9*j-2)*x1+aulu0(9*j-1)*x2+aulu0(9*j )*x3
148 x2= x2 - dlu0(9*i-5)*x1
149 x3= x3 - dlu0(9*i-2)*x1 - dlu0(9*i-1)*x2
151 x2= dlu0(9*i-4)*( x2 - dlu0(9*i-3)*x3 )
152 x1= dlu0(9*i-8)*( x1 - dlu0(9*i-6)*x3 - dlu0(9*i-7)*x2)
153 ww(3*i-2)= ww(3*i-2) - x1
154 ww(3*i-1)= ww(3*i-1) - x2
155 ww(3*i )= ww(3*i ) - x3
161 if (
associated(dlu0))
deallocate(dlu0)
162 if (
associated(allu0))
deallocate(allu0)
163 if (
associated(aulu0))
deallocate(aulu0)
164 if (
associated(inumfi1l))
deallocate(inumfi1l)
165 if (
associated(inumfi1u))
deallocate(inumfi1u)
166 if (
associated(fi1l))
deallocate(fi1l)
167 if (
associated(fi1u))
deallocate(fi1u)
175 initialized = .false.
185 subroutine form_ilu0_33 &
186 & (n, np, npl, npu, d, al, inl, ial, au, inu, iau, &
189 integer(kind=kint ),
intent(in):: n, np, npu, npl
190 real (kind=
kreal),
intent(in):: sigma, sigma_diag
192 real(kind=
kreal),
dimension(9*NPL),
intent(in):: al
193 real(kind=
kreal),
dimension(9*NPU),
intent(in):: au
194 real(kind=
kreal),
dimension(9*NP ),
intent(in):: d
196 integer(kind=kint ),
dimension(0:NP) ,
intent(in) :: inu, inl
197 integer(kind=kint ),
dimension( NPL),
intent(in) :: ial
198 integer(kind=kint ),
dimension( NPU),
intent(in) :: iau
200 integer(kind=kint),
dimension(:),
allocatable :: iw1, iw2
201 real (kind=
kreal),
dimension(3,3) :: rhs_aij, dkinv, aik, akj
202 integer(kind=kint) :: i,jj,ij0,kk
203 integer(kind=kint) :: j,k
204 allocate (iw1(np) , iw2(np))
205 allocate(dlu0(9*np), allu0(9*npl), aulu0(9*npu))
206 allocate(inumfi1l(0:np), inumfi1u(0:np), fi1l(npl), fi1u(npu))
234 dlu0(9*i-8)=dlu0(9*i-8)*sigma_diag
235 dlu0(9*i-4)=dlu0(9*i-4)*sigma_diag
236 dlu0(9*i )=dlu0(9*i )*sigma_diag
241 dlu0(9*i-8), dlu0(9*i-7), dlu0(9*i-6), &
242 dlu0(9*i-5), dlu0(9*i-4), dlu0(9*i-3), &
243 dlu0(9*i-2), dlu0(9*i-1), dlu0(9*i ))
244 dlu0(9*i-8)= dkinv(1,1)
245 dlu0(9*i-7)= dkinv(1,2)
246 dlu0(9*i-6)= dkinv(1,3)
247 dlu0(9*i-5)= dkinv(2,1)
248 dlu0(9*i-4)= dkinv(2,2)
249 dlu0(9*i-3)= dkinv(2,3)
250 dlu0(9*i-2)= dkinv(3,1)
251 dlu0(9*i-1)= dkinv(3,2)
252 dlu0(9*i )= dkinv(3,3)
258 do k= inumfi1l(i-1)+1, inumfi1l(i)
262 do k= inumfi1u(i-1)+1, inumfi1u(i)
266 do kk= inl(i-1)+1, inl(i)
269 dkinv(1,1)= dlu0(9*k-8)
270 dkinv(1,2)= dlu0(9*k-7)
271 dkinv(1,3)= dlu0(9*k-6)
272 dkinv(2,1)= dlu0(9*k-5)
273 dkinv(2,2)= dlu0(9*k-4)
274 dkinv(2,3)= dlu0(9*k-3)
275 dkinv(3,1)= dlu0(9*k-2)
276 dkinv(3,2)= dlu0(9*k-1)
277 dkinv(3,3)= dlu0(9*k )
279 aik(1,1)= allu0(9*kk-8)
280 aik(1,2)= allu0(9*kk-7)
281 aik(1,3)= allu0(9*kk-6)
282 aik(2,1)= allu0(9*kk-5)
283 aik(2,2)= allu0(9*kk-4)
284 aik(2,3)= allu0(9*kk-3)
285 aik(3,1)= allu0(9*kk-2)
286 aik(3,2)= allu0(9*kk-1)
287 aik(3,3)= allu0(9*kk )
289 do jj= inu(k-1)+1, inu(k)
291 if (iw1(j).eq.0.and.iw2(j).eq.0) cycle
293 akj(1,1)= aulu0(9*jj-8)
294 akj(1,2)= aulu0(9*jj-7)
295 akj(1,3)= aulu0(9*jj-6)
296 akj(2,1)= aulu0(9*jj-5)
297 akj(2,2)= aulu0(9*jj-4)
298 akj(2,3)= aulu0(9*jj-3)
299 akj(3,1)= aulu0(9*jj-2)
300 akj(3,2)= aulu0(9*jj-1)
301 akj(3,3)= aulu0(9*jj )
303 call ilu1b33 (rhs_aij, dkinv, aik, akj)
306 dlu0(9*i-8)= dlu0(9*i-8) - rhs_aij(1,1)
307 dlu0(9*i-7)= dlu0(9*i-7) - rhs_aij(1,2)
308 dlu0(9*i-6)= dlu0(9*i-6) - rhs_aij(1,3)
309 dlu0(9*i-5)= dlu0(9*i-5) - rhs_aij(2,1)
310 dlu0(9*i-4)= dlu0(9*i-4) - rhs_aij(2,2)
311 dlu0(9*i-3)= dlu0(9*i-3) - rhs_aij(2,3)
312 dlu0(9*i-2)= dlu0(9*i-2) - rhs_aij(3,1)
313 dlu0(9*i-1)= dlu0(9*i-1) - rhs_aij(3,2)
314 dlu0(9*i )= dlu0(9*i ) - rhs_aij(3,3)
319 allu0(9*ij0-8)= allu0(9*ij0-8) - rhs_aij(1,1)
320 allu0(9*ij0-7)= allu0(9*ij0-7) - rhs_aij(1,2)
321 allu0(9*ij0-6)= allu0(9*ij0-6) - rhs_aij(1,3)
322 allu0(9*ij0-5)= allu0(9*ij0-5) - rhs_aij(2,1)
323 allu0(9*ij0-4)= allu0(9*ij0-4) - rhs_aij(2,2)
324 allu0(9*ij0-3)= allu0(9*ij0-3) - rhs_aij(2,3)
325 allu0(9*ij0-2)= allu0(9*ij0-2) - rhs_aij(3,1)
326 allu0(9*ij0-1)= allu0(9*ij0-1) - rhs_aij(3,2)
327 allu0(9*ij0 )= allu0(9*ij0 ) - rhs_aij(3,3)
332 aulu0(9*ij0-8)= aulu0(9*ij0-8) - rhs_aij(1,1)
333 aulu0(9*ij0-7)= aulu0(9*ij0-7) - rhs_aij(1,2)
334 aulu0(9*ij0-6)= aulu0(9*ij0-6) - rhs_aij(1,3)
335 aulu0(9*ij0-5)= aulu0(9*ij0-5) - rhs_aij(2,1)
336 aulu0(9*ij0-4)= aulu0(9*ij0-4) - rhs_aij(2,2)
337 aulu0(9*ij0-3)= aulu0(9*ij0-3) - rhs_aij(2,3)
338 aulu0(9*ij0-2)= aulu0(9*ij0-2) - rhs_aij(3,1)
339 aulu0(9*ij0-1)= aulu0(9*ij0-1) - rhs_aij(3,2)
340 aulu0(9*ij0 )= aulu0(9*ij0 ) - rhs_aij(3,3)
347 dlu0(9*i-8), dlu0(9*i-7), dlu0(9*i-6), &
348 dlu0(9*i-5), dlu0(9*i-4), dlu0(9*i-3), &
349 dlu0(9*i-2), dlu0(9*i-1), dlu0(9*i ))
350 dlu0(9*i-8)= dkinv(1,1)
351 dlu0(9*i-7)= dkinv(1,2)
352 dlu0(9*i-6)= dkinv(1,3)
353 dlu0(9*i-5)= dkinv(2,1)
354 dlu0(9*i-4)= dkinv(2,2)
355 dlu0(9*i-3)= dkinv(2,3)
356 dlu0(9*i-2)= dkinv(3,1)
357 dlu0(9*i-1)= dkinv(3,2)
358 dlu0(9*i )= dkinv(3,3)
361 deallocate (iw1, iw2)
362 end subroutine form_ilu0_33
371 subroutine form_ilu1_33 &
372 & (n, np, npl, npu, d, al, inl, ial, au, inu, iau, &
375 integer(kind=kint ),
intent(in):: n, np, npu, npl
376 real (kind=
kreal),
intent(in):: sigma, sigma_diag
378 real(kind=
kreal),
dimension(9*NPL),
intent(in):: al
379 real(kind=
kreal),
dimension(9*NPU),
intent(in):: au
380 real(kind=
kreal),
dimension(9*NP ),
intent(in):: d
382 integer(kind=kint ),
dimension(0:NP) ,
intent(in) :: inu, inl
383 integer(kind=kint ),
dimension( NPL),
intent(in) :: ial
384 integer(kind=kint ),
dimension( NPU),
intent(in) :: iau
386 integer(kind=kint),
dimension(:),
allocatable :: iw1, iw2
387 integer(kind=kint),
dimension(:),
allocatable :: iwsl, iwsu
388 real (kind=
kreal),
dimension(3,3) :: rhs_aij, dkinv, aik, akj
389 integer(kind=kint) :: nplf1,npuf1
390 integer(kind=kint) :: i,jj,jj1,ij0,kk,ik,kk1,kk2,l,isk,iek,isj,iej
391 integer(kind=kint) :: icou,icou0,icouu,icouu1,icouu2,icouu3,icoul,icoul1,icoul2,icoul3
392 integer(kind=kint) :: j,k,isl,isu
401 allocate (iw1(np) , iw2(np))
402 allocate (inumfi1l(0:np), inumfi1u(0:np))
413 do l= inl(i-1)+1, inl(i)
416 do l= inu(i-1)+1, inu(i)
428 if (iw1(jj).eq.0 .and. jj.lt.i)
then
429 inumfi1l(i)= inumfi1l(i)+1
432 if (iw1(jj).eq.0 .and. jj.gt.i)
then
433 inumfi1u(i)= inumfi1u(i)+1
438 nplf1= nplf1 + inumfi1l(i)
439 npuf1= npuf1 + inumfi1u(i)
444 allocate (iwsl(0:np), iwsu(0:np))
445 allocate (fi1l(npl+nplf1), fi1u(npu+npuf1))
446 allocate (allu0(9*(npl+nplf1)), aulu0(9*(npu+npuf1)))
454 iwsl(i)= inl(i)-inl(i-1) + inumfi1l(i) + iwsl(i-1)
455 iwsu(i)= inu(i)-inu(i-1) + inumfi1u(i) + iwsu(i-1)
461 inumfi1l(i)= inumfi1l(i-1) + inumfi1l(i)
462 inumfi1u(i)= inumfi1u(i-1) + inumfi1u(i)
466 do l= inl(i-1)+1, inl(i)
469 do l= inu(i-1)+1, inu(i)
481 if (iw1(jj).eq.0 .and. jj.lt.i)
then
483 fi1l(icoul+iwsl(i-1)+inl(i)-inl(i-1))= jj
486 if (iw1(jj).eq.0 .and. jj.gt.i)
then
488 fi1u(icouu+iwsu(i-1)+inu(i)-inu(i-1))= jj
506 icoul1= inl(i) - inl(i-1)
507 icoul2= inumfi1l(i) - inumfi1l(i-1)
508 icoul3= icoul1 + icoul2
509 icouu1= inu(i) - inu(i-1)
510 icouu2= inumfi1u(i) - inumfi1u(i-1)
511 icouu3= icouu1 + icouu2
515 do k= inl(i-1)+1, inl(i)
520 do k= inumfi1l(i-1)+1, inumfi1l(i)
522 iw1(icou0)= fi1l(icou0+iwsl(i-1))
528 call fill_in_s33_sort (iw1, iw2, icoul3, np)
533 if (ik.le.inl(i)-inl(i-1))
then
536 allu0(kk1-8)= al(kk2-8)
537 allu0(kk1-7)= al(kk2-7)
538 allu0(kk1-6)= al(kk2-6)
539 allu0(kk1-5)= al(kk2-5)
540 allu0(kk1-4)= al(kk2-4)
541 allu0(kk1-3)= al(kk2-3)
542 allu0(kk1-2)= al(kk2-2)
543 allu0(kk1-1)= al(kk2-1)
544 allu0(kk1 )= al(kk2 )
550 do k= inu(i-1)+1, inu(i)
555 do k= inumfi1u(i-1)+1, inumfi1u(i)
557 iw1(icou0)= fi1u(icou0+iwsu(i-1))
563 call fill_in_s33_sort (iw1, iw2, icouu3, np)
568 if (ik.le.inu(i)-inu(i-1))
then
571 aulu0(kk1-8)= au(kk2-8)
572 aulu0(kk1-7)= au(kk2-7)
573 aulu0(kk1-6)= au(kk2-6)
574 aulu0(kk1-5)= au(kk2-5)
575 aulu0(kk1-4)= au(kk2-4)
576 aulu0(kk1-3)= au(kk2-3)
577 aulu0(kk1-2)= au(kk2-2)
578 aulu0(kk1-1)= au(kk2-1)
579 aulu0(kk1 )= au(kk2 )
592 deallocate (iwsl, iwsu)
599 allocate (dlu0(9*np))
602 dlu0(9*i-8)=dlu0(9*i-8)*sigma_diag
603 dlu0(9*i-4)=dlu0(9*i-4)*sigma_diag
604 dlu0(9*i )=dlu0(9*i )*sigma_diag
609 dlu0(9*i-8), dlu0(9*i-7), dlu0(9*i-6), &
610 dlu0(9*i-5), dlu0(9*i-4), dlu0(9*i-3), &
611 dlu0(9*i-2), dlu0(9*i-1), dlu0(9*i ))
612 dlu0(9*i-8)= dkinv(1,1)
613 dlu0(9*i-7)= dkinv(1,2)
614 dlu0(9*i-6)= dkinv(1,3)
615 dlu0(9*i-5)= dkinv(2,1)
616 dlu0(9*i-4)= dkinv(2,2)
617 dlu0(9*i-3)= dkinv(2,3)
618 dlu0(9*i-2)= dkinv(3,1)
619 dlu0(9*i-1)= dkinv(3,2)
620 dlu0(9*i )= dkinv(3,3)
626 do k= inumfi1l(i-1)+1, inumfi1l(i)
630 do k= inumfi1u(i-1)+1, inumfi1u(i)
634 do kk= inl(i-1)+1, inl(i)
637 dkinv(1,1)= dlu0(9*k-8)
638 dkinv(1,2)= dlu0(9*k-7)
639 dkinv(1,3)= dlu0(9*k-6)
640 dkinv(2,1)= dlu0(9*k-5)
641 dkinv(2,2)= dlu0(9*k-4)
642 dkinv(2,3)= dlu0(9*k-3)
643 dkinv(3,1)= dlu0(9*k-2)
644 dkinv(3,2)= dlu0(9*k-1)
645 dkinv(3,3)= dlu0(9*k )
647 do kk1= inumfi1l(i-1)+1, inumfi1l(i)
648 if (k.eq.fi1l(kk1))
then
649 aik(1,1)= allu0(9*kk1-8)
650 aik(1,2)= allu0(9*kk1-7)
651 aik(1,3)= allu0(9*kk1-6)
652 aik(2,1)= allu0(9*kk1-5)
653 aik(2,2)= allu0(9*kk1-4)
654 aik(2,3)= allu0(9*kk1-3)
655 aik(3,1)= allu0(9*kk1-2)
656 aik(3,2)= allu0(9*kk1-1)
657 aik(3,3)= allu0(9*kk1 )
662 do jj= inu(k-1)+1, inu(k)
664 do jj1= inumfi1u(k-1)+1, inumfi1u(k)
665 if (j.eq.fi1u(jj1))
then
666 akj(1,1)= aulu0(9*jj1-8)
667 akj(1,2)= aulu0(9*jj1-7)
668 akj(1,3)= aulu0(9*jj1-6)
669 akj(2,1)= aulu0(9*jj1-5)
670 akj(2,2)= aulu0(9*jj1-4)
671 akj(2,3)= aulu0(9*jj1-3)
672 akj(3,1)= aulu0(9*jj1-2)
673 akj(3,2)= aulu0(9*jj1-1)
674 akj(3,3)= aulu0(9*jj1 )
679 call ilu1b33 (rhs_aij, dkinv, aik, akj)
682 dlu0(9*i-8)= dlu0(9*i-8) - rhs_aij(1,1)
683 dlu0(9*i-7)= dlu0(9*i-7) - rhs_aij(1,2)
684 dlu0(9*i-6)= dlu0(9*i-6) - rhs_aij(1,3)
685 dlu0(9*i-5)= dlu0(9*i-5) - rhs_aij(2,1)
686 dlu0(9*i-4)= dlu0(9*i-4) - rhs_aij(2,2)
687 dlu0(9*i-3)= dlu0(9*i-3) - rhs_aij(2,3)
688 dlu0(9*i-2)= dlu0(9*i-2) - rhs_aij(3,1)
689 dlu0(9*i-1)= dlu0(9*i-1) - rhs_aij(3,2)
690 dlu0(9*i )= dlu0(9*i ) - rhs_aij(3,3)
695 allu0(9*ij0-8)= allu0(9*ij0-8) - rhs_aij(1,1)
696 allu0(9*ij0-7)= allu0(9*ij0-7) - rhs_aij(1,2)
697 allu0(9*ij0-6)= allu0(9*ij0-6) - rhs_aij(1,3)
698 allu0(9*ij0-5)= allu0(9*ij0-5) - rhs_aij(2,1)
699 allu0(9*ij0-4)= allu0(9*ij0-4) - rhs_aij(2,2)
700 allu0(9*ij0-3)= allu0(9*ij0-3) - rhs_aij(2,3)
701 allu0(9*ij0-2)= allu0(9*ij0-2) - rhs_aij(3,1)
702 allu0(9*ij0-1)= allu0(9*ij0-1) - rhs_aij(3,2)
703 allu0(9*ij0 )= allu0(9*ij0 ) - rhs_aij(3,3)
708 aulu0(9*ij0-8)= aulu0(9*ij0-8) - rhs_aij(1,1)
709 aulu0(9*ij0-7)= aulu0(9*ij0-7) - rhs_aij(1,2)
710 aulu0(9*ij0-6)= aulu0(9*ij0-6) - rhs_aij(1,3)
711 aulu0(9*ij0-5)= aulu0(9*ij0-5) - rhs_aij(2,1)
712 aulu0(9*ij0-4)= aulu0(9*ij0-4) - rhs_aij(2,2)
713 aulu0(9*ij0-3)= aulu0(9*ij0-3) - rhs_aij(2,3)
714 aulu0(9*ij0-2)= aulu0(9*ij0-2) - rhs_aij(3,1)
715 aulu0(9*ij0-1)= aulu0(9*ij0-1) - rhs_aij(3,2)
716 aulu0(9*ij0 )= aulu0(9*ij0 ) - rhs_aij(3,3)
723 dlu0(9*i-8), dlu0(9*i-7), dlu0(9*i-6), &
724 dlu0(9*i-5), dlu0(9*i-4), dlu0(9*i-3), &
725 dlu0(9*i-2), dlu0(9*i-1), dlu0(9*i ))
726 dlu0(9*i-8)= dkinv(1,1)
727 dlu0(9*i-7)= dkinv(1,2)
728 dlu0(9*i-6)= dkinv(1,3)
729 dlu0(9*i-5)= dkinv(2,1)
730 dlu0(9*i-4)= dkinv(2,2)
731 dlu0(9*i-3)= dkinv(2,3)
732 dlu0(9*i-2)= dkinv(3,1)
733 dlu0(9*i-1)= dkinv(3,2)
734 dlu0(9*i )= dkinv(3,3)
737 deallocate (iw1, iw2)
739 end subroutine form_ilu1_33
748 subroutine form_ilu2_33 &
749 & (n, np, npl, npu, d, al, inl, ial, au, inu, iau, &
752 integer(kind=kint ),
intent(in):: n, np, npu, npl
753 real (kind=
kreal),
intent(in):: sigma, sigma_diag
755 real(kind=
kreal),
dimension(9*NPL),
intent(in):: al
756 real(kind=
kreal),
dimension(9*NPU),
intent(in):: au
757 real(kind=
kreal),
dimension(9*NP ),
intent(in):: d
759 integer(kind=kint ),
dimension(0:NP) ,
intent(in) :: inu, inl
760 integer(kind=kint ),
dimension( NPL),
intent(in) :: ial
761 integer(kind=kint ),
dimension( NPU),
intent(in) :: iau
763 integer(kind=kint),
dimension(:),
allocatable:: iw1 , iw2
764 integer(kind=kint),
dimension(:),
allocatable:: iwsl, iwsu
765 integer(kind=kint),
dimension(:),
allocatable:: iconfi1l, iconfi1u
766 integer(kind=kint),
dimension(:),
allocatable:: inumfi2l, inumfi2u
767 integer(kind=kint),
dimension(:),
allocatable:: fi2l, fi2u
768 real (kind=
kreal),
dimension(3,3) :: rhs_aij, dkinv, aik, akj
769 integer(kind=kint) :: nplf1,nplf2,npuf1,npuf2,ias,iconik,iconkj
770 integer(kind=kint) :: i,jj,ij0,kk,ik,kk1,kk2,l,isk,iek,isj,iej
771 integer(kind=kint) :: icou,icouu,icouu1,icouu2,icouu3,icoul,icoul1,icoul2,icoul3
772 integer(kind=kint) :: j,k,isl,isu
782 allocate (iw1(np) , iw2(np))
783 allocate (inumfi2l(0:np), inumfi2u(0:np))
794 do l= inl(i-1)+1, inl(i)
797 do l= inu(i-1)+1, inu(i)
809 if (iw1(jj).eq.0 .and. jj.lt.i)
then
810 inumfi2l(i)= inumfi2l(i)+1
813 if (iw1(jj).eq.0 .and. jj.gt.i)
then
814 inumfi2u(i)= inumfi2u(i)+1
819 nplf1= nplf1 + inumfi2l(i)
820 npuf1= npuf1 + inumfi2u(i)
825 allocate (iwsl(0:np), iwsu(0:np))
826 allocate (fi2l(nplf1), fi2u(npuf1))
834 inumfi2l(i)= inumfi2l(i-1) + inumfi2l(i)
835 inumfi2u(i)= inumfi2u(i-1) + inumfi2u(i)
839 do l= inl(i-1)+1, inl(i)
842 do l= inu(i-1)+1, inu(i)
854 if (iw1(jj).eq.0 .and. jj.lt.i)
then
856 fi2l(icoul+inumfi2l(i-1))= jj
859 if (iw1(jj).eq.0 .and. jj.gt.i)
then
861 fi2u(icouu+inumfi2u(i-1))= jj
874 allocate (inumfi1l(0:np), inumfi1u(0:np))
885 do l= inl(i-1)+1, inl(i)
888 do l= inu(i-1)+1, inu(i)
892 do l= inumfi2l(i-1)+1, inumfi2l(i)
896 do l= inumfi2u(i-1)+1, inumfi2u(i)
904 isj= inumfi2u(kk-1) + 1
908 if (iw1(jj).eq.0 .and. jj.lt.i)
then
909 inumfi1l(i)= inumfi1l(i) + 1
912 if (iw1(jj).eq.0 .and. jj.gt.i)
then
913 inumfi1u(i)= inumfi1u(i) + 1
927 if (iw1(jj).eq.0 .and. jj.lt.i)
then
928 inumfi1l(i)= inumfi1l(i) + 1
931 if (iw1(jj).eq.0 .and. jj.gt.i)
then
932 inumfi1u(i)= inumfi1u(i) + 1
937 nplf2= nplf2 + inumfi1l(i)
938 npuf2= npuf2 + inumfi1u(i)
943 allocate (fi1l(npl+nplf1+nplf2))
944 allocate (fi1u(npu+npuf1+npuf2))
946 allocate (iconfi1l(npl+nplf1+nplf2))
947 allocate (iconfi1u(npu+npuf1+npuf2))
952 iwsl(i)= inl(i)-inl(i-1) + inumfi2l(i)-inumfi2l(i-1) + &
953 & inumfi1l(i) + iwsl(i-1)
954 iwsu(i)= inu(i)-inu(i-1) + inumfi2u(i)-inumfi2u(i-1) + &
955 & inumfi1u(i) + iwsu(i-1)
961 inumfi1l(i)= inumfi1l(i-1) + inumfi1l(i)
962 inumfi1u(i)= inumfi1u(i-1) + inumfi1u(i)
966 do l= inl(i-1)+1, inl(i)
969 do l= inu(i-1)+1, inu(i)
973 do l= inumfi2l(i-1)+1, inumfi2l(i)
977 do l= inumfi2u(i-1)+1, inumfi2u(i)
985 isj= inumfi2u(kk-1) + 1
989 if (iw1(jj).eq.0 .and. jj.lt.i)
then
990 ias= inl(i)-inl(i-1)+inumfi2l(i)-inumfi2l(i-1)+iwsl(i-1)
995 if (iw1(jj).eq.0 .and. jj.gt.i)
then
996 ias= inu(i)-inu(i-1)+inumfi2u(i)-inumfi2u(i-1)+iwsu(i-1)
1004 isk= inumfi2l(i-1) + 1
1012 if (iw1(jj).eq.0 .and. jj.lt.i)
then
1013 ias= inl(i)-inl(i-1)+inumfi2l(i)-inumfi2l(i-1)+iwsl(i-1)
1018 if (iw1(jj).eq.0 .and. jj.gt.i)
then
1019 ias= inu(i)-inu(i-1)+inumfi2u(i)-inumfi2u(i-1)+iwsu(i-1)
1034 allocate (allu0(9*(npl+nplf1+nplf2)))
1035 allocate (aulu0(9*(npu+npuf1+npuf2)))
1046 icoul1= inl(i) - inl(i-1)
1047 icoul2= inumfi2l(i) - inumfi2l(i-1) + icoul1
1048 icoul3= inumfi1l(i) - inumfi1l(i-1) + icoul2
1050 icouu1= inu(i) - inu(i-1)
1051 icouu2= inumfi2u(i) - inumfi2u(i-1) + icouu1
1052 icouu3= inumfi1u(i) - inumfi1u(i-1) + icouu2
1057 do k= inl(i-1)+1, inl(i)
1063 do k= inumfi2l(i-1)+1, inumfi2l(i)
1065 iw1(icou+icoul1)= fi2l(k)
1069 do k= inumfi1l(i-1)+1, inumfi1l(i)
1071 iw1(icou+icoul2)= fi1l(icou+icoul2+isl)
1078 call fill_in_s33_sort (iw1, iw2, icoul3, np)
1083 if (ik.le.inl(i)-inl(i-1))
then
1085 kk2= 9*(ik+inl(i-1))
1086 allu0(kk1-8)= al(kk2-8)
1087 allu0(kk1-7)= al(kk2-7)
1088 allu0(kk1-6)= al(kk2-6)
1089 allu0(kk1-5)= al(kk2-5)
1090 allu0(kk1-4)= al(kk2-4)
1091 allu0(kk1-3)= al(kk2-3)
1092 allu0(kk1-2)= al(kk2-2)
1093 allu0(kk1-1)= al(kk2-1)
1094 allu0(kk1 )= al(kk2 )
1099 do k= inl(i-1)+1, inl(i)
1105 do k= inumfi2l(i-1)+1, inumfi2l(i)
1111 do k= inumfi1l(i-1)+1, inumfi1l(i)
1117 iconfi1l(k+isl)= iw1(iw2(k))
1122 do k= inu(i-1)+1, inu(i)
1128 do k= inumfi2u(i-1)+1, inumfi2u(i)
1130 iw1(icou+icouu1)= fi2u(k)
1134 do k= inumfi1u(i-1)+1, inumfi1u(i)
1136 iw1(icou+icouu2)= fi1u(icou+icouu2+isu)
1142 call fill_in_s33_sort (iw1, iw2, icouu3, np)
1147 if (ik.le.inu(i)-inu(i-1))
then
1149 kk2= 9*(ik+inu(i-1))
1150 aulu0(kk1-8)= au(kk2-8)
1151 aulu0(kk1-7)= au(kk2-7)
1152 aulu0(kk1-6)= au(kk2-6)
1153 aulu0(kk1-5)= au(kk2-5)
1154 aulu0(kk1-4)= au(kk2-4)
1155 aulu0(kk1-3)= au(kk2-3)
1156 aulu0(kk1-2)= au(kk2-2)
1157 aulu0(kk1-1)= au(kk2-1)
1158 aulu0(kk1 )= au(kk2 )
1163 do k= inu(i-1)+1, inu(i)
1169 do k= inumfi2u(i-1)+1, inumfi2u(i)
1175 do k= inumfi1u(i-1)+1, inumfi1u(i)
1181 iconfi1u(k+isu)= iw1(iw2(k))
1189 inumfi1l(i)= iwsl(i)
1190 inumfi1u(i)= iwsu(i)
1193 deallocate (iwsl, iwsu)
1194 deallocate (inumfi2l, inumfi2u)
1195 deallocate ( fi2l, fi2u)
1202 allocate (dlu0(9*np))
1205 dlu0(9*i-8)=dlu0(9*i-8)*sigma_diag
1206 dlu0(9*i-4)=dlu0(9*i-4)*sigma_diag
1207 dlu0(9*i )=dlu0(9*i )*sigma_diag
1212 dlu0(9*i-8), dlu0(9*i-7), dlu0(9*i-6), &
1213 dlu0(9*i-5), dlu0(9*i-4), dlu0(9*i-3), &
1214 dlu0(9*i-2), dlu0(9*i-1), dlu0(9*i ))
1215 dlu0(9*i-8)= dkinv(1,1)
1216 dlu0(9*i-7)= dkinv(1,2)
1217 dlu0(9*i-6)= dkinv(1,3)
1218 dlu0(9*i-5)= dkinv(2,1)
1219 dlu0(9*i-4)= dkinv(2,2)
1220 dlu0(9*i-3)= dkinv(2,3)
1221 dlu0(9*i-2)= dkinv(3,1)
1222 dlu0(9*i-1)= dkinv(3,2)
1223 dlu0(9*i )= dkinv(3,3)
1229 do k= inumfi1l(i-1)+1, inumfi1l(i)
1233 do k= inumfi1u(i-1)+1, inumfi1u(i)
1237 do kk= inumfi1l(i-1)+1, inumfi1l(i)
1239 iconik= iconfi1l(kk)
1241 dkinv(1,1)= dlu0(9*k-8)
1242 dkinv(1,2)= dlu0(9*k-7)
1243 dkinv(1,3)= dlu0(9*k-6)
1244 dkinv(2,1)= dlu0(9*k-5)
1245 dkinv(2,2)= dlu0(9*k-4)
1246 dkinv(2,3)= dlu0(9*k-3)
1247 dkinv(3,1)= dlu0(9*k-2)
1248 dkinv(3,2)= dlu0(9*k-1)
1249 dkinv(3,3)= dlu0(9*k )
1251 aik(1,1)= allu0(9*kk-8)
1252 aik(1,2)= allu0(9*kk-7)
1253 aik(1,3)= allu0(9*kk-6)
1254 aik(2,1)= allu0(9*kk-5)
1255 aik(2,2)= allu0(9*kk-4)
1256 aik(2,3)= allu0(9*kk-3)
1257 aik(3,1)= allu0(9*kk-2)
1258 aik(3,2)= allu0(9*kk-1)
1259 aik(3,3)= allu0(9*kk )
1261 do jj= inumfi1u(k-1)+1, inumfi1u(k)
1263 iconkj= iconfi1u(jj)
1265 if ((iconik+iconkj).lt.2)
then
1266 akj(1,1)= aulu0(9*jj-8)
1267 akj(1,2)= aulu0(9*jj-7)
1268 akj(1,3)= aulu0(9*jj-6)
1269 akj(2,1)= aulu0(9*jj-5)
1270 akj(2,2)= aulu0(9*jj-4)
1271 akj(2,3)= aulu0(9*jj-3)
1272 akj(3,1)= aulu0(9*jj-2)
1273 akj(3,2)= aulu0(9*jj-1)
1274 akj(3,3)= aulu0(9*jj )
1276 call ilu1b33 (rhs_aij, dkinv, aik, akj)
1279 dlu0(9*i-8)= dlu0(9*i-8) - rhs_aij(1,1)
1280 dlu0(9*i-7)= dlu0(9*i-7) - rhs_aij(1,2)
1281 dlu0(9*i-6)= dlu0(9*i-6) - rhs_aij(1,3)
1282 dlu0(9*i-5)= dlu0(9*i-5) - rhs_aij(2,1)
1283 dlu0(9*i-4)= dlu0(9*i-4) - rhs_aij(2,2)
1284 dlu0(9*i-3)= dlu0(9*i-3) - rhs_aij(2,3)
1285 dlu0(9*i-2)= dlu0(9*i-2) - rhs_aij(3,1)
1286 dlu0(9*i-1)= dlu0(9*i-1) - rhs_aij(3,2)
1287 dlu0(9*i )= dlu0(9*i ) - rhs_aij(3,3)
1292 allu0(9*ij0-8)= allu0(9*ij0-8) - rhs_aij(1,1)
1293 allu0(9*ij0-7)= allu0(9*ij0-7) - rhs_aij(1,2)
1294 allu0(9*ij0-6)= allu0(9*ij0-6) - rhs_aij(1,3)
1295 allu0(9*ij0-5)= allu0(9*ij0-5) - rhs_aij(2,1)
1296 allu0(9*ij0-4)= allu0(9*ij0-4) - rhs_aij(2,2)
1297 allu0(9*ij0-3)= allu0(9*ij0-3) - rhs_aij(2,3)
1298 allu0(9*ij0-2)= allu0(9*ij0-2) - rhs_aij(3,1)
1299 allu0(9*ij0-1)= allu0(9*ij0-1) - rhs_aij(3,2)
1300 allu0(9*ij0 )= allu0(9*ij0 ) - rhs_aij(3,3)
1305 aulu0(9*ij0-8)= aulu0(9*ij0-8) - rhs_aij(1,1)
1306 aulu0(9*ij0-7)= aulu0(9*ij0-7) - rhs_aij(1,2)
1307 aulu0(9*ij0-6)= aulu0(9*ij0-6) - rhs_aij(1,3)
1308 aulu0(9*ij0-5)= aulu0(9*ij0-5) - rhs_aij(2,1)
1309 aulu0(9*ij0-4)= aulu0(9*ij0-4) - rhs_aij(2,2)
1310 aulu0(9*ij0-3)= aulu0(9*ij0-3) - rhs_aij(2,3)
1311 aulu0(9*ij0-2)= aulu0(9*ij0-2) - rhs_aij(3,1)
1312 aulu0(9*ij0-1)= aulu0(9*ij0-1) - rhs_aij(3,2)
1313 aulu0(9*ij0 )= aulu0(9*ij0 ) - rhs_aij(3,3)
1320 dlu0(9*i-8), dlu0(9*i-7), dlu0(9*i-6), &
1321 dlu0(9*i-5), dlu0(9*i-4), dlu0(9*i-3), &
1322 dlu0(9*i-2), dlu0(9*i-1), dlu0(9*i ))
1323 dlu0(9*i-8)= dkinv(1,1)
1324 dlu0(9*i-7)= dkinv(1,2)
1325 dlu0(9*i-6)= dkinv(1,3)
1326 dlu0(9*i-5)= dkinv(2,1)
1327 dlu0(9*i-4)= dkinv(2,2)
1328 dlu0(9*i-3)= dkinv(2,3)
1329 dlu0(9*i-2)= dkinv(3,1)
1330 dlu0(9*i-1)= dkinv(3,2)
1331 dlu0(9*i )= dkinv(3,3)
1334 deallocate (iw1, iw2)
1335 deallocate (iconfi1l, iconfi1u)
1337 end subroutine form_ilu2_33
1345 subroutine fill_in_s33_sort (STEM, INUM, N, NP)
1348 integer(kind=kint) :: n, np
1349 integer(kind=kint),
dimension(NP) :: stem
1350 integer(kind=kint),
dimension(NP) :: inum
1351 integer(kind=kint),
dimension(:),
allocatable :: istack
1352 integer(kind=kint) :: m,nstack,jstack,l,ir,ip,i,j,k,ss,ii,temp,it
1354 allocate (istack(-np:+np))
1373 if (stem(i).le.ss)
goto 2
1384 if (jstack.eq.0)
then
1390 l = istack(jstack-1)
1403 if (stem(l+1).gt.stem(ir))
then
1412 if (stem(l).gt.stem(ir))
then
1421 if (stem(l+1).gt.stem(l))
then
1438 if (stem(i).lt.ss)
goto 3
1442 if (stem(j).gt.ss)
goto 4
1465 if (jstack.gt.nstack)
then
1466 write (*,*)
'NSTACK overflow'
1470 if (ir-i+1.ge.j-1)
then
1475 istack(jstack )= j-1
1484 end subroutine fill_in_s33_sort
1493 subroutine ilu1a33 (ALU, D11,D12,D13,D21,D22,D23,D31,D32,D33)
1496 real(kind=
kreal) :: alu(3,3), pw(3)
1497 real(kind=
kreal) :: d11,d12,d13,d21,d22,d23,d31,d32,d33
1498 integer(kind=kint) :: i,j,k
1511 if (alu(k,k) == 0.d0)
then
1513 stop
'ERROR: Divide by zero in ILU setup'
1515 alu(k,k)= 1.d0/alu(k,k)
1517 alu(i,k)= alu(i,k) * alu(k,k)
1519 pw(j)= alu(i,j) - alu(i,k)*alu(k,j)
1538 subroutine ilu1b33 (RHS_Aij, DkINV, Aik, Akj)
1541 real(kind=
kreal) :: rhs_aij(3,3), dkinv(3,3), aik(3,3), akj(3,3)
1542 real(kind=
kreal) :: x1,x2,x3
1550 x2= x2 - dkinv(2,1)*x1
1551 x3= x3 - dkinv(3,1)*x1 - dkinv(3,2)*x2
1554 x2= dkinv(2,2)*( x2 - dkinv(2,3)*x3 )
1555 x1= dkinv(1,1)*( x1 - dkinv(1,3)*x3 - dkinv(1,2)*x2)
1557 rhs_aij(1,1)= aik(1,1)*x1 + aik(1,2)*x2 + aik(1,3)*x3
1558 rhs_aij(2,1)= aik(2,1)*x1 + aik(2,2)*x2 + aik(2,3)*x3
1559 rhs_aij(3,1)= aik(3,1)*x1 + aik(3,2)*x2 + aik(3,3)*x3
1567 x2= x2 - dkinv(2,1)*x1
1568 x3= x3 - dkinv(3,1)*x1 - dkinv(3,2)*x2
1571 x2= dkinv(2,2)*( x2 - dkinv(2,3)*x3 )
1572 x1= dkinv(1,1)*( x1 - dkinv(1,3)*x3 - dkinv(1,2)*x2)
1574 rhs_aij(1,2)= aik(1,1)*x1 + aik(1,2)*x2 + aik(1,3)*x3
1575 rhs_aij(2,2)= aik(2,1)*x1 + aik(2,2)*x2 + aik(2,3)*x3
1576 rhs_aij(3,2)= aik(3,1)*x1 + aik(3,2)*x2 + aik(3,3)*x3
1584 x2= x2 - dkinv(2,1)*x1
1585 x3= x3 - dkinv(3,1)*x1 - dkinv(3,2)*x2
1588 x2= dkinv(2,2)*( x2 - dkinv(2,3)*x3 )
1589 x1= dkinv(1,1)*( x1 - dkinv(1,3)*x3 - dkinv(1,2)*x2)
1591 rhs_aij(1,3)= aik(1,1)*x1 + aik(1,2)*x2 + aik(1,3)*x3
1592 rhs_aij(2,3)= aik(2,1)*x1 + aik(2,2)*x2 + aik(2,3)*x3
1593 rhs_aij(3,3)= aik(3,1)*x1 + aik(3,2)*x2 + aik(3,3)*x3