34 2 MAS ,IADLL ,LLL ,JLL ,XLL ,
35 3 IADH ,JCIH ,HH ,Z ,P ,
36 4 R ,Q ,LTSM ,HL ,DIAG_H,
37 5 DIAG_L,WORK1 ,WORK2 ,WORK3 ,LAMBDA,
38 6 RBYL ,NPBYL ,AR ,VR ,IN ,
39 7 IADHF ,JCIHF ,ICFTAG,JCFTAG,NCF_S ,
44#include "implicit_f.inc"
55 INTEGER NC,NCR,NCF_S,NCF_E,NH
56 INTEGER LLL(*),JLL(*),IADLL(*),IADH(*),JCIH(*),IADHF(*),
57 . JCIHF(*),NPBYL(NNPBY,*),WORK2(*),WORK3(*),
68 INTEGER ,J,,IC,JC,IH,IP,ITER,NITER,ITERMAX,NIN,LENH
70 . AS,,ALPHA,BETA,R2,R2NEW,RNORM,PQ,HIJ,SCALE,DD
179 2 diag_h ,hh ,iadll ,lll ,jll ,
180 3 xll ,ltsm ,iadhf ,jcihf ,iadh ,
181 4 jcih ,rbyl ,npbyl ,icftag ,jcftag ,
182 5 ncf_s ,ncf_e ,ncr )
192 dd = dd + diag_h(ic)*diag_h(ic)
197 ELSEIF (lagopt==2)
THEN
199 z(ic) = diag_h(ic)*diag_h(ic)
202 DO ih=iadh(ic),iadh(ic+1)-1
213 z(ic) = scale/sqrt(sqrt(z(ic)))
217 diag_h(ic) = diag_h(ic)*z(ic)*z(ic)
218 DO ih=iadh(ic),iadh(ic+1)-1
219 hh(ih) = hh(ih)*z(ic)*z(jcih(ih))
224 DO ik=iadll(ic),iadll(ic+1)-1
225 xll(ik) = xll(ik)*z(ic)
236 IF (lag_alphs==zero)
THEN
238 diag_l(ic) = diag_h(ic)
242 diag_l(ic) = diag_h(ic) + lag_alphs
250 ip = cholfact(nc,diag_l,hl,iadh,jcih,work1,work2,work3)
251 niter_chl = niter_chl+1
253 as = alpha + lag_alphs
256 WRITE(iout,*)
'***WARNING (LAGMULT : FACTORISATION FAILED )'
257 WRITE(istdo,*)
'***WARNING (LAGMULT : FACTORISATION FAILED )'
260 diag_l(ic) = diag_h(ic) + alpha + lag_alphs
264 IF (niter_chl>1) print*,
'FACTOR ITERATIONS = ',niter_chl
270 DO ik=iadll(ic),iadll(ic+1)-1
275 r(ic) = r(ic) + xll(ik)*(vr(j,i)/dt12+ar(j,i))
277 r(ic) = r(ic) + xll(ik)*(v(j,i)/dt12+a(j,i))
284 rnorm = rnorm + r(ic)*r(ic)
289 r(ic) = r(ic) - diag_h(ic)*p(ic)
290 DO ih=iadh(ic),iadh(ic+1)-1
292 r(ic) = r(ic) - hh(ih)*p(jc)
293 r(jc) = r(jc) - hh(ih)*p(ic)
302 DO WHILE(iter<itermax)
310 CALL prechol(z,diag_l,hl,r,nc,iadh,jcih)
311 ELSEIF(lagmod==2)
THEN
314 z(ic) = r(ic) + r(ic)
317 z(ic) = z(ic) - diag_h(ic)*r(ic)
318 DO ih=iadh(ic),iadh(ic+1)-1
320 z(ic) = z(ic) - hh(ih)*r(jc)
321 z(jc) = z(jc) - hh(ih)*r(ic)
329 r2new = r2new + r(ic)*z(ic)
340 p(ic) = z(ic) + beta*p(ic)
347 q(ic) = q(ic) + diag_h(ic)*p(ic)
348 DO ih=iadh(ic),iadh(ic+1)-1
350 q(ic) = q(ic) + hh(ih)*p(jc)
351 q(jc) = q(jc) + hh(ih)*p(ic)
359 pq = pq + p(ic)*q(ic)
368 lambda(ic) = lambda(ic) + alpha*p(ic)
369 r(ic) = r(ic) - alpha*q(ic)
370 lag_ersq2 = lag_ersq2 + r(ic)*r(ic)
373 lag_ersq2 = lag_ersq2/
max(em30,rnorm)
374 IF(lag_ersq2<lagm_tol)
THEN
387 DO ik=iadll(ic),iadll(ic+1)-1
390 xll(ik) = xll(ik)*lambda(ic)
393 ar(j,i) = ar(j,i) - xll(ik)/in(i)
395 a(j,i) = a(j,i) - xll(ik)/mas(i)
413 1 NH ,NC ,NCR ,A ,V ,
414 2 MAS ,IADLL ,LLL ,JLL ,XLL ,
415 3 IADH ,JCIH ,HH ,Z ,P ,
416 4 R ,Q ,LTSM ,HL ,DIAG_H,
417 5 DIAG_L,WORK1 ,WORK2 ,WORK3 ,LAMBDA,
418 6 RBYL ,NPBYL ,AR ,VR ,IN ,
419 7 IADHF ,JCIHF ,ICFTAG,JCFTAG,NCF_S ,
424#include "implicit_f.inc"
428#include "param_c.inc"
429#include "lagmult.inc"
430#include "com08_c.inc"
431#include "units_c.inc"
435 INTEGER NC,NCR,NCF_S,NCF_E,NH
436 INTEGER LLL(*),JLL(*),IADLL(*),IADH(*),JCIH(*),IADHF(*),
437 . JCIHF(*),NPBYL(NNPBY,*),WORK2(*),WORK3(*),
438 . ICFTAG(*),JCFTAG(*), INDEXLAG(*)
441 . MAS(*),IN(*), A(3,*),(3,*),V(3,*),VR(3,*),
442 . XLL(*),P(*),R(*),Q(*),LAMBDA(*),RBYL(NRBY
448 INTEGER I,J,IK,IC,JC,IH,IP,ITER,NITER,ITERMAX,NIN,LENH,
451 . as,asmax,
alpha,beta,r2,r2new,rnorm,pq,hij,scale,dd
560 2 diag_h ,hh ,iadll ,lll ,jll ,
561 3 xll ,ltsm ,iadhf ,jcihf ,iadh ,
562 4 jcih ,rbyl ,npbyl ,icftag ,jcftag ,
563 5 ncf_s ,ncf_e ,ncr ,indexlag)
573 dd = dd + diag_h(ic)*diag_h(ic)
578 ELSEIF (lagopt==2)
THEN
580 z(ic) = diag_h(ic)*diag_h(ic)
583 DO ih=iadh(ic),iadh(ic+1)-1
594 z(ic) = scale/sqrt(sqrt(z(ic)))
598 diag_h(ic) = diag_h(ic)*z(ic)*z(ic)
599 DO ih=iadh(ic),iadh(ic+1)-1
600 hh(ih) = hh(ih)*z(ic)*z(jcih(ih))
605 DO ik=iadll(ic),iadll(ic+1)-1
606 xll(ik) = xll(ik)*z(ic)
617 IF (lag_alphs==zero)
THEN
619 diag_l(ic) = diag_h(ic)
623 diag_l(ic) = diag_h(ic) + lag_alphs
631 ip = cholfact(nc,diag_l,hl,iadh,jcih,work1,work2,work3)
632 niter_chl = niter_chl+1
634 as =
alpha + lag_alphs
637 WRITE(iout,*)
'***WARNING (LAGMULT : FACTORISATION FAILED )'
638 WRITE(istdo,*)
'***WARNING (LAGMULT : FACTORISATION FAILED )'
641 diag_l(ic) = diag_h(ic) +
alpha + lag_alphs
645 IF (niter_chl>1) print*,
'FACTOR ITERATIONS = ',niter_chl
651 DO ik=iadll(ic),iadll(ic+1)-1
652 i = indexlag(lll(ik))
656 r(ic) = r(ic) + xll(ik)*(vr(j,i)/dt12+ar(j,i))
658 r(ic) = r(ic) + xll(ik)*(v(j,i)/dt12+a(j,i))
665 rnorm = rnorm + r(ic)*r(ic)
670 r(ic) = r(ic) - diag_h(ic)*p(ic)
671 DO ih=iadh(ic),iadh(ic+1)-1
673 r(ic) = r(ic) - hh(ih)*p(jc)
674 r(jc) = r(jc) - hh(ih)*p(ic)
682 DO WHILE(iter<itermax)
691 ELSEIF(lagmod==2)
THEN
694 z(ic) = r(ic) + r(ic)
697 z(ic) = z(ic) - diag_h(ic)*r(ic)
698 DO ih=iadh(ic),iadh(ic+1)-1
700 z(ic) = z(ic) - hh(ih)*r(jc)
701 z(jc) = z(jc) - hh(ih)*r(ic)
709 r2new = r2new + r(ic)*z(ic)
720 p(ic) = z(ic) + beta*p(ic)
727 q(ic) = q(ic) + diag_h(ic)*p(ic)
728 DO ih=iadh(ic),iadh(ic+1)-1
730 q(ic) = q(ic) + hh(ih)*p(jc)
731 q(jc) = q(jc) + hh(ih)*p(ic)
739 pq = pq + p(ic)*q(ic)
748 lambda(ic) = lambda(ic) +
alpha*p(ic)
749 r(ic) = r(ic) -
alpha*q(ic)
750 lag_ersq2 = lag_ersq2 + r(ic)*r(ic)
753 lag_ersq2 = lag_ersq2/
max(em30,rnorm)
754 IF(lag_ersq2<lagm_tol)
THEN
767 DO ik=iadll(ic),iadll(ic+1)-1
768 i = indexlag(lll(ik))
770 xll(ik) = xll(ik)*lambda(ic)
773 ar(j,i) = ar(j,i) - xll(ik)/in(i)
775 a(j,i) = a(j,i) - xll(ik)/mas(i)
794 1 NH ,NC ,NCR ,A ,V ,
795 2 MAS ,IADLL ,LLL ,JLL ,XLL ,
796 3 IADH ,JCIH ,HH ,Z ,P ,
797 4 R ,Q ,LTSM ,HL ,DIAG_H,
798 5 DIAG_L,WORK1 ,WORK2 ,WORK3 ,LAMBDA,
799 6 RBYL ,NPBYL ,AR ,VR ,IN ,
800 7 IADHF ,JCIHF ,ICFTAG,JCFTAG,NCF_S ,
805#include "implicit_f.inc"
809#include "param_c.inc"
811#include "com08_c.inc"
813#include "dmumps_struc.h"
814#include "lagmult.inc"
819 INTEGER NC,NCR,NCF_S,NCF_E,NH
820 INTEGER LLL(*),JLL(*),IADLL(*),IADH(*),JCIH(*),IADHF(*),
821 . JCIHF(*),NPBYL(NNPBY,*),WORK2(*),WORK3(*),
822 . ICFTAG(*),JCFTAG(*), INDEXLAG(*)
824 . MAS(*),(*), A(3,*),AR(3,*),V(3,*),VR(3,*),
825 . XLL(*),P(*),R(*),Q(*),LAMBDA(*),RBYL(NRBY,*),
826 . (6,*),Z(*),HH(*),HL(*),DIAG_H(*),DIAG_L(*),
831 INTEGER I,J,IK,IC,,IH,IP,ITER,,ITERMAX,NIN,LENH,NZ
833 . AS,ASMAX,ALPHA,BETA,R2,R2NEW,RNORM,PQ,HIJ,SCALE,DD
835 type(dmumps_struc)::MUMPS_PAR
947 2 diag_h ,hh ,iadll ,lll ,jll ,
948 3 xll ,ltsm ,iadhf ,jcihf ,iadh ,
949 4 jcih ,rbyl ,npbyl ,icftag ,jcftag ,
950 5 ncf_s ,ncf_e ,ncr ,indexlag)
960 dd = dd + diag_h(ic)*diag_h(ic)
965 ELSEIF (lagopt==2)
THEN
967 z(ic) = diag_h(ic)*diag_h(ic)
970 DO ih=iadh(ic),iadh(ic+1)-1
981 z(ic) = scale/sqrt(sqrt(z(ic)))
985 diag_h(ic) = diag_h(ic)*z(ic)*z(ic)
986 DO ih=iadh(ic),iadh(ic+1)-1
987 hh(ih) = hh(ih)*z(ic)*z(jcih(ih))
992 DO ik=iadll(ic),iadll(ic+1)-1
993 xll(ik) = xll(ik)*z(ic)
1042 mumps_par%ICNTL(18) = 0
1044 mumps_par%ICNTL(3)=-1 ! ou iout par exemple si sorties voulues
1047 mumps_par%NZ = nc+iadh(nc+1)-1
1048 ALLOCATE(mumps_par%A(mumps_par%NZ))
1049 ALLOCATE(mumps_par%IRN(mumps_par%NZ))
1050 ALLOCATE(mumps_par%JCN(mumps_par%NZ))
1052 mumps_par%A(ic) = diag_h(ic)
1053 mumps_par%IRN(ic)=ic
1054 mumps_par%JCN(ic)=ic
1058 DO ih=iadh(ic),iadh(ic+1)-1
1060 mumps_par%A(nz) = hh(ih)
1061 mumps_par%IRN(nz)=ic
1062 mumps_par%JCN(nz)=jcih(ih)
1070 DO ik=iadll(ic),iadll(ic+1)-1
1075 r(ic) = r(ic) + xll(ik)*(vr(j,i)/dt12+ar(j,i))
1077 r(ic) = r(ic) + xll(ik)*(v(j,i)/dt12+a(j,i))
1081 ALLOCATE(mumps_par%RHS(mumps_par%N))
1083 mumps_par%RHS(ic) = r(ic)
1097 lambda(ic) = mumps_par%RHS(ic)
1210 DO ik=iadll(ic),iadll(ic+1)-1
1211 i = indexlag(lll(ik))
1213 xll(ik) = xll(ik)*lambda(ic)
1216 ar(j,i) = ar(j,i) - xll(ik)/in(i)
1218 a(j,i) = a(j,i) - xll(ik)/mas(i)
1224 write(6,*)
"Error: this feature requires the MUMPS library "
subroutine lag_mult_hp(nc, lenh, lhmax, ms, in, diag, hh, iadll, lll, jll, xll, ltsm, iadhf, jcihf, iadh, jcih, rbyl, npbyl, icftag, jcftag, ncf_s, ncf_e, ncr, indexlag)
subroutine lag_mult_h(nc, lenh, lhmax, ms, in, diag, hh, iadll, lll, jll, xll, ltsm, iadhf, jcihf, iadh, jcih, rbyl, npbyl, icftag, jcftag, ncf_s, ncf_e, ncr)
subroutine lag_mult_solvp(nh, nc, ncr, a, v, mas, iadll, lll, jll, xll, iadh, jcih, hh, z, p, r, q, ltsm, hl, diag_h, diag_l, work1, work2, work3, lambda, rbyl, npbyl, ar, vr, in, iadhf, jcihf, icftag, jcftag, ncf_s, ncf_e, indexlag)
subroutine lag_mult_sdp(nh, nc, ncr, a, v, mas, iadll, lll, jll, xll, iadh, jcih, hh, z, p, r, q, ltsm, hl, diag_h, diag_l, work1, work2, work3, lambda, rbyl, npbyl, ar, vr, in, iadhf, jcihf, icftag, jcftag, ncf_s, ncf_e, indexlag)
subroutine lag_mult_solv(nh, nc, ncr, a, v, mas, iadll, lll, jll, xll, iadh, jcih, hh, z, p, r, q, ltsm, hl, diag_h, diag_l, work1, work2, work3, lambda, rbyl, npbyl, ar, vr, in, iadhf, jcihf, icftag, jcftag, ncf_s, ncf_e)