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 )
26 REAL RHS_SEQ( SIZE_ROOT *NRHS)
27 REAL A( LOCAL_M, LOCAL_N )
28 INTEGER , NPROW, NPCOL, MYROW, MYCOL
30 REAL,
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 REAL,
intent (in) :: A( LOCAL_M, LOCAL_N )
71 REAL,
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 psgetrs(
'N',size_root,nrhs,a,1,1,desca_par,ipiv,
85 & rhs_par,1,1,descb_par,ierr)
87 CALL psgetrs(
'T',size_root,nrhs,a,1,1,desca_par,ipiv,
88 & rhs_par, 1, 1, descb_par,ierr)
91 CALL pspotrs(
'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 pspotrs(uplo, n, nrhs, a, ia, ja, desca, b, ib, jb, descb, info)
subroutine psgetrs(trans, n, nrhs, a, ia, ja, desca, ipiv, 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)
subroutine smumps_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 smumps_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 smumps_gather_root(myid, m, n, aseq, local_m, local_n, mblock, nblock, apar, master_root, nprow, npcol, comm)
subroutine smumps_scatter_root(myid, m, n, aseq, local_m, local_n, mblock, nblock, apar, master_root, nprow, npcol, comm)