56 lines
1.9 KiB
C++
56 lines
1.9 KiB
C++
#ifndef CHRONOSEULERSIMULATIONMODEL_HPP
|
|
#define CHRONOSEULERSIMULATIONMODEL_HPP
|
|
|
|
#include "simulationmodel.hpp"
|
|
|
|
namespace chrono {
|
|
class ChSystemSMC;
|
|
namespace fea {
|
|
class ChMesh;
|
|
class ChNodeFEAxyzrot;
|
|
} // namespace fea
|
|
} // namespace chrono
|
|
|
|
class ChronosEulerSimulationModel : public SimulationModel {
|
|
std::shared_ptr<chrono::fea::ChMesh> mesh_chronos;
|
|
std::vector<std::shared_ptr<chrono::fea::ChNodeFEAxyzrot>>
|
|
edgeMeshVertsToChronoNodes;
|
|
|
|
static void parseConstrainedVertices(
|
|
const std::shared_ptr<const SimulationJob>& pJob,
|
|
const std::vector<std::shared_ptr<chrono::fea::ChNodeFEAxyzrot>>&
|
|
edgeMeshVertsToChronoNodes,
|
|
chrono::ChSystemSMC& my_system);
|
|
static void parseForces(
|
|
const std::shared_ptr<chrono::fea::ChMesh>& mesh_chronos,
|
|
const std::vector<std::shared_ptr<chrono::fea::ChNodeFEAxyzrot>>&
|
|
edgeMeshVertsToChronoNodes,
|
|
const std::unordered_map<VertexIndex, Vector6d>& nodalExternalForces);
|
|
|
|
static void parseForcedDisplacements(
|
|
const std::shared_ptr<const SimulationJob>& pJob,
|
|
const std::vector<std::shared_ptr<chrono::fea::ChNodeFEAxyzrot>>&
|
|
edgeMeshVertsToChronoNodes,
|
|
chrono::ChSystemSMC& my_system);
|
|
|
|
public:
|
|
ChronosEulerSimulationModel();
|
|
SimulationResults executeSimulation(
|
|
const std::shared_ptr<SimulationJob>& pJob) override;
|
|
void setStructure(const std::shared_ptr<SimulationEdgeMesh>& pMesh) override;
|
|
static std::shared_ptr<chrono::fea::ChMesh> convertToChronosMesh_Euler(
|
|
const std::shared_ptr<SimulationEdgeMesh>& pMesh,
|
|
std::vector<std::shared_ptr<chrono::fea::ChNodeFEAxyzrot>>&
|
|
edgeMeshVertsToChronosNodes);
|
|
|
|
inline const static std::string label{"Chronos_Euler"};
|
|
|
|
struct Settings {
|
|
enum AnalysisType { Linear = 0, NonLinear };
|
|
AnalysisType analysisType{NonLinear};
|
|
};
|
|
Settings settings;
|
|
};
|
|
|
|
#endif // CHRONOSEULERSIMULATIONMODEL_HPP
|