1+ from pythonfmu3 import Fmi3Causality , ModelExchange , Fmi3Variability , Fmi3SlaveBase , Fmi3Status , Float64 , Fmi3Initial , Unit , Float64Type , Fmi3StepResult
2+
3+ from typing import List
4+
5+ class Robertson (Fmi3SlaveBase , ModelExchange ):
6+
7+ def __init__ (self , ** kwargs ):
8+ super ().__init__ (** kwargs )
9+
10+ self .author = "Stephen Smith"
11+ self .description = "Robertson test problem"
12+
13+ self .time = 0.0
14+ self .y1 = 1
15+ self .y2 = 0
16+ self .y3 = 0
17+ self .dery1 = - 0.04
18+ self .dery2 = 0.04
19+ self .dery3 = 0.0
20+
21+ self .register_variable (Float64 ("time" , causality = Fmi3Causality .independent , variability = Fmi3Variability .continuous ))
22+ self .register_variable (Float64 ("y1" , causality = Fmi3Causality .output , start = 1 , variability = Fmi3Variability .continuous , initial = Fmi3Initial .exact ))
23+ self .register_variable (Float64 ("y2" , causality = Fmi3Causality .output , start = 0 , variability = Fmi3Variability .continuous , initial = Fmi3Initial .exact ))
24+ self .register_variable (Float64 ("y3" , causality = Fmi3Causality .output , start = 0 , variability = Fmi3Variability .continuous , initial = Fmi3Initial .exact ))
25+ self .register_variable (Float64 ("dery1" , causality = Fmi3Causality .local , variability = Fmi3Variability .continuous , derivative = 1 ))
26+ self .register_variable (Float64 ("dery2" , causality = Fmi3Causality .local , variability = Fmi3Variability .continuous , derivative = 2 ))
27+ self .register_variable (Float64 ("dery3" , causality = Fmi3Causality .local , variability = Fmi3Variability .continuous , derivative = 3 ))
28+
29+
30+ def get_continuous_state_derivatives (self ) -> List [float ]:
31+ self .dery1 = - 0.04 * self .y1 + 1e4 * self .y2 * self .y3
32+ self .dery2 = 0.04 * self .y1 - 1e4 * self .y2 * self .y3 - 3e7 * self .y2 ** 2
33+ self .dery3 = 3e7 * self .y2 ** 2
34+ return [self .dery1 , self .dery2 , self .dery3 ]
0 commit comments