Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Kratos LSPG update. #11545

Merged
merged 45 commits into from
Sep 14, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
45 commits
Select commit Hold shift + click to select a range
1abafa2
First commit.
SADPR Aug 22, 2023
7a9af48
Working LSPG ROM
SADPR Aug 28, 2023
ee83466
Private to protected.
SADPR Sep 1, 2023
a063caf
New settings.
SADPR Sep 1, 2023
6b402a9
Adding new setting to rom_analysis.
SADPR Sep 1, 2023
f92e946
Massive clean.
SADPR Sep 1, 2023
eacbbd0
Some changes, I still need to get rid of the global/elemental lspg.
SADPR Sep 1, 2023
9eb014e
Updating LSPG builder and solver for performance and avoid duplication.
SADPR Sep 1, 2023
721581d
Left over
SADPR Sep 1, 2023
90f2d90
Adapting all inner rom settings
SADPR Sep 1, 2023
b43b123
Working inner_rom_settings for galerkin (elem, glob) and lspg.
SADPR Sep 6, 2023
be56105
Adding solving technique to pg utility
SADPR Sep 6, 2023
2379177
Python porjection of KPHI is jet to be cleaned. Create a function.
SADPR Sep 6, 2023
a61aebc
Cleaned.
SADPR Sep 7, 2023
bf0b8b4
Missing import.
SADPR Sep 7, 2023
3294a76
Saving rom_manager first modifications.
SADPR Sep 7, 2023
be2e779
Galerkin monotonicity preserving.
SADPR Sep 7, 2023
6f073bf
Small modification. Changing to galerkin inner rom settings.
SADPR Sep 7, 2023
b988040
Removing the inner rom settings for the hrom trainning utility
SADPR Sep 7, 2023
3e035ee
Petrov-galerkin updating settings.
SADPR Sep 7, 2023
d6a1622
Started test updating. Calculate rom basis output process.
SADPR Sep 7, 2023
5715960
compressible potential flow test.
SADPR Sep 7, 2023
e2a3ac9
fluid lspg rom
SADPR Sep 7, 2023
b4ead0c
fluid pg rom
SADPR Sep 7, 2023
acee942
fluid g rom
SADPR Sep 7, 2023
c67ea49
monotonicity preserving test.
SADPR Sep 7, 2023
1d9cbf5
test structural lspg rom
SADPR Sep 7, 2023
bdfa247
test structural pg rom
SADPR Sep 7, 2023
27b3be9
test structural g rom
SADPR Sep 7, 2023
113d7e3
test thermal pg rom
SADPR Sep 7, 2023
89149ec
test thermal rom galerkin
SADPR Sep 7, 2023
f895c81
Checking why it is not exactly the same.
SADPR Sep 7, 2023
a8f5521
Merge branch 'master' into Kratos_LSPG_HROM
SADPR Sep 8, 2023
0c0f68f
GetRomBasis
SADPR Sep 9, 2023
5d54155
Updated B&S
SADPR Sep 9, 2023
f86336a
Updated GetRightROMBasis
SADPR Sep 9, 2023
ac648d8
Removing KratosWatch.
SADPR Sep 10, 2023
c2f2bad
Updating static expected_output.
SADPR Sep 10, 2023
0663adb
Updated dynamic thermal test
SADPR Sep 10, 2023
64694ae
Cleaning B&Ss
SADPR Sep 10, 2023
bc468b6
Cleaned rom_solver.
SADPR Sep 10, 2023
b96be8c
Minor spacing change.
SADPR Sep 10, 2023
f5e486d
Final clean. Ready to PR.
SADPR Sep 10, 2023
f94689f
Updating rom settings in CoSim ROM test.
SADPR Sep 12, 2023
d3857d5
Changing inner_rom_settings to rom_bns_settings
SADPR Sep 12, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -5,18 +5,13 @@
"projection_strategy": "galerkin",
"assembling_strategy": "global",
"rom_format": "json",
"train_petrov_galerkin": {
"train": false,
"basis_strategy": "residuals",
"include_phi": false,
"svd_truncation_tolerance": 1e-06
},
"rom_settings": {
"nodal_unknowns": [
"TEMPERATURE"
],
"number_of_rom_dofs": 1,
"petrov_galerkin_number_of_rom_dofs": 0
"petrov_galerkin_number_of_rom_dofs": 0,
"rom_bns_settings": {}
},
"hrom_settings": {
"hrom_format": "json"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,18 +5,13 @@
"projection_strategy": "galerkin",
"assembling_strategy": "global",
"rom_format": "json",
"train_petrov_galerkin": {
"train": false,
"basis_strategy": "residuals",
"include_phi": false,
"svd_truncation_tolerance": 1e-06
},
"rom_settings": {
"nodal_unknowns": [
"TEMPERATURE"
],
"number_of_rom_dofs": 1,
"petrov_galerkin_number_of_rom_dofs": 0
"petrov_galerkin_number_of_rom_dofs": 0,
"rom_bns_settings": {}
},
"hrom_settings": {
"hrom_format": "json"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,12 +58,6 @@ void AddCustomStrategiesToPython(pybind11::module& m)
py::class_<ROMBuilderAndSolverType, typename ROMBuilderAndSolverType::Pointer, BuilderAndSolverType>(m, "ROMBuilderAndSolver")
.def(py::init< LinearSolverType::Pointer, Parameters>() )
;

typedef LeastSquaresPetrovGalerkinROMBuilderAndSolver<SparseSpaceType, LocalSpaceType, LinearSolverType> LeastSquaresPetrovGalerkinROMBuilderAndSolverType;

py::class_<LeastSquaresPetrovGalerkinROMBuilderAndSolverType, typename LeastSquaresPetrovGalerkinROMBuilderAndSolverType::Pointer, ROMBuilderAndSolverType, BuilderAndSolverType>(m, "LeastSquaresPetrovGalerkinROMBuilderAndSolver")
.def(py::init< LinearSolverType::Pointer, Parameters>() )
;

typedef PetrovGalerkinROMBuilderAndSolver<SparseSpaceType, LocalSpaceType, LinearSolverType> PetrovGalerkinROMBuilderAndSolverType;

Expand All @@ -78,6 +72,15 @@ void AddCustomStrategiesToPython(pybind11::module& m)
.def(py::init< LinearSolverType::Pointer, Parameters>() )
;

typedef LeastSquaresPetrovGalerkinROMBuilderAndSolver<SparseSpaceType, LocalSpaceType, LinearSolverType> LeastSquaresPetrovGalerkinROMBuilderAndSolverType;

py::class_<LeastSquaresPetrovGalerkinROMBuilderAndSolverType, typename LeastSquaresPetrovGalerkinROMBuilderAndSolverType::Pointer, GlobalROMBuilderAndSolverType>(m, "LeastSquaresPetrovGalerkinROMBuilderAndSolver")
.def(py::init< LinearSolverType::Pointer, Parameters>() )
.def("BuildAndApplyDirichletConditions", &LeastSquaresPetrovGalerkinROMBuilderAndSolverType::BuildAndApplyDirichletConditions)
.def("GetRightROMBasis", &LeastSquaresPetrovGalerkinROMBuilderAndSolverType::GetRightROMBasis)
;


}

} // namespace Python.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,6 @@ void AddCustomUtilitiesToPython(pybind11::module& m)
.def(init<ModelPart&, Parameters, BaseSchemeType::Pointer>()) //
.def("GetProjectedResidualsOntoPhi",&RomResidualsUtility::GetProjectedResidualsOntoPhi) //
.def("GetProjectedResidualsOntoPsi",&RomResidualsUtility::GetProjectedResidualsOntoPsi) //
.def("GetProjectedGlobalLHS", &RomResidualsUtility::GetProjectedGlobalLHS)//
;

class_<RomAuxiliaryUtilities>(m, "RomAuxiliaryUtilities")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -235,6 +235,11 @@ class GlobalROMBuilderAndSolver : public ResidualBasedBlockBuilderAndSolver<TSpa
return mNumberOfRomModes;
}

bool GetMonotonicityPreservingFlag() const noexcept
{
return mMonotonicityPreservingFlag;
}

void ProjectToFineBasis(
const TSystemVectorType& rRomUnkowns,
const ModelPart& rModelPart,
Expand All @@ -251,7 +256,8 @@ class GlobalROMBuilderAndSolver : public ResidualBasedBlockBuilderAndSolver<TSpa
}

void BuildRightROMBasis(
const ModelPart& rModelPart)
const ModelPart& rModelPart,
Matrix& rPhiGlobal)
{
const auto& r_dof_set = BaseBuilderAndSolverType::GetDofSet();
block_for_each(r_dof_set, [&](const DofType& r_dof)
Expand All @@ -261,10 +267,10 @@ class GlobalROMBuilderAndSolver : public ResidualBasedBlockBuilderAndSolver<TSpa
const Matrix::size_type row_id = mMapPhi.at(r_dof.GetVariable().Key());
if (r_dof.IsFixed())
{
noalias(row(mPhiGlobal, r_dof.EquationId())) = ZeroVector(r_rom_nodal_basis.size2());
noalias(row(rPhiGlobal, r_dof.EquationId())) = ZeroVector(r_rom_nodal_basis.size2());
}
else{
noalias(row(mPhiGlobal, r_dof.EquationId())) = row(r_rom_nodal_basis, row_id);
noalias(row(rPhiGlobal, r_dof.EquationId())) = row(r_rom_nodal_basis, row_id);
}
});
}
Expand Down Expand Up @@ -340,7 +346,7 @@ class GlobalROMBuilderAndSolver : public ResidualBasedBlockBuilderAndSolver<TSpa

BuildAndProjectROM(pScheme, rModelPart, A, b, Dx);

SolveROM(rModelPart, A, b, Dx);
SolveROM(rModelPart, mEigenRomA, mEigenRomB, Dx);

KRATOS_CATCH("")
}
Expand Down Expand Up @@ -388,7 +394,9 @@ class GlobalROMBuilderAndSolver : public ResidualBasedBlockBuilderAndSolver<TSpa
"name" : "global_rom_builder_and_solver",
"nodal_unknowns" : [],
"number_of_rom_dofs" : 10,
"monotonicity_preserving": false
"rom_bns_settings" : {
"monotonicity_preserving": false
}
})");
default_parameters.AddMissingParameters(BaseBuilderAndSolverType::GetDefaultParameters());

Expand Down Expand Up @@ -446,13 +454,10 @@ class GlobalROMBuilderAndSolver : public ResidualBasedBlockBuilderAndSolver<TSpa

SizeType mNodalDofs;
std::unordered_map<Kratos::VariableData::KeyType, Matrix::size_type> mMapPhi;

ElementsArrayType mSelectedElements;
ConditionsArrayType mSelectedConditions;

bool mHromSimulation = false;
bool mHromWeightsInitialized = false;

bool mRightRomBasisInitialized = false;

///@}
Expand All @@ -470,7 +475,7 @@ class GlobalROMBuilderAndSolver : public ResidualBasedBlockBuilderAndSolver<TSpa
// Set member variables
mNodalDofs = ThisParameters["nodal_unknowns"].size();
mNumberOfRomModes = ThisParameters["number_of_rom_dofs"].GetInt();
mMonotonicityPreservingFlag = ThisParameters["monotonicity_preserving"].GetBool();
mMonotonicityPreservingFlag = ThisParameters["rom_bns_settings"]["monotonicity_preserving"].GetBool();

// Set up a map with key the variable key and value the correct row in ROM basis
IndexType k = 0;
Expand Down Expand Up @@ -753,7 +758,7 @@ class GlobalROMBuilderAndSolver : public ResidualBasedBlockBuilderAndSolver<TSpa
mRightRomBasisInitialized = true;
}

BuildRightROMBasis(rModelPart);
BuildRightROMBasis(rModelPart, mPhiGlobal);

auto a_wrapper = UblasWrapper<double>(rA);
const auto& eigen_rA = a_wrapper.matrix();
Expand All @@ -774,8 +779,8 @@ class GlobalROMBuilderAndSolver : public ResidualBasedBlockBuilderAndSolver<TSpa
*/
virtual void SolveROM(
ModelPart &rModelPart,
TSystemMatrixType &rA,
TSystemVectorType &rb,
EigenDynamicMatrix &rEigenRomA,
EigenDynamicVector &rEigenRomB,
TSystemVectorType &rDx)
{
KRATOS_TRY
Expand All @@ -786,7 +791,7 @@ class GlobalROMBuilderAndSolver : public ResidualBasedBlockBuilderAndSolver<TSpa

using EigenDynamicVector = Eigen::Matrix<double, Eigen::Dynamic, 1>;
Eigen::Map<EigenDynamicVector> dxrom_eigen(dxrom.data().begin(), dxrom.size());
dxrom_eigen = mEigenRomA.colPivHouseholderQr().solve(mEigenRomB);
dxrom_eigen = rEigenRomA.colPivHouseholderQr().solve(rEigenRomB);

double time = solving_timer.ElapsedSeconds();
KRATOS_INFO_IF("GlobalROMBuilderAndSolver", (this->GetEchoLevel() > 0)) << "Solve reduced system time: " << time << std::endl;
Expand Down
Loading