OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
ssol_fwd.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 smumps_sol_r(N, A, LA, IW, LIW, WCB, LWCB,
15 & NRHS,
16 & PTRICB, IWCB, LIWCB,
17 & RHSCOMP, LRHSCOMP, POSINRHSCOMP_FWD,
18 & STEP,
19 & FRERE, DAD, FILS,
20 & NSTK, IPOOL, LPOOL, PTRIST, PTRFAC, MYLEAF, MYROOT,
21 & INFO,
22 & KEEP, KEEP8, DKEEP,
23 & PROCNODE_STEPS,
24 & SLAVEF, COMM, MYID, BUFR, LBUFR, LBUFR_BYTES,
25 & RHS_ROOT, LRHS_ROOT, MTYPE,
26 &
27 & ISTEP_TO_INIV2, TAB_POS_IN_PERE
28 & , RHS_BOUNDS, LRHS_BOUNDS, DO_NBSPARSE, FROM_PP
29 & , L0_OMP_MAPPING, LL0_OMP_MAPPING,
30 & L0_OMP_FACTORS, LL0_OMP_FACTORS
31 & )
34 USE smumps_struc_def, ONLY : smumps_l0ompfac_t
35 IMPLICIT NONE
36 INTEGER MTYPE
37 INTEGER(8), INTENT(IN) :: LA, LWCB
38 INTEGER, INTENT(IN) :: N, LIW, LPOOL, LIWCB
39 INTEGER, INTENT(IN) :: SLAVEF, MYLEAF, MYROOT, COMM, MYID
40 INTEGER INFO( 80 ), KEEP(500)
41 INTEGER(8) KEEP8(150)
42 REAL, INTENT(INOUT) :: DKEEP(230)
43 INTEGER PROCNODE_STEPS( KEEP(28) )
44 INTEGER NRHS
45 REAL A( LA ), WCB( LWCB )
46 INTEGER(8), intent(in) :: LRHS_ROOT
47 REAL RHS_ROOT( LRHS_ROOT )
48 INTEGER LBUFR, LBUFR_BYTES
49 INTEGER BUFR( LBUFR )
50 INTEGER STEP( N ), FRERE( KEEP(28) ), FILS( N ),
51 & dad( keep(28) )
52 INTEGER NSTK(KEEP(28)), IPOOL( LPOOL )
53 INTEGER PTRIST(KEEP(28))
54 INTEGER(8) :: PTRFAC(KEEP(28))
55 INTEGER PTRICB( KEEP(28) )
56 LOGICAL, intent(in) :: DO_NBSPARSE
57 INTEGER, intent(in) :: LRHS_BOUNDS
58 INTEGER, intent(in) :: RHS_BOUNDS(LRHS_BOUNDS)
59 INTEGER IW( LIW ), IWCB( LIWCB )
60 INTEGER ISTEP_TO_INIV2(KEEP(71)),
61 & tab_pos_in_pere(slavef+2,max(1,keep(56)))
62 INTEGER, intent(in) :: POSINRHSCOMP_FWD(N), LRHSCOMP
63 REAL, intent(inout) :: RHSCOMP(LRHSCOMP,NRHS)
64 LOGICAL, intent(in) :: FROM_PP
65 INTEGER, INTENT( in ) :: LL0_OMP_MAPPING, LL0_OMP_FACTORS
66 INTEGER, INTENT( in ) :: L0_OMP_MAPPING( LL0_OMP_MAPPING )
67 TYPE (SMUMPS_L0OMPFAC_T), INTENT(IN) ::
68 & L0_OMP_FACTORS(LL0_OMP_FACTORS)
69 include 'mpif.h'
70 include 'mumps_tags.h'
71 INTEGER DUMMY(1)
72 LOGICAL FLAG
73 REAL, DIMENSION(:), POINTER :: A_PTR
74 INTEGER(8) :: LA_PTR
75 INTEGER :: UNDERL0MAP
76 INTEGER NBFIN, MYROOT_LEFT
77 INTEGER POSIWCB
78 INTEGER(8) :: POSWCB, PLEFTWCB
79 INTEGER INODE, IFATH
80 INTEGER III, LEAF
81 LOGICAL BLOQ
82 EXTERNAL mumps_procnode
83 INTEGER MUMPS_PROCNODE
84 LOGICAL ERROR_WAS_BROADCASTED
85 DUMMY(1) = 1
86 keep(266)=0
87 posiwcb = liwcb
88 poswcb = lwcb
89 pleftwcb= 1_8
90 ptricb = 0
91 leaf = myleaf + 1
92 iii = 1
93 nbfin = slavef
94 myroot_left = myroot
95 IF ( myroot_left .EQ. 0 ) THEN
96 nbfin = nbfin - 1
97 CALL smumps_mcast2(dummy, 1, mpi_integer, myid, comm,
98 & racine_solve, slavef, keep)
99 IF (nbfin.EQ.0) GOTO 260
100 END IF
101 50 CONTINUE
102 IF (slavef .EQ. 1) THEN
104 & ( ipool(1), lpool, iii, leaf, inode,
105 & keep(208) )
106 GOTO 60
107 ENDIF
108 bloq = ( ( iii .EQ. leaf )
109 & )
110 CALL smumps_solve_recv_and_treat( bloq, flag,
111 & bufr, lbufr, lbufr_bytes,
112 & myid, slavef, comm,
113 & n, nrhs, ipool, lpool, leaf,
114 & nbfin, nstk, iw, liw, a, la, ptrist, ptrfac,
115 & iwcb, liwcb,
116 & wcb, lwcb, poswcb,
117 & pleftwcb, posiwcb,
118 & ptricb, info, keep,keep8, dkeep, step,
119 & procnode_steps,
120 & rhscomp, lrhscomp, posinrhscomp_fwd
121 & , from_pp
122 & )
123 IF ( info( 1 ) .LT. 0 .OR. nbfin .EQ. 0 ) GOTO 260
124 IF (.not. flag) THEN
125 IF (iii .NE. leaf) THEN
127 & (ipool(1), lpool, iii, leaf, inode,
128 & keep(208) )
129 GOTO 60
130 ENDIF
131 ENDIF
132 GOTO 50
133 60 CONTINUE
134 IF (keep(400) .GT. 0 ) THEN
135 underl0map = l0_omp_mapping(step(inode))
136 ELSE
137 underl0map = 0
138 ENDIF
139 IF (underl0map .EQ. 0 .OR. keep(201).GT.0) THEN
141 CALL smumps_get_tmp_ptr(a_ptr)
142 la_ptr = la
143 ELSE
144 a_ptr => l0_omp_factors(underl0map)%A
145 la_ptr = l0_omp_factors(underl0map)%LA
146 ENDIF
147 CALL smumps_solve_node_fwd( inode,
148 & huge(inode), huge(inode),
149 & bufr, lbufr, lbufr_bytes,
150 & myid, slavef, comm, n,
151 & ipool, lpool, leaf, nbfin, nstk,
152 & iwcb, liwcb, wcb, lwcb, a_ptr(1), la_ptr,
153 & iw, liw, nrhs,
154 & poswcb, pleftwcb, posiwcb,
155 & ptricb, ptrist, ptrfac, procnode_steps,
156 & fils, step, frere, dad,
157 & info, keep,keep8, dkeep, rhs_root, lrhs_root, mtype,
158 & rhscomp, lrhscomp, posinrhscomp_fwd,
159 & istep_to_iniv2, tab_pos_in_pere
160 & , rhs_bounds, lrhs_bounds, do_nbsparse
161 & , from_pp
162 & , error_was_broadcasted
163 & )
164 IF ( info(1) .LT. 0 ) THEN
165 IF (.NOT. error_was_broadcasted) THEN
166 CALL smumps_bdc_error( myid, slavef, comm, keep )
167 ENDIF
168 GOTO 260
169 ENDIF
170 ifath = dad(step(inode))
171 IF ( ifath .EQ. 0 ) THEN
172 myroot_left = myroot_left - 1
173 IF (myroot_left .EQ. 0) THEN
174 nbfin = nbfin - 1
175 IF (slavef .GT. 1) THEN
176 CALL smumps_mcast2(dummy, 1, mpi_integer, myid,
177 & comm, racine_solve, slavef, keep)
178 ENDIF
179 END IF
180 ELSE
181 IF ( mumps_procnode(procnode_steps(step(ifath)), keep(199))
182 & .EQ. myid ) THEN
183 IF ( ptricb(step(inode)) .EQ. 1 .OR.
184 & ptricb(step(inode)) .EQ. -1 ) THEN
185 nstk(step(ifath)) = nstk(step(ifath)) - 1
186 IF (nstk(step(ifath)) .EQ. 0) THEN
187 ipool(leaf) = ifath
188 leaf = leaf + 1
189 IF (leaf .GT. lpool) THEN
190 WRITE(*,*)
191 & 'Internal error SMUMPS_TRAITER_MESSAGE_SOLVE',
192 & leaf, lpool
193 CALL mumps_abort()
194 ENDIF
195 ENDIF
196 ptricb(step(inode)) = 0
197 ENDIF
198 ENDIF
199 ENDIF
200 IF ( nbfin .EQ. 0 ) GOTO 260
201 GOTO 50
202 260 CONTINUE
203 CALL smumps_clean_pending(info(1), keep, bufr, lbufr,lbufr_bytes,
204 & comm, dummy(1),
205 & slavef, .true., .false.)
206 RETURN
207 END SUBROUTINE smumps_sol_r
#define mumps_abort
Definition VE_Metis.h:25
#define max(a, b)
Definition macros.h:21
subroutine, public smumps_get_tmp_ptr(ptr)
subroutine smumps_set_static_ptr(array)
subroutine smumps_bdc_error(myid, slavef, comm, keep)
Definition sbcast_int.F:38
subroutine smumps_mcast2(data, ldata, mpitype, root, commw, tag, slavef, keep)
Definition sbcast_int.F:16
subroutine smumps_clean_pending(info1, keep, bufr, lbufr, lbufr_bytes, comm_nodes, comm_load, slavef, clean_comm_nodes, clean_comm_load)
subroutine smumps_get_inode_from_pool(ipool, lpool, iii, leaf, inode, strategie)
subroutine smumps_sol_r(n, a, la, iw, liw, wcb, lwcb, nrhs, ptricb, iwcb, liwcb, rhscomp, lrhscomp, posinrhscomp_fwd, step, frere, dad, fils, nstk, ipool, lpool, ptrist, ptrfac, myleaf, myroot, info, keep, keep8, dkeep, procnode_steps, slavef, comm, myid, bufr, lbufr, lbufr_bytes, rhs_root, lrhs_root, mtype, istep_to_iniv2, tab_pos_in_pere, rhs_bounds, lrhs_bounds, do_nbsparse, from_pp, l0_omp_mapping, ll0_omp_mapping, l0_omp_factors, ll0_omp_factors)
Definition ssol_fwd.F:32
recursive subroutine smumps_solve_recv_and_treat(bloq, flag, bufr, lbufr, lbufr_bytes, myid, slavef, comm, n, nrhs, ipool, lpool, leaf, nbfin, nstk_s, iw, liw, a, la, ptrist, ptrfac, iwcb, liwcb, wcb, lwcb, poswcb, pleftwcb, posiwcb, ptricb, info, keep, keep8, dkeep, step, procnode_steps, rhscomp, lrhscomp, posinrhscomp_fwd, from_pp)
subroutine smumps_solve_node_fwd(inode, lastfsl0sta, lastfsl0dyn, bufr, lbufr, lbufr_bytes, myid, slavef, comm, n, ipool, lpool, leaf, nbfin, nstk_s, iwcb, liwcb, wcb, lwcb, a, la, iw, liw, nrhs, poswcb, pleftwcb, posiwcb, ptricb, ptrist, ptrfac, procnode_steps, fils, step, frere, dad, info, keep, keep8, dkeep, rhs_root, lrhs_root, mtype, rhscomp, lrhscomp, posinrhscomp_fwd istep_to_iniv2, tab_pos_in_pere, rhs_bounds, lrhs_bounds, do_nbsparse, from_pp, error_was_broadcasted)
integer function mumps_procnode(procinfo_inode, k199)