143 {
145
148
149 if (
A == AssemblyType::BLOCK_SCHUR ||
A == AssemblyType::SCHUR) {
151 CHKERR schur_ptr->setUp(solver);
152 }
153
154
155 BOOST_LOG_SCOPED_THREAD_ATTR("Timeline", attrs::timer());
156 MOFEM_LOG(
"TIMER", Sev::inform) <<
"KSPSetUp";
158 MOFEM_LOG(
"TIMER", Sev::inform) <<
"KSPSetUp <= Done";
159
160 DM dm;
161 CHKERR KSPGetDM(solver, &dm);
164
165 MOFEM_LOG(
"TIMER", Sev::inform) <<
"KSPSolve";
167 MOFEM_LOG(
"TIMER", Sev::inform) <<
"KSPSolve <= Done";
168
169 CHKERR VecGhostUpdateBegin(
D, INSERT_VALUES, SCATTER_FORWARD);
170 CHKERR VecGhostUpdateEnd(
D, INSERT_VALUES, SCATTER_FORWARD);
172
174};
#define MoFEMFunctionBegin
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
#define MoFEMFunctionReturn(a)
Last executable line of each PETSc function used for error handling. Replaces return()
#define CHKERR
Inline error check.
PetscErrorCode DMoFEMMeshToLocalVector(DM dm, Vec l, InsertMode mode, ScatterMode scatter_mode)
set local (or ghosted) vector values on mesh for partition only
auto createDMVector(DM dm)
Get smart vector from DM.
#define MOFEM_LOG(channel, severity)
Log.
#define MOFEM_LOG_TAG(channel, tag)
Tag channel.
#define MOFEM_LOG_CHANNEL(channel)
Set and reset channel.
SmartPetscObj< Vec > vectorDuplicate(Vec vec)
Create duplicate vector of smart vector.
constexpr AssemblyType A
[Define dimension]
MoFEM::Interface & mField
static boost::shared_ptr< SetUpSchur > createSetUpSchur(MoFEM::Interface &m_field)