OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
dsol_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 dmumps_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 DOUBLE PRECISION RHS_SEQ( SIZE_ROOT *NRHS)
27 DOUBLE PRECISION A( LOCAL_M, LOCAL_N )
28 INTEGER IERR, NPROW, NPCOL, MYROW, MYCOL
29 INTEGER LOCAL_N_RHS
30 DOUBLE PRECISION, 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 dmumps_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 dmumps_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 dmumps_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 dmumps_root_solve
59 SUBROUTINE dmumps_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 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 )
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 pdgetrs('N',size_root,nrhs,a,1,1,desca_par,ipiv,
85 & rhs_par,1,1,descb_par,ierr)
86 ELSE
87 CALL pdgetrs('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 pdpotrs( '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 dmumps_solve_2d_bcyclic
#define mumps_abort
Definition VE_Metis.h:25
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)
#define max(a, b)
Definition macros.h:21
subroutine pdgetrs(trans, n, nrhs, a, ia, ja, desca, ipiv, b, ib, jb, descb, info)
Definition mpi.f:1171
subroutine pdpotrs(uplo, n, nrhs, a, ia, ja, desca, b, ib, jb, descb, info)
Definition mpi.f:1220
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