58 lines
2.0 KiB
C++
58 lines
2.0 KiB
C++
#ifndef REDUCEDMODELOPTIMIZER_HPP
|
|
#define REDUCEDMODELOPTIMIZER_HPP
|
|
|
|
#include "beamformfinder.hpp"
|
|
#include "edgemesh.hpp"
|
|
#include "elementalmesh.hpp"
|
|
#include <Eigen/Dense>
|
|
|
|
using FullModelVertexIndex = VertexIndex;
|
|
using ReducedModelVertexIndex = VertexIndex;
|
|
|
|
struct SimulationScenarios {
|
|
std::vector<SimulationJob> scenarios;
|
|
std::shared_ptr<ElementalMesh> pMesh;
|
|
SimulationScenarios(std::shared_ptr<ElementalMesh> pMesh) : pMesh(pMesh) {}
|
|
|
|
std::vector<SimulationJob> getSimulationJobs() const { return scenarios; }
|
|
};
|
|
|
|
class ReducedModelOptimizer {
|
|
std::shared_ptr<ElementalMesh> reducedModelElementalMesh;
|
|
std::shared_ptr<ConstElementalMesh> pFullModelElementalMesh;
|
|
const std::unordered_map<ReducedModelVertexIndex, FullModelVertexIndex>
|
|
&reducedToFullViMap;
|
|
std::unordered_map<FullModelVertexIndex, ReducedModelVertexIndex>
|
|
fullToReducedViMap;
|
|
std::unordered_map<ReducedModelVertexIndex, ReducedModelVertexIndex>
|
|
oppositeVertexMap;
|
|
|
|
public:
|
|
Eigen::VectorXd optimize();
|
|
double operator()(const Eigen::VectorXd &x, Eigen::VectorXd &) const;
|
|
|
|
ReducedModelOptimizer(
|
|
ConstVCGEdgeMesh &fullModel, ConstVCGEdgeMesh &reducedModel,
|
|
const std::unordered_map<ReducedModelVertexIndex, FullModelVertexIndex>
|
|
&viMap,
|
|
const std::vector<std::pair<ReducedModelVertexIndex,
|
|
ReducedModelVertexIndex>> &oppositeVertices);
|
|
void computeReducedModelSimulationJob(
|
|
const SimulationJob &simulationJobOfFullModel,
|
|
SimulationJob &simulationJobOfReducedModel);
|
|
|
|
SimulationJob
|
|
getReducedSimulationJob(const SimulationJob &fullModelSimulationJob);
|
|
|
|
private:
|
|
void computeDesiredReducedModelDisplacements(
|
|
const SimulationResults &fullModelResults,
|
|
Eigen::MatrixX3d &optimaldisplacementsOfReducedModel);
|
|
Eigen::VectorXd
|
|
optimizeForSimulationJob(const SimulationJob &fullModelSimulationJob);
|
|
std::vector<SimulationJob>
|
|
createScenarios(const std::shared_ptr<ElementalMesh> &pMesh);
|
|
};
|
|
|
|
#endif // REDUCEDMODELOPTIMIZER_HPP
|