46  using UserDataOperator::UserDataOperator;
 
 
   63                         std::vector<boost::shared_ptr<Range>> field_ents,
 
   66                         bool sym_schur = 
false, 
bool symm_op = 
false);
 
   75    boost::shared_ptr<std::vector<unsigned char>> marker_ptr, 
double diag_val);
 
   81    std::pair<std::string, std::vector<SchurFieldPair>>
 
   98    std::pair<SmartPetscObj<Mat>, boost::shared_ptr<BlockStructure>>;
 
  111    std::array<SmartPetscObj<Mat>, 4>,
 
  112    std::array<boost::shared_ptr<BlockStructure>, 4>,
 
  113    boost::shared_ptr<BlockStructure>,
 
  130    boost::shared_ptr<BlockStructure> block_mat_data,
 
  132    std::vector<std::string> fields_name,             
 
  133    std::vector<boost::shared_ptr<Range>> field_ents, 
 
  134    bool add_preconditioner_block = 
false 
  151                      std::vector<std::string> fields_name,
 
  152                      std::vector<boost::shared_ptr<Range>> field_ents,
 
  167boost::shared_ptr<std::vector<double>>
 
  188                   std::string filename);
 
  211std::pair<SmartPetscObj<Mat>, boost::shared_ptr<NestSchurData>>
 
  256    Mat M, 
const EntitiesFieldData::EntData &row_data,
 
  257    const EntitiesFieldData::EntData &col_data, 
const MatrixDouble &mat,
 
  273                            const EntitiesFieldData::EntData &col_data,
 
  303                                 const EntitiesFieldData::EntData &row_data,
 
  304                                 const EntitiesFieldData::EntData &col_data,
 
  343    Mat M, 
const EntitiesFieldData::EntData &row_data,
 
  344    const EntitiesFieldData::EntData &col_data, 
const MatrixDouble &mat,
 
  353MatSetValues<AssemblyTypeSelector<BLOCK_PRECONDITIONER_SCHUR>>(
 
 
  366VecSetValues<AssemblyTypeSelector<BLOCK_PRECONDITIONER_SCHUR>>(
 
  369  return ::VecSetValues(V, data.getIndices().size(),
 
  370                        &*data.getIndices().begin(), &*nf.begin(), iora);
 
 
  377    std::vector<std::string> fields_name,
 
  378    std::vector<boost::shared_ptr<Range>> field_ents,
 
  379    std::vector<SmartPetscObj<AO>> sequence_of_aos,
 
  380    std::vector<SmartPetscObj<Mat>> sequence_of_mats,
 
  381    std::vector<bool> sym_schur, 
bool symm_op,
 
  382    boost::shared_ptr<BlockStructure> diag_blocks = 
nullptr);
 
  388    std::vector<std::string> fields_name,
 
  389    std::vector<boost::shared_ptr<Range>> field_ents,
 
  390    std::vector<SmartPetscObj<AO>> sequence_of_aos,
 
  391    std::vector<SmartPetscObj<Mat>> sequence_of_mats,
 
  392    std::vector<bool> sym_schur, std::vector<double> diag_eps, 
bool symm_op,
 
  393    boost::shared_ptr<BlockStructure> diag_blocks = 
nullptr);
 
  396DEPRECATED inline boost::shared_ptr<NestSchurData>
 
  398                 boost::shared_ptr<BlockStructure> block_mat_data,
 
  400                 std::vector<std::string> fields_name, 
 
  401                 std::vector<boost::shared_ptr<Range>> field_ents, 
 
  402                 bool add_preconditioner_block = 
false 
  406                                         field_ents, add_preconditioner_block);
 
 
PetscErrorCode MoFEMErrorCode
MoFEM/PETSc error code.
UBlasMatrix< double > MatrixDouble
UBlasVector< double > VectorDouble
implementation of Data Operators for Forces and Sources
MoFEMErrorCode MatSetValues< SchurElemMats >(Mat M, const EntitiesFieldData::EntData &row_data, const EntitiesFieldData::EntData &col_data, const MatrixDouble &mat, InsertMode iora)
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 MatSetValues< SchurElemMatsBlock >(Mat M, const EntitiesFieldData::EntData &row_data, const EntitiesFieldData::EntData &col_data, const MatrixDouble &mat, InsertMode iora)
MoFEMErrorCode schurSwitchPreconditioner(boost::shared_ptr< BlockStructure > block_mat_data)
Switch preconditioner.
MoFEMErrorCode setSchurA00MatSolvePC(SmartPetscObj< PC > pc)
Set PC for A00 block.
MoFEMErrorCode MatSetValues< SchurElemMatsPreconditionedBlock >(Mat M, const EntitiesFieldData::EntData &row_data, const EntitiesFieldData::EntData &col_data, const MatrixDouble &mat, InsertMode iora)
std::pair< SmartPetscObj< Mat >, boost::shared_ptr< BlockStructure > > SchurShellMatData
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< BlockStructure >(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
MoFEMErrorCode setSchurMatSolvePC(SmartPetscObj< PC > pc)
std::pair< std::string, std::string > SchurFieldPair
boost::shared_ptr< std::vector< double > > getBlockMatPrconditionerStorageMat(Mat B)
Get the Block Storage object.
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)
boost::shared_ptr< BlockStructure > createBlockMatStructure(DM dm, SchurFEOpsFEandFields schur_fe_op_vec)
Create a Mat Diag Blocks object.
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.
OpSchurAssembleBase * createOpSchurZeroRowsAndCols(boost::shared_ptr< std::vector< unsigned char > > marker_ptr, double diag_val)
Create a Op Schur Zero Rows And Cols object.
MoFEMErrorCode schurSaveBlockMesh(boost::shared_ptr< BlockStructure > block_mat_data, std::string filename)
Save block matrix as a mesh.
constexpr const char MoFEM_BLOCK_MAT[]
MoFEMErrorCode VecSetValues< SchurElemMatsBlock >(Vec V, const EntitiesFieldData::EntData &data, const VectorDouble &nf, InsertMode iora)
MoFEMErrorCode DMMoFEMSetNestSchurData(DM dm, boost::shared_ptr< NestSchurData >)
std::vector< std::pair< std::string, std::vector< SchurFieldPair > > > SchurFEOpsFEandFields
MoFEMErrorCode VecSetValues< SchurElemMats >(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.
MoFEMErrorCode assembleBlockMatSchur(MoFEM::Interface &m_field, Mat B, Mat S, std::vector< std::string > fields_name, std::vector< boost::shared_ptr< Range > > field_ents, SmartPetscObj< AO > ao)
Assemble Schur matrix.
OpSchurAssembleBase * createOpSchurAssembleBegin()
boost::shared_ptr< std::vector< double > > getBlockMatStorageMat(Mat B)
Get the Block Storage object.
Deprecated interface functions.
Data on single entity (This is passed as argument to DataOperator::doWork)
OpSchurAssembleBase()=delete
static MatSetValuesPtr matSetValuesPreconditionedBlockPtr
static MatSetValuesPtr matSetValuesPtr
backend assembly function
static MatSetValuesPtr matSetValuesBlockPtr
backend assembly block mat function
SchurBackendMatSetValuesPtr()=delete
boost::function< MoFEMErrorCode(Mat M, const EntitiesFieldData::EntData &row_data, const EntitiesFieldData::EntData &col_data, const MatrixDouble &mat, InsertMode iora)> MatSetValuesPtr
Schur complement data storage.
Structure to register events for Schur block assembly and solver.
static PetscLogEvent MOFEM_EVENT_BlockStructureSetValues
static PetscLogEvent MOFEM_EVENT_BlockStructureMult
static PetscLogEvent MOFEM_EVENT_zeroRowsAndCols
static PetscLogEvent MOFEM_EVENT_opSchurAssembleEnd
static PetscLogEvent MOFEM_EVENT_BlockStructureSolve
static PetscLogEvent MOFEM_EVENT_schurMatSetValues
static PetscLogEvent MOFEM_EVENT_AssembleSchurMat
intrusive_ptr for managing petsc objects