17 real(kind=
kreal),
parameter :: rmin = 4.941d-300
19 integer(kind=kint),
parameter :: IDBg_ini = 0
20 integer(kind=kint),
parameter :: IDBg_sym = 0
21 integer(kind=kint),
parameter :: IDBg_num = 0
24 integer(kind=kint) :: LEN_colno
25 integer(kind=kint) :: NSTop
26 integer(kind=kint) :: STAge
27 integer(kind=kint) :: NEQns
28 integer(kind=kint) :: NDEg
29 integer(kind=kint) :: NTTbr
30 integer(kind=kint) :: ISYm
31 integer(kind=kint) :: LEN_dsln
32 integer(kind=kint),
pointer :: JCOl(:)
33 integer(kind=kint),
pointer :: IROw(:)
34 integer(kind=kint),
pointer :: IPErm(:)
35 integer(kind=kint),
pointer :: INVp(:)
36 integer(kind=kint),
pointer :: PARent(:)
37 integer(kind=kint),
pointer :: NCH(:)
38 integer(kind=kint),
pointer :: XLNzr(:)
39 integer(kind=kint),
pointer :: COLno(:)
40 real(kind=
kreal),
pointer :: diag(:)
41 real(kind=
kreal),
pointer :: zln(:)
42 real(kind=
kreal),
pointer :: dsln(:)
44 integer(kind=kint) :: ialoc
45 integer(kind=kint) :: raloc
46 end type cholesky_factor
67 integer(kind=kint),
intent(in):: ifmsg
69 type (cholesky_factor),
save :: fct
71 integer(kind=kint):: i98
72 integer(kind=kint):: i97
73 integer(kind=kint):: timelog
74 integer(kind=kint):: iterlog
75 integer(kind=kint):: ordering
76 integer(kind=kint):: loglevel
77 integer(kind=kint):: ir
78 integer(kind=kint):: i
87 timelog = hecmat%IARRAY(22)
88 iterlog = hecmat%IARRAY(21)
89 ordering = hecmat%IARRAY(41)
90 loglevel = max(timelog,iterlog)
98 i98 = hecmat%IARRAY(98)
99 if ( hecmat%IARRAY(98)==1 )
then
101 call setij(hecmesh,hecmat,fct)
104 call matini(fct,ordering,loglevel,ir)
105 hecmat%IARRAY(98) = 0
107 if ( loglevel > 0 )
write (*,*)
"[DIRECT]: symbolic fct done"
112 i97 = hecmat%IARRAY(97)
113 if ( hecmat%IARRAY(97)==1 )
then
115 call nuform(hecmesh,hecmat,fct,ir)
120 hecmat%IARRAY(97) = 0
122 if ( loglevel > 0 )
write (*,*)
"[DIRECT]: numeric fct done"
125 if ( loglevel > 1 )
then
126 write (*,*)
'*-----------------------------------*'
127 write (*,*)
'| Direct Solver Memory Usage |'
128 write (*,*)
'*-----------------------------------*'
129 write (*,*)
'INTEGER memory: ', real(fct%IALoc*4)/real(1048576),
'MB'
130 write (*,*)
'REAL*8 memory: ', real(fct%RALoc*8)/real(1048576),
'MB'
131 write (*,*)
'TOTAL memory: ', real((fct%RALoc*2+fct%IALoc)*4)/real(1048576),
'MB'
132 write (*,*)
'*-----------------------------------*'
139 if ( i98/=0 .and. i98/=1 )
then
140 write (ifmsg,*)
'ERROR in symb. fact. flag: Should be 1 or 0'
141 stop
'ERROR in symb. fact. flag: Should be 1 or 0'
143 if ( i97/=0 .and. i97/=1 )
then
144 write (ifmsg,*)
'ERROR in numer. fact. flag: Should be 1 or 0'
145 stop
'ERROR in numer. fact. flag: Should be 1 or 0'
147 if ( i98==1 .and. i97==0 )
then
148 write (ifmsg,*)
'WARNING: Numeric factorization not performed!'
149 stop
'WARNING: Numeric factorization not performed! Solve will not be performed'
153 write (ifmsg,*)
'ERROR in nufct0. ir = ', ir
158 do i=1,hecmat%NP*hecmesh%n_dof
159 hecmat%X(i) = hecmat%B(i)
161 call nusol0(hecmat%X,fct,ir)
165 write (ifmsg,*)
'error in nusol0. irr = ', ir
169 if ( timelog > 1 )
then
170 write(*,*)
'sym fct time : ',t2-t1
171 write(*,*)
'nuform time : ',t3-t2
172 write(*,*)
'num fct time : ',t4-t3
173 write(*,*)
'solve time : ',t5-t4
174 elseif ( timelog > 0 )
then
175 write(*,*)
'setup time : ',t4-t1
176 write(*,*)
'solve time : ',t5-t4
185 subroutine ptime(Cputim)
188 real(kind=
kreal),
intent(out):: cputim
198 subroutine setij(hecMESH,hecMAT,FCT)
201 type (HECMWST_LOCAL_MESH),
intent(in)::hecMESH
202 type (HECMWST_MATRIX),
intent(in)::hecMAT
203 type (cholesky_factor),
intent(inout) :: FCT
205 integer(kind=kint):: i
206 integer(kind=kint):: ierr
207 integer(kind=kint):: j
208 integer(kind=kint):: k
209 integer(kind=kint):: kk
210 integer(kind=kint):: ntotal
211 integer(kind=kint):: numnp
212 integer(kind=kint):: ndof
213 integer(kind=kint):: ndof2
222 fct%NTTbr = hecmat%NP + hecmat%NPL
227 allocate (fct%IROw(fct%NTTbr),stat=ierr)
228 if ( ierr/=0 ) stop
"Allocation error: irow"
229 allocate (fct%JCOl(fct%NTTbr),stat=ierr)
230 if ( ierr/=0 ) stop
"Allocation error: jcol"
240 do k = hecmat%INDEXL(j-1) + 1, hecmat%INDEXL(j)
285 subroutine matini(FCT,ordering,loglevel,Ir)
289 type (cholesky_factor),
intent(inout) :: FCT
290 integer(kind=kint),
intent(in):: ordering
291 integer(kind=kint),
intent(in):: loglevel
292 integer(kind=kint),
intent(out):: Ir
295 integer(kind=kint),
allocatable :: zpiv(:)
296 integer(kind=kint),
allocatable :: jcpt(:)
297 integer(kind=kint),
allocatable :: jcolno(:)
298 integer(kind=kint),
allocatable :: ia(:)
299 integer(kind=kint),
allocatable :: ja(:)
300 integer(kind=kint),
allocatable :: quarent(:)
301 integer(kind=kint),
allocatable :: btree(:)
302 integer(kind=kint),
allocatable :: xleaf(:)
303 integer(kind=kint),
allocatable :: leaf(:)
304 integer(kind=kint):: ir1
305 integer(kind=kint):: irr
306 integer(kind=kint):: izz
307 integer(kind=kint):: izz0
308 integer(kind=kint):: lncol
309 integer(kind=kint):: neqnsz
310 integer(kind=kint):: ierror
322 allocate (zpiv(fct%NEQns),stat=ierror)
323 if ( ierror/=0 ) stop
"ALLOCATION ERROR, zpiv: SUB. matini"
324 call zpivot(fct%NEQns,neqnsz,fct%NTTbr,fct%JCOl,fct%IROw,zpiv,ir1)
333 allocate (jcpt(2*fct%NTTbr),stat=ierror)
334 if ( ierror/=0 ) stop
"ALLOCATION ERROR, jcpt: SUB. matini"
335 allocate (jcolno(2*fct%NTTbr),stat=ierror)
336 if ( ierror/=0 ) stop
"ALLOCATION ERROR, jcolno: SUB. matini"
337 call stsmat(fct%NEQns,fct%NTTbr,fct%IROw,fct%JCOl,jcpt,jcolno)
341 allocate (ia(fct%NEQns+1),stat=ierror)
342 if ( ierror/=0 ) stop
"ALLOCATION ERROR, ia: SUB. matini"
343 allocate (ja(2*fct%NTTbr),stat=ierror)
344 if ( ierror/=0 ) stop
"ALLOCATION ERROR, ja: SUB. matini"
345 call stiaja(fct%NEQns,ia,ja,jcpt,jcolno)
353 allocate (fct%IPErm(fct%NEQns),stat=ierror)
354 if ( ierror/=0 ) stop
"ALLOCATION ERROR, iperm: SUB. matini"
355 allocate (fct%INVp(fct%NEQns),stat=ierror)
356 if ( ierror/=0 ) stop
"ALLOCATION ERROR, invp: SUB. matini"
357 allocate (quarent(fct%NEQns+1),stat=ierror)
358 if ( ierror/=0 ) stop
"ALLOCATION ERROR, quarent: SUB. matini"
363 call genpaq(ia,ja,fct%INVp,fct%IPErm,quarent,fct%NEQns)
367 allocate (btree(2*(fct%NEQns+1)),stat=ierror)
368 if ( ierror/=0 ) stop
"ALLOCATION ERROR, btree: SUB. matini"
369 call genbtq(fct%INVp,quarent,btree,zpiv,izz,fct%NEQns)
377 allocate (fct%PARent(fct%NEQns),stat=ierror)
378 if ( ierror/=0 ) stop
"ALLOCATION ERROR, parent: SUB. matini.f"
379 allocate (fct%NCH(fct%NEQns+1),stat=ierror)
380 if ( ierror/=0 ) stop
"ALLOCATION ERROR, nch: SUB. matini.f"
381 call posord(fct%PARent,btree,fct%INVp,fct%IPErm,fct%NCH,fct%NEQns,quarent)
385 allocate (xleaf(fct%NEQns+1),stat=ierror)
386 if ( ierror/=0 ) stop
"ALLOCATION ERROR, xleaf: SUB. matini.f"
387 allocate (leaf(fct%NTTbr),stat=ierror)
388 if ( ierror/=0 ) stop
"ALLOCATION ERROR, leaf: SUB. matini.f"
389 call gnleaf(ia,ja,fct%INVp,fct%IPErm,fct%NCH,xleaf,leaf,fct%NEQns)
390 call forpar(fct%NEQns,fct%PARent,fct%NCH,fct%NSTop)
399 allocate (fct%XLNzr(fct%NEQns+1),stat=ierror)
400 if ( ierror/=0 ) stop
"ALLOCATION ERROR, xlnzr: SUB. matini.f"
401 call pre_gnclno(fct%PARent,xleaf,leaf,fct%XLNzr,fct%NEQns,fct%NSTop,lncol,ir1)
402 allocate (fct%COLno(lncol),stat=ierror)
403 if ( ierror/=0 ) stop
"ALLOCATION ERROR, colno: SUB. matini.f"
404 call gnclno(fct%PARent,xleaf,leaf,fct%XLNzr,fct%COLno,fct%NEQns,fct%NSTop,lncol,ir1)
409 fct%LEN_dsln = (fct%NEQns-fct%NSTop+1)*(fct%NEQns-fct%NSTop)/2
412 fct%LEN_colno = lncol
415 fct%IALoc = 5*fct%NEQns + lncol + 1
418 if ( izz0==0 ) izz0 = izz
419 if ( izz0/=izz )
then
420 call bringu(zpiv,fct%IPErm,fct%INVp,quarent,izz,fct%NEQns,irr)
422 call rotate(ia,ja,fct%INVp,fct%IPErm,quarent,btree,izz,fct%NEQns,irr)
426 end subroutine matini
431 subroutine zpivot(Neqns,Neqnsz,Nttbr,Jcol,Irow,Zpiv,Ir)
434 integer(kind=kint),
intent(in):: Neqns
435 integer(kind=kint),
intent(in):: Nttbr
436 integer(kind=kint),
intent(in):: Jcol(:)
437 integer(kind=kint),
intent(in):: Irow(:)
438 integer(kind=kint),
intent(out):: Ir
439 integer(kind=kint),
intent(out):: Neqnsz
440 integer(kind=kint),
intent(out):: Zpiv(:)
442 integer(kind=kint):: i
443 integer(kind=kint):: j
444 integer(kind=kint):: l
453 if ( i<=0 .or. j<=0 )
then
456 elseif ( i>neqns .or. j>neqns )
then
460 if ( i==j ) zpiv(i) = 0
463 if ( zpiv(i)==0 )
then
470 if ( idbg_ini/=0 )
write (6,
"(20I3)") (zpiv(i),i=1,neqns)
476 subroutine stsmat(Neqns,Nttbr,Irow,Jcol,Jcpt,Jcolno)
479 integer(kind=kint),
intent(in):: Neqns
480 integer(kind=kint),
intent(in):: Nttbr
481 integer(kind=kint),
intent(in):: Irow(:)
482 integer(kind=kint),
intent(in):: Jcol(:)
483 integer(kind=kint),
intent(out):: Jcpt(:)
484 integer(kind=kint),
intent(out):: Jcolno(:)
486 integer(kind=kint):: i
487 integer(kind=kint):: j
488 integer(kind=kint):: joc
489 integer(kind=kint):: k
490 integer(kind=kint):: l
491 integer(kind=kint):: locr
495 jcolno(1:2*nttbr) = 0
503 loop1:
do l = 1, nttbr
511 if ( jcolno(joc)==j ) cycle loop1
512 if ( jcolno(joc)>j )
then
523 if (.not. found)
then
532 if ( jcolno(joc)==i ) cycle loop1
533 if ( jcolno(joc)>i )
then
548 if ( idbg_ini/=0 )
then
550 write (6,
"(10I7)") (jcolno(i),i=1,k)
552 write (6,
"(10I7)") (jcpt(i),i=1,k)
554 end subroutine stsmat
560 subroutine stiaja(Neqns,Ia,Ja,Jcpt,Jcolno)
563 integer(kind=kint),
intent(in):: Neqns
564 integer(kind=kint),
intent(in):: Jcpt(:)
565 integer(kind=kint),
intent(in):: Jcolno(:)
566 integer(kind=kint),
intent(out):: Ia(:)
567 integer(kind=kint),
intent(out):: Ja(:)
569 integer(kind=kint):: i
570 integer(kind=kint):: ii
571 integer(kind=kint):: joc
572 integer(kind=kint):: k
573 integer(kind=kint):: l
589 if ( idbg_ini/=0 )
then
591 write (6,
"(10I7)") (ia(i),i=1,neqns)
593 write (6,
"(10I7)") (ja(i),i=1,ia(neqns+1))
595 end subroutine stiaja
600 subroutine genpaq(Xadj,Adjncy,Invp,Iperm,Parent,Neqns)
603 integer(kind=kint),
intent(in):: Neqns
604 integer(kind=kint),
intent(in):: Xadj(:)
605 integer(kind=kint),
intent(in):: Adjncy(:)
606 integer(kind=kint),
intent(in):: Invp(:)
607 integer(kind=kint),
intent(in):: Iperm(:)
608 integer(kind=kint),
intent(out):: Parent(:)
610 integer(kind=kint),
allocatable:: Ancstr(:)
611 integer(kind=kint):: i
612 integer(kind=kint):: ip
613 integer(kind=kint):: it
614 integer(kind=kint):: k
615 integer(kind=kint):: l
616 integer(kind=kint):: ierror
618 allocate (ancstr(neqns+1),stat=ierror)
619 if ( ierror/=0 ) stop
"ALLOCATION ERROR, ancstr: SUB. genpaq"
625 loop1:
do k = xadj(ip), xadj(ip+1) - 1
628 do while ( ancstr(l)/=0 )
629 if ( ancstr(l)==i ) cycle loop1
640 if ( parent(i)==0 ) parent(i) = neqns + 1
644 if ( idbg_sym/=0 )
then
645 write (6,
"(' parent')")
646 write (6,
"(2I6)") (i,parent(i),i=1,neqns)
650 end subroutine genpaq
655 subroutine genbtq(Invp,Parent,Btree,Zpiv,Izz,Neqns)
658 integer(kind=kint),
intent(in):: Neqns
659 integer(kind=kint),
intent(in):: Parent(:)
660 integer(kind=kint),
intent(in):: Invp(:)
661 integer(kind=kint),
intent(in):: Zpiv(:)
662 integer(kind=kint),
intent(out):: Btree(2,*)
664 integer(kind=kint):: i
665 integer(kind=kint):: ib
666 integer(kind=kint):: inext
667 integer(kind=kint):: ip
668 integer(kind=kint):: Izz
670 btree(1,1:neqns + 1) = 0
671 btree(2,1:neqns + 1) = 0
697 if ( zpiv(i)/=0 )
then
698 if ( btree(1,invp(i))==0 )
then
705 if ( idbg_sym/=0 )
then
706 write (6,
"(' binary tree')")
707 write (6,
"(i6,'(',2I6,')')") (i,btree(1,i),btree(2,i),i=1,neqns)
708 write (6,
"(' the first zero pivot is ',i4)") izz
710 end subroutine genbtq
715 subroutine posord(Parent,Btree,Invp,Iperm,Nch,Neqns,Qarent)
718 integer(kind=kint),
intent(in):: Neqns
719 integer(kind=kint),
intent(in):: Btree(2,*)
720 integer(kind=kint),
intent(in):: Qarent(:)
721 integer(kind=kint),
intent(out):: Parent(:)
722 integer(kind=kint),
intent(inout):: Invp(:)
723 integer(kind=kint),
intent(out):: Iperm(:)
724 integer(kind=kint),
intent(out):: Nch(:)
726 integer(kind=kint),
allocatable:: Pordr(:)
727 integer(kind=kint),
allocatable:: Iw(:)
728 integer(kind=kint),
allocatable:: Mch(:)
729 integer(kind=kint):: i
730 integer(kind=kint):: ii
731 integer(kind=kint):: invpos
732 integer(kind=kint):: ipinv
733 integer(kind=kint):: joc
734 integer(kind=kint):: l
735 integer(kind=kint):: locc
736 integer(kind=kint):: locp
737 integer(kind=kint):: ierror
739 allocate (pordr(neqns+1),stat=ierror)
740 if ( ierror/=0 ) stop
"ALLOCATION ERROR, pordr: SUB. posord"
741 allocate (iw(neqns+1),stat=ierror)
742 if ( ierror/=0 ) stop
"ALLOCATION ERROR, iw: SUB. posord"
743 allocate (mch(0:neqns+1),stat=ierror)
744 if ( ierror/=0 ) stop
"ALLOCATION ERROR, mch: SUB. posord"
755 mch(locp) = mch(locp) + 1
760 ipinv = pordr(invp(i))
769 if ( ii>0 .and. ii<=neqns )
then
770 parent(i) = pordr(ii)
772 parent(i) = qarent(invpos)
775 if ( idbg_sym/=0 )
then
776 write (6,
"(' post order')")
777 write (6,
"(10I6)") (pordr(i),i=1,neqns)
778 write (6,
"(/' invp ')")
779 write (6,
"(/' parent')")
780 write (6,
"(10I6)") (parent(i),i=1,neqns)
781 write (6,
"(10I6)") (invp(i),i=1,neqns)
782 write (6,
"(/' iperm ')")
783 write (6,
"(10I6)") (iperm(i),i=1,neqns)
785 write (6,
"(10I6)") (nch(i),i=1,neqns)
794 mch(locp) = mch(locp) + mch(joc) + 1
803 end subroutine posord
808 subroutine gnleaf(Xadj,Adjncy,Invp,Iperm,Nch,Xleaf,Leaf,Neqns)
811 integer(kind=kint),
intent(in):: Neqns
812 integer(kind=kint),
intent(in):: Xadj(:)
813 integer(kind=kint),
intent(in):: Adjncy(:)
814 integer(kind=kint),
intent(in):: Nch(:)
815 integer(kind=kint),
intent(in):: Invp(:)
816 integer(kind=kint),
intent(in):: Iperm(:)
817 integer(kind=kint),
intent(out):: Xleaf(:)
818 integer(kind=kint),
intent(out):: Leaf(:)
820 integer(kind=kint),
allocatable:: Adjncp(:)
821 integer(kind=kint):: Lnleaf
822 integer(kind=kint):: i
823 integer(kind=kint):: ik
824 integer(kind=kint):: ip
825 integer(kind=kint):: iq
826 integer(kind=kint):: istart
827 integer(kind=kint):: k
828 integer(kind=kint):: l
829 integer(kind=kint):: lc
830 integer(kind=kint):: lc1
831 integer(kind=kint):: m
832 integer(kind=kint):: ierror
834 allocate (adjncp(neqns+1),stat=ierror)
835 if ( ierror/=0 ) stop
"ALLOCATION ERROR, adjncp: SUB. gnleaf"
843 do k = xadj(ip), xadj(ip+1) - 1
852 call qqsort(adjncp(istart+1:),m)
853 lc1 = adjncp(istart+1)
857 do k = istart + 2, ik
859 if ( lc1<lc-nch(lc) )
then
874 if ( idbg_sym/=0 )
then
875 write (6,
"(' xleaf')")
876 write (6,
"(10I6)") (xleaf(i),i=1,neqns+1)
877 write (6,
"(' leaf (len = ',i6,')')") lnleaf
878 write (6,
"(10I6)") (leaf(i),i=1,lnleaf)
883 end subroutine gnleaf
892 subroutine qqsort(Iw,Ik)
895 integer(kind=kint),
intent(in):: Ik
896 integer(kind=kint),
intent(inout):: Iw(:)
898 integer(kind=kint):: itemp
899 integer(kind=kint):: l
900 integer(kind=kint):: m
905 if ( iw(l)>=iw(m) )
then
912 end subroutine qqsort
917 subroutine forpar(Neqns,Parent,Nch,Nstop)
920 integer(kind=kint),
intent(in):: Neqns
921 integer(kind=kint),
intent(in):: Parent(:)
922 integer(kind=kint),
intent(out):: Nstop
923 integer(kind=kint),
intent(out):: Nch(:)
925 integer(kind=kint):: i
926 integer(kind=kint):: idens
927 integer(kind=kint):: ii
933 nch(ii) = nch(ii) + 1
936 if ( nch(i)/=1 )
exit
945 end subroutine forpar
950 subroutine pre_gnclno(Parent,Xleaf,Leaf,Xlnzr,Neqns,Nstop,Lncol,Ir)
953 integer(kind=kint),
intent(in):: Neqns
954 integer(kind=kint),
intent(in):: Nstop
955 integer(kind=kint),
intent(in):: Parent(:)
956 integer(kind=kint),
intent(in):: Xleaf(:)
957 integer(kind=kint),
intent(in):: Leaf(:)
958 integer(kind=kint),
intent(out):: Lncol
959 integer(kind=kint),
intent(out):: Xlnzr(:)
961 integer(kind=kint):: i
962 integer(kind=kint):: Ir
963 integer(kind=kint):: j
964 integer(kind=kint):: k
965 integer(kind=kint):: ke
966 integer(kind=kint):: ks
967 integer(kind=kint):: l
968 integer(kind=kint):: nc
969 integer(kind=kint):: nxleaf
974 loop1:
do i = 1, neqns
983 do while ( j<nxleaf )
984 if ( j>=nstop ) cycle loop1
991 if ( j>=i .or. j==0 )
exit
999 end subroutine pre_gnclno
1004 subroutine gnclno(Parent,Xleaf,Leaf,Xlnzr,Colno,Neqns,Nstop,Lncol,Ir)
1007 integer(kind=kint),
intent(in):: Neqns
1008 integer(kind=kint),
intent(in):: Nstop
1009 integer(kind=kint),
intent(in):: Parent(:)
1010 integer(kind=kint),
intent(in):: Xleaf(:)
1011 integer(kind=kint),
intent(in):: Leaf(:)
1012 integer(kind=kint),
intent(out):: Ir
1013 integer(kind=kint),
intent(out):: Lncol
1014 integer(kind=kint),
intent(out):: Xlnzr(:)
1015 integer(kind=kint),
intent(out):: Colno(:)
1017 integer(kind=kint):: i
1018 integer(kind=kint):: j
1019 integer(kind=kint):: k
1020 integer(kind=kint):: ke
1021 integer(kind=kint):: ks
1022 integer(kind=kint):: l
1023 integer(kind=kint):: nc
1024 integer(kind=kint):: nxleaf
1029 loop1:
do i = 1, neqns
1038 do while ( j<nxleaf )
1039 if ( j>=nstop ) cycle loop1
1046 do while ( j<nstop )
1047 if ( j>=i .or. j==0 )
exit
1057 if ( idbg_sym/=0 )
then
1058 write (6,
"(' xlnzr')")
1059 write (6,
"(' colno (lncol =',i10,')')") lncol
1061 write (6,
"(/' row = ',i6)") k
1062 write (6,
"(10I4)") (colno(i),i=xlnzr(k),xlnzr(k+1)-1)
1065 end subroutine gnclno
1072 subroutine bringu(Zpiv,Iperm,Invp,Parent,Izz,Neqns,Irr)
1075 integer(kind=kint),
intent(in):: Izz
1076 integer(kind=kint),
intent(in):: Neqns
1077 integer(kind=kint),
intent(in):: Zpiv(:)
1078 integer(kind=kint),
intent(in):: Parent(:)
1079 integer(kind=kint),
intent(out):: Irr
1080 integer(kind=kint),
intent(inout):: Iperm(:)
1081 integer(kind=kint),
intent(inout):: Invp(:)
1083 integer(kind=kint):: i
1084 integer(kind=kint):: ib
1085 integer(kind=kint):: ib0
1086 integer(kind=kint):: ibp
1087 integer(kind=kint):: idbg
1088 integer(kind=kint):: izzp
1097 if ( zpiv(izzp)==0 )
then
1104 if ( invp(iperm(i))/=i .or. iperm(invp(i))/=i)
then
1105 write (6,*)
'permutation error'
1117 end subroutine bringu
1125 subroutine rotate(Xadj,Adjncy,Invp,Iperm,Parent,Btree,Izz,Neqns,Irr)
1128 integer(kind=kint),
intent(in):: Izz
1129 integer(kind=kint),
intent(in):: Neqns
1130 integer(kind=kint),
intent(in):: Xadj(:)
1131 integer(kind=kint),
intent(in):: Adjncy(:)
1132 integer(kind=kint),
intent(in):: Parent(:)
1133 integer(kind=kint),
intent(in):: Btree(2,*)
1134 integer(kind=kint),
intent(out):: Irr
1135 integer(kind=kint),
intent(inout):: Invp(:)
1136 integer(kind=kint),
intent(inout):: Iperm(:)
1138 integer(kind=kint),
allocatable:: Anc(:)
1139 integer(kind=kint),
allocatable:: Adjt(:)
1140 integer(kind=kint):: i
1141 integer(kind=kint):: iy
1142 integer(kind=kint):: izzz
1143 integer(kind=kint):: joc
1144 integer(kind=kint):: k
1145 integer(kind=kint):: l
1146 integer(kind=kint):: ll
1147 integer(kind=kint):: locc
1148 integer(kind=kint):: nanc
1149 integer(kind=kint):: ierror
1151 allocate (anc(neqns+1),stat=ierror)
1152 if ( ierror/=0 ) stop
"ALLOCATION ERROR, anc: SUB. rotate"
1153 allocate (adjt(neqns+1),stat=ierror)
1154 if ( ierror/=0 ) stop
"ALLOCATION ERROR, adjt: SUB. rotate"
1162 if ( btree(1,izzz)/=0 ) irr = 0
1190 adjt(invp(adjncy(xadj(iperm(joc)):xadj(iperm(joc)+1) - 1))) = 1
1191 if ( joc>=anc(l) )
then
1193 if ( adjt(anc(ll))==0 )
then
1209 invp(iperm(izzz)) = neqns
1217 adjt(anc(l:nanc)) = 1
1220 if ( adjt(ll)==0 )
then
1233 adjt(invp(adjncy(xadj(iperm(joc)):xadj(iperm(joc)+1)-1))) = 1
1236 if ( adjt(anc(ll))==0 )
then
1238 invp(iperm(anc(ll))) = k
1243 if ( adjt(anc(ll))/=0 )
then
1245 invp(iperm(anc(ll))) = k
1265 if ( idbg_sym/=0 )
write (6,
"(10I6)") (invp(i),i=1,neqns)
1280 end subroutine rotate
1287 subroutine nuform(hecMESH,hecMAT,FCT,Ir)
1290 type (HECMWST_LOCAL_MESH),
intent(in)::hecMESH
1291 type (HECMWST_MATRIX),
intent(in)::hecMAT
1292 type (cholesky_factor),
intent(inout):: FCT
1293 integer(kind=kint),
intent(out):: Ir
1295 integer(kind=kint):: i
1296 integer(kind=kint):: idbg
1297 integer(kind=kint):: ierr
1298 integer(kind=kint):: j
1299 integer(kind=kint):: k
1300 integer(kind=kint):: kk
1301 integer(kind=kint):: ntotal
1302 integer(kind=kint):: numnp
1303 integer(kind=kint):: ndof
1304 integer(kind=kint):: ndof2
1305 real(kind=
kreal),
allocatable :: val(:)
1309 ndof = hecmesh%N_DOF
1313 allocate (val(fct%NDEg*fct%NDEg),stat=ierr)
1314 if ( ierr/=0 ) stop
"Allocation error:val"
1315 if ( idbg_num/= 0 )
write (6,*)
"nuform:stage = ", fct%STAge
1322 call vlcpy(val,hecmat%D(ndof2*(j-1)+1:ndof2*j),ndof)
1323 call staij1(0,j,j,val,fct,ir)
1326 if ( val((i-1)*ndof+i)<=0 )
write (idbg,*)
'j,j,val:', j, i, val((i-1)*ndof+i)
1330 do k = hecmat%INDEXL(j-1) + 1, hecmat%INDEXL(j)
1333 call vlcpy(val,hecmat%AL(ndof2*(k-1)+1:ndof2*k),ndof)
1334 call staij1(0,j,i,val,fct,ir)
1339 end subroutine nuform
1344 subroutine vlcpy(A,B,N)
1347 integer(kind=kint),
intent(in):: N
1348 real(kind=
kreal),
intent(in):: b(n,n)
1349 real(kind=
kreal),
intent(out):: a(n,n)
1351 integer(kind=kint):: i
1356 end subroutine vlcpy
1372 subroutine staij1(Isw,I,J,Aij,FCT,Ir)
1375 integer(kind=kint),
intent(in):: I
1376 integer(kind=kint),
intent(in):: Isw
1377 integer(kind=kint),
intent(in):: J
1378 real(kind=
kreal),
intent(in):: aij(:)
1379 type (cholesky_factor),
intent(inout):: FCT
1380 integer(kind=kint),
intent(out):: Ir
1382 integer(kind=kint):: ndeg2
1383 integer(kind=kint):: ndeg2l
1384 integer(kind=kint):: ierror
1387 ndeg2 = fct%NDEg*fct%NDEg
1388 ndeg2l = fct%NDEg*(fct%NDEg+1)/2
1389 if ( fct%STAge==30 )
write (6,*)
'warning a matrix was build up '//
'but never solved.'
1390 if ( fct%STAge==10 )
then
1391 allocate (fct%DIAg(fct%NEQns*ndeg2l),stat=ierror)
1392 if ( ierror/=0 ) stop
"Allocation error diag"
1393 fct%RALoc = fct%RALoc + fct%NEQns*ndeg2l
1395 allocate (fct%ZLN(fct%LEN_colno*ndeg2),stat=ierror)
1396 if ( ierror/=0 ) stop
"Allocation error zln"
1397 fct%RALoc = fct%RALoc + fct%LEN_colno*ndeg2
1399 allocate (fct%DSLn(fct%LEN_dsln*ndeg2),stat=ierror)
1400 if ( ierror/=0 ) stop
"Allocation error dsln"
1401 fct%RALoc = fct%RALoc + fct%LEN_dsln*ndeg2
1403 if ( fct%STAge/=20 )
then
1421 if ( fct%NDEg<=2 )
then
1422 call addr0(isw,i,j,aij,fct%INVp,fct%XLNzr,fct%COLno,fct%DIAg,fct%ZLN,fct%DSLn,fct%NSTop,ndeg2,ndeg2l,ir)
1423 elseif ( fct%NDEg==3 )
then
1424 call addr3(i,j,aij,fct%INVp,fct%XLNzr,fct%COLno,fct%DIAg,fct%ZLN,fct%DSLn,fct%NSTop,ir)
1426 call addrx(i,j,aij,fct%INVp,fct%XLNzr,fct%COLno,fct%DIAg,fct%ZLN,fct%DSLn,fct%NSTop,fct%NDEg,ndeg2l,ir)
1428 end subroutine staij1
1433 subroutine addr0(Isw,I,J,Aij,Invp,Xlnzr,Colno,Diag,Zln,Dsln,Nstop,Ndeg2,Ndeg2l,Ir)
1436 integer(kind=kint),
intent(in):: I
1437 integer(kind=kint),
intent(in):: Isw
1438 integer(kind=kint),
intent(in):: J
1439 integer(kind=kint),
intent(in):: Ndeg2
1440 integer(kind=kint),
intent(in):: Ndeg2l
1441 integer(kind=kint),
intent(in):: Nstop
1442 integer(kind=kint),
intent(in):: Invp(:)
1443 integer(kind=kint),
intent(in):: Xlnzr(:)
1444 integer(kind=kint),
intent(in):: Colno(:)
1445 real(kind=
kreal),
intent(in):: aij(ndeg2)
1446 integer(kind=kint),
intent(out):: Ir
1447 real(kind=
kreal),
intent(inout):: zln(ndeg2,*)
1448 real(kind=
kreal),
intent(inout):: diag(ndeg2l,*)
1449 real(kind=
kreal),
intent(inout):: dsln(ndeg2,*)
1451 integer(kind=kint):: i0
1452 integer(kind=kint):: ii
1453 integer(kind=kint):: itrans
1454 integer(kind=kint):: j0
1455 integer(kind=kint):: jj
1456 integer(kind=kint):: k
1457 integer(kind=kint):: ke
1458 integer(kind=kint):: ks
1459 integer(kind=kint),
parameter:: idbg = 0
1464 if ( idbg/=0 )
write (6,*) ii, jj, aij
1466 if ( ndeg2==1 )
then
1470 diag(1,ii) = diag(1,ii) + aij(1)
1472 elseif ( ndeg2==4 )
then
1478 diag(1,ii) = diag(1,ii) + aij(1)
1479 diag(2,ii) = diag(2,ii) + aij(2)
1480 diag(3,ii) = diag(3,ii) + aij(4)
1492 if ( jj>=nstop )
then
1495 k = i0*(i0-1)/2 + j0
1496 if ( ndeg2==1 )
then
1499 elseif ( ndeg2==4 )
then
1500 if ( itrans==0 )
then
1501 dsln(1:ndeg2,k) = aij(1:ndeg2)
1512 ke = xlnzr(ii+1) - 1
1514 if ( colno(k)==jj )
then
1516 if ( ndeg2==1 )
then
1518 elseif ( ndeg2==4 )
then
1519 if ( itrans==0 )
then
1520 zln(1:ndeg2,k) = aij(1:ndeg2)
1528 elseif ( ndeg2==1 )
then
1529 zln(1,k) = zln(1,k) + aij(1)
1530 elseif ( ndeg2==4 )
then
1531 if ( itrans==0 )
then
1532 zln(1:ndeg2,k) = zln(1:ndeg2,k) + aij(1:ndeg2)
1534 zln(1,k) = zln(1,k) + aij(1)
1535 zln(2,k) = zln(2,k) + aij(3)
1536 zln(3,k) = zln(3,k) + aij(2)
1537 zln(4,k) = zln(4,k) + aij(4)
1544 end subroutine addr0
1549 subroutine addr3(I,J,Aij,Invp,Xlnzr,Colno,Diag,Zln,Dsln,Nstop,Ir)
1552 integer(kind=kint),
intent(in):: I
1553 integer(kind=kint),
intent(in):: J
1554 integer(kind=kint),
intent(in):: Nstop
1555 integer(kind=kint),
intent(in):: Invp(:)
1556 integer(kind=kint),
intent(in):: Xlnzr(:)
1557 integer(kind=kint),
intent(in):: Colno(:)
1558 real(kind=
kreal),
intent(in):: aij(9)
1559 integer(kind=kint),
intent(out):: Ir
1560 real(kind=
kreal),
intent(inout):: zln(9,*)
1561 real(kind=
kreal),
intent(inout):: diag(6,*)
1562 real(kind=
kreal),
intent(inout):: dsln(9,*)
1564 integer(kind=kint):: i0
1565 integer(kind=kint):: ii
1566 integer(kind=kint):: itrans
1567 integer(kind=kint):: j0
1568 integer(kind=kint):: jj
1569 integer(kind=kint):: k
1570 integer(kind=kint):: ke
1571 integer(kind=kint):: ks
1572 integer(kind=kint):: l
1573 integer(kind=kint),
parameter:: idbg = 0
1574 integer(kind=kint),
parameter:: ndeg2 = 9
1575 integer(kind=kint),
parameter:: ndeg2l = 6
1580 if ( idbg/=0 )
write (6,*) ii, jj, aij
1597 if ( jj>=nstop )
then
1600 k = i0*(i0-1)/2 + j0
1601 if ( itrans==0 )
then
1602 dsln(1:ndeg2,k) = aij(1:ndeg2)
1617 ke = xlnzr(ii+1) - 1
1619 if ( colno(k)==jj )
then
1620 if ( itrans==0 )
then
1639 end subroutine addr3
1644 subroutine addrx(I,J,Aij,Invp,Xlnzr,Colno,Diag,Zln,Dsln,Nstop,Ndeg,Ndeg2l,Ir)
1647 integer(kind=kint),
intent(in):: I
1648 integer(kind=kint),
intent(in):: J
1649 integer(kind=kint),
intent(in):: Ndeg
1650 integer(kind=kint),
intent(in):: Ndeg2l
1651 integer(kind=kint),
intent(in):: Nstop
1652 integer(kind=kint),
intent(in):: Invp(:)
1653 integer(kind=kint),
intent(in):: Xlnzr(:)
1654 integer(kind=kint),
intent(in):: Colno(:)
1655 real(kind=
kreal),
intent(in):: aij(ndeg,ndeg)
1656 integer(kind=kint),
intent(out):: Ir
1657 real(kind=
kreal),
intent(inout):: zln(ndeg,ndeg,*)
1658 real(kind=
kreal),
intent(inout):: diag(ndeg2l,*)
1659 real(kind=
kreal),
intent(inout):: dsln(ndeg,ndeg,*)
1661 integer(kind=kint):: i0
1662 integer(kind=kint):: ii
1663 integer(kind=kint):: itrans
1664 integer(kind=kint):: j0
1665 integer(kind=kint):: jj
1666 integer(kind=kint):: k
1667 integer(kind=kint):: ke
1668 integer(kind=kint):: ks
1669 integer(kind=kint):: l
1670 integer(kind=kint):: m
1671 integer(kind=kint):: n
1672 integer(kind=kint),
parameter:: idbg = 0
1677 if ( idbg/=0 )
write (6,*) ii, jj, aij
1683 diag(l,ii) = aij(n,m)
1695 if ( jj>=nstop )
then
1698 k = i0*(i0-1)/2 + j0
1699 if ( itrans==0 )
then
1701 dsln(1:ndeg,m,k) = aij(1:ndeg,m)
1705 dsln(1:ndeg,m,k) = aij(m,1:ndeg)
1711 ke = xlnzr(ii+1) - 1
1713 if ( colno(k)==jj )
then
1714 if ( itrans==0 )
then
1716 zln(1:ndeg,m,k) = aij(1:ndeg,m)
1720 zln(1:ndeg,m,k) = aij(m,1:ndeg)
1727 end subroutine addrx
1735 subroutine nufct0(FCT,Ir)
1738 type (cholesky_factor),
intent(inout):: FCT
1739 integer(kind=kint),
intent(out):: Ir
1741 integer(kind=kint):: irr
1742 integer(kind=kint):: ndeg2
1743 integer(kind=kint):: ndegl
1744 integer(kind=kint),
allocatable :: INDx(:)
1745 real(kind=
kreal),
allocatable :: temp(:)
1747 if ( fct%STAge/=20 )
then
1748 print *,
'*********Setting Stage 40!*********'
1755 allocate (temp(fct%NDEg*fct%NDEg*fct%NEQns),stat=irr)
1757 write (*,*)
'##Error : Not enough memory'
1761 allocate (indx(fct%NEQns),stat=irr)
1763 write (*,*)
'##Error : Not enough memory'
1768 ndegl = fct%NDEg*(fct%NDEg+1)
1770 ndeg2 = fct%NDEg*fct%NDEg
1772 select case (fct%NDEg)
1774 call nufct(fct%XLNzr,fct%COLno,fct%DSLn,fct%ZLN,fct%DIAg,indx,temp,fct%NEQns,fct%PARent,fct%NCH,fct%NSTop,ir)
1776 call nufct2(fct%XLNzr,fct%COLno,fct%DSLn,fct%ZLN,fct%DIAg,indx,temp,fct%NEQns,fct%PARent,fct%NCH,fct%NSTop,ir)
1778 call nufct3(fct%XLNzr,fct%COLno,fct%DSLn,fct%ZLN,fct%DIAg,indx,temp,fct%NEQns,fct%PARent,fct%NCH,fct%NSTop,ir)
1780 call nufct6(fct%XLNzr,fct%COLno,fct%DSLn,fct%ZLN,fct%DIAg,indx,temp,fct%NEQns,fct%PARent,fct%NCH,fct%NSTop,ir)
1782 call nufctx(fct%XLNzr,fct%COLno,fct%DSLn,fct%ZLN,fct%DIAg,indx,temp,fct%NEQns,fct%PARent,fct%NCH,fct%NSTop,&
1789 end subroutine nufct0
1797 subroutine nufct(Xlnzr,Colno,Dsln,Zln,Diag,Indx,Temp,Neqns,Parent,Nch,Nstop,Ir)
1800 integer(kind=kint),
intent(in):: Neqns
1801 integer(kind=kint),
intent(in):: Nstop
1802 integer(kind=kint),
intent(in):: Xlnzr(:)
1803 integer(kind=kint),
intent(in):: Colno(:)
1804 integer(kind=kint),
intent(in):: Parent(:)
1805 integer(kind=kint),
intent(out):: Ir
1806 integer(kind=kint),
intent(out):: Indx(:)
1807 integer(kind=kint),
intent(inout):: Nch(:)
1808 real(kind=
kreal),
intent(inout):: zln(:)
1809 real(kind=
kreal),
intent(inout):: diag(:)
1810 real(kind=
kreal),
intent(out):: temp(:)
1811 real(kind=
kreal),
intent(inout):: dsln(:)
1813 integer(kind=kint):: ic
1814 integer(kind=kint):: l
1815 integer(kind=kint):: ISEm
1816 real(kind=
kreal):: t1
1817 real(kind=
kreal):: t2
1818 real(kind=
kreal):: t3
1819 real(kind=
kreal):: t4
1820 real(kind=
kreal):: t5
1821 real(kind=
kreal):: tt
1828 diag(1) = 1.0d0/diag(1)
1832 do ic = 2, nstop - 1
1833 call sum(ic,xlnzr,colno,zln,diag,nch,parent,temp,indx,isem)
1839 do ic = nstop, neqns
1840 call sum1(ic,xlnzr,colno,zln,temp,indx)
1846 call sum2(neqns,nstop,xlnzr,colno,zln,diag,dsln,temp,indx)
1851 call sum3(neqns-nstop+1,dsln,diag(nstop:),indx,temp)
1860 end subroutine nufct
1868 subroutine nufct2(Xlnzr,Colno,Dsln,Zln,Diag,Indx,Temp,Neqns,Parent,Nch,Nstop,Ir)
1871 integer(kind=kint),
intent(in):: Neqns
1872 integer(kind=kint),
intent(in):: Nstop
1873 integer(kind=kint),
intent(in):: Xlnzr(:)
1874 integer(kind=kint),
intent(in):: Colno(:)
1875 integer(kind=kint),
intent(in):: Parent(:)
1876 integer(kind=kint),
intent(out):: Ir
1877 integer(kind=kint),
intent(out):: Indx(:)
1878 integer(kind=kint),
intent(inout):: Nch(:)
1879 real(kind=
kreal),
intent(inout):: zln(4,*)
1880 real(kind=
kreal),
intent(inout):: diag(3,*)
1881 real(kind=
kreal),
intent(out):: temp(4,*)
1882 real(kind=
kreal),
intent(inout):: dsln(4,*)
1884 integer(kind=kint):: ic
1885 integer(kind=kint):: l
1886 real(kind=
kreal):: t1
1887 real(kind=
kreal):: t2
1888 real(kind=
kreal):: t3
1889 real(kind=
kreal):: t4
1890 real(kind=
kreal):: t5
1891 real(kind=
kreal):: tt
1898 if ( nstop>1 )
call inv2(diag(1,1),ir)
1902 do ic = 2, nstop - 1
1903 call s2um(ic,xlnzr,colno,zln,diag,nch,parent,temp,indx)
1909 do ic = nstop, neqns
1910 call s2um1(ic,xlnzr,colno,zln,temp,indx)
1916 call s2um2(neqns,nstop,xlnzr,colno,zln,diag,dsln,temp,indx)
1921 call s2um3(neqns-nstop+1,dsln,diag(1,nstop),indx,temp)
1928 end subroutine nufct2
1936 subroutine nufct3(Xlnzr,Colno,Dsln,Zln,Diag,Indx,Temp,Neqns,Parent,Nch,Nstop,Ir)
1939 integer(kind=kint),
intent(in):: Neqns
1940 integer(kind=kint),
intent(in):: Nstop
1941 integer(kind=kint),
intent(in):: Xlnzr(:)
1942 integer(kind=kint),
intent(in):: Colno(:)
1943 integer(kind=kint),
intent(in):: Parent(:)
1944 integer(kind=kint),
intent(out):: Ir
1945 integer(kind=kint),
intent(out):: Indx(:)
1946 integer(kind=kint),
intent(inout):: Nch(:)
1947 real(kind=
kreal),
intent(inout):: zln(9,*)
1948 real(kind=
kreal),
intent(inout):: diag(6,*)
1949 real(kind=
kreal),
intent(out):: temp(:)
1950 real(kind=
kreal),
intent(inout):: dsln(9,*)
1952 integer(kind=kint):: ic
1953 integer(kind=kint):: l
1954 real(kind=
kreal):: t1
1955 real(kind=
kreal):: t2
1956 real(kind=
kreal):: t3
1957 real(kind=
kreal):: t4
1958 real(kind=
kreal):: t5
1959 real(kind=
kreal):: tt
1965 if ( nstop>1 )
call inv3(diag(1,1),ir)
1969 do ic = 2, nstop - 1
1970 call s3um(ic,xlnzr,colno,zln,diag,nch,parent,temp,indx)
1976 do ic = nstop, neqns
1977 call s3um1(ic,xlnzr,colno,zln,temp,indx)
1983 call s3um2(neqns,nstop,xlnzr,colno,zln,diag,dsln,temp,indx)
1988 call s3um3(neqns-nstop+1,dsln,diag(1,nstop),indx,temp)
1995 end subroutine nufct3
2003 subroutine nufct6(Xlnzr,Colno,Dsln,Zln,Diag,Indx,Temp,Neqns,Parent,Nch,Nstop,Ir)
2006 integer(kind=kint),
intent(in):: Neqns
2007 integer(kind=kint),
intent(in):: Nstop
2008 integer(kind=kint),
intent(in):: Xlnzr(:)
2009 integer(kind=kint),
intent(in):: Colno(:)
2010 integer(kind=kint),
intent(in):: Parent(:)
2011 integer(kind=kint),
intent(out):: Indx(:)
2012 integer(kind=kint),
intent(inout):: Nch(:)
2013 real(kind=
kreal),
intent(inout):: zln(36,*)
2014 real(kind=
kreal),
intent(inout):: diag(21,*)
2015 real(kind=
kreal),
intent(out):: temp(:)
2016 real(kind=
kreal),
intent(inout):: dsln(36,*)
2018 integer(kind=kint):: ic
2019 integer(kind=kint):: Ir
2020 integer(kind=kint):: l
2021 real(kind=
kreal):: t1
2022 real(kind=
kreal):: t2
2023 real(kind=
kreal):: t3
2024 real(kind=
kreal):: t4
2025 real(kind=
kreal):: t5
2026 real(kind=
kreal):: tt
2032 if ( nstop>1 )
call inv6(diag(1,1),ir)
2036 do ic = 2, nstop - 1
2037 call s6um(ic,xlnzr,colno,zln,diag,nch,parent,temp,indx)
2043 do ic = nstop, neqns
2044 call s6um1(ic,xlnzr,colno,zln,temp,indx)
2050 call s6um2(neqns,nstop,xlnzr,colno,zln,diag,dsln,temp,indx)
2055 call s6um3(neqns-nstop+1,dsln,diag(1,nstop),indx,temp)
2062 end subroutine nufct6
2070 subroutine nufctx(Xlnzr,Colno,Dsln,Zln,Diag,Indx,Temp,Neqns,Parent,Nch,Nstop,Ndeg,Ndegl,Ir)
2073 integer(kind=kint),
intent(in):: Ndeg
2074 integer(kind=kint),
intent(in):: Ndegl
2075 integer(kind=kint),
intent(in):: Neqns
2076 integer(kind=kint),
intent(in):: Nstop
2077 integer(kind=kint),
intent(in):: Xlnzr(:)
2078 integer(kind=kint),
intent(in):: Colno(:)
2079 integer(kind=kint),
intent(in):: Parent(:)
2080 integer(kind=kint),
intent(out):: Indx(:)
2081 integer(kind=kint),
intent(inout):: Nch(:)
2082 real(kind=
kreal),
intent(inout):: zln(ndeg*ndeg,*)
2083 real(kind=
kreal),
intent(inout):: diag(ndegl,*)
2084 real(kind=
kreal),
intent(out):: temp(ndeg*ndeg,*)
2085 real(kind=
kreal),
intent(inout):: dsln(ndeg*ndeg,*)
2087 integer(kind=kint):: ic
2088 integer(kind=kint):: Ir
2089 integer(kind=kint):: l
2090 real(kind=
kreal):: t1
2091 real(kind=
kreal):: t2
2092 real(kind=
kreal):: t3
2093 real(kind=
kreal):: t4
2094 real(kind=
kreal):: t5
2095 real(kind=
kreal):: tt
2096 real(kind=
kreal):: zz(100)
2097 real(kind=
kreal):: t(100)
2103 if ( nstop>1 )
call invx(diag(1,1),ndeg,ir)
2107 do ic = 2, nstop - 1
2108 call sxum(ic,xlnzr,colno,zln,diag,nch,parent,temp,indx,ndeg,ndegl,zz,t)
2114 do ic = nstop, neqns
2115 call sxum1(ic,xlnzr,colno,zln,temp,indx,ndeg,t)
2121 call sxum2(neqns,nstop,xlnzr,colno,zln,diag,dsln,temp,indx,ndeg,ndegl)
2126 call sxum3(neqns-nstop+1,dsln,diag(1,nstop),indx,temp,ndeg,ndegl,t)
2133 end subroutine nufctx
2138 subroutine sum(Ic,Xlnzr,Colno,Zln,Diag,Nch,Par,Temp,Indx,ISEm)
2141 integer(kind=kint),
intent(in):: Ic
2142 integer(kind=kint),
intent(in):: Xlnzr(:)
2143 integer(kind=kint),
intent(in):: Colno(:)
2144 integer(kind=kint),
intent(in):: Par(:)
2145 integer(kind=kint),
intent(inout):: Indx(:)
2146 integer(kind=kint),
intent(inout):: Nch(:)
2147 integer(kind=kint),
intent(inout):: ISEm
2148 real(kind=
kreal),
intent(inout):: diag(:)
2149 real(kind=
kreal),
intent(inout):: temp(:)
2150 real(kind=
kreal),
intent(inout):: zln(:)
2152 integer(kind=kint):: j
2153 integer(kind=kint):: jc
2154 integer(kind=kint):: jj
2155 integer(kind=kint):: k
2156 integer(kind=kint):: ke
2157 integer(kind=kint):: kk
2158 integer(kind=kint):: ks
2159 real(kind=
kreal):: piv
2160 real(kind=
kreal):: s
2161 real(kind=
kreal):: t
2162 real(kind=
kreal):: zz
2172 do jj = xlnzr(jc), xlnzr(jc+1) - 1
2174 if ( indx(j)==ic ) s = s + temp(j)*zln(jj)
2177 zln(k) = zz*diag(jc)
2182 if ( dabs(piv)>rmin ) diag(ic) = 1.0d0/piv
2183 do while ( isem/=1 )
2188 nch(kk) = nch(kk) - 1
2195 subroutine sum1(Ic,Xlnzr,Colno,Zln,Temp,Indx)
2198 integer(kind=kint),
intent(in):: Ic
2199 integer(kind=kint),
intent(in):: Xlnzr(:)
2200 integer(kind=kint),
intent(in):: Colno(:)
2201 integer(kind=kint),
intent(inout):: Indx(:)
2202 real(kind=
kreal),
intent(inout):: temp(:)
2203 real(kind=
kreal),
intent(inout):: zln(:)
2205 integer(kind=kint):: j
2206 integer(kind=kint):: jc
2207 integer(kind=kint):: jj
2208 integer(kind=kint):: k
2209 integer(kind=kint):: ke
2210 integer(kind=kint):: ks
2211 real(kind=
kreal):: s
2212 real(kind=
kreal):: t
2213 real(kind=
kreal):: zz
2223 do jj = xlnzr(jc), xlnzr(jc+1) - 1
2225 if ( indx(j)==ic ) s = s + temp(j)*zln(jj)
2237 subroutine sum2(Neqns,Nstop,Xlnzr,Colno,Zln,Diag,Dsln,Temp,Indx)
2240 integer(kind=kint),
intent(in):: Neqns
2241 integer(kind=kint),
intent(in):: Nstop
2242 integer(kind=kint),
intent(in):: Xlnzr(:)
2243 integer(kind=kint),
intent(in):: Colno(:)
2244 integer(kind=kint),
intent(inout):: Indx(:)
2245 real(kind=
kreal),
intent(inout):: diag(:)
2246 real(kind=
kreal),
intent(inout):: dsln(:)
2247 real(kind=
kreal),
intent(inout):: temp(:)
2248 real(kind=
kreal),
intent(inout):: zln(:)
2250 integer(kind=kint):: ic
2251 integer(kind=kint):: j
2252 integer(kind=kint):: jc
2253 integer(kind=kint):: jj
2254 integer(kind=kint):: joc
2255 integer(kind=kint):: k
2256 integer(kind=kint):: ke
2257 integer(kind=kint):: ks
2258 real(kind=
kreal):: s
2261 do ic = nstop, neqns
2262 temp(1:nstop) = 0.0d0
2264 ke = xlnzr(ic+1) - 1
2268 zln(k) = temp(jj)*diag(jj)
2270 diag(ic) = diag(ic) - temp(jj)*zln(k)
2272 do jc = nstop, ic - 1
2275 do jj = xlnzr(jc), xlnzr(jc+1) - 1
2277 if ( indx(j)==ic ) s = s + temp(j)*zln(jj)
2279 if ( s==0.0d0 )
write (16,*) ic, jc
2280 dsln(joc) = dsln(joc) - s
2288 subroutine sum3(N,Dsln,Diag,Indx,Temp)
2291 integer(kind=kint),
intent(in):: N
2292 integer(kind=kint),
intent(out):: Indx(:)
2293 real(kind=
kreal),
intent(inout):: diag(:)
2294 real(kind=
kreal),
intent(inout):: dsln(:)
2295 real(kind=
kreal),
intent(out):: temp(:)
2297 integer(kind=kint):: i
2298 integer(kind=kint):: j
2299 integer(kind=kint):: joc
2304 diag(1) = 1.0d0/diag(1)
2308 dsln(joc) = dsln(joc) - ddot(dsln(indx(i):),dsln(indx(j):),j-1)
2311 call vprod(dsln(indx(i):),diag,temp,i-1)
2312 diag(i) = diag(i) - ddot(temp,dsln(indx(i):),i-1)
2313 call vcopy(temp,dsln(indx(i):),i-1)
2314 diag(i) = 1.0d0/diag(i)
2322 subroutine s2um(Ic,Xlnzr,Colno,Zln,Diag,Nch,Par,Temp,Indx)
2325 integer(kind=kint),
intent(in):: Ic
2326 integer(kind=kint),
intent(in):: Xlnzr(:)
2327 integer(kind=kint),
intent(in):: Colno(:)
2328 integer(kind=kint),
intent(in):: Par(:)
2329 integer(kind=kint),
intent(inout):: Indx(:)
2330 integer(kind=kint),
intent(inout):: Nch(:)
2331 real(kind=
kreal),
intent(inout):: diag(3,*)
2332 real(kind=
kreal),
intent(inout):: temp(4,*)
2333 real(kind=
kreal),
intent(inout):: zln(4,*)
2335 integer(kind=kint):: ir
2336 integer(kind=kint):: j
2337 integer(kind=kint):: jc
2338 integer(kind=kint):: jj
2339 integer(kind=kint):: k
2340 integer(kind=kint):: ke
2341 integer(kind=kint):: kk
2342 integer(kind=kint):: ks
2343 real(kind=
kreal):: s(4)
2344 real(kind=
kreal):: t(3)
2345 real(kind=
kreal):: zz(4)
2354 zz(1:4) = zln(1:4,k)
2355 do jj = xlnzr(jc), xlnzr(jc+1) - 1
2357 if ( indx(j)==ic )
then
2358 zz(1) = zz(1) - temp(1,j)*zln(1,jj) - temp(3,j)*zln(3,jj)
2359 zz(2) = zz(2) - temp(2,j)*zln(1,jj) - temp(4,j)*zln(3,jj)
2360 zz(3) = zz(3) - temp(1,j)*zln(2,jj) - temp(3,j)*zln(4,jj)
2361 zz(4) = zz(4) - temp(2,j)*zln(2,jj) - temp(4,j)*zln(4,jj)
2364 call inv22(zln(1,k),zz,diag(1,jc))
2365 temp(1:4,jc) = zz(1:4)
2366 t(1) = t(1) + zz(1)*zln(1,k) + zz(3)*zln(3,k)
2367 t(2) = t(2) + zz(1)*zln(2,k) + zz(3)*zln(4,k)
2368 t(3) = t(3) + zz(2)*zln(2,k) + zz(4)*zln(4,k)
2370 diag(1,ic) = diag(1,ic) - t(1)
2371 diag(2,ic) = diag(2,ic) - t(2)
2372 diag(3,ic) = diag(3,ic) - t(3)
2373 call inv2(diag(1,ic),ir)
2376 nch(kk) = nch(kk) - 1
2382 subroutine s2um1(Ic,Xlnzr,Colno,Zln,Temp,Indx)
2385 integer(kind=kint),
intent(in):: Ic
2386 integer(kind=kint),
intent(in):: Xlnzr(:)
2387 integer(kind=kint),
intent(in):: Colno(:)
2388 integer(kind=kint),
intent(inout):: Indx(:)
2389 real(kind=
kreal),
intent(inout):: temp(4,*)
2390 real(kind=
kreal),
intent(inout):: zln(4,*)
2392 integer(kind=kint):: j
2393 integer(kind=kint):: jc
2394 integer(kind=kint):: jj
2395 integer(kind=kint):: k
2396 integer(kind=kint):: ke
2397 integer(kind=kint):: ks
2398 integer(kind=kint):: l
2399 real(kind=
kreal):: s(4)
2407 do jj = xlnzr(jc), xlnzr(jc+1) - 1
2409 if ( indx(j)==ic )
then
2410 s(1) = s(1) + temp(1,j)*zln(1,jj) + temp(3,j)*zln(3,jj)
2411 s(2) = s(2) + temp(2,j)*zln(1,jj) + temp(4,j)*zln(3,jj)
2412 s(3) = s(3) + temp(1,j)*zln(2,jj) + temp(3,j)*zln(4,jj)
2413 s(4) = s(4) + temp(2,j)*zln(2,jj) + temp(4,j)*zln(4,jj)
2417 temp(l,jc) = zln(l,k) - s(l)
2418 zln(l,k) = temp(l,jc)
2422 end subroutine s2um1
2427 subroutine s2um2(Neqns,Nstop,Xlnzr,Colno,Zln,Diag,Dsln,Temp,Indx)
2430 integer(kind=kint),
intent(in):: Neqns
2431 integer(kind=kint),
intent(in):: Nstop
2432 integer(kind=kint),
intent(in):: Xlnzr(:)
2433 integer(kind=kint),
intent(in):: Colno(:)
2434 integer(kind=kint),
intent(inout):: Indx(:)
2435 real(kind=
kreal),
intent(inout):: diag(3,*)
2436 real(kind=
kreal),
intent(inout):: dsln(4,*)
2437 real(kind=
kreal),
intent(inout):: temp(4,*)
2438 real(kind=
kreal),
intent(inout):: zln(4,*)
2440 integer(kind=kint):: ic
2441 integer(kind=kint):: j
2442 integer(kind=kint):: jc
2443 integer(kind=kint):: jj
2444 integer(kind=kint):: joc
2445 integer(kind=kint):: k
2446 integer(kind=kint):: ke
2447 integer(kind=kint):: ks
2450 do ic = nstop, neqns
2452 ke = xlnzr(ic+1) - 1
2455 temp(1,jj) = zln(1,k)
2456 temp(2,jj) = zln(2,k)
2457 temp(3,jj) = zln(3,k)
2458 temp(4,jj) = zln(4,k)
2460 zln(3,k) = temp(3,jj) - temp(1,jj)*diag(2,jj)
2461 zln(1,k) = temp(1,jj)*diag(1,jj)
2462 zln(3,k) = zln(3,k)*diag(3,jj)
2463 zln(1,k) = zln(1,k) - zln(3,k)*diag(2,jj)
2465 zln(4,k) = temp(4,jj) - temp(2,jj)*diag(2,jj)
2466 zln(2,k) = temp(2,jj)*diag(1,jj)
2467 zln(4,k) = zln(4,k)*diag(3,jj)
2468 zln(2,k) = zln(2,k) - zln(4,k)*diag(2,jj)
2470 diag(1,ic) = diag(1,ic) - (temp(1,jj)*zln(1,k)+temp(3,jj)*zln(3,k))
2471 diag(2,ic) = diag(2,ic) - (temp(1,jj)*zln(2,k)+temp(3,jj)*zln(4,k))
2472 diag(3,ic) = diag(3,ic) - (temp(2,jj)*zln(2,k)+temp(4,jj)*zln(4,k))
2475 do jc = nstop, ic - 1
2477 do jj = xlnzr(jc), xlnzr(jc+1) - 1
2479 if ( indx(j)==ic )
then
2480 dsln(1,joc) = dsln(1,joc) - (temp(1,j)*zln(1,jj)+temp(3,j)*zln(3,jj))
2481 dsln(2,joc) = dsln(2,joc) - (temp(2,j)*zln(1,jj)+temp(4,j)*zln(3,jj))
2482 dsln(3,joc) = dsln(3,joc) - (temp(1,j)*zln(2,jj)+temp(3,j)*zln(4,jj))
2483 dsln(4,joc) = dsln(4,joc) - (temp(2,j)*zln(2,jj)+temp(4,j)*zln(4,jj))
2488 end subroutine s2um2
2493 subroutine s2um3(N,Dsln,Diag,Indx,Temp)
2496 integer(kind=kint),
intent(in):: N
2497 integer(kind=kint),
intent(out):: Indx(:)
2498 real(kind=
kreal),
intent(inout):: diag(3,*)
2499 real(kind=
kreal),
intent(inout):: dsln(4,*)
2500 real(kind=
kreal),
intent(out):: temp(4,*)
2502 integer(kind=kint):: i
2503 integer(kind=kint):: ir
2504 integer(kind=kint):: j
2505 integer(kind=kint):: joc
2506 real(kind=
kreal):: t(4)
2511 call inv2(diag(1,1),ir)
2515 call d2dot(t,dsln(1,indx(i)),dsln(1,indx(j)),j-1)
2516 dsln(1,joc) = dsln(1,joc) - t(1)
2517 dsln(2,joc) = dsln(2,joc) - t(2)
2518 dsln(3,joc) = dsln(3,joc) - t(3)
2519 dsln(4,joc) = dsln(4,joc) - t(4)
2522 call v2prod(dsln(1,indx(i)),diag,temp,i-1)
2523 call d2dot(t,temp,dsln(1,indx(i)),i-1)
2524 diag(1,i) = diag(1,i) - t(1)
2525 diag(2,i) = diag(2,i) - t(2)
2526 diag(3,i) = diag(3,i) - t(4)
2527 call vcopy(temp,dsln(1,indx(i)),4*(i-1))
2528 call inv2(diag(1,i),ir)
2531 end subroutine s2um3
2536 subroutine s3um(Ic,Xlnzr,Colno,Zln,Diag,Nch,Par,Temp,Indx)
2539 integer(kind=kint),
intent(in):: Ic
2540 integer(kind=kint),
intent(in):: Xlnzr(:)
2541 integer(kind=kint),
intent(in):: Colno(:)
2542 integer(kind=kint),
intent(in):: Par(:)
2543 integer(kind=kint),
intent(inout):: Indx(:)
2544 integer(kind=kint),
intent(inout):: Nch(:)
2545 real(kind=
kreal),
intent(inout):: diag(6,*)
2546 real(kind=
kreal),
intent(inout):: temp(9,*)
2547 real(kind=
kreal),
intent(inout):: zln(9,*)
2549 integer(kind=kint):: ir
2550 integer(kind=kint):: j
2551 integer(kind=kint):: jc
2552 integer(kind=kint):: jj
2553 integer(kind=kint):: k
2554 integer(kind=kint):: ke
2555 integer(kind=kint):: kk
2556 integer(kind=kint):: ks
2557 integer(kind=kint):: l
2558 real(kind=
kreal):: t(6)
2559 real(kind=
kreal):: zz(9)
2567 zz(1:9) = zln(1:9,k)
2568 do jj = xlnzr(jc), xlnzr(jc+1) - 1
2570 if ( indx(j)==ic )
then
2571 zz(1) = zz(1) - temp(1,j)*zln(1,jj) - temp(4,j)*zln(4,jj) - temp(7,j)*zln(7,jj)
2572 zz(2) = zz(2) - temp(2,j)*zln(1,jj) - temp(5,j)*zln(4,jj) - temp(8,j)*zln(7,jj)
2573 zz(3) = zz(3) - temp(3,j)*zln(1,jj) - temp(6,j)*zln(4,jj) - temp(9,j)*zln(7,jj)
2575 zz(4) = zz(4) - temp(1,j)*zln(2,jj) - temp(4,j)*zln(5,jj) - temp(7,j)*zln(8,jj)
2576 zz(5) = zz(5) - temp(2,j)*zln(2,jj) - temp(5,j)*zln(5,jj) - temp(8,j)*zln(8,jj)
2577 zz(6) = zz(6) - temp(3,j)*zln(2,jj) - temp(6,j)*zln(5,jj) - temp(9,j)*zln(8,jj)
2579 zz(7) = zz(7) - temp(1,j)*zln(3,jj) - temp(4,j)*zln(6,jj) - temp(7,j)*zln(9,jj)
2580 zz(8) = zz(8) - temp(2,j)*zln(3,jj) - temp(5,j)*zln(6,jj) - temp(8,j)*zln(9,jj)
2581 zz(9) = zz(9) - temp(3,j)*zln(3,jj) - temp(6,j)*zln(6,jj) - temp(9,j)*zln(9,jj)
2584 call inv33(zln(1,k),zz,diag(1,jc))
2585 temp(1:9,jc) = zz(1:9)
2586 t(1) = t(1) + zz(1)*zln(1,k) + zz(4)*zln(4,k) + zz(7)*zln(7,k)
2587 t(2) = t(2) + zz(1)*zln(2,k) + zz(4)*zln(5,k) + zz(7)*zln(8,k)
2588 t(3) = t(3) + zz(2)*zln(2,k) + zz(5)*zln(5,k) + zz(8)*zln(8,k)
2589 t(4) = t(4) + zz(1)*zln(3,k) + zz(4)*zln(6,k) + zz(7)*zln(9,k)
2590 t(5) = t(5) + zz(2)*zln(3,k) + zz(5)*zln(6,k) + zz(8)*zln(9,k)
2591 t(6) = t(6) + zz(3)*zln(3,k) + zz(6)*zln(6,k) + zz(9)*zln(9,k)
2594 diag(l,ic) = diag(l,ic) - t(l)
2596 call inv3(diag(1,ic),ir)
2599 nch(kk) = nch(kk) - 1
2605 subroutine s3um1(Ic,Xlnzr,Colno,Zln,Temp,Indx)
2608 integer(kind=kint),
intent(in):: Ic
2609 integer(kind=kint),
intent(in):: Xlnzr(:)
2610 integer(kind=kint),
intent(in):: Colno(:)
2611 integer(kind=kint),
intent(inout):: Indx(:)
2612 real(kind=
kreal),
intent(inout):: temp(9,*)
2613 real(kind=
kreal),
intent(inout):: zln(9,*)
2615 integer(kind=kint):: j
2616 integer(kind=kint):: jc
2617 integer(kind=kint):: jj
2618 integer(kind=kint):: k
2619 integer(kind=kint):: ke
2620 integer(kind=kint):: ks
2621 integer(kind=kint):: l
2622 real(kind=
kreal):: s(9)
2630 do jj = xlnzr(jc), xlnzr(jc+1) - 1
2632 if ( indx(j)==ic )
then
2633 s(1) = s(1) + temp(1,j)*zln(1,jj) + temp(4,j)*zln(4,jj) + temp(7,j)*zln(7,jj)
2634 s(2) = s(2) + temp(2,j)*zln(1,jj) + temp(5,j)*zln(4,jj) + temp(8,j)*zln(7,jj)
2635 s(3) = s(3) + temp(3,j)*zln(1,jj) + temp(6,j)*zln(4,jj) + temp(9,j)*zln(7,jj)
2637 s(4) = s(4) + temp(1,j)*zln(2,jj) + temp(4,j)*zln(5,jj) + temp(7,j)*zln(8,jj)
2638 s(5) = s(5) + temp(2,j)*zln(2,jj) + temp(5,j)*zln(5,jj) + temp(8,j)*zln(8,jj)
2639 s(6) = s(6) + temp(3,j)*zln(2,jj) + temp(6,j)*zln(5,jj) + temp(9,j)*zln(8,jj)
2641 s(7) = s(7) + temp(1,j)*zln(3,jj) + temp(4,j)*zln(6,jj) + temp(7,j)*zln(9,jj)
2642 s(8) = s(8) + temp(2,j)*zln(3,jj) + temp(5,j)*zln(6,jj) + temp(8,j)*zln(9,jj)
2643 s(9) = s(9) + temp(3,j)*zln(3,jj) + temp(6,j)*zln(6,jj) + temp(9,j)*zln(9,jj)
2647 temp(l,jc) = zln(l,k) - s(l)
2648 zln(l,k) = temp(l,jc)
2652 end subroutine s3um1
2657 subroutine s3um2(Neqns,Nstop,Xlnzr,Colno,Zln,Diag,Dsln,Temp,Indx)
2660 integer(kind=kint),
intent(in):: Neqns
2661 integer(kind=kint),
intent(in):: Nstop
2662 integer(kind=kint),
intent(in):: Xlnzr(:)
2663 integer(kind=kint),
intent(in):: Colno(:)
2664 integer(kind=kint),
intent(inout):: Indx(:)
2665 real(kind=
kreal),
intent(inout):: diag(6,*)
2666 real(kind=
kreal),
intent(inout):: dsln(9,*)
2667 real(kind=
kreal),
intent(inout):: temp(neqns,9)
2668 real(kind=
kreal),
intent(inout):: zln(9,*)
2670 integer(kind=kint):: ic
2671 integer(kind=kint):: j
2672 integer(kind=kint):: j1
2673 integer(kind=kint):: j2
2674 integer(kind=kint):: jc
2675 integer(kind=kint):: jj
2676 integer(kind=kint):: joc
2677 integer(kind=kint):: k
2678 integer(kind=kint):: ke
2679 integer(kind=kint):: ks
2682 do ic = nstop, neqns
2684 ke = xlnzr(ic+1) - 1
2687 temp(jj,1) = zln(1,k)
2688 temp(jj,2) = zln(2,k)
2689 temp(jj,3) = zln(3,k)
2690 temp(jj,4) = zln(4,k)
2691 temp(jj,5) = zln(5,k)
2692 temp(jj,6) = zln(6,k)
2693 temp(jj,7) = zln(7,k)
2694 temp(jj,8) = zln(8,k)
2695 temp(jj,9) = zln(9,k)
2701 zln(4,k) = temp(jj,4) - temp(jj,1)*diag(2,jj)
2702 zln(7,k) = temp(jj,7) - temp(jj,1)*diag(4,jj) - zln(4,k)*diag(5,jj)
2703 zln(1,k) = temp(jj,1)*diag(1,jj)
2704 zln(4,k) = zln(4,k)*diag(3,jj)
2705 zln(7,k) = zln(7,k)*diag(6,jj)
2706 zln(4,k) = zln(4,k) - zln(7,k)*diag(5,jj)
2707 zln(1,k) = zln(1,k) - zln(4,k)*diag(2,jj) - zln(7,k)*diag(4,jj)
2709 zln(5,k) = temp(jj,5) - temp(jj,2)*diag(2,jj)
2710 zln(8,k) = temp(jj,8) - temp(jj,2)*diag(4,jj) - zln(5,k)*diag(5,jj)
2711 zln(2,k) = temp(jj,2)*diag(1,jj)
2712 zln(5,k) = zln(5,k)*diag(3,jj)
2713 zln(8,k) = zln(8,k)*diag(6,jj)
2714 zln(5,k) = zln(5,k) - zln(8,k)*diag(5,jj)
2715 zln(2,k) = zln(2,k) - zln(5,k)*diag(2,jj) - zln(8,k)*diag(4,jj)
2717 zln(6,k) = temp(jj,6) - temp(jj,3)*diag(2,jj)
2718 zln(9,k) = temp(jj,9) - temp(jj,3)*diag(4,jj) - zln(6,k)*diag(5,jj)
2719 zln(3,k) = temp(jj,3)*diag(1,jj)
2720 zln(6,k) = zln(6,k)*diag(3,jj)
2721 zln(9,k) = zln(9,k)*diag(6,jj)
2722 zln(6,k) = zln(6,k) - zln(9,k)*diag(5,jj)
2723 zln(3,k) = zln(3,k) - zln(6,k)*diag(2,jj) - zln(9,k)*diag(4,jj)
2728 diag(1,ic) = diag(1,ic) - temp(jj,1)*zln(1,k) - temp(jj,4)*zln(4,k) - temp(jj,7)*zln(7,k)
2729 diag(2,ic) = diag(2,ic) - temp(jj,1)*zln(2,k) - temp(jj,4)*zln(5,k) - temp(jj,7)*zln(8,k)
2730 diag(3,ic) = diag(3,ic) - temp(jj,2)*zln(2,k) - temp(jj,5)*zln(5,k) - temp(jj,8)*zln(8,k)
2731 diag(4,ic) = diag(4,ic) - temp(jj,1)*zln(3,k) - temp(jj,4)*zln(6,k) - temp(jj,7)*zln(9,k)
2732 diag(5,ic) = diag(5,ic) - temp(jj,2)*zln(3,k) - temp(jj,5)*zln(6,k) - temp(jj,8)*zln(9,k)
2733 diag(6,ic) = diag(6,ic) - temp(jj,3)*zln(3,k) - temp(jj,6)*zln(6,k) - temp(jj,9)*zln(9,k)
2736 do jc = nstop, ic - 1
2740 do jj = xlnzr(jc), xlnzr(jc+1) - 1
2742 if ( indx(j)==ic )
then
2743 dsln(1,joc) = dsln(1,joc) - temp(j,1)*zln(1,jj) - temp(j,4)*zln(4,jj) - temp(j,7)*zln(7,jj)
2744 dsln(2,joc) = dsln(2,joc) - temp(j,2)*zln(1,jj) - temp(j,5)*zln(4,jj) - temp(j,8)*zln(7,jj)
2745 dsln(3,joc) = dsln(3,joc) - temp(j,3)*zln(1,jj) - temp(j,6)*zln(4,jj) - temp(j,9)*zln(7,jj)
2747 dsln(4,joc) = dsln(4,joc) - temp(j,1)*zln(2,jj) - temp(j,4)*zln(5,jj) - temp(j,7)*zln(8,jj)
2748 dsln(5,joc) = dsln(5,joc) - temp(j,2)*zln(2,jj) - temp(j,5)*zln(5,jj) - temp(j,8)*zln(8,jj)
2749 dsln(6,joc) = dsln(6,joc) - temp(j,3)*zln(2,jj) - temp(j,6)*zln(5,jj) - temp(j,9)*zln(8,jj)
2751 dsln(7,joc) = dsln(7,joc) - temp(j,1)*zln(3,jj) - temp(j,4)*zln(6,jj) - temp(j,7)*zln(9,jj)
2752 dsln(8,joc) = dsln(8,joc) - temp(j,2)*zln(3,jj) - temp(j,5)*zln(6,jj) - temp(j,8)*zln(9,jj)
2753 dsln(9,joc) = dsln(9,joc) - temp(j,3)*zln(3,jj) - temp(j,6)*zln(6,jj) - temp(j,9)*zln(9,jj)
2758 end subroutine s3um2
2763 subroutine s3um3(N,Dsln,Diag,Indx,Temp)
2766 integer(kind=kint),
intent(in):: N
2767 integer(kind=kint),
intent(out):: Indx(:)
2768 real(kind=
kreal),
intent(inout):: diag(6,*)
2769 real(kind=
kreal),
intent(inout):: dsln(9,*)
2770 real(kind=
kreal),
intent(out):: temp(9,*)
2772 integer(kind=kint):: i
2773 integer(kind=kint):: ir
2774 integer(kind=kint):: j
2775 integer(kind=kint):: joc
2776 real(kind=
kreal):: t(9)
2781 call inv3(diag(1,1),ir)
2785 call d3dot(t,dsln(1,indx(i)),dsln(1,indx(j)),j-1)
2786 dsln(:,joc) = dsln(:,joc) - t(:)
2789 call v3prod(dsln(1,indx(i)),diag,temp,i-1)
2790 call d3dotl(t,temp,dsln(1,indx(i)),i-1)
2791 diag(:,i) = diag(:,i) - t(1:6)
2792 call vcopy(temp,dsln(1,indx(i)),9*(i-1))
2793 call inv3(diag(1,i),ir)
2796 end subroutine s3um3
2801 subroutine s6um(Ic,Xlnzr,Colno,Zln,Diag,Nch,Par,Temp,Indx)
2804 integer(kind=kint),
intent(in):: Ic
2805 integer(kind=kint),
intent(in):: Xlnzr(:)
2806 integer(kind=kint),
intent(in):: Colno(:)
2807 integer(kind=kint),
intent(in):: Par(:)
2808 integer(kind=kint),
intent(inout):: Indx(:)
2809 integer(kind=kint),
intent(inout):: Nch(:)
2810 real(kind=
kreal),
intent(inout):: diag(21,*)
2811 real(kind=
kreal),
intent(inout):: temp(36,*)
2812 real(kind=
kreal),
intent(inout):: zln(36,*)
2814 integer(kind=kint):: ir
2815 integer(kind=kint):: j
2816 integer(kind=kint):: jc
2817 integer(kind=kint):: jj
2818 integer(kind=kint):: k
2819 integer(kind=kint):: ke
2820 integer(kind=kint):: kk
2821 integer(kind=kint):: ks
2822 integer(kind=kint):: l
2823 real(kind=
kreal):: t(21)
2824 real(kind=
kreal):: zz(36)
2832 zz(1:36) = zln(1:36,k)
2833 do jj = xlnzr(jc), xlnzr(jc+1) - 1
2835 if ( indx(j)==ic )
then
2836 zz(1) = zz(1) - temp(1,j)*zln(1,jj) - temp(7,j)*zln(7,jj)&
2837 - temp(13,j)*zln(13,jj) - temp(19,j)*zln(19,jj)&
2838 - temp(25,j)*zln(25,jj) - temp(31,j)*zln(31,jj)
2839 zz(2) = zz(2) - temp(2,j)*zln(1,jj) - temp(8,j)*zln(7,jj)&
2840 - temp(14,j)*zln(13,jj) - temp(20,j)*zln(19,jj)&
2841 - temp(26,j)*zln(25,jj) - temp(32,j)*zln(31,jj)
2842 zz(3) = zz(3) - temp(3,j)*zln(1,jj) - temp(9,j)*zln(7,jj)&
2843 - temp(15,j)*zln(13,jj) - temp(21,j)*zln(19,jj)&
2844 - temp(27,j)*zln(25,jj) - temp(33,j)*zln(31,jj)
2845 zz(4) = zz(4) - temp(4,j)*zln(1,jj) - temp(10,j)*zln(7,jj)&
2846 - temp(16,j)*zln(13,jj) - temp(22,j)*zln(19,jj)&
2847 - temp(28,j)*zln(25,jj) - temp(34,j)*zln(31,jj)
2848 zz(5) = zz(5) - temp(5,j)*zln(1,jj) - temp(11,j)*zln(7,jj)&
2849 - temp(17,j)*zln(13,jj) - temp(23,j)*zln(19,jj)&
2850 - temp(29,j)*zln(25,jj) - temp(35,j)*zln(31,jj)
2851 zz(6) = zz(6) - temp(6,j)*zln(1,jj) - temp(12,j)*zln(7,jj)&
2852 - temp(18,j)*zln(13,jj) - temp(24,j)*zln(19,jj)&
2853 - temp(30,j)*zln(25,jj) - temp(36,j)*zln(31,jj)
2854 zz(7) = zz(7) - temp(1,j)*zln(2,jj) - temp(7,j)*zln(8,jj)&
2855 - temp(13,j)*zln(14,jj) - temp(19,j)*zln(20,jj)&
2856 - temp(25,j)*zln(26,jj) - temp(31,j)*zln(32,jj)
2857 zz(8) = zz(8) - temp(2,j)*zln(2,jj) - temp(8,j)*zln(8,jj)&
2858 - temp(14,j)*zln(14,jj) - temp(20,j)*zln(20,jj)&
2859 - temp(26,j)*zln(26,jj) - temp(32,j)*zln(32,jj)
2860 zz(9) = zz(9) - temp(3,j)*zln(2,jj) - temp(9,j)*zln(8,jj)&
2861 - temp(15,j)*zln(14,jj) - temp(21,j)*zln(20,jj)&
2862 - temp(27,j)*zln(26,jj) - temp(33,j)*zln(32,jj)
2863 zz(10) = zz(10) - temp(4,j)*zln(2,jj) - temp(10,j)*zln(8,jj)&
2864 - temp(16,j)*zln(14,jj) - temp(22,j)*zln(20,jj)&
2865 - temp(28,j)*zln(26,jj) - temp(34,j)*zln(32,jj)
2866 zz(11) = zz(11) - temp(5,j)*zln(2,jj) - temp(11,j)*zln(8,jj)&
2867 - temp(17,j)*zln(14,jj) - temp(23,j)*zln(20,jj)&
2868 - temp(29,j)*zln(26,jj) - temp(35,j)*zln(32,jj)
2869 zz(12) = zz(12) - temp(6,j)*zln(2,jj) - temp(12,j)*zln(8,jj)&
2870 - temp(18,j)*zln(14,jj) - temp(24,j)*zln(20,jj)&
2871 - temp(30,j)*zln(26,jj) - temp(36,j)*zln(32,jj)
2872 zz(13) = zz(13) - temp(1,j)*zln(3,jj) - temp(7,j)*zln(9,jj)&
2873 - temp(13,j)*zln(15,jj) - temp(19,j)*zln(21,jj)&
2874 - temp(25,j)*zln(27,jj) - temp(31,j)*zln(33,jj)
2875 zz(14) = zz(14) - temp(2,j)*zln(3,jj) - temp(8,j)*zln(9,jj)&
2876 - temp(14,j)*zln(15,jj) - temp(20,j)*zln(21,jj)&
2877 - temp(26,j)*zln(27,jj) - temp(32,j)*zln(33,jj)
2878 zz(15) = zz(15) - temp(3,j)*zln(3,jj) - temp(9,j)*zln(9,jj)&
2879 - temp(15,j)*zln(15,jj) - temp(21,j)*zln(21,jj)&
2880 - temp(27,j)*zln(27,jj) - temp(33,j)*zln(33,jj)
2881 zz(16) = zz(16) - temp(4,j)*zln(3,jj) - temp(10,j)*zln(9,jj)&
2882 - temp(16,j)*zln(15,jj) - temp(22,j)*zln(21,jj)&
2883 - temp(28,j)*zln(27,jj) - temp(34,j)*zln(33,jj)
2884 zz(17) = zz(17) - temp(5,j)*zln(3,jj) - temp(11,j)*zln(9,jj)&
2885 - temp(17,j)*zln(15,jj) - temp(23,j)*zln(21,jj)&
2886 - temp(29,j)*zln(27,jj) - temp(35,j)*zln(33,jj)
2887 zz(18) = zz(18) - temp(6,j)*zln(3,jj) - temp(12,j)*zln(9,jj)&
2888 - temp(18,j)*zln(15,jj) - temp(24,j)*zln(21,jj)&
2889 - temp(30,j)*zln(27,jj) - temp(36,j)*zln(33,jj)
2890 zz(19) = zz(19) - temp(1,j)*zln(4,jj) - temp(7,j)*zln(10,jj)&
2891 - temp(13,j)*zln(16,jj) - temp(19,j)*zln(22,jj)&
2892 - temp(25,j)*zln(28,jj) - temp(31,j)*zln(34,jj)
2893 zz(20) = zz(20) - temp(2,j)*zln(4,jj) - temp(8,j)*zln(10,jj)&
2894 - temp(14,j)*zln(16,jj) - temp(20,j)*zln(22,jj)&
2895 - temp(26,j)*zln(28,jj) - temp(32,j)*zln(34,jj)
2896 zz(21) = zz(21) - temp(3,j)*zln(4,jj) - temp(9,j)*zln(10,jj)&
2897 - temp(15,j)*zln(16,jj) - temp(21,j)*zln(22,jj)&
2898 - temp(27,j)*zln(28,jj) - temp(33,j)*zln(34,jj)
2899 zz(22) = zz(22) - temp(4,j)*zln(4,jj) - temp(10,j)*zln(10,jj)&
2900 - temp(16,j)*zln(16,jj) - temp(22,j)*zln(22,jj)&
2901 - temp(28,j)*zln(28,jj) - temp(34,j)*zln(34,jj)
2902 zz(23) = zz(23) - temp(5,j)*zln(4,jj) - temp(11,j)*zln(10,jj)&
2903 - temp(17,j)*zln(16,jj) - temp(23,j)*zln(22,jj)&
2904 - temp(29,j)*zln(28,jj) - temp(35,j)*zln(34,jj)
2905 zz(24) = zz(24) - temp(6,j)*zln(4,jj) - temp(12,j)*zln(10,jj)&
2906 - temp(18,j)*zln(16,jj) - temp(24,j)*zln(22,jj)&
2907 - temp(30,j)*zln(28,jj) - temp(36,j)*zln(34,jj)
2908 zz(25) = zz(25) - temp(1,j)*zln(5,jj) - temp(7,j)*zln(11,jj)&
2909 - temp(13,j)*zln(17,jj) - temp(19,j)*zln(23,jj)&
2910 - temp(25,j)*zln(29,jj) - temp(31,j)*zln(35,jj)
2911 zz(26) = zz(26) - temp(2,j)*zln(5,jj) - temp(8,j)*zln(11,jj)&
2912 - temp(14,j)*zln(17,jj) - temp(20,j)*zln(23,jj)&
2913 - temp(26,j)*zln(29,jj) - temp(32,j)*zln(35,jj)
2914 zz(27) = zz(27) - temp(3,j)*zln(5,jj) - temp(9,j)*zln(11,jj)&
2915 - temp(15,j)*zln(17,jj) - temp(21,j)*zln(23,jj)&
2916 - temp(27,j)*zln(29,jj) - temp(33,j)*zln(35,jj)
2917 zz(28) = zz(28) - temp(4,j)*zln(5,jj) - temp(10,j)*zln(11,jj)&
2918 - temp(16,j)*zln(17,jj) - temp(22,j)*zln(23,jj)&
2919 - temp(28,j)*zln(29,jj) - temp(34,j)*zln(35,jj)
2920 zz(29) = zz(29) - temp(5,j)*zln(5,jj) - temp(11,j)*zln(11,jj)&
2921 - temp(17,j)*zln(17,jj) - temp(23,j)*zln(23,jj)&
2922 - temp(29,j)*zln(29,jj) - temp(35,j)*zln(35,jj)
2923 zz(30) = zz(30) - temp(6,j)*zln(5,jj) - temp(12,j)*zln(11,jj)&
2924 - temp(18,j)*zln(17,jj) - temp(24,j)*zln(23,jj)&
2925 - temp(30,j)*zln(29,jj) - temp(36,j)*zln(35,jj)
2926 zz(31) = zz(31) - temp(1,j)*zln(6,jj) - temp(7,j)*zln(12,jj)&
2927 - temp(13,j)*zln(18,jj) - temp(19,j)*zln(24,jj)&
2928 - temp(25,j)*zln(30,jj) - temp(31,j)*zln(36,jj)
2929 zz(32) = zz(32) - temp(2,j)*zln(6,jj) - temp(8,j)*zln(12,jj)&
2930 - temp(14,j)*zln(18,jj) - temp(20,j)*zln(24,jj)&
2931 - temp(26,j)*zln(30,jj) - temp(32,j)*zln(36,jj)
2932 zz(33) = zz(33) - temp(3,j)*zln(6,jj) - temp(9,j)*zln(12,jj)&
2933 - temp(15,j)*zln(18,jj) - temp(21,j)*zln(24,jj)&
2934 - temp(27,j)*zln(30,jj) - temp(33,j)*zln(36,jj)
2935 zz(34) = zz(34) - temp(4,j)*zln(6,jj) - temp(10,j)*zln(12,jj)&
2936 - temp(16,j)*zln(18,jj) - temp(22,j)*zln(24,jj)&
2937 - temp(28,j)*zln(30,jj) - temp(34,j)*zln(36,jj)
2938 zz(35) = zz(35) - temp(5,j)*zln(6,jj) - temp(11,j)*zln(12,jj)&
2939 - temp(17,j)*zln(18,jj) - temp(23,j)*zln(24,jj)&
2940 - temp(29,j)*zln(30,jj) - temp(35,j)*zln(36,jj)
2941 zz(36) = zz(36) - temp(6,j)*zln(6,jj) - temp(12,j)*zln(12,jj)&
2942 - temp(18,j)*zln(18,jj) - temp(24,j)*zln(24,jj)&
2943 - temp(30,j)*zln(30,jj) - temp(36,j)*zln(36,jj)
2946 call inv66(zln(1,k),zz,diag(1,jc))
2947 temp(1:36,jc) = zz(1:36)
2949 t(1) = t(1) + zz(1)*zln(1,k) + zz(7)*zln(7,k) + zz(13)*zln(13,k)&
2950 + zz(19)*zln(19,k) + zz(25)*zln(25,k) + zz(31)*zln(31,k)
2951 t(2) = t(2) + zz(1)*zln(2,k) + zz(7)*zln(8,k) + zz(13)*zln(14,k)&
2952 + zz(19)*zln(20,k) + zz(25)*zln(26,k) + zz(31)*zln(32,k)
2953 t(3) = t(3) + zz(2)*zln(2,k) + zz(8)*zln(8,k) + zz(14)*zln(14,k)&
2954 + zz(20)*zln(20,k) + zz(26)*zln(26,k) + zz(32)*zln(32,k)
2955 t(4) = t(4) + zz(1)*zln(3,k) + zz(7)*zln(9,k) + zz(13)*zln(15,k)&
2956 + zz(19)*zln(21,k) + zz(25)*zln(27,k) + zz(31)*zln(33,k)
2957 t(5) = t(5) + zz(2)*zln(3,k) + zz(8)*zln(9,k) + zz(14)*zln(15,k)&
2958 + zz(20)*zln(21,k) + zz(26)*zln(27,k) + zz(32)*zln(33,k)
2959 t(6) = t(6) + zz(3)*zln(3,k) + zz(9)*zln(9,k) + zz(15)*zln(15,k)&
2960 + zz(21)*zln(21,k) + zz(27)*zln(27,k) + zz(33)*zln(33,k)
2961 t(7) = t(7) + zz(1)*zln(4,k) + zz(7)*zln(10,k) + zz(13)*zln(16,k)&
2962 + zz(19)*zln(22,k) + zz(25)*zln(28,k) + zz(31)*zln(34,k)
2963 t(8) = t(8) + zz(2)*zln(4,k) + zz(8)*zln(10,k) + zz(14)*zln(16,k)&
2964 + zz(20)*zln(22,k) + zz(26)*zln(28,k) + zz(32)*zln(34,k)
2965 t(9) = t(9) + zz(3)*zln(4,k) + zz(9)*zln(10,k) + zz(15)*zln(16,k)&
2966 + zz(21)*zln(22,k) + zz(27)*zln(28,k) + zz(33)*zln(34,k)
2967 t(10) = t(10) + zz(4)*zln(4,k) + zz(10)*zln(10,k) + zz(16)*zln(16,k)&
2968 + zz(22)*zln(22,k) + zz(28)*zln(28,k) + zz(34)*zln(34,k)
2969 t(11) = t(11) + zz(1)*zln(5,k) + zz(7)*zln(11,k) + zz(13)*zln(17,k)&
2970 + zz(19)*zln(23,k) + zz(25)*zln(29,k) + zz(31)*zln(35,k)
2971 t(12) = t(12) + zz(2)*zln(5,k) + zz(8)*zln(11,k) + zz(14)*zln(17,k)&
2972 + zz(20)*zln(23,k) + zz(26)*zln(29,k) + zz(32)*zln(35,k)
2973 t(13) = t(13) + zz(3)*zln(5,k) + zz(9)*zln(11,k) + zz(15)*zln(17,k)&
2974 + zz(21)*zln(23,k) + zz(27)*zln(29,k) + zz(33)*zln(35,k)
2975 t(14) = t(14) + zz(4)*zln(5,k) + zz(10)*zln(11,k) + zz(16)*zln(17,k)&
2976 + zz(22)*zln(23,k) + zz(28)*zln(29,k) + zz(34)*zln(35,k)
2977 t(15) = t(15) + zz(5)*zln(5,k) + zz(11)*zln(11,k) + zz(17)*zln(17,k)&
2978 + zz(23)*zln(23,k) + zz(29)*zln(29,k) + zz(35)*zln(35,k)
2979 t(16) = t(16) + zz(1)*zln(6,k) + zz(7)*zln(12,k) + zz(13)*zln(18,k)&
2980 + zz(19)*zln(24,k) + zz(25)*zln(30,k) + zz(31)*zln(36,k)
2981 t(17) = t(17) + zz(2)*zln(6,k) + zz(8)*zln(12,k) + zz(14)*zln(18,k)&
2982 + zz(20)*zln(24,k) + zz(26)*zln(30,k) + zz(32)*zln(36,k)
2983 t(18) = t(18) + zz(3)*zln(6,k) + zz(9)*zln(12,k) + zz(15)*zln(18,k)&
2984 + zz(21)*zln(24,k) + zz(27)*zln(30,k) + zz(33)*zln(36,k)
2985 t(19) = t(19) + zz(4)*zln(6,k) + zz(10)*zln(12,k) + zz(16)*zln(18,k)&
2986 + zz(22)*zln(24,k) + zz(28)*zln(30,k) + zz(34)*zln(36,k)
2987 t(20) = t(20) + zz(5)*zln(6,k) + zz(11)*zln(12,k) + zz(17)*zln(18,k)&
2988 + zz(23)*zln(24,k) + zz(29)*zln(30,k) + zz(35)*zln(36,k)
2989 t(21) = t(21) + zz(6)*zln(6,k) + zz(12)*zln(12,k) + zz(18)*zln(18,k)&
2990 + zz(24)*zln(24,k) + zz(30)*zln(30,k) + zz(36)*zln(36,k)
2993 diag(l,ic) = diag(l,ic) - t(l)
2995 call inv6(diag(1,ic),ir)
2998 nch(kk) = nch(kk) - 1
3004 subroutine s6um1(Ic,Xlnzr,Colno,Zln,Temp,Indx)
3007 integer(kind=kint),
intent(in):: Ic
3008 integer(kind=kint),
intent(in):: Xlnzr(:)
3009 integer(kind=kint),
intent(in):: Colno(:)
3010 integer(kind=kint),
intent(inout):: Indx(:)
3011 real(kind=
kreal),
intent(inout):: temp(9,*)
3012 real(kind=
kreal),
intent(inout):: zln(9,*)
3014 integer(kind=kint):: j
3015 integer(kind=kint):: jc
3016 integer(kind=kint):: jj
3017 integer(kind=kint):: k
3018 integer(kind=kint):: ke
3019 integer(kind=kint):: ks
3020 integer(kind=kint):: l
3021 real(kind=
kreal):: s(9)
3029 do jj = xlnzr(jc), xlnzr(jc+1) - 1
3031 if ( indx(j)==ic )
then
3032 s(1) = s(1) + temp(1,j)*zln(1,jj) + temp(4,j)*zln(4,jj) + temp(7,j)*zln(7,jj)
3033 s(2) = s(2) + temp(2,j)*zln(1,jj) + temp(5,j)*zln(4,jj) + temp(8,j)*zln(7,jj)
3034 s(3) = s(3) + temp(3,j)*zln(1,jj) + temp(6,j)*zln(4,jj) + temp(9,j)*zln(7,jj)
3036 s(4) = s(4) + temp(1,j)*zln(2,jj) + temp(4,j)*zln(5,jj) + temp(7,j)*zln(8,jj)
3037 s(5) = s(5) + temp(2,j)*zln(2,jj) + temp(5,j)*zln(5,jj) + temp(8,j)*zln(8,jj)
3038 s(6) = s(6) + temp(3,j)*zln(2,jj) + temp(6,j)*zln(5,jj) + temp(9,j)*zln(8,jj)
3040 s(7) = s(7) + temp(1,j)*zln(3,jj) + temp(4,j)*zln(6,jj) + temp(7,j)*zln(9,jj)
3041 s(8) = s(8) + temp(2,j)*zln(3,jj) + temp(5,j)*zln(6,jj) + temp(8,j)*zln(9,jj)
3042 s(9) = s(9) + temp(3,j)*zln(3,jj) + temp(6,j)*zln(6,jj) + temp(9,j)*zln(9,jj)
3046 temp(l,jc) = zln(l,k) - s(l)
3047 zln(l,k) = temp(l,jc)
3051 end subroutine s6um1
3056 subroutine s6um2(Neqns,Nstop,Xlnzr,Colno,Zln,Diag,Dsln,Temp,Indx)
3059 integer(kind=kint),
intent(in):: Neqns
3060 integer(kind=kint),
intent(in):: Nstop
3061 integer(kind=kint),
intent(in):: Xlnzr(:)
3062 integer(kind=kint),
intent(in):: Colno(:)
3063 integer(kind=kint),
intent(inout):: Indx(:)
3064 real(kind=
kreal),
intent(inout):: diag(21,*)
3065 real(kind=
kreal),
intent(inout):: dsln(36,*)
3066 real(kind=
kreal),
intent(inout):: temp(36,neqns)
3067 real(kind=
kreal),
intent(inout):: zln(36,*)
3069 integer(kind=kint):: ic
3070 integer(kind=kint):: j
3071 integer(kind=kint):: j1
3072 integer(kind=kint):: j2
3073 integer(kind=kint):: jc
3074 integer(kind=kint):: jj
3075 integer(kind=kint):: joc
3076 integer(kind=kint):: k
3077 integer(kind=kint):: ke
3078 integer(kind=kint):: ks
3081 do ic = nstop, neqns
3082 temp(1:nstop,1:36) = 0.0d0
3084 ke = xlnzr(ic+1) - 1
3087 temp(:,jj) = zln(:,k)
3092 call inv66(zln(1,k),temp,diag(1,jj))
3097 diag(1,ic) = diag(1,ic) - temp(jj,1)*zln(1,k) - temp(jj,4)*zln(4,k) - temp(jj,7)*zln(7,k)
3098 diag(2,ic) = diag(2,ic) - temp(jj,1)*zln(2,k) - temp(jj,4)*zln(5,k) - temp(jj,7)*zln(8,k)
3099 diag(3,ic) = diag(3,ic) - temp(jj,2)*zln(2,k) - temp(jj,5)*zln(5,k) - temp(jj,8)*zln(8,k)
3100 diag(4,ic) = diag(4,ic) - temp(jj,1)*zln(3,k) - temp(jj,4)*zln(6,k) - temp(jj,7)*zln(9,k)
3101 diag(5,ic) = diag(5,ic) - temp(jj,2)*zln(3,k) - temp(jj,5)*zln(6,k) - temp(jj,8)*zln(9,k)
3102 diag(6,ic) = diag(6,ic) - temp(jj,3)*zln(3,k) - temp(jj,6)*zln(6,k) - temp(jj,9)*zln(9,k)
3104 do jc = nstop, ic - 1
3108 do jj = xlnzr(jc), xlnzr(jc+1) - 1
3110 if ( indx(j)==ic )
then
3111 dsln(1,joc) = dsln(1,joc) - temp(j,1)*zln(1,jj) - temp(j,4)*zln(4,jj) - temp(j,7)*zln(7,jj)
3112 dsln(2,joc) = dsln(2,joc) - temp(j,2)*zln(1,jj) - temp(j,5)*zln(4,jj) - temp(j,8)*zln(7,jj)
3113 dsln(3,joc) = dsln(3,joc) - temp(j,3)*zln(1,jj) - temp(j,6)*zln(4,jj) - temp(j,9)*zln(7,jj)
3115 dsln(4,joc) = dsln(4,joc) - temp(j,1)*zln(2,jj) - temp(j,4)*zln(5,jj) - temp(j,7)*zln(8,jj)
3116 dsln(5,joc) = dsln(5,joc) - temp(j,2)*zln(2,jj) - temp(j,5)*zln(5,jj) - temp(j,8)*zln(8,jj)
3117 dsln(6,joc) = dsln(6,joc) - temp(j,3)*zln(2,jj) - temp(j,6)*zln(5,jj) - temp(j,9)*zln(8,jj)
3119 dsln(7,joc) = dsln(7,joc) - temp(j,1)*zln(3,jj) - temp(j,4)*zln(6,jj) - temp(j,7)*zln(9,jj)
3120 dsln(8,joc) = dsln(8,joc) - temp(j,2)*zln(3,jj) - temp(j,5)*zln(6,jj) - temp(j,8)*zln(9,jj)
3121 dsln(9,joc) = dsln(9,joc) - temp(j,3)*zln(3,jj) - temp(j,6)*zln(6,jj) - temp(j,9)*zln(9,jj)
3126 end subroutine s6um2
3131 subroutine s6um3(N,Dsln,Diag,Indx,Temp)
3134 integer(kind=kint),
intent(in):: N
3135 integer(kind=kint),
intent(out):: Indx(:)
3136 real(kind=
kreal),
intent(inout):: diag(6,*)
3137 real(kind=
kreal),
intent(inout):: dsln(9,*)
3138 real(kind=
kreal),
intent(out):: temp(9,*)
3140 integer(kind=kint):: i
3141 integer(kind=kint):: ir
3142 integer(kind=kint):: j
3143 integer(kind=kint):: joc
3144 integer(kind=kint):: l
3145 real(kind=
kreal):: t(9)
3150 call inv3(diag(1,1),ir)
3154 call d3dot(t,dsln(1,indx(i)),dsln(1,indx(j)),j-1)
3156 dsln(l,joc) = dsln(l,joc) - t(l)
3160 call v3prod(dsln(1,indx(i)),diag,temp,i-1)
3161 call d3dotl(t,temp,dsln(1,indx(i)),i-1)
3163 diag(l,i) = diag(l,i) - t(l)
3165 call vcopy(temp,dsln(1,indx(i)),9*(i-1))
3166 call inv3(diag(1,i),ir)
3169 end subroutine s6um3
3174 subroutine sxum(Ic,Xlnzr,Colno,Zln,Diag,Nch,Par,Temp,Indx,Ndeg,Ndegl,Zz,T)
3177 integer(kind=kint),
intent(in):: Ic
3178 integer(kind=kint),
intent(in):: Ndeg
3179 integer(kind=kint),
intent(in):: Ndegl
3180 integer(kind=kint),
intent(in):: Xlnzr(:)
3181 integer(kind=kint),
intent(in):: Colno(:)
3182 integer(kind=kint),
intent(in):: Par(:)
3183 integer(kind=kint),
intent(inout):: Indx(:)
3184 integer(kind=kint),
intent(inout):: Nch(:)
3185 real(kind=
kreal),
intent(inout):: diag(ndegl,*)
3186 real(kind=
kreal),
intent(out):: t(ndegl)
3187 real(kind=
kreal),
intent(inout):: temp(ndeg,ndeg,*)
3188 real(kind=
kreal),
intent(inout):: zln(ndeg,ndeg,*)
3189 real(kind=
kreal),
intent(out):: zz(ndeg,ndeg)
3191 integer(kind=kint):: ir
3192 integer(kind=kint):: j
3193 integer(kind=kint):: jc
3194 integer(kind=kint):: jj
3195 integer(kind=kint):: joc
3196 integer(kind=kint):: k
3197 integer(kind=kint):: ke
3198 integer(kind=kint):: kk
3199 integer(kind=kint):: ks
3200 integer(kind=kint):: m
3201 integer(kind=kint):: n
3202 integer(kind=kint):: ndeg22
3212 do jj = xlnzr(jc), xlnzr(jc+1) - 1
3214 if ( indx(j)==ic )
then
3218 zz(n,m) = zz(n,m) - temp(n,kk,j)*zln(m,kk,jj) - temp(n,kk+1,j)*zln(m,kk+1,jj)
3219 zz(n,m+1) = zz(n,m+1) - temp(n,kk,j)*zln(m+1,kk,jj) - temp(n,kk+1,j)*zln(m+1,kk+1,jj)
3220 zz(n+1,m) = zz(n+1,m) - temp(n+1,kk,j)*zln(m,kk,jj) - temp(n+1,kk+1,j)*zln(m,kk+1,jj)
3221 zz(n+1,m+1) = zz(n+1,m+1) - temp(n+1,kk,j)*zln(m+1,kk,jj) - temp(n+1,kk+1,j)*zln(m+1,kk+1,jj)
3227 call invxx(zln(1,1,k),zz,diag(1,jc),ndeg)
3235 t(joc) = t(joc) + zz(n,kk)*zln(m,kk,k) + zz(n,kk+1)*zln(m,kk+1,k)
3241 diag(:,ic) = diag(:,ic) - t
3242 call invx(diag(1,ic),ndeg,ir)
3245 nch(kk) = nch(kk) - 1
3251 subroutine sxum1(Ic,Xlnzr,Colno,Zln,Temp,Indx,Ndeg,S)
3254 integer(kind=kint),
intent(in):: Ndeg
3255 integer(kind=kint),
intent(in):: Xlnzr(:)
3256 integer(kind=kint),
intent(in):: Colno(:)
3257 integer(kind=kint),
intent(inout):: Indx(:)
3258 real(kind=
kreal),
intent(inout):: s(ndeg,ndeg)
3259 real(kind=
kreal),
intent(inout):: temp(ndeg,ndeg,*)
3260 real(kind=
kreal),
intent(inout):: zln(ndeg,ndeg,*)
3262 integer(kind=kint):: Ic
3263 integer(kind=kint):: j
3264 integer(kind=kint):: jc
3265 integer(kind=kint):: jj
3266 integer(kind=kint):: k
3267 integer(kind=kint):: ke
3268 integer(kind=kint):: kk
3269 integer(kind=kint):: ks
3270 integer(kind=kint):: m
3271 integer(kind=kint):: n
3275 s(1:ndeg,1:ndeg) = 0.0d0
3280 do jj = xlnzr(jc), xlnzr(jc+1) - 1
3282 if ( indx(j)==ic )
then
3286 s(n,m) = s(n,m) + temp(n,kk,j)*zln(m,kk,jj)
3294 temp(n,m,jc) = zln(n,m,k) - s(n,m)
3295 zln(n,m,k) = temp(n,m,jc)
3300 end subroutine sxum1
3305 subroutine sxum2(Neqns,Nstop,Xlnzr,Colno,Zln,Diag,Dsln,Temp,Indx,Ndeg,Ndegl)
3308 integer(kind=kint),
intent(in):: Ndeg
3309 integer(kind=kint),
intent(in):: Ndegl
3310 integer(kind=kint),
intent(in):: Neqns
3311 integer(kind=kint),
intent(in):: Nstop
3312 integer(kind=kint),
intent(in):: Xlnzr(:)
3313 integer(kind=kint),
intent(in):: Colno(:)
3314 integer(kind=kint),
intent(inout):: Indx(:)
3315 real(kind=
kreal),
intent(inout):: diag(ndegl,*)
3316 real(kind=
kreal),
intent(inout):: dsln(ndeg,ndeg,*)
3317 real(kind=
kreal),
intent(inout):: temp(ndeg,ndeg,*)
3318 real(kind=
kreal),
intent(inout):: zln(ndeg,ndeg,*)
3320 integer(kind=kint):: ic
3321 integer(kind=kint):: j
3322 integer(kind=kint):: j1
3323 integer(kind=kint):: j2
3324 integer(kind=kint):: jc
3325 integer(kind=kint):: jj
3326 integer(kind=kint):: joc
3327 integer(kind=kint):: k
3328 integer(kind=kint):: ke
3329 integer(kind=kint):: kk
3330 integer(kind=kint):: ks
3331 integer(kind=kint):: locd
3332 integer(kind=kint):: m
3333 integer(kind=kint):: n
3336 do ic = nstop, neqns
3338 ke = xlnzr(ic+1) - 1
3342 temp(1:ndeg,m,jj) = zln(1:ndeg,m,k)
3348 call invxx(zln(1,1,k),temp(1,1,jj),diag(1,jj),ndeg)
3358 diag(locd,ic) = diag(locd,ic) - temp(n,kk,jj)*zln(m,kk,k)
3363 do jc = nstop, ic - 1
3367 do jj = xlnzr(jc), xlnzr(jc+1) - 1
3369 if ( indx(j)==ic )
then
3373 dsln(n,m,joc) = dsln(n,m,joc) - temp(n,k,j)*zln(m,k,jj)
3381 end subroutine sxum2
3386 subroutine sxum3(Nn,Dsln,Diag,Indx,Temp,Ndeg,Ndegl,T)
3389 integer(kind=kint),
intent(in):: Ndeg
3390 integer(kind=kint),
intent(in):: Ndegl
3391 integer(kind=kint),
intent(in):: Nn
3392 integer(kind=kint),
intent(out):: Indx(:)
3393 real(kind=
kreal),
intent(inout):: diag(ndegl,*)
3394 real(kind=
kreal),
intent(inout):: dsln(ndeg,ndeg,*)
3395 real(kind=
kreal),
intent(out):: t(ndeg,ndeg)
3396 real(kind=
kreal),
intent(out):: temp(ndeg,ndeg,*)
3398 integer(kind=kint):: i
3399 integer(kind=kint):: ir
3400 integer(kind=kint):: j
3401 integer(kind=kint):: joc
3402 integer(kind=kint):: locd
3403 integer(kind=kint):: m
3404 integer(kind=kint):: n
3409 call invx(diag(1,1),ndeg,ir)
3413 call dxdot(ndeg,t,dsln(1,1,indx(i)),dsln(1,1,indx(j)),j-1)
3415 dsln(1:ndeg,m,joc) = dsln(1:ndeg,m,joc) - t(1:ndeg,m)
3419 call vxprod(ndeg,ndegl,dsln(1,1,indx(i)),diag,temp,i-1)
3420 call dxdotl(ndeg,t,temp,dsln(1,1,indx(i)),i-1)
3425 diag(locd,i) = diag(locd,i) - t(n,m)
3428 call vcopy(temp,dsln(1,1,indx(i)),ndeg*ndeg*(i-1))
3429 call invx(diag(1,i),ndeg,ir)
3432 end subroutine sxum3
3437 subroutine inv2(Dsln,Ir)
3440 integer(kind=kint),
intent(out):: Ir
3441 real(kind=
kreal),
intent(inout):: dsln(3)
3443 real(kind=
kreal):: t
3446 if ( dabs(dsln(1))<rmin )
then
3450 dsln(1) = 1.0d0/dsln(1)
3452 dsln(3) = dsln(3) - t*dsln(2)
3454 if ( dabs(dsln(3))<rmin )
then
3458 dsln(3) = 1.0d0/dsln(3)
3464 subroutine inv22(Zln,Zz,Diag)
3467 real(kind=
kreal),
intent(in):: diag(3)
3468 real(kind=
kreal),
intent(in):: zz(4)
3469 real(kind=
kreal),
intent(out):: zln(4)
3471 zln(3) = zz(3) - zz(1)*diag(2)
3472 zln(1) = zz(1)*diag(1)
3473 zln(3) = zln(3)*diag(3)
3474 zln(1) = zln(1) - zln(3)*diag(2)
3476 zln(4) = zz(4) - zz(2)*diag(2)
3477 zln(2) = zz(2)*diag(1)
3478 zln(4) = zln(4)*diag(3)
3479 zln(2) = zln(2) - zln(4)*diag(2)
3480 end subroutine inv22
3485 subroutine inv3(Dsln,Ir)
3488 integer(kind=kint),
intent(out):: Ir
3489 real(kind=
kreal),
intent(inout):: dsln(6)
3491 real(kind=
kreal):: t(2)
3495 if ( dabs(dsln(1))<rmin )
exit
3496 dsln(1) = 1.0d0/dsln(1)
3497 t(1) = dsln(2)*dsln(1)
3498 dsln(3) = dsln(3) - t(1)*dsln(2)
3500 if ( dabs(dsln(3))<rmin )
exit
3501 dsln(3) = 1.0d0/dsln(3)
3502 t(1) = dsln(4)*dsln(1)
3503 dsln(5) = dsln(5) - dsln(2)*dsln(4)
3504 t(2) = dsln(5)*dsln(3)
3505 dsln(6) = dsln(6) - t(1)*dsln(4) - t(2)*dsln(5)
3508 if ( dabs(dsln(6))<rmin )
exit
3509 dsln(6) = 1.0d0/dsln(6)
3524 subroutine inv33(Zln,Zz,Diag)
3527 real(kind=
kreal),
intent(in):: diag(6)
3528 real(kind=
kreal),
intent(in):: zz(9)
3529 real(kind=
kreal),
intent(out):: zln(9)
3531 zln(4) = zz(4) - zz(1)*diag(2)
3532 zln(7) = zz(7) - zz(1)*diag(4) - zln(4)*diag(5)
3533 zln(1) = zz(1)*diag(1)
3534 zln(4) = zln(4)*diag(3)
3535 zln(7) = zln(7)*diag(6)
3536 zln(4) = zln(4) - zln(7)*diag(5)
3537 zln(1) = zln(1) - zln(4)*diag(2) - zln(7)*diag(4)
3539 zln(5) = zz(5) - zz(2)*diag(2)
3540 zln(8) = zz(8) - zz(2)*diag(4) - zln(5)*diag(5)
3541 zln(2) = zz(2)*diag(1)
3542 zln(5) = zln(5)*diag(3)
3543 zln(8) = zln(8)*diag(6)
3544 zln(5) = zln(5) - zln(8)*diag(5)
3545 zln(2) = zln(2) - zln(5)*diag(2) - zln(8)*diag(4)
3547 zln(6) = zz(6) - zz(3)*diag(2)
3548 zln(9) = zz(9) - zz(3)*diag(4) - zln(6)*diag(5)
3549 zln(3) = zz(3)*diag(1)
3550 zln(6) = zln(6)*diag(3)
3551 zln(9) = zln(9)*diag(6)
3552 zln(6) = zln(6) - zln(9)*diag(5)
3553 zln(3) = zln(3) - zln(6)*diag(2) - zln(9)*diag(4)
3554 end subroutine inv33
3559 subroutine inv6(Dsln,Ir)
3562 integer(kind=kint),
intent(out):: Ir
3563 real(kind=
kreal),
intent(inout):: dsln(21)
3565 real(kind=
kreal):: t(5)
3568 dsln(1) = 1.0d0/dsln(1)
3569 t(1) = dsln(2)*dsln(1)
3570 dsln(3) = 1.0d0/(dsln(3)-t(1)*dsln(2))
3572 dsln(5) = dsln(5) - dsln(4)*dsln(2)
3573 t(1) = dsln(4)*dsln(1)
3574 t(2) = dsln(5)*dsln(3)
3575 dsln(6) = 1.0d0/(dsln(6)-t(1)*dsln(4)-t(2)*dsln(5))
3578 dsln(8) = dsln(8) - dsln(7)*dsln(2)
3579 dsln(9) = dsln(9) - dsln(7)*dsln(4) - dsln(8)*dsln(5)
3580 t(1) = dsln(7)*dsln(1)
3581 t(2) = dsln(8)*dsln(3)
3582 t(3) = dsln(9)*dsln(6)
3583 dsln(10) = 1.0d0/(dsln(10)-t(1)*dsln(7)-t(2)*dsln(8)-t(3)*dsln(9))
3587 dsln(12) = dsln(12) - dsln(11)*dsln(2)
3588 dsln(13) = dsln(13) - dsln(11)*dsln(4) - dsln(12)*dsln(5)
3589 dsln(14) = dsln(14) - dsln(11)*dsln(7) - dsln(12)*dsln(8) - dsln(13)*dsln(9)
3590 t(1) = dsln(11)*dsln(1)
3591 t(2) = dsln(12)*dsln(3)
3592 t(3) = dsln(13)*dsln(6)
3593 t(4) = dsln(14)*dsln(10)
3594 dsln(15) = 1.0d0/(dsln(15)-t(1)*dsln(11)-t(2)*dsln(12)-t(3)*dsln(13)-t(4)*dsln(14))
3599 dsln(17) = dsln(17) - dsln(16)*dsln(2)
3600 dsln(18) = dsln(18) - dsln(16)*dsln(4) - dsln(17)*dsln(5)
3601 dsln(19) = dsln(19) - dsln(16)*dsln(7) - dsln(17)*dsln(8) - dsln(18)*dsln(9)
3602 dsln(20) = dsln(20) - dsln(16)*dsln(11) - dsln(17)*dsln(12) - dsln(18)*dsln(13) - dsln(19)*dsln(14)
3603 t(1) = dsln(16)*dsln(1)
3604 t(2) = dsln(17)*dsln(3)
3605 t(3) = dsln(18)*dsln(6)
3606 t(4) = dsln(19)*dsln(10)
3607 t(5) = dsln(20)*dsln(15)
3608 dsln(21) = 1.0d0/(dsln(21)-t(1)*dsln(16)-t(2)*dsln(17)-t(3) *dsln(18)-t(4)*dsln(19)-t(5)*dsln(20))
3619 subroutine inv66(Zln,Zz,Diag)
3622 real(kind=
kreal),
intent(in):: diag(21)
3623 real(kind=
kreal),
intent(in):: zz(36)
3624 real(kind=
kreal),
intent(out):: zln(36)
3626 integer(kind=kint):: i
3629 zln(i+7) = zz(i+7) - zz(i+1)*diag(2)
3630 zln(i+13) = zz(i+13) - zz(i+1)*diag(4) - zln(i+7)*diag(5)
3631 zln(i+19) = zz(i+19) - zz(i+1)*diag(7) - zln(i+7)*diag(8) - zln(i+13)*diag(9)
3632 zln(i+25) = zz(i+25) - zz(i+1)*diag(11) - zln(i+7)*diag(12) - zln(i+13)*diag(13)&
3633 - zln(i+19)*diag(14)
3634 zln(i+31) = zz(i+31) - zz(i+1)*diag(16) - zln(i+7)*diag(17) - zln(i+13)*diag(18)&
3635 - zln(i+19)*diag(19) - zln(i+25)*diag(20)
3636 zln(i+1) = zz(i+1)*diag(1)
3637 zln(i+7) = zln(i+7)*diag(3)
3638 zln(i+13) = zln(i+13)*diag(6)
3639 zln(i+19) = zln(i+19)*diag(10)
3640 zln(i+25) = zln(i+25)*diag(15)
3641 zln(i+31) = zln(i+31)*diag(21)
3642 zln(i+25) = zln(i+25) - zln(i+31)*diag(20)
3643 zln(i+19) = zln(i+19) - zln(i+31)*diag(19) - zln(i+25)*diag(14)
3644 zln(i+13) = zln(i+13) - zln(i+31)*diag(18) - zln(i+25)*diag(13)- zln(i+19)*diag(9)
3645 zln(i+7) = zln(i+7) - zln(i+31)*diag(17) - zln(i+25)*diag(12)- zln(i+19)*diag(8)&
3647 zln(i+1) = zln(i+1) - zln(i+31)*diag(16) - zln(i+25)*diag(11)- zln(i+19)*diag(7)&
3648 - zln(i+13)*diag(4) - zln(i+7)*diag(2)
3650 end subroutine inv66
3655 subroutine invx(Dsln,Ndeg,Ir)
3658 integer(kind=kint),
intent(in):: Ndeg
3659 integer(kind=kint),
intent(out):: Ir
3660 real(kind=
kreal),
intent(inout):: dsln(*)
3662 integer(kind=kint):: i
3663 integer(kind=kint):: j
3664 integer(kind=kint):: k
3665 integer(kind=kint):: k0
3666 integer(kind=kint):: l
3667 integer(kind=kint):: l0
3668 integer(kind=kint):: ld
3669 integer(kind=kint):: ll
3670 real(kind=
kreal):: t
3671 real(kind=
kreal):: tem
3675 dsln(1) = 1.0d0/dsln(1)
3683 dsln(l) = dsln(l) - dsln(l0+k)*dsln(ld)
3693 tem = dsln(k)*dsln(k0)
3698 dsln(l) = dsln(l) - t
3699 dsln(l) = 1.0d0/dsln(l)
3706 subroutine invxx(Zln,Zz,Diag,Ndeg)
3709 integer(kind=kint),
intent(in):: Ndeg
3710 real(kind=
kreal),
intent(in):: diag(*)
3711 real(kind=
kreal),
intent(in):: zz(ndeg,ndeg)
3712 real(kind=
kreal),
intent(out):: zln(ndeg,ndeg)
3714 integer(kind=kint):: joc
3715 integer(kind=kint):: l
3716 integer(kind=kint):: loc1
3717 integer(kind=kint):: m
3718 integer(kind=kint):: n
3727 zln(l,n) = zln(l,n) - zln(l,m)*diag(loc1)
3728 zln(l+1,n) = zln(l+1,n) - zln(l+1,m)*diag(loc1)
3735 zln(l,m) = zln(l,m)*diag(joc)
3736 zln(l+1,m) = zln(l+1,m)*diag(joc)
3741 zln(l,m) = zln(l,m) - zln(l,n)*diag(joc)
3742 zln(l+1,m) = zln(l+1,m) - zln(l+1,n)*diag(joc)
3747 end subroutine invxx
3752 real(kind=
kreal)
function ddot(A,B,N)
3755 integer(kind=kint),
intent(in):: N
3756 real(kind=
kreal),
intent(in):: a(n)
3757 real(kind=
kreal),
intent(in):: b(n)
3759 integer(kind=kint):: i
3760 real(kind=
kreal):: s
3772 subroutine d2dot(T,A,B,N)
3775 integer(kind=kint),
intent(in):: N
3776 real(kind=
kreal),
intent(in):: a(4,*)
3777 real(kind=
kreal),
intent(in):: b(4,*)
3778 real(kind=
kreal),
intent(out):: t(4)
3780 integer(kind=kint):: jj
3785 t(1) = t(1) + a(1,jj)*b(1,jj) + a(3,jj)*b(3,jj)
3786 t(2) = t(2) + a(2,jj)*b(1,jj) + a(4,jj)*b(3,jj)
3787 t(3) = t(3) + a(1,jj)*b(2,jj) + a(3,jj)*b(4,jj)
3788 t(4) = t(4) + a(2,jj)*b(2,jj) + a(4,jj)*b(4,jj)
3790 end subroutine d2dot
3795 subroutine d3dot(T,A,B,N)
3798 integer(kind=kint),
intent(in):: N
3799 real(kind=
kreal),
intent(in):: a(9,*)
3800 real(kind=
kreal),
intent(in):: b(9,*)
3801 real(kind=
kreal),
intent(out):: t(9)
3803 integer(kind=kint):: jj
3807 t(1) = t(1) + a(1,jj)*b(1,jj) + a(4,jj)*b(4,jj) + a(7,jj)*b(7,jj)
3808 t(2) = t(2) + a(2,jj)*b(1,jj) + a(5,jj)*b(4,jj) + a(8,jj)*b(7,jj)
3809 t(3) = t(3) + a(3,jj)*b(1,jj) + a(6,jj)*b(4,jj) + a(9,jj)*b(7,jj)
3811 t(4) = t(4) + a(1,jj)*b(2,jj) + a(4,jj)*b(5,jj) + a(7,jj)*b(8,jj)
3812 t(5) = t(5) + a(2,jj)*b(2,jj) + a(5,jj)*b(5,jj) + a(8,jj)*b(8,jj)
3813 t(6) = t(6) + a(3,jj)*b(2,jj) + a(6,jj)*b(5,jj) + a(9,jj)*b(8,jj)
3815 t(7) = t(7) + a(1,jj)*b(3,jj) + a(4,jj)*b(6,jj) + a(7,jj)*b(9,jj)
3816 t(8) = t(8) + a(2,jj)*b(3,jj) + a(5,jj)*b(6,jj) + a(8,jj)*b(9,jj)
3817 t(9) = t(9) + a(3,jj)*b(3,jj) + a(6,jj)*b(6,jj) + a(9,jj)*b(9,jj)
3819 end subroutine d3dot
3824 subroutine d3dotl(T,A,B,N)
3827 integer(kind=kint),
intent(in):: N
3828 real(kind=
kreal),
intent(in):: a(9,*)
3829 real(kind=
kreal),
intent(in):: b(9,*)
3830 real(kind=
kreal),
intent(out):: t(6)
3832 integer(kind=kint):: jj
3836 t(1) = t(1) + a(1,jj)*b(1,jj) + a(4,jj)*b(4,jj) + a(7,jj)*b(7,jj)
3837 t(2) = t(2) + a(2,jj)*b(1,jj) + a(5,jj)*b(4,jj) + a(8,jj)*b(7,jj)
3839 t(3) = t(3) + a(2,jj)*b(2,jj) + a(5,jj)*b(5,jj) + a(8,jj)*b(8,jj)
3840 t(4) = t(4) + a(3,jj)*b(1,jj) + a(6,jj)*b(4,jj) + a(9,jj)*b(7,jj)
3842 t(5) = t(5) + a(3,jj)*b(2,jj) + a(6,jj)*b(5,jj) + a(9,jj)*b(8,jj)
3843 t(6) = t(6) + a(3,jj)*b(3,jj) + a(6,jj)*b(6,jj) + a(9,jj)*b(9,jj)
3845 end subroutine d3dotl
3850 subroutine dxdot(Ndeg,T,A,B,L)
3853 integer(kind=kint),
intent(in):: L
3854 integer(kind=kint),
intent(in):: Ndeg
3855 real(kind=
kreal),
intent(in):: a(ndeg,ndeg,*)
3856 real(kind=
kreal),
intent(in):: b(ndeg,ndeg,*)
3857 real(kind=
kreal),
intent(out):: t(ndeg,ndeg)
3859 integer(kind=kint):: jj
3860 integer(kind=kint):: k
3861 integer(kind=kint):: m
3862 integer(kind=kint):: n
3869 t(n,m) = t(n,m) + a(n,k,jj)*b(m,k,jj)
3874 end subroutine dxdot
3879 subroutine dxdotl(Ndeg,T,A,B,L)
3882 integer(kind=kint),
intent(in):: L
3883 integer(kind=kint),
intent(in):: Ndeg
3884 real(kind=
kreal),
intent(in):: a(ndeg,ndeg,*)
3885 real(kind=
kreal),
intent(in):: b(ndeg,ndeg,*)
3886 real(kind=
kreal),
intent(out):: t(ndeg,ndeg)
3888 integer(kind=kint):: jj
3889 integer(kind=kint):: k
3890 integer(kind=kint):: m
3891 integer(kind=kint):: n
3898 t(n,m) = t(n,m) + a(n,k,jj)*b(m,k,jj)
3903 end subroutine dxdotl
3908 subroutine vprod(A,B,C,N)
3911 integer(kind=kint),
intent(in):: N
3912 real(kind=
kreal),
intent(in):: a(n)
3913 real(kind=
kreal),
intent(in):: b(n)
3914 real(kind=
kreal),
intent(out):: c(n)
3916 c(1:n) = a(1:n)*b(1:n)
3917 end subroutine vprod
3922 subroutine v2prod(A,B,C,N)
3925 integer(kind=kint),
intent(in):: N
3926 real(kind=
kreal),
intent(in):: a(4,n)
3927 real(kind=
kreal),
intent(in):: b(3,n)
3928 real(kind=
kreal),
intent(out):: c(4,n)
3930 integer(kind=kint):: i
3933 c(3,i) = a(3,i) - a(1,i)*b(2,i)
3934 c(1,i) = a(1,i)*b(1,i)
3935 c(3,i) = c(3,i)*b(3,i)
3936 c(1,i) = c(1,i) - c(3,i)*b(2,i)
3938 c(4,i) = a(4,i) - a(2,i)*b(2,i)
3939 c(2,i) = a(2,i)*b(1,i)
3940 c(4,i) = c(4,i)*b(3,i)
3941 c(2,i) = c(2,i) - c(4,i)*b(2,i)
3943 end subroutine v2prod
3948 subroutine v3prod(Zln,Diag,Zz,N)
3951 integer(kind=kint),
intent(in):: N
3952 real(kind=
kreal),
intent(in):: diag(6,n)
3953 real(kind=
kreal),
intent(in):: zln(9,n)
3954 real(kind=
kreal),
intent(out):: zz(9,n)
3956 integer(kind=kint):: i
3959 zz(4,i) = zln(4,i) - zln(1,i)*diag(2,i)
3960 zz(7,i) = zln(7,i) - zln(1,i)*diag(4,i) - zz(4,i)*diag(5,i)
3961 zz(1,i) = zln(1,i)*diag(1,i)
3962 zz(4,i) = zz(4,i)*diag(3,i)
3963 zz(7,i) = zz(7,i)*diag(6,i)
3964 zz(4,i) = zz(4,i) - zz(7,i)*diag(5,i)
3965 zz(1,i) = zz(1,i) - zz(4,i)*diag(2,i) - zz(7,i)*diag(4,i)
3967 zz(5,i) = zln(5,i) - zln(2,i)*diag(2,i)
3968 zz(8,i) = zln(8,i) - zln(2,i)*diag(4,i) - zz(5,i)*diag(5,i)
3969 zz(2,i) = zln(2,i)*diag(1,i)
3970 zz(5,i) = zz(5,i)*diag(3,i)
3971 zz(8,i) = zz(8,i)*diag(6,i)
3972 zz(5,i) = zz(5,i) - zz(8,i)*diag(5,i)
3973 zz(2,i) = zz(2,i) - zz(5,i)*diag(2,i) - zz(8,i)*diag(4,i)
3975 zz(6,i) = zln(6,i) - zln(3,i)*diag(2,i)
3976 zz(9,i) = zln(9,i) - zln(3,i)*diag(4,i) - zz(6,i)*diag(5,i)
3977 zz(3,i) = zln(3,i)*diag(1,i)
3978 zz(6,i) = zz(6,i)*diag(3,i)
3979 zz(9,i) = zz(9,i)*diag(6,i)
3980 zz(6,i) = zz(6,i) - zz(9,i)*diag(5,i)
3981 zz(3,i) = zz(3,i) - zz(6,i)*diag(2,i) - zz(9,i)*diag(4,i)
3983 end subroutine v3prod
3988 subroutine vxprod(Ndeg,Ndegl,Zln,Diag,Zz,N)
3991 integer(kind=kint),
intent(in):: Ndeg
3992 integer(kind=kint),
intent(in):: Ndegl
3993 real(kind=
kreal),
intent(in):: diag(ndegl,n)
3994 real(kind=
kreal),
intent(in):: zln(ndeg*ndeg,n)
3995 real(kind=
kreal),
intent(out):: zz(ndeg*ndeg,n)
3997 integer(kind=kint):: i
3998 integer(kind=kint):: N
4001 call invxx(zz(1,i),zln(1,i),diag(1,i),ndeg)
4003 end subroutine vxprod
4008 subroutine vcopy(A,C,N)
4011 integer(kind=kint),
intent(in):: N
4012 real(kind=
kreal),
intent(in):: a(n)
4013 real(kind=
kreal),
intent(out):: c(n)
4016 end subroutine vcopy
4026 subroutine nusol0(R_h_s,FCT,Ir)
4029 real(kind=
kreal),
intent(inout):: r_h_s(:)
4030 type (cholesky_factor),
intent(inout):: FCT
4031 integer(kind=kint),
intent(out):: Ir
4033 integer(kind=kint):: ndegl
4034 integer(kind=kint):: ierror
4035 real(kind=
kreal),
pointer :: wk(:)
4037 if ( fct%STAge/=30 .and. fct%STAge/=40 )
then
4044 allocate (wk(fct%NDEg*fct%NEQns),stat=ierror)
4045 if ( ierror/=0 )
then
4046 write (*,*)
"##Error: not enough memory"
4050 ndegl = fct%NDEg*(fct%NDEg+1)
4053 select case( fct%NDEg )
4055 call nusol1(fct%XLNzr,fct%COLno,fct%DSLn,fct%ZLN,fct%DIAg,fct%IPErm,r_h_s,wk,fct%NEQns,fct%NSTop)
4057 call nusol2(fct%XLNzr,fct%COLno,fct%DSLn,fct%ZLN,fct%DIAg,fct%IPErm,r_h_s,wk,fct%NEQns,fct%NSTop)
4059 call nusol3(fct%XLNzr,fct%COLno,fct%DSLn,fct%ZLN,fct%DIAg,fct%IPErm,r_h_s,wk,fct%NEQns,fct%NSTop)
4061 call nusolx(fct%XLNzr,fct%COLno,fct%DSLn,fct%ZLN,fct%DIAg,fct%IPErm,r_h_s,wk,fct%NEQns,fct%NSTop,fct%NDEg,ndegl)
4063 call nusolx(fct%XLNzr,fct%COLno,fct%DSLn,fct%ZLN,fct%DIAg,fct%IPErm,r_h_s,wk,fct%NEQns,fct%NSTop,fct%NDEg,ndegl)
4068 end subroutine nusol0
4073 subroutine nusol1(Xlnzr,Colno,Dsln,Zln,Diag,Iperm,B,Wk,Neqns,Nstop)
4076 integer(kind=kint),
intent(in):: Neqns
4077 integer(kind=kint),
intent(in):: Nstop
4078 integer(kind=kint),
intent(in):: Xlnzr(:)
4079 integer(kind=kint),
intent(in):: Colno(:)
4080 integer(kind=kint),
intent(in):: Iperm(:)
4081 real(kind=
kreal),
intent(in):: zln(:)
4082 real(kind=
kreal),
intent(in):: diag(:)
4083 real(kind=
kreal),
intent(in):: dsln(:)
4084 real(kind=
kreal),
intent(inout):: b(:)
4085 real(kind=
kreal),
intent(out):: wk(:)
4087 integer(kind=kint):: i
4088 integer(kind=kint):: j
4089 integer(kind=kint):: joc
4090 integer(kind=kint):: k
4091 integer(kind=kint):: ke
4092 integer(kind=kint):: ks
4102 if ( ke>=ks ) wk(i) = wk(i) - spdot2(wk,zln,colno,ks,ke)
4104 wk(i) = wk(i) - ddot(wk(nstop:),dsln(joc:),i-nstop)
4105 joc = joc + i - nstop
4109 wk(i) = wk(i)*diag(i)
4113 if ( i>=nstop )
then
4114 do j = i - 1, nstop, -1
4116 wk(j) = wk(j) - wk(i)*dsln(joc)
4124 wk(j) = wk(j) - wk(i)*zln(k)
4132 end subroutine nusol1
4137 subroutine nusol2(Xlnzr,Colno,Dsln,Zln,Diag,Iperm,B,Wk,Neqns,Nstop)
4140 integer(kind=kint),
intent(in):: Neqns
4141 integer(kind=kint),
intent(in):: Nstop
4142 integer(kind=kint),
intent(in):: Xlnzr(:)
4143 integer(kind=kint),
intent(in):: Colno(:)
4144 integer(kind=kint),
intent(in):: Iperm(:)
4145 real(kind=
kreal),
intent(in):: zln(4,*)
4146 real(kind=
kreal),
intent(in):: diag(3,*)
4147 real(kind=
kreal),
intent(in):: dsln(4,*)
4148 real(kind=
kreal),
intent(inout):: b(2,*)
4149 real(kind=
kreal),
intent(out):: wk(2,*)
4151 integer(kind=kint):: i
4152 integer(kind=kint):: j
4153 integer(kind=kint):: joc
4154 integer(kind=kint):: k
4155 integer(kind=kint):: ke
4156 integer(kind=kint):: ks
4160 wk(1,i) = b(1,iperm(i))
4161 wk(2,i) = b(2,iperm(i))
4167 if ( ke>=ks )
call s2pdot(wk(1,i),wk,zln,colno,ks,ke)
4169 call d2sdot(wk(1,i),wk(1,nstop),dsln(1,joc),i-nstop)
4170 joc = joc + i - nstop
4174 wk(2,i) = wk(2,i) - wk(1,i)*diag(2,i)
4175 wk(1,i) = wk(1,i)*diag(1,i)
4176 wk(2,i) = wk(2,i)*diag(3,i)
4177 wk(1,i) = wk(1,i) - wk(2,i)*diag(2,i)
4181 if ( i>=nstop )
then
4182 do j = i - 1, nstop, -1
4184 wk(1,j) = wk(1,j) - wk(1,i)*dsln(1,joc) - wk(2,i)*dsln(2,joc)
4185 wk(2,j) = wk(2,j) - wk(1,i)*dsln(3,joc) - wk(2,i)*dsln(4,joc)
4193 wk(1,j) = wk(1,j) - wk(1,i)*zln(1,k) - wk(2,i)*zln(2,k)
4194 wk(2,j) = wk(2,j) - wk(1,i)*zln(3,k) - wk(2,i)*zln(4,k)
4200 b(1,iperm(i)) = wk(1,i)
4201 b(2,iperm(i)) = wk(2,i)
4203 end subroutine nusol2
4208 subroutine nusol3(Xlnzr,Colno,Dsln,Zln,Diag,Iperm,B,Wk,Neqns,Nstop)
4211 integer(kind=kint),
intent(in):: Neqns
4212 integer(kind=kint),
intent(in):: Nstop
4213 integer(kind=kint),
intent(in):: Xlnzr(:)
4214 integer(kind=kint),
intent(in):: Colno(:)
4215 integer(kind=kint),
intent(in):: Iperm(:)
4216 real(kind=
kreal),
intent(in):: zln(9,*)
4217 real(kind=
kreal),
intent(in):: diag(6,*)
4218 real(kind=
kreal),
intent(in):: dsln(9,*)
4219 real(kind=
kreal),
intent(inout):: b(3,*)
4220 real(kind=
kreal),
intent(out):: wk(3,*)
4222 integer(kind=kint):: i
4223 integer(kind=kint):: j
4224 integer(kind=kint):: joc
4225 integer(kind=kint):: k
4226 integer(kind=kint):: ke
4227 integer(kind=kint):: ks
4231 wk(1,i) = b(1,iperm(i))
4232 wk(2,i) = b(2,iperm(i))
4233 wk(3,i) = b(3,iperm(i))
4239 if ( ke>=ks )
call s3pdot(wk(1,i),wk,zln,colno,ks,ke)
4241 call d3sdot(wk(1,i),wk(1,nstop),dsln(1,joc),i-nstop)
4242 joc = joc + i - nstop
4246 wk(2,i) = wk(2,i) - wk(1,i)*diag(2,i)
4247 wk(3,i) = wk(3,i) - wk(1,i)*diag(4,i) - wk(2,i)*diag(5,i)
4248 wk(1,i) = wk(1,i)*diag(1,i)
4249 wk(2,i) = wk(2,i)*diag(3,i)
4250 wk(3,i) = wk(3,i)*diag(6,i)
4251 wk(2,i) = wk(2,i) - wk(3,i)*diag(5,i)
4252 wk(1,i) = wk(1,i) - wk(2,i)*diag(2,i) - wk(3,i)*diag(4,i)
4256 if ( i>=nstop )
then
4257 do j = i - 1, nstop, -1
4259 wk(1,j) = wk(1,j) - wk(1,i)*dsln(1,joc) - wk(2,i)*dsln(2,joc) - wk(3,i)*dsln(3,joc)
4260 wk(2,j) = wk(2,j) - wk(1,i)*dsln(4,joc) - wk(2,i)*dsln(5,joc) - wk(3,i)*dsln(6,joc)
4261 wk(3,j) = wk(3,j) - wk(1,i)*dsln(7,joc) - wk(2,i)*dsln(8,joc) - wk(3,i)*dsln(9,joc)
4269 wk(1,j) = wk(1,j) - wk(1,i)*zln(1,k) - wk(2,i)*zln(2,k) - wk(3,i)*zln(3,k)
4270 wk(2,j) = wk(2,j) - wk(1,i)*zln(4,k) - wk(2,i)*zln(5,k) - wk(3,i)*zln(6,k)
4271 wk(3,j) = wk(3,j) - wk(1,i)*zln(7,k) - wk(2,i)*zln(8,k) - wk(3,i)*zln(9,k)
4277 b(1,iperm(i)) = wk(1,i)
4278 b(2,iperm(i)) = wk(2,i)
4279 b(3,iperm(i)) = wk(3,i)
4281 end subroutine nusol3
4286 subroutine nusolx(Xlnzr,Colno,Dsln,Zln,Diag,Iperm,B,Wk,Neqns,Nstop,Ndeg,Ndegl)
4289 integer(kind=kint),
intent(in):: Ndeg
4290 integer(kind=kint),
intent(in):: Ndegl
4291 integer(kind=kint),
intent(in):: Neqns
4292 integer(kind=kint),
intent(in):: Nstop
4293 integer(kind=kint),
intent(in):: Xlnzr(:)
4294 integer(kind=kint),
intent(in):: Colno(:)
4295 integer(kind=kint),
intent(in):: Iperm(:)
4296 real(kind=
kreal),
intent(in):: zln(ndeg,ndeg,*)
4297 real(kind=
kreal),
intent(in):: diag(ndegl,*)
4298 real(kind=
kreal),
intent(in):: dsln(ndeg,ndeg,*)
4299 real(kind=
kreal),
intent(inout):: b(ndeg,*)
4300 real(kind=
kreal),
intent(out):: wk(ndeg,*)
4302 integer(kind=kint):: i
4303 integer(kind=kint):: j
4304 integer(kind=kint):: joc
4305 integer(kind=kint):: joc1
4306 integer(kind=kint):: k
4307 integer(kind=kint):: ke
4308 integer(kind=kint):: ks
4309 integer(kind=kint):: l
4310 integer(kind=kint):: loc1
4311 integer(kind=kint):: locd
4312 integer(kind=kint):: m
4313 integer(kind=kint):: n
4317 wk(l,1:neqns) = b(l,iperm(1:neqns))
4323 if ( ke>=ks )
call sxpdot(ndeg,wk(1,i),wk,zln,colno,ks,ke)
4326 call dxsdot(ndeg,wk(1,i),wk(1,nstop),dsln(1,1,joc),joc1)
4336 wk(n,i) = wk(n,i) - wk(m,i)*diag(loc1,i)
4343 wk(m,i) = wk(m,i)*diag(locd,i)
4348 wk(m,i) = wk(m,i) - wk(n,i)*diag(locd,i)
4355 if ( i>=nstop )
then
4356 do j = i - 1, nstop, -1
4360 wk(m,j) = wk(m,j) - wk(n,i)*dsln(n,m,joc)
4372 wk(m,j) = wk(m,j) - wk(n,i)*zln(n,m,k)
4380 b(l,iperm(1:neqns)) = wk(l,1:neqns)
4382 end subroutine nusolx
4387 real(kind=
kreal)
function spdot2(B,Zln,Colno,Ks,Ke)
4390 integer(kind=kint),
intent(in):: Ke
4391 integer(kind=kint),
intent(in):: Ks
4392 integer(kind=kint),
intent(in):: Colno(:)
4393 real(kind=
kreal),
intent(in):: zln(:)
4394 real(kind=
kreal),
intent(in):: b(:)
4396 integer(kind=kint):: j
4397 integer(kind=kint):: jj
4398 real(kind=
kreal):: s
4403 s = s + zln(jj)*b(j)
4411 subroutine s2pdot(Bi,B,Zln,Colno,Ks,Ke)
4414 integer(kind=kint),
intent(in):: Ke
4415 integer(kind=kint),
intent(in):: Ks
4416 integer(kind=kint),
intent(in):: Colno(:)
4417 real(kind=
kreal),
intent(in):: zln(4,*)
4418 real(kind=
kreal),
intent(in):: b(2,*)
4419 real(kind=
kreal),
intent(inout):: bi(2)
4421 integer(kind=kint):: j
4422 integer(kind=kint):: jj
4426 bi(1) = bi(1) - zln(1,jj)*b(1,j) - zln(3,jj)*b(2,j)
4427 bi(2) = bi(2) - zln(2,jj)*b(1,j) - zln(4,jj)*b(2,j)
4429 end subroutine s2pdot
4434 subroutine s3pdot(Bi,B,Zln,Colno,Ks,Ke)
4437 integer(kind=kint),
intent(in):: Ke
4438 integer(kind=kint),
intent(in):: Ks
4439 integer(kind=kint),
intent(in):: Colno(:)
4440 real(kind=
kreal),
intent(in):: zln(9,*)
4441 real(kind=
kreal),
intent(in):: b(3,*)
4442 real(kind=
kreal),
intent(inout):: bi(3)
4444 integer(kind=kint):: j
4445 integer(kind=kint):: jj
4449 bi(1) = bi(1) - zln(1,jj)*b(1,j) - zln(4,jj)*b(2,j) - zln(7,jj)*b(3,j)
4450 bi(2) = bi(2) - zln(2,jj)*b(1,j) - zln(5,jj)*b(2,j) - zln(8,jj)*b(3,j)
4451 bi(3) = bi(3) - zln(3,jj)*b(1,j) - zln(6,jj)*b(2,j) - zln(9,jj)*b(3,j)
4453 end subroutine s3pdot
4458 subroutine s6pdot(Bi,B,Zln,Colno,Ks,Ke)
4461 integer(kind=kint),
intent(in):: Ke
4462 integer(kind=kint),
intent(in):: Ks
4463 integer(kind=kint),
intent(in):: Colno(:)
4464 real(kind=
kreal),
intent(in):: zln(36,*)
4465 real(kind=
kreal),
intent(in):: b(6,*)
4466 real(kind=
kreal),
intent(inout):: bi(6)
4468 integer(kind=kint):: j
4469 integer(kind=kint):: jj
4473 bi(1) = bi(1) - zln(1,jj)*b(1,j) - zln(7,jj)*b(2,j) - zln(13,jj)*b(3,j)&
4474 - zln(19,jj)*b(4,j) - zln(25,jj)*b(5,j) - zln(31,jj)*b(6,j)
4475 bi(2) = bi(2) - zln(2,jj)*b(1,j) - zln(8,jj)*b(2,j) - zln(14,jj)*b(3,j)&
4476 - zln(20,jj)*b(4,j) - zln(26,jj)*b(5,j) - zln(32,jj)*b(6,j)
4477 bi(3) = bi(3) - zln(3,jj)*b(1,j) - zln(9,jj)*b(2,j) - zln(15,jj)*b(3,j)&
4478 - zln(21,jj)*b(4,j) - zln(27,jj)*b(5,j) - zln(33,jj)*b(6,j)
4479 bi(4) = bi(4) - zln(4,jj)*b(1,j) - zln(10,jj)*b(2,j) - zln(16,jj)*b(3,j)&
4480 - zln(22,jj)*b(4,j) - zln(28,jj)*b(5,j) - zln(34,jj)*b(6,j)
4481 bi(5) = bi(5) - zln(5,jj)*b(1,j) - zln(11,jj)*b(2,j) - zln(17,jj)*b(3,j)&
4482 - zln(23,jj)*b(4,j) - zln(29,jj)*b(5,j) - zln(35,jj)*b(6,j)
4483 bi(6) = bi(6) - zln(6,jj)*b(1,j) - zln(12,jj)*b(2,j) - zln(18,jj)*b(3,j)&
4484 - zln(25,jj)*b(4,j) - zln(30,jj)*b(5,j) - zln(36,jj)*b(6,j)
4486 end subroutine s6pdot
4491 subroutine sxpdot(Ndeg,Bi,B,Zln,Colno,Ks,Ke)
4494 integer(kind=kint),
intent(in):: Ke
4495 integer(kind=kint),
intent(in):: Ks
4496 integer(kind=kint),
intent(in):: Ndeg
4497 integer(kind=kint),
intent(in):: Colno(:)
4498 real(kind=
kreal),
intent(in):: zln(ndeg,ndeg,*)
4499 real(kind=
kreal),
intent(in):: b(ndeg,*)
4500 real(kind=
kreal),
intent(inout):: bi(ndeg)
4502 integer(kind=kint):: j
4503 integer(kind=kint):: jj
4504 integer(kind=kint):: m
4505 integer(kind=kint):: n
4511 bi(n) = bi(n) - zln(n,m,jj)*b(m,j)
4515 end subroutine sxpdot
4520 subroutine d2sdot(Wi,A,B,N)
4523 integer(kind=kint),
intent(in):: N
4524 real(kind=
kreal),
intent(in):: a(2,*)
4525 real(kind=
kreal),
intent(in):: b(4,*)
4526 real(kind=
kreal),
intent(inout):: wi(2)
4528 integer(kind=kint):: jj
4531 wi(1) = wi(1) - a(1,jj)*b(1,jj) - a(2,jj)*b(3,jj)
4532 wi(2) = wi(2) - a(1,jj)*b(2,jj) - a(2,jj)*b(4,jj)
4534 end subroutine d2sdot
4539 subroutine d3sdot(Wi,A,B,N)
4542 integer(kind=kint),
intent(in):: N
4543 real(kind=
kreal),
intent(in):: a(3,*)
4544 real(kind=
kreal),
intent(in):: b(9,*)
4545 real(kind=
kreal),
intent(inout):: wi(3)
4547 integer(kind=kint):: jj
4550 wi(1) = wi(1) - a(1,jj)*b(1,jj) - a(2,jj)*b(4,jj) - a(3,jj)*b(7,jj)
4551 wi(2) = wi(2) - a(1,jj)*b(2,jj) - a(2,jj)*b(5,jj) - a(3,jj)*b(8,jj)
4552 wi(3) = wi(3) - a(1,jj)*b(3,jj) - a(2,jj)*b(6,jj) - a(3,jj)*b(9,jj)
4554 end subroutine d3sdot
4559 subroutine dxsdot(Ndeg,Wi,A,B,N)
4562 integer(kind=kint),
intent(in):: Ndeg
4563 real(kind=
kreal),
intent(in):: a(ndeg,*)
4564 real(kind=
kreal),
intent(in):: b(ndeg,ndeg,*)
4565 real(kind=
kreal),
intent(inout):: wi(ndeg)
4566 integer(kind=kint),
intent(inout):: N
4568 integer(kind=kint):: jj
4569 integer(kind=kint):: m
4574 wi(n) = wi(n) - b(n,m,jj)*a(m,jj)
4578 end subroutine dxsdot