OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
csol_bwd.F File Reference

Go to the source code of this file.

Functions/Subroutines

subroutine cmumps_sol_s (n, a, la, iw, liw, w, lwc, nrhs, rhscomp, lrhscomp, posinrhscomp_bwd, ptricb, ptracb, iwcb, liww, w2, ne_steps, step, frere, dad, fils, ipool, lpool, ptrist, ptrfac, myleaf, myroot, icntl, info, procnode_steps, slavef, comm, myid, bufr, lbufr, lbufr_bytes, keep, keep8, dkeep, rhs_root, lrhs_root, mtype, istep_to_iniv2, tab_pos_in_pere, panel_pos, lpanel_pos, prun_below, to_process, size_to_process, rhs_bounds, lrhs_bounds, do_nbsparse, from_pp, l0_omp_mapping, ll0_omp_mapping, l0_omp_factors, ll0_omp_factors)

Function/Subroutine Documentation

◆ cmumps_sol_s()

subroutine cmumps_sol_s ( integer, intent(in) n,
complex, dimension(la) a,
integer(8), intent(in) la,
integer, dimension(liw) iw,
integer, intent(in) liw,
complex, dimension(lwc) w,
integer(8), intent(in) lwc,
integer nrhs,
complex, dimension(lrhscomp,nrhs) rhscomp,
integer lrhscomp,
integer, dimension(n) posinrhscomp_bwd,
integer, dimension(keep(28)) ptricb,
integer(8), dimension(keep(28)) ptracb,
integer, dimension(liww) iwcb,
integer, intent(in) liww,
complex, dimension(keep(133)) w2,
integer, dimension(keep(28)) ne_steps,
integer, dimension(n) step,
integer, dimension(keep(28)) frere,
integer, dimension(keep(28)) dad,
integer, dimension(n) fils,
integer, dimension(lpool) ipool,
integer, intent(in) lpool,
integer, dimension(keep(28)) ptrist,
integer(8), dimension(keep(28)) ptrfac,
integer, intent(in) myleaf,
integer, intent(in) myroot,
integer, dimension(60) icntl,
integer, dimension(80) info,
integer, dimension(keep(28)) procnode_steps,
integer, intent(in) slavef,
integer, intent(in) comm,
integer, intent(in) myid,
integer, dimension(lbufr) bufr,
integer lbufr,
integer lbufr_bytes,
integer, dimension( 500 ) keep,
integer(8), dimension(150) keep8,
real, dimension(230), intent(inout) dkeep,
complex, dimension( lrhs_root ) rhs_root,
integer(8), intent(in) lrhs_root,
integer mtype,
integer, dimension(keep(71)) istep_to_iniv2,
integer, dimension(slavef+2,max(1,keep(56))) tab_pos_in_pere,
integer, dimension(lpanel_pos) panel_pos,
integer lpanel_pos,
logical, intent(in) prun_below,
logical, dimension(size_to_process), intent(in) to_process,
integer, intent(in) size_to_process,
integer, dimension(lrhs_bounds), intent(in) rhs_bounds,
integer, intent(in) lrhs_bounds,
logical, intent(in) do_nbsparse,
logical, intent(in) from_pp,
integer, dimension( ll0_omp_mapping ), intent(in) l0_omp_mapping,
integer, intent(in) ll0_omp_mapping,
type (cmumps_l0ompfac_t), dimension(ll0_omp_factors), intent(in) l0_omp_factors,
integer, intent(in) ll0_omp_factors )

Definition at line 14 of file csol_bwd.F.

33 USE cmumps_struc_def, ONLY : cmumps_l0ompfac_t
34 IMPLICIT NONE
35 INTEGER MTYPE
36 INTEGER(8), intent(in) :: LA
37 INTEGER(8), intent(in) :: LWC
38 INTEGER, intent(in) :: N,LIW,LIWW,LPOOL
39 INTEGER, intent(in) :: SLAVEF,MYLEAF,MYROOT,COMM,MYID
40 INTEGER KEEP( 500 )
41 INTEGER(8) KEEP8(150)
42 REAL, INTENT(INOUT) :: DKEEP(230)
43 INTEGER PROCNODE_STEPS(KEEP(28))
44 INTEGER NE_STEPS(KEEP(28))
45 INTEGER IPOOL(LPOOL)
46 INTEGER LPANEL_POS
47 INTEGER PANEL_POS(LPANEL_POS)
48 INTEGER ICNTL(60), INFO(80)
49 INTEGER PTRIST(KEEP(28)),
50 & PTRICB(KEEP(28))
51 INTEGER(8) :: PTRACB(KEEP(28))
52 INTEGER(8) :: PTRFAC(KEEP(28))
53 INTEGER NRHS
54 COMPLEX A(LA), W(LWC)
55 COMPLEX W2(KEEP(133))
56 INTEGER IW(LIW),IWCB(LIWW)
57 INTEGER STEP(N), FRERE(KEEP(28)),DAD(KEEP(28)),FILS(N)
58 INTEGER LBUFR, LBUFR_BYTES
59 INTEGER BUFR(LBUFR)
60 INTEGER ISTEP_TO_INIV2(KEEP(71)),
61 & TAB_POS_IN_PERE(SLAVEF+2,max(1,KEEP(56)))
62 INTEGER LRHSCOMP, POSINRHSCOMP_BWD(N)
63 COMPLEX RHSCOMP(LRHSCOMP,NRHS)
64 INTEGER(8), intent(in) :: LRHS_ROOT
65 COMPLEX RHS_ROOT( LRHS_ROOT )
66 LOGICAL, INTENT(in) :: PRUN_BELOW
67 INTEGER, intent(in) :: SIZE_TO_PROCESS
68 LOGICAL, intent(in) :: TO_PROCESS(SIZE_TO_PROCESS)
69 LOGICAL, intent(in) :: DO_NBSPARSE
70 INTEGER, intent(in) :: LRHS_BOUNDS
71 INTEGER, intent(in) :: RHS_BOUNDS(LRHS_BOUNDS)
72 LOGICAL, intent(in) :: FROM_PP
73 INTEGER, INTENT( in ) :: LL0_OMP_MAPPING, LL0_OMP_FACTORS
74 INTEGER, INTENT( in ) :: L0_OMP_MAPPING( LL0_OMP_MAPPING )
75 TYPE (CMUMPS_L0OMPFAC_T), INTENT(IN) ::
76 & L0_OMP_FACTORS(LL0_OMP_FACTORS)
77 include 'mpif.h'
78 include 'mumps_tags.h'
79 LOGICAL FLAG
80 COMPLEX, DIMENSION(:), POINTER :: A_PTR
81 INTEGER(8) :: LA_PTR
82 INTEGER :: UNDERL0MAP
83 INTEGER(8) :: POSWCB, PLEFTW
84 INTEGER POSIWCB
85 INTEGER NBFINF
86 INTEGER INODE
87 INTEGER III,IIPOOL,MYLEAF_LEFT
88 LOGICAL BLOQ
89 INTEGER DUMMY(1)
90 LOGICAL :: ERROR_WAS_BROADCASTED, DO_MCAST2_TERMBWD
91 LOGICAL :: ALLOW_OTHERS_TO_LEAVE
92 LOGICAL, DIMENSION(:), ALLOCATABLE :: DEJA_SEND
93 INTEGER :: allocok
94 dummy(1)=0
95 keep(266)=0
96 ALLOCATE(deja_send( 0:slavef-1 ), stat=allocok)
97 if(allocok.ne.0) then
98 WRITE(6,*) ' Allocation error of DEJA_SEND in '
99 & //'routine CMUMPS_SOL_S '
100 info(1)=-13
101 info(2)=slavef
102 endif
103 CALL mumps_propinfo( icntl, info, comm, myid )
104 IF ( info(1) .LT.0 ) GOTO 340
105 pleftw = 1_8
106 posiwcb = liww
107 poswcb = lwc
108 iii = 1
109 iipool = myroot + 1
110 myleaf_left = myleaf
111 nbfinf = slavef
112 allow_others_to_leave = ( myleaf_left .EQ. 0 .AND.
113 & keep(31) .EQ. 0 )
114 allow_others_to_leave = allow_others_to_leave .OR.
115 & keep(31) .EQ. 1
116 IF (allow_others_to_leave) THEN
117 CALL cmumps_mcast2(dummy, 1, mpi_integer, myid, comm, termbwd,
118 & slavef, keep)
119 nbfinf = nbfinf - 1
120 IF (nbfinf .EQ. 0 .AND. myleaf_left .EQ. 0) THEN
121 GOTO 340
122 ENDIF
123 ENDIF
124 error_was_broadcasted = .false.
125 do_mcast2_termbwd = .false.
126 DO WHILE ( nbfinf .NE. 0 .OR. myleaf_left .NE. 0 )
127 bloq = ( iii .EQ. iipool )
128 CALL cmumps_backslv_recv_and_treat( bloq, flag, bufr, lbufr,
129 & lbufr_bytes, myid, slavef, comm,
130 & n, iwcb, liww, posiwcb,
131 & w, lwc, poswcb,
132 & iipool, nbfinf, ptricb, ptracb, info,
133 & ipool, lpool, panel_pos, lpanel_pos,
134 & step, frere, fils, procnode_steps,
135 & pleftw, keep,keep8, dkeep,
136 & ptrist, ptrfac, iw, liw, a, la, w2, myleaf_left,
137 & nrhs, mtype,
138 & rhscomp, lrhscomp, posinrhscomp_bwd
139 & , prun_below, to_process, size_to_process
140 & , from_pp
141 & )
142 IF ( info(1) .LT. 0 ) GOTO 340
143 IF ( .NOT. flag ) THEN
144 IF (iii .NE. iipool) THEN
145 inode = ipool(iipool-1)
146 iipool = iipool - 1
147 IF (keep(400) .GT. 0 ) THEN
148 underl0map = l0_omp_mapping(step(inode))
149 ELSE
150 underl0map = 0
151 ENDIF
152 IF (underl0map .EQ. 0 .OR. keep(201).GT.0) THEN
154 CALL cmumps_get_tmp_ptr(a_ptr)
155 la_ptr = la
156 ELSE
157 a_ptr => l0_omp_factors(underl0map)%A
158 la_ptr = l0_omp_factors(underl0map)%LA
159 ENDIF
160 CALL cmumps_solve_node_bwd( inode,
161 & n, ipool, lpool, iipool, nbfinf,
162 & a_ptr(1), la_ptr, iw, liw, w, lwc, nrhs,
163 & poswcb, pleftw, posiwcb,
164 & rhscomp, lrhscomp, posinrhscomp_bwd,
165 & ptricb, ptracb, iwcb, liww, w2,
166 & ne_steps, step,
167 & frere, fils, ptrist, ptrfac,
168 & myleaf_left, info,
169 & procnode_steps, deja_send,
170 & slavef, comm, myid, bufr, lbufr, lbufr_bytes,
171 & keep,keep8, dkeep, rhs_root, lrhs_root, mtype,
172 & istep_to_iniv2, tab_pos_in_pere, panel_pos, lpanel_pos,
173 & prun_below, to_process, size_to_process
174 & , rhs_bounds, lrhs_bounds, do_nbsparse, from_pp
175 & , error_was_broadcasted
176 & , do_mcast2_termbwd
177 & )
178 IF ( info(1) .LT. 0 ) THEN
179 IF (.NOT. error_was_broadcasted) THEN
180 IF (nbfinf .EQ. 0 ) THEN
181 CALL cmumps_bdc_error( myid, slavef, comm, keep )
182 ENDIF
183 ENDIF
184 ENDIF
185 IF (do_mcast2_termbwd) THEN
186 CALL cmumps_mcast2( dummy, 1, mpi_integer, myid, comm,
187 & termbwd, slavef, keep )
188 ENDIF
189 ENDIF
190 END IF
191 ENDDO
192 340 CONTINUE
193 IF (ALLOCATED(deja_send)) DEALLOCATE(deja_send)
194 RETURN
subroutine mumps_propinfo(icntl, info, comm, id)
subroutine cmumps_bdc_error(myid, slavef, comm, keep)
Definition cbcast_int.F:38
subroutine cmumps_mcast2(data, ldata, mpitype, root, commw, tag, slavef, keep)
Definition cbcast_int.F:16
recursive subroutine cmumps_backslv_recv_and_treat(bloq, flag, bufr, lbufr, lbufr_bytes, myid, slavef, comm, n, iwcb, liww, posiwcb, w, lwc, poswcb, iipool, nbfinf, ptricb, ptracb, info, ipool, lpool, panel_pos, lpanel_pos, step, frere, fils, procnode_steps, pleftw, keep, keep8, dkeep, ptrist, ptrfac, iw, liw, a, la, w2, myleaf_left, nrhs, mtype, rhscomp, lrhscomp, posinrhscomp_bwd, prun_below, to_process, size_to_process, from_pp)
subroutine cmumps_solve_node_bwd(inode, n, ipool, lpool, iipool, nbfinf, a, la, iw, liw, w, lwc, nrhs, poswcb, pleftw, posiwcb, rhscomp, lrhscomp, posinrhscomp_bwd, ptricb, ptracb, iwcb, liww, w2, ne_steps, step, frere, fils, ptrist, ptrfac, myleaf_left, info, procnode_steps, deja_send, slavef, comm, myid, bufr, lbufr, lbufr_bytes, keep, keep8, dkeep, rhs_root, lrhs_root, mtype, istep_to_iniv2, tab_pos_in_pere, panel_pos, lpanel_pos, prun_below, to_process, size_to_process, rhs_bounds, lrhs_bounds, do_nbsparse, from_pp, error_was_broadcasted, do_mcast2_termbwd)
subroutine, public cmumps_get_tmp_ptr(ptr)
subroutine cmumps_set_static_ptr(array)