OWENS
Index
OWENS.BinOWENS.BladeOWENS.BladeDataOWENS.CactusGeomOWENS.ComponentOWENS.DLC_OptionsOWENS.DriveShaftPropsOWENS.Drivetrain_OptionsOWENS.InputsOWENS.Iteration_ParametersOWENS.Mesh_OptionsOWENS.NuMadOWENS.OWENSAero_OptionsOWENS.OWENSFEA_OptionsOWENS.OWENSOpenFASTWrappers_OptionsOWENS.OWENS_OptionsOWENS.StrutOWENS.Unified_OptionsOWENS.plypropertiesOWENSAero.EnvironmentOWENSAero.TurbineOWENSAero.UnsteadyParamsOWENSFEA.BC_structOWENSFEA.ConcNDL1DOWENSFEA.ConcNDL2DOWENSFEA.DispDataOWENSFEA.DispOutOWENSFEA.ElOWENSFEA.ElInputOWENSFEA.ElOutputOWENSFEA.ElStorageOWENSFEA.ElStrainOWENSFEA.FEAModelOWENSFEA.MeshOWENSFEA.NlParamsOWENSFEA.NodalTermsOWENSFEA.OrtOWENSFEA.ROMOWENSFEA.SectionPropsArrayOWENSFEA.TimeIntOWENSOpenFASTWrappers.EnvironmentOWENSOpenFASTWrappers.StructureOWENSPreComp.InputOWENSPreComp.OutputOWENSPreComp.inputOWENS.ModelingOptionsOWENS.OWENSVTKOWENS.OWENSVTKOWENS.UnsteadyOWENS.Unsteady_LandOWENS.calcHydroResidualOWENS.calculateDriveShaftReactionTorqueOWENS.calculateElementOrientationOWENS.calculatePsiThetaOWENS.count_cyclesOWENS.createGeneralTransformationMatrixOWENS.createInitCondArrayOWENS.createSingleRotationDCMOWENS.create_arcus_meshOWENS.create_hawt_biwing_meshOWENS.create_hawt_meshOWENS.create_mesh_strutsOWENS.externalForcingOWENS.extrap_pred_valsOWENS.find_boundary_valsOWENS.find_rangeOWENS.frame_convertOWENS.generateOutputFilenameOWENS.getGustVelOWENS.getOWENSPreCompOutputOWENS.getRotorPosSpeedAccelAtTimeOWENS.getSectPropsFromOWENSPreCompOWENS.mapACDMSOWENS.mapAD15OWENS.mapCactusLoadsFileOWENS.my_getABD!OWENS.my_getplystrainOWENS.my_getzOWENS.mywrite_vtkOWENS.mywrite_vtkOWENS.omegaSpecCheckOWENS.owensOWENS.plotMeshOWENS.rainflowOWENS.readBCdataOWENS.readBladeDataOWENS.readCactusGeomOWENS.readElementDataOWENS.readGeneratorPropsOWENS.readMeshOWENS.readNuMadGeomCSVOWENS.readNuMadMaterialsCSVOWENS.readResultsModalOutOWENS.rigidBodyRotationOWENS.run34mOWENS.runDLCOWENS.simpleGeneratorOWENS.sort_peaksOWENS.sum_cyclesOWENS.timeIntegrateSubSystemOWENS.transMatOWENS.trapezoidalRuleOWENS.updateRotorRotationOWENS.userDefinedRotorSpeedProfileOWENS.vizOWENS.writeOwensNDLOWENSAero.ACOWENSAero.AyIJOWENSAero.AyintegrandOWENSAero.Boeing_VertolOWENSAero.DMSOWENSAero.DxIIOWENSAero.DxIJOWENSAero.DxintegrandOWENSAero.Unsteady_StepOWENSAero.WxIIOWENSAero.WxIJOWENSAero.advanceTurbOWENSAero.deformTurbOWENSAero.matrixAssembleOWENSAero.pIntOWENSAero.panelIntegrationOWENSAero.precomputeMatricesOWENSAero.radialforceOWENSAero.readaerodynOWENSAero.readaerodyn_BVOWENSAero.readaerodyn_BV_NEWOWENSAero.residualOWENSAero.setupTurbOWENSAero.steadyOWENSAero.steadyTurbOWENSAero.streamtubeOWENSAero.trapzOWENSFEA.ConcMassAssociatedWithElementOWENSFEA.ModalOutputOWENSFEA.adaptiveLoadSteppingOWENSFEA.applyBCOWENSFEA.applyBCModalOWENSFEA.applyConcentratedTermsOWENSFEA.applyConstraintsOWENSFEA.applyConstraintsVecOWENSFEA.assembly!OWENSFEA.assemblyMatrixOnlyOWENSFEA.autoCampbellDiagramOWENSFEA.calcUnormOWENSFEA.calculateBCMapOWENSFEA.calculateElement1!OWENSFEA.calculateElementMassOWENSFEA.calculateLambdaOWENSFEA.calculateLoadVecFromDistForceOWENSFEA.calculateROMOWENSFEA.calculateROMGyricOWENSFEA.calculateReactionForceAtNodeOWENSFEA.calculateReducedDOFVectorOWENSFEA.calculateShapeFunctionsOWENSFEA.calculateStrainForElementsOWENSFEA.calculateStructureMassPropsOWENSFEA.calculateTimoshenkoElementInitialRunOWENSFEA.calculateTimoshenkoElementNLOWENSFEA.calculateTimoshenkoElementNLSSOWENSFEA.calculateTimoshenkoElementStrainOWENSFEA.calculateVec1!OWENSFEA.constructReducedDispVecFromEigVecOWENSFEA.constructReducedDispVectorMapOWENSFEA.createJointTransformOWENSFEA.createTdaOWENSFEA.determineActiveDofsFromSlaveNodeOWENSFEA.extractFreqDampOWENSFEA.extractdaInfoOWENSFEA.findElementsAssociatedWithNodeNumberOWENSFEA.getElementConcTerms!OWENSFEA.getGPOWENSFEA.getNodeMapsOWENSFEA.initialElementCalculationsOWENSFEA.interpolateValOWENSFEA.linearAnalysisModalOWENSFEA.makeBCdataOWENSFEA.mapMatrixNonSymOWENSFEA.mapMatrixNonSym2OWENSFEA.mapVectorOWENSFEA.modalOWENSFEA.reducedOrderModelOWENSFEA.setInitialConditionsOWENSFEA.setPrescribedConditionsOWENSFEA.staticAnalysisOWENSFEA.structuralDynamicsTransientOWENSFEA.structuralDynamicsTransientROMOWENSFEA.timeIntegrateSubSystemEffOWENSFEA.updateLoadStepOWENSOpenFASTWrappers.adiCalcOutputOWENSOpenFASTWrappers.adiGetRotorLoadsOWENSOpenFASTWrappers.adiInitOWENSOpenFASTWrappers.adiPreInitOWENSOpenFASTWrappers.adiSetRotorMotionOWENSOpenFASTWrappers.adiSetupRotorOWENSOpenFASTWrappers.adiUpdateStatesOWENSOpenFASTWrappers.advanceAD15OWENSOpenFASTWrappers.createGeneralTransformationMatrixOWENSOpenFASTWrappers.createSingleRotationDCMOWENSOpenFASTWrappers.deformAD15OWENSOpenFASTWrappers.endTurbOWENSOpenFASTWrappers.frame_convertOWENSOpenFASTWrappers.getAD15MeshDCMOWENSOpenFASTWrappers.getAD15MeshPosOWENSOpenFASTWrappers.getAD15MeshVelAccOWENSOpenFASTWrappers.getAD15numMeshNodesOWENSOpenFASTWrappers.getRootDCMOWENSOpenFASTWrappers.getRootPosOWENSOpenFASTWrappers.getRootVelAccOWENSOpenFASTWrappers.ifwcalcoutputOWENSOpenFASTWrappers.ifwendOWENSOpenFASTWrappers.ifwinitOWENSOpenFASTWrappers.setRotorMotionOWENSOpenFASTWrappers.setupTurbOWENSOpenFASTWrappers.transMatOWENSPreComp.embed_lsOWENSPreComp.embed_usOWENSPreComp.propertiesOWENSPreComp.propertiesOWENSPreComp.q_barsOWENSPreComp.readcompositesectionOWENSPreComp.readmainOWENSPreComp.readmaterialsOWENSPreComp.readprecompprofileOWENSPreComp.readprofileOWENSPreComp.readsectorsfromfileOWENSPreComp.seg_infoOWENSPreComp.tw_rate
Types and functions
OWENS.Bin — TypeInputs pointing to the file paths of compiled binaries of external libraries
OWENS.Blade — TypeInternal, struct containing the CACTUS geometry file data for a blade
OWENS.BladeData — TypeInternal, struct containing blade specific data and location within the mesh
OWENS.CactusGeom — TypeInternal, struct containing the CACTUS geometry file data
OWENS.Component — Methodcomponent = Component(; name="nothing", nodeNumbers=nothing, elNumbers=nothing, ex=nothing, ey=nothing, ez=nothing, kx=nothing, ky=nothing, kz=nothing, lamU=nothing, lamL=nothing, lamW=nothing, inputlayup=nothing, inputmaterials=nothing, preCompInput=nothing, preCompOutput=nothing, plyProps=nothing, nuMadIn=nothing, stiffmatrix=nothing, massmatrix=nothing, sectionProps=nothing, stressU=nothing, stressL=nothing, strainU=nothing, strainL=nothing, ultsafetyfactorU=nothing, ultsafetyfactorL=nothing, bucksafetyfactorU=nothing, bucksafetyfactorL=nothing, damageU=nothing, damage_L=nothing, mass=nothing, cost=nothing)
This function stores the critical information associated with preprocessing and post processing to enable generalization. It is intended that an array of components will be generated by appending each subsequent component to the array at the mesh stage.
#Inputs
name:::nodeNumbers:::elNumbers:::e_x:::e_y:::e_z:::k_x:::k_y:::k_z:::lam_U:::lam_L:::lam_W:::input_layup:::input_materials:::preCompInput:::preCompOutput:::plyProps:::nuMadIn:::stiff_matrix:::mass_matrix:::sectionProps:::stress_U:::stress_L:::strain_U:::strain_L:::ultsafetyfactor_U:::ultsafetyfactor_L:::bucksafetyfactor_U:::bucksafetyfactor_L:::damage_U:::damage_L:::mass:::cost:::
#Outputs
component::OWENS.Component: Component struct with the same information as the input, some elements may be initialize as nothing and filled in later
OWENS.DLC_Options — TypeDLCOptions(dictin::OrderedCollections.OrderedDict{Symbol,Any})
# Input
* `DLCs`: default ["none"], name of DLC
* `Vinf_range`: default inRange(5,20,16), inflow Cutin to cutout and discretization
* `IEC_std`: default ""1-ED3"", turbsim input file IEC standard
* `WindChar`: default ""A"", turbsim wind charasteric
* `WindClass`: default , DLC turbsim wind class
* `turbsimsavepath`: default "./turbsimfiles", path where the turbsim files are saved
* `pathtoturbsim`: default othing, path to the turbsim executable
* `NumGrid_Z`: default 8, turbsim vertical discretizations
* `NumGrid_Y`: default 6, turbsim horizontal discretizations
* `Vref`: default 0.0, reference/nominal wind speed m/s for turbsim or other inflow wind input file (depending on which DLC is selected)
* `Vdesign`: default 1.0, Design or rated speed of turbine, used for certain DLC cases
* `grid_oversize`: default .1, amount that the turbsim inflow is oversized compared to the turbine to allow for deflection
* `regenWindFiles`: default false, force regeneration of turbsim files even if they already exist
* `delta_t_turbsim`: default .05, turbsim timestep
* `simtime_turbsim`: default 00.0, turbsim total time, which loops if simtime exceeds turbsim time
* `RandSeed1`: default 0071, turbsim random seed number
* `DLCParams`: see ?OWENS.DLCParams, the current DLC parameters for the run, used as internal state information
# Output
* `DLC_Options`:OWENS.DriveShaftProps — TypeInternal, driveshaft stiffness k and damping c
OWENS.Drivetrain_Options — TypeDrivetrainOptions(dictin::OrderedCollections.OrderedDict{Symbol,Any})
# Input
* `turbineStartup`: default 0, TODO: clean up since it should be derived from control strategy
* `usingRotorSpeedFunction`: default false, TODO: clean up the speed function since the omegaocp RPM gets splined already
* `driveTrainOn`: default false, flag to turn on the drivetrain model TODO: clean this up to make it always use the drivetrain model, with default 100% efficiency and ratio of 1 so it outputs the values
* `JgearBox`: default 0.0, torsional stiffness of the gearbox TODO: resolve units
* `gearRatio`: default 1.0, ratio between the turbine driveshaft and generator shaft
* `gearBoxEfficiency`: default 1.0, efficiency of the gearbox, just decreases the torque that the generator model sees
* `generatorOn`: default false, TODO: clean up the generator options
* `useGeneratorFunction`: default false, TODO: clean up the generator options
* `generatorProps`: default 0.0, TODO: clean up the generator options
* `ratedTorque`: default 0.0, TODO: clean up the generator options
* `zeroTorqueGenSpeed`: default 0.0, TODO: clean up the generator options
* `pulloutRatio`: default 0.0, TODO: clean up the generator options
* `ratedGenSlipPerc`: default 0.0, TODO: clean up the generator options
* `OmegaGenStart`: default 0.0, TODO: clean up the generator options
* `driveShaftProps_K`: default 0.0, TODO: break this out, driveshaft stiffness and damping
* `driveShaftProps_C`: default 0.0, TODO: break this out, driveshaft stiffness and damping
# Output
* `Drivetrain_Options`:OWENS.Inputs — MethodInputs(;verbosity=2, analysisType = "TNB", turbineStartup = 0, usingRotorSpeedFunction = false, tocp = [0.0,1.1], tocpVinf = [0.0,1.1], numTS = 50.0, deltat = 2e-3, Omegaocp = [7.2,7.2] ./ 60, Vinfocp = [12.0,12.0], aeroLoadsOn = 1, AD15On = false, driveTrainOn = false, generatorOn = false, platformActive = false, topsideOn = true, interpOrder = 2, hdinputfile = "none", mdinputfile = "none", JgearBox = 0.0, gearRatio = 1.0, gearBoxEfficiency = 1.0, useGeneratorFunction = false, generatorProps = 0.0, ratedTorque = 0.0, zeroTorqueGenSpeed = 0.0, pulloutRatio = 0.0, ratedGenSlipPerc = 0.0, OmegaGenStart = 0.0, omegaControl = false, OmegaInit = 7.2/60, #TODO: simplify this in the code since it is redundant rigid = false, #turn off structural dynamics aeroloadfile = "modulepath/../test/data/inputfilestest/DVAWT2BLCDTElementData.csv", owensfile = "modulepath/../test/data/inputfilestest/15mTowertransientdvawtc2_lcdt.owens", dataOutputFilename = "none", numDOFPerNode = 6, bladeData = [], driveShaftProps = DriveShaftProps(0.0,0.0) TOL = 1e-4, MAXITER = 300, )
Model inputs for OWENS coupled analysis, struct
Inputs
verbosity::int: output verbosity where 0 is nothing, 1 is warnings, 2 is summary outputs, 3 is detailed outputs, and 4 is everythinganalysisType::string: Newmark Beta time stepping "TNB", Dean time stepping "TD", modal "M"turbineStartup::int: 1 forced start-up using generator as motor, 2 self-starting mode, 0 specified rotor speed mode")usingRotorSpeedFunction::bool: use user specified rotor speed profile functiontocp::Array{<:float}: = time points for rotor speed profile (s)tocp_Vinf::Array{<:float}: = time points for specified Vinf profile (s)numTS::int: total number of timesteps to rundelta_t::float: timestep interval (s)Omegaocp::Array{<:float}: = rotor speed points for rotor speed profile (Hz)Vinfocp::Array{<:float}: = rotor speed points for specified Vinf profile (Hz)aeroLoadsOn::bool: #0 off, 1 one way, 1.5 one way with deformation from last timestep, 2 two wayAD15On::bool: flag to use AD15 for aerodriveTrainOn::bool: flag to include drivetrain effectsgeneratorOn::bool: flag to include generator effectsplatformActive::bool: flag to include platform couplinginterpOrder::int: order used for extrapolating inputs and states, 0 flat, 1 linear, 2 quadratichd_input_file::string: file path to the HydroDyn .dat input filess_input_file::string: file path to the HydroDyn sea states input filemd_input_file::string: file path to the MoorDyn .dat input fileJgearBox::float: gearbox intertia, standard SI unitsgearRatio::float: gearbox gear ratiogearBoxEfficiency::float: gearbox efficiency (typically 0-1)useGeneratorFunction::bool: = flag to use user specified generator profilegeneratorProps::float: not used, should clean upratedTorque::float: Generator rated max torquezeroTorqueGenSpeed::float: rated generator speed (minus slippage)pulloutRatio::float: Fraction of the min/max torque that the generator engages/disengagesratedGenSlipPerc::float: extra speed from slipping?OmegaGenStart::float: speed (Hz) at which generator would kick inomegaControl::bool: false for fixed speed, true for dynamicOmegaInit::float: initial rotor speed (Hz)aeroloadfile::string: string of the name and path for the cactus aeroloads if using the old serial owens callowensfile::string: string of the name and path for the owens input file if using the old serial owens callpotflowfile::string: string of the prefix and path for the directory containing the potential flow files from WAMIT (required by HydroDyn)dataOutputFilename::string: path and name of output file, will be overwritten if already existsnumDOFPerNode::int: number of degrees of freedom per nodebladeData::BladeData: see ?BladeData, only used if calling the old serial owens functiondriveShaftProps::DriveShaftProps: see ?DriveShaftPropsTOL::float: gauss-seidel iteration toleranceMAXITER::int: gauss-seidel maximum iterations
Outputs:
OWENS.Inputs:
OWENS.Iteration_Parameters — TypeInternal, gauss-seidel iteration parameters
OWENS.Mesh_Options — TypeMeshOptions(dictin::OrderedCollections.OrderedDict{Symbol,Any})
# Input
* `ntelem`: default 20, number of tower elements in each blade, plus nodes wherever there is a component overlap
* `nbelem`: default 30, number of blade elements in each blade, plus nodes wherever there is a component overlap
* `ncelem`: default 30, number of cable elements in each cable if ARCUS
* `nselem`: default 10, number of elements in each strut
* `angularOffset`: default 0.0, moves the structure to align with the aero model
* `joint_type`: default 0, optionally can specify the strut to blade joints to be pinned about different axes, or 0 for welded
* `c_mount_ratio`: default 0.05, for ARCUS, where the cable mounts on the lower side of the blade
* `AD15hubR`: default 0.1, parameter, used in aerodyn coupling for the hub radius so that the vortex sheets don't go within the hub
* `cables_connected_to_blade_base`: default true, for ARCUS, for the two part simulation of the blade bending
* `turbineType`: default "Darrieus", mesh Darrieus, H-VAWT, controls if the tips of the blades are joined to the tower in the mesh or not.
# Output
* `Mesh_Options`:OWENS.NuMad — TypeNuMad(nweb,nstack,nsegments,span,airfoil,tetype,twistd,chord,xoffset,aerocenter,stackmattypes,stacklayers,segments,DPtypes,skin,webstack,webdp)
Parameters defining the blade composite layup. See NuMad user guide SAND2012_7028 appendix B for more details
Arguments
n_web::Int64: number of shear websn_stack::Int64: number of predefined composite stacksn_segments::Int64: number of segments around the airfoilspan::Vector{Float64}: span-wise positionairfoil::Vector{String}: airfoil namete_type::Vector{String}: trailing edge typetwist_d::Vector{Float64}: twist_d in degreeschord::Vector{Float64}: chord lengthxoffset::Vector{Float64}: The distance from the “nose” of a station to the blade reference axis.aerocenter::Vector{Float64}: This is an aerodynamic parameter that is an output from aerodynamic performance analysis of a two-dimensional airfoil section. The aerodynamic center is the point along the chord where the aerodynamic pitching moment does not vary with changes in angle of attack.stack_mat_types::Vector{Int64}: Material numbers used that correspond to each stack numberstack_layers::Array{Int64,2}: number of layers at each span used corresponding to each material type (first index corresponds to spanwise position, second index corresponds to the stack number)segments::Array{Float64,2}: normalized starting and stopping points of each section (i.e. leading edge, sparcap, etc). First index corresponds to spanwise position, second index corresponds to the section, except there is an extra first column starting at -1 for the trailing edge. There must be a leading edge position at 0, and the last column must be 1 corresponding to the trailing edge again. Positions are fractions of the chord, lower (HP) is negative, upper (LP) is positiveDPtypes::Array{Int64,2}: division point types (NOTE THAT THIS ISN'T IMPLEMENTED AND DOES NOTHING CURRENTLY, i.e. only SINGLE is being used). First index corresponds to spanwise position, second corresponds to section numberskin_seq::Array{Seq,2}: stack sequence, is an array of structures, each containing a Vector{Int64} of the sequence (i.e. skin[2,5].seq). First index corresponds to spanwise positoin, second index the sectionweb_seq::Array{Seq,2}: same format and meaning as skin sequence, but for the webs with the second index corresponding to the web numberweb_dp::Array{Seq,2}: same format as skin sequence, but this corresponds to the section numbers the web connects to at the top and bottom at both edges. There are always four entries in the CSV list and the order goes as follows: inboard LP, inboard HP, outboard HP, outboard LP.
OWENS.OWENSAero_Options — TypeOWENSAeroOptions(dictin::OrderedCollections.OrderedDict{Symbol,Any})
# Input
* `Nslices`: default 20, number of 3-D slices for the strip method to go from 2D to 3D considering curved deforming blades
* `ntheta`: default 30, number of azimuthal discretizations
* `ifw`: default false, use the inflow wind coupling to get inflow velocities TODO: change ifw to inflowwind inflowwind_active etc everywhere
* `DynamicStallModel`: defaultBV", dynamic stall model, should be under an OWENSAero options
* `RPI`: default true, rotating point iterative method (i.e. it just calculates at the blade positions and is much faster)
* `Aero_Buoyancy_Active`: default false, flag to turn buoyancy on for the blades. This is likely to be replaced by a different model
* `Aero_AddedMass_Active`: default false, flag to turn added mass forces on, don't turn on if the added mass in the structures are on
* `Aero_RotAccel_Active`: default false, flag to turn added mass forces on, don't turn on if the added mass in the structures are on
# Output
* `OWENSAero_Options`:OWENS.OWENSFEA_Options — TypeOWENSFEAOptions(dictin::OrderedCollections.OrderedDict{Symbol,Any})
# Input
* `nlOn`: default true, nonlinear effects
* `RayleighAlpha`: default 0.05, damping coefficient scalar on the stiffness matrix
* `RayleighBeta`: default 0.05, damping coefficient scalar on the mass matrix
* `iterationType`: default "DI", internal iteration type DI direct iteration, NR newton rhapson (which is less stable than DI)
* `guessFreq`: default 0.0, for the built in flutter model frequency guessed for the flutter frequency
* `numModes`: default 20, ROM model, number of modes used in the analysis type. Less is faster but less accurate
* `adaptiveLoadSteppingFlag`: default true, for steady analysis if convergence fails, it will reduce the load and retry then increase the load
* `minLoadStepDelta`: default 0.0500, minimum change in load step
* `minLoadStep`: default 0.0500, minimum value of reduced load
* `prescribedLoadStep`: default 0.0, optional prescribed load fraction
* `maxNumLoadSteps`: default 20, used in static (steady state) analysis, max load steps for adaptive load stepping
* `tolerance`: default 1.0000e-06, total mesh unsteady analysis convergence tolerance for a timestep within the structural model
* `maxIterations`: default 50, total mesh unsteady analysis convergence max iterations for a timestep
* `elementOrder`: default 1, Element order, 1st order, 2nd order etc; determines the number of nodes per element (order +1). Orders above 1 have not been tested in a long time
* `alpha`: default 0.5, newmark time integration alpha parameter
* `gamma`: default 0.5, newmark time integration gamma parameter
* `AddedMass_Coeff_Ca`: default 0.0, added mass coefficient, scaling factor (typically 0-1) on the cones of water mass applied to each structural element in the 22 and 33 diagonal terms. 0 turns this off
* `platformTurbineConnectionNodeNumber`: default 1, TODO: reconnect this
* `aeroElasticOn`: default false, OWENSFEA for the built in flutter model
* `spinUpOn`: default true, TODO: remove this since it should always be true since that is how its used. To turn it off, just set RPM and gravity to 0. OWENSFEA modal analysis, calculates steady centrifugal strain stiffening and then passes that model to the modal analysis
* `predef`: default false, Predeformation flag for two state analysis where a portion of the blade is deformed and the nonlinear strain stiffening terms are "update"-d, then "use"-d in two different analysis
# Output
* `OWENSFEA_Options`:OWENS.OWENSOpenFASTWrappers_Options — TypeOWENSOpenFASTWrappersOptions(dictin::OrderedCollections.OrderedDict{Symbol,Any})
# Input
* `windINPfilename`: default nothing, If ifw or AeroDyn is being used, gets overwritten if using the DLC analysis type, the moordyn file location, like in the unit test
* `ifw_libfile`: default nothing, location of the respective OpenFAST library, if nothing it will use the internal OWENS installation
* `hd_lib`: default nothing, location of the respective OpenFAST library, if nothing it will use the internal OWENS installation
* `md_lib`: default nothing, location of the respective OpenFAST library, if nothing it will use the internal OWENS installation
* `adi_lib`: default nothing, location of the respective OpenFAST library, if nothing it will use the internal OWENS installation
* `adi_rootname`: default "/aerodyn", location of the respective OpenFAST library, if nothing it will use the internal OWENS installation
* `hd_input_file`: default "none", If platformActive, the hydrodyn file location, like in the unit test
* `ss_input_file`: default "none", If platformActive, the sea state file location, like in the unit test
* `md_input_file`: default "none", If platformActive, the moordyn file location, like in the unit test
* `potflowfile`: default nothing, If platformActive, the potential flow files location, like in the unit test
* `WindType`: default 3, Derived parameter, inflowwind wind file type when DLC generator is active, matches inflowwind WindType
# Output
* `OWENSOpenFASTWrappers_Options`:OWENS.OWENS_Options — TypeOWENSOptions(dictin::OrderedCollections.OrderedDict{Symbol,Any})
# Input
* `analysisType`: default "Unsteady", Unsteady, DLC, Campbell, todo: steady, flutter may be re-activated in the future.
* `AeroModel`: default "DMS", OWENSAero model "DMS" for double multiple streamtube or "AC" for actuator cylinder, or "AD" for aerodyn
* `structuralModel`: default "TNB", Structural models available: TNB full timoshenko beam elements with time newmark beta time stepping, ROM reduced order modal model of the timoshenko elements, GX with GXBeam's methods for geometrically exact beam theory and more efficient methods and time stepping
* `controlStrategy`: default "normal", should be in WindIO?- yes,
* `numTS`: default 10, number of time steps TODO: change to sim time and make this derived
* `delta_t`: default 0.05, time step in seconds
* `platformActive`: default false, flag to indicate if the floating platform model is active.
* `topsideOn`: default true, flat to be able to turn off the rotor and just run the floating portions
* `interpOrder`: default 2, if platformActive, order used for extrapolating inputs and states, 0 flat, 1 linear, 2 quadratic
* `dataOutputFilename`: default nothing, data output filename with path, set to nothing or don't specify to not output anything
* `rigid`: default false, this bypasses the structural solve and just mapps the applied loads as the reaction loads, and the deflections remain 0
* `TOL`: default 1e-4, gauss-seidel iteration tolerance - i.e. the two-way iteration tolerance
* `MAXITER`: default 300, gauss-seidel max iterations - i.e. the two-way iterations
* `verbosity`: default 2, verbosity where 0 is nothing, 1 is warnings, 2 is summary outputs, 3 is detailed outputs, and 4 is everything
* `VTKsaveName`: default "./vtk/windio", Path and name of the VTK outputs, recommended to put it in its own folder (which it will automatically create if needed)
* `aeroLoadsOn`: default 2, Level of aero coupling 0 structures only, 1 no deformation passed to the aero, 2 two-way coupling, 1.5 last time step's deformations passed to this timesteps aero and no internal iteration.
* `Prescribed_RPM_time_controlpoints`: default [0.0,100000.1], If controlStrategy is "fixedRPM", array of time control points for the internal spline
* `Prescribed_RPM_RPM_controlpoints`: default [17.2,17.2], If controlStrategy is "fixedRPM", array of RPM control points for the internal spline
* `Prescribed_Vinf_time_controlpoints`: default [0.0,100000.1], If AeroModel is "DMS" or "AC, and ifw is false, array of time control points for the internal spline
* `Prescribed_Vinf_Vinf_controlpoints`: default [17.2,17.2], If AeroModel is "DMS" or "AC, and ifw is false, array of Vinf control points for the internal spline
# Output
* `OWENS_Options`:OWENS.Strut — TypeInternal, struct containing the CACTUS geometry file data for a strut
OWENS.Unified_Options — TypeUnified_Options
# Input
* `OWENS_Options::OWENS_Options`:
* `DLC_Options::DLC_Options`:
* `OWENSAero_Options::OWENSAero_Options`:
* `OWENSFEA_Options::OWENSFEA_Options`:
* `OWENSOpenFASTWrappers_Options::OWENSOpenFASTWrappers_Options`:
* `Mesh_Options::Mesh_Options`:
* `Drivetrain_Options::Drivetrain_Options`:
# Output
* `Unified_Options`:OWENS.plyproperties — MethodStruct containing
material names
Composites.Material structs for each material name - see ?Composites.Material
OWENS.ModelingOptions — FunctionModelingOptions(yamlInputfile)
# Input
* `yamlInputfile::string`: yaml file containing ordered inputs matching the default keys
# Output
* `Unified_Options::Unified_Options`: Struct of structs containing all of the OWENS OptionsOWENS.OWENSVTK — MethodOWENSVTK(savename,t,uHist,system,assembly,sections,aziHist,mymesh,myel,epsilon_x_hist,epsilon_y_hist,epsilon_z_hist,kappa_x_hist,kappa_y_hist,kappa_z_hist,FReactionHist)Formats and outputs OWENS data into VTK format
#Intput
#Output
none:
OWENS.OWENSVTK — MethodOWENSVTK(VTKsaveName,rundata,system,assembly,sections,mymesh,myel;tsave_idx=1:length(rundata.t,))Formats and outputs OWENS data into VTK format
#Intput
#Output
none:
OWENS.Unsteady — MethodUnsteady(model,topModel,mesh,el,aero;getLinearizedMatrices=false)
Executable function for transient analysis. Provides the interface of various external module with transient structural dynamics analysis capability.
# Input
* `inputs::Inputs`: see ?Inputs
* `topModel::FEAModel`: see ?OWENSFEA.FEAModel
* `mesh::Mesh`: see ?OWENSFEA.Mesh
* `el::El`: see ?OWENSFEA.El
* `bin::Bin`: see ?Bin
* `aero::function`: Fexternal, Fdof = aero(t) where Fexternal is the force on each affected mesh dof and Fdof is the corresponding DOFs affected
* `getLinearizedMatrices::Bool`: Flag to save the linearized matrices
* `elStorage::ElStorage.ElStorage`: Optional object containing stored element matrices
* `u_s::Array{<:float}`: Optional warm start of top deflections, of length Nnodes x Ndof
# Output
* `t`: time array (s)
* `aziHist`: azimuthal history array
* `OmegaHist`: rotational speed array history (hz)
* `OmegaDotHist`: rotational acceleration array history
* `gbHist`: gearbox position history array
* `gbDotHist`: gearbox velocity history array
* `gbDotDotHist`: gearbox acceleration history array
* `FReactionHist`: Nodal reaction 6dof forces history
* `rigidDof`:
* `genTorque`: generator torque history
* `genPower`: generator power history
* `torqueDriveShaft`: driveshaft torque history
* `uHist`: mesh displacement history for each dof
* `epsilon_x_hist`: strain history for eps_xx_0 for each dof
* `epsilon_y_hist`: strain history for eps_xx_z for each dof
* `epsilon_z_hist`: strain history for eps_xx_y for each dof
* `kappa_x_hist`: strain history for gam_xz_0 for each dof
* `kappa_y_hist`: strain history for gam_xz_y for each dof
* `kappa_z_hist`: strain history for gam_xy_0 for each dofOWENS.Unsteady_Land — MethodUnsteady(model,topModel,mesh,el,aero;getLinearizedMatrices=false)
Executable function for transient analysis. Provides the interface of various external module with transient structural dynamics analysis capability.
# Input
* `inputs::Model`: see ?Model
* `topModel::FEAModel`: see ?OWENSFEA.FEAModel
* `mesh::Mesh`: see ?OWENSFEA.Mesh
* `el::El`: see ?OWENSFEA.El
* `bin::Bin`: see ?Bin
* `aero::function`: Fexternal, Fdof = aero(t) where Fexternal is the force on each affected mesh dof and Fdof is the corresponding DOFs affected
* `getLinearizedMatrices::Bool`: Flag to save the linearized matrices
* `elStorage::ElStorage.ElStorage`: Optional object containing stored element matrices
* `u_s::Array{<:float}`: Optional warm start of top deflections, of length Nnodes x Ndof
# Output
* `t`: time array
* `aziHist`: azimuthal history array
* `OmegaHist`: rotational speed array history
* `OmegaDotHist`: rotational acceleration array history
* `gbHist`: gearbox position history array
* `gbDotHist`: gearbox velocity history array
* `gbDotDotHist`: gearbox acceleration history array
* `FReactionHist`: Nodal reaction 6dof forces history
* `rigidDof`:
* `genTorque`: generator torque history
* `genPower`: generator power history
* `torqueDriveShaft`: driveshaft torque history
* `uHist`: mesh displacement history for each dof
* `epsilon_x_hist`: strain history for eps_xx_0 for each dof
* `epsilon_y_hist`: strain history for eps_xx_z for each dof
* `epsilon_z_hist`: strain history for eps_xx_y for each dof
* `kappa_x_hist`: strain history for gam_xz_0 for each dof
* `kappa_y_hist`: strain history for gam_xz_y for each dof
* `kappa_z_hist`: strain history for gam_xy_0 for each dofOWENS.calcHydroResidual — Methodcalc_hydro_residual(new_accels, new_hydro_frcs, md_frc, u, FMultiplier)Internal, finds the residual of the platform accelerations/forces when adding in new values from HydroDyn, MoorDyn, and OWENSFEA.
Input
new_accels::Vector{<:float}: the new platform accelerations in the inertial reference frame from OWENSFEA (m/s/s)new_hydro_frcs::Vector{<:float}: the new platform hydro forces in the inertial reference frame from HydroDyn (N)md_frc::Vector{<:float}: the mooring forces at the platform in the inertial reference frame from MoorDyn (N)u::Vector{<:float}: input vector containing platform loads and accelerations prior to the new additionsFMultiplier::Number: scaling factor used to make the loads/accelerations in the same magnitude for the Jacobians
Output
u_resid: vector containing residual between the input u and the new load/accelerations
OWENS.calculateDriveShaftReactionTorque — MethodcalculateDriveShaftReactionTorque(driveShaftProps,thetaRotor,thetaGB,thetaDotRotor,thetaDotGB)Internal, calculates reaction torque of driveshaft
#Input
driveShaftProps: object containing driveshaft propertiesthetaRotor: azimuth position of rotor/rotor shaft (rad)thetaGB: azimuth position of gearbox shaft (rad)thetaDotRotor: angular velocity of rotor/rotor shaft (rad/s)thetaDotGB: angular velocity of gearbox shaft (rad/s)
#Output
torque: reaction torque of drive shaft
OWENS.calculateElementOrientation — MethodcalculateElementOrientation(mesh)Calculates the orientation of elements in a mesh.
#Input
mesh::OWENSFEA.Meshsee ?OWENSFEA.Mesh object containing mesh data
#Output
elOr::OWENSFEA.Ortsee ?OWENSFEA.Ort object containing element orientation data
OWENS.calculatePsiTheta — MethodcalculatePsiTheta(v)Calculates the orientation of a single element. A local element frame is related to a hub frame through a transformation matrix CHtoE (transforming a vector from an element frame E to a global frame H) such that CHtoE = [M2(Theta)]*[M3(Psi)]. Here [M2( )] is a direction cosine matrix about a 2 axis and [M3( )] is a direction cosine matrix about a 3 axis.
#Input
v: vector from node 1 to node 2 of an element
#Output
Psi: "3" angle for element orientation (deg)Theta: "2" angle for element orientation (deg)
OWENS.count_cycles — MethodCount the cycles from the data
OWENS.createGeneralTransformationMatrix — MethodcreateGeneralTransformationMatrix(angleArray,axisArray)Calculates the transformation matrix assocaited with a general Euler rotation sequence.
#Input
angleArray: = array of angles for Euler rotation sequenceaxisArray: = array of axis of rotatoins for Euler rotation
#Output
dcmTotal: = transformation matrix of specified euler rotation sequence
OWENS.createInitCondArray — MethodsetInitConditions(initDisps, numNodes, numDOFPerNode)Creates the formatted initial conditions array needed by OWENSFEA
#Input
initDisps: an array of length numDOFPerNode specifying the initial displacement of each DOFnumNodes: the number of nodes in the given meshnumDOFPerNode: the number of unconstrained degrees of freedom calculated in each node
#Output
initCond: array containing initial conditions. initCond(i,1) node number for init cond i. initCond(i,2) local DOF number for init cond i. initCond(i,3) value for init cond i.
OWENS.createSingleRotationDCM — MethodCreates a direction cosine matrix (dcm) associated with a rotation of angleDeg about axisNum.
OWENS.create_arcus_mesh — Methodcreatearcusmesh(;Htwrbase = 15.0, Hbld = 147.148-15.0, #blade height R = 54.014, # m bade radius nblade = 3, ntelem = 30, #tower elements nbelem = 30, #blade elements ncelem = 4, strutmountpoint = 0.01, # This puts struts at top and bottom bshapex = zeros(nbelem+1), #Blade shape, magnitude is irrelevant, scaled based on height and radius above bshapez = zeros(nbelem+1), jointtype = 0, cablesconnectedtoblade_base = true, angularOffset = 0.0)
ARCUS mesh configuration: no tower between blades, no struts, but cables from top center attaching to specified blade mount point at base
#Inputs
Htwr_base::float: height of tower before blades attach (m)Hbld::float: blade height (m)R::float: bade radius (m)nblade::int: number of bladesntelem::int: number of tower elementsnbelem::int: number of blade elementsncelem::int: number of strut elementsc_mount_ratio::float: factor of blade height where the struts attach on both top and bottombshapex::Array{<:float}: Blade shape, magnitude is irrelevant, scaled based on height and radius abovebshapez::Array{<:float}: Blade shape, magnitude is irrelevant, scaled based on height and radius abovejoint_type::int: 0 is fixed, 1 is about x-axis, 2 is y-axis, etccables_connected_to_blade_base::bool: = true,angularOffset::float: (rad) angular offset of mesh generation, typically used to match CACTUS input. Value of 0 puts blade 1 at the "north" position and the others populate counterclockwise when looking down
#Outputs
mymesh::OWENSFEA.Mesh: see ?OWENSFEA.Meshort::OWENSFEA.Ort: see ?OWENSFEA.Ortmyjoint:Array{<:float}: see ?OWENSFEA.FEAModel.joint
OWENS.create_hawt_biwing_mesh — Methodcreatehawtbiwingmesh(;Ht = 15.0, Hb = 147.148-15.0, #blade height R = 54.014, # m bade radius nblade = 3, ntelem = 30, #tower elements nbelem = 30, #blade elements ncelem = 4, strutmountpoint = 0.01, # This puts struts at top and bottom bshapex = zeros(nbelem+1), #Blade shape, magnitude is irrelevant, scaled based on height and radius above bshapez = zeros(nbelem+1), jointtype = 0, cablesconnectedtoblade_base = true, angularOffset = 0.0)
#Inputs
Ht::float: height of tower before blades attach (m)Hb::float: blade height (m)R::float: bade radius (m)nblade::int: number of bladesntelem::int: number of tower elementsnbelem::int: number of blade elementsncelem::int: number of strut elementsc_mount_ratio::float: factor of blade height where the struts attach on both top and bottombshapex::Array{<:float}: Blade shape, magnitude is irrelevant, scaled based on height and radius abovebshapez::Array{<:float}: Blade shape, magnitude is irrelevant, scaled based on height and radius abovejoint_type::int: 0 is fixed, 1 is about x-axis, 2 is y-axis, etccables_connected_to_blade_base::bool: = true,angularOffset::float: (rad) angular offset of mesh generation, typically used to match CACTUS input. Value of 0 puts blade 1 at the "north" position and the others populate counterclockwise when looking down
#Outputs
mymesh::OWENSFEA.Mesh: see ?OWENSFEA.Meshort::OWENSFEA.Ort: see ?OWENSFEA.Ortmyjoint:Array{<:float}: see ?OWENSFEA.FEAModel.joint
OWENS.create_hawt_mesh — Methodcreatehawtmesh(;Ht = 15.0, Hb = 147.148-15.0, #blade height R = 54.014, # m bade radius nblade = 3, ntelem = 30, #tower elements nbelem = 30, #blade elements ncelem = 4, strutmountpoint = 0.01, # This puts struts at top and bottom bshapex = zeros(nbelem+1), #Blade shape, magnitude is irrelevant, scaled based on height and radius above bshapez = zeros(nbelem+1), jointtype = 0, cablesconnectedtobladebase = true, angularOffset = 0.0)
ARCUS mesh configuration: no tower between blades, no struts, but cables from top center attaching to specified blade mount point at base
#Inputs
Ht::float: height of tower before blades attach (m)Hb::float: blade height (m)R::float: bade radius (m)nblade::int: number of bladesntelem::int: number of tower elementsnbelem::int: number of blade elementsncelem::int: number of strut elementsc_mount_ratio::float: factor of blade height where the struts attach on both top and bottombshapex::Array{<:float}: Blade shape, magnitude is irrelevant, scaled based on height and radius abovebshapez::Array{<:float}: Blade shape, magnitude is irrelevant, scaled based on height and radius abovejoint_type::int: 0 is fixed, 1 is about x-axis, 2 is y-axis, etccables_connected_to_blade_base::bool: = true,angularOffset::float: (rad) angular offset of mesh generation, typically used to match CACTUS input. Value of 0 puts blade 1 at the "north" position and the others populate counterclockwise when looking down
#Outputs
mymesh::OWENSFEA.Mesh: see ?OWENSFEA.Meshort::OWENSFEA.Ort: see ?OWENSFEA.Ortmyjoint:Array{<:float}: see ?OWENSFEA.FEAModel.joint
OWENS.create_mesh_struts — Methodreturn mymesh, myort, myjoint, AD15bldNdIdxRng, AD15bldElIdxRng = createmeshcomponents(;Htwrbase = 15.0, Htwrblds = 147.148-15.0, Hbld = 147.148-15.0, #blade height R = 54.014, # m bade radius AD15hubR = 2.0, nblade = 3, ntelem = 30, #tower elements nbelem = 30, #blade elements nselem = 4, struttwrmountpoint = [0.01,0.5,0.9], strutbldmountpoint = [0.01,0.5,0.9], bshapex = zeros(nbelem+1), #Blade shape, magnitude is irrelevant, scaled based on height and radius above bshapez = zeros(nbelem+1), bshapey = zeros(nbelem+1), # but magnitude for this is relevant angularOffset = 0.0, #Blade shape, magnitude is irrelevant, scaled based on height and radius above AD15_ccw = false, verbosity=0, # 0 nothing, 1 basic, 2 lots: amount of printed information connectBldTips2Twr =true)
#Inputs
Htwr_base::float: height of tower before blades attach (m)Htwr_blds::float: height of the tower once the blades attach (m)Hbld::float: blade height (m)R::float: bade radius (m)nblade::int: number of bladesntelem::int: number of tower elementsnbelem::int: number of blade elementsnselem::int: number of strut elementsstrut_twr_mountpoint::float= [0.01,0.5,0.9], # factor of blade height where the bottom strut attaches on the tower # This puts struts at top and bottom, as a fraction of the blade positionstrut_bld_mountpoint::float= [0.01,0.5,0.9], # factor of blade height where the bottom strut attaches on the blade # This puts struts at bottom 0, mid 0.5, and top 1.0 as a fraction of the blade positionbshapex::Array{<:float}: Blade shape, magnitude is irrelevant, scaled based on height and radius abovebshapez::Array{<:float}: Blade shape, magnitude is irrelevant, scaled based on height and radius abovebshapey::Array{<:float}: Blade shape, magnitude IS relevant #TODO: resolve thisangularOffset::float: (rad) angular offset of mesh generation, typically used to match CACTUS input. Value of 0 puts blade 1 at the "north" position and the others populate counterclockwise when looking downAD15_ccw::boolean: Use AD15 convention of VAWT counter-clockwise with blade root at top (blade points down)AD15hubR::float: AD15 has a hub radius, so the struts do not go all the way to the center of the axis of rotation, while the structural mesh does.
verbosity::int: 0 nothing, 1 basic, 2 lots: amount of printed information
connectBldTips2Twr::book: True for Darrieus style, false for H-VAWT, but the blade shapes should be appropriate
#Outputs
mymesh::OWENSFEA.Mesh: see ?OWENSFEA.Meshmyort::OWENSFEA.Ort: see ?OWENSFEA.Ortmyjoint:Array{<:float}: see ?OWENSFEA.FEAModel.jointAD15bldNdIdxRng: indices for start and end of all blades for AD15 (includes struts). Note that strut start nodes may be inside the strut (strut connects to tower, AD15 blade connects to hub wich is a few nodes away from tower)AD15bldElIdxRng: range of elements for start and end of all AD15 blades (includes struts)
OWENS.externalForcing — MethodexternalForcing(time,timeArray,ForceValHist,ForceDof)Internal, linear time interpolation on the input forces (ForceValHist) for each specified ForceDof
This function specifies external forcing for a transient analysis. Fexternal is a vector of loads and Fdof is a corresponding vector of degrees of freedom the concentrated loads in Fexternal correspond to. The input time allows for arbitrary time varying loads The global degree of freedom number corresponding with the local degree of freedom of a node may be calculated by: globalDOFNumber = (nodeNumber-1)*6 + localDOFnumber The localDOFnumber may range from 1 to 6 such that 1 corresponds to a force in "x direction" of the co-rotating hub frame. 2 and 3 corresponds to a force in the "y" and "z directions" respectively. 4, 5, and 6 correspond to a moment about the "x", "y", and "z" directions respectively.
#Input
time: Current timetimeArray: time associated with ForceValHistForceValHist: Forces for each time for each DofForceDof: Dofs within ForceValHist
#Output
Fexternal: vector of external loads (forces/moments)Fdof: vector of corresponding DOF numbers to apply loads to
OWENS.extrap_pred_vals — Methodextrap_pred_vals(curr_vals, ts, t_out, interp_order)Internal, calculates predicted values at t_out based on previous values at earlier times.
Input
curr_vals::Vector{<:float}: input valuests::Vector{<:float}: time values corresponding to curr_vals. Left to right, times go from earliest to most recent.t_out::float: time for values to be extrapolated tocpinterp_order::int: order of the spline fit for the extrapolation, 0 flat, 1 linear, 2 quadratic
Output
pred_vals: extrapolated values at t_out
OWENS.find_boundary_vals — MethodFind the minimum and maximum mean value and maximum range from a vector of cycles
OWENS.find_range — MethodReturns the range index where the value is found
OWENS.frame_convert — Methodframe_convert(init_frame_vals, trans_mat)Internal, transfers 6 DOFs element-wise to a new reference frame
Input
init_frame_vals::Vector{<:float}: Values in 6 degrees of freedom in the initial reference frametrans_mat::Array{<:float}: Transformation matrix to the output reference frame
Output
out_frame_vals: Values in 6 degrees of freedom in the output reference frame
OWENS.generateOutputFilename — MethodInternal, generates an output file name depending on the analysis type
OWENS.getGustVel — Methodtime::TF: in secondsnominalVinf::TF: Nominal velocity used to calculate the IEC gust size (m/s)R::TF: Turbine Radius (m)G_amp::TF: IEC gust amplitude (m/s)gustT::TF: IEC gust duration (s)gustDelayT::TF: IEC gust delay time
OWENS.getOWENSPreCompOutput — MethodgetOWENSPreCompOutput(numadIn;yscale=1.0,plyprops = plyproperties())Takes numad formatted inputs for composite layup and material properties and runs them through OWENSPreComp
#Inputs
numadIn::NuMad: see ?NuMad inputsyscale::float: airfoil thickness scalingplyprops::plyproperties(): see ?plyproperties for input material properties
#Outputs
precompoutput::OWENSPreComp.Output: see ?OWENSPreComp.Inputprecompinput::OWENSPreComp.Input: see ?OWENSPreComp.propertieslam_U::Composites.Laminate: laminate stacks used for post processing, size (nstations, nupper chorwise stations), upper surface, see ?Composites.Laminatelam_L::Composites.Laminate: laminate stacks used for post processing, size (nstations, nlower chorwise stations), lower surface, see ?Composites.Laminatelam_W::Composites.Laminate: laminate stacks used for post processing, size (nstations, nwebs), shear webs, see ?Composites.Laminate
OWENS.getRotorPosSpeedAccelAtTime — MethodgetRotorPosSpeedAccelAtTime(t0,time,aziInit)Uses the user defined function rotorSpeedProfile() to get the azimuth, speed, and acceleration of the rotor.
#Input
t0time at which azimuth integration is beginningtimecurrent time that position, velocity, and acceleration are being requestedaziInitinitial rotor azimuth angle integration will begin at
#Output
rotorAzimuthazimuth position of rotor (rad) at timerotorSpeedrotor speed (Hz) at timerotorAccelerationrotor acceleration (Hz/s) at time
OWENS.getSectPropsFromOWENSPreComp — MethodgetSectPropsFromOWENSPreComp(usedUnitSpan,numadIn,precompoutput;GX=false,precompinputs=nothing,fluid_density=0.0,AddedMass_Coeff_Ca=1.0,N_airfoil_coord=100))Arranges the precomp output into the sectional properties required by OWENSFEA
#Inputs
usedUnitSpan::Array{<:float}: Array specifying the relative (0-1) mesh z locations where the sectional properties are actually called for (interpolation)numadIn::NuMAD: see ?NuMADprecompoutput::OWENSPreComp.properties: see ?OWENSPreComp.propertiesGX::bool: optional specifies if GX outputs should be outputprecompinputs: optionalfluid_density::Float64: fluid density, used if added mass is on (AddedMassCoeffCa>0.0)AddedMass_Coeff_Ca::Float64: if >0.0, then added mass is calculated off of the airfoil geometry and included in the structuresN_airfoil_coord::Int: Number of upper/lower common airfoil x points to spline to to enable VTK output of airfoil surface
#Outputs
sectionPropsArray::SectionPropsArray: see ?OWENSFEA.SectionPropsArray, if !GX boolstiff: if GX boolmass: if GX bool
stiff, mass
OWENS.mapACDMS — MethodmapACDMS(t,mesh,el)map OWENSAero forces to OWENS mesh dofs
Inputs
t::float: time at which to get the loads (can be called repeatedly at the same time or for large time gaps, will infill run as needed)mesh::OWENSFEA.Mesh: see ?OWENSFEA.Meshmesh::OWENSFEA.El: see ?OWENSFEA.El
Outputs:
ForceValHist::Array(<:float): Force or moment (N, N-m) at the time corresponding to the time specifiedForceDof::Array(<:int): DOF numbers cooresponding to forces (i.e. mesh element 1 has dofs 1-6, 2 has dofs 7-12, etc)
OWENS.mapAD15 — MethodmapAD15(t,mesh)map AD15 forces to OWENS mesh dofs
Inputs
t::float: time at which to get the loads (can be called repeatedly at the same time or for large time gaps, will infill run as needed)mesh::OWENSFEA.Mesh: see ?OWENSFEA.Meshmesh::OWENSFEA.El: see ?OWENSFEA.El
Outputs:
ForceValHist::Array(<:float): Force or moment (N, N-m) at the time corresponding to the time specifiedForceDof::Array(<:int): DOF numbers cooresponding to forces (i.e. mesh element 1 has dofs 1-6, 2 has dofs 7-12, etc)
OWENS.mapCactusLoadsFile — MethodInternal, takes cactus loads and geometry and OWENS mesh and maps the loads to the blades' FEA dofs
OWENS.my_getABD! — Functionmy_getABD(matid::AbstractArray{<:Integer,1}, nply::AbstractArray{<:Integer,1}, tply::AbstractArray{<:Real,1}, theta::AbstractArray{<:Real,1}, q::AbstractArray{<:AbstractArray{<:Real,2},1}), offset::Real
my_getABD(lam::Laminate, q::AbstractArray{<:AbstractArray{<:Real,2},1}), offset::Real
Returns A, B, and D matrices
Arguments:
matid::AbstractArray{<:Integer,1}: material id of each laminanply::AbstractArray{<:Integer,1}: number of plies in each laminatply::AbstractArray{<:Real,1}: thickness of a ply (m) in each laminatheta::AbstractArray{<:Real,1}: orientation (deg) of each laminaq::AbstractArray{<:AbstractArray{<:Real,2}}: Stiffness matrix of each laminaoffset::Real: Optional, used if neutral axis is not centered on the ply. If used, specify distance from neutral axis to upper surface (m).
OWENS.my_getplystrain — Functionmy_getplystrain(nply::AbstractArray{<:Integer,1}, tply::AbstractArray{<:Real,1}, theta::AbstractArray{<:Real,1}, resultantstrain::AbstractArray{<:Real,1}, offset::Real)
my_getplystrain(lam::Laminate, resultantstrain::AbstractArray{<:Real,1}, offset::Real)
Optional Argument
offset::Real: Optional, used if neutral axis is not centered on the ply. If used, specify distance from neutral axis to upper surface (m).
Calculates strains in each ply aligned with principal material direction.
OWENS.my_getz — Functiongetz(tply::AbstractArray{<:Real,1}, nply::AbstractArray{<:Integer,1}, offset::Real)
getz(lam::Laminate, offset::Real)
Returns a laminate's z-coordinates (coordinates of top and bottom of laminas) given the thickness of plies in each lamina and the number of plies in each lamina. Offset is optional, defaults to 0.0, is the distance from the neutal axis to the upper ply if the laminate is not centered about the neutral axis of a beam.
OWENS.mywrite_vtk — Methodmywrite_vtk(name, assembly::Assembly, [state::AssemblyState, ]λ::Number,
eigenstate::AssemblyState; scaling=1.0, mode_scaling=1.0, cycles=1,
steps=100)Write a series of files corresponding to the elastic motion of the assembly about the deformed state encoded in state defined by the eigenvalue λ and the eigenvector encoded in eigenstate over the time period specified by time.
The steady-state deflections can be scaled with scaling and the eigenmode deflections can be scaled using mode_scaling.
The current time is encoded in the metadata tag "time"
OWENS.mywrite_vtk — Methodmywrite_vtk(name, assembly::Assembly; kwargs...)
mywrite_vtk(name, assembly::Assembly, state::AssemblyState; kwargs...)
mywrite_vtk(name, assembly::Assembly, history::Vector{<:AssemblyState}], dt;
kwargs...)Write the deformed geometry (and associated data) to a VTK file for visualization using ParaView.
The state argument may be omitted to write the original geometry to a VTK file without any associated data.
If the solution time history is provided, the time step must also be provided
Keyword Arguments
sections = nothing: Cross section geometry corresponding to each point, defined in a frame aligned with the body frame but centered around the corresponding point. Defined as an array with shape(3, ncross, np)wherencrossis the number of points in each cross section andnpis the number of points.scaling=1.0: Parameter to scale the deflections (only valid if state is provided)metadata=Dict(): Dictionary of metadata for the file(s)
OWENS.omegaSpecCheck — MethodInternal, gets specified rotor speed at time
OWENS.owens — Methodowens(owensfile,analysisType;
delta_t=2e-3,
numTS=100,
tocp=[0.0,1.1],
Omegaocp=[0.0,1.0],
OmegaInit=0.0,
OmegaGenStart=0.0,
usingRotorSpeedFunction=false,
nlOn=true,
Omega=0.0,
turbineStartup=0,
spinUpOn=false,
numModesToExtract=20,
displInitGuess=0.0,
airDensity=1.2041,
aeroElasticOn = false,
guessFreq = 0,
gravityOn = true,
generatorOn = false,
omegaControl = false,
iterationType = "NR", # nlParams
adaptiveLoadSteppingFlag = true,
tolerance = 1.0000e-06,
maxIterations = 50,
maxNumLoadSteps = 20,
minLoadStepDelta = 0.0500,
minLoadStep = 0.0500,
prescribedLoadStep = 0.0,
elementOrder = 1,
numDOFPerNode = 6,
platformActive = false,
platformTurbineConnectionNodeNumber = 1,
JgearBox =0.0,
gearRatio = 1.0,
gearBoxEfficiency = 1.0,
useGeneratorFunction = false,
generatorProps = 0.0,
driveTrainOn = false)Original serial and file reading method of running an analysis.
#Inputs See ?OWENS.Model and ?OWENSFEA.FEAModel
#Outputs See ?OWENS.Unsteady, ?OWENSFEA.Modal
OWENS.plotMesh — MethodplotMesh plots a mesh with various orthographic and isometric views plotMesh(mesh,colorstring,meshSeg)
This function plots a mesh in a 3D with isometric view.
#Input
mesh: object containing mesh datacolorstring: string containing color for plottingmeshSeg: array containing number of elements per mesh segmentax1: handle to the 1 plotax2: handle to the 2 plotax3: handle to the 3 plotax4: handle to the 4 plot
#Output NONE
OWENS.rainflow — Methodrainflow(signal;nbins_range=10,nbins_mean=10)Convenience function that returns the binned cycles with the corresponding ranges and means
Inputs
signal::Array{<:Real,1}: data inputnbins_range::Array{<:Int,1}: Number of bins for rangenbins_mean::Array{<:Int,1}: Number of bins for meanm` : Wohler exponent (default is 3)Teq` : The equivalent number of load cycles (default is 1, but normally the time duration in seconds is used)
Outputs:
Ncycles::Array{<:Real,2}: Summed/binned cycles with columns corresponding to mean levels and rows corresponding to range levelsmeanIntervals::Array{<:Real,1}: Mean levels corresponging with bins columnsrangeIntervals::Array{<:Real,1}: Range levels corresponging with bins rowsequivalentLoad::Array{<:Real,1}: Design equivalent load for each mean level
OWENS.readBCdata — MethodreadBCdata(bcfilename,numNodes,numDOFPerNode)This function reads the boundray condition file and stores data in the boundary condition object.
#Input
bcfilename::string: string containing boundary condition filenamenumNodes::int: number of nodes in structural modelnumDOFPerNode::int: number of degrees of freedom per node
#Output
BC::OWENSFEA.BC_struct: see OWENSFEA.BC_struct, object containing boundary condition data
OWENS.readBladeData — MethodreadBladeData(filename)This function reads blade data from file
#Input
filename::string: string containing /path/to/bladedata.bld
#Output
bladeData::BladeData: see ?BladeData object containing blade data
OWENS.readCactusGeom — MethodInternal, reads cactus .geom file and stores each column in an array within the CactusGeom struct
OWENS.readElementData — MethodreadElementData(numElements,elfile,ortfile,bldfileReads element data and stores data in the element data object.
#Input
numElements::int: number of elements in structural meshelfile::string: element data path/to/filenameortfile::string: element orientation path/to/filenamebldfile::string: blade data path/to/filename
#Output
el::OWENSFEA.El: see OWENSFEA.El element data object
OWENS.readGeneratorProps — MethodreadGeneratorProps(generatorfilename)This function reads generator properties from file.
#Input
generatorfilenanme::string: = string containing path/to/generatorfile
#Output
genprops: = model object containing generator properties
OWENS.readMesh — MethodreadMesh(filename)Reads the mesh file and stores data in the mesh object.
input:
filename::stringstring containing mesh path/to/filename.mesh
output:
mesh::OWENSFEA.Meshsee OWENSFEA.Mesh
OWENS.readNuMadGeomCSV — MethodreadNuMadGeomCSV(WindIO_Dict)
Parameters defining the rotor (apply to all sections).
Arguments
WindIO_Dict::String: name of the numad excel CSV file being read (!!! THE NUMAD TAB MUST BE SAVED AS A CSV FOR THIS TO WORK !!!)WindIO_Dict::OrderedCollections.OrderedDict{Symbol, Any}: Alternatively, the already loaded in dictionary of windio inputs
Returns
Output::NuMad: numad structure as defined in the NuMad structure docstrings.
OWENS.readNuMadMaterialsCSV — MethodreadNuMadMaterialsCSV(NuMadmaterialsxlscsv_file)
Parameters defining the rotor materials.
Arguments
NuMad_materials_xlscsv_file::String: name of the numad excel CSV file being read (!!! THE NUMAD TAB MUST BE SAVED AS A CSV FOR THIS TO WORK !!!)
Returns
Output::plyproperties: plyproperties structure as defined in the plyproperties structure docstrings.
OWENS.readResultsModalOut — MethodInternal, reads modal file and returns freq, damp, and modeshapes
OWENS.rigidBodyRotation — MethodrigidBodyRotation(B1,B2,B3,AngleArray,AxisArray)Performs a coordinate transformation from a local body "B"(element) frame to a common hub frame "H" via a 3-2-3 euler rotation sequence
#Input
B1: array containing body frame 1 coordinates of points to be mapped to the hub frameB2: array containing body frame 2 coordinates of points to be mapped to the hub frameB3: array containing body frame 3 coordinates of points to be mapped to the hub frameAngleArray: Array of angles for Euler rotation sequenceAxisArray: Array of axes for Euler rotation sequence
#Output
H1: array containg hub frame 1 coordinates of points mapped to the hub frame from body frameH2: array containg hub frame 2 coordinates of points mapped to the hub frame from body frameH3: array containg hub frame 3 coordinates of points mapped to the hub frame from body frame
That is CHtoB = [M3(SweepAngle)][M2(Theta)][M3(Psi)];
OWENS.run34m — Methodrun34m(inputs,feamodel,mymesh,myel,aeroForces,deformAero;steady=true,system=nothing,assembly=nothing,VTKFilename="./outvtk")
helper function that rearranges the outputs into the expected 34m output # Input * inputs::Model: see ?Model * topModel::FEAModel: see ?OWENSFEA.FEAModel * mesh::Mesh: see ?OWENSFEA.Mesh * el::El: see ?OWENSFEA.El * aeroForces::function: Fexternal, Fdof = aero(t) where Fexternal is the force on each affected mesh dof and Fdof is the corresponding DOFs affected * deformAero::function: see deformTurb(azi;newOmega=-1,newVinf=-1,bldx=-1,bldz=-1,bld_twist=-1,steady=false) * steady::bool: run steadystate with no aero or not * system: see ?GXBeam.System * assembly: see ?GXBeam.Assembly * VTKFilename::string: Unused: path and name of VTK output
# Output
* `eps_x`: strain history for eps_xx_0 for (Nbld,N_ts,mymesh.meshSeg[2]+1)
* `eps_y`: strain history for eps_xx_z like above
* `eps_z`: strain history for eps_xx_y like above
* `kappa_x`: strain history for gam_xz_0 like above
* `kappa_y`: strain history for gam_xz_y like above
* `kappa_z`: strain history for gam_xy_0 like above
* `t`: time array
* `FReactionHist`: Nodal reaction 6dof forces history
* `OmegaHist`: rotational speed array history
* `genTorque`: generator torque history
* `torqueDriveShaft`: driveshaft torque history
* `aziHist`: azimuthal history array
* `uHist`: mesh displacement history for each dof
* `epsilon_x_hist`: strain history for eps_xx_0 for each dof
* `epsilon_y_hist`: strain history for eps_xx_z for each dof
* `epsilon_z_hist`: strain history for eps_xx_y for each dof
* `kappa_x_hist`: strain history for gam_xz_0 for each dof
* `kappa_y_hist`: strain history for gam_xz_y for each dof
* `kappa_z_hist`: strain history for gam_xy_0 for each dofOWENS.runDLC — MethodrunDLC(modelopt,designparams,path;runScript = OWENS.runOWENSWINDIO)
# Input
* `modelopt::OWENS.ModelingOptions`: see ?OWENS.ModelingOption
* `designparams::OWENS.Design_Data`: see ?OWENS.Design_Data
* `path`: desired path to run everything
* `runScript`: function handle to run script, defaults to OWENS.runOWENSWINDIO
# Output
* `nothing`:OWENS.simpleGenerator — MethodsimpleGenerator(generatorProps,genSpeed)Caclulates generator torque for simple induction generator
#Input
generatorPropsobject containing generator properties, see ?inputsgenSpeed::floatgenerator speed (Hz)
#Output
genTorque::floatgenerator torque
OWENS.sort_peaks — FunctionThis function sorts out points where the slope changes sign
OWENS.sum_cycles — MethodSums the cycle count given intervals of rangeintervals and meanintervals. The rangeintervals and meanintervals are given in fraction of range size
OWENS.timeIntegrateSubSystem — MethodtimeIntegrateSubSystem(M,K,C,F,delta_t,u,udot,uddot)Internal, performs integration of a system using the Newmark-Beta method (constant-average acceleration sceheme).
#Input
M: system mass matrixK: system sttiffness matrixC: system damping matrixF: system force vectordelta_t: time stepu: displacement at beginning of time stepudot: velocity at beginning of time stepuddot: acceleration at beginning of time step
#Output
unp1: displacement at end of time stepudotnp1: velocity at end of time stepuddotnp1: acceleration at end of time step
OWENS.transMat — MethodtransMat(theta1, theta2, theta3)Internal, computes the 3x3 transformation matrix for given input rotations. The generated matrix is the closest orthonormal matrix to the Bernoulli-Euler transformation matrix from beam theory, which assumes small rotations. A full description of this matrix is found in the "FASTCoordinateSystems.doc" document by Jason Jonkman.
OWENS.trapezoidalRule — MethodInternal, simple trapezoidal rule integration
OWENS.updateRotorRotation — MethodupdateRotorRotation updates rotor rotation
updateRotorRotation(Irotor,Crotor,Krotor,shaftTorque,genTorque,azi_s,Omega_s,OmegaDot_s,delta_t)Internal, updates the rotor rotation given rotor properties and external torques
#Input
Irotor: rotor inertiaCrotor: arbitrary rotor dampingKrotor: arbitrary rotor stiffnessshaftTorque: torque from external forces on rotorgenTorque: torque from generatorazi_s: rotor azimuth (rad) at beginning of time stepOmega_s: rotor speed (Hz) at beginning of time stepOmegaDot_s: rotor acceleration (Hz/s) at beginning of time stepdelta_t: time step
#Output
azi_sp1: rotor azimuth (rad) at end of time stepOmega_sp1: rotor speed (Hz/s) at end of time stepOmegaDot_sp1: rotor acceleration (Hz/s) at end of time step
OWENS.userDefinedRotorSpeedProfile — MethodInternal, unused, userDefinedRotorSpeedProfile
OWENS.viz — Methodviz(;mesh=[],meshFile="none",resultsFile="none",selectedMode=10,sf=10)Plots the mode shapes of a mode from a modal analysis performed using the OWENS toolkit. Either send the mesh struct or the mesh filename but not both
#Input
mesh::OWENSFEA.Mesh: Mesh struct, See ?OWENSFEA.MeshmeshFile::String: optional string containing mesh file nameresultsFile::String: optional string containing results file nameselectedMode::Int: integer denoting selected mode to plotsf::Float: scale factor for mode shape displacements
#Output None
OWENS.writeOwensNDL — MethodwriteOwensNDL(fileRoot, nodes, cmkType, cmkValues)writes a nodal input file
#Intput
fileRoot::string: string path to desired location with name but no extensionnodes::int: node numbers for C/M/KcmkType::string: "C" "M" or "K"cmkValues::float: C/M/K value
#Output
none: