OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
csol_root_parallel.F
Go to the documentation of this file.
1C
2C This file is part of MUMPS 5.5.1, released
3C on Tue Jul 12 13:17:24 UTC 2022
4C
5C
6C Copyright 1991-2022 CERFACS, CNRS, ENS Lyon, INP Toulouse, Inria,
7C Mumps Technologies, University of Bordeaux.
8C
9C This version of MUMPS is provided to you free of charge. It is
10C released under the CeCILL-C license
11C (see doc/CeCILL-C_V1-en.txt, doc/CeCILL-C_V1-fr.txt, and
12C https://cecill.info/licences/Licence_CeCILL-C_V1-en.html)
13C
14 SUBROUTINE cmumps_root_solve( NRHS, DESCA_PAR,
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 )
18 IMPLICIT NONE
19 INTEGER NRHS, MTYPE
20 INTEGER DESCA_PAR( 9 )
21 INTEGER LOCAL_M, LOCAL_N, MBLOCK, NBLOCK
22 INTEGER CNTXT_PAR, MASTER_ROOT, SIZE_ROOT
23 INTEGER MYID, COMM
24 INTEGER LPIV, IPIV( LPIV )
25 INTEGER INFO(80), LDLT
26 COMPLEX RHS_SEQ( SIZE_ROOT *NRHS)
27 COMPLEX A( LOCAL_M, LOCAL_N )
28 INTEGER IERR, NPROW, NPCOL, MYROW, MYCOL
29 INTEGER LOCAL_N_RHS
30 COMPLEX, ALLOCATABLE, DIMENSION( :,: ) ::RHS_PAR
31 EXTERNAL numroc
32 INTEGER numroc
33 INTEGER allocok
34 CALL blacs_gridinfo( cntxt_par, nprow, npcol, myrow, mycol )
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.'
41 CALL mumps_abort()
42 ENDIF
43 CALL cmumps_scatter_root( myid, size_root, nrhs, rhs_seq,
44 & local_m, local_n_rhs,
45 & mblock, nblock, rhs_par, master_root,
46 & nprow, npcol, comm )
47 CALL cmumps_solve_2d_bcyclic (size_root, nrhs, mtype,
48 & a, desca_par, local_m, local_n, local_n_rhs,
49 & ipiv, lpiv, rhs_par, ldlt,
50 & mblock, nblock, cntxt_par,
51 & ierr)
52 CALL cmumps_gather_root( myid, size_root, nrhs,
53 & rhs_seq, local_m, local_n_rhs,
54 & mblock, nblock, rhs_par, master_root,
55 & nprow, npcol, comm )
56 DEALLOCATE(rhs_par)
57 RETURN
58 END SUBROUTINE cmumps_root_solve
59 SUBROUTINE cmumps_solve_2d_bcyclic (SIZE_ROOT, NRHS, MTYPE,
60 & A, DESCA_PAR, LOCAL_M, LOCAL_N, LOCAL_N_RHS,
61 & IPIV, LPIV, RHS_PAR, LDLT,
62 & MBLOCK, NBLOCK, CNTXT_PAR,
63 & IERR)
64 IMPLICIT NONE
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 COMPLEX, intent (in) :: A( LOCAL_M, LOCAL_N )
71 COMPLEX, intent (inout) :: RHS_PAR(LOCAL_M, LOCAL_N_RHS)
72 INTEGER, intent (out) :: IERR
73 INTEGER :: DESCB_PAR( 9 )
74 IERR = 0
75 CALL descinit( descb_par, size_root,
76 & nrhs, mblock, nblock, 0, 0,
77 & cntxt_par, local_m, ierr )
78 IF (ierr.NE.0) THEN
79 WRITE(*,*) 'After DESCINIT, IERR = ', ierr
80 CALL mumps_abort()
81 END IF
82 IF ( ldlt .eq. 0 .OR. ldlt .eq. 2 ) THEN
83 IF ( mtype .eq. 1 ) THEN
84 CALL pcgetrs('N',size_root,nrhs,a,1,1,desca_par,ipiv,
85 & rhs_par,1,1,descb_par,ierr)
86 ELSE
87 CALL pcgetrs('T',size_root,nrhs,a,1,1,desca_par,ipiv,
88 & rhs_par, 1, 1, descb_par,ierr)
89 END IF
90 ELSE
91 CALL pcpotrs( 'L', size_root, nrhs, a, 1, 1, desca_par,
92 & rhs_par, 1, 1, descb_par, ierr )
93 END IF
94 IF ( ierr .LT. 0 ) THEN
95 WRITE(*,*) ' Problem during solve of the root'
96 CALL mumps_abort()
97 END IF
98 RETURN
99 END SUBROUTINE cmumps_solve_2d_bcyclic
#define mumps_abort
Definition VE_Metis.h:25
subroutine cmumps_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 cmumps_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 cmumps_scatter_root(myid, m, n, aseq, local_m, local_n, mblock, nblock, apar, master_root, nprow, npcol, comm)
subroutine cmumps_gather_root(myid, m, n, aseq, local_m, local_n, mblock, nblock, apar, master_root, nprow, npcol, comm)
#define max(a, b)
Definition macros.h:21
subroutine pcpotrs(uplo, n, nrhs, a, ia, ja, desca, b, ib, jb, descb, info)
Definition mpi.f:1183
subroutine descinit(desc, m, n, mb, nb, irsrc, icsrc, ictxt, lld, info)
Definition mpi.f:777
subroutine pcgetrs(trans, n, nrhs, a, ia, ja, desca, ipiv, b, ib, jb, descb, info)
Definition mpi.f:1134
subroutine blacs_gridinfo(cntxt, nprow, npcol, myrow, mycol)
Definition mpi.f:754
integer function numroc(n, nb, iproc, isrcproc, nprocs)
Definition mpi.f:786