Skip to main content

runmat_analysis_core/problem/
domains.rs

1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
4pub struct ThermoRegionTemperatureDelta {
5    pub region_id: String,
6    pub temperature_delta_k: f64,
7}
8
9#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
10pub struct ThermoTimeProfilePoint {
11    pub normalized_time: f64,
12    pub scale: f64,
13}
14
15#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
16#[serde(rename_all = "snake_case")]
17pub enum ThermoFieldInterpolationMode {
18    Linear,
19    Step,
20}
21
22#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
23pub struct ThermoFieldSource {
24    pub source_id: String,
25    pub revision: u32,
26    #[serde(default)]
27    pub interpolation_mode: Option<ThermoFieldInterpolationMode>,
28    #[serde(default)]
29    pub expected_region_ids: Vec<String>,
30}
31
32#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
33pub struct ThermoMechanicalDomain {
34    pub enabled: bool,
35    pub reference_temperature_k: f64,
36    pub applied_temperature_delta_k: f64,
37    #[serde(default)]
38    pub field_artifact_id: Option<String>,
39    #[serde(default)]
40    pub field_source: Option<ThermoFieldSource>,
41    #[serde(default)]
42    pub region_temperature_deltas: Vec<ThermoRegionTemperatureDelta>,
43    #[serde(default)]
44    pub time_profile: Vec<ThermoTimeProfilePoint>,
45}
46
47#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
48pub struct ElectroRegionConductivityScale {
49    pub region_id: String,
50    pub conductivity_scale: f64,
51}
52
53#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
54pub struct ElectroTimeProfilePoint {
55    pub normalized_time: f64,
56    pub current_scale: f64,
57}
58
59#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
60pub struct ElectroThermalDomain {
61    pub enabled: bool,
62    pub reference_temperature_k: f64,
63    pub applied_voltage_v: f64,
64    #[serde(default)]
65    pub region_conductivity_scales: Vec<ElectroRegionConductivityScale>,
66    #[serde(default)]
67    pub time_profile: Vec<ElectroTimeProfilePoint>,
68}
69
70#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
71pub struct ElectromagneticDomain {
72    pub enabled: bool,
73    pub reference_frequency_hz: f64,
74    pub applied_current_a: f64,
75}
76
77#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
78#[serde(rename_all = "snake_case")]
79pub enum CfdSolveFamily {
80    SteadyState,
81    Transient,
82}
83
84#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
85pub struct CfdTimeProfilePoint {
86    pub normalized_time: f64,
87    pub inlet_scale: f64,
88}
89
90#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
91pub struct CfdDomain {
92    pub enabled: bool,
93    pub solve_family: CfdSolveFamily,
94    pub reference_density_kg_per_m3: f64,
95    pub dynamic_viscosity_pa_s: f64,
96    pub inlet_velocity_m_per_s: f64,
97    pub turbulence_intensity: f64,
98    #[serde(default)]
99    pub time_profile: Vec<CfdTimeProfilePoint>,
100}