|
| v0.14.0
|
Go to the documentation of this file.
62 std::vector<boost::shared_ptr<Range>> field_ents,
65 bool sym_schur =
false,
bool symm_op =
false);
71 std::pair<std::string, std::vector<SchurFieldPair>>
88 std::pair<SmartPetscObj<Mat>, boost::shared_ptr<BlockStructure>>;
101 std::array<SmartPetscObj<Mat>, 4>,
102 std::array<boost::shared_ptr<BlockStructure>, 4>,
103 boost::shared_ptr<BlockStructure>,
120 boost::shared_ptr<BlockStructure> block_mat_data,
122 std::vector<std::string> fields_name,
123 std::vector<boost::shared_ptr<Range>> field_ents,
124 bool add_preconditioner_block =
false
146 std::string filename);
169 std::pair<SmartPetscObj<Mat>, boost::shared_ptr<NestSchurData>>
311 MatSetValues<AssemblyTypeSelector<BLOCK_PRECONDITIONER_SCHUR>>(
324 VecSetValues<AssemblyTypeSelector<BLOCK_PRECONDITIONER_SCHUR>>(
328 &*data.getIndices().begin(), &*nf.begin(), iora);
335 std::vector<std::string> fields_name,
336 std::vector<boost::shared_ptr<Range>> field_ents,
337 std::vector<SmartPetscObj<AO>> sequence_of_aos,
338 std::vector<SmartPetscObj<Mat>> sequence_of_mats,
339 std::vector<bool> sym_schur,
bool symm_op,
340 boost::shared_ptr<BlockStructure> diag_blocks =
nullptr);
346 std::vector<std::string> fields_name,
347 std::vector<boost::shared_ptr<Range>> field_ents,
348 std::vector<SmartPetscObj<AO>> sequence_of_aos,
349 std::vector<SmartPetscObj<Mat>> sequence_of_mats,
350 std::vector<bool> sym_schur, std::vector<double> diag_eps,
bool symm_op,
351 boost::shared_ptr<BlockStructure> diag_blocks =
nullptr);
354 DEPRECATED inline boost::shared_ptr<NestSchurData>
356 boost::shared_ptr<BlockStructure> block_mat_data,
358 std::vector<std::string> fields_name,
359 std::vector<boost::shared_ptr<Range>> field_ents,
360 bool add_preconditioner_block =
false
364 field_ents, add_preconditioner_block);
369 #endif //__SCHUR_HPP__
Data on single entity (This is passed as argument to DataOperator::doWork)
MoFEMErrorCode MatSetValues< BlockStructure >(Mat M, const EntitiesFieldData::EntData &row_data, const EntitiesFieldData::EntData &col_data, const MatrixDouble &mat, InsertMode iora)
constexpr const char MoFEM_BLOCK_MAT[]
std::pair< std::string, std::string > SchurFieldPair
OpSchurAssembleBase()=delete
PetscErrorCode MoFEMErrorCode
MoFEM/PETSc error code.
UBlasMatrix< double > MatrixDouble
boost::function< MoFEMErrorCode(Mat M, const EntitiesFieldData::EntData &row_data, const EntitiesFieldData::EntData &col_data, const MatrixDouble &mat, InsertMode iora)> MatSetValuesPtr
static PetscLogEvent MOFEM_EVENT_BlockStructureMult
static PetscLogEvent MOFEM_EVENT_schurMatSetValues
MoFEMErrorCode VecSetValues(Vec V, const EntitiesFieldData::EntData &data, const double *ptr, InsertMode iora)
Assemble PETSc vector.
FTensor::Index< 'M', 3 > M
OpSchurAssembleBase * createOpSchurAssembleEnd(std::vector< std::string > fields_name, std::vector< boost::shared_ptr< Range >> field_ents, SmartPetscObj< AO > ao, SmartPetscObj< Mat > schur, bool sym_schur, bool symm_op)
Construct a new Op Schur Assemble End object.
MoFEMErrorCode VecSetValues< SchurElemMatsBlock >(Vec V, const EntitiesFieldData::EntData &data, const VectorDouble &nf, InsertMode iora)
SchurShellMatData createBlockMat(DM dm, boost::shared_ptr< BlockStructure > data)
Create a Schur Mat object.
implementation of Data Operators for Forces and Sources
static PetscLogEvent MOFEM_EVENT_BlockStructureSolve
MoFEMErrorCode schurSwitchPreconditioner(boost::shared_ptr< BlockStructure > block_mat_data)
Switch preconditioner.
DEPRECATED boost::shared_ptr< NestSchurData > getNestSchurData(std::pair< SmartPetscObj< DM >, SmartPetscObj< DM >> dms, boost::shared_ptr< BlockStructure > block_mat_data, std::vector< std::string > fields_name, std::vector< boost::shared_ptr< Range >> field_ents, bool add_preconditioner_block=false)
SchurBackendMatSetValuesPtr()=delete
OpSchurAssembleBase * createOpSchurAssembleBegin()
static PetscLogEvent MOFEM_EVENT_opSchurAssembleEnd
std::pair< SmartPetscObj< Mat >, boost::shared_ptr< NestSchurData > > createSchurNestedMatrix(boost::shared_ptr< NestSchurData > schur_net_data_ptr)
Create a Mat Diag Blocks object.
MoFEMErrorCode MatSetValues< SchurElemMatsPreconditionedBlock >(Mat M, const EntitiesFieldData::EntData &row_data, const EntitiesFieldData::EntData &col_data, const MatrixDouble &mat, InsertMode iora)
static MatSetValuesPtr matSetValuesPtr
backend assembly function
EntitiesFieldData::EntData EntData
MoFEMErrorCode setSchurMatSolvePC(SmartPetscObj< PC > pc)
Schur complement data storage.
MoFEMErrorCode setSchurA00MatSolvePC(SmartPetscObj< PC > pc)
Set PC for A00 block.
static MatSetValuesPtr matSetValuesPreconditionedBlockPtr
MoFEMErrorCode MatSetValues< SchurElemMats >(Mat M, const EntitiesFieldData::EntData &row_data, const EntitiesFieldData::EntData &col_data, const MatrixDouble &mat, InsertMode iora)
boost::shared_ptr< NestSchurData > createSchurNestedMatrixStruture(std::pair< SmartPetscObj< DM >, SmartPetscObj< DM >> dms, boost::shared_ptr< BlockStructure > block_mat_data_ptr, std::vector< std::string > fields_names, std::vector< boost::shared_ptr< Range >> field_ents, bool add_preconditioner_block)
Get the Schur Nest Mat Array object.
const FTensor::Tensor2< T, Dim, Dim > Vec
Structure to register events for Schur block assembly and solver.
std::pair< SmartPetscObj< Mat >, boost::shared_ptr< BlockStructure > > SchurShellMatData
UBlasVector< double > VectorDouble
MoFEMErrorCode DMMoFEMSetNestSchurData(DM dm, boost::shared_ptr< NestSchurData >)
MoFEMErrorCode VecSetValues< SchurElemMats >(Vec V, const EntitiesFieldData::EntData &data, const VectorDouble &nf, InsertMode iora)
boost::shared_ptr< BlockStructure > createBlockMatStructure(DM dm, SchurFEOpsFEandFields schur_fe_op_vec)
Create a Mat Diag Blocks object.
static MatSetValuesPtr matSetValuesBlockPtr
backend assembly block mat function
MoFEMErrorCode MatSetValues< SchurElemMatsBlock >(Mat M, const EntitiesFieldData::EntData &row_data, const EntitiesFieldData::EntData &col_data, const MatrixDouble &mat, InsertMode iora)
std::tuple< std::array< SmartPetscObj< Mat >, 4 >, std::array< boost::shared_ptr< BlockStructure >, 4 >, boost::shared_ptr< BlockStructure >, std::pair< SmartPetscObj< IS >, SmartPetscObj< IS > > > NestSchurData
static PetscLogEvent MOFEM_EVENT_zeroRowsAndCols
MoFEMErrorCode schurSaveBlockMesh(boost::shared_ptr< BlockStructure > block_mat_data, std::string filename)
Save block matrix as a mesh.
static PetscLogEvent MOFEM_EVENT_BlockStructureSetValues
std::vector< std::pair< std::string, std::vector< SchurFieldPair > > > SchurFEOpsFEandFields
UserDataOperator(const FieldSpace space, const char type=OPSPACE, const bool symm=true)