Skip to content
Snippets Groups Projects
Commit a17e3755 authored by Boris Martin's avatar Boris Martin
Browse files

refactor de(activate)bilinear

parent 2be1363e
No related branches found
No related tags found
1 merge request!45Matrix-matrix product, parallel matrix export
......@@ -1031,35 +1031,6 @@ namespace gmshddm
_artificialCommutator = true;
togglePhysicalAndArtificialSourceTerms();
auto deactivateBilinear = [=](const unsigned long long idom) {
for(auto formulation : *_volume[idom]) {
if(formulation->isBilinear()) {
formulation->deactivate();
}
}
for(auto formulation : _surface[idom]) {
for(auto term : *formulation.second) {
if(term->isBilinear()) {
term->deactivate();
}
}
}
};
auto activateBilinear = [=](const unsigned long long idom) {
for(auto formulation : *_volume[idom]) {
if(formulation->isBilinear()) {
formulation->activate();
}
}
for(auto formulation : _surface[idom]) {
for(auto term : *formulation.second) {
if(term->isBilinear()) {
term->activate();
}
}
}
};
// Assemble the volumic systems for each subdomain
for(auto idom = 0ULL; idom < _volume.size(); ++idom) {
......@@ -1068,7 +1039,7 @@ namespace gmshddm
_volume[idom]->setAttribute("ddm::artificialCommutator", _artificialCommutator);
gmshfem::common::Options::instance()->verbose = innerVerbosity;
if(sameMatrixWithArtificialAndPhysicalSources) {
deactivateBilinear(idom);
_deactivateBilinear(idom);
_volume[idom]->setRHSToZero();
_volume[idom]->assemble();
}
......@@ -1077,7 +1048,7 @@ namespace gmshddm
_volume[idom]->initSystem();
_volume[idom]->pre();
_volume[idom]->assemble();
deactivateBilinear(idom);
_deactivateBilinear(idom);
}
gmshfem::common::Options::instance()->verbose = outerVerbosity;
}
......@@ -1125,12 +1096,12 @@ namespace gmshddm
if(mpi::isItMySubdomain(idom)) {
gmshfem::common::Options::instance()->verbose = innerVerbosity;
if(!sameMatrixWithArtificialAndPhysicalSources) {
activateBilinear(idom);
_activateBilinear(idom);
}
_volume[idom]->assemble();
_volume[idom]->solve(true);
if(sameMatrixWithArtificialAndPhysicalSources) {
activateBilinear(idom);
_activateBilinear(idom);
}
gmshfem::common::Options::instance()->verbose = outerVerbosity;
}
......@@ -1175,35 +1146,7 @@ namespace gmshddm
_artificialCommutator = true;
togglePhysicalAndArtificialSourceTerms();
auto deactivateBilinear = [=](const unsigned long long idom) {
for(auto formulation : *_volume[idom]) {
if(formulation->isBilinear()) {
formulation->deactivate();
}
}
for(auto formulation : _surface[idom]) {
for(auto term : *formulation.second) {
if(term->isBilinear()) {
term->deactivate();
}
}
}
};
auto activateBilinear = [=](const unsigned long long idom) {
for(auto formulation : *_volume[idom]) {
if(formulation->isBilinear()) {
formulation->activate();
}
}
for(auto formulation : _surface[idom]) {
for(auto term : *formulation.second) {
if(term->isBilinear()) {
term->activate();
}
}
}
};
for(auto idom = 0ULL; idom < _volume.size(); ++idom) {
_volume[idom]->setAttribute("ddm::physicalCommutator", _physicalCommutator);
......@@ -1213,7 +1156,7 @@ namespace gmshddm
_volume[idom]->initSystem();
_volume[idom]->pre();
_volume[idom]->assemble();
deactivateBilinear(idom);
_deactivateBilinear(idom);
gmshfem::common::Options::instance()->verbose = outerVerbosity;
}
......@@ -1250,7 +1193,7 @@ namespace gmshddm
}
for(auto idom = 0ULL; idom < _volume.size(); ++idom) {
activateBilinear(idom);
_activateBilinear(idom);
}
......@@ -1415,6 +1358,40 @@ namespace gmshddm
}
}
template< class T_Scalar >
void Formulation< T_Scalar >::_activateBilinear(const unsigned long long idom)
{
for(auto formulation : *_volume[idom]) {
if(formulation->isBilinear()) {
formulation->activate();
}
}
for(auto formulation : _surface[idom]) {
for(auto term : *formulation.second) {
if(term->isBilinear()) {
term->activate();
}
}
}
}
template< class T_Scalar >
void Formulation< T_Scalar >::_deactivateBilinear(const unsigned long long idom)
{
for(auto formulation : *_volume[idom]) {
if(formulation->isBilinear()) {
formulation->deactivate();
}
}
for(auto formulation : _surface[idom]) {
for(auto term : *formulation.second) {
if(term->isBilinear()) {
term->deactivate();
}
}
}
}
template< class T_Scalar >
int MatVectProductImpl(Mat A, Vec X, Vec Y, bool IA)
......
......@@ -79,6 +79,9 @@ namespace gmshddm
void _assembleAndSolveSurface();
void _extractRHS();
void _activateBilinear (const unsigned long long idom);
void _deactivateBilinear (const unsigned long long idom);
public:
Formulation(const std::string &name, const std::vector< std::vector< unsigned int > > &topology);
Formulation(const std::string &name, const std::vector< gmshfem::problem::Formulation< T_Scalar > * > &volume, const std::vector< std::unordered_map< unsigned int, gmshfem::problem::Formulation< T_Scalar > * > > &surface);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment