blade_class Derived Type

type, public :: blade_class

Single blade class


Components

Type Visibility Attributes Name Initial
character(len=2), public :: id
type(wingpanel_class), public, allocatable, dimension(:, :) :: wiP

Wing panel

type(Nwake_class), public, allocatable, dimension(:, :) :: waN

Near wake

type(Fwake_class), public, allocatable, dimension(:) :: waF

Far wake

type(pFwake_class), public :: wapF

Prescribed far wake

type(pFwake_class), public :: wapFPredicted

Prescribed far wake

type(Nwake_class), public, allocatable, dimension(:, :) :: waNPredicted
type(Fwake_class), public, allocatable, dimension(:) :: waFPredicted
type(C81_class), public, allocatable, dimension(:) :: C81
integer, public :: nc

No. of chordwise panels

integer, public :: ns

No. of spanwise panels

real(kind=dp), public :: theta
real(kind=dp), public :: psi
real(kind=dp), public :: pivotLE

Location of pivot from LE (x/c) for setting pitch angle

real(kind=dp), public :: preconeAngle

Precone angle for blade

real(kind=dp), public :: velWakeMax

Max vel on wake collocation points for preventing blowup

real(kind=dp), public :: wakeDispLimitFactor

Max displacement factor (dx/lc) for wake convection limiting (from rotor) where lc is local wake filament length

real(kind=dp), public :: flapInitial
real(kind=dp), public :: dflapInitial
real(kind=dp), public :: flapPrev
real(kind=dp), public :: dflapPrev
real(kind=dp), public :: flap
real(kind=dp), public :: dflap
real(kind=dp), public :: Iflap
real(kind=dp), public :: kflap
real(kind=dp), public :: cflap
real(kind=dp), public :: MflapConstant
real(kind=dp), public :: MflapLift
real(kind=dp), public :: MflapLiftPrev
real(kind=dp), public, dimension(3) :: flapOrigin
real(kind=dp), public, dimension(3) :: forceInertial
real(kind=dp), public, dimension(3) :: lift
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
integer, public, allocatable, dimension(:) :: airfoilNo
character(len=30), public, allocatable, dimension(:) :: airfoilFile
real(kind=dp), public, allocatable, dimension(:) :: airfoilSectionLimit
real(kind=dp), public, allocatable, dimension(:, :, :) :: velNwake
real(kind=dp), public, allocatable, dimension(:, :, :) :: velNwake1
real(kind=dp), public, allocatable, dimension(:, :, :) :: velNwake2
real(kind=dp), public, allocatable, dimension(:, :, :) :: velNwake3
real(kind=dp), public, allocatable, dimension(:, :, :) :: velNwakePredicted
real(kind=dp), public, allocatable, dimension(:, :, :) :: velNwakeStep
real(kind=dp), public, allocatable, dimension(:, :) :: velFwake
real(kind=dp), public, allocatable, dimension(:, :) :: velFwake1
real(kind=dp), public, allocatable, dimension(:, :) :: velFwake2
real(kind=dp), public, allocatable, dimension(:, :) :: velFwake3
real(kind=dp), public, allocatable, dimension(:, :) :: velFwakePredicted
real(kind=dp), public, allocatable, dimension(:, :) :: velFwakeStep
integer, public :: stlNodesCols
real(kind=dp), public, allocatable, dimension(:, :) :: stlNodes
integer, public, allocatable, dimension(:, :) :: stlElementNodes
real(kind=dp), public, dimension(3) :: xAxis
real(kind=dp), public, dimension(3) :: yAxis
real(kind=dp), public, dimension(3) :: zAxis
real(kind=dp), public, dimension(3) :: xAxisAzi
real(kind=dp), public, dimension(3) :: yAxisAzi
real(kind=dp), public, dimension(3) :: zAxisAzi
real(kind=dp), public, dimension(3) :: xAxisAziFlap
real(kind=dp), public, dimension(3) :: yAxisAziFlap
real(kind=dp), public, dimension(3) :: zAxisAziFlap
real(kind=dp), public, allocatable, dimension(:) :: secChord
real(kind=dp), public, allocatable, dimension(:) :: secArea
real(kind=dp), public, allocatable, dimension(:, :) :: secForceInertial
real(kind=dp), public, allocatable, dimension(:, :) :: secLift
real(kind=dp), public, allocatable, dimension(:, :) :: secDrag
real(kind=dp), public, allocatable, dimension(:, :) :: secLiftDir
real(kind=dp), public, allocatable, dimension(:, :) :: secDragDir
real(kind=dp), public, allocatable, dimension(:, :) :: secLiftInPlane
real(kind=dp), public, allocatable, dimension(:, :) :: secLiftOutPlane
real(kind=dp), public, allocatable, dimension(:, :) :: secDragInduced
real(kind=dp), public, allocatable, dimension(:, :) :: secDragProfile
real(kind=dp), public, allocatable, dimension(:, :) :: secLiftUnsteady
real(kind=dp), public, allocatable, dimension(:, :) :: secDragUnsteady
real(kind=dp), public, allocatable, dimension(:, :) :: secLiftInPlaneUnsteady
real(kind=dp), public, allocatable, dimension(:, :) :: secLiftOutPlaneUnsteady
real(kind=dp), public, allocatable, dimension(:, :) :: secTauCapChord
real(kind=dp), public, allocatable, dimension(:, :) :: secTauCapSpan
real(kind=dp), public, allocatable, dimension(:, :) :: secNormalVec
real(kind=dp), public, allocatable, dimension(:, :) :: secCP
real(kind=dp), public, allocatable, dimension(:, :) :: secChordwiseResVel
real(kind=dp), public, allocatable, dimension(:) :: secAlpha
real(kind=dp), public, allocatable, dimension(:) :: secPhi
real(kind=dp), public, allocatable, dimension(:) :: secTheta
real(kind=dp), public, allocatable, dimension(:) :: secViz
real(kind=dp), public, allocatable, dimension(:) :: secVix
real(kind=dp), public, allocatable, dimension(:) :: secCD
real(kind=dp), public, allocatable, dimension(:) :: secCM
real(kind=dp), public, allocatable, dimension(:) :: secMflap
real(kind=dp), public, allocatable, dimension(:) :: secMflapArm
real(kind=dp), public, allocatable, dimension(:) :: alpha0
real(kind=dp), public, allocatable, dimension(:) :: secCL
real(kind=dp), public, allocatable, dimension(:) :: secCLu
integer, public :: spanwiseLiftSwitch

Type-Bound Procedures

procedure, public :: move => blade_move

  • public subroutine blade_move(this, dshift)

    Move blade by dshift

    Arguments

    Type IntentOptional Attributes Name
    class(blade_class) :: this
    real(kind=dp), intent(in), dimension(3) :: dshift

procedure, public :: rotate => blade_rotate

  • public subroutine blade_rotate(this, angleRad, axisX, axisY, axisZ, originX, originY, originZ, rotateType)

    Rotate blade geometry about axis at specified origin Rotation angle in radians

    Arguments

    Type IntentOptional Attributes Name
    class(blade_class), intent(inout) :: this
    real(kind=dp), intent(in), value :: angleRad
    real(kind=dp), intent(in), value :: axisX
    real(kind=dp), intent(in), value :: axisY
    real(kind=dp), intent(in), value :: axisZ
    real(kind=dp), intent(in), value :: originX
    real(kind=dp), intent(in), value :: originY
    real(kind=dp), intent(in), value :: originZ
    character(len=*), intent(in) :: rotateType

procedure, public :: rot_pitch => blade_rot_pitch

  • public subroutine blade_rot_pitch(this, theta)

    Rotate blade by pitch angle about pivotLE

    Arguments

    Type IntentOptional Attributes Name
    class(blade_class), intent(inout) :: this
    real(kind=dp), intent(in) :: theta

procedure, public :: rot_wake_axis => blade_rot_wake_axis

  • public subroutine blade_rot_wake_axis(this, theta, axisVec, origin, rowNear, rowFar, wakeType)

    Rotate wake about axis at specified origin

    Arguments

    Type IntentOptional Attributes Name
    class(blade_class), intent(inout) :: this
    real(kind=dp), intent(in) :: theta
    real(kind=dp), intent(in), dimension(3) :: axisVec
    real(kind=dp), intent(in), dimension(3) :: origin
    integer, intent(in) :: rowNear
    integer, intent(in) :: rowFar
    character(len=1), intent(in) :: wakeType

procedure, public :: rot_pts => blade_rot_pts

  • public subroutine blade_rot_pts(this, pts, origin, order)

    Rotate blade using pts. pts refers to (phi, theta, psi)

    Arguments

    Type IntentOptional Attributes Name
    class(blade_class), intent(inout) :: this
    real(kind=dp), intent(in), dimension(3) :: pts
    real(kind=dp), intent(in), dimension(3) :: origin
    integer, intent(in) :: order

procedure, public :: rot_flap => blade_rot_flap

  • public subroutine blade_rot_flap(this, beta)

    Rotate blade by flap angle

    Arguments

    Type IntentOptional Attributes Name
    class(blade_class), intent(inout) :: this
    real(kind=dp), intent(in) :: beta

procedure, public :: vind_bywing => blade_vind_bywing

  • public function blade_vind_bywing(this, P)

    Compute induced velocity by blade bound vorticity

    Arguments

    Type IntentOptional Attributes Name
    class(blade_class), intent(in) :: this
    real(kind=dp), intent(in), dimension(3) :: P

    Return Value real(kind=dp), dimension(3)

procedure, public :: vindSource_bywing => blade_vindSource_bywing

  • public function blade_vindSource_bywing(this, P)

    Compute induced velocity by blade bound vorticity

    Arguments

    Type IntentOptional Attributes Name
    class(blade_class), intent(in) :: this
    real(kind=dp), intent(in), dimension(3) :: P

    Return Value real(kind=dp), dimension(3)

procedure, public :: vind_bywing_boundVortices => blade_vind_bywing_boundVortices

  • public function blade_vind_bywing_boundVortices(this, P)

    Compute induced velocity by bound vortices alone

    Arguments

    Type IntentOptional Attributes Name
    class(blade_class), intent(in) :: this
    real(kind=dp), intent(in), dimension(3) :: P

    Return Value real(kind=dp), dimension(3)

procedure, public :: vind_bywing_chordwiseVortices => blade_vind_bywing_chordwiseVortices

  • public function blade_vind_bywing_chordwiseVortices(this, P)

    Compute induced velocity by bound vortices alone

    Arguments

    Type IntentOptional Attributes Name
    class(blade_class), intent(in) :: this
    real(kind=dp), intent(in), dimension(3) :: P

    Return Value real(kind=dp), dimension(3)

procedure, public :: vind_boundVortex => blade_vind_boundVortex

  • public function blade_vind_boundVortex(this, ic, is, P)

    Compute induced velocity by bound vortices alone

    Arguments

    Type IntentOptional Attributes Name
    class(blade_class), intent(inout) :: this
    integer, intent(in) :: ic
    integer, intent(in) :: is
    real(kind=dp), intent(in), dimension(3) :: P

    Return Value real(kind=dp), dimension(3)

procedure, public :: vind_bywake => blade_vind_bywake

  • public function blade_vind_bywake(this, rowNear, rowFar, P, optionalChar)

    Compute induced velocity by wake vortex rings

    Arguments

    Type IntentOptional Attributes Name
    class(blade_class), intent(in) :: this
    integer, intent(in) :: rowNear
    integer, intent(in) :: rowFar
    real(kind=dp), intent(in), dimension(3) :: P
    character(len=1), optional :: optionalChar

    Return Value real(kind=dp), dimension(3)

procedure, public :: convectwake => blade_convectwake

  • public subroutine blade_convectwake(this, rowNear, rowFar, dt, wakeType, ductSwitch)

    Convect wake collocation points using velNwake matrix

    Arguments

    Type IntentOptional Attributes Name
    class(blade_class), intent(inout) :: this
    integer, intent(in) :: rowNear
    integer, intent(in) :: rowFar
    real(kind=dp), intent(in) :: dt
    character(len=1), intent(in) :: wakeType
    integer, optional :: ductSwitch

procedure, public :: limitWakeVel => blade_limitWakeVel

  • public subroutine blade_limitWakeVel(this, rowNear, rowFar, wakeType)

    Limits wake velocity to a set value to prevent blow up. Near wake only for predicted wake; near and far for current wake.

    Arguments

    Type IntentOptional Attributes Name
    class(blade_class), intent(inout) :: this
    integer, intent(in) :: rowNear
    integer, intent(in) :: rowFar
    character(len=1), intent(in) :: wakeType

procedure, public :: calc_secChord

  • public subroutine calc_secChord(this)

    Arguments

    Type IntentOptional Attributes Name
    class(blade_class), intent(inout) :: this

procedure, public :: calc_secArea

  • public subroutine calc_secArea(this)

    Arguments

    Type IntentOptional Attributes Name
    class(blade_class), intent(inout) :: this

procedure, public :: calc_force => blade_calc_force

  • public subroutine blade_calc_force(this, density, Omega, dt)

    Compute force using blade circulation

    Arguments

    Type IntentOptional Attributes Name
    class(blade_class), intent(inout) :: this
    real(kind=dp), intent(in) :: density
    real(kind=dp), intent(in) :: Omega
    real(kind=dp), intent(in) :: dt

procedure, public :: calc_force_alpha => blade_calc_force_alpha

  • public subroutine blade_calc_force_alpha(this, density, velSound)

    Compute force using sectional alpha

    Arguments

    Type IntentOptional Attributes Name
    class(blade_class), intent(inout) :: this
    real(kind=dp), intent(in) :: density
    real(kind=dp), intent(in) :: velSound

procedure, public :: calc_force_alphaGamma => blade_calc_force_alphaGamma

  • public subroutine blade_calc_force_alphaGamma(this, density, invertGammaSign, velSound, dt)

    Compute force using alpha approximated from sec circulation

    Arguments

    Type IntentOptional Attributes Name
    class(blade_class), intent(inout) :: this
    real(kind=dp), intent(in) :: density
    real(kind=dp), intent(in) :: invertGammaSign
    real(kind=dp), intent(in) :: velSound
    real(kind=dp), intent(in) :: dt

procedure, public :: calc_secAlpha => blade_calc_secAlpha

  • public subroutine blade_calc_secAlpha(this, verticalAxis)

    Compute sec alpha using sec resultant velocity

    Arguments

    Type IntentOptional Attributes Name
    class(blade_class), intent(inout) :: this
    real(kind=dp), intent(in), dimension(3) :: verticalAxis

procedure, public :: calc_secChordwiseResVel => blade_calc_secChordwiseResVel

  • public subroutine blade_calc_secChordwiseResVel(this)

    Compute sectional resultant vel by interpolating local panel vel

    Arguments

    Type IntentOptional Attributes Name
    class(blade_class), intent(inout) :: this

procedure, public :: burst_wake => blade_burst_wake

  • public subroutine blade_burst_wake(this, rowFar, skewLimit, largeCoreRadius)

    Arguments

    Type IntentOptional Attributes Name
    class(blade_class), intent(inout) :: this
    integer, intent(in) :: rowFar
    real(kind=dp), intent(in) :: skewLimit
    real(kind=dp), intent(in) :: largeCoreRadius

procedure, public :: calc_skew => blade_calc_skew

  • public subroutine blade_calc_skew(this, rowNear)

    Arguments

    Type IntentOptional Attributes Name
    class(blade_class), intent(inout) :: this
    integer, intent(in) :: rowNear

procedure, public :: calc_secLocations => blade_calc_secLocations

  • public subroutine blade_calc_secLocations(this, chordwiseFraction, flapHingeRadius)

    Compute important locations at each section coordinates of collocation point located at chord fraction flap moment arm

    Arguments

    Type IntentOptional Attributes Name
    class(blade_class), intent(inout) :: this
    real(kind=dp), intent(in) :: chordwiseFraction
    real(kind=dp), intent(in) :: flapHingeRadius

procedure, public :: lookup_secCoeffs => blade_lookup_secCoeffs

  • public subroutine blade_lookup_secCoeffs(this, velSound)

    Arguments

    Type IntentOptional Attributes Name
    class(blade_class), intent(inout) :: this
    real(kind=dp), intent(in) :: velSound

procedure, public :: secCoeffsToSecForces => blade_secCoeffsToSecForces

  • public subroutine blade_secCoeffsToSecForces(this, density)

    Convert force coefficients to dimensional forces

    Arguments

    Type IntentOptional Attributes Name
    class(blade_class), intent(inout) :: this
    real(kind=dp), intent(in) :: density

procedure, public :: dirLiftDrag => blade_dirLiftDrag

  • public subroutine blade_dirLiftDrag(this, Omega)

    Compute lift and drag direction vectors

    Arguments

    Type IntentOptional Attributes Name
    class(blade_class), intent(inout) :: this
    real(kind=dp), intent(in) :: Omega

procedure, public :: sumSecToNetForces => blade_sumSecToNetForces

  • public subroutine blade_sumSecToNetForces(this)

    Sum up sectional forces to net forces

    Arguments

    Type IntentOptional Attributes Name
    class(blade_class), intent(inout) :: this

procedure, public :: calc_stlStats => blade_calc_stlStats

procedure, public :: computeBladeDynamics => blade_computeBladeDynamics

  • public subroutine blade_computeBladeDynamics(this, dt, omega)

    Arguments

    Type IntentOptional Attributes Name
    class(blade_class), intent(inout) :: this
    real(kind=dp), intent(in) :: dt
    real(kind=dp), intent(in) :: omega

procedure, public :: getddflap

  • public function getddflap(this, flap, dflap, omega, MflapLift)

    Returns ddflap from blade flap equation

    Arguments

    Type IntentOptional Attributes Name
    class(blade_class), intent(in) :: this
    real(kind=dp), intent(in) :: flap
    real(kind=dp), intent(in) :: dflap
    real(kind=dp), intent(in) :: omega
    real(kind=dp), intent(in) :: MflapLift

    Return Value real(kind=dp)

procedure, public :: blade_write

  • public subroutine blade_write(this, unit, iostat, iomsg)

    Arguments

    Type IntentOptional Attributes Name
    class(blade_class), intent(in) :: this
    integer, intent(in) :: unit
    integer, intent(out) :: iostat
    character(len=*), intent(inout) :: iomsg

generic, public :: write(unformatted) => blade_write

  • public subroutine blade_write(this, unit, iostat, iomsg)

    Arguments

    Type IntentOptional Attributes Name
    class(blade_class), intent(in) :: this
    integer, intent(in) :: unit
    integer, intent(out) :: iostat
    character(len=*), intent(inout) :: iomsg

procedure, public :: blade_read

  • public subroutine blade_read(this, unit, iostat, iomsg)

    Arguments

    Type IntentOptional Attributes Name
    class(blade_class), intent(inout) :: this
    integer, intent(in) :: unit
    integer, intent(out) :: iostat
    character(len=*), intent(inout) :: iomsg

generic, public :: read(unformatted) => blade_read

  • public subroutine blade_read(this, unit, iostat, iomsg)

    Arguments

    Type IntentOptional Attributes Name
    class(blade_class), intent(inout) :: this
    integer, intent(in) :: unit
    integer, intent(out) :: iostat
    character(len=*), intent(inout) :: iomsg