38#include "implicit_f.inc"
42 INTEGER IL, IADK(*) ,JDIK(*),NC,JM(*)
50 DO k =iadk(il),iadk(il+1)-1
63!||--- calls -----------------------------------------------------
67 SUBROUTINE sp_static(NDDL ,IADK ,JDIK ,DIAG_K ,LT_K ,
68 . IADM ,JDIM ,NNZM ,NC ,JM ,
73#include "implicit_f.inc"
78 INTEGER NDDL ,,IADK(*) ,(*)
79 INTEGER NNZM,IADM(*) ,JDIM(*),NC(*),JM(MAXC,*),IP
82 . lt_k(*),diag_k(*),psi
86 INTEGER I,J,N,K,I1,IFSAI,IOPT
101 IF (mod(iopt,2)>0)
THEN
104 DO k =iadk(i),iadk(i+1)-1
106 psr = psi*sqrt(diag_k(i)*diag_k(j))
107 IF (abs(lt_k(k))>=psr)
THEN
133 DO k =iadm(i),iadm(i+1)-1
141 CALL sp_a2(nddl,nc,jm,maxc,ifsai)
147 DO k =iadm(i),iadm(i+1)-1
153 WRITE(*,*)
'N>MAXB',nc(i),maxc,i
161 DO k =iadm(i),iadm(i+1)-1
169 WRITE(*,*)
'N>MAXB',nc(i),maxc,i
179!||
sp_a2 ../engine/source/
implicit
186 SUBROUTINE sp_a2(NDDL,NC,JM,MAXC,IFSAI)
190#include "implicit_f.inc"
194 INTEGER NDDL,NC(*),MAXC,IFSAI
205 INTEGER I,J,NN(NDDL),JN(MAXC,NDDL)
219 IF(intab2(nn(i),jn(1,i),nn(j),jn(1,j))>0)
THEN
223 WRITE(*,*)
'N>MAXB',nc(j),maxc,j
234 IF(intab2(nn(i),jn(1,i),nn(j),jn(1,j))>0)
THEN
240 WRITE(*,*)
'N>MAXB',nc(i),maxc,i
262!||
imp_fac_icj ../engine/source/
implicit/imp_fac_ic.f
270#include "implicit_f.inc"
274 INTEGER N ,IADA(*) ,JDIA(*),MAXA
277 . diag_a(*),lt_a(*),mj(*)
281 INTEGER I,IADL(N+1),JDIL(MAXA),NNZL,NNE,IWA1(N)
283 . LT_L(MAXA),WA1(N),DIAG_L(N)
286 1 n ,maxa ,iada ,jdia ,diag_a ,
287 2 lt_a ,iadl ,jdil ,diag_l,lt_l ,
288 3 zero ,nnzl ,maxa ,iwa1 ,wa1 ,
302!||====================================================================
304!||--- called by ------------------------------------------------------
311 . NC ,IADA ,JDIA ,DIAG_A ,LT_A ,
316#include "implicit_f.inc"
320 INTEGER NDDL ,IADK(*) ,JDIK(*),IADA(*) ,JDIA(*)
321 INTEGER NC ,JM(*),MAXA
324 . LT_K(*),DIAG_K(*),LT_A(*),DIAG_A(*)
333 INTEGER I,J,K,JJ,NNZA,N
340 DO k=iadk(j),iadk(j+1)-1
351 CALL ind_lt2ln(nc,iada ,jdia ,lt_a, nnza )
369 . NC ,IADA ,JDIA ,DIAG_A ,LT_A ,
370 . JM ,MAXA ,IDLFT0,IDLFT1 ,DIAG_C,
371 . LT_C ,DIAG_M ,LT_M )
375#include "implicit_f.inc"
379 INTEGER NDDL ,IADK(*) ,JDIK(*),IADA(*) ,JDIA(*)
380 INTEGER NC ,JM(*),MAXA,,IDLFT1
383 . LT_K(*),DIAG_K(*),LT_A(*),DIAG_A(*),LT_C(*),DIAG_C(*),
393 INTEGER I,J,K,JJ,NNZA
398#include "vectorize.inc"
403 DO k=iadk(j),iadk(j+1)-1
412 ELSEIF (j>idlft1)
THEN
413 diag_a(i)=diag_c(j-idlft1)
414 DO k=iadk(j),iadk(j+1)-1
421 lt_a(nnza)=lt_c(k-k0)
427 DO k=iadk(j),iadk(j+1)-1
440 CALL ind_lt2ln(nc,iada ,jdia ,lt_a, nnza )
451 . NC ,IADA ,JDIA ,DIAG_A ,LT_A ,
456#include "implicit_f.inc"
460 INTEGER NDDL ,IADK(*) ,JDIK(*),IADA(*) ,JDIA(*)
464 . LT_K(*),DIAG_K(*),LT_A(*),DIAG_A(*)
480 DO k=iadk(j),iadk(j+1)-1
494!||====================================================================
512#include "implicit_f.inc"
523 if (n<ic(1).OR.n>ic(nic))
RETURN
550 INTEGER FUNCTION intab2(NIC1,IC1,NIC2,IC2)
554#include "implicit_f.inc"
558 INTEGER nic1,ic1(*),nic2,ic2(*)
570 IF (ic1(nic1)<ic2(1).OR.ic2(nic2)<ic1(1))
RETURN
592 1 NDDL ,NNZ ,IADK ,JDIK ,DIAG_K ,
593 2 LT_K ,DIAG_M ,LT_M ,MAXC ,MAX_A ,
594 3 NNE ,IDLFT0 ,IDLFT1,MAX_D )
602#include "implicit_f.inc"
606 INTEGER NDDL ,NNZ ,IADK(*),JDIK(*),MAXC ,MAX_A ,NNE,
607 . IDLFT0 ,IDLFT1,MAX_D
610 . DIAG_K(*), LT_K(*),DIAG_M(*), LT_M(*)
615 INTEGER I,J,K,M,N,NC,IADA(MAXC+1),JDIA(MAX_A),JM(MAXC+1)
616 INTEGER MAX_L,IERR,I_CHK
618 . DIAG_A(MAXC),MJ(MAXC),
619 . diag_c(nddl-idlft1+1),lt_c(max_d+1)
620 my_real,
DIMENSION(:),
ALLOCATABLE :: lt_a
622 ALLOCATE(lt_a(max_a),stat=ierr)
624 CALL ancmsg(msgid=19,anmode=aninfo,
625 . c1=
'FOR IMPLICIT PRECONDITION')
633 diag_c(i-idlft1) = diag_m(i)
634 DO j=iadk(i),iadk(i+1)-1
639 CALL sp_stat0(i ,iadk ,jdik ,nc ,jm )
640 CALL get_subsp(nddl ,iadk ,jdik ,diag_k ,lt_k ,
641 . nc ,iada ,jdia ,diag_a ,lt_a ,
642 . jm ,max_a ,idlft0,idlft1 ,diag_c,
643 . lt_c ,diag_m ,lt_m )
651 1 nc ,max_l ,iada ,jdia ,diag_a ,
653 IF (i_chk>0.AND.ierr<0) nne = i
655 max_l=1+(nc*(nc-1))/2
656 CALL imp_fsai(nc ,iada ,jdia ,diag_a ,lt_a ,
662 IF (nne==0.AND.i_chk==0) nne = i
663 diag_m(i)=abs(diag_m(i))
664 diag_m(i)=
max(em20,diag_m(i))
668 lt_m(m)=mj(k)/diag_m(i)
670 IF (i_chk>0.AND.mj(nc)<em20) diag_m(i)=mj(nc)
691 1 NDDL ,NNZ ,IADK ,JDIK ,DIAG_K ,
696#include "implicit_f.inc"
700#include "impl2_c.inc"
705 INTEGER NDDL ,NNZ ,IADK(*) ,JDIK(*)
708 . DIAG_K(*), LT_K(*) ,R(*)
712 INTEGER I,J,IT,IP,NLIM,ND,IPRE,NNZM,ISTOP,ITOL,ISP
714 . S , R2, R02,ALPHA,BETA,G0,G1,RR,TOLS,TOLN,TOLS2
716 . X(NDDL) ,P(NDDL) ,Z(NDDL) ,Y(NDDL),DIAG_M(NDDL)
720 . anorm2,xnorm2,l_a,l_b2,l_b,a_old,b_old,tmp,eps_m
722 . cs,dbar, delta, denom, kcond,snprod,qrnorm,
723 . gamma, gbar, gmax, gmin, epsln,lqnorm,diag,cgnorm,
724 . oldb, rhs1, rhs2,sn, zbar, zl ,oldb2,tnorm2,eps(4)
738 diag_m(i)=one/
max(em20,diag_k(i))
741 1 nddl ,nnz ,iadk ,jdik ,diag_k,
747 z(i) = r(i) *diag_m(i)
754 1 nddl ,nnz ,iadk ,jdik ,diag_k,
762 ELSEIF (itol==3)
THEN
774 ELSEIF (itol==4)
THEN
775 r02=alpha*alpha*abs(g0)
782 IF (r02==zero)
GOTO 200
787 x(i) = x(i) + alpha*p(i)
788 r(i) = r(i) - alpha*y(i)
791 z(i) = r(i) *diag_m(i)
797 ELSEIF (itol==3)
THEN
800 l_b2=abs(beta)*a_old*a_old
809 gmax = abs( l_a ) + eps_m
813 ELSEIF (itol==4)
THEN
819 IF (itol==3) toln=toln*anorm2
820 istop=crit_stop(it,r2,nlim,toln)
823 p(i) = z(i) + beta*p(i)
826 1 nddl ,nnz ,iadk ,jdik ,diag_k,
831 x(i) = x(i) + alpha*p(i)
832 r(i) = r(i) - alpha*y(i)
835 z(i) = r(i) *diag_m(i)
842 ELSEIF (itol==3)
THEN
852 tnorm2=tnorm2+l_a*l_a+oldb2+l_b2
853 gamma = sqrt( gbar*gbar + oldb2 )
856 delta = cs * dbar + sn * l_a
857 gbar = sn * dbar - cs * l_a
861 xnorm2 = xnorm2+zl*zl
862 gmax =
max( gmax, gamma )
863 gmin =
min( gmin, gamma )
864 rhs1 = rhs2 - delta * zl
866 toln=tols2*anorm2*xnorm2
869 ELSEIF (itol==4)
THEN
870 tmp=alpha*alpha*abs(g1)
887 istop=crit_stop(it,r2,nlim,toln)
919 1 NDDL ,IADK ,JDIK ,DIAG_K ,LT_K ,
920 2 IADM ,JDIM ,DIAG_M ,LT_M ,MAXC ,
921 3 MAX_A ,NNE ,D_TOL ,P_MACH)
929#include "implicit_f.inc"
933 INTEGER NDDL ,IADK(*),JDIK(*),MAXC ,MAX_A ,NNE,
937 . diag_k(*), lt_k(*),diag_m(*), lt_m(*) ,d_tol ,p_mach
942 INTEGER I,J,K,M,N,NC,IERR
944 INTEGER,
DIMENSION(:),
ALLOCATABLE :: IADA,JDIA,JM
945 my_real,
DIMENSION(:),
ALLOCATABLE :: DIAG_A,LT_A,MJ
949 ALLOCATE(iada(maxc+1))
950 ALLOCATE(jdia(max_a))
952 ALLOCATE(diag_a(maxc))
954 ALLOCATE(lt_a(max_a),stat=ierr)
956 CALL ancmsg(msgid=19,anmode=aninfo,
957 . c1=
'FOR IMPLICIT PRECONDITION')
961 CALL sp_stat0(i ,iadm ,jdim ,nc ,jm )
962 CALL get_subs0(nddl ,iadk ,jdik ,diag_k ,lt_k ,
963 . nc ,iada ,jdia ,diag_a ,lt_a ,
972 1 nc ,max_l ,iada ,jdia ,diag_a ,
974 IF (i_chk>0.AND.ierr<0) nne = i
976 max_l=1+(nc*(nc-1))/2
977 CALL imp_fsai(nc ,iada ,jdia ,diag_a ,lt_a ,
982 IF (diag_m(i)<em20)
THEN
983 IF (nne==0.AND.i_chk==0) nne = i
984 diag_m(i)=abs(diag_m(i))
985 diag_m(i)=
max(em20,diag_m(i))
989 lt_m(m)=mj(k)/diag_m(i)
991 IF (i_chk>0.AND.mj(nc)<em20) diag_m(i)=mj(nc)
994 DEALLOCATE(iada,jdia)
996 DEALLOCATE(diag_a,lt_a)
1000 .
CALL imp_kfiltr(k ,nddl ,iadm ,jdim ,diag_m ,
1001 . lt_m ,d_tol ,p_mach,diag_k)
1019 1 NDDL ,IADK ,JDIK ,DIAG_K ,LT_K ,
1020 2 IADM ,JDIM ,DIAG_M ,LT_M ,MAXC ,
1021 3 MAX_A ,NNE ,IDLFT0 ,IDLFT1 ,MAX_D ,
1030#include "implicit_f.inc"
1034 INTEGER NDDL ,NNZ ,IADK(*),JDIK(*),MAXC ,MAX_A ,NNE,
1035 . IDLFT0 ,IDLFT1,MAX_D,IADM(*),JDIM(*)
1038 . DIAG_K(*), LT_K(*),DIAG_M(*), LT_M(*),D_TOL ,P_MACH
1043 INTEGER ,J,K,M,N,NC,IADA(MAXC+1),JDIA(MAX_A),JM(MAXC+1)
1044 INTEGER MAX_L,IERR,I_CHK
1046 . DIAG_A(MAXC),MJ(MAXC),
1047 . DIAG_C(NDDL-IDLFT1+1),LT_C(+1)
1048 my_real,
DIMENSION(:),
ALLOCATABLE :: lt_a
1050 ALLOCATE(lt_a(max_a),stat=ierr)
1052 CALL ancmsg(msgid=19,anmode=aninfo,
1053 . c1=
'FOR IMPLICIT PRECONDITION')
1061 diag_c(i-idlft1) = diag_m(i)
1062 DO j=iadk(i),iadk(i+1)-1
1067 CALL sp_stat0(i ,iadm ,jdim ,nc ,jm )
1069 . nc ,iada ,jdia ,diag_a ,lt_a ,
1070 . jm ,max_a ,idlft0,idlft1 ,diag_c,
1071 . lt_c ,diag_m,lt_m )
1079 1 nc ,max_l ,iada ,jdia ,diag_a ,
1081 IF (i_chk>0.AND.ierr<0) nne = i
1083 max_l=1+(nc*(nc-1))/2
1084 CALL imp_fsai(nc ,iada ,jdia ,diag_a ,lt_a ,
1089 IF (diag_m(i)<em20)
THEN
1090 IF (nne==0.AND.i_chk==0) nne = i
1091 diag_m(i)=abs(diag_m(i))
1092 diag_m(i)=
max(em20,diag_m(i))
1096 lt_m(m)=mj(k)/diag_m(i)
1098 IF (i_chk>0.AND.mj(nc)<em20) diag_m(i)=mj(nc)
1104 .
CALL imp_kfiltr(k ,nddl ,iadm ,jdim ,diag_m ,
1105 . lt_m ,d_tol ,p_mach,diag_k)
1116!||--- calls -----------------------------------------------------
1123!||====================================================================
1125 . LT_A ,TOL ,E_PS ,DIAG_K )
1133#include "implicit_f.inc"
1137 INTEGER NDF,ND ,IADA(*) ,JDIA(*)
1140 . DIAG_A(*),LT_A(*),TOL,E_PS,DIAG_K(*)
1144 INTEGER I,J,K,NZ,IERR,MNZ,INORM
1145 INTEGER,
DIMENSION(:),
ALLOCATABLE :: IADL,JDIL
1147 . min_d,max_d,mtol,dd,taux
1148 my_real,
DIMENSION(:),
ALLOCATABLE :: lt_l
1150 print *,
'D_tol,p_mach=',tol,e_ps
1151 nz = iada(nd+1)-iada(1)
1154 DO j = iada(i), iada(i+1)-1
1159 IF (nz>0.AND.tol>zero)
THEN
1160 ALLOCATE(iadl(nd+1))
1161 ALLOCATE(jdil(nz),lt_l(nz),stat=ierr)
1163 CALL ancmsg(msgid=19,anmode=aninfo,
1164 . c1=
'FOR IMPLICIT PRECONDITION')
1168 CALL cp_int(nd+1,iada,iadl)
1169 CALL cp_int(nz,jdia,jdil)
1174 max_d =
max(max_d,diag_a(i))
1177 print *,
'max_d,min_d=',max_d,min_d
1183 DO j = iadl(i), iadl(i+1)-1
1184 mtol = tol*
min(diag_a(jdil(j)),diag_a(i))
1185 mtol =
max(e_ps,mtol)
1186 IF (abs(lt_l(j))>mtol)
THEN
1194 DEALLOCATE(iadl,jdil)
1198 print *,
'filtrage factor=',taux
1202 IF (inorm>zero)
THEN
1204 diag_a(i) = diag_a(i)/diag_k(i)
1205 DO j = iada(i), iada(i+1)-1
1206 dd = sqrt(diag_k(i)/diag_k(jdia(j)))
1207 lt_a(j) = dd*lt_a(j)
1215!||
get_subsn ../engine/source/
implicit/imp_fsa_inv.f
1221 . NC ,IADA ,JDIA ,DIAG_A ,LT_A ,
1226#include "implicit_f.inc"
1230 INTEGER NDDL ,IADK(*) ,JDIK(*),IADA(*) ,JDIA(*)
1231 INTEGER NC ,JM(*),MAXA
1234 . lt_k(*),diag_k(*),lt_a(*),diag_a(*)
1243 INTEGER I,J,K,JJ,NNZA,N
1252 DO k=iadk(j),iadk(j+1)-1
1256 dd = sqrt(diag_k(j)*diag_k(jj))
1259 lt_a(nnza)=lt_k(k)/dd
1264 CALL ind_lt2ln(nc,iada ,jdia ,lt_a, nnza )
1284#include "implicit_f.inc"
1288 INTEGER NDDL, IADK(*),JDIK(*),MAXL
1295 INTEGER IADM(NDDL+1),JDIM(MAXL),ICOL(NDDL)
1296 INTEGER I,JD,J,K,N,NM
1300 CALL CP_INT(NDDL+1,IADK,IADM)
1301 CALL CP_INT(MAXL,JDIK,JDIM)
1302 CALL CP_REAL(MAXL,LT_K,LT_M)
1306 DO j = iadm(i),iadm(i+1)-1
1308 icol(jd) = icol(jd) + 1
1314 iadk(i+1) = iadk(i)+icol(i)
1319 DO j=iadm(i),iadm(i+1)-1
1321 k = iadk(jd) + icol(jd)
1324 icol(jd) = icol(jd) + 1
1345 1 NDDL ,NNZ ,IADK ,JDIK ,DIAG_K ,
1346 2 LT_K ,DIAG_M ,LT_M ,MAXC ,MAX_A ,
1347 3 NNE ,IDLFT0 ,IDLFT1,MAX_D ,ITASK )
1355#include "implicit_f.inc"
1363 . DIAG_K(*), LT_K(*),DIAG_M(*), LT_M(*)
1368 INTEGER I,J,K,M,N,NC,MAX_L,IERR,I_CHK,IER1,
1371 . DIAG_C(NDDL-IDLFT1+1),LT_C(MAX_D+1)
1372 INTEGER,
DIMENSION(:),
ALLOCATABLE :: IADA,JDIA
1373 my_real,
DIMENSION(:),
ALLOCATABLE :: DIAG_A,LT_A,MJ
1377 IF ((idlft0+1)>nddl)
RETURN
1379 ALLOCATE(iada(maxc+1),diag_a(maxc),mj(maxc),stat=ier1)
1380 ALLOCATE(lt_a(max_a),jdia(max_a),stat=ierr)
1382 IF ((ierr+ier1)/=0)
THEN
1383 IF (itask == 0 )
THEN
1384 CALL ancmsg(msgid=19,anmode=aninfo,
1385 . c1=
'FOR IMPLICIT PRECONDITION')
1393 diag_c(i-idlft1) = diag_m(i)
1394 DO j=iadk(i),iadk(i+1)-1
1406 CALL sp_stat0(i ,iadk ,jdik ,nc ,jm )
1407 CALL get_subsp(nddl ,iadk ,jdik ,diag_k ,lt_k ,
1408 . nc ,iada ,jdia ,diag_a ,lt_a ,
1409 . jm ,max_a ,idlft0,idlft1 ,diag_c,
1410 . lt_c ,diag_m ,lt_m )
1419 1 nc ,max_l ,iada ,jdia ,diag_a ,
1422 IF (i_chk>0.AND.ierr<0) nne = i
1425 max_l=1+(nc*(nc-1))/2
1426 CALL imp_fsai(nc ,iada ,jdia ,diag_a ,lt_a ,
1432 IF (diag_m(i)<em20)
THEN
1433 IF (nne==0.AND.i_chk==0) nne = i
1434 diag_m(i)=abs(diag_m(i))
1435 diag_m(i)=
max(em20,diag_m(i))
1439 lt_m(m)=mj(k)/diag_m(i)
1442 IF (i_chk>0.AND.mj(nc)<em20) diag_m(i)=mj(nc)
1447 DEALLOCATE(iada,diag_a,mj)
1448 DEALLOCATE(lt_a,jdia)
1465!||====================================================================
1467 1 NDDL ,IADK ,JDIK ,DIAG_K ,LT_K ,
1468 2 IADM ,JDIM ,DIAG_M ,LT_M ,MAXC ,
1469 3 MAX_A ,NNE ,IDLFT0 ,IDLFT1 ,MAX_D ,
1470 4 D_TOL ,P_MACH ,ITASK )
1478#include "implicit_f.inc"
1482 INTEGER NDDL ,NNZ ,IADK(*),JDIK(*),MAXC ,MAX_A ,NNE,
1483 . idlft0 ,idlft1,max_d,iadm(*),jdim(*),itask
1486 . diag_k(*), lt_k(*),diag_m(*), lt_m(*),d_tol ,p_mach
1491 INTEGER I,J,K,M,N,NC,MAX_L,IERR,I_CHK,IER1,
1494 . DIAG_C(NDDL-IDLFT1+1),LT_C(MAX_D+1)
1495 INTEGER,
DIMENSION(:),
ALLOCATABLE :: IADA,JDIA
1496 my_real,
DIMENSION(:),
ALLOCATABLE :: DIAG_A,LT_A,MJ
1500 IF ((idlft0+1)>nddl)
RETURN
1502 ALLOCATE(iada(maxc+1),diag_a(maxc),mj(maxc),stat=ier1)
1503 ALLOCATE(lt_a(max_a),jdia(max_a),stat=ierr)
1505 IF ((ierr+ier1)/=0)
THEN
1506 IF (itask == 0 )
THEN
1507 CALL ancmsg(msgid=19,anmode=aninfo,
1508 . c1=
'FOR IMPLICIT PRECONDITION')
1515 diag_c(i-idlft1) = diag_m(i)
1516 DO j=iadk(i),iadk(i+1)-1
1527 CALL sp_stat0(i ,iadm ,jdim ,nc ,jm )
1528 CALL get_subsp(nddl ,iadk ,jdik ,diag_k ,lt_k ,
1529 . nc ,iada ,jdia ,diag_a ,lt_a ,
1530 . jm ,max_a ,idlft0,idlft1 ,diag_c,
1531 . lt_c ,diag_m,lt_m )
1539 1 nc ,max_l ,iada ,jdia ,diag_a ,
1541 IF (i_chk>0.AND.ierr<0) nne = i
1543 max_l=1+(nc*(nc-1))/2
1544 CALL imp_fsai(nc ,iada ,jdia ,diag_a ,lt_a ,
1549 IF (diag_m(i)<em20)
THEN
1550 IF (nne==0.AND.i_chk==0) nne = i
1551 diag_m(i)=abs(diag_m(i))
1552 diag_m(i)=
max(em20,diag_m(i))
1556 lt_m(m)=mj(k)/diag_m(i)
1559 IF (i_chk>0.AND.mj(nc)<em20) diag_m(i)=mj(nc)
1564 DEALLOCATE(iada,diag_a,mj)
1565 DEALLOCATE(lt_a,jdia)
1567 IF (itask == 0 )
THEN
1570 .
CALL imp_kfiltr(k ,nddl ,iadm ,jdim ,diag_m ,
1571 . lt_m ,d_tol ,p_mach,diag_k)
1581!||====================================================================
1582 SUBROUTINE sp_dim(IL ,IADK ,JDIK ,NC ,MAX_A ,MAX_L )
1586#include "implicit_f.inc"
1590 INTEGER IL, IADK(*) ,JDIK(*),NC,MAX_A ,MAX_L
1598 DO k =iadk(il),iadk(il+1)-1
1603 IF (nc <= 10000)
THEN
1604 max_l = 1+(nc*(nc-1))/2
1613!||--- called by ------------------------------------------------------
1619!||
imp_pcg1 ../engine/source/
implicit/imp_fsa_inv.f
1622 1 NDDL ,NC ,IADK ,JDIK ,DIAG_K ,
1623 2 LT_K ,DIAG_M,LT_M ,DIAG_C,LT_C ,
1624 3 MAX_A ,IDLFT0,IDLFT1,NNE ,I_CHK ,
1629#include "implicit_f.inc"
1633 INTEGER I, ,NC ,IADK(*),JDIK(*),MAX_A ,NNE,
1634 . idlft0,idlft1 ,i_chk,iadm(*),jdim(*)
1637 . diag_k(*), lt_k(*),diag_m(*), lt_m(*) ,diag_c(*),lt_c(*)
1642 INTEGER J,K,M,N,MAX_L,IERR,IER1,IADA(NC+1),JM(NC)
1646 INTEGER,
DIMENSION(:),
ALLOCATABLE :: JDIA
1647 ,
DIMENSION(:),
ALLOCATABLE :: DIAG_A,LT_A,MJ
1650 ALLOCATE(DIAG_A(NC),MJ(NC),STAT=ier1)
1651 ALLOCATE(lt_a(max_a),jdia(max_a),stat=ierr)
1654 DO k =iadm(i),iadm(i+1)-1
1661 CALL get_subsp(nddl ,iadk ,jdik ,diag_k ,lt_k ,
1662 . nc ,iada ,jdia ,diag_a ,lt_a ,
1663 . jm ,max_a ,idlft0,idlft1 ,diag_c,
1664 . lt_c ,diag_m ,lt_m )
1670 IF (nc > 10000)
THEN
1673 1 nc ,max_l ,iada ,jdia ,diag_a ,
1676 IF (i_chk>0.AND.ierr<0) nne = i
1679 max_l=1+(nc*(nc-1))/2
1680 CALL imp_fsai(nc ,iada ,jdia ,diag_a ,lt_a ,
1686 IF (diag_m(i)<em20)
THEN
1687 IF (nne==0.AND.i_chk==0) nne = i
1688 diag_m(i)=abs(diag_m(i))
1689 diag_m(i)=
max(em20,diag_m(i))
1693 lt_m(m)=mj(k)/diag_m(i)
1695 IF (i_chk>0.AND.mj(nc)<em20) diag_m(i)=mj(nc)
1697 DEALLOCATE(diag_a,mj)
1698 DEALLOCATE(lt_a,jdia)
1710!||
sp_dim ../engine/source/
implicit/imp_fsa_inv.f
1715 1 NDDL ,NNZ ,IADK ,JDIK ,DIAG_K ,
1716 2 LT_K ,DIAG_M ,LT_M ,MAXC ,MAX_A ,
1717 3 NNE ,IDLFT0 ,IDLFT1,MAX_D )
1725#include "implicit_f.inc"
1729#include "task_c.inc"
1733 INTEGER NDDL ,NNZ ,IADK(*),JDIK(*),MAXC ,MAX_A ,NNE,
1734 . idlft0 ,idlft1,max_d
1737 . diag_k(*), lt_k(*),diag_m(*), lt_m(*)
1742 INTEGER I,,K,M,N,,MAX_L,IERR,I_CHK,IER1,
1745 . DIAG_C(NDDL-+1),(MAX_D+1)
1746 INTEGER OMP_GET_THREAD_NUM
1747 EXTERNAL OMP_GET_THREAD_NUM
1751 IF ((idlft0+1)>nddl)
RETURN
1756 itsk = omp_get_thread_num()
1758 f_ddl = idlft1+1+itsk*n1/ nthread
1759 l_ddl = idlft1+(itsk+1)*n1/ nthread
1765 diag_c(i-idlft1) = diag_m(i)
1766 DO j=iadk(i),iadk(i+1)-1
1778 CALL sp_dim(i ,iadk ,jdik ,nc ,max_a ,max_l )
1780 1 nddl ,nc ,iadk ,jdik ,diag_k ,
1781 2 lt_k ,diag_m,lt_m ,diag_c,lt_c ,
1782 3 max_l ,idlft0,idlft1,nne ,i_chk ,
1805 1 NDDL ,IADK ,JDIK ,DIAG_K ,LT_K ,
1806 2 IADM ,JDIM ,DIAG_M ,LT_M ,MAXC ,
1807 3 MAX_A ,NNE ,IDLFT0 ,IDLFT1 ,MAX_D ,
1816#include "implicit_f.inc"
1820#include "task_c.inc"
1824 INTEGER NDDL , ,IADK(*),JDIK(*),MAXC ,MAX_A ,NNE,
1825 . IDLFT0 ,IDLFT1,,IADM(*),JDIM(*)
1828 . diag_k(*), lt_k(*),diag_m(*), lt_m(*),d_tol ,p_mach
1833 INTEGER I,J,K,M,N,NC,MAX_L,IERR,I_CHK,IER1,
1834 . ITSK,F_DDL,L_DDL,N1
1836 . DIAG_C(NDDL-IDLFT1+1),LT_C(MAX_D+1)
1837 INTEGER OMP_GET_THREAD_NUM
1838 EXTERNAL OMP_GET_THREAD_NUM
1842 IF ((idlft0+1)>nddl)
RETURN
1847 itsk = omp_get_thread_num()
1849 f_ddl = idlft1+1+itsk*n1/ nthread
1850 l_ddl = idlft1+(itsk+1)*n1/ nthread
1852 diag_c(i-idlft1) = diag_m(i)
1853 DO j=iadk(i),iadk(i+1)-1
1864 CALL sp_dim(i ,iadm ,jdim ,nc ,max_a ,max_l )
1866 1 nddl ,nc ,iadk ,jdik ,diag_k ,
1867 2 lt_k ,diag_m,lt_m ,diag_c,lt_c ,
1868 3 max_l ,idlft0,idlft1,nne ,i_chk ,
1878 .
CALL imp_kfiltr(k ,nddl ,iadm ,jdim ,diag_m ,
1879 . lt_m ,d_tol ,p_mach,diag_k)
if(complex_arithmetic) id
subroutine imp_fac_icj(nddl, nnz, iadk, jdik, diag_k, lt_k, iadm, jdim, diag_m, lt_m, psi, nnzm, max_l, isky, li, nne)
subroutine imp_fsa_invp(nddl, nnz, iadk, jdik, diag_k, lt_k, diag_m, lt_m, maxc, max_a, nne, idlft0, idlft1, max_d)
subroutine sp_stat0(il, iadk, jdik, nc, jm)
subroutine imp_fsa_invh(nddl, nnz, iadk, jdik, diag_k, lt_k, diag_m, lt_m, maxc, max_a, nne, idlft0, idlft1, max_d, itask)
subroutine imp_fsa_invp2(nddl, iadk, jdik, diag_k, lt_k, iadm, jdim, diag_m, lt_m, maxc, max_a, nne, idlft0, idlft1, max_d, d_tol, p_mach)
integer function intab0(nic, ic, n)
subroutine get_subsp(nddl, iadk, jdik, diag_k, lt_k, nc, iada, jdia, diag_a, lt_a, jm, maxa, idlft0, idlft1, diag_c, lt_c, diag_m, lt_m)
subroutine get_subsa(nddl, iadk, jdik, diag_k, lt_k, nc, iada, jdia, diag_a, lt_a, jm)
subroutine imp_pcg1(nddl, nnz, iadk, jdik, diag_k, lt_k, r, isp)
subroutine imp_fsai(n, iada, jdia, diag_a, lt_a, maxa, mj)
subroutine get_subs0(nddl, iadk, jdik, diag_k, lt_k, nc, iada, jdia, diag_a, lt_a, jm, maxa)
subroutine ind_lt2ln(nddl, iadk, jdik, lt_k, maxl)
subroutine sp_dim(il, iadk, jdik, nc, max_a, max_l)
subroutine sp_static(nddl, iadk, jdik, diag_k, lt_k, iadm, jdim, nnzm, nc, jm, maxc, psi, ip)
integer function intab2(nic1, ic1, nic2, ic2)
subroutine imp_fsa_inv2hp(nddl, iadk, jdik, diag_k, lt_k, iadm, jdim, diag_m, lt_m, maxc, max_a, nne, idlft0, idlft1, max_d, d_tol, p_mach)
subroutine imp_fsa_invh2(nddl, iadk, jdik, diag_k, lt_k, iadm, jdim, diag_m, lt_m, maxc, max_a, nne, idlft0, idlft1, max_d, d_tol, p_mach, itask)
subroutine imp_fsa_invhp(nddl, nnz, iadk, jdik, diag_k, lt_k, diag_m, lt_m, maxc, max_a, nne, idlft0, idlft1, max_d)
subroutine fsa_solv(nddl, nc, iadk, jdik, diag_k, lt_k, diag_m, lt_m, diag_c, lt_c, max_a, idlft0, idlft1, nne, i_chk, iadm, jdim, i)
subroutine imp_kfiltr(ndf, nd, iada, jdia, diag_a, lt_a, tol, e_ps, diag_k)
subroutine sp_a2(nddl, nc, jm, maxc, ifsai)
subroutine get_subsn(nddl, iadk, jdik, diag_k, lt_k, nc, iada, jdia, diag_a, lt_a, jm, maxa)
subroutine imp_fsa_inv2(nddl, iadk, jdik, diag_k, lt_k, iadm, jdim, diag_m, lt_m, maxc, max_a, nne, d_tol, p_mach)
subroutine prec0_solv(nddl, nnz, iadm, jdim, diag_m, lt_m, v, z)
subroutine produt_v0(nddl, x, y, r)
subroutine cp_real(n, x, xc)
subroutine mav_lt(nddl, nnz, iadl, jdil, diag_k, lt_k, v, w)
subroutine cp_int(n, x, xc)
subroutine sms_fsa_invh(nnzm, iadm, jdim, diag_m, lt_m, nndft0, nndft1, itask, diag_inv)
subroutine ancmsg(msgid, msgtype, anmode, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, r1, r2, r3, r4, r5, r6, r7, r8, r9, c1, c2, c3, c4, c5, c6, c7, c8, c9, prmode)