44 namespace MultiRegions
60 "PETSc static condensation.");
64 "PETScMultiLevelStaticCond",
66 "PETSc multi-level static condensation.");
89 const boost::weak_ptr<ExpList> &pExpList,
90 const boost::shared_ptr<AssemblyMap>
98 "This constructor is only valid when using static "
101 == pLocToGloMap->GetGlobalSysSolnType(),
102 "The local to global map is not set up for the requested "
111 const boost::weak_ptr<ExpList> &pExpList,
116 const boost::shared_ptr<AssemblyMap>
144 int i, j, n, cnt, gid1, gid2, loc_lda;
147 const int nDirDofs = pLocToGloMap->GetNumGlobalDirBndCoeffs();
157 pLocToGloMap->GetGlobalToUniversalBndMapUnique(),
163 for(n = cnt = 0; n <
m_schurCompl->GetNumberOfBlockRows(); ++n)
166 loc_lda = loc_mat->GetRows();
168 for(i = 0; i < loc_lda; ++i)
170 gid1 = pLocToGloMap->GetLocalToGlobalBndMap(cnt + i)-nDirDofs;
171 sign1 = pLocToGloMap->GetLocalToGlobalBndSign(cnt + i);
175 for(j = 0; j < loc_lda; ++j)
177 gid2 = pLocToGloMap->GetLocalToGlobalBndMap(cnt + j)
179 sign2 = pLocToGloMap->GetLocalToGlobalBndSign(cnt + j);
183 value = sign1*sign2*(*loc_mat)(i,j);
185 m_matrix, gid1ro, gid2ro, value, ADD_VALUES);
194 MatAssemblyBegin(
m_matrix, MAT_FINAL_ASSEMBLY);
195 MatAssemblyEnd (
m_matrix, MAT_FINAL_ASSEMBLY);
201 SetUpSolver(pLocToGloMap->GetIterativeTolerance());
206 const boost::weak_ptr<ExpList> &pExpList,
211 const boost::shared_ptr<AssemblyMap> &l2gMap)
215 mkey, pExpList, pSchurCompl, pBinvD, pC, pInvD, l2gMap);
216 sys->Initialise(l2gMap);