Skip to main content

cimstructs/
GovHydroDD.rs

1/// Double derivative hydro governor and turbine.
2#[derive(Debug, Default, Clone, serde::Serialize, serde::Deserialize)]
3pub struct GovHydroDD {
4    #[serde(flatten)]
5    pub base: super::TurbineGovernorDynamics,
6    /// Turbine numerator multiplier (Aturb) (see parameter detail 3). Typical value = -1.
7    #[serde(skip_serializing_if = "Option::is_none")]
8    pub aturb: Option<f64>,
9    /// Turbine denominator multiplier (Bturb) (see parameter detail 3). Typical value = 0,5.
10    #[serde(skip_serializing_if = "Option::is_none")]
11    pub bturb: Option<f64>,
12    /// Intentional dead-band width (db1). Unit = Hz. Typical value = 0.
13    #[serde(skip_serializing_if = "Option::is_none")]
14    pub db1: Option<f64>,
15    /// Unintentional dead-band (db2). Unit = MW. Typical value = 0.
16    #[serde(skip_serializing_if = "Option::is_none")]
17    pub db2: Option<f64>,
18    /// Intentional db hysteresis (eps). Unit = Hz. Typical value = 0.
19    #[serde(skip_serializing_if = "Option::is_none")]
20    pub eps: Option<f64>,
21    /// Maximum gate opening (Gmax) (> GovHydroDD.gmin). Typical value = 0.
22    #[serde(skip_serializing_if = "Option::is_none")]
23    pub gmax: Option<f64>,
24    /// Minimum gate opening (Gmin) (< GovHydroDD.gmax). Typical value = 0.
25    #[serde(skip_serializing_if = "Option::is_none")]
26    pub gmin: Option<f64>,
27    /// Nonlinear gain point 1, PU gv (Gv1). Typical value = 0.
28    #[serde(skip_serializing_if = "Option::is_none")]
29    pub gv1: Option<f64>,
30    /// Nonlinear gain point 2, PU gv (Gv2). Typical value = 0.
31    #[serde(skip_serializing_if = "Option::is_none")]
32    pub gv2: Option<f64>,
33    /// Nonlinear gain point 3, PU gv (Gv3). Typical value = 0.
34    #[serde(skip_serializing_if = "Option::is_none")]
35    pub gv3: Option<f64>,
36    /// Nonlinear gain point 4, PU gv (Gv4). Typical value = 0.
37    #[serde(skip_serializing_if = "Option::is_none")]
38    pub gv4: Option<f64>,
39    /// Nonlinear gain point 5, PU gv (Gv5). Typical value = 0.
40    #[serde(skip_serializing_if = "Option::is_none")]
41    pub gv5: Option<f64>,
42    /// Nonlinear gain point 6, PU gv (Gv6). Typical value = 0.
43    #[serde(skip_serializing_if = "Option::is_none")]
44    pub gv6: Option<f64>,
45    /// Input signal switch (Flag). true = Pe input is used false = feedback is received from CV. Flag is normally dependent on Tt. If Tt is zero, Flag is set to false. If Tt is not zero, Flag is set to true. Typical value = true.
46    #[serde(skip_serializing_if = "Option::is_none")]
47    pub input_signal: Option<bool>,
48    /// Single derivative gain (K1). Typical value = 3,6.
49    #[serde(skip_serializing_if = "Option::is_none")]
50    pub k1: Option<f64>,
51    /// Double derivative gain (K2). Typical value = 0,2.
52    #[serde(skip_serializing_if = "Option::is_none")]
53    pub k2: Option<f64>,
54    /// Gate servo gain (Kg). Typical value = 3.
55    #[serde(skip_serializing_if = "Option::is_none")]
56    pub kg: Option<f64>,
57    /// Integral gain (Ki). Typical value = 1.
58    #[serde(skip_serializing_if = "Option::is_none")]
59    pub ki: Option<f64>,
60    /// Base for power values (MWbase) (>0). Unit = MW.
61    #[serde(skip_serializing_if = "Option::is_none")]
62    pub mwbase: Option<f64>,
63    /// Nonlinear gain point 1, PU power (Pgv1). Typical value = 0.
64    #[serde(skip_serializing_if = "Option::is_none")]
65    pub pgv1: Option<f64>,
66    /// Nonlinear gain point 2, PU power (Pgv2). Typical value = 0.
67    #[serde(skip_serializing_if = "Option::is_none")]
68    pub pgv2: Option<f64>,
69    /// Nonlinear gain point 3, PU power (Pgv3). Typical value = 0.
70    #[serde(skip_serializing_if = "Option::is_none")]
71    pub pgv3: Option<f64>,
72    /// Nonlinear gain point 4, PU power (Pgv4). Typical value = 0.
73    #[serde(skip_serializing_if = "Option::is_none")]
74    pub pgv4: Option<f64>,
75    /// Nonlinear gain point 5, PU power (Pgv5). Typical value = 0.
76    #[serde(skip_serializing_if = "Option::is_none")]
77    pub pgv5: Option<f64>,
78    /// Nonlinear gain point 6, PU power (Pgv6). Typical value = 0.
79    #[serde(skip_serializing_if = "Option::is_none")]
80    pub pgv6: Option<f64>,
81    /// Maximum gate opening, PU of MWbase (Pmax) (> GovHydroDD.pmin). Typical value = 1.
82    #[serde(skip_serializing_if = "Option::is_none")]
83    pub pmax: Option<f64>,
84    /// Minimum gate opening, PU of MWbase (Pmin) (> GovHydroDD.pmax). Typical value = 0.
85    #[serde(skip_serializing_if = "Option::is_none")]
86    pub pmin: Option<f64>,
87    /// Steady state droop (R). Typical value = 0,05.
88    #[serde(skip_serializing_if = "Option::is_none")]
89    pub r: Option<f64>,
90    /// Input filter time constant (Td) (>= 0). If = 0, block is bypassed. Typical value = 0.
91    #[serde(skip_serializing_if = "Option::is_none")]
92    pub td: Option<f64>,
93    /// Washout time constant (Tf) (>= 0). Typical value = 0,1.
94    #[serde(skip_serializing_if = "Option::is_none")]
95    pub tf: Option<f64>,
96    /// Gate servo time constant (Tp) (>= 0). If = 0, block is bypassed. Typical value = 0,35.
97    #[serde(skip_serializing_if = "Option::is_none")]
98    pub tp: Option<f64>,
99    /// Power feedback time constant (Tt) (>= 0). If = 0, block is bypassed. Typical value = 0,02.
100    #[serde(skip_serializing_if = "Option::is_none")]
101    pub tt: Option<f64>,
102    /// Turbine time constant (Tturb) (>= 0). See parameter detail 3. Typical value = 0,8.
103    #[serde(skip_serializing_if = "Option::is_none")]
104    pub tturb: Option<f64>,
105    /// Maximum gate closing velocity (Velcl). Unit = PU / s. Typical value = -0,14.
106    #[serde(skip_serializing_if = "Option::is_none")]
107    pub velcl: Option<f64>,
108    /// Maximum gate opening velocity (Velop). Unit = PU / s. Typical value = 0,09.
109    #[serde(skip_serializing_if = "Option::is_none")]
110    pub velop: Option<f64>,
111}
112impl crate::base::CimElement for GovHydroDD {
113    fn mrid(&self) -> &str { &self.base.base.base.id }
114    fn type_name(&self) -> &'static str { "GovHydroDD" }
115    fn as_any(&self) -> &dyn std::any::Any { self }
116    fn to_json_value(&self) -> serde_json::Value {
117        serde_json::to_value(self).unwrap_or(serde_json::Value::Null)
118    }
119    fn to_block(&self) -> crate::base::RdfBlock {
120        let mut block = self.base.to_block();
121        block.type_name = "GovHydroDD".to_string();
122        if let Some(v) = self.aturb {
123            block.fields.insert("GovHydroDD.aturb".into(), crate::base::FieldValue::Text(v.to_string()));
124        }
125        if let Some(v) = self.bturb {
126            block.fields.insert("GovHydroDD.bturb".into(), crate::base::FieldValue::Text(v.to_string()));
127        }
128        if let Some(v) = self.db1 {
129            block.fields.insert("GovHydroDD.db1".into(), crate::base::FieldValue::Text(v.to_string()));
130        }
131        if let Some(v) = self.db2 {
132            block.fields.insert("GovHydroDD.db2".into(), crate::base::FieldValue::Text(v.to_string()));
133        }
134        if let Some(v) = self.eps {
135            block.fields.insert("GovHydroDD.eps".into(), crate::base::FieldValue::Text(v.to_string()));
136        }
137        if let Some(v) = self.gmax {
138            block.fields.insert("GovHydroDD.gmax".into(), crate::base::FieldValue::Text(v.to_string()));
139        }
140        if let Some(v) = self.gmin {
141            block.fields.insert("GovHydroDD.gmin".into(), crate::base::FieldValue::Text(v.to_string()));
142        }
143        if let Some(v) = self.gv1 {
144            block.fields.insert("GovHydroDD.gv1".into(), crate::base::FieldValue::Text(v.to_string()));
145        }
146        if let Some(v) = self.gv2 {
147            block.fields.insert("GovHydroDD.gv2".into(), crate::base::FieldValue::Text(v.to_string()));
148        }
149        if let Some(v) = self.gv3 {
150            block.fields.insert("GovHydroDD.gv3".into(), crate::base::FieldValue::Text(v.to_string()));
151        }
152        if let Some(v) = self.gv4 {
153            block.fields.insert("GovHydroDD.gv4".into(), crate::base::FieldValue::Text(v.to_string()));
154        }
155        if let Some(v) = self.gv5 {
156            block.fields.insert("GovHydroDD.gv5".into(), crate::base::FieldValue::Text(v.to_string()));
157        }
158        if let Some(v) = self.gv6 {
159            block.fields.insert("GovHydroDD.gv6".into(), crate::base::FieldValue::Text(v.to_string()));
160        }
161        if let Some(v) = self.input_signal {
162            block.fields.insert("GovHydroDD.inputSignal".into(), crate::base::FieldValue::Text(v.to_string()));
163        }
164        if let Some(v) = self.k1 {
165            block.fields.insert("GovHydroDD.k1".into(), crate::base::FieldValue::Text(v.to_string()));
166        }
167        if let Some(v) = self.k2 {
168            block.fields.insert("GovHydroDD.k2".into(), crate::base::FieldValue::Text(v.to_string()));
169        }
170        if let Some(v) = self.kg {
171            block.fields.insert("GovHydroDD.kg".into(), crate::base::FieldValue::Text(v.to_string()));
172        }
173        if let Some(v) = self.ki {
174            block.fields.insert("GovHydroDD.ki".into(), crate::base::FieldValue::Text(v.to_string()));
175        }
176        if let Some(v) = self.mwbase {
177            block.fields.insert("GovHydroDD.mwbase".into(), crate::base::FieldValue::Text(v.to_string()));
178        }
179        if let Some(v) = self.pgv1 {
180            block.fields.insert("GovHydroDD.pgv1".into(), crate::base::FieldValue::Text(v.to_string()));
181        }
182        if let Some(v) = self.pgv2 {
183            block.fields.insert("GovHydroDD.pgv2".into(), crate::base::FieldValue::Text(v.to_string()));
184        }
185        if let Some(v) = self.pgv3 {
186            block.fields.insert("GovHydroDD.pgv3".into(), crate::base::FieldValue::Text(v.to_string()));
187        }
188        if let Some(v) = self.pgv4 {
189            block.fields.insert("GovHydroDD.pgv4".into(), crate::base::FieldValue::Text(v.to_string()));
190        }
191        if let Some(v) = self.pgv5 {
192            block.fields.insert("GovHydroDD.pgv5".into(), crate::base::FieldValue::Text(v.to_string()));
193        }
194        if let Some(v) = self.pgv6 {
195            block.fields.insert("GovHydroDD.pgv6".into(), crate::base::FieldValue::Text(v.to_string()));
196        }
197        if let Some(v) = self.pmax {
198            block.fields.insert("GovHydroDD.pmax".into(), crate::base::FieldValue::Text(v.to_string()));
199        }
200        if let Some(v) = self.pmin {
201            block.fields.insert("GovHydroDD.pmin".into(), crate::base::FieldValue::Text(v.to_string()));
202        }
203        if let Some(v) = self.r {
204            block.fields.insert("GovHydroDD.r".into(), crate::base::FieldValue::Text(v.to_string()));
205        }
206        if let Some(v) = self.td {
207            block.fields.insert("GovHydroDD.td".into(), crate::base::FieldValue::Text(v.to_string()));
208        }
209        if let Some(v) = self.tf {
210            block.fields.insert("GovHydroDD.tf".into(), crate::base::FieldValue::Text(v.to_string()));
211        }
212        if let Some(v) = self.tp {
213            block.fields.insert("GovHydroDD.tp".into(), crate::base::FieldValue::Text(v.to_string()));
214        }
215        if let Some(v) = self.tt {
216            block.fields.insert("GovHydroDD.tt".into(), crate::base::FieldValue::Text(v.to_string()));
217        }
218        if let Some(v) = self.tturb {
219            block.fields.insert("GovHydroDD.tturb".into(), crate::base::FieldValue::Text(v.to_string()));
220        }
221        if let Some(v) = self.velcl {
222            block.fields.insert("GovHydroDD.velcl".into(), crate::base::FieldValue::Text(v.to_string()));
223        }
224        if let Some(v) = self.velop {
225            block.fields.insert("GovHydroDD.velop".into(), crate::base::FieldValue::Text(v.to_string()));
226        }
227        block
228    }
229}
230
231impl GovHydroDD {
232    pub fn from_block(b: &crate::base::RdfBlock) -> Self {
233        let mut obj = Self::default();
234        obj.base.base.base.id.clone_from(&b.mrid);
235        for (key, val) in &b.fields {
236            match key.as_str() {
237                "GovHydroDD.aturb" => {
238                    match val {
239                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.aturb = Some(v); } }
240                        crate::base::FieldValue::TextList(svs) => {
241                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.aturb = Some(v); } }
242                        }
243                        _ => {}
244                    }
245                }
246                "GovHydroDD.bturb" => {
247                    match val {
248                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.bturb = Some(v); } }
249                        crate::base::FieldValue::TextList(svs) => {
250                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.bturb = Some(v); } }
251                        }
252                        _ => {}
253                    }
254                }
255                "GovHydroDD.db1" => {
256                    match val {
257                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.db1 = Some(v); } }
258                        crate::base::FieldValue::TextList(svs) => {
259                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.db1 = Some(v); } }
260                        }
261                        _ => {}
262                    }
263                }
264                "GovHydroDD.db2" => {
265                    match val {
266                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.db2 = Some(v); } }
267                        crate::base::FieldValue::TextList(svs) => {
268                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.db2 = Some(v); } }
269                        }
270                        _ => {}
271                    }
272                }
273                "GovHydroDD.eps" => {
274                    match val {
275                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.eps = Some(v); } }
276                        crate::base::FieldValue::TextList(svs) => {
277                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.eps = Some(v); } }
278                        }
279                        _ => {}
280                    }
281                }
282                "GovHydroDD.gmax" => {
283                    match val {
284                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.gmax = Some(v); } }
285                        crate::base::FieldValue::TextList(svs) => {
286                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.gmax = Some(v); } }
287                        }
288                        _ => {}
289                    }
290                }
291                "GovHydroDD.gmin" => {
292                    match val {
293                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.gmin = Some(v); } }
294                        crate::base::FieldValue::TextList(svs) => {
295                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.gmin = Some(v); } }
296                        }
297                        _ => {}
298                    }
299                }
300                "GovHydroDD.gv1" => {
301                    match val {
302                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.gv1 = Some(v); } }
303                        crate::base::FieldValue::TextList(svs) => {
304                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.gv1 = Some(v); } }
305                        }
306                        _ => {}
307                    }
308                }
309                "GovHydroDD.gv2" => {
310                    match val {
311                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.gv2 = Some(v); } }
312                        crate::base::FieldValue::TextList(svs) => {
313                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.gv2 = Some(v); } }
314                        }
315                        _ => {}
316                    }
317                }
318                "GovHydroDD.gv3" => {
319                    match val {
320                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.gv3 = Some(v); } }
321                        crate::base::FieldValue::TextList(svs) => {
322                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.gv3 = Some(v); } }
323                        }
324                        _ => {}
325                    }
326                }
327                "GovHydroDD.gv4" => {
328                    match val {
329                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.gv4 = Some(v); } }
330                        crate::base::FieldValue::TextList(svs) => {
331                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.gv4 = Some(v); } }
332                        }
333                        _ => {}
334                    }
335                }
336                "GovHydroDD.gv5" => {
337                    match val {
338                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.gv5 = Some(v); } }
339                        crate::base::FieldValue::TextList(svs) => {
340                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.gv5 = Some(v); } }
341                        }
342                        _ => {}
343                    }
344                }
345                "GovHydroDD.gv6" => {
346                    match val {
347                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.gv6 = Some(v); } }
348                        crate::base::FieldValue::TextList(svs) => {
349                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.gv6 = Some(v); } }
350                        }
351                        _ => {}
352                    }
353                }
354                "GovHydroDD.inputSignal" => {
355                    match val {
356                        crate::base::FieldValue::Text(sv) => { obj.input_signal = Some(sv.trim() == "true"); }
357                        crate::base::FieldValue::TextList(svs) => {
358                            if let Some(sv) = svs.last() { obj.input_signal = Some(sv.trim() == "true"); }
359                        }
360                        _ => {}
361                    }
362                }
363                "GovHydroDD.k1" => {
364                    match val {
365                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.k1 = Some(v); } }
366                        crate::base::FieldValue::TextList(svs) => {
367                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.k1 = Some(v); } }
368                        }
369                        _ => {}
370                    }
371                }
372                "GovHydroDD.k2" => {
373                    match val {
374                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.k2 = Some(v); } }
375                        crate::base::FieldValue::TextList(svs) => {
376                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.k2 = Some(v); } }
377                        }
378                        _ => {}
379                    }
380                }
381                "GovHydroDD.kg" => {
382                    match val {
383                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.kg = Some(v); } }
384                        crate::base::FieldValue::TextList(svs) => {
385                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.kg = Some(v); } }
386                        }
387                        _ => {}
388                    }
389                }
390                "GovHydroDD.ki" => {
391                    match val {
392                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.ki = Some(v); } }
393                        crate::base::FieldValue::TextList(svs) => {
394                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.ki = Some(v); } }
395                        }
396                        _ => {}
397                    }
398                }
399                "GovHydroDD.mwbase" => {
400                    match val {
401                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.mwbase = Some(v); } }
402                        crate::base::FieldValue::TextList(svs) => {
403                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.mwbase = Some(v); } }
404                        }
405                        _ => {}
406                    }
407                }
408                "GovHydroDD.pgv1" => {
409                    match val {
410                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.pgv1 = Some(v); } }
411                        crate::base::FieldValue::TextList(svs) => {
412                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.pgv1 = Some(v); } }
413                        }
414                        _ => {}
415                    }
416                }
417                "GovHydroDD.pgv2" => {
418                    match val {
419                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.pgv2 = Some(v); } }
420                        crate::base::FieldValue::TextList(svs) => {
421                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.pgv2 = Some(v); } }
422                        }
423                        _ => {}
424                    }
425                }
426                "GovHydroDD.pgv3" => {
427                    match val {
428                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.pgv3 = Some(v); } }
429                        crate::base::FieldValue::TextList(svs) => {
430                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.pgv3 = Some(v); } }
431                        }
432                        _ => {}
433                    }
434                }
435                "GovHydroDD.pgv4" => {
436                    match val {
437                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.pgv4 = Some(v); } }
438                        crate::base::FieldValue::TextList(svs) => {
439                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.pgv4 = Some(v); } }
440                        }
441                        _ => {}
442                    }
443                }
444                "GovHydroDD.pgv5" => {
445                    match val {
446                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.pgv5 = Some(v); } }
447                        crate::base::FieldValue::TextList(svs) => {
448                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.pgv5 = Some(v); } }
449                        }
450                        _ => {}
451                    }
452                }
453                "GovHydroDD.pgv6" => {
454                    match val {
455                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.pgv6 = Some(v); } }
456                        crate::base::FieldValue::TextList(svs) => {
457                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.pgv6 = Some(v); } }
458                        }
459                        _ => {}
460                    }
461                }
462                "GovHydroDD.pmax" => {
463                    match val {
464                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.pmax = Some(v); } }
465                        crate::base::FieldValue::TextList(svs) => {
466                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.pmax = Some(v); } }
467                        }
468                        _ => {}
469                    }
470                }
471                "GovHydroDD.pmin" => {
472                    match val {
473                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.pmin = Some(v); } }
474                        crate::base::FieldValue::TextList(svs) => {
475                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.pmin = Some(v); } }
476                        }
477                        _ => {}
478                    }
479                }
480                "GovHydroDD.r" => {
481                    match val {
482                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.r = Some(v); } }
483                        crate::base::FieldValue::TextList(svs) => {
484                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.r = Some(v); } }
485                        }
486                        _ => {}
487                    }
488                }
489                "GovHydroDD.td" => {
490                    match val {
491                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.td = Some(v); } }
492                        crate::base::FieldValue::TextList(svs) => {
493                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.td = Some(v); } }
494                        }
495                        _ => {}
496                    }
497                }
498                "GovHydroDD.tf" => {
499                    match val {
500                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.tf = Some(v); } }
501                        crate::base::FieldValue::TextList(svs) => {
502                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.tf = Some(v); } }
503                        }
504                        _ => {}
505                    }
506                }
507                "GovHydroDD.tp" => {
508                    match val {
509                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.tp = Some(v); } }
510                        crate::base::FieldValue::TextList(svs) => {
511                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.tp = Some(v); } }
512                        }
513                        _ => {}
514                    }
515                }
516                "GovHydroDD.tt" => {
517                    match val {
518                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.tt = Some(v); } }
519                        crate::base::FieldValue::TextList(svs) => {
520                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.tt = Some(v); } }
521                        }
522                        _ => {}
523                    }
524                }
525                "GovHydroDD.tturb" => {
526                    match val {
527                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.tturb = Some(v); } }
528                        crate::base::FieldValue::TextList(svs) => {
529                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.tturb = Some(v); } }
530                        }
531                        _ => {}
532                    }
533                }
534                "GovHydroDD.velcl" => {
535                    match val {
536                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.velcl = Some(v); } }
537                        crate::base::FieldValue::TextList(svs) => {
538                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.velcl = Some(v); } }
539                        }
540                        _ => {}
541                    }
542                }
543                "GovHydroDD.velop" => {
544                    match val {
545                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.velop = Some(v); } }
546                        crate::base::FieldValue::TextList(svs) => {
547                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.velop = Some(v); } }
548                        }
549                        _ => {}
550                    }
551                }
552                "TurbineGovernorDynamics.AsynchronousMachineDynamics" => {
553                    if let crate::base::FieldValue::Resource(sv) = val {
554                        obj.base.asynchronous_machine_dynamics = Some(crate::base::MridRef { mrid: sv.clone() });
555                    }
556                }
557                "TurbineGovernorDynamics.SynchronousMachineDynamics" => {
558                    if let crate::base::FieldValue::Resource(sv) = val {
559                        obj.base.synchronous_machine_dynamics = Some(crate::base::MridRef { mrid: sv.clone() });
560                    }
561                }
562                "DynamicsFunctionBlock.enabled" => {
563                    match val {
564                        crate::base::FieldValue::Text(sv) => { obj.base.base.enabled = Some(sv.trim() == "true"); }
565                        crate::base::FieldValue::TextList(svs) => {
566                            if let Some(sv) = svs.last() { obj.base.base.enabled = Some(sv.trim() == "true"); }
567                        }
568                        _ => {}
569                    }
570                }
571                "IdentifiedObject.description" => {
572                    match val {
573                        crate::base::FieldValue::Text(sv) => { obj.base.base.base.description = sv.clone(); }
574                        crate::base::FieldValue::TextList(svs) => {
575                            if let Some(sv) = svs.last() { obj.base.base.base.description = sv.clone(); }
576                        }
577                        _ => {}
578                    }
579                }
580                "IdentifiedObject.energyIdentCodeEic" => {
581                    match val {
582                        crate::base::FieldValue::Text(sv) => { obj.base.base.base.energy_ident_code_eic = sv.clone(); }
583                        crate::base::FieldValue::TextList(svs) => {
584                            if let Some(sv) = svs.last() { obj.base.base.base.energy_ident_code_eic = sv.clone(); }
585                        }
586                        _ => {}
587                    }
588                }
589                "IdentifiedObject.mRID" => {
590                    match val {
591                        crate::base::FieldValue::Text(sv) => { obj.base.base.base.m_rid = sv.clone(); }
592                        crate::base::FieldValue::TextList(svs) => {
593                            if let Some(sv) = svs.last() { obj.base.base.base.m_rid = sv.clone(); }
594                        }
595                        _ => {}
596                    }
597                }
598                "IdentifiedObject.name" => {
599                    match val {
600                        crate::base::FieldValue::Text(sv) => { obj.base.base.base.name = sv.clone(); }
601                        crate::base::FieldValue::TextList(svs) => {
602                            if let Some(sv) = svs.last() { obj.base.base.base.name = sv.clone(); }
603                        }
604                        _ => {}
605                    }
606                }
607                "IdentifiedObject.shortName" => {
608                    match val {
609                        crate::base::FieldValue::Text(sv) => { obj.base.base.base.short_name = sv.clone(); }
610                        crate::base::FieldValue::TextList(svs) => {
611                            if let Some(sv) = svs.last() { obj.base.base.base.short_name = sv.clone(); }
612                        }
613                        _ => {}
614                    }
615                }
616                _ => {}
617            }
618        }
619        obj
620    }
621}