Coder Social home page Coder Social logo

drivese's Introduction

WISDEM®

Actions Status Coverage Status Documentation Status

The Wind-Plant Integrated System Design and Engineering Model (WISDEM®) is a set of models for assessing overall wind plant cost of energy (COE). The models use wind turbine and plant cost and energy production as well as financial models to estimate COE and other wind plant system attributes. WISDEM® is accessed through Python, is built using OpenMDAO, and uses several sub-models that are also implemented within OpenMDAO. These sub-models can be used independently but they are required to use the overall WISDEM® turbine design capability. Please install all of the pre-requisites prior to installing WISDEM® by following the directions below. For additional information about the NWTC effort in systems engineering that supports WISDEM® development, please visit the official NREL systems engineering for wind energy website.

Author: NREL WISDEM Team

Documentation

See local documentation in the docs-directory or access the online version at https://wisdem.readthedocs.io/en/master/

Packages

WISDEM® is a family of modules. The core modules are:

  • CommonSE includes several libraries shared among modules
  • FloatingSE works with the floating platforms
  • DrivetrainSE sizes the drivetrain and generator systems (formerly DriveSE and GeneratorSE)
  • TowerSE is a tool for tower (and monopile) design
  • RotorSE is a tool for rotor design
  • NREL CSM is the regression-based turbine mass, cost, and performance model
  • ORBIT is the process-based balance of systems cost model for offshore plants
  • LandBOSSE is the process-based balance of systems cost model for land-based plants
  • Plant_FinanceSE runs the financial analysis of a wind plant

The core modules draw upon some utility packages, which are typically compiled code with python wrappers:

  • Airfoil Preppy is a tool to handle airfoil polar data
  • CCBlade is the BEM module of WISDEM
  • pyFrame3DD brings libraries to handle various coordinate transformations
  • MoorPy is a quasi-static mooring line model
  • pyOptSparse provides some additional optimization algorithms to OpenMDAO

Installation

Installation with Anaconda is the recommended approach because of the ability to create self-contained environments suitable for testing and analysis. WISDEM® requires Anaconda 64-bit. However, the conda command has begun to show its age and we now recommend the one-for-one replacement with the Miniforge3 distribution, which is much more lightweight and more easily solves for the WISDEM package dependencies.

Installation as a "library"

To use WISDEM's modules as a library for incorporation into other scripts or tools, WISDEM is available via conda install wisdem or pip install wisdem, assuming that you have already setup your python environment. Note that on Windows platforms, we suggest using conda exclusively.

Installation for direct use

These instructions are for interaction with WISDEM directly, the use of its examples, and the direct inspection of its source code.

The installation instructions below use the environment name, "wisdem-env," but any name is acceptable. For those working behind company firewalls, you may have to change the conda authentication with conda config --set ssl_verify no. Proxy servers can also be set with conda config --set proxy_servers.http http://id:pw@address:port and conda config --set proxy_servers.https https://id:pw@address:port. To setup an environment based on a different Github branch of WISDEM, simply substitute the branch name for master in the setup line.

  1. Setup and activate the Anaconda environment from a prompt (Anaconda3 Power Shell on Windows or Terminal.app on Mac)

    conda config --add channels conda-forge
    conda env create --name wisdem-env -f https://raw.githubusercontent.com/WISDEM/WISDEM/master/environment.yml
    conda activate wisdem-env
    
  2. In order to directly use the examples in the repository and peek at the code when necessary, we recommend all users install WISDEM in developer / editable mode using the instructions here. If you really just want to use WISDEM as a library and lean on the documentation, you can always do conda install wisdem and be done. Note the differences between Windows and Mac/Linux build systems. For Linux, we recommend using the native compilers (for example, gcc and gfortran in the default GNU suite).

    conda install -y petsc4py mpi4py                 # (Mac / Linux only)
    conda install -y gfortran                        # (Mac only without Homebrew or Macports compilers)
    conda install -y m2w64-toolchain libpython       # (Windows only)
    git clone https://github.com/WISDEM/WISDEM.git
    cd WISDEM
    pip install --no-deps -e . -v
    

NOTE: To use WISDEM again after installation is complete, you will always need to activate the conda environment first with conda activate wisdem-env

Run Unit Tests

Each package has its own set of unit tests. These can be run in batch with the test_all.py script located in the top level test-directory.

Feedback

For software issues please use https://github.com/WISDEM/WISDEM/issues. For functionality and theory related questions and comments please use the NWTC forum for Systems Engineering Software Questions.

drivese's People

Contributors

dykesk avatar evan-gaertner avatar gbarter avatar gnscott avatar kilojoules avatar ryannking avatar taylor-parsons avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

drivese's Issues

Updates for rotor default inputs to drivese

need to update drivese rotor inputs to handle defaults when certain forces/moments are not supplied and also to account for rotor mass so their isn't duplication of rotor mass use in drivese (more clear descriptions on inputs for users and more clarity in docs)

Remove fatigue analysis content

Remove fatigue analysis content from drivese; its partially commented out; we should remove it fully and keep a backup of the code on the y-drive

drivese update breaks assembly connections

The latest DriveSE update breaks assembly connections from exterior modules (i.e. RotorSE) by declaring promoted parameters as independent variables. Example, lines 777-791 in drivese_omdao.py:

    > # Add some more IndepVarComps to get rid of 'no associated unknowns' message
    > self.add('rotor_diameter',         IndepVarComp('rotor_diameter',         0.0), promotes=['*'])
    > self.add('rotor_rpm',              IndepVarComp('rotor_rpm',              0.0), promotes=['*'])
    > self.add('rotor_torque',           IndepVarComp('rotor_torque',           0.0), promotes=['*'])
    > self.add('rotor_thrust',           IndepVarComp('rotor_thrust',           0.0), promotes=['*'])
    > self.add('rotor_bending_moment_x', IndepVarComp('rotor_bending_moment_x', 0.0), promotes=['*'])
    > self.add('rotor_bending_moment_y', IndepVarComp('rotor_bending_moment_y', 0.0), promotes=['*'])
    > self.add('rotor_bending_moment_z', IndepVarComp('rotor_bending_moment_z', 0.0), promotes=['*'])
    > self.add('rotor_force_y',          IndepVarComp('rotor_force_y',          0.0), promotes=['*'])
    > self.add('rotor_force_z',          IndepVarComp('rotor_force_z',          0.0), promotes=['*'])
    > self.add('blade_mass',             IndepVarComp('blade_mass',             0.0), promotes=['*'])
    > self.add('blade_root_diameter',    IndepVarComp('blade_root_diameter',    0.0), promotes=['*'])
    > self.add('blade_length',           IndepVarComp('blade_length',           0.0), promotes=['*'])
    > self.add('drivetrain_efficiency',  IndepVarComp('drivetrain_efficiency',  0.0), promotes=['*'])
    > self.add('machine_rating',         IndepVarComp('machine_rating',         0.0), promotes=['*'])

Returns errors:

Target 'drive.above_yaw_massAdder.machine_rating' is connected to multiple unknowns: ['drive.machine_rating.machine_rating', 'rotor.machine_rating.machine_rating']
Target 'drive.bedplate.machine_rating' is connected to multiple unknowns: ['drive.machine_rating.machine_rating', 'rotor.machine_rating.machine_rating']
Target 'drive.bedplate.rotor_bending_moment_y' is connected to multiple unknowns: ['drive.rotor_bending_moment_y.rotor_bending_moment_y', 'rotor.output_struc.Mxyz_total']
Target 'drive.bedplate.rotor_diameter' is connected to multiple unknowns: ['drive.rotor_diameter.rotor_diameter', 'rotor.outputs_aero.diameter']
Target 'drive.bedplate.rotor_force_z' is connected to multiple unknowns: ['drive.rotor_force_z.rotor_force_z', 'rotor.output_struc.Fxyz_total']
Target 'drive.gearbox.rotor_diameter' is connected to multiple unknowns: ['drive.rotor_diameter.rotor_diameter', 'rotor.outputs_aero.diameter']
Target 'drive.gearbox.rotor_rpm' is connected to multiple unknowns: ['drive.rotor_rpm.rotor_rpm', 'rotor.outputs_aero.rated_Omega']
Target 'drive.gearbox.rotor_torque' is connected to multiple unknowns: ['drive.rotor_torque.rotor_torque', 'rotor.outputs_aero.rated_Q']
Target 'drive.generator.machine_rating' is connected to multiple unknowns: ['drive.machine_rating.machine_rating', 'rotor.machine_rating.machine_rating']
Target 'drive.generator.rotor_diameter' is connected to multiple unknowns: ['drive.rotor_diameter.rotor_diameter', 'rotor.outputs_aero.diameter']
Target 'drive.generator.rotor_rpm' is connected to multiple unknowns: ['drive.rotor_rpm.rotor_rpm', 'rotor.outputs_aero.rated_Omega']
Target 'drive.highSpeedSide.rotor_diameter' is connected to multiple unknowns: ['drive.rotor_diameter.rotor_diameter', 'rotor.outputs_aero.diameter']
Target 'drive.highSpeedSide.rotor_torque' is connected to multiple unknowns: ['drive.rotor_torque.rotor_torque', 'rotor.outputs_aero.rated_Q']
Target 'drive.hub.adder.blade_mass' is connected to multiple unknowns: ['drive.blade_mass.blade_mass', 'rotor.output_struc.mass_one_blade']
Target 'drive.hub.hub.blade_mass' is connected to multiple unknowns: ['drive.blade_mass.blade_mass', 'rotor.output_struc.mass_one_blade']
Target 'drive.hub.hub.blade_root_diameter' is connected to multiple unknowns: ['drive.blade_root_diameter.blade_root_diameter', 'rotor.rotorGeometry.spline.chord']
Target 'drive.hub.hub.machine_rating' is connected to multiple unknowns: ['drive.machine_rating.machine_rating', 'rotor.machine_rating.machine_rating']
Target 'drive.hub.hub.rotor_diameter' is connected to multiple unknowns: ['drive.rotor_diameter.rotor_diameter', 'rotor.outputs_aero.diameter']
Target 'drive.hub.hub.rotor_rpm' is connected to multiple unknowns: ['drive.rotor_rpm.rotor_rpm', 'rotor.outputs_aero.rated_Omega']
Target 'drive.hub.pitchSystem.blade_mass' is connected to multiple unknowns: ['drive.blade_mass.blade_mass', 'rotor.output_struc.mass_one_blade']
Target 'drive.hub.pitchSystem.rotor_bending_moment_y' is connected to multiple unknowns: ['drive.rotor_bending_moment_y.rotor_bending_moment_y', 'rotor.output_struc.Mxyz_total']
Target 'drive.hub.spinner.blade_root_diameter' is connected to multiple unknowns: ['drive.blade_root_diameter.blade_root_diameter', 'rotor.rotorGeometry.spline.chord']
Target 'drive.hubCM.rotor_diameter' is connected to multiple unknowns: ['drive.rotor_diameter.rotor_diameter', 'rotor.outputs_aero.diameter']
Target 'drive.lowSpeedShaft.drivetrain_efficiency' is connected to multiple unknowns: ['drive.drivetrain_efficiency.drivetrain_efficiency', 'rotor.drivetrainEff.drivetrainEff']
Target 'drive.lowSpeedShaft.machine_rating' is connected to multiple unknowns: ['drive.machine_rating.machine_rating', 'rotor.machine_rating.machine_rating']
Target 'drive.lowSpeedShaft.rotor_bending_moment_x' is connected to multiple unknowns: ['drive.rotor_bending_moment_x.rotor_bending_moment_x', 'rotor.output_struc.Mxyz_total']
Target 'drive.lowSpeedShaft.rotor_bending_moment_y' is connected to multiple unknowns: ['drive.rotor_bending_moment_y.rotor_bending_moment_y', 'rotor.output_struc.Mxyz_total']
Target 'drive.lowSpeedShaft.rotor_bending_moment_z' is connected to multiple unknowns: ['drive.rotor_bending_moment_z.rotor_bending_moment_z', 'rotor.output_struc.Mxyz_total']
Target 'drive.lowSpeedShaft.rotor_diameter' is connected to multiple unknowns: ['drive.rotor_diameter.rotor_diameter', 'rotor.outputs_aero.diameter']
Target 'drive.lowSpeedShaft.rotor_force_y' is connected to multiple unknowns: ['drive.rotor_force_y.rotor_force_y', 'rotor.output_struc.Fxyz_total']
Target 'drive.lowSpeedShaft.rotor_force_z' is connected to multiple unknowns: ['drive.rotor_force_z.rotor_force_z', 'rotor.output_struc.Fxyz_total']
Target 'drive.lowSpeedShaft.rotor_thrust' is connected to multiple unknowns: ['drive.rotor_thrust.rotor_thrust', 'rotor.output_struc.Fxyz_total']
Target 'drive.mainBearing.rotor_diameter' is connected to multiple unknowns: ['drive.rotor_diameter.rotor_diameter', 'rotor.outputs_aero.diameter']
Target 'drive.rna.machine_rating' is connected to multiple unknowns: ['drive.machine_rating.machine_rating', 'rotor.machine_rating.machine_rating']
Target 'drive.secondBearing.rotor_diameter' is connected to multiple unknowns: ['drive.rotor_diameter.rotor_diameter', 'rotor.outputs_aero.diameter']
Target 'drive.transformer.machine_rating' is connected to multiple unknowns: ['drive.machine_rating.machine_rating', 'rotor.machine_rating.machine_rating']
Target 'drive.transformer.rotor_diameter' is connected to multiple unknowns: ['drive.rotor_diameter.rotor_diameter', 'rotor.outputs_aero.diameter']
Target 'drive.yawSystem.rotor_diameter' is connected to multiple unknowns: ['drive.rotor_diameter.rotor_diameter', 'rotor.outputs_aero.diameter']
Target 'drive.yawSystem.rotor_thrust' is connected to multiple unknowns: ['drive.rotor_thrust.rotor_thrust', 'rotor.output_struc.Fxyz_total']

openwind integration with wisdem

full integration of ow with wisdem lcoe se assembly still needed and needs to be updated for new openwind assembly wrappers for openwind version updates

Having problems running test file

Greetings,

I have followed install instructions in "https://github.com/WISDEM/WISDEM" and I'm able to run some other module examples like CCBlade but is not the case with DRiveSe.

When I run "test_DriveSE.py" i get following error: No module named "drivese.drive". Maybe is pointing to older modules?

Thanks for the help

Unit Tests

Unit tests are not able to recognize Akima during the call to import Akima from akima. Although the first unit test succeeds. During the WISDEM install, it creates/recognizes an akima path

capture

capture

reassignment of vars in components

In LSS and elsewhere, need to use local variable names since component variables are connected to other components (i.e. self.rotor_bending_moment_y can not be reassigned in component since it is already connected to parent from rotor)

resolving new version of openwind

need to update academic openwind assembly to address new integrated academic/enterprise version and explore using existing enterprise openwind assembly for a simplified case using both community and enterprise versions

Update drivese to include assemblies with generators

Create 2 files in drivese drive_SCIG, drive_DFIG, to use generator models directly in assembly (without sub-optimization of generator); this involves exposing all generator inputs (with explicit connections) to the perimeter of the drivese assembly

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.