15 & CNTXT_PAR,LOCAL_M,LOCAL_N,MBLOCK,NBLOCK,
16 & IPIV,LPIV,MASTER_ROOT,MYID,COMM,
17 & RHS_SEQ,SIZE_ROOT,A,INFO,MTYPE,LDLT )
20 INTEGER DESCA_PAR( 9 )
21 INTEGER LOCAL_M, LOCAL_N, MBLOCK, NBLOCK
22 INTEGER CNTXT_PAR, MASTER_ROOT, SIZE_ROOT
24 INTEGER LPIV, IPIV( LPIV )
25 INTEGER INFO(80), LDLT
26 DOUBLE PRECISION RHS_SEQ( SIZE_ROOT *NRHS)
27 DOUBLE PRECISION A( LOCAL_M, LOCAL_N )
28 INTEGER IERR, NPROW, NPCOL, MYROW, MYCOL
30 DOUBLE PRECISION,
ALLOCATABLE,
DIMENSION( :,: ) ::RHS_PAR
35 local_n_rhs = numroc(nrhs, nblock, mycol, 0, npcol)
36 local_n_rhs =
max(1,local_n_rhs)
37 ALLOCATE(rhs_par(local_m, local_n_rhs),stat=allocok)
38 IF (allocok > 0 )
THEN
39 WRITE(*,*)
' Problem during solve of the root.'
40 WRITE(*,*)
' Reduce number of right hand sides.'
44 & local_m, local_n_rhs,
45 & mblock, nblock, rhs_par, master_root,
46 & nprow, npcol, comm )
48 & a, desca_par, local_m, local_n, local_n_rhs,
49 & ipiv, lpiv, rhs_par, ldlt,
50 & mblock, nblock, cntxt_par,
53 & rhs_seq, local_m, local_n_rhs,
54 & mblock, nblock, rhs_par, master_root,
55 & nprow, npcol, comm )
60 & A, DESCA_PAR, LOCAL_M, LOCAL_N, LOCAL_N_RHS,
61 & IPIV, LPIV, RHS_PAR, LDLT,
62 & MBLOCK, NBLOCK, CNTXT_PAR,
65 INTEGER,
intent (in) :: SIZE_ROOT, NRHS, LDLT, LOCAL_M,
66 & local_n, local_n_rhs,
67 & mblock, nblock, cntxt_par, mtype
68 INTEGER,
intent (in) :: DESCA_PAR( 9 )
69 INTEGER,
intent (in) :: LPIV, IPIV( LPIV )
70 DOUBLE PRECISION,
intent (in) :: A( LOCAL_M, LOCAL_N )
71 DOUBLE PRECISION,
intent (inout) :: RHS_PAR(LOCAL_M, LOCAL_N_RHS)
72 INTEGER,
intent (out) :: IERR
73 INTEGER :: DESCB_PAR( 9 )
76 & nrhs, mblock, nblock, 0, 0,
77 & cntxt_par, local_m, ierr )
79 WRITE(*,*)
'After DESCINIT, IERR = ', ierr
82 IF ( ldlt .eq. 0 .OR. ldlt .eq. 2 )
THEN
83 IF ( mtype .eq. 1 )
THEN
84 CALL pdgetrs(
'N',size_root,nrhs,a,1,1,desca_par,ipiv,
85 & rhs_par,1,1,descb_par,ierr)
87 CALL pdgetrs(
'T',size_root,nrhs,a,1,1,desca_par,ipiv,
88 & rhs_par, 1, 1, descb_par,ierr)
91 CALL pdpotrs(
'L', size_root, nrhs, a, 1, 1, desca_par,
92 & rhs_par, 1, 1, descb_par, ierr )
94 IF ( ierr .LT. 0 )
THEN
95 WRITE(*,*)
' Problem during solve of the root'
subroutine dmumps_root_solve(nrhs, desca_par, cntxt_par, local_m, local_n, mblock, nblock, ipiv, lpiv, master_root, myid, comm, rhs_seq, size_root, a, info, mtype, ldlt)
subroutine dmumps_solve_2d_bcyclic(size_root, nrhs, mtype, a, desca_par, local_m, local_n, local_n_rhs, ipiv, lpiv, rhs_par, ldlt, mblock, nblock, cntxt_par, ierr)
subroutine dmumps_scatter_root(myid, m, n, aseq, local_m, local_n, mblock, nblock, apar, master_root, nprow, npcol, comm)
subroutine dmumps_gather_root(myid, m, n, aseq, local_m, local_n, mblock, nblock, apar, master_root, nprow, npcol, comm)
subroutine pdgetrs(trans, n, nrhs, a, ia, ja, desca, ipiv, b, ib, jb, descb, info)
subroutine pdpotrs(uplo, n, nrhs, a, ia, ja, desca, b, ib, jb, descb, info)
subroutine descinit(desc, m, n, mb, nb, irsrc, icsrc, ictxt, lld, info)
subroutine blacs_gridinfo(cntxt, nprow, npcol, myrow, mycol)
integer function numroc(n, nb, iproc, isrcproc, nprocs)