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
76 & (n, np, npl, npu, d, al, inl, ial, au, inu, iau, &
93 real(kind=
kreal),
intent(inout) :: ww(:)
94 integer(kind=kint) :: i, j, isl, iel, isu, ieu, k
95 real(kind=
kreal) :: sw1, sw2, sw3, sw4, x1, x2, x3, x4
112 sw1= sw1 - allu0(16*j-15)*x1-allu0(16*j-14)*x2-allu0(16*j-13)*x3-allu0(16*j-12)*x4
113 sw2= sw2 - allu0(16*j-11)*x1-allu0(16*j-10)*x2-allu0(16*j- 9)*x3-allu0(16*j- 8)*x4
114 sw3= sw3 - allu0(16*j- 7)*x1-allu0(16*j- 6)*x2-allu0(16*j- 5)*x3-allu0(16*j- 4)*x4
115 sw4= sw4 - allu0(16*j- 3)*x1-allu0(16*j- 2)*x2-allu0(16*j- 1)*x3-allu0(16*j )*x4
122 x2= x2 - dlu0(16*i-11)*x1
123 x3= x3 - dlu0(16*i- 7)*x1 - dlu0(16*i-6)*x2
124 x4= x4 - dlu0(16*i- 3)*x1 - dlu0(16*i-2)*x2 - dlu0(16*i-1)*x3
126 x3= dlu0(16*i- 5)*(x3 - dlu0(16*i- 4)*x4)
127 x2= dlu0(16*i-10)*(x2 - dlu0(16*i- 8)*x4 - dlu0(16*i- 9)*x3 )
128 x1= dlu0(16*i-15)*(x1 - dlu0(16*i-12)*x4 - dlu0(16*i-13)*x3 - dlu0(16*i-14)*x2)
140 isu= inumfi1u(i-1) + 1
152 sw1= sw1 + aulu0(16*j-15)*x1+aulu0(16*j-14)*x2+aulu0(16*j-13)*x3+aulu0(16*j-12)*x4
153 sw2= sw2 + aulu0(16*j-11)*x1+aulu0(16*j-10)*x2+aulu0(16*j- 9)*x3+aulu0(16*j- 8)*x4
154 sw3= sw3 + aulu0(16*j- 7)*x1+aulu0(16*j- 6)*x2+aulu0(16*j- 5)*x3+aulu0(16*j- 4)*x4
155 sw4= sw4 + aulu0(16*j- 3)*x1+aulu0(16*j- 2)*x2+aulu0(16*j- 1)*x3+aulu0(16*j )*x4
161 x2= x2 - dlu0(16*i-11)*x1
162 x3= x3 - dlu0(16*i- 7)*x1 - dlu0(16*i-6)*x2
163 x4= x4 - dlu0(16*i- 3)*x1 - dlu0(16*i-2)*x2 - dlu0(16*i-1)*x3
165 x3= dlu0(16*i- 5)*( x3 - dlu0(16*i- 4)*x4 )
166 x2= dlu0(16*i-10)*( x2 - dlu0(16*i- 8)*x4 - dlu0(16*i- 9)*x3 )
167 x1= dlu0(16*i-15)*( x1 - dlu0(16*i-12)*x4 - dlu0(16*i-13)*x3 - dlu0(16*i-14)*x2)
168 ww(4*i-3)= ww(4*i-3) - x1
169 ww(4*i-2)= ww(4*i-2) - x2
170 ww(4*i-1)= ww(4*i-1) - x3
171 ww(4*i )= ww(4*i ) - x4
177 if (
associated(dlu0))
deallocate(dlu0)
178 if (
associated(allu0))
deallocate(allu0)
179 if (
associated(aulu0))
deallocate(aulu0)
180 if (
associated(inumfi1l))
deallocate(inumfi1l)
181 if (
associated(inumfi1u))
deallocate(inumfi1u)
182 if (
associated(fi1l))
deallocate(fi1l)
183 if (
associated(fi1u))
deallocate(fi1u)
191 initialized = .false.
201 subroutine form_ilu0_44 &
202 & (n, np, npl, npu, d, al, inl, ial, au, inu, iau, &
205 integer(kind=kint ),
intent(in):: n, np, npu, npl
206 real (kind=
kreal),
intent(in):: sigma, sigma_diag
208 real(kind=
kreal),
dimension(16*NPL),
intent(in):: al
209 real(kind=
kreal),
dimension(16*NPU),
intent(in):: au
210 real(kind=
kreal),
dimension(16*NP ),
intent(in):: d
212 integer(kind=kint ),
dimension(0:NP) ,
intent(in) :: inu, inl
213 integer(kind=kint ),
dimension( NPL),
intent(in) :: ial
214 integer(kind=kint ),
dimension( NPU),
intent(in) :: iau
216 integer(kind=kint),
dimension(:),
allocatable :: iw1, iw2
217 real (kind=
kreal),
dimension(4,4) :: rhs_aij, dkinv, aik, akj
218 integer(kind=kint) :: i,jj,jj1,ij0,kk,kk1
219 integer(kind=kint) :: j,k
220 allocate (iw1(np) , iw2(np))
221 allocate(dlu0(9*np), allu0(9*npl), aulu0(9*npu))
222 allocate(inumfi1l(0:np), inumfi1u(0:np), fi1l(npl), fi1u(npu))
250 dlu0(16*i-15)=dlu0(16*i-15)*sigma_diag
251 dlu0(16*i-10)=dlu0(16*i-10)*sigma_diag
252 dlu0(16*i- 5)=dlu0(16*i- 5)*sigma_diag
253 dlu0(16*i )=dlu0(16*i )*sigma_diag
258 dlu0(16*i-15), dlu0(16*i-14), dlu0(16*i-13), dlu0(16*i-12), &
259 dlu0(16*i-11), dlu0(16*i-10), dlu0(16*i- 9), dlu0(16*i- 8), &
260 dlu0(16*i- 7), dlu0(16*i- 6), dlu0(16*i- 5), dlu0(16*i- 4), &
261 dlu0(16*i- 3), dlu0(16*i- 2), dlu0(16*i- 1), dlu0(16*i ) )
262 dlu0(16*i-15)= dkinv(1,1)
263 dlu0(16*i-14)= dkinv(1,2)
264 dlu0(16*i-13)= dkinv(1,3)
265 dlu0(16*i-12)= dkinv(1,4)
266 dlu0(16*i-11)= dkinv(2,1)
267 dlu0(16*i-10)= dkinv(2,2)
268 dlu0(16*i- 9)= dkinv(2,3)
269 dlu0(16*i- 8)= dkinv(2,4)
270 dlu0(16*i- 7)= dkinv(3,1)
271 dlu0(16*i- 6)= dkinv(3,2)
272 dlu0(16*i- 5)= dkinv(3,3)
273 dlu0(16*i- 4)= dkinv(3,4)
274 dlu0(16*i- 3)= dkinv(4,1)
275 dlu0(16*i- 2)= dkinv(4,2)
276 dlu0(16*i- 1)= dkinv(4,3)
277 dlu0(16*i )= dkinv(4,4)
283 do k= inumfi1l(i-1)+1, inumfi1l(i)
287 do k= inumfi1u(i-1)+1, inumfi1u(i)
291 do kk= inl(i-1)+1, inl(i)
294 dkinv(1,1)= dlu0(16*k-15)
295 dkinv(1,2)= dlu0(16*k-14)
296 dkinv(1,3)= dlu0(16*k-13)
297 dkinv(1,4)= dlu0(16*k-12)
298 dkinv(2,1)= dlu0(16*k-11)
299 dkinv(2,2)= dlu0(16*k-10)
300 dkinv(2,3)= dlu0(16*k- 9)
301 dkinv(2,4)= dlu0(16*k- 8)
302 dkinv(3,1)= dlu0(16*k- 7)
303 dkinv(3,2)= dlu0(16*k- 6)
304 dkinv(3,3)= dlu0(16*k- 5)
305 dkinv(3,4)= dlu0(16*k- 4)
306 dkinv(4,1)= dlu0(16*k- 3)
307 dkinv(4,2)= dlu0(16*k- 2)
308 dkinv(4,3)= dlu0(16*k- 1)
309 dkinv(4,4)= dlu0(16*k )
311 aik(1,1)= allu0(16*kk-15)
312 aik(1,2)= allu0(16*kk-14)
313 aik(1,3)= allu0(16*kk-13)
314 aik(1,4)= allu0(16*kk-12)
315 aik(2,1)= allu0(16*kk-11)
316 aik(2,2)= allu0(16*kk-10)
317 aik(2,3)= allu0(16*kk- 9)
318 aik(2,4)= allu0(16*kk- 8)
319 aik(3,1)= allu0(16*kk- 7)
320 aik(3,2)= allu0(16*kk- 6)
321 aik(3,3)= allu0(16*kk- 5)
322 aik(3,4)= allu0(16*kk- 4)
323 aik(4,1)= allu0(16*kk- 3)
324 aik(4,2)= allu0(16*kk- 2)
325 aik(4,3)= allu0(16*kk- 1)
326 aik(4,4)= allu0(16*kk )
328 do jj= inu(k-1)+1, inu(k)
330 if (iw1(j).eq.0.and.iw2(j).eq.0) cycle
332 akj(1,1)= aulu0(16*jj-15)
333 akj(1,2)= aulu0(16*jj-14)
334 akj(1,3)= aulu0(16*jj-13)
335 akj(1,4)= aulu0(16*jj-12)
336 akj(2,1)= aulu0(16*jj-11)
337 akj(2,2)= aulu0(16*jj-10)
338 akj(2,3)= aulu0(16*jj- 9)
339 akj(2,4)= aulu0(16*jj- 8)
340 akj(3,1)= aulu0(16*jj- 7)
341 akj(3,2)= aulu0(16*jj- 6)
342 akj(3,3)= aulu0(16*jj- 5)
343 akj(3,4)= aulu0(16*jj- 4)
344 akj(4,1)= aulu0(16*jj- 3)
345 akj(4,2)= aulu0(16*jj- 2)
346 akj(4,3)= aulu0(16*jj- 1)
347 akj(4,4)= aulu0(16*jj )
349 call ilu1b44 (rhs_aij, dkinv, aik, akj)
352 dlu0(16*i-15)= dlu0(16*i-15) - rhs_aij(1,1)
353 dlu0(16*i-14)= dlu0(16*i-14) - rhs_aij(1,2)
354 dlu0(16*i-13)= dlu0(16*i-13) - rhs_aij(1,3)
355 dlu0(16*i-12)= dlu0(16*i-12) - rhs_aij(1,4)
356 dlu0(16*i-11)= dlu0(16*i-11) - rhs_aij(2,1)
357 dlu0(16*i-10)= dlu0(16*i-10) - rhs_aij(2,2)
358 dlu0(16*i- 9)= dlu0(16*i- 9) - rhs_aij(2,3)
359 dlu0(16*i- 8)= dlu0(16*i- 8) - rhs_aij(2,4)
360 dlu0(16*i- 7)= dlu0(16*i- 7) - rhs_aij(3,1)
361 dlu0(16*i- 6)= dlu0(16*i- 6) - rhs_aij(3,2)
362 dlu0(16*i- 5)= dlu0(16*i- 5) - rhs_aij(3,3)
363 dlu0(16*i- 4)= dlu0(16*i- 4) - rhs_aij(3,4)
364 dlu0(16*i- 3)= dlu0(16*i- 3) - rhs_aij(4,1)
365 dlu0(16*i- 2)= dlu0(16*i- 2) - rhs_aij(4,2)
366 dlu0(16*i- 1)= dlu0(16*i- 1) - rhs_aij(4,3)
367 dlu0(16*i )= dlu0(16*i ) - rhs_aij(4,4)
372 allu0(16*ij0-15)= allu0(16*ij0-15) - rhs_aij(1,1)
373 allu0(16*ij0-14)= allu0(16*ij0-14) - rhs_aij(1,2)
374 allu0(16*ij0-13)= allu0(16*ij0-13) - rhs_aij(1,3)
375 allu0(16*ij0-12)= allu0(16*ij0-12) - rhs_aij(1,4)
376 allu0(16*ij0-11)= allu0(16*ij0-11) - rhs_aij(2,1)
377 allu0(16*ij0-10)= allu0(16*ij0-10) - rhs_aij(2,2)
378 allu0(16*ij0- 9)= allu0(16*ij0- 9) - rhs_aij(2,3)
379 allu0(16*ij0- 8)= allu0(16*ij0- 8) - rhs_aij(2,4)
380 allu0(16*ij0- 7)= allu0(16*ij0- 7) - rhs_aij(3,1)
381 allu0(16*ij0- 6)= allu0(16*ij0- 6) - rhs_aij(3,2)
382 allu0(16*ij0- 5)= allu0(16*ij0- 5) - rhs_aij(3,3)
383 allu0(16*ij0- 4)= allu0(16*ij0- 4) - rhs_aij(3,4)
384 allu0(16*ij0- 3)= allu0(16*ij0- 3) - rhs_aij(4,1)
385 allu0(16*ij0- 2)= allu0(16*ij0- 2) - rhs_aij(4,2)
386 allu0(16*ij0- 1)= allu0(16*ij0- 1) - rhs_aij(4,3)
387 allu0(16*ij0 )= allu0(16*ij0 ) - rhs_aij(4,4)
392 aulu0(16*ij0-15)= aulu0(16*ij0-15) - rhs_aij(1,1)
393 aulu0(16*ij0-14)= aulu0(16*ij0-14) - rhs_aij(1,2)
394 aulu0(16*ij0-13)= aulu0(16*ij0-13) - rhs_aij(1,3)
395 aulu0(16*ij0-12)= aulu0(16*ij0-12) - rhs_aij(1,4)
396 aulu0(16*ij0-11)= aulu0(16*ij0-11) - rhs_aij(2,1)
397 aulu0(16*ij0-10)= aulu0(16*ij0-10) - rhs_aij(2,2)
398 aulu0(16*ij0- 9)= aulu0(16*ij0- 9) - rhs_aij(2,3)
399 aulu0(16*ij0- 8)= aulu0(16*ij0- 8) - rhs_aij(2,4)
400 aulu0(16*ij0- 7)= aulu0(16*ij0- 7) - rhs_aij(3,1)
401 aulu0(16*ij0- 6)= aulu0(16*ij0- 6) - rhs_aij(3,2)
402 aulu0(16*ij0- 5)= aulu0(16*ij0- 5) - rhs_aij(3,3)
403 aulu0(16*ij0- 4)= aulu0(16*ij0- 4) - rhs_aij(3,4)
404 aulu0(16*ij0- 3)= aulu0(16*ij0- 3) - rhs_aij(4,1)
405 aulu0(16*ij0- 2)= aulu0(16*ij0- 2) - rhs_aij(4,2)
406 aulu0(16*ij0- 1)= aulu0(16*ij0- 1) - rhs_aij(4,3)
407 aulu0(16*ij0 )= aulu0(16*ij0 ) - rhs_aij(4,4)
414 dlu0(16*i-15), dlu0(16*i-14), dlu0(16*i-13), dlu0(16*i-12), &
415 dlu0(16*i-11), dlu0(16*i-10), dlu0(16*i- 9), dlu0(16*i- 8), &
416 dlu0(16*i- 7), dlu0(16*i- 6), dlu0(16*i- 5), dlu0(16*i- 4), &
417 dlu0(16*i- 3), dlu0(16*i- 2), dlu0(16*i- 1), dlu0(16*i ) )
418 dlu0(16*i-15)= dkinv(1,1)
419 dlu0(16*i-14)= dkinv(1,2)
420 dlu0(16*i-13)= dkinv(1,3)
421 dlu0(16*i-12)= dkinv(1,4)
422 dlu0(16*i-11)= dkinv(2,1)
423 dlu0(16*i-10)= dkinv(2,2)
424 dlu0(16*i- 9)= dkinv(2,3)
425 dlu0(16*i- 8)= dkinv(2,4)
426 dlu0(16*i- 7)= dkinv(3,1)
427 dlu0(16*i- 6)= dkinv(3,2)
428 dlu0(16*i- 5)= dkinv(3,3)
429 dlu0(16*i- 4)= dkinv(3,4)
430 dlu0(16*i- 3)= dkinv(4,1)
431 dlu0(16*i- 2)= dkinv(4,2)
432 dlu0(16*i- 1)= dkinv(4,3)
433 dlu0(16*i )= dkinv(4,4)
436 deallocate (iw1, iw2)
437 end subroutine form_ilu0_44
446 subroutine form_ilu1_44 &
447 & (n, np, npl, npu, d, al, inl, ial, au, inu, iau, &
450 integer(kind=kint ),
intent(in):: n, np, npu, npl
451 real (kind=
kreal),
intent(in):: sigma, sigma_diag
453 real(kind=
kreal),
dimension(16*NPL),
intent(in):: al
454 real(kind=
kreal),
dimension(16*NPU),
intent(in):: au
455 real(kind=
kreal),
dimension(16*NP ),
intent(in):: d
457 integer(kind=kint ),
dimension(0:NP) ,
intent(in) :: inu, inl
458 integer(kind=kint ),
dimension( NPL),
intent(in) :: ial
459 integer(kind=kint ),
dimension( NPU),
intent(in) :: iau
461 integer(kind=kint),
dimension(:),
allocatable :: iw1, iw2
462 integer(kind=kint),
dimension(:),
allocatable :: iwsl, iwsu
463 real (kind=
kreal),
dimension(4,4) :: rhs_aij, dkinv, aik, akj
464 real (kind=
kreal) :: d11,d12,d13,d14,d21,d22,d23,d24,d31,d32,d33,d34,d41,d42,d43,d44
465 integer(kind=kint) :: nplf1,npuf1
466 integer(kind=kint) :: i,jj,jj1,ij0,kk,ik,kk1,kk2,l,isk,iek,isj,iej
467 integer(kind=kint) :: icou,icou0,icouu,icouu1,icouu2,icouu3,icoul,icoul1,icoul2,icoul3
468 integer(kind=kint) :: j,k,isl,isu
477 allocate (iw1(np) , iw2(np))
478 allocate (inumfi1l(0:np), inumfi1u(0:np))
489 do l= inl(i-1)+1, inl(i)
492 do l= inu(i-1)+1, inu(i)
504 if (iw1(jj).eq.0 .and. jj.lt.i)
then
505 inumfi1l(i)= inumfi1l(i)+1
508 if (iw1(jj).eq.0 .and. jj.gt.i)
then
509 inumfi1u(i)= inumfi1u(i)+1
514 nplf1= nplf1 + inumfi1l(i)
515 npuf1= npuf1 + inumfi1u(i)
520 allocate (iwsl(0:np), iwsu(0:np))
521 allocate (fi1l(npl+nplf1), fi1u(npu+npuf1))
522 allocate (allu0(16*(npl+nplf1)), aulu0(16*(npu+npuf1)))
530 iwsl(i)= inl(i)-inl(i-1) + inumfi1l(i) + iwsl(i-1)
531 iwsu(i)= inu(i)-inu(i-1) + inumfi1u(i) + iwsu(i-1)
537 inumfi1l(i)= inumfi1l(i-1) + inumfi1l(i)
538 inumfi1u(i)= inumfi1u(i-1) + inumfi1u(i)
542 do l= inl(i-1)+1, inl(i)
545 do l= inu(i-1)+1, inu(i)
557 if (iw1(jj).eq.0 .and. jj.lt.i)
then
559 fi1l(icoul+iwsl(i-1)+inl(i)-inl(i-1))= jj
562 if (iw1(jj).eq.0 .and. jj.gt.i)
then
564 fi1u(icouu+iwsu(i-1)+inu(i)-inu(i-1))= jj
582 icoul1= inl(i) - inl(i-1)
583 icoul2= inumfi1l(i) - inumfi1l(i-1)
584 icoul3= icoul1 + icoul2
585 icouu1= inu(i) - inu(i-1)
586 icouu2= inumfi1u(i) - inumfi1u(i-1)
587 icouu3= icouu1 + icouu2
591 do k= inl(i-1)+1, inl(i)
596 do k= inumfi1l(i-1)+1, inumfi1l(i)
598 iw1(icou0)= fi1l(icou0+iwsl(i-1))
604 call fill_in_s44_sort (iw1, iw2, icoul3, np)
609 if (ik.le.inl(i)-inl(i-1))
then
611 kk2= 16*(ik+inl(i-1))
612 allu0(kk1-15)= al(kk2-15)
613 allu0(kk1-14)= al(kk2-14)
614 allu0(kk1-13)= al(kk2-13)
615 allu0(kk1-12)= al(kk2-12)
616 allu0(kk1-11)= al(kk2-11)
617 allu0(kk1-10)= al(kk2-10)
618 allu0(kk1- 9)= al(kk2- 9)
619 allu0(kk1- 8)= al(kk2- 8)
620 allu0(kk1- 7)= al(kk2- 7)
621 allu0(kk1- 6)= al(kk2- 6)
622 allu0(kk1- 5)= al(kk2- 5)
623 allu0(kk1- 4)= al(kk2- 4)
624 allu0(kk1- 3)= al(kk2- 3)
625 allu0(kk1- 2)= al(kk2- 2)
626 allu0(kk1- 1)= al(kk2- 1)
627 allu0(kk1- 0)= al(kk2- 0)
633 do k= inu(i-1)+1, inu(i)
638 do k= inumfi1u(i-1)+1, inumfi1u(i)
640 iw1(icou0)= fi1u(icou0+iwsu(i-1))
646 call fill_in_s44_sort (iw1, iw2, icouu3, np)
651 if (ik.le.inu(i)-inu(i-1))
then
653 kk2= 16*(ik+inu(i-1))
654 aulu0(kk1-15)= au(kk2-15)
655 aulu0(kk1-14)= au(kk2-14)
656 aulu0(kk1-13)= au(kk2-13)
657 aulu0(kk1-12)= au(kk2-12)
658 aulu0(kk1-11)= au(kk2-11)
659 aulu0(kk1-10)= au(kk2-10)
660 aulu0(kk1- 9)= au(kk2- 9)
661 aulu0(kk1- 8)= au(kk2- 8)
662 aulu0(kk1- 7)= au(kk2- 7)
663 aulu0(kk1- 6)= au(kk2- 6)
664 aulu0(kk1- 5)= au(kk2- 5)
665 aulu0(kk1- 4)= au(kk2- 4)
666 aulu0(kk1- 3)= au(kk2- 3)
667 aulu0(kk1- 2)= au(kk2- 2)
668 aulu0(kk1- 1)= au(kk2- 1)
669 aulu0(kk1- 0)= au(kk2- 0)
682 deallocate (iwsl, iwsu)
689 allocate (dlu0(16*np))
692 dlu0(16*i-15)=dlu0(16*i-15)*sigma_diag
693 dlu0(16*i-10)=dlu0(16*i-10)*sigma_diag
694 dlu0(16*i- 5)=dlu0(16*i- 5)*sigma_diag
695 dlu0(16*i- 0)=dlu0(16*i- 0)*sigma_diag
702 do k= inumfi1l(i-1)+1, inumfi1l(i)
706 do k= inumfi1u(i-1)+1, inumfi1u(i)
710 do kk= inl(i-1)+1, inl(i)
729 call ilu1a44 (dkinv, d11,d12,d13,d14,d21,d22,d23,d24,d31,d32,d33,d34,d41,d42,d43,d44)
731 do kk1= inumfi1l(i-1)+1, inumfi1l(i)
732 if (k.eq.fi1l(kk1))
then
733 aik(1,1)= allu0(16*kk1-15)
734 aik(1,2)= allu0(16*kk1-14)
735 aik(1,3)= allu0(16*kk1-13)
736 aik(1,4)= allu0(16*kk1-12)
737 aik(2,1)= allu0(16*kk1-11)
738 aik(2,2)= allu0(16*kk1-10)
739 aik(2,3)= allu0(16*kk1- 9)
740 aik(2,4)= allu0(16*kk1- 8)
741 aik(3,1)= allu0(16*kk1- 7)
742 aik(3,2)= allu0(16*kk1- 6)
743 aik(3,3)= allu0(16*kk1- 5)
744 aik(3,4)= allu0(16*kk1- 4)
745 aik(4,1)= allu0(16*kk1- 3)
746 aik(4,2)= allu0(16*kk1- 2)
747 aik(4,3)= allu0(16*kk1- 1)
748 aik(4,4)= allu0(16*kk1- 0)
753 do jj= inu(k-1)+1, inu(k)
755 do jj1= inumfi1u(k-1)+1, inumfi1u(k)
756 if (j.eq.fi1u(jj1))
then
757 akj(1,1)= aulu0(16*jj1-15)
758 akj(1,2)= aulu0(16*jj1-14)
759 akj(1,3)= aulu0(16*jj1-13)
760 akj(1,4)= aulu0(16*jj1-12)
761 akj(2,1)= aulu0(16*jj1-11)
762 akj(2,2)= aulu0(16*jj1-10)
763 akj(2,3)= aulu0(16*jj1- 9)
764 akj(2,4)= aulu0(16*jj1- 8)
765 akj(3,1)= aulu0(16*jj1- 7)
766 akj(3,2)= aulu0(16*jj1- 6)
767 akj(3,3)= aulu0(16*jj1- 5)
768 akj(3,4)= aulu0(16*jj1- 4)
769 akj(4,1)= aulu0(16*jj1- 3)
770 akj(4,2)= aulu0(16*jj1- 2)
771 akj(4,3)= aulu0(16*jj1- 1)
772 akj(4,4)= aulu0(16*jj1- 0)
777 call ilu1b44 (rhs_aij, dkinv, aik, akj)
780 dlu0(16*i-15)= dlu0(16*i-15) - rhs_aij(1,1)
781 dlu0(16*i-14)= dlu0(16*i-14) - rhs_aij(1,2)
782 dlu0(16*i-13)= dlu0(16*i-13) - rhs_aij(1,3)
783 dlu0(16*i-12)= dlu0(16*i-12) - rhs_aij(1,4)
784 dlu0(16*i-11)= dlu0(16*i-11) - rhs_aij(2,1)
785 dlu0(16*i-10)= dlu0(16*i-10) - rhs_aij(2,2)
786 dlu0(16*i- 9)= dlu0(16*i- 9) - rhs_aij(2,3)
787 dlu0(16*i- 8)= dlu0(16*i- 8) - rhs_aij(2,4)
788 dlu0(16*i- 7)= dlu0(16*i- 7) - rhs_aij(3,1)
789 dlu0(16*i- 6)= dlu0(16*i- 6) - rhs_aij(3,2)
790 dlu0(16*i- 5)= dlu0(16*i- 5) - rhs_aij(3,3)
791 dlu0(16*i- 4)= dlu0(16*i- 4) - rhs_aij(3,4)
792 dlu0(16*i- 3)= dlu0(16*i- 3) - rhs_aij(4,1)
793 dlu0(16*i- 2)= dlu0(16*i- 2) - rhs_aij(4,2)
794 dlu0(16*i- 1)= dlu0(16*i- 1) - rhs_aij(4,3)
795 dlu0(16*i- 0)= dlu0(16*i- 0) - rhs_aij(4,4)
800 allu0(16*ij0-15)= allu0(16*ij0-15) - rhs_aij(1,1)
801 allu0(16*ij0-14)= allu0(16*ij0-14) - rhs_aij(1,2)
802 allu0(16*ij0-13)= allu0(16*ij0-13) - rhs_aij(1,3)
803 allu0(16*ij0-12)= allu0(16*ij0-12) - rhs_aij(1,4)
804 allu0(16*ij0-11)= allu0(16*ij0-11) - rhs_aij(2,1)
805 allu0(16*ij0-10)= allu0(16*ij0-10) - rhs_aij(2,2)
806 allu0(16*ij0- 9)= allu0(16*ij0- 9) - rhs_aij(2,3)
807 allu0(16*ij0- 8)= allu0(16*ij0- 8) - rhs_aij(2,4)
808 allu0(16*ij0- 7)= allu0(16*ij0- 7) - rhs_aij(3,1)
809 allu0(16*ij0- 6)= allu0(16*ij0- 6) - rhs_aij(3,2)
810 allu0(16*ij0- 5)= allu0(16*ij0- 5) - rhs_aij(3,3)
811 allu0(16*ij0- 4)= allu0(16*ij0- 4) - rhs_aij(3,4)
812 allu0(16*ij0- 3)= allu0(16*ij0- 3) - rhs_aij(4,1)
813 allu0(16*ij0- 2)= allu0(16*ij0- 2) - rhs_aij(4,2)
814 allu0(16*ij0- 1)= allu0(16*ij0- 1) - rhs_aij(4,3)
815 allu0(16*ij0- 0)= allu0(16*ij0- 0) - rhs_aij(4,4)
820 aulu0(16*ij0-15)= aulu0(16*ij0-15) - rhs_aij(1,1)
821 aulu0(16*ij0-14)= aulu0(16*ij0-14) - rhs_aij(1,2)
822 aulu0(16*ij0-13)= aulu0(16*ij0-13) - rhs_aij(1,3)
823 aulu0(16*ij0-12)= aulu0(16*ij0-12) - rhs_aij(1,4)
824 aulu0(16*ij0-11)= aulu0(16*ij0-11) - rhs_aij(2,1)
825 aulu0(16*ij0-10)= aulu0(16*ij0-10) - rhs_aij(2,2)
826 aulu0(16*ij0- 9)= aulu0(16*ij0- 9) - rhs_aij(2,3)
827 aulu0(16*ij0- 8)= aulu0(16*ij0- 8) - rhs_aij(2,4)
828 aulu0(16*ij0- 7)= aulu0(16*ij0- 7) - rhs_aij(3,1)
829 aulu0(16*ij0- 6)= aulu0(16*ij0- 6) - rhs_aij(3,2)
830 aulu0(16*ij0- 5)= aulu0(16*ij0- 5) - rhs_aij(3,3)
831 aulu0(16*ij0- 4)= aulu0(16*ij0- 4) - rhs_aij(3,4)
832 aulu0(16*ij0- 3)= aulu0(16*ij0- 3) - rhs_aij(4,1)
833 aulu0(16*ij0- 2)= aulu0(16*ij0- 2) - rhs_aij(4,2)
834 aulu0(16*ij0- 1)= aulu0(16*ij0- 1) - rhs_aij(4,3)
835 aulu0(16*ij0- 0)= aulu0(16*ij0- 0) - rhs_aij(4,4)
842 deallocate (iw1, iw2)
844 end subroutine form_ilu1_44
853 subroutine form_ilu2_44 &
854 & (n, np, npl, npu, d, al, inl, ial, au, inu, iau, &
857 integer(kind=kint ),
intent(in):: n, np, npu, npl
858 real (kind=
kreal),
intent(in):: sigma, sigma_diag
860 real(kind=
kreal),
dimension(16*NPL),
intent(in):: al
861 real(kind=
kreal),
dimension(16*NPU),
intent(in):: au
862 real(kind=
kreal),
dimension(16*NP ),
intent(in):: d
864 integer(kind=kint ),
dimension(0:NP) ,
intent(in) :: inu, inl
865 integer(kind=kint ),
dimension( NPL),
intent(in) :: ial
866 integer(kind=kint ),
dimension( NPU),
intent(in) :: iau
868 integer(kind=kint),
dimension(:),
allocatable:: iw1 , iw2
869 integer(kind=kint),
dimension(:),
allocatable:: iwsl, iwsu
870 integer(kind=kint),
dimension(:),
allocatable:: iconfi1l, iconfi1u
871 integer(kind=kint),
dimension(:),
allocatable:: inumfi2l, inumfi2u
872 integer(kind=kint),
dimension(:),
allocatable:: fi2l, fi2u
873 real (kind=
kreal),
dimension(4,4) :: rhs_aij, dkinv, aik, akj
874 real (kind=
kreal) :: d11,d12,d13,d14,d21,d22,d23,d24,d31,d32,d33,d34,d41,d42,d43,d44
875 integer(kind=kint) :: nplf1,nplf2,npuf1,npuf2,ias,iconik,iconkj
876 integer(kind=kint) :: i,jj,ij0,kk,ik,kk1,kk2,l,isk,iek,isj,iej
877 integer(kind=kint) :: icou,icouu,icouu1,icouu2,icouu3,icoul,icoul1,icoul2,icoul3
878 integer(kind=kint) :: j,k,isl,isu
888 allocate (iw1(np) , iw2(np))
889 allocate (inumfi2l(0:np), inumfi2u(0:np))
900 do l= inl(i-1)+1, inl(i)
903 do l= inu(i-1)+1, inu(i)
915 if (iw1(jj).eq.0 .and. jj.lt.i)
then
916 inumfi2l(i)= inumfi2l(i)+1
919 if (iw1(jj).eq.0 .and. jj.gt.i)
then
920 inumfi2u(i)= inumfi2u(i)+1
925 nplf1= nplf1 + inumfi2l(i)
926 npuf1= npuf1 + inumfi2u(i)
931 allocate (iwsl(0:np), iwsu(0:np))
932 allocate (fi2l(nplf1), fi2u(npuf1))
940 inumfi2l(i)= inumfi2l(i-1) + inumfi2l(i)
941 inumfi2u(i)= inumfi2u(i-1) + inumfi2u(i)
945 do l= inl(i-1)+1, inl(i)
948 do l= inu(i-1)+1, inu(i)
960 if (iw1(jj).eq.0 .and. jj.lt.i)
then
962 fi2l(icoul+inumfi2l(i-1))= jj
965 if (iw1(jj).eq.0 .and. jj.gt.i)
then
967 fi2u(icouu+inumfi2u(i-1))= jj
980 allocate (inumfi1l(0:np), inumfi1u(0:np))
991 do l= inl(i-1)+1, inl(i)
994 do l= inu(i-1)+1, inu(i)
998 do l= inumfi2l(i-1)+1, inumfi2l(i)
1002 do l= inumfi2u(i-1)+1, inumfi2u(i)
1010 isj= inumfi2u(kk-1) + 1
1014 if (iw1(jj).eq.0 .and. jj.lt.i)
then
1015 inumfi1l(i)= inumfi1l(i) + 1
1018 if (iw1(jj).eq.0 .and. jj.gt.i)
then
1019 inumfi1u(i)= inumfi1u(i) + 1
1025 isk= inumfi2l(i-1)+1
1033 if (iw1(jj).eq.0 .and. jj.lt.i)
then
1034 inumfi1l(i)= inumfi1l(i) + 1
1037 if (iw1(jj).eq.0 .and. jj.gt.i)
then
1038 inumfi1u(i)= inumfi1u(i) + 1
1043 nplf2= nplf2 + inumfi1l(i)
1044 npuf2= npuf2 + inumfi1u(i)
1049 allocate (fi1l(npl+nplf1+nplf2))
1050 allocate (fi1u(npu+npuf1+npuf2))
1052 allocate (iconfi1l(npl+nplf1+nplf2))
1053 allocate (iconfi1u(npu+npuf1+npuf2))
1058 iwsl(i)= inl(i)-inl(i-1) + inumfi2l(i)-inumfi2l(i-1) + &
1059 & inumfi1l(i) + iwsl(i-1)
1060 iwsu(i)= inu(i)-inu(i-1) + inumfi2u(i)-inumfi2u(i-1) + &
1061 & inumfi1u(i) + iwsu(i-1)
1067 inumfi1l(i)= inumfi1l(i-1) + inumfi1l(i)
1068 inumfi1u(i)= inumfi1u(i-1) + inumfi1u(i)
1072 do l= inl(i-1)+1, inl(i)
1075 do l= inu(i-1)+1, inu(i)
1079 do l= inumfi2l(i-1)+1, inumfi2l(i)
1083 do l= inumfi2u(i-1)+1, inumfi2u(i)
1091 isj= inumfi2u(kk-1) + 1
1095 if (iw1(jj).eq.0 .and. jj.lt.i)
then
1096 ias= inl(i)-inl(i-1)+inumfi2l(i)-inumfi2l(i-1)+iwsl(i-1)
1101 if (iw1(jj).eq.0 .and. jj.gt.i)
then
1102 ias= inu(i)-inu(i-1)+inumfi2u(i)-inumfi2u(i-1)+iwsu(i-1)
1110 isk= inumfi2l(i-1) + 1
1118 if (iw1(jj).eq.0 .and. jj.lt.i)
then
1119 ias= inl(i)-inl(i-1)+inumfi2l(i)-inumfi2l(i-1)+iwsl(i-1)
1124 if (iw1(jj).eq.0 .and. jj.gt.i)
then
1125 ias= inu(i)-inu(i-1)+inumfi2u(i)-inumfi2u(i-1)+iwsu(i-1)
1140 allocate (allu0(16*(npl+nplf1+nplf2)))
1141 allocate (aulu0(16*(npu+npuf1+npuf2)))
1152 icoul1= inl(i) - inl(i-1)
1153 icoul2= inumfi2l(i) - inumfi2l(i-1) + icoul1
1154 icoul3= inumfi1l(i) - inumfi1l(i-1) + icoul2
1156 icouu1= inu(i) - inu(i-1)
1157 icouu2= inumfi2u(i) - inumfi2u(i-1) + icouu1
1158 icouu3= inumfi1u(i) - inumfi1u(i-1) + icouu2
1163 do k= inl(i-1)+1, inl(i)
1169 do k= inumfi2l(i-1)+1, inumfi2l(i)
1171 iw1(icou+icoul1)= fi2l(k)
1175 do k= inumfi1l(i-1)+1, inumfi1l(i)
1177 iw1(icou+icoul2)= fi1l(icou+icoul2+isl)
1184 call fill_in_s44_sort (iw1, iw2, icoul3, np)
1189 if (ik.le.inl(i)-inl(i-1))
then
1191 kk2= 16*(ik+inl(i-1))
1192 allu0(kk1-15)= al(kk2-15)
1193 allu0(kk1-14)= al(kk2-14)
1194 allu0(kk1-13)= al(kk2-13)
1195 allu0(kk1-12)= al(kk2-12)
1196 allu0(kk1-11)= al(kk2-11)
1197 allu0(kk1-10)= al(kk2-10)
1198 allu0(kk1- 9)= al(kk2- 9)
1199 allu0(kk1- 8)= al(kk2- 8)
1200 allu0(kk1- 7)= al(kk2- 7)
1201 allu0(kk1- 6)= al(kk2- 6)
1202 allu0(kk1- 5)= al(kk2- 5)
1203 allu0(kk1- 4)= al(kk2- 4)
1204 allu0(kk1- 3)= al(kk2- 3)
1205 allu0(kk1- 2)= al(kk2- 2)
1206 allu0(kk1- 1)= al(kk2- 1)
1207 allu0(kk1- 0)= al(kk2- 0)
1212 do k= inl(i-1)+1, inl(i)
1218 do k= inumfi2l(i-1)+1, inumfi2l(i)
1224 do k= inumfi1l(i-1)+1, inumfi1l(i)
1230 iconfi1l(k+isl)= iw1(iw2(k))
1235 do k= inu(i-1)+1, inu(i)
1241 do k= inumfi2u(i-1)+1, inumfi2u(i)
1243 iw1(icou+icouu1)= fi2u(k)
1247 do k= inumfi1u(i-1)+1, inumfi1u(i)
1249 iw1(icou+icouu2)= fi1u(icou+icouu2+isu)
1255 call fill_in_s44_sort (iw1, iw2, icouu3, np)
1260 if (ik.le.inu(i)-inu(i-1))
then
1262 kk2= 16*(ik+inu(i-1))
1263 aulu0(kk1-15)= au(kk2-15)
1264 aulu0(kk1-14)= au(kk2-14)
1265 aulu0(kk1-13)= au(kk2-13)
1266 aulu0(kk1-12)= au(kk2-12)
1267 aulu0(kk1-11)= au(kk2-11)
1268 aulu0(kk1-10)= au(kk2-10)
1269 aulu0(kk1- 9)= au(kk2- 9)
1270 aulu0(kk1- 8)= au(kk2- 8)
1271 aulu0(kk1- 7)= au(kk2- 7)
1272 aulu0(kk1- 6)= au(kk2- 6)
1273 aulu0(kk1- 5)= au(kk2- 5)
1274 aulu0(kk1- 4)= au(kk2- 4)
1275 aulu0(kk1- 3)= au(kk2- 3)
1276 aulu0(kk1- 2)= au(kk2- 2)
1277 aulu0(kk1- 1)= au(kk2- 1)
1278 aulu0(kk1- 0)= au(kk2- 0)
1283 do k= inu(i-1)+1, inu(i)
1289 do k= inumfi2u(i-1)+1, inumfi2u(i)
1295 do k= inumfi1u(i-1)+1, inumfi1u(i)
1301 iconfi1u(k+isu)= iw1(iw2(k))
1309 inumfi1l(i)= iwsl(i)
1310 inumfi1u(i)= iwsu(i)
1313 deallocate (iwsl, iwsu)
1314 deallocate (inumfi2l, inumfi2u)
1315 deallocate ( fi2l, fi2u)
1322 allocate (dlu0(16*np))
1325 dlu0(16*i-15)=dlu0(16*i-15)*sigma_diag
1326 dlu0(16*i-10)=dlu0(16*i-10)*sigma_diag
1327 dlu0(16*i- 5)=dlu0(16*i- 5)*sigma_diag
1328 dlu0(16*i- 0)=dlu0(16*i- 0)*sigma_diag
1335 do k= inumfi1l(i-1)+1, inumfi1l(i)
1339 do k= inumfi1u(i-1)+1, inumfi1u(i)
1343 do kk= inumfi1l(i-1)+1, inumfi1l(i)
1345 iconik= iconfi1l(kk)
1364 call ilu1a44 (dkinv, d11,d12,d13,d14,d21,d22,d23,d24,d31,d32,d33,d34,d41,d42,d43,d44)
1366 aik(1,1)= allu0(16*kk1-15)
1367 aik(1,2)= allu0(16*kk1-14)
1368 aik(1,3)= allu0(16*kk1-13)
1369 aik(1,4)= allu0(16*kk1-12)
1370 aik(2,1)= allu0(16*kk1-11)
1371 aik(2,2)= allu0(16*kk1-10)
1372 aik(2,3)= allu0(16*kk1- 9)
1373 aik(2,4)= allu0(16*kk1- 8)
1374 aik(3,1)= allu0(16*kk1- 7)
1375 aik(3,2)= allu0(16*kk1- 6)
1376 aik(3,3)= allu0(16*kk1- 5)
1377 aik(3,4)= allu0(16*kk1- 4)
1378 aik(4,1)= allu0(16*kk1- 3)
1379 aik(4,2)= allu0(16*kk1- 2)
1380 aik(4,3)= allu0(16*kk1- 1)
1381 aik(4,4)= allu0(16*kk1- 0)
1383 do jj= inumfi1u(k-1)+1, inumfi1u(k)
1385 iconkj= iconfi1u(jj)
1387 if ((iconik+iconkj).lt.2)
then
1388 akj(1,1)= aulu0(16*jj-15)
1389 akj(1,2)= aulu0(16*jj-14)
1390 akj(1,3)= aulu0(16*jj-13)
1391 akj(1,4)= aulu0(16*jj-12)
1392 akj(2,1)= aulu0(16*jj-11)
1393 akj(2,2)= aulu0(16*jj-10)
1394 akj(2,3)= aulu0(16*jj- 9)
1395 akj(2,4)= aulu0(16*jj- 8)
1396 akj(3,1)= aulu0(16*jj- 7)
1397 akj(3,2)= aulu0(16*jj- 6)
1398 akj(3,3)= aulu0(16*jj- 5)
1399 akj(3,4)= aulu0(16*jj- 4)
1400 akj(4,1)= aulu0(16*jj- 3)
1401 akj(4,2)= aulu0(16*jj- 2)
1402 akj(4,3)= aulu0(16*jj- 1)
1403 akj(4,4)= aulu0(16*jj- 0)
1405 call ilu1b44 (rhs_aij, dkinv, aik, akj)
1408 dlu0(16*i-15)= dlu0(16*i-15) - rhs_aij(1,1)
1409 dlu0(16*i-14)= dlu0(16*i-14) - rhs_aij(1,2)
1410 dlu0(16*i-13)= dlu0(16*i-13) - rhs_aij(1,3)
1411 dlu0(16*i-12)= dlu0(16*i-12) - rhs_aij(1,4)
1412 dlu0(16*i-11)= dlu0(16*i-11) - rhs_aij(2,1)
1413 dlu0(16*i-10)= dlu0(16*i-10) - rhs_aij(2,2)
1414 dlu0(16*i- 9)= dlu0(16*i- 9) - rhs_aij(2,3)
1415 dlu0(16*i- 8)= dlu0(16*i- 8) - rhs_aij(2,4)
1416 dlu0(16*i- 7)= dlu0(16*i- 7) - rhs_aij(3,1)
1417 dlu0(16*i- 6)= dlu0(16*i- 6) - rhs_aij(3,2)
1418 dlu0(16*i- 5)= dlu0(16*i- 5) - rhs_aij(3,3)
1419 dlu0(16*i- 4)= dlu0(16*i- 4) - rhs_aij(3,4)
1420 dlu0(16*i- 3)= dlu0(16*i- 3) - rhs_aij(4,1)
1421 dlu0(16*i- 2)= dlu0(16*i- 2) - rhs_aij(4,2)
1422 dlu0(16*i- 1)= dlu0(16*i- 1) - rhs_aij(4,3)
1423 dlu0(16*i- 0)= dlu0(16*i- 0) - rhs_aij(4,4)
1428 allu0(16*ij0-15)= allu0(16*ij0-15) - rhs_aij(1,1)
1429 allu0(16*ij0-14)= allu0(16*ij0-14) - rhs_aij(1,2)
1430 allu0(16*ij0-13)= allu0(16*ij0-13) - rhs_aij(1,3)
1431 allu0(16*ij0-12)= allu0(16*ij0-12) - rhs_aij(1,4)
1432 allu0(16*ij0-11)= allu0(16*ij0-11) - rhs_aij(2,1)
1433 allu0(16*ij0-10)= allu0(16*ij0-10) - rhs_aij(2,2)
1434 allu0(16*ij0- 9)= allu0(16*ij0- 9) - rhs_aij(2,3)
1435 allu0(16*ij0- 8)= allu0(16*ij0- 8) - rhs_aij(2,4)
1436 allu0(16*ij0- 7)= allu0(16*ij0- 7) - rhs_aij(3,1)
1437 allu0(16*ij0- 6)= allu0(16*ij0- 6) - rhs_aij(3,2)
1438 allu0(16*ij0- 5)= allu0(16*ij0- 5) - rhs_aij(3,3)
1439 allu0(16*ij0- 4)= allu0(16*ij0- 4) - rhs_aij(3,4)
1440 allu0(16*ij0- 3)= allu0(16*ij0- 3) - rhs_aij(4,1)
1441 allu0(16*ij0- 2)= allu0(16*ij0- 2) - rhs_aij(4,2)
1442 allu0(16*ij0- 1)= allu0(16*ij0- 1) - rhs_aij(4,3)
1443 allu0(16*ij0- 0)= allu0(16*ij0- 0) - rhs_aij(4,4)
1448 aulu0(16*ij0-15)= aulu0(16*ij0-15) - rhs_aij(1,1)
1449 aulu0(16*ij0-14)= aulu0(16*ij0-14) - rhs_aij(1,2)
1450 aulu0(16*ij0-13)= aulu0(16*ij0-13) - rhs_aij(1,3)
1451 aulu0(16*ij0-12)= aulu0(16*ij0-12) - rhs_aij(1,4)
1452 aulu0(16*ij0-11)= aulu0(16*ij0-11) - rhs_aij(2,1)
1453 aulu0(16*ij0-10)= aulu0(16*ij0-10) - rhs_aij(2,2)
1454 aulu0(16*ij0- 9)= aulu0(16*ij0- 9) - rhs_aij(2,3)
1455 aulu0(16*ij0- 8)= aulu0(16*ij0- 8) - rhs_aij(2,4)
1456 aulu0(16*ij0- 7)= aulu0(16*ij0- 7) - rhs_aij(3,1)
1457 aulu0(16*ij0- 6)= aulu0(16*ij0- 6) - rhs_aij(3,2)
1458 aulu0(16*ij0- 5)= aulu0(16*ij0- 5) - rhs_aij(3,3)
1459 aulu0(16*ij0- 4)= aulu0(16*ij0- 4) - rhs_aij(3,4)
1460 aulu0(16*ij0- 3)= aulu0(16*ij0- 3) - rhs_aij(4,1)
1461 aulu0(16*ij0- 2)= aulu0(16*ij0- 2) - rhs_aij(4,2)
1462 aulu0(16*ij0- 1)= aulu0(16*ij0- 1) - rhs_aij(4,3)
1463 aulu0(16*ij0- 0)= aulu0(16*ij0- 0) - rhs_aij(4,4)
1470 deallocate (iw1, iw2)
1471 deallocate (iconfi1l, iconfi1u)
1473 end subroutine form_ilu2_44
1481 subroutine fill_in_s44_sort (STEM, INUM, N, NP)
1484 integer(kind=kint) :: n, np
1485 integer(kind=kint),
dimension(NP) :: stem
1486 integer(kind=kint),
dimension(NP) :: inum
1487 integer(kind=kint),
dimension(:),
allocatable :: istack
1488 integer(kind=kint) :: m,nstack,jstack,l,ir,ip,i,j,k,ss,ii,temp,it
1490 allocate (istack(-np:+np))
1509 if (stem(i).le.ss)
goto 2
1520 if (jstack.eq.0)
then
1526 l = istack(jstack-1)
1539 if (stem(l+1).gt.stem(ir))
then
1548 if (stem(l).gt.stem(ir))
then
1557 if (stem(l+1).gt.stem(l))
then
1574 if (stem(i).lt.ss)
goto 3
1578 if (stem(j).gt.ss)
goto 4
1601 if (jstack.gt.nstack)
then
1602 write (*,*)
'NSTACK overflow'
1606 if (ir-i+1.ge.j-1)
then
1611 istack(jstack )= j-1
1620 end subroutine fill_in_s44_sort
1629 subroutine ilu1a44 (ALU, D11,D12,D13,D14,D21,D22,D23,D24,D31,D32,D33,D34,D41,D42,D43,D44)
1632 real(kind=
kreal) :: alu(4,4), pw(4)
1633 real(kind=
kreal) :: d11,d12,d13,d14,d21,d22,d23,d24,d31,d32,d33,d34,d41,d42,d43,d44
1634 integer(kind=kint) :: i,j,k
1654 alu(k,k)= 1.d0/alu(k,k)
1656 alu(i,k)= alu(i,k) * alu(k,k)
1658 pw(j)= alu(i,j) - alu(i,k)*alu(k,j)
1677 subroutine ilu1b44 (RHS_Aij, DkINV, Aik, Akj)
1680 real(kind=
kreal) :: rhs_aij(4,4), dkinv(4,4), aik(4,4), akj(4,4)
1681 real(kind=
kreal) :: x1,x2,x3,x4
1690 x2= x2 - dkinv(2,1)*x1
1691 x3= x3 - dkinv(3,1)*x1 - dkinv(3,2)*x2
1692 x4= x4 - dkinv(4,1)*x1 - dkinv(4,2)*x2 - dkinv(4,3)*x3
1695 x3= dkinv(3,3)*( x3 - dkinv(3,4)*x4 )
1696 x2= dkinv(2,2)*( x2 - dkinv(2,4)*x4 - dkinv(2,3)*x3 )
1697 x1= dkinv(1,1)*( x1 - dkinv(1,4)*x4 - dkinv(1,3)*x3 - dkinv(1,2)*x2)
1699 rhs_aij(1,1)= aik(1,1)*x1 + aik(1,2)*x2 + aik(1,3)*x3 + aik(1,4)*x4
1700 rhs_aij(2,1)= aik(2,1)*x1 + aik(2,2)*x2 + aik(2,3)*x3 + aik(2,4)*x4
1701 rhs_aij(3,1)= aik(3,1)*x1 + aik(3,2)*x2 + aik(3,3)*x3 + aik(3,4)*x4
1702 rhs_aij(4,1)= aik(4,1)*x1 + aik(4,2)*x2 + aik(4,3)*x3 + aik(4,4)*x4
1711 x2= x2 - dkinv(2,1)*x1
1712 x3= x3 - dkinv(3,1)*x1 - dkinv(3,2)*x2
1713 x4= x4 - dkinv(4,1)*x1 - dkinv(4,2)*x2 - dkinv(4,3)*x3
1716 x3= dkinv(3,3)*( x3 - dkinv(3,4)*x4 )
1717 x2= dkinv(2,2)*( x2 - dkinv(2,4)*x4 - dkinv(2,3)*x3 )
1718 x1= dkinv(1,1)*( x1 - dkinv(1,4)*x4 - dkinv(1,3)*x3 - dkinv(1,2)*x2)
1720 rhs_aij(1,2)= aik(1,1)*x1 + aik(1,2)*x2 + aik(1,3)*x3 + aik(1,4)*x4
1721 rhs_aij(2,2)= aik(2,1)*x1 + aik(2,2)*x2 + aik(2,3)*x3 + aik(2,4)*x4
1722 rhs_aij(3,2)= aik(3,1)*x1 + aik(3,2)*x2 + aik(3,3)*x3 + aik(3,4)*x4
1723 rhs_aij(4,2)= aik(4,1)*x1 + aik(4,2)*x2 + aik(4,3)*x3 + aik(4,4)*x4
1732 x2= x2 - dkinv(2,1)*x1
1733 x3= x3 - dkinv(3,1)*x1 - dkinv(3,2)*x2
1734 x4= x4 - dkinv(4,1)*x1 - dkinv(4,2)*x2 - dkinv(4,3)*x3
1737 x3= dkinv(3,3)*( x3 - dkinv(3,4)*x4 )
1738 x2= dkinv(2,2)*( x2 - dkinv(2,4)*x4 - dkinv(2,3)*x3 )
1739 x1= dkinv(1,1)*( x1 - dkinv(1,4)*x4 - dkinv(1,3)*x3 - dkinv(1,2)*x2)
1741 rhs_aij(1,3)= aik(1,1)*x1 + aik(1,2)*x2 + aik(1,3)*x3 + aik(1,4)*x4
1742 rhs_aij(2,3)= aik(2,1)*x1 + aik(2,2)*x2 + aik(2,3)*x3 + aik(2,4)*x4
1743 rhs_aij(3,3)= aik(3,1)*x1 + aik(3,2)*x2 + aik(3,3)*x3 + aik(3,4)*x4
1744 rhs_aij(4,3)= aik(4,1)*x1 + aik(4,2)*x2 + aik(4,3)*x3 + aik(4,4)*x4
1753 x2= x2 - dkinv(2,1)*x1
1754 x3= x3 - dkinv(3,1)*x1 - dkinv(3,2)*x2
1755 x4= x4 - dkinv(4,1)*x1 - dkinv(4,2)*x2 - dkinv(4,3)*x3
1758 x3= dkinv(3,3)*( x3 - dkinv(3,4)*x4 )
1759 x2= dkinv(2,2)*( x2 - dkinv(2,4)*x4 - dkinv(2,3)*x3 )
1760 x1= dkinv(1,1)*( x1 - dkinv(1,4)*x4 - dkinv(1,3)*x3 - dkinv(1,2)*x2)
1762 rhs_aij(1,4)= aik(1,1)*x1 + aik(1,2)*x2 + aik(1,3)*x3 + aik(1,4)*x4
1763 rhs_aij(2,4)= aik(2,1)*x1 + aik(2,2)*x2 + aik(2,3)*x3 + aik(2,4)*x4
1764 rhs_aij(3,4)= aik(3,1)*x1 + aik(3,2)*x2 + aik(3,3)*x3 + aik(3,4)*x4
1765 rhs_aij(4,4)= aik(4,1)*x1 + aik(4,2)*x2 + aik(4,3)*x3 + aik(4,4)*x4