diff --git a/.github/workflows/build-mingw.yml b/.github/workflows/build-mingw.yml index 40d0519b..a22d658d 100644 --- a/.github/workflows/build-mingw.yml +++ b/.github/workflows/build-mingw.yml @@ -21,7 +21,7 @@ jobs: os: [windows-latest] steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Create folders run: | diff --git a/.github/workflows/build-test.yml b/.github/workflows/build-test.yml index 8fbafbf4..69c199df 100644 --- a/.github/workflows/build-test.yml +++ b/.github/workflows/build-test.yml @@ -24,7 +24,7 @@ jobs: release_id: ${{ steps.create_release.outputs.id }} upload_url: ${{ steps.create_release.outputs.upload_url }} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 if: github.event_name == 'push' - name: moordyn_tag_name @@ -71,10 +71,10 @@ jobs: needs: [create_release] strategy: matrix: - os: [ubuntu-22.04, windows-latest, macOS-latest] + os: [ubuntu-latest, windows-latest, macos-latest] steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: moordyn_version id: moordyn_version @@ -92,6 +92,22 @@ jobs: compiler: gcc if: runner.os == 'Linux' + - name: Setup NSIS (Windows) + run: | + iwr -useb get.scoop.sh -outfile 'install.ps1' + .\install.ps1 -RunAsAdmin + scoop update + scoop bucket add extras + scoop install nsis + Add-Content $env:GITHUB_PATH "C:\Users\runneradmin\scoop\shims\" + if: runner.os == 'Windows' + + - name: Install Rust-bindgen (Linux) + run: | + sudo apt-get -qq update + sudo apt-get -qq -y install bindgen + if: runner.os == 'Linux' + - name: Install VTK (Linux) run: | sudo apt-get -qq update @@ -104,7 +120,7 @@ jobs: if: runner.os == 'MacOS' - name: download pre-built VTK static library - uses: suisei-cn/actions-download-file@v1.6.0 + uses: suisei-cn/actions-download-file@v1.6.1 with: url: https://github.com/sanguinariojoe/vtk-builds/releases/download/VTK-${{env.VTK_VERSION_MAJOR}}.${{env.VTK_VERSION_MINOR}}.${{env.VTK_VERSION_PATCH}}-static/vtk-${{runner.os}}-x86_64.tar.gz target: ${{github.workspace}}/ diff --git a/.github/workflows/check-version.yml b/.github/workflows/check-version.yml index 2ee719dd..d8e4a110 100644 --- a/.github/workflows/check-version.yml +++ b/.github/workflows/check-version.yml @@ -9,7 +9,7 @@ jobs: name: Check that the version is valid runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: moordyn_version id: moordyn_version @@ -21,7 +21,7 @@ jobs: echo "moordyn_version=$major.$minor.$patch" >> $GITHUB_OUTPUT - name: Tag check - uses: mukunku/tag-exists-action@v1.6.0 + uses: mukunku/tag-exists-action@v1.7.0 id: checkTag with: tag: "v${{steps.moordyn_version.outputs.moordyn_version}}" diff --git a/.github/workflows/matlab.yml b/.github/workflows/matlab.yml index e652cea1..4052a715 100644 --- a/.github/workflows/matlab.yml +++ b/.github/workflows/matlab.yml @@ -25,7 +25,7 @@ jobs: steps: - name: Check out repository - uses: actions/checkout@v2 + uses: actions/checkout@v6 - name: Create install folder run: | diff --git a/.github/workflows/mdf_verification.yml b/.github/workflows/mdf_verification.yml index a3c38126..105f3bf9 100644 --- a/.github/workflows/mdf_verification.yml +++ b/.github/workflows/mdf_verification.yml @@ -18,13 +18,19 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - os: [ubuntu-22.04] + os: [ubuntu-latest] steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 + + - name: Install deps + run: | + sudo apt-get -qq update + sudo apt-get -qq -y install libblas-dev liblapack-dev + if: runner.os == 'Linux' - name: Setup Python - uses: actions/setup-python@v5 + uses: actions/setup-python@v6 id: setup-python - name: Install Python dependencies diff --git a/.github/workflows/memcheck.yml b/.github/workflows/memcheck.yml index 0119fa7f..f194fdcb 100644 --- a/.github/workflows/memcheck.yml +++ b/.github/workflows/memcheck.yml @@ -16,10 +16,10 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - os: [ubuntu-22.04] + os: [ubuntu-latest] steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Install valgrind run: | diff --git a/.github/workflows/python-wheels-emulated.yml b/.github/workflows/python-wheels-emulated.yml index 322367c1..bb6146d9 100644 --- a/.github/workflows/python-wheels-emulated.yml +++ b/.github/workflows/python-wheels-emulated.yml @@ -7,7 +7,7 @@ on: description: 'Host OS' required: false type: string - default: '["ubuntu-22.04"]' + default: '["ubuntu-latest"]' arch: description: 'Architecture target' required: true @@ -75,10 +75,10 @@ jobs: rm -rf docs extern source tests steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 # Used to host cibuildwheel - - uses: actions/setup-python@v5 + - uses: actions/setup-python@v6 with: python-version: '3.x' @@ -92,28 +92,28 @@ jobs: shell: bash - name: download pre-built VTK static library (ManyLinux) - uses: suisei-cn/actions-download-file@v1.6.0 + uses: suisei-cn/actions-download-file@v1.6.1 with: url: https://github.com/sanguinariojoe/vtk-builds/releases/download/VTK-${{inputs.vtk_major}}.${{inputs.vtk_minor}}.${{inputs.vtk_patch}}-static/vtk-manylinux2014_${{inputs.arch}}.tar.gz target: ${{github.workspace}}/ if: runner.os == 'Linux' - name: download pre-built VTK static library (MUSLLinux) - uses: suisei-cn/actions-download-file@v1.6.0 + uses: suisei-cn/actions-download-file@v1.6.1 with: url: https://github.com/sanguinariojoe/vtk-builds/releases/download/VTK-${{inputs.vtk_major}}.${{inputs.vtk_minor}}.${{inputs.vtk_patch}}-static/vtk-musllinux_1_2_${{inputs.arch}}.tar.gz target: ${{github.workspace}}/ if: runner.os == 'Linux' - name: download pre-built VTK static library (Windows) - uses: suisei-cn/actions-download-file@v1.6.0 + uses: suisei-cn/actions-download-file@v1.6.1 with: url: https://github.com/sanguinariojoe/vtk-builds/releases/download/VTK-${{inputs.vtk_major}}.${{inputs.vtk_minor}}.${{inputs.vtk_patch}}-static/vtk-Windows-x86_64.tar.gz target: ${{github.workspace}}/ if: runner.os == 'Windows' - name: download pre-built VTK static library (MacOS) - uses: suisei-cn/actions-download-file@v1.6.0 + uses: suisei-cn/actions-download-file@v1.6.1 with: url: https://github.com/sanguinariojoe/vtk-builds/releases/download/VTK-${{inputs.vtk_major}}.${{inputs.vtk_minor}}.${{inputs.vtk_patch}}-static/vtk-macOS-${{inputs.arch}}.tar.gz target: ${{github.workspace}}/ @@ -142,11 +142,11 @@ jobs: if: runner.os == 'Linux' - name: Build wheels - uses: pypa/cibuildwheel@v2.23.1 + uses: pypa/cibuildwheel@v3.3.1 with: output-dir: dist - - uses: actions/upload-artifact@v4 + - uses: actions/upload-artifact@v6 id: build_wheels with: name: python-wheels-${{runner.os}}_${{inputs.arch}} diff --git a/.github/workflows/python-wheels-test.yml b/.github/workflows/python-wheels-test.yml index 0c959706..bc00ff82 100644 --- a/.github/workflows/python-wheels-test.yml +++ b/.github/workflows/python-wheels-test.yml @@ -7,7 +7,7 @@ on: description: 'Host OS' required: false type: string - default: '["ubuntu-22.04"]' + default: '["ubuntu-latest"]' arch: description: 'Architecture target' required: true @@ -24,14 +24,14 @@ jobs: os: ${{ fromJSON(inputs.os) }} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - - uses: actions/setup-python@v5 + - uses: actions/setup-python@v6 with: python-version: '3.12' - name: Download the wheels - uses: actions/download-artifact@v4 + uses: actions/download-artifact@v7 with: path: dist/ pattern: python-wheels-${{runner.os}}_${{inputs.arch}}* diff --git a/.github/workflows/python-wheels.yml b/.github/workflows/python-wheels.yml index 63701445..f2da8dc9 100644 --- a/.github/workflows/python-wheels.yml +++ b/.github/workflows/python-wheels.yml @@ -15,10 +15,10 @@ jobs: os: [ubuntu-22.04] steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 # Used to host cibuildwheel - - uses: actions/setup-python@v5 + - uses: actions/setup-python@v6 with: python-version: '3.x' @@ -36,7 +36,7 @@ jobs: python -m pip install -U pip setuptools python setup.py sdist - - uses: actions/upload-artifact@v4 + - uses: actions/upload-artifact@v6 id: build_wheels with: name: python-wheels-sdist @@ -46,7 +46,7 @@ jobs: name: Build Linux_x86_64 uses: FloatingArrayDesign/MoorDyn/.github/workflows/python-wheels-emulated.yml@master with: - os: '["ubuntu-22.04"]' + os: '["ubuntu-latest"]' arch: "x86_64" secrets: inherit @@ -141,10 +141,10 @@ jobs: os: [ubuntu-22.04] steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Download artifacts - uses: actions/download-artifact@v4 + uses: actions/download-artifact@v7 with: path: dist/ pattern: python-wheels-* diff --git a/.github/workflows/python-wrapper.yml b/.github/workflows/python-wrapper.yml index 9b3191dc..cfefd988 100644 --- a/.github/workflows/python-wrapper.yml +++ b/.github/workflows/python-wrapper.yml @@ -21,13 +21,13 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - os: [ubuntu-22.04] + os: [ubuntu-latest] steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Setup Python - uses: actions/setup-python@v5 + uses: actions/setup-python@v6 id: setup-python - name: Install Python dependencies diff --git a/CHANGELOG.md b/CHANGELOG.md index 3d522dad..fb5e9c88 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,21 @@ +# [2.5.0](https://github.com/core-marine-dev/MoorDyn/compare/v2.4.0...v2.5.0) (2025-11-25) + + +### Bug Fixes + +* **ci:** Disable Pypy 3.11 (because of MacOS) ([d87820d](https://github.com/core-marine-dev/MoorDyn/commit/d87820d7d6f821cbbb96a705118ee8d36933671c)) +* **ci:** Remove MacOS-arm64 and downgrade Windows to 2022 ([7186f95](https://github.com/core-marine-dev/MoorDyn/commit/7186f95f014e1c9a1b9d552f15041d2d1ea30cce)) +* **core:** Explicit names for the elastic models ([85a3479](https://github.com/core-marine-dev/MoorDyn/commit/85a3479631f94c9f15373e9f0c032408e22a97b8)) +* **core:** Fix the minimum input version, so it does not enforce to be the last one ([8048636](https://github.com/core-marine-dev/MoorDyn/commit/8048636e3e7f970c63508ee3429ead5675e67a64)) + + +### Features + +* **ci:** Upgrade all (ubuntu, windows and macos) to their latest images ([34fa76d](https://github.com/core-marine-dev/MoorDyn/commit/34fa76df65a1dfa2ae98e3cf1f85beacaa01ee18)) +* **core:** Added a function to optionally disable the CMD windows on MoorDyn v1 ([66db3e8](https://github.com/core-marine-dev/MoorDyn/commit/66db3e8077abe58df881aa41216316b34e487f45)) + + + ## [2.4.0](https://github.com/FloatingArrayDesign/MoorDyn/compare/v2.3.8...v2.4.0) (2025-03-26) ### ⚠ BREAKING CHANGES diff --git a/CMakeLists.txt b/CMakeLists.txt index ad706390..56eb0f4f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,6 @@ cmake_minimum_required(VERSION 3.10) set(MOORDYN_MAJOR_VERSION 2) -set(MOORDYN_MINOR_VERSION 4) +set(MOORDYN_MINOR_VERSION 5) set(MOORDYN_PATCH_VERSION 0) set(MOORDYN_VERSION ${MOORDYN_MAJOR_VERSION}.${MOORDYN_MINOR_VERSION}) project(Moordyn VERSION ${MOORDYN_VERSION}) diff --git a/README.md b/README.md index e609410f..cc883c90 100644 --- a/README.md +++ b/README.md @@ -7,6 +7,7 @@ MoorDyn is a lumped-mass model for simulating the dynamics of mooring systems co license. Read the docs here: [moordyn.readthedocs.io](https://moordyn.readthedocs.io/en/latest/) +Example uses and instructions here: [Examples](https://github.com/FloatingArrayDesign/MoorDyn/tree/dev/example) It accounts for internal axial stiffness and damping forces, weight and buoyancy forces, hydrodynamic forces from Morison's equation (assuming calm water so far), and vertical spring-damper forces from contact with the seabed. MoorDyn's input file format is based on that of [MAP](https://www.nrel.gov/wind/nwtc/map-plus-plus.html). The model supports arbitrary line interconnections, clump weights and floats, different line properties, and six degree of freedom rods and bodies. @@ -21,7 +22,7 @@ MoorDyn-C. The dev branch contains new features currently in development. The v1 [National Renewable Energy Laboratory (NREL)](https://www.nrel.gov/): - - [Matt Hall](http://matt-hall.ca/moordyn.html) + - Matt Hall - Ryan Davies - Andy Platt - Stein Housner diff --git a/docs/compiling.rst b/docs/compiling.rst index 043cfe7e..bd5e7298 100644 --- a/docs/compiling.rst +++ b/docs/compiling.rst @@ -5,8 +5,8 @@ Compiling MoorDyn is available in two forms, C and F, with two different versions, v1 and v2. V1 is the original MoorDyn code, containing just point and line objects. V2 is the upgraded -version of MoorDyn v1. You can read more on the :ref:`home page `. It includes that -capability to simulate rigid bodies, non-linear tension, wave kinematics, bending +version of MoorDyn v1. You can read more on the :ref:`home page `. It includes the +capability to simulate rigid bodies, nonlinear tension, wave kinematics, bending stiffness, and more. Further details can be found in the :ref:`theory section ` and :ref:`structure section `. @@ -70,7 +70,7 @@ This can be done by executing the following command: Linux ^^^^^ -Some GNU/Linux distributions have already packages deployed for their package +Some GNU/Linux distributions already have packages deployed for their package managers, which would make your life way easier. Otherwise, a self-extracting package is also provided. @@ -96,7 +96,7 @@ However, it is strongly recommended to compile it yourself with To use the self-extracting package head your browser to the `releases page `_, select/expand the latest release, download the file named -"Moordyn-X.Y.Z-Linux.sh" (with X.Y.Z the specific version you chosen) and +"Moordyn-X.Y.Z-Linux.sh" (with X.Y.Z being the specific version you choose) and execute it. NOTE: The self-extracting file you have downloaded cannot be executed until you diff --git a/docs/drivers.rst b/docs/drivers.rst index 1e360119..c5115593 100644 --- a/docs/drivers.rst +++ b/docs/drivers.rst @@ -8,6 +8,10 @@ MoorDyn-F contains a driver script that has a :ref:`separate input file ` and :ref:`inputs ` sections for instructions on how to use the MoorDyn-F driver. +Additionally, MoorDyn-F has a c-bindings interface, which allows it (along with the rest +of OpenFAST) to be coupled with other languages. The MoorDyn-F C interface is set up using +the MoorDyn V1 approach (single 6 DOF coupling), thus it requires a single coupled body to +be used in the MoorDyn input file. Currently MoorDyn-C v2 can be used in Python, C/C++, Fortran, and Matlab. You can read more on how to install MoorDyn for each different language in @@ -80,6 +84,8 @@ MoorDyn-C can be compiled as a dynamically linked library with C bindings or a m sophisticated API functions and wrappers, making it accessible from a wide range of programming languages. +Further examples of MoorDyn-C drivers with input files can be found in the `examples folder `_. + Python ^^^^^^ .. _python_wrapper: @@ -127,11 +133,9 @@ control: for node_id in range(n_segs+1): print(" node {}:".format(node_id)) pos = moordyn.GetLineNodePos(line, node_id) - printf(" pos = {}".format(pos)) + print(" pos = {}".format(pos)) ten = moordyn.GetLineNodeTen(line, node_id) - printf(" ten = {}".format(ten)) - } - } + print(" ten = {}".format(ten)) # Alright, time to finish! moordyn.Close(system) @@ -811,3 +815,15 @@ After developing a coupling with MoorDyn, the DualSPHysics team has forked it in a seperate version called MoorDyn+, specifically dedicated to the coupling with DualSPHysics. +OpenFOAM +^^^^^^^^ + +MoorDyn-C has been coupled with OpenFOAM through the `foamMooring `_ project. + +Bladed +^^^^^^ + +MoorDyn V1 has been coupled with DNV's Bladed software. See the following links for details: + +- `MoorDyn-Bladed Coupling Documentation `_ +- `MoorDyn-Bladed Coupling Theory `_ \ No newline at end of file diff --git a/docs/index.rst b/docs/index.rst index 625623fc..b3270a3c 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -87,9 +87,13 @@ for the use of the MoorDyn-F driver can be found :ref:`here `. MoorDyn-C is designed for coupling with a wide number of codes. Some couplings already exist and can be found :ref:`here ` (e.g. WEC-Sim -and DualSPHysics). For Coupling with other codes or more manual driving of +and DualSPHysics). For coupling with other codes or more manual driving of MoorDyn from your own script, several APIs, wrappers, and example driver -scripts are available :ref:`here `. +scripts are available :ref:`here `. + +Additionally, an example directory contains instructions for common couplings +and basic input file set ups. A recording of the presentation that walks through +the directory is also available `here `_. Table of Contents: ------------------ diff --git a/docs/inputs.rst b/docs/inputs.rst index e852ca7f..4ac84b86 100644 --- a/docs/inputs.rst +++ b/docs/inputs.rst @@ -247,10 +247,10 @@ two fixed points located far from where your system is located. Most of the sections are set up to contain a table of input information. These tables begin with two preset lines that contain the column names and the corresponding units. These lines are followed by any number of lines containing -the entries in that section's table of inputs. # is the general comment chacater. If you are adding notes +the entries in that section's table of inputs. # is the general comment character. If you are adding notes to self after any of the lines, # will prevent MoorDyn from reading them. -Examples of input files for MoorDyn-C can be found in the `test directory `_ (note that these do not include outputs becasue they are for tests). +Examples of input files for MoorDyn-C can be found in the `test directory `_ (note that these do not include outputs because they are for tests). Examples for MoorDyn-F can be found in the `OpenFAST tests `_. @@ -301,9 +301,9 @@ The columns in order are as follows: for end nodes (and thus end half-segments), so if simulating VIV users should ensure to include a higher number of segments. Also note that VIV has only been tested with explicit time schemes (specifically rk2 and rk4). There may be unexpected behavior if used with an implicit time scheme. - - dF - OPTIONAL - the cF +- range of non-dimensional frequnecies for the CF VIV synchronization model. If it is not + - dF - OPTIONAL - the cF +- range of non-dimensional frequencies for the CF VIV synchronization model. If it is not provided and VIV is enabled (Cl > 0) then it is default to 0.08 to align with the the theory found :ref:`here ` - - cF - OPTIONAL - the center of the range of non-dimensional frequnecies for the CF VIV synchronization model. If it is not + - cF - OPTIONAL - the center of the range of non-dimensional frequencies for the CF VIV synchronization model. If it is not provided and VIV is enabled (Cl > 0) then it is default to 0.18 to align with the the theory found :ref:`here ` Note: Non-linear values for the stiffness (EA) are an option in MoorDyn. For this, a file name can be provided instead of a number. This file @@ -320,10 +320,10 @@ tabulated file with 3 header lines and then a strain column and a tension column ... ... Note: MoorDyn has the ability to model the viscoelastic properties of synthetic lines in two ways. The first method, from work linked in the -:ref:`theory section `, allows a user to specify a bar-seperated constant dynamic and static stiffness. The second method allows the user +:ref:`theory section `, allows a user to specify a bar-separated constant dynamic and static stiffness. The second method allows the user to provide a constant static stiffness and two terms to determine the dynamic stiffness as a linear function of mean load. The equation is: `EA_d = EA_Dc + EA_D_Lm * mean_load` where `EA_D_Lm` is the slope of the load-stiffness curve. Both of these methods allow users to provide static -and dynamic damping coefficients as values seperated by |. While the static damping can be described as a fraction of cricial, the dyanamic damping +and dynamic damping coefficients as values separated by |. While the static damping can be described as a fraction of critical, the dynamic damping needs to be input as a value. Example inputs are below: .. code-block:: none @@ -429,7 +429,15 @@ outputs are wanted. Eight output properties are currently possible: - c – internal damping force at each segment - s – strain of each segment - d – rate of strain of each segment - + - f – net node force + - W – weight at each node + - B – buoyancy force at each node + - P – dynamic pressure at each node + - X – transverse drag force at each node + - Y – tangential drag force at each node + - A – transverse fluid inertia force at each node + - a – tangential fluid inertia force at each node + - b – bottom contact force For example, outputting node positions and segment tensions could be achieved by writing “pt” for this last column. These outputs will go to a dedicated output file for each rod. For sending values to the global output file, use the Outputs section instead. @@ -637,7 +645,7 @@ The list of possible options is: - writeLog (0 C, -1 F): If >0 a log file is written recording information. The bigger the number the more verbose. Please, be mindful that big values would critically reduce the performance! - - dtM (3.402823e+38) – desired mooring model maximum time step (s). In + - dtM (3.402823e+38 C, coupling timestep size F) – desired mooring model maximum time step (s). In MoorDyn-F if this is left blank it defaults to the :ref:`driver file ` dtC value or the OpenFAST time step. - CFL (0.5) – Desired mooring model maximum Courant-Friedich-Lewy factor. CFL is the ratio @@ -683,7 +691,7 @@ The list of possible options is: The new stationary solver in MoorDyn-C is more stable and more precise than the dynamic solver, but it can take longer to reach equilibrium. - disableOutput (0): Disables some console and file outputs to improve runtime. - - disableOutTime (0): Disables the printing of the current timestep to the console, useful for the MATLAB wrapper + - disableOutTime (0): Disables the printing of the current timestep to the console, useful for running with MATLAB A note about time steps in MoorDyn-C: The internal time step is first taken from the dtM option. If no CFL factor is provided, then the user provided time step is used to calculate CFL and MoorDyn-C @@ -719,12 +727,12 @@ The following MoorDyn-C options are not supported by MoorDyn-F: - StatDynFricScale: Same as MC in MoorDyn-F. - ICgenDynamic: MoorDyn-F does not have a stationary solver for initial conditions - disableOutput: MoorDyn-F output verbosity is controlled by OpenFAST - - disableOutTime: MoorDyn-F output verbosity is controlled by OpenFAST The following options from MoorDyn-F are not supported by MoorDyn-C: - - WaterKin (Null): Path to the water kinematics file. Allows the inputs of wave and current - coefficients formatted as described in the :ref:`water kinematics file `. + - WaterKin (Null): Path to the water kinematics file or the SEASTATE Keyword. The formatting of the + water kinematics file can be found :ref:`here `. Details on the different MoorDyn-F + water kinematics options can be found in the :ref:`MoorDyn-F water kinematics section `. - MU_KT (0.0): Transverse line coefficient of friction. - MU_KA (0.0): Axial line coefficient of friction. - MC (1.0): Same as StatDynFricScale in MoorDyn-C. @@ -814,7 +822,7 @@ Footnotes: - There are a couple additional outputs left over from OpenFAST conventions that don’t follow the same format: FairTen and AnchTen. FairTen[n] is the same as Line[n]TenB. For example, the fairlead tension of line 1 would be FAIRTEN1 or LINE1TENB. -- The output list is not case sensistive, however all MoorDyn-F outputs will be printed to the output +- The output list is not case sensitive, however all MoorDyn-F outputs will be printed to the output file in all caps. When searching OpenFAST output channels, users will need to search for MoorDyn channels in all caps. Example: the channel fairten1 would appear in the output file as FAIRTEN1. @@ -878,11 +886,11 @@ follows the order of the state vector: Body degrees of freedom, rod degrees of f degrees of freedom. For coupled pinned bodies and rods the full 6DOF need to be provided, however the rotational values will be ignored by by the MoorDyn-F driver (they can be set to zero). -When using the MoorDyn driver in OpenFAST mode, the inital positions represents the offsets to the +When using the MoorDyn driver in OpenFAST mode, the initial positions represents the offsets to the global frame. When using OpenFAST mode with the positions set to 0's, then MoorDyn objects will be simulated based on the positions defined in the MoorDyn input file. If a non-zero value is provided, -it will be incorporated into the inital positions of coupled objects. For example, if the following -inital positions are given: +it will be incorporated into the initial positions of coupled objects. For example, if the following +initial positions are given: .. code-block:: none @@ -965,37 +973,42 @@ Water Kinematics file (MoorDyn-F) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. _MDF_wtrkin: -The file provided to MoorDyn-F for water Kinematics should have the following format, which +This file is used if simulating water kinematics in MoorDyn-F with a user defined grid (Old Method and Hybrid Method). +More details on the different MoorDyn-F water kinematics methods can be found in the :ref:`MoorDyn-F water kinematics section `. + +The file provided to MoorDyn-F for water kinematics should have the following format, which specifies the inputted waves and current. MoorDyn-F can handle a maximum of 100 lines of current -data. Details on this format can be found in the :ref:`water kinematics section `. +data. .. code-block:: none MoorDyn Waves and Currents input file ...any notes here... - --------------------------- WAVES ------------------------------------- - 3 WaveKinMod - type of wave input {0 no waves; 3 set up grid of wave data based on time series} - "waveelev.dat" WaveKinFile - file containing wave elevation time series at 0,0,0 - 0.5 dtWave - time step to use in setting up wave kinematics grid (s) - 0 WaveDir - wave heading (deg) - 2 - X wave input type (0: not used; 1: list values in ascending order; 2: uniform specified by -xlim, xlim, num) - -24, 150, 100 - X wave grid point data - 2 - Y wave input type (0: not used; 1: list values in ascending order; 2: uniform specified by -xlim, xlim, num) - -100, 100, 5 - Y wave grid point data - 2 - Z wave input type (0: not used; 1: list values in ascending order; 2: uniform specified by -xlim, xlim, num) - -600, 0, 60 - Z wave grid point data - --------------------------- CURRENT ------------------------------------- - 1 CurrentMod - type of current input {0 no current; 1 steady current profile described below} - z-depth x-current y-current + --------------------------- WAVES ------------------------------------- + 2 WaveKinMod - type of wave input {0 no waves; 1 use the old method; 2 use the hybrid method} + "" WaveKinFile - file containing wave elevation time series at 0,0,0 # Ignored if WaveKinMod = 2 + 0 dtWave - time step to use in setting up wave kinematics grid (s) # Ignored if WaveKinMod = 2 + 0 WaveDir - wave heading (deg) # Ignored if WaveKinMod = 2 + 2 - X wave input type (0: not used; 1: list values in ascending order; 2: uniform specified by -xlim, xlim, num) + -800, 10, 101 - X wave grid point data + 2 - Y wave input type (0: not used; 1: list values in ascending order; 2: uniform specified by -xlim, xlim, num) + -5, 5, 3 - Y wave grid point data + 2 - Z wave input type (0: not used; 1: list values in ascending order; 2: uniform specified by -xlim, xlim, num) + -600, 0, 61 - Z wave grid point data + --------------------------- CURRENT ------------------------------------- + 2 CurrentMod - type of current input {0 no current; 1 steady current profile described below; 2 hybrid method} + 2 - Z wave input type (0: not used; 1: list values in ascending order; 2: uniform specified by -xlim, xlim, num) # Ignored if CurrentMod = 1 + -600, 0, 50 - Z wave grid point data # Ignored if CurrentMod = 1 + z-depth x-current y-current # Table ignored if CurrentMod = 2 (m) (m/s) (m/s) 0.0 0.9 0.0 150 0.5 0.0 1000 0.25 0.0 - 1500 0.2 0.0 - 5000 0.15 0.0 + 1500 0.2 0.0 + 5000 0.15 0.0 --------------------- need this line ------------------ -MoorDyn with FAST.Farm - Inputs +MoorDyn-F with FAST.Farm - Inputs ------------------------------- MoorDyn is available at an array level in FAST.Farm using the MoorDyn-F v2 input file format. diff --git a/docs/integration_moordyn.png b/docs/integration_moordyn.png index d21c3bdf..9cb55049 100644 Binary files a/docs/integration_moordyn.png and b/docs/integration_moordyn.png differ diff --git a/docs/references.rst b/docs/references.rst index 24cb6c47..a6e24059 100644 --- a/docs/references.rst +++ b/docs/references.rst @@ -97,15 +97,30 @@ Non-linear line stiffness: `Lozon, Ericka, Matthew Hall, Paul McEvoy, Seojin Kim, and Bradley Ling, “Design and Analysis of a Floating-Wind Shallow-Water Mooring System Featuring Polymer Springs.” American Society of Mechanical Engineers Digital Collection, 2022. `_ +Bladed-MoorDyn Coupling: + + `Alexandre, Armando, Francesc Fabregas Flavia, Jingyi Yu, Ali Bakhshandehrostami, and Steven Parkinson. "Coupling Bladed With External Finite-Element Mooring Libraries." + American Society of Mechanical Engineers Digital Collection, 2023. `_ + Viscoelastic approach for non-linear rope behavior: `Hall, Matthew, Brian Duong, and Ericka Lozon, “Streamlined Loads Analysis of Floating Wind Turbines With Fiber Rope Mooring Lines.” In ASME 2023 5th International Offshore Wind Technical Conference, V001T01A029. Exeter, UK: American Society of Mechanical Engineers, 2023. `_ Updated MoorDyn-OpenFOAM Coupling: + `Haifei Chen, Tanausú Almeida Medina, and Jose Luis Cercos-Pita, "CFD simulation of multiple moored floating structures using OpenFOAM: An open-access mooring restraints library." Ocean Engineering, vol. 303, Jul. 2024. `_ +Reef3D-MoorDyn Coupling: + + `Soydan, Ahmet, Widar Weizhi Wang, and Hans Bihs. "An Improved Direct Forcing Immersed Boundary Method With Integrated Mooring Algorithm for Floating Offshore Wind + Turbines." American Society of Mechanical Engineers Digital Collection, 2024. `_ + +Modeling of Bi-stable Nonlinear Energy Sinks in MoorDyn (most recent description of MoorDyn theory): + + `Anargyros Michaloliakos, Wei-Ying Wong, Ryan Davies, Malakonda Reddy Lekkala, Matthew Hall, Lei Zuo, Alexander F. Vakakis, "Stabilizing dynamic subsea power cables using + Bi-stable nonlinear energy sinks", Ocean Engineering, vol. 334, August 2025. `_ The Fortran version of MoorDyn is available as a module inside of OpenFAST: diff --git a/docs/structure.rst b/docs/structure.rst index c4c71d53..06535e3f 100644 --- a/docs/structure.rst +++ b/docs/structure.rst @@ -7,8 +7,8 @@ main object types: Lines, Points, Rods, and Bodies. MoorDyn v1 only contained Li Lines are the fundamental discretized lumped-mass modeling component. Points and Rods provide a means of connecting lines with additional 3- and 6-DOF properties (respectively), and Bodies provide a way to create more complex 6-DOF rigid-body assemblies. These objects have predefined -ways or interacting. Kinematics are passed from the top down in and are used to calculate the -forces which are passed up back to the outside program or to output channels. This hierarchy is +ways of interacting. Kinematics are passed from the top down and are used to calculate the +forces which are passed back up to the outside program or to output channels. This hierarchy is shown below: .. figure:: structure_moordyn.png diff --git a/docs/troubleshooting.rst b/docs/troubleshooting.rst index 33dc5160..e6ef0a5a 100644 --- a/docs/troubleshooting.rst +++ b/docs/troubleshooting.rst @@ -52,7 +52,7 @@ Note that the damping ratio is with respect to the critical damping of each segm a mooring line, not with respect to the line as a whole or the floating platform as a whole. It is just a way of letting MoorDyn calculate the damping coefficient automatically from the perspective of damping non-physical segment resonances. If the model is set up -right, this damping can have a negligible contribution to the overall damping provided by +correctly, this damping can have a negligible contribution to the overall damping provided by the moorings on the floating platform. However, if the damping contribution of the mooring lines on the floating platform is supposed to be significant, it is best to (1) set the BA value directly to ensure that the expected damping is provided and then (2) adjust the number @@ -69,6 +69,26 @@ However, in contrast to the damping, which can be selected line by line, the time step is a constant of the whole system, and thus should be selected considering the minimum natural period of all lines. +Catenary Solve Unsuccessful +^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +One of the most common issues encountered when using MoorDyn is the failure of the +catenary solver to converge. The catenary solver is the first step in solving the +initial conditions of the system. This approach tries to use the properties and geometry +of the mooring lines to solve for a catenary shape. + +If this routine fails, you will see a "Catenary solve unsuccessful" message in the +the console and the log file. This means that MoorDyn will initialize the lines +as linear between the two defined end locations. After this, the ICgen process begins, +which runs a simulation with no external forcing, allowing the lines to 'fall' into +place. If the lines initialize as linear, then the initialization process will just take +longer, requiring a larger `TmaxIC` value. Explanations about the different initial +condition generating methods can be found in the :ref:`initialization section `. + +The "Catenary Solve Unsuccessful" message does not impact the performance of MoorDyn or +the results it produces, provided the initialization process converges before the simulation +begins. + Python errors ^^^^^^^^^^^^^ diff --git a/docs/waterkinematics.rst b/docs/waterkinematics.rst index 74d0468d..7708652a 100644 --- a/docs/waterkinematics.rst +++ b/docs/waterkinematics.rst @@ -496,8 +496,30 @@ components, roughly meaning that all the water flows away from the origin. Water Kinematics (MoorDyn-F) ---------------------------- -The WaterKin flag in MoorDyn-F takes an input file formatted as described in the additional :ref:`input -files section `. This file contains both wave and current data. The input file -has a flag for a wave data file and MoorDyn-F processes the wave data the same way MoorDyn-C does -with WaveKin = 3. The current data is processed by MoorDyn-F as a steady 3D grid the same way -MoorDyn-C processes currents = 1. +.. _waterkinematics-F: + +MoorDyn-F has three options for simulating wave and current loads on the MoorDyn system: the Old Method, +the Hybrid Method, and the SeaState Method. Both the hybrid method and the SeaState method use a coupling +with the `OpenFAST SeaState module `_ +to calculate the wave kinematics. The Old Method is a legacy method that is not coupled to SeaState. The three +methods can be described as: + +- **Old Method**: MoorDyn takes wave elevation time series and current speeds with depths as inputs and generates its + own water kinematics using the equivalent of WaveGrid = 3 and Currents = 1 in MoorDyn-C. +- **Hybrid Method**: SeaState sets up wave elevation frequencies and current speeds and then MoorDyn interpolates + this information to user provided wave grid and current depth discretization. This allows users to set the + WaterKinematics for the whole OpenFAST or FAST.Farm system while still maintaining a coarser grid for the MoorDyn + water kinematics, enabling computational efficiency. This method is compatible with FAST.Farm. +- **SeaState Method**: SeaState does all the work, MoorDyn just accesses the SeaState grid data at any given + timestep and location. This requires the SeaState grid to encompass the whole MoorDyn system for the most + accurate results. If a point is queried outside the SeaState grid, it will receive the water kinematics of + the nearest grid point. This method is not compatible with FAST.Farm. + +The table below summarizes these three options. + +.. figure:: waterkinematics_MDF.png + :alt: MoorDyn-F water kinematics options + +The WaterKin flag in MoorDyn-F can be either `SEASTATE` or a file path. If the flag is set to `SEASTATE` then the SeaState +method is used. If the flag is set to a file path, then the Old Method or Hybrid Method is used. This file is formatted as +described in the additional :ref:`input files section `. This file contains both wave and current data. diff --git a/docs/waterkinematics_MDF.png b/docs/waterkinematics_MDF.png new file mode 100644 index 00000000..61b7c28c Binary files /dev/null and b/docs/waterkinematics_MDF.png differ diff --git a/example/MHK_RM1_Floating/Airfoils/NACA6_0240.dat b/example/MHK_RM1_Floating/Airfoils/NACA6_0240.dat new file mode 100644 index 00000000..94b36abc --- /dev/null +++ b/example/MHK_RM1_Floating/Airfoils/NACA6_0240.dat @@ -0,0 +1,560 @@ +! ------------ AirfoilInfo v1.01.x Input File ---------------------------------- +! NACA6_0240 airfoil, data based on values used for the design of the RM1 tidal current turbine. +! line +! line +! ------------------------------------------------------------------------------ +"default" InterpOrd ! Interpolation order to use for quasi-steady table lookup {1=linear; 3=cubic spline; "default"} [default=1] + 1.0 NonDimArea ! The non-dimensional area of the airfoil (area/chord^2) (set to 1.0 if unsure or unneeded) +@"NACA6_0240_coords.txt" NumCoords ! The number of coordinates in the airfoil shape file. Set to zero if coordinates not included. +"unused" BL_file ! The file name including the boundary layer characteristics of the profile. Ignored if the aeroacoustic module is not called. + 7 NumTabs ! Number of airfoil tables in this file. +! ------------------------------------------------------------------------------ +! data for table 1 +! ------------------------------------------------------------------------------ + 2.0 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +False InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ +! Table of aerodynamics coefficients + 72 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cpmin +! (deg) (-) (-) (-) + -180 0.0000 0.0100 -1 + -170 0.3120 0.0100 -1 + -160 0.6240 0.0706 -1 + -150 0.9360 0.2428 -1 + -140 0.7699 0.4549 -1 + -130 0.6312 0.6818 -1 + -120 0.4861 0.8973 -1 + -110 0.3275 1.0763 -1 + -100 0.1610 1.1983 -1 + -90 0.0000 1.2500 -1 + -80 -0.1610 1.1983 -1 + -70 -0.3275 1.0763 -1 + -60 -0.4861 0.8973 -1 + -50 -0.6312 0.6818 -1 + -40 -0.7699 0.4549 -1 + -30 -0.9360 0.2428 -1 + -20 -0.6782 0.1306 -1 + -10 -0.6006 0.0183 -2.3658 + -9 -0.5703 0.0150 -2.1354 + -8 -0.5401 0.0124 -1.9128 + -7 -0.4863 0.0111 -1.6564 + -6 -0.3911 0.0101 -1.4075 + -5 -0.2829 0.0093 -1.2098 + -4 -0.1699 0.0086 -1.0246 + -3 -0.0547 0.0076 -0.9055 + -2 0.0671 0.0074 -0.9047 + -1 0.1884 0.0073 -0.9888 + 0 0.3092 0.0074 -1.0777 + 1 0.4307 0.0074 -1.1694 + 2 0.5503 0.0076 -1.2608 + 3 0.6677 0.0078 -1.3557 + 4 0.7807 0.0082 -1.4512 + 5 0.8921 0.0086 -1.5561 + 6 0.9830 0.0097 -1.6648 + 7 1.0196 0.0114 -1.7468 + 8 1.0527 0.0137 -1.8733 + 9 1.0932 0.0166 -2.0257 + 10 1.1352 0.0200 -2.1849 + 11 1.1432 0.0259 -2.3027 + 12 1.1730 0.0313 -2.5537 + 13 1.1826 0.0392 -2.7674 + 14 1.2087 0.0464 -3.0323 + 15 1.2272 0.0550 -3.2908 + 16 1.2557 0.0634 -3.5959 + 17 1.2806 0.0725 -3.9100 + 18 1.3037 0.0825 -4.2419 + 19 1.3252 0.0930 -4.5743 + 20 1.3439 0.1043 -4.9173 + 21 1.3613 0.1159 -5.2685 + 22 1.3809 0.1271 -5.6456 + 23 1.3894 0.1401 -5.9876 + 24 1.3961 0.1532 -6.3248 + 25 1.3970 0.1669 -6.6429 + 26 1.3922 0.1814 -6.9151 + 28 1.3673 0.2112 -7.3108 + 29 1.3488 0.2278 -7.4112 + 30 1.3371 0.2428 -7.5348 + 40 1.0999 0.4549 -1 + 50 0.9017 0.6818 -1 + 60 0.6944 0.8973 -1 + 70 0.4678 1.0763 -1 + 80 0.2300 1.1983 -1 + 90 0.0000 1.2500 -1 + 100 -0.1610 1.1983 -1 + 110 -0.3275 1.0763 -1 + 120 -0.4861 0.8973 -1 + 130 -0.6312 0.6818 -1 + 140 -0.7699 0.4549 -1 + 150 -0.9360 0.2428 -1 + 160 -0.6240 0.0706 -1 + 170 -0.3120 0.0100 -1 + 180 0.0000 0.0100 -1 +! ------------------------------------------------------------------------------ +! data for table 2 +! ------------------------------------------------------------------------------ + 4.0 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +False InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ +! Table of aerodynamics coefficients + 69 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cpmin +! (deg) (-) (-) (-) + -180 0.0000 0.0100 -1 + -170 0.3270 0.0100 -1 + -160 0.6541 0.0587 -1 + -150 0.9811 0.2318 -1 + -140 0.7974 0.4451 -1 + -130 0.6474 0.6736 -1 + -120 0.4948 0.8909 -1 + -110 0.3312 1.0719 -1 + -100 0.1619 1.1961 -1 + -90 0.0000 1.2500 -1 + -80 -0.1619 1.1961 -1 + -70 -0.3312 1.0719 -1 + -60 -0.4948 0.8909 -1 + -50 -0.6474 0.6736 -1 + -40 -0.7974 0.4451 -1 + -30 -0.9811 0.2318 -1 + -20 -0.7169 0.1237 -1 + -10 -0.6467 0.0156 -2.4629 + -9 -0.5996 0.0132 -2.1912 + -8 -0.5801 0.0111 -1.9816 + -7 -0.4950 0.0100 -1.6720 + -6 -0.3910 0.0092 -1.4078 + -5 -0.2810 0.0085 -1.2080 + -4 -0.1639 0.0080 -1.0184 + -3 -0.0454 0.0073 -0.8991 + -1 0.1982 0.0065 -0.9945 + 0 0.3213 0.0064 -1.0853 + 1 0.4423 0.0066 -1.1768 + 2 0.5645 0.0066 -1.2701 + 5 0.8977 0.0083 -1.5589 + 6 0.9769 0.0097 -1.6615 + 7 1.0311 0.0109 -1.7560 + 9 1.1327 0.0147 -2.0745 + 10 1.1526 0.0188 -2.2074 + 11 1.1873 0.0230 -2.3877 + 12 1.2028 0.0291 -2.6164 + 13 1.2313 0.0351 -2.8768 + 14 1.2601 0.0417 -3.1622 + 15 1.2941 0.0485 -3.4718 + 16 1.3216 0.0564 -3.7920 + 17 1.3498 0.0647 -4.1401 + 18 1.3733 0.0740 -4.4868 + 19 1.3966 0.0838 -4.8430 + 20 1.4115 0.0951 -5.1959 + 21 1.4270 0.1066 -5.5559 + 22 1.4404 0.1187 -5.9301 + 23 1.4449 0.1319 -6.2704 + 24 1.4587 0.1437 -6.6837 + 25 1.4594 0.1573 -7.0264 + 26 1.4601 0.1706 -7.3616 + 27 1.4562 0.1845 -7.6585 + 28 1.4482 0.1989 -7.9116 + 29 1.4181 0.2163 -7.9793 + 30 1.4016 0.2318 -8.1104 + 40 1.1391 0.4451 -1 + 50 0.9249 0.6736 -1 + 60 0.7068 0.8909 -1 + 70 0.4731 1.0719 -1 + 80 0.2313 1.1961 -1 + 90 0.0000 1.2500 -1 + 100 -0.1619 1.1961 -1 + 110 -0.3312 1.0719 -1 + 120 -0.4948 0.8909 -1 + 130 -0.6474 0.6736 -1 + 140 -0.7974 0.4451 -1 + 150 -0.9811 0.2318 -1 + 160 -0.6541 0.0587 -1 + 170 -0.3270 0.0100 -1 + 180 0.0000 0.0100 -1 +! ------------------------------------------------------------------------------ +! data for table 3 +! ------------------------------------------------------------------------------ + 6.0 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +False InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ +! Table of aerodynamics coefficients + 71 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cpmin +! (deg) (-) (-) (-) + -180 0.0000 0.0100 -1 + -170 0.3392 0.0100 -1 + -160 0.6784 0.0496 -1 + -150 1.0176 0.2235 -1 + -140 0.8196 0.4377 -1 + -130 0.6605 0.6674 -1 + -120 0.5018 0.8861 -1 + -110 0.3342 1.0686 -1 + -100 0.1627 1.1945 -1 + -90 0.0000 1.2500 -1 + -80 -0.1627 1.1945 -1 + -70 -0.3342 1.0686 -1 + -60 -0.5018 0.8861 -1 + -50 -0.6605 0.6674 -1 + -40 -0.8196 0.4377 -1 + -30 -1.0176 0.2235 -1 + -20 -0.7445 0.1188 -1 + -10 -0.6733 0.0141 -2.5188 + -9 -0.6311 0.0119 -2.2492 + -8 -0.5908 0.0105 -2.0003 + -7 -0.4967 0.0096 -1.6748 + -6 -0.3927 0.0088 -1.4104 + -5 -0.2789 0.0081 -1.2057 + -4 -0.1611 0.0077 -1.0152 + -3 -0.0419 0.0072 -0.8970 + -2 0.0793 0.0064 -0.9117 + -1 0.2025 0.0061 -0.9971 + 0 0.3254 0.0061 -1.0876 + 1 0.4490 0.0061 -1.1811 + 2 0.5682 0.0064 -1.2727 + 4 0.7966 0.0073 -1.4660 + 5 0.8946 0.0084 -1.5586 + 6 0.9801 0.0096 -1.6568 + 7 1.0446 0.0105 -1.7694 + 8 1.1065 0.0117 -1.9317 + 9 1.1411 0.0142 -2.0844 + 10 1.1776 0.0175 -2.2415 + 11 1.2014 0.0220 -2.4154 + 12 1.2315 0.0270 -2.6770 + 13 1.2585 0.0329 -2.9389 + 14 1.2967 0.0387 -3.2543 + 15 1.3269 0.0455 -3.5636 + 16 1.3566 0.0529 -3.8959 + 17 1.3838 0.0611 -4.2519 + 19 1.4278 0.0800 -4.9627 + 20 1.4607 0.0886 -5.3962 + 21 1.4730 0.1002 -5.7535 + 22 1.4807 0.1128 -6.1201 + 23 1.4853 0.1259 -6.4786 + 24 1.4917 0.1388 -6.8685 + 25 1.4944 0.1520 -7.2354 + 26 1.4918 0.1657 -7.5648 + 27 1.4848 0.1800 -7.8540 + 28 1.4765 0.1943 -8.1190 + 29 1.4665 0.2087 -8.3538 + 30 1.4537 0.2235 -8.5446 + 40 1.1708 0.4377 -1 + 50 0.9436 0.6674 -1 + 60 0.7169 0.8861 -1 + 70 0.4775 1.0686 -1 + 80 0.2324 1.1945 -1 + 90 0.0000 1.2500 -1 + 100 -0.1627 1.1945 -1 + 110 -0.3342 1.0686 -1 + 120 -0.5018 0.8861 -1 + 130 -0.6605 0.6674 -1 + 140 -0.8196 0.4377 -1 + 150 -1.0176 0.2235 -1 + 160 -0.6784 0.0496 -1 + 170 -0.3392 0.0100 -1 + 180 0.0000 0.0100 -1 +! ------------------------------------------------------------------------------ +! data for table 4 +! ------------------------------------------------------------------------------ + 8.0 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +False InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ +! Table of aerodynamics coefficients + 62 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cpmin +! (deg) (-) (-) (-) + -180 0.0000 0.0100 -1 + -170 0.4065 0.0100 -1 + -160 0.8130 0.0656 -1 + -150 0.9585 0.2382 -1 + -140 0.7836 0.4508 -1 + -130 0.6393 0.6784 -1 + -120 0.4904 0.8946 -1 + -110 0.3293 1.0744 -1 + -100 0.1615 1.1974 -1 + -90 0.0000 1.2500 -1 + -80 -0.1615 1.1974 -1 + -70 -0.3293 1.0744 -1 + -60 -0.4904 0.8946 -1 + -50 -0.6393 0.6784 -1 + -40 -0.7836 0.4508 -1 + -30 -0.9585 0.2382 -1 + -20 -0.8400 0.1070 -1 + -10 -0.6835 0.0136 -2.5481 + -9 -0.6551 0.0110 -2.2945 + -8 -0.5990 0.0100 -2.0149 + -5 -0.2785 0.0079 -1.2051 + -4 -0.1605 0.0074 -1.0146 + -3 -0.0396 0.0070 -0.8858 + -2 0.0815 0.0064 -0.9130 + -1 0.2046 0.0060 -0.9981 + 0 0.3288 0.0059 -1.0898 + 1 0.4505 0.0059 -1.1819 + 2 0.5696 0.0062 -1.2742 + 3 0.6869 0.0066 -1.3692 + 4 0.7958 0.0074 -1.4563 + 6 0.9864 0.0094 -1.6557 + 7 1.0636 0.0101 -1.7862 + 8 1.1217 0.0112 -1.9495 + 9 1.1532 0.0137 -2.0998 + 11 1.2140 0.0213 -2.4399 + 12 1.2522 0.0256 -2.7207 + 13 1.2922 0.0304 -3.0194 + 15 1.3624 0.0423 -3.6630 + 16 1.3922 0.0494 -4.0053 + 17 1.4225 0.0570 -4.3795 + 18 1.4431 0.0660 -4.7296 + 19 1.4663 0.0753 -5.1108 + 20 1.4819 0.0860 -5.4818 + 22 1.4994 0.1103 -6.2066 + 25 1.5113 0.1495 -7.3351 + 26 1.5098 0.1631 -7.6774 + 30 1.3693 0.2382 -6.1797 + 40 1.1195 0.4508 -1 + 50 0.9133 0.6784 -1 + 60 0.7006 0.8946 -1 + 70 0.4705 1.0744 -1 + 80 0.2307 1.1974 -1 + 90 0.0000 1.2500 -1 + 100 -0.1615 1.1974 -1 + 110 -0.3293 1.0744 -1 + 120 -0.4904 0.8946 -1 + 130 -0.6393 0.6784 -1 + 140 -0.7836 0.4508 -1 + 150 -0.9585 0.2382 -1 + 160 -0.8130 0.0656 -1 + 170 -0.4065 0.0100 -1 + 180 0.0000 0.0100 -1 +! ------------------------------------------------------------------------------ +! data for table 5 +! ------------------------------------------------------------------------------ + 10.0 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +False InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ +! Table of aerodynamics coefficients + 67 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cpmin +! (deg) (-) (-) (-) + -180 0.0000 0.0100 -1 + -170 0.3508 0.0100 -1 + -160 0.7017 0.0400 -1 + -150 1.0525 0.2147 -1 + -140 0.8408 0.4299 -1 + -130 0.6731 0.6609 -1 + -120 0.5085 0.8810 -1 + -110 0.3371 1.0651 -1 + -100 0.1634 1.1927 -1 + -90 0.0000 1.2500 -1 + -80 -0.1634 1.1927 -1 + -70 -0.3371 1.0651 -1 + -60 -0.5085 0.8810 -1 + -50 -0.6731 0.6609 -1 + -40 -0.8408 0.4299 -1 + -30 -1.0525 0.2147 -1 + -20 -0.7646 0.1141 -1 + -10 -0.6811 0.0135 -2.5243 + -9 -0.6851 0.0106 -2.3544 + -8 -0.6061 0.0097 -2.0276 + -6 -0.3941 0.0082 -1.4146 + -4 -0.1596 0.0072 -1.0137 + -3 -0.0388 0.0069 -0.8871 + -2 0.0830 0.0064 -0.9138 + -1 0.2067 0.0059 -0.9994 + 0 0.3302 0.0058 -1.0906 + 1 0.4512 0.0059 -1.1825 + 2 0.5700 0.0062 -1.2762 + 4 0.7938 0.0075 -1.4517 + 5 0.8930 0.0085 -1.5475 + 6 0.9896 0.0093 -1.6620 + 7 1.0843 0.0099 -1.8045 + 8 1.1285 0.0111 -1.9571 + 9 1.1695 0.0131 -2.1205 + 10 1.1873 0.0169 -2.2387 + 11 1.2351 0.0201 -2.4820 + 12 1.2707 0.0244 -2.7598 + 13 1.3094 0.0292 -3.0601 + 14 1.3479 0.0345 -3.3831 + 16 1.4132 0.0475 -4.0705 + 17 1.4381 0.0554 -4.4302 + 18 1.4631 0.0639 -4.7988 + 19 1.4825 0.0734 -5.1723 + 20 1.4971 0.0841 -5.5428 + 21 1.5047 0.0960 -5.8916 + 24 1.5435 0.1310 -7.1532 + 25 1.5472 0.1439 -7.5449 + 26 1.5476 0.1572 -7.9128 + 27 1.5436 0.1707 -8.246 + 28 1.5338 0.1849 -8.5292 + 29 1.5197 0.1997 -8.7629 + 30 1.5036 0.2147 -8.9588 + 40 1.2012 0.4299 -1 + 50 0.9615 0.6609 -1 + 60 0.7265 0.8810 -1 + 70 0.4816 1.0651 -1 + 80 0.2334 1.1927 -1 + 90 0.0000 1.2500 -1 + 100 -0.1634 1.1927 -1 + 110 -0.3371 1.0651 -1 + 120 -0.5085 0.8810 -1 + 130 -0.6731 0.6609 -1 + 140 -0.8408 0.4299 -1 + 150 -1.0525 0.2147 -1 + 160 -0.7017 0.0400 -1 + 170 -0.3508 0.0100 -1 + 180 0.0000 0.0100 -1 +! ------------------------------------------------------------------------------ +! data for table 6 +! ------------------------------------------------------------------------------ + 12.0 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +False InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ +! Table of aerodynamics coefficients + 68 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cpmin +! (deg) (-) (-) (-) + -180 0.0000 0.0100 -1 + -170 0.3695 0.0100 -1 + -160 0.7389 0.0433 -1 + -150 1.0447 0.2176 -1 + -140 0.8361 0.4326 -1 + -130 0.6703 0.6631 -1 + -120 0.5070 0.8827 -1 + -110 0.3365 1.0663 -1 + -100 0.1632 1.1933 -1 + -90 0.0000 1.2500 -1 + -80 -0.1632 1.1933 -1 + -70 -0.3365 1.0663 -1 + -60 -0.5070 0.8827 -1 + -50 -0.6703 0.6631 -1 + -40 -0.8361 0.4326 -1 + -30 -1.0447 0.2176 -1 + -20 -0.7942 0.1103 -1 + -10 -0.6944 0.0129 -2.5538 + -7 -0.5051 0.0088 -1.6890 + -6 -0.3931 0.0082 -1.4033 + -5 -0.2781 0.0075 -1.2051 + -4 -0.1595 0.0071 -1.0133 + -3 -0.0379 0.0068 -0.8899 + -2 0.0846 0.0064 -0.9146 + -1 0.2078 0.0058 -1.0002 + 0 0.3310 0.0058 -1.0908 + 1 0.4519 0.0058 -1.1833 + 2 0.5708 0.0061 -1.2722 + 3 0.6863 0.0066 -1.3593 + 4 0.7943 0.0074 -1.4554 + 5 0.8937 0.0084 -1.5503 + 6 0.9965 0.0090 -1.6685 + 7 1.0919 0.0097 -1.8120 + 8 1.1354 0.0109 -1.9652 + 10 1.2027 0.0161 -2.2646 + 11 1.2478 0.0194 -2.5076 + 12 1.2911 0.0232 -2.8034 + 13 1.3319 0.0276 -3.1135 + 14 1.3618 0.0335 -3.4179 + 15 1.3958 0.0395 -3.7559 + 17 1.4529 0.0540 -4.4787 + 18 1.4764 0.0625 -4.8444 + 19 1.4956 0.0720 -5.2221 + 20 1.5053 0.0831 -5.5750 + 22 1.5459 0.1037 -6.4227 + 23 1.5538 0.1161 -6.8324 + 24 1.5595 0.1287 -7.2408 + 25 1.5622 0.1418 -7.6314 + 26 1.5612 0.1552 -7.9964 + 27 1.5539 0.1691 -8.3139 + 28 1.5433 0.1835 -8.595 + 29 1.5306 0.1980 -8.8443 + 30 1.4925 0.2176 -8.363771554 + 40 1.1944 0.4326 -1 + 50 0.9575 0.6631 -1 + 60 0.7243 0.8827 -1 + 70 0.4807 1.0663 -1 + 80 0.2332 1.1933 -1 + 90 0.0000 1.2500 -1 + 100 -0.1632 1.1933 -1 + 110 -0.3365 1.0663 -1 + 120 -0.5070 0.8827 -1 + 130 -0.6703 0.6631 -1 + 140 -0.8361 0.4326 -1 + 150 -1.0447 0.2176 -1 + 160 -0.7389 0.0433 -1 + 170 -0.3695 0.0100 -1 + 180 0.0000 0.0100 -1 +! ------------------------------------------------------------------------------ +! data for table 7 +! ------------------------------------------------------------------------------ + 14.0 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +False InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ +! Table of aerodynamics coefficients + 64 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cpmin +! (deg) (-) (-) (-) + -180 0.0000 0.0100 -1 + -170 0.3561 0.0100 -1 + -160 0.7121 0.0361 -1 + -150 1.0682 0.2110 -1 + -140 0.8504 0.4267 -1 + -130 0.6787 0.6582 -1 + -120 0.5115 0.8789 -1 + -110 0.3384 1.0637 -1 + -100 0.1637 1.1919 -1 + -90 0.0000 1.2500 -1 + -80 -0.1637 1.1919 -1 + -70 -0.3384 1.0637 -1 + -60 -0.5115 0.8789 -1 + -50 -0.6787 0.6582 -1 + -40 -0.8504 0.4267 -1 + -30 -1.0682 0.2110 -1 + -20 -0.7818 0.1117 -1 + -10 -0.7078 0.0124 -2.5820 + -9 -0.6882 0.0105 -2.3471 + -8 -0.6127 0.0092 -2.0403 + -6 -0.3930 0.0081 -1.4009 + -5 -0.2780 0.0074 -1.2048 + -4 -0.1594 0.0069 -1.0132 + -3 -0.0371 0.0067 -0.8903 + -2 0.0857 0.0063 -0.9153 + -1 0.2083 0.0058 -1.0004 + 0 0.3320 0.0057 -1.0916 + 1 0.4508 0.0059 -1.1835 + 2 0.5707 0.0061 -1.2714 + 3 0.6849 0.0067 -1.3575 + 5 0.8968 0.0083 -1.5536 + 6 0.9995 0.0090 -1.6719 + 7 1.0994 0.0095 -1.8194 + 8 1.1396 0.0107 -1.9697 + 11 1.2595 0.0188 -2.5308 + 12 1.3027 0.0225 -2.8278 + 14 1.3829 0.0318 -3.4708 + 16 1.4381 0.0453 -4.1475 + 18 1.4876 0.0613 -4.8828 + 21 1.5477 0.0904 -6.0795 + 22 1.5578 0.1021 -6.4768 + 23 1.5668 0.1143 -6.8990 + 24 1.5715 0.1270 -7.3058 + 25 1.5731 0.1402 -7.6939 + 26 1.5686 0.1540 -8.0423 + 27 1.5615 0.1680 -8.3631 + 28 1.5521 0.1821 -8.6566 + 29 1.5406 0.1964 -8.9183 + 30 1.5260 0.2110 -9.1387 + 40 1.2148 0.4267 -1 + 50 0.9696 0.6582 -1 + 60 0.7308 0.8789 -1 + 70 0.4835 1.0637 -1 + 80 0.2339 1.1919 -1 + 90 0.0000 1.2500 -1 + 100 -0.1637 1.1919 -1 + 110 -0.3384 1.0637 -1 + 120 -0.5115 0.8789 -1 + 130 -0.6787 0.6582 -1 + 140 -0.8504 0.4267 -1 + 150 -1.0682 0.2110 -1 + 160 -0.7121 0.0361 -1 + 170 -0.3561 0.0100 -1 + 180 0.0000 0.0100 -1 \ No newline at end of file diff --git a/example/MHK_RM1_Floating/Airfoils/NACA6_0240_coords.txt b/example/MHK_RM1_Floating/Airfoils/NACA6_0240_coords.txt new file mode 100644 index 00000000..99568655 --- /dev/null +++ b/example/MHK_RM1_Floating/Airfoils/NACA6_0240_coords.txt @@ -0,0 +1,47 @@ + 40 NumCoords ! The number of coordinates in the airfoil shape file (including an extra coordinate for airfoil reference). Set to zero if coordinates not included. +! ......... x-y coordinates are next if NumCoords > 0 ............. +! x-y coordinate of airfoil reference +! x/c y/c + 0.25 0 +! coordinates of airfoil shape +! NACA6_0240 Airfoil +! x/c y/c + 0.000000 0.000000 + 0.001740 0.009990 + 0.009990 0.025540 + 0.026840 0.043840 + 0.085380 0.081830 + 0.126020 0.098890 + 0.173070 0.113700 + 0.225630 0.125450 + 0.343100 0.136890 + 0.405650 0.135010 + 0.469030 0.128320 + 0.532130 0.117850 + 0.653880 0.089820 + 0.711010 0.074320 + 0.764750 0.059150 + 0.814500 0.045100 + 0.899560 0.022380 + 0.933650 0.014140 + 0.961390 0.007980 + 0.982280 0.002440 + 0.982280 0.001830 + 0.961390 0.002090 + 0.933510 0.000850 + 0.859090 -0.008040 + 0.813820 -0.016050 + 0.764090 -0.026350 + 0.710600 -0.038510 + 0.594970 -0.065500 + 0.534160 -0.078430 + 0.472340 -0.089680 + 0.410300 -0.098140 + 0.289530 -0.102840 + 0.233070 -0.098960 + 0.180640 -0.091900 + 0.133180 -0.082080 + 0.056790 -0.055970 + 0.029750 -0.040380 + 0.011270 -0.024430 + 0.000000 0.000000 \ No newline at end of file diff --git a/example/MHK_RM1_Floating/Airfoils/NACA6_0247.dat b/example/MHK_RM1_Floating/Airfoils/NACA6_0247.dat new file mode 100644 index 00000000..116e81c9 --- /dev/null +++ b/example/MHK_RM1_Floating/Airfoils/NACA6_0247.dat @@ -0,0 +1,560 @@ +! ------------ AirfoilInfo v1.01.x Input File ---------------------------------- +! NACA6_0247 airfoil, data based on values used for the design of the RM1 tidal current turbine. +! line +! line +! ------------------------------------------------------------------------------ +"default" InterpOrd ! Interpolation order to use for quasi-steady table lookup {1=linear; 3=cubic spline; "default"} [default=1] + 1.0 NonDimArea ! The non-dimensional area of the airfoil (area/chord^2) (set to 1.0 if unsure or unneeded) +@"NACA6_0247_coords.txt" NumCoords ! The number of coordinates in the airfoil shape file. Set to zero if coordinates not included. +"unused" BL_file ! The file name including the boundary layer characteristics of the profile. Ignored if the aeroacoustic module is not called. + 7 NumTabs ! Number of airfoil tables in this file. +! ------------------------------------------------------------------------------ +! data for table 1 +! ------------------------------------------------------------------------------ + 2.000 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +False InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ +! Table of aerodynamics coefficients + 72 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cpmin +! (deg) (-) (-) (-) + -180.000 0.0000 0.0127 -1.0184 + -170.000 0.3091 0.0127 -1.0184 + -160.000 0.6183 0.0727 -1.0184 + -150.000 0.9274 0.2433 -1.0184 + -140.000 0.7628 0.4535 -1.0184 + -130.000 0.6254 0.6783 -1.0184 + -120.000 0.4816 0.8918 -1.0184 + -110.000 0.3245 1.0691 -1.0184 + -100.000 0.1595 1.1900 -1.0184 + -90.000 0.0000 1.2413 -1.0184 + -80.000 -0.1595 1.1900 -1.0184 + -70.000 -0.3245 1.0691 -1.0184 + -60.000 -0.4816 0.8918 -1.0184 + -50.000 -0.6254 0.6783 -1.0184 + -40.000 -0.7628 0.4535 -1.0184 + -30.000 -0.9274 0.2433 -1.0184 + -20.000 -0.6720 0.1322 -1.0184 + -10.000 -0.5951 0.0209 -2.3716 + -9.000 -0.5650 0.0176 -2.1434 + -8.000 -0.5351 0.0150 -1.9228 + -7.000 -0.4818 0.0138 -1.6688 + -6.000 -0.3875 0.0128 -1.4222 + -5.000 -0.2803 0.0120 -1.2263 + -4.000 -0.1683 0.0113 -1.0428 + -3.000 -0.0542 0.0103 -0.9248 + -2.000 0.0665 0.0101 -0.9240 + -1.000 0.1867 0.0100 -1.0073 + 0.000 0.3064 0.0101 -1.0954 + 1.000 0.4267 0.0101 -1.1863 + 2.000 0.5452 0.0103 -1.2768 + 3.000 0.6616 0.0105 -1.3708 + 4.000 0.7735 0.0109 -1.4655 + 5.000 0.8839 0.0113 -1.5694 + 6.000 0.9739 0.0124 -1.6771 + 7.000 1.0102 0.0141 -1.7583 + 8.000 1.0430 0.0163 -1.8837 + 9.000 1.0831 0.0192 -2.0347 + 10.000 1.1247 0.0226 -2.1924 + 11.000 1.1327 0.0284 -2.3091 + 12.000 1.1622 0.0338 -2.5578 + 13.000 1.1717 0.0416 -2.7695 + 14.000 1.1976 0.0487 -3.0320 + 15.000 1.2159 0.0573 -3.2881 + 16.000 1.2441 0.0656 -3.5904 + 17.000 1.2688 0.0746 -3.9016 + 18.000 1.2917 0.0845 -4.2305 + 19.000 1.3130 0.0949 -4.5598 + 20.000 1.3315 0.1061 -4.8996 + 21.000 1.3488 0.1176 -5.2476 + 22.000 1.3682 0.1287 -5.6212 + 23.000 1.3766 0.1416 -5.9601 + 24.000 1.3832 0.1546 -6.2942 + 25.000 1.3841 0.1681 -6.6093 + 26.000 1.3794 0.1825 -6.8790 + 28.000 1.3547 0.2120 -7.2711 + 29.000 1.3364 0.2285 -7.3706 + 30.000 1.3248 0.2433 -7.4930 + 40.000 1.0898 0.4535 -1.0184 + 50.000 0.8934 0.6783 -1.0184 + 60.000 0.6880 0.8918 -1.0184 + 70.000 0.4635 1.0691 -1.0184 + 80.000 0.2279 1.1900 -1.0184 + 90.000 0.0000 1.2413 -1.0184 + 100.000 -0.1595 1.1900 -1.0184 + 110.000 -0.3245 1.0691 -1.0184 + 120.000 -0.4816 0.8918 -1.0184 + 130.000 -0.6254 0.6783 -1.0184 + 140.000 -0.7628 0.4535 -1.0184 + 150.000 -0.9274 0.2433 -1.0184 + 160.000 -0.6183 0.0727 -1.0184 + 170.000 -0.3091 0.0127 -1.0184 + 180.000 0.0000 0.0127 -1.0184 +! ------------------------------------------------------------------------------ +! data for table 2 +! ------------------------------------------------------------------------------ + 4.000 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +False InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ +! Table of aerodynamics coefficients + 69 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cpmin +! (deg) (-) (-) (-) + -180.000 0.0000 0.0161 -1.0184 + -170.000 0.3240 0.0161 -1.0184 + -160.000 0.6481 0.0643 -1.0184 + -150.000 0.9721 0.2358 -1.0184 + -140.000 0.7901 0.4472 -1.0184 + -130.000 0.6414 0.6736 -1.0184 + -120.000 0.4902 0.8889 -1.0184 + -110.000 0.3281 1.0682 -1.0184 + -100.000 0.1604 1.1913 -1.0184 + -90.000 0.0000 1.2447 -1.0184 + -80.000 -0.1604 1.1913 -1.0184 + -70.000 -0.3281 1.0682 -1.0184 + -60.000 -0.4902 0.8889 -1.0184 + -50.000 -0.6414 0.6736 -1.0184 + -40.000 -0.7901 0.4472 -1.0184 + -30.000 -0.9721 0.2358 -1.0184 + -20.000 -0.7103 0.1287 -1.0184 + -10.000 -0.6407 0.0216 -2.4678 + -9.000 -0.5941 0.0192 -2.1986 + -8.000 -0.5748 0.0172 -1.9910 + -7.000 -0.4904 0.0161 -1.6842 + -6.000 -0.3874 0.0153 -1.4225 + -5.000 -0.2784 0.0146 -1.2245 + -4.000 -0.1624 0.0141 -1.0367 + -3.000 -0.0450 0.0134 -0.9185 + -1.000 0.1964 0.0126 -1.0130 + 0.000 0.3183 0.0125 -1.1029 + 1.000 0.4382 0.0127 -1.1936 + 2.000 0.5593 0.0127 -1.2860 + 5.000 0.8894 0.0144 -1.5722 + 6.000 0.9679 0.0158 -1.6738 + 7.000 1.0216 0.0170 -1.7675 + 9.000 1.1223 0.0207 -2.0830 + 10.000 1.1420 0.0248 -2.2147 + 11.000 1.1764 0.0290 -2.3933 + 12.000 1.1917 0.0350 -2.6199 + 13.000 1.2200 0.0409 -2.8779 + 14.000 1.2485 0.0475 -3.1607 + 15.000 1.2822 0.0542 -3.4675 + 16.000 1.3094 0.0621 -3.7847 + 17.000 1.3374 0.0703 -4.1296 + 18.000 1.3607 0.0795 -4.4731 + 19.000 1.3837 0.0892 -4.8260 + 20.000 1.3985 0.1004 -5.1757 + 21.000 1.4139 0.1118 -5.5324 + 22.000 1.4271 0.1238 -5.9031 + 23.000 1.4316 0.1369 -6.2403 + 24.000 1.4453 0.1485 -6.6498 + 25.000 1.4460 0.1620 -6.9893 + 26.000 1.4467 0.1752 -7.3214 + 27.000 1.4428 0.1890 -7.6156 + 28.000 1.4349 0.2032 -7.8664 + 29.000 1.4050 0.2205 -7.9334 + 30.000 1.3887 0.2358 -8.0633 + 40.000 1.1286 0.4472 -1.0184 + 50.000 0.9164 0.6736 -1.0184 + 60.000 0.7003 0.8889 -1.0184 + 70.000 0.4687 1.0682 -1.0184 + 80.000 0.2292 1.1913 -1.0184 + 90.000 0.0000 1.2447 -1.0184 + 100.000 -0.1604 1.1913 -1.0184 + 110.000 -0.3281 1.0682 -1.0184 + 120.000 -0.4902 0.8889 -1.0184 + 130.000 -0.6414 0.6736 -1.0184 + 140.000 -0.7901 0.4472 -1.0184 + 150.000 -0.9721 0.2358 -1.0184 + 160.000 -0.6481 0.0643 -1.0184 + 170.000 -0.3240 0.0161 -1.0184 + 180.000 0.0000 0.0161 -1.0184 +! ------------------------------------------------------------------------------ +! data for table 3 +! ------------------------------------------------------------------------------ + 6.000 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +False InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ +! Table of aerodynamics coefficients + 71 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cpmin +! (deg) (-) (-) (-) + -180.000 0.0000 0.0164 -1.0184 + -170.000 0.3361 0.0164 -1.0184 + -160.000 0.6722 0.0556 -1.0184 + -150.000 1.0082 0.2279 -1.0184 + -140.000 0.8121 0.4401 -1.0184 + -130.000 0.6544 0.6677 -1.0184 + -120.000 0.4972 0.8844 -1.0184 + -110.000 0.3311 1.0652 -1.0184 + -100.000 0.1612 1.1899 -1.0184 + -90.000 0.0000 1.2449 -1.0184 + -80.000 -0.1612 1.1899 -1.0184 + -70.000 -0.3311 1.0652 -1.0184 + -60.000 -0.4972 0.8844 -1.0184 + -50.000 -0.6544 0.6677 -1.0184 + -40.000 -0.8121 0.4401 -1.0184 + -30.000 -1.0082 0.2279 -1.0184 + -20.000 -0.7376 0.1242 -1.0184 + -10.000 -0.6671 0.0204 -2.5232 + -9.000 -0.6253 0.0182 -2.2561 + -8.000 -0.5854 0.0169 -2.0095 + -7.000 -0.4921 0.0160 -1.6870 + -6.000 -0.3891 0.0152 -1.4250 + -5.000 -0.2763 0.0145 -1.2222 + -4.000 -0.1596 0.0141 -1.0335 + -3.000 -0.0415 0.0136 -0.9164 + -2.000 0.0786 0.0128 -0.9309 + -1.000 0.2006 0.0125 -1.0155 + 0.000 0.3224 0.0125 -1.1052 + 1.000 0.4449 0.0125 -1.1979 + 2.000 0.5630 0.0128 -1.2886 + 4.000 0.7893 0.0137 -1.4801 + 5.000 0.8864 0.0148 -1.5719 + 6.000 0.9711 0.0160 -1.6692 + 7.000 1.0350 0.0169 -1.7807 + 8.000 1.0963 0.0180 -1.9415 + 9.000 1.1306 0.0205 -2.0928 + 10.000 1.1668 0.0238 -2.2485 + 11.000 1.1903 0.0282 -2.4208 + 12.000 1.2202 0.0332 -2.6800 + 13.000 1.2469 0.0390 -2.9395 + 14.000 1.2848 0.0448 -3.2520 + 15.000 1.3147 0.0515 -3.5584 + 16.000 1.3441 0.0589 -3.8876 + 17.000 1.3711 0.0670 -4.2404 + 19.000 1.4146 0.0857 -4.9446 + 20.000 1.4472 0.0942 -5.3741 + 21.000 1.4594 0.1057 -5.7281 + 22.000 1.4671 0.1182 -6.0914 + 23.000 1.4716 0.1312 -6.4466 + 24.000 1.4780 0.1440 -6.8329 + 25.000 1.4806 0.1570 -7.1964 + 26.000 1.4781 0.1706 -7.5228 + 27.000 1.4711 0.1848 -7.8093 + 28.000 1.4629 0.1990 -8.0719 + 29.000 1.4530 0.2132 -8.3045 + 30.000 1.4403 0.2279 -8.4935 + 40.000 1.1600 0.4401 -1.0184 + 50.000 0.9349 0.6677 -1.0184 + 60.000 0.7103 0.8844 -1.0184 + 70.000 0.4731 1.0652 -1.0184 + 80.000 0.2303 1.1899 -1.0184 + 90.000 0.0000 1.2449 -1.0184 + 100.000 -0.1612 1.1899 -1.0184 + 110.000 -0.3311 1.0652 -1.0184 + 120.000 -0.4972 0.8844 -1.0184 + 130.000 -0.6544 0.6677 -1.0184 + 140.000 -0.8121 0.4401 -1.0184 + 150.000 -1.0082 0.2279 -1.0184 + 160.000 -0.6722 0.0556 -1.0184 + 170.000 -0.3361 0.0164 -1.0184 + 180.000 0.0000 0.0164 -1.0184 +! ------------------------------------------------------------------------------ +! data for table 4 +! ------------------------------------------------------------------------------ + 8.000 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +False InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ +! Table of aerodynamics coefficients + 62 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cpmin +! (deg) (-) (-) (-) + -180.000 0.0000 0.0164 -1.0184 + -170.000 0.4028 0.0164 -1.0184 + -160.000 0.8055 0.0714 -1.0184 + -150.000 0.9497 0.2425 -1.0184 + -140.000 0.7764 0.4531 -1.0184 + -130.000 0.6334 0.6786 -1.0184 + -120.000 0.4859 0.8928 -1.0184 + -110.000 0.3263 1.0710 -1.0184 + -100.000 0.1600 1.1928 -1.0184 + -90.000 0.0000 1.2449 -1.0184 + -80.000 -0.1600 1.1928 -1.0184 + -70.000 -0.3263 1.0710 -1.0184 + -60.000 -0.4859 0.8928 -1.0184 + -50.000 -0.6334 0.6786 -1.0184 + -40.000 -0.7764 0.4531 -1.0184 + -30.000 -0.9497 0.2425 -1.0184 + -20.000 -0.8323 0.1125 -1.0184 + -10.000 -0.6772 0.0199 -2.5523 + -9.000 -0.6491 0.0173 -2.3010 + -8.000 -0.5935 0.0164 -2.0240 + -5.000 -0.2759 0.0143 -1.2216 + -4.000 -0.1590 0.0138 -1.0329 + -3.000 -0.0392 0.0134 -0.9053 + -2.000 0.0807 0.0128 -0.9322 + -1.000 0.2027 0.0124 -1.0165 + 0.000 0.3258 0.0123 -1.1074 + 1.000 0.4464 0.0123 -1.1986 + 2.000 0.5644 0.0126 -1.2901 + 3.000 0.6806 0.0130 -1.3842 + 4.000 0.7885 0.0138 -1.4705 + 6.000 0.9773 0.0158 -1.6681 + 7.000 1.0538 0.0165 -1.7974 + 8.000 1.1114 0.0175 -1.9592 + 9.000 1.1426 0.0200 -2.1081 + 11.000 1.2028 0.0276 -2.4451 + 12.000 1.2407 0.0318 -2.7233 + 13.000 1.2803 0.0366 -3.0192 + 15.000 1.3499 0.0484 -3.6569 + 16.000 1.3794 0.0554 -3.9960 + 17.000 1.4094 0.0629 -4.3668 + 18.000 1.4298 0.0718 -4.7137 + 19.000 1.4528 0.0811 -5.0914 + 20.000 1.4683 0.0917 -5.4589 + 22.000 1.4856 0.1157 -6.1771 + 25.000 1.4974 0.1546 -7.2952 + 26.000 1.4959 0.1680 -7.6343 + 30.000 1.3567 0.2425 -6.1504 + 40.000 1.1092 0.4531 -1.0184 + 50.000 0.9049 0.6786 -1.0184 + 60.000 0.6941 0.8928 -1.0184 + 70.000 0.4662 1.0710 -1.0184 + 80.000 0.2286 1.1928 -1.0184 + 90.000 0.0000 1.2449 -1.0184 + 100.000 -0.1600 1.1928 -1.0184 + 110.000 -0.3263 1.0710 -1.0184 + 120.000 -0.4859 0.8928 -1.0184 + 130.000 -0.6334 0.6786 -1.0184 + 140.000 -0.7764 0.4531 -1.0184 + 150.000 -0.9497 0.2425 -1.0184 + 160.000 -0.8055 0.0714 -1.0184 + 170.000 -0.4028 0.0164 -1.0184 + 180.000 0.0000 0.0164 -1.0184 +! ------------------------------------------------------------------------------ +! data for table 5 +! ------------------------------------------------------------------------------ + 10.000 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +False InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ +! Table of aerodynamics coefficients + 67 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cpmin +! (deg) (-) (-) (-) + -180.000 0.0000 0.0164 -1.0184 + -170.000 0.3476 0.0164 -1.0184 + -160.000 0.6952 0.0461 -1.0184 + -150.000 1.0428 0.2192 -1.0184 + -140.000 0.8331 0.4324 -1.0184 + -130.000 0.6669 0.6613 -1.0184 + -120.000 0.5038 0.8793 -1.0184 + -110.000 0.3340 1.0617 -1.0184 + -100.000 0.1619 1.1882 -1.0184 + -90.000 0.0000 1.2449 -1.0184 + -80.000 -0.1619 1.1882 -1.0184 + -70.000 -0.3340 1.0617 -1.0184 + -60.000 -0.5038 0.8793 -1.0184 + -50.000 -0.6669 0.6613 -1.0184 + -40.000 -0.8331 0.4324 -1.0184 + -30.000 -1.0428 0.2192 -1.0184 + -20.000 -0.7576 0.1195 -1.0184 + -10.000 -0.6748 0.0198 -2.5287 + -9.000 -0.6788 0.0169 -2.3603 + -8.000 -0.6005 0.0161 -2.0366 + -6.000 -0.3905 0.0146 -1.4292 + -4.000 -0.1581 0.0136 -1.0320 + -3.000 -0.0384 0.0133 -0.9066 + -2.000 0.0822 0.0128 -0.9330 + -1.000 0.2048 0.0123 -1.0178 + 0.000 0.3272 0.0122 -1.1082 + 1.000 0.4470 0.0123 -1.1992 + 2.000 0.5647 0.0126 -1.2921 + 4.000 0.7865 0.0139 -1.4660 + 5.000 0.8848 0.0149 -1.5609 + 6.000 0.9805 0.0157 -1.6743 + 7.000 1.0743 0.0163 -1.8155 + 8.000 1.1181 0.0174 -1.9667 + 9.000 1.1587 0.0194 -2.1286 + 10.000 1.1764 0.0232 -2.2457 + 11.000 1.2237 0.0264 -2.4868 + 12.000 1.2590 0.0306 -2.7620 + 13.000 1.2973 0.0354 -3.0595 + 14.000 1.3355 0.0406 -3.3796 + 16.000 1.4002 0.0535 -4.0606 + 17.000 1.4249 0.0613 -4.4170 + 18.000 1.4496 0.0698 -4.7822 + 19.000 1.4688 0.0792 -5.1523 + 20.000 1.4833 0.0898 -5.5194 + 21.000 1.4908 0.1016 -5.8650 + 24.000 1.5293 0.1362 -7.1149 + 25.000 1.5329 0.1490 -7.5030 + 26.000 1.5333 0.1622 -7.8676 + 27.000 1.5294 0.1756 -8.1977 + 28.000 1.5197 0.1896 -8.4783 + 29.000 1.5057 0.2043 -8.7098 + 30.000 1.4898 0.2192 -8.9039 + 40.000 1.1901 0.4324 -1.0184 + 50.000 0.9526 0.6613 -1.0184 + 60.000 0.7198 0.8793 -1.0184 + 70.000 0.4772 1.0617 -1.0184 + 80.000 0.2313 1.1882 -1.0184 + 90.000 0.0000 1.2449 -1.0184 + 100.000 -0.1619 1.1882 -1.0184 + 110.000 -0.3340 1.0617 -1.0184 + 120.000 -0.5038 0.8793 -1.0184 + 130.000 -0.6669 0.6613 -1.0184 + 140.000 -0.8331 0.4324 -1.0184 + 150.000 -1.0428 0.2192 -1.0184 + 160.000 -0.6952 0.0461 -1.0184 + 170.000 -0.3476 0.0164 -1.0184 + 180.000 0.0000 0.0164 -1.0184 +! ------------------------------------------------------------------------------ +! data for table 6 +! ------------------------------------------------------------------------------ + 12.000 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +False InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ +! Table of aerodynamics coefficients + 68 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cpmin +! (deg) (-) (-) (-) + -180.000 0.0000 0.0164 -1.0184 + -170.000 0.3661 0.0164 -1.0184 + -160.000 0.7321 0.0493 -1.0184 + -150.000 1.0351 0.2220 -1.0184 + -140.000 0.8284 0.4351 -1.0184 + -130.000 0.6641 0.6634 -1.0184 + -120.000 0.5023 0.8810 -1.0184 + -110.000 0.3334 1.0629 -1.0184 + -100.000 0.1617 1.1888 -1.0184 + -90.000 0.0000 1.2449 -1.0184 + -80.000 -0.1617 1.1888 -1.0184 + -70.000 -0.3334 1.0629 -1.0184 + -60.000 -0.5023 0.8810 -1.0184 + -50.000 -0.6641 0.6634 -1.0184 + -40.000 -0.8284 0.4351 -1.0184 + -30.000 -1.0351 0.2220 -1.0184 + -20.000 -0.7869 0.1157 -1.0184 + -10.000 -0.6880 0.0192 -2.5579 + -7.000 -0.5004 0.0152 -1.7011 + -6.000 -0.3895 0.0146 -1.4180 + -5.000 -0.2755 0.0139 -1.2216 + -4.000 -0.1580 0.0135 -1.0316 + -3.000 -0.0376 0.0132 -0.9093 + -2.000 0.0838 0.0128 -0.9338 + -1.000 0.2059 0.0122 -1.0186 + 0.000 0.3280 0.0122 -1.1084 + 1.000 0.4477 0.0122 -1.2000 + 2.000 0.5655 0.0125 -1.2881 + 3.000 0.6800 0.0130 -1.3744 + 4.000 0.7870 0.0138 -1.4696 + 5.000 0.8855 0.0148 -1.5637 + 6.000 0.9873 0.0154 -1.6808 + 7.000 1.0818 0.0161 -1.8229 + 8.000 1.1249 0.0172 -1.9747 + 10.000 1.1916 0.0224 -2.2714 + 11.000 1.2363 0.0257 -2.5121 + 12.000 1.2792 0.0294 -2.8052 + 13.000 1.3196 0.0338 -3.1125 + 14.000 1.3493 0.0396 -3.4141 + 15.000 1.3829 0.0456 -3.7489 + 17.000 1.4395 0.0600 -4.4651 + 18.000 1.4628 0.0684 -4.8274 + 19.000 1.4818 0.0778 -5.2016 + 20.000 1.4914 0.0888 -5.5513 + 22.000 1.5317 0.1092 -6.3912 + 23.000 1.5395 0.1215 -6.7971 + 24.000 1.5451 0.1340 -7.2017 + 25.000 1.5478 0.1469 -7.5887 + 26.000 1.5468 0.1602 -7.9504 + 27.000 1.5396 0.1740 -8.2650 + 28.000 1.5291 0.1883 -8.5435 + 29.000 1.5165 0.2026 -8.7905 + 30.000 1.4788 0.2220 -8.3144 + 40.000 1.1834 0.4351 -1.0184 + 50.000 0.9487 0.6634 -1.0184 + 60.000 0.7176 0.8810 -1.0184 + 70.000 0.4763 1.0629 -1.0184 + 80.000 0.2311 1.1888 -1.0184 + 90.000 0.0000 1.2449 -1.0184 + 100.000 -0.1617 1.1888 -1.0184 + 110.000 -0.3334 1.0629 -1.0184 + 120.000 -0.5023 0.8810 -1.0184 + 130.000 -0.6641 0.6634 -1.0184 + 140.000 -0.8284 0.4351 -1.0184 + 150.000 -1.0351 0.2220 -1.0184 + 160.000 -0.7321 0.0493 -1.0184 + 170.000 -0.3661 0.0164 -1.0184 + 180.000 0.0000 0.0164 -1.0184 +! ------------------------------------------------------------------------------ +! data for table 7 +! ------------------------------------------------------------------------------ + 14.000 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +False InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ +! Table of aerodynamics coefficients + 64 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cpmin +! (deg) (-) (-) (-) + -180.000 0.0000 0.0164 -1.0184 + -170.000 0.3528 0.0164 -1.0184 + -160.000 0.7055 0.0422 -1.0184 + -150.000 1.0584 0.2155 -1.0184 + -140.000 0.8426 0.4292 -1.0184 + -130.000 0.6724 0.6586 -1.0184 + -120.000 0.5068 0.8773 -1.0184 + -110.000 0.3353 1.0604 -1.0184 + -100.000 0.1622 1.1874 -1.0184 + -90.000 0.0000 1.2449 -1.0184 + -80.000 -0.1622 1.1874 -1.0184 + -70.000 -0.3353 1.0604 -1.0184 + -60.000 -0.5068 0.8773 -1.0184 + -50.000 -0.6724 0.6586 -1.0184 + -40.000 -0.8426 0.4292 -1.0184 + -30.000 -1.0584 0.2155 -1.0184 + -20.000 -0.7746 0.1171 -1.0184 + -10.000 -0.7013 0.0187 -2.5858 + -9.000 -0.6819 0.0169 -2.3531 + -8.000 -0.6071 0.0156 -2.0491 + -6.000 -0.3894 0.0145 -1.4156 + -5.000 -0.2754 0.0138 -1.2213 + -4.000 -0.1579 0.0133 -1.0315 + -3.000 -0.0368 0.0131 -0.9097 + -2.000 0.0849 0.0127 -0.9345 + -1.000 0.2064 0.0122 -1.0188 + 0.000 0.3289 0.0121 -1.1092 + 1.000 0.4466 0.0123 -1.2002 + 2.000 0.5654 0.0125 -1.2873 + 3.000 0.6786 0.0131 -1.3726 + 5.000 0.8885 0.0147 -1.5669 + 6.000 0.9903 0.0154 -1.6841 + 7.000 1.0893 0.0159 -1.8303 + 8.000 1.1291 0.0170 -1.9792 + 11.000 1.2479 0.0251 -2.5351 + 12.000 1.2907 0.0287 -2.8294 + 14.000 1.3702 0.0380 -3.4665 + 16.000 1.4249 0.0513 -4.1369 + 18.000 1.4739 0.0672 -4.8655 + 21.000 1.5334 0.0960 -6.0511 + 22.000 1.5435 0.1076 -6.4448 + 23.000 1.5524 0.1197 -6.8631 + 24.000 1.5570 0.1323 -7.2661 + 25.000 1.5586 0.1454 -7.6507 + 26.000 1.5542 0.1590 -7.9959 + 27.000 1.5471 0.1729 -8.3137 + 28.000 1.5378 0.1869 -8.6045 + 29.000 1.5264 0.2010 -8.8638 + 30.000 1.5119 0.2155 -9.0822 + 40.000 1.2036 0.4292 -1.0184 + 50.000 0.9607 0.6586 -1.0184 + 60.000 0.7241 0.8773 -1.0184 + 70.000 0.4790 1.0604 -1.0184 + 80.000 0.2317 1.1874 -1.0184 + 90.000 0.0000 1.2449 -1.0184 + 100.000 -0.1622 1.1874 -1.0184 + 110.000 -0.3353 1.0604 -1.0184 + 120.000 -0.5068 0.8773 -1.0184 + 130.000 -0.6724 0.6586 -1.0184 + 140.000 -0.8426 0.4292 -1.0184 + 150.000 -1.0584 0.2155 -1.0184 + 160.000 -0.7055 0.0422 -1.0184 + 170.000 -0.3528 0.0164 -1.0184 + 180.000 0.0000 0.0164 -1.0184 \ No newline at end of file diff --git a/example/MHK_RM1_Floating/Airfoils/NACA6_0247_coords.txt b/example/MHK_RM1_Floating/Airfoils/NACA6_0247_coords.txt new file mode 100644 index 00000000..76becdc1 --- /dev/null +++ b/example/MHK_RM1_Floating/Airfoils/NACA6_0247_coords.txt @@ -0,0 +1,47 @@ + 40 NumCoords ! The number of coordinates in the airfoil shape file (including an extra coordinate for airfoil reference). Set to zero if coordinates not included. +! ......... x-y coordinates are next if NumCoords > 0 ............. +! x-y coordinate of airfoil reference +! x/c y/c + 0.25 0 +! coordinates of airfoil shape +! NACA6_0247 Airfoil +! x/c y/c + 0.000000 0.000000 + 0.006819 0.021573 + 0.027091 0.045571 + 0.060263 0.070519 + 0.105430 0.093593 + 0.161359 0.113695 + 0.226526 0.129332 + 0.299152 0.139084 + 0.377257 0.140958 + 0.458710 0.134375 + 0.541290 0.120926 + 0.622743 0.102688 + 0.700848 0.081979 + 0.773474 0.061268 + 0.838641 0.042604 + 0.894570 0.027238 + 0.939737 0.015604 + 0.972909 0.007552 + 0.993181 0.002511 + 1.000000 0.000000 + 0.993181 -0.000009 + 0.972909 0.000021 + 0.939737 -0.001786 + 0.894570 -0.006851 + 0.838641 -0.015998 + 0.773474 -0.029320 + 0.700848 -0.046093 + 0.622743 -0.064559 + 0.541290 -0.082348 + 0.458710 -0.096978 + 0.377257 -0.106009 + 0.299152 -0.107583 + 0.226526 -0.102345 + 0.161359 -0.091881 + 0.105430 -0.077436 + 0.060263 -0.059906 + 0.027091 -0.040088 + 0.006819 -0.019333 + 0.000000 0.000000 \ No newline at end of file diff --git a/example/MHK_RM1_Floating/Airfoils/NACA6_0259.dat b/example/MHK_RM1_Floating/Airfoils/NACA6_0259.dat new file mode 100644 index 00000000..2122f139 --- /dev/null +++ b/example/MHK_RM1_Floating/Airfoils/NACA6_0259.dat @@ -0,0 +1,560 @@ +! ------------ AirfoilInfo v1.01.x Input File ---------------------------------- +! NACA6_0259 airfoil, data based on values used for the design of the RM1 tidal current turbine. +! line +! line +! ------------------------------------------------------------------------------ +"default" InterpOrd ! Interpolation order to use for quasi-steady table lookup {1=linear; 3=cubic spline; "default"} [default=1] + 1.0 NonDimArea ! The non-dimensional area of the airfoil (area/chord^2) (set to 1.0 if unsure or unneeded) +@"NACA6_0259_coords.txt" NumCoords ! The number of coordinates in the airfoil shape file. Set to zero if coordinates not included. +"unused" BL_file ! The file name including the boundary layer characteristics of the profile. Ignored if the aeroacoustic module is not called. + 7 NumTabs ! Number of airfoil tables in this file. +! ------------------------------------------------------------------------------ +! data for table 1 +! ------------------------------------------------------------------------------ + 2.000 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +False InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ +! Table of aerodynamics coefficients + 72 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cpmin +! (deg) (-) (-) (-) + -180.000 0.0000 0.0173 -1.0500 + -170.000 0.3042 0.0173 -1.0500 + -160.000 0.6084 0.0763 -1.0500 + -150.000 0.9126 0.2442 -1.0500 + -140.000 0.7507 0.4510 -1.0500 + -130.000 0.6154 0.6723 -1.0500 + -120.000 0.4739 0.8824 -1.0500 + -110.000 0.3193 1.0569 -1.0500 + -100.000 0.1570 1.1758 -1.0500 + -90.000 0.0000 1.2263 -1.0500 + -80.000 -0.1570 1.1758 -1.0500 + -70.000 -0.3193 1.0569 -1.0500 + -60.000 -0.4739 0.8824 -1.0500 + -50.000 -0.6154 0.6723 -1.0500 + -40.000 -0.7507 0.4510 -1.0500 + -30.000 -0.9126 0.2442 -1.0500 + -20.000 -0.6612 0.1348 -1.0500 + -10.000 -0.5856 0.0253 -2.3817 + -9.000 -0.5560 0.0221 -2.1570 + -8.000 -0.5266 0.0196 -1.9400 + -7.000 -0.4741 0.0183 -1.6900 + -6.000 -0.3813 0.0173 -1.4473 + -5.000 -0.2758 0.0166 -1.2546 + -4.000 -0.1657 0.0159 -1.0740 + -3.000 -0.0533 0.0149 -0.9579 + -2.000 0.0654 0.0147 -0.9571 + -1.000 0.1837 0.0146 -1.0391 + 0.000 0.3015 0.0147 -1.1258 + 1.000 0.4199 0.0147 -1.2152 + 2.000 0.5365 0.0149 -1.3043 + 3.000 0.6510 0.0151 -1.3968 + 4.000 0.7612 0.0155 -1.4899 + 5.000 0.8698 0.0159 -1.5922 + 6.000 0.9584 0.0170 -1.6982 + 7.000 0.9941 0.0186 -1.7781 + 8.000 1.0264 0.0209 -1.9015 + 9.000 1.0659 0.0237 -2.0501 + 10.000 1.1068 0.0270 -2.2053 + 11.000 1.1146 0.0328 -2.3201 + 12.000 1.1437 0.0380 -2.5649 + 13.000 1.1530 0.0457 -2.7732 + 14.000 1.1785 0.0527 -3.0315 + 15.000 1.1965 0.0611 -3.2835 + 16.000 1.2243 0.0693 -3.5810 + 17.000 1.2486 0.0782 -3.8873 + 18.000 1.2711 0.0879 -4.2109 + 19.000 1.2921 0.0982 -4.5349 + 20.000 1.3103 0.1092 -4.8694 + 21.000 1.3273 0.1205 -5.2118 + 22.000 1.3464 0.1314 -5.5795 + 23.000 1.3547 0.1441 -5.9129 + 24.000 1.3612 0.1569 -6.2417 + 25.000 1.3621 0.1702 -6.5518 + 26.000 1.3574 0.1844 -6.8172 + 28.000 1.3331 0.2134 -7.2030 + 29.000 1.3151 0.2296 -7.3009 + 30.000 1.3037 0.2442 -7.4214 + 40.000 1.0724 0.4510 -1.0500 + 50.000 0.8792 0.6723 -1.0500 + 60.000 0.6770 0.8824 -1.0500 + 70.000 0.4561 1.0569 -1.0500 + 80.000 0.2243 1.1758 -1.0500 + 90.000 0.0000 1.2263 -1.0500 + 100.000 -0.1570 1.1758 -1.0500 + 110.000 -0.3193 1.0569 -1.0500 + 120.000 -0.4739 0.8824 -1.0500 + 130.000 -0.6154 0.6723 -1.0500 + 140.000 -0.7507 0.4510 -1.0500 + 150.000 -0.9126 0.2442 -1.0500 + 160.000 -0.6084 0.0763 -1.0500 + 170.000 -0.3042 0.0173 -1.0500 + 180.000 0.0000 0.0173 -1.0500 +! ------------------------------------------------------------------------------ +! data for table 2 +! ------------------------------------------------------------------------------ + 4.000 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +False InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ +! Table of aerodynamics coefficients + 69 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cpmin +! (deg) (-) (-) (-) + -180.000 0.0000 0.0265 -1.0500 + -170.000 0.3188 0.0265 -1.0500 + -160.000 0.6377 0.0740 -1.0500 + -150.000 0.9566 0.2428 -1.0500 + -140.000 0.7775 0.4507 -1.0500 + -130.000 0.6312 0.6735 -1.0500 + -120.000 0.4824 0.8854 -1.0500 + -110.000 0.3229 1.0619 -1.0500 + -100.000 0.1579 1.1829 -1.0500 + -90.000 0.0000 1.2355 -1.0500 + -80.000 -0.1579 1.1829 -1.0500 + -70.000 -0.3229 1.0619 -1.0500 + -60.000 -0.4824 0.8854 -1.0500 + -50.000 -0.6312 0.6735 -1.0500 + -40.000 -0.7775 0.4507 -1.0500 + -30.000 -0.9566 0.2428 -1.0500 + -20.000 -0.6990 0.1374 -1.0500 + -10.000 -0.6305 0.0320 -2.4763 + -9.000 -0.5846 0.0296 -2.2114 + -8.000 -0.5656 0.0276 -2.0071 + -7.000 -0.4826 0.0265 -1.7052 + -6.000 -0.3812 0.0257 -1.4476 + -5.000 -0.2740 0.0250 -1.2528 + -4.000 -0.1598 0.0246 -1.0679 + -3.000 -0.0443 0.0239 -0.9516 + -1.000 0.1932 0.0231 -1.0446 + 0.000 0.3133 0.0230 -1.1332 + 1.000 0.4312 0.0232 -1.2224 + 2.000 0.5504 0.0232 -1.3133 + 5.000 0.8753 0.0248 -1.5949 + 6.000 0.9525 0.0262 -1.6950 + 7.000 1.0053 0.0274 -1.7871 + 9.000 1.1044 0.0311 -2.0976 + 10.000 1.1238 0.0351 -2.2272 + 11.000 1.1576 0.0392 -2.4030 + 12.000 1.1727 0.0451 -2.6260 + 13.000 1.2005 0.0510 -2.8799 + 14.000 1.2286 0.0574 -3.1581 + 15.000 1.2617 0.0640 -3.4600 + 16.000 1.2886 0.0717 -3.7722 + 17.000 1.3161 0.0798 -4.1116 + 18.000 1.3390 0.0889 -4.4496 + 19.000 1.3617 0.0985 -4.7969 + 20.000 1.3762 0.1095 -5.1410 + 21.000 1.3913 0.1207 -5.4920 + 22.000 1.4044 0.1325 -5.8568 + 23.000 1.4088 0.1454 -6.1886 + 24.000 1.4222 0.1569 -6.5916 + 25.000 1.4229 0.1701 -6.9257 + 26.000 1.4236 0.1831 -7.2526 + 27.000 1.4198 0.1966 -7.5420 + 28.000 1.4120 0.2107 -7.7888 + 29.000 1.3826 0.2276 -7.8548 + 30.000 1.3666 0.2428 -7.9826 + 40.000 1.1106 0.4507 -1.0500 + 50.000 0.9018 0.6735 -1.0500 + 60.000 0.6891 0.8854 -1.0500 + 70.000 0.4613 1.0619 -1.0500 + 80.000 0.2255 1.1829 -1.0500 + 90.000 0.0000 1.2355 -1.0500 + 100.000 -0.1579 1.1829 -1.0500 + 110.000 -0.3229 1.0619 -1.0500 + 120.000 -0.4824 0.8854 -1.0500 + 130.000 -0.6312 0.6735 -1.0500 + 140.000 -0.7775 0.4507 -1.0500 + 150.000 -0.9566 0.2428 -1.0500 + 160.000 -0.6377 0.0740 -1.0500 + 170.000 -0.3188 0.0265 -1.0500 + 180.000 0.0000 0.0265 -1.0500 +! ------------------------------------------------------------------------------ +! data for table 3 +! ------------------------------------------------------------------------------ + 6.000 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +False InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ +! Table of aerodynamics coefficients + 71 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cpmin +! (deg) (-) (-) (-) + -180.000 0.0000 0.0273 -1.0500 + -170.000 0.3307 0.0273 -1.0500 + -160.000 0.6614 0.0659 -1.0500 + -150.000 0.9922 0.2354 -1.0500 + -140.000 0.7991 0.4443 -1.0500 + -130.000 0.6440 0.6682 -1.0500 + -120.000 0.4893 0.8814 -1.0500 + -110.000 0.3258 1.0594 -1.0500 + -100.000 0.1586 1.1821 -1.0500 + -90.000 0.0000 1.2363 -1.0500 + -80.000 -0.1586 1.1821 -1.0500 + -70.000 -0.3258 1.0594 -1.0500 + -60.000 -0.4893 0.8814 -1.0500 + -50.000 -0.6440 0.6682 -1.0500 + -40.000 -0.7991 0.4443 -1.0500 + -30.000 -0.9922 0.2354 -1.0500 + -20.000 -0.7259 0.1333 -1.0500 + -10.000 -0.6565 0.0312 -2.5308 + -9.000 -0.6153 0.0291 -2.2680 + -8.000 -0.5760 0.0277 -2.0253 + -7.000 -0.4843 0.0269 -1.7079 + -6.000 -0.3829 0.0261 -1.4501 + -5.000 -0.2719 0.0254 -1.2506 + -4.000 -0.1571 0.0250 -1.0648 + -3.000 -0.0409 0.0245 -0.9496 + -2.000 0.0773 0.0237 -0.9639 + -1.000 0.1974 0.0234 -1.0472 + 0.000 0.3173 0.0234 -1.1354 + 1.000 0.4378 0.0234 -1.2266 + 2.000 0.5540 0.0237 -1.3159 + 4.000 0.7767 0.0246 -1.5044 + 5.000 0.8722 0.0257 -1.5946 + 6.000 0.9556 0.0269 -1.6904 + 7.000 1.0185 0.0277 -1.8002 + 8.000 1.0788 0.0289 -1.9584 + 9.000 1.1126 0.0313 -2.1073 + 10.000 1.1482 0.0346 -2.2605 + 11.000 1.1714 0.0390 -2.4300 + 12.000 1.2007 0.0438 -2.6851 + 13.000 1.2270 0.0496 -2.9404 + 14.000 1.2643 0.0552 -3.2479 + 15.000 1.2937 0.0619 -3.5495 + 16.000 1.3227 0.0691 -3.8735 + 17.000 1.3492 0.0771 -4.2206 + 19.000 1.3921 0.0955 -4.9136 + 20.000 1.4242 0.1039 -5.3363 + 21.000 1.4362 0.1152 -5.6847 + 22.000 1.4437 0.1275 -6.0421 + 23.000 1.4482 0.1403 -6.3916 + 24.000 1.4544 0.1528 -6.7718 + 25.000 1.4570 0.1657 -7.1295 + 26.000 1.4545 0.1791 -7.4507 + 27.000 1.4477 0.1930 -7.7327 + 28.000 1.4396 0.2069 -7.9910 + 29.000 1.4298 0.2210 -8.2200 + 30.000 1.4174 0.2354 -8.4060 + 40.000 1.1415 0.4443 -1.0500 + 50.000 0.9200 0.6682 -1.0500 + 60.000 0.6990 0.8814 -1.0500 + 70.000 0.4656 1.0594 -1.0500 + 80.000 0.2266 1.1821 -1.0500 + 90.000 0.0000 1.2363 -1.0500 + 100.000 -0.1586 1.1821 -1.0500 + 110.000 -0.3258 1.0594 -1.0500 + 120.000 -0.4893 0.8814 -1.0500 + 130.000 -0.6440 0.6682 -1.0500 + 140.000 -0.7991 0.4443 -1.0500 + 150.000 -0.9922 0.2354 -1.0500 + 160.000 -0.6614 0.0659 -1.0500 + 170.000 -0.3307 0.0273 -1.0500 + 180.000 0.0000 0.0273 -1.0500 +! ------------------------------------------------------------------------------ +! data for table 4 +! ------------------------------------------------------------------------------ + 8.000 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +False InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ +! Table of aerodynamics coefficients + 62 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cpmin +! (deg) (-) (-) (-) + -180.000 0.0000 0.0273 -1.0500 + -170.000 0.3963 0.0273 -1.0500 + -160.000 0.7927 0.0815 -1.0500 + -150.000 0.9345 0.2497 -1.0500 + -140.000 0.7640 0.4570 -1.0500 + -130.000 0.6233 0.6789 -1.0500 + -120.000 0.4781 0.8897 -1.0500 + -110.000 0.3211 1.0650 -1.0500 + -100.000 0.1575 1.1850 -1.0500 + -90.000 0.0000 1.2363 -1.0500 + -80.000 -0.1575 1.1850 -1.0500 + -70.000 -0.3211 1.0650 -1.0500 + -60.000 -0.4781 0.8897 -1.0500 + -50.000 -0.6233 0.6789 -1.0500 + -40.000 -0.7640 0.4570 -1.0500 + -30.000 -0.9345 0.2497 -1.0500 + -20.000 -0.8190 0.1218 -1.0500 + -10.000 -0.6664 0.0308 -2.5594 + -9.000 -0.6387 0.0282 -2.3121 + -8.000 -0.5840 0.0273 -2.0395 + -5.000 -0.2715 0.0252 -1.2500 + -4.000 -0.1565 0.0247 -1.0642 + -3.000 -0.0386 0.0243 -0.9387 + -2.000 0.0795 0.0237 -0.9652 + -1.000 0.1995 0.0234 -1.0481 + 0.000 0.3206 0.0233 -1.1376 + 1.000 0.4392 0.0233 -1.2274 + 2.000 0.5554 0.0235 -1.3173 + 3.000 0.6697 0.0239 -1.4100 + 4.000 0.7759 0.0247 -1.4949 + 6.000 0.9617 0.0267 -1.6893 + 7.000 1.0370 0.0273 -1.8165 + 8.000 1.0937 0.0284 -1.9758 + 9.000 1.1244 0.0309 -2.1223 + 11.000 1.1836 0.0383 -2.4539 + 12.000 1.2209 0.0425 -2.7277 + 13.000 1.2599 0.0471 -3.0189 + 15.000 1.3283 0.0587 -3.6464 + 16.000 1.3574 0.0657 -3.9802 + 17.000 1.3869 0.0731 -4.3450 + 18.000 1.4070 0.0819 -4.6864 + 19.000 1.4296 0.0909 -5.0580 + 20.000 1.4449 0.1014 -5.4198 + 22.000 1.4619 0.1250 -6.1264 + 25.000 1.4735 0.1633 -7.2267 + 26.000 1.4721 0.1765 -7.5605 + 30.000 1.3351 0.2497 -6.1002 + 40.000 1.0915 0.4570 -1.0500 + 50.000 0.8905 0.6789 -1.0500 + 60.000 0.6831 0.8897 -1.0500 + 70.000 0.4587 1.0650 -1.0500 + 80.000 0.2249 1.1850 -1.0500 + 90.000 0.0000 1.2363 -1.0500 + 100.000 -0.1575 1.1850 -1.0500 + 110.000 -0.3211 1.0650 -1.0500 + 120.000 -0.4781 0.8897 -1.0500 + 130.000 -0.6233 0.6789 -1.0500 + 140.000 -0.7640 0.4570 -1.0500 + 150.000 -0.9345 0.2497 -1.0500 + 160.000 -0.7927 0.0815 -1.0500 + 170.000 -0.3963 0.0273 -1.0500 + 180.000 0.0000 0.0273 -1.0500 +! ------------------------------------------------------------------------------ +! data for table 5 +! ------------------------------------------------------------------------------ + 10.000 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +False InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ +! Table of aerodynamics coefficients + 67 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cpmin +! (deg) (-) (-) (-) + -180.000 0.0000 0.0273 -1.0500 + -170.000 0.3420 0.0273 -1.0500 + -160.000 0.6842 0.0565 -1.0500 + -150.000 1.0262 0.2268 -1.0500 + -140.000 0.8198 0.4367 -1.0500 + -130.000 0.6563 0.6619 -1.0500 + -120.000 0.4958 0.8765 -1.0500 + -110.000 0.3287 1.0560 -1.0500 + -100.000 0.1593 1.1804 -1.0500 + -90.000 0.0000 1.2363 -1.0500 + -80.000 -0.1593 1.1804 -1.0500 + -70.000 -0.3287 1.0560 -1.0500 + -60.000 -0.4958 0.8765 -1.0500 + -50.000 -0.6563 0.6619 -1.0500 + -40.000 -0.8198 0.4367 -1.0500 + -30.000 -1.0262 0.2268 -1.0500 + -20.000 -0.7455 0.1287 -1.0500 + -10.000 -0.6641 0.0307 -2.5362 + -9.000 -0.6680 0.0278 -2.3705 + -8.000 -0.5909 0.0270 -2.0519 + -6.000 -0.3842 0.0255 -1.4542 + -4.000 -0.1556 0.0245 -1.0634 + -3.000 -0.0378 0.0242 -0.9399 + -2.000 0.0809 0.0237 -0.9660 + -1.000 0.2015 0.0233 -1.0494 + 0.000 0.3219 0.0232 -1.1383 + 1.000 0.4399 0.0233 -1.2279 + 2.000 0.5557 0.0235 -1.3193 + 4.000 0.7740 0.0248 -1.4904 + 5.000 0.8707 0.0258 -1.5838 + 6.000 0.9649 0.0266 -1.6955 + 7.000 1.0572 0.0272 -1.8344 + 8.000 1.1003 0.0283 -1.9832 + 9.000 1.1403 0.0303 -2.1425 + 10.000 1.1576 0.0340 -2.2577 + 11.000 1.2042 0.0371 -2.4950 + 12.000 1.2389 0.0413 -2.7658 + 13.000 1.2767 0.0460 -3.0586 + 14.000 1.3142 0.0511 -3.3735 + 16.000 1.3779 0.0638 -4.0437 + 17.000 1.4021 0.0715 -4.3944 + 18.000 1.4265 0.0798 -4.7538 + 19.000 1.4454 0.0891 -5.1180 + 20.000 1.4597 0.0995 -5.4792 + 21.000 1.4671 0.1111 -5.8193 + 24.000 1.5049 0.1452 -7.0494 + 25.000 1.5085 0.1578 -7.4313 + 26.000 1.5089 0.1708 -7.7900 + 27.000 1.5050 0.1839 -8.1148 + 28.000 1.4955 0.1978 -8.3910 + 29.000 1.4817 0.2122 -8.6188 + 30.000 1.4660 0.2268 -8.8098 + 40.000 1.1712 0.4367 -1.0500 + 50.000 0.9375 0.6619 -1.0500 + 60.000 0.7083 0.8765 -1.0500 + 70.000 0.4696 1.0560 -1.0500 + 80.000 0.2276 1.1804 -1.0500 + 90.000 0.0000 1.2363 -1.0500 + 100.000 -0.1593 1.1804 -1.0500 + 110.000 -0.3287 1.0560 -1.0500 + 120.000 -0.4958 0.8765 -1.0500 + 130.000 -0.6563 0.6619 -1.0500 + 140.000 -0.8198 0.4367 -1.0500 + 150.000 -1.0262 0.2268 -1.0500 + 160.000 -0.6842 0.0565 -1.0500 + 170.000 -0.3420 0.0273 -1.0500 + 180.000 0.0000 0.0273 -1.0500 +! ------------------------------------------------------------------------------ +! data for table 6 +! ------------------------------------------------------------------------------ + 12.000 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +False InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ +! Table of aerodynamics coefficients + 68 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cpmin +! (deg) (-) (-) (-) + -180.000 0.0000 0.0273 -1.0500 + -170.000 0.3603 0.0273 -1.0500 + -160.000 0.7204 0.0597 -1.0500 + -150.000 1.0186 0.2297 -1.0500 + -140.000 0.8152 0.4393 -1.0500 + -130.000 0.6535 0.6640 -1.0500 + -120.000 0.4943 0.8781 -1.0500 + -110.000 0.3281 1.0571 -1.0500 + -100.000 0.1591 1.1810 -1.0500 + -90.000 0.0000 1.2363 -1.0500 + -80.000 -0.1591 1.1810 -1.0500 + -70.000 -0.3281 1.0571 -1.0500 + -60.000 -0.4943 0.8781 -1.0500 + -50.000 -0.6535 0.6640 -1.0500 + -40.000 -0.8152 0.4393 -1.0500 + -30.000 -1.0186 0.2297 -1.0500 + -20.000 -0.7743 0.1250 -1.0500 + -10.000 -0.6770 0.0301 -2.5650 + -7.000 -0.4925 0.0261 -1.7218 + -6.000 -0.3833 0.0255 -1.4432 + -5.000 -0.2711 0.0248 -1.2500 + -4.000 -0.1555 0.0244 -1.0630 + -3.000 -0.0370 0.0241 -0.9427 + -2.000 0.0825 0.0237 -0.9667 + -1.000 0.2026 0.0232 -1.0502 + 0.000 0.3227 0.0232 -1.1385 + 1.000 0.4406 0.0232 -1.2287 + 2.000 0.5565 0.0234 -1.3154 + 3.000 0.6691 0.0239 -1.4003 + 4.000 0.7744 0.0247 -1.4940 + 5.000 0.8714 0.0257 -1.5865 + 6.000 0.9716 0.0263 -1.7018 + 7.000 1.0646 0.0270 -1.8417 + 8.000 1.1070 0.0281 -1.9911 + 10.000 1.1726 0.0332 -2.2830 + 11.000 1.2166 0.0364 -2.5199 + 12.000 1.2588 0.0401 -2.8083 + 13.000 1.2986 0.0444 -3.1107 + 14.000 1.3278 0.0502 -3.4075 + 15.000 1.3609 0.0560 -3.7370 + 17.000 1.4166 0.0702 -4.4417 + 18.000 1.4395 0.0784 -4.7983 + 19.000 1.4582 0.0877 -5.1665 + 20.000 1.4677 0.0985 -5.5106 + 22.000 1.5073 0.1186 -6.3371 + 23.000 1.5150 0.1307 -6.7366 + 24.000 1.5205 0.1430 -7.1348 + 25.000 1.5231 0.1558 -7.5156 + 26.000 1.5222 0.1688 -7.8715 + 27.000 1.5151 0.1824 -8.1811 + 28.000 1.5047 0.1964 -8.4551 + 29.000 1.4923 0.2106 -8.6982 + 30.000 1.4552 0.2297 -8.2297 + 40.000 1.1645 0.4393 -1.0500 + 50.000 0.9336 0.6640 -1.0500 + 60.000 0.7062 0.8781 -1.0500 + 70.000 0.4687 1.0571 -1.0500 + 80.000 0.2274 1.1810 -1.0500 + 90.000 0.0000 1.2363 -1.0500 + 100.000 -0.1591 1.1810 -1.0500 + 110.000 -0.3281 1.0571 -1.0500 + 120.000 -0.4943 0.8781 -1.0500 + 130.000 -0.6535 0.6640 -1.0500 + 140.000 -0.8152 0.4393 -1.0500 + 150.000 -1.0186 0.2297 -1.0500 + 160.000 -0.7204 0.0597 -1.0500 + 170.000 -0.3603 0.0273 -1.0500 + 180.000 0.0000 0.0273 -1.0500 +! ------------------------------------------------------------------------------ +! data for table 7 +! ------------------------------------------------------------------------------ + 14.000 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +False InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ +! Table of aerodynamics coefficients + 64 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cpmin +! (deg) (-) (-) (-) + -180.000 0.0000 0.0273 -1.0500 + -170.000 0.3472 0.0273 -1.0500 + -160.000 0.6943 0.0527 -1.0500 + -150.000 1.0415 0.2232 -1.0500 + -140.000 0.8291 0.4335 -1.0500 + -130.000 0.6617 0.6592 -1.0500 + -120.000 0.4987 0.8744 -1.0500 + -110.000 0.3299 1.0546 -1.0500 + -100.000 0.1596 1.1796 -1.0500 + -90.000 0.0000 1.2363 -1.0500 + -80.000 -0.1596 1.1796 -1.0500 + -70.000 -0.3299 1.0546 -1.0500 + -60.000 -0.4987 0.8744 -1.0500 + -50.000 -0.6617 0.6592 -1.0500 + -40.000 -0.8291 0.4335 -1.0500 + -30.000 -1.0415 0.2232 -1.0500 + -20.000 -0.7623 0.1264 -1.0500 + -10.000 -0.6901 0.0296 -2.5924 + -9.000 -0.6710 0.0277 -2.3634 + -8.000 -0.5974 0.0265 -2.0643 + -6.000 -0.3832 0.0254 -1.4409 + -5.000 -0.2711 0.0247 -1.2497 + -4.000 -0.1554 0.0242 -1.0629 + -3.000 -0.0362 0.0240 -0.9430 + -2.000 0.0836 0.0236 -0.9674 + -1.000 0.2031 0.0232 -1.0504 + 0.000 0.3237 0.0231 -1.1393 + 1.000 0.4395 0.0233 -1.2289 + 2.000 0.5564 0.0234 -1.3146 + 3.000 0.6678 0.0240 -1.3986 + 5.000 0.8744 0.0256 -1.5898 + 6.000 0.9745 0.0263 -1.7051 + 7.000 1.0719 0.0268 -1.8489 + 8.000 1.1111 0.0279 -1.9955 + 11.000 1.2280 0.0358 -2.5425 + 12.000 1.2701 0.0394 -2.8321 + 14.000 1.3483 0.0485 -3.4590 + 16.000 1.4021 0.0617 -4.1188 + 18.000 1.4504 0.0773 -4.8357 + 21.000 1.5090 0.1056 -6.0025 + 22.000 1.5189 0.1170 -6.3899 + 23.000 1.5276 0.1289 -6.8015 + 24.000 1.5322 0.1413 -7.1982 + 25.000 1.5338 0.1542 -7.5766 + 26.000 1.5294 0.1677 -7.9162 + 27.000 1.5225 0.1813 -8.2290 + 28.000 1.5133 0.1950 -8.5152 + 29.000 1.5021 0.2090 -8.7703 + 30.000 1.4878 0.2232 -8.9852 + 40.000 1.1844 0.4335 -1.0500 + 50.000 0.9454 0.6592 -1.0500 + 60.000 0.7125 0.8744 -1.0500 + 70.000 0.4714 1.0546 -1.0500 + 80.000 0.2281 1.1796 -1.0500 + 90.000 0.0000 1.2363 -1.0500 + 100.000 -0.1596 1.1796 -1.0500 + 110.000 -0.3299 1.0546 -1.0500 + 120.000 -0.4987 0.8744 -1.0500 + 130.000 -0.6617 0.6592 -1.0500 + 140.000 -0.8291 0.4335 -1.0500 + 150.000 -1.0415 0.2232 -1.0500 + 160.000 -0.6943 0.0527 -1.0500 + 170.000 -0.3472 0.0273 -1.0500 + 180.000 0.0000 0.0273 -1.0500 \ No newline at end of file diff --git a/example/MHK_RM1_Floating/Airfoils/NACA6_0259_coords.txt b/example/MHK_RM1_Floating/Airfoils/NACA6_0259_coords.txt new file mode 100644 index 00000000..94bdcf9e --- /dev/null +++ b/example/MHK_RM1_Floating/Airfoils/NACA6_0259_coords.txt @@ -0,0 +1,47 @@ + 40 NumCoords ! The number of coordinates in the airfoil shape file (including an extra coordinate for airfoil reference). Set to zero if coordinates not included. +! ......... x-y coordinates are next if NumCoords > 0 ............. +! x-y coordinate of airfoil reference +! x/c y/c + 0.25 0 +! coordinates of airfoil shape +! NACA6_0259 Airfoil +! x/c y/c + 0.000000 0.000000 + 0.006819 0.022584 + 0.027091 0.047510 + 0.060263 0.073301 + 0.105430 0.097140 + 0.161359 0.117917 + 0.226526 0.134137 + 0.299152 0.144379 + 0.377257 0.146668 + 0.458710 0.140419 + 0.541290 0.127194 + 0.622743 0.109034 + 0.700848 0.088223 + 0.773474 0.067204 + 0.838641 0.048007 + 0.894570 0.031887 + 0.939737 0.019298 + 0.972909 0.010124 + 0.993181 0.003839 + 1.000000 0.000000 + 0.993181 -0.001378 + 0.972909 -0.002676 + 0.939737 -0.005710 + 0.894570 -0.011838 + 0.838641 -0.021843 + 0.773474 -0.035786 + 0.700848 -0.052933 + 0.622743 -0.071538 + 0.541290 -0.089257 + 0.458710 -0.103644 + 0.377257 -0.112299 + 0.299152 -0.113402 + 0.226526 -0.107598 + 0.161359 -0.096465 + 0.105430 -0.081252 + 0.060263 -0.062864 + 0.027091 -0.042119 + 0.006819 -0.020381 + 0.000000 0.000000 \ No newline at end of file diff --git a/example/MHK_RM1_Floating/Airfoils/NACA6_0276.dat b/example/MHK_RM1_Floating/Airfoils/NACA6_0276.dat new file mode 100644 index 00000000..05644926 --- /dev/null +++ b/example/MHK_RM1_Floating/Airfoils/NACA6_0276.dat @@ -0,0 +1,560 @@ +! ------------ AirfoilInfo v1.01.x Input File ---------------------------------- +! NACA6_0276 airfoil, data based on values used for the design of the RM1 tidal current turbine. +! line +! line +! ------------------------------------------------------------------------------ +"default" InterpOrd ! Interpolation order to use for quasi-steady table lookup {1=linear; 3=cubic spline; "default"} [default=1] + 1.0 NonDimArea ! The non-dimensional area of the airfoil (area/chord^2) (set to 1.0 if unsure or unneeded) +@"NACA6_0276_coords.txt" NumCoords ! The number of coordinates in the airfoil shape file. Set to zero if coordinates not included. +"unused" BL_file ! The file name including the boundary layer characteristics of the profile. Ignored if the aeroacoustic module is not called. + 7 NumTabs ! Number of airfoil tables in this file. +! ------------------------------------------------------------------------------ +! data for table 1 +! ------------------------------------------------------------------------------ + 2.000 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +False InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ +! Table of aerodynamics coefficients + 72 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cpmin +! (deg) (-) (-) (-) + -180.000 0.0000 0.0237 -1.0947 + -170.000 0.2972 0.0237 -1.0947 + -160.000 0.5944 0.0815 -1.0947 + -150.000 0.8917 0.2455 -1.0947 + -140.000 0.7334 0.4476 -1.0947 + -130.000 0.6013 0.6637 -1.0947 + -120.000 0.4631 0.8690 -1.0947 + -110.000 0.3120 1.0395 -1.0947 + -100.000 0.1534 1.1557 -1.0947 + -90.000 0.0000 1.2050 -1.0947 + -80.000 -0.1534 1.1557 -1.0947 + -70.000 -0.3120 1.0395 -1.0947 + -60.000 -0.4631 0.8690 -1.0947 + -50.000 -0.6013 0.6637 -1.0947 + -40.000 -0.7334 0.4476 -1.0947 + -30.000 -0.8917 0.2455 -1.0947 + -20.000 -0.6461 0.1386 -1.0947 + -10.000 -0.5722 0.0316 -2.3958 + -9.000 -0.5433 0.0285 -2.1764 + -8.000 -0.5145 0.0260 -1.9643 + -7.000 -0.4633 0.0248 -1.7200 + -6.000 -0.3726 0.0238 -1.4829 + -5.000 -0.2695 0.0231 -1.2946 + -4.000 -0.1619 0.0224 -1.1182 + -3.000 -0.0521 0.0215 -1.0047 + -2.000 0.0639 0.0213 -1.0040 + -1.000 0.1795 0.0212 -1.0841 + 0.000 0.2946 0.0213 -1.1688 + 1.000 0.4103 0.0213 -1.2561 + 2.000 0.5242 0.0215 -1.3432 + 3.000 0.6361 0.0216 -1.4336 + 4.000 0.7437 0.0220 -1.5246 + 5.000 0.8498 0.0224 -1.6245 + 6.000 0.9364 0.0235 -1.7280 + 7.000 0.9713 0.0251 -1.8062 + 8.000 1.0028 0.0273 -1.9267 + 9.000 1.0414 0.0300 -2.0719 + 10.000 1.0814 0.0333 -2.2235 + 11.000 1.0890 0.0389 -2.3357 + 12.000 1.1174 0.0440 -2.5748 + 13.000 1.1266 0.0516 -2.7784 + 14.000 1.1514 0.0584 -3.0308 + 15.000 1.1691 0.0666 -3.2770 + 16.000 1.1962 0.0746 -3.5677 + 17.000 1.2199 0.0833 -3.8669 + 18.000 1.2419 0.0928 -4.1831 + 19.000 1.2624 0.1028 -4.4997 + 20.000 1.2802 0.1136 -4.8265 + 21.000 1.2968 0.1246 -5.1610 + 22.000 1.3155 0.1353 -5.5203 + 23.000 1.3236 0.1477 -5.8461 + 24.000 1.3300 0.1602 -6.1673 + 25.000 1.3308 0.1732 -6.4703 + 26.000 1.3263 0.1870 -6.7296 + 28.000 1.3025 0.2154 -7.1066 + 29.000 1.2849 0.2312 -7.2022 + 30.000 1.2738 0.2455 -7.3200 + 40.000 1.0478 0.4476 -1.0947 + 50.000 0.8590 0.6637 -1.0947 + 60.000 0.6615 0.8690 -1.0947 + 70.000 0.4456 1.0395 -1.0947 + 80.000 0.2191 1.1557 -1.0947 + 90.000 0.0000 1.2050 -1.0947 + 100.000 -0.1534 1.1557 -1.0947 + 110.000 -0.3120 1.0395 -1.0947 + 120.000 -0.4631 0.8690 -1.0947 + 130.000 -0.6013 0.6637 -1.0947 + 140.000 -0.7334 0.4476 -1.0947 + 150.000 -0.8917 0.2455 -1.0947 + 160.000 -0.5944 0.0815 -1.0947 + 170.000 -0.2972 0.0237 -1.0947 + 180.000 0.0000 0.0237 -1.0947 +! ------------------------------------------------------------------------------ +! data for table 2 +! ------------------------------------------------------------------------------ + 4.000 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +False InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ +! Table of aerodynamics coefficients + 69 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cpmin +! (deg) (-) (-) (-) + -180.000 0.0000 0.0413 -1.0947 + -170.000 0.3115 0.0413 -1.0947 + -160.000 0.6231 0.0877 -1.0947 + -150.000 0.9346 0.2526 -1.0947 + -140.000 0.7596 0.4558 -1.0947 + -130.000 0.6167 0.6734 -1.0947 + -120.000 0.4714 0.8804 -1.0947 + -110.000 0.3155 1.0529 -1.0947 + -100.000 0.1542 1.1712 -1.0947 + -90.000 0.0000 1.2225 -1.0947 + -80.000 -0.1542 1.1712 -1.0947 + -70.000 -0.3155 1.0529 -1.0947 + -60.000 -0.4714 0.8804 -1.0947 + -50.000 -0.6167 0.6734 -1.0947 + -40.000 -0.7596 0.4558 -1.0947 + -30.000 -0.9346 0.2526 -1.0947 + -20.000 -0.6829 0.1496 -1.0947 + -10.000 -0.6161 0.0466 -2.4883 + -9.000 -0.5712 0.0443 -2.2295 + -8.000 -0.5526 0.0423 -2.0298 + -7.000 -0.4716 0.0413 -1.7349 + -6.000 -0.3725 0.0405 -1.4832 + -5.000 -0.2677 0.0398 -1.2929 + -4.000 -0.1561 0.0394 -1.1123 + -3.000 -0.0432 0.0387 -0.9986 + -1.000 0.1888 0.0379 -1.0895 + 0.000 0.3061 0.0378 -1.1760 + 1.000 0.4213 0.0380 -1.2632 + 2.000 0.5378 0.0380 -1.3520 + 5.000 0.8552 0.0396 -1.6272 + 6.000 0.9306 0.0410 -1.7249 + 7.000 0.9823 0.0421 -1.8149 + 9.000 1.0790 0.0457 -2.1183 + 10.000 1.0980 0.0496 -2.2449 + 11.000 1.1311 0.0536 -2.4167 + 12.000 1.1458 0.0595 -2.6346 + 13.000 1.1730 0.0652 -2.8826 + 14.000 1.2004 0.0715 -3.1545 + 15.000 1.2328 0.0779 -3.4495 + 16.000 1.2590 0.0855 -3.7545 + 17.000 1.2859 0.0934 -4.0861 + 18.000 1.3082 0.1022 -4.4164 + 19.000 1.3304 0.1116 -4.7557 + 20.000 1.3446 0.1223 -5.0919 + 21.000 1.3594 0.1333 -5.4348 + 22.000 1.3722 0.1448 -5.7913 + 23.000 1.3765 0.1574 -6.1155 + 24.000 1.3896 0.1686 -6.5092 + 25.000 1.3903 0.1816 -6.8357 + 26.000 1.3909 0.1943 -7.1550 + 27.000 1.3872 0.2075 -7.4378 + 28.000 1.3796 0.2212 -7.6789 + 29.000 1.3509 0.2378 -7.7434 + 30.000 1.3352 0.2526 -7.8683 + 40.000 1.0851 0.4558 -1.0947 + 50.000 0.8811 0.6734 -1.0947 + 60.000 0.6733 0.8804 -1.0947 + 70.000 0.4507 1.0529 -1.0947 + 80.000 0.2203 1.1712 -1.0947 + 90.000 0.0000 1.2225 -1.0947 + 100.000 -0.1542 1.1712 -1.0947 + 110.000 -0.3155 1.0529 -1.0947 + 120.000 -0.4714 0.8804 -1.0947 + 130.000 -0.6167 0.6734 -1.0947 + 140.000 -0.7596 0.4558 -1.0947 + 150.000 -0.9346 0.2526 -1.0947 + 160.000 -0.6231 0.0877 -1.0947 + 170.000 -0.3115 0.0413 -1.0947 + 180.000 0.0000 0.0413 -1.0947 +! ------------------------------------------------------------------------------ +! data for table 3 +! ------------------------------------------------------------------------------ + 6.000 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +False InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ +! Table of aerodynamics coefficients + 71 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cpmin +! (deg) (-) (-) (-) + -180.000 0.0000 0.0427 -1.0947 + -170.000 0.3231 0.0427 -1.0947 + -160.000 0.6463 0.0804 -1.0947 + -150.000 0.9694 0.2461 -1.0947 + -140.000 0.7808 0.4501 -1.0947 + -130.000 0.6292 0.6689 -1.0947 + -120.000 0.4780 0.8773 -1.0947 + -110.000 0.3184 1.0511 -1.0947 + -100.000 0.1550 1.1711 -1.0947 + -90.000 0.0000 1.2239 -1.0947 + -80.000 -0.1550 1.1711 -1.0947 + -70.000 -0.3184 1.0511 -1.0947 + -60.000 -0.4780 0.8773 -1.0947 + -50.000 -0.6292 0.6689 -1.0947 + -40.000 -0.7808 0.4501 -1.0947 + -30.000 -0.9694 0.2461 -1.0947 + -20.000 -0.7092 0.1463 -1.0947 + -10.000 -0.6414 0.0466 -2.5416 + -9.000 -0.6012 0.0445 -2.2848 + -8.000 -0.5628 0.0432 -2.0477 + -7.000 -0.4732 0.0423 -1.7376 + -6.000 -0.3741 0.0415 -1.4857 + -5.000 -0.2657 0.0409 -1.2907 + -4.000 -0.1535 0.0405 -1.1092 + -3.000 -0.0399 0.0400 -0.9966 + -2.000 0.0755 0.0393 -1.0106 + -1.000 0.1929 0.0390 -1.0920 + 0.000 0.3100 0.0390 -1.1782 + 1.000 0.4277 0.0390 -1.2673 + 2.000 0.5413 0.0393 -1.3545 + 4.000 0.7589 0.0401 -1.5387 + 5.000 0.8522 0.0412 -1.6269 + 6.000 0.9337 0.0423 -1.7204 + 7.000 0.9951 0.0432 -1.8277 + 8.000 1.0541 0.0443 -1.9823 + 9.000 1.0870 0.0467 -2.1278 + 10.000 1.1218 0.0498 -2.2774 + 11.000 1.1445 0.0541 -2.4431 + 12.000 1.1732 0.0589 -2.6923 + 13.000 1.1989 0.0645 -2.9418 + 14.000 1.2353 0.0700 -3.2423 + 15.000 1.2640 0.0765 -3.5369 + 16.000 1.2923 0.0836 -3.8535 + 17.000 1.3183 0.0914 -4.1926 + 19.000 1.3602 0.1094 -4.8697 + 20.000 1.3915 0.1176 -5.2827 + 21.000 1.4032 0.1286 -5.6231 + 22.000 1.4106 0.1406 -5.9723 + 23.000 1.4149 0.1531 -6.3138 + 24.000 1.4210 0.1654 -6.6853 + 25.000 1.4236 0.1780 -7.0348 + 26.000 1.4211 0.1910 -7.3486 + 27.000 1.4145 0.2046 -7.6241 + 28.000 1.4066 0.2183 -7.8765 + 29.000 1.3970 0.2320 -8.1002 + 30.000 1.3848 0.2461 -8.2820 + 40.000 1.1153 0.4501 -1.0947 + 50.000 0.8989 0.6689 -1.0947 + 60.000 0.6829 0.8773 -1.0947 + 70.000 0.4549 1.0511 -1.0947 + 80.000 0.2214 1.1711 -1.0947 + 90.000 0.0000 1.2239 -1.0947 + 100.000 -0.1550 1.1711 -1.0947 + 110.000 -0.3184 1.0511 -1.0947 + 120.000 -0.4780 0.8773 -1.0947 + 130.000 -0.6292 0.6689 -1.0947 + 140.000 -0.7808 0.4501 -1.0947 + 150.000 -0.9694 0.2461 -1.0947 + 160.000 -0.6463 0.0804 -1.0947 + 170.000 -0.3231 0.0427 -1.0947 + 180.000 0.0000 0.0427 -1.0947 +! ------------------------------------------------------------------------------ +! data for table 4 +! ------------------------------------------------------------------------------ + 8.000 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +False InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ +! Table of aerodynamics coefficients + 62 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cpmin +! (deg) (-) (-) (-) + -180.000 0.0000 0.0427 -1.0947 + -170.000 0.3872 0.0427 -1.0947 + -160.000 0.7745 0.0957 -1.0947 + -150.000 0.9131 0.2601 -1.0947 + -140.000 0.7465 0.4626 -1.0947 + -130.000 0.6090 0.6794 -1.0947 + -120.000 0.4672 0.8854 -1.0947 + -110.000 0.3137 1.0567 -1.0947 + -100.000 0.1539 1.1738 -1.0947 + -90.000 0.0000 1.2239 -1.0947 + -80.000 -0.1539 1.1738 -1.0947 + -70.000 -0.3137 1.0567 -1.0947 + -60.000 -0.4672 0.8854 -1.0947 + -50.000 -0.6090 0.6794 -1.0947 + -40.000 -0.7465 0.4626 -1.0947 + -30.000 -0.9131 0.2601 -1.0947 + -20.000 -0.8002 0.1351 -1.0947 + -10.000 -0.6511 0.0461 -2.5695 + -9.000 -0.6241 0.0436 -2.3279 + -8.000 -0.5706 0.0427 -2.0616 + -5.000 -0.2653 0.0407 -1.2901 + -4.000 -0.1529 0.0402 -1.1086 + -3.000 -0.0377 0.0398 -0.9859 + -2.000 0.0776 0.0393 -1.0119 + -1.000 0.1949 0.0389 -1.0929 + 0.000 0.3132 0.0388 -1.1803 + 1.000 0.4292 0.0388 -1.2680 + 2.000 0.5426 0.0391 -1.3559 + 3.000 0.6544 0.0394 -1.4464 + 4.000 0.7581 0.0402 -1.5294 + 6.000 0.9397 0.0421 -1.7194 + 7.000 1.0132 0.0428 -1.8437 + 8.000 1.0686 0.0438 -1.9993 + 9.000 1.0986 0.0462 -2.1424 + 11.000 1.1565 0.0534 -2.4664 + 12.000 1.1929 0.0575 -2.7339 + 13.000 1.2310 0.0621 -3.0185 + 15.000 1.2979 0.0735 -3.6316 + 16.000 1.3263 0.0802 -3.9577 + 17.000 1.3551 0.0875 -4.3142 + 18.000 1.3747 0.0960 -4.6477 + 19.000 1.3968 0.1049 -5.0108 + 20.000 1.4117 0.1151 -5.3642 + 22.000 1.4284 0.1382 -6.0547 + 25.000 1.4397 0.1756 -7.1298 + 26.000 1.4383 0.1885 -7.4558 + 30.000 1.3044 0.2601 -6.0291 + 40.000 1.0665 0.4626 -1.0947 + 50.000 0.8700 0.6794 -1.0947 + 60.000 0.6674 0.8854 -1.0947 + 70.000 0.4482 1.0567 -1.0947 + 80.000 0.2198 1.1738 -1.0947 + 90.000 0.0000 1.2239 -1.0947 + 100.000 -0.1539 1.1738 -1.0947 + 110.000 -0.3137 1.0567 -1.0947 + 120.000 -0.4672 0.8854 -1.0947 + 130.000 -0.6090 0.6794 -1.0947 + 140.000 -0.7465 0.4626 -1.0947 + 150.000 -0.9131 0.2601 -1.0947 + 160.000 -0.7745 0.0957 -1.0947 + 170.000 -0.3872 0.0427 -1.0947 + 180.000 0.0000 0.0427 -1.0947 +! ------------------------------------------------------------------------------ +! data for table 5 +! ------------------------------------------------------------------------------ + 10.000 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +False InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ +! Table of aerodynamics coefficients + 67 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cpmin +! (deg) (-) (-) (-) + -180.000 0.0000 0.0427 -1.0947 + -170.000 0.3342 0.0427 -1.0947 + -160.000 0.6685 0.0713 -1.0947 + -150.000 1.0026 0.2377 -1.0947 + -140.000 0.8010 0.4427 -1.0947 + -130.000 0.6412 0.6628 -1.0947 + -120.000 0.4844 0.8724 -1.0947 + -110.000 0.3211 1.0478 -1.0947 + -100.000 0.1557 1.1694 -1.0947 + -90.000 0.0000 1.2239 -1.0947 + -80.000 -0.1557 1.1694 -1.0947 + -70.000 -0.3211 1.0478 -1.0947 + -60.000 -0.4844 0.8724 -1.0947 + -50.000 -0.6412 0.6628 -1.0947 + -40.000 -0.8010 0.4427 -1.0947 + -30.000 -1.0026 0.2377 -1.0947 + -20.000 -0.7284 0.1419 -1.0947 + -10.000 -0.6488 0.0460 -2.5468 + -9.000 -0.6526 0.0433 -2.3850 + -8.000 -0.5774 0.0424 -2.0737 + -6.000 -0.3754 0.0410 -1.4897 + -4.000 -0.1520 0.0400 -1.1078 + -3.000 -0.0370 0.0397 -0.9872 + -2.000 0.0791 0.0393 -1.0126 + -1.000 0.1969 0.0388 -1.0942 + 0.000 0.3146 0.0387 -1.1810 + 1.000 0.4298 0.0388 -1.2686 + 2.000 0.5430 0.0391 -1.3579 + 4.000 0.7562 0.0403 -1.5250 + 5.000 0.8507 0.0413 -1.6163 + 6.000 0.9427 0.0420 -1.7254 + 7.000 1.0329 0.0426 -1.8611 + 8.000 1.0750 0.0437 -2.0065 + 9.000 1.1141 0.0456 -2.1622 + 10.000 1.1311 0.0493 -2.2748 + 11.000 1.1766 0.0523 -2.5065 + 12.000 1.2105 0.0564 -2.7712 + 13.000 1.2474 0.0610 -3.0573 + 14.000 1.2841 0.0660 -3.3650 + 16.000 1.3463 0.0784 -4.0198 + 17.000 1.3700 0.0859 -4.3625 + 18.000 1.3938 0.0940 -4.7136 + 19.000 1.4123 0.1031 -5.0694 + 20.000 1.4262 0.1133 -5.4224 + 21.000 1.4334 0.1246 -5.7546 + 24.000 1.4704 0.1580 -6.9565 + 25.000 1.4739 0.1702 -7.3296 + 26.000 1.4743 0.1829 -7.6801 + 27.000 1.4705 0.1958 -7.9975 + 28.000 1.4611 0.2093 -8.2673 + 29.000 1.4477 0.2234 -8.4899 + 30.000 1.4324 0.2377 -8.6765 + 40.000 1.1443 0.4427 -1.0947 + 50.000 0.9160 0.6628 -1.0947 + 60.000 0.6921 0.8724 -1.0947 + 70.000 0.4588 1.0478 -1.0947 + 80.000 0.2223 1.1694 -1.0947 + 90.000 0.0000 1.2239 -1.0947 + 100.000 -0.1557 1.1694 -1.0947 + 110.000 -0.3211 1.0478 -1.0947 + 120.000 -0.4844 0.8724 -1.0947 + 130.000 -0.6412 0.6628 -1.0947 + 140.000 -0.8010 0.4427 -1.0947 + 150.000 -1.0026 0.2377 -1.0947 + 160.000 -0.6685 0.0713 -1.0947 + 170.000 -0.3342 0.0427 -1.0947 + 180.000 0.0000 0.0427 -1.0947 +! ------------------------------------------------------------------------------ +! data for table 6 +! ------------------------------------------------------------------------------ + 12.000 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +False InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ +! Table of aerodynamics coefficients + 68 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cpmin +! (deg) (-) (-) (-) + -180.000 0.0000 0.0427 -1.0947 + -170.000 0.3520 0.0427 -1.0947 + -160.000 0.7039 0.0744 -1.0947 + -150.000 0.9952 0.2405 -1.0947 + -140.000 0.7965 0.4453 -1.0947 + -130.000 0.6385 0.6648 -1.0947 + -120.000 0.4830 0.8740 -1.0947 + -110.000 0.3206 1.0489 -1.0947 + -100.000 0.1555 1.1699 -1.0947 + -90.000 0.0000 1.2239 -1.0947 + -80.000 -0.1555 1.1699 -1.0947 + -70.000 -0.3206 1.0489 -1.0947 + -60.000 -0.4830 0.8740 -1.0947 + -50.000 -0.6385 0.6648 -1.0947 + -40.000 -0.7965 0.4453 -1.0947 + -30.000 -0.9952 0.2405 -1.0947 + -20.000 -0.7566 0.1382 -1.0947 + -10.000 -0.6615 0.0454 -2.5749 + -7.000 -0.4812 0.0415 -1.7511 + -6.000 -0.3745 0.0410 -1.4789 + -5.000 -0.2649 0.0403 -1.2901 + -4.000 -0.1519 0.0399 -1.1074 + -3.000 -0.0361 0.0396 -0.9899 + -2.000 0.0806 0.0393 -1.0134 + -1.000 0.1980 0.0387 -1.0949 + 0.000 0.3153 0.0387 -1.1812 + 1.000 0.4305 0.0387 -1.2694 + 2.000 0.5438 0.0390 -1.3540 + 3.000 0.6538 0.0394 -1.4370 + 4.000 0.7567 0.0402 -1.5286 + 5.000 0.8514 0.0412 -1.6190 + 6.000 0.9493 0.0417 -1.7316 + 7.000 1.0402 0.0424 -1.8683 + 8.000 1.0816 0.0435 -2.0142 + 10.000 1.1457 0.0485 -2.2994 + 11.000 1.1887 0.0516 -2.5309 + 12.000 1.2299 0.0553 -2.8127 + 13.000 1.2688 0.0595 -3.1081 + 14.000 1.2973 0.0651 -3.3981 + 15.000 1.3297 0.0708 -3.7201 + 17.000 1.3841 0.0846 -4.4087 + 18.000 1.4065 0.0927 -4.7570 + 19.000 1.4248 0.1017 -5.1168 + 20.000 1.4340 0.1123 -5.4530 + 22.000 1.4727 0.1319 -6.2606 + 23.000 1.4802 0.1438 -6.6509 + 24.000 1.4856 0.1558 -7.0399 + 25.000 1.4882 0.1682 -7.4120 + 26.000 1.4872 0.1810 -7.7597 + 27.000 1.4803 0.1942 -8.0622 + 28.000 1.4702 0.2080 -8.3300 + 29.000 1.4581 0.2218 -8.5675 + 30.000 1.4218 0.2405 -8.1097 + 40.000 1.1378 0.4453 -1.0947 + 50.000 0.9121 0.6648 -1.0947 + 60.000 0.6900 0.8740 -1.0947 + 70.000 0.4579 1.0489 -1.0947 + 80.000 0.2222 1.1699 -1.0947 + 90.000 0.0000 1.2239 -1.0947 + 100.000 -0.1555 1.1699 -1.0947 + 110.000 -0.3206 1.0489 -1.0947 + 120.000 -0.4830 0.8740 -1.0947 + 130.000 -0.6385 0.6648 -1.0947 + 140.000 -0.7965 0.4453 -1.0947 + 150.000 -0.9952 0.2405 -1.0947 + 160.000 -0.7039 0.0744 -1.0947 + 170.000 -0.3520 0.0427 -1.0947 + 180.000 0.0000 0.0427 -1.0947 +! ------------------------------------------------------------------------------ +! data for table 7 +! ------------------------------------------------------------------------------ + 14.000 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +False InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ +! Table of aerodynamics coefficients + 64 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cpmin +! (deg) (-) (-) (-) + -180.000 0.0000 0.0427 -1.0947 + -170.000 0.3392 0.0427 -1.0947 + -160.000 0.6784 0.0675 -1.0947 + -150.000 1.0176 0.2342 -1.0947 + -140.000 0.8101 0.4396 -1.0947 + -130.000 0.6466 0.6602 -1.0947 + -120.000 0.4873 0.8704 -1.0947 + -110.000 0.3224 1.0465 -1.0947 + -100.000 0.1559 1.1686 -1.0947 + -90.000 0.0000 1.2239 -1.0947 + -80.000 -0.1559 1.1686 -1.0947 + -70.000 -0.3224 1.0465 -1.0947 + -60.000 -0.4873 0.8704 -1.0947 + -50.000 -0.6466 0.6602 -1.0947 + -40.000 -0.8101 0.4396 -1.0947 + -30.000 -1.0176 0.2342 -1.0947 + -20.000 -0.7448 0.1396 -1.0947 + -10.000 -0.6743 0.0450 -2.6018 + -9.000 -0.6556 0.0432 -2.3780 + -8.000 -0.5837 0.0419 -2.0858 + -6.000 -0.3744 0.0409 -1.4766 + -5.000 -0.2648 0.0402 -1.2898 + -4.000 -0.1518 0.0397 -1.1073 + -3.000 -0.0353 0.0395 -0.9902 + -2.000 0.0816 0.0392 -1.0140 + -1.000 0.1984 0.0387 -1.0951 + 0.000 0.3163 0.0386 -1.1820 + 1.000 0.4294 0.0388 -1.2695 + 2.000 0.5437 0.0390 -1.3533 + 3.000 0.6525 0.0395 -1.4353 + 5.000 0.8543 0.0411 -1.6221 + 6.000 0.9522 0.0417 -1.7348 + 7.000 1.0473 0.0422 -1.8753 + 8.000 1.0856 0.0434 -2.0185 + 11.000 1.1998 0.0511 -2.5530 + 12.000 1.2410 0.0546 -2.8360 + 14.000 1.3174 0.0635 -3.4485 + 16.000 1.3700 0.0763 -4.0931 + 18.000 1.4171 0.0916 -4.7936 + 21.000 1.4744 0.1193 -5.9336 + 22.000 1.4840 0.1304 -6.3121 + 23.000 1.4926 0.1420 -6.7143 + 24.000 1.4971 0.1541 -7.1018 + 25.000 1.4986 0.1667 -7.4716 + 26.000 1.4943 0.1799 -7.8035 + 27.000 1.4875 0.1932 -8.1091 + 28.000 1.4786 0.2066 -8.3887 + 29.000 1.4676 0.2203 -8.6380 + 30.000 1.4537 0.2342 -8.8479 + 40.000 1.1573 0.4396 -1.0947 + 50.000 0.9237 0.6602 -1.0947 + 60.000 0.6962 0.8704 -1.0947 + 70.000 0.4606 1.0465 -1.0947 + 80.000 0.2228 1.1686 -1.0947 + 90.000 0.0000 1.2239 -1.0947 + 100.000 -0.1559 1.1686 -1.0947 + 110.000 -0.3224 1.0465 -1.0947 + 120.000 -0.4873 0.8704 -1.0947 + 130.000 -0.6466 0.6602 -1.0947 + 140.000 -0.8101 0.4396 -1.0947 + 150.000 -1.0176 0.2342 -1.0947 + 160.000 -0.6784 0.0675 -1.0947 + 170.000 -0.3392 0.0427 -1.0947 + 180.000 0.0000 0.0427 -1.0947 \ No newline at end of file diff --git a/example/MHK_RM1_Floating/Airfoils/NACA6_0276_coords.txt b/example/MHK_RM1_Floating/Airfoils/NACA6_0276_coords.txt new file mode 100644 index 00000000..c2553444 --- /dev/null +++ b/example/MHK_RM1_Floating/Airfoils/NACA6_0276_coords.txt @@ -0,0 +1,47 @@ + 40 NumCoords ! The number of coordinates in the airfoil shape file (including an extra coordinate for airfoil reference). Set to zero if coordinates not included. +! ......... x-y coordinates are next if NumCoords > 0 ............. +! x-y coordinate of airfoil reference +! x/c y/c + 0.25 0 +! coordinates of airfoil shape +! NACA6_0276 Airfoil +! x/c y/c + 0.000000 0.000000 + 0.006819 0.024017 + 0.027091 0.050261 + 0.060263 0.077244 + 0.105430 0.102168 + 0.161359 0.123903 + 0.226526 0.140948 + 0.299152 0.151887 + 0.377257 0.154763 + 0.458710 0.148989 + 0.541290 0.136081 + 0.622743 0.118030 + 0.700848 0.097075 + 0.773474 0.075618 + 0.838641 0.055666 + 0.894570 0.038477 + 0.939737 0.024535 + 0.972909 0.013769 + 0.993181 0.005721 + 1.000000 0.000000 + 0.993181 -0.003319 + 0.972909 -0.006500 + 0.939737 -0.011272 + 0.894570 -0.018909 + 0.838641 -0.030129 + 0.773474 -0.044953 + 0.700848 -0.062630 + 0.622743 -0.081432 + 0.541290 -0.099052 + 0.458710 -0.113095 + 0.377257 -0.121217 + 0.299152 -0.121652 + 0.226526 -0.115046 + 0.161359 -0.102964 + 0.105430 -0.086660 + 0.060263 -0.067057 + 0.027091 -0.044998 + 0.006819 -0.021867 + 0.000000 0.000000 \ No newline at end of file diff --git a/example/MHK_RM1_Floating/Airfoils/NACA6_0329.dat b/example/MHK_RM1_Floating/Airfoils/NACA6_0329.dat new file mode 100644 index 00000000..b975b05e --- /dev/null +++ b/example/MHK_RM1_Floating/Airfoils/NACA6_0329.dat @@ -0,0 +1,560 @@ +! ------------ AirfoilInfo v1.01.x Input File ---------------------------------- +! NACA6_0329 airfoil, data based on values used for the design of the RM1 tidal current turbine. +! line +! line +! ------------------------------------------------------------------------------ +"default" InterpOrd ! Interpolation order to use for quasi-steady table lookup {1=linear; 3=cubic spline; "default"} [default=1] + 1.0 NonDimArea ! The non-dimensional area of the airfoil (area/chord^2) (set to 1.0 if unsure or unneeded) +@"NACA6_0329_coords.txt" NumCoords ! The number of coordinates in the airfoil shape file. Set to zero if coordinates not included. +"unused" BL_file ! The file name including the boundary layer characteristics of the profile. Ignored if the aeroacoustic module is not called. + 7 NumTabs ! Number of airfoil tables in this file. +! ------------------------------------------------------------------------------ +! data for table 1 +! ------------------------------------------------------------------------------ + 2.000 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +False InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ +! Table of aerodynamics coefficients + 72 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cpmin +! (deg) (-) (-) (-) + -180.000 0.0000 0.0440 -1.2342 + -170.000 0.2755 0.0440 -1.2342 + -160.000 0.5509 0.0975 -1.2342 + -150.000 0.8264 0.2495 -1.2342 + -140.000 0.6797 0.4368 -1.2342 + -130.000 0.5573 0.6371 -1.2342 + -120.000 0.4292 0.8274 -1.2342 + -110.000 0.2891 0.9854 -1.2342 + -100.000 0.1421 1.0931 -1.2342 + -90.000 0.0000 1.1387 -1.2342 + -80.000 -0.1421 1.0931 -1.2342 + -70.000 -0.2891 0.9854 -1.2342 + -60.000 -0.4292 0.8274 -1.2342 + -50.000 -0.5573 0.6371 -1.2342 + -40.000 -0.6797 0.4368 -1.2342 + -30.000 -0.8264 0.2495 -1.2342 + -20.000 -0.5988 0.1504 -1.2342 + -10.000 -0.5303 0.0513 -2.4401 + -9.000 -0.5035 0.0484 -2.2366 + -8.000 -0.4769 0.0461 -2.0401 + -7.000 -0.4294 0.0449 -1.8137 + -6.000 -0.3453 0.0440 -1.5940 + -5.000 -0.2498 0.0433 -1.4194 + -4.000 -0.1500 0.0427 -1.2559 + -3.000 -0.0483 0.0418 -1.1508 + -2.000 0.0592 0.0417 -1.1501 + -1.000 0.1663 0.0416 -1.2243 + 0.000 0.2730 0.0417 -1.3028 + 1.000 0.3803 0.0417 -1.3838 + 2.000 0.4859 0.0418 -1.4645 + 3.000 0.5895 0.0420 -1.5483 + 4.000 0.6893 0.0424 -1.6326 + 5.000 0.7876 0.0427 -1.7252 + 6.000 0.8679 0.0437 -1.8212 + 7.000 0.9002 0.0452 -1.8936 + 8.000 0.9294 0.0472 -2.0052 + 9.000 0.9652 0.0498 -2.1398 + 10.000 1.0023 0.0528 -2.2804 + 11.000 1.0093 0.0580 -2.3844 + 12.000 1.0356 0.0628 -2.6060 + 13.000 1.0441 0.0697 -2.7946 + 14.000 1.0672 0.0761 -3.0285 + 15.000 1.0835 0.0837 -3.2567 + 16.000 1.1087 0.0911 -3.5261 + 17.000 1.1306 0.0991 -3.8034 + 18.000 1.1510 0.1080 -4.0965 + 19.000 1.1700 0.1172 -4.3899 + 20.000 1.1865 0.1272 -4.6928 + 21.000 1.2019 0.1375 -5.0028 + 22.000 1.2192 0.1473 -5.3358 + 23.000 1.2267 0.1588 -5.6377 + 24.000 1.2326 0.1704 -5.9354 + 25.000 1.2334 0.1825 -6.2163 + 26.000 1.2292 0.1953 -6.4566 + 28.000 1.2072 0.2216 -6.8060 + 29.000 1.1908 0.2363 -6.8946 + 30.000 1.1805 0.2495 -7.0038 + 40.000 0.9711 0.4368 -1.2342 + 50.000 0.7961 0.6371 -1.2342 + 60.000 0.6131 0.8274 -1.2342 + 70.000 0.4130 0.9854 -1.2342 + 80.000 0.2031 1.0931 -1.2342 + 90.000 0.0000 1.1387 -1.2342 + 100.000 -0.1421 1.0931 -1.2342 + 110.000 -0.2891 0.9854 -1.2342 + 120.000 -0.4292 0.8274 -1.2342 + 130.000 -0.5573 0.6371 -1.2342 + 140.000 -0.6797 0.4368 -1.2342 + 150.000 -0.8264 0.2495 -1.2342 + 160.000 -0.5509 0.0975 -1.2342 + 170.000 -0.2755 0.0440 -1.2342 + 180.000 0.0000 0.0440 -1.2342 +! ------------------------------------------------------------------------------ +! data for table 2 +! ------------------------------------------------------------------------------ + 4.000 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +False InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ +! Table of aerodynamics coefficients + 69 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cpmin +! (deg) (-) (-) (-) + -180.000 0.0000 0.0873 -1.2342 + -170.000 0.2887 0.0873 -1.2342 + -160.000 0.5775 0.1303 -1.2342 + -150.000 0.8662 0.2831 -1.2342 + -140.000 0.7040 0.4714 -1.2342 + -130.000 0.5716 0.6732 -1.2342 + -120.000 0.4369 0.8650 -1.2342 + -110.000 0.2924 1.0248 -1.2342 + -100.000 0.1429 1.1345 -1.2342 + -90.000 0.0000 1.1821 -1.2342 + -80.000 -0.1429 1.1345 -1.2342 + -70.000 -0.2924 1.0248 -1.2342 + -60.000 -0.4369 0.8650 -1.2342 + -50.000 -0.5716 0.6732 -1.2342 + -40.000 -0.7040 0.4714 -1.2342 + -30.000 -0.8662 0.2831 -1.2342 + -20.000 -0.6329 0.1877 -1.2342 + -10.000 -0.5710 0.0922 -2.5258 + -9.000 -0.5294 0.0901 -2.2859 + -8.000 -0.5122 0.0883 -2.1009 + -7.000 -0.4370 0.0873 -1.8275 + -6.000 -0.3452 0.0866 -1.5943 + -5.000 -0.2481 0.0860 -1.4179 + -4.000 -0.1447 0.0855 -1.2505 + -3.000 -0.0401 0.0849 -1.1451 + -1.000 0.1750 0.0842 -1.2294 + 0.000 0.2837 0.0841 -1.3095 + 1.000 0.3905 0.0843 -1.3903 + 2.000 0.4984 0.0843 -1.4727 + 5.000 0.7926 0.0858 -1.7277 + 6.000 0.8625 0.0870 -1.8182 + 7.000 0.9104 0.0881 -1.9017 + 9.000 1.0001 0.0914 -2.1829 + 10.000 1.0176 0.0951 -2.3002 + 11.000 1.0483 0.0988 -2.4594 + 12.000 1.0619 0.1042 -2.6613 + 13.000 1.0871 0.1095 -2.8912 + 14.000 1.1125 0.1153 -3.1432 + 15.000 1.1426 0.1213 -3.4165 + 16.000 1.1668 0.1283 -3.6993 + 17.000 1.1917 0.1356 -4.0066 + 18.000 1.2125 0.1438 -4.3127 + 19.000 1.2331 0.1524 -4.6272 + 20.000 1.2462 0.1624 -4.9387 + 21.000 1.2599 0.1726 -5.2566 + 22.000 1.2717 0.1833 -5.5870 + 23.000 1.2757 0.1949 -5.8874 + 24.000 1.2879 0.2053 -6.2523 + 25.000 1.2885 0.2173 -6.5549 + 26.000 1.2891 0.2291 -6.8508 + 27.000 1.2857 0.2414 -7.1130 + 28.000 1.2786 0.2541 -7.3364 + 29.000 1.2520 0.2694 -7.3962 + 30.000 1.2375 0.2831 -7.5119 + 40.000 1.0057 0.4714 -1.2342 + 50.000 0.8166 0.6732 -1.2342 + 60.000 0.6240 0.8650 -1.2342 + 70.000 0.4177 1.0248 -1.2342 + 80.000 0.2042 1.1345 -1.2342 + 90.000 0.0000 1.1821 -1.2342 + 100.000 -0.1429 1.1345 -1.2342 + 110.000 -0.2924 1.0248 -1.2342 + 120.000 -0.4369 0.8650 -1.2342 + 130.000 -0.5716 0.6732 -1.2342 + 140.000 -0.7040 0.4714 -1.2342 + 150.000 -0.8662 0.2831 -1.2342 + 160.000 -0.5775 0.1303 -1.2342 + 170.000 -0.2887 0.0873 -1.2342 + 180.000 0.0000 0.0873 -1.2342 +! ------------------------------------------------------------------------------ +! data for table 3 +! ------------------------------------------------------------------------------ + 6.000 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +False InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ +! Table of aerodynamics coefficients + 71 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cpmin +! (deg) (-) (-) (-) + -180.000 0.0000 0.0908 -1.2342 + -170.000 0.2995 0.0908 -1.2342 + -160.000 0.5990 0.1258 -1.2342 + -150.000 0.8984 0.2793 -1.2342 + -140.000 0.7236 0.4684 -1.2342 + -130.000 0.5832 0.6712 -1.2342 + -120.000 0.4430 0.8643 -1.2342 + -110.000 0.2951 1.0254 -1.2342 + -100.000 0.1436 1.1366 -1.2342 + -90.000 0.0000 1.1856 -1.2342 + -80.000 -0.1436 1.1366 -1.2342 + -70.000 -0.2951 1.0254 -1.2342 + -60.000 -0.4430 0.8643 -1.2342 + -50.000 -0.5832 0.6712 -1.2342 + -40.000 -0.7236 0.4684 -1.2342 + -30.000 -0.8984 0.2793 -1.2342 + -20.000 -0.6573 0.1869 -1.2342 + -10.000 -0.5945 0.0944 -2.5752 + -9.000 -0.5572 0.0925 -2.3371 + -8.000 -0.5216 0.0912 -2.1174 + -7.000 -0.4385 0.0904 -1.8300 + -6.000 -0.3467 0.0897 -1.5966 + -5.000 -0.2462 0.0891 -1.4158 + -4.000 -0.1422 0.0888 -1.2476 + -3.000 -0.0370 0.0883 -1.1433 + -2.000 0.0700 0.0876 -1.1563 + -1.000 0.1788 0.0874 -1.2317 + 0.000 0.2873 0.0874 -1.3116 + 1.000 0.3964 0.0874 -1.3941 + 2.000 0.5017 0.0876 -1.4750 + 4.000 0.7033 0.0884 -1.6456 + 5.000 0.7898 0.0894 -1.7274 + 6.000 0.8653 0.0904 -1.8141 + 7.000 0.9223 0.0912 -1.9135 + 8.000 0.9769 0.0923 -2.0568 + 9.000 1.0075 0.0945 -2.1916 + 10.000 1.0397 0.0974 -2.3303 + 11.000 1.0607 0.1014 -2.4839 + 12.000 1.0873 0.1058 -2.7148 + 13.000 1.1111 0.1110 -2.9461 + 14.000 1.1448 0.1161 -3.2245 + 15.000 1.1715 0.1221 -3.4976 + 16.000 1.1977 0.1287 -3.7910 + 17.000 1.2217 0.1359 -4.1053 + 19.000 1.2606 0.1526 -4.7329 + 20.000 1.2896 0.1602 -5.1156 + 21.000 1.3005 0.1704 -5.4311 + 22.000 1.3073 0.1816 -5.7547 + 23.000 1.3114 0.1931 -6.0712 + 24.000 1.3170 0.2045 -6.4155 + 25.000 1.3194 0.2162 -6.7394 + 26.000 1.3171 0.2283 -7.0302 + 27.000 1.3109 0.2409 -7.2856 + 28.000 1.3036 0.2535 -7.5195 + 29.000 1.2948 0.2662 -7.7268 + 30.000 1.2835 0.2793 -7.8953 + 40.000 1.0337 0.4684 -1.2342 + 50.000 0.8331 0.6712 -1.2342 + 60.000 0.6329 0.8643 -1.2342 + 70.000 0.4216 1.0254 -1.2342 + 80.000 0.2052 1.1366 -1.2342 + 90.000 0.0000 1.1856 -1.2342 + 100.000 -0.1436 1.1366 -1.2342 + 110.000 -0.2951 1.0254 -1.2342 + 120.000 -0.4430 0.8643 -1.2342 + 130.000 -0.5832 0.6712 -1.2342 + 140.000 -0.7236 0.4684 -1.2342 + 150.000 -0.8984 0.2793 -1.2342 + 160.000 -0.5990 0.1258 -1.2342 + 170.000 -0.2995 0.0908 -1.2342 + 180.000 0.0000 0.0908 -1.2342 +! ------------------------------------------------------------------------------ +! data for table 4 +! ------------------------------------------------------------------------------ + 8.000 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +False InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ +! Table of aerodynamics coefficients + 62 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cpmin +! (deg) (-) (-) (-) + -180.000 0.0000 0.0908 -1.2342 + -170.000 0.3589 0.0908 -1.2342 + -160.000 0.7178 0.1399 -1.2342 + -150.000 0.8463 0.2923 -1.2342 + -140.000 0.6918 0.4800 -1.2342 + -130.000 0.5644 0.6809 -1.2342 + -120.000 0.4330 0.8718 -1.2342 + -110.000 0.2907 1.0306 -1.2342 + -100.000 0.1426 1.1392 -1.2342 + -90.000 0.0000 1.1856 -1.2342 + -80.000 -0.1426 1.1392 -1.2342 + -70.000 -0.2907 1.0306 -1.2342 + -60.000 -0.4330 0.8718 -1.2342 + -50.000 -0.5644 0.6809 -1.2342 + -40.000 -0.6918 0.4800 -1.2342 + -30.000 -0.8463 0.2923 -1.2342 + -20.000 -0.7416 0.1764 -1.2342 + -10.000 -0.6035 0.0940 -2.6010 + -9.000 -0.5784 0.0917 -2.3771 + -8.000 -0.5289 0.0908 -2.1303 + -5.000 -0.2459 0.0889 -1.4153 + -4.000 -0.1417 0.0885 -1.2471 + -3.000 -0.0350 0.0882 -1.1334 + -2.000 0.0720 0.0876 -1.1574 + -1.000 0.1806 0.0873 -1.2325 + 0.000 0.2903 0.0872 -1.3135 + 1.000 0.3977 0.0872 -1.3948 + 2.000 0.5029 0.0874 -1.4763 + 3.000 0.6065 0.0878 -1.5602 + 4.000 0.7026 0.0885 -1.6371 + 6.000 0.8709 0.0903 -1.8131 + 7.000 0.9390 0.0909 -1.9283 + 8.000 0.9903 0.0919 -2.0725 + 9.000 1.0182 0.0941 -2.2052 + 11.000 1.0718 0.1008 -2.5055 + 12.000 1.1056 0.1046 -2.7534 + 13.000 1.1409 0.1088 -3.0171 + 15.000 1.2029 0.1193 -3.5854 + 16.000 1.2292 0.1256 -3.8876 + 17.000 1.2559 0.1323 -4.2180 + 18.000 1.2741 0.1402 -4.5271 + 19.000 1.2946 0.1485 -4.8636 + 20.000 1.3084 0.1579 -5.1912 + 22.000 1.3238 0.1794 -5.8311 + 25.000 1.3343 0.2140 -6.8274 + 26.000 1.3330 0.2260 -7.1297 + 30.000 1.2089 0.2923 -5.8073 + 40.000 0.9884 0.4800 -1.2342 + 50.000 0.8063 0.6809 -1.2342 + 60.000 0.6186 0.8718 -1.2342 + 70.000 0.4154 1.0306 -1.2342 + 80.000 0.2037 1.1392 -1.2342 + 90.000 0.0000 1.1856 -1.2342 + 100.000 -0.1426 1.1392 -1.2342 + 110.000 -0.2907 1.0306 -1.2342 + 120.000 -0.4330 0.8718 -1.2342 + 130.000 -0.5644 0.6809 -1.2342 + 140.000 -0.6918 0.4800 -1.2342 + 150.000 -0.8463 0.2923 -1.2342 + 160.000 -0.7178 0.1399 -1.2342 + 170.000 -0.3589 0.0908 -1.2342 + 180.000 0.0000 0.0908 -1.2342 +! ------------------------------------------------------------------------------ +! data for table 5 +! ------------------------------------------------------------------------------ + 10.000 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +False InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ +! Table of aerodynamics coefficients + 67 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cpmin +! (deg) (-) (-) (-) + -180.000 0.0000 0.0908 -1.2342 + -170.000 0.3097 0.0908 -1.2342 + -160.000 0.6195 0.1173 -1.2342 + -150.000 0.9292 0.2715 -1.2342 + -140.000 0.7423 0.4615 -1.2342 + -130.000 0.5943 0.6655 -1.2342 + -120.000 0.4490 0.8598 -1.2342 + -110.000 0.2976 1.0223 -1.2342 + -100.000 0.1443 1.1350 -1.2342 + -90.000 0.0000 1.1856 -1.2342 + -80.000 -0.1443 1.1350 -1.2342 + -70.000 -0.2976 1.0223 -1.2342 + -60.000 -0.4490 0.8598 -1.2342 + -50.000 -0.5943 0.6655 -1.2342 + -40.000 -0.7423 0.4615 -1.2342 + -30.000 -0.9292 0.2715 -1.2342 + -20.000 -0.6751 0.1827 -1.2342 + -10.000 -0.6013 0.0939 -2.5800 + -9.000 -0.6049 0.0913 -2.4300 + -8.000 -0.5351 0.0905 -2.1415 + -6.000 -0.3479 0.0892 -1.6003 + -4.000 -0.1409 0.0883 -1.2463 + -3.000 -0.0343 0.0881 -1.1345 + -2.000 0.0733 0.0876 -1.1581 + -1.000 0.1825 0.0872 -1.2337 + 0.000 0.2915 0.0871 -1.3142 + 1.000 0.3984 0.0872 -1.3953 + 2.000 0.5032 0.0874 -1.4781 + 4.000 0.7008 0.0886 -1.6330 + 5.000 0.7884 0.0895 -1.7176 + 6.000 0.8737 0.0902 -1.8187 + 7.000 0.9573 0.0907 -1.9445 + 8.000 0.9963 0.0918 -2.0792 + 9.000 1.0325 0.0935 -2.2235 + 10.000 1.0483 0.0969 -2.3279 + 11.000 1.0905 0.0997 -2.5427 + 12.000 1.1219 0.1035 -2.7879 + 13.000 1.1561 0.1078 -3.0531 + 14.000 1.1901 0.1124 -3.3382 + 16.000 1.2477 0.1239 -3.9451 + 17.000 1.2697 0.1309 -4.2627 + 18.000 1.2918 0.1384 -4.5882 + 19.000 1.3089 0.1468 -4.9179 + 20.000 1.3218 0.1562 -5.2450 + 21.000 1.3285 0.1667 -5.5530 + 24.000 1.3627 0.1976 -6.6668 + 25.000 1.3660 0.2090 -7.0127 + 26.000 1.3664 0.2208 -7.3375 + 27.000 1.3628 0.2327 -7.6317 + 28.000 1.3542 0.2452 -7.8817 + 29.000 1.3417 0.2583 -8.0880 + 30.000 1.3275 0.2715 -8.2610 + 40.000 1.0605 0.4615 -1.2342 + 50.000 0.8489 0.6655 -1.2342 + 60.000 0.6414 0.8598 -1.2342 + 70.000 0.4252 1.0223 -1.2342 + 80.000 0.2061 1.1350 -1.2342 + 90.000 0.0000 1.1856 -1.2342 + 100.000 -0.1443 1.1350 -1.2342 + 110.000 -0.2976 1.0223 -1.2342 + 120.000 -0.4490 0.8598 -1.2342 + 130.000 -0.5943 0.6655 -1.2342 + 140.000 -0.7423 0.4615 -1.2342 + 150.000 -0.9292 0.2715 -1.2342 + 160.000 -0.6195 0.1173 -1.2342 + 170.000 -0.3097 0.0908 -1.2342 + 180.000 0.0000 0.0908 -1.2342 +! ------------------------------------------------------------------------------ +! data for table 6 +! ------------------------------------------------------------------------------ + 12.000 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +False InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ +! Table of aerodynamics coefficients + 68 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cpmin +! (deg) (-) (-) (-) + -180.000 0.0000 0.0908 -1.2342 + -170.000 0.3262 0.0908 -1.2342 + -160.000 0.6524 0.1202 -1.2342 + -150.000 0.9224 0.2741 -1.2342 + -140.000 0.7382 0.4639 -1.2342 + -130.000 0.5918 0.6674 -1.2342 + -120.000 0.4476 0.8613 -1.2342 + -110.000 0.2971 1.0234 -1.2342 + -100.000 0.1441 1.1355 -1.2342 + -90.000 0.0000 1.1856 -1.2342 + -80.000 -0.1441 1.1355 -1.2342 + -70.000 -0.2971 1.0234 -1.2342 + -60.000 -0.4476 0.8613 -1.2342 + -50.000 -0.5918 0.6674 -1.2342 + -40.000 -0.7382 0.4639 -1.2342 + -30.000 -0.9224 0.2741 -1.2342 + -20.000 -0.7012 0.1794 -1.2342 + -10.000 -0.6131 0.0934 -2.6061 + -7.000 -0.4460 0.0897 -1.8425 + -6.000 -0.3471 0.0892 -1.5903 + -5.000 -0.2455 0.0886 -1.4153 + -4.000 -0.1408 0.0882 -1.2460 + -3.000 -0.0335 0.0880 -1.1370 + -2.000 0.0747 0.0876 -1.1588 + -1.000 0.1835 0.0871 -1.2344 + 0.000 0.2922 0.0871 -1.3144 + 1.000 0.3990 0.0871 -1.3960 + 2.000 0.5040 0.0874 -1.4745 + 3.000 0.6059 0.0878 -1.5514 + 4.000 0.7013 0.0885 -1.6363 + 5.000 0.7890 0.0894 -1.7201 + 6.000 0.8798 0.0899 -1.8244 + 7.000 0.9640 0.0905 -1.9511 + 8.000 1.0024 0.0916 -2.0864 + 10.000 1.0619 0.0962 -2.3507 + 11.000 1.1017 0.0991 -2.5653 + 12.000 1.1399 0.1025 -2.8264 + 13.000 1.1759 0.1063 -3.1002 + 14.000 1.2023 0.1116 -3.3690 + 15.000 1.2323 0.1168 -3.6674 + 17.000 1.2828 0.1297 -4.3055 + 18.000 1.3035 0.1372 -4.6284 + 19.000 1.3205 0.1455 -4.9619 + 20.000 1.3290 0.1553 -5.2735 + 22.000 1.3649 0.1735 -6.0219 + 23.000 1.3718 0.1845 -6.3836 + 24.000 1.3769 0.1956 -6.7442 + 25.000 1.3793 0.2072 -7.0890 + 26.000 1.3784 0.2190 -7.4113 + 27.000 1.3719 0.2313 -7.6916 + 28.000 1.3626 0.2440 -7.9398 + 29.000 1.3514 0.2568 -8.1599 + 30.000 1.3177 0.2741 -7.7356 + 40.000 1.0545 0.4639 -1.2342 + 50.000 0.8454 0.6674 -1.2342 + 60.000 0.6395 0.8613 -1.2342 + 70.000 0.4244 1.0234 -1.2342 + 80.000 0.2059 1.1355 -1.2342 + 90.000 0.0000 1.1856 -1.2342 + 100.000 -0.1441 1.1355 -1.2342 + 110.000 -0.2971 1.0234 -1.2342 + 120.000 -0.4476 0.8613 -1.2342 + 130.000 -0.5918 0.6674 -1.2342 + 140.000 -0.7382 0.4639 -1.2342 + 150.000 -0.9224 0.2741 -1.2342 + 160.000 -0.6524 0.1202 -1.2342 + 170.000 -0.3262 0.0908 -1.2342 + 180.000 0.0000 0.0908 -1.2342 +! ------------------------------------------------------------------------------ +! data for table 7 +! ------------------------------------------------------------------------------ + 14.000 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +False InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ +! Table of aerodynamics coefficients + 64 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cpmin +! (deg) (-) (-) (-) + -180.000 0.0000 0.0908 -1.2342 + -170.000 0.3144 0.0908 -1.2342 + -160.000 0.6287 0.1138 -1.2342 + -150.000 0.9431 0.2683 -1.2342 + -140.000 0.7508 0.4587 -1.2342 + -130.000 0.5992 0.6631 -1.2342 + -120.000 0.4516 0.8579 -1.2342 + -110.000 0.2988 1.0211 -1.2342 + -100.000 0.1445 1.1343 -1.2342 + -90.000 0.0000 1.1856 -1.2342 + -80.000 -0.1445 1.1343 -1.2342 + -70.000 -0.2988 1.0211 -1.2342 + -60.000 -0.4516 0.8579 -1.2342 + -50.000 -0.5992 0.6631 -1.2342 + -40.000 -0.7508 0.4587 -1.2342 + -30.000 -0.9431 0.2683 -1.2342 + -20.000 -0.6902 0.1806 -1.2342 + -10.000 -0.6249 0.0929 -2.6310 + -9.000 -0.6076 0.0912 -2.4236 + -8.000 -0.5409 0.0901 -2.1527 + -6.000 -0.3470 0.0891 -1.5882 + -5.000 -0.2454 0.0885 -1.4150 + -4.000 -0.1407 0.0881 -1.2459 + -3.000 -0.0328 0.0879 -1.1374 + -2.000 0.0757 0.0875 -1.1594 + -1.000 0.1839 0.0871 -1.2346 + 0.000 0.2931 0.0870 -1.3151 + 1.000 0.3980 0.0872 -1.3962 + 2.000 0.5039 0.0874 -1.4738 + 3.000 0.6047 0.0879 -1.5498 + 5.000 0.7918 0.0893 -1.7230 + 6.000 0.8825 0.0899 -1.8274 + 7.000 0.9707 0.0904 -1.9577 + 8.000 1.0061 0.0914 -2.0904 + 11.000 1.1120 0.0986 -2.5857 + 12.000 1.1501 0.1018 -2.8480 + 14.000 1.2210 0.1100 -3.4157 + 16.000 1.2697 0.1220 -4.0131 + 18.000 1.3134 0.1361 -4.6623 + 21.000 1.3665 0.1618 -5.7189 + 22.000 1.3754 0.1721 -6.0696 + 23.000 1.3833 0.1829 -6.4424 + 24.000 1.3875 0.1941 -6.8016 + 25.000 1.3889 0.2058 -7.1442 + 26.000 1.3849 0.2179 -7.4518 + 27.000 1.3786 0.2303 -7.7351 + 28.000 1.3703 0.2427 -7.9942 + 29.000 1.3602 0.2554 -8.2252 + 30.000 1.3473 0.2683 -8.4198 + 40.000 1.0725 0.4587 -1.2342 + 50.000 0.8561 0.6631 -1.2342 + 60.000 0.6452 0.8579 -1.2342 + 70.000 0.4269 1.0211 -1.2342 + 80.000 0.2065 1.1343 -1.2342 + 90.000 0.0000 1.1856 -1.2342 + 100.000 -0.1445 1.1343 -1.2342 + 110.000 -0.2988 1.0211 -1.2342 + 120.000 -0.4516 0.8579 -1.2342 + 130.000 -0.5992 0.6631 -1.2342 + 140.000 -0.7508 0.4587 -1.2342 + 150.000 -0.9431 0.2683 -1.2342 + 160.000 -0.6287 0.1138 -1.2342 + 170.000 -0.3144 0.0908 -1.2342 + 180.000 0.0000 0.0908 -1.2342 \ No newline at end of file diff --git a/example/MHK_RM1_Floating/Airfoils/NACA6_0329_coords.txt b/example/MHK_RM1_Floating/Airfoils/NACA6_0329_coords.txt new file mode 100644 index 00000000..00d5ebe9 --- /dev/null +++ b/example/MHK_RM1_Floating/Airfoils/NACA6_0329_coords.txt @@ -0,0 +1,47 @@ + 40 NumCoords ! The number of coordinates in the airfoil shape file (including an extra coordinate for airfoil reference). Set to zero if coordinates not included. +! ......... x-y coordinates are next if NumCoords > 0 ............. +! x-y coordinate of airfoil reference +! x/c y/c + 0.25 0 +! coordinates of airfoil shape +! NACA6_0329 Airfoil +! x/c y/c + 0.000000 0.000000 + 0.006819 0.028484 + 0.027091 0.058831 + 0.060263 0.089532 + 0.105430 0.117836 + 0.161359 0.142554 + 0.226526 0.162174 + 0.299152 0.175281 + 0.377257 0.179988 + 0.458710 0.175693 + 0.541290 0.163772 + 0.622743 0.146064 + 0.700848 0.124660 + 0.773474 0.101839 + 0.838641 0.079535 + 0.894570 0.059015 + 0.939737 0.040853 + 0.972909 0.025130 + 0.993181 0.011587 + 1.000000 0.000000 + 0.993181 -0.009368 + 0.972909 -0.018416 + 0.939737 -0.028604 + 0.894570 -0.040942 + 0.838641 -0.055950 + 0.773474 -0.073518 + 0.700848 -0.092848 + 0.622743 -0.112264 + 0.541290 -0.129574 + 0.458710 -0.142543 + 0.377257 -0.149007 + 0.299152 -0.147357 + 0.226526 -0.138252 + 0.161359 -0.123216 + 0.105430 -0.103514 + 0.060263 -0.080124 + 0.027091 -0.053971 + 0.006819 -0.026499 + 0.000000 0.000000 \ No newline at end of file diff --git a/example/MHK_RM1_Floating/Airfoils/NACA6_0444.dat b/example/MHK_RM1_Floating/Airfoils/NACA6_0444.dat new file mode 100644 index 00000000..1957eb43 --- /dev/null +++ b/example/MHK_RM1_Floating/Airfoils/NACA6_0444.dat @@ -0,0 +1,560 @@ +! ------------ AirfoilInfo v1.01.x Input File ---------------------------------- +! NACA6_0444 airfoil, data based on values used for the design of the RM1 tidal current turbine. +! line +! line +! ------------------------------------------------------------------------------ +"default" InterpOrd ! Interpolation order to use for quasi-steady table lookup {1=linear; 3=cubic spline; "default"} [default=1] + 1.0 NonDimArea ! The non-dimensional area of the airfoil (area/chord^2) (set to 1.0 if unsure or unneeded) +@"NACA6_0444_coords.txt" NumCoords ! The number of coordinates in the airfoil shape file. Set to zero if coordinates not included. +"unused" BL_file ! The file name including the boundary layer characteristics of the profile. Ignored if the aeroacoustic module is not called. + 7 NumTabs ! Number of airfoil tables in this file. +! ------------------------------------------------------------------------------ +! data for table 1 +! ------------------------------------------------------------------------------ + 2.000 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +False InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ +! Table of aerodynamics coefficients + 72 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cpmin +! (deg) (-) (-) (-) + -180.000 0.0000 0.0878 -1.5368 + -170.000 0.2283 0.0878 -1.5368 + -160.000 0.4565 0.1322 -1.5368 + -150.000 0.6848 0.2582 -1.5368 + -140.000 0.5632 0.4133 -1.5368 + -130.000 0.4618 0.5793 -1.5368 + -120.000 0.3556 0.7370 -1.5368 + -110.000 0.2396 0.8679 -1.5368 + -100.000 0.1178 0.9572 -1.5368 + -90.000 0.0000 0.9950 -1.5368 + -80.000 -0.1178 0.9572 -1.5368 + -70.000 -0.2396 0.8679 -1.5368 + -60.000 -0.3556 0.7370 -1.5368 + -50.000 -0.4618 0.5793 -1.5368 + -40.000 -0.5632 0.4133 -1.5368 + -30.000 -0.6848 0.2582 -1.5368 + -20.000 -0.4962 0.1761 -1.5368 + -10.000 -0.4394 0.0939 -2.5360 + -9.000 -0.4172 0.0915 -2.3675 + -8.000 -0.3951 0.0896 -2.2046 + -7.000 -0.3558 0.0886 -2.0171 + -6.000 -0.2861 0.0879 -1.8350 + -5.000 -0.2070 0.0873 -1.6903 + -4.000 -0.1243 0.0868 -1.5548 + -3.000 -0.0400 0.0861 -1.4677 + -2.000 0.0491 0.0859 -1.4671 + -1.000 0.1378 0.0859 -1.5286 + 0.000 0.2262 0.0859 -1.5937 + 1.000 0.3151 0.0859 -1.6608 + 2.000 0.4026 0.0861 -1.7276 + 3.000 0.4885 0.0862 -1.7971 + 4.000 0.5711 0.0865 -1.8669 + 5.000 0.6526 0.0868 -1.9437 + 6.000 0.7191 0.0876 -2.0232 + 7.000 0.7459 0.0889 -2.0832 + 8.000 0.7701 0.0905 -2.1757 + 9.000 0.7998 0.0927 -2.2872 + 10.000 0.8305 0.0952 -2.4037 + 11.000 0.8363 0.0995 -2.4899 + 12.000 0.8581 0.1034 -2.6735 + 13.000 0.8652 0.1092 -2.8298 + 14.000 0.8843 0.1145 -3.0236 + 15.000 0.8978 0.1208 -3.2127 + 16.000 0.9186 0.1269 -3.4359 + 17.000 0.9369 0.1336 -3.6657 + 18.000 0.9538 0.1409 -3.9085 + 19.000 0.9695 0.1486 -4.1517 + 20.000 0.9832 0.1568 -4.4027 + 21.000 0.9959 0.1653 -4.6596 + 22.000 1.0102 0.1735 -4.9355 + 23.000 1.0165 0.1830 -5.1857 + 24.000 1.0214 0.1926 -5.4324 + 25.000 1.0220 0.2026 -5.6651 + 26.000 1.0185 0.2132 -5.8642 + 28.000 1.0003 0.2350 -6.1537 + 29.000 0.9868 0.2472 -6.2271 + 30.000 0.9782 0.2582 -6.3176 + 40.000 0.8047 0.4133 -1.5368 + 50.000 0.6597 0.5793 -1.5368 + 60.000 0.5080 0.7370 -1.5368 + 70.000 0.3422 0.8679 -1.5368 + 80.000 0.1683 0.9572 -1.5368 + 90.000 0.0000 0.9950 -1.5368 + 100.000 -0.1178 0.9572 -1.5368 + 110.000 -0.2396 0.8679 -1.5368 + 120.000 -0.3556 0.7370 -1.5368 + 130.000 -0.4618 0.5793 -1.5368 + 140.000 -0.5632 0.4133 -1.5368 + 150.000 -0.6848 0.2582 -1.5368 + 160.000 -0.4565 0.1322 -1.5368 + 170.000 -0.2283 0.0878 -1.5368 + 180.000 0.0000 0.0878 -1.5368 +! ------------------------------------------------------------------------------ +! data for table 2 +! ------------------------------------------------------------------------------ + 4.000 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +False InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ +! Table of aerodynamics coefficients + 69 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cpmin +! (deg) (-) (-) (-) + -180.000 0.0000 0.1872 -1.5368 + -170.000 0.2392 0.1872 -1.5368 + -160.000 0.4785 0.2228 -1.5368 + -150.000 0.7178 0.3494 -1.5368 + -140.000 0.5834 0.5055 -1.5368 + -130.000 0.4736 0.6726 -1.5368 + -120.000 0.3620 0.8316 -1.5368 + -110.000 0.2423 0.9640 -1.5368 + -100.000 0.1184 1.0549 -1.5368 + -90.000 0.0000 1.0943 -1.5368 + -80.000 -0.1184 1.0549 -1.5368 + -70.000 -0.2423 0.9640 -1.5368 + -60.000 -0.3620 0.8316 -1.5368 + -50.000 -0.4736 0.6726 -1.5368 + -40.000 -0.5834 0.5055 -1.5368 + -30.000 -0.7178 0.3494 -1.5368 + -20.000 -0.5245 0.2703 -1.5368 + -10.000 -0.4731 0.1913 -2.6071 + -9.000 -0.4387 0.1895 -2.4083 + -8.000 -0.4244 0.1880 -2.2550 + -7.000 -0.3621 0.1872 -2.0285 + -6.000 -0.2860 0.1866 -1.8352 + -5.000 -0.2056 0.1861 -1.6890 + -4.000 -0.1199 0.1857 -1.5503 + -3.000 -0.0332 0.1852 -1.4630 + -1.000 0.1450 0.1846 -1.5328 + 0.000 0.2351 0.1845 -1.5992 + 1.000 0.3236 0.1847 -1.6662 + 2.000 0.4130 0.1847 -1.7344 + 5.000 0.6567 0.1859 -1.9457 + 6.000 0.7147 0.1869 -2.0208 + 7.000 0.7543 0.1878 -2.0899 + 9.000 0.8287 0.1906 -2.3229 + 10.000 0.8432 0.1936 -2.4202 + 11.000 0.8686 0.1967 -2.5521 + 12.000 0.8799 0.2011 -2.7194 + 13.000 0.9008 0.2055 -2.9099 + 14.000 0.9219 0.2103 -3.1187 + 15.000 0.9467 0.2153 -3.3452 + 16.000 0.9669 0.2211 -3.5794 + 17.000 0.9875 0.2272 -3.8341 + 18.000 1.0047 0.2340 -4.0877 + 19.000 1.0217 0.2411 -4.3483 + 20.000 1.0326 0.2494 -4.6065 + 21.000 1.0440 0.2578 -4.8698 + 22.000 1.0538 0.2667 -5.1436 + 23.000 1.0571 0.2763 -5.3926 + 24.000 1.0672 0.2850 -5.6949 + 25.000 1.0677 0.2949 -5.9456 + 26.000 1.0682 0.3046 -6.1909 + 27.000 1.0653 0.3148 -6.4081 + 28.000 1.0595 0.3254 -6.5932 + 29.000 1.0375 0.3381 -6.6428 + 30.000 1.0254 0.3494 -6.7387 + 40.000 0.8333 0.5055 -1.5368 + 50.000 0.6766 0.6726 -1.5368 + 60.000 0.5171 0.8316 -1.5368 + 70.000 0.3461 0.9640 -1.5368 + 80.000 0.1692 1.0549 -1.5368 + 90.000 0.0000 1.0943 -1.5368 + 100.000 -0.1184 1.0549 -1.5368 + 110.000 -0.2423 0.9640 -1.5368 + 120.000 -0.3620 0.8316 -1.5368 + 130.000 -0.4736 0.6726 -1.5368 + 140.000 -0.5834 0.5055 -1.5368 + 150.000 -0.7178 0.3494 -1.5368 + 160.000 -0.4785 0.2228 -1.5368 + 170.000 -0.2392 0.1872 -1.5368 + 180.000 0.0000 0.1872 -1.5368 +! ------------------------------------------------------------------------------ +! data for table 3 +! ------------------------------------------------------------------------------ + 6.000 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +False InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ +! Table of aerodynamics coefficients + 71 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cpmin +! (deg) (-) (-) (-) + -180.000 0.0000 0.1952 -1.5368 + -170.000 0.2482 0.1952 -1.5368 + -160.000 0.4963 0.2242 -1.5368 + -150.000 0.7445 0.3514 -1.5368 + -140.000 0.5996 0.5081 -1.5368 + -130.000 0.4832 0.6762 -1.5368 + -120.000 0.3671 0.8361 -1.5368 + -110.000 0.2445 0.9697 -1.5368 + -100.000 0.1190 1.0618 -1.5368 + -90.000 0.0000 1.1024 -1.5368 + -80.000 -0.1190 1.0618 -1.5368 + -70.000 -0.2445 0.9697 -1.5368 + -60.000 -0.3671 0.8361 -1.5368 + -50.000 -0.4832 0.6762 -1.5368 + -40.000 -0.5996 0.5081 -1.5368 + -30.000 -0.7445 0.3514 -1.5368 + -20.000 -0.5447 0.2748 -1.5368 + -10.000 -0.4926 0.1982 -2.6480 + -9.000 -0.4617 0.1966 -2.4507 + -8.000 -0.4322 0.1956 -2.2686 + -7.000 -0.3634 0.1949 -2.0305 + -6.000 -0.2873 0.1943 -1.8371 + -5.000 -0.2040 0.1938 -1.6873 + -4.000 -0.1179 0.1935 -1.5480 + -3.000 -0.0307 0.1932 -1.4615 + -2.000 0.0580 0.1926 -1.4722 + -1.000 0.1481 0.1924 -1.5347 + 0.000 0.2381 0.1924 -1.6009 + 1.000 0.3285 0.1924 -1.6693 + 2.000 0.4157 0.1926 -1.7363 + 4.000 0.5828 0.1932 -1.8778 + 5.000 0.6545 0.1940 -1.9455 + 6.000 0.7170 0.1949 -2.0173 + 7.000 0.7642 0.1956 -2.0997 + 8.000 0.8095 0.1965 -2.2185 + 9.000 0.8348 0.1983 -2.3302 + 10.000 0.8615 0.2007 -2.4451 + 11.000 0.8789 0.2040 -2.5723 + 12.000 0.9009 0.2076 -2.7637 + 13.000 0.9207 0.2120 -2.9553 + 14.000 0.9486 0.2162 -3.1860 + 15.000 0.9707 0.2212 -3.4123 + 16.000 0.9925 0.2266 -3.6554 + 17.000 1.0124 0.2326 -3.9159 + 19.000 1.0445 0.2464 -4.4359 + 20.000 1.0686 0.2527 -4.7530 + 21.000 1.0776 0.2612 -5.0144 + 22.000 1.0832 0.2704 -5.2826 + 23.000 1.0866 0.2800 -5.5449 + 24.000 1.0913 0.2894 -5.8301 + 25.000 1.0933 0.2991 -6.0985 + 26.000 1.0914 0.3091 -6.3395 + 27.000 1.0862 0.3196 -6.5511 + 28.000 1.0802 0.3300 -6.7450 + 29.000 1.0729 0.3406 -6.9167 + 30.000 1.0635 0.3514 -7.0563 + 40.000 0.8565 0.5081 -1.5368 + 50.000 0.6903 0.6762 -1.5368 + 60.000 0.5245 0.8361 -1.5368 + 70.000 0.3493 0.9697 -1.5368 + 80.000 0.1700 1.0618 -1.5368 + 90.000 0.0000 1.1024 -1.5368 + 100.000 -0.1190 1.0618 -1.5368 + 110.000 -0.2445 0.9697 -1.5368 + 120.000 -0.3671 0.8361 -1.5368 + 130.000 -0.4832 0.6762 -1.5368 + 140.000 -0.5996 0.5081 -1.5368 + 150.000 -0.7445 0.3514 -1.5368 + 160.000 -0.4963 0.2242 -1.5368 + 170.000 -0.2482 0.1952 -1.5368 + 180.000 0.0000 0.1952 -1.5368 +! ------------------------------------------------------------------------------ +! data for table 4 +! ------------------------------------------------------------------------------ + 8.000 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +False InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ +! Table of aerodynamics coefficients + 62 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cpmin +! (deg) (-) (-) (-) + -180.000 0.0000 0.1952 -1.5368 + -170.000 0.2974 0.1952 -1.5368 + -160.000 0.5948 0.2359 -1.5368 + -150.000 0.7012 0.3622 -1.5368 + -140.000 0.5733 0.5177 -1.5368 + -130.000 0.4677 0.6842 -1.5368 + -120.000 0.3588 0.8424 -1.5368 + -110.000 0.2409 0.9739 -1.5368 + -100.000 0.1181 1.0639 -1.5368 + -90.000 0.0000 1.1024 -1.5368 + -80.000 -0.1181 1.0639 -1.5368 + -70.000 -0.2409 0.9739 -1.5368 + -60.000 -0.3588 0.8424 -1.5368 + -50.000 -0.4677 0.6842 -1.5368 + -40.000 -0.5733 0.5177 -1.5368 + -30.000 -0.7012 0.3622 -1.5368 + -20.000 -0.6145 0.2662 -1.5368 + -10.000 -0.5000 0.1978 -2.6694 + -9.000 -0.4793 0.1959 -2.4839 + -8.000 -0.4382 0.1952 -2.2793 + -5.000 -0.2037 0.1937 -1.6869 + -4.000 -0.1174 0.1933 -1.5475 + -3.000 -0.0290 0.1930 -1.4533 + -2.000 0.0596 0.1926 -1.4732 + -1.000 0.1497 0.1923 -1.5355 + 0.000 0.2405 0.1922 -1.6025 + 1.000 0.3296 0.1922 -1.6699 + 2.000 0.4167 0.1924 -1.7374 + 3.000 0.5025 0.1927 -1.8069 + 4.000 0.5822 0.1933 -1.8707 + 6.000 0.7216 0.1948 -2.0165 + 7.000 0.7781 0.1953 -2.1120 + 8.000 0.8206 0.1961 -2.2315 + 9.000 0.8437 0.1979 -2.3414 + 11.000 0.8881 0.2035 -2.5902 + 12.000 0.9161 0.2066 -2.7957 + 13.000 0.9453 0.2101 -3.0142 + 15.000 0.9967 0.2188 -3.4850 + 16.000 1.0185 0.2240 -3.7355 + 17.000 1.0407 0.2296 -4.0092 + 18.000 1.0557 0.2362 -4.2653 + 19.000 1.0727 0.2430 -4.5442 + 20.000 1.0841 0.2508 -4.8156 + 22.000 1.0969 0.2686 -5.3459 + 25.000 1.1056 0.2973 -6.1715 + 26.000 1.1045 0.3072 -6.4219 + 30.000 1.0018 0.3622 -5.3262 + 40.000 0.8190 0.5177 -1.5368 + 50.000 0.6682 0.6842 -1.5368 + 60.000 0.5125 0.8424 -1.5368 + 70.000 0.3442 0.9739 -1.5368 + 80.000 0.1688 1.0639 -1.5368 + 90.000 0.0000 1.1024 -1.5368 + 100.000 -0.1181 1.0639 -1.5368 + 110.000 -0.2409 0.9739 -1.5368 + 120.000 -0.3588 0.8424 -1.5368 + 130.000 -0.4677 0.6842 -1.5368 + 140.000 -0.5733 0.5177 -1.5368 + 150.000 -0.7012 0.3622 -1.5368 + 160.000 -0.5948 0.2359 -1.5368 + 170.000 -0.2974 0.1952 -1.5368 + 180.000 0.0000 0.1952 -1.5368 +! ------------------------------------------------------------------------------ +! data for table 5 +! ------------------------------------------------------------------------------ + 10.000 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +False InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ +! Table of aerodynamics coefficients + 67 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cpmin +! (deg) (-) (-) (-) + -180.000 0.0000 0.1952 -1.5368 + -170.000 0.2566 0.1952 -1.5368 + -160.000 0.5133 0.2172 -1.5368 + -150.000 0.7700 0.3450 -1.5368 + -140.000 0.6151 0.5024 -1.5368 + -130.000 0.4924 0.6714 -1.5368 + -120.000 0.3720 0.8324 -1.5368 + -110.000 0.2466 0.9671 -1.5368 + -100.000 0.1195 1.0604 -1.5368 + -90.000 0.0000 1.1024 -1.5368 + -80.000 -0.1195 1.0604 -1.5368 + -70.000 -0.2466 0.9671 -1.5368 + -60.000 -0.3720 0.8324 -1.5368 + -50.000 -0.4924 0.6714 -1.5368 + -40.000 -0.6151 0.5024 -1.5368 + -30.000 -0.7700 0.3450 -1.5368 + -20.000 -0.5594 0.2714 -1.5368 + -10.000 -0.4983 0.1978 -2.6520 + -9.000 -0.5012 0.1956 -2.5277 + -8.000 -0.4434 0.1950 -2.2886 + -6.000 -0.2883 0.1939 -1.8402 + -4.000 -0.1168 0.1932 -1.5469 + -3.000 -0.0284 0.1929 -1.4542 + -2.000 0.0607 0.1926 -1.4738 + -1.000 0.1512 0.1922 -1.5364 + 0.000 0.2416 0.1921 -1.6031 + 1.000 0.3301 0.1922 -1.6704 + 2.000 0.4170 0.1924 -1.7389 + 4.000 0.5807 0.1934 -1.8673 + 5.000 0.6533 0.1941 -1.9374 + 6.000 0.7240 0.1947 -2.0211 + 7.000 0.7933 0.1951 -2.1254 + 8.000 0.8256 0.1960 -2.2370 + 9.000 0.8556 0.1975 -2.3566 + 10.000 0.8686 0.2003 -2.4430 + 11.000 0.9036 0.2026 -2.6210 + 12.000 0.9296 0.2057 -2.8243 + 13.000 0.9579 0.2093 -3.0440 + 14.000 0.9861 0.2131 -3.2803 + 16.000 1.0339 0.2226 -3.7832 + 17.000 1.0521 0.2284 -4.0463 + 18.000 1.0704 0.2346 -4.3160 + 19.000 1.0846 0.2416 -4.5892 + 20.000 1.0952 0.2494 -4.8603 + 21.000 1.1008 0.2581 -5.1154 + 24.000 1.1292 0.2837 -6.0384 + 25.000 1.1319 0.2932 -6.3250 + 26.000 1.1322 0.3029 -6.5941 + 27.000 1.1293 0.3128 -6.8379 + 28.000 1.1221 0.3232 -7.0450 + 29.000 1.1118 0.3340 -7.2160 + 30.000 1.1000 0.3450 -7.3593 + 40.000 0.8788 0.5024 -1.5368 + 50.000 0.7034 0.6714 -1.5368 + 60.000 0.5315 0.8324 -1.5368 + 70.000 0.3523 0.9671 -1.5368 + 80.000 0.1708 1.0604 -1.5368 + 90.000 0.0000 1.1024 -1.5368 + 100.000 -0.1195 1.0604 -1.5368 + 110.000 -0.2466 0.9671 -1.5368 + 120.000 -0.3720 0.8324 -1.5368 + 130.000 -0.4924 0.6714 -1.5368 + 140.000 -0.6151 0.5024 -1.5368 + 150.000 -0.7700 0.3450 -1.5368 + 160.000 -0.5133 0.2172 -1.5368 + 170.000 -0.2566 0.1952 -1.5368 + 180.000 0.0000 0.1952 -1.5368 +! ------------------------------------------------------------------------------ +! data for table 6 +! ------------------------------------------------------------------------------ + 12.000 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +False InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ +! Table of aerodynamics coefficients + 68 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cpmin +! (deg) (-) (-) (-) + -180.000 0.0000 0.1952 -1.5368 + -170.000 0.2703 0.1952 -1.5368 + -160.000 0.5406 0.2196 -1.5368 + -150.000 0.7643 0.3471 -1.5368 + -140.000 0.6117 0.5044 -1.5368 + -130.000 0.4904 0.6730 -1.5368 + -120.000 0.3709 0.8337 -1.5368 + -110.000 0.2462 0.9680 -1.5368 + -100.000 0.1194 1.0609 -1.5368 + -90.000 0.0000 1.1024 -1.5368 + -80.000 -0.1194 1.0609 -1.5368 + -70.000 -0.2462 0.9680 -1.5368 + -60.000 -0.3709 0.8337 -1.5368 + -50.000 -0.4904 0.6730 -1.5368 + -40.000 -0.6117 0.5044 -1.5368 + -30.000 -0.7643 0.3471 -1.5368 + -20.000 -0.5810 0.2686 -1.5368 + -10.000 -0.5080 0.1973 -2.6736 + -7.000 -0.3695 0.1943 -2.0409 + -6.000 -0.2876 0.1939 -1.8319 + -5.000 -0.2035 0.1934 -1.6869 + -4.000 -0.1167 0.1931 -1.5466 + -3.000 -0.0277 0.1929 -1.4563 + -2.000 0.0619 0.1926 -1.4744 + -1.000 0.1520 0.1921 -1.5370 + 0.000 0.2422 0.1921 -1.6033 + 1.000 0.3306 0.1921 -1.6709 + 2.000 0.4176 0.1924 -1.7360 + 3.000 0.5021 0.1927 -1.7997 + 4.000 0.5811 0.1933 -1.8700 + 5.000 0.6538 0.1940 -1.9394 + 6.000 0.7290 0.1945 -2.0259 + 7.000 0.7988 0.1950 -2.1309 + 8.000 0.8306 0.1959 -2.2430 + 10.000 0.8799 0.1997 -2.4620 + 11.000 0.9129 0.2021 -2.6398 + 12.000 0.9445 0.2049 -2.8562 + 13.000 0.9744 0.2081 -3.0830 + 14.000 0.9963 0.2124 -3.3057 + 15.000 1.0211 0.2168 -3.5530 + 17.000 1.0629 0.2274 -4.0818 + 18.000 1.0801 0.2336 -4.3493 + 19.000 1.0941 0.2406 -4.6256 + 20.000 1.1012 0.2487 -4.8838 + 22.000 1.1309 0.2638 -5.5040 + 23.000 1.1367 0.2728 -5.8037 + 24.000 1.1409 0.2820 -6.1025 + 25.000 1.1429 0.2916 -6.3882 + 26.000 1.1421 0.3014 -6.6553 + 27.000 1.1368 0.3116 -6.8875 + 28.000 1.1290 0.3221 -7.0932 + 29.000 1.1198 0.3327 -7.2756 + 30.000 1.0919 0.3471 -6.9240 + 40.000 0.8738 0.5044 -1.5368 + 50.000 0.7005 0.6730 -1.5368 + 60.000 0.5299 0.8337 -1.5368 + 70.000 0.3517 0.9680 -1.5368 + 80.000 0.1706 1.0609 -1.5368 + 90.000 0.0000 1.1024 -1.5368 + 100.000 -0.1194 1.0609 -1.5368 + 110.000 -0.2462 0.9680 -1.5368 + 120.000 -0.3709 0.8337 -1.5368 + 130.000 -0.4904 0.6730 -1.5368 + 140.000 -0.6117 0.5044 -1.5368 + 150.000 -0.7643 0.3471 -1.5368 + 160.000 -0.5406 0.2196 -1.5368 + 170.000 -0.2703 0.1952 -1.5368 + 180.000 0.0000 0.1952 -1.5368 +! ------------------------------------------------------------------------------ +! data for table 7 +! ------------------------------------------------------------------------------ + 14.000 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +False InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ +! Table of aerodynamics coefficients + 64 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cpmin +! (deg) (-) (-) (-) + -180.000 0.0000 0.1952 -1.5368 + -170.000 0.2605 0.1952 -1.5368 + -160.000 0.5210 0.2143 -1.5368 + -150.000 0.7815 0.3423 -1.5368 + -140.000 0.6221 0.5001 -1.5368 + -130.000 0.4965 0.6694 -1.5368 + -120.000 0.3742 0.8309 -1.5368 + -110.000 0.2476 0.9661 -1.5368 + -100.000 0.1198 1.0599 -1.5368 + -90.000 0.0000 1.1024 -1.5368 + -80.000 -0.1198 1.0599 -1.5368 + -70.000 -0.2476 0.9661 -1.5368 + -60.000 -0.3742 0.8309 -1.5368 + -50.000 -0.4965 0.6694 -1.5368 + -40.000 -0.6221 0.5001 -1.5368 + -30.000 -0.7815 0.3423 -1.5368 + -20.000 -0.5719 0.2696 -1.5368 + -10.000 -0.5178 0.1970 -2.6942 + -9.000 -0.5035 0.1956 -2.5224 + -8.000 -0.4482 0.1946 -2.2979 + -6.000 -0.2875 0.1938 -1.8301 + -5.000 -0.2034 0.1933 -1.6867 + -4.000 -0.1166 0.1929 -1.5465 + -3.000 -0.0271 0.1928 -1.4566 + -2.000 0.0627 0.1925 -1.4749 + -1.000 0.1524 0.1921 -1.5371 + 0.000 0.2429 0.1921 -1.6039 + 1.000 0.3298 0.1922 -1.6711 + 2.000 0.4175 0.1924 -1.7354 + 3.000 0.5011 0.1928 -1.7984 + 5.000 0.6561 0.1940 -1.9418 + 6.000 0.7312 0.1945 -2.0284 + 7.000 0.8043 0.1948 -2.1363 + 8.000 0.8337 0.1957 -2.2463 + 11.000 0.9214 0.2016 -2.6567 + 12.000 0.9530 0.2044 -2.8740 + 14.000 1.0117 0.2112 -3.3444 + 16.000 1.0521 0.2210 -3.8395 + 18.000 1.0883 0.2327 -4.3774 + 21.000 1.1323 0.2540 -5.2529 + 22.000 1.1397 0.2626 -5.5436 + 23.000 1.1462 0.2715 -5.8524 + 24.000 1.1497 0.2808 -6.1500 + 25.000 1.1508 0.2905 -6.4340 + 26.000 1.1476 0.3006 -6.6888 + 27.000 1.1424 0.3108 -6.9235 + 28.000 1.1355 0.3211 -7.1382 + 29.000 1.1271 0.3316 -7.3297 + 30.000 1.1164 0.3423 -7.4909 + 40.000 0.8887 0.5001 -1.5368 + 50.000 0.7093 0.6694 -1.5368 + 60.000 0.5346 0.8309 -1.5368 + 70.000 0.3537 0.9661 -1.5368 + 80.000 0.1711 1.0599 -1.5368 + 90.000 0.0000 1.1024 -1.5368 + 100.000 -0.1198 1.0599 -1.5368 + 110.000 -0.2476 0.9661 -1.5368 + 120.000 -0.3742 0.8309 -1.5368 + 130.000 -0.4965 0.6694 -1.5368 + 140.000 -0.6221 0.5001 -1.5368 + 150.000 -0.7815 0.3423 -1.5368 + 160.000 -0.5210 0.2143 -1.5368 + 170.000 -0.2605 0.1952 -1.5368 + 180.000 0.0000 0.1952 -1.5368 \ No newline at end of file diff --git a/example/MHK_RM1_Floating/Airfoils/NACA6_0444_coords.txt b/example/MHK_RM1_Floating/Airfoils/NACA6_0444_coords.txt new file mode 100644 index 00000000..690c1efd --- /dev/null +++ b/example/MHK_RM1_Floating/Airfoils/NACA6_0444_coords.txt @@ -0,0 +1,47 @@ + 40 NumCoords ! The number of coordinates in the airfoil shape file (including an extra coordinate for airfoil reference). Set to zero if coordinates not included. +! ......... x-y coordinates are next if NumCoords > 0 ............. +! x-y coordinate of airfoil reference +! x/c y/c + 0.25 0 +! coordinates of airfoil shape +! NACA6_0444 Airfoil +! x/c y/c + 0.000000 0.000000 + 0.006819 0.038173 + 0.027091 0.077420 + 0.060263 0.116187 + 0.105430 0.151821 + 0.161359 0.183011 + 0.226526 0.208215 + 0.299152 0.226025 + 0.377257 0.234704 + 0.458710 0.233617 + 0.541290 0.223836 + 0.622743 0.206871 + 0.700848 0.184493 + 0.773474 0.158713 + 0.838641 0.131307 + 0.894570 0.103562 + 0.939737 0.076248 + 0.972909 0.049770 + 0.993181 0.024310 + 1.000000 0.000000 + 0.993181 -0.022489 + 0.972909 -0.044262 + 0.939737 -0.066198 + 0.894570 -0.088734 + 0.838641 -0.111957 + 0.773474 -0.135477 + 0.700848 -0.158393 + 0.622743 -0.179140 + 0.541290 -0.195779 + 0.458710 -0.206420 + 0.377257 -0.209286 + 0.299152 -0.203115 + 0.226526 -0.188588 + 0.161359 -0.167145 + 0.105430 -0.140070 + 0.060263 -0.108468 + 0.027091 -0.073433 + 0.006819 -0.036544 + 0.000000 0.000000 \ No newline at end of file diff --git a/example/MHK_RM1_Floating/Airfoils/NACA6_0629.dat b/example/MHK_RM1_Floating/Airfoils/NACA6_0629.dat new file mode 100644 index 00000000..c6856a16 --- /dev/null +++ b/example/MHK_RM1_Floating/Airfoils/NACA6_0629.dat @@ -0,0 +1,560 @@ +! ------------ AirfoilInfo v1.01.x Input File ---------------------------------- +! NACA6_0629 airfoil, data based on values used for the design of the RM1 tidal current turbine. +! line +! line +! ------------------------------------------------------------------------------ +"default" InterpOrd ! Interpolation order to use for quasi-steady table lookup {1=linear; 3=cubic spline; "default"} [default=1] + 1.0 NonDimArea ! The non-dimensional area of the airfoil (area/chord^2) (set to 1.0 if unsure or unneeded) +@"NACA6_0629_coords.txt" NumCoords ! The number of coordinates in the airfoil shape file. Set to zero if coordinates not included. +"unused" BL_file ! The file name including the boundary layer characteristics of the profile. Ignored if the aeroacoustic module is not called. + 7 NumTabs ! Number of airfoil tables in this file. +! ------------------------------------------------------------------------------ +! data for table 1 +! ------------------------------------------------------------------------------ + 2.000 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +False InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ +! Table of aerodynamics coefficients + 72 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cpmin +! (deg) (-) (-) (-) + -180.000 0.0000 0.1584 -2.0237 + -170.000 0.1523 0.1584 -2.0237 + -160.000 0.3046 0.1880 -2.0237 + -150.000 0.4569 0.2721 -2.0237 + -140.000 0.3758 0.3756 -2.0237 + -130.000 0.3081 0.4864 -2.0237 + -120.000 0.2373 0.5916 -2.0237 + -110.000 0.1599 0.6790 -2.0237 + -100.000 0.0786 0.7385 -2.0237 + -90.000 0.0000 0.7637 -2.0237 + -80.000 -0.0786 0.7385 -2.0237 + -70.000 -0.1599 0.6790 -2.0237 + -60.000 -0.2373 0.5916 -2.0237 + -50.000 -0.3081 0.4864 -2.0237 + -40.000 -0.3758 0.3756 -2.0237 + -30.000 -0.4569 0.2721 -2.0237 + -20.000 -0.3311 0.2173 -2.0237 + -10.000 -0.2932 0.1625 -2.6904 + -9.000 -0.2784 0.1609 -2.5779 + -8.000 -0.2637 0.1596 -2.4693 + -7.000 -0.2374 0.1590 -2.3441 + -6.000 -0.1909 0.1585 -2.2226 + -5.000 -0.1381 0.1581 -2.1261 + -4.000 -0.0829 0.1578 -2.0357 + -3.000 -0.0267 0.1573 -1.9776 + -2.000 0.0328 0.1572 -1.9772 + -1.000 0.0920 0.1571 -2.0182 + 0.000 0.1509 0.1572 -2.0616 + 1.000 0.2102 0.1572 -2.1064 + 2.000 0.2686 0.1573 -2.1510 + 3.000 0.3259 0.1574 -2.1973 + 4.000 0.3811 0.1576 -2.2439 + 5.000 0.4355 0.1578 -2.2951 + 6.000 0.4799 0.1583 -2.3482 + 7.000 0.4977 0.1591 -2.3882 + 8.000 0.5139 0.1602 -2.4500 + 9.000 0.5337 0.1617 -2.5244 + 10.000 0.5542 0.1633 -2.6021 + 11.000 0.5581 0.1662 -2.6596 + 12.000 0.5726 0.1688 -2.7821 + 13.000 0.5773 0.1727 -2.8865 + 14.000 0.5900 0.1762 -3.0158 + 15.000 0.5991 0.1804 -3.1420 + 16.000 0.6130 0.1845 -3.2909 + 17.000 0.6251 0.1889 -3.4442 + 18.000 0.6364 0.1938 -3.6062 + 19.000 0.6469 0.1990 -3.7685 + 20.000 0.6560 0.2045 -3.9359 + 21.000 0.6645 0.2101 -4.1074 + 22.000 0.6741 0.2156 -4.2915 + 23.000 0.6782 0.2219 -4.4584 + 24.000 0.6815 0.2283 -4.6230 + 25.000 0.6820 0.2350 -4.7783 + 26.000 0.6796 0.2421 -4.9112 + 28.000 0.6675 0.2567 -5.1044 + 29.000 0.6584 0.2648 -5.1534 + 30.000 0.6527 0.2721 -5.2137 + 40.000 0.5369 0.3756 -2.0237 + 50.000 0.4402 0.4864 -2.0237 + 60.000 0.3390 0.5916 -2.0237 + 70.000 0.2284 0.6790 -2.0237 + 80.000 0.1123 0.7385 -2.0237 + 90.000 0.0000 0.7637 -2.0237 + 100.000 -0.0786 0.7385 -2.0237 + 110.000 -0.1599 0.6790 -2.0237 + 120.000 -0.2373 0.5916 -2.0237 + 130.000 -0.3081 0.4864 -2.0237 + 140.000 -0.3758 0.3756 -2.0237 + 150.000 -0.4569 0.2721 -2.0237 + 160.000 -0.3046 0.1880 -2.0237 + 170.000 -0.1523 0.1584 -2.0237 + 180.000 0.0000 0.1584 -2.0237 +! ------------------------------------------------------------------------------ +! data for table 2 +! ------------------------------------------------------------------------------ + 4.000 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +False InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ +! Table of aerodynamics coefficients + 69 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cpmin +! (deg) (-) (-) (-) + -180.000 0.0000 0.3478 -2.0237 + -170.000 0.1596 0.3478 -2.0237 + -160.000 0.3193 0.3716 -2.0237 + -150.000 0.4789 0.4561 -2.0237 + -140.000 0.3893 0.5602 -2.0237 + -130.000 0.3160 0.6718 -2.0237 + -120.000 0.2415 0.7778 -2.0237 + -110.000 0.1617 0.8662 -2.0237 + -100.000 0.0790 0.9268 -2.0237 + -90.000 0.0000 0.9531 -2.0237 + -80.000 -0.0790 0.9268 -2.0237 + -70.000 -0.1617 0.8662 -2.0237 + -60.000 -0.2415 0.7778 -2.0237 + -50.000 -0.3160 0.6718 -2.0237 + -40.000 -0.3893 0.5602 -2.0237 + -30.000 -0.4789 0.4561 -2.0237 + -20.000 -0.3500 0.4033 -2.0237 + -10.000 -0.3157 0.3505 -2.7378 + -9.000 -0.2927 0.3494 -2.6052 + -8.000 -0.2832 0.3484 -2.5029 + -7.000 -0.2416 0.3478 -2.3517 + -6.000 -0.1909 0.3474 -2.2228 + -5.000 -0.1372 0.3471 -2.1252 + -4.000 -0.0800 0.3468 -2.0327 + -3.000 -0.0222 0.3465 -1.9744 + -1.000 0.0968 0.3461 -2.0210 + 0.000 0.1568 0.3461 -2.0653 + 1.000 0.2159 0.3462 -2.1100 + 2.000 0.2756 0.3462 -2.1555 + 5.000 0.4382 0.3470 -2.2965 + 6.000 0.4769 0.3477 -2.3466 + 7.000 0.5033 0.3483 -2.3927 + 9.000 0.5529 0.3501 -2.5482 + 10.000 0.5627 0.3521 -2.6131 + 11.000 0.5796 0.3542 -2.7011 + 12.000 0.5872 0.3571 -2.8127 + 13.000 0.6011 0.3601 -2.9399 + 14.000 0.6151 0.3633 -3.0792 + 15.000 0.6317 0.3666 -3.2303 + 16.000 0.6451 0.3705 -3.3866 + 17.000 0.6589 0.3745 -3.5565 + 18.000 0.6704 0.3791 -3.7258 + 19.000 0.6818 0.3838 -3.8997 + 20.000 0.6890 0.3894 -4.0719 + 21.000 0.6966 0.3950 -4.2477 + 22.000 0.7031 0.4009 -4.4304 + 23.000 0.7053 0.4073 -4.5965 + 24.000 0.7121 0.4131 -4.7982 + 25.000 0.7124 0.4197 -4.9655 + 26.000 0.7128 0.4262 -5.1291 + 27.000 0.7109 0.4330 -5.2741 + 28.000 0.7070 0.4400 -5.3976 + 29.000 0.6923 0.4485 -5.4307 + 30.000 0.6842 0.4561 -5.4947 + 40.000 0.5561 0.5602 -2.0237 + 50.000 0.4515 0.6718 -2.0237 + 60.000 0.3450 0.7778 -2.0237 + 70.000 0.2309 0.8662 -2.0237 + 80.000 0.1129 0.9268 -2.0237 + 90.000 0.0000 0.9531 -2.0237 + 100.000 -0.0790 0.9268 -2.0237 + 110.000 -0.1617 0.8662 -2.0237 + 120.000 -0.2415 0.7778 -2.0237 + 130.000 -0.3160 0.6718 -2.0237 + 140.000 -0.3893 0.5602 -2.0237 + 150.000 -0.4789 0.4561 -2.0237 + 160.000 -0.3193 0.3716 -2.0237 + 170.000 -0.1596 0.3478 -2.0237 + 180.000 0.0000 0.3478 -2.0237 +! ------------------------------------------------------------------------------ +! data for table 3 +! ------------------------------------------------------------------------------ + 6.000 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +False InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ +! Table of aerodynamics coefficients + 71 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cpmin +! (deg) (-) (-) (-) + -180.000 0.0000 0.3632 -2.0237 + -170.000 0.1656 0.3632 -2.0237 + -160.000 0.3312 0.3825 -2.0237 + -150.000 0.4967 0.4674 -2.0237 + -140.000 0.4001 0.5720 -2.0237 + -130.000 0.3224 0.6841 -2.0237 + -120.000 0.2450 0.7908 -2.0237 + -110.000 0.1631 0.8799 -2.0237 + -100.000 0.0794 0.9414 -2.0237 + -90.000 0.0000 0.9685 -2.0237 + -80.000 -0.0794 0.9414 -2.0237 + -70.000 -0.1631 0.8799 -2.0237 + -60.000 -0.2450 0.7908 -2.0237 + -50.000 -0.3224 0.6841 -2.0237 + -40.000 -0.4001 0.5720 -2.0237 + -30.000 -0.4967 0.4674 -2.0237 + -20.000 -0.3634 0.4163 -2.0237 + -10.000 -0.3287 0.3652 -2.7651 + -9.000 -0.3081 0.3641 -2.6335 + -8.000 -0.2884 0.3634 -2.5120 + -7.000 -0.2425 0.3630 -2.3531 + -6.000 -0.1917 0.3626 -2.2240 + -5.000 -0.1361 0.3622 -2.1241 + -4.000 -0.0786 0.3620 -2.0311 + -3.000 -0.0205 0.3618 -1.9734 + -2.000 0.0387 0.3614 -1.9806 + -1.000 0.0989 0.3613 -2.0223 + 0.000 0.1588 0.3613 -2.0664 + 1.000 0.2192 0.3613 -2.1121 + 2.000 0.2774 0.3614 -2.1568 + 4.000 0.3889 0.3619 -2.2512 + 5.000 0.4367 0.3624 -2.2964 + 6.000 0.4784 0.3630 -2.3443 + 7.000 0.5099 0.3634 -2.3993 + 8.000 0.5401 0.3640 -2.4785 + 9.000 0.5570 0.3652 -2.5530 + 10.000 0.5749 0.3668 -2.6297 + 11.000 0.5865 0.3690 -2.7146 + 12.000 0.6012 0.3715 -2.8423 + 13.000 0.6143 0.3743 -2.9702 + 14.000 0.6330 0.3772 -3.1241 + 15.000 0.6477 0.3805 -3.2751 + 16.000 0.6622 0.3841 -3.4373 + 17.000 0.6755 0.3881 -3.6111 + 19.000 0.6970 0.3973 -3.9581 + 20.000 0.7131 0.4015 -4.1697 + 21.000 0.7191 0.4072 -4.3441 + 22.000 0.7228 0.4134 -4.5231 + 23.000 0.7251 0.4197 -4.6981 + 24.000 0.7282 0.4260 -4.8884 + 25.000 0.7295 0.4325 -5.0675 + 26.000 0.7282 0.4392 -5.2283 + 27.000 0.7248 0.4462 -5.3695 + 28.000 0.7208 0.4531 -5.4989 + 29.000 0.7159 0.4602 -5.6135 + 30.000 0.7096 0.4674 -5.7066 + 40.000 0.5715 0.5720 -2.0237 + 50.000 0.4606 0.6841 -2.0237 + 60.000 0.3500 0.7908 -2.0237 + 70.000 0.2331 0.8799 -2.0237 + 80.000 0.1134 0.9414 -2.0237 + 90.000 0.0000 0.9685 -2.0237 + 100.000 -0.0794 0.9414 -2.0237 + 110.000 -0.1631 0.8799 -2.0237 + 120.000 -0.2450 0.7908 -2.0237 + 130.000 -0.3224 0.6841 -2.0237 + 140.000 -0.4001 0.5720 -2.0237 + 150.000 -0.4967 0.4674 -2.0237 + 160.000 -0.3312 0.3825 -2.0237 + 170.000 -0.1656 0.3632 -2.0237 + 180.000 0.0000 0.3632 -2.0237 +! ------------------------------------------------------------------------------ +! data for table 4 +! ------------------------------------------------------------------------------ + 8.000 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +False InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ +! Table of aerodynamics coefficients + 62 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cpmin +! (deg) (-) (-) (-) + -180.000 0.0000 0.3632 -2.0237 + -170.000 0.1984 0.3632 -2.0237 + -160.000 0.3969 0.3903 -2.0237 + -150.000 0.4679 0.4746 -2.0237 + -140.000 0.3825 0.5784 -2.0237 + -130.000 0.3121 0.6895 -2.0237 + -120.000 0.2394 0.7950 -2.0237 + -110.000 0.1608 0.8828 -2.0237 + -100.000 0.0788 0.9428 -2.0237 + -90.000 0.0000 0.9685 -2.0237 + -80.000 -0.0788 0.9428 -2.0237 + -70.000 -0.1608 0.8828 -2.0237 + -60.000 -0.2394 0.7950 -2.0237 + -50.000 -0.3121 0.6895 -2.0237 + -40.000 -0.3825 0.5784 -2.0237 + -30.000 -0.4679 0.4746 -2.0237 + -20.000 -0.4101 0.4105 -2.0237 + -10.000 -0.3337 0.3649 -2.7794 + -9.000 -0.3198 0.3637 -2.6556 + -8.000 -0.2924 0.3632 -2.5191 + -5.000 -0.1360 0.3621 -2.1238 + -4.000 -0.0783 0.3619 -2.0308 + -3.000 -0.0193 0.3617 -1.9679 + -2.000 0.0398 0.3614 -1.9812 + -1.000 0.0999 0.3612 -2.0228 + 0.000 0.1605 0.3612 -2.0675 + 1.000 0.2199 0.3612 -2.1125 + 2.000 0.2781 0.3613 -2.1575 + 3.000 0.3353 0.3615 -2.2039 + 4.000 0.3885 0.3619 -2.2464 + 6.000 0.4815 0.3629 -2.3438 + 7.000 0.5192 0.3632 -2.4075 + 8.000 0.5476 0.3638 -2.4872 + 9.000 0.5629 0.3650 -2.5606 + 11.000 0.5926 0.3687 -2.7266 + 12.000 0.6113 0.3708 -2.8637 + 13.000 0.6308 0.3731 -3.0095 + 15.000 0.6651 0.3789 -3.3236 + 16.000 0.6796 0.3824 -3.4907 + 17.000 0.6944 0.3861 -3.6734 + 18.000 0.7045 0.3905 -3.8443 + 19.000 0.7158 0.3950 -4.0304 + 20.000 0.7234 0.4003 -4.2115 + 22.000 0.7319 0.4121 -4.5653 + 25.000 0.7378 0.4313 -5.1162 + 26.000 0.7370 0.4379 -5.2833 + 30.000 0.6684 0.4746 -4.5522 + 40.000 0.5465 0.5784 -2.0237 + 50.000 0.4458 0.6895 -2.0237 + 60.000 0.3420 0.7950 -2.0237 + 70.000 0.2297 0.8828 -2.0237 + 80.000 0.1126 0.9428 -2.0237 + 90.000 0.0000 0.9685 -2.0237 + 100.000 -0.0788 0.9428 -2.0237 + 110.000 -0.1608 0.8828 -2.0237 + 120.000 -0.2394 0.7950 -2.0237 + 130.000 -0.3121 0.6895 -2.0237 + 140.000 -0.3825 0.5784 -2.0237 + 150.000 -0.4679 0.4746 -2.0237 + 160.000 -0.3969 0.3903 -2.0237 + 170.000 -0.1984 0.3632 -2.0237 + 180.000 0.0000 0.3632 -2.0237 +! ------------------------------------------------------------------------------ +! data for table 5 +! ------------------------------------------------------------------------------ + 10.000 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +False InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ +! Table of aerodynamics coefficients + 67 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cpmin +! (deg) (-) (-) (-) + -180.000 0.0000 0.3632 -2.0237 + -170.000 0.1712 0.3632 -2.0237 + -160.000 0.3425 0.3778 -2.0237 + -150.000 0.5138 0.4631 -2.0237 + -140.000 0.4104 0.5681 -2.0237 + -130.000 0.3286 0.6809 -2.0237 + -120.000 0.2482 0.7884 -2.0237 + -110.000 0.1646 0.8782 -2.0237 + -100.000 0.0798 0.9405 -2.0237 + -90.000 0.0000 0.9685 -2.0237 + -80.000 -0.0798 0.9405 -2.0237 + -70.000 -0.1646 0.8782 -2.0237 + -60.000 -0.2482 0.7884 -2.0237 + -50.000 -0.3286 0.6809 -2.0237 + -40.000 -0.4104 0.5681 -2.0237 + -30.000 -0.5138 0.4631 -2.0237 + -20.000 -0.3732 0.4140 -2.0237 + -10.000 -0.3325 0.3649 -2.7678 + -9.000 -0.3344 0.3635 -2.6848 + -8.000 -0.2959 0.3630 -2.5253 + -6.000 -0.1924 0.3623 -2.2261 + -4.000 -0.0779 0.3618 -2.0304 + -3.000 -0.0189 0.3617 -1.9686 + -2.000 0.0405 0.3614 -1.9816 + -1.000 0.1009 0.3612 -2.0234 + 0.000 0.1612 0.3611 -2.0679 + 1.000 0.2203 0.3612 -2.1128 + 2.000 0.2782 0.3613 -2.1585 + 4.000 0.3875 0.3620 -2.2442 + 5.000 0.4359 0.3624 -2.2910 + 6.000 0.4831 0.3628 -2.3468 + 7.000 0.5293 0.3631 -2.4164 + 8.000 0.5509 0.3637 -2.4909 + 9.000 0.5709 0.3647 -2.5707 + 10.000 0.5796 0.3665 -2.6284 + 11.000 0.6029 0.3681 -2.7471 + 12.000 0.6203 0.3702 -2.8827 + 13.000 0.6392 0.3725 -3.0293 + 14.000 0.6580 0.3751 -3.1870 + 16.000 0.6899 0.3815 -3.5226 + 17.000 0.7020 0.3853 -3.6982 + 18.000 0.7142 0.3895 -3.8781 + 19.000 0.7237 0.3941 -4.0604 + 20.000 0.7308 0.3993 -4.2413 + 21.000 0.7345 0.4052 -4.4116 + 24.000 0.7535 0.4222 -5.0274 + 25.000 0.7553 0.4285 -5.2186 + 26.000 0.7555 0.4350 -5.3982 + 27.000 0.7535 0.4416 -5.5609 + 28.000 0.7487 0.4485 -5.6991 + 29.000 0.7419 0.4558 -5.8132 + 30.000 0.7340 0.4631 -5.9088 + 40.000 0.5864 0.5681 -2.0237 + 50.000 0.4694 0.6809 -2.0237 + 60.000 0.3546 0.7884 -2.0237 + 70.000 0.2351 0.8782 -2.0237 + 80.000 0.1139 0.9405 -2.0237 + 90.000 0.0000 0.9685 -2.0237 + 100.000 -0.0798 0.9405 -2.0237 + 110.000 -0.1646 0.8782 -2.0237 + 120.000 -0.2482 0.7884 -2.0237 + 130.000 -0.3286 0.6809 -2.0237 + 140.000 -0.4104 0.5681 -2.0237 + 150.000 -0.5138 0.4631 -2.0237 + 160.000 -0.3425 0.3778 -2.0237 + 170.000 -0.1712 0.3632 -2.0237 + 180.000 0.0000 0.3632 -2.0237 +! ------------------------------------------------------------------------------ +! data for table 6 +! ------------------------------------------------------------------------------ + 12.000 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +False InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ +! Table of aerodynamics coefficients + 68 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cpmin +! (deg) (-) (-) (-) + -180.000 0.0000 0.3632 -2.0237 + -170.000 0.1804 0.3632 -2.0237 + -160.000 0.3607 0.3794 -2.0237 + -150.000 0.5100 0.4645 -2.0237 + -140.000 0.4081 0.5695 -2.0237 + -130.000 0.3272 0.6820 -2.0237 + -120.000 0.2475 0.7892 -2.0237 + -110.000 0.1643 0.8788 -2.0237 + -100.000 0.0797 0.9408 -2.0237 + -90.000 0.0000 0.9685 -2.0237 + -80.000 -0.0797 0.9408 -2.0237 + -70.000 -0.1643 0.8788 -2.0237 + -60.000 -0.2475 0.7892 -2.0237 + -50.000 -0.3272 0.6820 -2.0237 + -40.000 -0.4081 0.5695 -2.0237 + -30.000 -0.5100 0.4645 -2.0237 + -20.000 -0.3877 0.4121 -2.0237 + -10.000 -0.3390 0.3646 -2.7822 + -7.000 -0.2466 0.3626 -2.3600 + -6.000 -0.1919 0.3623 -2.2206 + -5.000 -0.1358 0.3620 -2.1238 + -4.000 -0.0779 0.3618 -2.0302 + -3.000 -0.0185 0.3616 -1.9699 + -2.000 0.0413 0.3614 -1.9820 + -1.000 0.1014 0.3611 -2.0238 + 0.000 0.1616 0.3611 -2.0680 + 1.000 0.2206 0.3611 -2.1132 + 2.000 0.2786 0.3613 -2.1566 + 3.000 0.3350 0.3615 -2.1991 + 4.000 0.3877 0.3619 -2.2460 + 5.000 0.4363 0.3624 -2.2923 + 6.000 0.4864 0.3627 -2.3500 + 7.000 0.5330 0.3630 -2.4201 + 8.000 0.5543 0.3636 -2.4949 + 10.000 0.5871 0.3661 -2.6410 + 11.000 0.6091 0.3678 -2.7596 + 12.000 0.6303 0.3696 -2.9040 + 13.000 0.6502 0.3718 -3.0554 + 14.000 0.6648 0.3746 -3.2040 + 15.000 0.6814 0.3776 -3.3690 + 17.000 0.7092 0.3846 -3.7218 + 18.000 0.7207 0.3888 -3.9004 + 19.000 0.7301 0.3934 -4.0847 + 20.000 0.7348 0.3989 -4.2570 + 22.000 0.7546 0.4089 -4.6708 + 23.000 0.7585 0.4150 -4.8708 + 24.000 0.7613 0.4211 -5.0702 + 25.000 0.7626 0.4275 -5.2609 + 26.000 0.7621 0.4341 -5.4390 + 27.000 0.7585 0.4408 -5.5940 + 28.000 0.7534 0.4479 -5.7312 + 29.000 0.7472 0.4549 -5.8529 + 30.000 0.7286 0.4645 -5.6184 + 40.000 0.5831 0.5695 -2.0237 + 50.000 0.4674 0.6820 -2.0237 + 60.000 0.3536 0.7892 -2.0237 + 70.000 0.2347 0.8788 -2.0237 + 80.000 0.1138 0.9408 -2.0237 + 90.000 0.0000 0.9685 -2.0237 + 100.000 -0.0797 0.9408 -2.0237 + 110.000 -0.1643 0.8788 -2.0237 + 120.000 -0.2475 0.7892 -2.0237 + 130.000 -0.3272 0.6820 -2.0237 + 140.000 -0.4081 0.5695 -2.0237 + 150.000 -0.5100 0.4645 -2.0237 + 160.000 -0.3607 0.3794 -2.0237 + 170.000 -0.1804 0.3632 -2.0237 + 180.000 0.0000 0.3632 -2.0237 +! ------------------------------------------------------------------------------ +! data for table 7 +! ------------------------------------------------------------------------------ + 14.000 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +False InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ +! Table of aerodynamics coefficients + 64 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cpmin +! (deg) (-) (-) (-) + -180.000 0.0000 0.3632 -2.0237 + -170.000 0.1738 0.3632 -2.0237 + -160.000 0.3476 0.3759 -2.0237 + -150.000 0.5215 0.4613 -2.0237 + -140.000 0.4151 0.5666 -2.0237 + -130.000 0.3313 0.6796 -2.0237 + -120.000 0.2497 0.7873 -2.0237 + -110.000 0.1652 0.8775 -2.0237 + -100.000 0.0799 0.9401 -2.0237 + -90.000 0.0000 0.9685 -2.0237 + -80.000 -0.0799 0.9401 -2.0237 + -70.000 -0.1652 0.8775 -2.0237 + -60.000 -0.2497 0.7873 -2.0237 + -50.000 -0.3313 0.6796 -2.0237 + -40.000 -0.4151 0.5666 -2.0237 + -30.000 -0.5215 0.4613 -2.0237 + -20.000 -0.3816 0.4128 -2.0237 + -10.000 -0.3455 0.3643 -2.7960 + -9.000 -0.3360 0.3634 -2.6813 + -8.000 -0.2991 0.3628 -2.5315 + -6.000 -0.1918 0.3622 -2.2194 + -5.000 -0.1357 0.3619 -2.1237 + -4.000 -0.0778 0.3617 -2.0301 + -3.000 -0.0181 0.3616 -1.9701 + -2.000 0.0418 0.3614 -1.9823 + -1.000 0.1017 0.3611 -2.0239 + 0.000 0.1621 0.3611 -2.0684 + 1.000 0.2201 0.3612 -2.1133 + 2.000 0.2786 0.3613 -2.1562 + 3.000 0.3343 0.3616 -2.1982 + 5.000 0.4378 0.3623 -2.2939 + 6.000 0.4879 0.3627 -2.3517 + 7.000 0.5367 0.3629 -2.4237 + 8.000 0.5563 0.3635 -2.4971 + 11.000 0.6148 0.3675 -2.7710 + 12.000 0.6359 0.3693 -2.9159 + 14.000 0.6751 0.3738 -3.2298 + 16.000 0.7020 0.3804 -3.5602 + 18.000 0.7262 0.3882 -3.9191 + 21.000 0.7555 0.4024 -4.5033 + 22.000 0.7605 0.4081 -4.6972 + 23.000 0.7648 0.4141 -4.9033 + 24.000 0.7671 0.4203 -5.1019 + 25.000 0.7679 0.4267 -5.2914 + 26.000 0.7657 0.4335 -5.4614 + 27.000 0.7623 0.4403 -5.6180 + 28.000 0.7577 0.4472 -5.7613 + 29.000 0.7521 0.4542 -5.8891 + 30.000 0.7449 0.4613 -5.9967 + 40.000 0.5930 0.5666 -2.0237 + 50.000 0.4733 0.6796 -2.0237 + 60.000 0.3567 0.7873 -2.0237 + 70.000 0.2360 0.8775 -2.0237 + 80.000 0.1142 0.9401 -2.0237 + 90.000 0.0000 0.9685 -2.0237 + 100.000 -0.0799 0.9401 -2.0237 + 110.000 -0.1652 0.8775 -2.0237 + 120.000 -0.2497 0.7873 -2.0237 + 130.000 -0.3313 0.6796 -2.0237 + 140.000 -0.4151 0.5666 -2.0237 + 150.000 -0.5215 0.4613 -2.0237 + 160.000 -0.3476 0.3759 -2.0237 + 170.000 -0.1738 0.3632 -2.0237 + 180.000 0.0000 0.3632 -2.0237 \ No newline at end of file diff --git a/example/MHK_RM1_Floating/Airfoils/NACA6_0629_coords.txt b/example/MHK_RM1_Floating/Airfoils/NACA6_0629_coords.txt new file mode 100644 index 00000000..0384c9cb --- /dev/null +++ b/example/MHK_RM1_Floating/Airfoils/NACA6_0629_coords.txt @@ -0,0 +1,47 @@ + 40 NumCoords ! The number of coordinates in the airfoil shape file (including an extra coordinate for airfoil reference). Set to zero if coordinates not included. +! ......... x-y coordinates are next if NumCoords > 0 ............. +! x-y coordinate of airfoil reference +! x/c y/c + 0.25 0 +! coordinates of airfoil shape +! NACA6_0629 Airfoil +! x/c y/c + 0.000000 0.000000 + 0.006819 0.053204 + 0.027091 0.106260 + 0.060263 0.157538 + 0.105430 0.204545 + 0.161359 0.245774 + 0.226526 0.279641 + 0.299152 0.304748 + 0.377257 0.319589 + 0.458710 0.323479 + 0.541290 0.317019 + 0.622743 0.301206 + 0.700848 0.277317 + 0.773474 0.246947 + 0.838641 0.211626 + 0.894570 0.172671 + 0.939737 0.131160 + 0.972909 0.087998 + 0.993181 0.044048 + 1.000000 0.000000 + 0.993181 -0.042845 + 0.972909 -0.084360 + 0.939737 -0.124522 + 0.894570 -0.162878 + 0.838641 -0.198845 + 0.773474 -0.231600 + 0.700848 -0.260079 + 0.622743 -0.282891 + 0.541290 -0.298488 + 0.458710 -0.305516 + 0.377257 -0.302801 + 0.299152 -0.289617 + 0.226526 -0.266678 + 0.161359 -0.235296 + 0.105430 -0.196784 + 0.060263 -0.152440 + 0.027091 -0.103626 + 0.006819 -0.052128 + 0.000000 0.000000 \ No newline at end of file diff --git a/example/MHK_RM1_Floating/Airfoils/NACA6_0864.dat b/example/MHK_RM1_Floating/Airfoils/NACA6_0864.dat new file mode 100644 index 00000000..d9dc199d --- /dev/null +++ b/example/MHK_RM1_Floating/Airfoils/NACA6_0864.dat @@ -0,0 +1,560 @@ +! ------------ AirfoilInfo v1.01.x Input File ---------------------------------- +! NACA6_0864 airfoil, data based on values used for the design of the RM1 tidal current turbine. +! line +! line +! ------------------------------------------------------------------------------ +"default" InterpOrd ! Interpolation order to use for quasi-steady table lookup {1=linear; 3=cubic spline; "default"} [default=1] + 1.0 NonDimArea ! The non-dimensional area of the airfoil (area/chord^2) (set to 1.0 if unsure or unneeded) +@"NACA6_0864_coords.txt" NumCoords ! The number of coordinates in the airfoil shape file. Set to zero if coordinates not included. +"unused" BL_file ! The file name including the boundary layer characteristics of the profile. Ignored if the aeroacoustic module is not called. + 7 NumTabs ! Number of airfoil tables in this file. +! ------------------------------------------------------------------------------ +! data for table 1 +! ------------------------------------------------------------------------------ + 2.000 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +False InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ +! Table of aerodynamics coefficients + 72 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cpmin +! (deg) (-) (-) (-) + -180.000 0.0000 0.2481 -2.6421 + -170.000 0.0558 0.2481 -2.6421 + -160.000 0.1117 0.2589 -2.6421 + -150.000 0.1675 0.2898 -2.6421 + -140.000 0.1378 0.3277 -2.6421 + -130.000 0.1130 0.3683 -2.6421 + -120.000 0.0870 0.4069 -2.6421 + -110.000 0.0586 0.4389 -2.6421 + -100.000 0.0288 0.4607 -2.6421 + -90.000 0.0000 0.4700 -2.6421 + -80.000 -0.0288 0.4607 -2.6421 + -70.000 -0.0586 0.4389 -2.6421 + -60.000 -0.0870 0.4069 -2.6421 + -50.000 -0.1130 0.3683 -2.6421 + -40.000 -0.1378 0.3277 -2.6421 + -30.000 -0.1675 0.2898 -2.6421 + -20.000 -0.1214 0.2697 -2.6421 + -10.000 -0.1075 0.2496 -2.8865 + -9.000 -0.1021 0.2490 -2.8453 + -8.000 -0.0966 0.2485 -2.8054 + -7.000 -0.0870 0.2483 -2.7596 + -6.000 -0.0700 0.2481 -2.7150 + -5.000 -0.0506 0.2480 -2.6796 + -4.000 -0.0304 0.2479 -2.6465 + -3.000 -0.0098 0.2477 -2.6252 + -2.000 0.0120 0.2476 -2.6251 + -1.000 0.0337 0.2476 -2.6401 + 0.000 0.0553 0.2476 -2.6560 + 1.000 0.0771 0.2476 -2.6724 + 2.000 0.0985 0.2477 -2.6888 + 3.000 0.1195 0.2477 -2.7058 + 4.000 0.1397 0.2478 -2.7228 + 5.000 0.1596 0.2479 -2.7416 + 6.000 0.1759 0.2481 -2.7611 + 7.000 0.1825 0.2484 -2.7757 + 8.000 0.1884 0.2488 -2.7984 + 9.000 0.1956 0.2493 -2.8257 + 10.000 0.2031 0.2499 -2.8541 + 11.000 0.2046 0.2510 -2.8752 + 12.000 0.2099 0.2519 -2.9201 + 13.000 0.2116 0.2533 -2.9584 + 14.000 0.2163 0.2546 -3.0058 + 15.000 0.2196 0.2562 -3.0520 + 16.000 0.2247 0.2577 -3.1066 + 17.000 0.2292 0.2593 -3.1628 + 18.000 0.2333 0.2611 -3.2222 + 19.000 0.2371 0.2630 -3.2817 + 20.000 0.2405 0.2650 -3.3431 + 21.000 0.2436 0.2671 -3.4059 + 22.000 0.2471 0.2691 -3.4734 + 23.000 0.2486 0.2714 -3.5346 + 24.000 0.2498 0.2737 -3.5950 + 25.000 0.2500 0.2762 -3.6519 + 26.000 0.2491 0.2788 -3.7006 + 28.000 0.2447 0.2841 -3.7714 + 29.000 0.2414 0.2871 -3.7894 + 30.000 0.2393 0.2898 -3.8115 + 40.000 0.1968 0.3277 -2.6421 + 50.000 0.1614 0.3683 -2.6421 + 60.000 0.1243 0.4069 -2.6421 + 70.000 0.0837 0.4389 -2.6421 + 80.000 0.0412 0.4607 -2.6421 + 90.000 0.0000 0.4700 -2.6421 + 100.000 -0.0288 0.4607 -2.6421 + 110.000 -0.0586 0.4389 -2.6421 + 120.000 -0.0870 0.4069 -2.6421 + 130.000 -0.1130 0.3683 -2.6421 + 140.000 -0.1378 0.3277 -2.6421 + 150.000 -0.1675 0.2898 -2.6421 + 160.000 -0.1117 0.2589 -2.6421 + 170.000 -0.0558 0.2481 -2.6421 + 180.000 0.0000 0.2481 -2.6421 +! ------------------------------------------------------------------------------ +! data for table 2 +! ------------------------------------------------------------------------------ + 4.000 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +False InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ +! Table of aerodynamics coefficients + 69 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cpmin +! (deg) (-) (-) (-) + -180.000 0.0000 0.5519 -2.6421 + -170.000 0.0585 0.5519 -2.6421 + -160.000 0.1170 0.5606 -2.6421 + -150.000 0.1756 0.5916 -2.6421 + -140.000 0.1427 0.6298 -2.6421 + -130.000 0.1159 0.6706 -2.6421 + -120.000 0.0885 0.7095 -2.6421 + -110.000 0.0593 0.7419 -2.6421 + -100.000 0.0290 0.7641 -2.6421 + -90.000 0.0000 0.7738 -2.6421 + -80.000 -0.0290 0.7641 -2.6421 + -70.000 -0.0593 0.7419 -2.6421 + -60.000 -0.0885 0.7095 -2.6421 + -50.000 -0.1159 0.6706 -2.6421 + -40.000 -0.1427 0.6298 -2.6421 + -30.000 -0.1756 0.5916 -2.6421 + -20.000 -0.1283 0.5722 -2.6421 + -10.000 -0.1157 0.5529 -2.9039 + -9.000 -0.1073 0.5525 -2.8553 + -8.000 -0.1038 0.5521 -2.8178 + -7.000 -0.0886 0.5519 -2.7624 + -6.000 -0.0700 0.5518 -2.7151 + -5.000 -0.0503 0.5516 -2.6793 + -4.000 -0.0293 0.5515 -2.6454 + -3.000 -0.0081 0.5514 -2.6240 + -1.000 0.0355 0.5513 -2.6411 + 0.000 0.0575 0.5513 -2.6574 + 1.000 0.0791 0.5513 -2.6737 + 2.000 0.1010 0.5513 -2.6904 + 5.000 0.1606 0.5516 -2.7421 + 6.000 0.1748 0.5518 -2.7605 + 7.000 0.1845 0.5521 -2.7774 + 9.000 0.2027 0.5527 -2.8344 + 10.000 0.2063 0.5535 -2.8582 + 11.000 0.2125 0.5542 -2.8904 + 12.000 0.2152 0.5553 -2.9314 + 13.000 0.2203 0.5564 -2.9780 + 14.000 0.2255 0.5576 -3.0290 + 15.000 0.2316 0.5588 -3.0844 + 16.000 0.2365 0.5602 -3.1417 + 17.000 0.2415 0.5617 -3.2040 + 18.000 0.2457 0.5633 -3.2661 + 19.000 0.2499 0.5651 -3.3298 + 20.000 0.2526 0.5671 -3.3930 + 21.000 0.2554 0.5692 -3.4574 + 22.000 0.2578 0.5713 -3.5243 + 23.000 0.2586 0.5737 -3.5852 + 24.000 0.2610 0.5758 -3.6592 + 25.000 0.2612 0.5783 -3.7205 + 26.000 0.2613 0.5806 -3.7805 + 27.000 0.2606 0.5831 -3.8336 + 28.000 0.2592 0.5857 -3.8789 + 29.000 0.2538 0.5888 -3.8910 + 30.000 0.2508 0.5916 -3.9145 + 40.000 0.2038 0.6298 -2.6421 + 50.000 0.1655 0.6706 -2.6421 + 60.000 0.1265 0.7095 -2.6421 + 70.000 0.0847 0.7419 -2.6421 + 80.000 0.0414 0.7641 -2.6421 + 90.000 0.0000 0.7738 -2.6421 + 100.000 -0.0290 0.7641 -2.6421 + 110.000 -0.0593 0.7419 -2.6421 + 120.000 -0.0885 0.7095 -2.6421 + 130.000 -0.1159 0.6706 -2.6421 + 140.000 -0.1427 0.6298 -2.6421 + 150.000 -0.1756 0.5916 -2.6421 + 160.000 -0.1170 0.5606 -2.6421 + 170.000 -0.0585 0.5519 -2.6421 + 180.000 0.0000 0.5519 -2.6421 +! ------------------------------------------------------------------------------ +! data for table 3 +! ------------------------------------------------------------------------------ + 6.000 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +False InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ +! Table of aerodynamics coefficients + 71 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cpmin +! (deg) (-) (-) (-) + -180.000 0.0000 0.5765 -2.6421 + -170.000 0.0607 0.5765 -2.6421 + -160.000 0.1214 0.5836 -2.6421 + -150.000 0.1821 0.6147 -2.6421 + -140.000 0.1467 0.6531 -2.6421 + -130.000 0.1182 0.6942 -2.6421 + -120.000 0.0898 0.7333 -2.6421 + -110.000 0.0598 0.7660 -2.6421 + -100.000 0.0291 0.7885 -2.6421 + -90.000 0.0000 0.7984 -2.6421 + -80.000 -0.0291 0.7885 -2.6421 + -70.000 -0.0598 0.7660 -2.6421 + -60.000 -0.0898 0.7333 -2.6421 + -50.000 -0.1182 0.6942 -2.6421 + -40.000 -0.1467 0.6531 -2.6421 + -30.000 -0.1821 0.6147 -2.6421 + -20.000 -0.1332 0.5960 -2.6421 + -10.000 -0.1205 0.5773 -2.9139 + -9.000 -0.1129 0.5769 -2.8656 + -8.000 -0.1057 0.5766 -2.8211 + -7.000 -0.0889 0.5765 -2.7629 + -6.000 -0.0703 0.5763 -2.7155 + -5.000 -0.0499 0.5762 -2.6789 + -4.000 -0.0288 0.5761 -2.6448 + -3.000 -0.0075 0.5760 -2.6237 + -2.000 0.0142 0.5759 -2.6263 + -1.000 0.0362 0.5758 -2.6416 + 0.000 0.0582 0.5758 -2.6578 + 1.000 0.0803 0.5758 -2.6745 + 2.000 0.1017 0.5759 -2.6909 + 4.000 0.1425 0.5760 -2.7255 + 5.000 0.1601 0.5762 -2.7421 + 6.000 0.1754 0.5765 -2.7596 + 7.000 0.1869 0.5766 -2.7798 + 8.000 0.1980 0.5768 -2.8088 + 9.000 0.2042 0.5773 -2.8362 + 10.000 0.2107 0.5779 -2.8643 + 11.000 0.2150 0.5787 -2.8954 + 12.000 0.2204 0.5796 -2.9422 + 13.000 0.2252 0.5806 -2.9891 + 14.000 0.2320 0.5817 -3.0455 + 15.000 0.2374 0.5829 -3.1009 + 16.000 0.2428 0.5842 -3.1603 + 17.000 0.2476 0.5857 -3.2240 + 19.000 0.2555 0.5891 -3.3512 + 20.000 0.2614 0.5906 -3.4288 + 21.000 0.2636 0.5927 -3.4927 + 22.000 0.2650 0.5949 -3.5583 + 23.000 0.2658 0.5973 -3.6225 + 24.000 0.2669 0.5996 -3.6923 + 25.000 0.2674 0.6019 -3.7579 + 26.000 0.2670 0.6044 -3.8169 + 27.000 0.2657 0.6069 -3.8686 + 28.000 0.2642 0.6095 -3.9160 + 29.000 0.2624 0.6121 -3.9580 + 30.000 0.2601 0.6147 -3.9922 + 40.000 0.2095 0.6531 -2.6421 + 50.000 0.1689 0.6942 -2.6421 + 60.000 0.1283 0.7333 -2.6421 + 70.000 0.0854 0.7660 -2.6421 + 80.000 0.0416 0.7885 -2.6421 + 90.000 0.0000 0.7984 -2.6421 + 100.000 -0.0291 0.7885 -2.6421 + 110.000 -0.0598 0.7660 -2.6421 + 120.000 -0.0898 0.7333 -2.6421 + 130.000 -0.1182 0.6942 -2.6421 + 140.000 -0.1467 0.6531 -2.6421 + 150.000 -0.1821 0.6147 -2.6421 + 160.000 -0.1214 0.5836 -2.6421 + 170.000 -0.0607 0.5765 -2.6421 + 180.000 0.0000 0.5765 -2.6421 +! ------------------------------------------------------------------------------ +! data for table 4 +! ------------------------------------------------------------------------------ + 8.000 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +False InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ +! Table of aerodynamics coefficients + 62 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cpmin +! (deg) (-) (-) (-) + -180.000 0.0000 0.5765 -2.6421 + -170.000 0.0727 0.5765 -2.6421 + -160.000 0.1455 0.5865 -2.6421 + -150.000 0.1715 0.6174 -2.6421 + -140.000 0.1402 0.6554 -2.6421 + -130.000 0.1144 0.6961 -2.6421 + -120.000 0.0878 0.7348 -2.6421 + -110.000 0.0589 0.7670 -2.6421 + -100.000 0.0289 0.7890 -2.6421 + -90.000 0.0000 0.7984 -2.6421 + -80.000 -0.0289 0.7890 -2.6421 + -70.000 -0.0589 0.7670 -2.6421 + -60.000 -0.0878 0.7348 -2.6421 + -50.000 -0.1144 0.6961 -2.6421 + -40.000 -0.1402 0.6554 -2.6421 + -30.000 -0.1715 0.6174 -2.6421 + -20.000 -0.1503 0.5939 -2.6421 + -10.000 -0.1223 0.5772 -2.9191 + -9.000 -0.1172 0.5767 -2.8738 + -8.000 -0.1072 0.5765 -2.8237 + -5.000 -0.0498 0.5762 -2.6788 + -4.000 -0.0287 0.5761 -2.6447 + -3.000 -0.0071 0.5760 -2.6217 + -2.000 0.0146 0.5759 -2.6265 + -1.000 0.0366 0.5758 -2.6418 + 0.000 0.0588 0.5758 -2.6582 + 1.000 0.0806 0.5758 -2.6747 + 2.000 0.1019 0.5758 -2.6912 + 3.000 0.1229 0.5759 -2.7082 + 4.000 0.1424 0.5761 -2.7238 + 6.000 0.1765 0.5764 -2.7594 + 7.000 0.1903 0.5765 -2.7828 + 8.000 0.2007 0.5767 -2.8120 + 9.000 0.2064 0.5772 -2.8389 + 11.000 0.2172 0.5785 -2.8998 + 12.000 0.2241 0.5793 -2.9500 + 13.000 0.2312 0.5802 -3.0035 + 15.000 0.2438 0.5823 -3.1186 + 16.000 0.2491 0.5836 -3.1799 + 17.000 0.2546 0.5849 -3.2469 + 18.000 0.2582 0.5865 -3.3095 + 19.000 0.2624 0.5882 -3.3777 + 20.000 0.2652 0.5901 -3.4441 + 22.000 0.2683 0.5945 -3.5738 + 25.000 0.2704 0.6015 -3.7758 + 26.000 0.2702 0.6039 -3.8370 + 30.000 0.2450 0.6174 -3.5690 + 40.000 0.2003 0.6554 -2.6421 + 50.000 0.1634 0.6961 -2.6421 + 60.000 0.1254 0.7348 -2.6421 + 70.000 0.0842 0.7670 -2.6421 + 80.000 0.0413 0.7890 -2.6421 + 90.000 0.0000 0.7984 -2.6421 + 100.000 -0.0289 0.7890 -2.6421 + 110.000 -0.0589 0.7670 -2.6421 + 120.000 -0.0878 0.7348 -2.6421 + 130.000 -0.1144 0.6961 -2.6421 + 140.000 -0.1402 0.6554 -2.6421 + 150.000 -0.1715 0.6174 -2.6421 + 160.000 -0.1455 0.5865 -2.6421 + 170.000 -0.0727 0.5765 -2.6421 + 180.000 0.0000 0.5765 -2.6421 +! ------------------------------------------------------------------------------ +! data for table 5 +! ------------------------------------------------------------------------------ + 10.000 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +False InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ +! Table of aerodynamics coefficients + 67 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cpmin +! (deg) (-) (-) (-) + -180.000 0.0000 0.5765 -2.6421 + -170.000 0.0628 0.5765 -2.6421 + -160.000 0.1256 0.5819 -2.6421 + -150.000 0.1883 0.6132 -2.6421 + -140.000 0.1505 0.6517 -2.6421 + -130.000 0.1204 0.6930 -2.6421 + -120.000 0.0910 0.7324 -2.6421 + -110.000 0.0603 0.7653 -2.6421 + -100.000 0.0292 0.7882 -2.6421 + -90.000 0.0000 0.7984 -2.6421 + -80.000 -0.0292 0.7882 -2.6421 + -70.000 -0.0603 0.7653 -2.6421 + -60.000 -0.0910 0.7324 -2.6421 + -50.000 -0.1204 0.6930 -2.6421 + -40.000 -0.1505 0.6517 -2.6421 + -30.000 -0.1883 0.6132 -2.6421 + -20.000 -0.1368 0.5952 -2.6421 + -10.000 -0.1219 0.5772 -2.9149 + -9.000 -0.1226 0.5766 -2.8845 + -8.000 -0.1085 0.5765 -2.8260 + -6.000 -0.0705 0.5762 -2.7163 + -4.000 -0.0286 0.5760 -2.6446 + -3.000 -0.0069 0.5760 -2.6219 + -2.000 0.0149 0.5759 -2.6267 + -1.000 0.0370 0.5758 -2.6420 + 0.000 0.0591 0.5758 -2.6583 + 1.000 0.0807 0.5758 -2.6748 + 2.000 0.1020 0.5758 -2.6915 + 4.000 0.1420 0.5761 -2.7229 + 5.000 0.1598 0.5763 -2.7401 + 6.000 0.1771 0.5764 -2.7606 + 7.000 0.1940 0.5765 -2.7861 + 8.000 0.2019 0.5767 -2.8134 + 9.000 0.2093 0.5771 -2.8426 + 10.000 0.2125 0.5778 -2.8638 + 11.000 0.2210 0.5783 -2.9073 + 12.000 0.2274 0.5791 -2.9570 + 13.000 0.2343 0.5800 -3.0108 + 14.000 0.2412 0.5809 -3.0686 + 16.000 0.2529 0.5832 -3.1916 + 17.000 0.2573 0.5847 -3.2559 + 18.000 0.2618 0.5862 -3.3219 + 19.000 0.2653 0.5879 -3.3887 + 20.000 0.2679 0.5898 -3.4550 + 21.000 0.2693 0.5919 -3.5174 + 24.000 0.2762 0.5982 -3.7432 + 25.000 0.2769 0.6005 -3.8133 + 26.000 0.2769 0.6029 -3.8791 + 27.000 0.2762 0.6053 -3.9388 + 28.000 0.2745 0.6078 -3.9894 + 29.000 0.2719 0.6105 -4.0313 + 30.000 0.2691 0.6132 -4.0663 + 40.000 0.2150 0.6517 -2.6421 + 50.000 0.1721 0.6930 -2.6421 + 60.000 0.1300 0.7324 -2.6421 + 70.000 0.0862 0.7653 -2.6421 + 80.000 0.0418 0.7882 -2.6421 + 90.000 0.0000 0.7984 -2.6421 + 100.000 -0.0292 0.7882 -2.6421 + 110.000 -0.0603 0.7653 -2.6421 + 120.000 -0.0910 0.7324 -2.6421 + 130.000 -0.1204 0.6930 -2.6421 + 140.000 -0.1505 0.6517 -2.6421 + 150.000 -0.1883 0.6132 -2.6421 + 160.000 -0.1256 0.5819 -2.6421 + 170.000 -0.0628 0.5765 -2.6421 + 180.000 0.0000 0.5765 -2.6421 +! ------------------------------------------------------------------------------ +! data for table 6 +! ------------------------------------------------------------------------------ + 12.000 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +False InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ +! Table of aerodynamics coefficients + 68 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cpmin +! (deg) (-) (-) (-) + -180.000 0.0000 0.5765 -2.6421 + -170.000 0.0661 0.5765 -2.6421 + -160.000 0.1322 0.5825 -2.6421 + -150.000 0.1869 0.6137 -2.6421 + -140.000 0.1496 0.6521 -2.6421 + -130.000 0.1199 0.6934 -2.6421 + -120.000 0.0907 0.7327 -2.6421 + -110.000 0.0602 0.7655 -2.6421 + -100.000 0.0292 0.7883 -2.6421 + -90.000 0.0000 0.7984 -2.6421 + -80.000 -0.0292 0.7883 -2.6421 + -70.000 -0.0602 0.7655 -2.6421 + -60.000 -0.0907 0.7327 -2.6421 + -50.000 -0.1199 0.6934 -2.6421 + -40.000 -0.1496 0.6521 -2.6421 + -30.000 -0.1869 0.6137 -2.6421 + -20.000 -0.1421 0.5945 -2.6421 + -10.000 -0.1243 0.5770 -2.9202 + -7.000 -0.0904 0.5763 -2.7654 + -6.000 -0.0703 0.5762 -2.7143 + -5.000 -0.0498 0.5761 -2.6788 + -4.000 -0.0285 0.5760 -2.6445 + -3.000 -0.0068 0.5760 -2.6224 + -2.000 0.0151 0.5759 -2.6268 + -1.000 0.0372 0.5758 -2.6421 + 0.000 0.0592 0.5758 -2.6584 + 1.000 0.0809 0.5758 -2.6749 + 2.000 0.1021 0.5758 -2.6908 + 3.000 0.1228 0.5759 -2.7064 + 4.000 0.1421 0.5761 -2.7236 + 5.000 0.1599 0.5762 -2.7406 + 6.000 0.1783 0.5763 -2.7617 + 7.000 0.1954 0.5765 -2.7874 + 8.000 0.2032 0.5767 -2.8148 + 10.000 0.2152 0.5776 -2.8684 + 11.000 0.2233 0.5782 -2.9119 + 12.000 0.2310 0.5789 -2.9648 + 13.000 0.2383 0.5797 -3.0203 + 14.000 0.2437 0.5807 -3.0748 + 15.000 0.2498 0.5818 -3.1353 + 17.000 0.2600 0.5844 -3.2646 + 18.000 0.2642 0.5859 -3.3301 + 19.000 0.2676 0.5876 -3.3976 + 20.000 0.2694 0.5896 -3.4608 + 22.000 0.2766 0.5933 -3.6125 + 23.000 0.2780 0.5955 -3.6858 + 24.000 0.2791 0.5978 -3.7589 + 25.000 0.2796 0.6001 -3.8288 + 26.000 0.2794 0.6025 -3.8941 + 27.000 0.2781 0.6050 -3.9509 + 28.000 0.2762 0.6076 -4.0012 + 29.000 0.2739 0.6102 -4.0458 + 30.000 0.2671 0.6137 -3.9598 + 40.000 0.2137 0.6521 -2.6421 + 50.000 0.1713 0.6934 -2.6421 + 60.000 0.1296 0.7327 -2.6421 + 70.000 0.0860 0.7655 -2.6421 + 80.000 0.0417 0.7883 -2.6421 + 90.000 0.0000 0.7984 -2.6421 + 100.000 -0.0292 0.7883 -2.6421 + 110.000 -0.0602 0.7655 -2.6421 + 120.000 -0.0907 0.7327 -2.6421 + 130.000 -0.1199 0.6934 -2.6421 + 140.000 -0.1496 0.6521 -2.6421 + 150.000 -0.1869 0.6137 -2.6421 + 160.000 -0.1322 0.5825 -2.6421 + 170.000 -0.0661 0.5765 -2.6421 + 180.000 0.0000 0.5765 -2.6421 +! ------------------------------------------------------------------------------ +! data for table 7 +! ------------------------------------------------------------------------------ + 14.000 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +False InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ +! Table of aerodynamics coefficients + 64 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cpmin +! (deg) (-) (-) (-) + -180.000 0.0000 0.5765 -2.6421 + -170.000 0.0637 0.5765 -2.6421 + -160.000 0.1274 0.5812 -2.6421 + -150.000 0.1912 0.6125 -2.6421 + -140.000 0.1522 0.6511 -2.6421 + -130.000 0.1215 0.6925 -2.6421 + -120.000 0.0915 0.7320 -2.6421 + -110.000 0.0606 0.7651 -2.6421 + -100.000 0.0293 0.7880 -2.6421 + -90.000 0.0000 0.7984 -2.6421 + -80.000 -0.0293 0.7880 -2.6421 + -70.000 -0.0606 0.7651 -2.6421 + -60.000 -0.0915 0.7320 -2.6421 + -50.000 -0.1215 0.6925 -2.6421 + -40.000 -0.1522 0.6511 -2.6421 + -30.000 -0.1912 0.6125 -2.6421 + -20.000 -0.1399 0.5947 -2.6421 + -10.000 -0.1267 0.5770 -2.9252 + -9.000 -0.1232 0.5766 -2.8832 + -8.000 -0.1096 0.5764 -2.8283 + -6.000 -0.0703 0.5762 -2.7138 + -5.000 -0.0497 0.5761 -2.6788 + -4.000 -0.0285 0.5760 -2.6445 + -3.000 -0.0066 0.5759 -2.6225 + -2.000 0.0153 0.5759 -2.6269 + -1.000 0.0373 0.5758 -2.6422 + 0.000 0.0594 0.5758 -2.6585 + 1.000 0.0807 0.5758 -2.6749 + 2.000 0.1021 0.5758 -2.6907 + 3.000 0.1226 0.5759 -2.7061 + 5.000 0.1605 0.5762 -2.7412 + 6.000 0.1789 0.5763 -2.7623 + 7.000 0.1967 0.5764 -2.7887 + 8.000 0.2039 0.5767 -2.8156 + 11.000 0.2254 0.5781 -2.9160 + 12.000 0.2331 0.5788 -2.9692 + 14.000 0.2475 0.5804 -3.0842 + 16.000 0.2573 0.5828 -3.2053 + 18.000 0.2662 0.5857 -3.3369 + 21.000 0.2770 0.5909 -3.5511 + 22.000 0.2788 0.5930 -3.6222 + 23.000 0.2804 0.5952 -3.6977 + 24.000 0.2812 0.5975 -3.7705 + 25.000 0.2815 0.5998 -3.8400 + 26.000 0.2807 0.6023 -3.9023 + 27.000 0.2794 0.6048 -3.9597 + 28.000 0.2777 0.6073 -4.0122 + 29.000 0.2757 0.6099 -4.0591 + 30.000 0.2731 0.6125 -4.0985 + 40.000 0.2174 0.6511 -2.6421 + 50.000 0.1735 0.6925 -2.6421 + 60.000 0.1308 0.7320 -2.6421 + 70.000 0.0865 0.7651 -2.6421 + 80.000 0.0419 0.7880 -2.6421 + 90.000 0.0000 0.7984 -2.6421 + 100.000 -0.0293 0.7880 -2.6421 + 110.000 -0.0606 0.7651 -2.6421 + 120.000 -0.0915 0.7320 -2.6421 + 130.000 -0.1215 0.6925 -2.6421 + 140.000 -0.1522 0.6511 -2.6421 + 150.000 -0.1912 0.6125 -2.6421 + 160.000 -0.1274 0.5812 -2.6421 + 170.000 -0.0637 0.5765 -2.6421 + 180.000 0.0000 0.5765 -2.6421 \ No newline at end of file diff --git a/example/MHK_RM1_Floating/Airfoils/NACA6_0864_coords.txt b/example/MHK_RM1_Floating/Airfoils/NACA6_0864_coords.txt new file mode 100644 index 00000000..8a9382a1 --- /dev/null +++ b/example/MHK_RM1_Floating/Airfoils/NACA6_0864_coords.txt @@ -0,0 +1,47 @@ + 40 NumCoords ! The number of coordinates in the airfoil shape file (including an extra coordinate for airfoil reference). Set to zero if coordinates not included. +! ......... x-y coordinates are next if NumCoords > 0 ............. +! x-y coordinate of airfoil reference +! x/c y/c + 0.25 0 +! coordinates of airfoil shape +! NACA6_0864 Airfoil +! x/c y/c + 0.000000 0.000000 + 0.006819 0.071897 + 0.027091 0.142126 + 0.060263 0.208964 + 0.105430 0.270115 + 0.161359 0.323830 + 0.226526 0.368470 + 0.299152 0.402651 + 0.377257 0.425156 + 0.458710 0.435236 + 0.541290 0.432906 + 0.622743 0.418526 + 0.700848 0.392758 + 0.773474 0.356678 + 0.838641 0.311513 + 0.894570 0.258619 + 0.939737 0.199450 + 0.972909 0.135539 + 0.993181 0.068594 + 1.000000 0.000000 + 0.993181 -0.068161 + 0.972909 -0.134227 + 0.939737 -0.197056 + 0.894570 -0.255087 + 0.838641 -0.306904 + 0.773474 -0.351143 + 0.700848 -0.386540 + 0.622743 -0.411920 + 0.541290 -0.426222 + 0.458710 -0.428757 + 0.377257 -0.419101 + 0.299152 -0.397194 + 0.226526 -0.363795 + 0.161359 -0.320050 + 0.105430 -0.267316 + 0.060263 -0.207125 + 0.027091 -0.141176 + 0.006819 -0.071509 + 0.000000 0.000000 \ No newline at end of file diff --git a/example/MHK_RM1_Floating/Airfoils/NACA6_1000.dat b/example/MHK_RM1_Floating/Airfoils/NACA6_1000.dat new file mode 100644 index 00000000..7c3e8471 --- /dev/null +++ b/example/MHK_RM1_Floating/Airfoils/NACA6_1000.dat @@ -0,0 +1,108 @@ +! ------------ AirfoilInfo v1.01.x Input File ---------------------------------- +! NACA6_1000 airfoil, data based on values used for the design of the RM1 tidal current turbine. +! line +! line +! ------------------------------------------------------------------------------ +"default" InterpOrd ! Interpolation order to use for quasi-steady table lookup {1=linear; 3=cubic spline; "default"} [default=1] + 1.0 NonDimArea ! The non-dimensional area of the airfoil (area/chord^2) (set to 1.0 if unsure or unneeded) +@"NACA6_1000_coords.txt" NumCoords ! The number of coordinates in the airfoil shape file. Set to zero if coordinates not included. +"unused" BL_file ! The file name including the boundary layer characteristics of the profile. Ignored if the aeroacoustic module is not called. + 7 NumTabs ! Number of airfoil tables in this file. +! ------------------------------------------------------------------------------ +! data for table 1 +! ------------------------------------------------------------------------------ + 2.0 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +False InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ +! Table of aerodynamics coefficients + 3 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cpmin +! (deg) (-) (-) (-) + -180.00 0.0 0.3 -3.0 + 0.00 0.0 0.3 -3.0 + 180.00 0.0 0.3 -3.0 +! ------------------------------------------------------------------------------ +! data for table 2 +! ------------------------------------------------------------------------------ + 4.0 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +False InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ +! Table of aerodynamics coefficients + 3 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cpmin +! (deg) (-) (-) (-) + -180.00 0.0 0.67 -3.0 + 0.00 0.0 0.67 -3.0 + 180.00 0.0 0.67 -3.0 +! ------------------------------------------------------------------------------ +! data for table 3 +! ------------------------------------------------------------------------------ + 6.0 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +False InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ +! Table of aerodynamics coefficients + 3 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cpmin +! (deg) (-) (-) (-) + -180.00 0.0 0.7 -3.0 + 0.00 0.0 0.7 -3.0 + 180.00 0.0 0.7 -3.0 +! ------------------------------------------------------------------------------ +! data for table 4 +! ------------------------------------------------------------------------------ + 8.0 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +False InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ +! Table of aerodynamics coefficients + 3 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cpmin +! (deg) (-) (-) (-) + -180.00 0.0 0.7 -3.0 + 0.00 0.0 0.7 -3.0 + 180.00 0.0 0.7 -3.0 +! ------------------------------------------------------------------------------ +! data for table 5 +! ------------------------------------------------------------------------------ + 10.0 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +False InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ +! Table of aerodynamics coefficients + 3 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cpmin +! (deg) (-) (-) (-) + -180.00 0.0 0.7 -3.0 + 0.00 0.0 0.7 -3.0 + 180.00 0.0 0.7 -3.0 +! ------------------------------------------------------------------------------ +! data for table 6 +! ------------------------------------------------------------------------------ + 12.0 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +False InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ +! Table of aerodynamics coefficients + 3 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cpmin +! (deg) (-) (-) (-) + -180.00 0.0 0.7 -3.0 + 0.00 0.0 0.7 -3.0 + 180.00 0.0 0.7 -3.0 +! ------------------------------------------------------------------------------ +! data for table 7 +! ------------------------------------------------------------------------------ + 14.0 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +False InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ +! Table of aerodynamics coefficients + 3 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cpmin +! (deg) (-) (-) (-) + -180.00 0.0 0.7 -3.0 + 0.00 0.0 0.7 -3.0 + 180.00 0.0 0.7 -3.0 \ No newline at end of file diff --git a/example/MHK_RM1_Floating/Airfoils/NACA6_1000_coords.txt b/example/MHK_RM1_Floating/Airfoils/NACA6_1000_coords.txt new file mode 100644 index 00000000..e9876cf7 --- /dev/null +++ b/example/MHK_RM1_Floating/Airfoils/NACA6_1000_coords.txt @@ -0,0 +1,47 @@ + 40 NumCoords ! The number of coordinates in the airfoil shape file (including an extra coordinate for airfoil reference). Set to zero if coordinates not included. +! ......... x-y coordinates are next if NumCoords > 0 ............. +! x-y coordinate of airfoil reference +! x/c y/c + 0.25 0 +! coordinates of airfoil shape +! NACA6_1000 Airfoil +! x/c y/c + 0.000000 0.000000 + 0.006819 0.082442 + 0.027091 0.162359 + 0.060263 0.237976 + 0.105430 0.307106 + 0.161359 0.367865 + 0.226526 0.418583 + 0.299152 0.457883 + 0.377257 0.484712 + 0.458710 0.498283 + 0.541290 0.498283 + 0.622743 0.484712 + 0.700848 0.457883 + 0.773474 0.418583 + 0.838641 0.367865 + 0.894570 0.307106 + 0.939737 0.237976 + 0.972909 0.162359 + 0.993181 0.082442 + 1.000000 0.000000 + 0.993181 -0.082442 + 0.972909 -0.162359 + 0.939737 -0.237976 + 0.894570 -0.307106 + 0.838641 -0.367865 + 0.773474 -0.418583 + 0.700848 -0.457883 + 0.622743 -0.484712 + 0.541290 -0.498283 + 0.458710 -0.498283 + 0.377257 -0.484712 + 0.299152 -0.457883 + 0.226526 -0.418583 + 0.161359 -0.367865 + 0.105430 -0.307106 + 0.060263 -0.237976 + 0.027091 -0.162359 + 0.006819 -0.082442 + 0.000000 0.000000 \ No newline at end of file diff --git a/example/MHK_RM1_Floating/LICENSE b/example/MHK_RM1_Floating/LICENSE new file mode 100644 index 00000000..8dada3ed --- /dev/null +++ b/example/MHK_RM1_Floating/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/example/MHK_RM1_Floating/MHK_RM1_AeroDyn_Blade.dat b/example/MHK_RM1_Floating/MHK_RM1_AeroDyn_Blade.dat new file mode 100644 index 00000000..1998b6e8 --- /dev/null +++ b/example/MHK_RM1_Floating/MHK_RM1_AeroDyn_Blade.dat @@ -0,0 +1,38 @@ +------- AERODYN v15.00.* BLADE DEFINITION INPUT FILE ------------------------------------- +Floating MHK turbine hydrodynamic blade input properties, based on the RM1 tidal current rotor +====== Blade Properties ================================================================= +32 NumBlNds - Number of blade nodes used in the analysis (-) +BlSpn BlCrvAC BlSwpAC BlCrvAng BlTwist BlChord BlAFID BlCb BlCenBn BlCenBt +(m) (m) (m) (deg) (deg) (m) (-) (-) (m) (m) +0.000 0.00 0.00 0.00 12.86 0.800 1 0.9956 0.0000 0.00000 +0.150 0.00 0.00 0.00 12.86 0.800 1 0.9956 0.0000 0.00000 +0.450 0.00 0.00 0.00 12.86 0.894 2 0.8572 0.0023 0.01458 +0.750 0.00 0.00 0.00 12.86 1.118 3 0.6118 0.0082 0.05128 +1.050 0.00 0.00 0.00 12.86 1.386 4 0.4145 0.0153 0.12252 +1.350 0.00 0.00 0.00 12.86 1.610 5 0.2873 0.0217 0.16820 +1.650 0.00 0.00 0.00 12.86 1.704 6 0.2287 0.0250 0.17802 +1.950 0.00 0.00 0.00 11.54 1.662 7 0.2099 0.0250 0.15896 +2.250 0.00 0.00 0.00 10.44 1.619 8 0.1966 0.0247 0.14317 +2.550 0.00 0.00 0.00 9.50 1.577 9 0.1870 0.0245 0.12821 +2.850 0.00 0.00 0.00 8.71 1.534 9 0.1870 0.0238 0.12472 +3.150 0.00 0.00 0.00 8.02 1.492 9 0.1870 0.0232 0.12136 +3.450 0.00 0.00 0.00 7.43 1.450 9 0.1870 0.0225 0.11790 +3.750 0.00 0.00 0.00 6.91 1.407 9 0.1870 0.0218 0.11441 +4.050 0.00 0.00 0.00 6.45 1.365 9 0.1870 0.0212 0.11105 +4.350 0.00 0.00 0.00 6.04 1.322 9 0.1870 0.0205 0.10756 +4.650 0.00 0.00 0.00 5.68 1.279 9 0.1870 0.0198 0.10397 +4.950 0.00 0.00 0.00 5.35 1.235 9 0.1870 0.0192 0.10045 +5.250 0.00 0.00 0.00 5.05 1.192 9 0.1870 0.0185 0.09696 +5.550 0.00 0.00 0.00 4.77 1.148 9 0.1870 0.0178 0.09334 +5.850 0.00 0.00 0.00 4.51 1.103 9 0.1870 0.0171 0.08969 +6.150 0.00 0.00 0.00 4.26 1.058 9 0.1870 0.0164 0.08604 +6.450 0.00 0.00 0.00 4.03 1.012 9 0.1870 0.0157 0.08226 +6.750 0.00 0.00 0.00 3.80 0.966 9 0.1870 0.0150 0.07858 +7.050 0.00 0.00 0.00 3.57 0.920 9 0.1870 0.0143 0.07480 +7.350 0.00 0.00 0.00 3.35 0.872 9 0.1870 0.0135 0.07096 +7.650 0.00 0.00 0.00 3.13 0.824 9 0.1870 0.0128 0.06702 +7.950 0.00 0.00 0.00 2.90 0.776 9 0.1870 0.0120 0.06308 +8.250 0.00 0.00 0.00 2.67 0.726 9 0.1870 0.0113 0.05908 +8.550 0.00 0.00 0.00 2.43 0.676 9 0.1870 0.0105 0.05498 +8.850 0.00 0.00 0.00 2.18 0.626 9 0.1870 0.0097 0.05088 +9.000 0.00 0.00 0.00 2.18 0.626 9 0.1870 0.0097 0.05088 \ No newline at end of file diff --git a/example/MHK_RM1_Floating/MHK_RM1_ElastoDyn_Blade.dat b/example/MHK_RM1_Floating/MHK_RM1_ElastoDyn_Blade.dat new file mode 100644 index 00000000..df6ab8c8 --- /dev/null +++ b/example/MHK_RM1_Floating/MHK_RM1_ElastoDyn_Blade.dat @@ -0,0 +1,107 @@ +------- ELASTODYN V1.00.* INDIVIDUAL BLADE INPUT FILE -------------------------- +Floating MHK turbine structural blade input properties, based on the RM1 tidal current rotor +---------------------- BLADE PARAMETERS ---------------------------------------- + 75 NBlInpSt - Number of blade input stations (-) + 1 BldFlDmp(1) - Blade flap mode #1 structural damping in percent of critical (%) + 1 BldFlDmp(2) - Blade flap mode #2 structural damping in percent of critical (%) + 1 BldEdDmp(1) - Blade edge mode #1 structural damping in percent of critical (%) +---------------------- BLADE ADJUSTMENT FACTORS -------------------------------- + 1 FlStTunr(1) - Blade flapwise modal stiffness tuner, 1st mode (-) + 1 FlStTunr(2) - Blade flapwise modal stiffness tuner, 2nd mode (-) + 2.5 AdjBlMs - Factor to adjust blade mass density (-) + 1.0E-05 AdjFlSt - Factor to adjust blade flap stiffness (-) + 1.0E-05 AdjEdSt - Factor to adjust blade edge stiffness (-) +---------------------- DISTRIBUTED BLADE PROPERTIES ---------------------------- +BlFract PitchAxis StrcTwst BMassDen FlpStff EdgStff +(-) (-) (deg) (kg/m) (Nm^2) (Nm^2) +0.0000 0.5000 12.860 818.68 2.43E+14 2.52E+14 +0.0083 0.4953 12.860 833.60 2.47E+14 2.69E+14 +0.0167 0.4907 12.860 846.44 2.47E+14 2.84E+14 +0.0250 0.4860 12.860 858.68 2.46E+14 3.00E+14 +0.0333 0.4813 12.860 870.32 2.44E+14 3.15E+14 +0.0417 0.4701 12.860 900.64 2.50E+14 3.59E+14 +0.0500 0.4590 12.860 932.64 2.49E+14 4.03E+14 +0.0583 0.4478 12.860 681.32 1.70E+14 1.12E+14 +0.0667 0.4366 12.860 628.00 1.48E+14 1.11E+14 +0.0750 0.4233 12.860 575.28 1.30E+14 1.10E+14 +0.0833 0.4100 12.860 528.96 1.12E+14 1.07E+14 +0.0917 0.3967 12.860 458.92 8.82E+13 9.56E+13 +0.1000 0.3834 12.860 401.60 6.72E+13 8.55E+13 +0.1083 0.3722 12.860 411.16 6.45E+13 9.15E+13 +0.1167 0.3611 12.860 410.28 6.00E+13 9.53E+13 +0.1250 0.3499 12.860 415.36 5.62E+13 1.01E+14 +0.1333 0.3387 12.860 421.00 5.17E+13 1.06E+14 +0.1417 0.3340 12.860 421.28 4.94E+13 1.08E+14 +0.1500 0.3294 12.860 421.40 4.70E+13 1.10E+14 +0.1583 0.3247 12.860 424.96 4.45E+13 1.12E+14 +0.1667 0.3200 12.860 435.48 4.30E+13 1.16E+14 +0.1750 0.3200 12.530 428.40 4.09E+13 1.13E+14 +0.1833 0.3200 12.200 423.88 3.89E+13 1.10E+14 +0.1917 0.3200 11.870 435.68 3.84E+13 1.15E+14 +0.2000 0.3200 11.540 430.60 3.62E+13 1.12E+14 +0.2083 0.3200 11.265 434.52 3.57E+13 1.11E+14 +0.2167 0.3200 10.990 430.28 3.41E+13 1.09E+14 +0.2250 0.3200 10.715 426.04 3.26E+13 1.06E+14 +0.2333 0.3200 10.440 421.84 3.11E+13 1.03E+14 +0.2500 0.3200 9.970 415.00 2.91E+13 9.84E+13 +0.2667 0.3200 9.500 411.20 2.72E+13 9.54E+13 +0.2833 0.3200 9.105 395.88 2.54E+13 8.96E+13 +0.3000 0.3200 8.710 390.40 2.43E+13 8.59E+13 +0.3167 0.3200 8.365 377.84 2.26E+13 8.06E+13 +0.3333 0.3200 8.020 362.44 2.15E+13 7.34E+13 +0.3500 0.3200 7.725 347.48 2.00E+13 6.87E+13 +0.3667 0.3200 7.430 335.60 1.85E+13 6.42E+13 +0.3833 0.3200 7.170 330.64 1.77E+13 6.14E+13 +0.4000 0.3200 6.910 318.96 1.63E+13 5.72E+13 +0.4167 0.3200 6.680 302.84 1.50E+13 5.33E+13 +0.4333 0.3200 6.450 298.24 1.43E+13 5.09E+13 +0.4500 0.3200 6.245 287.12 1.32E+13 4.73E+13 +0.4667 0.3200 6.040 267.24 1.19E+13 4.12E+13 +0.4833 0.3200 5.860 256.68 1.09E+13 3.81E+13 +0.5000 0.3200 5.680 249.96 1.04E+13 3.62E+13 +0.5167 0.3200 5.515 239.68 9.42E+12 3.33E+13 +0.5333 0.3200 5.350 227.76 8.54E+12 3.06E+13 +0.5500 0.3200 5.200 215.64 7.73E+12 2.81E+13 +0.5667 0.3200 5.050 206.16 6.97E+12 2.58E+13 +0.5833 0.3200 4.910 188.80 6.17E+12 2.17E+13 +0.6000 0.3200 4.770 179.80 5.51E+12 1.97E+13 +0.6167 0.3200 4.640 176.28 5.19E+12 1.85E+13 +0.6333 0.3200 4.510 165.32 4.61E+12 1.68E+13 +0.6500 0.3200 4.385 156.80 4.07E+12 1.51E+13 +0.6667 0.3200 4.260 144.88 3.57E+12 1.36E+13 +0.6833 0.3200 4.145 136.80 3.11E+12 1.21E+13 +0.7000 0.3200 4.030 128.92 2.69E+12 1.08E+13 +0.7167 0.3200 3.915 119.36 2.31E+12 9.55E+12 +0.7333 0.3200 3.800 111.96 1.96E+12 8.42E+12 +0.7500 0.3200 3.685 103.00 1.65E+12 7.39E+12 +0.7667 0.3200 3.570 94.72 1.37E+12 6.45E+12 +0.7833 0.3200 3.460 87.96 1.12E+12 5.57E+12 +0.8000 0.3200 3.350 79.76 8.91E+11 4.77E+12 +0.8167 0.3200 3.240 73.52 6.93E+11 4.05E+12 +0.8333 0.3200 3.130 71.44 6.36E+11 3.72E+12 +0.8500 0.3200 3.015 64.00 4.76E+11 3.11E+12 +0.8667 0.3200 2.900 57.24 3.38E+11 2.56E+12 +0.8833 0.3200 2.785 50.36 2.19E+11 2.04E+12 +0.9000 0.3200 2.670 48.68 1.98E+11 1.84E+12 +0.9167 0.3200 2.550 47.00 1.78E+11 1.66E+12 +0.9333 0.3200 2.430 45.32 1.59E+11 1.49E+12 +0.9500 0.3200 2.305 46.76 1.98E+11 1.51E+12 +0.9667 0.3200 2.180 44.04 1.76E+11 1.34E+12 +0.9833 0.3200 2.060 42.28 1.56E+11 1.19E+12 +1.0000 0.3200 2.060 42.28 1.56E+11 1.19E+12 +---------------------- BLADE MODE SHAPES --------------------------------------- + 1.88070 BldFl1Sh(2) - Flap mode 1, coeff of x^2 +-1.44580 BldFl1Sh(3) - , coeff of x^3 + 0.71967 BldFl1Sh(4) - , coeff of x^4 +-0.03633 BldFl1Sh(5) - , coeff of x^5 +-0.11822 BldFl1Sh(6) - , coeff of x^6 +-5.52180 BldFl2Sh(2) - Flap mode 2, coeff of x^2 + 7.45710 BldFl2Sh(3) - , coeff of x^3 + 2.84170 BldFl2Sh(4) - , coeff of x^4 +-3.97820 BldFl2Sh(5) - , coeff of x^5 + 0.20116 BldFl2Sh(6) - , coeff of x^6 + 2.48090 BldEdgSh(2) - Edge mode 1, coeff of x^2 +-4.17160 BldEdgSh(3) - , coeff of x^3 + 5.03260 BldEdgSh(4) - , coeff of x^4 +-2.86170 BldEdgSh(5) - , coeff of x^5 + 0.51983 BldEdgSh(6) - , coeff of x^6 \ No newline at end of file diff --git a/example/MHK_RM1_Floating/MHK_RM1_Floating.fst b/example/MHK_RM1_Floating/MHK_RM1_Floating.fst new file mode 100644 index 00000000..5ce3a753 --- /dev/null +++ b/example/MHK_RM1_Floating/MHK_RM1_Floating.fst @@ -0,0 +1,73 @@ +------- OpenFAST EXAMPLE INPUT FILE ------------------------------------------- +Floating MHK turbine, based on the RM1 tidal current rotor +---------------------- SIMULATION CONTROL -------------------------------------- +False Echo - Echo input data to .ech (flag) +"FATAL" AbortLevel - Error level when simulation should abort (string) {"WARNING", "SEVERE", "FATAL"} + 1 TMax - Total run time (s) + 0.01 DT - Recommended module time step (s) + 2 InterpOrder - Interpolation order for input/output time history (-) {1=linear, 2=quadratic} + 5 NumCrctn - Number of correction iterations (-) {0=explicit calculation, i.e., no corrections} + 99999 DT_UJac - Time between calls to get Jacobians (s) + 1000000 UJacSclFact - Scaling factor used in Jacobians (-) +---------------------- FEATURE SWITCHES AND FLAGS ------------------------------ + 1 CompElast - Compute structural dynamics (switch) {1=ElastoDyn; 2=ElastoDyn + BeamDyn for blades; 3=Simplified ElastoDyn} + 1 CompInflow - Compute inflow wind velocities (switch) {0=still air; 1=InflowWind; 2=external from ExtInflow} + 2 CompAero - Compute aerodynamic loads (switch) {0=None; 1=AeroDisk; 2=AeroDyn; 3=ExtLoads} + 0 CompServo - Compute control and electrical-drive dynamics (switch) {0=None; 1=ServoDyn} + 1 CompSeaSt - Compute sea state information (switch) {0=None; 1=SeaState} + 1 CompHydro - Compute hydrodynamic loads (switch) {0=None; 1=HydroDyn} + 0 CompSub - Compute sub-structural dynamics (switch) {0=None; 1=SubDyn; 2=External Platform MCKF} + 3 CompMooring - Compute mooring system (switch) {0=None; 1=MAP++; 2=FEAMooring; 3=MoorDyn; 4=OrcaFlex} + 0 CompIce - Compute ice loads (switch) {0=None; 1=IceFloe; 2=IceDyn} + 2 MHK - MHK turbine type (switch) {0=Not an MHK turbine; 1=Fixed MHK turbine; 2=Floating MHK turbine} +---------------------- ENVIRONMENTAL CONDITIONS -------------------------------- + 9.80665 Gravity - Gravitational acceleration (m/s^2) + 1.225 AirDens - Air density (kg/m^3) + 1025 WtrDens - Water density (kg/m^3) + 1.06E-06 KinVisc - Kinematic viscosity of working fluid (m^2/s) + 1500 SpdSound - Speed of sound in working fluid (m/s) + 101325 Patm - Atmospheric pressure (Pa) [used only for an MHK turbine cavitation check] + 2500 Pvap - Vapour pressure of working fluid (Pa) [used only for an MHK turbine cavitation check] + 50 WtrDpth - Water depth (m) + 0 MSL2SWL - Offset between still-water level and mean sea level (m) [positive upward] +---------------------- INPUT FILES --------------------------------------------- +"MHK_RM1_Floating_ElastoDyn.dat" EDFile - Name of file containing ElastoDyn input parameters (quoted string) +"unused" BDBldFile(1) - Name of file containing BeamDyn input parameters for blade 1 (quoted string) +"unused" BDBldFile(2) - Name of file containing BeamDyn input parameters for blade 2 (quoted string) +"unused" BDBldFile(3) - Name of file containing BeamDyn input parameters for blade 3 (quoted string) +"MHK_RM1_Floating_InflowWind.dat" InflowFile - Name of file containing inflow wind input parameters (quoted string) +"MHK_RM1_Floating_AeroDyn.dat" AeroFile - Name of file containing aerodynamic input parameters (quoted string) +"unused" ServoFile - Name of file containing control and electrical-drive input parameters (quoted string) +"SeaState.dat" SeaStFile - Name of file containing sea state input parameters (quoted string) +"MHK_RM1_Floating_HydroDyn.dat" HydroFile - Name of file containing hydrodynamic input parameters (quoted string) +"unused" SubFile - Name of file containing sub-structural input parameters (quoted string) +"MHK_RM1_Floating_MoorDyn.dat" MooringFile - Name of file containing mooring system input parameters (quoted string) +"unused" IceFile - Name of file containing ice input parameters (quoted string) +---------------------- OUTPUT -------------------------------------------------- +True SumPrint - Print summary data to ".sum" (flag) + 5 SttsTime - Amount of time between screen status messages (s) + 99999 ChkptTime - Amount of time between creating checkpoint files for potential restart (s) + 0.1 DT_Out - Time step for tabular output (s) (or "default") + 0 TStart - Time to begin tabular output (s) + 3 OutFileFmt - Format for tabular (time-marching) output file (switch) {1: text file [.out], 2: binary file [.outb], 3: both 1 and 2, 4: uncompressed binary [.outb, 5: both 1 and 4} +True TabDelim - Use tab delimiters in text tabular output file? (flag) {uses spaces if false} +"ES10.3E2" OutFmt - Format used for text tabular output, excluding the time channel. Resulting field should be 10 characters. (quoted string) +---------------------- LINEARIZATION ------------------------------------------- +False Linearize - Linearization analysis (flag) +False CalcSteady - Calculate a steady-state periodic operating point before linearization? [unused if Linearize=False] (flag) + 1 TrimCase - Controller parameter to be trimmed {1:yaw; 2:torque; 3:pitch} [used only if CalcSteady=True] (-) + 0.01 TrimTol - Tolerance for the rotational speed convergence [used only if CalcSteady=True] (-) + 0.01 TrimGain - Proportional gain for the rotational speed error (>0) [used only if CalcSteady=True] (rad/(rad/s) for yaw or pitch; Nm/(rad/s) for torque) + 0 Twr_Kdmp - Damping factor for the tower [used only if CalcSteady=True] (N/(m/s)) + 0 Bld_Kdmp - Damping factor for the blades [used only if CalcSteady=True] (N/(m/s)) + 0 NLinTimes - Number of times to linearize (-) [>=1] [unused if Linearize=False] + 0 LinTimes - List of times at which to linearize (s) [1 to NLinTimes] [used only when Linearize=True and CalcSteady=False] + 0 LinInputs - Inputs included in linearization (switch) {0=none; 1=standard; 2=all module inputs (debug)} [unused if Linearize=False] + 0 LinOutputs - Outputs included in linearization (switch) {0=none; 1=from OutList(s); 2=all module outputs (debug)} [unused if Linearize=False] +False LinOutJac - Include full Jacobians in linearization output (for debug) (flag) [unused if Linearize=False; used only if LinInputs=LinOutputs=2] +False LinOutMod - Write module-level linearization output files in addition to output for full system? (flag) [unused if Linearize=False] +---------------------- VISUALIZATION ------------------------------------------ + 0 WrVTK - VTK visualization data output: (switch) {0=none; 1=initialization data only; 2=animation; 3=mode shapes} + 1 VTK_type - Type of VTK visualization data: (switch) {1=surfaces; 2=basic meshes (lines/points); 3=all meshes (debug)} [unused if WrVTK=0] +False VTK_fields - Write mesh fields to VTK data files? (flag) {true/false} [unused if WrVTK=0] + 0 VTK_fps - Frame rate for VTK output (frames per second){will use closest integer multiple of DT} [used only if WrVTK=2 or WrVTK=3] diff --git a/example/MHK_RM1_Floating/MHK_RM1_Floating_AeroDyn.dat b/example/MHK_RM1_Floating/MHK_RM1_Floating_AeroDyn.dat new file mode 100644 index 00000000..f00e7f3e --- /dev/null +++ b/example/MHK_RM1_Floating/MHK_RM1_Floating_AeroDyn.dat @@ -0,0 +1,145 @@ +------- AERODYN INPUT FILE -------------------------------------------------------------------------- +Floating MHK turbine hydrodynamic input properties, based on the RM1 tidal current rotor +====== General Options ============================================================================ +False Echo - Echo the input to ".AD.ech"? (flag) +"default" DTAero - Time interval for aerodynamic calculations {or "default"} (s) +1 Wake_Mod - Wake/induction model (switch) {0=none, 1=BEMT, 3=OLAF} [Wake_Mod cannot be 2 or 3 when linearizing] +1 TwrPotent - Type tower influence on wind based on potential flow around the tower (switch) {0=none, 1=baseline potential flow, 2=potential flow with Bak correction} +0 TwrShadow - Calculate tower influence on wind based on downstream tower shadow (switch) {0=none, 1=Powles model, 2=Eames model} +True TwrAero - Calculate tower aerodynamic loads? (flag) +True CavitCheck - Perform cavitation check? (flag) [UA_Mod must be 0 when CavitCheck=true] +True Buoyancy - Include buoyancy effects? (flag) +False NacelleDrag - Include Nacelle Drag effects? (flag) +False CompAA - Flag to compute AeroAcoustics calculation [used only when Wake_Mod = 1 or 2] +"unused" AA_InputFile - AeroAcoustics input file [used only when CompAA=true] +====== Environmental Conditions =================================================================== +"default" AirDens - Air density (kg/m^3) +"default" KinVisc - Kinematic viscosity of working fluid (m^2/s) +"default" SpdSound - Speed of sound in working fluid (m/s) +"default" Patm - Atmospheric pressure (Pa) [used only when CavitCheck=True] +"default" Pvap - Vapour pressure of working fluid (Pa) [used only when CavitCheck=True] +====== Blade-Element/Momentum Theory Options ====================================================== [unused when Wake_Mod=0 or 3, except for BEM_Mod] +1 BEM_Mod - BEM model {1=legacy NoSweepPitchTwist, 2=polar} (switch) [used for all Wake_Mod to determine output coordinate system] +--- Skew correction +1 Skew_Mod - Skew model {0=No skew model, -1=Remove non-normal component for linearization, 1=skew model active} +False SkewMomCorr - Turn the skew momentum correction on or off [used only when Skew_Mod=1] +default SkewRedistr_Mod - Type of skewed-wake correction model (switch) {0=no redistribution, 1=Glauert/Pitt/Peters, default=1} [used only when Skew_Mod=1] +"default" SkewRedistrFactor - Constant used in Pitt/Peters skewed wake model {or "default" is 15/32*pi} (-) [used only when Skew_Mod=1 and SkewRedistr_Mod=1] +--- BEM algorithm +True TipLoss - Use the Prandtl tip-loss model? (flag) [unused when Wake_Mod=0 or 3] +True HubLoss - Use the Prandtl hub-loss model? (flag) [unused when Wake_Mod=0 or 3] +True TanInd - Include tangential induction in BEMT calculations? (flag) [unused when Wake_Mod=0 or 3] +True AIDrag - Include the drag term in the axial-induction calculation? (flag) [unused when Wake_Mod=0 or 3] +True TIDrag - Include the drag term in the tangential-induction calculation? (flag) [unused when Wake_Mod=0,3 or TanInd=FALSE] +"default" IndToler - Convergence tolerance for BEMT nonlinear solve residual equation {or "default"} (-) [unused when Wake_Mod=0 or 3] +1000 MaxIter - Maximum number of iteration steps (-) [unused when Wake_Mod=0] +--- Shear correction +False SectAvg - Use sector averaging (flag) +1 SectAvgWeighting - Weighting function for sector average {1=Uniform, default=1} within a sector centered on the blade (switch) [used only when SectAvg=True] +default SectAvgNPoints - Number of points per sectors (-) {default=5} [used only when SectAvg=True] +default SectAvgPsiBwd - Backward azimuth relative to blade where the sector starts (<=0) {default=-60} (deg) [used only when SectAvg=True] +default SectAvgPsiFwd - Forward azimuth relative to blade where the sector ends (>=0) {default=60} (deg) [used only when SectAvg=True] +--- Dynamic wake/inflow +2 DBEMT_Mod - Type of dynamic BEMT (DBEMT) model {0=No Dynamic Wake, -1=Frozen Wake for linearization, 1:constant tau1, 2=time-dependent tau1, 3=constant tau1 with continuous formulation} (-) +4 tau1_const - Time constant for DBEMT (s) [used only when DBEMT_Mod=1 or 3] +====== OLAF -- cOnvecting LAgrangian Filaments (Free Vortex Wake) Theory Options ================== [used only when Wake_Mod=3] +"unused" OLAFInputFileName - Input file for OLAF [used only when Wake_Mod=3] +====== Unsteady Airfoil Aerodynamics Options ==================================================== +False AoA34 - Sample the angle of attack (AoA) at the 3/4 chord or the AC point {default=True} [always used] +0 UA_Mod - Unsteady Aero Model Switch (switch) {0=Quasi-steady (no UA), 2=B-L Gonzalez, 3=B-L Minnema/Pierce, 4=B-L HGM 4-states, 5=B-L HGM+vortex 5 states, 6=Oye, 7=Boeing-Vertol} +True FLookup - Flag to indicate whether a lookup for f' will be calculated (TRUE) or whether best-fit exponential equations will be used (FALSE); if FALSE S1-S4 must be provided in airfoil input files (flag) [used only when UA_Mod>0] +3 IntegrationMethod - Switch to indicate which integration method UA uses (1=RK4, 2=AB4, 3=ABM4, 4=BDF2) +0 UAStartRad - Starting radius for dynamic stall (fraction of rotor radius [0.0,1.0]) [used only when UA_Mod>0; if line is missing UAStartRad=0] +1 UAEndRad - Ending radius for dynamic stall (fraction of rotor radius [0.0,1.0]) [used only when UA_Mod>0; if line is missing UAEndRad=1] +====== Airfoil Information ========================================================================= +2 AFTabMod - Interpolation method for multiple airfoil tables {1=1D interpolation on AoA (first table only); 2=2D interpolation on AoA and Re; 3=2D interpolation on AoA and UserProp} (-) +1 InCol_Alfa - The column in the airfoil tables that contains the angle of attack (-) +2 InCol_Cl - The column in the airfoil tables that contains the lift coefficient (-) +3 InCol_Cd - The column in the airfoil tables that contains the drag coefficient (-) +0 InCol_Cm - The column in the airfoil tables that contains the pitching-moment coefficient; use zero if there is no Cm column (-) +4 InCol_Cpmin - The column in the airfoil tables that contains the Cpmin coefficient; use zero if there is no Cpmin column (-) +9 NumAFfiles - Number of airfoil files used (-) +"Airfoils/NACA6_1000.dat" AFNames - Airfoil file names (NumAFfiles lines) (quoted strings) +"Airfoils/NACA6_0864.dat" +"Airfoils/NACA6_0629.dat" +"Airfoils/NACA6_0444.dat" +"Airfoils/NACA6_0329.dat" +"Airfoils/NACA6_0276.dat" +"Airfoils/NACA6_0259.dat" +"Airfoils/NACA6_0247.dat" +"Airfoils/NACA6_0240.dat" +====== Rotor/Blade Properties ===================================================================== +False UseBlCm - Include aerodynamic pitching moment in calculations? (flag) +"MHK_RM1_AeroDyn_Blade.dat" ADBlFile(1) - Name of file containing distributed aerodynamic properties for Blade #1 (-) +"MHK_RM1_AeroDyn_Blade.dat" ADBlFile(2) - Name of file containing distributed aerodynamic properties for Blade #2 (-) [unused if NumBl < 2] +"unused" ADBlFile(3) - Name of file containing distributed aerodynamic properties for Blade #3 (-) [unused if NumBl < 3] +====== Hub Properties ============================================================================== [used only when Buoyancy=True] +7.2 VolHub - Hub volume (m^3) +0.2222 HubCenBx - Hub center of buoyancy x direction offset (m) +====== Nacelle Properties ========================================================================== [used only when Buoyancy=True or NacelleDrag=True] +38.6 VolNac - Nacelle volume (m^3) +0.43, 0, 0 NacCenB - Position of nacelle center of buoyancy from yaw bearing in nacelle coordinates (m) +0, 0, 0 NacArea - Projected area of the nacelle in X, Y, Z in the nacelle coordinate system (m^2) +0, 0, 0 NacCd - Drag coefficient for the nacelle areas defined above (-) +0, 0, 0 NacDragAC - Position of aerodynamic center of nacelle drag in nacelle coordinates (m) +====== Tail Fin Aerodynamics ======================================================================= +False TFinAero - Calculate tail fin aerodynamics model (flag) +"unused" TFinFile - Input file for tail fin aerodynamics [used only when TFinAero=True] +====== Tower Influence and Aerodynamics ============================================================ [used only when TwrPotent/=0, TwrShadow/=0, TwrAero=True, or Buoyancy=True] +4 NumTwrNds - Number of tower nodes used in the analysis (-) [used only when TwrPotent/=0, TwrShadow/=0, TwrAero=True, or Buoyancy=True] +TwrElev TwrDiam TwrCd TwrTI TwrCb ! TwrTI used only when TwrShadow=2; TwrCb used only when Buoyancy=True +(m) (m) (-) (-) (-) +-9.0000000E+00 3.2530000E-01 2.0000000E-01 0.0000000E+00 1.0000000E+00 +-1.4000000E+01 3.2530000E-01 2.0000000E-01 0.0000000E+00 1.0000000E+00 +-1.9000000E+01 3.2530000E-01 2.0000000E-01 0.0000000E+00 1.0000000E+00 +-2.4000000E+01 3.2530000E-01 2.0000000E-01 0.0000000E+00 1.0000000E+00 +====== Outputs ==================================================================================== +True SumPrint - Generate a summary file listing input options and interpolated properties to ".AD.sum"? (flag) +9 NBlOuts - Number of blade node outputs [0 - 9] (-) +1, 5, 9, 13, 17, 21, 25, 27, 30 BlOutNd - Blade nodes whose values will be output (-) +4 NTwOuts - Number of tower node outputs [0 - 9] (-) +1, 2, 3, 4 TwOutNd - Tower nodes whose values will be output (-) + OutList - The next line(s) contains a list of output parameters. See OutListParameters.xlsx for a listing of available output channels, (-) +"TwN1Fbx" - x-component of buoyant force per unit length at Tw node 1 +"TwN3Fby" - y-component of buoyant force per unit length at Tw node 3 +"TwN4Fbz" - z-component of buoyant force per unit length at Tw node 4 +"TwN1Mbx" - x-component of buoyant moment per unit length at Tw node 6 +"TwN2Mby" - y-component of buoyant moment per unit length at Tw node 5 +"TwN3Mbz" - z-component of buoyant moment per unit length at Tw node 2 +"B2N4Fbn" - Buoyant force normal to chord per unit length at blade 2 node 4 +"B1N7Fbt" - Buoyant force tangential to chord per unit length at blade 1 node 7 +"B2N8Fbs" - Buoyant spanwise force per unit length at blade 2 node 8 +"B1N2Mbn" - Buoyant moment normal to chord per unit length at blade 1 node 2 +"B2N3Mbt" - Buoyant moment tangential to chord per unit length at blade 2 node 3 +"B1N6Mbs" - Buoyant spanwise moment per unit length at blade 1 node 6 +"B1FldFz" - Total blade aerodynamic/hydrodynamic load for blade 1 (force in z-direction) +"B2FldMx" - Total blade aerodynamic/hydrodynamic load for blade 2 (moment in x-direction) +"HbFbx" - x-component of buoyant force at hub node +"HbFby" - y-component of buoyant force at hub node +"HbFbz" - z-component of buoyant force at hub node +"HbMbx" - x-component of buoyant moment at hub node +"HbMby" - y-component of buoyant moment at hub node +"HbMbz" - z-component of buoyant moment at hub node +"NcFbx" - x-component of buoyant force at nacelle node +"NcFby" - y-component of buoyant force at nacelle node +"NcFbz" - z-component of buoyant force at nacelle node +"NcMbx" - x-component of buoyant moment at nacelle node +"NcMby" - y-component of buoyant moment at nacelle node +"NcMbz" - z-component of buoyant moment at nacelle node +"RtFldFxh" - Total rotor aerodynamic/hydrodynamic and buoyant load (force in x direction) +"RtFldFyh" - Total rotor aerodynamic/hydrodynamic and buoyant load (force in y direction) +"RtFldFzg" - Total rotor aerodynamic/hydrodynamic and buoyant load (force in global z direction) +"RtFldMxh" - Total rotor aerodynamic/hydrodynamic and buoyant load (moment in x direction) +"RtFldMyg" - Total rotor aerodynamic/hydrodynamic and buoyant load (moment in global y direction) +"RtFldMzh" - Total rotor aerodynamic/hydrodynamic and buoyant load (moment in z direction) +"B1N3SigCr" - Critical cavitation number blade 1 node 3 +"B2N5SigCr" - Critical cavitation number blade 2 node 5 +"B1N2SgCav" - Cavitation number blade 1 node 2 +"B2N6SgCav" - Cavitation number blade 2 node 6 +END of OutList section (the word "END" must appear in the first 3 columns of the last OutList line) +---------------------- NODE OUTPUTS -------------------------------------------- +1 BldNd_BladesOut - Number of blades to output all node information at. Up to number of blades on turbine. (-) +ALL BldNd_BlOutNd - Specify a portion of the nodes to output. {"ALL", "Tip", "Root", or a list of node numbers} (-) + OutList_Nodal - The next line(s) contains a list of output parameters. See OutListParameters.xlsx for a listing of available output channels, (-) +END (the word "END" must appear in the first 3 columns of this last OutList line in the optional nodal output section) +==================================================================================================== diff --git a/example/MHK_RM1_Floating/MHK_RM1_Floating_ElastoDyn.dat b/example/MHK_RM1_Floating/MHK_RM1_Floating_ElastoDyn.dat new file mode 100644 index 00000000..d1a38617 --- /dev/null +++ b/example/MHK_RM1_Floating/MHK_RM1_Floating_ElastoDyn.dat @@ -0,0 +1,152 @@ +------- ELASTODYN for OpenFAST INPUT FILE ------------------------------------------- +Floating MHK turbine structural input properties, based on the RM1 tidal current rotor +---------------------- SIMULATION CONTROL -------------------------------------- +False Echo - Echo input data to ".ech" (flag) + 3 Method - Integration method: {1: RK4, 2: AB4, or 3: ABM4} (-) +"default" DT - Integration time step (s) +---------------------- DEGREES OF FREEDOM -------------------------------------- +False FlapDOF1 - First flapwise blade mode DOF (flag) +False FlapDOF2 - Second flapwise blade mode DOF (flag) +False EdgeDOF - First edgewise blade mode DOF (flag) +False TeetDOF - Rotor-teeter DOF (flag) [unused for 3 blades] +False DrTrDOF - Drivetrain rotational-flexibility DOF (flag) +False GenDOF - Generator DOF (flag) +False YawDOF - Yaw DOF (flag) +False TwFADOF1 - First fore-aft tower bending-mode DOF (flag) +False TwFADOF2 - Second fore-aft tower bending-mode DOF (flag) +False TwSSDOF1 - First side-to-side tower bending-mode DOF (flag) +False TwSSDOF2 - Second side-to-side tower bending-mode DOF (flag) +True PtfmSgDOF - Platform horizontal surge translation DOF (flag) +True PtfmSwDOF - Platform horizontal sway translation DOF (flag) +True PtfmHvDOF - Platform vertical heave translation DOF (flag) +True PtfmRDOF - Platform roll tilt rotation DOF (flag) +True PtfmPDOF - Platform pitch tilt rotation DOF (flag) +True PtfmYDOF - Platform yaw rotation DOF (flag) +---------------------- INITIAL CONDITIONS -------------------------------------- + 0 OoPDefl - Initial out-of-plane blade-tip displacement (meters) + 0 IPDefl - Initial in-plane blade-tip deflection (meters) + 0 BlPitch(1) - Blade 1 initial pitch (degrees) + 0 BlPitch(2) - Blade 2 initial pitch (degrees) + 0 BlPitch(3) - Blade 3 initial pitch (degrees) [unused for 2 blades] + 0 TeetDefl - Initial or fixed teeter angle (degrees) [unused for 3 blades] + 0 Azimuth - Initial azimuth angle for blade 1 (degrees) + 11.5 RotSpeed - Initial or fixed rotor speed (rpm) + 0 NacYaw - Initial or fixed nacelle-yaw angle (degrees) + 0 TTDspFA - Initial fore-aft tower-top displacement (meters) + 0 TTDspSS - Initial side-to-side tower-top displacement (meters) + 20 PtfmSurge - Initial or fixed horizontal surge translational displacement of platform (meters) + 0 PtfmSway - Initial or fixed horizontal sway translational displacement of platform (meters) + 0 PtfmHeave - Initial or fixed vertical heave translational displacement of platform (meters) + 0 PtfmRoll - Initial or fixed roll tilt rotational displacement of platform (degrees) + 0 PtfmPitch - Initial or fixed pitch tilt rotational displacement of platform (degrees) + 0 PtfmYaw - Initial or fixed yaw rotational displacement of platform (degrees) +---------------------- TURBINE CONFIGURATION ----------------------------------- + 2 NumBl - Number of blades (-) + 10 TipRad - The distance from the rotor apex to the blade tip (meters) + 1 HubRad - The distance from the rotor apex to the blade root (meters) + 0 PreCone(1) - Blade 1 cone angle (degrees) + 0 PreCone(2) - Blade 2 cone angle (degrees) + 0 PreCone(3) - Blade 3 cone angle (degrees) [unused for 2 blades] + 0.2222 HubCM - Distance from rotor apex to hub mass [positive downwind] (meters) + 0 UndSling - Undersling length [distance from teeter pin to the rotor apex] (meters) [unused for 3 blades] + 0 Delta3 - Delta-3 angle for teetering rotors (degrees) [unused for 3 blades] + 0 AzimB1Up - Azimuth value to use for I/O when blade 1 points up (degrees) + -4.91 OverHang - Distance from yaw axis to rotor apex [3 blades] or teeter pin [2 blades] (meters) + 0 ShftGagL - Distance from rotor apex [3 blades] or teeter pin [2 blades] to shaft strain gages [positive for upwind rotors] (meters) + 0 ShftTilt - Rotor shaft tilt angle (degrees) + 0.43 NacCMxn - Downwind distance from the tower-top to the nacelle CM (meters) + 0 NacCMyn - Lateral distance from the tower-top to the nacelle CM (meters) + -1.2 NacCMzn - Vertical distance from the tower-top to the nacelle CM (meters) + 0 NcIMUxn - Downwind distance from the tower-top to the nacelle IMU (meters) + 0 NcIMUyn - Lateral distance from the tower-top to the nacelle IMU (meters) + -1.2 NcIMUzn - Vertical distance from the tower-top to the nacelle IMU (meters) + -1.2 Twr2Shft - Vertical distance from the tower-top to the rotor shaft (meters) + -24 TowerHt - Height of tower relative to ground level [onshore], MSL [offshore wind or floating MHK], or seabed [fixed MHK] (meters) + -9 TowerBsHt - Height of tower base relative to ground level [onshore], MSL [offshore wind or floating MHK], or seabed [fixed MHK] (meters) + 0 PtfmCMxt - Downwind distance from the ground level [onshore], MSL [offshore wind or floating MHK], or seabed [fixed MHK] to the platform CM (meters) + 0 PtfmCMyt - Lateral distance from the ground level [onshore], MSL [offshore wind or floating MHK], or seabed [fixed MHK] to the platform CM (meters) + -6.09 PtfmCMzt - Vertical distance from the ground level [onshore], MSL [offshore wind or floating MHK], or seabed [fixed MHK] to the platform CM (meters) + 0 PtfmRefzt - Vertical distance from the ground level [onshore], MSL [offshore wind or floating MHK], or seabed [fixed MHK] to the platform reference point (meters) +---------------------- MASS AND INERTIA ---------------------------------------- + 0 TipMass(1) - Tip-brake mass, blade 1 (kg) + 0 TipMass(2) - Tip-brake mass, blade 2 (kg) + 0 TipMass(3) - Tip-brake mass, blade 3 (kg) [unused for 2 blades] + 140 HubMass - Hub mass (kg) + 79.6 HubIner - Hub inertia about rotor axis [3 blades] or teeter axis [2 blades] (kg m^2) + 139.5 GenIner - Generator inertia about HSS (kg m^2) + 40100 NacMass - Nacelle mass (kg) + 244643 NacYIner - Nacelle inertia about yaw axis (kg m^2) + 0 YawBrMass - Yaw bearing mass (kg) + 2525214 PtfmMass - Platform mass (kg) + 195242474 PtfmRIner - Platform inertia for roll tilt rotation about the platform CM (kg m^2) + 919435755 PtfmPIner - Platform inertia for pitch tilt rotation about the platform CM (kg m^2) + 1053535885 PtfmYIner - Platform inertia for yaw rotation about the platform CM (kg m^2) + 0 PtfmXYIner - Platform xy moment of inertia about the platform CM (=-int(xydm)) (kg m^2) + 0 PtfmYZIner - Platform yz moment of inertia about the platform CM (=-int(yzdm)) (kg m^2) + 0 PtfmXZIner - Platform xz moment of inertia about the platform CM (=-int(xzdm)) (kg m^2) +---------------------- BLADE --------------------------------------------------- + 8 BldNodes - Number of blade nodes (per blade) used for analysis (-) +"MHK_RM1_ElastoDyn_Blade.dat" BldFile(1) - Name of file containing properties for blade 1 (quoted string) +"MHK_RM1_ElastoDyn_Blade.dat" BldFile(2) - Name of file containing properties for blade 2 (quoted string) +"unused" BldFile(3) - Name of file containing properties for blade 3 (quoted string) [unused for 2 blades] +---------------------- ROTOR-TEETER -------------------------------------------- + 0 TeetMod - Rotor-teeter spring/damper model {0: none, 1: standard, 2: user-defined from routine UserTeet} (switch) [unused for 3 blades] + 0 TeetDmpP - Rotor-teeter damper position (degrees) [used only for 2 blades and when TeetMod=1] + 0 TeetDmp - Rotor-teeter damping constant (N-m/(rad/s)) [used only for 2 blades and when TeetMod=1] + 0 TeetCDmp - Rotor-teeter rate-independent Coulomb-damping moment (N-m) [used only for 2 blades and when TeetMod=1] + 0 TeetSStP - Rotor-teeter soft-stop position (degrees) [used only for 2 blades and when TeetMod=1] + 0 TeetHStP - Rotor-teeter hard-stop position (degrees) [used only for 2 blades and when TeetMod=1] + 0 TeetSSSp - Rotor-teeter soft-stop linear-spring constant (N-m/rad) [used only for 2 blades and when TeetMod=1] + 0 TeetHSSp - Rotor-teeter hard-stop linear-spring constant (N-m/rad) [used only for 2 blades and when TeetMod=1] +---------------------- YAW-FRICTION -------------------------------------------- + 0 YawFrctMod - Yaw-friction model {0: none, 1: friction independent of yaw-bearing force and bending moment, 2: friction with Coulomb terms depending on yaw-bearing force and bending moment, 3: user defined model} (switch) + 300 M_CSmax - Maximum static Coulomb friction torque (N-m) [M_CSmax when YawFrctMod=1; |Fz|*M_CSmax when YawFrctMod=2 and Fz<0] + 0 M_FCSmax - Maximum static Coulomb friction torque proportional to yaw bearing shear force (N-m) [sqrt(Fx^2+Fy^2)*M_FCSmax; only used when YawFrctMod=2] + 0 M_MCSmax - Maximum static Coulomb friction torque proportional to yaw bearing bending moment (N-m) [sqrt(Mx^2+My^2)*M_MCSmax; only used when YawFrctMod=2] + 40 M_CD - Dynamic Coulomb friction moment (N-m) [M_CD when YawFrctMod=1; |Fz|*M_CD when YawFrctMod=2 and Fz<0] + 0 M_FCD - Dynamic Coulomb friction moment proportional to yaw bearing shear force (N-m) [sqrt(Fx^2+Fy^2)*M_FCD; only used when YawFrctMod=2] + 0 M_MCD - Dynamic Coulomb friction moment proportional to yaw bearing bending moment (N-m) [sqrt(Mx^2+My^2)*M_MCD; only used when YawFrctMod=2] + 0 sig_v - Linear viscous friction coefficient (N-m/(rad/s)) + 0 sig_v2 - Quadratic viscous friction coefficient (N-m/(rad/s)^2) + 0 OmgCut - Yaw angular velocity cutoff below which viscous friction is linearized (rad/s) +---------------------- DRIVETRAIN ---------------------------------------------- + 92 GBoxEff - Gearbox efficiency (%) + 53 GBRatio - Gearbox ratio (-) + 600000 DTTorSpr - Drivetrain torsional spring (N-m/rad) + 100000 DTTorDmp - Drivetrain torsional damper (N-m/(rad/s)) +---------------------- FURLING ------------------------------------------------- +False Furling - Read in additional model properties for furling turbine (flag) [must currently be FALSE) +"unused" FurlFile - Name of file containing furling properties (quoted string) [unused when Furling=False] +---------------------- TOWER --------------------------------------------------- + 2 TwrNodes - Number of tower nodes used for analysis (-) +"MHK_RM1_Floating_ElastoDyn_Tower.dat" TwrFile - Name of file containing tower properties (quoted string) +---------------------- OUTPUT -------------------------------------------------- +True SumPrint - Print summary data to ".sum" (flag) + 1 OutFile - Switch to determine where output will be placed: {1: in module output file only; 2: in glue code output file only; 3: both} (currently unused) +True TabDelim - Use tab delimiters in text tabular output file? (flag) (currently unused) +"ES10.3E2" OutFmt - Format used for text tabular output (except time). Resulting field should be 10 characters. (quoted string) (currently unused) + 0 TStart - Time to begin tabular output (s) (currently unused) + 1 DecFact - Decimation factor for tabular output {1: output every time step} (-) (currently unused) + 0 NTwGages - Number of tower nodes that have strain gages for output [0 to 9] (-) + 0 TwrGagNd - List of tower nodes that have strain gages [1 to TwrNodes] (-) [unused if NTwGages=0] + 0 NBlGages - Number of blade nodes that have strain gages for output [0 to 9] (-) + 0 BldGagNd - List of blade nodes that have strain gages [1 to BldNodes] (-) [unused if NBlGages=0] + OutList - The next line(s) contains a list of output parameters. See OutListParameters.xlsx for a listing of available output channels, (-) +"PtfmSurge" +"PtfmSway" +"PtfmHeave" +"PtfmRoll" +"PtfmPitch" +"PtfmYaw" +"TwrTpTDxi" +"TwrTpTDyi" +"TwrTpTDzi" +"OoPDefl1" +END of OutList section (the word "END" must appear in the first 3 columns of the last OutList line) +====== Outputs for all blade stations (same ending as above for Spn1.... =========================== [optional section] + 1 BldNd_BladesOut - Number of blades to output all node information at. Up to number of blades on turbine. (-) +"All" BldNd_BlOutNd - Future feature will allow selecting a portion of the nodes to output. Not implemented yet. (-) + OutList - The next line(s) contains a list of output parameters. See OutListParameters.xlsx for a listing of available output channels, (-) +END (the word "END" must appear in the first 3 columns of this last OutList line in the optional nodal output section) +---------------------------------------------------------------- + diff --git a/example/MHK_RM1_Floating/MHK_RM1_Floating_ElastoDyn_Tower.dat b/example/MHK_RM1_Floating/MHK_RM1_Floating_ElastoDyn_Tower.dat new file mode 100644 index 00000000..f54dee11 --- /dev/null +++ b/example/MHK_RM1_Floating/MHK_RM1_Floating_ElastoDyn_Tower.dat @@ -0,0 +1,46 @@ + ------- ELASTODYN V1.00.* TOWER INPUT FILE ------------------------------------- +Floating MHK turbine structural tower input properties, based on the RM1 tidal current rotor +---------------------- TOWER PARAMETERS ---------------------------------------- + 5 NTwInpSt - Number of input stations to specify tower geometry + 1 TwrFADmp(1) - Tower 1st fore-aft mode structural damping ratio (%) + 1 TwrFADmp(2) - Tower 2nd fore-aft mode structural damping ratio (%) + 1 TwrSSDmp(1) - Tower 1st side-to-side mode structural damping ratio (%) + 1 TwrSSDmp(2) - Tower 2nd side-to-side mode structural damping ratio (%) +---------------------- TOWER ADJUSTMUNT FACTORS -------------------------------- + 1 FAStTunr(1) - Tower fore-aft modal stiffness tuner, 1st mode (-) + 1 FAStTunr(2) - Tower fore-aft modal stiffness tuner, 2nd mode (-) + 1 SSStTunr(1) - Tower side-to-side stiffness tuner, 1st mode (-) + 1 SSStTunr(2) - Tower side-to-side stiffness tuner, 2nd mode (-) + 1 AdjTwMa - Factor to adjust tower mass density (-) + 1 AdjFASt - Factor to adjust tower fore-aft stiffness (-) + 1 AdjSSSt - Factor to adjust tower side-to-side stiffness (-) +---------------------- DISTRIBUTED TOWER PROPERTIES ---------------------------- +HtFract TMassDen TwFAStif TwSSStif +(-) (kg/m) (Nm^2) (Nm^2) +0.00 652.34 5.62E+09 5.66E+08 +0.25 652.34 5.62E+09 5.66E+08 +0.50 652.34 5.62E+09 5.66E+08 +0.75 652.34 5.62E+09 5.66E+08 +1.00 652.34 5.62E+09 5.66E+08 +---------------------- TOWER FORE-AFT MODE SHAPES ------------------------------ + 1.4869000 TwFAM1Sh(2) - Mode 1, coefficient of x^2 term + -0.4901000 TwFAM1Sh(3) - , coefficient of x^3 term + 0.0024004 TwFAM1Sh(4) - , coefficient of x^4 term + -0.0014264 TwFAM1Sh(5) - , coefficient of x^5 term + 0.0022151 TwFAM1Sh(6) - , coefficient of x^6 term + 47.3126000 TwFAM2Sh(2) - Mode 2, coefficient of x^2 term + -47.0099000 TwFAM2Sh(3) - , coefficient of x^3 term + -6.1018000 TwFAM2Sh(4) - , coefficient of x^4 term + 8.9324000 TwFAM2Sh(5) - , coefficient of x^5 term + -2.1333000 TwFAM2Sh(6) - , coefficient of x^6 term +---------------------- TOWER SIDE-TO-SIDE MODE SHAPES -------------------------- + 1.5007000 TwSSM1Sh(2) - Mode 1, coefficient of x^2 term + -0.4979700 TwSSM1Sh(3) - , coefficient of x^3 term + -0.0116500 TwSSM1Sh(4) - , coefficient of x^4 term + 0.0104020 TwSSM1Sh(5) - , coefficient of x^5 term + -0.0014532 TwSSM1Sh(6) - , coefficient of x^6 term + 408.3002000 TwSSM2Sh(2) - Mode 2, coefficient of x^2 term +-420.2848000 TwSSM2Sh(3) - , coefficient of x^3 term +-111.0241000 TwSSM2Sh(4) - , coefficient of x^4 term + 166.6788000 TwSSM2Sh(5) - , coefficient of x^5 term + -42.6701000 TwSSM2Sh(6) - , coefficient of x^6 term \ No newline at end of file diff --git a/example/MHK_RM1_Floating/MHK_RM1_Floating_HydroDyn.dat b/example/MHK_RM1_Floating/MHK_RM1_Floating_HydroDyn.dat new file mode 100644 index 00000000..e60b6684 --- /dev/null +++ b/example/MHK_RM1_Floating/MHK_RM1_Floating_HydroDyn.dat @@ -0,0 +1,173 @@ +------- HydroDyn Input File ---------------------------------------------------- +Floating MHK turbine hydrodynamic support structure input properties, based on the RM1 tidal current rotor with a quad-style floating platform +False Echo - Echo the input file data (flag) +---------------------- FLOATING PLATFORM --------------------------------------- [unused with WaveMod=6] + 1 PotMod - Potential-flow model {0: none=no potential flow, 1: frequency-to-time-domain transforms based on WAMIT output, 2: fluid-impulse theory (FIT)} (switch) + 1 ExctnMod - Wave-excitation model {0: no wave-excitation calculation, 1: DFT, 2: state-space} (switch) [only used when PotMod=1; STATE-SPACE REQUIRES *.ssexctn INPUT FILE] + 0 ExctnDisp - Method of computing Wave Excitation {0: use undisplaced position, 1: use displaced position, 2: use low-pass filtered displaced position) [only used when PotMod=1 and ExctnMod>0 and SeaState's WaveMod>0]} (switch) + 0 ExctnCutOff - Cutoff (corner) frequency of the low-pass time-filtered displaced position (Hz) [>0.0] [used only when PotMod=1, ExctnMod>0, and ExctnDisp=2]) [only used when PotMod=1 and ExctnMod>0 and SeaState's WaveMod>0]} (switch) + 0 PtfmYMod - Model for large platform yaw offset {0: Static reference yaw offset based on PtfmRefY, 1: dynamic reference yaw offset based on low-pass filtering the PRP yaw motion with cutoff frequency PtfmYCutOff} (switch) + 0 PtfmRefY - Constant (if PtfmYMod=0) or initial (if PtfmYMod=1) platform reference yaw offset (deg) + 0.01 PtfmYCutOff - Cutoff frequency for the low-pass filtering of PRP yaw motion when PtfmYMod=1 [unused when PtfmYMod=0] (Hz) + 36 NExctnHdg - Number of evenly distributed platform yaw/heading angles over the range of [-180, 180) deg for which the wave excitation shall be computed [only used when PtfmYMod=1] (-) + 1 RdtnMod - Radiation memory-effect model {0: no memory-effect calculation, 1: convolution, 2: state-space} (switch) [only used when PotMod=1; STATE-SPACE REQUIRES *.ss INPUT FILE] + 60 RdtnTMax - Analysis time for wave radiation kernel calculations (sec) [only used when PotMod=1 and RdtnMod>0; determines RdtnDOmega=Pi/RdtnTMax in the cosine transform; MAKE SURE THIS IS LONG ENOUGH FOR THE RADIATION IMPULSE RESPONSE FUNCTIONS TO DECAY TO NEAR-ZERO FOR THE GIVEN PLATFORM!] + "DEFAULT" RdtnDT - Time step for wave radiation kernel calculations (sec) [only used when PotMod=1 and ExctnMod>0 or RdtnMod>0; DT<=RdtnDT<=0.1 recommended; determines RdtnOmegaMax=Pi/RdtnDT in the cosine transform] + 1 NBody - Number of WAMIT bodies to be used (-) [>=1; only used when PotMod=1. If NBodyMod=1, the WAMIT data contains a vector of size 6*NBody x 1 and matrices of size 6*NBody x 6*NBody; if NBodyMod>1, there are NBody sets of WAMIT data each with a vector of size 6 x 1 and matrices of size 6 x 6] + 2 NBodyMod - Body coupling model {1: include coupling terms between each body and NBody in HydroDyn equals NBODY in WAMIT, 2: neglect coupling terms between each body and NBODY=1 with XBODY=0 in WAMIT, 3: Neglect coupling terms between each body and NBODY=1 with XBODY=/0 in WAMIT} (switch) [only used when PotMod=1] +"MHK_RM1_Floating" PotFile - Root name of potential-flow model data; WAMIT output files containing the linear, nondimensionalized, hydrostatic restoring matrix (.hst), frequency-dependent hydrodynamic added mass matrix and damping matrix (.1), and frequency- and direction-dependent wave excitation force vector per unit wave amplitude (.3) (quoted string) [1 to NBody if NBodyMod>1] [MAKE SURE THE FREQUENCIES INHERENT IN THESE WAMIT FILES SPAN THE PHYSICALLY-SIGNIFICANT RANGE OF FREQUENCIES FOR THE GIVEN PLATFORM; THEY MUST CONTAIN THE ZERO- AND INFINITE-FREQUENCY LIMITS!] + 1 WAMITULEN - Characteristic body length scale used to redimensionalize WAMIT output (meters) [1 to NBody if NBodyMod>1] [only used when PotMod=1] + 0 PtfmRefxt - The xt offset of the body reference point(s) from (0,0,0) (meters) [1 to NBody] [only used when PotMod=1] + 0 PtfmRefyt - The yt offset of the body reference point(s) from (0,0,0) (meters) [1 to NBody] [only used when PotMod=1] + 0 PtfmRefzt - The zt offset of the body reference point(s) from (0,0,0) (meters) [1 to NBody] [only used when PotMod=1. If NBodyMod=2,PtfmRefzt=0.0] + 0 PtfmRefztRot - The rotation about zt of the body reference frame(s) from xt/yt (degrees) [1 to NBody] [only used when PotMod=1] + 2671.85 PtfmVol0 - Displaced volume of water when the body is in its undisplaced position (m^3) [1 to NBody] [only used when PotMod=1; USE THE SAME VALUE COMPUTED BY WAMIT AS OUTPUT IN THE .OUT FILE!] + 0 PtfmCOBxt - The xt offset of the center of buoyancy (COB) from (0,0) (meters) [1 to NBody] [only used when PotMod=1] + 0 PtfmCOByt - The yt offset of the center of buoyancy (COB) from (0,0) (meters) [1 to NBody] [only used when PotMod=1] +---------------------- 2ND-ORDER FLOATING PLATFORM FORCES ---------------------- [unused with WaveMod=0 or 6, or PotMod=0 or 2] + 0 MnDrift - Mean-drift 2nd-order forces computed {0: None; [7, 8, 9, 10, 11, or 12]: WAMIT file to use} [Only one of MnDrift, NewmanApp, or DiffQTF can be non-zero. If NBody>1, MnDrift /=8] + 0 NewmanApp - Mean- and slow-drift 2nd-order forces computed with Newman's approximation {0: None; [7, 8, 9, 10, 11, or 12]: WAMIT file to use} [Only one of MnDrift, NewmanApp, or DiffQTF can be non-zero. If NBody>1, NewmanApp/=8. Used only when WaveDirMod=0] + 0 DiffQTF - Full difference-frequency 2nd-order forces computed with full QTF {0: None; [10, 11, or 12]: WAMIT file to use} [Only one of MnDrift, NewmanApp, or DiffQTF can be non-zero] + 0 SumQTF - Full summation -frequency 2nd-order forces computed with full QTF {0: None; [10, 11, or 12]: WAMIT file to use} +---------------------- PLATFORM ADDITIONAL STIFFNESS AND DAMPING -------------- [unused with PotMod=0 or 2] + 0 AddF0 - Additional preload (N, N-m) [If NBodyMod=1, one size 6*NBody x 1 vector; if NBodyMod>1, NBody size 6 x 1 vectors] + 0 + 0 + 0 + 0 + 0 + 0 0 0 0 0 0 AddCLin - Additional linear stiffness (N/m, N/rad, N-m/m, N-m/rad) [If NBodyMod=1, one size 6*NBody x 6*NBody matrix; if NBodyMod>1, NBody size 6 x 6 matrices] + 0 0 0 0 0 0 + 0 0 0 0 0 0 + 0 0 0 0 0 0 + 0 0 0 0 0 0 + 0 0 0 0 0 0 + 0 0 0 0 0 0 AddBLin - Additional linear damping(N/(m/s), N/(rad/s), N-m/(m/s), N-m/(rad/s)) [If NBodyMod=1, one size 6*NBody x 6*NBody matrix; if NBodyMod>1, NBody size 6 x 6 matrices] + 0 0 0 0 0 0 + 0 0 0 0 0 0 + 0 0 0 0 0 0 + 0 0 0 0 0 0 + 0 0 0 0 0 0 + 0 0 0 0 0 0 AddBQuad - Additional quadratic drag(N/(m/s)^2, N/(rad/s)^2, N-m(m/s)^2, N-m/(rad/s)^2) [If NBodyMod=1, one size 6*NBody x 6*NBody matrix; if NBodyMod>1, NBody size 6 x 6 matrices] + 0 0 0 0 0 0 + 0 0 0 0 0 0 + 0 0 0 0 0 0 + 0 0 0 0 0 0 + 0 0 0 0 0 0 +---------------------- STRIP THEORY OPTIONS -------------------------------------- + 0 WaveDisp - Method of computing Wave Kinematics {0: use undisplaced position, 1: use displaced position) } (switch) + 0 AMMod - Method of computing distributed added-mass force. (0: Only and always on nodes below SWL at the undisplaced position. 2: Up to the instantaneous free surface) [overwrite to 0 when WaveMod = 0 or 6 or when WaveStMod = 0 in SeaState] +---------------------- AXIAL COEFFICIENTS -------------------------------------- + 2 NAxCoef - Number of axial coefficients (-) +AxCoefID AxCd AxCa AxCp AxFDMod AxVnCOff AxFDLoFSc + (-) (-) (-) (-) (-) (-) (-) + 1 0.00 0.00 0.00 0 -1.00 1.00 ! Columns / Braces (no exposed member ends) + 2 1.00 1.00 1.00 0 -1.00 1.00 ! Heave Plates +---------------------- MEMBER JOINTS ------------------------------------------- + 33 NJoints - Number of joints (-) [must be exactly 0 or at least 2] +JointID Jointxi Jointyi Jointzi JointAxID JointOvrlp [JointOvrlp= 0: do nothing at joint, 1: eliminate overlaps by calculating super member] + (-) (m) (m) (m) (-) (switch) + 0 28.00000 0.00000 -10.00000 1 0 ! Downstream Column + 1 28.00000 0.00000 6.00000 1 0 + 2 -28.00000 0.00000 -10.00000 1 0 ! Upstream Column + 3 -28.00000 0.00000 6.00000 1 0 + 4 0.00000 -12.00000 -10.00000 1 0 ! Starboard Column + 5 0.00000 -12.00000 6.00000 1 0 + 6 0.00000 12.00000 -10.00000 1 0 ! Port Column + 7 0.00000 12.00000 6.00000 1 0 + 8 3.67658 10.42430 4.50000 1 0 ! Upper Braces + 9 24.32340 1.57568 4.50000 1 0 + 10 3.67658 -10.42430 4.50000 1 0 + 11 24.32340 -1.57568 4.50000 1 0 + 12 -3.67658 10.42430 4.50000 1 0 + 13 -24.32340 1.57568 4.50000 1 0 + 14 -3.67658 -10.42430 4.50000 1 0 + 15 -24.32340 -1.57568 4.50000 1 0 + 16 3.67658 10.42430 -8.50000 1 0 ! Lower Braces + 17 24.32340 1.57568 -8.50000 1 0 + 18 3.67658 -10.42430 -8.50000 1 0 + 19 24.32340 -1.57568 -8.50000 1 0 + 20 -3.67658 10.42430 -8.50000 1 0 + 21 -24.32340 1.57568 -8.50000 1 0 + 22 -3.67658 -10.42430 -8.50000 1 0 + 23 -24.32340 -1.57568 -8.50000 1 0 + 24 0.00000 -8.00000 4.50000 1 0 ! Tower Braces + 25 0.00000 8.00000 4.50000 1 0 + 26 0.00000 -8.00000 -8.50000 1 0 + 27 0.00000 8.00000 -8.50000 1 0 + 28 0.00000 0.00000 -8.50000 1 0 + 29 28.00000 0.00000 -10.50000 2 0 ! Heave Plates + 30 -28.00000 0.00000 -10.50000 2 0 + 31 0.00000 -12.00000 -10.50000 2 0 + 32 0.00000 12.00000 -10.50000 2 0 +---------------------- MEMBER CROSS-SECTION PROPERTIES ------------------------- + 4 NPropSets - Number of member property sets (-) +PropSetID PropD PropThck + (-) (m) (m) + 0 8.00000 0.02000 ! Columns + 1 2.00000 0.02000 ! Braces + 2 2.00000 0.08100 ! Flooded Braces (not flooded in hydrodyn) + 3 12.00000 0.39250 ! Flooded Heave Plates (not flooded in hydrodyn) +---------------------- SIMPLE HYDRODYNAMIC COEFFICIENTS (model 1) -------------- + SimplCd SimplCdMG SimplCa SimplCaMG SimplCp SimplCpMG SimplAxCd SimplAxCdMG SimplAxCa SimplAxCaMG SimplAxCp SimplAxCpMG SimplCb SimplCbMG + (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) + 1.20 0.00 1.00 0.00 1.00 1.00 0.00 0.00 0.00 0.00 1.00 1.00 1.00 1.00 +---------------------- DEPTH-BASED HYDRODYNAMIC COEFFICIENTS (model 2) --------- + 0 NCoefDpth - Number of depth-dependent coefficients (-) +Dpth DpthCd DpthCdMG DpthCa DpthCaMG DpthCp DpthCpMG DpthAxCd DpthAxCdMG DpthAxCa DpthAxCaMG DpthAxCp DpthAxCpMG DpthCb DpthCbMG +(m) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) +---------------------- MEMBER-BASED HYDRODYNAMIC COEFFICIENTS (model 3) -------- + 0 NCoefMembers - Number of member-based coefficients (-) +MemberID MemberCd1 MemberCd2 MemberCdMG1 MemberCdMG2 MemberCa1 MemberCa2 MemberCaMG1 MemberCaMG2 MemberCp1 MemberCp2 MemberCpMG1 MemberCpMG2 MemberAxCd1 MemberAxCd2 MemberAxCdMG1 MemberAxCdMG2 MemberAxCa1 MemberAxCa2 MemberAxCaMG1 MemberAxCaMG2 MemberAxCp1 MemberAxCp2 MemberAxCpMG1 MemberAxCpMG2 MemberCb1 MemberCb2 MemberCbMG1 MemberCbMG2 + (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) +-------------------- MEMBERS ------------------------------------------------- + 20 NMembers - Number of members (-) +MemberID MJointID1 MJointID2 MPropSetID1 MPropSetID2 MDivSize MCoefMod MHstLMod PropPot [MCoefMod=1: use simple coeff table, 2: use depth-based coeff table, 3: use member-based coeff table] [ PropPot/=0 if member is modeled with potential-flow theory] + (-) (-) (-) (-) (-) (m) (switch) (switch) (flag) + 0 0 1 0 0 0.1000 1 1 TRUE ! Columns + 1 2 3 0 0 0.1000 1 1 TRUE + 2 4 5 0 0 0.1000 1 1 TRUE + 3 6 7 0 0 0.1000 1 1 TRUE + 4 8 9 1 1 0.1000 1 1 TRUE ! Upper Braces + 5 10 11 1 1 0.1000 1 1 TRUE + 6 12 13 1 1 0.1000 1 1 TRUE + 7 14 15 1 1 0.1000 1 1 TRUE + 8 16 17 2 2 0.1000 1 1 TRUE ! Lower Braces + 9 18 19 2 2 0.1000 1 1 TRUE + 10 20 21 2 2 0.1000 1 1 TRUE + 11 22 23 2 2 0.1000 1 1 TRUE + 12 24 25 1 1 0.1000 1 1 TRUE ! Tower Braces + 13 26 27 1 1 0.1000 1 1 TRUE + 14 24 28 1 1 0.1000 1 1 TRUE + 15 25 28 1 1 0.1000 1 1 TRUE + 16 0 29 3 3 0.1000 1 1 TRUE ! Heave Plates + 17 2 30 3 3 0.1000 1 1 TRUE + 18 4 31 3 3 0.1000 1 1 TRUE + 19 6 32 3 3 0.1000 1 1 TRUE +---------------------- FILLED MEMBERS ------------------------------------------ + 0 NFillGroups - Number of filled member groups (-) [If FillDens = DEFAULT, then FillDens = WtrDens; FillFSLoc is related to MSL2SWL] +FillNumM FillMList FillFSLoc FillDens +(-) (-) (m) (kg/m^3) +---------------------- MARINE GROWTH ------------------------------------------- + 0 NMGDepths - Number of marine-growth depths specified (-) +MGDpth MGThck MGDens +(m) (m) (kg/m^3) +---------------------- MEMBER OUTPUT LIST -------------------------------------- + 0 NMOutputs - Number of member outputs (-) [must be < 10] +MemberID NOutLoc NodeLocs [NOutLoc < 10; node locations are normalized distance from the start of the member, and must be >=0 and <= 1] [unused if NMOutputs=0] + (-) (-) (-) +---------------------- JOINT OUTPUT LIST --------------------------------------- + 0 NJOutputs - Number of joint outputs [Must be < 10] + 0 JOutLst - List of JointIDs which are to be output (-)[unused if NJOutputs=0] +---------------------- OUTPUT -------------------------------------------------- +True HDSum - Output a summary file [flag] +False OutAll - Output all user-specified member and joint loads (only at each member end, not interior locations) [flag] + 2 OutSwtch - Output requested channels to: [1=Hydrodyn.out, 2=GlueCode.out, 3=both files] +"E15.7e2" OutFmt - Output format for numerical results (quoted string) [not checked for validity!] +"A11" OutSFmt - Output format for header strings (quoted string) [not checked for validity!] +---------------------- OUTPUT CHANNELS ----------------------------------------- +Wave1Elev - Wave elevation at the platform reference point (0, 0) +HydroFxi - Buoyancy force [N] in the X direction. +HydroFyi - Buoyancy force [N] in the Y direction. +HydroFzi - Buoyancy force [N] in the vertical direction (Z). +END of output channels and end of file. (the word "END" must appear in the first 3 columns of this line) \ No newline at end of file diff --git a/example/MHK_RM1_Floating/MHK_RM1_Floating_InflowWind.dat b/example/MHK_RM1_Floating/MHK_RM1_Floating_InflowWind.dat new file mode 100644 index 00000000..a51d8ba7 --- /dev/null +++ b/example/MHK_RM1_Floating/MHK_RM1_Floating_InflowWind.dat @@ -0,0 +1,68 @@ +------- InflowWind INPUT FILE ------------------------------------------------------------------------- +Steady 1.9 m/s inflow for floating MHK turbine, based on the RM1 tidal current rotor +--------------------------------------------------------------------------------------------------------------- +False Echo - Echo input data to .ech (flag) + 1 WindType - switch for wind file type (1=steady; 2=uniform; 3=binary TurbSim FF; 4=binary Bladed-style FF; 5=HAWC format; 6=User defined; 7=native Bladed FF) + 0 PropagationDir - Direction of wind propagation (meteorological rotation from aligned with X (positive rotates towards -Y) -- degrees) (not used for native Bladed format WindType=7) + 0 VFlowAng - Upflow angle (degrees) (not used for native Bladed format WindType=7) +False VelInterpCubic - Use cubic interpolation for velocity in time (false=linear, true=cubic) [Used with WindType=2,3,4,5,7] + 1 NWindVel - Number of points to output the wind velocity (0 to 9) + 0 WindVxiList - List of coordinates in the inertial X direction (m) + 0 WindVyiList - List of coordinates in the inertial Y direction (m) + 24.8 WindVziList - List of coordinates in the inertial Z direction (m) +================== Parameters for Steady Wind Conditions [used only for WindType = 1] ========================= + 1.9 HWindSpeed - Horizontal wind speed (m/s) + 24.8 RefHt - Reference height for horizontal wind speed (m) + 0.1429 PLExp - Power law exponent (-) +================== Parameters for Uniform wind file [used only for WindType = 2] ============================ +"unused" FileName_Uni - Filename of time series data for uniform wind field. (-) + 30 RefHt_Uni - Reference height for horizontal wind speed (m) + 125.88 RefLength - Reference length for linear horizontal and vertical sheer (-) +================== Parameters for Binary TurbSim Full-Field files [used only for WindType = 3] ============== +"unused" FileName_BTS - Name of the Full field wind file to use (.bts) +================== Parameters for Binary Bladed-style Full-Field files [used only for WindType = 4 or WindType = 7] ========= +"unused" FileNameRoot - WindType=4: Rootname of the full-field wind file to use (.wnd, .sum); WindType=7: name of the intermediate file with wind scaling values +False TowerFile - Have tower file (.twr) (flag) ignored when WindType = 7 +================== Parameters for HAWC-format binary files [Only used with WindType = 5] ===================== +"unused" FileName_u - name of the file containing the u-component fluctuating wind (.bin) +"unused" FileName_v - name of the file containing the v-component fluctuating wind (.bin) +"unused" FileName_w - name of the file containing the w-component fluctuating wind (.bin) + 64 nx - number of grids in the x direction (in the 3 files above) (-) + 32 ny - number of grids in the y direction (in the 3 files above) (-) + 32 nz - number of grids in the z direction (in the 3 files above) (-) + 16 dx - distance (in meters) between points in the x direction (m) + 3 dy - distance (in meters) between points in the y direction (m) + 3 dz - distance (in meters) between points in the z direction (m) + 90 RefHt_Hawc - reference height; the height (in meters) of the vertical center of the grid (m) + ------------- Scaling parameters for turbulence --------------------------------------------------------- + 1 ScaleMethod - Turbulence scaling method [0 = none, 1 = direct scaling, 2 = calculate scaling factor based on a desired standard deviation] + 1 SFx - Turbulence scaling factor for the x direction (-) [ScaleMethod=1] + 1 SFy - Turbulence scaling factor for the y direction (-) [ScaleMethod=1] + 1 SFz - Turbulence scaling factor for the z direction (-) [ScaleMethod=1] + 1 SigmaFx - Turbulence standard deviation to calculate scaling from in x direction (m/s) [ScaleMethod=2] + 1 SigmaFy - Turbulence standard deviation to calculate scaling from in y direction (m/s) [ScaleMethod=2] + 1 SigmaFz - Turbulence standard deviation to calculate scaling from in z direction (m/s) [ScaleMethod=2] + ------------- Mean wind profile parameters (added to HAWC-format files) --------------------------------- + 5 URef - Mean u-component wind speed at the reference height (m/s) + 2 WindProfile - Wind profile type (0=constant;1=logarithmic,2=power law) + 0 PLExp_Hawc - Power law exponent (-) (used for PL wind profile type only) + 0.03 Z0 - Surface roughness length (m) (used for LG wind profile type only) + 0 XOffset - Initial offset in +x direction (shift of wind box) +================== LIDAR Parameters =========================================================================== + 0 SensorType - Switch for lidar configuration (0 = None, 1 = Single Point Beam(s), 2 = Continuous, 3 = Pulsed) + 0 NumPulseGate - Number of lidar measurement gates (used when SensorType = 3) + 30 PulseSpacing - Distance between range gates (m) (used when SensorType = 3) + 0 NumBeam - Number of lidar measurement beams (0-5)(used when SensorType = 1) + -200 FocalDistanceX - Focal distance co-ordinates of the lidar beam in the x direction (relative to hub height) (only first coordinate used for SensorType 2 and 3) (m) + 0 FocalDistanceY - Focal distance co-ordinates of the lidar beam in the y direction (relative to hub height) (only first coordinate used for SensorType 2 and 3) (m) + 0 FocalDistanceZ - Focal distance co-ordinates of the lidar beam in the z direction (relative to hub height) (only first coordinate used for SensorType 2 and 3) (m) + 0, 0, 0 RotorApexOffsetPos - Offset of the lidar from hub height (m) + 17 URefLid - Reference average wind speed for the lidar[m/s] + 0.25 MeasurementInterval - Time between each measurement [s] +False LidRadialVel - TRUE => return radial component, FALSE => return 'x' direction estimate + 1 ConsiderHubMotion - Flag whether to consider the hub motion's impact on Lidar measurements +====================== OUTPUT ================================================== +True SumPrint - Print summary data to .IfW.sum (flag) + OutList - The next line(s) contains a list of output parameters. See OutListParameters.xlsx for a listing of available output channels, (-) +END of input file (the word "END" must appear in the first 3 columns of this last OutList line) +--------------------------------------------------------------------------------------- diff --git a/example/MHK_RM1_Floating/MHK_RM1_Floating_MoorDyn.dat b/example/MHK_RM1_Floating/MHK_RM1_Floating_MoorDyn.dat new file mode 100644 index 00000000..3e3b326e --- /dev/null +++ b/example/MHK_RM1_Floating/MHK_RM1_Floating_MoorDyn.dat @@ -0,0 +1,44 @@ +--------------------- MoorDyn Input File ------------------------------------ +Floating MHK turbine mooring input properties, based on the RM1 tidal current rotor with a quad-style floating platform +FALSE Echo - echo the input file data (flag) +----------------------- LINE TYPES Chain studless 0.018m -------------------- +Name Diam MassDen EA BA/-zeta EI Cd Ca CdAx CaAx +(-) (m) (kg/m) (N) (N-s/-) (-) (-) (-) (-) (-) +main 0.324 644.8 85.4e8 -0.8 0.8 2.4 1.0 1.15 0.5 +---------------------- POINTS ----------------------------------------------- +Node Type X Y Z M V CdA CA +(-) (-) (m) (m) (m) (kg) (m^3) (m^2) (-) +1 Fixed -152.0 -50.0 -50.0 0 0 0 0 +2 Fixed -152.0 0.0 -50.0 0 0 0 0 +3 Fixed -152.0 50.0 -50.0 0 0 0 0 +4 Fixed 152.0 -50.0 -50.0 0 0 0 0 +5 Fixed 152.0 0.0 -50.0 0 0 0 0 +6 Fixed 152.0 50.0 -50.0 0 0 0 0 +7 Vessel -34.0 0.0 -10.0 0 0 0 0 +8 Vessel -34.0 0.0 -10.0 0 0 0 0 +9 Vessel -34.0 0.0 -10.0 0 0 0 0 +10 Vessel 34.0 0.0 -10.0 0 0 0 0 +11 Vessel 34.0 0.0 -10.0 0 0 0 0 +12 Vessel 34.0 0.0 -10.0 0 0 0 0 +---------------------- LINES ------------------------------------------------ +Line LineType AttachA AttachB UnstrLen NumSegs Outputs +(-) (-) (-) (-) (m) (-) (-) +1 main 1 7 160.0 30 - +2 main 2 8 152.0 30 - +3 main 3 9 160.0 30 - +4 main 4 10 160.0 30 - +5 main 5 11 152.0 30 - +6 main 6 12 160.0 30 - +---------------------- SOLVER OPTIONS --------------------------------------- +0.5e-4 dtM - time step to use in mooring integration (s) +3.0e6 kbot - bottom stiffness (Pa/m) +3.0e5 cbot - bottom damping (Pa-s/m) +1.0 dtIC - time interval for analyzing convergence during IC gen (s) +10.0 TmaxIC - max time for ic gen (s) +4.0 CdScaleIC - factor by which to scale drag coefficients during dynamic relaxation (-) +0.1 threshIC - threshold for IC convergence (-) +0 outswitch - switch to disable MD.out file, output channels can be found in the main FAST output file +------------------------ OUTPUTS -------------------------------------------- +FairTen1 FairTen2 FairTen3 FairTen4 FairTen5 FairTen6 +AnchTen1 AnchTen2 AnchTen3 AnchTen4 AnchTen5 AnchTen6 +------------------------- need this line ------------------------------------ diff --git a/example/MHK_RM1_Floating/README.md b/example/MHK_RM1_Floating/README.md new file mode 100644 index 00000000..f5d2ea72 --- /dev/null +++ b/example/MHK_RM1_Floating/README.md @@ -0,0 +1,5 @@ +This subdirectory is a demonstration of running OpenFAST with MoorDyn-F. These files are very similar to the MHK_RM1_Floating OpenFAST regression test in https://github.com/OpenFAST/r-test/tree/main/glue-codes/openfast/MHK_RM1_Floating. A few small changes were made, limiting the simulation to run for only one second and changing the output channel list for MoorDyn. The main MoorDyn output file was also disabled, as those outputs can be found in the OpenFAST output file. The changes were made to `MHK_RM1_Floating_MoorDyn.dat` and `MHK_RM1_Floating.fst`. Becasue this example is a modification of the OpenFAST r-test repository (https://github.com/OpenFAST/r-test/tree/main), that license is also included here. + +To run, you need to locate the OpenFAST executable from the OpenFAST release files, or compile it yourself. More information on this can be found in the [OpenFAST documentation](https://openfast.readthedocs.io/en/main/). Once locating the executable and moving it to this directory, run the following command. + +`openfast MHK_RM1_Floating.fst` \ No newline at end of file diff --git a/example/MHK_RM1_Floating/SeaState.dat b/example/MHK_RM1_Floating/SeaState.dat new file mode 100644 index 00000000..b85faeea --- /dev/null +++ b/example/MHK_RM1_Floating/SeaState.dat @@ -0,0 +1,72 @@ +------- SeaState Input File ---------------------------------------------------- +Floating MHK turbine hydrodynamic support structure input properties, based on the RM1 tidal current rotor with a quad-style floating platform +False Echo - Echo the input file data (flag) +---------------------- ENVIRONMENTAL CONDITIONS -------------------------------- +"DEFAULT" WtrDens - Water density (kg/m^3) +"DEFAULT" WtrDpth - Water depth (meters) relative to MSL +"DEFAULT" MSL2SWL - Offset between still-water level and mean sea level (meters) [positive upward; unused when WaveMod = 6; must be zero if PotMod=1 or 2] +---------------------- SPATIAL DISCRETIZATION --------------------------------------------------- + 30 X_HalfWidth – Half-width of the domain in the X direction (m) [>0, NOTE: X[nX] = nX*dX, where nX = {-NX+1,-NX+2,…,NX-1} and dX = X_HalfWidth/(NX-1)] + 30 Y_HalfWidth – Half-width of the domain in the Y direction (m) [>0, NOTE: Y[nY] = nY*dY, where nY = {-NY+1,-NY+2,…,NY-1} and dY = Y_HalfWidth/(NY-1)] + 50 Z_Depth – Depth of the domain the Z direction (m) relative to SWL [0 < Z_Depth <= WtrDpth+MSL2SWL; "default": Z_Depth = WtrDpth+MSL2SWL; Z[nZ] = ( COS( nZ*dthetaZ ) – 1 )*Z_Depth, where nZ = {0,1,…NZ-1} and dthetaZ = pi/( 2*(NZ-1) )] + 11 NX – Number of nodes in half of the X-direction domain (-) [>=2] + 11 NY – Number of nodes in half of the Y-direction domain (-) [>=2] + 10 NZ – Number of nodes in the Z direction (-) [>=2] +---------------------- WAVES --------------------------------------------------- + 1 WaveMod - Incident wave kinematics model {0: none=still water, 1: regular (periodic), 1P#: regular with user-specified phase, 2: JONSWAP/Pierson-Moskowitz spectrum (irregular), 3: White noise spectrum (irregular), 4: user-defined spectrum from routine UserWaveSpctrm (irregular), 5: Externally generated wave-elevation time series, 6: Externally generated full wave-kinematics time series, 7: wave frequency components [option 6 is invalid for PotMod/=0]} (switch) + 0 WaveStMod - Model for stretching incident wave kinematics to instantaneous free surface {0: none=no stretching, 1: vertical stretching, 2: extrapolation stretching, 3: Wheeler stretching} (switch) [unused when WaveMod=0 or when PotMod/=0] + 600 WaveTMax - Analysis time for incident wave calculations (sec) [unused when WaveMod=0; determines WaveDOmega=2Pi/WaveTMax in the IFFT] + 0.1 WaveDT - Time step for incident wave calculations (sec) [unused when WaveMod=0 or 7; 0.1<=WaveDT<=1.0 recommended; determines WaveOmegaMax=Pi/WaveDT in the IFFT] + 2.0 WaveHs - Significant wave height of incident waves (meters) [used only when WaveMod=1, 2, or 3] + 6.75 WaveTp - Peak-spectral period of incident waves (sec) [used only when WaveMod=1 or 2] +"DEFAULT" WavePkShp - Peak-shape parameter of incident wave spectrum (-) or DEFAULT (string) [used only when WaveMod=2; use 1.0 for Pierson-Moskowitz] + 0.314159 WvLowCOff - Low cut-off frequency or lower frequency limit of the wave spectrum beyond which the wave spectrum is zeroed (rad/s) [unused when WaveMod=0, 1, 6, or 7] + 1.570796 WvHiCOff - High cut-off frequency or upper frequency limit of the wave spectrum beyond which the wave spectrum is zeroed (rad/s) [unused when WaveMod=0, 1, 6, or 7] + 0 WaveDir - Incident wave propagation heading direction (degrees) [unused when WaveMod=0, 6 or 7] + 0 WaveDirMod - Directional spreading function {0: none, 1: COS2S} (-) [only used when WaveMod=2,3, or 4] + 1 WaveDirSpread - Wave direction spreading coefficient ( > 0 ) (-) [only used when WaveMod=2,3, or 4 and WaveDirMod=1] + 1 WaveNDir - Number of wave directions (-) [only used when WaveMod=2,3, or 4 and WaveDirMod=1; odd number only] + 0 WaveDirRange - Range of wave directions (full range: WaveDir +/- 1/2*WaveDirRange) (degrees) [only used when WaveMod=2,3,or 4 and WaveDirMod=1] + 123456789 WaveSeed(1) - First random seed of incident waves [-2147483648 to 2147483647] (-) [unused when WaveMod=0, 5, or 6] +"RANLUX" WaveSeed(2) - Second random seed of incident waves [-2147483648 to 2147483647] for intrinsic pRNG, or an alternative pRNG: "RanLux" (-) [unused when WaveMod=0, 5, or 6] +FALSE WaveNDAmp - Flag for normally distributed amplitudes (flag) [only used when WaveMod=2, 3, or 4] +"" WvKinFile - Root name of externally generated wave data file(s) (quoted string) [used only when WaveMod=5, 6 or 7] +---------------------- 2ND-ORDER WAVES ----------------------------------------- [unused with WaveMod=0 or 6] +FALSE WvDiffQTF - Full difference-frequency 2nd-order wave kinematics (flag) +FALSE WvSumQTF - Full summation-frequency 2nd-order wave kinematics (flag) + 0 WvLowCOffD - Low frequency cutoff used in the difference-frequencies (rad/s) [Only used with a difference-frequency method] + 1.256637 WvHiCOffD - High frequency cutoff used in the difference-frequencies (rad/s) [Only used with a difference-frequency method] + 0.618319 WvLowCOffS - Low frequency cutoff used in the summation-frequencies (rad/s) [Only used with a summation-frequency method] + 3.141593 WvHiCOffS - High frequency cutoff used in the summation-frequencies (rad/s) [Only used with a summation-frequency method] +---------------------- CONSTRAINED WAVES --------------------------------------- + 0 ConstWaveMod - Constrained wave model: 0=none; 1=Constrained wave with specified crest elevation, alpha; 2=Constrained wave with guaranteed peak-to-trough crest height, HCrest (flag) + 1 CrestHmax - Crest height (2*alpha for ConstWaveMod=1 or HCrest for ConstWaveMod=2), must be larger than WaveHs (m) [unused when ConstWaveMod=0] + 60 CrestTime - Time at which the crest appears (s) [unused when ConstWaveMod=0] + 0 CrestXi - X-position of the crest (m) [unused when ConstWaveMod=0] + 0 CrestYi - Y-position of the crest (m) [unused when ConstWaveMod=0] +---------------------- CURRENT ------------------------------------------------- [unused with WaveMod=6] + 1 CurrMod - Current profile model {0: none=no current, 1: standard, 2: user-defined from routine UserCurrent} (switch) + 0 CurrSSV0 - Sub-surface current velocity at still water level (m/s) [used only when CurrMod=1] + 0 CurrSSDir - Sub-surface current heading direction (degrees) or DEFAULT (string) [used only when CurrMod=1] + 12.2 CurrNSRef - Near-surface current reference depth (meters) [used only when CurrMod=1] + 0 CurrNSV0 - Near-surface current velocity at still water level (m/s) [used only when CurrMod=1] + 0 CurrNSDir - Near-surface current heading direction (degrees) [used only when CurrMod=1] + 1.9 CurrDIV - Depth-independent current velocity (m/s) [used only when CurrMod=1] + 0 CurrDIDir - Depth-independent current heading direction (degrees) [used only when CurrMod=1] +---------------------- MacCamy-Fuchs diffraction model ------------------------- + 0 MCFD - MacCamy-Fuchs member radius (ignored if radius <= 0) [must be 0 when WaveMod 0 or 6] +---------------------- OUTPUT -------------------------------------------------- +True SeaStSum - Output a summary file [flag] + 2 OutSwtch - Output requested channels to: [1=SeaState.out, 2=GlueCode.out, 3=both files] +"E15.7e2" OutFmt - Output format for numerical results (quoted string) [not checked for validity!] +"A11" OutSFmt - Output format for header strings (quoted string) [not checked for validity!] + 1 NWaveElev - Number of points where the incident wave elevations can be computed (-) [maximum of 9 output locations] + 0 WaveElevxi - List of xi-coordinates for points where the incident wave elevations can be output (meters) [NWaveElev points, separated by commas or white space; usused if NWaveElev = 0] + 0 WaveElevyi - List of yi-coordinates for points where the incident wave elevations can be output (meters) [NWaveElev points, separated by commas or white space; usused if NWaveElev = 0] + 2 NWaveKin - Number of points where the wave kinematics can be output (-) [maximum of 9 output locations] + 14.43376, -18.4752 WaveKinxi - List of xi-coordinates for points where the wave kinematics can be output (meters) [NWaveKin points, separated by commas or white space; usused if NWaveKin = 0] + 25, -6 WaveKinyi - List of yi-coordinates for points where the wave kinematics can be output (meters) [NWaveKin points, separated by commas or white space; usused if NWaveKin = 0] + -14, -17 WaveKinzi - List of zi-coordinates for points where the wave kinematics can be output (meters) [NWaveKin points, separated by commas or white space; usused if NWaveKin = 0] +---------------------- OUTPUT CHANNELS ----------------------------------------- +"Wave1Elev" - Wave elevation at the platform reference point +END of output channels and end of file. (the word "END" must appear in the first 3 columns of this line) diff --git a/example/MoorDynF_example/PtfmMotions.dat b/example/MoorDynF_example/PtfmMotions.dat new file mode 100644 index 00000000..9ba84fd9 --- /dev/null +++ b/example/MoorDynF_example/PtfmMotions.dat @@ -0,0 +1,3 @@ +# Time Surge Sway Heave Roll Pitch Yaw +0.0 0 0 0 0 0 0 +0.5 0.25 0 0 0 0 0 \ No newline at end of file diff --git a/example/MoorDynF_example/README.md b/example/MoorDynF_example/README.md new file mode 100644 index 00000000..c31bcc50 --- /dev/null +++ b/example/MoorDynF_example/README.md @@ -0,0 +1,5 @@ +This subdirectory is a demonstration of the MoorDyn-F driver. It is a useful tool if you are looking to work with the MoorDyn-F code directly without going through OpenFAST. This driver is set up to run the body.txt file from the exmple directory (the same as used in the jupyter notebook). + +To run, you need to locate the MoorDyn driver from the OpenFAST release files, or compile it yourself. More information in this can be found in the [OpenFAST documentation](https://openfast.readthedocs.io/en/main/). Once locating the driver and moving it to this directory, run `moordyn_driver md_driver.dvr` in the terminal. + +More information on the MoorDyn-F driver can be found in the MoorDyn docs [MoorDyn-F driver section](https://moordyn.readthedocs.io/en/latest/inputs.html#moordyn-f-driver-input-file). \ No newline at end of file diff --git a/example/MoorDynF_example/md_driver.dvr b/example/MoorDynF_example/md_driver.dvr new file mode 100644 index 00000000..5020a479 --- /dev/null +++ b/example/MoorDynF_example/md_driver.dvr @@ -0,0 +1,19 @@ +MoorDyn driver input file +another comment line +---------------------- ENVIRONMENTAL CONDITIONS ------------------------------- +9.80665 Gravity - Gravity (m/s^2) +1025.0 rhoW - Water density (kg/m^3) +10.0 WtrDpth - Water depth (m) +---------------------- MOORDYN ------------------------------------------------ +"../body.txt" MDInputFile - Primary MoorDyn input file name (quoted string) +"body" OutRootName - The name which prefixes all MoorDyn generated files (quoted string) +0.5 TMax - Number of time steps in the simulations (-) +0.5 dtC - TimeInterval for the simulation (sec) +0 InputsMode - MoorDyn coupled object inputs (0: all inputs are zero for every timestep (no coupled objects), 1: time-series inputs (coupled objects)) (switch) +"PtfmMotions.dat" InputsFile - Filename for the MoorDyn inputs file for when InputsMod = 1 (quoted string) +0 NumTurbines - Number of wind turbines (-) [>=1 to use FAST.Farm mode. 0 to use OpenFAST mode.] +---------------------- Initial Positions -------------------------------------- +ref_X ref_Y surge_init sway_init heave_init roll_init pitch_init yaw_init +(m) (m) (m) (m) (m) (rad) (rad) (rad) [followed by MAX(1,NumTurbines) rows of data] +0 0 0 0 0 0 0 0 +END of driver input file \ No newline at end of file diff --git a/example/MoorDyn_standalone_demo.ipynb b/example/MoorDyn_standalone_demo.ipynb new file mode 100644 index 00000000..4dac90f4 --- /dev/null +++ b/example/MoorDyn_standalone_demo.ipynb @@ -0,0 +1,765 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "2431a7", + "metadata": { + "collapsed": false + }, + "source": [ + "This Jupyter Notebook was presented during Software Demo Days. A link to that presentation can be found here: https://www.youtube.com/watch?v=FqW7Xpl_VNk\n", + "\n", + "# Starting Out\n", + "\n", + "Some reminder notes about MoorDyn:\n", + "- MoorDyn is a library driven by an external code\n", + " - Common publicly available drivers are WEC-Sim and OpenFAST, there are also numerous private drivers that have been built\n", + " - You can also build your own driver, which is what we do here in this demo\n", + "- The driver can either represent a larger system, like a floating wave energy converter, or it can drive the MoorDyn code in simulating a stand-alone system\n", + "\n", + "For this demo, we will be running MoorDyn-C using the example cases from the [MoorDyn documentation](https://moordyn.readthedocs.io/en/latest/drivers.html#python) and the [MoorDyn-C test library](https://github.com/FloatingArrayDesign/MoorDyn/tree/master/tests/Mooring). We will drive these systems by moving the fairleads at a constant velocity.\n", + "\n", + "To run MoorDyn-F, you need to use the MoorDyn-F driver. While it's beyond what we will talk about today, instructions and example files can be found in the `MoorDynF_example/` directory.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "627cec", + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# start by importing necessary modules\n", + "\n", + "import moordyn\n", + "import moorpy # a nice tool for visualizing moordyn\n", + "import numpy as np" + ] + }, + { + "cell_type": "markdown", + "id": "8e9e87", + "metadata": { + "collapsed": false + }, + "source": [ + "# 3-lines Simple Example\n", + "\n", + "## Input File\n", + "\n", + "For the first example, we will be simulating three catenary chain moorings on a floating wind turbine platform with no water kinematics \\(waves and currents\\). This is the mooring system of the OC3 Hywind Spar from [Jonkman 2010](https://www.nrel.gov/docs/fy10osti/47535.pdf) shown below.\n", + "\n", + "\"OC3\n", + "\n", + "These three mooring lines are attached to the platform at 70 m below the waterline and 5.2 m from the platform center, this location is known as the fairlead (represented as a MoorDyn point object). \n", + "We will run this simulation by telling MoorDyn how each fairlead is moving, and MoorDyn will output to our driver the forces at each fairlead. MoorDyn will also\n", + "produce output files that describe how the system is performing.\n", + "\n", + "This setup looks like the following MoorDyn input file:\n", + "\n", + "```\n", + "--------------------- MoorDyn Input File ------------------------------------\n", + "MoorDyn input file of the mooring system for OC3-Hywind\n", + "----------------------- LINE TYPES ------------------------------------------\n", + "TypeName Diam Mass/m EA BA/-zeta EI Cd Ca CdAx CaAx\n", + "(name) (m) (kg/m) (N) (N-s/-) (N-m^2) (-) (-) (-) (-)\n", + "main 0.09 77.7066 384.243E6 -0.8 0 1.6 1.0 0.1 0.0\n", + "---------------------- POINT PROPERTIES --------------------------------\n", + "ID Type X Y Z Mass Volume CdA Ca\n", + "(#) (-) (m) (m) (m) (kg) (mˆ3) (m^2) (-)\n", + "1 Fixed 853.87 0 -320.0 0 0 0 0\n", + "2 Fixed -426.94 739.47 -320.0 0 0 0 0\n", + "3 Fixed -426.94 -739.47 -320.0 0 0 0 0\n", + "4 Coupled 5.2 0.0 -70.0 0 0 0 0\n", + "5 Coupled -2.6 4.5 -70.0 0 0 0 0\n", + "6 Coupled -2.6 -4.5 -70.0 0 0 0 0\n", + "---------------------- LINES ----------------------------------------\n", + "ID LineType AttachA AttachB UnstrLen NumSegs LineOutputs\n", + "(#) (name) (#) (#) (m) (-) (-)\n", + "1 main 1 4 902.2 20 p\n", + "2 main 2 5 902.2 20 p\n", + "3 main 3 6 902.2 20 p\n", + "---------------------- OPTIONS -----------------------------------------\n", + "2 writeLog Write a log file\n", + "0.002 dtM time step to use in mooring integration (s)\n", + "3.0e6 kBot bottom stiffness (Pa/m)\n", + "3.0e5 cBot bottom damping (Pa-s/m)\n", + "1025.0 WtrDnsty water density (kg/m^3)\n", + "320 WtrDpth water depth (m)\n", + "1.0 dtIC time interval for analyzing convergence during IC gen (s)\n", + "100.0 TmaxIC max time for ic gen (s)\n", + "4.0 CdScaleIC factor by which to scale drag coefficients during dynamic relaxation (-)\n", + "0.001 threshIC threshold for IC convergence (-)\n", + "1 disableOutTime\n", + "---------------------- OUTPUTS -----------------------------------------\n", + "FairTen1\n", + "FairTen2\n", + "FairTen3\n", + "------------------------- need this line -------------------------------------- \n", + "```\n", + "\n", + "More information on MoorDyn input files can be found in the [V2 input file section of the documentation](https://moordyn.readthedocs.io/en/latest/inputs.html#the-v2-input-file).\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "id": "d1f3b5", + "metadata": { + "collapsed": false + }, + "source": [ + "## Initialization\n", + "First, we initialize the system:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d42146", + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + " Running MoorDyn (v2.4.0)\n", + " MoorDyn v2 has significant ongoing input file changes from v1.\n", + " Copyright: (C) 2024 National Renewable Energy Laboratory, (C) 2014-2019 Matt Hall\n", + " This program is released under the BSD 3-Clause license.\n", + "The filename is lines.txt\n", + "MoorDyn v2 log file with output level MSG at 'lines.log'\n", + "Generated entities:\n", + "\tnLineTypes = 1\n", + "\tnRodTypes = 0\n", + "\tnPoints = 6\n", + "\tnBodies = 0\n", + "\tnRods = 0\n", + "\tnLines = 3\n", + "\tnFails = 0\n", + "\tnFreeBodies = 0\n", + "\tnFreeRods = 0\n", + "\tnFreePoints = 0\n", + "\tnCpldBodies = 0\n", + "\tnCpldRods = 0\n", + "\tnCpldPoints = 3\n", + "Time integrator = 2nd order Runge-Kutta\n", + "Water kinematics for IC gen:\n", + " No Waves or Currents, or set externally\n", + "Creating mooring system...\n", + "Initializing coupled Point 4 at 5.2, 0, -70\n", + "Initializing coupled Point 5 at -2.6, 4.5, -70\n", + "Initializing coupled Point 6 at -2.6, -4.5, -70\n", + "dtM = 0.002 s (CFL = 0.015691)\n", + "Finalizing ICs using static solve\n", + " - Line1:\n", + " ID : 1\n", + " UnstrLen: 902.2\n", + " N : 20\n", + " d : 0.09\n", + " rho : 12214.7\n", + " EAMod : 1\n", + " EA : 3.84243e+08\n", + " BA : -0.8\n", + " EI : 0\n", + " Can : 1\n", + " Cat : 0\n", + " Cdn : 1.6\n", + " Cdt : 0.1\n", + " Cl : 0\n", + " dF : 0\n", + " cF : 0\n", + " ww_l : 698.333\n", + "Line 1 damping set to 9.80212e+08 Pa-s = 6.23584e+06 Ns, based on input of -0.8\n", + "Initialized Line 1\n", + " - Line2:\n", + " ID : 2\n", + " UnstrLen: 902.2\n", + " N : 20\n", + " d : 0.09\n", + " rho : 12214.7\n", + " EAMod : 1\n", + " EA : 3.84243e+08\n", + " BA : -0.8\n", + " EI : 0\n", + " Can : 1\n", + " Cat : 0\n", + " Cdn : 1.6\n", + " Cdt : 0.1\n", + " Cl : 0\n", + " dF : 0\n", + " cF : 0\n", + " ww_l : 698.333\n", + "Line 2 damping set to 9.80212e+08 Pa-s = 6.23584e+06 Ns, based on input of -0.8\n", + "Initialized Line 2\n", + " - Line3:\n", + " ID : 3\n", + " UnstrLen: 902.2\n", + " N : 20\n", + " d : 0.09\n", + " rho : 12214.7\n", + " EAMod : 1\n", + " EA : 3.84243e+08\n", + " BA : -0.8\n", + " EI : 0\n", + " Can : 1\n", + " Cat : 0\n", + " Cdn : 1.6\n", + " Cdt : 0.1\n", + " Cl : 0\n", + " dF : 0\n", + " cF : 0\n", + " ww_l : 698.333\n", + "Line 3 damping set to 9.80212e+08 Pa-s = 6.23584e+06 Ns, based on input of -0.8\n", + "Initialized Line 3\n", + "Remaining error after 52 s = 0.0014854 m/s2\n", + "Best score at 52 s = 0.0014854 m/s2\n", + "Water kinematics for runtime:\n", + " No Waves or Currents, or set externally\n" + ] + }, + { + "data": { + "text/plain": [ + "0" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Create the MoorDyn system from the input file\n", + "system = moordyn.Create(\"lines.txt\")\n", + "\n", + "# Set the initial positions in this driver code to what was defined in the input file\n", + "x = np.array([ 5.2, 0.0, -70.0, # point 4\n", + " -2.6, 4.5, -70.0, # point 5\n", + " -2.6, -4.5, -70.0]) # point 6\n", + "\n", + "# Set the velocities to zero. 3 coupled points x 3 DoF per point = 9 DoF\n", + "xd = np.zeros(9)\n", + "# Formerly:\n", + " # xd = [0] * 9\n", + "\n", + "# Setup the initial condition\n", + "moordyn.Init(system, x, xd)" + ] + }, + { + "cell_type": "markdown", + "id": "db2aee", + "metadata": { + "collapsed": false + }, + "source": [ + "## Time Stepping\n", + "\n", + "Then we run the simulation, moving the fairleads at 0.5 m/s in the x direction:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "45924a", + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Tensions at the fairleads:\n", + "FairTen1 = 827414.2252929022\n", + "FairTen2 = 939998.8305276999\n", + "FairTen3 = 939998.8305276999\n" + ] + }, + { + "data": { + "text/plain": [ + "0" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Make the points move at 0.5 m/s to the positive x direction\n", + "for i in range(3):\n", + " xd[3 * i] = 0.5\n", + "t, dt = 0.0, 0.5\n", + "\n", + "# Run the simulation for five timesteps\n", + "for i in range(5):\n", + " f = moordyn.Step(system, x, xd, t, dt)\n", + " t += dt # update the time\n", + " x += xd * dt # update the position \n", + "\n", + "# Print the last output fairlead tensions on the lines (the vector sum of the forces returned by moordyn)\n", + "print(\"Tensions at the fairleads:\")\n", + "print(\"FairTen1 = \", np.linalg.norm(f[0:3]))\n", + "print(\"FairTen2 = \", np.linalg.norm(f[3:6]))\n", + "print(\"FairTen3 = \", np.linalg.norm(f[6:9]))\n", + " \n", + "# Alright, time to finish!\n", + "moordyn.Close(system)" + ] + }, + { + "cell_type": "markdown", + "id": "4acdd5", + "metadata": { + "collapsed": false + }, + "source": [ + "## Visualizing\n", + "\n", + "MoorPy, a quasi-static mooring solver, can be used to visualize the outputs of MoorDyn. The details of MoorPy are beyond the scope of this example but can be found on the [MoorPy docs page](https://moorpy.readthedocs.io/en/latest/). In order to make the MoorDyn system compatible with MoorPy visualization, we need to output the line node positions. This is why we included the **p** flag in the LineOutputs:\n", + "```\n", + "---------------------- LINES ----------------------------------------\n", + "ID LineType AttachA AttachB UnstrLen NumSegs LineOutputs\n", + "(#) (name) (#) (#) (m) (-) (-)\n", + "1 main 1 4 902.2 20 p\n", + "```\n" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "14db1a", + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "attempting to read lines.txt\n", + "Mooring input file 'lines.txt' loaded successfully.\n", + "attempting to load ./lines_Line1.out\n", + "attempting to load ./lines_Line2.out\n", + "attempting to load ./lines_Line3.out\n" + ] + }, + { + "data": { + "text/plain": [ + "(
, )" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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338f9fX1vWwU8vLysHTpUtx0003YsmWL1VU3HI5Y8Gqc84zPP/8c6enpOHHiRK/neC2/5UilUiQnJyM5ORmbNm1CUVERdu7ciY8++gj33XcfUlNTsXz5cqxcuRJqtRrLli3D7bffjmeeeYYLPWdMwc/G84gzZ87g3nvvxSeffDIis1jHGxKJBJGRkXjsscfwxx9/oKysDFdffTX279+PuLg4zJo1C7fccgueffZZLvScMQc/I88j0tLS0NDQgMTERNjZ2cHOzg6HDx/GG2+8ATs7O/j5+bFaflN61vIPVnPNOSv8dP7w/v37UVtbi40bN+L555+3iRUzh2MtXOzPI+bPn4+cnBxkZmayP0lJSVizZg37f7lcjgMHDrD3FBUVobKyko1anDlzJnJyctDQ0MBe89NPP8HV1RXTpk0b8c90LiCRSODj44NNmzZxoeeMWXjM/jzCxcWFee1QnJyc4OXlxR6/+eabsWHDBnh6esLV1RV33303Zs6ciQsuuAAAsHDhQkybNg3XXXcdXnzxRdTV1eHxxx/HXXfdxVvrOZxzGL6yH2e8+uqrWL58Oa644grMnTsX/v7+2LlzJ3teJpNh3759kMlkmDlzJq699lqsXbsWzzzzjNl2qqurce2118LLywsODg6IiYnByZMn2fOEEPzjH/9AQEAAHBwcsGDBApSUlJhto7m5GWvWrIGrqyvc3d1x8803D8utksPhDIHRrv3knHs0NzeT0NBQcsMNN5Bjx46R06dPkx9++IGcOnWKvWbLli3Ezc2N7N69m2RlZZGVK1eS8PBw0t3dzV6zePFiEhcXR/744w/y66+/ksmTJ5PVq1ePxkcac/z888/9NuIdP36cEEJIWVlZn8/TngnKF198QaZOnUqUSiWZPn06b4Yap3Cx51jMxo0byZw5c/p9XhAE4u/vT1566SX2WGtrK1EqleSzzz4jhBCSn59PAJATJ06w13z33XdEIpGQ6upq2x38OYJWqzWz1aitrSW33HILCQ8PJ4IgEEL+FPv9+/ebvc7UioFPmOJQeBiHYzF79uxBUlISrrrqKvj6+iIhIQHvvfcee76srAx1dXVmzVtubm5ITU01a95yd3dHUlISe82CBQsglUpx7NixkfswYxSFQgF/f3/2x8vLC19//TVuvPHGXklgLy8vs9fK5XL23Ouvv47FixfjoYceQlRUFJ599lkkJibirbfeGumPxBlluNhzLOb06dN45513MGXKFPzwww9Yt24d7rnnHmzbtg3An81XAw27qKurg6+vr9nzdnZ28PT0HJfNW4OxZ88eNDU19TncfuXKlfD19cWcOXOwZ88es+f4hCkOhVfjcCxGEAQkJSXh+eefBwAkJCQgNzcXW7duFc2vnWPOf//7XyxatMhsBoKzszNeeeUVzJ49G1KpFF999RVWrVqF3bt3Y+XKlQD674jmF9TxB1/ZcywmICCgV819VFQUKisrAfzZfDXQsAt/f3+zWn4AMBgMaG5uPq+btx555BFIJJIB/xQWFpq9p6qqCj/88ANuvvlms8e9vb2xYcMGpKamIjk5GVu2bMG1116Ll156aSQ/Euccga/sORYze/ZsFBUVmT1WXFyM0NBQAEB4eDj8/f1x4MABxMfHAwDa29tx7NgxrFu3DsDZ5q3W1lakpaVhxowZAICDBw9CEASkpqaO3IcZYYYzYeqDDz6Al5cXW60PRGpqKn766Sf2dz5hisMY7Qwx59zj+PHjxM7OjmzatImUlJSQTz75hDg6OpKPP/6YvWbLli3E3d2dfP311yQ7O5tceumlfZZeJiQkkGPHjpHffvuNTJkyxaz00mAwkMcff5yEhYURe3t7MnHiRPLMM8+wahRCzlb+PPHEE8Tf35/Y29uT+fPn95oE1tTURK655hri4uJC3NzcyE033UQ6Ojps+A2JhyAIJDw8nDzwwANDev0tt9xCEhIS2N/5hCkOhYs9Z1js3buXTJ8+nSiVShIZGUneffdds+epCPv5+RGlUknmz59PioqKzF7T1NREVq9eTZydnYmrqyu58cYbzUR406ZNxMvLi+zbt4+UlZWRHTt2EGdnZ/L666+z15zv9fz79+8nAEhBQUGv5z788EPy6aefkoKCAlJQUEA2bdpEpFIpef/999lr+IQpDoWLPWfMsmzZMnLTTTeZPXb55ZeTNWvWEELGRz3/6tWrzSaJmfLhhx+SqKgo4ujoSFxdXUlKSorZYBoKnzDFIYSLPWcMs2nTJhIaGsruCDIzM4mvry8LF5WWlhIAJCMjw+x9c+fOJffccw8hhJD//ve/xN3d3ex5vV5PZDIZ2blzp+0/BIczRuAJWs6Y5ZFHHkF7ezsiIyMhk8lgNBqxadMmrFmzBgCv5+dwLIGLPWfM8sUXX+CTTz7Bp59+iujoaGRmZuK+++7DhAkTeD0/h2MhXOw5Y5aHHnoIjzzyCK6++moAQExMDCoqKrB582Zcf/31ZvX8AQEB7H319fWs5HO81vNzOD3hTVWcMUtXV1ev8X4ymQyCIAAwr+en0Hp+02EstJ6fMh7q+TmcnvCVPWfMsmLFCmzatAkhISGIjo5GRkYG/vnPf+Kmm24CcHZC1H333YfnnnsOU6ZMQXh4OJ544glMmDABq1atAnC2s3fx4sW49dZbsXXrVuj1eqxfvx5XX301JkyYMIqfjsMZYUY7Q8zh9Ed7ezu59957SUhICGuq+vvf/060Wi17jRj1/BzOeEBCCCGjfcHhcDgcjm3hMXsOh8MZB3Cx53A4nHEAF3sOh8MZB3Cx53A4nHEAF3sOh8MZB3Cx53A4nHEAF3sOh8MZB3Cx53A4nHEAF3sOh8MZB3Cx53A4nHEAF3sOh8MZB3Cx53A4nHEAF3sOh8MZB3Cx53A4nHEAF3sOh8MZB3Cx53A4nHEAF3sOh8MZB3Cx53A4nHEAF3sOh8MZB3Cx53A4nHEAF3sOh8MZB3Cx53A4nHEAF3sOh8MZB3Cx53A4nHEAF3sOh8MZB3Cx53A4nHEAF3sOh8MZB3Cx53A4nHEAF3sOh8MZB3Cx53A4nHEAF3sOh8MZB3Cx53A4nHEAF3sOh8MZB3Cx53A4nHEAF3sOh8MZB3Cx53A4nHEAF3sOh8MZB3Cx53A4nHEAF3sOh8MZB3Cx53A4nHEAF3sOh8MZB/w/dcU8XTanf5IAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Create a MoorPy system (this loads the moordyn outputs found in /_#.out, where is either Line or Rod and # is the corresponding number)\n", + "ms = moorpy.System(file=\"lines.txt\", dirname=\"./\", rootname=\"lines\", qs = 0, Fortran = False) # qs tells MoorPy it is loading a MoorDyn system, Fortran = False tells it to use the MoorDyn-C output format\n", + "\n", + "# Plot the results at t = 0 in red\n", + "ms.plot(color=\"red\", time = 0)" + ] + }, + { + "cell_type": "markdown", + "id": "dfe100", + "metadata": { + "collapsed": false + }, + "source": [ + "# 3-lines with Body Simple Example\n", + "\n", + "## Input File\n", + "\n", + "For the second example, we will be running a very similar setup to the previous case, but this time we will couple to a rigid body.\n", + "Similar to how the previous case is set up, we have three catenary lines. However, this time, the fairleads are attached to a rigid body,\n", + "which is then coupled to the external code. When using a rigid body, we need to be strategic about how we define positions because the body \n", + "motion controls the fairlead motion. For our setup, we define the body at `0, 0, -70`, which is the depth of the fairlead attachments in \n", + "the previous example. The fairlead locations are then defined in that body's reference frame.\n", + "\n", + "\n", + "This setup looks like the following MoorDyn input file:\n", + "\n", + "```\n", + "--------------------- MoorDyn Input File ------------------------------------\n", + "MoorDyn input file of the mooring system for OC3-Hywind\n", + "----------------------- LINE TYPES ------------------------------------------\n", + "TypeName Diam Mass/m EA BA/-zeta EI Cd Ca CdAx CaAx\n", + "(name) (m) (kg/m) (N) (N-s/-) (N-m^2) (-) (-) (-) (-)\n", + "main 0.09 77.7066 384.243E6 -0.8 0 1.6 1.0 0.1 0.0\n", + "----------------------- BODIES ------------------------------------------------------\n", + "ID Attachment X0 Y0 Z0 r0 p0 y0 Mass CG* I* Volume CdA* Ca*\n", + "(#) (-) (m) (m) (m) (deg) (deg) (deg) (kg) (m) (kg-m^2) (m^3) (m^2) (-)\n", + "1 Coupled 0 0 -70 0 0 0 0 0 0 0 0 0\n", + "---------------------- POINT PROPERTIES --------------------------------\n", + "ID Type X Y Z Mass Volume CdA Ca\n", + "(#) (-) (m) (m) (m) (kg) (mˆ3) (m^2) (-)\n", + "1 Fixed 853.87 0 -320.0 0 0 0 0\n", + "2 Fixed -426.94 739.47 -320.0 0 0 0 0\n", + "3 Fixed -426.94 -739.47 -320.0 0 0 0 0\n", + "4 Body1 5.2 0.0 0.0 0 0 0 0\n", + "5 Body1 -2.6 4.5 0.0 0 0 0 0\n", + "6 Body1 -2.6 -4.5 0.0 0 0 0 0\n", + "---------------------- LINES ----------------------------------------\n", + "ID LineType AttachA AttachB UnstrLen NumSegs LineOutputs\n", + "(#) (name) (#) (#) (m) (-) (-)\n", + "1 main 1 4 902.2 20 p\n", + "2 main 2 5 902.2 20 p\n", + "3 main 3 6 902.2 20 p\n", + "---------------------- OPTIONS -----------------------------------------\n", + "2 writeLog Write a log file\n", + "0.002 dtM time step to use in mooring integration (s)\n", + "3.0e6 kBot bottom stiffness (Pa/m)\n", + "3.0e5 cBot bottom damping (Pa-s/m)\n", + "1025.0 WtrDnsty water density (kg/m^3)\n", + "320 WtrDpth water depth (m)\n", + "1.0 dtIC time interval for analyzing convergence during IC gen (s)\n", + "100.0 TmaxIC max time for ic gen (s)\n", + "4.0 CdScaleIC factor by which to scale drag coefficients during dynamic relaxation (-)\n", + "0.001 threshIC threshold for IC convergence (-)\n", + "1 disableOutTime\n", + "---------------------- OUTPUTS -----------------------------------------\n", + "FairTen1\n", + "FairTen2\n", + "FairTen3\n", + "------------------------- need this line -------------------------------------- \n", + "```" + ] + }, + { + "cell_type": "markdown", + "id": "3503c3", + "metadata": { + "collapsed": false + }, + "source": [ + "## Initialization\n", + "\n", + "First, we initialize the system. In this case, we will lean more heavily on the MoorDyn-C API:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e3b168", + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + " Running MoorDyn (v2.4.0)\n", + " MoorDyn v2 has significant ongoing input file changes from v1.\n", + " Copyright: (C) 2024 National Renewable Energy Laboratory, (C) 2014-2019 Matt Hall\n", + " This program is released under the BSD 3-Clause license.\n", + "The filename is body.txt\n", + "MoorDyn v2 log file with output level MSG at 'body.log'\n", + "Generated entities:\n", + "\tnLineTypes = 1\n", + "\tnRodTypes = 0\n", + "\tnPoints = 6\n", + "\tnBodies = 1\n", + "\tnRods = 0\n", + "\tnLines = 3\n", + "\tnFails = 0\n", + "\tnFreeBodies = 0\n", + "\tnFreeRods = 0\n", + "\tnFreePoints = 0\n", + "\tnCpldBodies = 1\n", + "\tnCpldRods = 0\n", + "\tnCpldPoints = 0\n", + "Time integrator = 2nd order Runge-Kutta\n", + "Water kinematics for IC gen:\n", + " No Waves or Currents, or set externally\n" + ] + }, + { + "data": { + "text/plain": [ + "0" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Creating mooring system...\n", + "Initializing coupled Body 1 at 0, 0, -70...\n", + "dtM = 0.002 s (CFL = 0.015691)\n", + "Finalizing ICs using static solve\n", + " - Line1:\n", + " ID : 1\n", + " UnstrLen: 902.2\n", + " N : 20\n", + " d : 0.09\n", + " rho : 12214.7\n", + " EAMod : 1\n", + " EA : 3.84243e+08\n", + " BA : -0.8\n", + " EI : 0\n", + " Can : 1\n", + " Cat : 0\n", + " Cdn : 1.6\n", + " Cdt : 0.1\n", + " Cl : 0\n", + " dF : 0\n", + " cF : 0\n", + " ww_l : 698.333\n", + "Line 1 damping set to 9.80212e+08 Pa-s = 6.23584e+06 Ns, based on input of -0.8\n", + "Initialized Line 1\n", + " - Line2:\n", + " ID : 2\n", + " UnstrLen: 902.2\n", + " N : 20\n", + " d : 0.09\n", + " rho : 12214.7\n", + " EAMod : 1\n", + " EA : 3.84243e+08\n", + " BA : -0.8\n", + " EI : 0\n", + " Can : 1\n", + " Cat : 0\n", + " Cdn : 1.6\n", + " Cdt : 0.1\n", + " Cl : 0\n", + " dF : 0\n", + " cF : 0\n", + " ww_l : 698.333\n", + "Line 2 damping set to 9.80212e+08 Pa-s = 6.23584e+06 Ns, based on input of -0.8\n", + "Initialized Line 2\n", + " - Line3:\n", + " ID : 3\n", + " UnstrLen: 902.2\n", + " N : 20\n", + " d : 0.09\n", + " rho : 12214.7\n", + " EAMod : 1\n", + " EA : 3.84243e+08\n", + " BA : -0.8\n", + " EI : 0\n", + " Can : 1\n", + " Cat : 0\n", + " Cdn : 1.6\n", + " Cdt : 0.1\n", + " Cl : 0\n", + " dF : 0\n", + " cF : 0\n", + " ww_l : 698.333\n", + "Line 3 damping set to 9.80212e+08 Pa-s = 6.23584e+06 Ns, based on input of -0.8\n", + "Initialized Line 3\n", + "Remaining error after 52 s = 0.00146219 m/s2\n", + "Best score at 52 s = 0.00146219 m/s2\n", + "Water kinematics for runtime:\n", + " No Waves or Currents, or set externally\n" + ] + } + ], + "source": [ + "# Create the MoorDyn system from the input file\n", + "system = moordyn.Create(\"body.txt\")\n", + "\n", + "# You can get the initial positions and velocities from the system itself using the MoorDyn-C API\n", + "body = moordyn.GetBody(system, 1)\n", + "state = moordyn.GetBodyState(body) # tuple with (x, xd)\n", + "\n", + "x = np.array(state[0]) # x, y, z, roll, pitch, yaw \n", + "xd = np.array(state[1]) # xdot, ydot, zdot, roll_dot, pitch_dot, yaw_dot \n", + "\n", + "# Setup the initial condition\n", + "moordyn.Init(system, x, xd)" + ] + }, + { + "cell_type": "markdown", + "id": "fc5957", + "metadata": { + "collapsed": false + }, + "source": [ + "## Time Stepping\n", + "\n", + "Then we run the simulation, moving the fairleads by moving the body at 0.5 m/s in the x direction:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "9e27d7", + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "FairTen1 = 827414.2252929765\n", + "FairTen2 = 939998.8305276999\n", + "FairTen3 = 939998.8305276999\n" + ] + }, + { + "data": { + "text/plain": [ + "0" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Make the body move at 0.5 m/s to the positive x direction\n", + "xd[0] = 0.5 # 0 index is the first of 6 DOF\n", + "t, dt = 0.0, 0.5\n", + "\n", + "# Run the simulation for five timesteps\n", + "for i in range(5):\n", + " f = moordyn.Step(system, x, xd, t, dt)\n", + " t += dt\n", + " x += xd * dt # update the position \n", + "\n", + "# Print the last output fairlead tensions on the lines (the vector sum of the forces returned by moordyn)\n", + "point4 = moordyn.GetPoint(system, 4)\n", + "point5 = moordyn.GetPoint(system, 5)\n", + "point6 = moordyn.GetPoint(system, 6)\n", + "print(\"FairTen1 = \", np.linalg.norm(moordyn.GetPointForce(point4)))\n", + "print(\"FairTen2 = \", np.linalg.norm(moordyn.GetPointForce(point5)))\n", + "print(\"FairTen3 = \", np.linalg.norm(moordyn.GetPointForce(point6)))\n", + "\n", + "# Alright, time to finish!\n", + "moordyn.Close(system)" + ] + }, + { + "cell_type": "markdown", + "id": "9e7f33", + "metadata": { + "collapsed": false + }, + "source": [ + "## Visualization\n", + "\n", + "Now let's visualize with MoorPy!" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "861467", + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "attempting to read body.txt\n", + "Mooring input file 'body.txt' loaded successfully.\n", + "attempting to load ./body_Line1.out\n", + "attempting to load ./body_Line2.out\n", + "attempting to load ./body_Line3.out\n" + ] + }, + { + "data": { + "text/plain": [ + "(
, )" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXsAAAFICAYAAACx0F4IAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAACObElEQVR4nO2dd3xT5f7HP0mapHumi25GaSndS4agwmWDuO4VUdwDxYUD9ep1Iriu8ypX71X5OREFBNyA4AAZ3buldNCd7jZt5nl+f3CfY9Kd5KSDPO/Xi5eScc5JOPmc53zH5ysihBAwGAwG47xGPNYHwGAwGAzbw8SewWAw7AAm9gwGg2EHMLFnMBgMO4CJPYPBYNgBTOwZDAbDDmBiz2AwGHYAE3sGg8GwA5jYMxgMhh3AxJ7BYDDsACb2DAaDYQcwsWcwGAw7gIk9g8Fg2AFM7BkMBsMOYGLPYDAYdgATewaDwbADmNgzGAyGHcDEnsFgMOwAJvYMBoNhBzCxZzAYDDuAiT2DwWDYAUzsGQwGww5gYs9gMBh2ABN7BoPBsAOY2DMYDIYdwMSewWAw7AAm9gwGg2EHMLFnMBgMO4CJPYPBYNgBTOwZDAbDDmBiz2AwGHYAE3sGg8GwA5jYMxgMhh3AxJ7BYDDsACb2DAaDYQcwsWcwGAw7gIk9g8Fg2AFM7BkMBsMOYGLPYDAYdgATewaDwbADmNgzGAyGHcDEnsFgMOwAJvYMBoNhBzCxZzAYDDuAiT2DwWDYAUzsGQwGww5gYs9gMBh2ABN7BoPBsAOY2DMYDIYdwMSewWAw7AAm9gwGg2EHMLFnMBgMO4CJPYPBYNgBTOwZDAbDDmBiz2AwGHYAE3sGg8GwA5jYMxgMhh3AxJ7BYDDsACb2DAaDYQcwsWcwGAw7gIk9g8Fg2AFM7BkMBsMOYGLPYDAYdgATewaDwbADmNgzGAyGHcDEnsFgMOwAJvYMBoNhBzCxZ9gEQggMBgN0Oh0IIWN9OAyG3eMw1gfAOP8ghECn06GiogI6nQ4+Pj5wc3ODVCqFRCKBRCKBSCQa68NkMOwKEWHLLoaAcByHnp4e5ObmoqurC3K5HJ2dnZDJZPD09ISXlxe8vb3h4uICBwcHSCQSiMViJv4Mho1hYs8QDIPBgObmZmRnZ8PNzQ3R0dEQi8UghKC9vR2tra1oa2tDd3c3nJ2d4eXlBU9PT3h7e8PR0REODg5wcHCASCRi4s9gCAwTe4bV0LBNZWUlSkpKMGXKFEyePBl6vR4GgwFisWlqSKvV8uLf2toKjUYDNzc3eHp6wsPDAzKZDAqFgg/59H0/g8EwHyb2DKsghKC3txf5+floaWlBfHw8fHx8AAB6vR56vX5Yse7t7UVbWxsv/nq93mTV7+HhAalUyod92KqfwTAfJvYMi+E4DlVVVSgsLISbmxvi4+Ph6OjIPz9SsTemo6MDOTk5CA8PR2trK9rb2yGRSODp6cmLv5ubGy/8TPwZjJHBqnEYZkPLKs+ePYv8/HxIJBKkpqYKEm6h8frQ0FCEhoaC4zh0dnaira0NTU1NOH36NORyOZ/s9fLyYsleBmMEMLFnmAUhBBqNBkVFRairq8PkyZNRV1cnWFy9r1CLxWJ+VR8REQG9Xs/H+6urq1FUVAQXFxeTSh+5XM6SvQxGH5jYM0YMXWVnZ2eDEILZs2ejt7cXtbW1A77eUpEdKrLo4OAAhUIBhUIB4Fyyl8b7y8rKoNVq4e7uzou/p6cn5HI5S/Yy7B4m9oxhoWGb+vp65OXlwd/fH9HR0ZBIJFCr1WPaISuTyeDv7w9/f38+WUzFv7a2FoQQeHh4wNPTE66urnB2doaHhwdL9jLsDib2jCEhhECr1aK0tBRVVVWIjo5GcHAw/7zQYmnN9kQiEZydneHs7IygoCAQQtDd3c3X91dUVEAkEsHHx4cP+bi6urJkL8MuYGLPGBSO49Dd3Y2cnByo1WpccMEFcHNzM3mNSCQat943IpEIbm5ucHNzQ1hYGCoqKtDe3g5nZ2c0NDSgtLQUTk5OJsleZ2dnluxlnJcwsWf0gxACjuPQ1NSEnJwceHl5ISkpCQ4O/U+XocSeEGLRhcBWFw+RSASZTIYpU6YAOFca2tbWhra2NlRWVqKwsBCurq58iaenpyccHR0hkUhYspcx4WFizzCBdsOeOXMGZWVliIyMRFhY2JAiJ6Q4j6aYOjg4wNfXF76+vgAAjUbDx/tLSkr4ZC9d9Xt6ekImk7FkL2NCwsSewUNNzPLy8tDZ2Ym0tDR4enoO+Z6JttId6njlcjkCAgIQEBAAQgh6enp48a+pqQEAeHh48OLv5uZmIv4T7btg2BdM7BkAzpmYtbS0ICcnB05OTpg9ezZkMtmw77NFzN5WYRxztisSieDi4gIXFxcEBweDEIKuri60traipaUF5eXlkEqlfLzf3d0djo6OcHFxYeLPGJcwsbdzCCHQ6/WoqqpCcXExIiIiMGXKlBEL1XhO0AqJSCSCu7s73N3dER4eDoPBgI6ODrS2tqKurg4lJSWQSCTw9/fnV/5OTk4s2csYNzCxt2MIIVCr1SgoKEBTUxMSEhL4+PVIEVrsJ4ogSiQSeHt7w9vbGwBQVVWFpqYmiEQinDlzBr29vbyTJ0320s5eFu9njAVM7O0UjuNQXl6O8vJyODk5Yc6cOSYmZiNlIoVxbIlYLIajoyOmT58OAFCr1Xy8v6ioCHq9vl+yl07uopU+DIYtYWJvZ9Bu2JqaGhQXF0MulyMtLc2qleZEFGeh6fsdODo6IjAwEIGBgXyylzZ3VVdXQyQSmTh5urq6smQvw6YwsbcjqIlZcXExamtrERgYCK1Wa5XQU1EihPQTKEsEy5YiN9Axjsa2jZO9ISEh4DiOT/Y2NzejvLy839hG2tzl4ODA4v0MQWBibydQgcnOzoZer8esWbPQ2tqKxsZGq7ZrCxGaqHcKI/0uxGIxPDw84OHhgYiICBgMBt7Jk95xGY9tZMlehhAwsT/PoWGbxsZG5OTkwNfXFzExMZBIJGhra7NaWIda2dsT1nyPEokEPj4+/IQv47GN5eXl0Gg0IIQgKCgICoUCXl5ekMlkLNnLMAsm9ucx1MTs9OnTqKioQFRUFEJCQvjnxWIxOI6zah/GYi8EE/WCIeTFTiaTwc/PD35+fgCA7u5unDhxAhqNBoWFhTAYDCbNXXRsI0v2MoaCif15CsdxUKlUyMnJQU9PD9LT0+Hu7m7yGiEqaYYSe3sSHVve2cjlcgBATEwMxGIxVCoVP6+3srKy39hGV1dXXvxZspdBYWJ/nkFNzJRKJXJycuDu7o7Zs2dDKpX2e62txd4abCWeE1H46N0XNWJzdXWFq6vriMc2smQvA2Bif15BTcwqKipQWlqKadOmITw8fMgqEaFEerDtmCsstq7GseW2bVnpAwz83VgztpEle+0LJvbnCRzHQa1WIy8vD21tbUhNTYWXl9eQ7xEyZi80Ey3hO1Zi3xdLxjayZK99wMT+PMBgMKCtrQ3Z2dmQy+WYPXs2H+cdivEcxpmI2FLsLRXhkYxtdHZ2hkgkQmRkJNzd3Vmy9zyFif0EhpqYnT17FoWFhQgLC8O0adNG1cRsolXj2Hr1bQs4jhPkuAcb21hVVYXW1lZkZmbCwcGBr/RhYxvPL5jYT1CoiVlhYSEaGxsRHx/Pl+qNFJFIZHUYx/h4hGSi3SmMVXeuNdCxjT4+PtDpdIiPj0dHRwfa2trY2MbzECb2ExC9Xg+lUomioiKIRCLMnj0bTk5OZm9HLBaPu5W9LbH1MU40sadwHAexWAyxWMyL+uTJk4cc20hfR5O9bGzj+IeJ/QSCdsNWVlaioKAAISEhiI6OtjieK1Q1jpA/8IkqFhNxZU8ZLEw01NjG0tJSaLVaeHh49Ev2srGN4xMm9hMEamJWWlqK6upqALBK6AFhxX4irOxtia1j9rYUzpFuf6RjG2lzl5ubG6RSKR/2magX8vMFJvYTAI7j0N3djezsbGi1WqSmpuKPP/6wWgSEitlPJE/7ibj6Hq0wjjkMNbaxtbUVZ86c4cc20iRvaGgoS/aOIUzsxzG0G5aamPn4+CA5OdnkeWtgK3thmahiL8T2Bxvb2NbWhvr6evT29qKmpsYk3s+cPEcXJvbjFGpiRqdJURMz49W4tatyIRK0gLBiP1F/8BO1OxewTZjIeGyjq6srqqurER4ezq/6jcc2UvGnzV0s2WsbmNiPQziOQ09PD3Jzc9HV1YX09HR4eHjwz9MfgRDdr4QQQcRkILGrra1FU1MTvLy84OPjY1bFkC3Ec6IKsjVNVSPB1jkBg8HQL9lrPLaxuLgYer3eJNnr4eHBkr0Cw8R+HEHDNi0tLcjOzoarqytmz54NmUxm8jq66hGqbNJa+m6H4zgUFRWhoaEBAQEBaGxsRFlZGeRyOby9veHj4wMvLy84OJxfp5+txF6opqrBIIRAIpHYbPsDXUwsGdvIkr3WcX792iYw1MSsqqoKxcXFmDJlCiZPnjzoSS2Erw39AXIcZ9WP3fjCo1arkZ2dDYPBgJSUFMjlcv6ztbe3o62tDadPn4ZareYHcCsUCri5uU3oW3d7S9AKuX1rxjayZO/IYWI/DqCeJfn5+WhpaUFycjI/tWgwxtPgESr21J/Hy8sL06dPh1Qq5ffh4OAAR0dH+Pn5geM43qOlra2NL9ujsVshjmmoY7UFEzVEBNj+zsFgMJi1mBjJ2Ebq5MnGNo4cJvZjDD2Rs7OzIZVKMXv2bDg6Og77vvHU/SoSidDY2Ijq6mpMnToVwcHB/X5wdGVHf/RSqRSurq4ICgqCwWBAZ2cn2tvbUV9fDwDIyMjgR/V5enraNMwgFGxlb5vtj2RsIwDe8M3T07OfjTODif2YQbthz549y3fDRkZGjvjEFKJGnu7LGrHnOA5arRY1NTVISEiAl5fXiD4Dbc+nyOVyeHh4oLe3FxqNBqGhoejo6EBxcTHfqenj48PHby0Rv4kaahnvYjza2+87trG3txd//PEHtFrtgGMb3d3dWbIXTOzHBNoNW1RUhLq6OsTFxcHf39+sbQgZxrF0OzQ+TwiBm5sb1Go1dDrdiOyV+6LRaJCTkwOJRIK0tDTIZDIEBATwIR+avKusrIRYLOYTvd7e3v0S2GPBRA7jjEa1jy3vzBwdHUEIQVRUFORy+YQZ2/ivf/0LL730EhoaGhAfH48333wTaWlpNtsfE/tRhuM4dHR0ICcnB4QQzJ49G87OzmZvZ6xj9q2trcjOzoaPjw+mTJmClpYW1NTU8GZZCoWCD8EMJyRtbW3Izc2Fr68voqKi+oV8ZDIZ3NzcEBISAr1ez4/hq66u5vdHyztHsj9bMFHvGoDRidnb8oJMfwdUuCfC2MYdO3Zg48aN2LZtG9LT0/Haa69h8eLFKCkpMdu9dqQwsR8lqCVxXV0dSkpK4O/vj+joaItXPGPZ/VpdXY3i4mKT+Ly3tzeAc/HUlpYWtLS0IC8vDwaD4VzFDcfBp6ICjsuWQWx0caupqUFJSQkiIyMREhIy4P6MQz400evj48OHkGiit7CwEHq9Hp6envyqnw7mMP68toLV2Y/N9g0GAwAMuI/BxjbSxQId2yiXy3H69Gnk5+dj3rx5uPTSS212vADwz3/+E7feeituvPFGAMC2bdvwzTff4P3338cjjzxik30ysR8FaDdsdnY2mpqaMHPmTAQHB1u1TSFW9oB5sX+O43j//MHi8zKZzKR+uru7Gy0tLdB8/TUUjz2GQx9/DPfp0+Ht7Y2WlhYolUokJSUNO0KRQvdH/yuVSuHs7IyAgAAYDAaoVCq0t7dDqVSivLwcUqmUL++0pehMhOElQ23/fBX7vgw2tvHEiRN45JFH0Nraiv379yM3NxcLFy5Eamqq4P0gWq0WGRkZePTRR/nHxGIxFi5ciGPHjgm6L2OY2NsYjuOgUqmQnZ0NlUoFZ2dnq4UeEE7sR1rVo1arkZWVBUIIUlNT+62YB4IOx3Bzc4Nh0iQAwJQZM6A0GFBQUACO4+Du7o62tjaIxWK4u7ubLWp9Qz400RsaGsqv4trb23HmzBn09PRAJpNBJBLBx8cH7u7ugonQRA7j2PrOwdzSS0u3b8l3RMc2rly5EsuXL8f8+fORlpaGvLw8vPbaa/jss8+waNEiQY+3ubkZBoOhX57O398fxcXFgu7LGCb2NoJ2wzY1NSEnJwdeXl4IDQ1FWVmZINsfTcdK4/h8ZGSkSf38iNFqAQByNze0lJfD19cXkydPRnt7O1paWlBVVQWRSARvb28oFAp4e3uPqAS1L31DPv7+/vD19YVKpUJubi7c3NzQ09ODuro6cBzHN+mYa+fQl4ks9hP9zkGoi4lIJIJKpcJll12GpUuXguO488rgj4m9DaBhm4qKCpSVlSEyMhJhYWFoa2sTbAzgaJiYEUJw9uxZFBcXY9q0aQgKCrI4gSX6n9ifystDRGQkwsPD+WRacHAwn0hrbm7my1FdXV2tqrWnAkMT4kFBQZg8eTI4joPBYEB3dzfa2trGvZ0Di9kPjZB3Dl1dXXBzcwMwsrCQJSgUCkgkEjQ2Npo83tjYiICAAJvsE2BiLzi0VDA3NxednZ1IS0uDp6cnAOFCL0Jua7A7BIPBgMLCQiiVSrPq5weCEAJlTQ1cRCLEJibCd4BqA+NE2tSpU6HVatHa2oqWlhYUFBRAp9PxsXcfH58RhZEA4OzZsygtLUV0dDQm/S+URKFVGUPZOVDxp3YOQ33Gibyyn8ill0JuX6VS8WJvK2QyGZKTk3Hw4EGsXr0awLnPcPDgQWzYsMFm+2ViLyAGg4EPeTg5OfUzMRNS7IUK4wx0h2Acn09JSRmxsA6ETqdDfn4+PNraQKTSAYV+IGidPZ2KpFKp0NzcDKVSibKyMshkMn7V7+3tDalUavJ+juNQWlqKhoaGQRPAA1X5+Pr68vYVtMrn7NmzAMCXdw4UYrJ1U5UtxXI0YvYTYWVPzzNbiz0AbNy4Eddffz1SUlKQlpaG1157DSqViq/OsQVM7AWAEAK9Xs+bmIWHh2Pq1Kn9fvxCr+xtEcahFyuFQoFp06ZZFp//HzQx7eTkhBA/P8DCWmvj2mk6GKOtrQ0tLS0oLy9HXl4e3N3d4ePjA4VCAScnJ+Tn50Oj0SA9PX1EsfiR2jnU1taiuLgYzs7O/Kqf3rmxlf3YbF+oi0l3dzffIGhr/va3v0GpVOIf//gHGhoakJCQgO+//97s5kpzYGJvJbR+vqCgAE1NTUhMTOTLuvoyXsM41NO+uroaJSUlVsfnAUCpVCI/Px/BwcGYOnUqyLffgljQWTsQEonEpHxOrVajubmZT/TSJp6hXEOHYyA7B29vb3AcB51Oh7a2NrS3t/N2DmKxGEqlEo6OjhbbOQyGrUNEo5GgHY1qHGtRqVQAMCpiDwAbNmywadimL0zsrYCamNE2/zlz5gxZQUJX40KsdISsxjEYDMjPz4dSqURiYqJVXaiEEFRWVqKiogLR0dEIDAw894RWC9In1CIUjo6OCA4OhrOzM1paWhAQEAAnJyfU19fzDol01W+pqZqx+EulUjg5OcHf35/viM7Pz4dKpUJmZqbgdg62DLPQu7qJsPIeavtCiH13dzfkcvm4sN+wBUzsLYCamNXU1KCgoABBQUGYPn36sCc0PSGFEHuhwjgAUFJSAgcHB6SmpsLJycniVZ7hf/XzHR0dSElJgbu7+59PajQgNvwR0U7cvolYnU7H+6IbJ3ppvN/FxcWq2v6uri6+xX3atGkm7flC2TnYcuVNFwy2vJhMlDr+rq4ui86HiQITezOhJmbFxcWora1FTEzMn6vXYTAeFmItQoRxWlpaoFKp4OHhgYSEBH72pyX09vbydzjp6en9V0cajWBhHGOGS8RKpVLe+pYm4Kidw+nTpyGVSvlV/0CJ3qFQKpXIy8tDREQEX0rKcZxVdg4DYeswDmA7sTf2rbEVQq7sXV1dBTii8QkTezOgq7acnBzo9XrMmjULLi4uI36/kGJPwy+WQAhBVVUVSktL4enpybeLU9Hz8vIy68fT1taGnJwc+Pv7D3qHI9JqLU7QDoZOp0NeXh7UavWIErHGid6wsDA+DEenIRkneofrsK2ursbp06cxY8YMk9poa+wcvLy8BrzY2LrSB7BdctkcKwNr9mGJ02pfqNizlb0dQ8M2jY2NyM3NhUKhQExMjNmrCTp2bzRtDvpCQy3Nzc18fJ7jOD7UUVRUBK1WO+KadlrHPpSRGYBzK3sLOmIHo6enh6/0SUtLs6gBqu9QDLVaza/6z549C0IIH3tXKBS8lW5JSQl/J0ErcQbDXDsHNzc3fp/0YmPLMIitwzi23j7dh1DVOKOVnB0LmNgPA+2GPX36NCoqKhAVFTW0qA2DkJ425m6nt7cXWVlZEIlEJvF5sVjMD4Ogw5+bm5vR3NzMd5Yar/odHBzAcRyKi4vR1NQ0IiMzkYBhnNbWVuTm5mLSpEmYNm2aYCsxR0dHBAUFISgoCIQQdHZ2oqWlhU/0Ojk58S30ycnJFgnDYHYOHMdBrVbzVT7Gdg69vb3Q6XSCfMa+jFbZpa0tlIXodqYx+/MVJvZDQFe8x48fh1QqRXp6umnS0QLEYrHF4Ze+2zFH7FtaWpCdnc0nEgeLzxsPf6ahDtrJWlJSArVaDQ8PD6jVaojFYqSlpY3Mj1+tFiSMQxOxUVFRCAoKsnp7gyESifg5qJMnT0Z3dzffaAYAJ06c4GPvCoXC6kQvcC7k4+LigkmTJpnYObS1teHMmTOoq6sT3M5hojdUCbmP0WqoGiuY2A8ALY9UKpXIzs6GXq/HvHnzBCnJEro+fjiM4/ORkZEICgriw0kjQSKRwNfXF76+vgCApqYmFBQUQCKRQK1W49SpU3y4Z6gEp0ittiqMw3EcysrKUF9fb5YlshB0dXUhKysLPj4+iI6OhkgkQk9PDx/yobF3445eS86VvrX9MpkMSqUSYrEYcXFx0Gg0Fts5DMZEN0EDhE3QMrG3I6hPSkVFBUpLSxEREYHy8nLBqgkkEsmohXGM4/NJSUnw8PCw6odXX1+PoqIiTJ48GWFhYeA4rl+C08PDgxd/YwESqdXgPDws2q9xInbEdxICMVDFDQD+7odOQ6IdvRUVFf06ei2xUqa9D93d3UhLS+PzBZbaOQzGRO+eBVg1zkhhYm8ENTHLz89HW1sbUlNT4e7ujvLycsFOqNGK2Q8Wn7cEQghOnz6NmpoaxMbG8qv8vgnO3t5etLS0oLm5GRUVFfzzCoUCQT09IM7OMPcIhEjEWspgFTd9EYvFJt+DRqPhV/10Ri9dgY/ESpkOugGA1NRUk7sES+0cBjt3J7oJGiCs2A/W/X4+wMT+f1C/lezsbMjlcsyePRtyuZwPlQgRZwdGZ8LUSOPzI4Guqnt7e5GWljZkAsvJyQnBwcG8ZTH1qq+oqIB3ays6urvRWV7Or3aHOyaaiA0MDERkZOSolcQRQlBaWsqHjIaruOmLXC7HpEmTMGnSpEETvcYhH2Oh6u3tRWZmJlxdXTFz5sxBRcxcOwcPDw9+f8blhedLzF4osZ88ebIARzQ+sXuxpyZmZ8+eRWFhIcLCwkwqPGi1ynjztBmo9NLa+HxfqJGZs7Mz0tLSzGo4opYB3t7e5wzVCIFGoUC9SoXq6mp+WhQN+fSNcY9WIrYver3e5OJmbciob6JXr9f3S3jT8ItcLkdJSQkCAgIwffp0s/7dhrJz6O3tRWtrK9ra2lBZWWli53A+hHGEuntQqVSsGud8hZqYFRYW8s5zNERhjEQiEXRlb4tqHBrjbW1ttdrfBuhvZGbtqlrc0wNnPz/ExcWZDCqpqqpCfn4+3NzceOFvbGxEQ0MDEhMT+UHmo4FarUZ2djZvHWHOxW2kODg49Ctzpav+zs5OSCQS6PV6NDQ0DHgRHAl9q3xkMhlcXV0REhICvV5vYufQ3d0NsViMsrIyi+0chmI07JmFdL1kCdrzEBrnpLHROXPmDBpLFUqg6baEDuPQW3+xWIyUlBSr4/PUyGy4WLU5iFUqkP8lvwYaVNLS0oKmpiZUVlaCEAIfHx/09vZCrVZbNJ7QXPpW3Nh6NQr8Weba1taG7u5uxMTEwNHRkXfvzM/PN+notTTB3re2n/ZN6PV6FBQUQKvVQqPRWGznMBS2DuMIacegUqmsLq0ez9id2NOVQF1dHfLy8hAYGDjsj1uoChoht0XDOM3NzbxVwdSpU62Kzw9pZGYNWu25pqpBVk0ymQweHh6oqKiAl5cXwsPD+WQjNRKjq36hV57A4BU3toYQgjNnzqC6utqknJSGvowTvTk5OSCE8CEf6ttvLvS7I4Tw4p6YmMjfvVpi5zAUo+FlDwgj9qyp6jyCmpiVlpaiuroaMTEx/UbVDYSQK3shrYm1Wi0yMzMxffp0TJo0yar4/LBGZtbQ0QEAIINcPAZKxPr4+GDKlCn8eMLm5mbk5eXBYDDwQ8mtHRIOnLN7KCsrE/QuZiRwHIeioiK0trYiNTV1wJK/vonerq4utLS0oLGxESUlJSaJXnOarOh5I5VKkZKSYvI+YzsHnU6Hjo6OYe0chvuctjZBA6y3YyCEoLu7m63szwc4jkNXVxdycnKg1Woxa9asEdfUjreVvcFgwJkzZ6DT6RAfHw+FQmHVyU7FdigjM0vp7gY681swFQAZoBGKlgpOnz4dwcHB/Z7vO56QCh6tbHF2drbIq97aihtr0Ov1yM3NhVarRWpq6ojCVCKRCO7u7nB3d0dERMSAiV7jjt7BDL1oyM/NzQ0zZ87s92892KjGoewcqPgPdOEdLS97Ie7GVCoVq7OfyNCwTVNTE3JycuDj44Pk5GSz6rWFTtBaI/Y9PT18/byLiwtyc3Ph7u7OT24yp5OSEIKamhqUlpYOKrbW8sXrFZj5/P2YCkAnl4K64xiL7UgTsX0Fj3rVGw8lNzYuG6ySRq/X88NGRrtJiyaBZTJZv1W1ORgnegGYdPQa9zjQPzKZDF1dXcjMzOQv6sOdJyO1c2hsbOQ9lPraOUyUOn62sp/gUBOz8vJylJeX8yZmlniYjAexHyg+r9VqedOyqqoqvsGHhjkGi7FSIzOlUmk7+wGNBkkfXIXZKAIAVOx7H7HzLhKsvHEgr3o6lLy0tBSOjo4mVg7U4oFW3JhbTmot1F/H29tb8CSws7MznJ2dERISYtLjQBO9zs7O6O3ttco8bqDafuqaSh08+9o5cBwHFxcXm9k06/V6QcS+p6cHHMed19U4IiLUuKNxBsdx6OnpQW5uLrq6upCYmAgPC9v1s7Ky+MShtZSUlMBgMGDGjBkjfg+tkCkrKxsyPm/8I29ubuYHk9BVP72112g0yM3NhcFgQEJCgm2qXdRqyNeuBQ4cQiNc4K/vgMjLAx1ff40MjQaOjo6IjY21mdjq9Xq0tbXxF0KtVgs3Nzd0d3fD29sbsbGxNu/sNIY27IWGhlo1G9cSamtrUVRUBHd3d/T29vJ5D7rqF+LOhrqBGgwGEzuH6upq6PV6iMVii+wchqO5uRlnzpxBWlqaVdtpbGzEtGnToFKpRvVObzQ571b21MSMdpG6urpi9uzZViUchQ7jaLXaEb/eYDAgLy8PbW1tw/rb9G1kooO4qX2Bg4MD3N3d0dbWBm9v7yE7NK1CrYb86qsh/vVXaL78Ah5xcagrKoLfgw/CeeVKBL33HkKWLrXp7b2DgwNv4EYI4XMDTk5OaGlpwdGjR01W/ba0YWhoaEBBQYHNQmVDQcN0cXFxfG1/d3c3mpub+UQvnaxlzXcxUMintbUVBoOB762wxM5hOISssZdKpaNS5jtWnFdiT03MTp06hebmZkydOlWQVdRYddDS+LxEIuETeeZ8FjqIm9oXlJeXo6qqCg4ODryjpzUWvQPS2wv5X/8K8bFj0OzcCe6SS0A4DnVNTch95BEs2LoVUXfeCfW334LExFi/vxFQU1ODsrIyzJw5k58YRVf9ZWVl6O3thaenJy/+Qk0rIoSguroa5eXliIuLG7Bhz1YQQlBRUYGqqiokJibyYTqRSAQ3Nze4ubnxiV5q4mb8XVDxt8RNkxCC8vJy1NbWIiUlhU96WmLnMBxs/uzIOW/EnlYL0C5SWronBGORoFUqlcjNzUVAQACmTJliVf08NTKrra1FQkICFAqFyYCS8vJyyGQyPtzT169lxKhU54T+xAlovvoK3Pz5fCK2uroaSXPmgPvhB5Dly+G4bBnU33wDMnOmRZ9pJAxWcSORSPjPCvyZ3KTfhTVzafvuu6GhAcnJyRaHEC2BTtNqbGxESkrKkHFo4zsg4Fy1TnNzs0mi1zjkM9z4P0IInwtKTU01qVsfyM7BYDCYOHj2tXMYzi6aOV6OnPNC7Oks0ezsbEilUoSHh0OlUgm2fbFYDL1eL8i2hiu9pCuy8vJyTJ8+HYGBgVbVz/e1B6Y/PmdnZ4SGhiI0NNRkpVtSUgKNRsM30gxV1WJCezvkV1wBcX4+NLt3g5s7l0/EqlQqxMTEnKu4kcuh/uYbOK5YAcelS6HeuxckMdGizzYUNPw1koqbvslNutI1tm2m4j+Sla6xPXFqauqoxoA5jkN+fj66urqQlpZmdh+Ck5MTQkJC+O+io6ODH9NYUFAANzc3Xvj7NrhxHIeCggJ0dnbyTqsDMdCoRjc3twHtHGhTHY33992n0F72bGU/TqEmZjU1NSgoKEBISAgiIyNRU1ODzs5OwfYjkUjMirMPxVAre1oS2NbWxieUrYlHdnd3Izs7Gy4uLkPaAxuvdI3HEtKqFicnJ/75AeOrSiUcL70UoupqaPbvB5eaylssOzo6Ijk5GR0dHX/+kHx8oP72W8gvuwyOy5aduwuYPdviz9kXaypujO2KIyMjedvmlpYWVFZWDljSaIxWq+W7XfvaE9savV6PnJwc6PV6QfZNk6peXl4mthYtLS18gxsVYS8vL5SVlUGj0SAlJcWsAeCD2TlwHAetVsuv+geycxCqGqe7u/u87p4FJrDY027YoqIi1NXVIS4uDv7+/gDAm0kJxWiEcXp6epCZmcmbcJkbn+8LNTILCQnBlClTRrytvmMJafNOc3OzSS07v+pvb4d8xQqIWlqg/u47kNhYtLW1IScnBwEBAYiMjBz44ublBc2+fZD/9a+QX3opNDt2gLvkEos/L6WrqwvZ2dnw8vLCjBkzrE7e9bVt7ujoMDFwo6t+KvxZWVnD2hPbAtoVK5PJzO4jGSkymQyBgYEIDAzkE73U06ikpAQikQiBgYHo6OgQNNHr7OzM51r62jmIRCLI5XI0NTVZZOdAOd9N0IAJKvb0R5eTkwOO4zB79myTW2UhxRmwfZ29UqlETk4OAgMDBYnPV1RUoLKyEjExMfwF0FL6ujTSWvbGxkac/eUXzH7ySegJQeuXX8I1Jgb1/6u2iIyM5AezD/rdublBs2sX5NdcA/kVV0D78ccwLF9u8bFSS4WwsDBEREQIfktuvNI19q6h4m8wGODs7AyFQiHYinMk9Pb2IiMjAx4eHoiJiRk1Ezc3NzfI5XI0NjbCy8sLISEhaGtr4xO9xhfCkcwvGIiBQj7UzkGj0fAWH8Z2DnTVb86EMBazH2fQOt76+nrk5eXB398f0dHR/X5UQou9kHYJxhcOaoR15swZQeLzxkZmqampgq9URCIRXF1d4erqioiuLsj/8Q8Y5HIUvvEG6lQq6A4dAgCEhoaaVJ7QVo4BP5eTEzQ7dkB2442QrVkD7TvvwLB2rdnHRj1uoqOjERgYaNkHNBPqXSOVSqFUKhESEgIHBwfU1NSgsLDQxLbZ2pDcYJjbFSskarUamZmZcHFxQWxsLMRiMb+4MA5/VVVV8X5HI030DgYN+RgMBpSUlEAqlfI9E8Z2DrW1tSOyc6DYSuxXrVqF7Oxs/s5j4cKFeOGFF3hPrsOHD+PVV1/FiRMn0NnZiWnTpuGhhx7C2j6/gZ07d+KJJ55AZWUlpk2bhhdeeAHLli0z61gmjNjTbtjS0lJUVVUhOjp60JplBwcHwcVe6JU9TV52dHQIEp/v7e3lE9SCG5n1Qfzbb5D/9a8gYWHQ7d6NCIUCXbm5UKlU8PX1RXt7O6qrq3m3Sg8Pj6E7KGUyaLdvh+yeeyC/7TZolUro77tvRMcylh43wJ9DVmJiYngjtb7xbRrDNzZwE6Keu7W1FTk5OQgPDx9Vt07gz7Cjl5fXgN3AfcNfdH4BTfS6urqamLiZc+7r9XreMsQ4ZGWJnQOlq6vLJmGciy++GI899hgCAwNRW1uLBx98EFdeeSWOHj0KADh69Cji4uKwadMm+Pv7Y//+/Vi3bh08PDywYsUK/jVr1qzBli1bsGLFCnz66adYvXo1MjMzMdOMarYJ0UHLcRw/NUmtViMxMXHIf5jOzk6cPHkSCxYsEGT/jY2NKC8vx2wBkohtbW3IysqCTCaDVCrlPcyt+aFSIzMaI7flbbxk717IbrgB3AUXQPP55+iVSnmvl7i4OD5maix2jY2N6O3tRXBwMPz8/KBQKAa+GBEC6TPPQPrii9Ddey90zz0HDPFZjCtuEhMTR7XqxdieOCEhYUi7CePRhM3Nzejs7ISLi4uJgZu5/2aNjY18o9ZoTvICzq2CMzIy+PPN3HOXOpnS88PY04h29A62TZ1Oh6ysLDg4OCA+Pn7IUBnHcTAYDP3sHNrb23k7B29vb9TV1WHHjh3w8fHByy+/bNZnMZe9e/di9erV0Gg0g+YXli9fDn9/f7z//vsAgL/97W9QqVTYv38//5oLLrgACQkJ2LZt24j3Pa5X9jRsQ2Panp6eSEpKGjbxY4swjlDb6+jogFarRUBAACZPnmx1fJ6GL0ajO1Py/vuQ3XsvDKtXQ/uf/6Ctpwc5mZkDXmSMk3lTp05FTU0Nf7wFBQUm5m18PFckgu7JJ0H8/CB78EGIlEpo334bGOBHodFo+B/9aHvcjMSe2Ji+owl1Ol2/qhZjA7fhyiVpV+zMmTN5I7TRoqOjA1lZWQgJCbG4YbGvk6mxp1FZWRlkMplJR6/xAiIzMxNyuRxxcXHD5kT6jmqkDp7Gdg5nzpzBmjVrIBKJEBoaihkzZmDRokU2+S21trbik08+wezZs4c8Xzs6OhAdHc3//dixY9i4caPJaxYvXow9e/aYtf9xK/Y0bFNRUYGysjJERkYiLCxsRCcXjbELZb4khNjTlWB5eTmAc3aq9fX18PX1tciTnQpOc3MzkpOTbRu+IATS556DdOtW6G6/HbqXXkJdYyOKiopMErFD4erqyg9AN05s0nm0VPh9fHyA9etBFArIbr0VcqUSmo8+Aozu5ISuuDEHak+s0WhGbE/cF6lUaiJ2fe0LaKkrDTdQURusK3a0aG1tRXZ2NqZOnYrQ0FBBtmmcBwoPD+d7Pvr2OXh4eKCpqQmurq6Ii4sz+998MAfPoKAgnDx5EkuWLAEhBP/9739x22234bPPPsNVV10lyGfctGkT3nrrLfT09OCCCy4wWaH35YsvvsDJkyfx73//m3+soaGhX6GFv78/GhoazDqOcSn2dEhybm4u36BhzolN/0ENBoMgJWjW2iUYx+eTk5MhkUj4krXS0lI4OzvD19eXj28PdyLTKgRCCNLT023r56HRQHbHHXD44gton34auo0bUWbUjevj42P2Jo2HchiXM1ZUVPDljIqUFEz65BN43nILHP/yF2h27QKZNMnmFTdDQe8mpFIpUlNTBTm3BrIvoKWuRUVF0Gq1fC07bTYarivWFtBpXlFRUSMa+GMpfbube3t70djYiDNnzvBWC/n5+fzK39Jzn676lUol/va3v2HmzJn46KOP4O3tjfb29iH/bR955BG88MILQ26/qKgIUVFRAICHHnoIN998M6qqqvD0009j3bp12L9/f79z9+eff8aNN96I9957DzE2sBIZV2JPTczoCsLJyckiEzMq9nq9XpAfpDUre5VKxQtESkoKH593c3NDeHg478lOQ1WEEJNVbt/PTktOqU2uTcv7WlogX7MG4lOnoPm//4Pm0kuRl5ODnp4ek27c4RiqGqdvOSM1b2tpaUGFkxM8tm5F2tNPQ3rhhah6+20UOjhgxowZo1ZxQ7GlPbExA5W6KpVKVFZWQqvVwtHREbW1tSa2zbamvr4ehYWFmDlzptWlvJZQU1MDf39/REVF8cNrqJMnzX1YYqjW1NSEFStWIDIyEp9//jn/WxvuLvmBBx7ADTfcMORrJk+ezP8//T1HRkYiOjoaISEh+OOPPzBr1iz+NUeOHMHKlSvx6quvYt26dSbbCggIQGNjo8ljjY2NZk9WGzdiT7thq6qqUFxcjPDwcEydOtXi2lyRSCR4BY25YaGmpibk5uZi0qRJg8bn+3qyGzftFBQUmFgUd3Z2oqSkBJMnTx5xSMtSROXlkF9+OURtbdB8+y1U8fHIPnkSMpnM7Bj5kKWXfehr3tbe3o7SKVMQeuedCF27Fl1PPgnNlCl8x+NorOzHyp5YJBLB0dERra2tcHR0RFpaGt/IRKdTUVsLHx8fm3wfNCdk6V2cNfT09CAjIwMKhQJRUVEQiUT8oPopU6bwCyXjhj96FzTc99HY2IgVK1YgOjoan376qVkLSmMvIXOhEQKNRsM/dvjwYaxYsQIvvPACbrvttn7vmTVrFg4ePIj7jCrUfvrpJ5OLxUgYF2JPTcwKCwvR1NSExMRE/jbOUoQsv5RIJCCEjFjsjevno6KiEBAQMKL6eeOTeerUqfwql3YL0lW/i4uLTWd7in/9FfK1a0G8vaH++We0+fgg+/hxi6t9LM2diMVieHh4oNrVFRn//CdmvfEG4v/+d5xRKnF8/nw+kUcNy2zRNTqW9sQ0bGTcFevk5MQnGY0N3E6fPi3o90FnKFRWVo5JSSut+AkMDBx02MpAw2to4tv4++ib6G1oaMDy5csRFxeHjz/+2GbJ/ePHj+PkyZOYO3cuvLy8UF5ejieeeAJTpkzhhfrnn3/GihUrcO+99+KKK67g4/AymYyf3nbvvfdi/vz5eOWVV7B8+XJ8/vnnOHXqFN59912zjmfMSy8NBgNOnz6NyspKODo6Ij4+3uoh0sC5q2V8fLwgSSy9Xo8DBw5gwYIFw54YNIHX2dmJ2NhYs7r4BoIamfX29iI8PBxdXV1QKpXQarUmtgVCfGcA4PDf/0K6cSO42bOh+fhj1P3PkmKkidiBUKlU6O7uNjsEoNFokJ2dDbFYjISEBEhFIkgfeQTSd96B9uab0fDoo2j+352Q8SqXmrdZs8o1tieOjY0dVXti4M869pF2xRonNpubm02sioeaSTsQ1CW1rq4OSUlJo54f6OrqQkZGBoKDg82y+jCGmiPSkGBPTw/eeusthIaG4pdffkFiYqJNhR4A8vLycO+99yInJwcqlQqBgYFYsmQJHn/8cb5c9oYbbsD27dv7vXf+/Pk4fPgw//edO3fi8ccf55uqXnzxRbObqsZM7GnYpq6uDjk5OXBxccHs2bMFi4X++uuviI6OtvoOATh35/Hjjz/i4osvHrLzT6VS8aVhM2bMsLp+nhqZUa8VulLrW67W0dEBFxcXKBQK+Pr6wsPDw/z96nSQPvwwpO++C93tt0O7dStOV1WhpqYGcXFxVt3Cd3d3o6enx6wywaEqbiQffADZ/feDmzULmo8/Bnx8+FVdc3Mz2traIJfLeeE3rmgZCcb2xAkJCaNqTwz82RVraR07YGpV3Nrayic+6Up3MJEjhKCoqAgtLS1ISkoadXOwzs5OZGZm8iEzoejt7cXrr7+OXbt2oaysDC4uLli4cCFuueUWLFq0SLD9jGfGJIxDTcyKi4tRW1sLf3//fvMtrUXortfhcgA0Ph8UFISIiAir6ufp9qiTZ9/VTd9yNVq33dzcjOzsbADgV3QKhWL41UtzM+TXXQfx0aPQvPkmNOvWmQzkHu0f/HAVN4Ybb4Rm2jTI166F47x50OzcCZcZM+Di4sJbNvetaBnpXdBY2hMDwnXF9rUqpqtcWvFE+xyMfWuM7ZEtLSu1hvb2dmRlZfE5KSFpbW3Fp59+itmzZyMjIwPZ2dn44Ycf0NHRIeh+xjOjvrKnrdPUijUxMRFKpRKtra1ISkoSbD/Hjx9HSEiIYGViP/30Ey644IJ+t7R0Kk9FRYVZ8fnBsNbIjCZ5lUqlyRxaWtrZN2klysqCfO1aiFQqaD75BKrk5AE7Yq2hq6sLarV6RKEQaj8wkoobUVUV5FddBVFVFbTvvgvDpZf2e43xXVBzczPa29vh7OzMXwyNW/WN7YkTEhJG1Z4YOJc0zM/PR1RUlE27YtVqNb84aG1thUgkgre3N1QqFQghSElJGfXPTivwpk2bZnG4cDDOnj2LZcuWYd68efjPf/4zqm6k44lRW9nTbtiGhgbk5eVBoVAgJiYGEokEbW1tgloSA7axOe5ba28cn09KSrI6Pq/X602GP1gSKzVO8k6bNo2/nTeeSEWF32/fPsgfeADcjBnQfP892tzdkXPiBPz8/DB9+nRB77SGu/gRQlBWVsbHiUeSayFhYVAfOgTZHXdAfs010N1/P3RPPQUYJSb73gXp9Xo+iVdQUAC9Xg9vb294eHigpqYG7u7uo25PDPxZ9TIa4wsdHR0RFBSEoKAgfl5zUVER9Ho9DAYDsrKy+IuhRSFBM6H+QbawfqiqqsKyZctwySWX4N1337VboQdGSexpN+zp06f5FXBwcDB/EgltXAbY3jLBOD6fmpoKuVxu1Y/CVkZmxrfzNLzRUlsL8W23wfGHH9CwahW6nnsOekJwOiPDqkTsYAx382gcOhluqlQ/XF2h/egjcG+8AekTT0CckQHN9u3AIPkBBwcHkwqO7u5u1NTU8NVODg4OOHPmzIgb3KzF2GNnLKpe9Ho9ysvL4erqivj4eP5iSEOChBBe+K1xqxwMOn7TFr0TlZWVWLZsGRYtWoR33nnHroUeGCWxp0PAVSoV0tPT4e7ubvK80Ktwuk1bedo3NjYiLy9PsPj8aBmZSSQS+KlUCLnrLoiKi9Hx2mtoWbgQZ8+ehUajgZOTEzQaDdrb2wVd0Q1VemlccWPxdCWRCPp77wWXmAj5unVwnDMH2k8+AZeWNszbRNBoNKivr8e0adMQGBjIx/ppOMeWQtd3Xuto+6lTi2JaACAWiyGRSPjuZmrg1tzczE+Do37xQlwMadjKFs1aFRUVWLZsGZYuXYq33357VC01xiujIvYSiYRfOQwUA3ZwcBj3Yk+3V1ZWhsrKSkRHR8Pf39/q+Dy9fbd1nBYAJF9/Ddmdd4J4eUF96BBEMTHoyM/nhZaGfKh9rHEnr7Wx+4G+I9qVKpTHDTdvHtRHj0J27bWQL1oE3bPPQr9hAzDIv89A9sTGnjUDCR39Tqy9GHIch7y8PD4RLFTp7EihDUs+Pj6Ijo4e8LMYG7hNmTLFxMk0NzcXBoOBr+5RKBRmJXRpV64twlbl5eVYvnw5VqxYgbfeeosJ/f8YtQStVqsd9Ha+q6sLx48fx8KFCwXbX3FxMTiOw4wZMwTZ3h9//MF7c8TGxsLNzc2qk8jYyCw+Pt62t++9vZA++iik770H/erV0L71FnodHQdNxBr71SiVSvT09MDT05Mv7TS3hr29vR0cx/FNIgB4wbBJV6pWC+mTT0L6xhswLF0Kzb//DRiVjppjT/znJrV8eKO5uZkfxjGYrcVQ6PV6ZGdnw2AwIDExcdSTobS0c6iGpeEghKCrq4sv7+zo6OCndA3nUV9bW4uSkhLEx8cL3pV7+vRpLF++HKtXr8brr7/OhN6IcSH2PT09+OWXX7B48WLBfvRlZWVQq9WIjY21elvd3d04duwYHB0dkZSUZHV83tjILD4+3qYlbqLiYsjXrYPo9GnoXnwR+ptvRvv//HVGmoilK36lUmlSw+7r6zuiwRNtbW0AwIuqORU31iD+/nvIb7sNRC6H9sMPwc2ZY2JPnJiYaFHoxHgYR3NzM7q6ukxsLdzc3IYMW9Gu2OH82G0BLW8UeuCJsXWBsUc9FX+ahzG2XzC++AtBaWkpli9fjiuvvBKvvvoqE/o+jAux12q1OHToEBYuXChYy3tFRQU6OjqQkJBg1XZofN7JyQldXV3w8vLivTEsqcEeNSMzQiD5v/+D7MEHQUJDodm+HWTmTP72mZa4mftjp0leWtpJq1lohc9AcW0q9p6ennzFjVDdzcMhqq2F7KabzvUQPPooTv3lL9D8r+RXqIusRqPhhb+1tRVisZgXfuM2fXO7YoWGVr3YorzRGONh5LTc1cnJCTKZDJ2dnUhMTBRc6IuLi7FixQpcffXVePnll5nQD8Coib1OpxvUJnikHarmUF1dDaVSieTkZIveT1vGjePz1KuG/qjpbSvtWh3uBKurq0NRURHvB26zkramJsjuvhsO+/dDf8MN0L70EoiTE06fPi1IRyyF/qip8Hd2dsLV1ZUXftqs09raCo7jUFtbi+7ubiQkJIxuo5ZeD9Fzz8HxlVfQGRMD8UcfQTJtmk12RRuYqNDRPgc3NzfU19cjMDBw1GfFAuea9PLy8sbEMVSv16OoqAhNTU18fs7YwM1aa4uioiKsWLEC1157LV544QWLhT48PBxVVVX9Hr/zzjvxr3/9CxdddBGOHDli8tztt99uMi2quroa69evx88//wxXV1dcf/312LJli018m8xl7I8Af3ao6vV6wcTemgStTqdDbm4uuru7kZyczMfnnZ2dERoaitDQUL5EjVoTAxg0oclxHL+itbV7oGT/fsjuugsAoPn8cxhWroRer0d+Tg5f2iiU0Bp7sU+ePBlarZa/GFZWVoIQAnd3d3Ach+bmZri7u9s8bDUQ3Wo1shYsQMjUqYjasgWiuXOhffFFGNatGzR5aylisRje3t7w9vbm+xyqq6tx9uxZAOdEl+M4m5q39aWurg7FxcWIjY0d9clW1FCtpaUFaWlpcHV1RU9PD3+e0NmwxoZl5nwnhYWFWL58OW688UY8//zzVq3oT548aaIZ+fn5+Mtf/mIyxOTWW2/FM888w//d+O7eYDBg+fLlCAgIwNGjR1FfX49169ZBKpXi+eeft/i4hGJcrOwB4ODBg0hNTe1XlmkpDQ0NqKioMNsGlFaIODo6YsaMGSOKzxt3rdKEJg330NCFRqNBQkKC7drvOzsh27QJDv/3f9AvXw7tW28Bfn5Qq9XIzs6Gg4MD4uLibJYMpL0UWq0WGo0GOp0OXV1dvDkXIQSurq5wd3eHp6cn3N3dIZfLIZfLbWpGRe2JeduJrq4/v6cVK6B9881Ba/KFgJYXRkdHIyAgAG1tbbzQ9fb28pa8A3U3C0F1dTVOnz5tkxj5cNBGufr6eiQnJw+YH+F7P/53J0QN7UbynRQUFGD58uW49dZb8eyzzwoeurnvvvuwf/9+lJWVQSQS4aKLLkJCQgJee+21AV//3XffYcWKFairq+NLSbdt24ZNmzZBqVSOeiK+L6Mm9rQ7bzAOHz6MuLg4wU5IpVKJkpISzJ07d8TvofH54OBgREREQCKRWPTjoyuXhoYGdHR0QCKRICgoCP7+/jbpSBQfPAjZhg0QtbWdW7Fedx0gEqG9vR05OTnw9fVFVFSU4D8Gg8EAjUYDjUbD52TEYjEv4l1dXcjPz0doaCgCAgL46VzNzc2QSqVwc3ODh4cHPD094ejoCLlcDplMJthx0qHckZGR/eyJJfv2Qfa/skzta6/BsHq1IPs0hiYjB3PNNF7htrW1QSaTmcT6rcnnGI8wTEpKGnUzN0IISkpK+FDqSBc59DuhBm5SqZS/WzbOf+Tl5WHFihW444478Mwzzwj+m9JqtZg0aRI2btyIxx57DABw0UUXoaCgAIQQBAQEYOXKlXjiiSf4z/aPf/wDe/fu5f2pgHO5w8mTJyMzMxOJiYmCHqO5jIswDiB8rb05jVoDxeetqZ93dnaGo6Mjuru7ER4eDjc3NxOTMhrn9/Hxse42vrUVskcfhcPHH8Mwfz40330HEh4O4FwdM80PWJKIHQhCCHQ6HS/w9PuVyWRwcXExWaUPVHFDjcro6D2lUona2lpUVFTAzc2NX/W7urpCJpNBLpdb9P2MxJ7YsHIlelNTIbv3XsjXrj1XkvrKK4CZ038G2/9IumKNw4LGK9ySkhJoNJp+ls3m7J+6do5FsxYhBIWFhfwIRXN6CPp+J9TArby8HKdOncILL7yA+Ph47N69Gxs2bMDTTz9tk/zHnj170N7ebjKR6pprrkFYWBgmTZqE3NxcbNq0CSUlJdi1axeAwWfF0ufGmnEl9ra0NxiMweLzlkJ/6FVVVSZGZrRRx/jkzcvL48vTzB08LtmzB7L77wc0GmjefpuPP1NjtrNnzyIuLs5qi2eO43hx12g0Jqt3KvDG39dIPG6MR+/NmDGDr9dubGxETU0NnJyc4OrqCi8vL7i7u/OrfqlUOqKQGhW65OTkoVe0AQHQfv45DF99BdkDD8ApJQXaF16A4ZprLI7lW9oVK5FI+CovOpiElruWlpbyQ8gVCsWQ4/eMhXYsXDs5juP9negYTkuRSCR8LB84V0104YUXYt++fVCpVHjvvfdQXV2NO++8E2nDdEuby3//+18sXbrUxEjReIpUbGwsAgMDsWDBApSXl2PKlCmC7t8WjJrYD/cjtYVx2XBi393djczMTDg5OSElJcXq+nlqZEYtYvsamYlEIpN5qz09PVAqlfzgcRcXF5PB4wN2NdbVQfrgg3D4+mvoV66E7tVXQf63cqYeM3T/lq7o+sbegXNTgVxcXCCTyQaNPfbd/0gSwSKRCO7u7nB3d8fkyZOh0Wj4cM+ZM2dACIGbmxs8PT3h4eEBZ2dnPkzU96JskT2xSATDlVei96KLIHvoIchvuw2GL7+E9vXXQUJDh3//APtXqVRWdcWKRCK4uLjAxcUFYWFhJkPI6fi9gSybaVeuSqWyWmgtoe/+hbaXqKqqwvbt2/HAAw/gwQcfxLFjx/D999+jq6tL8P0cOHCAX7EPRnp6OoBzjVxTpkxBQEAATpw4YfIaOjvW3HmxtmBcreyFFHsHB4ch58ZS982QkBCr4vOUnp4e5OTk8DNaR5KMcXZ2RlhYGMLCwnhPeqVSiaysLL5W29fX91yFAiFwePttSJ9/HnByguajj2C47DJ+BWqciB3p/ikcx/HirtFowHEcRCIR5HI5nJ2dIZPJho0fG3vcmLt/Y+RyOe/NQssYlUolGhsbUVlZCRcXFz7c4+bmxgs/IYRvVLPIY0ehgPaDD2C46ipI770XjklJ0D3yCPT33AOMYFs6nQ45OTngOE5wi+C+Q8i7u7v5nFBJSQlv2dze3j5mFsUGgwG5ubnQaDQ22X9GRgZWrVqFTZs2YdOmTXzC9KKLLhJ0PwDwwQcfwM/PD8uXLx/ydTQsS8OUs2bNwubNm9HU1MRXPf30009wd3cXrJPfGkYtQWswGIYU89zcXDg7O2Pq1KmC7E+n0+HgwYP9GrVomKGqqgozZsyAn5+fVfF54NztZV5eHt9+brXHi9GwCaVSCZdTpxD/3ntwrqqC5uabwT31FGAUB+7o6EB2drZZiVgae9dqtdDpdLzjo3GFzEi/E1rB5OnpadNmIepL39TUhJaWFkilUri7u8PJyQm1tbXw8PBAbGys1XXb6OqCdPNmOLz9NsjUqdC++iq4+fMHfflYdsXqdDo0NTWhrKwMer0eYrHYxMZhNFb3BoPBZD6F0NVVJ0+exOrVq/HYY4/hwQcftGmPAsdxiIiIwJo1a7B161b+8fLycnz66adYtmwZfHx8kJubi/vvvx/BwcF87b3BYEBCQgImTZqEF198EQ0NDbjuuutwyy232FfpJfWVGYzCwkKIxWJERUUJtr++jVp09dXT04OZM2cKEp+nFRfR0dGCDUrhaWiA7O9/h8Pnn6MnLg5Fd9+NWj8/Ptzj6+sLlUo1okYtOh2MruANBgNEIhGfCJXL5RaJlE09boaA9jnU1dWhsbERHMfBw8MD7u7u8PLy4kNOliZ5AUCUlwfZffdB8scf0F99NbSbN/dL4NKuWE9PT0HM3MyFXmjkcjliY2NNKnw6OjpMzNusnbcwENTnhxCCxMREwfsGjh8/jssuuwxPPPEENm7caPPz68cff8TixYtRUlKCyMhI/vGzZ8/i2muv5cN0ISEhuOyyy/D444+blItXVVVh/fr1OHz4MFxcXHD99ddj69at46KpatyIfWlpKbRaLWbOnCnYPn/44QdceOGFcHZ2RldXF7KysuDk5DTi+vmhMBgMKC4uto2RWW8vHN58E9JXXgHkcmifeeZcAlYshk6n41f8SqUSHMfBx8cHwcHB8PHxMRFsvV7PCzwtjZRIJLy4y2Qyq74DWnFjkwvdCGhubkZubi4iIiLg7e3Nr/ppez6N9Zub5DWB4yD56CPInngC0Gige+ihc06ajo7o7OxEVlaWVYZi1tDb24vMzEy4u7sPeEdl7FLZ3NxsYtmsUCisDrXodDpkZWVBIpEgISFB8DuaY8eO4fLLL8fTTz+Ne++9d9S/3/ONURN72nQzGOXl5eju7kZ8fLxg+zxw4ADS09OhUqmQl5eH0NBQhIeHWx2fV6vVyM3NBQDExcUJd6vMcZB88QWkTz4JUUMD9LffDt0jjwB9eg9oIrCzsxOTJ0/mLQvUajW/unV1deU/J02qWrPKNYaWqtbW1graG2EO1DlxxowZ/ZJf1KuGJr9ppy+t6Xdycho0yTsora2QbtkCh3ffBQkKQtsjj+CP4GBETJ6M8P+Vu44mdHiOQqFAVFTUiKqUjM3bOjs7+Tm0xtYWI0Wn0yEzM5N3TRVa6H///XdceeWVePbZZ3H33XczoReAcSP2VVVVaG5uttjLZiAOHToEhUKBxsZGweLztFGJ+oALdZKLjx6F9NFHITl1CvpVq6B79lmQAfIXfTtiJRIJNBoN1Go1Ojo60N7ejvb2dvT29sLd3R0BAQHw8/Mb0onRHIwrbhITE0d9GLm59sQcx/Fdqw0NDejt7YWLiwvc3Nzg5eUFV1dXszp5RaWlIA88AOdDh9CbkgLRq6+CE3B28kjo7OxEZmYmgoKCMHXqVIv+XWnVE21gMmd+gVarRUZGBpycnBAXFyd4aOjXX3/FVVddheeffx533XUXE3qBGDdiX1tbi9raWsHqZXU6HX7++WdIpVIkJCTA1dXV6pOSGplZ6hg5EKLsbMieeQaSH34Al5AA7dat4C68cMDXdnR0ICsrC97e3nwFj16vh0gkglQq5VfvUqnUxKemubkZDg4OJtU9llykjCtu4uPjR73iw1p7YuP69cbGRr5Dkwq/cbhnsDAfzdGktrfDd8sWiAsLob/sMuieeAJk+nShPuqgGFsUR0RECLJN4/kFxuZtVPxdXV3572Kg6VZC8ssvv+Cvf/0rtm7divXr1zOhF5BRE3vgnFgMRkNDA86cOYPZs2dbvR86nEGn08HJyQmBgYHw8/OzuO6ZGpnV19cjNjZWECMzUXExpM89B4fdu8FNnQrd44/DcMUVwAA/HoPBgJqaGhQWFiIwMBD+/v79Yu9D/ejo6pa6U2o0Gt6W2NfXd0T10KNVcTMYdLi7RqMRzJ6YerA3NTWhqakJer0erq6ufLjHOMkrkUj4O4rExMRzORq9HpJPP4X0+echqq2F4dproXv0UbPr80cKzVEMZP8gJNTdlcb7JRIJH+qprKyEl5cXYmJiBBfiI0eO4K9//SteeeUV3HrrrUzoBWbciH1zczMKCwsxb948q/ZRX1/P+7EEBgaaeI8YV7GMNEap1WqRl5cHrVaL+Ph4qzsSReXlkL7wAiSffQYSFATdo4/CsHYt0Kc8VKfTQavVQq1Wo6KiAo2NjZg+fToCAwOtMg8jhEClUvEJ3s7OTr5iw9fXd8Bwz1hV3FBoxYlUKkV8fLxNKhtoTJvG+Ts6OuDk5AR3d3d4eHhAqVSiq6sLKSkp8PT0NP0ONBo4/Pe/kL7wAtDZCf3NN0P3wAOAgFbC1FDNeITiaEDLgOvr61FfXw9CiImNg1DmbYcOHcKaNWvw6quv4uabb7Z4m0899RSefvppk8emT5+O4uJiAOcuZA888AA+//xzaDQaLF68GG+//baJzcF4tim2hlEV+6EGmNDb04svvtiibdM2+erqasTExMDX19ckPm9cxUJXK1T4vb29B1ypdnV1IScnB25uboiJibHqH1uUnw/pyy9D8tVXgEIB3cMPQ3/TTcD/VtXGtgRarZZvCKusrIRarUZycrJgjqDG0HAP/V4cHBz478XLywv19fVjWnEj9JzakUJXt3TVbzAY+O7nQZO83d3nGt9eew1Qq6G/4Qbo778fxMpBITQZPZjPj61RqVTIyMiAv78/QkJC+Fh/a2urIOZtBw4cwDXXXIM33ngDN954o1UXj6eeegpffvklDhw4wD9GQ5gAsH79enzzzTf48MMP4eHhgQ0bNkAsFuP3338H8GetfEBAAF566SXepvjWW28dF7Xy1jBuxL6rqwt//PEH/vKXv1i03ZycHPT29iI2NnbY+DwNazQ1NUGpVEKv1/MrW4VCAalUyjsmhoWFWbWaFZ88CYeXXoLDN9+ACwmB/v77oV+3DnByMmlsovkMGnsnhKCgoAAODg6jFh83DvcolUr+Tiw0NBRhYWGCt78PRz974lG+o6B9GQaDAWFhYWhvb0djYyN6enp4H3/ayWucL0F7OxzefRfSt94COjpguOYa6B54YMCE+3BUVVXhzJkziI+PH5Oqp+7ubmRkZGDSpEn9ksEGg8HEspnaExubtw33b/bDDz/guuuuw7/+9S+sW7fO6n/jp556Cnv27DFxnqR0dHTA19cXn376Ka688koA5yZcRUdH49ixY7jgggvGvU2xNYyb+xJqhDaYvcFg0Pi8i4sL36Y93Ptpl6GPjw+ioqLQ1dUFpVKJqqoqFBQUQC6XQ6PRYPr06ZaNb+M4SL7/Hg5vvQXJkSPgIiOh2bYNur/+Fdr/NTdpurp4WwKZTMb7u0skEr4jVqFQIDo6etRWs/R78fT0hFqtBiEE/v7+aG9vR3V1NV+q5+vra5K0swVD2ROPBhqNBpmZmZDL5UhMTIREIkFAQACmT59u0slbVFQEmUxmUtPv5OQE+b33QrZ+PaTvvw/p669D8vHHMFx+OfR33w0uJWXY/VNDu5qaGpvd1Q0HrfoJCQkZcMFDY/l01axSqfhVf1lZGRwdHfnnvby8+q36v/vuO1x//fV45513cO211wo6f3rSpElwdHTErFmzsGXLFoSGhiIjIwM6nQ4LFy7kXxsVFYXQ0FBe7I8dO4bY2FiTsM7ixYuxfv16FBQUjLlNsTWMqtiL/ufKOBD0RDAYDCMOl9D4PPWXsaR+3tiIKywsDDk5Oejq6oK7uztKSkpQU1Mz8jh/VxccPv4YDu+8A3F5OQwpKej58EOoFi+GRq+H7n/eJQ4ODnwYoG+TT0NDAwoLCzFlyhTbji4cBDoMXSQS4YILLuBXMsa16xUVFZDJZPyd0GBhMEupqqoa0p7Y1gzVFSsSieDq6gpXV1eEh4ebeBpVV1dDr9fzds1eXl5wXrcO8uuug+sXX0D2r3/Bcf58GC64APq77oJh1SqTXA2FesE3NTUhJSVl1C2KgXOr4MzMTERERIy4j4CatxlbNjc3N6OoqAharRbe3t6oq6vDlClTUF5ejhtuuAHvvfce1qxZI9h5np6ejg8//BDTp09HfX09nn76aVx44YXIz89HQ0MDZDJZvwZIf39/3oJ4vNsUW8O4WtkD56ouhhP74eLzltDT04Ps7GzI5XLMmTMHUqnUJM6fmZk5aJxfVF4Oh3ffhcP//R+gUkG3ahW6Xn8d3TNnnrMl6O2FTCbja7oH+nzG9eNjJXLGFTczZswwWYnJ5XIEBQUhKCiIv31XKpUoLCyEXq+Hj48PL/6W3uqaZU9sI+hqdtKkSSPqipVKpQgICOAtrGkJY2NjI86ePQtnZ+dzpZ2LF8N19Wp4/PorXN97D/LrrgMXGgr9HXdAf911fOMcx3EoLCxEe3u7Vc6Z1kDDZ3TBYQl9LZvp3dBLL72E/fv3Qy6X46KLLoKfnx90Op1g4ZGlS5fy/x8XF4f09HSEhYXhiy++GJPvcjwxbsReLBZDLBYP63xJ4/NqtZpf9Vi7qqTVJvQHTrcnlUoRGBiIwMBAk3h2UVERDCoVpublIeT77+H0xx/gvLzQfd11aFuzBvrAQLNsCQwGAwoKCtDR0TEmwyaAP7+DkcTHjW/fo6Ki+A7es2fPorCwEO7u7vwPfaTVGhbZEwtMS0sLcnJyMNnCrliRSARPT094enpi6tSpJkne0tJSiMViuIeGwuONN+B79ix8PvoITk8+Cekzz8Bw2WXQ3nADcl1c0KtWIzU1ddRzJMCf34GQ4TPju6Grr74av/zyC2688UZ0dnbi+uuv543FbIGnpyciIyNx+vRp/OUvf4FWq0V7e7vJ6r6xsZGvcBrvNsXWMOphnKEYzoOexuddXV2RnJxstbcLnWh0+vTpYatNeDfBxkbM3LcPkk8+gaS9HS0xMci+8060L1gAn+BgBAYGQuHhMeJQFO2IlUgkSE9PH5MEUG1tLZ+oMrfipu/QcY1Gw9fznzlzBnK5nI/ze3l5DXhhphdwi+2JBaChoQEFBQWCVh05OjoiODgYwcHBJndDDQ0NqNDr4XbbbfC56SaEHDwIr6++gvNnnyE+NBTiO+4AiYzkK7VGC1rHHxUVZZPKq927d+O2227D9u3b+QQpIcSm4ZHu7m6Ul5fjuuuuQ3JyMqRSKQ4ePIgrrrgCAFBSUoLq6mp+VvV4tym2hlGtxhluDu2RI0cwc+bMAZuW6urq+OoYS+PzxhgMBr4bMz4+fsiQgai2FqIvvoDDjh1wyMuDwccHXZdfju6rr4YkOpqfQNXS0mJWPf9YJWIp1OOmpqbGJtUeNG5LxX+gcA8186IdmaNpD0wZblas0Bj3OjQ1NaG1tRXEYIB/YSFmHj0Kz59/BkQi6BYtAnf11eCWLQNsbFXc1NSEvLw8m9TxE0Kwa9cu3HHHHfj4449x2WWXCbp9Yx588EGsXLkSYWFhqKurw5NPPons7GwUFhbC19cX69evx7fffosPP/wQ7u7uuPvuuwEAR48eBTD+bYqtYVTFfjhP+99//x3Tpk3jr6jAuRhmaWkpampqEBMTA4VCYXV8Xq1W80nI+Pj4AW+XSUsLRF99BYedOyE9dgxEJkPPJZdAfdll4JYuhdzNbcDGppHW89NE7OTJkxEWFjbqiVgaOurs7BwVjxtCCF/1pFQq0d3dDVdXV/T09MDX13dMunKNK14SEhKEdS4dIRqNBhkZGRCLxXBycoJSqYRDSwumnjyJoMOH4VJUBM7NDdqVK8GtWQPMnw8IfEGkdzWxsbEmvz0hIIRg586duOuuu/Dpp5/i0ksvFXT7faFhopaWFvj6+mLu3LnYvHkzPzaQNlV99tlnJk1Vxhe48WxTbA3jSuz/+OMPhIaG8reQxvH52NhYuLi4WC0I1MhsoNU0qagAvv4aDt98A9nx4wAhUM+ZA/Xll4OsXg2ZQmHW/vvWret0Ovj4+IAQgpaWFsTFxY1JIlar1fJ1yAkJCWMSNqmrq0NhYSGcnJygVqshl8v5i6Knp6fNhZ/jON6iOikpaUzyJL29vcjIyDCp+jH2qWlqagJXVIQpf/yBoCNH4FRXB4NCAc3ixeBWroRo4UKIrEw61tXVobi4WJB5xX0hhGDHjh2455578Nlnn2HlypWCbp9hHuNK7E+dOgU/Pz+EhobyXuGurq6Ijo62Oj4P/Bmb5o3MCIEhIwPi/fsh/fZbyAoLQWQyqGfPhm75cpBVq+AQFCTIqptWahQWFqKnpwfAueSRr6+vVb495kIrbjw8PBATEzMmYZO+9sQGg4Gvzzb26DduchMSg8GAvLw89PT0ICkpadRntQJ/zj/28/PD9OnTBz3Hent7z30vTU3Q//47gk6eRNCJE3CuqQHn4gLNxRdDv2IFREuXQmymWNfU1KC0tBQJCQmCh/AIIfjss89w3333YceOHcOO+GPYnlEV++EGmGRnZ8PDwwNyuRwFBQUIDw9HaGio1fF5GgpqaGhAbGgoPE+dguT77yE7dAgOSiUMbm7QLFwIw/LlwJIlkAxjm2sJNHREHSMNBgO/4rfUt8dczKm4sQUjsSc29qhpbm5Gd3c3PDw8TKp7rEGn05lMVhL6QjISaHlncHCwWf8OfA6kqQmqU6eg+PVXBGdkwKO0FEQshjYlBbpFi0CWLYMkLo6fTzwQ1dXVKC8vH5FNtLkQQvDJJ59g48aN2Llzp0k5JGPsGFdin5ubC5VKBZVKJVh8XqvRoGT3bnj8/jvC8vPhmJkJkV4PbWQkdAsXgixdCtHcuRDZMJTR0dFh4oHfN0RBG3PobFVa2ujn5ydYw5I1FTdCYKk9sVqt5i+Kra2tcHJy4qt7zA330K5YR0dHmwzcGAm0hp3maizFePB4W34+nA8fxqSsLPjm5ECiVkMfFATNX/4CbulSiC+5BCKjUtaKigpUVlYiKSlJ8F4GQgg++ugjPPTQQ/jyyy+xePFiQbfPsJxxI/ZarRa///47OI5DcnKyVe34pLsb5OBBGPbtg/Snn+Dc3AzO0RHaOXOgX7wYWLoU4smTrfkoI4a2/Y80ETtYnJ+ubM1didq64mYkCGVPrNfrTap7OI7j6/2HC/fQyU6jbahmjFKpRF5eHqZPn46goCBBt01HECrPngU5fBj+J08iMDMTTg0N4BwdobnwQugXLcLZuDhU6vVISkoS3IKBEILt27dj06ZN2L17t4ktAWPsGVWxH2yACb2tlUql6OrqgqenJ/z8/MyKZRtKSyH69ls4/PgjZMeOQazVotvfH93z58Plyishvvhik9WNraEhi6qqKsycOdOiKge6eqOGbd3d3Xyc39fXd9jGo9GuuBkIW9kTG3erKpVKqFSqQb8bc7tibQGteJk5c2a/dnyhoUleGu5x//VXBGVlwbOwEGKOgzoqCvrFi0GWLYP4ggsgEmhU5fvvv4+///3v2LNnDy655BIBPglDSMZc7Gtra1FYWMjH52npYlNTE9ra2uDq6sonMfuu9g0//ADxd99BdvAgpGfOgEil0FxwAZqSknB6+nRMXrIEfjb+YQ2EcUdsQkIC3NzcBNkuTdbR72aoOP94qLgZTXvi3t5efsXf2toKZ2dnKBQKyOVynD59GlOmTBmTWbHAn4lQW1S8jISenh4UFBRAVVMDRUYGArOyEJCZCWlnJwze3tBcdBEMS5ZAvHo1RBYsCAgh+M9//oMnnngCe/fuxUUXXWTxsW7ZsgW7du1CcXExnJycMHv2bLzwwguYbjQF7KKLLsKRI0dM3nf77bdj27Zt/N/PV096axgzsec4DiUlJaitrR00Pm8s/M3NzXx5np+fHzw9PSFNTYW4vR2aBQvALV4M7uKLUVBVhe7ubn4U4WhjXMNvS5E1NuBqbm6GWCw2mTyVm5sLd3f3Mau4GUt7Yr1ej5aWFlRXV6O9vR0SiQR+fn4jmq8qNJWVlaioqLBJInQkEEJQVFSElpYWJCcnQy6XnztvGhqg++03eB87hqDsbLhWVqKtsBCOZrq8EkLw73//G08//TT27t2L+fPnW3W8S5YswdVXX43U1FTo9Xo89thjyM/PR2FhIX9netFFFyEyMhLPPPMM/z5nZ2c+LHU+e9Jbw6iKPQDevz07OxsajYb3nx9ODGh5Ho1li0Qi+IvF8Jk+Hd4+Pvx8VLlcjri4uDGrssjOzoa3t/eoxoWN4/yNjY3QarVwdnZGRESEVcZkljLW9sQAeBuM2NhYSKVS/rzp6emBl5cXX9ZpKw8emiupra21SXx8pMdQUFCA9vZ2pKSk9MuV0Ea35uZmtJeWotXBgZ9aRscQDvW7JITgnXfewbPPPov9+/fjwkFmJ1uDUqmEn58fjhw5wk+xu+iii5CQkIDXXnttwPecz5701jDqYt/U1ISsrCy4u7sjKirKovp5OiqNtpvToSg+Pj6IiYkZk39McxOxtqC2thZFRUX8IGpL4vzWMtb2xMN1xdKB47Tk1dnZmf9uPDw8BOupMG7YGotcCcdxvLEcXdEPh/GQ+paWFojFYl74fXx8TEIghBC89dZb2LJlC/bv34+5c+fa5HOcPn0a06ZNQ15eHmbOnAngnNgXFBSAEIKAgACsXLkSTzzxBH9u/+Mf/8DevXtNBphUVFRg8uTJyMzMnNCe9NYw6jNoDx06hNDQUISEhFhdP0/H9p05cwY+Pj7o7e2FSqUyGaZt64YZQghfymZpIlaIYxis4qZv6aKzszP8/PwEr+c3tidOSEgYE3ti2hXb0tIyovJOOnCchsIA8GWdfcXNnGOgSfGkpKQxsdXlOA65ubno7e3lDQMt2UZ7ezt/Yezt7YWXlxfy8/ORlJSEQ4cO4cUXX8Q333yD2bNn2+BTnDuGVatWob29Hb/99hv/+LvvvouwsDBMmjQJubm52LRpE9LS0rBr1y4AwG233Yaqqir88MMP/Ht6enrg4uKCb7/91m7r/kc1W/HVV1/hpZdewiWXXIKVK1ciJSXFYrExNjJLSUnhxaWnp4d3FiwpKeHtdv38/ARfYfW1JhYqEWvJMXR2diItLa3fZ3R0dERISAhCQkJM4vyZmZkmcX5L54fSYxhre2LjrtjU1NQRXeSlUin8/f3h7+//ZwWLUony8nLk5eXB29ubF/+RiLbBYEBubi5vvz0WFsUGgwE5OTnQ6XRISUmxOJwpFovh7e0Nb29vREZG8ndE1P5AIpHg8ssvh0ajgU6ns0nY9K677kJ+fr6J0APnxJwSGxuLwMBALFiwAOXl5bwHDqM/oyr2K1euhEQiwe7du3HppZfCzc0Ny5cvx6pVqzB37twRnzDGSdD09HSTH5WzszPvjKnVavmyxfLyckFXtTRHIBKJkJaWNiY/bOOKm7S0tGFXcMaDNozj/MXFxSb1/ObE+ceDPbFxV2xqaqpFwiMWi/mB4lTcaJiwtLSUr3xSKBQDhnv0ej2ys7PBcZxVImsNBoMB2dnZMBgMSEpKEvQYnJ2dERISgksuuQTFxcW4//77UVZWhmuuuQZxcXEmq2gh2LBhA/bv349ffvll2LxPeno6APBVV+ezJ701jHrMnqJWq3Hw4EHs2bMHe/fuhV6vx9KlS7Fy5UosWLBg0NXhUEZmQ0ErNGhlD63QGMpnfTCME7HR0dFjUu3S3d2N7OxsQSpuLK3nHw/2xGq1GllZWTbtih2o8omu+L29vcFxnEkvwVh8D3q9HllZWXwVmNAlhoQQvPjii3jrrbfwww8/IOV/c3Q5juMdJoXaz913343du3fj8OHDmDZt2rDv+f333zF37lzk5OQgLi6OT9DW19fzYdV3330XDz30EJqamsZkYTYeGDOxN0av1+P333/H7t27sXfvXjQ1NWHBggVYtWoVli5dyq+kvvzyS37yTEhIiMUrc47j+FhtU1MTOI7jhU2hUAz5Y6WJWDqbcywSsa2trcjJybFZWeNI4vzUqM7f339IIy9bQrti6UV3NKqfBoplU3vi+Pj4MQlh6XQ6vinRFhcbQgi2bNmCbdu24ccff0RSUpKg2zfmzjvvxKeffoqvv/7apLbew8MDTk5OKC8vx6effoply5bxE67uv/9+BAcH87X357MnvTWMC7E3huM4ZGdnY/fu3dizZw9KSkowd+5ciMVinDhxAj/++CPi4uIE2x/txKTCr1ar4ePjw9dl07DEeEjEAn963ERFRQnecj8QA61q3dzc0NbWhoiICERERIyJ0Hd0dCArKwtBQUGYOnXqmBxDT08PTp06BblcDrFYjI6OjlExtDNGq9UiMzMTcrkc8fHxgl/wCCHYvHkz3nvvPfz0009ISEgQdPt9Gez7+uCDD3DDDTfg7NmzuPbaa5Gfnw+VSoWQkBBcdtllePzxx03KW89XT3prGHdibwwhBCdOnMA111yDlpYWSKVSTJkyBatWrcLKlSsxefJkQX9MfScIUesGhUKB9vZ2dHV1CdoRa+6xlZeX4+zZs2PmccNxHMrKylBdXQ2pVNrPini04vV0TuqUKVOsMhOzhu7ubmRkZCAgIACRkZEQiUT9BtcYh3t8fHwEX3HTwScuLi6IjY0VXOg5jsOzzz6LDz74AAcOHBB0kcUYfca12BcWFmLZsmVITU3FBx98gI6ODuzZswd79uzBkSNHMH36dKxYsQKrVq2yycmuVqtRV1eHyspKGAwGuLq6wt/fH76+vlYZtZmLccXNWHUGG9sTx8fHw8vLq1+c38PDgw/32CqcUV9fj8LCQsyYMQOBgYE22cdw0LuK0NDQQe9sjHtBlEolNBoNXxKsUCisLglWq9XIyMiAh4eHTRr4OI7DU089hY8++ggHDhxAbGysoNtnjD7jWuzr6+vx2Wef4f777zf5QdGZr/v27cOePXvw448/wtfXlxf+Cy64QJBVFE3Eenl5Ydq0aSY12XK5nBc2T09Pmwn/ePC4GYk98UBxflryKlQ4g3bFjpXHDHAuX5KdnY2pU6ciNDR0RO+hd4x01d/R0cF7Pvn6+sLNzc2s74dOuKK5CqHPPY7j8I9//AOfffYZDhw4gJiYGEG3zxgbxrXYjxSVSoUffvgBe/bswf79+yGVSrFs2TKsWrUKF110kUXZ96ESsQNZN9Afro+Pj2CrLJVKxXcbj5XHjSX2xHq9nhe2vr49ltTzG3fFJiYmjknDFnCu+zs/Px9RUVFWzQQw7lRtbm6Gg4ODSXXPUN8PTUr7+vraJDHOcRz+/ve/Y+fOnTh48CCio6MF3T5j7DgvxN4YnU6HI0eOYNeuXdi7dy+6u7uxaNEirFy5EosWLRo23m5uIravdYNOp+MHj1hjumXripuRIIQ9Mf1+aLjH3Hp+47uKsbIeAM7dZRYVFQmenDfud2hubjYJ91BTOwrNEwQGBtrEqpnjODz66KPYtWsXDh48iKioKEG3zxhbzjuxN4bjOBw/fhy7d+/G119/jerqalx88cVYtWoVX7rVd8VeWFiItrY2JCQkmG1eRY2lqLBR6wYa7hnpHUZdXR2KiopGreJmIGxhT0zr+emF0XjkoJ+fX784/3iYFQsAZ8+eRVlZGeLj4+Hj42Oz/RgXCCiVSnR2dvLGZC4uLigqKrLZxZ/jODz88MPYu3cvDh48aFL2yDg/OK/F3hjqAEhLOnNzczFr1iysXLmSn3p/55134p577sH8+fMFabzo6enhhb+jowPu7u688A+0QjWuuImLi7OpsAzFaNkTDxbnpwnenJwcAOdyFWPRkUq9lyorK5GYmNjPVM3W0HBPXV0d2tra4ODggICAACgUCqvsLfrCcRwefPBBfPvttzh48OCIGpmE4F//+hdeeuklNDQ0ID4+Hm+++SbS0tJGZd/2iN2IvTGEEFRVVfHC//vvv8PV1RXR0dF4+eWXkZCQILjAaTQaXthaWlr6NSpRA62Ojg6zZrQKzVjZE/ftcDYYDJDJZJg+ffqwjW62gBCCsrIy1NfXIykpaUzKbYFzHeNZWVkIDw+Hm5sbnwvR6XQm1T2WLk4MBgM2btyIH3/8EYcOHRo1b5kdO3Zg3bp12LZtG9LT0/Haa69h586dKCkpGbMelvMduxR7Y3bv3o3rrrsOf/nLX3hXzrCwML6yJzk5WfCyNprApMLm4OAAQgikUumYhivG2p4YOJeAzMjIgKurK5ycnNDc3AytVssnMEejnr/vwI+x6IoF/qz8mTZtGkKMhooYh8Oam5vR2dkJd3d3/jsaaVmwwWDAfffdh0OHDuHgwYOYPEpzmYFzfjapqal46623AJy7uwgJCcHdd9+NRx55ZNSOw56wa7H//fffsWTJEmzfvh2XX345gHPllt9++y327NmD7777Du7u7rxZ25w5cwQPJ3R1dSEzMxMSiQQGg4G3bqAJ3tFY0Y4He2Jg4K5YY2FTKpXo6uoaMs5vLcY+8GN54aWNYyMZTq7RaEyauWQyGX9h9Pb2HnCxYjAYcM899+DIkSM4ePAgPwNhNKDDdb788kusXr2af/z6669He3s7vv7661E7FnvCrsWeNgoNduuqVqtx4MAB7NmzB/v27ePN2latWoUFCxZY7VVOK26Cg4MxdepUAOcEr6mpCU1NTdBoNANaNwiJsT1xYmLimK1iR9oVO1Sc39rhI9QeWKvVIikpacwmGimVSuTm5lrUOGYwGPjqHqVSCb1ez1c/+fj4QC6Xw2AwYMOGDfjtt99w8ODBUZ/NW1dXh6CgIBw9ehSzZs3iH3/44Ydx5MgRHD9+fFSPx16wa7E3B2Oztq+//hpKpRILFy7EypUrTczaRspwFTe0MoMKP3WipHF+IYZiGNsTj1XDFmB5V2zfOL819fzUJhkYu4QwcC5nkp+fj5kzZ/Ij9SzF2M20ubkZ7733HnJzc6FQKHDmzBn8+uuvY2I3wcR+bGBibwHU0pYKf0lJCebPn4+VK1dixYoV8Pf3H1T4La24UavVfGVPW1sbXF1d4efnxw9lMXdFOx7siQHhumIHGlU50jg/NROTyWRjZlEM/HnRi4uLs0nO5MyZM3j44YeRmZmJjo4OBAYG8iP9RrMjmYVxxgYm9lZCqzZ27dqFr7/+GidPnkRqaipf0mls1qZSqVBWVoauri6rKm5oSV5f6wY/P78R3WGMB3ti44HcQnfFDhXn71v2qlarTS56ozUkvi+1tbUoKSmxWS2/TqfDbbfdhpycHBw8eBDe3t44dOgQvvnmG7zyyiujPj4xPT0daWlpePPNNwGcu1iHhoZiw4YNLEFrI5jYCwghBHV1dSZmbVFRUVixYgXmzJmDTZs24eKLL8Yzzzwj2AAFat1Ab9WpdYOfn9+Aybnm5mbk5uaO6WD00e6KHSzO7+bmhtLSUn4Qzlh8F8CfTVsJCQk2cTPV6XS4+eabUVhYiIMHD46ZgZwxO3bswPXXX49///vfSEtLw2uvvYYvvvgCxcXFVoevGAPDxN5GEELQ1taGffv24aOPPsIvv/yCqVOn4uKLL8Zll12G9PR0wcMFA1kTUOsGhUKBxsZGFBcXIyYmZszGsxnPaR2p146Q0Dh/XV0dH+cPCAjgL46jHcKprKxERUWFzZq2dDodbrzxRhQXF+PQoUPjaizfW2+9xTdVJSQk4I033uBHDDKEx+Zir9FokJ6ejpycHGRlZZkMP8jNzcVdd92FkydPwtfXF3fffTcefvhhk/fv3LkTTzzxBCorKzFt2jS88MILWLZsmS0PWVAOHz6Myy+/HDfffDPS09Oxd+9e7N+/HzKZjDdrE6pj1xhj64ampiaoVCqIRCKEhIQgPDx8TEazjZckKG1UCgsLg6enp4kNsa2rn4yhltFJSUlmW3OMBK1WixtuuAGnT5/GwYMH2YrZzrG52N97770oKyvDd999ZyL2nZ2diIyMxMKFC/Hoo48iLy8PN910E1577TV+evzRo0cxb948bNmyBStWrMCnn36KF154AZmZmZg5c6YtD1sQOI5Deno61q9fj5tuuol/XKfT4fDhw7xZm0qlwqJFi7Bq1SosWrRI0O5ZGjJpbm5GYGAg2tvb+SYcGucfjXJLOivWyckJsbGxY5YEpSWeQzUqDRfntxZjF8/k5GSbdOdqNBpcf/31qKysxIEDB1hXKsO2Yv/dd99h48aN+OqrrxATE2Mi9u+88w7+/ve/o6GhgV9BPfLII9izZw+Ki4sBAH/729+gUqmwf/9+fpsXXHABEhISsG3bNlsdtqDodLohV7AGg8HErO3s2bO45JJLsHLlygHN2sxhMHtiat3Q1NSE1tZWfpSen5+f2d7qI2EsZsUOBLUojo6OHjZubat6fuMGtuTkZJvYYmg0Glx33XWoqanBTz/9NGbd0Izxhc3EvrGxEcnJydizZw8UCgUiIiJMxH7dunXo7OzEnj17+Pf8/PPPuOSSS9Da2govLy+EhoZi48aNuO+++/jXPPnkk9izZw9vknU+Qc3aaGVPbm4uZs+ezVf2BAcHj1hkRmpP3Ne6QSqV8sLv6elptTCPh1mxwLna7uLiYousIGicn4q/pfX8hBAUFxejubnZZjYMarUa1157LRoaGvDjjz+O2ZAXxvjDJtN3CSG44YYbcMcddyAlJQWVlZX9XtPQ0NCvRZvGFBsaGuDl5YWGhoZ+cUZ/f380NDTY4rDHHJFIhJkzZ2LmzJl8noKu+B999FHExcXx83eHKpk0x56YOikGBASA4zi0traiqakJeXl5IISYePObG3qhlT/mTHWyBbSW39JqFwcHB/j7+8Pf39+knr+kpISP81PxHyzOTwjh7bNTUlJsUurY29uLtWvXorm5GT/99NOYuaYyxidmif0jjzyCF154YcjXFBUV4ccff0RXVxceffRRqw7OnhGJRIiIiMDGjRtx//33o6mpCfv27cPu3buxZcsWhIeH82ZtSUlJvKDn5OSgtbXVIntiOiBboVCAEMJbN5SWlpokL319fYdNro6HWbHUDuPs2bNITk4WpJZfLBbD29sb3t7eiIyM5Luca2pqUFRUNGCcnzqadnZ2IiUlxSYVSL29vVizZg3a2trw448/jslAesb4xiyxf+CBB3DDDTcM+ZrJkyfj0KFDOHbsWL+Kj5SUFKxduxbbt29HQEAAGhsbTZ6nf6flYYO9ZjyVj40GIpEI/v7+uOWWW3DLLbego6ODN2tbuXIlb9bm5eWF1157DV9++SXvtWPNPj09PeHp6Ylp06bxolZdXY3CwkJ4eXnx4Z6+4kXdMxMSEsZsdWkcG09JSbFJbFwkEsHV1RWurq6YPHky1Go1HxI7ffo0nJ2doVAo0NnZCa1Wi5SUFJtUQfX09ODqq69GV1cXfvzxR3h5eQm+D8bExyYx++rqanR2dvJ/r6urw+LFi/Hll18iPT0dwcHBfIK2sbGRXyU+9thj2LVrl0mCtqenB/v27eO3NXv2bMTFxU2YBK2t6e3txYEDB/Dcc88hIyMDM2bMQHx8PFauXCmIWdtg+6QJ3vb2dt66wdfXF/X19airqxvTWbG0AqmtrQ1JSUljYu6m1+uhVCpRVlYGjUZjkgsRsp5fpVLhb3/7G3p7e/Hdd9/ZpFa/srISzz77LA4dOoSGhgZMmjQJ1157Lf7+97/zYavKysoBnTOPHTuGCy64gP/7RC+lnsjYpCwiNDSUjz3PnDkTkZGRAIApU6bwAzGuueYayGQy3HzzzSgoKMCOHTvw+uuvY+PGjfx27r33Xnz//fd45ZVXUFxcjKeeegqnTp3Chg0bUFlZiZtvvhkRERFwcnLClClT8OSTT0Kr1ZocS25uLi688EI4OjoiJCQEL774Yr/j3blzJ6KiouDo6IjY2Fh8++23tvhabIJMJsPBgwdRWVmJ3377DW+88Qa8vb2xadMmhIWFYe3atfj888/R3t4Ooa7rTk5OCA0NRUpKCubNm4fQ0FB0dnbi+PHjqK6uhq+vLwghgu3PHDiOQ15eHjo6OpCSkjJmLp4ikQh1dXVwdHTEvHnzEBcXBwcHB5SUlODw4cPIzs5GbW1tv/PVHFQqFa688kpoNBp8//33NpukVVxcDI7j8O9//xsFBQV49dVXsW3bNjz22GP9XnvgwAHU19fzf5KTk/nnjh49ijVr1uDmm29GVlYWVq9ejdWrVyM/P98mx80wZVQ6aOlVf6imKoVCgbvvvhubNm0yee/OnTvx+OOP8yuBF198EcuWLcP333+PHTt2YM2aNZg6dSry8/Nx66234rrrrsPLL78MwD5q+evr67FmzRq8//77JsMnqFkbrewpKyvDvHnzRmTWZi60K7a3txehoaF8ApNWrQxm3SA01KJYp9MhMTFxzFw89Xo9srOzQQhBYmKiSSWUsZupNfX83d3duPLKK0EIwTfffGOTpqyheOmll/DOO+/gzJkzAAb/jRtzPpRST2TOK7uEviegvdTyDweNX9MxjKdOnUJaWhpf0hkREWGx8A/WFdvXuoH6qtPu1MFKQS1Fp9MhKysLYrEYCQkJgm/f3OOQSCRISEgYNlxD4/y0nt/JyWnYev6uri5cccUVkEgk2L9//5iMTHz88cfx/fff49SpUwD+FPuQkBCo1WpERkbi4YcfxqpVq/j32Fsp9XhjbLpbbERHR4dJFcKxY8cwb948kxXe4sWLUVJSgra2Nv41CxcuNNnO4sWLcezYsdE56FFAJBJh+vTpeOSRR3Ds2DFUVlbimmuuwcGDB5GUlIRZs2bhueeeQ15eHjiOG/F21Wo1Tp48yY9TNK7QoVUrUVFRmDt3Ll9XfubMGRw+fBiZmZmoqamBRqOx+vNpNBqcOnUKUqm030p6NNFqtcjIyIBUKh2R0AOAo6MjgoODkZiYiPnz52PKlCnQaDTIzs7GL7/8goKCAjQ1NUGv1wM4d7d62WWXwcHBAd98882YCP3p06fx5ptv4vbbb+cfc3V1xSuvvIKdO3fim2++wdy5c7F69Wrs3buXf429lVKPN8bmV2ED6AlIQzgAq+UfCJFIhODgYGzYsAF33XUXb9a2Z88evP766/D39+dLOocyazOnK1YkEsHd3R3u7u6YOnUqVCoVlEol3+hkzZhB6svv7u6OmJiYMevOpULv7OyM2NhYi45jsHr+0tJSPPHEE5BKpejp6YGzszP2799vdYXRSEupo6Ki+L/X1tZiyZIluOqqq3DrrbfyjysUCpN8W2pqKurq6vDSSy+ZrO4ZY8e4E3shT0DG0IhEInh7e+P666/H9ddfD5VKhe+//x579uzBX//6V8hkMn7+7rx58/iywVOnTqGjowNhYWFm1/IDgIuLC1xcXBAeHm5i3XD69GmzrBvoBUehUCAqKmrMunNt4Ynft57/qaeewnPPPYeqqip0dHRgyZIlWLVqFR544AGLK3tGWkpNqaurw8UXX4zZs2fj3XffHXb76enp+Omnn/i/s1LqsWXcib2QJyCr5TcPFxcXXHHFFbjiiiug1Wp5s7Y777wTKpUKixcvRkREBN544w288847WLBggdX7lMvlCA4ORnBwMHQ6He/NT8Myg1k3dHZ2IjMzE8HBwRZdcISit7cXGRkZfLeyLY6jo6MD//jHP+Dl5YWamhq0t7dj3759fG7AUmhuYCTU1tbi4osvRnJyMj744IMRXdCys7NNGupmzZqFgwcPmsTsf/rpJ5PRhAzbMaETtMYn4Mcff9zvxGe1/MJAzdo2b96M77//HlFRUYiIiMCKFSuwfPlyeHt7Cy5yHMeZ+NEQQnhxkkgkyM3NRURExKgPyzamp6cHGRkZNr2zaGtrw6pVq+Dr64vdu3eP+kQp4Nzv7KKLLkJYWBi2b99u8juji6Lt27dDJpMhMTERALBr1y488cQT+M9//oMbb7wRwLnKt/nz52Pr1q1Yvnw5Pv/8czz//PMTpvJtojNhE7T0BAwNDcXLL78MpVKJhoYGk1i7tbX8A/Gvf/0L4eHhcHR0RHp6Ok6cOGHzzzrWSCQS/PHHH/j111/x7bff4vPPP0dqaireffddTJ48GcuWLcM777yDmpoawWrradnmjBkzMG/ePL7Sp6ioCJmZmXBycoJMJoNOpxNkf+aiUqlw6tQp+Pn52UzoW1pasHLlSgQEBGDPnj1jIvTAudU39cQPDg5GYGAg/8eYZ599FsnJyUhPT8fXX3+NHTt28EIPnFtEffrpp3j33XcRHx+PL7/8Env27GFCP0pM2JX9hx9+aHIiGWP8kayp5e/Ljh07sG7dOmzbtg3p6el47bXXsHPnTpSUlJzXfuFqtRorVqzA1q1bkZKSwj9OCDExa/v999+RkJDAl3QKPd+2sbEReXl5mDp1KjiOQ1NTE7q7u4e0brAF3d3dyMjIwKRJk2zm5NnS0oIVK1YgNDQUX3755ZgMm2GcX0xYsR8L0tPTkZqairfeegvAuVBDSEgI7r77brsfkkwIQWNjI/bu3Ys9e/bg0KFDCA8Px8qVK7Fq1SokJiZalbikA7n7WhT3tW5wc3PjrRtcXFwEF2KaKwgNDbWqP2EompubsWLFCkREROCLL75gQs8QBCb2I0Sr1cLZ2RlffvklVq9ezT9+/fXXo729HV9//fXYHdw4pKOjA9988w327NnDt/LTyp7Zs2ebNZKwqqoKZ86cQUJCwpAmX1qtljcia2lpgaOjIy/81gwcMf5MmZmZNs0VNDU1YeXKlZg6dSp27NgxZl3AjPMPJvYjpK6uDkFBQTh69KhJ9cDDDz+MI0eO4Pjx42N4dOMbata2Z88e7Nu3DxzHYdmyZVixYsWQZm3G4/vMndNqMBj4yh5q3UCF3xLrhra2NmRnZ2PKlCk28+ZvbGzEihUrEBUVhc8++4wJPUNQxl3pJeP8w8nJiY/j6/V6/Pbbb9i1axcefvhhtLS0YOHChVi1ahWWLFkCd3d3iEQiGAwG/P777wDONeiYOwNWIpHwM3Y5jkNbWxuUSiUKCwthMBhMhrIM13FL59ZGRkbyRn5C09DQgOXLlyM2NhaffPLJmA1jZ5y/sJX9CGFhHOHhOA6ZmZm8Z8/p06cxf/58LFu2DN999x0aGhpw8OBBQZ0rCSHo7Ozk4/y9vb3w9vbmyzr7xseVSiXy8vIQFRWFSZMmCXYcxjQ0NGDZsmVISEjARx99xISeYROY2JtBeno60tLS8OabbwI4J1ahoaHYsGGD3SdorYWate3YsQOvvfYaAGDmzJlYunSp1WZtQ0GtG5qamtDZ2Wli3dDd3Y28vDzExMTYrMmuvr4eS5cuRWpqKrZv3z5mvj6M858JW2c/FmzcuBHvvfcetm/fjqKiIqxfvx4qlWrQElBjtmzZgtTUVL5aZPXq1SgpKTF5jVqtxl133QUfHx+4urriiiuu6NfdW11djeXLl8PZ2Rl+fn546KGHeJOsiYxIJEJQUBCOHDmC6dOn48iRI7jqqqtw4MAB3qxt8+bNZpu1DQe1bUhLS8OFF16IgIAAtLa24ujRo8jJyYGvry+cnZ1t4s1PbT7S09NtKvTh4eEQiUQmf7Zu3WrymvN97gMDAGGYxZtvvklCQ0OJTCYjaWlp5I8//hjR+xYvXkw++OADkp+fT7Kzs8myZctIaGgo6e7u5l9zxx13kJCQEHLw4EFy6tQpcsEFF5DZs2fzz+v1ejJz5kyycOFCkpWVRb799luiUCjIo48+KvjnHAv+7//+jyxcuJB0dXXxj3EcR5qbm8kHH3xALr30UuLs7EwmT55M7rnnHnLgwAHS2dlJVCqVoH/KysrI3r17SVZWFjl27BjZt28f+f7770lmZiY5e/Ys6erqsnofxcXFZPLkyWTdunVEp9PZ9HsNCwsjzzzzDKmvr+f/GJ93HR0dxN/fn6xdu5bk5+eTzz77jDg5OZF///vf/Gt+//13IpFIyIsvvkgKCwvJ448/TqRSKcnLy7PpsTOEg4n9GNHU1EQAkCNHjhBCCGlvbydSqZTs3LmTf01RUREBQI4dO0YIIeTbb78lYrGYNDQ08K955513iLu7O9FoNKP7AWzEcMLX1dVFdu7cSdauXUu8vLxIQEAAuemmm8iePXtIa2ur1SJcUlJC9u3bR86ePcs/1tnZSSorK8nJkyfJN998Q7755hty4sQJUlFRYdHFpqioiERERJAbb7yR6PV6m3+nYWFh5NVXXx30+bfffpt4eXmZnEObNm0i06dP5//+17/+lSxfvtzkfenp6eT2228X/HgZtoGFccaIjo4OAOD99zMyMqDT6Uy89aOiohAaGsp76x87dgyxsbEmlsyLFy9GZ2cnCgoKRvHobcdwoQxXV1dceeWV+Pjjj9HQ0IDt27dDKpVi/fr1iIiIwE033YTdu3eju7vb7H1XV1ejrKwMSUlJJnMRJBIJb90wf/58xMfHQyqVorS0FIcPH0ZOTg7q6+tHZN1QWVmJJUuWYMGCBXjvvfcEm0U7HFu3boWPjw8SExPx0ksvmYT+2NwH+4Blg8YAjuNw3333Yc6cObwvCJ2m1XeOqLG3/mDe+/Q5e0Mmk2HRokVYtGgR/vWvf+GPP/7A7t278fTTT+PWW2/FJZdcgpUrV2LZsmXDmrVVVFSgsrISSUlJQw5KF4lE8PLygpeXF6ZNm4bu7m40NTWhqqoKBQUF8PLy4uv5+1o3VFRUYNmyZViyZAnefvvtURP6e+65h7+AHT16FI8++ijq6+vxz3/+EwCb+2AvMLEfA+666y7k5+fjt99+G+tDOW+QSCSYM2cO5syZgxdffBEFBQX46quvsG3bNmzYsAFz5szha/2DgoJ44ec4DqWlpWhoaEBKSopZk59EIhHc3Nzg5uaGKVOm8NYNjY2NKCkpgZubGzo6OqBQKODp6Ylly5Zh2bJlePvtt632vDdn7oOx8V9cXBxkMhluv/12bNmyhVkx2BFM7EeZDRs2YP/+/fjll19MGnQCAgKg1WrR3t5usro39tYPCAjo57LZ15+fcc4xMzY2FrGxsXjyySdRUVHBm7Vt2rQJiYmJWLlyJZYvX4633noLNTU1+OSTT6ye/OTk5ITQ0FCEhoZCq9VCqVRi586d+O9//wtnZ2dERETg+uuvF+Qzmjv3wZj09HTo9XpUVlZi+vTpbO6DvTDWSQN7geM4ctddd5FJkyaR0tLSfs/TBO2XX37JP1ZcXDxggraxsZF/zb///W/i7u5O1Gq17T/EBIfjOFJfX0+2bdtGFi9eTBwdHYmnpydZv349+eWXXwSpsun7Jzs7m4SFhZFVq1aRa6+9lnh6epLAwEBSXFw8Zt/Dxx9/TMRiMWltbSWE/Jmg1Wq1/GseffTRfgnaFStWmGxn1qxZLEE7gWBiP0qsX7+eeHh4kMOHD5uUwPX09PCvueOOO0hoaCg5dOgQOXXqFJk1axaZNWsW/zwtvVy0aBHJzs4m33//PfH19R209HLLli0EALn33nv5x3p7e8mdd95JvL29iYuLC7n88stNqnsIIaSqqoosW7aMODk5EV9fX/Lggw/avDxwNDEYDOTWW28loaGh5NVXXyVXXXUVcXNzIyEhIWT9+vXku+++Ix0dHVYLfWZmJgkMDCT33XcfMRgMhBBCtFot+emnn0yE1ZYcPXqUvPrqqyQ7O5uUl5eTjz/+mPj6+pJ169bxr2lvbyf+/v7kuuuuI/n5+eTzzz8nzs7O/UovHRwcyMsvv0yKiorIk08+yUovJxhM7EcJAAP++eCDD/jXUCH28vIizs7O5LLLLiP19fUm26msrCRLly4lTk5ORKFQkAceeGBAIT5x4gQJDw8ncXFxJmJv77X8hBDyyiuvkGnTppHq6mr+sZ6eHvL111+TG2+8kSgUCuLj40Ouu+468sUXX5Dm5mazhf7UqVMkICCAPPDAA7zQjwUZGRkkPT2deHh4EEdHRxIdHU2ef/75fneCOTk5ZO7cuUQul5OgoCCydevWftv64osvSGRkJJHJZCQmJoZ88803o/UxGALAxP48pKuri0ybNo389NNPZP78+bzYs1r+c6hUqn4XUWN0Oh35+eefyd13301CQ0OJq6srueyyy8j7779P6urqSHd395BCf/LkSeLn50ceeuihMRV6BsMYVmd/HnLXXXdh+fLl/eqiWS3/OZydnYdMLDo4OOCiiy7CG2+8gYqKChw6dAhRUVF4+eWXER4ejssuuwzvv/8+Ghsb+9koFBQUYNmyZbjpppuwdetWq6tuGAyhYNU45xmff/45MjMzcfLkyX7PsVp+8xGLxUhNTUVqaio2b96MkpIS7Nq1Cx999BHuu+8+pKenY8WKFVi1ahVUKhWWL1+O22+/Hc888wwTesa4gp2N5xFnz57Fvffei08++WRUZrHaGyKRCFFRUXjsscfwxx9/oKKiAldffTUOHDiA+Ph4zJ49G7fccgueffZZJvSMcQc7I88jMjIy0NTUhKSkJDg4OMDBwQFHjhzBG2+8AQcHB/j7+/O1/Mb0reUfruaacU746fzhAwcOoL6+Hps2bcLzzz9vEytmBsNamNifRyxYsAB5eXnIzs7m/6SkpGDt2rX8/0ulUhw8eJB/T0lJCaqrq/lRi7NmzUJeXh6ampr41/z0009wd3fHjBkzRv0zTQREIhF8fX2xefNmJvSMcQuL2Z9HuLm58V47FBcXF/j4+PCP33zzzdi4cSO8vb3h7u6Ou+++G7NmzcIFF1wAAFi0aBFmzJiB6667Di+++CIaGhrw+OOP46677mKt9QzGBIat7O2MV199FStWrMAVV1yBefPmISAgALt27eKfl0gk2L9/PyQSCWbNmoVrr70W69atwzPPPGOyndraWlx77bXw8fGBk5MTYmNjcerUKf55Qgj+8Y9/IDAwEE5OTli4cCHKyspMttHa2oq1a9fC3d0dnp6euPnmmy1yq2QwGCNgrGs/GROP1tZWEhYWRm644QZy/PhxcubMGfLDDz+Q06dP86/ZunUr8fDwIHv27CE5OTlk1apVJCIigvT29vKvWbJkCYmPjyd//PEH+fXXX8nUqVPJmjVrxuIjjTt+/vnnQRvxTpw4QQghpKKiYsDnac8E5YsvviDTp08ncrmczJw5kzVD2SlM7Blms2nTJjJ37txBn+c4jgQEBJCXXnqJf6y9vZ3I5XLy2WefEUIIKSwsJADIyZMn+dd89913RCQSkdraWtsd/ARBo9GY2GrU19eTW265hURERBCO4wghf4r9gQMHTF5nbMXAJkwxKCyMwzCbvXv3IiUlBVdddRX8/PyQmJiI9957j3++oqICDQ0NJs1bHh4eSE9PN2ne8vT0REpKCv+ahQsXQiwW4/jx46P3YcYpMpkMAQEB/B8fHx98/fXXuPHGG/slgX18fExeK5VK+edef/11LFmyBA899BCio6Px7LPPIikpCW+99dZofyTGGMPEnmE2Z86cwTvvvINp06bhhx9+wPr163HPPfdg+/btAP5svhpq2EVDQwP8/PxMnndwcIC3t7ddNm8Nx969e9HS0jLgcPtVq1bBz88Pc+fOxd69e02eYxOmGBRWjcMwG47jkJKSgueffx4AkJiYiPz8fGzbtk0wv3aGKf/973+xePFikxkIrq6ueOWVVzBnzhyIxWJ89dVXWL16Nfbs2YNVq1YBGLwjml1Q7Q+2smeYTWBgYL+a++joaFRXVwP4s/lqqGEXAQEBJrX8AKDX69Ha2npeN2898sgjEIlEQ/4pLi42eU9NTQ1++OEH3HzzzSaPKxQKbNy4Eenp6UhNTcXWrVtx7bXX4qWXXhrNj8SYILCVPcNs5syZg5KSEpPHSktLERYWBgCIiIhAQEAADh48iISEBABAZ2cnjh8/jvXr1wM417zV3t6OjIwMJCcnAwAOHToEjuOQnp4+eh9mlLFkwtQHH3wAHx8ffrU+FOnp6fjpp5/4v7MJUwyesc4QMyYeJ06cIA4ODmTz5s2krKyMfPLJJ8TZ2Zl8/PHH/Gu2bt1KPD09yddff01yc3PJpZdeOmDpZWJiIjl+/Dj57bffyLRp00xKL/V6PXn88cdJeHg4cXR0JJMnTybPPPMMX41CyLnKnyeeeIIEBAQQR0dHsmDBgn6TwFpaWsg111xD3NzciIeHB7nppptIV1eXDb8h4eA4jkRERJAHHnhgRK+/5ZZbSGJiIv93NmGKQWFiz7CIffv2kZkzZxK5XE6ioqLIu+++a/I8FWF/f38il8vJggULSElJiclrWlpayJo1a4irqytxd3cnN954o4kIb968mfj4+JD9+/eTiooKsnPnTuLq6kpef/11/jXnez3/gQMHCABSVFTU77kPP/yQfPrpp6SoqIgUFRWRzZs3E7FYTN5//33+NWzCFIPCxJ4xblm+fDm56aabTB67/PLLydq1awkh9lHPv2bNGpNJYsZ8+OGHJDo6mjg7OxN3d3eSlpZmMpiGwiZMMQhhYs8Yx2zevJmEhYXxdwTZ2dnEz8+PDxeVl5cTACQrK8vkffPmzSP33HMPIYSQ//73v8TT09PkeZ1ORyQSCdm1a5ftPwSDMU5gCVrGuOWRRx5BZ2cnoqKiIJFIYDAYsHnzZqxduxYAq+dnMMyBiT1j3PLFF1/gk08+waeffoqYmBhkZ2fjvvvuw6RJk1g9P4NhJkzsGeOWhx56CI888giuvvpqAEBsbCyqqqqwZcsWXH/99Sb1/IGBgfz7Ghsb+ZJPe63nZzD6wpqqGOOWnp6efuP9JBIJOI4DYFrPT6H1/MbDWGg9P8Ue6vkZjL6wlT1j3LJy5Ups3rwZoaGhiImJQVZWFv75z3/ipptuAnBuQtR9992H5557DtOmTUNERASeeOIJTJo0CatXrwZwrrN3yZIluPXWW7Ft2zbodDps2LABV199NSZNmjSGn47BGGXGOkPMYAxGZ2cnuffee0loaCjfVPX3v/+daDQa/jVC1PMzGPaAiBBCxvqCw2AwGAzbwmL2DAaDYQcwsWcwGAw7gIk9g8Fg2AFM7BkMBsMOYGLPYDAYdgATewaDwbADmNgzGAyGHcDEnsFgMOwAJvYMBoNhBzCxZzAYDDuAiT2DwWDYAUzsGQwGww5gYs9gMBh2ABN7BoPBsAOY2DMYDIYdwMSewWAw7AAm9gwGg2EHMLFnMBgMO4CJPYPBYNgBTOwZDAbDDmBiz2AwGHYAE3sGg8GwA5jYMxgMhh3AxJ7BYDDsACb2DAaDYQcwsWcwGAw7gIk9g8Fg2AFM7BkMBsMOYGLPYDAYdgATewaDwbADmNgzGAyGHcDEnsFgMOwAJvYMBoNhBzCxZzAYDDuAiT2DwWDYAUzsGQwGww5gYs9gMBh2ABN7BoPBsAOY2DMYDIYdwMSewWAw7AAm9gwGg2EH/D/CGT6fBvF3fwAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Create a MoorPy system (this loads the moordyn outputs found in /_#.out, where is either Line or Rod and # is the corresponding number). File is required for MoorPy to know the mooring system parameters. \n", + "ms = moorpy.System(file=\"body.txt\", dirname=\"./\", rootname=\"body\", qs = 0, Fortran = False) # qs tells MoorPy it is loading a MoorDyn system, Fortran = False tells it to use the MoorDyn-C output format\n", + "\n", + "# Plot the results at t = 0 in red\n", + "ms.plot(color=\"red\", time = 0)" + ] + }, + { + "cell_type": "markdown", + "id": "a20bf7", + "metadata": { + "collapsed": false + }, + "source": [ + "# Closing Notes\n", + "\n", + "The process for running MoorDyn as described here is the same internals that OpenFAST and WEC-Sim both use when running coupled with MoorDyn. \n", + "At each timestep, the forces returned by MoorDyn are passed into these codes and used to determine the new position of the device which is \n", + "passed back to MoorDyn. In those codes, all you need to do is provide the MoorDyn input files and enable the relevant flags. The coupling is \n", + "all handled internally. \n", + "\n", + "MoorDyn is always looking for new projects to engage with. Couplings are underway with Chrono and Hydrochrono as well as numerous commercial codes. Any \n", + "new collaboration would be more than welcome!" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "base", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.8" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/example/PtfmMotions.dat b/example/PtfmMotions.dat new file mode 100644 index 00000000..9ba84fd9 --- /dev/null +++ b/example/PtfmMotions.dat @@ -0,0 +1,3 @@ +# Time Surge Sway Heave Roll Pitch Yaw +0.0 0 0 0 0 0 0 +0.5 0.25 0 0 0 0 0 \ No newline at end of file diff --git a/example/README.md b/example/README.md new file mode 100644 index 00000000..9e3e0c54 --- /dev/null +++ b/example/README.md @@ -0,0 +1,13 @@ +This example directory contains instructions for common uses of MoorDyn, including OpenFAST, WEC-Sim, and running standalone. + +Before working with these examples, please look at the [MoorDyn documentation](https://moordyn.readthedocs.io/en/latest/drivers.html#python) for an explanation of the code and the different versions (MoorDyn-C and MoorDyn-F). After that, start out with working through the jupyter notebook (`MoorDyn_standalone_demo.ipynb`). This will walk through basic examples for running MoorDyn and visualizing outputs. Visualization is done with MoorPy, however Paraview can also be used as well as the tool [PyDatView](https://github.com/ebranlard/pyDatView). + +Much of this directory was presented during Software Demo Days. A link to that presentation can be found here: https://www.youtube.com/watch?v=FqW7Xpl_VNk + +Further examples are the following: + +- `MHK_RM1_Floating`: This directory shows how to run MoorDyn-F with OpenFAST. +- `MoorDynF_example`: This directory shows how to use the MoorDyn-F driver from OpenFAST. +- `simpledemo.py`: This is the simplest example of how to run MoorDyn-C with a python script. +- `Running MoorDyn-F (OpenFAST).pdf`: This is a step-by-step list of instructions for running MoorDyn-F with OpenFAST. +- `Running WECSim with MoorDyn.pdf`: This is a step-by-step list of instructions for running MoorDyn-C with WECSim. \ No newline at end of file diff --git a/example/Running MoorDyn-F (OpenFAST).md b/example/Running MoorDyn-F (OpenFAST).md new file mode 100644 index 00000000..59ef928e --- /dev/null +++ b/example/Running MoorDyn-F (OpenFAST).md @@ -0,0 +1,50 @@ + + +# OpenFAST and MoorDyn-F + +MoorDyn-F is the core mooring dynamics module in OpenFAST. It is structured to seamlessly fit into the OpenFAST code structure, and thus is less suitable for external couplings than MoorDyn-C. The steps for running MoorDyn with OpenFAST and FAST.Farm are very similar to running any of the other OpenFAST modules. First, enable the module in the main input file, then provide the path to the module input file, and then configure the module input file for your simulation. Finally, run your simulation. + +## Running OpenFAST with MoorDyn-F + +See the instructions in the `Running OpenFAST.pdf` from the OpenFAST co-calc demonstration for details on setting up OpenFAST more broadly. Additional OpenFAST information can be found in the [OpenFAST documentation](https://openfast.readthedocs.io/en/main/). The general steps for running OpenFAST with MoorDyn-F are as follows: + +- Obtain the OpenFAST executables + - Compile from source code + - Download executables from [GitHub releases](https://github.com/OpenFAST/openfast/releases) +- Configure the OpenFAST input files for your system + - Set `CompMooring = 3` in the main OpenFAST `.fst` input file + - Set the `MooringFile` variable in the main OpenFAST `.fst` input file to the MoorDyn input file path +- Configure the MoorDyn input file for your system + - Note that coupled MoorDyn objects (bodies, rods, and points) are rigidly attached to the ElastoDyn object instance +- Execute `openfast .fst` + +## Running MoorDyn-F with the MoorDyn Driver + +The MoorDyn driver allows for MoorDyn-F to be run as a stand-alone module, enabling debugging of OpenFAST simulations and MoorDyn-only simulations. To run the driver, an additional input file is required that fills in the information normally provided to MoorDyn by the OpenFAST input file. Information on this file can be found in the [MoorDyn documentation](https://moordyn.readthedocs.io/en/latest/inputs.html#moordyn-f-driver-input-file). The general steps for running MoorDyn-F with the MoorDyn driver are as follows: + +- Obtain the driver executable + - Compile from source code + - Download executable from [GitHub releases](https://github.com/OpenFAST/openfast/releases) +- Configure the MoorDyn driver input file `.dvr` following the formatting described in the [MoorDyn documentation](https://moordyn.readthedocs.io/en/latest/inputs.html#moordyn-f-driver-input-file). + - A time series input file is needed for providing motion to coupled MoorDyn objects. The path to this input file is set as the `InputsFile` variable in the MoorDyn driver input file (note that if `InputsMode = 0` all coupled objects positions will be fixed at 0 and the time series file will be ignored) +- Configure the MoorDyn input file + - Coupled objects will be driven by a time series file provided in the driver input file +- Execute `moordyn_driver .dvr` + +## Running FAST.Farm with MoorDyn-F + +FAST.Farm, the wind farm simulation tool built on OpenFAST, can also be run with MoorDyn. More information on FAST.Farm can be found in the [OpenFAST documentation](https://openfast.readthedocs.io/en/main/source/user/fast.farm/index.html#fast-farm-user-s-guide-and-theory-manual). FAST.Farm runs an OpenFAST instance for each turbine in the farm and thus can have a MoorDyn instance for each turbine. Additionally, there can be a farm level MoorDyn instance, which allows for the simulation of shared mooring lines. Instructions for using MoorDyn with FAST.Farm can be found in the [MoorDyn documentation](https://moordyn.readthedocs.io/en/latest/inputs.html#moordyn-f-with-fast-farm-inputs). The general steps for running FAST.Farm with MoorDyn-F are as follows: + +- Obtain the FAST.Farm executables + - Compile from source code + - Download executable from [GitHub releases](https://github.com/OpenFAST/openfast/releases) +- Configure the FAST.Farm input files for your system + - `Mod_SharedMooring = 3` in the main FAST.Farm `.fstf` input file + - Set the `SharedMoorFile` variable in the main FAST.Farm `.fstf` input file to the MoorDyn input file path +- For each turbine in your system, configure the OpenFAST input files for your system + - If using MoorDyn at the turbine scale as well, set `CompMooring = 3` in the main OpenFAST `.fst` input file for each turbine. Otherwise set `CompMooring = 0` + - Set the `MooringFile` variable in the main OpenFAST `.fst` input file to the MoorDyn input file path if using the turbine level MoorDyn instance +- Configure the MoorDyn input files + - At the turbine level, coupled MoorDyn objects (bodies, rods, and points) are rigidly attached to the ElastoDyn object instance + - At the farm level MoorDyn instance, the object attachment `Turbine#` is rigidly coupled to the ElastoDyn instance of the given turbine. Coupled objects are not allowed in the farm level MoorDyn input file. +- Execute `fast.farm .fstf` diff --git a/example/Running WECSim with MoorDyn.md b/example/Running WECSim with MoorDyn.md new file mode 100644 index 00000000..544b3f2f --- /dev/null +++ b/example/Running WECSim with MoorDyn.md @@ -0,0 +1,21 @@ + + +# Running WEC-Sim with MoorDyn + +Instructions for running WEC-Sim with MoorDyn can be found in the README for the [WEC-Sim/MoorDyn repository](https://github.com/WEC-Sim/MoorDyn/blob/main/README.md). A short summary of those steps is detailed here: + +1. Obtain the MoorDyn libraries, header files, and the MoorDyn caller + - Download from the [WEC-Sim/MoorDyn repository](https://github.com/WEC-Sim/MoorDyn/blob/main/README.md) + - Compile MoorDyn-C from source following the [instructions in the documentation](https://moordyn.readthedocs.io/en/latest/compiling.html) + - This is only needed if libraries from the [WEC-Sim/MoorDyn repository](https://github.com/WEC-Sim/MoorDyn/blob/main/README.md) do not work +2. Move the MoorDyn libraries, `.h` header files, and MoorDyn caller (all the files in the [WEC-Sim/MoorDyn repository](https://github.com/WEC-Sim/MoorDyn/blob/main/README.md)) from step 1 to the `WEC-Sim/source/functions/moorDyn` directory. + - To test the WEC-Sim MoorDyn setup, run the [WEC-Sim_Application/Mooring/MoorDyn example case](https://github.com/WEC-Sim/WEC-Sim_Applications/tree/main/Mooring/MoorDyn). +3. Configure the MoorDyn input file for your system. + - Note that WEC-Sim requires a rigid 6 DOF body coupling for each mooring connection (a coupled MoorDyn body). Multiple bodies can be coupled to the WEC-Sim system, allowing the simulation of shared moorings for hydrokinetic devices. +4. Configure the WEC-Sim Simulink model + - For each MoorDyn connection (a connection can consist of multiple lines and nodes but is between two distinct objects such as a floating body and the seafloor), there should be a MoorDyn Connection block in the Simulink model defining the relative motion between the objects. + - When using MoorDyn, there should always be exactly one MoorDyn Caller block in the Simulink model. See [WEC-Sim MoorDyn docs](https://wec-sim.github.io/WEC-Sim/dev/user/advanced_features.html#moordyn) for more details. +5. Configure the WEC-Sim input file + - For each MoorDyn block in your system, you need to have a corresponding `mooring(i)` object, where `i` is the ID number of the body in the MoorDyn input file. Instructions for how to set up the mooring object are in the [WEC-Sim MoorDyn docs](https://wec-sim.github.io/WEC-Sim/dev/user/advanced_features.html#moordyn). + - The MoorDyn input file needs to be defined as `mooring(1).moorDynInputFile`, as WEC-Sim uses the file path defined in the first Mooring block to load the MoorDyn input file. +6. Run the simulation by executing `wecSim` from the command window. diff --git a/example/body.txt b/example/body.txt new file mode 100644 index 00000000..a10173eb --- /dev/null +++ b/example/body.txt @@ -0,0 +1,42 @@ +--------------------- MoorDyn Input File ------------------------------------ +MoorDyn input file of the mooring system for OC3-Hywind +----------------------- LINE TYPES ------------------------------------------ +TypeName Diam Mass/m EA BA/-zeta EI Cd Ca CdAx CaAx +(name) (m) (kg/m) (N) (N-s/-) (N-m^2) (-) (-) (-) (-) +main 0.09 77.7066 384.243E6 -0.8 0 1.6 1.0 0.1 0.0 +----------------------- BODIES ------------------------------------------------------ +ID Attachment X0 Y0 Z0 r0 p0 y0 Mass CG* I* Volume CdA* Ca* +(#) (-) (m) (m) (m) (deg) (deg) (deg) (kg) (m) (kg-m^2) (m^3) (m^2) (-) +1 Coupled 0 0 -70 0 0 0 0 0 0 0 0 0 +---------------------- POINT PROPERTIES -------------------------------- +ID Type X Y Z Mass Volume CdA Ca +(#) (-) (m) (m) (m) (kg) (mˆ3) (m^2) (-) +1 Fixed 853.87 0 -320.0 0 0 0 0 +2 Fixed -426.94 739.47 -320.0 0 0 0 0 +3 Fixed -426.94 -739.47 -320.0 0 0 0 0 +4 Body1 5.2 0.0 0.0 0 0 0 0 +5 Body1 -2.6 4.5 0.0 0 0 0 0 +6 Body1 -2.6 -4.5 0.0 0 0 0 0 +---------------------- LINES ---------------------------------------- +ID LineType AttachA AttachB UnstrLen NumSegs LineOutputs +(#) (name) (#) (#) (m) (-) (-) +1 main 1 4 902.2 20 p +2 main 2 5 902.2 20 p +3 main 3 6 902.2 20 p +---------------------- OPTIONS ----------------------------------------- +2 writeLog Write a log file +0.002 dtM time step to use in mooring integration (s) +3.0e6 kBot bottom stiffness (Pa/m) +3.0e5 cBot bottom damping (Pa-s/m) +1025.0 WtrDnsty water density (kg/m^3) +320 WtrDpth water depth (m) +1.0 dtIC time interval for analyzing convergence during IC gen (s) +100.0 TmaxIC max time for ic gen (s) +4.0 CdScaleIC factor by which to scale drag coefficients during dynamic relaxation (-) +0.001 threshIC threshold for IC convergence (-) +1 disableOutTime +---------------------- OUTPUTS ----------------------------------------- +FairTen1 +FairTen2 +FairTen3 +------------------------- need this line -------------------------------------- diff --git a/example/jonkman_2010_3-1.png b/example/jonkman_2010_3-1.png new file mode 100644 index 00000000..1b27f8c5 Binary files /dev/null and b/example/jonkman_2010_3-1.png differ diff --git a/example/lines.txt b/example/lines.txt new file mode 100644 index 00000000..dc1c1943 --- /dev/null +++ b/example/lines.txt @@ -0,0 +1,38 @@ +--------------------- MoorDyn Input File ------------------------------------ +MoorDyn input file of the mooring system for OC3-Hywind +----------------------- LINE TYPES ------------------------------------------ +TypeName Diam Mass/m EA BA/-zeta EI Cd Ca CdAx CaAx +(name) (m) (kg/m) (N) (N-s/-) (N-m^2) (-) (-) (-) (-) +main 0.09 77.7066 384.243E6 -0.8 0 1.6 1.0 0.1 0.0 +---------------------- POINT PROPERTIES -------------------------------- +ID Type X Y Z Mass Volume CdA Ca +(#) (-) (m) (m) (m) (kg) (mˆ3) (m^2) (-) +1 Fixed 853.87 0 -320.0 0 0 0 0 +2 Fixed -426.94 739.47 -320.0 0 0 0 0 +3 Fixed -426.94 -739.47 -320.0 0 0 0 0 +4 Coupled 5.2 0.0 -70.0 0 0 0 0 +5 Coupled -2.6 4.5 -70.0 0 0 0 0 +6 Coupled -2.6 -4.5 -70.0 0 0 0 0 +---------------------- LINES ---------------------------------------- +ID LineType AttachA AttachB UnstrLen NumSegs LineOutputs +(#) (name) (#) (#) (m) (-) (-) +1 main 1 4 902.2 20 p +2 main 2 5 902.2 20 p +3 main 3 6 902.2 20 p +---------------------- OPTIONS ----------------------------------------- +2 writeLog Write a log file +0.002 dtM time step to use in mooring integration (s) +3.0e6 kBot bottom stiffness (Pa/m) +3.0e5 cBot bottom damping (Pa-s/m) +1025.0 WtrDnsty water density (kg/m^3) +320 WtrDpth water depth (m) +1.0 dtIC time interval for analyzing convergence during IC gen (s) +100.0 TmaxIC max time for ic gen (s) +4.0 CdScaleIC factor by which to scale drag coefficients during dynamic relaxation (-) +0.001 threshIC threshold for IC convergence (-) +1 disableOutTime +---------------------- OUTPUTS ----------------------------------------- +FairTen1 +FairTen2 +FairTen3 +------------------------- need this line -------------------------------------- \ No newline at end of file diff --git a/example/md_driver.dvr b/example/md_driver.dvr new file mode 100644 index 00000000..5020a479 --- /dev/null +++ b/example/md_driver.dvr @@ -0,0 +1,19 @@ +MoorDyn driver input file +another comment line +---------------------- ENVIRONMENTAL CONDITIONS ------------------------------- +9.80665 Gravity - Gravity (m/s^2) +1025.0 rhoW - Water density (kg/m^3) +10.0 WtrDpth - Water depth (m) +---------------------- MOORDYN ------------------------------------------------ +"../body.txt" MDInputFile - Primary MoorDyn input file name (quoted string) +"body" OutRootName - The name which prefixes all MoorDyn generated files (quoted string) +0.5 TMax - Number of time steps in the simulations (-) +0.5 dtC - TimeInterval for the simulation (sec) +0 InputsMode - MoorDyn coupled object inputs (0: all inputs are zero for every timestep (no coupled objects), 1: time-series inputs (coupled objects)) (switch) +"PtfmMotions.dat" InputsFile - Filename for the MoorDyn inputs file for when InputsMod = 1 (quoted string) +0 NumTurbines - Number of wind turbines (-) [>=1 to use FAST.Farm mode. 0 to use OpenFAST mode.] +---------------------- Initial Positions -------------------------------------- +ref_X ref_Y surge_init sway_init heave_init roll_init pitch_init yaw_init +(m) (m) (m) (m) (m) (rad) (rad) (rad) [followed by MAX(1,NumTurbines) rows of data] +0 0 0 0 0 0 0 0 +END of driver input file \ No newline at end of file diff --git a/example/simpledemo.py b/example/simpledemo.py new file mode 100644 index 00000000..ffaef8ee --- /dev/null +++ b/example/simpledemo.py @@ -0,0 +1,130 @@ +import moordyn +import numpy as np + +### OPTIONAL ### +# import matplotlib.pyplot as plt +# import moorpy + +''' +This is a very simple example of how to use the MoorDyn Python interface. Users need to provide a moordyn input file before running. +This code is ready to run if a user provides an input file with a single coupled body. A more thorough explanation of how to drive +MoorDyn can be found in `MoorDyn_standalone_demo.ipynb`. + +The framework here is set up for a single coupled body. For other configurations, the state (x) and state derivatives (xd) need to be +changed accordingly. +''' + +def sin (period = 150, A = 10, axis = 0, dof = 6, x_initial = np.array([0, 0, 0, 0, 0, 0]), vector_size = 6, time = np.array([0])): + ''' + A function that provides time series of states and state variables for simulating sinusoidal motion of a 6 DOF body in one of + the DOFs. + + Inputs + ------ + `period` : `float` + The period of the sinusoidal motion. + `A` : `float` + The amplitude of the sinusoidal motion. + `axis` : `int` + The axis along which the motion occurs (0 -> x, 1 -> y, 2 -> z, 3 -> roll, 4 -> pitch, 5 -> yaw). + `dof` : `int` + The degrees of freedom of the system. + `x_initial` : `np.array` + The initial state of the system. + `vector_size` : `int` + The size of the state vector. This should be equal to `DOF * the number of objects`. For example, 3 coupled points would have `DOF = 3` and `vector_size = 9`. + `time` : `np.array` + The time array for the simulation. + + Outputs + ------- + `xp` : `np.array` + The position time series of the system. + `xdp` : `np.array` + The velocity time series of the system. + ''' + + # axis 0 -> x, 1 -> y, 2 -> z, 3 -> roll, 4 -> pitch, 5 -> yaw + xp = np.zeros((len(time),6)) + + # Time info + dt = time[1] - time[0] + + # Wave properties + T = period / dt + omega = (2*np.pi)/T + + for i in range(len(time)): + xp[i,axis] = A * np.sin(i*omega) + + xdp = np.zeros((len(time),6)) + xold = np.zeros(6) + # calculate velocities using finite difference + for i in range(len(time)): + xdp [i] = (xp[i] - xold)/dt + xold = xp[i] + for i in range(len(time)): + if i == 0: + x[i,:] = x_initial + else: + j = 0 + while j < vector_size: + x[i,j:j+dof] = x[i-1,j:j+dof] + xdp[i, 0:dof] * dt + xd[i,j:j+dof] = xdp[i, 0:dof] + j += dof + + return x, xd + +# Create time array +tMax = 0.5 # max time for running time series +dt = 0.001 # coupling timestep +time = np.arange(0, tMax, dt) # time series + +# Build arrays of state and state derivatives +size = (len(time), 6) +x = np.zeros(size) +xd = np.zeros(size) + +# Create the MoorDyn system from the input file. +# NOTE TO USERS: +# Change this to your own input file. +# It must have one coupled body and no other coupled objects. +system = moordyn.Create("") + +# You can get the initial positions and velocities from the system itself using the MoorDyn-C API +body = moordyn.GetBody(system, 1) +state = moordyn.GetBodyState(body) # tuple with (x, xd) + +# Set the first time step of the state and state derivatives to the initial values from MoorDyn +x[0,:] = np.array(state[0]) # x, y, z, roll, pitch, yaw +xd[0,:] = np.array(state[1]) # xdot, ydot, zdot, roll_dot, pitch_dot, yaw_dot + +# Setup the initial condition +moordyn.Init(system, x[0,:], xd[0,:]) + +# Get the state and state derivative time series +x_t, xd_t = sin(period = 5, A = 1, axis = 0, dof = 6, x_initial = x[0,:], vector_size = 6, time = time) + +# Run the simulation for five timesteps +for i in range(1, len(time)): + # call the MoorDyn step function + f = moordyn.Step(system, x_t[i,:], xd_t[i,:], time[i], dt) # force value on coupled DOF returned here in array + +# Alright, time to finish! +moordyn.Close(system) + + +### Optional ### + +# # Plot and animate the results using MoorPy + +# # Create a MoorPy system (this loads the moordyn outputs found in /_#.out, where is either Line or Rod and # is the corresponding number) +# ms = moorpy.System(file=, dirname=, rootname=, qs = 0, Fortran = False) # qs tells MoorPy it is loading a MoorDyn system, Fortran = False tells it to use the MoorDyn-C output format + +# # Plot the results at t = 0 in red +# ms.plot(color="red", time = 0) + +# # animate the results +# animation = ms.animateLines() + +# plt.show() \ No newline at end of file diff --git a/source/IO.cpp b/source/IO.cpp index d0a5189e..4b42ac7f 100644 --- a/source/IO.cpp +++ b/source/IO.cpp @@ -199,11 +199,6 @@ IO::IO(moordyn::Log* log) , _min_minor_version(4) { _is_big_endian = is_big_endian(); - if (_min_major_version <= MOORDYN_MAJOR_VERSION) { - _min_major_version = MOORDYN_MAJOR_VERSION; - if (_min_minor_version <= MOORDYN_MINOR_VERSION) - _min_minor_version = MOORDYN_MINOR_VERSION; - } } void @@ -283,11 +278,17 @@ IO::LoadFile(const std::string filepath) const uint8_t major, minor; f.read((char*)&major, sizeof(uint8_t)); f.read((char*)&minor, sizeof(uint8_t)); + std::cout << major << std::endl; + std::cout << minor << std::endl; + std::cout << _min_major_version << std::endl; + std::cout << _min_minor_version << std::endl; + std::cout << "number=" << 7 << std::endl; if ((major < _min_major_version) || ((major == _min_major_version) && (minor < _min_minor_version))) { LOGERR << "The file '" << filepath << "' was written by MoorDyn " - << major << "." << minor << ", but >= " << _min_major_version - << "." << _min_minor_version << " is required" << endl; + << (int)major << "." << (int)minor << ", but >= " + << (int)_min_major_version << "." << (int)_min_minor_version + << " is required" << endl; throw moordyn::input_file_error("Invalid file"); } // Check that the amount of information is correct diff --git a/source/Line.cpp b/source/Line.cpp index 2e738d0f..cc766b93 100644 --- a/source/Line.cpp +++ b/source/Line.cpp @@ -35,6 +35,7 @@ #include "Util/Interp.hpp" #include // #include +#include #ifdef USE_VTK #include "Util/VTK_Util.hpp" @@ -46,6 +47,10 @@ #include #endif +// Formating constants for line files outputs (iomanip) +constexpr int WIDTH = 20; // Width for output +constexpr int PRECISION = 7; // Precision for output + using namespace std; namespace moordyn { @@ -147,7 +152,7 @@ Line::setup(int number_in, d = props->d; A = pi / 4. * d * d; rho = props->w / A; - ElasticMod = props->ElasticMod; + ElasticMod = (elastic_model)props->ElasticMod; EA = props->EA; EA_D = props->EA_D; alphaMBL = props->alphaMBL; @@ -237,7 +242,7 @@ Line::setup(int number_in, // segments) (1 = fully submerged, 0 = out of water) // viscoelastic things - if (ElasticMod > 1) { + if (ElasticMod != ELASTIC_CONSTANT) { dl_1.assign( N, 0.0); // segment stretch attributed to static stiffness portion [m] @@ -302,80 +307,87 @@ Line::initialize() // 1st line with the fields // output time - *outfile << "Time" - << "\t "; + *outfile << setw(10) << right + << "Time"; // output positions if (channels.find("p") != string::npos) { for (unsigned int i = 0; i <= N; i++) { - *outfile << "Node" << i << "px \t Node" << i << "py \t Node" - << i << "pz \t "; + *outfile << setw(WIDTH) << right << ("Node" + to_string((int)i) + "px") + << setw(WIDTH) << right << ("Node" + to_string((int)i) + "py") + << setw(WIDTH) << right << ("Node" + to_string((int)i) + "pz"); } } // output curvatures if (channels.find("K") != string::npos) { for (unsigned int i = 0; i <= N; i++) { - *outfile << "Node" << i << "Ku \t "; + *outfile << setw(WIDTH) << right << ("Node" + to_string((int)i) + "Ku"); } } // output velocities if (channels.find("v") != string::npos) { for (unsigned int i = 0; i <= N; i++) { - *outfile << "Node" << i << "vx \t Node" << i << "vy \t Node" - << i << "vz \t "; + *outfile << setw(WIDTH) << right << ("Node" + to_string((int)i) + "vx") + << setw(WIDTH) << right << ("Node" + to_string((int)i) + "vy") + << setw(WIDTH) << right << ("Node" + to_string((int)i) + "vz"); } } // output wave velocities if (channels.find("U") != string::npos) { for (unsigned int i = 0; i <= N; i++) { - *outfile << "Node" << i << "Ux \t Node" << i << "Uy \t Node" - << i << "Uz \t "; + *outfile << setw(WIDTH) << right << ("Node" + to_string((int)i) + "Ux") + << setw(WIDTH) << right << ("Node" + to_string((int)i) + "Uy") + << setw(WIDTH) << right << ("Node" + to_string((int)i) + "Uz"); } } // output hydro force if (channels.find("D") != string::npos) { for (unsigned int i = 0; i <= N; i++) { - *outfile << "Node" << i << "Dx \t Node" << i << "Dy \t Node" - << i << "Dz \t "; + *outfile << setw(WIDTH) << right << ("Node" + to_string((int)i) + "Dx") + << setw(WIDTH) << right << ("Node" + to_string((int)i) + "Dy") + << setw(WIDTH) << right << ("Node" + to_string((int)i) + "Dz"); } } // output VIV lift force if (channels.find("V") != string::npos) { for (unsigned int i = 0; i <= N; i++) { - *outfile << "Node" << i << "Vx \t Node" << i << "Vy \t Node" - << i << "Vz \t "; + *outfile << setw(WIDTH) << right << ("Node" + to_string((int)i) + "Vx") + << setw(WIDTH) << right << ("Node" + to_string((int)i) + "Vy") + << setw(WIDTH) << right << ("Node" + to_string((int)i) + "Vz"); } } // output segment tensions if (channels.find("t") != string::npos) { for (unsigned int i = 1; i <= N; i++) { - *outfile << "Seg" << i << "Te \t "; + *outfile << setw(WIDTH) << right << ("Seg" + to_string((int)i) + "Te"); } } // output internal damping force if (channels.find("c") != string::npos) { for (unsigned int i = 1; i <= N; i++) { - *outfile << "Seg" << i << "cx \t Seg" << i << "cy \t Seg" << i - << "cz \t "; + *outfile << setw(WIDTH) << right << ("Seg" + to_string((int)i) + "cx") + << setw(WIDTH) << right << ("Seg" + to_string((int)i) + "cy") + << setw(WIDTH) << right << ("Seg" + to_string((int)i) + "cz"); } } // output segment strains if (channels.find("s") != string::npos) { for (unsigned int i = 1; i <= N; i++) { - *outfile << "Seg" << i << "St \t "; + *outfile << setw(WIDTH) << right << ("Seg" + to_string((int)i) + "St"); } } // output segment strain rates if (channels.find("d") != string::npos) { for (unsigned int i = 1; i <= N; i++) { - *outfile << "Seg" << i << "dSt \t "; + *outfile << setw(WIDTH) << right << ("Seg" + to_string((int)i) + "dSt"); } } // output seabed contact forces if (channels.find("b") != string::npos) { for (unsigned int i = 0; i <= N; i++) { - *outfile << "Node" << i << "bx \t Node" << i << "by \t Node" - << i << "bz \t "; + *outfile << setw(WIDTH) << right << ("Node" + to_string((int)i) + "bx") + << setw(WIDTH) << right << ("Node" + to_string((int)i) + "by") + << setw(WIDTH) << right << ("Node" + to_string((int)i) + "bz"); } } @@ -385,64 +397,75 @@ Line::initialize() // 2nd line with the units // output time - *outfile << "(s)" - << "\t "; + *outfile << setw(10) << right + << "(s)"; // output positions if (channels.find("p") != string::npos) { for (unsigned int i = 0; i <= 3 * N + 2; i++) - *outfile << "(m) \t"; + *outfile << setw(WIDTH) << right + << "(m)"; } // output curvatures? if (channels.find("K") != string::npos) { for (unsigned int i = 0; i <= N; i++) { - *outfile << "(1/m) \t "; + *outfile << setw(WIDTH) << right + << "(1/m)"; } } // output velocities? if (channels.find("v") != string::npos) { for (unsigned int i = 0; i <= 3 * N + 2; i++) - *outfile << "(m/s) \t"; + *outfile << setw(WIDTH) << right + << "(m/s)"; } // output wave velocities? if (channels.find("U") != string::npos) { for (unsigned int i = 0; i <= 3 * N + 2; i++) - *outfile << "(m/s) \t"; + *outfile << setw(WIDTH) << right + << "(m/s)"; } // output hydro force if (channels.find("D") != string::npos) { for (unsigned int i = 0; i <= 3 * N + 2; i++) - *outfile << "(N) \t"; + *outfile << setw(WIDTH) << right + << "(N)"; } // output VIV force if (channels.find("V") != string::npos) { for (unsigned int i = 0; i <= 3 * N + 2; i++) - *outfile << "(N) \t"; + *outfile << setw(WIDTH) << right + << "(N)"; } // output segment tensions? if (channels.find("t") != string::npos) { for (unsigned int i = 0; i < N; i++) - *outfile << "(N) \t"; + *outfile << setw(WIDTH) << right + << "(N)"; } // output internal damping force? if (channels.find("c") != string::npos) { for (unsigned int i = 0; i < 3 * N; i++) - *outfile << "(N) \t"; + *outfile << setw(WIDTH) << right + << "(N)"; } // output segment strains? if (channels.find("s") != string::npos) { for (unsigned int i = 0; i < N; i++) - *outfile << "(-) \t"; + *outfile << setw(WIDTH) << right + << "(-)"; } // output segment strain rates? if (channels.find("d") != string::npos) { for (unsigned int i = 0; i < N; i++) - *outfile << "(-/s) \t"; + *outfile << setw(WIDTH) << right + << "(-/s)"; } // output seabed contact force? if (channels.find("b") != string::npos) { for (unsigned int i = 0; i <= 3 * N + 2; i++) - *outfile << "(N) \t"; + *outfile << setw(WIDTH) << right + << "(N)"; } *outfile << "\n"; @@ -592,7 +615,7 @@ Line::initialize() // the segment. This is required here to initalize the state as non-zero, // which avoids an initial transient where the segment goes from unstretched // to stretched in one time step. - if (ElasticMod > 1) { + if (ElasticMod != ELASTIC_CONSTANT) { for (unsigned int i = 0; i < N; i++) { lstr[i] = unitvector(qs[i], r[i], r[i + 1]); dl_1[i] = lstr[i] - l[i]; // delta l of the segment @@ -767,24 +790,24 @@ Line::setState(const InstanceStateVarView state) // Error check for number of columns (if VIV and Visco need row.size() = 8, // if VIV xor Visco need row.size() = 7, if not VIV need row.size() = 6) - if ((state.row(0).size() != 8 && Cl > 0 && ElasticMod > 1) || - (state.row(0).size() != 7 && ((Cl > 0) ^ (ElasticMod > 1))) || - (state.row(0).size() != 6 && Cl == 0 && ElasticMod == 1)) { + if ((state.row(0).size() != 8 && Cl > 0 && ElasticMod != ELASTIC_CONSTANT) || + (state.row(0).size() != 7 && ((Cl > 0) ^ (ElasticMod != ELASTIC_CONSTANT))) || + (state.row(0).size() != 6 && Cl == 0 && ElasticMod == ELASTIC_CONSTANT)) { LOGERR << "Invalid state.row size for Line " << number << endl; throw moordyn::mem_error("Invalid state.row size"); } // Error check for number of rows (if visco need N rows, if normal need N-1 // rows) - if ((state.rows() != N && ElasticMod > 1) || - (state.rows() != N - 1 && ElasticMod == 1)) { + if ((state.rows() != N && ElasticMod != ELASTIC_CONSTANT) || + (state.rows() != N - 1 && ElasticMod == ELASTIC_CONSTANT)) { LOGERR << "Invalid number of rows in state matrix for Line " << number << endl; throw moordyn::mem_error("Invalid number of rows in state matrix"); } // If using the viscoelastic model, interate N rows, else iterate N-1 rows. - for (unsigned int i = 0; i < (ElasticMod > 1 ? N : N - 1); i++) { + for (unsigned int i = 0; i < (ElasticMod != ELASTIC_CONSTANT ? N : N - 1); i++) { // node number is i+1 // segment number is i if (i < N - 1) { // only assign the internal nodes @@ -792,7 +815,7 @@ Line::setState(const InstanceStateVarView state) rd[i + 1] = state.row(i).segment<3>(3); } - if (ElasticMod > 1) + if (ElasticMod != ELASTIC_CONSTANT) dl_1[i] = state.row(i) .tail<1>()[0]; // [0] needed becasue tail<1> returns a one @@ -803,7 +826,7 @@ Line::setState(const InstanceStateVarView state) !(IC_gen)) { // not needed in IC_gen. Initializes as distribution on // 0-2pi. State is initialized by init function in this // code, which sets phi to range 0-2pi - if (ElasticMod > 1) + if (ElasticMod != ELASTIC_CONSTANT) phi[i + 1] = state.row(i) .tail<2>()[0]; // if both VIV and viscoelastic second to @@ -987,7 +1010,7 @@ Line::getStateDeriv(InstanceStateVarView drdt) // V[i] = A * l[i]; // volume attributed to segment // Calculate segment stiffness - if (ElasticMod == 1) { + if (ElasticMod == ELASTIC_CONSTANT) { // line tension if (nEApoints > 0) EA = getNonlinearEA(lstr[i], l[i]); @@ -1005,18 +1028,17 @@ Line::getStateDeriv(InstanceStateVarView drdt) BA = getNonlinearBA(ldstr[i], l[i]); Td[i] = BA * ldstr[i] / l[i] * qs[i]; - } else if ( - ElasticMod > - 1) { // viscoelastic model from - // https://asmedigitalcollection.asme.org/OMAE/proceedings/IOWTC2023/87578/V001T01A029/1195018 + } else { + // viscoelastic model from + // https://asmedigitalcollection.asme.org/OMAE/proceedings/IOWTC2023/87578/V001T01A029/1195018 // note that dl_1[i] is the same as Line%dl_1 in MD-F. This is the // deltaL of the first static spring k1. - if (ElasticMod == 2) { + if (ElasticMod == ELASTIC_VISCO_CTE) { // constant dynamic stiffness EA_2 = EA_D; - } else if (ElasticMod == 3) { + } else if (ElasticMod == ELASTIC_VISCO_MEAN) { if (dl_1[i] >= 0.0) // spring k1 is in tension // Mean load dependent dynamic stiffness: from combining // eqn. 2 and eqn. 10 from original MD viscoelastic paper, @@ -1445,7 +1467,7 @@ Line::getStateDeriv(InstanceStateVarView drdt) // Update state derivative for VIV. i-1 indexing because this is // only called for internal nodes (i.e. node 1 maps to row 0 in the // state deriv matrix). - if (ElasticMod > 1) + if (ElasticMod != ELASTIC_CONSTANT) drdt.row(i - 1).tail<2>()[0] = phi_dot[i]; // second to last element if visco model else @@ -1554,66 +1576,73 @@ Line::Output(real time) // Flags changed to just be one character (case sensitive) per output flag. // To match FASTv8 version. +// Helper to format and write a single value +auto write_val = [&](real val) { + *outfile << std::setw(WIDTH) + << std::right + << std::scientific + << std::setprecision(PRECISION) + << val; + }; + if (outfile) // if not a null pointer (indicating no output) { if (!outfile->is_open()) { LOGWRN << "Unable to write to output file " << endl; return; } + // Loops through the nodes + auto write_vec_array = [&](const std::vector& arr) { + for (unsigned int i = 0; i <= N; i++) + for (unsigned int J = 0; J < 3; J++){ + write_val(arr[i][J]);} + + }; + // Loops through the nodes for scalars + auto write_scalar_array = [&](const std::vector& arr) { + for (unsigned int i = 0; i <= N; i++) + write_val(arr[i]); + }; // output time - *outfile << time << "\t "; + *outfile << setw(10) << right << fixed << setprecision(4) + << time; // output positions? // if (find(channels.begin(), channels.end(), "position") != // channels.end()) if (channels.find("p") != string::npos) { - for (unsigned int i = 0; i <= N; i++) // loop through nodes - { - for (unsigned int J = 0; J < 3; J++) - *outfile << r[i][J] << "\t "; - } + write_vec_array(r); // position } + // output curvatures? if (channels.find("K") != string::npos) { - for (unsigned int i = 0; i <= N; i++) { - *outfile << Kurv[i] << "\t "; - } + write_scalar_array(Kurv); } // output velocities? if (channels.find("v") != string::npos) { - for (unsigned int i = 0; i <= N; i++) { - for (int J = 0; J < 3; J++) - *outfile << rd[i][J] << "\t "; - } + write_vec_array(rd); } // output wave velocities? if (channels.find("U") != string::npos) { auto [_z, U, _ud, _pdyn] = waves->getWaveKinLine(lineId); - for (unsigned int i = 0; i <= N; i++) { - for (int J = 0; J < 3; J++) - *outfile << U[i][J] << "\t "; - } + write_vec_array(U); } // output hydro drag force? if (channels.find("D") != string::npos) { for (unsigned int i = 0; i <= N; i++) { for (int J = 0; J < 3; J++) - *outfile << Dp[i][J] + Dq[i][J] + Ap[i][J] + Aq[i][J] - << "\t "; + write_val(Dp[i][J] + Dq[i][J] + Ap[i][J] + Aq[i][J]); } } // output VIV force (only CF for now) if (channels.find("V") != string::npos) { - for (unsigned int i = 0; i <= N; i++) { - for (int J = 0; J < 3; J++) - *outfile << Lf[i][J] << "\t "; - } + write_vec_array(Lf); } // output segment tensions? if (channels.find("t") != string::npos) { for (unsigned int i = 0; i < N; i++) { - *outfile << T[i].norm() << "\t "; + write_val(T[i].norm()); // >>> preparation below for switching to outputs at nodes // <<< note that tension of end nodes will need weight and // buoyancy adjustment @@ -1627,29 +1656,23 @@ Line::Output(real time) } // output internal damping force? if (channels.find("c") != string::npos) { - for (unsigned int i = 0; i < N; i++) { - for (int J = 0; J < 3; J++) - *outfile << Td[i][J] << "\t "; - } + write_vec_array(Td); // internal damping force } // output segment strains? if (channels.find("s") != string::npos) { for (unsigned int i = 0; i < N; i++) { - *outfile << lstr[i] / l[i] - 1.0 << "\t "; + write_val(lstr[i] / l[i] - 1.0); } } // output segment strain rates? if (channels.find("d") != string::npos) { for (unsigned int i = 0; i < N; i++) { - *outfile << ldstr[i] / l[i] << "\t "; + write_val(ldstr[i] / l[i]); } } // output seabed contact forces? if (channels.find("b") != string::npos) { - for (unsigned int i = 0; i <= N; i++) { - for (int J = 0; J < 3; J++) - *outfile << B[i][J] << "\t "; - } + write_vec_array(B); } *outfile << "\n"; diff --git a/source/Line.hpp b/source/Line.hpp index 9661c789..70cf74b2 100644 --- a/source/Line.hpp +++ b/source/Line.hpp @@ -85,6 +85,18 @@ class DECLDIR Line final ~Line(); private: + /// @brief Elasticity models + typedef enum + { + /// Constant EA + ELASTIC_CONSTANT = 1, + /// viscoelastic model with constant dynamic stiffness + ELASTIC_VISCO_CTE = 2, + /// mean load dependent dynamic stiffness + ELASTIC_VISCO_MEAN = 3, + } elastic_model; + + /** @brief Get the non-linear stiffness. This is interpolated from a * curve provided in the input file. * @param l_stretched The actual length of the segment @@ -142,9 +154,8 @@ class DECLDIR Line final moordyn::real d; /// line density (kg/m^3) moordyn::real rho; - /// Elasticity model flag (1: constant EA, 2: viscoelastic model with - /// constant dynamic stiffness, 3: mean load depenedent dynamic stiffness) - unsigned int ElasticMod; + /// Elasticity model flag. See ::elastic_model + elastic_model ElasticMod; /// line normal/static elasticity modulus * crosssectional area [N] moordyn::real EA; /// constant line dynamic stiffness modulus * area for viscoelastic stuff @@ -158,8 +169,8 @@ class DECLDIR Line final moordyn::real vbeta; /// stiffness of spring 2 in viscoelastic model (dynamic stiffness). This is /// the spring in series with the parallel spring-dashpot. if ElasticMod = - /// 2, EA_2 = EA_D. If ElasticMod = 3, EA_2 is load dependent dynamic - /// stiffness. + /// ELASTIC_VISCO_CTE, EA_2 = EA_D. If ElasticMod = ELASTIC_VISCO_MEAN, EA_2 + /// is load dependent dynamic stiffness. moordyn::real EA_2; /// segment stretch attributed to static stiffness portion [m] (deltaL_1) std::vector dl_1; @@ -435,17 +446,17 @@ class DECLDIR Line final // Line::setState but flipped) ------ Error check for number of columns // (if VIV and Visco need row.size() = 8, if VIV xor Visco need // row.size() = 7, if not VIV need row.size() = 6) - if ((state.row(0).size() != 8 && Cl > 0 && ElasticMod > 1) || - (state.row(0).size() != 7 && ((Cl > 0) ^ (ElasticMod > 1))) || - (state.row(0).size() != 6 && Cl == 0 && ElasticMod == 1)) { + if ((state.row(0).size() != 8 && Cl > 0 && ElasticMod != ELASTIC_CONSTANT) || + (state.row(0).size() != 7 && ((Cl > 0) ^ (ElasticMod != ELASTIC_CONSTANT))) || + (state.row(0).size() != 6 && Cl == 0 && ElasticMod == ELASTIC_CONSTANT)) { LOGERR << "Invalid state.row size for Line " << number << endl; throw moordyn::mem_error("Invalid state.row size"); } // Error check for number of rows (if visco need N rows, if normal need // N-1 rows) - if ((state.rows() != N && ElasticMod > 1) || - (state.rows() != N - 1 && ElasticMod == 1)) { + if ((state.rows() != N && ElasticMod != ELASTIC_CONSTANT) || + (state.rows() != N - 1 && ElasticMod == ELASTIC_CONSTANT)) { LOGERR << "Invalid number of rows in state matrix for Line " << number << endl; throw moordyn::mem_error("Invalid number of rows in state matrix"); @@ -453,20 +464,20 @@ class DECLDIR Line final // If using the viscoelastic model, iterate N rows, else iterate N-1 // rows. - for (unsigned int i = 0; i < (ElasticMod > 1 ? N : N - 1); i++) { + for (unsigned int i = 0; i < (ElasticMod != ELASTIC_CONSTANT ? N : N - 1); i++) { // node number is i+1 // segment number is i state.row(i).head<3>() = r[i + 1]; state.row(i).segment<3>(3) = rd[i + 1]; - if (ElasticMod > 1) + if (ElasticMod != ELASTIC_CONSTANT) state.row(i).tail<1>()[0] = dl_1[i]; // [0] needed becasue tail<1> returns a one element // vector. Viscoelastic state is always the last // element in the row if (Cl > 0) { - if (ElasticMod > 1) + if (ElasticMod != ELASTIC_CONSTANT) state.row(i).tail<2>()[0] = phi[i + 1]; // if both VIV and viscoelastic second to // last element in the row @@ -561,7 +572,7 @@ class DECLDIR Line final */ inline void setConstantEA(moordyn::real EA_in) { - if (ElasticMod > 1) { + if (ElasticMod != ELASTIC_CONSTANT) { LOGERR << "Cannot set constant EA for viscoelastic model" << endl; throw moordyn::invalid_value_error( "Cannot set constant EA for viscoelastic model"); @@ -1014,7 +1025,7 @@ class DECLDIR Line final */ inline const size_t stateN() const { - if (ElasticMod > 1) + if (ElasticMod != ELASTIC_CONSTANT) return getN(); // N rows for viscoelastic case else return getN() - 1; // N-1 rows for other cases @@ -1032,10 +1043,10 @@ class DECLDIR Line final */ inline const size_t stateDims() const { - if (Cl > 0 && ElasticMod > 1) + if (Cl > 0 && ElasticMod != ELASTIC_CONSTANT) return 8; // 3 for position, 3 for velocity, 1 for VIV phase, 1 for // viscoelasticity - else if ((Cl > 0) ^ (ElasticMod > 1)) + else if ((Cl > 0) ^ (ElasticMod != ELASTIC_CONSTANT)) return 7; // 3 for position, 3 for velocity, 1 for VIV phase or // viscoelasticity else diff --git a/source/MoorDyn.cpp b/source/MoorDyn.cpp index 5a43b045..5291c216 100644 --- a/source/MoorDyn.cpp +++ b/source/MoorDyn.cpp @@ -66,6 +66,9 @@ int OwnConsoleWindow = 0; #endif +// Default is false, meaning the console will open +int disableConsole = 0; + /** * @} */ @@ -85,63 +88,65 @@ MoorDyn md_singleton = NULL; int DECLDIR MoorDynInit(const double x[], const double xd[], const char* infilename) { + if (!disableConsole) { #ifdef WIN32 - // ------------ create console window for messages if none already available - // ----------------- adapted from Andrew S. Tucker, "Adding Console I/O to a - // Win32 GUI App" in Windows Developer Journal, December 1997. source code - // at http://dslweb.nwnexus.com/~ast/dload/guicon.htm - - FILE* fp; - // get pointer to environment variable "PROMPT" (NULL if not in console) - PromptPtr = getenv("PROMPT"); - - // TODO: simplify this to just keep the output parts I need - - HWND consoleWnd = GetConsoleWindow(); - if (!consoleWnd) { - // if not in console, create our own - OwnConsoleWindow = 1; - - // allocate a console for this app - if (AllocConsole()) { - // set the screen buffer to be big enough to let us scroll text - static const WORD MAX_CONSOLE_LINES = 500; - CONSOLE_SCREEN_BUFFER_INFO coninfo; - GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), - &coninfo); - coninfo.dwSize.Y = MAX_CONSOLE_LINES; - SetConsoleScreenBufferSize(GetStdHandle(STD_OUTPUT_HANDLE), - coninfo.dwSize); - - // redirect unbuffered STDOUT to the console - // lStdHandle = (long)GetStdHandle(STD_OUTPUT_HANDLE); - lStdHandle = (intptr_t)GetStdHandle(STD_OUTPUT_HANDLE); - hConHandle = _open_osfhandle(lStdHandle, _O_TEXT); - fp = _fdopen(hConHandle, "w"); - *stdout = *fp; - setvbuf(stdout, NULL, _IONBF, 0); - - // redirect unbuffered STDERR to the console - lStdHandle = (intptr_t)GetStdHandle(STD_ERROR_HANDLE); - hConHandle = _open_osfhandle(lStdHandle, _O_TEXT); - fp = _fdopen(hConHandle, "w"); - *stderr = *fp; - setvbuf(stderr, NULL, _IONBF, 0); - - // make cout, wcout, cin, wcin, wcerr, cerr, wclog and clog - // point to console as well - std::ios::sync_with_stdio(); - - std::cout << "(MoorDyn-initiated console window)" << std::endl; - } else { - // This is not a likely scenario, but we've run into some situations - // where you can neither get the console nor allocate a console. - // So just fall back to using whatever cout and cerr were before. - std::cout << "AllocConsole failed" << std::endl; - OwnConsoleWindow = 0; + // ------------ create console window for messages if none already available + // ----------------- adapted from Andrew S. Tucker, "Adding Console I/O to a + // Win32 GUI App" in Windows Developer Journal, December 1997. source code + // at http://dslweb.nwnexus.com/~ast/dload/guicon.htm + + FILE* fp; + // get pointer to environment variable "PROMPT" (NULL if not in console) + PromptPtr = getenv("PROMPT"); + + // TODO: simplify this to just keep the output parts I need + + HWND consoleWnd = GetConsoleWindow(); + if (!consoleWnd) { + // if not in console, create our own + OwnConsoleWindow = 1; + + // allocate a console for this app + if (AllocConsole()) { + // set the screen buffer to be big enough to let us scroll text + static const WORD MAX_CONSOLE_LINES = 500; + CONSOLE_SCREEN_BUFFER_INFO coninfo; + GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), + &coninfo); + coninfo.dwSize.Y = MAX_CONSOLE_LINES; + SetConsoleScreenBufferSize(GetStdHandle(STD_OUTPUT_HANDLE), + coninfo.dwSize); + + // redirect unbuffered STDOUT to the console + // lStdHandle = (long)GetStdHandle(STD_OUTPUT_HANDLE); + lStdHandle = (intptr_t)GetStdHandle(STD_OUTPUT_HANDLE); + hConHandle = _open_osfhandle(lStdHandle, _O_TEXT); + fp = _fdopen(hConHandle, "w"); + *stdout = *fp; + setvbuf(stdout, NULL, _IONBF, 0); + + // redirect unbuffered STDERR to the console + lStdHandle = (intptr_t)GetStdHandle(STD_ERROR_HANDLE); + hConHandle = _open_osfhandle(lStdHandle, _O_TEXT); + fp = _fdopen(hConHandle, "w"); + *stderr = *fp; + setvbuf(stderr, NULL, _IONBF, 0); + + // make cout, wcout, cin, wcin, wcerr, cerr, wclog and clog + // point to console as well + std::ios::sync_with_stdio(); + + std::cout << "(MoorDyn-initiated console window)" << std::endl; + } else { + // This is not a likely scenario, but we've run into some situations + // where you can neither get the console nor allocate a console. + // So just fall back to using whatever cout and cerr were before. + std::cout << "AllocConsole failed" << std::endl; + OwnConsoleWindow = 0; + } } - } #endif + } MoorDyn instance = MoorDyn_Create(infilename); if (!instance) @@ -192,6 +197,7 @@ MoorDynClose(void) std::cin.get(); FreeConsole(); } + OwnConsoleWindow = 0; #endif return 0; @@ -291,4 +297,10 @@ AllOutput(double t, double dt) MOORDYN_MSG_LEVEL, "In version 2, AllOutput is automatically called by " "MoorDynInit and MoorDynStep"); +} + +void DECLDIR +SetDisableConsole(int disable) +{ + disableConsole = disable; } \ No newline at end of file diff --git a/source/MoorDyn.h b/source/MoorDyn.h index 7742ff5b..d40a10cb 100644 --- a/source/MoorDyn.h +++ b/source/MoorDyn.h @@ -152,6 +152,14 @@ GetNodePos(int LineNum, int NodeNum, double pos[3]); void DECLDIR AllOutput(double, double); +/** @brief Set the variable to disable the console window. + * + * Use this function to control display of the console window popup. + * @param disable Set disable to 1 to disable the console window. + */ +void DECLDIR +SetDisableConsole(int disable); + /** * @} */ diff --git a/source/MoorDyn2.cpp b/source/MoorDyn2.cpp index 38430a6a..c0c9898a 100644 --- a/source/MoorDyn2.cpp +++ b/source/MoorDyn2.cpp @@ -35,6 +35,7 @@ #include "MoorDyn2.hpp" #include "Rod.hpp" #include +#include #ifdef LINUX #include @@ -50,6 +51,10 @@ using namespace std; +// Formating constants for rod files outputs (iomanip) +constexpr int WIDTH = 20; // Width for output +constexpr int PRECISION = 7; // Precision for output + /** * @brief A helper function for getting the size of a vector as an unsigned int * @@ -69,12 +74,17 @@ namespace moordyn { /// The list of units for the output const char* UnitList[] = { - "(s) ", "(m) ", "(m) ", "(m) ", "(deg) ", - "(deg) ", "(deg) ", "(m/s) ", "(m/s) ", "(m/s) ", - "(deg/s) ", "(deg/s) ", "(deg/s) ", "(m/s2) ", "(m/s2) ", - "(m/s2) ", "(deg/s2) ", "(deg/s2) ", "(deg/s2) ", "(N) ", - "(N) ", "(N) ", "(N) ", "(Nm) ", "(Nm) ", - "(Nm) ", "(frac) " + "s", // 0: Time + "m", "m", "m", // 1: PosX 2: PosY 3: PosZ + "deg", "deg", "deg", // 4: RX 5: RY 6: RZ + "m/s", "m/s", "m/s", // 7: VelX 8: VelY 9: VelZ + "deg/s", "deg/s", "deg/s", // 10: RVelX 11: RVelY 12: RVelZ + "m/s^2", "m/s^2", "m/s^2", // 13: AccX 14: AccY 15: AccZ + "deg/s^2", "deg/s^2", "deg/s^2", // 16: RAccX 17: RAccY 18: RAccZ + "N", // 19: Ten + "N", "N", "N", // 20: FX 21: FY 22: FZ + "N*m", "N*m", "N*m", // 23: MX 24: MY 25: MZ + "(frac)" // 26: Sub }; std::atomic __systems_counter(0); @@ -621,18 +631,19 @@ moordyn::MoorDyn::Init(const double* x, const double* xd, bool skip_ic) } // --- channel titles --- - outfileMain << "Time" - << "\t "; + outfileMain << setw(10) << right + << "Time"; for (auto channel : outChans) - outfileMain << channel.Name << "\t "; + outfileMain << setw(WIDTH) << right << channel.Name; outfileMain << endl; if (env->WriteUnits > 0) { // --- units --- - outfileMain << "(s)" - << "\t "; + outfileMain << setw(10) << right + << "(s)"; for (auto channel : outChans) - outfileMain << channel.Units << "\t "; + outfileMain << setw(WIDTH) << right + << channel.Units; outfileMain << "\n"; } @@ -1015,6 +1026,25 @@ moordyn::MoorDyn::ReadInFile() } } + if ((i = findStartOfSection(in_txt, { "RODS", "ROD LIST", "ROD PROPERTIES" })) != -1) { + LOGDBG << " Reading rod list:" << endl; + + // parse until the next header or the end of the file + while ((in_txt[i].find("---") == string::npos) && + (i < (int)in_txt.size())) { + Rod* obj = readRod(in_txt[i], i); + + if (obj) { + RodList.push_back(obj); + } else { + delete obj; + return MOORDYN_INVALID_INPUT; + } + + i++; + } + } + if ((i = findStartOfSection(in_txt, { "POINTS", "POINT LIST", @@ -1121,6 +1151,15 @@ moordyn::MoorDyn::ReadInFile() << endl; } + // Check point ID is sequential starting from 1 + if (number != PointList.size() + 1) { + LOGERR << "Error in " << _filepath << " at line " << i + 1 + << ":" << endl + << "'" << in_txt[i] << "'" << endl + << "Point ID must be sequential starting from 1" << endl; + return MOORDYN_INVALID_INPUT; + } + LOGDBG << "\t'" << number << "'" << " - of type " << Point::TypeName(type) << " with id " << PointList.size() << endl; @@ -1144,20 +1183,6 @@ moordyn::MoorDyn::ReadInFile() } } - if ((i = findStartOfSection( - in_txt, { "RODS", "ROD LIST", "ROD PROPERTIES" })) != -1) { - LOGDBG << " Reading rod list:" << endl; - - // parse until the next header or the end of the file - while ((in_txt[i].find("---") == string::npos) && - (i < (int)in_txt.size())) { - Rod* obj = readRod(in_txt[i], i); - RodList.push_back(obj); - - i++; - } - } - if ((i = findStartOfSection( in_txt, { "LINES", "LINE LIST", "LINE PROPERTIES" })) != -1) { LOGDBG << " Reading line list: " << endl; @@ -1215,6 +1240,15 @@ moordyn::MoorDyn::ReadInFile() } else outfiles.push_back(NULL); + // Check line ID is sequential starting from 1 + if (number != LineList.size() + 1) { + LOGERR << "Error in " << _filepath << " at line " << i + 1 + << ":" << endl + << "'" << in_txt[i] << "'" << endl + << "Line ID must be sequential starting from 1" << endl; + return MOORDYN_INVALID_INPUT; + } + LOGDBG << "\t'" << number << "'" << " - of class " << type << " (" << TypeNum << ")" << " with id " << LineList.size() << endl; @@ -1412,9 +1446,6 @@ moordyn::MoorDyn::ReadInFile() // figure out what type of output it is and process // accordingly - // TODO: add checks of first char of num1,2, let1,2,3 not - // being NULL to below and handle errors (e.g. invalid line - // number) // fairlead tension case (changed to just be for single // line, not all connected lines) @@ -1423,6 +1454,15 @@ moordyn::MoorDyn::ReadInFile() dummy.QType = Ten; dummy.Units = moordyn::UnitList[Ten]; dummy.ObjID = atoi(num1.c_str()); + // Check if the line ID is valid + if (dummy.ObjID <=0 || dummy.ObjID > LineList.size()) { + LOGERR << "Error in " << _filepath << " at line " << i + 1 + << ":" << endl + << "'" << in_txt[i] << "'" << endl + << "Invalid Line ID specifier: " << dummy.ObjID + << endl; + return MOORDYN_INVALID_INPUT; + } dummy.NodeID = LineList[dummy.ObjID - 1]->getN(); } // achor tension case (changed to just be for single line, @@ -1432,6 +1472,15 @@ moordyn::MoorDyn::ReadInFile() dummy.QType = Ten; dummy.Units = moordyn::UnitList[Ten]; dummy.ObjID = atoi(num1.c_str()); + // Check if the line ID is valid + if (dummy.ObjID <=0 || dummy.ObjID > LineList.size()) { + LOGERR << "Error in " << _filepath << " at line " << i + 1 + << ":" << endl + << "'" << in_txt[i] << "'" << endl + << "Invalid Line ID specifier: " << dummy.ObjID + << endl; + return MOORDYN_INVALID_INPUT; + } dummy.NodeID = 0; } // more general case @@ -1443,6 +1492,17 @@ moordyn::MoorDyn::ReadInFile() // get object type and node number if applicable // Line case: L?N?xxxx if (str::isOneOf(let1, { "L", "LINE" })) { + + // Check if the line ID is valid + if (dummy.ObjID <=0 || dummy.ObjID > LineList.size()) { + LOGERR << "Error in " << _filepath << " at line " << i + 1 + << ":" << endl + << "'" << in_txt[i] << "'" << endl + << "Invalid Line ID specifier: " << dummy.ObjID + << endl; + return MOORDYN_INVALID_INPUT; + } + dummy.OType = 1; if (let3.empty()) { if (let2.substr(0, 2) == "NA") { @@ -1465,14 +1525,48 @@ moordyn::MoorDyn::ReadInFile() } } else dummy.NodeID = atoi(num2.c_str()); + + // Check if NodeID is valid if provided by user (note -1 is returned by atoi(num2.c_str()) if null string). Static cast required because getN returns unsigned int + if ( dummy.NodeID < 0 || dummy.NodeID > static_cast(LineList[dummy.ObjID - 1]->getN()) ) { + LOGERR << "Error in " << _filepath << " at line " << i + 1 + << ":" << endl + << "'" << in_txt[i] << "'" << endl + << "Invalid Line Node ID specifier: " << dummy.NodeID + << endl; + return MOORDYN_INVALID_INPUT; + } } // Point case: P?xxx or Point?xxx else if (str::isOneOf(let1, { "P", "POINT" })) { + + // Check for valid pointID + if (dummy.ObjID <= 0 || dummy.ObjID > PointList.size()) { + LOGERR << "Error in " << _filepath << " at line " << i + 1 + << ":" << endl + << "'" << in_txt[i] << "'" << endl + << "Invalid Point ID specifier: " << dummy.ObjID + << endl; + return MOORDYN_INVALID_INPUT; + } + dummy.OType = 2; dummy.NodeID = -1; } // Rod case: R?xxx or Rod?xxx else if (str::isOneOf(let1, { "R", "ROD" })) { + + // Check for valid rodID + cout << "dummy.ObjID: " << dummy.ObjID << endl; + cout << "RodList.size(): " << RodList.size() << endl; + if (dummy.ObjID <= 0 || dummy.ObjID > RodList.size()) { + LOGERR << "Error in " << _filepath << " at line " << i + 1 + << ":" << endl + << "'" << in_txt[i] << "'" << endl + << "Invalid Rod ID specifier: " << dummy.ObjID + << endl; + return MOORDYN_INVALID_INPUT; + } + dummy.OType = 3; if (let3.empty()) { if (let2.substr(0, 2) == "NA") { @@ -1485,6 +1579,17 @@ moordyn::MoorDyn::ReadInFile() dummy.NodeID = -1; } else if (!num2.empty()) dummy.NodeID = atoi(num2.c_str()); + + // Check if NodeID is valid if provided by user (note -1 is returned by atoi(num2.c_str()) if null string). Static cast required because getN returns unsigned int + if ( dummy.NodeID < -1 || dummy.NodeID > static_cast(RodList[dummy.ObjID - 1]->getN()) ) { + LOGERR << "Error in " << _filepath << " at line " << i + 1 + << ":" << endl + << "'" << in_txt[i] << "'" << endl + << "Invalid Rod Node ID specifier: " << dummy.NodeID + << endl; + return MOORDYN_INVALID_INPUT; + } + else { LOGWRN << "Warning in " << _filepath << ":" << i + 1 << "..." << endl @@ -1496,6 +1601,17 @@ moordyn::MoorDyn::ReadInFile() } // Body case: B?xxx or Body?xxx else if (str::isOneOf(let1, { "B", "BODY" })) { + + // Check for valid bodyID + if (dummy.ObjID <= 0 || dummy.ObjID > BodyList.size()) { + LOGERR << "Error in " << _filepath << " at line " << i + 1 + << ":" << endl + << "'" << in_txt[i] << "'" << endl + << "Invalid Body ID specifier: " << dummy.ObjID + << endl; + return MOORDYN_INVALID_INPUT; + } + dummy.OType = 4; dummy.NodeID = -1; } @@ -2041,6 +2157,15 @@ moordyn::MoorDyn::readBody(string inputText, int lineNum) return nullptr; } + // Check body ID is sequential starting from 1 + if (number != BodyList.size() + 1) { + LOGERR << "Error in " << _filepath << " at line " << lineNum + 1 + << ":" << endl + << "'" << inputText << "'" << endl + << "Body ID must be sequential starting from 1" << endl; + return nullptr; + } + // id = size + 1 because of ground body, which has an Id of zero Body* obj = new Body(_log, BodyList.size() + 1); LOGDBG << "\t'" << number << "'" @@ -2167,6 +2292,15 @@ moordyn::MoorDyn::readRod(string inputText, int lineNum) << " and type " << Rod::TypeName(type) << " with id " << RodList.size() << endl; + // Check rod ID is sequential starting from 1 + if (number != RodList.size() + 1) { + LOGERR << "Error in " << _filepath << " at line " << lineNum + 1 + << ":" << endl + << "'" << inputText << "'" << endl + << "Rod ID must be sequential starting from 1" << endl; + return nullptr; + } + Rod* obj = new Rod(_log, RodList.size()); obj->setup(number, type, @@ -2413,12 +2547,15 @@ moordyn::MoorDyn::WriteOutputs(double t, double dt) LOGERR << "Error: Unable to write to main output file " << endl; return MOORDYN_INVALID_OUTPUT_FILE; } - outfileMain << t << "\t "; // output time + outfileMain << setw(10) << right << fixed << setprecision(4) + << t; // output time for (auto channel : outChans) { moordyn::error_id err = MOORDYN_SUCCESS; string err_msg; try { - outfileMain << GetOutput(channel) << "\t "; + outfileMain << setw(WIDTH) << right << fixed << scientific + << setprecision(PRECISION) + << GetOutput(channel); } MOORDYN_CATCHER(err, err_msg); if (err != MOORDYN_SUCCESS) { diff --git a/source/Rod.cpp b/source/Rod.cpp index de5b8f3e..18a4d821 100644 --- a/source/Rod.cpp +++ b/source/Rod.cpp @@ -33,6 +33,7 @@ #include "Line.hpp" #include "Waves.hpp" #include +#include #ifdef USE_VTK #include @@ -46,6 +47,10 @@ using namespace std; +// Formating constants for rod files outputs (iomanip) +constexpr int WIDTH = 20; // Width for output +constexpr int PRECISION = 7; // Precision for output + namespace moordyn { // here is the new numbering scheme (N segments per line) @@ -243,30 +248,91 @@ Rod::openoutput() // 1st line with the fields // output time - *outfile << "Time" - << "\t "; + *outfile << setw(10) << right + << "Time"; // output positions if (channels.find("p") != string::npos) { for (unsigned int i = 0; i <= N; i++) { - *outfile << "Node" << i << "px \t Node" << i << "py \t Node" - << i << "pz \t "; + *outfile << setw(WIDTH) << right << ("Node" + to_string((int)i) + "px") + << setw(WIDTH) << right << ("Node" + to_string((int)i) + "py") + << setw(WIDTH) << right << ("Node" + to_string((int)i) + "pz"); } } // output velocities if (channels.find("v") != string::npos) { for (unsigned int i = 0; i <= N; i++) { - *outfile << "Node" << i << "vx \t Node" << i << "vy \t Node" - << i << "vz \t "; + *outfile << setw(WIDTH) << right << ("Node" + to_string((int)i) + "vx") + << setw(WIDTH) << right << ("Node" + to_string((int)i) + "vy") + << setw(WIDTH) << right << ("Node" + to_string((int)i) + "vz"); } } // output net node force if (channels.find("f") != string::npos) { for (unsigned int i = 0; i <= N; i++) { - *outfile << "Node" << i << "Fx \t Node" << i << "Fy \t Node" - << i << "Fz \t "; + *outfile << setw(WIDTH) << right << ("Node" + to_string((int)i) + "Fx") + << setw(WIDTH) << right << ("Node" + to_string((int)i) + "Fy") + << setw(WIDTH) << right << ("Node" + to_string((int)i) + "Fz"); } } + // Output Weight + if (channels.find("W") != string::npos) { + for (unsigned int i = 0; i <= N; i++) + *outfile << setw(WIDTH) << right << ("Node" + to_string((int)i) + "Wx") + << setw(WIDTH) << right << ("Node" + to_string((int)i) + "Wy") + << setw(WIDTH) << right << ("Node" + to_string((int)i) + "Wz"); + } + // output Buoyancy + if (channels.find("B") != string::npos) { + for (unsigned int i = 0; i <= N; i++) + *outfile << setw(WIDTH) << right << ("Node" + to_string((int)i) + "Box") + << setw(WIDTH) << right << ("Node" + to_string((int)i) + "Boy") + << setw(WIDTH) << right << ("Node" + to_string((int)i) + "Boz"); + } + // output transverse drag + if (channels.find("X") != string::npos) { + for (unsigned int i = 0; i <= N; i++) + *outfile << setw(WIDTH) << right << ("Node" + to_string((int)i) + "Dpx") + << setw(WIDTH) << right << ("Node" + to_string((int)i) + "Dpy") + << setw(WIDTH) << right << ("Node" + to_string((int)i) + "Dpz"); + } + // output tangential drag + if (channels.find("Y") != string::npos) { + for (unsigned int i = 0; i <= N; i++) + *outfile << setw(WIDTH) << right << ("Node" + to_string((int)i) + "Dqx") + << setw(WIDTH) << right << ("Node" + to_string((int)i) + "Dqy") + << setw(WIDTH) << right << ("Node" + to_string((int)i) + "Dqz"); + } + // output transverse inertia force + if (channels.find("A") != string::npos) { + for (unsigned int i = 0; i <= N; i++) + *outfile << setw(WIDTH) << right << ("Node" + to_string((int)i) + "ApX") + << setw(WIDTH) << right << ("Node" + to_string((int)i) + "ApY") + << setw(WIDTH) << right << ("Node" + to_string((int)i) + "ApZ"); + + } + // output tangential fluid inertia force + if (channels.find("a") != string::npos) { + for (unsigned int i = 0; i <= N; i++) + *outfile << setw(WIDTH) << right << ("Node" + to_string((int)i) + "AqX") + << setw(WIDTH) << right << ("Node" + to_string((int)i) + "AqY") + << setw(WIDTH) << right << ("Node" + to_string((int)i) + "AqZ"); + } + // output dynamic pressure + if (channels.find("P") != string::npos) { + for (unsigned int i = 0; i <= N; i++) + *outfile << setw(WIDTH) << right << ("Node" + to_string((int)i) + "Pdx") + << setw(WIDTH) << right << ("Node" + to_string((int)i) + "Pdy") + << setw(WIDTH) << right << ("Node" + to_string((int)i) + "Pdz"); + + } + // output bottom contact force + if (channels.find("b") != string::npos) { + for (unsigned int i = 0; i <= N; i++) + *outfile << setw(WIDTH) << right << ("Node" + to_string((int)i) + "Bx") + << setw(WIDTH) << right << ("Node" + to_string((int)i) + "By") + << setw(WIDTH) << right << ("Node" + to_string((int)i) + "Bz"); + } *outfile << "\n"; @@ -274,23 +340,63 @@ Rod::openoutput() // 2nd line with the units // output time - *outfile << "(s)" - << "\t "; + *outfile << setw(10) << right + << "(s)"; // output positions if (channels.find("p") != string::npos) { for (unsigned int i = 0; i <= 3 * N + 2; i++) - *outfile << "(m) \t"; + *outfile << setw(WIDTH) << right << "(m)"; } - // output velocities? + // output velocities if (channels.find("v") != string::npos) { for (unsigned int i = 0; i <= 3 * N + 2; i++) - *outfile << "(m/s) \t"; + *outfile << setw(WIDTH) << right << "(m/s)"; } - // output net node force? + // output net node force if (channels.find("f") != string::npos) { for (unsigned int i = 0; i <= 3 * N + 2; i++) - *outfile << "(N) \t"; + *outfile << setw(WIDTH) << right << "(N)"; + } + // Output Weight + if (channels.find("W") != string::npos) { + for (unsigned int i = 0; i <= 3 * N + 2; i++) + *outfile << setw(WIDTH) << right << "(N)"; + } + // output Buoyancy + if (channels.find("B") != string::npos) { + for (unsigned int i = 0; i <= 3 * N + 2; i++) + *outfile << setw(WIDTH) << right << "(N)"; + } + // output transverse drag + if (channels.find("X") != string::npos) { + for (unsigned int i = 0; i <= 3 * N + 2; i++) + *outfile << setw(WIDTH) << right << "(N)"; + } + // output tangential drag + if (channels.find("Y") != string::npos) { + for (unsigned int i = 0; i <= 3 * N + 2; i++) + *outfile << setw(WIDTH) << right << "(N)"; + } + // output transverse fluid inertia force + if (channels.find("A") != string::npos) { + for (unsigned int i = 0; i <= 3 * N + 2; i++) + *outfile << setw(WIDTH) << right << "(N)"; + } + // output tangential fluid inertia force + if (channels.find("a") != string::npos) { + for (unsigned int i = 0; i <= 3 * N + 2; i++) + *outfile << setw(WIDTH) << right << "(N)"; + } + // output dynamic pressure + if (channels.find("P") != string::npos) { + for (unsigned int i = 0; i <= 3 * N + 2; i++) + *outfile << setw(WIDTH) << right << "(Pa)"; + } + // output bottom contact force + if (channels.find("b") != string::npos) { + for (unsigned int i = 0; i <= 3 * N + 2; i++) + *outfile << setw(WIDTH) << right << "(N)"; } *outfile << "\n"; @@ -988,12 +1094,12 @@ Rod::doRHS() // get scalar for submerged portion if (h0 < 0.0) { // Upside down case - if (Lsum + dL >= h0) // if fully submerged + if (Lsum >= -h0) // if fully submerged VOF0 = 1.0; - else if (Lsum > h0) // if partially below waterline - VOF0 = (h0 - Lsum) / dL; + else if (Lsum + dL > -h0) // if partially below waterline + VOF0 = (Lsum + dL + h0) / dL; // partially submerged else // must be out of water - VOF0 = 0.0; + VOF0 = 0.0; // fully out of water } else { if (Lsum + dL <= h0) // if fully submerged VOF0 = 1.0; @@ -1395,6 +1501,15 @@ Rod::Output(real time) // Flags changed to just be one character (case sensitive) per output flag. // To match FASTv8 version. +// Helper to format and write a single value +auto write_val = [&](real val) { + *outfile << std::setw(WIDTH) + << std::right + << std::scientific + << std::setprecision(PRECISION) + << val; + }; + if (outfile) // if not a null pointer (indicating no output) { if (openedoutfile == 0) { @@ -1408,36 +1523,56 @@ Rod::Output(real time) return; } // output time - *outfile << time << "\t "; + *outfile << setw(10) << right << fixed << setprecision(4) + << time; + // Loops through the nodes and writes the values + auto write_vec_array = [&](const std::vector& arr) { + for (unsigned int i = 0; i <= N; i++) + for (unsigned int J = 0; J < 3; J++){ + write_val(arr[i][J]);} + }; + + // --------------------- + // Output data per channel + // --------------------- + if (channels.find("p") != string::npos) { + write_vec_array(r); // position + } + if (channels.find("v") != string::npos) { + write_vec_array(rd); // velocity + } + if (channels.find("f") != string::npos) { + write_vec_array(Fnet); // net node forces + } + if (channels.find("W") != string::npos) { + write_vec_array(W); // weight + } + if (channels.find("B") != string::npos) { + write_vec_array(Bo); // buoyancy + } + if (channels.find("Y") != string::npos) { + write_vec_array(Dq); // tangential drag + } + if (channels.find("X") != string::npos) { + write_vec_array(Dp); // transverse drag + } + if (channels.find("A") != string::npos) { + write_vec_array(Ap); // transverse fluid inertia + } + if (channels.find("a") != string::npos) { + write_vec_array(Aq); // tangential fluid inertia + } + if (channels.find("P") != string::npos) { + write_vec_array(Pd); // dynamic pressure + } + if (channels.find("b") != string::npos) { + write_vec_array(B); // seabed contact (bottom contact forces) + } - // output positions? - if (channels.find("p") != string::npos) { - for (unsigned int i = 0; i <= N; i++) // loop through nodes - { - for (int J = 0; J < 3; J++) - *outfile << r[i][J] << "\t "; - } - } - // output velocities? - if (channels.find("v") != string::npos) { - for (unsigned int i = 0; i <= N; i++) { - for (int J = 0; J < 3; J++) - *outfile << rd[i][J] << "\t "; - } - } - // output net node forces? - if (channels.find("f") != string::npos) { - for (unsigned int i = 0; i <= N; i++) { - for (unsigned int J = 0; J < 3; J++) - *outfile << Fnet[i][J] << "\t "; - } - } + *outfile << "\n"; + } - *outfile << "\n"; - } - return; } - std::vector Rod::Serialize(void) { diff --git a/tests/Mooring/BodiesAndRods.dat b/tests/Mooring/BodiesAndRods.dat index e468c0dc..b54b067f 100644 --- a/tests/Mooring/BodiesAndRods.dat +++ b/tests/Mooring/BodiesAndRods.dat @@ -1,18 +1,18 @@ MoorDyn v2 input file for RM3 WEC - added in a cable too ------------------------- LINE TYPES -------------------------------------------------- -LineType Diam MassDenInAir EA BA/-zeta EI tbd Can Cat Cdn Cdt -(-) (m) (kg/m) (N) (Pa-s/-) (n-m^2) (-) (-) (-) (-) (-) -nylon 0.124 13.76 2515288.0 -0.8 0.0 0.0 1.0 0.0 1.6 0.05 -cable 0.175 40 751e6 -0.8 0 1.0 0.0 1.2 0.008 -buoyancy 0.26 40 751e6 -0.8 0 1.0 0.0 1.2 0.008 +LineType Diam MassDenInAir EA BA/-zeta EI Can Cat Cdn Cdt +(-) (m) (kg/m) (N) (Pa-s/-) (n-m^2) (-) (-) (-) (-) +nylon 0.124 13.76 2515288.0 -0.8 0.0 1.0 0.0 1.6 0.05 +cable 0.175 40 751e6 -0.8 0.0 1.0 0.0 1.2 0.008 +buoyancy 0.26 40 751e6 -0.8 0.0 1.0 0.0 1.2 0.008 ---------------------- ROD TYPES ------------------------------------ TypeName Diam Mass/m Cd Ca CdEnd CaEnd (name) (m) (kg/m) (-) (-) (-) (-) -Can 10 1.0e3 0.6 1.0 1.2 1.0 +Can 10 1.0e3 0.6 1.0 1.2 1.0 ---------------------------- BODIES ----------------------------------------------------- ID Attachment X0 Y0 Z0 r0 p0 y0 Mass CG* I* Volume CdA* Ca (#) (-) (m) (m) (m) (deg) (deg) (deg) (kg) (m) (kg-m^2) (m^3) (m^2) (-) -1 free 0 0 0 0 0 0 1e6 0 1e10 0 0 0 +1 free 0 0 0 0 0 0 1e6 0 1e10 0 0 0 ---------------------- RODS ---------------------------------------- ID RodType Attachment Xa Ya Za Xb Yb Zb NumSegs RodOutputs (#) (name) (#/key) (m) (m) (m) (m) (m) (m) (-) (-) @@ -21,25 +21,25 @@ ID RodType Attachment Xa Ya Za Xb Yb Zb NumSegs RodOutputs ----------------------- POINTS ---------------------------------------------- Node Type X Y Z M V CdA CA (-) (-) (m) (m) (m) (kg) (m^3) (m^2) (-) -1 Body1 0.0 0 -10.00 0 0 0 0 -2 Fixed 267.0 0 -70.00 0 0 0 0 -3 Body1 0.0 0 -10.00 0 0 0 0 -4 Fixed -133.5 231.23 -70.00 0 0 0 0 -5 Body1 0.0 0 -10.00 0 0 0 0 -6 Fixed -133.5 -231.23 -70.00 0 0 0 0 -7 Fixed -200 0 -70 0 0 0 0 -8 Free -60 0 -30 0 0 0 0 -9 Free -20 0 -30 0 0 0 0 -10 Body1 0 0 0 0 0 0 0 +1 Body1 0.0 0 -10.00 0 0 0 0 +2 Fixed 267.0 0 -70.00 0 0 0 0 +3 Body1 0.0 0 -10.00 0 0 0 0 +4 Fixed -133.5 231.23 -70.00 0 0 0 0 +5 Body1 0.0 0 -10.00 0 0 0 0 +6 Fixed -133.5 -231.23 -70.00 0 0 0 0 +7 Fixed -200 0 -70 0 0 0 0 +8 Free -60 0 -30 0 0 0 0 +9 Free -20 0 -30 0 0 0 0 +10 Body1 0 0 0 0 0 0 0 -------------------------- LINES ------------------------------------------------- Line LineType NodeA NodeB UnstrLen NumSegs Flags/Outputs (-) (-) (-) (-) (m) (-) (-) 1 nylon 2 1 300.0 50 p 2 nylon 4 3 300.0 50 p 3 nylon 6 5 300.0 50 p -4 cable 7 8 200 12 p -5 buoyancy 8 9 50 6 p -6 cable 9 10 50 6 p +4 cable 7 8 200 12 p +5 buoyancy 8 9 50 6 p +6 cable 9 10 50 6 p -------------------------- SOLVER OPTIONS--------------------------------------------------- 2 writeLog - Write a log file 0.0005 dtM - time step to use in mooring integration diff --git a/tests/Mooring/RodHanging.txt b/tests/Mooring/RodHanging.txt index 1cfc5818..e9b38bb3 100644 --- a/tests/Mooring/RodHanging.txt +++ b/tests/Mooring/RodHanging.txt @@ -17,7 +17,7 @@ ID RodType Attachment Xa Ya Za Xb Yb Zb NumSegs RodOutputs ID Type X Y Z Mass Volume CdA Ca (#) (-) (m) (m) (m) (kg) (mˆ3) (m^2) (-) 1 Fixed -450 0 0 0 0 0 0 -1 Fixed 450 0 0 0 0 0 0 +2 Fixed 450 0 0 0 0 0 0 ---------------------- LINES --------------------------------------------------- ID LineType AttachA AttachB UnstrLen NumSegs LineOutputs (#) (name) (#) (#) (m) (-) (-) diff --git a/tests/math_tests.cpp b/tests/math_tests.cpp index 3897b1dc..1f8039cd 100644 --- a/tests/math_tests.cpp +++ b/tests/math_tests.cpp @@ -25,37 +25,37 @@ template struct IsCloseMatcher : Catch::Matchers::MatcherGenericBase { IsCloseMatcher( - const Eigen::Ref a, + const DerivedA& a, const typename DerivedA::RealScalar rtol = Eigen::NumTraits::dummy_precision(), const typename DerivedA::RealScalar atol = Eigen::NumTraits::epsilon()) - : a(a) - , rtol(rtol) - , atol(atol) + : _a(a) + , _rtol(rtol) + , _atol(atol) { } template - bool match(const Eigen::DenseBase& b) const + bool match(const DerivedB& b) const { - return ((a.derived() - b.derived()).array().abs() <= - (atol + rtol * b.derived().array().abs())) + return ((_a.derived() - b.derived()).array().abs() <= + (_atol + _rtol * b.derived().array().abs())) .all(); } std::string describe() const override { std::stringstream ss; - ss << "Is close to: " << Catch::StringMaker::convert(a) - << "\nrtol = " << rtol << ", atol = " << atol; + ss << "Is close to: " << Catch::StringMaker::convert(_a) + << "\nrtol = " << _rtol << ", atol = " << _atol; return ss.str(); } private: - const Eigen::Ref a; - const typename DerivedA::RealScalar rtol; - const typename DerivedA::RealScalar atol; + const DerivedA _a; + const typename DerivedA::RealScalar _rtol; + const typename DerivedA::RealScalar _atol; }; template @@ -72,13 +72,12 @@ using namespace md; TEST_CASE("getH gives the cross product matrix") { - vec testVec; - testVec << 1, 2, 3; - + vec testVec{ 1.0, 2.0, 3.0 }; vec v{ 0.3, 0.2, 0.1 }; // getH() should create a matrix that replicates the behavior of the cross // product such that getH(v) * a == -v.cross(a) - REQUIRE_THAT(getH(v) * testVec, IsClose(v.cross(-testVec))); + vec ref = v.cross(-testVec); + REQUIRE_THAT(getH(v) * testVec, IsClose(ref)); } TEST_CASE("translateMass linear acceleration")