from .SynchronousMachineDetailed import SynchronousMachineDetailed
from .CGMESProfile import Profile
[docs]
class SynchronousMachineEquivalentCircuit(SynchronousMachineDetailed):
    """
    The electrical equations for all variations of the synchronous models are based on the SynchronousEquivalentCircuit diagram for the direct and quadrature axes.    =  +   =  +  *  / ( + )  =  +  * *  / ( *  +  *  +  * )  =  +   =  +  *  / (+ )  =  +  **  / ( *  +  *  +  * )  = ( + ) / ( * )  = ( *  +  *  +  * ) / ( *  * ( + )  = ( + ) / ( * )  = ( *  +  *  +  * )/ ( *  * ( + ) Same equations using CIM attributes from SynchronousMachineTimeConstantReactance class on left of = sign and SynchronousMachineEquivalentCircuit class on right (except as noted): xDirectSync = xad + RotatingMachineDynamics.statorLeakageReactance xDirectTrans = RotatingMachineDynamics.statorLeakageReactance + xad * xfd / (xad + xfd) xDirectSubtrans = RotatingMachineDynamics.statorLeakageReactance + xad * xfd * x1d / (xad * xfd + xad * x1d + xfd * x1d) xQuadSync = xaq + RotatingMachineDynamics.statorLeakageReactance xQuadTrans = RotatingMachineDynamics.statorLeakageReactance + xaq * x1q / (xaq+ x1q) xQuadSubtrans = RotatingMachineDynamics.statorLeakageReactance + xaq * x1q* x2q / (xaq * x1q + xaq * x2q + x1q * x2q)  tpdo = (xad + xfd) / (2*pi*nominal frequency * rfd) tppdo = (xad * xfd + xad * x1d + xfd * x1d) / (2*pi*nominal frequency * r1d * (xad + xfd) tpqo = (xaq + x1q) / (2*pi*nominal frequency * r1q) tppqo = (xaq * x1q + xaq * x2q + x1q * x2q)/ (2*pi*nominal frequency * r2q * (xaq + x1q).  Are only valid for a simplified model where "Canay" reactance is zero.
    :r1d: D-axis damper 1 winding resistance. Default: 0.0
    :r1q: Q-axis damper 1 winding resistance. Default: 0.0
    :r2q: Q-axis damper 2 winding resistance. Default: 0.0
    :rfd: Field winding resistance. Default: 0.0
    :x1d: D-axis damper 1 winding leakage reactance. Default: 0.0
    :x1q: Q-axis damper 1 winding leakage reactance. Default: 0.0
    :x2q: Q-axis damper 2 winding leakage reactance. Default: 0.0
    :xad: D-axis mutual reactance. Default: 0.0
    :xaq: Q-axis mutual reactance. Default: 0.0
    :xf1d: Differential mutual (`Canay`) reactance. Default: 0.0
    :xfd: Field winding leakage reactance. Default: 0.0
    """
    possibleProfileList = {
        "class": [Profile.DY.value, ],
        "r1d": [Profile.DY.value, ],
        "r1q": [Profile.DY.value, ],
        "r2q": [Profile.DY.value, ],
        "rfd": [Profile.DY.value, ],
        "x1d": [Profile.DY.value, ],
        "x1q": [Profile.DY.value, ],
        "x2q": [Profile.DY.value, ],
        "xad": [Profile.DY.value, ],
        "xaq": [Profile.DY.value, ],
        "xf1d": [Profile.DY.value, ],
        "xfd": [Profile.DY.value, ],
    }
    serializationProfile = {}
    recommendedClassProfile = Profile.DY.value
    __doc__ += "\nDocumentation of parent class SynchronousMachineDetailed:\n" + SynchronousMachineDetailed.__doc__
    def __init__(self, r1d = 0.0, r1q = 0.0, r2q = 0.0, rfd = 0.0, x1d = 0.0, x1q = 0.0, x2q = 0.0, xad = 0.0, xaq = 0.0, xf1d = 0.0, xfd = 0.0, *args, **kw_args):
        super().__init__(*args, **kw_args)
        self.r1d = r1d
        self.r1q = r1q
        self.r2q = r2q
        self.rfd = rfd
        self.x1d = x1d
        self.x1q = x1q
        self.x2q = x2q
        self.xad = xad
        self.xaq = xaq
        self.xf1d = xf1d
        self.xfd = xfd
    def __str__(self):
        str = "class=SynchronousMachineEquivalentCircuit\n"
        attributes = self.__dict__
        for key in attributes.keys():
            str = str + key + "={}\n".format(repr(attributes[key]))
        return str