61 1 DR ,TOL ,NNZ ,IADK ,JDIK ,
62 2 DIAG_K,LT_K ,NDDLI ,IADI ,JDII ,
63 3 DIAG_I,LT_I ,ITOK ,IADM ,JDIM ,
64 4 DIAG_M,LT_M ,F ,F_U ,INLOC ,
65 5 FR_ELEM,IAD_ELEM,W_DDL,ITASK ,ICPREC,
67 7 MS ,XE ,IPARI ,INTBUF_TAB ,
68 8 NUM_IMP,NS_IMP,NE_IMP,NSREM ,NSL ,
69 9 IT ,GRAPHE,ITAB ,FAC_K ,IPIV_K,
70 A NK ,NMONV ,IMONV ,MONVOL,IGRSURF ,
71 B FR_MV ,VOLMON ,IBFV ,SKEW ,
72 C XFRAME ,MUMPS_PAR,CDDLP,IND_IMP,XI_C,
73 D IRBE3 ,LRBE3 ,IRBE2 ,LRBE2)
84#include "implicit_f.inc"
89#include "dmumps_struc.h"
95#include "timeri_c.inc"
102 INTEGER NDDL ,NNZ ,IADK(*),JDIK(*),IADM(*),JDIM(*),ITASK,
103 . NDOF(*),IDDL(*),IKC(*),ICPREC,ISTOP,
104 . NDDLI ,IADI(*),JDII(*),ITOK(*),INLOC(*),IBFV(*),
105 . FR_ELEM(*),IAD_ELEM(2,*),W_DDL(*),NSREM ,NSL,IT
106 INTEGER NE_IMP(*),IPARI(*) ,NUM_IMP(*),NS_IMP(*),
107 . ITAB(*), IPIV_K(*), NK,IND_IMP(*),IRBE3(*),LRBE3(*),
110 INTEGER NMONV,IMONV(*),MONVOL(*),FR_MV(*)
112 . DIAG_K(*),LT_K(*),DIAG_M(*),LT_M(*), F(*),TOL,
113 . DIAG_I(*),LT_I(*),D(3,*),DR(3,*),F_U, FAC_K(*)
115 . a(3,*),ar(3,*),ve(3,*),xe(3,*),ms(*),
116 . skew(*) ,xframe(*),volmon(*),xi_c(*)
122 TYPE(DMUMPS_STRUC) MUMPS_PAR
128 INTEGER OMP_GET_THREAD_NUM
129 EXTERNAL OMP_GET_THREAD_NUM
131 TYPE(intbuf_struct_) INTBUF_TAB(*)
132 TYPE (SURF_) ,
DIMENSION(NSURF) :: IGRSURF
156 INTEGER ,J,IPRINT,ITQ,F_DDL,L_DDL,F_DDLI,L_DDLI,,ITSK
158 . A2,QTOL,R2,IN_NZ,IN_ND
177 IF (nddli > 0.AND.isolv > 7)
THEN
185 IF (iqstat>1.AND.(ilintf==0.OR.ilintf==ncycle))
THEN
194 IF ((isolv<3.OR.isolv>6)
195 . .AND.(iprec>1.OR.intp_c>=0))
THEN
200 diag_t(j)=diag_t(j)+diag_i(i)
208 IF (insolv==2)
CALL bfgs_h1(f_ddl,l_ddl,w_ddl,f,a2,it,itsk)
210 IF (insolv==3)
CALL bfgs_h1p(f_ddl,l_ddl,w_ddl,f,a2,it,itsk)
221 IF (nspmd==1.AND.(isolv==3.OR.isolv==4).AND.imumpsv==0)
THEN
224 IF (idsc>0) it_bcs = it_bcs + 1
227 2 lt_k ,nddli ,itok ,iadi ,jdii ,
228 3 lt_i ,l_u ,f ,itask ,lprint ,
229 4 isolv ,istop ,graphe,itab ,insolv,
230 5 it ,fac_k ,ipiv_k,nk ,diag_i,
235 IF (isolv==3.OR.isolv==4)
THEN
237 IF (ispmd==0.AND.idsc>0) it_bcs = it_bcs + 1
238 CALL lin_solvp2(graphe, f, nddl, iad_elem, fr_elem,
239 1 diag_k, lt_k, iadk, jdik, l_u,
240 2 itab, iprint, nddli, iadi, jdii,
241 3 diag_i, lt_i, itok, insolv, it,
242 4 fac_k, ipiv_k, nk, mumps_par, cddlp,
243 5 isolv, idsc, iddl, ikc, inloc,
246 ELSEIF (isolv==5.OR.isolv==6)
THEN
247 IF (idsc>0.AND.itask==0) it_bcs = it_bcs + 1
249 1 nddl ,nnz ,iadk ,jdik ,diag_t ,
250 2 lt_k ,nddli ,itok ,iadi ,jdii ,
251 3 lt_i ,l_u ,f ,itask ,iprint ,
252 4 f_u ,isolv ,iprec ,l_lim ,itol ,
253 6 w_ddl ,a ,ar ,ve ,ms ,
254 9 xe ,d ,dr ,ndof ,ipari ,
255 a intbuf_tab ,num_imp,ns_imp,ne_imp,
256 b nsrem ,nsl ,p_mach ,istop ,nmonv ,
257 e imonv ,monvol ,igrsurf ,fr_mv ,
258 f volmon,ibfv ,skew ,xframe ,graphe,
259 g iad_elem,fr_elem,itab ,insolv ,it ,
260 h fac_k ,ipiv_k ,nk ,mumps_par,cddlp,
262 j iline ,ilintf,ind_imp,xi_c ,l_f0 ,
263 k nddli_g,intp_c,irbe3 ,lrbe3 ,irbe2 ,
264 l lrbe2 ,it_pcg ,imumpsv)
265 ELSEIF (n_pat>1)
THEN
267 1 nddl ,nnz ,iadk ,jdik ,diag_t ,
268 2 lt_k ,nddli ,itok ,iadi ,jdii ,
269 3 lt_i ,iadm ,jdim ,diag_m ,lt_m ,
270 4 l_u ,f ,max_l ,d_tol ,
271 4 itask ,icprec,iprint,f_u ,isolv ,
272 5 iprec ,l_lim ,itol ,inega ,w_ddl ,
273 7 a ,ar ,ve ,ms ,xe ,
274 8 d ,dr ,ndof ,ipari ,intbuf_tab,
275 9 num_imp,ns_imp,ne_imp,nsrem
276 a nsl ,p_mach,maxb ,istop ,nmonv ,
277 b imonv ,monvol,igrsurf ,fr_mv ,
278 c volmon,ibfv ,skew ,xframe ,ind_imp,
279 d diag_i,xi_c ,l_f0 ,nddli_g,intp_c,
280 e irbe3 ,lrbe3,irbe2 ,lrbe2 )
281 ELSEIF (iprec==1)
THEN
283 1 nddl ,nnz ,iadk ,jdik ,diag_t ,
284 2 lt_k ,nddli ,itok ,iadi ,jdii ,
285 3 lt_i ,l_u ,f ,itask ,iprint ,
286 4 f_u ,isolv ,iprec ,l_lim ,itol ,
287 6 w_ddl ,a ,ar ,ve ,ms ,
288 9 xe ,d ,dr ,ndof ,ipari ,
289 a intbuf_tab ,num_imp,ns_imp,ne_imp,
290 b nsrem ,nsl ,p_mach ,istop ,nmonv ,
291 e imonv ,monvol ,igrsurf,fr_mv ,
292 f volmon,ibfv ,skew ,xframe ,ind_imp,
293 g xi_c ,l_f0 ,nddli_g,intp_c ,irbe3 ,
294 h lrbe3 ,irbe2 ,lrbe2 )
295 ELSEIF (iprec>1.AND.iprec<10)
THEN
297 1 nddl ,nnz ,iadk ,jdik ,diag_t ,
298 2 lt_k ,nddli ,itok ,iadi ,jdii ,
299 3 lt_i ,diag_m,lt_m ,l_u ,f ,
300 4 itask ,icprec,iprint,f_u ,isolv ,
301 5 iprec ,l_lim ,itol ,inega ,w_ddl ,
302 6 a ,ar ,ve ,ms ,xe ,
303 7 d ,dr ,ndof ,ipari ,intbuf_tab,
304 8 num_imp,ns_imp,ne_imp,nsrem ,
305 9 nsl ,p_mach,maxb ,istop ,nmonv ,
306 c imonv ,monvol,igrsurf ,fr_mv ,
307 d volmon,ibfv ,skew ,xframe,ind_imp,
308 e diag_i,xi_c ,l_f0 ,nddli_g,intp_c,
309 f irbe3 ,lrbe3 ,irbe2 ,lrbe2 )
317 IF (imp_chk>0.OR.(istop>0.AND.impdeb==0))
GOTO 200
322 CALL bfgs_h2(f_ddl,l_ddl,w_ddl,l_u,l_f0,a2,it,n_lim,itsk)
324 ELSEIF (insolv==3)
THEN
325 CALL bfgs_h2p(f_ddl,l_ddl,w_ddl,l_u,l_f0,a2,it,n_lim,itsk)
331 IF (iqstat>1.AND.(ilintf==0.OR.ilintf==ncycle))
THEN
338 IF (r2>qtol.AND.itq<=iqstat)
THEN
346 r2 = em02*sqrt(r2/qtol)
347 WRITE(iout,1002)itq,r2
349 WRITE(istdo,1002)itq,r2
354 IF (iline>0.AND.lprint/=0.AND.(isolv==3.OR.isolv==4))
THEN
355 IF (ilintf==0.OR.ilintf==ncycle)
THEN
357 IF (imumpsv>0 .AND. nddli>0)
THEN
362 diag_t(j)=diag_t(j)+diag_i(i)
373 1 nddl ,nddli ,iadk ,jdik ,diag_t,
374 2 lt_k ,iadi ,jdii ,itok ,lt_i ,
376 5 ve ,ms ,xe ,d ,dr ,
377 6 ndof ,ipari ,intbuf_tab ,num_imp,
378 7 ns_imp,ne_imp,nsrem ,nsl ,ibfv ,
379 8 skew ,xframe,monvol,volmon,igrsurf ,
380 9 fr_mv,nmonv ,imonv ,ind_imp,
381 a xi_c ,itq ,irbe3 ,lrbe3 ,irbe2 ,
382 b lrbe2 ,f_ddl ,l_ddl ,itsk )
391 CALL produt_hp(nddl,l_f0,l_f0,w_ddl,qtol)
394 IF(iprint/=0)
WRITE(iout,1003)r2
395 IF(iprint<0)
WRITE(istdo,1003)r2
403 IF (nmonv>0.AND.iline==1)
THEN
406 IF (intp_c<0.AND.nddli>0)
THEN
409 CALL recudis(nddl ,iddl ,ndof ,ikc ,l_u ,
423 1001
FORMAT(3x,
'L_SOLVER : ISOLV =',i8,2x,
'ITOL =',i8,2x,
425 1002
FORMAT(/3x,
'NUM.QUASI-STATIC ITERATIONS=',i8,5x,
426 . ' relative ||r||=
',E11.4/)
427 1003 FORMAT(/3X,'direct solver terminated with relative ||r||=
',E11.4/)
433!||====================================================================
434!|| lin_solv2 ../engine/source/implicit/lin_solv.F
435!||--- called by ------------------------------------------------------
436!|| lin_solv ../engine/source/implicit/lin_solv.F
437!|| lin_solvhm ../engine/source/implicit/lin_solv.F
438!|| prec_solv ../engine/source/implicit/prec_solv.F
439!|| prec_solvh ../engine/source/implicit/prec_solv.F
440!||--- calls -----------------------------------------------------
441!|| imp_dsolv ../engine/source/implicit/imp_dsolv.F
442!|| imp_dsolv_iter ../engine/source/implicit/imp_dsolv.F
443!||--- uses -----------------------------------------------------
444!|| dsgraph_mod ../engine/share/modules/dsgraph_mod.F
445!||====================================================================
446 SUBROUTINE LIN_SOLV2(
447 1 NDDL ,NNZ ,IADK ,JDIK ,DIAG_K ,
448 2 LT_K ,NDDLI ,ITOK ,IADI ,JDII ,
449 3 LT_I ,X ,F ,ITASK ,IPRINT ,
450 4 ISOLV ,ISTOP ,GRAPHE,ITAB ,INSOLV,
451 5 IT ,FAC_K ,IPIV_K,NK ,DIAG_I,
460#include "implicit_f.inc"
464 INTEGER NDDL ,NNZ ,IADK(*),JDIK(*),ITASK,IPRINT,
465 . ISTOP,NDDLI,ITOK(*),IADI(*),JDII(*),
466 . ISOLV ,ITAB(*), INSOLV,IT, IPIV_K(*), NK, IDSC
469 . DIAG_K(*),LT_K(*),LT_I(*),X(*) ,F(*),
470 . FAC_K(*), DIAG_I(*)
471 TYPE(PRGRAPH) :: GRAPHE(*)
490 CALL IMP_DSOLV(GRAPHE, DIAG_K, LT_K, IADK, JDIK,
491 . NDDL, NF, F, X, ITAB,
492 . IPRINT, NDDLI, IADI, JDII, DIAG_I,
495 CALL IMP_DSOLV_ITER(GRAPHE, DIAG_K, LT_K, IADK, JDIK,
496 . NDDL, NF, F, X, ITAB,
497 . IT, FAC_K, IPIV_K, NK, IPRINT,
498 . NDDLI, IADI, JDII, DIAG_I, LT_I,
508!||====================================================================
509!|| lin_solvp2 ../engine/source/implicit/lin_solv.F
510!||--- called by ------------------------------------------------------
511!|| lin_solv ../engine/source/implicit/lin_solv.F
512!|| lin_solvhm ../engine/source/implicit/lin_solv.F
513!|| prec_solvh ../engine/source/implicit/prec_solv.F
514!|| prec_solvp ../engine/source/implicit/prec_solv.F
515!||--- calls -----------------------------------------------------
516!|| imp_dsfext ../engine/source/implicit/imp_dsfext.F
517!|| imp_dsolv ../engine/source/implicit/imp_dsolv.F
518!|| imp_dsolv_iter ../engine/source/implicit/imp_dsolv.F
519!|| imp_mumps2 ../engine/source/implicit/imp_mumps.F
520!|| mumpslb ../engine/source/implicit/lin_solv.F
521!||--- uses -----------------------------------------------------
522!|| dsgraph_mod ../engine/share/modules/dsgraph_mod.F
523!||====================================================================
524 SUBROUTINE LIN_SOLVP2(GRAPHE, F , NDDL , IAD_ELEM , FR_ELEM,
525 1 DIAG_K, LT_K , IADK , JDIK , X ,
526 2 ITAB , IPRINT, NDDLI, IADI , JDII ,
527 3 DIAG_I, LT_I , ITOK , INSOLV , IT ,
528 4 FAC_K , IPIV_K, NK , MUMPS_PAR, CDDLP ,
529 5 ISOLV , IDSC , IDDL , IKC , INLOC ,
538#include "implicit_f.inc"
543#include "dmumps_struc.h"
545#include "com04_c.inc"
549 INTEGER NDDL, IAD_ELEM(2,*), FR_ELEM(*), IADK(*), JDIK(*),
550 . ITAB(*), IPRINT, NDDLI, IADI(*), JDII(*), ITOK(*),
551 . INSOLV, IT, IPIV_K(*), NK, CDDLP(*), ISOLV, IDSC,
552 . IDDL(*), IKC(*), INLOC(*), NDOF(*), ITASK
554 . F(*), DIAG_K(*), LT_K(*), X(*), DIAG_I(*), LT_I(*),
556 TYPE(PRGRAPH) :: GRAPHE(*)
559 TYPE(DMUMPS_STRUC) MUMPS_PAR
561 ! Fake declaration as DMUMPS_STRUC is shipped with MUMPS
569 INTEGER NF, I, ITAG(NUMNOD), J
575 CALL MUMPSLB(F ,F1 , NDDL , IAD_ELEM , FR_ELEM,
576 1 IDDL , IKC , INLOC ,NDOF ,ITAG )
578 CALL IMP_MUMPS2(MUMPS_PAR, CDDLP, F1 , X, NDDL)
580 ELSEIF (ISOLV==4) THEN
584 CALL IMP_DSFEXT(GRAPHE , NF, F, NDDL, IAD_ELEM,
588 CALL IMP_DSOLV(GRAPHE, DIAG_K, LT_K, IADK, JDIK,
589 . NDDL, NF, F, X, ITAB,
590 . IPRINT, NDDLI, IADI, JDII, DIAG_I,
593 CALL IMP_DSOLV_ITER(GRAPHE, DIAG_K, LT_K, IADK, JDIK,
594 . NDDL, NF, F, X, ITAB,
595 . IT, FAC_K, IPIV_K, NK, IPRINT,
596 . NDDLI, IADI, JDII, DIAG_I, LT_I,
600 IF (INSOLV/=0) IDSC=0
606!||====================================================================
607!|| err_mem ../engine/source/implicit/lin_solv.F
608!||--- called by ------------------------------------------------------
609!|| imp_fac_icj ../engine/source/implicit/imp_fac_ic.F
610!||--- calls -----------------------------------------------------
611!|| ancmsg ../engine/source/output/message/message.F
612!|| arret ../engine/source/system/arret.F
613!||--- uses -----------------------------------------------------
614!|| message_mod ../engine/share/message_module/message_mod.F
615!||====================================================================
616 SUBROUTINE ERR_MEM(MEM)
624#include "implicit_f.inc"
625#include "comlock.inc"
635 CALL ANCMSG(MSGID=81,ANMODE=ANINFO,
640!||====================================================================
641!|| recu_kdis0 ../engine/source/implicit/lin_solv.F
642!||--- called by ------------------------------------------------------
643!|| lin_solv ../engine/source/implicit/lin_solv.F
644!||--- uses -----------------------------------------------------
645!|| imp_knon ../engine/share/modules/impbufdef_mod.F
646!||====================================================================
647 SUBROUTINE RECU_KDIS0(NDOF ,D )
655#include "implicit_f.inc"
681!||====================================================================
682!|| lin_solvh0 ../engine/source/implicit/lin_solv.F
683!||--- called by ------------------------------------------------------
684!|| lin_solv ../engine/source/implicit/lin_solv.F
685!||--- calls -----------------------------------------------------
686!|| imp_lanzp ../engine/source/implicit/imp_lanz.F
687!|| imp_pcgh ../engine/source/implicit/imp_pcg.F
688!|| imp_ppcgh ../engine/source/implicit/imp_pcg.F
689!|| omp_get_thread_num ../engine/source/engine/openmp_stub.F90
690!|| set_ksym ../engine/source/implicit/imp_solv.F
691!||--- uses -----------------------------------------------------
692!|| dsgraph_mod ../engine/share/modules/dsgraph_mod.F
693!|| groupdef_mod ../common_source/modules/groupdef_mod.F
694!|| imp_workh ../engine/share/modules/impbufdef_mod.F
695!|| intbufdef_mod ../common_source/modules/interfaces/intbufdef_mod.F90
696!||====================================================================
697 SUBROUTINE LIN_SOLVH0(TOL ,
698 1 NDDL ,NNZ ,IADK ,JDIK ,DIAG_K ,
699 2 LT_K ,NDDLI ,ITOK ,IADI ,JDII ,
700 3 LT_I ,X ,F ,ITASK ,IPRINT ,
701 4 F_U ,ISOLV ,IPREC ,L_LIM ,ITOL ,
702 6 W_DDL ,A ,AR ,VE ,MS ,
703 9 XE ,D ,DR ,NDOF ,IPARI ,
704 A INTBUF_TAB ,NUM_IMP,NS_IMP,NE_IMP,
705 B NSREM ,NSL ,P_MACH ,ISTOP ,NMONV ,
706 E IMONV ,MONVOL ,IGRSURF ,FR_MV ,
707 F VOLMON,IBFV ,SKEW ,XFRAME ,IND_IMP,
708 G XI_C ,F0 ,NDDLI_G,INTP_C,IRBE3 ,
709 H LRBE3 ,IRBE2 ,LRBE2 )
720#include "implicit_f.inc"
725#include "dmumps_struc.h"
727#include "com04_c.inc"
732 INTEGER NDDL ,NNZ ,IADK(*),JDIK(*),ITASK,IPRINT,ISTOP,
733 . NDDLI ,ITOK(*) ,IADI(*),JDII(*),NDDLI_G,
734 . ISOLV ,IPREC ,L_LIM,ITOL,W_DDL(*),IBFV(*),INTP_C
735 INTEGER NDOF(*),NE_IMP(*),NSREM ,NSL,
736 . IPARI(*) ,NUM_IMP(*),NS_IMP(*),IND_IMP(*)
737 INTEGER NMONV,IMONV(*),MONVOL(*),FR_MV(*),
738 . IRBE3(*) ,LRBE3(*),IRBE2(*) ,LRBE2(*)
741 . DIAG_K(*),LT_K(*),LT_I(*), X(*) ,F(*),TOL,F_U,P_MACH
743 . A(3,*),AR(3,*),VE(3,*),D(3,*),DR(3,*),XE(3,*),
744 . MS(*),VOLMON(*),SKEW(*) ,XFRAME(*),XI_C(*) ,F0(*)
746 TYPE(INTBUF_STRUCT_) INTBUF_TAB(*)
747 TYPE (SURF_) , DIMENSION(NSURF) :: IGRSURF
752 INTEGER I,J,NNZM,LENV,IBID,IERR,ITSK
755 TYPE(PRGRAPH) :: GBID
756 TYPE(DMUMPS_STRUC) MBID
758 INTEGER OMP_GET_THREAD_NUM
759 EXTERNAL OMP_GET_THREAD_NUM
770 CALL SET_KSYM(NDDL,IADK,JDIK,LT_K,IADK0,JDIK0,LT_K0)
775!$OMP PARALLEL PRIVATE(ITSK)
776 ITSK = OMP_GET_THREAD_NUM()
777.OR.
IF (ISOLV==1ISOLV>6) THEN
778 CALL IMP_PCGH( IPREC ,
779 1 NDDL ,NNZ ,IADK ,JDIK ,DIAG_K ,
780 2 LT_K ,NDDLI ,ITOK ,IADI ,JDII ,
781 3 LT_I ,NNZM ,IADK ,JDIK ,DIAG_K ,
782 4 LT_K ,X ,F ,ITOL ,TOL ,
783 5 PCG_W1,PCG_W2,PCG_W3,ITSK ,IPRINT ,
784 6 L_LIM ,P_MACH,F_U ,ISTOP ,
785 8 W_DDL ,A ,AR ,VE ,MS ,
786 9 XE ,D ,DR ,NDOF ,IPARI ,
787 A INTBUF_TAB ,NUM_IMP,NS_IMP,NE_IMP,
788 B NSREM ,NSL ,NMONV ,IMONV ,MONVOL,
789 C IGRSURF,VOLMON,FR_MV,IBFV ,
790 D SKEW ,XFRAME ,GBID ,IBID ,IBID ,
791 E IBID ,IBID ,IBID ,RBID ,IBID ,
792 F IBID ,MBID ,IBID ,ISOLV ,IBID ,
793 G IBID ,IBID ,IBID ,IND_IMP,XI_C ,
794 H F0 ,NDDLI_G,INTP_C,IRBE3 ,LRBE3,
796 ELSEIF (ISOLV == 9) THEN
797 CALL IMP_PPCGH( IPREC ,
798 1 NDDL ,NNZ ,IADK ,JDIK ,DIAG_K ,
799 2 LT_K ,NDDLI ,ITOK ,IADI ,JDII ,
800 3 LT_I ,NNZM ,IADK ,JDIK ,DIAG_K ,
801 4 LT_K ,X ,F ,ITOL ,TOL ,
802 5 PCG_W1,PCG_W2,PCG_W3,ITSK ,IPRINT ,
803 6 L_LIM ,P_MACH,F_U ,ISTOP ,
804 8 W_DDL ,A ,AR ,VE ,MS ,
805 9 XE ,D ,DR ,NDOF ,IPARI ,
806 A INTBUF_TAB ,NUM_IMP,NS_IMP,NE_IMP,
807 B NSREM ,NSL ,NMONV ,IMONV ,MONVOL,
808 C IGRSURF ,VOLMON,FR_MV,IBFV ,
809 D SKEW ,XFRAME ,GBID ,IBID ,IBID ,
810 E IBID ,IBID ,IBID ,RBID ,IBID ,
811 F IBID ,MBID ,IBID ,ISOLV ,IBID ,
812 G IBID ,IBID ,IBID ,IND_IMP,XI_C ,
813 H F0 ,NDDLI_G,INTP_C,IRBE3 ,LRBE3,
815.AND.
ELSEIF (ISOLV==2ITSK==0) THEN
817 CALL IMP_LANZP(IPREC ,
818 1 NDDL ,NNZ ,IADK ,JDIK ,DIAG_K ,
819 2 LT_K ,NDDLI ,ITOK ,IADI ,JDII ,
820 3 LT_I ,NNZM ,IADK ,JDIK ,DIAG_K ,
821 4 LT_K ,X ,F ,ITOL ,TOL ,
822 5 PCG_W1,PCG_W2,PCG_W3,ITSK ,IPRINT ,
823 6 SHIFT ,KCOND ,L_LIM ,P_MACH,F_U ,
824 7 ISTOP ,W_DDL ,A ,AR ,
825 9 VE ,MS ,XE ,D ,DR ,
826 A NDOF ,IPARI ,INTBUF_TAB ,NUM_IMP,
827 B NS_IMP,NE_IMP,NSREM ,NSL ,NMONV ,
828 C IMONV ,MONVOL,IGRSURF,VOLMON,
829 D FR_MV ,IBFV ,SKEW ,XFRAME,IND_IMP,
830 H XI_C ,F0 ,NDDLI_G,INTP_C,IRBE3 ,
831 E LRBE3 ,IRBE2 ,LRBE2 )
840!||====================================================================
841!|| lin_solvh1 ../engine/source/implicit/lin_solv.F
842!||--- called by ------------------------------------------------------
843!|| lin_solv ../engine/source/implicit/lin_solv.F
844!||--- calls -----------------------------------------------------
845!|| fr_dlft ../engine/source/mpi/implicit/imp_fri.F
846!|| imp_diags ../engine/source/mpi/implicit/imp_fri.F
847!|| imp_diagsn ../engine/source/mpi/implicit/imp_fri.F
848!|| imp_fsa_invhp ../engine/source/implicit/imp_fsa_inv.F
849!|| imp_lanzp ../engine/source/implicit/imp_lanz.F
850!|| imp_pcgh ../engine/source/implicit/imp_pcg.F
851!|| imp_ppcgh ../engine/source/implicit/imp_pcg.F
852!|| monv_diag ../engine/source/airbag/monv_imp0.F
853!|| omp_get_thread_num ../engine/source/engine/openmp_stub.F90
854!|| set_ksym ../engine/source/implicit/imp_solv.F
855!|| spmd_max_i ../engine/source/mpi/implicit/imp_spmd.F
856!|| spmd_sumf_k ../engine/source/mpi/implicit/imp_spmd.F
857!|| spmd_sumf_v ../engine/source/mpi/implicit/imp_spmd.F
858!||--- uses -----------------------------------------------------
859!|| dsgraph_mod ../engine/share/modules/dsgraph_mod.F
860!|| groupdef_mod ../common_source/modules/groupdef_mod.F
861!|| imp_workh ../engine/share/modules/impbufdef_mod.F
862!|| intbufdef_mod ../common_source/modules/interfaces/intbufdef_mod.F90
863!||====================================================================
864 SUBROUTINE LIN_SOLVH1(TOL ,MAX_L ,
865 1 NDDL ,NNZ ,IADK ,JDIK ,DIAG_K ,
866 2 LT_K ,NDDLI ,ITOK ,IADI ,JDII ,
867 3 LT_I ,DIAG_M,LT_M ,X ,F ,
868 4 ITASK ,ICPREC,IPRINT,F_U ,ISOLV ,
869 5 IPREC ,L_LIM ,ITOL ,INEGA ,W_DDL ,
870 7 A ,AR ,VE ,MS ,XE ,
871 8 D ,DR ,NDOF ,IPARI ,INTBUF_TAB,
872 9 NUM_IMP,NS_IMP,NE_IMP,NSREM ,
873 A NSL ,P_MACH,MAXB ,ISTOP ,NMONV ,
874 B IMONV ,MONVOL,IGRSURF ,FR_MV ,
875 C VOLMON,IBFV ,SKEW ,XFRAME ,IND_IMP,
876 D DIAG_I,XI_C ,F0 ,NDDLI_G,INTP_C,
877 E IRBE3 ,LRBE3,IRBE2 ,LRBE2 )
888#include "implicit_f.inc"
893#include "dmumps_struc.h"
895#include "com01_c.inc"
896#include "com04_c.inc"
897#include "timeri_c.inc"
898#include "units_c.inc"
903 INTEGER NDDL ,NNZ ,IADK(*),JDIK(*),ITASK,IPRINT,ICPREC,
904 . ISTOP,NDDLI ,ITOK(*) ,IADI(*),JDII(*),
905 . ISOLV ,IPREC ,L_LIM ,MAXB,ITOL,INEGA,
906 . W_DDL(*),IBFV(*),MAX_L,INTP_C,NDDLI_G
907 INTEGER NDOF(*),NE_IMP(*),NSREM ,NSL,IRBE3(*) ,LRBE3(*),
908 . IPARI(*) ,NUM_IMP(*),NS_IMP(*) ,IND_IMP(*),
910 INTEGER NMONV,IMONV(*),MONVOL(*),FR_MV(*)
913 . DIAG_K(*),LT_K(*),LT_I(*),DIAG_M(*),LT_M(*),
914 . X(*) ,F(*),TOL,F_U,P_MACH,XI_C(*),F0(*)
916 . A(3,*),AR(3,*),VE(3,*),D(3,*),DR(3,*),XE(3,*),
917 . MS(*),VOLMON(*),SKEW(*) ,XFRAME(*),DIAG_I(*)
919 TYPE(INTBUF_STRUCT_) INTBUF_TAB(*)
920 TYPE (SURF_) , DIMENSION(NSURF) :: IGRSURF
925 INTEGER I,J,NNE,NNZM,MAXC,MAXA,LEN,LENV, IDLFT0,IDLFT1
926 INTEGER SIZI(NSPMD+1),MAXS0,MAXS1,IG,IBID,IERR,ITSK
929 TYPE(PRGRAPH) :: GBID
930 TYPE(DMUMPS_STRUC) MBID
932 INTEGER OMP_GET_THREAD_NUM
933 EXTERNAL OMP_GET_THREAD_NUM
947! IF (IMON>0) CALL STARTIME(TIMERS,32)
951 DIAG_M(I) = DIAG_K(I)
954 . CALL IMP_DIAGS(DIAG_M ,NDOF,NSL,IPARI,INTBUF_TAB,IRBE3,LRBE3,IRBE2)
956 . CALL MONV_DIAG(DIAG_M,NDOF,IPARI,INTBUF_TAB,IRBE3 ,LRBE3 ,IRBE2,0)
957 IF (NSPMD>1) CALL SPMD_SUMF_V(DIAG_M)
960 IF (DIAG_M(I)<EM20) THEN
962 DIAG_M(I)=ABS(DIAG_M(I))
963 DIAG_M(I)=MAX(EM20,DIAG_M(I))
965 DIAG_M(I) = W_DDL(I)/DIAG_M(I)
967.AND.
IF (NNE>0ISOLV/=2) ISTOP=NNE
968 ELSEIF (IPREC==3) THEN
969 ELSEIF (IPREC==5) THEN
976 CALL FR_DLFT(NDDL,IDLFT0,IDLFT1)
981 . CALL IMP_DIAGS(DIAG_K ,NDOF,NSL,IPARI,INTBUF_TAB,IRBE3,LRBE3,IRBE2)
983 . CALL MONV_DIAG(DIAG_K,NDOF,IPARI,INTBUF_TAB,IRBE3 ,LRBE3 ,IRBE2,0)
985 DIAG_M(I) = DIAG_K(I)
986 DO J=IADK(I),IADK(I+1)-1
991 DIAG_M(I) = DIAG_K(I)
992 DO J=IADK(I),IADK(I+1)-1
997 IF (NSPMD>1) CALL SPMD_SUMF_K(DIAG_M ,LT_M )
1004 IF (MAXC>10000) then
1007 MAXA = 1+(MAXC*(MAXC-1))/2
1009 MAXS1=IADK(NDDL+1)-IADK(IDLFT1+1)
1012 1 NDDL ,NNZ ,IADK ,JDIK ,DIAG_K ,
1013 2 LT_K ,DIAG_M,LT_M ,MAXC ,MAXA ,
1014 4 INEGA ,IDLFT0,IDLFT1,MAXS1 )
1022 DO J=IADK(I),IADK(I+1)-1
1027 IF (NSPMD>1) CALL SPMD_MAX_I(INEGA)
1028.AND..AND.
IF (INEGA>0ISOLV/=2NCYCLE>1)ISTOP=INEGA
1030 . CALL IMP_DIAGSN(DIAG_K,NDOF,NSL,IPARI,INTBUF_TAB,IRBE3,LRBE3,IRBE2)
1033 . CALL MONV_DIAG(DIAG_K,NDOF,IPARI,INTBUF_TAB,IRBE3,LRBE3,IRBE2,1)
1044 WRITE(ISTDO,2001)NNE
1046! IF (IMON>0) CALL STOPTIME(TIMERS,32)
1053 DIAG_K(J)=DIAG_K(J)-DIAG_I(I)
1057 CALL SET_KSYM(NDDL,IADK,JDIK,LT_K,IADK0,JDIK0,LT_K0)
1059 1 CALL SET_KSYM(NDDL,IADK,JDIK,LT_M,IADM0,JDIM0,LT_M0)
1065!$OMP PARALLEL PRIVATE(ITSK)
1066 ITSK = OMP_GET_THREAD_NUM()
1067.OR..OR.
IF (ISOLV==1ISOLV==7ISOLV==8) THEN
1068 CALL IMP_PCGH( IPREC ,
1069 1 NDDL ,NNZ ,IADK ,JDIK ,DIAG_K ,
1070 2 LT_K ,NDDLI ,ITOK ,IADI ,JDII ,
1071 3 LT_I ,NNZM ,IADK ,JDIK ,DIAG_M ,
1072 4 LT_M ,X ,F ,ITOL ,TOL ,
1073 5 PCG_W1,PCG_W2,PCG_W3,ITSK ,IPRINT ,
1074 6 L_LIM ,P_MACH,F_U ,ISTOP ,
1075 8 W_DDL ,A ,AR ,VE ,MS ,
1076 9 XE ,D ,DR ,NDOF ,IPARI ,
1077 A INTBUF_TAB ,NUM_IMP,NS_IMP,NE_IMP,
1078 B NSREM ,NSL ,NMONV ,IMONV ,MONVOL,
1079 C IGRSURF,VOLMON,FR_MV,IBFV ,
1080 D SKEW ,XFRAME ,GBID ,IBID ,IBID ,
1081 E IBID ,IBID ,IBID ,RBID ,IBID ,
1082 F IBID ,MBID ,IBID ,ISOLV ,IBID ,
1083 G IBID ,IBID ,IBID ,IND_IMP,XI_C ,
1084 H F0 ,NDDLI_G,INTP_C,IRBE3 ,LRBE3,
1086 ELSEIF (ISOLV == 9) THEN
1087 CALL IMP_PPCGH( IPREC ,
1088 1 NDDL ,NNZ ,IADK ,JDIK ,DIAG_K ,
1089 2 LT_K ,NDDLI ,ITOK ,IADI ,JDII ,
1090 3 LT_I ,NNZM ,IADK ,JDIK ,DIAG_M ,
1091 4 LT_M ,X ,F ,ITOL ,TOL ,
1092 5 PCG_W1,PCG_W2,PCG_W3,ITSK ,IPRINT ,
1093 6 L_LIM ,P_MACH,F_U ,ISTOP ,
1094 8 W_DDL ,A ,AR ,VE ,MS ,
1095 9 XE ,D ,DR ,NDOF ,IPARI ,
1096 A INTBUF_TAB ,NUM_IMP,NS_IMP,NE_IMP,
1097 B NSREM ,NSL ,NMONV ,IMONV ,MONVOL,
1098 C IGRSURF ,VOLMON,FR_MV,IBFV ,
1099 D SKEW ,XFRAME ,GBID ,IBID ,IBID ,
1100 E IBID ,IBID ,IBID ,RBID ,IBID ,
1101 F IBID ,MBID ,IBID ,ISOLV ,IBID ,
1102 G IBID ,IBID ,IBID ,IND_IMP,XI_C ,
1103 H F0 ,NDDLI_G,INTP_C,IRBE3 ,LRBE3,
1105.AND.
ELSEIF (ISOLV==2ITSK==0) THEN
1107 CALL IMP_LANZP(IPREC ,
1108 1 NDDL ,NNZ ,IADK ,JDIK ,DIAG_K ,
1109 2 LT_K ,NDDLI ,ITOK ,IADI ,JDII ,
1110 3 LT_I ,NNZM ,IADK ,JDIK ,DIAG_M ,
1111 4 LT_M ,X ,F ,ITOL ,TOL ,
1112 5 PCG_W1,PCG_W2,PCG_W3,ITSK ,IPRINT ,
1113 6 SHIFT ,KCOND ,L_LIM ,P_MACH,F_U ,
1114 7 ISTOP ,W_DDL ,A ,AR ,
1115 9 VE ,MS ,XE ,D ,DR ,
1116 A NDOF ,IPARI ,INTBUF_TAB ,NUM_IMP,
1117 B NS_IMP,NE_IMP,NSREM ,NSL ,NMONV ,
1118 C IMONV ,MONVOL,IGRSURF,VOLMON,
1119 D FR_MV ,IBFV ,SKEW ,XFRAME,IND_IMP,
1120 H XI_C ,F0 ,NDDLI_G,INTP_C,IRBE3 ,
1121 E LRBE3 ,IRBE2 ,LRBE2 )
1127 1002 FORMAT(3X,'precondition method :
jacobien '/)
1128 1003 FORMAT(3X,'precondition method : ic0
')
1129 1004 FORMAT(3X,'precondition method : ic0_stab
')
1130 1009 FORMAT(3X,'precondition method : fsai_r ' )
1131 2001
FORMAT(3x,
'---WARNING :',i8,3x,
1132 .
'TOO SMALL PIVOT IN FACTORIZATION'/)
1162 1 NDDL ,NNZ ,IADK ,JDIK ,DIAG_K ,
1163 2 LT_K ,NDDLI ,ITOK ,IADI ,JDII ,
1164 3 LT_I ,IADM ,JDIM ,DIAG_M ,LT_M ,
1165 4 X ,F ,MAX_L ,D_TOL ,
1166 4 ITASK ,ICPREC,IPRINT,F_U ,ISOLV ,
1167 5 IPREC ,L_LIM ,ITOL ,INEGA ,W_DDL ,
1168 7 A ,AR ,VE ,MS ,XE ,
1169 8 D ,DR ,NDOF ,IPARI ,INTBUF_TAB,
1170 9 NUM_IMP,NS_IMP,NE_IMP,NSREM ,
1171 A NSL ,P_MACH,MAXB ,ISTOP ,NMONV ,
1172 B IMONV ,MONVOL,IGRSURF ,FR_MV ,
1173 C VOLMON,IBFV ,SKEW ,XFRAME ,IND_IMP,
1174 D DIAG_I,XI_C ,F0 ,NDDLI_G,INTP_C,
1175 E IRBE3 ,LRBE3,IRBE2 ,LRBE2 )
1186#include "implicit_f.inc"
1190#include "com01_c.inc"
1191#include "com04_c.inc"
1192#include "timeri_c.inc"
1193#include "units_c.inc"
1195#include "dmumps_struc.h"
1197#include "task_c.inc"
1202 INTEGER NDDL ,NNZ ,IADK(*),JDIK(*),ITASK,IPRINT,ICPREC,
1203 . ISTOP,NDDLI ,ITOK(*) ,IADI(*),JDII(*),
1204 . ISOLV ,IPREC ,L_LIM ,MAXB,ITOL,INEGA,INTP_C,
1205 . W_DDL(*),IBFV(*) ,IADM(*),JDIM(*),MAX_L,N_PAT,
1206 INTEGER NDOF(*),NE_IMP(*),NSREM ,NSL,NDDLI_G,
1207 . ipari(*) ,num_imp(*),ns_imp(*),ind_imp(*) ,
1208 . irbe3(*) ,lrbe3(*),irbe2(*) ,lrbe2(*)
1209 INTEGER ,IMONV(*),(*),FR_MV(*)
1212 . DIAG_K(*),LT_K(*),LT_I(*),DIAG_M(*),LT_M(*),
1213 . X(*) ,F(*),TOL,F_U,P_MACH,D_TOL,XI_C(*),F0(*)
1215 . A(3,*),AR(3,*),VE(3,*),D(3,*),DR(3,*),(3,*),
1216 . MS(*),VOLMON(*),SKEW(*) ,XFRAME(*),DIAG_I(*)
1218 TYPE(INTBUF_STRUCT_) INTBUF_TAB(*)
1219 TYPE (SURF_) ,
DIMENSION(NSURF) :: IGRSURF
1224 INTEGER I,J,NNE,NNZM,MAXC,MAXA,LEN,LENV, IDLFT0,IDLFT1
1225 INTEGER MAXS0,MAXS1,IG,IBID,IERR,
1228 TYPE(PRGRAPH) :: GBID
1229 TYPE(dmumps_struc) MBID
1231 INTEGER OMP_GET_THREAD_NUM
1254 CALL fr_dlft(nddl,idlft0,idlft1)
1259 .
CALL imp_diags(diag_k ,ndof,nsl,ipari,intbuf_tab,irbe3,lrbe3,irbe2)
1261 .
CALL monv_diag(diag_k,ndof,ipari,intbuf_tab,irbe3 ,lrbe3 ,irbe2,0)
1263 diag_m(i) = diag_k(i)
1264 DO j=iadk(i),iadk(i+1)-1
1269 diag_m(i) = diag_k(i)
1270 DO j=iadk(i),iadk(i+1)-1
1277 CALL ind_span(n_pat,idlft0,nddl,iadk,jdik,iadm,jdim,
w_maxl,maxb1)
1283 IF (maxc>10000)
THEN
1286 maxa = 1+(maxc*(maxc-1))/2
1288 maxs1=iadk(nddl+1)-iadk(idlft1+1)
1292 1 nddl ,iadk ,jdik ,diag_k ,lt_k ,
1293 2 iadm ,jdim ,diag_m ,lt_m ,maxc ,
1294 3 maxa ,inega ,idlft0 ,idlft1 ,maxs1 ,
1303 DO j=iadm(i),iadm(i+1)-1
1309 IF (inega>0.AND.isolv/=2.AND.ncycle>1)istop=inega
1311 .
CALL imp_diagsn(diag_k,ndof,nsl,ipari,intbuf_tab,irbe3,lrbe3,irbe2)
1314 .
CALL monv_diag(diag_k,ndof,ipari,intbuf_tab,irbe3,lrbe3,irbe2,1)
1328 nnzm = iadm(nddl+1)-iadm(1)
1329 fac=one*nnzm/nnz/nspmd
1331 IF (ispmd==0.AND.iprint/=0)
THEN
1333 IF (iprint<0)
WRITE(istdo,1002)fac
1339 diag_k(j)=diag_k(j)-diag_i(i)
1351 itsk = omp_get_thread_num()
1352 IF (isolv==1.OR.isolv==7.OR.isolv==8)
THEN
1354 1 nddl ,nnz ,iadk ,jdik ,diag_k ,
1355 2 lt_k ,nddli ,itok ,iadi ,jdii ,
1356 3 lt_i ,nnzm ,iadm ,jdim ,diag_m ,
1357 4 lt_m ,x ,f ,itol ,tol ,
1358 5 pcg_w1,pcg_w2,pcg_w3,itsk ,iprint ,
1359 6 l_lim ,p_mach,f_u ,istop ,
1360 8 w_ddl ,a ,ar ,ve ,ms ,
1361 9 xe ,d ,dr ,ndof ,ipari ,
1362 a intbuf_tab ,num_imp,ns_imp,ne_imp,
1363 b nsrem ,nsl ,nmonv ,imonv ,monvol,
1364 c igrsurf,volmon,fr_mv,ibfv ,
1365 d skew ,xframe ,gbid ,ibid ,ibid ,
1366 e ibid ,ibid ,ibid ,rbid ,ibid ,
1367 f ibid ,mbid ,ibid ,isolv ,ibid ,
1368 g ibid ,ibid ,ibid ,ind_imp,xi_c ,
1369 h f0 ,nddli_g,intp_c,irbe3 ,lrbe3,
1371 ELSEIF (isolv == 9)
THEN
1373 1 nddl ,nnz ,iadk ,jdik ,diag_k ,
1374 2 lt_k ,nddli ,itok ,iadi ,jdii ,
1375 3 lt_i ,nnzm ,iadm ,jdim ,diag_m ,
1376 4 lt_m ,x ,f ,itol ,tol ,
1377 5 pcg_w1,pcg_w2,pcg_w3,itsk ,iprint ,
1378 6 l_lim ,p_mach,f_u ,istop ,
1379 8 w_ddl ,a ,ar ,ve ,ms ,
1380 9 xe ,d ,dr ,ndof ,ipari ,
1381 a intbuf_tab ,num_imp,ns_imp,ne_imp,
1382 b nsrem ,nsl ,nmonv ,imonv ,monvol,
1383 c igrsurf ,volmon,fr_mv,ibfv ,
1384 d skew ,xframe ,gbid ,ibid ,ibid ,
1385 e ibid ,ibid ,ibid ,rbid ,ibid ,
1386 f ibid ,mbid ,ibid ,isolv ,ibid ,
1387 g ibid ,ibid ,ibid ,ind_imp,xi_c ,
1388 h f0 ,nddli_g,intp_c,irbe3 ,lrbe3,
1390 ELSEIF (isolv==2.AND.itsk==0)
THEN
1393 1 nddl ,nnz ,iadk ,jdik ,diag_k ,
1394 2 lt_k ,nddli ,itok ,iadi ,jdii ,
1395 3 lt_i ,nnzm ,iadm ,jdim ,diag_m ,
1396 4 lt_m ,x ,f ,itol ,tol ,
1397 5 pcg_w1,pcg_w2,pcg_w3,itask ,iprint ,
1398 6 shift ,kcond ,l_lim ,p_mach,f_u ,
1399 7 istop ,w_ddl ,a ,ar ,
1400 9 ve ,ms ,xe ,d ,dr ,
1401 a ndof ,ipari ,intbuf_tab ,num_imp,
1402 b ns_imp,ne_imp,nsrem ,nsl ,nmonv ,
1403 c imonv ,monvol,igrsurf ,volmon,
1404 d fr_mv ,ibfv ,skew ,xframe,ind_imp,
1405 h xi_c ,f0 ,nddli_g,intp_c,irbe3 ,
1406 e lrbe3 ,irbe2 ,lrbe2 )
1411 1002
FORMAT(3x,
'END PRECONDITION WITH RELATIVE DENSITY =',e11.4/)
1416!||====================================================================
1433 1 NDDL ,NNZ ,IADK ,JDIK ,DIAG_K ,
1434 2 LT_K ,NDDLI ,ITOK ,IADI ,JDII ,
1435 3 LT_I ,X ,F ,ITASK ,IPRINT ,
1436 4 F_U ,ISOLV ,IPREC ,L_LIM ,ITOL ,
1437 6 W_DDL ,A ,AR ,VE ,MS ,
1438 9 XE ,D ,DR ,NDOF ,IPARI ,
1439 A INTBUF_TAB ,NUM_IMP,NS_IMP,NE_IMP,
1440 B NSREM ,NSL ,P_MACH ,ISTOP ,NMONV ,
1441 E IMONV ,MONVOL ,IGRSURF ,FR_MV ,
1442 F VOLMON,IBFV ,SKEW ,XFRAME ,GRAPHE,
1443 G IAD_ELEM,FR_ELEM,ITAB ,INSOLV ,ITN ,
1444 H FAC_K ,IPIV_K ,NK ,MUMPS_PAR,CDDLP,
1445 I IDSC ,IDDL ,IKC ,INLOC ,DIAG_I ,
1446 J ILINE ,ILINTF,IND_IMP,XI_C ,F0 ,
1447 K NDDLI_G,INTP_C,IRBE3 ,LRBE3 ,IRBE2 ,
1448 L LRBE2 ,IT_PCG,IMUMPSV)
1459#include "implicit_f.inc"
1463#include "com01_c.inc"
1464#include
"com04_c.inc"
1465#include "timeri_c.inc"
1467#include "dmumps_struc.h"
1473 INTEGER NDDL ,NNZ ,IADK(*),JDIK(*),ITASK,IPRINT,ISTOP,
1474 . NDDLI ,ITOK(*) ,IADI(*),JDII(*),
1475 . isolv ,iprec ,l_lim,itol,w_ddl(*),ibfv(*)
1476 INTEGER (*),NE_IMP(*),NSREM ,NSL,NDDLI_G,
1477 . IPARI(*) ,NUM_IMP(*),(*),IND_IMP(*)
1478 INTEGER NMONV,IMONV(*),MONVOL(*),FR_MV(*)
1479 INTEGER IAD_ELEM(2,*), FR_ELEM(*), ITAB(*),
1480 . INSOLV, ITN, IPIV_K(*), NK, CDDLP(*),IDSC,
1481 . IDDL(*), IKC(*), INLOC(*),ILINE ,,INTP_C,
1482 . IRBE3(*) ,LRBE3(*) ,IRBE2(*) ,LRBE2(*) ,IT_PCG,
1485 . DIAG_K(*),LT_K(*),LT_I(*), (*) ,F(*),TOL,F_U,P_MACH,
1486 . DIAG_I(*),XI_C(*),F0(*)
1488 . A(3,*),AR(3,*),VE(3,*),D(3,*),DR(3,*),XE(3,*),
1489 . MS(*),VOLMON(*),(*) ,XFRAME(*),FAC_K(*)
1490 TYPE(PRGRAPH) :: GRAPHE(*)
1491 TYPE(INTBUF_STRUCT_) INTBUF_TAB(*)
1492 TYPE (SURF_) ,
DIMENSION(NSURF) :: IGRSURF
1495 TYPE(dmumps_struc) MUMPS_PAR
1505 INTEGER I,J,NNZM,LENV,IBID,ISOL,IERR,IDS,ITSK
1508 INTEGER OMP_GET_THREAD_NUM
1509 EXTERNAL OMP_GET_THREAD_NUM
1522 diag_k(j)=diag_k(j)+diag_i(i)
1531 itsk = omp_get_thread_num()
1533 1 nddl ,nnz ,iadk ,jdik ,diag_k ,
1534 2 lt_k ,nddli ,itok ,iadi ,jdii ,
1535 3 lt_i ,nnzm ,iadk ,jdik ,diag_k ,
1536 4 lt_k ,x ,f ,itol ,tol ,
1537 5 pcg_w1,pcg_w2,pcg_w3,itsk ,iprint ,
1538 6 l_lim ,p_mach,f_u ,istop ,
1539 8 w_ddl ,a ,ar ,ve ,ms ,
1540 9 xe ,d ,dr ,ndof ,ipari ,
1541 a intbuf_tab ,num_imp,ns_imp,ne_imp,
1542 b nsrem ,nsl ,nmonv ,imonv ,monvol,
1543 c igrsurf,volmon,fr_mv,ibfv ,
1544 d skew ,xframe ,graphe,iad_elem,fr_elem,
1545 e insolv ,itn ,fac_k ,ipiv_k,nk ,
1546 f itab ,mumps_par,cddlp,isol,idsc ,
1547 g iddl ,ikc ,inloc ,ind_imp,xi_c ,
1548 h f0 ,nddli_g,intp_c,irbe3 ,lrbe3 ,
1553 IF (nspmd == 1.AND.imumpsv==0)
THEN
1555 1 nddl ,nnz ,iadk ,jdik ,diag_k ,
1556 2 lt_k ,nddli ,itok ,iadi ,jdii ,
1557 3 lt_i ,x ,f ,itask ,iprint ,
1558 4 isol ,istop ,graphe,itab ,insolv,
1559 5 itn ,fac_k ,ipiv_k,nk ,diag_i,
1562 CALL lin_solvp2(graphe, f, nddl, iad_elem, fr_elem,
1563 1 diag_k, lt_k, iadk, jdik, x,
1564 2 itab, iprint, nddli, iadi, jdii,
1565 3 diag_i, lt_i, itok, insolv, itn,
1566 4 fac_k, ipiv_k, nk, mumps_par, cddlp,
1567 5 isol , ids , iddl, ikc, inloc,
1574 IF (iline==0.OR.(iline>0.AND.ilintf==0) )
THEN
1579 diag_k(j)=diag_k(j)+diag_i(i)
1587 itsk = omp_get_thread_num()
1589 1 nddl ,nnz ,iadk ,jdik ,diag_k ,
1590 2 lt_k ,nddli ,itok ,iadi ,jdii ,
1591 3 lt_i ,nnzm ,iadk ,jdik ,diag_k ,
1592 4 lt_k ,x ,f ,itol ,tol ,
1593 5 pcg_w1,pcg_w2,pcg_w3,itsk ,iprint ,
1594 6 l_lim ,p_mach,f_u ,istop ,
1595 8 w_ddl ,a ,ar ,ve ,ms ,
1596 9 xe ,d ,dr ,ndof ,ipari ,
1597 a intbuf_tab ,num_imp,ns_imp,ne_imp,
1598 b nsrem ,nsl ,nmonv ,imonv ,monvol,
1599 c igrsurf,volmon,fr_mv,ibfv ,
1600 d skew ,xframe ,graphe,iad_elem,fr_elem,
1601 e insolv ,itn ,fac_k ,ipiv_k,nk ,
1602 f itab ,mumps_par,cddlp,isol,idsc ,
1603 g iddl ,ikc ,inloc ,ind_imp,xi_c ,
1604 h f0 ,nddli_g,intp_c,irbe3 ,lrbe3,
1629!||====================================================================
1632 SUBROUTINE set_kisc(NDDL ,NDDLI,IADI ,JDII ,ITOK ,LT_I ,
1633 . IADK0,JDIK0,LT_K0)
1637#include "implicit_f.inc"
1641 INTEGER NDDL,NDDLI,IADI(*),JDII(*),IADK0(*),JDIK0(*),ITOK(*)
1649 INTEGER I,J,K,JD,ICOL(NDDL),NRI,I0,KTOI(NDDL)
1657 icol(k) = iadi(i+1) - iadi(i)
1661 DO j = iadi(i),iadi(i+1)-1
1663 icol(jd) = icol(jd) + 1
1668 iadk0(i+1) = iadk0(i)+icol(i)
1675 DO j=iadi(i),iadi(i+1)-1
1677 k=iadk0(i0)+j-iadi(i)
1681 icol(i0) = iadi(i+1)-iadi(i)
1682 DO j=iadi(i),iadi(i+1)-1
1684 k = iadk0(jd) + icol(jd)
1687 icol(jd) = icol(jd) + 1
1714#include "implicit_f.inc"
1718 INTEGER NDDL,NDDLI,IADI(*)
1725 IF (nddli<=0)
RETURN
1729 IF(
ALLOCATED(lt_i0))
DEALLOCATE(lt_i0)
1730 lnz=iadi(nddli+1)-iadi(1)
1733 ALLOCATE(
iadi0(nddli+1),
jdii0(lnz),lt_i0(lnz),stat=ierr)
1736 CALL ancmsg(msgid=19,anmode=aninfo,
1737 . c1=
'FOR IMPLICIT SOLVER W/ CONTACT')
1752 1 IDDL , IKC , INLOC ,NDOF ,ITAG )
1760#include "implicit_f.inc"
1764#include "com01_c.inc"
1765#include "com04_c.inc"
1769 INTEGER NDDL, IAD_ELEM(2,*), FR_ELEM(*),
1770 . iddl(*), ikc(*), inloc(*), ndof(*),itag(*)
1777 INTEGER NF, I, J, N, NKC, ND, ID
1778 INTEGER ITSK, ,L_NOD,F_DDL ,L_DDL
1786 IF (nspmd > 1 )
THEN
1793 DO j=iad_elem(1,i),iad_elem
1795 IF ( itag(n) > 0 ) itag(n)=itag(n)+1
1808 IF ( itag(i) > 1 ) f1(id)=f(id)/itag(i)
1825 SUBROUTINE mumpslb(F ,F1 , NDDL , IAD_ELEM , FR_ELEM,
1826 1 IDDL , IKC , INLOC ,NDOF ,ITAG )
1834#include "implicit_f.inc"
1838#include "com01_c.inc"
1839#include "com04_c.inc"
1843 INTEGER NDDL, IAD_ELEM(2,*), FR_ELEM(*),
1844 . IDDL(*), IKC(*), INLOC(*), NDOF(*),ITAG(*)
1851 INTEGER NF, I, J, N, NKC, ND, ID
1852 INTEGER ITSK,F_NOD ,L_NOD,F_DDL ,L_DDL
1857 IF (nspmd > 1 )
THEN
1864 DO j=iad_elem(1,i),iad_elem(1,i+1)-1
1879 IF ( itag(i) > 1 ) f1(id)=f(id)/itag(i)
subroutine bfgs_h1(f_ddl, l_ddl, w_ddl, f, a2, it, itask)
subroutine bfgs_h2(f_ddl, l_ddl, w_ddl, u, f, a2, it, max_bfgs, itask)
subroutine bfgs_h2p(f_ddl, l_ddl, w_ddl, u, f, a2, it, max_bfgs, itask)
subroutine bfgs_h1p(f_ddl, l_ddl, w_ddl, f, a2, it, itask)
subroutine qstat_end(nddl, u)
subroutine qstat_it(nddl, f, u)
subroutine imp_diags(diag_k, ndof, nsl, ipari, intbuf_tab, irbe3, lrbe3, irbe2)
subroutine imp_diagsn(diag_k, ndof, nsl, ipari, intbuf_tab, irbe3, lrbe3, irbe2)
subroutine fr_dlft(nddl, idlft0, idlft1)
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 jacobien(a, n, ew, ev, tol, lamda)
subroutine imp_lanzp(iprec, n, nnz, iadk, jdik, diag_k, lt_k, ni, itok, iadi, jdii, lt_i, nnzm, iadm, jdim, diag_m, lt_m, x, r, itol, rtol, v, w, y, itask, iprint, shift, kcond, n_max, flm, f_x, istop, w_ddl, a, ar, ve, ms, xe, d, dr, ndof, ipari, intbuf_tab, num_imp, ns_imp, ne_imp, nsrem, nsl, nmonv, imonv, monvol, igrsurf, volmon, fr_mv, ibfv, skew, xframe, ind_imp, xi_c, r0, nddli_g, intp_c, irbe3, lrbe3, irbe2, lrbe2)
subroutine imp_ppcgh(iprec, nddl, nnz, iadk, jdik, diag_k, lt_k, nddli, itok, iadi, jdii, lt_i, nnzm, iadm, jdim, diag_m, lt_m, x, r, itol, tol, p, z, y, itask, iprint, n_max, eps_m, f_x, istop, w_ddl, a, ar, ve, ms, xe, d, dr, ndof, ipari, intbuf_tab, num_imp, ns_imp, ne_imp, nsrem, nsl, nmonv, imonv, monvol, igrsurf, volmon, fr_mv, ibfv, skew, xframe, graphe, iad_elem, fr_elem, itab, insolv, itn, fac_k, ipiv_k, nk, mumps_par, cddlp, isolv, idsc, iddl, ikc, inloc, ind_imp, xi_c, r0, nddli_g, intp_c, irbe3, lrbe3, irbe2, lrbe2)
subroutine imp_pcgh(iprec, nddl, nnz, iadk, jdik, diag_k, lt_k, nddli, itok, iadi, jdii, lt_i, nnzm, iadm, jdim, diag_m, lt_m, x, r, itol, tol, p, z, y, itask, iprint, n_max, eps_m, f_x, istop, w_ddl, a, ar, ve, ms, xe, d, dr, ndof, ipari, intbuf_tab, num_imp, ns_imp, ne_imp, nsrem, nsl, nmonv, imonv, monvol, igrsurf, volmon, fr_mv, ibfv, skew, xframe, graphe, iad_elem, fr_elem, itab, insolv, itn, fac_k, ipiv_k, nk, mumps_par, cddlp, isolv, idsc, iddl, ikc, inloc, ind_imp, xi_c, r0, nddli_g, intp_c, irbe3, lrbe3, irbe2, lrbe2)
subroutine imp_solv(output, timers, python, icode, iskew, iskwn, ipart, ixtg, ixs, ixq, ixc, ixt, ixp, ixr, ixtg1, itab, itabm1, npc, ibcl, ibfv, sensor_tab, nnlink, lnlink, iparg, igrv, ipari, intbuf_tab, nprw, iconx, npby, lpby, lrivet, nstrf, ljoint, icodt, icodr, isky, adsky, iads_f, ilink, llink, weight, itask, ibvel, lbvel, fbvel, x, d, v, vr, dr, thke, damp, ms, in, pm, skews, geo, eani, bufmat, bufgeo, bufsf, tf, forc, vel, fsav, agrv, fr_wave, parts0, elbuf, rby, rivet, fr_elem, iad_elem, wa, a, ar, stifn, stifr, partsav, fsky, fskyi, iframe, xframe, w16, iactiv, fskym, igeo, ipm, wfext, nodft, nodlt, nint7, num_imp, ns_imp, ne_imp, ind_imp, it, rwbuf, lprw, fr_wall, nbintc, intlist, fopt, rwsav, fsavd, graphe, fac_k, ipiv_k, nkcond, nsensor, monvol, igrsurf, fr_mv, volmon, dirul, nodglob, mumps_par, cddlp, isendto, irecvfrom, newfront, imsch, i2msch, isizxv, ilenxv, islen7, irlen7, islen11, irlen11, islen17, irlen17, irlen7t, islen7t, kinet, num_imp1, temp, dt2prev, waint, lgrav, sh4tree, sh3tree, irlen20, islen20, irlen20t, islen20t, irlen20e, islen20e, irbe3, lrbe3, frbe3, fr_i2m, iad_i2m, fr_rbe3m, iad_rbe3m, frwl6, irbe2, lrbe2, intbuf_tab_c, ikine, diag_sms, icfield, lcfield, cfield, count_remslv, count_remslve, elbuf_tab, elbuf_imp, xdp, weight_md, stack, dimfb, fbsav6, stabsen, tabsensor, drape_sh4n, drape_sh3n, h3d_data, multi_fvm, igrbric, igrsh4n, igrsh3n, igrbeam, forneqs, maxdgap, nddl0, nnzk0, it_t, impbuf_tab, cptreac, fthreac, nodreac, drapeg, interfaces, th_surf, dpl0cld, vel0cld, snpc, stf, glob_therm, wfext_md)
subroutine diag_kif(diag_k)
subroutine imp_smpini(itsk, n1ftsk, n1ltsk, n1)
subroutine set_ksym(nddl, iadk, jdik, lt_k, iadk0, jdik0, lt_k0)
subroutine spmd_sumf_k(diag_k, l_k)
subroutine ind_span(nn, ndf, nddl, iadk, jdik, iadm, jdim, l_max, ndmax)
subroutine mumpslb_hp(f, f1, nddl, iad_elem, fr_elem, iddl, ikc, inloc, ndof, itag)
subroutine lin_solv(nddl, iddl, ndof, ikc, d, dr, tol, nnz, iadk, jdik, diag_k, lt_k, nddli, iadi, jdii, diag_i, lt_i, itok, iadm, jdim, diag_m, lt_m, f, f_u, inloc, fr_elem, iad_elem, w_ddl, itask, icprec, istop, a, ar, ve, ms, xe, ipari, intbuf_tab, num_imp, ns_imp, ne_imp, nsrem, nsl, it, graphe, itab, fac_k, ipiv_k, nk, nmonv, imonv, monvol, igrsurf, fr_mv, volmon, ibfv, skew, xframe, mumps_par, cddlp, ind_imp, xi_c, irbe3, lrbe3, irbe2, lrbe2)
subroutine recu_kdis0(ndof, d)
subroutine lin_solvhm(tol, nddl, nnz, iadk, jdik, diag_k, lt_k, nddli, itok, iadi, jdii, lt_i, x, f, itask, iprint, f_u, isolv, iprec, l_lim, itol, w_ddl, a, ar, ve, ms, xe, d, dr, ndof, ipari, intbuf_tab, num_imp, ns_imp, ne_imp, nsrem, nsl, p_mach, istop, nmonv, imonv, monvol, igrsurf, fr_mv, volmon, ibfv, skew, xframe, graphe, iad_elem, fr_elem, itab, insolv, itn, fac_k, ipiv_k, nk, mumps_par, cddlp, idsc, iddl, ikc, inloc, diag_i, iline, ilintf, ind_imp, xi_c, f0, nddli_g, intp_c, irbe3, lrbe3, irbe2, lrbe2, it_pcg, imumpsv)
subroutine lin_solvp2(graphe, f, nddl, iad_elem, fr_elem, diag_k, lt_k, iadk, jdik, x, itab, iprint, nddli, iadi, jdii, diag_i, lt_i, itok, insolv, it, fac_k, ipiv_k, nk, mumps_par, cddlp, isolv, idsc, iddl, ikc, inloc, ndof, itask)
subroutine lin_solvh0(tol, nddl, nnz, iadk, jdik, diag_k, lt_k, nddli, itok, iadi, jdii, lt_i, x, f, itask, iprint, f_u, isolv, iprec, l_lim, itol, w_ddl, a, ar, ve, ms, xe, d, dr, ndof, ipari, intbuf_tab, num_imp, ns_imp, ne_imp, nsrem, nsl, p_mach, istop, nmonv, imonv, monvol, igrsurf, fr_mv, volmon, ibfv, skew, xframe, ind_imp, xi_c, f0, nddli_g, intp_c, irbe3, lrbe3, irbe2, lrbe2)
subroutine lin_solv2(nddl, nnz, iadk, jdik, diag_k, lt_k, nddli, itok, iadi, jdii, lt_i, x, f, itask, iprint, isolv, istop, graphe, itab, insolv, it, fac_k, ipiv_k, nk, diag_i, idsc)
subroutine lin_solvh1(tol, max_l, nddl, nnz, iadk, jdik, diag_k, lt_k, nddli, itok, iadi, jdii, lt_i, diag_m, lt_m, x, f, itask, icprec, iprint, f_u, isolv, iprec, l_lim, itol, inega, w_ddl, a, ar, ve, ms, xe, d, dr, ndof, ipari, intbuf_tab, num_imp, ns_imp, ne_imp, nsrem, nsl, p_mach, maxb, istop, nmonv, imonv, monvol, igrsurf, fr_mv, volmon, ibfv, skew, xframe, ind_imp, diag_i, xi_c, f0, nddli_g, intp_c, irbe3, lrbe3, irbe2, lrbe2)
subroutine ini_kisc(nddl, nddli, iadi)
subroutine lin_solvih2(tol, n_pat, maxb1, nddl, nnz, iadk, jdik, diag_k, lt_k, nddli, itok, iadi, jdii, lt_i, iadm, jdim, diag_m, lt_m, x, f, max_l, d_tol, itask, icprec, iprint, f_u, isolv, iprec, l_lim, itol, inega, w_ddl, a, ar, ve, ms, xe, d, dr, ndof, ipari, intbuf_tab, num_imp, ns_imp, ne_imp, nsrem, nsl, p_mach, maxb, istop, nmonv, imonv, monvol, igrsurf, fr_mv, volmon, ibfv, skew, xframe, ind_imp, diag_i, xi_c, f0, nddli_g, intp_c, irbe3, lrbe3, irbe2, lrbe2)
subroutine mumpslb(f, f1, nddl, iad_elem, fr_elem, iddl, ikc, inloc, ndof, itag)
subroutine set_kisc(nddl, nddli, iadi, jdii, itok, lt_i, iadk0, jdik0, lt_k0)
subroutine recu_kdis(ndof, d)
subroutine monv_diag(diag_k, ndof, ipari, intbuf_tab, irbe3, lrbe3, irbe2, iflag)
integer, dimension(:), allocatable jdik0
integer, dimension(:), allocatable iadi0
integer, dimension(:), allocatable jdim0
integer, dimension(:), allocatable jdii0
integer, dimension(:), allocatable iadk0
integer, dimension(:), allocatable iadm0
subroutine produt_hp(nddl, x, y, w, r)
subroutine mav_lth0(nddl, nddli, iadl, jdil, diag_k, lt_k, iadi, jdii, itok, lt_i, v, w, a, ar, ve, ms, x, d, dr, ndof, ipari, intbuf_tab, num_imp, ns_imp, ne_imp, nsrem, nsl, ibfv, skew, xframe, monvol, volmon, igrsurf, fr_mv, nmonv, imonv, index2, xi_c, iupd, irbe3, lrbe3, irbe2, lrbe2, f_ddl, l_ddl, itask)
subroutine recudis(nddl, iddl, ndof, ikc, lx, d, dr, inloc)
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)