53 SUBROUTINE nl_solv(NDDL ,IDDL ,NDOF ,IKC ,D ,
54 1 DR ,NNZ ,IADK ,JDIK ,DIAG_K,
55 2 LT_K ,F ,NDDLI ,IADI ,JDII ,
56 3 DIAG_I,LT_I ,ITOK ,IADM ,JDIM ,
57 4 DIAG_M,LT_M ,R02 ,DD ,DDR ,
58 5 ITASK0,IT ,ITC ,RU0 ,ROLD ,
59 6 IDIV ,INPRINT,ICPREC,ISTOP ,E02 ,
60 7 DE0 ,EIMP ,INLOC ,NDDL0 ,LS ,
61 8 U02 ,GAP ,ITAB ,FR_ELEM,IAD_ELEM,
62 9 W_DDL,A ,AR ,V ,MS ,
63 A X ,IPARI ,INTBUF_TAB ,NUM_IMP,
64 B NS_IMP,NE_IMP,NSREM ,NSL ,ICONT ,
65 C GRAPHE,FAC_K, IPIV_K, NK ,NMONV ,
66 D IMONV ,MONVOL,IGRSURF,FR_MV ,
67 E VOLMON,IBFV ,SKEW ,XFRAME,MUMPS_PAR,
68 F CDDLP ,IND_IMP,NBINTC,INTLIST,NEWFRONT,
69 G ISENDTO,IRECVFROM,IRBE3 ,LRBE3,NDIV ,
70 H ICONT0 ,ISIGN ,FEXT ,DG ,DGR ,
71 I DG0 ,DGR0 ,RFEXT ,LS1 ,NODFT ,
72 J NODLT ,IRBE2 ,LRBE2 ,IDIV0,
83#include "implicit_f.inc"
88#include "dmumps_struc.h"
101 INTEGER NDDL ,NNZ ,IADK(*),JDIK(*),IADM(*),JDIM(*),ITASK0,
102 . NDDLI ,IADI(*),JDII(*),ITOK(*),ICPREC,INLOC(*),
103 . NDOF(*),IDDL(*),IKC(*),IDIV ,INPRINT,ISTOP,
104 . IT,ITC,NDDL0,ITAB(*),FR_ELEM(*),IAD_ELEM(*),W_DDL(*)
105 INTEGER NE_IMP(*),NSREM ,NSL,ICONT,ISIGN,IMP1,
106 . IPARI(*) ,NUM_IMP(*),NS_IMP(*), IPIV_K(*), NK
107 INTEGER NMONV,IMONV(*),MONVOL(*),FR_MV(*),
108 . IBFV(*),IND_IMP(*),IRBE3(*) ,LRBE3(*), ,ICONT0,
110 INTEGER NEWFRONT(*),NBINTC,INTLIST(*),ISENDTO(*),IRECVFROM(*),
114 . DIAG_K(*),LT_K(*),F(*),R02,DIAG_M(*),LT_M(*),
115 . DIAG_I(*),LT_I(*),D(3,*),DR(3,*),DD(3,*),DDR(3,*),
116 . RU0,ROLD,E02 ,EIMP,LSTOL,DE0,LS(*),U02,GAP,RBID
118 . (3,*),AR(3,*),V(3,*),X(3,*),MS(*),FAC_K(*),
119 . VOLMON(*),SKEW(*),XFRAME(*),FEXT(*),DG(3,*),DGR(3,*),
120 . DG0(3,*),DGR0(3,*),LS1(*) ,RFEXT, RELRES(*)
124 TYPE(INTBUF_STRUCT_) INTBUF_TAB(*)
125 TYPE (SURF_) ,
DIMENSION(NSURF) :: IGRSURF
140 INTEGER I ,J ,ND,IP,ITMP,ICOV,ICALU,IER,ISETK0
144 . r2,u2,du2,tol,rr,ru,temp,fr,re,de,r1,nl_tol,r01,rr1,
145 . gapn,lamda,fa,uc2,um1,um2,pmax
168 IF (nitol==3.OR.nitol==13.OR.nitol==23
169 . .OR.nitol==123)
THEN
175 IF (ncycle>1.AND.idtc==3)
THEN
176 IF (ilast==0) iriks=1
182 IF (icont>0) gapn=gap*zep9
183 IF (imconv>=0) icont0=icont
191 IF (r01*nl_tol<=em12.AND.nl_tol>em10.AND.idiv/=10)
THEN
192 IF (irefi/=5.OR.icont==0)
THEN
196 WRITE(iout,1108)it,anew_stif,re,r01,re
201 WRITE(istdo,1108)it,anew_stif,re,r01,re
216 IF (insolv==4) icov = imconv
221 IF (insolv==2.OR.insolv==3)
CALL bfgs_0
223 IF (ncycle==1) isign = 1
225 CALL lin_solv(nddl ,iddl ,ndof ,ikc ,dg ,
226 1 dgr ,tol ,nnz ,iadk ,jdik ,
227 2 diag_k,lt_k ,nddli ,iadi ,jdii ,
228 3 diag_i,lt_i ,itok ,iadm ,jdim ,
229 4 diag_m,lt_m ,fext ,de ,inloc ,
230 5 fr_elem,iad_elem,w_ddl,itask0,icprec,
232 7 ms ,x ,ipari ,intbuf_tab ,
233 8 num_imp,ns_imp,ne_imp,nsrem ,nsl ,
234 9 itc ,graphe, itab, fac_k, ipiv_k,
235 a nk ,nmonv,imonv ,monvol,igrsurf,
236 b fr_mv ,volmon,ibfv ,skew ,
237 c xframe ,mumps_par,cddlp,ind_imp,rbid,
238 e irbe3 ,lrbe3 ,irbe2 ,lrbe2 )
241 CALL produt_uhp(nddl0 ,nddl ,iddl ,ndof ,ikc ,
242 . dg ,dgr ,u2 ,w_ddl )
247 IF (iroddl/=0)
CALL cp_real(nd,ddr,dgr0)
253 . dg ,dgr ,dg0 ,dgr0 ,uc2 ,
259 CALL get_max(numnod,dg0,temp,i)
261 CALL get_max(numnod,dgr0,temp,i)
262 um1=
max(um1,temp,em20)
265 CALL get_max(numnod,dgr,temp,i)
266 um2=
max(um2,temp,em20)
269 IF ((uc2+dla_riks/rfext)<zero)
THEN
276 IF (ncycle>=ndeb0.AND.ncycle<=ndeb1)
277 .
WRITE(iout,1025)uc2,dla_riks,isign
280 dla_riks = 2*isign*dt2
291 IF (idiv/=-2.AND.icont==0)
THEN
293 . dd ,ddr ,f ,de ,w_ddl )
296 CALL frac_dd_hp(iddl,ndof,ikc,d,dr,dg,dgr,lamda)
298 . d ,dr ,f ,de ,w_ddl )
302 IF ((n_lim /= 1.OR.isprb /= 0).AND.
303 . (ncycle>1.AND.idiv/=-2.AND.icont==0.AND.ikt==0
304 . .OR.(ncycle==1.AND.idiv==10)))
THEN
305 IF (idtc==3.AND.ilast==1)
THEN
308 CALL frac_d_hp(iddl,ndof,ikc,dd,ddr,lamda)
311 . dd ,ddr ,f ,de ,w_ddl )
313 IF (insolv==4.AND.icov>=0) imconv=-1
315 CALL lin_solv(nddl ,iddl ,ndof ,ikc ,dd ,
316 1 ddr ,tol ,nnz ,iadk ,jdik ,
317 2 diag_k,lt_k ,nddli ,iadi ,jdii ,
318 3 diag_i,lt_i ,itok ,iadm ,jdim ,
319 4 diag_m,lt_m ,f ,de ,inloc ,
320 5 fr_elem,iad_elem,w_ddl,itask0,icprec,
322 7 ms ,x ,ipari ,intbuf_tab ,
323 8 num_imp,ns_imp,ne_imp,nsrem ,nsl ,
324 9 itc ,graphe, itab, fac_k, ipiv_k,
325 a nk ,nmonv,imonv ,monvol
326 b fr_mv ,volmon,ibfv ,skew ,
327 c xframe ,mumps_par,cddlp,ind_imp,rbid,
328 e irbe3 ,lrbe3 ,irbe2 ,lrbe2 )
329 IF (de<zero.AND.irefi>1.AND.irefi<5) imconv=-2
330 IF (icont>0.AND.idsgap>0)
THEN
337 CALL frac_d_hp(iddl,ndof,ikc,dd,ddr,temp)
350 CALL produt_uhp(nddl0 ,nddl ,iddl ,ndof ,ikc ,
353 IF (de>ep10.AND.iline==0.AND.idyna==0
354 . .AND.ncycle==1)
THEN
357 WRITE(istdo,1030)eimp
368 WRITE(iout,1003)it,anew_stif,ru,r01,eimp
373 WRITE(istdo,1003)it,anew_stif,ru,r01,eimp
393 IF (iriks>0.AND.dla_riks/=zero)
THEN
394 CALL vaxpy_hp(nddl, f ,fext,dla_riks)
400 IF (r2>=zero.AND.r2<ep30)
THEN
402 IF (it==1.AND.isprb==1.AND.idiv/=-2)
THEN
405 IF (icont>0.AND.rr<one) rr1=rr
412 ELSEIF (icalu>0)
THEN
413 CALL produt_uhp(nddl0 ,nddl ,iddl ,ndof ,ikc ,
415 CALL produt_uhp(nddl0 ,nddl ,iddl ,ndof ,ikc ,
416 . dd ,ddr ,du2 ,w_ddl )
420 ru=ls(3)*sqrt(du2/u2)
421 IF (insolv==5) ru=sqrt(du2/u2)
423 CALL crit_ite(it,ru,rr1,re,ndiv,nl_tol)
432 IF (ncycle==1.OR.idiv==-2) imconv=-2
452 IF (it>1.AND.icalu==0)
THEN
453 CALL produt_uhp(nddl0 ,nddl ,iddl ,ndof ,ikc ,
455 CALL produt_uhp(nddl0 ,nddl ,iddl ,ndof ,ikc ,
456 . dd ,ddr ,du2 ,w_ddl )
460 ru=ls(3)*sqrt(du2/u2)
462 ELSEIF (idtc>=2)
THEN
463 CALL produt_uhp(nddl0 ,nddl ,iddl ,ndof ,ikc ,
464 . d ,dr ,u02 ,w_ddl )
473 WRITE(iout,1108)it,anew_stif,ru,rr,re
478 WRITE(istdo,1108)it,anew_stif,ru,rr,re
485 ELSEIF(imconv<=-2)
THEN
492 ELSEIF(it>nl_dtn)
THEN
502 ELSEIF(it>nl_dtn)
THEN
511 IF(inprint<0)
WRITE(istdo,1012)
520 IF (iline_s>0.AND.isign>=0.AND.irwall==0)
THEN
522 IF (nitol/=2.AND.nitol/=4.OR.iline_s==1)
THEN
524 IF (ls1(3)/=zero )
THEN
528 . dd ,ddr ,f ,de ,w_ddl )
537 IF (rr>one.AND.irefi>=2) r1=ls(1)
549 CALL line_s(ls(1),ls(2),r1,fr,lstol,idiv,icont,temp)
550 ELSEIF (iline_s==1)
THEN
551 CALL line_s1(r1,fr,ls(1),ls(2),ls1(1),ls1(2),idiv,lstol,
552 . icont,icont0,iriks)
553 ELSEIF (iline_s==2)
THEN
554 CALL line_s(ls(1),ls(2),r1,fr,lstol,idiv,icont,temp)
556 IF (impdeb>0.AND.ispmd==0)
THEN
557 IF (ncycle>=ndeb0.AND.ncycle<=ndeb1)
then
558 WRITE(iout,*)
'R1,FR,IDIV=',r1,fr,idiv
568 IF ((insolv==2.OR.insolv==3).AND.fr>one.AND.ikt==0)
578 CALL produt_uhp(nddl0 ,nddl ,iddl ,ndof ,ikc ,
580 CALL produt_uhp(nddl0 ,nddl ,iddl ,ndof ,ikc ,
581 . dd ,ddr ,du2 ,w_ddl )
585 ru=ls(3)*sqrt(du2/u2)
590 IF (insolv==2.OR.insolv==3)
CALL bfgs_ls(ls(3))
597 IF(mod(it,ip)==0)
THEN
599 WRITE(iout,1003)it,anew_stif,ru,rr,re
602 WRITE(istdo,1003)it,anew_stif,ru,rr,re
609 IF(itc>=n_lim.AND.ismdisp==0)
THEN
627 CALL lin_solv(nddl ,iddl ,ndof ,ikc ,dg ,
628 1 dgr ,tol ,nnz ,iadk ,jdik ,
629 2 diag_k,lt_k ,nddli ,iadi ,jdii ,
630 3 diag_i,lt_i ,itok ,iadm ,jdim ,
631 4 diag_m,lt_m ,fext ,de ,inloc ,
632 5 fr_elem,iad_elem,w_ddl,itask0,icprec,
635 8 num_imp,ns_imp,ne_imp,nsrem ,nsl ,
636 9 itc ,graphe, itab, fac_k, ipiv_k,
637 a nk ,nmonv,imonv ,monvol,igrsurf,
638 b fr_mv ,volmon,ibfv ,skew ,
639 c xframe ,mumps_par,cddlp,ind_imp,rbid,
640 e irbe3 ,lrbe3 ,irbe2 ,lrbe2 )
645 . dg ,dgr ,f ,um1 ,w_ddl )
648 CALL lin_solv(nddl ,iddl ,ndof ,ikc ,dd ,
649 1 ddr ,tol ,nnz ,iadk ,jdik ,
650 2 diag_k,lt_k ,nddli ,iadi ,jdii ,
651 3 diag_i,lt_i ,itok ,iadm ,jdim ,
652 4 diag_m,lt_m ,f ,de ,inloc ,
653 5 fr_elem,iad_elem,w_ddl,itask0,icprec,
655 7 ms ,x ,ipari ,intbuf_tab ,
656 8 num_imp,ns_imp,ne_imp,nsrem
657 9 itc ,graphe, itab, fac_k, ipiv_k,
658 a nk ,nmonv,imonv ,monvol,igrsurf,
659 b fr_mv ,volmon,ibfv ,skew ,
660 c xframe ,mumps_par,cddlp,ind_imp,rbid,
661 d irbe3 ,lrbe3 ,irbe2 ,lrbe2 )
662 IF (icont>0.AND.idsgap>0)
THEN
669 CALL frac_d_hp(iddl,ndof,ikc,dd,ddr,temp)
681 . dd ,ddr ,dg ,dgr ,d ,
682 . dr ,w_ddl ,alen ,lamda ,scal_riks,
700 ELSEIF (ial_m==2)
THEN
702 . dd ,ddr ,dg ,dgr ,d ,
703 . dr ,w_ddl ,alen ,lamda ,scal_riks)
709 CALL frac_dd_hp(iddl,ndof,ikc,d ,dr ,dg,dgr,lamda)
711 dla_riks = dla_riks + lamda
712 eimp=eimp+dla_riks*um1
724 ELSEIF(imconv==-1)
THEN
727 CALL frac_dd_hp(iddl,ndof,ikc,d,dr,dd,ddr,temp)
740 IF (abs(de0)<em20) de0=em20
745 IF (itc>=n_lim.AND.imconv>=0)
THEN
749 IF (itc==0.AND.imconv>=0)
THEN
750 IF (ncycle==1.OR.n_lim==1) isetk=1
751 IF (isolv==5.OR.isolv==6) isetk=1
753 IF (irwall >0 .AND.imconv == 1) isetk=1
754 IF ((itc==0.OR.imconv==1).AND.ikt>0) isetk=1
757 IF (itc==0.OR.imconv==1) isetk=1
759 IF ((idtc==3.OR.ikt>0).AND.imconv<=-2) isetk=1
761 IF (imconv<=-2.AND.rr1>ep20.AND.idiv0>=0) isetk=1
762 IF ((istop==1.OR.istop==2).AND.(isolv==5.OR.isolv==6))
THEN
767 IF (imconv<=-2.AND.isprb>0.AND.rr1>ep04) isetk=1
769 IF(imconv<= -2.AND.n_lim == 1 .AND. isprb == 0) isetk = 1
776 1102
FORMAT(3x,78(
'-')/
778 . 6x,
'Iter',2x,
' reformed ',5x,
'|du|/|u|',3x,
'|r|/|r0|',3x,
'|dE|/|E|',1x,
'Conv.stat.'/
781 1003
FORMAT(5x,i5,6x,a1,5x,3(1x,1pe10.3))
782 1005
FORMAT(3x,
'TOLERANCE FOR LINEAR ITERATIVE SOLVER :',2x,e11.4)
783 1006
FORMAT(3x,
'--STIFFNESS MATRIX IS RESET AFTER ',i4,
785 1007
FORMAT(3x,
'--ITERATION DIVERGE with R=',e11.4,2x,
786 .
'STIFFNESS MATRIX WILL BE RESET')
789 1108
FORMAT(5x,i5,6x,a1,5x,3(1x,1pe10.3),5x,
'C')
790 1009
FORMAT(3x,
'--ITERATION DIVERGE with RELATIVE R=',e11.4/,
791 . 3x,
'RESET ITERATION WITH STABILIZATION BY SCALING= ',e11.4)
792 1010
FORMAT(3x,
'--ITERATION DIVERGE with MAX_ITER REACHED--')
793 1011
FORMAT(3x,
'ITERATION DIVERGE with RELATIVE R=',e11.4)
794 1012
FORMAT(3x,
'--RESET ITERATION WITH NEW TIMESTEP--')
795 1013
FORMAT(3x,
'ITERATION DIVERGE with NEGATIVE ENERGY DE=',e11.4)
796 1020
FORMAT(3x,
'--ITERATION DIVERGE with RIKS Method--')
797 1025
FORMAT(3x,
'UC2,DLA_RIKS,ISIGN=',2e11.4,i4)
798 1030
FORMAT(3x,
'CHECK CONSTRAINT CONDITIONS, TOO LARGE ENERGY VALUE=',