38 Mat mat, PetscInt
m,
const PetscInt idxm[], PetscInt
n,
39 const PetscInt idxn[],
const PetscScalar
v[], InsertMode addv)>;
54 std::vector<boost::shared_ptr<Range>> field_ents,
57 std::vector<bool> sym_schur,
bool symm_op =
true);
71 std::vector<boost::shared_ptr<Range>> field_ents,
74 std::vector<bool> sym_schur,
75 std::vector<double> diag_eps,
bool symm_op =
true);
124struct SchurL2Mats :
public boost::enable_shared_from_this<SchurL2Mats> {
168 member<SchurL2Mats, const UId, &SchurL2Mats::uidRow>,
169 member<SchurL2Mats, const UId, &SchurL2Mats::uidCol>
173 ordered_non_unique<tag<row_mi_tag>, member<
SchurL2Mats,
const UId,
176 ordered_non_unique<tag<col_mi_tag>, member<
SchurL2Mats,
const UId,
181 static boost::ptr_vector<MatrixDouble>
locMats;
ForcesAndSourcesCore::UserDataOperator UserDataOperator
FTensor::Index< 'n', SPACE_DIM > n
FTensor::Index< 'm', SPACE_DIM > m
const double v
phase velocity of light in medium (cm/ns)
PetscErrorCode MoFEMErrorCode
MoFEM/PETSc error code.
UBlasMatrix< double > MatrixDouble
UBlasVector< double > VectorDouble
implementation of Data Operators for Forces and Sources
MoFEMErrorCode VecSetValues< SchurL2Mats >(Vec V, const EntitiesFieldData::EntData &data, const VectorDouble &nf, InsertMode iora)
MoFEMErrorCode MatSetValues< SchurL2Mats >(Mat M, const EntitiesFieldData::EntData &row_data, const EntitiesFieldData::EntData &col_data, const MatrixDouble &mat, InsertMode iora)
Data on single entity (This is passed as argument to DataOperator::doWork)
@ OPSPACE
operator do Work is execute on space data
structure to get information form mofem into EntitiesFieldData
Clear Schur complement internal data.
MoFEMErrorCode doWork(int side, EntityType type, EntitiesFieldData::EntData &data)
Operator for linear form, usually to calculate values on right hand side.
Assemble Schur complement.
Assemble Schur complement (Implementation)
MatrixDouble offMatInvDiagOffMat
std::vector< boost::shared_ptr< Range > > fieldEnts
boost::function< MoFEMErrorCode(Mat mat, PetscInt m, const PetscInt idxm[], PetscInt n, const PetscInt idxn[], const PetscScalar v[], InsertMode addv)> MatSetValuesRaw
static MatSetValuesRaw matSetValuesSchurRaw
MoFEMErrorCode doWorkImpl(int side, EntityType type, EntitiesFieldData::EntData &data)
OpSchurAssembleEndImpl(std::vector< std::string > fields_name, std::vector< boost::shared_ptr< Range > > field_ents, std::vector< SmartPetscObj< AO > > sequence_of_aos, std::vector< SmartPetscObj< Mat > > sequence_of_mats, std::vector< bool > sym_schur, bool symm_op=true)
Construct a new Op Schur Assemble End object.
std::vector< bool > symSchur
std::vector< std::string > fieldsName
MatrixDouble invDiagOffMat
std::vector< SmartPetscObj< Mat > > sequenceOfMats
std::vector< SmartPetscObj< AO > > sequenceOfAOs
MatrixDouble transOffMatInvDiagOffMat
std::vector< double > diagEps
Schur complement data storage.
virtual ~SchurL2Mats()=default
static MatSetValuesPtr matSetValuesPtr
backend assembly function
static boost::ptr_vector< VectorInt > rowIndices
friend OpSchurAssembleEndImpl
static SchurL2Storage schurL2Storage
multi_index_container< SchurL2Mats, indexed_by< ordered_unique< tag< uid_mi_tag >, composite_key< SchurL2Mats, member< SchurL2Mats, const UId, &SchurL2Mats::uidRow >, member< SchurL2Mats, const UId, &SchurL2Mats::uidCol > > >, ordered_non_unique< tag< row_mi_tag >, member< SchurL2Mats, const UId, &SchurL2Mats::uidRow > >, ordered_non_unique< tag< col_mi_tag >, member< SchurL2Mats, const UId, &SchurL2Mats::uidCol > > > > SchurL2Storage
static boost::ptr_vector< VectorInt > colIndices
boost::function< MoFEMErrorCode(Mat M, const EntitiesFieldData::EntData &row_data, const EntitiesFieldData::EntData &col_data, const MatrixDouble &mat, InsertMode iora)> MatSetValuesPtr
static MoFEMErrorCode MatSetValues(Mat M, const EntitiesFieldData::EntData &row_data, const EntitiesFieldData::EntData &col_data, const MatrixDouble &mat, InsertMode iora)
friend OpSchurAssembleBegin
static boost::ptr_vector< MatrixDouble > locMats
intrusive_ptr for managing petsc objects