The function park calculates the matrix P that transforms abc variables into dq0 variables with arbitrary angular orientation theta.
P can be factorised into a constant, angle independent orthogonal matrix P0 and an angle-dependent rotation R
P(theta) = R'(theta)*P0
Using the definition
c_k = cos(theta - k*2*pi/3), k=0,1,2 (phases a, b, c) s_k = sin(theta - k*2*pi/3), k=0,1,2 (phases a, b, c)
it takes the form
                       [ c_0,  c_1, c_2]
  P(theta) = sqrt(2/3)*[-s_0, -s_1,-s_2]
                       [ w,    w,   w  ]
with
                        [ 1,      -1/2,       -1/2]
  P0 = P(0) = sqrt(2/3)*[ 0, sqrt(3)/2, -sqrt(3)/2]
                        [ w,         w,          w]
and
             [c_0, -s_0, 0]
  R(theta) = [s_0,  c_0, 0]
             [  0,  0,   1]
function park extends Modelica.Icons.Function; input SI.Angle theta "transformation angle"; output Real[3, 3] P "Park transformation matrix"; end park;