runmat_analysis_core/problem/
model.rs1use 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}