ReducedModelOptimization/src/reducedmodeloptimizer.hpp

56 lines
2.0 KiB
C++
Raw Normal View History

2020-11-23 10:06:45 +01:00
#ifndef REDUCEDMODELOPTIMIZER_HPP
#define REDUCEDMODELOPTIMIZER_HPP
#include "beamformfinder.hpp"
#include "edgemesh.hpp"
#include "elementalmesh.hpp"
2020-12-09 16:58:48 +01:00
#include "matplot/matplot.h"
2020-11-23 10:06:45 +01:00
#include <Eigen/Dense>
using FullModelVertexIndex = VertexIndex;
using ReducedModelVertexIndex = VertexIndex;
class ReducedModelOptimizer {
std::shared_ptr<SimulationMesh> pReducedModelElementalMesh;
std::shared_ptr<SimulationMesh> pFullModelElementalMesh;
2020-11-23 10:06:45 +01:00
std::unordered_map<FullModelVertexIndex, ReducedModelVertexIndex>
m_fullToReducedInterfaceViMap;
2020-11-23 10:06:45 +01:00
std::unordered_map<ReducedModelVertexIndex, ReducedModelVertexIndex>
m_fullPatternOppositeInterfaceViMap;
std::unordered_map<size_t, size_t> nodeToSlot;
std::unordered_map<size_t, std::unordered_set<size_t>> slotToNode;
2020-11-23 10:06:45 +01:00
public:
Eigen::VectorXd optimize();
double operator()(const Eigen::VectorXd &x, Eigen::VectorXd &) const;
ReducedModelOptimizer(const std::vector<size_t> &numberOfNodesPerSlot);
2020-11-23 10:06:45 +01:00
void computeReducedModelSimulationJob(
const SimulationJob &simulationJobOfFullModel,
SimulationJob &simulationJobOfReducedModel);
SimulationJob
getReducedSimulationJob(const SimulationJob &fullModelSimulationJob);
void initialize(FlatPattern &fullPattern, FlatPattern &reducedPatterm,
const std::unordered_set<size_t> &reducedModelExcludedEges);
2020-11-23 10:06:45 +01:00
private:
void computeDesiredReducedModelDisplacements(
const SimulationResults &fullModelResults,
Eigen::MatrixX3d &optimalDisplacementsOfReducedModel);
2020-11-23 10:06:45 +01:00
Eigen::VectorXd
optimizeForSimulationJob(const SimulationJob &fullModelSimulationJob);
std::vector<SimulationJob>
createScenarios(const std::shared_ptr<SimulationMesh> &pMesh);
void computeMaps(FlatPattern &fullModel, FlatPattern &reducedPattern,
const std::unordered_set<size_t> &reducedModelExcludedEges);
void createSimulationMeshes(FlatPattern &fullModel,
FlatPattern &reducedModel);
void initializeStiffnesses();
2020-12-09 16:58:48 +01:00
static double objective(long n, const double *x);
2020-11-23 10:06:45 +01:00
};
#endif // REDUCEDMODELOPTIMIZER_HPP