Rotor: rotor specific post-processing
Specific post-processing for rotors or propellers.
Those functions work with a solution tree “t” or a blade surface tree “teff”.
List of functions
– Force extractions
|
Extract slices on blade and compute Kp,Cf,CnM2,CmM2. |
|
Compute Zb. |
|
Compute thrust. |
– Accumulator export
|
Export accumulator (psi,rad) in a zone for a given psi. |
Export accumulator (psi,rad) in a zone for a given radius. |
|
|
Export accumulator (psi,rad) in a map zone. |
Contents
Force extractions
-
Post.Rotor.
extractSlices
(teff, bladeName, psi, radius, RoInf, PInf, ASOUND, Mtip, AR, CHORD, MU, relativeShaft=0., localFrame=True, delta=0.05, accumulatorSlices=None, accumulatorCnM2=None, accumulatorCmM2=None) Extract slices on blades. Export Cp, Cf on those slices. Compute CnM2 and CmM2 on those slices.
- Parameters
teff ([zone, list of zones, base, tree]) – surface stress tree
bladeName (string) – name of the blade base to work with
psi (float) – angular angle of blade in teff (in degree)
radius (list of floats) – list of radius to extract
RoInf (float) – infinite flow density
PInf (float) – infinite flow pressure
ASOUND (float) – infinite flow sound speed
Mtip (float) – blade mach tip
AR (float) – blade length
CHORD (float) – blade mean chord
MU (float) – advance ratio
relativeShaft (float) – relative shaft angle if the mesh is not in the wind frame
localFrame (boolean) – if True, return CnM2 and CmM2 in relative (blade section) frame
delta (float) – mean mesh step on blade in the span wise direction
accumulatorSlices (dictionary) – if not None, accumulate slices
accumulatorCnM2 (dictionary) – if not None, accumulate CnM2
accumulatorCmM2 (dictionary) – if not None, accumulate CmM2
- Returns
list of slices, list of CnM2, list of CmM2 (one for each radius)
- Return type
list of zones, list of 3 floats, list of 3 floats
Example of use:
# - extractSlices (pyTree) - import Converter.PyTree as C import Post.Rotor as PR import math Mtip = 0.6462; MU = 0.4 CHORD = 0.14; AR = 2.1 RoInf = 1.225; PInf = 101325.; AINF = 340.1 SIGMA = 4*CHORD / (math.pi*AR) teff = C.convertFile2PyTree('stress_419.cgns') accu = {} psi = 419.; radius = [1.2,1.3,2.] slices, CnM2, CmM2 = PR.extractSlices(teff, 'Blade7A_00', psi, radius, RoInf, PInf, AINF, Mtip, AR, CHORD, MU, accumulatorCnM2=accu, localFrame=True, relativeShaft=-12.12) # export for Cp, Cf C.convertPyTree2File(slices, 'slice.cgns') # export for CnM2 maps exp = PR.exportAccumulatorMap(accu, vars=['CnM2x','CnM2y','CnM2z']) C.convertPyTree2File(exp, 'map.cgns')
-
Post.Rotor.
computeZb
(teff, psi, RoInf, ASOUND, Mtip, AR, SIGMA, relativeShaft=0., accumulatorZb=None) Compute Zb in the wind frame.
- Parameters
teff ([zone, list of zones, base, tree]) – surface stress tree
psi (float) – angular angle of blade in teff (in degree)
RoInf (float) – infinite flow density
ASOUND (float) – infinite flow sound speed
Mtip (float) – blade mach tip
AR (float) – blade length in m
SIGMA (float) – rotor solidity (= Nb*c / pi*AR)
relativeShaft (float) – relative shaft angle if the mesh is not in the wind frame
accumulatorZb (dictionary) – if not None, accumulate Zb
- Returns
[Xb,Yb,Zb]
- Return type
list of 3 floats
Example of use:
# - computeZb (pyTree) - import Converter.PyTree as C import Post.Rotor as PR import math Mtip = 0.6462; MU = 0.4 CHORD = 0.14; AR = 2.1 RoInf = 1.225; PInf = 101325.; AINF = 340.1 SIGMA = 4*CHORD / (math.pi*AR) teff = C.convertFile2PyTree('stress_419.cgns') zb = PR.computeZb(teff, 419., RoInf, AINF, Mtip, AR, SIGMA, relativeShaft=-12.12); print(zb) #> [-1.101453126880057, -0.11259440192933268, 10.18004327358801] accu = {} zb = PR.computeZb(teff, 419., RoInf, AINF, Mtip, AR, SIGMA, relativeShaft=-12.12, accumulatorZb=accu) ret = PR.exportAccumulatorPerRadius(accu, vars=['Xb','Yb','Zb']) C.convertPyTree2File(ret, 'Zb.cgns')
-
Post.Rotor.
computeThrustAndTorque
(teff, psi, PInf, center=(0, 0, 0), relativeShaft=0., accumulatorThrust=None) Compute Thrust in the rotor frame (that is orthogonal to rotor).
- Parameters
teff ([zone, list of zones, base, tree]) – surface stress tree
psi (float) – angular angle of blade in teff (in degree)
PInf (float) – infinite flow pressure
center (list of 3 floats) – center for momentum computations
relativeShaft (float) – relative shaft angle if the mesh is not in the rotor frame
accumulatorThrust (dictionary) – if not None, accumulate thrust and torque
- Returns
thrust=[tx,ty,tz] and torque=[mx,my,mz]
- Return type
2 lists of 3 floats
Example of use:
# - computeThrustAndTorque (pyTree) - import Converter.PyTree as C import Post.Rotor as PR import math Mtip = 0.6462; MU = 0.4 CHORD = 0.14; AR = 2.1 RoInf = 1.225; PInf = 101325.; AINF = 340.1 SIGMA = 4*CHORD / (math.pi*AR) teff = C.convertFile2PyTree('stress_419.cgns') thrust,torque = PR.computeThrustAndTorque(teff, 419., PInf, center=(0,0,0), relativeShaft=0.); print('thrust', thrust, 'torque',torque) #> thrust [368.952736931205, -39.172151751517326, 3543.2002154791667] torque [226.5518638611441, 950.9479780913017, -935.2791149345967] accu = {} thrust, torque = PR.computeThrustAndTorque(teff, 419., PInf, center=(0,0,0), relativeShaft=0., accumulatorThrust=accu) ret = PR.exportAccumulatorPerRadius(accu, vars=['ThrustX','ThrustY','ThrustZ','TorqueX','TorqueY','TorqueZ']) C.convertPyTree2File(ret, 'Thrust.cgns')
Accumulator export
-
Post.Rotor.
exportAccumulatorPerPsi
(accumulator, psi=0., vars=['F1','F2']) Export a given psi of an accumulator (psi,rad) in a 1D zone. For distributed computations, the exported zone is identical on all processors.
- Parameters
accumulator (dictionary) – (psi,rad) accumulator
psi (float) – angular angle to be extracted (in degree)
vars (list of strings) – the name of variables stored in accumulator
- Returns
a single Zone with vars corresponding to psi
- Return type
Zone
Example of use:
# - exportAccumulatorPerPsi (pyTree) - import Post.Rotor as PR import Converter.PyTree as C accu = {} for psi in range(0, 360, 10): for rad in range(0, 10): accu[(psi,rad)] = [psi+rad*0.1] z = PR.exportAccumulatorPerPsi(accu, psi=10., vars=['F']) C.convertPyTree2File(z, 'out.cgns')
-
Post.Rotor.
exportAccumulatorPerRadius
(accumulator, rad=0., vars=['F1','F2']) Export a given radius of an accumulator (psi,rad) in a 1D zone. For distributed computations, the exported zone is identical on all processors.
- Parameters
accumulator (dictionary) – (psi,rad) accumulator
rad (float) – radius to be extracted
vars (list of strings) – the name of variables stored in accumulator
- Returns
a single Zone with vars corresponding to rad
- Return type
Zone
Example of use:
# - exportAccumulatorPerRadius (pyTree) - import Post.Rotor as PR import Converter.PyTree as C accu = {} for psi in range(0, 360, 10): for rad in range(0, 10): accu[(psi,rad)] = [psi+rad*0.1] z = PR.exportAccumulatorPerRadius(accu, rad=4, vars=['F']) C.convertPyTree2File(z, 'out.cgns')
-
Post.Rotor.
exportAccumulatorMap
(accumulator, vars=['Fx','Fy','Fz']) Export accumulator (psi,rad) to a 2D zone. For distributed computations, the exported zone is identical on all processors.
- Parameters
accumulator (dictionary) – (psi,rad) accumulator
vars (list of strings) – the name of variables stored in accumulator
- Returns
a single Zone with fields
- Return type
Zone
Example of use:
# - exportAccumulatorMap (pyTree) - import Post.Rotor as PR import Converter.PyTree as C accu = {} for psi in range(0, 360, 10): for rad in range(0, 10): accu[(psi,rad)] = [psi+rad*0.1] z = PR.exportAccumulatorMap(accu, vars=['F']) C.convertPyTree2File(z, 'out.cgns')