diff --git a/dev/.documenter-siteinfo.json b/dev/.documenter-siteinfo.json
index 5b2d027..1f8677a 100644
--- a/dev/.documenter-siteinfo.json
+++ b/dev/.documenter-siteinfo.json
@@ -1 +1 @@
-{"documenter":{"julia_version":"1.10.5","generation_timestamp":"2024-08-29T22:29:49","documenter_version":"1.6.0"}}
\ No newline at end of file
+{"documenter":{"julia_version":"1.10.5","generation_timestamp":"2024-08-30T16:17:06","documenter_version":"1.6.0"}}
\ No newline at end of file
diff --git a/dev/index.html b/dev/index.html
index 0d705b1..1d99de9 100644
--- a/dev/index.html
+++ b/dev/index.html
@@ -1,2 +1,2 @@
-
This repository contains a set of aerodynamic tools for VAWTs both steady and unsteady operation, 2D and 3D (stacked 2D) convenience functions along with coupling to NREL's InflowWind for turbulent inflow. You will need to provide your own .bts files from turbsim (compile or download OpenFAST and use the turbsim binary with an .inp file. There is an example in the test/data/ifw folder)
Double Multiple Streamtube implementation per https://doi.org/10.5194/wes-2019-44
Actuator Cylinder Implementation from https://github.com/byuflowlab/vawt-ac (updated and modified)
This repository contains a set of aerodynamic tools for VAWTs both steady and unsteady operation, 2D and 3D (stacked 2D) convenience functions along with coupling to NREL's InflowWind for turbulent inflow. You will need to provide your own .bts files from turbsim (compile or download OpenFAST and use the turbsim binary with an .inp file. There is an example in the test/data/ifw folder)
Double Multiple Streamtube implementation per https://doi.org/10.5194/wes-2019-44
Actuator Cylinder Implementation from https://github.com/byuflowlab/vawt-ac (updated and modified)
turbine::Turbine: turbine input for slice see ?Turbine
env::Env: environment input for slice see ?Env
us_param::UnsteadyParams: unsteady inputs for slice see ?UnsteadyParams
mystep::int: continuous index cooresponding to the azimuthal discretation - i.e. for ntheta of 30 step 1 is the first step of rev 1, sep 31 is the first step of rev 2, etc. Keeps track of temporal locaion
Outputs:
CP: This slice's coefficient of performance at this step
Th: This slice's thrust coefficient at this step
Q: Torque (N0m) at this step
Rp: Radial force per height (N) at this step
Tp: Tangential force per height (N) at this step
Zp: Vertical force per height (N) at this step
Vloc: Local velocity array for each azimuthal position (includes induction) (m/s) at this step
CD: This slice's drag coefficient at this step
CT: This slice's thrust coefficient (should equal drag, but may no depending on usage or solver status) at this step
amean: Mean turbine induction in the streamwise direction at this step
astar: Solved induction factors for each azimuthal location. First half are streamwise (u), second are cross-steam (v) at this step
alpha: Local angle of attack array for each azimuthal position (includes induction) (rad) at this step
cl: Local lift coefficient used for each azimuthal position at this step
cd_af: Local drag coefficient used for each azimuthal position at this step
thetavec: Azimuthal location of each discretization (rad)
Re: Reynolds number for each azimuthal position at this step
Runs a previously initialized aero model (see ?setupTurb) in the unsteady mode (can be repeateadly called, or called for a specific time, or repeatedly called for sections of time)
Inputs
tnew::float: new time (s); will run from last time specified from the last call, to the current time specified, or from t=ts if the first time called
ts::float: optional, desired timestep. Will run at finer timesteps than the azimuthal discretization without interfering with wake propogation. While possible, it is not recommended to run with timesteps larger than the azimuthal discretization (hence the optional nature and automatic calculation)
Outputs:
CP: Turbine coefficient of performance
Rp: Array(B,Nslices,nsteps) of radial force (N) where nsteps = max(1,round(Int,(tnew-timelast)/ts))
Tp: Array(B,Nslices,n_steps) of tangential force (N)
Zp: Array(B,Nslices,n_steps) of vertical force (N)
alpha: Array(B,Nslices,n_steps) of angle of attack (rad)
cl: Array(B,Nslices,n_steps) of airfoil cl used
cd_af: Array(B,Nslices,n_steps) of airfoil cd used
Vloc: Array(B,Nslices,n_steps) of airfoil local velocity used
Re: Array(B,Nslices,n_steps) of airfoil Reynolds number used
thetavec: Azimuthal discretization location (rad)
ntheta: number of azimuthal discretizations used
Fx_base: Array(ntheta)Turbine base Fx (N)
Fy_base: Array(ntheta)Turbine base Fy (N)
Fz_base: Array(ntheta)Turbine base Fz (N)
Mx_base: Array(ntheta)Turbine base Mx (N-m)
My_base: Array(ntheta)Turbine base My (N-m)
Mz_base: Array(ntheta)Turbine base Mz (N-m)
power: Array(ntheta)Turbine power (watts)
power2: Turbine average power for the revolution (watts)
torque: Array(ntheta)Turbine torque (N-m) (alternative calculation method from Mz-base)
Equivalent to an update states call, mutating the internal aerodynamic inputs within the unsteady model.
Inputs
azi: Current azimuth position of the turbine in radians (continuously growing with numbers of revolutions)
bld_x: Blade structural x shape, size(NBlade,any), any as it is splined against bld_z and the aero discretization
bld_z: Blade structural z shape, size(NBlade,any), any as it is splined against bld_x and the aero discretization
bld_twist: Blade structural twist, size(NBlade,any), any as it is splined against bld_z and the aero discretization. Note that in the calcs, this will be in addition to the aero twist offset already applied in initialization.
accel_flap_in: Blade structural acceleration in the flap direction, size(NBlade,any), any as it is splined against bld_z and the aero discretization
accel_edge_in: Blade structural acceleration in the edge direction, size(NBlade,any), any as it is splined against bld_z and the aero discretization
steady::bool: if steady is true, it just updates a single step. TODO: verify this is correct
Internal, assembles the matrices of multiple turbine systems into a combined system centerX, centerY: array of x,y coordinates for centers of the VAWTs in the farm radii: corresponding array of their radii
create airfoil lookup function with boeing vertol dynamic stall model for a file with only one reynolds number
Inputs
filename::string: file path/name to airfoil file formatted like in the test folder
Outputs:
af::function: cl, cd = afBV(alpha,Re,M,env,Vtwist,c,dt,U;solvestep=false) with alpha in rad, OWENSAero.Env, V_twist in rad/s, c chord in m, dt in sec, U Vloc in m/s, solvestep true during solve loop
for a file with multiple reynolds numbers create airfoil lookup function with boeing vertol dynamic stall model and wrap interpolation
Inputs
filename::string: file path/name to airfoil file formatted like in the test folder
DSModel::string: "BV" or "none"
Outputs:
af::function: cl, cd = afBV(alpha,Re,M,env,Vtwist,c,dt,U;solvestep=false) with alpha in rad, OWENSAero.Env, V_twist in rad/s, c chord in m, dt in sec, U Vloc in m/s, solvestep true during solve loop
af::function: cl, cd = af(alpha,re,mach) with alpha in rad
Calculates steady state aerodynamics for a single VAWT slice
Inputs
turbine::Turbine: Turbine struct, see ?Turbine for details
env::Env: Env struct, see ?Env for details
w::Array(<:Real): Optional, used if solve=false, induction factor array, first half corresponding to u, second half to v
idx_RPI::Array(<:Int): Optional, used to specify the azimuthal indices needed for a partial solve (i.e. not every azimuthal index), such as is used in the RPI method
solve::Bool: Optional, False is used when you want the model outputs for a given set of induction factors without resolving them.
ifw::Bool: Optional, used to tell the Vinf lookup to attempt to use the dynamic inflow wind library, requires preprocessing as is shown in the test cases.
Outputs:
CP: This slice's coefficient of performance
Th: This slice's thrust coefficient
Q: Torque (N0m)
Rp: Radial force per height (N)
Tp: Tangential force per height (N)
Zp: Vertical force per height (N)
Vloc: Local velocity array for each azimuthal position (includes induction) (m/s)
CD: This slice's drag coefficient
CT: This slice's thrust coefficient (should equal drag, but may no depending on usage or solver status)
amean: Mean turbine induction in the streamwise direction
astar: Solved induction factors for each azimuthal location. First half are streamwise (u), second are cross-steam (v)
alpha: Local angle of attack array for each azimuthal position (includes induction) (rad)
cl: Local lift coefficient used for each azimuthal position
cd_af: Local drag coefficient used for each azimuthal position
thetavec: Azimuthal location of each discretization (rad)
turbine::Turbine: turbine input for slice see ?Turbine
env::Env: environment input for slice see ?Env
us_param::UnsteadyParams: unsteady inputs for slice see ?UnsteadyParams
mystep::int: continuous index cooresponding to the azimuthal discretation - i.e. for ntheta of 30 step 1 is the first step of rev 1, sep 31 is the first step of rev 2, etc. Keeps track of temporal locaion
Outputs:
CP: This slice's coefficient of performance at this step
Th: This slice's thrust coefficient at this step
Q: Torque (N0m) at this step
Rp: Radial force per height (N) at this step
Tp: Tangential force per height (N) at this step
Zp: Vertical force per height (N) at this step
Vloc: Local velocity array for each azimuthal position (includes induction) (m/s) at this step
CD: This slice's drag coefficient at this step
CT: This slice's thrust coefficient (should equal drag, but may no depending on usage or solver status) at this step
amean: Mean turbine induction in the streamwise direction at this step
astar: Solved induction factors for each azimuthal location. First half are streamwise (u), second are cross-steam (v) at this step
alpha: Local angle of attack array for each azimuthal position (includes induction) (rad) at this step
cl: Local lift coefficient used for each azimuthal position at this step
cd_af: Local drag coefficient used for each azimuthal position at this step
thetavec: Azimuthal location of each discretization (rad)
Re: Reynolds number for each azimuthal position at this step
Runs a previously initialized aero model (see ?setupTurb) in the unsteady mode (can be repeateadly called, or called for a specific time, or repeatedly called for sections of time)
Inputs
tnew::float: new time (s); will run from last time specified from the last call, to the current time specified, or from t=ts if the first time called
ts::float: optional, desired timestep. Will run at finer timesteps than the azimuthal discretization without interfering with wake propogation. While possible, it is not recommended to run with timesteps larger than the azimuthal discretization (hence the optional nature and automatic calculation)
Outputs:
CP: Turbine coefficient of performance
Rp: Array(B,Nslices,nsteps) of radial force (N) where nsteps = max(1,round(Int,(tnew-timelast)/ts))
Tp: Array(B,Nslices,n_steps) of tangential force (N)
Zp: Array(B,Nslices,n_steps) of vertical force (N)
alpha: Array(B,Nslices,n_steps) of angle of attack (rad)
cl: Array(B,Nslices,n_steps) of airfoil cl used
cd_af: Array(B,Nslices,n_steps) of airfoil cd used
Vloc: Array(B,Nslices,n_steps) of airfoil local velocity used
Re: Array(B,Nslices,n_steps) of airfoil Reynolds number used
thetavec: Azimuthal discretization location (rad)
ntheta: number of azimuthal discretizations used
Fx_base: Array(ntheta)Turbine base Fx (N)
Fy_base: Array(ntheta)Turbine base Fy (N)
Fz_base: Array(ntheta)Turbine base Fz (N)
Mx_base: Array(ntheta)Turbine base Mx (N-m)
My_base: Array(ntheta)Turbine base My (N-m)
Mz_base: Array(ntheta)Turbine base Mz (N-m)
power: Array(ntheta)Turbine power (watts)
power2: Turbine average power for the revolution (watts)
torque: Array(ntheta)Turbine torque (N-m) (alternative calculation method from Mz-base)
Equivalent to an update states call, mutating the internal aerodynamic inputs within the unsteady model.
Inputs
azi: Current azimuth position of the turbine in radians (continuously growing with numbers of revolutions)
bld_x: Blade structural x shape, size(NBlade,any), any as it is splined against bld_z and the aero discretization
bld_z: Blade structural z shape, size(NBlade,any), any as it is splined against bld_x and the aero discretization
bld_twist: Blade structural twist, size(NBlade,any), any as it is splined against bld_z and the aero discretization. Note that in the calcs, this will be in addition to the aero twist offset already applied in initialization.
accel_flap_in: Blade structural acceleration in the flap direction, size(NBlade,any), any as it is splined against bld_z and the aero discretization
accel_edge_in: Blade structural acceleration in the edge direction, size(NBlade,any), any as it is splined against bld_z and the aero discretization
steady::bool: if steady is true, it just updates a single step. TODO: verify this is correct
Internal, assembles the matrices of multiple turbine systems into a combined system centerX, centerY: array of x,y coordinates for centers of the VAWTs in the farm radii: corresponding array of their radii
create airfoil lookup function with boeing vertol dynamic stall model for a file with only one reynolds number
Inputs
filename::string: file path/name to airfoil file formatted like in the test folder
Outputs:
af::function: cl, cd = afBV(alpha,Re,M,env,Vtwist,c,dt,U;solvestep=false) with alpha in rad, OWENSAero.Env, V_twist in rad/s, c chord in m, dt in sec, U Vloc in m/s, solvestep true during solve loop
for a file with multiple reynolds numbers create airfoil lookup function with boeing vertol dynamic stall model and wrap interpolation
Inputs
filename::string: file path/name to airfoil file formatted like in the test folder
DSModel::string: "BV" or "none"
Outputs:
af::function: cl, cd = afBV(alpha,Re,M,env,Vtwist,c,dt,U;solvestep=false) with alpha in rad, OWENSAero.Env, V_twist in rad/s, c chord in m, dt in sec, U Vloc in m/s, solvestep true during solve loop
af::function: cl, cd = af(alpha,re,mach) with alpha in rad
Calculates steady state aerodynamics for a single VAWT slice
Inputs
turbine::Turbine: Turbine struct, see ?Turbine for details
env::Env: Env struct, see ?Env for details
w::Array(<:Real): Optional, used if solve=false, induction factor array, first half corresponding to u, second half to v
idx_RPI::Array(<:Int): Optional, used to specify the azimuthal indices needed for a partial solve (i.e. not every azimuthal index), such as is used in the RPI method
solve::Bool: Optional, False is used when you want the model outputs for a given set of induction factors without resolving them.
ifw::Bool: Optional, used to tell the Vinf lookup to attempt to use the dynamic inflow wind library, requires preprocessing as is shown in the test cases.
Outputs:
CP: This slice's coefficient of performance
Th: This slice's thrust coefficient
Q: Torque (N0m)
Rp: Radial force per height (N)
Tp: Tangential force per height (N)
Zp: Vertical force per height (N)
Vloc: Local velocity array for each azimuthal position (includes induction) (m/s)
CD: This slice's drag coefficient
CT: This slice's thrust coefficient (should equal drag, but may no depending on usage or solver status)
amean: Mean turbine induction in the streamwise direction
astar: Solved induction factors for each azimuthal location. First half are streamwise (u), second are cross-steam (v)
alpha: Local angle of attack array for each azimuthal position (includes induction) (rad)
cl: Local lift coefficient used for each azimuthal position
cd_af: Local drag coefficient used for each azimuthal position
thetavec: Azimuthal location of each discretization (rad)