Example #1
0
class FluidChamber(DynamicalModel):
    VFluid = F.RealVariable(causality=CS.Parameter,
                            variability=VR.Constant,
                            default=0.1)
    pInit = F.RealVariable(causality=CS.Parameter,
                           variability=VR.Constant,
                           default=300e5)
    molarMass = F.RealVariable(causality=CS.Parameter,
                               variability=VR.Constant,
                               default=16e-3)
    RGas = F.RealVariable(causality=CS.Parameter, variability=VR.Constant)
    T = F.RealState(start=300)
    rho = F.RealState(start=1)
    p = F.RealVariable(causality=CS.Output)
    m = F.RealVariable(causality=CS.Output)
    QDotWall = F.RealVariable(causality=CS.Input)
    portWall = F.Port([p, T, QDotWall])

    def initialize(self):
        self.RGas = 8.13 / self.molarMass
        self.rho = self.pInit / (self.RGas * self.rho * self.T)

    @F.Function(inputs=[T, rho], outputs=[p])
    def setState(self, t):
        self.p = self.RGas * self.rho * self.T

    def compute(self, t):
        self.m = self.VFluid * self.rho
        self.der.rho = 0
        self.der.T = self.QDotWall / self.m / (5. / 2 * self.RGas)
Example #2
0
class ForceSource(DynamicalModel):
    f = F.RealVariable(causality=CS.Output,
                       variability=VR.Constant,
                       default=-10.)
    x = F.RealVariable(causality=CS.Input)
    v = F.RealVariable(causality=CS.Input)
    p = F.Port([f, v, x])
Example #3
0
class WaterTower(DynamicalModel):
    ACrossSection = F.RealVariable(causality=CS.Parameter,
                                   variability=VR.Constant,
                                   default=1.0)
    hWater = F.RealState(start=0.5)
    mDotIn = F.RealVariable(causality=CS.Input)
    mDotOut = F.RealVariable(causality=CS.Input)
    p = F.RealVariable(causality=CS.Output)
    portIn = F.Port([p, mDotIn])
    portOut = F.Port([p, mDotOut])

    @F.Function(inputs=[hWater], outputs=[p])
    def compute_p(self, t):
        self.p = 1e5 + 1000 * 9.8 * self.hWater

    def compute(self, t):
        self.der.hWater = (self.mDotIn +
                           self.mDotOut) / 1000. / self.ACrossSection
Example #4
0
class Valve(DynamicalModel):
    Kv = F.RealVariable(causality=CS.Parameter,
                        variability=VR.Constant,
                        default=2000.)
    VDot = F.RealVariable(causality=CS.Output)
    mDot1 = F.RealVariable(causality=CS.Output)
    mDot2 = F.RealVariable(causality=CS.Output)
    p1 = F.RealVariable(causality=CS.Input)
    p2 = F.RealVariable(causality=CS.Input)
    controlSignal = F.RealVariable(causality=CS.Input, default=1)
    port1 = F.Port([p1, mDot1])
    port2 = F.Port([p2, mDot2])

    def compute(self, t):
        N1 = 8.784e-07
        if (self.p1 > self.p2):
            self.VDot = N1 * self.Kv * m.sqrt((self.p1 - self.p2) / 1.0)
            self.mDot2 = 1000 * self.VDot * self.controlSignal
            self.mDot1 = -self.mDot2
        else:
            self.VDot = 0
            self.mDot2 = 0
            self.mDot1 = 0
        print self.mDot1
Example #5
0
class Convection(DynamicalModel):
    hConv = F.RealVariable(causality=CS.Parameter,
                           variability=VR.Constant,
                           default=10)
    area = F.RealVariable(causality=CS.Parameter,
                          variability=VR.Constant,
                          default=0.2)
    pFluid = F.RealVariable(causality=CS.Input)
    TFluid = F.RealVariable(causality=CS.Input)
    TWall = F.RealVariable(causality=CS.Input)
    QFluid = F.RealVariable(causality=CS.Output)
    QWall = F.RealVariable(causality=CS.Output)
    portFluid = F.Port([pFluid, TFluid, QFluid])
    portWall = ThermalPort('R', TVar=TWall, QVar=QWall)

    def compute(self, t):
        self.QFluid = self.hConv * self.area * (self.TWall - self.TFluid)
        self.QWall = -self.QFluid
Example #6
0
class BoundMass(DynamicalModel):
    m = F.RealVariable(causality=CS.Parameter,
                       variability=VR.Constant,
                       default=10.)
    f = F.RealVariable(causality=CS.Input, default=10.)
    x = F.RealState(start=0.1)
    v = F.RealState(start=1.)
    p = F.Port([f, v, x])

    def compute(self, t):
        self.der.x = self.v
        self.der.v = self.f / self.m

    def checkBounce(self):
        return self.x

    @F.StateEvent(locate=checkBounce)
    def onBounce(self):
        if (self.v < 0):
            self.v = -0.9 * self.v
Example #7
0
class FlowSource(DynamicalModel):
    mDot = F.RealVariable(causality=CS.Output,
                          variability=VR.Constant,
                          default=100.0)
    p = F.RealVariable(causality=CS.Input)
    port = F.Port([p, mDot])
Example #8
0
class PressureSource(DynamicalModel):
    p = F.RealVariable(causality=CS.Output,
                       variability=VR.Constant,
                       default=1e5)
    mDot = F.RealVariable(causality=CS.Input)
    port = F.Port([p, mDot])