25!||--- called by ------------------------------------------------------
33!||====================================================================
38#include "implicit_f.inc"
42 INTEGER IL, IADK(*) ,JDIK(*),NC,JM(*)
50 DO k =iadk(il),iadk(il+1)-1
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 ,MAXC,IADK(*) ,JDIK(*)
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
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
251!||====================================================================
252!|| imp_fsai ../engine/source/implicit/imp_fsa_inv.F
253!||--- called by ------------------------------------------------------
254!|| fsa_solv ../engine/source/implicit/imp_fsa_inv.F
255!|| imp_fsa_inv2 ../engine/source/implicit/imp_fsa_inv.F
256!|| imp_fsa_invh ../engine/source/implicit/imp_fsa_inv.F
257!|| imp_fsa_invh2 ../engine/source/implicit/imp_fsa_inv.F
258!|| imp_fsa_invp ../engine/source/implicit/imp_fsa_inv.F
259!|| imp_fsa_invp2 ../engine/source/implicit/imp_fsa_inv.F
260!|| sms_fsa_invh ../engine/source/ams/sms_fsa_inv.F
261!||--- calls -----------------------------------------------------
262!|| imp_fac_icj ../engine/source/implicit/imp_fac_ic.F
263!|| prec0_solv ../engine/source/implicit/prec_solv.F
264!||====================================================================
265 SUBROUTINE IMP_FSAI(N ,IADA ,JDIA ,DIAG_A ,LT_A,
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 ,
292 CALL PREC0_SOLV(N ,NNZL ,IADL ,JDIL ,DIAG_L ,
302!||====================================================================
303!|| get_subs0 ../engine/source/implicit/imp_fsa_inv.F
304!||--- called by ------------------------------------------------------
305!|| imp_fsa_inv2 ../engine/source/implicit/imp_fsa_inv.F
306!||--- calls -----------------------------------------------------
307!|| ind_lt2ln ../engine/source/implicit/imp_fsa_inv.F
308!|| intab0 ../engine/source/implicit/imp_fsa_inv.F
309!||====================================================================
310 SUBROUTINE GET_SUBS0(NDDL ,IADK ,JDIK ,DIAG_K ,LT_K ,
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 )
356!||====================================================================
357!|| get_subsp ../engine/source/implicit/imp_fsa_inv.F
358!||--- called by ------------------------------------------------------
359!|| fsa_solv ../engine/source/implicit/imp_fsa_inv.F
360!|| imp_fsa_invh ../engine/source/implicit/imp_fsa_inv.F
361!|| imp_fsa_invh2 ../engine/source/implicit/imp_fsa_inv.F
362!|| imp_fsa_invp ../engine/source/implicit/imp_fsa_inv.F
363!|| imp_fsa_invp2 ../engine/source/implicit/imp_fsa_inv.F
364!||--- calls -----------------------------------------------------
365!|| ind_lt2ln ../engine/source/implicit/imp_fsa_inv.F
366!|| intab0 ../engine/source/implicit/imp_fsa_inv.F
367!||====================================================================
368 SUBROUTINE GET_SUBSP(NDDL ,IADK ,JDIK ,DIAG_K ,LT_K ,
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,IDLFT0,IDLFT1
383 . LT_K(*),DIAG_K(*),LT_A(*),DIAG_A(*),LT_C(*),DIAG_C(*),
393 INTEGER I,J,K,JJ,NNZA,N,K0
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 )
445!||====================================================================
446!|| get_subsa ../engine/source/implicit/imp_fsa_inv.F
447!||--- calls -----------------------------------------------------
448!|| intab0 ../engine/source/implicit/imp_fsa_inv.F
449!||====================================================================
450 SUBROUTINE GET_SUBSA(NDDL ,IADK ,JDIK ,DIAG_K ,LT_K ,
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(*)
473 INTEGER I,J,K,JJ,NNZA,N
480 DO K=IADK(J),IADK(J+1)-1
494!||====================================================================
495!|| intab0 ../engine/source/implicit/imp_fsa_inv.F
496!||--- called by ------------------------------------------------------
497!|| dim_subnz ../engine/source/implicit/imp_solv.F
498!|| get_kijs ../engine/source/implicit/imp_pc_inv.F
499!|| get_subs0 ../engine/source/implicit/imp_fsa_inv.F
500!|| get_subsa ../engine/source/implicit/imp_fsa_inv.F
501!|| get_subsn ../engine/source/implicit/imp_fsa_inv.F
502!|| get_subsp ../engine/source/implicit/imp_fsa_inv.F
503!|| get_subsp_sms ../engine/source/ams/sms_fsa_inv.F
504!|| intab2 ../engine/source/implicit/imp_fsa_inv.F
505!|| spc_fr_k ../engine/source/mpi/implicit/imp_fri.F
506!|| upd_fr_k ../engine/source/mpi/implicit/imp_fri.F
507!||====================================================================
508 INTEGER FUNCTION INTAB0(NIC,IC,N)
512#include "implicit_f.inc"
523.OR.
IF (N<IC(1)N>IC(NIC)) RETURN
542!||====================================================================
543!|| intab2 ../engine/source/implicit/imp_fsa_inv.F
544!||--- called by ------------------------------------------------------
545!|| get_suba ../engine/source/implicit/imp_pc_inv.F
546!|| sp_a2 ../engine/source/implicit/imp_fsa_inv.F
547!||--- calls -----------------------------------------------------
548!|| intab0 ../engine/source/implicit/imp_fsa_inv.F
549!||====================================================================
550 INTEGER FUNCTION INTAB2(NIC1,IC1,NIC2,IC2)
554#include "implicit_f.inc"
558 INTEGER NIC1,IC1(*),NIC2,IC2(*)
570.OR.
IF (IC1(NIC1)<IC2(1)IC2(NIC2)<IC1(1)) RETURN
573 INTAB2=INTAB0(NIC1,IC1,IC2(I))
579!||====================================================================
580!|| imp_fsa_invp ../engine/source/implicit/imp_fsa_inv.F
581!||--- calls -----------------------------------------------------
582!|| ancmsg ../engine/source/output/message/message.F
583!|| arret ../engine/source/system/arret.F
584!|| get_subsp ../engine/source/implicit/imp_fsa_inv.F
585!|| imp_fsai ../engine/source/implicit/imp_fsa_inv.F
586!|| imp_pcg1 ../engine/source/implicit/imp_fsa_inv.F
587!|| sp_stat0 ../engine/source/implicit/imp_fsa_inv.F
588!||--- uses -----------------------------------------------------
589!|| message_mod ../engine/share/message_module/message_mod.F
590!||====================================================================
591 SUBROUTINE IMP_FSA_INVP(
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.AND.
IF (I_CHK>0IERR<0) NNE = I
655 MAX_L=1+(NC*(NC-1))/2
656 CALL IMP_FSAI(NC ,IADA ,JDIA ,DIAG_A ,LT_A ,
661 IF (DIAG_M(I)<EM20) THEN
662.AND.
IF (NNE==0I_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.AND.
IF (I_CHK>0MJ(NC)<EM20) DIAG_M(I)=MJ(NC)
676!||====================================================================
677!|| imp_pcg1 ../engine/source/implicit/imp_fsa_inv.F
678!||--- called by ------------------------------------------------------
679!|| fsa_solv ../engine/source/implicit/imp_fsa_inv.F
680!|| imp_fsa_inv2 ../engine/source/implicit/imp_fsa_inv.F
681!|| imp_fsa_invh ../engine/source/implicit/imp_fsa_inv.F
682!|| imp_fsa_invh2 ../engine/source/implicit/imp_fsa_inv.F
683!|| imp_fsa_invp ../engine/source/implicit/imp_fsa_inv.F
684!|| imp_fsa_invp2 ../engine/source/implicit/imp_fsa_inv.F
685!||--- calls -----------------------------------------------------
686!|| crit_stop ../engine/source/implicit/imp_pcg.F
687!|| mav_lt ../engine/source/implicit/produt_v.F
688!|| produt_v0 ../engine/source/implicit/produt_v.F
689!||====================================================================
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)
752 CALL PRODUT_V0(NDDL,R,Z,G0)
754 1 NDDL ,NNZ ,IADK ,JDIK ,DIAG_K,
756 CALL PRODUT_V0(NDDL,P,Y,S)
760 CALL PRODUT_V0(NDDL,R,R,R02)
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)
793 CALL PRODUT_V0(NDDL,R,Z,G1)
796 CALL PRODUT_V0(NDDL,R,R,R2)
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,
828 CALL PRODUT_V0(NDDL,P,Y,S)
831 X(I) = X(I) + ALPHA*P(I)
832 R(I) = R(I) - ALPHA*Y(I)
835 Z(I) = R(I) *DIAG_M(I)
837 CALL PRODUT_V0(NDDL,R,Z,G1)
841 CALL PRODUT_V0(NDDL,R,R,R2)
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)
903 1002 FORMAT(3X,'total c.g. iteration=
',I8,5X,
904 . ' relative residual
norm=
',E11.4)
906 . '---warning :
the iteration limit number was reached
',
907 . 1X,'in preconditioner
')
910!||====================================================================
911!|| imp_fsa_inv2 ../engine/source/implicit/imp_fsa_inv.F
912!||--- calls -----------------------------------------------------
913!|| ancmsg ../engine/source/output/message/message.F
914!|| arret ../engine/source/system/arret.F
915!|| get_subs0 ../engine/source/implicit/imp_fsa_inv.F
916!|| imp_fsai ../engine/source/implicit/imp_fsa_inv.F
917!|| imp_kfiltr ../engine/source/implicit/imp_fsa_inv.F
918!|| imp_pcg1 ../engine/source/implicit/imp_fsa_inv.F
919!|| sp_stat0 ../engine/source/implicit/imp_fsa_inv.F
920!||--- uses -----------------------------------------------------
921!|| message_mod ../engine/share/message_module/message_mod.F
922!||====================================================================
923 SUBROUTINE IMP_FSA_INV2(
924 1 NDDL ,IADK ,JDIK ,DIAG_K ,LT_K ,
925 2 IADM ,JDIM ,DIAG_M ,LT_M ,MAXC ,
926 3 MAX_A ,NNE ,D_TOL ,P_MACH)
934#include "implicit_f.inc"
938 INTEGER NDDL ,IADK(*),JDIK(*),MAXC ,MAX_A ,NNE,
942 . DIAG_K(*), LT_K(*),DIAG_M(*), LT_M(*) ,D_TOL ,P_MACH
947 INTEGER I,J,K,M,N,NC,IERR
949 INTEGER, DIMENSION(:),ALLOCATABLE :: IADA,JDIA,JM
950 my_real, DIMENSION(:),ALLOCATABLE :: DIAG_A,LT_A,MJ
954 ALLOCATE(IADA(MAXC+1))
955 ALLOCATE(JDIA(MAX_A))
957 ALLOCATE(DIAG_A(MAXC))
959 ALLOCATE(LT_A(MAX_A),STAT=IERR)
961 CALL ANCMSG(MSGID=19,ANMODE=ANINFO,
962 . C1='for IMPLICIT precondition
')
966 CALL SP_STAT0(I ,IADM ,JDIM ,NC ,JM )
967 CALL GET_SUBS0(NDDL ,IADK ,JDIK ,DIAG_K ,LT_K ,
968 . NC ,IADA ,JDIA ,DIAG_A ,LT_A ,
977 1 NC ,MAX_L ,IADA ,JDIA ,DIAG_A ,
979.AND.
IF (I_CHK>0IERR<0) NNE = I
981 MAX_L=1+(NC*(NC-1))/2
982 CALL IMP_FSAI(NC ,IADA ,JDIA ,DIAG_A ,LT_A ,
987 IF (DIAG_M(I)<EM20) THEN
988.AND.
IF (NNE==0I_CHK==0) NNE = I
989 DIAG_M(I)=ABS(DIAG_M(I))
990 DIAG_M(I)=MAX(EM20,DIAG_M(I))
994 LT_M(M)=MJ(K)/DIAG_M(I)
996.AND.
IF (I_CHK>0MJ(NC)<EM20) DIAG_M(I)=MJ(NC)
999 DEALLOCATE(IADA,JDIA)
1001 DEALLOCATE(DIAG_A,LT_A)
1005 . CALL IMP_KFILTR(K ,NDDL ,IADM ,JDIM ,DIAG_M ,
1006 . LT_M ,D_TOL ,P_MACH,DIAG_K)
1010!||====================================================================
1011!|| imp_fsa_invp2 ../engine/source/implicit/imp_fsa_inv.F
1012!||--- calls -----------------------------------------------------
1013!|| ancmsg ../engine/source/output/message/message.F
1014!|| arret ../engine/source/system/arret.F
1015!|| get_subsp ../engine/source/implicit/imp_fsa_inv.F
1016!|| imp_fsai ../engine/source/implicit/imp_fsa_inv.F
1017!|| imp_kfiltr ../engine/source/implicit/imp_fsa_inv.F
1018!|| imp_pcg1 ../engine/source/implicit/imp_fsa_inv.F
1019!|| sp_stat0 ../engine/source/implicit/imp_fsa_inv.F
1020!||--- uses -----------------------------------------------------
1021!|| message_mod ../engine/share/message_module/message_mod.F
1022!||====================================================================
1023 SUBROUTINE IMP_FSA_INVP2(
1024 1 NDDL ,IADK ,JDIK ,DIAG_K ,LT_K ,
1025 2 IADM ,JDIM ,DIAG_M ,LT_M ,MAXC ,
1026 3 MAX_A ,NNE ,IDLFT0 ,IDLFT1 ,MAX_D ,
1035#include "implicit_f.inc"
1039 INTEGER NDDL ,NNZ ,IADK(*),JDIK(*),MAXC ,MAX_A ,NNE,
1040 . IDLFT0 ,IDLFT1,MAX_D,IADM(*),JDIM(*)
1043 . DIAG_K(*), LT_K(*),DIAG_M(*), LT_M(*),D_TOL ,P_MACH
1048 INTEGER I,J,K,M,N,NC,IADA(MAXC+1),JDIA(MAX_A),JM(MAXC+1)
1049 INTEGER MAX_L,IERR,I_CHK
1051 . DIAG_A(MAXC),MJ(MAXC),
1052 . DIAG_C(NDDL-IDLFT1+1),LT_C(MAX_D+1)
1053 my_real, DIMENSION(:),ALLOCATABLE :: LT_A
1055 ALLOCATE(LT_A(MAX_A),STAT=IERR)
1057 CALL ANCMSG(MSGID=19,ANMODE=ANINFO,
1058 . C1='for IMPLICIT precondition
')
1066 DIAG_C(I-IDLFT1) = DIAG_M(I)
1067 DO J=IADK(I),IADK(I+1)-1
1072 CALL SP_STAT0(I ,IADM ,JDIM ,NC ,JM )
1073 CALL GET_SUBSP(NDDL ,IADK ,JDIK ,DIAG_K ,LT_K ,
1074 . NC ,IADA ,JDIA ,DIAG_A ,LT_A ,
1075 . JM ,MAX_A ,IDLFT0,IDLFT1 ,DIAG_C,
1076 . LT_C ,DIAG_M,LT_M )
1084 1 NC ,MAX_L ,IADA ,JDIA ,DIAG_A ,
1086.AND.
IF (I_CHK>0IERR<0) NNE = I
1088 MAX_L=1+(NC*(NC-1))/2
1089 CALL IMP_FSAI(NC ,IADA ,JDIA ,DIAG_A ,LT_A ,
1094 IF (DIAG_M(I)<EM20) THEN
1095.AND.
IF (NNE==0I_CHK==0) NNE = I
1096 DIAG_M(I)=ABS(DIAG_M(I))
1097 DIAG_M(I)=MAX(EM20,DIAG_M(I))
1101 LT_M(M)=MJ(K)/DIAG_M(I)
1103.AND.
IF (I_CHK>0MJ(NC)<EM20) DIAG_M(I)=MJ(NC)
1109 . CALL IMP_KFILTR(K ,NDDL ,IADM ,JDIM ,DIAG_M ,
1110 . LT_M ,D_TOL ,P_MACH,DIAG_K)
1114!||====================================================================
1115!|| imp_kfiltr ../engine/source/implicit/imp_fsa_inv.F
1116!||--- called by ------------------------------------------------------
1117!|| imp_fsa_inv2 ../engine/source/implicit/imp_fsa_inv.F
1118!|| imp_fsa_inv2hp ../engine/source/implicit/imp_fsa_inv.F
1119!|| imp_fsa_invh2 ../engine/source/implicit/imp_fsa_inv.F
1120!|| imp_fsa_invp2 ../engine/source/implicit/imp_fsa_inv.F
1121!||--- calls -----------------------------------------------------
1122!|| ancmsg ../engine/source/output/message/message.F
1123!|| arret ../engine/source/system/arret.F
1124!|| cp_int ../engine/source/implicit/produt_v.F
1125!|| cp_real ../engine/source/implicit/produt_v.F
1126!||--- uses -----------------------------------------------------
1127!|| message_mod ../engine/share/message_module/message_mod.F
1128!||====================================================================
1129 SUBROUTINE IMP_KFILTR(NDF ,ND ,IADA ,JDIA ,DIAG_A ,
1130 . LT_A ,TOL ,E_PS ,DIAG_K )
1138#include "implicit_f.inc"
1142 INTEGER NDF,ND ,IADA(*) ,JDIA(*)
1145 . DIAG_A(*),LT_A(*),TOL,E_PS,DIAG_K(*)
1149 INTEGER I,J,K,NZ,IERR,MNZ,INORM
1150 INTEGER, DIMENSION(:),ALLOCATABLE :: IADL,JDIL
1152 . MIN_D,MAX_D,MTOL,DD,TAUX
1153 my_real, DIMENSION(:),ALLOCATABLE :: LT_L
1155 print *,'d_tol,p_mach=
',tol,e_ps
1156 NZ = IADA(ND+1)-IADA(1)
1159 DO J = IADA(I), IADA(I+1)-1
1164.AND.
IF (NZ>0TOL>ZERO) THEN
1165 ALLOCATE(IADL(ND+1))
1166 ALLOCATE(JDIL(NZ),LT_L(NZ),STAT=IERR)
1168 CALL ANCMSG(MSGID=19,ANMODE=ANINFO,
1169 . C1='for IMPLICIT precondition
')
1173 CALL CP_INT(ND+1,IADA,IADL)
1174 CALL CP_INT(NZ,JDIA,JDIL)
1175 CALL CP_REAL(NZ,LT_A,LT_L)
1179 MAX_D = MAX(MAX_D,DIAG_A(I))
1180 MIN_D = MIN(MIN_D,DIAG_A(I))
1182 print *,'max_d,min_d=
',max_d,min_d
1188 DO J = IADL(I), IADL(I+1)-1
1189 MTOL = TOL*MIN(DIAG_A(JDIL(J)),DIAG_A(I))
1190 MTOL = MAX(E_PS,MTOL)
1191 IF (ABS(LT_L(J))>MTOL) THEN
1199 DEALLOCATE(IADL,JDIL)
1203 print *,'filtrage factor=
',TAUX
1207 IF (INORM>ZERO) THEN
1209 DIAG_A(I) = DIAG_A(I)/DIAG_K(I)
1210 DO J = IADA(I), IADA(I+1)-1
1211 DD = SQRT(DIAG_K(I)/DIAG_K(JDIA(J)))
1212 LT_A(J) = DD*LT_A(J)
1219!||====================================================================
1220!|| get_subsn ../engine/source/implicit/imp_fsa_inv.F
1221!||--- calls -----------------------------------------------------
1222!|| ind_lt2ln ../engine/source/implicit/imp_fsa_inv.F
1223!|| intab0 ../engine/source/implicit/imp_fsa_inv.F
1224!||====================================================================
1225 SUBROUTINE GET_SUBSN(NDDL ,IADK ,JDIK ,DIAG_K ,LT_K ,
1226 . NC ,IADA ,JDIA ,DIAG_A ,LT_A ,
1231#include "implicit_f.inc"
1235 INTEGER NDDL ,IADK(*) ,JDIK(*),IADA(*) ,JDIA(*)
1236 INTEGER NC ,JM(*),MAXA
1239 . LT_K(*),DIAG_K(*),LT_A(*),DIAG_A(*)
1248 INTEGER I,J,K,JJ,NNZA,N
1257 DO K=IADK(J),IADK(J+1)-1
1261 DD = SQRT(DIAG_K(J)*DIAG_K(JJ))
1264 LT_A(NNZA)=LT_K(K)/DD
1269 CALL IND_LT2LN(NC,IADA ,JDIA ,LT_A, NNZA )
1273!||====================================================================
1274!|| ind_lt2ln ../engine/source/implicit/imp_fsa_inv.F
1275!||--- called by ------------------------------------------------------
1276!|| get_subs0 ../engine/source/implicit/imp_fsa_inv.F
1277!|| get_subsn ../engine/source/implicit/imp_fsa_inv.F
1278!|| get_subsp ../engine/source/implicit/imp_fsa_inv.F
1279!|| get_subsp_sms ../engine/source/ams/sms_fsa_inv.F
1280!||--- calls -----------------------------------------------------
1281!|| cp_int ../engine/source/implicit/produt_v.F
1282!|| cp_real ../engine/source/implicit/produt_v.F
1283!||====================================================================
1284 SUBROUTINE IND_LT2LN(NDDL,IADK ,JDIK ,LT_K, MAXL )
1289#include "implicit_f.inc"
1293 INTEGER NDDL, IADK(*),JDIK(*),MAXL
1300 INTEGER IADM(NDDL+1),JDIM(MAXL),ICOL(NDDL)
1301 INTEGER I,JD,J,K,N,NM
1305 CALL CP_INT(NDDL+1,IADK,IADM)
1306 CALL CP_INT(MAXL,JDIK,JDIM)
1307 CALL CP_REAL(MAXL,LT_K,LT_M)
1311 DO J = IADM(I),IADM(I+1)-1
1313 ICOL(JD) = ICOL(JD) + 1
1319 IADK(I+1) = IADK(I)+ICOL(I)
1324 DO J=IADM(I),IADM(I+1)-1
1326 K = IADK(JD) + ICOL(JD)
1329 ICOL(JD) = ICOL(JD) + 1
1336!||====================================================================
1337!|| imp_fsa_invh ../engine/source/implicit/imp_fsa_inv.F
1338!||--- calls -----------------------------------------------------
1339!|| ancmsg ../engine/source/output/message/message.F
1340!|| arret ../engine/source/system/arret.F
1341!|| get_subsp ../engine/source/implicit/imp_fsa_inv.F
1342!|| imp_fsai ../engine/source/implicit/imp_fsa_inv.F
1343!|| imp_pcg1 ../engine/source/implicit/imp_fsa_inv.F
1344!|| my_barrier ../engine/source/system/machine.F
1345!|| sp_stat0 ../engine/source/implicit/imp_fsa_inv.F
1346!||--- uses -----------------------------------------------------
1347!|| message_mod ../engine/share/message_module/message_mod.F
1348!||====================================================================
1349 SUBROUTINE IMP_FSA_INVH(
1350 1 NDDL ,NNZ ,IADK ,JDIK ,DIAG_K ,
1351 2 LT_K ,DIAG_M ,LT_M ,MAXC ,MAX_A ,
1352 3 NNE ,IDLFT0 ,IDLFT1,MAX_D ,ITASK )
1360#include "implicit_f.inc"
1364 INTEGER NDDL ,NNZ ,IADK(*),JDIK(*),MAXC ,MAX_A ,NNE,
1365 . IDLFT0 ,IDLFT1,MAX_D,ITASK
1368 . DIAG_K(*), LT_K(*),DIAG_M(*), LT_M(*)
1373 INTEGER I,J,K,M,N,NC,MAX_L,IERR,I_CHK,IER1,
1376 . DIAG_C(NDDL-IDLFT1+1),LT_C(MAX_D+1)
1377 INTEGER, DIMENSION(:),ALLOCATABLE :: IADA,JDIA
1378 my_real, DIMENSION(:),ALLOCATABLE :: DIAG_A,LT_A,MJ
1382 IF ((IDLFT0+1)>NDDL) RETURN
1384 ALLOCATE(IADA(MAXC+1),DIAG_A(MAXC),MJ(MAXC),STAT=IER1)
1385 ALLOCATE(LT_A(MAX_A),JDIA(MAX_A),STAT=IERR)
1387 IF ((IERR+IER1)/=0) THEN
1388 IF (ITASK == 0 ) THEN
1389 CALL ANCMSG(MSGID=19,ANMODE=ANINFO,
1390 . C1='for IMPLICIT precondition
')
1392 END IF !(ITASK == 0 ) THEN
1398 DIAG_C(I-IDLFT1) = DIAG_M(I)
1399 DO J=IADK(I),IADK(I+1)-1
1409!$OMP DO SCHEDULE(DYNAMIC,1)
1411 CALL SP_STAT0(I ,IADK ,JDIK ,NC ,JM )
1412 CALL GET_SUBSP(NDDL ,IADK ,JDIK ,DIAG_K ,LT_K ,
1413 . NC ,IADA ,JDIA ,DIAG_A ,LT_A ,
1414 . JM ,MAX_A ,IDLFT0,IDLFT1 ,DIAG_C,
1415 . LT_C ,DIAG_M ,LT_M )
1424 1 NC ,MAX_L ,IADA ,JDIA ,DIAG_A ,
1427.AND.
IF (I_CHK>0IERR<0) NNE = I
1430 MAX_L=1+(NC*(NC-1))/2
1431 CALL IMP_FSAI(NC ,IADA ,JDIA ,DIAG_A ,LT_A ,
1437 IF (DIAG_M(I)<EM20) THEN
1438.AND.
IF (NNE==0I_CHK==0) NNE = I
1439 DIAG_M(I)=ABS(DIAG_M(I))
1440 DIAG_M(I)=MAX(EM20,DIAG_M(I))
1444 LT_M(M)=MJ(K)/DIAG_M(I)
1447.AND.
IF (I_CHK>0MJ(NC)<EM20) DIAG_M(I)=MJ(NC)
1452 DEALLOCATE(IADA,DIAG_A,MJ)
1453 DEALLOCATE(LT_A,JDIA)
1457!||====================================================================
1458!|| imp_fsa_invh2 ../engine/source/implicit/imp_fsa_inv.F
1459!||--- calls -----------------------------------------------------
1460!|| ancmsg ../engine/source/output/message/message.F
1461!|| arret ../engine/source/system/arret.F
1462!|| get_subsp ../engine/source/implicit/imp_fsa_inv.F
1463!|| imp_fsai ../engine/source/implicit/imp_fsa_inv.F
1464!|| imp_kfiltr ../engine/source/implicit/imp_fsa_inv.F
1465!|| imp_pcg1 ../engine/source/implicit/imp_fsa_inv.F
1466!|| my_barrier ../engine/source/system/machine.F
1467!|| sp_stat0 ../engine/source/implicit/imp_fsa_inv.F
1468!||--- uses -----------------------------------------------------
1469!|| message_mod ../engine/share/message_module/message_mod.F
1470!||====================================================================
1471 SUBROUTINE IMP_FSA_INVH2(
1472 1 NDDL ,IADK ,JDIK ,DIAG_K ,LT_K ,
1473 2 IADM ,JDIM ,DIAG_M ,LT_M ,MAXC ,
1474 3 MAX_A ,NNE ,IDLFT0 ,IDLFT1 ,MAX_D ,
1475 4 D_TOL ,P_MACH ,ITASK )
1483#include "implicit_f.inc"
1487 INTEGER NDDL ,NNZ ,IADK(*),JDIK(*),MAXC ,MAX_A ,NNE,
1488 . IDLFT0 ,IDLFT1,MAX_D,IADM(*),JDIM(*),ITASK
1491 . DIAG_K(*), LT_K(*),DIAG_M(*), LT_M(*),D_TOL ,P_MACH
1496 INTEGER I,J,K,M,N,NC,MAX_L,IERR,I_CHK,IER1,
1499 . DIAG_C(NDDL-IDLFT1+1),LT_C(MAX_D+1)
1500 INTEGER, DIMENSION(:),ALLOCATABLE :: IADA,JDIA
1501 my_real, DIMENSION(:),ALLOCATABLE :: DIAG_A,LT_A,MJ
1505 IF ((IDLFT0+1)>NDDL) RETURN
1507 ALLOCATE(IADA(MAXC+1),DIAG_A(MAXC),MJ(MAXC),STAT=IER1)
1508 ALLOCATE(LT_A(MAX_A),JDIA(MAX_A),STAT=IERR)
1510 IF ((IERR+IER1)/=0) THEN
1511 IF (ITASK == 0 ) THEN
1512 CALL ANCMSG(MSGID=19,ANMODE=ANINFO,
1513 . C1='for IMPLICIT precondition
')
1515 END IF !(ITASK == 0 ) THEN
1520 DIAG_C(I-IDLFT1) = DIAG_M(I)
1521 DO J=IADK(I),IADK(I+1)-1
1530!$OMP DO SCHEDULE(DYNAMIC,1)
1532 CALL SP_STAT0(I ,IADM ,JDIM ,NC ,JM )
1533 CALL GET_SUBSP(NDDL ,IADK ,JDIK ,DIAG_K ,LT_K ,
1534 . NC ,IADA ,JDIA ,DIAG_A ,LT_A ,
1535 . JM ,MAX_A ,IDLFT0,IDLFT1 ,DIAG_C,
1536 . LT_C ,DIAG_M,LT_M )
1544 1 NC ,MAX_L ,IADA ,JDIA ,DIAG_A ,
1546.AND.
IF (I_CHK>0IERR<0) NNE = I
1548 MAX_L=1+(NC*(NC-1))/2
1549 CALL IMP_FSAI(NC ,IADA ,JDIA ,DIAG_A ,LT_A ,
1554 IF (DIAG_M(I)<EM20) THEN
1555.AND.
IF (NNE==0I_CHK==0) NNE = I
1556 DIAG_M(I)=ABS(DIAG_M(I))
1557 DIAG_M(I)=MAX(EM20,DIAG_M(I))
1561 LT_M(M)=MJ(K)/DIAG_M(I)
1564.AND.
IF (I_CHK>0MJ(NC)<EM20) DIAG_M(I)=MJ(NC)
1569 DEALLOCATE(IADA,DIAG_A,MJ)
1570 DEALLOCATE(LT_A,JDIA)
1572 IF (ITASK == 0 ) THEN
1575 . CALL IMP_KFILTR(K ,NDDL ,IADM ,JDIM ,DIAG_M ,
1576 . LT_M ,D_TOL ,P_MACH,DIAG_K)
1581!||====================================================================
1582!|| sp_dim ../engine/source/implicit/imp_fsa_inv.F
1583!||--- called by ------------------------------------------------------
1584!|| imp_fsa_inv2hp ../engine/source/implicit/imp_fsa_inv.F
1585!|| imp_fsa_invhp ../engine/source/implicit/imp_fsa_inv.F
1586!||====================================================================
1587 SUBROUTINE SP_DIM(IL ,IADK ,JDIK ,NC ,MAX_A ,MAX_L )
1591#include "implicit_f.inc"
1595 INTEGER IL, IADK(*) ,JDIK(*),NC,MAX_A ,MAX_L
1603 DO K =IADK(IL),IADK(IL+1)-1
1608 IF (NC <= 10000) THEN
1609 MAX_L = 1+(NC*(NC-1))/2
1616!||====================================================================
1617!|| fsa_solv ../engine/source/implicit/imp_fsa_inv.F
1618!||--- called by ------------------------------------------------------
1619!|| imp_fsa_inv2hp ../engine/source/implicit/imp_fsa_inv.F
1620!|| imp_fsa_invhp ../engine/source/implicit/imp_fsa_inv.F
1621!||--- calls -----------------------------------------------------
1622!|| get_subsp ../engine/source/implicit/imp_fsa_inv.F
1623!|| imp_fsai ../engine/source/implicit/imp_fsa_inv.F
1624!|| imp_pcg1 ../engine/source/implicit/imp_fsa_inv.F
1625!||====================================================================
1626 SUBROUTINE FSA_SOLV(
1627 1 NDDL ,NC ,IADK ,JDIK ,DIAG_K ,
1628 2 LT_K ,DIAG_M,LT_M ,DIAG_C,LT_C ,
1629 3 MAX_A ,IDLFT0,IDLFT1,NNE ,I_CHK ,
1634#include "implicit_f.inc"
1638 INTEGER I,NDDL ,NC ,IADK(*),JDIK(*),MAX_A ,NNE,
1639 . IDLFT0,IDLFT1 ,I_CHK,IADM(*),JDIM(*)
1642 . DIAG_K(*), LT_K(*),DIAG_M(*), LT_M(*) ,DIAG_C(*),LT_C(*)
1647 INTEGER J,K,M,N,MAX_L,IERR,IER1,IADA(NC+1),JM(NC)
1651 INTEGER, DIMENSION(:),ALLOCATABLE :: JDIA
1652 my_real, DIMENSION(:),ALLOCATABLE :: DIAG_A,LT_A,MJ
1655 ALLOCATE(DIAG_A(NC),MJ(NC),STAT=IER1)
1656 ALLOCATE(LT_A(MAX_A),JDIA(MAX_A),STAT=IERR)
1659 DO K =IADM(I),IADM(I+1)-1
1666 CALL GET_SUBSP(NDDL ,IADK ,JDIK ,DIAG_K ,LT_K ,
1667 . NC ,IADA ,JDIA ,DIAG_A ,LT_A ,
1668 . JM ,MAX_A ,IDLFT0,IDLFT1 ,DIAG_C,
1669 . LT_C ,DIAG_M ,LT_M )
1675 IF (NC > 10000) THEN
1678 1 NC ,MAX_L ,IADA ,JDIA ,DIAG_A ,
1681.AND.
IF (I_CHK>0IERR<0) NNE = I
1684 MAX_L=1+(NC*(NC-1))/2
1685 CALL IMP_FSAI(NC ,IADA ,JDIA ,DIAG_A ,LT_A ,
1691 IF (DIAG_M(I)<EM20) THEN
1692.AND.
IF (NNE==0I_CHK==0) NNE = I
1693 DIAG_M(I)=ABS(DIAG_M(I))
1694 DIAG_M(I)=MAX(EM20,DIAG_M(I))
1698 LT_M(M)=MJ(K)/DIAG_M(I)
1700.AND.
IF (I_CHK>0MJ(NC)<EM20) DIAG_M(I)=MJ(NC)
1702 DEALLOCATE(DIAG_A,MJ)
1703 DEALLOCATE(LT_A,JDIA)
1707!||====================================================================
1708!|| imp_fsa_invhp ../engine/source/implicit/imp_fsa_inv.F
1709!||--- called by ------------------------------------------------------
1710!|| lin_solvh1 ../engine/source/implicit/lin_solv.F
1711!||--- calls -----------------------------------------------------
1712!|| fsa_solv ../engine/source/implicit/imp_fsa_inv.F
1713!|| my_barrier ../engine/source/system/machine.F
1714!|| omp_get_thread_num ../engine/source/engine/openmp_stub.F90
1715!|| sp_dim ../engine/source/implicit/imp_fsa_inv.F
1716!||--- uses -----------------------------------------------------
1717!|| message_mod ../engine/share/message_module/message_mod.F
1718!||====================================================================
1719 SUBROUTINE IMP_FSA_INVHP(
1720 1 NDDL ,NNZ ,IADK ,JDIK ,DIAG_K ,
1721 2 LT_K ,DIAG_M ,LT_M ,MAXC ,MAX_A ,
1722 3 NNE ,IDLFT0 ,IDLFT1,MAX_D )
1730#include "implicit_f.inc"
1734#include "task_c.inc"
1738 INTEGER NDDL ,NNZ ,IADK(*),JDIK(*),MAXC ,MAX_A ,NNE,
1739 . IDLFT0 ,IDLFT1,MAX_D
1742 . DIAG_K(*), LT_K(*),DIAG_M(*), LT_M(*)
1747 INTEGER I,J,K,M,N,NC,MAX_L,IERR,I_CHK,IER1,
1748 . ITSK,F_DDL,L_DDL,N1
1750 . DIAG_C(NDDL-IDLFT1+1),LT_C(MAX_D+1)
1751 INTEGER OMP_GET_THREAD_NUM
1752 EXTERNAL OMP_GET_THREAD_NUM
1756 IF ((IDLFT0+1)>NDDL) RETURN
1760!$OMP PARALLEL PRIVATE(ITSK,F_DDL,L_DDL,NC,MAX_L,I,J,N1)
1761 ITSK = OMP_GET_THREAD_NUM()
1763 F_DDL = IDLFT1+1+ITSK*N1/ NTHREAD
1764 L_DDL = IDLFT1+(ITSK+1)*N1/ NTHREAD
1770 DIAG_C(I-IDLFT1) = DIAG_M(I)
1771 DO J=IADK(I),IADK(I+1)-1
1781!$OMP DO SCHEDULE(DYNAMIC,1)
1783 CALL SP_DIM(I ,IADK ,JDIK ,NC ,MAX_A ,MAX_L )
1785 1 NDDL ,NC ,IADK ,JDIK ,DIAG_K ,
1786 2 LT_K ,DIAG_M,LT_M ,DIAG_C,LT_C ,
1787 3 MAX_L ,IDLFT0,IDLFT1,NNE ,I_CHK ,
1796!||====================================================================
1797!|| imp_fsa_inv2hp ../engine/source/implicit/imp_fsa_inv.F
1798!||--- called by ------------------------------------------------------
1799!|| lin_solvih2 ../engine/source/implicit/lin_solv.F
1800!||--- calls -----------------------------------------------------
1801!|| fsa_solv ../engine/source/implicit/imp_fsa_inv.F
1802!|| imp_kfiltr ../engine/source/implicit/imp_fsa_inv.F
1803!|| my_barrier ../engine/source/system/machine.F
1804!|| omp_get_thread_num ../engine/source/engine/openmp_stub.F90
1805!|| sp_dim ../engine/source/implicit/imp_fsa_inv.F
1806!||--- uses -----------------------------------------------------
1807!|| message_mod ../engine/share/message_module/message_mod.F
1808!||====================================================================
1809 SUBROUTINE IMP_FSA_INV2HP(
1810 1 NDDL ,IADK ,JDIK ,DIAG_K ,LT_K ,
1811 2 IADM ,JDIM ,DIAG_M ,LT_M ,MAXC ,
1812 3 MAX_A ,NNE ,IDLFT0 ,IDLFT1 ,MAX_D ,
1821#include "implicit_f.inc"
1825#include "task_c.inc"
1829 INTEGER NDDL ,NNZ ,IADK(*),JDIK(*),MAXC ,MAX_A ,NNE,
1830 . IDLFT0 ,IDLFT1,MAX_D,IADM(*),JDIM(*)
1833 . DIAG_K(*), LT_K(*),DIAG_M(*), LT_M(*),D_TOL ,P_MACH
1838 INTEGER I,J,K,M,N,NC,MAX_L,IERR,I_CHK,IER1,
1839 . ITSK,F_DDL,L_DDL,N1
1841 . DIAG_C(NDDL-IDLFT1+1),LT_C(MAX_D+1)
1842 INTEGER OMP_GET_THREAD_NUM
1843 EXTERNAL OMP_GET_THREAD_NUM
1847 IF ((IDLFT0+1)>NDDL) RETURN
1851!$OMP PARALLEL PRIVATE(ITSK,F_DDL,L_DDL,NC,MAX_L,N1,J,I)
1852 ITSK = OMP_GET_THREAD_NUM()
1854 F_DDL = IDLFT1+1+ITSK*N1/ NTHREAD
1855 L_DDL = IDLFT1+(ITSK+1)*N1/ NTHREAD
1857 DIAG_C(I-IDLFT1) = DIAG_M(I)
1858 DO J=IADK(I),IADK(I+1)-1
1867!$OMP DO SCHEDULE(DYNAMIC,1)
1869 CALL SP_DIM(I ,IADM ,JDIM ,NC ,MAX_A ,MAX_L )
1871 1 NDDL ,NC ,IADK ,JDIK ,DIAG_K ,
1872 2 LT_K ,DIAG_M,LT_M ,DIAG_C,LT_C ,
1873 3 MAX_L ,IDLFT0,IDLFT1,NNE ,I_CHK ,
1883 . CALL IMP_KFILTR(K ,NDDL ,IADM ,JDIM ,DIAG_M ,
1884 . LT_M ,D_TOL ,P_MACH,DIAG_K)
end diagonal values have been computed in the(sparse) matrix id.SOL
norm(diag(diag(diag(inv(mat))) -id.SOL), 2) % destroy mumps instance id.JOB
subroutine sp_stat0(il, iadk, jdik, nc, jm)
subroutine sp_static(nddl, iadk, jdik, diag_k, lt_k, iadm, jdim, nnzm, nc, jm, maxc, psi, ip)
subroutine sp_a2(nddl, nc, jm, maxc, ifsai)
for(i8=*sizetab-1;i8 >=0;i8--)