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