Rotor class
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| character(len=2), | public | :: | id | ||||
| integer, | public | :: | nb | ||||
| integer, | public | :: | ns | ||||
| integer, | public | :: | nc | ||||
| integer, | public | :: | nNwake | ||||
| integer, | public | :: | nFwake | ||||
| integer, | public | :: | nbConvect | ||||
| integer, | public | :: | nNwakeEnd | ||||
| integer, | public | :: | nFwakeEnd | ||||
| type(blade_class), | public, | allocatable, dimension(:) | :: | blade | |||
| real(kind=dp), | public | :: | Omega | ||||
| real(kind=dp), | public | :: | omegaSlow | ||||
| real(kind=dp), | public, | dimension(3) | :: | shaftAxis | |||
| real(kind=dp), | public, | dimension(3) | :: | xAxisBody | |||
| real(kind=dp), | public, | dimension(3) | :: | yAxisBody | |||
| real(kind=dp), | public, | dimension(3) | :: | zAxisBody | |||
| real(kind=dp), | public, | dimension(3) | :: | hubCoords | |||
| real(kind=dp), | public, | dimension(3) | :: | cgCoords | |||
| real(kind=dp), | public, | dimension(3) | :: | fromCoords | |||
| real(kind=dp), | public | :: | radius | ||||
| real(kind=dp), | public | :: | chord | ||||
| real(kind=dp), | public | :: | root_cut | ||||
| real(kind=dp), | public | :: | preconeAngle | ||||
| real(kind=dp), | public | :: | dpitch | ||||
| real(kind=dp), | public | :: | flap0 | ||||
| real(kind=dp), | public | :: | flapC | ||||
| real(kind=dp), | public | :: | flapS | ||||
| real(kind=dp), | public | :: | flapInitial | ||||
| real(kind=dp), | public | :: | dflapInitial | ||||
| real(kind=dp), | public | :: | Iflap | ||||
| real(kind=dp), | public | :: | cflap | ||||
| real(kind=dp), | public | :: | kflap | ||||
| real(kind=dp), | public | :: | MflapConstant | ||||
| real(kind=dp), | public, | dimension(3) | :: | forceInertial | |||
| real(kind=dp), | public, | dimension(3) | :: | lift | |||
| real(kind=dp), | public, | dimension(3) | :: | liftPrev | |||
| real(kind=dp), | public, | dimension(3) | :: | drag | |||
| real(kind=dp), | public, | dimension(3) | :: | dragInduced | |||
| real(kind=dp), | public, | dimension(3) | :: | dragProfile | |||
| real(kind=dp), | public, | dimension(3) | :: | liftUnsteady | |||
| real(kind=dp), | public, | dimension(3) | :: | dragUnsteady | |||
| real(kind=dp), | public, | dimension(3) | :: | liftUnitVec | |||
| real(kind=dp), | public, | dimension(3) | :: | dragUnitVec | |||
| real(kind=dp), | public, | dimension(3) | :: | sideUnitVec | |||
| real(kind=dp), | public, | dimension(3) | :: | controlPitch | |||
| real(kind=dp), | public | :: | thetaTwist | ||||
| real(kind=dp), | public | :: | pivotLE | ||||
| real(kind=dp), | public | :: | flapHinge | ||||
| real(kind=dp), | public, | dimension(3) | :: | velBody | |||
| real(kind=dp), | public, | dimension(3) | :: | omegaBody | |||
| real(kind=dp), | public, | dimension(3) | :: | velBodyPrev | |||
| real(kind=dp), | public, | dimension(3) | :: | omegaBodyPrev | |||
| real(kind=dp), | public, | allocatable, dimension(:, :) | :: | velBodyHistory | |||
| real(kind=dp), | public, | allocatable, dimension(:, :) | :: | omegaBodyHistory | |||
| real(kind=dp), | public | :: | psi | ||||
| real(kind=dp), | public, | dimension(3) | :: | pts | |||
| character(len=1), | public | :: | streamwiseCoreSwitch | ||||
| real(kind=dp), | public | :: | spanwiseCore | ||||
| real(kind=dp), | public, | allocatable, dimension(:) | :: | streamwiseCoreVec | |||
| real(kind=dp), | public, | allocatable, dimension(:, :) | :: | AIC | |||
| real(kind=dp), | public, | allocatable, dimension(:, :) | :: | AIC_inv | |||
| real(kind=dp), | public, | allocatable, dimension(:) | :: | gamVec | |||
| real(kind=dp), | public, | allocatable, dimension(:) | :: | gamVecPrev | |||
| real(kind=dp), | public, | allocatable, dimension(:) | :: | RHS | |||
| real(kind=dp), | public, | allocatable, dimension(:) | :: | camberSectionLimit | |||
| real(kind=dp), | public, | allocatable, dimension(:) | :: | airfoilSectionLimit | |||
| real(kind=dp), | public, | allocatable, dimension(:) | :: | alpha0 | |||
| real(kind=dp), | public | :: | initWakeVel | ||||
| real(kind=dp), | public | :: | psiStart | ||||
| real(kind=dp), | public | :: | skewLimit | ||||
| real(kind=dp), | public | :: | apparentViscCoeff | ||||
| real(kind=dp), | public | :: | decayCoeff | ||||
| real(kind=dp), | public | :: | wakeDispLimitFactor | ||||
| real(kind=dp), | public | :: | rollupStartRadius | ||||
| real(kind=dp), | public | :: | rollupEndRadius | ||||
| integer, | public | :: | propConvention | ||||
| integer, | public | :: | spanSpacing | ||||
| integer, | public | :: | chordSpacing | ||||
| integer, | public | :: | overrideTauSpan | ||||
| integer, | public | :: | symmetricTau | ||||
| integer, | public | :: | wakeTruncateNt | ||||
| integer, | public | :: | prescWakeNt | ||||
| integer, | public | :: | prescWakeAfterTruncNt | ||||
| integer, | public | :: | prescWakeGenNt | ||||
| integer, | public | :: | rollupStart | ||||
| integer, | public | :: | rollupEnd | ||||
| integer, | public | :: | suppressFwakeSwitch | ||||
| integer, | public | :: | forceCalcSwitch | ||||
| integer, | public | :: | skewPlotSwitch | ||||
| integer, | public | :: | inflowPlotSwitch | ||||
| integer, | public | :: | bladeDynamicsSwitch | ||||
| integer, | public | :: | pitchDynamicsSwitch | ||||
| integer, | public | :: | bodyDynamicsSwitch | ||||
| integer, | public | :: | bodyDynamicsIOVars | ||||
| integer, | public | :: | spanwiseLiftSwitch | ||||
| integer, | public | :: | customTrajectorySwitch | ||||
| integer, | public | :: | gammaPlotSwitch | ||||
| integer, | public | :: | rowNear | ||||
| integer, | public | :: | rowFar | ||||
| integer, | public | :: | nCamberFiles | ||||
| integer, | public | :: | nAirfoils | ||||
| integer, | public | :: | imagePlane | ||||
| integer, | public | :: | imageRotorNum | ||||
| integer, | public | :: | surfaceType | ||||
| integer, | public | :: | ductSwitch | ||||
| integer, | public | :: | axisymmetrySwitch | ||||
| character(len=30), | public, | allocatable, dimension(:) | :: | camberFile | |||
| character(len=30), | public, | allocatable, dimension(:) | :: | airfoilFile | |||
| character(len=30), | public | :: | geometryFile | ||||
| real(kind=dp), | public | :: | nonDimforceDenominator |
Read rotor geometry from geomXX.nml in namelist format
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(rotor_class) | :: | this | ||||
| character(len=*), | intent(in) | :: | filename | |||
| character(len=*), | intent(in), | optional | :: | outputFilename |
Initialize variables of rotor geometry and wake
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(rotor_class) | :: | this | ||||
| integer, | intent(in) | :: | rotorNumber | |||
| real(kind=dp), | intent(in) | :: | density | |||
| real(kind=dp), | intent(inout) | :: | dt | |||
| integer, | intent(inout) | :: | nt | |||
| type(switches_class), | intent(inout) | :: | switches | |||
| type(rotor_class), | optional | :: | sourceRotor |
Deinitialise rotor variables
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(rotor_class) | :: | this | ||||
| type(switches_class), | intent(in) | :: | switches |
Read blade geometry from PLOT3D formatted file
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(rotor_class) | :: | this | ||||
| character(len=*), | intent(in) | :: | PLOT3Dfilename |
Read ASCII stl file for non-lifting surface geometry
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(rotor_class) | :: | this | ||||
| character(len=*), | intent(in) | :: | stlfilename |
Get z coordinate on wing from x, y values
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(rotor_class) | :: | this | ||||
| real(kind=dp), | intent(in), | dimension(:) | :: | x | ||
| real(kind=dp), | intent(in), | dimension(:) | :: | y |
Get pitch angle corresponding to blade azimuthal location
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(rotor_class) | :: | this | ||||
| real(kind=dp), | intent(in) | :: | psi | |||
| integer, | intent(in) | :: | ib |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(rotor_class) | :: | this | ||||
| real(kind=dp), | intent(in) | :: | psi | |||
| integer, | intent(in) | :: | ib |
Prescribed flap [rad]: flap0 + flapCcos(psi) + flapSsin(psi)
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(rotor_class) | :: | this | ||||
| real(kind=dp), | intent(in) | :: | psi | |||
| integer, | intent(in) | :: | ib |
Prescribed flap rate: d(flap)/dt = Omega * d(flap)/d(psi) [rad/s]
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(rotor_class) | :: | this | ||||
| real(kind=dp), | intent(in) | :: | psi | |||
| integer, | intent(in) | :: | ib |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(rotor_class) | :: | this | ||||
| real(kind=dp), | intent(in), | dimension(3) | :: | dshift |
Rotate using pts => phi theta psi Warning: This rotation is about the global reference frame
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(rotor_class), | intent(inout) | :: | this | |||
| real(kind=dp), | intent(in), | dimension(3) | :: | pts | ||
| real(kind=dp), | intent(in), | dimension(3) | :: | origin | ||
| integer, | intent(in) | :: | order |
Rotate rotor by dpsi angle about axis
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(rotor_class), | intent(inout) | :: | this | |||
| real(kind=dp), | intent(in) | :: | dpsi | |||
| logical, | optional | :: | nopitch |
Rotate blades by flap angle
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(rotor_class), | intent(inout) | :: | this |
Assign coordinates to first rowNear of wake from last row of blade
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(rotor_class), | intent(inout) | :: | this | |||
| character(len=2), | intent(in) | :: | edge |
Map gam from vector to matrix format
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(rotor_class), | intent(inout) | :: | this |
Update age of wake filaments
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(rotor_class), | intent(inout) | :: | this | |||
| real(kind=dp), | intent(in) | :: | dt | |||
| character(len=1), | intent(in) | :: | wakeType |
Dissipation model based on the paper: Generalized Viscous Vortex Model for Application to Free-Vortex Wake Calculations,Bhagwat and Leishman (2002) The apparent viscosity coefficient is 'delta' and kept a constant value. delta has to be 100 for small-scale rotors and around 1000 for large-scale rotors
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(rotor_class), | intent(inout) | :: | this | |||
| real(kind=dp), | intent(in) | :: | dt | |||
| real(kind=dp), | intent(in) | :: | kinematicViscosity | |||
| character(len=1), | intent(in) | :: | wakeType |
Dissipation model based on the paper: Generalized Viscous Vortex Model for Application to Free-Vortex Wake Calculations,Bhagwat and Leishman (2002) The apparent viscosity coefficient is 'a1' known as Squire's app. viscosity parameter and this allows the dissipation to be dependent on the vortex strength The apparent viscosity is kinematic viscosity plus the turbulent viscosity (a1*|gamma|)) a1 has to be O(1e-4) for rotary wings (usually set to 2e-4) and O(1e-5) for fixed wings
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(rotor_class), | intent(inout) | :: | this | |||
| real(kind=dp), | intent(in) | :: | dt | |||
| real(kind=dp), | intent(in) | :: | kinematicViscosity | |||
| character(len=1), | intent(in) | :: | wakeType |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(rotor_class), | intent(inout) | :: | this |
Compute AIC matrix for rotor
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(rotor_class), | intent(inout) | :: | this |
Compute induced velocity by all wing vortices at P
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(rotor_class), | intent(in) | :: | this | |||
| real(kind=dp), | intent(in), | dimension(3) | :: | P |
Compute induced velocity by bound vortices at P
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(rotor_class), | intent(in) | :: | this | |||
| real(kind=dp), | intent(in), | dimension(3) | :: | P |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(rotor_class), | intent(in) | :: | this | |||
| real(kind=dp), | intent(in), | dimension(3) | :: | P | ||
| character(len=1), | optional | :: | optionalChar |
Shift wake locations on rollup
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(rotor_class), | intent(inout) | :: | this |
Shift wake locations of Fwake for truncation
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(rotor_class), | intent(inout) | :: | this |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(rotor_class), | intent(inout) | :: | this |
Compute force from circulation
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(rotor_class), | intent(inout) | :: | this | |||
| real(kind=dp), | intent(in) | :: | density | |||
| real(kind=dp), | intent(in) | :: | dt |
Compute force from sec alpha
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(rotor_class), | intent(inout) | :: | this | |||
| real(kind=dp), | intent(in) | :: | density | |||
| real(kind=dp), | intent(in) | :: | velSound |
Compute force from sec alpha
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(rotor_class), | intent(inout) | :: | this | |||
| real(kind=dp), | intent(in) | :: | density | |||
| real(kind=dp), | intent(in) | :: | velSound | |||
| real(kind=dp), | intent(in) | :: | dt |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(rotor_class), | intent(inout) | :: | this |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(rotor_class), | intent(inout) | :: | this | |||
| integer, | intent(in) | :: | iter | |||
| real(kind=dp), | intent(in) | :: | dt | |||
| character(len=1), | intent(in) | :: | wakeType |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(rotor_class), | intent(inout) | :: | this |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(rotor_class), | intent(inout) | :: | this |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(rotor_class), | intent(inout) | :: | this |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(rotor_class), | intent(inout) | :: | this |
Mirrors gamma from another rotor
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(rotor_class), | intent(inout) | :: | this | |||
| class(rotor_class), | intent(in) | :: | fromRotor |
Mirrors velCP, velCPm from another rotor (flip velocity component in mirror plane)
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(rotor_class), | intent(inout) | :: | this | |||
| class(rotor_class), | intent(in) | :: | fromRotor |
Mirrors wake positions from another rotor
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(rotor_class), | intent(inout) | :: | this | |||
| class(rotor_class), | intent(in) | :: | fromRotor | |||
| character(len=1), | intent(in) | :: | wakeType |
Converts -ve nsteps to nsteps for corresponding no. of chords or revs
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(rotor_class), | intent(inout) | :: | this | |||
| integer, | intent(inout) | :: | nsteps | |||
| real(kind=dp), | intent(in) | :: | dt |
Erase a near wake row by setting gamma to zero
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(rotor_class), | intent(inout) | :: | this | |||
| integer, | intent(in) | :: | rowErase |
Erase a far wake row by setting gamma to zero
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(rotor_class), | intent(inout) | :: | this | |||
| integer, | intent(in) | :: | rowErase |
Attaches prescribed far wake
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(rotor_class), | intent(inout) | :: | this | |||
| real(kind=dp), | intent(in) | :: | dt | |||
| character(len=1), | intent(in) | :: | wakeType |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(rotor_class), | intent(inout) | :: | this | |||
| real(kind=dp), | intent(in) | :: | dt |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(rotor_class), | intent(inout) | :: | this | |||
| real(kind=dp), | intent(in) | :: | w | |||
| real(kind=dp), | intent(in) | :: | thrust |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(rotor_class), | intent(inout) | :: | this | |||
| real(kind=dp), | intent(in) | :: | dt |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(rotor_class), | intent(in) | :: | this | |||
| integer, | intent(in) | :: | unit | |||
| integer, | intent(out) | :: | iostat | |||
| character(len=*), | intent(inout) | :: | iomsg |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(rotor_class), | intent(in) | :: | this | |||
| integer, | intent(in) | :: | unit | |||
| integer, | intent(out) | :: | iostat | |||
| character(len=*), | intent(inout) | :: | iomsg |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(rotor_class), | intent(inout) | :: | this | |||
| integer, | intent(in) | :: | unit | |||
| integer, | intent(out) | :: | iostat | |||
| character(len=*), | intent(inout) | :: | iomsg |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(rotor_class), | intent(inout) | :: | this | |||
| integer, | intent(in) | :: | unit | |||
| integer, | intent(out) | :: | iostat | |||
| character(len=*), | intent(inout) | :: | iomsg |