45SUBROUTINE mpslan(n,lrows,npgrp,nsparr)
52 INTEGER(mpi) :: ichunk
56 INTEGER(mpl) :: length
58 INTEGER(mpi),
INTENT(IN) :: n
59 INTEGER(mpi),
DIMENSION(:),
INTENT(IN) :: lrows
60 INTEGER(mpi),
DIMENSION(:),
INTENT(IN) :: npgrp
61 INTEGER(mpl),
DIMENSION(:,:),
INTENT(OUT) :: nsparr
65 print *,
' MPSLAN ',
npar
93 ncol=ncol+npgrp(j+1)-npgrp(j)
98 nsparr(1,i+1)=2*(nrgn+1)
99 nsparr(2,i+1)=ncol*(npgrp(i+1)-npgrp(i))
105 nsparr(2,1)=npgrp(
npar+1)-npgrp(1)
107 nsparr(:,i+1)=nsparr(:,i+1)+nsparr(:,i)
126 INTEGER(mpi) :: ichunk
132 INTEGER(mpi),
DIMENSION(:),
INTENT(IN) :: npgrp
133 INTEGER(mpl),
DIMENSION(:,:),
INTENT(IN) :: nsparr
134 INTEGER(mpi),
DIMENSION(:),
INTENT(OUT) :: nsparc
152 nsparc(kl)=int(ll-l1,mpi)
157 ll=ll+npgrp(j+1)-npgrp(j)
164 nsparc(kl)=int(ll-l1,mpi)
171 WRITE(*,*)
'MPSLSP: skyline structure constructed ',nsparr(1,
npar+1),
' words'
172 WRITE(*,*)
'MPSLSP: dimension parameter of matrix',nsparr(2,1)
173 WRITE(*,*)
'MPSLSP: index of last used location',nsparr(2,
npar+1)
187SUBROUTINE mpsldc(npgrp,nsparr,nsparc,gmat,nsize,nrank,mon)
229 INTEGER(mpi),
DIMENSION(:),
INTENT(IN) :: npgrp
230 INTEGER(mpl),
DIMENSION(:,:),
INTENT(IN) :: nsparr
231 INTEGER(mpi),
DIMENSION(:),
INTENT(IN) :: nsparc
232 REAL(mpd),
DIMENSION(:),
INTENT(INOUT) :: gmat
233 INTEGER(mpi),
INTENT(IN) :: nsize
234 INTEGER(mpi),
INTENT(OUT) :: nrank
235 INTEGER(mpi),
INTENT(IN) :: mon
240 DO WHILE (npgrp(mpg) > nsize)
251 IF(mon>0)
CALL monpgs(mpg+1-ipg)
254 in1=int(nsparr(1,ipg+1)-is1,mpi)
266 jn=nsparc(is1+ik+1)-lj
273 IF (jb < npgrp(jpg+1))
EXIT
285 DO i=min(ib,nsize),ia,-1
287 IF (gmat(i) > 0.0_mpd)
THEN
312 jr=npgrp(nsparc(is1+ik))
314 jn=nsparc(is1+ik+1)-lj
318 jn1=int(nsparr(1,jpg+1)-js1,mpi)
326 ratio=gmat(ii+lj)*gmat(i)
327 IF (ratio == 0.0_mpd) cycle
333 jai=npgrp(nsparc(is1+ikj))
335 jni=nsparc(is1+ikj+1)-nsparc(is1+ikj-1)
339 print *,
' ERROR in skyline structure ', i, j, ipg, jpg
340 print *, nsparc(is1+1:is1+in1)
341 print *, nsparc(js1+1:js1+jn1)
344 jaj=npgrp(nsparc(js1+jk))
345 jnj=nsparc(js1+jk+1)-nsparc(js1+jk-1)
348 IF (jaj <= jai.AND.jbj >= jbi)
EXIT
350 jj=jj+jnj*(npgrp(jpg+1)-npgrp(jpg))
354 ki=iij+(i-ia)*jni-jai
357 gmat(kj+jai:kj+jbi)=gmat(kj+jai:kj+jbi)-gmat(ki+jai:ki+jbi)*ratio
359 IF (jbi == j) gmat(j)=gmat(j)-gmat(ki+jbi)*ratio
372 jn=nsparc(is1+ik+1)-lj
375 gmat(ki+ja:ki+jb)=gmat(ki+ja:ki+jb)*gmat(i)
399 REAL(mpd),
DIMENSION(:),
INTENT(INOUT) :: gvec
400 INTEGER(mpi),
INTENT(iN) :: nfit
405 INTEGER(mpi),
INTENT(in) :: i
406 INTEGER(mpi),
INTENT(in) :: j
413 dsum=dsum-gij(k,i)*gvec(k)
418 dsum=gvec(i)*gij(i,i)
420 dsum=dsum-gij(i,k)*gvec(k)
437SUBROUTINE mpslsv2(npgrp,nsparr,nsparc,gmat,gvec,nsize)
469 INTEGER(mpi),
DIMENSION(:),
INTENT(IN) :: npgrp
470 INTEGER(mpl),
DIMENSION(:,:),
INTENT(IN) :: nsparr
471 INTEGER(mpi),
DIMENSION(:),
INTENT(IN) :: nsparc
472 REAL(mpd),
DIMENSION(:),
INTENT(IN) :: gmat
473 REAL(mpd),
DIMENSION(:),
INTENT(INOUT) :: gvec
474 INTEGER(mpi),
INTENT(IN) :: nsize
479 DO WHILE (npgrp(mpg) > nsize)
482 print *,
' MPSLSV2 ', nsize,
npar, mpg
490 irgn=int(nsparr(1,ipg+1)-nsparr(1,ipg),mpi)/2-1
497 DO i=min(ib,nsize),ia,-1
517 jr=npgrp(nsparc(js1+ik))
519 jn=nsparc(js1+ik+1)-lj
534 ii=jj-jn*(in+ja-jai)-jr+i+1
535 dsum=dsum-dot_product(gmat(ii:jj-js*jn:jn),gvec(jai:jb-js))
549 in1=int(nsparr(1,ipg+1)-is1,mpi)
561 jn=nsparc(is1+ik+1)-lj
568 IF (jb < npgrp(jpg+1))
EXIT
577 DO i=ia,min(ib,nsize)
592 jr=npgrp(nsparc(is1+ik))
594 jn=nsparc(is1+ik+1)-lj
600 dsum=dsum-dot_product(gmat(ii+ja:ii+jbi),gvec(ja:jbi))
subroutine monpgs(i)
Progress monitoring.
subroutine mpslsp(npgrp, nsparr, nsparc)
Analyse skyline stucture.
subroutine mpslsv2(npgrp, nsparr, nsparc, gmat, gvec, nsize)
Backward, forward substitution.
subroutine mpslan(n, lrows, npgrp, nsparr)
Analyse skyline stucture.
subroutine mpslsv(gij, gvec, nfit)
Backward, forward substitution.
subroutine mpsldc(npgrp, nsparr, nsparc, gmat, nsize, nrank, mon)
Cholesky decomposition.
(De)Allocate vectors and arrays.
integer(mpi), dimension(:), allocatable regionoffsets
offsets for parameter group regions (in row)
integer(mpi), dimension(:), allocatable pargroupstoregions
mapping of parameter groups to regions (in row)
integer(mpi) npar
number of parameters
integer(mpi) nthrd
number of threads
integer(mpi), dimension(:), allocatable lastrowincol
last (non-zero) row in column