Skip to main content

runmat_analysis_core/problem/
model.rs

1use runmat_geometry_core::UnitSystem;
2use serde::{Deserialize, Serialize};
3
4use super::{
5    bc::BoundaryCondition,
6    domains::{CfdDomain, ElectroThermalDomain, ElectromagneticDomain, ThermoMechanicalDomain},
7    interfaces::AnalysisInterface,
8    loads::LoadCase,
9    material_assignment::MaterialAssignment,
10    materials::MaterialModel,
11    steps::AnalysisStep,
12    structure::StructuralModel,
13};
14
15#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
16pub struct AnalysisModelId(pub String);
17
18#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
19#[serde(rename_all = "snake_case")]
20pub enum ReferenceFrame {
21    Global,
22    Local(String),
23}
24
25#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
26pub struct AnalysisModel {
27    pub model_id: AnalysisModelId,
28    pub geometry_id: String,
29    pub geometry_revision: u32,
30    pub units: UnitSystem,
31    pub frame: ReferenceFrame,
32    pub materials: Vec<MaterialModel>,
33    #[serde(default)]
34    pub material_assignments: Vec<MaterialAssignment>,
35    #[serde(default)]
36    pub structural: Option<StructuralModel>,
37    #[serde(default)]
38    pub thermo_mechanical: Option<ThermoMechanicalDomain>,
39    #[serde(default)]
40    pub electro_thermal: Option<ElectroThermalDomain>,
41    #[serde(default)]
42    pub electromagnetic: Option<ElectromagneticDomain>,
43    #[serde(default)]
44    pub cfd: Option<CfdDomain>,
45    #[serde(default)]
46    pub interfaces: Vec<AnalysisInterface>,
47    pub boundary_conditions: Vec<BoundaryCondition>,
48    pub loads: Vec<LoadCase>,
49    pub steps: Vec<AnalysisStep>,
50}