Skip to content

Commit 6f849cd

Browse files
add vanderpol example
1 parent 558a53b commit 6f849cd

File tree

1 file changed

+32
-0
lines changed

1 file changed

+32
-0
lines changed

examples/vanderpol_me.py

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
from pythonfmu3 import Fmi3Causality, ModelExchange, Fmi3Variability, Fmi3SlaveBase, Fmi3Status, Float64, Fmi3Initial, Unit, Float64Type, Fmi3StepResult
2+
3+
from typing import List
4+
5+
class VanDerPol(Fmi3SlaveBase, ModelExchange):
6+
7+
def __init__(self, **kwargs):
8+
super().__init__(**kwargs)
9+
10+
self.author = "Stephen Smith"
11+
self.description = "Van Der Pol oscillator problem for model exchange FMUs"
12+
13+
self.time = 0.0
14+
self.mu = 1.0
15+
self.x0 = 2
16+
self.x1 = 0
17+
self.derx0 = 0.0
18+
self.derx1 = 0.0
19+
20+
self.register_variable(Float64("time", causality=Fmi3Causality.independent, variability=Fmi3Variability.continuous))
21+
self.register_variable(Float64("x0", causality=Fmi3Causality.output, start=2, variability=Fmi3Variability.continuous, initial=Fmi3Initial.exact))
22+
self.register_variable(Float64("x1", causality=Fmi3Causality.output, start=0, variability=Fmi3Variability.continuous, initial=Fmi3Initial.exact))
23+
self.register_variable(Float64("derx0", causality=Fmi3Causality.local, variability=Fmi3Variability.continuous, derivative=1))
24+
self.register_variable(Float64("derx1", causality=Fmi3Causality.local, variability=Fmi3Variability.continuous, derivative=2))
25+
self.register_variable(Float64("mu", causality=Fmi3Causality.parameter, variability=Fmi3Variability.fixed))
26+
27+
28+
def get_continuous_state_derivatives(self) -> List[float]:
29+
self.derx0 = self.x1
30+
self.derx1 = self.mu * ((1 - self.x0**2) * self.x1) - self.x0
31+
return [self.derx0, self.derx1]
32+

0 commit comments

Comments
 (0)