OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
zsol_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 zmumps_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(kind=8) RHS_SEQ( SIZE_ROOT *NRHS)
27 COMPLEX(kind=8) A( LOCAL_M, LOCAL_N )
28 INTEGER IERR, NPROW, NPCOL, MYROW, MYCOL
29 INTEGER LOCAL_N_RHS
30 COMPLEX(kind=8), 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 zmumps_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 zmumps_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 zmumps_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 zmumps_root_solve
59 SUBROUTINE zmumps_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(kind=8), intent (in) :: A( LOCAL_M, LOCAL_N )
71 COMPLEX(kind=8), 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 pzgetrs('N',size_root,nrhs,a,1,1,desca_par,ipiv,
85 & rhs_par,1,1,descb_par,ierr)
86 ELSE
87 CALL pzgetrs('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 pzpotrs( '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 zmumps_solve_2d_bcyclic
#define mumps_abort
Definition VE_Metis.h:25
#define max(a, b)
Definition macros.h:21
subroutine pzpotrs(uplo, n, nrhs, a, ia, ja, desca, b, ib, jb, descb, info)
Definition mpi.f:1195
subroutine pzgetrs(trans, n, nrhs, a, ia, ja, desca, ipiv, b, ib, jb, descb, info)
Definition mpi.f:1146
subroutine descinit(desc, m, n, mb, nb, irsrc, icsrc, ictxt, lld, info)
Definition mpi.f:777
subroutine blacs_gridinfo(cntxt, nprow, npcol, myrow, mycol)
Definition mpi.f:754
integer function numroc(n, nb, iproc, isrcproc, nprocs)
Definition mpi.f:786
subroutine zmumps_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 zmumps_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 zmumps_scatter_root(myid, m, n, aseq, local_m, local_n, mblock, nblock, apar, master_root, nprow, npcol, comm)
subroutine zmumps_gather_root(myid, m, n, aseq, local_m, local_n, mblock, nblock, apar, master_root, nprow, npcol, comm)