From c52e117797380d01e617b7cc3d9b4b2100e0dd93 Mon Sep 17 00:00:00 2001 From: Derek Slaughter Date: Tue, 23 Apr 2024 15:36:49 +0000 Subject: [PATCH 01/30] Fix crash at exit when using new Intel icx compiler The new icx compiler is a bit smarter about checking for memory errors and a new one was discovered which causes OpenFAST to crap when calling MAP_End. The error is due to the OutputList nodes containing pointers to memory which has already been freed. This is due to the way the OutputList is constructed where nodes from other lists (containing pointers to string memory) were appended without allocating new memory. So when the original list was freed, these pointers became invalid, but then the OutputList tried to free them again, resulting in a double free error. To fix this issue, set_output_list was changed to allocate new memory for copies of these nodes. --- modules/map/src/mapinit.c | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/modules/map/src/mapinit.c b/modules/map/src/mapinit.c index 3afe39f3a4..b3a29f0191 100644 --- a/modules/map/src/mapinit.c +++ b/modules/map/src/mapinit.c @@ -2304,7 +2304,14 @@ MAP_ERROR_CODE push_variable_to_output_list(OutputList* y_list, const int i, dou size = list_size(&y_list->out_list_ptr); iter_vartype = (VarTypePtr*)list_get_at(&y_list->out_list_ptr, size-1); iter_vartype->value = variable_ref; - iter_vartype->name = bformat("%s[%d]", alias, i); + if (i >= 0) + { + iter_vartype->name = bformat("%s[%d]", alias, i); + } + else + { + iter_vartype->name = bformat(alias); + } iter_vartype->units = bformat("%s", units); return MAP_SAFE; @@ -2325,49 +2332,50 @@ MAP_ERROR_CODE set_output_list(Domain* domain, MAP_InitOutputType_t* io_type, ch line_iter = (Line*)list_iterator_next(&domain->line); if (line_iter->options.gx_anchor_pos_flag) { - list_append(&y_list->out_list_ptr, &line_iter->anchor->position_ptr.x); + success = push_variable_to_output_list(y_list, -1, line_iter->anchor->position_ptr.x.value, line_iter->anchor->position_ptr.x.name->data, line_iter->anchor->position_ptr.x.units->data); io_type->writeOutputHdr_Len++; io_type->writeOutputUnt_Len++; }; if (line_iter->options.gy_anchor_pos_flag) { - list_append(&y_list->out_list_ptr, &line_iter->anchor->position_ptr.y); + success = push_variable_to_output_list(y_list, -1, line_iter->anchor->position_ptr.x.value, line_iter->anchor->position_ptr.x.name->data, line_iter->anchor->position_ptr.x.units->data); io_type->writeOutputHdr_Len++; io_type->writeOutputUnt_Len++; }; if (line_iter->options.gz_anchor_pos_flag) { - list_append(&y_list->out_list_ptr, &line_iter->anchor->position_ptr.z); + success = push_variable_to_output_list(y_list, -1, line_iter->anchor->position_ptr.x.value, line_iter->anchor->position_ptr.x.name->data, line_iter->anchor->position_ptr.x.units->data); io_type->writeOutputHdr_Len++; io_type->writeOutputUnt_Len++; }; if (line_iter->options.gx_pos_flag) { list_append(&y_list->out_list_ptr, &line_iter->fairlead->position_ptr.x); + success = push_variable_to_output_list(y_list, -1, line_iter->fairlead->position_ptr.x.value, line_iter->fairlead->position_ptr.x.name->data, line_iter->fairlead->position_ptr.x.units->data); io_type->writeOutputHdr_Len++; io_type->writeOutputUnt_Len++; }; if (line_iter->options.gy_pos_flag) { - list_append(&y_list->out_list_ptr, &line_iter->fairlead->position_ptr.y); + success = push_variable_to_output_list(y_list, -1, line_iter->fairlead->position_ptr.y.value, line_iter->fairlead->position_ptr.y.name->data, line_iter->fairlead->position_ptr.y.units->data); io_type->writeOutputHdr_Len++; io_type->writeOutputUnt_Len++; }; if (line_iter->options.gz_pos_flag) { - list_append(&y_list->out_list_ptr, &line_iter->fairlead->position_ptr.z); + success = push_variable_to_output_list(y_list, -1, line_iter->fairlead->position_ptr.z.value, line_iter->fairlead->position_ptr.z.name->data, line_iter->fairlead->position_ptr.z.units->data); io_type->writeOutputHdr_Len++; io_type->writeOutputUnt_Len++; }; if (line_iter->options.H_flag) { - list_append(&y_list->out_list_ptr, &line_iter->H); + success = push_variable_to_output_list(y_list, -1, line_iter->H.value, line_iter->H.name->data, line_iter->H.units->data); io_type->writeOutputHdr_Len++; io_type->writeOutputUnt_Len++; }; if (line_iter->options.V_flag) { - list_append(&y_list->out_list_ptr, &line_iter->V); + success = push_variable_to_output_list(y_list, -1, line_iter->V.value, line_iter->V.name->data, line_iter->V.units->data); io_type->writeOutputHdr_Len++; io_type->writeOutputUnt_Len++; }; From 0f082260367d727c6b99e228349d4b19866a554a Mon Sep 17 00:00:00 2001 From: Derek Slaughter Date: Tue, 23 Apr 2024 16:19:32 +0000 Subject: [PATCH 02/30] Disable cache in setup-python GH action --- .github/workflows/automated-dev-tests.yml | 36 +++++++++++------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/.github/workflows/automated-dev-tests.yml b/.github/workflows/automated-dev-tests.yml index 49e6882213..7ca5d3dffa 100644 --- a/.github/workflows/automated-dev-tests.yml +++ b/.github/workflows/automated-dev-tests.yml @@ -43,7 +43,7 @@ jobs: uses: actions/setup-python@v5 with: python-version: '3.11' - cache: 'pip' + # cache: 'pip' - name: Install dependencies run: | pip install -r requirements.txt @@ -128,7 +128,7 @@ jobs: uses: actions/setup-python@v5 with: python-version: '3.11' - cache: 'pip' + # cache: 'pip' - name: Install dependencies run: | pip install -r requirements.txt @@ -173,7 +173,7 @@ jobs: uses: actions/setup-python@v5 with: python-version: '3.11' - cache: 'pip' + # cache: 'pip' - name: Install dependencies run: | pip install -r requirements.txt @@ -226,7 +226,7 @@ jobs: uses: actions/setup-python@v5 with: python-version: '3.11' - cache: 'pip' + # cache: 'pip' - name: Install dependencies run: | pip install -r requirements.txt @@ -263,7 +263,7 @@ jobs: uses: actions/setup-python@v5 with: python-version: '3.11' - cache: 'pip' + # cache: 'pip' - name: Install dependencies run: | pip install -r requirements.txt @@ -300,7 +300,7 @@ jobs: uses: actions/setup-python@v5 with: python-version: '3.11' - cache: 'pip' + # cache: 'pip' - name: Install dependencies run: | pip install -r requirements.txt @@ -339,7 +339,7 @@ jobs: uses: actions/setup-python@v5 with: python-version: '3.11' - cache: 'pip' + # cache: 'pip' - name: Install dependencies run: | pip install -r requirements.txt @@ -400,7 +400,7 @@ jobs: uses: actions/setup-python@v5 with: python-version: '3.11' - cache: 'pip' + # cache: 'pip' - name: Install dependencies run: | pip install -r requirements.txt @@ -455,7 +455,7 @@ jobs: uses: actions/setup-python@v5 with: python-version: '3.11' - cache: 'pip' + # cache: 'pip' - name: Install dependencies run: | pip install -r requirements.txt @@ -513,7 +513,7 @@ jobs: uses: actions/setup-python@v5 with: python-version: '3.11' - cache: 'pip' + # cache: 'pip' - name: Install dependencies run: | pip install -r requirements.txt @@ -560,7 +560,7 @@ jobs: uses: actions/setup-python@v5 with: python-version: '3.11' - cache: 'pip' + # cache: 'pip' - name: Install dependencies run: | pip install -r requirements.txt @@ -612,7 +612,7 @@ jobs: uses: actions/setup-python@v5 with: python-version: '3.11' - cache: 'pip' + # cache: 'pip' - name: Install dependencies run: | pip install -r requirements.txt @@ -661,7 +661,7 @@ jobs: uses: actions/setup-python@v5 with: python-version: '3.11' - cache: 'pip' + # cache: 'pip' - name: Install dependencies run: | pip install -r requirements.txt @@ -710,7 +710,7 @@ jobs: uses: actions/setup-python@v5 with: python-version: '3.11' - cache: 'pip' + # cache: 'pip' - name: Install dependencies run: | pip install -r requirements.txt @@ -759,7 +759,7 @@ jobs: uses: actions/setup-python@v5 with: python-version: '3.11' - cache: 'pip' + # cache: 'pip' - name: Install dependencies run: | pip install -r requirements.txt @@ -808,7 +808,7 @@ jobs: uses: actions/setup-python@v5 with: python-version: '3.11' - cache: 'pip' + # cache: 'pip' - name: Install dependencies run: | pip install -r requirements.txt @@ -857,7 +857,7 @@ jobs: uses: actions/setup-python@v5 with: python-version: '3.11' - cache: 'pip' + # cache: 'pip' - name: Install dependencies run: | pip install -r requirements.txt @@ -906,7 +906,7 @@ jobs: uses: actions/setup-python@v5 with: python-version: '3.11' - cache: 'pip' + # cache: 'pip' - name: Install dependencies run: | pip install -r requirements.txt From d46719a9a110737ba213eb893f4e33412262da55 Mon Sep 17 00:00:00 2001 From: Mayank Chetan Date: Thu, 2 May 2024 09:37:03 -0600 Subject: [PATCH 03/30] Update GHCR doc, remove old Dockerfile --- docs/source/install/index.rst | 5 +++-- share/docker/openfast_dev/Dockerfile | 29 ---------------------------- 2 files changed, 3 insertions(+), 31 deletions(-) delete mode 100644 share/docker/openfast_dev/Dockerfile diff --git a/docs/source/install/index.rst b/docs/source/install/index.rst index 85c33ac203..af026fde9a 100644 --- a/docs/source/install/index.rst +++ b/docs/source/install/index.rst @@ -193,14 +193,15 @@ To pull and run with local files: .. code-block:: shell - docker run --rm -it --volume=/path/to/files:/files ghcr.io/OpenFAST/openfast:latest openfast /files/main.fst + docker run --rm -it --volume=/path/to/files:/files ghcr.io/openfast/openfast:latest openfast /files/main.fst For running the container interactively: .. code-block:: shell - docker run --rm -it --volume=/path/to/files:/files ghcr.io/OpenFAST/openfast:latest /bin/bash + docker run --rm -it --volume=/path/to/files:/files ghcr.io/openfast/openfast:latest /bin/bash +To pull a specific release, substitute the version number in place of `latest` in the above commands (i.e. `ghcr.io/openfast/openfast:3.5.3`). Build your own images --------------------- diff --git a/share/docker/openfast_dev/Dockerfile b/share/docker/openfast_dev/Dockerfile deleted file mode 100644 index 5042c7bbbd..0000000000 --- a/share/docker/openfast_dev/Dockerfile +++ /dev/null @@ -1,29 +0,0 @@ -# -# Copyright 2016 National Renewable Energy Laboratory -# -# 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. -# - -FROM rafmudaf/openfast-ubuntu:v2.3.0 - -# Move into the openfast directory and update -WORKDIR /openfast -RUN git fetch && \ - git checkout -b dev origin/dev && \ - git submodule update - -# Move into the "build" directory, remove the old reg tests, and compile -WORKDIR /openfast/build -RUN rm -rf reg_tests && \ - cmake .. && \ - make -j4 install From 51b122e4052c80b83000310e84f78525b92206ee Mon Sep 17 00:00:00 2001 From: Mayank Chetan Date: Mon, 6 May 2024 11:53:22 -0600 Subject: [PATCH 04/30] Updates to build instructions example --- share/docker/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/share/docker/README.md b/share/docker/README.md index 82517f7b1f..58d65736fe 100644 --- a/share/docker/README.md +++ b/share/docker/README.md @@ -8,7 +8,7 @@ and `openfast` added. The image built by this `Dockerfile` can be customised at ## Image registry Production images of OpenFAST for the `linux/amd64` platform are available on the -[NREL docker hub](https://hub.docker.com/r/nrel/openfast). +[NREL docker hub](https://hub.docker.com/r/nrel/openfast) and OpenFAST's [GitHub Container Registry](https://github.com/OpenFAST/openfast/pkgs/container/openfast). ## Build arguments Provide any of the following build arguments to customise the image at build time. @@ -25,7 +25,7 @@ For example, to build OpenFAST v3.5.3 for the `linux/amd64` platform and set `CM ```shell # Run from the root of this repository. git checkout v3.5.3 -docker build -f share/docker/Dockerfile -t openfast:3.5.3 --platform=linux/amd64 --build-arg=CMAKE_OPTIONS='-DBUILD_TESTING=ON' . +docker build -f share/docker/Dockerfile -t openfast:3.5.3 --platform=linux/amd64 --build-arg=CMAKE_OPTIONS='-DCMAKE_BUILD_TYPE=RELEASE' . ``` **NOTE:** This version of the `Dockerfile` is only available in v3.5.3 and up of this repository. To build earlier From 397d1b9e7fdb2ed285eabfaf40c511cf2c61e1ee Mon Sep 17 00:00:00 2001 From: Marcus Date: Tue, 21 May 2024 21:50:03 +0100 Subject: [PATCH 05/30] Add WEIS file readers and writers (#2188) * FEA: Add python package outline * REF: Rename python distribution/package to `openfast_python` / `openfast` * FEA: Move OpenFAST readers/writers over from WEIS * DEP: Add `pcrunch` dependency * REF: Update import paths from `weis` to `openfast` * DOC: Add contributors from WEIS to `authors` in `pyproject.toml` * DOC: Add brief explanation of `openfast` package to sub-readme * OPS: Fix format for authors names/emails * TST: Copy test from WEIS * OPS: Move `pyproject.toml` to top level * OPS: Publish `openfast` package to PyPI on release * TST: Add test data for `openfast` python package * REF: Remove extra python files * DOC: Adjust readme wording * DOC: Use link to specific git ref instead of `main` branch in readme * OPS: Add note about not relying on the `octue-openfast` package * OPS: Allow workflow dispatch of `deploy` workflow * WIP: Temporarily change name of python package * Deleting files related to running OpenFAST, Restructuring to be IO reading and writing only * setting ROSCO as optional, removing lin * updating the test files before move to r-test * removing rosco and pcrunch as deps * OpenFAST Output & Lin reader * Adding Oputput reader to test * Pointing test to one r-test case, removing test_data * Changing library name to openfast_io * OPS: Move poetry files into distribution root and rename package * REF: Rename package to `openfast_io` * DEP: Add `rosco` as optional dependency * DOC: Add installation instructions to python package readme * DOC: Fix docker commands for GHCR images * DOC: Add python package installation to docs * DOC: Update python package readme * WIP: Temporarily rename python package * OPS: Set working directory for python package build and publish * WIP: Temporarily change python package version * FIX: Update python package import paths * WIP: Increment temporary version number * replaced references to weis within code. * added Apache-2.0 license to pyproject.toml --------- Co-authored-by: Mayank Chetan --- ...-docker-image-automatic.yml => deploy.yml} | 37 +- .gitignore | 1 + docs/source/install/index.rst | 23 + openfast_python/README.md | 27 + .../openfast_io/FAST_linearization_reader.py | 391 + .../openfast_io/FAST_output_reader.py | 226 + openfast_python/openfast_io/FAST_post.py | 14 + openfast_python/openfast_io/FAST_reader.py | 2557 ++++ openfast_python/openfast_io/FAST_vars_out.py | 12290 ++++++++++++++++ openfast_python/openfast_io/FAST_writer.py | 2251 +++ openfast_python/openfast_io/FileTools.py | 271 + .../openfast_io/IEC_CoeherentGusts.py | 256 + openfast_python/openfast_io/StC_defaults.py | 93 + openfast_python/openfast_io/__init__.py | 0 .../openfast_io/create_output_vars.py | 92 + .../openfast_io/test/test_OF_utils.py | 94 + openfast_python/openfast_io/turbsim_file.py | 319 + openfast_python/openfast_io/turbsim_util.py | 280 + openfast_python/poetry.lock | 3376 +++++ openfast_python/pyproject.toml | 33 + 20 files changed, 22625 insertions(+), 6 deletions(-) rename .github/workflows/{build-docker-image-automatic.yml => deploy.yml} (62%) create mode 100644 openfast_python/README.md create mode 100644 openfast_python/openfast_io/FAST_linearization_reader.py create mode 100644 openfast_python/openfast_io/FAST_output_reader.py create mode 100644 openfast_python/openfast_io/FAST_post.py create mode 100644 openfast_python/openfast_io/FAST_reader.py create mode 100644 openfast_python/openfast_io/FAST_vars_out.py create mode 100644 openfast_python/openfast_io/FAST_writer.py create mode 100644 openfast_python/openfast_io/FileTools.py create mode 100644 openfast_python/openfast_io/IEC_CoeherentGusts.py create mode 100644 openfast_python/openfast_io/StC_defaults.py create mode 100644 openfast_python/openfast_io/__init__.py create mode 100644 openfast_python/openfast_io/create_output_vars.py create mode 100644 openfast_python/openfast_io/test/test_OF_utils.py create mode 100644 openfast_python/openfast_io/turbsim_file.py create mode 100644 openfast_python/openfast_io/turbsim_util.py create mode 100644 openfast_python/poetry.lock create mode 100644 openfast_python/pyproject.toml diff --git a/.github/workflows/build-docker-image-automatic.yml b/.github/workflows/deploy.yml similarity index 62% rename from .github/workflows/build-docker-image-automatic.yml rename to .github/workflows/deploy.yml index 01b80fcac2..180969d6fa 100644 --- a/.github/workflows/build-docker-image-automatic.yml +++ b/.github/workflows/deploy.yml @@ -1,16 +1,41 @@ -# This workflow builds an OpenFAST docker image for the linux/amd64 and linux/aarch64 architectures on merge into -# `main` from a release candidate branch. The image is tagged both with "latest" and the version extracted from the -# release candidate branch's name (e.g. "rc-3.5.3") before being pushed to the `nrel/openfast` repository. The build -# cache is stored in GitHub actions. -name: build-docker-image-automatic +# This workflow uploads the `openfast` python package to PyPI before building an OpenFAST docker image for the +# linux/amd64 and linux/aarch64 architectures on release. The image is tagged both with "latest" and the version +# extracted from the release candidate branch's name (e.g. "rc-3.5.3") before being pushed to the `nrel/openfast` +# repository. The build cache is stored in GitHub actions. +name: deploy on: + workflow_dispatch: + release: types: - released jobs: - build-and-push: + publish-to-pypi: + runs-on: ubuntu-latest + permissions: + id-token: write + contents: read + + steps: + - name: Checkout Repository + uses: actions/checkout@v4 + + - name: Install Poetry + uses: snok/install-poetry@v1.3.4 + + - name: Build a binary wheel and a source tarball + run: poetry build + working-directory: openfast_python + + - name: Publish package distributions to PyPI + uses: pypa/gh-action-pypi-publish@v1.8.14 + with: + packages-dir: openfast_python/dist + + + docker-build-and-push: runs-on: ubuntu-latest timeout-minutes: 300 env: diff --git a/.gitignore b/.gitignore index 8004a8eb5d..11d116ec76 100644 --- a/.gitignore +++ b/.gitignore @@ -43,6 +43,7 @@ vs-build/ .fortls .devcontainer .idea +.env # backup files *.asv diff --git a/docs/source/install/index.rst b/docs/source/install/index.rst index af026fde9a..9c4a4fa46f 100644 --- a/docs/source/install/index.rst +++ b/docs/source/install/index.rst @@ -15,6 +15,9 @@ code,** refer to the table in the :ref:`download_binaries` or :ref:`use_docker` sections and read the corresponding documentation for specific instructions. For instructions on compiling, see :ref:`compile_from_source`. +To manipulate OpenFAST files using python, see :ref:`python_wrapper`. + + .. _download_binaries: Download binaries @@ -209,6 +212,26 @@ You can also build your own custom images using our `Dockerfile` or base your im `here `_ for more information on this. +.. _python_wrapper + +Install the ``openfast_io`` python wrapper +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +The ``openfast_io`` python package is a wrapper comprising readers and writers for converting OpenFAST files to/from +python objects. You can install it with: + +.. code-block:: + + pip install openfast_io + +or + +.. code-block:: + + poetry add openfast_io + +For more information and installation options, see `here `_. + + .. _compile_from_source: Compile from source diff --git a/openfast_python/README.md b/openfast_python/README.md new file mode 100644 index 0000000000..e7becb7462 --- /dev/null +++ b/openfast_python/README.md @@ -0,0 +1,27 @@ +# OpenFAST python readers/writers + +> [!CAUTION] +> The `openfast_io` package on PyPI is currently called `octue-openfast` but will soon be renamed. + +This package is a python wrapper comprising readers and writers for converting OpenFAST files to/from python objects. It +was originally written for [WEIS](https://github.com/WISDEM/WEIS/tree/77a878d7989b8c1d07d2244135ccd308a193a924/weis/aeroelasticse) and has been ported over to OpenFAST to make it more widely accessible. + +## Installation +Run either +```shell +pip install openfast_io +``` +or +```shell +poetry add openfast_io +``` + +### Extra options +[ROSCO](https://github.com/NREL/ROSCO) can be installed as an optional dependency. Run either +```shell +pip install openfast_io[rosco] +``` +or +```shell +poetry add -E rosco openfast_io +``` diff --git a/openfast_python/openfast_io/FAST_linearization_reader.py b/openfast_python/openfast_io/FAST_linearization_reader.py new file mode 100644 index 0000000000..40dff4deec --- /dev/null +++ b/openfast_python/openfast_io/FAST_linearization_reader.py @@ -0,0 +1,391 @@ +""" +Taken from python_toolbox https://github.com/openfast/python_toolbox +""" +import os +import numpy as np +import re +class BrokenFormatError(Exception): pass + +class FASTLinearizationFile(dict): + """ + Read/write an OpenFAST linearization file. The object behaves like a dictionary. + + Main keys + --------- + - 'x', 'xdot' 'u', 'y', 'A', 'B', 'C', 'D' + + Main methods + ------------ + - read, write, toDataFrame, keys, xdescr, ydescr, udescr + + Examples + -------- + + f = FASTLinearizationFile('5MW.1.lin') + print(f.keys()) + print(f['u']) # input operating point + print(f.udescr()) # description of inputs + + # use a dataframe with "named" columns and rows + df = f.toDataFrame() + print(df['A'].columns) + print(df['A']) + + """ + @staticmethod + def defaultExtensions(): + return ['.lin'] + + @staticmethod + def formatName(): + return 'FAST linearization output' + + def __init__(self, filename=None, **kwargs): + """ Class constructor. If a `filename` is given, the file is read. """ + self.filename = filename + if filename: + self.read(**kwargs) + + def read(self, filename=None, **kwargs): + """ Reads the file self.filename, or `filename` if provided """ + + # --- Standard tests and exceptions (generic code) + if filename: + self.filename = filename + if not self.filename: + raise Exception('No filename provided') + if not os.path.isfile(self.filename): + raise OSError(2,'File not found:',self.filename) + if os.stat(self.filename).st_size == 0: + raise EmptyFileError('File is empty:',self.filename) + # --- Calling (children) function to read + self._read(**kwargs) + + def _read(self, *args, **kwargs): + self['header']=[] + + def extractVal(lines, key): + for l in lines: + if l.find(key)>=0: + return l.split(key)[1].split()[0] + return None + + def readToMarker(fid, marker, nMax): + lines=[] + for i, line in enumerate(fid): + if i>nMax: + raise BrokenFormatError('`{}` not found in file'.format(marker)) + if line.find(marker)>=0: + break + lines.append(line.strip()) + return lines, line + + def readOP(fid, n, name=''): + OP=[] + Var = {'RotatingFrame': [], 'DerivativeOrder': [], 'Description': []} + colNames=fid.readline().strip() + fid.readline().strip() + bHasDeriv= colNames.find('Derivative Order')>=0 + for i, line in enumerate(fid): + sp = line.strip().split() + if sp[1].find(',') >= 0: + # Most likely this OP has three values (e.g. orientation angles) + # For now we discard the two other values + OP.append(np.float32(sp[1][:-1])) + iRot=4 + else: + OP.append(np.float32(sp[1])) + iRot=2 + Var['RotatingFrame'].append(sp[iRot]) + if bHasDeriv: + Var['DerivativeOrder'].append(int(sp[iRot+1])) + Var['Description'].append(' '.join(sp[iRot+2:]).strip()) + else: + Var['DerivativeOrder'].append(-1) + Var['Description'].append(' '.join(sp[iRot+1:]).strip()) + if i>=n-1: + break + OP=np.asarray(OP) + return OP, Var + + def readMat(fid, n, m, name=''): + + # Read rows from file, raise exception on failure + try: + vals = np.genfromtxt(fid, dtype=np.float64, max_rows=n) + except: + raise Exception('Failed to convert into an array of float the matrix `{}`\n\tin linfile: {}'.format(name, self.filename)) + + # Raise exception if actual matrix shape does not match expected shape + if vals.shape[0]!=n or vals.shape[1]!=m: + shape1 = vals.shape + shape2 = (n,m) + raise Exception('Shape of matrix `{}` has wrong dimension ({} instead of {})\n\tin linfile: {}'.format(name, shape1, shape2, name, self.filename)) + + # Raise exceptions if any elements are NaN or infinity + if np.any(np.isnan(vals.ravel())): + raise Exception('Some ill-formated/infinite values (e.g. `*******`) were found in the matrix `{}`\n\tin linflile: {}'.format(name, self.filename)) + if np.any(np.isinf(vals.ravel())): + raise Exception('Some NaN values were found in the matrix `{}`\n\tin linfile: `{}`.'.format(name, self.filename)) + return vals + + + # Reading + with open(self.filename, 'r', errors="surrogateescape") as f: + # --- Reader header + self['header'], lastLine=readToMarker(f, 'Jacobians included', 30) + self['header'].append(lastLine) + nx = int(extractVal(self['header'],'Number of continuous states:')) + nxd = int(extractVal(self['header'],'Number of discrete states:' )) + nz = int(extractVal(self['header'],'Number of constraint states:')) + nu = int(extractVal(self['header'],'Number of inputs:' )) + ny = int(extractVal(self['header'],'Number of outputs:' )) + bJac = extractVal(self['header'],'Jacobians included in this file?') + try: + self['Azimuth'] = np.float32(extractVal(self['header'],'Azimuth:')) + except: + self['Azimuth'] = None + try: + self['RotSpeed'] = np.float32(extractVal(self['header'],'Rotor Speed:')) # rad/s + except: + self['RotSpeed'] = None + try: + self['WindSpeed'] = np.float32(extractVal(self['header'],'Wind Speed:')) + except: + self['WindSpeed'] = None + + for i, line in enumerate(f): + line = line.strip() + if line.find('Order of continuous states:')>=0: + self['x'], self['x_info'] = readOP(f, nx, 'x') + elif line.find('Order of continuous state derivatives:')>=0: + self['xdot'], self['xdot_info'] = readOP(f, nx, 'xdot') + elif line.find('Order of inputs')>=0: + self['u'], self['u_info'] = readOP(f, nu, 'u') + elif line.find('Order of outputs')>=0: + self['y'], self['y_info'] = readOP(f, ny, 'y') + elif line.find('A:')>=0: + self['A'] = readMat(f, nx, nx, 'A') + elif line.find('B:')>=0: + self['B'] = readMat(f, nx, nu, 'B') + elif line.find('C:')>=0: + self['C'] = readMat(f, ny, nx, 'C') + elif line.find('D:')>=0: + self['D'] = readMat(f, ny, nu, 'D') + elif line.find('dUdu:')>=0: + self['dUdu'] = readMat(f, nu, nu,'dUdu') + elif line.find('dUdy:')>=0: + self['dUdy'] = readMat(f, nu, ny,'dUdy') + elif line.find('StateRotation:')>=0: + pass + # TODO + #StateRotation: + elif line.find('ED M:')>=0: + self['EDDOF'] = line[5:].split() + self['M'] = readMat(f, 24, 24,'M') + + def toString(self): + s='' + return s + + def _write(self): + with open(self.filename,'w') as f: + f.write(self.toString()) + + def short_descr(self,slist): + def shortname(s): + s=s.strip() + s = s.replace('(m/s)' , '_[m/s]' ); + s = s.replace('(kW)' , '_[kW]' ); + s = s.replace('(deg)' , '_[deg]' ); + s = s.replace('(N)' , '_[N]' ); + s = s.replace('(kN-m)' , '_[kNm]' ); + s = s.replace('(N-m)' , '_[Nm]' ); + s = s.replace('(kN)' , '_[kN]' ); + s = s.replace('(rpm)' , '_[rpm]' ); + s = s.replace('(rad)' , '_[rad]' ); + s = s.replace('(rad/s)' , '_[rad/s]' ); + s = s.replace('(rad/s^2)', '_[rad/s^2]' ); + s = s.replace('(m/s^2)' , '_[m/s^2]'); + s = s.replace('(deg/s^2)','_[deg/s^2]'); + s = s.replace('(m)' , '_[m]' ); + s = s.replace(', m/s/s','_[m/s^2]'); + s = s.replace(', m/s^2','_[m/s^2]'); + s = s.replace(', m/s','_[m/s]'); + s = s.replace(', m','_[m]'); + s = s.replace(', rad/s/s','_[rad/s^2]'); + s = s.replace(', rad/s^2','_[rad/s^2]'); + s = s.replace(', rad/s','_[rad/s]'); + s = s.replace(', rad','_[rad]'); + s = s.replace(', -','_[-]'); + s = s.replace(', Nm/m','_[Nm/m]'); + s = s.replace(', Nm','_[Nm]'); + s = s.replace(', N/m','_[N/m]'); + s = s.replace(', N','_[N]'); + s = s.replace('(1)','1') + s = s.replace('(2)','2') + s = s.replace('(3)','3') + s= re.sub(r'\([^)]*\)','', s) # remove parenthesis + s = s.replace('ED ',''); + s = s.replace('BD_','BD_B'); + s = s.replace('IfW ',''); + s = s.replace('Extended input: ','') + s = s.replace('1st tower ','qt1'); + s = s.replace('2nd tower ','qt2'); + nd = s.count('First time derivative of ') + if nd>=0: + s = s.replace('First time derivative of ' ,''); + if nd==1: + s = 'd_'+s.strip() + elif nd==2: + s = 'dd_'+s.strip() + s = s.replace('Variable speed generator DOF ','psi_rot'); # NOTE: internally in FAST this is the azimuth of the rotor + s = s.replace('fore-aft bending mode DOF ' ,'FA' ); + s = s.replace('side-to-side bending mode DOF','SS' ); + s = s.replace('bending-mode DOF of blade ' ,'' ); + s = s.replace(' rotational-flexibility DOF, rad','-ROT' ); + s = s.replace('rotational displacement in ','rot' ); + s = s.replace('Drivetrain','DT' ); + s = s.replace('translational displacement in ','trans' ); + s = s.replace('finite element node ','N' ); + s = s.replace('-component position of node ','posN') + s = s.replace('-component inflow on tower node','TwrN') + s = s.replace('-component inflow on blade 1, node','Bld1N') + s = s.replace('-component inflow on blade 2, node','Bld2N') + s = s.replace('-component inflow on blade 3, node','Bld3N') + s = s.replace('-component inflow velocity at node','N') + s = s.replace('X translation displacement, node','TxN') + s = s.replace('Y translation displacement, node','TyN') + s = s.replace('Z translation displacement, node','TzN') + s = s.replace('X translation velocity, node','TVxN') + s = s.replace('Y translation velocity, node','TVyN') + s = s.replace('Z translation velocity, node','TVzN') + s = s.replace('X translation acceleration, node','TAxN') + s = s.replace('Y translation acceleration, node','TAyN') + s = s.replace('Z translation acceleration, node','TAzN') + s = s.replace('X orientation angle, node' ,'RxN') + s = s.replace('Y orientation angle, node' ,'RyN') + s = s.replace('Z orientation angle, node' ,'RzN') + s = s.replace('X rotation velocity, node' ,'RVxN') + s = s.replace('Y rotation velocity, node' ,'RVyN') + s = s.replace('Z rotation velocity, node' ,'RVzN') + s = s.replace('X rotation acceleration, node' ,'RAxN') + s = s.replace('Y rotation acceleration, node' ,'RAyN') + s = s.replace('Z rotation acceleration, node' ,'RAzN') + s = s.replace('X force, node','FxN') + s = s.replace('Y force, node','FyN') + s = s.replace('Z force, node','FzN') + s = s.replace('X moment, node','MxN') + s = s.replace('Y moment, node','MyN') + s = s.replace('Z moment, node','MzN') + s = s.replace('FX', 'Fx') + s = s.replace('FY', 'Fy') + s = s.replace('FZ', 'Fz') + s = s.replace('MX', 'Mx') + s = s.replace('MY', 'My') + s = s.replace('MZ', 'Mz') + s = s.replace('FKX', 'FKx') + s = s.replace('FKY', 'FKy') + s = s.replace('FKZ', 'FKz') + s = s.replace('MKX', 'MKx') + s = s.replace('MKY', 'MKy') + s = s.replace('MKZ', 'MKz') + s = s.replace('Nodes motion','') + s = s.replace('cosine','cos' ); + s = s.replace('sine','sin' ); + s = s.replace('collective','coll.'); + s = s.replace('Blade','Bld'); + s = s.replace('rotZ','TORS-R'); + s = s.replace('transX','FLAP-D'); + s = s.replace('transY','EDGE-D'); + s = s.replace('rotX','EDGE-R'); + s = s.replace('rotY','FLAP-R'); + s = s.replace('flapwise','FLAP'); + s = s.replace('edgewise','EDGE'); + s = s.replace('horizontal surge translation DOF','Surge'); + s = s.replace('horizontal sway translation DOF','Sway'); + s = s.replace('vertical heave translation DOF','Heave'); + s = s.replace('roll tilt rotation DOF','Roll'); + s = s.replace('pitch tilt rotation DOF','Pitch'); + s = s.replace('yaw rotation DOF','Yaw'); + s = s.replace('vertical power-law shear exponent','alpha') + s = s.replace('horizontal wind speed ','WS') + s = s.replace('propagation direction','WD') + s = s.replace(' pitch command','pitch') + s = s.replace('HSS_','HSS') + s = s.replace('Bld','B') + s = s.replace('tower','Twr') + s = s.replace('Tower','Twr') + s = s.replace('Nacelle','Nac') + s = s.replace('Platform','Ptfm') + s = s.replace('SrvD','SvD') + s = s.replace('Generator torque','Qgen') + s = s.replace('coll. blade-pitch command','PitchColl') + s = s.replace('wave elevation at platform ref point','WaveElevRefPoint') + s = s.replace('1)','1'); + s = s.replace('2)','2'); + s = s.replace('3)','3'); + s = s.replace(',',''); + s = s.replace(' ',''); + s=s.strip() + return s + return [shortname(s) for s in slist] + + def xdescr(self): + if 'x_info' in self.keys(): + return self.short_descr(self['x_info']['Description']) + else: + return [] + + def xdotdescr(self): + if 'xdot_info' in self.keys(): + return self.short_descr(self['xdot_info']['Description']) + else: + return [] + + def ydescr(self): + if 'y_info' in self.keys(): + return self.short_descr(self['y_info']['Description']) + else: + return [] + def udescr(self): + if 'u_info' in self.keys(): + return self.short_descr(self['u_info']['Description']) + else: + return [] + + def toDataFrame(self): + import pandas as pd + dfs={} + + xdescr_short = self.xdescr() + xdotdescr_short = self.xdotdescr() + ydescr_short = self.ydescr() + udescr_short = self.udescr() + + if 'A' in self.keys(): + dfs['A'] = pd.DataFrame(data = self['A'], index=xdescr_short, columns=xdescr_short) + if 'B' in self.keys(): + dfs['B'] = pd.DataFrame(data = self['B'], index=xdescr_short, columns=udescr_short) + if 'C' in self.keys(): + dfs['C'] = pd.DataFrame(data = self['C'], index=ydescr_short, columns=xdescr_short) + if 'D' in self.keys(): + dfs['D'] = pd.DataFrame(data = self['D'], index=ydescr_short, columns=udescr_short) + if 'x' in self.keys(): + dfs['x'] = pd.DataFrame(data = np.asarray(self['x']).reshape((1,-1)), columns=xdescr_short) + if 'xdot' in self.keys(): + dfs['xdot'] = pd.DataFrame(data = np.asarray(self['xdot']).reshape((1,-1)), columns=xdotdescr_short) + if 'u' in self.keys(): + dfs['u'] = pd.DataFrame(data = np.asarray(self['u']).reshape((1,-1)), columns=udescr_short) + if 'y' in self.keys(): + dfs['y'] = pd.DataFrame(data = np.asarray(self['y']).reshape((1,-1)), columns=ydescr_short) + if 'M' in self.keys(): + dfs['M'] = pd.DataFrame(data = self['M'], index=self['EDDOF'], columns=self['EDDOF']) + if 'dUdu' in self.keys(): + dfs['dUdu'] = pd.DataFrame(data = self['dUdu'], index=udescr_short, columns=udescr_short) + if 'dUdy' in self.keys(): + dfs['dUdy'] = pd.DataFrame(data = self['dUdy'], index=udescr_short, columns=ydescr_short) + + return dfs + + diff --git a/openfast_python/openfast_io/FAST_output_reader.py b/openfast_python/openfast_io/FAST_output_reader.py new file mode 100644 index 0000000000..aba9328393 --- /dev/null +++ b/openfast_python/openfast_io/FAST_output_reader.py @@ -0,0 +1,226 @@ +# +# Copyright 2017 National Renewable Energy Laboratory +# +# 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. +# + +''' +Created on 03/09/2015 +@author: MMPE +Copied from https://github.com/WISDEM/AeroelasticSE/tree/openmdao1/src/AeroelasticSE/old_files on 15 Aug 2016 by Ganesh Vijayakumar +''' +import os +import numpy as np +import struct + +class FASTOutputFile(): + """ + Read an OpenFAST ouput file (.out, .outb, .elev). + + Main methods + ------------ + - read, write, toDataFrame + """ + + def __init__(self, filename=None, method='numpy'): + """ + Load a FAST binary or ascii output file + + Parameters + ---------- + filename : str + filename + + Returns + ------- + data: ndarray + data values + info: dict + info containing: + - name: filename + - description: description of dataset + - attribute_names: list of attribute names + - attribute_units: list of attribute units + """ + + assert os.path.isfile(filename), "File, %s, does not exists" % filename + + ext = os.path.splitext(filename)[1] + if ext in ['.out']: + with open(filename, 'r') as f: + try: + f.readline() + except UnicodeDecodeError: + self.data, self.info = load_binary_output(filename) + + self.data, self.info = load_ascii_output(filename) + + elif ext == '.outb': + self.data, self.info, self.pack = load_binary_output(filename) + + else: + raise ValueError(f'File extension, {ext}, not supported') + + if method == 'pandas': + self.toDataFrame() + + + + def toDataFrame(self): + import pandas as pd + """ + Returns object into one DataFrame, or a dictionary of DataFrames + Borrowed from openfast_toolbox + """ + # --- Example (returning one DataFrame): + # return pd.DataFrame(data=np.zeros((10,2)),columns=['Col1','Col2']) + if self.info['attribute_units'] is not None: + if len(self.info['attribute_names'])!=len(self.info['attribute_units']): + cols=self.info['attribute_names'] + print('[WARN] not all columns have units! Skipping units') + else: + cols=[n+'_['+u.replace('sec','s')+']' for n,u in zip(self.info['attribute_names'],self.info['attribute_units'])] + else: + cols=self.info['attribute_names'] + if isinstance(self.data, pd.DataFrame): + df= self.data + df.columns=cols + else: + if len(cols)!=self.data.shape[1]: + raise Warning('Inconstistent number of columns between headers ({}) and data ({}) for file {}'.format(len(cols), self.data.shape[1], self.filename)) + df = pd.DataFrame(data=self.data,columns=cols) + + return df + + +def load_ascii_output(filename): + with open(filename) as f: + info = {} + info['name'] = os.path.splitext(os.path.basename(filename))[0] + header = [f.readline() for _ in range(8)] + info['description'] = header[4].strip() + info['attribute_names'] = header[6].split() + info['attribute_units'] = [unit[1:-1] for unit in header[7].split()] #removing "()" + data = np.array([line.split() for line in f.readlines()], dtype=float) + return data, info + +def load_binary_output(filename): + """ + Ported from ReadFASTbinary.m by Mads M Pedersen, DTU Wind + Info about ReadFASTbinary.m: + Author: Bonnie Jonkman, National Renewable Energy Laboratory + (c) 2012, National Renewable Energy Laboratory + Edited for FAST v7.02.00b-bjj 22-Oct-2012 + """ + + def fread(fid, n, type): + fmt, nbytes = {'uint8': ('B', 1), 'int16':('h', 2), 'int32':('i', 4), 'float32':('f', 4), 'float64':('d', 8)}[type] + return struct.unpack(fmt * n, fid.read(nbytes * n)) + + FileFmtID_WithTime = 1 # File identifiers used in FAST + FileFmtID_WithoutTime = 2 + FileFmtID_NoCompressWithoutTime = 3 + FileFmtID_ChanLen_In = 4 + + with open(filename, 'rb') as fid: + FileID = fread(fid, 1, 'int16')[0] # FAST output file format, INT(2) + + if FileID == FileFmtID_ChanLen_In: + LenName = fread(fid, 1, 'int16')[0] # Number of characters in channel names and units + else: + LenName = 10 # default number of characters per channel name + + + NumOutChans = fread(fid, 1, 'int32')[0] # The number of output channels, INT(4) + NT = fread(fid, 1, 'int32')[0] # The number of time steps, INT(4) + + if FileID == FileFmtID_WithTime: + TimeScl = fread(fid, 1, 'float64') # The time slopes for scaling, REAL(8) + TimeOff = fread(fid, 1, 'float64') # The time offsets for scaling, REAL(8) + else: + TimeOut1 = fread(fid, 1, 'float64') # The first time in the time series, REAL(8) + TimeIncr = fread(fid, 1, 'float64') # The time increment, REAL(8) + + if FileID != FileFmtID_NoCompressWithoutTime: + ColScl = fread(fid, NumOutChans, 'float32') # The channel slopes for scaling, REAL(4) + ColOff = fread(fid, NumOutChans, 'float32') # The channel offsets for scaling, REAL(4) + + LenDesc = fread(fid, 1, 'int32')[0] # The number of characters in the description string, INT(4) + DescStrASCII = fread(fid, LenDesc, 'uint8') # DescStr converted to ASCII + DescStr = "".join(map(chr, DescStrASCII)).strip() + + ChanName = [] # initialize the ChanName cell array + for iChan in range(NumOutChans + 1): + ChanNameASCII = fread(fid, LenName, 'uint8') # ChanName converted to numeric ASCII + ChanName.append("".join(map(chr, ChanNameASCII)).strip()) + + ChanUnit = [] # initialize the ChanUnit cell array + for iChan in range(NumOutChans + 1): + ChanUnitASCII = fread(fid, LenName, 'uint8') # ChanUnit converted to numeric ASCII + ChanUnit.append("".join(map(chr, ChanUnitASCII)).strip()[1:-1]) + + # get the channel time series + nPts = NT * NumOutChans # number of data points in the file + if FileID == FileFmtID_WithTime: + PackedTime = fread(fid, NT, 'int32') # read the time data + cnt = len(PackedTime) + if cnt < NT: + raise Exception('Could not read entire %s file: read %d of %d time values' % (filename, cnt, NT)) + + if FileID == FileFmtID_NoCompressWithoutTime: + PackedData = fread(fid, nPts, 'float64') # read the channel data + else: + PackedData = fread(fid, nPts, 'int16') # read the channel data + + cnt = len(PackedData) + if cnt < nPts: + raise Exception('Could not read entire %s file: read %d of %d values' % (filename, cnt, nPts)) + + if FileID == FileFmtID_NoCompressWithoutTime: + pack = np.array(PackedData).reshape(NT, NumOutChans) + data = pack + else: + # Scale the packed binary to real data + pack = np.array(PackedData).reshape(NT, NumOutChans) + data = (pack - ColOff) / ColScl + + if FileID == FileFmtID_WithTime: + time = (np.array(PackedTime) - TimeOff) / TimeScl; + else: + time = TimeOut1 + TimeIncr * np.arange(NT) + + data = np.concatenate([time.reshape(NT, 1), data], 1) + pack = np.concatenate([time.reshape(NT, 1), pack], 1) + + info = {'name': os.path.splitext(os.path.basename(filename))[0], + 'description': DescStr, + 'attribute_names': ChanName, + 'attribute_units': ChanUnit} + return data, info, pack + + + +if __name__=="__main__": + d,i = load_binary_output('Test18.T1.outb') + types = [] + for j in range(39): + types.append('f8') + print(type(i['attribute_names'])) + + print(np.dtype({'names':tuple(i['attribute_names']), 'formats': tuple(types) })) + print(type(d)) + print(np.array(d,dtype=np.dtype({'names':tuple(i['attribute_names']), 'formats': tuple(types) }))) + + print(i) + print(len(i['attribute_names'])) + print(np.shape(d)) diff --git a/openfast_python/openfast_io/FAST_post.py b/openfast_python/openfast_io/FAST_post.py new file mode 100644 index 0000000000..8e4b8b92b0 --- /dev/null +++ b/openfast_python/openfast_io/FAST_post.py @@ -0,0 +1,14 @@ +from __future__ import print_function +from rosco.toolbox.ofTools.fast_io.output_processing import output_processing +import rosco.toolbox + +def FAST_IO_timeseries(fname): + # interface to FAST_IO data load + try: + test = rosco.toolbox.__file__ + except: + print('WARNING: rosco.toolbox required for wisdem.aeroelasticse.FAST_post.FAST_IO_timeseries') + + fast_out = output_processing() + fast_data = fast_out.load_fast_out(fname, verbose=True)[0] + return fast_data diff --git a/openfast_python/openfast_io/FAST_reader.py b/openfast_python/openfast_io/FAST_reader.py new file mode 100644 index 0000000000..f9e909d726 --- /dev/null +++ b/openfast_python/openfast_io/FAST_reader.py @@ -0,0 +1,2557 @@ +import os, re, copy +import numpy as np +from functools import reduce +import operator +from openfast_io.FAST_vars_out import FstOutput + +try: + from rosco.toolbox.utilities import read_DISCON, load_from_txt + from rosco.toolbox import turbine as ROSCO_turbine + ROSCO = True +except: + ROSCO = False + + +def readline_filterComments(f): + read = True + while read: + line = f.readline().strip() + if len(line)>0: + if line[0] != '!': + read = False + return line + +def fix_path(name): + """ split a path, then reconstruct it using os.path.join """ + name = re.split("\\\|/", name) + new = name[0] + for i in range(1,len(name)): + new = os.path.join(new, name[i]) + return new + +def read_array(f,len,array_type=str): + strings = re.split(',| ',f.readline().strip()) + while '' in strings: # remove empties + strings.remove('') + + arr = strings[:len] # select len strings + + if array_type==str: + arr = [ar.replace('"','') for ar in arr] # remove quotes and commas + elif array_type==float: + arr = [float_read(ar) for ar in arr] + elif array_type==int: + arr = [int_read(ar) for ar in arr] + elif array_type==bool: + arr = [bool_read(ar) for ar in arr] + else: + raise Exception(f"read_array with type {str(array_type)} not currently supported") + + return arr + +def bool_read(text): + # convert true/false strings to boolean + if 'default' in text.lower(): + return str(text) + else: + if text.lower() == 'true': + return True + else: + return False + +def float_read(text): + # return float with error handing for "default" values + if 'default' in text.lower(): + return str(text) + else: + try: + return float(text) + except: + return str(text) + +def int_read(text): + # return int with error handing for "default" values + if 'default' in text.lower(): + return str(text) + else: + try: + return int(text) + except: + return str(text) + +class InputReader_OpenFAST(object): + """ OpenFAST input file reader """ + + def __init__(self): + + self.FAST_InputFile = None # FAST input file (ext=.fst) + self.FAST_directory = None # Path to fst directory files + self.path2dll = None # Path to dll file + self.fst_vt = {} + self.fst_vt['Fst'] = {} + self.fst_vt['outlist'] = FstOutput + self.fst_vt['ElastoDyn'] = {} + self.fst_vt['ElastoDynBlade'] = {} + self.fst_vt['ElastoDynTower'] = {} + self.fst_vt['InflowWind'] = {} + self.fst_vt['AeroDyn15'] = {} + self.fst_vt['AeroDyn14'] = {} + self.fst_vt['AeroDynBlade'] = {} + self.fst_vt['AeroDynTower'] = {} + self.fst_vt['AeroDynPolar'] = {} + self.fst_vt['ServoDyn'] = {} + self.fst_vt['DISCON_in'] = {} + self.fst_vt['HydroDyn'] = {} + self.fst_vt['MoorDyn'] = {} + self.fst_vt['SubDyn'] = {} + self.fst_vt['MAP'] = {} + self.fst_vt['BeamDyn'] = {} + self.fst_vt['BeamDynBlade'] = {} + + def set_outlist(self, vartree_head, channel_list): + """ Loop through a list of output channel names, recursively set them to True in the nested outlist dict """ + + # given a list of nested dictionary keys, return the dict at that point + def get_dict(vartree, branch): + return reduce(operator.getitem, branch, vartree_head) + # given a list of nested dictionary keys, set the value of the dict at that point + def set_dict(vartree, branch, val): + get_dict(vartree, branch[:-1])[branch[-1]] = val + # recursively loop through outlist dictionaries to set output channels + def loop_dict(vartree, search_var, branch): + for var in vartree.keys(): + branch_i = copy.copy(branch) + branch_i.append(var) + if type(vartree[var]) is dict: + loop_dict(vartree[var], search_var, branch_i) + else: + if var == search_var: + set_dict(vartree_head, branch_i, True) + + # loop through outchannels on this line, loop through outlist dicts to set to True + for var in channel_list: + var = var.replace(' ', '') + loop_dict(vartree_head, var, []) + + def read_MainInput(self): + # Main FAST v8.16-v8.17 Input File + # Currently no differences between FASTv8.16 and OpenFAST. + fst_file = os.path.join(self.FAST_directory, self.FAST_InputFile) + f = open(fst_file) + + # Header of .fst file + f.readline() + self.fst_vt['description'] = f.readline().rstrip() + + # Simulation Control (fst_sim_ctrl) + f.readline() + self.fst_vt['Fst']['Echo'] = bool_read(f.readline().split()[0]) + self.fst_vt['Fst']['AbortLevel'] = f.readline().split()[0][1:-1] + self.fst_vt['Fst']['TMax'] = float_read(f.readline().split()[0]) + self.fst_vt['Fst']['DT'] = float_read(f.readline().split()[0]) + self.fst_vt['Fst']['InterpOrder'] = int(f.readline().split()[0]) + self.fst_vt['Fst']['NumCrctn'] = int(f.readline().split()[0]) + self.fst_vt['Fst']['DT_UJac'] = float_read(f.readline().split()[0]) + self.fst_vt['Fst']['UJacSclFact'] = float_read(f.readline().split()[0]) + + # Feature Switches and Flags (ftr_swtchs_flgs) + f.readline() + self.fst_vt['Fst']['CompElast'] = int(f.readline().split()[0]) + self.fst_vt['Fst']['CompInflow'] = int(f.readline().split()[0]) + self.fst_vt['Fst']['CompAero'] = int(f.readline().split()[0]) + self.fst_vt['Fst']['CompServo'] = int(f.readline().split()[0]) + self.fst_vt['Fst']['CompHydro'] = int(f.readline().split()[0]) + self.fst_vt['Fst']['CompSub'] = int(f.readline().split()[0]) + self.fst_vt['Fst']['CompMooring'] = int(f.readline().split()[0]) + self.fst_vt['Fst']['CompIce'] = int(f.readline().split()[0]) + self.fst_vt['Fst']['MHK'] = int(f.readline().split()[0]) + + # Environmental conditions + f.readline() + self.fst_vt['Fst']['Gravity'] = float_read(f.readline().split()[0]) + self.fst_vt['Fst']['AirDens'] = float_read(f.readline().split()[0]) + self.fst_vt['Fst']['WtrDens'] = float_read(f.readline().split()[0]) + self.fst_vt['Fst']['KinVisc'] = float_read(f.readline().split()[0]) + self.fst_vt['Fst']['SpdSound'] = float_read(f.readline().split()[0]) + self.fst_vt['Fst']['Patm'] = float_read(f.readline().split()[0]) + self.fst_vt['Fst']['Pvap'] = float_read(f.readline().split()[0]) + self.fst_vt['Fst']['WtrDpth'] = float_read(f.readline().split()[0]) + self.fst_vt['Fst']['MSL2SWL'] = float_read(f.readline().split()[0]) + + # Input Files (input_files) + f.readline() + self.fst_vt['Fst']['EDFile'] = f.readline().split()[0][1:-1] + self.fst_vt['Fst']['BDBldFile(1)'] = f.readline().split()[0][1:-1] + self.fst_vt['Fst']['BDBldFile(2)'] = f.readline().split()[0][1:-1] + self.fst_vt['Fst']['BDBldFile(3)'] = f.readline().split()[0][1:-1] + self.fst_vt['Fst']['InflowFile'] = f.readline().split()[0][1:-1] + self.fst_vt['Fst']['AeroFile'] = f.readline().split()[0][1:-1] + self.fst_vt['Fst']['ServoFile'] = f.readline().split()[0][1:-1] + self.fst_vt['Fst']['HydroFile'] = f.readline().split()[0][1:-1] + self.fst_vt['Fst']['SubFile'] = f.readline().split()[0][1:-1] + self.fst_vt['Fst']['MooringFile'] = f.readline().split()[0][1:-1] + self.fst_vt['Fst']['IceFile'] = f.readline().split()[0][1:-1] + + # FAST Output Parameters (fst_output_params) + f.readline() + self.fst_vt['Fst']['SumPrint'] = bool_read(f.readline().split()[0]) + self.fst_vt['Fst']['SttsTime'] = float_read(f.readline().split()[0]) + self.fst_vt['Fst']['ChkptTime'] = float_read(f.readline().split()[0]) + self.fst_vt['Fst']['DT_Out'] = float_read(f.readline().split()[0]) + self.fst_vt['Fst']['TStart'] = float_read(f.readline().split()[0]) + self.fst_vt['Fst']['OutFileFmt'] = int(f.readline().split()[0]) + self.fst_vt['Fst']['TabDelim'] = bool_read(f.readline().split()[0]) + self.fst_vt['Fst']['OutFmt'] = f.readline().split()[0][1:-1] + + # Fst + f.readline() + self.fst_vt['Fst']['Linearize'] = f.readline().split()[0] + self.fst_vt['Fst']['CalcSteady'] = f.readline().split()[0] + self.fst_vt['Fst']['TrimCase'] = f.readline().split()[0] + self.fst_vt['Fst']['TrimTol'] = f.readline().split()[0] + self.fst_vt['Fst']['TrimGain'] = f.readline().split()[0] + self.fst_vt['Fst']['Twr_Kdmp'] = f.readline().split()[0] + self.fst_vt['Fst']['Bld_Kdmp'] = f.readline().split()[0] + self.fst_vt['Fst']['NLinTimes'] = f.readline().split()[0] + self.fst_vt['Fst']['LinTimes'] = re.findall(r'[^,\s]+', f.readline())[0:2] + self.fst_vt['Fst']['LinInputs'] = f.readline().split()[0] + self.fst_vt['Fst']['LinOutputs'] = f.readline().split()[0] + self.fst_vt['Fst']['LinOutJac'] = f.readline().split()[0] + self.fst_vt['Fst']['LinOutMod'] = f.readline().split()[0] + + # Visualization () + f.readline() + self.fst_vt['Fst']['WrVTK'] = int(f.readline().split()[0]) + self.fst_vt['Fst']['VTK_type'] = int(f.readline().split()[0]) + self.fst_vt['Fst']['VTK_fields'] = bool_read(f.readline().split()[0]) + self.fst_vt['Fst']['VTK_fps'] = float_read(f.readline().split()[0]) + + f.close() + + # File paths + self.fst_vt['Fst']['EDFile_path'] = os.path.split(self.fst_vt['Fst']['EDFile'])[0] + self.fst_vt['Fst']['BDBldFile(1_path)'] = os.path.split(self.fst_vt['Fst']['BDBldFile(1)'])[0] + self.fst_vt['Fst']['BDBldFile(2_path)'] = os.path.split(self.fst_vt['Fst']['BDBldFile(2)'])[0] + self.fst_vt['Fst']['BDBldFile(3_path)'] = os.path.split(self.fst_vt['Fst']['BDBldFile(3)'])[0] + self.fst_vt['Fst']['InflowFile_path'] = os.path.split(self.fst_vt['Fst']['InflowFile'])[0] + self.fst_vt['Fst']['AeroFile_path'] = os.path.split(self.fst_vt['Fst']['AeroFile'])[0] + self.fst_vt['Fst']['ServoFile_path'] = os.path.split(self.fst_vt['Fst']['ServoFile'])[0] + self.fst_vt['Fst']['HydroFile_path'] = os.path.split(self.fst_vt['Fst']['HydroFile'])[0] + self.fst_vt['Fst']['SubFile_path'] = os.path.split(self.fst_vt['Fst']['SubFile'])[0] + self.fst_vt['Fst']['MooringFile_path'] = os.path.split(self.fst_vt['Fst']['MooringFile'])[0] + self.fst_vt['Fst']['IceFile_path'] = os.path.split(self.fst_vt['Fst']['IceFile'])[0] + + def read_ElastoDyn(self, ed_file): + # ElastoDyn v1.03 Input File + # Currently no differences between FASTv8.16 and OpenFAST. + + f = open(ed_file) + + f.readline() + f.readline() + + # Simulation Control (ed_sim_ctrl) + f.readline() + self.fst_vt['ElastoDyn']['Echo'] = bool_read(f.readline().split()[0]) + self.fst_vt['ElastoDyn']['Method'] = int(f.readline().split()[0]) + self.fst_vt['ElastoDyn']['DT'] = float_read(f.readline().split()[0]) + + # Degrees of Freedom (dof) + f.readline() + self.fst_vt['ElastoDyn']['FlapDOF1'] = bool_read(f.readline().split()[0]) + self.fst_vt['ElastoDyn']['FlapDOF2'] = bool_read(f.readline().split()[0]) + self.fst_vt['ElastoDyn']['EdgeDOF'] = bool_read(f.readline().split()[0]) + self.fst_vt['ElastoDyn']['TeetDOF'] = bool_read(f.readline().split()[0]) + self.fst_vt['ElastoDyn']['DrTrDOF'] = bool_read(f.readline().split()[0]) + self.fst_vt['ElastoDyn']['GenDOF'] = bool_read(f.readline().split()[0]) + self.fst_vt['ElastoDyn']['YawDOF'] = bool_read(f.readline().split()[0]) + self.fst_vt['ElastoDyn']['TwFADOF1'] = bool_read(f.readline().split()[0]) + self.fst_vt['ElastoDyn']['TwFADOF2'] = bool_read(f.readline().split()[0]) + self.fst_vt['ElastoDyn']['TwSSDOF1'] = bool_read(f.readline().split()[0]) + self.fst_vt['ElastoDyn']['TwSSDOF2'] = bool_read(f.readline().split()[0]) + self.fst_vt['ElastoDyn']['PtfmSgDOF'] = bool_read(f.readline().split()[0]) + self.fst_vt['ElastoDyn']['PtfmSwDOF'] = bool_read(f.readline().split()[0]) + self.fst_vt['ElastoDyn']['PtfmHvDOF'] = bool_read(f.readline().split()[0]) + self.fst_vt['ElastoDyn']['PtfmRDOF'] = bool_read(f.readline().split()[0]) + self.fst_vt['ElastoDyn']['PtfmPDOF'] = bool_read(f.readline().split()[0]) + self.fst_vt['ElastoDyn']['PtfmYDOF'] = bool_read(f.readline().split()[0]) + + # Initial Conditions (init_conds) + f.readline() + self.fst_vt['ElastoDyn']['OoPDefl'] = float_read(f.readline().split()[0]) + self.fst_vt['ElastoDyn']['IPDefl'] = float_read(f.readline().split()[0]) + self.fst_vt['ElastoDyn']['BlPitch1'] = float_read(f.readline().split()[0]) + self.fst_vt['ElastoDyn']['BlPitch2'] = float_read(f.readline().split()[0]) + self.fst_vt['ElastoDyn']['BlPitch3'] = float_read(f.readline().split()[0]) + self.fst_vt['ElastoDyn']['TeetDefl'] = float_read(f.readline().split()[0]) + self.fst_vt['ElastoDyn']['Azimuth'] = float_read(f.readline().split()[0]) + self.fst_vt['ElastoDyn']['RotSpeed'] = float_read(f.readline().split()[0]) + self.fst_vt['ElastoDyn']['NacYaw'] = float_read(f.readline().split()[0]) + self.fst_vt['ElastoDyn']['TTDspFA'] = float_read(f.readline().split()[0]) + self.fst_vt['ElastoDyn']['TTDspSS'] = float_read(f.readline().split()[0]) + self.fst_vt['ElastoDyn']['PtfmSurge'] = float_read(f.readline().split()[0]) + self.fst_vt['ElastoDyn']['PtfmSway'] = float_read(f.readline().split()[0]) + self.fst_vt['ElastoDyn']['PtfmHeave'] = float_read(f.readline().split()[0]) + self.fst_vt['ElastoDyn']['PtfmRoll'] = float_read(f.readline().split()[0]) + self.fst_vt['ElastoDyn']['PtfmPitch'] = float_read(f.readline().split()[0]) + self.fst_vt['ElastoDyn']['PtfmYaw'] = float_read(f.readline().split()[0]) + + + # Turbine Configuration (turb_config) + f.readline() + self.fst_vt['ElastoDyn']['NumBl'] = int(f.readline().split()[0]) + self.fst_vt['ElastoDyn']['TipRad'] = float_read(f.readline().split()[0]) + self.fst_vt['ElastoDyn']['HubRad'] = float_read(f.readline().split()[0]) + self.fst_vt['ElastoDyn']['PreCone(1)'] = float_read(f.readline().split()[0]) + self.fst_vt['ElastoDyn']['PreCone(2)'] = float_read(f.readline().split()[0]) + self.fst_vt['ElastoDyn']['PreCone(3)'] = float_read(f.readline().split()[0]) + self.fst_vt['ElastoDyn']['HubCM'] = float_read(f.readline().split()[0]) + self.fst_vt['ElastoDyn']['UndSling'] = float_read(f.readline().split()[0]) + self.fst_vt['ElastoDyn']['Delta3'] = float_read(f.readline().split()[0]) + self.fst_vt['ElastoDyn']['AzimB1Up'] = float_read(f.readline().split()[0]) + self.fst_vt['ElastoDyn']['OverHang'] = float_read(f.readline().split()[0]) + self.fst_vt['ElastoDyn']['ShftGagL'] = float_read(f.readline().split()[0]) + self.fst_vt['ElastoDyn']['ShftTilt'] = float_read(f.readline().split()[0]) + self.fst_vt['ElastoDyn']['NacCMxn'] = float_read(f.readline().split()[0]) + self.fst_vt['ElastoDyn']['NacCMyn'] = float_read(f.readline().split()[0]) + self.fst_vt['ElastoDyn']['NacCMzn'] = float_read(f.readline().split()[0]) + self.fst_vt['ElastoDyn']['NcIMUxn'] = float_read(f.readline().split()[0]) + self.fst_vt['ElastoDyn']['NcIMUyn'] = float_read(f.readline().split()[0]) + self.fst_vt['ElastoDyn']['NcIMUzn'] = float_read(f.readline().split()[0]) + self.fst_vt['ElastoDyn']['Twr2Shft'] = float_read(f.readline().split()[0]) + self.fst_vt['ElastoDyn']['TowerHt'] = float_read(f.readline().split()[0]) + self.fst_vt['ElastoDyn']['TowerBsHt'] = float_read(f.readline().split()[0]) + self.fst_vt['ElastoDyn']['PtfmCMxt'] = float_read(f.readline().split()[0]) + self.fst_vt['ElastoDyn']['PtfmCMyt'] = float_read(f.readline().split()[0]) + self.fst_vt['ElastoDyn']['PtfmCMzt'] = float_read(f.readline().split()[0]) + self.fst_vt['ElastoDyn']['PtfmRefzt'] = float_read(f.readline().split()[0]) + + # Mass and Inertia (mass_inertia) + f.readline() + self.fst_vt['ElastoDyn']['TipMass(1)'] = float_read(f.readline().split()[0]) + self.fst_vt['ElastoDyn']['TipMass(2)'] = float_read(f.readline().split()[0]) + self.fst_vt['ElastoDyn']['TipMass(3)'] = float_read(f.readline().split()[0]) + self.fst_vt['ElastoDyn']['HubMass'] = float_read(f.readline().split()[0]) + self.fst_vt['ElastoDyn']['HubIner'] = float_read(f.readline().split()[0]) + self.fst_vt['ElastoDyn']['GenIner'] = float_read(f.readline().split()[0]) + self.fst_vt['ElastoDyn']['NacMass'] = float_read(f.readline().split()[0]) + self.fst_vt['ElastoDyn']['NacYIner'] = float_read(f.readline().split()[0]) + self.fst_vt['ElastoDyn']['YawBrMass'] = float_read(f.readline().split()[0]) + self.fst_vt['ElastoDyn']['PtfmMass'] = float_read(f.readline().split()[0]) + self.fst_vt['ElastoDyn']['PtfmRIner'] = float_read(f.readline().split()[0]) + self.fst_vt['ElastoDyn']['PtfmPIner'] = float_read(f.readline().split()[0]) + self.fst_vt['ElastoDyn']['PtfmYIner'] = float_read(f.readline().split()[0]) + + # ElastoDyn Blade (blade_struc) + f.readline() + self.fst_vt['ElastoDyn']['BldNodes'] = int(f.readline().split()[0]) + self.fst_vt['ElastoDyn']['BldFile1'] = f.readline().split()[0][1:-1] + self.fst_vt['ElastoDyn']['BldFile2'] = f.readline().split()[0][1:-1] + self.fst_vt['ElastoDyn']['BldFile3'] = f.readline().split()[0][1:-1] + + # Rotor-Teeter (rotor_teeter) + f.readline() + self.fst_vt['ElastoDyn']['TeetMod'] = int(f.readline().split()[0]) + self.fst_vt['ElastoDyn']['TeetDmpP'] = float_read(f.readline().split()[0]) + self.fst_vt['ElastoDyn']['TeetDmp'] = float_read(f.readline().split()[0]) + self.fst_vt['ElastoDyn']['TeetCDmp'] = float_read(f.readline().split()[0]) + self.fst_vt['ElastoDyn']['TeetSStP'] = float_read(f.readline().split()[0]) + self.fst_vt['ElastoDyn']['TeetHStP'] = float_read(f.readline().split()[0]) + self.fst_vt['ElastoDyn']['TeetSSSp'] = float_read(f.readline().split()[0]) + self.fst_vt['ElastoDyn']['TeetHSSp'] = float_read(f.readline().split()[0]) + + # Drivetrain (drivetrain) + f.readline() + self.fst_vt['ElastoDyn']['GBoxEff'] = float_read(f.readline().split()[0]) + self.fst_vt['ElastoDyn']['GBRatio'] = float_read(f.readline().split()[0]) + self.fst_vt['ElastoDyn']['DTTorSpr'] = float_read(f.readline().split()[0]) + self.fst_vt['ElastoDyn']['DTTorDmp'] = float_read(f.readline().split()[0]) + + # Furling (furling) + f.readline() + self.fst_vt['ElastoDyn']['Furling'] = bool_read(f.readline().split()[0]) + self.fst_vt['ElastoDyn']['FurlFile'] = f.readline().split()[0][1:-1] + + # Tower (tower) + f.readline() + self.fst_vt['ElastoDyn']['TwrNodes'] = int(f.readline().split()[0]) + self.fst_vt['ElastoDyn']['TwrFile'] = f.readline().split()[0][1:-1] + + # ED Output Parameters (ed_out_params) + f.readline() + self.fst_vt['ElastoDyn']['SumPrint'] = bool_read(f.readline().split()[0]) + self.fst_vt['ElastoDyn']['OutFile'] = int(f.readline().split()[0]) + self.fst_vt['ElastoDyn']['TabDelim'] = bool_read(f.readline().split()[0]) + self.fst_vt['ElastoDyn']['OutFmt'] = f.readline().split()[0][1:-1] + self.fst_vt['ElastoDyn']['TStart'] = float_read(f.readline().split()[0]) + self.fst_vt['ElastoDyn']['DecFact'] = int(f.readline().split()[0]) + self.fst_vt['ElastoDyn']['NTwGages'] = int(f.readline().split()[0]) + if self.fst_vt['ElastoDyn']['NTwGages'] != 0: #loop over elements if there are gauges to be added, otherwise assign directly + self.fst_vt['ElastoDyn']['TwrGagNd'] = f.readline().strip().split()[:self.fst_vt['ElastoDyn']['NTwGages']] + for i, bldgag in enumerate(self.fst_vt['ElastoDyn']['TwrGagNd']): + self.fst_vt['ElastoDyn']['TwrGagNd'][i] = int(bldgag.strip(',')) + else: + self.fst_vt['ElastoDyn']['TwrGagNd'] = 0 + f.readline() + self.fst_vt['ElastoDyn']['NBlGages'] = int(f.readline().split()[0]) + if self.fst_vt['ElastoDyn']['NBlGages'] != 0: + self.fst_vt['ElastoDyn']['BldGagNd'] = f.readline().strip().split()[:self.fst_vt['ElastoDyn']['NBlGages']] + for i, bldgag in enumerate(self.fst_vt['ElastoDyn']['BldGagNd']): + self.fst_vt['ElastoDyn']['BldGagNd'][i] = int(bldgag.strip(',')) + else: + self.fst_vt['ElastoDyn']['BldGagNd'] = 0 + f.readline() + + # Loop through output channel lines + f.readline() + data = f.readline() + if data != '': + while data.split()[0] != 'END': + channels = data.split('"') + channel_list = channels[1].split(',') + self.set_outlist(self.fst_vt['outlist']['ElastoDyn'], channel_list) + + data = f.readline() + + # ElastoDyn optional outlist + try: + f.readline() + self.fst_vt['ElastoDyn']['BldNd_BladesOut'] = int(f.readline().split()[0]) + self.fst_vt['ElastoDyn']['BldNd_BlOutNd'] = f.readline().split()[0] + + f.readline() + data = f.readline() + while data.split()[0] != 'END': + if data.find('"')>=0: + channels = data.split('"') + opt_channel_list = channels[1].split(',') + else: + row_string = data.split(',') + if len(row_string)==1: + opt_channel_list = row_string[0].split('\n')[0] + else: + opt_channel_list = row_string + self.set_outlist(self.fst_vt['outlist']['ElastoDyn_Nodes'], opt_channel_list) + data = f.readline() + except: + # The optinal outlist does not exist. + None + + f.close() + + def read_ElastoDynBlade(self, blade_file): + # ElastoDyn v1.00 Blade Input File + # Currently no differences between FASTv8.16 and OpenFAST. + + f = open(blade_file) + # print blade_file + f.readline() + f.readline() + f.readline() + + # Blade Parameters + self.fst_vt['ElastoDynBlade']['NBlInpSt'] = int(f.readline().split()[0]) + self.fst_vt['ElastoDynBlade']['BldFlDmp1'] = float_read(f.readline().split()[0]) + self.fst_vt['ElastoDynBlade']['BldFlDmp2'] = float_read(f.readline().split()[0]) + self.fst_vt['ElastoDynBlade']['BldEdDmp1'] = float_read(f.readline().split()[0]) + + # Blade Adjustment Factors + f.readline() + self.fst_vt['ElastoDynBlade']['FlStTunr1'] = float_read(f.readline().split()[0]) + self.fst_vt['ElastoDynBlade']['FlStTunr2'] = float_read(f.readline().split()[0]) + self.fst_vt['ElastoDynBlade']['AdjBlMs'] = float_read(f.readline().split()[0]) + self.fst_vt['ElastoDynBlade']['AdjFlSt'] = float_read(f.readline().split()[0]) + self.fst_vt['ElastoDynBlade']['AdjEdSt'] = float_read(f.readline().split()[0]) + + # Distrilbuted Blade Properties + f.readline() + f.readline() + f.readline() + self.fst_vt['ElastoDynBlade']['BlFract'] = [None] * self.fst_vt['ElastoDynBlade']['NBlInpSt'] + self.fst_vt['ElastoDynBlade']['PitchAxis'] = [None] * self.fst_vt['ElastoDynBlade']['NBlInpSt'] + self.fst_vt['ElastoDynBlade']['StrcTwst'] = [None] * self.fst_vt['ElastoDynBlade']['NBlInpSt'] + self.fst_vt['ElastoDynBlade']['BMassDen'] = [None] * self.fst_vt['ElastoDynBlade']['NBlInpSt'] + self.fst_vt['ElastoDynBlade']['FlpStff'] = [None] * self.fst_vt['ElastoDynBlade']['NBlInpSt'] + self.fst_vt['ElastoDynBlade']['EdgStff'] = [None] * self.fst_vt['ElastoDynBlade']['NBlInpSt'] + + for i in range(self.fst_vt['ElastoDynBlade']['NBlInpSt']): + data = f.readline().split() + self.fst_vt['ElastoDynBlade']['BlFract'][i] = float_read(data[0]) + self.fst_vt['ElastoDynBlade']['PitchAxis'][i] = float_read(data[1]) + self.fst_vt['ElastoDynBlade']['StrcTwst'][i] = float_read(data[2]) + self.fst_vt['ElastoDynBlade']['BMassDen'][i] = float_read(data[3]) + self.fst_vt['ElastoDynBlade']['FlpStff'][i] = float_read(data[4]) + self.fst_vt['ElastoDynBlade']['EdgStff'][i] = float_read(data[5]) + + f.readline() + self.fst_vt['ElastoDynBlade']['BldFl1Sh'] = [None] * 5 + self.fst_vt['ElastoDynBlade']['BldFl2Sh'] = [None] * 5 + self.fst_vt['ElastoDynBlade']['BldEdgSh'] = [None] * 5 + for i in range(5): + self.fst_vt['ElastoDynBlade']['BldFl1Sh'][i] = float_read(f.readline().split()[0]) + for i in range(5): + self.fst_vt['ElastoDynBlade']['BldFl2Sh'][i] = float_read(f.readline().split()[0]) + for i in range(5): + self.fst_vt['ElastoDynBlade']['BldEdgSh'][i] = float_read(f.readline().split()[0]) + + f.close() + + def read_ElastoDynTower(self, tower_file): + # ElastoDyn v1.00 Tower Input Files + # Currently no differences between FASTv8.16 and OpenFAST. + + f = open(tower_file) + + f.readline() + f.readline() + + # General Tower Paramters + f.readline() + self.fst_vt['ElastoDynTower']['NTwInpSt'] = int(f.readline().split()[0]) + self.fst_vt['ElastoDynTower']['TwrFADmp1'] = float_read(f.readline().split()[0]) + self.fst_vt['ElastoDynTower']['TwrFADmp2'] = float_read(f.readline().split()[0]) + self.fst_vt['ElastoDynTower']['TwrSSDmp1'] = float_read(f.readline().split()[0]) + self.fst_vt['ElastoDynTower']['TwrSSDmp2'] = float_read(f.readline().split()[0]) + + # Tower Adjustment Factors + f.readline() + self.fst_vt['ElastoDynTower']['FAStTunr1'] = float_read(f.readline().split()[0]) + self.fst_vt['ElastoDynTower']['FAStTunr2'] = float_read(f.readline().split()[0]) + self.fst_vt['ElastoDynTower']['SSStTunr1'] = float_read(f.readline().split()[0]) + self.fst_vt['ElastoDynTower']['SSStTunr2'] = float_read(f.readline().split()[0]) + self.fst_vt['ElastoDynTower']['AdjTwMa'] = float_read(f.readline().split()[0]) + self.fst_vt['ElastoDynTower']['AdjFASt'] = float_read(f.readline().split()[0]) + self.fst_vt['ElastoDynTower']['AdjSSSt'] = float_read(f.readline().split()[0]) + + # Distributed Tower Properties + f.readline() + f.readline() + f.readline() + self.fst_vt['ElastoDynTower']['HtFract'] = [None] * self.fst_vt['ElastoDynTower']['NTwInpSt'] + self.fst_vt['ElastoDynTower']['TMassDen'] = [None] * self.fst_vt['ElastoDynTower']['NTwInpSt'] + self.fst_vt['ElastoDynTower']['TwFAStif'] = [None] * self.fst_vt['ElastoDynTower']['NTwInpSt'] + self.fst_vt['ElastoDynTower']['TwSSStif'] = [None] * self.fst_vt['ElastoDynTower']['NTwInpSt'] + + for i in range(self.fst_vt['ElastoDynTower']['NTwInpSt']): + data = f.readline().split() + self.fst_vt['ElastoDynTower']['HtFract'][i] = float_read(data[0]) + self.fst_vt['ElastoDynTower']['TMassDen'][i] = float_read(data[1]) + self.fst_vt['ElastoDynTower']['TwFAStif'][i] = float_read(data[2]) + self.fst_vt['ElastoDynTower']['TwSSStif'][i] = float_read(data[3]) + + # Tower Mode Shapes + f.readline() + self.fst_vt['ElastoDynTower']['TwFAM1Sh'] = [None] * 5 + self.fst_vt['ElastoDynTower']['TwFAM2Sh'] = [None] * 5 + for i in range(5): + self.fst_vt['ElastoDynTower']['TwFAM1Sh'][i] = float_read(f.readline().split()[0]) + for i in range(5): + self.fst_vt['ElastoDynTower']['TwFAM2Sh'][i] = float_read(f.readline().split()[0]) + f.readline() + self.fst_vt['ElastoDynTower']['TwSSM1Sh'] = [None] * 5 + self.fst_vt['ElastoDynTower']['TwSSM2Sh'] = [None] * 5 + for i in range(5): + self.fst_vt['ElastoDynTower']['TwSSM1Sh'][i] = float_read(f.readline().split()[0]) + for i in range(5): + self.fst_vt['ElastoDynTower']['TwSSM2Sh'][i] = float_read(f.readline().split()[0]) + + f.close() + + def read_BeamDyn(self, bd_file): + # BeamDyn Input File + f = open(bd_file) + f.readline() + f.readline() + f.readline() + # ---------------------- SIMULATION CONTROL -------------------------------------- + self.fst_vt['BeamDyn']['Echo'] = bool_read(f.readline().split()[0]) + self.fst_vt['BeamDyn']['QuasiStaticInit'] = bool_read(f.readline().split()[0]) + self.fst_vt['BeamDyn']['rhoinf'] = float_read(f.readline().split()[0]) + self.fst_vt['BeamDyn']['quadrature'] = int_read(f.readline().split()[0]) + self.fst_vt['BeamDyn']['refine'] = int_read(f.readline().split()[0]) + self.fst_vt['BeamDyn']['n_fact'] = int_read(f.readline().split()[0]) + self.fst_vt['BeamDyn']['DTBeam'] = float_read(f.readline().split()[0]) + self.fst_vt['BeamDyn']['load_retries'] = int_read(f.readline().split()[0]) + self.fst_vt['BeamDyn']['NRMax'] = int_read(f.readline().split()[0]) + self.fst_vt['BeamDyn']['stop_tol'] = float_read(f.readline().split()[0]) + self.fst_vt['BeamDyn']['tngt_stf_fd'] = bool_read(f.readline().split()[0]) + self.fst_vt['BeamDyn']['tngt_stf_comp'] = bool_read(f.readline().split()[0]) + self.fst_vt['BeamDyn']['tngt_stf_pert'] = float_read(f.readline().split()[0]) + self.fst_vt['BeamDyn']['tngt_stf_difftol'] = float_read(f.readline().split()[0]) + self.fst_vt['BeamDyn']['RotStates'] = bool_read(f.readline().split()[0]) + f.readline() + #---------------------- GEOMETRY PARAMETER -------------------------------------- + self.fst_vt['BeamDyn']['member_total'] = int_read(f.readline().split()[0]) + self.fst_vt['BeamDyn']['kp_total'] = int_read(f.readline().split()[0]) + self.fst_vt['BeamDyn']['members'] = [] + for i in range(self.fst_vt['BeamDyn']['member_total']): + ln = f.readline().split() + n_pts_i = int(ln[1]) + member_i = {} + member_i['kp_xr'] = [None]*n_pts_i + member_i['kp_yr'] = [None]*n_pts_i + member_i['kp_zr'] = [None]*n_pts_i + member_i['initial_twist'] = [None]*n_pts_i + f.readline() + f.readline() + for j in range(n_pts_i): + ln = f.readline().split() + member_i['kp_xr'][j] = float(ln[0]) + member_i['kp_yr'][j] = float(ln[1]) + member_i['kp_zr'][j] = float(ln[2]) + member_i['initial_twist'][j] = float(ln[3]) + + self.fst_vt['BeamDyn']['members'].append(member_i) + #---------------------- MESH PARAMETER ------------------------------------------ + f.readline() + self.fst_vt['BeamDyn']['order_elem'] = int_read(f.readline().split()[0]) + #---------------------- MATERIAL PARAMETER -------------------------------------- + f.readline() + self.fst_vt['BeamDyn']['BldFile'] = f.readline().split()[0].replace('"','').replace("'",'') + #---------------------- PITCH ACTUATOR PARAMETERS ------------------------------- + f.readline() + self.fst_vt['BeamDyn']['UsePitchAct'] = bool_read(f.readline().split()[0]) + self.fst_vt['BeamDyn']['PitchJ'] = float_read(f.readline().split()[0]) + self.fst_vt['BeamDyn']['PitchK'] = float_read(f.readline().split()[0]) + self.fst_vt['BeamDyn']['PitchC'] = float_read(f.readline().split()[0]) + #---------------------- OUTPUTS ------------------------------------------------- + f.readline() + self.fst_vt['BeamDyn']['SumPrint'] = bool_read(f.readline().split()[0]) + self.fst_vt['BeamDyn']['OutFmt'] = f.readline().split()[0][1:-1] + self.fst_vt['BeamDyn']['NNodeOuts'] = int_read(f.readline().split()[0]) + self.fst_vt['BeamDyn']['OutNd'] = [idx.strip() for idx in f.readline().split('NNodeOuts')[0].split(',')] + # BeamDyn Outlist + f.readline() + data = f.readline() + while data.split()[0] != 'END': + channels = data.split('"') + channel_list = channels[1].split(',') + self.set_outlist(self.fst_vt['outlist']['BeamDyn'], channel_list) + data = f.readline() + + # BeamDyn optional outlist + try: + f.readline() + # self.fst_vt['BeamDyn']['BldNd_BladesOut'] = int(f.readline().split()[0]) + self.fst_vt['BeamDyn']['BldNd_BlOutNd'] = f.readline().split()[0] + + f.readline() + data = f.readline() + while data.split()[0] != 'END': + if data.find('"')>=0: + channels = data.split('"') + opt_channel_list = channels[1].split(',') + else: + row_string = data.split(',') + if len(row_string)==1: + opt_channel_list = row_string[0].split('\n')[0] + else: + opt_channel_list = row_string + self.set_outlist(self.fst_vt['outlist']['BeamDyn_Nodes'], opt_channel_list) + data = f.readline() + except: + # The optinal outlist does not exist. + None + + f.close() + + beamdyn_blade_file = os.path.join(os.path.dirname(bd_file), self.fst_vt['BeamDyn']['BldFile']) + self.read_BeamDynBlade(beamdyn_blade_file) + + def read_BeamDynBlade(self, beamdyn_blade_file): + # BeamDyn Blade + + f = open(beamdyn_blade_file) + + f.readline() + f.readline() + f.readline() + #---------------------- BLADE PARAMETERS -------------------------------------- + self.fst_vt['BeamDynBlade']['station_total'] = int_read(f.readline().split()[0]) + self.fst_vt['BeamDynBlade']['damp_type'] = int_read(f.readline().split()[0]) + f.readline() + f.readline() + f.readline() + #---------------------- DAMPING COEFFICIENT------------------------------------ + ln = f.readline().split() + self.fst_vt['BeamDynBlade']['mu1'] = float(ln[0]) + self.fst_vt['BeamDynBlade']['mu2'] = float(ln[1]) + self.fst_vt['BeamDynBlade']['mu3'] = float(ln[2]) + self.fst_vt['BeamDynBlade']['mu4'] = float(ln[3]) + self.fst_vt['BeamDynBlade']['mu5'] = float(ln[4]) + self.fst_vt['BeamDynBlade']['mu6'] = float(ln[5]) + f.readline() + #---------------------- DISTRIBUTED PROPERTIES--------------------------------- + + self.fst_vt['BeamDynBlade']['radial_stations'] = np.zeros((self.fst_vt['BeamDynBlade']['station_total'])) + self.fst_vt['BeamDynBlade']['beam_stiff'] = np.zeros((self.fst_vt['BeamDynBlade']['station_total'], 6, 6)) + self.fst_vt['BeamDynBlade']['beam_inertia'] = np.zeros((self.fst_vt['BeamDynBlade']['station_total'], 6, 6)) + for i in range(self.fst_vt['BeamDynBlade']['station_total']): + self.fst_vt['BeamDynBlade']['radial_stations'][i] = float_read(f.readline().split()[0]) + for j in range(6): + self.fst_vt['BeamDynBlade']['beam_stiff'][i,j,:] = np.array([float(val) for val in f.readline().strip().split()]) + f.readline() + for j in range(6): + self.fst_vt['BeamDynBlade']['beam_inertia'][i,j,:] = np.array([float(val) for val in f.readline().strip().split()]) + f.readline() + + f.close() + + def read_InflowWind(self): + # InflowWind v3.01 + # Currently no differences between FASTv8.16 and OpenFAST. + inflow_file = os.path.normpath(os.path.join(self.FAST_directory, self.fst_vt['Fst']['InflowFile'])) + f = open(inflow_file) + + f.readline() + f.readline() + f.readline() + + # Inflow wind header parameters (inflow_wind) + self.fst_vt['InflowWind']['Echo'] = bool_read(f.readline().split()[0]) + self.fst_vt['InflowWind']['WindType'] = int(f.readline().split()[0]) + self.fst_vt['InflowWind']['PropagationDir'] = float_read(f.readline().split()[0]) + self.fst_vt['InflowWind']['VFlowAng'] = float_read(f.readline().split()[0]) + self.fst_vt['InflowWind']['VelInterpCubic'] = bool_read(f.readline().split()[0]) + self.fst_vt['InflowWind']['NWindVel'] = int(f.readline().split()[0]) + self.fst_vt['InflowWind']['WindVxiList'] = float_read(f.readline().split()[0]) + self.fst_vt['InflowWind']['WindVyiList'] = float_read(f.readline().split()[0]) + self.fst_vt['InflowWind']['WindVziList'] = float_read(f.readline().split()[0]) + + # Parameters for Steady Wind Conditions [used only for WindType = 1] (steady_wind_params) + f.readline() + self.fst_vt['InflowWind']['HWindSpeed'] = float_read(f.readline().split()[0]) + self.fst_vt['InflowWind']['RefHt'] = float_read(f.readline().split()[0]) + self.fst_vt['InflowWind']['PLexp'] = float_read(f.readline().split()[0]) + + # Parameters for Uniform wind file [used only for WindType = 2] (uniform_wind_params) + f.readline() + self.fst_vt['InflowWind']['Filename_Uni'] = os.path.join(os.path.split(inflow_file)[0], f.readline().split()[0][1:-1]) + self.fst_vt['InflowWind']['RefHt_Uni'] = float_read(f.readline().split()[0]) + self.fst_vt['InflowWind']['RefLength'] = float_read(f.readline().split()[0]) + + # Parameters for Binary TurbSim Full-Field files [used only for WindType = 3] (turbsim_wind_params) + f.readline() + self.fst_vt['InflowWind']['FileName_BTS'] = os.path.join(os.path.split(inflow_file)[0], f.readline().split()[0][1:-1]) + # Parameters for Binary Bladed-style Full-Field files [used only for WindType = 4] (bladed_wind_params) + f.readline() + self.fst_vt['InflowWind']['FilenameRoot'] = f.readline().split()[0][1:-1] + self.fst_vt['InflowWind']['TowerFile'] = bool_read(f.readline().split()[0]) + + # Parameters for HAWC-format binary files [Only used with WindType = 5] (hawc_wind_params) + f.readline() + self.fst_vt['InflowWind']['FileName_u'] = os.path.normpath(os.path.join(os.path.split(inflow_file)[0], f.readline().split()[0][1:-1])) + self.fst_vt['InflowWind']['FileName_v'] = os.path.normpath(os.path.join(os.path.split(inflow_file)[0], f.readline().split()[0][1:-1])) + self.fst_vt['InflowWind']['FileName_w'] = os.path.normpath(os.path.join(os.path.split(inflow_file)[0], f.readline().split()[0][1:-1])) + self.fst_vt['InflowWind']['nx'] = int(f.readline().split()[0]) + self.fst_vt['InflowWind']['ny'] = int(f.readline().split()[0]) + self.fst_vt['InflowWind']['nz'] = int(f.readline().split()[0]) + self.fst_vt['InflowWind']['dx'] = float_read(f.readline().split()[0]) + self.fst_vt['InflowWind']['dy'] = float_read(f.readline().split()[0]) + self.fst_vt['InflowWind']['dz'] = float_read(f.readline().split()[0]) + self.fst_vt['InflowWind']['RefHt_Hawc'] = float_read(f.readline().split()[0]) + + # Scaling parameters for turbulence (still hawc_wind_params) + f.readline() + self.fst_vt['InflowWind']['ScaleMethod'] = int(f.readline().split()[0]) + self.fst_vt['InflowWind']['SFx'] = float_read(f.readline().split()[0]) + self.fst_vt['InflowWind']['SFy'] = float_read(f.readline().split()[0]) + self.fst_vt['InflowWind']['SFz'] = float_read(f.readline().split()[0]) + self.fst_vt['InflowWind']['SigmaFx'] = float_read(f.readline().split()[0]) + self.fst_vt['InflowWind']['SigmaFy'] = float_read(f.readline().split()[0]) + self.fst_vt['InflowWind']['SigmaFz'] = float_read(f.readline().split()[0]) + + # Mean wind profile parameters (added to HAWC-format files) (still hawc_wind_params) + f.readline() + self.fst_vt['InflowWind']['URef'] = float_read(f.readline().split()[0]) + self.fst_vt['InflowWind']['WindProfile'] = int(f.readline().split()[0]) + self.fst_vt['InflowWind']['PLExp_Hawc'] = float_read(f.readline().split()[0]) + self.fst_vt['InflowWind']['Z0'] = float_read(f.readline().split()[0]) + self.fst_vt['InflowWind']['XOffset'] = float_read(f.readline().split()[0]) + + # LIDAR parameters + f.readline() + self.fst_vt['InflowWind']['SensorType'] = int(f.readline().split()[0]) + self.fst_vt['InflowWind']['NumPulseGate'] = int(f.readline().split()[0]) + self.fst_vt['InflowWind']['PulseSpacing'] = float_read(f.readline().split()[0]) + self.fst_vt['InflowWind']['NumBeam'] = int(f.readline().split()[0]) + self.fst_vt['InflowWind']['FocalDistanceX'] = float_read(f.readline().split()[0]) + self.fst_vt['InflowWind']['FocalDistanceY'] = float_read(f.readline().split()[0]) + self.fst_vt['InflowWind']['FocalDistanceZ'] = float_read(f.readline().split()[0]) + self.fst_vt['InflowWind']['RotorApexOffsetPos'] = [idx.strip() for idx in f.readline().split('RotorApexOffsetPos')[0].split(',')] + self.fst_vt['InflowWind']['URefLid'] = float_read(f.readline().split()[0]) + self.fst_vt['InflowWind']['MeasurementInterval'] = float_read(f.readline().split()[0]) + self.fst_vt['InflowWind']['LidRadialVel'] = bool_read(f.readline().split()[0]) + self.fst_vt['InflowWind']['ConsiderHubMotion'] = int(f.readline().split()[0]) + + # Inflow Wind Output Parameters (inflow_out_params) + f.readline() + self.fst_vt['InflowWind']['SumPrint'] = bool_read(f.readline().split()[0]) + + # InflowWind Outlist + f.readline() + data = f.readline() + while data.split()[0] != 'END': + if data.find('"')>=0: + channels = data.split('"') + channel_list = channels[1].split(',') + else: + row_string = data.split(',') + if len(row_string)==1: + channel_list = row_string[0].split('\n')[0] + else: + channel_list = row_string + self.set_outlist(self.fst_vt['outlist']['InflowWind'], channel_list) + data = f.readline() + + f.close() + + def read_AeroDyn15(self): + # AeroDyn v15.03 + + ad_file = os.path.join(self.FAST_directory, self.fst_vt['Fst']['AeroFile']) + f = open(ad_file) + + # General Option + f.readline() + f.readline() + f.readline() + self.fst_vt['AeroDyn15']['Echo'] = bool_read(f.readline().split()[0]) + self.fst_vt['AeroDyn15']['DTAero'] = float_read(f.readline().split()[0]) + self.fst_vt['AeroDyn15']['WakeMod'] = int(f.readline().split()[0]) + self.fst_vt['AeroDyn15']['AFAeroMod'] = int(f.readline().split()[0]) + self.fst_vt['AeroDyn15']['TwrPotent'] = int(f.readline().split()[0]) + self.fst_vt['AeroDyn15']['TwrShadow'] = int(f.readline().split()[0]) + self.fst_vt['AeroDyn15']['TwrAero'] = bool_read(f.readline().split()[0]) + self.fst_vt['AeroDyn15']['FrozenWake'] = bool_read(f.readline().split()[0]) + self.fst_vt['AeroDyn15']['CavitCheck'] = bool_read(f.readline().split()[0]) + self.fst_vt['AeroDyn15']['Buoyancy'] = bool_read(f.readline().split()[0]) + self.fst_vt['AeroDyn15']['CompAA'] = bool_read(f.readline().split()[0]) + self.fst_vt['AeroDyn15']['AA_InputFile'] = f.readline().split()[0] + + # Environmental Conditions + f.readline() + self.fst_vt['AeroDyn15']['AirDens'] = float_read(f.readline().split()[0]) + self.fst_vt['AeroDyn15']['KinVisc'] = float_read(f.readline().split()[0]) + self.fst_vt['AeroDyn15']['SpdSound'] = float_read(f.readline().split()[0]) + self.fst_vt['AeroDyn15']['Patm'] = float_read(f.readline().split()[0]) + self.fst_vt['AeroDyn15']['Pvap'] = float_read(f.readline().split()[0]) + #self.fst_vt['AeroDyn15']['FluidDepth'] = float_read(f.readline().split()[0]) + + # Blade-Element/Momentum Theory Options + f.readline() + self.fst_vt['AeroDyn15']['SkewMod'] = int_read(f.readline().split()[0]) + self.fst_vt['AeroDyn15']['SkewModFactor'] = float_read(f.readline().split()[0]) + self.fst_vt['AeroDyn15']['TipLoss'] = bool_read(f.readline().split()[0]) + self.fst_vt['AeroDyn15']['HubLoss'] = bool_read(f.readline().split()[0]) + self.fst_vt['AeroDyn15']['TanInd'] = bool_read(f.readline().split()[0]) + self.fst_vt['AeroDyn15']['AIDrag'] = bool_read(f.readline().split()[0]) + self.fst_vt['AeroDyn15']['TIDrag'] = bool_read(f.readline().split()[0]) + self.fst_vt['AeroDyn15']['IndToler'] = float_read(f.readline().split()[0]) + self.fst_vt['AeroDyn15']['MaxIter'] = int(f.readline().split()[0]) + + + # Dynamic Blade-Element/Momentum Theory Options + f.readline() + self.fst_vt['AeroDyn15']['DBEMT_Mod'] = int(f.readline().split()[0]) + self.fst_vt['AeroDyn15']['tau1_const'] = float_read(f.readline().split()[0]) + + # Olaf -- cOnvecting LAgrangian Filaments (Free Vortex Wake) Theory Options + f.readline() + self.fst_vt['AeroDyn15']['OLAFInputFileName'] = f.readline().split()[0] + + # Beddoes-Leishman Unsteady Airfoil Aerodynamics Options + f.readline() + self.fst_vt['AeroDyn15']['UAMod'] = int(f.readline().split()[0]) + self.fst_vt['AeroDyn15']['FLookup'] = bool_read(f.readline().split()[0]) + + file_pos = f.tell() + line = f.readline() + if 'UAStartRad' in line: + self.fst_vt['AeroDyn15']['UAStartRad'] = float_read(line.split()[0]) + else: + f.seek(file_pos) + + file_pos = f.tell() + line = f.readline() + if 'UAEndRad' in line: + self.fst_vt['AeroDyn15']['UAEndRad'] = float_read(line.split()[0]) + else: + f.seek(file_pos) + + + # Airfoil Information + f.readline() + self.fst_vt['AeroDyn15']['AFTabMod'] = int(f.readline().split()[0]) + self.fst_vt['AeroDyn15']['InCol_Alfa'] = int(f.readline().split()[0]) + self.fst_vt['AeroDyn15']['InCol_Cl'] = int(f.readline().split()[0]) + self.fst_vt['AeroDyn15']['InCol_Cd'] = int(f.readline().split()[0]) + self.fst_vt['AeroDyn15']['InCol_Cm'] = int(f.readline().split()[0]) + self.fst_vt['AeroDyn15']['InCol_Cpmin'] = int(f.readline().split()[0]) + self.fst_vt['AeroDyn15']['NumAFfiles'] = int(f.readline().split()[0]) + self.fst_vt['AeroDyn15']['AFNames'] = [None] * self.fst_vt['AeroDyn15']['NumAFfiles'] + for i in range(self.fst_vt['AeroDyn15']['NumAFfiles']): + af_filename = fix_path(f.readline().split()[0])[1:-1] + self.fst_vt['AeroDyn15']['AFNames'][i] = os.path.abspath(os.path.join(self.FAST_directory, self.fst_vt['Fst']['AeroFile_path'], af_filename)) + + # Rotor/Blade Properties + f.readline() + self.fst_vt['AeroDyn15']['UseBlCm'] = bool_read(f.readline().split()[0]) + self.fst_vt['AeroDyn15']['ADBlFile1'] = f.readline().split()[0][1:-1] + self.fst_vt['AeroDyn15']['ADBlFile2'] = f.readline().split()[0][1:-1] + self.fst_vt['AeroDyn15']['ADBlFile3'] = f.readline().split()[0][1:-1] + + # Hub, nacelle, and tail fin aerodynamics + f.readline() + self.fst_vt['AeroDyn15']['VolHub'] = float_read(f.readline().split()[0]) + self.fst_vt['AeroDyn15']['HubCenBx'] = float_read(f.readline().split()[0]) + f.readline() + self.fst_vt['AeroDyn15']['VolNac'] = float_read(f.readline().split()[0]) + # data = [float(val) for val in f.readline().split(',')] + self.fst_vt['AeroDyn15']['NacCenB'] = [idx.strip() for idx in f.readline().split('NacCenB')[0].split(',')] + f.readline() + self.fst_vt['AeroDyn15']['TFinAero'] = bool_read(f.readline().split()[0]) + tfa_filename = fix_path(f.readline().split()[0])[1:-1] + self.fst_vt['AeroDyn15']['TFinFile'] = os.path.abspath(os.path.join(self.FAST_directory, tfa_filename)) + + # Tower Influence and Aerodynamics + f.readline() + self.fst_vt['AeroDyn15']['NumTwrNds'] = int(f.readline().split()[0]) + f.readline() + f.readline() + self.fst_vt['AeroDyn15']['TwrElev'] = [None]*self.fst_vt['AeroDyn15']['NumTwrNds'] + self.fst_vt['AeroDyn15']['TwrDiam'] = [None]*self.fst_vt['AeroDyn15']['NumTwrNds'] + self.fst_vt['AeroDyn15']['TwrCd'] = [None]*self.fst_vt['AeroDyn15']['NumTwrNds'] + self.fst_vt['AeroDyn15']['TwrTI'] = [None]*self.fst_vt['AeroDyn15']['NumTwrNds'] + self.fst_vt['AeroDyn15']['TwrCb'] = [None]*self.fst_vt['AeroDyn15']['NumTwrNds'] + for i in range(self.fst_vt['AeroDyn15']['NumTwrNds']): + data = [float(val) for val in f.readline().split()] + self.fst_vt['AeroDyn15']['TwrElev'][i] = data[0] + self.fst_vt['AeroDyn15']['TwrDiam'][i] = data[1] + self.fst_vt['AeroDyn15']['TwrCd'][i] = data[2] + self.fst_vt['AeroDyn15']['TwrTI'][i] = data[3] + self.fst_vt['AeroDyn15']['TwrCb'][i] = data[4] + + # Outputs + f.readline() + self.fst_vt['AeroDyn15']['SumPrint'] = bool_read(f.readline().split()[0]) + self.fst_vt['AeroDyn15']['NBlOuts'] = int(f.readline().split()[0]) + self.fst_vt['AeroDyn15']['BlOutNd'] = [idx.strip() for idx in f.readline().split('BlOutNd')[0].split(',')] + self.fst_vt['AeroDyn15']['NTwOuts'] = int(f.readline().split()[0]) + self.fst_vt['AeroDyn15']['TwOutNd'] = [idx.strip() for idx in f.readline().split('TwOutNd')[0].split(',')] + + # AeroDyn15 Outlist + f.readline() + data = f.readline() + while data.split()[0] != 'END': + if data.find('"')>=0: + channels = data.split('"') + channel_list = channels[1].split(',') + else: + row_string = data.split(',') + if len(row_string)==1: + channel_list = row_string[0].split('\n')[0] + else: + channel_list = row_string + self.set_outlist(self.fst_vt['outlist']['AeroDyn'], channel_list) + data = f.readline() + + # AeroDyn15 optional outlist + try: + f.readline() + self.fst_vt['AeroDyn15']['BldNd_BladesOut'] = int(f.readline().split()[0]) + self.fst_vt['AeroDyn15']['BldNd_BlOutNd'] = f.readline().split()[0] + + f.readline() + data = f.readline() + while data.split()[0] != 'END': + if data.find('"')>=0: + channels = data.split('"') + opt_channel_list = channels[1].split(',') + else: + row_string = data.split(',') + if len(row_string)==1: + opt_channel_list = row_string[0].split('\n')[0] + else: + opt_channel_list = row_string + self.set_outlist(self.fst_vt['outlist']['AeroDyn_Nodes'], opt_channel_list) + data = f.readline() + except: + # The optinal outlist does not exist. + None + + f.close() + + self.read_AeroDyn15Blade() + self.read_AeroDyn15Polar() + self.read_AeroDyn15Coord() + olaf_filename = os.path.join(self.FAST_directory, self.fst_vt['AeroDyn15']['OLAFInputFileName']) + if os.path.isfile(olaf_filename): + self.read_AeroDyn15OLAF(olaf_filename) + + def read_AeroDyn15Blade(self): + # AeroDyn v5.00 Blade Definition File + + ad_blade_file = os.path.join(self.FAST_directory, self.fst_vt['Fst']['AeroFile_path'], self.fst_vt['AeroDyn15']['ADBlFile1']) + f = open(ad_blade_file) + + f.readline() + f.readline() + f.readline() + # Blade Properties + self.fst_vt['AeroDynBlade']['NumBlNds'] = int(f.readline().split()[0]) + f.readline() + f.readline() + self.fst_vt['AeroDynBlade']['BlSpn'] = [None]*self.fst_vt['AeroDynBlade']['NumBlNds'] + self.fst_vt['AeroDynBlade']['BlCrvAC'] = [None]*self.fst_vt['AeroDynBlade']['NumBlNds'] + self.fst_vt['AeroDynBlade']['BlSwpAC'] = [None]*self.fst_vt['AeroDynBlade']['NumBlNds'] + self.fst_vt['AeroDynBlade']['BlCrvAng'] = [None]*self.fst_vt['AeroDynBlade']['NumBlNds'] + self.fst_vt['AeroDynBlade']['BlTwist'] = [None]*self.fst_vt['AeroDynBlade']['NumBlNds'] + self.fst_vt['AeroDynBlade']['BlChord'] = [None]*self.fst_vt['AeroDynBlade']['NumBlNds'] + self.fst_vt['AeroDynBlade']['BlAFID'] = [None]*self.fst_vt['AeroDynBlade']['NumBlNds'] + for i in range(self.fst_vt['AeroDynBlade']['NumBlNds']): + data = [float(val) for val in f.readline().split()] + self.fst_vt['AeroDynBlade']['BlSpn'][i] = data[0] + self.fst_vt['AeroDynBlade']['BlCrvAC'][i] = data[1] + self.fst_vt['AeroDynBlade']['BlSwpAC'][i] = data[2] + self.fst_vt['AeroDynBlade']['BlCrvAng'][i]= data[3] + self.fst_vt['AeroDynBlade']['BlTwist'][i] = data[4] + self.fst_vt['AeroDynBlade']['BlChord'][i] = data[5] + self.fst_vt['AeroDynBlade']['BlAFID'][i] = data[6] + + f.close() + + def read_AeroDyn15Polar(self): + # AirfoilInfo v1.01 + + + self.fst_vt['AeroDyn15']['af_data'] = [None]*self.fst_vt['AeroDyn15']['NumAFfiles'] + + for afi, af_filename in enumerate(self.fst_vt['AeroDyn15']['AFNames']): + f = open(af_filename) + # print af_filename + + polar = {} + + polar['InterpOrd'] = int_read(readline_filterComments(f).split()[0]) + polar['NonDimArea'] = float_read(readline_filterComments(f).split()[0]) + polar['NumCoords'] = readline_filterComments(f).split()[0] + polar['BL_file'] = readline_filterComments(f).split()[0] + polar['NumTabs'] = int_read(readline_filterComments(f).split()[0]) + self.fst_vt['AeroDyn15']['af_data'][afi] = [None]*polar['NumTabs'] + + for tab in range(polar['NumTabs']): # For multiple tables + polar['Re'] = float_read(readline_filterComments(f).split()[0]) * 1.e+6 + polar['Ctrl'] = int_read(readline_filterComments(f).split()[0]) + polar['InclUAdata'] = bool_read(readline_filterComments(f).split()[0]) + + # Unsteady Aero Data + if polar['InclUAdata']: + polar['alpha0'] = float_read(readline_filterComments(f).split()[0]) + polar['alpha1'] = float_read(readline_filterComments(f).split()[0]) + polar['alpha2'] = float_read(readline_filterComments(f).split()[0]) + # polar['alphaUpper'] = float_read(readline_filterComments(f).split()[0]) + # polar['alphaLower'] = float_read(readline_filterComments(f).split()[0]) + polar['eta_e'] = float_read(readline_filterComments(f).split()[0]) + polar['C_nalpha'] = float_read(readline_filterComments(f).split()[0]) + polar['T_f0'] = float_read(readline_filterComments(f).split()[0]) + polar['T_V0'] = float_read(readline_filterComments(f).split()[0]) + polar['T_p'] = float_read(readline_filterComments(f).split()[0]) + polar['T_VL'] = float_read(readline_filterComments(f).split()[0]) + polar['b1'] = float_read(readline_filterComments(f).split()[0]) + polar['b2'] = float_read(readline_filterComments(f).split()[0]) + polar['b5'] = float_read(readline_filterComments(f).split()[0]) + polar['A1'] = float_read(readline_filterComments(f).split()[0]) + polar['A2'] = float_read(readline_filterComments(f).split()[0]) + polar['A5'] = float_read(readline_filterComments(f).split()[0]) + polar['S1'] = float_read(readline_filterComments(f).split()[0]) + polar['S2'] = float_read(readline_filterComments(f).split()[0]) + polar['S3'] = float_read(readline_filterComments(f).split()[0]) + polar['S4'] = float_read(readline_filterComments(f).split()[0]) + polar['Cn1'] = float_read(readline_filterComments(f).split()[0]) + polar['Cn2'] = float_read(readline_filterComments(f).split()[0]) + polar['St_sh'] = float_read(readline_filterComments(f).split()[0]) + polar['Cd0'] = float_read(readline_filterComments(f).split()[0]) + polar['Cm0'] = float_read(readline_filterComments(f).split()[0]) + polar['k0'] = float_read(readline_filterComments(f).split()[0]) + polar['k1'] = float_read(readline_filterComments(f).split()[0]) + polar['k2'] = float_read(readline_filterComments(f).split()[0]) + polar['k3'] = float_read(readline_filterComments(f).split()[0]) + polar['k1_hat'] = float_read(readline_filterComments(f).split()[0]) + polar['x_cp_bar'] = float_read(readline_filterComments(f).split()[0]) + polar['UACutout'] = float_read(readline_filterComments(f).split()[0]) + polar['filtCutOff'] = float_read(readline_filterComments(f).split()[0]) + + # Polar Data + polar['NumAlf'] = int_read(readline_filterComments(f).split()[0]) + polar['Alpha'] = [None]*polar['NumAlf'] + polar['Cl'] = [None]*polar['NumAlf'] + polar['Cd'] = [None]*polar['NumAlf'] + polar['Cm'] = [None]*polar['NumAlf'] + polar['Cpmin'] = [None]*polar['NumAlf'] + for i in range(polar['NumAlf']): + data = [float(val) for val in readline_filterComments(f).split()] + if self.fst_vt['AeroDyn15']['InCol_Alfa'] > 0: + polar['Alpha'][i] = data[self.fst_vt['AeroDyn15']['InCol_Alfa']-1] + if self.fst_vt['AeroDyn15']['InCol_Cl'] > 0: + polar['Cl'][i] = data[self.fst_vt['AeroDyn15']['InCol_Cl']-1] + if self.fst_vt['AeroDyn15']['InCol_Cd'] > 0: + polar['Cd'][i] = data[self.fst_vt['AeroDyn15']['InCol_Cd']-1] + if self.fst_vt['AeroDyn15']['InCol_Cm'] > 0: + polar['Cm'][i] = data[self.fst_vt['AeroDyn15']['InCol_Cm']-1] + if self.fst_vt['AeroDyn15']['InCol_Cpmin'] > 0: + polar['Cpmin'][i] = data[self.fst_vt['AeroDyn15']['InCol_Cpmin']-1] + + self.fst_vt['AeroDyn15']['af_data'][afi][tab] = copy.copy(polar) # For multiple tables + + f.close() + + def read_AeroDyn15Coord(self): + + self.fst_vt['AeroDyn15']['af_coord'] = [] + self.fst_vt['AeroDyn15']['ac'] = np.zeros(len(self.fst_vt['AeroDyn15']['AFNames'])) + + for afi, af_filename in enumerate(self.fst_vt['AeroDyn15']['AFNames']): + self.fst_vt['AeroDyn15']['af_coord'].append({}) + if not (self.fst_vt['AeroDyn15']['af_data'][afi][0]['NumCoords'] == 0 or self.fst_vt['AeroDyn15']['af_data'][afi][0]['NumCoords'] == '0'): + coord_filename = af_filename[0:af_filename.rfind(os.sep)] + os.sep + self.fst_vt['AeroDyn15']['af_data'][afi][0]['NumCoords'][2:-1] + f = open(coord_filename) + n_coords = int_read(readline_filterComments(f).split()[0]) + x = np.zeros(n_coords) + y = np.zeros(n_coords) + f.readline() + f.readline() + f.readline() + self.fst_vt['AeroDyn15']['ac'][afi] = float(f.readline().split()[0]) + f.readline() + f.readline() + f.readline() + for j in range(n_coords - 1): + x[j], y[j] = f.readline().split() + + self.fst_vt['AeroDyn15']['af_coord'][afi]['x'] = x + self.fst_vt['AeroDyn15']['af_coord'][afi]['y'] = y + + f.close() + + def read_AeroDyn15OLAF(self, olaf_filename): + + self.fst_vt['AeroDyn15']['OLAF'] = {} + f = open(olaf_filename) + f.readline() + f.readline() + f.readline() + self.fst_vt['AeroDyn15']['OLAF']['IntMethod'] = int_read(f.readline().split()[0]) + self.fst_vt['AeroDyn15']['OLAF']['DTfvw'] = float_read(f.readline().split()[0]) + self.fst_vt['AeroDyn15']['OLAF']['FreeWakeStart'] = float_read(f.readline().split()[0]) + self.fst_vt['AeroDyn15']['OLAF']['FullCircStart'] = float_read(f.readline().split()[0]) + f.readline() + self.fst_vt['AeroDyn15']['OLAF']['CircSolvMethod'] = int_read(f.readline().split()[0]) + self.fst_vt['AeroDyn15']['OLAF']['CircSolvConvCrit'] = float_read(f.readline().split()[0]) + self.fst_vt['AeroDyn15']['OLAF']['CircSolvRelaxation'] = float_read(f.readline().split()[0]) + self.fst_vt['AeroDyn15']['OLAF']['CircSolvMaxIter'] = int_read(f.readline().split()[0]) + self.fst_vt['AeroDyn15']['OLAF']['PrescribedCircFile'] = f.readline().split()[0] + f.readline() + f.readline() + f.readline() + self.fst_vt['AeroDyn15']['OLAF']['nNWPanels'] = int_read(f.readline().split()[0]) + self.fst_vt['AeroDyn15']['OLAF']['nNWPanelsFree'] = int_read(f.readline().split()[0]) + self.fst_vt['AeroDyn15']['OLAF']['nFWPanels'] = int_read(f.readline().split()[0]) + self.fst_vt['AeroDyn15']['OLAF']['nFWPanelsFree'] = int_read(f.readline().split()[0]) + self.fst_vt['AeroDyn15']['OLAF']['FWShedVorticity'] = bool_read(f.readline().split()[0]) + f.readline() + self.fst_vt['AeroDyn15']['OLAF']['DiffusionMethod'] = int_read(f.readline().split()[0]) + self.fst_vt['AeroDyn15']['OLAF']['RegDeterMethod'] = int_read(f.readline().split()[0]) + self.fst_vt['AeroDyn15']['OLAF']['RegFunction'] = int_read(f.readline().split()[0]) + self.fst_vt['AeroDyn15']['OLAF']['WakeRegMethod'] = int_read(f.readline().split()[0]) + self.fst_vt['AeroDyn15']['OLAF']['WakeRegFactor'] = float(f.readline().split()[0]) + self.fst_vt['AeroDyn15']['OLAF']['WingRegFactor'] = float(f.readline().split()[0]) + self.fst_vt['AeroDyn15']['OLAF']['CoreSpreadEddyVisc'] = int(f.readline().split()[0]) + f.readline() + self.fst_vt['AeroDyn15']['OLAF']['TwrShadowOnWake'] = bool_read(f.readline().split()[0]) + self.fst_vt['AeroDyn15']['OLAF']['ShearModel'] = int_read(f.readline().split()[0]) + f.readline() + self.fst_vt['AeroDyn15']['OLAF']['VelocityMethod'] = int_read(f.readline().split()[0]) + self.fst_vt['AeroDyn15']['OLAF']['TreeBranchFactor']= float_read(f.readline().split()[0]) + self.fst_vt['AeroDyn15']['OLAF']['PartPerSegment'] = int_read(f.readline().split()[0]) + f.readline() + f.readline() + self.fst_vt['AeroDyn15']['OLAF']['WrVTk'] = int_read(f.readline().split()[0]) + self.fst_vt['AeroDyn15']['OLAF']['nVTKBlades'] = int_read(f.readline().split()[0]) + self.fst_vt['AeroDyn15']['OLAF']['VTKCoord'] = int_read(f.readline().split()[0]) + self.fst_vt['AeroDyn15']['OLAF']['VTK_fps'] = float_read(f.readline().split()[0]) + self.fst_vt['AeroDyn15']['OLAF']['nGridOut'] = int_read(f.readline().split()[0]) + f.readline() + f.close() + + def read_AeroDyn14(self): + # AeroDyn v14.04 + + ad_file = os.path.join(self.FAST_directory, self.fst_vt['Fst']['AeroFile']) + f = open(ad_file) + # AeroDyn file header (aerodyn) + f.readline() + f.readline() + self.fst_vt['AeroDyn14']['StallMod'] = f.readline().split()[0] + self.fst_vt['AeroDyn14']['UseCm'] = f.readline().split()[0] + self.fst_vt['AeroDyn14']['InfModel'] = f.readline().split()[0] + self.fst_vt['AeroDyn14']['IndModel'] = f.readline().split()[0] + self.fst_vt['AeroDyn14']['AToler'] = float_read(f.readline().split()[0]) + self.fst_vt['AeroDyn14']['TLModel'] = f.readline().split()[0] + self.fst_vt['AeroDyn14']['HLModel'] = f.readline().split()[0] + self.fst_vt['AeroDyn14']['TwrShad'] = int(f.readline().split()[0]) + if self.fst_vt['AeroDyn14']['TwrShad'] > 0: + self.fst_vt['AeroDyn14']['TwrPotent'] = bool_read(f.readline().split()[0]) + self.fst_vt['AeroDyn14']['TwrShadow'] = bool_read(f.readline().split()[0]) + self.fst_vt['AeroDyn14']['TwrFile'] = f.readline().split()[0].replace('"','').replace("'",'') + self.fst_vt['AeroDyn14']['CalcTwrAero'] = bool_read(f.readline().split()[0]) + else: + self.fst_vt['AeroDyn14']['ShadHWid'] = float_read(f.readline().split()[0]) + self.fst_vt['AeroDyn14']['T_Shad_Refpt'] = float_read(f.readline().split()[0]) + self.fst_vt['AeroDyn14']['AirDens'] = float_read(f.readline().split()[0]) + self.fst_vt['AeroDyn14']['KinVisc'] = float_read(f.readline().split()[0]) + self.fst_vt['AeroDyn14']['DTAero'] = float_read(f.readline().split()[0]) + + # AeroDyn Blade Properties (blade_aero) + self.fst_vt['AeroDyn14']['NumFoil'] = int(f.readline().split()[0]) + self.fst_vt['AeroDyn14']['FoilNm'] = [None] * self.fst_vt['AeroDyn14']['NumFoil'] + for i in range(self.fst_vt['AeroDyn14']['NumFoil']): + af_filename = f.readline().split()[0] + af_filename = fix_path(af_filename) + self.fst_vt['AeroDyn14']['FoilNm'][i] = af_filename[1:-1] + + self.fst_vt['AeroDynBlade']['BldNodes'] = int(f.readline().split()[0]) + f.readline() + self.fst_vt['AeroDynBlade']['RNodes'] = [None] * self.fst_vt['AeroDynBlade']['BldNodes'] + self.fst_vt['AeroDynBlade']['AeroTwst'] = [None] * self.fst_vt['AeroDynBlade']['BldNodes'] + self.fst_vt['AeroDynBlade']['DRNodes'] = [None] * self.fst_vt['AeroDynBlade']['BldNodes'] + self.fst_vt['AeroDynBlade']['Chord'] = [None] * self.fst_vt['AeroDynBlade']['BldNodes'] + self.fst_vt['AeroDynBlade']['NFoil'] = [None] * self.fst_vt['AeroDynBlade']['BldNodes'] + self.fst_vt['AeroDynBlade']['PrnElm'] = [None] * self.fst_vt['AeroDynBlade']['BldNodes'] + for i in range(self.fst_vt['AeroDynBlade']['BldNodes']): + data = f.readline().split() + self.fst_vt['AeroDynBlade']['RNodes'][i] = float_read(data[0]) + self.fst_vt['AeroDynBlade']['AeroTwst'][i] = float_read(data[1]) + self.fst_vt['AeroDynBlade']['DRNodes'][i] = float_read(data[2]) + self.fst_vt['AeroDynBlade']['Chord'][i] = float_read(data[3]) + self.fst_vt['AeroDynBlade']['NFoil'][i] = int(data[4]) + self.fst_vt['AeroDynBlade']['PrnElm'][i] = data[5] + + f.close() + + # create airfoil objects + self.fst_vt['AeroDynBlade']['af_data'] = [] + for i in range(self.fst_vt['AeroDyn14']['NumFoil']): + self.fst_vt['AeroDynBlade']['af_data'].append(self.read_AeroDyn14Polar(os.path.join(self.FAST_directory,self.fst_vt['AeroDyn14']['FoilNm'][i]))) + + # tower + if self.fst_vt['AeroDyn14']['TwrShad'] > 0: + self.read_AeroDyn14Tower() + + def read_AeroDyn14Tower(self): + # AeroDyn v14.04 Tower + + ad_tower_file = os.path.join(self.FAST_directory, self.fst_vt['AeroDyn14']['TwrFile']) + f = open(ad_tower_file) + + f.readline() + f.readline() + self.fst_vt['AeroDynTower']['NTwrHt'] = int(f.readline().split()[0]) + self.fst_vt['AeroDynTower']['NTwrRe'] = int(f.readline().split()[0]) + self.fst_vt['AeroDynTower']['NTwrCD'] = int(f.readline().split()[0]) + self.fst_vt['AeroDynTower']['Tower_Wake_Constant'] = float_read(f.readline().split()[0]) + + f.readline() + f.readline() + self.fst_vt['AeroDynTower']['TwrHtFr'] = [None]*self.fst_vt['AeroDynTower']['NTwrHt'] + self.fst_vt['AeroDynTower']['TwrWid'] = [None]*self.fst_vt['AeroDynTower']['NTwrHt'] + self.fst_vt['AeroDynTower']['NTwrCDCol'] = [None]*self.fst_vt['AeroDynTower']['NTwrHt'] + for i in range(self.fst_vt['AeroDynTower']['NTwrHt']): + data = [float(val) for val in f.readline().split()] + self.fst_vt['AeroDynTower']['TwrHtFr'][i] = data[0] + self.fst_vt['AeroDynTower']['TwrWid'][i] = data[1] + self.fst_vt['AeroDynTower']['NTwrCDCol'][i] = data[2] + + f.readline() + f.readline() + self.fst_vt['AeroDynTower']['TwrRe'] = [None]*self.fst_vt['AeroDynTower']['NTwrRe'] + self.fst_vt['AeroDynTower']['TwrCD'] = np.zeros((self.fst_vt['AeroDynTower']['NTwrRe'], self.fst_vt['AeroDynTower']['NTwrCD'])) + for i in range(self.fst_vt['AeroDynTower']['NTwrRe']): + data = [float(val) for val in f.readline().split()] + self.fst_vt['AeroDynTower']['TwrRe'][i] = data[0] + self.fst_vt['AeroDynTower']['TwrCD'][i,:] = data[1:] + + f.close() + + def read_AeroDyn14Polar(self, aerodynFile): + # AeroDyn v14 Airfoil Polar Input File + + # open aerodyn file + f = open(aerodynFile, 'r') + + airfoil = copy.copy(self.fst_vt['AeroDynPolar']) + + # skip through header + airfoil['description'] = f.readline().rstrip() # remove newline + f.readline() + airfoil['number_tables'] = int(f.readline().split()[0]) + + IDParam = [float_read(val) for val in f.readline().split()[0:airfoil['number_tables']]] + StallAngle = [float_read(val) for val in f.readline().split()[0:airfoil['number_tables']]] + f.readline() + f.readline() + f.readline() + ZeroCn = [float_read(val) for val in f.readline().split()[0:airfoil['number_tables']]] + CnSlope = [float_read(val) for val in f.readline().split()[0:airfoil['number_tables']]] + CnPosStall = [float_read(val) for val in f.readline().split()[0:airfoil['number_tables']]] + CnNegStall = [float_read(val) for val in f.readline().split()[0:airfoil['number_tables']]] + alphaCdMin = [float_read(val) for val in f.readline().split()[0:airfoil['number_tables']]] + CdMin = [float_read(val) for val in f.readline().split()[0:airfoil['number_tables']]] + + data = [] + airfoil['af_tables'] = [] + while True: + line = f.readline() + if 'EOT' in line: + break + line = [float_read(s) for s in line.split()] + if len(line) < 1: + break + data.append(line) + + # loop through tables + for i in range(airfoil['number_tables']): + polar = {} + polar['IDParam'] = IDParam[i] + polar['StallAngle'] = StallAngle[i] + polar['ZeroCn'] = ZeroCn[i] + polar['CnSlope'] = CnSlope[i] + polar['CnPosStall'] = CnPosStall[i] + polar['CnNegStall'] = CnNegStall[i] + polar['alphaCdMin'] = alphaCdMin[i] + polar['CdMin'] = CdMin[i] + + alpha = [] + cl = [] + cd = [] + cm = [] + # read polar information line by line + for datai in data: + if len(datai) == airfoil['number_tables']*3+1: + alpha.append(datai[0]) + cl.append(datai[1 + 3*i]) + cd.append(datai[2 + 3*i]) + cm.append(datai[3 + 3*i]) + elif len(datai) == airfoil['number_tables']*2+1: + alpha.append(datai[0]) + cl.append(datai[1 + 2*i]) + cd.append(datai[2 + 2*i]) + + polar['alpha'] = alpha + polar['cl'] = cl + polar['cd'] = cd + polar['cm'] = cm + airfoil['af_tables'].append(polar) + + f.close() + + return airfoil + + def read_ServoDyn(self): + # ServoDyn v1.05 Input File + # Currently no differences between FASTv8.16 and OpenFAST. + + + sd_file = os.path.normpath(os.path.join(self.FAST_directory, self.fst_vt['Fst']['ServoFile'])) + f = open(sd_file) + + f.readline() + f.readline() + + # Simulation Control (sd_sim_ctrl) + f.readline() + self.fst_vt['ServoDyn']['Echo'] = bool_read(f.readline().split()[0]) + self.fst_vt['ServoDyn']['DT'] = float_read(f.readline().split()[0]) + + # Pitch Control (pitch_ctrl) + f.readline() + self.fst_vt['ServoDyn']['PCMode'] = int(f.readline().split()[0]) + self.fst_vt['ServoDyn']['TPCOn'] = float_read(f.readline().split()[0]) + self.fst_vt['ServoDyn']['TPitManS1'] = float_read(f.readline().split()[0]) + self.fst_vt['ServoDyn']['TPitManS2'] = float_read(f.readline().split()[0]) + self.fst_vt['ServoDyn']['TPitManS3'] = float_read(f.readline().split()[0]) + self.fst_vt['ServoDyn']['PitManRat(1)'] = float_read(f.readline().split()[0]) + self.fst_vt['ServoDyn']['PitManRat(2)'] = float_read(f.readline().split()[0]) + self.fst_vt['ServoDyn']['PitManRat(3)'] = float_read(f.readline().split()[0]) + self.fst_vt['ServoDyn']['BlPitchF(1)'] = float_read(f.readline().split()[0]) + self.fst_vt['ServoDyn']['BlPitchF(2)'] = float_read(f.readline().split()[0]) + self.fst_vt['ServoDyn']['BlPitchF(3)'] = float_read(f.readline().split()[0]) + + # Geneartor and Torque Control (gen_torq_ctrl) + f.readline() + self.fst_vt['ServoDyn']['VSContrl'] = int(f.readline().split()[0]) + self.fst_vt['ServoDyn']['GenModel'] = int(f.readline().split()[0]) + self.fst_vt['ServoDyn']['GenEff'] = float_read(f.readline().split()[0]) + self.fst_vt['ServoDyn']['GenTiStr'] = bool_read(f.readline().split()[0]) + self.fst_vt['ServoDyn']['GenTiStp'] = bool_read(f.readline().split()[0]) + self.fst_vt['ServoDyn']['SpdGenOn'] = float_read(f.readline().split()[0]) + self.fst_vt['ServoDyn']['TimGenOn'] = float_read(f.readline().split()[0]) + self.fst_vt['ServoDyn']['TimGenOf'] = float_read(f.readline().split()[0]) + + # Simple Variable-Speed Torque Control (var_speed_torq_ctrl) + f.readline() + self.fst_vt['ServoDyn']['VS_RtGnSp'] = float_read(f.readline().split()[0]) + self.fst_vt['ServoDyn']['VS_RtTq'] = float_read(f.readline().split()[0]) + self.fst_vt['ServoDyn']['VS_Rgn2K'] = float_read(f.readline().split()[0]) + self.fst_vt['ServoDyn']['VS_SlPc'] = float_read(f.readline().split()[0]) + + # Simple Induction Generator (induct_gen) + f.readline() + self.fst_vt['ServoDyn']['SIG_SlPc'] = float_read(f.readline().split()[0]) + self.fst_vt['ServoDyn']['SIG_SySp'] = float_read(f.readline().split()[0]) + self.fst_vt['ServoDyn']['SIG_RtTq'] = float_read(f.readline().split()[0]) + self.fst_vt['ServoDyn']['SIG_PORt'] = float_read(f.readline().split()[0]) + + # Thevenin-Equivalent Induction Generator (theveq_induct_gen) + f.readline() + self.fst_vt['ServoDyn']['TEC_Freq'] = float_read(f.readline().split()[0]) + self.fst_vt['ServoDyn']['TEC_NPol'] = int(f.readline().split()[0]) + self.fst_vt['ServoDyn']['TEC_SRes'] = float_read(f.readline().split()[0]) + self.fst_vt['ServoDyn']['TEC_RRes'] = float_read(f.readline().split()[0]) + self.fst_vt['ServoDyn']['TEC_VLL'] = float_read(f.readline().split()[0]) + self.fst_vt['ServoDyn']['TEC_SLR'] = float_read(f.readline().split()[0]) + self.fst_vt['ServoDyn']['TEC_RLR'] = float_read(f.readline().split()[0]) + self.fst_vt['ServoDyn']['TEC_MR'] = float_read(f.readline().split()[0]) + + # High-Speed Shaft Brake (shaft_brake) + f.readline() + self.fst_vt['ServoDyn']['HSSBrMode'] = int(f.readline().split()[0]) + self.fst_vt['ServoDyn']['THSSBrDp'] = float_read(f.readline().split()[0]) + self.fst_vt['ServoDyn']['HSSBrDT'] = float_read(f.readline().split()[0]) + self.fst_vt['ServoDyn']['HSSBrTqF'] = float_read(f.readline().split()[0]) + + # Nacelle-Yaw Control (nac_yaw_ctrl) + f.readline() + self.fst_vt['ServoDyn']['YCMode'] = int(f.readline().split()[0]) + self.fst_vt['ServoDyn']['TYCOn'] = float_read(f.readline().split()[0]) + self.fst_vt['ServoDyn']['YawNeut'] = float_read(f.readline().split()[0]) + self.fst_vt['ServoDyn']['YawSpr'] = float_read(f.readline().split()[0]) + self.fst_vt['ServoDyn']['YawDamp'] = float_read(f.readline().split()[0]) + self.fst_vt['ServoDyn']['TYawManS'] = float_read(f.readline().split()[0]) + self.fst_vt['ServoDyn']['YawManRat'] = float_read(f.readline().split()[0]) + self.fst_vt['ServoDyn']['NacYawF'] = float_read(f.readline().split()[0]) + + # Aero flow control + f.readline() + self.fst_vt['ServoDyn']['AfCmode'] = int(f.readline().split()[0]) + self.fst_vt['ServoDyn']['AfC_Mean'] = float_read(f.readline().split()[0]) + self.fst_vt['ServoDyn']['AfC_Amp'] = float_read(f.readline().split()[0]) + self.fst_vt['ServoDyn']['AfC_Phase'] = float_read(f.readline().split()[0]) + + # Structural Control + f.readline() + self.fst_vt['ServoDyn']['NumBStC'] = int(f.readline().split()[0]) + self.fst_vt['ServoDyn']['BStCfiles'] = read_array(f,self.fst_vt['ServoDyn']['NumBStC'],str) + self.fst_vt['ServoDyn']['NumNStC'] = int(f.readline().split()[0]) + self.fst_vt['ServoDyn']['NStCfiles'] = read_array(f,self.fst_vt['ServoDyn']['NumNStC'],str) + self.fst_vt['ServoDyn']['NumTStC'] = int(f.readline().split()[0]) + self.fst_vt['ServoDyn']['TStCfiles'] = read_array(f,self.fst_vt['ServoDyn']['NumTStC'],str) + self.fst_vt['ServoDyn']['NumSStC'] = int(f.readline().split()[0]) + self.fst_vt['ServoDyn']['SStCfiles'] = read_array(f,self.fst_vt['ServoDyn']['NumSStC'],str) + + # Initialize Struct Control trees + self.fst_vt['BStC'] = [] * self.fst_vt['ServoDyn']['NumBStC'] + self.fst_vt['NStC'] = [] * self.fst_vt['ServoDyn']['NumNStC'] + self.fst_vt['TStC'] = [] * self.fst_vt['ServoDyn']['NumTStC'] + self.fst_vt['SStC'] = [] * self.fst_vt['ServoDyn']['NumSStC'] + + # Cable control + f.readline() + self.fst_vt['ServoDyn']['CCmode'] = int(f.readline().split()[0]) + + # Bladed Interface and Torque-Speed Look-Up Table (bladed_interface) + f.readline() + if self.path2dll == '' or self.path2dll == None: + self.fst_vt['ServoDyn']['DLL_FileName'] = os.path.abspath(os.path.normpath(os.path.join(os.path.split(sd_file)[0], f.readline().split()[0][1:-1]))) + else: + f.readline() + self.fst_vt['ServoDyn']['DLL_FileName'] = self.path2dll + self.fst_vt['ServoDyn']['DLL_InFile'] = os.path.abspath(os.path.normpath(os.path.join(os.path.split(sd_file)[0], f.readline().split()[0][1:-1]))) + self.fst_vt['ServoDyn']['DLL_ProcName'] = f.readline().split()[0][1:-1] + dll_dt_line = f.readline().split()[0] + try: + self.fst_vt['ServoDyn']['DLL_DT'] = float_read(dll_dt_line) + except: + self.fst_vt['ServoDyn']['DLL_DT'] = dll_dt_line[1:-1] + self.fst_vt['ServoDyn']['DLL_Ramp'] = bool_read(f.readline().split()[0]) + self.fst_vt['ServoDyn']['BPCutoff'] = float_read(f.readline().split()[0]) + self.fst_vt['ServoDyn']['NacYaw_North'] = float_read(f.readline().split()[0]) + self.fst_vt['ServoDyn']['Ptch_Cntrl'] = int(f.readline().split()[0]) + self.fst_vt['ServoDyn']['Ptch_SetPnt'] = float_read(f.readline().split()[0]) + self.fst_vt['ServoDyn']['Ptch_Min'] = float_read(f.readline().split()[0]) + self.fst_vt['ServoDyn']['Ptch_Max'] = float_read(f.readline().split()[0]) + self.fst_vt['ServoDyn']['PtchRate_Min'] = float_read(f.readline().split()[0]) + self.fst_vt['ServoDyn']['PtchRate_Max'] = float_read(f.readline().split()[0]) + self.fst_vt['ServoDyn']['Gain_OM'] = float_read(f.readline().split()[0]) + self.fst_vt['ServoDyn']['GenSpd_MinOM'] = float_read(f.readline().split()[0]) + self.fst_vt['ServoDyn']['GenSpd_MaxOM'] = float_read(f.readline().split()[0]) + self.fst_vt['ServoDyn']['GenSpd_Dem'] = float_read(f.readline().split()[0]) + self.fst_vt['ServoDyn']['GenTrq_Dem'] = float_read(f.readline().split()[0]) + self.fst_vt['ServoDyn']['GenPwr_Dem'] = float_read(f.readline().split()[0]) + + f.readline() + + self.fst_vt['ServoDyn']['DLL_NumTrq'] = int(f.readline().split()[0]) + f.readline() + f.readline() + self.fst_vt['ServoDyn']['GenSpd_TLU'] = [None] * self.fst_vt['ServoDyn']['DLL_NumTrq'] + self.fst_vt['ServoDyn']['GenTrq_TLU'] = [None] * self.fst_vt['ServoDyn']['DLL_NumTrq'] + for i in range(self.fst_vt['ServoDyn']['DLL_NumTrq']): + data = f.readline().split() + self.fst_vt['ServoDyn']['GenSpd_TLU'][i] = float_read(data[0]) + self.fst_vt['ServoDyn']['GenTrq_TLU'][i] = float_read(data[0]) + + # ServoDyn Output Params (sd_out_params) + f.readline() + self.fst_vt['ServoDyn']['SumPrint'] = bool_read(f.readline().split()[0]) + self.fst_vt['ServoDyn']['OutFile'] = int(f.readline().split()[0]) + self.fst_vt['ServoDyn']['TabDelim'] = bool_read(f.readline().split()[0]) + self.fst_vt['ServoDyn']['OutFmt'] = f.readline().split()[0][1:-1] + self.fst_vt['ServoDyn']['TStart'] = float_read(f.readline().split()[0]) + + # ServoDyn Outlist + f.readline() + data = f.readline() + while data.split()[0] != 'END': + channels = data.split('"') + channel_list = channels[1].split(',') + self.set_outlist(self.fst_vt['outlist']['ServoDyn'], channel_list) + data = f.readline() + + f.close() + + def read_StC(self,filename): + ''' + return StC vt so it can be appended to fst_vt['XStC'] list + ''' + StC_vt = {} + + with open(os.path.join(self.FAST_directory, filename)) as f: + + f.readline() + f.readline() + f.readline() + StC_vt['Echo'] = bool_read(f.readline().split()[0]) # Echo - Echo input data to .ech (flag) + f.readline() # StC DEGREES OF FREEDOM + StC_vt['StC_DOF_MODE'] = int_read(f.readline().split()[0]) # 4 StC_DOF_MODE - DOF mode (switch) {0: No StC or TLCD DOF; 1: StC_X_DOF, StC_Y_DOF, and/or StC_Z_DOF (three independent StC DOFs); 2: StC_XY_DOF (Omni-Directional StC); 3: TLCD; 4: Prescribed force/moment time series} + StC_vt['StC_X_DOF'] = bool_read(f.readline().split()[0]) # false StC_X_DOF - DOF on or off for StC X (flag) [Used only when StC_DOF_MODE=1] + StC_vt['StC_Y_DOF'] = bool_read(f.readline().split()[0]) # false StC_Y_DOF - DOF on or off for StC Y (flag) [Used only when StC_DOF_MODE=1] + StC_vt['StC_Z_DOF'] = bool_read(f.readline().split()[0]) # false StC_Z_DOF - DOF on or off for StC Z (flag) [Used only when StC_DOF_MODE=1] + f.readline() # StC LOCATION + StC_vt['StC_P_X'] = float_read(f.readline().split()[0]) # -51.75 StC_P_X - At rest X position of StC (m) + StC_vt['StC_P_Y'] = float_read(f.readline().split()[0]) # 0 StC_P_Y - At rest Y position of StC (m) + StC_vt['StC_P_Z'] = float_read(f.readline().split()[0]) # -10 StC_P_Z - At rest Z position of StC (m) + f.readline() # StC INITIAL CONDITIONS + StC_vt['StC_X_DSP'] = float_read(f.readline().split()[0]) # 0 StC_X_DSP - StC X initial displacement (m) [relative to at rest position] + StC_vt['StC_Y_DSP'] = float_read(f.readline().split()[0]) # 0 StC_Y_DSP - StC Y initial displacement (m) [relative to at rest position] + StC_vt['StC_Z_DSP'] = float_read(f.readline().split()[0]) # 0 StC_Z_DSP - StC Z initial displacement (m) [relative to at rest position; used only when StC_DOF_MODE=1 and StC_Z_DOF=TRUE] + StC_vt['StC_Z_PreLd'] = f.readline().split()[0] # "none" StC_Z_PreLd - StC Z prefloat_read(f.readline().split()[0]) #-load (N) {"gravity" to offset for gravity load; "none" or 0 to turn off} [used only when StC_DOF_MODE=1 and StC_Z_DOF=TRUE] + f.readline() # StC CONFIGURATION + StC_vt['StC_X_NSP'] = float_read(f.readline().split()[0]) # 0 StC_X_NSP - Negative stop position (minimum X mass displacement) (m) + StC_vt['StC_X_PSP'] = float_read(f.readline().split()[0]) # 0 StC_X_PSP - Positive stop position (maximum X mass displacement) (m) + StC_vt['StC_Y_PSP'] = float_read(f.readline().split()[0]) # 0 StC_Y_PSP - Positive stop position (maximum Y mass displacement) (m) + StC_vt['StC_Y_NSP'] = float_read(f.readline().split()[0]) # 0 StC_Y_NSP - Negative stop position (minimum Y mass displacement) (m) + StC_vt['StC_Z_PSP'] = float_read(f.readline().split()[0]) # 0 StC_Z_PSP - Positive stop position (maximum Z mass displacement) (m) [used only when StC_DOF_MODE=1 and StC_Z_DOF=TRUE] + StC_vt['StC_Z_NSP'] = float_read(f.readline().split()[0]) # 0 StC_Z_NSP - Negative stop position (minimum Z mass displacement) (m) [used only when StC_DOF_MODE=1 and StC_Z_DOF=TRUE] + f.readline() # StC MASS, STIFFNESS, & DAMPING + StC_vt['StC_X_M'] = float_read(f.readline().split()[0]) # 0 StC_X_M - StC X mass (kg) [must equal StC_Y_M for StC_DOF_MODE = 2] + StC_vt['StC_Y_M'] = float_read(f.readline().split()[0]) # 50 StC_Y_M - StC Y mass (kg) [must equal StC_X_M for StC_DOF_MODE = 2] + StC_vt['StC_Z_M'] = float_read(f.readline().split()[0]) # 0 StC_Z_M - StC Z mass (kg) [used only when StC_DOF_MODE=1 and StC_Z_DOF=TRUE] + StC_vt['StC_XY_M'] = float_read(f.readline().split()[0]) # 0 StC_XY_M - StC XY mass (kg) [used only when StC_DOF_MODE=2] + StC_vt['StC_X_K'] = float_read(f.readline().split()[0]) # 2300 StC_X_K - StC X stiffness (N/m) + StC_vt['StC_Y_K'] = float_read(f.readline().split()[0]) # 2300 StC_Y_K - StC Y stiffness (N/m) + StC_vt['StC_Z_K'] = float_read(f.readline().split()[0]) # 0 StC_Z_K - StC Z stiffness (N/m) [used only when StC_DOF_MODE=1 and StC_Z_DOF=TRUE] + StC_vt['StC_X_C'] = float_read(f.readline().split()[0]) # 35 StC_X_C - StC X damping (N/(m/s)) + StC_vt['StC_Y_C'] = float_read(f.readline().split()[0]) #float_read(f.readline().split()[0]) # 35 StC_Y_C - StC Y damping (N/(m/s)) + StC_vt['StC_Z_C'] = float_read(f.readline().split()[0]) # 0 StC_Z_C - StC Z damping (N/(m/s)) [used only when StC_DOF_MODE=1 and StC_Z_DOF=TRUE] + StC_vt['StC_X_KS'] = float_read(f.readline().split()[0]) # 0 StC_X_KS - Stop spring X stiffness (N/m) + StC_vt['StC_Y_KS'] = float_read(f.readline().split()[0]) # 0 StC_Y_KS - Stop spring Y stiffness (N/m) + StC_vt['StC_Z_KS'] = float_read(f.readline().split()[0]) # 0 StC_Z_KS - Stop spring Z stiffness (N/m) [used only when StC_DOF_MODE=1 and StC_Z_DOF=TRUE] + StC_vt['StC_X_CS'] = float_read(f.readline().split()[0]) # 0 StC_X_CS - Stop spring X damping (N/(m/s)) + StC_vt['StC_Y_CS'] = float_read(f.readline().split()[0]) # 0 StC_Y_CS - Stop spring Y damping (N/(m/s)) + StC_vt['StC_Z_CS'] = float_read(f.readline().split()[0]) # 0 StC_Z_CS - Stop spring Z damping (N/(m/s)) [used only when StC_DOF_MODE=1 and StC_Z_DOF=TRUE] + f.readline() # StC USER-DEFINED SPRING FORCES + StC_vt['Use_F_TBL'] = bool_read(f.readline().split()[0]) # False Use_F_TBL - Use spring force from user-defined table (flag) + StC_vt['NKInpSt'] = int_read(f.readline().split()[0]) # 17 NKInpSt - Number of spring force input stations + + StC_vt['SpringForceTable'] = {} + table = StC_vt['SpringForceTable'] + table['X'] = [None] * StC_vt['NKInpSt'] + table['F_X'] = [None] * StC_vt['NKInpSt'] + table['Y'] = [None] * StC_vt['NKInpSt'] + table['F_Y'] = [None] * StC_vt['NKInpSt'] + table['Z'] = [None] * StC_vt['NKInpSt'] + table['F_Z'] = [None] * StC_vt['NKInpSt'] + + f.readline() + # if StC_vt['Use_F_TBL']: + f.readline() + f.readline() + for i in range(StC_vt['NKInpSt']): + ln = f.readline().split() + table['X'][i] = float(ln[0]) + table['F_X'][i] = float(ln[1]) + table['Y'][i] = float(ln[2]) + table['F_Y'][i] = float(ln[3]) + table['Z'][i] = float(ln[4]) + table['F_Z'][i] = float(ln[5]) + # else: + # # Skip until next section + # data_line = f.readline().strip().split() + # while data_line[0][:3] != '---': + # data_line = f.readline().strip().split() + + # StructCtrl CONTROL, skip this readline() because it already happened + f.readline() + StC_vt['StC_CMODE'] = int_read(f.readline().split()[0]) # 5 StC_CMODE - Control mode (switch) {0:none; 1: Semi-Active Control Mode; 4: Active Control Mode through Simulink (not available); 5: Active Control Mode through Bladed interface} + StC_vt['StC_CChan'] = int_read(f.readline().split()[0]) # 0 StC_CChan - Control channel group (1:10) for stiffness and damping (StC_[XYZ]_K, StC_[XYZ]_C, and StC_[XYZ]_Brake) (specify additional channels for blade instances of StC active control -- one channel per blade) [used only when StC_DOF_MODE=1 or 2, and StC_CMODE=4 or 5] + StC_vt['StC_SA_MODE'] = int_read(f.readline().split()[0]) # 1 StC_SA_MODE - Semi-Active control mode {1: velocity-based ground hook control; 2: Inverse velocity-based ground hook control; 3: displacement-based ground hook control 4: Phase difference Algorithm with Friction Force 5: Phase difference Algorithm with Damping Force} (-) + StC_vt['StC_X_C_LOW'] = float_read(f.readline().split()[0]) # 0 StC_X_C_LOW - StC X low damping for ground hook control + StC_vt['StC_X_C_HIGH'] = float_read(f.readline().split()[0]) # 0 StC_X_C_HIGH - StC X high damping for ground hook control + StC_vt['StC_Y_C_HIGH'] = float_read(f.readline().split()[0]) # 0 StC_Y_C_HIGH - StC Y high damping for ground hook control + StC_vt['StC_Y_C_LOW'] = float_read(f.readline().split()[0]) # 0 StC_Y_C_LOW - StC Y low damping for ground hook control + StC_vt['StC_Z_C_HIGH'] = float_read(f.readline().split()[0]) # 0 StC_Z_C_HIGH - StC Z high damping for ground hook control [used only when StC_DOF_MODE=1 and StC_Z_DOF=TRUE] + StC_vt['StC_Z_C_LOW'] = float_read(f.readline().split()[0]) # 0 StC_Z_C_LOW - StC Z low damping for ground hook control [used only when StC_DOF_MODE=1 and StC_Z_DOF=TRUE] + StC_vt['StC_X_C_BRAKE'] = float_read(f.readline().split()[0]) # 0 StC_X_C_BRAKE - StC X high damping for braking the StC (Don't use it now. should be zero) + StC_vt['StC_Y_C_BRAKE'] = float_read(f.readline().split()[0]) # 0 StC_Y_C_BRAKE - StC Y high damping for braking the StC (Don't use it now. should be zero) + StC_vt['StC_Z_C_BRAKE'] = float_read(f.readline().split()[0]) # 0 StC_Z_C_BRAKE - StC Z high damping for braking the StC (Don't use it now. should be zero) [used only when StC_DOF_MODE=1 and StC_Z_DOF=TRUE] + f.readline() # TLCD + StC_vt['L_X'] = float_read(f.readline().split()[0]) # 7.9325 L_X - X TLCD total length (m) + StC_vt['B_X'] = float_read(f.readline().split()[0]) # 6.5929 B_X - X TLCD horizontal length (m) + StC_vt['area_X'] = float_read(f.readline().split()[0]) # 2.0217 area_X - X TLCD cross-sectional area of vertical column (m^2) + StC_vt['area_ratio_X'] = float_read(f.readline().split()[0]) # 0.913 area_ratio_X - X TLCD cross-sectional area ratio (vertical column area divided by horizontal column area) (-) + StC_vt['headLossCoeff_X'] = float_read(f.readline().split()[0]) # 2.5265 headLossCoeff_X - X TLCD head loss coeff (-) + StC_vt['rho_X'] = float_read(f.readline().split()[0]) # 1000 rho_X - X TLCD liquid density (kg/m^3) + StC_vt['L_Y'] = float_read(f.readline().split()[0]) # 3.5767 L_Y - Y TLCD total length (m) + StC_vt['B_Y'] = float_read(f.readline().split()[0]) # 2.1788 B_Y - Y TLCD horizontal length (m) + StC_vt['area_Y'] = float_read(f.readline().split()[0]) # 1.2252 area_Y - Y TLCD cross-sectional area of vertical column (m^2) + StC_vt['area_ratio_Y'] = float_read(f.readline().split()[0]) # 2.7232 area_ratio_Y - Y TLCD cross-sectional area ratio (vertical column area divided by horizontal column area) (-) + StC_vt['headLossCoeff_Y'] = float_read(f.readline().split()[0]) # 0.6433 headLossCoeff_Y - Y TLCD head loss coeff (-) + StC_vt['rho_Y'] = float_read(f.readline().split()[0]) # 1000 rho_Y - Y TLCD liquid density (kg/m^3) + f.readline() # PRESCRIBED TIME SERIES + StC_vt['PrescribedForcesCoord'] = int_read(f.readline().split()[0]) # 2 PrescribedForcesCoord- Prescribed forces are in global or local coordinates (switch) {1: global; 2: local} + StC_vt['PrescribedForcesFile'] = f.readline().split()[0] # "Bld-TimeForceSeries.dat" PrescribedForcesFile - Time series force and moment (7 columns of time, FX, FY, FZ, MX, MY, MZ) + f.readline() + + return StC_vt + + def read_DISCON_in(self): + # Read the Bladed style Interface controller input file, intended for ROSCO https://github.com/NREL/rosco.toolbox + + discon_in_file = os.path.normpath(os.path.join(self.FAST_directory, self.fst_vt['ServoDyn']['DLL_InFile'])) + + if os.path.exists(discon_in_file): + + # Read DISCON infiles + self.fst_vt['DISCON_in'] = read_DISCON(discon_in_file) + + # Some additional filename parsing + self.fst_vt['DISCON_in']['PerfFileName'] = os.path.abspath(os.path.join(self.FAST_directory, self.fst_vt['DISCON_in']['PerfFileName'])) + + # Try to read rotor performance data if it is available + try: + pitch_vector, tsr_vector, Cp_table, Ct_table, Cq_table = load_from_txt(self.fst_vt['DISCON_in']['PerfFileName']) + + RotorPerformance = ROSCO_turbine.RotorPerformance + Cp = RotorPerformance(Cp_table, pitch_vector, tsr_vector) + Ct = RotorPerformance(Ct_table, pitch_vector, tsr_vector) + Cq = RotorPerformance(Cq_table, pitch_vector, tsr_vector) + + self.fst_vt['DISCON_in']['Cp'] = Cp + self.fst_vt['DISCON_in']['Ct'] = Ct + self.fst_vt['DISCON_in']['Cq'] = Cq + self.fst_vt['DISCON_in']['Cp_pitch_initial_rad'] = pitch_vector + self.fst_vt['DISCON_in']['Cp_TSR_initial'] = tsr_vector + self.fst_vt['DISCON_in']['Cp_table'] = Cp_table + self.fst_vt['DISCON_in']['Ct_table'] = Ct_table + self.fst_vt['DISCON_in']['Cq_table'] = Cq_table + except: + print('WARNING: Cp table not loaded!') + + # Add some DISCON entries that might be needed within WISDEM + self.fst_vt['DISCON_in']['v_rated'] = 1. + + else: + del self.fst_vt['DISCON_in'] + + def read_HydroDyn(self, hd_file): + + f = open(hd_file) + + f.readline() + f.readline() + + self.fst_vt['HydroDyn']['Echo'] = bool_read(f.readline().split()[0]) + # ENVIRONMENTAL CONDITIONS + f.readline() + self.fst_vt['HydroDyn']['WtrDens'] = float_read(f.readline().split()[0]) + self.fst_vt['HydroDyn']['WtrDpth'] = float_read(f.readline().split()[0]) + self.fst_vt['HydroDyn']['MSL2SWL'] = float_read(f.readline().split()[0]) + + # WAVES + f.readline() + self.fst_vt['HydroDyn']['WaveMod'] = int_read(f.readline().split()[0]) + self.fst_vt['HydroDyn']['WaveStMod'] = int_read(f.readline().split()[0]) + self.fst_vt['HydroDyn']['WaveTMax'] = float_read(f.readline().split()[0]) + self.fst_vt['HydroDyn']['WaveDT'] = float_read(f.readline().split()[0]) + self.fst_vt['HydroDyn']['WaveHs'] = float_read(f.readline().split()[0]) + self.fst_vt['HydroDyn']['WaveTp'] = float_read(f.readline().split()[0]) + self.fst_vt['HydroDyn']['WavePkShp'] = float_read(f.readline().split()[0]) # default + self.fst_vt['HydroDyn']['WvLowCOff'] = float_read(f.readline().split()[0]) + self.fst_vt['HydroDyn']['WvHiCOff'] = float_read(f.readline().split()[0]) + self.fst_vt['HydroDyn']['WaveDir'] = float_read(f.readline().split()[0]) + self.fst_vt['HydroDyn']['WaveDirMod'] = int_read(f.readline().split()[0]) + self.fst_vt['HydroDyn']['WaveDirSpread'] = float_read(f.readline().split()[0]) + self.fst_vt['HydroDyn']['WaveNDir'] = int_read(f.readline().split()[0]) + self.fst_vt['HydroDyn']['WaveDirRange'] = float_read(f.readline().split()[0]) + self.fst_vt['HydroDyn']['WaveSeed1'] = int_read(f.readline().split()[0]) + self.fst_vt['HydroDyn']['WaveSeed2'] = int_read(f.readline().split()[0]) + self.fst_vt['HydroDyn']['WaveNDAmp'] = bool_read(f.readline().split()[0]) + self.fst_vt['HydroDyn']['WvKinFile'] = f.readline().split()[0][1:-1] + self.fst_vt['HydroDyn']['NWaveElev'] = int_read(f.readline().split()[0]) + self.fst_vt['HydroDyn']['WaveElevxi'] = [idx.strip() for idx in f.readline().split('WaveElevxi')[0].split(',')] + self.fst_vt['HydroDyn']['WaveElevyi'] = [idx.strip() for idx in f.readline().split('WaveElevyi')[0].split(',')] + + # 2ND-ORDER WAVES + f.readline() + self.fst_vt['HydroDyn']['WvDiffQTF'] = bool_read(f.readline().split()[0]) + self.fst_vt['HydroDyn']['WvSumQTF'] = bool_read(f.readline().split()[0]) + self.fst_vt['HydroDyn']['WvLowCOffD'] = float_read(f.readline().split()[0]) + self.fst_vt['HydroDyn']['WvHiCOffD'] = float_read(f.readline().split()[0]) + self.fst_vt['HydroDyn']['WvLowCOffS'] = float_read(f.readline().split()[0]) + self.fst_vt['HydroDyn']['WvHiCOffS'] = float_read(f.readline().split()[0]) + + # CURRENT + f.readline() + self.fst_vt['HydroDyn']['CurrMod'] = int_read(f.readline().split()[0]) + self.fst_vt['HydroDyn']['CurrSSV0'] = float_read(f.readline().split()[0]) + self.fst_vt['HydroDyn']['CurrSSDir'] = float_read(f.readline().split()[0]) + self.fst_vt['HydroDyn']['CurrNSRef'] = float_read(f.readline().split()[0]) + self.fst_vt['HydroDyn']['CurrNSV0'] = float_read(f.readline().split()[0]) + self.fst_vt['HydroDyn']['CurrNSDir'] = float_read(f.readline().split()[0]) + self.fst_vt['HydroDyn']['CurrDIV'] = float_read(f.readline().split()[0]) + self.fst_vt['HydroDyn']['CurrDIDir'] = float_read(f.readline().split()[0]) + + # FLOATING PLATFORM + f.readline() + self.fst_vt['HydroDyn']['PotMod'] = int_read(f.readline().split()[0]) + self.fst_vt['HydroDyn']['ExctnMod'] = int_read(f.readline().split()[0]) + self.fst_vt['HydroDyn']['RdtnMod'] = int_read(f.readline().split()[0]) + self.fst_vt['HydroDyn']['RdtnTMax'] = float_read(f.readline().split()[0]) + self.fst_vt['HydroDyn']['RdtnDT'] = float_read(f.readline().split()[0]) + self.fst_vt['HydroDyn']['NBody'] = int_read(f.readline().split()[0]) + self.fst_vt['HydroDyn']['NBodyMod'] = int_read(f.readline().split()[0]) + self.fst_vt['HydroDyn']['PotFile'] = os.path.normpath(os.path.join(os.path.split(hd_file)[0], f.readline().split()[0][1:-1])) + self.fst_vt['HydroDyn']['WAMITULEN'] = float_read(f.readline().split()[0]) + self.fst_vt['HydroDyn']['PtfmRefxt'] = float_read(f.readline().split()[0]) + self.fst_vt['HydroDyn']['PtfmRefyt'] = float_read(f.readline().split()[0]) + self.fst_vt['HydroDyn']['PtfmRefzt'] = float_read(f.readline().split()[0]) + self.fst_vt['HydroDyn']['PtfmRefztRot'] = float_read(f.readline().split()[0]) + self.fst_vt['HydroDyn']['PtfmVol0'] = float_read(f.readline().split()[0]) + self.fst_vt['HydroDyn']['PtfmCOBxt'] = float_read(f.readline().split()[0]) + self.fst_vt['HydroDyn']['PtfmCOByt'] = float_read(f.readline().split()[0]) + + # 2ND-ORDER FLOATING PLATFORM FORCES + f.readline() + self.fst_vt['HydroDyn']['MnDrift'] = int_read(f.readline().split()[0]) # ? + self.fst_vt['HydroDyn']['NewmanApp'] = int_read(f.readline().split()[0]) # ? + self.fst_vt['HydroDyn']['DiffQTF'] = int_read(f.readline().split()[0]) # ? + self.fst_vt['HydroDyn']['SumQTF'] = int_read(f.readline().split()[0]) # ? + + # PLATFORM ADDITIONAL STIFFNESS AND DAMPING + f.readline() + # Get number of F0 terms [If NBodyMod=1, one size 6*NBody x 1 vector; if NBodyMod>1, NBody size 6 x 1 vectors] + NBody = self.fst_vt['HydroDyn']['NBody'] + if self.fst_vt['HydroDyn']['NBodyMod'] == 1: + self.fst_vt['HydroDyn']['AddF0'] = [float(f.readline().strip().split()[0]) for i in range(6*NBody)] + elif self.fst_vt['HydroDyn']['NBodyMod'] > 1: + self.fst_vt['HydroDyn']['AddF0'] = [[float(idx) for idx in f.readline().strip().split()[:NBody]] for i in range(6)] + else: + raise Exception("Invalid value for fst_vt['HydroDyn']['NBodyMod']") + + self.fst_vt['HydroDyn']['AddCLin'] = np.array([[float(idx) for idx in f.readline().strip().split()[:6]] for i in range(6)]) + self.fst_vt['HydroDyn']['AddBLin'] = np.array([[float(idx) for idx in f.readline().strip().split()[:6]] for i in range(6)]) + self.fst_vt['HydroDyn']['AddBQuad'] = np.array([[float(idx) for idx in f.readline().strip().split()[:6]] for i in range(6)]) + + #AXIAL COEFFICIENTS + f.readline() + self.fst_vt['HydroDyn']['NAxCoef'] = int_read(f.readline().split()[0]) + self.fst_vt['HydroDyn']['AxCoefID'] = [None]*self.fst_vt['HydroDyn']['NAxCoef'] + self.fst_vt['HydroDyn']['AxCd'] = [None]*self.fst_vt['HydroDyn']['NAxCoef'] + self.fst_vt['HydroDyn']['AxCa'] = [None]*self.fst_vt['HydroDyn']['NAxCoef'] + self.fst_vt['HydroDyn']['AxCp'] = [None]*self.fst_vt['HydroDyn']['NAxCoef'] + ln = f.readline().split() + ln = f.readline().split() + for i in range(self.fst_vt['HydroDyn']['NAxCoef']): + ln = f.readline().split() + self.fst_vt['HydroDyn']['AxCoefID'][i] = int(ln[0]) + self.fst_vt['HydroDyn']['AxCd'][i] = float(ln[1]) + self.fst_vt['HydroDyn']['AxCa'][i] = float(ln[2]) + self.fst_vt['HydroDyn']['AxCp'][i] = float(ln[3]) + + #MEMBER JOINTS + f.readline() + self.fst_vt['HydroDyn']['NJoints'] = int_read(f.readline().split()[0]) + self.fst_vt['HydroDyn']['JointID'] = [None]*self.fst_vt['HydroDyn']['NJoints'] + self.fst_vt['HydroDyn']['Jointxi'] = [None]*self.fst_vt['HydroDyn']['NJoints'] + self.fst_vt['HydroDyn']['Jointyi'] = [None]*self.fst_vt['HydroDyn']['NJoints'] + self.fst_vt['HydroDyn']['Jointzi'] = [None]*self.fst_vt['HydroDyn']['NJoints'] + self.fst_vt['HydroDyn']['JointAxID'] = [None]*self.fst_vt['HydroDyn']['NJoints'] + self.fst_vt['HydroDyn']['JointOvrlp'] = [None]*self.fst_vt['HydroDyn']['NJoints'] + ln = f.readline().split() + ln = f.readline().split() + for i in range(self.fst_vt['HydroDyn']['NJoints']): + ln = f.readline().split() + self.fst_vt['HydroDyn']['JointID'][i] = int(ln[0]) + self.fst_vt['HydroDyn']['Jointxi'][i] = float(ln[1]) + self.fst_vt['HydroDyn']['Jointyi'][i] = float(ln[2]) + self.fst_vt['HydroDyn']['Jointzi'][i] = float(ln[3]) + self.fst_vt['HydroDyn']['JointAxID'][i] = int(ln[4]) + self.fst_vt['HydroDyn']['JointOvrlp'][i] = int(ln[5]) + + #MEMBER CROSS-SECTION PROPERTIES + f.readline() + self.fst_vt['HydroDyn']['NPropSets'] = int_read(f.readline().split()[0]) + self.fst_vt['HydroDyn']['PropSetID'] = [None]*self.fst_vt['HydroDyn']['NPropSets'] + self.fst_vt['HydroDyn']['PropD'] = [None]*self.fst_vt['HydroDyn']['NPropSets'] + self.fst_vt['HydroDyn']['PropThck'] = [None]*self.fst_vt['HydroDyn']['NPropSets'] + ln = f.readline().split() + ln = f.readline().split() + for i in range(self.fst_vt['HydroDyn']['NPropSets']): + ln = f.readline().split() + self.fst_vt['HydroDyn']['PropSetID'][i] = int(ln[0]) + self.fst_vt['HydroDyn']['PropD'][i] = float(ln[1]) + self.fst_vt['HydroDyn']['PropThck'][i] = float(ln[2]) + + #SIMPLE HYDRODYNAMIC COEFFICIENTS + f.readline() + f.readline() + f.readline() + ln = f.readline().split() + self.fst_vt['HydroDyn']['SimplCd'] = float(ln[0]) + self.fst_vt['HydroDyn']['SimplCdMG'] = float(ln[1]) + self.fst_vt['HydroDyn']['SimplCa'] = float(ln[2]) + self.fst_vt['HydroDyn']['SimplCaMG'] = float(ln[3]) + self.fst_vt['HydroDyn']['SimplCp'] = float(ln[4]) + self.fst_vt['HydroDyn']['SimplCpMG'] = float(ln[5]) + self.fst_vt['HydroDyn']['SimplAxCd'] = float(ln[6]) + self.fst_vt['HydroDyn']['SimplAxCdMG'] = float(ln[7]) + self.fst_vt['HydroDyn']['SimplAxCa'] = float(ln[8]) + self.fst_vt['HydroDyn']['SimplAxCaMG'] = float(ln[9]) + self.fst_vt['HydroDyn']['SimplAxCp'] = float(ln[10]) + self.fst_vt['HydroDyn']['SimplAxCpMG'] = float(ln[11]) + + #DEPTH-BASED HYDRODYNAMIC COEFFICIENTS + f.readline() + self.fst_vt['HydroDyn']['NCoefDpth'] = int_read(f.readline().split()[0]) + self.fst_vt['HydroDyn']['Dpth'] = [None]*self.fst_vt['HydroDyn']['NCoefDpth'] + self.fst_vt['HydroDyn']['DpthCd'] = [None]*self.fst_vt['HydroDyn']['NCoefDpth'] + self.fst_vt['HydroDyn']['DpthCdMG'] = [None]*self.fst_vt['HydroDyn']['NCoefDpth'] + self.fst_vt['HydroDyn']['DpthCa'] = [None]*self.fst_vt['HydroDyn']['NCoefDpth'] + self.fst_vt['HydroDyn']['DpthCaMG'] = [None]*self.fst_vt['HydroDyn']['NCoefDpth'] + self.fst_vt['HydroDyn']['DpthCp'] = [None]*self.fst_vt['HydroDyn']['NCoefDpth'] + self.fst_vt['HydroDyn']['DpthCpMG'] = [None]*self.fst_vt['HydroDyn']['NCoefDpth'] + self.fst_vt['HydroDyn']['DpthAxCd'] = [None]*self.fst_vt['HydroDyn']['NCoefDpth'] + self.fst_vt['HydroDyn']['DpthAxCdMG'] = [None]*self.fst_vt['HydroDyn']['NCoefDpth'] + self.fst_vt['HydroDyn']['DpthAxCa'] = [None]*self.fst_vt['HydroDyn']['NCoefDpth'] + self.fst_vt['HydroDyn']['DpthAxCaMG'] = [None]*self.fst_vt['HydroDyn']['NCoefDpth'] + self.fst_vt['HydroDyn']['DpthAxCp'] = [None]*self.fst_vt['HydroDyn']['NCoefDpth'] + self.fst_vt['HydroDyn']['DpthAxCpMG'] = [None]*self.fst_vt['HydroDyn']['NCoefDpth'] + ln = f.readline().split() + ln = f.readline().split() + for i in range(self.fst_vt['HydroDyn']['NCoefDpth']): + ln = f.readline().split() + self.fst_vt['HydroDyn']['Dpth'][i] = float(ln[0]) + self.fst_vt['HydroDyn']['DpthCd'][i] = float(ln[1]) + self.fst_vt['HydroDyn']['DpthCdMG'][i] = float(ln[2]) + self.fst_vt['HydroDyn']['DpthCa'][i] = float(ln[3]) + self.fst_vt['HydroDyn']['DpthCaMG'][i] = float(ln[4]) + self.fst_vt['HydroDyn']['DpthCp'][i] = float(ln[5]) + self.fst_vt['HydroDyn']['DpthCpMG'][i] = float(ln[6]) + self.fst_vt['HydroDyn']['DpthAxCd'][i] = float(ln[7]) + self.fst_vt['HydroDyn']['DpthAxCdMG'][i] = float(ln[8]) + self.fst_vt['HydroDyn']['DpthAxCa'][i] = float(ln[9]) + self.fst_vt['HydroDyn']['DpthAxCaMG'][i] = float(ln[10]) + self.fst_vt['HydroDyn']['DpthAxCp'][i] = float(ln[11]) + self.fst_vt['HydroDyn']['DpthAxCpMG'][i] = float(ln[12]) + + #MEMBER-BASED HYDRODYNAMIC COEFFICIENTS + f.readline() + self.fst_vt['HydroDyn']['NCoefMembers'] = int_read(f.readline().split()[0]) + self.fst_vt['HydroDyn']['MemberID_HydC'] = [None]*self.fst_vt['HydroDyn']['NCoefMembers'] + self.fst_vt['HydroDyn']['MemberCd1'] = [None]*self.fst_vt['HydroDyn']['NCoefMembers'] + self.fst_vt['HydroDyn']['MemberCd2'] = [None]*self.fst_vt['HydroDyn']['NCoefMembers'] + self.fst_vt['HydroDyn']['MemberCdMG1'] = [None]*self.fst_vt['HydroDyn']['NCoefMembers'] + self.fst_vt['HydroDyn']['MemberCdMG2'] = [None]*self.fst_vt['HydroDyn']['NCoefMembers'] + self.fst_vt['HydroDyn']['MemberCa1'] = [None]*self.fst_vt['HydroDyn']['NCoefMembers'] + self.fst_vt['HydroDyn']['MemberCa2'] = [None]*self.fst_vt['HydroDyn']['NCoefMembers'] + self.fst_vt['HydroDyn']['MemberCaMG1'] = [None]*self.fst_vt['HydroDyn']['NCoefMembers'] + self.fst_vt['HydroDyn']['MemberCaMG2'] = [None]*self.fst_vt['HydroDyn']['NCoefMembers'] + self.fst_vt['HydroDyn']['MemberCp1'] = [None]*self.fst_vt['HydroDyn']['NCoefMembers'] + self.fst_vt['HydroDyn']['MemberCp2'] = [None]*self.fst_vt['HydroDyn']['NCoefMembers'] + self.fst_vt['HydroDyn']['MemberCpMG1'] = [None]*self.fst_vt['HydroDyn']['NCoefMembers'] + self.fst_vt['HydroDyn']['MemberCpMG2'] = [None]*self.fst_vt['HydroDyn']['NCoefMembers'] + self.fst_vt['HydroDyn']['MemberAxCd1'] = [None]*self.fst_vt['HydroDyn']['NCoefMembers'] + self.fst_vt['HydroDyn']['MemberAxCd2'] = [None]*self.fst_vt['HydroDyn']['NCoefMembers'] + self.fst_vt['HydroDyn']['MemberAxCdMG1'] = [None]*self.fst_vt['HydroDyn']['NCoefMembers'] + self.fst_vt['HydroDyn']['MemberAxCdMG2'] = [None]*self.fst_vt['HydroDyn']['NCoefMembers'] + self.fst_vt['HydroDyn']['MemberAxCa1'] = [None]*self.fst_vt['HydroDyn']['NCoefMembers'] + self.fst_vt['HydroDyn']['MemberAxCa2'] = [None]*self.fst_vt['HydroDyn']['NCoefMembers'] + self.fst_vt['HydroDyn']['MemberAxCaMG1'] = [None]*self.fst_vt['HydroDyn']['NCoefMembers'] + self.fst_vt['HydroDyn']['MemberAxCaMG2'] = [None]*self.fst_vt['HydroDyn']['NCoefMembers'] + self.fst_vt['HydroDyn']['MemberAxCp1'] = [None]*self.fst_vt['HydroDyn']['NCoefMembers'] + self.fst_vt['HydroDyn']['MemberAxCp2'] = [None]*self.fst_vt['HydroDyn']['NCoefMembers'] + self.fst_vt['HydroDyn']['MemberAxCpMG1'] = [None]*self.fst_vt['HydroDyn']['NCoefMembers'] + self.fst_vt['HydroDyn']['MemberAxCpMG2'] = [None]*self.fst_vt['HydroDyn']['NCoefMembers'] + + f.readline() + f.readline() + for i in range(self.fst_vt['HydroDyn']['NCoefMembers']): + ln = f.readline().split() + self.fst_vt['HydroDyn']['MemberID_HydC'][i] = int(ln[0]) + self.fst_vt['HydroDyn']['MemberCd1'][i] = float(ln[1]) + self.fst_vt['HydroDyn']['MemberCd2'][i] = float(ln[2]) + self.fst_vt['HydroDyn']['MemberCdMG1'][i] = float(ln[3]) + self.fst_vt['HydroDyn']['MemberCdMG2'][i] = float(ln[4]) + self.fst_vt['HydroDyn']['MemberCa1'][i] = float(ln[5]) + self.fst_vt['HydroDyn']['MemberCa2'][i] = float(ln[6]) + self.fst_vt['HydroDyn']['MemberCaMG1'][i] = float(ln[7]) + self.fst_vt['HydroDyn']['MemberCaMG2'][i] = float(ln[8]) + self.fst_vt['HydroDyn']['MemberCp1'][i] = float(ln[9]) + self.fst_vt['HydroDyn']['MemberCp2'][i] = float(ln[10]) + self.fst_vt['HydroDyn']['MemberCpMG1'][i] = float(ln[11]) + self.fst_vt['HydroDyn']['MemberCpMG2'][i] = float(ln[12]) + self.fst_vt['HydroDyn']['MemberAxCd1'][i] = float(ln[13]) + self.fst_vt['HydroDyn']['MemberAxCd2'][i] = float(ln[14]) + self.fst_vt['HydroDyn']['MemberAxCdMG1'][i] = float(ln[15]) + self.fst_vt['HydroDyn']['MemberAxCdMG2'][i] = float(ln[16]) + self.fst_vt['HydroDyn']['MemberAxCa1'][i] = float(ln[17]) + self.fst_vt['HydroDyn']['MemberAxCa2'][i] = float(ln[18]) + self.fst_vt['HydroDyn']['MemberAxCaMG1'][i] = float(ln[19]) + self.fst_vt['HydroDyn']['MemberAxCaMG2'][i] = float(ln[20]) + self.fst_vt['HydroDyn']['MemberAxCp1'][i] = float(ln[21]) + self.fst_vt['HydroDyn']['MemberAxCp2'][i] = float(ln[22]) + self.fst_vt['HydroDyn']['MemberAxCpMG1'][i] = float(ln[23]) + self.fst_vt['HydroDyn']['MemberAxCpMG2'][i] = float(ln[24]) + + #MEMBERS + f.readline() + self.fst_vt['HydroDyn']['NMembers'] = int_read(f.readline().split()[0]) + self.fst_vt['HydroDyn']['MemberID'] = [None]*self.fst_vt['HydroDyn']['NMembers'] + self.fst_vt['HydroDyn']['MJointID1'] = [None]*self.fst_vt['HydroDyn']['NMembers'] + self.fst_vt['HydroDyn']['MJointID2'] = [None]*self.fst_vt['HydroDyn']['NMembers'] + self.fst_vt['HydroDyn']['MPropSetID1'] = [None]*self.fst_vt['HydroDyn']['NMembers'] + self.fst_vt['HydroDyn']['MPropSetID2'] = [None]*self.fst_vt['HydroDyn']['NMembers'] + self.fst_vt['HydroDyn']['MDivSize'] = [None]*self.fst_vt['HydroDyn']['NMembers'] + self.fst_vt['HydroDyn']['MCoefMod'] = [None]*self.fst_vt['HydroDyn']['NMembers'] + self.fst_vt['HydroDyn']['PropPot'] = [None]*self.fst_vt['HydroDyn']['NMembers'] + ln = f.readline().split() + ln = f.readline().split() + for i in range(self.fst_vt['HydroDyn']['NMembers']): + ln = f.readline().split() + self.fst_vt['HydroDyn']['MemberID'][i] = int(ln[0]) + self.fst_vt['HydroDyn']['MJointID1'][i] = int(ln[1]) + self.fst_vt['HydroDyn']['MJointID2'][i] = int(ln[2]) + self.fst_vt['HydroDyn']['MPropSetID1'][i] = int(ln[3]) + self.fst_vt['HydroDyn']['MPropSetID2'][i] = int(ln[4]) + self.fst_vt['HydroDyn']['MDivSize'][i] = float(ln[5]) + self.fst_vt['HydroDyn']['MCoefMod'][i] = int(ln[6]) + self.fst_vt['HydroDyn']['PropPot'][i] = bool_read(ln[7]) + + #FILLED MEMBERS + f.readline() + self.fst_vt['HydroDyn']['NFillGroups'] = int_read(f.readline().split()[0]) + self.fst_vt['HydroDyn']['FillNumM'] = [None]*self.fst_vt['HydroDyn']['NFillGroups'] + self.fst_vt['HydroDyn']['FillMList'] = [None]*self.fst_vt['HydroDyn']['NFillGroups'] + self.fst_vt['HydroDyn']['FillFSLoc'] = [None]*self.fst_vt['HydroDyn']['NFillGroups'] + self.fst_vt['HydroDyn']['FillDens'] = [None]*self.fst_vt['HydroDyn']['NFillGroups'] + ln = f.readline().split() + ln = f.readline().split() + for i in range(self.fst_vt['HydroDyn']['NFillGroups']): + ln = f.readline().split() + self.fst_vt['HydroDyn']['FillNumM'][i] = int(ln[0]) + self.fst_vt['HydroDyn']['FillMList'][i] = [int(j) for j in ln[1:-2]] + self.fst_vt['HydroDyn']['FillFSLoc'][i] = float(ln[-2]) + self.fst_vt['HydroDyn']['FillDens'][i] = float(ln[-1]) + + #MARINE GROWTH + f.readline() + self.fst_vt['HydroDyn']['NMGDepths'] = int_read(f.readline().split()[0]) + self.fst_vt['HydroDyn']['MGDpth'] = [None]*self.fst_vt['HydroDyn']['NMGDepths'] + self.fst_vt['HydroDyn']['MGThck'] = [None]*self.fst_vt['HydroDyn']['NMGDepths'] + self.fst_vt['HydroDyn']['MGDens'] = [None]*self.fst_vt['HydroDyn']['NMGDepths'] + ln = f.readline().split() + ln = f.readline().split() + for i in range(self.fst_vt['HydroDyn']['NMGDepths']): + ln = f.readline().split() + self.fst_vt['HydroDyn']['MGDpth'][i] = float(ln[0]) + self.fst_vt['HydroDyn']['MGThck'][i] = float(ln[1]) + self.fst_vt['HydroDyn']['MGDens'][i] = float(ln[2]) + + #MEMBER OUTPUT LIST + f.readline() + self.fst_vt['HydroDyn']['NMOutputs'] = int_read(f.readline().split()[0]) + self.fst_vt['HydroDyn']['MemberID_out'] = [None]*self.fst_vt['HydroDyn']['NMOutputs'] + self.fst_vt['HydroDyn']['NOutLoc'] = [None]*self.fst_vt['HydroDyn']['NMOutputs'] + self.fst_vt['HydroDyn']['NodeLocs'] = [None]*self.fst_vt['HydroDyn']['NMOutputs'] + ln = f.readline().split() + ln = f.readline().split() + for i in range(self.fst_vt['HydroDyn']['NMOutputs']): + ln = f.readline().split() + self.fst_vt['HydroDyn']['MemberID_out'][i] = int(ln[0]) + self.fst_vt['HydroDyn']['NOutLoc'][i] = int(ln[1]) + self.fst_vt['HydroDyn']['NodeLocs'][i] = float(ln[2]) + + #JOINT OUTPUT LIST + f.readline() + self.fst_vt['HydroDyn']['NJOutputs'] = int_read(f.readline().split()[0]) + if int(self.fst_vt['HydroDyn']['NJOutputs']) > 0: + self.fst_vt['HydroDyn']['JOutLst'] = [int(idx.strip()) for idx in f.readline().split('JOutLst')[0].split(',')] + else: + f.readline() + self.fst_vt['HydroDyn']['JOutLst'] = [0] + + #OUTPUT + f.readline() + self.fst_vt['HydroDyn']['HDSum'] = bool_read(f.readline().split()[0]) + self.fst_vt['HydroDyn']['OutAll'] = bool_read(f.readline().split()[0]) + self.fst_vt['HydroDyn']['OutSwtch'] = int_read(f.readline().split()[0]) + self.fst_vt['HydroDyn']['OutFmt'] = str(f.readline().split()[0]) + self.fst_vt['HydroDyn']['OutSFmt'] = str(f.readline().split()[0]) + + self.fst_vt['HydroDyn']['HDSum'] + self.fst_vt['HydroDyn']['OutAll'] + self.fst_vt['HydroDyn']['OutSwtch'] + self.fst_vt['HydroDyn']['OutFmt'] + self.fst_vt['HydroDyn']['OutSFmt'] + + # HydroDyn Outlist + f.readline() + data = f.readline() + while data.split()[0] != 'END': + channels = data.split('"') + channel_list = channels[1].split(',') + self.set_outlist(self.fst_vt['outlist']['HydroDyn'], channel_list) + data = f.readline() + + f.close() + + def read_SubDyn(self, sd_file): + + f = open(sd_file) + f.readline() + f.readline() + f.readline() + # SIMULATION CONTROL + self.fst_vt['SubDyn']['Echo'] = bool_read(f.readline().split()[0]) + self.fst_vt['SubDyn']['SDdeltaT'] = float_read(f.readline().split()[0]) + self.fst_vt['SubDyn']['IntMethod'] = int_read(f.readline().split()[0]) + self.fst_vt['SubDyn']['SttcSolve'] = bool_read(f.readline().split()[0]) + self.fst_vt['SubDyn']['GuyanLoadCorrection'] = bool_read(f.readline().split()[0]) + f.readline() + # FEA and CRAIG-BAMPTON PARAMETERS + self.fst_vt['SubDyn']['FEMMod'] = int_read(f.readline().split()[0]) + self.fst_vt['SubDyn']['NDiv'] = int_read(f.readline().split()[0]) + self.fst_vt['SubDyn']['CBMod'] = bool_read(f.readline().split()[0]) + self.fst_vt['SubDyn']['Nmodes'] = int_read(f.readline().split()[0]) + self.fst_vt['SubDyn']['JDampings'] = float_read(f.readline().split()[0]) + self.fst_vt['SubDyn']['GuyanDampMod'] = int_read(f.readline().split()[0]) + self.fst_vt['SubDyn']['RayleighDamp'] = read_array(f,2,array_type=float) + self.fst_vt['SubDyn']['GuyanDampSize'] = int_read(f.readline().split()[0]) + self.fst_vt['SubDyn']['GuyanDamp'] = np.array([[float(idx) for idx in f.readline().strip().split()[:6]] for i in range(self.fst_vt['SubDyn']['GuyanDampSize'])]) + f.readline() + # STRUCTURE JOINTS + self.fst_vt['SubDyn']['NJoints'] = int_read(f.readline().split()[0]) + self.fst_vt['SubDyn']['JointID'] = [None]*self.fst_vt['SubDyn']['NJoints'] + self.fst_vt['SubDyn']['JointXss'] = [None]*self.fst_vt['SubDyn']['NJoints'] + self.fst_vt['SubDyn']['JointYss'] = [None]*self.fst_vt['SubDyn']['NJoints'] + self.fst_vt['SubDyn']['JointZss'] = [None]*self.fst_vt['SubDyn']['NJoints'] + self.fst_vt['SubDyn']['JointType'] = [None]*self.fst_vt['SubDyn']['NJoints'] + self.fst_vt['SubDyn']['JointDirX'] = [None]*self.fst_vt['SubDyn']['NJoints'] + self.fst_vt['SubDyn']['JointDirY'] = [None]*self.fst_vt['SubDyn']['NJoints'] + self.fst_vt['SubDyn']['JointDirZ'] = [None]*self.fst_vt['SubDyn']['NJoints'] + self.fst_vt['SubDyn']['JointStiff'] = [None]*self.fst_vt['SubDyn']['NJoints'] + ln = f.readline().split() + ln = f.readline().split() + for i in range(self.fst_vt['SubDyn']['NJoints']): + ln = f.readline().split() + self.fst_vt['SubDyn']['JointID'][i] = int(ln[0]) + self.fst_vt['SubDyn']['JointXss'][i] = float(ln[1]) + self.fst_vt['SubDyn']['JointYss'][i] = float(ln[2]) + self.fst_vt['SubDyn']['JointZss'][i] = float(ln[3]) + self.fst_vt['SubDyn']['JointType'][i] = int(ln[4]) + self.fst_vt['SubDyn']['JointDirX'][i] = float(ln[5]) + self.fst_vt['SubDyn']['JointDirY'][i] = float(ln[6]) + self.fst_vt['SubDyn']['JointDirZ'][i] = float(ln[7]) + self.fst_vt['SubDyn']['JointStiff'][i] = float(ln[8]) + f.readline() + # BASE REACTION JOINTS + self.fst_vt['SubDyn']['NReact'] = int_read(f.readline().split()[0]) + self.fst_vt['SubDyn']['RJointID'] = [None]*self.fst_vt['SubDyn']['NReact'] + self.fst_vt['SubDyn']['RctTDXss'] = [None]*self.fst_vt['SubDyn']['NReact'] + self.fst_vt['SubDyn']['RctTDYss'] = [None]*self.fst_vt['SubDyn']['NReact'] + self.fst_vt['SubDyn']['RctTDZss'] = [None]*self.fst_vt['SubDyn']['NReact'] + self.fst_vt['SubDyn']['RctRDXss'] = [None]*self.fst_vt['SubDyn']['NReact'] + self.fst_vt['SubDyn']['RctRDYss'] = [None]*self.fst_vt['SubDyn']['NReact'] + self.fst_vt['SubDyn']['RctRDZss'] = [None]*self.fst_vt['SubDyn']['NReact'] + self.fst_vt['SubDyn']['Rct_SoilFile'] = [None]*self.fst_vt['SubDyn']['NReact'] + ln = f.readline().split() + ln = f.readline().split() + for i in range(self.fst_vt['SubDyn']['NReact']): + ln = f.readline().split() + self.fst_vt['SubDyn']['RJointID'][i] = int(ln[0]) + self.fst_vt['SubDyn']['RctTDXss'][i] = int(ln[1]) + self.fst_vt['SubDyn']['RctTDYss'][i] = int(ln[2]) + self.fst_vt['SubDyn']['RctTDZss'][i] = int(ln[3]) + self.fst_vt['SubDyn']['RctRDXss'][i] = int(ln[4]) + self.fst_vt['SubDyn']['RctRDYss'][i] = int(ln[5]) + self.fst_vt['SubDyn']['RctRDZss'][i] = int(ln[6]) + if len(ln) == 8: + self.fst_vt['SubDyn']['Rct_SoilFile'][i] = ln[7] + else: + self.fst_vt['SubDyn']['Rct_SoilFile'][i] = 'None' + f.readline() + # INTERFACE JOINTS + self.fst_vt['SubDyn']['NInterf'] = int_read(f.readline().split()[0]) + self.fst_vt['SubDyn']['IJointID'] = [None]*self.fst_vt['SubDyn']['NInterf'] + self.fst_vt['SubDyn']['ItfTDXss'] = [None]*self.fst_vt['SubDyn']['NInterf'] + self.fst_vt['SubDyn']['ItfTDYss'] = [None]*self.fst_vt['SubDyn']['NInterf'] + self.fst_vt['SubDyn']['ItfTDZss'] = [None]*self.fst_vt['SubDyn']['NInterf'] + self.fst_vt['SubDyn']['ItfRDXss'] = [None]*self.fst_vt['SubDyn']['NInterf'] + self.fst_vt['SubDyn']['ItfRDYss'] = [None]*self.fst_vt['SubDyn']['NInterf'] + self.fst_vt['SubDyn']['ItfRDZss'] = [None]*self.fst_vt['SubDyn']['NInterf'] + ln = f.readline().split() + ln = f.readline().split() + for i in range(self.fst_vt['SubDyn']['NInterf']): + ln = f.readline().split() + self.fst_vt['SubDyn']['IJointID'][i] = int(ln[0]) + self.fst_vt['SubDyn']['ItfTDXss'][i] = int(ln[1]) + self.fst_vt['SubDyn']['ItfTDYss'][i] = int(ln[2]) + self.fst_vt['SubDyn']['ItfTDZss'][i] = int(ln[3]) + self.fst_vt['SubDyn']['ItfRDXss'][i] = int(ln[4]) + self.fst_vt['SubDyn']['ItfRDYss'][i] = int(ln[5]) + self.fst_vt['SubDyn']['ItfRDZss'][i] = int(ln[6]) + f.readline() + # MEMBERS + self.fst_vt['SubDyn']['NMembers'] = int_read(f.readline().split()[0]) + self.fst_vt['SubDyn']['MemberID'] = [None]*self.fst_vt['SubDyn']['NMembers'] + self.fst_vt['SubDyn']['MJointID1'] = [None]*self.fst_vt['SubDyn']['NMembers'] + self.fst_vt['SubDyn']['MJointID2'] = [None]*self.fst_vt['SubDyn']['NMembers'] + self.fst_vt['SubDyn']['MPropSetID1'] = [None]*self.fst_vt['SubDyn']['NMembers'] + self.fst_vt['SubDyn']['MPropSetID2'] = [None]*self.fst_vt['SubDyn']['NMembers'] + self.fst_vt['SubDyn']['MType'] = [None]*self.fst_vt['SubDyn']['NMembers'] + self.fst_vt['SubDyn']['COSMID'] = [None]*self.fst_vt['SubDyn']['NMembers'] + ln = f.readline().split() + ln = f.readline().split() + for i in range(self.fst_vt['SubDyn']['NMembers']): + ln = f.readline().split() + self.fst_vt['SubDyn']['MemberID'][i] = int(ln[0]) + self.fst_vt['SubDyn']['MJointID1'][i] = int(ln[1]) + self.fst_vt['SubDyn']['MJointID2'][i] = int(ln[2]) + self.fst_vt['SubDyn']['MPropSetID1'][i] = int(ln[3]) + self.fst_vt['SubDyn']['MPropSetID2'][i] = int(ln[4]) + self.fst_vt['SubDyn']['MType'][i] = int(ln[5]) + if len(ln) > 6: + self.fst_vt['SubDyn']['COSMID'][i] = int(ln[6]) + f.readline() + # MEMBER X-SECTION PROPERTY data 1/2 + self.fst_vt['SubDyn']['NPropSets'] = int_read(f.readline().split()[0]) + self.fst_vt['SubDyn']['PropSetID1'] = [None]*self.fst_vt['SubDyn']['NPropSets'] + self.fst_vt['SubDyn']['YoungE1'] = [None]*self.fst_vt['SubDyn']['NPropSets'] + self.fst_vt['SubDyn']['ShearG1'] = [None]*self.fst_vt['SubDyn']['NPropSets'] + self.fst_vt['SubDyn']['MatDens1'] = [None]*self.fst_vt['SubDyn']['NPropSets'] + self.fst_vt['SubDyn']['XsecD'] = [None]*self.fst_vt['SubDyn']['NPropSets'] + self.fst_vt['SubDyn']['XsecT'] = [None]*self.fst_vt['SubDyn']['NPropSets'] + ln = f.readline().split() + ln = f.readline().split() + for i in range(self.fst_vt['SubDyn']['NPropSets']): + ln = f.readline().split() + self.fst_vt['SubDyn']['PropSetID1'][i] = int(ln[0]) + self.fst_vt['SubDyn']['YoungE1'][i] = float(ln[1]) + self.fst_vt['SubDyn']['ShearG1'][i] = float(ln[2]) + self.fst_vt['SubDyn']['MatDens1'][i] = float(ln[3]) + self.fst_vt['SubDyn']['XsecD'][i] = float(ln[4]) + self.fst_vt['SubDyn']['XsecT'][i] = float(ln[5]) + f.readline() + # MEMBER X-SECTION PROPERTY data 2/2 + self.fst_vt['SubDyn']['NXPropSets'] = int_read(f.readline().split()[0]) + self.fst_vt['SubDyn']['PropSetID2'] = [None]*self.fst_vt['SubDyn']['NXPropSets'] + self.fst_vt['SubDyn']['YoungE2'] = [None]*self.fst_vt['SubDyn']['NXPropSets'] + self.fst_vt['SubDyn']['ShearG2'] = [None]*self.fst_vt['SubDyn']['NXPropSets'] + self.fst_vt['SubDyn']['MatDens2'] = [None]*self.fst_vt['SubDyn']['NXPropSets'] + self.fst_vt['SubDyn']['XsecA'] = [None]*self.fst_vt['SubDyn']['NXPropSets'] + self.fst_vt['SubDyn']['XsecAsx'] = [None]*self.fst_vt['SubDyn']['NXPropSets'] + self.fst_vt['SubDyn']['XsecAsy'] = [None]*self.fst_vt['SubDyn']['NXPropSets'] + self.fst_vt['SubDyn']['XsecJxx'] = [None]*self.fst_vt['SubDyn']['NXPropSets'] + self.fst_vt['SubDyn']['XsecJyy'] = [None]*self.fst_vt['SubDyn']['NXPropSets'] + self.fst_vt['SubDyn']['XsecJ0'] = [None]*self.fst_vt['SubDyn']['NXPropSets'] + ln = f.readline().split() + ln = f.readline().split() + for i in range(self.fst_vt['SubDyn']['NXPropSets']): + ln = f.readline().split() + self.fst_vt['SubDyn']['PropSetID2'][i] = int(ln[0]) + self.fst_vt['SubDyn']['YoungE2'][i] = float(ln[1]) + self.fst_vt['SubDyn']['ShearG2'][i] = float(ln[2]) + self.fst_vt['SubDyn']['MatDens2'][i] = float(ln[3]) + self.fst_vt['SubDyn']['XsecA'][i] = float(ln[4]) + self.fst_vt['SubDyn']['XsecAsx'][i] = float(ln[5]) + self.fst_vt['SubDyn']['XsecAsy'][i] = float(ln[6]) + self.fst_vt['SubDyn']['XsecJxx'][i] = float(ln[7]) + self.fst_vt['SubDyn']['XsecJyy'][i] = float(ln[8]) + self.fst_vt['SubDyn']['XsecJ0'][i] = float(ln[9]) + # CABLE PROPERTIES + f.readline() + self.fst_vt['SubDyn']['NCablePropSets'] = int_read(f.readline().split()[0]) + self.fst_vt['SubDyn']['CablePropSetID'] = [None]*self.fst_vt['SubDyn']['NCablePropSets'] + self.fst_vt['SubDyn']['CableEA'] = [None]*self.fst_vt['SubDyn']['NCablePropSets'] + self.fst_vt['SubDyn']['CableMatDens'] = [None]*self.fst_vt['SubDyn']['NCablePropSets'] + self.fst_vt['SubDyn']['CableT0'] = [None]*self.fst_vt['SubDyn']['NCablePropSets'] + f.readline() + f.readline() + for i in range(self.fst_vt['SubDyn']['NCablePropSets']): + ln = f.readline().split() + self.fst_vt['SubDyn']['CablePropSetID'][i] = int(ln[0]) + self.fst_vt['SubDyn']['CableEA'][i] = float(ln[1]) + self.fst_vt['SubDyn']['CableMatDens'][i] = float(ln[1]) + self.fst_vt['SubDyn']['CableT0'][i] = float(ln[1]) + # RIGID LINK PROPERTIES + f.readline() + self.fst_vt['SubDyn']['NRigidPropSets'] = int_read(f.readline().split()[0]) + self.fst_vt['SubDyn']['RigidPropSetID'] = [None]*self.fst_vt['SubDyn']['NRigidPropSets'] + self.fst_vt['SubDyn']['RigidMatDens'] = [None]*self.fst_vt['SubDyn']['NRigidPropSets'] + f.readline() + f.readline() + for i in range(self.fst_vt['SubDyn']['NRigidPropSets']): + ln = f.readline().split() + self.fst_vt['SubDyn']['RigidPropSetID'][i] = int(ln[0]) + self.fst_vt['SubDyn']['RigidMatDens'][i] = float(ln[1]) + # MEMBER COSINE MATRICES + f.readline() + self.fst_vt['SubDyn']['NCOSMs'] = int_read(f.readline().split()[0]) + self.fst_vt['SubDyn']['COSMID'] = [None]*self.fst_vt['SubDyn']['NCOSMs'] + self.fst_vt['SubDyn']['COSM11'] = [None]*self.fst_vt['SubDyn']['NCOSMs'] + self.fst_vt['SubDyn']['COSM12'] = [None]*self.fst_vt['SubDyn']['NCOSMs'] + self.fst_vt['SubDyn']['COSM13'] = [None]*self.fst_vt['SubDyn']['NCOSMs'] + self.fst_vt['SubDyn']['COSM21'] = [None]*self.fst_vt['SubDyn']['NCOSMs'] + self.fst_vt['SubDyn']['COSM22'] = [None]*self.fst_vt['SubDyn']['NCOSMs'] + self.fst_vt['SubDyn']['COSM23'] = [None]*self.fst_vt['SubDyn']['NCOSMs'] + self.fst_vt['SubDyn']['COSM31'] = [None]*self.fst_vt['SubDyn']['NCOSMs'] + self.fst_vt['SubDyn']['COSM32'] = [None]*self.fst_vt['SubDyn']['NCOSMs'] + self.fst_vt['SubDyn']['COSM33'] = [None]*self.fst_vt['SubDyn']['NCOSMs'] + ln = f.readline().split() + ln = f.readline().split() + for i in range(self.fst_vt['SubDyn']['NCOSMs']): + ln = f.readline().split() + self.fst_vt['SubDyn']['COSMID'][i] = int(ln[0]) + self.fst_vt['SubDyn']['COSM11'][i] = float(ln[1]) + self.fst_vt['SubDyn']['COSM12'][i] = float(ln[2]) + self.fst_vt['SubDyn']['COSM13'][i] = float(ln[3]) + self.fst_vt['SubDyn']['COSM21'][i] = float(ln[4]) + self.fst_vt['SubDyn']['COSM22'][i] = float(ln[5]) + self.fst_vt['SubDyn']['COSM23'][i] = float(ln[6]) + self.fst_vt['SubDyn']['COSM31'][i] = float(ln[7]) + self.fst_vt['SubDyn']['COSM32'][i] = float(ln[8]) + self.fst_vt['SubDyn']['COSM33'][i] = float(ln[9]) + f.readline() + # JOINT ADDITIONAL CONCENTRATED MASSES + self.fst_vt['SubDyn']['NCmass'] = int_read(f.readline().split()[0]) + self.fst_vt['SubDyn']['CMJointID'] = [None]*self.fst_vt['SubDyn']['NCmass'] + self.fst_vt['SubDyn']['JMass'] = [None]*self.fst_vt['SubDyn']['NCmass'] + self.fst_vt['SubDyn']['JMXX'] = [None]*self.fst_vt['SubDyn']['NCmass'] + self.fst_vt['SubDyn']['JMYY'] = [None]*self.fst_vt['SubDyn']['NCmass'] + self.fst_vt['SubDyn']['JMZZ'] = [None]*self.fst_vt['SubDyn']['NCmass'] + self.fst_vt['SubDyn']['JMXY'] = [None]*self.fst_vt['SubDyn']['NCmass'] + self.fst_vt['SubDyn']['JMXZ'] = [None]*self.fst_vt['SubDyn']['NCmass'] + self.fst_vt['SubDyn']['JMYZ'] = [None]*self.fst_vt['SubDyn']['NCmass'] + self.fst_vt['SubDyn']['MCGX'] = [None]*self.fst_vt['SubDyn']['NCmass'] + self.fst_vt['SubDyn']['MCGY'] = [None]*self.fst_vt['SubDyn']['NCmass'] + self.fst_vt['SubDyn']['MCGZ'] = [None]*self.fst_vt['SubDyn']['NCmass'] + ln = f.readline().split() + ln = f.readline().split() + for i in range(self.fst_vt['SubDyn']['NCmass']): + ln = f.readline().split() + self.fst_vt['SubDyn']['CMJointID'][i] = int(ln[0]) + self.fst_vt['SubDyn']['JMass'][i] = float(ln[1]) + self.fst_vt['SubDyn']['JMXX'][i] = float(ln[2]) + self.fst_vt['SubDyn']['JMYY'][i] = float(ln[3]) + self.fst_vt['SubDyn']['JMZZ'][i] = float(ln[4]) + self.fst_vt['SubDyn']['JMXY'][i] = float(ln[5]) + self.fst_vt['SubDyn']['JMXZ'][i] = float(ln[6]) + self.fst_vt['SubDyn']['JMYZ'][i] = float(ln[7]) + self.fst_vt['SubDyn']['MCGX'][i] = float(ln[8]) + self.fst_vt['SubDyn']['MCGY'][i] = float(ln[9]) + self.fst_vt['SubDyn']['MCGZ'][i] = float(ln[10]) + f.readline() + # OUTPUT + self.fst_vt['SubDyn']['SumPrint'] = bool_read(f.readline().split()[0]) + self.fst_vt['SubDyn']['OutCOSM'] = bool_read(f.readline().split()[0]) + self.fst_vt['SubDyn']['OutAll'] = bool_read(f.readline().split()[0]) + self.fst_vt['SubDyn']['OutSwtch'] = int_read(f.readline().split()[0]) + self.fst_vt['SubDyn']['TabDelim'] = bool_read(f.readline().split()[0]) + self.fst_vt['SubDyn']['OutDec'] = int_read(f.readline().split()[0]) + self.fst_vt['SubDyn']['OutFmt'] = f.readline().split()[0] + self.fst_vt['SubDyn']['OutSFmt'] = f.readline().split()[0] + f.readline() + # MEMBER OUTPUT LIST + self.fst_vt['SubDyn']['NMOutputs'] = int_read(f.readline().split()[0]) + self.fst_vt['SubDyn']['MemberID_out'] = [None]*self.fst_vt['SubDyn']['NMOutputs'] + self.fst_vt['SubDyn']['NOutCnt'] = [None]*self.fst_vt['SubDyn']['NMOutputs'] + self.fst_vt['SubDyn']['NodeCnt'] = [None]*self.fst_vt['SubDyn']['NMOutputs'] + ln = f.readline().split() + ln = f.readline().split() + for i in range(self.fst_vt['SubDyn']['NMOutputs']): + ln = f.readline().split() + self.fst_vt['SubDyn']['MemberID_out'][i] = int(ln[0]) + self.fst_vt['SubDyn']['NOutCnt'][i] = int(ln[1]) + self.fst_vt['SubDyn']['NodeCnt'][i] = int(ln[2]) + f.readline() + # SSOutList + data = f.readline() + while data.split()[0] != 'END': + channels = data.split('"') + channel_list = channels[1].split(',') + self.set_outlist(self.fst_vt['outlist']['SubDyn'], channel_list) + data = f.readline() + + f.close() + + f.close() + + def read_MAP(self, map_file): + # MAP++ + + # TODO: this is likely not robust enough, only tested on the Hywind Spar + # additional lines in these tables are likely + + f = open(map_file) + f.readline() + f.readline() + f.readline() + data_line = f.readline().strip().split() + self.fst_vt['MAP']['LineType'] = str(data_line[0]) + self.fst_vt['MAP']['Diam'] = float(data_line[1]) + self.fst_vt['MAP']['MassDenInAir'] = float(data_line[2]) + self.fst_vt['MAP']['EA'] = float(data_line[3]) + self.fst_vt['MAP']['CB'] = float(data_line[4]) + self.fst_vt['MAP']['CIntDamp'] = float(data_line[5]) + self.fst_vt['MAP']['Ca'] = float(data_line[6]) + self.fst_vt['MAP']['Cdn'] = float(data_line[7]) + self.fst_vt['MAP']['Cdt'] = float(data_line[8]) + f.readline() + f.readline() + f.readline() + for i in range(2): + data_node = f.readline().strip().split() + self.fst_vt['MAP']['Node'].append(int(data_node[0])) + self.fst_vt['MAP']['Type'].append(str(data_node[1])) + self.fst_vt['MAP']['X'].append(float_read(data_node[2])) + self.fst_vt['MAP']['Y'].append(float_read(data_node[3])) + self.fst_vt['MAP']['Z'].append(float_read(data_node[4])) + self.fst_vt['MAP']['M'].append(float_read(data_node[5])) + self.fst_vt['MAP']['B'].append(float_read(data_node[6])) + self.fst_vt['MAP']['FX'].append(float_read(data_node[7])) + self.fst_vt['MAP']['FY'].append(float_read(data_node[8])) + self.fst_vt['MAP']['FZ'].append(float_read(data_node[9])) + f.readline() + f.readline() + f.readline() + data_line_prop = f.readline().strip().split() + self.fst_vt['MAP']['Line'] = int(data_line_prop[0]) + self.fst_vt['MAP']['LineType'] = str(data_line_prop[1]) + self.fst_vt['MAP']['UnstrLen'] = float(data_line_prop[2]) + self.fst_vt['MAP']['NodeAnch'] = int(data_line_prop[3]) + self.fst_vt['MAP']['NodeFair'] = int(data_line_prop[4]) + self.fst_vt['MAP']['Flags'] = [str(val) for val in data_line_prop[5:]] + f.readline() + f.readline() + f.readline() + self.fst_vt['MAP']['Option'] = [str(val) for val in f.readline().strip().split()] + f.close() + + def read_MoorDyn(self, moordyn_file): + + f = open(moordyn_file) + + # MoorDyn + f.readline() + f.readline() + self.fst_vt['MoorDyn']['Echo'] = bool_read(f.readline().split()[0]) + f.readline() + f.readline() + f.readline() + self.fst_vt['MoorDyn']['Name'] = [] + self.fst_vt['MoorDyn']['Diam'] = [] + self.fst_vt['MoorDyn']['MassDen'] = [] + self.fst_vt['MoorDyn']['EA'] = [] + self.fst_vt['MoorDyn']['BA_zeta'] = [] + self.fst_vt['MoorDyn']['EI'] = [] + self.fst_vt['MoorDyn']['Cd'] = [] + self.fst_vt['MoorDyn']['Ca'] = [] + self.fst_vt['MoorDyn']['CdAx'] = [] + self.fst_vt['MoorDyn']['CaAx'] = [] + data_line = f.readline().strip().split() + while data_line[0][:3] != '---': # OpenFAST searches for ---, so we'll do the same + self.fst_vt['MoorDyn']['Name'].append(str(data_line[0])) + self.fst_vt['MoorDyn']['Diam'].append(float(data_line[1])) + self.fst_vt['MoorDyn']['MassDen'].append(float(data_line[2])) + self.fst_vt['MoorDyn']['EA'].append(float(data_line[3])) + self.fst_vt['MoorDyn']['BA_zeta'].append(float(data_line[4])) + self.fst_vt['MoorDyn']['EI'].append(float(data_line[5])) + self.fst_vt['MoorDyn']['Cd'].append(float(data_line[6])) + self.fst_vt['MoorDyn']['Ca'].append(float(data_line[7])) + self.fst_vt['MoorDyn']['CdAx'].append(float(data_line[8])) + self.fst_vt['MoorDyn']['CaAx'].append(float(data_line[9])) + data_line = f.readline().strip().split() + f.readline() + f.readline() + self.fst_vt['MoorDyn']['Point_ID'] = [] + self.fst_vt['MoorDyn']['Attachment'] = [] + self.fst_vt['MoorDyn']['X'] = [] + self.fst_vt['MoorDyn']['Y'] = [] + self.fst_vt['MoorDyn']['Z'] = [] + self.fst_vt['MoorDyn']['M'] = [] + self.fst_vt['MoorDyn']['V'] = [] + self.fst_vt['MoorDyn']['CdA'] = [] + self.fst_vt['MoorDyn']['CA'] = [] + data_line = f.readline().strip().split() + while data_line[0][:3] != '---': # OpenFAST searches for ---, so we'll do the same + self.fst_vt['MoorDyn']['Point_ID'].append(int(data_line[0])) + self.fst_vt['MoorDyn']['Attachment'].append(str(data_line[1])) + self.fst_vt['MoorDyn']['X'].append(float(data_line[2])) + self.fst_vt['MoorDyn']['Y'].append(float(data_line[3])) + self.fst_vt['MoorDyn']['Z'].append(float(data_line[4])) + self.fst_vt['MoorDyn']['M'].append(float(data_line[5])) + self.fst_vt['MoorDyn']['V'].append(float(data_line[6])) + self.fst_vt['MoorDyn']['CdA'].append(float(data_line[7])) + self.fst_vt['MoorDyn']['CA'].append(float(data_line[8])) + data_line = f.readline().strip().split() + f.readline() + f.readline() + self.fst_vt['MoorDyn']['Line_ID'] = [] + self.fst_vt['MoorDyn']['LineType'] = [] + self.fst_vt['MoorDyn']['AttachA'] = [] + self.fst_vt['MoorDyn']['AttachB'] = [] + self.fst_vt['MoorDyn']['UnstrLen'] = [] + self.fst_vt['MoorDyn']['NumSegs'] = [] + self.fst_vt['MoorDyn']['Outputs'] = [] + data_line = f.readline().strip().split() + while data_line[0][:3] != '---': # OpenFAST searches for ---, so we'll do the same + self.fst_vt['MoorDyn']['Line_ID'].append(int(data_line[0])) + self.fst_vt['MoorDyn']['LineType'].append(str(data_line[1])) + self.fst_vt['MoorDyn']['AttachA'].append(int(data_line[2])) + self.fst_vt['MoorDyn']['AttachB'].append(int(data_line[3])) + self.fst_vt['MoorDyn']['UnstrLen'].append(float(data_line[4])) + self.fst_vt['MoorDyn']['NumSegs'].append(int(data_line[5])) + self.fst_vt['MoorDyn']['Outputs'].append(str(data_line[6])) + data_line = f.readline().strip().split() + + # read optional control inputs, there are other optional MoorDyn sections/inputs + self.fst_vt['MoorDyn']['ChannelID'] = [] + self.fst_vt['MoorDyn']['Lines_Control'] = [] + if 'CONTROL' in [dl.upper() for dl in data_line]: + f.readline() + f.readline() + data_line = f.readline().strip().split() + while data_line[0][:3] != '---': # OpenFAST searches for ---, so we'll do the same + self.fst_vt['MoorDyn']['ChannelID'].append(int(data_line[0])) + # Line(s) is a list of mooring lines, spaces are allowed between commas + control_lines = [] + for lines in data_line[1:]: + for line in lines.split(','): + control_lines.append(line.strip(',')) + + # Spaces show up in control_lines as '', remove them all + while '' in control_lines: + control_lines.remove('') + + self.fst_vt['MoorDyn']['Lines_Control'].append(control_lines) + data_line = f.readline().strip().split() + + # Solver options, there are a few more optional MoorDyn inputs that can be added line 'CONTROL' + self.fst_vt['MoorDyn']['dtM'] = float_read(f.readline().split()[0]) + self.fst_vt['MoorDyn']['kbot'] = float_read(f.readline().split()[0]) + self.fst_vt['MoorDyn']['cbot'] = float_read(f.readline().split()[0]) + self.fst_vt['MoorDyn']['dtIC'] = float_read(f.readline().split()[0]) + self.fst_vt['MoorDyn']['TmaxIC'] = float_read(f.readline().split()[0]) + self.fst_vt['MoorDyn']['CdScaleIC'] = float_read(f.readline().split()[0]) + self.fst_vt['MoorDyn']['threshIC'] = float_read(f.readline().split()[0]) + f.readline() + + data = f.readline() + while data.split()[0] != 'END': + channels = data.strip().strip('"').strip("'") + channel_list = channels.split(',') + self.set_outlist(self.fst_vt['outlist']['MoorDyn'], channel_list) + data = f.readline() + + f.close() + + def execute(self): + + self.read_MainInput() + ed_file = os.path.join(self.FAST_directory, self.fst_vt['Fst']['EDFile']) + self.read_ElastoDyn(ed_file) + if not os.path.isabs(self.fst_vt['ElastoDyn']['BldFile1']): + ed_blade_file = os.path.join(os.path.dirname(ed_file), self.fst_vt['ElastoDyn']['BldFile1']) + self.read_ElastoDynBlade(ed_blade_file) + if not os.path.isabs(self.fst_vt['ElastoDyn']['TwrFile']): + ed_tower_file = os.path.join(os.path.dirname(ed_file), self.fst_vt['ElastoDyn']['TwrFile']) + self.read_ElastoDynTower(ed_tower_file) + self.read_InflowWind() + # AeroDyn version selection + if self.fst_vt['Fst']['CompAero'] == 1: + self.read_AeroDyn14() + elif self.fst_vt['Fst']['CompAero'] == 2: + self.read_AeroDyn15() + + if self.fst_vt['Fst']['CompServo'] == 1: + self.read_ServoDyn() + # Read StC Files + for StC_file in self.fst_vt['ServoDyn']['BStCfiles']: + self.fst_vt['BStC'].append(self.read_StC(StC_file)) + for StC_file in self.fst_vt['ServoDyn']['NStCfiles']: + self.fst_vt['NStC'].append(self.read_StC(StC_file)) + for StC_file in self.fst_vt['ServoDyn']['TStCfiles']: + self.fst_vt['TStC'].append(self.read_StC(StC_file)) + for StC_file in self.fst_vt['ServoDyn']['SStCfiles']: + self.fst_vt['SStC'].append(self.read_StC(StC_file)) + if ROSCO: + self.read_DISCON_in() + hd_file = os.path.normpath(os.path.join(self.FAST_directory, self.fst_vt['Fst']['HydroFile'])) + if os.path.isfile(hd_file): + self.read_HydroDyn(hd_file) + sd_file = os.path.normpath(os.path.join(self.FAST_directory, self.fst_vt['Fst']['SubFile'])) + if os.path.isfile(sd_file): + self.read_SubDyn(sd_file) + if self.fst_vt['Fst']['CompMooring'] == 1: # only MAP++ implemented for mooring models + map_file = os.path.normpath(os.path.join(self.FAST_directory, self.fst_vt['Fst']['MooringFile'])) + if os.path.isfile(map_file): + self.read_MAP(map_file) + if self.fst_vt['Fst']['CompMooring'] == 3: # MoorDyn implimented + moordyn_file = os.path.normpath(os.path.join(self.FAST_directory, self.fst_vt['Fst']['MooringFile'])) + if os.path.isfile(moordyn_file): + self.read_MoorDyn(moordyn_file) + bd_file = os.path.normpath(os.path.join(self.FAST_directory, self.fst_vt['Fst']['BDBldFile(1)'])) + if os.path.isfile(bd_file): + self.read_BeamDyn(bd_file) + +if __name__=="__main__": + + examples_dir = os.path.dirname( os.path.dirname( os.path.dirname( os.path.realpath(__file__) ) ) ) + os.sep + + fast = InputReader_OpenFAST() + fast.FAST_InputFile = 'IEA-15-240-RWT-UMaineSemi.fst' # FAST input file (ext=.fst) + fast.FAST_directory = os.path.join(examples_dir, 'examples', '01_aeroelasticse', + 'OpenFAST_models', 'IEA-15-240-RWT', + 'IEA-15-240-RWT-UMaineSemi') # Path to fst directory files + fast.execute() diff --git a/openfast_python/openfast_io/FAST_vars_out.py b/openfast_python/openfast_io/FAST_vars_out.py new file mode 100644 index 0000000000..196ca88bed --- /dev/null +++ b/openfast_python/openfast_io/FAST_vars_out.py @@ -0,0 +1,12290 @@ +""" Generated from FAST OutListParameters.xlsx files with AeroelasticSE/src/AeroelasticSE/Util/create_output_vars.py """ + + +""" ElastoDyn """ +ElastoDyn = {} + +# Blade 1 Tip Motions +ElastoDyn['TipDxc1'] = True # (m); Blade 1 out-of-plane tip deflection (relative to the undeflected position); Directed along the xc1-axis +ElastoDyn['OoPDefl1'] = False # (m); Blade 1 out-of-plane tip deflection (relative to the undeflected position); Directed along the xc1-axis +ElastoDyn['TipDyc1'] = True # (m); Blade 1 in-plane tip deflection (relative to the undeflected position); Directed along the yc1-axis +ElastoDyn['IPDefl1'] = False # (m); Blade 1 in-plane tip deflection (relative to the undeflected position); Directed along the yc1-axis +ElastoDyn['TipDzc1'] = True # (m); Blade 1 axial tip deflection (relative to the undeflected position); Directed along the zc1- and zb1-axes +ElastoDyn['TipDzb1'] = True # (m); Blade 1 axial tip deflection (relative to the undeflected position); Directed along the zc1- and zb1-axes +ElastoDyn['TipDxb1'] = True # (m); Blade 1 flapwise tip deflection (relative to the undeflected position); Directed along the xb1-axis +ElastoDyn['TipDyb1'] = True # (m); Blade 1 edgewise tip deflection (relative to the undeflected position); Directed along the yb1-axis +ElastoDyn['TipALxb1'] = False # (m/s^2); Blade 1 local flapwise tip acceleration (absolute); Directed along the local xb1-axis +ElastoDyn['TipALyb1'] = False # (m/s^2); Blade 1 local edgewise tip acceleration (absolute); Directed along the local yb1-axis +ElastoDyn['TipALzb1'] = False # (m/s^2); Blade 1 local axial tip acceleration (absolute); Directed along the local zb1-axis +ElastoDyn['TipRDxb1'] = False # (deg); Blade 1 roll (angular/rotational) tip deflection (relative to the undeflected position). In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the xb1-axis +ElastoDyn['RollDefl1'] = False # (deg); Blade 1 roll (angular/rotational) tip deflection (relative to the undeflected position). In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the xb1-axis +ElastoDyn['TipRDyb1'] = False # (deg); Blade 1 pitch (angular/rotational) tip deflection (relative to the undeflected position). In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the yb1-axis +ElastoDyn['PtchDefl1'] = False # (deg); Blade 1 pitch (angular/rotational) tip deflection (relative to the undeflected position). In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the yb1-axis +ElastoDyn['TipRDzc1'] = False # (deg); Blade 1 torsional tip deflection (relative to the undeflected position). This output will always be zero for FAST simulation results. Use it for examining blade torsional deflections of ADAMS simulations run using ADAMS datasets created using the FAST-to-ADAMS preprocessor. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence. Please note that this output uses the opposite of the sign convention used for blade pitch angles.; About the zc1- and zb1-axes +ElastoDyn['TipRDzb1'] = False # (deg); Blade 1 torsional tip deflection (relative to the undeflected position). This output will always be zero for FAST simulation results. Use it for examining blade torsional deflections of ADAMS simulations run using ADAMS datasets created using the FAST-to-ADAMS preprocessor. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence. Please note that this output uses the opposite of the sign convention used for blade pitch angles.; About the zc1- and zb1-axes +ElastoDyn['TwstDefl1'] = False # (deg); Blade 1 torsional tip deflection (relative to the undeflected position). This output will always be zero for FAST simulation results. Use it for examining blade torsional deflections of ADAMS simulations run using ADAMS datasets created using the FAST-to-ADAMS preprocessor. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence. Please note that this output uses the opposite of the sign convention used for blade pitch angles.; About the zc1- and zb1-axes +ElastoDyn['TipClrnc1'] = False # (m); Blade 1 tip-to-tower clearance estimate. This is computed as the perpendicular distance from the yaw axis to the tip of blade 1 when the blade tip is below the yaw bearing. When the tip of blade 1 is above the yaw bearing, it is computed as the absolute distance from the yaw bearing to the blade tip. Please note that you should reduce this value by the tower radius to obtain the actual tower clearance.; N/A +ElastoDyn['TwrClrnc1'] = False # (m); Blade 1 tip-to-tower clearance estimate. This is computed as the perpendicular distance from the yaw axis to the tip of blade 1 when the blade tip is below the yaw bearing. When the tip of blade 1 is above the yaw bearing, it is computed as the absolute distance from the yaw bearing to the blade tip. Please note that you should reduce this value by the tower radius to obtain the actual tower clearance.; N/A +ElastoDyn['Tip2Twr1'] = False # (m); Blade 1 tip-to-tower clearance estimate. This is computed as the perpendicular distance from the yaw axis to the tip of blade 1 when the blade tip is below the yaw bearing. When the tip of blade 1 is above the yaw bearing, it is computed as the absolute distance from the yaw bearing to the blade tip. Please note that you should reduce this value by the tower radius to obtain the actual tower clearance.; N/A + +# Blade 2 Tip Motions +ElastoDyn['TipDxc2'] = True # (m); Blade 2 out-of-plane tip deflection (relative to the pitch axis); Directed along the xc2-axis +ElastoDyn['OoPDefl2'] = False # (m); Blade 2 out-of-plane tip deflection (relative to the pitch axis); Directed along the xc2-axis +ElastoDyn['TipDyc2'] = True # (m); Blade 2 in-plane tip deflection (relative to the pitch axis); Directed along the yc2-axis +ElastoDyn['IPDefl2'] = False # (m); Blade 2 in-plane tip deflection (relative to the pitch axis); Directed along the yc2-axis +ElastoDyn['TipDzc2'] = True # (m); Blade 2 axial tip deflection (relative to the pitch axis); Directed along the zc2- and zb2-axes +ElastoDyn['TipDzb2'] = True # (m); Blade 2 axial tip deflection (relative to the pitch axis); Directed along the zc2- and zb2-axes +ElastoDyn['TipDxb2'] = True # (m); Blade 2 flapwise tip deflection (relative to the pitch axis); Directed along the xb2-axis +ElastoDyn['TipDyb2'] = True # (m); Blade 2 edgewise tip deflection (relative to the pitch axis); Directed along the yb2-axis +ElastoDyn['TipALxb2'] = False # (m/s^2); Blade 2 local flapwise tip acceleration (absolute); Directed along the local xb2-axis +ElastoDyn['TipALyb2'] = False # (m/s^2); Blade 2 local edgewise tip acceleration (absolute); Directed along the local yb2-axis +ElastoDyn['TipALzb2'] = False # (m/s^2); Blade 2 local axial tip acceleration (absolute); Directed along the local zb2-axis +ElastoDyn['TipRDxb2'] = False # (deg); Blade 2 roll (angular/rotational) tip deflection (relative to the undeflected position). In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the xb2-axis +ElastoDyn['RollDefl2'] = False # (deg); Blade 2 roll (angular/rotational) tip deflection (relative to the undeflected position). In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the xb2-axis +ElastoDyn['TipRDyb2'] = False # (deg); Blade 2 pitch (angular/rotational) tip deflection (relative to the undeflected position). In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the yb2-axis +ElastoDyn['PtchDefl2'] = False # (deg); Blade 2 pitch (angular/rotational) tip deflection (relative to the undeflected position). In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the yb2-axis +ElastoDyn['TipRDzc2'] = False # (deg); Blade 2 torsional (angular/rotational) tip deflection (relative to the undeflected position). This output will always be zero for FAST simulation results. Use it for examining blade torsional deflections of ADAMS simulations run using ADAMS datasets created using the FAST-to-ADAMS preprocessor. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence. Please note that this output uses the opposite of the sign convention used for blade pitch angles.; About the zc2- and zb2-axes +ElastoDyn['TipRDzb2'] = False # (deg); Blade 2 torsional (angular/rotational) tip deflection (relative to the undeflected position). This output will always be zero for FAST simulation results. Use it for examining blade torsional deflections of ADAMS simulations run using ADAMS datasets created using the FAST-to-ADAMS preprocessor. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence. Please note that this output uses the opposite of the sign convention used for blade pitch angles.; About the zc2- and zb2-axes +ElastoDyn['TwstDefl2'] = False # (deg); Blade 2 torsional (angular/rotational) tip deflection (relative to the undeflected position). This output will always be zero for FAST simulation results. Use it for examining blade torsional deflections of ADAMS simulations run using ADAMS datasets created using the FAST-to-ADAMS preprocessor. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence. Please note that this output uses the opposite of the sign convention used for blade pitch angles.; About the zc2- and zb2-axes +ElastoDyn['TipClrnc2'] = False # (m); Blade 2 tip-to-tower clearance estimate. This is computed as the perpendicular distance from the yaw axis to the tip of blade 1 when the blade tip is below the yaw bearing. When the tip of blade 1 is above the yaw bearing, it is computed as the absolute distance from the yaw bearing to the blade tip. Please note that you should reduce this value by the tower radius to obtain the actual tower clearance.; N/A +ElastoDyn['TwrClrnc2'] = False # (m); Blade 2 tip-to-tower clearance estimate. This is computed as the perpendicular distance from the yaw axis to the tip of blade 1 when the blade tip is below the yaw bearing. When the tip of blade 1 is above the yaw bearing, it is computed as the absolute distance from the yaw bearing to the blade tip. Please note that you should reduce this value by the tower radius to obtain the actual tower clearance.; N/A +ElastoDyn['Tip2Twr2'] = False # (m); Blade 2 tip-to-tower clearance estimate. This is computed as the perpendicular distance from the yaw axis to the tip of blade 1 when the blade tip is below the yaw bearing. When the tip of blade 1 is above the yaw bearing, it is computed as the absolute distance from the yaw bearing to the blade tip. Please note that you should reduce this value by the tower radius to obtain the actual tower clearance.; N/A + +# Blade 3 Tip Motions +ElastoDyn['TipDxc3'] = True # (m); Blade 3 out-of-plane tip deflection (relative to the pitch axis); Directed along the xc3-axis +ElastoDyn['OoPDefl3'] = False # (m); Blade 3 out-of-plane tip deflection (relative to the pitch axis); Directed along the xc3-axis +ElastoDyn['TipDyc3'] = True # (m); Blade 3 in-plane tip deflection (relative to the pitch axis); Directed along the yc3-axis +ElastoDyn['IPDefl3'] = False # (m); Blade 3 in-plane tip deflection (relative to the pitch axis); Directed along the yc3-axis +ElastoDyn['TipDzc3'] = True # (m); Blade 3 axial tip deflection (relative to the pitch axis); Directed along the zc3- and zb3-axes +ElastoDyn['TipDzb3'] = True # (m); Blade 3 axial tip deflection (relative to the pitch axis); Directed along the zc3- and zb3-axes +ElastoDyn['TipDxb3'] = True # (m); Blade 3 flapwise tip deflection (relative to the pitch axis); Directed along the xb3-axis +ElastoDyn['TipDyb3'] = True # (m); Blade 3 edgewise tip deflection (relative to the pitch axis); Directed along the yb3-axis +ElastoDyn['TipALxb3'] = False # (m/s^2); Blade 3 local flapwise tip acceleration (absolute); Directed along the local xb3-axis +ElastoDyn['TipALyb3'] = False # (m/s^2); Blade 3 local edgewise tip acceleration (absolute); Directed along the local yb3-axis +ElastoDyn['TipALzb3'] = False # (m/s^2); Blade 3 local axial tip acceleration (absolute); Directed along the local zb3-axis +ElastoDyn['TipRDxb3'] = False # (deg); Blade 3 roll (angular/rotational) tip deflection (relative to the undeflected position). In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the xb3-axis +ElastoDyn['RollDefl3'] = False # (deg); Blade 3 roll (angular/rotational) tip deflection (relative to the undeflected position). In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the xb3-axis +ElastoDyn['TipRDyb3'] = False # (deg); Blade 3 pitch (angular/rotational) tip deflection (relative to the undeflected position). In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the yb3-axis +ElastoDyn['PtchDefl3'] = False # (deg); Blade 3 pitch (angular/rotational) tip deflection (relative to the undeflected position). In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the yb3-axis +ElastoDyn['TipRDzc3'] = False # (deg); Blade 3 torsional tip deflection (relative to the undeflected position). This output will always be zero for FAST simulation results. Use it for examining blade torsional deflections of ADAMS simulations run using ADAMS datasets created using the FAST-to-ADAMS preprocessor. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence. Please note that this output uses the opposite of the sign convention used for blade pitch angles.; About the zc3- and zb3-axes +ElastoDyn['TipRDzb3'] = False # (deg); Blade 3 torsional tip deflection (relative to the undeflected position). This output will always be zero for FAST simulation results. Use it for examining blade torsional deflections of ADAMS simulations run using ADAMS datasets created using the FAST-to-ADAMS preprocessor. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence. Please note that this output uses the opposite of the sign convention used for blade pitch angles.; About the zc3- and zb3-axes +ElastoDyn['TwstDefl3'] = False # (deg); Blade 3 torsional tip deflection (relative to the undeflected position). This output will always be zero for FAST simulation results. Use it for examining blade torsional deflections of ADAMS simulations run using ADAMS datasets created using the FAST-to-ADAMS preprocessor. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence. Please note that this output uses the opposite of the sign convention used for blade pitch angles.; About the zc3- and zb3-axes +ElastoDyn['TipClrnc3'] = False # (m); Blade 3 tip-to-tower clearance estimate. This is computed as the perpendicular distance from the yaw axis to the tip of blade 1 when the blade tip is below the yaw bearing. When the tip of blade 1 is above the yaw bearing, it is computed as the absolute distance from the yaw bearing to the blade tip. Please note that you should reduce this value by the tower radius to obtain the actual tower clearance.; N/A +ElastoDyn['TwrClrnc3'] = False # (m); Blade 3 tip-to-tower clearance estimate. This is computed as the perpendicular distance from the yaw axis to the tip of blade 1 when the blade tip is below the yaw bearing. When the tip of blade 1 is above the yaw bearing, it is computed as the absolute distance from the yaw bearing to the blade tip. Please note that you should reduce this value by the tower radius to obtain the actual tower clearance.; N/A +ElastoDyn['Tip2Twr3'] = False # (m); Blade 3 tip-to-tower clearance estimate. This is computed as the perpendicular distance from the yaw axis to the tip of blade 1 when the blade tip is below the yaw bearing. When the tip of blade 1 is above the yaw bearing, it is computed as the absolute distance from the yaw bearing to the blade tip. Please note that you should reduce this value by the tower radius to obtain the actual tower clearance.; N/A + +# Blade 1 Local Span Motions +ElastoDyn['Spn1ALxb1'] = False # (m/s^2); Blade 1 local flapwise acceleration (absolute) of span station 1; Directed along the local xb1-axis +ElastoDyn['Spn1ALyb1'] = False # (m/s^2); Blade 1 local edgewise acceleration (absolute) of span station 1; Directed along the local yb1-axis +ElastoDyn['Spn1ALzb1'] = False # (m/s^2); Blade 1 local axial acceleration (absolute) of span station 1; Directed along the local zb1-axis +ElastoDyn['Spn2ALxb1'] = False # (m/s^2); Blade 1 local flapwise acceleration (absolute) of span station 2; Directed along the local xb1-axis +ElastoDyn['Spn2ALyb1'] = False # (m/s^2); Blade 1 local edgewise acceleration (absolute) of span station 2; Directed along the local yb1-axis +ElastoDyn['Spn2ALzb1'] = False # (m/s^2); Blade 1 local axial acceleration (absolute) of span station 2; Directed along the local zb1-axis +ElastoDyn['Spn3ALxb1'] = False # (m/s^2); Blade 1 local flapwise acceleration (absolute) of span station 3; Directed along the local xb1-axis +ElastoDyn['Spn3ALyb1'] = False # (m/s^2); Blade 1 local edgewise acceleration (absolute) of span station 3; Directed along the local yb1-axis +ElastoDyn['Spn3ALzb1'] = False # (m/s^2); Blade 1 local axial acceleration (absolute) of span station 3; Directed along the local zb1-axis +ElastoDyn['Spn4ALxb1'] = False # (m/s^2); Blade 1 local flapwise acceleration (absolute) of span station 4; Directed along the local xb1-axis +ElastoDyn['Spn4ALyb1'] = False # (m/s^2); Blade 1 local edgewise acceleration (absolute) of span station 4; Directed along the local yb1-axis +ElastoDyn['Spn4ALzb1'] = False # (m/s^2); Blade 1 local axial acceleration (absolute) of span station 4; Directed along the local zb1-axis +ElastoDyn['Spn5ALxb1'] = False # (m/s^2); Blade 1 local flapwise acceleration (absolute) of span station 5; Directed along the local xb1-axis +ElastoDyn['Spn5ALyb1'] = False # (m/s^2); Blade 1 local edgewise acceleration (absolute) of span station 5; Directed along the local yb1-axis +ElastoDyn['Spn5ALzb1'] = False # (m/s^2); Blade 1 local axial acceleration (absolute) of span station 5; Directed along the local zb1-axis +ElastoDyn['Spn6ALxb1'] = False # (m/s^2); Blade 1 local flapwise acceleration (absolute) of span station 6; Directed along the local xb1-axis +ElastoDyn['Spn6ALyb1'] = False # (m/s^2); Blade 1 local edgewise acceleration (absolute) of span station 6; Directed along the local yb1-axis +ElastoDyn['Spn6ALzb1'] = False # (m/s^2); Blade 1 local axial acceleration (absolute) of span station 6; Directed along the local zb1-axis +ElastoDyn['Spn7ALxb1'] = False # (m/s^2); Blade 1 local flapwise acceleration (absolute) of span station 7; Directed along the local xb1-axis +ElastoDyn['Spn7ALyb1'] = False # (m/s^2); Blade 1 local edgewise acceleration (absolute) of span station 7; Directed along the local yb1-axis +ElastoDyn['Spn7ALzb1'] = False # (m/s^2); Blade 1 local axial acceleration (absolute) of span station 7; Directed along the local zb1-axis +ElastoDyn['Spn8ALxb1'] = False # (m/s^2); Blade 1 local flapwise acceleration (absolute) of span station 8; Directed along the local xb1-axis +ElastoDyn['Spn8ALyb1'] = False # (m/s^2); Blade 1 local edgewise acceleration (absolute) of span station 8; Directed along the local yb1-axis +ElastoDyn['Spn8ALzb1'] = False # (m/s^2); Blade 1 local axial acceleration (absolute) of span station 8; Directed along the local zb1-axis +ElastoDyn['Spn9ALxb1'] = False # (m/s^2); Blade 1 local flapwise acceleration (absolute) of span station 9; Directed along the local xb1-axis +ElastoDyn['Spn9ALyb1'] = False # (m/s^2); Blade 1 local edgewise acceleration (absolute) of span station 9; Directed along the local yb1-axis +ElastoDyn['Spn9ALzb1'] = False # (m/s^2); Blade 1 local axial acceleration (absolute) of span station 9; Directed along the local zb1-axis +ElastoDyn['Spn1TDxb1'] = False # (m); Blade 1 local flapwise (translational) deflection (relative to the undeflected position) of span station 1; Directed along the xb1-axis +ElastoDyn['Spn1TDyb1'] = False # (m); Blade 1 local edgewise (translational) deflection (relative to the undeflected position) of span station 1; Directed along the yb1-axis +ElastoDyn['Spn1TDzb1'] = False # (m); Blade 1 local axial (translational) deflection (relative to the undeflected position) of span station 1; Directed along the zb1-axis +ElastoDyn['Spn2TDxb1'] = False # (m); Blade 1 local flapwise (translational) deflection (relative to the undeflected position) of span station 2; Directed along the xb1-axis +ElastoDyn['Spn2TDyb1'] = False # (m); Blade 1 local edgewise (translational) deflection (relative to the undeflected position) of span station 2; Directed along the yb1-axis +ElastoDyn['Spn2TDzb1'] = False # (m); Blade 1 local axial (translational) deflection (relative to the undeflected position) of span station 2; Directed along the zb1-axis +ElastoDyn['Spn3TDxb1'] = False # (m); Blade 1 local flapwise (translational) deflection (relative to the undeflected position) of span station 3; Directed along the xb1-axis +ElastoDyn['Spn3TDyb1'] = False # (m); Blade 1 local edgewise (translational) deflection (relative to the undeflected position) of span station 3; Directed along the yb1-axis +ElastoDyn['Spn3TDzb1'] = False # (m); Blade 1 local axial (translational) deflection (relative to the undeflected position) of span station 3; Directed along the zb1-axis +ElastoDyn['Spn4TDxb1'] = False # (m); Blade 1 local flapwise (translational) deflection (relative to the undeflected position) of span station 4; Directed along the xb1-axis +ElastoDyn['Spn4TDyb1'] = False # (m); Blade 1 local edgewise (translational) deflection (relative to the undeflected position) of span station 4; Directed along the yb1-axis +ElastoDyn['Spn4TDzb1'] = False # (m); Blade 1 local axial (translational) deflection (relative to the undeflected position) of span station 4; Directed along the zb1-axis +ElastoDyn['Spn5TDxb1'] = False # (m); Blade 1 local flapwise (translational) deflection (relative to the undeflected position) of span station 5; Directed along the xb1-axis +ElastoDyn['Spn5TDyb1'] = False # (m); Blade 1 local edgewise (translational) deflection (relative to the undeflected position) of span station 5; Directed along the yb1-axis +ElastoDyn['Spn5TDzb1'] = False # (m); Blade 1 local axial (translational) deflection (relative to the undeflected position) of span station 5; Directed along the zb1-axis +ElastoDyn['Spn6TDxb1'] = False # (m); Blade 1 local flapwise (translational) deflection (relative to the undeflected position) of span station 6; Directed along the xb1-axis +ElastoDyn['Spn6TDyb1'] = False # (m); Blade 1 local edgewise (translational) deflection (relative to the undeflected position) of span station 6; Directed along the yb1-axis +ElastoDyn['Spn6TDzb1'] = False # (m); Blade 1 local axial (translational) deflection (relative to the undeflected position) of span station 6; Directed along the zb1-axis +ElastoDyn['Spn7TDxb1'] = False # (m); Blade 1 local flapwise (translational) deflection (relative to the undeflected position) of span station 7; Directed along the xb1-axis +ElastoDyn['Spn7TDyb1'] = False # (m); Blade 1 local edgewise (translational) deflection (relative to the undeflected position) of span station 7; Directed along the yb1-axis +ElastoDyn['Spn7TDzb1'] = False # (m); Blade 1 local axial (translational) deflection (relative to the undeflected position) of span station 7; Directed along the zb1-axis +ElastoDyn['Spn8TDxb1'] = False # (m); Blade 1 local flapwise (translational) deflection (relative to the undeflected position) of span station 8; Directed along the xb1-axis +ElastoDyn['Spn8TDyb1'] = False # (m); Blade 1 local edgewise (translational) deflection (relative to the undeflected position) of span station 8; Directed along the yb1-axis +ElastoDyn['Spn8TDzb1'] = False # (m); Blade 1 local axial (translational) deflection (relative to the undeflected position) of span station 8; Directed along the zb1-axis +ElastoDyn['Spn9TDxb1'] = False # (m); Blade 1 local flapwise (translational) deflection (relative to the undeflected position) of span station 9; Directed along the xb1-axis +ElastoDyn['Spn9TDyb1'] = False # (m); Blade 1 local edgewise (translational) deflection (relative to the undeflected position) of span station 9; Directed along the yb1-axis +ElastoDyn['Spn9TDzb1'] = False # (m); Blade 1 local axial (translational) deflection (relative to the undeflected position) of span station 9; Directed along the zb1-axis +ElastoDyn['Spn1RDxb1'] = False # (deg); Blade 1 local roll (angular/rotational) deflection (relative to the undeflected position) of span station 1. In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local xb1-axis +ElastoDyn['Spn1RDyb1'] = False # (deg); Blade 1 local pitch (angular/rotational) deflection (relative to the undeflected position) of span station 1. In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local yb1-axis +ElastoDyn['Spn1RDzb1'] = False # (deg); Blade 1 local torsional (angular/rotational) deflection (relative to the undeflected position) of span station 1. This output will always be zero for FAST simulation results. Use it for examining blade torsional deflections of ADAMS simulations run using ADAMS datasets created using the FAST-to-ADAMS preprocessor. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence. Please note that this output uses the opposite of the sign convention used for blade pitch angles.; About the local zb1-axis +ElastoDyn['Spn2RDxb1'] = False # (deg); Blade 1 local roll (angular/rotational) deflection (relative to the undeflected position) of span station 2. In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local xb1-axis +ElastoDyn['Spn2RDyb1'] = False # (deg); Blade 1 local pitch (angular/rotational) deflection (relative to the undeflected position) of span station 2. In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local yb1-axis +ElastoDyn['Spn2RDzb1'] = False # (deg); Blade 1 local torsional (angular/rotational) deflection (relative to the undeflected position) of span station 2. This output will always be zero for FAST simulation results. Use it for examining blade torsional deflections of ADAMS simulations run using ADAMS datasets created using the FAST-to-ADAMS preprocessor. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence. Please note that this output uses the opposite of the sign convention used for blade pitch angles.; About the local zb1-axis +ElastoDyn['Spn3RDxb1'] = False # (deg); Blade 1 local roll (angular/rotational) deflection (relative to the undeflected position) of span station 3. In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local xb1-axis +ElastoDyn['Spn3RDyb1'] = False # (deg); Blade 1 local pitch (angular/rotational) deflection (relative to the undeflected position) of span station 3. In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local yb1-axis +ElastoDyn['Spn3RDzb1'] = False # (deg); Blade 1 local torsional (angular/rotational) deflection (relative to the undeflected position) of span station 3. This output will always be zero for FAST simulation results. Use it for examining blade torsional deflections of ADAMS simulations run using ADAMS datasets created using the FAST-to-ADAMS preprocessor. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence. Please note that this output uses the opposite of the sign convention used for blade pitch angles.; About the local zb1-axis +ElastoDyn['Spn4RDxb1'] = False # (deg); Blade 1 local roll (angular/rotational) deflection (relative to the undeflected position) of span station 4. In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local xb1-axis +ElastoDyn['Spn4RDyb1'] = False # (deg); Blade 1 local pitch (angular/rotational) deflection (relative to the undeflected position) of span station 4. In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local yb1-axis +ElastoDyn['Spn4RDzb1'] = False # (deg); Blade 1 local torsional (angular/rotational) deflection (relative to the undeflected position) of span station 4. This output will always be zero for FAST simulation results. Use it for examining blade torsional deflections of ADAMS simulations run using ADAMS datasets created using the FAST-to-ADAMS preprocessor. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence. Please note that this output uses the opposite of the sign convention used for blade pitch angles.; About the local zb1-axis +ElastoDyn['Spn5RDxb1'] = False # (deg); Blade 1 local roll (angular/rotational) deflection (relative to the undeflected position) of span station 5. In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local xb1-axis +ElastoDyn['Spn5RDyb1'] = False # (deg); Blade 1 local pitch (angular/rotational) deflection (relative to the undeflected position) of span station 5. In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local yb1-axis +ElastoDyn['Spn5RDzb1'] = False # (deg); Blade 1 local torsional (angular/rotational) deflection (relative to the undeflected position) of span station 5. This output will always be zero for FAST simulation results. Use it for examining blade torsional deflections of ADAMS simulations run using ADAMS datasets created using the FAST-to-ADAMS preprocessor. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence. Please note that this output uses the opposite of the sign convention used for blade pitch angles.; About the local zb1-axis +ElastoDyn['Spn6RDxb1'] = False # (deg); Blade 1 local roll (angular/rotational) deflection (relative to the undeflected position) of span station 6. In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local xb1-axis +ElastoDyn['Spn6RDyb1'] = False # (deg); Blade 1 local pitch (angular/rotational) deflection (relative to the undeflected position) of span station 6. In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local yb1-axis +ElastoDyn['Spn6RDzb1'] = False # (deg); Blade 1 local torsional (angular/rotational) deflection (relative to the undeflected position) of span station 6. This output will always be zero for FAST simulation results. Use it for examining blade torsional deflections of ADAMS simulations run using ADAMS datasets created using the FAST-to-ADAMS preprocessor. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence. Please note that this output uses the opposite of the sign convention used for blade pitch angles.; About the local zb1-axis +ElastoDyn['Spn7RDxb1'] = False # (deg); Blade 1 local roll (angular/rotational) deflection (relative to the undeflected position) of span station 7. In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local xb1-axis +ElastoDyn['Spn7RDyb1'] = False # (deg); Blade 1 local pitch (angular/rotational) deflection (relative to the undeflected position) of span station 7. In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local yb1-axis +ElastoDyn['Spn7RDzb1'] = False # (deg); Blade 1 local torsional (angular/rotational) deflection (relative to the undeflected position) of span station 7. This output will always be zero for FAST simulation results. Use it for examining blade torsional deflections of ADAMS simulations run using ADAMS datasets created using the FAST-to-ADAMS preprocessor. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence. Please note that this output uses the opposite of the sign convention used for blade pitch angles.; About the local zb1-axis +ElastoDyn['Spn8RDxb1'] = False # (deg); Blade 1 local roll (angular/rotational) deflection (relative to the undeflected position) of span station 8. In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local xb1-axis +ElastoDyn['Spn8RDyb1'] = False # (deg); Blade 1 local pitch (angular/rotational) deflection (relative to the undeflected position) of span station 8. In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local yb1-axis +ElastoDyn['Spn8RDzb1'] = False # (deg); Blade 1 local torsional (angular/rotational) deflection (relative to the undeflected position) of span station 8. This output will always be zero for FAST simulation results. Use it for examining blade torsional deflections of ADAMS simulations run using ADAMS datasets created using the FAST-to-ADAMS preprocessor. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence. Please note that this output uses the opposite of the sign convention used for blade pitch angles.; About the local zb1-axis +ElastoDyn['Spn9RDxb1'] = False # (deg); Blade 1 local roll (angular/rotational) deflection (relative to the undeflected position) of span station 9. In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local xb1-axis +ElastoDyn['Spn9RDyb1'] = False # (deg); Blade 1 local pitch (angular/rotational) deflection (relative to the undeflected position) of span station 9. In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local yb1-axis +ElastoDyn['Spn9RDzb1'] = False # (deg); Blade 1 local torsional (angular/rotational) deflection (relative to the undeflected position) of span station 9. This output will always be zero for FAST simulation results. Use it for examining blade torsional deflections of ADAMS simulations run using ADAMS datasets created using the FAST-to-ADAMS preprocessor. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence. Please note that this output uses the opposite of the sign convention used for blade pitch angles.; About the local zb1-axis + +# Blade 2 Local Span Motions +ElastoDyn['Spn1ALxb2'] = False # (m/s^2); Blade 2 local flapwise acceleration (absolute) of span station 1; Directed along the local xb2-axis +ElastoDyn['Spn1ALyb2'] = False # (m/s^2); Blade 2 local edgewise acceleration (absolute) of span station 1; Directed along the local yb2-axis +ElastoDyn['Spn1ALzb2'] = False # (m/s^2); Blade 2 local axial acceleration (absolute) of span station 1; Directed along the local zb2-axis +ElastoDyn['Spn2ALxb2'] = False # (m/s^2); Blade 2 local flapwise acceleration (absolute) of span station 2; Directed along the local xb2-axis +ElastoDyn['Spn2ALyb2'] = False # (m/s^2); Blade 2 local edgewise acceleration (absolute) of span station 2; Directed along the local yb2-axis +ElastoDyn['Spn2ALzb2'] = False # (m/s^2); Blade 2 local axial acceleration (absolute) of span station 2; Directed along the local zb2-axis +ElastoDyn['Spn3ALxb2'] = False # (m/s^2); Blade 2 local flapwise acceleration (absolute) of span station 3; Directed along the local xb2-axis +ElastoDyn['Spn3ALyb2'] = False # (m/s^2); Blade 2 local edgewise acceleration (absolute) of span station 3; Directed along the local yb2-axis +ElastoDyn['Spn3ALzb2'] = False # (m/s^2); Blade 2 local axial acceleration (absolute) of span station 3; Directed along the local zb2-axis +ElastoDyn['Spn4ALxb2'] = False # (m/s^2); Blade 2 local flapwise acceleration (absolute) of span station 4; Directed along the local xb2-axis +ElastoDyn['Spn4ALyb2'] = False # (m/s^2); Blade 2 local edgewise acceleration (absolute) of span station 4; Directed along the local yb2-axis +ElastoDyn['Spn4ALzb2'] = False # (m/s^2); Blade 2 local axial acceleration (absolute) of span station 4; Directed along the local zb2-axis +ElastoDyn['Spn5ALxb2'] = False # (m/s^2); Blade 2 local flapwise acceleration (absolute) of span station 5; Directed along the local xb2-axis +ElastoDyn['Spn5ALyb2'] = False # (m/s^2); Blade 2 local edgewise acceleration (absolute) of span station 5; Directed along the local yb2-axis +ElastoDyn['Spn5ALzb2'] = False # (m/s^2); Blade 2 local axial acceleration (absolute) of span station 5; Directed along the local zb2-axis +ElastoDyn['Spn6ALxb2'] = False # (m/s^2); Blade 2 local flapwise acceleration (absolute) of span station 6; Directed along the local xb2-axis +ElastoDyn['Spn6ALyb2'] = False # (m/s^2); Blade 2 local edgewise acceleration (absolute) of span station 6; Directed along the local yb2-axis +ElastoDyn['Spn6ALzb2'] = False # (m/s^2); Blade 2 local axial acceleration (absolute) of span station 6; Directed along the local zb2-axis +ElastoDyn['Spn7ALxb2'] = False # (m/s^2); Blade 2 local flapwise acceleration (absolute) of span station 7; Directed along the local xb2-axis +ElastoDyn['Spn7ALyb2'] = False # (m/s^2); Blade 2 local edgewise acceleration (absolute) of span station 7; Directed along the local yb2-axis +ElastoDyn['Spn7ALzb2'] = False # (m/s^2); Blade 2 local axial acceleration (absolute) of span station 7; Directed along the local zb2-axis +ElastoDyn['Spn8ALxb2'] = False # (m/s^2); Blade 2 local flapwise acceleration (absolute) of span station 8; Directed along the local xb2-axis +ElastoDyn['Spn8ALyb2'] = False # (m/s^2); Blade 2 local edgewise acceleration (absolute) of span station 8; Directed along the local yb2-axis +ElastoDyn['Spn8ALzb2'] = False # (m/s^2); Blade 2 local axial acceleration (absolute) of span station 8; Directed along the local zb2-axis +ElastoDyn['Spn9ALxb2'] = False # (m/s^2); Blade 2 local flapwise acceleration (absolute) of span station 9; Directed along the local xb2-axis +ElastoDyn['Spn9ALyb2'] = False # (m/s^2); Blade 2 local edgewise acceleration (absolute) of span station 9; Directed along the local yb2-axis +ElastoDyn['Spn9ALzb2'] = False # (m/s^2); Blade 2 local axial acceleration (absolute) of span station 9; Directed along the local zb2-axis +ElastoDyn['Spn1TDxb2'] = False # (m); Blade 2 local flapwise (translational) deflection (relative to the undeflected position) of span station 1; Directed along the xb2-axis +ElastoDyn['Spn1TDyb2'] = False # (m); Blade 2 local edgewise (translational) deflection (relative to the undeflected position) of span station 1; Directed along the yb2-axis +ElastoDyn['Spn1TDzb2'] = False # (m); Blade 2 local axial (translational) deflection (relative to the undeflected position) of span station 1; Directed along the zb2-axis +ElastoDyn['Spn2TDxb2'] = False # (m); Blade 2 local flapwise (translational) deflection (relative to the undeflected position) of span station 2; Directed along the xb2-axis +ElastoDyn['Spn2TDyb2'] = False # (m); Blade 2 local edgewise (translational) deflection (relative to the undeflected position) of span station 2; Directed along the yb2-axis +ElastoDyn['Spn2TDzb2'] = False # (m); Blade 2 local axial (translational) deflection (relative to the undeflected position) of span station 2; Directed along the zb2-axis +ElastoDyn['Spn3TDxb2'] = False # (m); Blade 2 local flapwise (translational) deflection (relative to the undeflected position) of span station 3; Directed along the xb2-axis +ElastoDyn['Spn3TDyb2'] = False # (m); Blade 2 local edgewise (translational) deflection (relative to the undeflected position) of span station 3; Directed along the yb2-axis +ElastoDyn['Spn3TDzb2'] = False # (m); Blade 2 local axial (translational) deflection (relative to the undeflected position) of span station 3; Directed along the zb2-axis +ElastoDyn['Spn4TDxb2'] = False # (m); Blade 2 local flapwise (translational) deflection (relative to the undeflected position) of span station 4; Directed along the xb2-axis +ElastoDyn['Spn4TDyb2'] = False # (m); Blade 2 local edgewise (translational) deflection (relative to the undeflected position) of span station 4; Directed along the yb2-axis +ElastoDyn['Spn4TDzb2'] = False # (m); Blade 2 local axial (translational) deflection (relative to the undeflected position) of span station 4; Directed along the zb2-axis +ElastoDyn['Spn5TDxb2'] = False # (m); Blade 2 local flapwise (translational) deflection (relative to the undeflected position) of span station 5; Directed along the xb2-axis +ElastoDyn['Spn5TDyb2'] = False # (m); Blade 2 local edgewise (translational) deflection (relative to the undeflected position) of span station 5; Directed along the yb2-axis +ElastoDyn['Spn5TDzb2'] = False # (m); Blade 2 local axial (translational) deflection (relative to the undeflected position) of span station 5; Directed along the zb2-axis +ElastoDyn['Spn6TDxb2'] = False # (m); Blade 2 local flapwise (translational) deflection (relative to the undeflected position) of span station 6; Directed along the xb2-axis +ElastoDyn['Spn6TDyb2'] = False # (m); Blade 2 local edgewise (translational) deflection (relative to the undeflected position) of span station 6; Directed along the yb2-axis +ElastoDyn['Spn6TDzb2'] = False # (m); Blade 2 local axial (translational) deflection (relative to the undeflected position) of span station 6; Directed along the zb2-axis +ElastoDyn['Spn7TDxb2'] = False # (m); Blade 2 local flapwise (translational) deflection (relative to the undeflected position) of span station 7; Directed along the xb2-axis +ElastoDyn['Spn7TDyb2'] = False # (m); Blade 2 local edgewise (translational) deflection (relative to the undeflected position) of span station 7; Directed along the yb2-axis +ElastoDyn['Spn7TDzb2'] = False # (m); Blade 2 local axial (translational) deflection (relative to the undeflected position) of span station 7; Directed along the zb2-axis +ElastoDyn['Spn8TDxb2'] = False # (m); Blade 2 local flapwise (translational) deflection (relative to the undeflected position) of span station 8; Directed along the xb2-axis +ElastoDyn['Spn8TDyb2'] = False # (m); Blade 2 local edgewise (translational) deflection (relative to the undeflected position) of span station 8; Directed along the yb2-axis +ElastoDyn['Spn8TDzb2'] = False # (m); Blade 2 local axial (translational) deflection (relative to the undeflected position) of span station 8; Directed along the zb2-axis +ElastoDyn['Spn9TDxb2'] = False # (m); Blade 2 local flapwise (translational) deflection (relative to the undeflected position) of span station 9; Directed along the xb2-axis +ElastoDyn['Spn9TDyb2'] = False # (m); Blade 2 local edgewise (translational) deflection (relative to the undeflected position) of span station 9; Directed along the yb2-axis +ElastoDyn['Spn9TDzb2'] = False # (m); Blade 2 local axial (translational) deflection (relative to the undeflected position) of span station 9; Directed along the zb2-axis +ElastoDyn['Spn1RDxb2'] = False # (deg); Blade 2 local roll (angular/rotational) deflection (relative to the undeflected position) of span station 1. In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local xb2-axis +ElastoDyn['Spn1RDyb2'] = False # (deg); Blade 2 local pitch (angular/rotational) deflection (relative to the undeflected position) of span station 1. In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local yb2-axis +ElastoDyn['Spn1RDzb2'] = False # (deg); Blade 2 local torsional (angular/rotational) deflection (relative to the undeflected position) of span station 1. This output will always be zero for FAST simulation results. Use it for examining blade torsional deflections of ADAMS simulations run using ADAMS datasets created using the FAST-to-ADAMS preprocessor. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence. Please note that this output uses the opposite of the sign convention used for blade pitch angles.; About the local zb2-axis +ElastoDyn['Spn2RDxb2'] = False # (deg); Blade 2 local roll (angular/rotational) deflection (relative to the undeflected position) of span station 2. In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local xb2-axis +ElastoDyn['Spn2RDyb2'] = False # (deg); Blade 2 local pitch (angular/rotational) deflection (relative to the undeflected position) of span station 2. In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local yb2-axis +ElastoDyn['Spn2RDzb2'] = False # (deg); Blade 2 local torsional (angular/rotational) deflection (relative to the undeflected position) of span station 2. This output will always be zero for FAST simulation results. Use it for examining blade torsional deflections of ADAMS simulations run using ADAMS datasets created using the FAST-to-ADAMS preprocessor. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence. Please note that this output uses the opposite of the sign convention used for blade pitch angles.; About the local zb2-axis +ElastoDyn['Spn3RDxb2'] = False # (deg); Blade 2 local roll (angular/rotational) deflection (relative to the undeflected position) of span station 3. In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local xb2-axis +ElastoDyn['Spn3RDyb2'] = False # (deg); Blade 2 local pitch (angular/rotational) deflection (relative to the undeflected position) of span station 3. In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local yb2-axis +ElastoDyn['Spn3RDzb2'] = False # (deg); Blade 2 local torsional (angular/rotational) deflection (relative to the undeflected position) of span station 3. This output will always be zero for FAST simulation results. Use it for examining blade torsional deflections of ADAMS simulations run using ADAMS datasets created using the FAST-to-ADAMS preprocessor. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence. Please note that this output uses the opposite of the sign convention used for blade pitch angles.; About the local zb2-axis +ElastoDyn['Spn4RDxb2'] = False # (deg); Blade 2 local roll (angular/rotational) deflection (relative to the undeflected position) of span station 4. In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local xb2-axis +ElastoDyn['Spn4RDyb2'] = False # (deg); Blade 2 local pitch (angular/rotational) deflection (relative to the undeflected position) of span station 4. In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local yb2-axis +ElastoDyn['Spn4RDzb2'] = False # (deg); Blade 2 local torsional (angular/rotational) deflection (relative to the undeflected position) of span station 4. This output will always be zero for FAST simulation results. Use it for examining blade torsional deflections of ADAMS simulations run using ADAMS datasets created using the FAST-to-ADAMS preprocessor. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence. Please note that this output uses the opposite of the sign convention used for blade pitch angles.; About the local zb2-axis +ElastoDyn['Spn5RDxb2'] = False # (deg); Blade 2 local roll (angular/rotational) deflection (relative to the undeflected position) of span station 5. In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local xb2-axis +ElastoDyn['Spn5RDyb2'] = False # (deg); Blade 2 local pitch (angular/rotational) deflection (relative to the undeflected position) of span station 5. In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local yb2-axis +ElastoDyn['Spn5RDzb2'] = False # (deg); Blade 2 local torsional (angular/rotational) deflection (relative to the undeflected position) of span station 5. This output will always be zero for FAST simulation results. Use it for examining blade torsional deflections of ADAMS simulations run using ADAMS datasets created using the FAST-to-ADAMS preprocessor. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence. Please note that this output uses the opposite of the sign convention used for blade pitch angles.; About the local zb2-axis +ElastoDyn['Spn6RDxb2'] = False # (deg); Blade 2 local roll (angular/rotational) deflection (relative to the undeflected position) of span station 6. In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local xb2-axis +ElastoDyn['Spn6RDyb2'] = False # (deg); Blade 2 local pitch (angular/rotational) deflection (relative to the undeflected position) of span station 6. In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local yb2-axis +ElastoDyn['Spn6RDzb2'] = False # (deg); Blade 2 local torsional (angular/rotational) deflection (relative to the undeflected position) of span station 6. This output will always be zero for FAST simulation results. Use it for examining blade torsional deflections of ADAMS simulations run using ADAMS datasets created using the FAST-to-ADAMS preprocessor. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence. Please note that this output uses the opposite of the sign convention used for blade pitch angles.; About the local zb2-axis +ElastoDyn['Spn7RDxb2'] = False # (deg); Blade 2 local roll (angular/rotational) deflection (relative to the undeflected position) of span station 7. In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local xb2-axis +ElastoDyn['Spn7RDyb2'] = False # (deg); Blade 2 local pitch (angular/rotational) deflection (relative to the undeflected position) of span station 7. In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local yb2-axis +ElastoDyn['Spn7RDzb2'] = False # (deg); Blade 2 local torsional (angular/rotational) deflection (relative to the undeflected position) of span station 7. This output will always be zero for FAST simulation results. Use it for examining blade torsional deflections of ADAMS simulations run using ADAMS datasets created using the FAST-to-ADAMS preprocessor. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence. Please note that this output uses the opposite of the sign convention used for blade pitch angles.; About the local zb2-axis +ElastoDyn['Spn8RDxb2'] = False # (deg); Blade 2 local roll (angular/rotational) deflection (relative to the undeflected position) of span station 8. In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local xb2-axis +ElastoDyn['Spn8RDyb2'] = False # (deg); Blade 2 local pitch (angular/rotational) deflection (relative to the undeflected position) of span station 8. In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local yb2-axis +ElastoDyn['Spn8RDzb2'] = False # (deg); Blade 2 local torsional (angular/rotational) deflection (relative to the undeflected position) of span station 8. This output will always be zero for FAST simulation results. Use it for examining blade torsional deflections of ADAMS simulations run using ADAMS datasets created using the FAST-to-ADAMS preprocessor. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence. Please note that this output uses the opposite of the sign convention used for blade pitch angles.; About the local zb2-axis +ElastoDyn['Spn9RDxb2'] = False # (deg); Blade 2 local roll (angular/rotational) deflection (relative to the undeflected position) of span station 9. In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local xb2-axis +ElastoDyn['Spn9RDyb2'] = False # (deg); Blade 2 local pitch (angular/rotational) deflection (relative to the undeflected position) of span station 9. In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local yb2-axis +ElastoDyn['Spn9RDzb2'] = False # (deg); Blade 2 local torsional (angular/rotational) deflection (relative to the undeflected position) of span station 9. This output will always be zero for FAST simulation results. Use it for examining blade torsional deflections of ADAMS simulations run using ADAMS datasets created using the FAST-to-ADAMS preprocessor. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence. Please note that this output uses the opposite of the sign convention used for blade pitch angles.; About the local zb2-axis + +# Blade 3 Local Span Motions +ElastoDyn['Spn1ALxb3'] = False # (m/s^2); Blade 3 local flapwise acceleration (absolute) of span station 1; Directed along the local xb3-axis +ElastoDyn['Spn1ALyb3'] = False # (m/s^2); Blade 3 local edgewise acceleration (absolute) of span station 1; Directed along the local yb3-axis +ElastoDyn['Spn1ALzb3'] = False # (m/s^2); Blade 3 local axial acceleration (absolute) of span station 1; Directed along the local zb3-axis +ElastoDyn['Spn2ALxb3'] = False # (m/s^2); Blade 3 local flapwise acceleration (absolute) of span station 2; Directed along the local xb3-axis +ElastoDyn['Spn2ALyb3'] = False # (m/s^2); Blade 3 local edgewise acceleration (absolute) of span station 2; Directed along the local yb3-axis +ElastoDyn['Spn2ALzb3'] = False # (m/s^2); Blade 3 local axial acceleration (absolute) of span station 2; Directed along the local zb3-axis +ElastoDyn['Spn3ALxb3'] = False # (m/s^2); Blade 3 local flapwise acceleration (absolute) of span station 3; Directed along the local xb3-axis +ElastoDyn['Spn3ALyb3'] = False # (m/s^2); Blade 3 local edgewise acceleration (absolute) of span station 3; Directed along the local yb3-axis +ElastoDyn['Spn3ALzb3'] = False # (m/s^2); Blade 3 local axial acceleration (absolute) of span station 3; Directed along the local zb3-axis +ElastoDyn['Spn4ALxb3'] = False # (m/s^2); Blade 3 local flapwise acceleration (absolute) of span station 4; Directed along the local xb3-axis +ElastoDyn['Spn4ALyb3'] = False # (m/s^2); Blade 3 local edgewise acceleration (absolute) of span station 4; Directed along the local yb3-axis +ElastoDyn['Spn4ALzb3'] = False # (m/s^2); Blade 3 local axial acceleration (absolute) of span station 4; Directed along the local zb3-axis +ElastoDyn['Spn5ALxb3'] = False # (m/s^2); Blade 3 local flapwise acceleration (absolute) of span station 5; Directed along the local xb3-axis +ElastoDyn['Spn5ALyb3'] = False # (m/s^2); Blade 3 local edgewise acceleration (absolute) of span station 5; Directed along the local yb3-axis +ElastoDyn['Spn5ALzb3'] = False # (m/s^2); Blade 3 local axial acceleration (absolute) of span station 5; Directed along the local zb3-axis +ElastoDyn['Spn6ALxb3'] = False # (m/s^2); Blade 3 local flapwise acceleration (absolute) of span station 6; Directed along the local xb3-axis +ElastoDyn['Spn6ALyb3'] = False # (m/s^2); Blade 3 local edgewise acceleration (absolute) of span station 6; Directed along the local yb3-axis +ElastoDyn['Spn6ALzb3'] = False # (m/s^2); Blade 3 local axial acceleration (absolute) of span station 6; Directed along the local zb3-axis +ElastoDyn['Spn7ALxb3'] = False # (m/s^2); Blade 3 local flapwise acceleration (absolute) of span station 7; Directed along the local xb3-axis +ElastoDyn['Spn7ALyb3'] = False # (m/s^2); Blade 3 local edgewise acceleration (absolute) of span station 7; Directed along the local yb3-axis +ElastoDyn['Spn7ALzb3'] = False # (m/s^2); Blade 3 local axial acceleration (absolute) of span station 7; Directed along the local zb3-axis +ElastoDyn['Spn8ALxb3'] = False # (m/s^2); Blade 3 local flapwise acceleration (absolute) of span station 8; Directed along the local xb3-axis +ElastoDyn['Spn8ALyb3'] = False # (m/s^2); Blade 3 local edgewise acceleration (absolute) of span station 8; Directed along the local yb3-axis +ElastoDyn['Spn8ALzb3'] = False # (m/s^2); Blade 3 local axial acceleration (absolute) of span station 8; Directed along the local zb3-axis +ElastoDyn['Spn9ALxb3'] = False # (m/s^2); Blade 3 local flapwise acceleration (absolute) of span station 9; Directed along the local xb3-axis +ElastoDyn['Spn9ALyb3'] = False # (m/s^2); Blade 3 local edgewise acceleration (absolute) of span station 9; Directed along the local yb3-axis +ElastoDyn['Spn9ALzb3'] = False # (m/s^2); Blade 3 local axial acceleration (absolute) of span station 9; Directed along the local zb3-axis +ElastoDyn['Spn1TDxb3'] = False # (m); Blade 3 local flapwise (translational) deflection (relative to the undeflected position) of span station 1; Directed along the xb3-axis +ElastoDyn['Spn1TDyb3'] = False # (m); Blade 3 local edgewise (translational) deflection (relative to the undeflected position) of span station 1; Directed along the yb3-axis +ElastoDyn['Spn1TDzb3'] = False # (m); Blade 3 local axial (translational) deflection (relative to the undeflected position) of span station 1; Directed along the zb3-axis +ElastoDyn['Spn2TDxb3'] = False # (m); Blade 3 local flapwise (translational) deflection (relative to the undeflected position) of span station 2; Directed along the xb3-axis +ElastoDyn['Spn2TDyb3'] = False # (m); Blade 3 local edgewise (translational) deflection (relative to the undeflected position) of span station 2; Directed along the yb3-axis +ElastoDyn['Spn2TDzb3'] = False # (m); Blade 3 local axial (translational) deflection (relative to the undeflected position) of span station 2; Directed along the zb3-axis +ElastoDyn['Spn3TDxb3'] = False # (m); Blade 3 local flapwise (translational) deflection (relative to the undeflected position) of span station 3; Directed along the xb3-axis +ElastoDyn['Spn3TDyb3'] = False # (m); Blade 3 local edgewise (translational) deflection (relative to the undeflected position) of span station 3; Directed along the yb3-axis +ElastoDyn['Spn3TDzb3'] = False # (m); Blade 3 local axial (translational) deflection (relative to the undeflected position) of span station 3; Directed along the zb3-axis +ElastoDyn['Spn4TDxb3'] = False # (m); Blade 3 local flapwise (translational) deflection (relative to the undeflected position) of span station 4; Directed along the xb3-axis +ElastoDyn['Spn4TDyb3'] = False # (m); Blade 3 local edgewise (translational) deflection (relative to the undeflected position) of span station 4; Directed along the yb3-axis +ElastoDyn['Spn4TDzb3'] = False # (m); Blade 3 local axial (translational) deflection (relative to the undeflected position) of span station 4; Directed along the zb3-axis +ElastoDyn['Spn5TDxb3'] = False # (m); Blade 3 local flapwise (translational) deflection (relative to the undeflected position) of span station 5; Directed along the xb3-axis +ElastoDyn['Spn5TDyb3'] = False # (m); Blade 3 local edgewise (translational) deflection (relative to the undeflected position) of span station 5; Directed along the yb3-axis +ElastoDyn['Spn5TDzb3'] = False # (m); Blade 3 local axial (translational) deflection (relative to the undeflected position) of span station 5; Directed along the zb3-axis +ElastoDyn['Spn6TDxb3'] = False # (m); Blade 3 local flapwise (translational) deflection (relative to the undeflected position) of span station 6; Directed along the xb3-axis +ElastoDyn['Spn6TDyb3'] = False # (m); Blade 3 local edgewise (translational) deflection (relative to the undeflected position) of span station 6; Directed along the yb3-axis +ElastoDyn['Spn6TDzb3'] = False # (m); Blade 3 local axial (translational) deflection (relative to the undeflected position) of span station 6; Directed along the zb3-axis +ElastoDyn['Spn7TDxb3'] = False # (m); Blade 3 local flapwise (translational) deflection (relative to the undeflected position) of span station 7; Directed along the xb3-axis +ElastoDyn['Spn7TDyb3'] = False # (m); Blade 3 local edgewise (translational) deflection (relative to the undeflected position) of span station 7; Directed along the yb3-axis +ElastoDyn['Spn7TDzb3'] = False # (m); Blade 3 local axial (translational) deflection (relative to the undeflected position) of span station 7; Directed along the zb3-axis +ElastoDyn['Spn8TDxb3'] = False # (m); Blade 3 local flapwise (translational) deflection (relative to the undeflected position) of span station 8; Directed along the xb3-axis +ElastoDyn['Spn8TDyb3'] = False # (m); Blade 3 local edgewise (translational) deflection (relative to the undeflected position) of span station 8; Directed along the yb3-axis +ElastoDyn['Spn8TDzb3'] = False # (m); Blade 3 local axial (translational) deflection (relative to the undeflected position) of span station 8; Directed along the zb3-axis +ElastoDyn['Spn9TDxb3'] = False # (m); Blade 3 local flapwise (translational) deflection (relative to the undeflected position) of span station 9; Directed along the xb3-axis +ElastoDyn['Spn9TDyb3'] = False # (m); Blade 3 local edgewise (translational) deflection (relative to the undeflected position) of span station 9; Directed along the yb3-axis +ElastoDyn['Spn9TDzb3'] = False # (m); Blade 3 local axial (translational) deflection (relative to the undeflected position) of span station 9; Directed along the zb3-axis +ElastoDyn['Spn1RDxb3'] = False # (deg); Blade 3 local roll (angular/rotational) deflection (relative to the undeflected position) of span station 1. In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local xb3-axis +ElastoDyn['Spn1RDyb3'] = False # (deg); Blade 3 local pitch (angular/rotational) deflection (relative to the undeflected position) of span station 1. In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local yb3-axis +ElastoDyn['Spn1RDzb3'] = False # (deg); Blade 3 local torsional (angular/rotational) deflection (relative to the undeflected position) of span station 1. This output will always be zero for FAST simulation results. Use it for examining blade torsional deflections of ADAMS simulations run using ADAMS datasets created using the FAST-to-ADAMS preprocessor. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence. Please note that this output uses the opposite of the sign convention used for blade pitch angles.; About the local zb3-axis +ElastoDyn['Spn2RDxb3'] = False # (deg); Blade 3 local roll (angular/rotational) deflection (relative to the undeflected position) of span station 2. In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local xb3-axis +ElastoDyn['Spn2RDyb3'] = False # (deg); Blade 3 local pitch (angular/rotational) deflection (relative to the undeflected position) of span station 2. In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local yb3-axis +ElastoDyn['Spn2RDzb3'] = False # (deg); Blade 3 local torsional (angular/rotational) deflection (relative to the undeflected position) of span station 2. This output will always be zero for FAST simulation results. Use it for examining blade torsional deflections of ADAMS simulations run using ADAMS datasets created using the FAST-to-ADAMS preprocessor. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence. Please note that this output uses the opposite of the sign convention used for blade pitch angles.; About the local zb3-axis +ElastoDyn['Spn3RDxb3'] = False # (deg); Blade 3 local roll (angular/rotational) deflection (relative to the undeflected position) of span station 3. In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local xb3-axis +ElastoDyn['Spn3RDyb3'] = False # (deg); Blade 3 local pitch (angular/rotational) deflection (relative to the undeflected position) of span station 3. In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local yb3-axis +ElastoDyn['Spn3RDzb3'] = False # (deg); Blade 3 local torsional (angular/rotational) deflection (relative to the undeflected position) of span station 3. This output will always be zero for FAST simulation results. Use it for examining blade torsional deflections of ADAMS simulations run using ADAMS datasets created using the FAST-to-ADAMS preprocessor. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence. Please note that this output uses the opposite of the sign convention used for blade pitch angles.; About the local zb3-axis +ElastoDyn['Spn4RDxb3'] = False # (deg); Blade 3 local roll (angular/rotational) deflection (relative to the undeflected position) of span station 4. In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local xb3-axis +ElastoDyn['Spn4RDyb3'] = False # (deg); Blade 3 local pitch (angular/rotational) deflection (relative to the undeflected position) of span station 4. In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local yb3-axis +ElastoDyn['Spn4RDzb3'] = False # (deg); Blade 3 local torsional (angular/rotational) deflection (relative to the undeflected position) of span station 4. This output will always be zero for FAST simulation results. Use it for examining blade torsional deflections of ADAMS simulations run using ADAMS datasets created using the FAST-to-ADAMS preprocessor. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence. Please note that this output uses the opposite of the sign convention used for blade pitch angles.; About the local zb3-axis +ElastoDyn['Spn5RDxb3'] = False # (deg); Blade 3 local roll (angular/rotational) deflection (relative to the undeflected position) of span station 5. In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local xb3-axis +ElastoDyn['Spn5RDyb3'] = False # (deg); Blade 3 local pitch (angular/rotational) deflection (relative to the undeflected position) of span station 5. In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local yb3-axis +ElastoDyn['Spn5RDzb3'] = False # (deg); Blade 3 local torsional (angular/rotational) deflection (relative to the undeflected position) of span station 5. This output will always be zero for FAST simulation results. Use it for examining blade torsional deflections of ADAMS simulations run using ADAMS datasets created using the FAST-to-ADAMS preprocessor. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence. Please note that this output uses the opposite of the sign convention used for blade pitch angles.; About the local zb3-axis +ElastoDyn['Spn6RDxb3'] = False # (deg); Blade 3 local roll (angular/rotational) deflection (relative to the undeflected position) of span station 6. In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local xb3-axis +ElastoDyn['Spn6RDyb3'] = False # (deg); Blade 3 local pitch (angular/rotational) deflection (relative to the undeflected position) of span station 6. In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local yb3-axis +ElastoDyn['Spn6RDzb3'] = False # (deg); Blade 3 local torsional (angular/rotational) deflection (relative to the undeflected position) of span station 6. This output will always be zero for FAST simulation results. Use it for examining blade torsional deflections of ADAMS simulations run using ADAMS datasets created using the FAST-to-ADAMS preprocessor. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence. Please note that this output uses the opposite of the sign convention used for blade pitch angles.; About the local zb3-axis +ElastoDyn['Spn7RDxb3'] = False # (deg); Blade 3 local roll (angular/rotational) deflection (relative to the undeflected position) of span station 7. In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local xb3-axis +ElastoDyn['Spn7RDyb3'] = False # (deg); Blade 3 local pitch (angular/rotational) deflection (relative to the undeflected position) of span station 7. In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local yb3-axis +ElastoDyn['Spn7RDzb3'] = False # (deg); Blade 3 local torsional (angular/rotational) deflection (relative to the undeflected position) of span station 7. This output will always be zero for FAST simulation results. Use it for examining blade torsional deflections of ADAMS simulations run using ADAMS datasets created using the FAST-to-ADAMS preprocessor. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence. Please note that this output uses the opposite of the sign convention used for blade pitch angles.; About the local zb3-axis +ElastoDyn['Spn8RDxb3'] = False # (deg); Blade 3 local roll (angular/rotational) deflection (relative to the undeflected position) of span station 8. In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local xb3-axis +ElastoDyn['Spn8RDyb3'] = False # (deg); Blade 3 local pitch (angular/rotational) deflection (relative to the undeflected position) of span station 8. In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local yb3-axis +ElastoDyn['Spn8RDzb3'] = False # (deg); Blade 3 local torsional (angular/rotational) deflection (relative to the undeflected position) of span station 8. This output will always be zero for FAST simulation results. Use it for examining blade torsional deflections of ADAMS simulations run using ADAMS datasets created using the FAST-to-ADAMS preprocessor. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence. Please note that this output uses the opposite of the sign convention used for blade pitch angles.; About the local zb3-axis +ElastoDyn['Spn9RDxb3'] = False # (deg); Blade 3 local roll (angular/rotational) deflection (relative to the undeflected position) of span station 9. In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local xb3-axis +ElastoDyn['Spn9RDyb3'] = False # (deg); Blade 3 local pitch (angular/rotational) deflection (relative to the undeflected position) of span station 9. In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local yb3-axis +ElastoDyn['Spn9RDzb3'] = False # (deg); Blade 3 local torsional (angular/rotational) deflection (relative to the undeflected position) of span station 9. This output will always be zero for FAST simulation results. Use it for examining blade torsional deflections of ADAMS simulations run using ADAMS datasets created using the FAST-to-ADAMS preprocessor. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence. Please note that this output uses the opposite of the sign convention used for blade pitch angles.; About the local zb3-axis + +# Blade Pitch Motions +ElastoDyn['PtchPMzc1'] = False # (deg); Blade 1 pitch angle (position); Positive towards feather about the minus zc1- and minus zb1-axes +ElastoDyn['PtchPMzb1'] = False # (deg); Blade 1 pitch angle (position); Positive towards feather about the minus zc1- and minus zb1-axes +ElastoDyn['BldPitch1'] = False # (deg); Blade 1 pitch angle (position); Positive towards feather about the minus zc1- and minus zb1-axes +ElastoDyn['BlPitch1'] = False # (deg); Blade 1 pitch angle (position); Positive towards feather about the minus zc1- and minus zb1-axes +ElastoDyn['PtchPMzc2'] = False # (deg); Blade 2 pitch angle (position); Positive towards feather about the minus zc2- and minus zb2-axes +ElastoDyn['PtchPMzb2'] = False # (deg); Blade 2 pitch angle (position); Positive towards feather about the minus zc2- and minus zb2-axes +ElastoDyn['BldPitch2'] = False # (deg); Blade 2 pitch angle (position); Positive towards feather about the minus zc2- and minus zb2-axes +ElastoDyn['BlPitch2'] = False # (deg); Blade 2 pitch angle (position); Positive towards feather about the minus zc2- and minus zb2-axes +ElastoDyn['PtchPMzc3'] = False # (deg); Blade 3 pitch angle (position); Positive towards feather about the minus zc3- and minus zb3-axes +ElastoDyn['PtchPMzb3'] = False # (deg); Blade 3 pitch angle (position); Positive towards feather about the minus zc3- and minus zb3-axes +ElastoDyn['BldPitch3'] = False # (deg); Blade 3 pitch angle (position); Positive towards feather about the minus zc3- and minus zb3-axes +ElastoDyn['BlPitch3'] = False # (deg); Blade 3 pitch angle (position); Positive towards feather about the minus zc3- and minus zb3-axes + +# Teeter Motions +ElastoDyn['TeetPya'] = False # (deg); Rotor teeter angle (position); About the ya-axis +ElastoDyn['RotTeetP'] = False # (deg); Rotor teeter angle (position); About the ya-axis +ElastoDyn['TeetDefl'] = False # (deg); Rotor teeter angle (position); About the ya-axis +ElastoDyn['TeetVya'] = False # (deg/s); Rotor teeter angular velocity; About the ya-axis +ElastoDyn['RotTeetV'] = False # (deg/s); Rotor teeter angular velocity; About the ya-axis +ElastoDyn['TeetAya'] = False # (deg/s^2); Rotor teeter angular acceleration; About the ya-axis +ElastoDyn['RotTeetA'] = False # (deg/s^2); Rotor teeter angular acceleration; About the ya-axis + +# Shaft Motions +ElastoDyn['LSSTipPxa'] = False # (deg); Rotor azimuth angle (position); About the xa- and xs-axes +ElastoDyn['LSSTipPxs'] = False # (deg); Rotor azimuth angle (position); About the xa- and xs-axes +ElastoDyn['LSSTipP'] = False # (deg); Rotor azimuth angle (position); About the xa- and xs-axes +ElastoDyn['Azimuth'] = False # (deg); Rotor azimuth angle (position); About the xa- and xs-axes +ElastoDyn['LSSTipVxa'] = False # (rpm); Rotor azimuth angular speed; About the xa- and xs-axes +ElastoDyn['LSSTipVxs'] = False # (rpm); Rotor azimuth angular speed; About the xa- and xs-axes +ElastoDyn['LSSTipV'] = False # (rpm); Rotor azimuth angular speed; About the xa- and xs-axes +ElastoDyn['RotSpeed'] = False # (rpm); Rotor azimuth angular speed; About the xa- and xs-axes +ElastoDyn['LSSTipAxa'] = False # (deg/s^2); Rotor azimuth angular acceleration; About the xa- and xs-axes +ElastoDyn['LSSTipAxs'] = False # (deg/s^2); Rotor azimuth angular acceleration; About the xa- and xs-axes +ElastoDyn['LSSTipA'] = False # (deg/s^2); Rotor azimuth angular acceleration; About the xa- and xs-axes +ElastoDyn['RotAccel'] = False # (deg/s^2); Rotor azimuth angular acceleration; About the xa- and xs-axes +ElastoDyn['LSSGagPxa'] = False # (deg); Low-speed shaft strain gage azimuth angle (position) (on the gearbox side of the low-speed shaft); About the xa- and xs-axes +ElastoDyn['LSSGagPxs'] = False # (deg); Low-speed shaft strain gage azimuth angle (position) (on the gearbox side of the low-speed shaft); About the xa- and xs-axes +ElastoDyn['LSSGagP'] = False # (deg); Low-speed shaft strain gage azimuth angle (position) (on the gearbox side of the low-speed shaft); About the xa- and xs-axes +ElastoDyn['LSSGagVxa'] = False # (rpm); Low-speed shaft strain gage angular speed (on the gearbox side of the low-speed shaft); About the xa- and xs-axes +ElastoDyn['LSSGagVxs'] = False # (rpm); Low-speed shaft strain gage angular speed (on the gearbox side of the low-speed shaft); About the xa- and xs-axes +ElastoDyn['LSSGagV'] = False # (rpm); Low-speed shaft strain gage angular speed (on the gearbox side of the low-speed shaft); About the xa- and xs-axes +ElastoDyn['LSSGagAxa'] = False # (deg/s^2); Low-speed shaft strain gage angular acceleration (on the gearbox side of the low-speed shaft); About the xa- and xs-axes +ElastoDyn['LSSGagAxs'] = False # (deg/s^2); Low-speed shaft strain gage angular acceleration (on the gearbox side of the low-speed shaft); About the xa- and xs-axes +ElastoDyn['LSSGagA'] = False # (deg/s^2); Low-speed shaft strain gage angular acceleration (on the gearbox side of the low-speed shaft); About the xa- and xs-axes +ElastoDyn['HSShftV'] = False # (rpm); Angular speed of the high-speed shaft and generator; Same sign as LSSGagVxa / LSSGagVxs / LSSGagV +ElastoDyn['GenSpeed'] = False # (rpm); Angular speed of the high-speed shaft and generator; Same sign as LSSGagVxa / LSSGagVxs / LSSGagV +ElastoDyn['HSShftA'] = False # (deg/s^2); Angular acceleration of the high-speed shaft and generator; Same sign as LSSGagAxa / LSSGagAxs / LSSGagA +ElastoDyn['GenAccel'] = False # (deg/s^2); Angular acceleration of the high-speed shaft and generator; Same sign as LSSGagAxa / LSSGagAxs / LSSGagA + +# Nacelle IMU Motions +ElastoDyn['NcIMUTVxs'] = False # (m/s); Nacelle inertial measurement unit translational velocity (absolute); Directed along the xs-axis +ElastoDyn['NcIMUTVys'] = False # (m/s); Nacelle inertial measurement unit translational velocity (absolute); Directed along the ys-axis +ElastoDyn['NcIMUTVzs'] = False # (m/s); Nacelle inertial measurement unit translational velocity (absolute); Directed along the zs-axis +ElastoDyn['NcIMUTAxs'] = False # (m/s^2); Nacelle inertial measurement unit translational acceleration (absolute); Directed along the xs-axis +ElastoDyn['NcIMUTAys'] = False # (m/s^2); Nacelle inertial measurement unit translational acceleration (absolute); Directed along the ys-axis +ElastoDyn['NcIMUTAzs'] = False # (m/s^2); Nacelle inertial measurement unit translational acceleration (absolute); Directed along the zs-axis +ElastoDyn['NcIMURVxs'] = False # (deg/s); Nacelle inertial measurement unit angular (rotational) velocity (absolute); About the xs-axis +ElastoDyn['NcIMURVys'] = False # (deg/s); Nacelle inertial measurement unit angular (rotational) velocity (absolute); About the ys-axis +ElastoDyn['NcIMURVzs'] = False # (deg/s); Nacelle inertial measurement unit angular (rotational) velocity (absolute); About the zs-axis +ElastoDyn['NcIMURAxs'] = False # (deg/s^2); Nacelle inertial measurement unit angular (rotational) acceleration (absolute); About the xs-axis +ElastoDyn['NcIMURAys'] = False # (deg/s^2); Nacelle inertial measurement unit angular (rotational) acceleration (absolute); About the ys-axis +ElastoDyn['NcIMURAzs'] = False # (deg/s^2); Nacelle inertial measurement unit angular (rotational) acceleration (absolute); About the zs-axis + +# Rotor-Furl Motions +ElastoDyn['RotFurlP'] = False # (deg); Rotor-furl angle (position); About the rotor-furl axis +ElastoDyn['RotFurl'] = False # (deg); Rotor-furl angle (position); About the rotor-furl axis +ElastoDyn['RotFurlV'] = False # (deg/s); Rotor-furl angular velocity; About the rotor-furl axis +ElastoDyn['RotFurlA'] = False # (deg/s^2); Rotor-furl angular acceleration; About the rotor-furl axis + +# Tail-Furl Motions +ElastoDyn['TailFurlP'] = False # (deg); Tail-furl angle (position); About the tail-furl axis +ElastoDyn['TailFurl'] = False # (deg); Tail-furl angle (position); About the tail-furl axis +ElastoDyn['TailFurlV'] = False # (deg/s); Tail-furl angular velocity; About the tail-furl axis +ElastoDyn['TailFurlA'] = False # (deg/s^2); Tail-furl angular acceleration; About the tail-furl axis + +# Nacelle Yaw Motions +ElastoDyn['YawPzn'] = False # (deg); Nacelle yaw angle (position); About the zn- and zp-axes +ElastoDyn['YawPzp'] = False # (deg); Nacelle yaw angle (position); About the zn- and zp-axes +ElastoDyn['NacYawP'] = False # (deg); Nacelle yaw angle (position); About the zn- and zp-axes +ElastoDyn['NacYaw'] = False # (deg); Nacelle yaw angle (position); About the zn- and zp-axes +ElastoDyn['YawPos'] = False # (deg); Nacelle yaw angle (position); About the zn- and zp-axes +ElastoDyn['YawVzn'] = False # (deg/s); Nacelle yaw angular velocity; About the zn- and zp-axes +ElastoDyn['YawVzp'] = False # (deg/s); Nacelle yaw angular velocity; About the zn- and zp-axes +ElastoDyn['NacYawV'] = False # (deg/s); Nacelle yaw angular velocity; About the zn- and zp-axes +ElastoDyn['YawRate'] = False # (deg/s); Nacelle yaw angular velocity; About the zn- and zp-axes +ElastoDyn['YawAzn'] = False # (deg/s^2); Nacelle yaw angular acceleration; About the zn- and zp-axes +ElastoDyn['YawAzp'] = False # (deg/s^2); Nacelle yaw angular acceleration; About the zn- and zp-axes +ElastoDyn['NacYawA'] = False # (deg/s^2); Nacelle yaw angular acceleration; About the zn- and zp-axes +ElastoDyn['YawAccel'] = False # (deg/s^2); Nacelle yaw angular acceleration; About the zn- and zp-axes + +# Tower-Top / Yaw Bearing Motions +ElastoDyn['TwrTpTDxi'] = False # (m); Tower-top / yaw bearing fore-aft (translational) deflection (relative to the undeflected position) including all platform motions; Directed along the xi-axis +ElastoDyn['YawBrTDxi'] = False # (m); Tower-top / yaw bearing fore-aft (translational) deflection (relative to the undeflected position) including all platform motions; Directed along the xi-axis +ElastoDyn['TwrTpTDyi'] = False # (m); Tower-top / yaw bearing side-to-side (translational) deflection (relative to the undeflected position) including all platform motions; Directed along the yi-axis +ElastoDyn['YawBrTDyi'] = False # (m); Tower-top / yaw bearing side-to-side (translational) deflection (relative to the undeflected position) including all platform motions; Directed along the yi-axis +ElastoDyn['TwrTpTDzi'] = False # (m); Tower-top / yaw bearing axial (translational) deflection (relative to the undeflected position) including all platform motions; Directed along the zi-axis +ElastoDyn['YawBrTDzi'] = False # (m); Tower-top / yaw bearing axial (translational) deflection (relative to the undeflected position) including all platform motions; Directed along the zi-axis +ElastoDyn['YawBrTDxp'] = False # (m); Tower-top / yaw bearing fore-aft (translational) deflection (relative to the undeflected position); Directed along the xp-axis +ElastoDyn['YawBrTDyp'] = False # (m); Tower-top / yaw bearing side-to-side (translational) deflection (relative to the undeflected position); Directed along the yp-axis +ElastoDyn['YawBrTDzp'] = False # (m); Tower-top / yaw bearing axial (translational) deflection (relative to the undeflected position); Directed along the zp-axis +ElastoDyn['YawBrTDxt'] = False # (m); Tower-top / yaw bearing fore-aft (translational) deflection (relative to the undeflected position); Directed along the xt-axis +ElastoDyn['TTDspFA'] = False # (m); Tower-top / yaw bearing fore-aft (translational) deflection (relative to the undeflected position); Directed along the xt-axis +ElastoDyn['YawBrTDyt'] = False # (m); Tower-top / yaw bearing side-to-side (translation) deflection (relative to the undeflected position); Directed along the yt-axis +ElastoDyn['TTDspSS'] = False # (m); Tower-top / yaw bearing side-to-side (translation) deflection (relative to the undeflected position); Directed along the yt-axis +ElastoDyn['YawBrTDzt'] = False # (m); Tower-top / yaw bearing axial (translational) deflection (relative to the undeflected position); Directed along the zt-axis +ElastoDyn['TTDspAx'] = False # (m); Tower-top / yaw bearing axial (translational) deflection (relative to the undeflected position); Directed along the zt-axis +ElastoDyn['YawBrTVxp'] = False # (m/s); Tower-top / yaw bearing fore-aft (translational) velocity (absolute); Directed along the xp-axis +ElastoDyn['YawBrTVyp'] = False # (m/s); Tower-top / yaw bearing side-to-side (translational) velocity (absolute); Directed along the yp-axis +ElastoDyn['YawBrTVzp'] = False # (m/s); Tower-top / yaw bearing axial (translational) velocity (absolute); Directed along the zp-axis +ElastoDyn['YawBrTAxp'] = False # (m/s^2); Tower-top / yaw bearing fore-aft (translational) acceleration (absolute); Directed along the xp-axis +ElastoDyn['YawBrTAyp'] = False # (m/s^2); Tower-top / yaw bearing side-to-side (translational) acceleration (absolute); Directed along the yp-axis +ElastoDyn['YawBrTAzp'] = False # (m/s^2); Tower-top / yaw bearing axial (translational) acceleration (absolute); Directed along the zp-axis +ElastoDyn['YawBrRDxt'] = False # (deg); Tower-top / yaw bearing angular (rotational) roll deflection (relative to the undeflected position). In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small tower deflections, so that the rotation sequence does not matter.; About the xt-axis +ElastoDyn['TTDspRoll'] = False # (deg); Tower-top / yaw bearing angular (rotational) roll deflection (relative to the undeflected position). In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small tower deflections, so that the rotation sequence does not matter.; About the xt-axis +ElastoDyn['YawBrRDyt'] = False # (deg); Tower-top / yaw bearing angular (rotational) pitch deflection (relative to the undeflected position). In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small tower deflections, so that the rotation sequence does not matter.; About the yt-axis +ElastoDyn['TTDspPtch'] = False # (deg); Tower-top / yaw bearing angular (rotational) pitch deflection (relative to the undeflected position). In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small tower deflections, so that the rotation sequence does not matter.; About the yt-axis +ElastoDyn['YawBrRDzt'] = False # (deg); Tower-top / yaw bearing angular (rotational) torsion deflection (relative to the undeflected position). This output will always be zero for FAST simulation results. Use it for examining tower torsional deflections of ADAMS simulations run using ADAMS datasets created using the FAST-to-ADAMS preprocessor. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence.; About the zt-axis +ElastoDyn['TTDspTwst'] = False # (deg); Tower-top / yaw bearing angular (rotational) torsion deflection (relative to the undeflected position). This output will always be zero for FAST simulation results. Use it for examining tower torsional deflections of ADAMS simulations run using ADAMS datasets created using the FAST-to-ADAMS preprocessor. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence.; About the zt-axis +ElastoDyn['YawBrRVxp'] = False # (deg/s); Tower-top / yaw bearing angular (rotational) roll velocity (absolute); About the xp-axis +ElastoDyn['YawBrRVyp'] = False # (deg/s); Tower-top / yaw bearing angular (rotational) pitch velocity (absolute); About the yp-axis +ElastoDyn['YawBrRVzp'] = False # (deg/s); Tower-top / yaw bearing angular (rotational) torsion velocity. This output will always be very close to zero for FAST simulation results. Use it for examining tower torsional deflections of ADAMS simulations run using ADAMS datasets created using the FAST-to-ADAMS preprocessor. (absolute); About the zp-axis +ElastoDyn['YawBrRAxp'] = False # (deg/s^2); Tower-top / yaw bearing angular (rotational) roll acceleration (absolute); About the xp-axis +ElastoDyn['YawBrRAyp'] = False # (deg/s^2); Tower-top / yaw bearing angular (rotational) pitch acceleration (absolute); About the yp-axis +ElastoDyn['YawBrRAzp'] = False # (deg/s^2); Tower-top / yaw bearing angular (rotational) torsion acceleration. This output will always be very close to zero for FAST simulation results. Use it for examining tower torsional deflections of ADAMS simulations run using ADAMS datasets created using the FAST-to-ADAMS preprocessor. (absolute); About the zp-axis + +# Local Tower Motions +ElastoDyn['TwHt1ALxt'] = False # (m/s^2); Local tower fore-aft (translational) acceleration (absolute) of tower gage 1 ; Directed along the local xt-axis +ElastoDyn['TwHt1ALyt'] = False # (m/s^2); Local tower side-to-side (translational) acceleration (absolute) of tower gage 1 ; Directed along the local yt-axis +ElastoDyn['TwHt1ALzt'] = False # (m/s^2); Local tower axial (translational) acceleration (absolute) of tower gage 1 ; Directed along the local zt-axis +ElastoDyn['TwHt2ALxt'] = False # (m/s^2); Local tower fore-aft (translational) acceleration (absolute) of tower gage 2; Directed along the local xt-axis +ElastoDyn['TwHt2ALyt'] = False # (m/s^2); Local tower side-to-side (translational) acceleration (absolute) of tower gage 2; Directed along the local yt-axis +ElastoDyn['TwHt2ALzt'] = False # (m/s^2); Local tower axial (translational) acceleration (absolute) of tower gage 2; Directed along the local zt-axis +ElastoDyn['TwHt3ALxt'] = False # (m/s^2); Local tower fore-aft (translational) acceleration (absolute) of tower gage 3; Directed along the local xt-axis +ElastoDyn['TwHt3ALyt'] = False # (m/s^2); Local tower side-to-side (translational) acceleration (absolute) of tower gage 3; Directed along the local yt-axis +ElastoDyn['TwHt3ALzt'] = False # (m/s^2); Local tower axial (translational) acceleration (absolute) of tower gage 3; Directed along the local zt-axis +ElastoDyn['TwHt4ALxt'] = False # (m/s^2); Local tower fore-aft (translational) acceleration (absolute) of tower gage 4; Directed along the local xt-axis +ElastoDyn['TwHt4ALyt'] = False # (m/s^2); Local tower side-to-side (translational) acceleration (absolute) of tower gage 4; Directed along the local yt-axis +ElastoDyn['TwHt4ALzt'] = False # (m/s^2); Local tower axial (translational) acceleration (absolute) of tower gage 4; Directed along the local zt-axis +ElastoDyn['TwHt5ALxt'] = False # (m/s^2); Local tower fore-aft (translational) acceleration (absolute) of tower gage 5; Directed along the local xt-axis +ElastoDyn['TwHt5ALyt'] = False # (m/s^2); Local tower side-to-side (translational) acceleration (absolute) of tower gage 5; Directed along the local yt-axis +ElastoDyn['TwHt5ALzt'] = False # (m/s^2); Local tower axial (translational) acceleration (absolute) of tower gage 5; Directed along the local zt-axis +ElastoDyn['TwHt6ALxt'] = False # (m/s^2); Local tower fore-aft (translational) acceleration (absolute) of tower gage 6; Directed along the local xt-axis +ElastoDyn['TwHt6ALyt'] = False # (m/s^2); Local tower side-to-side (translational) acceleration (absolute) of tower gage 6; Directed along the local yt-axis +ElastoDyn['TwHt6ALzt'] = False # (m/s^2); Local tower axial (translational) acceleration (absolute) of tower gage 6; Directed along the local zt-axis +ElastoDyn['TwHt7ALxt'] = False # (m/s^2); Local tower fore-aft (translational) acceleration (absolute) of tower gage 7; Directed along the local xt-axis +ElastoDyn['TwHt7ALyt'] = False # (m/s^2); Local tower side-to-side (translational) acceleration (absolute) of tower gage 7; Directed along the local yt-axis +ElastoDyn['TwHt7ALzt'] = False # (m/s^2); Local tower axial (translational) acceleration (absolute) of tower gage 7; Directed along the local zt-axis +ElastoDyn['TwHt8ALxt'] = False # (m/s^2); Local tower fore-aft (translational) acceleration (absolute) of tower gage 8; Directed along the local xt-axis +ElastoDyn['TwHt8ALyt'] = False # (m/s^2); Local tower side-to-side (translational) acceleration (absolute) of tower gage 8; Directed along the local yt-axis +ElastoDyn['TwHt8ALzt'] = False # (m/s^2); Local tower axial (translational) acceleration (absolute) of tower gage 8; Directed along the local zt-axis +ElastoDyn['TwHt9ALxt'] = False # (m/s^2); Local tower fore-aft (translational) acceleration (absolute) of tower gage 9; Directed along the local xt-axis +ElastoDyn['TwHt9ALyt'] = False # (m/s^2); Local tower side-to-side (translational) acceleration (absolute) of tower gage 9; Directed along the local yt-axis +ElastoDyn['TwHt9ALzt'] = False # (m/s^2); Local tower axial (translational) acceleration (absolute) of tower gage 9; Directed along the local zt-axis +ElastoDyn['TwHt1TDxt'] = False # (m); Local tower fore-aft (translational) deflection (relative to the undeflected position) of tower gage 1; Directed along the local xt-axis +ElastoDyn['TwHt1TDyt'] = False # (m); Local tower side-to-side (translational) deflection (relative to the undeflected position) of tower gage 1; Directed along the local yt-axis +ElastoDyn['TwHt1TDzt'] = False # (m); Local tower axial (translational) deflection (relative to the undeflected position) of tower gage 1; Directed along the local zt-axis +ElastoDyn['TwHt2TDxt'] = False # (m); Local tower fore-aft (translational) deflection (relative to the undeflected position) of tower gage 2; Directed along the local xt-axis +ElastoDyn['TwHt2TDyt'] = False # (m); Local tower side-to-side (translational) deflection (relative to the undeflected position) of tower gage 2; Directed along the local yt-axis +ElastoDyn['TwHt2TDzt'] = False # (m); Local tower axial (translational) deflection (relative to the undeflected position) of tower gage 2; Directed along the local zt-axis +ElastoDyn['TwHt3TDxt'] = False # (m); Local tower fore-aft (translational) deflection (relative to the undeflected position) of tower gage 3; Directed along the local xt-axis +ElastoDyn['TwHt3TDyt'] = False # (m); Local tower side-to-side (translational) deflection (relative to the undeflected position) of tower gage 3; Directed along the local yt-axis +ElastoDyn['TwHt3TDzt'] = False # (m); Local tower axial (translational) deflection (relative to the undeflected position) of tower gage 3; Directed along the local zt-axis +ElastoDyn['TwHt4TDxt'] = False # (m); Local tower fore-aft (translational) deflection (relative to the undeflected position) of tower gage 4; Directed along the local xt-axis +ElastoDyn['TwHt4TDyt'] = False # (m); Local tower side-to-side (translational) deflection (relative to the undeflected position) of tower gage 4; Directed along the local yt-axis +ElastoDyn['TwHt4TDzt'] = False # (m); Local tower axial (translational) deflection (relative to the undeflected position) of tower gage 4; Directed along the local zt-axis +ElastoDyn['TwHt5TDxt'] = False # (m); Local tower fore-aft (translational) deflection (relative to the undeflected position) of tower gage 5; Directed along the local xt-axis +ElastoDyn['TwHt5TDyt'] = False # (m); Local tower side-to-side (translational) deflection (relative to the undeflected position) of tower gage 5; Directed along the local yt-axis +ElastoDyn['TwHt5TDzt'] = False # (m); Local tower axial (translational) deflection (relative to the undeflected position) of tower gage 5; Directed along the local zt-axis +ElastoDyn['TwHt6TDxt'] = False # (m); Local tower fore-aft (translational) deflection (relative to the undeflected position) of tower gage 6; Directed along the local xt-axis +ElastoDyn['TwHt6TDyt'] = False # (m); Local tower side-to-side (translational) deflection (relative to the undeflected position) of tower gage 6; Directed along the local yt-axis +ElastoDyn['TwHt6TDzt'] = False # (m); Local tower axial (translational) deflection (relative to the undeflected position) of tower gage 6; Directed along the local zt-axis +ElastoDyn['TwHt7TDxt'] = False # (m); Local tower fore-aft (translational) deflection (relative to the undeflected position) of tower gage 7; Directed along the local xt-axis +ElastoDyn['TwHt7TDyt'] = False # (m); Local tower side-to-side (translational) deflection (relative to the undeflected position) of tower gage 7; Directed along the local yt-axis +ElastoDyn['TwHt7TDzt'] = False # (m); Local tower axial (translational) deflection (relative to the undeflected position) of tower gage 7; Directed along the local zt-axis +ElastoDyn['TwHt8TDxt'] = False # (m); Local tower fore-aft (translational) deflection (relative to the undeflected position) of tower gage 8; Directed along the local xt-axis +ElastoDyn['TwHt8TDyt'] = False # (m); Local tower side-to-side (translational) deflection (relative to the undeflected position) of tower gage 8; Directed along the local yt-axis +ElastoDyn['TwHt8TDzt'] = False # (m); Local tower axial (translational) deflection (relative to the undeflected position) of tower gage 8; Directed along the local zt-axis +ElastoDyn['TwHt9TDxt'] = False # (m); Local tower fore-aft (translational) deflection (relative to the undeflected position) of tower gage 9; Directed along the local xt-axis +ElastoDyn['TwHt9TDyt'] = False # (m); Local tower side-to-side (translational) deflection (relative to the undeflected position) of tower gage 9; Directed along the local yt-axis +ElastoDyn['TwHt9TDzt'] = False # (m); Local tower axial (translational) deflection (relative to the undeflected position) of tower gage 9; Directed along the local zt-axis +ElastoDyn['TwHt1RDxt'] = False # (deg); Local tower angular (rotational) roll deflection (relative to the undeflected position) of tower gage 1. In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small tower deflections, so that the rotation sequence does not matter.; About the local xt-axis +ElastoDyn['TwHt1RDyt'] = False # (deg); Local tower angular (rotational) pitch deflection (relative to the undeflected position) of tower gage 1. In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small tower deflections, so that the rotation sequence does not matter.; About the local yt-axis +ElastoDyn['TwHt1RDzt'] = False # (deg); Local tower angular (rotational) torsion deflection (relative to the undeflected position) of tower gage 1. This output will always be zero for FAST simulation results. Use it for examining tower torsional deflections of ADAMS simulations run using ADAMS datasets created using the FAST-to-ADAMS preprocessor. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence.; About the local zt-axis +ElastoDyn['TwHt2RDxt'] = False # (deg); Local tower angular (rotational) roll deflection (relative to the undeflected position) of tower gage 2. In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small tower deflections, so that the rotation sequence does not matter.; About the local xt-axis +ElastoDyn['TwHt2RDyt'] = False # (deg); Local tower angular (rotational) pitch deflection (relative to the undeflected position) of tower gage 2. In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small tower deflections, so that the rotation sequence does not matter.; About the local yt-axis +ElastoDyn['TwHt2RDzt'] = False # (deg); Local tower angular (rotational) torsion deflection (relative to the undeflected position) of tower gage 2. This output will always be zero for FAST simulation results. Use it for examining tower torsional deflections of ADAMS simulations run using ADAMS datasets created using the FAST-to-ADAMS preprocessor. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence.; About the local zt-axis +ElastoDyn['TwHt3RDxt'] = False # (deg); Local tower angular (rotational) roll deflection (relative to the undeflected position) of tower gage 3. In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small tower deflections, so that the rotation sequence does not matter.; About the local xt-axis +ElastoDyn['TwHt3RDyt'] = False # (deg); Local tower angular (rotational) pitch deflection (relative to the undeflected position) of tower gage 3. In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small tower deflections, so that the rotation sequence does not matter.; About the local yt-axis +ElastoDyn['TwHt3RDzt'] = False # (deg); Local tower angular (rotational) torsion deflection (relative to the undeflected position) of tower gage 3. This output will always be zero for FAST simulation results. Use it for examining tower torsional deflections of ADAMS simulations run using ADAMS datasets created using the FAST-to-ADAMS preprocessor. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence.; About the local zt-axis +ElastoDyn['TwHt4RDxt'] = False # (deg); Local tower angular (rotational) roll deflection (relative to the undeflected position) of tower gage 4. In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small tower deflections, so that the rotation sequence does not matter.; About the local xt-axis +ElastoDyn['TwHt4RDyt'] = False # (deg); Local tower angular (rotational) pitch deflection (relative to the undeflected position) of tower gage 4. In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small tower deflections, so that the rotation sequence does not matter.; About the local yt-axis +ElastoDyn['TwHt4RDzt'] = False # (deg); Local tower angular (rotational) torsion deflection (relative to the undeflected position) of tower gage 4. This output will always be zero for FAST simulation results. Use it for examining tower torsional deflections of ADAMS simulations run using ADAMS datasets created using the FAST-to-ADAMS preprocessor. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence.; About the local zt-axis +ElastoDyn['TwHt5RDxt'] = False # (deg); Local tower angular (rotational) roll deflection (relative to the undeflected position) of tower gage 5. In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small tower deflections, so that the rotation sequence does not matter.; About the local xt-axis +ElastoDyn['TwHt5RDyt'] = False # (deg); Local tower angular (rotational) pitch deflection (relative to the undeflected position) of tower gage 5. In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small tower deflections, so that the rotation sequence does not matter.; About the local yt-axis +ElastoDyn['TwHt5RDzt'] = False # (deg); Local tower angular (rotational) torsion deflection (relative to the undeflected position) of tower gage 5. This output will always be zero for FAST simulation results. Use it for examining tower torsional deflections of ADAMS simulations run using ADAMS datasets created using the FAST-to-ADAMS preprocessor. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence.; About the local zt-axis +ElastoDyn['TwHt6RDxt'] = False # (deg); Local tower angular (rotational) roll deflection (relative to the undeflected position) of tower gage 6. In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small tower deflections, so that the rotation sequence does not matter.; About the local xt-axis +ElastoDyn['TwHt6RDyt'] = False # (deg); Local tower angular (rotational) pitch deflection (relative to the undeflected position) of tower gage 6. In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small tower deflections, so that the rotation sequence does not matter.; About the local yt-axis +ElastoDyn['TwHt6RDzt'] = False # (deg); Local tower angular (rotational) torsion deflection (relative to the undeflected position) of tower gage 6. This output will always be zero for FAST simulation results. Use it for examining tower torsional deflections of ADAMS simulations run using ADAMS datasets created using the FAST-to-ADAMS preprocessor. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence.; About the local zt-axis +ElastoDyn['TwHt7RDxt'] = False # (deg); Local tower angular (rotational) roll deflection (relative to the undeflected position) of tower gage 7. In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small tower deflections, so that the rotation sequence does not matter.; About the local xt-axis +ElastoDyn['TwHt7RDyt'] = False # (deg); Local tower angular (rotational) pitch deflection (relative to the undeflected position) of tower gage 7. In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small tower deflections, so that the rotation sequence does not matter.; About the local yt-axis +ElastoDyn['TwHt7RDzt'] = False # (deg); Local tower angular (rotational) torsion deflection (relative to the undeflected position) of tower gage 7. This output will always be zero for FAST simulation results. Use it for examining tower torsional deflections of ADAMS simulations run using ADAMS datasets created using the FAST-to-ADAMS preprocessor. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence.; About the local zt-axis +ElastoDyn['TwHt8RDxt'] = False # (deg); Local tower angular (rotational) roll deflection (relative to the undeflected position) of tower gage 8. In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small tower deflections, so that the rotation sequence does not matter.; About the local xt-axis +ElastoDyn['TwHt8RDyt'] = False # (deg); Local tower angular (rotational) pitch deflection (relative to the undeflected position) of tower gage 8. In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small tower deflections, so that the rotation sequence does not matter.; About the local yt-axis +ElastoDyn['TwHt8RDzt'] = False # (deg); Local tower angular (rotational) torsion deflection (relative to the undeflected position) of tower gage 8. This output will always be zero for FAST simulation results. Use it for examining tower torsional deflections of ADAMS simulations run using ADAMS datasets created using the FAST-to-ADAMS preprocessor. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence.; About the local zt-axis +ElastoDyn['TwHt9RDxt'] = False # (deg); Local tower angular (rotational) roll deflection (relative to the undeflected position) of tower gage 9. In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small tower deflections, so that the rotation sequence does not matter.; About the local xt-axis +ElastoDyn['TwHt9RDyt'] = False # (deg); Local tower angular (rotational) pitch deflection (relative to the undeflected position) of tower gage 9. In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small tower deflections, so that the rotation sequence does not matter.; About the local yt-axis +ElastoDyn['TwHt9RDzt'] = False # (deg); Local tower angular (rotational) torsion deflection (relative to the undeflected position) of tower gage 9. This output will always be zero for FAST simulation results. Use it for examining tower torsional deflections of ADAMS simulations run using ADAMS datasets created using the FAST-to-ADAMS preprocessor. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence.; About the local zt-axis +ElastoDyn['TwHt1TPxi'] = False # (m); xi-component of the translational position (relative to the inertia frame) of tower gage 1; Directed along the local xi-axis +ElastoDyn['TwHt1TPyi'] = False # (m); yi-component of the translational position (relative to the inertia frame) of tower gage 1; Directed along the local yi-axis +ElastoDyn['TwHt1TPzi'] = False # (m); zi-component of the translational position (relative to ground level [onshore] or MSL [offshore]) of tower gage 1; Directed along the local zi-axis +ElastoDyn['TwHt2TPxi'] = False # (m); xi-component of the translational position (relative to the inertia frame) of tower gage 2; Directed along the local xi-axis +ElastoDyn['TwHt2TPyi'] = False # (m); yi-component of the translational position (relative to the inertia frame) of tower gage 2; Directed along the local yi-axis +ElastoDyn['TwHt2TPzi'] = False # (m); zi-component of the translational position (relative to ground level [onshore] or MSL [offshore]) of tower gage 2; Directed along the local zi-axis +ElastoDyn['TwHt3TPxi'] = False # (m); xi-component of the translational position (relative to the inertia frame) of tower gage 3; Directed along the local xi-axis +ElastoDyn['TwHt3TPyi'] = False # (m); yi-component of the translational position (relative to the inertia frame) of tower gage 3; Directed along the local yi-axis +ElastoDyn['TwHt3TPzi'] = False # (m); zi-component of the translational position (relative to ground level [onshore] or MSL [offshore]) of tower gage 3; Directed along the local zi-axis +ElastoDyn['TwHt4TPxi'] = False # (m); xi-component of the translational position (relative to the inertia frame) of tower gage 4; Directed along the local xi-axis +ElastoDyn['TwHt4TPyi'] = False # (m); yi-component of the translational position (relative to the inertia frame) of tower gage 4; Directed along the local yi-axis +ElastoDyn['TwHt4TPzi'] = False # (m); zi-component of the translational position (relative to ground level [onshore] or MSL [offshore]) of tower gage 4; Directed along the local zi-axis +ElastoDyn['TwHt5TPxi'] = False # (m); xi-component of the translational position (relative to the inertia frame) of tower gage 5; Directed along the local xi-axis +ElastoDyn['TwHt5TPyi'] = False # (m); yi-component of the translational position (relative to the inertia frame) of tower gage 5; Directed along the local yi-axis +ElastoDyn['TwHt5TPzi'] = False # (m); zi-component of the translational position (relative to ground level [onshore] or MSL [offshore]) of tower gage 5; Directed along the local zi-axis +ElastoDyn['TwHt6TPxi'] = False # (m); xi-component of the translational position (relative to the inertia frame) of tower gage 6; Directed along the local xi-axis +ElastoDyn['TwHt6TPyi'] = False # (m); yi-component of the translational position (relative to the inertia frame) of tower gage 6; Directed along the local yi-axis +ElastoDyn['TwHt6TPzi'] = False # (m); zi-component of the translational position (relative to ground level [onshore] or MSL [offshore]) of tower gage 6; Directed along the local zi-axis +ElastoDyn['TwHt7TPxi'] = False # (m); xi-component of the translational position (relative to the inertia frame) of tower gage 7; Directed along the local xi-axis +ElastoDyn['TwHt7TPyi'] = False # (m); yi-component of the translational position (relative to the inertia frame) of tower gage 7; Directed along the local yi-axis +ElastoDyn['TwHt7TPzi'] = False # (m); zi-component of the translational position (relative to ground level [onshore] or MSL [offshore]) of tower gage 7; Directed along the local zi-axis +ElastoDyn['TwHt8TPxi'] = False # (m); xi-component of the translational position (relative to the inertia frame) of tower gage 8; Directed along the local xi-axis +ElastoDyn['TwHt8TPyi'] = False # (m); yi-component of the translational position (relative to the inertia frame) of tower gage 8; Directed along the local yi-axis +ElastoDyn['TwHt8TPzi'] = False # (m); zi-component of the translational position (relative to ground level [onshore] or MSL [offshore]) of tower gage 8; Directed along the local zi-axis +ElastoDyn['TwHt9TPxi'] = False # (m); xi-component of the translational position (relative to the inertia frame) of tower gage 9; Directed along the local xi-axis +ElastoDyn['TwHt9TPyi'] = False # (m); yi-component of the translational position (relative to the inertia frame) of tower gage 9; Directed along the local yi-axis +ElastoDyn['TwHt9TPzi'] = False # (m); zi-component of the translational position (relative to ground level [onshore] or MSL [offshore]) of tower gage 9; Directed along the local zi-axis +ElastoDyn['TwHt1RPxi'] = False # (deg); xi-component of the rotational position (relative to the inertia frame) of tower gage 1. In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small tower and platform rotational deflections, so that the rotation sequence does not matter.; About the local xi-axis +ElastoDyn['TwHt1RPyi'] = False # (deg); yi-component of the rotational position (relative to the inertia frame) of tower gage 1. In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small tower and platform rotational deflections, so that the rotation sequence does not matter.; About the local yi-axis +ElastoDyn['TwHt1RPzi'] = False # (deg); zi-component of the rotational position (relative to the inertia frame) of tower gage 1. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small tower and platform rotational deflections, so that the rotation sequence does not matter.; About the local zi-axis +ElastoDyn['TwHt2RPxi'] = False # (deg); xi-component of the rotational position (relative to the inertia frame) of tower gage 2. In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small tower and platform rotational deflections, so that the rotation sequence does not matter.; About the local xi-axis +ElastoDyn['TwHt2RPyi'] = False # (deg); yi-component of the rotational position (relative to the inertia frame) of tower gage 2. In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small tower and platform rotational deflections, so that the rotation sequence does not matter.; About the local yi-axis +ElastoDyn['TwHt2RPzi'] = False # (deg); zi-component of the rotational position (relative to the inertia frame) of tower gage 2. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small tower and platform rotational deflections, so that the rotation sequence does not matter.; About the local zi-axis +ElastoDyn['TwHt3RPxi'] = False # (deg); xi-component of the rotational position (relative to the inertia frame) of tower gage 3. In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small tower and platform rotational deflections, so that the rotation sequence does not matter.; About the local xi-axis +ElastoDyn['TwHt3RPyi'] = False # (deg); yi-component of the rotational position (relative to the inertia frame) of tower gage 3. In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small tower and platform rotational deflections, so that the rotation sequence does not matter.; About the local yi-axis +ElastoDyn['TwHt3RPzi'] = False # (deg); zi-component of the rotational position (relative to the inertia frame) of tower gage 3. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small tower and platform rotational deflections, so that the rotation sequence does not matter.; About the local zi-axis +ElastoDyn['TwHt4RPxi'] = False # (deg); xi-component of the rotational position (relative to the inertia frame) of tower gage 4. In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small tower and platform rotational deflections, so that the rotation sequence does not matter.; About the local xi-axis +ElastoDyn['TwHt4RPyi'] = False # (deg); yi-component of the rotational position (relative to the inertia frame) of tower gage 4. In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small tower and platform rotational deflections, so that the rotation sequence does not matter.; About the local yi-axis +ElastoDyn['TwHt4RPzi'] = False # (deg); zi-component of the rotational position (relative to the inertia frame) of tower gage 4. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small tower and platform rotational deflections, so that the rotation sequence does not matter.; About the local zi-axis +ElastoDyn['TwHt5RPxi'] = False # (deg); xi-component of the rotational position (relative to the inertia frame) of tower gage 5. In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small tower and platform rotational deflections, so that the rotation sequence does not matter.; About the local xi-axis +ElastoDyn['TwHt5RPyi'] = False # (deg); yi-component of the rotational position (relative to the inertia frame) of tower gage 5. In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small tower and platform rotational deflections, so that the rotation sequence does not matter.; About the local yi-axis +ElastoDyn['TwHt5RPzi'] = False # (deg); zi-component of the rotational position (relative to the inertia frame) of tower gage 5. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small tower and platform rotational deflections, so that the rotation sequence does not matter.; About the local zi-axis +ElastoDyn['TwHt6RPxi'] = False # (deg); xi-component of the rotational position (relative to the inertia frame) of tower gage 6. In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small tower and platform rotational deflections, so that the rotation sequence does not matter.; About the local xi-axis +ElastoDyn['TwHt6RPyi'] = False # (deg); yi-component of the rotational position (relative to the inertia frame) of tower gage 6. In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small tower and platform rotational deflections, so that the rotation sequence does not matter.; About the local yi-axis +ElastoDyn['TwHt6RPzi'] = False # (deg); zi-component of the rotational position (relative to the inertia frame) of tower gage 6. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small tower and platform rotational deflections, so that the rotation sequence does not matter.; About the local zi-axis +ElastoDyn['TwHt7RPxi'] = False # (deg); xi-component of the rotational position (relative to the inertia frame) of tower gage 7. In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small tower and platform rotational deflections, so that the rotation sequence does not matter.; About the local xi-axis +ElastoDyn['TwHt7RPyi'] = False # (deg); yi-component of the rotational position (relative to the inertia frame) of tower gage 7. In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small tower and platform rotational deflections, so that the rotation sequence does not matter.; About the local yi-axis +ElastoDyn['TwHt7RPzi'] = False # (deg); zi-component of the rotational position (relative to the inertia frame) of tower gage 7. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small tower and platform rotational deflections, so that the rotation sequence does not matter.; About the local zi-axis +ElastoDyn['TwHt8RPxi'] = False # (deg); xi-component of the rotational position (relative to the inertia frame) of tower gage 8. In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small tower and platform rotational deflections, so that the rotation sequence does not matter.; About the local xi-axis +ElastoDyn['TwHt8RPyi'] = False # (deg); yi-component of the rotational position (relative to the inertia frame) of tower gage 8. In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small tower and platform rotational deflections, so that the rotation sequence does not matter.; About the local yi-axis +ElastoDyn['TwHt8RPzi'] = False # (deg); zi-component of the rotational position (relative to the inertia frame) of tower gage 8. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small tower and platform rotational deflections, so that the rotation sequence does not matter.; About the local zi-axis +ElastoDyn['TwHt9RPxi'] = False # (deg); xi-component of the rotational position (relative to the inertia frame) of tower gage 9. In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small tower and platform rotational deflections, so that the rotation sequence does not matter.; About the local xi-axis +ElastoDyn['TwHt9RPyi'] = False # (deg); yi-component of the rotational position (relative to the inertia frame) of tower gage 9. In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small tower and platform rotational deflections, so that the rotation sequence does not matter.; About the local yi-axis +ElastoDyn['TwHt9RPzi'] = False # (deg); zi-component of the rotational position (relative to the inertia frame) of tower gage 9. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small tower and platform rotational deflections, so that the rotation sequence does not matter.; About the local zi-axis + +# Platform Motions +ElastoDyn['PtfmTDxt'] = False # (m); Platform horizontal surge (translational) displacement; Directed along the xt-axis +ElastoDyn['PtfmTDyt'] = False # (m); Platform horizontal sway (translational) displacement; Directed along the yt-axis +ElastoDyn['PtfmTDzt'] = False # (m); Platform vertical heave (translational) displacement; Directed along the zt-axis +ElastoDyn['PtfmTDxi'] = False # (m); Platform horizontal surge (translational) displacement; Directed along the xi-axis +ElastoDyn['PtfmSurge'] = False # (m); Platform horizontal surge (translational) displacement; Directed along the xi-axis +ElastoDyn['PtfmTDyi'] = False # (m); Platform horizontal sway (translational) displacement; Directed along the yi-axis +ElastoDyn['PtfmSway'] = False # (m); Platform horizontal sway (translational) displacement; Directed along the yi-axis +ElastoDyn['PtfmTDzi'] = False # (m); Platform vertical heave (translational) displacement; Directed along the zi-axis +ElastoDyn['PtfmHeave'] = False # (m); Platform vertical heave (translational) displacement; Directed along the zi-axis +ElastoDyn['PtfmTVxt'] = False # (m/s); Platform horizontal surge (translational) velocity; Directed along the xt-axis +ElastoDyn['PtfmTVyt'] = False # (m/s); Platform horizontal sway (translational) velocity; Directed along the yt-axis +ElastoDyn['PtfmTVzt'] = False # (m/s); Platform vertical heave (translational) velocity; Directed along the zt-axis +ElastoDyn['PtfmTVxi'] = False # (m/s); Platform horizontal surge (translational) velocity; Directed along the xi-axis +ElastoDyn['PtfmTVyi'] = False # (m/s); Platform horizontal sway (translational) velocity; Directed along the yi-axis +ElastoDyn['PtfmTVzi'] = False # (m/s); Platform vertical heave (translational) velocity; Directed along the zi-axis +ElastoDyn['PtfmTAxt'] = False # (m/s^2); Platform horizontal surge (translational) acceleration; Directed along the xt-axis +ElastoDyn['PtfmTAyt'] = False # (m/s^2); Platform horizontal sway (translational) acceleration; Directed along the yt-axis +ElastoDyn['PtfmTAzt'] = False # (m/s^2); Platform vertical heave (translational) acceleration; Directed along the zt-axis +ElastoDyn['PtfmTAxi'] = False # (m/s^2); Platform horizontal surge (translational) acceleration; Directed along the xi-axis +ElastoDyn['PtfmTAyi'] = False # (m/s^2); Platform horizontal sway (translational) acceleration; Directed along the yi-axis +ElastoDyn['PtfmTAzi'] = False # (m/s^2); Platform vertical heave (translational) acceleration; Directed along the zi-axis +ElastoDyn['PtfmRDxi'] = False # (deg); Platform roll tilt angular (rotational) displacement. In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small rotational platform displacements, so that the rotation sequence does not matter.; About the xi-axis +ElastoDyn['PtfmRoll'] = False # (deg); Platform roll tilt angular (rotational) displacement. In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small rotational platform displacements, so that the rotation sequence does not matter.; About the xi-axis +ElastoDyn['PtfmRDyi'] = False # (deg); Platform pitch tilt angular (rotational) displacement. In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small rotational platform displacements, so that the rotation sequence does not matter.; About the yi-axis +ElastoDyn['PtfmPitch'] = False # (deg); Platform pitch tilt angular (rotational) displacement. In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small rotational platform displacements, so that the rotation sequence does not matter.; About the yi-axis +ElastoDyn['PtfmRDzi'] = False # (deg); Platform yaw angular (rotational) displacement. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small rotational platform displacements, so that the rotation sequence does not matter.; About the zi-axis +ElastoDyn['PtfmYaw'] = False # (deg); Platform yaw angular (rotational) displacement. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small rotational platform displacements, so that the rotation sequence does not matter.; About the zi-axis +ElastoDyn['PtfmRVxt'] = False # (deg/s); Platform roll tilt angular (rotational) velocity; About the xt-axis +ElastoDyn['PtfmRVyt'] = False # (deg/s); Platform pitch tilt angular (rotational) velocity; About the yt-axis +ElastoDyn['PtfmRVzt'] = False # (deg/s); Platform yaw angular (rotational) velocity; About the zt-axis +ElastoDyn['PtfmRVxi'] = False # (deg/s); Platform roll tilt angular (rotational) velocity; About the xi-axis +ElastoDyn['PtfmRVyi'] = False # (deg/s); Platform pitch tilt angular (rotational) velocity; About the yi-axis +ElastoDyn['PtfmRVzi'] = False # (deg/s); Platform yaw angular (rotational) velocity; About the zi-axis +ElastoDyn['PtfmRAxt'] = False # (deg/s^2); Platform roll tilt angular (rotational) acceleration; About the xt-axis +ElastoDyn['PtfmRAyt'] = False # (deg/s^2); Platform pitch tilt angular (rotational) acceleration; About the yt-axis +ElastoDyn['PtfmRAzt'] = False # (deg/s^2); Platform yaw angular (rotational) acceleration; About the zt-axis +ElastoDyn['PtfmRAxi'] = False # (deg/s^2); Platform roll tilt angular (rotational) acceleration; About the xi-axis +ElastoDyn['PtfmRAyi'] = False # (deg/s^2); Platform pitch tilt angular (rotational) acceleration; About the yi-axis +ElastoDyn['PtfmRAzi'] = False # (deg/s^2); Platform yaw angular (rotational) acceleration; About the zi-axis + +# Blade 1 Root Loads +ElastoDyn['RootFxc1'] = False # (kN); Blade 1 out-of-plane shear force at the blade root; Directed along the xc1-axis +ElastoDyn['RootFyc1'] = False # (kN); Blade 1 in-plane shear force at the blade root; Directed along the yc1-axis +ElastoDyn['RootFzc1'] = False # (kN); Blade 1 axial force at the blade root; Directed along the zc1- and zb1-axes +ElastoDyn['RootFzb1'] = False # (kN); Blade 1 axial force at the blade root; Directed along the zc1- and zb1-axes +ElastoDyn['RootFxb1'] = False # (kN); Blade 1 flapwise shear force at the blade root; Directed along the xb1-axis +ElastoDyn['RootFyb1'] = False # (kN); Blade 1 edgewise shear force at the blade root; Directed along the yb1-axis +ElastoDyn['RootMxc1'] = False # (kN-m); Blade 1 in-plane moment (i.e., the moment caused by in-plane forces) at the blade root; About the xc1-axis +ElastoDyn['RootMIP1'] = False # (kN-m); Blade 1 in-plane moment (i.e., the moment caused by in-plane forces) at the blade root; About the xc1-axis +ElastoDyn['RootMyc1'] = False # (kN-m); Blade 1 out-of-plane moment (i.e., the moment caused by out-of-plane forces) at the blade root; About the yc1-axis +ElastoDyn['RootMOoP1'] = False # (kN-m); Blade 1 out-of-plane moment (i.e., the moment caused by out-of-plane forces) at the blade root; About the yc1-axis +ElastoDyn['RootMzc1'] = False # (kN-m); Blade 1 pitching moment at the blade root; About the zc1- and zb1-axes +ElastoDyn['RootMzb1'] = False # (kN-m); Blade 1 pitching moment at the blade root; About the zc1- and zb1-axes +ElastoDyn['RootMxb1'] = False # (kN-m); Blade 1 edgewise moment (i.e., the moment caused by edgewise forces) at the blade root; About the xb1-axis +ElastoDyn['RootMEdg1'] = False # (kN-m); Blade 1 edgewise moment (i.e., the moment caused by edgewise forces) at the blade root; About the xb1-axis +ElastoDyn['RootMyb1'] = True # (kN-m); Blade 1 flapwise moment (i.e., the moment caused by flapwise forces) at the blade root; About the yb1-axis +ElastoDyn['RootMFlp1'] = False # (kN-m); Blade 1 flapwise moment (i.e., the moment caused by flapwise forces) at the blade root; About the yb1-axis + +# Blade 2 Root Loads +ElastoDyn['RootFxc2'] = False # (kN); Blade 2 out-of-plane shear force at the blade root; Directed along the xc2-axis +ElastoDyn['RootFyc2'] = False # (kN); Blade 2 in-plane shear force at the blade root; Directed along the yc2-axis +ElastoDyn['RootFzc2'] = False # (kN); Blade 2 axial force at the blade root; Directed along the zc2- and zb2-axes +ElastoDyn['RootFzb2'] = False # (kN); Blade 2 axial force at the blade root; Directed along the zc2- and zb2-axes +ElastoDyn['RootFxb2'] = False # (kN); Blade 2 flapwise shear force at the blade root; Directed along the xb2-axis +ElastoDyn['RootFyb2'] = False # (kN); Blade 2 edgewise shear force at the blade root; Directed along the yb2-axis +ElastoDyn['RootMxc2'] = False # (kN-m); Blade 2 in-plane moment (i.e., the moment caused by in-plane forces) at the blade root; About the xc2-axis +ElastoDyn['RootMIP2'] = False # (kN-m); Blade 2 in-plane moment (i.e., the moment caused by in-plane forces) at the blade root; About the xc2-axis +ElastoDyn['RootMyc2'] = False # (kN-m); Blade 2 out-of-plane moment (i.e., the moment caused by out-of-plane forces) at the blade root; About the yc2-axis +ElastoDyn['RootMOoP2'] = False # (kN-m); Blade 2 out-of-plane moment (i.e., the moment caused by out-of-plane forces) at the blade root; About the yc2-axis +ElastoDyn['RootMzc2'] = False # (kN-m); Blade 2 pitching moment at the blade root; About the zc2- and zb2-axes +ElastoDyn['RootMzb2'] = False # (kN-m); Blade 2 pitching moment at the blade root; About the zc2- and zb2-axes +ElastoDyn['RootMxb2'] = False # (kN-m); Blade 2 edgewise moment (i.e., the moment caused by edgewise forces) at the blade root; About the xb2-axis +ElastoDyn['RootMEdg2'] = False # (kN-m); Blade 2 edgewise moment (i.e., the moment caused by edgewise forces) at the blade root; About the xb2-axis +ElastoDyn['RootMyb2'] = True # (kN-m); Blade 2 flapwise moment (i.e., the moment caused by flapwise forces) at the blade root; About the yb2-axis +ElastoDyn['RootMFlp2'] = False # (kN-m); Blade 2 flapwise moment (i.e., the moment caused by flapwise forces) at the blade root; About the yb2-axis + +# Blade 3 Root Loads +ElastoDyn['RootFxc3'] = False # (kN); Blade 3 out-of-plane shear force at the blade root; Directed along the xc3-axis +ElastoDyn['RootFyc3'] = False # (kN); Blade 3 in-plane shear force at the blade root; Directed along the yc3-axis +ElastoDyn['RootFzc3'] = False # (kN); Blade 3 axial force at the blade root; Directed along the zc3- and zb3-axes +ElastoDyn['RootFzb3'] = False # (kN); Blade 3 axial force at the blade root; Directed along the zc3- and zb3-axes +ElastoDyn['RootFxb3'] = False # (kN); Blade 3 flapwise shear force at the blade root; Directed along the xb3-axis +ElastoDyn['RootFyb3'] = False # (kN); Blade 3 edgewise shear force at the blade root; Directed along the yb3-axis +ElastoDyn['RootMxc3'] = False # (kN-m); Blade 3 in-plane moment (i.e., the moment caused by in-plane forces) at the blade root; About the xc3-axis +ElastoDyn['RootMIP3'] = False # (kN-m); Blade 3 in-plane moment (i.e., the moment caused by in-plane forces) at the blade root; About the xc3-axis +ElastoDyn['RootMyc3'] = False # (kN-m); Blade 3 out-of-plane moment (i.e., the moment caused by out-of-plane forces) at the blade root; About the yc3-axis +ElastoDyn['RootMOoP3'] = False # (kN-m); Blade 3 out-of-plane moment (i.e., the moment caused by out-of-plane forces) at the blade root; About the yc3-axis +ElastoDyn['RootMzc3'] = False # (kN-m); Blade 3 pitching moment at the blade root; About the zc3- and zb3-axes +ElastoDyn['RootMzb3'] = False # (kN-m); Blade 3 pitching moment at the blade root; About the zc3- and zb3-axes +ElastoDyn['RootMxb3'] = False # (kN-m); Blade 3 edgewise moment (i.e., the moment caused by edgewise forces) at the blade root; About the xb3-axis +ElastoDyn['RootMEdg3'] = False # (kN-m); Blade 3 edgewise moment (i.e., the moment caused by edgewise forces) at the blade root; About the xb3-axis +ElastoDyn['RootMyb3'] = True # (kN-m); Blade 3 flapwise moment (i.e., the moment caused by flapwise forces) at the blade root; About the yb3-axis +ElastoDyn['RootMFlp3'] = False # (kN-m); Blade 3 flapwise moment (i.e., the moment caused by flapwise forces) at the blade root; About the yb3-axis + +# Blade 1 Local Span Loads +ElastoDyn['Spn1MLxb1'] = False # (kN-m); Blade 1 local edgewise moment at span station 1; About the local xb1-axis +ElastoDyn['Spn1MLyb1'] = False # (kN-m); Blade 1 local flapwise moment at span station 1; About the local yb1-axis +ElastoDyn['Spn1MLzb1'] = False # (kN-m); Blade 1 local pitching moment at span station 1; About the local zb1-axis +ElastoDyn['Spn2MLxb1'] = False # (kN-m); Blade 1 local edgewise moment at span station 2; About the local xb1-axis +ElastoDyn['Spn2MLyb1'] = False # (kN-m); Blade 1 local flapwise moment at span station 2; About the local yb1-axis +ElastoDyn['Spn2MLzb1'] = False # (kN-m); Blade 1 local pitching moment at span station 2; About the local zb1-axis +ElastoDyn['Spn3MLxb1'] = False # (kN-m); Blade 1 local edgewise moment at span station 3; About the local xb1-axis +ElastoDyn['Spn3MLyb1'] = False # (kN-m); Blade 1 local flapwise moment at span station 3; About the local yb1-axis +ElastoDyn['Spn3MLzb1'] = False # (kN-m); Blade 1 local pitching moment at span station 3; About the local zb1-axis +ElastoDyn['Spn4MLxb1'] = False # (kN-m); Blade 1 local edgewise moment at span station 4; About the local xb1-axis +ElastoDyn['Spn4MLyb1'] = False # (kN-m); Blade 1 local flapwise moment at span station 4; About the local yb1-axis +ElastoDyn['Spn4MLzb1'] = False # (kN-m); Blade 1 local pitching moment at span station 4; About the local zb1-axis +ElastoDyn['Spn5MLxb1'] = False # (kN-m); Blade 1 local edgewise moment at span station 5; About the local xb1-axis +ElastoDyn['Spn5MLyb1'] = False # (kN-m); Blade 1 local flapwise moment at span station 5; About the local yb1-axis +ElastoDyn['Spn5MLzb1'] = False # (kN-m); Blade 1 local pitching moment at span station 5; About the local zb1-axis +ElastoDyn['Spn6MLxb1'] = False # (kN-m); Blade 1 local edgewise moment at span station 6; About the local xb1-axis +ElastoDyn['Spn6MLyb1'] = False # (kN-m); Blade 1 local flapwise moment at span station 6; About the local yb1-axis +ElastoDyn['Spn6MLzb1'] = False # (kN-m); Blade 1 local pitching moment at span station 6; About the local zb1-axis +ElastoDyn['Spn7MLxb1'] = False # (kN-m); Blade 1 local edgewise moment at span station 7; About the local xb1-axis +ElastoDyn['Spn7MLyb1'] = False # (kN-m); Blade 1 local flapwise moment at span station 7; About the local yb1-axis +ElastoDyn['Spn7MLzb1'] = False # (kN-m); Blade 1 local pitching moment at span station 7; About the local zb1-axis +ElastoDyn['Spn8MLxb1'] = False # (kN-m); Blade 1 local edgewise moment at span station 8; About the local xb1-axis +ElastoDyn['Spn8MLyb1'] = False # (kN-m); Blade 1 local flapwise moment at span station 8; About the local yb1-axis +ElastoDyn['Spn8MLzb1'] = False # (kN-m); Blade 1 local pitching moment at span station 8; About the local zb1-axis +ElastoDyn['Spn9MLxb1'] = False # (kN-m); Blade 1 local edgewise moment at span station 9; About the local xb1-axis +ElastoDyn['Spn9MLyb1'] = False # (kN-m); Blade 1 local flapwise moment at span station 9; About the local yb1-axis +ElastoDyn['Spn9MLzb1'] = False # (kN-m); Blade 1 local pitching moment at span station 9; About the local zb1-axis +ElastoDyn['Spn1FLxb1'] = False # (kN); Blade 1 local flapwise shear force at span station 1; Directed along the local xb1-axis +ElastoDyn['Spn1FLyb1'] = False # (kN); Blade 1 local edgewise shear force at span station 1; Directed along the local yb1-axis +ElastoDyn['Spn1FLzb1'] = False # (kN); Blade 1 local axial force at span station 1; Directed along the local zb1-axis +ElastoDyn['Spn2FLxb1'] = False # (kN); Blade 1 local flapwise shear force at span station 2; Directed along the local xb1-axis +ElastoDyn['Spn2FLyb1'] = False # (kN); Blade 1 local edgewise shear force at span station 2; Directed along the local yb1-axis +ElastoDyn['Spn2FLzb1'] = False # (kN); Blade 1 local axial force at span station 2; Directed along the local zb1-axis +ElastoDyn['Spn3FLxb1'] = False # (kN); Blade 1 local flapwise shear force at span station 3; Directed along the local xb1-axis +ElastoDyn['Spn3FLyb1'] = False # (kN); Blade 1 local edgewise shear force at span station 3; Directed along the local yb1-axis +ElastoDyn['Spn3FLzb1'] = False # (kN); Blade 1 local axial force at span station 3; Directed along the local zb1-axis +ElastoDyn['Spn4FLxb1'] = False # (kN); Blade 1 local flapwise shear force at span station 4; Directed along the local xb1-axis +ElastoDyn['Spn4FLyb1'] = False # (kN); Blade 1 local edgewise shear force at span station 4; Directed along the local yb1-axis +ElastoDyn['Spn4FLzb1'] = False # (kN); Blade 1 local axial force at span station 4; Directed along the local zb1-axis +ElastoDyn['Spn5FLxb1'] = False # (kN); Blade 1 local flapwise shear force at span station 5; Directed along the local xb1-axis +ElastoDyn['Spn5FLyb1'] = False # (kN); Blade 1 local edgewise shear force at span station 5; Directed along the local yb1-axis +ElastoDyn['Spn5FLzb1'] = False # (kN); Blade 1 local axial force at span station 5; Directed along the local zb1-axis +ElastoDyn['Spn6FLxb1'] = False # (kN); Blade 1 local flapwise shear force at span station 6; Directed along the local xb1-axis +ElastoDyn['Spn6FLyb1'] = False # (kN); Blade 1 local edgewise shear force at span station 6; Directed along the local yb1-axis +ElastoDyn['Spn6FLzb1'] = False # (kN); Blade 1 local axial force at span station 6; Directed along the local zb1-axis +ElastoDyn['Spn7FLxb1'] = False # (kN); Blade 1 local flapwise shear force at span station 7; Directed along the local xb1-axis +ElastoDyn['Spn7FLyb1'] = False # (kN); Blade 1 local edgewise shear force at span station 7; Directed along the local yb1-axis +ElastoDyn['Spn7FLzb1'] = False # (kN); Blade 1 local axial force at span station 7; Directed along the local zb1-axis +ElastoDyn['Spn8FLxb1'] = False # (kN); Blade 1 local flapwise shear force at span station 8; Directed along the local xb1-axis +ElastoDyn['Spn8FLyb1'] = False # (kN); Blade 1 local edgewise shear force at span station 8; Directed along the local yb1-axis +ElastoDyn['Spn8FLzb1'] = False # (kN); Blade 1 local axial force at span station 8; Directed along the local zb1-axis +ElastoDyn['Spn9FLxb1'] = False # (kN); Blade 1 local flapwise shear force at span station 9; Directed along the local xb1-axis +ElastoDyn['Spn9FLyb1'] = False # (kN); Blade 1 local edgewise shear force at span station 9; Directed along the local yb1-axis +ElastoDyn['Spn9FLzb1'] = False # (kN); Blade 1 local axial force at span station 9; Directed along the local zb1-axis + +# Blade 2 Local Span Loads +ElastoDyn['Spn1MLxb2'] = False # (kN-m); Blade 2 local edgewise moment at span station 1; About the local xb2-axis +ElastoDyn['Spn1MLyb2'] = False # (kN-m); Blade 2 local flapwise moment at span station 1; About the local yb2-axis +ElastoDyn['Spn1MLzb2'] = False # (kN-m); Blade 2 local pitching moment at span station 1; About the local zb2-axis +ElastoDyn['Spn2MLxb2'] = False # (kN-m); Blade 2 local edgewise moment at span station 2; About the local xb2-axis +ElastoDyn['Spn2MLyb2'] = False # (kN-m); Blade 2 local flapwise moment at span station 2; About the local yb2-axis +ElastoDyn['Spn2MLzb2'] = False # (kN-m); Blade 2 local pitching moment at span station 2; About the local zb2-axis +ElastoDyn['Spn3MLxb2'] = False # (kN-m); Blade 2 local edgewise moment at span station 3; About the local xb2-axis +ElastoDyn['Spn3MLyb2'] = False # (kN-m); Blade 2 local flapwise moment at span station 3; About the local yb2-axis +ElastoDyn['Spn3MLzb2'] = False # (kN-m); Blade 2 local pitching moment at span station 3; About the local zb2-axis +ElastoDyn['Spn4MLxb2'] = False # (kN-m); Blade 2 local edgewise moment at span station 4; About the local xb2-axis +ElastoDyn['Spn4MLyb2'] = False # (kN-m); Blade 2 local flapwise moment at span station 4; About the local yb2-axis +ElastoDyn['Spn4MLzb2'] = False # (kN-m); Blade 2 local pitching moment at span station 4; About the local zb2-axis +ElastoDyn['Spn5MLxb2'] = False # (kN-m); Blade 2 local edgewise moment at span station 5; About the local xb2-axis +ElastoDyn['Spn5MLyb2'] = False # (kN-m); Blade 2 local flapwise moment at span station 5; About the local yb2-axis +ElastoDyn['Spn5MLzb2'] = False # (kN-m); Blade 2 local pitching moment at span station 5; About the local zb2-axis +ElastoDyn['Spn6MLxb2'] = False # (kN-m); Blade 2 local edgewise moment at span station 6; About the local xb2-axis +ElastoDyn['Spn6MLyb2'] = False # (kN-m); Blade 2 local flapwise moment at span station 6; About the local yb2-axis +ElastoDyn['Spn6MLzb2'] = False # (kN-m); Blade 2 local pitching moment at span station 6; About the local zb2-axis +ElastoDyn['Spn7MLxb2'] = False # (kN-m); Blade 2 local edgewise moment at span station 7; About the local xb2-axis +ElastoDyn['Spn7MLyb2'] = False # (kN-m); Blade 2 local flapwise moment at span station 7; About the local yb2-axis +ElastoDyn['Spn7MLzb2'] = False # (kN-m); Blade 2 local pitching moment at span station 7; About the local zb2-axis +ElastoDyn['Spn8MLxb2'] = False # (kN-m); Blade 2 local edgewise moment at span station 8; About the local xb2-axis +ElastoDyn['Spn8MLyb2'] = False # (kN-m); Blade 2 local flapwise moment at span station 8; About the local yb2-axis +ElastoDyn['Spn8MLzb2'] = False # (kN-m); Blade 2 local pitching moment at span station 8; About the local zb2-axis +ElastoDyn['Spn9MLxb2'] = False # (kN-m); Blade 2 local edgewise moment at span station 9; About the local xb2-axis +ElastoDyn['Spn9MLyb2'] = False # (kN-m); Blade 2 local flapwise moment at span station 9; About the local yb2-axis +ElastoDyn['Spn9MLzb2'] = False # (kN-m); Blade 2 local pitching moment at span station 9; About the local zb2-axis +ElastoDyn['Spn1FLxb2'] = False # (kN); Blade 2 local flapwise shear force at span station 1; Directed along the local xb2-axis +ElastoDyn['Spn1FLyb2'] = False # (kN); Blade 2 local edgewise shear force at span station 1; Directed along the local yb2-axis +ElastoDyn['Spn1FLzb2'] = False # (kN); Blade 2 local axial force at span station 1; Directed along the local zb2-axis +ElastoDyn['Spn2FLxb2'] = False # (kN); Blade 2 local flapwise shear force at span station 2; Directed along the local xb2-axis +ElastoDyn['Spn2FLyb2'] = False # (kN); Blade 2 local edgewise shear force at span station 2; Directed along the local yb2-axis +ElastoDyn['Spn2FLzb2'] = False # (kN); Blade 2 local axial force at span station 2; Directed along the local zb2-axis +ElastoDyn['Spn3FLxb2'] = False # (kN); Blade 2 local flapwise shear force at span station 3; Directed along the local xb2-axis +ElastoDyn['Spn3FLyb2'] = False # (kN); Blade 2 local edgewise shear force at span station 3; Directed along the local yb2-axis +ElastoDyn['Spn3FLzb2'] = False # (kN); Blade 2 local axial force at span station 3; Directed along the local zb2-axis +ElastoDyn['Spn4FLxb2'] = False # (kN); Blade 2 local flapwise shear force at span station 4; Directed along the local xb2-axis +ElastoDyn['Spn4FLyb2'] = False # (kN); Blade 2 local edgewise shear force at span station 4; Directed along the local yb2-axis +ElastoDyn['Spn4FLzb2'] = False # (kN); Blade 2 local axial force at span station 4; Directed along the local zb2-axis +ElastoDyn['Spn5FLxb2'] = False # (kN); Blade 2 local flapwise shear force at span station 5; Directed along the local xb2-axis +ElastoDyn['Spn5FLyb2'] = False # (kN); Blade 2 local edgewise shear force at span station 5; Directed along the local yb2-axis +ElastoDyn['Spn5FLzb2'] = False # (kN); Blade 2 local axial force at span station 5; Directed along the local zb2-axis +ElastoDyn['Spn6FLxb2'] = False # (kN); Blade 2 local flapwise shear force at span station 6; Directed along the local xb2-axis +ElastoDyn['Spn6FLyb2'] = False # (kN); Blade 2 local edgewise shear force at span station 6; Directed along the local yb2-axis +ElastoDyn['Spn6FLzb2'] = False # (kN); Blade 2 local axial force at span station 6; Directed along the local zb2-axis +ElastoDyn['Spn7FLxb2'] = False # (kN); Blade 2 local flapwise shear force at span station 7; Directed along the local xb2-axis +ElastoDyn['Spn7FLyb2'] = False # (kN); Blade 2 local edgewise shear force at span station 7; Directed along the local yb2-axis +ElastoDyn['Spn7FLzb2'] = False # (kN); Blade 2 local axial force at span station 7; Directed along the local zb2-axis +ElastoDyn['Spn8FLxb2'] = False # (kN); Blade 2 local flapwise shear force at span station 8; Directed along the local xb2-axis +ElastoDyn['Spn8FLyb2'] = False # (kN); Blade 2 local edgewise shear force at span station 8; Directed along the local yb2-axis +ElastoDyn['Spn8FLzb2'] = False # (kN); Blade 2 local axial force at span station 8; Directed along the local zb2-axis +ElastoDyn['Spn9FLxb2'] = False # (kN); Blade 2 local flapwise shear force at span station 9; Directed along the local xb2-axis +ElastoDyn['Spn9FLyb2'] = False # (kN); Blade 2 local edgewise shear force at span station 9; Directed along the local yb2-axis +ElastoDyn['Spn9FLzb2'] = False # (kN); Blade 2 local axial force at span station 9; Directed along the local zb2-axis + +# Blade 3 Local Span Loads +ElastoDyn['Spn1MLxb3'] = False # (kN-m); Blade 3 local edgewise moment at span station 1; About the local xb3-axis +ElastoDyn['Spn1MLyb3'] = False # (kN-m); Blade 3 local flapwise moment at span station 1; About the local yb3-axis +ElastoDyn['Spn1MLzb3'] = False # (kN-m); Blade 3 local pitching moment at span station 1; About the local zb3-axis +ElastoDyn['Spn2MLxb3'] = False # (kN-m); Blade 3 local edgewise moment at span station 2; About the local xb3-axis +ElastoDyn['Spn2MLyb3'] = False # (kN-m); Blade 3 local flapwise moment at span station 2; About the local yb3-axis +ElastoDyn['Spn2MLzb3'] = False # (kN-m); Blade 3 local pitching moment at span station 2; About the local zb3-axis +ElastoDyn['Spn3MLxb3'] = False # (kN-m); Blade 3 local edgewise moment at span station 3; About the local xb3-axis +ElastoDyn['Spn3MLyb3'] = False # (kN-m); Blade 3 local flapwise moment at span station 3; About the local yb3-axis +ElastoDyn['Spn3MLzb3'] = False # (kN-m); Blade 3 local pitching moment at span station 3; About the local zb3-axis +ElastoDyn['Spn4MLxb3'] = False # (kN-m); Blade 3 local edgewise moment at span station 4; About the local xb3-axis +ElastoDyn['Spn4MLyb3'] = False # (kN-m); Blade 3 local flapwise moment at span station 4; About the local yb3-axis +ElastoDyn['Spn4MLzb3'] = False # (kN-m); Blade 3 local pitching moment at span station 4; About the local zb3-axis +ElastoDyn['Spn5MLxb3'] = False # (kN-m); Blade 3 local edgewise moment at span station 5; About the local xb3-axis +ElastoDyn['Spn5MLyb3'] = False # (kN-m); Blade 3 local flapwise moment at span station 5; About the local yb3-axis +ElastoDyn['Spn5MLzb3'] = False # (kN-m); Blade 3 local pitching moment at span station 5; About the local zb3-axis +ElastoDyn['Spn6MLxb3'] = False # (kN-m); Blade 3 local edgewise moment at span station 6; About the local xb3-axis +ElastoDyn['Spn6MLyb3'] = False # (kN-m); Blade 3 local flapwise moment at span station 6; About the local yb3-axis +ElastoDyn['Spn6MLzb3'] = False # (kN-m); Blade 3 local pitching moment at span station 6; About the local zb3-axis +ElastoDyn['Spn7MLxb3'] = False # (kN-m); Blade 3 local edgewise moment at span station 7; About the local xb3-axis +ElastoDyn['Spn7MLyb3'] = False # (kN-m); Blade 3 local flapwise moment at span station 7; About the local yb3-axis +ElastoDyn['Spn7MLzb3'] = False # (kN-m); Blade 3 local pitching moment at span station 7; About the local zb3-axis +ElastoDyn['Spn8MLxb3'] = False # (kN-m); Blade 3 local edgewise moment at span station 8; About the local xb3-axis +ElastoDyn['Spn8MLyb3'] = False # (kN-m); Blade 3 local flapwise moment at span station 8; About the local yb3-axis +ElastoDyn['Spn8MLzb3'] = False # (kN-m); Blade 3 local pitching moment at span station 8; About the local zb3-axis +ElastoDyn['Spn9MLxb3'] = False # (kN-m); Blade 3 local edgewise moment at span station 9; About the local xb3-axis +ElastoDyn['Spn9MLyb3'] = False # (kN-m); Blade 3 local flapwise moment at span station 9; About the local yb3-axis +ElastoDyn['Spn9MLzb3'] = False # (kN-m); Blade 3 local pitching moment at span station 9; About the local zb3-axis +ElastoDyn['Spn1FLxb3'] = False # (kN); Blade 3 local flapwise shear force at span station 1; Directed along the local xb3-axis +ElastoDyn['Spn1FLyb3'] = False # (kN); Blade 3 local edgewise shear force at span station 1; Directed along the local yb3-axis +ElastoDyn['Spn1FLzb3'] = False # (kN); Blade 3 local axial force at span station 1; Directed along the local zb3-axis +ElastoDyn['Spn2FLxb3'] = False # (kN); Blade 3 local flapwise shear force at span station 2; Directed along the local xb3-axis +ElastoDyn['Spn2FLyb3'] = False # (kN); Blade 3 local edgewise shear force at span station 2; Directed along the local yb3-axis +ElastoDyn['Spn2FLzb3'] = False # (kN); Blade 3 local axial force at span station 2; Directed along the local zb3-axis +ElastoDyn['Spn3FLxb3'] = False # (kN); Blade 3 local flapwise shear force at span station 3; Directed along the local xb3-axis +ElastoDyn['Spn3FLyb3'] = False # (kN); Blade 3 local edgewise shear force at span station 3; Directed along the local yb3-axis +ElastoDyn['Spn3FLzb3'] = False # (kN); Blade 3 local axial force at span station 3; Directed along the local zb3-axis +ElastoDyn['Spn4FLxb3'] = False # (kN); Blade 3 local flapwise shear force at span station 4; Directed along the local xb3-axis +ElastoDyn['Spn4FLyb3'] = False # (kN); Blade 3 local edgewise shear force at span station 4; Directed along the local yb3-axis +ElastoDyn['Spn4FLzb3'] = False # (kN); Blade 3 local axial force at span station 4; Directed along the local zb3-axis +ElastoDyn['Spn5FLxb3'] = False # (kN); Blade 3 local flapwise shear force at span station 5; Directed along the local xb3-axis +ElastoDyn['Spn5FLyb3'] = False # (kN); Blade 3 local edgewise shear force at span station 5; Directed along the local yb3-axis +ElastoDyn['Spn5FLzb3'] = False # (kN); Blade 3 local axial force at span station 5; Directed along the local zb3-axis +ElastoDyn['Spn6FLxb3'] = False # (kN); Blade 3 local flapwise shear force at span station 6; Directed along the local xb3-axis +ElastoDyn['Spn6FLyb3'] = False # (kN); Blade 3 local edgewise shear force at span station 6; Directed along the local yb3-axis +ElastoDyn['Spn6FLzb3'] = False # (kN); Blade 3 local axial force at span station 6; Directed along the local zb3-axis +ElastoDyn['Spn7FLxb3'] = False # (kN); Blade 3 local flapwise shear force at span station 7; Directed along the local xb3-axis +ElastoDyn['Spn7FLyb3'] = False # (kN); Blade 3 local edgewise shear force at span station 7; Directed along the local yb3-axis +ElastoDyn['Spn7FLzb3'] = False # (kN); Blade 3 local axial force at span station 7; Directed along the local zb3-axis +ElastoDyn['Spn8FLxb3'] = False # (kN); Blade 3 local flapwise shear force at span station 8; Directed along the local xb3-axis +ElastoDyn['Spn8FLyb3'] = False # (kN); Blade 3 local edgewise shear force at span station 8; Directed along the local yb3-axis +ElastoDyn['Spn8FLzb3'] = False # (kN); Blade 3 local axial force at span station 8; Directed along the local zb3-axis +ElastoDyn['Spn9FLxb3'] = False # (kN); Blade 3 local flapwise shear force at span station 9; Directed along the local xb3-axis +ElastoDyn['Spn9FLyb3'] = False # (kN); Blade 3 local edgewise shear force at span station 9; Directed along the local yb3-axis +ElastoDyn['Spn9FLzb3'] = False # (kN); Blade 3 local axial force at span station 9; Directed along the local zb3-axis + +# Hub and Rotor Loads +ElastoDyn['LSShftFxa'] = False # (kN); Low-speed shaft thrust force (this is constant along the shaft and is equivalent to the rotor thrust force); Directed along the xa- and xs-axes +ElastoDyn['LSShftFxs'] = False # (kN); Low-speed shaft thrust force (this is constant along the shaft and is equivalent to the rotor thrust force); Directed along the xa- and xs-axes +ElastoDyn['LSSGagFxa'] = False # (kN); Low-speed shaft thrust force (this is constant along the shaft and is equivalent to the rotor thrust force); Directed along the xa- and xs-axes +ElastoDyn['LSSGagFxs'] = False # (kN); Low-speed shaft thrust force (this is constant along the shaft and is equivalent to the rotor thrust force); Directed along the xa- and xs-axes +ElastoDyn['RotThrust'] = False # (kN); Low-speed shaft thrust force (this is constant along the shaft and is equivalent to the rotor thrust force); Directed along the xa- and xs-axes +ElastoDyn['LSShftFya'] = False # (kN); Rotating low-speed shaft shear force (this is constant along the shaft); Directed along the ya-axis +ElastoDyn['LSSGagFya'] = False # (kN); Rotating low-speed shaft shear force (this is constant along the shaft); Directed along the ya-axis +ElastoDyn['LSShftFza'] = False # (kN); Rotating low-speed shaft shear force (this is constant along the shaft); Directed along the za-axis +ElastoDyn['LSSGagFza'] = False # (kN); Rotating low-speed shaft shear force (this is constant along the shaft); Directed along the za-axis +ElastoDyn['LSShftFys'] = True # (kN); Nonrotating low-speed shaft shear force (this is constant along the shaft); Directed along the ys-axis +ElastoDyn['LSSGagFys'] = False # (kN); Nonrotating low-speed shaft shear force (this is constant along the shaft); Directed along the ys-axis +ElastoDyn['LSShftFzs'] = True # (kN); Nonrotating low-speed shaft shear force (this is constant along the shaft); Directed along the zs-axis +ElastoDyn['LSSGagFzs'] = False # (kN); Nonrotating low-speed shaft shear force (this is constant along the shaft); Directed along the zs-axis +ElastoDyn['LSShftMxa'] = False # (kN-m); Low-speed shaft torque (this is constant along the shaft and is equivalent to the rotor torque); About the xa- and xs-axes +ElastoDyn['LSShftMxs'] = False # (kN-m); Low-speed shaft torque (this is constant along the shaft and is equivalent to the rotor torque); About the xa- and xs-axes +ElastoDyn['LSSGagMxa'] = False # (kN-m); Low-speed shaft torque (this is constant along the shaft and is equivalent to the rotor torque); About the xa- and xs-axes +ElastoDyn['LSSGagMxs'] = False # (kN-m); Low-speed shaft torque (this is constant along the shaft and is equivalent to the rotor torque); About the xa- and xs-axes +ElastoDyn['RotTorq'] = False # (kN-m); Low-speed shaft torque (this is constant along the shaft and is equivalent to the rotor torque); About the xa- and xs-axes +ElastoDyn['LSShftTq'] = False # (kN-m); Low-speed shaft torque (this is constant along the shaft and is equivalent to the rotor torque); About the xa- and xs-axes +ElastoDyn['LSSTipMya'] = False # (kN-m); Rotating low-speed shaft bending moment at the shaft tip (teeter pin for 2-blader, apex of rotation for 3-blader); About the ya-axis +ElastoDyn['LSSTipMza'] = False # (kN-m); Rotating low-speed shaft bending moment at the shaft tip (teeter pin for 2-blader, apex of rotation for 3-blader); About the za-axis +ElastoDyn['LSSTipMys'] = True # (kN-m); Nonrotating low-speed shaft bending moment at the shaft tip (teeter pin for 2-blader, apex of rotation for 3-blader); About the ys-axis +ElastoDyn['LSSTipMzs'] = True # (kN-m); Nonrotating low-speed shaft bending moment at the shaft tip (teeter pin for 2-blader, apex of rotation for 3-blader); About the zs-axis +ElastoDyn['RotPwr'] = False # (kW); Rotor power (this is equivalent to the low-speed shaft power); N/A +ElastoDyn['LSShftPwr'] = False # (kW); Rotor power (this is equivalent to the low-speed shaft power); N/A + +# Shaft Strain Gage Loads +ElastoDyn['LSSGagMya'] = False # (kN-m); Rotating low-speed shaft bending moment at the shaft's strain gage (shaft strain gage located by input ShftGagL); About the ya-axis +ElastoDyn['LSSGagMza'] = False # (kN-m); Rotating low-speed shaft bending moment at the shaft's strain gage (shaft strain gage located by input ShftGagL); About the za-axis +ElastoDyn['LSSGagMys'] = False # (kN-m); Nonrotating low-speed shaft bending moment at the shaft's strain gage (shaft strain gage located by input ShftGagL); About the ys-axis +ElastoDyn['LSSGagMzs'] = False # (kN-m); Nonrotating low-speed shaft bending moment at the shaft's strain gage (shaft strain gage located by input ShftGagL); About the zs-axis + +# High-Speed Shaft Loads +ElastoDyn['HSShftTq'] = False # (kN-m); High-speed shaft torque (this is constant along the shaft); Same sign as LSShftTq / RotTorq / LSShftMxa / LSShftMxs / LSSGagMxa / LSSGagMxs +ElastoDyn['HSSBrTq'] = False # (kN-m); High-speed shaft brake torque (i.e., the actual moment applied to the high-speed shaft by the brake); Always positive (indicating dissipation of power) +ElastoDyn['HSShftPwr'] = False # (kW); High-speed shaft power; Same sign as HSShftTq + +# Rotor-Furl Bearing Loads +ElastoDyn['RFrlBrM'] = False # (kN-m); Rotor-furl bearing moment; About the rotor-furl axis + +# Tail-Furl Bearing Loads +ElastoDyn['TFrlBrM'] = False # (kN-m); Tail-furl bearing moment; About the tail-furl axis + +# Tower-Top / Yaw Bearing Loads +ElastoDyn['YawBrFxn'] = False # (kN); Rotating (with nacelle) tower-top / yaw bearing shear force; Directed along the xn-axis +ElastoDyn['YawBrFyn'] = False # (kN); Rotating (with nacelle) tower-top / yaw bearing shear force; Directed along the yn-axis +ElastoDyn['YawBrFzn'] = False # (kN); Tower-top / yaw bearing axial force; Directed along the zn- and zp-axes +ElastoDyn['YawBrFzp'] = False # (kN); Tower-top / yaw bearing axial force; Directed along the zn- and zp-axes +ElastoDyn['YawBrFxp'] = False # (kN); Tower-top / yaw bearing fore-aft (nonrotating) shear force; Directed along the xp-axis +ElastoDyn['YawBrFyp'] = False # (kN); Tower-top / yaw bearing side-to-side (nonrotating) shear force; Directed along the yp-axis +ElastoDyn['YawBrMxn'] = False # (kN-m); Rotating (with nacelle) tower-top / yaw bearing roll moment; About the xn-axis +ElastoDyn['YawBrMyn'] = False # (kN-m); Rotating (with nacelle) tower-top / yaw bearing pitch moment; About the yn-axis +ElastoDyn['YawBrMzn'] = False # (kN-m); Tower-top / yaw bearing yaw moment; About the zn- and zp-axes +ElastoDyn['YawBrMzp'] = False # (kN-m); Tower-top / yaw bearing yaw moment; About the zn- and zp-axes +ElastoDyn['YawBrMxp'] = False # (kN-m); Nonrotating tower-top / yaw bearing roll moment; About the xp-axis +ElastoDyn['YawBrMyp'] = False # (kN-m); Nonrotating tower-top / yaw bearing pitch moment; About the yp-axis + +# Tower Base Loads +ElastoDyn['TwrBsFxt'] = False # (kN); Tower base fore-aft shear force; Directed along the xt-axis +ElastoDyn['TwrBsFyt'] = False # (kN); Tower base side-to-side shear force; Directed along the yt-axis +ElastoDyn['TwrBsFzt'] = False # (kN); Tower base axial force; Directed along the zt-axis +ElastoDyn['TwrBsMxt'] = False # (kN-m); Tower base roll (or side-to-side) moment (i.e., the moment caused by side-to-side forces); About the xt-axis +ElastoDyn['TwrBsMyt'] = True # (kN-m); Tower base pitching (or fore-aft) moment (i.e., the moment caused by fore-aft forces); About the yt-axis +ElastoDyn['TwrBsMzt'] = False # (kN-m); Tower base yaw (or torsional) moment; About the zt-axis + +# Local Tower Loads +ElastoDyn['TwHt1MLxt'] = False # (kN-m); Local tower roll (or side-to-side) moment of tower gage 1; About the local xt-axis +ElastoDyn['TwHt1MLyt'] = False # (kN-m); Local tower pitching (or fore-aft) moment of tower gage 1; About the local yt-axis +ElastoDyn['TwHt1MLzt'] = False # (kN-m); Local tower yaw (or torsional) moment of tower gage 1; About the local zt-axis +ElastoDyn['TwHt2MLxt'] = False # (kN-m); Local tower roll (or side-to-side) moment of tower gage 2; About the local xt-axis +ElastoDyn['TwHt2MLyt'] = False # (kN-m); Local tower pitching (or fore-aft) moment of tower gage 2; About the local yt-axis +ElastoDyn['TwHt2MLzt'] = False # (kN-m); Local tower yaw (or torsional) moment of tower gage 2; About the local zt-axis +ElastoDyn['TwHt3MLxt'] = False # (kN-m); Local tower roll (or side-to-side) moment of tower gage 3; About the local xt-axis +ElastoDyn['TwHt3MLyt'] = False # (kN-m); Local tower pitching (or fore-aft) moment of tower gage 3; About the local yt-axis +ElastoDyn['TwHt3MLzt'] = False # (kN-m); Local tower yaw (or torsional) moment of tower gage 3; About the local zt-axis +ElastoDyn['TwHt4MLxt'] = False # (kN-m); Local tower roll (or side-to-side) moment of tower gage 4; About the local xt-axis +ElastoDyn['TwHt4MLyt'] = False # (kN-m); Local tower pitching (or fore-aft) moment of tower gage 4; About the local yt-axis +ElastoDyn['TwHt4MLzt'] = False # (kN-m); Local tower yaw (or torsional) moment of tower gage 4; About the local zt-axis +ElastoDyn['TwHt5MLxt'] = False # (kN-m); Local tower roll (or side-to-side) moment of tower gage 5; About the local xt-axis +ElastoDyn['TwHt5MLyt'] = False # (kN-m); Local tower pitching (or fore-aft) moment of tower gage 5; About the local yt-axis +ElastoDyn['TwHt5MLzt'] = False # (kN-m); Local tower yaw (or torsional) moment of tower gage 5; About the local zt-axis +ElastoDyn['TwHt6MLxt'] = False # (kN-m); Local tower roll (or side-to-side) moment of tower gage 6; About the local xt-axis +ElastoDyn['TwHt6MLyt'] = False # (kN-m); Local tower pitching (or fore-aft) moment of tower gage 6; About the local yt-axis +ElastoDyn['TwHt6MLzt'] = False # (kN-m); Local tower yaw (or torsional) moment of tower gage 6; About the local zt-axis +ElastoDyn['TwHt7MLxt'] = False # (kN-m); Local tower roll (or side-to-side) moment of tower gage 7; About the local xt-axis +ElastoDyn['TwHt7MLyt'] = False # (kN-m); Local tower pitching (or fore-aft) moment of tower gage 7; About the local yt-axis +ElastoDyn['TwHt7MLzt'] = False # (kN-m); Local tower yaw (or torsional) moment of tower gage 7; About the local zt-axis +ElastoDyn['TwHt8MLxt'] = False # (kN-m); Local tower roll (or side-to-side) moment of tower gage 8; About the local xt-axis +ElastoDyn['TwHt8MLyt'] = False # (kN-m); Local tower pitching (or fore-aft) moment of tower gage 8; About the local yt-axis +ElastoDyn['TwHt8MLzt'] = False # (kN-m); Local tower yaw (or torsional) moment of tower gage 8; About the local zt-axis +ElastoDyn['TwHt9MLxt'] = False # (kN-m); Local tower roll (or side-to-side) moment of tower gage 9; About the local xt-axis +ElastoDyn['TwHt9MLyt'] = False # (kN-m); Local tower pitching (or fore-aft) moment of tower gage 9; About the local yt-axis +ElastoDyn['TwHt9MLzt'] = False # (kN-m); Local tower yaw (or torsional) moment of tower gage 9; About the local zt-axis +ElastoDyn['TwHt1FLxt'] = False # (kN); Local tower roll (or side-to-side) force of tower gage 1; About the local xt-axis +ElastoDyn['TwHt1FLyt'] = False # (kN); Local tower pitching (or fore-aft) force of tower gage 1; About the local yt-axis +ElastoDyn['TwHt1FLzt'] = False # (kN); Local tower yaw (or torsional) force of tower gage 1; About the local zt-axis +ElastoDyn['TwHt2FLxt'] = False # (kN); Local tower roll (or side-to-side) force of tower gage 2; About the local xt-axis +ElastoDyn['TwHt2FLyt'] = False # (kN); Local tower pitching (or fore-aft) force of tower gage 2; About the local yt-axis +ElastoDyn['TwHt2FLzt'] = False # (kN); Local tower yaw (or torsional) force of tower gage 2; About the local zt-axis +ElastoDyn['TwHt3FLxt'] = False # (kN); Local tower roll (or side-to-side) force of tower gage 3; About the local xt-axis +ElastoDyn['TwHt3FLyt'] = False # (kN); Local tower pitching (or fore-aft) force of tower gage 3; About the local yt-axis +ElastoDyn['TwHt3FLzt'] = False # (kN); Local tower yaw (or torsional) force of tower gage 3; About the local zt-axis +ElastoDyn['TwHt4FLxt'] = False # (kN); Local tower roll (or side-to-side) force of tower gage 4; About the local xt-axis +ElastoDyn['TwHt4FLyt'] = False # (kN); Local tower pitching (or fore-aft) force of tower gage 4; About the local yt-axis +ElastoDyn['TwHt4FLzt'] = False # (kN); Local tower yaw (or torsional) force of tower gage 4; About the local zt-axis +ElastoDyn['TwHt5FLxt'] = False # (kN); Local tower roll (or side-to-side) force of tower gage 5; About the local xt-axis +ElastoDyn['TwHt5FLyt'] = False # (kN); Local tower pitching (or fore-aft) force of tower gage 5; About the local yt-axis +ElastoDyn['TwHt5FLzt'] = False # (kN); Local tower yaw (or torsional) force of tower gage 5; About the local zt-axis +ElastoDyn['TwHt6FLxt'] = False # (kN); Local tower roll (or side-to-side) force of tower gage 6; About the local xt-axis +ElastoDyn['TwHt6FLyt'] = False # (kN); Local tower pitching (or fore-aft) force of tower gage 6; About the local yt-axis +ElastoDyn['TwHt6FLzt'] = False # (kN); Local tower yaw (or torsional) force of tower gage 6; About the local zt-axis +ElastoDyn['TwHt7FLxt'] = False # (kN); Local tower roll (or side-to-side) force of tower gage 7; About the local xt-axis +ElastoDyn['TwHt7FLyt'] = False # (kN); Local tower pitching (or fore-aft) force of tower gage 7; About the local yt-axis +ElastoDyn['TwHt7FLzt'] = False # (kN); Local tower yaw (or torsional) force of tower gage 7; About the local zt-axis +ElastoDyn['TwHt8FLxt'] = False # (kN); Local tower roll (or side-to-side) force of tower gage 8; About the local xt-axis +ElastoDyn['TwHt8FLyt'] = False # (kN); Local tower pitching (or fore-aft) force of tower gage 8; About the local yt-axis +ElastoDyn['TwHt8FLzt'] = False # (kN); Local tower yaw (or torsional) force of tower gage 8; About the local zt-axis +ElastoDyn['TwHt9FLxt'] = False # (kN); Local tower roll (or side-to-side) force of tower gage 9; About the local xt-axis +ElastoDyn['TwHt9FLyt'] = False # (kN); Local tower pitching (or fore-aft) force of tower gage 9; About the local yt-axis +ElastoDyn['TwHt9FLzt'] = False # (kN); Local tower yaw (or torsional) force of tower gage 9; About the local zt-axis + +# Internal Degrees of Freedom +ElastoDyn['Q_B1E1'] = False # (m); Displacement of 1st edgewise bending-mode DOF of blade 1; +ElastoDyn['Q_B2E1'] = False # (m); Displacement of 1st edgewise bending-mode DOF of blade 2; +ElastoDyn['Q_B3E1'] = False # (m); Displacement of 1st edgewise bending-mode DOF of blade 3; +ElastoDyn['Q_B1F1'] = False # (m); Displacement of 1st flapwise bending-mode DOF of blade 1; +ElastoDyn['Q_B2F1'] = False # (m); Displacement of 1st flapwise bending-mode DOF of blade 2; +ElastoDyn['Q_B3F1'] = False # (m); Displacement of 1st flapwise bending-mode DOF of blade 3; +ElastoDyn['Q_B1F2'] = False # (m); Displacement of 2nd flapwise bending-mode DOF of blade 1; +ElastoDyn['Q_B2F2'] = False # (m); Displacement of 2nd flapwise bending-mode DOF of blade 2; +ElastoDyn['Q_B3F2'] = False # (m); Displacement of 2nd flapwise bending-mode DOF of blade 3; +ElastoDyn['Q_Teet'] = False # (rad); Displacement of hub teetering DOF; +ElastoDyn['Q_DrTr'] = False # (rad); Displacement of drivetrain rotational-flexibility DOF; +ElastoDyn['Q_GeAz'] = False # (rad); Displacement of variable speed generator DOF; +ElastoDyn['Q_RFrl'] = False # (rad); Displacement of rotor-furl DOF; +ElastoDyn['Q_TFrl'] = False # (rad); Displacement of tail-furl DOF; +ElastoDyn['Q_Yaw'] = False # (rad); Displacement of nacelle yaw DOF; +ElastoDyn['Q_TFA1'] = False # (m); Displacement of 1st tower fore-aft bending mode DOF; +ElastoDyn['Q_TSS1'] = False # (m); Displacement of 1st tower side-to-side bending mode DOF; +ElastoDyn['Q_TFA2'] = False # (m); Displacement of 2nd tower fore-aft bending mode DOF; +ElastoDyn['Q_TSS2'] = False # (m); Displacement of 2nd tower side-to-side bending mode DOF; +ElastoDyn['Q_Sg'] = False # (m); Displacement of platform horizontal surge translation DOF; +ElastoDyn['Q_Sw'] = False # (m); Displacement of platform horizontal sway translation DOF; +ElastoDyn['Q_Hv'] = False # (m); Displacement of platform vertical heave translation DOF; +ElastoDyn['Q_R'] = False # (rad); Displacement of platform roll tilt rotation DOF; +ElastoDyn['Q_P'] = False # (rad); Displacement of platform pitch tilt rotation DOF; +ElastoDyn['Q_Y'] = False # (rad); Displacement of platform yaw rotation DOF; +ElastoDyn['QD_B1E1'] = False # (m/s); Velocity of 1st edgewise bending-mode DOF of blade 1; +ElastoDyn['QD_B2E1'] = False # (m/s); Velocity of 1st edgewise bending-mode DOF of blade 2; +ElastoDyn['QD_B3E1'] = False # (m/s); Velocity of 1st edgewise bending-mode DOF of blade 3; +ElastoDyn['QD_B1F1'] = False # (m/s); Velocity of 1st flapwise bending-mode DOF of blade 1; +ElastoDyn['QD_B2F1'] = False # (m/s); Velocity of 1st flapwise bending-mode DOF of blade 2; +ElastoDyn['QD_B3F1'] = False # (m/s); Velocity of 1st flapwise bending-mode DOF of blade 3; +ElastoDyn['QD_B1F2'] = False # (m/s); Velocity of 2nd flapwise bending-mode DOF of blade 1; +ElastoDyn['QD_B2F2'] = False # (m/s); Velocity of 2nd flapwise bending-mode DOF of blade 2; +ElastoDyn['QD_B3F2'] = False # (m/s); Velocity of 2nd flapwise bending-mode DOF of blade 3; +ElastoDyn['QD_Teet'] = False # (rad/s); Velocity of hub teetering DOF; +ElastoDyn['QD_DrTr'] = False # (rad/s); Velocity of drivetrain rotational-flexibility DOF; +ElastoDyn['QD_GeAz'] = False # (rad/s); Velocity of variable speed generator DOF; +ElastoDyn['QD_RFrl'] = False # (rad/s); Velocity of rotor-furl DOF; +ElastoDyn['QD_TFrl'] = False # (rad/s); Velocity of tail-furl DOF; +ElastoDyn['QD_Yaw'] = False # (rad/s); Velocity of nacelle yaw DOF; +ElastoDyn['QD_TFA1'] = False # (m/s); Velocity of 1st tower fore-aft bending mode DOF; +ElastoDyn['QD_TSS1'] = False # (m/s); Velocity of 1st tower side-to-side bending mode DOF; +ElastoDyn['QD_TFA2'] = False # (m/s); Velocity of 2nd tower fore-aft bending mode DOF; +ElastoDyn['QD_TSS2'] = False # (m/s); Velocity of 2nd tower side-to-side bending mode DOF; +ElastoDyn['QD_Sg'] = False # (m/s); Velocity of platform horizontal surge translation DOF; +ElastoDyn['QD_Sw'] = False # (m/s); Velocity of platform horizontal sway translation DOF; +ElastoDyn['QD_Hv'] = False # (m/s); Velocity of platform vertical heave translation DOF; +ElastoDyn['QD_R'] = False # (rad/s); Velocity of platform roll tilt rotation DOF; +ElastoDyn['QD_P'] = False # (rad/s); Velocity of platform pitch tilt rotation DOF; +ElastoDyn['QD_Y'] = False # (rad/s); Velocity of platform yaw rotation DOF; +ElastoDyn['QD2_B1E1'] = False # (m/s^2); Acceleration of 1st edgewise bending-mode DOF of blade 1; +ElastoDyn['QD2_B2E1'] = False # (m/s^2); Acceleration of 1st edgewise bending-mode DOF of blade 2; +ElastoDyn['QD2_B3E1'] = False # (m/s^2); Acceleration of 1st edgewise bending-mode DOF of blade 3; +ElastoDyn['QD2_B1F1'] = False # (m/s^2); Acceleration of 1st flapwise bending-mode DOF of blade 1; +ElastoDyn['QD2_B2F1'] = False # (m/s^2); Acceleration of 1st flapwise bending-mode DOF of blade 2; +ElastoDyn['QD2_B3F1'] = False # (m/s^2); Acceleration of 1st flapwise bending-mode DOF of blade 3; +ElastoDyn['QD2_B1F2'] = False # (m/s^2); Acceleration of 2nd flapwise bending-mode DOF of blade 1; +ElastoDyn['QD2_B2F2'] = False # (m/s^2); Acceleration of 2nd flapwise bending-mode DOF of blade 2; +ElastoDyn['QD2_B3F2'] = False # (m/s^2); Acceleration of 2nd flapwise bending-mode DOF of blade 3; +ElastoDyn['QD2_Teet'] = False # (rad/s^2); Acceleration of hub teetering DOF; +ElastoDyn['QD2_DrTr'] = False # (rad/s^2); Acceleration of drivetrain rotational-flexibility DOF; +ElastoDyn['QD2_GeAz'] = False # (rad/s^2); Acceleration of variable speed generator DOF; +ElastoDyn['QD2_RFrl'] = False # (rad/s^2); Acceleration of rotor-furl DOF; +ElastoDyn['QD2_TFrl'] = False # (rad/s^2); Acceleration of tail-furl DOF; +ElastoDyn['QD2_Yaw'] = False # (rad/s^2); Acceleration of nacelle yaw DOF; +ElastoDyn['QD2_TFA1'] = False # (m/s^2); Acceleration of 1st tower fore-aft bending mode DOF; +ElastoDyn['QD2_TSS1'] = False # (m/s^2); Acceleration of 1st tower side-to-side bending mode DOF; +ElastoDyn['QD2_TFA2'] = False # (m/s^2); Acceleration of 2nd tower fore-aft bending mode DOF; +ElastoDyn['QD2_TSS2'] = False # (m/s^2); Acceleration of 2nd tower side-to-side bending mode DOF; +ElastoDyn['QD2_Sg'] = False # (m/s^2); Acceleration of platform horizontal surge translation DOF; +ElastoDyn['QD2_Sw'] = False # (m/s^2); Acceleration of platform horizontal sway translation DOF; +ElastoDyn['QD2_Hv'] = False # (m/s^2); Acceleration of platform vertical heave translation DOF; +ElastoDyn['QD2_R'] = False # (rad/s^2); Acceleration of platform roll tilt rotation DOF; +ElastoDyn['QD2_P'] = False # (rad/s^2); Acceleration of platform pitch tilt rotation DOF; +ElastoDyn['QD2_Y'] = False # (rad/s^2); Acceleration of platform yaw rotation DOF; + + +""" BeamDyn """ +BeamDyn = {} + +# Reaction Loads +BeamDyn['RootFxr'] = False # (N); x-component of the root reaction force expressed in r; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn['RootFyr'] = False # (N); y-component of the root reaction force expressed in r; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn['RootFzr'] = False # (N); z-component of the root reaction force expressed in r; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn['RootMxr'] = False # (N-m); x-component of the root reaction moment expressed in r; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn['RootMyr'] = False # (N-m); y-component of the root reaction moment expressed in r; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn['RootMzr'] = False # (N-m); z-component of the root reaction moment expressed in r; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system + +# Tip Motions +BeamDyn['TipTDxr'] = False # (m); Tip translational deflection (relative to the undeflected position) expressed in r; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn['TipTDyr'] = False # (m); Tip translational deflection (relative to the undeflected position) expressed in r; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn['TipTDzr'] = False # (m); Tip translational deflection (relative to the undeflected position) expressed in r; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn['TipRDxr'] = False # (-); Tip angular/rotational deflection Wiener-Milenkovi parameter (relative to the undeflected orientation) expressed in r; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn['TipRDyr'] = False # (-); Tip angular/rotational deflection Wiener-Milenkovi parameter (relative to the undeflected orientation) expressed in r; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn['TipRDzr'] = False # (-); Tip angular/rotational deflection Wiener-Milenkovi parameter (relative to the undeflected orientation) expressed in r; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn['TipTVXg'] = False # (m/s); Tip translational velocities (absolute) expressed in g; g: the global inertial frame coordinate system; when coupled to FAST, this is equivalent to FAST s global inertial frame (i) coordinate system +BeamDyn['TipTVYg'] = False # (m/s); Tip translational velocities (absolute) expressed in g; g: the global inertial frame coordinate system; when coupled to FAST, this is equivalent to FAST s global inertial frame (i) coordinate system +BeamDyn['TipTVZg'] = False # (m/s); Tip translational velocities (absolute) expressed in g; g: the global inertial frame coordinate system; when coupled to FAST, this is equivalent to FAST s global inertial frame (i) coordinate system +BeamDyn['TipRVXg'] = False # (deg/s); Tip angular/rotational velocities (absolute) expressed in g; g: the global inertial frame coordinate system; when coupled to FAST, this is equivalent to FAST s global inertial frame (i) coordinate system +BeamDyn['TipRVYg'] = False # (deg/s); Tip angular/rotational velocities (absolute) expressed in g; g: the global inertial frame coordinate system; when coupled to FAST, this is equivalent to FAST s global inertial frame (i) coordinate system +BeamDyn['TipRVZg'] = False # (deg/s); Tip angular/rotational velocities (absolute) expressed in g; g: the global inertial frame coordinate system; when coupled to FAST, this is equivalent to FAST s global inertial frame (i) coordinate system +BeamDyn['TipTAXl'] = False # (m/s^2); Tip translational accelerations (absolute) expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['TipTAYl'] = False # (m/s^2); Tip translational accelerations (absolute) expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['TipTAZl'] = False # (m/s^2); Tip translational accelerations (absolute) expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['TipRAXl'] = False # (deg/s^2); Tip angular/rotational accelerations (absolute) expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['TipRAYl'] = False # (deg/s^2); Tip angular/rotational accelerations (absolute) expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['TipRAZl'] = False # (deg/s^2); Tip angular/rotational accelerations (absolute) expressed in l; l: a floating coordinate system local to the deflected beam + +# Sectional Loads +BeamDyn['N1Fxl'] = False # (N); Sectional force resultants at Node 1 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N1Fyl'] = False # (N); Sectional force resultants at Node 1 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N1Fzl'] = False # (N); Sectional force resultants at Node 1 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N2Fxl'] = False # (N); Sectional force resultants at Node 2 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N2Fyl'] = False # (N); Sectional force resultants at Node 2 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N2Fzl'] = False # (N); Sectional force resultants at Node 2 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N3Fxl'] = False # (N); Sectional force resultants at Node 3 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N3Fyl'] = False # (N); Sectional force resultants at Node 3 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N3Fzl'] = False # (N); Sectional force resultants at Node 3 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N4Fxl'] = False # (N); Sectional force resultants at Node 4 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N4Fyl'] = False # (N); Sectional force resultants at Node 4 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N4Fzl'] = False # (N); Sectional force resultants at Node 4 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N5Fxl'] = False # (N); Sectional force resultants at Node 5 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N5Fyl'] = False # (N); Sectional force resultants at Node 5 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N5Fzl'] = False # (N); Sectional force resultants at Node 5 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N6Fxl'] = False # (N); Sectional force resultants at Node 6 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N6Fyl'] = False # (N); Sectional force resultants at Node 6 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N6Fzl'] = False # (N); Sectional force resultants at Node 6 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N7Fxl'] = False # (N); Sectional force resultants at Node 7 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N7Fyl'] = False # (N); Sectional force resultants at Node 7 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N7Fzl'] = False # (N); Sectional force resultants at Node 7 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N8Fxl'] = False # (N); Sectional force resultants at Node 8 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N8Fyl'] = False # (N); Sectional force resultants at Node 8 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N8Fzl'] = False # (N); Sectional force resultants at Node 8 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N9Fxl'] = False # (N); Sectional force resultants at Node 9 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N9Fyl'] = False # (N); Sectional force resultants at Node 9 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N9Fzl'] = False # (N); Sectional force resultants at Node 9 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N1Mxl'] = False # (N-m); Sectional moment resultants at Node 1 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N1Myl'] = False # (N-m); Sectional moment resultants at Node 1 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N1Mzl'] = False # (N-m); Sectional moment resultants at Node 1 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N2Mxl'] = False # (N-m); Sectional moment resultants at Node 2 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N2Myl'] = False # (N-m); Sectional moment resultants at Node 2 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N2Mzl'] = False # (N-m); Sectional moment resultants at Node 2 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N3Mxl'] = False # (N-m); Sectional moment resultants at Node 3 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N3Myl'] = False # (N-m); Sectional moment resultants at Node 3 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N3Mzl'] = False # (N-m); Sectional moment resultants at Node 3 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N4Mxl'] = False # (N-m); Sectional moment resultants at Node 4 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N4Myl'] = False # (N-m); Sectional moment resultants at Node 4 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N4Mzl'] = False # (N-m); Sectional moment resultants at Node 4 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N5Mxl'] = False # (N-m); Sectional moment resultants at Node 5 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N5Myl'] = False # (N-m); Sectional moment resultants at Node 5 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N5Mzl'] = False # (N-m); Sectional moment resultants at Node 5 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N6Mxl'] = False # (N-m); Sectional moment resultants at Node 6 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N6Myl'] = False # (N-m); Sectional moment resultants at Node 6 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N6Mzl'] = False # (N-m); Sectional moment resultants at Node 6 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N7Mxl'] = False # (N-m); Sectional moment resultants at Node 7 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N7Myl'] = False # (N-m); Sectional moment resultants at Node 7 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N7Mzl'] = False # (N-m); Sectional moment resultants at Node 7 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N8Mxl'] = False # (N-m); Sectional moment resultants at Node 8 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N8Myl'] = False # (N-m); Sectional moment resultants at Node 8 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N8Mzl'] = False # (N-m); Sectional moment resultants at Node 8 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N9Mxl'] = False # (N-m); Sectional moment resultants at Node 9 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N9Myl'] = False # (N-m); Sectional moment resultants at Node 9 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N9Mzl'] = False # (N-m); Sectional moment resultants at Node 9 expressed in l; l: a floating coordinate system local to the deflected beam + +# Sectional Motions +BeamDyn['N1TDxr'] = False # (m); Sectional translational deflection (relative to the undeflected position) at Node 1 expressed in r; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn['N1TDyr'] = False # (m); Sectional translational deflection (relative to the undeflected position) at Node 1 expressed in r; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn['N1TDzr'] = False # (m); Sectional translational deflection (relative to the undeflected position) at Node 1 expressed in r; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn['N2TDxr'] = False # (m); Sectional translational deflection (relative to the undeflected position) at Node 2 expressed in r; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn['N2TDyr'] = False # (m); Sectional translational deflection (relative to the undeflected position) at Node 2 expressed in r; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn['N2TDzr'] = False # (m); Sectional translational deflection (relative to the undeflected position) at Node 2 expressed in r; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn['N3TDxr'] = False # (m); Sectional translational deflection (relative to the undeflected position) at Node 3 expressed in r; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn['N3TDyr'] = False # (m); Sectional translational deflection (relative to the undeflected position) at Node 3 expressed in r; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn['N3TDzr'] = False # (m); Sectional translational deflection (relative to the undeflected position) at Node 3 expressed in r; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn['N4TDxr'] = False # (m); Sectional translational deflection (relative to the undeflected position) at Node 4 expressed in r; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn['N4TDyr'] = False # (m); Sectional translational deflection (relative to the undeflected position) at Node 4 expressed in r; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn['N4TDzr'] = False # (m); Sectional translational deflection (relative to the undeflected position) at Node 4 expressed in r; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn['N5TDxr'] = False # (m); Sectional translational deflection (relative to the undeflected position) at Node 5 expressed in r; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn['N5TDyr'] = False # (m); Sectional translational deflection (relative to the undeflected position) at Node 5 expressed in r; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn['N5TDzr'] = False # (m); Sectional translational deflection (relative to the undeflected position) at Node 5 expressed in r; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn['N6TDxr'] = False # (m); Sectional translational deflection (relative to the undeflected position) at Node 6 expressed in r; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn['N6TDyr'] = False # (m); Sectional translational deflection (relative to the undeflected position) at Node 6 expressed in r; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn['N6TDzr'] = False # (m); Sectional translational deflection (relative to the undeflected position) at Node 6 expressed in r; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn['N7TDxr'] = False # (m); Sectional translational deflection (relative to the undeflected position) at Node 7 expressed in r; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn['N7TDyr'] = False # (m); Sectional translational deflection (relative to the undeflected position) at Node 7 expressed in r; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn['N7TDzr'] = False # (m); Sectional translational deflection (relative to the undeflected position) at Node 7 expressed in r; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn['N8TDxr'] = False # (m); Sectional translational deflection (relative to the undeflected position) at Node 8 expressed in r; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn['N8TDyr'] = False # (m); Sectional translational deflection (relative to the undeflected position) at Node 8 expressed in r; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn['N8TDzr'] = False # (m); Sectional translational deflection (relative to the undeflected position) at Node 8 expressed in r; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn['N9TDxr'] = False # (m); Sectional translational deflection (relative to the undeflected position) at Node 9 expressed in r; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn['N9TDyr'] = False # (m); Sectional translational deflection (relative to the undeflected position) at Node 9 expressed in r; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn['N9TDzr'] = False # (m); Sectional translational deflection (relative to the undeflected position) at Node 9 expressed in r; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn['N1RDxr'] = False # (-); Sectional angular/rotational deflection Wiener-Milenkovic parameter (relative to the undeflected orientation) at Node 1 expressed in r; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn['N1RDyr'] = False # (-); Sectional angular/rotational deflection Wiener-Milenkovic parameter (relative to the undeflected orientation) at Node 1 expressed in r; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn['N1RDzr'] = False # (-); Sectional angular/rotational deflection Wiener-Milenkovic parameter (relative to the undeflected orientation) at Node 1 expressed in r; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn['N2RDxr'] = False # (-); Sectional angular/rotational deflection Wiener-Milenkovic parameter (relative to the undeflected orientation) at Node 2 expressed in r; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn['N2RDyr'] = False # (-); Sectional angular/rotational deflection Wiener-Milenkovic parameter (relative to the undeflected orientation) at Node 2 expressed in r; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn['N2RDzr'] = False # (-); Sectional angular/rotational deflection Wiener-Milenkovic parameter (relative to the undeflected orientation) at Node 2 expressed in r; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn['N3RDxr'] = False # (-); Sectional angular/rotational deflection Wiener-Milenkovic parameter (relative to the undeflected orientation) at Node 3 expressed in r; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn['N3RDyr'] = False # (-); Sectional angular/rotational deflection Wiener-Milenkovic parameter (relative to the undeflected orientation) at Node 3 expressed in r; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn['N3RDzr'] = False # (-); Sectional angular/rotational deflection Wiener-Milenkovic parameter (relative to the undeflected orientation) at Node 3 expressed in r; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn['N4RDxr'] = False # (-); Sectional angular/rotational deflection Wiener-Milenkovic parameter (relative to the undeflected orientation) at Node 4 expressed in r; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn['N4RDyr'] = False # (-); Sectional angular/rotational deflection Wiener-Milenkovic parameter (relative to the undeflected orientation) at Node 4 expressed in r; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn['N4RDzr'] = False # (-); Sectional angular/rotational deflection Wiener-Milenkovic parameter (relative to the undeflected orientation) at Node 4 expressed in r; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn['N5RDxr'] = False # (-); Sectional angular/rotational deflection Wiener-Milenkovic parameter (relative to the undeflected orientation) at Node 5 expressed in r; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn['N5RDyr'] = False # (-); Sectional angular/rotational deflection Wiener-Milenkovic parameter (relative to the undeflected orientation) at Node 5 expressed in r; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn['N5RDzr'] = False # (-); Sectional angular/rotational deflection Wiener-Milenkovic parameter (relative to the undeflected orientation) at Node 5 expressed in r; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn['N6RDxr'] = False # (-); Sectional angular/rotational deflection Wiener-Milenkovic parameter (relative to the undeflected orientation) at Node 6 expressed in r; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn['N6RDyr'] = False # (-); Sectional angular/rotational deflection Wiener-Milenkovic parameter (relative to the undeflected orientation) at Node 6 expressed in r; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn['N6RDzr'] = False # (-); Sectional angular/rotational deflection Wiener-Milenkovic parameter (relative to the undeflected orientation) at Node 6 expressed in r; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn['N7RDxr'] = False # (-); Sectional angular/rotational deflection Wiener-Milenkovic parameter (relative to the undeflected orientation) at Node 7 expressed in r; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn['N7RDyr'] = False # (-); Sectional angular/rotational deflection Wiener-Milenkovic parameter (relative to the undeflected orientation) at Node 7 expressed in r; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn['N7RDzr'] = False # (-); Sectional angular/rotational deflection Wiener-Milenkovic parameter (relative to the undeflected orientation) at Node 7 expressed in r; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn['N8RDxr'] = False # (-); Sectional angular/rotational deflection Wiener-Milenkovic parameter (relative to the undeflected orientation) at Node 8 expressed in r; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn['N8RDyr'] = False # (-); Sectional angular/rotational deflection Wiener-Milenkovic parameter (relative to the undeflected orientation) at Node 8 expressed in r; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn['N8RDzr'] = False # (-); Sectional angular/rotational deflection Wiener-Milenkovic parameter (relative to the undeflected orientation) at Node 8 expressed in r; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn['N9RDxr'] = False # (-); Sectional angular/rotational deflection Wiener-Milenkovic parameter (relative to the undeflected orientation) at Node 9 expressed in r; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn['N9RDyr'] = False # (-); Sectional angular/rotational deflection Wiener-Milenkovic parameter (relative to the undeflected orientation) at Node 9 expressed in r; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn['N9RDzr'] = False # (-); Sectional angular/rotational deflection Wiener-Milenkovic parameter (relative to the undeflected orientation) at Node 9 expressed in r; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn['N1TVXg'] = False # (m/s); Sectional translational velocities (absolute) at Node 1 expressed in g; g: the global inertial frame coordinate system; when coupled to FAST, this is equivalent to FAST s global inertial frame (i) coordinate system +BeamDyn['N1TVYg'] = False # (m/s); Sectional translational velocities (absolute) at Node 1 expressed in g; g: the global inertial frame coordinate system; when coupled to FAST, this is equivalent to FAST s global inertial frame (i) coordinate system +BeamDyn['N1TVZg'] = False # (m/s); Sectional translational velocities (absolute) at Node 1 expressed in g; g: the global inertial frame coordinate system; when coupled to FAST, this is equivalent to FAST s global inertial frame (i) coordinate system +BeamDyn['N2TVXg'] = False # (m/s); Sectional translational velocities (absolute) at Node 2 expressed in g; g: the global inertial frame coordinate system; when coupled to FAST, this is equivalent to FAST s global inertial frame (i) coordinate system +BeamDyn['N2TVYg'] = False # (m/s); Sectional translational velocities (absolute) at Node 2 expressed in g; g: the global inertial frame coordinate system; when coupled to FAST, this is equivalent to FAST s global inertial frame (i) coordinate system +BeamDyn['N2TVZg'] = False # (m/s); Sectional translational velocities (absolute) at Node 2 expressed in g; g: the global inertial frame coordinate system; when coupled to FAST, this is equivalent to FAST s global inertial frame (i) coordinate system +BeamDyn['N3TVXg'] = False # (m/s); Sectional translational velocities (absolute) at Node 3 expressed in g; g: the global inertial frame coordinate system; when coupled to FAST, this is equivalent to FAST s global inertial frame (i) coordinate system +BeamDyn['N3TVYg'] = False # (m/s); Sectional translational velocities (absolute) at Node 3 expressed in g; g: the global inertial frame coordinate system; when coupled to FAST, this is equivalent to FAST s global inertial frame (i) coordinate system +BeamDyn['N3TVZg'] = False # (m/s); Sectional translational velocities (absolute) at Node 3 expressed in g; g: the global inertial frame coordinate system; when coupled to FAST, this is equivalent to FAST s global inertial frame (i) coordinate system +BeamDyn['N4TVXg'] = False # (m/s); Sectional translational velocities (absolute) at Node 4 expressed in g; g: the global inertial frame coordinate system; when coupled to FAST, this is equivalent to FAST s global inertial frame (i) coordinate system +BeamDyn['N4TVYg'] = False # (m/s); Sectional translational velocities (absolute) at Node 4 expressed in g; g: the global inertial frame coordinate system; when coupled to FAST, this is equivalent to FAST s global inertial frame (i) coordinate system +BeamDyn['N4TVZg'] = False # (m/s); Sectional translational velocities (absolute) at Node 4 expressed in g; g: the global inertial frame coordinate system; when coupled to FAST, this is equivalent to FAST s global inertial frame (i) coordinate system +BeamDyn['N5TVXg'] = False # (m/s); Sectional translational velocities (absolute) at Node 5 expressed in g; g: the global inertial frame coordinate system; when coupled to FAST, this is equivalent to FAST s global inertial frame (i) coordinate system +BeamDyn['N5TVYg'] = False # (m/s); Sectional translational velocities (absolute) at Node 5 expressed in g; g: the global inertial frame coordinate system; when coupled to FAST, this is equivalent to FAST s global inertial frame (i) coordinate system +BeamDyn['N5TVZg'] = False # (m/s); Sectional translational velocities (absolute) at Node 5 expressed in g; g: the global inertial frame coordinate system; when coupled to FAST, this is equivalent to FAST s global inertial frame (i) coordinate system +BeamDyn['N6TVXg'] = False # (m/s); Sectional translational velocities (absolute) at Node 6 expressed in g; g: the global inertial frame coordinate system; when coupled to FAST, this is equivalent to FAST s global inertial frame (i) coordinate system +BeamDyn['N6TVYg'] = False # (m/s); Sectional translational velocities (absolute) at Node 6 expressed in g; g: the global inertial frame coordinate system; when coupled to FAST, this is equivalent to FAST s global inertial frame (i) coordinate system +BeamDyn['N6TVZg'] = False # (m/s); Sectional translational velocities (absolute) at Node 6 expressed in g; g: the global inertial frame coordinate system; when coupled to FAST, this is equivalent to FAST s global inertial frame (i) coordinate system +BeamDyn['N7TVXg'] = False # (m/s); Sectional translational velocities (absolute) at Node 7 expressed in g; g: the global inertial frame coordinate system; when coupled to FAST, this is equivalent to FAST s global inertial frame (i) coordinate system +BeamDyn['N7TVYg'] = False # (m/s); Sectional translational velocities (absolute) at Node 7 expressed in g; g: the global inertial frame coordinate system; when coupled to FAST, this is equivalent to FAST s global inertial frame (i) coordinate system +BeamDyn['N7TVZg'] = False # (m/s); Sectional translational velocities (absolute) at Node 7 expressed in g; g: the global inertial frame coordinate system; when coupled to FAST, this is equivalent to FAST s global inertial frame (i) coordinate system +BeamDyn['N8TVXg'] = False # (m/s); Sectional translational velocities (absolute) at Node 8 expressed in g; g: the global inertial frame coordinate system; when coupled to FAST, this is equivalent to FAST s global inertial frame (i) coordinate system +BeamDyn['N8TVYg'] = False # (m/s); Sectional translational velocities (absolute) at Node 8 expressed in g; g: the global inertial frame coordinate system; when coupled to FAST, this is equivalent to FAST s global inertial frame (i) coordinate system +BeamDyn['N8TVZg'] = False # (m/s); Sectional translational velocities (absolute) at Node 8 expressed in g; g: the global inertial frame coordinate system; when coupled to FAST, this is equivalent to FAST s global inertial frame (i) coordinate system +BeamDyn['N9TVXg'] = False # (m/s); Sectional translational velocities (absolute) at Node 9 expressed in g; g: the global inertial frame coordinate system; when coupled to FAST, this is equivalent to FAST s global inertial frame (i) coordinate system +BeamDyn['N9TVYg'] = False # (m/s); Sectional translational velocities (absolute) at Node 9 expressed in g; g: the global inertial frame coordinate system; when coupled to FAST, this is equivalent to FAST s global inertial frame (i) coordinate system +BeamDyn['N9TVZg'] = False # (m/s); Sectional translational velocities (absolute) at Node 9 expressed in g; g: the global inertial frame coordinate system; when coupled to FAST, this is equivalent to FAST s global inertial frame (i) coordinate system +BeamDyn['N1RVXg'] = False # (deg/s); Sectional angular/rotational velocities (absolute) at Node 1 expressed in g; g: the global inertial frame coordinate system; when coupled to FAST, this is equivalent to FAST s global inertial frame (i) coordinate system +BeamDyn['N1RVYg'] = False # (deg/s); Sectional angular/rotational velocities (absolute) at Node 1 expressed in g; g: the global inertial frame coordinate system; when coupled to FAST, this is equivalent to FAST s global inertial frame (i) coordinate system +BeamDyn['N1RVZg'] = False # (deg/s); Sectional angular/rotational velocities (absolute) at Node 1 expressed in g; g: the global inertial frame coordinate system; when coupled to FAST, this is equivalent to FAST s global inertial frame (i) coordinate system +BeamDyn['N2RVXg'] = False # (deg/s); Sectional angular/rotational velocities (absolute) at Node 2 expressed in g; g: the global inertial frame coordinate system; when coupled to FAST, this is equivalent to FAST s global inertial frame (i) coordinate system +BeamDyn['N2RVYg'] = False # (deg/s); Sectional angular/rotational velocities (absolute) at Node 2 expressed in g; g: the global inertial frame coordinate system; when coupled to FAST, this is equivalent to FAST s global inertial frame (i) coordinate system +BeamDyn['N2RVZg'] = False # (deg/s); Sectional angular/rotational velocities (absolute) at Node 2 expressed in g; g: the global inertial frame coordinate system; when coupled to FAST, this is equivalent to FAST s global inertial frame (i) coordinate system +BeamDyn['N3RVXg'] = False # (deg/s); Sectional angular/rotational velocities (absolute) at Node 3 expressed in g; g: the global inertial frame coordinate system; when coupled to FAST, this is equivalent to FAST s global inertial frame (i) coordinate system +BeamDyn['N3RVYg'] = False # (deg/s); Sectional angular/rotational velocities (absolute) at Node 3 expressed in g; g: the global inertial frame coordinate system; when coupled to FAST, this is equivalent to FAST s global inertial frame (i) coordinate system +BeamDyn['N3RVZg'] = False # (deg/s); Sectional angular/rotational velocities (absolute) at Node 3 expressed in g; g: the global inertial frame coordinate system; when coupled to FAST, this is equivalent to FAST s global inertial frame (i) coordinate system +BeamDyn['N4RVXg'] = False # (deg/s); Sectional angular/rotational velocities (absolute) at Node 4 expressed in g; g: the global inertial frame coordinate system; when coupled to FAST, this is equivalent to FAST s global inertial frame (i) coordinate system +BeamDyn['N4RVYg'] = False # (deg/s); Sectional angular/rotational velocities (absolute) at Node 4 expressed in g; g: the global inertial frame coordinate system; when coupled to FAST, this is equivalent to FAST s global inertial frame (i) coordinate system +BeamDyn['N4RVZg'] = False # (deg/s); Sectional angular/rotational velocities (absolute) at Node 4 expressed in g; g: the global inertial frame coordinate system; when coupled to FAST, this is equivalent to FAST s global inertial frame (i) coordinate system +BeamDyn['N5RVXg'] = False # (deg/s); Sectional angular/rotational velocities (absolute) at Node 5 expressed in g; g: the global inertial frame coordinate system; when coupled to FAST, this is equivalent to FAST s global inertial frame (i) coordinate system +BeamDyn['N5RVYg'] = False # (deg/s); Sectional angular/rotational velocities (absolute) at Node 5 expressed in g; g: the global inertial frame coordinate system; when coupled to FAST, this is equivalent to FAST s global inertial frame (i) coordinate system +BeamDyn['N5RVZg'] = False # (deg/s); Sectional angular/rotational velocities (absolute) at Node 5 expressed in g; g: the global inertial frame coordinate system; when coupled to FAST, this is equivalent to FAST s global inertial frame (i) coordinate system +BeamDyn['N6RVXg'] = False # (deg/s); Sectional angular/rotational velocities (absolute) at Node 6 expressed in g; g: the global inertial frame coordinate system; when coupled to FAST, this is equivalent to FAST s global inertial frame (i) coordinate system +BeamDyn['N6RVYg'] = False # (deg/s); Sectional angular/rotational velocities (absolute) at Node 6 expressed in g; g: the global inertial frame coordinate system; when coupled to FAST, this is equivalent to FAST s global inertial frame (i) coordinate system +BeamDyn['N6RVZg'] = False # (deg/s); Sectional angular/rotational velocities (absolute) at Node 6 expressed in g; g: the global inertial frame coordinate system; when coupled to FAST, this is equivalent to FAST s global inertial frame (i) coordinate system +BeamDyn['N7RVXg'] = False # (deg/s); Sectional angular/rotational velocities (absolute) at Node 7 expressed in g; g: the global inertial frame coordinate system; when coupled to FAST, this is equivalent to FAST s global inertial frame (i) coordinate system +BeamDyn['N7RVYg'] = False # (deg/s); Sectional angular/rotational velocities (absolute) at Node 7 expressed in g; g: the global inertial frame coordinate system; when coupled to FAST, this is equivalent to FAST s global inertial frame (i) coordinate system +BeamDyn['N7RVZg'] = False # (deg/s); Sectional angular/rotational velocities (absolute) at Node 7 expressed in g; g: the global inertial frame coordinate system; when coupled to FAST, this is equivalent to FAST s global inertial frame (i) coordinate system +BeamDyn['N8RVXg'] = False # (deg/s); Sectional angular/rotational velocities (absolute) at Node 8 expressed in g; g: the global inertial frame coordinate system; when coupled to FAST, this is equivalent to FAST s global inertial frame (i) coordinate system +BeamDyn['N8RVYg'] = False # (deg/s); Sectional angular/rotational velocities (absolute) at Node 8 expressed in g; g: the global inertial frame coordinate system; when coupled to FAST, this is equivalent to FAST s global inertial frame (i) coordinate system +BeamDyn['N8RVZg'] = False # (deg/s); Sectional angular/rotational velocities (absolute) at Node 8 expressed in g; g: the global inertial frame coordinate system; when coupled to FAST, this is equivalent to FAST s global inertial frame (i) coordinate system +BeamDyn['N9RVXg'] = False # (deg/s); Sectional angular/rotational velocities (absolute) at Node 9 expressed in g; g: the global inertial frame coordinate system; when coupled to FAST, this is equivalent to FAST s global inertial frame (i) coordinate system +BeamDyn['N9RVYg'] = False # (deg/s); Sectional angular/rotational velocities (absolute) at Node 9 expressed in g; g: the global inertial frame coordinate system; when coupled to FAST, this is equivalent to FAST s global inertial frame (i) coordinate system +BeamDyn['N9RVZg'] = False # (deg/s); Sectional angular/rotational velocities (absolute) at Node 9 expressed in g; g: the global inertial frame coordinate system; when coupled to FAST, this is equivalent to FAST s global inertial frame (i) coordinate system +BeamDyn['N1TAXl'] = False # (m/s^2); Sectional translational accelerations (absolute) at Node 1 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N1TAYl'] = False # (m/s^2); Sectional translational accelerations (absolute) at Node 1 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N1TAZl'] = False # (m/s^2); Sectional translational accelerations (absolute) at Node 1 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N2TAXl'] = False # (m/s^2); Sectional translational accelerations (absolute) at Node 2 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N2TAYl'] = False # (m/s^2); Sectional translational accelerations (absolute) at Node 2 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N2TAZl'] = False # (m/s^2); Sectional translational accelerations (absolute) at Node 2 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N3TAXl'] = False # (m/s^2); Sectional translational accelerations (absolute) at Node 3 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N3TAYl'] = False # (m/s^2); Sectional translational accelerations (absolute) at Node 3 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N3TAZl'] = False # (m/s^2); Sectional translational accelerations (absolute) at Node 3 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N4TAXl'] = False # (m/s^2); Sectional translational accelerations (absolute) at Node 4 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N4TAYl'] = False # (m/s^2); Sectional translational accelerations (absolute) at Node 4 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N4TAZl'] = False # (m/s^2); Sectional translational accelerations (absolute) at Node 4 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N5TAXl'] = False # (m/s^2); Sectional translational accelerations (absolute) at Node 5 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N5TAYl'] = False # (m/s^2); Sectional translational accelerations (absolute) at Node 5 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N5TAZl'] = False # (m/s^2); Sectional translational accelerations (absolute) at Node 5 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N6TAXl'] = False # (m/s^2); Sectional translational accelerations (absolute) at Node 6 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N6TAYl'] = False # (m/s^2); Sectional translational accelerations (absolute) at Node 6 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N6TAZl'] = False # (m/s^2); Sectional translational accelerations (absolute) at Node 6 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N7TAXl'] = False # (m/s^2); Sectional translational accelerations (absolute) at Node 7 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N7TAYl'] = False # (m/s^2); Sectional translational accelerations (absolute) at Node 7 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N7TAZl'] = False # (m/s^2); Sectional translational accelerations (absolute) at Node 7 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N8TAXl'] = False # (m/s^2); Sectional translational accelerations (absolute) at Node 8 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N8TAYl'] = False # (m/s^2); Sectional translational accelerations (absolute) at Node 8 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N8TAZl'] = False # (m/s^2); Sectional translational accelerations (absolute) at Node 8 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N9TAXl'] = False # (m/s^2); Sectional translational accelerations (absolute) at Node 9 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N9TAYl'] = False # (m/s^2); Sectional translational accelerations (absolute) at Node 9 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N9TAZl'] = False # (m/s^2); Sectional translational accelerations (absolute) at Node 9 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N1RAXl'] = False # (deg/s^2); Sectional angular/rotational accelerations (absolute) at Node 1 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N1RAYl'] = False # (deg/s^2); Sectional angular/rotational accelerations (absolute) at Node 1 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N1RAZl'] = False # (deg/s^2); Sectional angular/rotational accelerations (absolute) at Node 1 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N2RAXl'] = False # (deg/s^2); Sectional angular/rotational accelerations (absolute) at Node 2 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N2RAYl'] = False # (deg/s^2); Sectional angular/rotational accelerations (absolute) at Node 2 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N2RAZl'] = False # (deg/s^2); Sectional angular/rotational accelerations (absolute) at Node 2 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N3RAXl'] = False # (deg/s^2); Sectional angular/rotational accelerations (absolute) at Node 3 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N3RAYl'] = False # (deg/s^2); Sectional angular/rotational accelerations (absolute) at Node 3 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N3RAZl'] = False # (deg/s^2); Sectional angular/rotational accelerations (absolute) at Node 3 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N4RAXl'] = False # (deg/s^2); Sectional angular/rotational accelerations (absolute) at Node 4 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N4RAYl'] = False # (deg/s^2); Sectional angular/rotational accelerations (absolute) at Node 4 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N4RAZl'] = False # (deg/s^2); Sectional angular/rotational accelerations (absolute) at Node 4 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N5RAXl'] = False # (deg/s^2); Sectional angular/rotational accelerations (absolute) at Node 5 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N5RAYl'] = False # (deg/s^2); Sectional angular/rotational accelerations (absolute) at Node 5 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N5RAZl'] = False # (deg/s^2); Sectional angular/rotational accelerations (absolute) at Node 5 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N6RAXl'] = False # (deg/s^2); Sectional angular/rotational accelerations (absolute) at Node 6 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N6RAYl'] = False # (deg/s^2); Sectional angular/rotational accelerations (absolute) at Node 6 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N6RAZl'] = False # (deg/s^2); Sectional angular/rotational accelerations (absolute) at Node 6 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N7RAXl'] = False # (deg/s^2); Sectional angular/rotational accelerations (absolute) at Node 7 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N7RAYl'] = False # (deg/s^2); Sectional angular/rotational accelerations (absolute) at Node 7 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N7RAZl'] = False # (deg/s^2); Sectional angular/rotational accelerations (absolute) at Node 7 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N8RAXl'] = False # (deg/s^2); Sectional angular/rotational accelerations (absolute) at Node 8 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N8RAYl'] = False # (deg/s^2); Sectional angular/rotational accelerations (absolute) at Node 8 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N8RAZl'] = False # (deg/s^2); Sectional angular/rotational accelerations (absolute) at Node 8 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N9RAXl'] = False # (deg/s^2); Sectional angular/rotational accelerations (absolute) at Node 9 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N9RAYl'] = False # (deg/s^2); Sectional angular/rotational accelerations (absolute) at Node 9 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N9RAZl'] = False # (deg/s^2); Sectional angular/rotational accelerations (absolute) at Node 9 expressed in l; l: a floating coordinate system local to the deflected beam + +# Applied Loads +BeamDyn['N1PFxl'] = False # (N); Applied point forces at Node 1 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N1PFyl'] = False # (N); Applied point forces at Node 1 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N1PFzl'] = False # (N); Applied point forces at Node 1 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N2PFxl'] = False # (N); Applied point forces at Node 2 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N2PFyl'] = False # (N); Applied point forces at Node 2 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N2PFzl'] = False # (N); Applied point forces at Node 2 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N3PFxl'] = False # (N); Applied point forces at Node 3 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N3PFyl'] = False # (N); Applied point forces at Node 3 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N3PFzl'] = False # (N); Applied point forces at Node 3 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N4PFxl'] = False # (N); Applied point forces at Node 4 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N4PFyl'] = False # (N); Applied point forces at Node 4 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N4PFzl'] = False # (N); Applied point forces at Node 4 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N5PFxl'] = False # (N); Applied point forces at Node 5 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N5PFyl'] = False # (N); Applied point forces at Node 5 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N5PFzl'] = False # (N); Applied point forces at Node 5 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N6PFxl'] = False # (N); Applied point forces at Node 6 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N6PFyl'] = False # (N); Applied point forces at Node 6 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N6PFzl'] = False # (N); Applied point forces at Node 6 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N7PFxl'] = False # (N); Applied point forces at Node 7 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N7PFyl'] = False # (N); Applied point forces at Node 7 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N7PFzl'] = False # (N); Applied point forces at Node 7 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N8PFxl'] = False # (N); Applied point forces at Node 8 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N8PFyl'] = False # (N); Applied point forces at Node 8 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N8PFzl'] = False # (N); Applied point forces at Node 8 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N9PFxl'] = False # (N); Applied point forces at Node 9 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N9PFyl'] = False # (N); Applied point forces at Node 9 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N9PFzl'] = False # (N); Applied point forces at Node 9 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N1PMxl'] = False # (N-m); Applied point moments at Node 1 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N1PMyl'] = False # (N-m); Applied point moments at Node 1 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N1PMzl'] = False # (N-m); Applied point moments at Node 1 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N2PMxl'] = False # (N-m); Applied point moments at Node 2 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N2PMyl'] = False # (N-m); Applied point moments at Node 2 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N2PMzl'] = False # (N-m); Applied point moments at Node 2 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N3PMxl'] = False # (N-m); Applied point moments at Node 3 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N3PMyl'] = False # (N-m); Applied point moments at Node 3 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N3PMzl'] = False # (N-m); Applied point moments at Node 3 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N4PMxl'] = False # (N-m); Applied point moments at Node 4 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N4PMyl'] = False # (N-m); Applied point moments at Node 4 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N4PMzl'] = False # (N-m); Applied point moments at Node 4 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N5PMxl'] = False # (N-m); Applied point moments at Node 5 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N5PMyl'] = False # (N-m); Applied point moments at Node 5 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N5PMzl'] = False # (N-m); Applied point moments at Node 5 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N6PMxl'] = False # (N-m); Applied point moments at Node 6 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N6PMyl'] = False # (N-m); Applied point moments at Node 6 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N6PMzl'] = False # (N-m); Applied point moments at Node 6 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N7PMxl'] = False # (N-m); Applied point moments at Node 7 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N7PMyl'] = False # (N-m); Applied point moments at Node 7 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N7PMzl'] = False # (N-m); Applied point moments at Node 7 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N8PMxl'] = False # (N-m); Applied point moments at Node 8 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N8PMyl'] = False # (N-m); Applied point moments at Node 8 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N8PMzl'] = False # (N-m); Applied point moments at Node 8 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N9PMxl'] = False # (N-m); Applied point moments at Node 9 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N9PMyl'] = False # (N-m); Applied point moments at Node 9 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N9PMzl'] = False # (N-m); Applied point moments at Node 9 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N1DFxl'] = False # (N/m); Applied distributed forces at Node 1 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N1DFyl'] = False # (N/m); Applied distributed forces at Node 1 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N1DFzl'] = False # (N/m); Applied distributed forces at Node 1 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N2DFxl'] = False # (N/m); Applied distributed forces at Node 2 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N2DFyl'] = False # (N/m); Applied distributed forces at Node 2 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N2DFzl'] = False # (N/m); Applied distributed forces at Node 2 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N3DFxl'] = False # (N/m); Applied distributed forces at Node 3 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N3DFyl'] = False # (N/m); Applied distributed forces at Node 3 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N3DFzl'] = False # (N/m); Applied distributed forces at Node 3 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N4DFxl'] = False # (N/m); Applied distributed forces at Node 4 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N4DFyl'] = False # (N/m); Applied distributed forces at Node 4 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N4DFzl'] = False # (N/m); Applied distributed forces at Node 4 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N5DFxl'] = False # (N/m); Applied distributed forces at Node 5 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N5DFyl'] = False # (N/m); Applied distributed forces at Node 5 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N5DFzl'] = False # (N/m); Applied distributed forces at Node 5 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N6DFxl'] = False # (N/m); Applied distributed forces at Node 6 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N6DFyl'] = False # (N/m); Applied distributed forces at Node 6 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N6DFzl'] = False # (N/m); Applied distributed forces at Node 6 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N7DFxl'] = False # (N/m); Applied distributed forces at Node 7 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N7DFyl'] = False # (N/m); Applied distributed forces at Node 7 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N7DFzl'] = False # (N/m); Applied distributed forces at Node 7 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N8DFxl'] = False # (N/m); Applied distributed forces at Node 8 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N8DFyl'] = False # (N/m); Applied distributed forces at Node 8 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N8DFzl'] = False # (N/m); Applied distributed forces at Node 8 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N9DFxl'] = False # (N/m); Applied distributed forces at Node 9 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N9DFyl'] = False # (N/m); Applied distributed forces at Node 9 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N9DFzl'] = False # (N/m); Applied distributed forces at Node 9 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N1DMxl'] = False # (N-m/m); Applied distributed moments at Node 1 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N1DMyl'] = False # (N-m/m); Applied distributed moments at Node 1 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N1DMzl'] = False # (N-m/m); Applied distributed moments at Node 1 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N2DMxl'] = False # (N-m/m); Applied distributed moments at Node 2 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N2DMyl'] = False # (N-m/m); Applied distributed moments at Node 2 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N2DMzl'] = False # (N-m/m); Applied distributed moments at Node 2 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N3DMxl'] = False # (N-m/m); Applied distributed moments at Node 3 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N3DMyl'] = False # (N-m/m); Applied distributed moments at Node 3 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N3DMzl'] = False # (N-m/m); Applied distributed moments at Node 3 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N4DMxl'] = False # (N-m/m); Applied distributed moments at Node 4 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N4DMyl'] = False # (N-m/m); Applied distributed moments at Node 4 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N4DMzl'] = False # (N-m/m); Applied distributed moments at Node 4 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N5DMxl'] = False # (N-m/m); Applied distributed moments at Node 5 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N5DMyl'] = False # (N-m/m); Applied distributed moments at Node 5 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N5DMzl'] = False # (N-m/m); Applied distributed moments at Node 5 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N6DMxl'] = False # (N-m/m); Applied distributed moments at Node 6 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N6DMyl'] = False # (N-m/m); Applied distributed moments at Node 6 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N6DMzl'] = False # (N-m/m); Applied distributed moments at Node 6 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N7DMxl'] = False # (N-m/m); Applied distributed moments at Node 7 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N7DMyl'] = False # (N-m/m); Applied distributed moments at Node 7 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N7DMzl'] = False # (N-m/m); Applied distributed moments at Node 7 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N8DMxl'] = False # (N-m/m); Applied distributed moments at Node 8 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N8DMyl'] = False # (N-m/m); Applied distributed moments at Node 8 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N8DMzl'] = False # (N-m/m); Applied distributed moments at Node 8 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N9DMxl'] = False # (N-m/m); Applied distributed moments at Node 9 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N9DMyl'] = False # (N-m/m); Applied distributed moments at Node 9 expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn['N9DMzl'] = False # (N-m/m); Applied distributed moments at Node 9 expressed in l; l: a floating coordinate system local to the deflected beam + +# Pitch Actuator +BeamDyn['PAngInp'] = False # (deg); Pitch angle input; +BeamDyn['PAngAct'] = False # (deg); Actual pitch angle ; +BeamDyn['PRatAct'] = False # (deg/s); Actual pitch rate; +BeamDyn['PAccAct'] = False # (deg/s^2); Actual pitch acceleration; + + +""" ServoDyn """ +ServoDyn = {} + +# Airfoil control +ServoDyn['BlAirFlC1'] = False # (-); Blade 1 airfoil control command; Same units as provided in airfoil tables of AD15 (UserProp) +ServoDyn['BlFlap1'] = False # (-); Blade 1 airfoil control command; Same units as provided in airfoil tables of AD15 (UserProp) +ServoDyn['BlAirFlC2'] = False # (-); Blade 2 airfoil control command; Same units as provided in airfoil tables of AD15 (UserProp) +ServoDyn['BlFlap2'] = False # (-); Blade 2 airfoil control command; Same units as provided in airfoil tables of AD15 (UserProp) +ServoDyn['BlAirFlC3'] = False # (-); Blade 3 airfoil control command; Same units as provided in airfoil tables of AD15 (UserProp) +ServoDyn['BlFlap3'] = False # (-); Blade 3 airfoil control command; Same units as provided in airfoil tables of AD15 (UserProp) + +# Pitch Control +ServoDyn['BlPitchC1'] = False # (deg); Blade 1 pitch angle command; Positive towards feather about the minus zc1- and minus zb1-axes +ServoDyn['BlPitchC2'] = False # (deg); Blade 2 pitch angle command; Positive towards feather about the minus zc2- and minus zb2-axes +ServoDyn['BlPitchC3'] = False # (deg); Blade 3 pitch angle command; Positive towards feather about the minus zc3- and minus zb3-axes + +# Generator and Torque Control +ServoDyn['GenTq'] = False # (kN-m); Electrical generator torque; Positive reflects power extracted and negative represents a motoring-up situation (power input) +ServoDyn['GenPwr'] = False # (kW); Electrical generator power; Same sign as GenTq + +# High Speed Shaft Brake +ServoDyn['HSSBrTqC'] = False # (kN-m); High-speed shaft brake torque command (i.e., the commanded moment applied to the high-speed shaft by the brake); Always positive (indicating dissipation of power) + +# Nacelle Yaw Control +ServoDyn['YawMomCom'] = False # (kN-m); Nacelle yaw moment command; About the zl- and zp-axes +ServoDyn['YawMom'] = False # (kN-m); Nacelle yaw moment command; About the zl- and zp-axes + +# Nacelle Structural Control (StC) +ServoDyn['NStC1_XQ'] = False # (m); Nacelle StC #1 -- X position (displacement); Relative to rest position in StC reference frame +ServoDyn['NStC1_XQD'] = False # (m/s); Nacelle StC #1 -- X velocity; Relative to nacelle in StC reference frame +ServoDyn['NStC1_YQ'] = False # (m); Nacelle StC #1 -- Y position (displacement); Relative to rest position in StC reference frame +ServoDyn['NStC1_YQD'] = False # (m/s); Nacelle StC #1 -- Y velocity; Relative to nacelle in StC reference frame +ServoDyn['NStC1_ZQ'] = False # (m); Nacelle StC #1 -- Z position (displacement); Relative to rest position in StC reference frame +ServoDyn['NStC1_ZQD'] = False # (m/s); Nacelle StC #1 -- Z velocity; Relative to nacelle in StC reference frame +ServoDyn['NStC1_Fxi'] = False # (kN); Nacelle StC #1 -- X resulting force; Inertial (global) coordinates +ServoDyn['NStC1_Fyi'] = False # (kN); Nacelle StC #1 -- Y resulting force; Inertial (global) coordinates +ServoDyn['NStC1_Fzi'] = False # (kN); Nacelle StC #1 -- Z resulting force; Inertial (global) coordinates +ServoDyn['NStC1_Mxi'] = False # (kN-m); Nacelle StC #1 -- X resulting moment; Inertial (global) coordinates +ServoDyn['NStC1_Myi'] = False # (kN-m); Nacelle StC #1 -- Y resulting moment; Inertial (global) coordinates +ServoDyn['NStC1_Mzi'] = False # (kN-m); Nacelle StC #1 -- Z resulting moment; Inertial (global) coordinates +ServoDyn['NStC1_Fxl'] = False # (kN); Nacelle StC #1 -- X resulting force; Local StC coordinates +ServoDyn['NStC1_Fyl'] = False # (kN); Nacelle StC #1 -- Y resulting force; Local StC coordinates +ServoDyn['NStC1_Fzl'] = False # (kN); Nacelle StC #1 -- Z resulting force; Local StC coordinates +ServoDyn['NStC1_Mxl'] = False # (kN-m); Nacelle StC #1 -- X resulting moment; Local StC coordinates +ServoDyn['NStC1_Myl'] = False # (kN-m); Nacelle StC #1 -- Y resulting moment; Local StC coordinates +ServoDyn['NStC1_Mzl'] = False # (kN-m); Nacelle StC #1 -- Z resulting moment; Local StC coordinates +ServoDyn['NStC2_XQ'] = False # (m); Nacelle StC #2 -- X position (displacement); Relative to rest position in StC reference frame +ServoDyn['NStC2_XQD'] = False # (m/s); Nacelle StC #2 -- X velocity; Relative to nacelle in StC reference frame +ServoDyn['NStC2_YQ'] = False # (m); Nacelle StC #2 -- Y position (displacement); Relative to rest position in StC reference frame +ServoDyn['NStC2_YQD'] = False # (m/s); Nacelle StC #2 -- Y velocity; Relative to nacelle in StC reference frame +ServoDyn['NStC2_ZQ'] = False # (m); Nacelle StC #2 -- Z position (displacement); Relative to rest position in StC reference frame +ServoDyn['NStC2_ZQD'] = False # (m/s); Nacelle StC #2 -- Z velocity; Relative to nacelle in StC reference frame +ServoDyn['NStC2_Fxi'] = False # (kN); Nacelle StC #2 -- X resulting force; Inertial (global) coordinates +ServoDyn['NStC2_Fyi'] = False # (kN); Nacelle StC #2 -- Y resulting force; Inertial (global) coordinates +ServoDyn['NStC2_Fzi'] = False # (kN); Nacelle StC #2 -- Z resulting force; Inertial (global) coordinates +ServoDyn['NStC2_Mxi'] = False # (kN-m); Nacelle StC #2 -- X resulting moment; Inertial (global) coordinates +ServoDyn['NStC2_Myi'] = False # (kN-m); Nacelle StC #2 -- Y resulting moment; Inertial (global) coordinates +ServoDyn['NStC2_Mzi'] = False # (kN-m); Nacelle StC #2 -- Z resulting moment; Inertial (global) coordinates +ServoDyn['NStC2_Fxl'] = False # (kN); Nacelle StC #2 -- X resulting force; Local StC coordinates +ServoDyn['NStC2_Fyl'] = False # (kN); Nacelle StC #2 -- Y resulting force; Local StC coordinates +ServoDyn['NStC2_Fzl'] = False # (kN); Nacelle StC #2 -- Z resulting force; Local StC coordinates +ServoDyn['NStC2_Mxl'] = False # (kN-m); Nacelle StC #2 -- X resulting moment; Local StC coordinates +ServoDyn['NStC2_Myl'] = False # (kN-m); Nacelle StC #2 -- Y resulting moment; Local StC coordinates +ServoDyn['NStC2_Mzl'] = False # (kN-m); Nacelle StC #2 -- Z resulting moment; Local StC coordinates +ServoDyn['NStC3_XQ'] = False # (m); Nacelle StC #3 -- X position (displacement); Relative to rest position in StC reference frame +ServoDyn['NStC3_XQD'] = False # (m/s); Nacelle StC #3 -- X velocity; Relative to nacelle in StC reference frame +ServoDyn['NStC3_YQ'] = False # (m); Nacelle StC #3 -- Y position (displacement); Relative to rest position in StC reference frame +ServoDyn['NStC3_YQD'] = False # (m/s); Nacelle StC #3 -- Y velocity; Relative to nacelle in StC reference frame +ServoDyn['NStC3_ZQ'] = False # (m); Nacelle StC #3 -- Z position (displacement); Relative to rest position in StC reference frame +ServoDyn['NStC3_ZQD'] = False # (m/s); Nacelle StC #3 -- Z velocity; Relative to nacelle in StC reference frame +ServoDyn['NStC3_Fxi'] = False # (kN); Nacelle StC #3 -- X resulting force; Inertial (global) coordinates +ServoDyn['NStC3_Fyi'] = False # (kN); Nacelle StC #3 -- Y resulting force; Inertial (global) coordinates +ServoDyn['NStC3_Fzi'] = False # (kN); Nacelle StC #3 -- Z resulting force; Inertial (global) coordinates +ServoDyn['NStC3_Mxi'] = False # (kN-m); Nacelle StC #3 -- X resulting moment; Inertial (global) coordinates +ServoDyn['NStC3_Myi'] = False # (kN-m); Nacelle StC #3 -- Y resulting moment; Inertial (global) coordinates +ServoDyn['NStC3_Mzi'] = False # (kN-m); Nacelle StC #3 -- Z resulting moment; Inertial (global) coordinates +ServoDyn['NStC3_Fxl'] = False # (kN); Nacelle StC #3 -- X resulting force; Local StC coordinates +ServoDyn['NStC3_Fyl'] = False # (kN); Nacelle StC #3 -- Y resulting force; Local StC coordinates +ServoDyn['NStC3_Fzl'] = False # (kN); Nacelle StC #3 -- Z resulting force; Local StC coordinates +ServoDyn['NStC3_Mxl'] = False # (kN-m); Nacelle StC #3 -- X resulting moment; Local StC coordinates +ServoDyn['NStC3_Myl'] = False # (kN-m); Nacelle StC #3 -- Y resulting moment; Local StC coordinates +ServoDyn['NStC3_Mzl'] = False # (kN-m); Nacelle StC #3 -- Z resulting moment; Local StC coordinates +ServoDyn['NStC4_XQ'] = False # (m); Nacelle StC #4 -- X position (displacement); Relative to rest position in StC reference frame +ServoDyn['NStC4_XQD'] = False # (m/s); Nacelle StC #4 -- X velocity; Relative to nacelle in StC reference frame +ServoDyn['NStC4_YQ'] = False # (m); Nacelle StC #4 -- Y position (displacement); Relative to rest position in StC reference frame +ServoDyn['NStC4_YQD'] = False # (m/s); Nacelle StC #4 -- Y velocity; Relative to nacelle in StC reference frame +ServoDyn['NStC4_ZQ'] = False # (m); Nacelle StC #4 -- Z position (displacement); Relative to rest position in StC reference frame +ServoDyn['NStC4_ZQD'] = False # (m/s); Nacelle StC #4 -- Z velocity; Relative to nacelle in StC reference frame +ServoDyn['NStC4_Fxi'] = False # (kN); Nacelle StC #4 -- X resulting force; Inertial (global) coordinates +ServoDyn['NStC4_Fyi'] = False # (kN); Nacelle StC #4 -- Y resulting force; Inertial (global) coordinates +ServoDyn['NStC4_Fzi'] = False # (kN); Nacelle StC #4 -- Z resulting force; Inertial (global) coordinates +ServoDyn['NStC4_Mxi'] = False # (kN-m); Nacelle StC #4 -- X resulting moment; Inertial (global) coordinates +ServoDyn['NStC4_Myi'] = False # (kN-m); Nacelle StC #4 -- Y resulting moment; Inertial (global) coordinates +ServoDyn['NStC4_Mzi'] = False # (kN-m); Nacelle StC #4 -- Z resulting moment; Inertial (global) coordinates +ServoDyn['NStC4_Fxl'] = False # (kN); Nacelle StC #4 -- X resulting force; Local StC coordinates +ServoDyn['NStC4_Fyl'] = False # (kN); Nacelle StC #4 -- Y resulting force; Local StC coordinates +ServoDyn['NStC4_Fzl'] = False # (kN); Nacelle StC #4 -- Z resulting force; Local StC coordinates +ServoDyn['NStC4_Mxl'] = False # (kN-m); Nacelle StC #4 -- X resulting moment; Local StC coordinates +ServoDyn['NStC4_Myl'] = False # (kN-m); Nacelle StC #4 -- Y resulting moment; Local StC coordinates +ServoDyn['NStC4_Mzl'] = False # (kN-m); Nacelle StC #4 -- Z resulting moment; Local StC coordinates + +# Tower Structural Control (StC) +ServoDyn['TStC1_XQ'] = False # (m); Tower StC #1 -- X position (displacement); Relative to rest position in StC reference frame +ServoDyn['TStC1_XQD'] = False # (m/s); Tower StC #1 -- X velocity; Relative to nacelle in StC reference frame +ServoDyn['TStC1_YQ'] = False # (m); Tower StC #1 -- Y position (displacement); Relative to rest position in StC reference frame +ServoDyn['TStC1_YQD'] = False # (m/s); Tower StC #1 -- Y velocity; Relative to nacelle in StC reference frame +ServoDyn['TStC1_ZQ'] = False # (m); Tower StC #1 -- Z position (displacement); Relative to rest position in StC reference frame +ServoDyn['TStC1_ZQD'] = False # (m/s); Tower StC #1 -- Z velocity; Relative to nacelle in StC reference frame +ServoDyn['TStC1_Fxi'] = False # (kN); Tower StC #1 -- X resulting force; Inertial (global) coordinates +ServoDyn['TStC1_Fyi'] = False # (kN); Tower StC #1 -- Y resulting force; Inertial (global) coordinates +ServoDyn['TStC1_Fzi'] = False # (kN); Tower StC #1 -- Z resulting force; Inertial (global) coordinates +ServoDyn['TStC1_Mxi'] = False # (kN-m); Tower StC #1 -- X resulting moment; Inertial (global) coordinates +ServoDyn['TStC1_Myi'] = False # (kN-m); Tower StC #1 -- Y resulting moment; Inertial (global) coordinates +ServoDyn['TStC1_Mzi'] = False # (kN-m); Tower StC #1 -- Z resulting moment; Inertial (global) coordinates +ServoDyn['TStC1_Fxl'] = False # (kN); Tower StC #1 -- X resulting force; Local StC coordinates +ServoDyn['TStC1_Fyl'] = False # (kN); Tower StC #1 -- Y resulting force; Local StC coordinates +ServoDyn['TStC1_Fzl'] = False # (kN); Tower StC #1 -- Z resulting force; Local StC coordinates +ServoDyn['TStC1_Mxl'] = False # (kN-m); Tower StC #1 -- X resulting moment; Local StC coordinates +ServoDyn['TStC1_Myl'] = False # (kN-m); Tower StC #1 -- Y resulting moment; Local StC coordinates +ServoDyn['TStC1_Mzl'] = False # (kN-m); Tower StC #1 -- Z resulting moment; Local StC coordinates +ServoDyn['TStC2_XQ'] = False # (m); Tower StC #2 -- X position (displacement); Relative to rest position in StC reference frame +ServoDyn['TStC2_XQD'] = False # (m/s); Tower StC #2 -- X velocity; Relative to nacelle in StC reference frame +ServoDyn['TStC2_YQ'] = False # (m); Tower StC #2 -- Y position (displacement); Relative to rest position in StC reference frame +ServoDyn['TStC2_YQD'] = False # (m/s); Tower StC #2 -- Y velocity; Relative to nacelle in StC reference frame +ServoDyn['TStC2_ZQ'] = False # (m); Tower StC #2 -- Z position (displacement); Relative to rest position in StC reference frame +ServoDyn['TStC2_ZQD'] = False # (m/s); Tower StC #2 -- Z velocity; Relative to nacelle in StC reference frame +ServoDyn['TStC2_Fxi'] = False # (kN); Tower StC #2 -- X resulting force; Inertial (global) coordinates +ServoDyn['TStC2_Fyi'] = False # (kN); Tower StC #2 -- Y resulting force; Inertial (global) coordinates +ServoDyn['TStC2_Fzi'] = False # (kN); Tower StC #2 -- Z resulting force; Inertial (global) coordinates +ServoDyn['TStC2_Mxi'] = False # (kN-m); Tower StC #2 -- X resulting moment; Inertial (global) coordinates +ServoDyn['TStC2_Myi'] = False # (kN-m); Tower StC #2 -- Y resulting moment; Inertial (global) coordinates +ServoDyn['TStC2_Mzi'] = False # (kN-m); Tower StC #2 -- Z resulting moment; Inertial (global) coordinates +ServoDyn['TStC2_Fxl'] = False # (kN); Tower StC #2 -- X resulting force; Local StC coordinates +ServoDyn['TStC2_Fyl'] = False # (kN); Tower StC #2 -- Y resulting force; Local StC coordinates +ServoDyn['TStC2_Fzl'] = False # (kN); Tower StC #2 -- Z resulting force; Local StC coordinates +ServoDyn['TStC2_Mxl'] = False # (kN-m); Tower StC #2 -- X resulting moment; Local StC coordinates +ServoDyn['TStC2_Myl'] = False # (kN-m); Tower StC #2 -- Y resulting moment; Local StC coordinates +ServoDyn['TStC2_Mzl'] = False # (kN-m); Tower StC #2 -- Z resulting moment; Local StC coordinates +ServoDyn['TStC3_XQ'] = False # (m); Tower StC #3 -- X position (displacement); Relative to rest position in StC reference frame +ServoDyn['TStC3_XQD'] = False # (m/s); Tower StC #3 -- X velocity; Relative to nacelle in StC reference frame +ServoDyn['TStC3_YQ'] = False # (m); Tower StC #3 -- Y position (displacement); Relative to rest position in StC reference frame +ServoDyn['TStC3_YQD'] = False # (m/s); Tower StC #3 -- Y velocity; Relative to nacelle in StC reference frame +ServoDyn['TStC3_ZQ'] = False # (m); Tower StC #3 -- Z position (displacement); Relative to rest position in StC reference frame +ServoDyn['TStC3_ZQD'] = False # (m/s); Tower StC #3 -- Z velocity; Relative to nacelle in StC reference frame +ServoDyn['TStC3_Fxi'] = False # (kN); Tower StC #3 -- X resulting force; Inertial (global) coordinates +ServoDyn['TStC3_Fyi'] = False # (kN); Tower StC #3 -- Y resulting force; Inertial (global) coordinates +ServoDyn['TStC3_Fzi'] = False # (kN); Tower StC #3 -- Z resulting force; Inertial (global) coordinates +ServoDyn['TStC3_Mxi'] = False # (kN-m); Tower StC #3 -- X resulting moment; Inertial (global) coordinates +ServoDyn['TStC3_Myi'] = False # (kN-m); Tower StC #3 -- Y resulting moment; Inertial (global) coordinates +ServoDyn['TStC3_Mzi'] = False # (kN-m); Tower StC #3 -- Z resulting moment; Inertial (global) coordinates +ServoDyn['TStC3_Fxl'] = False # (kN); Tower StC #3 -- X resulting force; Local StC coordinates +ServoDyn['TStC3_Fyl'] = False # (kN); Tower StC #3 -- Y resulting force; Local StC coordinates +ServoDyn['TStC3_Fzl'] = False # (kN); Tower StC #3 -- Z resulting force; Local StC coordinates +ServoDyn['TStC3_Mxl'] = False # (kN-m); Tower StC #3 -- X resulting moment; Local StC coordinates +ServoDyn['TStC3_Myl'] = False # (kN-m); Tower StC #3 -- Y resulting moment; Local StC coordinates +ServoDyn['TStC3_Mzl'] = False # (kN-m); Tower StC #3 -- Z resulting moment; Local StC coordinates +ServoDyn['TStC4_XQ'] = False # (m); Tower StC #4 -- X position (displacement); Relative to rest position in StC reference frame +ServoDyn['TStC4_XQD'] = False # (m/s); Tower StC #4 -- X velocity; Relative to nacelle in StC reference frame +ServoDyn['TStC4_YQ'] = False # (m); Tower StC #4 -- Y position (displacement); Relative to rest position in StC reference frame +ServoDyn['TStC4_YQD'] = False # (m/s); Tower StC #4 -- Y velocity; Relative to nacelle in StC reference frame +ServoDyn['TStC4_ZQ'] = False # (m); Tower StC #4 -- Z position (displacement); Relative to rest position in StC reference frame +ServoDyn['TStC4_ZQD'] = False # (m/s); Tower StC #4 -- Z velocity; Relative to nacelle in StC reference frame +ServoDyn['TStC4_Fxi'] = False # (kN); Tower StC #4 -- X resulting force; Inertial (global) coordinates +ServoDyn['TStC4_Fyi'] = False # (kN); Tower StC #4 -- Y resulting force; Inertial (global) coordinates +ServoDyn['TStC4_Fzi'] = False # (kN); Tower StC #4 -- Z resulting force; Inertial (global) coordinates +ServoDyn['TStC4_Mxi'] = False # (kN-m); Tower StC #4 -- X resulting moment; Inertial (global) coordinates +ServoDyn['TStC4_Myi'] = False # (kN-m); Tower StC #4 -- Y resulting moment; Inertial (global) coordinates +ServoDyn['TStC4_Mzi'] = False # (kN-m); Tower StC #4 -- Z resulting moment; Inertial (global) coordinates +ServoDyn['TStC4_Fxl'] = False # (kN); Tower StC #4 -- X resulting force; Local StC coordinates +ServoDyn['TStC4_Fyl'] = False # (kN); Tower StC #4 -- Y resulting force; Local StC coordinates +ServoDyn['TStC4_Fzl'] = False # (kN); Tower StC #4 -- Z resulting force; Local StC coordinates +ServoDyn['TStC4_Mxl'] = False # (kN-m); Tower StC #4 -- X resulting moment; Local StC coordinates +ServoDyn['TStC4_Myl'] = False # (kN-m); Tower StC #4 -- Y resulting moment; Local StC coordinates +ServoDyn['TStC4_Mzl'] = False # (kN-m); Tower StC #4 -- Z resulting moment; Local StC coordinates + +# Blade Structural Control (StC) +ServoDyn['BStC1_B1_XQ'] = False # (m); Blade StC #1 Blade #1 -- X position (displacement); Relative to rest position in StC reference frame +ServoDyn['BStC1_B1_XQD'] = False # (m/s); Blade StC #1 Blade #1 -- X velocity; Relative to nacelle in StC reference frame +ServoDyn['BStC1_B1_YQ'] = False # (m); Blade StC #1 Blade #1 -- Y position (displacement); Relative to rest position in StC reference frame +ServoDyn['BStC1_B1_YQD'] = False # (m/s); Blade StC #1 Blade #1 -- Y velocity; Relative to nacelle in StC reference frame +ServoDyn['BStC1_B1_ZQ'] = False # (m); Blade StC #1 Blade #1 -- Z position (displacement); Relative to rest position in StC reference frame +ServoDyn['BStC1_B1_ZQD'] = False # (m/s); Blade StC #1 Blade #1 -- Z velocity; Relative to nacelle in StC reference frame +ServoDyn['BStC1_B1_Fxi'] = False # (kN); Blade StC #1 Blade #1 -- X resulting force; Inertial (global) coordinates +ServoDyn['BStC1_B1_Fyi'] = False # (kN); Blade StC #1 Blade #1 -- Y resulting force; Inertial (global) coordinates +ServoDyn['BStC1_B1_Fzi'] = False # (kN); Blade StC #1 Blade #1 -- Z resulting force; Inertial (global) coordinates +ServoDyn['BStC1_B1_Mxi'] = False # (kN-m); Blade StC #1 Blade #1 -- X resulting moment; Inertial (global) coordinates +ServoDyn['BStC1_B1_Myi'] = False # (kN-m); Blade StC #1 Blade #1 -- Y resulting moment; Inertial (global) coordinates +ServoDyn['BStC1_B1_Mzi'] = False # (kN-m); Blade StC #1 Blade #1 -- Z resulting moment; Inertial (global) coordinates +ServoDyn['BStC1_B1_Fxl'] = False # (kN); Blade StC #1 Blade #1 -- X resulting force; Local StC coordinates +ServoDyn['BStC1_B1_Fyl'] = False # (kN); Blade StC #1 Blade #1 -- Y resulting force; Local StC coordinates +ServoDyn['BStC1_B1_Fzl'] = False # (kN); Blade StC #1 Blade #1 -- Z resulting force; Local StC coordinates +ServoDyn['BStC1_B1_Mxl'] = False # (kN-m); Blade StC #1 Blade #1 -- X resulting moment; Local StC coordinates +ServoDyn['BStC1_B1_Myl'] = False # (kN-m); Blade StC #1 Blade #1 -- Y resulting moment; Local StC coordinates +ServoDyn['BStC1_B1_Mzl'] = False # (kN-m); Blade StC #1 Blade #1 -- Z resulting moment; Local StC coordinates +ServoDyn['BStC2_B1_XQ'] = False # (m); Blade StC #2 Blade #1 -- X position (displacement); Relative to rest position in StC reference frame +ServoDyn['BStC2_B1_XQD'] = False # (m/s); Blade StC #2 Blade #1 -- X velocity; Relative to nacelle in StC reference frame +ServoDyn['BStC2_B1_YQ'] = False # (m); Blade StC #2 Blade #1 -- Y position (displacement); Relative to rest position in StC reference frame +ServoDyn['BStC2_B1_YQD'] = False # (m/s); Blade StC #2 Blade #1 -- Y velocity; Relative to nacelle in StC reference frame +ServoDyn['BStC2_B1_ZQ'] = False # (m); Blade StC #2 Blade #1 -- Z position (displacement); Relative to rest position in StC reference frame +ServoDyn['BStC2_B1_ZQD'] = False # (m/s); Blade StC #2 Blade #1 -- Z velocity; Relative to nacelle in StC reference frame +ServoDyn['BStC2_B1_Fxi'] = False # (kN); Blade StC #2 Blade #1 -- X resulting force; Inertial (global) coordinates +ServoDyn['BStC2_B1_Fyi'] = False # (kN); Blade StC #2 Blade #1 -- Y resulting force; Inertial (global) coordinates +ServoDyn['BStC2_B1_Fzi'] = False # (kN); Blade StC #2 Blade #1 -- Z resulting force; Inertial (global) coordinates +ServoDyn['BStC2_B1_Mxi'] = False # (kN-m); Blade StC #2 Blade #1 -- X resulting moment; Inertial (global) coordinates +ServoDyn['BStC2_B1_Myi'] = False # (kN-m); Blade StC #2 Blade #1 -- Y resulting moment; Inertial (global) coordinates +ServoDyn['BStC2_B1_Mzi'] = False # (kN-m); Blade StC #2 Blade #1 -- Z resulting moment; Inertial (global) coordinates +ServoDyn['BStC2_B1_Fxl'] = False # (kN); Blade StC #2 Blade #1 -- X resulting force; Local StC coordinates +ServoDyn['BStC2_B1_Fyl'] = False # (kN); Blade StC #2 Blade #1 -- Y resulting force; Local StC coordinates +ServoDyn['BStC2_B1_Fzl'] = False # (kN); Blade StC #2 Blade #1 -- Z resulting force; Local StC coordinates +ServoDyn['BStC2_B1_Mxl'] = False # (kN-m); Blade StC #2 Blade #1 -- X resulting moment; Local StC coordinates +ServoDyn['BStC2_B1_Myl'] = False # (kN-m); Blade StC #2 Blade #1 -- Y resulting moment; Local StC coordinates +ServoDyn['BStC2_B1_Mzl'] = False # (kN-m); Blade StC #2 Blade #1 -- Z resulting moment; Local StC coordinates +ServoDyn['BStC3_B1_XQ'] = False # (m); Blade StC #3 Blade #1 -- X position (displacement); Relative to rest position in StC reference frame +ServoDyn['BStC3_B1_XQD'] = False # (m/s); Blade StC #3 Blade #1 -- X velocity; Relative to nacelle in StC reference frame +ServoDyn['BStC3_B1_YQ'] = False # (m); Blade StC #3 Blade #1 -- Y position (displacement); Relative to rest position in StC reference frame +ServoDyn['BStC3_B1_YQD'] = False # (m/s); Blade StC #3 Blade #1 -- Y velocity; Relative to nacelle in StC reference frame +ServoDyn['BStC3_B1_ZQ'] = False # (m); Blade StC #3 Blade #1 -- Z position (displacement); Relative to rest position in StC reference frame +ServoDyn['BStC3_B1_ZQD'] = False # (m/s); Blade StC #3 Blade #1 -- Z velocity; Relative to nacelle in StC reference frame +ServoDyn['BStC3_B1_Fxi'] = False # (kN); Blade StC #3 Blade #1 -- X resulting force; Inertial (global) coordinates +ServoDyn['BStC3_B1_Fyi'] = False # (kN); Blade StC #3 Blade #1 -- Y resulting force; Inertial (global) coordinates +ServoDyn['BStC3_B1_Fzi'] = False # (kN); Blade StC #3 Blade #1 -- Z resulting force; Inertial (global) coordinates +ServoDyn['BStC3_B1_Mxi'] = False # (kN-m); Blade StC #3 Blade #1 -- X resulting moment; Inertial (global) coordinates +ServoDyn['BStC3_B1_Myi'] = False # (kN-m); Blade StC #3 Blade #1 -- Y resulting moment; Inertial (global) coordinates +ServoDyn['BStC3_B1_Mzi'] = False # (kN-m); Blade StC #3 Blade #1 -- Z resulting moment; Inertial (global) coordinates +ServoDyn['BStC3_B1_Fxl'] = False # (kN); Blade StC #3 Blade #1 -- X resulting force; Local StC coordinates +ServoDyn['BStC3_B1_Fyl'] = False # (kN); Blade StC #3 Blade #1 -- Y resulting force; Local StC coordinates +ServoDyn['BStC3_B1_Fzl'] = False # (kN); Blade StC #3 Blade #1 -- Z resulting force; Local StC coordinates +ServoDyn['BStC3_B1_Mxl'] = False # (kN-m); Blade StC #3 Blade #1 -- X resulting moment; Local StC coordinates +ServoDyn['BStC3_B1_Myl'] = False # (kN-m); Blade StC #3 Blade #1 -- Y resulting moment; Local StC coordinates +ServoDyn['BStC3_B1_Mzl'] = False # (kN-m); Blade StC #3 Blade #1 -- Z resulting moment; Local StC coordinates +ServoDyn['BStC4_B1_XQ'] = False # (m); Blade StC #4 Blade #1 -- X position (displacement); Relative to rest position in StC reference frame +ServoDyn['BStC4_B1_XQD'] = False # (m/s); Blade StC #4 Blade #1 -- X velocity; Relative to nacelle in StC reference frame +ServoDyn['BStC4_B1_YQ'] = False # (m); Blade StC #4 Blade #1 -- Y position (displacement); Relative to rest position in StC reference frame +ServoDyn['BStC4_B1_YQD'] = False # (m/s); Blade StC #4 Blade #1 -- Y velocity; Relative to nacelle in StC reference frame +ServoDyn['BStC4_B1_ZQ'] = False # (m); Blade StC #4 Blade #1 -- Z position (displacement); Relative to rest position in StC reference frame +ServoDyn['BStC4_B1_ZQD'] = False # (m/s); Blade StC #4 Blade #1 -- Z velocity; Relative to nacelle in StC reference frame +ServoDyn['BStC4_B1_Fxi'] = False # (kN); Blade StC #4 Blade #1 -- X resulting force; Inertial (global) coordinates +ServoDyn['BStC4_B1_Fyi'] = False # (kN); Blade StC #4 Blade #1 -- Y resulting force; Inertial (global) coordinates +ServoDyn['BStC4_B1_Fzi'] = False # (kN); Blade StC #4 Blade #1 -- Z resulting force; Inertial (global) coordinates +ServoDyn['BStC4_B1_Mxi'] = False # (kN-m); Blade StC #4 Blade #1 -- X resulting moment; Inertial (global) coordinates +ServoDyn['BStC4_B1_Myi'] = False # (kN-m); Blade StC #4 Blade #1 -- Y resulting moment; Inertial (global) coordinates +ServoDyn['BStC4_B1_Mzi'] = False # (kN-m); Blade StC #4 Blade #1 -- Z resulting moment; Inertial (global) coordinates +ServoDyn['BStC4_B1_Fxl'] = False # (kN); Blade StC #4 Blade #1 -- X resulting force; Local StC coordinates +ServoDyn['BStC4_B1_Fyl'] = False # (kN); Blade StC #4 Blade #1 -- Y resulting force; Local StC coordinates +ServoDyn['BStC4_B1_Fzl'] = False # (kN); Blade StC #4 Blade #1 -- Z resulting force; Local StC coordinates +ServoDyn['BStC4_B1_Mxl'] = False # (kN-m); Blade StC #4 Blade #1 -- X resulting moment; Local StC coordinates +ServoDyn['BStC4_B1_Myl'] = False # (kN-m); Blade StC #4 Blade #1 -- Y resulting moment; Local StC coordinates +ServoDyn['BStC4_B1_Mzl'] = False # (kN-m); Blade StC #4 Blade #1 -- Z resulting moment; Local StC coordinates +ServoDyn['BStC1_B2_XQ'] = False # (m); Blade StC #1 Blade #2 -- X position (displacement); Relative to rest position in StC reference frame +ServoDyn['BStC1_B2_XQD'] = False # (m/s); Blade StC #1 Blade #2 -- X velocity; Relative to nacelle in StC reference frame +ServoDyn['BStC1_B2_YQ'] = False # (m); Blade StC #1 Blade #2 -- Y position (displacement); Relative to rest position in StC reference frame +ServoDyn['BStC1_B2_YQD'] = False # (m/s); Blade StC #1 Blade #2 -- Y velocity; Relative to nacelle in StC reference frame +ServoDyn['BStC1_B2_ZQ'] = False # (m); Blade StC #1 Blade #2 -- Z position (displacement); Relative to rest position in StC reference frame +ServoDyn['BStC1_B2_ZQD'] = False # (m/s); Blade StC #1 Blade #2 -- Z velocity; Relative to nacelle in StC reference frame +ServoDyn['BStC1_B2_Fxi'] = False # (kN); Blade StC #1 Blade #2 -- X resulting force; Inertial (global) coordinates +ServoDyn['BStC1_B2_Fyi'] = False # (kN); Blade StC #1 Blade #2 -- Y resulting force; Inertial (global) coordinates +ServoDyn['BStC1_B2_Fzi'] = False # (kN); Blade StC #1 Blade #2 -- Z resulting force; Inertial (global) coordinates +ServoDyn['BStC1_B2_Mxi'] = False # (kN-m); Blade StC #1 Blade #2 -- X resulting moment; Inertial (global) coordinates +ServoDyn['BStC1_B2_Myi'] = False # (kN-m); Blade StC #1 Blade #2 -- Y resulting moment; Inertial (global) coordinates +ServoDyn['BStC1_B2_Mzi'] = False # (kN-m); Blade StC #1 Blade #2 -- Z resulting moment; Inertial (global) coordinates +ServoDyn['BStC1_B2_Fxl'] = False # (kN); Blade StC #1 Blade #2 -- X resulting force; Local StC coordinates +ServoDyn['BStC1_B2_Fyl'] = False # (kN); Blade StC #1 Blade #2 -- Y resulting force; Local StC coordinates +ServoDyn['BStC1_B2_Fzl'] = False # (kN); Blade StC #1 Blade #2 -- Z resulting force; Local StC coordinates +ServoDyn['BStC1_B2_Mxl'] = False # (kN-m); Blade StC #1 Blade #2 -- X resulting moment; Local StC coordinates +ServoDyn['BStC1_B2_Myl'] = False # (kN-m); Blade StC #1 Blade #2 -- Y resulting moment; Local StC coordinates +ServoDyn['BStC1_B2_Mzl'] = False # (kN-m); Blade StC #1 Blade #2 -- Z resulting moment; Local StC coordinates +ServoDyn['BStC2_B2_XQ'] = False # (m); Blade StC #2 Blade #2 -- X position (displacement); Relative to rest position in StC reference frame +ServoDyn['BStC2_B2_XQD'] = False # (m/s); Blade StC #2 Blade #2 -- X velocity; Relative to nacelle in StC reference frame +ServoDyn['BStC2_B2_YQ'] = False # (m); Blade StC #2 Blade #2 -- Y position (displacement); Relative to rest position in StC reference frame +ServoDyn['BStC2_B2_YQD'] = False # (m/s); Blade StC #2 Blade #2 -- Y velocity; Relative to nacelle in StC reference frame +ServoDyn['BStC2_B2_ZQ'] = False # (m); Blade StC #2 Blade #2 -- Z position (displacement); Relative to rest position in StC reference frame +ServoDyn['BStC2_B2_ZQD'] = False # (m/s); Blade StC #2 Blade #2 -- Z velocity; Relative to nacelle in StC reference frame +ServoDyn['BStC2_B2_Fxi'] = False # (kN); Blade StC #2 Blade #2 -- X resulting force; Inertial (global) coordinates +ServoDyn['BStC2_B2_Fyi'] = False # (kN); Blade StC #2 Blade #2 -- Y resulting force; Inertial (global) coordinates +ServoDyn['BStC2_B2_Fzi'] = False # (kN); Blade StC #2 Blade #2 -- Z resulting force; Inertial (global) coordinates +ServoDyn['BStC2_B2_Mxi'] = False # (kN-m); Blade StC #2 Blade #2 -- X resulting moment; Inertial (global) coordinates +ServoDyn['BStC2_B2_Myi'] = False # (kN-m); Blade StC #2 Blade #2 -- Y resulting moment; Inertial (global) coordinates +ServoDyn['BStC2_B2_Mzi'] = False # (kN-m); Blade StC #2 Blade #2 -- Z resulting moment; Inertial (global) coordinates +ServoDyn['BStC2_B2_Fxl'] = False # (kN); Blade StC #2 Blade #2 -- X resulting force; Local StC coordinates +ServoDyn['BStC2_B2_Fyl'] = False # (kN); Blade StC #2 Blade #2 -- Y resulting force; Local StC coordinates +ServoDyn['BStC2_B2_Fzl'] = False # (kN); Blade StC #2 Blade #2 -- Z resulting force; Local StC coordinates +ServoDyn['BStC2_B2_Mxl'] = False # (kN-m); Blade StC #2 Blade #2 -- X resulting moment; Local StC coordinates +ServoDyn['BStC2_B2_Myl'] = False # (kN-m); Blade StC #2 Blade #2 -- Y resulting moment; Local StC coordinates +ServoDyn['BStC2_B2_Mzl'] = False # (kN-m); Blade StC #2 Blade #2 -- Z resulting moment; Local StC coordinates +ServoDyn['BStC3_B2_XQ'] = False # (m); Blade StC #3 Blade #2 -- X position (displacement); Relative to rest position in StC reference frame +ServoDyn['BStC3_B2_XQD'] = False # (m/s); Blade StC #3 Blade #2 -- X velocity; Relative to nacelle in StC reference frame +ServoDyn['BStC3_B2_YQ'] = False # (m); Blade StC #3 Blade #2 -- Y position (displacement); Relative to rest position in StC reference frame +ServoDyn['BStC3_B2_YQD'] = False # (m/s); Blade StC #3 Blade #2 -- Y velocity; Relative to nacelle in StC reference frame +ServoDyn['BStC3_B2_ZQ'] = False # (m); Blade StC #3 Blade #2 -- Z position (displacement); Relative to rest position in StC reference frame +ServoDyn['BStC3_B2_ZQD'] = False # (m/s); Blade StC #3 Blade #2 -- Z velocity; Relative to nacelle in StC reference frame +ServoDyn['BStC3_B2_Fxi'] = False # (kN); Blade StC #3 Blade #2 -- X resulting force; Inertial (global) coordinates +ServoDyn['BStC3_B2_Fyi'] = False # (kN); Blade StC #3 Blade #2 -- Y resulting force; Inertial (global) coordinates +ServoDyn['BStC3_B2_Fzi'] = False # (kN); Blade StC #3 Blade #2 -- Z resulting force; Inertial (global) coordinates +ServoDyn['BStC3_B2_Mxi'] = False # (kN-m); Blade StC #3 Blade #2 -- X resulting moment; Inertial (global) coordinates +ServoDyn['BStC3_B2_Myi'] = False # (kN-m); Blade StC #3 Blade #2 -- Y resulting moment; Inertial (global) coordinates +ServoDyn['BStC3_B2_Mzi'] = False # (kN-m); Blade StC #3 Blade #2 -- Z resulting moment; Inertial (global) coordinates +ServoDyn['BStC3_B2_Fxl'] = False # (kN); Blade StC #3 Blade #2 -- X resulting force; Local StC coordinates +ServoDyn['BStC3_B2_Fyl'] = False # (kN); Blade StC #3 Blade #2 -- Y resulting force; Local StC coordinates +ServoDyn['BStC3_B2_Fzl'] = False # (kN); Blade StC #3 Blade #2 -- Z resulting force; Local StC coordinates +ServoDyn['BStC3_B2_Mxl'] = False # (kN-m); Blade StC #3 Blade #2 -- X resulting moment; Local StC coordinates +ServoDyn['BStC3_B2_Myl'] = False # (kN-m); Blade StC #3 Blade #2 -- Y resulting moment; Local StC coordinates +ServoDyn['BStC3_B2_Mzl'] = False # (kN-m); Blade StC #3 Blade #2 -- Z resulting moment; Local StC coordinates +ServoDyn['BStC4_B2_XQ'] = False # (m); Blade StC #4 Blade #2 -- X position (displacement); Relative to rest position in StC reference frame +ServoDyn['BStC4_B2_XQD'] = False # (m/s); Blade StC #4 Blade #2 -- X velocity; Relative to nacelle in StC reference frame +ServoDyn['BStC4_B2_YQ'] = False # (m); Blade StC #4 Blade #2 -- Y position (displacement); Relative to rest position in StC reference frame +ServoDyn['BStC4_B2_YQD'] = False # (m/s); Blade StC #4 Blade #2 -- Y velocity; Relative to nacelle in StC reference frame +ServoDyn['BStC4_B2_ZQ'] = False # (m); Blade StC #4 Blade #2 -- Z position (displacement); Relative to rest position in StC reference frame +ServoDyn['BStC4_B2_ZQD'] = False # (m/s); Blade StC #4 Blade #2 -- Z velocity; Relative to nacelle in StC reference frame +ServoDyn['BStC4_B2_Fxi'] = False # (kN); Blade StC #4 Blade #2 -- X resulting force; Inertial (global) coordinates +ServoDyn['BStC4_B2_Fyi'] = False # (kN); Blade StC #4 Blade #2 -- Y resulting force; Inertial (global) coordinates +ServoDyn['BStC4_B2_Fzi'] = False # (kN); Blade StC #4 Blade #2 -- Z resulting force; Inertial (global) coordinates +ServoDyn['BStC4_B2_Mxi'] = False # (kN-m); Blade StC #4 Blade #2 -- X resulting moment; Inertial (global) coordinates +ServoDyn['BStC4_B2_Myi'] = False # (kN-m); Blade StC #4 Blade #2 -- Y resulting moment; Inertial (global) coordinates +ServoDyn['BStC4_B2_Mzi'] = False # (kN-m); Blade StC #4 Blade #2 -- Z resulting moment; Inertial (global) coordinates +ServoDyn['BStC4_B2_Fxl'] = False # (kN); Blade StC #4 Blade #2 -- X resulting force; Local StC coordinates +ServoDyn['BStC4_B2_Fyl'] = False # (kN); Blade StC #4 Blade #2 -- Y resulting force; Local StC coordinates +ServoDyn['BStC4_B2_Fzl'] = False # (kN); Blade StC #4 Blade #2 -- Z resulting force; Local StC coordinates +ServoDyn['BStC4_B2_Mxl'] = False # (kN-m); Blade StC #4 Blade #2 -- X resulting moment; Local StC coordinates +ServoDyn['BStC4_B2_Myl'] = False # (kN-m); Blade StC #4 Blade #2 -- Y resulting moment; Local StC coordinates +ServoDyn['BStC4_B2_Mzl'] = False # (kN-m); Blade StC #4 Blade #2 -- Z resulting moment; Local StC coordinates +ServoDyn['BStC1_B3_XQ'] = False # (m); Blade StC #1 Blade #3 -- X position (displacement); Relative to rest position in StC reference frame +ServoDyn['BStC1_B3_XQD'] = False # (m/s); Blade StC #1 Blade #3 -- X velocity; Relative to nacelle in StC reference frame +ServoDyn['BStC1_B3_YQ'] = False # (m); Blade StC #1 Blade #3 -- Y position (displacement); Relative to rest position in StC reference frame +ServoDyn['BStC1_B3_YQD'] = False # (m/s); Blade StC #1 Blade #3 -- Y velocity; Relative to nacelle in StC reference frame +ServoDyn['BStC1_B3_ZQ'] = False # (m); Blade StC #1 Blade #3 -- Z position (displacement); Relative to rest position in StC reference frame +ServoDyn['BStC1_B3_ZQD'] = False # (m/s); Blade StC #1 Blade #3 -- Z velocity; Relative to nacelle in StC reference frame +ServoDyn['BStC1_B3_Fxi'] = False # (kN); Blade StC #1 Blade #3 -- X resulting force; Inertial (global) coordinates +ServoDyn['BStC1_B3_Fyi'] = False # (kN); Blade StC #1 Blade #3 -- Y resulting force; Inertial (global) coordinates +ServoDyn['BStC1_B3_Fzi'] = False # (kN); Blade StC #1 Blade #3 -- Z resulting force; Inertial (global) coordinates +ServoDyn['BStC1_B3_Mxi'] = False # (kN-m); Blade StC #1 Blade #3 -- X resulting moment; Inertial (global) coordinates +ServoDyn['BStC1_B3_Myi'] = False # (kN-m); Blade StC #1 Blade #3 -- Y resulting moment; Inertial (global) coordinates +ServoDyn['BStC1_B3_Mzi'] = False # (kN-m); Blade StC #1 Blade #3 -- Z resulting moment; Inertial (global) coordinates +ServoDyn['BStC1_B3_Fxl'] = False # (kN); Blade StC #1 Blade #3 -- X resulting force; Local StC coordinates +ServoDyn['BStC1_B3_Fyl'] = False # (kN); Blade StC #1 Blade #3 -- Y resulting force; Local StC coordinates +ServoDyn['BStC1_B3_Fzl'] = False # (kN); Blade StC #1 Blade #3 -- Z resulting force; Local StC coordinates +ServoDyn['BStC1_B3_Mxl'] = False # (kN-m); Blade StC #1 Blade #3 -- X resulting moment; Local StC coordinates +ServoDyn['BStC1_B3_Myl'] = False # (kN-m); Blade StC #1 Blade #3 -- Y resulting moment; Local StC coordinates +ServoDyn['BStC1_B3_Mzl'] = False # (kN-m); Blade StC #1 Blade #3 -- Z resulting moment; Local StC coordinates +ServoDyn['BStC2_B3_XQ'] = False # (m); Blade StC #2 Blade #3 -- X position (displacement); Relative to rest position in StC reference frame +ServoDyn['BStC2_B3_XQD'] = False # (m/s); Blade StC #2 Blade #3 -- X velocity; Relative to nacelle in StC reference frame +ServoDyn['BStC2_B3_YQ'] = False # (m); Blade StC #2 Blade #3 -- Y position (displacement); Relative to rest position in StC reference frame +ServoDyn['BStC2_B3_YQD'] = False # (m/s); Blade StC #2 Blade #3 -- Y velocity; Relative to nacelle in StC reference frame +ServoDyn['BStC2_B3_ZQ'] = False # (m); Blade StC #2 Blade #3 -- Z position (displacement); Relative to rest position in StC reference frame +ServoDyn['BStC2_B3_ZQD'] = False # (m/s); Blade StC #2 Blade #3 -- Z velocity; Relative to nacelle in StC reference frame +ServoDyn['BStC2_B3_Fxi'] = False # (kN); Blade StC #2 Blade #3 -- X resulting force; Inertial (global) coordinates +ServoDyn['BStC2_B3_Fyi'] = False # (kN); Blade StC #2 Blade #3 -- Y resulting force; Inertial (global) coordinates +ServoDyn['BStC2_B3_Fzi'] = False # (kN); Blade StC #2 Blade #3 -- Z resulting force; Inertial (global) coordinates +ServoDyn['BStC2_B3_Mxi'] = False # (kN-m); Blade StC #2 Blade #3 -- X resulting moment; Inertial (global) coordinates +ServoDyn['BStC2_B3_Myi'] = False # (kN-m); Blade StC #2 Blade #3 -- Y resulting moment; Inertial (global) coordinates +ServoDyn['BStC2_B3_Mzi'] = False # (kN-m); Blade StC #2 Blade #3 -- Z resulting moment; Inertial (global) coordinates +ServoDyn['BStC2_B3_Fxl'] = False # (kN); Blade StC #2 Blade #3 -- X resulting force; Local StC coordinates +ServoDyn['BStC2_B3_Fyl'] = False # (kN); Blade StC #2 Blade #3 -- Y resulting force; Local StC coordinates +ServoDyn['BStC2_B3_Fzl'] = False # (kN); Blade StC #2 Blade #3 -- Z resulting force; Local StC coordinates +ServoDyn['BStC2_B3_Mxl'] = False # (kN-m); Blade StC #2 Blade #3 -- X resulting moment; Local StC coordinates +ServoDyn['BStC2_B3_Myl'] = False # (kN-m); Blade StC #2 Blade #3 -- Y resulting moment; Local StC coordinates +ServoDyn['BStC2_B3_Mzl'] = False # (kN-m); Blade StC #2 Blade #3 -- Z resulting moment; Local StC coordinates +ServoDyn['BStC3_B3_XQ'] = False # (m); Blade StC #3 Blade #3 -- X position (displacement); Relative to rest position in StC reference frame +ServoDyn['BStC3_B3_XQD'] = False # (m/s); Blade StC #3 Blade #3 -- X velocity; Relative to nacelle in StC reference frame +ServoDyn['BStC3_B3_YQ'] = False # (m); Blade StC #3 Blade #3 -- Y position (displacement); Relative to rest position in StC reference frame +ServoDyn['BStC3_B3_YQD'] = False # (m/s); Blade StC #3 Blade #3 -- Y velocity; Relative to nacelle in StC reference frame +ServoDyn['BStC3_B3_ZQ'] = False # (m); Blade StC #3 Blade #3 -- Z position (displacement); Relative to rest position in StC reference frame +ServoDyn['BStC3_B3_ZQD'] = False # (m/s); Blade StC #3 Blade #3 -- Z velocity; Relative to nacelle in StC reference frame +ServoDyn['BStC3_B3_Fxi'] = False # (kN); Blade StC #3 Blade #3 -- X resulting force; Inertial (global) coordinates +ServoDyn['BStC3_B3_Fyi'] = False # (kN); Blade StC #3 Blade #3 -- Y resulting force; Inertial (global) coordinates +ServoDyn['BStC3_B3_Fzi'] = False # (kN); Blade StC #3 Blade #3 -- Z resulting force; Inertial (global) coordinates +ServoDyn['BStC3_B3_Mxi'] = False # (kN-m); Blade StC #3 Blade #3 -- X resulting moment; Inertial (global) coordinates +ServoDyn['BStC3_B3_Myi'] = False # (kN-m); Blade StC #3 Blade #3 -- Y resulting moment; Inertial (global) coordinates +ServoDyn['BStC3_B3_Mzi'] = False # (kN-m); Blade StC #3 Blade #3 -- Z resulting moment; Inertial (global) coordinates +ServoDyn['BStC3_B3_Fxl'] = False # (kN); Blade StC #3 Blade #3 -- X resulting force; Local StC coordinates +ServoDyn['BStC3_B3_Fyl'] = False # (kN); Blade StC #3 Blade #3 -- Y resulting force; Local StC coordinates +ServoDyn['BStC3_B3_Fzl'] = False # (kN); Blade StC #3 Blade #3 -- Z resulting force; Local StC coordinates +ServoDyn['BStC3_B3_Mxl'] = False # (kN-m); Blade StC #3 Blade #3 -- X resulting moment; Local StC coordinates +ServoDyn['BStC3_B3_Myl'] = False # (kN-m); Blade StC #3 Blade #3 -- Y resulting moment; Local StC coordinates +ServoDyn['BStC3_B3_Mzl'] = False # (kN-m); Blade StC #3 Blade #3 -- Z resulting moment; Local StC coordinates +ServoDyn['BStC4_B3_XQ'] = False # (m); Blade StC #4 Blade #3 -- X position (displacement); Relative to rest position in StC reference frame +ServoDyn['BStC4_B3_XQD'] = False # (m/s); Blade StC #4 Blade #3 -- X velocity; Relative to nacelle in StC reference frame +ServoDyn['BStC4_B3_YQ'] = False # (m); Blade StC #4 Blade #3 -- Y position (displacement); Relative to rest position in StC reference frame +ServoDyn['BStC4_B3_YQD'] = False # (m/s); Blade StC #4 Blade #3 -- Y velocity; Relative to nacelle in StC reference frame +ServoDyn['BStC4_B3_ZQ'] = False # (m); Blade StC #4 Blade #3 -- Z position (displacement); Relative to rest position in StC reference frame +ServoDyn['BStC4_B3_ZQD'] = False # (m/s); Blade StC #4 Blade #3 -- Z velocity; Relative to nacelle in StC reference frame +ServoDyn['BStC4_B3_Fxi'] = False # (kN); Blade StC #4 Blade #3 -- X resulting force; Inertial (global) coordinates +ServoDyn['BStC4_B3_Fyi'] = False # (kN); Blade StC #4 Blade #3 -- Y resulting force; Inertial (global) coordinates +ServoDyn['BStC4_B3_Fzi'] = False # (kN); Blade StC #4 Blade #3 -- Z resulting force; Inertial (global) coordinates +ServoDyn['BStC4_B3_Mxi'] = False # (kN-m); Blade StC #4 Blade #3 -- X resulting moment; Inertial (global) coordinates +ServoDyn['BStC4_B3_Myi'] = False # (kN-m); Blade StC #4 Blade #3 -- Y resulting moment; Inertial (global) coordinates +ServoDyn['BStC4_B3_Mzi'] = False # (kN-m); Blade StC #4 Blade #3 -- Z resulting moment; Inertial (global) coordinates +ServoDyn['BStC4_B3_Fxl'] = False # (kN); Blade StC #4 Blade #3 -- X resulting force; Local StC coordinates +ServoDyn['BStC4_B3_Fyl'] = False # (kN); Blade StC #4 Blade #3 -- Y resulting force; Local StC coordinates +ServoDyn['BStC4_B3_Fzl'] = False # (kN); Blade StC #4 Blade #3 -- Z resulting force; Local StC coordinates +ServoDyn['BStC4_B3_Mxl'] = False # (kN-m); Blade StC #4 Blade #3 -- X resulting moment; Local StC coordinates +ServoDyn['BStC4_B3_Myl'] = False # (kN-m); Blade StC #4 Blade #3 -- Y resulting moment; Local StC coordinates +ServoDyn['BStC4_B3_Mzl'] = False # (kN-m); Blade StC #4 Blade #3 -- Z resulting moment; Local StC coordinates +ServoDyn['BStC1_B4_XQ'] = False # (m); Blade StC #1 Blade #4 -- X position (displacement); Relative to rest position in StC reference frame +ServoDyn['BStC1_B4_XQD'] = False # (m/s); Blade StC #1 Blade #4 -- X velocity; Relative to nacelle in StC reference frame +ServoDyn['BStC1_B4_YQ'] = False # (m); Blade StC #1 Blade #4 -- Y position (displacement); Relative to rest position in StC reference frame +ServoDyn['BStC1_B4_YQD'] = False # (m/s); Blade StC #1 Blade #4 -- Y velocity; Relative to nacelle in StC reference frame +ServoDyn['BStC1_B4_ZQ'] = False # (m); Blade StC #1 Blade #4 -- Z position (displacement); Relative to rest position in StC reference frame +ServoDyn['BStC1_B4_ZQD'] = False # (m/s); Blade StC #1 Blade #4 -- Z velocity; Relative to nacelle in StC reference frame +ServoDyn['BStC1_B4_Fxi'] = False # (kN); Blade StC #1 Blade #4 -- X resulting force; Inertial (global) coordinates +ServoDyn['BStC1_B4_Fyi'] = False # (kN); Blade StC #1 Blade #4 -- Y resulting force; Inertial (global) coordinates +ServoDyn['BStC1_B4_Fzi'] = False # (kN); Blade StC #1 Blade #4 -- Z resulting force; Inertial (global) coordinates +ServoDyn['BStC1_B4_Mxi'] = False # (kN-m); Blade StC #1 Blade #4 -- X resulting moment; Inertial (global) coordinates +ServoDyn['BStC1_B4_Myi'] = False # (kN-m); Blade StC #1 Blade #4 -- Y resulting moment; Inertial (global) coordinates +ServoDyn['BStC1_B4_Mzi'] = False # (kN-m); Blade StC #1 Blade #4 -- Z resulting moment; Inertial (global) coordinates +ServoDyn['BStC1_B4_Fxl'] = False # (kN); Blade StC #1 Blade #4 -- X resulting force; Local StC coordinates +ServoDyn['BStC1_B4_Fyl'] = False # (kN); Blade StC #1 Blade #4 -- Y resulting force; Local StC coordinates +ServoDyn['BStC1_B4_Fzl'] = False # (kN); Blade StC #1 Blade #4 -- Z resulting force; Local StC coordinates +ServoDyn['BStC1_B4_Mxl'] = False # (kN-m); Blade StC #1 Blade #4 -- X resulting moment; Local StC coordinates +ServoDyn['BStC1_B4_Myl'] = False # (kN-m); Blade StC #1 Blade #4 -- Y resulting moment; Local StC coordinates +ServoDyn['BStC1_B4_Mzl'] = False # (kN-m); Blade StC #1 Blade #4 -- Z resulting moment; Local StC coordinates +ServoDyn['BStC2_B4_XQ'] = False # (m); Blade StC #2 Blade #4 -- X position (displacement); Relative to rest position in StC reference frame +ServoDyn['BStC2_B4_XQD'] = False # (m/s); Blade StC #2 Blade #4 -- X velocity; Relative to nacelle in StC reference frame +ServoDyn['BStC2_B4_YQ'] = False # (m); Blade StC #2 Blade #4 -- Y position (displacement); Relative to rest position in StC reference frame +ServoDyn['BStC2_B4_YQD'] = False # (m/s); Blade StC #2 Blade #4 -- Y velocity; Relative to nacelle in StC reference frame +ServoDyn['BStC2_B4_ZQ'] = False # (m); Blade StC #2 Blade #4 -- Z position (displacement); Relative to rest position in StC reference frame +ServoDyn['BStC2_B4_ZQD'] = False # (m/s); Blade StC #2 Blade #4 -- Z velocity; Relative to nacelle in StC reference frame +ServoDyn['BStC2_B4_Fxi'] = False # (kN); Blade StC #2 Blade #4 -- X resulting force; Inertial (global) coordinates +ServoDyn['BStC2_B4_Fyi'] = False # (kN); Blade StC #2 Blade #4 -- Y resulting force; Inertial (global) coordinates +ServoDyn['BStC2_B4_Fzi'] = False # (kN); Blade StC #2 Blade #4 -- Z resulting force; Inertial (global) coordinates +ServoDyn['BStC2_B4_Mxi'] = False # (kN-m); Blade StC #2 Blade #4 -- X resulting moment; Inertial (global) coordinates +ServoDyn['BStC2_B4_Myi'] = False # (kN-m); Blade StC #2 Blade #4 -- Y resulting moment; Inertial (global) coordinates +ServoDyn['BStC2_B4_Mzi'] = False # (kN-m); Blade StC #2 Blade #4 -- Z resulting moment; Inertial (global) coordinates +ServoDyn['BStC2_B4_Fxl'] = False # (kN); Blade StC #2 Blade #4 -- X resulting force; Local StC coordinates +ServoDyn['BStC2_B4_Fyl'] = False # (kN); Blade StC #2 Blade #4 -- Y resulting force; Local StC coordinates +ServoDyn['BStC2_B4_Fzl'] = False # (kN); Blade StC #2 Blade #4 -- Z resulting force; Local StC coordinates +ServoDyn['BStC2_B4_Mxl'] = False # (kN-m); Blade StC #2 Blade #4 -- X resulting moment; Local StC coordinates +ServoDyn['BStC2_B4_Myl'] = False # (kN-m); Blade StC #2 Blade #4 -- Y resulting moment; Local StC coordinates +ServoDyn['BStC2_B4_Mzl'] = False # (kN-m); Blade StC #2 Blade #4 -- Z resulting moment; Local StC coordinates +ServoDyn['BStC3_B4_XQ'] = False # (m); Blade StC #3 Blade #4 -- X position (displacement); Relative to rest position in StC reference frame +ServoDyn['BStC3_B4_XQD'] = False # (m/s); Blade StC #3 Blade #4 -- X velocity; Relative to nacelle in StC reference frame +ServoDyn['BStC3_B4_YQ'] = False # (m); Blade StC #3 Blade #4 -- Y position (displacement); Relative to rest position in StC reference frame +ServoDyn['BStC3_B4_YQD'] = False # (m/s); Blade StC #3 Blade #4 -- Y velocity; Relative to nacelle in StC reference frame +ServoDyn['BStC3_B4_ZQ'] = False # (m); Blade StC #3 Blade #4 -- Z position (displacement); Relative to rest position in StC reference frame +ServoDyn['BStC3_B4_ZQD'] = False # (m/s); Blade StC #3 Blade #4 -- Z velocity; Relative to nacelle in StC reference frame +ServoDyn['BStC3_B4_Fxi'] = False # (kN); Blade StC #3 Blade #4 -- X resulting force; Inertial (global) coordinates +ServoDyn['BStC3_B4_Fyi'] = False # (kN); Blade StC #3 Blade #4 -- Y resulting force; Inertial (global) coordinates +ServoDyn['BStC3_B4_Fzi'] = False # (kN); Blade StC #3 Blade #4 -- Z resulting force; Inertial (global) coordinates +ServoDyn['BStC3_B4_Mxi'] = False # (kN-m); Blade StC #3 Blade #4 -- X resulting moment; Inertial (global) coordinates +ServoDyn['BStC3_B4_Myi'] = False # (kN-m); Blade StC #3 Blade #4 -- Y resulting moment; Inertial (global) coordinates +ServoDyn['BStC3_B4_Mzi'] = False # (kN-m); Blade StC #3 Blade #4 -- Z resulting moment; Inertial (global) coordinates +ServoDyn['BStC3_B4_Fxl'] = False # (kN); Blade StC #3 Blade #4 -- X resulting force; Local StC coordinates +ServoDyn['BStC3_B4_Fyl'] = False # (kN); Blade StC #3 Blade #4 -- Y resulting force; Local StC coordinates +ServoDyn['BStC3_B4_Fzl'] = False # (kN); Blade StC #3 Blade #4 -- Z resulting force; Local StC coordinates +ServoDyn['BStC3_B4_Mxl'] = False # (kN-m); Blade StC #3 Blade #4 -- X resulting moment; Local StC coordinates +ServoDyn['BStC3_B4_Myl'] = False # (kN-m); Blade StC #3 Blade #4 -- Y resulting moment; Local StC coordinates +ServoDyn['BStC3_B4_Mzl'] = False # (kN-m); Blade StC #3 Blade #4 -- Z resulting moment; Local StC coordinates +ServoDyn['BStC4_B4_XQ'] = False # (m); Blade StC #4 Blade #4 -- X position (displacement); Relative to rest position in StC reference frame +ServoDyn['BStC4_B4_XQD'] = False # (m/s); Blade StC #4 Blade #4 -- X velocity; Relative to nacelle in StC reference frame +ServoDyn['BStC4_B4_YQ'] = False # (m); Blade StC #4 Blade #4 -- Y position (displacement); Relative to rest position in StC reference frame +ServoDyn['BStC4_B4_YQD'] = False # (m/s); Blade StC #4 Blade #4 -- Y velocity; Relative to nacelle in StC reference frame +ServoDyn['BStC4_B4_ZQ'] = False # (m); Blade StC #4 Blade #4 -- Z position (displacement); Relative to rest position in StC reference frame +ServoDyn['BStC4_B4_ZQD'] = False # (m/s); Blade StC #4 Blade #4 -- Z velocity; Relative to nacelle in StC reference frame +ServoDyn['BStC4_B4_Fxi'] = False # (kN); Blade StC #4 Blade #4 -- X resulting force; Inertial (global) coordinates +ServoDyn['BStC4_B4_Fyi'] = False # (kN); Blade StC #4 Blade #4 -- Y resulting force; Inertial (global) coordinates +ServoDyn['BStC4_B4_Fzi'] = False # (kN); Blade StC #4 Blade #4 -- Z resulting force; Inertial (global) coordinates +ServoDyn['BStC4_B4_Mxi'] = False # (kN-m); Blade StC #4 Blade #4 -- X resulting moment; Inertial (global) coordinates +ServoDyn['BStC4_B4_Myi'] = False # (kN-m); Blade StC #4 Blade #4 -- Y resulting moment; Inertial (global) coordinates +ServoDyn['BStC4_B4_Mzi'] = False # (kN-m); Blade StC #4 Blade #4 -- Z resulting moment; Inertial (global) coordinates +ServoDyn['BStC4_B4_Fxl'] = False # (kN); Blade StC #4 Blade #4 -- X resulting force; Local StC coordinates +ServoDyn['BStC4_B4_Fyl'] = False # (kN); Blade StC #4 Blade #4 -- Y resulting force; Local StC coordinates +ServoDyn['BStC4_B4_Fzl'] = False # (kN); Blade StC #4 Blade #4 -- Z resulting force; Local StC coordinates +ServoDyn['BStC4_B4_Mxl'] = False # (kN-m); Blade StC #4 Blade #4 -- X resulting moment; Local StC coordinates +ServoDyn['BStC4_B4_Myl'] = False # (kN-m); Blade StC #4 Blade #4 -- Y resulting moment; Local StC coordinates +ServoDyn['BStC4_B4_Mzl'] = False # (kN-m); Blade StC #4 Blade #4 -- Z resulting moment; Local StC coordinates + +# Substructure Structural Control (StC) +ServoDyn['SStC1_XQ'] = False # (m); Substructure StC #1 -- X position (displacement); Relative to rest position in StC reference frame +ServoDyn['SStC1_XQD'] = False # (m/s); Substructure StC #1 -- X velocity; Relative to nacelle in StC reference frame +ServoDyn['SStC1_YQ'] = False # (m); Substructure StC #1 -- Y position (displacement); Relative to rest position in StC reference frame +ServoDyn['SStC1_YQD'] = False # (m/s); Substructure StC #1 -- Y velocity; Relative to nacelle in StC reference frame +ServoDyn['SStC1_ZQ'] = False # (m); Substructure StC #1 -- Z position (displacement); Relative to rest position in StC reference frame +ServoDyn['SStC1_ZQD'] = False # (m/s); Substructure StC #1 -- Z velocity; Relative to nacelle in StC reference frame +ServoDyn['SStC1_Fxi'] = False # (kN); Substructure StC #1 -- X resulting force; Inertial (global) coordinates +ServoDyn['SStC1_Fyi'] = False # (kN); Substructure StC #1 -- Y resulting force; Inertial (global) coordinates +ServoDyn['SStC1_Fzi'] = False # (kN); Substructure StC #1 -- Z resulting force; Inertial (global) coordinates +ServoDyn['SStC1_Mxi'] = False # (kN-m); Substructure StC #1 -- X resulting moment; Inertial (global) coordinates +ServoDyn['SStC1_Myi'] = False # (kN-m); Substructure StC #1 -- Y resulting moment; Inertial (global) coordinates +ServoDyn['SStC1_Mzi'] = False # (kN-m); Substructure StC #1 -- Z resulting moment; Inertial (global) coordinates +ServoDyn['SStC1_Fxl'] = False # (kN); Substructure StC #1 -- X resulting force; Local StC coordinates +ServoDyn['SStC1_Fyl'] = False # (kN); Substructure StC #1 -- Y resulting force; Local StC coordinates +ServoDyn['SStC1_Fzl'] = False # (kN); Substructure StC #1 -- Z resulting force; Local StC coordinates +ServoDyn['SStC1_Mxl'] = False # (kN-m); Substructure StC #1 -- X resulting moment; Local StC coordinates +ServoDyn['SStC1_Myl'] = False # (kN-m); Substructure StC #1 -- Y resulting moment; Local StC coordinates +ServoDyn['SStC1_Mzl'] = False # (kN-m); Substructure StC #1 -- Z resulting moment; Local StC coordinates +ServoDyn['SStC2_XQ'] = False # (m); Substructure StC #2 -- X position (displacement); Relative to rest position in StC reference frame +ServoDyn['SStC2_XQD'] = False # (m/s); Substructure StC #2 -- X velocity; Relative to nacelle in StC reference frame +ServoDyn['SStC2_YQ'] = False # (m); Substructure StC #2 -- Y position (displacement); Relative to rest position in StC reference frame +ServoDyn['SStC2_YQD'] = False # (m/s); Substructure StC #2 -- Y velocity; Relative to nacelle in StC reference frame +ServoDyn['SStC2_ZQ'] = False # (m); Substructure StC #2 -- Z position (displacement); Relative to rest position in StC reference frame +ServoDyn['SStC2_ZQD'] = False # (m/s); Substructure StC #2 -- Z velocity; Relative to nacelle in StC reference frame +ServoDyn['SStC2_Fxi'] = False # (kN); Substructure StC #2 -- X resulting force; Inertial (global) coordinates +ServoDyn['SStC2_Fyi'] = False # (kN); Substructure StC #2 -- Y resulting force; Inertial (global) coordinates +ServoDyn['SStC2_Fzi'] = False # (kN); Substructure StC #2 -- Z resulting force; Inertial (global) coordinates +ServoDyn['SStC2_Mxi'] = False # (kN-m); Substructure StC #2 -- X resulting moment; Inertial (global) coordinates +ServoDyn['SStC2_Myi'] = False # (kN-m); Substructure StC #2 -- Y resulting moment; Inertial (global) coordinates +ServoDyn['SStC2_Mzi'] = False # (kN-m); Substructure StC #2 -- Z resulting moment; Inertial (global) coordinates +ServoDyn['SStC2_Fxl'] = False # (kN); Substructure StC #2 -- X resulting force; Local StC coordinates +ServoDyn['SStC2_Fyl'] = False # (kN); Substructure StC #2 -- Y resulting force; Local StC coordinates +ServoDyn['SStC2_Fzl'] = False # (kN); Substructure StC #2 -- Z resulting force; Local StC coordinates +ServoDyn['SStC2_Mxl'] = False # (kN-m); Substructure StC #2 -- X resulting moment; Local StC coordinates +ServoDyn['SStC2_Myl'] = False # (kN-m); Substructure StC #2 -- Y resulting moment; Local StC coordinates +ServoDyn['SStC2_Mzl'] = False # (kN-m); Substructure StC #2 -- Z resulting moment; Local StC coordinates +ServoDyn['SStC3_XQ'] = False # (m); Substructure StC #3 -- X position (displacement); Relative to rest position in StC reference frame +ServoDyn['SStC3_XQD'] = False # (m/s); Substructure StC #3 -- X velocity; Relative to nacelle in StC reference frame +ServoDyn['SStC3_YQ'] = False # (m); Substructure StC #3 -- Y position (displacement); Relative to rest position in StC reference frame +ServoDyn['SStC3_YQD'] = False # (m/s); Substructure StC #3 -- Y velocity; Relative to nacelle in StC reference frame +ServoDyn['SStC3_ZQ'] = False # (m); Substructure StC #3 -- Z position (displacement); Relative to rest position in StC reference frame +ServoDyn['SStC3_ZQD'] = False # (m/s); Substructure StC #3 -- Z velocity; Relative to nacelle in StC reference frame +ServoDyn['SStC3_Fxi'] = False # (kN); Substructure StC #3 -- X resulting force; Inertial (global) coordinates +ServoDyn['SStC3_Fyi'] = False # (kN); Substructure StC #3 -- Y resulting force; Inertial (global) coordinates +ServoDyn['SStC3_Fzi'] = False # (kN); Substructure StC #3 -- Z resulting force; Inertial (global) coordinates +ServoDyn['SStC3_Mxi'] = False # (kN-m); Substructure StC #3 -- X resulting moment; Inertial (global) coordinates +ServoDyn['SStC3_Myi'] = False # (kN-m); Substructure StC #3 -- Y resulting moment; Inertial (global) coordinates +ServoDyn['SStC3_Mzi'] = False # (kN-m); Substructure StC #3 -- Z resulting moment; Inertial (global) coordinates +ServoDyn['SStC3_Fxl'] = False # (kN); Substructure StC #3 -- X resulting force; Local StC coordinates +ServoDyn['SStC3_Fyl'] = False # (kN); Substructure StC #3 -- Y resulting force; Local StC coordinates +ServoDyn['SStC3_Fzl'] = False # (kN); Substructure StC #3 -- Z resulting force; Local StC coordinates +ServoDyn['SStC3_Mxl'] = False # (kN-m); Substructure StC #3 -- X resulting moment; Local StC coordinates +ServoDyn['SStC3_Myl'] = False # (kN-m); Substructure StC #3 -- Y resulting moment; Local StC coordinates +ServoDyn['SStC3_Mzl'] = False # (kN-m); Substructure StC #3 -- Z resulting moment; Local StC coordinates +ServoDyn['SStC4_XQ'] = False # (m); Substructure StC #4 -- X position (displacement); Relative to rest position in StC reference frame +ServoDyn['SStC4_XQD'] = False # (m/s); Substructure StC #4 -- X velocity; Relative to nacelle in StC reference frame +ServoDyn['SStC4_YQ'] = False # (m); Substructure StC #4 -- Y position (displacement); Relative to rest position in StC reference frame +ServoDyn['SStC4_YQD'] = False # (m/s); Substructure StC #4 -- Y velocity; Relative to nacelle in StC reference frame +ServoDyn['SStC4_ZQ'] = False # (m); Substructure StC #4 -- Z position (displacement); Relative to rest position in StC reference frame +ServoDyn['SStC4_ZQD'] = False # (m/s); Substructure StC #4 -- Z velocity; Relative to nacelle in StC reference frame +ServoDyn['SStC4_Fxi'] = False # (kN); Substructure StC #4 -- X resulting force; Inertial (global) coordinates +ServoDyn['SStC4_Fyi'] = False # (kN); Substructure StC #4 -- Y resulting force; Inertial (global) coordinates +ServoDyn['SStC4_Fzi'] = False # (kN); Substructure StC #4 -- Z resulting force; Inertial (global) coordinates +ServoDyn['SStC4_Mxi'] = False # (kN-m); Substructure StC #4 -- X resulting moment; Inertial (global) coordinates +ServoDyn['SStC4_Myi'] = False # (kN-m); Substructure StC #4 -- Y resulting moment; Inertial (global) coordinates +ServoDyn['SStC4_Mzi'] = False # (kN-m); Substructure StC #4 -- Z resulting moment; Inertial (global) coordinates +ServoDyn['SStC4_Fxl'] = False # (kN); Substructure StC #4 -- X resulting force; Local StC coordinates +ServoDyn['SStC4_Fyl'] = False # (kN); Substructure StC #4 -- Y resulting force; Local StC coordinates +ServoDyn['SStC4_Fzl'] = False # (kN); Substructure StC #4 -- Z resulting force; Local StC coordinates +ServoDyn['SStC4_Mxl'] = False # (kN-m); Substructure StC #4 -- X resulting moment; Local StC coordinates +ServoDyn['SStC4_Myl'] = False # (kN-m); Substructure StC #4 -- Y resulting moment; Local StC coordinates +ServoDyn['SStC4_Mzl'] = False # (kN-m); Substructure StC #4 -- Z resulting moment; Local StC coordinates + + + +# Flap outputs +ServoDyn['BLFLAP1'] = False # (m/s); Tower Y TMD velocity; Relative to tower +ServoDyn['BLFLAP2'] = False # (m/s); Tower Y TMD velocity; Relative to tower +ServoDyn['BLFLAP3'] = False # (m/s); Tower Y TMD velocity; Relative to tower + +""" AeroDyn """ +AeroDyn = {} + +# Tower +AeroDyn['TwN1VUndx'] = False # (m/s); Undisturbed x-component wind velocity at Tw node 1; local tower coordinate system +AeroDyn['TwN1VUndy'] = False # (m/s); Undisturbed y-component wind velocity at Tw node 1; local tower coordinate system +AeroDyn['TwN1VUndz'] = False # (m/s); Undisturbed z-component wind velocity at Tw node 1; local tower coordinate system +AeroDyn['TwN2VUndx'] = False # (m/s); Undisturbed x-component wind velocity at Tw node 2; local tower coordinate system +AeroDyn['TwN2VUndy'] = False # (m/s); Undisturbed y-component wind velocity at Tw node 2; local tower coordinate system +AeroDyn['TwN2VUndz'] = False # (m/s); Undisturbed z-component wind velocity at Tw node 2; local tower coordinate system +AeroDyn['TwN3VUndx'] = False # (m/s); Undisturbed x-component wind velocity at Tw node 3; local tower coordinate system +AeroDyn['TwN3VUndy'] = False # (m/s); Undisturbed y-component wind velocity at Tw node 3; local tower coordinate system +AeroDyn['TwN3VUndz'] = False # (m/s); Undisturbed z-component wind velocity at Tw node 3; local tower coordinate system +AeroDyn['TwN4VUndx'] = False # (m/s); Undisturbed x-component wind velocity at Tw node 4; local tower coordinate system +AeroDyn['TwN4VUndy'] = False # (m/s); Undisturbed y-component wind velocity at Tw node 4; local tower coordinate system +AeroDyn['TwN4VUndz'] = False # (m/s); Undisturbed z-component wind velocity at Tw node 4; local tower coordinate system +AeroDyn['TwN5VUndx'] = False # (m/s); Undisturbed x-component wind velocity at Tw node 5; local tower coordinate system +AeroDyn['TwN5VUndy'] = False # (m/s); Undisturbed y-component wind velocity at Tw node 5; local tower coordinate system +AeroDyn['TwN5VUndz'] = False # (m/s); Undisturbed z-component wind velocity at Tw node 5; local tower coordinate system +AeroDyn['TwN6VUndx'] = False # (m/s); Undisturbed x-component wind velocity at Tw node 6; local tower coordinate system +AeroDyn['TwN6VUndy'] = False # (m/s); Undisturbed y-component wind velocity at Tw node 6; local tower coordinate system +AeroDyn['TwN6VUndz'] = False # (m/s); Undisturbed z-component wind velocity at Tw node 6; local tower coordinate system +AeroDyn['TwN7VUndx'] = False # (m/s); Undisturbed x-component wind velocity at Tw node 7; local tower coordinate system +AeroDyn['TwN7VUndy'] = False # (m/s); Undisturbed y-component wind velocity at Tw node 7; local tower coordinate system +AeroDyn['TwN7VUndz'] = False # (m/s); Undisturbed z-component wind velocity at Tw node 7; local tower coordinate system +AeroDyn['TwN8VUndx'] = False # (m/s); Undisturbed x-component wind velocity at Tw node 8; local tower coordinate system +AeroDyn['TwN8VUndy'] = False # (m/s); Undisturbed y-component wind velocity at Tw node 8; local tower coordinate system +AeroDyn['TwN8VUndz'] = False # (m/s); Undisturbed z-component wind velocity at Tw node 8; local tower coordinate system +AeroDyn['TwN9VUndx'] = False # (m/s); Undisturbed x-component wind velocity at Tw node 9; local tower coordinate system +AeroDyn['TwN9VUndy'] = False # (m/s); Undisturbed y-component wind velocity at Tw node 9; local tower coordinate system +AeroDyn['TwN9VUndz'] = False # (m/s); Undisturbed z-component wind velocity at Tw node 9; local tower coordinate system +AeroDyn['TwN1STVx'] = False # (m/s); Structural translational velocity x-component at Tw node 1; local tower coordinate system +AeroDyn['TwN1STVy'] = False # (m/s); Structural translational velocity y-component at Tw node 1; local tower coordinate system +AeroDyn['TwN1STVz'] = False # (m/s); Structural translational velocity z-component at Tw node 1; local tower coordinate system +AeroDyn['TwN2STVx'] = False # (m/s); Structural translational velocity x-component at Tw node 2; local tower coordinate system +AeroDyn['TwN2STVy'] = False # (m/s); Structural translational velocity y-component at Tw node 2; local tower coordinate system +AeroDyn['TwN2STVz'] = False # (m/s); Structural translational velocity z-component at Tw node 2; local tower coordinate system +AeroDyn['TwN3STVx'] = False # (m/s); Structural translational velocity x-component at Tw node 3; local tower coordinate system +AeroDyn['TwN3STVy'] = False # (m/s); Structural translational velocity y-component at Tw node 3; local tower coordinate system +AeroDyn['TwN3STVz'] = False # (m/s); Structural translational velocity z-component at Tw node 3; local tower coordinate system +AeroDyn['TwN4STVx'] = False # (m/s); Structural translational velocity x-component at Tw node 4; local tower coordinate system +AeroDyn['TwN4STVy'] = False # (m/s); Structural translational velocity y-component at Tw node 4; local tower coordinate system +AeroDyn['TwN4STVz'] = False # (m/s); Structural translational velocity z-component at Tw node 4; local tower coordinate system +AeroDyn['TwN5STVx'] = False # (m/s); Structural translational velocity x-component at Tw node 5; local tower coordinate system +AeroDyn['TwN5STVy'] = False # (m/s); Structural translational velocity y-component at Tw node 5; local tower coordinate system +AeroDyn['TwN5STVz'] = False # (m/s); Structural translational velocity z-component at Tw node 5; local tower coordinate system +AeroDyn['TwN6STVx'] = False # (m/s); Structural translational velocity x-component at Tw node 6; local tower coordinate system +AeroDyn['TwN6STVy'] = False # (m/s); Structural translational velocity y-component at Tw node 6; local tower coordinate system +AeroDyn['TwN6STVz'] = False # (m/s); Structural translational velocity z-component at Tw node 6; local tower coordinate system +AeroDyn['TwN7STVx'] = False # (m/s); Structural translational velocity x-component at Tw node 7; local tower coordinate system +AeroDyn['TwN7STVy'] = False # (m/s); Structural translational velocity y-component at Tw node 7; local tower coordinate system +AeroDyn['TwN7STVz'] = False # (m/s); Structural translational velocity z-component at Tw node 7; local tower coordinate system +AeroDyn['TwN8STVx'] = False # (m/s); Structural translational velocity x-component at Tw node 8; local tower coordinate system +AeroDyn['TwN8STVy'] = False # (m/s); Structural translational velocity y-component at Tw node 8; local tower coordinate system +AeroDyn['TwN8STVz'] = False # (m/s); Structural translational velocity z-component at Tw node 8; local tower coordinate system +AeroDyn['TwN9STVx'] = False # (m/s); Structural translational velocity x-component at Tw node 9; local tower coordinate system +AeroDyn['TwN9STVy'] = False # (m/s); Structural translational velocity y-component at Tw node 9; local tower coordinate system +AeroDyn['TwN9STVz'] = False # (m/s); Structural translational velocity z-component at Tw node 9; local tower coordinate system +AeroDyn['TwN1Vrel'] = False # (m/s); Relative wind speed at Tw node 1; +AeroDyn['TwN2Vrel'] = False # (m/s); Relative wind speed at Tw node 2; +AeroDyn['TwN3Vrel'] = False # (m/s); Relative wind speed at Tw node 3; +AeroDyn['TwN4Vrel'] = False # (m/s); Relative wind speed at Tw node 4; +AeroDyn['TwN5Vrel'] = False # (m/s); Relative wind speed at Tw node 5; +AeroDyn['TwN6Vrel'] = False # (m/s); Relative wind speed at Tw node 6; +AeroDyn['TwN7Vrel'] = False # (m/s); Relative wind speed at Tw node 7; +AeroDyn['TwN8Vrel'] = False # (m/s); Relative wind speed at Tw node 8; +AeroDyn['TwN9Vrel'] = False # (m/s); Relative wind speed at Tw node 9; +AeroDyn['TwN1DynP'] = False # (Pa); Dynamic Pressure at Tw node 1; +AeroDyn['TwN2DynP'] = False # (Pa); Dynamic Pressure at Tw node 2; +AeroDyn['TwN3DynP'] = False # (Pa); Dynamic Pressure at Tw node 3; +AeroDyn['TwN4DynP'] = False # (Pa); Dynamic Pressure at Tw node 4; +AeroDyn['TwN5DynP'] = False # (Pa); Dynamic Pressure at Tw node 5; +AeroDyn['TwN6DynP'] = False # (Pa); Dynamic Pressure at Tw node 6; +AeroDyn['TwN7DynP'] = False # (Pa); Dynamic Pressure at Tw node 7; +AeroDyn['TwN8DynP'] = False # (Pa); Dynamic Pressure at Tw node 8; +AeroDyn['TwN9DynP'] = False # (Pa); Dynamic Pressure at Tw node 9; +AeroDyn['TwN1Re'] = False # (-); Reynolds number (in millions) at Tw node 1; +AeroDyn['TwN2Re'] = False # (-); Reynolds number (in millions) at Tw node 2; +AeroDyn['TwN3Re'] = False # (-); Reynolds number (in millions) at Tw node 3; +AeroDyn['TwN4Re'] = False # (-); Reynolds number (in millions) at Tw node 4; +AeroDyn['TwN5Re'] = False # (-); Reynolds number (in millions) at Tw node 5; +AeroDyn['TwN6Re'] = False # (-); Reynolds number (in millions) at Tw node 6; +AeroDyn['TwN7Re'] = False # (-); Reynolds number (in millions) at Tw node 7; +AeroDyn['TwN8Re'] = False # (-); Reynolds number (in millions) at Tw node 8; +AeroDyn['TwN9Re'] = False # (-); Reynolds number (in millions) at Tw node 9; +AeroDyn['TwN1M'] = False # (-); Mach number at Tw node 1; +AeroDyn['TwN2M'] = False # (-); Mach number at Tw node 2; +AeroDyn['TwN3M'] = False # (-); Mach number at Tw node 3; +AeroDyn['TwN4M'] = False # (-); Mach number at Tw node 4; +AeroDyn['TwN5M'] = False # (-); Mach number at Tw node 5; +AeroDyn['TwN6M'] = False # (-); Mach number at Tw node 6; +AeroDyn['TwN7M'] = False # (-); Mach number at Tw node 7; +AeroDyn['TwN8M'] = False # (-); Mach number at Tw node 8; +AeroDyn['TwN9M'] = False # (-); Mach number at Tw node 9; +AeroDyn['TwN1Fdx'] = False # (N/m); x-component of drag force per unit length at Tw node 1; local tower coordinate system +AeroDyn['TwN2Fdx'] = False # (N/m); x-component of drag force per unit length at Tw node 2; local tower coordinate system +AeroDyn['TwN3Fdx'] = False # (N/m); x-component of drag force per unit length at Tw node 3; local tower coordinate system +AeroDyn['TwN4Fdx'] = False # (N/m); x-component of drag force per unit length at Tw node 4; local tower coordinate system +AeroDyn['TwN5Fdx'] = False # (N/m); x-component of drag force per unit length at Tw node 5; local tower coordinate system +AeroDyn['TwN6Fdx'] = False # (N/m); x-component of drag force per unit length at Tw node 6; local tower coordinate system +AeroDyn['TwN7Fdx'] = False # (N/m); x-component of drag force per unit length at Tw node 7; local tower coordinate system +AeroDyn['TwN8Fdx'] = False # (N/m); x-component of drag force per unit length at Tw node 8; local tower coordinate system +AeroDyn['TwN9Fdx'] = False # (N/m); x-component of drag force per unit length at Tw node 9; local tower coordinate system +AeroDyn['TwN1Fdy'] = False # (N/m); y-component of drag force per unit length at Tw node 1; local tower coordinate system +AeroDyn['TwN2Fdy'] = False # (N/m); y-component of drag force per unit length at Tw node 2; local tower coordinate system +AeroDyn['TwN3Fdy'] = False # (N/m); y-component of drag force per unit length at Tw node 3; local tower coordinate system +AeroDyn['TwN4Fdy'] = False # (N/m); y-component of drag force per unit length at Tw node 4; local tower coordinate system +AeroDyn['TwN5Fdy'] = False # (N/m); y-component of drag force per unit length at Tw node 5; local tower coordinate system +AeroDyn['TwN6Fdy'] = False # (N/m); y-component of drag force per unit length at Tw node 6; local tower coordinate system +AeroDyn['TwN7Fdy'] = False # (N/m); y-component of drag force per unit length at Tw node 7; local tower coordinate system +AeroDyn['TwN8Fdy'] = False # (N/m); y-component of drag force per unit length at Tw node 8; local tower coordinate system +AeroDyn['TwN9Fdy'] = False # (N/m); y-component of drag force per unit length at Tw node 9; local tower coordinate system + +# Blade +AeroDyn['B1Azimuth'] = False # (deg); Azimuth angle of blade 1; +AeroDyn['B2Azimuth'] = False # (deg); Azimuth angle of blade 2; +AeroDyn['B3Azimuth'] = False # (deg); Azimuth angle of blade 3; +AeroDyn['B1Pitch'] = False # (deg); Pitch angle of blade 1; +AeroDyn['B2Pitch'] = False # (deg); Pitch angle of blade 2; +AeroDyn['B3Pitch'] = False # (deg); Pitch angle of blade 3; +AeroDyn['B1AeroFx'] = False # (N); Total blade aerodynamic load for blade 1 (force in x-direction); blade root coordinate system +AeroDyn['B1AeroFy'] = False # (N); Total blade aerodynamic load for blade 1 (force in y-direction); blade root coordinate system +AeroDyn['B1AeroFz'] = False # (N); Total blade aerodynamic load for blade 1 (force in z-direction); blade root coordinate system +AeroDyn['B1AeroMx'] = False # (N-m); Total blade aerodynamic load for blade 1 (moment in x-direction); blade root coordinate system +AeroDyn['B1AeroMy'] = False # (N-m); Total blade aerodynamic load for blade 1 (moment in y-direction); blade root coordinate system +AeroDyn['B1AeroMz'] = False # (N-m); Total blade aerodynamic load for blade 1 (moment in z-direction); blade root coordinate system +AeroDyn['B1AeroPwr'] = False # (W); Total aerodynamic power from blade 1; +AeroDyn['B2AeroFx'] = False # (N); Total blade aerodynamic load for blade 2 (force in x-direction); blade root coordinate system +AeroDyn['B2AeroFy'] = False # (N); Total blade aerodynamic load for blade 2 (force in y-direction); blade root coordinate system +AeroDyn['B2AeroFz'] = False # (N); Total blade aerodynamic load for blade 2 (force in z-direction); blade root coordinate system +AeroDyn['B2AeroMx'] = False # (N-m); Total blade aerodynamic load for blade 2 (moment in x-direction); blade root coordinate system +AeroDyn['B2AeroMy'] = False # (N-m); Total blade aerodynamic load for blade 2 (moment in y-direction); blade root coordinate system +AeroDyn['B2AeroMz'] = False # (N-m); Total blade aerodynamic load for blade 2 (moment in z-direction); blade root coordinate system +AeroDyn['B2AeroPwr'] = False # (W); Total aerodynamic power from blade 2; +AeroDyn['B3AeroFx'] = False # (N); Total blade aerodynamic load for blade 3 (force in x-direction); blade root coordinate system +AeroDyn['B3AeroFy'] = False # (N); Total blade aerodynamic load for blade 3 (force in y-direction); blade root coordinate system +AeroDyn['B3AeroFz'] = False # (N); Total blade aerodynamic load for blade 3 (force in z-direction); blade root coordinate system +AeroDyn['B3AeroMx'] = False # (N-m); Total blade aerodynamic load for blade 3 (moment in x-direction); blade root coordinate system +AeroDyn['B3AeroMy'] = False # (N-m); Total blade aerodynamic load for blade 3 (moment in y-direction); blade root coordinate system +AeroDyn['B3AeroMz'] = False # (N-m); Total blade aerodynamic load for blade 3 (moment in z-direction); blade root coordinate system +AeroDyn['B3AeroPwr'] = False # (W); Total aerodynamic power from blade 3; +AeroDyn['B4AeroFx'] = False # (N); Total blade aerodynamic load for blade 4 (force in x-direction); blade root coordinate system +AeroDyn['B4AeroFy'] = False # (N); Total blade aerodynamic load for blade 4 (force in y-direction); blade root coordinate system +AeroDyn['B4AeroFz'] = False # (N); Total blade aerodynamic load for blade 4 (force in z-direction); blade root coordinate system +AeroDyn['B4AeroMx'] = False # (N-m); Total blade aerodynamic load for blade 4 (moment in x-direction); blade root coordinate system +AeroDyn['B4AeroMy'] = False # (N-m); Total blade aerodynamic load for blade 4 (moment in y-direction); blade root coordinate system +AeroDyn['B4AeroMz'] = False # (N-m); Total blade aerodynamic load for blade 4 (moment in z-direction); blade root coordinate system +AeroDyn['B4AeroPwr'] = False # (W); Total aerodynamic power from blade 4; +AeroDyn['B1AeroFxg'] = False # (N); Total blade aerodynamic load for blade 1 (force in x-direction); global coordinate system +AeroDyn['B1AeroFyg'] = False # (N); Total blade aerodynamic load for blade 1 (force in y-direction); global coordinate system +AeroDyn['B1AeroFzg'] = False # (N); Total blade aerodynamic load for blade 1 (force in z-direction); global coordinate system +AeroDyn['B1AeroMxg'] = False # (N-m); Total blade aerodynamic load for blade 1 (moment in x-direction); global coordinate system +AeroDyn['B1AeroMyg'] = False # (N-m); Total blade aerodynamic load for blade 1 (moment in y-direction); global coordinate system +AeroDyn['B1AeroMzg'] = False # (N-m); Total blade aerodynamic load for blade 1 (moment in z-direction); global coordinate system +AeroDyn['B2AeroFxg'] = False # (N); Total blade aerodynamic load for blade 2 (force in x-direction); global coordinate system +AeroDyn['B2AeroFyg'] = False # (N); Total blade aerodynamic load for blade 2 (force in y-direction); global coordinate system +AeroDyn['B2AeroFzg'] = False # (N); Total blade aerodynamic load for blade 2 (force in z-direction); global coordinate system +AeroDyn['B2AeroMxg'] = False # (N-m); Total blade aerodynamic load for blade 2 (moment in x-direction); global coordinate system +AeroDyn['B2AeroMyg'] = False # (N-m); Total blade aerodynamic load for blade 2 (moment in y-direction); global coordinate system +AeroDyn['B2AeroMzg'] = False # (N-m); Total blade aerodynamic load for blade 2 (moment in z-direction); global coordinate system +AeroDyn['B3AeroFxg'] = False # (N); Total blade aerodynamic load for blade 3 (force in x-direction); global coordinate system +AeroDyn['B3AeroFyg'] = False # (N); Total blade aerodynamic load for blade 3 (force in y-direction); global coordinate system +AeroDyn['B3AeroFzg'] = False # (N); Total blade aerodynamic load for blade 3 (force in z-direction); global coordinate system +AeroDyn['B3AeroMxg'] = False # (N-m); Total blade aerodynamic load for blade 3 (moment in x-direction); global coordinate system +AeroDyn['B3AeroMyg'] = False # (N-m); Total blade aerodynamic load for blade 3 (moment in y-direction); global coordinate system +AeroDyn['B3AeroMzg'] = False # (N-m); Total blade aerodynamic load for blade 3 (moment in z-direction); global coordinate system +AeroDyn['B4AeroFxg'] = False # (N); Total blade aerodynamic load for blade 4 (force in x-direction); global coordinate system +AeroDyn['B4AeroFyg'] = False # (N); Total blade aerodynamic load for blade 4 (force in y-direction); global coordinate system +AeroDyn['B4AeroFzg'] = False # (N); Total blade aerodynamic load for blade 4 (force in z-direction); global coordinate system +AeroDyn['B4AeroMxg'] = False # (N-m); Total blade aerodynamic load for blade 4 (moment in x-direction); global coordinate system +AeroDyn['B4AeroMyg'] = False # (N-m); Total blade aerodynamic load for blade 4 (moment in y-direction); global coordinate system +AeroDyn['B4AeroMzg'] = False # (N-m); Total blade aerodynamic load for blade 4 (moment in z-direction); global coordinate system + +# Blade Nodal outputs +AeroDyn['B1N1VUndx'] = False # (m/s); x-component of undisturbed wind velocity at Blade 1, Node 1; local blade coordinate system +AeroDyn['B1N2VUndx'] = False # (m/s); x-component of undisturbed wind velocity at Blade 1, Node 2; local blade coordinate system +AeroDyn['B1N3VUndx'] = False # (m/s); x-component of undisturbed wind velocity at Blade 1, Node 3; local blade coordinate system +AeroDyn['B1N4VUndx'] = False # (m/s); x-component of undisturbed wind velocity at Blade 1, Node 4; local blade coordinate system +AeroDyn['B1N5VUndx'] = False # (m/s); x-component of undisturbed wind velocity at Blade 1, Node 5; local blade coordinate system +AeroDyn['B1N6VUndx'] = False # (m/s); x-component of undisturbed wind velocity at Blade 1, Node 6; local blade coordinate system +AeroDyn['B1N7VUndx'] = False # (m/s); x-component of undisturbed wind velocity at Blade 1, Node 7; local blade coordinate system +AeroDyn['B1N8VUndx'] = False # (m/s); x-component of undisturbed wind velocity at Blade 1, Node 8; local blade coordinate system +AeroDyn['B1N9VUndx'] = False # (m/s); x-component of undisturbed wind velocity at Blade 1, Node 9; local blade coordinate system +AeroDyn['B1N1VUndy'] = False # (m/s); y-component of undisturbed wind velocity at Blade 1, Node 1; local blade coordinate system +AeroDyn['B1N2VUndy'] = False # (m/s); y-component of undisturbed wind velocity at Blade 1, Node 2; local blade coordinate system +AeroDyn['B1N3VUndy'] = False # (m/s); y-component of undisturbed wind velocity at Blade 1, Node 3; local blade coordinate system +AeroDyn['B1N4VUndy'] = False # (m/s); y-component of undisturbed wind velocity at Blade 1, Node 4; local blade coordinate system +AeroDyn['B1N5VUndy'] = False # (m/s); y-component of undisturbed wind velocity at Blade 1, Node 5; local blade coordinate system +AeroDyn['B1N6VUndy'] = False # (m/s); y-component of undisturbed wind velocity at Blade 1, Node 6; local blade coordinate system +AeroDyn['B1N7VUndy'] = False # (m/s); y-component of undisturbed wind velocity at Blade 1, Node 7; local blade coordinate system +AeroDyn['B1N8VUndy'] = False # (m/s); y-component of undisturbed wind velocity at Blade 1, Node 8; local blade coordinate system +AeroDyn['B1N9VUndy'] = False # (m/s); y-component of undisturbed wind velocity at Blade 1, Node 9; local blade coordinate system +AeroDyn['B1N1VUndz'] = False # (m/s); z-component of undisturbed wind velocity at Blade 1, Node 1; local blade coordinate system +AeroDyn['B1N2VUndz'] = False # (m/s); z-component of undisturbed wind velocity at Blade 1, Node 2; local blade coordinate system +AeroDyn['B1N3VUndz'] = False # (m/s); z-component of undisturbed wind velocity at Blade 1, Node 3; local blade coordinate system +AeroDyn['B1N4VUndz'] = False # (m/s); z-component of undisturbed wind velocity at Blade 1, Node 4; local blade coordinate system +AeroDyn['B1N5VUndz'] = False # (m/s); z-component of undisturbed wind velocity at Blade 1, Node 5; local blade coordinate system +AeroDyn['B1N6VUndz'] = False # (m/s); z-component of undisturbed wind velocity at Blade 1, Node 6; local blade coordinate system +AeroDyn['B1N7VUndz'] = False # (m/s); z-component of undisturbed wind velocity at Blade 1, Node 7; local blade coordinate system +AeroDyn['B1N8VUndz'] = False # (m/s); z-component of undisturbed wind velocity at Blade 1, Node 8; local blade coordinate system +AeroDyn['B1N9VUndz'] = False # (m/s); z-component of undisturbed wind velocity at Blade 1, Node 9; local blade coordinate system +AeroDyn['B2N1VUndx'] = False # (m/s); x-component of undisturbed wind velocity at Blade 2, Node 1; local blade coordinate system +AeroDyn['B2N2VUndx'] = False # (m/s); x-component of undisturbed wind velocity at Blade 2, Node 2; local blade coordinate system +AeroDyn['B2N3VUndx'] = False # (m/s); x-component of undisturbed wind velocity at Blade 2, Node 3; local blade coordinate system +AeroDyn['B2N4VUndx'] = False # (m/s); x-component of undisturbed wind velocity at Blade 2, Node 4; local blade coordinate system +AeroDyn['B2N5VUndx'] = False # (m/s); x-component of undisturbed wind velocity at Blade 2, Node 5; local blade coordinate system +AeroDyn['B2N6VUndx'] = False # (m/s); x-component of undisturbed wind velocity at Blade 2, Node 6; local blade coordinate system +AeroDyn['B2N7VUndx'] = False # (m/s); x-component of undisturbed wind velocity at Blade 2, Node 7; local blade coordinate system +AeroDyn['B2N8VUndx'] = False # (m/s); x-component of undisturbed wind velocity at Blade 2, Node 8; local blade coordinate system +AeroDyn['B2N9VUndx'] = False # (m/s); x-component of undisturbed wind velocity at Blade 2, Node 9; local blade coordinate system +AeroDyn['B2N1VUndy'] = False # (m/s); y-component of undisturbed wind velocity at Blade 2, Node 1; local blade coordinate system +AeroDyn['B2N2VUndy'] = False # (m/s); y-component of undisturbed wind velocity at Blade 2, Node 2; local blade coordinate system +AeroDyn['B2N3VUndy'] = False # (m/s); y-component of undisturbed wind velocity at Blade 2, Node 3; local blade coordinate system +AeroDyn['B2N4VUndy'] = False # (m/s); y-component of undisturbed wind velocity at Blade 2, Node 4; local blade coordinate system +AeroDyn['B2N5VUndy'] = False # (m/s); y-component of undisturbed wind velocity at Blade 2, Node 5; local blade coordinate system +AeroDyn['B2N6VUndy'] = False # (m/s); y-component of undisturbed wind velocity at Blade 2, Node 6; local blade coordinate system +AeroDyn['B2N7VUndy'] = False # (m/s); y-component of undisturbed wind velocity at Blade 2, Node 7; local blade coordinate system +AeroDyn['B2N8VUndy'] = False # (m/s); y-component of undisturbed wind velocity at Blade 2, Node 8; local blade coordinate system +AeroDyn['B2N9VUndy'] = False # (m/s); y-component of undisturbed wind velocity at Blade 2, Node 9; local blade coordinate system +AeroDyn['B2N1VUndz'] = False # (m/s); z-component of undisturbed wind velocity at Blade 2, Node 1; local blade coordinate system +AeroDyn['B2N2VUndz'] = False # (m/s); z-component of undisturbed wind velocity at Blade 2, Node 2; local blade coordinate system +AeroDyn['B2N3VUndz'] = False # (m/s); z-component of undisturbed wind velocity at Blade 2, Node 3; local blade coordinate system +AeroDyn['B2N4VUndz'] = False # (m/s); z-component of undisturbed wind velocity at Blade 2, Node 4; local blade coordinate system +AeroDyn['B2N5VUndz'] = False # (m/s); z-component of undisturbed wind velocity at Blade 2, Node 5; local blade coordinate system +AeroDyn['B2N6VUndz'] = False # (m/s); z-component of undisturbed wind velocity at Blade 2, Node 6; local blade coordinate system +AeroDyn['B2N7VUndz'] = False # (m/s); z-component of undisturbed wind velocity at Blade 2, Node 7; local blade coordinate system +AeroDyn['B2N8VUndz'] = False # (m/s); z-component of undisturbed wind velocity at Blade 2, Node 8; local blade coordinate system +AeroDyn['B2N9VUndz'] = False # (m/s); z-component of undisturbed wind velocity at Blade 2, Node 9; local blade coordinate system +AeroDyn['B3N1VUndx'] = False # (m/s); x-component of undisturbed wind velocity at Blade 3, Node 1; local blade coordinate system +AeroDyn['B3N2VUndx'] = False # (m/s); x-component of undisturbed wind velocity at Blade 3, Node 2; local blade coordinate system +AeroDyn['B3N3VUndx'] = False # (m/s); x-component of undisturbed wind velocity at Blade 3, Node 3; local blade coordinate system +AeroDyn['B3N4VUndx'] = False # (m/s); x-component of undisturbed wind velocity at Blade 3, Node 4; local blade coordinate system +AeroDyn['B3N5VUndx'] = False # (m/s); x-component of undisturbed wind velocity at Blade 3, Node 5; local blade coordinate system +AeroDyn['B3N6VUndx'] = False # (m/s); x-component of undisturbed wind velocity at Blade 3, Node 6; local blade coordinate system +AeroDyn['B3N7VUndx'] = False # (m/s); x-component of undisturbed wind velocity at Blade 3, Node 7; local blade coordinate system +AeroDyn['B3N8VUndx'] = False # (m/s); x-component of undisturbed wind velocity at Blade 3, Node 8; local blade coordinate system +AeroDyn['B3N9VUndx'] = False # (m/s); x-component of undisturbed wind velocity at Blade 3, Node 9; local blade coordinate system +AeroDyn['B3N1VUndy'] = False # (m/s); y-component of undisturbed wind velocity at Blade 3, Node 1; local blade coordinate system +AeroDyn['B3N2VUndy'] = False # (m/s); y-component of undisturbed wind velocity at Blade 3, Node 2; local blade coordinate system +AeroDyn['B3N3VUndy'] = False # (m/s); y-component of undisturbed wind velocity at Blade 3, Node 3; local blade coordinate system +AeroDyn['B3N4VUndy'] = False # (m/s); y-component of undisturbed wind velocity at Blade 3, Node 4; local blade coordinate system +AeroDyn['B3N5VUndy'] = False # (m/s); y-component of undisturbed wind velocity at Blade 3, Node 5; local blade coordinate system +AeroDyn['B3N6VUndy'] = False # (m/s); y-component of undisturbed wind velocity at Blade 3, Node 6; local blade coordinate system +AeroDyn['B3N7VUndy'] = False # (m/s); y-component of undisturbed wind velocity at Blade 3, Node 7; local blade coordinate system +AeroDyn['B3N8VUndy'] = False # (m/s); y-component of undisturbed wind velocity at Blade 3, Node 8; local blade coordinate system +AeroDyn['B3N9VUndy'] = False # (m/s); y-component of undisturbed wind velocity at Blade 3, Node 9; local blade coordinate system +AeroDyn['B3N1VUndz'] = False # (m/s); z-component of undisturbed wind velocity at Blade 3, Node 1; local blade coordinate system +AeroDyn['B3N2VUndz'] = False # (m/s); z-component of undisturbed wind velocity at Blade 3, Node 2; local blade coordinate system +AeroDyn['B3N3VUndz'] = False # (m/s); z-component of undisturbed wind velocity at Blade 3, Node 3; local blade coordinate system +AeroDyn['B3N4VUndz'] = False # (m/s); z-component of undisturbed wind velocity at Blade 3, Node 4; local blade coordinate system +AeroDyn['B3N5VUndz'] = False # (m/s); z-component of undisturbed wind velocity at Blade 3, Node 5; local blade coordinate system +AeroDyn['B3N6VUndz'] = False # (m/s); z-component of undisturbed wind velocity at Blade 3, Node 6; local blade coordinate system +AeroDyn['B3N7VUndz'] = False # (m/s); z-component of undisturbed wind velocity at Blade 3, Node 7; local blade coordinate system +AeroDyn['B3N8VUndz'] = False # (m/s); z-component of undisturbed wind velocity at Blade 3, Node 8; local blade coordinate system +AeroDyn['B3N9VUndz'] = False # (m/s); z-component of undisturbed wind velocity at Blade 3, Node 9; local blade coordinate system +AeroDyn['B1N1VDisx'] = False # (m/s); x-component of disturbed wind velocity at Blade 1, Node 1; local blade coordinate system +AeroDyn['B1N2VDisx'] = False # (m/s); x-component of disturbed wind velocity at Blade 1, Node 2; local blade coordinate system +AeroDyn['B1N3VDisx'] = False # (m/s); x-component of disturbed wind velocity at Blade 1, Node 3; local blade coordinate system +AeroDyn['B1N4VDisx'] = False # (m/s); x-component of disturbed wind velocity at Blade 1, Node 4; local blade coordinate system +AeroDyn['B1N5VDisx'] = False # (m/s); x-component of disturbed wind velocity at Blade 1, Node 5; local blade coordinate system +AeroDyn['B1N6VDisx'] = False # (m/s); x-component of disturbed wind velocity at Blade 1, Node 6; local blade coordinate system +AeroDyn['B1N7VDisx'] = False # (m/s); x-component of disturbed wind velocity at Blade 1, Node 7; local blade coordinate system +AeroDyn['B1N8VDisx'] = False # (m/s); x-component of disturbed wind velocity at Blade 1, Node 8; local blade coordinate system +AeroDyn['B1N9VDisx'] = False # (m/s); x-component of disturbed wind velocity at Blade 1, Node 9; local blade coordinate system +AeroDyn['B1N1VDisy'] = False # (m/s); y-component of disturbed wind velocity at Blade 1, Node 1; local blade coordinate system +AeroDyn['B1N2VDisy'] = False # (m/s); y-component of disturbed wind velocity at Blade 1, Node 2; local blade coordinate system +AeroDyn['B1N3VDisy'] = False # (m/s); y-component of disturbed wind velocity at Blade 1, Node 3; local blade coordinate system +AeroDyn['B1N4VDisy'] = False # (m/s); y-component of disturbed wind velocity at Blade 1, Node 4; local blade coordinate system +AeroDyn['B1N5VDisy'] = False # (m/s); y-component of disturbed wind velocity at Blade 1, Node 5; local blade coordinate system +AeroDyn['B1N6VDisy'] = False # (m/s); y-component of disturbed wind velocity at Blade 1, Node 6; local blade coordinate system +AeroDyn['B1N7VDisy'] = False # (m/s); y-component of disturbed wind velocity at Blade 1, Node 7; local blade coordinate system +AeroDyn['B1N8VDisy'] = False # (m/s); y-component of disturbed wind velocity at Blade 1, Node 8; local blade coordinate system +AeroDyn['B1N9VDisy'] = False # (m/s); y-component of disturbed wind velocity at Blade 1, Node 9; local blade coordinate system +AeroDyn['B1N1VDisz'] = False # (m/s); z-component of disturbed wind velocity at Blade 1, Node 1; local blade coordinate system +AeroDyn['B1N2VDisz'] = False # (m/s); z-component of disturbed wind velocity at Blade 1, Node 2; local blade coordinate system +AeroDyn['B1N3VDisz'] = False # (m/s); z-component of disturbed wind velocity at Blade 1, Node 3; local blade coordinate system +AeroDyn['B1N4VDisz'] = False # (m/s); z-component of disturbed wind velocity at Blade 1, Node 4; local blade coordinate system +AeroDyn['B1N5VDisz'] = False # (m/s); z-component of disturbed wind velocity at Blade 1, Node 5; local blade coordinate system +AeroDyn['B1N6VDisz'] = False # (m/s); z-component of disturbed wind velocity at Blade 1, Node 6; local blade coordinate system +AeroDyn['B1N7VDisz'] = False # (m/s); z-component of disturbed wind velocity at Blade 1, Node 7; local blade coordinate system +AeroDyn['B1N8VDisz'] = False # (m/s); z-component of disturbed wind velocity at Blade 1, Node 8; local blade coordinate system +AeroDyn['B1N9VDisz'] = False # (m/s); z-component of disturbed wind velocity at Blade 1, Node 9; local blade coordinate system +AeroDyn['B2N1VDisx'] = False # (m/s); x-component of disturbed wind velocity at Blade 2, Node 1; local blade coordinate system +AeroDyn['B2N2VDisx'] = False # (m/s); x-component of disturbed wind velocity at Blade 2, Node 2; local blade coordinate system +AeroDyn['B2N3VDisx'] = False # (m/s); x-component of disturbed wind velocity at Blade 2, Node 3; local blade coordinate system +AeroDyn['B2N4VDisx'] = False # (m/s); x-component of disturbed wind velocity at Blade 2, Node 4; local blade coordinate system +AeroDyn['B2N5VDisx'] = False # (m/s); x-component of disturbed wind velocity at Blade 2, Node 5; local blade coordinate system +AeroDyn['B2N6VDisx'] = False # (m/s); x-component of disturbed wind velocity at Blade 2, Node 6; local blade coordinate system +AeroDyn['B2N7VDisx'] = False # (m/s); x-component of disturbed wind velocity at Blade 2, Node 7; local blade coordinate system +AeroDyn['B2N8VDisx'] = False # (m/s); x-component of disturbed wind velocity at Blade 2, Node 8; local blade coordinate system +AeroDyn['B2N9VDisx'] = False # (m/s); x-component of disturbed wind velocity at Blade 2, Node 9; local blade coordinate system +AeroDyn['B2N1VDisy'] = False # (m/s); y-component of disturbed wind velocity at Blade 2, Node 1; local blade coordinate system +AeroDyn['B2N2VDisy'] = False # (m/s); y-component of disturbed wind velocity at Blade 2, Node 2; local blade coordinate system +AeroDyn['B2N3VDisy'] = False # (m/s); y-component of disturbed wind velocity at Blade 2, Node 3; local blade coordinate system +AeroDyn['B2N4VDisy'] = False # (m/s); y-component of disturbed wind velocity at Blade 2, Node 4; local blade coordinate system +AeroDyn['B2N5VDisy'] = False # (m/s); y-component of disturbed wind velocity at Blade 2, Node 5; local blade coordinate system +AeroDyn['B2N6VDisy'] = False # (m/s); y-component of disturbed wind velocity at Blade 2, Node 6; local blade coordinate system +AeroDyn['B2N7VDisy'] = False # (m/s); y-component of disturbed wind velocity at Blade 2, Node 7; local blade coordinate system +AeroDyn['B2N8VDisy'] = False # (m/s); y-component of disturbed wind velocity at Blade 2, Node 8; local blade coordinate system +AeroDyn['B2N9VDisy'] = False # (m/s); y-component of disturbed wind velocity at Blade 2, Node 9; local blade coordinate system +AeroDyn['B2N1VDisz'] = False # (m/s); z-component of disturbed wind velocity at Blade 2, Node 1; local blade coordinate system +AeroDyn['B2N2VDisz'] = False # (m/s); z-component of disturbed wind velocity at Blade 2, Node 2; local blade coordinate system +AeroDyn['B2N3VDisz'] = False # (m/s); z-component of disturbed wind velocity at Blade 2, Node 3; local blade coordinate system +AeroDyn['B2N4VDisz'] = False # (m/s); z-component of disturbed wind velocity at Blade 2, Node 4; local blade coordinate system +AeroDyn['B2N5VDisz'] = False # (m/s); z-component of disturbed wind velocity at Blade 2, Node 5; local blade coordinate system +AeroDyn['B2N6VDisz'] = False # (m/s); z-component of disturbed wind velocity at Blade 2, Node 6; local blade coordinate system +AeroDyn['B2N7VDisz'] = False # (m/s); z-component of disturbed wind velocity at Blade 2, Node 7; local blade coordinate system +AeroDyn['B2N8VDisz'] = False # (m/s); z-component of disturbed wind velocity at Blade 2, Node 8; local blade coordinate system +AeroDyn['B2N9VDisz'] = False # (m/s); z-component of disturbed wind velocity at Blade 2, Node 9; local blade coordinate system +AeroDyn['B3N1VDisx'] = False # (m/s); x-component of disturbed wind velocity at Blade 3, Node 1; local blade coordinate system +AeroDyn['B3N2VDisx'] = False # (m/s); x-component of disturbed wind velocity at Blade 3, Node 2; local blade coordinate system +AeroDyn['B3N3VDisx'] = False # (m/s); x-component of disturbed wind velocity at Blade 3, Node 3; local blade coordinate system +AeroDyn['B3N4VDisx'] = False # (m/s); x-component of disturbed wind velocity at Blade 3, Node 4; local blade coordinate system +AeroDyn['B3N5VDisx'] = False # (m/s); x-component of disturbed wind velocity at Blade 3, Node 5; local blade coordinate system +AeroDyn['B3N6VDisx'] = False # (m/s); x-component of disturbed wind velocity at Blade 3, Node 6; local blade coordinate system +AeroDyn['B3N7VDisx'] = False # (m/s); x-component of disturbed wind velocity at Blade 3, Node 7; local blade coordinate system +AeroDyn['B3N8VDisx'] = False # (m/s); x-component of disturbed wind velocity at Blade 3, Node 8; local blade coordinate system +AeroDyn['B3N9VDisx'] = False # (m/s); x-component of disturbed wind velocity at Blade 3, Node 9; local blade coordinate system +AeroDyn['B3N1VDisy'] = False # (m/s); y-component of disturbed wind velocity at Blade 3, Node 1; local blade coordinate system +AeroDyn['B3N2VDisy'] = False # (m/s); y-component of disturbed wind velocity at Blade 3, Node 2; local blade coordinate system +AeroDyn['B3N3VDisy'] = False # (m/s); y-component of disturbed wind velocity at Blade 3, Node 3; local blade coordinate system +AeroDyn['B3N4VDisy'] = False # (m/s); y-component of disturbed wind velocity at Blade 3, Node 4; local blade coordinate system +AeroDyn['B3N5VDisy'] = False # (m/s); y-component of disturbed wind velocity at Blade 3, Node 5; local blade coordinate system +AeroDyn['B3N6VDisy'] = False # (m/s); y-component of disturbed wind velocity at Blade 3, Node 6; local blade coordinate system +AeroDyn['B3N7VDisy'] = False # (m/s); y-component of disturbed wind velocity at Blade 3, Node 7; local blade coordinate system +AeroDyn['B3N8VDisy'] = False # (m/s); y-component of disturbed wind velocity at Blade 3, Node 8; local blade coordinate system +AeroDyn['B3N9VDisy'] = False # (m/s); y-component of disturbed wind velocity at Blade 3, Node 9; local blade coordinate system +AeroDyn['B3N1VDisz'] = False # (m/s); z-component of disturbed wind velocity at Blade 3, Node 1; local blade coordinate system +AeroDyn['B3N2VDisz'] = False # (m/s); z-component of disturbed wind velocity at Blade 3, Node 2; local blade coordinate system +AeroDyn['B3N3VDisz'] = False # (m/s); z-component of disturbed wind velocity at Blade 3, Node 3; local blade coordinate system +AeroDyn['B3N4VDisz'] = False # (m/s); z-component of disturbed wind velocity at Blade 3, Node 4; local blade coordinate system +AeroDyn['B3N5VDisz'] = False # (m/s); z-component of disturbed wind velocity at Blade 3, Node 5; local blade coordinate system +AeroDyn['B3N6VDisz'] = False # (m/s); z-component of disturbed wind velocity at Blade 3, Node 6; local blade coordinate system +AeroDyn['B3N7VDisz'] = False # (m/s); z-component of disturbed wind velocity at Blade 3, Node 7; local blade coordinate system +AeroDyn['B3N8VDisz'] = False # (m/s); z-component of disturbed wind velocity at Blade 3, Node 8; local blade coordinate system +AeroDyn['B3N9VDisz'] = False # (m/s); z-component of disturbed wind velocity at Blade 3, Node 9; local blade coordinate system +AeroDyn['B1N1STVx'] = False # (m/s); x-component of structural translational velocity at Blade 1, Node 1; local blade coordinate system +AeroDyn['B1N2STVx'] = False # (m/s); x-component of structural translational velocity at Blade 1, Node 2; local blade coordinate system +AeroDyn['B1N3STVx'] = False # (m/s); x-component of structural translational velocity at Blade 1, Node 3; local blade coordinate system +AeroDyn['B1N4STVx'] = False # (m/s); x-component of structural translational velocity at Blade 1, Node 4; local blade coordinate system +AeroDyn['B1N5STVx'] = False # (m/s); x-component of structural translational velocity at Blade 1, Node 5; local blade coordinate system +AeroDyn['B1N6STVx'] = False # (m/s); x-component of structural translational velocity at Blade 1, Node 6; local blade coordinate system +AeroDyn['B1N7STVx'] = False # (m/s); x-component of structural translational velocity at Blade 1, Node 7; local blade coordinate system +AeroDyn['B1N8STVx'] = False # (m/s); x-component of structural translational velocity at Blade 1, Node 8; local blade coordinate system +AeroDyn['B1N9STVx'] = False # (m/s); x-component of structural translational velocity at Blade 1, Node 9; local blade coordinate system +AeroDyn['B1N1STVy'] = False # (m/s); y-component of structural translational velocity at Blade 1, Node 1; local blade coordinate system +AeroDyn['B1N2STVy'] = False # (m/s); y-component of structural translational velocity at Blade 1, Node 2; local blade coordinate system +AeroDyn['B1N3STVy'] = False # (m/s); y-component of structural translational velocity at Blade 1, Node 3; local blade coordinate system +AeroDyn['B1N4STVy'] = False # (m/s); y-component of structural translational velocity at Blade 1, Node 4; local blade coordinate system +AeroDyn['B1N5STVy'] = False # (m/s); y-component of structural translational velocity at Blade 1, Node 5; local blade coordinate system +AeroDyn['B1N6STVy'] = False # (m/s); y-component of structural translational velocity at Blade 1, Node 6; local blade coordinate system +AeroDyn['B1N7STVy'] = False # (m/s); y-component of structural translational velocity at Blade 1, Node 7; local blade coordinate system +AeroDyn['B1N8STVy'] = False # (m/s); y-component of structural translational velocity at Blade 1, Node 8; local blade coordinate system +AeroDyn['B1N9STVy'] = False # (m/s); y-component of structural translational velocity at Blade 1, Node 9; local blade coordinate system +AeroDyn['B1N1STVz'] = False # (m/s); z-component of structural translational velocity at Blade 1, Node 1; local blade coordinate system +AeroDyn['B1N2STVz'] = False # (m/s); z-component of structural translational velocity at Blade 1, Node 2; local blade coordinate system +AeroDyn['B1N3STVz'] = False # (m/s); z-component of structural translational velocity at Blade 1, Node 3; local blade coordinate system +AeroDyn['B1N4STVz'] = False # (m/s); z-component of structural translational velocity at Blade 1, Node 4; local blade coordinate system +AeroDyn['B1N5STVz'] = False # (m/s); z-component of structural translational velocity at Blade 1, Node 5; local blade coordinate system +AeroDyn['B1N6STVz'] = False # (m/s); z-component of structural translational velocity at Blade 1, Node 6; local blade coordinate system +AeroDyn['B1N7STVz'] = False # (m/s); z-component of structural translational velocity at Blade 1, Node 7; local blade coordinate system +AeroDyn['B1N8STVz'] = False # (m/s); z-component of structural translational velocity at Blade 1, Node 8; local blade coordinate system +AeroDyn['B1N9STVz'] = False # (m/s); z-component of structural translational velocity at Blade 1, Node 9; local blade coordinate system +AeroDyn['B2N1STVx'] = False # (m/s); x-component of structural translational velocity at Blade 2, Node 1; local blade coordinate system +AeroDyn['B2N2STVx'] = False # (m/s); x-component of structural translational velocity at Blade 2, Node 2; local blade coordinate system +AeroDyn['B2N3STVx'] = False # (m/s); x-component of structural translational velocity at Blade 2, Node 3; local blade coordinate system +AeroDyn['B2N4STVx'] = False # (m/s); x-component of structural translational velocity at Blade 2, Node 4; local blade coordinate system +AeroDyn['B2N5STVx'] = False # (m/s); x-component of structural translational velocity at Blade 2, Node 5; local blade coordinate system +AeroDyn['B2N6STVx'] = False # (m/s); x-component of structural translational velocity at Blade 2, Node 6; local blade coordinate system +AeroDyn['B2N7STVx'] = False # (m/s); x-component of structural translational velocity at Blade 2, Node 7; local blade coordinate system +AeroDyn['B2N8STVx'] = False # (m/s); x-component of structural translational velocity at Blade 2, Node 8; local blade coordinate system +AeroDyn['B2N9STVx'] = False # (m/s); x-component of structural translational velocity at Blade 2, Node 9; local blade coordinate system +AeroDyn['B2N1STVy'] = False # (m/s); y-component of structural translational velocity at Blade 2, Node 1; local blade coordinate system +AeroDyn['B2N2STVy'] = False # (m/s); y-component of structural translational velocity at Blade 2, Node 2; local blade coordinate system +AeroDyn['B2N3STVy'] = False # (m/s); y-component of structural translational velocity at Blade 2, Node 3; local blade coordinate system +AeroDyn['B2N4STVy'] = False # (m/s); y-component of structural translational velocity at Blade 2, Node 4; local blade coordinate system +AeroDyn['B2N5STVy'] = False # (m/s); y-component of structural translational velocity at Blade 2, Node 5; local blade coordinate system +AeroDyn['B2N6STVy'] = False # (m/s); y-component of structural translational velocity at Blade 2, Node 6; local blade coordinate system +AeroDyn['B2N7STVy'] = False # (m/s); y-component of structural translational velocity at Blade 2, Node 7; local blade coordinate system +AeroDyn['B2N8STVy'] = False # (m/s); y-component of structural translational velocity at Blade 2, Node 8; local blade coordinate system +AeroDyn['B2N9STVy'] = False # (m/s); y-component of structural translational velocity at Blade 2, Node 9; local blade coordinate system +AeroDyn['B2N1STVz'] = False # (m/s); z-component of structural translational velocity at Blade 2, Node 1; local blade coordinate system +AeroDyn['B2N2STVz'] = False # (m/s); z-component of structural translational velocity at Blade 2, Node 2; local blade coordinate system +AeroDyn['B2N3STVz'] = False # (m/s); z-component of structural translational velocity at Blade 2, Node 3; local blade coordinate system +AeroDyn['B2N4STVz'] = False # (m/s); z-component of structural translational velocity at Blade 2, Node 4; local blade coordinate system +AeroDyn['B2N5STVz'] = False # (m/s); z-component of structural translational velocity at Blade 2, Node 5; local blade coordinate system +AeroDyn['B2N6STVz'] = False # (m/s); z-component of structural translational velocity at Blade 2, Node 6; local blade coordinate system +AeroDyn['B2N7STVz'] = False # (m/s); z-component of structural translational velocity at Blade 2, Node 7; local blade coordinate system +AeroDyn['B2N8STVz'] = False # (m/s); z-component of structural translational velocity at Blade 2, Node 8; local blade coordinate system +AeroDyn['B2N9STVz'] = False # (m/s); z-component of structural translational velocity at Blade 2, Node 9; local blade coordinate system +AeroDyn['B3N1STVx'] = False # (m/s); x-component of structural translational velocity at Blade 3, Node 1; local blade coordinate system +AeroDyn['B3N2STVx'] = False # (m/s); x-component of structural translational velocity at Blade 3, Node 2; local blade coordinate system +AeroDyn['B3N3STVx'] = False # (m/s); x-component of structural translational velocity at Blade 3, Node 3; local blade coordinate system +AeroDyn['B3N4STVx'] = False # (m/s); x-component of structural translational velocity at Blade 3, Node 4; local blade coordinate system +AeroDyn['B3N5STVx'] = False # (m/s); x-component of structural translational velocity at Blade 3, Node 5; local blade coordinate system +AeroDyn['B3N6STVx'] = False # (m/s); x-component of structural translational velocity at Blade 3, Node 6; local blade coordinate system +AeroDyn['B3N7STVx'] = False # (m/s); x-component of structural translational velocity at Blade 3, Node 7; local blade coordinate system +AeroDyn['B3N8STVx'] = False # (m/s); x-component of structural translational velocity at Blade 3, Node 8; local blade coordinate system +AeroDyn['B3N9STVx'] = False # (m/s); x-component of structural translational velocity at Blade 3, Node 9; local blade coordinate system +AeroDyn['B3N1STVy'] = False # (m/s); y-component of structural translational velocity at Blade 3, Node 1; local blade coordinate system +AeroDyn['B3N2STVy'] = False # (m/s); y-component of structural translational velocity at Blade 3, Node 2; local blade coordinate system +AeroDyn['B3N3STVy'] = False # (m/s); y-component of structural translational velocity at Blade 3, Node 3; local blade coordinate system +AeroDyn['B3N4STVy'] = False # (m/s); y-component of structural translational velocity at Blade 3, Node 4; local blade coordinate system +AeroDyn['B3N5STVy'] = False # (m/s); y-component of structural translational velocity at Blade 3, Node 5; local blade coordinate system +AeroDyn['B3N6STVy'] = False # (m/s); y-component of structural translational velocity at Blade 3, Node 6; local blade coordinate system +AeroDyn['B3N7STVy'] = False # (m/s); y-component of structural translational velocity at Blade 3, Node 7; local blade coordinate system +AeroDyn['B3N8STVy'] = False # (m/s); y-component of structural translational velocity at Blade 3, Node 8; local blade coordinate system +AeroDyn['B3N9STVy'] = False # (m/s); y-component of structural translational velocity at Blade 3, Node 9; local blade coordinate system +AeroDyn['B3N1STVz'] = False # (m/s); z-component of structural translational velocity at Blade 3, Node 1; local blade coordinate system +AeroDyn['B3N2STVz'] = False # (m/s); z-component of structural translational velocity at Blade 3, Node 2; local blade coordinate system +AeroDyn['B3N3STVz'] = False # (m/s); z-component of structural translational velocity at Blade 3, Node 3; local blade coordinate system +AeroDyn['B3N4STVz'] = False # (m/s); z-component of structural translational velocity at Blade 3, Node 4; local blade coordinate system +AeroDyn['B3N5STVz'] = False # (m/s); z-component of structural translational velocity at Blade 3, Node 5; local blade coordinate system +AeroDyn['B3N6STVz'] = False # (m/s); z-component of structural translational velocity at Blade 3, Node 6; local blade coordinate system +AeroDyn['B3N7STVz'] = False # (m/s); z-component of structural translational velocity at Blade 3, Node 7; local blade coordinate system +AeroDyn['B3N8STVz'] = False # (m/s); z-component of structural translational velocity at Blade 3, Node 8; local blade coordinate system +AeroDyn['B3N9STVz'] = False # (m/s); z-component of structural translational velocity at Blade 3, Node 9; local blade coordinate system +AeroDyn['B1N1VRel'] = False # (m/s); Relvative wind speed at Blade 1, Node 1; +AeroDyn['B1N2VRel'] = False # (m/s); Relvative wind speed at Blade 1, Node 2; +AeroDyn['B1N3VRel'] = False # (m/s); Relvative wind speed at Blade 1, Node 3; +AeroDyn['B1N4VRel'] = False # (m/s); Relvative wind speed at Blade 1, Node 4; +AeroDyn['B1N5VRel'] = False # (m/s); Relvative wind speed at Blade 1, Node 5; +AeroDyn['B1N6VRel'] = False # (m/s); Relvative wind speed at Blade 1, Node 6; +AeroDyn['B1N7VRel'] = False # (m/s); Relvative wind speed at Blade 1, Node 7; +AeroDyn['B1N8VRel'] = False # (m/s); Relvative wind speed at Blade 1, Node 8; +AeroDyn['B1N9VRel'] = False # (m/s); Relvative wind speed at Blade 1, Node 9; +AeroDyn['B2N1VRel'] = False # (m/s); Relvative wind speed at Blade 2, Node 1; +AeroDyn['B2N2VRel'] = False # (m/s); Relvative wind speed at Blade 2, Node 2; +AeroDyn['B2N3VRel'] = False # (m/s); Relvative wind speed at Blade 2, Node 3; +AeroDyn['B2N4VRel'] = False # (m/s); Relvative wind speed at Blade 2, Node 4; +AeroDyn['B2N5VRel'] = False # (m/s); Relvative wind speed at Blade 2, Node 5; +AeroDyn['B2N6VRel'] = False # (m/s); Relvative wind speed at Blade 2, Node 6; +AeroDyn['B2N7VRel'] = False # (m/s); Relvative wind speed at Blade 2, Node 7; +AeroDyn['B2N8VRel'] = False # (m/s); Relvative wind speed at Blade 2, Node 8; +AeroDyn['B2N9VRel'] = False # (m/s); Relvative wind speed at Blade 2, Node 9; +AeroDyn['B3N1VRel'] = False # (m/s); Relvative wind speed at Blade 3, Node 1; +AeroDyn['B3N2VRel'] = False # (m/s); Relvative wind speed at Blade 3, Node 2; +AeroDyn['B3N3VRel'] = False # (m/s); Relvative wind speed at Blade 3, Node 3; +AeroDyn['B3N4VRel'] = False # (m/s); Relvative wind speed at Blade 3, Node 4; +AeroDyn['B3N5VRel'] = False # (m/s); Relvative wind speed at Blade 3, Node 5; +AeroDyn['B3N6VRel'] = False # (m/s); Relvative wind speed at Blade 3, Node 6; +AeroDyn['B3N7VRel'] = False # (m/s); Relvative wind speed at Blade 3, Node 7; +AeroDyn['B3N8VRel'] = False # (m/s); Relvative wind speed at Blade 3, Node 8; +AeroDyn['B3N9VRel'] = False # (m/s); Relvative wind speed at Blade 3, Node 9; +AeroDyn['B1N1DynP'] = False # (Pa); Dynamic pressure at Blade 1, Node 1; +AeroDyn['B1N2DynP'] = False # (Pa); Dynamic pressure at Blade 1, Node 2; +AeroDyn['B1N3DynP'] = False # (Pa); Dynamic pressure at Blade 1, Node 3; +AeroDyn['B1N4DynP'] = False # (Pa); Dynamic pressure at Blade 1, Node 4; +AeroDyn['B1N5DynP'] = False # (Pa); Dynamic pressure at Blade 1, Node 5; +AeroDyn['B1N6DynP'] = False # (Pa); Dynamic pressure at Blade 1, Node 6; +AeroDyn['B1N7DynP'] = False # (Pa); Dynamic pressure at Blade 1, Node 7; +AeroDyn['B1N8DynP'] = False # (Pa); Dynamic pressure at Blade 1, Node 8; +AeroDyn['B1N9DynP'] = False # (Pa); Dynamic pressure at Blade 1, Node 9; +AeroDyn['B2N1DynP'] = False # (Pa); Dynamic pressure at Blade 2, Node 1; +AeroDyn['B2N2DynP'] = False # (Pa); Dynamic pressure at Blade 2, Node 2; +AeroDyn['B2N3DynP'] = False # (Pa); Dynamic pressure at Blade 2, Node 3; +AeroDyn['B2N4DynP'] = False # (Pa); Dynamic pressure at Blade 2, Node 4; +AeroDyn['B2N5DynP'] = False # (Pa); Dynamic pressure at Blade 2, Node 5; +AeroDyn['B2N6DynP'] = False # (Pa); Dynamic pressure at Blade 2, Node 6; +AeroDyn['B2N7DynP'] = False # (Pa); Dynamic pressure at Blade 2, Node 7; +AeroDyn['B2N8DynP'] = False # (Pa); Dynamic pressure at Blade 2, Node 8; +AeroDyn['B2N9DynP'] = False # (Pa); Dynamic pressure at Blade 2, Node 9; +AeroDyn['B3N1DynP'] = False # (Pa); Dynamic pressure at Blade 3, Node 1; +AeroDyn['B3N2DynP'] = False # (Pa); Dynamic pressure at Blade 3, Node 2; +AeroDyn['B3N3DynP'] = False # (Pa); Dynamic pressure at Blade 3, Node 3; +AeroDyn['B3N4DynP'] = False # (Pa); Dynamic pressure at Blade 3, Node 4; +AeroDyn['B3N5DynP'] = False # (Pa); Dynamic pressure at Blade 3, Node 5; +AeroDyn['B3N6DynP'] = False # (Pa); Dynamic pressure at Blade 3, Node 6; +AeroDyn['B3N7DynP'] = False # (Pa); Dynamic pressure at Blade 3, Node 7; +AeroDyn['B3N8DynP'] = False # (Pa); Dynamic pressure at Blade 3, Node 8; +AeroDyn['B3N9DynP'] = False # (Pa); Dynamic pressure at Blade 3, Node 9; +AeroDyn['B1N1Re'] = False # (-); Reynolds number (in millions) at Blade 1, Node 1; +AeroDyn['B1N2Re'] = False # (-); Reynolds number (in millions) at Blade 1, Node 2; +AeroDyn['B1N3Re'] = False # (-); Reynolds number (in millions) at Blade 1, Node 3; +AeroDyn['B1N4Re'] = False # (-); Reynolds number (in millions) at Blade 1, Node 4; +AeroDyn['B1N5Re'] = False # (-); Reynolds number (in millions) at Blade 1, Node 5; +AeroDyn['B1N6Re'] = False # (-); Reynolds number (in millions) at Blade 1, Node 6; +AeroDyn['B1N7Re'] = False # (-); Reynolds number (in millions) at Blade 1, Node 7; +AeroDyn['B1N8Re'] = False # (-); Reynolds number (in millions) at Blade 1, Node 8; +AeroDyn['B1N9Re'] = False # (-); Reynolds number (in millions) at Blade 1, Node 9; +AeroDyn['B2N1Re'] = False # (-); Reynolds number (in millions) at Blade 2, Node 1; +AeroDyn['B2N2Re'] = False # (-); Reynolds number (in millions) at Blade 2, Node 2; +AeroDyn['B2N3Re'] = False # (-); Reynolds number (in millions) at Blade 2, Node 3; +AeroDyn['B2N4Re'] = False # (-); Reynolds number (in millions) at Blade 2, Node 4; +AeroDyn['B2N5Re'] = False # (-); Reynolds number (in millions) at Blade 2, Node 5; +AeroDyn['B2N6Re'] = False # (-); Reynolds number (in millions) at Blade 2, Node 6; +AeroDyn['B2N7Re'] = False # (-); Reynolds number (in millions) at Blade 2, Node 7; +AeroDyn['B2N8Re'] = False # (-); Reynolds number (in millions) at Blade 2, Node 8; +AeroDyn['B2N9Re'] = False # (-); Reynolds number (in millions) at Blade 2, Node 9; +AeroDyn['B3N1Re'] = False # (-); Reynolds number (in millions) at Blade 3, Node 1; +AeroDyn['B3N2Re'] = False # (-); Reynolds number (in millions) at Blade 3, Node 2; +AeroDyn['B3N3Re'] = False # (-); Reynolds number (in millions) at Blade 3, Node 3; +AeroDyn['B3N4Re'] = False # (-); Reynolds number (in millions) at Blade 3, Node 4; +AeroDyn['B3N5Re'] = False # (-); Reynolds number (in millions) at Blade 3, Node 5; +AeroDyn['B3N6Re'] = False # (-); Reynolds number (in millions) at Blade 3, Node 6; +AeroDyn['B3N7Re'] = False # (-); Reynolds number (in millions) at Blade 3, Node 7; +AeroDyn['B3N8Re'] = False # (-); Reynolds number (in millions) at Blade 3, Node 8; +AeroDyn['B3N9Re'] = False # (-); Reynolds number (in millions) at Blade 3, Node 9; +AeroDyn['B1N1M'] = False # (-); Mach number at Blade 1, Node 1; +AeroDyn['B1N2M'] = False # (-); Mach number at Blade 1, Node 2; +AeroDyn['B1N3M'] = False # (-); Mach number at Blade 1, Node 3; +AeroDyn['B1N4M'] = False # (-); Mach number at Blade 1, Node 4; +AeroDyn['B1N5M'] = False # (-); Mach number at Blade 1, Node 5; +AeroDyn['B1N6M'] = False # (-); Mach number at Blade 1, Node 6; +AeroDyn['B1N7M'] = False # (-); Mach number at Blade 1, Node 7; +AeroDyn['B1N8M'] = False # (-); Mach number at Blade 1, Node 8; +AeroDyn['B1N9M'] = False # (-); Mach number at Blade 1, Node 9; +AeroDyn['B2N1M'] = False # (-); Mach number at Blade 2, Node 1; +AeroDyn['B2N2M'] = False # (-); Mach number at Blade 2, Node 2; +AeroDyn['B2N3M'] = False # (-); Mach number at Blade 2, Node 3; +AeroDyn['B2N4M'] = False # (-); Mach number at Blade 2, Node 4; +AeroDyn['B2N5M'] = False # (-); Mach number at Blade 2, Node 5; +AeroDyn['B2N6M'] = False # (-); Mach number at Blade 2, Node 6; +AeroDyn['B2N7M'] = False # (-); Mach number at Blade 2, Node 7; +AeroDyn['B2N8M'] = False # (-); Mach number at Blade 2, Node 8; +AeroDyn['B2N9M'] = False # (-); Mach number at Blade 2, Node 9; +AeroDyn['B3N1M'] = False # (-); Mach number at Blade 3, Node 1; +AeroDyn['B3N2M'] = False # (-); Mach number at Blade 3, Node 2; +AeroDyn['B3N3M'] = False # (-); Mach number at Blade 3, Node 3; +AeroDyn['B3N4M'] = False # (-); Mach number at Blade 3, Node 4; +AeroDyn['B3N5M'] = False # (-); Mach number at Blade 3, Node 5; +AeroDyn['B3N6M'] = False # (-); Mach number at Blade 3, Node 6; +AeroDyn['B3N7M'] = False # (-); Mach number at Blade 3, Node 7; +AeroDyn['B3N8M'] = False # (-); Mach number at Blade 3, Node 8; +AeroDyn['B3N9M'] = False # (-); Mach number at Blade 3, Node 9; +AeroDyn['B1N1Vindx'] = False # (m/s); Axial induced wind velocity at Blade 1, Node 1; +AeroDyn['B1N2Vindx'] = False # (m/s); Axial induced wind velocity at Blade 1, Node 2; +AeroDyn['B1N3Vindx'] = False # (m/s); Axial induced wind velocity at Blade 1, Node 3; +AeroDyn['B1N4Vindx'] = False # (m/s); Axial induced wind velocity at Blade 1, Node 4; +AeroDyn['B1N5Vindx'] = False # (m/s); Axial induced wind velocity at Blade 1, Node 5; +AeroDyn['B1N6Vindx'] = False # (m/s); Axial induced wind velocity at Blade 1, Node 6; +AeroDyn['B1N7Vindx'] = False # (m/s); Axial induced wind velocity at Blade 1, Node 7; +AeroDyn['B1N8Vindx'] = False # (m/s); Axial induced wind velocity at Blade 1, Node 8; +AeroDyn['B1N9Vindx'] = False # (m/s); Axial induced wind velocity at Blade 1, Node 9; +AeroDyn['B2N1Vindx'] = False # (m/s); Axial induced wind velocity at Blade 2, Node 1; +AeroDyn['B2N2Vindx'] = False # (m/s); Axial induced wind velocity at Blade 2, Node 2; +AeroDyn['B2N3Vindx'] = False # (m/s); Axial induced wind velocity at Blade 2, Node 3; +AeroDyn['B2N4Vindx'] = False # (m/s); Axial induced wind velocity at Blade 2, Node 4; +AeroDyn['B2N5Vindx'] = False # (m/s); Axial induced wind velocity at Blade 2, Node 5; +AeroDyn['B2N6Vindx'] = False # (m/s); Axial induced wind velocity at Blade 2, Node 6; +AeroDyn['B2N7Vindx'] = False # (m/s); Axial induced wind velocity at Blade 2, Node 7; +AeroDyn['B2N8Vindx'] = False # (m/s); Axial induced wind velocity at Blade 2, Node 8; +AeroDyn['B2N9Vindx'] = False # (m/s); Axial induced wind velocity at Blade 2, Node 9; +AeroDyn['B3N1Vindx'] = False # (m/s); Axial induced wind velocity at Blade 3, Node 1; +AeroDyn['B3N2Vindx'] = False # (m/s); Axial induced wind velocity at Blade 3, Node 2; +AeroDyn['B3N3Vindx'] = False # (m/s); Axial induced wind velocity at Blade 3, Node 3; +AeroDyn['B3N4Vindx'] = False # (m/s); Axial induced wind velocity at Blade 3, Node 4; +AeroDyn['B3N5Vindx'] = False # (m/s); Axial induced wind velocity at Blade 3, Node 5; +AeroDyn['B3N6Vindx'] = False # (m/s); Axial induced wind velocity at Blade 3, Node 6; +AeroDyn['B3N7Vindx'] = False # (m/s); Axial induced wind velocity at Blade 3, Node 7; +AeroDyn['B3N8Vindx'] = False # (m/s); Axial induced wind velocity at Blade 3, Node 8; +AeroDyn['B3N9Vindx'] = False # (m/s); Axial induced wind velocity at Blade 3, Node 9; +AeroDyn['B1N1Vindy'] = False # (m/s); Tangential induced wind velocity at Blade 1, Node 1; +AeroDyn['B1N2Vindy'] = False # (m/s); Tangential induced wind velocity at Blade 1, Node 2; +AeroDyn['B1N3Vindy'] = False # (m/s); Tangential induced wind velocity at Blade 1, Node 3; +AeroDyn['B1N4Vindy'] = False # (m/s); Tangential induced wind velocity at Blade 1, Node 4; +AeroDyn['B1N5Vindy'] = False # (m/s); Tangential induced wind velocity at Blade 1, Node 5; +AeroDyn['B1N6Vindy'] = False # (m/s); Tangential induced wind velocity at Blade 1, Node 6; +AeroDyn['B1N7Vindy'] = False # (m/s); Tangential induced wind velocity at Blade 1, Node 7; +AeroDyn['B1N8Vindy'] = False # (m/s); Tangential induced wind velocity at Blade 1, Node 8; +AeroDyn['B1N9Vindy'] = False # (m/s); Tangential induced wind velocity at Blade 1, Node 9; +AeroDyn['B2N1Vindy'] = False # (m/s); Tangential induced wind velocity at Blade 2, Node 1; +AeroDyn['B2N2Vindy'] = False # (m/s); Tangential induced wind velocity at Blade 2, Node 2; +AeroDyn['B2N3Vindy'] = False # (m/s); Tangential induced wind velocity at Blade 2, Node 3; +AeroDyn['B2N4Vindy'] = False # (m/s); Tangential induced wind velocity at Blade 2, Node 4; +AeroDyn['B2N5Vindy'] = False # (m/s); Tangential induced wind velocity at Blade 2, Node 5; +AeroDyn['B2N6Vindy'] = False # (m/s); Tangential induced wind velocity at Blade 2, Node 6; +AeroDyn['B2N7Vindy'] = False # (m/s); Tangential induced wind velocity at Blade 2, Node 7; +AeroDyn['B2N8Vindy'] = False # (m/s); Tangential induced wind velocity at Blade 2, Node 8; +AeroDyn['B2N9Vindy'] = False # (m/s); Tangential induced wind velocity at Blade 2, Node 9; +AeroDyn['B3N1Vindy'] = False # (m/s); Tangential induced wind velocity at Blade 3, Node 1; +AeroDyn['B3N2Vindy'] = False # (m/s); Tangential induced wind velocity at Blade 3, Node 2; +AeroDyn['B3N3Vindy'] = False # (m/s); Tangential induced wind velocity at Blade 3, Node 3; +AeroDyn['B3N4Vindy'] = False # (m/s); Tangential induced wind velocity at Blade 3, Node 4; +AeroDyn['B3N5Vindy'] = False # (m/s); Tangential induced wind velocity at Blade 3, Node 5; +AeroDyn['B3N6Vindy'] = False # (m/s); Tangential induced wind velocity at Blade 3, Node 6; +AeroDyn['B3N7Vindy'] = False # (m/s); Tangential induced wind velocity at Blade 3, Node 7; +AeroDyn['B3N8Vindy'] = False # (m/s); Tangential induced wind velocity at Blade 3, Node 8; +AeroDyn['B3N9Vindy'] = False # (m/s); Tangential induced wind velocity at Blade 3, Node 9; +AeroDyn['B1N1AxInd'] = False # (-); Axial induction factor at Blade 1, Node 1; +AeroDyn['B1N2AxInd'] = False # (-); Axial induction factor at Blade 1, Node 2; +AeroDyn['B1N3AxInd'] = False # (-); Axial induction factor at Blade 1, Node 3; +AeroDyn['B1N4AxInd'] = False # (-); Axial induction factor at Blade 1, Node 4; +AeroDyn['B1N5AxInd'] = False # (-); Axial induction factor at Blade 1, Node 5; +AeroDyn['B1N6AxInd'] = False # (-); Axial induction factor at Blade 1, Node 6; +AeroDyn['B1N7AxInd'] = False # (-); Axial induction factor at Blade 1, Node 7; +AeroDyn['B1N8AxInd'] = False # (-); Axial induction factor at Blade 1, Node 8; +AeroDyn['B1N9AxInd'] = False # (-); Axial induction factor at Blade 1, Node 9; +AeroDyn['B2N1AxInd'] = False # (-); Axial induction factor at Blade 2, Node 1; +AeroDyn['B2N2AxInd'] = False # (-); Axial induction factor at Blade 2, Node 2; +AeroDyn['B2N3AxInd'] = False # (-); Axial induction factor at Blade 2, Node 3; +AeroDyn['B2N4AxInd'] = False # (-); Axial induction factor at Blade 2, Node 4; +AeroDyn['B2N5AxInd'] = False # (-); Axial induction factor at Blade 2, Node 5; +AeroDyn['B2N6AxInd'] = False # (-); Axial induction factor at Blade 2, Node 6; +AeroDyn['B2N7AxInd'] = False # (-); Axial induction factor at Blade 2, Node 7; +AeroDyn['B2N8AxInd'] = False # (-); Axial induction factor at Blade 2, Node 8; +AeroDyn['B2N9AxInd'] = False # (-); Axial induction factor at Blade 2, Node 9; +AeroDyn['B3N1AxInd'] = False # (-); Axial induction factor at Blade 3, Node 1; +AeroDyn['B3N2AxInd'] = False # (-); Axial induction factor at Blade 3, Node 2; +AeroDyn['B3N3AxInd'] = False # (-); Axial induction factor at Blade 3, Node 3; +AeroDyn['B3N4AxInd'] = False # (-); Axial induction factor at Blade 3, Node 4; +AeroDyn['B3N5AxInd'] = False # (-); Axial induction factor at Blade 3, Node 5; +AeroDyn['B3N6AxInd'] = False # (-); Axial induction factor at Blade 3, Node 6; +AeroDyn['B3N7AxInd'] = False # (-); Axial induction factor at Blade 3, Node 7; +AeroDyn['B3N8AxInd'] = False # (-); Axial induction factor at Blade 3, Node 8; +AeroDyn['B3N9AxInd'] = False # (-); Axial induction factor at Blade 3, Node 9; +AeroDyn['B1N1TnInd'] = False # (-); Tangential induction factor at Blade 1, Node 1; +AeroDyn['B1N2TnInd'] = False # (-); Tangential induction factor at Blade 1, Node 2; +AeroDyn['B1N3TnInd'] = False # (-); Tangential induction factor at Blade 1, Node 3; +AeroDyn['B1N4TnInd'] = False # (-); Tangential induction factor at Blade 1, Node 4; +AeroDyn['B1N5TnInd'] = False # (-); Tangential induction factor at Blade 1, Node 5; +AeroDyn['B1N6TnInd'] = False # (-); Tangential induction factor at Blade 1, Node 6; +AeroDyn['B1N7TnInd'] = False # (-); Tangential induction factor at Blade 1, Node 7; +AeroDyn['B1N8TnInd'] = False # (-); Tangential induction factor at Blade 1, Node 8; +AeroDyn['B1N9TnInd'] = False # (-); Tangential induction factor at Blade 1, Node 9; +AeroDyn['B2N1TnInd'] = False # (-); Tangential induction factor at Blade 2, Node 1; +AeroDyn['B2N2TnInd'] = False # (-); Tangential induction factor at Blade 2, Node 2; +AeroDyn['B2N3TnInd'] = False # (-); Tangential induction factor at Blade 2, Node 3; +AeroDyn['B2N4TnInd'] = False # (-); Tangential induction factor at Blade 2, Node 4; +AeroDyn['B2N5TnInd'] = False # (-); Tangential induction factor at Blade 2, Node 5; +AeroDyn['B2N6TnInd'] = False # (-); Tangential induction factor at Blade 2, Node 6; +AeroDyn['B2N7TnInd'] = False # (-); Tangential induction factor at Blade 2, Node 7; +AeroDyn['B2N8TnInd'] = False # (-); Tangential induction factor at Blade 2, Node 8; +AeroDyn['B2N9TnInd'] = False # (-); Tangential induction factor at Blade 2, Node 9; +AeroDyn['B3N1TnInd'] = False # (-); Tangential induction factor at Blade 3, Node 1; +AeroDyn['B3N2TnInd'] = False # (-); Tangential induction factor at Blade 3, Node 2; +AeroDyn['B3N3TnInd'] = False # (-); Tangential induction factor at Blade 3, Node 3; +AeroDyn['B3N4TnInd'] = False # (-); Tangential induction factor at Blade 3, Node 4; +AeroDyn['B3N5TnInd'] = False # (-); Tangential induction factor at Blade 3, Node 5; +AeroDyn['B3N6TnInd'] = False # (-); Tangential induction factor at Blade 3, Node 6; +AeroDyn['B3N7TnInd'] = False # (-); Tangential induction factor at Blade 3, Node 7; +AeroDyn['B3N8TnInd'] = False # (-); Tangential induction factor at Blade 3, Node 8; +AeroDyn['B3N9TnInd'] = False # (-); Tangential induction factor at Blade 3, Node 9; +AeroDyn['B1N1Alpha'] = False # (deg); Angle of attack at Blade 1, Node 1; +AeroDyn['B1N2Alpha'] = False # (deg); Angle of attack at Blade 1, Node 2; +AeroDyn['B1N3Alpha'] = False # (deg); Angle of attack at Blade 1, Node 3; +AeroDyn['B1N4Alpha'] = False # (deg); Angle of attack at Blade 1, Node 4; +AeroDyn['B1N5Alpha'] = False # (deg); Angle of attack at Blade 1, Node 5; +AeroDyn['B1N6Alpha'] = False # (deg); Angle of attack at Blade 1, Node 6; +AeroDyn['B1N7Alpha'] = False # (deg); Angle of attack at Blade 1, Node 7; +AeroDyn['B1N8Alpha'] = False # (deg); Angle of attack at Blade 1, Node 8; +AeroDyn['B1N9Alpha'] = False # (deg); Angle of attack at Blade 1, Node 9; +AeroDyn['B2N1Alpha'] = False # (deg); Angle of attack at Blade 2, Node 1; +AeroDyn['B2N2Alpha'] = False # (deg); Angle of attack at Blade 2, Node 2; +AeroDyn['B2N3Alpha'] = False # (deg); Angle of attack at Blade 2, Node 3; +AeroDyn['B2N4Alpha'] = False # (deg); Angle of attack at Blade 2, Node 4; +AeroDyn['B2N5Alpha'] = False # (deg); Angle of attack at Blade 2, Node 5; +AeroDyn['B2N6Alpha'] = False # (deg); Angle of attack at Blade 2, Node 6; +AeroDyn['B2N7Alpha'] = False # (deg); Angle of attack at Blade 2, Node 7; +AeroDyn['B2N8Alpha'] = False # (deg); Angle of attack at Blade 2, Node 8; +AeroDyn['B2N9Alpha'] = False # (deg); Angle of attack at Blade 2, Node 9; +AeroDyn['B3N1Alpha'] = False # (deg); Angle of attack at Blade 3, Node 1; +AeroDyn['B3N2Alpha'] = False # (deg); Angle of attack at Blade 3, Node 2; +AeroDyn['B3N3Alpha'] = False # (deg); Angle of attack at Blade 3, Node 3; +AeroDyn['B3N4Alpha'] = False # (deg); Angle of attack at Blade 3, Node 4; +AeroDyn['B3N5Alpha'] = False # (deg); Angle of attack at Blade 3, Node 5; +AeroDyn['B3N6Alpha'] = False # (deg); Angle of attack at Blade 3, Node 6; +AeroDyn['B3N7Alpha'] = False # (deg); Angle of attack at Blade 3, Node 7; +AeroDyn['B3N8Alpha'] = False # (deg); Angle of attack at Blade 3, Node 8; +AeroDyn['B3N9Alpha'] = False # (deg); Angle of attack at Blade 3, Node 9; +AeroDyn['B1N1Theta'] = False # (deg); Pitch+Twist angle at Blade 1, Node 1; +AeroDyn['B1N2Theta'] = False # (deg); Pitch+Twist angle at Blade 1, Node 2; +AeroDyn['B1N3Theta'] = False # (deg); Pitch+Twist angle at Blade 1, Node 3; +AeroDyn['B1N4Theta'] = False # (deg); Pitch+Twist angle at Blade 1, Node 4; +AeroDyn['B1N5Theta'] = False # (deg); Pitch+Twist angle at Blade 1, Node 5; +AeroDyn['B1N6Theta'] = False # (deg); Pitch+Twist angle at Blade 1, Node 6; +AeroDyn['B1N7Theta'] = False # (deg); Pitch+Twist angle at Blade 1, Node 7; +AeroDyn['B1N8Theta'] = False # (deg); Pitch+Twist angle at Blade 1, Node 8; +AeroDyn['B1N9Theta'] = False # (deg); Pitch+Twist angle at Blade 1, Node 9; +AeroDyn['B2N1Theta'] = False # (deg); Pitch+Twist angle at Blade 2, Node 1; +AeroDyn['B2N2Theta'] = False # (deg); Pitch+Twist angle at Blade 2, Node 2; +AeroDyn['B2N3Theta'] = False # (deg); Pitch+Twist angle at Blade 2, Node 3; +AeroDyn['B2N4Theta'] = False # (deg); Pitch+Twist angle at Blade 2, Node 4; +AeroDyn['B2N5Theta'] = False # (deg); Pitch+Twist angle at Blade 2, Node 5; +AeroDyn['B2N6Theta'] = False # (deg); Pitch+Twist angle at Blade 2, Node 6; +AeroDyn['B2N7Theta'] = False # (deg); Pitch+Twist angle at Blade 2, Node 7; +AeroDyn['B2N8Theta'] = False # (deg); Pitch+Twist angle at Blade 2, Node 8; +AeroDyn['B2N9Theta'] = False # (deg); Pitch+Twist angle at Blade 2, Node 9; +AeroDyn['B3N1Theta'] = False # (deg); Pitch+Twist angle at Blade 3, Node 1; +AeroDyn['B3N2Theta'] = False # (deg); Pitch+Twist angle at Blade 3, Node 2; +AeroDyn['B3N3Theta'] = False # (deg); Pitch+Twist angle at Blade 3, Node 3; +AeroDyn['B3N4Theta'] = False # (deg); Pitch+Twist angle at Blade 3, Node 4; +AeroDyn['B3N5Theta'] = False # (deg); Pitch+Twist angle at Blade 3, Node 5; +AeroDyn['B3N6Theta'] = False # (deg); Pitch+Twist angle at Blade 3, Node 6; +AeroDyn['B3N7Theta'] = False # (deg); Pitch+Twist angle at Blade 3, Node 7; +AeroDyn['B3N8Theta'] = False # (deg); Pitch+Twist angle at Blade 3, Node 8; +AeroDyn['B3N9Theta'] = False # (deg); Pitch+Twist angle at Blade 3, Node 9; +AeroDyn['B1N1Phi'] = False # (deg); Inflow angle at Blade 1, Node 1; +AeroDyn['B1N2Phi'] = False # (deg); Inflow angle at Blade 1, Node 2; +AeroDyn['B1N3Phi'] = False # (deg); Inflow angle at Blade 1, Node 3; +AeroDyn['B1N4Phi'] = False # (deg); Inflow angle at Blade 1, Node 4; +AeroDyn['B1N5Phi'] = False # (deg); Inflow angle at Blade 1, Node 5; +AeroDyn['B1N6Phi'] = False # (deg); Inflow angle at Blade 1, Node 6; +AeroDyn['B1N7Phi'] = False # (deg); Inflow angle at Blade 1, Node 7; +AeroDyn['B1N8Phi'] = False # (deg); Inflow angle at Blade 1, Node 8; +AeroDyn['B1N9Phi'] = False # (deg); Inflow angle at Blade 1, Node 9; +AeroDyn['B2N1Phi'] = False # (deg); Inflow angle at Blade 2, Node 1; +AeroDyn['B2N2Phi'] = False # (deg); Inflow angle at Blade 2, Node 2; +AeroDyn['B2N3Phi'] = False # (deg); Inflow angle at Blade 2, Node 3; +AeroDyn['B2N4Phi'] = False # (deg); Inflow angle at Blade 2, Node 4; +AeroDyn['B2N5Phi'] = False # (deg); Inflow angle at Blade 2, Node 5; +AeroDyn['B2N6Phi'] = False # (deg); Inflow angle at Blade 2, Node 6; +AeroDyn['B2N7Phi'] = False # (deg); Inflow angle at Blade 2, Node 7; +AeroDyn['B2N8Phi'] = False # (deg); Inflow angle at Blade 2, Node 8; +AeroDyn['B2N9Phi'] = False # (deg); Inflow angle at Blade 2, Node 9; +AeroDyn['B3N1Phi'] = False # (deg); Inflow angle at Blade 3, Node 1; +AeroDyn['B3N2Phi'] = False # (deg); Inflow angle at Blade 3, Node 2; +AeroDyn['B3N3Phi'] = False # (deg); Inflow angle at Blade 3, Node 3; +AeroDyn['B3N4Phi'] = False # (deg); Inflow angle at Blade 3, Node 4; +AeroDyn['B3N5Phi'] = False # (deg); Inflow angle at Blade 3, Node 5; +AeroDyn['B3N6Phi'] = False # (deg); Inflow angle at Blade 3, Node 6; +AeroDyn['B3N7Phi'] = False # (deg); Inflow angle at Blade 3, Node 7; +AeroDyn['B3N8Phi'] = False # (deg); Inflow angle at Blade 3, Node 8; +AeroDyn['B3N9Phi'] = False # (deg); Inflow angle at Blade 3, Node 9; +AeroDyn['B1N1Curve'] = False # (deg); Curvature angle at Blade 1, Node 1; +AeroDyn['B1N2Curve'] = False # (deg); Curvature angle at Blade 1, Node 2; +AeroDyn['B1N3Curve'] = False # (deg); Curvature angle at Blade 1, Node 3; +AeroDyn['B1N4Curve'] = False # (deg); Curvature angle at Blade 1, Node 4; +AeroDyn['B1N5Curve'] = False # (deg); Curvature angle at Blade 1, Node 5; +AeroDyn['B1N6Curve'] = False # (deg); Curvature angle at Blade 1, Node 6; +AeroDyn['B1N7Curve'] = False # (deg); Curvature angle at Blade 1, Node 7; +AeroDyn['B1N8Curve'] = False # (deg); Curvature angle at Blade 1, Node 8; +AeroDyn['B1N9Curve'] = False # (deg); Curvature angle at Blade 1, Node 9; +AeroDyn['B2N1Curve'] = False # (deg); Curvature angle at Blade 2, Node 1; +AeroDyn['B2N2Curve'] = False # (deg); Curvature angle at Blade 2, Node 2; +AeroDyn['B2N3Curve'] = False # (deg); Curvature angle at Blade 2, Node 3; +AeroDyn['B2N4Curve'] = False # (deg); Curvature angle at Blade 2, Node 4; +AeroDyn['B2N5Curve'] = False # (deg); Curvature angle at Blade 2, Node 5; +AeroDyn['B2N6Curve'] = False # (deg); Curvature angle at Blade 2, Node 6; +AeroDyn['B2N7Curve'] = False # (deg); Curvature angle at Blade 2, Node 7; +AeroDyn['B2N8Curve'] = False # (deg); Curvature angle at Blade 2, Node 8; +AeroDyn['B2N9Curve'] = False # (deg); Curvature angle at Blade 2, Node 9; +AeroDyn['B3N1Curve'] = False # (deg); Curvature angle at Blade 3, Node 1; +AeroDyn['B3N2Curve'] = False # (deg); Curvature angle at Blade 3, Node 2; +AeroDyn['B3N3Curve'] = False # (deg); Curvature angle at Blade 3, Node 3; +AeroDyn['B3N4Curve'] = False # (deg); Curvature angle at Blade 3, Node 4; +AeroDyn['B3N5Curve'] = False # (deg); Curvature angle at Blade 3, Node 5; +AeroDyn['B3N6Curve'] = False # (deg); Curvature angle at Blade 3, Node 6; +AeroDyn['B3N7Curve'] = False # (deg); Curvature angle at Blade 3, Node 7; +AeroDyn['B3N8Curve'] = False # (deg); Curvature angle at Blade 3, Node 8; +AeroDyn['B3N9Curve'] = False # (deg); Curvature angle at Blade 3, Node 9; +AeroDyn['B1N1Cl'] = False # (-); Lift force coefficient at Blade 1, Node 1; +AeroDyn['B1N2Cl'] = False # (-); Lift force coefficient at Blade 1, Node 2; +AeroDyn['B1N3Cl'] = False # (-); Lift force coefficient at Blade 1, Node 3; +AeroDyn['B1N4Cl'] = False # (-); Lift force coefficient at Blade 1, Node 4; +AeroDyn['B1N5Cl'] = False # (-); Lift force coefficient at Blade 1, Node 5; +AeroDyn['B1N6Cl'] = False # (-); Lift force coefficient at Blade 1, Node 6; +AeroDyn['B1N7Cl'] = False # (-); Lift force coefficient at Blade 1, Node 7; +AeroDyn['B1N8Cl'] = False # (-); Lift force coefficient at Blade 1, Node 8; +AeroDyn['B1N9Cl'] = False # (-); Lift force coefficient at Blade 1, Node 9; +AeroDyn['B2N1Cl'] = False # (-); Lift force coefficient at Blade 2, Node 1; +AeroDyn['B2N2Cl'] = False # (-); Lift force coefficient at Blade 2, Node 2; +AeroDyn['B2N3Cl'] = False # (-); Lift force coefficient at Blade 2, Node 3; +AeroDyn['B2N4Cl'] = False # (-); Lift force coefficient at Blade 2, Node 4; +AeroDyn['B2N5Cl'] = False # (-); Lift force coefficient at Blade 2, Node 5; +AeroDyn['B2N6Cl'] = False # (-); Lift force coefficient at Blade 2, Node 6; +AeroDyn['B2N7Cl'] = False # (-); Lift force coefficient at Blade 2, Node 7; +AeroDyn['B2N8Cl'] = False # (-); Lift force coefficient at Blade 2, Node 8; +AeroDyn['B2N9Cl'] = False # (-); Lift force coefficient at Blade 2, Node 9; +AeroDyn['B3N1Cl'] = False # (-); Lift force coefficient at Blade 3, Node 1; +AeroDyn['B3N2Cl'] = False # (-); Lift force coefficient at Blade 3, Node 2; +AeroDyn['B3N3Cl'] = False # (-); Lift force coefficient at Blade 3, Node 3; +AeroDyn['B3N4Cl'] = False # (-); Lift force coefficient at Blade 3, Node 4; +AeroDyn['B3N5Cl'] = False # (-); Lift force coefficient at Blade 3, Node 5; +AeroDyn['B3N6Cl'] = False # (-); Lift force coefficient at Blade 3, Node 6; +AeroDyn['B3N7Cl'] = False # (-); Lift force coefficient at Blade 3, Node 7; +AeroDyn['B3N8Cl'] = False # (-); Lift force coefficient at Blade 3, Node 8; +AeroDyn['B3N9Cl'] = False # (-); Lift force coefficient at Blade 3, Node 9; +AeroDyn['B1N1Cd'] = False # (-); Drag force coefficient at Blade 1, Node 1; +AeroDyn['B1N2Cd'] = False # (-); Drag force coefficient at Blade 1, Node 2; +AeroDyn['B1N3Cd'] = False # (-); Drag force coefficient at Blade 1, Node 3; +AeroDyn['B1N4Cd'] = False # (-); Drag force coefficient at Blade 1, Node 4; +AeroDyn['B1N5Cd'] = False # (-); Drag force coefficient at Blade 1, Node 5; +AeroDyn['B1N6Cd'] = False # (-); Drag force coefficient at Blade 1, Node 6; +AeroDyn['B1N7Cd'] = False # (-); Drag force coefficient at Blade 1, Node 7; +AeroDyn['B1N8Cd'] = False # (-); Drag force coefficient at Blade 1, Node 8; +AeroDyn['B1N9Cd'] = False # (-); Drag force coefficient at Blade 1, Node 9; +AeroDyn['B2N1Cd'] = False # (-); Drag force coefficient at Blade 2, Node 1; +AeroDyn['B2N2Cd'] = False # (-); Drag force coefficient at Blade 2, Node 2; +AeroDyn['B2N3Cd'] = False # (-); Drag force coefficient at Blade 2, Node 3; +AeroDyn['B2N4Cd'] = False # (-); Drag force coefficient at Blade 2, Node 4; +AeroDyn['B2N5Cd'] = False # (-); Drag force coefficient at Blade 2, Node 5; +AeroDyn['B2N6Cd'] = False # (-); Drag force coefficient at Blade 2, Node 6; +AeroDyn['B2N7Cd'] = False # (-); Drag force coefficient at Blade 2, Node 7; +AeroDyn['B2N8Cd'] = False # (-); Drag force coefficient at Blade 2, Node 8; +AeroDyn['B2N9Cd'] = False # (-); Drag force coefficient at Blade 2, Node 9; +AeroDyn['B3N1Cd'] = False # (-); Drag force coefficient at Blade 3, Node 1; +AeroDyn['B3N2Cd'] = False # (-); Drag force coefficient at Blade 3, Node 2; +AeroDyn['B3N3Cd'] = False # (-); Drag force coefficient at Blade 3, Node 3; +AeroDyn['B3N4Cd'] = False # (-); Drag force coefficient at Blade 3, Node 4; +AeroDyn['B3N5Cd'] = False # (-); Drag force coefficient at Blade 3, Node 5; +AeroDyn['B3N6Cd'] = False # (-); Drag force coefficient at Blade 3, Node 6; +AeroDyn['B3N7Cd'] = False # (-); Drag force coefficient at Blade 3, Node 7; +AeroDyn['B3N8Cd'] = False # (-); Drag force coefficient at Blade 3, Node 8; +AeroDyn['B3N9Cd'] = False # (-); Drag force coefficient at Blade 3, Node 9; +AeroDyn['B1N1Cm'] = False # (-); Pitching moment coefficient at Blade 1, Node 1; +AeroDyn['B1N2Cm'] = False # (-); Pitching moment coefficient at Blade 1, Node 2; +AeroDyn['B1N3Cm'] = False # (-); Pitching moment coefficient at Blade 1, Node 3; +AeroDyn['B1N4Cm'] = False # (-); Pitching moment coefficient at Blade 1, Node 4; +AeroDyn['B1N5Cm'] = False # (-); Pitching moment coefficient at Blade 1, Node 5; +AeroDyn['B1N6Cm'] = False # (-); Pitching moment coefficient at Blade 1, Node 6; +AeroDyn['B1N7Cm'] = False # (-); Pitching moment coefficient at Blade 1, Node 7; +AeroDyn['B1N8Cm'] = False # (-); Pitching moment coefficient at Blade 1, Node 8; +AeroDyn['B1N9Cm'] = False # (-); Pitching moment coefficient at Blade 1, Node 9; +AeroDyn['B2N1Cm'] = False # (-); Pitching moment coefficient at Blade 2, Node 1; +AeroDyn['B2N2Cm'] = False # (-); Pitching moment coefficient at Blade 2, Node 2; +AeroDyn['B2N3Cm'] = False # (-); Pitching moment coefficient at Blade 2, Node 3; +AeroDyn['B2N4Cm'] = False # (-); Pitching moment coefficient at Blade 2, Node 4; +AeroDyn['B2N5Cm'] = False # (-); Pitching moment coefficient at Blade 2, Node 5; +AeroDyn['B2N6Cm'] = False # (-); Pitching moment coefficient at Blade 2, Node 6; +AeroDyn['B2N7Cm'] = False # (-); Pitching moment coefficient at Blade 2, Node 7; +AeroDyn['B2N8Cm'] = False # (-); Pitching moment coefficient at Blade 2, Node 8; +AeroDyn['B2N9Cm'] = False # (-); Pitching moment coefficient at Blade 2, Node 9; +AeroDyn['B3N1Cm'] = False # (-); Pitching moment coefficient at Blade 3, Node 1; +AeroDyn['B3N2Cm'] = False # (-); Pitching moment coefficient at Blade 3, Node 2; +AeroDyn['B3N3Cm'] = False # (-); Pitching moment coefficient at Blade 3, Node 3; +AeroDyn['B3N4Cm'] = False # (-); Pitching moment coefficient at Blade 3, Node 4; +AeroDyn['B3N5Cm'] = False # (-); Pitching moment coefficient at Blade 3, Node 5; +AeroDyn['B3N6Cm'] = False # (-); Pitching moment coefficient at Blade 3, Node 6; +AeroDyn['B3N7Cm'] = False # (-); Pitching moment coefficient at Blade 3, Node 7; +AeroDyn['B3N8Cm'] = False # (-); Pitching moment coefficient at Blade 3, Node 8; +AeroDyn['B3N9Cm'] = False # (-); Pitching moment coefficient at Blade 3, Node 9; +AeroDyn['B1N1Cx'] = False # (-); Normal force (to plane) coefficient at Blade 1, Node 1; +AeroDyn['B1N2Cx'] = False # (-); Normal force (to plane) coefficient at Blade 1, Node 2; +AeroDyn['B1N3Cx'] = False # (-); Normal force (to plane) coefficient at Blade 1, Node 3; +AeroDyn['B1N4Cx'] = False # (-); Normal force (to plane) coefficient at Blade 1, Node 4; +AeroDyn['B1N5Cx'] = False # (-); Normal force (to plane) coefficient at Blade 1, Node 5; +AeroDyn['B1N6Cx'] = False # (-); Normal force (to plane) coefficient at Blade 1, Node 6; +AeroDyn['B1N7Cx'] = False # (-); Normal force (to plane) coefficient at Blade 1, Node 7; +AeroDyn['B1N8Cx'] = False # (-); Normal force (to plane) coefficient at Blade 1, Node 8; +AeroDyn['B1N9Cx'] = False # (-); Normal force (to plane) coefficient at Blade 1, Node 9; +AeroDyn['B2N1Cx'] = False # (-); Normal force (to plane) coefficient at Blade 2, Node 1; +AeroDyn['B2N2Cx'] = False # (-); Normal force (to plane) coefficient at Blade 2, Node 2; +AeroDyn['B2N3Cx'] = False # (-); Normal force (to plane) coefficient at Blade 2, Node 3; +AeroDyn['B2N4Cx'] = False # (-); Normal force (to plane) coefficient at Blade 2, Node 4; +AeroDyn['B2N5Cx'] = False # (-); Normal force (to plane) coefficient at Blade 2, Node 5; +AeroDyn['B2N6Cx'] = False # (-); Normal force (to plane) coefficient at Blade 2, Node 6; +AeroDyn['B2N7Cx'] = False # (-); Normal force (to plane) coefficient at Blade 2, Node 7; +AeroDyn['B2N8Cx'] = False # (-); Normal force (to plane) coefficient at Blade 2, Node 8; +AeroDyn['B2N9Cx'] = False # (-); Normal force (to plane) coefficient at Blade 2, Node 9; +AeroDyn['B3N1Cx'] = False # (-); Normal force (to plane) coefficient at Blade 3, Node 1; +AeroDyn['B3N2Cx'] = False # (-); Normal force (to plane) coefficient at Blade 3, Node 2; +AeroDyn['B3N3Cx'] = False # (-); Normal force (to plane) coefficient at Blade 3, Node 3; +AeroDyn['B3N4Cx'] = False # (-); Normal force (to plane) coefficient at Blade 3, Node 4; +AeroDyn['B3N5Cx'] = False # (-); Normal force (to plane) coefficient at Blade 3, Node 5; +AeroDyn['B3N6Cx'] = False # (-); Normal force (to plane) coefficient at Blade 3, Node 6; +AeroDyn['B3N7Cx'] = False # (-); Normal force (to plane) coefficient at Blade 3, Node 7; +AeroDyn['B3N8Cx'] = False # (-); Normal force (to plane) coefficient at Blade 3, Node 8; +AeroDyn['B3N9Cx'] = False # (-); Normal force (to plane) coefficient at Blade 3, Node 9; +AeroDyn['B1N1Cy'] = False # (-); Tangential force (to plane) coefficient at Blade 1, Node 1; +AeroDyn['B1N2Cy'] = False # (-); Tangential force (to plane) coefficient at Blade 1, Node 2; +AeroDyn['B1N3Cy'] = False # (-); Tangential force (to plane) coefficient at Blade 1, Node 3; +AeroDyn['B1N4Cy'] = False # (-); Tangential force (to plane) coefficient at Blade 1, Node 4; +AeroDyn['B1N5Cy'] = False # (-); Tangential force (to plane) coefficient at Blade 1, Node 5; +AeroDyn['B1N6Cy'] = False # (-); Tangential force (to plane) coefficient at Blade 1, Node 6; +AeroDyn['B1N7Cy'] = False # (-); Tangential force (to plane) coefficient at Blade 1, Node 7; +AeroDyn['B1N8Cy'] = False # (-); Tangential force (to plane) coefficient at Blade 1, Node 8; +AeroDyn['B1N9Cy'] = False # (-); Tangential force (to plane) coefficient at Blade 1, Node 9; +AeroDyn['B2N1Cy'] = False # (-); Tangential force (to plane) coefficient at Blade 2, Node 1; +AeroDyn['B2N2Cy'] = False # (-); Tangential force (to plane) coefficient at Blade 2, Node 2; +AeroDyn['B2N3Cy'] = False # (-); Tangential force (to plane) coefficient at Blade 2, Node 3; +AeroDyn['B2N4Cy'] = False # (-); Tangential force (to plane) coefficient at Blade 2, Node 4; +AeroDyn['B2N5Cy'] = False # (-); Tangential force (to plane) coefficient at Blade 2, Node 5; +AeroDyn['B2N6Cy'] = False # (-); Tangential force (to plane) coefficient at Blade 2, Node 6; +AeroDyn['B2N7Cy'] = False # (-); Tangential force (to plane) coefficient at Blade 2, Node 7; +AeroDyn['B2N8Cy'] = False # (-); Tangential force (to plane) coefficient at Blade 2, Node 8; +AeroDyn['B2N9Cy'] = False # (-); Tangential force (to plane) coefficient at Blade 2, Node 9; +AeroDyn['B3N1Cy'] = False # (-); Tangential force (to plane) coefficient at Blade 3, Node 1; +AeroDyn['B3N2Cy'] = False # (-); Tangential force (to plane) coefficient at Blade 3, Node 2; +AeroDyn['B3N3Cy'] = False # (-); Tangential force (to plane) coefficient at Blade 3, Node 3; +AeroDyn['B3N4Cy'] = False # (-); Tangential force (to plane) coefficient at Blade 3, Node 4; +AeroDyn['B3N5Cy'] = False # (-); Tangential force (to plane) coefficient at Blade 3, Node 5; +AeroDyn['B3N6Cy'] = False # (-); Tangential force (to plane) coefficient at Blade 3, Node 6; +AeroDyn['B3N7Cy'] = False # (-); Tangential force (to plane) coefficient at Blade 3, Node 7; +AeroDyn['B3N8Cy'] = False # (-); Tangential force (to plane) coefficient at Blade 3, Node 8; +AeroDyn['B3N9Cy'] = False # (-); Tangential force (to plane) coefficient at Blade 3, Node 9; +AeroDyn['B1N1Cn'] = False # (-); Normal force (to chord) coefficient at Blade 1, Node 1; +AeroDyn['B1N2Cn'] = False # (-); Normal force (to chord) coefficient at Blade 1, Node 2; +AeroDyn['B1N3Cn'] = False # (-); Normal force (to chord) coefficient at Blade 1, Node 3; +AeroDyn['B1N4Cn'] = False # (-); Normal force (to chord) coefficient at Blade 1, Node 4; +AeroDyn['B1N5Cn'] = False # (-); Normal force (to chord) coefficient at Blade 1, Node 5; +AeroDyn['B1N6Cn'] = False # (-); Normal force (to chord) coefficient at Blade 1, Node 6; +AeroDyn['B1N7Cn'] = False # (-); Normal force (to chord) coefficient at Blade 1, Node 7; +AeroDyn['B1N8Cn'] = False # (-); Normal force (to chord) coefficient at Blade 1, Node 8; +AeroDyn['B1N9Cn'] = False # (-); Normal force (to chord) coefficient at Blade 1, Node 9; +AeroDyn['B2N1Cn'] = False # (-); Normal force (to chord) coefficient at Blade 2, Node 1; +AeroDyn['B2N2Cn'] = False # (-); Normal force (to chord) coefficient at Blade 2, Node 2; +AeroDyn['B2N3Cn'] = False # (-); Normal force (to chord) coefficient at Blade 2, Node 3; +AeroDyn['B2N4Cn'] = False # (-); Normal force (to chord) coefficient at Blade 2, Node 4; +AeroDyn['B2N5Cn'] = False # (-); Normal force (to chord) coefficient at Blade 2, Node 5; +AeroDyn['B2N6Cn'] = False # (-); Normal force (to chord) coefficient at Blade 2, Node 6; +AeroDyn['B2N7Cn'] = False # (-); Normal force (to chord) coefficient at Blade 2, Node 7; +AeroDyn['B2N8Cn'] = False # (-); Normal force (to chord) coefficient at Blade 2, Node 8; +AeroDyn['B2N9Cn'] = False # (-); Normal force (to chord) coefficient at Blade 2, Node 9; +AeroDyn['B3N1Cn'] = False # (-); Normal force (to chord) coefficient at Blade 3, Node 1; +AeroDyn['B3N2Cn'] = False # (-); Normal force (to chord) coefficient at Blade 3, Node 2; +AeroDyn['B3N3Cn'] = False # (-); Normal force (to chord) coefficient at Blade 3, Node 3; +AeroDyn['B3N4Cn'] = False # (-); Normal force (to chord) coefficient at Blade 3, Node 4; +AeroDyn['B3N5Cn'] = False # (-); Normal force (to chord) coefficient at Blade 3, Node 5; +AeroDyn['B3N6Cn'] = False # (-); Normal force (to chord) coefficient at Blade 3, Node 6; +AeroDyn['B3N7Cn'] = False # (-); Normal force (to chord) coefficient at Blade 3, Node 7; +AeroDyn['B3N8Cn'] = False # (-); Normal force (to chord) coefficient at Blade 3, Node 8; +AeroDyn['B3N9Cn'] = False # (-); Normal force (to chord) coefficient at Blade 3, Node 9; +AeroDyn['B1N1Ct'] = False # (-); Tangential force (to chord) coefficient at Blade 1, Node 1; +AeroDyn['B1N2Ct'] = False # (-); Tangential force (to chord) coefficient at Blade 1, Node 2; +AeroDyn['B1N3Ct'] = False # (-); Tangential force (to chord) coefficient at Blade 1, Node 3; +AeroDyn['B1N4Ct'] = False # (-); Tangential force (to chord) coefficient at Blade 1, Node 4; +AeroDyn['B1N5Ct'] = False # (-); Tangential force (to chord) coefficient at Blade 1, Node 5; +AeroDyn['B1N6Ct'] = False # (-); Tangential force (to chord) coefficient at Blade 1, Node 6; +AeroDyn['B1N7Ct'] = False # (-); Tangential force (to chord) coefficient at Blade 1, Node 7; +AeroDyn['B1N8Ct'] = False # (-); Tangential force (to chord) coefficient at Blade 1, Node 8; +AeroDyn['B1N9Ct'] = False # (-); Tangential force (to chord) coefficient at Blade 1, Node 9; +AeroDyn['B2N1Ct'] = False # (-); Tangential force (to chord) coefficient at Blade 2, Node 1; +AeroDyn['B2N2Ct'] = False # (-); Tangential force (to chord) coefficient at Blade 2, Node 2; +AeroDyn['B2N3Ct'] = False # (-); Tangential force (to chord) coefficient at Blade 2, Node 3; +AeroDyn['B2N4Ct'] = False # (-); Tangential force (to chord) coefficient at Blade 2, Node 4; +AeroDyn['B2N5Ct'] = False # (-); Tangential force (to chord) coefficient at Blade 2, Node 5; +AeroDyn['B2N6Ct'] = False # (-); Tangential force (to chord) coefficient at Blade 2, Node 6; +AeroDyn['B2N7Ct'] = False # (-); Tangential force (to chord) coefficient at Blade 2, Node 7; +AeroDyn['B2N8Ct'] = False # (-); Tangential force (to chord) coefficient at Blade 2, Node 8; +AeroDyn['B2N9Ct'] = False # (-); Tangential force (to chord) coefficient at Blade 2, Node 9; +AeroDyn['B3N1Ct'] = False # (-); Tangential force (to chord) coefficient at Blade 3, Node 1; +AeroDyn['B3N2Ct'] = False # (-); Tangential force (to chord) coefficient at Blade 3, Node 2; +AeroDyn['B3N3Ct'] = False # (-); Tangential force (to chord) coefficient at Blade 3, Node 3; +AeroDyn['B3N4Ct'] = False # (-); Tangential force (to chord) coefficient at Blade 3, Node 4; +AeroDyn['B3N5Ct'] = False # (-); Tangential force (to chord) coefficient at Blade 3, Node 5; +AeroDyn['B3N6Ct'] = False # (-); Tangential force (to chord) coefficient at Blade 3, Node 6; +AeroDyn['B3N7Ct'] = False # (-); Tangential force (to chord) coefficient at Blade 3, Node 7; +AeroDyn['B3N8Ct'] = False # (-); Tangential force (to chord) coefficient at Blade 3, Node 8; +AeroDyn['B3N9Ct'] = False # (-); Tangential force (to chord) coefficient at Blade 3, Node 9; +AeroDyn['B1N1Fl'] = False # (N/m); Lift force per unit length at Blade 1, Node 1; +AeroDyn['B1N2Fl'] = False # (N/m); Lift force per unit length at Blade 1, Node 2; +AeroDyn['B1N3Fl'] = False # (N/m); Lift force per unit length at Blade 1, Node 3; +AeroDyn['B1N4Fl'] = False # (N/m); Lift force per unit length at Blade 1, Node 4; +AeroDyn['B1N5Fl'] = False # (N/m); Lift force per unit length at Blade 1, Node 5; +AeroDyn['B1N6Fl'] = False # (N/m); Lift force per unit length at Blade 1, Node 6; +AeroDyn['B1N7Fl'] = False # (N/m); Lift force per unit length at Blade 1, Node 7; +AeroDyn['B1N8Fl'] = False # (N/m); Lift force per unit length at Blade 1, Node 8; +AeroDyn['B1N9Fl'] = False # (N/m); Lift force per unit length at Blade 1, Node 9; +AeroDyn['B2N1Fl'] = False # (N/m); Lift force per unit length at Blade 2, Node 1; +AeroDyn['B2N2Fl'] = False # (N/m); Lift force per unit length at Blade 2, Node 2; +AeroDyn['B2N3Fl'] = False # (N/m); Lift force per unit length at Blade 2, Node 3; +AeroDyn['B2N4Fl'] = False # (N/m); Lift force per unit length at Blade 2, Node 4; +AeroDyn['B2N5Fl'] = False # (N/m); Lift force per unit length at Blade 2, Node 5; +AeroDyn['B2N6Fl'] = False # (N/m); Lift force per unit length at Blade 2, Node 6; +AeroDyn['B2N7Fl'] = False # (N/m); Lift force per unit length at Blade 2, Node 7; +AeroDyn['B2N8Fl'] = False # (N/m); Lift force per unit length at Blade 2, Node 8; +AeroDyn['B2N9Fl'] = False # (N/m); Lift force per unit length at Blade 2, Node 9; +AeroDyn['B3N1Fl'] = False # (N/m); Lift force per unit length at Blade 3, Node 1; +AeroDyn['B3N2Fl'] = False # (N/m); Lift force per unit length at Blade 3, Node 2; +AeroDyn['B3N3Fl'] = False # (N/m); Lift force per unit length at Blade 3, Node 3; +AeroDyn['B3N4Fl'] = False # (N/m); Lift force per unit length at Blade 3, Node 4; +AeroDyn['B3N5Fl'] = False # (N/m); Lift force per unit length at Blade 3, Node 5; +AeroDyn['B3N6Fl'] = False # (N/m); Lift force per unit length at Blade 3, Node 6; +AeroDyn['B3N7Fl'] = False # (N/m); Lift force per unit length at Blade 3, Node 7; +AeroDyn['B3N8Fl'] = False # (N/m); Lift force per unit length at Blade 3, Node 8; +AeroDyn['B3N9Fl'] = False # (N/m); Lift force per unit length at Blade 3, Node 9; +AeroDyn['B1N1Fd'] = False # (N/m); Drag force per unit length at Blade 1, Node 1; +AeroDyn['B1N2Fd'] = False # (N/m); Drag force per unit length at Blade 1, Node 2; +AeroDyn['B1N3Fd'] = False # (N/m); Drag force per unit length at Blade 1, Node 3; +AeroDyn['B1N4Fd'] = False # (N/m); Drag force per unit length at Blade 1, Node 4; +AeroDyn['B1N5Fd'] = False # (N/m); Drag force per unit length at Blade 1, Node 5; +AeroDyn['B1N6Fd'] = False # (N/m); Drag force per unit length at Blade 1, Node 6; +AeroDyn['B1N7Fd'] = False # (N/m); Drag force per unit length at Blade 1, Node 7; +AeroDyn['B1N8Fd'] = False # (N/m); Drag force per unit length at Blade 1, Node 8; +AeroDyn['B1N9Fd'] = False # (N/m); Drag force per unit length at Blade 1, Node 9; +AeroDyn['B2N1Fd'] = False # (N/m); Drag force per unit length at Blade 2, Node 1; +AeroDyn['B2N2Fd'] = False # (N/m); Drag force per unit length at Blade 2, Node 2; +AeroDyn['B2N3Fd'] = False # (N/m); Drag force per unit length at Blade 2, Node 3; +AeroDyn['B2N4Fd'] = False # (N/m); Drag force per unit length at Blade 2, Node 4; +AeroDyn['B2N5Fd'] = False # (N/m); Drag force per unit length at Blade 2, Node 5; +AeroDyn['B2N6Fd'] = False # (N/m); Drag force per unit length at Blade 2, Node 6; +AeroDyn['B2N7Fd'] = False # (N/m); Drag force per unit length at Blade 2, Node 7; +AeroDyn['B2N8Fd'] = False # (N/m); Drag force per unit length at Blade 2, Node 8; +AeroDyn['B2N9Fd'] = False # (N/m); Drag force per unit length at Blade 2, Node 9; +AeroDyn['B3N1Fd'] = False # (N/m); Drag force per unit length at Blade 3, Node 1; +AeroDyn['B3N2Fd'] = False # (N/m); Drag force per unit length at Blade 3, Node 2; +AeroDyn['B3N3Fd'] = False # (N/m); Drag force per unit length at Blade 3, Node 3; +AeroDyn['B3N4Fd'] = False # (N/m); Drag force per unit length at Blade 3, Node 4; +AeroDyn['B3N5Fd'] = False # (N/m); Drag force per unit length at Blade 3, Node 5; +AeroDyn['B3N6Fd'] = False # (N/m); Drag force per unit length at Blade 3, Node 6; +AeroDyn['B3N7Fd'] = False # (N/m); Drag force per unit length at Blade 3, Node 7; +AeroDyn['B3N8Fd'] = False # (N/m); Drag force per unit length at Blade 3, Node 8; +AeroDyn['B3N9Fd'] = False # (N/m); Drag force per unit length at Blade 3, Node 9; +AeroDyn['B1N1Mm'] = False # (N-m/m); Pitching moment per unit length at Blade 1, Node 1; +AeroDyn['B1N2Mm'] = False # (N-m/m); Pitching moment per unit length at Blade 1, Node 2; +AeroDyn['B1N3Mm'] = False # (N-m/m); Pitching moment per unit length at Blade 1, Node 3; +AeroDyn['B1N4Mm'] = False # (N-m/m); Pitching moment per unit length at Blade 1, Node 4; +AeroDyn['B1N5Mm'] = False # (N-m/m); Pitching moment per unit length at Blade 1, Node 5; +AeroDyn['B1N6Mm'] = False # (N-m/m); Pitching moment per unit length at Blade 1, Node 6; +AeroDyn['B1N7Mm'] = False # (N-m/m); Pitching moment per unit length at Blade 1, Node 7; +AeroDyn['B1N8Mm'] = False # (N-m/m); Pitching moment per unit length at Blade 1, Node 8; +AeroDyn['B1N9Mm'] = False # (N-m/m); Pitching moment per unit length at Blade 1, Node 9; +AeroDyn['B2N1Mm'] = False # (N-m/m); Pitching moment per unit length at Blade 2, Node 1; +AeroDyn['B2N2Mm'] = False # (N-m/m); Pitching moment per unit length at Blade 2, Node 2; +AeroDyn['B2N3Mm'] = False # (N-m/m); Pitching moment per unit length at Blade 2, Node 3; +AeroDyn['B2N4Mm'] = False # (N-m/m); Pitching moment per unit length at Blade 2, Node 4; +AeroDyn['B2N5Mm'] = False # (N-m/m); Pitching moment per unit length at Blade 2, Node 5; +AeroDyn['B2N6Mm'] = False # (N-m/m); Pitching moment per unit length at Blade 2, Node 6; +AeroDyn['B2N7Mm'] = False # (N-m/m); Pitching moment per unit length at Blade 2, Node 7; +AeroDyn['B2N8Mm'] = False # (N-m/m); Pitching moment per unit length at Blade 2, Node 8; +AeroDyn['B2N9Mm'] = False # (N-m/m); Pitching moment per unit length at Blade 2, Node 9; +AeroDyn['B3N1Mm'] = False # (N-m/m); Pitching moment per unit length at Blade 3, Node 1; +AeroDyn['B3N2Mm'] = False # (N-m/m); Pitching moment per unit length at Blade 3, Node 2; +AeroDyn['B3N3Mm'] = False # (N-m/m); Pitching moment per unit length at Blade 3, Node 3; +AeroDyn['B3N4Mm'] = False # (N-m/m); Pitching moment per unit length at Blade 3, Node 4; +AeroDyn['B3N5Mm'] = False # (N-m/m); Pitching moment per unit length at Blade 3, Node 5; +AeroDyn['B3N6Mm'] = False # (N-m/m); Pitching moment per unit length at Blade 3, Node 6; +AeroDyn['B3N7Mm'] = False # (N-m/m); Pitching moment per unit length at Blade 3, Node 7; +AeroDyn['B3N8Mm'] = False # (N-m/m); Pitching moment per unit length at Blade 3, Node 8; +AeroDyn['B3N9Mm'] = False # (N-m/m); Pitching moment per unit length at Blade 3, Node 9; +AeroDyn['B1N1Fx'] = False # (N/m); Normal force (to plane) per unit length at Blade 1, Node 1; +AeroDyn['B1N2Fx'] = False # (N/m); Normal force (to plane) per unit length at Blade 1, Node 2; +AeroDyn['B1N3Fx'] = False # (N/m); Normal force (to plane) per unit length at Blade 1, Node 3; +AeroDyn['B1N4Fx'] = False # (N/m); Normal force (to plane) per unit length at Blade 1, Node 4; +AeroDyn['B1N5Fx'] = False # (N/m); Normal force (to plane) per unit length at Blade 1, Node 5; +AeroDyn['B1N6Fx'] = False # (N/m); Normal force (to plane) per unit length at Blade 1, Node 6; +AeroDyn['B1N7Fx'] = False # (N/m); Normal force (to plane) per unit length at Blade 1, Node 7; +AeroDyn['B1N8Fx'] = False # (N/m); Normal force (to plane) per unit length at Blade 1, Node 8; +AeroDyn['B1N9Fx'] = False # (N/m); Normal force (to plane) per unit length at Blade 1, Node 9; +AeroDyn['B2N1Fx'] = False # (N/m); Normal force (to plane) per unit length at Blade 2, Node 1; +AeroDyn['B2N2Fx'] = False # (N/m); Normal force (to plane) per unit length at Blade 2, Node 2; +AeroDyn['B2N3Fx'] = False # (N/m); Normal force (to plane) per unit length at Blade 2, Node 3; +AeroDyn['B2N4Fx'] = False # (N/m); Normal force (to plane) per unit length at Blade 2, Node 4; +AeroDyn['B2N5Fx'] = False # (N/m); Normal force (to plane) per unit length at Blade 2, Node 5; +AeroDyn['B2N6Fx'] = False # (N/m); Normal force (to plane) per unit length at Blade 2, Node 6; +AeroDyn['B2N7Fx'] = False # (N/m); Normal force (to plane) per unit length at Blade 2, Node 7; +AeroDyn['B2N8Fx'] = False # (N/m); Normal force (to plane) per unit length at Blade 2, Node 8; +AeroDyn['B2N9Fx'] = False # (N/m); Normal force (to plane) per unit length at Blade 2, Node 9; +AeroDyn['B3N1Fx'] = False # (N/m); Normal force (to plane) per unit length at Blade 3, Node 1; +AeroDyn['B3N2Fx'] = False # (N/m); Normal force (to plane) per unit length at Blade 3, Node 2; +AeroDyn['B3N3Fx'] = False # (N/m); Normal force (to plane) per unit length at Blade 3, Node 3; +AeroDyn['B3N4Fx'] = False # (N/m); Normal force (to plane) per unit length at Blade 3, Node 4; +AeroDyn['B3N5Fx'] = False # (N/m); Normal force (to plane) per unit length at Blade 3, Node 5; +AeroDyn['B3N6Fx'] = False # (N/m); Normal force (to plane) per unit length at Blade 3, Node 6; +AeroDyn['B3N7Fx'] = False # (N/m); Normal force (to plane) per unit length at Blade 3, Node 7; +AeroDyn['B3N8Fx'] = False # (N/m); Normal force (to plane) per unit length at Blade 3, Node 8; +AeroDyn['B3N9Fx'] = False # (N/m); Normal force (to plane) per unit length at Blade 3, Node 9; +AeroDyn['B1N1Fy'] = False # (N/m); Tangential force (to plane) per unit length at Blade 1, Node 1; +AeroDyn['B1N2Fy'] = False # (N/m); Tangential force (to plane) per unit length at Blade 1, Node 2; +AeroDyn['B1N3Fy'] = False # (N/m); Tangential force (to plane) per unit length at Blade 1, Node 3; +AeroDyn['B1N4Fy'] = False # (N/m); Tangential force (to plane) per unit length at Blade 1, Node 4; +AeroDyn['B1N5Fy'] = False # (N/m); Tangential force (to plane) per unit length at Blade 1, Node 5; +AeroDyn['B1N6Fy'] = False # (N/m); Tangential force (to plane) per unit length at Blade 1, Node 6; +AeroDyn['B1N7Fy'] = False # (N/m); Tangential force (to plane) per unit length at Blade 1, Node 7; +AeroDyn['B1N8Fy'] = False # (N/m); Tangential force (to plane) per unit length at Blade 1, Node 8; +AeroDyn['B1N9Fy'] = False # (N/m); Tangential force (to plane) per unit length at Blade 1, Node 9; +AeroDyn['B2N1Fy'] = False # (N/m); Tangential force (to plane) per unit length at Blade 2, Node 1; +AeroDyn['B2N2Fy'] = False # (N/m); Tangential force (to plane) per unit length at Blade 2, Node 2; +AeroDyn['B2N3Fy'] = False # (N/m); Tangential force (to plane) per unit length at Blade 2, Node 3; +AeroDyn['B2N4Fy'] = False # (N/m); Tangential force (to plane) per unit length at Blade 2, Node 4; +AeroDyn['B2N5Fy'] = False # (N/m); Tangential force (to plane) per unit length at Blade 2, Node 5; +AeroDyn['B2N6Fy'] = False # (N/m); Tangential force (to plane) per unit length at Blade 2, Node 6; +AeroDyn['B2N7Fy'] = False # (N/m); Tangential force (to plane) per unit length at Blade 2, Node 7; +AeroDyn['B2N8Fy'] = False # (N/m); Tangential force (to plane) per unit length at Blade 2, Node 8; +AeroDyn['B2N9Fy'] = False # (N/m); Tangential force (to plane) per unit length at Blade 2, Node 9; +AeroDyn['B3N1Fy'] = False # (N/m); Tangential force (to plane) per unit length at Blade 3, Node 1; +AeroDyn['B3N2Fy'] = False # (N/m); Tangential force (to plane) per unit length at Blade 3, Node 2; +AeroDyn['B3N3Fy'] = False # (N/m); Tangential force (to plane) per unit length at Blade 3, Node 3; +AeroDyn['B3N4Fy'] = False # (N/m); Tangential force (to plane) per unit length at Blade 3, Node 4; +AeroDyn['B3N5Fy'] = False # (N/m); Tangential force (to plane) per unit length at Blade 3, Node 5; +AeroDyn['B3N6Fy'] = False # (N/m); Tangential force (to plane) per unit length at Blade 3, Node 6; +AeroDyn['B3N7Fy'] = False # (N/m); Tangential force (to plane) per unit length at Blade 3, Node 7; +AeroDyn['B3N8Fy'] = False # (N/m); Tangential force (to plane) per unit length at Blade 3, Node 8; +AeroDyn['B3N9Fy'] = False # (N/m); Tangential force (to plane) per unit length at Blade 3, Node 9; +AeroDyn['B1N1Fn'] = False # (N/m); Normal force (to chord) per unit length at Blade 1, Node 1; +AeroDyn['B1N2Fn'] = False # (N/m); Normal force (to chord) per unit length at Blade 1, Node 2; +AeroDyn['B1N3Fn'] = False # (N/m); Normal force (to chord) per unit length at Blade 1, Node 3; +AeroDyn['B1N4Fn'] = False # (N/m); Normal force (to chord) per unit length at Blade 1, Node 4; +AeroDyn['B1N5Fn'] = False # (N/m); Normal force (to chord) per unit length at Blade 1, Node 5; +AeroDyn['B1N6Fn'] = False # (N/m); Normal force (to chord) per unit length at Blade 1, Node 6; +AeroDyn['B1N7Fn'] = False # (N/m); Normal force (to chord) per unit length at Blade 1, Node 7; +AeroDyn['B1N8Fn'] = False # (N/m); Normal force (to chord) per unit length at Blade 1, Node 8; +AeroDyn['B1N9Fn'] = False # (N/m); Normal force (to chord) per unit length at Blade 1, Node 9; +AeroDyn['B2N1Fn'] = False # (N/m); Normal force (to chord) per unit length at Blade 2, Node 1; +AeroDyn['B2N2Fn'] = False # (N/m); Normal force (to chord) per unit length at Blade 2, Node 2; +AeroDyn['B2N3Fn'] = False # (N/m); Normal force (to chord) per unit length at Blade 2, Node 3; +AeroDyn['B2N4Fn'] = False # (N/m); Normal force (to chord) per unit length at Blade 2, Node 4; +AeroDyn['B2N5Fn'] = False # (N/m); Normal force (to chord) per unit length at Blade 2, Node 5; +AeroDyn['B2N6Fn'] = False # (N/m); Normal force (to chord) per unit length at Blade 2, Node 6; +AeroDyn['B2N7Fn'] = False # (N/m); Normal force (to chord) per unit length at Blade 2, Node 7; +AeroDyn['B2N8Fn'] = False # (N/m); Normal force (to chord) per unit length at Blade 2, Node 8; +AeroDyn['B2N9Fn'] = False # (N/m); Normal force (to chord) per unit length at Blade 2, Node 9; +AeroDyn['B3N1Fn'] = False # (N/m); Normal force (to chord) per unit length at Blade 3, Node 1; +AeroDyn['B3N2Fn'] = False # (N/m); Normal force (to chord) per unit length at Blade 3, Node 2; +AeroDyn['B3N3Fn'] = False # (N/m); Normal force (to chord) per unit length at Blade 3, Node 3; +AeroDyn['B3N4Fn'] = False # (N/m); Normal force (to chord) per unit length at Blade 3, Node 4; +AeroDyn['B3N5Fn'] = False # (N/m); Normal force (to chord) per unit length at Blade 3, Node 5; +AeroDyn['B3N6Fn'] = False # (N/m); Normal force (to chord) per unit length at Blade 3, Node 6; +AeroDyn['B3N7Fn'] = False # (N/m); Normal force (to chord) per unit length at Blade 3, Node 7; +AeroDyn['B3N8Fn'] = False # (N/m); Normal force (to chord) per unit length at Blade 3, Node 8; +AeroDyn['B3N9Fn'] = False # (N/m); Normal force (to chord) per unit length at Blade 3, Node 9; +AeroDyn['B1N1Ft'] = False # (N/m); Tangential force (to chord) per unit length at Blade 1, Node 1; +AeroDyn['B1N2Ft'] = False # (N/m); Tangential force (to chord) per unit length at Blade 1, Node 2; +AeroDyn['B1N3Ft'] = False # (N/m); Tangential force (to chord) per unit length at Blade 1, Node 3; +AeroDyn['B1N4Ft'] = False # (N/m); Tangential force (to chord) per unit length at Blade 1, Node 4; +AeroDyn['B1N5Ft'] = False # (N/m); Tangential force (to chord) per unit length at Blade 1, Node 5; +AeroDyn['B1N6Ft'] = False # (N/m); Tangential force (to chord) per unit length at Blade 1, Node 6; +AeroDyn['B1N7Ft'] = False # (N/m); Tangential force (to chord) per unit length at Blade 1, Node 7; +AeroDyn['B1N8Ft'] = False # (N/m); Tangential force (to chord) per unit length at Blade 1, Node 8; +AeroDyn['B1N9Ft'] = False # (N/m); Tangential force (to chord) per unit length at Blade 1, Node 9; +AeroDyn['B2N1Ft'] = False # (N/m); Tangential force (to chord) per unit length at Blade 2, Node 1; +AeroDyn['B2N2Ft'] = False # (N/m); Tangential force (to chord) per unit length at Blade 2, Node 2; +AeroDyn['B2N3Ft'] = False # (N/m); Tangential force (to chord) per unit length at Blade 2, Node 3; +AeroDyn['B2N4Ft'] = False # (N/m); Tangential force (to chord) per unit length at Blade 2, Node 4; +AeroDyn['B2N5Ft'] = False # (N/m); Tangential force (to chord) per unit length at Blade 2, Node 5; +AeroDyn['B2N6Ft'] = False # (N/m); Tangential force (to chord) per unit length at Blade 2, Node 6; +AeroDyn['B2N7Ft'] = False # (N/m); Tangential force (to chord) per unit length at Blade 2, Node 7; +AeroDyn['B2N8Ft'] = False # (N/m); Tangential force (to chord) per unit length at Blade 2, Node 8; +AeroDyn['B2N9Ft'] = False # (N/m); Tangential force (to chord) per unit length at Blade 2, Node 9; +AeroDyn['B3N1Ft'] = False # (N/m); Tangential force (to chord) per unit length at Blade 3, Node 1; +AeroDyn['B3N2Ft'] = False # (N/m); Tangential force (to chord) per unit length at Blade 3, Node 2; +AeroDyn['B3N3Ft'] = False # (N/m); Tangential force (to chord) per unit length at Blade 3, Node 3; +AeroDyn['B3N4Ft'] = False # (N/m); Tangential force (to chord) per unit length at Blade 3, Node 4; +AeroDyn['B3N5Ft'] = False # (N/m); Tangential force (to chord) per unit length at Blade 3, Node 5; +AeroDyn['B3N6Ft'] = False # (N/m); Tangential force (to chord) per unit length at Blade 3, Node 6; +AeroDyn['B3N7Ft'] = False # (N/m); Tangential force (to chord) per unit length at Blade 3, Node 7; +AeroDyn['B3N8Ft'] = False # (N/m); Tangential force (to chord) per unit length at Blade 3, Node 8; +AeroDyn['B3N9Ft'] = False # (N/m); Tangential force (to chord) per unit length at Blade 3, Node 9; +AeroDyn['B1N1Clrnc'] = False # (m); Tower clearance at Blade 1, Node 1 (based on the absolute distance to the nearest point in the tower from B1N1 minus the local tower radius, in the deflected configuration); please note that this clearance is only approximate because the calculation assumes that the blade is a line with no volume (however, the calculation does use the local tower radius); when B1N1 is above the tower top (or below the tower base), the absolute distance to the tower top (or base) minus the local tower radius, in the deflected configuration, is output; +AeroDyn['B1N2Clrnc'] = False # (m); Tower clearance at Blade 1, Node 2 (based on the absolute distance to the nearest point in the tower from B1N2 minus the local tower radius, in the deflected configuration); please note that this clearance is only approximate because the calculation assumes that the blade is a line with no volume (however, the calculation does use the local tower radius); when B1N2 is above the tower top (or below the tower base), the absolute distance to the tower top (or base) minus the local tower radius, in the deflected configuration, is output; +AeroDyn['B1N3Clrnc'] = False # (m); Tower clearance at Blade 1, Node 3 (based on the absolute distance to the nearest point in the tower from B1N3 minus the local tower radius, in the deflected configuration); please note that this clearance is only approximate because the calculation assumes that the blade is a line with no volume (however, the calculation does use the local tower radius); when B1N3 is above the tower top (or below the tower base), the absolute distance to the tower top (or base) minus the local tower radius, in the deflected configuration, is output; +AeroDyn['B1N4Clrnc'] = False # (m); Tower clearance at Blade 1, Node 4 (based on the absolute distance to the nearest point in the tower from B1N4 minus the local tower radius, in the deflected configuration); please note that this clearance is only approximate because the calculation assumes that the blade is a line with no volume (however, the calculation does use the local tower radius); when B1N4 is above the tower top (or below the tower base), the absolute distance to the tower top (or base) minus the local tower radius, in the deflected configuration, is output; +AeroDyn['B1N5Clrnc'] = False # (m); Tower clearance at Blade 1, Node 5 (based on the absolute distance to the nearest point in the tower from B1N5 minus the local tower radius, in the deflected configuration); please note that this clearance is only approximate because the calculation assumes that the blade is a line with no volume (however, the calculation does use the local tower radius); when B1N5 is above the tower top (or below the tower base), the absolute distance to the tower top (or base) minus the local tower radius, in the deflected configuration, is output; +AeroDyn['B1N6Clrnc'] = False # (m); Tower clearance at Blade 1, Node 6 (based on the absolute distance to the nearest point in the tower from B1N6 minus the local tower radius, in the deflected configuration); please note that this clearance is only approximate because the calculation assumes that the blade is a line with no volume (however, the calculation does use the local tower radius); when B1N6 is above the tower top (or below the tower base), the absolute distance to the tower top (or base) minus the local tower radius, in the deflected configuration, is output; +AeroDyn['B1N7Clrnc'] = False # (m); Tower clearance at Blade 1, Node 7 (based on the absolute distance to the nearest point in the tower from B1N7 minus the local tower radius, in the deflected configuration); please note that this clearance is only approximate because the calculation assumes that the blade is a line with no volume (however, the calculation does use the local tower radius); when B1N7 is above the tower top (or below the tower base), the absolute distance to the tower top (or base) minus the local tower radius, in the deflected configuration, is output; +AeroDyn['B1N8Clrnc'] = False # (m); Tower clearance at Blade 1, Node 8 (based on the absolute distance to the nearest point in the tower from B1N8 minus the local tower radius, in the deflected configuration); please note that this clearance is only approximate because the calculation assumes that the blade is a line with no volume (however, the calculation does use the local tower radius); when B1N8 is above the tower top (or below the tower base), the absolute distance to the tower top (or base) minus the local tower radius, in the deflected configuration, is output; +AeroDyn['B1N9Clrnc'] = False # (m); Tower clearance at Blade 1, Node 9 (based on the absolute distance to the nearest point in the tower from B1N9 minus the local tower radius, in the deflected configuration); please note that this clearance is only approximate because the calculation assumes that the blade is a line with no volume (however, the calculation does use the local tower radius); when B1N9 is above the tower top (or below the tower base), the absolute distance to the tower top (or base) minus the local tower radius, in the deflected configuration, is output; +AeroDyn['B2N1Clrnc'] = False # (m); Tower clearance at Blade 2, Node 1 (based on the absolute distance to the nearest point in the tower from B2N1 minus the local tower radius, in the deflected configuration); please note that this clearance is only approximate because the calculation assumes that the blade is a line with no volume (however, the calculation does use the local tower radius); when B2N1 is above the tower top (or below the tower base), the absolute distance to the tower top (or base) minus the local tower radius, in the deflected configuration, is output; +AeroDyn['B2N2Clrnc'] = False # (m); Tower clearance at Blade 2, Node 2 (based on the absolute distance to the nearest point in the tower from B2N2 minus the local tower radius, in the deflected configuration); please note that this clearance is only approximate because the calculation assumes that the blade is a line with no volume (however, the calculation does use the local tower radius); when B2N2 is above the tower top (or below the tower base), the absolute distance to the tower top (or base) minus the local tower radius, in the deflected configuration, is output; +AeroDyn['B2N3Clrnc'] = False # (m); Tower clearance at Blade 2, Node 3 (based on the absolute distance to the nearest point in the tower from B2N3 minus the local tower radius, in the deflected configuration); please note that this clearance is only approximate because the calculation assumes that the blade is a line with no volume (however, the calculation does use the local tower radius); when B2N3 is above the tower top (or below the tower base), the absolute distance to the tower top (or base) minus the local tower radius, in the deflected configuration, is output; +AeroDyn['B2N4Clrnc'] = False # (m); Tower clearance at Blade 2, Node 4 (based on the absolute distance to the nearest point in the tower from B2N4 minus the local tower radius, in the deflected configuration); please note that this clearance is only approximate because the calculation assumes that the blade is a line with no volume (however, the calculation does use the local tower radius); when B2N4 is above the tower top (or below the tower base), the absolute distance to the tower top (or base) minus the local tower radius, in the deflected configuration, is output; +AeroDyn['B2N5Clrnc'] = False # (m); Tower clearance at Blade 2, Node 5 (based on the absolute distance to the nearest point in the tower from B2N5 minus the local tower radius, in the deflected configuration); please note that this clearance is only approximate because the calculation assumes that the blade is a line with no volume (however, the calculation does use the local tower radius); when B2N5 is above the tower top (or below the tower base), the absolute distance to the tower top (or base) minus the local tower radius, in the deflected configuration, is output; +AeroDyn['B2N6Clrnc'] = False # (m); Tower clearance at Blade 2, Node 6 (based on the absolute distance to the nearest point in the tower from B2N6 minus the local tower radius, in the deflected configuration); please note that this clearance is only approximate because the calculation assumes that the blade is a line with no volume (however, the calculation does use the local tower radius); when B2N6 is above the tower top (or below the tower base), the absolute distance to the tower top (or base) minus the local tower radius, in the deflected configuration, is output; +AeroDyn['B2N7Clrnc'] = False # (m); Tower clearance at Blade 2, Node 7 (based on the absolute distance to the nearest point in the tower from B2N7 minus the local tower radius, in the deflected configuration); please note that this clearance is only approximate because the calculation assumes that the blade is a line with no volume (however, the calculation does use the local tower radius); when B2N7 is above the tower top (or below the tower base), the absolute distance to the tower top (or base) minus the local tower radius, in the deflected configuration, is output; +AeroDyn['B2N8Clrnc'] = False # (m); Tower clearance at Blade 2, Node 8 (based on the absolute distance to the nearest point in the tower from B2N8 minus the local tower radius, in the deflected configuration); please note that this clearance is only approximate because the calculation assumes that the blade is a line with no volume (however, the calculation does use the local tower radius); when B2N8 is above the tower top (or below the tower base), the absolute distance to the tower top (or base) minus the local tower radius, in the deflected configuration, is output; +AeroDyn['B2N9Clrnc'] = False # (m); Tower clearance at Blade 2, Node 9 (based on the absolute distance to the nearest point in the tower from B2N9 minus the local tower radius, in the deflected configuration); please note that this clearance is only approximate because the calculation assumes that the blade is a line with no volume (however, the calculation does use the local tower radius); when B2N9 is above the tower top (or below the tower base), the absolute distance to the tower top (or base) minus the local tower radius, in the deflected configuration, is output; +AeroDyn['B3N1Clrnc'] = False # (m); Tower clearance at Blade 3, Node 1 (based on the absolute distance to the nearest point in the tower from B3N1 minus the local tower radius, in the deflected configuration); please note that this clearance is only approximate because the calculation assumes that the blade is a line with no volume (however, the calculation does use the local tower radius); when B3N1 is above the tower top (or below the tower base), the absolute distance to the tower top (or base) minus the local tower radius, in the deflected configuration, is output; +AeroDyn['B3N2Clrnc'] = False # (m); Tower clearance at Blade 3, Node 2 (based on the absolute distance to the nearest point in the tower from B3N2 minus the local tower radius, in the deflected configuration); please note that this clearance is only approximate because the calculation assumes that the blade is a line with no volume (however, the calculation does use the local tower radius); when B3N2 is above the tower top (or below the tower base), the absolute distance to the tower top (or base) minus the local tower radius, in the deflected configuration, is output; +AeroDyn['B3N3Clrnc'] = False # (m); Tower clearance at Blade 3, Node 3 (based on the absolute distance to the nearest point in the tower from B3N3 minus the local tower radius, in the deflected configuration); please note that this clearance is only approximate because the calculation assumes that the blade is a line with no volume (however, the calculation does use the local tower radius); when B3N3 is above the tower top (or below the tower base), the absolute distance to the tower top (or base) minus the local tower radius, in the deflected configuration, is output; +AeroDyn['B3N4Clrnc'] = False # (m); Tower clearance at Blade 3, Node 4 (based on the absolute distance to the nearest point in the tower from B3N4 minus the local tower radius, in the deflected configuration); please note that this clearance is only approximate because the calculation assumes that the blade is a line with no volume (however, the calculation does use the local tower radius); when B3N4 is above the tower top (or below the tower base), the absolute distance to the tower top (or base) minus the local tower radius, in the deflected configuration, is output; +AeroDyn['B3N5Clrnc'] = False # (m); Tower clearance at Blade 3, Node 5 (based on the absolute distance to the nearest point in the tower from B3N5 minus the local tower radius, in the deflected configuration); please note that this clearance is only approximate because the calculation assumes that the blade is a line with no volume (however, the calculation does use the local tower radius); when B3N5 is above the tower top (or below the tower base), the absolute distance to the tower top (or base) minus the local tower radius, in the deflected configuration, is output; +AeroDyn['B3N6Clrnc'] = False # (m); Tower clearance at Blade 3, Node 6 (based on the absolute distance to the nearest point in the tower from B3N6 minus the local tower radius, in the deflected configuration); please note that this clearance is only approximate because the calculation assumes that the blade is a line with no volume (however, the calculation does use the local tower radius); when B3N6 is above the tower top (or below the tower base), the absolute distance to the tower top (or base) minus the local tower radius, in the deflected configuration, is output; +AeroDyn['B3N7Clrnc'] = False # (m); Tower clearance at Blade 3, Node 7 (based on the absolute distance to the nearest point in the tower from B3N7 minus the local tower radius, in the deflected configuration); please note that this clearance is only approximate because the calculation assumes that the blade is a line with no volume (however, the calculation does use the local tower radius); when B3N7 is above the tower top (or below the tower base), the absolute distance to the tower top (or base) minus the local tower radius, in the deflected configuration, is output; +AeroDyn['B3N8Clrnc'] = False # (m); Tower clearance at Blade 3, Node 8 (based on the absolute distance to the nearest point in the tower from B3N8 minus the local tower radius, in the deflected configuration); please note that this clearance is only approximate because the calculation assumes that the blade is a line with no volume (however, the calculation does use the local tower radius); when B3N8 is above the tower top (or below the tower base), the absolute distance to the tower top (or base) minus the local tower radius, in the deflected configuration, is output; +AeroDyn['B3N9Clrnc'] = False # (m); Tower clearance at Blade 3, Node 9 (based on the absolute distance to the nearest point in the tower from B3N9 minus the local tower radius, in the deflected configuration); please note that this clearance is only approximate because the calculation assumes that the blade is a line with no volume (however, the calculation does use the local tower radius); when B3N9 is above the tower top (or below the tower base), the absolute distance to the tower top (or base) minus the local tower radius, in the deflected configuration, is output; +AeroDyn['B1N1Cpmin'] = False # (-); Pressure coefficient blade 1 node 1; +AeroDyn['B1N2Cpmin'] = False # (-); Pressure coefficient blade 1 node 2; +AeroDyn['B1N3Cpmin'] = False # (-); Pressure coefficient blade 1 node 3; +AeroDyn['B1N4Cpmin'] = False # (-); Pressure coefficient blade 1 node 4; +AeroDyn['B1N5Cpmin'] = False # (-); Pressure coefficient blade 1 node 5; +AeroDyn['B1N6Cpmin'] = False # (-); Pressure coefficient blade 1 node 6; +AeroDyn['B1N7Cpmin'] = False # (-); Pressure coefficient blade 1 node 7; +AeroDyn['B1N8Cpmin'] = False # (-); Pressure coefficient blade 1 node 8; +AeroDyn['B1N9Cpmin'] = False # (-); Pressure coefficient blade 1 node 9; +AeroDyn['B2N1Cpmin'] = False # (-); Pressure coefficient blade 2 node 1; +AeroDyn['B2N2Cpmin'] = False # (-); Pressure coefficient blade 2 node 2; +AeroDyn['B2N3Cpmin'] = False # (-); Pressure coefficient blade 2 node 3; +AeroDyn['B2N4Cpmin'] = False # (-); Pressure coefficient blade 2 node 4; +AeroDyn['B2N5Cpmin'] = False # (-); Pressure coefficient blade 2 node 5; +AeroDyn['B2N6Cpmin'] = False # (-); Pressure coefficient blade 2 node 6; +AeroDyn['B2N7Cpmin'] = False # (-); Pressure coefficient blade 2 node 7; +AeroDyn['B2N8Cpmin'] = False # (-); Pressure coefficient blade 2 node 8; +AeroDyn['B2N9Cpmin'] = False # (-); Pressure coefficient blade 2 node 9; +AeroDyn['B3N1Cpmin'] = False # (-); Pressure coefficient blade 3 node 1; +AeroDyn['B3N2Cpmin'] = False # (-); Pressure coefficient blade 3 node 2; +AeroDyn['B3N3Cpmin'] = False # (-); Pressure coefficient blade 3 node 3; +AeroDyn['B3N4Cpmin'] = False # (-); Pressure coefficient blade 3 node 4; +AeroDyn['B3N5Cpmin'] = False # (-); Pressure coefficient blade 3 node 5; +AeroDyn['B3N6Cpmin'] = False # (-); Pressure coefficient blade 3 node 6; +AeroDyn['B3N7Cpmin'] = False # (-); Pressure coefficient blade 3 node 7; +AeroDyn['B3N8Cpmin'] = False # (-); Pressure coefficient blade 3 node 8; +AeroDyn['B3N9Cpmin'] = False # (-); Pressure coefficient blade 3 node 9; +AeroDyn['B1N1SigCr'] = False # (-); Critical cavitation number blade 1 node 1; +AeroDyn['B1N2SigCr'] = False # (-); Critical cavitation number blade 1 node 2; +AeroDyn['B1N3SigCr'] = False # (-); Critical cavitation number blade 1 node 3; +AeroDyn['B1N4SigCr'] = False # (-); Critical cavitation number blade 1 node 4; +AeroDyn['B1N5SigCr'] = False # (-); Critical cavitation number blade 1 node 5; +AeroDyn['B1N6SigCr'] = False # (-); Critical cavitation number blade 1 node 6; +AeroDyn['B1N7SigCr'] = False # (-); Critical cavitation number blade 1 node 7; +AeroDyn['B1N8SigCr'] = False # (-); Critical cavitation number blade 1 node 8; +AeroDyn['B1N9SigCr'] = False # (-); Critical cavitation number blade 1 node 9; +AeroDyn['B2N1SigCr'] = False # (-); Critical cavitation number blade 2 node 1; +AeroDyn['B2N2SigCr'] = False # (-); Critical cavitation number blade 2 node 2; +AeroDyn['B2N3SigCr'] = False # (-); Critical cavitation number blade 2 node 3; +AeroDyn['B2N4SigCr'] = False # (-); Critical cavitation number blade 2 node 4; +AeroDyn['B2N5SigCr'] = False # (-); Critical cavitation number blade 2 node 5; +AeroDyn['B2N6SigCr'] = False # (-); Critical cavitation number blade 2 node 6; +AeroDyn['B2N7SigCr'] = False # (-); Critical cavitation number blade 2 node 7; +AeroDyn['B2N8SigCr'] = False # (-); Critical cavitation number blade 2 node 8; +AeroDyn['B2N9SigCr'] = False # (-); Critical cavitation number blade 2 node 9; +AeroDyn['B3N1SigCr'] = False # (-); Critical cavitation number blade 3 node 1; +AeroDyn['B3N2SigCr'] = False # (-); Critical cavitation number blade 3 node 2; +AeroDyn['B3N3SigCr'] = False # (-); Critical cavitation number blade 3 node 3; +AeroDyn['B3N4SigCr'] = False # (-); Critical cavitation number blade 3 node 4; +AeroDyn['B3N5SigCr'] = False # (-); Critical cavitation number blade 3 node 5; +AeroDyn['B3N6SigCr'] = False # (-); Critical cavitation number blade 3 node 6; +AeroDyn['B3N7SigCr'] = False # (-); Critical cavitation number blade 3 node 7; +AeroDyn['B3N8SigCr'] = False # (-); Critical cavitation number blade 3 node 8; +AeroDyn['B3N9SigCr'] = False # (-); Critical cavitation number blade 3 node 9; +AeroDyn['B1N1SgCav'] = False # (-); Cavitation number blade 1 node 1; +AeroDyn['B1N2SgCav'] = False # (-); Cavitation number blade 1 node 2; +AeroDyn['B1N3SgCav'] = False # (-); Cavitation number blade 1 node 3; +AeroDyn['B1N4SgCav'] = False # (-); Cavitation number blade 1 node 4; +AeroDyn['B1N5SgCav'] = False # (-); Cavitation number blade 1 node 5; +AeroDyn['B1N6SgCav'] = False # (-); Cavitation number blade 1 node 6; +AeroDyn['B1N7SgCav'] = False # (-); Cavitation number blade 1 node 7; +AeroDyn['B1N8SgCav'] = False # (-); Cavitation number blade 1 node 8; +AeroDyn['B1N9SgCav'] = False # (-); Cavitation number blade 1 node 9; +AeroDyn['B2N1SgCav'] = False # (-); Cavitation number blade 2 node 1; +AeroDyn['B2N2SgCav'] = False # (-); Cavitation number blade 2 node 2; +AeroDyn['B2N3SgCav'] = False # (-); Cavitation number blade 2 node 3; +AeroDyn['B2N4SgCav'] = False # (-); Cavitation number blade 2 node 4; +AeroDyn['B2N5SgCav'] = False # (-); Cavitation number blade 2 node 5; +AeroDyn['B2N6SgCav'] = False # (-); Cavitation number blade 2 node 6; +AeroDyn['B2N7SgCav'] = False # (-); Cavitation number blade 2 node 7; +AeroDyn['B2N8SgCav'] = False # (-); Cavitation number blade 2 node 8; +AeroDyn['B2N9SgCav'] = False # (-); Cavitation number blade 2 node 9; +AeroDyn['B3N1SgCav'] = False # (-); Cavitation number blade 3 node 1; +AeroDyn['B3N2SgCav'] = False # (-); Cavitation number blade 3 node 2; +AeroDyn['B3N3SgCav'] = False # (-); Cavitation number blade 3 node 3; +AeroDyn['B3N4SgCav'] = False # (-); Cavitation number blade 3 node 4; +AeroDyn['B3N5SgCav'] = False # (-); Cavitation number blade 3 node 5; +AeroDyn['B3N6SgCav'] = False # (-); Cavitation number blade 3 node 6; +AeroDyn['B3N7SgCav'] = False # (-); Cavitation number blade 3 node 7; +AeroDyn['B3N8SgCav'] = False # (-); Cavitation number blade 3 node 8; +AeroDyn['B3N9SgCav'] = False # (-); Cavitation number blade 3 node 9; +AeroDyn['B1N1Gam'] = False # (m^2/s); Circulation on blade 1 at node 1; +AeroDyn['B1N2Gam'] = False # (m^2/s); Circulation on blade 1 at node 2; +AeroDyn['B1N3Gam'] = False # (m^2/s); Circulation on blade 1 at node 3; +AeroDyn['B1N4Gam'] = False # (m^2/s); Circulation on blade 1 at node 4; +AeroDyn['B1N5Gam'] = False # (m^2/s); Circulation on blade 1 at node 5; +AeroDyn['B1N6Gam'] = False # (m^2/s); Circulation on blade 1 at node 6; +AeroDyn['B1N7Gam'] = False # (m^2/s); Circulation on blade 1 at node 7; +AeroDyn['B1N8Gam'] = False # (m^2/s); Circulation on blade 1 at node 8; +AeroDyn['B1N9Gam'] = False # (m^2/s); Circulation on blade 1 at node 9; +AeroDyn['B2N1Gam'] = False # (m^2/s); Circulation on blade 2 at node 1; +AeroDyn['B2N2Gam'] = False # (m^2/s); Circulation on blade 2 at node 2; +AeroDyn['B2N3Gam'] = False # (m^2/s); Circulation on blade 2 at node 3; +AeroDyn['B2N4Gam'] = False # (m^2/s); Circulation on blade 2 at node 4; +AeroDyn['B2N5Gam'] = False # (m^2/s); Circulation on blade 2 at node 5; +AeroDyn['B2N6Gam'] = False # (m^2/s); Circulation on blade 2 at node 6; +AeroDyn['B2N7Gam'] = False # (m^2/s); Circulation on blade 2 at node 7; +AeroDyn['B2N8Gam'] = False # (m^2/s); Circulation on blade 2 at node 8; +AeroDyn['B2N9Gam'] = False # (m^2/s); Circulation on blade 2 at node 9; +AeroDyn['B3N1Gam'] = False # (m^2/s); Circulation on blade 3 at node 1; +AeroDyn['B3N2Gam'] = False # (m^2/s); Circulation on blade 3 at node 2; +AeroDyn['B3N3Gam'] = False # (m^2/s); Circulation on blade 3 at node 3; +AeroDyn['B3N4Gam'] = False # (m^2/s); Circulation on blade 3 at node 4; +AeroDyn['B3N5Gam'] = False # (m^2/s); Circulation on blade 3 at node 5; +AeroDyn['B3N6Gam'] = False # (m^2/s); Circulation on blade 3 at node 6; +AeroDyn['B3N7Gam'] = False # (m^2/s); Circulation on blade 3 at node 7; +AeroDyn['B3N8Gam'] = False # (m^2/s); Circulation on blade 3 at node 8; +AeroDyn['B3N9Gam'] = False # (m^2/s); Circulation on blade 3 at node 9; + +# Rotor +AeroDyn['RtSpeed'] = False # (rpm); Rotor speed; +AeroDyn['RtTSR'] = False # (-); Rotor tip-speed ratio; +AeroDyn['RtVAvgxh'] = False # (m/s); Rotor-disk-averaged relative wind velocity (x-component); the hub coordinate system +AeroDyn['RtVAvgyh'] = False # (m/s); Rotor-disk-averaged relative wind velocity (y-component); the hub coordinate system +AeroDyn['RtVAvgzh'] = False # (m/s); Rotor-disk-averaged relative wind velocity (z-component); the hub coordinate system +AeroDyn['RtSkew'] = False # (deg); Rotor inflow-skew angle; +AeroDyn['RtFldFxh'] = False # (N); Total rotor aerodynamic load (force in x direction); the hub coordinate system +AeroDyn['RtFldFyh'] = False # (N); Total rotor aerodynamic load (force in y direction); the hub coordinate system +AeroDyn['RtFldFzh'] = False # (N); Total rotor aerodynamic load (force in z direction); the hub coordinate system +AeroDyn['RtFldMxh'] = False # (N m); Total rotor aerodynamic load (moment in x direction); the hub coordinate system +AeroDyn['RtFldMyh'] = False # (N m); Total rotor aerodynamic load (moment in y direction); the hub coordinate system +AeroDyn['RtFldMzh'] = False # (N m); Total rotor aerodynamic load (moment in z direction); the hub coordinate system +AeroDyn['RtFldPwr'] = False # (W); Rotor aerodynamic power; +AeroDyn['RtArea'] = False # (m^2); Rotor swept area; +AeroDyn['RtFldCp'] = False # (-); Rotor aerodynamic power coefficient; +AeroDyn['RtFldCq'] = False # (-); Rotor aerodynamic torque coefficient; +AeroDyn['RtFldCt'] = False # (-); Rotor aerodynamic thrust coefficient; + + +""" InflowWind """ +InflowWind = {} + +# Wind Motions +InflowWind['Wind1VelX'] = False # (m/s); X component of wind at user selected wind point 1; Directed along the xi-axis +InflowWind['Wind1VelY'] = False # (m/s); Y component of wind at user selected wind point 1; Directed along the yi-axis +InflowWind['Wind1VelZ'] = False # (m/s); Z component of wind at user selected wind point 1; Directed along the zi-axis +InflowWind['Wind2VelX'] = False # (m/s); X component of wind at user selected wind point 2; Directed along the xi-axis +InflowWind['Wind2VelY'] = False # (m/s); Y component of wind at user selected wind point 2; Directed along the yi-axis +InflowWind['Wind2VelZ'] = False # (m/s); Z component of wind at user selected wind point 2; Directed along the zi-axis +InflowWind['Wind3VelX'] = False # (m/s); X component of wind at user selected wind point 3; Directed along the xi-axis +InflowWind['Wind3VelY'] = False # (m/s); Y component of wind at user selected wind point 3; Directed along the yi-axis +InflowWind['Wind3VelZ'] = False # (m/s); Z component of wind at user selected wind point 3; Directed along the zi-axis +InflowWind['Wind4VelX'] = False # (m/s); X component of wind at user selected wind point 4; Directed along the xi-axis +InflowWind['Wind4VelY'] = False # (m/s); Y component of wind at user selected wind point 4; Directed along the yi-axis +InflowWind['Wind4VelZ'] = False # (m/s); Z component of wind at user selected wind point 4; Directed along the zi-axis +InflowWind['Wind5VelX'] = False # (m/s); X component of wind at user selected wind point 5; Directed along the xi-axis +InflowWind['Wind5VelY'] = False # (m/s); Y component of wind at user selected wind point 5; Directed along the yi-axis +InflowWind['Wind5VelZ'] = False # (m/s); Z component of wind at user selected wind point 5; Directed along the zi-axis +InflowWind['Wind6VelX'] = False # (m/s); X component of wind at user selected wind point 6; Directed along the xi-axis +InflowWind['Wind6VelY'] = False # (m/s); Y component of wind at user selected wind point 6; Directed along the yi-axis +InflowWind['Wind6VelZ'] = False # (m/s); Z component of wind at user selected wind point 6; Directed along the zi-axis +InflowWind['Wind7VelX'] = False # (m/s); X component of wind at user selected wind point 7; Directed along the xi-axis +InflowWind['Wind7VelY'] = False # (m/s); Y component of wind at user selected wind point 7; Directed along the yi-axis +InflowWind['Wind7VelZ'] = False # (m/s); Z component of wind at user selected wind point 7; Directed along the zi-axis +InflowWind['Wind8VelX'] = False # (m/s); X component of wind at user selected wind point 8; Directed along the xi-axis +InflowWind['Wind8VelY'] = False # (m/s); Y component of wind at user selected wind point 8; Directed along the yi-axis +InflowWind['Wind8VelZ'] = False # (m/s); Z component of wind at user selected wind point 8; Directed along the zi-axis +InflowWind['Wind9VelX'] = False # (m/s); X component of wind at user selected wind point 9; Directed along the xi-axis +InflowWind['Wind9VelY'] = False # (m/s); Y component of wind at user selected wind point 9; Directed along the yi-axis +InflowWind['Wind9VelZ'] = False # (m/s); Z component of wind at user selected wind point 9; Directed along the zi-axis + +# Wind Magnitude and Direction +InflowWind['Wind1VelXY'] = False # (m/s); XY (horizontal) wind magnitude at user selected wind point 1; +InflowWind['Wind2VelXY'] = False # (m/s); XY (horizontal) wind magnitude at user selected wind point 2; +InflowWind['Wind3VelXY'] = False # (m/s); XY (horizontal) wind magnitude at user selected wind point 3; +InflowWind['Wind4VelXY'] = False # (m/s); XY (horizontal) wind magnitude at user selected wind point 4; +InflowWind['Wind5VelXY'] = False # (m/s); XY (horizontal) wind magnitude at user selected wind point 5; +InflowWind['Wind6VelXY'] = False # (m/s); XY (horizontal) wind magnitude at user selected wind point 6; +InflowWind['Wind7VelXY'] = False # (m/s); XY (horizontal) wind magnitude at user selected wind point 7; +InflowWind['Wind8VelXY'] = False # (m/s); XY (horizontal) wind magnitude at user selected wind point 8; +InflowWind['Wind9VelXY'] = False # (m/s); XY (horizontal) wind magnitude at user selected wind point 9; +InflowWind['Wind1VelMag'] = False # (m/s); wind magnitude at user selected wind point 1; +InflowWind['Wind2VelMag'] = False # (m/s); wind magnitude at user selected wind point 2; +InflowWind['Wind3VelMag'] = False # (m/s); wind magnitude at user selected wind point 3; +InflowWind['Wind4VelMag'] = False # (m/s); wind magnitude at user selected wind point 4; +InflowWind['Wind5VelMag'] = False # (m/s); wind magnitude at user selected wind point 5; +InflowWind['Wind6VelMag'] = False # (m/s); wind magnitude at user selected wind point 6; +InflowWind['Wind7VelMag'] = False # (m/s); wind magnitude at user selected wind point 7; +InflowWind['Wind8VelMag'] = False # (m/s); wind magnitude at user selected wind point 8; +InflowWind['Wind9VelMag'] = False # (m/s); wind magnitude at user selected wind point 9; +InflowWind['Wind1AngXY'] = False # (deg); Angle between X and Y wind velocity components at user selected wind point 1; +InflowWind['Wind2AngXY'] = False # (deg); Angle between X and Y wind velocity components at user selected wind point 2; +InflowWind['Wind3AngXY'] = False # (deg); Angle between X and Y wind velocity components at user selected wind point 3; +InflowWind['Wind4AngXY'] = False # (deg); Angle between X and Y wind velocity components at user selected wind point 4; +InflowWind['Wind5AngXY'] = False # (deg); Angle between X and Y wind velocity components at user selected wind point 5; +InflowWind['Wind6AngXY'] = False # (deg); Angle between X and Y wind velocity components at user selected wind point 6; +InflowWind['Wind7AngXY'] = False # (deg); Angle between X and Y wind velocity components at user selected wind point 7; +InflowWind['Wind8AngXY'] = False # (deg); Angle between X and Y wind velocity components at user selected wind point 8; +InflowWind['Wind9AngXY'] = False # (deg); Angle between X and Y wind velocity components at user selected wind point 9; + +# Wind Sensor Measurements +InflowWind['WindMeas1'] = False # (m/s); Wind measurement at sensor 1; Defined by sensor +InflowWind['WindMeas2'] = False # (m/s); Wind measurement at sensor 2; Defined by sensor +InflowWind['WindMeas3'] = False # (m/s); Wind measurement at sensor 3; Defined by sensor +InflowWind['WindMeas4'] = False # (m/s); Wind measurement at sensor 4; Defined by sensor +InflowWind['WindMeas5'] = False # (m/s); Wind measurement at sensor 5; Defined by sensor + + +""" WAMIT """ +WAMIT = {} + +# WAMIT Body Forces +WAMIT['Wave1El2'] = False # (m); 2nd order wave elevation correction; +WAMIT['Wave2El2'] = False # (m); 2nd order wave elevation correction; +WAMIT['Wave3El2'] = False # (m); 2nd order wave elevation correction; +WAMIT['Wave4El2'] = False # (m); 2nd order wave elevation correction; +WAMIT['Wave5El2'] = False # (m); 2nd order wave elevation correction; +WAMIT['Wave6El2'] = False # (m); 2nd order wave elevation correction; +WAMIT['Wave7El2'] = False # (m); 2nd order wave elevation correction; +WAMIT['Wave8El2'] = False # (m); 2nd order wave elevation correction; +WAMIT['Wave9El2'] = False # (m); 2nd order wave elevation correction; + +# WAMIT second order Body Forces +WAMIT['WavesF2xi'] = False # (N); ; +WAMIT['WavesF2yi'] = False # (N); ; +WAMIT['WavesF2zi'] = False # (N); ; +WAMIT['WavesM2xi'] = False # (N m); ; +WAMIT['WavesM2yi'] = False # (N m); ; +WAMIT['WavesM2zi'] = False # (N m); ; + +# WAMIT Body Forces +WAMIT['WavesFxi'] = False # (N); ; +WAMIT['WavesFyi'] = False # (N); ; +WAMIT['WavesFzi'] = False # (N); ; +WAMIT['WavesMxi'] = False # (N m); ; +WAMIT['WavesMyi'] = False # (N m); ; +WAMIT['WavesMzi'] = False # (N m); ; +WAMIT['HdrStcFxi'] = False # (N); ; +WAMIT['HdrStcFyi'] = False # (N); ; +WAMIT['HdrStcFzi'] = False # (N); ; +WAMIT['HdrStcMxi'] = False # (N m); ; +WAMIT['HdrStcMyi'] = False # (N m); ; +WAMIT['HdrStcMzi'] = False # (N m); ; +WAMIT['RdtnFxi'] = False # (N); ; +WAMIT['RdtnFyi'] = False # (N); ; +WAMIT['RdtnFzi'] = False # (N); ; +WAMIT['RdtnMxi'] = False # (N m); ; +WAMIT['RdtnMyi'] = False # (N m); ; +WAMIT['RdtnMzi'] = False # (N m); ; + +""" HydroDyn """ +HydroDyn = {} + +# Integrated Hydrodynamic Loads at (0,0,0) +HydroDyn['HydroFxi'] = False # (N); Total integrated hydrodynamic load along the global x-direction from both potential flow and strip theory at (0,0,0); +HydroDyn['HydroFyi'] = False # (N); Total integrated hydrodynamic load along the global y-direction from both potential flow and strip theory at (0,0,0); +HydroDyn['HydroFzi'] = False # (N); Total integrated hydrodynamic load along the global z-direction from both potential flow and strip theory at (0,0,0); +HydroDyn['HydroMxi'] = False # (N-m); Total integrated hydrodynamic moment about the global x-axis from both potential flow and strip theory at (0,0,0); +HydroDyn['HydroMyi'] = False # (N-m); Total integrated hydrodynamic moment about the global y-axis from both potential flow and strip theory at (0,0,0); +HydroDyn['HydroMzi'] = False # (N-m); Total integrated hydrodynamic moment about the global z-axis from both potential flow and strip theory at (0,0,0); + +# PRP Body Kinematics +HydroDyn['PRPSurge'] = False # (m); Displacement of the PRP (principal reference point) along the global x-axis; +HydroDyn['PRPSway'] = False # (m); Displacement of the PRP (principal reference point) along the global y-axis; +HydroDyn['PRPHeave'] = False # (m); Displacement of the PRP (principal reference point) along the global z-axis; +HydroDyn['PRPRoll'] = False # (rad); Rotation of the PRP (principal reference point) about the global x-axis at the PRP; +HydroDyn['PRPPitch'] = False # (rad); Rotation of the PRP (principal reference point) about the global y-axis at the PRP; +HydroDyn['PRPYaw'] = False # (rad); Rotation of the PRP (principal reference point) about the global z-axis at the PRP; +HydroDyn['PRPTVxi'] = False # (m/s); Translational velocity of the PRP (principal reference point) along the global x-axis; +HydroDyn['PRPTVyi'] = False # (m/s); Translational velocity of the PRP (principal reference point) along the global y-axis; +HydroDyn['PRPTVzi'] = False # (m/s); Translational velocity of the PRP (principal reference point) along the global z-axis; +HydroDyn['PRPRVxi'] = False # (rad/s); Rotation velocity of the PRP (principal reference point) about the global x-axis at the PRP; +HydroDyn['PRPRVyi'] = False # (rad/s); Rotation velocity of the PRP (principal reference point) about the global y-axis at the PRP; +HydroDyn['PRPRVzi'] = False # (rad/s); Rotation velocity of the PRP (principal reference point) about the global z-axis at the PRP; +HydroDyn['PRPTAxi'] = False # (m/s^2); Translational acceleration of the PRP (principal reference point) along the global x-axis; +HydroDyn['PRPTAyi'] = False # (m/s^2); Translational acceleration of the PRP (principal reference point) along the global y-axis; +HydroDyn['PRPTAzi'] = False # (m/s^2); Translational acceleration of the PRP (principal reference point) along the global z-axis; +HydroDyn['PRPRAxi'] = False # (rad/s^2); Rotation acceleration of the PRP (principal reference point) about the global x-axis at the PRP; +HydroDyn['PRPRAyi'] = False # (rad/s^2); Rotation acceleration of the PRP (principal reference point) about the global y-axis at the PRP; +HydroDyn['PRPRAzi'] = False # (rad/s^2); Rotation acceleration of the PRP (principal reference point) about the global z-axis at the PRP; + +# WAMIT Body Kinematics +HydroDyn['B1Surge'] = False # (m); Displacement of the 1st WAMIT body along the global x-axis; +HydroDyn['B1Sway'] = False # (m); Displacement of the 1st WAMIT body along the global y-axis; +HydroDyn['B1Heave'] = False # (m); Displacement of the 1st WAMIT body along the global z-axis; +HydroDyn['B1Roll'] = False # (rad); Rotation of the 1st WAMIT body about the global x-axis at the 1st WAMIT body's reference point; +HydroDyn['B1Pitch'] = False # (rad); Rotation of the 1st WAMIT body about the global y-axis at the 1st WAMIT body's reference point; +HydroDyn['B1Yaw'] = False # (rad); Rotation of the 1st WAMIT body about the global z-axis at the 1st WAMIT body's reference point; +HydroDyn['B1TVxi'] = False # (m/s); Translational velocity of the 1st WAMIT body along the global x-axis; +HydroDyn['B1TVyi'] = False # (m/s); Translational velocity of the 1st WAMIT body along the global y-axis; +HydroDyn['B1TVzi'] = False # (m/s); Translational velocity of the 1st WAMIT body along the global z-axis; +HydroDyn['B1RVxi'] = False # (rad/s); Rotational velocity of the 1st WAMIT body about the global x-axis at the 1st WAMIT body's reference point; +HydroDyn['B1RVyi'] = False # (rad/s); Rotational velocity of the 1st WAMIT body about the global y-axis at the 1st WAMIT body's reference point; +HydroDyn['B1RVzi'] = False # (rad/s); Rotational velocity of the 1st WAMIT body about the global z-axis at the 1st WAMIT body's reference point; +HydroDyn['B1TAxi'] = False # (m/s^2); Translational acceleration of the 1st WAMIT body along the global x-axis; +HydroDyn['B1TAyi'] = False # (m/s^2); Translational acceleration of the 1st WAMIT body along the global y-axis; +HydroDyn['B1TAzi'] = False # (m/s^2); Translational acceleration of the 1st WAMIT body along the global z-axis; +HydroDyn['B1RAxi'] = False # (rad/s^2); Rotational acceleration of the 1st WAMIT body about the global x-axis at the 1st WAMIT body's reference point; +HydroDyn['B1RAyi'] = False # (rad/s^2); Rotational acceleration of the 1st WAMIT body about the global y-axis at the 1st WAMIT body's reference point; +HydroDyn['B1RAzi'] = False # (rad/s^2); Rotational acceleration of the 1st WAMIT body about the global z-axis at the 1st WAMIT body's reference point; +HydroDyn['B2Surge'] = False # (m); Displacement of the 2nd WAMIT body along the global x-axis; +HydroDyn['B2Sway'] = False # (m); Displacement of the 2nd WAMIT body along the global y-axis; +HydroDyn['B2Heave'] = False # (m); Displacement of the 2nd WAMIT body along the global z-axis; +HydroDyn['B2Roll'] = False # (rad); Rotation of the 2nd WAMIT body about the global x-axis at the 2nd WAMIT body's reference point; +HydroDyn['B2Pitch'] = False # (rad); Rotation of the 2nd WAMIT body about the global y-axis at the 2nd WAMIT body's reference point; +HydroDyn['B2Yaw'] = False # (rad); Rotation of the 2nd WAMIT body about the global z-axis at the 2nd WAMIT body's reference point; +HydroDyn['B2TVxi'] = False # (m/s); Translational velocity of the 2nd WAMIT body along the global x-axis; +HydroDyn['B2TVyi'] = False # (m/s); Translational velocity of the 2nd WAMIT body along the global y-axis; +HydroDyn['B2TVzi'] = False # (m/s); Translational velocity of the 2nd WAMIT body along the global z-axis; +HydroDyn['B2RVxi'] = False # (rad/s); Rotational velocity of the 2nd WAMIT body about the global x-axis at the 2nd WAMIT body's reference point; +HydroDyn['B2RVyi'] = False # (rad/s); Rotational velocity of the 2nd WAMIT body about the global y-axis at the 2nd WAMIT body's reference point; +HydroDyn['B2RVzi'] = False # (rad/s); Rotational velocity of the 2nd WAMIT body about the global z-axis at the 2nd WAMIT body's reference point; +HydroDyn['B2TAxi'] = False # (m/s^2); Translational acceleration of the 2nd WAMIT body along the global x-axis; +HydroDyn['B2TAyi'] = False # (m/s^2); Translational acceleration of the 2nd WAMIT body along the global y-axis; +HydroDyn['B2TAzi'] = False # (m/s^2); Translational acceleration of the 2nd WAMIT body along the global z-axis; +HydroDyn['B2RAxi'] = False # (rad/s^2); Rotational acceleration of the 2nd WAMIT body about the global x-axis at the 2nd WAMIT body's reference point; +HydroDyn['B2RAyi'] = False # (rad/s^2); Rotational acceleration of the 2nd WAMIT body about the global y-axis at the 2nd WAMIT body's reference point; +HydroDyn['B2RAzi'] = False # (rad/s^2); Rotational acceleration of the 2nd WAMIT body about the global z-axis at the 2nd WAMIT body's reference point; +HydroDyn['B3Surge'] = False # (m); Displacement of the 3rd WAMIT body along the global x-axis; +HydroDyn['B3Sway'] = False # (m); Displacement of the 3rd WAMIT body along the global y-axis; +HydroDyn['B3Heave'] = False # (m); Displacement of the 3rd WAMIT body along the global z-axis; +HydroDyn['B3Roll'] = False # (rad); Rotation of the 3rd WAMIT body about the global x-axis at the 3rd WAMIT body's reference point; +HydroDyn['B3Pitch'] = False # (rad); Rotation of the 3rd WAMIT body about the global y-axis at the 3rd WAMIT body's reference point; +HydroDyn['B3Yaw'] = False # (rad); Rotation of the 3rd WAMIT body about the global z-axis at the 3rd WAMIT body's reference point; +HydroDyn['B3TVxi'] = False # (m/s); Translational velocity of the 3rd WAMIT body along the global x-axis; +HydroDyn['B3TVyi'] = False # (m/s); Translational velocity of the 3rd WAMIT body along the global y-axis; +HydroDyn['B3TVzi'] = False # (m/s); Translational velocity of the 3rd WAMIT body along the global z-axis; +HydroDyn['B3RVxi'] = False # (rad/s); Rotational velocity of the 3rd WAMIT body about the global x-axis at the 3rd WAMIT body's reference point; +HydroDyn['B3RVyi'] = False # (rad/s); Rotational velocity of the 3rd WAMIT body about the global y-axis at the 3rd WAMIT body's reference point; +HydroDyn['B3RVzi'] = False # (rad/s); Rotational velocity of the 3rd WAMIT body about the global z-axis at the 3rd WAMIT body's reference point; +HydroDyn['B3TAxi'] = False # (m/s^2); Translational acceleration of the 3rd WAMIT body along the global x-axis; +HydroDyn['B3TAyi'] = False # (m/s^2); Translational acceleration of the 3rd WAMIT body along the global y-axis; +HydroDyn['B3TAzi'] = False # (m/s^2); Translational acceleration of the 3rd WAMIT body along the global z-axis; +HydroDyn['B3RAxi'] = False # (rad/s^2); Rotational acceleration of the 3rd WAMIT body about the global x-axis at the 3rd WAMIT body's reference point; +HydroDyn['B3RAyi'] = False # (rad/s^2); Rotational acceleration of the 3rd WAMIT body about the global y-axis at the 3rd WAMIT body's reference point; +HydroDyn['B3RAzi'] = False # (rad/s^2); Rotational acceleration of the 3rd WAMIT body about the global z-axis at the 3rd WAMIT body's reference point; +HydroDyn['B4Surge'] = False # (m); Displacement of the 4th WAMIT body along the global x-axis; +HydroDyn['B4Sway'] = False # (m); Displacement of the 4th WAMIT body along the global y-axis; +HydroDyn['B4Heave'] = False # (m); Displacement of the 4th WAMIT body along the global z-axis; +HydroDyn['B4Roll'] = False # (rad); Rotation of the 4th WAMIT body about the global x-axis at the 4th WAMIT body's reference point; +HydroDyn['B4Pitch'] = False # (rad); Rotation of the 4th WAMIT body about the global y-axis at the 4th WAMIT body's reference point; +HydroDyn['B4Yaw'] = False # (rad); Rotation of the 4th WAMIT body about the global z-axis at the 4th WAMIT body's reference point; +HydroDyn['B4TVxi'] = False # (m/s); Translational velocity of the 4th WAMIT body along the global x-axis; +HydroDyn['B4TVyi'] = False # (m/s); Translational velocity of the 4th WAMIT body along the global y-axis; +HydroDyn['B4TVzi'] = False # (m/s); Translational velocity of the 4th WAMIT body along the global z-axis; +HydroDyn['B4RVxi'] = False # (rad/s); Rotational velocity of the 4th WAMIT body about the global x-axis at the 4th WAMIT body's reference point; +HydroDyn['B4RVyi'] = False # (rad/s); Rotational velocity of the 4th WAMIT body about the global y-axis at the 4th WAMIT body's reference point; +HydroDyn['B4RVzi'] = False # (rad/s); Rotational velocity of the 4th WAMIT body about the global z-axis at the 4th WAMIT body's reference point; +HydroDyn['B4TAxi'] = False # (m/s^2); Translational acceleration of the 4th WAMIT body along the global x-axis; +HydroDyn['B4TAyi'] = False # (m/s^2); Translational acceleration of the 4th WAMIT body along the global y-axis; +HydroDyn['B4TAzi'] = False # (m/s^2); Translational acceleration of the 4th WAMIT body along the global z-axis; +HydroDyn['B4RAxi'] = False # (rad/s^2); Rotational acceleration of the 4th WAMIT body about the global x-axis at the 4th WAMIT body's reference point; +HydroDyn['B4RAyi'] = False # (rad/s^2); Rotational acceleration of the 4th WAMIT body about the global y-axis at the 4th WAMIT body's reference point; +HydroDyn['B4RAzi'] = False # (rad/s^2); Rotational acceleration of the 4th WAMIT body about the global z-axis at the 4th WAMIT body's reference point; +HydroDyn['B5Surge'] = False # (m); Displacement of the 5th WAMIT body along the global x-axis; +HydroDyn['B5Sway'] = False # (m); Displacement of the 5th WAMIT body along the global y-axis; +HydroDyn['B5Heave'] = False # (m); Displacement of the 5th WAMIT body along the global z-axis; +HydroDyn['B5Roll'] = False # (rad); Rotation of the 5th WAMIT body about the global x-axis at the 5th WAMIT body's reference point; +HydroDyn['B5Pitch'] = False # (rad); Rotation of the 5th WAMIT body about the global y-axis at the 5th WAMIT body's reference point; +HydroDyn['B5Yaw'] = False # (rad); Rotation of the 5th WAMIT body about the global z-axis at the 5th WAMIT body's reference point; +HydroDyn['B5TVxi'] = False # (m/s); Translational velocity of the 5th WAMIT body along the global x-axis; +HydroDyn['B5TVyi'] = False # (m/s); Translational velocity of the 5th WAMIT body along the global y-axis; +HydroDyn['B5TVzi'] = False # (m/s); Translational velocity of the 5th WAMIT body along the global z-axis; +HydroDyn['B5RVxi'] = False # (rad/s); Rotational velocity of the 5th WAMIT body about the global x-axis at the 5th WAMIT body's reference point; +HydroDyn['B5RVyi'] = False # (rad/s); Rotational velocity of the 5th WAMIT body about the global y-axis at the 5th WAMIT body's reference point; +HydroDyn['B5RVzi'] = False # (rad/s); Rotational velocity of the 5th WAMIT body about the global z-axis at the 5th WAMIT body's reference point; +HydroDyn['B5TAxi'] = False # (m/s^2); Translational acceleration of the 5th WAMIT body along the global x-axis; +HydroDyn['B5TAyi'] = False # (m/s^2); Translational acceleration of the 5th WAMIT body along the global y-axis; +HydroDyn['B5TAzi'] = False # (m/s^2); Translational acceleration of the 5th WAMIT body along the global z-axis; +HydroDyn['B5RAxi'] = False # (rad/s^2); Rotational acceleration of the 5th WAMIT body about the global x-axis at the 5th WAMIT body's reference point; +HydroDyn['B5RAyi'] = False # (rad/s^2); Rotational acceleration of the 5th WAMIT body about the global y-axis at the 5th WAMIT body's reference point; +HydroDyn['B5RAzi'] = False # (rad/s^2); Rotational acceleration of the 5th WAMIT body about the global z-axis at the 5th WAMIT body's reference point; +HydroDyn['B6Surge'] = False # (m); Displacement of the 6th WAMIT body along the global x-axis; +HydroDyn['B6Sway'] = False # (m); Displacement of the 6th WAMIT body along the global y-axis; +HydroDyn['B6Heave'] = False # (m); Displacement of the 6th WAMIT body along the global z-axis; +HydroDyn['B6Roll'] = False # (rad); Rotation of the 6th WAMIT body about the global x-axis at the 6th WAMIT body's reference point; +HydroDyn['B6Pitch'] = False # (rad); Rotation of the 6th WAMIT body about the global y-axis at the 6th WAMIT body's reference point; +HydroDyn['B6Yaw'] = False # (rad); Rotation of the 6th WAMIT body about the global z-axis at the 6th WAMIT body's reference point; +HydroDyn['B6TVxi'] = False # (m/s); Translational velocity of the 6th WAMIT body along the global x-axis; +HydroDyn['B6TVyi'] = False # (m/s); Translational velocity of the 6th WAMIT body along the global y-axis; +HydroDyn['B6TVzi'] = False # (m/s); Translational velocity of the 6th WAMIT body along the global z-axis; +HydroDyn['B6RVxi'] = False # (rad/s); Rotational velocity of the 6th WAMIT body about the global x-axis at the 6th WAMIT body's reference point; +HydroDyn['B6RVyi'] = False # (rad/s); Rotational velocity of the 6th WAMIT body about the global y-axis at the 6th WAMIT body's reference point; +HydroDyn['B6RVzi'] = False # (rad/s); Rotational velocity of the 6th WAMIT body about the global z-axis at the 6th WAMIT body's reference point; +HydroDyn['B6TAxi'] = False # (m/s^2); Translational acceleration of the 6th WAMIT body along the global x-axis; +HydroDyn['B6TAyi'] = False # (m/s^2); Translational acceleration of the 6th WAMIT body along the global y-axis; +HydroDyn['B6TAzi'] = False # (m/s^2); Translational acceleration of the 6th WAMIT body along the global z-axis; +HydroDyn['B6RAxi'] = False # (rad/s^2); Rotational acceleration of the 6th WAMIT body about the global x-axis at the 6th WAMIT body's reference point; +HydroDyn['B6RAyi'] = False # (rad/s^2); Rotational acceleration of the 6th WAMIT body about the global y-axis at the 6th WAMIT body's reference point; +HydroDyn['B6RAzi'] = False # (rad/s^2); Rotational acceleration of the 6th WAMIT body about the global z-axis at the 6th WAMIT body's reference point; +HydroDyn['B7Surge'] = False # (m); Displacement of the 7th WAMIT body along the global x-axis; +HydroDyn['B7Sway'] = False # (m); Displacement of the 7th WAMIT body along the global y-axis; +HydroDyn['B7Heave'] = False # (m); Displacement of the 7th WAMIT body along the global z-axis; +HydroDyn['B7Roll'] = False # (rad); Rotation of the 7th WAMIT body about the global x-axis at the 7th WAMIT body's reference point; +HydroDyn['B7Pitch'] = False # (rad); Rotation of the 7th WAMIT body about the global y-axis at the 7th WAMIT body's reference point; +HydroDyn['B7Yaw'] = False # (rad); Rotation of the 7th WAMIT body about the global z-axis at the 7th WAMIT body's reference point; +HydroDyn['B7TVxi'] = False # (m/s); Translational velocity of the 7th WAMIT body along the global x-axis; +HydroDyn['B7TVyi'] = False # (m/s); Translational velocity of the 7th WAMIT body along the global y-axis; +HydroDyn['B7TVzi'] = False # (m/s); Translational velocity of the 7th WAMIT body along the global z-axis; +HydroDyn['B7RVxi'] = False # (rad/s); Rotational velocity of the 7th WAMIT body about the global x-axis at the 7th WAMIT body's reference point; +HydroDyn['B7RVyi'] = False # (rad/s); Rotational velocity of the 7th WAMIT body about the global y-axis at the 7th WAMIT body's reference point; +HydroDyn['B7RVzi'] = False # (rad/s); Rotational velocity of the 7th WAMIT body about the global z-axis at the 7th WAMIT body's reference point; +HydroDyn['B7TAxi'] = False # (m/s^2); Translational acceleration of the 7th WAMIT body along the global x-axis; +HydroDyn['B7TAyi'] = False # (m/s^2); Translational acceleration of the 7th WAMIT body along the global y-axis; +HydroDyn['B7TAzi'] = False # (m/s^2); Translational acceleration of the 7th WAMIT body along the global z-axis; +HydroDyn['B7RAxi'] = False # (rad/s^2); Rotational acceleration of the 7th WAMIT body about the global x-axis at the 7th WAMIT body's reference point; +HydroDyn['B7RAyi'] = False # (rad/s^2); Rotational acceleration of the 7th WAMIT body about the global y-axis at the 7th WAMIT body's reference point; +HydroDyn['B7RAzi'] = False # (rad/s^2); Rotational acceleration of the 7th WAMIT body about the global z-axis at the 7th WAMIT body's reference point; +HydroDyn['B8Surge'] = False # (m); Displacement of the 8th WAMIT body along the global x-axis; +HydroDyn['B8Sway'] = False # (m); Displacement of the 8th WAMIT body along the global y-axis; +HydroDyn['B8Heave'] = False # (m); Displacement of the 8th WAMIT body along the global z-axis; +HydroDyn['B8Roll'] = False # (rad); Rotation of the 8th WAMIT body about the global x-axis at the 8th WAMIT body's reference point; +HydroDyn['B8Pitch'] = False # (rad); Rotation of the 8th WAMIT body about the global y-axis at the 8th WAMIT body's reference point; +HydroDyn['B8Yaw'] = False # (rad); Rotation of the 8th WAMIT body about the global z-axis at the 8th WAMIT body's reference point; +HydroDyn['B8TVxi'] = False # (m/s); Translational velocity of the 8th WAMIT body along the global x-axis; +HydroDyn['B8TVyi'] = False # (m/s); Translational velocity of the 8th WAMIT body along the global y-axis; +HydroDyn['B8TVzi'] = False # (m/s); Translational velocity of the 8th WAMIT body along the global z-axis; +HydroDyn['B8RVxi'] = False # (rad/s); Rotational velocity of the 8th WAMIT body about the global x-axis at the 8th WAMIT body's reference point; +HydroDyn['B8RVyi'] = False # (rad/s); Rotational velocity of the 8th WAMIT body about the global y-axis at the 8th WAMIT body's reference point; +HydroDyn['B8RVzi'] = False # (rad/s); Rotational velocity of the 8th WAMIT body about the global z-axis at the 8th WAMIT body's reference point; +HydroDyn['B8TAxi'] = False # (m/s^2); Translational acceleration of the 8th WAMIT body along the global x-axis; +HydroDyn['B8TAyi'] = False # (m/s^2); Translational acceleration of the 8th WAMIT body along the global y-axis; +HydroDyn['B8TAzi'] = False # (m/s^2); Translational acceleration of the 8th WAMIT body along the global z-axis; +HydroDyn['B8RAxi'] = False # (rad/s^2); Rotational acceleration of the 8th WAMIT body about the global x-axis at the 8th WAMIT body's reference point; +HydroDyn['B8RAyi'] = False # (rad/s^2); Rotational acceleration of the 8th WAMIT body about the global y-axis at the 8th WAMIT body's reference point; +HydroDyn['B8RAzi'] = False # (rad/s^2); Rotational acceleration of the 8th WAMIT body about the global z-axis at the 8th WAMIT body's reference point; +HydroDyn['B9Surge'] = False # (m); Displacement of the 9th WAMIT body along the global x-axis; +HydroDyn['B9Sway'] = False # (m); Displacement of the 9th WAMIT body along the global y-axis; +HydroDyn['B9Heave'] = False # (m); Displacement of the 9th WAMIT body along the global z-axis; +HydroDyn['B9Roll'] = False # (rad); Rotation of the 9th WAMIT body about the global x-axis at the 9th WAMIT body's reference point; +HydroDyn['B9Pitch'] = False # (rad); Rotation of the 9th WAMIT body about the global y-axis at the 9th WAMIT body's reference point; +HydroDyn['B9Yaw'] = False # (rad); Rotation of the 9th WAMIT body about the global z-axis at the 9th WAMIT body's reference point; +HydroDyn['B9TVxi'] = False # (m/s); Translational velocity of the 9th WAMIT body along the global x-axis; +HydroDyn['B9TVyi'] = False # (m/s); Translational velocity of the 9th WAMIT body along the global y-axis; +HydroDyn['B9TVzi'] = False # (m/s); Translational velocity of the 9th WAMIT body along the global z-axis; +HydroDyn['B9RVxi'] = False # (rad/s); Rotational velocity of the 9th WAMIT body about the global x-axis at the 9th WAMIT body's reference point; +HydroDyn['B9RVyi'] = False # (rad/s); Rotational velocity of the 9th WAMIT body about the global y-axis at the 9th WAMIT body's reference point; +HydroDyn['B9RVzi'] = False # (rad/s); Rotational velocity of the 9th WAMIT body about the global z-axis at the 9th WAMIT body's reference point; +HydroDyn['B9TAxi'] = False # (m/s^2); Translational acceleration of the 9th WAMIT body along the global x-axis; +HydroDyn['B9TAyi'] = False # (m/s^2); Translational acceleration of the 9th WAMIT body along the global y-axis; +HydroDyn['B9TAzi'] = False # (m/s^2); Translational acceleration of the 9th WAMIT body along the global z-axis; +HydroDyn['B9RAxi'] = False # (rad/s^2); Rotational acceleration of the 9th WAMIT body about the global x-axis at the 9th WAMIT body's reference point; +HydroDyn['B9RAyi'] = False # (rad/s^2); Rotational acceleration of the 9th WAMIT body about the global y-axis at the 9th WAMIT body's reference point; +HydroDyn['B9RAzi'] = False # (rad/s^2); Rotational acceleration of the 9th WAMIT body about the global z-axis at the 9th WAMIT body's reference point; + +# WAMIT Body Forces +HydroDyn['B1AddFxi'] = False # (N); Force along the global x-axis due to additional preload, stiffness, and damping of the 1st WAMIT body ; +HydroDyn['B1AddFyi'] = False # (N); Force along the global y-axis due to additional preload, stiffness, and damping of the 1st WAMIT body ; +HydroDyn['B1AddFzi'] = False # (N); Force along the global z-axis due to additional preload, stiffness, and damping of the 1st WAMIT body ; +HydroDyn['B1AddMxi'] = False # (N-m); Moment about the global x-axis at of the 1st WAMIT body's reference point due to additional preload, stiffness, and damping ; +HydroDyn['B1AddMyi'] = False # (N-m); Moment about the global y-axis at of the 1st WAMIT body's reference point due to additional preload, stiffness, and damping ; +HydroDyn['B1AddMzi'] = False # (N-m); Moment about the global z-axis at of the 1st WAMIT body's reference point due to additional preload, stiffness, and damping ; +HydroDyn['B1WvsF1xi'] = False # (N); First-order wave-excitation force at the 1st WAMIT body from diffraction along the global x-axis; +HydroDyn['B1WvsF1yi'] = False # (N); First-order wave-excitation force at the 1st WAMIT body from diffraction along the global y-axis; +HydroDyn['B1WvsF1zi'] = False # (N); First-order wave-excitation force at the 1st WAMIT body from diffraction along the global z-axis; +HydroDyn['B1WvsM1xi'] = False # (N-m); First-order wave-excitation moment at the 1st WAMIT body reference point from diffraction about the global x-axis; +HydroDyn['B1WvsM1yi'] = False # (N-m); First-order wave-excitation moment at the 1st WAMIT body reference point from diffraction about the global y-axis; +HydroDyn['B1WvsM1zi'] = False # (N-m); First-order wave-excitation moment at the 1st WAMIT body reference point from diffraction about the global z-axis; +HydroDyn['B1WvsFxi'] = False # (N); Total (first-order plus second-order) wave-excitation force at the 1st WAMIT body from diffraction along the global x-axis; +HydroDyn['B1WvsFyi'] = False # (N); Total (first-order plus second-order) wave-excitation force at the 1st WAMIT body from diffraction along the global y-axis; +HydroDyn['B1WvsFzi'] = False # (N); Total (first-order plus second-order) wave-excitation force at the 1st WAMIT body from diffraction along the global z-axis; +HydroDyn['B1WvsMxi'] = False # (N-m); Total (first-order plus second-order) wave-excitation moment at the 1st WAMIT body reference point from diffraction about the global x-axis; +HydroDyn['B1WvsMyi'] = False # (N-m); Total (first-order plus second-order) wave-excitation moment at the 1st WAMIT body reference point from diffraction about the global y-axis; +HydroDyn['B1WvsMzi'] = False # (N-m); Total (first-order plus second-order) wave-excitation moment at the 1st WAMIT body reference point from diffraction about the global z-axis; +HydroDyn['B1HdSFxi'] = False # (N); Hydrostatic force from the 1st WAMIT body along the global x-axis; +HydroDyn['B1HdSFyi'] = False # (N); Hydrostatic force from the 1st WAMIT body along the global y-axis; +HydroDyn['B1HdSFzi'] = False # (N); Hydrostatic force from the 1st WAMIT body along the global z-axis; +HydroDyn['B1HdSMxi'] = False # (N-m); Hydrostatic moment from the 1st WAMIT body about the global x-axis at the 1st WAMT body reference point; +HydroDyn['B1HdSMyi'] = False # (N-m); Hydrostatic moment from the 1st WAMIT body about the global y-axis at the 1st WAMT body reference point; +HydroDyn['B1HdSMzi'] = False # (N-m); Hydrostatic moment from the 1st WAMIT body about the global z-axis at the 1st WAMT body reference point; +HydroDyn['B1RdtFxi'] = False # (N); Wave-radiation force at the 1st WAMIT body along the global x-axis; +HydroDyn['B1RdtFyi'] = False # (N); Wave-radiation force at the 1st WAMIT body along the global y-axis; +HydroDyn['B1RdtFzi'] = False # (N); Wave-radiation force at the 1st WAMIT body along the global z-axis; +HydroDyn['B1RdtMxi'] = False # (N-m); Wave-radiation moment at the 1st WAMIT body about the global x-axis at the 1st WAMIT body's reference point; +HydroDyn['B1RdtMyi'] = False # (N-m); Wave-radiation moment at the 1st WAMIT body about the global y-axis at the 1st WAMIT body's reference point; +HydroDyn['B1RdtMzi'] = False # (N-m); Wave-radiation moment at the 1st WAMIT body about the global z-axis at the 1st WAMIT body's reference point; +HydroDyn['B2AddFxi'] = False # (N); Force along the global x-axis due to additional preload, stiffness, and damping of the 2nd WAMIT body ; +HydroDyn['B2AddFyi'] = False # (N); Force along the global y-axis due to additional preload, stiffness, and damping of the 2nd WAMIT body ; +HydroDyn['B2AddFzi'] = False # (N); Force along the global z-axis due to additional preload, stiffness, and damping of the 2nd WAMIT body ; +HydroDyn['B2AddMxi'] = False # (N-m); Moment about the global x-axis at of the 2nd WAMIT body's reference point due to additional preload, stiffness, and damping ; +HydroDyn['B2AddMyi'] = False # (N-m); Moment about the global y-axis at of the 2nd WAMIT body's reference point due to additional preload, stiffness, and damping ; +HydroDyn['B2AddMzi'] = False # (N-m); Moment about the global z-axis at of the 2nd WAMIT body's reference point due to additional preload, stiffness, and damping ; +HydroDyn['B2WvsF1xi'] = False # (N); First-order wave-excitation force at the 2nd WAMIT body from diffraction along the global x-axis; +HydroDyn['B2WvsF1yi'] = False # (N); First-order wave-excitation force at the 2nd WAMIT body from diffraction along the global y-axis; +HydroDyn['B2WvsF1zi'] = False # (N); First-order wave-excitation force at the 2nd WAMIT body from diffraction along the global z-axis; +HydroDyn['B2WvsM1xi'] = False # (N-m); First-order wave-excitation moment at the 2nd WAMIT body reference point from diffraction about the global x-axis; +HydroDyn['B2WvsM1yi'] = False # (N-m); First-order wave-excitation moment at the 2nd WAMIT body reference point from diffraction about the global y-axis; +HydroDyn['B2WvsM1zi'] = False # (N-m); First-order wave-excitation moment at the 2nd WAMIT body reference point from diffraction about the global z-axis; +HydroDyn['B2WvsFxi'] = False # (N); Total (first-order plus second-order) wave-excitation force at the 2nd WAMIT body from diffraction along the global x-axis; +HydroDyn['B2WvsFyi'] = False # (N); Total (first-order plus second-order) wave-excitation force at the 2nd WAMIT body from diffraction along the global y-axis; +HydroDyn['B2WvsFzi'] = False # (N); Total (first-order plus second-order) wave-excitation force at the 2nd WAMIT body from diffraction along the global z-axis; +HydroDyn['B2WvsMxi'] = False # (N-m); Total (first-order plus second-order) wave-excitation moment at the 2nd WAMIT body reference point from diffraction about the global x-axis; +HydroDyn['B2WvsMyi'] = False # (N-m); Total (first-order plus second-order) wave-excitation moment at the 2nd WAMIT body reference point from diffraction about the global y-axis; +HydroDyn['B2WvsMzi'] = False # (N-m); Total (first-order plus second-order) wave-excitation moment at the 2nd WAMIT body reference point from diffraction about the global z-axis; +HydroDyn['B2HdSFxi'] = False # (N); Hydrostatic force from the 2nd WAMIT body along the global x-axis; +HydroDyn['B2HdSFyi'] = False # (N); Hydrostatic force from the 2nd WAMIT body along the global y-axis; +HydroDyn['B2HdSFzi'] = False # (N); Hydrostatic force from the 2nd WAMIT body along the global z-axis; +HydroDyn['B2HdSMxi'] = False # (N-m); Hydrostatic moment from the 2nd WAMIT body about the global x-axis at the 2nd WAMT body reference point; +HydroDyn['B2HdSMyi'] = False # (N-m); Hydrostatic moment from the 2nd WAMIT body about the global y-axis at the 2nd WAMT body reference point; +HydroDyn['B2HdSMzi'] = False # (N-m); Hydrostatic moment from the 2nd WAMIT body about the global z-axis at the 2nd WAMT body reference point; +HydroDyn['B2RdtFxi'] = False # (N); Wave-radiation force at the 2nd WAMIT body along the global x-axis; +HydroDyn['B2RdtFyi'] = False # (N); Wave-radiation force at the 2nd WAMIT body along the global y-axis; +HydroDyn['B2RdtFzi'] = False # (N); Wave-radiation force at the 2nd WAMIT body along the global z-axis; +HydroDyn['B2RdtMxi'] = False # (N-m); Wave-radiation moment at the 2nd WAMIT body about the global x-axis at the 2nd WAMIT body's reference point; +HydroDyn['B2RdtMyi'] = False # (N-m); Wave-radiation moment at the 2nd WAMIT body about the global y-axis at the 2nd WAMIT body's reference point; +HydroDyn['B2RdtMzi'] = False # (N-m); Wave-radiation moment at the 2nd WAMIT body about the global z-axis at the 2nd WAMIT body's reference point; +HydroDyn['B3AddFxi'] = False # (N); Force along the global x-axis due to additional preload, stiffness, and damping of the 3rd WAMIT body ; +HydroDyn['B3AddFyi'] = False # (N); Force along the global y-axis due to additional preload, stiffness, and damping of the 3rd WAMIT body ; +HydroDyn['B3AddFzi'] = False # (N); Force along the global z-axis due to additional preload, stiffness, and damping of the 3rd WAMIT body ; +HydroDyn['B3AddMxi'] = False # (N-m); Moment about the global x-axis at of the 3rd WAMIT body's reference point due to additional preload, stiffness, and damping ; +HydroDyn['B3AddMyi'] = False # (N-m); Moment about the global y-axis at of the 3rd WAMIT body's reference point due to additional preload, stiffness, and damping ; +HydroDyn['B3AddMzi'] = False # (N-m); Moment about the global z-axis at of the 3rd WAMIT body's reference point due to additional preload, stiffness, and damping ; +HydroDyn['B3WvsF1xi'] = False # (N); First-order wave-excitation force at the 3rd WAMIT body from diffraction along the global x-axis; +HydroDyn['B3WvsF1yi'] = False # (N); First-order wave-excitation force at the 3rd WAMIT body from diffraction along the global y-axis; +HydroDyn['B3WvsF1zi'] = False # (N); First-order wave-excitation force at the 3rd WAMIT body from diffraction along the global z-axis; +HydroDyn['B3WvsM1xi'] = False # (N-m); First-order wave-excitation moment at the 3rd WAMIT body reference point from diffraction about the global x-axis; +HydroDyn['B3WvsM1yi'] = False # (N-m); First-order wave-excitation moment at the 3rd WAMIT body reference point from diffraction about the global y-axis; +HydroDyn['B3WvsM1zi'] = False # (N-m); First-order wave-excitation moment at the 3rd WAMIT body reference point from diffraction about the global z-axis; +HydroDyn['B3WvsFxi'] = False # (N); Total (first-order plus second-order) wave-excitation force at the 3rd WAMIT body from diffraction along the global x-axis; +HydroDyn['B3WvsFyi'] = False # (N); Total (first-order plus second-order) wave-excitation force at the 3rd WAMIT body from diffraction along the global y-axis; +HydroDyn['B3WvsFzi'] = False # (N); Total (first-order plus second-order) wave-excitation force at the 3rd WAMIT body from diffraction along the global z-axis; +HydroDyn['B3WvsMxi'] = False # (N-m); Total (first-order plus second-order) wave-excitation moment at the 3rd WAMIT body reference point from diffraction about the global x-axis; +HydroDyn['B3WvsMyi'] = False # (N-m); Total (first-order plus second-order) wave-excitation moment at the 3rd WAMIT body reference point from diffraction about the global y-axis; +HydroDyn['B3WvsMzi'] = False # (N-m); Total (first-order plus second-order) wave-excitation moment at the 3rd WAMIT body reference point from diffraction about the global z-axis; +HydroDyn['B3HdSFxi'] = False # (N); Hydrostatic force from the 3rd WAMIT body along the global x-axis; +HydroDyn['B3HdSFyi'] = False # (N); Hydrostatic force from the 3rd WAMIT body along the global y-axis; +HydroDyn['B3HdSFzi'] = False # (N); Hydrostatic force from the 3rd WAMIT body along the global z-axis; +HydroDyn['B3HdSMxi'] = False # (N-m); Hydrostatic moment from the 3rd WAMIT body about the global x-axis at the 3rd WAMT body reference point; +HydroDyn['B3HdSMyi'] = False # (N-m); Hydrostatic moment from the 3rd WAMIT body about the global y-axis at the 3rd WAMT body reference point; +HydroDyn['B3HdSMzi'] = False # (N-m); Hydrostatic moment from the 3rd WAMIT body about the global z-axis at the 3rd WAMT body reference point; +HydroDyn['B3RdtFxi'] = False # (N); Wave-radiation force at the 3rd WAMIT body along the global x-axis; +HydroDyn['B3RdtFyi'] = False # (N); Wave-radiation force at the 3rd WAMIT body along the global y-axis; +HydroDyn['B3RdtFzi'] = False # (N); Wave-radiation force at the 3rd WAMIT body along the global z-axis; +HydroDyn['B3RdtMxi'] = False # (N-m); Wave-radiation moment at the 3rd WAMIT body about the global x-axis at the 3rd WAMIT body's reference point; +HydroDyn['B3RdtMyi'] = False # (N-m); Wave-radiation moment at the 3rd WAMIT body about the global y-axis at the 3rd WAMIT body's reference point; +HydroDyn['B3RdtMzi'] = False # (N-m); Wave-radiation moment at the 3rd WAMIT body about the global z-axis at the 3rd WAMIT body's reference point; +HydroDyn['B4AddFxi'] = False # (N); Force along the global x-axis due to additional preload, stiffness, and damping of the 4th WAMIT body ; +HydroDyn['B4AddFyi'] = False # (N); Force along the global y-axis due to additional preload, stiffness, and damping of the 4th WAMIT body ; +HydroDyn['B4AddFzi'] = False # (N); Force along the global z-axis due to additional preload, stiffness, and damping of the 4th WAMIT body ; +HydroDyn['B4AddMxi'] = False # (N-m); Moment about the global x-axis at of the 4th WAMIT body's reference point due to additional preload, stiffness, and damping ; +HydroDyn['B4AddMyi'] = False # (N-m); Moment about the global y-axis at of the 4th WAMIT body's reference point due to additional preload, stiffness, and damping ; +HydroDyn['B4AddMzi'] = False # (N-m); Moment about the global z-axis at of the 4th WAMIT body's reference point due to additional preload, stiffness, and damping ; +HydroDyn['B4WvsF1xi'] = False # (N); First-order wave-excitation force at the 4th WAMIT body from diffraction along the global x-axis; +HydroDyn['B4WvsF1yi'] = False # (N); First-order wave-excitation force at the 4th WAMIT body from diffraction along the global y-axis; +HydroDyn['B4WvsF1zi'] = False # (N); First-order wave-excitation force at the 4th WAMIT body from diffraction along the global z-axis; +HydroDyn['B4WvsM1xi'] = False # (N-m); First-order wave-excitation moment at the 4th WAMIT body reference point from diffraction about the global x-axis; +HydroDyn['B4WvsM1yi'] = False # (N-m); First-order wave-excitation moment at the 4th WAMIT body reference point from diffraction about the global y-axis; +HydroDyn['B4WvsM1zi'] = False # (N-m); First-order wave-excitation moment at the 4th WAMIT body reference point from diffraction about the global z-axis; +HydroDyn['B4WvsFxi'] = False # (N); Total (first-order plus second-order) wave-excitation force at the 4th WAMIT body from diffraction along the global x-axis; +HydroDyn['B4WvsFyi'] = False # (N); Total (first-order plus second-order) wave-excitation force at the 4th WAMIT body from diffraction along the global y-axis; +HydroDyn['B4WvsFzi'] = False # (N); Total (first-order plus second-order) wave-excitation force at the 4th WAMIT body from diffraction along the global z-axis; +HydroDyn['B4WvsMxi'] = False # (N-m); Total (first-order plus second-order) wave-excitation moment at the 4th WAMIT body reference point from diffraction about the global x-axis; +HydroDyn['B4WvsMyi'] = False # (N-m); Total (first-order plus second-order) wave-excitation moment at the 4th WAMIT body reference point from diffraction about the global y-axis; +HydroDyn['B4WvsMzi'] = False # (N-m); Total (first-order plus second-order) wave-excitation moment at the 4th WAMIT body reference point from diffraction about the global z-axis; +HydroDyn['B4HdSFxi'] = False # (N); Hydrostatic force from the 4th WAMIT body along the global x-axis; +HydroDyn['B4HdSFyi'] = False # (N); Hydrostatic force from the 4th WAMIT body along the global y-axis; +HydroDyn['B4HdSFzi'] = False # (N); Hydrostatic force from the 4th WAMIT body along the global z-axis; +HydroDyn['B4HdSMxi'] = False # (N-m); Hydrostatic moment from the 4th WAMIT body about the global x-axis at the 4th WAMT body reference point; +HydroDyn['B4HdSMyi'] = False # (N-m); Hydrostatic moment from the 4th WAMIT body about the global y-axis at the 4th WAMT body reference point; +HydroDyn['B4HdSMzi'] = False # (N-m); Hydrostatic moment from the 4th WAMIT body about the global z-axis at the 4th WAMT body reference point; +HydroDyn['B4RdtFxi'] = False # (N); Wave-radiation force at the 4th WAMIT body along the global x-axis; +HydroDyn['B4RdtFyi'] = False # (N); Wave-radiation force at the 4th WAMIT body along the global y-axis; +HydroDyn['B4RdtFzi'] = False # (N); Wave-radiation force at the 4th WAMIT body along the global z-axis; +HydroDyn['B4RdtMxi'] = False # (N-m); Wave-radiation moment at the 4th WAMIT body about the global x-axis at the 4th WAMIT body's reference point; +HydroDyn['B4RdtMyi'] = False # (N-m); Wave-radiation moment at the 4th WAMIT body about the global y-axis at the 4th WAMIT body's reference point; +HydroDyn['B4RdtMzi'] = False # (N-m); Wave-radiation moment at the 4th WAMIT body about the global z-axis at the 4th WAMIT body's reference point; +HydroDyn['B5AddFxi'] = False # (N); Force along the global x-axis due to additional preload, stiffness, and damping of the 5th WAMIT body ; +HydroDyn['B5AddFyi'] = False # (N); Force along the global y-axis due to additional preload, stiffness, and damping of the 5th WAMIT body ; +HydroDyn['B5AddFzi'] = False # (N); Force along the global z-axis due to additional preload, stiffness, and damping of the 5th WAMIT body ; +HydroDyn['B5AddMxi'] = False # (N-m); Moment about the global x-axis at of the 5th WAMIT body's reference point due to additional preload, stiffness, and damping ; +HydroDyn['B5AddMyi'] = False # (N-m); Moment about the global y-axis at of the 5th WAMIT body's reference point due to additional preload, stiffness, and damping ; +HydroDyn['B5AddMzi'] = False # (N-m); Moment about the global z-axis at of the 5th WAMIT body's reference point due to additional preload, stiffness, and damping ; +HydroDyn['B5WvsF1xi'] = False # (N); First-order wave-excitation force at the 5th WAMIT body from diffraction along the global x-axis; +HydroDyn['B5WvsF1yi'] = False # (N); First-order wave-excitation force at the 5th WAMIT body from diffraction along the global y-axis; +HydroDyn['B5WvsF1zi'] = False # (N); First-order wave-excitation force at the 5th WAMIT body from diffraction along the global z-axis; +HydroDyn['B5WvsM1xi'] = False # (N-m); First-order wave-excitation moment at the 5th WAMIT body reference point from diffraction about the global x-axis; +HydroDyn['B5WvsM1yi'] = False # (N-m); First-order wave-excitation moment at the 5th WAMIT body reference point from diffraction about the global y-axis; +HydroDyn['B5WvsM1zi'] = False # (N-m); First-order wave-excitation moment at the 5th WAMIT body reference point from diffraction about the global z-axis; +HydroDyn['B5WvsFxi'] = False # (N); Total (first-order plus second-order) wave-excitation force at the 5th WAMIT body from diffraction along the global x-axis; +HydroDyn['B5WvsFyi'] = False # (N); Total (first-order plus second-order) wave-excitation force at the 5th WAMIT body from diffraction along the global y-axis; +HydroDyn['B5WvsFzi'] = False # (N); Total (first-order plus second-order) wave-excitation force at the 5th WAMIT body from diffraction along the global z-axis; +HydroDyn['B5WvsMxi'] = False # (N-m); Total (first-order plus second-order) wave-excitation moment at the 5th WAMIT body reference point from diffraction about the global x-axis; +HydroDyn['B5WvsMyi'] = False # (N-m); Total (first-order plus second-order) wave-excitation moment at the 5th WAMIT body reference point from diffraction about the global y-axis; +HydroDyn['B5WvsMzi'] = False # (N-m); Total (first-order plus second-order) wave-excitation moment at the 5th WAMIT body reference point from diffraction about the global z-axis; +HydroDyn['B5HdSFxi'] = False # (N); Hydrostatic force from the 5th WAMIT body along the global x-axis; +HydroDyn['B5HdSFyi'] = False # (N); Hydrostatic force from the 5th WAMIT body along the global y-axis; +HydroDyn['B5HdSFzi'] = False # (N); Hydrostatic force from the 5th WAMIT body along the global z-axis; +HydroDyn['B5HdSMxi'] = False # (N-m); Hydrostatic moment from the 5th WAMIT body about the global x-axis at the 5th WAMT body reference point; +HydroDyn['B5HdSMyi'] = False # (N-m); Hydrostatic moment from the 5th WAMIT body about the global y-axis at the 5th WAMT body reference point; +HydroDyn['B5HdSMzi'] = False # (N-m); Hydrostatic moment from the 5th WAMIT body about the global z-axis at the 5th WAMT body reference point; +HydroDyn['B5RdtFxi'] = False # (N); Wave-radiation force at the 5th WAMIT body along the global x-axis; +HydroDyn['B5RdtFyi'] = False # (N); Wave-radiation force at the 5th WAMIT body along the global y-axis; +HydroDyn['B5RdtFzi'] = False # (N); Wave-radiation force at the 5th WAMIT body along the global z-axis; +HydroDyn['B5RdtMxi'] = False # (N-m); Wave-radiation moment at the 5th WAMIT body about the global x-axis at the 5th WAMIT body's reference point; +HydroDyn['B5RdtMyi'] = False # (N-m); Wave-radiation moment at the 5th WAMIT body about the global y-axis at the 5th WAMIT body's reference point; +HydroDyn['B5RdtMzi'] = False # (N-m); Wave-radiation moment at the 5th WAMIT body about the global z-axis at the 5th WAMIT body's reference point; +HydroDyn['B6AddFxi'] = False # (N); Force along the global x-axis due to additional preload, stiffness, and damping of the 6th WAMIT body ; +HydroDyn['B6AddFyi'] = False # (N); Force along the global y-axis due to additional preload, stiffness, and damping of the 6th WAMIT body ; +HydroDyn['B6AddFzi'] = False # (N); Force along the global z-axis due to additional preload, stiffness, and damping of the 6th WAMIT body ; +HydroDyn['B6AddMxi'] = False # (N-m); Moment about the global x-axis at of the 6th WAMIT body's reference point due to additional preload, stiffness, and damping ; +HydroDyn['B6AddMyi'] = False # (N-m); Moment about the global y-axis at of the 6th WAMIT body's reference point due to additional preload, stiffness, and damping ; +HydroDyn['B6AddMzi'] = False # (N-m); Moment about the global z-axis at of the 6th WAMIT body's reference point due to additional preload, stiffness, and damping ; +HydroDyn['B6WvsF1xi'] = False # (N); First-order wave-excitation force at the 6th WAMIT body from diffraction along the global x-axis; +HydroDyn['B6WvsF1yi'] = False # (N); First-order wave-excitation force at the 6th WAMIT body from diffraction along the global y-axis; +HydroDyn['B6WvsF1zi'] = False # (N); First-order wave-excitation force at the 6th WAMIT body from diffraction along the global z-axis; +HydroDyn['B6WvsM1xi'] = False # (N-m); First-order wave-excitation moment at the 6th WAMIT body reference point from diffraction about the global x-axis; +HydroDyn['B6WvsM1yi'] = False # (N-m); First-order wave-excitation moment at the 6th WAMIT body reference point from diffraction about the global y-axis; +HydroDyn['B6WvsM1zi'] = False # (N-m); First-order wave-excitation moment at the 6th WAMIT body reference point from diffraction about the global z-axis; +HydroDyn['B6WvsFxi'] = False # (N); Total (first-order plus second-order) wave-excitation force at the 6th WAMIT body from diffraction along the global x-axis; +HydroDyn['B6WvsFyi'] = False # (N); Total (first-order plus second-order) wave-excitation force at the 6th WAMIT body from diffraction along the global y-axis; +HydroDyn['B6WvsFzi'] = False # (N); Total (first-order plus second-order) wave-excitation force at the 6th WAMIT body from diffraction along the global z-axis; +HydroDyn['B6WvsMxi'] = False # (N-m); Total (first-order plus second-order) wave-excitation moment at the 6th WAMIT body reference point from diffraction about the global x-axis; +HydroDyn['B6WvsMyi'] = False # (N-m); Total (first-order plus second-order) wave-excitation moment at the 6th WAMIT body reference point from diffraction about the global y-axis; +HydroDyn['B6WvsMzi'] = False # (N-m); Total (first-order plus second-order) wave-excitation moment at the 6th WAMIT body reference point from diffraction about the global z-axis; +HydroDyn['B6HdSFxi'] = False # (N); Hydrostatic force from the 6th WAMIT body along the global x-axis; +HydroDyn['B6HdSFyi'] = False # (N); Hydrostatic force from the 6th WAMIT body along the global y-axis; +HydroDyn['B6HdSFzi'] = False # (N); Hydrostatic force from the 6th WAMIT body along the global z-axis; +HydroDyn['B6HdSMxi'] = False # (N-m); Hydrostatic moment from the 6th WAMIT body about the global x-axis at the 6th WAMT body reference point; +HydroDyn['B6HdSMyi'] = False # (N-m); Hydrostatic moment from the 6th WAMIT body about the global y-axis at the 6th WAMT body reference point; +HydroDyn['B6HdSMzi'] = False # (N-m); Hydrostatic moment from the 6th WAMIT body about the global z-axis at the 6th WAMT body reference point; +HydroDyn['B6RdtFxi'] = False # (N); Wave-radiation force at the 6th WAMIT body along the global x-axis; +HydroDyn['B6RdtFyi'] = False # (N); Wave-radiation force at the 6th WAMIT body along the global y-axis; +HydroDyn['B6RdtFzi'] = False # (N); Wave-radiation force at the 6th WAMIT body along the global z-axis; +HydroDyn['B6RdtMxi'] = False # (N-m); Wave-radiation moment at the 6th WAMIT body about the global x-axis at the 6th WAMIT body's reference point; +HydroDyn['B6RdtMyi'] = False # (N-m); Wave-radiation moment at the 6th WAMIT body about the global y-axis at the 6th WAMIT body's reference point; +HydroDyn['B6RdtMzi'] = False # (N-m); Wave-radiation moment at the 6th WAMIT body about the global z-axis at the 6th WAMIT body's reference point; +HydroDyn['B7AddFxi'] = False # (N); Force along the global x-axis due to additional preload, stiffness, and damping of the 7th WAMIT body ; +HydroDyn['B7AddFyi'] = False # (N); Force along the global y-axis due to additional preload, stiffness, and damping of the 7th WAMIT body ; +HydroDyn['B7AddFzi'] = False # (N); Force along the global z-axis due to additional preload, stiffness, and damping of the 7th WAMIT body ; +HydroDyn['B7AddMxi'] = False # (N-m); Moment about the global x-axis at of the 7th WAMIT body's reference point due to additional preload, stiffness, and damping ; +HydroDyn['B7AddMyi'] = False # (N-m); Moment about the global y-axis at of the 7th WAMIT body's reference point due to additional preload, stiffness, and damping ; +HydroDyn['B7AddMzi'] = False # (N-m); Moment about the global z-axis at of the 7th WAMIT body's reference point due to additional preload, stiffness, and damping ; +HydroDyn['B7WvsF1xi'] = False # (N); First-order wave-excitation force at the 7th WAMIT body from diffraction along the global x-axis; +HydroDyn['B7WvsF1yi'] = False # (N); First-order wave-excitation force at the 7th WAMIT body from diffraction along the global y-axis; +HydroDyn['B7WvsF1zi'] = False # (N); First-order wave-excitation force at the 7th WAMIT body from diffraction along the global z-axis; +HydroDyn['B7WvsM1xi'] = False # (N-m); First-order wave-excitation moment at the 7th WAMIT body reference point from diffraction about the global x-axis; +HydroDyn['B7WvsM1yi'] = False # (N-m); First-order wave-excitation moment at the 7th WAMIT body reference point from diffraction about the global y-axis; +HydroDyn['B7WvsM1zi'] = False # (N-m); First-order wave-excitation moment at the 7th WAMIT body reference point from diffraction about the global z-axis; +HydroDyn['B7WvsFxi'] = False # (N); Total (first-order plus second-order) wave-excitation force at the 7th WAMIT body from diffraction along the global x-axis; +HydroDyn['B7WvsFyi'] = False # (N); Total (first-order plus second-order) wave-excitation force at the 7th WAMIT body from diffraction along the global y-axis; +HydroDyn['B7WvsFzi'] = False # (N); Total (first-order plus second-order) wave-excitation force at the 7th WAMIT body from diffraction along the global z-axis; +HydroDyn['B7WvsMxi'] = False # (N-m); Total (first-order plus second-order) wave-excitation moment at the 7th WAMIT body reference point from diffraction about the global x-axis; +HydroDyn['B7WvsMyi'] = False # (N-m); Total (first-order plus second-order) wave-excitation moment at the 7th WAMIT body reference point from diffraction about the global y-axis; +HydroDyn['B7WvsMzi'] = False # (N-m); Total (first-order plus second-order) wave-excitation moment at the 7th WAMIT body reference point from diffraction about the global z-axis; +HydroDyn['B7HdSFxi'] = False # (N); Hydrostatic force from the 7th WAMIT body along the global x-axis; +HydroDyn['B7HdSFyi'] = False # (N); Hydrostatic force from the 7th WAMIT body along the global y-axis; +HydroDyn['B7HdSFzi'] = False # (N); Hydrostatic force from the 7th WAMIT body along the global z-axis; +HydroDyn['B7HdSMxi'] = False # (N-m); Hydrostatic moment from the 7th WAMIT body about the global x-axis at the 7th WAMT body reference point; +HydroDyn['B7HdSMyi'] = False # (N-m); Hydrostatic moment from the 7th WAMIT body about the global y-axis at the 7th WAMT body reference point; +HydroDyn['B7HdSMzi'] = False # (N-m); Hydrostatic moment from the 7th WAMIT body about the global z-axis at the 7th WAMT body reference point; +HydroDyn['B7RdtFxi'] = False # (N); Wave-radiation force at the 7th WAMIT body along the global x-axis; +HydroDyn['B7RdtFyi'] = False # (N); Wave-radiation force at the 7th WAMIT body along the global y-axis; +HydroDyn['B7RdtFzi'] = False # (N); Wave-radiation force at the 7th WAMIT body along the global z-axis; +HydroDyn['B7RdtMxi'] = False # (N-m); Wave-radiation moment at the 7th WAMIT body about the global x-axis at the 7th WAMIT body's reference point; +HydroDyn['B7RdtMyi'] = False # (N-m); Wave-radiation moment at the 7th WAMIT body about the global y-axis at the 7th WAMIT body's reference point; +HydroDyn['B7RdtMzi'] = False # (N-m); Wave-radiation moment at the 7th WAMIT body about the global z-axis at the 7th WAMIT body's reference point; +HydroDyn['B8AddFxi'] = False # (N); Force along the global x-axis due to additional preload, stiffness, and damping of the 8th WAMIT body ; +HydroDyn['B8AddFyi'] = False # (N); Force along the global y-axis due to additional preload, stiffness, and damping of the 8th WAMIT body ; +HydroDyn['B8AddFzi'] = False # (N); Force along the global z-axis due to additional preload, stiffness, and damping of the 8th WAMIT body ; +HydroDyn['B8AddMxi'] = False # (N-m); Moment about the global x-axis at of the 8th WAMIT body's reference point due to additional preload, stiffness, and damping ; +HydroDyn['B8AddMyi'] = False # (N-m); Moment about the global y-axis at of the 8th WAMIT body's reference point due to additional preload, stiffness, and damping ; +HydroDyn['B8AddMzi'] = False # (N-m); Moment about the global z-axis at of the 8th WAMIT body's reference point due to additional preload, stiffness, and damping ; +HydroDyn['B8WvsF1xi'] = False # (N); First-order wave-excitation force at the 8th WAMIT body from diffraction along the global x-axis; +HydroDyn['B8WvsF1yi'] = False # (N); First-order wave-excitation force at the 8th WAMIT body from diffraction along the global y-axis; +HydroDyn['B8WvsF1zi'] = False # (N); First-order wave-excitation force at the 8th WAMIT body from diffraction along the global z-axis; +HydroDyn['B8WvsM1xi'] = False # (N-m); First-order wave-excitation moment at the 8th WAMIT body reference point from diffraction about the global x-axis; +HydroDyn['B8WvsM1yi'] = False # (N-m); First-order wave-excitation moment at the 8th WAMIT body reference point from diffraction about the global y-axis; +HydroDyn['B8WvsM1zi'] = False # (N-m); First-order wave-excitation moment at the 8th WAMIT body reference point from diffraction about the global z-axis; +HydroDyn['B8WvsFxi'] = False # (N); Total (first-order plus second-order) wave-excitation force at the 8th WAMIT body from diffraction along the global x-axis; +HydroDyn['B8WvsFyi'] = False # (N); Total (first-order plus second-order) wave-excitation force at the 8th WAMIT body from diffraction along the global y-axis; +HydroDyn['B8WvsFzi'] = False # (N); Total (first-order plus second-order) wave-excitation force at the 8th WAMIT body from diffraction along the global z-axis; +HydroDyn['B8WvsMxi'] = False # (N-m); Total (first-order plus second-order) wave-excitation moment at the 8th WAMIT body reference point from diffraction about the global x-axis; +HydroDyn['B8WvsMyi'] = False # (N-m); Total (first-order plus second-order) wave-excitation moment at the 8th WAMIT body reference point from diffraction about the global y-axis; +HydroDyn['B8WvsMzi'] = False # (N-m); Total (first-order plus second-order) wave-excitation moment at the 8th WAMIT body reference point from diffraction about the global z-axis; +HydroDyn['B8HdSFxi'] = False # (N); Hydrostatic force from the 8th WAMIT body along the global x-axis; +HydroDyn['B8HdSFyi'] = False # (N); Hydrostatic force from the 8th WAMIT body along the global y-axis; +HydroDyn['B8HdSFzi'] = False # (N); Hydrostatic force from the 8th WAMIT body along the global z-axis; +HydroDyn['B8HdSMxi'] = False # (N-m); Hydrostatic moment from the 8th WAMIT body about the global x-axis at the 8th WAMT body reference point; +HydroDyn['B8HdSMyi'] = False # (N-m); Hydrostatic moment from the 8th WAMIT body about the global y-axis at the 8th WAMT body reference point; +HydroDyn['B8HdSMzi'] = False # (N-m); Hydrostatic moment from the 8th WAMIT body about the global z-axis at the 8th WAMT body reference point; +HydroDyn['B8RdtFxi'] = False # (N); Wave-radiation force at the 8th WAMIT body along the global x-axis; +HydroDyn['B8RdtFyi'] = False # (N); Wave-radiation force at the 8th WAMIT body along the global y-axis; +HydroDyn['B8RdtFzi'] = False # (N); Wave-radiation force at the 8th WAMIT body along the global z-axis; +HydroDyn['B8RdtMxi'] = False # (N-m); Wave-radiation moment at the 8th WAMIT body about the global x-axis at the 8th WAMIT body's reference point; +HydroDyn['B8RdtMyi'] = False # (N-m); Wave-radiation moment at the 8th WAMIT body about the global y-axis at the 8th WAMIT body's reference point; +HydroDyn['B8RdtMzi'] = False # (N-m); Wave-radiation moment at the 8th WAMIT body about the global z-axis at the 8th WAMIT body's reference point; +HydroDyn['B9AddFxi'] = False # (N); Force along the global x-axis due to additional preload, stiffness, and damping of the 9th WAMIT body ; +HydroDyn['B9AddFyi'] = False # (N); Force along the global y-axis due to additional preload, stiffness, and damping of the 9th WAMIT body ; +HydroDyn['B9AddFzi'] = False # (N); Force along the global z-axis due to additional preload, stiffness, and damping of the 9th WAMIT body ; +HydroDyn['B9AddMxi'] = False # (N-m); Moment about the global x-axis at of the 9th WAMIT body's reference point due to additional preload, stiffness, and damping ; +HydroDyn['B9AddMyi'] = False # (N-m); Moment about the global y-axis at of the 9th WAMIT body's reference point due to additional preload, stiffness, and damping ; +HydroDyn['B9AddMzi'] = False # (N-m); Moment about the global z-axis at of the 9th WAMIT body's reference point due to additional preload, stiffness, and damping ; +HydroDyn['B9WvsF1xi'] = False # (N); First-order wave-excitation force at the 9th WAMIT body from diffraction along the global x-axis; +HydroDyn['B9WvsF1yi'] = False # (N); First-order wave-excitation force at the 9th WAMIT body from diffraction along the global y-axis; +HydroDyn['B9WvsF1zi'] = False # (N); First-order wave-excitation force at the 9th WAMIT body from diffraction along the global z-axis; +HydroDyn['B9WvsM1xi'] = False # (N-m); First-order wave-excitation moment at the 9th WAMIT body reference point from diffraction about the global x-axis; +HydroDyn['B9WvsM1yi'] = False # (N-m); First-order wave-excitation moment at the 9th WAMIT body reference point from diffraction about the global y-axis; +HydroDyn['B9WvsM1zi'] = False # (N-m); First-order wave-excitation moment at the 9th WAMIT body reference point from diffraction about the global z-axis; +HydroDyn['B9WvsFxi'] = False # (N); Total (first-order plus second-order) wave-excitation force at the 9th WAMIT body from diffraction along the global x-axis; +HydroDyn['B9WvsFyi'] = False # (N); Total (first-order plus second-order) wave-excitation force at the 9th WAMIT body from diffraction along the global y-axis; +HydroDyn['B9WvsFzi'] = False # (N); Total (first-order plus second-order) wave-excitation force at the 9th WAMIT body from diffraction along the global z-axis; +HydroDyn['B9WvsMxi'] = False # (N-m); Total (first-order plus second-order) wave-excitation moment at the 9th WAMIT body reference point from diffraction about the global x-axis; +HydroDyn['B9WvsMyi'] = False # (N-m); Total (first-order plus second-order) wave-excitation moment at the 9th WAMIT body reference point from diffraction about the global y-axis; +HydroDyn['B9WvsMzi'] = False # (N-m); Total (first-order plus second-order) wave-excitation moment at the 9th WAMIT body reference point from diffraction about the global z-axis; +HydroDyn['B9HdSFxi'] = False # (N); Hydrostatic force from the 9th WAMIT body along the global x-axis; +HydroDyn['B9HdSFyi'] = False # (N); Hydrostatic force from the 9th WAMIT body along the global y-axis; +HydroDyn['B9HdSFzi'] = False # (N); Hydrostatic force from the 9th WAMIT body along the global z-axis; +HydroDyn['B9HdSMxi'] = False # (N-m); Hydrostatic moment from the 9th WAMIT body about the global x-axis at the 9th WAMT body reference point; +HydroDyn['B9HdSMyi'] = False # (N-m); Hydrostatic moment from the 9th WAMIT body about the global y-axis at the 9th WAMT body reference point; +HydroDyn['B9HdSMzi'] = False # (N-m); Hydrostatic moment from the 9th WAMIT body about the global z-axis at the 9th WAMT body reference point; +HydroDyn['B9RdtFxi'] = False # (N); Wave-radiation force at the 9th WAMIT body along the global x-axis; +HydroDyn['B9RdtFyi'] = False # (N); Wave-radiation force at the 9th WAMIT body along the global y-axis; +HydroDyn['B9RdtFzi'] = False # (N); Wave-radiation force at the 9th WAMIT body along the global z-axis; +HydroDyn['B9RdtMxi'] = False # (N-m); Wave-radiation moment at the 9th WAMIT body about the global x-axis at the 9th WAMIT body's reference point; +HydroDyn['B9RdtMyi'] = False # (N-m); Wave-radiation moment at the 9th WAMIT body about the global y-axis at the 9th WAMIT body's reference point; +HydroDyn['B9RdtMzi'] = False # (N-m); Wave-radiation moment at the 9th WAMIT body about the global z-axis at the 9th WAMIT body's reference point; +HydroDyn['B1WvsF2xi'] = False # (N); Second-order wave-excitation force at the 1st WAMIT body from diffraction along the global x-axis; +HydroDyn['B1WvsF2yi'] = False # (N); Second-order wave-excitation force at the 1st WAMIT body from diffraction along the global y-axis; +HydroDyn['B1WvsF2zi'] = False # (N); Second-order wave-excitation force at the 1st WAMIT body from diffraction along the global z-axis; +HydroDyn['B1WvsM2xi'] = False # (N-m); Second-order wave-excitation moment at the 1st WAMIT body reference point from diffraction about the global x-axis; +HydroDyn['B1WvsM2yi'] = False # (N-m); Second-order wave-excitation moment at the 1st WAMIT body reference point from diffraction about the global y-axis; +HydroDyn['B1WvsM2zi'] = False # (N-m); Second-order wave-excitation moment at the 1st WAMIT body reference point from diffraction about the global z-axis; +HydroDyn['B2WvsF2xi'] = False # (N); Second-order wave-excitation force at the 2nd WAMIT body from diffraction along the global x-axis; +HydroDyn['B2WvsF2yi'] = False # (N); Second-order wave-excitation force at the 2nd WAMIT body from diffraction along the global y-axis; +HydroDyn['B2WvsF2zi'] = False # (N); Second-order wave-excitation force at the 2nd WAMIT body from diffraction along the global z-axis; +HydroDyn['B2WvsM2xi'] = False # (N-m); Second-order wave-excitation moment at the 2nd WAMIT body reference point from diffraction about the global x-axis; +HydroDyn['B2WvsM2yi'] = False # (N-m); Second-order wave-excitation moment at the 2nd WAMIT body reference point from diffraction about the global y-axis; +HydroDyn['B2WvsM2zi'] = False # (N-m); Second-order wave-excitation moment at the 2nd WAMIT body reference point from diffraction about the global z-axis; +HydroDyn['B3WvsF2xi'] = False # (N); Second-order wave-excitation force at the 3rd WAMIT body from diffraction along the global x-axis; +HydroDyn['B3WvsF2yi'] = False # (N); Second-order wave-excitation force at the 3rd WAMIT body from diffraction along the global y-axis; +HydroDyn['B3WvsF2zi'] = False # (N); Second-order wave-excitation force at the 3rd WAMIT body from diffraction along the global z-axis; +HydroDyn['B3WvsM2xi'] = False # (N-m); Second-order wave-excitation moment at the 3rd WAMIT body reference point from diffraction about the global x-axis; +HydroDyn['B3WvsM2yi'] = False # (N-m); Second-order wave-excitation moment at the 3rd WAMIT body reference point from diffraction about the global y-axis; +HydroDyn['B3WvsM2zi'] = False # (N-m); Second-order wave-excitation moment at the 3rd WAMIT body reference point from diffraction about the global z-axis; +HydroDyn['B4WvsF2xi'] = False # (N); Second-order wave-excitation force at the 4th WAMIT body from diffraction along the global x-axis; +HydroDyn['B4WvsF2yi'] = False # (N); Second-order wave-excitation force at the 4th WAMIT body from diffraction along the global y-axis; +HydroDyn['B4WvsF2zi'] = False # (N); Second-order wave-excitation force at the 4th WAMIT body from diffraction along the global z-axis; +HydroDyn['B4WvsM2xi'] = False # (N-m); Second-order wave-excitation moment at the 4th WAMIT body reference point from diffraction about the global x-axis; +HydroDyn['B4WvsM2yi'] = False # (N-m); Second-order wave-excitation moment at the 4th WAMIT body reference point from diffraction about the global y-axis; +HydroDyn['B4WvsM2zi'] = False # (N-m); Second-order wave-excitation moment at the 4th WAMIT body reference point from diffraction about the global z-axis; +HydroDyn['B5WvsF2xi'] = False # (N); Second-order wave-excitation force at the 5th WAMIT body from diffraction along the global x-axis; +HydroDyn['B5WvsF2yi'] = False # (N); Second-order wave-excitation force at the 5th WAMIT body from diffraction along the global y-axis; +HydroDyn['B5WvsF2zi'] = False # (N); Second-order wave-excitation force at the 5th WAMIT body from diffraction along the global z-axis; +HydroDyn['B5WvsM2xi'] = False # (N-m); Second-order wave-excitation moment at the 5th WAMIT body reference point from diffraction about the global x-axis; +HydroDyn['B5WvsM2yi'] = False # (N-m); Second-order wave-excitation moment at the 5th WAMIT body reference point from diffraction about the global y-axis; +HydroDyn['B5WvsM2zi'] = False # (N-m); Second-order wave-excitation moment at the 5th WAMIT body reference point from diffraction about the global z-axis; +HydroDyn['B6WvsF2xi'] = False # (N); Second-order wave-excitation force at the 6th WAMIT body from diffraction along the global x-axis; +HydroDyn['B6WvsF2yi'] = False # (N); Second-order wave-excitation force at the 6th WAMIT body from diffraction along the global y-axis; +HydroDyn['B6WvsF2zi'] = False # (N); Second-order wave-excitation force at the 6th WAMIT body from diffraction along the global z-axis; +HydroDyn['B6WvsM2xi'] = False # (N-m); Second-order wave-excitation moment at the 6th WAMIT body reference point from diffraction about the global x-axis; +HydroDyn['B6WvsM2yi'] = False # (N-m); Second-order wave-excitation moment at the 6th WAMIT body reference point from diffraction about the global y-axis; +HydroDyn['B6WvsM2zi'] = False # (N-m); Second-order wave-excitation moment at the 6th WAMIT body reference point from diffraction about the global z-axis; +HydroDyn['B7WvsF2xi'] = False # (N); Second-order wave-excitation force at the 7th WAMIT body from diffraction along the global x-axis; +HydroDyn['B7WvsF2yi'] = False # (N); Second-order wave-excitation force at the 7th WAMIT body from diffraction along the global y-axis; +HydroDyn['B7WvsF2zi'] = False # (N); Second-order wave-excitation force at the 7th WAMIT body from diffraction along the global z-axis; +HydroDyn['B7WvsM2xi'] = False # (N-m); Second-order wave-excitation moment at the 7th WAMIT body reference point from diffraction about the global x-axis; +HydroDyn['B7WvsM2yi'] = False # (N-m); Second-order wave-excitation moment at the 7th WAMIT body reference point from diffraction about the global y-axis; +HydroDyn['B7WvsM2zi'] = False # (N-m); Second-order wave-excitation moment at the 7th WAMIT body reference point from diffraction about the global z-axis; +HydroDyn['B8WvsF2xi'] = False # (N); Second-order wave-excitation force at the 8th WAMIT body from diffraction along the global x-axis; +HydroDyn['B8WvsF2yi'] = False # (N); Second-order wave-excitation force at the 8th WAMIT body from diffraction along the global y-axis; +HydroDyn['B8WvsF2zi'] = False # (N); Second-order wave-excitation force at the 8th WAMIT body from diffraction along the global z-axis; +HydroDyn['B8WvsM2xi'] = False # (N-m); Second-order wave-excitation moment at the 8th WAMIT body reference point from diffraction about the global x-axis; +HydroDyn['B8WvsM2yi'] = False # (N-m); Second-order wave-excitation moment at the 8th WAMIT body reference point from diffraction about the global y-axis; +HydroDyn['B8WvsM2zi'] = False # (N-m); Second-order wave-excitation moment at the 8th WAMIT body reference point from diffraction about the global z-axis; +HydroDyn['B9WvsF2xi'] = False # (N); Second-order wave-excitation force at the 9th WAMIT body from diffraction along the global x-axis; +HydroDyn['B9WvsF2yi'] = False # (N); Second-order wave-excitation force at the 9th WAMIT body from diffraction along the global y-axis; +HydroDyn['B9WvsF2zi'] = False # (N); Second-order wave-excitation force at the 9th WAMIT body from diffraction along the global z-axis; +HydroDyn['B9WvsM2xi'] = False # (N-m); Second-order wave-excitation moment at the 9th WAMIT body reference point from diffraction about the global x-axis; +HydroDyn['B9WvsM2yi'] = False # (N-m); Second-order wave-excitation moment at the 9th WAMIT body reference point from diffraction about the global y-axis; +HydroDyn['B9WvsM2zi'] = False # (N-m); Second-order wave-excitation moment at the 9th WAMIT body reference point from diffraction about the global z-axis; + +# Wave Elevations +HydroDyn['Wave1Elev'] = False # (m); Total (first-order plus second-order) wave elevation (global Z height) at the 1st user-requested location (location is specified in the global coordinate system); +HydroDyn['Wave2Elev'] = False # (m); Total (first-order plus second-order) wave elevation (global Z height) at the 2nd user-requested location (location is specified in the global coordinate system); +HydroDyn['Wave3Elev'] = False # (m); Total (first-order plus second-order) wave elevation (global Z height) at the 3rd user-requested location (location is specified in the global coordinate system); +HydroDyn['Wave4Elev'] = False # (m); Total (first-order plus second-order) wave elevation (global Z height) at the 4th user-requested location (location is specified in the global coordinate system); +HydroDyn['Wave5Elev'] = False # (m); Total (first-order plus second-order) wave elevation (global Z height) at the 5th user-requested location (location is specified in the global coordinate system); +HydroDyn['Wave6Elev'] = False # (m); Total (first-order plus second-order) wave elevation (global Z height) at the 6th user-requested location (location is specified in the global coordinate system); +HydroDyn['Wave7Elev'] = False # (m); Total (first-order plus second-order) wave elevation (global Z height) at the 7th user-requested location (location is specified in the global coordinate system); +HydroDyn['Wave8Elev'] = False # (m); Total (first-order plus second-order) wave elevation (global Z height) at the 8th user-requested location (location is specified in the global coordinate system); +HydroDyn['Wave9Elev'] = False # (m); Total (first-order plus second-order) wave elevation (global Z height) at the 9th user-requested location (location is specified in the global coordinate system); +HydroDyn['Wave1Elv1'] = False # (m); First-order wave elevation (global Z height) at the 1st user-requested location (location is specified in the global coordinate system); +HydroDyn['Wave2Elv1'] = False # (m); First-order wave elevation (global Z height) at the 2nd user-requested location (location is specified in the global coordinate system); +HydroDyn['Wave3Elv1'] = False # (m); First-order wave elevation (global Z height) at the 3rd user-requested location (location is specified in the global coordinate system); +HydroDyn['Wave4Elv1'] = False # (m); First-order wave elevation (global Z height) at the 4th user-requested location (location is specified in the global coordinate system); +HydroDyn['Wave5Elv1'] = False # (m); First-order wave elevation (global Z height) at the 5th user-requested location (location is specified in the global coordinate system); +HydroDyn['Wave6Elv1'] = False # (m); First-order wave elevation (global Z height) at the 6th user-requested location (location is specified in the global coordinate system); +HydroDyn['Wave7Elv1'] = False # (m); First-order wave elevation (global Z height) at the 7th user-requested location (location is specified in the global coordinate system); +HydroDyn['Wave8Elv1'] = False # (m); First-order wave elevation (global Z height) at the 8th user-requested location (location is specified in the global coordinate system); +HydroDyn['Wave9Elv1'] = False # (m); First-order wave elevation (global Z height) at the 9th user-requested location (location is specified in the global coordinate system); +HydroDyn['Wave1Elv2'] = False # (m); Second-order wave elevation (global Z height) at the 1st user-requested location (location is specified in the global coordinate system); +HydroDyn['Wave2Elv2'] = False # (m); Second-order wave elevation (global Z height) at the 2nd user-requested location (location is specified in the global coordinate system); +HydroDyn['Wave3Elv2'] = False # (m); Second-order wave elevation (global Z height) at the 3rd user-requested location (location is specified in the global coordinate system); +HydroDyn['Wave4Elv2'] = False # (m); Second-order wave elevation (global Z height) at the 4th user-requested location (location is specified in the global coordinate system); +HydroDyn['Wave5Elv2'] = False # (m); Second-order wave elevation (global Z height) at the 5th user-requested location (location is specified in the global coordinate system); +HydroDyn['Wave6Elv2'] = False # (m); Second-order wave elevation (global Z height) at the 6th user-requested location (location is specified in the global coordinate system); +HydroDyn['Wave7Elv2'] = False # (m); Second-order wave elevation (global Z height) at the 7th user-requested location (location is specified in the global coordinate system); +HydroDyn['Wave8Elv2'] = False # (m); Second-order wave elevation (global Z height) at the 8th user-requested location (location is specified in the global coordinate system); +HydroDyn['Wave9Elv2'] = False # (m); Second-order wave elevation (global Z height) at the 9th user-requested location (location is specified in the global coordinate system); + + +""" Morison """ +Morison = {} + +# Member-level Wave Kinematics +Morison['M1N1Axi'] = False # (m/s^2); fluid acceleration; +Morison['M1N2Axi'] = False # (m/s^2); ; +Morison['M1N3Axi'] = False # (m/s^2); ; +Morison['M1N4Axi'] = False # (m/s^2); ; +Morison['M1N5Axi'] = False # (m/s^2); ; +Morison['M1N6Axi'] = False # (m/s^2); ; +Morison['M1N7Axi'] = False # (m/s^2); ; +Morison['M1N8Axi'] = False # (m/s^2); ; +Morison['M1N9Axi'] = False # (m/s^2); ; +Morison['M2N1Axi'] = False # (m/s^2); ; +Morison['M2N2Axi'] = False # (m/s^2); ; +Morison['M2N3Axi'] = False # (m/s^2); ; +Morison['M2N4Axi'] = False # (m/s^2); ; +Morison['M2N5Axi'] = False # (m/s^2); ; +Morison['M2N6Axi'] = False # (m/s^2); ; +Morison['M2N7Axi'] = False # (m/s^2); ; +Morison['M2N8Axi'] = False # (m/s^2); ; +Morison['M2N9Axi'] = False # (m/s^2); ; +Morison['M3N1Axi'] = False # (m/s^2); ; +Morison['M3N2Axi'] = False # (m/s^2); ; +Morison['M3N3Axi'] = False # (m/s^2); ; +Morison['M3N4Axi'] = False # (m/s^2); ; +Morison['M3N5Axi'] = False # (m/s^2); ; +Morison['M3N6Axi'] = False # (m/s^2); ; +Morison['M3N7Axi'] = False # (m/s^2); ; +Morison['M3N8Axi'] = False # (m/s^2); ; +Morison['M3N9Axi'] = False # (m/s^2); ; +Morison['M4N1Axi'] = False # (m/s^2); ; +Morison['M4N2Axi'] = False # (m/s^2); ; +Morison['M4N3Axi'] = False # (m/s^2); ; +Morison['M4N4Axi'] = False # (m/s^2); ; +Morison['M4N5Axi'] = False # (m/s^2); ; +Morison['M4N6Axi'] = False # (m/s^2); ; +Morison['M4N7Axi'] = False # (m/s^2); ; +Morison['M4N8Axi'] = False # (m/s^2); ; +Morison['M4N9Axi'] = False # (m/s^2); ; +Morison['M5N1Axi'] = False # (m/s^2); ; +Morison['M5N2Axi'] = False # (m/s^2); ; +Morison['M5N3Axi'] = False # (m/s^2); ; +Morison['M5N4Axi'] = False # (m/s^2); ; +Morison['M5N5Axi'] = False # (m/s^2); ; +Morison['M5N6Axi'] = False # (m/s^2); ; +Morison['M5N7Axi'] = False # (m/s^2); ; +Morison['M5N8Axi'] = False # (m/s^2); ; +Morison['M5N9Axi'] = False # (m/s^2); ; +Morison['M6N1Axi'] = False # (m/s^2); ; +Morison['M6N2Axi'] = False # (m/s^2); ; +Morison['M6N3Axi'] = False # (m/s^2); ; +Morison['M6N4Axi'] = False # (m/s^2); ; +Morison['M6N5Axi'] = False # (m/s^2); ; +Morison['M6N6Axi'] = False # (m/s^2); ; +Morison['M6N7Axi'] = False # (m/s^2); ; +Morison['M6N8Axi'] = False # (m/s^2); ; +Morison['M6N9Axi'] = False # (m/s^2); ; +Morison['M7N1Axi'] = False # (m/s^2); ; +Morison['M7N2Axi'] = False # (m/s^2); ; +Morison['M7N3Axi'] = False # (m/s^2); ; +Morison['M7N4Axi'] = False # (m/s^2); ; +Morison['M7N5Axi'] = False # (m/s^2); ; +Morison['M7N6Axi'] = False # (m/s^2); ; +Morison['M7N7Axi'] = False # (m/s^2); ; +Morison['M7N8Axi'] = False # (m/s^2); ; +Morison['M7N9Axi'] = False # (m/s^2); ; +Morison['M8N1Axi'] = False # (m/s^2); ; +Morison['M8N2Axi'] = False # (m/s^2); ; +Morison['M8N3Axi'] = False # (m/s^2); ; +Morison['M8N4Axi'] = False # (m/s^2); ; +Morison['M8N5Axi'] = False # (m/s^2); ; +Morison['M8N6Axi'] = False # (m/s^2); ; +Morison['M8N7Axi'] = False # (m/s^2); ; +Morison['M8N8Axi'] = False # (m/s^2); ; +Morison['M8N9Axi'] = False # (m/s^2); ; +Morison['M9N1Axi'] = False # (m/s^2); ; +Morison['M9N2Axi'] = False # (m/s^2); ; +Morison['M9N3Axi'] = False # (m/s^2); ; +Morison['M9N4Axi'] = False # (m/s^2); ; +Morison['M9N5Axi'] = False # (m/s^2); ; +Morison['M9N6Axi'] = False # (m/s^2); ; +Morison['M9N7Axi'] = False # (m/s^2); ; +Morison['M9N8Axi'] = False # (m/s^2); ; +Morison['M9N9Axi'] = False # (m/s^2); ; +Morison['M1N1Ayi'] = False # (m/s^2); ; +Morison['M1N2Ayi'] = False # (m/s^2); ; +Morison['M1N3Ayi'] = False # (m/s^2); ; +Morison['M1N4Ayi'] = False # (m/s^2); ; +Morison['M1N5Ayi'] = False # (m/s^2); ; +Morison['M1N6Ayi'] = False # (m/s^2); ; +Morison['M1N7Ayi'] = False # (m/s^2); ; +Morison['M1N8Ayi'] = False # (m/s^2); ; +Morison['M1N9Ayi'] = False # (m/s^2); ; +Morison['M2N1Ayi'] = False # (m/s^2); ; +Morison['M2N2Ayi'] = False # (m/s^2); ; +Morison['M2N3Ayi'] = False # (m/s^2); ; +Morison['M2N4Ayi'] = False # (m/s^2); ; +Morison['M2N5Ayi'] = False # (m/s^2); ; +Morison['M2N6Ayi'] = False # (m/s^2); ; +Morison['M2N7Ayi'] = False # (m/s^2); ; +Morison['M2N8Ayi'] = False # (m/s^2); ; +Morison['M2N9Ayi'] = False # (m/s^2); ; +Morison['M3N1Ayi'] = False # (m/s^2); ; +Morison['M3N2Ayi'] = False # (m/s^2); ; +Morison['M3N3Ayi'] = False # (m/s^2); ; +Morison['M3N4Ayi'] = False # (m/s^2); ; +Morison['M3N5Ayi'] = False # (m/s^2); ; +Morison['M3N6Ayi'] = False # (m/s^2); ; +Morison['M3N7Ayi'] = False # (m/s^2); ; +Morison['M3N8Ayi'] = False # (m/s^2); ; +Morison['M3N9Ayi'] = False # (m/s^2); ; +Morison['M4N1Ayi'] = False # (m/s^2); ; +Morison['M4N2Ayi'] = False # (m/s^2); ; +Morison['M4N3Ayi'] = False # (m/s^2); ; +Morison['M4N4Ayi'] = False # (m/s^2); ; +Morison['M4N5Ayi'] = False # (m/s^2); ; +Morison['M4N6Ayi'] = False # (m/s^2); ; +Morison['M4N7Ayi'] = False # (m/s^2); ; +Morison['M4N8Ayi'] = False # (m/s^2); ; +Morison['M4N9Ayi'] = False # (m/s^2); ; +Morison['M5N1Ayi'] = False # (m/s^2); ; +Morison['M5N2Ayi'] = False # (m/s^2); ; +Morison['M5N3Ayi'] = False # (m/s^2); ; +Morison['M5N4Ayi'] = False # (m/s^2); ; +Morison['M5N5Ayi'] = False # (m/s^2); ; +Morison['M5N6Ayi'] = False # (m/s^2); ; +Morison['M5N7Ayi'] = False # (m/s^2); ; +Morison['M5N8Ayi'] = False # (m/s^2); ; +Morison['M5N9Ayi'] = False # (m/s^2); ; +Morison['M6N1Ayi'] = False # (m/s^2); ; +Morison['M6N2Ayi'] = False # (m/s^2); ; +Morison['M6N3Ayi'] = False # (m/s^2); ; +Morison['M6N4Ayi'] = False # (m/s^2); ; +Morison['M6N5Ayi'] = False # (m/s^2); ; +Morison['M6N6Ayi'] = False # (m/s^2); ; +Morison['M6N7Ayi'] = False # (m/s^2); ; +Morison['M6N8Ayi'] = False # (m/s^2); ; +Morison['M6N9Ayi'] = False # (m/s^2); ; +Morison['M7N1Ayi'] = False # (m/s^2); ; +Morison['M7N2Ayi'] = False # (m/s^2); ; +Morison['M7N3Ayi'] = False # (m/s^2); ; +Morison['M7N4Ayi'] = False # (m/s^2); ; +Morison['M7N5Ayi'] = False # (m/s^2); ; +Morison['M7N6Ayi'] = False # (m/s^2); ; +Morison['M7N7Ayi'] = False # (m/s^2); ; +Morison['M7N8Ayi'] = False # (m/s^2); ; +Morison['M7N9Ayi'] = False # (m/s^2); ; +Morison['M8N1Ayi'] = False # (m/s^2); ; +Morison['M8N2Ayi'] = False # (m/s^2); ; +Morison['M8N3Ayi'] = False # (m/s^2); ; +Morison['M8N4Ayi'] = False # (m/s^2); ; +Morison['M8N5Ayi'] = False # (m/s^2); ; +Morison['M8N6Ayi'] = False # (m/s^2); ; +Morison['M8N7Ayi'] = False # (m/s^2); ; +Morison['M8N8Ayi'] = False # (m/s^2); ; +Morison['M8N9Ayi'] = False # (m/s^2); ; +Morison['M9N1Ayi'] = False # (m/s^2); ; +Morison['M9N2Ayi'] = False # (m/s^2); ; +Morison['M9N3Ayi'] = False # (m/s^2); ; +Morison['M9N4Ayi'] = False # (m/s^2); ; +Morison['M9N5Ayi'] = False # (m/s^2); ; +Morison['M9N6Ayi'] = False # (m/s^2); ; +Morison['M9N7Ayi'] = False # (m/s^2); ; +Morison['M9N8Ayi'] = False # (m/s^2); ; +Morison['M9N9Ayi'] = False # (m/s^2); ; +Morison['M1N1Azi'] = False # (m/s^2); ; +Morison['M1N2Azi'] = False # (m/s^2); ; +Morison['M1N3Azi'] = False # (m/s^2); ; +Morison['M1N4Azi'] = False # (m/s^2); ; +Morison['M1N5Azi'] = False # (m/s^2); ; +Morison['M1N6Azi'] = False # (m/s^2); ; +Morison['M1N7Azi'] = False # (m/s^2); ; +Morison['M1N8Azi'] = False # (m/s^2); ; +Morison['M1N9Azi'] = False # (m/s^2); ; +Morison['M2N1Azi'] = False # (m/s^2); ; +Morison['M2N2Azi'] = False # (m/s^2); ; +Morison['M2N3Azi'] = False # (m/s^2); ; +Morison['M2N4Azi'] = False # (m/s^2); ; +Morison['M2N5Azi'] = False # (m/s^2); ; +Morison['M2N6Azi'] = False # (m/s^2); ; +Morison['M2N7Azi'] = False # (m/s^2); ; +Morison['M2N8Azi'] = False # (m/s^2); ; +Morison['M2N9Azi'] = False # (m/s^2); ; +Morison['M3N1Azi'] = False # (m/s^2); ; +Morison['M3N2Azi'] = False # (m/s^2); ; +Morison['M3N3Azi'] = False # (m/s^2); ; +Morison['M3N4Azi'] = False # (m/s^2); ; +Morison['M3N5Azi'] = False # (m/s^2); ; +Morison['M3N6Azi'] = False # (m/s^2); ; +Morison['M3N7Azi'] = False # (m/s^2); ; +Morison['M3N8Azi'] = False # (m/s^2); ; +Morison['M3N9Azi'] = False # (m/s^2); ; +Morison['M4N1Azi'] = False # (m/s^2); ; +Morison['M4N2Azi'] = False # (m/s^2); ; +Morison['M4N3Azi'] = False # (m/s^2); ; +Morison['M4N4Azi'] = False # (m/s^2); ; +Morison['M4N5Azi'] = False # (m/s^2); ; +Morison['M4N6Azi'] = False # (m/s^2); ; +Morison['M4N7Azi'] = False # (m/s^2); ; +Morison['M4N8Azi'] = False # (m/s^2); ; +Morison['M4N9Azi'] = False # (m/s^2); ; +Morison['M5N1Azi'] = False # (m/s^2); ; +Morison['M5N2Azi'] = False # (m/s^2); ; +Morison['M5N3Azi'] = False # (m/s^2); ; +Morison['M5N4Azi'] = False # (m/s^2); ; +Morison['M5N5Azi'] = False # (m/s^2); ; +Morison['M5N6Azi'] = False # (m/s^2); ; +Morison['M5N7Azi'] = False # (m/s^2); ; +Morison['M5N8Azi'] = False # (m/s^2); ; +Morison['M5N9Azi'] = False # (m/s^2); ; +Morison['M6N1Azi'] = False # (m/s^2); ; +Morison['M6N2Azi'] = False # (m/s^2); ; +Morison['M6N3Azi'] = False # (m/s^2); ; +Morison['M6N4Azi'] = False # (m/s^2); ; +Morison['M6N5Azi'] = False # (m/s^2); ; +Morison['M6N6Azi'] = False # (m/s^2); ; +Morison['M6N7Azi'] = False # (m/s^2); ; +Morison['M6N8Azi'] = False # (m/s^2); ; +Morison['M6N9Azi'] = False # (m/s^2); ; +Morison['M7N1Azi'] = False # (m/s^2); ; +Morison['M7N2Azi'] = False # (m/s^2); ; +Morison['M7N3Azi'] = False # (m/s^2); ; +Morison['M7N4Azi'] = False # (m/s^2); ; +Morison['M7N5Azi'] = False # (m/s^2); ; +Morison['M7N6Azi'] = False # (m/s^2); ; +Morison['M7N7Azi'] = False # (m/s^2); ; +Morison['M7N8Azi'] = False # (m/s^2); ; +Morison['M7N9Azi'] = False # (m/s^2); ; +Morison['M8N1Azi'] = False # (m/s^2); ; +Morison['M8N2Azi'] = False # (m/s^2); ; +Morison['M8N3Azi'] = False # (m/s^2); ; +Morison['M8N4Azi'] = False # (m/s^2); ; +Morison['M8N5Azi'] = False # (m/s^2); ; +Morison['M8N6Azi'] = False # (m/s^2); ; +Morison['M8N7Azi'] = False # (m/s^2); ; +Morison['M8N8Azi'] = False # (m/s^2); ; +Morison['M8N9Azi'] = False # (m/s^2); ; +Morison['M9N1Azi'] = False # (m/s^2); ; +Morison['M9N2Azi'] = False # (m/s^2); ; +Morison['M9N3Azi'] = False # (m/s^2); ; +Morison['M9N4Azi'] = False # (m/s^2); ; +Morison['M9N5Azi'] = False # (m/s^2); ; +Morison['M9N6Azi'] = False # (m/s^2); ; +Morison['M9N7Azi'] = False # (m/s^2); ; +Morison['M9N8Azi'] = False # (m/s^2); ; +Morison['M9N9Azi'] = False # (m/s^2); ; +Morison['M1N1Vxi'] = False # (m/s); fluid velocity; +Morison['M1N2Vxi'] = False # (m/s); ; +Morison['M1N3Vxi'] = False # (m/s); ; +Morison['M1N4Vxi'] = False # (m/s); ; +Morison['M1N5Vxi'] = False # (m/s); ; +Morison['M1N6Vxi'] = False # (m/s); ; +Morison['M1N7Vxi'] = False # (m/s); ; +Morison['M1N8Vxi'] = False # (m/s); ; +Morison['M1N9Vxi'] = False # (m/s); ; +Morison['M2N1Vxi'] = False # (m/s); ; +Morison['M2N2Vxi'] = False # (m/s); ; +Morison['M2N3Vxi'] = False # (m/s); ; +Morison['M2N4Vxi'] = False # (m/s); ; +Morison['M2N5Vxi'] = False # (m/s); ; +Morison['M2N6Vxi'] = False # (m/s); ; +Morison['M2N7Vxi'] = False # (m/s); ; +Morison['M2N8Vxi'] = False # (m/s); ; +Morison['M2N9Vxi'] = False # (m/s); ; +Morison['M3N1Vxi'] = False # (m/s); ; +Morison['M3N2Vxi'] = False # (m/s); ; +Morison['M3N3Vxi'] = False # (m/s); ; +Morison['M3N4Vxi'] = False # (m/s); ; +Morison['M3N5Vxi'] = False # (m/s); ; +Morison['M3N6Vxi'] = False # (m/s); ; +Morison['M3N7Vxi'] = False # (m/s); ; +Morison['M3N8Vxi'] = False # (m/s); ; +Morison['M3N9Vxi'] = False # (m/s); ; +Morison['M4N1Vxi'] = False # (m/s); ; +Morison['M4N2Vxi'] = False # (m/s); ; +Morison['M4N3Vxi'] = False # (m/s); ; +Morison['M4N4Vxi'] = False # (m/s); ; +Morison['M4N5Vxi'] = False # (m/s); ; +Morison['M4N6Vxi'] = False # (m/s); ; +Morison['M4N7Vxi'] = False # (m/s); ; +Morison['M4N8Vxi'] = False # (m/s); ; +Morison['M4N9Vxi'] = False # (m/s); ; +Morison['M5N1Vxi'] = False # (m/s); ; +Morison['M5N2Vxi'] = False # (m/s); ; +Morison['M5N3Vxi'] = False # (m/s); ; +Morison['M5N4Vxi'] = False # (m/s); ; +Morison['M5N5Vxi'] = False # (m/s); ; +Morison['M5N6Vxi'] = False # (m/s); ; +Morison['M5N7Vxi'] = False # (m/s); ; +Morison['M5N8Vxi'] = False # (m/s); ; +Morison['M5N9Vxi'] = False # (m/s); ; +Morison['M6N1Vxi'] = False # (m/s); ; +Morison['M6N2Vxi'] = False # (m/s); ; +Morison['M6N3Vxi'] = False # (m/s); ; +Morison['M6N4Vxi'] = False # (m/s); ; +Morison['M6N5Vxi'] = False # (m/s); ; +Morison['M6N6Vxi'] = False # (m/s); ; +Morison['M6N7Vxi'] = False # (m/s); ; +Morison['M6N8Vxi'] = False # (m/s); ; +Morison['M6N9Vxi'] = False # (m/s); ; +Morison['M7N1Vxi'] = False # (m/s); ; +Morison['M7N2Vxi'] = False # (m/s); ; +Morison['M7N3Vxi'] = False # (m/s); ; +Morison['M7N4Vxi'] = False # (m/s); ; +Morison['M7N5Vxi'] = False # (m/s); ; +Morison['M7N6Vxi'] = False # (m/s); ; +Morison['M7N7Vxi'] = False # (m/s); ; +Morison['M7N8Vxi'] = False # (m/s); ; +Morison['M7N9Vxi'] = False # (m/s); ; +Morison['M8N1Vxi'] = False # (m/s); ; +Morison['M8N2Vxi'] = False # (m/s); ; +Morison['M8N3Vxi'] = False # (m/s); ; +Morison['M8N4Vxi'] = False # (m/s); ; +Morison['M8N5Vxi'] = False # (m/s); ; +Morison['M8N6Vxi'] = False # (m/s); ; +Morison['M8N7Vxi'] = False # (m/s); ; +Morison['M8N8Vxi'] = False # (m/s); ; +Morison['M8N9Vxi'] = False # (m/s); ; +Morison['M9N1Vxi'] = False # (m/s); ; +Morison['M9N2Vxi'] = False # (m/s); ; +Morison['M9N3Vxi'] = False # (m/s); ; +Morison['M9N4Vxi'] = False # (m/s); ; +Morison['M9N5Vxi'] = False # (m/s); ; +Morison['M9N6Vxi'] = False # (m/s); ; +Morison['M9N7Vxi'] = False # (m/s); ; +Morison['M9N8Vxi'] = False # (m/s); ; +Morison['M9N9Vxi'] = False # (m/s); ; +Morison['M1N1Vyi'] = False # (m/s); ; +Morison['M1N2Vyi'] = False # (m/s); ; +Morison['M1N3Vyi'] = False # (m/s); ; +Morison['M1N4Vyi'] = False # (m/s); ; +Morison['M1N5Vyi'] = False # (m/s); ; +Morison['M1N6Vyi'] = False # (m/s); ; +Morison['M1N7Vyi'] = False # (m/s); ; +Morison['M1N8Vyi'] = False # (m/s); ; +Morison['M1N9Vyi'] = False # (m/s); ; +Morison['M2N1Vyi'] = False # (m/s); ; +Morison['M2N2Vyi'] = False # (m/s); ; +Morison['M2N3Vyi'] = False # (m/s); ; +Morison['M2N4Vyi'] = False # (m/s); ; +Morison['M2N5Vyi'] = False # (m/s); ; +Morison['M2N6Vyi'] = False # (m/s); ; +Morison['M2N7Vyi'] = False # (m/s); ; +Morison['M2N8Vyi'] = False # (m/s); ; +Morison['M2N9Vyi'] = False # (m/s); ; +Morison['M3N1Vyi'] = False # (m/s); ; +Morison['M3N2Vyi'] = False # (m/s); ; +Morison['M3N3Vyi'] = False # (m/s); ; +Morison['M3N4Vyi'] = False # (m/s); ; +Morison['M3N5Vyi'] = False # (m/s); ; +Morison['M3N6Vyi'] = False # (m/s); ; +Morison['M3N7Vyi'] = False # (m/s); ; +Morison['M3N8Vyi'] = False # (m/s); ; +Morison['M3N9Vyi'] = False # (m/s); ; +Morison['M4N1Vyi'] = False # (m/s); ; +Morison['M4N2Vyi'] = False # (m/s); ; +Morison['M4N3Vyi'] = False # (m/s); ; +Morison['M4N4Vyi'] = False # (m/s); ; +Morison['M4N5Vyi'] = False # (m/s); ; +Morison['M4N6Vyi'] = False # (m/s); ; +Morison['M4N7Vyi'] = False # (m/s); ; +Morison['M4N8Vyi'] = False # (m/s); ; +Morison['M4N9Vyi'] = False # (m/s); ; +Morison['M5N1Vyi'] = False # (m/s); ; +Morison['M5N2Vyi'] = False # (m/s); ; +Morison['M5N3Vyi'] = False # (m/s); ; +Morison['M5N4Vyi'] = False # (m/s); ; +Morison['M5N5Vyi'] = False # (m/s); ; +Morison['M5N6Vyi'] = False # (m/s); ; +Morison['M5N7Vyi'] = False # (m/s); ; +Morison['M5N8Vyi'] = False # (m/s); ; +Morison['M5N9Vyi'] = False # (m/s); ; +Morison['M6N1Vyi'] = False # (m/s); ; +Morison['M6N2Vyi'] = False # (m/s); ; +Morison['M6N3Vyi'] = False # (m/s); ; +Morison['M6N4Vyi'] = False # (m/s); ; +Morison['M6N5Vyi'] = False # (m/s); ; +Morison['M6N6Vyi'] = False # (m/s); ; +Morison['M6N7Vyi'] = False # (m/s); ; +Morison['M6N8Vyi'] = False # (m/s); ; +Morison['M6N9Vyi'] = False # (m/s); ; +Morison['M7N1Vyi'] = False # (m/s); ; +Morison['M7N2Vyi'] = False # (m/s); ; +Morison['M7N3Vyi'] = False # (m/s); ; +Morison['M7N4Vyi'] = False # (m/s); ; +Morison['M7N5Vyi'] = False # (m/s); ; +Morison['M7N6Vyi'] = False # (m/s); ; +Morison['M7N7Vyi'] = False # (m/s); ; +Morison['M7N8Vyi'] = False # (m/s); ; +Morison['M7N9Vyi'] = False # (m/s); ; +Morison['M8N1Vyi'] = False # (m/s); ; +Morison['M8N2Vyi'] = False # (m/s); ; +Morison['M8N3Vyi'] = False # (m/s); ; +Morison['M8N4Vyi'] = False # (m/s); ; +Morison['M8N5Vyi'] = False # (m/s); ; +Morison['M8N6Vyi'] = False # (m/s); ; +Morison['M8N7Vyi'] = False # (m/s); ; +Morison['M8N8Vyi'] = False # (m/s); ; +Morison['M8N9Vyi'] = False # (m/s); ; +Morison['M9N1Vyi'] = False # (m/s); ; +Morison['M9N2Vyi'] = False # (m/s); ; +Morison['M9N3Vyi'] = False # (m/s); ; +Morison['M9N4Vyi'] = False # (m/s); ; +Morison['M9N5Vyi'] = False # (m/s); ; +Morison['M9N6Vyi'] = False # (m/s); ; +Morison['M9N7Vyi'] = False # (m/s); ; +Morison['M9N8Vyi'] = False # (m/s); ; +Morison['M9N9Vyi'] = False # (m/s); ; +Morison['M1N1Vzi'] = False # (m/s); ; +Morison['M1N2Vzi'] = False # (m/s); ; +Morison['M1N3Vzi'] = False # (m/s); ; +Morison['M1N4Vzi'] = False # (m/s); ; +Morison['M1N5Vzi'] = False # (m/s); ; +Morison['M1N6Vzi'] = False # (m/s); ; +Morison['M1N7Vzi'] = False # (m/s); ; +Morison['M1N8Vzi'] = False # (m/s); ; +Morison['M1N9Vzi'] = False # (m/s); ; +Morison['M2N1Vzi'] = False # (m/s); ; +Morison['M2N2Vzi'] = False # (m/s); ; +Morison['M2N3Vzi'] = False # (m/s); ; +Morison['M2N4Vzi'] = False # (m/s); ; +Morison['M2N5Vzi'] = False # (m/s); ; +Morison['M2N6Vzi'] = False # (m/s); ; +Morison['M2N7Vzi'] = False # (m/s); ; +Morison['M2N8Vzi'] = False # (m/s); ; +Morison['M2N9Vzi'] = False # (m/s); ; +Morison['M3N1Vzi'] = False # (m/s); ; +Morison['M3N2Vzi'] = False # (m/s); ; +Morison['M3N3Vzi'] = False # (m/s); ; +Morison['M3N4Vzi'] = False # (m/s); ; +Morison['M3N5Vzi'] = False # (m/s); ; +Morison['M3N6Vzi'] = False # (m/s); ; +Morison['M3N7Vzi'] = False # (m/s); ; +Morison['M3N8Vzi'] = False # (m/s); ; +Morison['M3N9Vzi'] = False # (m/s); ; +Morison['M4N1Vzi'] = False # (m/s); ; +Morison['M4N2Vzi'] = False # (m/s); ; +Morison['M4N3Vzi'] = False # (m/s); ; +Morison['M4N4Vzi'] = False # (m/s); ; +Morison['M4N5Vzi'] = False # (m/s); ; +Morison['M4N6Vzi'] = False # (m/s); ; +Morison['M4N7Vzi'] = False # (m/s); ; +Morison['M4N8Vzi'] = False # (m/s); ; +Morison['M4N9Vzi'] = False # (m/s); ; +Morison['M5N1Vzi'] = False # (m/s); ; +Morison['M5N2Vzi'] = False # (m/s); ; +Morison['M5N3Vzi'] = False # (m/s); ; +Morison['M5N4Vzi'] = False # (m/s); ; +Morison['M5N5Vzi'] = False # (m/s); ; +Morison['M5N6Vzi'] = False # (m/s); ; +Morison['M5N7Vzi'] = False # (m/s); ; +Morison['M5N8Vzi'] = False # (m/s); ; +Morison['M5N9Vzi'] = False # (m/s); ; +Morison['M6N1Vzi'] = False # (m/s); ; +Morison['M6N2Vzi'] = False # (m/s); ; +Morison['M6N3Vzi'] = False # (m/s); ; +Morison['M6N4Vzi'] = False # (m/s); ; +Morison['M6N5Vzi'] = False # (m/s); ; +Morison['M6N6Vzi'] = False # (m/s); ; +Morison['M6N7Vzi'] = False # (m/s); ; +Morison['M6N8Vzi'] = False # (m/s); ; +Morison['M6N9Vzi'] = False # (m/s); ; +Morison['M7N1Vzi'] = False # (m/s); ; +Morison['M7N2Vzi'] = False # (m/s); ; +Morison['M7N3Vzi'] = False # (m/s); ; +Morison['M7N4Vzi'] = False # (m/s); ; +Morison['M7N5Vzi'] = False # (m/s); ; +Morison['M7N6Vzi'] = False # (m/s); ; +Morison['M7N7Vzi'] = False # (m/s); ; +Morison['M7N8Vzi'] = False # (m/s); ; +Morison['M7N9Vzi'] = False # (m/s); ; +Morison['M8N1Vzi'] = False # (m/s); ; +Morison['M8N2Vzi'] = False # (m/s); ; +Morison['M8N3Vzi'] = False # (m/s); ; +Morison['M8N4Vzi'] = False # (m/s); ; +Morison['M8N5Vzi'] = False # (m/s); ; +Morison['M8N6Vzi'] = False # (m/s); ; +Morison['M8N7Vzi'] = False # (m/s); ; +Morison['M8N8Vzi'] = False # (m/s); ; +Morison['M8N9Vzi'] = False # (m/s); ; +Morison['M9N1Vzi'] = False # (m/s); ; +Morison['M9N2Vzi'] = False # (m/s); ; +Morison['M9N3Vzi'] = False # (m/s); ; +Morison['M9N4Vzi'] = False # (m/s); ; +Morison['M9N5Vzi'] = False # (m/s); ; +Morison['M9N6Vzi'] = False # (m/s); ; +Morison['M9N7Vzi'] = False # (m/s); ; +Morison['M9N8Vzi'] = False # (m/s); ; +Morison['M9N9Vzi'] = False # (m/s); ; +Morison['M1N1DynP'] = False # (Pa); fluid dynamic pressure; +Morison['M1N2DynP'] = False # (Pa); ; +Morison['M1N3DynP'] = False # (Pa); ; +Morison['M1N4DynP'] = False # (Pa); ; +Morison['M1N5DynP'] = False # (Pa); ; +Morison['M1N6DynP'] = False # (Pa); ; +Morison['M1N7DynP'] = False # (Pa); ; +Morison['M1N8DynP'] = False # (Pa); ; +Morison['M1N9DynP'] = False # (Pa); ; +Morison['M2N1DynP'] = False # (Pa); ; +Morison['M2N2DynP'] = False # (Pa); ; +Morison['M2N3DynP'] = False # (Pa); ; +Morison['M2N4DynP'] = False # (Pa); ; +Morison['M2N5DynP'] = False # (Pa); ; +Morison['M2N6DynP'] = False # (Pa); ; +Morison['M2N7DynP'] = False # (Pa); ; +Morison['M2N8DynP'] = False # (Pa); ; +Morison['M2N9DynP'] = False # (Pa); ; +Morison['M3N1DynP'] = False # (Pa); ; +Morison['M3N2DynP'] = False # (Pa); ; +Morison['M3N3DynP'] = False # (Pa); ; +Morison['M3N4DynP'] = False # (Pa); ; +Morison['M3N5DynP'] = False # (Pa); ; +Morison['M3N6DynP'] = False # (Pa); ; +Morison['M3N7DynP'] = False # (Pa); ; +Morison['M3N8DynP'] = False # (Pa); ; +Morison['M3N9DynP'] = False # (Pa); ; +Morison['M4N1DynP'] = False # (Pa); ; +Morison['M4N2DynP'] = False # (Pa); ; +Morison['M4N3DynP'] = False # (Pa); ; +Morison['M4N4DynP'] = False # (Pa); ; +Morison['M4N5DynP'] = False # (Pa); ; +Morison['M4N6DynP'] = False # (Pa); ; +Morison['M4N7DynP'] = False # (Pa); ; +Morison['M4N8DynP'] = False # (Pa); ; +Morison['M4N9DynP'] = False # (Pa); ; +Morison['M5N1DynP'] = False # (Pa); ; +Morison['M5N2DynP'] = False # (Pa); ; +Morison['M5N3DynP'] = False # (Pa); ; +Morison['M5N4DynP'] = False # (Pa); ; +Morison['M5N5DynP'] = False # (Pa); ; +Morison['M5N6DynP'] = False # (Pa); ; +Morison['M5N7DynP'] = False # (Pa); ; +Morison['M5N8DynP'] = False # (Pa); ; +Morison['M5N9DynP'] = False # (Pa); ; +Morison['M6N1DynP'] = False # (Pa); ; +Morison['M6N2DynP'] = False # (Pa); ; +Morison['M6N3DynP'] = False # (Pa); ; +Morison['M6N4DynP'] = False # (Pa); ; +Morison['M6N5DynP'] = False # (Pa); ; +Morison['M6N6DynP'] = False # (Pa); ; +Morison['M6N7DynP'] = False # (Pa); ; +Morison['M6N8DynP'] = False # (Pa); ; +Morison['M6N9DynP'] = False # (Pa); ; +Morison['M7N1DynP'] = False # (Pa); ; +Morison['M7N2DynP'] = False # (Pa); ; +Morison['M7N3DynP'] = False # (Pa); ; +Morison['M7N4DynP'] = False # (Pa); ; +Morison['M7N5DynP'] = False # (Pa); ; +Morison['M7N6DynP'] = False # (Pa); ; +Morison['M7N7DynP'] = False # (Pa); ; +Morison['M7N8DynP'] = False # (Pa); ; +Morison['M7N9DynP'] = False # (Pa); ; +Morison['M8N1DynP'] = False # (Pa); ; +Morison['M8N2DynP'] = False # (Pa); ; +Morison['M8N3DynP'] = False # (Pa); ; +Morison['M8N4DynP'] = False # (Pa); ; +Morison['M8N5DynP'] = False # (Pa); ; +Morison['M8N6DynP'] = False # (Pa); ; +Morison['M8N7DynP'] = False # (Pa); ; +Morison['M8N8DynP'] = False # (Pa); ; +Morison['M8N9DynP'] = False # (Pa); ; +Morison['M9N1DynP'] = False # (Pa); ; +Morison['M9N2DynP'] = False # (Pa); ; +Morison['M9N3DynP'] = False # (Pa); ; +Morison['M9N4DynP'] = False # (Pa); ; +Morison['M9N5DynP'] = False # (Pa); ; +Morison['M9N6DynP'] = False # (Pa); ; +Morison['M9N7DynP'] = False # (Pa); ; +Morison['M9N8DynP'] = False # (Pa); ; +Morison['M9N9DynP'] = False # (Pa); ; +Morison['M1N1STVxi'] = False # (m/s); structure translational velocity; +Morison['M1N2STVxi'] = False # (m/s); ; +Morison['M1N3STVxi'] = False # (m/s); ; +Morison['M1N4STVxi'] = False # (m/s); ; +Morison['M1N5STVxi'] = False # (m/s); ; +Morison['M1N6STVxi'] = False # (m/s); ; +Morison['M1N7STVxi'] = False # (m/s); ; +Morison['M1N8STVxi'] = False # (m/s); ; +Morison['M1N9STVxi'] = False # (m/s); ; +Morison['M2N1STVxi'] = False # (m/s); ; +Morison['M2N2STVxi'] = False # (m/s); ; +Morison['M2N3STVxi'] = False # (m/s); ; +Morison['M2N4STVxi'] = False # (m/s); ; +Morison['M2N5STVxi'] = False # (m/s); ; +Morison['M2N6STVxi'] = False # (m/s); ; +Morison['M2N7STVxi'] = False # (m/s); ; +Morison['M2N8STVxi'] = False # (m/s); ; +Morison['M2N9STVxi'] = False # (m/s); ; +Morison['M3N1STVxi'] = False # (m/s); ; +Morison['M3N2STVxi'] = False # (m/s); ; +Morison['M3N3STVxi'] = False # (m/s); ; +Morison['M3N4STVxi'] = False # (m/s); ; +Morison['M3N5STVxi'] = False # (m/s); ; +Morison['M3N6STVxi'] = False # (m/s); ; +Morison['M3N7STVxi'] = False # (m/s); ; +Morison['M3N8STVxi'] = False # (m/s); ; +Morison['M3N9STVxi'] = False # (m/s); ; +Morison['M4N1STVxi'] = False # (m/s); ; +Morison['M4N2STVxi'] = False # (m/s); ; +Morison['M4N3STVxi'] = False # (m/s); ; +Morison['M4N4STVxi'] = False # (m/s); ; +Morison['M4N5STVxi'] = False # (m/s); ; +Morison['M4N6STVxi'] = False # (m/s); ; +Morison['M4N7STVxi'] = False # (m/s); ; +Morison['M4N8STVxi'] = False # (m/s); ; +Morison['M4N9STVxi'] = False # (m/s); ; +Morison['M5N1STVxi'] = False # (m/s); ; +Morison['M5N2STVxi'] = False # (m/s); ; +Morison['M5N3STVxi'] = False # (m/s); ; +Morison['M5N4STVxi'] = False # (m/s); ; +Morison['M5N5STVxi'] = False # (m/s); ; +Morison['M5N6STVxi'] = False # (m/s); ; +Morison['M5N7STVxi'] = False # (m/s); ; +Morison['M5N8STVxi'] = False # (m/s); ; +Morison['M5N9STVxi'] = False # (m/s); ; +Morison['M6N1STVxi'] = False # (m/s); ; +Morison['M6N2STVxi'] = False # (m/s); ; +Morison['M6N3STVxi'] = False # (m/s); ; +Morison['M6N4STVxi'] = False # (m/s); ; +Morison['M6N5STVxi'] = False # (m/s); ; +Morison['M6N6STVxi'] = False # (m/s); ; +Morison['M6N7STVxi'] = False # (m/s); ; +Morison['M6N8STVxi'] = False # (m/s); ; +Morison['M6N9STVxi'] = False # (m/s); ; +Morison['M7N1STVxi'] = False # (m/s); ; +Morison['M7N2STVxi'] = False # (m/s); ; +Morison['M7N3STVxi'] = False # (m/s); ; +Morison['M7N4STVxi'] = False # (m/s); ; +Morison['M7N5STVxi'] = False # (m/s); ; +Morison['M7N6STVxi'] = False # (m/s); ; +Morison['M7N7STVxi'] = False # (m/s); ; +Morison['M7N8STVxi'] = False # (m/s); ; +Morison['M7N9STVxi'] = False # (m/s); ; +Morison['M8N1STVxi'] = False # (m/s); ; +Morison['M8N2STVxi'] = False # (m/s); ; +Morison['M8N3STVxi'] = False # (m/s); ; +Morison['M8N4STVxi'] = False # (m/s); ; +Morison['M8N5STVxi'] = False # (m/s); ; +Morison['M8N6STVxi'] = False # (m/s); ; +Morison['M8N7STVxi'] = False # (m/s); ; +Morison['M8N8STVxi'] = False # (m/s); ; +Morison['M8N9STVxi'] = False # (m/s); ; +Morison['M9N1STVxi'] = False # (m/s); ; +Morison['M9N2STVxi'] = False # (m/s); ; +Morison['M9N3STVxi'] = False # (m/s); ; +Morison['M9N4STVxi'] = False # (m/s); ; +Morison['M9N5STVxi'] = False # (m/s); ; +Morison['M9N6STVxi'] = False # (m/s); ; +Morison['M9N7STVxi'] = False # (m/s); ; +Morison['M9N8STVxi'] = False # (m/s); ; +Morison['M9N9STVxi'] = False # (m/s); ; +Morison['M1N1STVyi'] = False # (m/s); ; +Morison['M1N2STVyi'] = False # (m/s); ; +Morison['M1N3STVyi'] = False # (m/s); ; +Morison['M1N4STVyi'] = False # (m/s); ; +Morison['M1N5STVyi'] = False # (m/s); ; +Morison['M1N6STVyi'] = False # (m/s); ; +Morison['M1N7STVyi'] = False # (m/s); ; +Morison['M1N8STVyi'] = False # (m/s); ; +Morison['M1N9STVyi'] = False # (m/s); ; +Morison['M2N1STVyi'] = False # (m/s); ; +Morison['M2N2STVyi'] = False # (m/s); ; +Morison['M2N3STVyi'] = False # (m/s); ; +Morison['M2N4STVyi'] = False # (m/s); ; +Morison['M2N5STVyi'] = False # (m/s); ; +Morison['M2N6STVyi'] = False # (m/s); ; +Morison['M2N7STVyi'] = False # (m/s); ; +Morison['M2N8STVyi'] = False # (m/s); ; +Morison['M2N9STVyi'] = False # (m/s); ; +Morison['M3N1STVyi'] = False # (m/s); ; +Morison['M3N2STVyi'] = False # (m/s); ; +Morison['M3N3STVyi'] = False # (m/s); ; +Morison['M3N4STVyi'] = False # (m/s); ; +Morison['M3N5STVyi'] = False # (m/s); ; +Morison['M3N6STVyi'] = False # (m/s); ; +Morison['M3N7STVyi'] = False # (m/s); ; +Morison['M3N8STVyi'] = False # (m/s); ; +Morison['M3N9STVyi'] = False # (m/s); ; +Morison['M4N1STVyi'] = False # (m/s); ; +Morison['M4N2STVyi'] = False # (m/s); ; +Morison['M4N3STVyi'] = False # (m/s); ; +Morison['M4N4STVyi'] = False # (m/s); ; +Morison['M4N5STVyi'] = False # (m/s); ; +Morison['M4N6STVyi'] = False # (m/s); ; +Morison['M4N7STVyi'] = False # (m/s); ; +Morison['M4N8STVyi'] = False # (m/s); ; +Morison['M4N9STVyi'] = False # (m/s); ; +Morison['M5N1STVyi'] = False # (m/s); ; +Morison['M5N2STVyi'] = False # (m/s); ; +Morison['M5N3STVyi'] = False # (m/s); ; +Morison['M5N4STVyi'] = False # (m/s); ; +Morison['M5N5STVyi'] = False # (m/s); ; +Morison['M5N6STVyi'] = False # (m/s); ; +Morison['M5N7STVyi'] = False # (m/s); ; +Morison['M5N8STVyi'] = False # (m/s); ; +Morison['M5N9STVyi'] = False # (m/s); ; +Morison['M6N1STVyi'] = False # (m/s); ; +Morison['M6N2STVyi'] = False # (m/s); ; +Morison['M6N3STVyi'] = False # (m/s); ; +Morison['M6N4STVyi'] = False # (m/s); ; +Morison['M6N5STVyi'] = False # (m/s); ; +Morison['M6N6STVyi'] = False # (m/s); ; +Morison['M6N7STVyi'] = False # (m/s); ; +Morison['M6N8STVyi'] = False # (m/s); ; +Morison['M6N9STVyi'] = False # (m/s); ; +Morison['M7N1STVyi'] = False # (m/s); ; +Morison['M7N2STVyi'] = False # (m/s); ; +Morison['M7N3STVyi'] = False # (m/s); ; +Morison['M7N4STVyi'] = False # (m/s); ; +Morison['M7N5STVyi'] = False # (m/s); ; +Morison['M7N6STVyi'] = False # (m/s); ; +Morison['M7N7STVyi'] = False # (m/s); ; +Morison['M7N8STVyi'] = False # (m/s); ; +Morison['M7N9STVyi'] = False # (m/s); ; +Morison['M8N1STVyi'] = False # (m/s); ; +Morison['M8N2STVyi'] = False # (m/s); ; +Morison['M8N3STVyi'] = False # (m/s); ; +Morison['M8N4STVyi'] = False # (m/s); ; +Morison['M8N5STVyi'] = False # (m/s); ; +Morison['M8N6STVyi'] = False # (m/s); ; +Morison['M8N7STVyi'] = False # (m/s); ; +Morison['M8N8STVyi'] = False # (m/s); ; +Morison['M8N9STVyi'] = False # (m/s); ; +Morison['M9N1STVyi'] = False # (m/s); ; +Morison['M9N2STVyi'] = False # (m/s); ; +Morison['M9N3STVyi'] = False # (m/s); ; +Morison['M9N4STVyi'] = False # (m/s); ; +Morison['M9N5STVyi'] = False # (m/s); ; +Morison['M9N6STVyi'] = False # (m/s); ; +Morison['M9N7STVyi'] = False # (m/s); ; +Morison['M9N8STVyi'] = False # (m/s); ; +Morison['M9N9STVyi'] = False # (m/s); ; +Morison['M1N1STVzi'] = False # (m/s); ; +Morison['M1N2STVzi'] = False # (m/s); ; +Morison['M1N3STVzi'] = False # (m/s); ; +Morison['M1N4STVzi'] = False # (m/s); ; +Morison['M1N5STVzi'] = False # (m/s); ; +Morison['M1N6STVzi'] = False # (m/s); ; +Morison['M1N7STVzi'] = False # (m/s); ; +Morison['M1N8STVzi'] = False # (m/s); ; +Morison['M1N9STVzi'] = False # (m/s); ; +Morison['M2N1STVzi'] = False # (m/s); ; +Morison['M2N2STVzi'] = False # (m/s); ; +Morison['M2N3STVzi'] = False # (m/s); ; +Morison['M2N4STVzi'] = False # (m/s); ; +Morison['M2N5STVzi'] = False # (m/s); ; +Morison['M2N6STVzi'] = False # (m/s); ; +Morison['M2N7STVzi'] = False # (m/s); ; +Morison['M2N8STVzi'] = False # (m/s); ; +Morison['M2N9STVzi'] = False # (m/s); ; +Morison['M3N1STVzi'] = False # (m/s); ; +Morison['M3N2STVzi'] = False # (m/s); ; +Morison['M3N3STVzi'] = False # (m/s); ; +Morison['M3N4STVzi'] = False # (m/s); ; +Morison['M3N5STVzi'] = False # (m/s); ; +Morison['M3N6STVzi'] = False # (m/s); ; +Morison['M3N7STVzi'] = False # (m/s); ; +Morison['M3N8STVzi'] = False # (m/s); ; +Morison['M3N9STVzi'] = False # (m/s); ; +Morison['M4N1STVzi'] = False # (m/s); ; +Morison['M4N2STVzi'] = False # (m/s); ; +Morison['M4N3STVzi'] = False # (m/s); ; +Morison['M4N4STVzi'] = False # (m/s); ; +Morison['M4N5STVzi'] = False # (m/s); ; +Morison['M4N6STVzi'] = False # (m/s); ; +Morison['M4N7STVzi'] = False # (m/s); ; +Morison['M4N8STVzi'] = False # (m/s); ; +Morison['M4N9STVzi'] = False # (m/s); ; +Morison['M5N1STVzi'] = False # (m/s); ; +Morison['M5N2STVzi'] = False # (m/s); ; +Morison['M5N3STVzi'] = False # (m/s); ; +Morison['M5N4STVzi'] = False # (m/s); ; +Morison['M5N5STVzi'] = False # (m/s); ; +Morison['M5N6STVzi'] = False # (m/s); ; +Morison['M5N7STVzi'] = False # (m/s); ; +Morison['M5N8STVzi'] = False # (m/s); ; +Morison['M5N9STVzi'] = False # (m/s); ; +Morison['M6N1STVzi'] = False # (m/s); ; +Morison['M6N2STVzi'] = False # (m/s); ; +Morison['M6N3STVzi'] = False # (m/s); ; +Morison['M6N4STVzi'] = False # (m/s); ; +Morison['M6N5STVzi'] = False # (m/s); ; +Morison['M6N6STVzi'] = False # (m/s); ; +Morison['M6N7STVzi'] = False # (m/s); ; +Morison['M6N8STVzi'] = False # (m/s); ; +Morison['M6N9STVzi'] = False # (m/s); ; +Morison['M7N1STVzi'] = False # (m/s); ; +Morison['M7N2STVzi'] = False # (m/s); ; +Morison['M7N3STVzi'] = False # (m/s); ; +Morison['M7N4STVzi'] = False # (m/s); ; +Morison['M7N5STVzi'] = False # (m/s); ; +Morison['M7N6STVzi'] = False # (m/s); ; +Morison['M7N7STVzi'] = False # (m/s); ; +Morison['M7N8STVzi'] = False # (m/s); ; +Morison['M7N9STVzi'] = False # (m/s); ; +Morison['M8N1STVzi'] = False # (m/s); ; +Morison['M8N2STVzi'] = False # (m/s); ; +Morison['M8N3STVzi'] = False # (m/s); ; +Morison['M8N4STVzi'] = False # (m/s); ; +Morison['M8N5STVzi'] = False # (m/s); ; +Morison['M8N6STVzi'] = False # (m/s); ; +Morison['M8N7STVzi'] = False # (m/s); ; +Morison['M8N8STVzi'] = False # (m/s); ; +Morison['M8N9STVzi'] = False # (m/s); ; +Morison['M9N1STVzi'] = False # (m/s); ; +Morison['M9N2STVzi'] = False # (m/s); ; +Morison['M9N3STVzi'] = False # (m/s); ; +Morison['M9N4STVzi'] = False # (m/s); ; +Morison['M9N5STVzi'] = False # (m/s); ; +Morison['M9N6STVzi'] = False # (m/s); ; +Morison['M9N7STVzi'] = False # (m/s); ; +Morison['M9N8STVzi'] = False # (m/s); ; +Morison['M9N9STVzi'] = False # (m/s); ; +Morison['M1N1STAxi'] = False # (m/s^2); structure translational Acceleration; +Morison['M1N2STAxi'] = False # (m/s^2); ; +Morison['M1N3STAxi'] = False # (m/s^2); ; +Morison['M1N4STAxi'] = False # (m/s^2); ; +Morison['M1N5STAxi'] = False # (m/s^2); ; +Morison['M1N6STAxi'] = False # (m/s^2); ; +Morison['M1N7STAxi'] = False # (m/s^2); ; +Morison['M1N8STAxi'] = False # (m/s^2); ; +Morison['M1N9STAxi'] = False # (m/s^2); ; +Morison['M2N1STAxi'] = False # (m/s^2); ; +Morison['M2N2STAxi'] = False # (m/s^2); ; +Morison['M2N3STAxi'] = False # (m/s^2); ; +Morison['M2N4STAxi'] = False # (m/s^2); ; +Morison['M2N5STAxi'] = False # (m/s^2); ; +Morison['M2N6STAxi'] = False # (m/s^2); ; +Morison['M2N7STAxi'] = False # (m/s^2); ; +Morison['M2N8STAxi'] = False # (m/s^2); ; +Morison['M2N9STAxi'] = False # (m/s^2); ; +Morison['M3N1STAxi'] = False # (m/s^2); ; +Morison['M3N2STAxi'] = False # (m/s^2); ; +Morison['M3N3STAxi'] = False # (m/s^2); ; +Morison['M3N4STAxi'] = False # (m/s^2); ; +Morison['M3N5STAxi'] = False # (m/s^2); ; +Morison['M3N6STAxi'] = False # (m/s^2); ; +Morison['M3N7STAxi'] = False # (m/s^2); ; +Morison['M3N8STAxi'] = False # (m/s^2); ; +Morison['M3N9STAxi'] = False # (m/s^2); ; +Morison['M4N1STAxi'] = False # (m/s^2); ; +Morison['M4N2STAxi'] = False # (m/s^2); ; +Morison['M4N3STAxi'] = False # (m/s^2); ; +Morison['M4N4STAxi'] = False # (m/s^2); ; +Morison['M4N5STAxi'] = False # (m/s^2); ; +Morison['M4N6STAxi'] = False # (m/s^2); ; +Morison['M4N7STAxi'] = False # (m/s^2); ; +Morison['M4N8STAxi'] = False # (m/s^2); ; +Morison['M4N9STAxi'] = False # (m/s^2); ; +Morison['M5N1STAxi'] = False # (m/s^2); ; +Morison['M5N2STAxi'] = False # (m/s^2); ; +Morison['M5N3STAxi'] = False # (m/s^2); ; +Morison['M5N4STAxi'] = False # (m/s^2); ; +Morison['M5N5STAxi'] = False # (m/s^2); ; +Morison['M5N6STAxi'] = False # (m/s^2); ; +Morison['M5N7STAxi'] = False # (m/s^2); ; +Morison['M5N8STAxi'] = False # (m/s^2); ; +Morison['M5N9STAxi'] = False # (m/s^2); ; +Morison['M6N1STAxi'] = False # (m/s^2); ; +Morison['M6N2STAxi'] = False # (m/s^2); ; +Morison['M6N3STAxi'] = False # (m/s^2); ; +Morison['M6N4STAxi'] = False # (m/s^2); ; +Morison['M6N5STAxi'] = False # (m/s^2); ; +Morison['M6N6STAxi'] = False # (m/s^2); ; +Morison['M6N7STAxi'] = False # (m/s^2); ; +Morison['M6N8STAxi'] = False # (m/s^2); ; +Morison['M6N9STAxi'] = False # (m/s^2); ; +Morison['M7N1STAxi'] = False # (m/s^2); ; +Morison['M7N2STAxi'] = False # (m/s^2); ; +Morison['M7N3STAxi'] = False # (m/s^2); ; +Morison['M7N4STAxi'] = False # (m/s^2); ; +Morison['M7N5STAxi'] = False # (m/s^2); ; +Morison['M7N6STAxi'] = False # (m/s^2); ; +Morison['M7N7STAxi'] = False # (m/s^2); ; +Morison['M7N8STAxi'] = False # (m/s^2); ; +Morison['M7N9STAxi'] = False # (m/s^2); ; +Morison['M8N1STAxi'] = False # (m/s^2); ; +Morison['M8N2STAxi'] = False # (m/s^2); ; +Morison['M8N3STAxi'] = False # (m/s^2); ; +Morison['M8N4STAxi'] = False # (m/s^2); ; +Morison['M8N5STAxi'] = False # (m/s^2); ; +Morison['M8N6STAxi'] = False # (m/s^2); ; +Morison['M8N7STAxi'] = False # (m/s^2); ; +Morison['M8N8STAxi'] = False # (m/s^2); ; +Morison['M8N9STAxi'] = False # (m/s^2); ; +Morison['M9N1STAxi'] = False # (m/s^2); ; +Morison['M9N2STAxi'] = False # (m/s^2); ; +Morison['M9N3STAxi'] = False # (m/s^2); ; +Morison['M9N4STAxi'] = False # (m/s^2); ; +Morison['M9N5STAxi'] = False # (m/s^2); ; +Morison['M9N6STAxi'] = False # (m/s^2); ; +Morison['M9N7STAxi'] = False # (m/s^2); ; +Morison['M9N8STAxi'] = False # (m/s^2); ; +Morison['M9N9STAxi'] = False # (m/s^2); ; +Morison['M1N1STAyi'] = False # (m/s^2); ; +Morison['M1N2STAyi'] = False # (m/s^2); ; +Morison['M1N3STAyi'] = False # (m/s^2); ; +Morison['M1N4STAyi'] = False # (m/s^2); ; +Morison['M1N5STAyi'] = False # (m/s^2); ; +Morison['M1N6STAyi'] = False # (m/s^2); ; +Morison['M1N7STAyi'] = False # (m/s^2); ; +Morison['M1N8STAyi'] = False # (m/s^2); ; +Morison['M1N9STAyi'] = False # (m/s^2); ; +Morison['M2N1STAyi'] = False # (m/s^2); ; +Morison['M2N2STAyi'] = False # (m/s^2); ; +Morison['M2N3STAyi'] = False # (m/s^2); ; +Morison['M2N4STAyi'] = False # (m/s^2); ; +Morison['M2N5STAyi'] = False # (m/s^2); ; +Morison['M2N6STAyi'] = False # (m/s^2); ; +Morison['M2N7STAyi'] = False # (m/s^2); ; +Morison['M2N8STAyi'] = False # (m/s^2); ; +Morison['M2N9STAyi'] = False # (m/s^2); ; +Morison['M3N1STAyi'] = False # (m/s^2); ; +Morison['M3N2STAyi'] = False # (m/s^2); ; +Morison['M3N3STAyi'] = False # (m/s^2); ; +Morison['M3N4STAyi'] = False # (m/s^2); ; +Morison['M3N5STAyi'] = False # (m/s^2); ; +Morison['M3N6STAyi'] = False # (m/s^2); ; +Morison['M3N7STAyi'] = False # (m/s^2); ; +Morison['M3N8STAyi'] = False # (m/s^2); ; +Morison['M3N9STAyi'] = False # (m/s^2); ; +Morison['M4N1STAyi'] = False # (m/s^2); ; +Morison['M4N2STAyi'] = False # (m/s^2); ; +Morison['M4N3STAyi'] = False # (m/s^2); ; +Morison['M4N4STAyi'] = False # (m/s^2); ; +Morison['M4N5STAyi'] = False # (m/s^2); ; +Morison['M4N6STAyi'] = False # (m/s^2); ; +Morison['M4N7STAyi'] = False # (m/s^2); ; +Morison['M4N8STAyi'] = False # (m/s^2); ; +Morison['M4N9STAyi'] = False # (m/s^2); ; +Morison['M5N1STAyi'] = False # (m/s^2); ; +Morison['M5N2STAyi'] = False # (m/s^2); ; +Morison['M5N3STAyi'] = False # (m/s^2); ; +Morison['M5N4STAyi'] = False # (m/s^2); ; +Morison['M5N5STAyi'] = False # (m/s^2); ; +Morison['M5N6STAyi'] = False # (m/s^2); ; +Morison['M5N7STAyi'] = False # (m/s^2); ; +Morison['M5N8STAyi'] = False # (m/s^2); ; +Morison['M5N9STAyi'] = False # (m/s^2); ; +Morison['M6N1STAyi'] = False # (m/s^2); ; +Morison['M6N2STAyi'] = False # (m/s^2); ; +Morison['M6N3STAyi'] = False # (m/s^2); ; +Morison['M6N4STAyi'] = False # (m/s^2); ; +Morison['M6N5STAyi'] = False # (m/s^2); ; +Morison['M6N6STAyi'] = False # (m/s^2); ; +Morison['M6N7STAyi'] = False # (m/s^2); ; +Morison['M6N8STAyi'] = False # (m/s^2); ; +Morison['M6N9STAyi'] = False # (m/s^2); ; +Morison['M7N1STAyi'] = False # (m/s^2); ; +Morison['M7N2STAyi'] = False # (m/s^2); ; +Morison['M7N3STAyi'] = False # (m/s^2); ; +Morison['M7N4STAyi'] = False # (m/s^2); ; +Morison['M7N5STAyi'] = False # (m/s^2); ; +Morison['M7N6STAyi'] = False # (m/s^2); ; +Morison['M7N7STAyi'] = False # (m/s^2); ; +Morison['M7N8STAyi'] = False # (m/s^2); ; +Morison['M7N9STAyi'] = False # (m/s^2); ; +Morison['M8N1STAyi'] = False # (m/s^2); ; +Morison['M8N2STAyi'] = False # (m/s^2); ; +Morison['M8N3STAyi'] = False # (m/s^2); ; +Morison['M8N4STAyi'] = False # (m/s^2); ; +Morison['M8N5STAyi'] = False # (m/s^2); ; +Morison['M8N6STAyi'] = False # (m/s^2); ; +Morison['M8N7STAyi'] = False # (m/s^2); ; +Morison['M8N8STAyi'] = False # (m/s^2); ; +Morison['M8N9STAyi'] = False # (m/s^2); ; +Morison['M9N1STAyi'] = False # (m/s^2); ; +Morison['M9N2STAyi'] = False # (m/s^2); ; +Morison['M9N3STAyi'] = False # (m/s^2); ; +Morison['M9N4STAyi'] = False # (m/s^2); ; +Morison['M9N5STAyi'] = False # (m/s^2); ; +Morison['M9N6STAyi'] = False # (m/s^2); ; +Morison['M9N7STAyi'] = False # (m/s^2); ; +Morison['M9N8STAyi'] = False # (m/s^2); ; +Morison['M9N9STAyi'] = False # (m/s^2); ; +Morison['M1N1STAzi'] = False # (m/s^2); ; +Morison['M1N2STAzi'] = False # (m/s^2); ; +Morison['M1N3STAzi'] = False # (m/s^2); ; +Morison['M1N4STAzi'] = False # (m/s^2); ; +Morison['M1N5STAzi'] = False # (m/s^2); ; +Morison['M1N6STAzi'] = False # (m/s^2); ; +Morison['M1N7STAzi'] = False # (m/s^2); ; +Morison['M1N8STAzi'] = False # (m/s^2); ; +Morison['M1N9STAzi'] = False # (m/s^2); ; +Morison['M2N1STAzi'] = False # (m/s^2); ; +Morison['M2N2STAzi'] = False # (m/s^2); ; +Morison['M2N3STAzi'] = False # (m/s^2); ; +Morison['M2N4STAzi'] = False # (m/s^2); ; +Morison['M2N5STAzi'] = False # (m/s^2); ; +Morison['M2N6STAzi'] = False # (m/s^2); ; +Morison['M2N7STAzi'] = False # (m/s^2); ; +Morison['M2N8STAzi'] = False # (m/s^2); ; +Morison['M2N9STAzi'] = False # (m/s^2); ; +Morison['M3N1STAzi'] = False # (m/s^2); ; +Morison['M3N2STAzi'] = False # (m/s^2); ; +Morison['M3N3STAzi'] = False # (m/s^2); ; +Morison['M3N4STAzi'] = False # (m/s^2); ; +Morison['M3N5STAzi'] = False # (m/s^2); ; +Morison['M3N6STAzi'] = False # (m/s^2); ; +Morison['M3N7STAzi'] = False # (m/s^2); ; +Morison['M3N8STAzi'] = False # (m/s^2); ; +Morison['M3N9STAzi'] = False # (m/s^2); ; +Morison['M4N1STAzi'] = False # (m/s^2); ; +Morison['M4N2STAzi'] = False # (m/s^2); ; +Morison['M4N3STAzi'] = False # (m/s^2); ; +Morison['M4N4STAzi'] = False # (m/s^2); ; +Morison['M4N5STAzi'] = False # (m/s^2); ; +Morison['M4N6STAzi'] = False # (m/s^2); ; +Morison['M4N7STAzi'] = False # (m/s^2); ; +Morison['M4N8STAzi'] = False # (m/s^2); ; +Morison['M4N9STAzi'] = False # (m/s^2); ; +Morison['M5N1STAzi'] = False # (m/s^2); ; +Morison['M5N2STAzi'] = False # (m/s^2); ; +Morison['M5N3STAzi'] = False # (m/s^2); ; +Morison['M5N4STAzi'] = False # (m/s^2); ; +Morison['M5N5STAzi'] = False # (m/s^2); ; +Morison['M5N6STAzi'] = False # (m/s^2); ; +Morison['M5N7STAzi'] = False # (m/s^2); ; +Morison['M5N8STAzi'] = False # (m/s^2); ; +Morison['M5N9STAzi'] = False # (m/s^2); ; +Morison['M6N1STAzi'] = False # (m/s^2); ; +Morison['M6N2STAzi'] = False # (m/s^2); ; +Morison['M6N3STAzi'] = False # (m/s^2); ; +Morison['M6N4STAzi'] = False # (m/s^2); ; +Morison['M6N5STAzi'] = False # (m/s^2); ; +Morison['M6N6STAzi'] = False # (m/s^2); ; +Morison['M6N7STAzi'] = False # (m/s^2); ; +Morison['M6N8STAzi'] = False # (m/s^2); ; +Morison['M6N9STAzi'] = False # (m/s^2); ; +Morison['M7N1STAzi'] = False # (m/s^2); ; +Morison['M7N2STAzi'] = False # (m/s^2); ; +Morison['M7N3STAzi'] = False # (m/s^2); ; +Morison['M7N4STAzi'] = False # (m/s^2); ; +Morison['M7N5STAzi'] = False # (m/s^2); ; +Morison['M7N6STAzi'] = False # (m/s^2); ; +Morison['M7N7STAzi'] = False # (m/s^2); ; +Morison['M7N8STAzi'] = False # (m/s^2); ; +Morison['M7N9STAzi'] = False # (m/s^2); ; +Morison['M8N1STAzi'] = False # (m/s^2); ; +Morison['M8N2STAzi'] = False # (m/s^2); ; +Morison['M8N3STAzi'] = False # (m/s^2); ; +Morison['M8N4STAzi'] = False # (m/s^2); ; +Morison['M8N5STAzi'] = False # (m/s^2); ; +Morison['M8N6STAzi'] = False # (m/s^2); ; +Morison['M8N7STAzi'] = False # (m/s^2); ; +Morison['M8N8STAzi'] = False # (m/s^2); ; +Morison['M8N9STAzi'] = False # (m/s^2); ; +Morison['M9N1STAzi'] = False # (m/s^2); ; +Morison['M9N2STAzi'] = False # (m/s^2); ; +Morison['M9N3STAzi'] = False # (m/s^2); ; +Morison['M9N4STAzi'] = False # (m/s^2); ; +Morison['M9N5STAzi'] = False # (m/s^2); ; +Morison['M9N6STAzi'] = False # (m/s^2); ; +Morison['M9N7STAzi'] = False # (m/s^2); ; +Morison['M9N8STAzi'] = False # (m/s^2); ; +Morison['M9N9STAzi'] = False # (m/s^2); ; + +# Morison Element Loads +Morison['M1N1FDxi'] = False # (N/m); x-component of the distributed viscous-drag force expressed in the inertial coordinate system; +Morison['M1N2FDxi'] = False # (N/m); ; +Morison['M1N3FDxi'] = False # (N/m); ; +Morison['M1N4FDxi'] = False # (N/m); ; +Morison['M1N5FDxi'] = False # (N/m); ; +Morison['M1N6FDxi'] = False # (N/m); ; +Morison['M1N7FDxi'] = False # (N/m); ; +Morison['M1N8FDxi'] = False # (N/m); ; +Morison['M1N9FDxi'] = False # (N/m); ; +Morison['M2N1FDxi'] = False # (N/m); ; +Morison['M2N2FDxi'] = False # (N/m); ; +Morison['M2N3FDxi'] = False # (N/m); ; +Morison['M2N4FDxi'] = False # (N/m); ; +Morison['M2N5FDxi'] = False # (N/m); ; +Morison['M2N6FDxi'] = False # (N/m); ; +Morison['M2N7FDxi'] = False # (N/m); ; +Morison['M2N8FDxi'] = False # (N/m); ; +Morison['M2N9FDxi'] = False # (N/m); ; +Morison['M3N1FDxi'] = False # (N/m); ; +Morison['M3N2FDxi'] = False # (N/m); ; +Morison['M3N3FDxi'] = False # (N/m); ; +Morison['M3N4FDxi'] = False # (N/m); ; +Morison['M3N5FDxi'] = False # (N/m); ; +Morison['M3N6FDxi'] = False # (N/m); ; +Morison['M3N7FDxi'] = False # (N/m); ; +Morison['M3N8FDxi'] = False # (N/m); ; +Morison['M3N9FDxi'] = False # (N/m); ; +Morison['M4N1FDxi'] = False # (N/m); ; +Morison['M4N2FDxi'] = False # (N/m); ; +Morison['M4N3FDxi'] = False # (N/m); ; +Morison['M4N4FDxi'] = False # (N/m); ; +Morison['M4N5FDxi'] = False # (N/m); ; +Morison['M4N6FDxi'] = False # (N/m); ; +Morison['M4N7FDxi'] = False # (N/m); ; +Morison['M4N8FDxi'] = False # (N/m); ; +Morison['M4N9FDxi'] = False # (N/m); ; +Morison['M5N1FDxi'] = False # (N/m); ; +Morison['M5N2FDxi'] = False # (N/m); ; +Morison['M5N3FDxi'] = False # (N/m); ; +Morison['M5N4FDxi'] = False # (N/m); ; +Morison['M5N5FDxi'] = False # (N/m); ; +Morison['M5N6FDxi'] = False # (N/m); ; +Morison['M5N7FDxi'] = False # (N/m); ; +Morison['M5N8FDxi'] = False # (N/m); ; +Morison['M5N9FDxi'] = False # (N/m); ; +Morison['M6N1FDxi'] = False # (N/m); ; +Morison['M6N2FDxi'] = False # (N/m); ; +Morison['M6N3FDxi'] = False # (N/m); ; +Morison['M6N4FDxi'] = False # (N/m); ; +Morison['M6N5FDxi'] = False # (N/m); ; +Morison['M6N6FDxi'] = False # (N/m); ; +Morison['M6N7FDxi'] = False # (N/m); ; +Morison['M6N8FDxi'] = False # (N/m); ; +Morison['M6N9FDxi'] = False # (N/m); ; +Morison['M7N1FDxi'] = False # (N/m); ; +Morison['M7N2FDxi'] = False # (N/m); ; +Morison['M7N3FDxi'] = False # (N/m); ; +Morison['M7N4FDxi'] = False # (N/m); ; +Morison['M7N5FDxi'] = False # (N/m); ; +Morison['M7N6FDxi'] = False # (N/m); ; +Morison['M7N7FDxi'] = False # (N/m); ; +Morison['M7N8FDxi'] = False # (N/m); ; +Morison['M7N9FDxi'] = False # (N/m); ; +Morison['M8N1FDxi'] = False # (N/m); ; +Morison['M8N2FDxi'] = False # (N/m); ; +Morison['M8N3FDxi'] = False # (N/m); ; +Morison['M8N4FDxi'] = False # (N/m); ; +Morison['M8N5FDxi'] = False # (N/m); ; +Morison['M8N6FDxi'] = False # (N/m); ; +Morison['M8N7FDxi'] = False # (N/m); ; +Morison['M8N8FDxi'] = False # (N/m); ; +Morison['M8N9FDxi'] = False # (N/m); ; +Morison['M9N1FDxi'] = False # (N/m); ; +Morison['M9N2FDxi'] = False # (N/m); ; +Morison['M9N3FDxi'] = False # (N/m); ; +Morison['M9N4FDxi'] = False # (N/m); ; +Morison['M9N5FDxi'] = False # (N/m); ; +Morison['M9N6FDxi'] = False # (N/m); ; +Morison['M9N7FDxi'] = False # (N/m); ; +Morison['M9N8FDxi'] = False # (N/m); ; +Morison['M9N9FDxi'] = False # (N/m); ; +Morison['M1N1FDyi'] = False # (N/m); y-component of the distributed viscous-drag force expressed in the inertial coordinate system; +Morison['M1N2FDyi'] = False # (N/m); ; +Morison['M1N3FDyi'] = False # (N/m); ; +Morison['M1N4FDyi'] = False # (N/m); ; +Morison['M1N5FDyi'] = False # (N/m); ; +Morison['M1N6FDyi'] = False # (N/m); ; +Morison['M1N7FDyi'] = False # (N/m); ; +Morison['M1N8FDyi'] = False # (N/m); ; +Morison['M1N9FDyi'] = False # (N/m); ; +Morison['M2N1FDyi'] = False # (N/m); ; +Morison['M2N2FDyi'] = False # (N/m); ; +Morison['M2N3FDyi'] = False # (N/m); ; +Morison['M2N4FDyi'] = False # (N/m); ; +Morison['M2N5FDyi'] = False # (N/m); ; +Morison['M2N6FDyi'] = False # (N/m); ; +Morison['M2N7FDyi'] = False # (N/m); ; +Morison['M2N8FDyi'] = False # (N/m); ; +Morison['M2N9FDyi'] = False # (N/m); ; +Morison['M3N1FDyi'] = False # (N/m); ; +Morison['M3N2FDyi'] = False # (N/m); ; +Morison['M3N3FDyi'] = False # (N/m); ; +Morison['M3N4FDyi'] = False # (N/m); ; +Morison['M3N5FDyi'] = False # (N/m); ; +Morison['M3N6FDyi'] = False # (N/m); ; +Morison['M3N7FDyi'] = False # (N/m); ; +Morison['M3N8FDyi'] = False # (N/m); ; +Morison['M3N9FDyi'] = False # (N/m); ; +Morison['M4N1FDyi'] = False # (N/m); ; +Morison['M4N2FDyi'] = False # (N/m); ; +Morison['M4N3FDyi'] = False # (N/m); ; +Morison['M4N4FDyi'] = False # (N/m); ; +Morison['M4N5FDyi'] = False # (N/m); ; +Morison['M4N6FDyi'] = False # (N/m); ; +Morison['M4N7FDyi'] = False # (N/m); ; +Morison['M4N8FDyi'] = False # (N/m); ; +Morison['M4N9FDyi'] = False # (N/m); ; +Morison['M5N1FDyi'] = False # (N/m); ; +Morison['M5N2FDyi'] = False # (N/m); ; +Morison['M5N3FDyi'] = False # (N/m); ; +Morison['M5N4FDyi'] = False # (N/m); ; +Morison['M5N5FDyi'] = False # (N/m); ; +Morison['M5N6FDyi'] = False # (N/m); ; +Morison['M5N7FDyi'] = False # (N/m); ; +Morison['M5N8FDyi'] = False # (N/m); ; +Morison['M5N9FDyi'] = False # (N/m); ; +Morison['M6N1FDyi'] = False # (N/m); ; +Morison['M6N2FDyi'] = False # (N/m); ; +Morison['M6N3FDyi'] = False # (N/m); ; +Morison['M6N4FDyi'] = False # (N/m); ; +Morison['M6N5FDyi'] = False # (N/m); ; +Morison['M6N6FDyi'] = False # (N/m); ; +Morison['M6N7FDyi'] = False # (N/m); ; +Morison['M6N8FDyi'] = False # (N/m); ; +Morison['M6N9FDyi'] = False # (N/m); ; +Morison['M7N1FDyi'] = False # (N/m); ; +Morison['M7N2FDyi'] = False # (N/m); ; +Morison['M7N3FDyi'] = False # (N/m); ; +Morison['M7N4FDyi'] = False # (N/m); ; +Morison['M7N5FDyi'] = False # (N/m); ; +Morison['M7N6FDyi'] = False # (N/m); ; +Morison['M7N7FDyi'] = False # (N/m); ; +Morison['M7N8FDyi'] = False # (N/m); ; +Morison['M7N9FDyi'] = False # (N/m); ; +Morison['M8N1FDyi'] = False # (N/m); ; +Morison['M8N2FDyi'] = False # (N/m); ; +Morison['M8N3FDyi'] = False # (N/m); ; +Morison['M8N4FDyi'] = False # (N/m); ; +Morison['M8N5FDyi'] = False # (N/m); ; +Morison['M8N6FDyi'] = False # (N/m); ; +Morison['M8N7FDyi'] = False # (N/m); ; +Morison['M8N8FDyi'] = False # (N/m); ; +Morison['M8N9FDyi'] = False # (N/m); ; +Morison['M9N1FDyi'] = False # (N/m); ; +Morison['M9N2FDyi'] = False # (N/m); ; +Morison['M9N3FDyi'] = False # (N/m); ; +Morison['M9N4FDyi'] = False # (N/m); ; +Morison['M9N5FDyi'] = False # (N/m); ; +Morison['M9N6FDyi'] = False # (N/m); ; +Morison['M9N7FDyi'] = False # (N/m); ; +Morison['M9N8FDyi'] = False # (N/m); ; +Morison['M9N9FDyi'] = False # (N/m); ; +Morison['M1N1FDzi'] = False # (N/m); z-component of the distributed viscous-drag force expressed in the inertial coordinate system; +Morison['M1N2FDzi'] = False # (N/m); ; +Morison['M1N3FDzi'] = False # (N/m); ; +Morison['M1N4FDzi'] = False # (N/m); ; +Morison['M1N5FDzi'] = False # (N/m); ; +Morison['M1N6FDzi'] = False # (N/m); ; +Morison['M1N7FDzi'] = False # (N/m); ; +Morison['M1N8FDzi'] = False # (N/m); ; +Morison['M1N9FDzi'] = False # (N/m); ; +Morison['M2N1FDzi'] = False # (N/m); ; +Morison['M2N2FDzi'] = False # (N/m); ; +Morison['M2N3FDzi'] = False # (N/m); ; +Morison['M2N4FDzi'] = False # (N/m); ; +Morison['M2N5FDzi'] = False # (N/m); ; +Morison['M2N6FDzi'] = False # (N/m); ; +Morison['M2N7FDzi'] = False # (N/m); ; +Morison['M2N8FDzi'] = False # (N/m); ; +Morison['M2N9FDzi'] = False # (N/m); ; +Morison['M3N1FDzi'] = False # (N/m); ; +Morison['M3N2FDzi'] = False # (N/m); ; +Morison['M3N3FDzi'] = False # (N/m); ; +Morison['M3N4FDzi'] = False # (N/m); ; +Morison['M3N5FDzi'] = False # (N/m); ; +Morison['M3N6FDzi'] = False # (N/m); ; +Morison['M3N7FDzi'] = False # (N/m); ; +Morison['M3N8FDzi'] = False # (N/m); ; +Morison['M3N9FDzi'] = False # (N/m); ; +Morison['M4N1FDzi'] = False # (N/m); ; +Morison['M4N2FDzi'] = False # (N/m); ; +Morison['M4N3FDzi'] = False # (N/m); ; +Morison['M4N4FDzi'] = False # (N/m); ; +Morison['M4N5FDzi'] = False # (N/m); ; +Morison['M4N6FDzi'] = False # (N/m); ; +Morison['M4N7FDzi'] = False # (N/m); ; +Morison['M4N8FDzi'] = False # (N/m); ; +Morison['M4N9FDzi'] = False # (N/m); ; +Morison['M5N1FDzi'] = False # (N/m); ; +Morison['M5N2FDzi'] = False # (N/m); ; +Morison['M5N3FDzi'] = False # (N/m); ; +Morison['M5N4FDzi'] = False # (N/m); ; +Morison['M5N5FDzi'] = False # (N/m); ; +Morison['M5N6FDzi'] = False # (N/m); ; +Morison['M5N7FDzi'] = False # (N/m); ; +Morison['M5N8FDzi'] = False # (N/m); ; +Morison['M5N9FDzi'] = False # (N/m); ; +Morison['M6N1FDzi'] = False # (N/m); ; +Morison['M6N2FDzi'] = False # (N/m); ; +Morison['M6N3FDzi'] = False # (N/m); ; +Morison['M6N4FDzi'] = False # (N/m); ; +Morison['M6N5FDzi'] = False # (N/m); ; +Morison['M6N6FDzi'] = False # (N/m); ; +Morison['M6N7FDzi'] = False # (N/m); ; +Morison['M6N8FDzi'] = False # (N/m); ; +Morison['M6N9FDzi'] = False # (N/m); ; +Morison['M7N1FDzi'] = False # (N/m); ; +Morison['M7N2FDzi'] = False # (N/m); ; +Morison['M7N3FDzi'] = False # (N/m); ; +Morison['M7N4FDzi'] = False # (N/m); ; +Morison['M7N5FDzi'] = False # (N/m); ; +Morison['M7N6FDzi'] = False # (N/m); ; +Morison['M7N7FDzi'] = False # (N/m); ; +Morison['M7N8FDzi'] = False # (N/m); ; +Morison['M7N9FDzi'] = False # (N/m); ; +Morison['M8N1FDzi'] = False # (N/m); ; +Morison['M8N2FDzi'] = False # (N/m); ; +Morison['M8N3FDzi'] = False # (N/m); ; +Morison['M8N4FDzi'] = False # (N/m); ; +Morison['M8N5FDzi'] = False # (N/m); ; +Morison['M8N6FDzi'] = False # (N/m); ; +Morison['M8N7FDzi'] = False # (N/m); ; +Morison['M8N8FDzi'] = False # (N/m); ; +Morison['M8N9FDzi'] = False # (N/m); ; +Morison['M9N1FDzi'] = False # (N/m); ; +Morison['M9N2FDzi'] = False # (N/m); ; +Morison['M9N3FDzi'] = False # (N/m); ; +Morison['M9N4FDzi'] = False # (N/m); ; +Morison['M9N5FDzi'] = False # (N/m); ; +Morison['M9N6FDzi'] = False # (N/m); ; +Morison['M9N7FDzi'] = False # (N/m); ; +Morison['M9N8FDzi'] = False # (N/m); ; +Morison['M9N9FDzi'] = False # (N/m); ; +Morison['M1N1FIxi'] = False # (N/m); x-component of the distributed fluid inertia force expressed in the inertial coordinate system; +Morison['M1N2FIxi'] = False # (N/m); ; +Morison['M1N3FIxi'] = False # (N/m); ; +Morison['M1N4FIxi'] = False # (N/m); ; +Morison['M1N5FIxi'] = False # (N/m); ; +Morison['M1N6FIxi'] = False # (N/m); ; +Morison['M1N7FIxi'] = False # (N/m); ; +Morison['M1N8FIxi'] = False # (N/m); ; +Morison['M1N9FIxi'] = False # (N/m); ; +Morison['M2N1FIxi'] = False # (N/m); ; +Morison['M2N2FIxi'] = False # (N/m); ; +Morison['M2N3FIxi'] = False # (N/m); ; +Morison['M2N4FIxi'] = False # (N/m); ; +Morison['M2N5FIxi'] = False # (N/m); ; +Morison['M2N6FIxi'] = False # (N/m); ; +Morison['M2N7FIxi'] = False # (N/m); ; +Morison['M2N8FIxi'] = False # (N/m); ; +Morison['M2N9FIxi'] = False # (N/m); ; +Morison['M3N1FIxi'] = False # (N/m); ; +Morison['M3N2FIxi'] = False # (N/m); ; +Morison['M3N3FIxi'] = False # (N/m); ; +Morison['M3N4FIxi'] = False # (N/m); ; +Morison['M3N5FIxi'] = False # (N/m); ; +Morison['M3N6FIxi'] = False # (N/m); ; +Morison['M3N7FIxi'] = False # (N/m); ; +Morison['M3N8FIxi'] = False # (N/m); ; +Morison['M3N9FIxi'] = False # (N/m); ; +Morison['M4N1FIxi'] = False # (N/m); ; +Morison['M4N2FIxi'] = False # (N/m); ; +Morison['M4N3FIxi'] = False # (N/m); ; +Morison['M4N4FIxi'] = False # (N/m); ; +Morison['M4N5FIxi'] = False # (N/m); ; +Morison['M4N6FIxi'] = False # (N/m); ; +Morison['M4N7FIxi'] = False # (N/m); ; +Morison['M4N8FIxi'] = False # (N/m); ; +Morison['M4N9FIxi'] = False # (N/m); ; +Morison['M5N1FIxi'] = False # (N/m); ; +Morison['M5N2FIxi'] = False # (N/m); ; +Morison['M5N3FIxi'] = False # (N/m); ; +Morison['M5N4FIxi'] = False # (N/m); ; +Morison['M5N5FIxi'] = False # (N/m); ; +Morison['M5N6FIxi'] = False # (N/m); ; +Morison['M5N7FIxi'] = False # (N/m); ; +Morison['M5N8FIxi'] = False # (N/m); ; +Morison['M5N9FIxi'] = False # (N/m); ; +Morison['M6N1FIxi'] = False # (N/m); ; +Morison['M6N2FIxi'] = False # (N/m); ; +Morison['M6N3FIxi'] = False # (N/m); ; +Morison['M6N4FIxi'] = False # (N/m); ; +Morison['M6N5FIxi'] = False # (N/m); ; +Morison['M6N6FIxi'] = False # (N/m); ; +Morison['M6N7FIxi'] = False # (N/m); ; +Morison['M6N8FIxi'] = False # (N/m); ; +Morison['M6N9FIxi'] = False # (N/m); ; +Morison['M7N1FIxi'] = False # (N/m); ; +Morison['M7N2FIxi'] = False # (N/m); ; +Morison['M7N3FIxi'] = False # (N/m); ; +Morison['M7N4FIxi'] = False # (N/m); ; +Morison['M7N5FIxi'] = False # (N/m); ; +Morison['M7N6FIxi'] = False # (N/m); ; +Morison['M7N7FIxi'] = False # (N/m); ; +Morison['M7N8FIxi'] = False # (N/m); ; +Morison['M7N9FIxi'] = False # (N/m); ; +Morison['M8N1FIxi'] = False # (N/m); ; +Morison['M8N2FIxi'] = False # (N/m); ; +Morison['M8N3FIxi'] = False # (N/m); ; +Morison['M8N4FIxi'] = False # (N/m); ; +Morison['M8N5FIxi'] = False # (N/m); ; +Morison['M8N6FIxi'] = False # (N/m); ; +Morison['M8N7FIxi'] = False # (N/m); ; +Morison['M8N8FIxi'] = False # (N/m); ; +Morison['M8N9FIxi'] = False # (N/m); ; +Morison['M9N1FIxi'] = False # (N/m); ; +Morison['M9N2FIxi'] = False # (N/m); ; +Morison['M9N3FIxi'] = False # (N/m); ; +Morison['M9N4FIxi'] = False # (N/m); ; +Morison['M9N5FIxi'] = False # (N/m); ; +Morison['M9N6FIxi'] = False # (N/m); ; +Morison['M9N7FIxi'] = False # (N/m); ; +Morison['M9N8FIxi'] = False # (N/m); ; +Morison['M9N9FIxi'] = False # (N/m); ; +Morison['M1N1FIyi'] = False # (N/m); y-component of the distributed fluid inertia force expressed in the inertial coordinate system; +Morison['M1N2FIyi'] = False # (N/m); ; +Morison['M1N3FIyi'] = False # (N/m); ; +Morison['M1N4FIyi'] = False # (N/m); ; +Morison['M1N5FIyi'] = False # (N/m); ; +Morison['M1N6FIyi'] = False # (N/m); ; +Morison['M1N7FIyi'] = False # (N/m); ; +Morison['M1N8FIyi'] = False # (N/m); ; +Morison['M1N9FIyi'] = False # (N/m); ; +Morison['M2N1FIyi'] = False # (N/m); ; +Morison['M2N2FIyi'] = False # (N/m); ; +Morison['M2N3FIyi'] = False # (N/m); ; +Morison['M2N4FIyi'] = False # (N/m); ; +Morison['M2N5FIyi'] = False # (N/m); ; +Morison['M2N6FIyi'] = False # (N/m); ; +Morison['M2N7FIyi'] = False # (N/m); ; +Morison['M2N8FIyi'] = False # (N/m); ; +Morison['M2N9FIyi'] = False # (N/m); ; +Morison['M3N1FIyi'] = False # (N/m); ; +Morison['M3N2FIyi'] = False # (N/m); ; +Morison['M3N3FIyi'] = False # (N/m); ; +Morison['M3N4FIyi'] = False # (N/m); ; +Morison['M3N5FIyi'] = False # (N/m); ; +Morison['M3N6FIyi'] = False # (N/m); ; +Morison['M3N7FIyi'] = False # (N/m); ; +Morison['M3N8FIyi'] = False # (N/m); ; +Morison['M3N9FIyi'] = False # (N/m); ; +Morison['M4N1FIyi'] = False # (N/m); ; +Morison['M4N2FIyi'] = False # (N/m); ; +Morison['M4N3FIyi'] = False # (N/m); ; +Morison['M4N4FIyi'] = False # (N/m); ; +Morison['M4N5FIyi'] = False # (N/m); ; +Morison['M4N6FIyi'] = False # (N/m); ; +Morison['M4N7FIyi'] = False # (N/m); ; +Morison['M4N8FIyi'] = False # (N/m); ; +Morison['M4N9FIyi'] = False # (N/m); ; +Morison['M5N1FIyi'] = False # (N/m); ; +Morison['M5N2FIyi'] = False # (N/m); ; +Morison['M5N3FIyi'] = False # (N/m); ; +Morison['M5N4FIyi'] = False # (N/m); ; +Morison['M5N5FIyi'] = False # (N/m); ; +Morison['M5N6FIyi'] = False # (N/m); ; +Morison['M5N7FIyi'] = False # (N/m); ; +Morison['M5N8FIyi'] = False # (N/m); ; +Morison['M5N9FIyi'] = False # (N/m); ; +Morison['M6N1FIyi'] = False # (N/m); ; +Morison['M6N2FIyi'] = False # (N/m); ; +Morison['M6N3FIyi'] = False # (N/m); ; +Morison['M6N4FIyi'] = False # (N/m); ; +Morison['M6N5FIyi'] = False # (N/m); ; +Morison['M6N6FIyi'] = False # (N/m); ; +Morison['M6N7FIyi'] = False # (N/m); ; +Morison['M6N8FIyi'] = False # (N/m); ; +Morison['M6N9FIyi'] = False # (N/m); ; +Morison['M7N1FIyi'] = False # (N/m); ; +Morison['M7N2FIyi'] = False # (N/m); ; +Morison['M7N3FIyi'] = False # (N/m); ; +Morison['M7N4FIyi'] = False # (N/m); ; +Morison['M7N5FIyi'] = False # (N/m); ; +Morison['M7N6FIyi'] = False # (N/m); ; +Morison['M7N7FIyi'] = False # (N/m); ; +Morison['M7N8FIyi'] = False # (N/m); ; +Morison['M7N9FIyi'] = False # (N/m); ; +Morison['M8N1FIyi'] = False # (N/m); ; +Morison['M8N2FIyi'] = False # (N/m); ; +Morison['M8N3FIyi'] = False # (N/m); ; +Morison['M8N4FIyi'] = False # (N/m); ; +Morison['M8N5FIyi'] = False # (N/m); ; +Morison['M8N6FIyi'] = False # (N/m); ; +Morison['M8N7FIyi'] = False # (N/m); ; +Morison['M8N8FIyi'] = False # (N/m); ; +Morison['M8N9FIyi'] = False # (N/m); ; +Morison['M9N1FIyi'] = False # (N/m); ; +Morison['M9N2FIyi'] = False # (N/m); ; +Morison['M9N3FIyi'] = False # (N/m); ; +Morison['M9N4FIyi'] = False # (N/m); ; +Morison['M9N5FIyi'] = False # (N/m); ; +Morison['M9N6FIyi'] = False # (N/m); ; +Morison['M9N7FIyi'] = False # (N/m); ; +Morison['M9N8FIyi'] = False # (N/m); ; +Morison['M9N9FIyi'] = False # (N/m); ; +Morison['M1N1FIzi'] = False # (N/m); z-component of the distributed fluid inertia force expressed in the inertial coordinate system; +Morison['M1N2FIzi'] = False # (N/m); ; +Morison['M1N3FIzi'] = False # (N/m); ; +Morison['M1N4FIzi'] = False # (N/m); ; +Morison['M1N5FIzi'] = False # (N/m); ; +Morison['M1N6FIzi'] = False # (N/m); ; +Morison['M1N7FIzi'] = False # (N/m); ; +Morison['M1N8FIzi'] = False # (N/m); ; +Morison['M1N9FIzi'] = False # (N/m); ; +Morison['M2N1FIzi'] = False # (N/m); ; +Morison['M2N2FIzi'] = False # (N/m); ; +Morison['M2N3FIzi'] = False # (N/m); ; +Morison['M2N4FIzi'] = False # (N/m); ; +Morison['M2N5FIzi'] = False # (N/m); ; +Morison['M2N6FIzi'] = False # (N/m); ; +Morison['M2N7FIzi'] = False # (N/m); ; +Morison['M2N8FIzi'] = False # (N/m); ; +Morison['M2N9FIzi'] = False # (N/m); ; +Morison['M3N1FIzi'] = False # (N/m); ; +Morison['M3N2FIzi'] = False # (N/m); ; +Morison['M3N3FIzi'] = False # (N/m); ; +Morison['M3N4FIzi'] = False # (N/m); ; +Morison['M3N5FIzi'] = False # (N/m); ; +Morison['M3N6FIzi'] = False # (N/m); ; +Morison['M3N7FIzi'] = False # (N/m); ; +Morison['M3N8FIzi'] = False # (N/m); ; +Morison['M3N9FIzi'] = False # (N/m); ; +Morison['M4N1FIzi'] = False # (N/m); ; +Morison['M4N2FIzi'] = False # (N/m); ; +Morison['M4N3FIzi'] = False # (N/m); ; +Morison['M4N4FIzi'] = False # (N/m); ; +Morison['M4N5FIzi'] = False # (N/m); ; +Morison['M4N6FIzi'] = False # (N/m); ; +Morison['M4N7FIzi'] = False # (N/m); ; +Morison['M4N8FIzi'] = False # (N/m); ; +Morison['M4N9FIzi'] = False # (N/m); ; +Morison['M5N1FIzi'] = False # (N/m); ; +Morison['M5N2FIzi'] = False # (N/m); ; +Morison['M5N3FIzi'] = False # (N/m); ; +Morison['M5N4FIzi'] = False # (N/m); ; +Morison['M5N5FIzi'] = False # (N/m); ; +Morison['M5N6FIzi'] = False # (N/m); ; +Morison['M5N7FIzi'] = False # (N/m); ; +Morison['M5N8FIzi'] = False # (N/m); ; +Morison['M5N9FIzi'] = False # (N/m); ; +Morison['M6N1FIzi'] = False # (N/m); ; +Morison['M6N2FIzi'] = False # (N/m); ; +Morison['M6N3FIzi'] = False # (N/m); ; +Morison['M6N4FIzi'] = False # (N/m); ; +Morison['M6N5FIzi'] = False # (N/m); ; +Morison['M6N6FIzi'] = False # (N/m); ; +Morison['M6N7FIzi'] = False # (N/m); ; +Morison['M6N8FIzi'] = False # (N/m); ; +Morison['M6N9FIzi'] = False # (N/m); ; +Morison['M7N1FIzi'] = False # (N/m); ; +Morison['M7N2FIzi'] = False # (N/m); ; +Morison['M7N3FIzi'] = False # (N/m); ; +Morison['M7N4FIzi'] = False # (N/m); ; +Morison['M7N5FIzi'] = False # (N/m); ; +Morison['M7N6FIzi'] = False # (N/m); ; +Morison['M7N7FIzi'] = False # (N/m); ; +Morison['M7N8FIzi'] = False # (N/m); ; +Morison['M7N9FIzi'] = False # (N/m); ; +Morison['M8N1FIzi'] = False # (N/m); ; +Morison['M8N2FIzi'] = False # (N/m); ; +Morison['M8N3FIzi'] = False # (N/m); ; +Morison['M8N4FIzi'] = False # (N/m); ; +Morison['M8N5FIzi'] = False # (N/m); ; +Morison['M8N6FIzi'] = False # (N/m); ; +Morison['M8N7FIzi'] = False # (N/m); ; +Morison['M8N8FIzi'] = False # (N/m); ; +Morison['M8N9FIzi'] = False # (N/m); ; +Morison['M9N1FIzi'] = False # (N/m); ; +Morison['M9N2FIzi'] = False # (N/m); ; +Morison['M9N3FIzi'] = False # (N/m); ; +Morison['M9N4FIzi'] = False # (N/m); ; +Morison['M9N5FIzi'] = False # (N/m); ; +Morison['M9N6FIzi'] = False # (N/m); ; +Morison['M9N7FIzi'] = False # (N/m); ; +Morison['M9N8FIzi'] = False # (N/m); ; +Morison['M9N9FIzi'] = False # (N/m); ; +Morison['M1N1FBxi'] = False # (N/m); x-component of the distributed bouyancy force expressed in the inertial coordinate system; +Morison['M1N2FBxi'] = False # (N/m); ; +Morison['M1N3FBxi'] = False # (N/m); ; +Morison['M1N4FBxi'] = False # (N/m); ; +Morison['M1N5FBxi'] = False # (N/m); ; +Morison['M1N6FBxi'] = False # (N/m); ; +Morison['M1N7FBxi'] = False # (N/m); ; +Morison['M1N8FBxi'] = False # (N/m); ; +Morison['M1N9FBxi'] = False # (N/m); ; +Morison['M2N1FBxi'] = False # (N/m); ; +Morison['M2N2FBxi'] = False # (N/m); ; +Morison['M2N3FBxi'] = False # (N/m); ; +Morison['M2N4FBxi'] = False # (N/m); ; +Morison['M2N5FBxi'] = False # (N/m); ; +Morison['M2N6FBxi'] = False # (N/m); ; +Morison['M2N7FBxi'] = False # (N/m); ; +Morison['M2N8FBxi'] = False # (N/m); ; +Morison['M2N9FBxi'] = False # (N/m); ; +Morison['M3N1FBxi'] = False # (N/m); ; +Morison['M3N2FBxi'] = False # (N/m); ; +Morison['M3N3FBxi'] = False # (N/m); ; +Morison['M3N4FBxi'] = False # (N/m); ; +Morison['M3N5FBxi'] = False # (N/m); ; +Morison['M3N6FBxi'] = False # (N/m); ; +Morison['M3N7FBxi'] = False # (N/m); ; +Morison['M3N8FBxi'] = False # (N/m); ; +Morison['M3N9FBxi'] = False # (N/m); ; +Morison['M4N1FBxi'] = False # (N/m); ; +Morison['M4N2FBxi'] = False # (N/m); ; +Morison['M4N3FBxi'] = False # (N/m); ; +Morison['M4N4FBxi'] = False # (N/m); ; +Morison['M4N5FBxi'] = False # (N/m); ; +Morison['M4N6FBxi'] = False # (N/m); ; +Morison['M4N7FBxi'] = False # (N/m); ; +Morison['M4N8FBxi'] = False # (N/m); ; +Morison['M4N9FBxi'] = False # (N/m); ; +Morison['M5N1FBxi'] = False # (N/m); ; +Morison['M5N2FBxi'] = False # (N/m); ; +Morison['M5N3FBxi'] = False # (N/m); ; +Morison['M5N4FBxi'] = False # (N/m); ; +Morison['M5N5FBxi'] = False # (N/m); ; +Morison['M5N6FBxi'] = False # (N/m); ; +Morison['M5N7FBxi'] = False # (N/m); ; +Morison['M5N8FBxi'] = False # (N/m); ; +Morison['M5N9FBxi'] = False # (N/m); ; +Morison['M6N1FBxi'] = False # (N/m); ; +Morison['M6N2FBxi'] = False # (N/m); ; +Morison['M6N3FBxi'] = False # (N/m); ; +Morison['M6N4FBxi'] = False # (N/m); ; +Morison['M6N5FBxi'] = False # (N/m); ; +Morison['M6N6FBxi'] = False # (N/m); ; +Morison['M6N7FBxi'] = False # (N/m); ; +Morison['M6N8FBxi'] = False # (N/m); ; +Morison['M6N9FBxi'] = False # (N/m); ; +Morison['M7N1FBxi'] = False # (N/m); ; +Morison['M7N2FBxi'] = False # (N/m); ; +Morison['M7N3FBxi'] = False # (N/m); ; +Morison['M7N4FBxi'] = False # (N/m); ; +Morison['M7N5FBxi'] = False # (N/m); ; +Morison['M7N6FBxi'] = False # (N/m); ; +Morison['M7N7FBxi'] = False # (N/m); ; +Morison['M7N8FBxi'] = False # (N/m); ; +Morison['M7N9FBxi'] = False # (N/m); ; +Morison['M8N1FBxi'] = False # (N/m); ; +Morison['M8N2FBxi'] = False # (N/m); ; +Morison['M8N3FBxi'] = False # (N/m); ; +Morison['M8N4FBxi'] = False # (N/m); ; +Morison['M8N5FBxi'] = False # (N/m); ; +Morison['M8N6FBxi'] = False # (N/m); ; +Morison['M8N7FBxi'] = False # (N/m); ; +Morison['M8N8FBxi'] = False # (N/m); ; +Morison['M8N9FBxi'] = False # (N/m); ; +Morison['M9N1FBxi'] = False # (N/m); ; +Morison['M9N2FBxi'] = False # (N/m); ; +Morison['M9N3FBxi'] = False # (N/m); ; +Morison['M9N4FBxi'] = False # (N/m); ; +Morison['M9N5FBxi'] = False # (N/m); ; +Morison['M9N6FBxi'] = False # (N/m); ; +Morison['M9N7FBxi'] = False # (N/m); ; +Morison['M9N8FBxi'] = False # (N/m); ; +Morison['M9N9FBxi'] = False # (N/m); ; +Morison['M1N1FByi'] = False # (N/m); y-component of the distributed bouyancy force expressed in the inertial coordinate system; +Morison['M1N2FByi'] = False # (N/m); ; +Morison['M1N3FByi'] = False # (N/m); ; +Morison['M1N4FByi'] = False # (N/m); ; +Morison['M1N5FByi'] = False # (N/m); ; +Morison['M1N6FByi'] = False # (N/m); ; +Morison['M1N7FByi'] = False # (N/m); ; +Morison['M1N8FByi'] = False # (N/m); ; +Morison['M1N9FByi'] = False # (N/m); ; +Morison['M2N1FByi'] = False # (N/m); ; +Morison['M2N2FByi'] = False # (N/m); ; +Morison['M2N3FByi'] = False # (N/m); ; +Morison['M2N4FByi'] = False # (N/m); ; +Morison['M2N5FByi'] = False # (N/m); ; +Morison['M2N6FByi'] = False # (N/m); ; +Morison['M2N7FByi'] = False # (N/m); ; +Morison['M2N8FByi'] = False # (N/m); ; +Morison['M2N9FByi'] = False # (N/m); ; +Morison['M3N1FByi'] = False # (N/m); ; +Morison['M3N2FByi'] = False # (N/m); ; +Morison['M3N3FByi'] = False # (N/m); ; +Morison['M3N4FByi'] = False # (N/m); ; +Morison['M3N5FByi'] = False # (N/m); ; +Morison['M3N6FByi'] = False # (N/m); ; +Morison['M3N7FByi'] = False # (N/m); ; +Morison['M3N8FByi'] = False # (N/m); ; +Morison['M3N9FByi'] = False # (N/m); ; +Morison['M4N1FByi'] = False # (N/m); ; +Morison['M4N2FByi'] = False # (N/m); ; +Morison['M4N3FByi'] = False # (N/m); ; +Morison['M4N4FByi'] = False # (N/m); ; +Morison['M4N5FByi'] = False # (N/m); ; +Morison['M4N6FByi'] = False # (N/m); ; +Morison['M4N7FByi'] = False # (N/m); ; +Morison['M4N8FByi'] = False # (N/m); ; +Morison['M4N9FByi'] = False # (N/m); ; +Morison['M5N1FByi'] = False # (N/m); ; +Morison['M5N2FByi'] = False # (N/m); ; +Morison['M5N3FByi'] = False # (N/m); ; +Morison['M5N4FByi'] = False # (N/m); ; +Morison['M5N5FByi'] = False # (N/m); ; +Morison['M5N6FByi'] = False # (N/m); ; +Morison['M5N7FByi'] = False # (N/m); ; +Morison['M5N8FByi'] = False # (N/m); ; +Morison['M5N9FByi'] = False # (N/m); ; +Morison['M6N1FByi'] = False # (N/m); ; +Morison['M6N2FByi'] = False # (N/m); ; +Morison['M6N3FByi'] = False # (N/m); ; +Morison['M6N4FByi'] = False # (N/m); ; +Morison['M6N5FByi'] = False # (N/m); ; +Morison['M6N6FByi'] = False # (N/m); ; +Morison['M6N7FByi'] = False # (N/m); ; +Morison['M6N8FByi'] = False # (N/m); ; +Morison['M6N9FByi'] = False # (N/m); ; +Morison['M7N1FByi'] = False # (N/m); ; +Morison['M7N2FByi'] = False # (N/m); ; +Morison['M7N3FByi'] = False # (N/m); ; +Morison['M7N4FByi'] = False # (N/m); ; +Morison['M7N5FByi'] = False # (N/m); ; +Morison['M7N6FByi'] = False # (N/m); ; +Morison['M7N7FByi'] = False # (N/m); ; +Morison['M7N8FByi'] = False # (N/m); ; +Morison['M7N9FByi'] = False # (N/m); ; +Morison['M8N1FByi'] = False # (N/m); ; +Morison['M8N2FByi'] = False # (N/m); ; +Morison['M8N3FByi'] = False # (N/m); ; +Morison['M8N4FByi'] = False # (N/m); ; +Morison['M8N5FByi'] = False # (N/m); ; +Morison['M8N6FByi'] = False # (N/m); ; +Morison['M8N7FByi'] = False # (N/m); ; +Morison['M8N8FByi'] = False # (N/m); ; +Morison['M8N9FByi'] = False # (N/m); ; +Morison['M9N1FByi'] = False # (N/m); ; +Morison['M9N2FByi'] = False # (N/m); ; +Morison['M9N3FByi'] = False # (N/m); ; +Morison['M9N4FByi'] = False # (N/m); ; +Morison['M9N5FByi'] = False # (N/m); ; +Morison['M9N6FByi'] = False # (N/m); ; +Morison['M9N7FByi'] = False # (N/m); ; +Morison['M9N8FByi'] = False # (N/m); ; +Morison['M9N9FByi'] = False # (N/m); ; +Morison['M1N1FBzi'] = False # (N/m); z-component of the distributed bouyancy force expressed in the inertial coordinate system; +Morison['M1N2FBzi'] = False # (N/m); ; +Morison['M1N3FBzi'] = False # (N/m); ; +Morison['M1N4FBzi'] = False # (N/m); ; +Morison['M1N5FBzi'] = False # (N/m); ; +Morison['M1N6FBzi'] = False # (N/m); ; +Morison['M1N7FBzi'] = False # (N/m); ; +Morison['M1N8FBzi'] = False # (N/m); ; +Morison['M1N9FBzi'] = False # (N/m); ; +Morison['M2N1FBzi'] = False # (N/m); ; +Morison['M2N2FBzi'] = False # (N/m); ; +Morison['M2N3FBzi'] = False # (N/m); ; +Morison['M2N4FBzi'] = False # (N/m); ; +Morison['M2N5FBzi'] = False # (N/m); ; +Morison['M2N6FBzi'] = False # (N/m); ; +Morison['M2N7FBzi'] = False # (N/m); ; +Morison['M2N8FBzi'] = False # (N/m); ; +Morison['M2N9FBzi'] = False # (N/m); ; +Morison['M3N1FBzi'] = False # (N/m); ; +Morison['M3N2FBzi'] = False # (N/m); ; +Morison['M3N3FBzi'] = False # (N/m); ; +Morison['M3N4FBzi'] = False # (N/m); ; +Morison['M3N5FBzi'] = False # (N/m); ; +Morison['M3N6FBzi'] = False # (N/m); ; +Morison['M3N7FBzi'] = False # (N/m); ; +Morison['M3N8FBzi'] = False # (N/m); ; +Morison['M3N9FBzi'] = False # (N/m); ; +Morison['M4N1FBzi'] = False # (N/m); ; +Morison['M4N2FBzi'] = False # (N/m); ; +Morison['M4N3FBzi'] = False # (N/m); ; +Morison['M4N4FBzi'] = False # (N/m); ; +Morison['M4N5FBzi'] = False # (N/m); ; +Morison['M4N6FBzi'] = False # (N/m); ; +Morison['M4N7FBzi'] = False # (N/m); ; +Morison['M4N8FBzi'] = False # (N/m); ; +Morison['M4N9FBzi'] = False # (N/m); ; +Morison['M5N1FBzi'] = False # (N/m); ; +Morison['M5N2FBzi'] = False # (N/m); ; +Morison['M5N3FBzi'] = False # (N/m); ; +Morison['M5N4FBzi'] = False # (N/m); ; +Morison['M5N5FBzi'] = False # (N/m); ; +Morison['M5N6FBzi'] = False # (N/m); ; +Morison['M5N7FBzi'] = False # (N/m); ; +Morison['M5N8FBzi'] = False # (N/m); ; +Morison['M5N9FBzi'] = False # (N/m); ; +Morison['M6N1FBzi'] = False # (N/m); ; +Morison['M6N2FBzi'] = False # (N/m); ; +Morison['M6N3FBzi'] = False # (N/m); ; +Morison['M6N4FBzi'] = False # (N/m); ; +Morison['M6N5FBzi'] = False # (N/m); ; +Morison['M6N6FBzi'] = False # (N/m); ; +Morison['M6N7FBzi'] = False # (N/m); ; +Morison['M6N8FBzi'] = False # (N/m); ; +Morison['M6N9FBzi'] = False # (N/m); ; +Morison['M7N1FBzi'] = False # (N/m); ; +Morison['M7N2FBzi'] = False # (N/m); ; +Morison['M7N3FBzi'] = False # (N/m); ; +Morison['M7N4FBzi'] = False # (N/m); ; +Morison['M7N5FBzi'] = False # (N/m); ; +Morison['M7N6FBzi'] = False # (N/m); ; +Morison['M7N7FBzi'] = False # (N/m); ; +Morison['M7N8FBzi'] = False # (N/m); ; +Morison['M7N9FBzi'] = False # (N/m); ; +Morison['M8N1FBzi'] = False # (N/m); ; +Morison['M8N2FBzi'] = False # (N/m); ; +Morison['M8N3FBzi'] = False # (N/m); ; +Morison['M8N4FBzi'] = False # (N/m); ; +Morison['M8N5FBzi'] = False # (N/m); ; +Morison['M8N6FBzi'] = False # (N/m); ; +Morison['M8N7FBzi'] = False # (N/m); ; +Morison['M8N8FBzi'] = False # (N/m); ; +Morison['M8N9FBzi'] = False # (N/m); ; +Morison['M9N1FBzi'] = False # (N/m); ; +Morison['M9N2FBzi'] = False # (N/m); ; +Morison['M9N3FBzi'] = False # (N/m); ; +Morison['M9N4FBzi'] = False # (N/m); ; +Morison['M9N5FBzi'] = False # (N/m); ; +Morison['M9N6FBzi'] = False # (N/m); ; +Morison['M9N7FBzi'] = False # (N/m); ; +Morison['M9N8FBzi'] = False # (N/m); ; +Morison['M9N9FBzi'] = False # (N/m); ; +Morison['M1N1MBxi'] = False # (N-m/m); x-component of the distributed bouyancy moment expressed in the inertial coordinate system; +Morison['M1N2MBxi'] = False # (N-m/m); ; +Morison['M1N3MBxi'] = False # (N-m/m); ; +Morison['M1N4MBxi'] = False # (N-m/m); ; +Morison['M1N5MBxi'] = False # (N-m/m); ; +Morison['M1N6MBxi'] = False # (N-m/m); ; +Morison['M1N7MBxi'] = False # (N-m/m); ; +Morison['M1N8MBxi'] = False # (N-m/m); ; +Morison['M1N9MBxi'] = False # (N-m/m); ; +Morison['M2N1MBxi'] = False # (N-m/m); ; +Morison['M2N2MBxi'] = False # (N-m/m); ; +Morison['M2N3MBxi'] = False # (N-m/m); ; +Morison['M2N4MBxi'] = False # (N-m/m); ; +Morison['M2N5MBxi'] = False # (N-m/m); ; +Morison['M2N6MBxi'] = False # (N-m/m); ; +Morison['M2N7MBxi'] = False # (N-m/m); ; +Morison['M2N8MBxi'] = False # (N-m/m); ; +Morison['M2N9MBxi'] = False # (N-m/m); ; +Morison['M3N1MBxi'] = False # (N-m/m); ; +Morison['M3N2MBxi'] = False # (N-m/m); ; +Morison['M3N3MBxi'] = False # (N-m/m); ; +Morison['M3N4MBxi'] = False # (N-m/m); ; +Morison['M3N5MBxi'] = False # (N-m/m); ; +Morison['M3N6MBxi'] = False # (N-m/m); ; +Morison['M3N7MBxi'] = False # (N-m/m); ; +Morison['M3N8MBxi'] = False # (N-m/m); ; +Morison['M3N9MBxi'] = False # (N-m/m); ; +Morison['M4N1MBxi'] = False # (N-m/m); ; +Morison['M4N2MBxi'] = False # (N-m/m); ; +Morison['M4N3MBxi'] = False # (N-m/m); ; +Morison['M4N4MBxi'] = False # (N-m/m); ; +Morison['M4N5MBxi'] = False # (N-m/m); ; +Morison['M4N6MBxi'] = False # (N-m/m); ; +Morison['M4N7MBxi'] = False # (N-m/m); ; +Morison['M4N8MBxi'] = False # (N-m/m); ; +Morison['M4N9MBxi'] = False # (N-m/m); ; +Morison['M5N1MBxi'] = False # (N-m/m); ; +Morison['M5N2MBxi'] = False # (N-m/m); ; +Morison['M5N3MBxi'] = False # (N-m/m); ; +Morison['M5N4MBxi'] = False # (N-m/m); ; +Morison['M5N5MBxi'] = False # (N-m/m); ; +Morison['M5N6MBxi'] = False # (N-m/m); ; +Morison['M5N7MBxi'] = False # (N-m/m); ; +Morison['M5N8MBxi'] = False # (N-m/m); ; +Morison['M5N9MBxi'] = False # (N-m/m); ; +Morison['M6N1MBxi'] = False # (N-m/m); ; +Morison['M6N2MBxi'] = False # (N-m/m); ; +Morison['M6N3MBxi'] = False # (N-m/m); ; +Morison['M6N4MBxi'] = False # (N-m/m); ; +Morison['M6N5MBxi'] = False # (N-m/m); ; +Morison['M6N6MBxi'] = False # (N-m/m); ; +Morison['M6N7MBxi'] = False # (N-m/m); ; +Morison['M6N8MBxi'] = False # (N-m/m); ; +Morison['M6N9MBxi'] = False # (N-m/m); ; +Morison['M7N1MBxi'] = False # (N-m/m); ; +Morison['M7N2MBxi'] = False # (N-m/m); ; +Morison['M7N3MBxi'] = False # (N-m/m); ; +Morison['M7N4MBxi'] = False # (N-m/m); ; +Morison['M7N5MBxi'] = False # (N-m/m); ; +Morison['M7N6MBxi'] = False # (N-m/m); ; +Morison['M7N7MBxi'] = False # (N-m/m); ; +Morison['M7N8MBxi'] = False # (N-m/m); ; +Morison['M7N9MBxi'] = False # (N-m/m); ; +Morison['M8N1MBxi'] = False # (N-m/m); ; +Morison['M8N2MBxi'] = False # (N-m/m); ; +Morison['M8N3MBxi'] = False # (N-m/m); ; +Morison['M8N4MBxi'] = False # (N-m/m); ; +Morison['M8N5MBxi'] = False # (N-m/m); ; +Morison['M8N6MBxi'] = False # (N-m/m); ; +Morison['M8N7MBxi'] = False # (N-m/m); ; +Morison['M8N8MBxi'] = False # (N-m/m); ; +Morison['M8N9MBxi'] = False # (N-m/m); ; +Morison['M9N1MBxi'] = False # (N-m/m); ; +Morison['M9N2MBxi'] = False # (N-m/m); ; +Morison['M9N3MBxi'] = False # (N-m/m); ; +Morison['M9N4MBxi'] = False # (N-m/m); ; +Morison['M9N5MBxi'] = False # (N-m/m); ; +Morison['M9N6MBxi'] = False # (N-m/m); ; +Morison['M9N7MBxi'] = False # (N-m/m); ; +Morison['M9N8MBxi'] = False # (N-m/m); ; +Morison['M9N9MBxi'] = False # (N-m/m); ; +Morison['M1N1MByi'] = False # (N-m/m); y-component of the distributed bouyancy moment expressed in the inertial coordinate system; +Morison['M1N2MByi'] = False # (N-m/m); ; +Morison['M1N3MByi'] = False # (N-m/m); ; +Morison['M1N4MByi'] = False # (N-m/m); ; +Morison['M1N5MByi'] = False # (N-m/m); ; +Morison['M1N6MByi'] = False # (N-m/m); ; +Morison['M1N7MByi'] = False # (N-m/m); ; +Morison['M1N8MByi'] = False # (N-m/m); ; +Morison['M1N9MByi'] = False # (N-m/m); ; +Morison['M2N1MByi'] = False # (N-m/m); ; +Morison['M2N2MByi'] = False # (N-m/m); ; +Morison['M2N3MByi'] = False # (N-m/m); ; +Morison['M2N4MByi'] = False # (N-m/m); ; +Morison['M2N5MByi'] = False # (N-m/m); ; +Morison['M2N6MByi'] = False # (N-m/m); ; +Morison['M2N7MByi'] = False # (N-m/m); ; +Morison['M2N8MByi'] = False # (N-m/m); ; +Morison['M2N9MByi'] = False # (N-m/m); ; +Morison['M3N1MByi'] = False # (N-m/m); ; +Morison['M3N2MByi'] = False # (N-m/m); ; +Morison['M3N3MByi'] = False # (N-m/m); ; +Morison['M3N4MByi'] = False # (N-m/m); ; +Morison['M3N5MByi'] = False # (N-m/m); ; +Morison['M3N6MByi'] = False # (N-m/m); ; +Morison['M3N7MByi'] = False # (N-m/m); ; +Morison['M3N8MByi'] = False # (N-m/m); ; +Morison['M3N9MByi'] = False # (N-m/m); ; +Morison['M4N1MByi'] = False # (N-m/m); ; +Morison['M4N2MByi'] = False # (N-m/m); ; +Morison['M4N3MByi'] = False # (N-m/m); ; +Morison['M4N4MByi'] = False # (N-m/m); ; +Morison['M4N5MByi'] = False # (N-m/m); ; +Morison['M4N6MByi'] = False # (N-m/m); ; +Morison['M4N7MByi'] = False # (N-m/m); ; +Morison['M4N8MByi'] = False # (N-m/m); ; +Morison['M4N9MByi'] = False # (N-m/m); ; +Morison['M5N1MByi'] = False # (N-m/m); ; +Morison['M5N2MByi'] = False # (N-m/m); ; +Morison['M5N3MByi'] = False # (N-m/m); ; +Morison['M5N4MByi'] = False # (N-m/m); ; +Morison['M5N5MByi'] = False # (N-m/m); ; +Morison['M5N6MByi'] = False # (N-m/m); ; +Morison['M5N7MByi'] = False # (N-m/m); ; +Morison['M5N8MByi'] = False # (N-m/m); ; +Morison['M5N9MByi'] = False # (N-m/m); ; +Morison['M6N1MByi'] = False # (N-m/m); ; +Morison['M6N2MByi'] = False # (N-m/m); ; +Morison['M6N3MByi'] = False # (N-m/m); ; +Morison['M6N4MByi'] = False # (N-m/m); ; +Morison['M6N5MByi'] = False # (N-m/m); ; +Morison['M6N6MByi'] = False # (N-m/m); ; +Morison['M6N7MByi'] = False # (N-m/m); ; +Morison['M6N8MByi'] = False # (N-m/m); ; +Morison['M6N9MByi'] = False # (N-m/m); ; +Morison['M7N1MByi'] = False # (N-m/m); ; +Morison['M7N2MByi'] = False # (N-m/m); ; +Morison['M7N3MByi'] = False # (N-m/m); ; +Morison['M7N4MByi'] = False # (N-m/m); ; +Morison['M7N5MByi'] = False # (N-m/m); ; +Morison['M7N6MByi'] = False # (N-m/m); ; +Morison['M7N7MByi'] = False # (N-m/m); ; +Morison['M7N8MByi'] = False # (N-m/m); ; +Morison['M7N9MByi'] = False # (N-m/m); ; +Morison['M8N1MByi'] = False # (N-m/m); ; +Morison['M8N2MByi'] = False # (N-m/m); ; +Morison['M8N3MByi'] = False # (N-m/m); ; +Morison['M8N4MByi'] = False # (N-m/m); ; +Morison['M8N5MByi'] = False # (N-m/m); ; +Morison['M8N6MByi'] = False # (N-m/m); ; +Morison['M8N7MByi'] = False # (N-m/m); ; +Morison['M8N8MByi'] = False # (N-m/m); ; +Morison['M8N9MByi'] = False # (N-m/m); ; +Morison['M9N1MByi'] = False # (N-m/m); ; +Morison['M9N2MByi'] = False # (N-m/m); ; +Morison['M9N3MByi'] = False # (N-m/m); ; +Morison['M9N4MByi'] = False # (N-m/m); ; +Morison['M9N5MByi'] = False # (N-m/m); ; +Morison['M9N6MByi'] = False # (N-m/m); ; +Morison['M9N7MByi'] = False # (N-m/m); ; +Morison['M9N8MByi'] = False # (N-m/m); ; +Morison['M9N9MByi'] = False # (N-m/m); ; +Morison['M1N1MBzi'] = False # (N-m/m); z-component of the distributed bouyancy moment expressed in the inertial coordinate system; +Morison['M1N2MBzi'] = False # (N-m/m); ; +Morison['M1N3MBzi'] = False # (N-m/m); ; +Morison['M1N4MBzi'] = False # (N-m/m); ; +Morison['M1N5MBzi'] = False # (N-m/m); ; +Morison['M1N6MBzi'] = False # (N-m/m); ; +Morison['M1N7MBzi'] = False # (N-m/m); ; +Morison['M1N8MBzi'] = False # (N-m/m); ; +Morison['M1N9MBzi'] = False # (N-m/m); ; +Morison['M2N1MBzi'] = False # (N-m/m); ; +Morison['M2N2MBzi'] = False # (N-m/m); ; +Morison['M2N3MBzi'] = False # (N-m/m); ; +Morison['M2N4MBzi'] = False # (N-m/m); ; +Morison['M2N5MBzi'] = False # (N-m/m); ; +Morison['M2N6MBzi'] = False # (N-m/m); ; +Morison['M2N7MBzi'] = False # (N-m/m); ; +Morison['M2N8MBzi'] = False # (N-m/m); ; +Morison['M2N9MBzi'] = False # (N-m/m); ; +Morison['M3N1MBzi'] = False # (N-m/m); ; +Morison['M3N2MBzi'] = False # (N-m/m); ; +Morison['M3N3MBzi'] = False # (N-m/m); ; +Morison['M3N4MBzi'] = False # (N-m/m); ; +Morison['M3N5MBzi'] = False # (N-m/m); ; +Morison['M3N6MBzi'] = False # (N-m/m); ; +Morison['M3N7MBzi'] = False # (N-m/m); ; +Morison['M3N8MBzi'] = False # (N-m/m); ; +Morison['M3N9MBzi'] = False # (N-m/m); ; +Morison['M4N1MBzi'] = False # (N-m/m); ; +Morison['M4N2MBzi'] = False # (N-m/m); ; +Morison['M4N3MBzi'] = False # (N-m/m); ; +Morison['M4N4MBzi'] = False # (N-m/m); ; +Morison['M4N5MBzi'] = False # (N-m/m); ; +Morison['M4N6MBzi'] = False # (N-m/m); ; +Morison['M4N7MBzi'] = False # (N-m/m); ; +Morison['M4N8MBzi'] = False # (N-m/m); ; +Morison['M4N9MBzi'] = False # (N-m/m); ; +Morison['M5N1MBzi'] = False # (N-m/m); ; +Morison['M5N2MBzi'] = False # (N-m/m); ; +Morison['M5N3MBzi'] = False # (N-m/m); ; +Morison['M5N4MBzi'] = False # (N-m/m); ; +Morison['M5N5MBzi'] = False # (N-m/m); ; +Morison['M5N6MBzi'] = False # (N-m/m); ; +Morison['M5N7MBzi'] = False # (N-m/m); ; +Morison['M5N8MBzi'] = False # (N-m/m); ; +Morison['M5N9MBzi'] = False # (N-m/m); ; +Morison['M6N1MBzi'] = False # (N-m/m); ; +Morison['M6N2MBzi'] = False # (N-m/m); ; +Morison['M6N3MBzi'] = False # (N-m/m); ; +Morison['M6N4MBzi'] = False # (N-m/m); ; +Morison['M6N5MBzi'] = False # (N-m/m); ; +Morison['M6N6MBzi'] = False # (N-m/m); ; +Morison['M6N7MBzi'] = False # (N-m/m); ; +Morison['M6N8MBzi'] = False # (N-m/m); ; +Morison['M6N9MBzi'] = False # (N-m/m); ; +Morison['M7N1MBzi'] = False # (N-m/m); ; +Morison['M7N2MBzi'] = False # (N-m/m); ; +Morison['M7N3MBzi'] = False # (N-m/m); ; +Morison['M7N4MBzi'] = False # (N-m/m); ; +Morison['M7N5MBzi'] = False # (N-m/m); ; +Morison['M7N6MBzi'] = False # (N-m/m); ; +Morison['M7N7MBzi'] = False # (N-m/m); ; +Morison['M7N8MBzi'] = False # (N-m/m); ; +Morison['M7N9MBzi'] = False # (N-m/m); ; +Morison['M8N1MBzi'] = False # (N-m/m); ; +Morison['M8N2MBzi'] = False # (N-m/m); ; +Morison['M8N3MBzi'] = False # (N-m/m); ; +Morison['M8N4MBzi'] = False # (N-m/m); ; +Morison['M8N5MBzi'] = False # (N-m/m); ; +Morison['M8N6MBzi'] = False # (N-m/m); ; +Morison['M8N7MBzi'] = False # (N-m/m); ; +Morison['M8N8MBzi'] = False # (N-m/m); ; +Morison['M8N9MBzi'] = False # (N-m/m); ; +Morison['M9N1MBzi'] = False # (N-m/m); ; +Morison['M9N2MBzi'] = False # (N-m/m); ; +Morison['M9N3MBzi'] = False # (N-m/m); ; +Morison['M9N4MBzi'] = False # (N-m/m); ; +Morison['M9N5MBzi'] = False # (N-m/m); ; +Morison['M9N6MBzi'] = False # (N-m/m); ; +Morison['M9N7MBzi'] = False # (N-m/m); ; +Morison['M9N8MBzi'] = False # (N-m/m); ; +Morison['M9N9MBzi'] = False # (N-m/m); ; +Morison['M1N1FBFxi'] = False # (N/m); x-component of the distributed filled fluid bouyancy force expressed in the inertial coordinate system; +Morison['M1N2FBFxi'] = False # (N/m); ; +Morison['M1N3FBFxi'] = False # (N/m); ; +Morison['M1N4FBFxi'] = False # (N/m); ; +Morison['M1N5FBFxi'] = False # (N/m); ; +Morison['M1N6FBFxi'] = False # (N/m); ; +Morison['M1N7FBFxi'] = False # (N/m); ; +Morison['M1N8FBFxi'] = False # (N/m); ; +Morison['M1N9FBFxi'] = False # (N/m); ; +Morison['M2N1FBFxi'] = False # (N/m); ; +Morison['M2N2FBFxi'] = False # (N/m); ; +Morison['M2N3FBFxi'] = False # (N/m); ; +Morison['M2N4FBFxi'] = False # (N/m); ; +Morison['M2N5FBFxi'] = False # (N/m); ; +Morison['M2N6FBFxi'] = False # (N/m); ; +Morison['M2N7FBFxi'] = False # (N/m); ; +Morison['M2N8FBFxi'] = False # (N/m); ; +Morison['M2N9FBFxi'] = False # (N/m); ; +Morison['M3N1FBFxi'] = False # (N/m); ; +Morison['M3N2FBFxi'] = False # (N/m); ; +Morison['M3N3FBFxi'] = False # (N/m); ; +Morison['M3N4FBFxi'] = False # (N/m); ; +Morison['M3N5FBFxi'] = False # (N/m); ; +Morison['M3N6FBFxi'] = False # (N/m); ; +Morison['M3N7FBFxi'] = False # (N/m); ; +Morison['M3N8FBFxi'] = False # (N/m); ; +Morison['M3N9FBFxi'] = False # (N/m); ; +Morison['M4N1FBFxi'] = False # (N/m); ; +Morison['M4N2FBFxi'] = False # (N/m); ; +Morison['M4N3FBFxi'] = False # (N/m); ; +Morison['M4N4FBFxi'] = False # (N/m); ; +Morison['M4N5FBFxi'] = False # (N/m); ; +Morison['M4N6FBFxi'] = False # (N/m); ; +Morison['M4N7FBFxi'] = False # (N/m); ; +Morison['M4N8FBFxi'] = False # (N/m); ; +Morison['M4N9FBFxi'] = False # (N/m); ; +Morison['M5N1FBFxi'] = False # (N/m); ; +Morison['M5N2FBFxi'] = False # (N/m); ; +Morison['M5N3FBFxi'] = False # (N/m); ; +Morison['M5N4FBFxi'] = False # (N/m); ; +Morison['M5N5FBFxi'] = False # (N/m); ; +Morison['M5N6FBFxi'] = False # (N/m); ; +Morison['M5N7FBFxi'] = False # (N/m); ; +Morison['M5N8FBFxi'] = False # (N/m); ; +Morison['M5N9FBFxi'] = False # (N/m); ; +Morison['M6N1FBFxi'] = False # (N/m); ; +Morison['M6N2FBFxi'] = False # (N/m); ; +Morison['M6N3FBFxi'] = False # (N/m); ; +Morison['M6N4FBFxi'] = False # (N/m); ; +Morison['M6N5FBFxi'] = False # (N/m); ; +Morison['M6N6FBFxi'] = False # (N/m); ; +Morison['M6N7FBFxi'] = False # (N/m); ; +Morison['M6N8FBFxi'] = False # (N/m); ; +Morison['M6N9FBFxi'] = False # (N/m); ; +Morison['M7N1FBFxi'] = False # (N/m); ; +Morison['M7N2FBFxi'] = False # (N/m); ; +Morison['M7N3FBFxi'] = False # (N/m); ; +Morison['M7N4FBFxi'] = False # (N/m); ; +Morison['M7N5FBFxi'] = False # (N/m); ; +Morison['M7N6FBFxi'] = False # (N/m); ; +Morison['M7N7FBFxi'] = False # (N/m); ; +Morison['M7N8FBFxi'] = False # (N/m); ; +Morison['M7N9FBFxi'] = False # (N/m); ; +Morison['M8N1FBFxi'] = False # (N/m); ; +Morison['M8N2FBFxi'] = False # (N/m); ; +Morison['M8N3FBFxi'] = False # (N/m); ; +Morison['M8N4FBFxi'] = False # (N/m); ; +Morison['M8N5FBFxi'] = False # (N/m); ; +Morison['M8N6FBFxi'] = False # (N/m); ; +Morison['M8N7FBFxi'] = False # (N/m); ; +Morison['M8N8FBFxi'] = False # (N/m); ; +Morison['M8N9FBFxi'] = False # (N/m); ; +Morison['M9N1FBFxi'] = False # (N/m); ; +Morison['M9N2FBFxi'] = False # (N/m); ; +Morison['M9N3FBFxi'] = False # (N/m); ; +Morison['M9N4FBFxi'] = False # (N/m); ; +Morison['M9N5FBFxi'] = False # (N/m); ; +Morison['M9N6FBFxi'] = False # (N/m); ; +Morison['M9N7FBFxi'] = False # (N/m); ; +Morison['M9N8FBFxi'] = False # (N/m); ; +Morison['M9N9FBFxi'] = False # (N/m); ; +Morison['M1N1FBFyi'] = False # (N/m); y-component of the distributed filled fluid bouyancy force expressed in the inertial coordinate system; +Morison['M1N2FBFyi'] = False # (N/m); ; +Morison['M1N3FBFyi'] = False # (N/m); ; +Morison['M1N4FBFyi'] = False # (N/m); ; +Morison['M1N5FBFyi'] = False # (N/m); ; +Morison['M1N6FBFyi'] = False # (N/m); ; +Morison['M1N7FBFyi'] = False # (N/m); ; +Morison['M1N8FBFyi'] = False # (N/m); ; +Morison['M1N9FBFyi'] = False # (N/m); ; +Morison['M2N1FBFyi'] = False # (N/m); ; +Morison['M2N2FBFyi'] = False # (N/m); ; +Morison['M2N3FBFyi'] = False # (N/m); ; +Morison['M2N4FBFyi'] = False # (N/m); ; +Morison['M2N5FBFyi'] = False # (N/m); ; +Morison['M2N6FBFyi'] = False # (N/m); ; +Morison['M2N7FBFyi'] = False # (N/m); ; +Morison['M2N8FBFyi'] = False # (N/m); ; +Morison['M2N9FBFyi'] = False # (N/m); ; +Morison['M3N1FBFyi'] = False # (N/m); ; +Morison['M3N2FBFyi'] = False # (N/m); ; +Morison['M3N3FBFyi'] = False # (N/m); ; +Morison['M3N4FBFyi'] = False # (N/m); ; +Morison['M3N5FBFyi'] = False # (N/m); ; +Morison['M3N6FBFyi'] = False # (N/m); ; +Morison['M3N7FBFyi'] = False # (N/m); ; +Morison['M3N8FBFyi'] = False # (N/m); ; +Morison['M3N9FBFyi'] = False # (N/m); ; +Morison['M4N1FBFyi'] = False # (N/m); ; +Morison['M4N2FBFyi'] = False # (N/m); ; +Morison['M4N3FBFyi'] = False # (N/m); ; +Morison['M4N4FBFyi'] = False # (N/m); ; +Morison['M4N5FBFyi'] = False # (N/m); ; +Morison['M4N6FBFyi'] = False # (N/m); ; +Morison['M4N7FBFyi'] = False # (N/m); ; +Morison['M4N8FBFyi'] = False # (N/m); ; +Morison['M4N9FBFyi'] = False # (N/m); ; +Morison['M5N1FBFyi'] = False # (N/m); ; +Morison['M5N2FBFyi'] = False # (N/m); ; +Morison['M5N3FBFyi'] = False # (N/m); ; +Morison['M5N4FBFyi'] = False # (N/m); ; +Morison['M5N5FBFyi'] = False # (N/m); ; +Morison['M5N6FBFyi'] = False # (N/m); ; +Morison['M5N7FBFyi'] = False # (N/m); ; +Morison['M5N8FBFyi'] = False # (N/m); ; +Morison['M5N9FBFyi'] = False # (N/m); ; +Morison['M6N1FBFyi'] = False # (N/m); ; +Morison['M6N2FBFyi'] = False # (N/m); ; +Morison['M6N3FBFyi'] = False # (N/m); ; +Morison['M6N4FBFyi'] = False # (N/m); ; +Morison['M6N5FBFyi'] = False # (N/m); ; +Morison['M6N6FBFyi'] = False # (N/m); ; +Morison['M6N7FBFyi'] = False # (N/m); ; +Morison['M6N8FBFyi'] = False # (N/m); ; +Morison['M6N9FBFyi'] = False # (N/m); ; +Morison['M7N1FBFyi'] = False # (N/m); ; +Morison['M7N2FBFyi'] = False # (N/m); ; +Morison['M7N3FBFyi'] = False # (N/m); ; +Morison['M7N4FBFyi'] = False # (N/m); ; +Morison['M7N5FBFyi'] = False # (N/m); ; +Morison['M7N6FBFyi'] = False # (N/m); ; +Morison['M7N7FBFyi'] = False # (N/m); ; +Morison['M7N8FBFyi'] = False # (N/m); ; +Morison['M7N9FBFyi'] = False # (N/m); ; +Morison['M8N1FBFyi'] = False # (N/m); ; +Morison['M8N2FBFyi'] = False # (N/m); ; +Morison['M8N3FBFyi'] = False # (N/m); ; +Morison['M8N4FBFyi'] = False # (N/m); ; +Morison['M8N5FBFyi'] = False # (N/m); ; +Morison['M8N6FBFyi'] = False # (N/m); ; +Morison['M8N7FBFyi'] = False # (N/m); ; +Morison['M8N8FBFyi'] = False # (N/m); ; +Morison['M8N9FBFyi'] = False # (N/m); ; +Morison['M9N1FBFyi'] = False # (N/m); ; +Morison['M9N2FBFyi'] = False # (N/m); ; +Morison['M9N3FBFyi'] = False # (N/m); ; +Morison['M9N4FBFyi'] = False # (N/m); ; +Morison['M9N5FBFyi'] = False # (N/m); ; +Morison['M9N6FBFyi'] = False # (N/m); ; +Morison['M9N7FBFyi'] = False # (N/m); ; +Morison['M9N8FBFyi'] = False # (N/m); ; +Morison['M9N9FBFyi'] = False # (N/m); ; +Morison['M1N1FBFzi'] = False # (N/m); z-component of the distributed filled fluid bouyancy force expressed in the inertial coordinate system; +Morison['M1N2FBFzi'] = False # (N/m); ; +Morison['M1N3FBFzi'] = False # (N/m); ; +Morison['M1N4FBFzi'] = False # (N/m); ; +Morison['M1N5FBFzi'] = False # (N/m); ; +Morison['M1N6FBFzi'] = False # (N/m); ; +Morison['M1N7FBFzi'] = False # (N/m); ; +Morison['M1N8FBFzi'] = False # (N/m); ; +Morison['M1N9FBFzi'] = False # (N/m); ; +Morison['M2N1FBFzi'] = False # (N/m); ; +Morison['M2N2FBFzi'] = False # (N/m); ; +Morison['M2N3FBFzi'] = False # (N/m); ; +Morison['M2N4FBFzi'] = False # (N/m); ; +Morison['M2N5FBFzi'] = False # (N/m); ; +Morison['M2N6FBFzi'] = False # (N/m); ; +Morison['M2N7FBFzi'] = False # (N/m); ; +Morison['M2N8FBFzi'] = False # (N/m); ; +Morison['M2N9FBFzi'] = False # (N/m); ; +Morison['M3N1FBFzi'] = False # (N/m); ; +Morison['M3N2FBFzi'] = False # (N/m); ; +Morison['M3N3FBFzi'] = False # (N/m); ; +Morison['M3N4FBFzi'] = False # (N/m); ; +Morison['M3N5FBFzi'] = False # (N/m); ; +Morison['M3N6FBFzi'] = False # (N/m); ; +Morison['M3N7FBFzi'] = False # (N/m); ; +Morison['M3N8FBFzi'] = False # (N/m); ; +Morison['M3N9FBFzi'] = False # (N/m); ; +Morison['M4N1FBFzi'] = False # (N/m); ; +Morison['M4N2FBFzi'] = False # (N/m); ; +Morison['M4N3FBFzi'] = False # (N/m); ; +Morison['M4N4FBFzi'] = False # (N/m); ; +Morison['M4N5FBFzi'] = False # (N/m); ; +Morison['M4N6FBFzi'] = False # (N/m); ; +Morison['M4N7FBFzi'] = False # (N/m); ; +Morison['M4N8FBFzi'] = False # (N/m); ; +Morison['M4N9FBFzi'] = False # (N/m); ; +Morison['M5N1FBFzi'] = False # (N/m); ; +Morison['M5N2FBFzi'] = False # (N/m); ; +Morison['M5N3FBFzi'] = False # (N/m); ; +Morison['M5N4FBFzi'] = False # (N/m); ; +Morison['M5N5FBFzi'] = False # (N/m); ; +Morison['M5N6FBFzi'] = False # (N/m); ; +Morison['M5N7FBFzi'] = False # (N/m); ; +Morison['M5N8FBFzi'] = False # (N/m); ; +Morison['M5N9FBFzi'] = False # (N/m); ; +Morison['M6N1FBFzi'] = False # (N/m); ; +Morison['M6N2FBFzi'] = False # (N/m); ; +Morison['M6N3FBFzi'] = False # (N/m); ; +Morison['M6N4FBFzi'] = False # (N/m); ; +Morison['M6N5FBFzi'] = False # (N/m); ; +Morison['M6N6FBFzi'] = False # (N/m); ; +Morison['M6N7FBFzi'] = False # (N/m); ; +Morison['M6N8FBFzi'] = False # (N/m); ; +Morison['M6N9FBFzi'] = False # (N/m); ; +Morison['M7N1FBFzi'] = False # (N/m); ; +Morison['M7N2FBFzi'] = False # (N/m); ; +Morison['M7N3FBFzi'] = False # (N/m); ; +Morison['M7N4FBFzi'] = False # (N/m); ; +Morison['M7N5FBFzi'] = False # (N/m); ; +Morison['M7N6FBFzi'] = False # (N/m); ; +Morison['M7N7FBFzi'] = False # (N/m); ; +Morison['M7N8FBFzi'] = False # (N/m); ; +Morison['M7N9FBFzi'] = False # (N/m); ; +Morison['M8N1FBFzi'] = False # (N/m); ; +Morison['M8N2FBFzi'] = False # (N/m); ; +Morison['M8N3FBFzi'] = False # (N/m); ; +Morison['M8N4FBFzi'] = False # (N/m); ; +Morison['M8N5FBFzi'] = False # (N/m); ; +Morison['M8N6FBFzi'] = False # (N/m); ; +Morison['M8N7FBFzi'] = False # (N/m); ; +Morison['M8N8FBFzi'] = False # (N/m); ; +Morison['M8N9FBFzi'] = False # (N/m); ; +Morison['M9N1FBFzi'] = False # (N/m); ; +Morison['M9N2FBFzi'] = False # (N/m); ; +Morison['M9N3FBFzi'] = False # (N/m); ; +Morison['M9N4FBFzi'] = False # (N/m); ; +Morison['M9N5FBFzi'] = False # (N/m); ; +Morison['M9N6FBFzi'] = False # (N/m); ; +Morison['M9N7FBFzi'] = False # (N/m); ; +Morison['M9N8FBFzi'] = False # (N/m); ; +Morison['M9N9FBFzi'] = False # (N/m); ; +Morison['M1N1MBFxi'] = False # (N-m/m); x-component of the distributed filled fluid bouyancy moment expressed in the inertial coordinate system; +Morison['M1N2MBFxi'] = False # (N-m/m); ; +Morison['M1N3MBFxi'] = False # (N-m/m); ; +Morison['M1N4MBFxi'] = False # (N-m/m); ; +Morison['M1N5MBFxi'] = False # (N-m/m); ; +Morison['M1N6MBFxi'] = False # (N-m/m); ; +Morison['M1N7MBFxi'] = False # (N-m/m); ; +Morison['M1N8MBFxi'] = False # (N-m/m); ; +Morison['M1N9MBFxi'] = False # (N-m/m); ; +Morison['M2N1MBFxi'] = False # (N-m/m); ; +Morison['M2N2MBFxi'] = False # (N-m/m); ; +Morison['M2N3MBFxi'] = False # (N-m/m); ; +Morison['M2N4MBFxi'] = False # (N-m/m); ; +Morison['M2N5MBFxi'] = False # (N-m/m); ; +Morison['M2N6MBFxi'] = False # (N-m/m); ; +Morison['M2N7MBFxi'] = False # (N-m/m); ; +Morison['M2N8MBFxi'] = False # (N-m/m); ; +Morison['M2N9MBFxi'] = False # (N-m/m); ; +Morison['M3N1MBFxi'] = False # (N-m/m); ; +Morison['M3N2MBFxi'] = False # (N-m/m); ; +Morison['M3N3MBFxi'] = False # (N-m/m); ; +Morison['M3N4MBFxi'] = False # (N-m/m); ; +Morison['M3N5MBFxi'] = False # (N-m/m); ; +Morison['M3N6MBFxi'] = False # (N-m/m); ; +Morison['M3N7MBFxi'] = False # (N-m/m); ; +Morison['M3N8MBFxi'] = False # (N-m/m); ; +Morison['M3N9MBFxi'] = False # (N-m/m); ; +Morison['M4N1MBFxi'] = False # (N-m/m); ; +Morison['M4N2MBFxi'] = False # (N-m/m); ; +Morison['M4N3MBFxi'] = False # (N-m/m); ; +Morison['M4N4MBFxi'] = False # (N-m/m); ; +Morison['M4N5MBFxi'] = False # (N-m/m); ; +Morison['M4N6MBFxi'] = False # (N-m/m); ; +Morison['M4N7MBFxi'] = False # (N-m/m); ; +Morison['M4N8MBFxi'] = False # (N-m/m); ; +Morison['M4N9MBFxi'] = False # (N-m/m); ; +Morison['M5N1MBFxi'] = False # (N-m/m); ; +Morison['M5N2MBFxi'] = False # (N-m/m); ; +Morison['M5N3MBFxi'] = False # (N-m/m); ; +Morison['M5N4MBFxi'] = False # (N-m/m); ; +Morison['M5N5MBFxi'] = False # (N-m/m); ; +Morison['M5N6MBFxi'] = False # (N-m/m); ; +Morison['M5N7MBFxi'] = False # (N-m/m); ; +Morison['M5N8MBFxi'] = False # (N-m/m); ; +Morison['M5N9MBFxi'] = False # (N-m/m); ; +Morison['M6N1MBFxi'] = False # (N-m/m); ; +Morison['M6N2MBFxi'] = False # (N-m/m); ; +Morison['M6N3MBFxi'] = False # (N-m/m); ; +Morison['M6N4MBFxi'] = False # (N-m/m); ; +Morison['M6N5MBFxi'] = False # (N-m/m); ; +Morison['M6N6MBFxi'] = False # (N-m/m); ; +Morison['M6N7MBFxi'] = False # (N-m/m); ; +Morison['M6N8MBFxi'] = False # (N-m/m); ; +Morison['M6N9MBFxi'] = False # (N-m/m); ; +Morison['M7N1MBFxi'] = False # (N-m/m); ; +Morison['M7N2MBFxi'] = False # (N-m/m); ; +Morison['M7N3MBFxi'] = False # (N-m/m); ; +Morison['M7N4MBFxi'] = False # (N-m/m); ; +Morison['M7N5MBFxi'] = False # (N-m/m); ; +Morison['M7N6MBFxi'] = False # (N-m/m); ; +Morison['M7N7MBFxi'] = False # (N-m/m); ; +Morison['M7N8MBFxi'] = False # (N-m/m); ; +Morison['M7N9MBFxi'] = False # (N-m/m); ; +Morison['M8N1MBFxi'] = False # (N-m/m); ; +Morison['M8N2MBFxi'] = False # (N-m/m); ; +Morison['M8N3MBFxi'] = False # (N-m/m); ; +Morison['M8N4MBFxi'] = False # (N-m/m); ; +Morison['M8N5MBFxi'] = False # (N-m/m); ; +Morison['M8N6MBFxi'] = False # (N-m/m); ; +Morison['M8N7MBFxi'] = False # (N-m/m); ; +Morison['M8N8MBFxi'] = False # (N-m/m); ; +Morison['M8N9MBFxi'] = False # (N-m/m); ; +Morison['M9N1MBFxi'] = False # (N-m/m); ; +Morison['M9N2MBFxi'] = False # (N-m/m); ; +Morison['M9N3MBFxi'] = False # (N-m/m); ; +Morison['M9N4MBFxi'] = False # (N-m/m); ; +Morison['M9N5MBFxi'] = False # (N-m/m); ; +Morison['M9N6MBFxi'] = False # (N-m/m); ; +Morison['M9N7MBFxi'] = False # (N-m/m); ; +Morison['M9N8MBFxi'] = False # (N-m/m); ; +Morison['M9N9MBFxi'] = False # (N-m/m); ; +Morison['M1N1MBFyi'] = False # (N-m/m); y-component of the distributed filled fluid bouyancy moment expressed in the inertial coordinate system; +Morison['M1N2MBFyi'] = False # (N-m/m); ; +Morison['M1N3MBFyi'] = False # (N-m/m); ; +Morison['M1N4MBFyi'] = False # (N-m/m); ; +Morison['M1N5MBFyi'] = False # (N-m/m); ; +Morison['M1N6MBFyi'] = False # (N-m/m); ; +Morison['M1N7MBFyi'] = False # (N-m/m); ; +Morison['M1N8MBFyi'] = False # (N-m/m); ; +Morison['M1N9MBFyi'] = False # (N-m/m); ; +Morison['M2N1MBFyi'] = False # (N-m/m); ; +Morison['M2N2MBFyi'] = False # (N-m/m); ; +Morison['M2N3MBFyi'] = False # (N-m/m); ; +Morison['M2N4MBFyi'] = False # (N-m/m); ; +Morison['M2N5MBFyi'] = False # (N-m/m); ; +Morison['M2N6MBFyi'] = False # (N-m/m); ; +Morison['M2N7MBFyi'] = False # (N-m/m); ; +Morison['M2N8MBFyi'] = False # (N-m/m); ; +Morison['M2N9MBFyi'] = False # (N-m/m); ; +Morison['M3N1MBFyi'] = False # (N-m/m); ; +Morison['M3N2MBFyi'] = False # (N-m/m); ; +Morison['M3N3MBFyi'] = False # (N-m/m); ; +Morison['M3N4MBFyi'] = False # (N-m/m); ; +Morison['M3N5MBFyi'] = False # (N-m/m); ; +Morison['M3N6MBFyi'] = False # (N-m/m); ; +Morison['M3N7MBFyi'] = False # (N-m/m); ; +Morison['M3N8MBFyi'] = False # (N-m/m); ; +Morison['M3N9MBFyi'] = False # (N-m/m); ; +Morison['M4N1MBFyi'] = False # (N-m/m); ; +Morison['M4N2MBFyi'] = False # (N-m/m); ; +Morison['M4N3MBFyi'] = False # (N-m/m); ; +Morison['M4N4MBFyi'] = False # (N-m/m); ; +Morison['M4N5MBFyi'] = False # (N-m/m); ; +Morison['M4N6MBFyi'] = False # (N-m/m); ; +Morison['M4N7MBFyi'] = False # (N-m/m); ; +Morison['M4N8MBFyi'] = False # (N-m/m); ; +Morison['M4N9MBFyi'] = False # (N-m/m); ; +Morison['M5N1MBFyi'] = False # (N-m/m); ; +Morison['M5N2MBFyi'] = False # (N-m/m); ; +Morison['M5N3MBFyi'] = False # (N-m/m); ; +Morison['M5N4MBFyi'] = False # (N-m/m); ; +Morison['M5N5MBFyi'] = False # (N-m/m); ; +Morison['M5N6MBFyi'] = False # (N-m/m); ; +Morison['M5N7MBFyi'] = False # (N-m/m); ; +Morison['M5N8MBFyi'] = False # (N-m/m); ; +Morison['M5N9MBFyi'] = False # (N-m/m); ; +Morison['M6N1MBFyi'] = False # (N-m/m); ; +Morison['M6N2MBFyi'] = False # (N-m/m); ; +Morison['M6N3MBFyi'] = False # (N-m/m); ; +Morison['M6N4MBFyi'] = False # (N-m/m); ; +Morison['M6N5MBFyi'] = False # (N-m/m); ; +Morison['M6N6MBFyi'] = False # (N-m/m); ; +Morison['M6N7MBFyi'] = False # (N-m/m); ; +Morison['M6N8MBFyi'] = False # (N-m/m); ; +Morison['M6N9MBFyi'] = False # (N-m/m); ; +Morison['M7N1MBFyi'] = False # (N-m/m); ; +Morison['M7N2MBFyi'] = False # (N-m/m); ; +Morison['M7N3MBFyi'] = False # (N-m/m); ; +Morison['M7N4MBFyi'] = False # (N-m/m); ; +Morison['M7N5MBFyi'] = False # (N-m/m); ; +Morison['M7N6MBFyi'] = False # (N-m/m); ; +Morison['M7N7MBFyi'] = False # (N-m/m); ; +Morison['M7N8MBFyi'] = False # (N-m/m); ; +Morison['M7N9MBFyi'] = False # (N-m/m); ; +Morison['M8N1MBFyi'] = False # (N-m/m); ; +Morison['M8N2MBFyi'] = False # (N-m/m); ; +Morison['M8N3MBFyi'] = False # (N-m/m); ; +Morison['M8N4MBFyi'] = False # (N-m/m); ; +Morison['M8N5MBFyi'] = False # (N-m/m); ; +Morison['M8N6MBFyi'] = False # (N-m/m); ; +Morison['M8N7MBFyi'] = False # (N-m/m); ; +Morison['M8N8MBFyi'] = False # (N-m/m); ; +Morison['M8N9MBFyi'] = False # (N-m/m); ; +Morison['M9N1MBFyi'] = False # (N-m/m); ; +Morison['M9N2MBFyi'] = False # (N-m/m); ; +Morison['M9N3MBFyi'] = False # (N-m/m); ; +Morison['M9N4MBFyi'] = False # (N-m/m); ; +Morison['M9N5MBFyi'] = False # (N-m/m); ; +Morison['M9N6MBFyi'] = False # (N-m/m); ; +Morison['M9N7MBFyi'] = False # (N-m/m); ; +Morison['M9N8MBFyi'] = False # (N-m/m); ; +Morison['M9N9MBFyi'] = False # (N-m/m); ; +Morison['M1N1MBFzi'] = False # (N-m/m); z-component of the distributed filled fluid bouyancy moment expressed in the inertial coordinate system; +Morison['M1N2MBFzi'] = False # (N-m/m); ; +Morison['M1N3MBFzi'] = False # (N-m/m); ; +Morison['M1N4MBFzi'] = False # (N-m/m); ; +Morison['M1N5MBFzi'] = False # (N-m/m); ; +Morison['M1N6MBFzi'] = False # (N-m/m); ; +Morison['M1N7MBFzi'] = False # (N-m/m); ; +Morison['M1N8MBFzi'] = False # (N-m/m); ; +Morison['M1N9MBFzi'] = False # (N-m/m); ; +Morison['M2N1MBFzi'] = False # (N-m/m); ; +Morison['M2N2MBFzi'] = False # (N-m/m); ; +Morison['M2N3MBFzi'] = False # (N-m/m); ; +Morison['M2N4MBFzi'] = False # (N-m/m); ; +Morison['M2N5MBFzi'] = False # (N-m/m); ; +Morison['M2N6MBFzi'] = False # (N-m/m); ; +Morison['M2N7MBFzi'] = False # (N-m/m); ; +Morison['M2N8MBFzi'] = False # (N-m/m); ; +Morison['M2N9MBFzi'] = False # (N-m/m); ; +Morison['M3N1MBFzi'] = False # (N-m/m); ; +Morison['M3N2MBFzi'] = False # (N-m/m); ; +Morison['M3N3MBFzi'] = False # (N-m/m); ; +Morison['M3N4MBFzi'] = False # (N-m/m); ; +Morison['M3N5MBFzi'] = False # (N-m/m); ; +Morison['M3N6MBFzi'] = False # (N-m/m); ; +Morison['M3N7MBFzi'] = False # (N-m/m); ; +Morison['M3N8MBFzi'] = False # (N-m/m); ; +Morison['M3N9MBFzi'] = False # (N-m/m); ; +Morison['M4N1MBFzi'] = False # (N-m/m); ; +Morison['M4N2MBFzi'] = False # (N-m/m); ; +Morison['M4N3MBFzi'] = False # (N-m/m); ; +Morison['M4N4MBFzi'] = False # (N-m/m); ; +Morison['M4N5MBFzi'] = False # (N-m/m); ; +Morison['M4N6MBFzi'] = False # (N-m/m); ; +Morison['M4N7MBFzi'] = False # (N-m/m); ; +Morison['M4N8MBFzi'] = False # (N-m/m); ; +Morison['M4N9MBFzi'] = False # (N-m/m); ; +Morison['M5N1MBFzi'] = False # (N-m/m); ; +Morison['M5N2MBFzi'] = False # (N-m/m); ; +Morison['M5N3MBFzi'] = False # (N-m/m); ; +Morison['M5N4MBFzi'] = False # (N-m/m); ; +Morison['M5N5MBFzi'] = False # (N-m/m); ; +Morison['M5N6MBFzi'] = False # (N-m/m); ; +Morison['M5N7MBFzi'] = False # (N-m/m); ; +Morison['M5N8MBFzi'] = False # (N-m/m); ; +Morison['M5N9MBFzi'] = False # (N-m/m); ; +Morison['M6N1MBFzi'] = False # (N-m/m); ; +Morison['M6N2MBFzi'] = False # (N-m/m); ; +Morison['M6N3MBFzi'] = False # (N-m/m); ; +Morison['M6N4MBFzi'] = False # (N-m/m); ; +Morison['M6N5MBFzi'] = False # (N-m/m); ; +Morison['M6N6MBFzi'] = False # (N-m/m); ; +Morison['M6N7MBFzi'] = False # (N-m/m); ; +Morison['M6N8MBFzi'] = False # (N-m/m); ; +Morison['M6N9MBFzi'] = False # (N-m/m); ; +Morison['M7N1MBFzi'] = False # (N-m/m); ; +Morison['M7N2MBFzi'] = False # (N-m/m); ; +Morison['M7N3MBFzi'] = False # (N-m/m); ; +Morison['M7N4MBFzi'] = False # (N-m/m); ; +Morison['M7N5MBFzi'] = False # (N-m/m); ; +Morison['M7N6MBFzi'] = False # (N-m/m); ; +Morison['M7N7MBFzi'] = False # (N-m/m); ; +Morison['M7N8MBFzi'] = False # (N-m/m); ; +Morison['M7N9MBFzi'] = False # (N-m/m); ; +Morison['M8N1MBFzi'] = False # (N-m/m); ; +Morison['M8N2MBFzi'] = False # (N-m/m); ; +Morison['M8N3MBFzi'] = False # (N-m/m); ; +Morison['M8N4MBFzi'] = False # (N-m/m); ; +Morison['M8N5MBFzi'] = False # (N-m/m); ; +Morison['M8N6MBFzi'] = False # (N-m/m); ; +Morison['M8N7MBFzi'] = False # (N-m/m); ; +Morison['M8N8MBFzi'] = False # (N-m/m); ; +Morison['M8N9MBFzi'] = False # (N-m/m); ; +Morison['M9N1MBFzi'] = False # (N-m/m); ; +Morison['M9N2MBFzi'] = False # (N-m/m); ; +Morison['M9N3MBFzi'] = False # (N-m/m); ; +Morison['M9N4MBFzi'] = False # (N-m/m); ; +Morison['M9N5MBFzi'] = False # (N-m/m); ; +Morison['M9N6MBFzi'] = False # (N-m/m); ; +Morison['M9N7MBFzi'] = False # (N-m/m); ; +Morison['M9N8MBFzi'] = False # (N-m/m); ; +Morison['M9N9MBFzi'] = False # (N-m/m); ; +Morison['M1N1FMGxi'] = False # (N/m); x-component of the distributed marine growth weight force expressed in the inertial coordinate system; +Morison['M1N2FMGxi'] = False # (N/m); ; +Morison['M1N3FMGxi'] = False # (N/m); ; +Morison['M1N4FMGxi'] = False # (N/m); ; +Morison['M1N5FMGxi'] = False # (N/m); ; +Morison['M1N6FMGxi'] = False # (N/m); ; +Morison['M1N7FMGxi'] = False # (N/m); ; +Morison['M1N8FMGxi'] = False # (N/m); ; +Morison['M1N9FMGxi'] = False # (N/m); ; +Morison['M2N1FMGxi'] = False # (N/m); ; +Morison['M2N2FMGxi'] = False # (N/m); ; +Morison['M2N3FMGxi'] = False # (N/m); ; +Morison['M2N4FMGxi'] = False # (N/m); ; +Morison['M2N5FMGxi'] = False # (N/m); ; +Morison['M2N6FMGxi'] = False # (N/m); ; +Morison['M2N7FMGxi'] = False # (N/m); ; +Morison['M2N8FMGxi'] = False # (N/m); ; +Morison['M2N9FMGxi'] = False # (N/m); ; +Morison['M3N1FMGxi'] = False # (N/m); ; +Morison['M3N2FMGxi'] = False # (N/m); ; +Morison['M3N3FMGxi'] = False # (N/m); ; +Morison['M3N4FMGxi'] = False # (N/m); ; +Morison['M3N5FMGxi'] = False # (N/m); ; +Morison['M3N6FMGxi'] = False # (N/m); ; +Morison['M3N7FMGxi'] = False # (N/m); ; +Morison['M3N8FMGxi'] = False # (N/m); ; +Morison['M3N9FMGxi'] = False # (N/m); ; +Morison['M4N1FMGxi'] = False # (N/m); ; +Morison['M4N2FMGxi'] = False # (N/m); ; +Morison['M4N3FMGxi'] = False # (N/m); ; +Morison['M4N4FMGxi'] = False # (N/m); ; +Morison['M4N5FMGxi'] = False # (N/m); ; +Morison['M4N6FMGxi'] = False # (N/m); ; +Morison['M4N7FMGxi'] = False # (N/m); ; +Morison['M4N8FMGxi'] = False # (N/m); ; +Morison['M4N9FMGxi'] = False # (N/m); ; +Morison['M5N1FMGxi'] = False # (N/m); ; +Morison['M5N2FMGxi'] = False # (N/m); ; +Morison['M5N3FMGxi'] = False # (N/m); ; +Morison['M5N4FMGxi'] = False # (N/m); ; +Morison['M5N5FMGxi'] = False # (N/m); ; +Morison['M5N6FMGxi'] = False # (N/m); ; +Morison['M5N7FMGxi'] = False # (N/m); ; +Morison['M5N8FMGxi'] = False # (N/m); ; +Morison['M5N9FMGxi'] = False # (N/m); ; +Morison['M6N1FMGxi'] = False # (N/m); ; +Morison['M6N2FMGxi'] = False # (N/m); ; +Morison['M6N3FMGxi'] = False # (N/m); ; +Morison['M6N4FMGxi'] = False # (N/m); ; +Morison['M6N5FMGxi'] = False # (N/m); ; +Morison['M6N6FMGxi'] = False # (N/m); ; +Morison['M6N7FMGxi'] = False # (N/m); ; +Morison['M6N8FMGxi'] = False # (N/m); ; +Morison['M6N9FMGxi'] = False # (N/m); ; +Morison['M7N1FMGxi'] = False # (N/m); ; +Morison['M7N2FMGxi'] = False # (N/m); ; +Morison['M7N3FMGxi'] = False # (N/m); ; +Morison['M7N4FMGxi'] = False # (N/m); ; +Morison['M7N5FMGxi'] = False # (N/m); ; +Morison['M7N6FMGxi'] = False # (N/m); ; +Morison['M7N7FMGxi'] = False # (N/m); ; +Morison['M7N8FMGxi'] = False # (N/m); ; +Morison['M7N9FMGxi'] = False # (N/m); ; +Morison['M8N1FMGxi'] = False # (N/m); ; +Morison['M8N2FMGxi'] = False # (N/m); ; +Morison['M8N3FMGxi'] = False # (N/m); ; +Morison['M8N4FMGxi'] = False # (N/m); ; +Morison['M8N5FMGxi'] = False # (N/m); ; +Morison['M8N6FMGxi'] = False # (N/m); ; +Morison['M8N7FMGxi'] = False # (N/m); ; +Morison['M8N8FMGxi'] = False # (N/m); ; +Morison['M8N9FMGxi'] = False # (N/m); ; +Morison['M9N1FMGxi'] = False # (N/m); ; +Morison['M9N2FMGxi'] = False # (N/m); ; +Morison['M9N3FMGxi'] = False # (N/m); ; +Morison['M9N4FMGxi'] = False # (N/m); ; +Morison['M9N5FMGxi'] = False # (N/m); ; +Morison['M9N6FMGxi'] = False # (N/m); ; +Morison['M9N7FMGxi'] = False # (N/m); ; +Morison['M9N8FMGxi'] = False # (N/m); ; +Morison['M9N9FMGxi'] = False # (N/m); ; +Morison['M1N1FMGyi'] = False # (N/m); y-component of the distributed marine growth weight force expressed in the inertial coordinate system; +Morison['M1N2FMGyi'] = False # (N/m); ; +Morison['M1N3FMGyi'] = False # (N/m); ; +Morison['M1N4FMGyi'] = False # (N/m); ; +Morison['M1N5FMGyi'] = False # (N/m); ; +Morison['M1N6FMGyi'] = False # (N/m); ; +Morison['M1N7FMGyi'] = False # (N/m); ; +Morison['M1N8FMGyi'] = False # (N/m); ; +Morison['M1N9FMGyi'] = False # (N/m); ; +Morison['M2N1FMGyi'] = False # (N/m); ; +Morison['M2N2FMGyi'] = False # (N/m); ; +Morison['M2N3FMGyi'] = False # (N/m); ; +Morison['M2N4FMGyi'] = False # (N/m); ; +Morison['M2N5FMGyi'] = False # (N/m); ; +Morison['M2N6FMGyi'] = False # (N/m); ; +Morison['M2N7FMGyi'] = False # (N/m); ; +Morison['M2N8FMGyi'] = False # (N/m); ; +Morison['M2N9FMGyi'] = False # (N/m); ; +Morison['M3N1FMGyi'] = False # (N/m); ; +Morison['M3N2FMGyi'] = False # (N/m); ; +Morison['M3N3FMGyi'] = False # (N/m); ; +Morison['M3N4FMGyi'] = False # (N/m); ; +Morison['M3N5FMGyi'] = False # (N/m); ; +Morison['M3N6FMGyi'] = False # (N/m); ; +Morison['M3N7FMGyi'] = False # (N/m); ; +Morison['M3N8FMGyi'] = False # (N/m); ; +Morison['M3N9FMGyi'] = False # (N/m); ; +Morison['M4N1FMGyi'] = False # (N/m); ; +Morison['M4N2FMGyi'] = False # (N/m); ; +Morison['M4N3FMGyi'] = False # (N/m); ; +Morison['M4N4FMGyi'] = False # (N/m); ; +Morison['M4N5FMGyi'] = False # (N/m); ; +Morison['M4N6FMGyi'] = False # (N/m); ; +Morison['M4N7FMGyi'] = False # (N/m); ; +Morison['M4N8FMGyi'] = False # (N/m); ; +Morison['M4N9FMGyi'] = False # (N/m); ; +Morison['M5N1FMGyi'] = False # (N/m); ; +Morison['M5N2FMGyi'] = False # (N/m); ; +Morison['M5N3FMGyi'] = False # (N/m); ; +Morison['M5N4FMGyi'] = False # (N/m); ; +Morison['M5N5FMGyi'] = False # (N/m); ; +Morison['M5N6FMGyi'] = False # (N/m); ; +Morison['M5N7FMGyi'] = False # (N/m); ; +Morison['M5N8FMGyi'] = False # (N/m); ; +Morison['M5N9FMGyi'] = False # (N/m); ; +Morison['M6N1FMGyi'] = False # (N/m); ; +Morison['M6N2FMGyi'] = False # (N/m); ; +Morison['M6N3FMGyi'] = False # (N/m); ; +Morison['M6N4FMGyi'] = False # (N/m); ; +Morison['M6N5FMGyi'] = False # (N/m); ; +Morison['M6N6FMGyi'] = False # (N/m); ; +Morison['M6N7FMGyi'] = False # (N/m); ; +Morison['M6N8FMGyi'] = False # (N/m); ; +Morison['M6N9FMGyi'] = False # (N/m); ; +Morison['M7N1FMGyi'] = False # (N/m); ; +Morison['M7N2FMGyi'] = False # (N/m); ; +Morison['M7N3FMGyi'] = False # (N/m); ; +Morison['M7N4FMGyi'] = False # (N/m); ; +Morison['M7N5FMGyi'] = False # (N/m); ; +Morison['M7N6FMGyi'] = False # (N/m); ; +Morison['M7N7FMGyi'] = False # (N/m); ; +Morison['M7N8FMGyi'] = False # (N/m); ; +Morison['M7N9FMGyi'] = False # (N/m); ; +Morison['M8N1FMGyi'] = False # (N/m); ; +Morison['M8N2FMGyi'] = False # (N/m); ; +Morison['M8N3FMGyi'] = False # (N/m); ; +Morison['M8N4FMGyi'] = False # (N/m); ; +Morison['M8N5FMGyi'] = False # (N/m); ; +Morison['M8N6FMGyi'] = False # (N/m); ; +Morison['M8N7FMGyi'] = False # (N/m); ; +Morison['M8N8FMGyi'] = False # (N/m); ; +Morison['M8N9FMGyi'] = False # (N/m); ; +Morison['M9N1FMGyi'] = False # (N/m); ; +Morison['M9N2FMGyi'] = False # (N/m); ; +Morison['M9N3FMGyi'] = False # (N/m); ; +Morison['M9N4FMGyi'] = False # (N/m); ; +Morison['M9N5FMGyi'] = False # (N/m); ; +Morison['M9N6FMGyi'] = False # (N/m); ; +Morison['M9N7FMGyi'] = False # (N/m); ; +Morison['M9N8FMGyi'] = False # (N/m); ; +Morison['M9N9FMGyi'] = False # (N/m); ; +Morison['M1N1FMGzi'] = False # (N/m); z-component of the distributed marine growth weight force expressed in the inertial coordinate system; +Morison['M1N2FMGzi'] = False # (N/m); ; +Morison['M1N3FMGzi'] = False # (N/m); ; +Morison['M1N4FMGzi'] = False # (N/m); ; +Morison['M1N5FMGzi'] = False # (N/m); ; +Morison['M1N6FMGzi'] = False # (N/m); ; +Morison['M1N7FMGzi'] = False # (N/m); ; +Morison['M1N8FMGzi'] = False # (N/m); ; +Morison['M1N9FMGzi'] = False # (N/m); ; +Morison['M2N1FMGzi'] = False # (N/m); ; +Morison['M2N2FMGzi'] = False # (N/m); ; +Morison['M2N3FMGzi'] = False # (N/m); ; +Morison['M2N4FMGzi'] = False # (N/m); ; +Morison['M2N5FMGzi'] = False # (N/m); ; +Morison['M2N6FMGzi'] = False # (N/m); ; +Morison['M2N7FMGzi'] = False # (N/m); ; +Morison['M2N8FMGzi'] = False # (N/m); ; +Morison['M2N9FMGzi'] = False # (N/m); ; +Morison['M3N1FMGzi'] = False # (N/m); ; +Morison['M3N2FMGzi'] = False # (N/m); ; +Morison['M3N3FMGzi'] = False # (N/m); ; +Morison['M3N4FMGzi'] = False # (N/m); ; +Morison['M3N5FMGzi'] = False # (N/m); ; +Morison['M3N6FMGzi'] = False # (N/m); ; +Morison['M3N7FMGzi'] = False # (N/m); ; +Morison['M3N8FMGzi'] = False # (N/m); ; +Morison['M3N9FMGzi'] = False # (N/m); ; +Morison['M4N1FMGzi'] = False # (N/m); ; +Morison['M4N2FMGzi'] = False # (N/m); ; +Morison['M4N3FMGzi'] = False # (N/m); ; +Morison['M4N4FMGzi'] = False # (N/m); ; +Morison['M4N5FMGzi'] = False # (N/m); ; +Morison['M4N6FMGzi'] = False # (N/m); ; +Morison['M4N7FMGzi'] = False # (N/m); ; +Morison['M4N8FMGzi'] = False # (N/m); ; +Morison['M4N9FMGzi'] = False # (N/m); ; +Morison['M5N1FMGzi'] = False # (N/m); ; +Morison['M5N2FMGzi'] = False # (N/m); ; +Morison['M5N3FMGzi'] = False # (N/m); ; +Morison['M5N4FMGzi'] = False # (N/m); ; +Morison['M5N5FMGzi'] = False # (N/m); ; +Morison['M5N6FMGzi'] = False # (N/m); ; +Morison['M5N7FMGzi'] = False # (N/m); ; +Morison['M5N8FMGzi'] = False # (N/m); ; +Morison['M5N9FMGzi'] = False # (N/m); ; +Morison['M6N1FMGzi'] = False # (N/m); ; +Morison['M6N2FMGzi'] = False # (N/m); ; +Morison['M6N3FMGzi'] = False # (N/m); ; +Morison['M6N4FMGzi'] = False # (N/m); ; +Morison['M6N5FMGzi'] = False # (N/m); ; +Morison['M6N6FMGzi'] = False # (N/m); ; +Morison['M6N7FMGzi'] = False # (N/m); ; +Morison['M6N8FMGzi'] = False # (N/m); ; +Morison['M6N9FMGzi'] = False # (N/m); ; +Morison['M7N1FMGzi'] = False # (N/m); ; +Morison['M7N2FMGzi'] = False # (N/m); ; +Morison['M7N3FMGzi'] = False # (N/m); ; +Morison['M7N4FMGzi'] = False # (N/m); ; +Morison['M7N5FMGzi'] = False # (N/m); ; +Morison['M7N6FMGzi'] = False # (N/m); ; +Morison['M7N7FMGzi'] = False # (N/m); ; +Morison['M7N8FMGzi'] = False # (N/m); ; +Morison['M7N9FMGzi'] = False # (N/m); ; +Morison['M8N1FMGzi'] = False # (N/m); ; +Morison['M8N2FMGzi'] = False # (N/m); ; +Morison['M8N3FMGzi'] = False # (N/m); ; +Morison['M8N4FMGzi'] = False # (N/m); ; +Morison['M8N5FMGzi'] = False # (N/m); ; +Morison['M8N6FMGzi'] = False # (N/m); ; +Morison['M8N7FMGzi'] = False # (N/m); ; +Morison['M8N8FMGzi'] = False # (N/m); ; +Morison['M8N9FMGzi'] = False # (N/m); ; +Morison['M9N1FMGzi'] = False # (N/m); ; +Morison['M9N2FMGzi'] = False # (N/m); ; +Morison['M9N3FMGzi'] = False # (N/m); ; +Morison['M9N4FMGzi'] = False # (N/m); ; +Morison['M9N5FMGzi'] = False # (N/m); ; +Morison['M9N6FMGzi'] = False # (N/m); ; +Morison['M9N7FMGzi'] = False # (N/m); ; +Morison['M9N8FMGzi'] = False # (N/m); ; +Morison['M9N9FMGzi'] = False # (N/m); ; +Morison['M1N1MMGxi'] = False # (N-m/m); x-component of the distributed marine growth weight moment expressed in the inertial coordinate system; +Morison['M1N2MMGxi'] = False # (N-m/m); ; +Morison['M1N3MMGxi'] = False # (N-m/m); ; +Morison['M1N4MMGxi'] = False # (N-m/m); ; +Morison['M1N5MMGxi'] = False # (N-m/m); ; +Morison['M1N6MMGxi'] = False # (N-m/m); ; +Morison['M1N7MMGxi'] = False # (N-m/m); ; +Morison['M1N8MMGxi'] = False # (N-m/m); ; +Morison['M1N9MMGxi'] = False # (N-m/m); ; +Morison['M2N1MMGxi'] = False # (N-m/m); ; +Morison['M2N2MMGxi'] = False # (N-m/m); ; +Morison['M2N3MMGxi'] = False # (N-m/m); ; +Morison['M2N4MMGxi'] = False # (N-m/m); ; +Morison['M2N5MMGxi'] = False # (N-m/m); ; +Morison['M2N6MMGxi'] = False # (N-m/m); ; +Morison['M2N7MMGxi'] = False # (N-m/m); ; +Morison['M2N8MMGxi'] = False # (N-m/m); ; +Morison['M2N9MMGxi'] = False # (N-m/m); ; +Morison['M3N1MMGxi'] = False # (N-m/m); ; +Morison['M3N2MMGxi'] = False # (N-m/m); ; +Morison['M3N3MMGxi'] = False # (N-m/m); ; +Morison['M3N4MMGxi'] = False # (N-m/m); ; +Morison['M3N5MMGxi'] = False # (N-m/m); ; +Morison['M3N6MMGxi'] = False # (N-m/m); ; +Morison['M3N7MMGxi'] = False # (N-m/m); ; +Morison['M3N8MMGxi'] = False # (N-m/m); ; +Morison['M3N9MMGxi'] = False # (N-m/m); ; +Morison['M4N1MMGxi'] = False # (N-m/m); ; +Morison['M4N2MMGxi'] = False # (N-m/m); ; +Morison['M4N3MMGxi'] = False # (N-m/m); ; +Morison['M4N4MMGxi'] = False # (N-m/m); ; +Morison['M4N5MMGxi'] = False # (N-m/m); ; +Morison['M4N6MMGxi'] = False # (N-m/m); ; +Morison['M4N7MMGxi'] = False # (N-m/m); ; +Morison['M4N8MMGxi'] = False # (N-m/m); ; +Morison['M4N9MMGxi'] = False # (N-m/m); ; +Morison['M5N1MMGxi'] = False # (N-m/m); ; +Morison['M5N2MMGxi'] = False # (N-m/m); ; +Morison['M5N3MMGxi'] = False # (N-m/m); ; +Morison['M5N4MMGxi'] = False # (N-m/m); ; +Morison['M5N5MMGxi'] = False # (N-m/m); ; +Morison['M5N6MMGxi'] = False # (N-m/m); ; +Morison['M5N7MMGxi'] = False # (N-m/m); ; +Morison['M5N8MMGxi'] = False # (N-m/m); ; +Morison['M5N9MMGxi'] = False # (N-m/m); ; +Morison['M6N1MMGxi'] = False # (N-m/m); ; +Morison['M6N2MMGxi'] = False # (N-m/m); ; +Morison['M6N3MMGxi'] = False # (N-m/m); ; +Morison['M6N4MMGxi'] = False # (N-m/m); ; +Morison['M6N5MMGxi'] = False # (N-m/m); ; +Morison['M6N6MMGxi'] = False # (N-m/m); ; +Morison['M6N7MMGxi'] = False # (N-m/m); ; +Morison['M6N8MMGxi'] = False # (N-m/m); ; +Morison['M6N9MMGxi'] = False # (N-m/m); ; +Morison['M7N1MMGxi'] = False # (N-m/m); ; +Morison['M7N2MMGxi'] = False # (N-m/m); ; +Morison['M7N3MMGxi'] = False # (N-m/m); ; +Morison['M7N4MMGxi'] = False # (N-m/m); ; +Morison['M7N5MMGxi'] = False # (N-m/m); ; +Morison['M7N6MMGxi'] = False # (N-m/m); ; +Morison['M7N7MMGxi'] = False # (N-m/m); ; +Morison['M7N8MMGxi'] = False # (N-m/m); ; +Morison['M7N9MMGxi'] = False # (N-m/m); ; +Morison['M8N1MMGxi'] = False # (N-m/m); ; +Morison['M8N2MMGxi'] = False # (N-m/m); ; +Morison['M8N3MMGxi'] = False # (N-m/m); ; +Morison['M8N4MMGxi'] = False # (N-m/m); ; +Morison['M8N5MMGxi'] = False # (N-m/m); ; +Morison['M8N6MMGxi'] = False # (N-m/m); ; +Morison['M8N7MMGxi'] = False # (N-m/m); ; +Morison['M8N8MMGxi'] = False # (N-m/m); ; +Morison['M8N9MMGxi'] = False # (N-m/m); ; +Morison['M9N1MMGxi'] = False # (N-m/m); ; +Morison['M9N2MMGxi'] = False # (N-m/m); ; +Morison['M9N3MMGxi'] = False # (N-m/m); ; +Morison['M9N4MMGxi'] = False # (N-m/m); ; +Morison['M9N5MMGxi'] = False # (N-m/m); ; +Morison['M9N6MMGxi'] = False # (N-m/m); ; +Morison['M9N7MMGxi'] = False # (N-m/m); ; +Morison['M9N8MMGxi'] = False # (N-m/m); ; +Morison['M9N9MMGxi'] = False # (N-m/m); ; +Morison['M1N1MMGyi'] = False # (N-m/m); y-component of the distributed marine growth weight moment expressed in the inertial coordinate system; +Morison['M1N2MMGyi'] = False # (N-m/m); ; +Morison['M1N3MMGyi'] = False # (N-m/m); ; +Morison['M1N4MMGyi'] = False # (N-m/m); ; +Morison['M1N5MMGyi'] = False # (N-m/m); ; +Morison['M1N6MMGyi'] = False # (N-m/m); ; +Morison['M1N7MMGyi'] = False # (N-m/m); ; +Morison['M1N8MMGyi'] = False # (N-m/m); ; +Morison['M1N9MMGyi'] = False # (N-m/m); ; +Morison['M2N1MMGyi'] = False # (N-m/m); ; +Morison['M2N2MMGyi'] = False # (N-m/m); ; +Morison['M2N3MMGyi'] = False # (N-m/m); ; +Morison['M2N4MMGyi'] = False # (N-m/m); ; +Morison['M2N5MMGyi'] = False # (N-m/m); ; +Morison['M2N6MMGyi'] = False # (N-m/m); ; +Morison['M2N7MMGyi'] = False # (N-m/m); ; +Morison['M2N8MMGyi'] = False # (N-m/m); ; +Morison['M2N9MMGyi'] = False # (N-m/m); ; +Morison['M3N1MMGyi'] = False # (N-m/m); ; +Morison['M3N2MMGyi'] = False # (N-m/m); ; +Morison['M3N3MMGyi'] = False # (N-m/m); ; +Morison['M3N4MMGyi'] = False # (N-m/m); ; +Morison['M3N5MMGyi'] = False # (N-m/m); ; +Morison['M3N6MMGyi'] = False # (N-m/m); ; +Morison['M3N7MMGyi'] = False # (N-m/m); ; +Morison['M3N8MMGyi'] = False # (N-m/m); ; +Morison['M3N9MMGyi'] = False # (N-m/m); ; +Morison['M4N1MMGyi'] = False # (N-m/m); ; +Morison['M4N2MMGyi'] = False # (N-m/m); ; +Morison['M4N3MMGyi'] = False # (N-m/m); ; +Morison['M4N4MMGyi'] = False # (N-m/m); ; +Morison['M4N5MMGyi'] = False # (N-m/m); ; +Morison['M4N6MMGyi'] = False # (N-m/m); ; +Morison['M4N7MMGyi'] = False # (N-m/m); ; +Morison['M4N8MMGyi'] = False # (N-m/m); ; +Morison['M4N9MMGyi'] = False # (N-m/m); ; +Morison['M5N1MMGyi'] = False # (N-m/m); ; +Morison['M5N2MMGyi'] = False # (N-m/m); ; +Morison['M5N3MMGyi'] = False # (N-m/m); ; +Morison['M5N4MMGyi'] = False # (N-m/m); ; +Morison['M5N5MMGyi'] = False # (N-m/m); ; +Morison['M5N6MMGyi'] = False # (N-m/m); ; +Morison['M5N7MMGyi'] = False # (N-m/m); ; +Morison['M5N8MMGyi'] = False # (N-m/m); ; +Morison['M5N9MMGyi'] = False # (N-m/m); ; +Morison['M6N1MMGyi'] = False # (N-m/m); ; +Morison['M6N2MMGyi'] = False # (N-m/m); ; +Morison['M6N3MMGyi'] = False # (N-m/m); ; +Morison['M6N4MMGyi'] = False # (N-m/m); ; +Morison['M6N5MMGyi'] = False # (N-m/m); ; +Morison['M6N6MMGyi'] = False # (N-m/m); ; +Morison['M6N7MMGyi'] = False # (N-m/m); ; +Morison['M6N8MMGyi'] = False # (N-m/m); ; +Morison['M6N9MMGyi'] = False # (N-m/m); ; +Morison['M7N1MMGyi'] = False # (N-m/m); ; +Morison['M7N2MMGyi'] = False # (N-m/m); ; +Morison['M7N3MMGyi'] = False # (N-m/m); ; +Morison['M7N4MMGyi'] = False # (N-m/m); ; +Morison['M7N5MMGyi'] = False # (N-m/m); ; +Morison['M7N6MMGyi'] = False # (N-m/m); ; +Morison['M7N7MMGyi'] = False # (N-m/m); ; +Morison['M7N8MMGyi'] = False # (N-m/m); ; +Morison['M7N9MMGyi'] = False # (N-m/m); ; +Morison['M8N1MMGyi'] = False # (N-m/m); ; +Morison['M8N2MMGyi'] = False # (N-m/m); ; +Morison['M8N3MMGyi'] = False # (N-m/m); ; +Morison['M8N4MMGyi'] = False # (N-m/m); ; +Morison['M8N5MMGyi'] = False # (N-m/m); ; +Morison['M8N6MMGyi'] = False # (N-m/m); ; +Morison['M8N7MMGyi'] = False # (N-m/m); ; +Morison['M8N8MMGyi'] = False # (N-m/m); ; +Morison['M8N9MMGyi'] = False # (N-m/m); ; +Morison['M9N1MMGyi'] = False # (N-m/m); ; +Morison['M9N2MMGyi'] = False # (N-m/m); ; +Morison['M9N3MMGyi'] = False # (N-m/m); ; +Morison['M9N4MMGyi'] = False # (N-m/m); ; +Morison['M9N5MMGyi'] = False # (N-m/m); ; +Morison['M9N6MMGyi'] = False # (N-m/m); ; +Morison['M9N7MMGyi'] = False # (N-m/m); ; +Morison['M9N8MMGyi'] = False # (N-m/m); ; +Morison['M9N9MMGyi'] = False # (N-m/m); ; +Morison['M1N1MMGzi'] = False # (N-m/m); z-component of the distributed marine growth weight moment expressed in the inertial coordinate system; +Morison['M1N2MMGzi'] = False # (N-m/m); ; +Morison['M1N3MMGzi'] = False # (N-m/m); ; +Morison['M1N4MMGzi'] = False # (N-m/m); ; +Morison['M1N5MMGzi'] = False # (N-m/m); ; +Morison['M1N6MMGzi'] = False # (N-m/m); ; +Morison['M1N7MMGzi'] = False # (N-m/m); ; +Morison['M1N8MMGzi'] = False # (N-m/m); ; +Morison['M1N9MMGzi'] = False # (N-m/m); ; +Morison['M2N1MMGzi'] = False # (N-m/m); ; +Morison['M2N2MMGzi'] = False # (N-m/m); ; +Morison['M2N3MMGzi'] = False # (N-m/m); ; +Morison['M2N4MMGzi'] = False # (N-m/m); ; +Morison['M2N5MMGzi'] = False # (N-m/m); ; +Morison['M2N6MMGzi'] = False # (N-m/m); ; +Morison['M2N7MMGzi'] = False # (N-m/m); ; +Morison['M2N8MMGzi'] = False # (N-m/m); ; +Morison['M2N9MMGzi'] = False # (N-m/m); ; +Morison['M3N1MMGzi'] = False # (N-m/m); ; +Morison['M3N2MMGzi'] = False # (N-m/m); ; +Morison['M3N3MMGzi'] = False # (N-m/m); ; +Morison['M3N4MMGzi'] = False # (N-m/m); ; +Morison['M3N5MMGzi'] = False # (N-m/m); ; +Morison['M3N6MMGzi'] = False # (N-m/m); ; +Morison['M3N7MMGzi'] = False # (N-m/m); ; +Morison['M3N8MMGzi'] = False # (N-m/m); ; +Morison['M3N9MMGzi'] = False # (N-m/m); ; +Morison['M4N1MMGzi'] = False # (N-m/m); ; +Morison['M4N2MMGzi'] = False # (N-m/m); ; +Morison['M4N3MMGzi'] = False # (N-m/m); ; +Morison['M4N4MMGzi'] = False # (N-m/m); ; +Morison['M4N5MMGzi'] = False # (N-m/m); ; +Morison['M4N6MMGzi'] = False # (N-m/m); ; +Morison['M4N7MMGzi'] = False # (N-m/m); ; +Morison['M4N8MMGzi'] = False # (N-m/m); ; +Morison['M4N9MMGzi'] = False # (N-m/m); ; +Morison['M5N1MMGzi'] = False # (N-m/m); ; +Morison['M5N2MMGzi'] = False # (N-m/m); ; +Morison['M5N3MMGzi'] = False # (N-m/m); ; +Morison['M5N4MMGzi'] = False # (N-m/m); ; +Morison['M5N5MMGzi'] = False # (N-m/m); ; +Morison['M5N6MMGzi'] = False # (N-m/m); ; +Morison['M5N7MMGzi'] = False # (N-m/m); ; +Morison['M5N8MMGzi'] = False # (N-m/m); ; +Morison['M5N9MMGzi'] = False # (N-m/m); ; +Morison['M6N1MMGzi'] = False # (N-m/m); ; +Morison['M6N2MMGzi'] = False # (N-m/m); ; +Morison['M6N3MMGzi'] = False # (N-m/m); ; +Morison['M6N4MMGzi'] = False # (N-m/m); ; +Morison['M6N5MMGzi'] = False # (N-m/m); ; +Morison['M6N6MMGzi'] = False # (N-m/m); ; +Morison['M6N7MMGzi'] = False # (N-m/m); ; +Morison['M6N8MMGzi'] = False # (N-m/m); ; +Morison['M6N9MMGzi'] = False # (N-m/m); ; +Morison['M7N1MMGzi'] = False # (N-m/m); ; +Morison['M7N2MMGzi'] = False # (N-m/m); ; +Morison['M7N3MMGzi'] = False # (N-m/m); ; +Morison['M7N4MMGzi'] = False # (N-m/m); ; +Morison['M7N5MMGzi'] = False # (N-m/m); ; +Morison['M7N6MMGzi'] = False # (N-m/m); ; +Morison['M7N7MMGzi'] = False # (N-m/m); ; +Morison['M7N8MMGzi'] = False # (N-m/m); ; +Morison['M7N9MMGzi'] = False # (N-m/m); ; +Morison['M8N1MMGzi'] = False # (N-m/m); ; +Morison['M8N2MMGzi'] = False # (N-m/m); ; +Morison['M8N3MMGzi'] = False # (N-m/m); ; +Morison['M8N4MMGzi'] = False # (N-m/m); ; +Morison['M8N5MMGzi'] = False # (N-m/m); ; +Morison['M8N6MMGzi'] = False # (N-m/m); ; +Morison['M8N7MMGzi'] = False # (N-m/m); ; +Morison['M8N8MMGzi'] = False # (N-m/m); ; +Morison['M8N9MMGzi'] = False # (N-m/m); ; +Morison['M9N1MMGzi'] = False # (N-m/m); ; +Morison['M9N2MMGzi'] = False # (N-m/m); ; +Morison['M9N3MMGzi'] = False # (N-m/m); ; +Morison['M9N4MMGzi'] = False # (N-m/m); ; +Morison['M9N5MMGzi'] = False # (N-m/m); ; +Morison['M9N6MMGzi'] = False # (N-m/m); ; +Morison['M9N7MMGzi'] = False # (N-m/m); ; +Morison['M9N8MMGzi'] = False # (N-m/m); ; +Morison['M9N9MMGzi'] = False # (N-m/m); ; +Morison['M1N1FAMxi'] = False # (N/m); x-component of the distributed added mass force due to the member's displacement of the external fluid, expressed in the inertial coordinate system; +Morison['M1N2FAMxi'] = False # (N/m); ; +Morison['M1N3FAMxi'] = False # (N/m); ; +Morison['M1N4FAMxi'] = False # (N/m); ; +Morison['M1N5FAMxi'] = False # (N/m); ; +Morison['M1N6FAMxi'] = False # (N/m); ; +Morison['M1N7FAMxi'] = False # (N/m); ; +Morison['M1N8FAMxi'] = False # (N/m); ; +Morison['M1N9FAMxi'] = False # (N/m); ; +Morison['M2N1FAMxi'] = False # (N/m); ; +Morison['M2N2FAMxi'] = False # (N/m); ; +Morison['M2N3FAMxi'] = False # (N/m); ; +Morison['M2N4FAMxi'] = False # (N/m); ; +Morison['M2N5FAMxi'] = False # (N/m); ; +Morison['M2N6FAMxi'] = False # (N/m); ; +Morison['M2N7FAMxi'] = False # (N/m); ; +Morison['M2N8FAMxi'] = False # (N/m); ; +Morison['M2N9FAMxi'] = False # (N/m); ; +Morison['M3N1FAMxi'] = False # (N/m); ; +Morison['M3N2FAMxi'] = False # (N/m); ; +Morison['M3N3FAMxi'] = False # (N/m); ; +Morison['M3N4FAMxi'] = False # (N/m); ; +Morison['M3N5FAMxi'] = False # (N/m); ; +Morison['M3N6FAMxi'] = False # (N/m); ; +Morison['M3N7FAMxi'] = False # (N/m); ; +Morison['M3N8FAMxi'] = False # (N/m); ; +Morison['M3N9FAMxi'] = False # (N/m); ; +Morison['M4N1FAMxi'] = False # (N/m); ; +Morison['M4N2FAMxi'] = False # (N/m); ; +Morison['M4N3FAMxi'] = False # (N/m); ; +Morison['M4N4FAMxi'] = False # (N/m); ; +Morison['M4N5FAMxi'] = False # (N/m); ; +Morison['M4N6FAMxi'] = False # (N/m); ; +Morison['M4N7FAMxi'] = False # (N/m); ; +Morison['M4N8FAMxi'] = False # (N/m); ; +Morison['M4N9FAMxi'] = False # (N/m); ; +Morison['M5N1FAMxi'] = False # (N/m); ; +Morison['M5N2FAMxi'] = False # (N/m); ; +Morison['M5N3FAMxi'] = False # (N/m); ; +Morison['M5N4FAMxi'] = False # (N/m); ; +Morison['M5N5FAMxi'] = False # (N/m); ; +Morison['M5N6FAMxi'] = False # (N/m); ; +Morison['M5N7FAMxi'] = False # (N/m); ; +Morison['M5N8FAMxi'] = False # (N/m); ; +Morison['M5N9FAMxi'] = False # (N/m); ; +Morison['M6N1FAMxi'] = False # (N/m); ; +Morison['M6N2FAMxi'] = False # (N/m); ; +Morison['M6N3FAMxi'] = False # (N/m); ; +Morison['M6N4FAMxi'] = False # (N/m); ; +Morison['M6N5FAMxi'] = False # (N/m); ; +Morison['M6N6FAMxi'] = False # (N/m); ; +Morison['M6N7FAMxi'] = False # (N/m); ; +Morison['M6N8FAMxi'] = False # (N/m); ; +Morison['M6N9FAMxi'] = False # (N/m); ; +Morison['M7N1FAMxi'] = False # (N/m); ; +Morison['M7N2FAMxi'] = False # (N/m); ; +Morison['M7N3FAMxi'] = False # (N/m); ; +Morison['M7N4FAMxi'] = False # (N/m); ; +Morison['M7N5FAMxi'] = False # (N/m); ; +Morison['M7N6FAMxi'] = False # (N/m); ; +Morison['M7N7FAMxi'] = False # (N/m); ; +Morison['M7N8FAMxi'] = False # (N/m); ; +Morison['M7N9FAMxi'] = False # (N/m); ; +Morison['M8N1FAMxi'] = False # (N/m); ; +Morison['M8N2FAMxi'] = False # (N/m); ; +Morison['M8N3FAMxi'] = False # (N/m); ; +Morison['M8N4FAMxi'] = False # (N/m); ; +Morison['M8N5FAMxi'] = False # (N/m); ; +Morison['M8N6FAMxi'] = False # (N/m); ; +Morison['M8N7FAMxi'] = False # (N/m); ; +Morison['M8N8FAMxi'] = False # (N/m); ; +Morison['M8N9FAMxi'] = False # (N/m); ; +Morison['M9N1FAMxi'] = False # (N/m); ; +Morison['M9N2FAMxi'] = False # (N/m); ; +Morison['M9N3FAMxi'] = False # (N/m); ; +Morison['M9N4FAMxi'] = False # (N/m); ; +Morison['M9N5FAMxi'] = False # (N/m); ; +Morison['M9N6FAMxi'] = False # (N/m); ; +Morison['M9N7FAMxi'] = False # (N/m); ; +Morison['M9N8FAMxi'] = False # (N/m); ; +Morison['M9N9FAMxi'] = False # (N/m); ; +Morison['M1N1FAMyi'] = False # (N/m); y-component of the distributed added mass force due to the member's displacement of the external fluid, expressed in the inertial coordinate system; +Morison['M1N2FAMyi'] = False # (N/m); ; +Morison['M1N3FAMyi'] = False # (N/m); ; +Morison['M1N4FAMyi'] = False # (N/m); ; +Morison['M1N5FAMyi'] = False # (N/m); ; +Morison['M1N6FAMyi'] = False # (N/m); ; +Morison['M1N7FAMyi'] = False # (N/m); ; +Morison['M1N8FAMyi'] = False # (N/m); ; +Morison['M1N9FAMyi'] = False # (N/m); ; +Morison['M2N1FAMyi'] = False # (N/m); ; +Morison['M2N2FAMyi'] = False # (N/m); ; +Morison['M2N3FAMyi'] = False # (N/m); ; +Morison['M2N4FAMyi'] = False # (N/m); ; +Morison['M2N5FAMyi'] = False # (N/m); ; +Morison['M2N6FAMyi'] = False # (N/m); ; +Morison['M2N7FAMyi'] = False # (N/m); ; +Morison['M2N8FAMyi'] = False # (N/m); ; +Morison['M2N9FAMyi'] = False # (N/m); ; +Morison['M3N1FAMyi'] = False # (N/m); ; +Morison['M3N2FAMyi'] = False # (N/m); ; +Morison['M3N3FAMyi'] = False # (N/m); ; +Morison['M3N4FAMyi'] = False # (N/m); ; +Morison['M3N5FAMyi'] = False # (N/m); ; +Morison['M3N6FAMyi'] = False # (N/m); ; +Morison['M3N7FAMyi'] = False # (N/m); ; +Morison['M3N8FAMyi'] = False # (N/m); ; +Morison['M3N9FAMyi'] = False # (N/m); ; +Morison['M4N1FAMyi'] = False # (N/m); ; +Morison['M4N2FAMyi'] = False # (N/m); ; +Morison['M4N3FAMyi'] = False # (N/m); ; +Morison['M4N4FAMyi'] = False # (N/m); ; +Morison['M4N5FAMyi'] = False # (N/m); ; +Morison['M4N6FAMyi'] = False # (N/m); ; +Morison['M4N7FAMyi'] = False # (N/m); ; +Morison['M4N8FAMyi'] = False # (N/m); ; +Morison['M4N9FAMyi'] = False # (N/m); ; +Morison['M5N1FAMyi'] = False # (N/m); ; +Morison['M5N2FAMyi'] = False # (N/m); ; +Morison['M5N3FAMyi'] = False # (N/m); ; +Morison['M5N4FAMyi'] = False # (N/m); ; +Morison['M5N5FAMyi'] = False # (N/m); ; +Morison['M5N6FAMyi'] = False # (N/m); ; +Morison['M5N7FAMyi'] = False # (N/m); ; +Morison['M5N8FAMyi'] = False # (N/m); ; +Morison['M5N9FAMyi'] = False # (N/m); ; +Morison['M6N1FAMyi'] = False # (N/m); ; +Morison['M6N2FAMyi'] = False # (N/m); ; +Morison['M6N3FAMyi'] = False # (N/m); ; +Morison['M6N4FAMyi'] = False # (N/m); ; +Morison['M6N5FAMyi'] = False # (N/m); ; +Morison['M6N6FAMyi'] = False # (N/m); ; +Morison['M6N7FAMyi'] = False # (N/m); ; +Morison['M6N8FAMyi'] = False # (N/m); ; +Morison['M6N9FAMyi'] = False # (N/m); ; +Morison['M7N1FAMyi'] = False # (N/m); ; +Morison['M7N2FAMyi'] = False # (N/m); ; +Morison['M7N3FAMyi'] = False # (N/m); ; +Morison['M7N4FAMyi'] = False # (N/m); ; +Morison['M7N5FAMyi'] = False # (N/m); ; +Morison['M7N6FAMyi'] = False # (N/m); ; +Morison['M7N7FAMyi'] = False # (N/m); ; +Morison['M7N8FAMyi'] = False # (N/m); ; +Morison['M7N9FAMyi'] = False # (N/m); ; +Morison['M8N1FAMyi'] = False # (N/m); ; +Morison['M8N2FAMyi'] = False # (N/m); ; +Morison['M8N3FAMyi'] = False # (N/m); ; +Morison['M8N4FAMyi'] = False # (N/m); ; +Morison['M8N5FAMyi'] = False # (N/m); ; +Morison['M8N6FAMyi'] = False # (N/m); ; +Morison['M8N7FAMyi'] = False # (N/m); ; +Morison['M8N8FAMyi'] = False # (N/m); ; +Morison['M8N9FAMyi'] = False # (N/m); ; +Morison['M9N1FAMyi'] = False # (N/m); ; +Morison['M9N2FAMyi'] = False # (N/m); ; +Morison['M9N3FAMyi'] = False # (N/m); ; +Morison['M9N4FAMyi'] = False # (N/m); ; +Morison['M9N5FAMyi'] = False # (N/m); ; +Morison['M9N6FAMyi'] = False # (N/m); ; +Morison['M9N7FAMyi'] = False # (N/m); ; +Morison['M9N8FAMyi'] = False # (N/m); ; +Morison['M9N9FAMyi'] = False # (N/m); ; +Morison['M1N1FAMzi'] = False # (N/m); z-component of the distributed added mass force due to the member's displacement of the external fluid, expressed in the inertial coordinate system; +Morison['M1N2FAMzi'] = False # (N/m); ; +Morison['M1N3FAMzi'] = False # (N/m); ; +Morison['M1N4FAMzi'] = False # (N/m); ; +Morison['M1N5FAMzi'] = False # (N/m); ; +Morison['M1N6FAMzi'] = False # (N/m); ; +Morison['M1N7FAMzi'] = False # (N/m); ; +Morison['M1N8FAMzi'] = False # (N/m); ; +Morison['M1N9FAMzi'] = False # (N/m); ; +Morison['M2N1FAMzi'] = False # (N/m); ; +Morison['M2N2FAMzi'] = False # (N/m); ; +Morison['M2N3FAMzi'] = False # (N/m); ; +Morison['M2N4FAMzi'] = False # (N/m); ; +Morison['M2N5FAMzi'] = False # (N/m); ; +Morison['M2N6FAMzi'] = False # (N/m); ; +Morison['M2N7FAMzi'] = False # (N/m); ; +Morison['M2N8FAMzi'] = False # (N/m); ; +Morison['M2N9FAMzi'] = False # (N/m); ; +Morison['M3N1FAMzi'] = False # (N/m); ; +Morison['M3N2FAMzi'] = False # (N/m); ; +Morison['M3N3FAMzi'] = False # (N/m); ; +Morison['M3N4FAMzi'] = False # (N/m); ; +Morison['M3N5FAMzi'] = False # (N/m); ; +Morison['M3N6FAMzi'] = False # (N/m); ; +Morison['M3N7FAMzi'] = False # (N/m); ; +Morison['M3N8FAMzi'] = False # (N/m); ; +Morison['M3N9FAMzi'] = False # (N/m); ; +Morison['M4N1FAMzi'] = False # (N/m); ; +Morison['M4N2FAMzi'] = False # (N/m); ; +Morison['M4N3FAMzi'] = False # (N/m); ; +Morison['M4N4FAMzi'] = False # (N/m); ; +Morison['M4N5FAMzi'] = False # (N/m); ; +Morison['M4N6FAMzi'] = False # (N/m); ; +Morison['M4N7FAMzi'] = False # (N/m); ; +Morison['M4N8FAMzi'] = False # (N/m); ; +Morison['M4N9FAMzi'] = False # (N/m); ; +Morison['M5N1FAMzi'] = False # (N/m); ; +Morison['M5N2FAMzi'] = False # (N/m); ; +Morison['M5N3FAMzi'] = False # (N/m); ; +Morison['M5N4FAMzi'] = False # (N/m); ; +Morison['M5N5FAMzi'] = False # (N/m); ; +Morison['M5N6FAMzi'] = False # (N/m); ; +Morison['M5N7FAMzi'] = False # (N/m); ; +Morison['M5N8FAMzi'] = False # (N/m); ; +Morison['M5N9FAMzi'] = False # (N/m); ; +Morison['M6N1FAMzi'] = False # (N/m); ; +Morison['M6N2FAMzi'] = False # (N/m); ; +Morison['M6N3FAMzi'] = False # (N/m); ; +Morison['M6N4FAMzi'] = False # (N/m); ; +Morison['M6N5FAMzi'] = False # (N/m); ; +Morison['M6N6FAMzi'] = False # (N/m); ; +Morison['M6N7FAMzi'] = False # (N/m); ; +Morison['M6N8FAMzi'] = False # (N/m); ; +Morison['M6N9FAMzi'] = False # (N/m); ; +Morison['M7N1FAMzi'] = False # (N/m); ; +Morison['M7N2FAMzi'] = False # (N/m); ; +Morison['M7N3FAMzi'] = False # (N/m); ; +Morison['M7N4FAMzi'] = False # (N/m); ; +Morison['M7N5FAMzi'] = False # (N/m); ; +Morison['M7N6FAMzi'] = False # (N/m); ; +Morison['M7N7FAMzi'] = False # (N/m); ; +Morison['M7N8FAMzi'] = False # (N/m); ; +Morison['M7N9FAMzi'] = False # (N/m); ; +Morison['M8N1FAMzi'] = False # (N/m); ; +Morison['M8N2FAMzi'] = False # (N/m); ; +Morison['M8N3FAMzi'] = False # (N/m); ; +Morison['M8N4FAMzi'] = False # (N/m); ; +Morison['M8N5FAMzi'] = False # (N/m); ; +Morison['M8N6FAMzi'] = False # (N/m); ; +Morison['M8N7FAMzi'] = False # (N/m); ; +Morison['M8N8FAMzi'] = False # (N/m); ; +Morison['M8N9FAMzi'] = False # (N/m); ; +Morison['M9N1FAMzi'] = False # (N/m); ; +Morison['M9N2FAMzi'] = False # (N/m); ; +Morison['M9N3FAMzi'] = False # (N/m); ; +Morison['M9N4FAMzi'] = False # (N/m); ; +Morison['M9N5FAMzi'] = False # (N/m); ; +Morison['M9N6FAMzi'] = False # (N/m); ; +Morison['M9N7FAMzi'] = False # (N/m); ; +Morison['M9N8FAMzi'] = False # (N/m); ; +Morison['M9N9FAMzi'] = False # (N/m); ; +Morison['M1N1FAGxi'] = False # (N/m); x-component of the distributed marine growth mass inertia force, expressed in the inertial coordinate system; +Morison['M1N2FAGxi'] = False # (N/m); ; +Morison['M1N3FAGxi'] = False # (N/m); ; +Morison['M1N4FAGxi'] = False # (N/m); ; +Morison['M1N5FAGxi'] = False # (N/m); ; +Morison['M1N6FAGxi'] = False # (N/m); ; +Morison['M1N7FAGxi'] = False # (N/m); ; +Morison['M1N8FAGxi'] = False # (N/m); ; +Morison['M1N9FAGxi'] = False # (N/m); ; +Morison['M2N1FAGxi'] = False # (N/m); ; +Morison['M2N2FAGxi'] = False # (N/m); ; +Morison['M2N3FAGxi'] = False # (N/m); ; +Morison['M2N4FAGxi'] = False # (N/m); ; +Morison['M2N5FAGxi'] = False # (N/m); ; +Morison['M2N6FAGxi'] = False # (N/m); ; +Morison['M2N7FAGxi'] = False # (N/m); ; +Morison['M2N8FAGxi'] = False # (N/m); ; +Morison['M2N9FAGxi'] = False # (N/m); ; +Morison['M3N1FAGxi'] = False # (N/m); ; +Morison['M3N2FAGxi'] = False # (N/m); ; +Morison['M3N3FAGxi'] = False # (N/m); ; +Morison['M3N4FAGxi'] = False # (N/m); ; +Morison['M3N5FAGxi'] = False # (N/m); ; +Morison['M3N6FAGxi'] = False # (N/m); ; +Morison['M3N7FAGxi'] = False # (N/m); ; +Morison['M3N8FAGxi'] = False # (N/m); ; +Morison['M3N9FAGxi'] = False # (N/m); ; +Morison['M4N1FAGxi'] = False # (N/m); ; +Morison['M4N2FAGxi'] = False # (N/m); ; +Morison['M4N3FAGxi'] = False # (N/m); ; +Morison['M4N4FAGxi'] = False # (N/m); ; +Morison['M4N5FAGxi'] = False # (N/m); ; +Morison['M4N6FAGxi'] = False # (N/m); ; +Morison['M4N7FAGxi'] = False # (N/m); ; +Morison['M4N8FAGxi'] = False # (N/m); ; +Morison['M4N9FAGxi'] = False # (N/m); ; +Morison['M5N1FAGxi'] = False # (N/m); ; +Morison['M5N2FAGxi'] = False # (N/m); ; +Morison['M5N3FAGxi'] = False # (N/m); ; +Morison['M5N4FAGxi'] = False # (N/m); ; +Morison['M5N5FAGxi'] = False # (N/m); ; +Morison['M5N6FAGxi'] = False # (N/m); ; +Morison['M5N7FAGxi'] = False # (N/m); ; +Morison['M5N8FAGxi'] = False # (N/m); ; +Morison['M5N9FAGxi'] = False # (N/m); ; +Morison['M6N1FAGxi'] = False # (N/m); ; +Morison['M6N2FAGxi'] = False # (N/m); ; +Morison['M6N3FAGxi'] = False # (N/m); ; +Morison['M6N4FAGxi'] = False # (N/m); ; +Morison['M6N5FAGxi'] = False # (N/m); ; +Morison['M6N6FAGxi'] = False # (N/m); ; +Morison['M6N7FAGxi'] = False # (N/m); ; +Morison['M6N8FAGxi'] = False # (N/m); ; +Morison['M6N9FAGxi'] = False # (N/m); ; +Morison['M7N1FAGxi'] = False # (N/m); ; +Morison['M7N2FAGxi'] = False # (N/m); ; +Morison['M7N3FAGxi'] = False # (N/m); ; +Morison['M7N4FAGxi'] = False # (N/m); ; +Morison['M7N5FAGxi'] = False # (N/m); ; +Morison['M7N6FAGxi'] = False # (N/m); ; +Morison['M7N7FAGxi'] = False # (N/m); ; +Morison['M7N8FAGxi'] = False # (N/m); ; +Morison['M7N9FAGxi'] = False # (N/m); ; +Morison['M8N1FAGxi'] = False # (N/m); ; +Morison['M8N2FAGxi'] = False # (N/m); ; +Morison['M8N3FAGxi'] = False # (N/m); ; +Morison['M8N4FAGxi'] = False # (N/m); ; +Morison['M8N5FAGxi'] = False # (N/m); ; +Morison['M8N6FAGxi'] = False # (N/m); ; +Morison['M8N7FAGxi'] = False # (N/m); ; +Morison['M8N8FAGxi'] = False # (N/m); ; +Morison['M8N9FAGxi'] = False # (N/m); ; +Morison['M9N1FAGxi'] = False # (N/m); ; +Morison['M9N2FAGxi'] = False # (N/m); ; +Morison['M9N3FAGxi'] = False # (N/m); ; +Morison['M9N4FAGxi'] = False # (N/m); ; +Morison['M9N5FAGxi'] = False # (N/m); ; +Morison['M9N6FAGxi'] = False # (N/m); ; +Morison['M9N7FAGxi'] = False # (N/m); ; +Morison['M9N8FAGxi'] = False # (N/m); ; +Morison['M9N9FAGxi'] = False # (N/m); ; +Morison['M1N1FAGyi'] = False # (N/m); y-component of the distributed marine growth mass inertia force, expressed in the inertial coordinate system; +Morison['M1N2FAGyi'] = False # (N/m); ; +Morison['M1N3FAGyi'] = False # (N/m); ; +Morison['M1N4FAGyi'] = False # (N/m); ; +Morison['M1N5FAGyi'] = False # (N/m); ; +Morison['M1N6FAGyi'] = False # (N/m); ; +Morison['M1N7FAGyi'] = False # (N/m); ; +Morison['M1N8FAGyi'] = False # (N/m); ; +Morison['M1N9FAGyi'] = False # (N/m); ; +Morison['M2N1FAGyi'] = False # (N/m); ; +Morison['M2N2FAGyi'] = False # (N/m); ; +Morison['M2N3FAGyi'] = False # (N/m); ; +Morison['M2N4FAGyi'] = False # (N/m); ; +Morison['M2N5FAGyi'] = False # (N/m); ; +Morison['M2N6FAGyi'] = False # (N/m); ; +Morison['M2N7FAGyi'] = False # (N/m); ; +Morison['M2N8FAGyi'] = False # (N/m); ; +Morison['M2N9FAGyi'] = False # (N/m); ; +Morison['M3N1FAGyi'] = False # (N/m); ; +Morison['M3N2FAGyi'] = False # (N/m); ; +Morison['M3N3FAGyi'] = False # (N/m); ; +Morison['M3N4FAGyi'] = False # (N/m); ; +Morison['M3N5FAGyi'] = False # (N/m); ; +Morison['M3N6FAGyi'] = False # (N/m); ; +Morison['M3N7FAGyi'] = False # (N/m); ; +Morison['M3N8FAGyi'] = False # (N/m); ; +Morison['M3N9FAGyi'] = False # (N/m); ; +Morison['M4N1FAGyi'] = False # (N/m); ; +Morison['M4N2FAGyi'] = False # (N/m); ; +Morison['M4N3FAGyi'] = False # (N/m); ; +Morison['M4N4FAGyi'] = False # (N/m); ; +Morison['M4N5FAGyi'] = False # (N/m); ; +Morison['M4N6FAGyi'] = False # (N/m); ; +Morison['M4N7FAGyi'] = False # (N/m); ; +Morison['M4N8FAGyi'] = False # (N/m); ; +Morison['M4N9FAGyi'] = False # (N/m); ; +Morison['M5N1FAGyi'] = False # (N/m); ; +Morison['M5N2FAGyi'] = False # (N/m); ; +Morison['M5N3FAGyi'] = False # (N/m); ; +Morison['M5N4FAGyi'] = False # (N/m); ; +Morison['M5N5FAGyi'] = False # (N/m); ; +Morison['M5N6FAGyi'] = False # (N/m); ; +Morison['M5N7FAGyi'] = False # (N/m); ; +Morison['M5N8FAGyi'] = False # (N/m); ; +Morison['M5N9FAGyi'] = False # (N/m); ; +Morison['M6N1FAGyi'] = False # (N/m); ; +Morison['M6N2FAGyi'] = False # (N/m); ; +Morison['M6N3FAGyi'] = False # (N/m); ; +Morison['M6N4FAGyi'] = False # (N/m); ; +Morison['M6N5FAGyi'] = False # (N/m); ; +Morison['M6N6FAGyi'] = False # (N/m); ; +Morison['M6N7FAGyi'] = False # (N/m); ; +Morison['M6N8FAGyi'] = False # (N/m); ; +Morison['M6N9FAGyi'] = False # (N/m); ; +Morison['M7N1FAGyi'] = False # (N/m); ; +Morison['M7N2FAGyi'] = False # (N/m); ; +Morison['M7N3FAGyi'] = False # (N/m); ; +Morison['M7N4FAGyi'] = False # (N/m); ; +Morison['M7N5FAGyi'] = False # (N/m); ; +Morison['M7N6FAGyi'] = False # (N/m); ; +Morison['M7N7FAGyi'] = False # (N/m); ; +Morison['M7N8FAGyi'] = False # (N/m); ; +Morison['M7N9FAGyi'] = False # (N/m); ; +Morison['M8N1FAGyi'] = False # (N/m); ; +Morison['M8N2FAGyi'] = False # (N/m); ; +Morison['M8N3FAGyi'] = False # (N/m); ; +Morison['M8N4FAGyi'] = False # (N/m); ; +Morison['M8N5FAGyi'] = False # (N/m); ; +Morison['M8N6FAGyi'] = False # (N/m); ; +Morison['M8N7FAGyi'] = False # (N/m); ; +Morison['M8N8FAGyi'] = False # (N/m); ; +Morison['M8N9FAGyi'] = False # (N/m); ; +Morison['M9N1FAGyi'] = False # (N/m); ; +Morison['M9N2FAGyi'] = False # (N/m); ; +Morison['M9N3FAGyi'] = False # (N/m); ; +Morison['M9N4FAGyi'] = False # (N/m); ; +Morison['M9N5FAGyi'] = False # (N/m); ; +Morison['M9N6FAGyi'] = False # (N/m); ; +Morison['M9N7FAGyi'] = False # (N/m); ; +Morison['M9N8FAGyi'] = False # (N/m); ; +Morison['M9N9FAGyi'] = False # (N/m); ; +Morison['M1N1FAGzi'] = False # (N/m); z-component of the distributed marine growth mass inertia force, expressed in the inertial coordinate system; +Morison['M1N2FAGzi'] = False # (N/m); ; +Morison['M1N3FAGzi'] = False # (N/m); ; +Morison['M1N4FAGzi'] = False # (N/m); ; +Morison['M1N5FAGzi'] = False # (N/m); ; +Morison['M1N6FAGzi'] = False # (N/m); ; +Morison['M1N7FAGzi'] = False # (N/m); ; +Morison['M1N8FAGzi'] = False # (N/m); ; +Morison['M1N9FAGzi'] = False # (N/m); ; +Morison['M2N1FAGzi'] = False # (N/m); ; +Morison['M2N2FAGzi'] = False # (N/m); ; +Morison['M2N3FAGzi'] = False # (N/m); ; +Morison['M2N4FAGzi'] = False # (N/m); ; +Morison['M2N5FAGzi'] = False # (N/m); ; +Morison['M2N6FAGzi'] = False # (N/m); ; +Morison['M2N7FAGzi'] = False # (N/m); ; +Morison['M2N8FAGzi'] = False # (N/m); ; +Morison['M2N9FAGzi'] = False # (N/m); ; +Morison['M3N1FAGzi'] = False # (N/m); ; +Morison['M3N2FAGzi'] = False # (N/m); ; +Morison['M3N3FAGzi'] = False # (N/m); ; +Morison['M3N4FAGzi'] = False # (N/m); ; +Morison['M3N5FAGzi'] = False # (N/m); ; +Morison['M3N6FAGzi'] = False # (N/m); ; +Morison['M3N7FAGzi'] = False # (N/m); ; +Morison['M3N8FAGzi'] = False # (N/m); ; +Morison['M3N9FAGzi'] = False # (N/m); ; +Morison['M4N1FAGzi'] = False # (N/m); ; +Morison['M4N2FAGzi'] = False # (N/m); ; +Morison['M4N3FAGzi'] = False # (N/m); ; +Morison['M4N4FAGzi'] = False # (N/m); ; +Morison['M4N5FAGzi'] = False # (N/m); ; +Morison['M4N6FAGzi'] = False # (N/m); ; +Morison['M4N7FAGzi'] = False # (N/m); ; +Morison['M4N8FAGzi'] = False # (N/m); ; +Morison['M4N9FAGzi'] = False # (N/m); ; +Morison['M5N1FAGzi'] = False # (N/m); ; +Morison['M5N2FAGzi'] = False # (N/m); ; +Morison['M5N3FAGzi'] = False # (N/m); ; +Morison['M5N4FAGzi'] = False # (N/m); ; +Morison['M5N5FAGzi'] = False # (N/m); ; +Morison['M5N6FAGzi'] = False # (N/m); ; +Morison['M5N7FAGzi'] = False # (N/m); ; +Morison['M5N8FAGzi'] = False # (N/m); ; +Morison['M5N9FAGzi'] = False # (N/m); ; +Morison['M6N1FAGzi'] = False # (N/m); ; +Morison['M6N2FAGzi'] = False # (N/m); ; +Morison['M6N3FAGzi'] = False # (N/m); ; +Morison['M6N4FAGzi'] = False # (N/m); ; +Morison['M6N5FAGzi'] = False # (N/m); ; +Morison['M6N6FAGzi'] = False # (N/m); ; +Morison['M6N7FAGzi'] = False # (N/m); ; +Morison['M6N8FAGzi'] = False # (N/m); ; +Morison['M6N9FAGzi'] = False # (N/m); ; +Morison['M7N1FAGzi'] = False # (N/m); ; +Morison['M7N2FAGzi'] = False # (N/m); ; +Morison['M7N3FAGzi'] = False # (N/m); ; +Morison['M7N4FAGzi'] = False # (N/m); ; +Morison['M7N5FAGzi'] = False # (N/m); ; +Morison['M7N6FAGzi'] = False # (N/m); ; +Morison['M7N7FAGzi'] = False # (N/m); ; +Morison['M7N8FAGzi'] = False # (N/m); ; +Morison['M7N9FAGzi'] = False # (N/m); ; +Morison['M8N1FAGzi'] = False # (N/m); ; +Morison['M8N2FAGzi'] = False # (N/m); ; +Morison['M8N3FAGzi'] = False # (N/m); ; +Morison['M8N4FAGzi'] = False # (N/m); ; +Morison['M8N5FAGzi'] = False # (N/m); ; +Morison['M8N6FAGzi'] = False # (N/m); ; +Morison['M8N7FAGzi'] = False # (N/m); ; +Morison['M8N8FAGzi'] = False # (N/m); ; +Morison['M8N9FAGzi'] = False # (N/m); ; +Morison['M9N1FAGzi'] = False # (N/m); ; +Morison['M9N2FAGzi'] = False # (N/m); ; +Morison['M9N3FAGzi'] = False # (N/m); ; +Morison['M9N4FAGzi'] = False # (N/m); ; +Morison['M9N5FAGzi'] = False # (N/m); ; +Morison['M9N6FAGzi'] = False # (N/m); ; +Morison['M9N7FAGzi'] = False # (N/m); ; +Morison['M9N8FAGzi'] = False # (N/m); ; +Morison['M9N9FAGzi'] = False # (N/m); ; +Morison['M1N1MAGxi'] = False # (N-m/m); x-component of the distributed marine growth mass inertia moment, expressed in the inertial coordinate system; +Morison['M1N2MAGxi'] = False # (N-m/m); ; +Morison['M1N3MAGxi'] = False # (N-m/m); ; +Morison['M1N4MAGxi'] = False # (N-m/m); ; +Morison['M1N5MAGxi'] = False # (N-m/m); ; +Morison['M1N6MAGxi'] = False # (N-m/m); ; +Morison['M1N7MAGxi'] = False # (N-m/m); ; +Morison['M1N8MAGxi'] = False # (N-m/m); ; +Morison['M1N9MAGxi'] = False # (N-m/m); ; +Morison['M2N1MAGxi'] = False # (N-m/m); ; +Morison['M2N2MAGxi'] = False # (N-m/m); ; +Morison['M2N3MAGxi'] = False # (N-m/m); ; +Morison['M2N4MAGxi'] = False # (N-m/m); ; +Morison['M2N5MAGxi'] = False # (N-m/m); ; +Morison['M2N6MAGxi'] = False # (N-m/m); ; +Morison['M2N7MAGxi'] = False # (N-m/m); ; +Morison['M2N8MAGxi'] = False # (N-m/m); ; +Morison['M2N9MAGxi'] = False # (N-m/m); ; +Morison['M3N1MAGxi'] = False # (N-m/m); ; +Morison['M3N2MAGxi'] = False # (N-m/m); ; +Morison['M3N3MAGxi'] = False # (N-m/m); ; +Morison['M3N4MAGxi'] = False # (N-m/m); ; +Morison['M3N5MAGxi'] = False # (N-m/m); ; +Morison['M3N6MAGxi'] = False # (N-m/m); ; +Morison['M3N7MAGxi'] = False # (N-m/m); ; +Morison['M3N8MAGxi'] = False # (N-m/m); ; +Morison['M3N9MAGxi'] = False # (N-m/m); ; +Morison['M4N1MAGxi'] = False # (N-m/m); ; +Morison['M4N2MAGxi'] = False # (N-m/m); ; +Morison['M4N3MAGxi'] = False # (N-m/m); ; +Morison['M4N4MAGxi'] = False # (N-m/m); ; +Morison['M4N5MAGxi'] = False # (N-m/m); ; +Morison['M4N6MAGxi'] = False # (N-m/m); ; +Morison['M4N7MAGxi'] = False # (N-m/m); ; +Morison['M4N8MAGxi'] = False # (N-m/m); ; +Morison['M4N9MAGxi'] = False # (N-m/m); ; +Morison['M5N1MAGxi'] = False # (N-m/m); ; +Morison['M5N2MAGxi'] = False # (N-m/m); ; +Morison['M5N3MAGxi'] = False # (N-m/m); ; +Morison['M5N4MAGxi'] = False # (N-m/m); ; +Morison['M5N5MAGxi'] = False # (N-m/m); ; +Morison['M5N6MAGxi'] = False # (N-m/m); ; +Morison['M5N7MAGxi'] = False # (N-m/m); ; +Morison['M5N8MAGxi'] = False # (N-m/m); ; +Morison['M5N9MAGxi'] = False # (N-m/m); ; +Morison['M6N1MAGxi'] = False # (N-m/m); ; +Morison['M6N2MAGxi'] = False # (N-m/m); ; +Morison['M6N3MAGxi'] = False # (N-m/m); ; +Morison['M6N4MAGxi'] = False # (N-m/m); ; +Morison['M6N5MAGxi'] = False # (N-m/m); ; +Morison['M6N6MAGxi'] = False # (N-m/m); ; +Morison['M6N7MAGxi'] = False # (N-m/m); ; +Morison['M6N8MAGxi'] = False # (N-m/m); ; +Morison['M6N9MAGxi'] = False # (N-m/m); ; +Morison['M7N1MAGxi'] = False # (N-m/m); ; +Morison['M7N2MAGxi'] = False # (N-m/m); ; +Morison['M7N3MAGxi'] = False # (N-m/m); ; +Morison['M7N4MAGxi'] = False # (N-m/m); ; +Morison['M7N5MAGxi'] = False # (N-m/m); ; +Morison['M7N6MAGxi'] = False # (N-m/m); ; +Morison['M7N7MAGxi'] = False # (N-m/m); ; +Morison['M7N8MAGxi'] = False # (N-m/m); ; +Morison['M7N9MAGxi'] = False # (N-m/m); ; +Morison['M8N1MAGxi'] = False # (N-m/m); ; +Morison['M8N2MAGxi'] = False # (N-m/m); ; +Morison['M8N3MAGxi'] = False # (N-m/m); ; +Morison['M8N4MAGxi'] = False # (N-m/m); ; +Morison['M8N5MAGxi'] = False # (N-m/m); ; +Morison['M8N6MAGxi'] = False # (N-m/m); ; +Morison['M8N7MAGxi'] = False # (N-m/m); ; +Morison['M8N8MAGxi'] = False # (N-m/m); ; +Morison['M8N9MAGxi'] = False # (N-m/m); ; +Morison['M9N1MAGxi'] = False # (N-m/m); ; +Morison['M9N2MAGxi'] = False # (N-m/m); ; +Morison['M9N3MAGxi'] = False # (N-m/m); ; +Morison['M9N4MAGxi'] = False # (N-m/m); ; +Morison['M9N5MAGxi'] = False # (N-m/m); ; +Morison['M9N6MAGxi'] = False # (N-m/m); ; +Morison['M9N7MAGxi'] = False # (N-m/m); ; +Morison['M9N8MAGxi'] = False # (N-m/m); ; +Morison['M9N9MAGxi'] = False # (N-m/m); ; +Morison['M1N1MAGyi'] = False # (N-m/m); y-component of the distributed marine growth mass inertia moment, expressed in the inertial coordinate system; +Morison['M1N2MAGyi'] = False # (N-m/m); ; +Morison['M1N3MAGyi'] = False # (N-m/m); ; +Morison['M1N4MAGyi'] = False # (N-m/m); ; +Morison['M1N5MAGyi'] = False # (N-m/m); ; +Morison['M1N6MAGyi'] = False # (N-m/m); ; +Morison['M1N7MAGyi'] = False # (N-m/m); ; +Morison['M1N8MAGyi'] = False # (N-m/m); ; +Morison['M1N9MAGyi'] = False # (N-m/m); ; +Morison['M2N1MAGyi'] = False # (N-m/m); ; +Morison['M2N2MAGyi'] = False # (N-m/m); ; +Morison['M2N3MAGyi'] = False # (N-m/m); ; +Morison['M2N4MAGyi'] = False # (N-m/m); ; +Morison['M2N5MAGyi'] = False # (N-m/m); ; +Morison['M2N6MAGyi'] = False # (N-m/m); ; +Morison['M2N7MAGyi'] = False # (N-m/m); ; +Morison['M2N8MAGyi'] = False # (N-m/m); ; +Morison['M2N9MAGyi'] = False # (N-m/m); ; +Morison['M3N1MAGyi'] = False # (N-m/m); ; +Morison['M3N2MAGyi'] = False # (N-m/m); ; +Morison['M3N3MAGyi'] = False # (N-m/m); ; +Morison['M3N4MAGyi'] = False # (N-m/m); ; +Morison['M3N5MAGyi'] = False # (N-m/m); ; +Morison['M3N6MAGyi'] = False # (N-m/m); ; +Morison['M3N7MAGyi'] = False # (N-m/m); ; +Morison['M3N8MAGyi'] = False # (N-m/m); ; +Morison['M3N9MAGyi'] = False # (N-m/m); ; +Morison['M4N1MAGyi'] = False # (N-m/m); ; +Morison['M4N2MAGyi'] = False # (N-m/m); ; +Morison['M4N3MAGyi'] = False # (N-m/m); ; +Morison['M4N4MAGyi'] = False # (N-m/m); ; +Morison['M4N5MAGyi'] = False # (N-m/m); ; +Morison['M4N6MAGyi'] = False # (N-m/m); ; +Morison['M4N7MAGyi'] = False # (N-m/m); ; +Morison['M4N8MAGyi'] = False # (N-m/m); ; +Morison['M4N9MAGyi'] = False # (N-m/m); ; +Morison['M5N1MAGyi'] = False # (N-m/m); ; +Morison['M5N2MAGyi'] = False # (N-m/m); ; +Morison['M5N3MAGyi'] = False # (N-m/m); ; +Morison['M5N4MAGyi'] = False # (N-m/m); ; +Morison['M5N5MAGyi'] = False # (N-m/m); ; +Morison['M5N6MAGyi'] = False # (N-m/m); ; +Morison['M5N7MAGyi'] = False # (N-m/m); ; +Morison['M5N8MAGyi'] = False # (N-m/m); ; +Morison['M5N9MAGyi'] = False # (N-m/m); ; +Morison['M6N1MAGyi'] = False # (N-m/m); ; +Morison['M6N2MAGyi'] = False # (N-m/m); ; +Morison['M6N3MAGyi'] = False # (N-m/m); ; +Morison['M6N4MAGyi'] = False # (N-m/m); ; +Morison['M6N5MAGyi'] = False # (N-m/m); ; +Morison['M6N6MAGyi'] = False # (N-m/m); ; +Morison['M6N7MAGyi'] = False # (N-m/m); ; +Morison['M6N8MAGyi'] = False # (N-m/m); ; +Morison['M6N9MAGyi'] = False # (N-m/m); ; +Morison['M7N1MAGyi'] = False # (N-m/m); ; +Morison['M7N2MAGyi'] = False # (N-m/m); ; +Morison['M7N3MAGyi'] = False # (N-m/m); ; +Morison['M7N4MAGyi'] = False # (N-m/m); ; +Morison['M7N5MAGyi'] = False # (N-m/m); ; +Morison['M7N6MAGyi'] = False # (N-m/m); ; +Morison['M7N7MAGyi'] = False # (N-m/m); ; +Morison['M7N8MAGyi'] = False # (N-m/m); ; +Morison['M7N9MAGyi'] = False # (N-m/m); ; +Morison['M8N1MAGyi'] = False # (N-m/m); ; +Morison['M8N2MAGyi'] = False # (N-m/m); ; +Morison['M8N3MAGyi'] = False # (N-m/m); ; +Morison['M8N4MAGyi'] = False # (N-m/m); ; +Morison['M8N5MAGyi'] = False # (N-m/m); ; +Morison['M8N6MAGyi'] = False # (N-m/m); ; +Morison['M8N7MAGyi'] = False # (N-m/m); ; +Morison['M8N8MAGyi'] = False # (N-m/m); ; +Morison['M8N9MAGyi'] = False # (N-m/m); ; +Morison['M9N1MAGyi'] = False # (N-m/m); ; +Morison['M9N2MAGyi'] = False # (N-m/m); ; +Morison['M9N3MAGyi'] = False # (N-m/m); ; +Morison['M9N4MAGyi'] = False # (N-m/m); ; +Morison['M9N5MAGyi'] = False # (N-m/m); ; +Morison['M9N6MAGyi'] = False # (N-m/m); ; +Morison['M9N7MAGyi'] = False # (N-m/m); ; +Morison['M9N8MAGyi'] = False # (N-m/m); ; +Morison['M9N9MAGyi'] = False # (N-m/m); ; +Morison['M1N1MAGzi'] = False # (N-m/m); z-component of the distributed marine growth mass inertia moment, expressed in the inertial coordinate system; +Morison['M1N2MAGzi'] = False # (N-m/m); ; +Morison['M1N3MAGzi'] = False # (N-m/m); ; +Morison['M1N4MAGzi'] = False # (N-m/m); ; +Morison['M1N5MAGzi'] = False # (N-m/m); ; +Morison['M1N6MAGzi'] = False # (N-m/m); ; +Morison['M1N7MAGzi'] = False # (N-m/m); ; +Morison['M1N8MAGzi'] = False # (N-m/m); ; +Morison['M1N9MAGzi'] = False # (N-m/m); ; +Morison['M2N1MAGzi'] = False # (N-m/m); ; +Morison['M2N2MAGzi'] = False # (N-m/m); ; +Morison['M2N3MAGzi'] = False # (N-m/m); ; +Morison['M2N4MAGzi'] = False # (N-m/m); ; +Morison['M2N5MAGzi'] = False # (N-m/m); ; +Morison['M2N6MAGzi'] = False # (N-m/m); ; +Morison['M2N7MAGzi'] = False # (N-m/m); ; +Morison['M2N8MAGzi'] = False # (N-m/m); ; +Morison['M2N9MAGzi'] = False # (N-m/m); ; +Morison['M3N1MAGzi'] = False # (N-m/m); ; +Morison['M3N2MAGzi'] = False # (N-m/m); ; +Morison['M3N3MAGzi'] = False # (N-m/m); ; +Morison['M3N4MAGzi'] = False # (N-m/m); ; +Morison['M3N5MAGzi'] = False # (N-m/m); ; +Morison['M3N6MAGzi'] = False # (N-m/m); ; +Morison['M3N7MAGzi'] = False # (N-m/m); ; +Morison['M3N8MAGzi'] = False # (N-m/m); ; +Morison['M3N9MAGzi'] = False # (N-m/m); ; +Morison['M4N1MAGzi'] = False # (N-m/m); ; +Morison['M4N2MAGzi'] = False # (N-m/m); ; +Morison['M4N3MAGzi'] = False # (N-m/m); ; +Morison['M4N4MAGzi'] = False # (N-m/m); ; +Morison['M4N5MAGzi'] = False # (N-m/m); ; +Morison['M4N6MAGzi'] = False # (N-m/m); ; +Morison['M4N7MAGzi'] = False # (N-m/m); ; +Morison['M4N8MAGzi'] = False # (N-m/m); ; +Morison['M4N9MAGzi'] = False # (N-m/m); ; +Morison['M5N1MAGzi'] = False # (N-m/m); ; +Morison['M5N2MAGzi'] = False # (N-m/m); ; +Morison['M5N3MAGzi'] = False # (N-m/m); ; +Morison['M5N4MAGzi'] = False # (N-m/m); ; +Morison['M5N5MAGzi'] = False # (N-m/m); ; +Morison['M5N6MAGzi'] = False # (N-m/m); ; +Morison['M5N7MAGzi'] = False # (N-m/m); ; +Morison['M5N8MAGzi'] = False # (N-m/m); ; +Morison['M5N9MAGzi'] = False # (N-m/m); ; +Morison['M6N1MAGzi'] = False # (N-m/m); ; +Morison['M6N2MAGzi'] = False # (N-m/m); ; +Morison['M6N3MAGzi'] = False # (N-m/m); ; +Morison['M6N4MAGzi'] = False # (N-m/m); ; +Morison['M6N5MAGzi'] = False # (N-m/m); ; +Morison['M6N6MAGzi'] = False # (N-m/m); ; +Morison['M6N7MAGzi'] = False # (N-m/m); ; +Morison['M6N8MAGzi'] = False # (N-m/m); ; +Morison['M6N9MAGzi'] = False # (N-m/m); ; +Morison['M7N1MAGzi'] = False # (N-m/m); ; +Morison['M7N2MAGzi'] = False # (N-m/m); ; +Morison['M7N3MAGzi'] = False # (N-m/m); ; +Morison['M7N4MAGzi'] = False # (N-m/m); ; +Morison['M7N5MAGzi'] = False # (N-m/m); ; +Morison['M7N6MAGzi'] = False # (N-m/m); ; +Morison['M7N7MAGzi'] = False # (N-m/m); ; +Morison['M7N8MAGzi'] = False # (N-m/m); ; +Morison['M7N9MAGzi'] = False # (N-m/m); ; +Morison['M8N1MAGzi'] = False # (N-m/m); ; +Morison['M8N2MAGzi'] = False # (N-m/m); ; +Morison['M8N3MAGzi'] = False # (N-m/m); ; +Morison['M8N4MAGzi'] = False # (N-m/m); ; +Morison['M8N5MAGzi'] = False # (N-m/m); ; +Morison['M8N6MAGzi'] = False # (N-m/m); ; +Morison['M8N7MAGzi'] = False # (N-m/m); ; +Morison['M8N8MAGzi'] = False # (N-m/m); ; +Morison['M8N9MAGzi'] = False # (N-m/m); ; +Morison['M9N1MAGzi'] = False # (N-m/m); ; +Morison['M9N2MAGzi'] = False # (N-m/m); ; +Morison['M9N3MAGzi'] = False # (N-m/m); ; +Morison['M9N4MAGzi'] = False # (N-m/m); ; +Morison['M9N5MAGzi'] = False # (N-m/m); ; +Morison['M9N6MAGzi'] = False # (N-m/m); ; +Morison['M9N7MAGzi'] = False # (N-m/m); ; +Morison['M9N8MAGzi'] = False # (N-m/m); ; +Morison['M9N9MAGzi'] = False # (N-m/m); ; +Morison['M1N1FAFxi'] = False # (N/m); x-component of the distributed flooding/ballasting mass inertia force, expressed in the inertial coordinate system; +Morison['M1N2FAFxi'] = False # (N/m); ; +Morison['M1N3FAFxi'] = False # (N/m); ; +Morison['M1N4FAFxi'] = False # (N/m); ; +Morison['M1N5FAFxi'] = False # (N/m); ; +Morison['M1N6FAFxi'] = False # (N/m); ; +Morison['M1N7FAFxi'] = False # (N/m); ; +Morison['M1N8FAFxi'] = False # (N/m); ; +Morison['M1N9FAFxi'] = False # (N/m); ; +Morison['M2N1FAFxi'] = False # (N/m); ; +Morison['M2N2FAFxi'] = False # (N/m); ; +Morison['M2N3FAFxi'] = False # (N/m); ; +Morison['M2N4FAFxi'] = False # (N/m); ; +Morison['M2N5FAFxi'] = False # (N/m); ; +Morison['M2N6FAFxi'] = False # (N/m); ; +Morison['M2N7FAFxi'] = False # (N/m); ; +Morison['M2N8FAFxi'] = False # (N/m); ; +Morison['M2N9FAFxi'] = False # (N/m); ; +Morison['M3N1FAFxi'] = False # (N/m); ; +Morison['M3N2FAFxi'] = False # (N/m); ; +Morison['M3N3FAFxi'] = False # (N/m); ; +Morison['M3N4FAFxi'] = False # (N/m); ; +Morison['M3N5FAFxi'] = False # (N/m); ; +Morison['M3N6FAFxi'] = False # (N/m); ; +Morison['M3N7FAFxi'] = False # (N/m); ; +Morison['M3N8FAFxi'] = False # (N/m); ; +Morison['M3N9FAFxi'] = False # (N/m); ; +Morison['M4N1FAFxi'] = False # (N/m); ; +Morison['M4N2FAFxi'] = False # (N/m); ; +Morison['M4N3FAFxi'] = False # (N/m); ; +Morison['M4N4FAFxi'] = False # (N/m); ; +Morison['M4N5FAFxi'] = False # (N/m); ; +Morison['M4N6FAFxi'] = False # (N/m); ; +Morison['M4N7FAFxi'] = False # (N/m); ; +Morison['M4N8FAFxi'] = False # (N/m); ; +Morison['M4N9FAFxi'] = False # (N/m); ; +Morison['M5N1FAFxi'] = False # (N/m); ; +Morison['M5N2FAFxi'] = False # (N/m); ; +Morison['M5N3FAFxi'] = False # (N/m); ; +Morison['M5N4FAFxi'] = False # (N/m); ; +Morison['M5N5FAFxi'] = False # (N/m); ; +Morison['M5N6FAFxi'] = False # (N/m); ; +Morison['M5N7FAFxi'] = False # (N/m); ; +Morison['M5N8FAFxi'] = False # (N/m); ; +Morison['M5N9FAFxi'] = False # (N/m); ; +Morison['M6N1FAFxi'] = False # (N/m); ; +Morison['M6N2FAFxi'] = False # (N/m); ; +Morison['M6N3FAFxi'] = False # (N/m); ; +Morison['M6N4FAFxi'] = False # (N/m); ; +Morison['M6N5FAFxi'] = False # (N/m); ; +Morison['M6N6FAFxi'] = False # (N/m); ; +Morison['M6N7FAFxi'] = False # (N/m); ; +Morison['M6N8FAFxi'] = False # (N/m); ; +Morison['M6N9FAFxi'] = False # (N/m); ; +Morison['M7N1FAFxi'] = False # (N/m); ; +Morison['M7N2FAFxi'] = False # (N/m); ; +Morison['M7N3FAFxi'] = False # (N/m); ; +Morison['M7N4FAFxi'] = False # (N/m); ; +Morison['M7N5FAFxi'] = False # (N/m); ; +Morison['M7N6FAFxi'] = False # (N/m); ; +Morison['M7N7FAFxi'] = False # (N/m); ; +Morison['M7N8FAFxi'] = False # (N/m); ; +Morison['M7N9FAFxi'] = False # (N/m); ; +Morison['M8N1FAFxi'] = False # (N/m); ; +Morison['M8N2FAFxi'] = False # (N/m); ; +Morison['M8N3FAFxi'] = False # (N/m); ; +Morison['M8N4FAFxi'] = False # (N/m); ; +Morison['M8N5FAFxi'] = False # (N/m); ; +Morison['M8N6FAFxi'] = False # (N/m); ; +Morison['M8N7FAFxi'] = False # (N/m); ; +Morison['M8N8FAFxi'] = False # (N/m); ; +Morison['M8N9FAFxi'] = False # (N/m); ; +Morison['M9N1FAFxi'] = False # (N/m); ; +Morison['M9N2FAFxi'] = False # (N/m); ; +Morison['M9N3FAFxi'] = False # (N/m); ; +Morison['M9N4FAFxi'] = False # (N/m); ; +Morison['M9N5FAFxi'] = False # (N/m); ; +Morison['M9N6FAFxi'] = False # (N/m); ; +Morison['M9N7FAFxi'] = False # (N/m); ; +Morison['M9N8FAFxi'] = False # (N/m); ; +Morison['M9N9FAFxi'] = False # (N/m); ; +Morison['M1N1FAFyi'] = False # (N/m); y-component of the distributed flooding/ballasting mass inertia force, expressed in the inertial coordinate system; +Morison['M1N2FAFyi'] = False # (N/m); ; +Morison['M1N3FAFyi'] = False # (N/m); ; +Morison['M1N4FAFyi'] = False # (N/m); ; +Morison['M1N5FAFyi'] = False # (N/m); ; +Morison['M1N6FAFyi'] = False # (N/m); ; +Morison['M1N7FAFyi'] = False # (N/m); ; +Morison['M1N8FAFyi'] = False # (N/m); ; +Morison['M1N9FAFyi'] = False # (N/m); ; +Morison['M2N1FAFyi'] = False # (N/m); ; +Morison['M2N2FAFyi'] = False # (N/m); ; +Morison['M2N3FAFyi'] = False # (N/m); ; +Morison['M2N4FAFyi'] = False # (N/m); ; +Morison['M2N5FAFyi'] = False # (N/m); ; +Morison['M2N6FAFyi'] = False # (N/m); ; +Morison['M2N7FAFyi'] = False # (N/m); ; +Morison['M2N8FAFyi'] = False # (N/m); ; +Morison['M2N9FAFyi'] = False # (N/m); ; +Morison['M3N1FAFyi'] = False # (N/m); ; +Morison['M3N2FAFyi'] = False # (N/m); ; +Morison['M3N3FAFyi'] = False # (N/m); ; +Morison['M3N4FAFyi'] = False # (N/m); ; +Morison['M3N5FAFyi'] = False # (N/m); ; +Morison['M3N6FAFyi'] = False # (N/m); ; +Morison['M3N7FAFyi'] = False # (N/m); ; +Morison['M3N8FAFyi'] = False # (N/m); ; +Morison['M3N9FAFyi'] = False # (N/m); ; +Morison['M4N1FAFyi'] = False # (N/m); ; +Morison['M4N2FAFyi'] = False # (N/m); ; +Morison['M4N3FAFyi'] = False # (N/m); ; +Morison['M4N4FAFyi'] = False # (N/m); ; +Morison['M4N5FAFyi'] = False # (N/m); ; +Morison['M4N6FAFyi'] = False # (N/m); ; +Morison['M4N7FAFyi'] = False # (N/m); ; +Morison['M4N8FAFyi'] = False # (N/m); ; +Morison['M4N9FAFyi'] = False # (N/m); ; +Morison['M5N1FAFyi'] = False # (N/m); ; +Morison['M5N2FAFyi'] = False # (N/m); ; +Morison['M5N3FAFyi'] = False # (N/m); ; +Morison['M5N4FAFyi'] = False # (N/m); ; +Morison['M5N5FAFyi'] = False # (N/m); ; +Morison['M5N6FAFyi'] = False # (N/m); ; +Morison['M5N7FAFyi'] = False # (N/m); ; +Morison['M5N8FAFyi'] = False # (N/m); ; +Morison['M5N9FAFyi'] = False # (N/m); ; +Morison['M6N1FAFyi'] = False # (N/m); ; +Morison['M6N2FAFyi'] = False # (N/m); ; +Morison['M6N3FAFyi'] = False # (N/m); ; +Morison['M6N4FAFyi'] = False # (N/m); ; +Morison['M6N5FAFyi'] = False # (N/m); ; +Morison['M6N6FAFyi'] = False # (N/m); ; +Morison['M6N7FAFyi'] = False # (N/m); ; +Morison['M6N8FAFyi'] = False # (N/m); ; +Morison['M6N9FAFyi'] = False # (N/m); ; +Morison['M7N1FAFyi'] = False # (N/m); ; +Morison['M7N2FAFyi'] = False # (N/m); ; +Morison['M7N3FAFyi'] = False # (N/m); ; +Morison['M7N4FAFyi'] = False # (N/m); ; +Morison['M7N5FAFyi'] = False # (N/m); ; +Morison['M7N6FAFyi'] = False # (N/m); ; +Morison['M7N7FAFyi'] = False # (N/m); ; +Morison['M7N8FAFyi'] = False # (N/m); ; +Morison['M7N9FAFyi'] = False # (N/m); ; +Morison['M8N1FAFyi'] = False # (N/m); ; +Morison['M8N2FAFyi'] = False # (N/m); ; +Morison['M8N3FAFyi'] = False # (N/m); ; +Morison['M8N4FAFyi'] = False # (N/m); ; +Morison['M8N5FAFyi'] = False # (N/m); ; +Morison['M8N6FAFyi'] = False # (N/m); ; +Morison['M8N7FAFyi'] = False # (N/m); ; +Morison['M8N8FAFyi'] = False # (N/m); ; +Morison['M8N9FAFyi'] = False # (N/m); ; +Morison['M9N1FAFyi'] = False # (N/m); ; +Morison['M9N2FAFyi'] = False # (N/m); ; +Morison['M9N3FAFyi'] = False # (N/m); ; +Morison['M9N4FAFyi'] = False # (N/m); ; +Morison['M9N5FAFyi'] = False # (N/m); ; +Morison['M9N6FAFyi'] = False # (N/m); ; +Morison['M9N7FAFyi'] = False # (N/m); ; +Morison['M9N8FAFyi'] = False # (N/m); ; +Morison['M9N9FAFyi'] = False # (N/m); ; +Morison['M1N1FAFzi'] = False # (N/m); z-component of the distributed flooding/ballasting mass inertia force, expressed in the inertial coordinate system; +Morison['M1N2FAFzi'] = False # (N/m); ; +Morison['M1N3FAFzi'] = False # (N/m); ; +Morison['M1N4FAFzi'] = False # (N/m); ; +Morison['M1N5FAFzi'] = False # (N/m); ; +Morison['M1N6FAFzi'] = False # (N/m); ; +Morison['M1N7FAFzi'] = False # (N/m); ; +Morison['M1N8FAFzi'] = False # (N/m); ; +Morison['M1N9FAFzi'] = False # (N/m); ; +Morison['M2N1FAFzi'] = False # (N/m); ; +Morison['M2N2FAFzi'] = False # (N/m); ; +Morison['M2N3FAFzi'] = False # (N/m); ; +Morison['M2N4FAFzi'] = False # (N/m); ; +Morison['M2N5FAFzi'] = False # (N/m); ; +Morison['M2N6FAFzi'] = False # (N/m); ; +Morison['M2N7FAFzi'] = False # (N/m); ; +Morison['M2N8FAFzi'] = False # (N/m); ; +Morison['M2N9FAFzi'] = False # (N/m); ; +Morison['M3N1FAFzi'] = False # (N/m); ; +Morison['M3N2FAFzi'] = False # (N/m); ; +Morison['M3N3FAFzi'] = False # (N/m); ; +Morison['M3N4FAFzi'] = False # (N/m); ; +Morison['M3N5FAFzi'] = False # (N/m); ; +Morison['M3N6FAFzi'] = False # (N/m); ; +Morison['M3N7FAFzi'] = False # (N/m); ; +Morison['M3N8FAFzi'] = False # (N/m); ; +Morison['M3N9FAFzi'] = False # (N/m); ; +Morison['M4N1FAFzi'] = False # (N/m); ; +Morison['M4N2FAFzi'] = False # (N/m); ; +Morison['M4N3FAFzi'] = False # (N/m); ; +Morison['M4N4FAFzi'] = False # (N/m); ; +Morison['M4N5FAFzi'] = False # (N/m); ; +Morison['M4N6FAFzi'] = False # (N/m); ; +Morison['M4N7FAFzi'] = False # (N/m); ; +Morison['M4N8FAFzi'] = False # (N/m); ; +Morison['M4N9FAFzi'] = False # (N/m); ; +Morison['M5N1FAFzi'] = False # (N/m); ; +Morison['M5N2FAFzi'] = False # (N/m); ; +Morison['M5N3FAFzi'] = False # (N/m); ; +Morison['M5N4FAFzi'] = False # (N/m); ; +Morison['M5N5FAFzi'] = False # (N/m); ; +Morison['M5N6FAFzi'] = False # (N/m); ; +Morison['M5N7FAFzi'] = False # (N/m); ; +Morison['M5N8FAFzi'] = False # (N/m); ; +Morison['M5N9FAFzi'] = False # (N/m); ; +Morison['M6N1FAFzi'] = False # (N/m); ; +Morison['M6N2FAFzi'] = False # (N/m); ; +Morison['M6N3FAFzi'] = False # (N/m); ; +Morison['M6N4FAFzi'] = False # (N/m); ; +Morison['M6N5FAFzi'] = False # (N/m); ; +Morison['M6N6FAFzi'] = False # (N/m); ; +Morison['M6N7FAFzi'] = False # (N/m); ; +Morison['M6N8FAFzi'] = False # (N/m); ; +Morison['M6N9FAFzi'] = False # (N/m); ; +Morison['M7N1FAFzi'] = False # (N/m); ; +Morison['M7N2FAFzi'] = False # (N/m); ; +Morison['M7N3FAFzi'] = False # (N/m); ; +Morison['M7N4FAFzi'] = False # (N/m); ; +Morison['M7N5FAFzi'] = False # (N/m); ; +Morison['M7N6FAFzi'] = False # (N/m); ; +Morison['M7N7FAFzi'] = False # (N/m); ; +Morison['M7N8FAFzi'] = False # (N/m); ; +Morison['M7N9FAFzi'] = False # (N/m); ; +Morison['M8N1FAFzi'] = False # (N/m); ; +Morison['M8N2FAFzi'] = False # (N/m); ; +Morison['M8N3FAFzi'] = False # (N/m); ; +Morison['M8N4FAFzi'] = False # (N/m); ; +Morison['M8N5FAFzi'] = False # (N/m); ; +Morison['M8N6FAFzi'] = False # (N/m); ; +Morison['M8N7FAFzi'] = False # (N/m); ; +Morison['M8N8FAFzi'] = False # (N/m); ; +Morison['M8N9FAFzi'] = False # (N/m); ; +Morison['M9N1FAFzi'] = False # (N/m); ; +Morison['M9N2FAFzi'] = False # (N/m); ; +Morison['M9N3FAFzi'] = False # (N/m); ; +Morison['M9N4FAFzi'] = False # (N/m); ; +Morison['M9N5FAFzi'] = False # (N/m); ; +Morison['M9N6FAFzi'] = False # (N/m); ; +Morison['M9N7FAFzi'] = False # (N/m); ; +Morison['M9N8FAFzi'] = False # (N/m); ; +Morison['M9N9FAFzi'] = False # (N/m); ; +Morison['M1N1MAFxi'] = False # (N-m/m); x-component of the distributed flooding/ballasting mass inertia moment, expressed in the inertial coordinate system; +Morison['M1N2MAFxi'] = False # (N-m/m); ; +Morison['M1N3MAFxi'] = False # (N-m/m); ; +Morison['M1N4MAFxi'] = False # (N-m/m); ; +Morison['M1N5MAFxi'] = False # (N-m/m); ; +Morison['M1N6MAFxi'] = False # (N-m/m); ; +Morison['M1N7MAFxi'] = False # (N-m/m); ; +Morison['M1N8MAFxi'] = False # (N-m/m); ; +Morison['M1N9MAFxi'] = False # (N-m/m); ; +Morison['M2N1MAFxi'] = False # (N-m/m); ; +Morison['M2N2MAFxi'] = False # (N-m/m); ; +Morison['M2N3MAFxi'] = False # (N-m/m); ; +Morison['M2N4MAFxi'] = False # (N-m/m); ; +Morison['M2N5MAFxi'] = False # (N-m/m); ; +Morison['M2N6MAFxi'] = False # (N-m/m); ; +Morison['M2N7MAFxi'] = False # (N-m/m); ; +Morison['M2N8MAFxi'] = False # (N-m/m); ; +Morison['M2N9MAFxi'] = False # (N-m/m); ; +Morison['M3N1MAFxi'] = False # (N-m/m); ; +Morison['M3N2MAFxi'] = False # (N-m/m); ; +Morison['M3N3MAFxi'] = False # (N-m/m); ; +Morison['M3N4MAFxi'] = False # (N-m/m); ; +Morison['M3N5MAFxi'] = False # (N-m/m); ; +Morison['M3N6MAFxi'] = False # (N-m/m); ; +Morison['M3N7MAFxi'] = False # (N-m/m); ; +Morison['M3N8MAFxi'] = False # (N-m/m); ; +Morison['M3N9MAFxi'] = False # (N-m/m); ; +Morison['M4N1MAFxi'] = False # (N-m/m); ; +Morison['M4N2MAFxi'] = False # (N-m/m); ; +Morison['M4N3MAFxi'] = False # (N-m/m); ; +Morison['M4N4MAFxi'] = False # (N-m/m); ; +Morison['M4N5MAFxi'] = False # (N-m/m); ; +Morison['M4N6MAFxi'] = False # (N-m/m); ; +Morison['M4N7MAFxi'] = False # (N-m/m); ; +Morison['M4N8MAFxi'] = False # (N-m/m); ; +Morison['M4N9MAFxi'] = False # (N-m/m); ; +Morison['M5N1MAFxi'] = False # (N-m/m); ; +Morison['M5N2MAFxi'] = False # (N-m/m); ; +Morison['M5N3MAFxi'] = False # (N-m/m); ; +Morison['M5N4MAFxi'] = False # (N-m/m); ; +Morison['M5N5MAFxi'] = False # (N-m/m); ; +Morison['M5N6MAFxi'] = False # (N-m/m); ; +Morison['M5N7MAFxi'] = False # (N-m/m); ; +Morison['M5N8MAFxi'] = False # (N-m/m); ; +Morison['M5N9MAFxi'] = False # (N-m/m); ; +Morison['M6N1MAFxi'] = False # (N-m/m); ; +Morison['M6N2MAFxi'] = False # (N-m/m); ; +Morison['M6N3MAFxi'] = False # (N-m/m); ; +Morison['M6N4MAFxi'] = False # (N-m/m); ; +Morison['M6N5MAFxi'] = False # (N-m/m); ; +Morison['M6N6MAFxi'] = False # (N-m/m); ; +Morison['M6N7MAFxi'] = False # (N-m/m); ; +Morison['M6N8MAFxi'] = False # (N-m/m); ; +Morison['M6N9MAFxi'] = False # (N-m/m); ; +Morison['M7N1MAFxi'] = False # (N-m/m); ; +Morison['M7N2MAFxi'] = False # (N-m/m); ; +Morison['M7N3MAFxi'] = False # (N-m/m); ; +Morison['M7N4MAFxi'] = False # (N-m/m); ; +Morison['M7N5MAFxi'] = False # (N-m/m); ; +Morison['M7N6MAFxi'] = False # (N-m/m); ; +Morison['M7N7MAFxi'] = False # (N-m/m); ; +Morison['M7N8MAFxi'] = False # (N-m/m); ; +Morison['M7N9MAFxi'] = False # (N-m/m); ; +Morison['M8N1MAFxi'] = False # (N-m/m); ; +Morison['M8N2MAFxi'] = False # (N-m/m); ; +Morison['M8N3MAFxi'] = False # (N-m/m); ; +Morison['M8N4MAFxi'] = False # (N-m/m); ; +Morison['M8N5MAFxi'] = False # (N-m/m); ; +Morison['M8N6MAFxi'] = False # (N-m/m); ; +Morison['M8N7MAFxi'] = False # (N-m/m); ; +Morison['M8N8MAFxi'] = False # (N-m/m); ; +Morison['M8N9MAFxi'] = False # (N-m/m); ; +Morison['M9N1MAFxi'] = False # (N-m/m); ; +Morison['M9N2MAFxi'] = False # (N-m/m); ; +Morison['M9N3MAFxi'] = False # (N-m/m); ; +Morison['M9N4MAFxi'] = False # (N-m/m); ; +Morison['M9N5MAFxi'] = False # (N-m/m); ; +Morison['M9N6MAFxi'] = False # (N-m/m); ; +Morison['M9N7MAFxi'] = False # (N-m/m); ; +Morison['M9N8MAFxi'] = False # (N-m/m); ; +Morison['M9N9MAFxi'] = False # (N-m/m); ; +Morison['M1N1MAFyi'] = False # (N-m/m); y-component of the distributed flooding/ballasting mass inertia moment, expressed in the inertial coordinate system; +Morison['M1N2MAFyi'] = False # (N-m/m); ; +Morison['M1N3MAFyi'] = False # (N-m/m); ; +Morison['M1N4MAFyi'] = False # (N-m/m); ; +Morison['M1N5MAFyi'] = False # (N-m/m); ; +Morison['M1N6MAFyi'] = False # (N-m/m); ; +Morison['M1N7MAFyi'] = False # (N-m/m); ; +Morison['M1N8MAFyi'] = False # (N-m/m); ; +Morison['M1N9MAFyi'] = False # (N-m/m); ; +Morison['M2N1MAFyi'] = False # (N-m/m); ; +Morison['M2N2MAFyi'] = False # (N-m/m); ; +Morison['M2N3MAFyi'] = False # (N-m/m); ; +Morison['M2N4MAFyi'] = False # (N-m/m); ; +Morison['M2N5MAFyi'] = False # (N-m/m); ; +Morison['M2N6MAFyi'] = False # (N-m/m); ; +Morison['M2N7MAFyi'] = False # (N-m/m); ; +Morison['M2N8MAFyi'] = False # (N-m/m); ; +Morison['M2N9MAFyi'] = False # (N-m/m); ; +Morison['M3N1MAFyi'] = False # (N-m/m); ; +Morison['M3N2MAFyi'] = False # (N-m/m); ; +Morison['M3N3MAFyi'] = False # (N-m/m); ; +Morison['M3N4MAFyi'] = False # (N-m/m); ; +Morison['M3N5MAFyi'] = False # (N-m/m); ; +Morison['M3N6MAFyi'] = False # (N-m/m); ; +Morison['M3N7MAFyi'] = False # (N-m/m); ; +Morison['M3N8MAFyi'] = False # (N-m/m); ; +Morison['M3N9MAFyi'] = False # (N-m/m); ; +Morison['M4N1MAFyi'] = False # (N-m/m); ; +Morison['M4N2MAFyi'] = False # (N-m/m); ; +Morison['M4N3MAFyi'] = False # (N-m/m); ; +Morison['M4N4MAFyi'] = False # (N-m/m); ; +Morison['M4N5MAFyi'] = False # (N-m/m); ; +Morison['M4N6MAFyi'] = False # (N-m/m); ; +Morison['M4N7MAFyi'] = False # (N-m/m); ; +Morison['M4N8MAFyi'] = False # (N-m/m); ; +Morison['M4N9MAFyi'] = False # (N-m/m); ; +Morison['M5N1MAFyi'] = False # (N-m/m); ; +Morison['M5N2MAFyi'] = False # (N-m/m); ; +Morison['M5N3MAFyi'] = False # (N-m/m); ; +Morison['M5N4MAFyi'] = False # (N-m/m); ; +Morison['M5N5MAFyi'] = False # (N-m/m); ; +Morison['M5N6MAFyi'] = False # (N-m/m); ; +Morison['M5N7MAFyi'] = False # (N-m/m); ; +Morison['M5N8MAFyi'] = False # (N-m/m); ; +Morison['M5N9MAFyi'] = False # (N-m/m); ; +Morison['M6N1MAFyi'] = False # (N-m/m); ; +Morison['M6N2MAFyi'] = False # (N-m/m); ; +Morison['M6N3MAFyi'] = False # (N-m/m); ; +Morison['M6N4MAFyi'] = False # (N-m/m); ; +Morison['M6N5MAFyi'] = False # (N-m/m); ; +Morison['M6N6MAFyi'] = False # (N-m/m); ; +Morison['M6N7MAFyi'] = False # (N-m/m); ; +Morison['M6N8MAFyi'] = False # (N-m/m); ; +Morison['M6N9MAFyi'] = False # (N-m/m); ; +Morison['M7N1MAFyi'] = False # (N-m/m); ; +Morison['M7N2MAFyi'] = False # (N-m/m); ; +Morison['M7N3MAFyi'] = False # (N-m/m); ; +Morison['M7N4MAFyi'] = False # (N-m/m); ; +Morison['M7N5MAFyi'] = False # (N-m/m); ; +Morison['M7N6MAFyi'] = False # (N-m/m); ; +Morison['M7N7MAFyi'] = False # (N-m/m); ; +Morison['M7N8MAFyi'] = False # (N-m/m); ; +Morison['M7N9MAFyi'] = False # (N-m/m); ; +Morison['M8N1MAFyi'] = False # (N-m/m); ; +Morison['M8N2MAFyi'] = False # (N-m/m); ; +Morison['M8N3MAFyi'] = False # (N-m/m); ; +Morison['M8N4MAFyi'] = False # (N-m/m); ; +Morison['M8N5MAFyi'] = False # (N-m/m); ; +Morison['M8N6MAFyi'] = False # (N-m/m); ; +Morison['M8N7MAFyi'] = False # (N-m/m); ; +Morison['M8N8MAFyi'] = False # (N-m/m); ; +Morison['M8N9MAFyi'] = False # (N-m/m); ; +Morison['M9N1MAFyi'] = False # (N-m/m); ; +Morison['M9N2MAFyi'] = False # (N-m/m); ; +Morison['M9N3MAFyi'] = False # (N-m/m); ; +Morison['M9N4MAFyi'] = False # (N-m/m); ; +Morison['M9N5MAFyi'] = False # (N-m/m); ; +Morison['M9N6MAFyi'] = False # (N-m/m); ; +Morison['M9N7MAFyi'] = False # (N-m/m); ; +Morison['M9N8MAFyi'] = False # (N-m/m); ; +Morison['M9N9MAFyi'] = False # (N-m/m); ; +Morison['M1N1MAFzi'] = False # (N-m/m); z-component of the distributed flooding/ballasting mass inertia moment, expressed in the inertial coordinate system; +Morison['M1N2MAFzi'] = False # (N-m/m); ; +Morison['M1N3MAFzi'] = False # (N-m/m); ; +Morison['M1N4MAFzi'] = False # (N-m/m); ; +Morison['M1N5MAFzi'] = False # (N-m/m); ; +Morison['M1N6MAFzi'] = False # (N-m/m); ; +Morison['M1N7MAFzi'] = False # (N-m/m); ; +Morison['M1N8MAFzi'] = False # (N-m/m); ; +Morison['M1N9MAFzi'] = False # (N-m/m); ; +Morison['M2N1MAFzi'] = False # (N-m/m); ; +Morison['M2N2MAFzi'] = False # (N-m/m); ; +Morison['M2N3MAFzi'] = False # (N-m/m); ; +Morison['M2N4MAFzi'] = False # (N-m/m); ; +Morison['M2N5MAFzi'] = False # (N-m/m); ; +Morison['M2N6MAFzi'] = False # (N-m/m); ; +Morison['M2N7MAFzi'] = False # (N-m/m); ; +Morison['M2N8MAFzi'] = False # (N-m/m); ; +Morison['M2N9MAFzi'] = False # (N-m/m); ; +Morison['M3N1MAFzi'] = False # (N-m/m); ; +Morison['M3N2MAFzi'] = False # (N-m/m); ; +Morison['M3N3MAFzi'] = False # (N-m/m); ; +Morison['M3N4MAFzi'] = False # (N-m/m); ; +Morison['M3N5MAFzi'] = False # (N-m/m); ; +Morison['M3N6MAFzi'] = False # (N-m/m); ; +Morison['M3N7MAFzi'] = False # (N-m/m); ; +Morison['M3N8MAFzi'] = False # (N-m/m); ; +Morison['M3N9MAFzi'] = False # (N-m/m); ; +Morison['M4N1MAFzi'] = False # (N-m/m); ; +Morison['M4N2MAFzi'] = False # (N-m/m); ; +Morison['M4N3MAFzi'] = False # (N-m/m); ; +Morison['M4N4MAFzi'] = False # (N-m/m); ; +Morison['M4N5MAFzi'] = False # (N-m/m); ; +Morison['M4N6MAFzi'] = False # (N-m/m); ; +Morison['M4N7MAFzi'] = False # (N-m/m); ; +Morison['M4N8MAFzi'] = False # (N-m/m); ; +Morison['M4N9MAFzi'] = False # (N-m/m); ; +Morison['M5N1MAFzi'] = False # (N-m/m); ; +Morison['M5N2MAFzi'] = False # (N-m/m); ; +Morison['M5N3MAFzi'] = False # (N-m/m); ; +Morison['M5N4MAFzi'] = False # (N-m/m); ; +Morison['M5N5MAFzi'] = False # (N-m/m); ; +Morison['M5N6MAFzi'] = False # (N-m/m); ; +Morison['M5N7MAFzi'] = False # (N-m/m); ; +Morison['M5N8MAFzi'] = False # (N-m/m); ; +Morison['M5N9MAFzi'] = False # (N-m/m); ; +Morison['M6N1MAFzi'] = False # (N-m/m); ; +Morison['M6N2MAFzi'] = False # (N-m/m); ; +Morison['M6N3MAFzi'] = False # (N-m/m); ; +Morison['M6N4MAFzi'] = False # (N-m/m); ; +Morison['M6N5MAFzi'] = False # (N-m/m); ; +Morison['M6N6MAFzi'] = False # (N-m/m); ; +Morison['M6N7MAFzi'] = False # (N-m/m); ; +Morison['M6N8MAFzi'] = False # (N-m/m); ; +Morison['M6N9MAFzi'] = False # (N-m/m); ; +Morison['M7N1MAFzi'] = False # (N-m/m); ; +Morison['M7N2MAFzi'] = False # (N-m/m); ; +Morison['M7N3MAFzi'] = False # (N-m/m); ; +Morison['M7N4MAFzi'] = False # (N-m/m); ; +Morison['M7N5MAFzi'] = False # (N-m/m); ; +Morison['M7N6MAFzi'] = False # (N-m/m); ; +Morison['M7N7MAFzi'] = False # (N-m/m); ; +Morison['M7N8MAFzi'] = False # (N-m/m); ; +Morison['M7N9MAFzi'] = False # (N-m/m); ; +Morison['M8N1MAFzi'] = False # (N-m/m); ; +Morison['M8N2MAFzi'] = False # (N-m/m); ; +Morison['M8N3MAFzi'] = False # (N-m/m); ; +Morison['M8N4MAFzi'] = False # (N-m/m); ; +Morison['M8N5MAFzi'] = False # (N-m/m); ; +Morison['M8N6MAFzi'] = False # (N-m/m); ; +Morison['M8N7MAFzi'] = False # (N-m/m); ; +Morison['M8N8MAFzi'] = False # (N-m/m); ; +Morison['M8N9MAFzi'] = False # (N-m/m); ; +Morison['M9N1MAFzi'] = False # (N-m/m); ; +Morison['M9N2MAFzi'] = False # (N-m/m); ; +Morison['M9N3MAFzi'] = False # (N-m/m); ; +Morison['M9N4MAFzi'] = False # (N-m/m); ; +Morison['M9N5MAFzi'] = False # (N-m/m); ; +Morison['M9N6MAFzi'] = False # (N-m/m); ; +Morison['M9N7MAFzi'] = False # (N-m/m); ; +Morison['M9N8MAFzi'] = False # (N-m/m); ; +Morison['M9N9MAFzi'] = False # (N-m/m); ; + +# Joint-level Wave Kinematics +Morison['J1Vxi'] = False # (m/s); fluid velocity at the joint; +Morison['J2Vxi'] = False # (m/s); ; +Morison['J3Vxi'] = False # (m/s); ; +Morison['J4Vxi'] = False # (m/s); ; +Morison['J5Vxi'] = False # (m/s); ; +Morison['J6Vxi'] = False # (m/s); ; +Morison['J7Vxi'] = False # (m/s); ; +Morison['J8Vxi'] = False # (m/s); ; +Morison['J9Vxi'] = False # (m/s); ; +Morison['J1Vyi'] = False # (m/s); ; +Morison['J2Vyi'] = False # (m/s); ; +Morison['J3Vyi'] = False # (m/s); ; +Morison['J4Vyi'] = False # (m/s); ; +Morison['J5Vyi'] = False # (m/s); ; +Morison['J6Vyi'] = False # (m/s); ; +Morison['J7Vyi'] = False # (m/s); ; +Morison['J8Vyi'] = False # (m/s); ; +Morison['J9Vyi'] = False # (m/s); ; +Morison['J1Vzi'] = False # (m/s); ; +Morison['J2Vzi'] = False # (m/s); ; +Morison['J3Vzi'] = False # (m/s); ; +Morison['J4Vzi'] = False # (m/s); ; +Morison['J5Vzi'] = False # (m/s); ; +Morison['J6Vzi'] = False # (m/s); ; +Morison['J7Vzi'] = False # (m/s); ; +Morison['J8Vzi'] = False # (m/s); ; +Morison['J9Vzi'] = False # (m/s); ; +Morison['J1Axi'] = False # (m/s^2); fluid acceleration at the joint; +Morison['J2Axi'] = False # (m/s^2); ; +Morison['J3Axi'] = False # (m/s^2); ; +Morison['J4Axi'] = False # (m/s^2); ; +Morison['J5Axi'] = False # (m/s^2); ; +Morison['J6Axi'] = False # (m/s^2); ; +Morison['J7Axi'] = False # (m/s^2); ; +Morison['J8Axi'] = False # (m/s^2); ; +Morison['J9Axi'] = False # (m/s^2); ; +Morison['J1Ayi'] = False # (m/s^2); ; +Morison['J2Ayi'] = False # (m/s^2); ; +Morison['J3Ayi'] = False # (m/s^2); ; +Morison['J4Ayi'] = False # (m/s^2); ; +Morison['J5Ayi'] = False # (m/s^2); ; +Morison['J6Ayi'] = False # (m/s^2); ; +Morison['J7Ayi'] = False # (m/s^2); ; +Morison['J8Ayi'] = False # (m/s^2); ; +Morison['J9Ayi'] = False # (m/s^2); ; +Morison['J1Azi'] = False # (m/s^2); ; +Morison['J2Azi'] = False # (m/s^2); ; +Morison['J3Azi'] = False # (m/s^2); ; +Morison['J4Azi'] = False # (m/s^2); ; +Morison['J5Azi'] = False # (m/s^2); ; +Morison['J6Azi'] = False # (m/s^2); ; +Morison['J7Azi'] = False # (m/s^2); ; +Morison['J8Azi'] = False # (m/s^2); ; +Morison['J9Azi'] = False # (m/s^2); ; +Morison['J1DynP'] = False # (Pa); fluid dynamic pressure at the joint; +Morison['J2DynP'] = False # (Pa); ; +Morison['J3DynP'] = False # (Pa); ; +Morison['J4DynP'] = False # (Pa); ; +Morison['J5DynP'] = False # (Pa); ; +Morison['J6DynP'] = False # (Pa); ; +Morison['J7DynP'] = False # (Pa); ; +Morison['J8DynP'] = False # (Pa); ; +Morison['J9DynP'] = False # (Pa); ; +Morison['J1STVxi'] = False # (m/s); structural translational velocity at the joint; +Morison['J2STVxi'] = False # (m/s); ; +Morison['J3STVxi'] = False # (m/s); ; +Morison['J4STVxi'] = False # (m/s); ; +Morison['J5STVxi'] = False # (m/s); ; +Morison['J6STVxi'] = False # (m/s); ; +Morison['J7STVxi'] = False # (m/s); ; +Morison['J8STVxi'] = False # (m/s); ; +Morison['J9STVxi'] = False # (m/s); ; +Morison['J1STVyi'] = False # (m/s); ; +Morison['J2STVyi'] = False # (m/s); ; +Morison['J3STVyi'] = False # (m/s); ; +Morison['J4STVyi'] = False # (m/s); ; +Morison['J5STVyi'] = False # (m/s); ; +Morison['J6STVyi'] = False # (m/s); ; +Morison['J7STVyi'] = False # (m/s); ; +Morison['J8STVyi'] = False # (m/s); ; +Morison['J9STVyi'] = False # (m/s); ; +Morison['J1STVzi'] = False # (m/s); ; +Morison['J2STVzi'] = False # (m/s); ; +Morison['J3STVzi'] = False # (m/s); ; +Morison['J4STVzi'] = False # (m/s); ; +Morison['J5STVzi'] = False # (m/s); ; +Morison['J6STVzi'] = False # (m/s); ; +Morison['J7STVzi'] = False # (m/s); ; +Morison['J8STVzi'] = False # (m/s); ; +Morison['J9STVzi'] = False # (m/s); ; +Morison['J1STAxi'] = False # (m/s^2); structural translational acceleration at the joint; +Morison['J2STAxi'] = False # (m/s^2); ; +Morison['J3STAxi'] = False # (m/s^2); ; +Morison['J4STAxi'] = False # (m/s^2); ; +Morison['J5STAxi'] = False # (m/s^2); ; +Morison['J6STAxi'] = False # (m/s^2); ; +Morison['J7STAxi'] = False # (m/s^2); ; +Morison['J8STAxi'] = False # (m/s^2); ; +Morison['J9STAxi'] = False # (m/s^2); ; +Morison['J1STAyi'] = False # (m/s^2); ; +Morison['J2STAyi'] = False # (m/s^2); ; +Morison['J3STAyi'] = False # (m/s^2); ; +Morison['J4STAyi'] = False # (m/s^2); ; +Morison['J5STAyi'] = False # (m/s^2); ; +Morison['J6STAyi'] = False # (m/s^2); ; +Morison['J7STAyi'] = False # (m/s^2); ; +Morison['J8STAyi'] = False # (m/s^2); ; +Morison['J9STAyi'] = False # (m/s^2); ; +Morison['J1STAzi'] = False # (m/s^2); ; +Morison['J2STAzi'] = False # (m/s^2); ; +Morison['J3STAzi'] = False # (m/s^2); ; +Morison['J4STAzi'] = False # (m/s^2); ; +Morison['J5STAzi'] = False # (m/s^2); ; +Morison['J6STAzi'] = False # (m/s^2); ; +Morison['J7STAzi'] = False # (m/s^2); ; +Morison['J8STAzi'] = False # (m/s^2); ; +Morison['J9STAzi'] = False # (m/s^2); ; + +# Joint Loads +Morison['J1FDxi'] = False # (N); axial viscous-drag forces; +Morison['J2FDxi'] = False # (N); ; +Morison['J3FDxi'] = False # (N); ; +Morison['J4FDxi'] = False # (N); ; +Morison['J5FDxi'] = False # (N); ; +Morison['J6FDxi'] = False # (N); ; +Morison['J7FDxi'] = False # (N); ; +Morison['J8FDxi'] = False # (N); ; +Morison['J9FDxi'] = False # (N); ; +Morison['J1FDyi'] = False # (N); ; +Morison['J2FDyi'] = False # (N); ; +Morison['J3FDyi'] = False # (N); ; +Morison['J4FDyi'] = False # (N); ; +Morison['J5FDyi'] = False # (N); ; +Morison['J6FDyi'] = False # (N); ; +Morison['J7FDyi'] = False # (N); ; +Morison['J8FDyi'] = False # (N); ; +Morison['J9FDyi'] = False # (N); ; +Morison['J1FDzi'] = False # (N); ; +Morison['J2FDzi'] = False # (N); ; +Morison['J3FDzi'] = False # (N); ; +Morison['J4FDzi'] = False # (N); ; +Morison['J5FDzi'] = False # (N); ; +Morison['J6FDzi'] = False # (N); ; +Morison['J7FDzi'] = False # (N); ; +Morison['J8FDzi'] = False # (N); ; +Morison['J9FDzi'] = False # (N); ; +Morison['J1FBxi'] = False # (N); end-effect buoyancy forces; +Morison['J2FBxi'] = False # (N); ; +Morison['J3FBxi'] = False # (N); ; +Morison['J4FBxi'] = False # (N); ; +Morison['J5FBxi'] = False # (N); ; +Morison['J6FBxi'] = False # (N); ; +Morison['J7FBxi'] = False # (N); ; +Morison['J8FBxi'] = False # (N); ; +Morison['J9FBxi'] = False # (N); ; +Morison['J1FByi'] = False # (N); ; +Morison['J2FByi'] = False # (N); ; +Morison['J3FByi'] = False # (N); ; +Morison['J4FByi'] = False # (N); ; +Morison['J5FByi'] = False # (N); ; +Morison['J6FByi'] = False # (N); ; +Morison['J7FByi'] = False # (N); ; +Morison['J8FByi'] = False # (N); ; +Morison['J9FByi'] = False # (N); ; +Morison['J1FBzi'] = False # (N); ; +Morison['J2FBzi'] = False # (N); ; +Morison['J3FBzi'] = False # (N); ; +Morison['J4FBzi'] = False # (N); ; +Morison['J5FBzi'] = False # (N); ; +Morison['J6FBzi'] = False # (N); ; +Morison['J7FBzi'] = False # (N); ; +Morison['J8FBzi'] = False # (N); ; +Morison['J9FBzi'] = False # (N); ; +Morison['J1MBxi'] = False # (N-m); end-effect buoyancy moments; +Morison['J2MBxi'] = False # (N-m); ; +Morison['J3MBxi'] = False # (N-m); ; +Morison['J4MBxi'] = False # (N-m); ; +Morison['J5MBxi'] = False # (N-m); ; +Morison['J6MBxi'] = False # (N-m); ; +Morison['J7MBxi'] = False # (N-m); ; +Morison['J8MBxi'] = False # (N-m); ; +Morison['J9MBxi'] = False # (N-m); ; +Morison['J1MByi'] = False # (N-m); ; +Morison['J2MByi'] = False # (N-m); ; +Morison['J3MByi'] = False # (N-m); ; +Morison['J4MByi'] = False # (N-m); ; +Morison['J5MByi'] = False # (N-m); ; +Morison['J6MByi'] = False # (N-m); ; +Morison['J7MByi'] = False # (N-m); ; +Morison['J8MByi'] = False # (N-m); ; +Morison['J9MByi'] = False # (N-m); ; +Morison['J1MBzi'] = False # (N-m); ; +Morison['J2MBzi'] = False # (N-m); ; +Morison['J3MBzi'] = False # (N-m); ; +Morison['J4MBzi'] = False # (N-m); ; +Morison['J5MBzi'] = False # (N-m); ; +Morison['J6MBzi'] = False # (N-m); ; +Morison['J7MBzi'] = False # (N-m); ; +Morison['J8MBzi'] = False # (N-m); ; +Morison['J9MBzi'] = False # (N-m); ; +Morison['J1FBFxi'] = False # (N); end-effect buoyancy forces due to ballasting/flooding; +Morison['J2FBFxi'] = False # (N); ; +Morison['J3FBFxi'] = False # (N); ; +Morison['J4FBFxi'] = False # (N); ; +Morison['J5FBFxi'] = False # (N); ; +Morison['J6FBFxi'] = False # (N); ; +Morison['J7FBFxi'] = False # (N); ; +Morison['J8FBFxi'] = False # (N); ; +Morison['J9FBFxi'] = False # (N); ; +Morison['J1FBFyi'] = False # (N); ; +Morison['J2FBFyi'] = False # (N); ; +Morison['J3FBFyi'] = False # (N); ; +Morison['J4FBFyi'] = False # (N); ; +Morison['J5FBFyi'] = False # (N); ; +Morison['J6FBFyi'] = False # (N); ; +Morison['J7FBFyi'] = False # (N); ; +Morison['J8FBFyi'] = False # (N); ; +Morison['J9FBFyi'] = False # (N); ; +Morison['J1FBFzi'] = False # (N); ; +Morison['J2FBFzi'] = False # (N); ; +Morison['J3FBFzi'] = False # (N); ; +Morison['J4FBFzi'] = False # (N); ; +Morison['J5FBFzi'] = False # (N); ; +Morison['J6FBFzi'] = False # (N); ; +Morison['J7FBFzi'] = False # (N); ; +Morison['J8FBFzi'] = False # (N); ; +Morison['J9FBFzi'] = False # (N); ; +Morison['J1MBFxi'] = False # (N-m); end-effect buoyancy moments due to ballasting/flooding; +Morison['J2MBFxi'] = False # (N-m); ; +Morison['J3MBFxi'] = False # (N-m); ; +Morison['J4MBFxi'] = False # (N-m); ; +Morison['J5MBFxi'] = False # (N-m); ; +Morison['J6MBFxi'] = False # (N-m); ; +Morison['J7MBFxi'] = False # (N-m); ; +Morison['J8MBFxi'] = False # (N-m); ; +Morison['J9MBFxi'] = False # (N-m); ; +Morison['J1MBFyi'] = False # (N-m); ; +Morison['J2MBFyi'] = False # (N-m); ; +Morison['J3MBFyi'] = False # (N-m); ; +Morison['J4MBFyi'] = False # (N-m); ; +Morison['J5MBFyi'] = False # (N-m); ; +Morison['J6MBFyi'] = False # (N-m); ; +Morison['J7MBFyi'] = False # (N-m); ; +Morison['J8MBFyi'] = False # (N-m); ; +Morison['J9MBFyi'] = False # (N-m); ; +Morison['J1MBFzi'] = False # (N-m); ; +Morison['J2MBFzi'] = False # (N-m); ; +Morison['J3MBFzi'] = False # (N-m); ; +Morison['J4MBFzi'] = False # (N-m); ; +Morison['J5MBFzi'] = False # (N-m); ; +Morison['J6MBFzi'] = False # (N-m); ; +Morison['J7MBFzi'] = False # (N-m); ; +Morison['J8MBFzi'] = False # (N-m); ; +Morison['J9MBFzi'] = False # (N-m); ; +Morison['J1FIxi'] = False # (N); end-effect fluid inertia forces ; +Morison['J2FIxi'] = False # (N); ; +Morison['J3FIxi'] = False # (N); ; +Morison['J4FIxi'] = False # (N); ; +Morison['J5FIxi'] = False # (N); ; +Morison['J6FIxi'] = False # (N); ; +Morison['J7FIxi'] = False # (N); ; +Morison['J8FIxi'] = False # (N); ; +Morison['J9FIxi'] = False # (N); ; +Morison['J1FIyi'] = False # (N); ; +Morison['J2FIyi'] = False # (N); ; +Morison['J3FIyi'] = False # (N); ; +Morison['J4FIyi'] = False # (N); ; +Morison['J5FIyi'] = False # (N); ; +Morison['J6FIyi'] = False # (N); ; +Morison['J7FIyi'] = False # (N); ; +Morison['J8FIyi'] = False # (N); ; +Morison['J9FIyi'] = False # (N); ; +Morison['J1FIzi'] = False # (N); ; +Morison['J2FIzi'] = False # (N); ; +Morison['J3FIzi'] = False # (N); ; +Morison['J4FIzi'] = False # (N); ; +Morison['J5FIzi'] = False # (N); ; +Morison['J6FIzi'] = False # (N); ; +Morison['J7FIzi'] = False # (N); ; +Morison['J8FIzi'] = False # (N); ; +Morison['J9FIzi'] = False # (N); ; +Morison['J1FAMxi'] = False # (N); added mass forces; +Morison['J2FAMxi'] = False # (N); ; +Morison['J3FAMxi'] = False # (N); ; +Morison['J4FAMxi'] = False # (N); ; +Morison['J5FAMxi'] = False # (N); ; +Morison['J6FAMxi'] = False # (N); ; +Morison['J7FAMxi'] = False # (N); ; +Morison['J8FAMxi'] = False # (N); ; +Morison['J9FAMxi'] = False # (N); ; +Morison['J1FAMyi'] = False # (N); ; +Morison['J2FAMyi'] = False # (N); ; +Morison['J3FAMyi'] = False # (N); ; +Morison['J4FAMyi'] = False # (N); ; +Morison['J5FAMyi'] = False # (N); ; +Morison['J6FAMyi'] = False # (N); ; +Morison['J7FAMyi'] = False # (N); ; +Morison['J8FAMyi'] = False # (N); ; +Morison['J9FAMyi'] = False # (N); ; +Morison['J1FAMzi'] = False # (N); ; +Morison['J2FAMzi'] = False # (N); ; +Morison['J3FAMzi'] = False # (N); ; +Morison['J4FAMzi'] = False # (N); ; +Morison['J5FAMzi'] = False # (N); ; +Morison['J6FAMzi'] = False # (N); ; +Morison['J7FAMzi'] = False # (N); ; +Morison['J8FAMzi'] = False # (N); ; +Morison['J9FAMzi'] = False # (N); ; +Morison['J1FAGxi'] = False # (N); end effect marine growth inertia; +Morison['J2FAGxi'] = False # (N); ; +Morison['J3FAGxi'] = False # (N); ; +Morison['J4FAGxi'] = False # (N); ; +Morison['J5FAGxi'] = False # (N); ; +Morison['J6FAGxi'] = False # (N); ; +Morison['J7FAGxi'] = False # (N); ; +Morison['J8FAGxi'] = False # (N); ; +Morison['J9FAGxi'] = False # (N); ; +Morison['J1FAGyi'] = False # (N); ; +Morison['J2FAGyi'] = False # (N); ; +Morison['J3FAGyi'] = False # (N); ; +Morison['J4FAGyi'] = False # (N); ; +Morison['J5FAGyi'] = False # (N); ; +Morison['J6FAGyi'] = False # (N); ; +Morison['J7FAGyi'] = False # (N); ; +Morison['J8FAGyi'] = False # (N); ; +Morison['J9FAGyi'] = False # (N); ; +Morison['J1FAGzi'] = False # (N); ; +Morison['J2FAGzi'] = False # (N); ; +Morison['J3FAGzi'] = False # (N); ; +Morison['J4FAGzi'] = False # (N); ; +Morison['J5FAGzi'] = False # (N); ; +Morison['J6FAGzi'] = False # (N); ; +Morison['J7FAGzi'] = False # (N); ; +Morison['J8FAGzi'] = False # (N); ; +Morison['J9FAGzi'] = False # (N); ; +Morison['J1MAGxi'] = False # (N-m); ; +Morison['J2MAGxi'] = False # (N-m); ; +Morison['J3MAGxi'] = False # (N-m); ; +Morison['J4MAGxi'] = False # (N-m); ; +Morison['J5MAGxi'] = False # (N-m); ; +Morison['J6MAGxi'] = False # (N-m); ; +Morison['J7MAGxi'] = False # (N-m); ; +Morison['J8MAGxi'] = False # (N-m); ; +Morison['J9MAGxi'] = False # (N-m); ; +Morison['J1MAGyi'] = False # (N-m); ; +Morison['J2MAGyi'] = False # (N-m); ; +Morison['J3MAGyi'] = False # (N-m); ; +Morison['J4MAGyi'] = False # (N-m); ; +Morison['J5MAGyi'] = False # (N-m); ; +Morison['J6MAGyi'] = False # (N-m); ; +Morison['J7MAGyi'] = False # (N-m); ; +Morison['J8MAGyi'] = False # (N-m); ; +Morison['J9MAGyi'] = False # (N-m); ; +Morison['J1MAGzi'] = False # (N-m); ; +Morison['J2MAGzi'] = False # (N-m); ; +Morison['J3MAGzi'] = False # (N-m); ; +Morison['J4MAGzi'] = False # (N-m); ; +Morison['J5MAGzi'] = False # (N-m); ; +Morison['J6MAGzi'] = False # (N-m); ; +Morison['J7MAGzi'] = False # (N-m); ; +Morison['J8MAGzi'] = False # (N-m); ; +Morison['J9MAGzi'] = False # (N-m); ; +Morison['J1FMGxi'] = False # (N); end effect marine growth weight; +Morison['J2FMGxi'] = False # (N); ; +Morison['J3FMGxi'] = False # (N); ; +Morison['J4FMGxi'] = False # (N); ; +Morison['J5FMGxi'] = False # (N); ; +Morison['J6FMGxi'] = False # (N); ; +Morison['J7FMGxi'] = False # (N); ; +Morison['J8FMGxi'] = False # (N); ; +Morison['J9FMGxi'] = False # (N); ; +Morison['J1FMGyi'] = False # (N); ; +Morison['J2FMGyi'] = False # (N); ; +Morison['J3FMGyi'] = False # (N); ; +Morison['J4FMGyi'] = False # (N); ; +Morison['J5FMGyi'] = False # (N); ; +Morison['J6FMGyi'] = False # (N); ; +Morison['J7FMGyi'] = False # (N); ; +Morison['J8FMGyi'] = False # (N); ; +Morison['J9FMGyi'] = False # (N); ; +Morison['J1FMGzi'] = False # (N); ; +Morison['J2FMGzi'] = False # (N); ; +Morison['J3FMGzi'] = False # (N); ; +Morison['J4FMGzi'] = False # (N); ; +Morison['J5FMGzi'] = False # (N); ; +Morison['J6FMGzi'] = False # (N); ; +Morison['J7FMGzi'] = False # (N); ; +Morison['J8FMGzi'] = False # (N); ; +Morison['J9FMGzi'] = False # (N); ; + +""" SubDyn """ +SubDyn = {} + +# Member Forces +SubDyn['M1N1FKxe'] = False # (N); xe component of the shear at Node Nj of member Mi- Local Reference System- Static Component; +SubDyn['M1N2FKxe'] = False # (N); ; +SubDyn['M1N3FKxe'] = False # (N); ; +SubDyn['M1N4FKxe'] = False # (N); ; +SubDyn['M1N5FKxe'] = False # (N); ; +SubDyn['M1N6FKxe'] = False # (N); ; +SubDyn['M1N7FKxe'] = False # (N); ; +SubDyn['M1N8FKxe'] = False # (N); ; +SubDyn['M1N9FKxe'] = False # (N); ; +SubDyn['M2N1FKxe'] = False # (N); ; +SubDyn['M2N2FKxe'] = False # (N); ; +SubDyn['M2N3FKxe'] = False # (N); ; +SubDyn['M2N4FKxe'] = False # (N); ; +SubDyn['M2N5FKxe'] = False # (N); ; +SubDyn['M2N6FKxe'] = False # (N); ; +SubDyn['M2N7FKxe'] = False # (N); ; +SubDyn['M2N8FKxe'] = False # (N); ; +SubDyn['M2N9FKxe'] = False # (N); ; +SubDyn['M3N1FKxe'] = False # (N); ; +SubDyn['M3N2FKxe'] = False # (N); ; +SubDyn['M3N3FKxe'] = False # (N); ; +SubDyn['M3N4FKxe'] = False # (N); ; +SubDyn['M3N5FKxe'] = False # (N); ; +SubDyn['M3N6FKxe'] = False # (N); ; +SubDyn['M3N7FKxe'] = False # (N); ; +SubDyn['M3N8FKxe'] = False # (N); ; +SubDyn['M3N9FKxe'] = False # (N); ; +SubDyn['M4N1FKxe'] = False # (N); ; +SubDyn['M4N2FKxe'] = False # (N); ; +SubDyn['M4N3FKxe'] = False # (N); ; +SubDyn['M4N4FKxe'] = False # (N); ; +SubDyn['M4N5FKxe'] = False # (N); ; +SubDyn['M4N6FKxe'] = False # (N); ; +SubDyn['M4N7FKxe'] = False # (N); ; +SubDyn['M4N8FKxe'] = False # (N); ; +SubDyn['M4N9FKxe'] = False # (N); ; +SubDyn['M5N1FKxe'] = False # (N); ; +SubDyn['M5N2FKxe'] = False # (N); ; +SubDyn['M5N3FKxe'] = False # (N); ; +SubDyn['M5N4FKxe'] = False # (N); ; +SubDyn['M5N5FKxe'] = False # (N); ; +SubDyn['M5N6FKxe'] = False # (N); ; +SubDyn['M5N7FKxe'] = False # (N); ; +SubDyn['M5N8FKxe'] = False # (N); ; +SubDyn['M5N9FKxe'] = False # (N); ; +SubDyn['M6N1FKxe'] = False # (N); ; +SubDyn['M6N2FKxe'] = False # (N); ; +SubDyn['M6N3FKxe'] = False # (N); ; +SubDyn['M6N4FKxe'] = False # (N); ; +SubDyn['M6N5FKxe'] = False # (N); ; +SubDyn['M6N6FKxe'] = False # (N); ; +SubDyn['M6N7FKxe'] = False # (N); ; +SubDyn['M6N8FKxe'] = False # (N); ; +SubDyn['M6N9FKxe'] = False # (N); ; +SubDyn['M7N1FKxe'] = False # (N); ; +SubDyn['M7N2FKxe'] = False # (N); ; +SubDyn['M7N3FKxe'] = False # (N); ; +SubDyn['M7N4FKxe'] = False # (N); ; +SubDyn['M7N5FKxe'] = False # (N); ; +SubDyn['M7N6FKxe'] = False # (N); ; +SubDyn['M7N7FKxe'] = False # (N); ; +SubDyn['M7N8FKxe'] = False # (N); ; +SubDyn['M7N9FKxe'] = False # (N); ; +SubDyn['M8N1FKxe'] = False # (N); ; +SubDyn['M8N2FKxe'] = False # (N); ; +SubDyn['M8N3FKxe'] = False # (N); ; +SubDyn['M8N4FKxe'] = False # (N); ; +SubDyn['M8N5FKxe'] = False # (N); ; +SubDyn['M8N6FKxe'] = False # (N); ; +SubDyn['M8N7FKxe'] = False # (N); ; +SubDyn['M8N8FKxe'] = False # (N); ; +SubDyn['M8N9FKxe'] = False # (N); ; +SubDyn['M9N1FKxe'] = False # (N); ; +SubDyn['M9N2FKxe'] = False # (N); ; +SubDyn['M9N3FKxe'] = False # (N); ; +SubDyn['M9N4FKxe'] = False # (N); ; +SubDyn['M9N5FKxe'] = False # (N); ; +SubDyn['M9N6FKxe'] = False # (N); ; +SubDyn['M9N7FKxe'] = False # (N); ; +SubDyn['M9N8FKxe'] = False # (N); ; +SubDyn['M9N9FKxe'] = False # (N); ; +SubDyn['M1N1FKye'] = False # (N); ye component of the shear at Node Nj of member Mi- Local Reference System- Static Component; +SubDyn['M1N2FKye'] = False # (N); ; +SubDyn['M1N3FKye'] = False # (N); ; +SubDyn['M1N4FKye'] = False # (N); ; +SubDyn['M1N5FKye'] = False # (N); ; +SubDyn['M1N6FKye'] = False # (N); ; +SubDyn['M1N7FKye'] = False # (N); ; +SubDyn['M1N8FKye'] = False # (N); ; +SubDyn['M1N9FKye'] = False # (N); ; +SubDyn['M2N1FKye'] = False # (N); ; +SubDyn['M2N2FKye'] = False # (N); ; +SubDyn['M2N3FKye'] = False # (N); ; +SubDyn['M2N4FKye'] = False # (N); ; +SubDyn['M2N5FKye'] = False # (N); ; +SubDyn['M2N6FKye'] = False # (N); ; +SubDyn['M2N7FKye'] = False # (N); ; +SubDyn['M2N8FKye'] = False # (N); ; +SubDyn['M2N9FKye'] = False # (N); ; +SubDyn['M3N1FKye'] = False # (N); ; +SubDyn['M3N2FKye'] = False # (N); ; +SubDyn['M3N3FKye'] = False # (N); ; +SubDyn['M3N4FKye'] = False # (N); ; +SubDyn['M3N5FKye'] = False # (N); ; +SubDyn['M3N6FKye'] = False # (N); ; +SubDyn['M3N7FKye'] = False # (N); ; +SubDyn['M3N8FKye'] = False # (N); ; +SubDyn['M3N9FKye'] = False # (N); ; +SubDyn['M4N1FKye'] = False # (N); ; +SubDyn['M4N2FKye'] = False # (N); ; +SubDyn['M4N3FKye'] = False # (N); ; +SubDyn['M4N4FKye'] = False # (N); ; +SubDyn['M4N5FKye'] = False # (N); ; +SubDyn['M4N6FKye'] = False # (N); ; +SubDyn['M4N7FKye'] = False # (N); ; +SubDyn['M4N8FKye'] = False # (N); ; +SubDyn['M4N9FKye'] = False # (N); ; +SubDyn['M5N1FKye'] = False # (N); ; +SubDyn['M5N2FKye'] = False # (N); ; +SubDyn['M5N3FKye'] = False # (N); ; +SubDyn['M5N4FKye'] = False # (N); ; +SubDyn['M5N5FKye'] = False # (N); ; +SubDyn['M5N6FKye'] = False # (N); ; +SubDyn['M5N7FKye'] = False # (N); ; +SubDyn['M5N8FKye'] = False # (N); ; +SubDyn['M5N9FKye'] = False # (N); ; +SubDyn['M6N1FKye'] = False # (N); ; +SubDyn['M6N2FKye'] = False # (N); ; +SubDyn['M6N3FKye'] = False # (N); ; +SubDyn['M6N4FKye'] = False # (N); ; +SubDyn['M6N5FKye'] = False # (N); ; +SubDyn['M6N6FKye'] = False # (N); ; +SubDyn['M6N7FKye'] = False # (N); ; +SubDyn['M6N8FKye'] = False # (N); ; +SubDyn['M6N9FKye'] = False # (N); ; +SubDyn['M7N1FKye'] = False # (N); ; +SubDyn['M7N2FKye'] = False # (N); ; +SubDyn['M7N3FKye'] = False # (N); ; +SubDyn['M7N4FKye'] = False # (N); ; +SubDyn['M7N5FKye'] = False # (N); ; +SubDyn['M7N6FKye'] = False # (N); ; +SubDyn['M7N7FKye'] = False # (N); ; +SubDyn['M7N8FKye'] = False # (N); ; +SubDyn['M7N9FKye'] = False # (N); ; +SubDyn['M8N1FKye'] = False # (N); ; +SubDyn['M8N2FKye'] = False # (N); ; +SubDyn['M8N3FKye'] = False # (N); ; +SubDyn['M8N4FKye'] = False # (N); ; +SubDyn['M8N5FKye'] = False # (N); ; +SubDyn['M8N6FKye'] = False # (N); ; +SubDyn['M8N7FKye'] = False # (N); ; +SubDyn['M8N8FKye'] = False # (N); ; +SubDyn['M8N9FKye'] = False # (N); ; +SubDyn['M9N1FKye'] = False # (N); ; +SubDyn['M9N2FKye'] = False # (N); ; +SubDyn['M9N3FKye'] = False # (N); ; +SubDyn['M9N4FKye'] = False # (N); ; +SubDyn['M9N5FKye'] = False # (N); ; +SubDyn['M9N6FKye'] = False # (N); ; +SubDyn['M9N7FKye'] = False # (N); ; +SubDyn['M9N8FKye'] = False # (N); ; +SubDyn['M9N9FKye'] = False # (N); ; +SubDyn['M1N1FKze'] = False # (N); Axial Force at Node Nj of member Mi- Local Reference System- Static Component; +SubDyn['M1N2FKze'] = False # (N); ; +SubDyn['M1N3FKze'] = False # (N); ; +SubDyn['M1N4FKze'] = False # (N); ; +SubDyn['M1N5FKze'] = False # (N); ; +SubDyn['M1N6FKze'] = False # (N); ; +SubDyn['M1N7FKze'] = False # (N); ; +SubDyn['M1N8FKze'] = False # (N); ; +SubDyn['M1N9FKze'] = False # (N); ; +SubDyn['M2N1FKze'] = False # (N); ; +SubDyn['M2N2FKze'] = False # (N); ; +SubDyn['M2N3FKze'] = False # (N); ; +SubDyn['M2N4FKze'] = False # (N); ; +SubDyn['M2N5FKze'] = False # (N); ; +SubDyn['M2N6FKze'] = False # (N); ; +SubDyn['M2N7FKze'] = False # (N); ; +SubDyn['M2N8FKze'] = False # (N); ; +SubDyn['M2N9FKze'] = False # (N); ; +SubDyn['M3N1FKze'] = False # (N); ; +SubDyn['M3N2FKze'] = False # (N); ; +SubDyn['M3N3FKze'] = False # (N); ; +SubDyn['M3N4FKze'] = False # (N); ; +SubDyn['M3N5FKze'] = False # (N); ; +SubDyn['M3N6FKze'] = False # (N); ; +SubDyn['M3N7FKze'] = False # (N); ; +SubDyn['M3N8FKze'] = False # (N); ; +SubDyn['M3N9FKze'] = False # (N); ; +SubDyn['M4N1FKze'] = False # (N); ; +SubDyn['M4N2FKze'] = False # (N); ; +SubDyn['M4N3FKze'] = False # (N); ; +SubDyn['M4N4FKze'] = False # (N); ; +SubDyn['M4N5FKze'] = False # (N); ; +SubDyn['M4N6FKze'] = False # (N); ; +SubDyn['M4N7FKze'] = False # (N); ; +SubDyn['M4N8FKze'] = False # (N); ; +SubDyn['M4N9FKze'] = False # (N); ; +SubDyn['M5N1FKze'] = False # (N); ; +SubDyn['M5N2FKze'] = False # (N); ; +SubDyn['M5N3FKze'] = False # (N); ; +SubDyn['M5N4FKze'] = False # (N); ; +SubDyn['M5N5FKze'] = False # (N); ; +SubDyn['M5N6FKze'] = False # (N); ; +SubDyn['M5N7FKze'] = False # (N); ; +SubDyn['M5N8FKze'] = False # (N); ; +SubDyn['M5N9FKze'] = False # (N); ; +SubDyn['M6N1FKze'] = False # (N); ; +SubDyn['M6N2FKze'] = False # (N); ; +SubDyn['M6N3FKze'] = False # (N); ; +SubDyn['M6N4FKze'] = False # (N); ; +SubDyn['M6N5FKze'] = False # (N); ; +SubDyn['M6N6FKze'] = False # (N); ; +SubDyn['M6N7FKze'] = False # (N); ; +SubDyn['M6N8FKze'] = False # (N); ; +SubDyn['M6N9FKze'] = False # (N); ; +SubDyn['M7N1FKze'] = False # (N); ; +SubDyn['M7N2FKze'] = False # (N); ; +SubDyn['M7N3FKze'] = False # (N); ; +SubDyn['M7N4FKze'] = False # (N); ; +SubDyn['M7N5FKze'] = False # (N); ; +SubDyn['M7N6FKze'] = False # (N); ; +SubDyn['M7N7FKze'] = False # (N); ; +SubDyn['M7N8FKze'] = False # (N); ; +SubDyn['M7N9FKze'] = False # (N); ; +SubDyn['M8N1FKze'] = False # (N); ; +SubDyn['M8N2FKze'] = False # (N); ; +SubDyn['M8N3FKze'] = False # (N); ; +SubDyn['M8N4FKze'] = False # (N); ; +SubDyn['M8N5FKze'] = False # (N); ; +SubDyn['M8N6FKze'] = False # (N); ; +SubDyn['M8N7FKze'] = False # (N); ; +SubDyn['M8N8FKze'] = False # (N); ; +SubDyn['M8N9FKze'] = False # (N); ; +SubDyn['M9N1FKze'] = False # (N); ; +SubDyn['M9N2FKze'] = False # (N); ; +SubDyn['M9N3FKze'] = False # (N); ; +SubDyn['M9N4FKze'] = False # (N); ; +SubDyn['M9N5FKze'] = False # (N); ; +SubDyn['M9N6FKze'] = False # (N); ; +SubDyn['M9N7FKze'] = False # (N); ; +SubDyn['M9N8FKze'] = False # (N); ; +SubDyn['M9N9FKze'] = False # (N); ; +SubDyn['M1N1FMxe'] = False # (N); xe component of the shear at Node Nj of member Mi- Local Reference System- Dynamic Component; +SubDyn['M1N2FMxe'] = False # (N); ; +SubDyn['M1N3FMxe'] = False # (N); ; +SubDyn['M1N4FMxe'] = False # (N); ; +SubDyn['M1N5FMxe'] = False # (N); ; +SubDyn['M1N6FMxe'] = False # (N); ; +SubDyn['M1N7FMxe'] = False # (N); ; +SubDyn['M1N8FMxe'] = False # (N); ; +SubDyn['M1N9FMxe'] = False # (N); ; +SubDyn['M2N1FMxe'] = False # (N); ; +SubDyn['M2N2FMxe'] = False # (N); ; +SubDyn['M2N3FMxe'] = False # (N); ; +SubDyn['M2N4FMxe'] = False # (N); ; +SubDyn['M2N5FMxe'] = False # (N); ; +SubDyn['M2N6FMxe'] = False # (N); ; +SubDyn['M2N7FMxe'] = False # (N); ; +SubDyn['M2N8FMxe'] = False # (N); ; +SubDyn['M2N9FMxe'] = False # (N); ; +SubDyn['M3N1FMxe'] = False # (N); ; +SubDyn['M3N2FMxe'] = False # (N); ; +SubDyn['M3N3FMxe'] = False # (N); ; +SubDyn['M3N4FMxe'] = False # (N); ; +SubDyn['M3N5FMxe'] = False # (N); ; +SubDyn['M3N6FMxe'] = False # (N); ; +SubDyn['M3N7FMxe'] = False # (N); ; +SubDyn['M3N8FMxe'] = False # (N); ; +SubDyn['M3N9FMxe'] = False # (N); ; +SubDyn['M4N1FMxe'] = False # (N); ; +SubDyn['M4N2FMxe'] = False # (N); ; +SubDyn['M4N3FMxe'] = False # (N); ; +SubDyn['M4N4FMxe'] = False # (N); ; +SubDyn['M4N5FMxe'] = False # (N); ; +SubDyn['M4N6FMxe'] = False # (N); ; +SubDyn['M4N7FMxe'] = False # (N); ; +SubDyn['M4N8FMxe'] = False # (N); ; +SubDyn['M4N9FMxe'] = False # (N); ; +SubDyn['M5N1FMxe'] = False # (N); ; +SubDyn['M5N2FMxe'] = False # (N); ; +SubDyn['M5N3FMxe'] = False # (N); ; +SubDyn['M5N4FMxe'] = False # (N); ; +SubDyn['M5N5FMxe'] = False # (N); ; +SubDyn['M5N6FMxe'] = False # (N); ; +SubDyn['M5N7FMxe'] = False # (N); ; +SubDyn['M5N8FMxe'] = False # (N); ; +SubDyn['M5N9FMxe'] = False # (N); ; +SubDyn['M6N1FMxe'] = False # (N); ; +SubDyn['M6N2FMxe'] = False # (N); ; +SubDyn['M6N3FMxe'] = False # (N); ; +SubDyn['M6N4FMxe'] = False # (N); ; +SubDyn['M6N5FMxe'] = False # (N); ; +SubDyn['M6N6FMxe'] = False # (N); ; +SubDyn['M6N7FMxe'] = False # (N); ; +SubDyn['M6N8FMxe'] = False # (N); ; +SubDyn['M6N9FMxe'] = False # (N); ; +SubDyn['M7N1FMxe'] = False # (N); ; +SubDyn['M7N2FMxe'] = False # (N); ; +SubDyn['M7N3FMxe'] = False # (N); ; +SubDyn['M7N4FMxe'] = False # (N); ; +SubDyn['M7N5FMxe'] = False # (N); ; +SubDyn['M7N6FMxe'] = False # (N); ; +SubDyn['M7N7FMxe'] = False # (N); ; +SubDyn['M7N8FMxe'] = False # (N); ; +SubDyn['M7N9FMxe'] = False # (N); ; +SubDyn['M8N1FMxe'] = False # (N); ; +SubDyn['M8N2FMxe'] = False # (N); ; +SubDyn['M8N3FMxe'] = False # (N); ; +SubDyn['M8N4FMxe'] = False # (N); ; +SubDyn['M8N5FMxe'] = False # (N); ; +SubDyn['M8N6FMxe'] = False # (N); ; +SubDyn['M8N7FMxe'] = False # (N); ; +SubDyn['M8N8FMxe'] = False # (N); ; +SubDyn['M8N9FMxe'] = False # (N); ; +SubDyn['M9N1FMxe'] = False # (N); ; +SubDyn['M9N2FMxe'] = False # (N); ; +SubDyn['M9N3FMxe'] = False # (N); ; +SubDyn['M9N4FMxe'] = False # (N); ; +SubDyn['M9N5FMxe'] = False # (N); ; +SubDyn['M9N6FMxe'] = False # (N); ; +SubDyn['M9N7FMxe'] = False # (N); ; +SubDyn['M9N8FMxe'] = False # (N); ; +SubDyn['M9N9FMxe'] = False # (N); ; +SubDyn['M1N1FMye'] = False # (N); ye component of the shear at Node Nj of member Mi- Local Reference System- Dynamic Component; +SubDyn['M1N2FMye'] = False # (N); ; +SubDyn['M1N3FMye'] = False # (N); ; +SubDyn['M1N4FMye'] = False # (N); ; +SubDyn['M1N5FMye'] = False # (N); ; +SubDyn['M1N6FMye'] = False # (N); ; +SubDyn['M1N7FMye'] = False # (N); ; +SubDyn['M1N8FMye'] = False # (N); ; +SubDyn['M1N9FMye'] = False # (N); ; +SubDyn['M2N1FMye'] = False # (N); ; +SubDyn['M2N2FMye'] = False # (N); ; +SubDyn['M2N3FMye'] = False # (N); ; +SubDyn['M2N4FMye'] = False # (N); ; +SubDyn['M2N5FMye'] = False # (N); ; +SubDyn['M2N6FMye'] = False # (N); ; +SubDyn['M2N7FMye'] = False # (N); ; +SubDyn['M2N8FMye'] = False # (N); ; +SubDyn['M2N9FMye'] = False # (N); ; +SubDyn['M3N1FMye'] = False # (N); ; +SubDyn['M3N2FMye'] = False # (N); ; +SubDyn['M3N3FMye'] = False # (N); ; +SubDyn['M3N4FMye'] = False # (N); ; +SubDyn['M3N5FMye'] = False # (N); ; +SubDyn['M3N6FMye'] = False # (N); ; +SubDyn['M3N7FMye'] = False # (N); ; +SubDyn['M3N8FMye'] = False # (N); ; +SubDyn['M3N9FMye'] = False # (N); ; +SubDyn['M4N1FMye'] = False # (N); ; +SubDyn['M4N2FMye'] = False # (N); ; +SubDyn['M4N3FMye'] = False # (N); ; +SubDyn['M4N4FMye'] = False # (N); ; +SubDyn['M4N5FMye'] = False # (N); ; +SubDyn['M4N6FMye'] = False # (N); ; +SubDyn['M4N7FMye'] = False # (N); ; +SubDyn['M4N8FMye'] = False # (N); ; +SubDyn['M4N9FMye'] = False # (N); ; +SubDyn['M5N1FMye'] = False # (N); ; +SubDyn['M5N2FMye'] = False # (N); ; +SubDyn['M5N3FMye'] = False # (N); ; +SubDyn['M5N4FMye'] = False # (N); ; +SubDyn['M5N5FMye'] = False # (N); ; +SubDyn['M5N6FMye'] = False # (N); ; +SubDyn['M5N7FMye'] = False # (N); ; +SubDyn['M5N8FMye'] = False # (N); ; +SubDyn['M5N9FMye'] = False # (N); ; +SubDyn['M6N1FMye'] = False # (N); ; +SubDyn['M6N2FMye'] = False # (N); ; +SubDyn['M6N3FMye'] = False # (N); ; +SubDyn['M6N4FMye'] = False # (N); ; +SubDyn['M6N5FMye'] = False # (N); ; +SubDyn['M6N6FMye'] = False # (N); ; +SubDyn['M6N7FMye'] = False # (N); ; +SubDyn['M6N8FMye'] = False # (N); ; +SubDyn['M6N9FMye'] = False # (N); ; +SubDyn['M7N1FMye'] = False # (N); ; +SubDyn['M7N2FMye'] = False # (N); ; +SubDyn['M7N3FMye'] = False # (N); ; +SubDyn['M7N4FMye'] = False # (N); ; +SubDyn['M7N5FMye'] = False # (N); ; +SubDyn['M7N6FMye'] = False # (N); ; +SubDyn['M7N7FMye'] = False # (N); ; +SubDyn['M7N8FMye'] = False # (N); ; +SubDyn['M7N9FMye'] = False # (N); ; +SubDyn['M8N1FMye'] = False # (N); ; +SubDyn['M8N2FMye'] = False # (N); ; +SubDyn['M8N3FMye'] = False # (N); ; +SubDyn['M8N4FMye'] = False # (N); ; +SubDyn['M8N5FMye'] = False # (N); ; +SubDyn['M8N6FMye'] = False # (N); ; +SubDyn['M8N7FMye'] = False # (N); ; +SubDyn['M8N8FMye'] = False # (N); ; +SubDyn['M8N9FMye'] = False # (N); ; +SubDyn['M9N1FMye'] = False # (N); ; +SubDyn['M9N2FMye'] = False # (N); ; +SubDyn['M9N3FMye'] = False # (N); ; +SubDyn['M9N4FMye'] = False # (N); ; +SubDyn['M9N5FMye'] = False # (N); ; +SubDyn['M9N6FMye'] = False # (N); ; +SubDyn['M9N7FMye'] = False # (N); ; +SubDyn['M9N8FMye'] = False # (N); ; +SubDyn['M9N9FMye'] = False # (N); ; +SubDyn['M1N1FMze'] = False # (N); axial force at Node Nj of member Mi- Local Reference System- Dynamic Component; +SubDyn['M1N2FMze'] = False # (N); ; +SubDyn['M1N3FMze'] = False # (N); ; +SubDyn['M1N4FMze'] = False # (N); ; +SubDyn['M1N5FMze'] = False # (N); ; +SubDyn['M1N6FMze'] = False # (N); ; +SubDyn['M1N7FMze'] = False # (N); ; +SubDyn['M1N8FMze'] = False # (N); ; +SubDyn['M1N9FMze'] = False # (N); ; +SubDyn['M2N1FMze'] = False # (N); ; +SubDyn['M2N2FMze'] = False # (N); ; +SubDyn['M2N3FMze'] = False # (N); ; +SubDyn['M2N4FMze'] = False # (N); ; +SubDyn['M2N5FMze'] = False # (N); ; +SubDyn['M2N6FMze'] = False # (N); ; +SubDyn['M2N7FMze'] = False # (N); ; +SubDyn['M2N8FMze'] = False # (N); ; +SubDyn['M2N9FMze'] = False # (N); ; +SubDyn['M3N1FMze'] = False # (N); ; +SubDyn['M3N2FMze'] = False # (N); ; +SubDyn['M3N3FMze'] = False # (N); ; +SubDyn['M3N4FMze'] = False # (N); ; +SubDyn['M3N5FMze'] = False # (N); ; +SubDyn['M3N6FMze'] = False # (N); ; +SubDyn['M3N7FMze'] = False # (N); ; +SubDyn['M3N8FMze'] = False # (N); ; +SubDyn['M3N9FMze'] = False # (N); ; +SubDyn['M4N1FMze'] = False # (N); ; +SubDyn['M4N2FMze'] = False # (N); ; +SubDyn['M4N3FMze'] = False # (N); ; +SubDyn['M4N4FMze'] = False # (N); ; +SubDyn['M4N5FMze'] = False # (N); ; +SubDyn['M4N6FMze'] = False # (N); ; +SubDyn['M4N7FMze'] = False # (N); ; +SubDyn['M4N8FMze'] = False # (N); ; +SubDyn['M4N9FMze'] = False # (N); ; +SubDyn['M5N1FMze'] = False # (N); ; +SubDyn['M5N2FMze'] = False # (N); ; +SubDyn['M5N3FMze'] = False # (N); ; +SubDyn['M5N4FMze'] = False # (N); ; +SubDyn['M5N5FMze'] = False # (N); ; +SubDyn['M5N6FMze'] = False # (N); ; +SubDyn['M5N7FMze'] = False # (N); ; +SubDyn['M5N8FMze'] = False # (N); ; +SubDyn['M5N9FMze'] = False # (N); ; +SubDyn['M6N1FMze'] = False # (N); ; +SubDyn['M6N2FMze'] = False # (N); ; +SubDyn['M6N3FMze'] = False # (N); ; +SubDyn['M6N4FMze'] = False # (N); ; +SubDyn['M6N5FMze'] = False # (N); ; +SubDyn['M6N6FMze'] = False # (N); ; +SubDyn['M6N7FMze'] = False # (N); ; +SubDyn['M6N8FMze'] = False # (N); ; +SubDyn['M6N9FMze'] = False # (N); ; +SubDyn['M7N1FMze'] = False # (N); ; +SubDyn['M7N2FMze'] = False # (N); ; +SubDyn['M7N3FMze'] = False # (N); ; +SubDyn['M7N4FMze'] = False # (N); ; +SubDyn['M7N5FMze'] = False # (N); ; +SubDyn['M7N6FMze'] = False # (N); ; +SubDyn['M7N7FMze'] = False # (N); ; +SubDyn['M7N8FMze'] = False # (N); ; +SubDyn['M7N9FMze'] = False # (N); ; +SubDyn['M8N1FMze'] = False # (N); ; +SubDyn['M8N2FMze'] = False # (N); ; +SubDyn['M8N3FMze'] = False # (N); ; +SubDyn['M8N4FMze'] = False # (N); ; +SubDyn['M8N5FMze'] = False # (N); ; +SubDyn['M8N6FMze'] = False # (N); ; +SubDyn['M8N7FMze'] = False # (N); ; +SubDyn['M8N8FMze'] = False # (N); ; +SubDyn['M8N9FMze'] = False # (N); ; +SubDyn['M9N1FMze'] = False # (N); ; +SubDyn['M9N2FMze'] = False # (N); ; +SubDyn['M9N3FMze'] = False # (N); ; +SubDyn['M9N4FMze'] = False # (N); ; +SubDyn['M9N5FMze'] = False # (N); ; +SubDyn['M9N6FMze'] = False # (N); ; +SubDyn['M9N7FMze'] = False # (N); ; +SubDyn['M9N8FMze'] = False # (N); ; +SubDyn['M9N9FMze'] = False # (N); ; +SubDyn['M1N1MKxe'] = False # (N*m); xe component of the bending moment at Node Nj of member Mi- Local Reference System- Static Component; +SubDyn['M1N2MKxe'] = False # (N*m); ; +SubDyn['M1N3MKxe'] = False # (N*m); ; +SubDyn['M1N4MKxe'] = False # (N*m); ; +SubDyn['M1N5MKxe'] = False # (N*m); ; +SubDyn['M1N6MKxe'] = False # (N*m); ; +SubDyn['M1N7MKxe'] = False # (N*m); ; +SubDyn['M1N8MKxe'] = False # (N*m); ; +SubDyn['M1N9MKxe'] = False # (N*m); ; +SubDyn['M2N1MKxe'] = False # (N*m); ; +SubDyn['M2N2MKxe'] = False # (N*m); ; +SubDyn['M2N3MKxe'] = False # (N*m); ; +SubDyn['M2N4MKxe'] = False # (N*m); ; +SubDyn['M2N5MKxe'] = False # (N*m); ; +SubDyn['M2N6MKxe'] = False # (N*m); ; +SubDyn['M2N7MKxe'] = False # (N*m); ; +SubDyn['M2N8MKxe'] = False # (N*m); ; +SubDyn['M2N9MKxe'] = False # (N*m); ; +SubDyn['M3N1MKxe'] = False # (N*m); ; +SubDyn['M3N2MKxe'] = False # (N*m); ; +SubDyn['M3N3MKxe'] = False # (N*m); ; +SubDyn['M3N4MKxe'] = False # (N*m); ; +SubDyn['M3N5MKxe'] = False # (N*m); ; +SubDyn['M3N6MKxe'] = False # (N*m); ; +SubDyn['M3N7MKxe'] = False # (N*m); ; +SubDyn['M3N8MKxe'] = False # (N*m); ; +SubDyn['M3N9MKxe'] = False # (N*m); ; +SubDyn['M4N1MKxe'] = False # (N*m); ; +SubDyn['M4N2MKxe'] = False # (N*m); ; +SubDyn['M4N3MKxe'] = False # (N*m); ; +SubDyn['M4N4MKxe'] = False # (N*m); ; +SubDyn['M4N5MKxe'] = False # (N*m); ; +SubDyn['M4N6MKxe'] = False # (N*m); ; +SubDyn['M4N7MKxe'] = False # (N*m); ; +SubDyn['M4N8MKxe'] = False # (N*m); ; +SubDyn['M4N9MKxe'] = False # (N*m); ; +SubDyn['M5N1MKxe'] = False # (N*m); ; +SubDyn['M5N2MKxe'] = False # (N*m); ; +SubDyn['M5N3MKxe'] = False # (N*m); ; +SubDyn['M5N4MKxe'] = False # (N*m); ; +SubDyn['M5N5MKxe'] = False # (N*m); ; +SubDyn['M5N6MKxe'] = False # (N*m); ; +SubDyn['M5N7MKxe'] = False # (N*m); ; +SubDyn['M5N8MKxe'] = False # (N*m); ; +SubDyn['M5N9MKxe'] = False # (N*m); ; +SubDyn['M6N1MKxe'] = False # (N*m); ; +SubDyn['M6N2MKxe'] = False # (N*m); ; +SubDyn['M6N3MKxe'] = False # (N*m); ; +SubDyn['M6N4MKxe'] = False # (N*m); ; +SubDyn['M6N5MKxe'] = False # (N*m); ; +SubDyn['M6N6MKxe'] = False # (N*m); ; +SubDyn['M6N7MKxe'] = False # (N*m); ; +SubDyn['M6N8MKxe'] = False # (N*m); ; +SubDyn['M6N9MKxe'] = False # (N*m); ; +SubDyn['M7N1MKxe'] = False # (N*m); ; +SubDyn['M7N2MKxe'] = False # (N*m); ; +SubDyn['M7N3MKxe'] = False # (N*m); ; +SubDyn['M7N4MKxe'] = False # (N*m); ; +SubDyn['M7N5MKxe'] = False # (N*m); ; +SubDyn['M7N6MKxe'] = False # (N*m); ; +SubDyn['M7N7MKxe'] = False # (N*m); ; +SubDyn['M7N8MKxe'] = False # (N*m); ; +SubDyn['M7N9MKxe'] = False # (N*m); ; +SubDyn['M8N1MKxe'] = False # (N*m); ; +SubDyn['M8N2MKxe'] = False # (N*m); ; +SubDyn['M8N3MKxe'] = False # (N*m); ; +SubDyn['M8N4MKxe'] = False # (N*m); ; +SubDyn['M8N5MKxe'] = False # (N*m); ; +SubDyn['M8N6MKxe'] = False # (N*m); ; +SubDyn['M8N7MKxe'] = False # (N*m); ; +SubDyn['M8N8MKxe'] = False # (N*m); ; +SubDyn['M8N9MKxe'] = False # (N*m); ; +SubDyn['M9N1MKxe'] = False # (N*m); ; +SubDyn['M9N2MKxe'] = False # (N*m); ; +SubDyn['M9N3MKxe'] = False # (N*m); ; +SubDyn['M9N4MKxe'] = False # (N*m); ; +SubDyn['M9N5MKxe'] = False # (N*m); ; +SubDyn['M9N6MKxe'] = False # (N*m); ; +SubDyn['M9N7MKxe'] = False # (N*m); ; +SubDyn['M9N8MKxe'] = False # (N*m); ; +SubDyn['M9N9MKxe'] = False # (N*m); ; +SubDyn['M1N1MKye'] = False # (N*m); ye component of the bending moment at Node Nj of member Mi- Local Reference System- Static Component; +SubDyn['M1N2MKye'] = False # (N*m); ; +SubDyn['M1N3MKye'] = False # (N*m); ; +SubDyn['M1N4MKye'] = False # (N*m); ; +SubDyn['M1N5MKye'] = False # (N*m); ; +SubDyn['M1N6MKye'] = False # (N*m); ; +SubDyn['M1N7MKye'] = False # (N*m); ; +SubDyn['M1N8MKye'] = False # (N*m); ; +SubDyn['M1N9MKye'] = False # (N*m); ; +SubDyn['M2N1MKye'] = False # (N*m); ; +SubDyn['M2N2MKye'] = False # (N*m); ; +SubDyn['M2N3MKye'] = False # (N*m); ; +SubDyn['M2N4MKye'] = False # (N*m); ; +SubDyn['M2N5MKye'] = False # (N*m); ; +SubDyn['M2N6MKye'] = False # (N*m); ; +SubDyn['M2N7MKye'] = False # (N*m); ; +SubDyn['M2N8MKye'] = False # (N*m); ; +SubDyn['M2N9MKye'] = False # (N*m); ; +SubDyn['M3N1MKye'] = False # (N*m); ; +SubDyn['M3N2MKye'] = False # (N*m); ; +SubDyn['M3N3MKye'] = False # (N*m); ; +SubDyn['M3N4MKye'] = False # (N*m); ; +SubDyn['M3N5MKye'] = False # (N*m); ; +SubDyn['M3N6MKye'] = False # (N*m); ; +SubDyn['M3N7MKye'] = False # (N*m); ; +SubDyn['M3N8MKye'] = False # (N*m); ; +SubDyn['M3N9MKye'] = False # (N*m); ; +SubDyn['M4N1MKye'] = False # (N*m); ; +SubDyn['M4N2MKye'] = False # (N*m); ; +SubDyn['M4N3MKye'] = False # (N*m); ; +SubDyn['M4N4MKye'] = False # (N*m); ; +SubDyn['M4N5MKye'] = False # (N*m); ; +SubDyn['M4N6MKye'] = False # (N*m); ; +SubDyn['M4N7MKye'] = False # (N*m); ; +SubDyn['M4N8MKye'] = False # (N*m); ; +SubDyn['M4N9MKye'] = False # (N*m); ; +SubDyn['M5N1MKye'] = False # (N*m); ; +SubDyn['M5N2MKye'] = False # (N*m); ; +SubDyn['M5N3MKye'] = False # (N*m); ; +SubDyn['M5N4MKye'] = False # (N*m); ; +SubDyn['M5N5MKye'] = False # (N*m); ; +SubDyn['M5N6MKye'] = False # (N*m); ; +SubDyn['M5N7MKye'] = False # (N*m); ; +SubDyn['M5N8MKye'] = False # (N*m); ; +SubDyn['M5N9MKye'] = False # (N*m); ; +SubDyn['M6N1MKye'] = False # (N*m); ; +SubDyn['M6N2MKye'] = False # (N*m); ; +SubDyn['M6N3MKye'] = False # (N*m); ; +SubDyn['M6N4MKye'] = False # (N*m); ; +SubDyn['M6N5MKye'] = False # (N*m); ; +SubDyn['M6N6MKye'] = False # (N*m); ; +SubDyn['M6N7MKye'] = False # (N*m); ; +SubDyn['M6N8MKye'] = False # (N*m); ; +SubDyn['M6N9MKye'] = False # (N*m); ; +SubDyn['M7N1MKye'] = False # (N*m); ; +SubDyn['M7N2MKye'] = False # (N*m); ; +SubDyn['M7N3MKye'] = False # (N*m); ; +SubDyn['M7N4MKye'] = False # (N*m); ; +SubDyn['M7N5MKye'] = False # (N*m); ; +SubDyn['M7N6MKye'] = False # (N*m); ; +SubDyn['M7N7MKye'] = False # (N*m); ; +SubDyn['M7N8MKye'] = False # (N*m); ; +SubDyn['M7N9MKye'] = False # (N*m); ; +SubDyn['M8N1MKye'] = False # (N*m); ; +SubDyn['M8N2MKye'] = False # (N*m); ; +SubDyn['M8N3MKye'] = False # (N*m); ; +SubDyn['M8N4MKye'] = False # (N*m); ; +SubDyn['M8N5MKye'] = False # (N*m); ; +SubDyn['M8N6MKye'] = False # (N*m); ; +SubDyn['M8N7MKye'] = False # (N*m); ; +SubDyn['M8N8MKye'] = False # (N*m); ; +SubDyn['M8N9MKye'] = False # (N*m); ; +SubDyn['M9N1MKye'] = False # (N*m); ; +SubDyn['M9N2MKye'] = False # (N*m); ; +SubDyn['M9N3MKye'] = False # (N*m); ; +SubDyn['M9N4MKye'] = False # (N*m); ; +SubDyn['M9N5MKye'] = False # (N*m); ; +SubDyn['M9N6MKye'] = False # (N*m); ; +SubDyn['M9N7MKye'] = False # (N*m); ; +SubDyn['M9N8MKye'] = False # (N*m); ; +SubDyn['M9N9MKye'] = False # (N*m); ; +SubDyn['M1N1MKze'] = False # (N*m); Torsion moment at Node Nj of member Mi- Local Reference System- Static Component; +SubDyn['M1N2MKze'] = False # (N*m); ; +SubDyn['M1N3MKze'] = False # (N*m); ; +SubDyn['M1N4MKze'] = False # (N*m); ; +SubDyn['M1N5MKze'] = False # (N*m); ; +SubDyn['M1N6MKze'] = False # (N*m); ; +SubDyn['M1N7MKze'] = False # (N*m); ; +SubDyn['M1N8MKze'] = False # (N*m); ; +SubDyn['M1N9MKze'] = False # (N*m); ; +SubDyn['M2N1MKze'] = False # (N*m); ; +SubDyn['M2N2MKze'] = False # (N*m); ; +SubDyn['M2N3MKze'] = False # (N*m); ; +SubDyn['M2N4MKze'] = False # (N*m); ; +SubDyn['M2N5MKze'] = False # (N*m); ; +SubDyn['M2N6MKze'] = False # (N*m); ; +SubDyn['M2N7MKze'] = False # (N*m); ; +SubDyn['M2N8MKze'] = False # (N*m); ; +SubDyn['M2N9MKze'] = False # (N*m); ; +SubDyn['M3N1MKze'] = False # (N*m); ; +SubDyn['M3N2MKze'] = False # (N*m); ; +SubDyn['M3N3MKze'] = False # (N*m); ; +SubDyn['M3N4MKze'] = False # (N*m); ; +SubDyn['M3N5MKze'] = False # (N*m); ; +SubDyn['M3N6MKze'] = False # (N*m); ; +SubDyn['M3N7MKze'] = False # (N*m); ; +SubDyn['M3N8MKze'] = False # (N*m); ; +SubDyn['M3N9MKze'] = False # (N*m); ; +SubDyn['M4N1MKze'] = False # (N*m); ; +SubDyn['M4N2MKze'] = False # (N*m); ; +SubDyn['M4N3MKze'] = False # (N*m); ; +SubDyn['M4N4MKze'] = False # (N*m); ; +SubDyn['M4N5MKze'] = False # (N*m); ; +SubDyn['M4N6MKze'] = False # (N*m); ; +SubDyn['M4N7MKze'] = False # (N*m); ; +SubDyn['M4N8MKze'] = False # (N*m); ; +SubDyn['M4N9MKze'] = False # (N*m); ; +SubDyn['M5N1MKze'] = False # (N*m); ; +SubDyn['M5N2MKze'] = False # (N*m); ; +SubDyn['M5N3MKze'] = False # (N*m); ; +SubDyn['M5N4MKze'] = False # (N*m); ; +SubDyn['M5N5MKze'] = False # (N*m); ; +SubDyn['M5N6MKze'] = False # (N*m); ; +SubDyn['M5N7MKze'] = False # (N*m); ; +SubDyn['M5N8MKze'] = False # (N*m); ; +SubDyn['M5N9MKze'] = False # (N*m); ; +SubDyn['M6N1MKze'] = False # (N*m); ; +SubDyn['M6N2MKze'] = False # (N*m); ; +SubDyn['M6N3MKze'] = False # (N*m); ; +SubDyn['M6N4MKze'] = False # (N*m); ; +SubDyn['M6N5MKze'] = False # (N*m); ; +SubDyn['M6N6MKze'] = False # (N*m); ; +SubDyn['M6N7MKze'] = False # (N*m); ; +SubDyn['M6N8MKze'] = False # (N*m); ; +SubDyn['M6N9MKze'] = False # (N*m); ; +SubDyn['M7N1MKze'] = False # (N*m); ; +SubDyn['M7N2MKze'] = False # (N*m); ; +SubDyn['M7N3MKze'] = False # (N*m); ; +SubDyn['M7N4MKze'] = False # (N*m); ; +SubDyn['M7N5MKze'] = False # (N*m); ; +SubDyn['M7N6MKze'] = False # (N*m); ; +SubDyn['M7N7MKze'] = False # (N*m); ; +SubDyn['M7N8MKze'] = False # (N*m); ; +SubDyn['M7N9MKze'] = False # (N*m); ; +SubDyn['M8N1MKze'] = False # (N*m); ; +SubDyn['M8N2MKze'] = False # (N*m); ; +SubDyn['M8N3MKze'] = False # (N*m); ; +SubDyn['M8N4MKze'] = False # (N*m); ; +SubDyn['M8N5MKze'] = False # (N*m); ; +SubDyn['M8N6MKze'] = False # (N*m); ; +SubDyn['M8N7MKze'] = False # (N*m); ; +SubDyn['M8N8MKze'] = False # (N*m); ; +SubDyn['M8N9MKze'] = False # (N*m); ; +SubDyn['M9N1MKze'] = False # (N*m); ; +SubDyn['M9N2MKze'] = False # (N*m); ; +SubDyn['M9N3MKze'] = False # (N*m); ; +SubDyn['M9N4MKze'] = False # (N*m); ; +SubDyn['M9N5MKze'] = False # (N*m); ; +SubDyn['M9N6MKze'] = False # (N*m); ; +SubDyn['M9N7MKze'] = False # (N*m); ; +SubDyn['M9N8MKze'] = False # (N*m); ; +SubDyn['M9N9MKze'] = False # (N*m); ; +SubDyn['M1N1MMxe'] = False # (N*m); xe component of the bending moment at Node Nj of member Mi- Local Reference System- Dynamic Component; +SubDyn['M1N2MMxe'] = False # (N*m); ; +SubDyn['M1N3MMxe'] = False # (N*m); ; +SubDyn['M1N4MMxe'] = False # (N*m); ; +SubDyn['M1N5MMxe'] = False # (N*m); ; +SubDyn['M1N6MMxe'] = False # (N*m); ; +SubDyn['M1N7MMxe'] = False # (N*m); ; +SubDyn['M1N8MMxe'] = False # (N*m); ; +SubDyn['M1N9MMxe'] = False # (N*m); ; +SubDyn['M2N1MMxe'] = False # (N*m); ; +SubDyn['M2N2MMxe'] = False # (N*m); ; +SubDyn['M2N3MMxe'] = False # (N*m); ; +SubDyn['M2N4MMxe'] = False # (N*m); ; +SubDyn['M2N5MMxe'] = False # (N*m); ; +SubDyn['M2N6MMxe'] = False # (N*m); ; +SubDyn['M2N7MMxe'] = False # (N*m); ; +SubDyn['M2N8MMxe'] = False # (N*m); ; +SubDyn['M2N9MMxe'] = False # (N*m); ; +SubDyn['M3N1MMxe'] = False # (N*m); ; +SubDyn['M3N2MMxe'] = False # (N*m); ; +SubDyn['M3N3MMxe'] = False # (N*m); ; +SubDyn['M3N4MMxe'] = False # (N*m); ; +SubDyn['M3N5MMxe'] = False # (N*m); ; +SubDyn['M3N6MMxe'] = False # (N*m); ; +SubDyn['M3N7MMxe'] = False # (N*m); ; +SubDyn['M3N8MMxe'] = False # (N*m); ; +SubDyn['M3N9MMxe'] = False # (N*m); ; +SubDyn['M4N1MMxe'] = False # (N*m); ; +SubDyn['M4N2MMxe'] = False # (N*m); ; +SubDyn['M4N3MMxe'] = False # (N*m); ; +SubDyn['M4N4MMxe'] = False # (N*m); ; +SubDyn['M4N5MMxe'] = False # (N*m); ; +SubDyn['M4N6MMxe'] = False # (N*m); ; +SubDyn['M4N7MMxe'] = False # (N*m); ; +SubDyn['M4N8MMxe'] = False # (N*m); ; +SubDyn['M4N9MMxe'] = False # (N*m); ; +SubDyn['M5N1MMxe'] = False # (N*m); ; +SubDyn['M5N2MMxe'] = False # (N*m); ; +SubDyn['M5N3MMxe'] = False # (N*m); ; +SubDyn['M5N4MMxe'] = False # (N*m); ; +SubDyn['M5N5MMxe'] = False # (N*m); ; +SubDyn['M5N6MMxe'] = False # (N*m); ; +SubDyn['M5N7MMxe'] = False # (N*m); ; +SubDyn['M5N8MMxe'] = False # (N*m); ; +SubDyn['M5N9MMxe'] = False # (N*m); ; +SubDyn['M6N1MMxe'] = False # (N*m); ; +SubDyn['M6N2MMxe'] = False # (N*m); ; +SubDyn['M6N3MMxe'] = False # (N*m); ; +SubDyn['M6N4MMxe'] = False # (N*m); ; +SubDyn['M6N5MMxe'] = False # (N*m); ; +SubDyn['M6N6MMxe'] = False # (N*m); ; +SubDyn['M6N7MMxe'] = False # (N*m); ; +SubDyn['M6N8MMxe'] = False # (N*m); ; +SubDyn['M6N9MMxe'] = False # (N*m); ; +SubDyn['M7N1MMxe'] = False # (N*m); ; +SubDyn['M7N2MMxe'] = False # (N*m); ; +SubDyn['M7N3MMxe'] = False # (N*m); ; +SubDyn['M7N4MMxe'] = False # (N*m); ; +SubDyn['M7N5MMxe'] = False # (N*m); ; +SubDyn['M7N6MMxe'] = False # (N*m); ; +SubDyn['M7N7MMxe'] = False # (N*m); ; +SubDyn['M7N8MMxe'] = False # (N*m); ; +SubDyn['M7N9MMxe'] = False # (N*m); ; +SubDyn['M8N1MMxe'] = False # (N*m); ; +SubDyn['M8N2MMxe'] = False # (N*m); ; +SubDyn['M8N3MMxe'] = False # (N*m); ; +SubDyn['M8N4MMxe'] = False # (N*m); ; +SubDyn['M8N5MMxe'] = False # (N*m); ; +SubDyn['M8N6MMxe'] = False # (N*m); ; +SubDyn['M8N7MMxe'] = False # (N*m); ; +SubDyn['M8N8MMxe'] = False # (N*m); ; +SubDyn['M8N9MMxe'] = False # (N*m); ; +SubDyn['M9N1MMxe'] = False # (N*m); ; +SubDyn['M9N2MMxe'] = False # (N*m); ; +SubDyn['M9N3MMxe'] = False # (N*m); ; +SubDyn['M9N4MMxe'] = False # (N*m); ; +SubDyn['M9N5MMxe'] = False # (N*m); ; +SubDyn['M9N6MMxe'] = False # (N*m); ; +SubDyn['M9N7MMxe'] = False # (N*m); ; +SubDyn['M9N8MMxe'] = False # (N*m); ; +SubDyn['M9N9MMxe'] = False # (N*m); ; +SubDyn['M1N1MMye'] = False # (N*m); ye component of the bending moment at Node Nj of member Mi- Local Reference System- Dynamic Component; +SubDyn['M1N2MMye'] = False # (N*m); ; +SubDyn['M1N3MMye'] = False # (N*m); ; +SubDyn['M1N4MMye'] = False # (N*m); ; +SubDyn['M1N5MMye'] = False # (N*m); ; +SubDyn['M1N6MMye'] = False # (N*m); ; +SubDyn['M1N7MMye'] = False # (N*m); ; +SubDyn['M1N8MMye'] = False # (N*m); ; +SubDyn['M1N9MMye'] = False # (N*m); ; +SubDyn['M2N1MMye'] = False # (N*m); ; +SubDyn['M2N2MMye'] = False # (N*m); ; +SubDyn['M2N3MMye'] = False # (N*m); ; +SubDyn['M2N4MMye'] = False # (N*m); ; +SubDyn['M2N5MMye'] = False # (N*m); ; +SubDyn['M2N6MMye'] = False # (N*m); ; +SubDyn['M2N7MMye'] = False # (N*m); ; +SubDyn['M2N8MMye'] = False # (N*m); ; +SubDyn['M2N9MMye'] = False # (N*m); ; +SubDyn['M3N1MMye'] = False # (N*m); ; +SubDyn['M3N2MMye'] = False # (N*m); ; +SubDyn['M3N3MMye'] = False # (N*m); ; +SubDyn['M3N4MMye'] = False # (N*m); ; +SubDyn['M3N5MMye'] = False # (N*m); ; +SubDyn['M3N6MMye'] = False # (N*m); ; +SubDyn['M3N7MMye'] = False # (N*m); ; +SubDyn['M3N8MMye'] = False # (N*m); ; +SubDyn['M3N9MMye'] = False # (N*m); ; +SubDyn['M4N1MMye'] = False # (N*m); ; +SubDyn['M4N2MMye'] = False # (N*m); ; +SubDyn['M4N3MMye'] = False # (N*m); ; +SubDyn['M4N4MMye'] = False # (N*m); ; +SubDyn['M4N5MMye'] = False # (N*m); ; +SubDyn['M4N6MMye'] = False # (N*m); ; +SubDyn['M4N7MMye'] = False # (N*m); ; +SubDyn['M4N8MMye'] = False # (N*m); ; +SubDyn['M4N9MMye'] = False # (N*m); ; +SubDyn['M5N1MMye'] = False # (N*m); ; +SubDyn['M5N2MMye'] = False # (N*m); ; +SubDyn['M5N3MMye'] = False # (N*m); ; +SubDyn['M5N4MMye'] = False # (N*m); ; +SubDyn['M5N5MMye'] = False # (N*m); ; +SubDyn['M5N6MMye'] = False # (N*m); ; +SubDyn['M5N7MMye'] = False # (N*m); ; +SubDyn['M5N8MMye'] = False # (N*m); ; +SubDyn['M5N9MMye'] = False # (N*m); ; +SubDyn['M6N1MMye'] = False # (N*m); ; +SubDyn['M6N2MMye'] = False # (N*m); ; +SubDyn['M6N3MMye'] = False # (N*m); ; +SubDyn['M6N4MMye'] = False # (N*m); ; +SubDyn['M6N5MMye'] = False # (N*m); ; +SubDyn['M6N6MMye'] = False # (N*m); ; +SubDyn['M6N7MMye'] = False # (N*m); ; +SubDyn['M6N8MMye'] = False # (N*m); ; +SubDyn['M6N9MMye'] = False # (N*m); ; +SubDyn['M7N1MMye'] = False # (N*m); ; +SubDyn['M7N2MMye'] = False # (N*m); ; +SubDyn['M7N3MMye'] = False # (N*m); ; +SubDyn['M7N4MMye'] = False # (N*m); ; +SubDyn['M7N5MMye'] = False # (N*m); ; +SubDyn['M7N6MMye'] = False # (N*m); ; +SubDyn['M7N7MMye'] = False # (N*m); ; +SubDyn['M7N8MMye'] = False # (N*m); ; +SubDyn['M7N9MMye'] = False # (N*m); ; +SubDyn['M8N1MMye'] = False # (N*m); ; +SubDyn['M8N2MMye'] = False # (N*m); ; +SubDyn['M8N3MMye'] = False # (N*m); ; +SubDyn['M8N4MMye'] = False # (N*m); ; +SubDyn['M8N5MMye'] = False # (N*m); ; +SubDyn['M8N6MMye'] = False # (N*m); ; +SubDyn['M8N7MMye'] = False # (N*m); ; +SubDyn['M8N8MMye'] = False # (N*m); ; +SubDyn['M8N9MMye'] = False # (N*m); ; +SubDyn['M9N1MMye'] = False # (N*m); ; +SubDyn['M9N2MMye'] = False # (N*m); ; +SubDyn['M9N3MMye'] = False # (N*m); ; +SubDyn['M9N4MMye'] = False # (N*m); ; +SubDyn['M9N5MMye'] = False # (N*m); ; +SubDyn['M9N6MMye'] = False # (N*m); ; +SubDyn['M9N7MMye'] = False # (N*m); ; +SubDyn['M9N8MMye'] = False # (N*m); ; +SubDyn['M9N9MMye'] = False # (N*m); ; +SubDyn['M1N1MMze'] = False # (N*m); Torsion moment at Node Nj of member Mi- Local Reference System- Dynamic Component; +SubDyn['M1N2MMze'] = False # (N*m); ; +SubDyn['M1N3MMze'] = False # (N*m); ; +SubDyn['M1N4MMze'] = False # (N*m); ; +SubDyn['M1N5MMze'] = False # (N*m); ; +SubDyn['M1N6MMze'] = False # (N*m); ; +SubDyn['M1N7MMze'] = False # (N*m); ; +SubDyn['M1N8MMze'] = False # (N*m); ; +SubDyn['M1N9MMze'] = False # (N*m); ; +SubDyn['M2N1MMze'] = False # (N*m); ; +SubDyn['M2N2MMze'] = False # (N*m); ; +SubDyn['M2N3MMze'] = False # (N*m); ; +SubDyn['M2N4MMze'] = False # (N*m); ; +SubDyn['M2N5MMze'] = False # (N*m); ; +SubDyn['M2N6MMze'] = False # (N*m); ; +SubDyn['M2N7MMze'] = False # (N*m); ; +SubDyn['M2N8MMze'] = False # (N*m); ; +SubDyn['M2N9MMze'] = False # (N*m); ; +SubDyn['M3N1MMze'] = False # (N*m); ; +SubDyn['M3N2MMze'] = False # (N*m); ; +SubDyn['M3N3MMze'] = False # (N*m); ; +SubDyn['M3N4MMze'] = False # (N*m); ; +SubDyn['M3N5MMze'] = False # (N*m); ; +SubDyn['M3N6MMze'] = False # (N*m); ; +SubDyn['M3N7MMze'] = False # (N*m); ; +SubDyn['M3N8MMze'] = False # (N*m); ; +SubDyn['M3N9MMze'] = False # (N*m); ; +SubDyn['M4N1MMze'] = False # (N*m); ; +SubDyn['M4N2MMze'] = False # (N*m); ; +SubDyn['M4N3MMze'] = False # (N*m); ; +SubDyn['M4N4MMze'] = False # (N*m); ; +SubDyn['M4N5MMze'] = False # (N*m); ; +SubDyn['M4N6MMze'] = False # (N*m); ; +SubDyn['M4N7MMze'] = False # (N*m); ; +SubDyn['M4N8MMze'] = False # (N*m); ; +SubDyn['M4N9MMze'] = False # (N*m); ; +SubDyn['M5N1MMze'] = False # (N*m); ; +SubDyn['M5N2MMze'] = False # (N*m); ; +SubDyn['M5N3MMze'] = False # (N*m); ; +SubDyn['M5N4MMze'] = False # (N*m); ; +SubDyn['M5N5MMze'] = False # (N*m); ; +SubDyn['M5N6MMze'] = False # (N*m); ; +SubDyn['M5N7MMze'] = False # (N*m); ; +SubDyn['M5N8MMze'] = False # (N*m); ; +SubDyn['M5N9MMze'] = False # (N*m); ; +SubDyn['M6N1MMze'] = False # (N*m); ; +SubDyn['M6N2MMze'] = False # (N*m); ; +SubDyn['M6N3MMze'] = False # (N*m); ; +SubDyn['M6N4MMze'] = False # (N*m); ; +SubDyn['M6N5MMze'] = False # (N*m); ; +SubDyn['M6N6MMze'] = False # (N*m); ; +SubDyn['M6N7MMze'] = False # (N*m); ; +SubDyn['M6N8MMze'] = False # (N*m); ; +SubDyn['M6N9MMze'] = False # (N*m); ; +SubDyn['M7N1MMze'] = False # (N*m); ; +SubDyn['M7N2MMze'] = False # (N*m); ; +SubDyn['M7N3MMze'] = False # (N*m); ; +SubDyn['M7N4MMze'] = False # (N*m); ; +SubDyn['M7N5MMze'] = False # (N*m); ; +SubDyn['M7N6MMze'] = False # (N*m); ; +SubDyn['M7N7MMze'] = False # (N*m); ; +SubDyn['M7N8MMze'] = False # (N*m); ; +SubDyn['M7N9MMze'] = False # (N*m); ; +SubDyn['M8N1MMze'] = False # (N*m); ; +SubDyn['M8N2MMze'] = False # (N*m); ; +SubDyn['M8N3MMze'] = False # (N*m); ; +SubDyn['M8N4MMze'] = False # (N*m); ; +SubDyn['M8N5MMze'] = False # (N*m); ; +SubDyn['M8N6MMze'] = False # (N*m); ; +SubDyn['M8N7MMze'] = False # (N*m); ; +SubDyn['M8N8MMze'] = False # (N*m); ; +SubDyn['M8N9MMze'] = False # (N*m); ; +SubDyn['M9N1MMze'] = False # (N*m); ; +SubDyn['M9N2MMze'] = False # (N*m); ; +SubDyn['M9N3MMze'] = False # (N*m); ; +SubDyn['M9N4MMze'] = False # (N*m); ; +SubDyn['M9N5MMze'] = False # (N*m); ; +SubDyn['M9N6MMze'] = False # (N*m); ; +SubDyn['M9N7MMze'] = False # (N*m); ; +SubDyn['M9N8MMze'] = False # (N*m); ; +SubDyn['M9N9MMze'] = False # (N*m); ; + +# Displacements +SubDyn['M1N1TDxss'] = False # (m); xss component of the displacement at Node Nj of member Mi- SS Reference System; +SubDyn['M1N2TDxss'] = False # (m); ; +SubDyn['M1N3TDxss'] = False # (m); ; +SubDyn['M1N4TDxss'] = False # (m); ; +SubDyn['M1N5TDxss'] = False # (m); ; +SubDyn['M1N6TDxss'] = False # (m); ; +SubDyn['M1N7TDxss'] = False # (m); ; +SubDyn['M1N8TDxss'] = False # (m); ; +SubDyn['M1N9TDxss'] = False # (m); ; +SubDyn['M2N1TDxss'] = False # (m); ; +SubDyn['M2N2TDxss'] = False # (m); ; +SubDyn['M2N3TDxss'] = False # (m); ; +SubDyn['M2N4TDxss'] = False # (m); ; +SubDyn['M2N5TDxss'] = False # (m); ; +SubDyn['M2N6TDxss'] = False # (m); ; +SubDyn['M2N7TDxss'] = False # (m); ; +SubDyn['M2N8TDxss'] = False # (m); ; +SubDyn['M2N9TDxss'] = False # (m); ; +SubDyn['M3N1TDxss'] = False # (m); ; +SubDyn['M3N2TDxss'] = False # (m); ; +SubDyn['M3N3TDxss'] = False # (m); ; +SubDyn['M3N4TDxss'] = False # (m); ; +SubDyn['M3N5TDxss'] = False # (m); ; +SubDyn['M3N6TDxss'] = False # (m); ; +SubDyn['M3N7TDxss'] = False # (m); ; +SubDyn['M3N8TDxss'] = False # (m); ; +SubDyn['M3N9TDxss'] = False # (m); ; +SubDyn['M4N1TDxss'] = False # (m); ; +SubDyn['M4N2TDxss'] = False # (m); ; +SubDyn['M4N3TDxss'] = False # (m); ; +SubDyn['M4N4TDxss'] = False # (m); ; +SubDyn['M4N5TDxss'] = False # (m); ; +SubDyn['M4N6TDxss'] = False # (m); ; +SubDyn['M4N7TDxss'] = False # (m); ; +SubDyn['M4N8TDxss'] = False # (m); ; +SubDyn['M4N9TDxss'] = False # (m); ; +SubDyn['M5N1TDxss'] = False # (m); ; +SubDyn['M5N2TDxss'] = False # (m); ; +SubDyn['M5N3TDxss'] = False # (m); ; +SubDyn['M5N4TDxss'] = False # (m); ; +SubDyn['M5N5TDxss'] = False # (m); ; +SubDyn['M5N6TDxss'] = False # (m); ; +SubDyn['M5N7TDxss'] = False # (m); ; +SubDyn['M5N8TDxss'] = False # (m); ; +SubDyn['M5N9TDxss'] = False # (m); ; +SubDyn['M6N1TDxss'] = False # (m); ; +SubDyn['M6N2TDxss'] = False # (m); ; +SubDyn['M6N3TDxss'] = False # (m); ; +SubDyn['M6N4TDxss'] = False # (m); ; +SubDyn['M6N5TDxss'] = False # (m); ; +SubDyn['M6N6TDxss'] = False # (m); ; +SubDyn['M6N7TDxss'] = False # (m); ; +SubDyn['M6N8TDxss'] = False # (m); ; +SubDyn['M6N9TDxss'] = False # (m); ; +SubDyn['M7N1TDxss'] = False # (m); ; +SubDyn['M7N2TDxss'] = False # (m); ; +SubDyn['M7N3TDxss'] = False # (m); ; +SubDyn['M7N4TDxss'] = False # (m); ; +SubDyn['M7N5TDxss'] = False # (m); ; +SubDyn['M7N6TDxss'] = False # (m); ; +SubDyn['M7N7TDxss'] = False # (m); ; +SubDyn['M7N8TDxss'] = False # (m); ; +SubDyn['M7N9TDxss'] = False # (m); ; +SubDyn['M8N1TDxss'] = False # (m); ; +SubDyn['M8N2TDxss'] = False # (m); ; +SubDyn['M8N3TDxss'] = False # (m); ; +SubDyn['M8N4TDxss'] = False # (m); ; +SubDyn['M8N5TDxss'] = False # (m); ; +SubDyn['M8N6TDxss'] = False # (m); ; +SubDyn['M8N7TDxss'] = False # (m); ; +SubDyn['M8N8TDxss'] = False # (m); ; +SubDyn['M8N9TDxss'] = False # (m); ; +SubDyn['M9N1TDxss'] = False # (m); ; +SubDyn['M9N2TDxss'] = False # (m); ; +SubDyn['M9N3TDxss'] = False # (m); ; +SubDyn['M9N4TDxss'] = False # (m); ; +SubDyn['M9N5TDxss'] = False # (m); ; +SubDyn['M9N6TDxss'] = False # (m); ; +SubDyn['M9N7TDxss'] = False # (m); ; +SubDyn['M9N8TDxss'] = False # (m); ; +SubDyn['M9N9TDxss'] = False # (m); ; +SubDyn['M1N1TDyss'] = False # (m); yss component of the displacement at Node Nj of member Mi- SS Reference System; +SubDyn['M1N2TDyss'] = False # (m); ; +SubDyn['M1N3TDyss'] = False # (m); ; +SubDyn['M1N4TDyss'] = False # (m); ; +SubDyn['M1N5TDyss'] = False # (m); ; +SubDyn['M1N6TDyss'] = False # (m); ; +SubDyn['M1N7TDyss'] = False # (m); ; +SubDyn['M1N8TDyss'] = False # (m); ; +SubDyn['M1N9TDyss'] = False # (m); ; +SubDyn['M2N1TDyss'] = False # (m); ; +SubDyn['M2N2TDyss'] = False # (m); ; +SubDyn['M2N3TDyss'] = False # (m); ; +SubDyn['M2N4TDyss'] = False # (m); ; +SubDyn['M2N5TDyss'] = False # (m); ; +SubDyn['M2N6TDyss'] = False # (m); ; +SubDyn['M2N7TDyss'] = False # (m); ; +SubDyn['M2N8TDyss'] = False # (m); ; +SubDyn['M2N9TDyss'] = False # (m); ; +SubDyn['M3N1TDyss'] = False # (m); ; +SubDyn['M3N2TDyss'] = False # (m); ; +SubDyn['M3N3TDyss'] = False # (m); ; +SubDyn['M3N4TDyss'] = False # (m); ; +SubDyn['M3N5TDyss'] = False # (m); ; +SubDyn['M3N6TDyss'] = False # (m); ; +SubDyn['M3N7TDyss'] = False # (m); ; +SubDyn['M3N8TDyss'] = False # (m); ; +SubDyn['M3N9TDyss'] = False # (m); ; +SubDyn['M4N1TDyss'] = False # (m); ; +SubDyn['M4N2TDyss'] = False # (m); ; +SubDyn['M4N3TDyss'] = False # (m); ; +SubDyn['M4N4TDyss'] = False # (m); ; +SubDyn['M4N5TDyss'] = False # (m); ; +SubDyn['M4N6TDyss'] = False # (m); ; +SubDyn['M4N7TDyss'] = False # (m); ; +SubDyn['M4N8TDyss'] = False # (m); ; +SubDyn['M4N9TDyss'] = False # (m); ; +SubDyn['M5N1TDyss'] = False # (m); ; +SubDyn['M5N2TDyss'] = False # (m); ; +SubDyn['M5N3TDyss'] = False # (m); ; +SubDyn['M5N4TDyss'] = False # (m); ; +SubDyn['M5N5TDyss'] = False # (m); ; +SubDyn['M5N6TDyss'] = False # (m); ; +SubDyn['M5N7TDyss'] = False # (m); ; +SubDyn['M5N8TDyss'] = False # (m); ; +SubDyn['M5N9TDyss'] = False # (m); ; +SubDyn['M6N1TDyss'] = False # (m); ; +SubDyn['M6N2TDyss'] = False # (m); ; +SubDyn['M6N3TDyss'] = False # (m); ; +SubDyn['M6N4TDyss'] = False # (m); ; +SubDyn['M6N5TDyss'] = False # (m); ; +SubDyn['M6N6TDyss'] = False # (m); ; +SubDyn['M6N7TDyss'] = False # (m); ; +SubDyn['M6N8TDyss'] = False # (m); ; +SubDyn['M6N9TDyss'] = False # (m); ; +SubDyn['M7N1TDyss'] = False # (m); ; +SubDyn['M7N2TDyss'] = False # (m); ; +SubDyn['M7N3TDyss'] = False # (m); ; +SubDyn['M7N4TDyss'] = False # (m); ; +SubDyn['M7N5TDyss'] = False # (m); ; +SubDyn['M7N6TDyss'] = False # (m); ; +SubDyn['M7N7TDyss'] = False # (m); ; +SubDyn['M7N8TDyss'] = False # (m); ; +SubDyn['M7N9TDyss'] = False # (m); ; +SubDyn['M8N1TDyss'] = False # (m); ; +SubDyn['M8N2TDyss'] = False # (m); ; +SubDyn['M8N3TDyss'] = False # (m); ; +SubDyn['M8N4TDyss'] = False # (m); ; +SubDyn['M8N5TDyss'] = False # (m); ; +SubDyn['M8N6TDyss'] = False # (m); ; +SubDyn['M8N7TDyss'] = False # (m); ; +SubDyn['M8N8TDyss'] = False # (m); ; +SubDyn['M8N9TDyss'] = False # (m); ; +SubDyn['M9N1TDyss'] = False # (m); ; +SubDyn['M9N2TDyss'] = False # (m); ; +SubDyn['M9N3TDyss'] = False # (m); ; +SubDyn['M9N4TDyss'] = False # (m); ; +SubDyn['M9N5TDyss'] = False # (m); ; +SubDyn['M9N6TDyss'] = False # (m); ; +SubDyn['M9N7TDyss'] = False # (m); ; +SubDyn['M9N8TDyss'] = False # (m); ; +SubDyn['M9N9TDyss'] = False # (m); ; +SubDyn['M1N1TDzss'] = False # (m); zss component of the displacement at Node Nj of member Mi- SS Reference System; +SubDyn['M1N2TDzss'] = False # (m); ; +SubDyn['M1N3TDzss'] = False # (m); ; +SubDyn['M1N4TDzss'] = False # (m); ; +SubDyn['M1N5TDzss'] = False # (m); ; +SubDyn['M1N6TDzss'] = False # (m); ; +SubDyn['M1N7TDzss'] = False # (m); ; +SubDyn['M1N8TDzss'] = False # (m); ; +SubDyn['M1N9TDzss'] = False # (m); ; +SubDyn['M2N1TDzss'] = False # (m); ; +SubDyn['M2N2TDzss'] = False # (m); ; +SubDyn['M2N3TDzss'] = False # (m); ; +SubDyn['M2N4TDzss'] = False # (m); ; +SubDyn['M2N5TDzss'] = False # (m); ; +SubDyn['M2N6TDzss'] = False # (m); ; +SubDyn['M2N7TDzss'] = False # (m); ; +SubDyn['M2N8TDzss'] = False # (m); ; +SubDyn['M2N9TDzss'] = False # (m); ; +SubDyn['M3N1TDzss'] = False # (m); ; +SubDyn['M3N2TDzss'] = False # (m); ; +SubDyn['M3N3TDzss'] = False # (m); ; +SubDyn['M3N4TDzss'] = False # (m); ; +SubDyn['M3N5TDzss'] = False # (m); ; +SubDyn['M3N6TDzss'] = False # (m); ; +SubDyn['M3N7TDzss'] = False # (m); ; +SubDyn['M3N8TDzss'] = False # (m); ; +SubDyn['M3N9TDzss'] = False # (m); ; +SubDyn['M4N1TDzss'] = False # (m); ; +SubDyn['M4N2TDzss'] = False # (m); ; +SubDyn['M4N3TDzss'] = False # (m); ; +SubDyn['M4N4TDzss'] = False # (m); ; +SubDyn['M4N5TDzss'] = False # (m); ; +SubDyn['M4N6TDzss'] = False # (m); ; +SubDyn['M4N7TDzss'] = False # (m); ; +SubDyn['M4N8TDzss'] = False # (m); ; +SubDyn['M4N9TDzss'] = False # (m); ; +SubDyn['M5N1TDzss'] = False # (m); ; +SubDyn['M5N2TDzss'] = False # (m); ; +SubDyn['M5N3TDzss'] = False # (m); ; +SubDyn['M5N4TDzss'] = False # (m); ; +SubDyn['M5N5TDzss'] = False # (m); ; +SubDyn['M5N6TDzss'] = False # (m); ; +SubDyn['M5N7TDzss'] = False # (m); ; +SubDyn['M5N8TDzss'] = False # (m); ; +SubDyn['M5N9TDzss'] = False # (m); ; +SubDyn['M6N1TDzss'] = False # (m); ; +SubDyn['M6N2TDzss'] = False # (m); ; +SubDyn['M6N3TDzss'] = False # (m); ; +SubDyn['M6N4TDzss'] = False # (m); ; +SubDyn['M6N5TDzss'] = False # (m); ; +SubDyn['M6N6TDzss'] = False # (m); ; +SubDyn['M6N7TDzss'] = False # (m); ; +SubDyn['M6N8TDzss'] = False # (m); ; +SubDyn['M6N9TDzss'] = False # (m); ; +SubDyn['M7N1TDzss'] = False # (m); ; +SubDyn['M7N2TDzss'] = False # (m); ; +SubDyn['M7N3TDzss'] = False # (m); ; +SubDyn['M7N4TDzss'] = False # (m); ; +SubDyn['M7N5TDzss'] = False # (m); ; +SubDyn['M7N6TDzss'] = False # (m); ; +SubDyn['M7N7TDzss'] = False # (m); ; +SubDyn['M7N8TDzss'] = False # (m); ; +SubDyn['M7N9TDzss'] = False # (m); ; +SubDyn['M8N1TDzss'] = False # (m); ; +SubDyn['M8N2TDzss'] = False # (m); ; +SubDyn['M8N3TDzss'] = False # (m); ; +SubDyn['M8N4TDzss'] = False # (m); ; +SubDyn['M8N5TDzss'] = False # (m); ; +SubDyn['M8N6TDzss'] = False # (m); ; +SubDyn['M8N7TDzss'] = False # (m); ; +SubDyn['M8N8TDzss'] = False # (m); ; +SubDyn['M8N9TDzss'] = False # (m); ; +SubDyn['M9N1TDzss'] = False # (m); ; +SubDyn['M9N2TDzss'] = False # (m); ; +SubDyn['M9N3TDzss'] = False # (m); ; +SubDyn['M9N4TDzss'] = False # (m); ; +SubDyn['M9N5TDzss'] = False # (m); ; +SubDyn['M9N6TDzss'] = False # (m); ; +SubDyn['M9N7TDzss'] = False # (m); ; +SubDyn['M9N8TDzss'] = False # (m); ; +SubDyn['M9N9TDzss'] = False # (m); ; +SubDyn['M1N1RDxe'] = False # (rad); xe component of the rotational displacement at Node Nj of member Mi-Element Reference System; +SubDyn['M1N2RDxe'] = False # (rad); ; +SubDyn['M1N3RDxe'] = False # (rad); ; +SubDyn['M1N4RDxe'] = False # (rad); ; +SubDyn['M1N5RDxe'] = False # (rad); ; +SubDyn['M1N6RDxe'] = False # (rad); ; +SubDyn['M1N7RDxe'] = False # (rad); ; +SubDyn['M1N8RDxe'] = False # (rad); ; +SubDyn['M1N9RDxe'] = False # (rad); ; +SubDyn['M2N1RDxe'] = False # (rad); ; +SubDyn['M2N2RDxe'] = False # (rad); ; +SubDyn['M2N3RDxe'] = False # (rad); ; +SubDyn['M2N4RDxe'] = False # (rad); ; +SubDyn['M2N5RDxe'] = False # (rad); ; +SubDyn['M2N6RDxe'] = False # (rad); ; +SubDyn['M2N7RDxe'] = False # (rad); ; +SubDyn['M2N8RDxe'] = False # (rad); ; +SubDyn['M2N9RDxe'] = False # (rad); ; +SubDyn['M3N1RDxe'] = False # (rad); ; +SubDyn['M3N2RDxe'] = False # (rad); ; +SubDyn['M3N3RDxe'] = False # (rad); ; +SubDyn['M3N4RDxe'] = False # (rad); ; +SubDyn['M3N5RDxe'] = False # (rad); ; +SubDyn['M3N6RDxe'] = False # (rad); ; +SubDyn['M3N7RDxe'] = False # (rad); ; +SubDyn['M3N8RDxe'] = False # (rad); ; +SubDyn['M3N9RDxe'] = False # (rad); ; +SubDyn['M4N1RDxe'] = False # (rad); ; +SubDyn['M4N2RDxe'] = False # (rad); ; +SubDyn['M4N3RDxe'] = False # (rad); ; +SubDyn['M4N4RDxe'] = False # (rad); ; +SubDyn['M4N5RDxe'] = False # (rad); ; +SubDyn['M4N6RDxe'] = False # (rad); ; +SubDyn['M4N7RDxe'] = False # (rad); ; +SubDyn['M4N8RDxe'] = False # (rad); ; +SubDyn['M4N9RDxe'] = False # (rad); ; +SubDyn['M5N1RDxe'] = False # (rad); ; +SubDyn['M5N2RDxe'] = False # (rad); ; +SubDyn['M5N3RDxe'] = False # (rad); ; +SubDyn['M5N4RDxe'] = False # (rad); ; +SubDyn['M5N5RDxe'] = False # (rad); ; +SubDyn['M5N6RDxe'] = False # (rad); ; +SubDyn['M5N7RDxe'] = False # (rad); ; +SubDyn['M5N8RDxe'] = False # (rad); ; +SubDyn['M5N9RDxe'] = False # (rad); ; +SubDyn['M6N1RDxe'] = False # (rad); ; +SubDyn['M6N2RDxe'] = False # (rad); ; +SubDyn['M6N3RDxe'] = False # (rad); ; +SubDyn['M6N4RDxe'] = False # (rad); ; +SubDyn['M6N5RDxe'] = False # (rad); ; +SubDyn['M6N6RDxe'] = False # (rad); ; +SubDyn['M6N7RDxe'] = False # (rad); ; +SubDyn['M6N8RDxe'] = False # (rad); ; +SubDyn['M6N9RDxe'] = False # (rad); ; +SubDyn['M7N1RDxe'] = False # (rad); ; +SubDyn['M7N2RDxe'] = False # (rad); ; +SubDyn['M7N3RDxe'] = False # (rad); ; +SubDyn['M7N4RDxe'] = False # (rad); ; +SubDyn['M7N5RDxe'] = False # (rad); ; +SubDyn['M7N6RDxe'] = False # (rad); ; +SubDyn['M7N7RDxe'] = False # (rad); ; +SubDyn['M7N8RDxe'] = False # (rad); ; +SubDyn['M7N9RDxe'] = False # (rad); ; +SubDyn['M8N1RDxe'] = False # (rad); ; +SubDyn['M8N2RDxe'] = False # (rad); ; +SubDyn['M8N3RDxe'] = False # (rad); ; +SubDyn['M8N4RDxe'] = False # (rad); ; +SubDyn['M8N5RDxe'] = False # (rad); ; +SubDyn['M8N6RDxe'] = False # (rad); ; +SubDyn['M8N7RDxe'] = False # (rad); ; +SubDyn['M8N8RDxe'] = False # (rad); ; +SubDyn['M8N9RDxe'] = False # (rad); ; +SubDyn['M9N1RDxe'] = False # (rad); ; +SubDyn['M9N2RDxe'] = False # (rad); ; +SubDyn['M9N3RDxe'] = False # (rad); ; +SubDyn['M9N4RDxe'] = False # (rad); ; +SubDyn['M9N5RDxe'] = False # (rad); ; +SubDyn['M9N6RDxe'] = False # (rad); ; +SubDyn['M9N7RDxe'] = False # (rad); ; +SubDyn['M9N8RDxe'] = False # (rad); ; +SubDyn['M9N9RDxe'] = False # (rad); ; +SubDyn['M1N1RDye'] = False # (rad); ye component of the rotational displacement at Node Nj of member Mi-Element Reference System; +SubDyn['M1N2RDye'] = False # (rad); ; +SubDyn['M1N3RDye'] = False # (rad); ; +SubDyn['M1N4RDye'] = False # (rad); ; +SubDyn['M1N5RDye'] = False # (rad); ; +SubDyn['M1N6RDye'] = False # (rad); ; +SubDyn['M1N7RDye'] = False # (rad); ; +SubDyn['M1N8RDye'] = False # (rad); ; +SubDyn['M1N9RDye'] = False # (rad); ; +SubDyn['M2N1RDye'] = False # (rad); ; +SubDyn['M2N2RDye'] = False # (rad); ; +SubDyn['M2N3RDye'] = False # (rad); ; +SubDyn['M2N4RDye'] = False # (rad); ; +SubDyn['M2N5RDye'] = False # (rad); ; +SubDyn['M2N6RDye'] = False # (rad); ; +SubDyn['M2N7RDye'] = False # (rad); ; +SubDyn['M2N8RDye'] = False # (rad); ; +SubDyn['M2N9RDye'] = False # (rad); ; +SubDyn['M3N1RDye'] = False # (rad); ; +SubDyn['M3N2RDye'] = False # (rad); ; +SubDyn['M3N3RDye'] = False # (rad); ; +SubDyn['M3N4RDye'] = False # (rad); ; +SubDyn['M3N5RDye'] = False # (rad); ; +SubDyn['M3N6RDye'] = False # (rad); ; +SubDyn['M3N7RDye'] = False # (rad); ; +SubDyn['M3N8RDye'] = False # (rad); ; +SubDyn['M3N9RDye'] = False # (rad); ; +SubDyn['M4N1RDye'] = False # (rad); ; +SubDyn['M4N2RDye'] = False # (rad); ; +SubDyn['M4N3RDye'] = False # (rad); ; +SubDyn['M4N4RDye'] = False # (rad); ; +SubDyn['M4N5RDye'] = False # (rad); ; +SubDyn['M4N6RDye'] = False # (rad); ; +SubDyn['M4N7RDye'] = False # (rad); ; +SubDyn['M4N8RDye'] = False # (rad); ; +SubDyn['M4N9RDye'] = False # (rad); ; +SubDyn['M5N1RDye'] = False # (rad); ; +SubDyn['M5N2RDye'] = False # (rad); ; +SubDyn['M5N3RDye'] = False # (rad); ; +SubDyn['M5N4RDye'] = False # (rad); ; +SubDyn['M5N5RDye'] = False # (rad); ; +SubDyn['M5N6RDye'] = False # (rad); ; +SubDyn['M5N7RDye'] = False # (rad); ; +SubDyn['M5N8RDye'] = False # (rad); ; +SubDyn['M5N9RDye'] = False # (rad); ; +SubDyn['M6N1RDye'] = False # (rad); ; +SubDyn['M6N2RDye'] = False # (rad); ; +SubDyn['M6N3RDye'] = False # (rad); ; +SubDyn['M6N4RDye'] = False # (rad); ; +SubDyn['M6N5RDye'] = False # (rad); ; +SubDyn['M6N6RDye'] = False # (rad); ; +SubDyn['M6N7RDye'] = False # (rad); ; +SubDyn['M6N8RDye'] = False # (rad); ; +SubDyn['M6N9RDye'] = False # (rad); ; +SubDyn['M7N1RDye'] = False # (rad); ; +SubDyn['M7N2RDye'] = False # (rad); ; +SubDyn['M7N3RDye'] = False # (rad); ; +SubDyn['M7N4RDye'] = False # (rad); ; +SubDyn['M7N5RDye'] = False # (rad); ; +SubDyn['M7N6RDye'] = False # (rad); ; +SubDyn['M7N7RDye'] = False # (rad); ; +SubDyn['M7N8RDye'] = False # (rad); ; +SubDyn['M7N9RDye'] = False # (rad); ; +SubDyn['M8N1RDye'] = False # (rad); ; +SubDyn['M8N2RDye'] = False # (rad); ; +SubDyn['M8N3RDye'] = False # (rad); ; +SubDyn['M8N4RDye'] = False # (rad); ; +SubDyn['M8N5RDye'] = False # (rad); ; +SubDyn['M8N6RDye'] = False # (rad); ; +SubDyn['M8N7RDye'] = False # (rad); ; +SubDyn['M8N8RDye'] = False # (rad); ; +SubDyn['M8N9RDye'] = False # (rad); ; +SubDyn['M9N1RDye'] = False # (rad); ; +SubDyn['M9N2RDye'] = False # (rad); ; +SubDyn['M9N3RDye'] = False # (rad); ; +SubDyn['M9N4RDye'] = False # (rad); ; +SubDyn['M9N5RDye'] = False # (rad); ; +SubDyn['M9N6RDye'] = False # (rad); ; +SubDyn['M9N7RDye'] = False # (rad); ; +SubDyn['M9N8RDye'] = False # (rad); ; +SubDyn['M9N9RDye'] = False # (rad); ; +SubDyn['M1N1RDze'] = False # (rad); ze component of the rotational displacement at Node Nj of member Mi-Element Reference System; +SubDyn['M1N2RDze'] = False # (rad); ; +SubDyn['M1N3RDze'] = False # (rad); ; +SubDyn['M1N4RDze'] = False # (rad); ; +SubDyn['M1N5RDze'] = False # (rad); ; +SubDyn['M1N6RDze'] = False # (rad); ; +SubDyn['M1N7RDze'] = False # (rad); ; +SubDyn['M1N8RDze'] = False # (rad); ; +SubDyn['M1N9RDze'] = False # (rad); ; +SubDyn['M2N1RDze'] = False # (rad); ; +SubDyn['M2N2RDze'] = False # (rad); ; +SubDyn['M2N3RDze'] = False # (rad); ; +SubDyn['M2N4RDze'] = False # (rad); ; +SubDyn['M2N5RDze'] = False # (rad); ; +SubDyn['M2N6RDze'] = False # (rad); ; +SubDyn['M2N7RDze'] = False # (rad); ; +SubDyn['M2N8RDze'] = False # (rad); ; +SubDyn['M2N9RDze'] = False # (rad); ; +SubDyn['M3N1RDze'] = False # (rad); ; +SubDyn['M3N2RDze'] = False # (rad); ; +SubDyn['M3N3RDze'] = False # (rad); ; +SubDyn['M3N4RDze'] = False # (rad); ; +SubDyn['M3N5RDze'] = False # (rad); ; +SubDyn['M3N6RDze'] = False # (rad); ; +SubDyn['M3N7RDze'] = False # (rad); ; +SubDyn['M3N8RDze'] = False # (rad); ; +SubDyn['M3N9RDze'] = False # (rad); ; +SubDyn['M4N1RDze'] = False # (rad); ; +SubDyn['M4N2RDze'] = False # (rad); ; +SubDyn['M4N3RDze'] = False # (rad); ; +SubDyn['M4N4RDze'] = False # (rad); ; +SubDyn['M4N5RDze'] = False # (rad); ; +SubDyn['M4N6RDze'] = False # (rad); ; +SubDyn['M4N7RDze'] = False # (rad); ; +SubDyn['M4N8RDze'] = False # (rad); ; +SubDyn['M4N9RDze'] = False # (rad); ; +SubDyn['M5N1RDze'] = False # (rad); ; +SubDyn['M5N2RDze'] = False # (rad); ; +SubDyn['M5N3RDze'] = False # (rad); ; +SubDyn['M5N4RDze'] = False # (rad); ; +SubDyn['M5N5RDze'] = False # (rad); ; +SubDyn['M5N6RDze'] = False # (rad); ; +SubDyn['M5N7RDze'] = False # (rad); ; +SubDyn['M5N8RDze'] = False # (rad); ; +SubDyn['M5N9RDze'] = False # (rad); ; +SubDyn['M6N1RDze'] = False # (rad); ; +SubDyn['M6N2RDze'] = False # (rad); ; +SubDyn['M6N3RDze'] = False # (rad); ; +SubDyn['M6N4RDze'] = False # (rad); ; +SubDyn['M6N5RDze'] = False # (rad); ; +SubDyn['M6N6RDze'] = False # (rad); ; +SubDyn['M6N7RDze'] = False # (rad); ; +SubDyn['M6N8RDze'] = False # (rad); ; +SubDyn['M6N9RDze'] = False # (rad); ; +SubDyn['M7N1RDze'] = False # (rad); ; +SubDyn['M7N2RDze'] = False # (rad); ; +SubDyn['M7N3RDze'] = False # (rad); ; +SubDyn['M7N4RDze'] = False # (rad); ; +SubDyn['M7N5RDze'] = False # (rad); ; +SubDyn['M7N6RDze'] = False # (rad); ; +SubDyn['M7N7RDze'] = False # (rad); ; +SubDyn['M7N8RDze'] = False # (rad); ; +SubDyn['M7N9RDze'] = False # (rad); ; +SubDyn['M8N1RDze'] = False # (rad); ; +SubDyn['M8N2RDze'] = False # (rad); ; +SubDyn['M8N3RDze'] = False # (rad); ; +SubDyn['M8N4RDze'] = False # (rad); ; +SubDyn['M8N5RDze'] = False # (rad); ; +SubDyn['M8N6RDze'] = False # (rad); ; +SubDyn['M8N7RDze'] = False # (rad); ; +SubDyn['M8N8RDze'] = False # (rad); ; +SubDyn['M8N9RDze'] = False # (rad); ; +SubDyn['M9N1RDze'] = False # (rad); ; +SubDyn['M9N2RDze'] = False # (rad); ; +SubDyn['M9N3RDze'] = False # (rad); ; +SubDyn['M9N4RDze'] = False # (rad); ; +SubDyn['M9N5RDze'] = False # (rad); ; +SubDyn['M9N6RDze'] = False # (rad); ; +SubDyn['M9N7RDze'] = False # (rad); ; +SubDyn['M9N8RDze'] = False # (rad); ; +SubDyn['M9N9RDze'] = False # (rad); ; + +# Accelerations +SubDyn['M1N1TAxe'] = False # (m/s^2); xe component of the translational acceleration displacement at Node Nj of member Mi-Element Reference System; +SubDyn['M1N2TAxe'] = False # (m/s^2); ; +SubDyn['M1N3TAxe'] = False # (m/s^2); ; +SubDyn['M1N4TAxe'] = False # (m/s^2); ; +SubDyn['M1N5TAxe'] = False # (m/s^2); ; +SubDyn['M1N6TAxe'] = False # (m/s^2); ; +SubDyn['M1N7TAxe'] = False # (m/s^2); ; +SubDyn['M1N8TAxe'] = False # (m/s^2); ; +SubDyn['M1N9TAxe'] = False # (m/s^2); ; +SubDyn['M2N1TAxe'] = False # (m/s^2); ; +SubDyn['M2N2TAxe'] = False # (m/s^2); ; +SubDyn['M2N3TAxe'] = False # (m/s^2); ; +SubDyn['M2N4TAxe'] = False # (m/s^2); ; +SubDyn['M2N5TAxe'] = False # (m/s^2); ; +SubDyn['M2N6TAxe'] = False # (m/s^2); ; +SubDyn['M2N7TAxe'] = False # (m/s^2); ; +SubDyn['M2N8TAxe'] = False # (m/s^2); ; +SubDyn['M2N9TAxe'] = False # (m/s^2); ; +SubDyn['M3N1TAxe'] = False # (m/s^2); ; +SubDyn['M3N2TAxe'] = False # (m/s^2); ; +SubDyn['M3N3TAxe'] = False # (m/s^2); ; +SubDyn['M3N4TAxe'] = False # (m/s^2); ; +SubDyn['M3N5TAxe'] = False # (m/s^2); ; +SubDyn['M3N6TAxe'] = False # (m/s^2); ; +SubDyn['M3N7TAxe'] = False # (m/s^2); ; +SubDyn['M3N8TAxe'] = False # (m/s^2); ; +SubDyn['M3N9TAxe'] = False # (m/s^2); ; +SubDyn['M4N1TAxe'] = False # (m/s^2); ; +SubDyn['M4N2TAxe'] = False # (m/s^2); ; +SubDyn['M4N3TAxe'] = False # (m/s^2); ; +SubDyn['M4N4TAxe'] = False # (m/s^2); ; +SubDyn['M4N5TAxe'] = False # (m/s^2); ; +SubDyn['M4N6TAxe'] = False # (m/s^2); ; +SubDyn['M4N7TAxe'] = False # (m/s^2); ; +SubDyn['M4N8TAxe'] = False # (m/s^2); ; +SubDyn['M4N9TAxe'] = False # (m/s^2); ; +SubDyn['M5N1TAxe'] = False # (m/s^2); ; +SubDyn['M5N2TAxe'] = False # (m/s^2); ; +SubDyn['M5N3TAxe'] = False # (m/s^2); ; +SubDyn['M5N4TAxe'] = False # (m/s^2); ; +SubDyn['M5N5TAxe'] = False # (m/s^2); ; +SubDyn['M5N6TAxe'] = False # (m/s^2); ; +SubDyn['M5N7TAxe'] = False # (m/s^2); ; +SubDyn['M5N8TAxe'] = False # (m/s^2); ; +SubDyn['M5N9TAxe'] = False # (m/s^2); ; +SubDyn['M6N1TAxe'] = False # (m/s^2); ; +SubDyn['M6N2TAxe'] = False # (m/s^2); ; +SubDyn['M6N3TAxe'] = False # (m/s^2); ; +SubDyn['M6N4TAxe'] = False # (m/s^2); ; +SubDyn['M6N5TAxe'] = False # (m/s^2); ; +SubDyn['M6N6TAxe'] = False # (m/s^2); ; +SubDyn['M6N7TAxe'] = False # (m/s^2); ; +SubDyn['M6N8TAxe'] = False # (m/s^2); ; +SubDyn['M6N9TAxe'] = False # (m/s^2); ; +SubDyn['M7N1TAxe'] = False # (m/s^2); ; +SubDyn['M7N2TAxe'] = False # (m/s^2); ; +SubDyn['M7N3TAxe'] = False # (m/s^2); ; +SubDyn['M7N4TAxe'] = False # (m/s^2); ; +SubDyn['M7N5TAxe'] = False # (m/s^2); ; +SubDyn['M7N6TAxe'] = False # (m/s^2); ; +SubDyn['M7N7TAxe'] = False # (m/s^2); ; +SubDyn['M7N8TAxe'] = False # (m/s^2); ; +SubDyn['M7N9TAxe'] = False # (m/s^2); ; +SubDyn['M8N1TAxe'] = False # (m/s^2); ; +SubDyn['M8N2TAxe'] = False # (m/s^2); ; +SubDyn['M8N3TAxe'] = False # (m/s^2); ; +SubDyn['M8N4TAxe'] = False # (m/s^2); ; +SubDyn['M8N5TAxe'] = False # (m/s^2); ; +SubDyn['M8N6TAxe'] = False # (m/s^2); ; +SubDyn['M8N7TAxe'] = False # (m/s^2); ; +SubDyn['M8N8TAxe'] = False # (m/s^2); ; +SubDyn['M8N9TAxe'] = False # (m/s^2); ; +SubDyn['M9N1TAxe'] = False # (m/s^2); ; +SubDyn['M9N2TAxe'] = False # (m/s^2); ; +SubDyn['M9N3TAxe'] = False # (m/s^2); ; +SubDyn['M9N4TAxe'] = False # (m/s^2); ; +SubDyn['M9N5TAxe'] = False # (m/s^2); ; +SubDyn['M9N6TAxe'] = False # (m/s^2); ; +SubDyn['M9N7TAxe'] = False # (m/s^2); ; +SubDyn['M9N8TAxe'] = False # (m/s^2); ; +SubDyn['M9N9TAxe'] = False # (m/s^2); ; +SubDyn['M1N1TAye'] = False # (m/s^2); ye component of the translational acceleration displacement at Node Nj of member Mi-Element Reference System; +SubDyn['M1N2TAye'] = False # (m/s^2); ; +SubDyn['M1N3TAye'] = False # (m/s^2); ; +SubDyn['M1N4TAye'] = False # (m/s^2); ; +SubDyn['M1N5TAye'] = False # (m/s^2); ; +SubDyn['M1N6TAye'] = False # (m/s^2); ; +SubDyn['M1N7TAye'] = False # (m/s^2); ; +SubDyn['M1N8TAye'] = False # (m/s^2); ; +SubDyn['M1N9TAye'] = False # (m/s^2); ; +SubDyn['M2N1TAye'] = False # (m/s^2); ; +SubDyn['M2N2TAye'] = False # (m/s^2); ; +SubDyn['M2N3TAye'] = False # (m/s^2); ; +SubDyn['M2N4TAye'] = False # (m/s^2); ; +SubDyn['M2N5TAye'] = False # (m/s^2); ; +SubDyn['M2N6TAye'] = False # (m/s^2); ; +SubDyn['M2N7TAye'] = False # (m/s^2); ; +SubDyn['M2N8TAye'] = False # (m/s^2); ; +SubDyn['M2N9TAye'] = False # (m/s^2); ; +SubDyn['M3N1TAye'] = False # (m/s^2); ; +SubDyn['M3N2TAye'] = False # (m/s^2); ; +SubDyn['M3N3TAye'] = False # (m/s^2); ; +SubDyn['M3N4TAye'] = False # (m/s^2); ; +SubDyn['M3N5TAye'] = False # (m/s^2); ; +SubDyn['M3N6TAye'] = False # (m/s^2); ; +SubDyn['M3N7TAye'] = False # (m/s^2); ; +SubDyn['M3N8TAye'] = False # (m/s^2); ; +SubDyn['M3N9TAye'] = False # (m/s^2); ; +SubDyn['M4N1TAye'] = False # (m/s^2); ; +SubDyn['M4N2TAye'] = False # (m/s^2); ; +SubDyn['M4N3TAye'] = False # (m/s^2); ; +SubDyn['M4N4TAye'] = False # (m/s^2); ; +SubDyn['M4N5TAye'] = False # (m/s^2); ; +SubDyn['M4N6TAye'] = False # (m/s^2); ; +SubDyn['M4N7TAye'] = False # (m/s^2); ; +SubDyn['M4N8TAye'] = False # (m/s^2); ; +SubDyn['M4N9TAye'] = False # (m/s^2); ; +SubDyn['M5N1TAye'] = False # (m/s^2); ; +SubDyn['M5N2TAye'] = False # (m/s^2); ; +SubDyn['M5N3TAye'] = False # (m/s^2); ; +SubDyn['M5N4TAye'] = False # (m/s^2); ; +SubDyn['M5N5TAye'] = False # (m/s^2); ; +SubDyn['M5N6TAye'] = False # (m/s^2); ; +SubDyn['M5N7TAye'] = False # (m/s^2); ; +SubDyn['M5N8TAye'] = False # (m/s^2); ; +SubDyn['M5N9TAye'] = False # (m/s^2); ; +SubDyn['M6N1TAye'] = False # (m/s^2); ; +SubDyn['M6N2TAye'] = False # (m/s^2); ; +SubDyn['M6N3TAye'] = False # (m/s^2); ; +SubDyn['M6N4TAye'] = False # (m/s^2); ; +SubDyn['M6N5TAye'] = False # (m/s^2); ; +SubDyn['M6N6TAye'] = False # (m/s^2); ; +SubDyn['M6N7TAye'] = False # (m/s^2); ; +SubDyn['M6N8TAye'] = False # (m/s^2); ; +SubDyn['M6N9TAye'] = False # (m/s^2); ; +SubDyn['M7N1TAye'] = False # (m/s^2); ; +SubDyn['M7N2TAye'] = False # (m/s^2); ; +SubDyn['M7N3TAye'] = False # (m/s^2); ; +SubDyn['M7N4TAye'] = False # (m/s^2); ; +SubDyn['M7N5TAye'] = False # (m/s^2); ; +SubDyn['M7N6TAye'] = False # (m/s^2); ; +SubDyn['M7N7TAye'] = False # (m/s^2); ; +SubDyn['M7N8TAye'] = False # (m/s^2); ; +SubDyn['M7N9TAye'] = False # (m/s^2); ; +SubDyn['M8N1TAye'] = False # (m/s^2); ; +SubDyn['M8N2TAye'] = False # (m/s^2); ; +SubDyn['M8N3TAye'] = False # (m/s^2); ; +SubDyn['M8N4TAye'] = False # (m/s^2); ; +SubDyn['M8N5TAye'] = False # (m/s^2); ; +SubDyn['M8N6TAye'] = False # (m/s^2); ; +SubDyn['M8N7TAye'] = False # (m/s^2); ; +SubDyn['M8N8TAye'] = False # (m/s^2); ; +SubDyn['M8N9TAye'] = False # (m/s^2); ; +SubDyn['M9N1TAye'] = False # (m/s^2); ; +SubDyn['M9N2TAye'] = False # (m/s^2); ; +SubDyn['M9N3TAye'] = False # (m/s^2); ; +SubDyn['M9N4TAye'] = False # (m/s^2); ; +SubDyn['M9N5TAye'] = False # (m/s^2); ; +SubDyn['M9N6TAye'] = False # (m/s^2); ; +SubDyn['M9N7TAye'] = False # (m/s^2); ; +SubDyn['M9N8TAye'] = False # (m/s^2); ; +SubDyn['M9N9TAye'] = False # (m/s^2); ; +SubDyn['M1N1TAze'] = False # (m/s^2); ze component of the translational acceleration displacement at Node Nj of member Mi-Element Reference System; +SubDyn['M1N2TAze'] = False # (m/s^2); ; +SubDyn['M1N3TAze'] = False # (m/s^2); ; +SubDyn['M1N4TAze'] = False # (m/s^2); ; +SubDyn['M1N5TAze'] = False # (m/s^2); ; +SubDyn['M1N6TAze'] = False # (m/s^2); ; +SubDyn['M1N7TAze'] = False # (m/s^2); ; +SubDyn['M1N8TAze'] = False # (m/s^2); ; +SubDyn['M1N9TAze'] = False # (m/s^2); ; +SubDyn['M2N1TAze'] = False # (m/s^2); ; +SubDyn['M2N2TAze'] = False # (m/s^2); ; +SubDyn['M2N3TAze'] = False # (m/s^2); ; +SubDyn['M2N4TAze'] = False # (m/s^2); ; +SubDyn['M2N5TAze'] = False # (m/s^2); ; +SubDyn['M2N6TAze'] = False # (m/s^2); ; +SubDyn['M2N7TAze'] = False # (m/s^2); ; +SubDyn['M2N8TAze'] = False # (m/s^2); ; +SubDyn['M2N9TAze'] = False # (m/s^2); ; +SubDyn['M3N1TAze'] = False # (m/s^2); ; +SubDyn['M3N2TAze'] = False # (m/s^2); ; +SubDyn['M3N3TAze'] = False # (m/s^2); ; +SubDyn['M3N4TAze'] = False # (m/s^2); ; +SubDyn['M3N5TAze'] = False # (m/s^2); ; +SubDyn['M3N6TAze'] = False # (m/s^2); ; +SubDyn['M3N7TAze'] = False # (m/s^2); ; +SubDyn['M3N8TAze'] = False # (m/s^2); ; +SubDyn['M3N9TAze'] = False # (m/s^2); ; +SubDyn['M4N1TAze'] = False # (m/s^2); ; +SubDyn['M4N2TAze'] = False # (m/s^2); ; +SubDyn['M4N3TAze'] = False # (m/s^2); ; +SubDyn['M4N4TAze'] = False # (m/s^2); ; +SubDyn['M4N5TAze'] = False # (m/s^2); ; +SubDyn['M4N6TAze'] = False # (m/s^2); ; +SubDyn['M4N7TAze'] = False # (m/s^2); ; +SubDyn['M4N8TAze'] = False # (m/s^2); ; +SubDyn['M4N9TAze'] = False # (m/s^2); ; +SubDyn['M5N1TAze'] = False # (m/s^2); ; +SubDyn['M5N2TAze'] = False # (m/s^2); ; +SubDyn['M5N3TAze'] = False # (m/s^2); ; +SubDyn['M5N4TAze'] = False # (m/s^2); ; +SubDyn['M5N5TAze'] = False # (m/s^2); ; +SubDyn['M5N6TAze'] = False # (m/s^2); ; +SubDyn['M5N7TAze'] = False # (m/s^2); ; +SubDyn['M5N8TAze'] = False # (m/s^2); ; +SubDyn['M5N9TAze'] = False # (m/s^2); ; +SubDyn['M6N1TAze'] = False # (m/s^2); ; +SubDyn['M6N2TAze'] = False # (m/s^2); ; +SubDyn['M6N3TAze'] = False # (m/s^2); ; +SubDyn['M6N4TAze'] = False # (m/s^2); ; +SubDyn['M6N5TAze'] = False # (m/s^2); ; +SubDyn['M6N6TAze'] = False # (m/s^2); ; +SubDyn['M6N7TAze'] = False # (m/s^2); ; +SubDyn['M6N8TAze'] = False # (m/s^2); ; +SubDyn['M6N9TAze'] = False # (m/s^2); ; +SubDyn['M7N1TAze'] = False # (m/s^2); ; +SubDyn['M7N2TAze'] = False # (m/s^2); ; +SubDyn['M7N3TAze'] = False # (m/s^2); ; +SubDyn['M7N4TAze'] = False # (m/s^2); ; +SubDyn['M7N5TAze'] = False # (m/s^2); ; +SubDyn['M7N6TAze'] = False # (m/s^2); ; +SubDyn['M7N7TAze'] = False # (m/s^2); ; +SubDyn['M7N8TAze'] = False # (m/s^2); ; +SubDyn['M7N9TAze'] = False # (m/s^2); ; +SubDyn['M8N1TAze'] = False # (m/s^2); ; +SubDyn['M8N2TAze'] = False # (m/s^2); ; +SubDyn['M8N3TAze'] = False # (m/s^2); ; +SubDyn['M8N4TAze'] = False # (m/s^2); ; +SubDyn['M8N5TAze'] = False # (m/s^2); ; +SubDyn['M8N6TAze'] = False # (m/s^2); ; +SubDyn['M8N7TAze'] = False # (m/s^2); ; +SubDyn['M8N8TAze'] = False # (m/s^2); ; +SubDyn['M8N9TAze'] = False # (m/s^2); ; +SubDyn['M9N1TAze'] = False # (m/s^2); ; +SubDyn['M9N2TAze'] = False # (m/s^2); ; +SubDyn['M9N3TAze'] = False # (m/s^2); ; +SubDyn['M9N4TAze'] = False # (m/s^2); ; +SubDyn['M9N5TAze'] = False # (m/s^2); ; +SubDyn['M9N6TAze'] = False # (m/s^2); ; +SubDyn['M9N7TAze'] = False # (m/s^2); ; +SubDyn['M9N8TAze'] = False # (m/s^2); ; +SubDyn['M9N9TAze'] = False # (m/s^2); ; +SubDyn['M1N1RAxe'] = False # (rad/s^2); xe component of the rotational acceleration displacement at Node Nj of member Mi-Element Reference System; +SubDyn['M1N2RAxe'] = False # (rad/s^2); ; +SubDyn['M1N3RAxe'] = False # (rad/s^2); ; +SubDyn['M1N4RAxe'] = False # (rad/s^2); ; +SubDyn['M1N5RAxe'] = False # (rad/s^2); ; +SubDyn['M1N6RAxe'] = False # (rad/s^2); ; +SubDyn['M1N7RAxe'] = False # (rad/s^2); ; +SubDyn['M1N8RAxe'] = False # (rad/s^2); ; +SubDyn['M1N9RAxe'] = False # (rad/s^2); ; +SubDyn['M2N1RAxe'] = False # (rad/s^2); ; +SubDyn['M2N2RAxe'] = False # (rad/s^2); ; +SubDyn['M2N3RAxe'] = False # (rad/s^2); ; +SubDyn['M2N4RAxe'] = False # (rad/s^2); ; +SubDyn['M2N5RAxe'] = False # (rad/s^2); ; +SubDyn['M2N6RAxe'] = False # (rad/s^2); ; +SubDyn['M2N7RAxe'] = False # (rad/s^2); ; +SubDyn['M2N8RAxe'] = False # (rad/s^2); ; +SubDyn['M2N9RAxe'] = False # (rad/s^2); ; +SubDyn['M3N1RAxe'] = False # (rad/s^2); ; +SubDyn['M3N2RAxe'] = False # (rad/s^2); ; +SubDyn['M3N3RAxe'] = False # (rad/s^2); ; +SubDyn['M3N4RAxe'] = False # (rad/s^2); ; +SubDyn['M3N5RAxe'] = False # (rad/s^2); ; +SubDyn['M3N6RAxe'] = False # (rad/s^2); ; +SubDyn['M3N7RAxe'] = False # (rad/s^2); ; +SubDyn['M3N8RAxe'] = False # (rad/s^2); ; +SubDyn['M3N9RAxe'] = False # (rad/s^2); ; +SubDyn['M4N1RAxe'] = False # (rad/s^2); ; +SubDyn['M4N2RAxe'] = False # (rad/s^2); ; +SubDyn['M4N3RAxe'] = False # (rad/s^2); ; +SubDyn['M4N4RAxe'] = False # (rad/s^2); ; +SubDyn['M4N5RAxe'] = False # (rad/s^2); ; +SubDyn['M4N6RAxe'] = False # (rad/s^2); ; +SubDyn['M4N7RAxe'] = False # (rad/s^2); ; +SubDyn['M4N8RAxe'] = False # (rad/s^2); ; +SubDyn['M4N9RAxe'] = False # (rad/s^2); ; +SubDyn['M5N1RAxe'] = False # (rad/s^2); ; +SubDyn['M5N2RAxe'] = False # (rad/s^2); ; +SubDyn['M5N3RAxe'] = False # (rad/s^2); ; +SubDyn['M5N4RAxe'] = False # (rad/s^2); ; +SubDyn['M5N5RAxe'] = False # (rad/s^2); ; +SubDyn['M5N6RAxe'] = False # (rad/s^2); ; +SubDyn['M5N7RAxe'] = False # (rad/s^2); ; +SubDyn['M5N8RAxe'] = False # (rad/s^2); ; +SubDyn['M5N9RAxe'] = False # (rad/s^2); ; +SubDyn['M6N1RAxe'] = False # (rad/s^2); ; +SubDyn['M6N2RAxe'] = False # (rad/s^2); ; +SubDyn['M6N3RAxe'] = False # (rad/s^2); ; +SubDyn['M6N4RAxe'] = False # (rad/s^2); ; +SubDyn['M6N5RAxe'] = False # (rad/s^2); ; +SubDyn['M6N6RAxe'] = False # (rad/s^2); ; +SubDyn['M6N7RAxe'] = False # (rad/s^2); ; +SubDyn['M6N8RAxe'] = False # (rad/s^2); ; +SubDyn['M6N9RAxe'] = False # (rad/s^2); ; +SubDyn['M7N1RAxe'] = False # (rad/s^2); ; +SubDyn['M7N2RAxe'] = False # (rad/s^2); ; +SubDyn['M7N3RAxe'] = False # (rad/s^2); ; +SubDyn['M7N4RAxe'] = False # (rad/s^2); ; +SubDyn['M7N5RAxe'] = False # (rad/s^2); ; +SubDyn['M7N6RAxe'] = False # (rad/s^2); ; +SubDyn['M7N7RAxe'] = False # (rad/s^2); ; +SubDyn['M7N8RAxe'] = False # (rad/s^2); ; +SubDyn['M7N9RAxe'] = False # (rad/s^2); ; +SubDyn['M8N1RAxe'] = False # (rad/s^2); ; +SubDyn['M8N2RAxe'] = False # (rad/s^2); ; +SubDyn['M8N3RAxe'] = False # (rad/s^2); ; +SubDyn['M8N4RAxe'] = False # (rad/s^2); ; +SubDyn['M8N5RAxe'] = False # (rad/s^2); ; +SubDyn['M8N6RAxe'] = False # (rad/s^2); ; +SubDyn['M8N7RAxe'] = False # (rad/s^2); ; +SubDyn['M8N8RAxe'] = False # (rad/s^2); ; +SubDyn['M8N9RAxe'] = False # (rad/s^2); ; +SubDyn['M9N1RAxe'] = False # (rad/s^2); ; +SubDyn['M9N2RAxe'] = False # (rad/s^2); ; +SubDyn['M9N3RAxe'] = False # (rad/s^2); ; +SubDyn['M9N4RAxe'] = False # (rad/s^2); ; +SubDyn['M9N5RAxe'] = False # (rad/s^2); ; +SubDyn['M9N6RAxe'] = False # (rad/s^2); ; +SubDyn['M9N7RAxe'] = False # (rad/s^2); ; +SubDyn['M9N8RAxe'] = False # (rad/s^2); ; +SubDyn['M9N9RAxe'] = False # (rad/s^2); ; +SubDyn['M1N1RAye'] = False # (rad/s^2); ye component of the rotational acceleration displacement at Node Nj of member Mi-Element Reference System; +SubDyn['M1N2RAye'] = False # (rad/s^2); ; +SubDyn['M1N3RAye'] = False # (rad/s^2); ; +SubDyn['M1N4RAye'] = False # (rad/s^2); ; +SubDyn['M1N5RAye'] = False # (rad/s^2); ; +SubDyn['M1N6RAye'] = False # (rad/s^2); ; +SubDyn['M1N7RAye'] = False # (rad/s^2); ; +SubDyn['M1N8RAye'] = False # (rad/s^2); ; +SubDyn['M1N9RAye'] = False # (rad/s^2); ; +SubDyn['M2N1RAye'] = False # (rad/s^2); ; +SubDyn['M2N2RAye'] = False # (rad/s^2); ; +SubDyn['M2N3RAye'] = False # (rad/s^2); ; +SubDyn['M2N4RAye'] = False # (rad/s^2); ; +SubDyn['M2N5RAye'] = False # (rad/s^2); ; +SubDyn['M2N6RAye'] = False # (rad/s^2); ; +SubDyn['M2N7RAye'] = False # (rad/s^2); ; +SubDyn['M2N8RAye'] = False # (rad/s^2); ; +SubDyn['M2N9RAye'] = False # (rad/s^2); ; +SubDyn['M3N1RAye'] = False # (rad/s^2); ; +SubDyn['M3N2RAye'] = False # (rad/s^2); ; +SubDyn['M3N3RAye'] = False # (rad/s^2); ; +SubDyn['M3N4RAye'] = False # (rad/s^2); ; +SubDyn['M3N5RAye'] = False # (rad/s^2); ; +SubDyn['M3N6RAye'] = False # (rad/s^2); ; +SubDyn['M3N7RAye'] = False # (rad/s^2); ; +SubDyn['M3N8RAye'] = False # (rad/s^2); ; +SubDyn['M3N9RAye'] = False # (rad/s^2); ; +SubDyn['M4N1RAye'] = False # (rad/s^2); ; +SubDyn['M4N2RAye'] = False # (rad/s^2); ; +SubDyn['M4N3RAye'] = False # (rad/s^2); ; +SubDyn['M4N4RAye'] = False # (rad/s^2); ; +SubDyn['M4N5RAye'] = False # (rad/s^2); ; +SubDyn['M4N6RAye'] = False # (rad/s^2); ; +SubDyn['M4N7RAye'] = False # (rad/s^2); ; +SubDyn['M4N8RAye'] = False # (rad/s^2); ; +SubDyn['M4N9RAye'] = False # (rad/s^2); ; +SubDyn['M5N1RAye'] = False # (rad/s^2); ; +SubDyn['M5N2RAye'] = False # (rad/s^2); ; +SubDyn['M5N3RAye'] = False # (rad/s^2); ; +SubDyn['M5N4RAye'] = False # (rad/s^2); ; +SubDyn['M5N5RAye'] = False # (rad/s^2); ; +SubDyn['M5N6RAye'] = False # (rad/s^2); ; +SubDyn['M5N7RAye'] = False # (rad/s^2); ; +SubDyn['M5N8RAye'] = False # (rad/s^2); ; +SubDyn['M5N9RAye'] = False # (rad/s^2); ; +SubDyn['M6N1RAye'] = False # (rad/s^2); ; +SubDyn['M6N2RAye'] = False # (rad/s^2); ; +SubDyn['M6N3RAye'] = False # (rad/s^2); ; +SubDyn['M6N4RAye'] = False # (rad/s^2); ; +SubDyn['M6N5RAye'] = False # (rad/s^2); ; +SubDyn['M6N6RAye'] = False # (rad/s^2); ; +SubDyn['M6N7RAye'] = False # (rad/s^2); ; +SubDyn['M6N8RAye'] = False # (rad/s^2); ; +SubDyn['M6N9RAye'] = False # (rad/s^2); ; +SubDyn['M7N1RAye'] = False # (rad/s^2); ; +SubDyn['M7N2RAye'] = False # (rad/s^2); ; +SubDyn['M7N3RAye'] = False # (rad/s^2); ; +SubDyn['M7N4RAye'] = False # (rad/s^2); ; +SubDyn['M7N5RAye'] = False # (rad/s^2); ; +SubDyn['M7N6RAye'] = False # (rad/s^2); ; +SubDyn['M7N7RAye'] = False # (rad/s^2); ; +SubDyn['M7N8RAye'] = False # (rad/s^2); ; +SubDyn['M7N9RAye'] = False # (rad/s^2); ; +SubDyn['M8N1RAye'] = False # (rad/s^2); ; +SubDyn['M8N2RAye'] = False # (rad/s^2); ; +SubDyn['M8N3RAye'] = False # (rad/s^2); ; +SubDyn['M8N4RAye'] = False # (rad/s^2); ; +SubDyn['M8N5RAye'] = False # (rad/s^2); ; +SubDyn['M8N6RAye'] = False # (rad/s^2); ; +SubDyn['M8N7RAye'] = False # (rad/s^2); ; +SubDyn['M8N8RAye'] = False # (rad/s^2); ; +SubDyn['M8N9RAye'] = False # (rad/s^2); ; +SubDyn['M9N1RAye'] = False # (rad/s^2); ; +SubDyn['M9N2RAye'] = False # (rad/s^2); ; +SubDyn['M9N3RAye'] = False # (rad/s^2); ; +SubDyn['M9N4RAye'] = False # (rad/s^2); ; +SubDyn['M9N5RAye'] = False # (rad/s^2); ; +SubDyn['M9N6RAye'] = False # (rad/s^2); ; +SubDyn['M9N7RAye'] = False # (rad/s^2); ; +SubDyn['M9N8RAye'] = False # (rad/s^2); ; +SubDyn['M9N9RAye'] = False # (rad/s^2); ; +SubDyn['M1N1RAze'] = False # (rad/s^2); ze component of the rotational acceleration displacement at Node Nj of member Mi-Element Reference System; +SubDyn['M1N2RAze'] = False # (rad/s^2); ; +SubDyn['M1N3RAze'] = False # (rad/s^2); ; +SubDyn['M1N4RAze'] = False # (rad/s^2); ; +SubDyn['M1N5RAze'] = False # (rad/s^2); ; +SubDyn['M1N6RAze'] = False # (rad/s^2); ; +SubDyn['M1N7RAze'] = False # (rad/s^2); ; +SubDyn['M1N8RAze'] = False # (rad/s^2); ; +SubDyn['M1N9RAze'] = False # (rad/s^2); ; +SubDyn['M2N1RAze'] = False # (rad/s^2); ; +SubDyn['M2N2RAze'] = False # (rad/s^2); ; +SubDyn['M2N3RAze'] = False # (rad/s^2); ; +SubDyn['M2N4RAze'] = False # (rad/s^2); ; +SubDyn['M2N5RAze'] = False # (rad/s^2); ; +SubDyn['M2N6RAze'] = False # (rad/s^2); ; +SubDyn['M2N7RAze'] = False # (rad/s^2); ; +SubDyn['M2N8RAze'] = False # (rad/s^2); ; +SubDyn['M2N9RAze'] = False # (rad/s^2); ; +SubDyn['M3N1RAze'] = False # (rad/s^2); ; +SubDyn['M3N2RAze'] = False # (rad/s^2); ; +SubDyn['M3N3RAze'] = False # (rad/s^2); ; +SubDyn['M3N4RAze'] = False # (rad/s^2); ; +SubDyn['M3N5RAze'] = False # (rad/s^2); ; +SubDyn['M3N6RAze'] = False # (rad/s^2); ; +SubDyn['M3N7RAze'] = False # (rad/s^2); ; +SubDyn['M3N8RAze'] = False # (rad/s^2); ; +SubDyn['M3N9RAze'] = False # (rad/s^2); ; +SubDyn['M4N1RAze'] = False # (rad/s^2); ; +SubDyn['M4N2RAze'] = False # (rad/s^2); ; +SubDyn['M4N3RAze'] = False # (rad/s^2); ; +SubDyn['M4N4RAze'] = False # (rad/s^2); ; +SubDyn['M4N5RAze'] = False # (rad/s^2); ; +SubDyn['M4N6RAze'] = False # (rad/s^2); ; +SubDyn['M4N7RAze'] = False # (rad/s^2); ; +SubDyn['M4N8RAze'] = False # (rad/s^2); ; +SubDyn['M4N9RAze'] = False # (rad/s^2); ; +SubDyn['M5N1RAze'] = False # (rad/s^2); ; +SubDyn['M5N2RAze'] = False # (rad/s^2); ; +SubDyn['M5N3RAze'] = False # (rad/s^2); ; +SubDyn['M5N4RAze'] = False # (rad/s^2); ; +SubDyn['M5N5RAze'] = False # (rad/s^2); ; +SubDyn['M5N6RAze'] = False # (rad/s^2); ; +SubDyn['M5N7RAze'] = False # (rad/s^2); ; +SubDyn['M5N8RAze'] = False # (rad/s^2); ; +SubDyn['M5N9RAze'] = False # (rad/s^2); ; +SubDyn['M6N1RAze'] = False # (rad/s^2); ; +SubDyn['M6N2RAze'] = False # (rad/s^2); ; +SubDyn['M6N3RAze'] = False # (rad/s^2); ; +SubDyn['M6N4RAze'] = False # (rad/s^2); ; +SubDyn['M6N5RAze'] = False # (rad/s^2); ; +SubDyn['M6N6RAze'] = False # (rad/s^2); ; +SubDyn['M6N7RAze'] = False # (rad/s^2); ; +SubDyn['M6N8RAze'] = False # (rad/s^2); ; +SubDyn['M6N9RAze'] = False # (rad/s^2); ; +SubDyn['M7N1RAze'] = False # (rad/s^2); ; +SubDyn['M7N2RAze'] = False # (rad/s^2); ; +SubDyn['M7N3RAze'] = False # (rad/s^2); ; +SubDyn['M7N4RAze'] = False # (rad/s^2); ; +SubDyn['M7N5RAze'] = False # (rad/s^2); ; +SubDyn['M7N6RAze'] = False # (rad/s^2); ; +SubDyn['M7N7RAze'] = False # (rad/s^2); ; +SubDyn['M7N8RAze'] = False # (rad/s^2); ; +SubDyn['M7N9RAze'] = False # (rad/s^2); ; +SubDyn['M8N1RAze'] = False # (rad/s^2); ; +SubDyn['M8N2RAze'] = False # (rad/s^2); ; +SubDyn['M8N3RAze'] = False # (rad/s^2); ; +SubDyn['M8N4RAze'] = False # (rad/s^2); ; +SubDyn['M8N5RAze'] = False # (rad/s^2); ; +SubDyn['M8N6RAze'] = False # (rad/s^2); ; +SubDyn['M8N7RAze'] = False # (rad/s^2); ; +SubDyn['M8N8RAze'] = False # (rad/s^2); ; +SubDyn['M8N9RAze'] = False # (rad/s^2); ; +SubDyn['M9N1RAze'] = False # (rad/s^2); ; +SubDyn['M9N2RAze'] = False # (rad/s^2); ; +SubDyn['M9N3RAze'] = False # (rad/s^2); ; +SubDyn['M9N4RAze'] = False # (rad/s^2); ; +SubDyn['M9N5RAze'] = False # (rad/s^2); ; +SubDyn['M9N6RAze'] = False # (rad/s^2); ; +SubDyn['M9N7RAze'] = False # (rad/s^2); ; +SubDyn['M9N8RAze'] = False # (rad/s^2); ; +SubDyn['M9N9RAze'] = False # (rad/s^2); ; + +# Reactions +SubDyn['ReactFXss'] = False # (N); Base Reaction Force along Xss; +SubDyn['ReactFYss'] = False # (N); Base Reaction Force along Yss; +SubDyn['ReactFZss'] = False # (N); Base Reaction Force along Zss; +SubDyn['ReactMXss'] = False # (Nm); Base Reaction Moment along Xss; +SubDyn['ReactMYss'] = False # (Nm); Base Reaction Moment along Yss; +SubDyn['ReactMZss'] = False # (Nm); Base Reaction Moment along Zss; +SubDyn['IntfFXss'] = False # (N); Interface Reaction Force along Xss; +SubDyn['IntfFYss'] = False # (N); Interface Reaction Force along Yss; +SubDyn['IntfFZss'] = False # (N); Interface Reaction Force along Zss; +SubDyn['IntfMXss'] = False # (Nm); Interface Reaction Moment along Xss; +SubDyn['IntfMYss'] = False # (Nm); Interface Reaction Moment along Yss; +SubDyn['IntfMZss'] = False # (Nm); Interface Reaction Moment along Zss; + +# Interface Deflections +SubDyn['IntfTDXss'] = False # (m); Interface Deflection along Xss; +SubDyn['IntfTDYss'] = False # (m); Interface Deflection along Yss; +SubDyn['IntfTDZss'] = False # (m); Interface Deflection along Zss; +SubDyn['IntfRDXss'] = False # (rad); Interface Angular Deflection along Xss; +SubDyn['IntfRDYss'] = False # (rad); Interface Angular Deflection along Yss; +SubDyn['IntfRDZss'] = False # (rad); Interface Angular Deflection along Zss; + +# Interface Accelerations +SubDyn['IntfTAXss'] = False # (m/s^2); Interface Acceleration along Xss; +SubDyn['IntfTAYss'] = False # (m/s^2); Interface Acceleration along Yss; +SubDyn['IntfTAZss'] = False # (m/s^2); Interface Acceleration along Zss; +SubDyn['IntfRAXss'] = False # (rad/s^2); Interface Angular Acceleration along Xss; +SubDyn['IntfRAYss'] = False # (rad/s^2); Interface Angular Acceleration along Yss; +SubDyn['IntfRAZss'] = False # (rad/s^2); Interface Angular Acceleration along Zss; + +# Modal Parameters +SubDyn['SSqm01'] = False # (--); Modal Parameter (01-99) values; +SubDyn['SSqm02'] = False # (--); ; +SubDyn['SSqm03'] = False # (--); ; +SubDyn['SSqm04'] = False # (--); ; +SubDyn['SSqm05'] = False # (--); ; +SubDyn['SSqm06'] = False # (--); ; +SubDyn['SSqm07'] = False # (--); ; +SubDyn['SSqm08'] = False # (--); ; +SubDyn['SSqm09'] = False # (--); ; +SubDyn['SSqm10'] = False # (--); ; +SubDyn['SSqm11'] = False # (--); ; +SubDyn['SSqm12'] = False # (--); ; +SubDyn['SSqm13'] = False # (--); ; +SubDyn['SSqm14'] = False # (--); ; +SubDyn['SSqm15'] = False # (--); ; +SubDyn['SSqm16'] = False # (--); ; +SubDyn['SSqm17'] = False # (--); ; +SubDyn['SSqm18'] = False # (--); ; +SubDyn['SSqm19'] = False # (--); ; +SubDyn['SSqm20'] = False # (--); ; +SubDyn['SSqm21'] = False # (--); ; +SubDyn['SSqm22'] = False # (--); ; +SubDyn['SSqm23'] = False # (--); ; +SubDyn['SSqm24'] = False # (--); ; +SubDyn['SSqm25'] = False # (--); ; +SubDyn['SSqm26'] = False # (--); ; +SubDyn['SSqm27'] = False # (--); ; +SubDyn['SSqm28'] = False # (--); ; +SubDyn['SSqm29'] = False # (--); ; +SubDyn['SSqm30'] = False # (--); ; +SubDyn['SSqm31'] = False # (--); ; +SubDyn['SSqm32'] = False # (--); ; +SubDyn['SSqm33'] = False # (--); ; +SubDyn['SSqm34'] = False # (--); ; +SubDyn['SSqm35'] = False # (--); ; +SubDyn['SSqm36'] = False # (--); ; +SubDyn['SSqm37'] = False # (--); ; +SubDyn['SSqm38'] = False # (--); ; +SubDyn['SSqm39'] = False # (--); ; +SubDyn['SSqm40'] = False # (--); ; +SubDyn['SSqm41'] = False # (--); ; +SubDyn['SSqm42'] = False # (--); ; +SubDyn['SSqm43'] = False # (--); ; +SubDyn['SSqm44'] = False # (--); ; +SubDyn['SSqm45'] = False # (--); ; +SubDyn['SSqm46'] = False # (--); ; +SubDyn['SSqm47'] = False # (--); ; +SubDyn['SSqm48'] = False # (--); ; +SubDyn['SSqm49'] = False # (--); ; +SubDyn['SSqm50'] = False # (--); ; +SubDyn['SSqm51'] = False # (--); ; +SubDyn['SSqm52'] = False # (--); ; +SubDyn['SSqm53'] = False # (--); ; +SubDyn['SSqm54'] = False # (--); ; +SubDyn['SSqm55'] = False # (--); ; +SubDyn['SSqm56'] = False # (--); ; +SubDyn['SSqm57'] = False # (--); ; +SubDyn['SSqm58'] = False # (--); ; +SubDyn['SSqm59'] = False # (--); ; +SubDyn['SSqm60'] = False # (--); ; +SubDyn['SSqm61'] = False # (--); ; +SubDyn['SSqm62'] = False # (--); ; +SubDyn['SSqm63'] = False # (--); ; +SubDyn['SSqm64'] = False # (--); ; +SubDyn['SSqm65'] = False # (--); ; +SubDyn['SSqm66'] = False # (--); ; +SubDyn['SSqm67'] = False # (--); ; +SubDyn['SSqm68'] = False # (--); ; +SubDyn['SSqm69'] = False # (--); ; +SubDyn['SSqm70'] = False # (--); ; +SubDyn['SSqm71'] = False # (--); ; +SubDyn['SSqm72'] = False # (--); ; +SubDyn['SSqm73'] = False # (--); ; +SubDyn['SSqm74'] = False # (--); ; +SubDyn['SSqm75'] = False # (--); ; +SubDyn['SSqm76'] = False # (--); ; +SubDyn['SSqm77'] = False # (--); ; +SubDyn['SSqm78'] = False # (--); ; +SubDyn['SSqm79'] = False # (--); ; +SubDyn['SSqm80'] = False # (--); ; +SubDyn['SSqm81'] = False # (--); ; +SubDyn['SSqm82'] = False # (--); ; +SubDyn['SSqm83'] = False # (--); ; +SubDyn['SSqm84'] = False # (--); ; +SubDyn['SSqm85'] = False # (--); ; +SubDyn['SSqm86'] = False # (--); ; +SubDyn['SSqm87'] = False # (--); ; +SubDyn['SSqm88'] = False # (--); ; +SubDyn['SSqm89'] = False # (--); ; +SubDyn['SSqm90'] = False # (--); ; +SubDyn['SSqm91'] = False # (--); ; +SubDyn['SSqm92'] = False # (--); ; +SubDyn['SSqm93'] = False # (--); ; +SubDyn['SSqm94'] = False # (--); ; +SubDyn['SSqm95'] = False # (--); ; +SubDyn['SSqm96'] = False # (--); ; +SubDyn['SSqm97'] = False # (--); ; +SubDyn['SSqm98'] = False # (--); ; +SubDyn['SSqm99'] = False # (--); ; +SubDyn['SSqmd01'] = False # (1/s); Modal Parameter (01-99) time derivatives; +SubDyn['SSqmd02'] = False # (1/s); ; +SubDyn['SSqmd03'] = False # (1/s); ; +SubDyn['SSqmd04'] = False # (1/s); ; +SubDyn['SSqmd05'] = False # (1/s); ; +SubDyn['SSqmd06'] = False # (1/s); ; +SubDyn['SSqmd07'] = False # (1/s); ; +SubDyn['SSqmd08'] = False # (1/s); ; +SubDyn['SSqmd09'] = False # (1/s); ; +SubDyn['SSqmd10'] = False # (1/s); ; +SubDyn['SSqmd11'] = False # (1/s); ; +SubDyn['SSqmd12'] = False # (1/s); ; +SubDyn['SSqmd13'] = False # (1/s); ; +SubDyn['SSqmd14'] = False # (1/s); ; +SubDyn['SSqmd15'] = False # (1/s); ; +SubDyn['SSqmd16'] = False # (1/s); ; +SubDyn['SSqmd17'] = False # (1/s); ; +SubDyn['SSqmd18'] = False # (1/s); ; +SubDyn['SSqmd19'] = False # (1/s); ; +SubDyn['SSqmd20'] = False # (1/s); ; +SubDyn['SSqmd21'] = False # (1/s); ; +SubDyn['SSqmd22'] = False # (1/s); ; +SubDyn['SSqmd23'] = False # (1/s); ; +SubDyn['SSqmd24'] = False # (1/s); ; +SubDyn['SSqmd25'] = False # (1/s); ; +SubDyn['SSqmd26'] = False # (1/s); ; +SubDyn['SSqmd27'] = False # (1/s); ; +SubDyn['SSqmd28'] = False # (1/s); ; +SubDyn['SSqmd29'] = False # (1/s); ; +SubDyn['SSqmd30'] = False # (1/s); ; +SubDyn['SSqmd31'] = False # (1/s); ; +SubDyn['SSqmd32'] = False # (1/s); ; +SubDyn['SSqmd33'] = False # (1/s); ; +SubDyn['SSqmd34'] = False # (1/s); ; +SubDyn['SSqmd35'] = False # (1/s); ; +SubDyn['SSqmd36'] = False # (1/s); ; +SubDyn['SSqmd37'] = False # (1/s); ; +SubDyn['SSqmd38'] = False # (1/s); ; +SubDyn['SSqmd39'] = False # (1/s); ; +SubDyn['SSqmd40'] = False # (1/s); ; +SubDyn['SSqmd41'] = False # (1/s); ; +SubDyn['SSqmd42'] = False # (1/s); ; +SubDyn['SSqmd43'] = False # (1/s); ; +SubDyn['SSqmd44'] = False # (1/s); ; +SubDyn['SSqmd45'] = False # (1/s); ; +SubDyn['SSqmd46'] = False # (1/s); ; +SubDyn['SSqmd47'] = False # (1/s); ; +SubDyn['SSqmd48'] = False # (1/s); ; +SubDyn['SSqmd49'] = False # (1/s); ; +SubDyn['SSqmd50'] = False # (1/s); ; +SubDyn['SSqmd51'] = False # (1/s); ; +SubDyn['SSqmd52'] = False # (1/s); ; +SubDyn['SSqmd53'] = False # (1/s); ; +SubDyn['SSqmd54'] = False # (1/s); ; +SubDyn['SSqmd55'] = False # (1/s); ; +SubDyn['SSqmd56'] = False # (1/s); ; +SubDyn['SSqmd57'] = False # (1/s); ; +SubDyn['SSqmd58'] = False # (1/s); ; +SubDyn['SSqmd59'] = False # (1/s); ; +SubDyn['SSqmd60'] = False # (1/s); ; +SubDyn['SSqmd61'] = False # (1/s); ; +SubDyn['SSqmd62'] = False # (1/s); ; +SubDyn['SSqmd63'] = False # (1/s); ; +SubDyn['SSqmd64'] = False # (1/s); ; +SubDyn['SSqmd65'] = False # (1/s); ; +SubDyn['SSqmd66'] = False # (1/s); ; +SubDyn['SSqmd67'] = False # (1/s); ; +SubDyn['SSqmd68'] = False # (1/s); ; +SubDyn['SSqmd69'] = False # (1/s); ; +SubDyn['SSqmd70'] = False # (1/s); ; +SubDyn['SSqmd71'] = False # (1/s); ; +SubDyn['SSqmd72'] = False # (1/s); ; +SubDyn['SSqmd73'] = False # (1/s); ; +SubDyn['SSqmd74'] = False # (1/s); ; +SubDyn['SSqmd75'] = False # (1/s); ; +SubDyn['SSqmd76'] = False # (1/s); ; +SubDyn['SSqmd77'] = False # (1/s); ; +SubDyn['SSqmd78'] = False # (1/s); ; +SubDyn['SSqmd79'] = False # (1/s); ; +SubDyn['SSqmd80'] = False # (1/s); ; +SubDyn['SSqmd81'] = False # (1/s); ; +SubDyn['SSqmd82'] = False # (1/s); ; +SubDyn['SSqmd83'] = False # (1/s); ; +SubDyn['SSqmd84'] = False # (1/s); ; +SubDyn['SSqmd85'] = False # (1/s); ; +SubDyn['SSqmd86'] = False # (1/s); ; +SubDyn['SSqmd87'] = False # (1/s); ; +SubDyn['SSqmd88'] = False # (1/s); ; +SubDyn['SSqmd89'] = False # (1/s); ; +SubDyn['SSqmd90'] = False # (1/s); ; +SubDyn['SSqmd91'] = False # (1/s); ; +SubDyn['SSqmd92'] = False # (1/s); ; +SubDyn['SSqmd93'] = False # (1/s); ; +SubDyn['SSqmd94'] = False # (1/s); ; +SubDyn['SSqmd95'] = False # (1/s); ; +SubDyn['SSqmd96'] = False # (1/s); ; +SubDyn['SSqmd97'] = False # (1/s); ; +SubDyn['SSqmd98'] = False # (1/s); ; +SubDyn['SSqmd99'] = False # (1/s); ; +SubDyn['SSqmdd01'] = False # (1/s^2); Modal Parameter (01-99) 2nd time derivatives; +SubDyn['SSqmdd02'] = False # (1/s^2); ; +SubDyn['SSqmdd03'] = False # (1/s^2); ; +SubDyn['SSqmdd04'] = False # (1/s^2); ; +SubDyn['SSqmdd05'] = False # (1/s^2); ; +SubDyn['SSqmdd06'] = False # (1/s^2); ; +SubDyn['SSqmdd07'] = False # (1/s^2); ; +SubDyn['SSqmdd08'] = False # (1/s^2); ; +SubDyn['SSqmdd09'] = False # (1/s^2); ; +SubDyn['SSqmdd10'] = False # (1/s^2); ; +SubDyn['SSqmdd11'] = False # (1/s^2); ; +SubDyn['SSqmdd12'] = False # (1/s^2); ; +SubDyn['SSqmdd13'] = False # (1/s^2); ; +SubDyn['SSqmdd14'] = False # (1/s^2); ; +SubDyn['SSqmdd15'] = False # (1/s^2); ; +SubDyn['SSqmdd16'] = False # (1/s^2); ; +SubDyn['SSqmdd17'] = False # (1/s^2); ; +SubDyn['SSqmdd18'] = False # (1/s^2); ; +SubDyn['SSqmdd19'] = False # (1/s^2); ; +SubDyn['SSqmdd20'] = False # (1/s^2); ; +SubDyn['SSqmdd21'] = False # (1/s^2); ; +SubDyn['SSqmdd22'] = False # (1/s^2); ; +SubDyn['SSqmdd23'] = False # (1/s^2); ; +SubDyn['SSqmdd24'] = False # (1/s^2); ; +SubDyn['SSqmdd25'] = False # (1/s^2); ; +SubDyn['SSqmdd26'] = False # (1/s^2); ; +SubDyn['SSqmdd27'] = False # (1/s^2); ; +SubDyn['SSqmdd28'] = False # (1/s^2); ; +SubDyn['SSqmdd29'] = False # (1/s^2); ; +SubDyn['SSqmdd30'] = False # (1/s^2); ; +SubDyn['SSqmdd31'] = False # (1/s^2); ; +SubDyn['SSqmdd32'] = False # (1/s^2); ; +SubDyn['SSqmdd33'] = False # (1/s^2); ; +SubDyn['SSqmdd34'] = False # (1/s^2); ; +SubDyn['SSqmdd35'] = False # (1/s^2); ; +SubDyn['SSqmdd36'] = False # (1/s^2); ; +SubDyn['SSqmdd37'] = False # (1/s^2); ; +SubDyn['SSqmdd38'] = False # (1/s^2); ; +SubDyn['SSqmdd39'] = False # (1/s^2); ; +SubDyn['SSqmdd40'] = False # (1/s^2); ; +SubDyn['SSqmdd41'] = False # (1/s^2); ; +SubDyn['SSqmdd42'] = False # (1/s^2); ; +SubDyn['SSqmdd43'] = False # (1/s^2); ; +SubDyn['SSqmdd44'] = False # (1/s^2); ; +SubDyn['SSqmdd45'] = False # (1/s^2); ; +SubDyn['SSqmdd46'] = False # (1/s^2); ; +SubDyn['SSqmdd47'] = False # (1/s^2); ; +SubDyn['SSqmdd48'] = False # (1/s^2); ; +SubDyn['SSqmdd49'] = False # (1/s^2); ; +SubDyn['SSqmdd50'] = False # (1/s^2); ; +SubDyn['SSqmdd51'] = False # (1/s^2); ; +SubDyn['SSqmdd52'] = False # (1/s^2); ; +SubDyn['SSqmdd53'] = False # (1/s^2); ; +SubDyn['SSqmdd54'] = False # (1/s^2); ; +SubDyn['SSqmdd55'] = False # (1/s^2); ; +SubDyn['SSqmdd56'] = False # (1/s^2); ; +SubDyn['SSqmdd57'] = False # (1/s^2); ; +SubDyn['SSqmdd58'] = False # (1/s^2); ; +SubDyn['SSqmdd59'] = False # (1/s^2); ; +SubDyn['SSqmdd60'] = False # (1/s^2); ; +SubDyn['SSqmdd61'] = False # (1/s^2); ; +SubDyn['SSqmdd62'] = False # (1/s^2); ; +SubDyn['SSqmdd63'] = False # (1/s^2); ; +SubDyn['SSqmdd64'] = False # (1/s^2); ; +SubDyn['SSqmdd65'] = False # (1/s^2); ; +SubDyn['SSqmdd66'] = False # (1/s^2); ; +SubDyn['SSqmdd67'] = False # (1/s^2); ; +SubDyn['SSqmdd68'] = False # (1/s^2); ; +SubDyn['SSqmdd69'] = False # (1/s^2); ; +SubDyn['SSqmdd70'] = False # (1/s^2); ; +SubDyn['SSqmdd71'] = False # (1/s^2); ; +SubDyn['SSqmdd72'] = False # (1/s^2); ; +SubDyn['SSqmdd73'] = False # (1/s^2); ; +SubDyn['SSqmdd74'] = False # (1/s^2); ; +SubDyn['SSqmdd75'] = False # (1/s^2); ; +SubDyn['SSqmdd76'] = False # (1/s^2); ; +SubDyn['SSqmdd77'] = False # (1/s^2); ; +SubDyn['SSqmdd78'] = False # (1/s^2); ; +SubDyn['SSqmdd79'] = False # (1/s^2); ; +SubDyn['SSqmdd80'] = False # (1/s^2); ; +SubDyn['SSqmdd81'] = False # (1/s^2); ; +SubDyn['SSqmdd82'] = False # (1/s^2); ; +SubDyn['SSqmdd83'] = False # (1/s^2); ; +SubDyn['SSqmdd84'] = False # (1/s^2); ; +SubDyn['SSqmdd85'] = False # (1/s^2); ; +SubDyn['SSqmdd86'] = False # (1/s^2); ; +SubDyn['SSqmdd87'] = False # (1/s^2); ; +SubDyn['SSqmdd88'] = False # (1/s^2); ; +SubDyn['SSqmdd89'] = False # (1/s^2); ; +SubDyn['SSqmdd90'] = False # (1/s^2); ; +SubDyn['SSqmdd91'] = False # (1/s^2); ; +SubDyn['SSqmdd92'] = False # (1/s^2); ; +SubDyn['SSqmdd93'] = False # (1/s^2); ; +SubDyn['SSqmdd94'] = False # (1/s^2); ; +SubDyn['SSqmdd95'] = False # (1/s^2); ; +SubDyn['SSqmdd96'] = False # (1/s^2); ; +SubDyn['SSqmdd97'] = False # (1/s^2); ; +SubDyn['SSqmdd98'] = False # (1/s^2); ; +SubDyn['SSqmdd99'] = False # (1/s^2); ; + +""" MoorDyn """ +# THIS IS NOT A COMPLETE LIST! +# the "flexible naming system" discussed on page 7-8 of the documentation is not included +# http://www.matt-hall.ca/files/MoorDyn-Users-Guide-2017-08-16.pdf + +# also assuming that like other OpenFAST variables, it is limited to 9 output locations per veriable, i.e. FairTen1-FairTen9 + +MoorDyn = {} +MoorDyn['FairTen1'] = False # (); ; +MoorDyn['FairTen2'] = False # (); ; +MoorDyn['FairTen3'] = False # (); ; +MoorDyn['FairTen4'] = False # (); ; +MoorDyn['FairTen5'] = False # (); ; +MoorDyn['FairTen6'] = False # (); ; +MoorDyn['FairTen7'] = False # (); ; +MoorDyn['FairTen8'] = False # (); ; +MoorDyn['FairTen9'] = False # (); ; +MoorDyn['AnchTen1'] = False # (); ; +MoorDyn['AnchTen2'] = False # (); ; +MoorDyn['AnchTen3'] = False # (); ; +MoorDyn['AnchTen4'] = False # (); ; +MoorDyn['AnchTen5'] = False # (); ; +MoorDyn['AnchTen6'] = False # (); ; +MoorDyn['AnchTen7'] = False # (); ; +MoorDyn['AnchTen8'] = False # (); ; +MoorDyn['AnchTen9'] = False # (); ; + +""" ElastoDyn_Nodes """ +ElastoDyn_Nodes = {} + +# Local Span Motions +ElastoDyn_Nodes['ALx'] = False # (m/s^2); local flapwise acceleration (absolute) of node; Directed along the local xb-axis +ElastoDyn_Nodes['Ax'] = False # (m/s^2); local flapwise acceleration (absolute) of node; Directed along the local xb-axis +ElastoDyn_Nodes['ALy'] = False # (m/s^2); local flapwise acceleration (absolute) of node; Directed along the local yb-axis +ElastoDyn_Nodes['Ay'] = False # (m/s^2); local flapwise acceleration (absolute) of node; Directed along the local yb-axis +ElastoDyn_Nodes['ALz'] = False # (m/s^2); local flapwise acceleration (absolute) of node; Directed along the local zb-axis +ElastoDyn_Nodes['Az'] = False # (m/s^2); local flapwise acceleration (absolute) of node; Directed along the local zb-axis +ElastoDyn_Nodes['TDx'] = False # (m); local flapwise (translational) deflection (relative to the undeflected position) of node; Directed along the xb-axis +ElastoDyn_Nodes['UxB'] = False # (m); local flapwise (translational) deflection (relative to the undeflected position) of node; Directed along the xb-axis +ElastoDyn_Nodes['TDy'] = False # (m); local edgewise (translational) deflection (relative to the undeflected position) of node; Directed along the yb-axis +ElastoDyn_Nodes['UyB'] = False # (m); local edgewise (translational) deflection (relative to the undeflected position) of node; Directed along the yb-axis +ElastoDyn_Nodes['TDz'] = False # (m); local axial (translational) deflection (relative to the undeflected position) of node; Directed along the zb-axis +ElastoDyn_Nodes['UzB'] = False # (m); local axial (translational) deflection (relative to the undeflected position) of node; Directed along the zb-axis +ElastoDyn_Nodes['RDx'] = False # (deg); Local rotational displacement about x-axis (relative to undeflected); About the local xb-axis +ElastoDyn_Nodes['Rx'] = False # (deg); Local rotational displacement about x-axis (relative to undeflected); About the local xb-axis +ElastoDyn_Nodes['RDy'] = False # (deg); Local rotational displacement about y-axis (relative to undeflected); About the local yb-axis +ElastoDyn_Nodes['Ry'] = False # (deg); Local rotational displacement about y-axis (relative to undeflected); About the local yb-axis +ElastoDyn_Nodes['RDz'] = False # (deg); Local rotational displacement about z-axis (relative to undeflected); About the local zb-axis +ElastoDyn_Nodes['Rz'] = False # (deg); Local rotational displacement about z-axis (relative to undeflected); About the local zb-axis + +# Local Span Loads +ElastoDyn_Nodes['MLx'] = False # (kN-m); local edgewise moment at node; About the local xb-axis +ElastoDyn_Nodes['Mx'] = False # (kN-m); local edgewise moment at node; About the local xb-axis +ElastoDyn_Nodes['MLy'] = False # (kN-m); local flapwise moment at node; About the local yb-axis +ElastoDyn_Nodes['My'] = False # (kN-m); local flapwise moment at node; About the local yb-axis +ElastoDyn_Nodes['MLz'] = False # (kN-m); local pitching moment at node; About the local zb-axis +ElastoDyn_Nodes['MLzNT'] = False # (kN-m); local pitching moment at node; About the local zb-axis +ElastoDyn_Nodes['MzL'] = False # (kN-m); local pitching moment at node; About the local zb-axis +ElastoDyn_Nodes['Mz'] = False # (kN-m); local pitching moment at node; About the local zb-axis +ElastoDyn_Nodes['FLx'] = False # (kN); local flapwise shear force at node; Directed along the local xb-axis +ElastoDyn_Nodes['Fx'] = False # (kN); local flapwise shear force at node; Directed along the local xb-axis +ElastoDyn_Nodes['FLy'] = False # (kN); local edgewise shear force at node; Directed along the local yb-axis +ElastoDyn_Nodes['Fy'] = False # (kN); local edgewise shear force at node; Directed along the local yb-axis +ElastoDyn_Nodes['FLz'] = False # (kN); local axial force at node; Directed along the local zb-axis +ElastoDyn_Nodes['FLzNT'] = False # (kN); local axial force at node; Directed along the local zb-axis +ElastoDyn_Nodes['FzL'] = False # (kN); local axial force at node; Directed along the local zb-axis +ElastoDyn_Nodes['Fz'] = False # (kN); local axial force at node; Directed along the local zb-axis +ElastoDyn_Nodes['MLxNT'] = False # (kN-m); Edgewise moment in local coordinate system (initial structural twist removed); About the local xb-axis +ElastoDyn_Nodes['MxL'] = False # (kN-m); Edgewise moment in local coordinate system (initial structural twist removed); About the local xb-axis +ElastoDyn_Nodes['MlyNT'] = False # (kN-m); Flapwise shear moment in local coordinate system (initial structural twist removed); About the local yb-axis +ElastoDyn_Nodes['MyL'] = False # (kN-m); Flapwise shear moment in local coordinate system (initial structural twist removed); About the local yb-axis +ElastoDyn_Nodes['FLxNT'] = False # (kN); Flapwise shear force in local coordinate system (initial structural twist removed); Directed along the local xb-axis +ElastoDyn_Nodes['FxL'] = False # (kN); Flapwise shear force in local coordinate system (initial structural twist removed); Directed along the local xb-axis +ElastoDyn_Nodes['FlyNT'] = False # (kN); Edgewise shear force in local coordinate system (initial structural twist removed); Directed along the local yb-axis +ElastoDyn_Nodes['FyL'] = False # (kN); Edgewise shear force in local coordinate system (initial structural twist removed); Directed along the local yb-axis + + +""" BeamDyn_Nodes """ +BeamDyn_Nodes = {} + +# Sectional Loads +BeamDyn_Nodes['FxL'] = False # (N); Sectional force resultants at each node expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn_Nodes['FyL'] = False # (N); Sectional force resultants at each node expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn_Nodes['FzL'] = False # (N); Sectional force resultants at each node expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn_Nodes['MxL'] = False # (N-m); Sectional moment resultants at each node expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn_Nodes['MyL'] = False # (N-m); Sectional moment resultants at each node expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn_Nodes['MzL'] = False # (N-m); Sectional moment resultants at each node expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn_Nodes['Fxr'] = False # (N); Sectional force resultants at each node expressed in r; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn_Nodes['Fyr'] = False # (N); Sectional force resultants at each node expressed in r; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn_Nodes['Fzr'] = False # (N); Sectional force resultants at each node expressed in r; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn_Nodes['Mxr'] = False # (N-m); Sectional moment resultants at each node expressed in r; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn_Nodes['Myr'] = False # (N-m); Sectional moment resultants at each node expressed in r; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn_Nodes['Mzr'] = False # (N-m); Sectional moment resultants at each node expressed in r; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system + +# Sectional Motions +BeamDyn_Nodes['TDxr'] = False # (m); Sectional translational deflection (relative to the undeflected position) at each node expressed in r; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn_Nodes['TDyr'] = False # (m); Sectional translational deflection (relative to the undeflected position) at each node expressed in r; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn_Nodes['TDzr'] = False # (m); Sectional translational deflection (relative to the undeflected position) at each node expressed in r; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn_Nodes['RDxr'] = False # (-); Sectional angular/rotational deflection Wiener-Milenkovic parameter (relative to the undeflected orientation) at each node expressed in r; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn_Nodes['RDyr'] = False # (-); Sectional angular/rotational deflection Wiener-Milenkovic parameter (relative to the undeflected orientation) at each node expressed in r; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn_Nodes['RDzr'] = False # (-); Sectional angular/rotational deflection Wiener-Milenkovic parameter (relative to the undeflected orientation) at each node expressed in r; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn_Nodes['AbsXg'] = False # (m); Node position in X (global coordinate) ; g: the global inertial frame coordinate system; when coupled to FAST, this is equivalent to FAST s global inertial frame (i) coordinate system +BeamDyn_Nodes['AbsYg'] = False # (m); Node position in Y (global coordinate) ; g: the global inertial frame coordinate system; when coupled to FAST, this is equivalent to FAST s global inertial frame (i) coordinate system +BeamDyn_Nodes['AbsZg'] = False # (m); Node position in Z (global coordinate) ; g: the global inertial frame coordinate system; when coupled to FAST, this is equivalent to FAST s global inertial frame (i) coordinate system +BeamDyn_Nodes['AbsXr'] = False # (m); Node position in X (relative to root) ; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn_Nodes['AbsYr'] = False # (m); Node position in Y (relative to root) ; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn_Nodes['AbsZr'] = False # (m); Node position in Z (relative to root) ; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn_Nodes['TVxg'] = False # (m/s); Sectional translational velocities (absolute); g: the global inertial frame coordinate system; when coupled to FAST, this is equivalent to FAST s global inertial frame (i) coordinate system +BeamDyn_Nodes['TVyg'] = False # (m/s); Sectional translational velocities (absolute); g: the global inertial frame coordinate system; when coupled to FAST, this is equivalent to FAST s global inertial frame (i) coordinate system +BeamDyn_Nodes['TVzg'] = False # (m/s); Sectional translational velocities (absolute); g: the global inertial frame coordinate system; when coupled to FAST, this is equivalent to FAST s global inertial frame (i) coordinate system +BeamDyn_Nodes['TVxl'] = False # (m/s); Sectional translational velocities (absolute); l: a floating coordinate system local to the deflected beam +BeamDyn_Nodes['TVyl'] = False # (m/s); Sectional translational velocities (absolute); l: a floating coordinate system local to the deflected beam +BeamDyn_Nodes['TVzl'] = False # (m/s); Sectional translational velocities (absolute); l: a floating coordinate system local to the deflected beam +BeamDyn_Nodes['TVxr'] = False # (m/s); Sectional translational velocities (absolute); r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn_Nodes['TVyr'] = False # (m/s); Sectional translational velocities (absolute); r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn_Nodes['TVzr'] = False # (m/s); Sectional translational velocities (absolute); r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn_Nodes['RVxg'] = False # (deg/s); Sectional angular/rotational velocities (absolute); g: the global inertial frame coordinate system; when coupled to FAST, this is equivalent to FAST s global inertial frame (i) coordinate system +BeamDyn_Nodes['RVyg'] = False # (deg/s); Sectional angular/rotational velocities (absolute); g: the global inertial frame coordinate system; when coupled to FAST, this is equivalent to FAST s global inertial frame (i) coordinate system +BeamDyn_Nodes['RVzg'] = False # (deg/s); Sectional angular/rotational velocities (absolute); g: the global inertial frame coordinate system; when coupled to FAST, this is equivalent to FAST s global inertial frame (i) coordinate system +BeamDyn_Nodes['RVxl'] = False # (deg/s); Sectional angular/rotational velocities (absolute); l: a floating coordinate system local to the deflected beam +BeamDyn_Nodes['RVyl'] = False # (deg/s); Sectional angular/rotational velocities (absolute); l: a floating coordinate system local to the deflected beam +BeamDyn_Nodes['RVzl'] = False # (deg/s); Sectional angular/rotational velocities (absolute); l: a floating coordinate system local to the deflected beam +BeamDyn_Nodes['RVxr'] = False # (deg/s); Sectional angular/rotational velocities (absolute); r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn_Nodes['RVyr'] = False # (deg/s); Sectional angular/rotational velocities (absolute); r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn_Nodes['RVzr'] = False # (deg/s); Sectional angular/rotational velocities (absolute); r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn_Nodes['TAxl'] = False # (m/s^2); Sectional angular/rotational velocities (absolute); l: a floating coordinate system local to the deflected beam +BeamDyn_Nodes['TAyl'] = False # (m/s^2); Sectional angular/rotational velocities (absolute); l: a floating coordinate system local to the deflected beam +BeamDyn_Nodes['TAzl'] = False # (m/s^2); Sectional angular/rotational velocities (absolute); l: a floating coordinate system local to the deflected beam +BeamDyn_Nodes['TAxr'] = False # (m/s^2); Sectional angular/rotational velocities (absolute); r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn_Nodes['TAyr'] = False # (m/s^2); Sectional angular/rotational velocities (absolute); r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn_Nodes['TAzr'] = False # (m/s^2); Sectional angular/rotational velocities (absolute); r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn_Nodes['RAxl'] = False # (deg/s^2); Sectional angular/rotational velocities (absolute); l: a floating coordinate system local to the deflected beam +BeamDyn_Nodes['RAyl'] = False # (deg/s^2); Sectional angular/rotational velocities (absolute); l: a floating coordinate system local to the deflected beam +BeamDyn_Nodes['RAzl'] = False # (deg/s^2); Sectional angular/rotational velocities (absolute); l: a floating coordinate system local to the deflected beam +BeamDyn_Nodes['RAxr'] = False # (deg/s^2); Sectional angular/rotational velocities (absolute); r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn_Nodes['RAyr'] = False # (deg/s^2); Sectional angular/rotational velocities (absolute); r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn_Nodes['RAzr'] = False # (deg/s^2); Sectional angular/rotational velocities (absolute); r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system + +# Applied Loads +BeamDyn_Nodes['PFxL'] = False # (N); Applied point forces at each node expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn_Nodes['PFyL'] = False # (N); Applied point forces at each node expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn_Nodes['PFzL'] = False # (N); Applied point forces at each node expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn_Nodes['PMxL'] = False # (N-m); Applied point moments at each node expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn_Nodes['PMyL'] = False # (N-m); Applied point moments at each node expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn_Nodes['PMzL'] = False # (N-m); Applied point moments at each node expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn_Nodes['DFxL'] = False # (N/m); Applied distributed forces at each node expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn_Nodes['DFyL'] = False # (N/m); Applied distributed forces at each node expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn_Nodes['DFzL'] = False # (N/m); Applied distributed forces at each node expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn_Nodes['DMxL'] = False # (N-m/m); Applied distributed moments at each node expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn_Nodes['DMyL'] = False # (N-m/m); Applied distributed moments at each node expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn_Nodes['DMzL'] = False # (N-m/m); Applied distributed moments at each node expressed in l; l: a floating coordinate system local to the deflected beam +BeamDyn_Nodes['DFxR'] = False # (N/m); Applied distributed forces at each node expressed in r; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn_Nodes['DFyR'] = False # (N/m); Applied distributed forces at each node expressed in r; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn_Nodes['DFzR'] = False # (N/m); Applied distributed forces at each node expressed in r; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn_Nodes['DMxR'] = False # (N-m/m); Applied distributed forces at each node expressed in r; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn_Nodes['DMyR'] = False # (N-m/m); Applied distributed forces at each node expressed in r; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn_Nodes['DMzR'] = False # (N-m/m); Applied distributed forces at each node expressed in r; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system + +# Sectional Partial Loads (debugging) +BeamDyn_Nodes['FFbxl'] = False # (N); Gyroscopic force x ; l: a floating coordinate system local to the deflected beam +BeamDyn_Nodes['FFbyl'] = False # (N); Gyroscopic force y ; l: a floating coordinate system local to the deflected beam +BeamDyn_Nodes['FFbzl'] = False # (N); Gyroscopic force z ; l: a floating coordinate system local to the deflected beam +BeamDyn_Nodes['FFbxr'] = False # (N); Gyroscopic force x ; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn_Nodes['FFbyr'] = False # (N); Gyroscopic force y ; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn_Nodes['FFbzr'] = False # (N); Gyroscopic force z ; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn_Nodes['MFbxl'] = False # (N-m); Gyroscopic moment about x ; l: a floating coordinate system local to the deflected beam +BeamDyn_Nodes['MFbyl'] = False # (N-m); Gyroscopic moment about y ; l: a floating coordinate system local to the deflected beam +BeamDyn_Nodes['MFbzl'] = False # (N-m); Gyroscopic moment about z ; l: a floating coordinate system local to the deflected beam +BeamDyn_Nodes['MFbxr'] = False # (N-m); Gyroscopic moment about x ; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn_Nodes['MFbyr'] = False # (N-m); Gyroscopic moment about y ; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn_Nodes['MFbzr'] = False # (N-m); Gyroscopic moment about z ; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn_Nodes['FFcxl'] = False # (N); Elastic restoring force Fc x ; l: a floating coordinate system local to the deflected beam +BeamDyn_Nodes['FFcyl'] = False # (N); Elastic restoring force Fc y ; l: a floating coordinate system local to the deflected beam +BeamDyn_Nodes['FFczl'] = False # (N); Elastic restoring force Fc z ; l: a floating coordinate system local to the deflected beam +BeamDyn_Nodes['FFcxr'] = False # (N); Elastic restoring force Fc x ; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn_Nodes['FFcyr'] = False # (N); Elastic restoring force Fc y ; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn_Nodes['FFczr'] = False # (N); Elastic restoring force Fc z ; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn_Nodes['MFcxl'] = False # (N-m); Elastic restoring moment Fc about x ; l: a floating coordinate system local to the deflected beam +BeamDyn_Nodes['MFcyl'] = False # (N-m); Elastic restoring moment Fc about y ; l: a floating coordinate system local to the deflected beam +BeamDyn_Nodes['MFczl'] = False # (N-m); Elastic restoring moment Fc about z ; l: a floating coordinate system local to the deflected beam +BeamDyn_Nodes['MFcxr'] = False # (N-m); Elastic restoring moment Fc about x ; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn_Nodes['MFcyr'] = False # (N-m); Elastic restoring moment Fc about y ; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn_Nodes['MFczr'] = False # (N-m); Elastic restoring moment Fc about z ; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn_Nodes['FFdxl'] = False # (N); Elastic restoring force Fd x ; l: a floating coordinate system local to the deflected beam +BeamDyn_Nodes['FFdyl'] = False # (N); Elastic restoring force Fd y ; l: a floating coordinate system local to the deflected beam +BeamDyn_Nodes['FFdzl'] = False # (N); Elastic restoring force Fd z ; l: a floating coordinate system local to the deflected beam +BeamDyn_Nodes['FFdxr'] = False # (N); Elastic restoring force Fd x ; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn_Nodes['FFdyr'] = False # (N); Elastic restoring force Fd y ; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn_Nodes['FFdzr'] = False # (N); Elastic restoring force Fd z ; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn_Nodes['MFdxl'] = False # (N-m); Elastic restoring moment Fd about x ; l: a floating coordinate system local to the deflected beam +BeamDyn_Nodes['MFdyl'] = False # (N-m); Elastic restoring moment Fd about y ; l: a floating coordinate system local to the deflected beam +BeamDyn_Nodes['MFdzl'] = False # (N-m); Elastic restoring moment Fd about z ; l: a floating coordinate system local to the deflected beam +BeamDyn_Nodes['MFdxr'] = False # (N-m); Elastic restoring moment Fd about x ; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn_Nodes['MFdyr'] = False # (N-m); Elastic restoring moment Fd about y ; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn_Nodes['MFdzr'] = False # (N-m); Elastic restoring moment Fd about z ; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn_Nodes['FFgxl'] = False # (N); Gravity force x ; l: a floating coordinate system local to the deflected beam +BeamDyn_Nodes['FFgyl'] = False # (N); Gravity force y ; l: a floating coordinate system local to the deflected beam +BeamDyn_Nodes['FFgzl'] = False # (N); Gravity force z ; l: a floating coordinate system local to the deflected beam +BeamDyn_Nodes['FFgxr'] = False # (N); Gravity force x ; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn_Nodes['FFgyr'] = False # (N); Gravity force y ; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn_Nodes['FFgzr'] = False # (N); Gravity force z ; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn_Nodes['MFgxl'] = False # (N-m); Gravity moment about x ; l: a floating coordinate system local to the deflected beam +BeamDyn_Nodes['MFgyl'] = False # (N-m); Gravity moment about y ; l: a floating coordinate system local to the deflected beam +BeamDyn_Nodes['MFgzl'] = False # (N-m); Gravity moment about z ; l: a floating coordinate system local to the deflected beam +BeamDyn_Nodes['MFgxr'] = False # (N-m); Gravity moment about x ; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn_Nodes['MFgyr'] = False # (N-m); Gravity moment about y ; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn_Nodes['MFgzr'] = False # (N-m); Gravity moment about z ; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn_Nodes['FFixl'] = False # (N); Inertial force x ; l: a floating coordinate system local to the deflected beam +BeamDyn_Nodes['FFiyl'] = False # (N); Inertial force y ; l: a floating coordinate system local to the deflected beam +BeamDyn_Nodes['FFizl'] = False # (N); Inertial force z ; l: a floating coordinate system local to the deflected beam +BeamDyn_Nodes['FFixr'] = False # (N); Inertial force x ; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn_Nodes['FFiyr'] = False # (N); Inertial force y ; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn_Nodes['FFizr'] = False # (N); Inertial force z ; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn_Nodes['MFixl'] = False # (N-m); Inertial moment about x ; l: a floating coordinate system local to the deflected beam +BeamDyn_Nodes['MFiyl'] = False # (N-m); Inertial moment about y ; l: a floating coordinate system local to the deflected beam +BeamDyn_Nodes['MFizl'] = False # (N-m); Inertial moment about z ; l: a floating coordinate system local to the deflected beam +BeamDyn_Nodes['MFixr'] = False # (N-m); Inertial moment about x ; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn_Nodes['MFiyr'] = False # (N-m); Inertial moment about y ; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system +BeamDyn_Nodes['MFizr'] = False # (N-m); Inertial moment about z ; r: a floating reference coordinate system fixed to the root of the moving beam; when coupled to FAST for blades, this is equivalent to the IEC blade (b) coordinate system + + +""" AeroDyn_Nodes """ +AeroDyn_Nodes = {} + +# Blade +AeroDyn_Nodes['VUndx'] = False # (m/s); x-component of undisturbed wind velocity at each node; local blade coordinate system +AeroDyn_Nodes['VUndy'] = False # (m/s); y-component of undisturbed wind velocity at each node; local blade coordinate system +AeroDyn_Nodes['VUndz'] = False # (m/s); z-component of undisturbed wind velocity at each node; local blade coordinate system +AeroDyn_Nodes['Vundxi'] = False # (m/s); x-component of undisturbed wind velocity at each node; inertial/global coordinate system +AeroDyn_Nodes['Vundyi'] = False # (m/s); y-component of undisturbed wind velocity at each node; inertial/global coordinate system +AeroDyn_Nodes['Vundzi'] = False # (m/s); z-component of undisturbed wind velocity at each node; inertial/global coordinate system +AeroDyn_Nodes['VDisx'] = False # (m/s); x-component of disturbed wind velocity at each node; local blade coordinate system +AeroDyn_Nodes['VDisy'] = False # (m/s); y-component of disturbed wind velocity at each node; local blade coordinate system +AeroDyn_Nodes['VDisz'] = False # (m/s); z-component of disturbed wind velocity at each node; local blade coordinate system +AeroDyn_Nodes['STVx'] = False # (m/s); x-component of structural translational velocity at each node; local blade coordinate system +AeroDyn_Nodes['STVy'] = False # (m/s); y-component of structural translational velocity at each node; local blade coordinate system +AeroDyn_Nodes['STVz'] = False # (m/s); z-component of structural translational velocity at each node; local blade coordinate system +AeroDyn_Nodes['VRel'] = False # (m/s); Relvative wind speed at each node; +AeroDyn_Nodes['DynP'] = False # (Pa); Dynamic pressure at each node; +AeroDyn_Nodes['Re'] = False # (-); Reynolds number (in millions) at each node; +AeroDyn_Nodes['M'] = False # (-); Mach number at each node; +AeroDyn_Nodes['Vindx'] = False # (m/s); Axial induced wind velocity at each node; +AeroDyn_Nodes['Vindy'] = False # (m/s); Tangential induced wind velocity at each node; +AeroDyn_Nodes['AxInd'] = False # (-); Axial induction factor at each node; +AeroDyn_Nodes['TnInd'] = False # (-); Tangential induction factor at each node; +AeroDyn_Nodes['Alpha'] = False # (deg); Angle of attack at each node; +AeroDyn_Nodes['Theta'] = False # (deg); Pitch+Twist angle at each node; +AeroDyn_Nodes['Phi'] = False # (deg); Inflow angle at each node; +AeroDyn_Nodes['Curve'] = False # (deg); Curvature angle at each node; +AeroDyn_Nodes['Cl'] = False # (-); Lift force coefficient at each node, including unsteady effects; +AeroDyn_Nodes['Cd'] = False # (-); Drag force coefficient at each node, including unsteady effects; +AeroDyn_Nodes['Cm'] = False # (-); Pitching moment coefficient at each node, including unsteady effects; +AeroDyn_Nodes['Cx'] = False # (-); Normal force (to plane) coefficient at each node; +AeroDyn_Nodes['Cy'] = False # (-); Tangential force (to plane) coefficient at each node; +AeroDyn_Nodes['Cn'] = False # (-); Normal force (to chord) coefficient at each node; +AeroDyn_Nodes['Ct'] = False # (-); Tangential force (to chord) coefficient at each node; +AeroDyn_Nodes['Fl'] = False # (N/m); Lift force per unit length at each node; +AeroDyn_Nodes['Fd'] = False # (N/m); Drag force per unit length at each node; +AeroDyn_Nodes['Mm'] = False # (N-m/m); Pitching moment per unit length at each node; +AeroDyn_Nodes['Fx'] = False # (N/m); Normal force (to plane) per unit length at each node; +AeroDyn_Nodes['Fy'] = False # (N/m); Tangential force (to plane) per unit length at each node; +AeroDyn_Nodes['Fn'] = False # (N/m); Normal force (to chord) per unit length at each node; +AeroDyn_Nodes['Ft'] = False # (N/m); Tangential force (to chord) per unit length at each node; +AeroDyn_Nodes['Clrnc'] = False # (m); Tower clearance at each node (based on the absolute distance to the nearest point in the tower from blade node B#N# minus the local tower radius, in the deflected configuration); please note that this clearance is only approximate because the calculation assumes that the blade is a line with no volume (however, the calculation does use the local tower radius); when blade node B#N# is above the tower top (or below the tower base), the absolute distance to the tower top (or base) minus the local tower radius, in the deflected configuration, is output; +AeroDyn_Nodes['Vx'] = False # (m/s); Local axial velocity; +AeroDyn_Nodes['Vy'] = False # (m/s); Local tangential velocity; +AeroDyn_Nodes['GeomPhi'] = False # (1/0); Geometric phi? If phi was solved using normal BEMT equations, GeomPhi = 1; otherwise, if it was solved geometrically, GeomPhi = 0.; +AeroDyn_Nodes['Chi'] = False # (deg); Skew angle (used in skewed wake correction); +AeroDyn_Nodes['UA_Flag'] = False # (-); Flag indicating if UA is turned on for this node.; +AeroDyn_Nodes['UA_x1'] = False # (rad); time-history of wake vorticity contributing to effective angle of attack; +AeroDyn_Nodes['UA_x2'] = False # (rad); time-history of wake vorticity contributing to effective angle of attack; +AeroDyn_Nodes['UA_x3'] = False # (-); dimension of cl (UAMod4) or cn (UAMod5); lagging the fully-attached coefficient; +AeroDyn_Nodes['UA_x4'] = False # (-); UAMod4 and 5 separation factor; +AeroDyn_Nodes['UA_x5'] = False # (-); UAMod5 vortex term; +AeroDyn_Nodes['Debug1'] = False # (-); Placeholders for debugging channels; +AeroDyn_Nodes['Debug2'] = False # (-); Placeholders for debugging channels; +AeroDyn_Nodes['Debug3'] = False # (-); Placeholders for debugging channels; +AeroDyn_Nodes['CpMin'] = False # (-); Pressure coefficient; +AeroDyn_Nodes['SgCav'] = False # (-); Cavitation number; +AeroDyn_Nodes['SigCr'] = False # (-); Critical cavitation number; +AeroDyn_Nodes['Gam'] = False # (m^2/s); Gamma -- circulation on blade; +AeroDyn_Nodes['Cl_Static'] = False # (-); Static portion of lift force coefficient at each node, without unsteady effects; +AeroDyn_Nodes['Cd_Static'] = False # (-); Static portion of drag force coefficient at each node, without unsteady effects; +AeroDyn_Nodes['Cm_Static'] = False # (-); Static portion of pitching moment coefficient at each node, without unsteady effects; +AeroDyn_Nodes['Uin'] = False # (m/s); Axial induced velocity in rotating hub coordinates. Axial aligned with hub axis.; rotor plane polar hub rotating coordinates +AeroDyn_Nodes['Uit'] = False # (m/s); Tangential induced velocity in rotating hub coordinates. Tangential to the rotation plane. Perpendicular to blade aziumth.; rotor plane polar hub rotating coordinates +AeroDyn_Nodes['Uir'] = False # (m/s); Radial induced velocity in rotating hub coordinates. Radial outwards in rotation plane. Aligned with blade azimuth.; rotor plane polar hub rotating coordinates + + +""" Final Output Dictionary """ +FstOutput = {} +FstOutput['ElastoDyn'] = ElastoDyn +FstOutput['BeamDyn'] = BeamDyn +FstOutput['ServoDyn'] = ServoDyn +FstOutput['AeroDyn'] = AeroDyn +FstOutput['InflowWind'] = InflowWind +FstOutput['WAMIT'] = WAMIT +FstOutput['HydroDyn'] = HydroDyn +FstOutput['Morison'] = Morison +FstOutput['SubDyn'] = SubDyn +FstOutput['MoorDyn'] = MoorDyn +FstOutput['ElastoDyn_Nodes'] = ElastoDyn_Nodes +FstOutput['BeamDyn_Nodes'] = BeamDyn_Nodes +FstOutput['AeroDyn_Nodes'] = AeroDyn_Nodes + +""" Generated from FAST OutListParameters.xlsx files with AeroelasticSE/src/AeroelasticSE/Util/create_output_vars.py """ + + +""" OutList """ +OutList = {} + +# Wind Motions +OutList['WindVxi'] = False # (m/s); Nominally downwind component of the hub-height wind velocity; Directed along the xi-axis +OutList['uWind'] = False # (m/s); Nominally downwind component of the hub-height wind velocity; Directed along the xi-axis +OutList['WindVyi'] = False # (m/s); Cross-wind component of the hub-height wind velocity; Directed along the yi-axis +OutList['vWind'] = False # (m/s); Cross-wind component of the hub-height wind velocity; Directed along the yi-axis +OutList['WindVzi'] = False # (m/s); Vertical component of the hub-height wind velocity; Directed along the zi-axis +OutList['wWind'] = False # (m/s); Vertical component of the hub-height wind velocity; Directed along the zi-axis +OutList['TotWindV'] = False # (m/s); Total hub-height wind velocity magnitude; N/A +OutList['HorWindV'] = False # (m/s); Horizontal hub-height wind velocity magnitude; In the xi- and yi-plane +OutList['HorWndDir'] = False # (deg); Horizontal hub-height wind direction. Please note that FAST uses the opposite sign convention that AeroDyn uses. Put a "-", "_", "m", or "M" character in front of this variable name if you want to use the AeroDyn convention.; About the zi-axis +OutList['VerWndDir'] = False # (deg); Vertical hub-height wind direction; About an axis orthogonal to the zi-axis and the HorWindV-vector + +# Blade 1 Tip Motions +OutList['TipDxc1'] = True # (m); Blade 1 out-of-plane tip deflection (relative to the undeflected position); Directed along the xc1-axis +OutList['OoPDefl1'] = False # (m); Blade 1 out-of-plane tip deflection (relative to the undeflected position); Directed along the xc1-axis +OutList['TipDyc1'] = True # (m); Blade 1 in-plane tip deflection (relative to the undeflected position); Directed along the yc1-axis +OutList['IPDefl1'] = False # (m); Blade 1 in-plane tip deflection (relative to the undeflected position); Directed along the yc1-axis +OutList['TipDzc1'] = True # (m); Blade 1 axial tip deflection (relative to the undeflected position); Directed along the zc1- and zb1-axes +OutList['TipDzb1'] = True # (m); Blade 1 axial tip deflection (relative to the undeflected position); Directed along the zc1- and zb1-axes +OutList['TipDxb1'] = True # (m); Blade 1 flapwise tip deflection (relative to the undeflected position); Directed along the xb1-axis +OutList['TipDyb1'] = True # (m); Blade 1 edgewise tip deflection (relative to the undeflected position); Directed along the yb1-axis +OutList['TipALxb1'] = False # (m/s^2); Blade 1 local flapwise tip acceleration (absolute); Directed along the local xb1-axis +OutList['TipALyb1'] = False # (m/s^2); Blade 1 local edgewise tip acceleration (absolute); Directed along the local yb1-axis +OutList['TipALzb1'] = False # (m/s^2); Blade 1 local axial tip acceleration (absolute); Directed along the local zb1-axis +OutList['TipRDxb1'] = False # (deg); Blade 1 roll (angular/rotational) tip deflection (relative to the undeflected position). In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the xb1-axis +OutList['RollDefl1'] = False # (deg); Blade 1 roll (angular/rotational) tip deflection (relative to the undeflected position). In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the xb1-axis +OutList['TipRDyb1'] = False # (deg); Blade 1 pitch (angular/rotational) tip deflection (relative to the undeflected position). In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the yb1-axis +OutList['PtchDefl1'] = False # (deg); Blade 1 pitch (angular/rotational) tip deflection (relative to the undeflected position). In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the yb1-axis +OutList['TipRDzc1'] = False # (deg); Blade 1 torsional tip deflection (relative to the undeflected position). This output will always be zero for FAST simulation results. Use it for examining blade torsional deflections of ADAMS simulations run using ADAMS datasets created using the FAST-to-ADAMS preprocessor. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence. Please note that this output uses the opposite of the sign convention used for blade pitch angles.; About the zc1- and zb1-axes +OutList['TipRDzb1'] = False # (deg); Blade 1 torsional tip deflection (relative to the undeflected position). This output will always be zero for FAST simulation results. Use it for examining blade torsional deflections of ADAMS simulations run using ADAMS datasets created using the FAST-to-ADAMS preprocessor. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence. Please note that this output uses the opposite of the sign convention used for blade pitch angles.; About the zc1- and zb1-axes +OutList['TwstDefl1'] = False # (deg); Blade 1 torsional tip deflection (relative to the undeflected position). This output will always be zero for FAST simulation results. Use it for examining blade torsional deflections of ADAMS simulations run using ADAMS datasets created using the FAST-to-ADAMS preprocessor. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence. Please note that this output uses the opposite of the sign convention used for blade pitch angles.; About the zc1- and zb1-axes +OutList['TipClrnc1'] = False # (m); Blade 1 tip-to-tower clearance estimate. This is computed as the perpendicular distance from the yaw axis to the tip of blade 1 when the blade tip is below the yaw bearing. When the tip of blade 1 is above the yaw bearing, it is computed as the absolute distance from the yaw bearing to the blade tip. Please note that you should reduce this value by the tower radius to obtain the actual tower clearance.; N/A +OutList['TwrClrnc1'] = False # (m); Blade 1 tip-to-tower clearance estimate. This is computed as the perpendicular distance from the yaw axis to the tip of blade 1 when the blade tip is below the yaw bearing. When the tip of blade 1 is above the yaw bearing, it is computed as the absolute distance from the yaw bearing to the blade tip. Please note that you should reduce this value by the tower radius to obtain the actual tower clearance.; N/A +OutList['Tip2Twr1'] = False # (m); Blade 1 tip-to-tower clearance estimate. This is computed as the perpendicular distance from the yaw axis to the tip of blade 1 when the blade tip is below the yaw bearing. When the tip of blade 1 is above the yaw bearing, it is computed as the absolute distance from the yaw bearing to the blade tip. Please note that you should reduce this value by the tower radius to obtain the actual tower clearance.; N/A + +# Blade 2 Tip Motions +OutList['TipDxc2'] = True # (m); Blade 2 out-of-plane tip deflection (relative to the pitch axis); Directed along the xc2-axis +OutList['OoPDefl2'] = False # (m); Blade 2 out-of-plane tip deflection (relative to the pitch axis); Directed along the xc2-axis +OutList['TipDyc2'] = True # (m); Blade 2 in-plane tip deflection (relative to the pitch axis); Directed along the yc2-axis +OutList['IPDefl2'] = False # (m); Blade 2 in-plane tip deflection (relative to the pitch axis); Directed along the yc2-axis +OutList['TipDzc2'] = True # (m); Blade 2 axial tip deflection (relative to the pitch axis); Directed along the zc2- and zb2-axes +OutList['TipDzb2'] = True # (m); Blade 2 axial tip deflection (relative to the pitch axis); Directed along the zc2- and zb2-axes +OutList['TipDxb2'] = True # (m); Blade 2 flapwise tip deflection (relative to the pitch axis); Directed along the xb2-axis +OutList['TipDyb2'] = True # (m); Blade 2 edgewise tip deflection (relative to the pitch axis); Directed along the yb2-axis +OutList['TipALxb2'] = False # (m/s^2); Blade 2 local flapwise tip acceleration (absolute); Directed along the local xb2-axis +OutList['TipALyb2'] = False # (m/s^2); Blade 2 local edgewise tip acceleration (absolute); Directed along the local yb2-axis +OutList['TipALzb2'] = False # (m/s^2); Blade 2 local axial tip acceleration (absolute); Directed along the local zb2-axis +OutList['TipRDxb2'] = False # (deg); Blade 2 roll (angular/rotational) tip deflection (relative to the undeflected position). In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the xb2-axis +OutList['RollDefl2'] = False # (deg); Blade 2 roll (angular/rotational) tip deflection (relative to the undeflected position). In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the xb2-axis +OutList['TipRDyb2'] = False # (deg); Blade 2 pitch (angular/rotational) tip deflection (relative to the undeflected position). In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the yb2-axis +OutList['PtchDefl2'] = False # (deg); Blade 2 pitch (angular/rotational) tip deflection (relative to the undeflected position). In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the yb2-axis +OutList['TipRDzc2'] = False # (deg); Blade 2 torsional (angular/rotational) tip deflection (relative to the undeflected position). This output will always be zero for FAST simulation results. Use it for examining blade torsional deflections of ADAMS simulations run using ADAMS datasets created using the FAST-to-ADAMS preprocessor. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence. Please note that this output uses the opposite of the sign convention used for blade pitch angles.; About the zc2- and zb2-axes +OutList['TipRDzb2'] = False # (deg); Blade 2 torsional (angular/rotational) tip deflection (relative to the undeflected position). This output will always be zero for FAST simulation results. Use it for examining blade torsional deflections of ADAMS simulations run using ADAMS datasets created using the FAST-to-ADAMS preprocessor. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence. Please note that this output uses the opposite of the sign convention used for blade pitch angles.; About the zc2- and zb2-axes +OutList['TwstDefl2'] = False # (deg); Blade 2 torsional (angular/rotational) tip deflection (relative to the undeflected position). This output will always be zero for FAST simulation results. Use it for examining blade torsional deflections of ADAMS simulations run using ADAMS datasets created using the FAST-to-ADAMS preprocessor. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence. Please note that this output uses the opposite of the sign convention used for blade pitch angles.; About the zc2- and zb2-axes +OutList['TipClrnc2'] = False # (m); Blade 2 tip-to-tower clearance estimate. This is computed as the perpendicular distance from the yaw axis to the tip of blade 1 when the blade tip is below the yaw bearing. When the tip of blade 1 is above the yaw bearing, it is computed as the absolute distance from the yaw bearing to the blade tip. Please note that you should reduce this value by the tower radius to obtain the actual tower clearance.; N/A +OutList['TwrClrnc2'] = False # (m); Blade 2 tip-to-tower clearance estimate. This is computed as the perpendicular distance from the yaw axis to the tip of blade 1 when the blade tip is below the yaw bearing. When the tip of blade 1 is above the yaw bearing, it is computed as the absolute distance from the yaw bearing to the blade tip. Please note that you should reduce this value by the tower radius to obtain the actual tower clearance.; N/A +OutList['Tip2Twr2'] = False # (m); Blade 2 tip-to-tower clearance estimate. This is computed as the perpendicular distance from the yaw axis to the tip of blade 1 when the blade tip is below the yaw bearing. When the tip of blade 1 is above the yaw bearing, it is computed as the absolute distance from the yaw bearing to the blade tip. Please note that you should reduce this value by the tower radius to obtain the actual tower clearance.; N/A + +# Blade 3 Tip Motions +OutList['TipDxc3'] = True # (m); Blade 3 out-of-plane tip deflection (relative to the pitch axis); Directed along the xc3-axis +OutList['OoPDefl3'] = False # (m); Blade 3 out-of-plane tip deflection (relative to the pitch axis); Directed along the xc3-axis +OutList['TipDyc3'] = True # (m); Blade 3 in-plane tip deflection (relative to the pitch axis); Directed along the yc3-axis +OutList['IPDefl3'] = False # (m); Blade 3 in-plane tip deflection (relative to the pitch axis); Directed along the yc3-axis +OutList['TipDzc3'] = True # (m); Blade 3 axial tip deflection (relative to the pitch axis); Directed along the zc3- and zb3-axes +OutList['TipDzb3'] = True # (m); Blade 3 axial tip deflection (relative to the pitch axis); Directed along the zc3- and zb3-axes +OutList['TipDxb3'] = True # (m); Blade 3 flapwise tip deflection (relative to the pitch axis); Directed along the xb3-axis +OutList['TipDyb3'] = True # (m); Blade 3 edgewise tip deflection (relative to the pitch axis); Directed along the yb3-axis +OutList['TipALxb3'] = False # (m/s^2); Blade 3 local flapwise tip acceleration (absolute); Directed along the local xb3-axis +OutList['TipALyb3'] = False # (m/s^2); Blade 3 local edgewise tip acceleration (absolute); Directed along the local yb3-axis +OutList['TipALzb3'] = False # (m/s^2); Blade 3 local axial tip acceleration (absolute); Directed along the local zb3-axis +OutList['TipRDxb3'] = False # (deg); Blade 3 roll (angular/rotational) tip deflection (relative to the undeflected position). In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the xb3-axis +OutList['RollDefl3'] = False # (deg); Blade 3 roll (angular/rotational) tip deflection (relative to the undeflected position). In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the xb3-axis +OutList['TipRDyb3'] = False # (deg); Blade 3 pitch (angular/rotational) tip deflection (relative to the undeflected position). In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the yb3-axis +OutList['PtchDefl3'] = False # (deg); Blade 3 pitch (angular/rotational) tip deflection (relative to the undeflected position). In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the yb3-axis +OutList['TipRDzc3'] = False # (deg); Blade 3 torsional tip deflection (relative to the undeflected position). This output will always be zero for FAST simulation results. Use it for examining blade torsional deflections of ADAMS simulations run using ADAMS datasets created using the FAST-to-ADAMS preprocessor. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence. Please note that this output uses the opposite of the sign convention used for blade pitch angles.; About the zc3- and zb3-axes +OutList['TipRDzb3'] = False # (deg); Blade 3 torsional tip deflection (relative to the undeflected position). This output will always be zero for FAST simulation results. Use it for examining blade torsional deflections of ADAMS simulations run using ADAMS datasets created using the FAST-to-ADAMS preprocessor. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence. Please note that this output uses the opposite of the sign convention used for blade pitch angles.; About the zc3- and zb3-axes +OutList['TwstDefl3'] = False # (deg); Blade 3 torsional tip deflection (relative to the undeflected position). This output will always be zero for FAST simulation results. Use it for examining blade torsional deflections of ADAMS simulations run using ADAMS datasets created using the FAST-to-ADAMS preprocessor. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence. Please note that this output uses the opposite of the sign convention used for blade pitch angles.; About the zc3- and zb3-axes +OutList['TipClrnc3'] = False # (m); Blade 3 tip-to-tower clearance estimate. This is computed as the perpendicular distance from the yaw axis to the tip of blade 1 when the blade tip is below the yaw bearing. When the tip of blade 1 is above the yaw bearing, it is computed as the absolute distance from the yaw bearing to the blade tip. Please note that you should reduce this value by the tower radius to obtain the actual tower clearance.; N/A +OutList['TwrClrnc3'] = False # (m); Blade 3 tip-to-tower clearance estimate. This is computed as the perpendicular distance from the yaw axis to the tip of blade 1 when the blade tip is below the yaw bearing. When the tip of blade 1 is above the yaw bearing, it is computed as the absolute distance from the yaw bearing to the blade tip. Please note that you should reduce this value by the tower radius to obtain the actual tower clearance.; N/A +OutList['Tip2Twr3'] = False # (m); Blade 3 tip-to-tower clearance estimate. This is computed as the perpendicular distance from the yaw axis to the tip of blade 1 when the blade tip is below the yaw bearing. When the tip of blade 1 is above the yaw bearing, it is computed as the absolute distance from the yaw bearing to the blade tip. Please note that you should reduce this value by the tower radius to obtain the actual tower clearance.; N/A + +# Blade 1 Local Span Motions +OutList['Spn1ALxb1'] = False # (m/s^2); Blade 1 local flapwise acceleration (absolute) of span station 1; Directed along the local xb1-axis +OutList['Spn1ALyb1'] = False # (m/s^2); Blade 1 local edgewise acceleration (absolute) of span station 1; Directed along the local yb1-axis +OutList['Spn1ALzb1'] = False # (m/s^2); Blade 1 local axial acceleration (absolute) of span station 1; Directed along the local zb1-axis +OutList['Spn2ALxb1'] = False # (m/s^2); Blade 1 local flapwise acceleration (absolute) of span station 2; Directed along the local xb1-axis +OutList['Spn2ALyb1'] = False # (m/s^2); Blade 1 local edgewise acceleration (absolute) of span station 2; Directed along the local yb1-axis +OutList['Spn2ALzb1'] = False # (m/s^2); Blade 1 local axial acceleration (absolute) of span station 2; Directed along the local zb1-axis +OutList['Spn3ALxb1'] = False # (m/s^2); Blade 1 local flapwise acceleration (absolute) of span station 3; Directed along the local xb1-axis +OutList['Spn3ALyb1'] = False # (m/s^2); Blade 1 local edgewise acceleration (absolute) of span station 3; Directed along the local yb1-axis +OutList['Spn3ALzb1'] = False # (m/s^2); Blade 1 local axial acceleration (absolute) of span station 3; Directed along the local zb1-axis +OutList['Spn4ALxb1'] = False # (m/s^2); Blade 1 local flapwise acceleration (absolute) of span station 4; Directed along the local xb1-axis +OutList['Spn4ALyb1'] = False # (m/s^2); Blade 1 local edgewise acceleration (absolute) of span station 4; Directed along the local yb1-axis +OutList['Spn4ALzb1'] = False # (m/s^2); Blade 1 local axial acceleration (absolute) of span station 4; Directed along the local zb1-axis +OutList['Spn5ALxb1'] = False # (m/s^2); Blade 1 local flapwise acceleration (absolute) of span station 5; Directed along the local xb1-axis +OutList['Spn5ALyb1'] = False # (m/s^2); Blade 1 local edgewise acceleration (absolute) of span station 5; Directed along the local yb1-axis +OutList['Spn5ALzb1'] = False # (m/s^2); Blade 1 local axial acceleration (absolute) of span station 5; Directed along the local zb1-axis +OutList['Spn6ALxb1'] = False # (m/s^2); Blade 1 local flapwise acceleration (absolute) of span station 6; Directed along the local xb1-axis +OutList['Spn6ALyb1'] = False # (m/s^2); Blade 1 local edgewise acceleration (absolute) of span station 6; Directed along the local yb1-axis +OutList['Spn6ALzb1'] = False # (m/s^2); Blade 1 local axial acceleration (absolute) of span station 6; Directed along the local zb1-axis +OutList['Spn7ALxb1'] = False # (m/s^2); Blade 1 local flapwise acceleration (absolute) of span station 7; Directed along the local xb1-axis +OutList['Spn7ALyb1'] = False # (m/s^2); Blade 1 local edgewise acceleration (absolute) of span station 7; Directed along the local yb1-axis +OutList['Spn7ALzb1'] = False # (m/s^2); Blade 1 local axial acceleration (absolute) of span station 7; Directed along the local zb1-axis +OutList['Spn8ALxb1'] = False # (m/s^2); Blade 1 local flapwise acceleration (absolute) of span station 8; Directed along the local xb1-axis +OutList['Spn8ALyb1'] = False # (m/s^2); Blade 1 local edgewise acceleration (absolute) of span station 8; Directed along the local yb1-axis +OutList['Spn8ALzb1'] = False # (m/s^2); Blade 1 local axial acceleration (absolute) of span station 8; Directed along the local zb1-axis +OutList['Spn9ALxb1'] = False # (m/s^2); Blade 1 local flapwise acceleration (absolute) of span station 9; Directed along the local xb1-axis +OutList['Spn9ALyb1'] = False # (m/s^2); Blade 1 local edgewise acceleration (absolute) of span station 9; Directed along the local yb1-axis +OutList['Spn9ALzb1'] = False # (m/s^2); Blade 1 local axial acceleration (absolute) of span station 9; Directed along the local zb1-axis +OutList['Spn1TDxb1'] = False # (m); Blade 1 local flapwise (translational) deflection (relative to the undeflected position) of span station 1; Directed along the xb1-axis +OutList['Spn1TDyb1'] = False # (m); Blade 1 local edgewise (translational) deflection (relative to the undeflected position) of span station 1; Directed along the yb1-axis +OutList['Spn1TDzb1'] = False # (m); Blade 1 local axial (translational) deflection (relative to the undeflected position) of span station 1; Directed along the zb1-axis +OutList['Spn2TDxb1'] = False # (m); Blade 1 local flapwise (translational) deflection (relative to the undeflected position) of span station 2; Directed along the xb1-axis +OutList['Spn2TDyb1'] = False # (m); Blade 1 local edgewise (translational) deflection (relative to the undeflected position) of span station 2; Directed along the yb1-axis +OutList['Spn2TDzb1'] = False # (m); Blade 1 local axial (translational) deflection (relative to the undeflected position) of span station 2; Directed along the zb1-axis +OutList['Spn3TDxb1'] = False # (m); Blade 1 local flapwise (translational) deflection (relative to the undeflected position) of span station 3; Directed along the xb1-axis +OutList['Spn3TDyb1'] = False # (m); Blade 1 local edgewise (translational) deflection (relative to the undeflected position) of span station 3; Directed along the yb1-axis +OutList['Spn3TDzb1'] = False # (m); Blade 1 local axial (translational) deflection (relative to the undeflected position) of span station 3; Directed along the zb1-axis +OutList['Spn4TDxb1'] = False # (m); Blade 1 local flapwise (translational) deflection (relative to the undeflected position) of span station 4; Directed along the xb1-axis +OutList['Spn4TDyb1'] = False # (m); Blade 1 local edgewise (translational) deflection (relative to the undeflected position) of span station 4; Directed along the yb1-axis +OutList['Spn4TDzb1'] = False # (m); Blade 1 local axial (translational) deflection (relative to the undeflected position) of span station 4; Directed along the zb1-axis +OutList['Spn5TDxb1'] = False # (m); Blade 1 local flapwise (translational) deflection (relative to the undeflected position) of span station 5; Directed along the xb1-axis +OutList['Spn5TDyb1'] = False # (m); Blade 1 local edgewise (translational) deflection (relative to the undeflected position) of span station 5; Directed along the yb1-axis +OutList['Spn5TDzb1'] = False # (m); Blade 1 local axial (translational) deflection (relative to the undeflected position) of span station 5; Directed along the zb1-axis +OutList['Spn6TDxb1'] = False # (m); Blade 1 local flapwise (translational) deflection (relative to the undeflected position) of span station 6; Directed along the xb1-axis +OutList['Spn6TDyb1'] = False # (m); Blade 1 local edgewise (translational) deflection (relative to the undeflected position) of span station 6; Directed along the yb1-axis +OutList['Spn6TDzb1'] = False # (m); Blade 1 local axial (translational) deflection (relative to the undeflected position) of span station 6; Directed along the zb1-axis +OutList['Spn7TDxb1'] = False # (m); Blade 1 local flapwise (translational) deflection (relative to the undeflected position) of span station 7; Directed along the xb1-axis +OutList['Spn7TDyb1'] = False # (m); Blade 1 local edgewise (translational) deflection (relative to the undeflected position) of span station 7; Directed along the yb1-axis +OutList['Spn7TDzb1'] = False # (m); Blade 1 local axial (translational) deflection (relative to the undeflected position) of span station 7; Directed along the zb1-axis +OutList['Spn8TDxb1'] = False # (m); Blade 1 local flapwise (translational) deflection (relative to the undeflected position) of span station 8; Directed along the xb1-axis +OutList['Spn8TDyb1'] = False # (m); Blade 1 local edgewise (translational) deflection (relative to the undeflected position) of span station 8; Directed along the yb1-axis +OutList['Spn8TDzb1'] = False # (m); Blade 1 local axial (translational) deflection (relative to the undeflected position) of span station 8; Directed along the zb1-axis +OutList['Spn9TDxb1'] = False # (m); Blade 1 local flapwise (translational) deflection (relative to the undeflected position) of span station 9; Directed along the xb1-axis +OutList['Spn9TDyb1'] = False # (m); Blade 1 local edgewise (translational) deflection (relative to the undeflected position) of span station 9; Directed along the yb1-axis +OutList['Spn9TDzb1'] = False # (m); Blade 1 local axial (translational) deflection (relative to the undeflected position) of span station 9; Directed along the zb1-axis +OutList['Spn1RDxb1'] = False # (deg); Blade 1 local roll (angular/rotational) deflection (relative to the undeflected position) of span station 1. In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local xb1-axis +OutList['Spn1RDyb1'] = False # (deg); Blade 1 local pitch (angular/rotational) deflection (relative to the undeflected position) of span station 1. In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local yb1-axis +OutList['Spn1RDzb1'] = False # (deg); Blade 1 local torsional (angular/rotational) deflection (relative to the undeflected position) of span station 1. This output will always be zero for FAST simulation results. Use it for examining blade torsional deflections of ADAMS simulations run using ADAMS datasets created using the FAST-to-ADAMS preprocessor. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence. Please note that this output uses the opposite of the sign convention used for blade pitch angles.; About the local zb1-axis +OutList['Spn2RDxb1'] = False # (deg); Blade 1 local roll (angular/rotational) deflection (relative to the undeflected position) of span station 2. In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local xb1-axis +OutList['Spn2RDyb1'] = False # (deg); Blade 1 local pitch (angular/rotational) deflection (relative to the undeflected position) of span station 2. In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local yb1-axis +OutList['Spn2RDzb1'] = False # (deg); Blade 1 local torsional (angular/rotational) deflection (relative to the undeflected position) of span station 2. This output will always be zero for FAST simulation results. Use it for examining blade torsional deflections of ADAMS simulations run using ADAMS datasets created using the FAST-to-ADAMS preprocessor. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence. Please note that this output uses the opposite of the sign convention used for blade pitch angles.; About the local zb1-axis +OutList['Spn3RDxb1'] = False # (deg); Blade 1 local roll (angular/rotational) deflection (relative to the undeflected position) of span station 3. In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local xb1-axis +OutList['Spn3RDyb1'] = False # (deg); Blade 1 local pitch (angular/rotational) deflection (relative to the undeflected position) of span station 3. In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local yb1-axis +OutList['Spn3RDzb1'] = False # (deg); Blade 1 local torsional (angular/rotational) deflection (relative to the undeflected position) of span station 3. This output will always be zero for FAST simulation results. Use it for examining blade torsional deflections of ADAMS simulations run using ADAMS datasets created using the FAST-to-ADAMS preprocessor. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence. Please note that this output uses the opposite of the sign convention used for blade pitch angles.; About the local zb1-axis +OutList['Spn4RDxb1'] = False # (deg); Blade 1 local roll (angular/rotational) deflection (relative to the undeflected position) of span station 4. In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local xb1-axis +OutList['Spn4RDyb1'] = False # (deg); Blade 1 local pitch (angular/rotational) deflection (relative to the undeflected position) of span station 4. In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local yb1-axis +OutList['Spn4RDzb1'] = False # (deg); Blade 1 local torsional (angular/rotational) deflection (relative to the undeflected position) of span station 4. This output will always be zero for FAST simulation results. Use it for examining blade torsional deflections of ADAMS simulations run using ADAMS datasets created using the FAST-to-ADAMS preprocessor. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence. Please note that this output uses the opposite of the sign convention used for blade pitch angles.; About the local zb1-axis +OutList['Spn5RDxb1'] = False # (deg); Blade 1 local roll (angular/rotational) deflection (relative to the undeflected position) of span station 5. In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local xb1-axis +OutList['Spn5RDyb1'] = False # (deg); Blade 1 local pitch (angular/rotational) deflection (relative to the undeflected position) of span station 5. In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local yb1-axis +OutList['Spn5RDzb1'] = False # (deg); Blade 1 local torsional (angular/rotational) deflection (relative to the undeflected position) of span station 5. This output will always be zero for FAST simulation results. Use it for examining blade torsional deflections of ADAMS simulations run using ADAMS datasets created using the FAST-to-ADAMS preprocessor. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence. Please note that this output uses the opposite of the sign convention used for blade pitch angles.; About the local zb1-axis +OutList['Spn6RDxb1'] = False # (deg); Blade 1 local roll (angular/rotational) deflection (relative to the undeflected position) of span station 6. In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local xb1-axis +OutList['Spn6RDyb1'] = False # (deg); Blade 1 local pitch (angular/rotational) deflection (relative to the undeflected position) of span station 6. In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local yb1-axis +OutList['Spn6RDzb1'] = False # (deg); Blade 1 local torsional (angular/rotational) deflection (relative to the undeflected position) of span station 6. This output will always be zero for FAST simulation results. Use it for examining blade torsional deflections of ADAMS simulations run using ADAMS datasets created using the FAST-to-ADAMS preprocessor. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence. Please note that this output uses the opposite of the sign convention used for blade pitch angles.; About the local zb1-axis +OutList['Spn7RDxb1'] = False # (deg); Blade 1 local roll (angular/rotational) deflection (relative to the undeflected position) of span station 7. In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local xb1-axis +OutList['Spn7RDyb1'] = False # (deg); Blade 1 local pitch (angular/rotational) deflection (relative to the undeflected position) of span station 7. In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local yb1-axis +OutList['Spn7RDzb1'] = False # (deg); Blade 1 local torsional (angular/rotational) deflection (relative to the undeflected position) of span station 7. This output will always be zero for FAST simulation results. Use it for examining blade torsional deflections of ADAMS simulations run using ADAMS datasets created using the FAST-to-ADAMS preprocessor. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence. Please note that this output uses the opposite of the sign convention used for blade pitch angles.; About the local zb1-axis +OutList['Spn8RDxb1'] = False # (deg); Blade 1 local roll (angular/rotational) deflection (relative to the undeflected position) of span station 8. In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local xb1-axis +OutList['Spn8RDyb1'] = False # (deg); Blade 1 local pitch (angular/rotational) deflection (relative to the undeflected position) of span station 8. In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local yb1-axis +OutList['Spn8RDzb1'] = False # (deg); Blade 1 local torsional (angular/rotational) deflection (relative to the undeflected position) of span station 8. This output will always be zero for FAST simulation results. Use it for examining blade torsional deflections of ADAMS simulations run using ADAMS datasets created using the FAST-to-ADAMS preprocessor. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence. Please note that this output uses the opposite of the sign convention used for blade pitch angles.; About the local zb1-axis +OutList['Spn9RDxb1'] = False # (deg); Blade 1 local roll (angular/rotational) deflection (relative to the undeflected position) of span station 9. In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local xb1-axis +OutList['Spn9RDyb1'] = False # (deg); Blade 1 local pitch (angular/rotational) deflection (relative to the undeflected position) of span station 9. In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local yb1-axis +OutList['Spn9RDzb1'] = False # (deg); Blade 1 local torsional (angular/rotational) deflection (relative to the undeflected position) of span station 9. This output will always be zero for FAST simulation results. Use it for examining blade torsional deflections of ADAMS simulations run using ADAMS datasets created using the FAST-to-ADAMS preprocessor. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence. Please note that this output uses the opposite of the sign convention used for blade pitch angles.; About the local zb1-axis + +# Blade 2 Local Span Motions +OutList['Spn1ALxb2'] = False # (m/s^2); Blade 2 local flapwise acceleration (absolute) of span station 1; Directed along the local xb2-axis +OutList['Spn1ALyb2'] = False # (m/s^2); Blade 2 local edgewise acceleration (absolute) of span station 1; Directed along the local yb2-axis +OutList['Spn1ALzb2'] = False # (m/s^2); Blade 2 local axial acceleration (absolute) of span station 1; Directed along the local zb2-axis +OutList['Spn2ALxb2'] = False # (m/s^2); Blade 2 local flapwise acceleration (absolute) of span station 2; Directed along the local xb2-axis +OutList['Spn2ALyb2'] = False # (m/s^2); Blade 2 local edgewise acceleration (absolute) of span station 2; Directed along the local yb2-axis +OutList['Spn2ALzb2'] = False # (m/s^2); Blade 2 local axial acceleration (absolute) of span station 2; Directed along the local zb2-axis +OutList['Spn3ALxb2'] = False # (m/s^2); Blade 2 local flapwise acceleration (absolute) of span station 3; Directed along the local xb2-axis +OutList['Spn3ALyb2'] = False # (m/s^2); Blade 2 local edgewise acceleration (absolute) of span station 3; Directed along the local yb2-axis +OutList['Spn3ALzb2'] = False # (m/s^2); Blade 2 local axial acceleration (absolute) of span station 3; Directed along the local zb2-axis +OutList['Spn4ALxb2'] = False # (m/s^2); Blade 2 local flapwise acceleration (absolute) of span station 4; Directed along the local xb2-axis +OutList['Spn4ALyb2'] = False # (m/s^2); Blade 2 local edgewise acceleration (absolute) of span station 4; Directed along the local yb2-axis +OutList['Spn4ALzb2'] = False # (m/s^2); Blade 2 local axial acceleration (absolute) of span station 4; Directed along the local zb2-axis +OutList['Spn5ALxb2'] = False # (m/s^2); Blade 2 local flapwise acceleration (absolute) of span station 5; Directed along the local xb2-axis +OutList['Spn5ALyb2'] = False # (m/s^2); Blade 2 local edgewise acceleration (absolute) of span station 5; Directed along the local yb2-axis +OutList['Spn5ALzb2'] = False # (m/s^2); Blade 2 local axial acceleration (absolute) of span station 5; Directed along the local zb2-axis +OutList['Spn6ALxb2'] = False # (m/s^2); Blade 2 local flapwise acceleration (absolute) of span station 6; Directed along the local xb2-axis +OutList['Spn6ALyb2'] = False # (m/s^2); Blade 2 local edgewise acceleration (absolute) of span station 6; Directed along the local yb2-axis +OutList['Spn6ALzb2'] = False # (m/s^2); Blade 2 local axial acceleration (absolute) of span station 6; Directed along the local zb2-axis +OutList['Spn7ALxb2'] = False # (m/s^2); Blade 2 local flapwise acceleration (absolute) of span station 7; Directed along the local xb2-axis +OutList['Spn7ALyb2'] = False # (m/s^2); Blade 2 local edgewise acceleration (absolute) of span station 7; Directed along the local yb2-axis +OutList['Spn7ALzb2'] = False # (m/s^2); Blade 2 local axial acceleration (absolute) of span station 7; Directed along the local zb2-axis +OutList['Spn8ALxb2'] = False # (m/s^2); Blade 2 local flapwise acceleration (absolute) of span station 8; Directed along the local xb2-axis +OutList['Spn8ALyb2'] = False # (m/s^2); Blade 2 local edgewise acceleration (absolute) of span station 8; Directed along the local yb2-axis +OutList['Spn8ALzb2'] = False # (m/s^2); Blade 2 local axial acceleration (absolute) of span station 8; Directed along the local zb2-axis +OutList['Spn9ALxb2'] = False # (m/s^2); Blade 2 local flapwise acceleration (absolute) of span station 9; Directed along the local xb2-axis +OutList['Spn9ALyb2'] = False # (m/s^2); Blade 2 local edgewise acceleration (absolute) of span station 9; Directed along the local yb2-axis +OutList['Spn9ALzb2'] = False # (m/s^2); Blade 2 local axial acceleration (absolute) of span station 9; Directed along the local zb2-axis +OutList['Spn1TDxb2'] = False # (m); Blade 2 local flapwise (translational) deflection (relative to the undeflected position) of span station 1; Directed along the xb2-axis +OutList['Spn1TDyb2'] = False # (m); Blade 2 local edgewise (translational) deflection (relative to the undeflected position) of span station 1; Directed along the yb2-axis +OutList['Spn1TDzb2'] = False # (m); Blade 2 local axial (translational) deflection (relative to the undeflected position) of span station 1; Directed along the zb2-axis +OutList['Spn2TDxb2'] = False # (m); Blade 2 local flapwise (translational) deflection (relative to the undeflected position) of span station 2; Directed along the xb2-axis +OutList['Spn2TDyb2'] = False # (m); Blade 2 local edgewise (translational) deflection (relative to the undeflected position) of span station 2; Directed along the yb2-axis +OutList['Spn2TDzb2'] = False # (m); Blade 2 local axial (translational) deflection (relative to the undeflected position) of span station 2; Directed along the zb2-axis +OutList['Spn3TDxb2'] = False # (m); Blade 2 local flapwise (translational) deflection (relative to the undeflected position) of span station 3; Directed along the xb2-axis +OutList['Spn3TDyb2'] = False # (m); Blade 2 local edgewise (translational) deflection (relative to the undeflected position) of span station 3; Directed along the yb2-axis +OutList['Spn3TDzb2'] = False # (m); Blade 2 local axial (translational) deflection (relative to the undeflected position) of span station 3; Directed along the zb2-axis +OutList['Spn4TDxb2'] = False # (m); Blade 2 local flapwise (translational) deflection (relative to the undeflected position) of span station 4; Directed along the xb2-axis +OutList['Spn4TDyb2'] = False # (m); Blade 2 local edgewise (translational) deflection (relative to the undeflected position) of span station 4; Directed along the yb2-axis +OutList['Spn4TDzb2'] = False # (m); Blade 2 local axial (translational) deflection (relative to the undeflected position) of span station 4; Directed along the zb2-axis +OutList['Spn5TDxb2'] = False # (m); Blade 2 local flapwise (translational) deflection (relative to the undeflected position) of span station 5; Directed along the xb2-axis +OutList['Spn5TDyb2'] = False # (m); Blade 2 local edgewise (translational) deflection (relative to the undeflected position) of span station 5; Directed along the yb2-axis +OutList['Spn5TDzb2'] = False # (m); Blade 2 local axial (translational) deflection (relative to the undeflected position) of span station 5; Directed along the zb2-axis +OutList['Spn6TDxb2'] = False # (m); Blade 2 local flapwise (translational) deflection (relative to the undeflected position) of span station 6; Directed along the xb2-axis +OutList['Spn6TDyb2'] = False # (m); Blade 2 local edgewise (translational) deflection (relative to the undeflected position) of span station 6; Directed along the yb2-axis +OutList['Spn6TDzb2'] = False # (m); Blade 2 local axial (translational) deflection (relative to the undeflected position) of span station 6; Directed along the zb2-axis +OutList['Spn7TDxb2'] = False # (m); Blade 2 local flapwise (translational) deflection (relative to the undeflected position) of span station 7; Directed along the xb2-axis +OutList['Spn7TDyb2'] = False # (m); Blade 2 local edgewise (translational) deflection (relative to the undeflected position) of span station 7; Directed along the yb2-axis +OutList['Spn7TDzb2'] = False # (m); Blade 2 local axial (translational) deflection (relative to the undeflected position) of span station 7; Directed along the zb2-axis +OutList['Spn8TDxb2'] = False # (m); Blade 2 local flapwise (translational) deflection (relative to the undeflected position) of span station 8; Directed along the xb2-axis +OutList['Spn8TDyb2'] = False # (m); Blade 2 local edgewise (translational) deflection (relative to the undeflected position) of span station 8; Directed along the yb2-axis +OutList['Spn8TDzb2'] = False # (m); Blade 2 local axial (translational) deflection (relative to the undeflected position) of span station 8; Directed along the zb2-axis +OutList['Spn9TDxb2'] = False # (m); Blade 2 local flapwise (translational) deflection (relative to the undeflected position) of span station 9; Directed along the xb2-axis +OutList['Spn9TDyb2'] = False # (m); Blade 2 local edgewise (translational) deflection (relative to the undeflected position) of span station 9; Directed along the yb2-axis +OutList['Spn9TDzb2'] = False # (m); Blade 2 local axial (translational) deflection (relative to the undeflected position) of span station 9; Directed along the zb2-axis +OutList['Spn1RDxb2'] = False # (deg); Blade 2 local roll (angular/rotational) deflection (relative to the undeflected position) of span station 1. In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local xb2-axis +OutList['Spn1RDyb2'] = False # (deg); Blade 2 local pitch (angular/rotational) deflection (relative to the undeflected position) of span station 1. In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local yb2-axis +OutList['Spn1RDzb2'] = False # (deg); Blade 2 local torsional (angular/rotational) deflection (relative to the undeflected position) of span station 1. This output will always be zero for FAST simulation results. Use it for examining blade torsional deflections of ADAMS simulations run using ADAMS datasets created using the FAST-to-ADAMS preprocessor. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence. Please note that this output uses the opposite of the sign convention used for blade pitch angles.; About the local zb2-axis +OutList['Spn2RDxb2'] = False # (deg); Blade 2 local roll (angular/rotational) deflection (relative to the undeflected position) of span station 2. In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local xb2-axis +OutList['Spn2RDyb2'] = False # (deg); Blade 2 local pitch (angular/rotational) deflection (relative to the undeflected position) of span station 2. In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local yb2-axis +OutList['Spn2RDzb2'] = False # (deg); Blade 2 local torsional (angular/rotational) deflection (relative to the undeflected position) of span station 2. This output will always be zero for FAST simulation results. Use it for examining blade torsional deflections of ADAMS simulations run using ADAMS datasets created using the FAST-to-ADAMS preprocessor. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence. Please note that this output uses the opposite of the sign convention used for blade pitch angles.; About the local zb2-axis +OutList['Spn3RDxb2'] = False # (deg); Blade 2 local roll (angular/rotational) deflection (relative to the undeflected position) of span station 3. In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local xb2-axis +OutList['Spn3RDyb2'] = False # (deg); Blade 2 local pitch (angular/rotational) deflection (relative to the undeflected position) of span station 3. In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local yb2-axis +OutList['Spn3RDzb2'] = False # (deg); Blade 2 local torsional (angular/rotational) deflection (relative to the undeflected position) of span station 3. This output will always be zero for FAST simulation results. Use it for examining blade torsional deflections of ADAMS simulations run using ADAMS datasets created using the FAST-to-ADAMS preprocessor. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence. Please note that this output uses the opposite of the sign convention used for blade pitch angles.; About the local zb2-axis +OutList['Spn4RDxb2'] = False # (deg); Blade 2 local roll (angular/rotational) deflection (relative to the undeflected position) of span station 4. In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local xb2-axis +OutList['Spn4RDyb2'] = False # (deg); Blade 2 local pitch (angular/rotational) deflection (relative to the undeflected position) of span station 4. In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local yb2-axis +OutList['Spn4RDzb2'] = False # (deg); Blade 2 local torsional (angular/rotational) deflection (relative to the undeflected position) of span station 4. This output will always be zero for FAST simulation results. Use it for examining blade torsional deflections of ADAMS simulations run using ADAMS datasets created using the FAST-to-ADAMS preprocessor. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence. Please note that this output uses the opposite of the sign convention used for blade pitch angles.; About the local zb2-axis +OutList['Spn5RDxb2'] = False # (deg); Blade 2 local roll (angular/rotational) deflection (relative to the undeflected position) of span station 5. In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local xb2-axis +OutList['Spn5RDyb2'] = False # (deg); Blade 2 local pitch (angular/rotational) deflection (relative to the undeflected position) of span station 5. In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local yb2-axis +OutList['Spn5RDzb2'] = False # (deg); Blade 2 local torsional (angular/rotational) deflection (relative to the undeflected position) of span station 5. This output will always be zero for FAST simulation results. Use it for examining blade torsional deflections of ADAMS simulations run using ADAMS datasets created using the FAST-to-ADAMS preprocessor. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence. Please note that this output uses the opposite of the sign convention used for blade pitch angles.; About the local zb2-axis +OutList['Spn6RDxb2'] = False # (deg); Blade 2 local roll (angular/rotational) deflection (relative to the undeflected position) of span station 6. In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local xb2-axis +OutList['Spn6RDyb2'] = False # (deg); Blade 2 local pitch (angular/rotational) deflection (relative to the undeflected position) of span station 6. In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local yb2-axis +OutList['Spn6RDzb2'] = False # (deg); Blade 2 local torsional (angular/rotational) deflection (relative to the undeflected position) of span station 6. This output will always be zero for FAST simulation results. Use it for examining blade torsional deflections of ADAMS simulations run using ADAMS datasets created using the FAST-to-ADAMS preprocessor. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence. Please note that this output uses the opposite of the sign convention used for blade pitch angles.; About the local zb2-axis +OutList['Spn7RDxb2'] = False # (deg); Blade 2 local roll (angular/rotational) deflection (relative to the undeflected position) of span station 7. In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local xb2-axis +OutList['Spn7RDyb2'] = False # (deg); Blade 2 local pitch (angular/rotational) deflection (relative to the undeflected position) of span station 7. In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local yb2-axis +OutList['Spn7RDzb2'] = False # (deg); Blade 2 local torsional (angular/rotational) deflection (relative to the undeflected position) of span station 7. This output will always be zero for FAST simulation results. Use it for examining blade torsional deflections of ADAMS simulations run using ADAMS datasets created using the FAST-to-ADAMS preprocessor. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence. Please note that this output uses the opposite of the sign convention used for blade pitch angles.; About the local zb2-axis +OutList['Spn8RDxb2'] = False # (deg); Blade 2 local roll (angular/rotational) deflection (relative to the undeflected position) of span station 8. In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local xb2-axis +OutList['Spn8RDyb2'] = False # (deg); Blade 2 local pitch (angular/rotational) deflection (relative to the undeflected position) of span station 8. In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local yb2-axis +OutList['Spn8RDzb2'] = False # (deg); Blade 2 local torsional (angular/rotational) deflection (relative to the undeflected position) of span station 8. This output will always be zero for FAST simulation results. Use it for examining blade torsional deflections of ADAMS simulations run using ADAMS datasets created using the FAST-to-ADAMS preprocessor. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence. Please note that this output uses the opposite of the sign convention used for blade pitch angles.; About the local zb2-axis +OutList['Spn9RDxb2'] = False # (deg); Blade 2 local roll (angular/rotational) deflection (relative to the undeflected position) of span station 9. In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local xb2-axis +OutList['Spn9RDyb2'] = False # (deg); Blade 2 local pitch (angular/rotational) deflection (relative to the undeflected position) of span station 9. In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local yb2-axis +OutList['Spn9RDzb2'] = False # (deg); Blade 2 local torsional (angular/rotational) deflection (relative to the undeflected position) of span station 9. This output will always be zero for FAST simulation results. Use it for examining blade torsional deflections of ADAMS simulations run using ADAMS datasets created using the FAST-to-ADAMS preprocessor. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence. Please note that this output uses the opposite of the sign convention used for blade pitch angles.; About the local zb2-axis + +# Blade 3 Local Span Motions +OutList['Spn1ALxb3'] = False # (m/s^2); Blade 3 local flapwise acceleration (absolute) of span station 1; Directed along the local xb3-axis +OutList['Spn1ALyb3'] = False # (m/s^2); Blade 3 local edgewise acceleration (absolute) of span station 1; Directed along the local yb3-axis +OutList['Spn1ALzb3'] = False # (m/s^2); Blade 3 local axial acceleration (absolute) of span station 1; Directed along the local zb3-axis +OutList['Spn2ALxb3'] = False # (m/s^2); Blade 3 local flapwise acceleration (absolute) of span station 2; Directed along the local xb3-axis +OutList['Spn2ALyb3'] = False # (m/s^2); Blade 3 local edgewise acceleration (absolute) of span station 2; Directed along the local yb3-axis +OutList['Spn2ALzb3'] = False # (m/s^2); Blade 3 local axial acceleration (absolute) of span station 2; Directed along the local zb3-axis +OutList['Spn3ALxb3'] = False # (m/s^2); Blade 3 local flapwise acceleration (absolute) of span station 3; Directed along the local xb3-axis +OutList['Spn3ALyb3'] = False # (m/s^2); Blade 3 local edgewise acceleration (absolute) of span station 3; Directed along the local yb3-axis +OutList['Spn3ALzb3'] = False # (m/s^2); Blade 3 local axial acceleration (absolute) of span station 3; Directed along the local zb3-axis +OutList['Spn4ALxb3'] = False # (m/s^2); Blade 3 local flapwise acceleration (absolute) of span station 4; Directed along the local xb3-axis +OutList['Spn4ALyb3'] = False # (m/s^2); Blade 3 local edgewise acceleration (absolute) of span station 4; Directed along the local yb3-axis +OutList['Spn4ALzb3'] = False # (m/s^2); Blade 3 local axial acceleration (absolute) of span station 4; Directed along the local zb3-axis +OutList['Spn5ALxb3'] = False # (m/s^2); Blade 3 local flapwise acceleration (absolute) of span station 5; Directed along the local xb3-axis +OutList['Spn5ALyb3'] = False # (m/s^2); Blade 3 local edgewise acceleration (absolute) of span station 5; Directed along the local yb3-axis +OutList['Spn5ALzb3'] = False # (m/s^2); Blade 3 local axial acceleration (absolute) of span station 5; Directed along the local zb3-axis +OutList['Spn6ALxb3'] = False # (m/s^2); Blade 3 local flapwise acceleration (absolute) of span station 6; Directed along the local xb3-axis +OutList['Spn6ALyb3'] = False # (m/s^2); Blade 3 local edgewise acceleration (absolute) of span station 6; Directed along the local yb3-axis +OutList['Spn6ALzb3'] = False # (m/s^2); Blade 3 local axial acceleration (absolute) of span station 6; Directed along the local zb3-axis +OutList['Spn7ALxb3'] = False # (m/s^2); Blade 3 local flapwise acceleration (absolute) of span station 7; Directed along the local xb3-axis +OutList['Spn7ALyb3'] = False # (m/s^2); Blade 3 local edgewise acceleration (absolute) of span station 7; Directed along the local yb3-axis +OutList['Spn7ALzb3'] = False # (m/s^2); Blade 3 local axial acceleration (absolute) of span station 7; Directed along the local zb3-axis +OutList['Spn8ALxb3'] = False # (m/s^2); Blade 3 local flapwise acceleration (absolute) of span station 8; Directed along the local xb3-axis +OutList['Spn8ALyb3'] = False # (m/s^2); Blade 3 local edgewise acceleration (absolute) of span station 8; Directed along the local yb3-axis +OutList['Spn8ALzb3'] = False # (m/s^2); Blade 3 local axial acceleration (absolute) of span station 8; Directed along the local zb3-axis +OutList['Spn9ALxb3'] = False # (m/s^2); Blade 3 local flapwise acceleration (absolute) of span station 9; Directed along the local xb3-axis +OutList['Spn9ALyb3'] = False # (m/s^2); Blade 3 local edgewise acceleration (absolute) of span station 9; Directed along the local yb3-axis +OutList['Spn9ALzb3'] = False # (m/s^2); Blade 3 local axial acceleration (absolute) of span station 9; Directed along the local zb3-axis +OutList['Spn1TDxb3'] = False # (m); Blade 3 local flapwise (translational) deflection (relative to the undeflected position) of span station 1; Directed along the xb3-axis +OutList['Spn1TDyb3'] = False # (m); Blade 3 local edgewise (translational) deflection (relative to the undeflected position) of span station 1; Directed along the yb3-axis +OutList['Spn1TDzb3'] = False # (m); Blade 3 local axial (translational) deflection (relative to the undeflected position) of span station 1; Directed along the zb3-axis +OutList['Spn2TDxb3'] = False # (m); Blade 3 local flapwise (translational) deflection (relative to the undeflected position) of span station 2; Directed along the xb3-axis +OutList['Spn2TDyb3'] = False # (m); Blade 3 local edgewise (translational) deflection (relative to the undeflected position) of span station 2; Directed along the yb3-axis +OutList['Spn2TDzb3'] = False # (m); Blade 3 local axial (translational) deflection (relative to the undeflected position) of span station 2; Directed along the zb3-axis +OutList['Spn3TDxb3'] = False # (m); Blade 3 local flapwise (translational) deflection (relative to the undeflected position) of span station 3; Directed along the xb3-axis +OutList['Spn3TDyb3'] = False # (m); Blade 3 local edgewise (translational) deflection (relative to the undeflected position) of span station 3; Directed along the yb3-axis +OutList['Spn3TDzb3'] = False # (m); Blade 3 local axial (translational) deflection (relative to the undeflected position) of span station 3; Directed along the zb3-axis +OutList['Spn4TDxb3'] = False # (m); Blade 3 local flapwise (translational) deflection (relative to the undeflected position) of span station 4; Directed along the xb3-axis +OutList['Spn4TDyb3'] = False # (m); Blade 3 local edgewise (translational) deflection (relative to the undeflected position) of span station 4; Directed along the yb3-axis +OutList['Spn4TDzb3'] = False # (m); Blade 3 local axial (translational) deflection (relative to the undeflected position) of span station 4; Directed along the zb3-axis +OutList['Spn5TDxb3'] = False # (m); Blade 3 local flapwise (translational) deflection (relative to the undeflected position) of span station 5; Directed along the xb3-axis +OutList['Spn5TDyb3'] = False # (m); Blade 3 local edgewise (translational) deflection (relative to the undeflected position) of span station 5; Directed along the yb3-axis +OutList['Spn5TDzb3'] = False # (m); Blade 3 local axial (translational) deflection (relative to the undeflected position) of span station 5; Directed along the zb3-axis +OutList['Spn6TDxb3'] = False # (m); Blade 3 local flapwise (translational) deflection (relative to the undeflected position) of span station 6; Directed along the xb3-axis +OutList['Spn6TDyb3'] = False # (m); Blade 3 local edgewise (translational) deflection (relative to the undeflected position) of span station 6; Directed along the yb3-axis +OutList['Spn6TDzb3'] = False # (m); Blade 3 local axial (translational) deflection (relative to the undeflected position) of span station 6; Directed along the zb3-axis +OutList['Spn7TDxb3'] = False # (m); Blade 3 local flapwise (translational) deflection (relative to the undeflected position) of span station 7; Directed along the xb3-axis +OutList['Spn7TDyb3'] = False # (m); Blade 3 local edgewise (translational) deflection (relative to the undeflected position) of span station 7; Directed along the yb3-axis +OutList['Spn7TDzb3'] = False # (m); Blade 3 local axial (translational) deflection (relative to the undeflected position) of span station 7; Directed along the zb3-axis +OutList['Spn8TDxb3'] = False # (m); Blade 3 local flapwise (translational) deflection (relative to the undeflected position) of span station 8; Directed along the xb3-axis +OutList['Spn8TDyb3'] = False # (m); Blade 3 local edgewise (translational) deflection (relative to the undeflected position) of span station 8; Directed along the yb3-axis +OutList['Spn8TDzb3'] = False # (m); Blade 3 local axial (translational) deflection (relative to the undeflected position) of span station 8; Directed along the zb3-axis +OutList['Spn9TDxb3'] = False # (m); Blade 3 local flapwise (translational) deflection (relative to the undeflected position) of span station 9; Directed along the xb3-axis +OutList['Spn9TDyb3'] = False # (m); Blade 3 local edgewise (translational) deflection (relative to the undeflected position) of span station 9; Directed along the yb3-axis +OutList['Spn9TDzb3'] = False # (m); Blade 3 local axial (translational) deflection (relative to the undeflected position) of span station 9; Directed along the zb3-axis +OutList['Spn1RDxb3'] = False # (deg); Blade 3 local roll (angular/rotational) deflection (relative to the undeflected position) of span station 1. In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local xb3-axis +OutList['Spn1RDyb3'] = False # (deg); Blade 3 local pitch (angular/rotational) deflection (relative to the undeflected position) of span station 1. In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local yb3-axis +OutList['Spn1RDzb3'] = False # (deg); Blade 3 local torsional (angular/rotational) deflection (relative to the undeflected position) of span station 1. This output will always be zero for FAST simulation results. Use it for examining blade torsional deflections of ADAMS simulations run using ADAMS datasets created using the FAST-to-ADAMS preprocessor. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence. Please note that this output uses the opposite of the sign convention used for blade pitch angles.; About the local zb3-axis +OutList['Spn2RDxb3'] = False # (deg); Blade 3 local roll (angular/rotational) deflection (relative to the undeflected position) of span station 2. In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local xb3-axis +OutList['Spn2RDyb3'] = False # (deg); Blade 3 local pitch (angular/rotational) deflection (relative to the undeflected position) of span station 2. In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local yb3-axis +OutList['Spn2RDzb3'] = False # (deg); Blade 3 local torsional (angular/rotational) deflection (relative to the undeflected position) of span station 2. This output will always be zero for FAST simulation results. Use it for examining blade torsional deflections of ADAMS simulations run using ADAMS datasets created using the FAST-to-ADAMS preprocessor. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence. Please note that this output uses the opposite of the sign convention used for blade pitch angles.; About the local zb3-axis +OutList['Spn3RDxb3'] = False # (deg); Blade 3 local roll (angular/rotational) deflection (relative to the undeflected position) of span station 3. In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local xb3-axis +OutList['Spn3RDyb3'] = False # (deg); Blade 3 local pitch (angular/rotational) deflection (relative to the undeflected position) of span station 3. In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local yb3-axis +OutList['Spn3RDzb3'] = False # (deg); Blade 3 local torsional (angular/rotational) deflection (relative to the undeflected position) of span station 3. This output will always be zero for FAST simulation results. Use it for examining blade torsional deflections of ADAMS simulations run using ADAMS datasets created using the FAST-to-ADAMS preprocessor. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence. Please note that this output uses the opposite of the sign convention used for blade pitch angles.; About the local zb3-axis +OutList['Spn4RDxb3'] = False # (deg); Blade 3 local roll (angular/rotational) deflection (relative to the undeflected position) of span station 4. In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local xb3-axis +OutList['Spn4RDyb3'] = False # (deg); Blade 3 local pitch (angular/rotational) deflection (relative to the undeflected position) of span station 4. In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local yb3-axis +OutList['Spn4RDzb3'] = False # (deg); Blade 3 local torsional (angular/rotational) deflection (relative to the undeflected position) of span station 4. This output will always be zero for FAST simulation results. Use it for examining blade torsional deflections of ADAMS simulations run using ADAMS datasets created using the FAST-to-ADAMS preprocessor. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence. Please note that this output uses the opposite of the sign convention used for blade pitch angles.; About the local zb3-axis +OutList['Spn5RDxb3'] = False # (deg); Blade 3 local roll (angular/rotational) deflection (relative to the undeflected position) of span station 5. In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local xb3-axis +OutList['Spn5RDyb3'] = False # (deg); Blade 3 local pitch (angular/rotational) deflection (relative to the undeflected position) of span station 5. In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local yb3-axis +OutList['Spn5RDzb3'] = False # (deg); Blade 3 local torsional (angular/rotational) deflection (relative to the undeflected position) of span station 5. This output will always be zero for FAST simulation results. Use it for examining blade torsional deflections of ADAMS simulations run using ADAMS datasets created using the FAST-to-ADAMS preprocessor. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence. Please note that this output uses the opposite of the sign convention used for blade pitch angles.; About the local zb3-axis +OutList['Spn6RDxb3'] = False # (deg); Blade 3 local roll (angular/rotational) deflection (relative to the undeflected position) of span station 6. In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local xb3-axis +OutList['Spn6RDyb3'] = False # (deg); Blade 3 local pitch (angular/rotational) deflection (relative to the undeflected position) of span station 6. In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local yb3-axis +OutList['Spn6RDzb3'] = False # (deg); Blade 3 local torsional (angular/rotational) deflection (relative to the undeflected position) of span station 6. This output will always be zero for FAST simulation results. Use it for examining blade torsional deflections of ADAMS simulations run using ADAMS datasets created using the FAST-to-ADAMS preprocessor. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence. Please note that this output uses the opposite of the sign convention used for blade pitch angles.; About the local zb3-axis +OutList['Spn7RDxb3'] = False # (deg); Blade 3 local roll (angular/rotational) deflection (relative to the undeflected position) of span station 7. In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local xb3-axis +OutList['Spn7RDyb3'] = False # (deg); Blade 3 local pitch (angular/rotational) deflection (relative to the undeflected position) of span station 7. In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local yb3-axis +OutList['Spn7RDzb3'] = False # (deg); Blade 3 local torsional (angular/rotational) deflection (relative to the undeflected position) of span station 7. This output will always be zero for FAST simulation results. Use it for examining blade torsional deflections of ADAMS simulations run using ADAMS datasets created using the FAST-to-ADAMS preprocessor. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence. Please note that this output uses the opposite of the sign convention used for blade pitch angles.; About the local zb3-axis +OutList['Spn8RDxb3'] = False # (deg); Blade 3 local roll (angular/rotational) deflection (relative to the undeflected position) of span station 8. In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local xb3-axis +OutList['Spn8RDyb3'] = False # (deg); Blade 3 local pitch (angular/rotational) deflection (relative to the undeflected position) of span station 8. In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local yb3-axis +OutList['Spn8RDzb3'] = False # (deg); Blade 3 local torsional (angular/rotational) deflection (relative to the undeflected position) of span station 8. This output will always be zero for FAST simulation results. Use it for examining blade torsional deflections of ADAMS simulations run using ADAMS datasets created using the FAST-to-ADAMS preprocessor. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence. Please note that this output uses the opposite of the sign convention used for blade pitch angles.; About the local zb3-axis +OutList['Spn9RDxb3'] = False # (deg); Blade 3 local roll (angular/rotational) deflection (relative to the undeflected position) of span station 9. In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local xb3-axis +OutList['Spn9RDyb3'] = False # (deg); Blade 3 local pitch (angular/rotational) deflection (relative to the undeflected position) of span station 9. In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small blade deflections, so that the rotation sequence does not matter.; About the local yb3-axis +OutList['Spn9RDzb3'] = False # (deg); Blade 3 local torsional (angular/rotational) deflection (relative to the undeflected position) of span station 9. This output will always be zero for FAST simulation results. Use it for examining blade torsional deflections of ADAMS simulations run using ADAMS datasets created using the FAST-to-ADAMS preprocessor. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence. Please note that this output uses the opposite of the sign convention used for blade pitch angles.; About the local zb3-axis + +# Blade Pitch Motions +OutList['PtchPMzc1'] = False # (deg); Blade 1 pitch angle (position); Positive towards feather about the minus zc1- and minus zb1-axes +OutList['PtchPMzb1'] = False # (deg); Blade 1 pitch angle (position); Positive towards feather about the minus zc1- and minus zb1-axes +OutList['BldPitch1'] = False # (deg); Blade 1 pitch angle (position); Positive towards feather about the minus zc1- and minus zb1-axes +OutList['BlPitch1'] = False # (deg); Blade 1 pitch angle (position); Positive towards feather about the minus zc1- and minus zb1-axes +OutList['PtchPMzc2'] = False # (deg); Blade 2 pitch angle (position); Positive towards feather about the minus zc2- and minus zb2-axes +OutList['PtchPMzb2'] = False # (deg); Blade 2 pitch angle (position); Positive towards feather about the minus zc2- and minus zb2-axes +OutList['BldPitch2'] = False # (deg); Blade 2 pitch angle (position); Positive towards feather about the minus zc2- and minus zb2-axes +OutList['BlPitch2'] = False # (deg); Blade 2 pitch angle (position); Positive towards feather about the minus zc2- and minus zb2-axes +OutList['PtchPMzc3'] = False # (deg); Blade 3 pitch angle (position); Positive towards feather about the minus zc3- and minus zb3-axes +OutList['PtchPMzb3'] = False # (deg); Blade 3 pitch angle (position); Positive towards feather about the minus zc3- and minus zb3-axes +OutList['BldPitch3'] = False # (deg); Blade 3 pitch angle (position); Positive towards feather about the minus zc3- and minus zb3-axes +OutList['BlPitch3'] = False # (deg); Blade 3 pitch angle (position); Positive towards feather about the minus zc3- and minus zb3-axes + +# Teeter Motions +OutList['TeetPya'] = False # (deg); Rotor teeter angle (position); About the ya-axis +OutList['RotTeetP'] = False # (deg); Rotor teeter angle (position); About the ya-axis +OutList['TeetDefl'] = False # (deg); Rotor teeter angle (position); About the ya-axis +OutList['TeetVya'] = False # (deg/s); Rotor teeter angular velocity; About the ya-axis +OutList['RotTeetV'] = False # (deg/s); Rotor teeter angular velocity; About the ya-axis +OutList['TeetAya'] = False # (deg/s^2); Rotor teeter angular acceleration; About the ya-axis +OutList['RotTeetA'] = False # (deg/s^2); Rotor teeter angular acceleration; About the ya-axis + +# Shaft Motions +OutList['LSSTipPxa'] = False # (deg); Rotor azimuth angle (position); About the xa- and xs-axes +OutList['LSSTipPxs'] = False # (deg); Rotor azimuth angle (position); About the xa- and xs-axes +OutList['LSSTipP'] = False # (deg); Rotor azimuth angle (position); About the xa- and xs-axes +OutList['Azimuth'] = False # (deg); Rotor azimuth angle (position); About the xa- and xs-axes +OutList['LSSTipVxa'] = False # (rpm); Rotor azimuth angular speed; About the xa- and xs-axes +OutList['LSSTipVxs'] = False # (rpm); Rotor azimuth angular speed; About the xa- and xs-axes +OutList['LSSTipV'] = False # (rpm); Rotor azimuth angular speed; About the xa- and xs-axes +OutList['RotSpeed'] = False # (rpm); Rotor azimuth angular speed; About the xa- and xs-axes +OutList['LSSTipAxa'] = False # (deg/s^2); Rotor azimuth angular acceleration; About the xa- and xs-axes +OutList['LSSTipAxs'] = False # (deg/s^2); Rotor azimuth angular acceleration; About the xa- and xs-axes +OutList['LSSTipA'] = False # (deg/s^2); Rotor azimuth angular acceleration; About the xa- and xs-axes +OutList['RotAccel'] = False # (deg/s^2); Rotor azimuth angular acceleration; About the xa- and xs-axes +OutList['LSSGagPxa'] = False # (deg); Low-speed shaft strain gage azimuth angle (position) (on the gearbox side of the low-speed shaft); About the xa- and xs-axes +OutList['LSSGagPxs'] = False # (deg); Low-speed shaft strain gage azimuth angle (position) (on the gearbox side of the low-speed shaft); About the xa- and xs-axes +OutList['LSSGagP'] = False # (deg); Low-speed shaft strain gage azimuth angle (position) (on the gearbox side of the low-speed shaft); About the xa- and xs-axes +OutList['LSSGagVxa'] = False # (rpm); Low-speed shaft strain gage angular speed (on the gearbox side of the low-speed shaft); About the xa- and xs-axes +OutList['LSSGagVxs'] = False # (rpm); Low-speed shaft strain gage angular speed (on the gearbox side of the low-speed shaft); About the xa- and xs-axes +OutList['LSSGagV'] = False # (rpm); Low-speed shaft strain gage angular speed (on the gearbox side of the low-speed shaft); About the xa- and xs-axes +OutList['LSSGagAxa'] = False # (deg/s^2); Low-speed shaft strain gage angular acceleration (on the gearbox side of the low-speed shaft); About the xa- and xs-axes +OutList['LSSGagAxs'] = False # (deg/s^2); Low-speed shaft strain gage angular acceleration (on the gearbox side of the low-speed shaft); About the xa- and xs-axes +OutList['LSSGagA'] = False # (deg/s^2); Low-speed shaft strain gage angular acceleration (on the gearbox side of the low-speed shaft); About the xa- and xs-axes +OutList['HSShftV'] = False # (rpm); Angular speed of the high-speed shaft and generator; Same sign as LSSGagVxa / LSSGagVxs / LSSGagV +OutList['GenSpeed'] = False # (rpm); Angular speed of the high-speed shaft and generator; Same sign as LSSGagVxa / LSSGagVxs / LSSGagV +OutList['HSShftA'] = False # (deg/s^2); Angular acceleration of the high-speed shaft and generator; Same sign as LSSGagAxa / LSSGagAxs / LSSGagA +OutList['GenAccel'] = False # (deg/s^2); Angular acceleration of the high-speed shaft and generator; Same sign as LSSGagAxa / LSSGagAxs / LSSGagA +OutList['TipSpdRat'] = False # (-); Rotor blade tip speed ratio; N/A +OutList['TSR'] = False # (-); Rotor blade tip speed ratio; N/A + +# Nacelle IMU Motions +OutList['NcIMUTVxs'] = False # (m/s); Nacelle inertial measurement unit translational velocity (absolute); Directed along the xs-axis +OutList['NcIMUTVys'] = False # (m/s); Nacelle inertial measurement unit translational velocity (absolute); Directed along the ys-axis +OutList['NcIMUTVzs'] = False # (m/s); Nacelle inertial measurement unit translational velocity (absolute); Directed along the zs-axis +OutList['NcIMUTAxs'] = False # (m/s^2); Nacelle inertial measurement unit translational acceleration (absolute); Directed along the xs-axis +OutList['NcIMUTAys'] = False # (m/s^2); Nacelle inertial measurement unit translational acceleration (absolute); Directed along the ys-axis +OutList['NcIMUTAzs'] = False # (m/s^2); Nacelle inertial measurement unit translational acceleration (absolute); Directed along the zs-axis +OutList['NcIMURVxs'] = False # (deg/s); Nacelle inertial measurement unit angular (rotational) velocity (absolute); About the xs-axis +OutList['NcIMURVys'] = False # (deg/s); Nacelle inertial measurement unit angular (rotational) velocity (absolute); About the ys-axis +OutList['NcIMURVzs'] = False # (deg/s); Nacelle inertial measurement unit angular (rotational) velocity (absolute); About the zs-axis +OutList['NcIMURAxs'] = False # (deg/s^2); Nacelle inertial measurement unit angular (rotational) acceleration (absolute); About the xs-axis +OutList['NcIMURAys'] = False # (deg/s^2); Nacelle inertial measurement unit angular (rotational) acceleration (absolute); About the ys-axis +OutList['NcIMURAzs'] = False # (deg/s^2); Nacelle inertial measurement unit angular (rotational) acceleration (absolute); About the zs-axis + +# Rotor-Furl Motions +OutList['RotFurlP'] = False # (deg); Rotor-furl angle (position); About the rotor-furl axis +OutList['RotFurl'] = False # (deg); Rotor-furl angle (position); About the rotor-furl axis +OutList['RotFurlV'] = False # (deg/s); Rotor-furl angular velocity; About the rotor-furl axis +OutList['RotFurlA'] = False # (deg/s^2); Rotor-furl angular acceleration; About the rotor-furl axis + +# Tail-Furl Motions +OutList['TailFurlP'] = False # (deg); Tail-furl angle (position); About the tail-furl axis +OutList['TailFurl'] = False # (deg); Tail-furl angle (position); About the tail-furl axis +OutList['TailFurlV'] = False # (deg/s); Tail-furl angular velocity; About the tail-furl axis +OutList['TailFurlA'] = False # (deg/s^2); Tail-furl angular acceleration; About the tail-furl axis + +# Nacelle Yaw Motions +OutList['YawPzn'] = False # (deg); Nacelle yaw angle (position); About the zn- and zp-axes +OutList['YawPzp'] = False # (deg); Nacelle yaw angle (position); About the zn- and zp-axes +OutList['NacYawP'] = False # (deg); Nacelle yaw angle (position); About the zn- and zp-axes +OutList['NacYaw'] = False # (deg); Nacelle yaw angle (position); About the zn- and zp-axes +OutList['YawPos'] = False # (deg); Nacelle yaw angle (position); About the zn- and zp-axes +OutList['YawVzn'] = False # (deg/s); Nacelle yaw angular velocity; About the zn- and zp-axes +OutList['YawVzp'] = False # (deg/s); Nacelle yaw angular velocity; About the zn- and zp-axes +OutList['NacYawV'] = False # (deg/s); Nacelle yaw angular velocity; About the zn- and zp-axes +OutList['YawRate'] = False # (deg/s); Nacelle yaw angular velocity; About the zn- and zp-axes +OutList['YawAzn'] = False # (deg/s^2); Nacelle yaw angular acceleration; About the zn- and zp-axes +OutList['YawAzp'] = False # (deg/s^2); Nacelle yaw angular acceleration; About the zn- and zp-axes +OutList['NacYawA'] = False # (deg/s^2); Nacelle yaw angular acceleration; About the zn- and zp-axes +OutList['YawAccel'] = False # (deg/s^2); Nacelle yaw angular acceleration; About the zn- and zp-axes +OutList['NacYawErr'] = False # (deg); Nacelle yaw error estimate. This is computed as follows: NacYawErr = HorWndDir - YawPzn - YawBrRDzt - PtfmRDzi. This estimate is not accurate instantaneously in the presence of significant tower deflection or platform angular (rotational) displacement since the angles used in the computation are not all defined about the same axis of rotation. However, the estimate should be useful in a yaw controller if averaged over a time scale long enough to diminish the effects of tower and platform motions (i.e., much longer than the period of oscillation).; About the zi-axis + +# Tower-Top / Yaw Bearing Motions +OutList['YawBrTDxp'] = False # (m); Tower-top / yaw bearing fore-aft (translational) deflection (relative to the undeflected position); Directed along the xp-axis +OutList['YawBrTDyp'] = False # (m); Tower-top / yaw bearing side-to-side (translational) deflection (relative to the undeflected position); Directed along the yp-axis +OutList['YawBrTDzp'] = False # (m); Tower-top / yaw bearing axial (translational) deflection (relative to the undeflected position); Directed along the zp-axis +OutList['YawBrTDxt'] = False # (m); Tower-top / yaw bearing fore-aft (translational) deflection (relative to the undeflected position); Directed along the xt-axis +OutList['TTDspFA'] = False # (m); Tower-top / yaw bearing fore-aft (translational) deflection (relative to the undeflected position); Directed along the xt-axis +OutList['YawBrTDyt'] = False # (m); Tower-top / yaw bearing side-to-side (translation) deflection (relative to the undeflected position); Directed along the yt-axis +OutList['TTDspSS'] = False # (m); Tower-top / yaw bearing side-to-side (translation) deflection (relative to the undeflected position); Directed along the yt-axis +OutList['YawBrTDzt'] = False # (m); Tower-top / yaw bearing axial (translational) deflection (relative to the undeflected position); Directed along the zt-axis +OutList['TTDspAx'] = False # (m); Tower-top / yaw bearing axial (translational) deflection (relative to the undeflected position); Directed along the zt-axis +OutList['YawBrTAxp'] = False # (m/s^2); Tower-top / yaw bearing fore-aft (translational) acceleration (absolute); Directed along the xp-axis +OutList['YawBrTAyp'] = False # (m/s^2); Tower-top / yaw bearing side-to-side (translational) acceleration (absolute); Directed along the yp-axis +OutList['YawBrTAzp'] = False # (m/s^2); Tower-top / yaw bearing axial (translational) acceleration (absolute); Directed along the zp-axis +OutList['YawBrRDxt'] = False # (deg); Tower-top / yaw bearing angular (rotational) roll deflection (relative to the undeflected position). In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small tower deflections, so that the rotation sequence does not matter.; About the xt-axis +OutList['TTDspRoll'] = False # (deg); Tower-top / yaw bearing angular (rotational) roll deflection (relative to the undeflected position). In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small tower deflections, so that the rotation sequence does not matter.; About the xt-axis +OutList['YawBrRDyt'] = False # (deg); Tower-top / yaw bearing angular (rotational) pitch deflection (relative to the undeflected position). In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small tower deflections, so that the rotation sequence does not matter.; About the yt-axis +OutList['TTDspPtch'] = False # (deg); Tower-top / yaw bearing angular (rotational) pitch deflection (relative to the undeflected position). In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small tower deflections, so that the rotation sequence does not matter.; About the yt-axis +OutList['YawBrRDzt'] = False # (deg); Tower-top / yaw bearing angular (rotational) torsion deflection (relative to the undeflected position). This output will always be zero for FAST simulation results. Use it for examining tower torsional deflections of ADAMS simulations run using ADAMS datasets created using the FAST-to-ADAMS preprocessor. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence.; About the zt-axis +OutList['TTDspTwst'] = False # (deg); Tower-top / yaw bearing angular (rotational) torsion deflection (relative to the undeflected position). This output will always be zero for FAST simulation results. Use it for examining tower torsional deflections of ADAMS simulations run using ADAMS datasets created using the FAST-to-ADAMS preprocessor. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence.; About the zt-axis +OutList['YawBrRVxp'] = False # (deg/s); Tower-top / yaw bearing angular (rotational) roll velocity (absolute); About the xp-axis +OutList['YawBrRVyp'] = False # (deg/s); Tower-top / yaw bearing angular (rotational) pitch velocity (absolute); About the yp-axis +OutList['YawBrRVzp'] = False # (deg/s); Tower-top / yaw bearing angular (rotational) torsion velocity. This output will always be very close to zero for FAST simulation results. Use it for examining tower torsional deflections of ADAMS simulations run using ADAMS datasets created using the FAST-to-ADAMS preprocessor. (absolute); About the zp-axis +OutList['YawBrRAxp'] = False # (deg/s^2); Tower-top / yaw bearing angular (rotational) roll acceleration (absolute); About the xp-axis +OutList['YawBrRAyp'] = False # (deg/s^2); Tower-top / yaw bearing angular (rotational) pitch acceleration (absolute); About the yp-axis +OutList['YawBrRAzp'] = False # (deg/s^2); Tower-top / yaw bearing angular (rotational) torsion acceleration. This output will always be very close to zero for FAST simulation results. Use it for examining tower torsional deflections of ADAMS simulations run using ADAMS datasets created using the FAST-to-ADAMS preprocessor. (absolute); About the zp-axis + +# Local Tower Motions +OutList['TwHt1ALxt'] = False # (m/s^2); Local tower fore-aft (translational) acceleration (absolute) of tower gage 1 ; Directed along the local xt-axis +OutList['TwHt1ALyt'] = False # (m/s^2); Local tower side-to-side (translational) acceleration (absolute) of tower gage 1 ; Directed along the local yt-axis +OutList['TwHt1ALzt'] = False # (m/s^2); Local tower axial (translational) acceleration (absolute) of tower gage 1 ; Directed along the local zt-axis +OutList['TwHt2ALxt'] = False # (m/s^2); Local tower fore-aft (translational) acceleration (absolute) of tower gage 2; Directed along the local xt-axis +OutList['TwHt2ALyt'] = False # (m/s^2); Local tower side-to-side (translational) acceleration (absolute) of tower gage 2; Directed along the local yt-axis +OutList['TwHt2ALzt'] = False # (m/s^2); Local tower axial (translational) acceleration (absolute) of tower gage 2; Directed along the local zt-axis +OutList['TwHt3ALxt'] = False # (m/s^2); Local tower fore-aft (translational) acceleration (absolute) of tower gage 3; Directed along the local xt-axis +OutList['TwHt3ALyt'] = False # (m/s^2); Local tower side-to-side (translational) acceleration (absolute) of tower gage 3; Directed along the local yt-axis +OutList['TwHt3ALzt'] = False # (m/s^2); Local tower axial (translational) acceleration (absolute) of tower gage 3; Directed along the local zt-axis +OutList['TwHt4ALxt'] = False # (m/s^2); Local tower fore-aft (translational) acceleration (absolute) of tower gage 4; Directed along the local xt-axis +OutList['TwHt4ALyt'] = False # (m/s^2); Local tower side-to-side (translational) acceleration (absolute) of tower gage 4; Directed along the local yt-axis +OutList['TwHt4ALzt'] = False # (m/s^2); Local tower axial (translational) acceleration (absolute) of tower gage 4; Directed along the local zt-axis +OutList['TwHt5ALxt'] = False # (m/s^2); Local tower fore-aft (translational) acceleration (absolute) of tower gage 5; Directed along the local xt-axis +OutList['TwHt5ALyt'] = False # (m/s^2); Local tower side-to-side (translational) acceleration (absolute) of tower gage 5; Directed along the local yt-axis +OutList['TwHt5ALzt'] = False # (m/s^2); Local tower axial (translational) acceleration (absolute) of tower gage 5; Directed along the local zt-axis +OutList['TwHt6ALxt'] = False # (m/s^2); Local tower fore-aft (translational) acceleration (absolute) of tower gage 6; Directed along the local xt-axis +OutList['TwHt6ALyt'] = False # (m/s^2); Local tower side-to-side (translational) acceleration (absolute) of tower gage 6; Directed along the local yt-axis +OutList['TwHt6ALzt'] = False # (m/s^2); Local tower axial (translational) acceleration (absolute) of tower gage 6; Directed along the local zt-axis +OutList['TwHt7ALxt'] = False # (m/s^2); Local tower fore-aft (translational) acceleration (absolute) of tower gage 7; Directed along the local xt-axis +OutList['TwHt7ALyt'] = False # (m/s^2); Local tower side-to-side (translational) acceleration (absolute) of tower gage 7; Directed along the local yt-axis +OutList['TwHt7ALzt'] = False # (m/s^2); Local tower axial (translational) acceleration (absolute) of tower gage 7; Directed along the local zt-axis +OutList['TwHt8ALxt'] = False # (m/s^2); Local tower fore-aft (translational) acceleration (absolute) of tower gage 8; Directed along the local xt-axis +OutList['TwHt8ALyt'] = False # (m/s^2); Local tower side-to-side (translational) acceleration (absolute) of tower gage 8; Directed along the local yt-axis +OutList['TwHt8ALzt'] = False # (m/s^2); Local tower axial (translational) acceleration (absolute) of tower gage 8; Directed along the local zt-axis +OutList['TwHt9ALxt'] = False # (m/s^2); Local tower fore-aft (translational) acceleration (absolute) of tower gage 9; Directed along the local xt-axis +OutList['TwHt9ALyt'] = False # (m/s^2); Local tower side-to-side (translational) acceleration (absolute) of tower gage 9; Directed along the local yt-axis +OutList['TwHt9ALzt'] = False # (m/s^2); Local tower axial (translational) acceleration (absolute) of tower gage 9; Directed along the local zt-axis +OutList['TwHt1TDxt'] = False # (m); Local tower fore-aft (translational) deflection (relative to the undeflected position) of tower gage 1; Directed along the local xt-axis +OutList['TwHt1TDyt'] = False # (m); Local tower side-to-side (translational) deflection (relative to the undeflected position) of tower gage 1; Directed along the local yt-axis +OutList['TwHt1TDzt'] = False # (m); Local tower axial (translational) deflection (relative to the undeflected position) of tower gage 1; Directed along the local zt-axis +OutList['TwHt2TDxt'] = False # (m); Local tower fore-aft (translational) deflection (relative to the undeflected position) of tower gage 2; Directed along the local xt-axis +OutList['TwHt2TDyt'] = False # (m); Local tower side-to-side (translational) deflection (relative to the undeflected position) of tower gage 2; Directed along the local yt-axis +OutList['TwHt2TDzt'] = False # (m); Local tower axial (translational) deflection (relative to the undeflected position) of tower gage 2; Directed along the local zt-axis +OutList['TwHt3TDxt'] = False # (m); Local tower fore-aft (translational) deflection (relative to the undeflected position) of tower gage 3; Directed along the local xt-axis +OutList['TwHt3TDyt'] = False # (m); Local tower side-to-side (translational) deflection (relative to the undeflected position) of tower gage 3; Directed along the local yt-axis +OutList['TwHt3TDzt'] = False # (m); Local tower axial (translational) deflection (relative to the undeflected position) of tower gage 3; Directed along the local zt-axis +OutList['TwHt4TDxt'] = False # (m); Local tower fore-aft (translational) deflection (relative to the undeflected position) of tower gage 4; Directed along the local xt-axis +OutList['TwHt4TDyt'] = False # (m); Local tower side-to-side (translational) deflection (relative to the undeflected position) of tower gage 4; Directed along the local yt-axis +OutList['TwHt4TDzt'] = False # (m); Local tower axial (translational) deflection (relative to the undeflected position) of tower gage 4; Directed along the local zt-axis +OutList['TwHt5TDxt'] = False # (m); Local tower fore-aft (translational) deflection (relative to the undeflected position) of tower gage 5; Directed along the local xt-axis +OutList['TwHt5TDyt'] = False # (m); Local tower side-to-side (translational) deflection (relative to the undeflected position) of tower gage 5; Directed along the local yt-axis +OutList['TwHt5TDzt'] = False # (m); Local tower axial (translational) deflection (relative to the undeflected position) of tower gage 5; Directed along the local zt-axis +OutList['TwHt6TDxt'] = False # (m); Local tower fore-aft (translational) deflection (relative to the undeflected position) of tower gage 6; Directed along the local xt-axis +OutList['TwHt6TDyt'] = False # (m); Local tower side-to-side (translational) deflection (relative to the undeflected position) of tower gage 6; Directed along the local yt-axis +OutList['TwHt6TDzt'] = False # (m); Local tower axial (translational) deflection (relative to the undeflected position) of tower gage 6; Directed along the local zt-axis +OutList['TwHt7TDxt'] = False # (m); Local tower fore-aft (translational) deflection (relative to the undeflected position) of tower gage 7; Directed along the local xt-axis +OutList['TwHt7TDyt'] = False # (m); Local tower side-to-side (translational) deflection (relative to the undeflected position) of tower gage 7; Directed along the local yt-axis +OutList['TwHt7TDzt'] = False # (m); Local tower axial (translational) deflection (relative to the undeflected position) of tower gage 7; Directed along the local zt-axis +OutList['TwHt8TDxt'] = False # (m); Local tower fore-aft (translational) deflection (relative to the undeflected position) of tower gage 8; Directed along the local xt-axis +OutList['TwHt8TDyt'] = False # (m); Local tower side-to-side (translational) deflection (relative to the undeflected position) of tower gage 8; Directed along the local yt-axis +OutList['TwHt8TDzt'] = False # (m); Local tower axial (translational) deflection (relative to the undeflected position) of tower gage 8; Directed along the local zt-axis +OutList['TwHt9TDxt'] = False # (m); Local tower fore-aft (translational) deflection (relative to the undeflected position) of tower gage 9; Directed along the local xt-axis +OutList['TwHt9TDyt'] = False # (m); Local tower side-to-side (translational) deflection (relative to the undeflected position) of tower gage 9; Directed along the local yt-axis +OutList['TwHt9TDzt'] = False # (m); Local tower axial (translational) deflection (relative to the undeflected position) of tower gage 9; Directed along the local zt-axis +OutList['TwHt1RDxt'] = False # (deg); Local tower angular (rotational) roll deflection (relative to the undeflected position) of tower gage 1. In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small tower deflections, so that the rotation sequence does not matter.; About the local xt-axis +OutList['TwHt1RDyt'] = False # (deg); Local tower angular (rotational) pitch deflection (relative to the undeflected position) of tower gage 1. In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small tower deflections, so that the rotation sequence does not matter.; About the local yt-axis +OutList['TwHt1RDzt'] = False # (deg); Local tower angular (rotational) torsion deflection (relative to the undeflected position) of tower gage 1. This output will always be zero for FAST simulation results. Use it for examining tower torsional deflections of ADAMS simulations run using ADAMS datasets created using the FAST-to-ADAMS preprocessor. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence.; About the local zt-axis +OutList['TwHt2RDxt'] = False # (deg); Local tower angular (rotational) roll deflection (relative to the undeflected position) of tower gage 2. In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small tower deflections, so that the rotation sequence does not matter.; About the local xt-axis +OutList['TwHt2RDyt'] = False # (deg); Local tower angular (rotational) pitch deflection (relative to the undeflected position) of tower gage 2. In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small tower deflections, so that the rotation sequence does not matter.; About the local yt-axis +OutList['TwHt2RDzt'] = False # (deg); Local tower angular (rotational) torsion deflection (relative to the undeflected position) of tower gage 2. This output will always be zero for FAST simulation results. Use it for examining tower torsional deflections of ADAMS simulations run using ADAMS datasets created using the FAST-to-ADAMS preprocessor. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence.; About the local zt-axis +OutList['TwHt3RDxt'] = False # (deg); Local tower angular (rotational) roll deflection (relative to the undeflected position) of tower gage 3. In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small tower deflections, so that the rotation sequence does not matter.; About the local xt-axis +OutList['TwHt3RDyt'] = False # (deg); Local tower angular (rotational) pitch deflection (relative to the undeflected position) of tower gage 3. In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small tower deflections, so that the rotation sequence does not matter.; About the local yt-axis +OutList['TwHt3RDzt'] = False # (deg); Local tower angular (rotational) torsion deflection (relative to the undeflected position) of tower gage 3. This output will always be zero for FAST simulation results. Use it for examining tower torsional deflections of ADAMS simulations run using ADAMS datasets created using the FAST-to-ADAMS preprocessor. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence.; About the local zt-axis +OutList['TwHt4RDxt'] = False # (deg); Local tower angular (rotational) roll deflection (relative to the undeflected position) of tower gage 4. In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small tower deflections, so that the rotation sequence does not matter.; About the local xt-axis +OutList['TwHt4RDyt'] = False # (deg); Local tower angular (rotational) pitch deflection (relative to the undeflected position) of tower gage 4. In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small tower deflections, so that the rotation sequence does not matter.; About the local yt-axis +OutList['TwHt4RDzt'] = False # (deg); Local tower angular (rotational) torsion deflection (relative to the undeflected position) of tower gage 4. This output will always be zero for FAST simulation results. Use it for examining tower torsional deflections of ADAMS simulations run using ADAMS datasets created using the FAST-to-ADAMS preprocessor. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence.; About the local zt-axis +OutList['TwHt5RDxt'] = False # (deg); Local tower angular (rotational) roll deflection (relative to the undeflected position) of tower gage 5. In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small tower deflections, so that the rotation sequence does not matter.; About the local xt-axis +OutList['TwHt5RDyt'] = False # (deg); Local tower angular (rotational) pitch deflection (relative to the undeflected position) of tower gage 5. In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small tower deflections, so that the rotation sequence does not matter.; About the local yt-axis +OutList['TwHt5RDzt'] = False # (deg); Local tower angular (rotational) torsion deflection (relative to the undeflected position) of tower gage 5. This output will always be zero for FAST simulation results. Use it for examining tower torsional deflections of ADAMS simulations run using ADAMS datasets created using the FAST-to-ADAMS preprocessor. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence.; About the local zt-axis +OutList['TwHt6RDxt'] = False # (deg); Local tower angular (rotational) roll deflection (relative to the undeflected position) of tower gage 6. In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small tower deflections, so that the rotation sequence does not matter.; About the local xt-axis +OutList['TwHt6RDyt'] = False # (deg); Local tower angular (rotational) pitch deflection (relative to the undeflected position) of tower gage 6. In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small tower deflections, so that the rotation sequence does not matter.; About the local yt-axis +OutList['TwHt6RDzt'] = False # (deg); Local tower angular (rotational) torsion deflection (relative to the undeflected position) of tower gage 6. This output will always be zero for FAST simulation results. Use it for examining tower torsional deflections of ADAMS simulations run using ADAMS datasets created using the FAST-to-ADAMS preprocessor. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence.; About the local zt-axis +OutList['TwHt7RDxt'] = False # (deg); Local tower angular (rotational) roll deflection (relative to the undeflected position) of tower gage 7. In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small tower deflections, so that the rotation sequence does not matter.; About the local xt-axis +OutList['TwHt7RDyt'] = False # (deg); Local tower angular (rotational) pitch deflection (relative to the undeflected position) of tower gage 7. In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small tower deflections, so that the rotation sequence does not matter.; About the local yt-axis +OutList['TwHt7RDzt'] = False # (deg); Local tower angular (rotational) torsion deflection (relative to the undeflected position) of tower gage 7. This output will always be zero for FAST simulation results. Use it for examining tower torsional deflections of ADAMS simulations run using ADAMS datasets created using the FAST-to-ADAMS preprocessor. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence.; About the local zt-axis +OutList['TwHt8RDxt'] = False # (deg); Local tower angular (rotational) roll deflection (relative to the undeflected position) of tower gage 8. In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small tower deflections, so that the rotation sequence does not matter.; About the local xt-axis +OutList['TwHt8RDyt'] = False # (deg); Local tower angular (rotational) pitch deflection (relative to the undeflected position) of tower gage 8. In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small tower deflections, so that the rotation sequence does not matter.; About the local yt-axis +OutList['TwHt8RDzt'] = False # (deg); Local tower angular (rotational) torsion deflection (relative to the undeflected position) of tower gage 8. This output will always be zero for FAST simulation results. Use it for examining tower torsional deflections of ADAMS simulations run using ADAMS datasets created using the FAST-to-ADAMS preprocessor. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence.; About the local zt-axis +OutList['TwHt9RDxt'] = False # (deg); Local tower angular (rotational) roll deflection (relative to the undeflected position) of tower gage 9. In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small tower deflections, so that the rotation sequence does not matter.; About the local xt-axis +OutList['TwHt9RDyt'] = False # (deg); Local tower angular (rotational) pitch deflection (relative to the undeflected position) of tower gage 9. In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small tower deflections, so that the rotation sequence does not matter.; About the local yt-axis +OutList['TwHt9RDzt'] = False # (deg); Local tower angular (rotational) torsion deflection (relative to the undeflected position) of tower gage 9. This output will always be zero for FAST simulation results. Use it for examining tower torsional deflections of ADAMS simulations run using ADAMS datasets created using the FAST-to-ADAMS preprocessor. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence.; About the local zt-axis +OutList['TwHt1TPxi'] = False # (m); xi-component of the translational position (relative to the inertia frame) of tower gage 1; Directed along the local xi-axis +OutList['TwHt1TPyi'] = False # (m); yi-component of the translational position (relative to the inertia frame) of tower gage 1; Directed along the local yi-axis +OutList['TwHt1TPzi'] = False # (m); zi-component of the translational position (relative to ground level [onshore] or MSL [offshore]) of tower gage 1; Directed along the local zi-axis +OutList['TwHt2TPxi'] = False # (m); xi-component of the translational position (relative to the inertia frame) of tower gage 2; Directed along the local xi-axis +OutList['TwHt2TPyi'] = False # (m); yi-component of the translational position (relative to the inertia frame) of tower gage 2; Directed along the local yi-axis +OutList['TwHt2TPzi'] = False # (m); zi-component of the translational position (relative to ground level [onshore] or MSL [offshore]) of tower gage 2; Directed along the local zi-axis +OutList['TwHt3TPxi'] = False # (m); xi-component of the translational position (relative to the inertia frame) of tower gage 3; Directed along the local xi-axis +OutList['TwHt3TPyi'] = False # (m); yi-component of the translational position (relative to the inertia frame) of tower gage 3; Directed along the local yi-axis +OutList['TwHt3TPzi'] = False # (m); zi-component of the translational position (relative to ground level [onshore] or MSL [offshore]) of tower gage 3; Directed along the local zi-axis +OutList['TwHt4TPxi'] = False # (m); xi-component of the translational position (relative to the inertia frame) of tower gage 4; Directed along the local xi-axis +OutList['TwHt4TPyi'] = False # (m); yi-component of the translational position (relative to the inertia frame) of tower gage 4; Directed along the local yi-axis +OutList['TwHt4TPzi'] = False # (m); zi-component of the translational position (relative to ground level [onshore] or MSL [offshore]) of tower gage 4; Directed along the local zi-axis +OutList['TwHt5TPxi'] = False # (m); xi-component of the translational position (relative to the inertia frame) of tower gage 5; Directed along the local xi-axis +OutList['TwHt5TPyi'] = False # (m); yi-component of the translational position (relative to the inertia frame) of tower gage 5; Directed along the local yi-axis +OutList['TwHt5TPzi'] = False # (m); zi-component of the translational position (relative to ground level [onshore] or MSL [offshore]) of tower gage 5; Directed along the local zi-axis +OutList['TwHt6TPxi'] = False # (m); xi-component of the translational position (relative to the inertia frame) of tower gage 6; Directed along the local xi-axis +OutList['TwHt6TPyi'] = False # (m); yi-component of the translational position (relative to the inertia frame) of tower gage 6; Directed along the local yi-axis +OutList['TwHt6TPzi'] = False # (m); zi-component of the translational position (relative to ground level [onshore] or MSL [offshore]) of tower gage 6; Directed along the local zi-axis +OutList['TwHt7TPxi'] = False # (m); xi-component of the translational position (relative to the inertia frame) of tower gage 7; Directed along the local xi-axis +OutList['TwHt7TPyi'] = False # (m); yi-component of the translational position (relative to the inertia frame) of tower gage 7; Directed along the local yi-axis +OutList['TwHt7TPzi'] = False # (m); zi-component of the translational position (relative to ground level [onshore] or MSL [offshore]) of tower gage 7; Directed along the local zi-axis +OutList['TwHt8TPxi'] = False # (m); xi-component of the translational position (relative to the inertia frame) of tower gage 8; Directed along the local xi-axis +OutList['TwHt8TPyi'] = False # (m); yi-component of the translational position (relative to the inertia frame) of tower gage 8; Directed along the local yi-axis +OutList['TwHt8TPzi'] = False # (m); zi-component of the translational position (relative to ground level [onshore] or MSL [offshore]) of tower gage 8; Directed along the local zi-axis +OutList['TwHt9TPxi'] = False # (m); xi-component of the translational position (relative to the inertia frame) of tower gage 9; Directed along the local xi-axis +OutList['TwHt9TPyi'] = False # (m); yi-component of the translational position (relative to the inertia frame) of tower gage 9; Directed along the local yi-axis +OutList['TwHt9TPzi'] = False # (m); zi-component of the translational position (relative to ground level [onshore] or MSL [offshore]) of tower gage 9; Directed along the local zi-axis +OutList['TwHt1RPxi'] = False # (deg); xi-component of the rotational position (relative to the inertia frame) of tower gage 1. In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small tower and platform rotational deflections, so that the rotation sequence does not matter.; About the local xi-axis +OutList['TwHt1RPyi'] = False # (deg); yi-component of the rotational position (relative to the inertia frame) of tower gage 1. In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small tower and platform rotational deflections, so that the rotation sequence does not matter.; About the local yi-axis +OutList['TwHt1RPzi'] = False # (deg); zi-component of the rotational position (relative to the inertia frame) of tower gage 1. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small tower and platform rotational deflections, so that the rotation sequence does not matter.; About the local zi-axis +OutList['TwHt2RPxi'] = False # (deg); xi-component of the rotational position (relative to the inertia frame) of tower gage 2. In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small tower and platform rotational deflections, so that the rotation sequence does not matter.; About the local xi-axis +OutList['TwHt2RPyi'] = False # (deg); yi-component of the rotational position (relative to the inertia frame) of tower gage 2. In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small tower and platform rotational deflections, so that the rotation sequence does not matter.; About the local yi-axis +OutList['TwHt2RPzi'] = False # (deg); zi-component of the rotational position (relative to the inertia frame) of tower gage 2. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small tower and platform rotational deflections, so that the rotation sequence does not matter.; About the local zi-axis +OutList['TwHt3RPxi'] = False # (deg); xi-component of the rotational position (relative to the inertia frame) of tower gage 3. In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small tower and platform rotational deflections, so that the rotation sequence does not matter.; About the local xi-axis +OutList['TwHt3RPyi'] = False # (deg); yi-component of the rotational position (relative to the inertia frame) of tower gage 3. In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small tower and platform rotational deflections, so that the rotation sequence does not matter.; About the local yi-axis +OutList['TwHt3RPzi'] = False # (deg); zi-component of the rotational position (relative to the inertia frame) of tower gage 3. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small tower and platform rotational deflections, so that the rotation sequence does not matter.; About the local zi-axis +OutList['TwHt4RPxi'] = False # (deg); xi-component of the rotational position (relative to the inertia frame) of tower gage 4. In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small tower and platform rotational deflections, so that the rotation sequence does not matter.; About the local xi-axis +OutList['TwHt4RPyi'] = False # (deg); yi-component of the rotational position (relative to the inertia frame) of tower gage 4. In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small tower and platform rotational deflections, so that the rotation sequence does not matter.; About the local yi-axis +OutList['TwHt4RPzi'] = False # (deg); zi-component of the rotational position (relative to the inertia frame) of tower gage 4. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small tower and platform rotational deflections, so that the rotation sequence does not matter.; About the local zi-axis +OutList['TwHt5RPxi'] = False # (deg); xi-component of the rotational position (relative to the inertia frame) of tower gage 5. In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small tower and platform rotational deflections, so that the rotation sequence does not matter.; About the local xi-axis +OutList['TwHt5RPyi'] = False # (deg); yi-component of the rotational position (relative to the inertia frame) of tower gage 5. In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small tower and platform rotational deflections, so that the rotation sequence does not matter.; About the local yi-axis +OutList['TwHt5RPzi'] = False # (deg); zi-component of the rotational position (relative to the inertia frame) of tower gage 5. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small tower and platform rotational deflections, so that the rotation sequence does not matter.; About the local zi-axis +OutList['TwHt6RPxi'] = False # (deg); xi-component of the rotational position (relative to the inertia frame) of tower gage 6. In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small tower and platform rotational deflections, so that the rotation sequence does not matter.; About the local xi-axis +OutList['TwHt6RPyi'] = False # (deg); yi-component of the rotational position (relative to the inertia frame) of tower gage 6. In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small tower and platform rotational deflections, so that the rotation sequence does not matter.; About the local yi-axis +OutList['TwHt6RPzi'] = False # (deg); zi-component of the rotational position (relative to the inertia frame) of tower gage 6. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small tower and platform rotational deflections, so that the rotation sequence does not matter.; About the local zi-axis +OutList['TwHt7RPxi'] = False # (deg); xi-component of the rotational position (relative to the inertia frame) of tower gage 7. In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small tower and platform rotational deflections, so that the rotation sequence does not matter.; About the local xi-axis +OutList['TwHt7RPyi'] = False # (deg); yi-component of the rotational position (relative to the inertia frame) of tower gage 7. In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small tower and platform rotational deflections, so that the rotation sequence does not matter.; About the local yi-axis +OutList['TwHt7RPzi'] = False # (deg); zi-component of the rotational position (relative to the inertia frame) of tower gage 7. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small tower and platform rotational deflections, so that the rotation sequence does not matter.; About the local zi-axis +OutList['TwHt8RPxi'] = False # (deg); xi-component of the rotational position (relative to the inertia frame) of tower gage 8. In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small tower and platform rotational deflections, so that the rotation sequence does not matter.; About the local xi-axis +OutList['TwHt8RPyi'] = False # (deg); yi-component of the rotational position (relative to the inertia frame) of tower gage 8. In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small tower and platform rotational deflections, so that the rotation sequence does not matter.; About the local yi-axis +OutList['TwHt8RPzi'] = False # (deg); zi-component of the rotational position (relative to the inertia frame) of tower gage 8. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small tower and platform rotational deflections, so that the rotation sequence does not matter.; About the local zi-axis +OutList['TwHt9RPxi'] = False # (deg); xi-component of the rotational position (relative to the inertia frame) of tower gage 9. In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small tower and platform rotational deflections, so that the rotation sequence does not matter.; About the local xi-axis +OutList['TwHt9RPyi'] = False # (deg); yi-component of the rotational position (relative to the inertia frame) of tower gage 9. In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small tower and platform rotational deflections, so that the rotation sequence does not matter.; About the local yi-axis +OutList['TwHt9RPzi'] = False # (deg); zi-component of the rotational position (relative to the inertia frame) of tower gage 9. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small tower and platform rotational deflections, so that the rotation sequence does not matter.; About the local zi-axis + +# Platform Motions +OutList['PtfmTDxt'] = False # (m); Platform horizontal surge (translational) displacement; Directed along the xt-axis +OutList['PtfmTDyt'] = False # (m); Platform horizontal sway (translational) displacement; Directed along the yt-axis +OutList['PtfmTDzt'] = False # (m); Platform vertical heave (translational) displacement; Directed along the zt-axis +OutList['PtfmTDxi'] = False # (m); Platform horizontal surge (translational) displacement; Directed along the xi-axis +OutList['PtfmSurge'] = False # (m); Platform horizontal surge (translational) displacement; Directed along the xi-axis +OutList['PtfmTDyi'] = False # (m); Platform horizontal sway (translational) displacement; Directed along the yi-axis +OutList['PtfmSway'] = False # (m); Platform horizontal sway (translational) displacement; Directed along the yi-axis +OutList['PtfmTDzi'] = False # (m); Platform vertical heave (translational) displacement; Directed along the zi-axis +OutList['PtfmHeave'] = False # (m); Platform vertical heave (translational) displacement; Directed along the zi-axis +OutList['PtfmTVxt'] = False # (m/s); Platform horizontal surge (translational) velocity; Directed along the xt-axis +OutList['PtfmTVyt'] = False # (m/s); Platform horizontal sway (translational) velocity; Directed along the yt-axis +OutList['PtfmTVzt'] = False # (m/s); Platform vertical heave (translational) velocity; Directed along the zt-axis +OutList['PtfmTVxi'] = False # (m/s); Platform horizontal surge (translational) velocity; Directed along the xi-axis +OutList['PtfmTVyi'] = False # (m/s); Platform horizontal sway (translational) velocity; Directed along the yi-axis +OutList['PtfmTVzi'] = False # (m/s); Platform vertical heave (translational) velocity; Directed along the zi-axis +OutList['PtfmTAxt'] = False # (m/s^2); Platform horizontal surge (translational) acceleration; Directed along the xt-axis +OutList['PtfmTAyt'] = False # (m/s^2); Platform horizontal sway (translational) acceleration; Directed along the yt-axis +OutList['PtfmTAzt'] = False # (m/s^2); Platform vertical heave (translational) acceleration; Directed along the zt-axis +OutList['PtfmTAxi'] = False # (m/s^2); Platform horizontal surge (translational) acceleration; Directed along the xi-axis +OutList['PtfmTAyi'] = False # (m/s^2); Platform horizontal sway (translational) acceleration; Directed along the yi-axis +OutList['PtfmTAzi'] = False # (m/s^2); Platform vertical heave (translational) acceleration; Directed along the zi-axis +OutList['PtfmRDxi'] = False # (deg); Platform roll tilt angular (rotational) displacement. In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small rotational platform displacements, so that the rotation sequence does not matter.; About the xi-axis +OutList['PtfmRoll'] = False # (deg); Platform roll tilt angular (rotational) displacement. In ADAMS, it is output as an Euler angle computed as the 3rd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small rotational platform displacements, so that the rotation sequence does not matter.; About the xi-axis +OutList['PtfmRDyi'] = False # (deg); Platform pitch tilt angular (rotational) displacement. In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small rotational platform displacements, so that the rotation sequence does not matter.; About the yi-axis +OutList['PtfmPitch'] = False # (deg); Platform pitch tilt angular (rotational) displacement. In ADAMS, it is output as an Euler angle computed as the 2nd rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small rotational platform displacements, so that the rotation sequence does not matter.; About the yi-axis +OutList['PtfmRDzi'] = False # (deg); Platform yaw angular (rotational) displacement. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small rotational platform displacements, so that the rotation sequence does not matter.; About the zi-axis +OutList['PtfmYaw'] = False # (deg); Platform yaw angular (rotational) displacement. In ADAMS, it is output as an Euler angle computed as the 1st rotation in the yaw-pitch-roll rotation sequence. It is not output as an Euler angle in FAST, which assumes small rotational platform displacements, so that the rotation sequence does not matter.; About the zi-axis +OutList['PtfmRVxt'] = False # (deg/s); Platform roll tilt angular (rotational) velocity; About the xt-axis +OutList['PtfmRVyt'] = False # (deg/s); Platform pitch tilt angular (rotational) velocity; About the yt-axis +OutList['PtfmRVzt'] = False # (deg/s); Platform yaw angular (rotational) velocity; About the zt-axis +OutList['PtfmRVxi'] = False # (deg/s); Platform roll tilt angular (rotational) velocity; About the xi-axis +OutList['PtfmRVyi'] = False # (deg/s); Platform pitch tilt angular (rotational) velocity; About the yi-axis +OutList['PtfmRVzi'] = False # (deg/s); Platform yaw angular (rotational) velocity; About the zi-axis +OutList['PtfmRAxt'] = False # (deg/s^2); Platform roll tilt angular (rotational) acceleration; About the xt-axis +OutList['PtfmRAyt'] = False # (deg/s^2); Platform pitch tilt angular (rotational) acceleration; About the yt-axis +OutList['PtfmRAzt'] = False # (deg/s^2); Platform yaw angular (rotational) acceleration; About the zt-axis +OutList['PtfmRAxi'] = False # (deg/s^2); Platform roll tilt angular (rotational) acceleration; About the xi-axis +OutList['PtfmRAyi'] = False # (deg/s^2); Platform pitch tilt angular (rotational) acceleration; About the yi-axis +OutList['PtfmRAzi'] = False # (deg/s^2); Platform yaw angular (rotational) acceleration; About the zi-axis + +# Blade 1 Root Loads +OutList['RootFxc1'] = False # (kN); Blade 1 out-of-plane shear force at the blade root; Directed along the xc1-axis +OutList['RootFyc1'] = False # (kN); Blade 1 in-plane shear force at the blade root; Directed along the yc1-axis +OutList['RootFzc1'] = False # (kN); Blade 1 axial force at the blade root; Directed along the zc1- and zb1-axes +OutList['RootFzb1'] = False # (kN); Blade 1 axial force at the blade root; Directed along the zc1- and zb1-axes +OutList['RootFxb1'] = False # (kN); Blade 1 flapwise shear force at the blade root; Directed along the xb1-axis +OutList['RootFyb1'] = False # (kN); Blade 1 edgewise shear force at the blade root; Directed along the yb1-axis +OutList['RootMxc1'] = False # (kN m); Blade 1 in-plane moment (i.e., the moment caused by in-plane forces) at the blade root; About the xc1-axis +OutList['RootMIP1'] = False # (kN m); Blade 1 in-plane moment (i.e., the moment caused by in-plane forces) at the blade root; About the xc1-axis +OutList['RootMyc1'] = False # (kN m); Blade 1 out-of-plane moment (i.e., the moment caused by out-of-plane forces) at the blade root; About the yc1-axis +OutList['RootMOoP1'] = False # (kN m); Blade 1 out-of-plane moment (i.e., the moment caused by out-of-plane forces) at the blade root; About the yc1-axis +OutList['RootMzc1'] = False # (kN m); Blade 1 pitching moment at the blade root; About the zc1- and zb1-axes +OutList['RootMzb1'] = False # (kN m); Blade 1 pitching moment at the blade root; About the zc1- and zb1-axes +OutList['RootMxb1'] = False # (kN m); Blade 1 edgewise moment (i.e., the moment caused by edgewise forces) at the blade root; About the xb1-axis +OutList['RootMEdg1'] = False # (kN m); Blade 1 edgewise moment (i.e., the moment caused by edgewise forces) at the blade root; About the xb1-axis +OutList['RootMyb1'] = True # (kN m); Blade 1 flapwise moment (i.e., the moment caused by flapwise forces) at the blade root; About the yb1-axis +OutList['RootMFlp1'] = False # (kN m); Blade 1 flapwise moment (i.e., the moment caused by flapwise forces) at the blade root; About the yb1-axis + +# Blade 2 Root Loads +OutList['RootFxc2'] = False # (kN); Blade 2 out-of-plane shear force at the blade root; Directed along the xc2-axis +OutList['RootFyc2'] = False # (kN); Blade 2 in-plane shear force at the blade root; Directed along the yc2-axis +OutList['RootFzc2'] = False # (kN); Blade 2 axial force at the blade root; Directed along the zc2- and zb2-axes +OutList['RootFzb2'] = False # (kN); Blade 2 axial force at the blade root; Directed along the zc2- and zb2-axes +OutList['RootFxb2'] = False # (kN); Blade 2 flapwise shear force at the blade root; Directed along the xb2-axis +OutList['RootFyb2'] = False # (kN); Blade 2 edgewise shear force at the blade root; Directed along the yb2-axis +OutList['RootMxc2'] = False # (kN m); Blade 2 in-plane moment (i.e., the moment caused by in-plane forces) at the blade root; About the xc2-axis +OutList['RootMIP2'] = False # (kN m); Blade 2 in-plane moment (i.e., the moment caused by in-plane forces) at the blade root; About the xc2-axis +OutList['RootMyc2'] = False # (kN m); Blade 2 out-of-plane moment (i.e., the moment caused by out-of-plane forces) at the blade root; About the yc2-axis +OutList['RootMOoP2'] = False # (kN m); Blade 2 out-of-plane moment (i.e., the moment caused by out-of-plane forces) at the blade root; About the yc2-axis +OutList['RootMzc2'] = False # (kN m); Blade 2 pitching moment at the blade root; About the zc2- and zb2-axes +OutList['RootMzb2'] = False # (kN m); Blade 2 pitching moment at the blade root; About the zc2- and zb2-axes +OutList['RootMxb2'] = False # (kN m); Blade 2 edgewise moment (i.e., the moment caused by edgewise forces) at the blade root; About the xb2-axis +OutList['RootMEdg2'] = False # (kN m); Blade 2 edgewise moment (i.e., the moment caused by edgewise forces) at the blade root; About the xb2-axis +OutList['RootMyb2'] = True # (kN m); Blade 2 flapwise moment (i.e., the moment caused by flapwise forces) at the blade root; About the yb2-axis +OutList['RootMFlp2'] = False # (kN m); Blade 2 flapwise moment (i.e., the moment caused by flapwise forces) at the blade root; About the yb2-axis + +# Blade 3 Root Loads +OutList['RootFxc3'] = False # (kN); Blade 3 out-of-plane shear force at the blade root; Directed along the xc3-axis +OutList['RootFyc3'] = False # (kN); Blade 3 in-plane shear force at the blade root; Directed along the yc3-axis +OutList['RootFzc3'] = False # (kN); Blade 3 axial force at the blade root; Directed along the zc3- and zb3-axes +OutList['RootFzb3'] = False # (kN); Blade 3 axial force at the blade root; Directed along the zc3- and zb3-axes +OutList['RootFxb3'] = False # (kN); Blade 3 flapwise shear force at the blade root; Directed along the xb3-axis +OutList['RootFyb3'] = False # (kN); Blade 3 edgewise shear force at the blade root; Directed along the yb3-axis +OutList['RootMxc3'] = False # (kN m); Blade 3 in-plane moment (i.e., the moment caused by in-plane forces) at the blade root; About the xc3-axis +OutList['RootMIP3'] = False # (kN m); Blade 3 in-plane moment (i.e., the moment caused by in-plane forces) at the blade root; About the xc3-axis +OutList['RootMyc3'] = False # (kN m); Blade 3 out-of-plane moment (i.e., the moment caused by out-of-plane forces) at the blade root; About the yc3-axis +OutList['RootMOoP3'] = False # (kN m); Blade 3 out-of-plane moment (i.e., the moment caused by out-of-plane forces) at the blade root; About the yc3-axis +OutList['RootMzc3'] = False # (kN m); Blade 3 pitching moment at the blade root; About the zc3- and zb3-axes +OutList['RootMzb3'] = False # (kN m); Blade 3 pitching moment at the blade root; About the zc3- and zb3-axes +OutList['RootMxb3'] = False # (kN m); Blade 3 edgewise moment (i.e., the moment caused by edgewise forces) at the blade root; About the xb3-axis +OutList['RootMEdg3'] = False # (kN m); Blade 3 edgewise moment (i.e., the moment caused by edgewise forces) at the blade root; About the xb3-axis +OutList['RootMyb3'] = True # (kN m); Blade 3 flapwise moment (i.e., the moment caused by flapwise forces) at the blade root; About the yb3-axis +OutList['RootMFlp3'] = False # (kN m); Blade 3 flapwise moment (i.e., the moment caused by flapwise forces) at the blade root; About the yb3-axis + +# Blade 1 Local Span Loads +OutList['Spn1MLxb1'] = False # (kN m); Blade 1 local edgewise moment at span station 1; About the local xb1-axis +OutList['Spn1MLyb1'] = False # (kN m); Blade 1 local flapwise moment at span station 1; About the local yb1-axis +OutList['Spn1MLzb1'] = False # (kN m); Blade 1 local pitching moment at span station 1; About the local zb1-axis +OutList['Spn2MLxb1'] = False # (kN m); Blade 1 local edgewise moment at span station 2; About the local xb1-axis +OutList['Spn2MLyb1'] = False # (kN m); Blade 1 local flapwise moment at span station 2; About the local yb1-axis +OutList['Spn2MLzb1'] = False # (kN m); Blade 1 local pitching moment at span station 2; About the local zb1-axis +OutList['Spn3MLxb1'] = False # (kN m); Blade 1 local edgewise moment at span station 3; About the local xb1-axis +OutList['Spn3MLyb1'] = False # (kN m); Blade 1 local flapwise moment at span station 3; About the local yb1-axis +OutList['Spn3MLzb1'] = False # (kN m); Blade 1 local pitching moment at span station 3; About the local zb1-axis +OutList['Spn4MLxb1'] = False # (kN m); Blade 1 local edgewise moment at span station 4; About the local xb1-axis +OutList['Spn4MLyb1'] = False # (kN m); Blade 1 local flapwise moment at span station 4; About the local yb1-axis +OutList['Spn4MLzb1'] = False # (kN m); Blade 1 local pitching moment at span station 4; About the local zb1-axis +OutList['Spn5MLxb1'] = False # (kN m); Blade 1 local edgewise moment at span station 5; About the local xb1-axis +OutList['Spn5MLyb1'] = False # (kN m); Blade 1 local flapwise moment at span station 5; About the local yb1-axis +OutList['Spn5MLzb1'] = False # (kN m); Blade 1 local pitching moment at span station 5; About the local zb1-axis +OutList['Spn6MLxb1'] = False # (kN m); Blade 1 local edgewise moment at span station 6; About the local xb1-axis +OutList['Spn6MLyb1'] = False # (kN m); Blade 1 local flapwise moment at span station 6; About the local yb1-axis +OutList['Spn6MLzb1'] = False # (kN m); Blade 1 local pitching moment at span station 6; About the local zb1-axis +OutList['Spn7MLxb1'] = False # (kN m); Blade 1 local edgewise moment at span station 7; About the local xb1-axis +OutList['Spn7MLyb1'] = False # (kN m); Blade 1 local flapwise moment at span station 7; About the local yb1-axis +OutList['Spn7MLzb1'] = False # (kN m); Blade 1 local pitching moment at span station 7; About the local zb1-axis +OutList['Spn8MLxb1'] = False # (kN m); Blade 1 local edgewise moment at span station 8; About the local xb1-axis +OutList['Spn8MLyb1'] = False # (kN m); Blade 1 local flapwise moment at span station 8; About the local yb1-axis +OutList['Spn8MLzb1'] = False # (kN m); Blade 1 local pitching moment at span station 8; About the local zb1-axis +OutList['Spn9MLxb1'] = False # (kN m); Blade 1 local edgewise moment at span station 9; About the local xb1-axis +OutList['Spn9MLyb1'] = False # (kN m); Blade 1 local flapwise moment at span station 9; About the local yb1-axis +OutList['Spn9MLzb1'] = False # (kN m); Blade 1 local pitching moment at span station 9; About the local zb1-axis +OutList['Spn1FLxb1'] = False # (kN); Blade 1 local flapwise shear force at span station 1; Directed along the local xb1-axis +OutList['Spn1FLyb1'] = False # (kN); Blade 1 local edgewise shear force at span station 1; Directed along the local yb1-axis +OutList['Spn1FLzb1'] = False # (kN); Blade 1 local axial force at span station 1; Directed along the local zb1-axis +OutList['Spn2FLxb1'] = False # (kN); Blade 1 local flapwise shear force at span station 2; Directed along the local xb1-axis +OutList['Spn2FLyb1'] = False # (kN); Blade 1 local edgewise shear force at span station 2; Directed along the local yb1-axis +OutList['Spn2FLzb1'] = False # (kN); Blade 1 local axial force at span station 2; Directed along the local zb1-axis +OutList['Spn3FLxb1'] = False # (kN); Blade 1 local flapwise shear force at span station 3; Directed along the local xb1-axis +OutList['Spn3FLyb1'] = False # (kN); Blade 1 local edgewise shear force at span station 3; Directed along the local yb1-axis +OutList['Spn3FLzb1'] = False # (kN); Blade 1 local axial force at span station 3; Directed along the local zb1-axis +OutList['Spn4FLxb1'] = False # (kN); Blade 1 local flapwise shear force at span station 4; Directed along the local xb1-axis +OutList['Spn4FLyb1'] = False # (kN); Blade 1 local edgewise shear force at span station 4; Directed along the local yb1-axis +OutList['Spn4FLzb1'] = False # (kN); Blade 1 local axial force at span station 4; Directed along the local zb1-axis +OutList['Spn5FLxb1'] = False # (kN); Blade 1 local flapwise shear force at span station 5; Directed along the local xb1-axis +OutList['Spn5FLyb1'] = False # (kN); Blade 1 local edgewise shear force at span station 5; Directed along the local yb1-axis +OutList['Spn5FLzb1'] = False # (kN); Blade 1 local axial force at span station 5; Directed along the local zb1-axis +OutList['Spn6FLxb1'] = False # (kN); Blade 1 local flapwise shear force at span station 6; Directed along the local xb1-axis +OutList['Spn6FLyb1'] = False # (kN); Blade 1 local edgewise shear force at span station 6; Directed along the local yb1-axis +OutList['Spn6FLzb1'] = False # (kN); Blade 1 local axial force at span station 6; Directed along the local zb1-axis +OutList['Spn7FLxb1'] = False # (kN); Blade 1 local flapwise shear force at span station 7; Directed along the local xb1-axis +OutList['Spn7FLyb1'] = False # (kN); Blade 1 local edgewise shear force at span station 7; Directed along the local yb1-axis +OutList['Spn7FLzb1'] = False # (kN); Blade 1 local axial force at span station 7; Directed along the local zb1-axis +OutList['Spn8FLxb1'] = False # (kN); Blade 1 local flapwise shear force at span station 8; Directed along the local xb1-axis +OutList['Spn8FLyb1'] = False # (kN); Blade 1 local edgewise shear force at span station 8; Directed along the local yb1-axis +OutList['Spn8FLzb1'] = False # (kN); Blade 1 local axial force at span station 8; Directed along the local zb1-axis +OutList['Spn9FLxb1'] = False # (kN); Blade 1 local flapwise shear force at span station 9; Directed along the local xb1-axis +OutList['Spn9FLyb1'] = False # (kN); Blade 1 local edgewise shear force at span station 9; Directed along the local yb1-axis +OutList['Spn9FLzb1'] = False # (kN); Blade 1 local axial force at span station 9; Directed along the local zb1-axis + +# Blade 2 Local Span Loads +OutList['Spn1MLxb2'] = False # (kN m); Blade 2 local edgewise moment at span station 1; About the local xb2-axis +OutList['Spn1MLyb2'] = False # (kN m); Blade 2 local flapwise moment at span station 1; About the local yb2-axis +OutList['Spn1MLzb2'] = False # (kN m); Blade 2 local pitching moment at span station 1; About the local zb2-axis +OutList['Spn2MLxb2'] = False # (kN m); Blade 2 local edgewise moment at span station 2; About the local xb2-axis +OutList['Spn2MLyb2'] = False # (kN m); Blade 2 local flapwise moment at span station 2; About the local yb2-axis +OutList['Spn2MLzb2'] = False # (kN m); Blade 2 local pitching moment at span station 2; About the local zb2-axis +OutList['Spn3MLxb2'] = False # (kN m); Blade 2 local edgewise moment at span station 3; About the local xb2-axis +OutList['Spn3MLyb2'] = False # (kN m); Blade 2 local flapwise moment at span station 3; About the local yb2-axis +OutList['Spn3MLzb2'] = False # (kN m); Blade 2 local pitching moment at span station 3; About the local zb2-axis +OutList['Spn4MLxb2'] = False # (kN m); Blade 2 local edgewise moment at span station 4; About the local xb2-axis +OutList['Spn4MLyb2'] = False # (kN m); Blade 2 local flapwise moment at span station 4; About the local yb2-axis +OutList['Spn4MLzb2'] = False # (kN m); Blade 2 local pitching moment at span station 4; About the local zb2-axis +OutList['Spn5MLxb2'] = False # (kN m); Blade 2 local edgewise moment at span station 5; About the local xb2-axis +OutList['Spn5MLyb2'] = False # (kN m); Blade 2 local flapwise moment at span station 5; About the local yb2-axis +OutList['Spn5MLzb2'] = False # (kN m); Blade 2 local pitching moment at span station 5; About the local zb2-axis +OutList['Spn6MLxb2'] = False # (kN m); Blade 2 local edgewise moment at span station 6; About the local xb2-axis +OutList['Spn6MLyb2'] = False # (kN m); Blade 2 local flapwise moment at span station 6; About the local yb2-axis +OutList['Spn6MLzb2'] = False # (kN m); Blade 2 local pitching moment at span station 6; About the local zb2-axis +OutList['Spn7MLxb2'] = False # (kN m); Blade 2 local edgewise moment at span station 7; About the local xb2-axis +OutList['Spn7MLyb2'] = False # (kN m); Blade 2 local flapwise moment at span station 7; About the local yb2-axis +OutList['Spn7MLzb2'] = False # (kN m); Blade 2 local pitching moment at span station 7; About the local zb2-axis +OutList['Spn8MLxb2'] = False # (kN m); Blade 2 local edgewise moment at span station 8; About the local xb2-axis +OutList['Spn8MLyb2'] = False # (kN m); Blade 2 local flapwise moment at span station 8; About the local yb2-axis +OutList['Spn8MLzb2'] = False # (kN m); Blade 2 local pitching moment at span station 8; About the local zb2-axis +OutList['Spn9MLxb2'] = False # (kN m); Blade 2 local edgewise moment at span station 9; About the local xb2-axis +OutList['Spn9MLyb2'] = False # (kN m); Blade 2 local flapwise moment at span station 9; About the local yb2-axis +OutList['Spn9MLzb2'] = False # (kN m); Blade 2 local pitching moment at span station 9; About the local zb2-axis +OutList['Spn1FLxb2'] = False # (kN); Blade 2 local flapwise shear force at span station 1; Directed along the local xb2-axis +OutList['Spn1FLyb2'] = False # (kN); Blade 2 local edgewise shear force at span station 1; Directed along the local yb2-axis +OutList['Spn1FLzb2'] = False # (kN); Blade 2 local axial force at span station 1; Directed along the local zb2-axis +OutList['Spn2FLxb2'] = False # (kN); Blade 2 local flapwise shear force at span station 2; Directed along the local xb2-axis +OutList['Spn2FLyb2'] = False # (kN); Blade 2 local edgewise shear force at span station 2; Directed along the local yb2-axis +OutList['Spn2FLzb2'] = False # (kN); Blade 2 local axial force at span station 2; Directed along the local zb2-axis +OutList['Spn3FLxb2'] = False # (kN); Blade 2 local flapwise shear force at span station 3; Directed along the local xb2-axis +OutList['Spn3FLyb2'] = False # (kN); Blade 2 local edgewise shear force at span station 3; Directed along the local yb2-axis +OutList['Spn3FLzb2'] = False # (kN); Blade 2 local axial force at span station 3; Directed along the local zb2-axis +OutList['Spn4FLxb2'] = False # (kN); Blade 2 local flapwise shear force at span station 4; Directed along the local xb2-axis +OutList['Spn4FLyb2'] = False # (kN); Blade 2 local edgewise shear force at span station 4; Directed along the local yb2-axis +OutList['Spn4FLzb2'] = False # (kN); Blade 2 local axial force at span station 4; Directed along the local zb2-axis +OutList['Spn5FLxb2'] = False # (kN); Blade 2 local flapwise shear force at span station 5; Directed along the local xb2-axis +OutList['Spn5FLyb2'] = False # (kN); Blade 2 local edgewise shear force at span station 5; Directed along the local yb2-axis +OutList['Spn5FLzb2'] = False # (kN); Blade 2 local axial force at span station 5; Directed along the local zb2-axis +OutList['Spn6FLxb2'] = False # (kN); Blade 2 local flapwise shear force at span station 6; Directed along the local xb2-axis +OutList['Spn6FLyb2'] = False # (kN); Blade 2 local edgewise shear force at span station 6; Directed along the local yb2-axis +OutList['Spn6FLzb2'] = False # (kN); Blade 2 local axial force at span station 6; Directed along the local zb2-axis +OutList['Spn7FLxb2'] = False # (kN); Blade 2 local flapwise shear force at span station 7; Directed along the local xb2-axis +OutList['Spn7FLyb2'] = False # (kN); Blade 2 local edgewise shear force at span station 7; Directed along the local yb2-axis +OutList['Spn7FLzb2'] = False # (kN); Blade 2 local axial force at span station 7; Directed along the local zb2-axis +OutList['Spn8FLxb2'] = False # (kN); Blade 2 local flapwise shear force at span station 8; Directed along the local xb2-axis +OutList['Spn8FLyb2'] = False # (kN); Blade 2 local edgewise shear force at span station 8; Directed along the local yb2-axis +OutList['Spn8FLzb2'] = False # (kN); Blade 2 local axial force at span station 8; Directed along the local zb2-axis +OutList['Spn9FLxb2'] = False # (kN); Blade 2 local flapwise shear force at span station 9; Directed along the local xb2-axis +OutList['Spn9FLyb2'] = False # (kN); Blade 2 local edgewise shear force at span station 9; Directed along the local yb2-axis +OutList['Spn9FLzb2'] = False # (kN); Blade 2 local axial force at span station 9; Directed along the local zb2-axis + +# Blade 3 Local Span Loads +OutList['Spn1MLxb3'] = False # (kN m); Blade 3 local edgewise moment at span station 1; About the local xb3-axis +OutList['Spn1MLyb3'] = False # (kN m); Blade 3 local flapwise moment at span station 1; About the local yb3-axis +OutList['Spn1MLzb3'] = False # (kN m); Blade 3 local pitching moment at span station 1; About the local zb3-axis +OutList['Spn2MLxb3'] = False # (kN m); Blade 3 local edgewise moment at span station 2; About the local xb3-axis +OutList['Spn2MLyb3'] = False # (kN m); Blade 3 local flapwise moment at span station 2; About the local yb3-axis +OutList['Spn2MLzb3'] = False # (kN m); Blade 3 local pitching moment at span station 2; About the local zb3-axis +OutList['Spn3MLxb3'] = False # (kN m); Blade 3 local edgewise moment at span station 3; About the local xb3-axis +OutList['Spn3MLyb3'] = False # (kN m); Blade 3 local flapwise moment at span station 3; About the local yb3-axis +OutList['Spn3MLzb3'] = False # (kN m); Blade 3 local pitching moment at span station 3; About the local zb3-axis +OutList['Spn4MLxb3'] = False # (kN m); Blade 3 local edgewise moment at span station 4; About the local xb3-axis +OutList['Spn4MLyb3'] = False # (kN m); Blade 3 local flapwise moment at span station 4; About the local yb3-axis +OutList['Spn4MLzb3'] = False # (kN m); Blade 3 local pitching moment at span station 4; About the local zb3-axis +OutList['Spn5MLxb3'] = False # (kN m); Blade 3 local edgewise moment at span station 5; About the local xb3-axis +OutList['Spn5MLyb3'] = False # (kN m); Blade 3 local flapwise moment at span station 5; About the local yb3-axis +OutList['Spn5MLzb3'] = False # (kN m); Blade 3 local pitching moment at span station 5; About the local zb3-axis +OutList['Spn6MLxb3'] = False # (kN m); Blade 3 local edgewise moment at span station 6; About the local xb3-axis +OutList['Spn6MLyb3'] = False # (kN m); Blade 3 local flapwise moment at span station 6; About the local yb3-axis +OutList['Spn6MLzb3'] = False # (kN m); Blade 3 local pitching moment at span station 6; About the local zb3-axis +OutList['Spn7MLxb3'] = False # (kN m); Blade 3 local edgewise moment at span station 7; About the local xb3-axis +OutList['Spn7MLyb3'] = False # (kN m); Blade 3 local flapwise moment at span station 7; About the local yb3-axis +OutList['Spn7MLzb3'] = False # (kN m); Blade 3 local pitching moment at span station 7; About the local zb3-axis +OutList['Spn8MLxb3'] = False # (kN m); Blade 3 local edgewise moment at span station 8; About the local xb3-axis +OutList['Spn8MLyb3'] = False # (kN m); Blade 3 local flapwise moment at span station 8; About the local yb3-axis +OutList['Spn8MLzb3'] = False # (kN m); Blade 3 local pitching moment at span station 8; About the local zb3-axis +OutList['Spn9MLxb3'] = False # (kN m); Blade 3 local edgewise moment at span station 9; About the local xb3-axis +OutList['Spn9MLyb3'] = False # (kN m); Blade 3 local flapwise moment at span station 9; About the local yb3-axis +OutList['Spn9MLzb3'] = False # (kN m); Blade 3 local pitching moment at span station 9; About the local zb3-axis +OutList['Spn1FLxb3'] = False # (kN); Blade 3 local flapwise shear force at span station 1; Directed along the local xb3-axis +OutList['Spn1FLyb3'] = False # (kN); Blade 3 local edgewise shear force at span station 1; Directed along the local yb3-axis +OutList['Spn1FLzb3'] = False # (kN); Blade 3 local axial force at span station 1; Directed along the local zb3-axis +OutList['Spn2FLxb3'] = False # (kN); Blade 3 local flapwise shear force at span station 2; Directed along the local xb3-axis +OutList['Spn2FLyb3'] = False # (kN); Blade 3 local edgewise shear force at span station 2; Directed along the local yb3-axis +OutList['Spn2FLzb3'] = False # (kN); Blade 3 local axial force at span station 2; Directed along the local zb3-axis +OutList['Spn3FLxb3'] = False # (kN); Blade 3 local flapwise shear force at span station 3; Directed along the local xb3-axis +OutList['Spn3FLyb3'] = False # (kN); Blade 3 local edgewise shear force at span station 3; Directed along the local yb3-axis +OutList['Spn3FLzb3'] = False # (kN); Blade 3 local axial force at span station 3; Directed along the local zb3-axis +OutList['Spn4FLxb3'] = False # (kN); Blade 3 local flapwise shear force at span station 4; Directed along the local xb3-axis +OutList['Spn4FLyb3'] = False # (kN); Blade 3 local edgewise shear force at span station 4; Directed along the local yb3-axis +OutList['Spn4FLzb3'] = False # (kN); Blade 3 local axial force at span station 4; Directed along the local zb3-axis +OutList['Spn5FLxb3'] = False # (kN); Blade 3 local flapwise shear force at span station 5; Directed along the local xb3-axis +OutList['Spn5FLyb3'] = False # (kN); Blade 3 local edgewise shear force at span station 5; Directed along the local yb3-axis +OutList['Spn5FLzb3'] = False # (kN); Blade 3 local axial force at span station 5; Directed along the local zb3-axis +OutList['Spn6FLxb3'] = False # (kN); Blade 3 local flapwise shear force at span station 6; Directed along the local xb3-axis +OutList['Spn6FLyb3'] = False # (kN); Blade 3 local edgewise shear force at span station 6; Directed along the local yb3-axis +OutList['Spn6FLzb3'] = False # (kN); Blade 3 local axial force at span station 6; Directed along the local zb3-axis +OutList['Spn7FLxb3'] = False # (kN); Blade 3 local flapwise shear force at span station 7; Directed along the local xb3-axis +OutList['Spn7FLyb3'] = False # (kN); Blade 3 local edgewise shear force at span station 7; Directed along the local yb3-axis +OutList['Spn7FLzb3'] = False # (kN); Blade 3 local axial force at span station 7; Directed along the local zb3-axis +OutList['Spn8FLxb3'] = False # (kN); Blade 3 local flapwise shear force at span station 8; Directed along the local xb3-axis +OutList['Spn8FLyb3'] = False # (kN); Blade 3 local edgewise shear force at span station 8; Directed along the local yb3-axis +OutList['Spn8FLzb3'] = False # (kN); Blade 3 local axial force at span station 8; Directed along the local zb3-axis +OutList['Spn9FLxb3'] = False # (kN); Blade 3 local flapwise shear force at span station 9; Directed along the local xb3-axis +OutList['Spn9FLyb3'] = False # (kN); Blade 3 local edgewise shear force at span station 9; Directed along the local yb3-axis +OutList['Spn9FLzb3'] = False # (kN); Blade 3 local axial force at span station 9; Directed along the local zb3-axis + +# Hub and Rotor Loads +OutList['LSShftFxa'] = False # (kN); Low-speed shaft thrust force (this is constant along the shaft and is equivalent to the rotor thrust force); Directed along the xa- and xs-axes +OutList['LSShftFxs'] = False # (kN); Low-speed shaft thrust force (this is constant along the shaft and is equivalent to the rotor thrust force); Directed along the xa- and xs-axes +OutList['LSSGagFxa'] = False # (kN); Low-speed shaft thrust force (this is constant along the shaft and is equivalent to the rotor thrust force); Directed along the xa- and xs-axes +OutList['LSSGagFxs'] = False # (kN); Low-speed shaft thrust force (this is constant along the shaft and is equivalent to the rotor thrust force); Directed along the xa- and xs-axes +OutList['RotThrust'] = False # (kN); Low-speed shaft thrust force (this is constant along the shaft and is equivalent to the rotor thrust force); Directed along the xa- and xs-axes +OutList['LSShftFya'] = False # (kN); Rotating low-speed shaft shear force (this is constant along the shaft); Directed along the ya-axis +OutList['LSSGagFya'] = False # (kN); Rotating low-speed shaft shear force (this is constant along the shaft); Directed along the ya-axis +OutList['LSShftFza'] = False # (kN); Rotating low-speed shaft shear force (this is constant along the shaft); Directed along the za-axis +OutList['LSSGagFza'] = False # (kN); Rotating low-speed shaft shear force (this is constant along the shaft); Directed along the za-axis +OutList['LSShftFys'] = True # (kN); Nonrotating low-speed shaft shear force (this is constant along the shaft); Directed along the ys-axis +OutList['LSSGagFys'] = False # (kN); Nonrotating low-speed shaft shear force (this is constant along the shaft); Directed along the ys-axis +OutList['LSShftFzs'] = True # (kN); Nonrotating low-speed shaft shear force (this is constant along the shaft); Directed along the zs-axis +OutList['LSSGagFzs'] = False # (kN); Nonrotating low-speed shaft shear force (this is constant along the shaft); Directed along the zs-axis +OutList['LSShftMxa'] = False # (kN m); Low-speed shaft torque (this is constant along the shaft and is equivalent to the rotor torque); About the xa- and xs-axes +OutList['LSShftMxs'] = False # (kN m); Low-speed shaft torque (this is constant along the shaft and is equivalent to the rotor torque); About the xa- and xs-axes +OutList['LSSGagMxa'] = False # (kN m); Low-speed shaft torque (this is constant along the shaft and is equivalent to the rotor torque); About the xa- and xs-axes +OutList['LSSGagMxs'] = False # (kN m); Low-speed shaft torque (this is constant along the shaft and is equivalent to the rotor torque); About the xa- and xs-axes +OutList['RotTorq'] = False # (kN m); Low-speed shaft torque (this is constant along the shaft and is equivalent to the rotor torque); About the xa- and xs-axes +OutList['LSShftTq'] = False # (kN m); Low-speed shaft torque (this is constant along the shaft and is equivalent to the rotor torque); About the xa- and xs-axes +OutList['LSSTipMya'] = False # (kN m); Rotating low-speed shaft bending moment at the shaft tip (teeter pin for 2-blader, apex of rotation for 3-blader); About the ya-axis +OutList['LSSTipMza'] = False # (kN m); Rotating low-speed shaft bending moment at the shaft tip (teeter pin for 2-blader, apex of rotation for 3-blader); About the za-axis +OutList['LSSTipMys'] = True # (kN m); Nonrotating low-speed shaft bending moment at the shaft tip (teeter pin for 2-blader, apex of rotation for 3-blader); About the ys-axis +OutList['LSSTipMzs'] = True # (kN m); Nonrotating low-speed shaft bending moment at the shaft tip (teeter pin for 2-blader, apex of rotation for 3-blader); About the zs-axis +OutList['CThrstAzm'] = False # (deg); Azimuth location of the center of thrust. This is estimated using values of LSSTipMys, LSSTipMzs, and RotThrust.; About the xa- and xs-axes +OutList['CThrstRad'] = False # (-); Dimensionless radial (arm) location of the center of thrust. This is estimated using values of LSSTipMys, LSSTipMzs, and RotThrust. (nondimensionalized using the undeflected tip radius normal to the shaft and limited to values between 0 and 1 (inclusive)); Always positive (directed radially outboard at azimuth angle CThrstAzm) +OutList['CThrstArm'] = False # (-); Dimensionless radial (arm) location of the center of thrust. This is estimated using values of LSSTipMys, LSSTipMzs, and RotThrust. (nondimensionalized using the undeflected tip radius normal to the shaft and limited to values between 0 and 1 (inclusive)); Always positive (directed radially outboard at azimuth angle CThrstAzm) +OutList['RotPwr'] = False # (kW); Rotor power (this is equivalent to the low-speed shaft power); N/A +OutList['LSShftPwr'] = False # (kW); Rotor power (this is equivalent to the low-speed shaft power); N/A +OutList['RotCq'] = False # (-); Rotor torque coefficient (this is equivalent to the low-speed shaft torque coefficient); N/A +OutList['LSShftCq'] = False # (-); Rotor torque coefficient (this is equivalent to the low-speed shaft torque coefficient); N/A +OutList['RotCp'] = False # (-); Rotor power coefficient (this is equivalent to the low-speed shaft power coefficient); N/A +OutList['LSShftCp'] = False # (-); Rotor power coefficient (this is equivalent to the low-speed shaft power coefficient); N/A +OutList['RotCt'] = False # (-); Rotor thrust coefficient (this is equivalent to the low-speed shaft thrust coefficient); N/A +OutList['LSShftCt'] = False # (-); Rotor thrust coefficient (this is equivalent to the low-speed shaft thrust coefficient); N/A + +# Shaft Strain Gage Loads +OutList['LSSGagMya'] = False # (kN m); Rotating low-speed shaft bending moment at the shaft's strain gage (shaft strain gage located by input ShftGagL); About the ya-axis +OutList['LSSGagMza'] = False # (kN m); Rotating low-speed shaft bending moment at the shaft's strain gage (shaft strain gage located by input ShftGagL); About the za-axis +OutList['LSSGagMys'] = False # (kN m); Nonrotating low-speed shaft bending moment at the shaft's strain gage (shaft strain gage located by input ShftGagL); About the ys-axis +OutList['LSSGagMzs'] = False # (kN m); Nonrotating low-speed shaft bending moment at the shaft's strain gage (shaft strain gage located by input ShftGagL); About the zs-axis + +# Generator and High-Speed Shaft Loads +OutList['HSShftTq'] = False # (kN m); High-speed shaft torque (this is constant along the shaft); Same sign as LSShftTq / RotTorq / LSShftMxa / LSShftMxs / LSSGagMxa / LSSGagMxs +OutList['HSShftPwr'] = False # (kW); High-speed shaft power; Same sign as HSShftTq +OutList['HSShftCq'] = False # (-); High-speed shaft torque coefficient; N/A +OutList['HSShftCp'] = False # (-); High-speed shaft power coefficient; N/A +OutList['GenTq'] = False # (kN m); Electrical generator torque; Positive reflects power extracted and negative represents a motoring-up situation (power input) +OutList['GenPwr'] = False # (kW); Electrical generator power; Same sign as GenTq +OutList['GenCq'] = False # (-); Electrical generator torque coefficient; N/A +OutList['GenCp'] = False # (-); Electrical generator power coefficient; N/A +OutList['HSSBrTq'] = False # (kN m); High-speed shaft brake torque (i.e., the moment applied to the high-speed shaft by the brake); Always positive (indicating dissipation of power) + +# Rotor-Furl Bearing Loads +OutList['RFrlBrM'] = False # (kN m); Rotor-furl bearing moment; About the rotor-furl axis + +# Tail-Furl Bearing Loads +OutList['TFrlBrM'] = False # (kN m); Tail-furl bearing moment; About the tail-furl axis + +# Tail Fin Aerodynamic Loads +OutList['TFinAlpha'] = False # (deg); Tail fin angle of attack. This is the angle between the relative velocity of the wind-inflow at the tail fin center-of-pressure and the tail fin chordline.; About the tail fin z-axis, which is the axis in the tail fin plane normal to the chordline +OutList['TFinCLift'] = False # (-); Tail fin dimensionless lift coefficient; N/A +OutList['TFinCDrag'] = False # (-); Tail fin dimensionless drag coefficient; N/A +OutList['TFinDnPrs'] = False # (Pa); Tail fin dynamic pressure, equal to 1/2*AirDens*Vrel^2 where Vrel is the relative velocity of the wind-inflow at the tail fin center-of-pressure; N/A +OutList['TFinCPFx'] = False # (kN); Tangential aerodynamic force at the tail fin center-of-pressure; Directed along the tail fin x-axis, which is the axis along the chordline, positive towards the trailing edge +OutList['TFinCPFy'] = False # (kN); Normal aerodynamic force at the tail fin center-of-pressure; Directed along the tail fin y-axis, which is orthogonal to the tail fin plane + +# Tower-Top / Yaw Bearing Loads +OutList['YawBrFxn'] = False # (kN); Rotating (with nacelle) tower-top / yaw bearing shear force; Directed along the xn-axis +OutList['YawBrFyn'] = False # (kN); Rotating (with nacelle) tower-top / yaw bearing shear force; Directed along the yn-axis +OutList['YawBrFzn'] = False # (kN); Tower-top / yaw bearing axial force; Directed along the zn- and zp-axes +OutList['YawBrFzp'] = False # (kN); Tower-top / yaw bearing axial force; Directed along the zn- and zp-axes +OutList['YawBrFxp'] = False # (kN); Tower-top / yaw bearing fore-aft (nonrotating) shear force; Directed along the xp-axis +OutList['YawBrFyp'] = False # (kN); Tower-top / yaw bearing side-to-side (nonrotating) shear force; Directed along the yp-axis +OutList['YawBrMxn'] = False # (kN m); Rotating (with nacelle) tower-top / yaw bearing roll moment; About the xn-axis +OutList['YawBrMyn'] = False # (kN m); Rotating (with nacelle) tower-top / yaw bearing pitch moment; About the yn-axis +OutList['YawBrMzn'] = False # (kN m); Tower-top / yaw bearing yaw moment; About the zn- and zp-axes +OutList['YawBrMzp'] = False # (kN m); Tower-top / yaw bearing yaw moment; About the zn- and zp-axes +OutList['YawMom'] = False # (kN m); Tower-top / yaw bearing yaw moment; About the zn- and zp-axes +OutList['YawBrMxp'] = False # (kN m); Nonrotating tower-top / yaw bearing roll moment; About the xp-axis +OutList['YawBrMyp'] = False # (kN m); Nonrotating tower-top / yaw bearing pitch moment; About the yp-axis + +# Tower Base Loads +OutList['TwrBsFxt'] = False # (kN); Tower base fore-aft shear force; Directed along the xt-axis +OutList['TwrBsFyt'] = False # (kN); Tower base side-to-side shear force; Directed along the yt-axis +OutList['TwrBsFzt'] = False # (kN); Tower base axial force; Directed along the zt-axis +OutList['TwrBsMxt'] = False # (kN m); Tower base roll (or side-to-side) moment (i.e., the moment caused by side-to-side forces); About the xt-axis +OutList['TwrBsMyt'] = True # (kN m); Tower base pitching (or fore-aft) moment (i.e., the moment caused by fore-aft forces); About the yt-axis +OutList['TwrBsMzt'] = False # (kN m); Tower base yaw (or torsional) moment; About the zt-axis + +# Local Tower Loads +OutList['TwHt1MLxt'] = False # (kN m); Local tower roll (or side-to-side) moment of tower gage 1; About the local xt-axis +OutList['TwHt1MLyt'] = False # (kN m); Local tower pitching (or fore-aft) moment of tower gage 1; About the local yt-axis +OutList['TwHt1MLzt'] = False # (kN m); Local tower yaw (or torsional) moment of tower gage 1; About the local zt-axis +OutList['TwHt2MLxt'] = False # (kN m); Local tower roll (or side-to-side) moment of tower gage 2; About the local xt-axis +OutList['TwHt2MLyt'] = False # (kN m); Local tower pitching (or fore-aft) moment of tower gage 2; About the local yt-axis +OutList['TwHt2MLzt'] = False # (kN m); Local tower yaw (or torsional) moment of tower gage 2; About the local zt-axis +OutList['TwHt3MLxt'] = False # (kN m); Local tower roll (or side-to-side) moment of tower gage 3; About the local xt-axis +OutList['TwHt3MLyt'] = False # (kN m); Local tower pitching (or fore-aft) moment of tower gage 3; About the local yt-axis +OutList['TwHt3MLzt'] = False # (kN m); Local tower yaw (or torsional) moment of tower gage 3; About the local zt-axis +OutList['TwHt4MLxt'] = False # (kN m); Local tower roll (or side-to-side) moment of tower gage 4; About the local xt-axis +OutList['TwHt4MLyt'] = False # (kN m); Local tower pitching (or fore-aft) moment of tower gage 4; About the local yt-axis +OutList['TwHt4MLzt'] = False # (kN m); Local tower yaw (or torsional) moment of tower gage 4; About the local zt-axis +OutList['TwHt5MLxt'] = False # (kN m); Local tower roll (or side-to-side) moment of tower gage 5; About the local xt-axis +OutList['TwHt5MLyt'] = False # (kN m); Local tower pitching (or fore-aft) moment of tower gage 5; About the local yt-axis +OutList['TwHt5MLzt'] = False # (kN m); Local tower yaw (or torsional) moment of tower gage 5; About the local zt-axis +OutList['TwHt6MLxt'] = False # (kN m); Local tower roll (or side-to-side) moment of tower gage 6; About the local xt-axis +OutList['TwHt6MLyt'] = False # (kN m); Local tower pitching (or fore-aft) moment of tower gage 6; About the local yt-axis +OutList['TwHt6MLzt'] = False # (kN m); Local tower yaw (or torsional) moment of tower gage 6; About the local zt-axis +OutList['TwHt7MLxt'] = False # (kN m); Local tower roll (or side-to-side) moment of tower gage 7; About the local xt-axis +OutList['TwHt7MLyt'] = False # (kN m); Local tower pitching (or fore-aft) moment of tower gage 7; About the local yt-axis +OutList['TwHt7MLzt'] = False # (kN m); Local tower yaw (or torsional) moment of tower gage 7; About the local zt-axis +OutList['TwHt8MLxt'] = False # (kN m); Local tower roll (or side-to-side) moment of tower gage 8; About the local xt-axis +OutList['TwHt8MLyt'] = False # (kN m); Local tower pitching (or fore-aft) moment of tower gage 8; About the local yt-axis +OutList['TwHt8MLzt'] = False # (kN m); Local tower yaw (or torsional) moment of tower gage 8; About the local zt-axis +OutList['TwHt9MLxt'] = False # (kN m); Local tower roll (or side-to-side) moment of tower gage 9; About the local xt-axis +OutList['TwHt9MLyt'] = False # (kN m); Local tower pitching (or fore-aft) moment of tower gage 9; About the local yt-axis +OutList['TwHt9MLzt'] = False # (kN m); Local tower yaw (or torsional) moment of tower gage 9; About the local zt-axis +OutList['TwHt1FLxt'] = False # (kN); Local tower roll (or side-to-side) force of tower gage 1; About the local xt-axis +OutList['TwHt1FLyt'] = False # (kN); Local tower pitching (or fore-aft) force of tower gage 1; About the local yt-axis +OutList['TwHt1FLzt'] = False # (kN); Local tower yaw (or torsional) force of tower gage 1; About the local zt-axis +OutList['TwHt2FLxt'] = False # (kN); Local tower roll (or side-to-side) force of tower gage 2; About the local xt-axis +OutList['TwHt2FLyt'] = False # (kN); Local tower pitching (or fore-aft) force of tower gage 2; About the local yt-axis +OutList['TwHt2FLzt'] = False # (kN); Local tower yaw (or torsional) force of tower gage 2; About the local zt-axis +OutList['TwHt3FLxt'] = False # (kN); Local tower roll (or side-to-side) force of tower gage 3; About the local xt-axis +OutList['TwHt3FLyt'] = False # (kN); Local tower pitching (or fore-aft) force of tower gage 3; About the local yt-axis +OutList['TwHt3FLzt'] = False # (kN); Local tower yaw (or torsional) force of tower gage 3; About the local zt-axis +OutList['TwHt4FLxt'] = False # (kN); Local tower roll (or side-to-side) force of tower gage 4; About the local xt-axis +OutList['TwHt4FLyt'] = False # (kN); Local tower pitching (or fore-aft) force of tower gage 4; About the local yt-axis +OutList['TwHt4FLzt'] = False # (kN); Local tower yaw (or torsional) force of tower gage 4; About the local zt-axis +OutList['TwHt5FLxt'] = False # (kN); Local tower roll (or side-to-side) force of tower gage 5; About the local xt-axis +OutList['TwHt5FLyt'] = False # (kN); Local tower pitching (or fore-aft) force of tower gage 5; About the local yt-axis +OutList['TwHt5FLzt'] = False # (kN); Local tower yaw (or torsional) force of tower gage 5; About the local zt-axis +OutList['TwHt6FLxt'] = False # (kN); Local tower roll (or side-to-side) force of tower gage 6; About the local xt-axis +OutList['TwHt6FLyt'] = False # (kN); Local tower pitching (or fore-aft) force of tower gage 6; About the local yt-axis +OutList['TwHt6FLzt'] = False # (kN); Local tower yaw (or torsional) force of tower gage 6; About the local zt-axis +OutList['TwHt7FLxt'] = False # (kN); Local tower roll (or side-to-side) force of tower gage 7; About the local xt-axis +OutList['TwHt7FLyt'] = False # (kN); Local tower pitching (or fore-aft) force of tower gage 7; About the local yt-axis +OutList['TwHt7FLzt'] = False # (kN); Local tower yaw (or torsional) force of tower gage 7; About the local zt-axis +OutList['TwHt8FLxt'] = False # (kN); Local tower roll (or side-to-side) force of tower gage 8; About the local xt-axis +OutList['TwHt8FLyt'] = False # (kN); Local tower pitching (or fore-aft) force of tower gage 8; About the local yt-axis +OutList['TwHt8FLzt'] = False # (kN); Local tower yaw (or torsional) force of tower gage 8; About the local zt-axis +OutList['TwHt9FLxt'] = False # (kN); Local tower roll (or side-to-side) force of tower gage 9; About the local xt-axis +OutList['TwHt9FLyt'] = False # (kN); Local tower pitching (or fore-aft) force of tower gage 9; About the local yt-axis +OutList['TwHt9FLzt'] = False # (kN); Local tower yaw (or torsional) force of tower gage 9; About the local zt-axis + +# Platform Loads +OutList['PtfmFxt'] = False # (kN); Platform horizontal surge shear force; Directed along the xt-axis +OutList['PtfmFyt'] = False # (kN); Platform horizontal sway shear force; Directed along the yt-axis +OutList['PtfmFzt'] = False # (kN); Platform vertical heave force; Directed along the zt-axis +OutList['PtfmFxi'] = False # (kN); Platform horizontal surge shear force; Directed along the xi-axis +OutList['PtfmFyi'] = False # (kN); Platform horizontal sway shear force; Directed along the yi-axis +OutList['PtfmFzi'] = False # (kN); Platform vertical heave force; Directed along the zi-axis +OutList['PtfmMxt'] = False # (kN m); Platform roll tilt moment; About the xt-axis +OutList['PtfmMyt'] = False # (kN m); Platform pitch tilt moment; About the yt-axis +OutList['PtfmMzt'] = False # (kN m); Platform yaw moment; About the zt-axis +OutList['PtfmMxi'] = False # (kN m); Platform roll tilt moment; About the xi-axis +OutList['PtfmMyi'] = False # (kN m); Platform pitch tilt moment; About the yi-axis +OutList['PtfmMzi'] = False # (kN m); Platform yaw moment; About the zi-axis + +# Mooring Line Loads +OutList['Fair1Ten'] = False # (kN); ; +OutList['Fair1Ang'] = False # (deg); ; +OutList['Anch1Ten'] = False # (kN); ; +OutList['Anch1Ang'] = False # (deg); ; +OutList['Fair2Ten'] = False # (kN); ; +OutList['Fair2Ang'] = False # (deg); ; +OutList['Anch2Ten'] = False # (kN); ; +OutList['Anch2Ang'] = False # (deg); ; +OutList['Fair3Ten'] = False # (kN); ; +OutList['Fair3Ang'] = False # (deg); ; +OutList['Anch3Ten'] = False # (kN); ; +OutList['Anch3Ang'] = False # (deg); ; +OutList['Fair4Ten'] = False # (kN); ; +OutList['Fair4Ang'] = False # (deg); ; +OutList['Anch4Ten'] = False # (kN); ; +OutList['Anch4Ang'] = False # (deg); ; +OutList['Fair5Ten'] = False # (kN); ; +OutList['Fair5Ang'] = False # (deg); ; +OutList['Anch5Ten'] = False # (kN); ; +OutList['Anch5Ang'] = False # (deg); ; +OutList['Fair6Ten'] = False # (kN); ; +OutList['Fair6Ang'] = False # (deg); ; +OutList['Anch6Ten'] = False # (kN); ; +OutList['Anch6Ang'] = False # (deg); ; +OutList['Fair7Ten'] = False # (kN); ; +OutList['Fair7Ang'] = False # (deg); ; +OutList['Anch7Ten'] = False # (kN); ; +OutList['Anch7Ang'] = False # (deg); ; +OutList['Fair8Ten'] = False # (kN); ; +OutList['Fair8Ang'] = False # (deg); ; +OutList['Anch8Ten'] = False # (kN); ; +OutList['Anch8Ang'] = False # (deg); ; +OutList['Fair9Ten'] = False # (kN); ; +OutList['Fair9Ang'] = False # (deg); ; +OutList['Anch9Ten'] = False # (kN); ; +OutList['Anch9Ang'] = False # (deg); ; + +# Wave Motions +OutList['WaveElev'] = False # (m); ; +OutList['Wave1Vxi'] = False # (m/s); ; +OutList['Wave1Vyi'] = False # (m/s); ; +OutList['Wave1Vzi'] = False # (m/s); ; +OutList['Wave1Axi'] = False # (m/s^2); ; +OutList['Wave1Ayi'] = False # (m/s^2); ; +OutList['Wave1Azi'] = False # (m/s^2); ; +OutList['Wave2Vxi'] = False # (m/s); ; +OutList['Wave2Vyi'] = False # (m/s); ; +OutList['Wave2Vzi'] = False # (m/s); ; +OutList['Wave2Axi'] = False # (m/s^2); ; +OutList['Wave2Ayi'] = False # (m/s^2); ; +OutList['Wave2Azi'] = False # (m/s^2); ; +OutList['Wave3Vxi'] = False # (m/s); ; +OutList['Wave3Vyi'] = False # (m/s); ; +OutList['Wave3Vzi'] = False # (m/s); ; +OutList['Wave3Axi'] = False # (m/s^2); ; +OutList['Wave3Ayi'] = False # (m/s^2); ; +OutList['Wave3Azi'] = False # (m/s^2); ; +OutList['Wave4Vxi'] = False # (m/s); ; +OutList['Wave4Vyi'] = False # (m/s); ; +OutList['Wave4Vzi'] = False # (m/s); ; +OutList['Wave4Axi'] = False # (m/s^2); ; +OutList['Wave4Ayi'] = False # (m/s^2); ; +OutList['Wave4Azi'] = False # (m/s^2); ; +OutList['Wave5Vxi'] = False # (m/s); ; +OutList['Wave5Vyi'] = False # (m/s); ; +OutList['Wave5Vzi'] = False # (m/s); ; +OutList['Wave5Axi'] = False # (m/s^2); ; +OutList['Wave5Ayi'] = False # (m/s^2); ; +OutList['Wave5Azi'] = False # (m/s^2); ; +OutList['Wave6Vxi'] = False # (m/s); ; +OutList['Wave6Vyi'] = False # (m/s); ; +OutList['Wave6Vzi'] = False # (m/s); ; +OutList['Wave6Axi'] = False # (m/s^2); ; +OutList['Wave6Ayi'] = False # (m/s^2); ; +OutList['Wave6Azi'] = False # (m/s^2); ; +OutList['Wave7Vxi'] = False # (m/s); ; +OutList['Wave7Vyi'] = False # (m/s); ; +OutList['Wave7Vzi'] = False # (m/s); ; +OutList['Wave7Axi'] = False # (m/s^2); ; +OutList['Wave7Ayi'] = False # (m/s^2); ; +OutList['Wave7Azi'] = False # (m/s^2); ; +OutList['Wave8Vxi'] = False # (m/s); ; +OutList['Wave8Vyi'] = False # (m/s); ; +OutList['Wave8Vzi'] = False # (m/s); ; +OutList['Wave8Axi'] = False # (m/s^2); ; +OutList['Wave8Ayi'] = False # (m/s^2); ; +OutList['Wave8Azi'] = False # (m/s^2); ; +OutList['Wave9Vxi'] = False # (m/s); ; +OutList['Wave9Vyi'] = False # (m/s); ; +OutList['Wave9Vzi'] = False # (m/s); ; +OutList['Wave9Axi'] = False # (m/s^2); ; +OutList['Wave9Ayi'] = False # (m/s^2); ; +OutList['Wave9Azi'] = False # (m/s^2); ; + +# Internal Degrees of Freedom +OutList['Q_B1E1'] = False # (m); Displacement of 1st edgewise bending-mode DOF of blade 1; +OutList['Q_B2E1'] = False # (m); Displacement of 1st edgewise bending-mode DOF of blade 2; +OutList['Q_B3E1'] = False # (m); Displacement of 1st edgewise bending-mode DOF of blade 3; +OutList['Q_B1F1'] = False # (m); Displacement of 1st flapwise bending-mode DOF of blade 1; +OutList['Q_B2F1'] = False # (m); Displacement of 1st flapwise bending-mode DOF of blade 2; +OutList['Q_B3F1'] = False # (m); Displacement of 1st flapwise bending-mode DOF of blade 3; +OutList['Q_B1F2'] = False # (m); Displacement of 2nd flapwise bending-mode DOF of blade 1; +OutList['Q_B2F2'] = False # (m); Displacement of 2nd flapwise bending-mode DOF of blade 2; +OutList['Q_B3F2'] = False # (m); Displacement of 2nd flapwise bending-mode DOF of blade 3; +OutList['Q_Teet'] = False # (rad); Displacement of hub teetering DOF; +OutList['Q_DrTr'] = False # (rad); Displacement of drivetrain rotational-flexibility DOF; +OutList['Q_GeAz'] = False # (rad); Displacement of variable speed generator DOF; +OutList['Q_RFrl'] = False # (rad); Displacement of rotor-furl DOF; +OutList['Q_TFrl'] = False # (rad); Displacement of tail-furl DOF; +OutList['Q_Yaw'] = False # (rad); Displacement of nacelle yaw DOF; +OutList['Q_TFA1'] = False # (m); Displacement of 1st tower fore-aft bending mode DOF; +OutList['Q_TSS1'] = False # (m); Displacement of 1st tower side-to-side bending mode DOF; +OutList['Q_TFA2'] = False # (m); Displacement of 2nd tower fore-aft bending mode DOF; +OutList['Q_TSS2'] = False # (m); Displacement of 2nd tower side-to-side bending mode DOF; +OutList['Q_Sg'] = False # (m); Displacement of platform horizontal surge translation DOF; +OutList['Q_Sw'] = False # (m); Displacement of platform horizontal sway translation DOF; +OutList['Q_Hv'] = False # (m); Displacement of platform vertical heave translation DOF; +OutList['Q_R'] = False # (rad); Displacement of platform roll tilt rotation DOF; +OutList['Q_P'] = False # (rad); Displacement of platform pitch tilt rotation DOF; +OutList['Q_Y'] = False # (rad); Displacement of platform yaw rotation DOF; +OutList['QD_B1E1'] = False # (m/s); Velocity of 1st edgewise bending-mode DOF of blade 1; +OutList['QD_B2E1'] = False # (m/s); Velocity of 1st edgewise bending-mode DOF of blade 2; +OutList['QD_B3E1'] = False # (m/s); Velocity of 1st edgewise bending-mode DOF of blade 3; +OutList['QD_B1F1'] = False # (m/s); Velocity of 1st flapwise bending-mode DOF of blade 1; +OutList['QD_B2F1'] = False # (m/s); Velocity of 1st flapwise bending-mode DOF of blade 2; +OutList['QD_B3F1'] = False # (m/s); Velocity of 1st flapwise bending-mode DOF of blade 3; +OutList['QD_B1F2'] = False # (m/s); Velocity of 2nd flapwise bending-mode DOF of blade 1; +OutList['QD_B2F2'] = False # (m/s); Velocity of 2nd flapwise bending-mode DOF of blade 2; +OutList['QD_B3F2'] = False # (m/s); Velocity of 2nd flapwise bending-mode DOF of blade 3; +OutList['QD_Teet'] = False # (rad/s); Velocity of hub teetering DOF; +OutList['QD_DrTr'] = False # (rad/s); Velocity of drivetrain rotational-flexibility DOF; +OutList['QD_GeAz'] = False # (rad/s); Velocity of variable speed generator DOF; +OutList['QD_RFrl'] = False # (rad/s); Velocity of rotor-furl DOF; +OutList['QD_TFrl'] = False # (rad/s); Velocity of tail-furl DOF; +OutList['QD_Yaw'] = False # (rad/s); Velocity of nacelle yaw DOF; +OutList['QD_TFA1'] = False # (m/s); Velocity of 1st tower fore-aft bending mode DOF; +OutList['QD_TSS1'] = False # (m/s); Velocity of 1st tower side-to-side bending mode DOF; +OutList['QD_TFA2'] = False # (m/s); Velocity of 2nd tower fore-aft bending mode DOF; +OutList['QD_TSS2'] = False # (m/s); Velocity of 2nd tower side-to-side bending mode DOF; +OutList['QD_Sg'] = False # (m/s); Velocity of platform horizontal surge translation DOF; +OutList['QD_Sw'] = False # (m/s); Velocity of platform horizontal sway translation DOF; +OutList['QD_Hv'] = False # (m/s); Velocity of platform vertical heave translation DOF; +OutList['QD_R'] = False # (rad/s); Velocity of platform roll tilt rotation DOF; +OutList['QD_P'] = False # (rad/s); Velocity of platform pitch tilt rotation DOF; +OutList['QD_Y'] = False # (rad/s); Velocity of platform yaw rotation DOF; +OutList['QD2_B1E1'] = False # (m/s^2); Acceleration of 1st edgewise bending-mode DOF of blade 1; +OutList['QD2_B2E1'] = False # (m/s^2); Acceleration of 1st edgewise bending-mode DOF of blade 2; +OutList['QD2_B3E1'] = False # (m/s^2); Acceleration of 1st edgewise bending-mode DOF of blade 3; +OutList['QD2_B1F1'] = False # (m/s^2); Acceleration of 1st flapwise bending-mode DOF of blade 1; +OutList['QD2_B2F1'] = False # (m/s^2); Acceleration of 1st flapwise bending-mode DOF of blade 2; +OutList['QD2_B3F1'] = False # (m/s^2); Acceleration of 1st flapwise bending-mode DOF of blade 3; +OutList['QD2_B1F2'] = False # (m/s^2); Acceleration of 2nd flapwise bending-mode DOF of blade 1; +OutList['QD2_B2F2'] = False # (m/s^2); Acceleration of 2nd flapwise bending-mode DOF of blade 2; +OutList['QD2_B3F2'] = False # (m/s^2); Acceleration of 2nd flapwise bending-mode DOF of blade 3; +OutList['QD2_Teet'] = False # (rad/s^2); Acceleration of hub teetering DOF; +OutList['QD2_DrTr'] = False # (rad/s^2); Acceleration of drivetrain rotational-flexibility DOF; +OutList['QD2_GeAz'] = False # (rad/s^2); Acceleration of variable speed generator DOF; +OutList['QD2_RFrl'] = False # (rad/s^2); Acceleration of rotor-furl DOF; +OutList['QD2_TFrl'] = False # (rad/s^2); Acceleration of tail-furl DOF; +OutList['QD2_Yaw'] = False # (rad/s^2); Acceleration of nacelle yaw DOF; +OutList['QD2_TFA1'] = False # (m/s^2); Acceleration of 1st tower fore-aft bending mode DOF; +OutList['QD2_TSS1'] = False # (m/s^2); Acceleration of 1st tower side-to-side bending mode DOF; +OutList['QD2_TFA2'] = False # (m/s^2); Acceleration of 2nd tower fore-aft bending mode DOF; +OutList['QD2_TSS2'] = False # (m/s^2); Acceleration of 2nd tower side-to-side bending mode DOF; +OutList['QD2_Sg'] = False # (m/s^2); Acceleration of platform horizontal surge translation DOF; +OutList['QD2_Sw'] = False # (m/s^2); Acceleration of platform horizontal sway translation DOF; +OutList['QD2_Hv'] = False # (m/s^2); Acceleration of platform vertical heave translation DOF; +OutList['QD2_R'] = False # (rad/s^2); Acceleration of platform roll tilt rotation DOF; +OutList['QD2_P'] = False # (rad/s^2); Acceleration of platform pitch tilt rotation DOF; +OutList['QD2_Y'] = False # (rad/s^2); Acceleration of platform yaw rotation DOF; + + +""" Final Output Dictionary """ +Fst7Output = {} +Fst7Output['OutList'] = OutList diff --git a/openfast_python/openfast_io/FAST_writer.py b/openfast_python/openfast_io/FAST_writer.py new file mode 100644 index 0000000000..928aa68eb2 --- /dev/null +++ b/openfast_python/openfast_io/FAST_writer.py @@ -0,0 +1,2251 @@ +import os +import copy +import random +import time +import operator +import numpy as np +from functools import reduce + +from openfast_io.FAST_reader import InputReader_OpenFAST + +try: + from rosco.toolbox import utilities as ROSCO_utilities + ROSCO = True +except: + ROSCO = False + + +def auto_format(f, var): + # Error handling for variables with 'Default' options + if isinstance(var, str): + f.write('{:}\n'.format(var)) + elif isinstance(var, int): + f.write('{:3}\n'.format(var)) + elif isinstance(var, float): + f.write('{: 2.15e}\n'.format(var)) + +def float_default_out(val): + # formatted float output when 'default' is an option + if type(val) is float: + return '{: 22f}'.format(val) + else: + return '{:<22}'.format(val) + +def int_default_out(val): + # formatted int output when 'default' is an option + if type(val) is float: + return '{:<22d}'.format(val) + else: + return '{:<22}'.format(val) + +# given a list of nested dictionary keys, return the dict at that point +def get_dict(vartree, branch): + return reduce(operator.getitem, branch, vartree) + +class InputWriter_OpenFAST(object): + """ Methods to write OpenFAST input files.""" + + def __init__(self): + + self.FAST_namingOut = None #Master FAST file + self.FAST_runDirectory = None #Output directory + self.fst_vt = {} + self.fst_update = {} + + def update(self, fst_update={}): + """ Change fast variables based on the user supplied values """ + if fst_update: + self.fst_update = fst_update + + # recursively loop through fast variable levels and set them to their update values + def loop_dict(vartree, branch): + for var in vartree.keys(): + branch_i = copy.copy(branch) + branch_i.append(var) + if type(vartree[var]) is dict: + loop_dict(vartree[var], branch_i) + else: + # try: + get_dict(self.fst_vt, branch_i[:-1])[branch_i[-1]] = get_dict(self.fst_update, branch_i[:-1])[branch_i[-1]] + # except: + # pass + + # make sure update dictionary is not empty + if self.fst_update: + # if update dictionary uses list keys, convert to nested dictionaries + if type(list(self.fst_update.keys())) in [list, tuple]: + fst_update = copy.copy(self.fst_update) + self.fst_update = {} + for var_list in fst_update.keys(): + branch = [] + for i, var in enumerate(var_list[0:-1]): + if var not in get_dict(self.fst_update, branch).keys(): + get_dict(self.fst_update, branch)[var] = {} + branch.append(var) + + get_dict(self.fst_update, branch)[var_list[-1]] = fst_update[var_list] + else: + print('WARNING: OpenFAST user settings not correctly applied. Please check the modeling_options.yaml') + + # set fast variables to update values + loop_dict(self.fst_update, []) + + def get_outlist(self, vartree_head, channel_list=[]): + """ Loop through a list of output channel names, recursively find values set to True in the nested outlist dict """ + + # recursively search nested dictionaries + def loop_dict(vartree, outlist_i): + for var in vartree.keys(): + if type(vartree[var]) is dict: + loop_dict(vartree[var], outlist_i) + else: + if vartree[var]: + outlist_i.append(var) + return outlist_i + + # if specific outlist branches are not specified, get all + if not channel_list: + channel_list = vartree_head.keys() + + # loop through top level of dictionary + outlist = [] + for var in channel_list: + var = var.replace(' ', '') + outlist_i = [] + outlist_i = loop_dict(vartree_head[var], outlist_i) + if outlist_i: + outlist.append(sorted(outlist_i)) + + return outlist + + def update_outlist(self, channels): + """ Loop through a list of output channel names, recursively search the nested outlist dict and set to specified value""" + # 'channels' is a dict of channel names as keys with the boolean value they should be set to + + # given a list of nested dictionary keys, return the dict at that point + def get_dict(vartree, branch): + return reduce(operator.getitem, branch, self.fst_vt['outlist']) + # given a list of nested dictionary keys, set the value of the dict at that point + def set_dict(vartree, branch, val): + get_dict(vartree, branch[:-1])[branch[-1]] = val + # recursively loop through outlist dictionaries to set output channels + def loop_dict(vartree, search_var, val, branch): + for var in vartree.keys(): + branch_i = copy.copy(branch) + branch_i.append(var) + if type(vartree[var]) is dict: + loop_dict(vartree[var], search_var, val, branch_i) + else: + if var == search_var: + set_dict(self.fst_vt['outlist'], branch_i, val) + + # loop through outchannels on this line, loop through outlist dicts to set to True + channel_list = channels.keys() + for var in channel_list: + val = channels[var] + var = var.replace(' ', '') + loop_dict(self.fst_vt['outlist'], var, val, []) + + def execute(self): + + if not os.path.exists(self.FAST_runDirectory): + os.makedirs(self.FAST_runDirectory) + + self.write_ElastoDynBlade() + self.write_ElastoDynTower() + self.write_ElastoDyn() + # self.write_WindWnd() + self.write_InflowWind() + if self.fst_vt['Fst']['CompAero'] == 1: + self.write_AeroDyn14() + elif self.fst_vt['Fst']['CompAero'] == 2: + self.write_AeroDyn15() + + if self.fst_vt['Fst']['CompServo'] == 1: + if 'DISCON_in' in self.fst_vt and ROSCO: + self.write_DISCON_in() + self.write_ServoDyn() + for i_NStC, NStC in enumerate(self.fst_vt['NStC']): + self.write_StC(NStC,self.fst_vt['ServoDyn']['NStCfiles'][i_NStC]) + for i_BStC, BStC in enumerate(self.fst_vt['BStC']): + self.write_StC(BStC,self.fst_vt['ServoDyn']['BStCfiles'][i_BStC]) + for i_TStC, TStC in enumerate(self.fst_vt['TStC']): + self.write_StC(TStC,self.fst_vt['ServoDyn']['TStCfiles'][i_TStC]) + for i_SStC, SStC in enumerate(self.fst_vt['SStC']): + self.write_StC(SStC,self.fst_vt['ServoDyn']['SStCfiles'][i_SStC]) + + if self.fst_vt['Fst']['CompHydro'] == 1: + self.write_HydroDyn() + if self.fst_vt['Fst']['CompSub'] == 1: + self.write_SubDyn() + if self.fst_vt['Fst']['CompMooring'] == 1: + self.write_MAP() + elif self.fst_vt['Fst']['CompMooring'] == 3: + self.write_MoorDyn() + + if self.fst_vt['Fst']['CompElast'] == 2: + self.write_BeamDyn() + + self.write_MainInput() + + def write_MainInput(self): + # Main FAST v8.16-v8.17 Input File + # Currently no differences between FASTv8.16 and OpenFAST. + + self.FAST_InputFileOut = os.path.join(self.FAST_runDirectory, self.FAST_namingOut+'.fst') + + # Keep simple for now: + f = open(self.FAST_InputFileOut, 'w') + + # ===== .fst Input File ===== + + f.write('------- OpenFAST INPUT FILE -------------------------------------------\n') + f.write('Generated with OpenFAST_IO\n') + f.write('---------------------- SIMULATION CONTROL --------------------------------------\n') + f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['Fst']['Echo'], 'Echo', '- Echo input data to .ech (flag)\n')) + f.write('{:<22} {:<11} {:}'.format('"'+self.fst_vt['Fst']['AbortLevel']+'"', 'AbortLevel', '- Error level when simulation should abort (string) {"WARNING", "SEVERE", "FATAL"}\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['Fst']['TMax'], 'TMax', '- Total run time (s)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['Fst']['DT'], 'DT', '- Recommended module time step (s)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['Fst']['InterpOrder'], 'InterpOrder', '- Interpolation order for input/output time history (-) {1=linear, 2=quadratic}\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['Fst']['NumCrctn'], 'NumCrctn', '- Number of correction iterations (-) {0=explicit calculation, i.e., no corrections}\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['Fst']['DT_UJac'], 'DT_UJac', '- Time between calls to get Jacobians (s)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['Fst']['UJacSclFact'], 'UJacSclFact', '- Scaling factor used in Jacobians (-)\n')) + f.write('---------------------- FEATURE SWITCHES AND FLAGS ------------------------------\n') + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['Fst']['CompElast'], 'CompElast', '- Compute structural dynamics (switch) {1=ElastoDyn; 2=ElastoDyn + BeamDyn for blades}\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['Fst']['CompInflow'], 'CompInflow', '- Compute inflow wind velocities (switch) {0=still air; 1=InflowWind; 2=external from OpenFOAM}\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['Fst']['CompAero'], 'CompAero', '- Compute aerodynamic loads (switch) {0=None; 1=AeroDyn v14; 2=AeroDyn v15}\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['Fst']['CompServo'], 'CompServo', '- Compute control and electrical-drive dynamics (switch) {0=None; 1=ServoDyn}\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['Fst']['CompHydro'], 'CompHydro', '- Compute hydrodynamic loads (switch) {0=None; 1=HydroDyn}\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['Fst']['CompSub'], 'CompSub', '- Compute sub-structural dynamics (switch) {0=None; 1=SubDyn; 2=External Platform MCKF}\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['Fst']['CompMooring'], 'CompMooring', '- Compute mooring system (switch) {0=None; 1=MAP++; 2=FEAMooring; 3=MoorDyn; 4=OrcaFlex}\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['Fst']['CompIce'], 'CompIce', '- Compute ice loads (switch) {0=None; 1=IceFloe; 2=IceDyn}\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['Fst']['MHK'], 'MHK', '- MHK turbine type (switch) {0=Not an MHK turbine; 1=Fixed MHK turbine; 2=Floating MHK turbine}\n')) + f.write('---------------------- ENVIRONMENTAL CONDITIONS --------------------------------\n') + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['Fst']['Gravity'], 'Gravity', '- Gravitational acceleration (m/s^2)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['Fst']['AirDens'], 'AirDens', '- Air density (kg/m^3)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['Fst']['WtrDens'], 'WtrDens', '- Water density (kg/m^3)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['Fst']['KinVisc'], 'KinVisc', '- Kinematic viscosity of working fluid (m^2/s)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['Fst']['SpdSound'], 'SpdSound', '- Speed of sound in working fluid (m/s)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['Fst']['Patm'], 'Patm', '- Atmospheric pressure (Pa) [used only for an MHK turbine cavitation check]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['Fst']['Pvap'], 'Pvap', '- Vapour pressure of working fluid (Pa) [used only for an MHK turbine cavitation check]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['Fst']['WtrDpth'], 'WtrDpth', '- Water depth (m)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['Fst']['MSL2SWL'], 'MSL2SWL', '- Offset between still-water level and mean sea level (m) [positive upward]\n')) + f.write('---------------------- INPUT FILES ---------------------------------------------\n') + f.write('{:<22} {:<11} {:}'.format('"'+self.fst_vt['Fst']['EDFile']+'"', 'EDFile', '- Name of file containing ElastoDyn input parameters (quoted string)\n')) + f.write('{:<22} {:<11} {:}'.format('"'+self.fst_vt['Fst']['BDBldFile(1)']+'"', 'BDBldFile(1)', '- Name of file containing BeamDyn input parameters for blade 1 (quoted string)\n')) + f.write('{:<22} {:<11} {:}'.format('"'+self.fst_vt['Fst']['BDBldFile(2)']+'"', 'BDBldFile(2)', '- Name of file containing BeamDyn input parameters for blade 2 (quoted string)\n')) + f.write('{:<22} {:<11} {:}'.format('"'+self.fst_vt['Fst']['BDBldFile(3)']+'"', 'BDBldFile(3)', '- Name of file containing BeamDyn input parameters for blade 3 (quoted string)\n')) + f.write('{:<22} {:<11} {:}'.format('"'+self.fst_vt['Fst']['InflowFile']+'"', 'InflowFile', '- Name of file containing inflow wind input parameters (quoted string)\n')) + f.write('{:<22} {:<11} {:}'.format('"'+self.fst_vt['Fst']['AeroFile']+'"', 'AeroFile', '- Name of file containing aerodynamic input parameters (quoted string)\n')) + f.write('{:<22} {:<11} {:}'.format('"'+self.fst_vt['Fst']['ServoFile']+'"', 'ServoFile', '- Name of file containing control and electrical-drive input parameters (quoted string)\n')) + f.write('{:<22} {:<11} {:}'.format('"'+self.fst_vt['Fst']['HydroFile']+'"', 'HydroFile', '- Name of file containing hydrodynamic input parameters (quoted string)\n')) + f.write('{:<22} {:<11} {:}'.format('"'+self.fst_vt['Fst']['SubFile']+'"', 'SubFile', '- Name of file containing sub-structural input parameters (quoted string)\n')) + f.write('{:<22} {:<11} {:}'.format('"'+self.fst_vt['Fst']['MooringFile']+'"', 'MooringFile', '- Name of file containing mooring system input parameters (quoted string)\n')) + f.write('{:<22} {:<11} {:}'.format('"'+self.fst_vt['Fst']['IceFile']+'"', 'IceFile', '- Name of file containing ice input parameters (quoted string)\n')) + f.write('---------------------- OUTPUT --------------------------------------------------\n') + f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['Fst']['SumPrint'], 'SumPrint', '- Print summary data to ".sum" (flag)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['Fst']['SttsTime'], 'SttsTime', '- Amount of time between screen status messages (s)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['Fst']['ChkptTime'], 'ChkptTime', '- Amount of time between creating checkpoint files for potential restart (s)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['Fst']['DT_Out'], 'DT_Out', '- Time step for tabular output (s) (or "default")\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['Fst']['TStart'], 'TStart', '- Time to begin tabular output (s)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['Fst']['OutFileFmt'], 'OutFileFmt', '- Format for tabular (time-marching) output file (switch) {1: text file [.out], 2: binary file [.outb], 3: both}\n')) + f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['Fst']['TabDelim'], 'TabDelim', '- Use tab delimiters in text tabular output file? (flag) {uses spaces if false}\n')) + f.write('{:<22} {:<11} {:}'.format('"'+self.fst_vt['Fst']['OutFmt']+'"', 'OutFmt', '- Format used for text tabular output, excluding the time channel. Resulting field should be 10 characters. (quoted string)\n')) + f.write('---------------------- LINEARIZATION -------------------------------------------\n') + f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['Fst']['Linearize'], 'Linearize', '- Linearization analysis (flag)\n')) + f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['Fst']['CalcSteady'], 'CalcSteady', '- Calculate a steady-state periodic operating point before linearization? [unused if Linearize=False] (flag)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['Fst']['TrimCase'], 'TrimCase', '- Controller parameter to be trimmed {1:yaw; 2:torque; 3:pitch} [used only if CalcSteady=True] (-)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['Fst']['TrimTol'], 'TrimTol', '- Tolerance for the rotational speed convergence [used only if CalcSteady=True] (-)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['Fst']['TrimGain'], '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)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['Fst']['Twr_Kdmp'], 'Twr_Kdmp', '- Damping factor for the tower [used only if CalcSteady=True] (N/(m/s))\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['Fst']['Bld_Kdmp'], 'Bld_Kdmp', '- Damping factor for the blades [used only if CalcSteady=True] (N/(m/s))\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['Fst']['NLinTimes'], 'NLinTimes', '- Number of times to linearize (-) [>=1] [unused if Linearize=False]\n')) + f.write('{:<22} {:<11} {:}'.format(', '.join(['%f'%i for i in np.array(self.fst_vt['Fst']['LinTimes'], dtype=float)]), 'LinTimes', '- List of times at which to linearize (s) [1 to NLinTimes] [used only when Linearize=True and CalcSteady=False]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['Fst']['LinInputs'], 'LinInputs', '- Inputs included in linearization (switch) {0=none; 1=standard; 2=all module inputs (debug)} [unused if Linearize=False]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['Fst']['LinOutputs'], 'LinOutputs', '- Outputs included in linearization (switch) {0=none; 1=from OutList(s); 2=all module outputs (debug)} [unused if Linearize=False]\n')) + f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['Fst']['LinOutJac'], 'LinOutJac', '- Include full Jacobians in linearization output (for debug) (flag) [unused if Linearize=False; used only if LinInputs=LinOutputs=2]\n')) + f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['Fst']['LinOutMod'], 'LinOutMod', '- Write module-level linearization output files in addition to output for full system? (flag) [unused if Linearize=False]\n')) + f.write('---------------------- VISUALIZATION ------------------------------------------\n') + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['Fst']['WrVTK'], 'WrVTK', '- VTK visualization data output: (switch) {0=none; 1=initialization data only; 2=animation}\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['Fst']['VTK_type'], 'VTK_type', '- Type of VTK visualization data: (switch) {1=surfaces; 2=basic meshes (lines/points); 3=all meshes (debug)} [unused if WrVTK=0]\n')) + f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['Fst']['VTK_fields'], 'VTK_fields', '- Write mesh fields to VTK data files? (flag) {true/false} [unused if WrVTK=0]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['Fst']['VTK_fps'], 'VTK_fps', '- Frame rate for VTK output (frames per second){will use closest integer multiple of DT} [used only if WrVTK=2]\n')) + + f.flush() + os.fsync(f) + f.close() + + def write_ElastoDyn(self): + + self.fst_vt['Fst']['EDFile'] = self.FAST_namingOut + '_ElastoDyn.dat' + ed_file = os.path.join(self.FAST_runDirectory,self.fst_vt['Fst']['EDFile']) + f = open(ed_file, 'w') + + f.write('------- ELASTODYN v1.03.* INPUT FILE -------------------------------------------\n') + f.write('Generated with OpenFAST_IO\n') + + # ElastoDyn Simulation Control (ed_sim_ctrl) + f.write('---------------------- SIMULATION CONTROL --------------------------------------\n') + f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['Echo'], 'Echo', '- Echo input data to ".ech" (flag)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['Method'], 'Method', '- Integration method: {1: RK4, 2: AB4, or 3: ABM4} (-)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['DT'], 'DT', 'Integration time step (s)\n')) + f.write('---------------------- DEGREES OF FREEDOM --------------------------------------\n') + f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['FlapDOF1'], 'FlapDOF1', '- First flapwise blade mode DOF (flag)\n')) + f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['FlapDOF2'], 'FlapDOF2', '- Second flapwise blade mode DOF (flag)\n')) + f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['EdgeDOF'], 'EdgeDOF', '- First edgewise blade mode DOF (flag)\n')) + f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['TeetDOF'], 'TeetDOF', '- Rotor-teeter DOF (flag) [unused for 3 blades]\n')) + f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['DrTrDOF'], 'DrTrDOF', '- Drivetrain rotational-flexibility DOF (flag)\n')) + f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['GenDOF'], 'GenDOF', '- Generator DOF (flag)\n')) + f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['YawDOF'], 'YawDOF', '- Yaw DOF (flag)\n')) + f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['TwFADOF1'], 'TwFADOF1', '- First fore-aft tower bending-mode DOF (flag)\n')) + f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['TwFADOF2'], 'TwFADOF2', '- Second fore-aft tower bending-mode DOF (flag)\n')) + f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['TwSSDOF1'], 'TwSSDOF1', '- First side-to-side tower bending-mode DOF (flag)\n')) + f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['TwSSDOF2'], 'TwSSDOF2', '- Second side-to-side tower bending-mode DOF (flag)\n')) + f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['PtfmSgDOF'], 'PtfmSgDOF', '- Platform horizontal surge translation DOF (flag)\n')) + f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['PtfmSwDOF'], 'PtfmSwDOF', '- Platform horizontal sway translation DOF (flag)\n')) + f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['PtfmHvDOF'], 'PtfmHvDOF', '- Platform vertical heave translation DOF (flag)\n')) + f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['PtfmRDOF'], 'PtfmRDOF', '- Platform roll tilt rotation DOF (flag)\n')) + f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['PtfmPDOF'], 'PtfmPDOF', '- Platform pitch tilt rotation DOF (flag)\n')) + f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['PtfmYDOF'], 'PtfmYDOF', '- Platform yaw rotation DOF (flag)\n')) + f.write('---------------------- INITIAL CONDITIONS --------------------------------------\n') + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['OoPDefl'], 'OoPDefl', '- Initial out-of-plane blade-tip displacement (meters)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['IPDefl'], 'IPDefl', '- Initial in-plane blade-tip deflection (meters)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['BlPitch1'], 'BlPitch(1)', '- Blade 1 initial pitch (degrees)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['BlPitch2'], 'BlPitch(2)', '- Blade 2 initial pitch (degrees)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['BlPitch3'], 'BlPitch(3)', '- Blade 3 initial pitch (degrees) [unused for 2 blades]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['TeetDefl'], 'TeetDefl', '- Initial or fixed teeter angle (degrees) [unused for 3 blades]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['Azimuth'], 'Azimuth', '- Initial azimuth angle for blade 1 (degrees)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['RotSpeed'], 'RotSpeed', '- Initial or fixed rotor speed (rpm)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['NacYaw'], 'NacYaw', '- Initial or fixed nacelle-yaw angle (degrees)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['TTDspFA'], 'TTDspFA', '- Initial fore-aft tower-top displacement (meters)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['TTDspSS'], 'TTDspSS', '- Initial side-to-side tower-top displacement (meters)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['PtfmSurge'], 'PtfmSurge', '- Initial or fixed horizontal surge translational displacement of platform (meters)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['PtfmSway'], 'PtfmSway', '- Initial or fixed horizontal sway translational displacement of platform (meters)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['PtfmHeave'], 'PtfmHeave', '- Initial or fixed vertical heave translational displacement of platform (meters)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['PtfmRoll'], 'PtfmRoll', '- Initial or fixed roll tilt rotational displacement of platform (degrees)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['PtfmPitch'], 'PtfmPitch', '- Initial or fixed pitch tilt rotational displacement of platform (degrees)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['PtfmYaw'], 'PtfmYaw', '- Initial or fixed yaw rotational displacement of platform (degrees)\n')) + f.write('---------------------- TURBINE CONFIGURATION -----------------------------------\n') + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['NumBl'], 'NumBl', '- Number of blades (-)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['TipRad'], 'TipRad', '- The distance from the rotor apex to the blade tip (meters)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['HubRad'], 'HubRad', '- The distance from the rotor apex to the blade root (meters)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['PreCone(1)'], 'PreCone(1)', '- Blade 1 cone angle (degrees)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['PreCone(2)'], 'PreCone(2)', '- Blade 2 cone angle (degrees)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['PreCone(3)'], 'PreCone(3)', '- Blade 3 cone angle (degrees) [unused for 2 blades]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['HubCM'], 'HubCM', '- Distance from rotor apex to hub mass [positive downwind] (meters)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['UndSling'], 'UndSling', '- Undersling length [distance from teeter pin to the rotor apex] (meters) [unused for 3 blades]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['Delta3'], 'Delta3', '- Delta-3 angle for teetering rotors (degrees) [unused for 3 blades]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['AzimB1Up'], 'AzimB1Up', '- Azimuth value to use for I/O when blade 1 points up (degrees)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['OverHang'], 'OverHang', '- Distance from yaw axis to rotor apex [3 blades] or teeter pin [2 blades] (meters)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['ShftGagL'], 'ShftGagL', '- Distance from rotor apex [3 blades] or teeter pin [2 blades] to shaft strain gages [positive for upwind rotors] (meters)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['ShftTilt'], 'ShftTilt', '- Rotor shaft tilt angle (degrees)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['NacCMxn'], 'NacCMxn', '- Downwind distance from the tower-top to the nacelle CM (meters)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['NacCMyn'], 'NacCMyn', '- Lateral distance from the tower-top to the nacelle CM (meters)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['NacCMzn'], 'NacCMzn', '- Vertical distance from the tower-top to the nacelle CM (meters)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['NcIMUxn'], 'NcIMUxn', '- Downwind distance from the tower-top to the nacelle IMU (meters)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['NcIMUyn'], 'NcIMUyn', '- Lateral distance from the tower-top to the nacelle IMU (meters)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['NcIMUzn'], 'NcIMUzn', '- Vertical distance from the tower-top to the nacelle IMU (meters)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['Twr2Shft'], 'Twr2Shft', '- Vertical distance from the tower-top to the rotor shaft (meters)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['TowerHt'], 'TowerHt', '- Height of tower above ground level [onshore] or MSL [offshore] (meters)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['TowerBsHt'], 'TowerBsHt', '- Height of tower base above ground level [onshore] or MSL [offshore] (meters)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['PtfmCMxt'], 'PtfmCMxt', '- Downwind distance from the ground level [onshore] or MSL [offshore] to the platform CM (meters)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['PtfmCMyt'], 'PtfmCMyt', '- Lateral distance from the ground level [onshore] or MSL [offshore] to the platform CM (meters)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['PtfmCMzt'], 'PtfmCMzt', '- Vertical distance from the ground level [onshore] or MSL [offshore] to the platform CM (meters)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['PtfmRefzt'], 'PtfmRefzt', '- Vertical distance from the ground level [onshore] or MSL [offshore] to the platform reference point (meters)\n')) + f.write('---------------------- MASS AND INERTIA ----------------------------------------\n') + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['TipMass(1)'], 'TipMass(1)', '- Tip-brake mass, blade 1 (kg)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['TipMass(2)'], 'TipMass(2)', '- Tip-brake mass, blade 2 (kg)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['TipMass(3)'], 'TipMass(3)', '- Tip-brake mass, blade 3 (kg) [unused for 2 blades]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['HubMass'], 'HubMass', '- Hub mass (kg)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['HubIner'], 'HubIner', '- Hub inertia about rotor axis [3 blades] or teeter axis [2 blades] (kg m^2)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['GenIner'], 'GenIner', '- Generator inertia about HSS (kg m^2)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['NacMass'], 'NacMass', '- Nacelle mass (kg)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['NacYIner'], 'NacYIner', '- Nacelle inertia about yaw axis (kg m^2)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['YawBrMass'], 'YawBrMass', '- Yaw bearing mass (kg)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['PtfmMass'], 'PtfmMass', '- Platform mass (kg)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['PtfmRIner'], 'PtfmRIner', '- Platform inertia for roll tilt rotation about the platform CM (kg m^2)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['PtfmPIner'], 'PtfmPIner', '- Platform inertia for pitch tilt rotation about the platform CM (kg m^2)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['PtfmYIner'], 'PtfmYIner', '- Platform inertia for yaw rotation about the platform CM (kg m^2)\n')) + f.write('---------------------- BLADE ---------------------------------------------------\n') + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['BldNodes'], 'BldNodes', '- Number of blade nodes (per blade) used for analysis (-)\n')) + f.write('{:<22} {:<11} {:}'.format('"'+self.fst_vt['ElastoDyn']['BldFile1']+'"', 'BldFile1', '- Name of file containing properties for blade 1 (quoted string)\n')) + f.write('{:<22} {:<11} {:}'.format('"'+self.fst_vt['ElastoDyn']['BldFile2']+'"', 'BldFile2', '- Name of file containing properties for blade 2 (quoted string)\n')) + f.write('{:<22} {:<11} {:}'.format('"'+self.fst_vt['ElastoDyn']['BldFile3']+'"', 'BldFile3', '- Name of file containing properties for blade 3 (quoted string) [unused for 2 blades]\n')) + f.write('---------------------- ROTOR-TEETER --------------------------------------------\n') + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['TeetMod'], 'TeetMod', '- Rotor-teeter spring/damper model {0: none, 1: standard, 2: user-defined from routine UserTeet} (switch) [unused for 3 blades]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['TeetDmpP'], 'TeetDmpP', '- Rotor-teeter damper position (degrees) [used only for 2 blades and when TeetMod=1]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['TeetDmp'], 'TeetDmp', '- Rotor-teeter damping constant (N-m/(rad/s)) [used only for 2 blades and when TeetMod=1]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['TeetCDmp'], 'TeetCDmp', '- Rotor-teeter rate-independent Coulomb-damping moment (N-m) [used only for 2 blades and when TeetMod=1]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['TeetSStP'], 'TeetSStP', '- Rotor-teeter soft-stop position (degrees) [used only for 2 blades and when TeetMod=1]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['TeetHStP'], 'TeetHStP', '- Rotor-teeter hard-stop position (degrees) [used only for 2 blades and when TeetMod=1]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['TeetSSSp'], 'TeetSSSp', '- Rotor-teeter soft-stop linear-spring constant (N-m/rad) [used only for 2 blades and when TeetMod=1]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['TeetHSSp'], 'TeetHSSp', '- Rotor-teeter hard-stop linear-spring constant (N-m/rad) [used only for 2 blades and when TeetMod=1]\n')) + f.write('---------------------- DRIVETRAIN ----------------------------------------------\n') + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['GBoxEff'], 'GBoxEff', '- Gearbox efficiency (%)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['GBRatio'], 'GBRatio', '- Gearbox ratio (-)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['DTTorSpr'], 'DTTorSpr', '- Drivetrain torsional spring (N-m/rad)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['DTTorDmp'], 'DTTorDmp', '- Drivetrain torsional damper (N-m/(rad/s))\n')) + f.write('---------------------- FURLING -------------------------------------------------\n') + f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['Furling'], 'Furling', '- Read in additional model properties for furling turbine (flag) [must currently be FALSE)\n')) + f.write('{:<22} {:<11} {:}'.format('"'+self.fst_vt['ElastoDyn']['FurlFile']+'"', 'FurlFile', '- Name of file containing furling properties (quoted string) [unused when Furling=False]\n')) + f.write('---------------------- TOWER ---------------------------------------------------\n') + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['TwrNodes'], 'TwrNodes', '- Number of tower nodes used for analysis (-)\n')) + f.write('{:<22} {:<11} {:}'.format('"'+self.fst_vt['ElastoDyn']['TwrFile']+'"', 'TwrFile', '- Name of file containing tower properties (quoted string)\n')) + f.write('---------------------- OUTPUT --------------------------------------------------\n') + f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['SumPrint'], 'SumPrint', '- Print summary data to ".sum" (flag)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['OutFile'], '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)\n')) + f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['TabDelim'], 'TabDelim', '- Use tab delimiters in text tabular output file? (flag) (currently unused)\n')) + f.write('{:<22} {:<11} {:}'.format('"'+self.fst_vt['ElastoDyn']['OutFmt']+'"', 'OutFmt', '- Format used for text tabular output (except time). Resulting field should be 10 characters. (quoted string) (currently unused)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['TStart'], 'TStart', '- Time to begin tabular output (s) (currently unused)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['DecFact'], 'DecFact', '- Decimation factor for tabular output {1: output every time step} (-) (currently unused)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['NTwGages'], 'NTwGages', '- Number of tower nodes that have strain gages for output [0 to 9] (-)\n')) + if self.fst_vt['ElastoDyn']['TwrGagNd'] != 0: + f.write('{:<22} {:<11} {:}'.format(', '.join(['%d'%i for i in self.fst_vt['ElastoDyn']['TwrGagNd']]), 'TwrGagNd', '- List of tower nodes that have strain gages [1 to TwrNodes] (-) [unused if NTwGages=0]\n')) + else: + f.write('{:<22} {:<11} {:}'.format('', 'TwrGagNd', '- List of tower nodes that have strain gages [1 to TwrNodes] (-) [unused if NTwGages=0]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['NBlGages'], 'NBlGages', '- Number of blade nodes that have strain gages for output [0 to 9] (-)\n')) + if self.fst_vt['ElastoDyn']['BldGagNd'] != 0: + f.write('{:<22} {:<11} {:}'.format(', '.join(['%d'%i for i in self.fst_vt['ElastoDyn']['BldGagNd']]), 'BldGagNd', '- List of blade nodes that have strain gages [1 to BldNodes] (-) [unused if NBlGages=0]\n')) + else: + f.write('{:<22} {:<11} {:}'.format('', 'BldGagNd', '- List of blade nodes that have strain gages [1 to BldNodes] (-) [unused if NBlGages=0]\n')) + f.write(' OutList - The next line(s) contains a list of output parameters. See OutListParameters.xlsx for a listing of available output channels, (-)\n') + + outlist = self.get_outlist(self.fst_vt['outlist'], ['ElastoDyn']) + + for channel_list in outlist: + for i in range(len(channel_list)): + f.write('"' + channel_list[i] + '"\n') + + f.write('END of input file (the word "END" must appear in the first 3 columns of this last OutList line)\n') + + # Optional nodal output section + if 'BldNd_BladesOut' in self.fst_vt['ElastoDyn']: + f.write('====== Outputs for all blade stations (same ending as above for B1N1.... =========================== [optional section]\n') + f.write('{:<22d} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['BldNd_BladesOut'], 'BldNd_BladesOut', '- Number of blades to output all node information at. Up to number of blades on turbine. (-)\n')) + f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['ElastoDyn']['BldNd_BlOutNd'], 'BldNd_BlOutNd', '- Future feature will allow selecting a portion of the nodes to output. Not implemented yet. (-)\n')) + f.write(' OutList - The next line(s) contains a list of output parameters. See OutListParameters.xlsx, ElastoDyn_Nodes tab for a listing of available output channels, (-)\n') + + opt_outlist = self.get_outlist(self.fst_vt['outlist'], ['ElastoDyn_Nodes']) + for opt_channel_list in opt_outlist: + for i in range(len(opt_channel_list)): + f.write('"' + opt_channel_list[i] + '"\n') + f.write('END of input file (the word "END" must appear in the first 3 columns of this last OutList line)\n') + + f.write('---------------------------------------------------------------------------------------\n') + f.flush() + os.fsync(f) + f.close() + + def write_ElastoDynBlade(self): + + self.fst_vt['ElastoDyn']['BldFile1'] = self.FAST_namingOut + '_ElastoDyn_blade.dat' + self.fst_vt['ElastoDyn']['BldFile2'] = self.fst_vt['ElastoDyn']['BldFile1'] + self.fst_vt['ElastoDyn']['BldFile3'] = self.fst_vt['ElastoDyn']['BldFile1'] + blade_file = os.path.join(self.FAST_runDirectory,self.fst_vt['ElastoDyn']['BldFile1']) + f = open(blade_file, 'w') + + f.write('------- ELASTODYN V1.00.* INDIVIDUAL BLADE INPUT FILE --------------------------\n') + f.write('Generated with OpenFAST_IO\n') + f.write('---------------------- BLADE PARAMETERS ----------------------------------------\n') + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDynBlade']['NBlInpSt'], 'NBlInpSt', '- Number of blade input stations (-)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDynBlade']['BldFlDmp1'], 'BldFlDmp1', '- Blade flap mode #1 structural damping in percent of critical (%)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDynBlade']['BldFlDmp2'], 'BldFlDmp2', '- Blade flap mode #2 structural damping in percent of critical (%)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDynBlade']['BldEdDmp1'], 'BldEdDmp1', '- Blade edge mode #1 structural damping in percent of critical (%)\n')) + f.write('---------------------- BLADE ADJUSTMENT FACTORS --------------------------------\n') + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDynBlade']['FlStTunr1'], 'FlStTunr1', '- Blade flapwise modal stiffness tuner, 1st mode (-)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDynBlade']['FlStTunr2'], 'FlStTunr2', '- Blade flapwise modal stiffness tuner, 2nd mode (-)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDynBlade']['AdjBlMs'], 'AdjBlMs', '- Factor to adjust blade mass density (-)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDynBlade']['AdjFlSt'], 'AdjFlSt', '- Factor to adjust blade flap stiffness (-)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDynBlade']['AdjEdSt'], 'AdjEdSt', '- Factor to adjust blade edge stiffness (-)\n')) + f.write('---------------------- DISTRIBUTED BLADE PROPERTIES ----------------------------\n') + f.write(' BlFract PitchAxis StrcTwst BMassDen FlpStff EdgStff\n') + f.write(' (-) (-) (deg) (kg/m) (Nm^2) (Nm^2)\n') + BlFract = self.fst_vt['ElastoDynBlade']['BlFract'] + PitchAxis = self.fst_vt['ElastoDynBlade']['PitchAxis'] + StrcTwst = self.fst_vt['ElastoDynBlade']['StrcTwst'] + BMassDen = self.fst_vt['ElastoDynBlade']['BMassDen'] + FlpStff = self.fst_vt['ElastoDynBlade']['FlpStff'] + EdgStff = self.fst_vt['ElastoDynBlade']['EdgStff'] + for BlFracti, PitchAxisi, StrcTwsti, BMassDeni, FlpStffi, EdgStffi in zip(BlFract, PitchAxis, StrcTwst, BMassDen, FlpStff, EdgStff): + f.write('{: 2.15e} {: 2.15e} {: 2.15e} {: 2.15e} {: 2.15e} {: 2.15e}\n'.format(BlFracti, PitchAxisi, StrcTwsti, BMassDeni, FlpStffi, EdgStffi)) + f.write('---------------------- BLADE MODE SHAPES ---------------------------------------\n') + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDynBlade']['BldFl1Sh'][0], 'BldFl1Sh(2)', '- Flap mode 1, coeff of x^2\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDynBlade']['BldFl1Sh'][1], 'BldFl1Sh(3)', '- , coeff of x^3\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDynBlade']['BldFl1Sh'][2], 'BldFl1Sh(4)', '- , coeff of x^4\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDynBlade']['BldFl1Sh'][3], 'BldFl1Sh(5)', '- , coeff of x^5\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDynBlade']['BldFl1Sh'][4], 'BldFl1Sh(6)', '- , coeff of x^6\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDynBlade']['BldFl2Sh'][0], 'BldFl2Sh(2)', '- Flap mode 2, coeff of x^2\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDynBlade']['BldFl2Sh'][1], 'BldFl2Sh(3)', '- , coeff of x^3\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDynBlade']['BldFl2Sh'][2], 'BldFl2Sh(4)', '- , coeff of x^4\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDynBlade']['BldFl2Sh'][3], 'BldFl2Sh(5)', '- , coeff of x^5\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDynBlade']['BldFl2Sh'][4], 'BldFl2Sh(6)', '- , coeff of x^6\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDynBlade']['BldEdgSh'][0], 'BldEdgSh(2)', '- Edge mode 1, coeff of x^2\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDynBlade']['BldEdgSh'][1], 'BldEdgSh(3)', '- , coeff of x^3\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDynBlade']['BldEdgSh'][2], 'BldEdgSh(4)', '- , coeff of x^4\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDynBlade']['BldEdgSh'][3], 'BldEdgSh(5)', '- , coeff of x^5\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDynBlade']['BldEdgSh'][4], 'BldEdgSh(6)', '- , coeff of x^6\n')) + + f.flush() + os.fsync(f) + f.close() + + def write_ElastoDynTower(self): + + self.fst_vt['ElastoDyn']['TwrFile'] = self.FAST_namingOut + '_ElastoDyn_tower.dat' + tower_file = os.path.join(self.FAST_runDirectory,self.fst_vt['ElastoDyn']['TwrFile']) + f = open(tower_file, 'w') + + f.write('------- ELASTODYN V1.00.* TOWER INPUT FILE -------------------------------------\n') + f.write('Generated with OpenFAST_IO\n') + f.write('---------------------- TOWER PARAMETERS ----------------------------------------\n') + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDynTower']['NTwInpSt'], 'NTwInpSt', '- Number of input stations to specify tower geometry\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDynTower']['TwrFADmp1'], 'TwrFADmp(1)', '- Tower 1st fore-aft mode structural damping ratio (%)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDynTower']['TwrFADmp2'], 'TwrFADmp(2)', '- Tower 2nd fore-aft mode structural damping ratio (%)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDynTower']['TwrSSDmp1'], 'TwrSSDmp(1)', '- Tower 1st side-to-side mode structural damping ratio (%)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDynTower']['TwrSSDmp2'], 'TwrSSDmp(2)', '- Tower 2nd side-to-side mode structural damping ratio (%)\n')) + f.write('---------------------- TOWER ADJUSTMUNT FACTORS --------------------------------\n') + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDynTower']['FAStTunr1'], 'FAStTunr(1)', '- Tower fore-aft modal stiffness tuner, 1st mode (-)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDynTower']['FAStTunr2'], 'FAStTunr(2)', '- Tower fore-aft modal stiffness tuner, 2nd mode (-)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDynTower']['SSStTunr1'], 'SSStTunr(1)', '- Tower side-to-side stiffness tuner, 1st mode (-)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDynTower']['SSStTunr2'], 'SSStTunr(2)', '- Tower side-to-side stiffness tuner, 2nd mode (-)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDynTower']['AdjTwMa'], 'AdjTwMa', '- Factor to adjust tower mass density (-)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDynTower']['AdjFASt'], 'AdjFASt', '- Factor to adjust tower fore-aft stiffness (-)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDynTower']['AdjSSSt'], 'AdjSSSt', '- Factor to adjust tower side-to-side stiffness (-)\n')) + f.write('---------------------- DISTRIBUTED TOWER PROPERTIES ----------------------------\n') + f.write(' HtFract TMassDen TwFAStif TwSSStif\n') + f.write(' (-) (kg/m) (Nm^2) (Nm^2)\n') + HtFract = self.fst_vt['ElastoDynTower']['HtFract'] + TMassDen = self.fst_vt['ElastoDynTower']['TMassDen'] + TwFAStif = self.fst_vt['ElastoDynTower']['TwFAStif'] + TwSSStif = self.fst_vt['ElastoDynTower']['TwSSStif'] + for HtFracti, TMassDeni, TwFAStifi, TwSSStifi in zip(HtFract, TMassDen, TwFAStif, TwSSStif): + f.write('{: 2.15e} {: 2.15e} {: 2.15e} {: 2.15e}\n'.format(HtFracti, TMassDeni, TwFAStifi, TwSSStifi)) + f.write('---------------------- TOWER FORE-AFT MODE SHAPES ------------------------------\n') + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDynTower']['TwFAM1Sh'][0], 'TwFAM1Sh(2)', '- Mode 1, coefficient of x^2 term\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDynTower']['TwFAM1Sh'][1], 'TwFAM1Sh(3)', '- , coefficient of x^3 term\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDynTower']['TwFAM1Sh'][2], 'TwFAM1Sh(4)', '- , coefficient of x^4 term\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDynTower']['TwFAM1Sh'][3], 'TwFAM1Sh(5)', '- , coefficient of x^5 term\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDynTower']['TwFAM1Sh'][4], 'TwFAM1Sh(6)', '- , coefficient of x^6 term\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDynTower']['TwFAM2Sh'][0], 'TwFAM2Sh(2)', '- Mode 2, coefficient of x^2 term\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDynTower']['TwFAM2Sh'][1], 'TwFAM2Sh(3)', '- , coefficient of x^3 term\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDynTower']['TwFAM2Sh'][2], 'TwFAM2Sh(4)', '- , coefficient of x^4 term\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDynTower']['TwFAM2Sh'][3], 'TwFAM2Sh(5)', '- , coefficient of x^5 term\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDynTower']['TwFAM2Sh'][4], 'TwFAM2Sh(6)', '- , coefficient of x^6 term\n')) + f.write('---------------------- TOWER SIDE-TO-SIDE MODE SHAPES --------------------------\n') + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDynTower']['TwSSM1Sh'][0], 'TwSSM1Sh(2)', '- Mode 1, coefficient of x^2 term\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDynTower']['TwSSM1Sh'][1], 'TwSSM1Sh(3)', '- , coefficient of x^3 term\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDynTower']['TwSSM1Sh'][2], 'TwSSM1Sh(4)', '- , coefficient of x^4 term\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDynTower']['TwSSM1Sh'][3], 'TwSSM1Sh(5)', '- , coefficient of x^5 term\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDynTower']['TwSSM1Sh'][4], 'TwSSM1Sh(6)', '- , coefficient of x^6 term\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDynTower']['TwSSM2Sh'][0], 'TwSSM2Sh(2)', '- Mode 2, coefficient of x^2 term\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDynTower']['TwSSM2Sh'][1], 'TwSSM2Sh(3)', '- , coefficient of x^3 term\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDynTower']['TwSSM2Sh'][2], 'TwSSM2Sh(4)', '- , coefficient of x^4 term\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDynTower']['TwSSM2Sh'][3], 'TwSSM2Sh(5)', '- , coefficient of x^5 term\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ElastoDynTower']['TwSSM2Sh'][4], 'TwSSM2Sh(6)', '- , coefficient of x^6 term\n')) + + f.flush() + os.fsync(f) + f.close() + + def write_BeamDyn(self): + self.fst_vt['Fst']['BDBldFile(1)'] = self.FAST_namingOut + '_BeamDyn.dat' + self.fst_vt['Fst']['BDBldFile(2)'] = self.fst_vt['Fst']['BDBldFile(1)'] + self.fst_vt['Fst']['BDBldFile(3)'] = self.fst_vt['Fst']['BDBldFile(1)'] + + self.write_BeamDynBlade() + + beamdyn_file = os.path.join(self.FAST_runDirectory,self.fst_vt['Fst']['BDBldFile(1)']) + f = open(beamdyn_file, 'w') + + f.write('--------- BEAMDYN with OpenFAST INPUT FILE -------------------------------------------\n') + f.write('Generated with OpenFAST_IO\n') + f.write('---------------------- SIMULATION CONTROL --------------------------------------\n') + f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['BeamDyn']['Echo'], 'Echo', '- Echo input data to ".ech" (flag)\n')) + f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['BeamDyn']['QuasiStaticInit'], 'QuasiStaticInit', '- Use quasistatic pre-conditioning with centripetal accelerations in initialization (flag) [dynamic solve only]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['BeamDyn']['rhoinf'], 'rhoinf', '- Numerical damping parameter for generalized-alpha integrator\n')) + f.write('{:<22d} {:<11} {:}'.format(self.fst_vt['BeamDyn']['quadrature'], 'quadrature', '- Quadrature method: 1=Gaussian; 2=Trapezoidal (switch)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['BeamDyn']['refine'], 'refine', '- Refinement factor for trapezoidal quadrature (-). DEFAULT = 1 [used only when quadrature=2]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['BeamDyn']['n_fact'], 'n_fact', '- Factorization frequency (-). DEFAULT = 5\n')) + f.write(float_default_out(self.fst_vt['BeamDyn']['DTBeam']) + ' {:<11} {:}'.format('DTBeam', '- Time step size (s).\n')) + f.write(int_default_out(self.fst_vt['BeamDyn']['load_retries']) + ' {:<11} {:}'.format('load_retries', '- Number of factored load retries before quitting the aimulation\n')) + f.write(int_default_out(self.fst_vt['BeamDyn']['NRMax']) + ' {:<11} {:}'.format('NRMax', '- Max number of iterations in Newton-Ralphson algorithm (-). DEFAULT = 10\n')) + f.write(float_default_out(self.fst_vt['BeamDyn']['stop_tol']) + ' {:<11} {:}'.format('stop_tol', '- Tolerance for stopping criterion (-)\n')) + print('----------') + print(self.fst_vt['BeamDyn']['tngt_stf_fd'], type(self.fst_vt['BeamDyn']['tngt_stf_fd'])) + + f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['BeamDyn']['tngt_stf_fd'], 'tngt_stf_fd', '- Flag to use finite differenced tangent stiffness matrix (-)\n')) + f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['BeamDyn']['tngt_stf_comp'], 'tngt_stf_comp', '- Flag to compare analytical finite differenced tangent stiffness matrix (-)\n')) + f.write(float_default_out(self.fst_vt['BeamDyn']['tngt_stf_pert']) + ' {:<11} {:}'.format('tngt_stf_pert', '- perturbation size for finite differencing (-)\n')) + f.write(float_default_out(self.fst_vt['BeamDyn']['tngt_stf_difftol']) + ' {:<11} {:}'.format('tngt_stf_difftol', '- Maximum allowable relative difference between analytical and fd tangent stiffness (-)\n')) + f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['BeamDyn']['RotStates'], 'RotStates', '- Orient states in the rotating frame during linearization? (flag) [used only when linearizing]\n')) + f.write('---------------------- GEOMETRY PARAMETER --------------------------------------\n') + f.write('{:<22d} {:<11} {:}'.format(self.fst_vt['BeamDyn']['member_total'], 'member_total', '- Total number of members (-)\n')) + f.write('{:<22d} {:<11} {:}'.format(self.fst_vt['BeamDyn']['kp_total'], 'kp_total', '- Total number of key points (-) [must be at least 3]\n')) + for i in range(self.fst_vt['BeamDyn']['member_total']): + mem = self.fst_vt['BeamDyn']['members'][i] + f.write('{:<22} {:<11} {:}'.format(' '.join(['%d'%(i+1),'%d'%len(mem['kp_xr'])]), '', '- Member number; Number of key points in this member\n')) + f.write(" ".join(['{:^21s}'.format(i) for i in ['kp_xr', 'kp_yr', 'kp_zr', 'initial_twist']])+'\n') + f.write(" ".join(['{:^21s}'.format(i) for i in ['(m)', '(m)', '(m)', '(deg)']])+'\n') + for j in range(len(mem['kp_xr'])): + ln = [] + ln.append('{: 2.14e}'.format(mem['kp_xr'][j])) + ln.append('{: 2.14e}'.format(mem['kp_yr'][j])) + ln.append('{: 2.14e}'.format(mem['kp_zr'][j])) + ln.append('{: 2.14e}'.format(mem['initial_twist'][j])) + f.write(" ".join(ln) + '\n') + f.write('---------------------- MESH PARAMETER ------------------------------------------\n') + f.write('{:<22d} {:<11} {:}'.format(self.fst_vt['BeamDyn']['order_elem'], 'order_elem', '- Order of interpolation (basis) function (-)\n')) + f.write('---------------------- MATERIAL PARAMETER --------------------------------------\n') + f.write('{:<22} {:<11} {:}'.format('"'+self.fst_vt['BeamDyn']['BldFile']+'"', 'BldFile', '- Name of file containing properties for blade (quoted string)\n')) + f.write('---------------------- PITCH ACTUATOR PARAMETERS -------------------------------\n') + f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['BeamDyn']['UsePitchAct'], 'UsePitchAct', '- Whether a pitch actuator should be used (flag)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['BeamDyn']['PitchJ'], 'PitchJ', '- Pitch actuator inertia (kg-m^2) [used only when UsePitchAct is true]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['BeamDyn']['PitchK'], 'PitchK', '- Pitch actuator stiffness (kg-m^2/s^2) [used only when UsePitchAct is true]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['BeamDyn']['PitchC'], 'PitchC', '- Pitch actuator damping (kg-m^2/s) [used only when UsePitchAct is true]\n')) + f.write('---------------------- OUTPUTS -------------------------------------------------\n') + f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['BeamDyn']['SumPrint'], 'SumPrint', '- Print summary data to ".sum" (flag)\n')) + f.write('{:<22} {:<11} {:}'.format('"'+self.fst_vt['BeamDyn']['OutFmt']+'"', 'OutFmt', '- Format used for text tabular output, excluding the time channel.\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['BeamDyn']['NNodeOuts'], 'NNodeOuts', '- Number of nodes to output to file [0 - 9] (-)\n')) + f.write('{:<22} {:<11} {:}'.format(', '.join(self.fst_vt['BeamDyn']['OutNd']), 'OutNd', '- Nodes whose values will be output (-)\n')) + f.write(' OutList - The next line(s) contains a list of output parameters. See OutListParameters.xlsx for a listing of available output channels, (-)\n') + outlist = self.get_outlist(self.fst_vt['outlist'], ['BeamDyn']) + for channel_list in outlist: + for i in range(len(channel_list)): + f.write('"' + channel_list[i] + '"\n') + f.write('END of input file (the word "END" must appear in the first 3 columns of this last OutList line)\n') + + # Optional nodal output section + if 'BldNd_BlOutNd' in self.fst_vt['BeamDyn']: + f.write('====== Outputs for all blade stations (same ending as above for B1N1.... =========================== [optional section]\n') + # f.write('{:<22d} {:<11} {:}'.format(self.fst_vt['BeamDyn']['BldNd_BladesOut'], 'BldNd_BladesOut', '- Number of blades to output all node information at. Up to number of blades on turbine. (-)\n')) + f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['BeamDyn']['BldNd_BlOutNd'], 'BldNd_BlOutNd', '- Future feature will allow selecting a portion of the nodes to output. Not implemented yet. (-)\n')) + f.write(' OutList - The next line(s) contains a list of output parameters. See OutListParameters.xlsx, BeamDyn_Nodes tab for a listing of available output channels, (-)\n') + + opt_outlist = self.get_outlist(self.fst_vt['outlist'], ['BeamDyn_Nodes']) + for opt_channel_list in opt_outlist: + for i in range(len(opt_channel_list)): + f.write('"' + opt_channel_list[i] + '"\n') + f.write('END of input file (the word "END" must appear in the first 3 columns of this last OutList line)\n') + + f.write('---------------------------------------------------------------------------------------') + f.flush() + os.fsync(f) + f.close() + + # f.write('{:<22} {:<11} {:}'.format(self.fst_vt['BeamDyn'][''], '', '\n')) + # f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['BeamDyn'][''], '', '\n')) + # f.write('{:<22d} {:<11} {:}'.format(self.fst_vt['BeamDyn'][''], '', '\n')) + # f.write('{: 2.15e} {:<11} {:}'.format(self.fst_vt['BeamDyn'][''], '', '\n')) + # f.write(float_default_out(self.fst_vt['BeamDyn']['']) + ' {:<11} {:}'.format('', '\n')) + # f.write(int_default_out(self.fst_vt['BeamDyn']['']) + ' {:<11} {:}'.format('', '\n')) + + def write_BeamDynBlade(self): + + # bd_blade_file = self.fst_vt['BeamDyn']['BldFile'] + self.fst_vt['BeamDyn']['BldFile'] = self.FAST_namingOut + '_BeamDyn_Blade.dat' + bd_blade_file = os.path.abspath(os.path.join(self.FAST_runDirectory, self.fst_vt['BeamDyn']['BldFile'])) + f = open(bd_blade_file, 'w') + + f.write('------- BEAMDYN V1.00.* INDIVIDUAL BLADE INPUT FILE --------------------------\n') + f.write('Generated with OpenFAST_IO\n') + f.write('---------------------- BLADE PARAMETERS --------------------------------------\n') + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['BeamDynBlade']['station_total'], 'station_total', '- Number of blade input stations (-)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['BeamDynBlade']['damp_type'], 'damp_type', '- Damping type: 0: no damping; 1: damped\n')) + f.write('---------------------- DAMPING COEFFICIENT------------------------------------\n') + f.write(" ".join(['{:^11s}'.format(i) for i in ['mu1','mu2','mu3','mu4','mu5','mu6']])+'\n') + f.write(" ".join(['{:^11s}'.format(i) for i in ['(-)','(-)','(-)','(-)','(-)','(-)']])+'\n') + mu = [self.fst_vt['BeamDynBlade']['mu1'], self.fst_vt['BeamDynBlade']['mu2'], self.fst_vt['BeamDynBlade']['mu3'], self.fst_vt['BeamDynBlade']['mu4'], self.fst_vt['BeamDynBlade']['mu5'], self.fst_vt['BeamDynBlade']['mu6']] + f.write(" ".join(['{:^11f}'.format(i) for i in mu])+'\n') + f.write('---------------------- DISTRIBUTED PROPERTIES---------------------------------\n') + + for i in range(len(self.fst_vt['BeamDynBlade']['radial_stations'])): + f.write('{: 2.15e}\n'.format(self.fst_vt['BeamDynBlade']['radial_stations'][i])) + for j in range(6): + f.write(" ".join(['{: 2.15e}'.format(i) for i in self.fst_vt['BeamDynBlade']['beam_stiff'][i,j,:]])+'\n') + f.write('\n') + for j in range(6): + f.write(" ".join(['{: 2.15e}'.format(i) for i in self.fst_vt['BeamDynBlade']['beam_inertia'][i,j,:]])+'\n') + f.write('\n') + + f.write('\n') + + def write_InflowWind(self): + self.fst_vt['Fst']['InflowFile'] = self.FAST_namingOut + '_InflowFile.dat' + inflow_file = os.path.join(self.FAST_runDirectory,self.fst_vt['Fst']['InflowFile']) + f = open(inflow_file, 'w') + + f.write('------- InflowWind v3.01.* INPUT FILE -------------------------------------------------------------------------\n') + f.write('Generated with OpenFAST_IO\n') + f.write('---------------------------------------------------------------------------------------------------------------\n') + f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['InflowWind']['Echo'], 'Echo', '- Echo input data to .ech (flag)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['InflowWind']['WindType'], '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)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['InflowWind']['PropagationDir'], 'PropagationDir', '- Direction of wind propagation (meteoroligical rotation from aligned with X (positive rotates towards -Y) -- degrees)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['InflowWind']['VFlowAng'], 'VFlowAng', '- Upflow angle (degrees) (not used for native Bladed format WindType=7)\n')) + f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['InflowWind']['VelInterpCubic'], 'VelInterpCubic', '- Use cubic interpolation for velocity in time (false=linear, true=cubic) [Used with WindType=2,3,4,5,7]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['InflowWind']['NWindVel'], 'NWindVel', '- Number of points to output the wind velocity (0 to 9)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['InflowWind']['WindVxiList'], 'WindVxiList', '- List of coordinates in the inertial X direction (m)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['InflowWind']['WindVyiList'], 'WindVyiList', '- List of coordinates in the inertial Y direction (m)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['InflowWind']['WindVziList'], 'WindVziList', '- List of coordinates in the inertial Z direction (m)\n')) + f.write('================== Parameters for Steady Wind Conditions [used only for WindType = 1] =========================\n') + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['InflowWind']['HWindSpeed'], 'HWindSpeed', '- Horizontal windspeed (m/s)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['InflowWind']['RefHt'], 'RefHt', '- Reference height for horizontal wind speed (m)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['InflowWind']['PLexp'], 'PLexp', '- Power law exponent (-)\n')) + f.write('================== Parameters for Uniform wind file [used only for WindType = 2] ============================\n') + f.write('{:<22} {:<11} {:}'.format('"'+self.fst_vt['InflowWind']['Filename_Uni']+'"', 'Filename_Uni', '- Filename of time series data for uniform wind field. (-)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['InflowWind']['RefHt_Uni'], 'RefHt_Uni', '- Reference height for horizontal wind speed (m)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['InflowWind']['RefLength'], 'RefLength', '- Reference length for linear horizontal and vertical sheer (-)\n')) + f.write('================== Parameters for Binary TurbSim Full-Field files [used only for WindType = 3] ==============\n') + f.write('{:<22} {:<11} {:}'.format('"'+self.fst_vt['InflowWind']['FileName_BTS']+'"', 'FileName_BTS', '- Name of the Full field wind file to use (.bts)\n')) + f.write('================== Parameters for Binary Bladed-style Full-Field files [used only for WindType = 4] =========\n') + f.write('{:<22} {:<11} {:}'.format('"'+self.fst_vt['InflowWind']['FilenameRoot']+'"', 'FilenameRoot', '- Rootname of the full-field wind file to use (.wnd, .sum)\n')) + f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['InflowWind']['TowerFile'], 'TowerFile', '- Have tower file (.twr) (flag)\n')) + f.write('================== Parameters for HAWC-format binary files [Only used with WindType = 5] =====================\n') + f.write('{:<22} {:<11} {:}'.format('"'+self.fst_vt['InflowWind']['FileName_u']+'"', 'FileName_u', '- name of the file containing the u-component fluctuating wind (.bin)\n')) + f.write('{:<22} {:<11} {:}'.format('"'+self.fst_vt['InflowWind']['FileName_v']+'"', 'FileName_v', '- name of the file containing the v-component fluctuating wind (.bin)\n')) + f.write('{:<22} {:<11} {:}'.format('"'+self.fst_vt['InflowWind']['FileName_w']+'"', 'FileName_w', '- name of the file containing the w-component fluctuating wind (.bin)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['InflowWind']['nx'], 'nx', '- number of grids in the x direction (in the 3 files above) (-)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['InflowWind']['ny'], 'ny', '- number of grids in the y direction (in the 3 files above) (-)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['InflowWind']['nz'], 'nz', '- number of grids in the z direction (in the 3 files above) (-)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['InflowWind']['dx'], 'dx', '- distance (in meters) between points in the x direction (m)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['InflowWind']['dy'], 'dy', '- distance (in meters) between points in the y direction (m)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['InflowWind']['dz'], 'dz', '- distance (in meters) between points in the z direction (m)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['InflowWind']['RefHt_Hawc'], 'RefHt_Hawc', '- reference height; the height (in meters) of the vertical center of the grid (m)\n')) + f.write('------------- Scaling parameters for turbulence ---------------------------------------------------------\n') + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['InflowWind']['ScaleMethod'], 'ScaleMethod', '- Turbulence scaling method [0 = none, 1 = direct scaling, 2 = calculate scaling factor based on a desired standard deviation]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['InflowWind']['SFx'], 'SFx', '- Turbulence scaling factor for the x direction (-) [ScaleMethod=1]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['InflowWind']['SFy'], 'SFy', '- Turbulence scaling factor for the y direction (-) [ScaleMethod=1]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['InflowWind']['SFz'], 'SFz', '- Turbulence scaling factor for the z direction (-) [ScaleMethod=1]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['InflowWind']['SigmaFx'], 'SigmaFx', '- Turbulence standard deviation to calculate scaling from in x direction (m/s) [ScaleMethod=2]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['InflowWind']['SigmaFy'], 'SigmaFy', '- Turbulence standard deviation to calculate scaling from in y direction (m/s) [ScaleMethod=2]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['InflowWind']['SigmaFz'], 'SigmaFz', '- Turbulence standard deviation to calculate scaling from in z direction (m/s) [ScaleMethod=2]\n')) + f.write('------------- Mean wind profile parameters (added to HAWC-format files) ---------------------------------\n') + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['InflowWind']['URef'], 'URef', '- Mean u-component wind speed at the reference height (m/s)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['InflowWind']['WindProfile'], 'WindProfile', '- Wind profile type (0=constant;1=logarithmic,2=power law)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['InflowWind']['PLExp_Hawc'], 'PLExp_Hawc', '- Power law exponent (-) (used for PL wind profile type only)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['InflowWind']['Z0'], 'Z0', '- Surface roughness length (m) (used for LG wind profile type only)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['InflowWind']['XOffset'], 'XOffset', '- Initial offset in +x direction (shift of wind box) (-)\n')) + f.write('------------- LIDAR Parameters --------------------------------------------------------------------------\n') + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['InflowWind']['SensorType'], 'SensorType', '- Switch for lidar configuration (0 = None, 1 = Single Point Beam(s), 2 = Continuous, 3 = Pulsed)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['InflowWind']['NumPulseGate'], 'NumPulseGate', '- Number of lidar measurement gates (used when SensorType = 3)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['InflowWind']['PulseSpacing'], 'PulseSpacing', '- Distance between range gates (m) (used when SensorType = 3)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['InflowWind']['NumBeam'], 'NumBeam', '- Number of lidar measurement beams (0-5)(used when SensorType = 1)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['InflowWind']['FocalDistanceX'], '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)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['InflowWind']['FocalDistanceY'], '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)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['InflowWind']['FocalDistanceZ'], '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)\n')) + f.write('{:<22} {:<11} {:}'.format(', '.join(np.array(self.fst_vt['InflowWind']['RotorApexOffsetPos'], dtype=str)), 'RotorApexOffsetPos', '- Offset of the lidar from hub height (m)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['InflowWind']['URefLid'], 'URefLid', '- Reference average wind speed for the lidar[m/s]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['InflowWind']['MeasurementInterval'], 'MeasurementInterval', '- Time between each measurement [s]\n')) + f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['InflowWind']['LidRadialVel'], 'LidRadialVel', '- TRUE => return radial component, FALSE => return x direction estimate\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['InflowWind']['ConsiderHubMotion'], 'ConsiderHubMotion', '- Flag whether to consider the hub motions impact on Lidar measurements\n')) + f.write('====================== OUTPUT ==================================================\n') + f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['InflowWind']['SumPrint'], 'SumPrint', '- Print summary data to .IfW.sum (flag)\n')) + f.write('OutList - The next line(s) contains a list of output parameters. See OutListParameters.xlsx for a listing of available output channels, (-)\n') + + outlist = self.get_outlist(self.fst_vt['outlist'], ['InflowWind']) + for channel_list in outlist: + for i in range(len(channel_list)): + f.write('"' + channel_list[i] + '"\n') + + f.write('END of input file (the word "END" must appear in the first 3 columns of this last OutList line)\n') + f.write('---------------------------------------------------------------------------------------\n') + + f.flush() + os.fsync(f) + f.close() + + def write_AeroDyn15(self): + # AeroDyn v15.03 + + # Generate AeroDyn v15 blade input file + self.write_AeroDyn15Blade() + + # Generate AeroDyn v15 polars + self.write_AeroDyn15Polar() + + # Generate AeroDyn v15 airfoil coordinates + if self.fst_vt['AeroDyn15']['af_data'][1][0]['NumCoords'] != '0': + self.write_AeroDyn15Coord() + + if self.fst_vt['AeroDyn15']['WakeMod'] == 3: + if self.fst_vt['AeroDyn15']['AFAeroMod'] == 2: + raise Exception('OLAF is called with unsteady airfoil aerodynamics, but OLAF currently only supports AFAeroMod == 1') + self.write_OLAF() + + # Generate AeroDyn v15.03 input file + self.fst_vt['Fst']['AeroFile'] = self.FAST_namingOut + '_AeroDyn15.dat' + ad_file = os.path.join(self.FAST_runDirectory, self.fst_vt['Fst']['AeroFile']) + f = open(ad_file, 'w') + + f.write('------- AERODYN v15.03.* INPUT FILE ------------------------------------------------\n') + f.write('Generated with OpenFAST_IO\n') + f.write('====== General Options ============================================================================\n') + f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['Echo'], 'Echo', '- Echo the input to ".AD.ech"? (flag)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['DTAero'], 'DTAero', '- Time interval for aerodynamic calculations {or "default"} (s)\n')) + f.write('{:<22d} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['WakeMod'], 'WakeMod', '- Type of wake/induction model (switch) {0=none, 1=BEMT, 2=DBEMT, 3=OLAF} [WakeMod cannot be 2 or 3 when linearizing]\n')) + f.write('{:<22d} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['AFAeroMod'], 'AFAeroMod', '- Type of blade airfoil aerodynamics model (switch) {1=steady model, 2=Beddoes-Leishman unsteady model} [AFAeroMod must be 1 when linearizing]\n')) + f.write('{:<22d} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['TwrPotent'], '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}\n')) + f.write('{:<22d} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['TwrShadow'], 'TwrShadow', '- Calculate tower influence on wind based on downstream tower shadow (switch) {0=none, 1=Powles model, 2=Eames model}\n')) + f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['TwrAero'], 'TwrAero', '- Calculate tower aerodynamic loads? (flag)\n')) + f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['FrozenWake'], 'FrozenWake', '- Assume frozen wake during linearization? (flag) [used only when WakeMod=1 and when linearizing]\n')) + f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['CavitCheck'], 'CavitCheck', '- Perform cavitation check? (flag) [AFAeroMod must be 1 when CavitCheck=true]\n')) + f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['Buoyancy'], 'Buoyancy', '- Include buoyancy effects? (flag)\n')) + f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['CompAA'], 'CompAA', '- Flag to compute AeroAcoustics calculation [only used when WakeMod=1 or 2]\n')) + f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['AA_InputFile'], 'AA_InputFile', '- AeroAcoustics input file [used only when CompAA=true]\n')) + f.write('====== Environmental Conditions ===================================================================\n') + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['AirDens'], 'AirDens', '- Air density (kg/m^3)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['KinVisc'], 'KinVisc', '- Kinematic air viscosity (m^2/s)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['SpdSound'], 'SpdSound', '- Speed of sound (m/s)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['Patm'], 'Patm', '- Atmospheric pressure (Pa) [used only when CavitCheck=True]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['Pvap'], 'Pvap', '- Vapour pressure of fluid (Pa) [used only when CavitCheck=True]\n')) + f.write('====== Blade-Element/Momentum Theory Options ====================================================== [unused when WakeMod=0 or 3]\n') + f.write('{:<22d} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['SkewMod'], 'SkewMod', '- Type of skewed-wake correction model (switch) {1=uncoupled, 2=Pitt/Peters, 3=coupled} [unused when WakeMod=0 or 3]\n')) + f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['SkewModFactor'], 'SkewModFactor', '- Constant used in Pitt/Peters skewed wake model {or "default" is 15/32*pi} (-) [used only when SkewMod=2; unused when WakeMod=0 or 3]\n')) + f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['TipLoss'], 'TipLoss', '- Use the Prandtl tip-loss model? (flag) [unused when WakeMod=0 or 3]\n')) + f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['HubLoss'], 'HubLoss', '- Use the Prandtl hub-loss model? (flag) [unused when WakeMod=0 or 3]\n')) + f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['TanInd'], 'TanInd', '- Include tangential induction in BEMT calculations? (flag) [unused when WakeMod=0 or 3]\n')) + f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['AIDrag'], 'AIDrag', '- Include the drag term in the axial-induction calculation? (flag) [unused when WakeMod=0 or 3]\n')) + f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['TIDrag'], 'TIDrag', '- Include the drag term in the tangential-induction calculation? (flag) [unused when WakeMod=0,3 or TanInd=FALSE]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['IndToler'], 'IndToler', '- Convergence tolerance for BEMT nonlinear solve residual equation {or "default"} (-) [unused when WakeMod=0 or 3]\n')) + f.write('{:<22d} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['MaxIter'], 'MaxIter', '- Maximum number of iteration steps (-) [unused when WakeMod=0]\n')) + f.write('====== Dynamic Blade-Element/Momentum Theory Options ====================================================== [used only when WakeMod=2]\n') + f.write('{:<22d} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['DBEMT_Mod'], 'DBEMT_Mod', '- Type of dynamic BEMT (DBEMT) model {1=constant tau1, 2=time-dependent tau1, 3=constant tau1 with continuous formulation} (-) [used only when WakeMod=2]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['tau1_const'], 'tau1_const', '- Time constant for DBEMT (s) [used only when WakeMod=2 and DBEMT_Mod=1]\n')) + f.write('====== OLAF -- cOnvecting LAgrangian Filaments (Free Vortex Wake) Theory Options ================== [used only when WakeMod=3]\n') + olaf_file = self.FAST_namingOut + '_OLAF.dat' + f.write('{!s:<22} {:<11} {:}'.format(olaf_file, 'OLAFInputFileName', '- Input file for OLAF [used only when WakeMod=3]\n')) + f.write('====== Beddoes-Leishman Unsteady Airfoil Aerodynamics Options ===================================== [used only when AFAeroMod=2]\n') + f.write('{:<22d} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['UAMod'], 'UAMod', "- Unsteady Aero Model Switch (switch) {1=Baseline model (Original), 2=Gonzalez's variant (changes in Cn,Cc,Cm), 3=Minnema/Pierce variant (changes in Cc and Cm)} [used only when AFAeroMod=2]\n")) + f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['FLookup'], '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 AFAeroMod=2]\n")) + f.write('====== Airfoil Information =========================================================================\n') + f.write('{:<22d} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['AFTabMod'], '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} (-)\n')) + f.write('{:<22d} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['InCol_Alfa'], 'InCol_Alfa', '- The column in the airfoil tables that contains the angle of attack (-)\n')) + f.write('{:<22d} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['InCol_Cl'], 'InCol_Cl', '- The column in the airfoil tables that contains the lift coefficient (-)\n')) + f.write('{:<22d} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['InCol_Cd'], 'InCol_Cd', '- The column in the airfoil tables that contains the drag coefficient (-)\n')) + f.write('{:<22d} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['InCol_Cm'], 'InCol_Cm', '- The column in the airfoil tables that contains the pitching-moment coefficient; use zero if there is no Cm column (-)\n')) + f.write('{:<22d} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['InCol_Cpmin'], 'InCol_Cpmin', '- The column in the airfoil tables that contains the Cpmin coefficient; use zero if there is no Cpmin column (-)\n')) + f.write('{:<22d} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['NumAFfiles'], 'NumAFfiles', '- Number of airfoil files used (-)\n')) + for i in range(self.fst_vt['AeroDyn15']['NumAFfiles']): + if i == 0: + f.write('"' + self.fst_vt['AeroDyn15']['AFNames'][i] + '" AFNames - Airfoil file names (NumAFfiles lines) (quoted strings)\n') + else: + f.write('"' + self.fst_vt['AeroDyn15']['AFNames'][i] + '"\n') + f.write('====== Rotor/Blade Properties =====================================================================\n') + f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['UseBlCm'], 'UseBlCm', '- Include aerodynamic pitching moment in calculations? (flag)\n')) + f.write('{:<22} {:<11} {:}'.format('"'+self.fst_vt['AeroDyn15']['ADBlFile1']+'"', 'ADBlFile(1)', '- Name of file containing distributed aerodynamic properties for Blade #1 (-)\n')) + f.write('{:<22} {:<11} {:}'.format('"'+self.fst_vt['AeroDyn15']['ADBlFile2']+'"', 'ADBlFile(2)', '- Name of file containing distributed aerodynamic properties for Blade #2 (-) [unused if NumBl < 2]\n')) + f.write('{:<22} {:<11} {:}'.format('"'+self.fst_vt['AeroDyn15']['ADBlFile3']+'"', 'ADBlFile(3)', '- Name of file containing distributed aerodynamic properties for Blade #3 (-) [unused if NumBl < 3]\n')) + f.write('====== Hub Properties ============================================================================== [used only when Buoyancy=True]\n') + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['VolHub'], 'VolHub', '- Hub volume (m^3)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['HubCenBx'], 'HubCenBx', '- Hub center of buoyancy x direction offset (m)\n')) + f.write('====== Nacelle Properties ========================================================================== [used only when Buoyancy=True]\n') + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['VolNac'], 'VolNac', '- Nacelle volume (m^3)\n')) + f.write('{:<22} {:<11} {:}'.format(', '.join(np.array(self.fst_vt['AeroDyn15']['NacCenB'], dtype=str)), 'NacCenB', '- Position of nacelle center of buoyancy from yaw bearing in nacelle coordinates (m)\n')) + f.write('====== Tail Fin Aerodynamics ========================================================================\n') + f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['TFinAero'], 'TFinAero', '- Calculate tail fin aerodynamics model (flag)\n')) + f.write('{:<22} {:<11} {:}'.format('"'+self.fst_vt['AeroDyn15']['TFinFile']+'"', 'TFinFile', '- Input file for tail fin aerodynamics [used only when TFinAero=True]\n')) + f.write('====== Tower Influence and Aerodynamics ============================================================ [used only when TwrPotent/=0, TwrShadow/=0, TwrAero=True, or Buoyancy=True]\n') + f.write('{:<22d} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['NumTwrNds'], 'NumTwrNds', '- Number of tower nodes used in the analysis (-) [used only when TwrPotent/=0, TwrShadow/=0, TwrAero=True, or Buoyancy=True]\n')) + f.write('TwrElev TwrDiam TwrCd TwrTI TwrCb !TwrTI used only with TwrShadow=2, TwrCb used only with Buoyancy=True\n') + f.write('(m) (m) (-) (-) (-)\n') + for TwrElev, TwrDiam, TwrCd, TwrTI, TwrCb in zip(self.fst_vt['AeroDyn15']['TwrElev'], self.fst_vt['AeroDyn15']['TwrDiam'], self.fst_vt['AeroDyn15']['TwrCd'], self.fst_vt['AeroDyn15']['TwrTI'], self.fst_vt['AeroDyn15']['TwrCb']): + f.write('{: 2.15e} {: 2.15e} {: 2.15e} {: 2.15e} {: 2.15e} \n'.format(TwrElev, TwrDiam, TwrCd, TwrTI, TwrCb)) + f.write('====== Outputs ====================================================================================\n') + f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['SumPrint'], 'SumPrint', '- Generate a summary file listing input options and interpolated properties to ".AD.sum"? (flag)\n')) + f.write('{:<22d} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['NBlOuts'], 'NBlOuts', '- Number of blade node outputs [0 - 9] (-)\n')) + f.write('{:<22} {:<11} {:}'.format(', '.join(self.fst_vt['AeroDyn15']['BlOutNd']), 'BlOutNd', '- Blade nodes whose values will be output (-)\n')) + f.write('{:<22d} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['NTwOuts'], 'NTwOuts', '- Number of tower node outputs [0 - 9] (-)\n')) + if self.fst_vt['AeroDyn15']['NTwOuts'] != 0: + f.write('{:<22} {:<11} {:}'.format(', '.join(self.fst_vt['AeroDyn15']['TwOutNd']), 'TwOutNd', '- Tower nodes whose values will be output (-)\n')) + else: + f.write('{:<22} {:<11} {:}'.format(0, 'TwOutNd', '- Tower nodes whose values will be output (-)\n')) + f.write(' OutList - The next line(s) contains a list of output parameters. See OutListParameters.xlsx for a listing of available output channels, (-)\n') + + outlist = self.get_outlist(self.fst_vt['outlist'], ['AeroDyn']) + for channel_list in outlist: + for i in range(len(channel_list)): + f.write('"' + channel_list[i] + '"\n') + f.write('END of input file (the word "END" must appear in the first 3 columns of this last OutList line)\n') + + # Optional nodal output section + if 'BldNd_BladesOut' in self.fst_vt['AeroDyn15']: + f.write('====== Outputs for all blade stations (same ending as above for B1N1.... =========================== [optional section]\n') + f.write('{:<22d} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['BldNd_BladesOut'], 'BldNd_BladesOut', '- Number of blades to output all node information at. Up to number of blades on turbine. (-)\n')) + f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['BldNd_BlOutNd'], 'BldNd_BlOutNd', '- Future feature will allow selecting a portion of the nodes to output. Not implemented yet. (-)\n')) + f.write(' OutList - The next line(s) contains a list of output parameters. See OutListParameters.xlsx, AeroDyn_Nodes tab for a listing of available output channels, (-)\n') + + opt_outlist = self.get_outlist(self.fst_vt['outlist'], ['AeroDyn_Nodes']) + for opt_channel_list in opt_outlist: + for i in range(len(opt_channel_list)): + f.write('"' + opt_channel_list[i] + '"\n') + f.write('END of input file (the word "END" must appear in the first 3 columns of this last OutList line)\n') + + f.write('---------------------------------------------------------------------------------------\n') + f.flush() + os.fsync(f) + f.close() + + def write_AeroDyn15Blade(self): + # AeroDyn v15.00 Blade + self.fst_vt['AeroDyn15']['ADBlFile1'] = self.FAST_namingOut + '_AeroDyn15_blade.dat' + self.fst_vt['AeroDyn15']['ADBlFile2'] = self.fst_vt['AeroDyn15']['ADBlFile1'] + self.fst_vt['AeroDyn15']['ADBlFile3'] = self.fst_vt['AeroDyn15']['ADBlFile1'] + filename = os.path.join(self.FAST_runDirectory, self.fst_vt['AeroDyn15']['ADBlFile1']) + f = open(filename, 'w') + + f.write('------- AERODYN v15.00.* BLADE DEFINITION INPUT FILE -------------------------------------\n') + f.write('Generated with OpenFAST_IO\n') + f.write('====== Blade Properties =================================================================\n') + f.write('{:<11d} {:<11} {:}'.format(self.fst_vt['AeroDynBlade']['NumBlNds'], 'NumBlNds', '- Number of blade nodes used in the analysis (-)\n')) + f.write(' BlSpn BlCrvAC BlSwpAC BlCrvAng BlTwist BlChord BlAFID\n') + f.write(' (m) (m) (m) (deg) (deg) (m) (-)\n') + BlSpn = self.fst_vt['AeroDynBlade']['BlSpn'] + BlCrvAC = self.fst_vt['AeroDynBlade']['BlCrvAC'] + BlSwpAC = self.fst_vt['AeroDynBlade']['BlSwpAC'] + BlCrvAng = self.fst_vt['AeroDynBlade']['BlCrvAng'] + BlTwist = self.fst_vt['AeroDynBlade']['BlTwist'] + BlChord = self.fst_vt['AeroDynBlade']['BlChord'] + BlAFID = self.fst_vt['AeroDynBlade']['BlAFID'] + for Spn, CrvAC, SwpAC, CrvAng, Twist, Chord, AFID in zip(BlSpn, BlCrvAC, BlSwpAC, BlCrvAng, BlTwist, BlChord, BlAFID): + f.write('{: 2.15e} {: 2.15e} {: 2.15e} {: 2.15e} {: 2.15e} {: 2.15e} {: 8d}\n'.format(Spn, CrvAC, SwpAC, CrvAng, Twist, Chord, int(AFID))) + + f.flush() + os.fsync(f) + f.close() + + def write_AeroDyn15Polar(self): + # Airfoil Info v1.01 + + if not os.path.isdir(os.path.join(self.FAST_runDirectory,'Airfoils')): + try: + os.makedirs(os.path.join(self.FAST_runDirectory,'Airfoils')) + except: + try: + time.sleep(random.random()) + if not os.path.isdir(os.path.join(self.FAST_runDirectory,'Airfoils')): + os.makedirs(os.path.join(self.FAST_runDirectory,'Airfoils')) + except: + print("Error tring to make '%s'!"%os.path.join(self.FAST_runDirectory,'Airfoils')) + + + self.fst_vt['AeroDyn15']['NumAFfiles'] = len(self.fst_vt['AeroDyn15']['af_data']) + self.fst_vt['AeroDyn15']['AFNames'] = ['']*self.fst_vt['AeroDyn15']['NumAFfiles'] + + for afi in range(int(self.fst_vt['AeroDyn15']['NumAFfiles'])): + + self.fst_vt['AeroDyn15']['AFNames'][afi] = os.path.join('Airfoils', self.FAST_namingOut + '_AeroDyn15_Polar_%02d.dat'%afi) + af_file = os.path.join(self.FAST_runDirectory, self.fst_vt['AeroDyn15']['AFNames'][afi]) + f = open(af_file, 'w') + + f.write('! ------------ AirfoilInfo v1.01.x Input File ----------------------------------\n') + f.write('! Generated with OpenFAST_IO\n') + f.write('! line\n') + f.write('! line\n') + f.write('! ------------------------------------------------------------------------------\n') + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['af_data'][afi][0]['InterpOrd'], 'InterpOrd', '! Interpolation order to use for quasi-steady table lookup {1=linear; 3=cubic spline; "default"} [default=3]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['af_data'][afi][0]['NonDimArea'], 'NonDimArea', '! The non-dimensional area of the airfoil (area/chord^2) (set to 1.0 if unsure or unneeded)\n')) + if self.fst_vt['AeroDyn15']['af_data'][afi][0]['NumCoords'] != '0': + f.write('@"{:}_AF{:02d}_Coords.txt" {:<11} {:}'.format(self.FAST_namingOut, afi, 'NumCoords', '! The number of coordinates in the airfoil shape file. Set to zero if coordinates not included.\n')) + else: + f.write('{:<22d} {:<11} {:}'.format(0, 'NumCoords', '! The number of coordinates in the airfoil shape file. Set to zero if coordinates not included.\n')) + f.write('AF{:02d}_BL.txt {:<11} {:}'.format(afi, 'BL_file', '! The file name including the boundary layer characteristics of the profile. Ignored if the aeroacoustic module is not called.\n')) + # f.write('{:<22d} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['af_data'][afi][0]['NumTabs'], 'NumTabs', '! Number of airfoil tables in this file. Each table must have lines for Re and Ctrl.\n')) + + + # Check if we have multiple tables per airfoil + # if yes, allocate the number of airfoils to the respective radial stations + if self.fst_vt['AeroDyn15']['AFTabMod'] == 2: + num_tab = len(self.fst_vt['AeroDyn15']['af_data'][afi]) + elif self.fst_vt['AeroDyn15']['AFTabMod'] == 3: + # for tab_orig in range(self.fst_vt['AeroDyn15']['af_data'][afi][0]['NumTabs'] - 1): + if len( self.fst_vt['AeroDyn15']['af_data'][afi]) == 1 or \ + self.fst_vt['AeroDyn15']['af_data'][afi][0]['Ctrl'] == self.fst_vt['AeroDyn15']['af_data'][afi][1]['Ctrl']: + num_tab = 1 # assume that all Ctrl angles of the flaps are identical if the first two are -> no flaps! + else: + num_tab = self.fst_vt['AeroDyn15']['af_data'][afi][0]['NumTabs'] + else: + num_tab = 1 + # f.write('{:<22d} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['af_data'][afi][0]['NumTabs'], 'NumTabs','! Number of airfoil tables in this file. Each table must have lines for Re and Ctrl.\n')) + f.write('{:<22d} {:<11} {:}'.format(num_tab, 'NumTabs','! Number of airfoil tables in this file. Each table must have lines for Re and Ctrl.\n')) + + # for tab in range(self.fst_vt['AeroDyn15']['af_data'][afi][0]['NumTabs']): # For writing multiple tables (different Re or Ctrl values) + for tab in range(num_tab): # For writing multiple tables (different Re or Ctrl values) + f.write('! ------------------------------------------------------------------------------\n') + f.write("! data for table %i \n" % (tab + 1)) + f.write('! ------------------------------------------------------------------------------\n') + f.write('{:<22f} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['af_data'][afi][tab]['Re']*1.e-6, 'Re', '! Reynolds number in millions\n')) + f.write('{:<22d} {:<11} {:}'.format(int(self.fst_vt['AeroDyn15']['af_data'][afi][tab]['Ctrl']), 'Ctrl', '! Control setting (must be 0 for current AirfoilInfo)\n')) + f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['af_data'][afi][tab]['InclUAdata'], 'InclUAdata', '! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line\n')) + f.write('!........................................\n') + if self.fst_vt['AeroDyn15']['af_data'][afi][tab]['InclUAdata']: + f.write('{:<22f} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['af_data'][afi][tab]['alpha0'], 'alpha0', '! 0-lift angle of attack, depends on airfoil.\n')) + f.write('{:<22f} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['af_data'][afi][tab]['alpha1'], 'alpha1', '! Angle of attack at f=0.7, (approximately the stall angle) for AOA>alpha0. (deg)\n')) + f.write('{:<22f} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['af_data'][afi][tab]['alpha2'], 'alpha2', '! Angle of attack at f=0.7, (approximately the stall angle) for AOA1]\n')) + f.write('{:<22f} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['af_data'][afi][tab]['S2'], 'S2', '! Constant in the f curve best-fit for AOA> alpha1; by definition it depends on the airfoil. [ignored if UAMod<>1]\n')) + f.write('{:<22f} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['af_data'][afi][tab]['S3'], 'S3', '! Constant in the f curve best-fit for alpha2<=AOA< alpha0; by definition it depends on the airfoil. [ignored if UAMod<>1]\n')) + f.write('{:<22f} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['af_data'][afi][tab]['S4'], 'S4', '! Constant in the f curve best-fit for AOA< alpha2; by definition it depends on the airfoil. [ignored if UAMod<>1]\n')) + f.write('{:<22f} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['af_data'][afi][tab]['Cn1'], 'Cn1', '! Critical value of C0n at leading edge separation. It should be extracted from airfoil data at a given Mach and Reynolds number. It can be calculated from the static value of Cn at either the break in the pitching moment or the loss of chord force at the onset of stall. It is close to the condition of maximum lift of the airfoil at low Mach numbers.\n')) + f.write('{:<22f} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['af_data'][afi][tab]['Cn2'], 'Cn2', '! As Cn1 for negative AOAs.\n')) + # f.write('{: 22f} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['af_data'][afi]['St_sh'], 'St_sh', "! Strouhal's shedding frequency constant. [default = 0.19]\n")) + f.write(float_default_out(self.fst_vt['AeroDyn15']['af_data'][afi][tab]['St_sh']) + ' {:<11} {:}'.format('St_sh', "! Strouhal's shedding frequency constant. [default = 0.19]\n")) + f.write('{:<22f} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['af_data'][afi][tab]['Cd0'], 'Cd0', '! 2D drag coefficient value at 0-lift.\n')) + f.write('{:<22f} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['af_data'][afi][tab]['Cm0'], 'Cm0', '! 2D pitching moment coefficient about 1/4-chord location, at 0-lift, positive if nose up. [If the aerodynamics coefficients table does not include a column for Cm, this needs to be set to 0.0]\n')) + f.write('{:<22f} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['af_data'][afi][tab]['k0'], 'k0', '! Constant in the \\hat(x)_cp curve best-fit; = (\\hat(x)_AC-0.25). [ignored if UAMod<>1]\n')) + f.write('{:<22f} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['af_data'][afi][tab]['k1'], 'k1', '! Constant in the \\hat(x)_cp curve best-fit. [ignored if UAMod<>1]\n')) + f.write('{:<22f} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['af_data'][afi][tab]['k2'], 'k2', '! Constant in the \\hat(x)_cp curve best-fit. [ignored if UAMod<>1]\n')) + f.write('{:<22f} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['af_data'][afi][tab]['k3'], 'k3', '! Constant in the \\hat(x)_cp curve best-fit. [ignored if UAMod<>1]\n')) + f.write('{:<22f} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['af_data'][afi][tab]['k1_hat'], 'k1_hat', '! Constant in the expression of Cc due to leading edge vortex effects. [ignored if UAMod<>1]\n')) + f.write(float_default_out(self.fst_vt['AeroDyn15']['af_data'][afi][tab]['x_cp_bar']) + ' {:<11} {:}'.format('x_cp_bar', '! Constant in the expression of \\hat(x)_cp^v. [ignored if UAMod<>1, default = 0.2]\n')) + f.write(float_default_out(self.fst_vt['AeroDyn15']['af_data'][afi][tab]['UACutout']) + ' {:<11} {:}'.format('UACutout', '! Angle of attack above which unsteady aerodynamics are disabled (deg). [Specifying the string "Default" sets UACutout to 45 degrees]\n')) + f.write(float_default_out(self.fst_vt['AeroDyn15']['af_data'][afi][tab]['filtCutOff']) + ' {:<11} {:}'.format('filtCutOff', '! Cut-off frequency (-3 dB corner frequency) for low-pass filtering the AoA input to UA, as well as the 1st and 2nd derivatives (Hz) [default = 20]\n')) + + f.write('!........................................\n') + f.write('! Table of aerodynamics coefficients\n') + f.write('{:<22d} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['af_data'][afi][tab]['NumAlf'], 'NumAlf', '! Number of data lines in the following table\n')) + f.write('! Alpha Cl Cd Cm\n') + f.write('! (deg) (-) (-) (-)\n') + + polar_map = [self.fst_vt['AeroDyn15']['InCol_Alfa'], self.fst_vt['AeroDyn15']['InCol_Cl'], self.fst_vt['AeroDyn15']['InCol_Cd'], self.fst_vt['AeroDyn15']['InCol_Cm'], self.fst_vt['AeroDyn15']['InCol_Cpmin']] + polar_map.remove(0) + polar_map = [i-1 for i in polar_map] + + alpha = np.asarray(self.fst_vt['AeroDyn15']['af_data'][afi][tab]['Alpha']) + cl = np.asarray(self.fst_vt['AeroDyn15']['af_data'][afi][tab]['Cl']) + cd = np.asarray(self.fst_vt['AeroDyn15']['af_data'][afi][tab]['Cd']) + cm = np.asarray(self.fst_vt['AeroDyn15']['af_data'][afi][tab]['Cm']) + cpmin = np.asarray(self.fst_vt['AeroDyn15']['af_data'][afi][tab]['Cpmin']) + + if alpha[0] != -180.: + print('Airfoil number ' + str(afi) + ' tab number ' + str(tab) + ' has the min angle of attack different than -180 deg, and equal to ' + str(alpha[0]) + ' deg. This is changed to -180 deg now.') + alpha[0] = -180. + if alpha[-1] != 180.: + print('Airfoil number ' + str(afi) + ' tab number ' + str(tab) + ' has the max angle of attack different than 180 deg, and equal to ' + str(alpha[0]) + ' deg. This is changed to 180 deg now.') + alpha[-1] = 180. + if cl[0] != cl[-1]: + print('Airfoil number ' + str(afi) + ' tab number ' + str(tab) + ' has the lift coefficient different between +-180 deg. This is changed to be the same now.') + cl[0] = cl[-1] + if cd[0] != cd[-1]: + print('Airfoil number ' + str(afi) + ' tab number ' + str(tab) + ' has the drag coefficient different between +-180 deg. This is changed to be the same now.') + cd[0] = cd[-1] + if cm[0] != cm[-1]: + print('Airfoil number ' + str(afi) + ' tab number ' + str(tab) + ' has the moment coefficient different between +-180 deg. This is changed to be the same now.') + cm[0] = cm[-1] + + if self.fst_vt['AeroDyn15']['InCol_Cm'] == 0: + cm = np.zeros_like(cl) + if self.fst_vt['AeroDyn15']['InCol_Cpmin'] == 0: + cpmin = np.zeros_like(cl) + polar = np.column_stack((alpha, cl, cd, cm, cpmin)) + polar = polar[:,polar_map] + + + for row in polar: + f.write(' '.join(['{: 2.14e}'.format(val) for val in row])+'\n') + + f.flush() + os.fsync(f) + f.close() + + def write_AeroDyn15Coord(self): + + self.fst_vt['AeroDyn15']['AFNames_coord'] = ['']*self.fst_vt['AeroDyn15']['NumAFfiles'] + + for afi in range(int(self.fst_vt['AeroDyn15']['NumAFfiles'])): + self.fst_vt['AeroDyn15']['AFNames_coord'][afi] = os.path.join('Airfoils', self.FAST_namingOut + '_AF%02d_Coords.txt'%afi) + + x = self.fst_vt['AeroDyn15']['af_coord'][afi]['x'] + y = self.fst_vt['AeroDyn15']['af_coord'][afi]['y'] + coord = np.vstack((x, y)).T + + af_file = os.path.join(self.FAST_runDirectory, self.fst_vt['AeroDyn15']['AFNames_coord'][afi]) + f = open(af_file, 'w') + + f.write('{: 22d} {:<11} {:}'.format(len(x)+1, 'NumCoords', '! The number of coordinates in the airfoil shape file (including an extra coordinate for airfoil reference). Set to zero if coordinates not included.\n')) + f.write('! ......... x-y coordinates are next if NumCoords > 0 .............\n') + f.write('! x-y coordinate of airfoil reference\n') + f.write('! x/c y/c\n') + f.write('{: 5f} 0\n'.format(self.fst_vt['AeroDyn15']['ac'][afi])) + f.write('! coordinates of airfoil shape\n') + f.write('! interpolation to 200 points\n') + f.write('! x/c y/c\n') + for row in coord: + f.write(' '.join(['{: 2.14e}'.format(val) for val in row])+'\n') + + f.flush() + os.fsync(f) + f.close() + + def write_AeroDyn14(self): + + # ======= Airfoil Files ======== + # make directory for airfoil files + if not os.path.isdir(os.path.join(self.FAST_runDirectory,'AeroData')): + try: + os.mkdir(os.path.join(self.FAST_runDirectory,'AeroData')) + except: + try: + time.sleep(random.random()) + if not os.path.isdir(os.path.join(self.FAST_runDirectory,'AeroData')): + os.mkdir(os.path.join(self.FAST_runDirectory,'AeroData')) + except: + print("Error tring to make '%s'!"%os.path.join(self.FAST_runDirectory,'AeroData')) + + # create write airfoil objects to files + for i in range(self.fst_vt['AeroDyn14']['NumFoil']): + af_name = os.path.join(self.FAST_runDirectory, 'AeroData', 'Airfoil' + str(i) + '.dat') + self.fst_vt['AeroDyn14']['FoilNm'][i] = os.path.join('AeroData', 'Airfoil' + str(i) + '.dat') + self.write_AeroDyn14Polar(af_name, i) + + self.fst_vt['Fst']['AeroFile'] = self.FAST_namingOut + '_AeroDyn14.dat' + ad_file = os.path.join(self.FAST_runDirectory,self.fst_vt['Fst']['AeroFile']) + f = open(ad_file,'w') + + # create Aerodyn Tower + if self.fst_vt['AeroDyn14']['TwrShad'] > 0: + self.write_AeroDyn14Tower() + + # ======= Aerodyn Input File ======== + f.write('AeroDyn v14.04.* INPUT FILE\n\n') + + # f.write('{:}\n'.format(self.fst_vt['aerodyn']['SysUnits'])) + f.write('{:}\n'.format(self.fst_vt['AeroDyn14']['StallMod'])) + + f.write('{:}\n'.format(self.fst_vt['AeroDyn14']['UseCm'])) + f.write('{:}\n'.format(self.fst_vt['AeroDyn14']['InfModel'])) + f.write('{:}\n'.format(self.fst_vt['AeroDyn14']['IndModel'])) + f.write('{: 2.15e}\n'.format(self.fst_vt['AeroDyn14']['AToler'])) + f.write('{:}\n'.format(self.fst_vt['AeroDyn14']['TLModel'])) + f.write('{:}\n'.format(self.fst_vt['AeroDyn14']['HLModel'])) + f.write('{:}\n'.format(self.fst_vt['AeroDyn14']['TwrShad'])) + if self.fst_vt['AeroDyn14']['TwrShad'] > 0: + f.write('{:}\n'.format(self.fst_vt['AeroDyn14']['TwrPotent'])) + f.write('{:}\n'.format(self.fst_vt['AeroDyn14']['TwrShadow'])) + f.write('{:}\n'.format(self.fst_vt['AeroDyn14']['TwrFile'])) + f.write('{:}\n'.format(self.fst_vt['AeroDyn14']['CalcTwrAero'])) + else: + f.write('{: 2.15e}\n'.format(self.fst_vt['AeroDyn14']['ShadHWid'])) + f.write('{: 2.15e}\n'.format(self.fst_vt['AeroDyn14']['T_Shad_Refpt'])) + + f.write('{: 2.15e}\n'.format(self.fst_vt['AeroDyn14']['AirDens'])) + + f.write('{: 2.15e}\n'.format(self.fst_vt['AeroDyn14']['KinVisc'])) + + f.write('{:2}\n'.format(self.fst_vt['AeroDyn14']['DTAero'])) + + + f.write('{:2}\n'.format(self.fst_vt['AeroDyn14']['NumFoil'])) + for i in range (self.fst_vt['AeroDyn14']['NumFoil']): + f.write('"{:}"\n'.format(self.fst_vt['AeroDyn14']['FoilNm'][i])) + + f.write('{:2}\n'.format(self.fst_vt['AeroDynBlade']['BldNodes'])) + rnodes = self.fst_vt['AeroDynBlade']['RNodes'] + twist = self.fst_vt['AeroDynBlade']['AeroTwst'] + drnodes = self.fst_vt['AeroDynBlade']['DRNodes'] + chord = self.fst_vt['AeroDynBlade']['Chord'] + nfoil = self.fst_vt['AeroDynBlade']['NFoil'] + prnelm = self.fst_vt['AeroDynBlade']['PrnElm'] + f.write('Nodal properties\n') + for r, t, dr, c, a, p in zip(rnodes, twist, drnodes, chord, nfoil, prnelm): + f.write('{: 2.15e}\t{: 2.15e}\t{: 2.15e}\t{: 2.15e}\t{:5}\t{:}\n'.format(r, t, dr, c, a, p)) + + f.flush() + os.fsync(f) + f.close() + + def write_AeroDyn14Tower(self): + # AeroDyn v14.04 Tower + self.fst_vt['AeroDyn14']['TwrFile'] = self.FAST_namingOut + '_AeroDyn14_tower.dat' + filename = os.path.join(self.FAST_runDirectory, self.fst_vt['AeroDyn14']['TwrFile']) + f = open(filename, 'w') + + f.write('AeroDyn tower file, Aerodyn v14.04 formatting\n') + f.write('Generated with OpenFAST_IO\n') + f.write('{:<22d} {:<11} {:}'.format(self.fst_vt['AeroDynTower']['NTwrHt'], 'NTwrHt', '- Number of tower input height stations listed (-)\n')) + f.write('{:<22d} {:<11} {:}'.format(self.fst_vt['AeroDynTower']['NTwrRe'], 'NTwrRe', '- Number of tower Re values (-)\n')) + f.write('{:<22d} {:<11} {:}'.format(self.fst_vt['AeroDynTower']['NTwrCD'], 'NTwrCD', '- Number of tower CD columns (-) Note: For current versions, this MUST be 1\n')) + f.write('{: 2.15e} {:<11} {:}'.format(self.fst_vt['AeroDynTower']['Tower_Wake_Constant'], 'Tower_Wake_Constant', '- Tower wake constant (-) {0.0: full potential flow, 0.1: Bak model}\n')) + f.write('---------------------- DISTRIBUTED TOWER PROPERTIES ----------------------------\n') + f.write('TwrHtFr TwrWid NTwrCDCol\n') + for HtFr, Wid, CDId in zip(self.fst_vt['AeroDynTower']['TwrHtFr'], self.fst_vt['AeroDynTower']['TwrWid'], self.fst_vt['AeroDynTower']['NTwrCDCol']): + f.write('{: 2.15e} {: 2.15e} {:d}\n'.format(HtFr, Wid, int(CDId))) + f.write('---------------------- Re v CD PROPERTIES --------------------------------------\n') + f.write('TwrRe '+ ' '.join(['TwrCD%d'%(i+1) for i in range(self.fst_vt['AeroDynTower']['NTwrCD'])]) +'\n') + for Re, CD in zip(self.fst_vt['AeroDynTower']['TwrRe'], self.fst_vt['AeroDynTower']['TwrCD']): + f.write('% 2.15e' %Re + ' '.join(['% 2.15e'%cdi for cdi in CD]) + '\n') + + f.flush() + os.fsync(f) + f.close() + + def write_AeroDyn14Polar(self, filename, a_i): + # AeroDyn v14 Airfoil Polar Input File + + f = open(filename, 'w') + f.write('AeroDyn airfoil file, Aerodyn v14.04 formatting\n') + f.write('Generated with OpenFAST_IO\n') + + f.write('{:9d}\t{:}'.format(self.fst_vt['AeroDynBlade']['af_data'][a_i]['number_tables'], 'Number of airfoil tables in this file\n')) + for i in range(self.fst_vt['AeroDynBlade']['af_data'][a_i]['number_tables']): + param = self.fst_vt['AeroDynBlade']['af_data'][a_i]['af_tables'][i] + f.write('{:9g}\t{:}'.format(i, 'Table ID parameter\n')) + f.write('{: f}\t{:}'.format(param['StallAngle'], 'Stall angle (deg)\n')) + f.write('{: f}\t{:}'.format(0, 'No longer used, enter zero\n')) + f.write('{: f}\t{:}'.format(0, 'No longer used, enter zero\n')) + f.write('{: f}\t{:}'.format(0, 'No longer used, enter zero\n')) + f.write('{: f}\t{:}'.format(param['ZeroCn'], 'Angle of attack for zero Cn for linear Cn curve (deg)\n')) + f.write('{: f}\t{:}'.format(param['CnSlope'], 'Cn slope for zero lift for linear Cn curve (1/rad)\n')) + f.write('{: f}\t{:}'.format(param['CnPosStall'], 'Cn at stall value for positive angle of attack for linear Cn curve\n')) + f.write('{: f}\t{:}'.format(param['CnNegStall'], 'Cn at stall value for negative angle of attack for linear Cn curve\n')) + f.write('{: f}\t{:}'.format(param['alphaCdMin'], 'Angle of attack for minimum CD (deg)\n')) + f.write('{: f}\t{:}'.format(param['CdMin'], 'Minimum CD value\n')) + if param['cm']: + for a, cl, cd, cm in zip(param['alpha'], param['cl'], param['cd'], param['cm']): + f.write('{: 6e} {: 6e} {: 6e} {: 6e}\n'.format(a, cl, cd, cm)) + else: + for a, cl, cd in zip(param['alpha'], param['cl'], param['cd']): + f.write('{: 6e} {: 6e} {: 6e}\n'.format(a, cl, cd)) + + f.flush() + os.fsync(f) + f.close() + + def write_OLAF(self): + + olaf_file = os.path.join(self.FAST_runDirectory, self.FAST_namingOut + '_OLAF.dat') + f = open(olaf_file, 'w') + + f.write('--------------------------- OLAF (cOnvecting LAgrangian Filaments) INPUT FILE -----------------\n') + f.write('Generated by OpenFAST_IO\n') + f.write('--------------------------- GENERAL OPTIONS ---------------------------------------------------\n') + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['OLAF']['IntMethod'], 'IntMethod', '- Integration method {1: RK4, 5: Forward Euler 1st order, default: 5} (switch)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['OLAF']['DTfvw'], 'DTfvw', '- Time interval for wake propagation. {default: dtaero} (s)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['OLAF']['FreeWakeStart'], 'FreeWakeStart', '- Time when wake is free. (-) value = always free. {default: 0.0} (s)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['OLAF']['FullCircStart'], 'FullCircStart', '- Time at which full circulation is reached. {default: 0.0} (s)\n')) + f.write('--------------------------- CIRCULATION SPECIFICATIONS ----------------------------------------\n') + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['OLAF']['CircSolvMethod'], 'CircSolvingMethod', '- Circulation solving method {1: Cl-Based, 2: No-Flow Through, 3: Prescribed, default: 1 }(switch)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['OLAF']['CircSolvConvCrit'], 'CircSolvConvCrit', ' - Convergence criteria {default: 0.001} [only if CircSolvMethod=1] (-)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['OLAF']['CircSolvRelaxation'], 'CircSolvRelaxation', '- Relaxation factor {default: 0.1} [only if CircSolvMethod=1] (-)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['OLAF']['CircSolvMaxIter'], 'CircSolvMaxIter', ' - Maximum number of iterations for circulation solving {default: 30} (-)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['OLAF']['PrescribedCircFile'], 'PrescribedCircFile','- File containing prescribed circulation [only if CircSolvMethod=3] (quoted string)\n')) + f.write('===============================================================================================\n') + f.write('--------------------------- WAKE OPTIONS ------------------------------------------------------\n') + f.write('------------------- WAKE EXTENT AND DISCRETIZATION --------------------------------------------\n') + f.write('{:<22d} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['OLAF']['nNWPanels'], 'nNWPanels','- Number of near-wake panels (-)\n')) + f.write('{:<22d} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['OLAF']['nNWPanelsFree'], 'nNWPanelsFree','- Number of free near-wake panels (-) {default: nNWPanels}\n')) + f.write('{:<22d} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['OLAF']['nFWPanels'], 'nFWPanels','- Number of far-wake panels (-) {default: 0}\n')) + f.write('{:<22d} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['OLAF']['nFWPanelsFree'], 'nFWPanelsFree','- Number of free far-wake panels (-) {default: nFWPanels}\n')) + f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['OLAF']['FWShedVorticity'], 'FWShedVorticity','- Include shed vorticity in the far wake {default: False}\n')) + f.write('------------------- WAKE REGULARIZATIONS AND DIFFUSION -----------------------------------------\n') + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['OLAF']['DiffusionMethod'], 'DiffusionMethod','- Diffusion method to account for viscous effects {0: None, 1: Core Spreading, "default": 0}\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['OLAF']['RegDeterMethod'], 'RegDeterMethod','- Method to determine the regularization parameters {0: Manual, 1: Optimized, 2: Chord, 3: Span, default: 0 }\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['OLAF']['RegFunction'], 'RegFunction','- Viscous diffusion function {0: None, 1: Rankine, 2: LambOseen, 3: Vatistas, 4: Denominator, "default": 3} (switch)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['OLAF']['WakeRegMethod'], 'WakeRegMethod','- Wake regularization method {1: Constant, 2: Stretching, 3: Age, default: 3} (switch)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['OLAF']['WakeRegFactor'], 'WakeRegFactor','- Wake regularization factor (m)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['OLAF']['WingRegFactor'], 'WingRegFactor','- Wing regularization factor (m)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['OLAF']['CoreSpreadEddyVisc'], 'CoreSpreadEddyVisc','- Eddy viscosity in core spreading methods, typical values 1-1000\n')) + f.write('------------------- WAKE TREATMENT OPTIONS ---------------------------------------------------\n') + f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['OLAF']['TwrShadowOnWake'], 'TwrShadowOnWake','- Include tower flow disturbance effects on wake convection {default:false} [only if TwrPotent or TwrShadow]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['OLAF']['ShearModel'], 'ShearModel','- Shear Model {0: No treatment, 1: Mirrored vorticity, default: 0}\n')) + f.write('------------------- SPEEDUP OPTIONS -----------------------------------------------------------\n') + f.write('{:<22d} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['OLAF']['VelocityMethod'], 'VelocityMethod','- Method to determine the velocity {1:Segment N^2, 2:Particle tree, 3:Particle N^2, 4:Segment tree, default: 2}\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['OLAF']['TreeBranchFactor'], 'TreeBranchFactor','- Branch radius fraction above which a multipole calculation is used {default: 1.5} [only if VelocityMethod=2,4]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['OLAF']['PartPerSegment'], 'PartPerSegment','- Number of particles per segment {default: 1} [only if VelocityMethod=2,3]\n')) + f.write('===============================================================================================\n') + f.write('--------------------------- OUTPUT OPTIONS ---------------------------------------------------\n') + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['OLAF']['WrVTk'], 'WrVTk','- Outputs Visualization Toolkit (VTK) (independent of .fst option) {0: NoVTK, 1: Write VTK at VTK_fps, 2: Write VTK at init and final, default: 0} (flag)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['OLAF']['nVTKBlades'], 'nVTKBlades','- Number of blades for which VTK files are exported {0: No VTK per blade, n: VTK for blade 1 to n, default: 0} (-) \n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['OLAF']['VTKCoord'], 'VTKCoord','- Coordinate system used for VTK export. {1: Global, 2: Hub, 3: Both, default: 1} \n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['OLAF']['VTK_fps'], 'VTK_fps','- Frame rate for VTK output (frames per second) {"all" for all glue code timesteps, "default" for all OLAF timesteps} [only if WrVTK=1]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['OLAF']['nGridOut'], 'nGridOut','- Number of grid outputs\n')) + f.write('GridName GridType TStart TEnd DTGrid XStart XEnd nX YStart YEnd nY ZStart ZEnd nZ\n') + f.write('(-) (-) (s) (s) (s) (m) (m) (-) (m) (m) (-) (m) (m) (-)\n') + f.write('===============================================================================================\n') + f.write('--------------------------- ADVANCED OPTIONS --------------------------------------------------\n') + f.write('===============================================================================================\n') + + f.flush() + os.fsync(f) + f.close() + + def write_ServoDyn(self): + # ServoDyn v1.05 Input File + + self.fst_vt['Fst']['ServoFile'] = self.FAST_namingOut + '_ServoDyn.dat' + sd_file = os.path.join(self.FAST_runDirectory,self.fst_vt['Fst']['ServoFile']) + f = open(sd_file,'w') + + f.write('------- SERVODYN v1.05.* INPUT FILE --------------------------------------------\n') + f.write('Generated with OpenFAST_IO\n') + f.write('---------------------- SIMULATION CONTROL --------------------------------------\n') + f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['ServoDyn']['Echo'], 'Echo', '- Echo input data to .ech (flag)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ServoDyn']['DT'], 'DT', '- Communication interval for controllers (s) (or "default")\n')) + f.write('---------------------- PITCH CONTROL -------------------------------------------\n') + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ServoDyn']['PCMode'], 'PCMode', '- Pitch control mode {0: none, 3: user-defined from routine PitchCntrl, 4: user-defined from Simulink/Labview, 5: user-defined from Bladed-style DLL} (switch)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ServoDyn']['TPCOn'], 'TPCOn', '- Time to enable active pitch control (s) [unused when PCMode=0]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ServoDyn']['TPitManS1'], 'TPitManS(1)', '- Time to start override pitch maneuver for blade 1 and end standard pitch control (s)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ServoDyn']['TPitManS2'], 'TPitManS(2)', '- Time to start override pitch maneuver for blade 2 and end standard pitch control (s)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ServoDyn']['TPitManS3'], 'TPitManS(3)', '- Time to start override pitch maneuver for blade 3 and end standard pitch control (s) [unused for 2 blades]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ServoDyn']['PitManRat(1)'], 'PitManRat(1)', '- Pitch rate at which override pitch maneuver heads toward final pitch angle for blade 1 (deg/s)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ServoDyn']['PitManRat(2)'], 'PitManRat(2)', '- Pitch rate at which override pitch maneuver heads toward final pitch angle for blade 2 (deg/s)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ServoDyn']['PitManRat(3)'], 'PitManRat(3)', '- Pitch rate at which override pitch maneuver heads toward final pitch angle for blade 3 (deg/s) [unused for 2 blades]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ServoDyn']['BlPitchF(1)'], 'BlPitchF(1)', '- Blade 1 final pitch for pitch maneuvers (degrees)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ServoDyn']['BlPitchF(2)'], 'BlPitchF(2)', '- Blade 2 final pitch for pitch maneuvers (degrees)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ServoDyn']['BlPitchF(3)'], 'BlPitchF(3)', '- Blade 3 final pitch for pitch maneuvers (degrees) [unused for 2 blades]\n')) + f.write('---------------------- GENERATOR AND TORQUE CONTROL ----------------------------\n') + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ServoDyn']['VSContrl'], 'VSContrl', '- Variable-speed control mode {0: none, 1: simple VS, 3: user-defined from routine UserVSCont, 4: user-defined from Simulink/Labview, 5: user-defined from Bladed-style DLL} (switch)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ServoDyn']['GenModel'], 'GenModel', '- Generator model {1: simple, 2: Thevenin, 3: user-defined from routine UserGen} (switch) [used only when VSContrl=0]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ServoDyn']['GenEff'], 'GenEff', '- Generator efficiency [ignored by the Thevenin and user-defined generator models] (%)\n')) + f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['ServoDyn']['GenTiStr'], 'GenTiStr', '- Method to start the generator {T: timed using TimGenOn, F: generator speed using SpdGenOn} (flag)\n')) + f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['ServoDyn']['GenTiStp'], 'GenTiStp', '- Method to stop the generator {T: timed using TimGenOf, F: when generator power = 0} (flag)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ServoDyn']['SpdGenOn'], 'SpdGenOn', '- Generator speed to turn on the generator for a startup (HSS speed) (rpm) [used only when GenTiStr=False]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ServoDyn']['TimGenOn'], 'TimGenOn', '- Time to turn on the generator for a startup (s) [used only when GenTiStr=True]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ServoDyn']['TimGenOf'], 'TimGenOf', '- Time to turn off the generator (s) [used only when GenTiStp=True]\n')) + f.write('---------------------- SIMPLE VARIABLE-SPEED TORQUE CONTROL --------------------\n') + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ServoDyn']['VS_RtGnSp'], 'VS_RtGnSp', '- Rated generator speed for simple variable-speed generator control (HSS side) (rpm) [used only when VSContrl=1]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ServoDyn']['VS_RtTq'], 'VS_RtTq', '- Rated generator torque/constant generator torque in Region 3 for simple variable-speed generator control (HSS side) (N-m) [used only when VSContrl=1]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ServoDyn']['VS_Rgn2K'], 'VS_Rgn2K', '- Generator torque constant in Region 2 for simple variable-speed generator control (HSS side) (N-m/rpm^2) [used only when VSContrl=1]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ServoDyn']['VS_SlPc'], 'VS_SlPc', '- Rated generator slip percentage in Region 2 1/2 for simple variable-speed generator control (%) [used only when VSContrl=1]\n')) + f.write('---------------------- SIMPLE INDUCTION GENERATOR ------------------------------\n') + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ServoDyn']['SIG_SlPc'], 'SIG_SlPc', '- Rated generator slip percentage (%) [used only when VSContrl=0 and GenModel=1]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ServoDyn']['SIG_SySp'], 'SIG_SySp', '- Synchronous (zero-torque) generator speed (rpm) [used only when VSContrl=0 and GenModel=1]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ServoDyn']['SIG_RtTq'], 'SIG_RtTq', '- Rated torque (N-m) [used only when VSContrl=0 and GenModel=1]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ServoDyn']['SIG_PORt'], 'SIG_PORt', '- Pull-out ratio (Tpullout/Trated) (-) [used only when VSContrl=0 and GenModel=1]\n')) + f.write('---------------------- THEVENIN-EQUIVALENT INDUCTION GENERATOR -----------------\n') + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ServoDyn']['TEC_Freq'], 'TEC_Freq', '- Line frequency [50 or 60] (Hz) [used only when VSContrl=0 and GenModel=2]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ServoDyn']['TEC_NPol'], 'TEC_NPol', '- Number of poles [even integer > 0] (-) [used only when VSContrl=0 and GenModel=2]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ServoDyn']['TEC_SRes'], 'TEC_SRes', '- Stator resistance (ohms) [used only when VSContrl=0 and GenModel=2]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ServoDyn']['TEC_RRes'], 'TEC_RRes', '- Rotor resistance (ohms) [used only when VSContrl=0 and GenModel=2]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ServoDyn']['TEC_VLL'], 'TEC_VLL', '- Line-to-line RMS voltage (volts) [used only when VSContrl=0 and GenModel=2]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ServoDyn']['TEC_SLR'], 'TEC_SLR', '- Stator leakage reactance (ohms) [used only when VSContrl=0 and GenModel=2]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ServoDyn']['TEC_RLR'], 'TEC_RLR', '- Rotor leakage reactance (ohms) [used only when VSContrl=0 and GenModel=2]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ServoDyn']['TEC_MR'], 'TEC_MR', '- Magnetizing reactance (ohms) [used only when VSContrl=0 and GenModel=2]\n')) + f.write('---------------------- HIGH-SPEED SHAFT BRAKE ----------------------------------\n') + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ServoDyn']['HSSBrMode'], 'HSSBrMode', '- HSS brake model {0: none, 1: simple, 3: user-defined from routine UserHSSBr, 4: user-defined from Simulink/Labview, 5: user-defined from Bladed-style DLL} (switch)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ServoDyn']['THSSBrDp'], 'THSSBrDp', '- Time to initiate deployment of the HSS brake (s)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ServoDyn']['HSSBrDT'], 'HSSBrDT', '- Time for HSS-brake to reach full deployment once initiated (sec) [used only when HSSBrMode=1]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ServoDyn']['HSSBrTqF'], 'HSSBrTqF', '- Fully deployed HSS-brake torque (N-m)\n')) + f.write('---------------------- NACELLE-YAW CONTROL -------------------------------------\n') + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ServoDyn']['YCMode'], 'YCMode', '- Yaw control mode {0: none, 3: user-defined from routine UserYawCont, 4: user-defined from Simulink/Labview, 5: user-defined from Bladed-style DLL} (switch)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ServoDyn']['TYCOn'], 'TYCOn', '- Time to enable active yaw control (s) [unused when YCMode=0]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ServoDyn']['YawNeut'], 'YawNeut', '- Neutral yaw position--yaw spring force is zero at this yaw (degrees)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ServoDyn']['YawSpr'], 'YawSpr', '- Nacelle-yaw spring constant (N-m/rad)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ServoDyn']['YawDamp'], 'YawDamp', '- Nacelle-yaw damping constant (N-m/(rad/s))\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ServoDyn']['TYawManS'], 'TYawManS', '- Time to start override yaw maneuver and end standard yaw control (s)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ServoDyn']['YawManRat'], 'YawManRat', '- Yaw maneuver rate (in absolute value) (deg/s)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ServoDyn']['NacYawF'], 'NacYawF', '- Final yaw angle for override yaw maneuvers (degrees)\n')) + f.write('---------------------- Aerodynamic Flow Control -------------------------------------\n') + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ServoDyn']['AfCmode'], 'AfCmode', '- Airfoil control mode {0- none, 1- cosine wave cycle, 4- user-defined from Simulink/Labview, 5- user-defined from Bladed-style DLL}\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ServoDyn']['AfC_Mean'], 'AfC_Mean', '- Mean level for sinusoidal cycling or steady value (-) [used only with AfCmode==1]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ServoDyn']['AfC_Amp'], 'AfC_Amp', '- Amplitude for for cosine cycling of flap signal (AfC = AfC_Amp*cos(Azimuth+phase)+AfC_mean) (-) [used only with AfCmode==1]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ServoDyn']['AfC_Phase'], 'AfC_phase', '- Phase relative to the blade azimuth (0 is vertical) for for cosine cycling of flap signal (deg) [used only with AfCmode==1]\n')) + f.write('---------------------- STRUCTURAL CONTROL ---------------------------------------\n') + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ServoDyn']['NumBStC'], 'NumBStC', '- Number of blade structural controllers (integer)\n')) + f.write('{!s:<22} {:<11} {:}'.format('"' + '" "'.join(self.fst_vt['ServoDyn']['BStCfiles']) + '"', 'BStCfiles', '- Name of the file for blade tuned mass damper (quoted string) [unused when CompNTMD is false]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ServoDyn']['NumNStC'], 'NumNStC', '- Number of nacelle structural controllers (integer)\n')) + f.write('{!s:<22} {:<11} {:}'.format('"' + '" "'.join(self.fst_vt['ServoDyn']['NStCfiles']) + '"', 'NStCfiles', '- Name of the file for nacelle tuned mass damper (quoted string) [unused when CompNTMD is false]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ServoDyn']['NumTStC'], 'NumTStC', '- Number of tower structural controllers (integer)\n')) + f.write('{!s:<22} {:<11} {:}'.format('"' + '" "'.join(self.fst_vt['ServoDyn']['TStCfiles']) + '"', 'TStCfiles', '- Name of the file for tower tuned mass damper (quoted string) [unused when CompNTMD is false]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ServoDyn']['NumSStC'], 'NumSStC', '- Number of sbustructure structural controllers (integer)\n')) + f.write('{!s:<22} {:<11} {:}'.format('"' + '" "'.join(self.fst_vt['ServoDyn']['SStCfiles']) + '"', 'SStCfiles', '- Name of the file for sbustructure tuned mass damper (quoted string) [unused when CompNTMD is false]\n')) + f.write('---------------------- CABLE CONTROL ---------------------------------------- \n') + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ServoDyn']['CCmode'], 'CCmode', '- Cable control mode {0- none, 4- user-defined from Simulink/Labview, 5- user-defineAfC_phased from Bladed-style DLL}\n')) + f.write('---------------------- BLADED INTERFACE ---------------------------------------- [used only with Bladed Interface]\n') + f.write('{:<22} {:<11} {:}'.format('"'+self.fst_vt['ServoDyn']['DLL_FileName']+'"', 'DLL_FileName', '- Name/location of the dynamic library {.dll [Windows] or .so [Linux]} in the Bladed-DLL format (-) [used only with Bladed Interface]\n')) + f.write('{:<22} {:<11} {:}'.format('"'+self.fst_vt['ServoDyn']['DLL_InFile']+'"', 'DLL_InFile', '- Name of input file sent to the DLL (-) [used only with Bladed Interface]\n')) + f.write('{:<22} {:<11} {:}'.format('"'+self.fst_vt['ServoDyn']['DLL_ProcName']+'"', 'DLL_ProcName', '- Name of procedure in DLL to be called (-) [case sensitive; used only with DLL Interface]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ServoDyn']['DLL_DT'], 'DLL_DT', '- Communication interval for dynamic library (s) (or "default") [used only with Bladed Interface]\n')) + f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['ServoDyn']['DLL_Ramp'], 'DLL_Ramp', '- Whether a linear ramp should be used between DLL_DT time steps [introduces time shift when true] (flag) [used only with Bladed Interface]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ServoDyn']['BPCutoff'], 'BPCutoff', '- Cuttoff frequency for low-pass filter on blade pitch from DLL (Hz) [used only with Bladed Interface]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ServoDyn']['NacYaw_North'], 'NacYaw_North', '- Reference yaw angle of the nacelle when the upwind end points due North (deg) [used only with Bladed Interface]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ServoDyn']['Ptch_Cntrl'], 'Ptch_Cntrl', '- Record 28: Use individual pitch control {0: collective pitch; 1: individual pitch control} (switch) [used only with Bladed Interface]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ServoDyn']['Ptch_SetPnt'], 'Ptch_SetPnt', '- Record 5: Below-rated pitch angle set-point (deg) [used only with Bladed Interface]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ServoDyn']['Ptch_Min'], 'Ptch_Min', '- Record 6: Minimum pitch angle (deg) [used only with Bladed Interface]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ServoDyn']['Ptch_Max'], 'Ptch_Max', '- Record 7: Maximum pitch angle (deg) [used only with Bladed Interface]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ServoDyn']['PtchRate_Min'], 'PtchRate_Min', '- Record 8: Minimum pitch rate (most negative value allowed) (deg/s) [used only with Bladed Interface]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ServoDyn']['PtchRate_Max'], 'PtchRate_Max', '- Record 9: Maximum pitch rate (deg/s) [used only with Bladed Interface]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ServoDyn']['Gain_OM'], 'Gain_OM', '- Record 16: Optimal mode gain (Nm/(rad/s)^2) [used only with Bladed Interface]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ServoDyn']['GenSpd_MinOM'], 'GenSpd_MinOM', '- Record 17: Minimum generator speed (rpm) [used only with Bladed Interface]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ServoDyn']['GenSpd_MaxOM'], 'GenSpd_MaxOM', '- Record 18: Optimal mode maximum speed (rpm) [used only with Bladed Interface]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ServoDyn']['GenSpd_Dem'], 'GenSpd_Dem', '- Record 19: Demanded generator speed above rated (rpm) [used only with Bladed Interface]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ServoDyn']['GenTrq_Dem'], 'GenTrq_Dem', '- Record 22: Demanded generator torque above rated (Nm) [used only with Bladed Interface]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ServoDyn']['GenPwr_Dem'], 'GenPwr_Dem', '- Record 13: Demanded power (W) [used only with Bladed Interface]\n')) + f.write('---------------------- BLADED INTERFACE TORQUE-SPEED LOOK-UP TABLE -------------\n') + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ServoDyn']['DLL_NumTrq'], 'DLL_NumTrq', '- Record 26: No. of points in torque-speed look-up table {0 = none and use the optimal mode parameters; nonzero = ignore the optimal mode PARAMETERs by setting Record 16 to 0.0} (-) [used only with Bladed Interface]\n')) + f.write('{:<22}\t{:<22}\n'.format("GenSpd_TLU", "GenTrq_TLU")) + f.write('{:<22}\t{:<22}\n'.format("(rpm)", "(Nm)")) + for i in range(self.fst_vt['ServoDyn']['DLL_NumTrq']): + a1 = self.fst_vt['ServoDyn']['GenSpd_TLU'][i] + a2 = self.fst_vt['ServoDyn']['GenTrq_TLU'][i] + f.write('{:<22}\t{:<22}\n'.format(a1, a2)) + f.write('---------------------- OUTPUT --------------------------------------------------\n') + f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['ServoDyn']['SumPrint'], 'SumPrint', '- Print summary data to .sum (flag) (currently unused)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ServoDyn']['OutFile'], '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)\n')) + f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['ServoDyn']['TabDelim'], 'TabDelim', '- Use tab delimiters in text tabular output file? (flag) (currently unused)\n')) + f.write('{:<22} {:<11} {:}'.format('"'+self.fst_vt['ServoDyn']['OutFmt']+'"', 'OutFmt', '- Format used for text tabular output (except time). Resulting field should be 10 characters. (quoted string) (currently unused)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['ServoDyn']['TStart'], 'TStart', '- Time to begin tabular output (s) (currently unused)\n')) + f.write(' OutList - The next line(s) contains a list of output parameters. See OutListParameters.xlsx for a listing of available output channels, (-)\n') + + outlist = self.get_outlist(self.fst_vt['outlist'], ['ServoDyn']) + for channel_list in outlist: + for i in range(len(channel_list)): + f.write('"' + channel_list[i] + '"\n') + + f.write('END of input file (the word "END" must appear in the first 3 columns of this last OutList line)\n') + f.write('---------------------------------------------------------------------------------------\n') + + f.flush() + os.fsync(f) + f.close() + + def write_DISCON_in(self): + # Generate Bladed style Interface controller input file, intended for ROSCO https://github.com/NREL/rosco.toolbox + + # Fill controller and turbine objects for ROSCO + # - controller + controller = type('', (), {})() + + turbine = type('', (), {})() + turbine.Cp = type('', (), {})() + turbine.Ct = type('', (), {})() + turbine.Cq = type('', (), {})() + turbine.v_rated = self.fst_vt['DISCON_in']['v_rated'] + turbine.Cp = self.fst_vt['DISCON_in']['Cp'] + turbine.Ct = self.fst_vt['DISCON_in']['Ct'] + turbine.Cq = self.fst_vt['DISCON_in']['Cq'] + turbine.Cp_table = self.fst_vt['DISCON_in']['Cp_table'] + turbine.Ct_table = self.fst_vt['DISCON_in']['Ct_table'] + turbine.Cq_table = self.fst_vt['DISCON_in']['Cq_table'] + turbine.pitch_initial_rad = self.fst_vt['DISCON_in']['Cp_pitch_initial_rad'] + turbine.TSR_initial = self.fst_vt['DISCON_in']['Cp_TSR_initial'] + turbine.TurbineName = 'OpenFAST_IO Turbine' + + # Define DISCON infile paths + self.fst_vt['ServoDyn']['DLL_InFile'] = self.FAST_namingOut + '_DISCON.IN' + discon_in_file = os.path.join(self.FAST_runDirectory, self.fst_vt['ServoDyn']['DLL_InFile']) + self.fst_vt['DISCON_in']['PerfFileName'] = self.FAST_namingOut + '_Cp_Ct_Cq.txt' + + # Write DISCON input files + ROSCO_utilities.write_rotor_performance( + turbine, + txt_filename=os.path.join(self.FAST_runDirectory, self.fst_vt['DISCON_in']['PerfFileName']) + ) + + ROSCO_utilities.write_DISCON( + turbine, + controller, + param_file=discon_in_file, + txt_filename=self.fst_vt['DISCON_in']['PerfFileName'], + rosco_vt=self.fst_vt['DISCON_in'] + ) + + def write_HydroDyn(self): + + # Generate HydroDyn v2.03 input file + self.fst_vt['Fst']['HydroFile'] = self.FAST_namingOut + '_HydroDyn.dat' + hd_file = os.path.join(self.FAST_runDirectory, self.fst_vt['Fst']['HydroFile']) + f = open(hd_file, 'w') + + f.write('------- HydroDyn v2.03.* Input File --------------------------------------------\n') + f.write('Generated with OpenFAST_IO\n') + f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['HydroDyn']['Echo'], 'Echo', '- Echo the input file data (flag)\n')) + f.write('---------------------- ENVIRONMENTAL CONDITIONS --------------------------------\n') + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['HydroDyn']['WtrDens'], 'WtrDens', '- Water density (kg/m^3)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['HydroDyn']['WtrDpth'], 'WtrDpth', '- Water depth (meters)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['HydroDyn']['MSL2SWL'], '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]\n')) + f.write('---------------------- WAVES ---------------------------------------------------\n') + f.write('{:<22d} {:<11} {:}'.format(self.fst_vt['HydroDyn']['WaveMod'], '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 [option 6 is invalid for PotMod/=0]} (switch)\n')) + f.write('{:<22d} {:<11} {:}'.format(self.fst_vt['HydroDyn']['WaveStMod'], '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]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['HydroDyn']['WaveTMax'], 'WaveTMax', '- Analysis time for incident wave calculations (sec) [unused when WaveMod=0; determines WaveDOmega=2Pi/WaveTMax in the IFFT]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['HydroDyn']['WaveDT'], 'WaveDT', '- Time step for incident wave calculations (sec) [unused when WaveMod=0; 0.1<=WaveDT<=1.0 recommended; determines WaveOmegaMax=Pi/WaveDT in the IFFT]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['HydroDyn']['WaveHs'], 'WaveHs', '- Significant wave height of incident waves (meters) [used only when WaveMod=1, 2, or 3]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['HydroDyn']['WaveTp'], 'WaveTp', '- Peak-spectral period of incident waves (sec) [used only when WaveMod=1 or 2]\n')) + if isinstance(self.fst_vt['HydroDyn']['WavePkShp'], float): + if self.fst_vt['HydroDyn']['WavePkShp'] == 0.: + WavePkShp = 'Default' + else: + WavePkShp = self.fst_vt['HydroDyn']['WavePkShp'] + else: + WavePkShp = self.fst_vt['HydroDyn']['WavePkShp'] + f.write('{:<22} {:<11} {:}'.format(WavePkShp, 'WavePkShp', '- Peak-shape parameter of incident wave spectrum (-) or DEFAULT (string) [used only when WaveMod=2; use 1.0 for Pierson-Moskowitz]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['HydroDyn']['WvLowCOff'], '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, or 6]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['HydroDyn']['WvHiCOff'], '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, or 6]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['HydroDyn']['WaveDir'], 'WaveDir', '- Incident wave propagation heading direction (degrees) [unused when WaveMod=0 or 6]\n')) + f.write('{:<22d} {:<11} {:}'.format(self.fst_vt['HydroDyn']['WaveDirMod'], 'WaveDirMod', '- Directional spreading function {0: none, 1: COS2S} (-) [only used when WaveMod=2,3, or 4]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['HydroDyn']['WaveDirSpread'], 'WaveDirSpread', '- Wave direction spreading coefficient ( > 0 ) (-) [only used when WaveMod=2,3, or 4 and WaveDirMod=1]\n')) + f.write('{:<22d} {:<11} {:}'.format(self.fst_vt['HydroDyn']['WaveNDir'], 'WaveNDir', '- Number of wave directions (-) [only used when WaveMod=2,3, or 4 and WaveDirMod=1; odd number only]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['HydroDyn']['WaveDirRange'], 'WaveDirRange', '- Range of wave directions (full range: WaveDir +/- 1/2*WaveDirRange) (degrees) [only used when WaveMod=2,3,or 4 and WaveDirMod=1]\n')) + f.write('{:<22d} {:<11} {:}'.format(self.fst_vt['HydroDyn']['WaveSeed1'], 'WaveSeed(1)', '- First random seed of incident waves [-2147483648 to 2147483647] (-) [unused when WaveMod=0, 5, or 6]\n')) + + try: + seed2 = int(self.fst_vt['HydroDyn']['WaveSeed2']) + f.write('{:<22d} {:<11} {:}'.format(self.fst_vt['HydroDyn']['WaveSeed2'], 'WaveSeed(2)', '- Second random seed of incident waves [-2147483648 to 2147483647] (-) [unused when WaveMod=0, 5, or 6]\n')) + except ValueError: + f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['HydroDyn']['WaveSeed2'], 'WaveSeed(2)', '- Second random seed of incident waves [-2147483648 to 2147483647] (-) [unused when WaveMod=0, 5, or 6] for intrinsic pRNG, or an alternative pRNG: "RanLux"\n')) + + f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['HydroDyn']['WaveNDAmp'], 'WaveNDAmp', '- Flag for normally distributed amplitudes (flag) [only used when WaveMod=2, 3, or 4]\n')) + f.write('{:<22} {:<11} {:}'.format('"'+self.fst_vt['HydroDyn']['WvKinFile']+'"', 'WvKinFile', '- Root name of externally generated wave data file(s) (quoted string) [used only when WaveMod=5 or 6]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['HydroDyn']['NWaveElev'], 'NWaveElev', '- Number of points where the incident wave elevations can be computed (-) [maximum of 9 output locations]\n')) + f.write('{:<22} {:<11} {:}'.format(", ".join(self.fst_vt['HydroDyn']['WaveElevxi']), '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]\n')) + f.write('{:<22} {:<11} {:}'.format(", ".join(self.fst_vt['HydroDyn']['WaveElevyi']), '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]\n')) + f.write('---------------------- 2ND-ORDER WAVES ----------------------------------------- [unused with WaveMod=0 or 6]\n') + f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['HydroDyn']['WvDiffQTF'], 'WvDiffQTF', '- Full difference-frequency 2nd-order wave kinematics (flag)\n')) + f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['HydroDyn']['WvSumQTF'], 'WvSumQTF', '- Full summation-frequency 2nd-order wave kinematics (flag)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['HydroDyn']['WvLowCOffD'], 'WvLowCOffD', '- Low frequency cutoff used in the difference-frequencies (rad/s) [Only used with a difference-frequency method]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['HydroDyn']['WvHiCOffD'], 'WvHiCOffD', '- High frequency cutoff used in the difference-frequencies (rad/s) [Only used with a difference-frequency method]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['HydroDyn']['WvLowCOffS'], 'WvLowCOffS', '- Low frequency cutoff used in the summation-frequencies (rad/s) [Only used with a summation-frequency method]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['HydroDyn']['WvHiCOffS'], 'WvHiCOffS', '- High frequency cutoff used in the summation-frequencies (rad/s) [Only used with a summation-frequency method]\n')) + f.write('---------------------- CURRENT ------------------------------------------------- [unused with WaveMod=6]\n') + f.write('{:<22d} {:<11} {:}'.format(self.fst_vt['HydroDyn']['CurrMod'], 'CurrMod', '- Current profile model {0: none=no current, 1: standard, 2: user-defined from routine UserCurrent} (switch)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['HydroDyn']['CurrSSV0'], 'CurrSSV0', '- Sub-surface current velocity at still water level (m/s) [used only when CurrMod=1]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['HydroDyn']['CurrSSDir'], 'CurrSSDir', '- Sub-surface current heading direction (degrees) or DEFAULT (string) [used only when CurrMod=1]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['HydroDyn']['CurrNSRef'], 'CurrNSRef', '- Near-surface current reference depth (meters) [used only when CurrMod=1]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['HydroDyn']['CurrNSV0'], 'CurrNSV0', '- Near-surface current velocity at still water level (m/s) [used only when CurrMod=1]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['HydroDyn']['CurrNSDir'], 'CurrNSDir', '- Near-surface current heading direction (degrees) [used only when CurrMod=1]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['HydroDyn']['CurrDIV'], 'CurrDIV', '- Depth-independent current velocity (m/s) [used only when CurrMod=1]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['HydroDyn']['CurrDIDir'], 'CurrDIDir', '- Depth-independent current heading direction (degrees) [used only when CurrMod=1]\n')) + f.write('---------------------- FLOATING PLATFORM --------------------------------------- [unused with WaveMod=6]\n') + f.write('{:<22d} {:<11} {:}'.format(self.fst_vt['HydroDyn']['PotMod'], '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)\n')) + f.write('{:<22d} {:<11} {:}'.format(self.fst_vt['HydroDyn']['ExctnMod'], 'ExctnMod', '- Wave Excitation model {0: None, 1: DFT, 2: state-space} (switch) [only used when PotMod=1; STATE-SPACE REQUIRES *.ssexctn INPUT FILE]\n')) + f.write('{:<22d} {:<11} {:}'.format(self.fst_vt['HydroDyn']['RdtnMod'], '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]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['HydroDyn']['RdtnTMax'], 'RdtnTMax', '- Analysis time for wave radiation kernel calculations (sec) [only used when PotMod=1; 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!]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['HydroDyn']['RdtnDT'], 'RdtnDT', '- Time step for wave radiation kernel calculations (sec) [only used when PotMod=1; DT<=RdtnDT<=0.1 recommended; determines RdtnOmegaMax=Pi/RdtnDT in the cosine transform]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['HydroDyn']['NBody'], '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]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['HydroDyn']['NBodyMod'], '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]\n')) + f.write('{:<22} {:<11} {:}'.format('"'+self.fst_vt['HydroDyn']['PotFile']+'"', '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) [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!]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['HydroDyn']['WAMITULEN'], 'WAMITULEN', '- Characteristic body length scale used to redimensionalize WAMIT output (meters) [only used when PotMod=1]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['HydroDyn']['PtfmRefxt'], 'PtfmRefxt', '- The xt offset of the body reference point(s) from (0,0,0) (meters) [1 to NBody] [only used when PotMod=1]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['HydroDyn']['PtfmRefyt'], 'PtfmRefyt', '- The yt offset of the body reference point(s) from (0,0,0) (meters) [1 to NBody] [only used when PotMod=1]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['HydroDyn']['PtfmRefzt'], '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]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['HydroDyn']['PtfmRefztRot'], 'PtfmRefztRot', '- The rotation about zt of the body reference frame(s) from xt/yt (degrees) [1 to NBody] [only used when PotMod=1]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['HydroDyn']['PtfmVol0'], 'PtfmVol0', '- Displaced volume of water when the platform is in its undisplaced position (m^3) [only used when PotMod=1; USE THE SAME VALUE COMPUTED BY WAMIT AS OUTPUT IN THE .OUT FILE!]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['HydroDyn']['PtfmCOBxt'], 'PtfmCOBxt', '- The xt offset of the center of buoyancy (COB) from the platform reference point (meters) [only used when PotMod=1]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['HydroDyn']['PtfmCOByt'], 'PtfmCOByt', '- The yt offset of the center of buoyancy (COB) from the platform reference point (meters) [only used when PotMod=1]\n')) + f.write('---------------------- 2ND-ORDER FLOATING PLATFORM FORCES ---------------------- [unused with WaveMod=0 or 6, or PotMod=0 or 2]\n') + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['HydroDyn']['MnDrift'], '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]\n")) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['HydroDyn']['NewmanApp'], '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. Used only when WaveDirMod=0]\n")) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['HydroDyn']['DiffQTF'], '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]\n")) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['HydroDyn']['SumQTF'], 'SumQTF', "- Full summation -frequency 2nd-order forces computed with full QTF {0: None; [10, 11, or 12]: WAMIT file to use}\n")) + f.write('---------------------- PLATFORM ADDITIONAL STIFFNESS AND DAMPING --------------\n') + for j in range(6): + if type(self.fst_vt['HydroDyn']['AddF0'][j]) == float: + ln = '{:14} '.format(self.fst_vt['HydroDyn']['AddF0'][j]) + elif type(self.fst_vt['HydroDyn']['AddF0'][j]) in [list, np.ndarray]: + ln = '{:14} '.format(' '.join([f'{val}' for val in self.fst_vt['HydroDyn']['AddF0'][j]])) + else: + raise Exception("Check type of self.fst_vt['HydroDyn']['AddF0']") + + if j == 0: + ln = ln + '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]\n' + else: + ln = ln + '\n' + f.write(ln) + for j in range(6): + try: + ln = " ".join(['{:14}'.format(i) for i in self.fst_vt['HydroDyn']['AddCLin'][j,:]]) + except: + ln = " ".join(['{:14}'.format(i) for i in self.fst_vt['HydroDyn']['AddCLin'][j]]) + if j == 0: + ln = ln + " AddCLin - Additional linear stiffness (N/m, N/rad, N-m/m, N-m/rad)\n" + else: + ln = ln + "\n" + f.write(ln) + for j in range(6): + try: + ln = " ".join(['{:14}'.format(i) for i in self.fst_vt['HydroDyn']['AddBLin'][j,:]]) + except: + ln = " ".join(['{:14}'.format(i) for i in self.fst_vt['HydroDyn']['AddBLin'][j]]) + if j == 0: + ln = ln + " AddBLin - Additional linear damping(N/(m/s), N/(rad/s), N-m/(m/s), N-m/(rad/s))\n" + else: + ln = ln + "\n" + f.write(ln) + for j in range(6): + try: + ln = " ".join(['{:14}'.format(i) for i in self.fst_vt['HydroDyn']['AddBQuad'][j,:]]) + except: + ln = " ".join(['{:14}'.format(i) for i in self.fst_vt['HydroDyn']['AddBQuad'][j]]) + if j == 0: + ln = ln + " AddBQuad - Additional quadratic drag(N/(m/s)^2, N/(rad/s)^2, N-m(m/s)^2, N-m/(rad/s)^2)\n" + else: + ln = ln + "\n" + f.write(ln) + f.write('---------------------- AXIAL COEFFICIENTS --------------------------------------\n') + f.write('{:<22d} {:<11} {:}'.format(self.fst_vt['HydroDyn']['NAxCoef'], 'NAxCoef', '- Number of axial coefficients (-)\n')) + f.write(" ".join(['{:^11s}'.format(i) for i in ['AxCoefID', 'AxCd', 'AxCa', 'AxCp']])+'\n') + f.write(" ".join(['{:^11s}'.format(i) for i in ['(-)']*4])+'\n') + for i in range(self.fst_vt['HydroDyn']['NAxCoef']): + ln = [] + ln.append('{:^11d}'.format(self.fst_vt['HydroDyn']['AxCoefID'][i])) + ln.append('{:^11}'.format(self.fst_vt['HydroDyn']['AxCd'][i])) + ln.append('{:^11}'.format(self.fst_vt['HydroDyn']['AxCa'][i])) + ln.append('{:^11}'.format(self.fst_vt['HydroDyn']['AxCp'][i])) + f.write(" ".join(ln) + '\n') + f.write('---------------------- MEMBER JOINTS -------------------------------------------\n') + f.write('{:<22d} {:<11} {:}'.format(self.fst_vt['HydroDyn']['NJoints'], 'NJoints', '- Number of joints (-) [must be exactly 0 or at least 2]\n')) + f.write(" ".join(['{:^11s}'.format(i) for i in ['JointID', 'Jointxi', 'Jointyi', 'Jointzi', 'JointAxID', 'JointOvrlp']])+' ! [JointOvrlp= 0: do nothing at joint, 1: eliminate overlaps by calculating super member]\n') + f.write(" ".join(['{:^11s}'.format(i) for i in ['(-)', '(m)', '(m)', '(m)', '(-)', '(switch)']])+'\n') + for i in range(self.fst_vt['HydroDyn']['NJoints']): + ln = [] + ln.append('{:^11d}'.format(self.fst_vt['HydroDyn']['JointID'][i])) + ln.append('{:^11}'.format(self.fst_vt['HydroDyn']['Jointxi'][i])) + ln.append('{:^11}'.format(self.fst_vt['HydroDyn']['Jointyi'][i])) + ln.append('{:^11}'.format(self.fst_vt['HydroDyn']['Jointzi'][i])) + ln.append('{:^11d}'.format(self.fst_vt['HydroDyn']['JointAxID'][i])) + ln.append('{:^11d}'.format(self.fst_vt['HydroDyn']['JointOvrlp'][i])) + f.write(" ".join(ln) + '\n') + f.write('---------------------- MEMBER CROSS-SECTION PROPERTIES -------------------------\n') + f.write('{:<11d} {:<11} {:}'.format(self.fst_vt['HydroDyn']['NPropSets'], 'NPropSets', '- Number of member property sets (-)\n')) + f.write(" ".join(['{:^11s}'.format(i) for i in ['PropSetID', 'PropD', 'PropThck']])+'\n') + f.write(" ".join(['{:^11s}'.format(i) for i in ['(-)', '(m)', '(m)']])+'\n') + for i in range(self.fst_vt['HydroDyn']['NPropSets']): + ln = [] + ln.append('{:^11d}'.format(self.fst_vt['HydroDyn']['PropSetID'][i])) + ln.append('{:^11}'.format(self.fst_vt['HydroDyn']['PropD'][i])) + ln.append('{:^11}'.format(self.fst_vt['HydroDyn']['PropThck'][i])) + f.write(" ".join(ln) + '\n') + f.write('---------------------- SIMPLE HYDRODYNAMIC COEFFICIENTS (model 1) --------------\n') + f.write(" ".join(['{:^11s}'.format(i) for i in ['SimplCd', 'SimplCdMG', 'SimplCa', 'SimplCaMG', 'SimplCp', 'SimplCpMG', 'SimplAxCd', 'SimplAxCdMG', 'SimplAxCa', 'SimplAxCaMG', 'SimplAxCp', 'SimplAxCpMG']])+'\n') + f.write(" ".join(['{:^11s}'.format(i) for i in ['(-)']*12])+'\n') + ln = [] + ln.append('{:^11}'.format(self.fst_vt['HydroDyn']['SimplCd'])) + ln.append('{:^11}'.format(self.fst_vt['HydroDyn']['SimplCdMG'])) + ln.append('{:^11}'.format(self.fst_vt['HydroDyn']['SimplCa'])) + ln.append('{:^11}'.format(self.fst_vt['HydroDyn']['SimplCaMG'])) + ln.append('{:^11}'.format(self.fst_vt['HydroDyn']['SimplCp'])) + ln.append('{:^11}'.format(self.fst_vt['HydroDyn']['SimplCpMG'])) + ln.append('{:^11}'.format(self.fst_vt['HydroDyn']['SimplAxCd'])) + ln.append('{:^11}'.format(self.fst_vt['HydroDyn']['SimplAxCdMG'])) + ln.append('{:^11}'.format(self.fst_vt['HydroDyn']['SimplAxCa'])) + ln.append('{:^11}'.format(self.fst_vt['HydroDyn']['SimplAxCaMG'])) + ln.append('{:^11}'.format(self.fst_vt['HydroDyn']['SimplAxCp'])) + ln.append('{:^11}'.format(self.fst_vt['HydroDyn']['SimplAxCpMG'])) + f.write(" ".join(ln) + '\n') + f.write('---------------------- DEPTH-BASED HYDRODYNAMIC COEFFICIENTS (model 2) ---------\n') + f.write('{:<11d} {:<11} {:}'.format(self.fst_vt['HydroDyn']['NCoefDpth'], 'NCoefDpth', '- Number of depth-dependent coefficients (-)\n')) + f.write(" ".join(['{:^11s}'.format(i) for i in ['Dpth', 'DpthCd', 'DpthCdMG', 'DpthCa', 'DpthCaMG', 'DpthCp', 'DpthCpMG', 'DpthAxCd', 'DpthAxCdMG', 'DpthAxCa', 'DpthAxCaMG', 'DpthAxCp', 'DpthAxCpMG']])+'\n') + f.write(" ".join(['{:^11s}'.format(i) for i in ['(m)', '(-)', '(-)', '(-)', '(-)', '(-)', '(-)', '(-)', '(-)', '(-)', '(-)', '(-)', '(-)']])+'\n') + for i in range(self.fst_vt['HydroDyn']['NCoefDpth']): + ln = [] + ln.append('{:^11}'.format(self.fst_vt['HydroDyn']['Dpth'][i])) + ln.append('{:^11}'.format(self.fst_vt['HydroDyn']['DpthCd'][i])) + ln.append('{:^11}'.format(self.fst_vt['HydroDyn']['DpthCdMG'][i])) + ln.append('{:^11}'.format(self.fst_vt['HydroDyn']['DpthCa'][i])) + ln.append('{:^11}'.format(self.fst_vt['HydroDyn']['DpthCaMG'][i])) + ln.append('{:^11}'.format(self.fst_vt['HydroDyn']['DpthCp'][i])) + ln.append('{:^11}'.format(self.fst_vt['HydroDyn']['DpthCpMG'][i])) + ln.append('{:^11}'.format(self.fst_vt['HydroDyn']['DpthAxCd'][i])) + ln.append('{:^11}'.format(self.fst_vt['HydroDyn']['DpthAxCdMG'][i])) + ln.append('{:^11}'.format(self.fst_vt['HydroDyn']['DpthAxCa'][i])) + ln.append('{:^11}'.format(self.fst_vt['HydroDyn']['DpthAxCaMG'][i])) + ln.append('{:^11}'.format(self.fst_vt['HydroDyn']['DpthAxCp'][i])) + ln.append('{:^11}'.format(self.fst_vt['HydroDyn']['DpthAxCpMG'][i])) + f.write(" ".join(ln) + '\n') + f.write('---------------------- MEMBER-BASED HYDRODYNAMIC COEFFICIENTS (model 3) --------\n') + f.write('{:<11d} {:<11} {:}'.format(self.fst_vt['HydroDyn']['NCoefMembers'], 'NCoefMembers', '- Number of member-based coefficients (-)\n')) + f.write(" ".join(['{:^11s}'.format(i) for i in ['MemberID_HydC', 'MemberCd1', 'MemberCd2', 'MemberCdMG1', 'MemberCdMG2', 'MemberCa1', 'MemberCa2', 'MemberCaMG1', 'MemberCaMG2', 'MemberCp1', 'MemberCp2', 'MemberCpMG1', 'MemberCpMG2', 'MemberAxCd1', 'MemberAxCd2', 'MemberAxCdMG1', 'MemberAxCdMG2', 'MemberAxCa1', 'MemberAxCa2', 'MemberAxCaMG1', 'MemberAxCaMG2', 'MemberAxCp1', 'MemberAxCp2', 'MemberAxCpMG1', 'MemberAxCpMG2']])+'\n') + f.write(" ".join(['{:^11s}'.format(i) for i in ['(-)']*25])+'\n') + for i in range(self.fst_vt['HydroDyn']['NCoefMembers']): + ln = [] + ln.append('{:^11d}'.format(self.fst_vt['HydroDyn']['MemberID_HydC'][i])) + ln.append('{:^11}'.format(self.fst_vt['HydroDyn']['MemberCd1'][i])) + ln.append('{:^11}'.format(self.fst_vt['HydroDyn']['MemberCd2'][i])) + ln.append('{:^11}'.format(self.fst_vt['HydroDyn']['MemberCdMG1'][i])) + ln.append('{:^11}'.format(self.fst_vt['HydroDyn']['MemberCdMG2'][i])) + ln.append('{:^11}'.format(self.fst_vt['HydroDyn']['MemberCa1'][i])) + ln.append('{:^11}'.format(self.fst_vt['HydroDyn']['MemberCa2'][i])) + ln.append('{:^11}'.format(self.fst_vt['HydroDyn']['MemberCaMG1'][i])) + ln.append('{:^11}'.format(self.fst_vt['HydroDyn']['MemberCaMG2'][i])) + ln.append('{:^11}'.format(self.fst_vt['HydroDyn']['MemberCp1'][i])) + ln.append('{:^11}'.format(self.fst_vt['HydroDyn']['MemberCp2'][i])) + ln.append('{:^11}'.format(self.fst_vt['HydroDyn']['MemberCpMG1'][i])) + ln.append('{:^11}'.format(self.fst_vt['HydroDyn']['MemberCpMG2'][i])) + ln.append('{:^11}'.format(self.fst_vt['HydroDyn']['MemberAxCd1'][i])) + ln.append('{:^11}'.format(self.fst_vt['HydroDyn']['MemberAxCd2'][i])) + ln.append('{:^11}'.format(self.fst_vt['HydroDyn']['MemberAxCdMG1'][i])) + ln.append('{:^11}'.format(self.fst_vt['HydroDyn']['MemberAxCdMG2'][i])) + ln.append('{:^11}'.format(self.fst_vt['HydroDyn']['MemberAxCa1'][i])) + ln.append('{:^11}'.format(self.fst_vt['HydroDyn']['MemberAxCa2'][i])) + ln.append('{:^11}'.format(self.fst_vt['HydroDyn']['MemberAxCaMG1'][i])) + ln.append('{:^11}'.format(self.fst_vt['HydroDyn']['MemberAxCaMG2'][i])) + ln.append('{:^11}'.format(self.fst_vt['HydroDyn']['MemberAxCp1'][i])) + ln.append('{:^11}'.format(self.fst_vt['HydroDyn']['MemberAxCp2'][i])) + ln.append('{:^11}'.format(self.fst_vt['HydroDyn']['MemberAxCpMG1'][i])) + ln.append('{:^11}'.format(self.fst_vt['HydroDyn']['MemberAxCpMG2'][i])) + f.write(" ".join(ln) + '\n') + f.write('-------------------- MEMBERS -------------------------------------------------\n') + f.write('{:<11d} {:<11} {:}'.format(self.fst_vt['HydroDyn']['NMembers'], 'NMembers', '- Number of members (-)\n')) + f.write(" ".join(['{:^11s}'.format(i) for i in ['MemberID', 'MJointID1', 'MJointID2', 'MPropSetID1', 'MPropSetID2', 'MDivSize', 'MCoefMod', '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]\n') + f.write(" ".join(['{:^11s}'.format(i) for i in ['(-)', '(-)', '(-)', '(-)', '(-)', '(m)', '(switch)', '(flag)']])+'\n') + for i in range(self.fst_vt['HydroDyn']['NMembers']): + ln = [] + ln.append('{:^11d}'.format(self.fst_vt['HydroDyn']['MemberID'][i])) + ln.append('{:^11d}'.format(self.fst_vt['HydroDyn']['MJointID1'][i])) + ln.append('{:^11d}'.format(self.fst_vt['HydroDyn']['MJointID2'][i])) + ln.append('{:^11d}'.format(self.fst_vt['HydroDyn']['MPropSetID1'][i])) + ln.append('{:^11d}'.format(self.fst_vt['HydroDyn']['MPropSetID2'][i])) + ln.append('{:^11}'.format(self.fst_vt['HydroDyn']['MDivSize'][i])) + ln.append('{:^11d}'.format(self.fst_vt['HydroDyn']['MCoefMod'][i])) + ln.append('{!s:^11}'.format(self.fst_vt['HydroDyn']['PropPot'][i])) + f.write(" ".join(ln) + '\n') + f.write("---------------------- FILLED MEMBERS ------------------------------------------\n") + f.write('{:<11d} {:<11} {:}'.format(self.fst_vt['HydroDyn']['NFillGroups'], 'NFillGroups', '- Number of filled member groups (-) [If FillDens = DEFAULT, then FillDens = WtrDens; FillFSLoc is related to MSL2SWL]\n')) + f.write(" ".join(['{:^11s}'.format(i) for i in ['FillNumM', 'FillMList', 'FillFSLoc', 'FillDens']])+'\n') + f.write(" ".join(['{:^11s}'.format(i) for i in ['(-)', '(-)', '(m)', '(kg/m^3)']])+'\n') + for i in range(self.fst_vt['HydroDyn']['NFillGroups']): + ln = [] + ln.append('{:^11d}'.format(self.fst_vt['HydroDyn']['FillNumM'][i])) + ln.append(" ".join(['%d'%j for j in self.fst_vt['HydroDyn']['FillMList'][i]])) + ln.append('{:^11}'.format(self.fst_vt['HydroDyn']['FillFSLoc'][i])) + ln.append('{:^11}'.format(self.fst_vt['HydroDyn']['FillDens'][i])) + f.write(" ".join(ln) + '\n') + f.write("---------------------- MARINE GROWTH -------------------------------------------\n") + f.write('{:<11d} {:<11} {:}'.format(self.fst_vt['HydroDyn']['NMGDepths'], 'NMGDepths', '- Number of marine-growth depths specified (-)\n')) + f.write(" ".join(['{:^11s}'.format(i) for i in ['MGDpth', 'MGThck', 'MGDens']])+'\n') + f.write(" ".join(['{:^11s}'.format(i) for i in ['(m)', '(m)', '(kg/m^3)']])+'\n') + for i in range(self.fst_vt['HydroDyn']['NMGDepths']): + ln = [] + ln.append('{:^11}'.format(self.fst_vt['HydroDyn']['MGDpth'][i])) + ln.append('{:^11}'.format(self.fst_vt['HydroDyn']['MGThck'][i])) + ln.append('{:^11}'.format(self.fst_vt['HydroDyn']['MGDens'][i])) + f.write(" ".join(ln) + '\n') + f.write("---------------------- MEMBER OUTPUT LIST --------------------------------------\n") + f.write('{:<11d} {:<11} {:}'.format(self.fst_vt['HydroDyn']['NMOutputs'], 'NMOutputs', '- Number of member outputs (-) [must be < 10]\n')) + f.write(" ".join(['{:^11s}'.format(i) for i in ['MemberID_out', 'NOutLoc', 'NodeLocs']])+'\n') + f.write(" ".join(['{:^11s}'.format(i) for i in ['(-)']*3])+'\n') + for i in range(self.fst_vt['HydroDyn']['NMOutputs']): + ln = [] + ln.append('{:^11d}'.format(self.fst_vt['HydroDyn']['MemberID_out'][i])) + ln.append('{:^11d}'.format(self.fst_vt['HydroDyn']['NOutLoc'][i])) + ln.append('{:^11}'.format(self.fst_vt['HydroDyn']['NodeLocs'][i])) + f.write(" ".join(ln) + '\n') + f.write("---------------------- JOINT OUTPUT LIST ---------------------------------------\n") + f.write('{:<22d} {:<11} {:}'.format(self.fst_vt['HydroDyn']['NJOutputs'], 'NJOutputs', '- Number of joint outputs [Must be < 10]\n')) + f.write('{:<22} {:<11} {:}'.format(" ".join(["%d"%i for i in self.fst_vt['HydroDyn']['JOutLst']]), 'JOutLst', '- List of JointIDs which are to be output (-)[unused if NJOutputs=0]\n')) + f.write("---------------------- OUTPUT --------------------------------------------------\n") + f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['HydroDyn']['HDSum'], 'HDSum', '- Output a summary file [flag]\n')) + f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['HydroDyn']['OutAll'], 'OutAll', '- Output all user-specified member and joint loads (only at each member end, not interior locations) [flag]\n')) + f.write('{:<22d} {:<11} {:}'.format(self.fst_vt['HydroDyn']['OutSwtch'], 'OutSwtch', '- Output requested channels to: [1=Hydrodyn.out, 2=GlueCode.out, 3=both files]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['HydroDyn']['OutFmt'], 'OutFmt', '- Output format for numerical results (quoted string) [not checked for validity!]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['HydroDyn']['OutSFmt'], 'OutSFmt', '- Output format for header strings (quoted string) [not checked for validity!]\n')) + f.write('---------------------- OUTPUT CHANNELS -----------------------------------------\n') + outlist = self.get_outlist(self.fst_vt['outlist'], ['HydroDyn']) + for channel_list in outlist: + for i in range(len(channel_list)): + f.write('"' + channel_list[i] + '"\n') + + f.write('END of output channels and end of file. (the word "END" must appear in the first 3 columns of this line)\n') + + + f.flush() + os.fsync(f) + f.close() + + def write_SubDyn(self): + # Generate SubDyn v1.1 input file + self.fst_vt['Fst']['SubFile'] = self.FAST_namingOut + '_SubDyn.dat' + sd_file = os.path.join(self.FAST_runDirectory, self.fst_vt['Fst']['SubFile']) + f = open(sd_file, 'w') + + f.write('----------- SubDyn v1.01.x MultiMember Support Structure Input File ------------\n') + f.write('Generated with OpenFAST_IO\n') + f.write('-------------------------- SIMULATION CONTROL ---------------------------------\n') + f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['SubDyn']['Echo'], 'Echo', '- Echo input data to ".SD.ech" (flag)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['SubDyn']['SDdeltaT'], 'SDdeltaT', '- Local Integration Step. If "default", the glue-code integration step will be used.\n')) + f.write('{:<22d} {:<11} {:}'.format(self.fst_vt['SubDyn']['IntMethod'], 'IntMethod', '- Integration Method [1/2/3/4 = RK4/AB4/ABM4/AM2].\n')) + f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['SubDyn']['SttcSolve'], 'SttcSolve', '- Solve dynamics about static equilibrium point\n')) + f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['SubDyn']['GuyanLoadCorrection'], 'GuyanLoadCorrection', '- Include extra moment from lever arm at interface and rotate FEM for floating.\n')) + f.write('-------------------- FEA and CRAIG-BAMPTON PARAMETERS---------------------------\n') + f.write('{:<22d} {:<11} {:}'.format(self.fst_vt['SubDyn']['FEMMod'], 'FEMMod', '- FEM switch: element model in the FEM. [1= Euler-Bernoulli(E-B); 2=Tapered E-B (unavailable); 3= 2-node Timoshenko; 4= 2-node tapered Timoshenko (unavailable)]\n')) + f.write('{:<22d} {:<11} {:}'.format(self.fst_vt['SubDyn']['NDiv'], 'NDiv', '- Number of sub-elements per member\n')) + f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['SubDyn']['CBMod'], 'CBMod', '- [T/F] If True perform C-B reduction, else full FEM dofs will be retained. If True, select Nmodes to retain in C-B reduced system.\n')) + f.write('{:<22d} {:<11} {:}'.format(self.fst_vt['SubDyn']['Nmodes'], 'Nmodes', '- Number of internal modes to retain (ignored if CBMod=False). If Nmodes=0 --> Guyan Reduction.\n')) + + JDampings = self.fst_vt['SubDyn']['JDampings'] + if isinstance(JDampings, float): + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['SubDyn']['JDampings'], 'JDampings', '- Damping Ratios for each retained mode (% of critical) If Nmodes>0, list Nmodes structural damping ratios for each retained mode (% of critical), or a single damping ratio to be applied to all retained modes. (last entered value will be used for all remaining modes).\n')) + else: # list of floats + f.write('{:<22} {:<11} {:}'.format(", ".join([f'{d:f}' for d in self.fst_vt['SubDyn']['JDampings']]), 'JDampings', '- Damping Ratios for each retained mode (% of critical) If Nmodes>0, list Nmodes structural damping ratios for each retained mode (% of critical), or a single damping ratio to be applied to all retained modes. (last entered value will be used for all remaining modes).\n')) + f.write('{:<22d} {:<11} {:}'.format(self.fst_vt['SubDyn']['GuyanDampMod'], 'GuyanDampMod', '- Guyan damping {0=none, 1=Rayleigh Damping, 2=user specified 6x6 matrix}.\n')) + f.write('{:<10} {:<10} {:<11} {:}'.format(self.fst_vt['SubDyn']['RayleighDamp'][0], self.fst_vt['SubDyn']['RayleighDamp'][1], 'RayleighDamp', '- Mass and stiffness proportional damping coefficients (Rayleigh Damping) [only if GuyanDampMod=1].\n')) + f.write('{:<22d} {:<11} {:}'.format(self.fst_vt['SubDyn']['GuyanDampSize'], 'GuyanDampSize', '- Guyan damping matrix (6x6) [only if GuyanDampMod=2].\n')) + for j in range(self.fst_vt['SubDyn']['GuyanDampSize']): + try: + ln = " ".join(['{:14}'.format(i) for i in self.fst_vt['SubDyn']['GuyanDamp'][j,:]]) + except: + ln = " ".join(['{:14}'.format(i) for i in self.fst_vt['SubDyn']['GuyanDamp'][j]]) + ln += "\n" + f.write(ln) + + f.write('---- STRUCTURE JOINTS: joints connect structure members (~Hydrodyn Input File)---\n') + f.write('{:<22d} {:<11} {:}'.format(self.fst_vt['SubDyn']['NJoints'], 'NJoints', '- Number of joints (-)\n')) + f.write(" ".join(['{:^11s}'.format(i) for i in ['JointID','JointXss','JointYss','JointZss','JointType','JointDirX','JointDirY','JointDirZ','JointStiff']])+'\n') + f.write(" ".join(['{:^11s}'.format(i) for i in ['(-)','(m)','(m)','(m)','(-)','(-)','(-)','(-)','(Nm/rad)']])+'\n') + for i in range(self.fst_vt['SubDyn']['NJoints']): + ln = [] + ln.append('{:^11d}'.format(self.fst_vt['SubDyn']['JointID'][i])) + ln.append('{:^11}'.format(self.fst_vt['SubDyn']['JointXss'][i])) + ln.append('{:^11}'.format(self.fst_vt['SubDyn']['JointYss'][i])) + ln.append('{:^11}'.format(self.fst_vt['SubDyn']['JointZss'][i])) + ln.append('{:^11d}'.format(self.fst_vt['SubDyn']['JointType'][i])) + ln.append('{:^11}'.format(self.fst_vt['SubDyn']['JointDirX'][i])) + ln.append('{:^11}'.format(self.fst_vt['SubDyn']['JointDirY'][i])) + ln.append('{:^11}'.format(self.fst_vt['SubDyn']['JointDirZ'][i])) + ln.append('{:^11}'.format(self.fst_vt['SubDyn']['JointStiff'][i])) + f.write(" ".join(ln) + '\n') + f.write('------------------- BASE REACTION JOINTS: 1/0 for Locked/Free DOF @ each Reaction Node ---------------------\n') + f.write('{:<22d} {:<11} {:}'.format(self.fst_vt['SubDyn']['NReact'], 'NReact', '- Number of Joints with reaction forces; be sure to remove all rigid motion DOFs of the structure (else det([K])=[0])\n')) + f.write(" ".join(['{:^11s}'.format(i) for i in ['RJointID', 'RctTDXss', 'RctTDYss', 'RctTDZss', 'RctRDXss', 'RctRDYss', 'RctRDZss','SSIfile']])+' ! [Global Coordinate System]\n') + f.write(" ".join(['{:^11s}'.format(i) for i in ['(-)', '(flag)', '(flag)', '(flag)', '(flag)', '(flag)', '(flag)', '(string)']])+'\n') + for i in range(self.fst_vt['SubDyn']['NReact']): + ln = [] + ln.append('{:^11d}'.format(self.fst_vt['SubDyn']['RJointID'][i])) + ln.append('{:^11d}'.format(self.fst_vt['SubDyn']['RctTDXss'][i])) + ln.append('{:^11d}'.format(self.fst_vt['SubDyn']['RctTDYss'][i])) + ln.append('{:^11d}'.format(self.fst_vt['SubDyn']['RctTDZss'][i])) + ln.append('{:^11d}'.format(self.fst_vt['SubDyn']['RctRDXss'][i])) + ln.append('{:^11d}'.format(self.fst_vt['SubDyn']['RctRDYss'][i])) + ln.append('{:^11d}'.format(self.fst_vt['SubDyn']['RctRDZss'][i])) + ln.append('{:^11}'.format(self.fst_vt['SubDyn']['Rct_SoilFile'][i])) + f.write(" ".join(ln) + '\n') + f.write('------- INTERFACE JOINTS: 1/0 for Locked (to the TP)/Free DOF @each Interface Joint (only Locked-to-TP implemented thus far (=rigid TP)) ---------\n') + f.write('{:<22d} {:<11} {:}'.format(self.fst_vt['SubDyn']['NInterf'], 'NInterf', '- Number of interface joints locked to the Transition Piece (TP): be sure to remove all rigid motion dofs\n')) + f.write(" ".join(['{:^11s}'.format(i) for i in ['IJointID', 'ItfTDXss', 'ItfTDYss', 'ItfTDZss', 'ItfRDXss', 'ItfRDYss', 'ItfRDZss']])+' ! [Global Coordinate System]\n') + f.write(" ".join(['{:^11s}'.format(i) for i in ['(-)', '(flag)', '(flag)', '(flag)', '(flag)', '(flag)', '(flag)']])+'\n') + for i in range(self.fst_vt['SubDyn']['NInterf']): + ln = [] + ln.append('{:^11d}'.format(self.fst_vt['SubDyn']['IJointID'][i])) + ln.append('{:^11d}'.format(self.fst_vt['SubDyn']['ItfTDXss'][i])) + ln.append('{:^11d}'.format(self.fst_vt['SubDyn']['ItfTDYss'][i])) + ln.append('{:^11d}'.format(self.fst_vt['SubDyn']['ItfTDZss'][i])) + ln.append('{:^11d}'.format(self.fst_vt['SubDyn']['ItfRDXss'][i])) + ln.append('{:^11d}'.format(self.fst_vt['SubDyn']['ItfRDYss'][i])) + ln.append('{:^11d}'.format(self.fst_vt['SubDyn']['ItfRDZss'][i])) + f.write(" ".join(ln) + '\n') + f.write('----------------------------------- MEMBERS --------------------------------------\n') + f.write('{:<22d} {:<11} {:}'.format(self.fst_vt['SubDyn']['NMembers'], 'NMembers', '- Number of frame members\n')) + f.write(" ".join(['{:^11s}'.format(i) for i in ['MemberID', 'MJointID1', 'MJointID2', 'MPropSetID1', 'MPropSetID2', 'MType', 'COSMID']])+'\n') + f.write(" ".join(['{:^11s}'.format(i) for i in ['(-)','(-)','(-)','(-)','(-)','(-)','(-)']])+'\n') + for i in range(self.fst_vt['SubDyn']['NMembers']): + ln = [] + ln.append('{:^11d}'.format(self.fst_vt['SubDyn']['MemberID'][i])) + ln.append('{:^11d}'.format(self.fst_vt['SubDyn']['MJointID1'][i])) + ln.append('{:^11d}'.format(self.fst_vt['SubDyn']['MJointID2'][i])) + ln.append('{:^11d}'.format(self.fst_vt['SubDyn']['MPropSetID1'][i])) + ln.append('{:^11d}'.format(self.fst_vt['SubDyn']['MPropSetID2'][i])) + ln.append('{:^11d}'.format(self.fst_vt['SubDyn']['MType'][i])) + if self.fst_vt['SubDyn']['NCOSMs'] > 0: + ln.append('{:^11d}'.format(self.fst_vt['SubDyn']['COSMID'][i])) + f.write(" ".join(ln) + '\n') + f.write('------------------ MEMBER X-SECTION PROPERTY data 1/2 [isotropic material for now: use this table for circular-tubular elements] ------------------------\n') + f.write('{:<22d} {:<11} {:}'.format(self.fst_vt['SubDyn']['NPropSets'], 'NPropSets', '- Number of structurally unique x-sections (i.e. how many groups of X-sectional properties are utilized throughout all of the members)\n')) + f.write(" ".join(['{:^11s}'.format(i) for i in ['PropSetID', 'YoungE', 'ShearG1', 'MatDens', 'XsecD', 'XsecT']])+'\n') + f.write(" ".join(['{:^11s}'.format(i) for i in ['(-)','(N/m2)','(N/m2)','(kg/m3)','(m)','(m)']])+'\n') + for i in range(self.fst_vt['SubDyn']['NPropSets']): + ln = [] + ln.append('{:^11d}'.format(self.fst_vt['SubDyn']['PropSetID1'][i])) + ln.append('{:^11e}'.format(self.fst_vt['SubDyn']['YoungE1'][i])) + ln.append('{:^11e}'.format(self.fst_vt['SubDyn']['ShearG1'][i])) + ln.append('{:^11}'.format(self.fst_vt['SubDyn']['MatDens1'][i])) + ln.append('{:^11}'.format(self.fst_vt['SubDyn']['XsecD'][i])) + ln.append('{:^11}'.format(self.fst_vt['SubDyn']['XsecT'][i])) + f.write(" ".join(ln) + '\n') + f.write('------------------ MEMBER X-SECTION PROPERTY data 2/2 [isotropic material for now: use this table if any section other than circular, however provide COSM(i,j) below] ------------------------\n') + f.write('{:<22d} {:<11} {:}'.format(self.fst_vt['SubDyn']['NXPropSets'], 'NXPropSets', '- Number of structurally unique non-circular x-sections (if 0 the following table is ignored)\n')) + f.write(" ".join(['{:^11s}'.format(i) for i in ['PropSetID', 'YoungE', 'ShearG2', 'MatDens', 'XsecA', 'XsecAsx', 'XsecAsy', 'XsecJxx', 'XsecJyy', 'XsecJ0']])+'\n') + f.write(" ".join(['{:^11s}'.format(i) for i in ['(-)','(N/m2)','(N/m2)','(kg/m3)','(m2)','(m2)','(m2)','(m4)','(m4)','(m4)']])+'\n') + for i in range(self.fst_vt['SubDyn']['NXPropSets']): + ln = [] + ln.append('{:^11d}'.format(self.fst_vt['SubDyn']['PropSetID2'][i])) + ln.append('{:^11}'.format(self.fst_vt['SubDyn']['YoungE2'][i])) + ln.append('{:^11}'.format(self.fst_vt['SubDyn']['ShearG2'][i])) + ln.append('{:^11}'.format(self.fst_vt['SubDyn']['MatDens2'][i])) + ln.append('{:^11}'.format(self.fst_vt['SubDyn']['XsecA'][i])) + ln.append('{:^11}'.format(self.fst_vt['SubDyn']['XsecAsx'][i])) + ln.append('{:^11}'.format(self.fst_vt['SubDyn']['XsecAsy'][i])) + ln.append('{:^11}'.format(self.fst_vt['SubDyn']['XsecJxx'][i])) + ln.append('{:^11}'.format(self.fst_vt['SubDyn']['XsecJyy'][i])) + ln.append('{:^11}'.format(self.fst_vt['SubDyn']['XsecJ0'][i])) + f.write(" ".join(ln) + '\n') + f.write('-------------------------- CABLE PROPERTIES -------------------------------------\n') + f.write('{:<22d} {:<11} {:}'.format(self.fst_vt['SubDyn']['NCablePropSets'], 'NCablePropSets', '- Number of cable cable properties\n')) + f.write(" ".join(['{:^11s}'.format(i) for i in ['PropSetID', 'EA', 'MatDens', 'T0']])+'\n') + f.write(" ".join(['{:^11s}'.format(i) for i in ['(-)','(N)','(kg/m)','(N)']])+'\n') + for i in range(self.fst_vt['SubDyn']['NCablePropSets']): + ln = [] + ln.append('{:^11d}'.format(self.fst_vt['SubDyn']['CablePropSetID'][i])) + ln.append('{:^11}'.format(self.fst_vt['SubDyn']['CableEA'][i])) + ln.append('{:^11}'.format(self.fst_vt['SubDyn']['CableMatDens'][i])) + ln.append('{:^11}'.format(self.fst_vt['SubDyn']['CableT0'][i])) + f.write(" ".join(ln) + '\n') + f.write('----------------------- RIGID LINK PROPERTIES ------------------------------------\n') + f.write('{:<22d} {:<11} {:}'.format(self.fst_vt['SubDyn']['NRigidPropSets'], 'NRigidPropSets', '- Number of rigid link properties\n')) + f.write(" ".join(['{:^11s}'.format(i) for i in ['PropSetID', 'MatDens']])+'\n') + f.write(" ".join(['{:^11s}'.format(i) for i in ['(-)','(kg/m)']])+'\n') + for i in range(self.fst_vt['SubDyn']['NRigidPropSets']): + ln = [] + ln.append('{:^11d}'.format(self.fst_vt['SubDyn']['RigidPropSetID'][i])) + ln.append('{:^11}'.format(self.fst_vt['SubDyn']['RigidMatDens'][i])) + f.write(" ".join(ln) + '\n') + f.write('---------------------- MEMBER COSINE MATRICES COSM(i,j) ------------------------\n') + f.write('{:<22d} {:<11} {:}'.format(self.fst_vt['SubDyn']['NCOSMs'], 'NCOSMs', '- Number of unique cosine matrices (i.e., of unique member alignments including principal axis rotations); ignored if NXPropSets=0 or 9999 in any element below\n')) + f.write(" ".join(['{:^11s}'.format(i) for i in ['COSMID', 'COSM11', 'COSM12', 'COSM13', 'COSM21', 'COSM22', 'COSM23', 'COSM31', 'COSM32', 'COSM33']])+'\n') + f.write(" ".join(['{:^11s}'.format(i) for i in ['(-)','(-)','(-)','(-)','(-)','(-)','(-)','(-)','(-)','(-)']])+'\n') + for i in range(self.fst_vt['SubDyn']['NCOSMs']): + ln = [] + ln.append('{:^11d}'.format(self.fst_vt['SubDyn']['COSMID'][i])) + ln.append('{:^11}'.format(self.fst_vt['SubDyn']['COSM11'][i])) + ln.append('{:^11}'.format(self.fst_vt['SubDyn']['COSM12'][i])) + ln.append('{:^11}'.format(self.fst_vt['SubDyn']['COSM13'][i])) + ln.append('{:^11}'.format(self.fst_vt['SubDyn']['COSM21'][i])) + ln.append('{:^11}'.format(self.fst_vt['SubDyn']['COSM22'][i])) + ln.append('{:^11}'.format(self.fst_vt['SubDyn']['COSM23'][i])) + ln.append('{:^11}'.format(self.fst_vt['SubDyn']['COSM31'][i])) + ln.append('{:^11}'.format(self.fst_vt['SubDyn']['COSM32'][i])) + ln.append('{:^11}'.format(self.fst_vt['SubDyn']['COSM33'][i])) + f.write(" ".join(ln) + '\n') + f.write('------------------------ JOINT ADDITIONAL CONCENTRATED MASSES--------------------------\n') + f.write('{:<22d} {:<11} {:}'.format(self.fst_vt['SubDyn']['NCmass'], 'NCmass', '- Number of joints with concentrated masses; Global Coordinate System\n')) + f.write(" ".join(['{:^11s}'.format(i) for i in ['CMJointID','JMass','JMXX','JMYY','JMZZ','JMXY','JMXZ','JMYZ','MCGX','MCGY','MCGZ']])+'\n') + f.write(" ".join(['{:^11s}'.format(i) for i in ['(-)','(kg)','(kg*m^2)','(kg*m^2)','(kg*m^2)','(kg*m^2)','(kg*m^2)','(kg*m^2)','(m)','(m)','(m)']])+'\n') + for i in range(self.fst_vt['SubDyn']['NCmass']): + ln = [] + ln.append('{:^11d}'.format(self.fst_vt['SubDyn']['CMJointID'][i])) + ln.append('{:^11}'.format(self.fst_vt['SubDyn']['JMass'][i])) + ln.append('{:^11}'.format(self.fst_vt['SubDyn']['JMXX'][i])) + ln.append('{:^11}'.format(self.fst_vt['SubDyn']['JMYY'][i])) + ln.append('{:^11}'.format(self.fst_vt['SubDyn']['JMZZ'][i])) + ln.append('{:^11}'.format(self.fst_vt['SubDyn']['JMXY'][i])) + ln.append('{:^11}'.format(self.fst_vt['SubDyn']['JMXZ'][i])) + ln.append('{:^11}'.format(self.fst_vt['SubDyn']['JMYZ'][i])) + ln.append('{:^11}'.format(self.fst_vt['SubDyn']['MCGX'][i])) + ln.append('{:^11}'.format(self.fst_vt['SubDyn']['MCGY'][i])) + ln.append('{:^11}'.format(self.fst_vt['SubDyn']['MCGZ'][i])) + f.write(" ".join(ln) + '\n') + f.write('---------------------------- OUTPUT: SUMMARY & OUTFILE ------------------------------\n') + f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['SubDyn']['SumPrint'], 'SumPrint', '- Output a Summary File (flag).It contains: matrices K,M and C-B reduced M_BB, M-BM, K_BB, K_MM(OMG^2), PHI_R, PHI_L. It can also contain COSMs if requested.\n')) + f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['SubDyn']['OutCOSM'], 'OutCOSM', '- Output cosine matrices with the selected output member forces (flag)\n')) + f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['SubDyn']['OutAll'], 'OutAll', "- [T/F] Output all members' end forces\n")) + f.write('{:<22d} {:<11} {:}'.format(self.fst_vt['SubDyn']['OutSwtch'], 'OutSwtch', '- [1/2/3] Output requested channels to: 1=.SD.out; 2=.out (generated by FAST); 3=both files.\n')) + f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['SubDyn']['TabDelim'], 'TabDelim', '- Generate a tab-delimited output in the .SD.out file\n')) + f.write('{:<22d} {:<11} {:}'.format(self.fst_vt['SubDyn']['OutDec'], 'OutDec', '- Decimation of output in the .SD.out file\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['SubDyn']['OutFmt'], 'OutFmt', '- Output format for numerical results in the .SD.out file\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['SubDyn']['OutSFmt'], 'OutSFmt', '- Output format for header strings in the .SD.out file\n')) + f.write('------------------------- MEMBER OUTPUT LIST ------------------------------------------\n') + f.write('{:<22d} {:<11} {:}'.format(self.fst_vt['SubDyn']['NMOutputs'], 'NMOutputs', '- Number of members whose forces/displacements/velocities/accelerations will be output (-) [Must be <= 9].\n')) + f.write(" ".join(['{:^11s}'.format(i) for i in ['MemberID', 'NOutCnt', 'NodeCnt']])+' ! [NOutCnt=how many nodes to get output for [< 10]; NodeCnt are local ordinal numbers from the start of the member, and must be >=1 and <= NDiv+1] If NMOutputs=0 leave blank as well.\n') + f.write(" ".join(['{:^11s}'.format(i) for i in ['(-)','(-)','(-)']])+'\n') + for i in range(self.fst_vt['SubDyn']['NMOutputs']): + ln = [] + ln.append('{:^11d}'.format(self.fst_vt['SubDyn']['MemberID_out'][i])) + ln.append('{:^11d}'.format(self.fst_vt['SubDyn']['NOutCnt'][i])) + ln.append('{:^11d}'.format(self.fst_vt['SubDyn']['NodeCnt'][i])) + f.write(" ".join(ln) + '\n') + f.write('------------------------- SDOutList: The next line(s) contains a list of output parameters that will be output in .SD.out or .out. ------\n') + outlist = self.get_outlist(self.fst_vt['outlist'], ['SubDyn']) + for channel_list in outlist: + for i in range(len(channel_list)): + f.write('"' + channel_list[i] + '"\n') + f.write('END of output channels and end of file. (the word "END" must appear in the first 3 columns of this line)\n') + f.flush() + os.fsync(f) + f.close() + + def write_MAP(self): + + # Generate MAP++ input file + self.fst_vt['Fst']['MooringFile'] = self.FAST_namingOut + '_MAP.dat' + map_file = os.path.join(self.FAST_runDirectory, self.fst_vt['Fst']['MooringFile']) + f = open(map_file, 'w') + + f.write('---------------------- LINE DICTIONARY ---------------------------------------\n') + f.write(" ".join(['{:<11s}'.format(i) for i in ['LineType', 'Diam', 'MassDenInAir', 'EA', 'CB', 'CIntDamp', 'Ca', 'Cdn', 'Cdt']])+'\n') + f.write(" ".join(['{:<11s}'.format(i) for i in ['(-)', '(m)', '(kg/m)', '(N)', '(-)', '(Pa-s)', '(-)', '(-)', '(-)']])+'\n') + ln =[] + for i in range(self.fst_vt['MAP']['NTypes']): + ln = [] + ln.append('{:^11}'.format(self.fst_vt['MAP']['LineType'][i])) + ln.append('{:^11}'.format(self.fst_vt['MAP']['Diam'][i])) + ln.append('{:^11}'.format(self.fst_vt['MAP']['MassDen'][i])) + ln.append('{:^11}'.format(self.fst_vt['MAP']['EA'][i])) + ln.append('{:<11}'.format(self.fst_vt['MAP']['CB'][i])) + ln.append('{:<11}'.format(self.fst_vt['MAP']['CIntDamp'][i])) + ln.append('{:<11}'.format(self.fst_vt['MAP']['Ca'][i])) + ln.append('{:<11}'.format(self.fst_vt['MAP']['Cdn'][i])) + ln.append('{:<11}'.format(self.fst_vt['MAP']['Cdt'][i])) + f.write(" ".join(ln) + '\n') + f.write('---------------------- NODE PROPERTIES ---------------------------------------\n') + f.write(" ".join(['{:<11s}'.format(i) for i in ['Node', 'Type', 'X', 'Y', 'Z', 'M', 'B', 'FX', 'FY', 'FZ']])+'\n') + f.write(" ".join(['{:<11s}'.format(i) for i in ['(-)', '(-)', '(m)', '(m)', '(m)', '(kg)', '(m^3)', '(N)', '(N)', '(N)']])+'\n') + for i, type in enumerate(self.fst_vt['MAP']['Type']): + ln = [] + ln.append('{:<11}'.format(self.fst_vt['MAP']['Node'][i])) + ln.append('{:<11}'.format(self.fst_vt['MAP']['Type'][i])) + ln.append('{:<11}'.format(self.fst_vt['MAP']['X'][i])) + ln.append('{:<11}'.format(self.fst_vt['MAP']['Y'][i])) + ln.append('{:<11}'.format(self.fst_vt['MAP']['Z'][i])) + ln.append('{:<11}'.format(self.fst_vt['MAP']['M'][i])) + ln.append('{:<11}'.format(self.fst_vt['MAP']['B'][i])) + ln.append('{:<11}'.format(self.fst_vt['MAP']['FX'][i])) + ln.append('{:<11}'.format(self.fst_vt['MAP']['FY'][i])) + ln.append('{:<11}'.format(self.fst_vt['MAP']['FZ'][i])) + f.write(" ".join(ln) + '\n') + f.write('---------------------- LINE PROPERTIES ---------------------------------------\n') + f.write(" ".join(['{:<11s}'.format(i) for i in ['Line', 'LineType', 'UnstrLen', 'NodeAnch', 'NodeFair', 'Flags']])+'\n') + f.write(" ".join(['{:<11s}'.format(i) for i in ['(-)', '(-)', '(m)', '(-)', '(-)', '(-)']])+'\n') + for i in range(self.fst_vt['MAP']['NLines']): + ln = [] + ln.append('{:^11d}'.format(self.fst_vt['MAP']['Line'][i])) + ln.append('{:^11}'.format(self.fst_vt['MAP']['LineType'][i])) + ln.append('{:^11}'.format(self.fst_vt['MAP']['UnstrLen'][i])) + ln.append('{:^11d}'.format(self.fst_vt['MAP']['NodeAnch'][i])) + ln.append('{:^11d}'.format(self.fst_vt['MAP']['NodeFair'][i])) + # ln.append('{:^11}'.format(self.fst_vt['MAP']['Outputs'][i])) + # ln.append('{:^11}'.format(self.fst_vt['MAP']['CtrlChan'][i])) + # ln.append('{:<11}'.format(" ".join(self.fst_vt['MAP']['Flags']))) + f.write(" ".join(ln) + '\n') + ln =[] + f.write('---------------------- SOLVER OPTIONS-----------------------------------------\n') + f.write('{:<11s}'.format('Option'+'\n')) + f.write('{:<11s}'.format('(-)')+'\n') + f.write("\n".join(self.fst_vt['MAP']['Option']).strip() + '\n') + + f.flush() + os.fsync(f) + f.close() + + def write_MoorDyn(self): + + self.fst_vt['Fst']['MooringFile'] = self.FAST_namingOut + '_MoorDyn.dat' + moordyn_file = os.path.join(self.FAST_runDirectory, self.fst_vt['Fst']['MooringFile']) + f = open(moordyn_file, 'w') + + f.write('--------------------- MoorDyn Input File ------------------------------------\n') + f.write('Generated with OpenFAST_IO\n') + f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['MoorDyn']['Echo'], 'Echo', '- echo the input file data (flag)\n')) + f.write('----------------------- LINE TYPES ------------------------------------------\n') + f.write(" ".join(['{:^11s}'.format(i) for i in ['Name', 'Diam', 'MassDen', 'EA', 'BA/-zeta', 'EI', 'Cd', 'Ca', 'CdAx', 'CaAx']])+'\n') + f.write(" ".join(['{:^11s}'.format(i) for i in ['(-)', '(m)', '(kg/m)', '(N)', '(N-s/-)', '(-)', '(-)', '(-)', '(-)', '(-)']])+'\n') + for i in range(len(self.fst_vt['MoorDyn']['Name'])): + ln = [] + ln.append('{:^11}'.format(self.fst_vt['MoorDyn']['Name'][i])) + ln.append('{:^11.4f}'.format(self.fst_vt['MoorDyn']['Diam'][i])) + ln.append('{:^11.4f}'.format(self.fst_vt['MoorDyn']['MassDen'][i])) + ln.append('{:^11.4e}'.format(self.fst_vt['MoorDyn']['EA'][i])) + ln.append('{:^11.4f}'.format(self.fst_vt['MoorDyn']['BA_zeta'][i])) + ln.append('{:^11.4e}'.format(self.fst_vt['MoorDyn']['EI'][i])) + ln.append('{:^11.4f}'.format(self.fst_vt['MoorDyn']['Cd'][i])) + ln.append('{:^11.4f}'.format(self.fst_vt['MoorDyn']['Ca'][i])) + ln.append('{:^11.4f}'.format(self.fst_vt['MoorDyn']['CdAx'][i])) + ln.append('{:^11.4f}'.format(self.fst_vt['MoorDyn']['CaAx'][i])) + f.write(" ".join(ln) + '\n') + f.write('---------------------- POINTS --------------------------------\n') + f.write(" ".join(['{:^11s}'.format(i) for i in ['ID', 'Attachment', 'X', 'Y', 'Z', 'M', 'V', 'CdA', 'CA']])+'\n') + f.write(" ".join(['{:^11s}'.format(i) for i in ['(-)', '(-)', '(m)', '(m)', '(m)', '(kg)', '(m^3)', '(m^2)', '(-)']])+'\n') + for i in range(len(self.fst_vt['MoorDyn']['Point_ID'])): + ln = [] + ln.append('{:^11d}'.format(self.fst_vt['MoorDyn']['Point_ID'][i])) + ln.append('{:^11}'.format(self.fst_vt['MoorDyn']['Attachment'][i])) + ln.append('{:^11.4f}'.format(self.fst_vt['MoorDyn']['X'][i])) + ln.append('{:^11.4f}'.format(self.fst_vt['MoorDyn']['Y'][i])) + ln.append('{:^11.4f}'.format(self.fst_vt['MoorDyn']['Z'][i])) + ln.append('{:^11.4e}'.format(self.fst_vt['MoorDyn']['M'][i])) + ln.append('{:^11.4e}'.format(self.fst_vt['MoorDyn']['V'][i])) + ln.append('{:^11.4f}'.format(self.fst_vt['MoorDyn']['CdA'][i])) + ln.append('{:^11.4f}'.format(self.fst_vt['MoorDyn']['CA'][i])) + f.write(" ".join(ln) + '\n') + f.write('---------------------- LINES --------------------------------------\n') + f.write(" ".join(['{:^11s}'.format(i) for i in ['Line', 'LineType', 'AttachA', 'AttachB', 'UnstrLen', 'NumSegs', 'Outputs']])+'\n') + f.write(" ".join(['{:^11s}'.format(i) for i in ['(-)', '(-)', '(-)', '(-)', '(m)', '(-)', '(-)']])+'\n') + for i in range(len(self.fst_vt['MoorDyn']['Line_ID'])): + ln = [] + ln.append('{:^11d}'.format(self.fst_vt['MoorDyn']['Line_ID'][i])) + ln.append('{:^11}'.format(self.fst_vt['MoorDyn']['LineType'][i])) + ln.append('{:^11d}'.format(self.fst_vt['MoorDyn']['AttachA'][i])) + ln.append('{:^11d}'.format(self.fst_vt['MoorDyn']['AttachB'][i])) + ln.append('{:^11.4f}'.format(self.fst_vt['MoorDyn']['UnstrLen'][i])) + ln.append('{:^11d}'.format(self.fst_vt['MoorDyn']['NumSegs'][i])) + ln.append('{:^11}'.format(self.fst_vt['MoorDyn']['Outputs'][i])) + f.write(" ".join(ln) + '\n') + + if self.fst_vt['MoorDyn']['ChannelID']: # There are control inputs + f.write('---------------------- CONTROL ---------------------------------------\n') + f.write(" ".join(['{:^11s}'.format(i) for i in ['ChannelID', 'Line(s)']])+'\n') + f.write(" ".join(['{:^11s}'.format(i) for i in ['()', '(,)']])+'\n') + for i_line in range(len(self.fst_vt['MoorDyn']['ChannelID'])): + ln = [] + ln.append('{:^11d}'.format(self.fst_vt['MoorDyn']['ChannelID'][i_line])) + ln.append(','.join(self.fst_vt['MoorDyn']['Lines_Control'][i_line])) + f.write(" ".join(ln) + '\n') + + f.write('---------------------- SOLVER OPTIONS ---------------------------------------\n') + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['MoorDyn']['dtM'], 'dtM', '- time step to use in mooring integration (s)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['MoorDyn']['kbot'], 'kbot', '- bottom stiffness (Pa/m)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['MoorDyn']['cbot'], 'cbot', '- bottom damping (Pa-s/m)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['MoorDyn']['dtIC'], 'dtIC', '- time interval for analyzing convergence during IC gen (s)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['MoorDyn']['TmaxIC'], 'TmaxIC', '- max time for ic gen (s)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['MoorDyn']['CdScaleIC'], 'CdScaleIC', '- factor by which to scale drag coefficients during dynamic relaxation (-)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['MoorDyn']['threshIC'], 'threshIC', '- threshold for IC convergence (-)\n')) + f.write('------------------------ OUTPUTS --------------------------------------------\n') + outlist = self.get_outlist(self.fst_vt['outlist'], ['MoorDyn']) + for channel_list in outlist: + for i in range(len(channel_list)): + f.write('"' + channel_list[i] + '"\n') + f.write('END\n') + f.write('------------------------- need this line --------------------------------------\n') + + f.flush() + os.fsync(f) + f.close() + + + def write_StC(self,StC_vt,StC_filename): + + stc_file = os.path.join(self.FAST_runDirectory, StC_filename) + f = open(stc_file, 'w') + + f.write('------- STRUCTURAL CONTROL (StC) INPUT FILE ----------------------------\n') + f.write('Generated with OpenFAST_IO\n') + + f.write('---------------------- SIMULATION CONTROL --------------------------------------\n') + f.write('{!s:<22} {:<11} {:}'.format(StC_vt['Echo'], 'Echo', '- Echo input data to ".SD.ech" (flag)\n')) + + f.write('---------------------- StC DEGREES OF FREEDOM ----------------------------------\n') + f.write('{:<22} {:<11} {:}'.format(StC_vt['StC_DOF_MODE'], 'StC_DOF_MODE', '- DOF mode (switch) {0: No StC or TLCD DOF; 1: StC_X_DOF, StC_Y_DOF, and/or StC_Z_DOF (three independent StC DOFs); 2: StC_XY_DOF (Omni-Directional StC); 3: TLCD; 4: Prescribed force/moment time series}\n')) + f.write('{!s:<22} {:<11} {:}'.format(StC_vt['StC_X_DOF'], 'StC_X_DOF', '- DOF on or off for StC X (flag) [Used only when StC_DOF_MODE=1]\n')) + f.write('{!s:<22} {:<11} {:}'.format(StC_vt['StC_Y_DOF'], 'StC_Y_DOF', '- DOF on or off for StC Y (flag) [Used only when StC_DOF_MODE=1]\n')) + f.write('{!s:<22} {:<11} {:}'.format(StC_vt['StC_Z_DOF'], 'StC_Z_DOF', '- DOF on or off for StC Z (flag) [Used only when StC_DOF_MODE=1]\n')) + + f.write('---------------------- StC LOCATION ------------------------------------------- [relative to the reference origin of component attached to]\n') + f.write('{:<22} {:<11} {:}'.format(StC_vt['StC_P_X'], 'StC_P_X', '- At rest X position of StC (m)\n')) + f.write('{:<22} {:<11} {:}'.format(StC_vt['StC_P_Y'], 'StC_P_Y', '- At rest Y position of StC (m)\n')) + f.write('{:<22} {:<11} {:}'.format(StC_vt['StC_P_Z'], 'StC_P_Z', '- At rest Z position of StC (m)\n')) + + f.write('---------------------- StC INITIAL CONDITIONS --------------------------------- [used only when StC_DOF_MODE=1 or 2]\n') + f.write('{:<22} {:<11} {:}'.format(StC_vt['StC_X_DSP'], 'StC_X_DSP', '- StC X initial displacement (m) [relative to at rest position]\n')) + f.write('{:<22} {:<11} {:}'.format(StC_vt['StC_Y_DSP'], 'StC_Y_DSP', '- StC Y initial displacement (m) [relative to at rest position]\n')) + f.write('{:<22} {:<11} {:}'.format(StC_vt['StC_Z_DSP'], 'StC_Z_DSP', '- StC Z initial displacement (m) [relative to at rest position; used only when StC_DOF_MODE=1 and StC_Z_DOF=TRUE]\n')) + f.write('{!s:<22} {:<11} {:}'.format(StC_vt['StC_Z_PreLd'], 'StC_Z_PreLd', '- StC Z pre-load (N) {"gravity" to offset for gravity load; "none" or 0 to turn off} [used only when StC_DOF_MODE=1 and StC_Z_DOF=TRUE]\n')) + + f.write('---------------------- StC CONFIGURATION -------------------------------------- [used only when StC_DOF_MODE=1 or 2]\n') + f.write('{:<22} {:<11} {:}'.format(StC_vt['StC_X_PSP'], 'StC_X_PSP', '- Positive stop position (maximum X mass displacement) (m)\n')) + f.write('{:<22} {:<11} {:}'.format(StC_vt['StC_X_NSP'], 'StC_X_NSP', '- Negative stop position (minimum X mass displacement) (m)\n')) + f.write('{:<22} {:<11} {:}'.format(StC_vt['StC_Y_PSP'], 'StC_Y_PSP', '- Positive stop position (maximum Y mass displacement) (m)\n')) + f.write('{:<22} {:<11} {:}'.format(StC_vt['StC_Y_NSP'], 'StC_Y_NSP', '- Negative stop position (minimum Y mass displacement) (m)\n')) + f.write('{:<22} {:<11} {:}'.format(StC_vt['StC_Z_PSP'], 'StC_Z_PSP', '- Positive stop position (maximum Z mass displacement) (m) [used only when StC_DOF_MODE=1 and StC_Z_DOF=TRUE]\n')) + f.write('{:<22} {:<11} {:}'.format(StC_vt['StC_Z_NSP'], 'StC_Z_NSP', '- Negative stop position (minimum Z mass displacement) (m) [used only when StC_DOF_MODE=1 and StC_Z_DOF=TRUE]\n')) + + f.write('---------------------- StC MASS, STIFFNESS, & DAMPING ------------------------- [used only when StC_DOF_MODE=1 or 2]\n') + f.write('{:<22} {:<11} {:}'.format(StC_vt['StC_X_M'], 'StC_X_M', '- StC X mass (kg) [must equal StC_Y_M for StC_DOF_MODE = 2]\n')) + f.write('{:<22} {:<11} {:}'.format(StC_vt['StC_Y_M'], 'StC_Y_M', '- StC Y mass (kg) [must equal StC_X_M for StC_DOF_MODE = 2]\n')) + f.write('{:<22} {:<11} {:}'.format(StC_vt['StC_Z_M'], 'StC_Z_M', '- StC Z mass (kg) [used only when StC_DOF_MODE=1 and StC_Z_DOF=TRUE]\n')) + f.write('{:<22} {:<11} {:}'.format(StC_vt['StC_XY_M'], 'StC_XY_M', '- StC Z mass (kg) [used only when StC_DOF_MODE=2]\n')) + f.write('{:<22} {:<11} {:}'.format(StC_vt['StC_X_K'], 'StC_X_K', '- StC X stiffness (N/m)\n')) + f.write('{:<22} {:<11} {:}'.format(StC_vt['StC_Y_K'], 'StC_Y_K', '- StC Y stiffness (N/m)\n')) + f.write('{:<22} {:<11} {:}'.format(StC_vt['StC_Z_K'], 'StC_Z_K', '- StC Z stiffness (N/m) [used only when StC_DOF_MODE=1 and StC_Z_DOF=TRUE]\n')) + f.write('{:<22} {:<11} {:}'.format(StC_vt['StC_X_C'], 'StC_X_C', '- StC X damping (N/(m/s))\n')) + f.write('{:<22} {:<11} {:}'.format(StC_vt['StC_Y_C'], 'StC_Y_C', '- StC Y damping (N/(m/s))\n')) + f.write('{:<22} {:<11} {:}'.format(StC_vt['StC_Z_C'], 'StC_Z_C', '- StC Z damping (N/(m/s)) [used only when StC_DOF_MODE=1 and StC_Z_DOF=TRUE]\n')) + f.write('{:<22} {:<11} {:}'.format(StC_vt['StC_X_KS'], 'StC_X_KS', '- Stop spring X stiffness (N/m)\n')) + f.write('{:<22} {:<11} {:}'.format(StC_vt['StC_Y_KS'], 'StC_Y_KS', '- Stop spring Y stiffness (N/m)\n')) + f.write('{:<22} {:<11} {:}'.format(StC_vt['StC_Z_KS'], 'StC_Z_KS', '- Stop spring Z stiffness (N/m) [used only when StC_DOF_MODE=1 and StC_Z_DOF=TRUE]\n')) + f.write('{:<22} {:<11} {:}'.format(StC_vt['StC_X_CS'], 'StC_X_CS', '- Stop spring X damping (N/(m/s))\n')) + f.write('{:<22} {:<11} {:}'.format(StC_vt['StC_Y_CS'], 'StC_Y_CS', '- Stop spring Y damping (N/(m/s))\n')) + f.write('{:<22} {:<11} {:}'.format(StC_vt['StC_Z_CS'], 'StC_Z_CS', '- Stop spring Z damping (N/(m/s)) [used only when StC_DOF_MODE=1 and StC_Z_DOF=TRUE]\n')) + + f.write('---------------------- StC USER-DEFINED SPRING FORCES ------------------------- [used only when StC_DOF_MODE=1 or 2]\n') + f.write('{!s:<22} {:<11} {:}'.format(StC_vt['Use_F_TBL'], 'Use_F_TBL', '- Use spring force from user-defined table (flag)\n')) + f.write('{:<22} {:<11} {:}'.format(StC_vt['NKInpSt'], 'NKInpSt', '- Number of spring force input stations\n')) + + f.write('---------------------- StC SPRING FORCES TABLE -------------------------------- [used only when StC_DOF_MODE=1 or 2]\n') + f.write('X F_X Y F_Y Z F_Z\n') + f.write('(m) (N) (m) (N) (m) (N)\n') + table = StC_vt['SpringForceTable'] + for x, f_x, y, f_y, z, f_z in zip(table['X'],table['F_X'],table['Y'],table['F_Y'],table['Z'],table['F_Z']): + row = [x, f_x, y, f_y, z, f_z] + f.write(' '.join(['{: 2.8e}'.format(val) for val in row])+'\n') + + f.write('---------------------- StructCtrl CONTROL -------------------------------------------- [used only when StC_DOF_MODE=1 or 2]\n') + f.write('{:<22} {:<11} {:}'.format(StC_vt['StC_CMODE'], 'StC_CMODE', '- Control mode (switch) {0:none; 1: Semi-Active Control Mode; 2: Active Control Mode}\n')) + f.write('{:<22} {:<11} {:}'.format(StC_vt['StC_CChan'], 'StC_CChan', '- Control channel group (1:10) for stiffness and damping (StC_[XYZ]_K, StC_[XYZ]_C, and StC_[XYZ]_Brake) (specify additional channels for blade instances of StC active control -- one channel per blade) [used only when StC_DOF_MODE=1 or 2, and StC_CMODE=4 or 5]\n')) + f.write('{:<22} {:<11} {:}'.format(StC_vt['StC_SA_MODE'], 'StC_SA_MODE', '- Semi-Active control mode {1: velocity-based ground hook control; 2: Inverse velocity-based ground hook control; 3: displacement-based ground hook control 4: Phase difference Algorithm with Friction Force 5: Phase difference Algorithm with Damping Force} (-)\n')) + f.write('{:<22} {:<11} {:}'.format(StC_vt['StC_X_C_HIGH'], 'StC_X_C_HIGH', '- StC X high damping for ground hook control\n')) + f.write('{:<22} {:<11} {:}'.format(StC_vt['StC_X_C_LOW'], 'StC_X_C_LOW', '- StC X low damping for ground hook control\n')) + f.write('{:<22} {:<11} {:}'.format(StC_vt['StC_Y_C_HIGH'], 'StC_Y_C_HIGH', '- StC Y high damping for ground hook control\n')) + f.write('{:<22} {:<11} {:}'.format(StC_vt['StC_Y_C_LOW'], 'StC_Y_C_LOW', '- StC Y low damping for ground hook control\n')) + f.write('{:<22} {:<11} {:}'.format(StC_vt['StC_Z_C_HIGH'], 'StC_Z_C_HIGH', '- StC Z high damping for ground hook control [used only when StC_DOF_MODE=1 and StC_Z_DOF=TRUE]\n')) + f.write('{:<22} {:<11} {:}'.format(StC_vt['StC_Z_C_LOW'], 'StC_Z_C_LOW', '- StC Z low damping for ground hook control [used only when StC_DOF_MODE=1 and StC_Z_DOF=TRUE]\n')) + f.write('{:<22} {:<11} {:}'.format(StC_vt['StC_X_C_BRAKE'], 'StC_X_C_BRAKE', '- StC X high damping for braking the StC (Don''t use it now. should be zero)\n')) + f.write('{:<22} {:<11} {:}'.format(StC_vt['StC_Y_C_BRAKE'], 'StC_Y_C_BRAKE', '- StC Y high damping for braking the StC (Don''t use it now. should be zero)\n')) + f.write('{:<22} {:<11} {:}'.format(StC_vt['StC_Z_C_BRAKE'], 'StC_Z_C_BRAKE', '- StC Z high damping for braking the StC (Don''t use it now. should be zero) [used only when StC_DOF_MODE=1 and StC_Z_DOF=TRUE]\n')) + + f.write('---------------------- TLCD --------------------------------------------------- [used only when StC_DOF_MODE=3]\n') + f.write('{:<22} {:<11} {:}'.format(StC_vt['L_X'], 'L_X', '- X TLCD total length (m)\n')) + f.write('{:<22} {:<11} {:}'.format(StC_vt['B_X'], 'B_X', '- X TLCD horizontal length (m)\n')) + f.write('{:<22} {:<11} {:}'.format(StC_vt['area_X'], 'area_X', '- X TLCD cross-sectional area of vertical column (m^2)\n')) + f.write('{:<22} {:<11} {:}'.format(StC_vt['area_ratio_X'], 'area_ratio_X', '- X TLCD cross-sectional area ratio (vertical column area divided by horizontal column area) (-)\n')) + f.write('{:<22} {:<11} {:}'.format(StC_vt['headLossCoeff_X'], 'headLossCoeff_X', '- X TLCD head loss coeff (-)\n')) + f.write('{:<22} {:<11} {:}'.format(StC_vt['rho_X'], 'rho_X', '- X TLCD liquid density (kg/m^3)\n')) + f.write('{:<22} {:<11} {:}'.format(StC_vt['L_Y'], 'L_Y', '- Y TLCD total length (m)\n')) + f.write('{:<22} {:<11} {:}'.format(StC_vt['B_Y'], 'B_Y', '- Y TLCD horizontal length (m)\n')) + f.write('{:<22} {:<11} {:}'.format(StC_vt['area_Y'], 'area_Y', '- Y TLCD cross-sectional area of vertical column (m^2)\n')) + f.write('{:<22} {:<11} {:}'.format(StC_vt['area_ratio_Y'], 'area_ratio_Y', '- Y TLCD cross-sectional area ratio (vertical column area divided by horizontal column area) (-)\n')) + f.write('{:<22} {:<11} {:}'.format(StC_vt['headLossCoeff_Y'], 'headLossCoeff_Y', '- Y TLCD head loss coeff (-)\n')) + f.write('{:<22} {:<11} {:}'.format(StC_vt['rho_Y'], 'rho_Y', '- Y TLCD liquid density (kg/m^3)\n')) + + f.write('---------------------- PRESCRIBED TIME SERIES --------------------------------- [used only when StC_DOF_MODE=4]\n') + f.write('{:<22} {:<11} {:}'.format(StC_vt['PrescribedForcesCoord'], 'PrescribedForcesCoord', '- Prescribed forces are in global or local coordinates (switch) {1: global; 2: local}\n')) + f.write('{!s:<22} {:<11} {:}'.format(StC_vt['PrescribedForcesFile'], 'PrescribedForcesFile', '- Time series force and moment (7 columns of time, FX, FY, FZ, MX, MY, MZ)\n')) + f.write('-------------------------------------------------------------------------------\n') + + f.flush() + os.fsync(f) + f.close() + +if __name__=="__main__": + + fst_update = {} + fst_update['Fst', 'TMax'] = 20. + fst_update['AeroDyn15', 'TwrAero'] = False + + examples_dir = os.path.dirname( os.path.dirname( os.path.dirname( os.path.realpath(__file__) ) ) ) + os.sep + + # Read the model + fast = InputReader_OpenFAST() + fast.FAST_InputFile = 'IEA-15-240-RWT-UMaineSemi.fst' # FAST input file (ext=.fst) + fast.FAST_directory = os.path.join(examples_dir, 'examples', '01_aeroelasticse', + 'OpenFAST_models', 'IEA-15-240-RWT', + 'IEA-15-240-RWT-UMaineSemi') # Path to fst directory files + fast.execute() + + # Write out the model + fastout = InputWriter_OpenFAST() + fastout.fst_vt = fast.fst_vt + fastout.FAST_runDirectory = 'temp/OpenFAST' + fastout.FAST_namingOut = 'iea15' + fastout.update(fst_update=fst_update) + fastout.execute() + + # import pickle + # with open('fst_vt.pkl','rb') as f: + # fst_vt = pickle.load(f) + + # fastout = InputWriter_OpenFAST() + # fastout.FAST_runDirectory = 'none' + + # fst_vt['TStC'][0]['NKInpSt'] = 2 + + # for i_TStC, TStC in enumerate(fst_vt['TStC']): + # fastout.write_StC(TStC,fst_vt['ServoDyn']['TStCfiles'][i_TStC]) + # print('here') diff --git a/openfast_python/openfast_io/FileTools.py b/openfast_python/openfast_io/FileTools.py new file mode 100644 index 0000000000..9477400c47 --- /dev/null +++ b/openfast_python/openfast_io/FileTools.py @@ -0,0 +1,271 @@ +import os +import copy +import operator +import numpy as np +import yaml +from functools import reduce +try: + import ruamel_yaml as ry +except Exception: + try: + import ruamel.yaml as ry + except Exception: + raise ImportError('No module named ruamel.yaml or ruamel_yaml') + +""" +Common utilites for handling the text I/O for using AeroelasticSE +""" + +def remove_numpy(fst_vt): + # recursively move through nested dictionary, remove numpy data types + # for formatting dictionaries before writing to yaml files + + def get_dict(vartree, branch): + return reduce(operator.getitem, branch, vartree) + + def loop_dict(vartree, branch): + if type(vartree) is not dict: + return fst_vt + for var in vartree.keys(): + branch_i = copy.copy(branch) + branch_i.append(var) + if type(vartree[var]) is dict: + loop_dict(vartree[var], branch_i) + else: + data_type = type(get_dict(fst_vt, branch_i[:-1])[branch_i[-1]]) + + if data_type in [np.int_, np.intc, np.intp, np.int8, np.int16, np.int32, np.int64, np.uint8, np.uint16, np.uint32, np.uint64]: + get_dict(fst_vt, branch_i[:-1])[branch_i[-1]] = int(get_dict(fst_vt, branch_i[:-1])[branch_i[-1]]) + elif data_type in [np.single, np.double, np.longdouble, np.csingle, np.cdouble, np.float_, np.float16, np.float32, np.float64, np.complex64, np.complex128]: + get_dict(fst_vt, branch_i[:-1])[branch_i[-1]] = float(get_dict(fst_vt, branch_i[:-1])[branch_i[-1]]) + elif data_type in [np.bool_]: + get_dict(fst_vt, branch_i[:-1])[branch_i[-1]] = bool(get_dict(fst_vt, branch_i[:-1])[branch_i[-1]]) + elif data_type in [np.ndarray]: + get_dict(fst_vt, branch_i[:-1])[branch_i[-1]] = get_dict(fst_vt, branch_i[:-1])[branch_i[-1]].tolist() + elif data_type in [list,tuple]: + for item in get_dict(fst_vt, branch_i[:-1])[branch_i[-1]]: + remove_numpy(item) + + # set fast variables to update values + loop_dict(fst_vt, []) + + return fst_vt + +def convert_str(val): + # string parsing tool + + def try_type(val, data_type): + try: + data_type(val) + return True + except ValueError: + return False + + if try_type(val, int): + return int(val) + elif try_type(val, float): + return float(val) + elif val=='True': + return True + elif val=='False': + return False + else: + return val + + +def str_repeats(string): + # find repeated sequences in a string + for x in range(1, len(string)): + substring = string[:x] + if substring * (len(string)//len(substring))+(substring[:len(string)%len(substring)]) == string: + return substring + + +def load_case_matrix(fname): + # load the AeroelasticSE case_matrix + + fid = open(fname) + text = fid.readlines() + fid.close() + + module = text[0].strip().split() + var_names = text[1].strip().split() + if len(module) == len(var_names)+1: + var_names = ["ID"] + var_names + + out = {} + for var in var_names: + out[var] = [] + + for ln in text[2:]: + val_list = ln.strip().split() + for var, val in zip(var_names, val_list): + out[var].append(convert_str(val)) + + return out + +def load_yaml(fname_input, package=0): + # Import a .yaml file + + if package == 0: + with open(fname_input) as f: + data = yaml.safe_load(f) + return data + + elif package == 1: + with open(fname_input, 'r') as myfile: + text_input = myfile.read() + myfile.close() + ryaml = ry.YAML() + return dict(ryaml.load(text_input)) + + +def save_yaml(outdir, fname, data_out): + + if not os.path.isdir(outdir) and outdir!='': + os.makedirs(outdir) + fname = os.path.join(outdir, fname) + + data_out = remove_numpy(data_out) + + f = open(fname, "w") + yaml=ry.YAML() + yaml.default_flow_style = None + yaml.width = float("inf") + yaml.indent(mapping=4, sequence=6, offset=3) + yaml.dump(data_out, f) + f.close() + + +def select_cases(cases, var_sel, val_sel): + # Find a variable value from the AeroelasticSE case_matrix + + n_var = len(var_sel) + n_cases = len(cases[var_sel[0]]) + + truth = [True]*n_cases + for vari, vali in zip(var_sel, val_sel): + test = [valj == vali for valj in cases[vari]] + truth = [truthi and testi for truthi, testi in zip(truth, test)] + + case_idx = [i for i, x in enumerate(truth) if x] + return case_idx + +def get_dlc_label(cases, include_seed=True): + # Get descriptive string describing IEC DLC cases from the case_matrix + + labels = [] + # from txt + try: + for idx in range(len(cases['DLC'])): + + DLC = cases['DLC'][idx] + wind_fname = cases['Filename'][idx] + + if DLC == 1.1: + ntm = wind_fname.split('NTM')[-1].split('_') + ntm_U = float(".".join(ntm[1].strip("U").split('.')[:-1])) + ntm_Seed = float(".".join(ntm[2].strip("Seed").split('.')[:-1])) + if include_seed == True: + label_i = "DLC 1.1, Normal Turbulence, U=%0.1f m/s, Seed=%d"%(ntm_U, ntm_Seed) + else: + label_i = "DLC 1.1, Normal Turbulence, U=%0.1f m/s"%(ntm_U) + + if DLC == 1.3: + etm = wind_fname.split('ETM')[-1].split('_') + etm_U = float(".".join(etm[1].strip("U").split('.')[:-1])) + etm_Seed = float(".".join(etm[2].strip("Seed").split('.')[:-1])) + if include_seed == True: + label_i = "DLC 1.3, Extreme Turbulence, U=%0.1f m/s, Seed=%d"%(etm_U, etm_Seed) + else: + label_i = "DLC 1.3, Extreme Turbulence, U=%0.1f m/s"%(etm_U) + + if DLC == 1.4: + ecd = wind_fname.split('ECD')[-1].split('_') + ecd_dir = ecd[1] + ecd_U = float(".".join(ecd[2].strip("U").split('.')[:-1])) + label_i = "DLC 1.4, %s ECD, U=%0.1f m/s"%(ecd_dir, ecd_U) + + if DLC == 1.5: + ews = wind_fname.split('EWS')[-1].split('_') + ews_type = ews[1] + ews_dir = ews[2] + ews_U = float(".".join(ews[3].strip("U").split('.')[:-1])) + if ews_type == "H": + ews_type = "Hor." + elif ews_type == "V": + ews_type = "Vert." + if ews_dir == "P": + ews_dir = "Pos." + elif ews_dir == "N": + ews_dir = "Neg." + label_i = "DLC 1.5, Extreme %s Shear, %s, U=%0.1f m/s"%(ews_type, ews_dir, ews_U) + + if DLC == 6.1: + label_i = "DLC 6.1" + + if DLC == 6.3: + label_i = "DLC 6.3" + + labels.append(label_i) + + # From yaml + except KeyError: + for idx in range(len(cases[('IEC','DLC')])): + + DLC = cases[('IEC','DLC')][idx] + wind_fname = cases[('InflowWind', 'Filename')][idx] + + if DLC == 1.1: + ntm = wind_fname.split('NTM')[-1].split('_') + ntm_U = float(".".join(ntm[1].strip("U").split('.')[:-1])) + ntm_Seed = float(".".join(ntm[2].strip("Seed").split('.')[:-1])) + if include_seed == True: + label_i = "DLC 1.1, Normal Turbulence, U=%0.1f m/s, Seed=%d"%(ntm_U, ntm_Seed) + else: + label_i = "DLC 1.1, Normal Turbulence, U=%0.1f m/s"%(ntm_U) + + if DLC == 1.3: + etm = wind_fname.split('ETM')[-1].split('_') + etm_U = float(".".join(etm[1].strip("U").split('.')[:-1])) + etm_Seed = float(".".join(etm[2].strip("Seed").split('.')[:-1])) + if include_seed == True: + label_i = "DLC 1.3, Extreme Turbulence, U=%0.1f m/s, Seed=%d"%(etm_U, etm_Seed) + else: + label_i = "DLC 1.3, Extreme Turbulence, U=%0.1f m/s"%(etm_U) + + if DLC == 1.4: + ecd = wind_fname.split('ECD')[-1].split('_') + ecd_dir = ecd[1] + ecd_U = float(".".join(ecd[2].strip("U").split('.')[:-1])) + label_i = "DLC 1.4, %s ECD, U=%0.1f m/s"%(ecd_dir, ecd_U) + + if DLC == 1.5: + ews = wind_fname.split('EWS')[-1].split('_') + ews_type = ews[1] + ews_dir = ews[2] + ews_U = float(".".join(ews[3].strip("U").split('.')[:-1])) + if ews_type == "H": + ews_type = "Hor." + elif ews_type == "V": + ews_type = "Vert." + if ews_dir == "P": + ews_dir = "Pos." + elif ews_dir == "N": + ews_dir = "Neg." + label_i = "DLC 1.5, Extreme %s Shear, %s, U=%0.1f m/s"%(ews_type, ews_dir, ews_U) + + if DLC == 6.1: + label_i = "DLC 6.1" + + if DLC == 6.3: + label_i = "DLC 6.3" + + labels.append(label_i) + + + return labels + +def load_file_list(fname_flist): + # load list of filenames from file + return np.genfromtxt(fname_flist, dtype='str') diff --git a/openfast_python/openfast_io/IEC_CoeherentGusts.py b/openfast_python/openfast_io/IEC_CoeherentGusts.py new file mode 100644 index 0000000000..17c3f2e4b3 --- /dev/null +++ b/openfast_python/openfast_io/IEC_CoeherentGusts.py @@ -0,0 +1,256 @@ +import numpy as np +import os + +class IEC_CoherentGusts(): + + def __init__(self): + + self.Vert_Slope = 0 # Vertical slope of the wind inflow (deg) + self.T0 = 0. + self.TF = 630. + self.TStart = 30 # Time to start transient conditions (s) + self.dt = 0.05 # Transient wind time step (s) + self.D = 90. # Rotor diameter (m) + self.HH = 100. # Hub height (m) + + def execute(self, dir, base_name, dlc): + + if self.HH > 60: + self.Sigma_1 = 42 + else: + self.Sigma_1 = 0.7*self.HH + + wind_file_name = os.path.join(dir, base_name + '_' + dlc.IEC_WindType + '_U%1.6f'%dlc.URef + '_D%s'%dlc.direction_pn + '_S%s'%dlc.shear_hv + '.wnd') + + if dlc.IEC_WindType == 'EOG': + self.EOG(dlc, wind_file_name) + elif dlc.IEC_WindType == 'EDC': + self.EDC(dlc, wind_file_name) + elif dlc.IEC_WindType == 'ECD': + self.ECD(dlc, wind_file_name) + elif dlc.IEC_WindType == 'EWS': + self.EWS(dlc, wind_file_name) + elif dlc.IEC_WindType == 'Custom': + wind_file_name = dlc.wind_file + else: + raise Exception('The gust ' + dlc.IEC_WindType + ' is not supported by OpenFAST_IO') + + return wind_file_name + + def EOG(self, dlc, wind_file_name): + # Extreme operating gust: 6.3.2.2 + + T = 10.5 + t = np.linspace(0., T, num=int(T/self.dt+1)) + + # constants from standard + alpha = 0.2 + + # Flow angle adjustments + V_hub = dlc.URef*np.cos(self.Vert_Slope*np.pi/180) + V_vert_mag = dlc.URef*np.sin(self.Vert_Slope*np.pi/180) + + sigma_1 = dlc.sigma1 + V_e1 = dlc.V_e1 + + # Contant variables + V = np.zeros_like(t)+V_hub + V_dir = np.zeros_like(t) + V_vert = np.zeros_like(t)+V_vert_mag + shear_horz = np.zeros_like(t) + shear_vert = np.zeros_like(t)+alpha + shear_vert_lin = np.zeros_like(t) + V_gust = np.zeros_like(t) + upflow = np.zeros_like(t) + + V_gust = min([ 1.35*(V_e1 - V_hub), 3.3*(sigma_1/(1+0.1*(self.D/self.Sigma_1))) ]) + + V_gust_t = np.zeros_like(t) + for i, ti in enumerate(t): + if ti 180.: + Theta_e = 180. + + if dlc.direction_pn == 'p': + k=1. + elif dlc.direction_pn == 'n': + k=-1. + else: + raise Exception('The EDC gust can only have positive (p) or negative (n) direction, whereas the script receives '+ dlc.direction_pn) + + Theta = np.zeros_like(t) + for i, ti in enumerate(t): + if ti0) + for it in range(nt): + Buffer = np.frombuffer(f.read(2*3*ny*nz), dtype=np.int16).astype(np.float32).reshape([3, ny, nz], order='F') + u[:,it,:,:]=Buffer + Buffer = np.frombuffer(f.read(2*3*nTwr), dtype=np.int16).astype(np.float32).reshape([3, nTwr], order='F') + uTwr[:,it,:]=Buffer + u -= off[:, None, None, None] + u /= scl[:, None, None, None] + self['u'] = u + uTwr -= off[:, None, None] + uTwr /= scl[:, None, None] + self['uTwr'] = uTwr + self['info'] = info + self['ID'] = ID + self['dt'] = dt + self['y'] = np.arange(ny)*dy + self['y'] -= np.mean(self['y']) # y always centered on 0 + self['z'] = np.arange(nz)*dz +zBottom + self['t'] = np.arange(nt)*dt + self['zTwr'] =-np.arange(nTwr)*dz + zBottom + self['zHub'] = zHub + self['uHub'] = uHub + + def write(self, filename=None): + """ + write a BTS file, using the following keys: 'u','z','y','t','uTwr' + u (3 x nt x ny x nz) + uTwr (3 x nt x nTwr) + """ + if filename: + self.filename = filename + if not self.filename: + raise Exception('No filename provided') + + nDim, nt, ny, nz = self['u'].shape + if 'uTwr' not in self.keys() : + self['uTwr']=np.zeros((3,nt,0)) + if 'ID' not in self.keys() : + self['ID']=7 + + _, _, nTwr = self['uTwr'].shape + tsTwr = self['uTwr'] + ts = self['u'] + intmin = -32768 + intrng = 65535 + off = np.empty((3), dtype = np.float32) + scl = np.empty((3), dtype = np.float32) + info = 'Generated by TurbSimFile on {:s}.'.format(time.strftime('%d-%b-%Y at %H:%M:%S', time.localtime())) + # Calculate scaling, offsets and scaling data + out = np.empty(ts.shape, dtype=np.int16) + outTwr = np.empty(tsTwr.shape, dtype=np.int16) + for k in range(3): + all_min, all_max = ts[k].min(), ts[k].max() + if nTwr>0: + all_min=min(all_min, tsTwr[k].min()) + all_max=max(all_max, tsTwr[k].max()) + if all_min == all_max: + scl[k] = 1 + else: + scl[k] = intrng / (all_max-all_min) + off[k] = intmin - scl[k] * all_min + out[k] = (ts[k] * scl[k] + off[k]).astype(np.int16) + outTwr[k] = (tsTwr[k] * scl[k] + off[k]).astype(np.int16) + z0 = self['z'][0] + dz = self['z'][1]- self['z'][0] + dy = self['y'][1]- self['y'][0] + dt = self['t'][1]- self['t'][0] + + # Providing estimates of uHub and zHub even if these fields are not used + zHub,uHub, bHub = self.hubValues() + + with open(self.filename, mode='wb') as f: + f.write(struct.pack('0: + s+=' - zTwr: [{} ... {}], dz: {}, n: {} \n'.format(self['zTwr'][0],self['zTwr'][-1],self['zTwr'][1]-self['zTwr'][0],len(self['zTwr'])) + if 'uTwr' in self.keys() and self['uTwr'].shape[2]>0: + s+=' - uTwr: ({} x {} x {} ) \n'.format(*(self['uTwr'].shape)) + ux,uy,uz=self['uTwr'][0], self['uTwr'][1], self['uTwr'][2] + s+=' ux: min: {}, max: {}, mean: {} \n'.format(np.min(ux), np.max(ux), np.mean(ux)) + s+=' uy: min: {}, max: {}, mean: {} \n'.format(np.min(uy), np.max(uy), np.mean(uy)) + s+=' uz: min: {}, max: {}, mean: {} \n'.format(np.min(uz), np.max(uz), np.mean(uz)) + + return s + + def toDataFrame(self): + dfs={} + + ny = len(self['y']) + nz = len(self['y']) + # Index at mid box + iy,iz = self._iMid() + + # Mean vertical profile + m = np.mean(self['u'][:,:,iy,:], axis=1) + s = np.std( self['u'][:,:,iy,:], axis=1) + ti = s/m*100 + Cols=['z_[m]','u_[m/s]','v_[m/s]','w_[m/s]','sigma_u_[m/s]','sigma_v_[m/s]','sigma_w_[m/s]','TI_[%]'] + data = np.column_stack((self['z'],m[0,:],m[1,:],m[2,:],s[0,:],s[1,:],s[2,:],ti[0,:])) + dfs['VertProfile'] = pd.DataFrame(data = data ,columns = Cols) + + # Mid time series + u = self['u'][:,:,iy,iz] + Cols=['t_[s]','u_[m/s]','v_[m/s]','w_[m/s]'] + data = np.column_stack((self['t'],u[0,:],u[1,:],u[2,:])) + dfs['MidLine'] = pd.DataFrame(data = data ,columns = Cols) + + # Hub time series + #try: + # zHub = self['zHub'] + # iz = np.argmin(np.abs(self['z']-zHub)) + # u = self['u'][:,:,iy,iz] + # Cols=['t_[s]','u_[m/s]','v_[m/s]','w_[m/s]'] + # data = np.column_stack((self['t'],u[0,:],u[1,:],u[2,:])) + # dfs['TSHubLine'] = pd.DataFrame(data = data ,columns = Cols) + #except: + # pass + return dfs + + def compute_rot_avg(self,R): + ''' + Compute rotor average wind speed, where R is the rotor radius + ''' + + self['rot_avg'] = np.zeros((3,len(self['t']))) + + for i in range(3): + u_ = self['u'][i,:,:,:] + z_hub = self['zHub'] + yy, zz = np.meshgrid(self['y'],self['z']) + rotor_ind = np.sqrt(yy**2 + (zz - z_hub)**2) < R + + u_rot = [] + for u_plane in u_: + u_rot.append(u_plane[rotor_ind].mean()) + + self['rot_avg'][i,:] = u_rot + + +if __name__=='__main__': + ts = TurbSimFile('../_tests/TurbSim.bts') diff --git a/openfast_python/openfast_io/turbsim_util.py b/openfast_python/openfast_io/turbsim_util.py new file mode 100644 index 0000000000..770570d77d --- /dev/null +++ b/openfast_python/openfast_io/turbsim_util.py @@ -0,0 +1,280 @@ +import os +import shutil +import subprocess +from openfast_io.IEC_CoeherentGusts import IEC_CoherentGusts + +class TurbsimReader(object): + + def read_input_file(self, input_file_name): + inpf = open(input_file_name, 'r') + + # Runtime Options + inpf.readline() + inpf.readline() + inpf.readline() + self.Echo = inpf.readline().split()[0] + self.RandSeed1 = inpf.readline().split()[0] + self.RandSeed2 = inpf.readline().split()[0] + self.WrBHHTP = inpf.readline().split()[0] + self.WrFHHTP = inpf.readline().split()[0] + self.WrADHH = inpf.readline().split()[0] + self.WrADFF = inpf.readline().split()[0] + self.WrBLFF = inpf.readline().split()[0] + self.WrADTWR = inpf.readline().split()[0] + self.WrFMTFF = inpf.readline().split()[0] + self.WrACT = inpf.readline().split()[0] + self.Clockwise = inpf.readline().split()[0] + self.ScaleIEC = inpf.readline().split()[0] + + # Turbine/Model Specifications + inpf.readline() + inpf.readline() + self.NumGrid_Z = inpf.readline().split()[0] + self.NumGrid_Y = inpf.readline().split()[0] + self.TimeStep = inpf.readline().split()[0] + self.AnalysisTime = inpf.readline().split()[0] + self.UsableTime = inpf.readline().split()[0] + self.HubHt = inpf.readline().split()[0] + self.GridHeight = inpf.readline().split()[0] + self.GridWidth = inpf.readline().split()[0] + self.VFlowAng = inpf.readline().split()[0] + self.HFlowAng = inpf.readline().split()[0] + + # Meteorological Boundary Conditions + inpf.readline() + inpf.readline() + self.TurbModel = inpf.readline().split()[0] + self.UserFile = inpf.readline().split()[0].replace("'","").replace('"','') + self.IECstandard = inpf.readline().split()[0] + self.IECturbc = inpf.readline().split()[0] + self.IEC_WindType = inpf.readline().split()[0] + self.ETMc = inpf.readline().split()[0] + self.WindProfileType = inpf.readline().split()[0] + self.ProfileFile = inpf.readline().split()[0].replace("'","").replace('"','') + self.RefHt = inpf.readline().split()[0] + self.URef = inpf.readline().split()[0] + self.ZJetMax = inpf.readline().split()[0] + self.PLExp = inpf.readline().split()[0] + self.Z0 = inpf.readline().split()[0] + + + # Meteorological Boundary Conditions + inpf.readline() + inpf.readline() + self.Latitude = inpf.readline().split()[0] + self.RICH_NO = inpf.readline().split()[0] + self.UStar = inpf.readline().split()[0] + self.ZI = inpf.readline().split()[0] + self.PC_UW = inpf.readline().split()[0] + self.PC_UV = inpf.readline().split()[0] + self.PC_VW = inpf.readline().split()[0] + + # Spatial Coherence Parameters + inpf.readline() + inpf.readline() + self.SCMod1 = inpf.readline().split()[0] + self.SCMod2 = inpf.readline().split()[0] + self.SCMod3 = inpf.readline().split()[0] + self.InCDec1 = inpf.readline().split()[0] + self.InCDec2 = inpf.readline().split()[0] + self.InCDec3 = inpf.readline().split()[0] + self.CohExp = inpf.readline().split()[0] + + # Spatial Coherence Parameters + inpf.readline() + inpf.readline() + self.CTEventPath = inpf.readline().split()[0] + self.CTEventFile = inpf.readline().split()[0] + self.Randomize = inpf.readline().split()[0] + self.DistScl = inpf.readline().split()[0] + self.CTLy = inpf.readline().split()[0] + self.CTLz = inpf.readline().split()[0] + self.CTStartTime = inpf.readline().split()[0] + + +class TurbsimWriter(object): + + def __init__(self, turbsiminputs): + + self.turbsiminputs = turbsiminputs + + def execute(self, turbsim_input_file): + + tsinp = open(turbsim_input_file, 'w') + tsinp.write("---------TurbSim v2.00.* Input File------------------------\n") + tsinp.write(" Turbsim input file\n") + tsinp.write("---------Runtime Options-----------------------------------\n") + + # runtime options + tsinp.write('{!s:<12} Echo - Echo input data to .ech (flag)\n'.format(self.turbsiminputs.Echo)) + tsinp.write('{!s:<12} RandSeed1 - First random seed (-2147483648 to 2147483647)\n'.format(int(self.turbsiminputs.RandSeed1))) + tsinp.write('{!s:<12} RandSeed2 - Second random seed (-2147483648 to 2147483647) for intrinsic pRNG, or an alternative pRNG: "RanLux" or "RNSNLW"\n'.format(self.turbsiminputs.RandSeed2)) + tsinp.write('{!s:<12} WrBHHTP - Output hub-height turbulence parameters in binary form? (Generates RootName.bin)\n'.format(self.turbsiminputs.WrBHHTP)) + tsinp.write('{!s:<12} WrFHHTP - Output hub-height turbulence parameters in formatted form? (Generates RootName.dat)\n'.format(self.turbsiminputs.WrFHHTP)) + tsinp.write('{!s:<12} WrADHH - Output hub-height time-series data in AeroDyn form? (Generates RootName.hh)\n'.format(self.turbsiminputs.WrADHH)) + tsinp.write('{!s:<12} WrADFF - Output full-field time-series data in TurbSim/AeroDyn form? (Generates RootName.bts)\n'.format(self.turbsiminputs.WrADFF)) + tsinp.write('{!s:<12} WrBLFF - Output full-field time-series data in BLADED/AeroDyn form? (Generates RootName.wnd)\n'.format(self.turbsiminputs.WrBLFF)) + tsinp.write('{!s:<12} WrADTWR - Output tower time-series data? (Generates RootName.twr)\n'.format(self.turbsiminputs.WrADTWR)) + tsinp.write('{!s:<12} WrFMTFF - Output full-field time-series data in formatted (readable) form? (Generates RootName.u, RootName.v, RootName.w)\n'.format(self.turbsiminputs.WrFMTFF)) + tsinp.write('{!s:<12} WrACT - Output coherent turbulence time steps in AeroDyn form? (Generates RootName.cts)\n'.format(self.turbsiminputs.WrACT)) + tsinp.write('{!s:<12} Clockwise - Clockwise rotation looking downwind? (used only for full-field binary files - not necessary for AeroDyn)\n'.format(self.turbsiminputs.Clockwise)) + tsinp.write('{!s:<12} ScaleIEC - Scale IEC turbulence models to exact target standard deviation? [0=no additional scaling; 1=use hub scale uniformly; 2=use individual scales]\n'.format(self.turbsiminputs.ScaleIEC)) + + # Turbine/Model Specifications + tsinp.write("\n") + tsinp.write("--------Turbine/Model Specifications-----------------------\n") + tsinp.write('{!s:<12} NumGrid_Z - Vertical grid-point matrix dimension\n'.format(self.turbsiminputs.NumGrid_Z)) + tsinp.write('{!s:<12} NumGrid_Y - Horizontal grid-point matrix dimension\n'.format(self.turbsiminputs.NumGrid_Y)) + tsinp.write('{!s:<12} TimeStep - Time step [seconds]\n'.format(self.turbsiminputs.TimeStep)) + tsinp.write('{!s:<12} AnalysisTime - Length of analysis time series [seconds] (program will add time if necessary: AnalysisTime = MAX(AnalysisTime, UsableTime+GridWidth/MeanHHWS) )\n'.format(self.turbsiminputs.AnalysisTime)) + tsinp.write('{!s:<12} UsableTime - Usable length of output time series [seconds] (program will add GridWidth/MeanHHWS seconds unless UsableTime is "ALL")\n'.format(self.turbsiminputs.UsableTime)) + tsinp.write('{!s:<12} HubHt - Hub height [m] (should be > 0.5*GridHeight)\n'.format(self.turbsiminputs.HubHt)) + tsinp.write('{!s:<12} GridHeight - Grid height [m]\n'.format(self.turbsiminputs.GridHeight)) + tsinp.write('{!s:<12} GridWidth - Grid width [m] (should be >= 2*(RotorRadius+ShaftLength))\n'.format(self.turbsiminputs.GridWidth)) + tsinp.write('{!s:<12} VFlowAng - Vertical mean flow (uptilt) angle [degrees]\n'.format(self.turbsiminputs.VFlowAng)) + tsinp.write('{!s:<12} HFlowAng - Horizontal mean flow (skew) angle [degrees]\n'.format(self.turbsiminputs.HFlowAng)) + + # Meteorological Boundary Conditions + tsinp.write("\n") + tsinp.write("--------Meteorological Boundary Conditions-------------------\n") + tsinp.write('{!s:<12} TurbModel - Turbulence model ("IECKAI","IECVKM","GP_LLJ","NWTCUP","SMOOTH","WF_UPW","WF_07D","WF_14D","TIDAL","API","USRINP","TIMESR", or "NONE")\n'.format(self.turbsiminputs.TurbModel)) + tsinp.write('{!s:<12} UserFile - Name of the file that contains inputs for user-defined spectra or time series inputs (used only for "USRINP" and "TIMESR" models)\n'.format(self.turbsiminputs.UserFile)) + tsinp.write('{!s:<12} IECstandard - Number of IEC 61400-x standard (x=1,2, or 3 with optional 61400-1 edition number (i.e. "1-Ed2") )\n'.format(self.turbsiminputs.IECstandard)) + tsinp.write('{!s:<12} IECturbc - IEC turbulence characteristic ("A", "B", "C" or the turbulence intensity in percent) ("KHTEST" option with NWTCUP model, not used for other models)\n'.format(self.turbsiminputs.IECturbc)) + tsinp.write('{!s:<12} IEC_WindType - IEC turbulence type ("NTM"=normal, "xETM"=extreme turbulence, "xEWM1"=extreme 1-year wind, "xEWM50"=extreme 50-year wind, where x=wind turbine class 1, 2, or 3)\n'.format(self.turbsiminputs.IEC_WindType)) + tsinp.write('{!s:<12} ETMc - IEC Extreme Turbulence Model "c" parameter [m/s]\n'.format(self.turbsiminputs.ETMc)) + tsinp.write('{!s:<12} WindProfileType - Velocity profile type ("LOG";"PL"=power law;"JET";"H2L"=Log law for TIDAL model;"API";"USR";"TS";"IEC"=PL on rotor disk, LOG elsewhere; or "default")\n'.format(self.turbsiminputs.WindProfileType)) + tsinp.write('{!s:<12} ProfileFile - Name of the file that contains input profiles for WindProfileType="USR" and/or TurbModel="USRVKM" [-]\n'.format(self.turbsiminputs.ProfileFile)) + tsinp.write('{!s:<12} RefHt - Height of the reference velocity (URef) [m]\n'.format(self.turbsiminputs.RefHt)) + tsinp.write('{!s:<12} URef - Mean (total) velocity at the reference height [m/s] (or "default" for JET velocity profile) [must be 1-hr mean for API model; otherwise is the mean over AnalysisTime seconds]\n'.format(self.turbsiminputs.URef)) + tsinp.write('{!s:<12} ZJetMax - Jet height [m] (used only for JET velocity profile, valid 70-490 m)\n'.format(self.turbsiminputs.ZJetMax)) + tsinp.write('{!s:<12} PLExp - Power law exponent [-] (or "default")\n'.format(self.turbsiminputs.PLExp)) + tsinp.write('{!s:<12} Z0 - Surface roughness length [m] (or "default")\n'.format(self.turbsiminputs.Z0)) + + # Non-IEC Meteorological Boundary Conditions + tsinp.write("\n") + tsinp.write("--------Non-IEC Meteorological Boundary Conditions------------\n") + tsinp.write('{!s:<12} Latitude - Site latitude [degrees] (or "default")\n'.format(self.turbsiminputs.Latitude)) + tsinp.write('{!s:<12} RICH_NO - Gradient Richardson number [-]\n'.format(self.turbsiminputs.RICH_NO)) + tsinp.write('{!s:<12} UStar - Friction or shear velocity [m/s] (or "default")\n'.format(self.turbsiminputs.UStar)) + tsinp.write('{!s:<12} ZI - Mixing layer depth [m] (or "default")\n'.format(self.turbsiminputs.ZI)) + tsinp.write('{!s:<12} PC_UW - Hub mean uw Reynolds stress [m^2/s^2] (or "default" or "none")\n'.format(self.turbsiminputs.PC_UW)) + tsinp.write('{!s:<12} PC_UV - Hub mean uv Reynolds stress [m^2/s^2] (or "default" or "none")\n'.format(self.turbsiminputs.PC_UV)) + tsinp.write('{!s:<12} PC_VW - Hub mean vw Reynolds stress [m^2/s^2] (or "default" or "none")\n'.format(self.turbsiminputs.PC_VW)) + + # Spatial Coherence Parameters + tsinp.write('\n') + tsinp.write( + '--------Spatial Coherence Parameters----------------------------\n') + tsinp.write('{!s:<12} SCMod1 - u-component coherence model ("GENERAL", "IEC", "API", "NONE", or "default")\n'.format( + self.turbsiminputs.SCMod1)) + tsinp.write('{!s:<12} SCMod2 - v-component coherence model ("GENERAL", "IEC", "NONE", or "default")\n'.format( + self.turbsiminputs.SCMod2)) + tsinp.write('{!s:<12} SCMod3 - w-component coherence model ("GENERAL", "IEC", "NONE", or "default")\n'.format( + self.turbsiminputs.SCMod3)) + if not type(self.turbsiminputs.InCDec1) is str: + tsinp.write('{:<5.2f} {:<5.2f} InCDec1 - u-component coherence parameters for general or IEC models [-, m^-1] (e.g. "10.0 0.3e-3" in quotes) (or "default")\n'.format( + float(self.turbsiminputs.InCDec1[0]), float(self.turbsiminputs.InCDec1[1]))) + else: + tsinp.write('{!s:<12} InCDec1 - u-component coherence parameters for general or IEC models [-, m^-1] (e.g. "10.0 0.3e-3" in quotes) (or "default")\n'.format( + self.turbsiminputs.InCDec1)) + if not type(self.turbsiminputs.InCDec2) is str: + tsinp.write('{:<5.2f} {:<5.2f} InCDec2 - v-component coherence parameters for general or IEC models [-, m^-1] (e.g. "10.0 0.3e-3" in quotes) (or "default")\n'.format( + float(self.turbsiminputs.InCDec2[0]), float(self.turbsiminputs.InCDec2[1]))) + else: + tsinp.write('{!s:<12} InCDec2 - v-component coherence parameters for general or IEC models [-, m^-1] (e.g. "10.0 0.3e-3" in quotes) (or "default")\n'.format( + self.turbsiminputs.InCDec2)) + if not type(self.turbsiminputs.InCDec3) is str: + tsinp.write('{:<5.2f} {:<5.2f} InCDec3 - w-component coherence parameters for general or IEC models [-, m^-1] (e.g. "10.0 0.3e-3" in quotes) (or "default")\n'.format( + float(self.turbsiminputs.InCDec3[0]), float(self.turbsiminputs.InCDec3[1]))) + else: + tsinp.write('{!s:<12} InCDec3 - w-component coherence parameters for general or IEC models [-, m^-1] (e.g. "10.0 0.3e-3" in quotes) (or "default")\n'.format( + self.turbsiminputs.InCDec3)) + tsinp.write('{!s:<12} CohExp - Coherence exponent for general model [-] (or "default")\n'.format( + self.turbsiminputs.CohExp)) + + # Coherent Turbulence Scaling Parameters + tsinp.write('\n') + tsinp.write('--------Coherent Turbulence Scaling Parameters-------------------\n') + tsinp.write('{!s:<12} CTEventPath - Name of the path where event data files are located\n'.format(self.turbsiminputs.CTEventPath)) + tsinp.write('{!s:<12} CTEventFile - Type of event files ("LES", "DNS", or "RANDOM")\n'.format(self.turbsiminputs.CTEventFile)) + tsinp.write('{!s:<12} Randomize - Randomize the disturbance scale and locations? (true/false)\n'.format(self.turbsiminputs.Randomize)) + tsinp.write('{!s:<12} DistScl - Disturbance scale [-] (ratio of event dataset height to rotor disk). (Ignored when Randomize = true.)\n'.format(self.turbsiminputs.DistScl)) + tsinp.write('{!s:<12} CTLy - Fractional location of tower centerline from right [-] (looking downwind) to left side of the dataset. (Ignored when Randomize = true.)\n'.format(self.turbsiminputs.CTLy)) + tsinp.write('{!s:<12} CTLz - Fractional location of hub height from the bottom of the dataset. [-] (Ignored when Randomize = true.)\n'.format(self.turbsiminputs.CTLz)) + tsinp.write('{!s:<12} CTStartTime - Minimum start time for coherent structures in RootName.cts [seconds]\n'.format(self.turbsiminputs.CTStartTime)) + + tsinp.close() + + +class Turbsim_wrapper(object): + def __init__(self): + self.turbsim_exe = 'turbsim' + self.turbsim_input = "" + self.run_dir = '.' + + def execute(self): + exec_string = [self.turbsim_exe, self.turbsim_input] + olddir = os.getcwd() + os.chdir(self.run_dir) + subprocess.call(exec_string) + os.chdir(olddir) + +def generate_wind_files(dlc_generator, FAST_namingOut, wind_directory, rotorD, hub_height, i_case): + + if dlc_generator.cases[i_case].turbulent_wind: + # Write out turbsim input file + turbsim_input_file_name = FAST_namingOut + '_' + dlc_generator.cases[i_case].IEC_WindType + ( + '_U%1.6f'%dlc_generator.cases[i_case].URef + + '_Seed%1.1f'%dlc_generator.cases[i_case].RandSeed1) + '.in' + turbsim_input_file_path = os.path.join(wind_directory, turbsim_input_file_name) + wind_file_name = turbsim_input_file_path[:-3] + '.bts' + + + runTS = True + if os.path.exists(wind_file_name) and os.path.exists(turbsim_input_file_path): + runTS = False + ts_reader = TurbsimReader() + ts_reader.read_input_file(turbsim_input_file_path) + for key, value in ts_reader.__dict__.items(): + if isinstance(value, float): + if abs(value - dlc_generator.cases[i_case].__dict__[key]) > 1.e-6: + runTS = True + break + else: + if str(value) != str(dlc_generator.cases[i_case].__dict__[key]): + runTS = True + break + + + if runTS: + ts_writer = TurbsimWriter(dlc_generator.cases[i_case]) + ts_writer.execute(turbsim_input_file_path) + + # Run TurbSim in sequence + wrapper = Turbsim_wrapper() + wrapper.run_dir = wind_directory + #run_dir = os.path.dirname( os.path.dirname( os.path.dirname( os.path.realpath(__file__) ) ) ) + os.sep + wrapper.turbsim_exe = shutil.which('turbsim') + wrapper.turbsim_input = turbsim_input_file_name + wrapper.execute() + + # Pass data to CaseGen_General to call OpenFAST + wind_file_type = 3 + + else: + if dlc_generator.cases[i_case].label != '12.1': + gusts = IEC_CoherentGusts() + gusts.D = rotorD + gusts.HH = hub_height + gusts.dt = dlc_generator.cases[i_case].TimeStep + gusts.TStart = dlc_generator.cases[i_case].transient_time + 10. # start gust 10 seconds after OpenFAST starts recording + gusts.TF = dlc_generator.cases[i_case].analysis_time + dlc_generator.cases[i_case].transient_time + gusts.Vert_Slope = dlc_generator.cases[i_case].VFlowAng + wind_file_name = gusts.execute(wind_directory, FAST_namingOut, dlc_generator.cases[i_case]) + wind_file_type = 2 + else: + wind_file_type = 1 + wind_file_name = 'unused' + + return wind_file_type, wind_file_name diff --git a/openfast_python/poetry.lock b/openfast_python/poetry.lock new file mode 100644 index 0000000000..2f75252d22 --- /dev/null +++ b/openfast_python/poetry.lock @@ -0,0 +1,3376 @@ +# This file is automatically @generated by Poetry 1.8.2 and should not be changed by hand. + +[[package]] +name = "anyio" +version = "4.3.0" +description = "High level compatibility layer for multiple asynchronous event loop implementations" +optional = true +python-versions = ">=3.8" +files = [ + {file = "anyio-4.3.0-py3-none-any.whl", hash = "sha256:048e05d0f6caeed70d731f3db756d35dcc1f35747c8c403364a8332c630441b8"}, + {file = "anyio-4.3.0.tar.gz", hash = "sha256:f75253795a87df48568485fd18cdd2a3fa5c4f7c5be8e5e36637733fce06fed6"}, +] + +[package.dependencies] +exceptiongroup = {version = ">=1.0.2", markers = "python_version < \"3.11\""} +idna = ">=2.8" +sniffio = ">=1.1" +typing-extensions = {version = ">=4.1", markers = "python_version < \"3.11\""} + +[package.extras] +doc = ["Sphinx (>=7)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"] +test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"] +trio = ["trio (>=0.23)"] + +[[package]] +name = "appnope" +version = "0.1.4" +description = "Disable App Nap on macOS >= 10.9" +optional = true +python-versions = ">=3.6" +files = [ + {file = "appnope-0.1.4-py2.py3-none-any.whl", hash = "sha256:502575ee11cd7a28c0205f379b525beefebab9d161b7c964670864014ed7213c"}, + {file = "appnope-0.1.4.tar.gz", hash = "sha256:1de3860566df9caf38f01f86f65e0e13e379af54f9e4bee1e66b48f2efffd1ee"}, +] + +[[package]] +name = "argon2-cffi" +version = "23.1.0" +description = "Argon2 for Python" +optional = true +python-versions = ">=3.7" +files = [ + {file = "argon2_cffi-23.1.0-py3-none-any.whl", hash = "sha256:c670642b78ba29641818ab2e68bd4e6a78ba53b7eff7b4c3815ae16abf91c7ea"}, + {file = "argon2_cffi-23.1.0.tar.gz", hash = "sha256:879c3e79a2729ce768ebb7d36d4609e3a78a4ca2ec3a9f12286ca057e3d0db08"}, +] + +[package.dependencies] +argon2-cffi-bindings = "*" + +[package.extras] +dev = ["argon2-cffi[tests,typing]", "tox (>4)"] +docs = ["furo", "myst-parser", "sphinx", "sphinx-copybutton", "sphinx-notfound-page"] +tests = ["hypothesis", "pytest"] +typing = ["mypy"] + +[[package]] +name = "argon2-cffi-bindings" +version = "21.2.0" +description = "Low-level CFFI bindings for Argon2" +optional = true +python-versions = ">=3.6" +files = [ + {file = "argon2-cffi-bindings-21.2.0.tar.gz", hash = "sha256:bb89ceffa6c791807d1305ceb77dbfacc5aa499891d2c55661c6459651fc39e3"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:ccb949252cb2ab3a08c02024acb77cfb179492d5701c7cbdbfd776124d4d2367"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9524464572e12979364b7d600abf96181d3541da11e23ddf565a32e70bd4dc0d"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b746dba803a79238e925d9046a63aa26bf86ab2a2fe74ce6b009a1c3f5c8f2ae"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:58ed19212051f49a523abb1dbe954337dc82d947fb6e5a0da60f7c8471a8476c"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:bd46088725ef7f58b5a1ef7ca06647ebaf0eb4baff7d1d0d177c6cc8744abd86"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_i686.whl", hash = "sha256:8cd69c07dd875537a824deec19f978e0f2078fdda07fd5c42ac29668dda5f40f"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:f1152ac548bd5b8bcecfb0b0371f082037e47128653df2e8ba6e914d384f3c3e"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-win32.whl", hash = "sha256:603ca0aba86b1349b147cab91ae970c63118a0f30444d4bc80355937c950c082"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-win_amd64.whl", hash = "sha256:b2ef1c30440dbbcba7a5dc3e319408b59676e2e039e2ae11a8775ecf482b192f"}, + {file = "argon2_cffi_bindings-21.2.0-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:e415e3f62c8d124ee16018e491a009937f8cf7ebf5eb430ffc5de21b900dad93"}, + {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:3e385d1c39c520c08b53d63300c3ecc28622f076f4c2b0e6d7e796e9f6502194"}, + {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c3e3cc67fdb7d82c4718f19b4e7a87123caf8a93fde7e23cf66ac0337d3cb3f"}, + {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6a22ad9800121b71099d0fb0a65323810a15f2e292f2ba450810a7316e128ee5"}, + {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f9f8b450ed0547e3d473fdc8612083fd08dd2120d6ac8f73828df9b7d45bb351"}, + {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:93f9bf70084f97245ba10ee36575f0c3f1e7d7724d67d8e5b08e61787c320ed7"}, + {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:3b9ef65804859d335dc6b31582cad2c5166f0c3e7975f324d9ffaa34ee7e6583"}, + {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d4966ef5848d820776f5f562a7d45fdd70c2f330c961d0d745b784034bd9f48d"}, + {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:20ef543a89dee4db46a1a6e206cd015360e5a75822f76df533845c3cbaf72670"}, + {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ed2937d286e2ad0cc79a7087d3c272832865f779430e0cc2b4f3718d3159b0cb"}, + {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:5e00316dabdaea0b2dd82d141cc66889ced0cdcbfa599e8b471cf22c620c329a"}, +] + +[package.dependencies] +cffi = ">=1.0.1" + +[package.extras] +dev = ["cogapp", "pre-commit", "pytest", "wheel"] +tests = ["pytest"] + +[[package]] +name = "arrow" +version = "1.3.0" +description = "Better dates & times for Python" +optional = true +python-versions = ">=3.8" +files = [ + {file = "arrow-1.3.0-py3-none-any.whl", hash = "sha256:c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80"}, + {file = "arrow-1.3.0.tar.gz", hash = "sha256:d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85"}, +] + +[package.dependencies] +python-dateutil = ">=2.7.0" +types-python-dateutil = ">=2.8.10" + +[package.extras] +doc = ["doc8", "sphinx (>=7.0.0)", "sphinx-autobuild", "sphinx-autodoc-typehints", "sphinx_rtd_theme (>=1.3.0)"] +test = ["dateparser (==1.*)", "pre-commit", "pytest", "pytest-cov", "pytest-mock", "pytz (==2021.1)", "simplejson (==3.*)"] + +[[package]] +name = "asttokens" +version = "2.4.1" +description = "Annotate AST trees with source code positions" +optional = true +python-versions = "*" +files = [ + {file = "asttokens-2.4.1-py2.py3-none-any.whl", hash = "sha256:051ed49c3dcae8913ea7cd08e46a606dba30b79993209636c4875bc1d637bc24"}, + {file = "asttokens-2.4.1.tar.gz", hash = "sha256:b03869718ba9a6eb027e134bfdf69f38a236d681c83c160d510768af11254ba0"}, +] + +[package.dependencies] +six = ">=1.12.0" + +[package.extras] +astroid = ["astroid (>=1,<2)", "astroid (>=2,<4)"] +test = ["astroid (>=1,<2)", "astroid (>=2,<4)", "pytest"] + +[[package]] +name = "async-lru" +version = "2.0.4" +description = "Simple LRU cache for asyncio" +optional = true +python-versions = ">=3.8" +files = [ + {file = "async-lru-2.0.4.tar.gz", hash = "sha256:b8a59a5df60805ff63220b2a0c5b5393da5521b113cd5465a44eb037d81a5627"}, + {file = "async_lru-2.0.4-py3-none-any.whl", hash = "sha256:ff02944ce3c288c5be660c42dbcca0742b32c3b279d6dceda655190240b99224"}, +] + +[package.dependencies] +typing-extensions = {version = ">=4.0.0", markers = "python_version < \"3.11\""} + +[[package]] +name = "attrs" +version = "23.2.0" +description = "Classes Without Boilerplate" +optional = true +python-versions = ">=3.7" +files = [ + {file = "attrs-23.2.0-py3-none-any.whl", hash = "sha256:99b87a485a5820b23b879f04c2305b44b951b502fd64be915879d77a7e8fc6f1"}, + {file = "attrs-23.2.0.tar.gz", hash = "sha256:935dc3b529c262f6cf76e50877d35a4bd3c1de194fd41f47a2b7ae8f19971f30"}, +] + +[package.extras] +cov = ["attrs[tests]", "coverage[toml] (>=5.3)"] +dev = ["attrs[tests]", "pre-commit"] +docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope-interface"] +tests = ["attrs[tests-no-zope]", "zope-interface"] +tests-mypy = ["mypy (>=1.6)", "pytest-mypy-plugins"] +tests-no-zope = ["attrs[tests-mypy]", "cloudpickle", "hypothesis", "pympler", "pytest (>=4.3.0)", "pytest-xdist[psutil]"] + +[[package]] +name = "babel" +version = "2.15.0" +description = "Internationalization utilities" +optional = true +python-versions = ">=3.8" +files = [ + {file = "Babel-2.15.0-py3-none-any.whl", hash = "sha256:08706bdad8d0a3413266ab61bd6c34d0c28d6e1e7badf40a2cebe67644e2e1fb"}, + {file = "babel-2.15.0.tar.gz", hash = "sha256:8daf0e265d05768bc6c7a314cf1321e9a123afc328cc635c18622a2f30a04413"}, +] + +[package.extras] +dev = ["freezegun (>=1.0,<2.0)", "pytest (>=6.0)", "pytest-cov"] + +[[package]] +name = "beautifulsoup4" +version = "4.12.3" +description = "Screen-scraping library" +optional = true +python-versions = ">=3.6.0" +files = [ + {file = "beautifulsoup4-4.12.3-py3-none-any.whl", hash = "sha256:b80878c9f40111313e55da8ba20bdba06d8fa3969fc68304167741bbf9e082ed"}, + {file = "beautifulsoup4-4.12.3.tar.gz", hash = "sha256:74e3d1928edc070d21748185c46e3fb33490f22f52a3addee9aee0f4f7781051"}, +] + +[package.dependencies] +soupsieve = ">1.2" + +[package.extras] +cchardet = ["cchardet"] +chardet = ["chardet"] +charset-normalizer = ["charset-normalizer"] +html5lib = ["html5lib"] +lxml = ["lxml"] + +[[package]] +name = "bleach" +version = "6.1.0" +description = "An easy safelist-based HTML-sanitizing tool." +optional = true +python-versions = ">=3.8" +files = [ + {file = "bleach-6.1.0-py3-none-any.whl", hash = "sha256:3225f354cfc436b9789c66c4ee030194bee0568fbf9cbdad3bc8b5c26c5f12b6"}, + {file = "bleach-6.1.0.tar.gz", hash = "sha256:0a31f1837963c41d46bbf1331b8778e1308ea0791db03cc4e7357b97cf42a8fe"}, +] + +[package.dependencies] +six = ">=1.9.0" +webencodings = "*" + +[package.extras] +css = ["tinycss2 (>=1.1.0,<1.3)"] + +[[package]] +name = "certifi" +version = "2024.2.2" +description = "Python package for providing Mozilla's CA Bundle." +optional = true +python-versions = ">=3.6" +files = [ + {file = "certifi-2024.2.2-py3-none-any.whl", hash = "sha256:dc383c07b76109f368f6106eee2b593b04a011ea4d55f652c6ca24a754d1cdd1"}, + {file = "certifi-2024.2.2.tar.gz", hash = "sha256:0569859f95fc761b18b45ef421b1290a0f65f147e92a1e5eb3e635f9a5e4e66f"}, +] + +[[package]] +name = "cffi" +version = "1.16.0" +description = "Foreign Function Interface for Python calling C code." +optional = true +python-versions = ">=3.8" +files = [ + {file = "cffi-1.16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6b3d6606d369fc1da4fd8c357d026317fbb9c9b75d36dc16e90e84c26854b088"}, + {file = "cffi-1.16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ac0f5edd2360eea2f1daa9e26a41db02dd4b0451b48f7c318e217ee092a213e9"}, + {file = "cffi-1.16.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7e61e3e4fa664a8588aa25c883eab612a188c725755afff6289454d6362b9673"}, + {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a72e8961a86d19bdb45851d8f1f08b041ea37d2bd8d4fd19903bc3083d80c896"}, + {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5b50bf3f55561dac5438f8e70bfcdfd74543fd60df5fa5f62d94e5867deca684"}, + {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7651c50c8c5ef7bdb41108b7b8c5a83013bfaa8a935590c5d74627c047a583c7"}, + {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4108df7fe9b707191e55f33efbcb2d81928e10cea45527879a4749cbe472614"}, + {file = "cffi-1.16.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:32c68ef735dbe5857c810328cb2481e24722a59a2003018885514d4c09af9743"}, + {file = "cffi-1.16.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:673739cb539f8cdaa07d92d02efa93c9ccf87e345b9a0b556e3ecc666718468d"}, + {file = "cffi-1.16.0-cp310-cp310-win32.whl", hash = "sha256:9f90389693731ff1f659e55c7d1640e2ec43ff725cc61b04b2f9c6d8d017df6a"}, + {file = "cffi-1.16.0-cp310-cp310-win_amd64.whl", hash = "sha256:e6024675e67af929088fda399b2094574609396b1decb609c55fa58b028a32a1"}, + {file = "cffi-1.16.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b84834d0cf97e7d27dd5b7f3aca7b6e9263c56308ab9dc8aae9784abb774d404"}, + {file = "cffi-1.16.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1b8ebc27c014c59692bb2664c7d13ce7a6e9a629be20e54e7271fa696ff2b417"}, + {file = "cffi-1.16.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ee07e47c12890ef248766a6e55bd38ebfb2bb8edd4142d56db91b21ea68b7627"}, + {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8a9d3ebe49f084ad71f9269834ceccbf398253c9fac910c4fd7053ff1386936"}, + {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e70f54f1796669ef691ca07d046cd81a29cb4deb1e5f942003f401c0c4a2695d"}, + {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5bf44d66cdf9e893637896c7faa22298baebcd18d1ddb6d2626a6e39793a1d56"}, + {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b78010e7b97fef4bee1e896df8a4bbb6712b7f05b7ef630f9d1da00f6444d2e"}, + {file = "cffi-1.16.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c6a164aa47843fb1b01e941d385aab7215563bb8816d80ff3a363a9f8448a8dc"}, + {file = "cffi-1.16.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e09f3ff613345df5e8c3667da1d918f9149bd623cd9070c983c013792a9a62eb"}, + {file = "cffi-1.16.0-cp311-cp311-win32.whl", hash = "sha256:2c56b361916f390cd758a57f2e16233eb4f64bcbeee88a4881ea90fca14dc6ab"}, + {file = "cffi-1.16.0-cp311-cp311-win_amd64.whl", hash = "sha256:db8e577c19c0fda0beb7e0d4e09e0ba74b1e4c092e0e40bfa12fe05b6f6d75ba"}, + {file = "cffi-1.16.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:fa3a0128b152627161ce47201262d3140edb5a5c3da88d73a1b790a959126956"}, + {file = "cffi-1.16.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:68e7c44931cc171c54ccb702482e9fc723192e88d25a0e133edd7aff8fcd1f6e"}, + {file = "cffi-1.16.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:abd808f9c129ba2beda4cfc53bde801e5bcf9d6e0f22f095e45327c038bfe68e"}, + {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88e2b3c14bdb32e440be531ade29d3c50a1a59cd4e51b1dd8b0865c54ea5d2e2"}, + {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fcc8eb6d5902bb1cf6dc4f187ee3ea80a1eba0a89aba40a5cb20a5087d961357"}, + {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b7be2d771cdba2942e13215c4e340bfd76398e9227ad10402a8767ab1865d2e6"}, + {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e715596e683d2ce000574bae5d07bd522c781a822866c20495e52520564f0969"}, + {file = "cffi-1.16.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2d92b25dbf6cae33f65005baf472d2c245c050b1ce709cc4588cdcdd5495b520"}, + {file = "cffi-1.16.0-cp312-cp312-win32.whl", hash = "sha256:b2ca4e77f9f47c55c194982e10f058db063937845bb2b7a86c84a6cfe0aefa8b"}, + {file = "cffi-1.16.0-cp312-cp312-win_amd64.whl", hash = "sha256:68678abf380b42ce21a5f2abde8efee05c114c2fdb2e9eef2efdb0257fba1235"}, + {file = "cffi-1.16.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0c9ef6ff37e974b73c25eecc13952c55bceed9112be2d9d938ded8e856138bcc"}, + {file = "cffi-1.16.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a09582f178759ee8128d9270cd1344154fd473bb77d94ce0aeb2a93ebf0feaf0"}, + {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e760191dd42581e023a68b758769e2da259b5d52e3103c6060ddc02c9edb8d7b"}, + {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:80876338e19c951fdfed6198e70bc88f1c9758b94578d5a7c4c91a87af3cf31c"}, + {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a6a14b17d7e17fa0d207ac08642c8820f84f25ce17a442fd15e27ea18d67c59b"}, + {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6602bc8dc6f3a9e02b6c22c4fc1e47aa50f8f8e6d3f78a5e16ac33ef5fefa324"}, + {file = "cffi-1.16.0-cp38-cp38-win32.whl", hash = "sha256:131fd094d1065b19540c3d72594260f118b231090295d8c34e19a7bbcf2e860a"}, + {file = "cffi-1.16.0-cp38-cp38-win_amd64.whl", hash = "sha256:31d13b0f99e0836b7ff893d37af07366ebc90b678b6664c955b54561fc36ef36"}, + {file = "cffi-1.16.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:582215a0e9adbe0e379761260553ba11c58943e4bbe9c36430c4ca6ac74b15ed"}, + {file = "cffi-1.16.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b29ebffcf550f9da55bec9e02ad430c992a87e5f512cd63388abb76f1036d8d2"}, + {file = "cffi-1.16.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dc9b18bf40cc75f66f40a7379f6a9513244fe33c0e8aa72e2d56b0196a7ef872"}, + {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cb4a35b3642fc5c005a6755a5d17c6c8b6bcb6981baf81cea8bfbc8903e8ba8"}, + {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b86851a328eedc692acf81fb05444bdf1891747c25af7529e39ddafaf68a4f3f"}, + {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c0f31130ebc2d37cdd8e44605fb5fa7ad59049298b3f745c74fa74c62fbfcfc4"}, + {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f8e709127c6c77446a8c0a8c8bf3c8ee706a06cd44b1e827c3e6a2ee6b8c098"}, + {file = "cffi-1.16.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:748dcd1e3d3d7cd5443ef03ce8685043294ad6bd7c02a38d1bd367cfd968e000"}, + {file = "cffi-1.16.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8895613bcc094d4a1b2dbe179d88d7fb4a15cee43c052e8885783fac397d91fe"}, + {file = "cffi-1.16.0-cp39-cp39-win32.whl", hash = "sha256:ed86a35631f7bfbb28e108dd96773b9d5a6ce4811cf6ea468bb6a359b256b1e4"}, + {file = "cffi-1.16.0-cp39-cp39-win_amd64.whl", hash = "sha256:3686dffb02459559c74dd3d81748269ffb0eb027c39a6fc99502de37d501faa8"}, + {file = "cffi-1.16.0.tar.gz", hash = "sha256:bcb3ef43e58665bbda2fb198698fcae6776483e0c4a631aa5647806c25e02cc0"}, +] + +[package.dependencies] +pycparser = "*" + +[[package]] +name = "charset-normalizer" +version = "3.3.2" +description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." +optional = true +python-versions = ">=3.7.0" +files = [ + {file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-win32.whl", hash = "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-win32.whl", hash = "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-win32.whl", hash = "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-win32.whl", hash = "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-win32.whl", hash = "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-win32.whl", hash = "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d"}, + {file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"}, +] + +[[package]] +name = "colorama" +version = "0.4.6" +description = "Cross-platform colored terminal text." +optional = true +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +files = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] + +[[package]] +name = "comm" +version = "0.2.2" +description = "Jupyter Python Comm implementation, for usage in ipykernel, xeus-python etc." +optional = true +python-versions = ">=3.8" +files = [ + {file = "comm-0.2.2-py3-none-any.whl", hash = "sha256:e6fb86cb70ff661ee8c9c14e7d36d6de3b4066f1441be4063df9c5009f0a64d3"}, + {file = "comm-0.2.2.tar.gz", hash = "sha256:3fd7a84065306e07bea1773df6eb8282de51ba82f77c72f9c85716ab11fe980e"}, +] + +[package.dependencies] +traitlets = ">=4" + +[package.extras] +test = ["pytest"] + +[[package]] +name = "contourpy" +version = "1.2.1" +description = "Python library for calculating contours of 2D quadrilateral grids" +optional = true +python-versions = ">=3.9" +files = [ + {file = "contourpy-1.2.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bd7c23df857d488f418439686d3b10ae2fbf9bc256cd045b37a8c16575ea1040"}, + {file = "contourpy-1.2.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5b9eb0ca724a241683c9685a484da9d35c872fd42756574a7cfbf58af26677fd"}, + {file = "contourpy-1.2.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4c75507d0a55378240f781599c30e7776674dbaf883a46d1c90f37e563453480"}, + {file = "contourpy-1.2.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:11959f0ce4a6f7b76ec578576a0b61a28bdc0696194b6347ba3f1c53827178b9"}, + {file = "contourpy-1.2.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eb3315a8a236ee19b6df481fc5f997436e8ade24a9f03dfdc6bd490fea20c6da"}, + {file = "contourpy-1.2.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:39f3ecaf76cd98e802f094e0d4fbc6dc9c45a8d0c4d185f0f6c2234e14e5f75b"}, + {file = "contourpy-1.2.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:94b34f32646ca0414237168d68a9157cb3889f06b096612afdd296003fdd32fd"}, + {file = "contourpy-1.2.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:457499c79fa84593f22454bbd27670227874cd2ff5d6c84e60575c8b50a69619"}, + {file = "contourpy-1.2.1-cp310-cp310-win32.whl", hash = "sha256:ac58bdee53cbeba2ecad824fa8159493f0bf3b8ea4e93feb06c9a465d6c87da8"}, + {file = "contourpy-1.2.1-cp310-cp310-win_amd64.whl", hash = "sha256:9cffe0f850e89d7c0012a1fb8730f75edd4320a0a731ed0c183904fe6ecfc3a9"}, + {file = "contourpy-1.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6022cecf8f44e36af10bd9118ca71f371078b4c168b6e0fab43d4a889985dbb5"}, + {file = "contourpy-1.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ef5adb9a3b1d0c645ff694f9bca7702ec2c70f4d734f9922ea34de02294fdf72"}, + {file = "contourpy-1.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6150ffa5c767bc6332df27157d95442c379b7dce3a38dff89c0f39b63275696f"}, + {file = "contourpy-1.2.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4c863140fafc615c14a4bf4efd0f4425c02230eb8ef02784c9a156461e62c965"}, + {file = "contourpy-1.2.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:00e5388f71c1a0610e6fe56b5c44ab7ba14165cdd6d695429c5cd94021e390b2"}, + {file = "contourpy-1.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d4492d82b3bc7fbb7e3610747b159869468079fe149ec5c4d771fa1f614a14df"}, + {file = "contourpy-1.2.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:49e70d111fee47284d9dd867c9bb9a7058a3c617274900780c43e38d90fe1205"}, + {file = "contourpy-1.2.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:b59c0ffceff8d4d3996a45f2bb6f4c207f94684a96bf3d9728dbb77428dd8cb8"}, + {file = "contourpy-1.2.1-cp311-cp311-win32.whl", hash = "sha256:7b4182299f251060996af5249c286bae9361fa8c6a9cda5efc29fe8bfd6062ec"}, + {file = "contourpy-1.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:2855c8b0b55958265e8b5888d6a615ba02883b225f2227461aa9127c578a4922"}, + {file = "contourpy-1.2.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:62828cada4a2b850dbef89c81f5a33741898b305db244904de418cc957ff05dc"}, + {file = "contourpy-1.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:309be79c0a354afff9ff7da4aaed7c3257e77edf6c1b448a779329431ee79d7e"}, + {file = "contourpy-1.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e785e0f2ef0d567099b9ff92cbfb958d71c2d5b9259981cd9bee81bd194c9a4"}, + {file = "contourpy-1.2.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1cac0a8f71a041aa587410424ad46dfa6a11f6149ceb219ce7dd48f6b02b87a7"}, + {file = "contourpy-1.2.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:af3f4485884750dddd9c25cb7e3915d83c2db92488b38ccb77dd594eac84c4a0"}, + {file = "contourpy-1.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ce6889abac9a42afd07a562c2d6d4b2b7134f83f18571d859b25624a331c90b"}, + {file = "contourpy-1.2.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:a1eea9aecf761c661d096d39ed9026574de8adb2ae1c5bd7b33558af884fb2ce"}, + {file = "contourpy-1.2.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:187fa1d4c6acc06adb0fae5544c59898ad781409e61a926ac7e84b8f276dcef4"}, + {file = "contourpy-1.2.1-cp312-cp312-win32.whl", hash = "sha256:c2528d60e398c7c4c799d56f907664673a807635b857df18f7ae64d3e6ce2d9f"}, + {file = "contourpy-1.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:1a07fc092a4088ee952ddae19a2b2a85757b923217b7eed584fdf25f53a6e7ce"}, + {file = "contourpy-1.2.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bb6834cbd983b19f06908b45bfc2dad6ac9479ae04abe923a275b5f48f1a186b"}, + {file = "contourpy-1.2.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1d59e739ab0e3520e62a26c60707cc3ab0365d2f8fecea74bfe4de72dc56388f"}, + {file = "contourpy-1.2.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bd3db01f59fdcbce5b22afad19e390260d6d0222f35a1023d9adc5690a889364"}, + {file = "contourpy-1.2.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a12a813949e5066148712a0626895c26b2578874e4cc63160bb007e6df3436fe"}, + {file = "contourpy-1.2.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fe0ccca550bb8e5abc22f530ec0466136379c01321fd94f30a22231e8a48d985"}, + {file = "contourpy-1.2.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e1d59258c3c67c865435d8fbeb35f8c59b8bef3d6f46c1f29f6123556af28445"}, + {file = "contourpy-1.2.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f32c38afb74bd98ce26de7cc74a67b40afb7b05aae7b42924ea990d51e4dac02"}, + {file = "contourpy-1.2.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d31a63bc6e6d87f77d71e1abbd7387ab817a66733734883d1fc0021ed9bfa083"}, + {file = "contourpy-1.2.1-cp39-cp39-win32.whl", hash = "sha256:ddcb8581510311e13421b1f544403c16e901c4e8f09083c881fab2be80ee31ba"}, + {file = "contourpy-1.2.1-cp39-cp39-win_amd64.whl", hash = "sha256:10a37ae557aabf2509c79715cd20b62e4c7c28b8cd62dd7d99e5ed3ce28c3fd9"}, + {file = "contourpy-1.2.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a31f94983fecbac95e58388210427d68cd30fe8a36927980fab9c20062645609"}, + {file = "contourpy-1.2.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ef2b055471c0eb466033760a521efb9d8a32b99ab907fc8358481a1dd29e3bd3"}, + {file = "contourpy-1.2.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:b33d2bc4f69caedcd0a275329eb2198f560b325605810895627be5d4b876bf7f"}, + {file = "contourpy-1.2.1.tar.gz", hash = "sha256:4d8908b3bee1c889e547867ca4cdc54e5ab6be6d3e078556814a22457f49423c"}, +] + +[package.dependencies] +numpy = ">=1.20" + +[package.extras] +bokeh = ["bokeh", "selenium"] +docs = ["furo", "sphinx (>=7.2)", "sphinx-copybutton"] +mypy = ["contourpy[bokeh,docs]", "docutils-stubs", "mypy (==1.8.0)", "types-Pillow"] +test = ["Pillow", "contourpy[test-no-images]", "matplotlib"] +test-no-images = ["pytest", "pytest-cov", "pytest-xdist", "wurlitzer"] + +[[package]] +name = "control" +version = "0.9.4" +description = "Python Control Systems Library" +optional = true +python-versions = ">=3.8" +files = [ + {file = "control-0.9.4-py3-none-any.whl", hash = "sha256:ab68980abd8d35ae5015ffa090865cbbd926deea7e66d0b9a41cfd12577e63ff"}, + {file = "control-0.9.4.tar.gz", hash = "sha256:0fa57d2216b7ac4e9339c09eab6827660318a641779335864feee940bd19c9ce"}, +] + +[package.dependencies] +matplotlib = "*" +numpy = "*" +scipy = ">=1.3" + +[package.extras] +cvxopt = ["cvxopt (>=1.2.0)"] +slycot = ["slycot (>=0.4.0)"] +test = ["pytest", "pytest-timeout"] + +[[package]] +name = "cycler" +version = "0.12.1" +description = "Composable style cycles" +optional = true +python-versions = ">=3.8" +files = [ + {file = "cycler-0.12.1-py3-none-any.whl", hash = "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30"}, + {file = "cycler-0.12.1.tar.gz", hash = "sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c"}, +] + +[package.extras] +docs = ["ipython", "matplotlib", "numpydoc", "sphinx"] +tests = ["pytest", "pytest-cov", "pytest-xdist"] + +[[package]] +name = "dearpygui" +version = "1.11.1" +description = "DearPyGui: A simple Python GUI Toolkit" +optional = true +python-versions = ">=3.7" +files = [ + {file = "dearpygui-1.11.1-cp310-cp310-macosx_10_6_x86_64.whl", hash = "sha256:b668f28aab63d8ad0b2768add4e689bedb7480e8c3390edcce7a0f5d296fd61f"}, + {file = "dearpygui-1.11.1-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:39d099b1ca97fd7d36934a5187fc4cd868d4772e504290a70fc95eda03c5125d"}, + {file = "dearpygui-1.11.1-cp310-cp310-manylinux1_x86_64.whl", hash = "sha256:3ba12334d993b653df2d07fe34c93c4ec65e54c022066ba245cd596a18b43a68"}, + {file = "dearpygui-1.11.1-cp310-cp310-win_amd64.whl", hash = "sha256:6cf4c44db1f016ff3eab367f7bde7f169bad5f2f90b974c202808112a69a2b15"}, + {file = "dearpygui-1.11.1-cp311-cp311-macosx_10_6_x86_64.whl", hash = "sha256:cc15cd13c1aeae2847ed9c4b2201169add3efdedf564eb706f5b5896ddaa5d8a"}, + {file = "dearpygui-1.11.1-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:9eb7d581863d39543b213252041ed25856acbfa58c57291e6acb6ccbf0c2727b"}, + {file = "dearpygui-1.11.1-cp311-cp311-manylinux1_x86_64.whl", hash = "sha256:564ff3af657f7becd059b6611e162cc9cd8148befaf8aadb10e4fb76d57df3ef"}, + {file = "dearpygui-1.11.1-cp311-cp311-win_amd64.whl", hash = "sha256:ac6e9bde61dcb3cc253da59e70fe2b743d3c3b5791d415eaa8d307f4517048ca"}, + {file = "dearpygui-1.11.1-cp312-cp312-macosx_10_6_x86_64.whl", hash = "sha256:ccf576117ed2159cd66b419458d060923c9dcebe7fe57c65b4f4c4889287845d"}, + {file = "dearpygui-1.11.1-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:1d632e1acdaa986a8c32b57112b84685b92d9a41f18580e14d463d7ed7a52673"}, + {file = "dearpygui-1.11.1-cp312-cp312-manylinux1_x86_64.whl", hash = "sha256:ca4f7ba667f64ee682dfcb3399d9d43df6821b2d962b96b4fa4535de5776f538"}, + {file = "dearpygui-1.11.1-cp312-cp312-win_amd64.whl", hash = "sha256:8ce9881a629de72e05ca8b1ce7cefcdd77b624eb7eba6f7d6629848d84a797f6"}, + {file = "dearpygui-1.11.1-cp38-cp38-macosx_10_6_x86_64.whl", hash = "sha256:39011ccb3a3ecfe3ebccfd8c4211c2c1446abd2865cbe4ccb67dc50a7a812bfb"}, + {file = "dearpygui-1.11.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:e1dde63d20ac062530debee001ad649190a7e09622762601454c4191799f13b8"}, + {file = "dearpygui-1.11.1-cp38-cp38-win_amd64.whl", hash = "sha256:23ce7ce8e5ba24d31bd6468cc43b56f8f257ace4dce3bc5fe449c546c340893a"}, + {file = "dearpygui-1.11.1-cp39-cp39-macosx_10_6_x86_64.whl", hash = "sha256:d22285f9a5f1377d87effd1f27020eec3ae0386f7c15a4893809909b82c62b1b"}, + {file = "dearpygui-1.11.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:f632bd94772e00313d0956bb9f9822c3ebcb7aa93f135f09e2fa187f3b06cea8"}, + {file = "dearpygui-1.11.1-cp39-cp39-win_amd64.whl", hash = "sha256:0c7c4849bc674e825750be69ee480450c3589c7d159955032776aaef5e7fda58"}, +] + +[[package]] +name = "debugpy" +version = "1.8.1" +description = "An implementation of the Debug Adapter Protocol for Python" +optional = true +python-versions = ">=3.8" +files = [ + {file = "debugpy-1.8.1-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:3bda0f1e943d386cc7a0e71bfa59f4137909e2ed947fb3946c506e113000f741"}, + {file = "debugpy-1.8.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dda73bf69ea479c8577a0448f8c707691152e6c4de7f0c4dec5a4bc11dee516e"}, + {file = "debugpy-1.8.1-cp310-cp310-win32.whl", hash = "sha256:3a79c6f62adef994b2dbe9fc2cc9cc3864a23575b6e387339ab739873bea53d0"}, + {file = "debugpy-1.8.1-cp310-cp310-win_amd64.whl", hash = "sha256:7eb7bd2b56ea3bedb009616d9e2f64aab8fc7000d481faec3cd26c98a964bcdd"}, + {file = "debugpy-1.8.1-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:016a9fcfc2c6b57f939673c874310d8581d51a0fe0858e7fac4e240c5eb743cb"}, + {file = "debugpy-1.8.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd97ed11a4c7f6d042d320ce03d83b20c3fb40da892f994bc041bbc415d7a099"}, + {file = "debugpy-1.8.1-cp311-cp311-win32.whl", hash = "sha256:0de56aba8249c28a300bdb0672a9b94785074eb82eb672db66c8144fff673146"}, + {file = "debugpy-1.8.1-cp311-cp311-win_amd64.whl", hash = "sha256:1a9fe0829c2b854757b4fd0a338d93bc17249a3bf69ecf765c61d4c522bb92a8"}, + {file = "debugpy-1.8.1-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:3ebb70ba1a6524d19fa7bb122f44b74170c447d5746a503e36adc244a20ac539"}, + {file = "debugpy-1.8.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a2e658a9630f27534e63922ebf655a6ab60c370f4d2fc5c02a5b19baf4410ace"}, + {file = "debugpy-1.8.1-cp312-cp312-win32.whl", hash = "sha256:caad2846e21188797a1f17fc09c31b84c7c3c23baf2516fed5b40b378515bbf0"}, + {file = "debugpy-1.8.1-cp312-cp312-win_amd64.whl", hash = "sha256:edcc9f58ec0fd121a25bc950d4578df47428d72e1a0d66c07403b04eb93bcf98"}, + {file = "debugpy-1.8.1-cp38-cp38-macosx_11_0_x86_64.whl", hash = "sha256:7a3afa222f6fd3d9dfecd52729bc2e12c93e22a7491405a0ecbf9e1d32d45b39"}, + {file = "debugpy-1.8.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d915a18f0597ef685e88bb35e5d7ab968964b7befefe1aaea1eb5b2640b586c7"}, + {file = "debugpy-1.8.1-cp38-cp38-win32.whl", hash = "sha256:92116039b5500633cc8d44ecc187abe2dfa9b90f7a82bbf81d079fcdd506bae9"}, + {file = "debugpy-1.8.1-cp38-cp38-win_amd64.whl", hash = "sha256:e38beb7992b5afd9d5244e96ad5fa9135e94993b0c551ceebf3fe1a5d9beb234"}, + {file = "debugpy-1.8.1-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:bfb20cb57486c8e4793d41996652e5a6a885b4d9175dd369045dad59eaacea42"}, + {file = "debugpy-1.8.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:efd3fdd3f67a7e576dd869c184c5dd71d9aaa36ded271939da352880c012e703"}, + {file = "debugpy-1.8.1-cp39-cp39-win32.whl", hash = "sha256:58911e8521ca0c785ac7a0539f1e77e0ce2df753f786188f382229278b4cdf23"}, + {file = "debugpy-1.8.1-cp39-cp39-win_amd64.whl", hash = "sha256:6df9aa9599eb05ca179fb0b810282255202a66835c6efb1d112d21ecb830ddd3"}, + {file = "debugpy-1.8.1-py2.py3-none-any.whl", hash = "sha256:28acbe2241222b87e255260c76741e1fbf04fdc3b6d094fcf57b6c6f75ce1242"}, + {file = "debugpy-1.8.1.zip", hash = "sha256:f696d6be15be87aef621917585f9bb94b1dc9e8aced570db1b8a6fc14e8f9b42"}, +] + +[[package]] +name = "decorator" +version = "5.1.1" +description = "Decorators for Humans" +optional = true +python-versions = ">=3.5" +files = [ + {file = "decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"}, + {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"}, +] + +[[package]] +name = "defusedxml" +version = "0.7.1" +description = "XML bomb protection for Python stdlib modules" +optional = true +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61"}, + {file = "defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69"}, +] + +[[package]] +name = "docopt" +version = "0.6.2" +description = "Pythonic argument parser, that will make you smile" +optional = true +python-versions = "*" +files = [ + {file = "docopt-0.6.2.tar.gz", hash = "sha256:49b3a825280bd66b3aa83585ef59c4a8c82f2c8a522dbe754a8bc8d08c85c491"}, +] + +[[package]] +name = "et-xmlfile" +version = "1.1.0" +description = "An implementation of lxml.xmlfile for the standard library" +optional = true +python-versions = ">=3.6" +files = [ + {file = "et_xmlfile-1.1.0-py3-none-any.whl", hash = "sha256:a2ba85d1d6a74ef63837eed693bcb89c3f752169b0e3e7ae5b16ca5e1b3deada"}, + {file = "et_xmlfile-1.1.0.tar.gz", hash = "sha256:8eb9e2bc2f8c97e37a2dc85a09ecdcdec9d8a396530a6d5a33b30b9a92da0c5c"}, +] + +[[package]] +name = "exceptiongroup" +version = "1.2.1" +description = "Backport of PEP 654 (exception groups)" +optional = true +python-versions = ">=3.7" +files = [ + {file = "exceptiongroup-1.2.1-py3-none-any.whl", hash = "sha256:5258b9ed329c5bbdd31a309f53cbfb0b155341807f6ff7606a1e801a891b29ad"}, + {file = "exceptiongroup-1.2.1.tar.gz", hash = "sha256:a4785e48b045528f5bfe627b6ad554ff32def154f42372786903b7abcfe1aa16"}, +] + +[package.extras] +test = ["pytest (>=6)"] + +[[package]] +name = "executing" +version = "2.0.1" +description = "Get the currently executing AST node of a frame, and other information" +optional = true +python-versions = ">=3.5" +files = [ + {file = "executing-2.0.1-py2.py3-none-any.whl", hash = "sha256:eac49ca94516ccc753f9fb5ce82603156e590b27525a8bc32cce8ae302eb61bc"}, + {file = "executing-2.0.1.tar.gz", hash = "sha256:35afe2ce3affba8ee97f2d69927fa823b08b472b7b994e36a52a964b93d16147"}, +] + +[package.extras] +tests = ["asttokens (>=2.1.0)", "coverage", "coverage-enable-subprocess", "ipython", "littleutils", "pytest", "rich"] + +[[package]] +name = "fastjsonschema" +version = "2.19.1" +description = "Fastest Python implementation of JSON schema" +optional = true +python-versions = "*" +files = [ + {file = "fastjsonschema-2.19.1-py3-none-any.whl", hash = "sha256:3672b47bc94178c9f23dbb654bf47440155d4db9df5f7bc47643315f9c405cd0"}, + {file = "fastjsonschema-2.19.1.tar.gz", hash = "sha256:e3126a94bdc4623d3de4485f8d468a12f02a67921315ddc87836d6e456dc789d"}, +] + +[package.extras] +devel = ["colorama", "json-spec", "jsonschema", "pylint", "pytest", "pytest-benchmark", "pytest-cache", "validictory"] + +[[package]] +name = "fonttools" +version = "4.51.0" +description = "Tools to manipulate font files" +optional = true +python-versions = ">=3.8" +files = [ + {file = "fonttools-4.51.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:84d7751f4468dd8cdd03ddada18b8b0857a5beec80bce9f435742abc9a851a74"}, + {file = "fonttools-4.51.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8b4850fa2ef2cfbc1d1f689bc159ef0f45d8d83298c1425838095bf53ef46308"}, + {file = "fonttools-4.51.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5b48a1121117047d82695d276c2af2ee3a24ffe0f502ed581acc2673ecf1037"}, + {file = "fonttools-4.51.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:180194c7fe60c989bb627d7ed5011f2bef1c4d36ecf3ec64daec8302f1ae0716"}, + {file = "fonttools-4.51.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:96a48e137c36be55e68845fc4284533bda2980f8d6f835e26bca79d7e2006438"}, + {file = "fonttools-4.51.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:806e7912c32a657fa39d2d6eb1d3012d35f841387c8fc6cf349ed70b7c340039"}, + {file = "fonttools-4.51.0-cp310-cp310-win32.whl", hash = "sha256:32b17504696f605e9e960647c5f64b35704782a502cc26a37b800b4d69ff3c77"}, + {file = "fonttools-4.51.0-cp310-cp310-win_amd64.whl", hash = "sha256:c7e91abdfae1b5c9e3a543f48ce96013f9a08c6c9668f1e6be0beabf0a569c1b"}, + {file = "fonttools-4.51.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:a8feca65bab31479d795b0d16c9a9852902e3a3c0630678efb0b2b7941ea9c74"}, + {file = "fonttools-4.51.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8ac27f436e8af7779f0bb4d5425aa3535270494d3bc5459ed27de3f03151e4c2"}, + {file = "fonttools-4.51.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e19bd9e9964a09cd2433a4b100ca7f34e34731e0758e13ba9a1ed6e5468cc0f"}, + {file = "fonttools-4.51.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b2b92381f37b39ba2fc98c3a45a9d6383bfc9916a87d66ccb6553f7bdd129097"}, + {file = "fonttools-4.51.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:5f6bc991d1610f5c3bbe997b0233cbc234b8e82fa99fc0b2932dc1ca5e5afec0"}, + {file = "fonttools-4.51.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9696fe9f3f0c32e9a321d5268208a7cc9205a52f99b89479d1b035ed54c923f1"}, + {file = "fonttools-4.51.0-cp311-cp311-win32.whl", hash = "sha256:3bee3f3bd9fa1d5ee616ccfd13b27ca605c2b4270e45715bd2883e9504735034"}, + {file = "fonttools-4.51.0-cp311-cp311-win_amd64.whl", hash = "sha256:0f08c901d3866a8905363619e3741c33f0a83a680d92a9f0e575985c2634fcc1"}, + {file = "fonttools-4.51.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:4060acc2bfa2d8e98117828a238889f13b6f69d59f4f2d5857eece5277b829ba"}, + {file = "fonttools-4.51.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:1250e818b5f8a679ad79660855528120a8f0288f8f30ec88b83db51515411fcc"}, + {file = "fonttools-4.51.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76f1777d8b3386479ffb4a282e74318e730014d86ce60f016908d9801af9ca2a"}, + {file = "fonttools-4.51.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b5ad456813d93b9c4b7ee55302208db2b45324315129d85275c01f5cb7e61a2"}, + {file = "fonttools-4.51.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:68b3fb7775a923be73e739f92f7e8a72725fd333eab24834041365d2278c3671"}, + {file = "fonttools-4.51.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8e2f1a4499e3b5ee82c19b5ee57f0294673125c65b0a1ff3764ea1f9db2f9ef5"}, + {file = "fonttools-4.51.0-cp312-cp312-win32.whl", hash = "sha256:278e50f6b003c6aed19bae2242b364e575bcb16304b53f2b64f6551b9c000e15"}, + {file = "fonttools-4.51.0-cp312-cp312-win_amd64.whl", hash = "sha256:b3c61423f22165541b9403ee39874dcae84cd57a9078b82e1dce8cb06b07fa2e"}, + {file = "fonttools-4.51.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:1621ee57da887c17312acc4b0e7ac30d3a4fb0fec6174b2e3754a74c26bbed1e"}, + {file = "fonttools-4.51.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:e9d9298be7a05bb4801f558522adbe2feea1b0b103d5294ebf24a92dd49b78e5"}, + {file = "fonttools-4.51.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ee1af4be1c5afe4c96ca23badd368d8dc75f611887fb0c0dac9f71ee5d6f110e"}, + {file = "fonttools-4.51.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c18b49adc721a7d0b8dfe7c3130c89b8704baf599fb396396d07d4aa69b824a1"}, + {file = "fonttools-4.51.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:de7c29bdbdd35811f14493ffd2534b88f0ce1b9065316433b22d63ca1cd21f14"}, + {file = "fonttools-4.51.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:cadf4e12a608ef1d13e039864f484c8a968840afa0258b0b843a0556497ea9ed"}, + {file = "fonttools-4.51.0-cp38-cp38-win32.whl", hash = "sha256:aefa011207ed36cd280babfaa8510b8176f1a77261833e895a9d96e57e44802f"}, + {file = "fonttools-4.51.0-cp38-cp38-win_amd64.whl", hash = "sha256:865a58b6e60b0938874af0968cd0553bcd88e0b2cb6e588727117bd099eef836"}, + {file = "fonttools-4.51.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:60a3409c9112aec02d5fb546f557bca6efa773dcb32ac147c6baf5f742e6258b"}, + {file = "fonttools-4.51.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f7e89853d8bea103c8e3514b9f9dc86b5b4120afb4583b57eb10dfa5afbe0936"}, + {file = "fonttools-4.51.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:56fc244f2585d6c00b9bcc59e6593e646cf095a96fe68d62cd4da53dd1287b55"}, + {file = "fonttools-4.51.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0d145976194a5242fdd22df18a1b451481a88071feadf251221af110ca8f00ce"}, + {file = "fonttools-4.51.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c5b8cab0c137ca229433570151b5c1fc6af212680b58b15abd797dcdd9dd5051"}, + {file = "fonttools-4.51.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:54dcf21a2f2d06ded676e3c3f9f74b2bafded3a8ff12f0983160b13e9f2fb4a7"}, + {file = "fonttools-4.51.0-cp39-cp39-win32.whl", hash = "sha256:0118ef998a0699a96c7b28457f15546815015a2710a1b23a7bf6c1be60c01636"}, + {file = "fonttools-4.51.0-cp39-cp39-win_amd64.whl", hash = "sha256:599bdb75e220241cedc6faebfafedd7670335d2e29620d207dd0378a4e9ccc5a"}, + {file = "fonttools-4.51.0-py3-none-any.whl", hash = "sha256:15c94eeef6b095831067f72c825eb0e2d48bb4cea0647c1b05c981ecba2bf39f"}, + {file = "fonttools-4.51.0.tar.gz", hash = "sha256:dc0673361331566d7a663d7ce0f6fdcbfbdc1f59c6e3ed1165ad7202ca183c68"}, +] + +[package.extras] +all = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "fs (>=2.2.0,<3)", "lxml (>=4.0)", "lz4 (>=1.7.4.2)", "matplotlib", "munkres", "pycairo", "scipy", "skia-pathops (>=0.5.0)", "sympy", "uharfbuzz (>=0.23.0)", "unicodedata2 (>=15.1.0)", "xattr", "zopfli (>=0.1.4)"] +graphite = ["lz4 (>=1.7.4.2)"] +interpolatable = ["munkres", "pycairo", "scipy"] +lxml = ["lxml (>=4.0)"] +pathops = ["skia-pathops (>=0.5.0)"] +plot = ["matplotlib"] +repacker = ["uharfbuzz (>=0.23.0)"] +symfont = ["sympy"] +type1 = ["xattr"] +ufo = ["fs (>=2.2.0,<3)"] +unicode = ["unicodedata2 (>=15.1.0)"] +woff = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "zopfli (>=0.1.4)"] + +[[package]] +name = "fqdn" +version = "1.5.1" +description = "Validates fully-qualified domain names against RFC 1123, so that they are acceptable to modern bowsers" +optional = true +python-versions = ">=2.7, !=3.0, !=3.1, !=3.2, !=3.3, !=3.4, <4" +files = [ + {file = "fqdn-1.5.1-py3-none-any.whl", hash = "sha256:3a179af3761e4df6eb2e026ff9e1a3033d3587bf980a0b1b2e1e5d08d7358014"}, + {file = "fqdn-1.5.1.tar.gz", hash = "sha256:105ed3677e767fb5ca086a0c1f4bb66ebc3c100be518f0e0d755d9eae164d89f"}, +] + +[[package]] +name = "h11" +version = "0.14.0" +description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" +optional = true +python-versions = ">=3.7" +files = [ + {file = "h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"}, + {file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"}, +] + +[[package]] +name = "httpcore" +version = "1.0.5" +description = "A minimal low-level HTTP client." +optional = true +python-versions = ">=3.8" +files = [ + {file = "httpcore-1.0.5-py3-none-any.whl", hash = "sha256:421f18bac248b25d310f3cacd198d55b8e6125c107797b609ff9b7a6ba7991b5"}, + {file = "httpcore-1.0.5.tar.gz", hash = "sha256:34a38e2f9291467ee3b44e89dd52615370e152954ba21721378a87b2960f7a61"}, +] + +[package.dependencies] +certifi = "*" +h11 = ">=0.13,<0.15" + +[package.extras] +asyncio = ["anyio (>=4.0,<5.0)"] +http2 = ["h2 (>=3,<5)"] +socks = ["socksio (==1.*)"] +trio = ["trio (>=0.22.0,<0.26.0)"] + +[[package]] +name = "httpx" +version = "0.27.0" +description = "The next generation HTTP client." +optional = true +python-versions = ">=3.8" +files = [ + {file = "httpx-0.27.0-py3-none-any.whl", hash = "sha256:71d5465162c13681bff01ad59b2cc68dd838ea1f10e51574bac27103f00c91a5"}, + {file = "httpx-0.27.0.tar.gz", hash = "sha256:a0cb88a46f32dc874e04ee956e4c2764aba2aa228f650b06788ba6bda2962ab5"}, +] + +[package.dependencies] +anyio = "*" +certifi = "*" +httpcore = "==1.*" +idna = "*" +sniffio = "*" + +[package.extras] +brotli = ["brotli", "brotlicffi"] +cli = ["click (==8.*)", "pygments (==2.*)", "rich (>=10,<14)"] +http2 = ["h2 (>=3,<5)"] +socks = ["socksio (==1.*)"] + +[[package]] +name = "idna" +version = "3.7" +description = "Internationalized Domain Names in Applications (IDNA)" +optional = true +python-versions = ">=3.5" +files = [ + {file = "idna-3.7-py3-none-any.whl", hash = "sha256:82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0"}, + {file = "idna-3.7.tar.gz", hash = "sha256:028ff3aadf0609c1fd278d8ea3089299412a7a8b9bd005dd08b9f8285bcb5cfc"}, +] + +[[package]] +name = "importlib-metadata" +version = "7.1.0" +description = "Read metadata from Python packages" +optional = true +python-versions = ">=3.8" +files = [ + {file = "importlib_metadata-7.1.0-py3-none-any.whl", hash = "sha256:30962b96c0c223483ed6cc7280e7f0199feb01a0e40cfae4d4450fc6fab1f570"}, + {file = "importlib_metadata-7.1.0.tar.gz", hash = "sha256:b78938b926ee8d5f020fc4772d487045805a55ddbad2ecf21c6d60938dc7fcd2"}, +] + +[package.dependencies] +zipp = ">=0.5" + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +perf = ["ipython"] +testing = ["flufl.flake8", "importlib-resources (>=1.3)", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-perf (>=0.9.2)", "pytest-ruff (>=0.2.1)"] + +[[package]] +name = "importlib-resources" +version = "6.4.0" +description = "Read resources from Python packages" +optional = true +python-versions = ">=3.8" +files = [ + {file = "importlib_resources-6.4.0-py3-none-any.whl", hash = "sha256:50d10f043df931902d4194ea07ec57960f66a80449ff867bfe782b4c486ba78c"}, + {file = "importlib_resources-6.4.0.tar.gz", hash = "sha256:cdb2b453b8046ca4e3798eb1d84f3cce1446a0e8e7b5ef4efb600f19fc398145"}, +] + +[package.dependencies] +zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""} + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] +testing = ["jaraco.test (>=5.4)", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-ruff (>=0.2.1)", "zipp (>=3.17)"] + +[[package]] +name = "ipykernel" +version = "6.29.4" +description = "IPython Kernel for Jupyter" +optional = true +python-versions = ">=3.8" +files = [ + {file = "ipykernel-6.29.4-py3-none-any.whl", hash = "sha256:1181e653d95c6808039c509ef8e67c4126b3b3af7781496c7cbfb5ed938a27da"}, + {file = "ipykernel-6.29.4.tar.gz", hash = "sha256:3d44070060f9475ac2092b760123fadf105d2e2493c24848b6691a7c4f42af5c"}, +] + +[package.dependencies] +appnope = {version = "*", markers = "platform_system == \"Darwin\""} +comm = ">=0.1.1" +debugpy = ">=1.6.5" +ipython = ">=7.23.1" +jupyter-client = ">=6.1.12" +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" +matplotlib-inline = ">=0.1" +nest-asyncio = "*" +packaging = "*" +psutil = "*" +pyzmq = ">=24" +tornado = ">=6.1" +traitlets = ">=5.4.0" + +[package.extras] +cov = ["coverage[toml]", "curio", "matplotlib", "pytest-cov", "trio"] +docs = ["myst-parser", "pydata-sphinx-theme", "sphinx", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling", "trio"] +pyqt5 = ["pyqt5"] +pyside6 = ["pyside6"] +test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=7.0)", "pytest-asyncio (>=0.23.5)", "pytest-cov", "pytest-timeout"] + +[[package]] +name = "ipython" +version = "8.18.1" +description = "IPython: Productive Interactive Computing" +optional = true +python-versions = ">=3.9" +files = [ + {file = "ipython-8.18.1-py3-none-any.whl", hash = "sha256:e8267419d72d81955ec1177f8a29aaa90ac80ad647499201119e2f05e99aa397"}, + {file = "ipython-8.18.1.tar.gz", hash = "sha256:ca6f079bb33457c66e233e4580ebfc4128855b4cf6370dddd73842a9563e8a27"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "sys_platform == \"win32\""} +decorator = "*" +exceptiongroup = {version = "*", markers = "python_version < \"3.11\""} +jedi = ">=0.16" +matplotlib-inline = "*" +pexpect = {version = ">4.3", markers = "sys_platform != \"win32\""} +prompt-toolkit = ">=3.0.41,<3.1.0" +pygments = ">=2.4.0" +stack-data = "*" +traitlets = ">=5" +typing-extensions = {version = "*", markers = "python_version < \"3.10\""} + +[package.extras] +all = ["black", "curio", "docrepr", "exceptiongroup", "ipykernel", "ipyparallel", "ipywidgets", "matplotlib", "matplotlib (!=3.2.0)", "nbconvert", "nbformat", "notebook", "numpy (>=1.22)", "pandas", "pickleshare", "pytest (<7)", "pytest (<7.1)", "pytest-asyncio (<0.22)", "qtconsole", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "stack-data", "testpath", "trio", "typing-extensions"] +black = ["black"] +doc = ["docrepr", "exceptiongroup", "ipykernel", "matplotlib", "pickleshare", "pytest (<7)", "pytest (<7.1)", "pytest-asyncio (<0.22)", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "stack-data", "testpath", "typing-extensions"] +kernel = ["ipykernel"] +nbconvert = ["nbconvert"] +nbformat = ["nbformat"] +notebook = ["ipywidgets", "notebook"] +parallel = ["ipyparallel"] +qtconsole = ["qtconsole"] +test = ["pickleshare", "pytest (<7.1)", "pytest-asyncio (<0.22)", "testpath"] +test-extra = ["curio", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.22)", "pandas", "pickleshare", "pytest (<7.1)", "pytest-asyncio (<0.22)", "testpath", "trio"] + +[[package]] +name = "ipywidgets" +version = "8.1.2" +description = "Jupyter interactive widgets" +optional = true +python-versions = ">=3.7" +files = [ + {file = "ipywidgets-8.1.2-py3-none-any.whl", hash = "sha256:bbe43850d79fb5e906b14801d6c01402857996864d1e5b6fa62dd2ee35559f60"}, + {file = "ipywidgets-8.1.2.tar.gz", hash = "sha256:d0b9b41e49bae926a866e613a39b0f0097745d2b9f1f3dd406641b4a57ec42c9"}, +] + +[package.dependencies] +comm = ">=0.1.3" +ipython = ">=6.1.0" +jupyterlab-widgets = ">=3.0.10,<3.1.0" +traitlets = ">=4.3.1" +widgetsnbextension = ">=4.0.10,<4.1.0" + +[package.extras] +test = ["ipykernel", "jsonschema", "pytest (>=3.6.0)", "pytest-cov", "pytz"] + +[[package]] +name = "isoduration" +version = "20.11.0" +description = "Operations with ISO 8601 durations" +optional = true +python-versions = ">=3.7" +files = [ + {file = "isoduration-20.11.0-py3-none-any.whl", hash = "sha256:b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042"}, + {file = "isoduration-20.11.0.tar.gz", hash = "sha256:ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9"}, +] + +[package.dependencies] +arrow = ">=0.15.0" + +[[package]] +name = "jedi" +version = "0.19.1" +description = "An autocompletion tool for Python that can be used for text editors." +optional = true +python-versions = ">=3.6" +files = [ + {file = "jedi-0.19.1-py2.py3-none-any.whl", hash = "sha256:e983c654fe5c02867aef4cdfce5a2fbb4a50adc0af145f70504238f18ef5e7e0"}, + {file = "jedi-0.19.1.tar.gz", hash = "sha256:cf0496f3651bc65d7174ac1b7d043eff454892c708a87d1b683e57b569927ffd"}, +] + +[package.dependencies] +parso = ">=0.8.3,<0.9.0" + +[package.extras] +docs = ["Jinja2 (==2.11.3)", "MarkupSafe (==1.1.1)", "Pygments (==2.8.1)", "alabaster (==0.7.12)", "babel (==2.9.1)", "chardet (==4.0.0)", "commonmark (==0.8.1)", "docutils (==0.17.1)", "future (==0.18.2)", "idna (==2.10)", "imagesize (==1.2.0)", "mock (==1.0.1)", "packaging (==20.9)", "pyparsing (==2.4.7)", "pytz (==2021.1)", "readthedocs-sphinx-ext (==2.1.4)", "recommonmark (==0.5.0)", "requests (==2.25.1)", "six (==1.15.0)", "snowballstemmer (==2.1.0)", "sphinx (==1.8.5)", "sphinx-rtd-theme (==0.4.3)", "sphinxcontrib-serializinghtml (==1.1.4)", "sphinxcontrib-websupport (==1.2.4)", "urllib3 (==1.26.4)"] +qa = ["flake8 (==5.0.4)", "mypy (==0.971)", "types-setuptools (==67.2.0.1)"] +testing = ["Django", "attrs", "colorama", "docopt", "pytest (<7.0.0)"] + +[[package]] +name = "jinja2" +version = "3.1.4" +description = "A very fast and expressive template engine." +optional = true +python-versions = ">=3.7" +files = [ + {file = "jinja2-3.1.4-py3-none-any.whl", hash = "sha256:bc5dd2abb727a5319567b7a813e6a2e7318c39f4f487cfe6c89c6f9c7d25197d"}, + {file = "jinja2-3.1.4.tar.gz", hash = "sha256:4a3aee7acbbe7303aede8e9648d13b8bf88a429282aa6122a993f0ac800cb369"}, +] + +[package.dependencies] +MarkupSafe = ">=2.0" + +[package.extras] +i18n = ["Babel (>=2.7)"] + +[[package]] +name = "json5" +version = "0.9.25" +description = "A Python implementation of the JSON5 data format." +optional = true +python-versions = ">=3.8" +files = [ + {file = "json5-0.9.25-py3-none-any.whl", hash = "sha256:34ed7d834b1341a86987ed52f3f76cd8ee184394906b6e22a1e0deb9ab294e8f"}, + {file = "json5-0.9.25.tar.gz", hash = "sha256:548e41b9be043f9426776f05df8635a00fe06104ea51ed24b67f908856e151ae"}, +] + +[[package]] +name = "jsonpointer" +version = "2.4" +description = "Identify specific nodes in a JSON document (RFC 6901)" +optional = true +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, !=3.6.*" +files = [ + {file = "jsonpointer-2.4-py2.py3-none-any.whl", hash = "sha256:15d51bba20eea3165644553647711d150376234112651b4f1811022aecad7d7a"}, + {file = "jsonpointer-2.4.tar.gz", hash = "sha256:585cee82b70211fa9e6043b7bb89db6e1aa49524340dde8ad6b63206ea689d88"}, +] + +[[package]] +name = "jsonschema" +version = "4.22.0" +description = "An implementation of JSON Schema validation for Python" +optional = true +python-versions = ">=3.8" +files = [ + {file = "jsonschema-4.22.0-py3-none-any.whl", hash = "sha256:ff4cfd6b1367a40e7bc6411caec72effadd3db0bbe5017de188f2d6108335802"}, + {file = "jsonschema-4.22.0.tar.gz", hash = "sha256:5b22d434a45935119af990552c862e5d6d564e8f6601206b305a61fdf661a2b7"}, +] + +[package.dependencies] +attrs = ">=22.2.0" +fqdn = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} +idna = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} +isoduration = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} +jsonpointer = {version = ">1.13", optional = true, markers = "extra == \"format-nongpl\""} +jsonschema-specifications = ">=2023.03.6" +referencing = ">=0.28.4" +rfc3339-validator = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} +rfc3986-validator = {version = ">0.1.0", optional = true, markers = "extra == \"format-nongpl\""} +rpds-py = ">=0.7.1" +uri-template = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} +webcolors = {version = ">=1.11", optional = true, markers = "extra == \"format-nongpl\""} + +[package.extras] +format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"] +format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=1.11)"] + +[[package]] +name = "jsonschema-specifications" +version = "2023.12.1" +description = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry" +optional = true +python-versions = ">=3.8" +files = [ + {file = "jsonschema_specifications-2023.12.1-py3-none-any.whl", hash = "sha256:87e4fdf3a94858b8a2ba2778d9ba57d8a9cafca7c7489c46ba0d30a8bc6a9c3c"}, + {file = "jsonschema_specifications-2023.12.1.tar.gz", hash = "sha256:48a76787b3e70f5ed53f1160d2b81f586e4ca6d1548c5de7085d1682674764cc"}, +] + +[package.dependencies] +referencing = ">=0.31.0" + +[[package]] +name = "jupyter" +version = "1.0.0" +description = "Jupyter metapackage. Install all the Jupyter components in one go." +optional = true +python-versions = "*" +files = [ + {file = "jupyter-1.0.0-py2.py3-none-any.whl", hash = "sha256:5b290f93b98ffbc21c0c7e749f054b3267782166d72fa5e3ed1ed4eaf34a2b78"}, + {file = "jupyter-1.0.0.tar.gz", hash = "sha256:d9dc4b3318f310e34c82951ea5d6683f67bed7def4b259fafbfe4f1beb1d8e5f"}, + {file = "jupyter-1.0.0.zip", hash = "sha256:3e1f86076bbb7c8c207829390305a2b1fe836d471ed54be66a3b8c41e7f46cc7"}, +] + +[package.dependencies] +ipykernel = "*" +ipywidgets = "*" +jupyter-console = "*" +nbconvert = "*" +notebook = "*" +qtconsole = "*" + +[[package]] +name = "jupyter-client" +version = "8.6.1" +description = "Jupyter protocol implementation and client libraries" +optional = true +python-versions = ">=3.8" +files = [ + {file = "jupyter_client-8.6.1-py3-none-any.whl", hash = "sha256:3b7bd22f058434e3b9a7ea4b1500ed47de2713872288c0d511d19926f99b459f"}, + {file = "jupyter_client-8.6.1.tar.gz", hash = "sha256:e842515e2bab8e19186d89fdfea7abd15e39dd581f94e399f00e2af5a1652d3f"}, +] + +[package.dependencies] +importlib-metadata = {version = ">=4.8.3", markers = "python_version < \"3.10\""} +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" +python-dateutil = ">=2.8.2" +pyzmq = ">=23.0" +tornado = ">=6.2" +traitlets = ">=5.3" + +[package.extras] +docs = ["ipykernel", "myst-parser", "pydata-sphinx-theme", "sphinx (>=4)", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling"] +test = ["coverage", "ipykernel (>=6.14)", "mypy", "paramiko", "pre-commit", "pytest", "pytest-cov", "pytest-jupyter[client] (>=0.4.1)", "pytest-timeout"] + +[[package]] +name = "jupyter-console" +version = "6.6.3" +description = "Jupyter terminal console" +optional = true +python-versions = ">=3.7" +files = [ + {file = "jupyter_console-6.6.3-py3-none-any.whl", hash = "sha256:309d33409fcc92ffdad25f0bcdf9a4a9daa61b6f341177570fdac03de5352485"}, + {file = "jupyter_console-6.6.3.tar.gz", hash = "sha256:566a4bf31c87adbfadf22cdf846e3069b59a71ed5da71d6ba4d8aaad14a53539"}, +] + +[package.dependencies] +ipykernel = ">=6.14" +ipython = "*" +jupyter-client = ">=7.0.0" +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" +prompt-toolkit = ">=3.0.30" +pygments = "*" +pyzmq = ">=17" +traitlets = ">=5.4" + +[package.extras] +test = ["flaky", "pexpect", "pytest"] + +[[package]] +name = "jupyter-core" +version = "5.7.2" +description = "Jupyter core package. A base package on which Jupyter projects rely." +optional = true +python-versions = ">=3.8" +files = [ + {file = "jupyter_core-5.7.2-py3-none-any.whl", hash = "sha256:4f7315d2f6b4bcf2e3e7cb6e46772eba760ae459cd1f59d29eb57b0a01bd7409"}, + {file = "jupyter_core-5.7.2.tar.gz", hash = "sha256:aa5f8d32bbf6b431ac830496da7392035d6f61b4f54872f15c4bd2a9c3f536d9"}, +] + +[package.dependencies] +platformdirs = ">=2.5" +pywin32 = {version = ">=300", markers = "sys_platform == \"win32\" and platform_python_implementation != \"PyPy\""} +traitlets = ">=5.3" + +[package.extras] +docs = ["myst-parser", "pydata-sphinx-theme", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling", "traitlets"] +test = ["ipykernel", "pre-commit", "pytest (<8)", "pytest-cov", "pytest-timeout"] + +[[package]] +name = "jupyter-events" +version = "0.10.0" +description = "Jupyter Event System library" +optional = true +python-versions = ">=3.8" +files = [ + {file = "jupyter_events-0.10.0-py3-none-any.whl", hash = "sha256:4b72130875e59d57716d327ea70d3ebc3af1944d3717e5a498b8a06c6c159960"}, + {file = "jupyter_events-0.10.0.tar.gz", hash = "sha256:670b8229d3cc882ec782144ed22e0d29e1c2d639263f92ca8383e66682845e22"}, +] + +[package.dependencies] +jsonschema = {version = ">=4.18.0", extras = ["format-nongpl"]} +python-json-logger = ">=2.0.4" +pyyaml = ">=5.3" +referencing = "*" +rfc3339-validator = "*" +rfc3986-validator = ">=0.1.1" +traitlets = ">=5.3" + +[package.extras] +cli = ["click", "rich"] +docs = ["jupyterlite-sphinx", "myst-parser", "pydata-sphinx-theme", "sphinxcontrib-spelling"] +test = ["click", "pre-commit", "pytest (>=7.0)", "pytest-asyncio (>=0.19.0)", "pytest-console-scripts", "rich"] + +[[package]] +name = "jupyter-lsp" +version = "2.2.5" +description = "Multi-Language Server WebSocket proxy for Jupyter Notebook/Lab server" +optional = true +python-versions = ">=3.8" +files = [ + {file = "jupyter-lsp-2.2.5.tar.gz", hash = "sha256:793147a05ad446f809fd53ef1cd19a9f5256fd0a2d6b7ce943a982cb4f545001"}, + {file = "jupyter_lsp-2.2.5-py3-none-any.whl", hash = "sha256:45fbddbd505f3fbfb0b6cb2f1bc5e15e83ab7c79cd6e89416b248cb3c00c11da"}, +] + +[package.dependencies] +importlib-metadata = {version = ">=4.8.3", markers = "python_version < \"3.10\""} +jupyter-server = ">=1.1.2" + +[[package]] +name = "jupyter-server" +version = "2.14.0" +description = "The backend—i.e. core services, APIs, and REST endpoints—to Jupyter web applications." +optional = true +python-versions = ">=3.8" +files = [ + {file = "jupyter_server-2.14.0-py3-none-any.whl", hash = "sha256:fb6be52c713e80e004fac34b35a0990d6d36ba06fd0a2b2ed82b899143a64210"}, + {file = "jupyter_server-2.14.0.tar.gz", hash = "sha256:659154cea512083434fd7c93b7fe0897af7a2fd0b9dd4749282b42eaac4ae677"}, +] + +[package.dependencies] +anyio = ">=3.1.0" +argon2-cffi = ">=21.1" +jinja2 = ">=3.0.3" +jupyter-client = ">=7.4.4" +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" +jupyter-events = ">=0.9.0" +jupyter-server-terminals = ">=0.4.4" +nbconvert = ">=6.4.4" +nbformat = ">=5.3.0" +overrides = ">=5.0" +packaging = ">=22.0" +prometheus-client = ">=0.9" +pywinpty = {version = ">=2.0.1", markers = "os_name == \"nt\""} +pyzmq = ">=24" +send2trash = ">=1.8.2" +terminado = ">=0.8.3" +tornado = ">=6.2.0" +traitlets = ">=5.6.0" +websocket-client = ">=1.7" + +[package.extras] +docs = ["ipykernel", "jinja2", "jupyter-client", "jupyter-server", "myst-parser", "nbformat", "prometheus-client", "pydata-sphinx-theme", "send2trash", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-openapi (>=0.8.0)", "sphinxcontrib-spelling", "sphinxemoji", "tornado", "typing-extensions"] +test = ["flaky", "ipykernel", "pre-commit", "pytest (>=7.0,<9)", "pytest-console-scripts", "pytest-jupyter[server] (>=0.7)", "pytest-timeout", "requests"] + +[[package]] +name = "jupyter-server-terminals" +version = "0.5.3" +description = "A Jupyter Server Extension Providing Terminals." +optional = true +python-versions = ">=3.8" +files = [ + {file = "jupyter_server_terminals-0.5.3-py3-none-any.whl", hash = "sha256:41ee0d7dc0ebf2809c668e0fc726dfaf258fcd3e769568996ca731b6194ae9aa"}, + {file = "jupyter_server_terminals-0.5.3.tar.gz", hash = "sha256:5ae0295167220e9ace0edcfdb212afd2b01ee8d179fe6f23c899590e9b8a5269"}, +] + +[package.dependencies] +pywinpty = {version = ">=2.0.3", markers = "os_name == \"nt\""} +terminado = ">=0.8.3" + +[package.extras] +docs = ["jinja2", "jupyter-server", "mistune (<4.0)", "myst-parser", "nbformat", "packaging", "pydata-sphinx-theme", "sphinxcontrib-github-alt", "sphinxcontrib-openapi", "sphinxcontrib-spelling", "sphinxemoji", "tornado"] +test = ["jupyter-server (>=2.0.0)", "pytest (>=7.0)", "pytest-jupyter[server] (>=0.5.3)", "pytest-timeout"] + +[[package]] +name = "jupyterlab" +version = "4.2.0" +description = "JupyterLab computational environment" +optional = true +python-versions = ">=3.8" +files = [ + {file = "jupyterlab-4.2.0-py3-none-any.whl", hash = "sha256:0dfe9278e25a145362289c555d9beb505697d269c10e99909766af7c440ad3cc"}, + {file = "jupyterlab-4.2.0.tar.gz", hash = "sha256:356e9205a6a2ab689c47c8fe4919dba6c076e376d03f26baadc05748c2435dd5"}, +] + +[package.dependencies] +async-lru = ">=1.0.0" +httpx = ">=0.25.0" +importlib-metadata = {version = ">=4.8.3", markers = "python_version < \"3.10\""} +ipykernel = ">=6.5.0" +jinja2 = ">=3.0.3" +jupyter-core = "*" +jupyter-lsp = ">=2.0.0" +jupyter-server = ">=2.4.0,<3" +jupyterlab-server = ">=2.27.1,<3" +notebook-shim = ">=0.2" +packaging = "*" +tomli = {version = ">=1.2.2", markers = "python_version < \"3.11\""} +tornado = ">=6.2.0" +traitlets = "*" + +[package.extras] +dev = ["build", "bump2version", "coverage", "hatch", "pre-commit", "pytest-cov", "ruff (==0.3.5)"] +docs = ["jsx-lexer", "myst-parser", "pydata-sphinx-theme (>=0.13.0)", "pytest", "pytest-check-links", "pytest-jupyter", "sphinx (>=1.8,<7.3.0)", "sphinx-copybutton"] +docs-screenshots = ["altair (==5.3.0)", "ipython (==8.16.1)", "ipywidgets (==8.1.2)", "jupyterlab-geojson (==3.4.0)", "jupyterlab-language-pack-zh-cn (==4.1.post2)", "matplotlib (==3.8.3)", "nbconvert (>=7.0.0)", "pandas (==2.2.1)", "scipy (==1.12.0)", "vega-datasets (==0.9.0)"] +test = ["coverage", "pytest (>=7.0)", "pytest-check-links (>=0.7)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter (>=0.5.3)", "pytest-timeout", "pytest-tornasync", "requests", "requests-cache", "virtualenv"] +upgrade-extension = ["copier (>=8,<10)", "jinja2-time (<0.3)", "pydantic (<2.0)", "pyyaml-include (<2.0)", "tomli-w (<2.0)"] + +[[package]] +name = "jupyterlab-pygments" +version = "0.3.0" +description = "Pygments theme using JupyterLab CSS variables" +optional = true +python-versions = ">=3.8" +files = [ + {file = "jupyterlab_pygments-0.3.0-py3-none-any.whl", hash = "sha256:841a89020971da1d8693f1a99997aefc5dc424bb1b251fd6322462a1b8842780"}, + {file = "jupyterlab_pygments-0.3.0.tar.gz", hash = "sha256:721aca4d9029252b11cfa9d185e5b5af4d54772bb8072f9b7036f4170054d35d"}, +] + +[[package]] +name = "jupyterlab-server" +version = "2.27.1" +description = "A set of server components for JupyterLab and JupyterLab like applications." +optional = true +python-versions = ">=3.8" +files = [ + {file = "jupyterlab_server-2.27.1-py3-none-any.whl", hash = "sha256:f5e26156e5258b24d532c84e7c74cc212e203bff93eb856f81c24c16daeecc75"}, + {file = "jupyterlab_server-2.27.1.tar.gz", hash = "sha256:097b5ac709b676c7284ac9c5e373f11930a561f52cd5a86e4fc7e5a9c8a8631d"}, +] + +[package.dependencies] +babel = ">=2.10" +importlib-metadata = {version = ">=4.8.3", markers = "python_version < \"3.10\""} +jinja2 = ">=3.0.3" +json5 = ">=0.9.0" +jsonschema = ">=4.18.0" +jupyter-server = ">=1.21,<3" +packaging = ">=21.3" +requests = ">=2.31" + +[package.extras] +docs = ["autodoc-traits", "jinja2 (<3.2.0)", "mistune (<4)", "myst-parser", "pydata-sphinx-theme", "sphinx", "sphinx-copybutton", "sphinxcontrib-openapi (>0.8)"] +openapi = ["openapi-core (>=0.18.0,<0.19.0)", "ruamel-yaml"] +test = ["hatch", "ipykernel", "openapi-core (>=0.18.0,<0.19.0)", "openapi-spec-validator (>=0.6.0,<0.8.0)", "pytest (>=7.0,<8)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter[server] (>=0.6.2)", "pytest-timeout", "requests-mock", "ruamel-yaml", "sphinxcontrib-spelling", "strict-rfc3339", "werkzeug"] + +[[package]] +name = "jupyterlab-widgets" +version = "3.0.10" +description = "Jupyter interactive widgets for JupyterLab" +optional = true +python-versions = ">=3.7" +files = [ + {file = "jupyterlab_widgets-3.0.10-py3-none-any.whl", hash = "sha256:dd61f3ae7a5a7f80299e14585ce6cf3d6925a96c9103c978eda293197730cb64"}, + {file = "jupyterlab_widgets-3.0.10.tar.gz", hash = "sha256:04f2ac04976727e4f9d0fa91cdc2f1ab860f965e504c29dbd6a65c882c9d04c0"}, +] + +[[package]] +name = "kiwisolver" +version = "1.4.5" +description = "A fast implementation of the Cassowary constraint solver" +optional = true +python-versions = ">=3.7" +files = [ + {file = "kiwisolver-1.4.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:05703cf211d585109fcd72207a31bb170a0f22144d68298dc5e61b3c946518af"}, + {file = "kiwisolver-1.4.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:146d14bebb7f1dc4d5fbf74f8a6cb15ac42baadee8912eb84ac0b3b2a3dc6ac3"}, + {file = "kiwisolver-1.4.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6ef7afcd2d281494c0a9101d5c571970708ad911d028137cd558f02b851c08b4"}, + {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9eaa8b117dc8337728e834b9c6e2611f10c79e38f65157c4c38e9400286f5cb1"}, + {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ec20916e7b4cbfb1f12380e46486ec4bcbaa91a9c448b97023fde0d5bbf9e4ff"}, + {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:39b42c68602539407884cf70d6a480a469b93b81b7701378ba5e2328660c847a"}, + {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aa12042de0171fad672b6c59df69106d20d5596e4f87b5e8f76df757a7c399aa"}, + {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2a40773c71d7ccdd3798f6489aaac9eee213d566850a9533f8d26332d626b82c"}, + {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:19df6e621f6d8b4b9c4d45f40a66839294ff2bb235e64d2178f7522d9170ac5b"}, + {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:83d78376d0d4fd884e2c114d0621624b73d2aba4e2788182d286309ebdeed770"}, + {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:e391b1f0a8a5a10ab3b9bb6afcfd74f2175f24f8975fb87ecae700d1503cdee0"}, + {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:852542f9481f4a62dbb5dd99e8ab7aedfeb8fb6342349a181d4036877410f525"}, + {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59edc41b24031bc25108e210c0def6f6c2191210492a972d585a06ff246bb79b"}, + {file = "kiwisolver-1.4.5-cp310-cp310-win32.whl", hash = "sha256:a6aa6315319a052b4ee378aa171959c898a6183f15c1e541821c5c59beaa0238"}, + {file = "kiwisolver-1.4.5-cp310-cp310-win_amd64.whl", hash = "sha256:d0ef46024e6a3d79c01ff13801cb19d0cad7fd859b15037aec74315540acc276"}, + {file = "kiwisolver-1.4.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:11863aa14a51fd6ec28688d76f1735f8f69ab1fabf388851a595d0721af042f5"}, + {file = "kiwisolver-1.4.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8ab3919a9997ab7ef2fbbed0cc99bb28d3c13e6d4b1ad36e97e482558a91be90"}, + {file = "kiwisolver-1.4.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fcc700eadbbccbf6bc1bcb9dbe0786b4b1cb91ca0dcda336eef5c2beed37b797"}, + {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dfdd7c0b105af050eb3d64997809dc21da247cf44e63dc73ff0fd20b96be55a9"}, + {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76c6a5964640638cdeaa0c359382e5703e9293030fe730018ca06bc2010c4437"}, + {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bbea0db94288e29afcc4c28afbf3a7ccaf2d7e027489c449cf7e8f83c6346eb9"}, + {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ceec1a6bc6cab1d6ff5d06592a91a692f90ec7505d6463a88a52cc0eb58545da"}, + {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:040c1aebeda72197ef477a906782b5ab0d387642e93bda547336b8957c61022e"}, + {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f91de7223d4c7b793867797bacd1ee53bfe7359bd70d27b7b58a04efbb9436c8"}, + {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:faae4860798c31530dd184046a900e652c95513796ef51a12bc086710c2eec4d"}, + {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:b0157420efcb803e71d1b28e2c287518b8808b7cf1ab8af36718fd0a2c453eb0"}, + {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:06f54715b7737c2fecdbf140d1afb11a33d59508a47bf11bb38ecf21dc9ab79f"}, + {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fdb7adb641a0d13bdcd4ef48e062363d8a9ad4a182ac7647ec88f695e719ae9f"}, + {file = "kiwisolver-1.4.5-cp311-cp311-win32.whl", hash = "sha256:bb86433b1cfe686da83ce32a9d3a8dd308e85c76b60896d58f082136f10bffac"}, + {file = "kiwisolver-1.4.5-cp311-cp311-win_amd64.whl", hash = "sha256:6c08e1312a9cf1074d17b17728d3dfce2a5125b2d791527f33ffbe805200a355"}, + {file = "kiwisolver-1.4.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:32d5cf40c4f7c7b3ca500f8985eb3fb3a7dfc023215e876f207956b5ea26632a"}, + {file = "kiwisolver-1.4.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f846c260f483d1fd217fe5ed7c173fb109efa6b1fc8381c8b7552c5781756192"}, + {file = "kiwisolver-1.4.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5ff5cf3571589b6d13bfbfd6bcd7a3f659e42f96b5fd1c4830c4cf21d4f5ef45"}, + {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7269d9e5f1084a653d575c7ec012ff57f0c042258bf5db0954bf551c158466e7"}, + {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da802a19d6e15dffe4b0c24b38b3af68e6c1a68e6e1d8f30148c83864f3881db"}, + {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3aba7311af82e335dd1e36ffff68aaca609ca6290c2cb6d821a39aa075d8e3ff"}, + {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:763773d53f07244148ccac5b084da5adb90bfaee39c197554f01b286cf869228"}, + {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2270953c0d8cdab5d422bee7d2007f043473f9d2999631c86a223c9db56cbd16"}, + {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d099e745a512f7e3bbe7249ca835f4d357c586d78d79ae8f1dcd4d8adeb9bda9"}, + {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:74db36e14a7d1ce0986fa104f7d5637aea5c82ca6326ed0ec5694280942d1162"}, + {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:7e5bab140c309cb3a6ce373a9e71eb7e4873c70c2dda01df6820474f9889d6d4"}, + {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:0f114aa76dc1b8f636d077979c0ac22e7cd8f3493abbab152f20eb8d3cda71f3"}, + {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:88a2df29d4724b9237fc0c6eaf2a1adae0cdc0b3e9f4d8e7dc54b16812d2d81a"}, + {file = "kiwisolver-1.4.5-cp312-cp312-win32.whl", hash = "sha256:72d40b33e834371fd330fb1472ca19d9b8327acb79a5821d4008391db8e29f20"}, + {file = "kiwisolver-1.4.5-cp312-cp312-win_amd64.whl", hash = "sha256:2c5674c4e74d939b9d91dda0fae10597ac7521768fec9e399c70a1f27e2ea2d9"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:3a2b053a0ab7a3960c98725cfb0bf5b48ba82f64ec95fe06f1d06c99b552e130"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3cd32d6c13807e5c66a7cbb79f90b553642f296ae4518a60d8d76243b0ad2898"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:59ec7b7c7e1a61061850d53aaf8e93db63dce0c936db1fda2658b70e4a1be709"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:da4cfb373035def307905d05041c1d06d8936452fe89d464743ae7fb8371078b"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2400873bccc260b6ae184b2b8a4fec0e4082d30648eadb7c3d9a13405d861e89"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:1b04139c4236a0f3aff534479b58f6f849a8b351e1314826c2d230849ed48985"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:4e66e81a5779b65ac21764c295087de82235597a2293d18d943f8e9e32746265"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:7931d8f1f67c4be9ba1dd9c451fb0eeca1a25b89e4d3f89e828fe12a519b782a"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:b3f7e75f3015df442238cca659f8baa5f42ce2a8582727981cbfa15fee0ee205"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:bbf1d63eef84b2e8c89011b7f2235b1e0bf7dacc11cac9431fc6468e99ac77fb"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:4c380469bd3f970ef677bf2bcba2b6b0b4d5c75e7a020fb863ef75084efad66f"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-win32.whl", hash = "sha256:9408acf3270c4b6baad483865191e3e582b638b1654a007c62e3efe96f09a9a3"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-win_amd64.whl", hash = "sha256:5b94529f9b2591b7af5f3e0e730a4e0a41ea174af35a4fd067775f9bdfeee01a"}, + {file = "kiwisolver-1.4.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:11c7de8f692fc99816e8ac50d1d1aef4f75126eefc33ac79aac02c099fd3db71"}, + {file = "kiwisolver-1.4.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:53abb58632235cd154176ced1ae8f0d29a6657aa1aa9decf50b899b755bc2b93"}, + {file = "kiwisolver-1.4.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:88b9f257ca61b838b6f8094a62418421f87ac2a1069f7e896c36a7d86b5d4c29"}, + {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3195782b26fc03aa9c6913d5bad5aeb864bdc372924c093b0f1cebad603dd712"}, + {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fc579bf0f502e54926519451b920e875f433aceb4624a3646b3252b5caa9e0b6"}, + {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5a580c91d686376f0f7c295357595c5a026e6cbc3d77b7c36e290201e7c11ecb"}, + {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:cfe6ab8da05c01ba6fbea630377b5da2cd9bcbc6338510116b01c1bc939a2c18"}, + {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:d2e5a98f0ec99beb3c10e13b387f8db39106d53993f498b295f0c914328b1333"}, + {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:a51a263952b1429e429ff236d2f5a21c5125437861baeed77f5e1cc2d2c7c6da"}, + {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:3edd2fa14e68c9be82c5b16689e8d63d89fe927e56debd6e1dbce7a26a17f81b"}, + {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:74d1b44c6cfc897df648cc9fdaa09bc3e7679926e6f96df05775d4fb3946571c"}, + {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:76d9289ed3f7501012e05abb8358bbb129149dbd173f1f57a1bf1c22d19ab7cc"}, + {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:92dea1ffe3714fa8eb6a314d2b3c773208d865a0e0d35e713ec54eea08a66250"}, + {file = "kiwisolver-1.4.5-cp38-cp38-win32.whl", hash = "sha256:5c90ae8c8d32e472be041e76f9d2f2dbff4d0b0be8bd4041770eddb18cf49a4e"}, + {file = "kiwisolver-1.4.5-cp38-cp38-win_amd64.whl", hash = "sha256:c7940c1dc63eb37a67721b10d703247552416f719c4188c54e04334321351ced"}, + {file = "kiwisolver-1.4.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:9407b6a5f0d675e8a827ad8742e1d6b49d9c1a1da5d952a67d50ef5f4170b18d"}, + {file = "kiwisolver-1.4.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:15568384086b6df3c65353820a4473575dbad192e35010f622c6ce3eebd57af9"}, + {file = "kiwisolver-1.4.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0dc9db8e79f0036e8173c466d21ef18e1befc02de8bf8aa8dc0813a6dc8a7046"}, + {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:cdc8a402aaee9a798b50d8b827d7ecf75edc5fb35ea0f91f213ff927c15f4ff0"}, + {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6c3bd3cde54cafb87d74d8db50b909705c62b17c2099b8f2e25b461882e544ff"}, + {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:955e8513d07a283056b1396e9a57ceddbd272d9252c14f154d450d227606eb54"}, + {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:346f5343b9e3f00b8db8ba359350eb124b98c99efd0b408728ac6ebf38173958"}, + {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b9098e0049e88c6a24ff64545cdfc50807818ba6c1b739cae221bbbcbc58aad3"}, + {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:00bd361b903dc4bbf4eb165f24d1acbee754fce22ded24c3d56eec268658a5cf"}, + {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7b8b454bac16428b22560d0a1cf0a09875339cab69df61d7805bf48919415901"}, + {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:f1d072c2eb0ad60d4c183f3fb44ac6f73fb7a8f16a2694a91f988275cbf352f9"}, + {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:31a82d498054cac9f6d0b53d02bb85811185bcb477d4b60144f915f3b3126342"}, + {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:6512cb89e334e4700febbffaaa52761b65b4f5a3cf33f960213d5656cea36a77"}, + {file = "kiwisolver-1.4.5-cp39-cp39-win32.whl", hash = "sha256:9db8ea4c388fdb0f780fe91346fd438657ea602d58348753d9fb265ce1bca67f"}, + {file = "kiwisolver-1.4.5-cp39-cp39-win_amd64.whl", hash = "sha256:59415f46a37f7f2efeec758353dd2eae1b07640d8ca0f0c42548ec4125492635"}, + {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:5c7b3b3a728dc6faf3fc372ef24f21d1e3cee2ac3e9596691d746e5a536de920"}, + {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:620ced262a86244e2be10a676b646f29c34537d0d9cc8eb26c08f53d98013390"}, + {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:378a214a1e3bbf5ac4a8708304318b4f890da88c9e6a07699c4ae7174c09a68d"}, + {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aaf7be1207676ac608a50cd08f102f6742dbfc70e8d60c4db1c6897f62f71523"}, + {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:ba55dce0a9b8ff59495ddd050a0225d58bd0983d09f87cfe2b6aec4f2c1234e4"}, + {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:fd32ea360bcbb92d28933fc05ed09bffcb1704ba3fc7942e81db0fd4f81a7892"}, + {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5e7139af55d1688f8b960ee9ad5adafc4ac17c1c473fe07133ac092310d76544"}, + {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:dced8146011d2bc2e883f9bd68618b8247387f4bbec46d7392b3c3b032640126"}, + {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c9bf3325c47b11b2e51bca0824ea217c7cd84491d8ac4eefd1e409705ef092bd"}, + {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:5794cf59533bc3f1b1c821f7206a3617999db9fbefc345360aafe2e067514929"}, + {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:e368f200bbc2e4f905b8e71eb38b3c04333bddaa6a2464a6355487b02bb7fb09"}, + {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e5d706eba36b4c4d5bc6c6377bb6568098765e990cfc21ee16d13963fab7b3e7"}, + {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:85267bd1aa8880a9c88a8cb71e18d3d64d2751a790e6ca6c27b8ccc724bcd5ad"}, + {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:210ef2c3a1f03272649aff1ef992df2e724748918c4bc2d5a90352849eb40bea"}, + {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:11d011a7574eb3b82bcc9c1a1d35c1d7075677fdd15de527d91b46bd35e935ee"}, + {file = "kiwisolver-1.4.5.tar.gz", hash = "sha256:e57e563a57fb22a142da34f38acc2fc1a5c864bc29ca1517a88abc963e60d6ec"}, +] + +[[package]] +name = "markupsafe" +version = "2.1.5" +description = "Safely add untrusted strings to HTML/XML markup." +optional = true +python-versions = ">=3.7" +files = [ + {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a17a92de5231666cfbe003f0e4b9b3a7ae3afb1ec2845aadc2bacc93ff85febc"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:72b6be590cc35924b02c78ef34b467da4ba07e4e0f0454a2c5907f473fc50ce5"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e61659ba32cf2cf1481e575d0462554625196a1f2fc06a1c777d3f48e8865d46"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2174c595a0d73a3080ca3257b40096db99799265e1c27cc5a610743acd86d62f"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ae2ad8ae6ebee9d2d94b17fb62763125f3f374c25618198f40cbb8b525411900"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:075202fa5b72c86ad32dc7d0b56024ebdbcf2048c0ba09f1cde31bfdd57bcfff"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:598e3276b64aff0e7b3451b72e94fa3c238d452e7ddcd893c3ab324717456bad"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fce659a462a1be54d2ffcacea5e3ba2d74daa74f30f5f143fe0c58636e355fdd"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-win32.whl", hash = "sha256:d9fad5155d72433c921b782e58892377c44bd6252b5af2f67f16b194987338a4"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-win_amd64.whl", hash = "sha256:bf50cd79a75d181c9181df03572cdce0fbb75cc353bc350712073108cba98de5"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:629ddd2ca402ae6dbedfceeba9c46d5f7b2a61d9749597d4307f943ef198fc1f"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5b7b716f97b52c5a14bffdf688f971b2d5ef4029127f1ad7a513973cfd818df2"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ec585f69cec0aa07d945b20805be741395e28ac1627333b1c5b0105962ffced"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b91c037585eba9095565a3556f611e3cbfaa42ca1e865f7b8015fe5c7336d5a5"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7502934a33b54030eaf1194c21c692a534196063db72176b0c4028e140f8f32c"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0e397ac966fdf721b2c528cf028494e86172b4feba51d65f81ffd65c63798f3f"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c061bb86a71b42465156a3ee7bd58c8c2ceacdbeb95d05a99893e08b8467359a"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3a57fdd7ce31c7ff06cdfbf31dafa96cc533c21e443d57f5b1ecc6cdc668ec7f"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-win32.whl", hash = "sha256:397081c1a0bfb5124355710fe79478cdbeb39626492b15d399526ae53422b906"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-win_amd64.whl", hash = "sha256:2b7c57a4dfc4f16f7142221afe5ba4e093e09e728ca65c51f5620c9aaeb9a617"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:8dec4936e9c3100156f8a2dc89c4b88d5c435175ff03413b443469c7c8c5f4d1"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:3c6b973f22eb18a789b1460b4b91bf04ae3f0c4234a0a6aa6b0a92f6f7b951d4"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac07bad82163452a6884fe8fa0963fb98c2346ba78d779ec06bd7a6262132aee"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5dfb42c4604dddc8e4305050aa6deb084540643ed5804d7455b5df8fe16f5e5"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ea3d8a3d18833cf4304cd2fc9cbb1efe188ca9b5efef2bdac7adc20594a0e46b"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d050b3361367a06d752db6ead6e7edeb0009be66bc3bae0ee9d97fb326badc2a"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:bec0a414d016ac1a18862a519e54b2fd0fc8bbfd6890376898a6c0891dd82e9f"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:58c98fee265677f63a4385256a6d7683ab1832f3ddd1e66fe948d5880c21a169"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-win32.whl", hash = "sha256:8590b4ae07a35970728874632fed7bd57b26b0102df2d2b233b6d9d82f6c62ad"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-win_amd64.whl", hash = "sha256:823b65d8706e32ad2df51ed89496147a42a2a6e01c13cfb6ffb8b1e92bc910bb"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c8b29db45f8fe46ad280a7294f5c3ec36dbac9491f2d1c17345be8e69cc5928f"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec6a563cff360b50eed26f13adc43e61bc0c04d94b8be985e6fb24b81f6dcfdf"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a549b9c31bec33820e885335b451286e2969a2d9e24879f83fe904a5ce59d70a"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4f11aa001c540f62c6166c7726f71f7573b52c68c31f014c25cc7901deea0b52"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:7b2e5a267c855eea6b4283940daa6e88a285f5f2a67f2220203786dfa59b37e9"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:2d2d793e36e230fd32babe143b04cec8a8b3eb8a3122d2aceb4a371e6b09b8df"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ce409136744f6521e39fd8e2a24c53fa18ad67aa5bc7c2cf83645cce5b5c4e50"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-win32.whl", hash = "sha256:4096e9de5c6fdf43fb4f04c26fb114f61ef0bf2e5604b6ee3019d51b69e8c371"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-win_amd64.whl", hash = "sha256:4275d846e41ecefa46e2015117a9f491e57a71ddd59bbead77e904dc02b1bed2"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:656f7526c69fac7f600bd1f400991cc282b417d17539a1b228617081106feb4a"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:97cafb1f3cbcd3fd2b6fbfb99ae11cdb14deea0736fc2b0952ee177f2b813a46"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f3fbcb7ef1f16e48246f704ab79d79da8a46891e2da03f8783a5b6fa41a9532"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa9db3f79de01457b03d4f01b34cf91bc0048eb2c3846ff26f66687c2f6d16ab"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffee1f21e5ef0d712f9033568f8344d5da8cc2869dbd08d87c84656e6a2d2f68"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:5dedb4db619ba5a2787a94d877bc8ffc0566f92a01c0ef214865e54ecc9ee5e0"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:30b600cf0a7ac9234b2638fbc0fb6158ba5bdcdf46aeb631ead21248b9affbc4"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8dd717634f5a044f860435c1d8c16a270ddf0ef8588d4887037c5028b859b0c3"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-win32.whl", hash = "sha256:daa4ee5a243f0f20d528d939d06670a298dd39b1ad5f8a72a4275124a7819eff"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-win_amd64.whl", hash = "sha256:619bc166c4f2de5caa5a633b8b7326fbe98e0ccbfacabd87268a2b15ff73a029"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7a68b554d356a91cce1236aa7682dc01df0edba8d043fd1ce607c49dd3c1edcf"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:db0b55e0f3cc0be60c1f19efdde9a637c32740486004f20d1cff53c3c0ece4d2"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e53af139f8579a6d5f7b76549125f0d94d7e630761a2111bc431fd820e163b8"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:17b950fccb810b3293638215058e432159d2b71005c74371d784862b7e4683f3"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4c31f53cdae6ecfa91a77820e8b151dba54ab528ba65dfd235c80b086d68a465"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bff1b4290a66b490a2f4719358c0cdcd9bafb6b8f061e45c7a2460866bf50c2e"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bc1667f8b83f48511b94671e0e441401371dfd0f0a795c7daa4a3cd1dde55bea"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5049256f536511ee3f7e1b3f87d1d1209d327e818e6ae1365e8653d7e3abb6a6"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-win32.whl", hash = "sha256:00e046b6dd71aa03a41079792f8473dc494d564611a8f89bbbd7cb93295ebdcf"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-win_amd64.whl", hash = "sha256:fa173ec60341d6bb97a89f5ea19c85c5643c1e7dedebc22f5181eb73573142c5"}, + {file = "MarkupSafe-2.1.5.tar.gz", hash = "sha256:d283d37a890ba4c1ae73ffadf8046435c76e7bc2247bbb63c00bd1a709c6544b"}, +] + +[[package]] +name = "marmot-agents" +version = "0.2.5" +description = "Agent based processs modeling." +optional = true +python-versions = "*" +files = [ + {file = "marmot-agents-0.2.5.tar.gz", hash = "sha256:d0038c28928681b74352397a357f290da00c86a10c9626219b3ae36899faa915"}, + {file = "marmot_agents-0.2.5-py3-none-any.whl", hash = "sha256:f7678a830593222436396163fb0788d9d113bf84afb956b8854aad465830c2a6"}, +] + +[package.dependencies] +numpy = "*" + +[[package]] +name = "matplotlib" +version = "3.9.0" +description = "Python plotting package" +optional = true +python-versions = ">=3.9" +files = [ + {file = "matplotlib-3.9.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:2bcee1dffaf60fe7656183ac2190bd630842ff87b3153afb3e384d966b57fe56"}, + {file = "matplotlib-3.9.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3f988bafb0fa39d1074ddd5bacd958c853e11def40800c5824556eb630f94d3b"}, + {file = "matplotlib-3.9.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fe428e191ea016bb278758c8ee82a8129c51d81d8c4bc0846c09e7e8e9057241"}, + {file = "matplotlib-3.9.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eaf3978060a106fab40c328778b148f590e27f6fa3cd15a19d6892575bce387d"}, + {file = "matplotlib-3.9.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2e7f03e5cbbfacdd48c8ea394d365d91ee8f3cae7e6ec611409927b5ed997ee4"}, + {file = "matplotlib-3.9.0-cp310-cp310-win_amd64.whl", hash = "sha256:13beb4840317d45ffd4183a778685e215939be7b08616f431c7795276e067463"}, + {file = "matplotlib-3.9.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:063af8587fceeac13b0936c42a2b6c732c2ab1c98d38abc3337e430e1ff75e38"}, + {file = "matplotlib-3.9.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9a2fa6d899e17ddca6d6526cf6e7ba677738bf2a6a9590d702c277204a7c6152"}, + {file = "matplotlib-3.9.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:550cdda3adbd596078cca7d13ed50b77879104e2e46392dcd7c75259d8f00e85"}, + {file = "matplotlib-3.9.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:76cce0f31b351e3551d1f3779420cf8f6ec0d4a8cf9c0237a3b549fd28eb4abb"}, + {file = "matplotlib-3.9.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c53aeb514ccbbcbab55a27f912d79ea30ab21ee0531ee2c09f13800efb272674"}, + {file = "matplotlib-3.9.0-cp311-cp311-win_amd64.whl", hash = "sha256:a5be985db2596d761cdf0c2eaf52396f26e6a64ab46bd8cd810c48972349d1be"}, + {file = "matplotlib-3.9.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:c79f3a585f1368da6049318bdf1f85568d8d04b2e89fc24b7e02cc9b62017382"}, + {file = "matplotlib-3.9.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:bdd1ecbe268eb3e7653e04f451635f0fb0f77f07fd070242b44c076c9106da84"}, + {file = "matplotlib-3.9.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d38e85a1a6d732f645f1403ce5e6727fd9418cd4574521d5803d3d94911038e5"}, + {file = "matplotlib-3.9.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0a490715b3b9984fa609116481b22178348c1a220a4499cda79132000a79b4db"}, + {file = "matplotlib-3.9.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8146ce83cbc5dc71c223a74a1996d446cd35cfb6a04b683e1446b7e6c73603b7"}, + {file = "matplotlib-3.9.0-cp312-cp312-win_amd64.whl", hash = "sha256:d91a4ffc587bacf5c4ce4ecfe4bcd23a4b675e76315f2866e588686cc97fccdf"}, + {file = "matplotlib-3.9.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:616fabf4981a3b3c5a15cd95eba359c8489c4e20e03717aea42866d8d0465956"}, + {file = "matplotlib-3.9.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:cd53c79fd02f1c1808d2cfc87dd3cf4dbc63c5244a58ee7944497107469c8d8a"}, + {file = "matplotlib-3.9.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:06a478f0d67636554fa78558cfbcd7b9dba85b51f5c3b5a0c9be49010cf5f321"}, + {file = "matplotlib-3.9.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:81c40af649d19c85f8073e25e5806926986806fa6d54be506fbf02aef47d5a89"}, + {file = "matplotlib-3.9.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:52146fc3bd7813cc784562cb93a15788be0b2875c4655e2cc6ea646bfa30344b"}, + {file = "matplotlib-3.9.0-cp39-cp39-win_amd64.whl", hash = "sha256:0fc51eaa5262553868461c083d9adadb11a6017315f3a757fc45ec6ec5f02888"}, + {file = "matplotlib-3.9.0-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:bd4f2831168afac55b881db82a7730992aa41c4f007f1913465fb182d6fb20c0"}, + {file = "matplotlib-3.9.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:290d304e59be2b33ef5c2d768d0237f5bd132986bdcc66f80bc9bcc300066a03"}, + {file = "matplotlib-3.9.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ff2e239c26be4f24bfa45860c20ffccd118d270c5b5d081fa4ea409b5469fcd"}, + {file = "matplotlib-3.9.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:af4001b7cae70f7eaacfb063db605280058246de590fa7874f00f62259f2df7e"}, + {file = "matplotlib-3.9.0.tar.gz", hash = "sha256:e6d29ea6c19e34b30fb7d88b7081f869a03014f66fe06d62cc77d5a6ea88ed7a"}, +] + +[package.dependencies] +contourpy = ">=1.0.1" +cycler = ">=0.10" +fonttools = ">=4.22.0" +importlib-resources = {version = ">=3.2.0", markers = "python_version < \"3.10\""} +kiwisolver = ">=1.3.1" +numpy = ">=1.23" +packaging = ">=20.0" +pillow = ">=8" +pyparsing = ">=2.3.1" +python-dateutil = ">=2.7" + +[package.extras] +dev = ["meson-python (>=0.13.1)", "numpy (>=1.25)", "pybind11 (>=2.6)", "setuptools (>=64)", "setuptools_scm (>=7)"] + +[[package]] +name = "matplotlib-inline" +version = "0.1.7" +description = "Inline Matplotlib backend for Jupyter" +optional = true +python-versions = ">=3.8" +files = [ + {file = "matplotlib_inline-0.1.7-py3-none-any.whl", hash = "sha256:df192d39a4ff8f21b1895d72e6a13f5fcc5099f00fa84384e0ea28c2cc0653ca"}, + {file = "matplotlib_inline-0.1.7.tar.gz", hash = "sha256:8423b23ec666be3d16e16b60bdd8ac4e86e840ebd1dd11a30b9f117f2fa0ab90"}, +] + +[package.dependencies] +traitlets = "*" + +[[package]] +name = "mistune" +version = "3.0.2" +description = "A sane and fast Markdown parser with useful plugins and renderers" +optional = true +python-versions = ">=3.7" +files = [ + {file = "mistune-3.0.2-py3-none-any.whl", hash = "sha256:71481854c30fdbc938963d3605b72501f5c10a9320ecd412c121c163a1c7d205"}, + {file = "mistune-3.0.2.tar.gz", hash = "sha256:fc7f93ded930c92394ef2cb6f04a8aabab4117a91449e72dcc8dfa646a508be8"}, +] + +[[package]] +name = "moorpy" +version = "1.0.2" +description = "A design-oriented mooring system library for Python" +optional = true +python-versions = ">=3.8" +files = [ + {file = "MoorPy-1.0.2-py3-none-any.whl", hash = "sha256:e1cb1746a18678349521655d1a2d4eb703bf8fee0731dc7a920d5229831e3026"}, + {file = "MoorPy-1.0.2.tar.gz", hash = "sha256:29965a0b50bcd2c9d5bfe835b2eff581aeaaf9ccd87087db89054338b92d1847"}, +] + +[package.dependencies] +matplotlib = "*" +numpy = "*" +pyyaml = "*" +scipy = "*" + +[package.extras] +dev = ["pre-commit"] +docs = ["sphinx", "sphinx-rtd-theme"] +test = ["pytest", "pytest-cov", "pytest-xdist"] + +[[package]] +name = "nbclient" +version = "0.10.0" +description = "A client library for executing notebooks. Formerly nbconvert's ExecutePreprocessor." +optional = true +python-versions = ">=3.8.0" +files = [ + {file = "nbclient-0.10.0-py3-none-any.whl", hash = "sha256:f13e3529332a1f1f81d82a53210322476a168bb7090a0289c795fe9cc11c9d3f"}, + {file = "nbclient-0.10.0.tar.gz", hash = "sha256:4b3f1b7dba531e498449c4db4f53da339c91d449dc11e9af3a43b4eb5c5abb09"}, +] + +[package.dependencies] +jupyter-client = ">=6.1.12" +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" +nbformat = ">=5.1" +traitlets = ">=5.4" + +[package.extras] +dev = ["pre-commit"] +docs = ["autodoc-traits", "mock", "moto", "myst-parser", "nbclient[test]", "sphinx (>=1.7)", "sphinx-book-theme", "sphinxcontrib-spelling"] +test = ["flaky", "ipykernel (>=6.19.3)", "ipython", "ipywidgets", "nbconvert (>=7.0.0)", "pytest (>=7.0,<8)", "pytest-asyncio", "pytest-cov (>=4.0)", "testpath", "xmltodict"] + +[[package]] +name = "nbconvert" +version = "7.16.4" +description = "Converting Jupyter Notebooks (.ipynb files) to other formats. Output formats include asciidoc, html, latex, markdown, pdf, py, rst, script. nbconvert can be used both as a Python library (`import nbconvert`) or as a command line tool (invoked as `jupyter nbconvert ...`)." +optional = true +python-versions = ">=3.8" +files = [ + {file = "nbconvert-7.16.4-py3-none-any.whl", hash = "sha256:05873c620fe520b6322bf8a5ad562692343fe3452abda5765c7a34b7d1aa3eb3"}, + {file = "nbconvert-7.16.4.tar.gz", hash = "sha256:86ca91ba266b0a448dc96fa6c5b9d98affabde2867b363258703536807f9f7f4"}, +] + +[package.dependencies] +beautifulsoup4 = "*" +bleach = "!=5.0.0" +defusedxml = "*" +importlib-metadata = {version = ">=3.6", markers = "python_version < \"3.10\""} +jinja2 = ">=3.0" +jupyter-core = ">=4.7" +jupyterlab-pygments = "*" +markupsafe = ">=2.0" +mistune = ">=2.0.3,<4" +nbclient = ">=0.5.0" +nbformat = ">=5.7" +packaging = "*" +pandocfilters = ">=1.4.1" +pygments = ">=2.4.1" +tinycss2 = "*" +traitlets = ">=5.1" + +[package.extras] +all = ["flaky", "ipykernel", "ipython", "ipywidgets (>=7.5)", "myst-parser", "nbsphinx (>=0.2.12)", "playwright", "pydata-sphinx-theme", "pyqtwebengine (>=5.15)", "pytest (>=7)", "sphinx (==5.0.2)", "sphinxcontrib-spelling", "tornado (>=6.1)"] +docs = ["ipykernel", "ipython", "myst-parser", "nbsphinx (>=0.2.12)", "pydata-sphinx-theme", "sphinx (==5.0.2)", "sphinxcontrib-spelling"] +qtpdf = ["pyqtwebengine (>=5.15)"] +qtpng = ["pyqtwebengine (>=5.15)"] +serve = ["tornado (>=6.1)"] +test = ["flaky", "ipykernel", "ipywidgets (>=7.5)", "pytest (>=7)"] +webpdf = ["playwright"] + +[[package]] +name = "nbformat" +version = "5.10.4" +description = "The Jupyter Notebook format" +optional = true +python-versions = ">=3.8" +files = [ + {file = "nbformat-5.10.4-py3-none-any.whl", hash = "sha256:3b48d6c8fbca4b299bf3982ea7db1af21580e4fec269ad087b9e81588891200b"}, + {file = "nbformat-5.10.4.tar.gz", hash = "sha256:322168b14f937a5d11362988ecac2a4952d3d8e3a2cbeb2319584631226d5b3a"}, +] + +[package.dependencies] +fastjsonschema = ">=2.15" +jsonschema = ">=2.6" +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" +traitlets = ">=5.1" + +[package.extras] +docs = ["myst-parser", "pydata-sphinx-theme", "sphinx", "sphinxcontrib-github-alt", "sphinxcontrib-spelling"] +test = ["pep440", "pre-commit", "pytest", "testpath"] + +[[package]] +name = "nest-asyncio" +version = "1.6.0" +description = "Patch asyncio to allow nested event loops" +optional = true +python-versions = ">=3.5" +files = [ + {file = "nest_asyncio-1.6.0-py3-none-any.whl", hash = "sha256:87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c"}, + {file = "nest_asyncio-1.6.0.tar.gz", hash = "sha256:6f172d5449aca15afd6c646851f4e31e02c598d553a667e38cafa997cfec55fe"}, +] + +[[package]] +name = "networkx" +version = "3.2.1" +description = "Python package for creating and manipulating graphs and networks" +optional = true +python-versions = ">=3.9" +files = [ + {file = "networkx-3.2.1-py3-none-any.whl", hash = "sha256:f18c69adc97877c42332c170849c96cefa91881c99a7cb3e95b7c659ebdc1ec2"}, + {file = "networkx-3.2.1.tar.gz", hash = "sha256:9f1bb5cf3409bf324e0a722c20bdb4c20ee39bf1c30ce8ae499c8502b0b5e0c6"}, +] + +[package.extras] +default = ["matplotlib (>=3.5)", "numpy (>=1.22)", "pandas (>=1.4)", "scipy (>=1.9,!=1.11.0,!=1.11.1)"] +developer = ["changelist (==0.4)", "mypy (>=1.1)", "pre-commit (>=3.2)", "rtoml"] +doc = ["nb2plots (>=0.7)", "nbconvert (<7.9)", "numpydoc (>=1.6)", "pillow (>=9.4)", "pydata-sphinx-theme (>=0.14)", "sphinx (>=7)", "sphinx-gallery (>=0.14)", "texext (>=0.6.7)"] +extra = ["lxml (>=4.6)", "pydot (>=1.4.2)", "pygraphviz (>=1.11)", "sympy (>=1.10)"] +test = ["pytest (>=7.2)", "pytest-cov (>=4.0)"] + +[[package]] +name = "notebook" +version = "7.2.0" +description = "Jupyter Notebook - A web-based notebook environment for interactive computing" +optional = true +python-versions = ">=3.8" +files = [ + {file = "notebook-7.2.0-py3-none-any.whl", hash = "sha256:b4752d7407d6c8872fc505df0f00d3cae46e8efb033b822adacbaa3f1f3ce8f5"}, + {file = "notebook-7.2.0.tar.gz", hash = "sha256:34a2ba4b08ad5d19ec930db7484fb79746a1784be9e1a5f8218f9af8656a141f"}, +] + +[package.dependencies] +jupyter-server = ">=2.4.0,<3" +jupyterlab = ">=4.2.0,<4.3" +jupyterlab-server = ">=2.27.1,<3" +notebook-shim = ">=0.2,<0.3" +tornado = ">=6.2.0" + +[package.extras] +dev = ["hatch", "pre-commit"] +docs = ["myst-parser", "nbsphinx", "pydata-sphinx-theme", "sphinx (>=1.3.6)", "sphinxcontrib-github-alt", "sphinxcontrib-spelling"] +test = ["importlib-resources (>=5.0)", "ipykernel", "jupyter-server[test] (>=2.4.0,<3)", "jupyterlab-server[test] (>=2.27.1,<3)", "nbval", "pytest (>=7.0)", "pytest-console-scripts", "pytest-timeout", "pytest-tornasync", "requests"] + +[[package]] +name = "notebook-shim" +version = "0.2.4" +description = "A shim layer for notebook traits and config" +optional = true +python-versions = ">=3.7" +files = [ + {file = "notebook_shim-0.2.4-py3-none-any.whl", hash = "sha256:411a5be4e9dc882a074ccbcae671eda64cceb068767e9a3419096986560e1cef"}, + {file = "notebook_shim-0.2.4.tar.gz", hash = "sha256:b4b2cfa1b65d98307ca24361f5b30fe785b53c3fd07b7a47e89acb5e6ac638cb"}, +] + +[package.dependencies] +jupyter-server = ">=1.8,<3" + +[package.extras] +test = ["pytest", "pytest-console-scripts", "pytest-jupyter", "pytest-tornasync"] + +[[package]] +name = "numpy" +version = "1.26.4" +description = "Fundamental package for array computing in Python" +optional = false +python-versions = ">=3.9" +files = [ + {file = "numpy-1.26.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9ff0f4f29c51e2803569d7a51c2304de5554655a60c5d776e35b4a41413830d0"}, + {file = "numpy-1.26.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2e4ee3380d6de9c9ec04745830fd9e2eccb3e6cf790d39d7b98ffd19b0dd754a"}, + {file = "numpy-1.26.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d209d8969599b27ad20994c8e41936ee0964e6da07478d6c35016bc386b66ad4"}, + {file = "numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ffa75af20b44f8dba823498024771d5ac50620e6915abac414251bd971b4529f"}, + {file = "numpy-1.26.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:62b8e4b1e28009ef2846b4c7852046736bab361f7aeadeb6a5b89ebec3c7055a"}, + {file = "numpy-1.26.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a4abb4f9001ad2858e7ac189089c42178fcce737e4169dc61321660f1a96c7d2"}, + {file = "numpy-1.26.4-cp310-cp310-win32.whl", hash = "sha256:bfe25acf8b437eb2a8b2d49d443800a5f18508cd811fea3181723922a8a82b07"}, + {file = "numpy-1.26.4-cp310-cp310-win_amd64.whl", hash = "sha256:b97fe8060236edf3662adfc2c633f56a08ae30560c56310562cb4f95500022d5"}, + {file = "numpy-1.26.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4c66707fabe114439db9068ee468c26bbdf909cac0fb58686a42a24de1760c71"}, + {file = "numpy-1.26.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:edd8b5fe47dab091176d21bb6de568acdd906d1887a4584a15a9a96a1dca06ef"}, + {file = "numpy-1.26.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ab55401287bfec946ced39700c053796e7cc0e3acbef09993a9ad2adba6ca6e"}, + {file = "numpy-1.26.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:666dbfb6ec68962c033a450943ded891bed2d54e6755e35e5835d63f4f6931d5"}, + {file = "numpy-1.26.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:96ff0b2ad353d8f990b63294c8986f1ec3cb19d749234014f4e7eb0112ceba5a"}, + {file = "numpy-1.26.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:60dedbb91afcbfdc9bc0b1f3f402804070deed7392c23eb7a7f07fa857868e8a"}, + {file = "numpy-1.26.4-cp311-cp311-win32.whl", hash = "sha256:1af303d6b2210eb850fcf03064d364652b7120803a0b872f5211f5234b399f20"}, + {file = "numpy-1.26.4-cp311-cp311-win_amd64.whl", hash = "sha256:cd25bcecc4974d09257ffcd1f098ee778f7834c3ad767fe5db785be9a4aa9cb2"}, + {file = "numpy-1.26.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b3ce300f3644fb06443ee2222c2201dd3a89ea6040541412b8fa189341847218"}, + {file = "numpy-1.26.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:03a8c78d01d9781b28a6989f6fa1bb2c4f2d51201cf99d3dd875df6fbd96b23b"}, + {file = "numpy-1.26.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9fad7dcb1aac3c7f0584a5a8133e3a43eeb2fe127f47e3632d43d677c66c102b"}, + {file = "numpy-1.26.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:675d61ffbfa78604709862923189bad94014bef562cc35cf61d3a07bba02a7ed"}, + {file = "numpy-1.26.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ab47dbe5cc8210f55aa58e4805fe224dac469cde56b9f731a4c098b91917159a"}, + {file = "numpy-1.26.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:1dda2e7b4ec9dd512f84935c5f126c8bd8b9f2fc001e9f54af255e8c5f16b0e0"}, + {file = "numpy-1.26.4-cp312-cp312-win32.whl", hash = "sha256:50193e430acfc1346175fcbdaa28ffec49947a06918b7b92130744e81e640110"}, + {file = "numpy-1.26.4-cp312-cp312-win_amd64.whl", hash = "sha256:08beddf13648eb95f8d867350f6a018a4be2e5ad54c8d8caed89ebca558b2818"}, + {file = "numpy-1.26.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7349ab0fa0c429c82442a27a9673fc802ffdb7c7775fad780226cb234965e53c"}, + {file = "numpy-1.26.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:52b8b60467cd7dd1e9ed082188b4e6bb35aa5cdd01777621a1658910745b90be"}, + {file = "numpy-1.26.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d5241e0a80d808d70546c697135da2c613f30e28251ff8307eb72ba696945764"}, + {file = "numpy-1.26.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f870204a840a60da0b12273ef34f7051e98c3b5961b61b0c2c1be6dfd64fbcd3"}, + {file = "numpy-1.26.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:679b0076f67ecc0138fd2ede3a8fd196dddc2ad3254069bcb9faf9a79b1cebcd"}, + {file = "numpy-1.26.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:47711010ad8555514b434df65f7d7b076bb8261df1ca9bb78f53d3b2db02e95c"}, + {file = "numpy-1.26.4-cp39-cp39-win32.whl", hash = "sha256:a354325ee03388678242a4d7ebcd08b5c727033fcff3b2f536aea978e15ee9e6"}, + {file = "numpy-1.26.4-cp39-cp39-win_amd64.whl", hash = "sha256:3373d5d70a5fe74a2c1bb6d2cfd9609ecf686d47a2d7b1d37a8f3b6bf6003aea"}, + {file = "numpy-1.26.4-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:afedb719a9dcfc7eaf2287b839d8198e06dcd4cb5d276a3df279231138e83d30"}, + {file = "numpy-1.26.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95a7476c59002f2f6c590b9b7b998306fba6a5aa646b1e22ddfeaf8f78c3a29c"}, + {file = "numpy-1.26.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7e50d0a0cc3189f9cb0aeb3a6a6af18c16f59f004b866cd2be1c14b36134a4a0"}, + {file = "numpy-1.26.4.tar.gz", hash = "sha256:2a02aba9ed12e4ac4eb3ea9421c420301a0c6460d9830d74a9df87efa4912010"}, +] + +[[package]] +name = "openmdao" +version = "3.32.0" +description = "OpenMDAO framework infrastructure" +optional = true +python-versions = ">=3.8" +files = [ + {file = "openmdao-3.32.0.tar.gz", hash = "sha256:324f8d900153cea14114a8c2a83aa3d801f7fd5e172c156a85a8208f45c3be49"}, +] + +[package.dependencies] +networkx = ">=2.0" +numpy = "<2" +packaging = "*" +requests = "*" +scipy = "*" + +[package.extras] +all = ["aiounittest", "bokeh (>=2.4.0)", "colorama", "idna (>=3.7)", "ipympl", "ipyparallel", "jax (>=0.4.0)", "jaxlib (>=0.4.0)", "jupyter-book (==0.14)", "matplotlib", "notebook", "num2words", "numpydoc (>=1.1)", "parameterized", "playwright (>=1.20)", "pycodestyle (>=2.4.0)", "pydocstyle (==2.0.0)", "pydoe3", "sphinx-sitemap", "testflo (>=1.3.6)", "websockets (>8)"] +docs = ["idna (>=3.7)", "ipyparallel", "jupyter-book (==0.14)", "matplotlib", "numpydoc (>=1.1)", "sphinx-sitemap"] +doe = ["pydoe3"] +jax = ["jax (>=0.4.0)", "jaxlib (>=0.4.0)"] +notebooks = ["idna (>=3.7)", "ipympl", "notebook"] +test = ["aiounittest", "num2words", "numpydoc (>=1.1)", "parameterized", "playwright (>=1.20)", "pycodestyle (>=2.4.0)", "pydocstyle (==2.0.0)", "testflo (>=1.3.6)", "websockets (>8)"] +visualization = ["bokeh (>=2.4.0)", "colorama", "matplotlib"] + +[[package]] +name = "openpyxl" +version = "3.1.2" +description = "A Python library to read/write Excel 2010 xlsx/xlsm files" +optional = true +python-versions = ">=3.6" +files = [ + {file = "openpyxl-3.1.2-py2.py3-none-any.whl", hash = "sha256:f91456ead12ab3c6c2e9491cf33ba6d08357d802192379bb482f1033ade496f5"}, + {file = "openpyxl-3.1.2.tar.gz", hash = "sha256:a6f5977418eff3b2d5500d54d9db50c8277a368436f4e4f8ddb1be3422870184"}, +] + +[package.dependencies] +et-xmlfile = "*" + +[[package]] +name = "overrides" +version = "7.7.0" +description = "A decorator to automatically detect mismatch when overriding a method." +optional = true +python-versions = ">=3.6" +files = [ + {file = "overrides-7.7.0-py3-none-any.whl", hash = "sha256:c7ed9d062f78b8e4c1a7b70bd8796b35ead4d9f510227ef9c5dc7626c60d7e49"}, + {file = "overrides-7.7.0.tar.gz", hash = "sha256:55158fa3d93b98cc75299b1e67078ad9003ca27945c76162c1c0766d6f91820a"}, +] + +[[package]] +name = "packaging" +version = "24.0" +description = "Core utilities for Python packages" +optional = true +python-versions = ">=3.7" +files = [ + {file = "packaging-24.0-py3-none-any.whl", hash = "sha256:2ddfb553fdf02fb784c234c7ba6ccc288296ceabec964ad2eae3777778130bc5"}, + {file = "packaging-24.0.tar.gz", hash = "sha256:eb82c5e3e56209074766e6885bb04b8c38a0c015d0a30036ebe7ece34c9989e9"}, +] + +[[package]] +name = "pandas" +version = "2.2.2" +description = "Powerful data structures for data analysis, time series, and statistics" +optional = false +python-versions = ">=3.9" +files = [ + {file = "pandas-2.2.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:90c6fca2acf139569e74e8781709dccb6fe25940488755716d1d354d6bc58bce"}, + {file = "pandas-2.2.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4abfe0be0d7221be4f12552995e58723c7422c80a659da13ca382697de830c08"}, + {file = "pandas-2.2.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8635c16bf3d99040fdf3ca3db669a7250ddf49c55dc4aa8fe0ae0fa8d6dcc1f0"}, + {file = "pandas-2.2.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:40ae1dffb3967a52203105a077415a86044a2bea011b5f321c6aa64b379a3f51"}, + {file = "pandas-2.2.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8e5a0b00e1e56a842f922e7fae8ae4077aee4af0acb5ae3622bd4b4c30aedf99"}, + {file = "pandas-2.2.2-cp310-cp310-win_amd64.whl", hash = "sha256:ddf818e4e6c7c6f4f7c8a12709696d193976b591cc7dc50588d3d1a6b5dc8772"}, + {file = "pandas-2.2.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:696039430f7a562b74fa45f540aca068ea85fa34c244d0deee539cb6d70aa288"}, + {file = "pandas-2.2.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8e90497254aacacbc4ea6ae5e7a8cd75629d6ad2b30025a4a8b09aa4faf55151"}, + {file = "pandas-2.2.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:58b84b91b0b9f4bafac2a0ac55002280c094dfc6402402332c0913a59654ab2b"}, + {file = "pandas-2.2.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d2123dc9ad6a814bcdea0f099885276b31b24f7edf40f6cdbc0912672e22eee"}, + {file = "pandas-2.2.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:2925720037f06e89af896c70bca73459d7e6a4be96f9de79e2d440bd499fe0db"}, + {file = "pandas-2.2.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:0cace394b6ea70c01ca1595f839cf193df35d1575986e484ad35c4aeae7266c1"}, + {file = "pandas-2.2.2-cp311-cp311-win_amd64.whl", hash = "sha256:873d13d177501a28b2756375d59816c365e42ed8417b41665f346289adc68d24"}, + {file = "pandas-2.2.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:9dfde2a0ddef507a631dc9dc4af6a9489d5e2e740e226ad426a05cabfbd7c8ef"}, + {file = "pandas-2.2.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1cb51fe389360f3b5a4d57dbd2848a5f033350336ca3b340d1c53a1fad33bcad"}, + {file = "pandas-2.2.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eee3a87076c0756de40b05c5e9a6069c035ba43e8dd71c379e68cab2c20f16ad"}, + {file = "pandas-2.2.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:3e374f59e440d4ab45ca2fffde54b81ac3834cf5ae2cdfa69c90bc03bde04d76"}, + {file = "pandas-2.2.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:43498c0bdb43d55cb162cdc8c06fac328ccb5d2eabe3cadeb3529ae6f0517c32"}, + {file = "pandas-2.2.2-cp312-cp312-win_amd64.whl", hash = "sha256:d187d355ecec3629624fccb01d104da7d7f391db0311145817525281e2804d23"}, + {file = "pandas-2.2.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:0ca6377b8fca51815f382bd0b697a0814c8bda55115678cbc94c30aacbb6eff2"}, + {file = "pandas-2.2.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:001910ad31abc7bf06f49dcc903755d2f7f3a9186c0c040b827e522e9cef0863"}, + {file = "pandas-2.2.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:66b479b0bd07204e37583c191535505410daa8df638fd8e75ae1b383851fe921"}, + {file = "pandas-2.2.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:a77e9d1c386196879aa5eb712e77461aaee433e54c68cf253053a73b7e49c33a"}, + {file = "pandas-2.2.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:92fd6b027924a7e178ac202cfbe25e53368db90d56872d20ffae94b96c7acc57"}, + {file = "pandas-2.2.2-cp39-cp39-win_amd64.whl", hash = "sha256:640cef9aa381b60e296db324337a554aeeb883ead99dc8f6c18e81a93942f5f4"}, + {file = "pandas-2.2.2.tar.gz", hash = "sha256:9e79019aba43cb4fda9e4d983f8e88ca0373adbb697ae9c6c43093218de28b54"}, +] + +[package.dependencies] +numpy = [ + {version = ">=1.22.4", markers = "python_version < \"3.11\""}, + {version = ">=1.23.2", markers = "python_version == \"3.11\""}, + {version = ">=1.26.0", markers = "python_version >= \"3.12\""}, +] +python-dateutil = ">=2.8.2" +pytz = ">=2020.1" +tzdata = ">=2022.7" + +[package.extras] +all = ["PyQt5 (>=5.15.9)", "SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "adbc-driver-sqlite (>=0.8.0)", "beautifulsoup4 (>=4.11.2)", "bottleneck (>=1.3.6)", "dataframe-api-compat (>=0.1.7)", "fastparquet (>=2022.12.0)", "fsspec (>=2022.11.0)", "gcsfs (>=2022.11.0)", "html5lib (>=1.1)", "hypothesis (>=6.46.1)", "jinja2 (>=3.1.2)", "lxml (>=4.9.2)", "matplotlib (>=3.6.3)", "numba (>=0.56.4)", "numexpr (>=2.8.4)", "odfpy (>=1.4.1)", "openpyxl (>=3.1.0)", "pandas-gbq (>=0.19.0)", "psycopg2 (>=2.9.6)", "pyarrow (>=10.0.1)", "pymysql (>=1.0.2)", "pyreadstat (>=1.2.0)", "pytest (>=7.3.2)", "pytest-xdist (>=2.2.0)", "python-calamine (>=0.1.7)", "pyxlsb (>=1.0.10)", "qtpy (>=2.3.0)", "s3fs (>=2022.11.0)", "scipy (>=1.10.0)", "tables (>=3.8.0)", "tabulate (>=0.9.0)", "xarray (>=2022.12.0)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.5)", "zstandard (>=0.19.0)"] +aws = ["s3fs (>=2022.11.0)"] +clipboard = ["PyQt5 (>=5.15.9)", "qtpy (>=2.3.0)"] +compression = ["zstandard (>=0.19.0)"] +computation = ["scipy (>=1.10.0)", "xarray (>=2022.12.0)"] +consortium-standard = ["dataframe-api-compat (>=0.1.7)"] +excel = ["odfpy (>=1.4.1)", "openpyxl (>=3.1.0)", "python-calamine (>=0.1.7)", "pyxlsb (>=1.0.10)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.5)"] +feather = ["pyarrow (>=10.0.1)"] +fss = ["fsspec (>=2022.11.0)"] +gcp = ["gcsfs (>=2022.11.0)", "pandas-gbq (>=0.19.0)"] +hdf5 = ["tables (>=3.8.0)"] +html = ["beautifulsoup4 (>=4.11.2)", "html5lib (>=1.1)", "lxml (>=4.9.2)"] +mysql = ["SQLAlchemy (>=2.0.0)", "pymysql (>=1.0.2)"] +output-formatting = ["jinja2 (>=3.1.2)", "tabulate (>=0.9.0)"] +parquet = ["pyarrow (>=10.0.1)"] +performance = ["bottleneck (>=1.3.6)", "numba (>=0.56.4)", "numexpr (>=2.8.4)"] +plot = ["matplotlib (>=3.6.3)"] +postgresql = ["SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "psycopg2 (>=2.9.6)"] +pyarrow = ["pyarrow (>=10.0.1)"] +spss = ["pyreadstat (>=1.2.0)"] +sql-other = ["SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "adbc-driver-sqlite (>=0.8.0)"] +test = ["hypothesis (>=6.46.1)", "pytest (>=7.3.2)", "pytest-xdist (>=2.2.0)"] +xml = ["lxml (>=4.9.2)"] + +[[package]] +name = "pandocfilters" +version = "1.5.1" +description = "Utilities for writing pandoc filters in python" +optional = true +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "pandocfilters-1.5.1-py2.py3-none-any.whl", hash = "sha256:93be382804a9cdb0a7267585f157e5d1731bbe5545a85b268d6f5fe6232de2bc"}, + {file = "pandocfilters-1.5.1.tar.gz", hash = "sha256:002b4a555ee4ebc03f8b66307e287fa492e4a77b4ea14d3f934328297bb4939e"}, +] + +[[package]] +name = "parso" +version = "0.8.4" +description = "A Python Parser" +optional = true +python-versions = ">=3.6" +files = [ + {file = "parso-0.8.4-py2.py3-none-any.whl", hash = "sha256:a418670a20291dacd2dddc80c377c5c3791378ee1e8d12bffc35420643d43f18"}, + {file = "parso-0.8.4.tar.gz", hash = "sha256:eb3a7b58240fb99099a345571deecc0f9540ea5f4dd2fe14c2a99d6b281ab92d"}, +] + +[package.extras] +qa = ["flake8 (==5.0.4)", "mypy (==0.971)", "types-setuptools (==67.2.0.1)"] +testing = ["docopt", "pytest"] + +[[package]] +name = "patsy" +version = "0.5.6" +description = "A Python package for describing statistical models and for building design matrices." +optional = true +python-versions = "*" +files = [ + {file = "patsy-0.5.6-py2.py3-none-any.whl", hash = "sha256:19056886fd8fa71863fa32f0eb090267f21fb74be00f19f5c70b2e9d76c883c6"}, + {file = "patsy-0.5.6.tar.gz", hash = "sha256:95c6d47a7222535f84bff7f63d7303f2e297747a598db89cf5c67f0c0c7d2cdb"}, +] + +[package.dependencies] +numpy = ">=1.4" +six = "*" + +[package.extras] +test = ["pytest", "pytest-cov", "scipy"] + +[[package]] +name = "pexpect" +version = "4.9.0" +description = "Pexpect allows easy control of interactive console applications." +optional = true +python-versions = "*" +files = [ + {file = "pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523"}, + {file = "pexpect-4.9.0.tar.gz", hash = "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f"}, +] + +[package.dependencies] +ptyprocess = ">=0.5" + +[[package]] +name = "pillow" +version = "10.3.0" +description = "Python Imaging Library (Fork)" +optional = true +python-versions = ">=3.8" +files = [ + {file = "pillow-10.3.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:90b9e29824800e90c84e4022dd5cc16eb2d9605ee13f05d47641eb183cd73d45"}, + {file = "pillow-10.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a2c405445c79c3f5a124573a051062300936b0281fee57637e706453e452746c"}, + {file = "pillow-10.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:78618cdbccaa74d3f88d0ad6cb8ac3007f1a6fa5c6f19af64b55ca170bfa1edf"}, + {file = "pillow-10.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:261ddb7ca91fcf71757979534fb4c128448b5b4c55cb6152d280312062f69599"}, + {file = "pillow-10.3.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:ce49c67f4ea0609933d01c0731b34b8695a7a748d6c8d186f95e7d085d2fe475"}, + {file = "pillow-10.3.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:b14f16f94cbc61215115b9b1236f9c18403c15dd3c52cf629072afa9d54c1cbf"}, + {file = "pillow-10.3.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d33891be6df59d93df4d846640f0e46f1a807339f09e79a8040bc887bdcd7ed3"}, + {file = "pillow-10.3.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b50811d664d392f02f7761621303eba9d1b056fb1868c8cdf4231279645c25f5"}, + {file = "pillow-10.3.0-cp310-cp310-win32.whl", hash = "sha256:ca2870d5d10d8726a27396d3ca4cf7976cec0f3cb706debe88e3a5bd4610f7d2"}, + {file = "pillow-10.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:f0d0591a0aeaefdaf9a5e545e7485f89910c977087e7de2b6c388aec32011e9f"}, + {file = "pillow-10.3.0-cp310-cp310-win_arm64.whl", hash = "sha256:ccce24b7ad89adb5a1e34a6ba96ac2530046763912806ad4c247356a8f33a67b"}, + {file = "pillow-10.3.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:5f77cf66e96ae734717d341c145c5949c63180842a545c47a0ce7ae52ca83795"}, + {file = "pillow-10.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e4b878386c4bf293578b48fc570b84ecfe477d3b77ba39a6e87150af77f40c57"}, + {file = "pillow-10.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fdcbb4068117dfd9ce0138d068ac512843c52295ed996ae6dd1faf537b6dbc27"}, + {file = "pillow-10.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9797a6c8fe16f25749b371c02e2ade0efb51155e767a971c61734b1bf6293994"}, + {file = "pillow-10.3.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:9e91179a242bbc99be65e139e30690e081fe6cb91a8e77faf4c409653de39451"}, + {file = "pillow-10.3.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:1b87bd9d81d179bd8ab871603bd80d8645729939f90b71e62914e816a76fc6bd"}, + {file = "pillow-10.3.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:81d09caa7b27ef4e61cb7d8fbf1714f5aec1c6b6c5270ee53504981e6e9121ad"}, + {file = "pillow-10.3.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:048ad577748b9fa4a99a0548c64f2cb8d672d5bf2e643a739ac8faff1164238c"}, + {file = "pillow-10.3.0-cp311-cp311-win32.whl", hash = "sha256:7161ec49ef0800947dc5570f86568a7bb36fa97dd09e9827dc02b718c5643f09"}, + {file = "pillow-10.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:8eb0908e954d093b02a543dc963984d6e99ad2b5e36503d8a0aaf040505f747d"}, + {file = "pillow-10.3.0-cp311-cp311-win_arm64.whl", hash = "sha256:4e6f7d1c414191c1199f8996d3f2282b9ebea0945693fb67392c75a3a320941f"}, + {file = "pillow-10.3.0-cp312-cp312-macosx_10_10_x86_64.whl", hash = "sha256:e46f38133e5a060d46bd630faa4d9fa0202377495df1f068a8299fd78c84de84"}, + {file = "pillow-10.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:50b8eae8f7334ec826d6eeffaeeb00e36b5e24aa0b9df322c247539714c6df19"}, + {file = "pillow-10.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9d3bea1c75f8c53ee4d505c3e67d8c158ad4df0d83170605b50b64025917f338"}, + {file = "pillow-10.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:19aeb96d43902f0a783946a0a87dbdad5c84c936025b8419da0a0cd7724356b1"}, + {file = "pillow-10.3.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:74d28c17412d9caa1066f7a31df8403ec23d5268ba46cd0ad2c50fb82ae40462"}, + {file = "pillow-10.3.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:ff61bfd9253c3915e6d41c651d5f962da23eda633cf02262990094a18a55371a"}, + {file = "pillow-10.3.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d886f5d353333b4771d21267c7ecc75b710f1a73d72d03ca06df49b09015a9ef"}, + {file = "pillow-10.3.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4b5ec25d8b17217d635f8935dbc1b9aa5907962fae29dff220f2659487891cd3"}, + {file = "pillow-10.3.0-cp312-cp312-win32.whl", hash = "sha256:51243f1ed5161b9945011a7360e997729776f6e5d7005ba0c6879267d4c5139d"}, + {file = "pillow-10.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:412444afb8c4c7a6cc11a47dade32982439925537e483be7c0ae0cf96c4f6a0b"}, + {file = "pillow-10.3.0-cp312-cp312-win_arm64.whl", hash = "sha256:798232c92e7665fe82ac085f9d8e8ca98826f8e27859d9a96b41d519ecd2e49a"}, + {file = "pillow-10.3.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:4eaa22f0d22b1a7e93ff0a596d57fdede2e550aecffb5a1ef1106aaece48e96b"}, + {file = "pillow-10.3.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:cd5e14fbf22a87321b24c88669aad3a51ec052eb145315b3da3b7e3cc105b9a2"}, + {file = "pillow-10.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1530e8f3a4b965eb6a7785cf17a426c779333eb62c9a7d1bbcf3ffd5bf77a4aa"}, + {file = "pillow-10.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d512aafa1d32efa014fa041d38868fda85028e3f930a96f85d49c7d8ddc0383"}, + {file = "pillow-10.3.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:339894035d0ede518b16073bdc2feef4c991ee991a29774b33e515f1d308e08d"}, + {file = "pillow-10.3.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:aa7e402ce11f0885305bfb6afb3434b3cd8f53b563ac065452d9d5654c7b86fd"}, + {file = "pillow-10.3.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:0ea2a783a2bdf2a561808fe4a7a12e9aa3799b701ba305de596bc48b8bdfce9d"}, + {file = "pillow-10.3.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:c78e1b00a87ce43bb37642c0812315b411e856a905d58d597750eb79802aaaa3"}, + {file = "pillow-10.3.0-cp38-cp38-win32.whl", hash = "sha256:72d622d262e463dfb7595202d229f5f3ab4b852289a1cd09650362db23b9eb0b"}, + {file = "pillow-10.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:2034f6759a722da3a3dbd91a81148cf884e91d1b747992ca288ab88c1de15999"}, + {file = "pillow-10.3.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:2ed854e716a89b1afcedea551cd85f2eb2a807613752ab997b9974aaa0d56936"}, + {file = "pillow-10.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:dc1a390a82755a8c26c9964d457d4c9cbec5405896cba94cf51f36ea0d855002"}, + {file = "pillow-10.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4203efca580f0dd6f882ca211f923168548f7ba334c189e9eab1178ab840bf60"}, + {file = "pillow-10.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3102045a10945173d38336f6e71a8dc71bcaeed55c3123ad4af82c52807b9375"}, + {file = "pillow-10.3.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:6fb1b30043271ec92dc65f6d9f0b7a830c210b8a96423074b15c7bc999975f57"}, + {file = "pillow-10.3.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:1dfc94946bc60ea375cc39cff0b8da6c7e5f8fcdc1d946beb8da5c216156ddd8"}, + {file = "pillow-10.3.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b09b86b27a064c9624d0a6c54da01c1beaf5b6cadfa609cf63789b1d08a797b9"}, + {file = "pillow-10.3.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d3b2348a78bc939b4fed6552abfd2e7988e0f81443ef3911a4b8498ca084f6eb"}, + {file = "pillow-10.3.0-cp39-cp39-win32.whl", hash = "sha256:45ebc7b45406febf07fef35d856f0293a92e7417ae7933207e90bf9090b70572"}, + {file = "pillow-10.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:0ba26351b137ca4e0db0342d5d00d2e355eb29372c05afd544ebf47c0956ffeb"}, + {file = "pillow-10.3.0-cp39-cp39-win_arm64.whl", hash = "sha256:50fd3f6b26e3441ae07b7c979309638b72abc1a25da31a81a7fbd9495713ef4f"}, + {file = "pillow-10.3.0-pp310-pypy310_pp73-macosx_10_10_x86_64.whl", hash = "sha256:6b02471b72526ab8a18c39cb7967b72d194ec53c1fd0a70b050565a0f366d355"}, + {file = "pillow-10.3.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:8ab74c06ffdab957d7670c2a5a6e1a70181cd10b727cd788c4dd9005b6a8acd9"}, + {file = "pillow-10.3.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:048eeade4c33fdf7e08da40ef402e748df113fd0b4584e32c4af74fe78baaeb2"}, + {file = "pillow-10.3.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e2ec1e921fd07c7cda7962bad283acc2f2a9ccc1b971ee4b216b75fad6f0463"}, + {file = "pillow-10.3.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:4c8e73e99da7db1b4cad7f8d682cf6abad7844da39834c288fbfa394a47bbced"}, + {file = "pillow-10.3.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:16563993329b79513f59142a6b02055e10514c1a8e86dca8b48a893e33cf91e3"}, + {file = "pillow-10.3.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:dd78700f5788ae180b5ee8902c6aea5a5726bac7c364b202b4b3e3ba2d293170"}, + {file = "pillow-10.3.0-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:aff76a55a8aa8364d25400a210a65ff59d0168e0b4285ba6bf2bd83cf675ba32"}, + {file = "pillow-10.3.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:b7bc2176354defba3edc2b9a777744462da2f8e921fbaf61e52acb95bafa9828"}, + {file = "pillow-10.3.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:793b4e24db2e8742ca6423d3fde8396db336698c55cd34b660663ee9e45ed37f"}, + {file = "pillow-10.3.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d93480005693d247f8346bc8ee28c72a2191bdf1f6b5db469c096c0c867ac015"}, + {file = "pillow-10.3.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:c83341b89884e2b2e55886e8fbbf37c3fa5efd6c8907124aeb72f285ae5696e5"}, + {file = "pillow-10.3.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:1a1d1915db1a4fdb2754b9de292642a39a7fb28f1736699527bb649484fb966a"}, + {file = "pillow-10.3.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a0eaa93d054751ee9964afa21c06247779b90440ca41d184aeb5d410f20ff591"}, + {file = "pillow-10.3.0.tar.gz", hash = "sha256:9d2455fbf44c914840c793e89aa82d0e1763a14253a000743719ae5946814b2d"}, +] + +[package.extras] +docs = ["furo", "olefile", "sphinx (>=2.4)", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-removed-in", "sphinxext-opengraph"] +fpx = ["olefile"] +mic = ["olefile"] +tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout"] +typing = ["typing-extensions"] +xmp = ["defusedxml"] + +[[package]] +name = "platformdirs" +version = "4.2.2" +description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." +optional = true +python-versions = ">=3.8" +files = [ + {file = "platformdirs-4.2.2-py3-none-any.whl", hash = "sha256:2d7a1657e36a80ea911db832a8a6ece5ee53d8de21edd5cc5879af6530b1bfee"}, + {file = "platformdirs-4.2.2.tar.gz", hash = "sha256:38b7b51f512eed9e84a22788b4bce1de17c0adb134d6becb09836e37d8654cd3"}, +] + +[package.extras] +docs = ["furo (>=2023.9.10)", "proselint (>=0.13)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)"] +type = ["mypy (>=1.8)"] + +[[package]] +name = "prometheus-client" +version = "0.20.0" +description = "Python client for the Prometheus monitoring system." +optional = true +python-versions = ">=3.8" +files = [ + {file = "prometheus_client-0.20.0-py3-none-any.whl", hash = "sha256:cde524a85bce83ca359cc837f28b8c0db5cac7aa653a588fd7e84ba061c329e7"}, + {file = "prometheus_client-0.20.0.tar.gz", hash = "sha256:287629d00b147a32dcb2be0b9df905da599b2d82f80377083ec8463309a4bb89"}, +] + +[package.extras] +twisted = ["twisted"] + +[[package]] +name = "prompt-toolkit" +version = "3.0.43" +description = "Library for building powerful interactive command lines in Python" +optional = true +python-versions = ">=3.7.0" +files = [ + {file = "prompt_toolkit-3.0.43-py3-none-any.whl", hash = "sha256:a11a29cb3bf0a28a387fe5122cdb649816a957cd9261dcedf8c9f1fef33eacf6"}, + {file = "prompt_toolkit-3.0.43.tar.gz", hash = "sha256:3527b7af26106cbc65a040bcc84839a3566ec1b051bb0bfe953631e704b0ff7d"}, +] + +[package.dependencies] +wcwidth = "*" + +[[package]] +name = "psutil" +version = "5.9.8" +description = "Cross-platform lib for process and system monitoring in Python." +optional = true +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" +files = [ + {file = "psutil-5.9.8-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:26bd09967ae00920df88e0352a91cff1a78f8d69b3ecabbfe733610c0af486c8"}, + {file = "psutil-5.9.8-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:05806de88103b25903dff19bb6692bd2e714ccf9e668d050d144012055cbca73"}, + {file = "psutil-5.9.8-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:611052c4bc70432ec770d5d54f64206aa7203a101ec273a0cd82418c86503bb7"}, + {file = "psutil-5.9.8-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:50187900d73c1381ba1454cf40308c2bf6f34268518b3f36a9b663ca87e65e36"}, + {file = "psutil-5.9.8-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:02615ed8c5ea222323408ceba16c60e99c3f91639b07da6373fb7e6539abc56d"}, + {file = "psutil-5.9.8-cp27-none-win32.whl", hash = "sha256:36f435891adb138ed3c9e58c6af3e2e6ca9ac2f365efe1f9cfef2794e6c93b4e"}, + {file = "psutil-5.9.8-cp27-none-win_amd64.whl", hash = "sha256:bd1184ceb3f87651a67b2708d4c3338e9b10c5df903f2e3776b62303b26cb631"}, + {file = "psutil-5.9.8-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:aee678c8720623dc456fa20659af736241f575d79429a0e5e9cf88ae0605cc81"}, + {file = "psutil-5.9.8-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8cb6403ce6d8e047495a701dc7c5bd788add903f8986d523e3e20b98b733e421"}, + {file = "psutil-5.9.8-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d06016f7f8625a1825ba3732081d77c94589dca78b7a3fc072194851e88461a4"}, + {file = "psutil-5.9.8-cp36-cp36m-win32.whl", hash = "sha256:7d79560ad97af658a0f6adfef8b834b53f64746d45b403f225b85c5c2c140eee"}, + {file = "psutil-5.9.8-cp36-cp36m-win_amd64.whl", hash = "sha256:27cc40c3493bb10de1be4b3f07cae4c010ce715290a5be22b98493509c6299e2"}, + {file = "psutil-5.9.8-cp37-abi3-win32.whl", hash = "sha256:bc56c2a1b0d15aa3eaa5a60c9f3f8e3e565303b465dbf57a1b730e7a2b9844e0"}, + {file = "psutil-5.9.8-cp37-abi3-win_amd64.whl", hash = "sha256:8db4c1b57507eef143a15a6884ca10f7c73876cdf5d51e713151c1236a0e68cf"}, + {file = "psutil-5.9.8-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:d16bbddf0693323b8c6123dd804100241da461e41d6e332fb0ba6058f630f8c8"}, + {file = "psutil-5.9.8.tar.gz", hash = "sha256:6be126e3225486dff286a8fb9a06246a5253f4c7c53b475ea5f5ac934e64194c"}, +] + +[package.extras] +test = ["enum34", "ipaddress", "mock", "pywin32", "wmi"] + +[[package]] +name = "ptyprocess" +version = "0.7.0" +description = "Run a subprocess in a pseudo terminal" +optional = true +python-versions = "*" +files = [ + {file = "ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35"}, + {file = "ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220"}, +] + +[[package]] +name = "pure-eval" +version = "0.2.2" +description = "Safely evaluate AST nodes without side effects" +optional = true +python-versions = "*" +files = [ + {file = "pure_eval-0.2.2-py3-none-any.whl", hash = "sha256:01eaab343580944bc56080ebe0a674b39ec44a945e6d09ba7db3cb8cec289350"}, + {file = "pure_eval-0.2.2.tar.gz", hash = "sha256:2b45320af6dfaa1750f543d714b6d1c520a1688dec6fd24d339063ce0aaa9ac3"}, +] + +[package.extras] +tests = ["pytest"] + +[[package]] +name = "pycparser" +version = "2.22" +description = "C parser in Python" +optional = true +python-versions = ">=3.8" +files = [ + {file = "pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc"}, + {file = "pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6"}, +] + +[[package]] +name = "pydoe3" +version = "1.0.2" +description = "Design of experiments for Python" +optional = true +python-versions = "*" +files = [ + {file = "pydoe3-1.0.2-py2.py3-none-any.whl", hash = "sha256:09925e3d445f40aa720ed81bb8c816d77aaae80e2521bb285ed07244e17e54e9"}, + {file = "pydoe3-1.0.2.tar.gz", hash = "sha256:69ffd88aa81ef9df6fdf0cc7b64748ee7eb14895939c50dfd22a0e0e6a718df7"}, +] + +[package.dependencies] +numpy = "*" +scipy = "*" + +[[package]] +name = "pygments" +version = "2.18.0" +description = "Pygments is a syntax highlighting package written in Python." +optional = true +python-versions = ">=3.8" +files = [ + {file = "pygments-2.18.0-py3-none-any.whl", hash = "sha256:b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a"}, + {file = "pygments-2.18.0.tar.gz", hash = "sha256:786ff802f32e91311bff3889f6e9a86e81505fe99f2735bb6d60ae0c5004f199"}, +] + +[package.extras] +windows-terminal = ["colorama (>=0.4.6)"] + +[[package]] +name = "pyparsing" +version = "3.1.2" +description = "pyparsing module - Classes and methods to define and execute parsing grammars" +optional = true +python-versions = ">=3.6.8" +files = [ + {file = "pyparsing-3.1.2-py3-none-any.whl", hash = "sha256:f9db75911801ed778fe61bb643079ff86601aca99fcae6345aa67292038fb742"}, + {file = "pyparsing-3.1.2.tar.gz", hash = "sha256:a1bac0ce561155ecc3ed78ca94d3c9378656ad4c94c1270de543f621420f94ad"}, +] + +[package.extras] +diagrams = ["jinja2", "railroad-diagrams"] + +[[package]] +name = "python-benedict" +version = "0.33.2" +description = "python-benedict is a dict subclass with keylist/keypath/keyattr support, normalized I/O operations (base64, csv, ini, json, pickle, plist, query-string, toml, xls, xml, yaml) and many utilities... for humans, obviously." +optional = true +python-versions = "*" +files = [ + {file = "python-benedict-0.33.2.tar.gz", hash = "sha256:662de43bffb4e127da2056447f8ddd7f6f5c89b72dd66d289cf9abd1cc2720c8"}, + {file = "python_benedict-0.33.2-py3-none-any.whl", hash = "sha256:50a69b601b34d4ad7b67fe94e3266ec05046bc547a4132fe43fd8fbd41aeefaa"}, +] + +[package.dependencies] +python-fsutil = ">=0.9.3,<1.0.0" +python-slugify = ">=7.0.0,<9.0.0" +requests = ">=2.26.0,<3.0.0" + +[package.extras] +all = ["python-benedict[io,parse,s3]"] +html = ["beautifulsoup4 (>=4.12.0,<5.0.0)", "python-benedict[xml]"] +io = ["python-benedict[html,toml,xls,xml,yaml]"] +parse = ["ftfy (>=6.0.0,<7.0.0)", "mailchecker (>=4.1.0,<7.0.0)", "phonenumbers (>=8.12.0,<9.0.0)", "python-dateutil (>=2.8.0,<3.0.0)"] +s3 = ["boto3 (>=1.24.89,<2.0.0)"] +toml = ["toml (>=0.10.2,<1.0.0)"] +xls = ["openpyxl (>=3.0.0,<4.0.0)", "xlrd (>=2.0.0,<3.0.0)"] +xml = ["xmltodict (>=0.12.0,<1.0.0)"] +yaml = ["pyyaml (>=6.0,<7.0)"] + +[[package]] +name = "python-dateutil" +version = "2.9.0.post0" +description = "Extensions to the standard Python datetime module" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +files = [ + {file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"}, + {file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"}, +] + +[package.dependencies] +six = ">=1.5" + +[[package]] +name = "python-fsutil" +version = "0.14.1" +description = "high-level file-system operations for lazy devs." +optional = true +python-versions = "*" +files = [ + {file = "python-fsutil-0.14.1.tar.gz", hash = "sha256:8fb204fa8059f37bdeee8a1dc0fff010170202ea47c4225ee71bb3c26f3997be"}, + {file = "python_fsutil-0.14.1-py3-none-any.whl", hash = "sha256:0d45e623f0f4403f674bdd8ae7aa7d24a4b3132ea45c65416bd2865e6b20b035"}, +] + +[[package]] +name = "python-json-logger" +version = "2.0.7" +description = "A python library adding a json log formatter" +optional = true +python-versions = ">=3.6" +files = [ + {file = "python-json-logger-2.0.7.tar.gz", hash = "sha256:23e7ec02d34237c5aa1e29a070193a4ea87583bb4e7f8fd06d3de8264c4b2e1c"}, + {file = "python_json_logger-2.0.7-py3-none-any.whl", hash = "sha256:f380b826a991ebbe3de4d897aeec42760035ac760345e57b812938dc8b35e2bd"}, +] + +[[package]] +name = "python-slugify" +version = "8.0.4" +description = "A Python slugify application that also handles Unicode" +optional = true +python-versions = ">=3.7" +files = [ + {file = "python-slugify-8.0.4.tar.gz", hash = "sha256:59202371d1d05b54a9e7720c5e038f928f45daaffe41dd10822f3907b937c856"}, + {file = "python_slugify-8.0.4-py2.py3-none-any.whl", hash = "sha256:276540b79961052b66b7d116620b36518847f52d5fd9e3a70164fc8c50faa6b8"}, +] + +[package.dependencies] +text-unidecode = ">=1.3" + +[package.extras] +unidecode = ["Unidecode (>=1.1.1)"] + +[[package]] +name = "pytz" +version = "2024.1" +description = "World timezone definitions, modern and historical" +optional = false +python-versions = "*" +files = [ + {file = "pytz-2024.1-py2.py3-none-any.whl", hash = "sha256:328171f4e3623139da4983451950b28e95ac706e13f3f2630a879749e7a8b319"}, + {file = "pytz-2024.1.tar.gz", hash = "sha256:2a29735ea9c18baf14b448846bde5a48030ed267578472d8955cd0e7443a9812"}, +] + +[[package]] +name = "pywin32" +version = "306" +description = "Python for Window Extensions" +optional = true +python-versions = "*" +files = [ + {file = "pywin32-306-cp310-cp310-win32.whl", hash = "sha256:06d3420a5155ba65f0b72f2699b5bacf3109f36acbe8923765c22938a69dfc8d"}, + {file = "pywin32-306-cp310-cp310-win_amd64.whl", hash = "sha256:84f4471dbca1887ea3803d8848a1616429ac94a4a8d05f4bc9c5dcfd42ca99c8"}, + {file = "pywin32-306-cp311-cp311-win32.whl", hash = "sha256:e65028133d15b64d2ed8f06dd9fbc268352478d4f9289e69c190ecd6818b6407"}, + {file = "pywin32-306-cp311-cp311-win_amd64.whl", hash = "sha256:a7639f51c184c0272e93f244eb24dafca9b1855707d94c192d4a0b4c01e1100e"}, + {file = "pywin32-306-cp311-cp311-win_arm64.whl", hash = "sha256:70dba0c913d19f942a2db25217d9a1b726c278f483a919f1abfed79c9cf64d3a"}, + {file = "pywin32-306-cp312-cp312-win32.whl", hash = "sha256:383229d515657f4e3ed1343da8be101000562bf514591ff383ae940cad65458b"}, + {file = "pywin32-306-cp312-cp312-win_amd64.whl", hash = "sha256:37257794c1ad39ee9be652da0462dc2e394c8159dfd913a8a4e8eb6fd346da0e"}, + {file = "pywin32-306-cp312-cp312-win_arm64.whl", hash = "sha256:5821ec52f6d321aa59e2db7e0a35b997de60c201943557d108af9d4ae1ec7040"}, + {file = "pywin32-306-cp37-cp37m-win32.whl", hash = "sha256:1c73ea9a0d2283d889001998059f5eaaba3b6238f767c9cf2833b13e6a685f65"}, + {file = "pywin32-306-cp37-cp37m-win_amd64.whl", hash = "sha256:72c5f621542d7bdd4fdb716227be0dd3f8565c11b280be6315b06ace35487d36"}, + {file = "pywin32-306-cp38-cp38-win32.whl", hash = "sha256:e4c092e2589b5cf0d365849e73e02c391c1349958c5ac3e9d5ccb9a28e017b3a"}, + {file = "pywin32-306-cp38-cp38-win_amd64.whl", hash = "sha256:e8ac1ae3601bee6ca9f7cb4b5363bf1c0badb935ef243c4733ff9a393b1690c0"}, + {file = "pywin32-306-cp39-cp39-win32.whl", hash = "sha256:e25fd5b485b55ac9c057f67d94bc203f3f6595078d1fb3b458c9c28b7153a802"}, + {file = "pywin32-306-cp39-cp39-win_amd64.whl", hash = "sha256:39b61c15272833b5c329a2989999dcae836b1eed650252ab1b7bfbe1d59f30f4"}, +] + +[[package]] +name = "pywinpty" +version = "2.0.13" +description = "Pseudo terminal support for Windows from Python." +optional = true +python-versions = ">=3.8" +files = [ + {file = "pywinpty-2.0.13-cp310-none-win_amd64.whl", hash = "sha256:697bff211fb5a6508fee2dc6ff174ce03f34a9a233df9d8b5fe9c8ce4d5eaf56"}, + {file = "pywinpty-2.0.13-cp311-none-win_amd64.whl", hash = "sha256:b96fb14698db1284db84ca38c79f15b4cfdc3172065b5137383910567591fa99"}, + {file = "pywinpty-2.0.13-cp312-none-win_amd64.whl", hash = "sha256:2fd876b82ca750bb1333236ce98488c1be96b08f4f7647cfdf4129dfad83c2d4"}, + {file = "pywinpty-2.0.13-cp38-none-win_amd64.whl", hash = "sha256:61d420c2116c0212808d31625611b51caf621fe67f8a6377e2e8b617ea1c1f7d"}, + {file = "pywinpty-2.0.13-cp39-none-win_amd64.whl", hash = "sha256:71cb613a9ee24174730ac7ae439fd179ca34ccb8c5349e8d7b72ab5dea2c6f4b"}, + {file = "pywinpty-2.0.13.tar.gz", hash = "sha256:c34e32351a3313ddd0d7da23d27f835c860d32fe4ac814d372a3ea9594f41dde"}, +] + +[[package]] +name = "pyyaml" +version = "6.0.1" +description = "YAML parser and emitter for Python" +optional = true +python-versions = ">=3.6" +files = [ + {file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"}, + {file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, + {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, + {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, + {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, + {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, + {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, + {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, + {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, + {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, + {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, + {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win32.whl", hash = "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa"}, + {file = "PyYAML-6.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win32.whl", hash = "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867"}, + {file = "PyYAML-6.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, + {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, + {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, + {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, + {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, + {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, + {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, + {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, +] + +[[package]] +name = "pyzmq" +version = "26.0.3" +description = "Python bindings for 0MQ" +optional = true +python-versions = ">=3.7" +files = [ + {file = "pyzmq-26.0.3-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:44dd6fc3034f1eaa72ece33588867df9e006a7303725a12d64c3dff92330f625"}, + {file = "pyzmq-26.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:acb704195a71ac5ea5ecf2811c9ee19ecdc62b91878528302dd0be1b9451cc90"}, + {file = "pyzmq-26.0.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5dbb9c997932473a27afa93954bb77a9f9b786b4ccf718d903f35da3232317de"}, + {file = "pyzmq-26.0.3-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6bcb34f869d431799c3ee7d516554797f7760cb2198ecaa89c3f176f72d062be"}, + {file = "pyzmq-26.0.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:38ece17ec5f20d7d9b442e5174ae9f020365d01ba7c112205a4d59cf19dc38ee"}, + {file = "pyzmq-26.0.3-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:ba6e5e6588e49139a0979d03a7deb9c734bde647b9a8808f26acf9c547cab1bf"}, + {file = "pyzmq-26.0.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:3bf8b000a4e2967e6dfdd8656cd0757d18c7e5ce3d16339e550bd462f4857e59"}, + {file = "pyzmq-26.0.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:2136f64fbb86451dbbf70223635a468272dd20075f988a102bf8a3f194a411dc"}, + {file = "pyzmq-26.0.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:e8918973fbd34e7814f59143c5f600ecd38b8038161239fd1a3d33d5817a38b8"}, + {file = "pyzmq-26.0.3-cp310-cp310-win32.whl", hash = "sha256:0aaf982e68a7ac284377d051c742610220fd06d330dcd4c4dbb4cdd77c22a537"}, + {file = "pyzmq-26.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:f1a9b7d00fdf60b4039f4455afd031fe85ee8305b019334b72dcf73c567edc47"}, + {file = "pyzmq-26.0.3-cp310-cp310-win_arm64.whl", hash = "sha256:80b12f25d805a919d53efc0a5ad7c0c0326f13b4eae981a5d7b7cc343318ebb7"}, + {file = "pyzmq-26.0.3-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:a72a84570f84c374b4c287183debc776dc319d3e8ce6b6a0041ce2e400de3f32"}, + {file = "pyzmq-26.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7ca684ee649b55fd8f378127ac8462fb6c85f251c2fb027eb3c887e8ee347bcd"}, + {file = "pyzmq-26.0.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e222562dc0f38571c8b1ffdae9d7adb866363134299264a1958d077800b193b7"}, + {file = "pyzmq-26.0.3-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f17cde1db0754c35a91ac00b22b25c11da6eec5746431d6e5092f0cd31a3fea9"}, + {file = "pyzmq-26.0.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b7c0c0b3244bb2275abe255d4a30c050d541c6cb18b870975553f1fb6f37527"}, + {file = "pyzmq-26.0.3-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:ac97a21de3712afe6a6c071abfad40a6224fd14fa6ff0ff8d0c6e6cd4e2f807a"}, + {file = "pyzmq-26.0.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:88b88282e55fa39dd556d7fc04160bcf39dea015f78e0cecec8ff4f06c1fc2b5"}, + {file = "pyzmq-26.0.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:72b67f966b57dbd18dcc7efbc1c7fc9f5f983e572db1877081f075004614fcdd"}, + {file = "pyzmq-26.0.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f4b6cecbbf3b7380f3b61de3a7b93cb721125dc125c854c14ddc91225ba52f83"}, + {file = "pyzmq-26.0.3-cp311-cp311-win32.whl", hash = "sha256:eed56b6a39216d31ff8cd2f1d048b5bf1700e4b32a01b14379c3b6dde9ce3aa3"}, + {file = "pyzmq-26.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:3191d312c73e3cfd0f0afdf51df8405aafeb0bad71e7ed8f68b24b63c4f36500"}, + {file = "pyzmq-26.0.3-cp311-cp311-win_arm64.whl", hash = "sha256:b6907da3017ef55139cf0e417c5123a84c7332520e73a6902ff1f79046cd3b94"}, + {file = "pyzmq-26.0.3-cp312-cp312-macosx_10_15_universal2.whl", hash = "sha256:068ca17214038ae986d68f4a7021f97e187ed278ab6dccb79f837d765a54d753"}, + {file = "pyzmq-26.0.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:7821d44fe07335bea256b9f1f41474a642ca55fa671dfd9f00af8d68a920c2d4"}, + {file = "pyzmq-26.0.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eeb438a26d87c123bb318e5f2b3d86a36060b01f22fbdffd8cf247d52f7c9a2b"}, + {file = "pyzmq-26.0.3-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:69ea9d6d9baa25a4dc9cef5e2b77b8537827b122214f210dd925132e34ae9b12"}, + {file = "pyzmq-26.0.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7daa3e1369355766dea11f1d8ef829905c3b9da886ea3152788dc25ee6079e02"}, + {file = "pyzmq-26.0.3-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:6ca7a9a06b52d0e38ccf6bca1aeff7be178917893f3883f37b75589d42c4ac20"}, + {file = "pyzmq-26.0.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:1b7d0e124948daa4d9686d421ef5087c0516bc6179fdcf8828b8444f8e461a77"}, + {file = "pyzmq-26.0.3-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:e746524418b70f38550f2190eeee834db8850088c834d4c8406fbb9bc1ae10b2"}, + {file = "pyzmq-26.0.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:6b3146f9ae6af82c47a5282ac8803523d381b3b21caeae0327ed2f7ecb718798"}, + {file = "pyzmq-26.0.3-cp312-cp312-win32.whl", hash = "sha256:2b291d1230845871c00c8462c50565a9cd6026fe1228e77ca934470bb7d70ea0"}, + {file = "pyzmq-26.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:926838a535c2c1ea21c903f909a9a54e675c2126728c21381a94ddf37c3cbddf"}, + {file = "pyzmq-26.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:5bf6c237f8c681dfb91b17f8435b2735951f0d1fad10cc5dfd96db110243370b"}, + {file = "pyzmq-26.0.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0c0991f5a96a8e620f7691e61178cd8f457b49e17b7d9cfa2067e2a0a89fc1d5"}, + {file = "pyzmq-26.0.3-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:dbf012d8fcb9f2cf0643b65df3b355fdd74fc0035d70bb5c845e9e30a3a4654b"}, + {file = "pyzmq-26.0.3-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:01fbfbeb8249a68d257f601deb50c70c929dc2dfe683b754659569e502fbd3aa"}, + {file = "pyzmq-26.0.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c8eb19abe87029c18f226d42b8a2c9efdd139d08f8bf6e085dd9075446db450"}, + {file = "pyzmq-26.0.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:5344b896e79800af86ad643408ca9aa303a017f6ebff8cee5a3163c1e9aec987"}, + {file = "pyzmq-26.0.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:204e0f176fd1d067671157d049466869b3ae1fc51e354708b0dc41cf94e23a3a"}, + {file = "pyzmq-26.0.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:a42db008d58530efa3b881eeee4991146de0b790e095f7ae43ba5cc612decbc5"}, + {file = "pyzmq-26.0.3-cp37-cp37m-win32.whl", hash = "sha256:8d7a498671ca87e32b54cb47c82a92b40130a26c5197d392720a1bce1b3c77cf"}, + {file = "pyzmq-26.0.3-cp37-cp37m-win_amd64.whl", hash = "sha256:3b4032a96410bdc760061b14ed6a33613ffb7f702181ba999df5d16fb96ba16a"}, + {file = "pyzmq-26.0.3-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:2cc4e280098c1b192c42a849de8de2c8e0f3a84086a76ec5b07bfee29bda7d18"}, + {file = "pyzmq-26.0.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5bde86a2ed3ce587fa2b207424ce15b9a83a9fa14422dcc1c5356a13aed3df9d"}, + {file = "pyzmq-26.0.3-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:34106f68e20e6ff253c9f596ea50397dbd8699828d55e8fa18bd4323d8d966e6"}, + {file = "pyzmq-26.0.3-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ebbbd0e728af5db9b04e56389e2299a57ea8b9dd15c9759153ee2455b32be6ad"}, + {file = "pyzmq-26.0.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f6b1d1c631e5940cac5a0b22c5379c86e8df6a4ec277c7a856b714021ab6cfad"}, + {file = "pyzmq-26.0.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:e891ce81edd463b3b4c3b885c5603c00141151dd9c6936d98a680c8c72fe5c67"}, + {file = "pyzmq-26.0.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:9b273ecfbc590a1b98f014ae41e5cf723932f3b53ba9367cfb676f838038b32c"}, + {file = "pyzmq-26.0.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b32bff85fb02a75ea0b68f21e2412255b5731f3f389ed9aecc13a6752f58ac97"}, + {file = "pyzmq-26.0.3-cp38-cp38-win32.whl", hash = "sha256:f6c21c00478a7bea93caaaef9e7629145d4153b15a8653e8bb4609d4bc70dbfc"}, + {file = "pyzmq-26.0.3-cp38-cp38-win_amd64.whl", hash = "sha256:3401613148d93ef0fd9aabdbddb212de3db7a4475367f49f590c837355343972"}, + {file = "pyzmq-26.0.3-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:2ed8357f4c6e0daa4f3baf31832df8a33334e0fe5b020a61bc8b345a3db7a606"}, + {file = "pyzmq-26.0.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c1c8f2a2ca45292084c75bb6d3a25545cff0ed931ed228d3a1810ae3758f975f"}, + {file = "pyzmq-26.0.3-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:b63731993cdddcc8e087c64e9cf003f909262b359110070183d7f3025d1c56b5"}, + {file = "pyzmq-26.0.3-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:b3cd31f859b662ac5d7f4226ec7d8bd60384fa037fc02aee6ff0b53ba29a3ba8"}, + {file = "pyzmq-26.0.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:115f8359402fa527cf47708d6f8a0f8234f0e9ca0cab7c18c9c189c194dbf620"}, + {file = "pyzmq-26.0.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:715bdf952b9533ba13dfcf1f431a8f49e63cecc31d91d007bc1deb914f47d0e4"}, + {file = "pyzmq-26.0.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:e1258c639e00bf5e8a522fec6c3eaa3e30cf1c23a2f21a586be7e04d50c9acab"}, + {file = "pyzmq-26.0.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:15c59e780be8f30a60816a9adab900c12a58d79c1ac742b4a8df044ab2a6d920"}, + {file = "pyzmq-26.0.3-cp39-cp39-win32.whl", hash = "sha256:d0cdde3c78d8ab5b46595054e5def32a755fc028685add5ddc7403e9f6de9879"}, + {file = "pyzmq-26.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:ce828058d482ef860746bf532822842e0ff484e27f540ef5c813d516dd8896d2"}, + {file = "pyzmq-26.0.3-cp39-cp39-win_arm64.whl", hash = "sha256:788f15721c64109cf720791714dc14afd0f449d63f3a5487724f024345067381"}, + {file = "pyzmq-26.0.3-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:2c18645ef6294d99b256806e34653e86236eb266278c8ec8112622b61db255de"}, + {file = "pyzmq-26.0.3-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7e6bc96ebe49604df3ec2c6389cc3876cabe475e6bfc84ced1bf4e630662cb35"}, + {file = "pyzmq-26.0.3-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:971e8990c5cc4ddcff26e149398fc7b0f6a042306e82500f5e8db3b10ce69f84"}, + {file = "pyzmq-26.0.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d8416c23161abd94cc7da80c734ad7c9f5dbebdadfdaa77dad78244457448223"}, + {file = "pyzmq-26.0.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:082a2988364b60bb5de809373098361cf1dbb239623e39e46cb18bc035ed9c0c"}, + {file = "pyzmq-26.0.3-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:d57dfbf9737763b3a60d26e6800e02e04284926329aee8fb01049635e957fe81"}, + {file = "pyzmq-26.0.3-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:77a85dca4c2430ac04dc2a2185c2deb3858a34fe7f403d0a946fa56970cf60a1"}, + {file = "pyzmq-26.0.3-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4c82a6d952a1d555bf4be42b6532927d2a5686dd3c3e280e5f63225ab47ac1f5"}, + {file = "pyzmq-26.0.3-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4496b1282c70c442809fc1b151977c3d967bfb33e4e17cedbf226d97de18f709"}, + {file = "pyzmq-26.0.3-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:e4946d6bdb7ba972dfda282f9127e5756d4f299028b1566d1245fa0d438847e6"}, + {file = "pyzmq-26.0.3-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:03c0ae165e700364b266876d712acb1ac02693acd920afa67da2ebb91a0b3c09"}, + {file = "pyzmq-26.0.3-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:3e3070e680f79887d60feeda051a58d0ac36622e1759f305a41059eff62c6da7"}, + {file = "pyzmq-26.0.3-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6ca08b840fe95d1c2bd9ab92dac5685f949fc6f9ae820ec16193e5ddf603c3b2"}, + {file = "pyzmq-26.0.3-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e76654e9dbfb835b3518f9938e565c7806976c07b37c33526b574cc1a1050480"}, + {file = "pyzmq-26.0.3-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:871587bdadd1075b112e697173e946a07d722459d20716ceb3d1bd6c64bd08ce"}, + {file = "pyzmq-26.0.3-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:d0a2d1bd63a4ad79483049b26514e70fa618ce6115220da9efdff63688808b17"}, + {file = "pyzmq-26.0.3-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0270b49b6847f0d106d64b5086e9ad5dc8a902413b5dbbb15d12b60f9c1747a4"}, + {file = "pyzmq-26.0.3-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:703c60b9910488d3d0954ca585c34f541e506a091a41930e663a098d3b794c67"}, + {file = "pyzmq-26.0.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:74423631b6be371edfbf7eabb02ab995c2563fee60a80a30829176842e71722a"}, + {file = "pyzmq-26.0.3-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:4adfbb5451196842a88fda3612e2c0414134874bffb1c2ce83ab4242ec9e027d"}, + {file = "pyzmq-26.0.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:3516119f4f9b8671083a70b6afaa0a070f5683e431ab3dc26e9215620d7ca1ad"}, + {file = "pyzmq-26.0.3.tar.gz", hash = "sha256:dba7d9f2e047dfa2bca3b01f4f84aa5246725203d6284e3790f2ca15fba6b40a"}, +] + +[package.dependencies] +cffi = {version = "*", markers = "implementation_name == \"pypy\""} + +[[package]] +name = "qtconsole" +version = "5.5.2" +description = "Jupyter Qt console" +optional = true +python-versions = ">=3.8" +files = [ + {file = "qtconsole-5.5.2-py3-none-any.whl", hash = "sha256:42d745f3d05d36240244a04e1e1ec2a86d5d9b6edb16dbdef582ccb629e87e0b"}, + {file = "qtconsole-5.5.2.tar.gz", hash = "sha256:6b5fb11274b297463706af84dcbbd5c92273b1f619e6d25d08874b0a88516989"}, +] + +[package.dependencies] +ipykernel = ">=4.1" +jupyter-client = ">=4.1" +jupyter-core = "*" +packaging = "*" +pygments = "*" +pyzmq = ">=17.1" +qtpy = ">=2.4.0" +traitlets = "<5.2.1 || >5.2.1,<5.2.2 || >5.2.2" + +[package.extras] +doc = ["Sphinx (>=1.3)"] +test = ["flaky", "pytest", "pytest-qt"] + +[[package]] +name = "qtpy" +version = "2.4.1" +description = "Provides an abstraction layer on top of the various Qt bindings (PyQt5/6 and PySide2/6)." +optional = true +python-versions = ">=3.7" +files = [ + {file = "QtPy-2.4.1-py3-none-any.whl", hash = "sha256:1c1d8c4fa2c884ae742b069151b0abe15b3f70491f3972698c683b8e38de839b"}, + {file = "QtPy-2.4.1.tar.gz", hash = "sha256:a5a15ffd519550a1361bdc56ffc07fda56a6af7292f17c7b395d4083af632987"}, +] + +[package.dependencies] +packaging = "*" + +[package.extras] +test = ["pytest (>=6,!=7.0.0,!=7.0.1)", "pytest-cov (>=3.0.0)", "pytest-qt"] + +[[package]] +name = "referencing" +version = "0.35.1" +description = "JSON Referencing + Python" +optional = true +python-versions = ">=3.8" +files = [ + {file = "referencing-0.35.1-py3-none-any.whl", hash = "sha256:eda6d3234d62814d1c64e305c1331c9a3a6132da475ab6382eaa997b21ee75de"}, + {file = "referencing-0.35.1.tar.gz", hash = "sha256:25b42124a6c8b632a425174f24087783efb348a6f1e0008e63cd4466fedf703c"}, +] + +[package.dependencies] +attrs = ">=22.2.0" +rpds-py = ">=0.7.0" + +[[package]] +name = "requests" +version = "2.32.1" +description = "Python HTTP for Humans." +optional = true +python-versions = ">=3.8" +files = [ + {file = "requests-2.32.1-py3-none-any.whl", hash = "sha256:21ac9465cdf8c1650fe1ecde8a71669a93d4e6f147550483a2967d08396a56a5"}, + {file = "requests-2.32.1.tar.gz", hash = "sha256:eb97e87e64c79e64e5b8ac75cee9dd1f97f49e289b083ee6be96268930725685"}, +] + +[package.dependencies] +certifi = ">=2017.4.17" +charset-normalizer = ">=2,<4" +idna = ">=2.5,<4" +urllib3 = ">=1.21.1,<3" + +[package.extras] +socks = ["PySocks (>=1.5.6,!=1.5.7)"] +use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] + +[[package]] +name = "rfc3339-validator" +version = "0.1.4" +description = "A pure python RFC3339 validator" +optional = true +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "rfc3339_validator-0.1.4-py2.py3-none-any.whl", hash = "sha256:24f6ec1eda14ef823da9e36ec7113124b39c04d50a4d3d3a3c2859577e7791fa"}, + {file = "rfc3339_validator-0.1.4.tar.gz", hash = "sha256:138a2abdf93304ad60530167e51d2dfb9549521a836871b88d7f4695d0022f6b"}, +] + +[package.dependencies] +six = "*" + +[[package]] +name = "rfc3986-validator" +version = "0.1.1" +description = "Pure python rfc3986 validator" +optional = true +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "rfc3986_validator-0.1.1-py2.py3-none-any.whl", hash = "sha256:2f235c432ef459970b4306369336b9d5dbdda31b510ca1e327636e01f528bfa9"}, + {file = "rfc3986_validator-0.1.1.tar.gz", hash = "sha256:3d44bde7921b3b9ec3ae4e3adca370438eccebc676456449b145d533b240d055"}, +] + +[[package]] +name = "rosco" +version = "2.9.2" +description = "A reference open source controller toolset for wind turbine applications." +optional = true +python-versions = ">=3.9" +files = [ + {file = "rosco-2.9.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:60c0517592c2aa91b2a9ee07e51e4f0464fc7820728f9eb28bd6a81f1195d7cf"}, + {file = "rosco-2.9.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:15d02bb5df5ee41f01dae5ed23526b10f95bcb47df822017d732df3cd50aae4c"}, + {file = "rosco-2.9.2-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3259b7aad8225854168ba9fbde9a4f2b01eadd46230e6366d49dd628476a630a"}, + {file = "rosco-2.9.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e16d6829d08871503154ad7b8a909a9940456c90b9baf97f7e80f1bfbcbc169"}, + {file = "rosco-2.9.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:d51b8bf8f75a9ad28d6b971a03ac24db20fb976f9ed8423d952e10e19ea1c98e"}, + {file = "rosco-2.9.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7b19c1b9ffe1094f008c7865594a60ee84c383c7318b4ec8e003c8b6f32fb4c7"}, + {file = "rosco-2.9.2-cp310-cp310-win_amd64.whl", hash = "sha256:c6516482ffd15d1fdf20ab8fd495ad9e353af7bbc15098162841e1f4bd681469"}, + {file = "rosco-2.9.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d79ea0d2ff5c904734b270e5381867157d28a83dd38c05bee1243ead5cd75259"}, + {file = "rosco-2.9.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:088bfe893bae96d4f170b9058fa332ceca3d89a16f33f91f0f3003bd67e4f7dc"}, + {file = "rosco-2.9.2-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:622552efb359e12108ae3756eaa5bd29e6c473deb3cc36e99ac75975bf784941"}, + {file = "rosco-2.9.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:68fe33db823b140ee1f110338c1bd6863cb0d6c81a5d2a41bf486dece462e87e"}, + {file = "rosco-2.9.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:39549a110cb3959074d69afb76ee0638256f7b037064d947f088a4776a34b5d7"}, + {file = "rosco-2.9.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:ded6e74bcba36f5229c8ccc7b8e4a7ef1fc151971d0c9a0688abc4766b371cb6"}, + {file = "rosco-2.9.2-cp311-cp311-win_amd64.whl", hash = "sha256:04094e3fec7b8036af6c9946e6571105b3471ba985936d201ff4eaaa95033d43"}, + {file = "rosco-2.9.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:266e0686dfa50266232f82dc47d79bfdccc3181276b4e31ccd7fcc7d61155776"}, + {file = "rosco-2.9.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7ced257d0b979fb246230cdb273f20cc348606ba6fb7e0f3a760563aa0e9701e"}, + {file = "rosco-2.9.2-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:30d6f2f81e235ea2d7e60be7f850f4917d3cb720670ba7122b8b789a76df873c"}, + {file = "rosco-2.9.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:51ec350c68805e3912a465cf2383388455d11111ef89e761e7ff1fedcadf8567"}, + {file = "rosco-2.9.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:a6ff437c517337b1cf7e0e2fbe240e05c9f3ceb1aa0ab3fb3b984eaa669d4056"}, + {file = "rosco-2.9.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:eff41c9b5e01a53172d10311d8646e6c91a09f7992e7ad7b5bb7bf9ccabc1f42"}, + {file = "rosco-2.9.2-cp312-cp312-win_amd64.whl", hash = "sha256:8d77d3ce031679ff2472c4fbc12ce0f1a6aa7d531b6f6bce7a34550a67b822bd"}, + {file = "rosco-2.9.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4b1dbb3e5c6ae14cc6fbbfe7e1788ee343c14319db44d1a1428e2aaa9d40588b"}, + {file = "rosco-2.9.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:20a0094dee3eac9ab89289a413a76655829320ed801b4839489c19bbc6f209a6"}, + {file = "rosco-2.9.2-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:df83ad48ee5b7c3b5474b85415fc8bd58454cf7db1eeaeae17cda974fc62eb8f"}, + {file = "rosco-2.9.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5aa15741d31b5c330087ffb548a0a1e9e50cd49b14dddfc214bb9c2e5e502122"}, + {file = "rosco-2.9.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:32b23a81edec1740f2df2ef77384a907aced6d00f6674acbf38b52198ddd9116"}, + {file = "rosco-2.9.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:79e8fe1d9aef79e22ddd946163e188f6f7852eac319fbfe4276f811353b509f9"}, + {file = "rosco-2.9.2-cp39-cp39-win_amd64.whl", hash = "sha256:2d645a4c226d28a08bf321a89ffd29ada4f1acf747b06cbe87609274bf02fc12"}, + {file = "rosco-2.9.2.tar.gz", hash = "sha256:8acb411038508dfa5c4104b8b7b29a73a76027c40bf2ff2f673a75e0b6aa5b15"}, +] + +[package.dependencies] +control = "*" +matplotlib = "*" +numpy = "*" +pandas = "*" +pyparsing = "*" +pyYAML = "*" +pyzmq = "*" +"ruamel.yaml" = "*" +scipy = "*" +treon = "*" +wisdem = "*" + +[package.extras] +dev = ["cmake"] +test = ["pytest"] + +[[package]] +name = "rpds-py" +version = "0.18.1" +description = "Python bindings to Rust's persistent data structures (rpds)" +optional = true +python-versions = ">=3.8" +files = [ + {file = "rpds_py-0.18.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:d31dea506d718693b6b2cffc0648a8929bdc51c70a311b2770f09611caa10d53"}, + {file = "rpds_py-0.18.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:732672fbc449bab754e0b15356c077cc31566df874964d4801ab14f71951ea80"}, + {file = "rpds_py-0.18.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a98a1f0552b5f227a3d6422dbd61bc6f30db170939bd87ed14f3c339aa6c7c9"}, + {file = "rpds_py-0.18.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7f1944ce16401aad1e3f7d312247b3d5de7981f634dc9dfe90da72b87d37887d"}, + {file = "rpds_py-0.18.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:38e14fb4e370885c4ecd734f093a2225ee52dc384b86fa55fe3f74638b2cfb09"}, + {file = "rpds_py-0.18.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:08d74b184f9ab6289b87b19fe6a6d1a97fbfea84b8a3e745e87a5de3029bf944"}, + {file = "rpds_py-0.18.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d70129cef4a8d979caa37e7fe957202e7eee8ea02c5e16455bc9808a59c6b2f0"}, + {file = "rpds_py-0.18.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ce0bb20e3a11bd04461324a6a798af34d503f8d6f1aa3d2aa8901ceaf039176d"}, + {file = "rpds_py-0.18.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:81c5196a790032e0fc2464c0b4ab95f8610f96f1f2fa3d4deacce6a79852da60"}, + {file = "rpds_py-0.18.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:f3027be483868c99b4985fda802a57a67fdf30c5d9a50338d9db646d590198da"}, + {file = "rpds_py-0.18.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:d44607f98caa2961bab4fa3c4309724b185b464cdc3ba6f3d7340bac3ec97cc1"}, + {file = "rpds_py-0.18.1-cp310-none-win32.whl", hash = "sha256:c273e795e7a0f1fddd46e1e3cb8be15634c29ae8ff31c196debb620e1edb9333"}, + {file = "rpds_py-0.18.1-cp310-none-win_amd64.whl", hash = "sha256:8352f48d511de5f973e4f2f9412736d7dea76c69faa6d36bcf885b50c758ab9a"}, + {file = "rpds_py-0.18.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:6b5ff7e1d63a8281654b5e2896d7f08799378e594f09cf3674e832ecaf396ce8"}, + {file = "rpds_py-0.18.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8927638a4d4137a289e41d0fd631551e89fa346d6dbcfc31ad627557d03ceb6d"}, + {file = "rpds_py-0.18.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:154bf5c93d79558b44e5b50cc354aa0459e518e83677791e6adb0b039b7aa6a7"}, + {file = "rpds_py-0.18.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:07f2139741e5deb2c5154a7b9629bc5aa48c766b643c1a6750d16f865a82c5fc"}, + {file = "rpds_py-0.18.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8c7672e9fba7425f79019db9945b16e308ed8bc89348c23d955c8c0540da0a07"}, + {file = "rpds_py-0.18.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:489bdfe1abd0406eba6b3bb4fdc87c7fa40f1031de073d0cfb744634cc8fa261"}, + {file = "rpds_py-0.18.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3c20f05e8e3d4fc76875fc9cb8cf24b90a63f5a1b4c5b9273f0e8225e169b100"}, + {file = "rpds_py-0.18.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:967342e045564cef76dfcf1edb700b1e20838d83b1aa02ab313e6a497cf923b8"}, + {file = "rpds_py-0.18.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:2cc7c1a47f3a63282ab0f422d90ddac4aa3034e39fc66a559ab93041e6505da7"}, + {file = "rpds_py-0.18.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:f7afbfee1157e0f9376c00bb232e80a60e59ed716e3211a80cb8506550671e6e"}, + {file = "rpds_py-0.18.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9e6934d70dc50f9f8ea47081ceafdec09245fd9f6032669c3b45705dea096b88"}, + {file = "rpds_py-0.18.1-cp311-none-win32.whl", hash = "sha256:c69882964516dc143083d3795cb508e806b09fc3800fd0d4cddc1df6c36e76bb"}, + {file = "rpds_py-0.18.1-cp311-none-win_amd64.whl", hash = "sha256:70a838f7754483bcdc830444952fd89645569e7452e3226de4a613a4c1793fb2"}, + {file = "rpds_py-0.18.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:3dd3cd86e1db5aadd334e011eba4e29d37a104b403e8ca24dcd6703c68ca55b3"}, + {file = "rpds_py-0.18.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:05f3d615099bd9b13ecf2fc9cf2d839ad3f20239c678f461c753e93755d629ee"}, + {file = "rpds_py-0.18.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:35b2b771b13eee8729a5049c976197ff58a27a3829c018a04341bcf1ae409b2b"}, + {file = "rpds_py-0.18.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ee17cd26b97d537af8f33635ef38be873073d516fd425e80559f4585a7b90c43"}, + {file = "rpds_py-0.18.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b646bf655b135ccf4522ed43d6902af37d3f5dbcf0da66c769a2b3938b9d8184"}, + {file = "rpds_py-0.18.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:19ba472b9606c36716062c023afa2484d1e4220548751bda14f725a7de17b4f6"}, + {file = "rpds_py-0.18.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e30ac5e329098903262dc5bdd7e2086e0256aa762cc8b744f9e7bf2a427d3f8"}, + {file = "rpds_py-0.18.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d58ad6317d188c43750cb76e9deacf6051d0f884d87dc6518e0280438648a9ac"}, + {file = "rpds_py-0.18.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e1735502458621921cee039c47318cb90b51d532c2766593be6207eec53e5c4c"}, + {file = "rpds_py-0.18.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:f5bab211605d91db0e2995a17b5c6ee5edec1270e46223e513eaa20da20076ac"}, + {file = "rpds_py-0.18.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2fc24a329a717f9e2448f8cd1f960f9dac4e45b6224d60734edeb67499bab03a"}, + {file = "rpds_py-0.18.1-cp312-none-win32.whl", hash = "sha256:1805d5901779662d599d0e2e4159d8a82c0b05faa86ef9222bf974572286b2b6"}, + {file = "rpds_py-0.18.1-cp312-none-win_amd64.whl", hash = "sha256:720edcb916df872d80f80a1cc5ea9058300b97721efda8651efcd938a9c70a72"}, + {file = "rpds_py-0.18.1-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:c827576e2fa017a081346dce87d532a5310241648eb3700af9a571a6e9fc7e74"}, + {file = "rpds_py-0.18.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:aa3679e751408d75a0b4d8d26d6647b6d9326f5e35c00a7ccd82b78ef64f65f8"}, + {file = "rpds_py-0.18.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0abeee75434e2ee2d142d650d1e54ac1f8b01e6e6abdde8ffd6eeac6e9c38e20"}, + {file = "rpds_py-0.18.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ed402d6153c5d519a0faf1bb69898e97fb31613b49da27a84a13935ea9164dfc"}, + {file = "rpds_py-0.18.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:338dee44b0cef8b70fd2ef54b4e09bb1b97fc6c3a58fea5db6cc083fd9fc2724"}, + {file = "rpds_py-0.18.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7750569d9526199c5b97e5a9f8d96a13300950d910cf04a861d96f4273d5b104"}, + {file = "rpds_py-0.18.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:607345bd5912aacc0c5a63d45a1f73fef29e697884f7e861094e443187c02be5"}, + {file = "rpds_py-0.18.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:207c82978115baa1fd8d706d720b4a4d2b0913df1c78c85ba73fe6c5804505f0"}, + {file = "rpds_py-0.18.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:6d1e42d2735d437e7e80bab4d78eb2e459af48c0a46e686ea35f690b93db792d"}, + {file = "rpds_py-0.18.1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:5463c47c08630007dc0fe99fb480ea4f34a89712410592380425a9b4e1611d8e"}, + {file = "rpds_py-0.18.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:06d218939e1bf2ca50e6b0ec700ffe755e5216a8230ab3e87c059ebb4ea06afc"}, + {file = "rpds_py-0.18.1-cp38-none-win32.whl", hash = "sha256:312fe69b4fe1ffbe76520a7676b1e5ac06ddf7826d764cc10265c3b53f96dbe9"}, + {file = "rpds_py-0.18.1-cp38-none-win_amd64.whl", hash = "sha256:9437ca26784120a279f3137ee080b0e717012c42921eb07861b412340f85bae2"}, + {file = "rpds_py-0.18.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:19e515b78c3fc1039dd7da0a33c28c3154458f947f4dc198d3c72db2b6b5dc93"}, + {file = "rpds_py-0.18.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a7b28c5b066bca9a4eb4e2f2663012debe680f097979d880657f00e1c30875a0"}, + {file = "rpds_py-0.18.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:673fdbbf668dd958eff750e500495ef3f611e2ecc209464f661bc82e9838991e"}, + {file = "rpds_py-0.18.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d960de62227635d2e61068f42a6cb6aae91a7fe00fca0e3aeed17667c8a34611"}, + {file = "rpds_py-0.18.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:352a88dc7892f1da66b6027af06a2e7e5d53fe05924cc2cfc56495b586a10b72"}, + {file = "rpds_py-0.18.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4e0ee01ad8260184db21468a6e1c37afa0529acc12c3a697ee498d3c2c4dcaf3"}, + {file = "rpds_py-0.18.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4c39ad2f512b4041343ea3c7894339e4ca7839ac38ca83d68a832fc8b3748ab"}, + {file = "rpds_py-0.18.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:aaa71ee43a703c321906813bb252f69524f02aa05bf4eec85f0c41d5d62d0f4c"}, + {file = "rpds_py-0.18.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:6cd8098517c64a85e790657e7b1e509b9fe07487fd358e19431cb120f7d96338"}, + {file = "rpds_py-0.18.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:4adec039b8e2928983f885c53b7cc4cda8965b62b6596501a0308d2703f8af1b"}, + {file = "rpds_py-0.18.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:32b7daaa3e9389db3695964ce8e566e3413b0c43e3394c05e4b243a4cd7bef26"}, + {file = "rpds_py-0.18.1-cp39-none-win32.whl", hash = "sha256:2625f03b105328729f9450c8badda34d5243231eef6535f80064d57035738360"}, + {file = "rpds_py-0.18.1-cp39-none-win_amd64.whl", hash = "sha256:bf18932d0003c8c4d51a39f244231986ab23ee057d235a12b2684ea26a353590"}, + {file = "rpds_py-0.18.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:cbfbea39ba64f5e53ae2915de36f130588bba71245b418060ec3330ebf85678e"}, + {file = "rpds_py-0.18.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:a3d456ff2a6a4d2adcdf3c1c960a36f4fd2fec6e3b4902a42a384d17cf4e7a65"}, + {file = "rpds_py-0.18.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7700936ef9d006b7ef605dc53aa364da2de5a3aa65516a1f3ce73bf82ecfc7ae"}, + {file = "rpds_py-0.18.1-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:51584acc5916212e1bf45edd17f3a6b05fe0cbb40482d25e619f824dccb679de"}, + {file = "rpds_py-0.18.1-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:942695a206a58d2575033ff1e42b12b2aece98d6003c6bc739fbf33d1773b12f"}, + {file = "rpds_py-0.18.1-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b906b5f58892813e5ba5c6056d6a5ad08f358ba49f046d910ad992196ea61397"}, + {file = "rpds_py-0.18.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6f8e3fecca256fefc91bb6765a693d96692459d7d4c644660a9fff32e517843"}, + {file = "rpds_py-0.18.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7732770412bab81c5a9f6d20aeb60ae943a9b36dcd990d876a773526468e7163"}, + {file = "rpds_py-0.18.1-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:bd1105b50ede37461c1d51b9698c4f4be6e13e69a908ab7751e3807985fc0346"}, + {file = "rpds_py-0.18.1-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:618916f5535784960f3ecf8111581f4ad31d347c3de66d02e728de460a46303c"}, + {file = "rpds_py-0.18.1-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:17c6d2155e2423f7e79e3bb18151c686d40db42d8645e7977442170c360194d4"}, + {file = "rpds_py-0.18.1-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:6c4c4c3f878df21faf5fac86eda32671c27889e13570645a9eea0a1abdd50922"}, + {file = "rpds_py-0.18.1-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:fab6ce90574645a0d6c58890e9bcaac8d94dff54fb51c69e5522a7358b80ab64"}, + {file = "rpds_py-0.18.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:531796fb842b53f2695e94dc338929e9f9dbf473b64710c28af5a160b2a8927d"}, + {file = "rpds_py-0.18.1-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:740884bc62a5e2bbb31e584f5d23b32320fd75d79f916f15a788d527a5e83644"}, + {file = "rpds_py-0.18.1-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:998125738de0158f088aef3cb264a34251908dd2e5d9966774fdab7402edfab7"}, + {file = "rpds_py-0.18.1-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e2be6e9dd4111d5b31ba3b74d17da54a8319d8168890fbaea4b9e5c3de630ae5"}, + {file = "rpds_py-0.18.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d0cee71bc618cd93716f3c1bf56653740d2d13ddbd47673efa8bf41435a60daa"}, + {file = "rpds_py-0.18.1-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2c3caec4ec5cd1d18e5dd6ae5194d24ed12785212a90b37f5f7f06b8bedd7139"}, + {file = "rpds_py-0.18.1-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:27bba383e8c5231cd559affe169ca0b96ec78d39909ffd817f28b166d7ddd4d8"}, + {file = "rpds_py-0.18.1-pp38-pypy38_pp73-musllinux_1_2_i686.whl", hash = "sha256:a888e8bdb45916234b99da2d859566f1e8a1d2275a801bb8e4a9644e3c7e7909"}, + {file = "rpds_py-0.18.1-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:6031b25fb1b06327b43d841f33842b383beba399884f8228a6bb3df3088485ff"}, + {file = "rpds_py-0.18.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:48c2faaa8adfacefcbfdb5f2e2e7bdad081e5ace8d182e5f4ade971f128e6bb3"}, + {file = "rpds_py-0.18.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:d85164315bd68c0806768dc6bb0429c6f95c354f87485ee3593c4f6b14def2bd"}, + {file = "rpds_py-0.18.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6afd80f6c79893cfc0574956f78a0add8c76e3696f2d6a15bca2c66c415cf2d4"}, + {file = "rpds_py-0.18.1-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fa242ac1ff583e4ec7771141606aafc92b361cd90a05c30d93e343a0c2d82a89"}, + {file = "rpds_py-0.18.1-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d21be4770ff4e08698e1e8e0bce06edb6ea0626e7c8f560bc08222880aca6a6f"}, + {file = "rpds_py-0.18.1-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5c45a639e93a0c5d4b788b2613bd637468edd62f8f95ebc6fcc303d58ab3f0a8"}, + {file = "rpds_py-0.18.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:910e71711d1055b2768181efa0a17537b2622afeb0424116619817007f8a2b10"}, + {file = "rpds_py-0.18.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b9bb1f182a97880f6078283b3505a707057c42bf55d8fca604f70dedfdc0772a"}, + {file = "rpds_py-0.18.1-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:1d54f74f40b1f7aaa595a02ff42ef38ca654b1469bef7d52867da474243cc633"}, + {file = "rpds_py-0.18.1-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:8d2e182c9ee01135e11e9676e9a62dfad791a7a467738f06726872374a83db49"}, + {file = "rpds_py-0.18.1-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:636a15acc588f70fda1661234761f9ed9ad79ebed3f2125d44be0862708b666e"}, + {file = "rpds_py-0.18.1.tar.gz", hash = "sha256:dc48b479d540770c811fbd1eb9ba2bb66951863e448efec2e2c102625328e92f"}, +] + +[[package]] +name = "ruamel-yaml" +version = "0.18.6" +description = "ruamel.yaml is a YAML parser/emitter that supports roundtrip preservation of comments, seq/map flow style, and map key order" +optional = false +python-versions = ">=3.7" +files = [ + {file = "ruamel.yaml-0.18.6-py3-none-any.whl", hash = "sha256:57b53ba33def16c4f3d807c0ccbc00f8a6081827e81ba2491691b76882d0c636"}, + {file = "ruamel.yaml-0.18.6.tar.gz", hash = "sha256:8b27e6a217e786c6fbe5634d8f3f11bc63e0f80f6a5890f28863d9c45aac311b"}, +] + +[package.dependencies] +"ruamel.yaml.clib" = {version = ">=0.2.7", markers = "platform_python_implementation == \"CPython\" and python_version < \"3.13\""} + +[package.extras] +docs = ["mercurial (>5.7)", "ryd"] +jinja2 = ["ruamel.yaml.jinja2 (>=0.2)"] + +[[package]] +name = "ruamel-yaml-clib" +version = "0.2.8" +description = "C version of reader, parser and emitter for ruamel.yaml derived from libyaml" +optional = false +python-versions = ">=3.6" +files = [ + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:b42169467c42b692c19cf539c38d4602069d8c1505e97b86387fcf7afb766e1d"}, + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:07238db9cbdf8fc1e9de2489a4f68474e70dffcb32232db7c08fa61ca0c7c462"}, + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:fff3573c2db359f091e1589c3d7c5fc2f86f5bdb6f24252c2d8e539d4e45f412"}, + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-manylinux_2_24_aarch64.whl", hash = "sha256:aa2267c6a303eb483de8d02db2871afb5c5fc15618d894300b88958f729ad74f"}, + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:840f0c7f194986a63d2c2465ca63af8ccbbc90ab1c6001b1978f05119b5e7334"}, + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:024cfe1fc7c7f4e1aff4a81e718109e13409767e4f871443cbff3dba3578203d"}, + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-win32.whl", hash = "sha256:c69212f63169ec1cfc9bb44723bf2917cbbd8f6191a00ef3410f5a7fe300722d"}, + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-win_amd64.whl", hash = "sha256:cabddb8d8ead485e255fe80429f833172b4cadf99274db39abc080e068cbcc31"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:bef08cd86169d9eafb3ccb0a39edb11d8e25f3dae2b28f5c52fd997521133069"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:b16420e621d26fdfa949a8b4b47ade8810c56002f5389970db4ddda51dbff248"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:25c515e350e5b739842fc3228d662413ef28f295791af5e5110b543cf0b57d9b"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-manylinux_2_24_aarch64.whl", hash = "sha256:1707814f0d9791df063f8c19bb51b0d1278b8e9a2353abbb676c2f685dee6afe"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:46d378daaac94f454b3a0e3d8d78cafd78a026b1d71443f4966c696b48a6d899"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:09b055c05697b38ecacb7ac50bdab2240bfca1a0c4872b0fd309bb07dc9aa3a9"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-win32.whl", hash = "sha256:53a300ed9cea38cf5a2a9b069058137c2ca1ce658a874b79baceb8f892f915a7"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-win_amd64.whl", hash = "sha256:c2a72e9109ea74e511e29032f3b670835f8a59bbdc9ce692c5b4ed91ccf1eedb"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:ebc06178e8821efc9692ea7544aa5644217358490145629914d8020042c24aa1"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:edaef1c1200c4b4cb914583150dcaa3bc30e592e907c01117c08b13a07255ec2"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d176b57452ab5b7028ac47e7b3cf644bcfdc8cacfecf7e71759f7f51a59e5c92"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-manylinux_2_24_aarch64.whl", hash = "sha256:1dc67314e7e1086c9fdf2680b7b6c2be1c0d8e3a8279f2e993ca2a7545fecf62"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:3213ece08ea033eb159ac52ae052a4899b56ecc124bb80020d9bbceeb50258e9"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:aab7fd643f71d7946f2ee58cc88c9b7bfc97debd71dcc93e03e2d174628e7e2d"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-win32.whl", hash = "sha256:5c365d91c88390c8d0a8545df0b5857172824b1c604e867161e6b3d59a827eaa"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-win_amd64.whl", hash = "sha256:1758ce7d8e1a29d23de54a16ae867abd370f01b5a69e1a3ba75223eaa3ca1a1b"}, + {file = "ruamel.yaml.clib-0.2.8-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:a5aa27bad2bb83670b71683aae140a1f52b0857a2deff56ad3f6c13a017a26ed"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c58ecd827313af6864893e7af0a3bb85fd529f862b6adbefe14643947cfe2942"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-macosx_12_0_arm64.whl", hash = "sha256:f481f16baec5290e45aebdc2a5168ebc6d35189ae6fea7a58787613a25f6e875"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-manylinux_2_24_aarch64.whl", hash = "sha256:77159f5d5b5c14f7c34073862a6b7d34944075d9f93e681638f6d753606c6ce6"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:7f67a1ee819dc4562d444bbafb135832b0b909f81cc90f7aa00260968c9ca1b3"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:4ecbf9c3e19f9562c7fdd462e8d18dd902a47ca046a2e64dba80699f0b6c09b7"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:87ea5ff66d8064301a154b3933ae406b0863402a799b16e4a1d24d9fbbcbe0d3"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-win32.whl", hash = "sha256:75e1ed13e1f9de23c5607fe6bd1aeaae21e523b32d83bb33918245361e9cc51b"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-win_amd64.whl", hash = "sha256:3f215c5daf6a9d7bbed4a0a4f760f3113b10e82ff4c5c44bec20a68c8014f675"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1b617618914cb00bf5c34d4357c37aa15183fa229b24767259657746c9077615"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:a6a9ffd280b71ad062eae53ac1659ad86a17f59a0fdc7699fd9be40525153337"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-manylinux_2_24_aarch64.whl", hash = "sha256:305889baa4043a09e5b76f8e2a51d4ffba44259f6b4c72dec8ca56207d9c6fe1"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:700e4ebb569e59e16a976857c8798aee258dceac7c7d6b50cab63e080058df91"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:e2b4c44b60eadec492926a7270abb100ef9f72798e18743939bdbf037aab8c28"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:e79e5db08739731b0ce4850bed599235d601701d5694c36570a99a0c5ca41a9d"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-win32.whl", hash = "sha256:955eae71ac26c1ab35924203fda6220f84dce57d6d7884f189743e2abe3a9fbe"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-win_amd64.whl", hash = "sha256:56f4252222c067b4ce51ae12cbac231bce32aee1d33fbfc9d17e5b8d6966c312"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:03d1162b6d1df1caa3a4bd27aa51ce17c9afc2046c31b0ad60a0a96ec22f8001"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:bba64af9fa9cebe325a62fa398760f5c7206b215201b0ec825005f1b18b9bccf"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-manylinux_2_24_aarch64.whl", hash = "sha256:a1a45e0bb052edf6a1d3a93baef85319733a888363938e1fc9924cb00c8df24c"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:da09ad1c359a728e112d60116f626cc9f29730ff3e0e7db72b9a2dbc2e4beed5"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:184565012b60405d93838167f425713180b949e9d8dd0bbc7b49f074407c5a8b"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a75879bacf2c987c003368cf14bed0ffe99e8e85acfa6c0bfffc21a090f16880"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-win32.whl", hash = "sha256:84b554931e932c46f94ab306913ad7e11bba988104c5cff26d90d03f68258cd5"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-win_amd64.whl", hash = "sha256:25ac8c08322002b06fa1d49d1646181f0b2c72f5cbc15a85e80b4c30a544bb15"}, + {file = "ruamel.yaml.clib-0.2.8.tar.gz", hash = "sha256:beb2e0404003de9a4cab9753a8805a8fe9320ee6673136ed7f04255fe60bb512"}, +] + +[[package]] +name = "scipy" +version = "1.13.0" +description = "Fundamental algorithms for scientific computing in Python" +optional = true +python-versions = ">=3.9" +files = [ + {file = "scipy-1.13.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ba419578ab343a4e0a77c0ef82f088238a93eef141b2b8017e46149776dfad4d"}, + {file = "scipy-1.13.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:22789b56a999265431c417d462e5b7f2b487e831ca7bef5edeb56efe4c93f86e"}, + {file = "scipy-1.13.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:05f1432ba070e90d42d7fd836462c50bf98bd08bed0aa616c359eed8a04e3922"}, + {file = "scipy-1.13.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8434f6f3fa49f631fae84afee424e2483289dfc30a47755b4b4e6b07b2633a4"}, + {file = "scipy-1.13.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:dcbb9ea49b0167de4167c40eeee6e167caeef11effb0670b554d10b1e693a8b9"}, + {file = "scipy-1.13.0-cp310-cp310-win_amd64.whl", hash = "sha256:1d2f7bb14c178f8b13ebae93f67e42b0a6b0fc50eba1cd8021c9b6e08e8fb1cd"}, + {file = "scipy-1.13.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0fbcf8abaf5aa2dc8d6400566c1a727aed338b5fe880cde64907596a89d576fa"}, + {file = "scipy-1.13.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:5e4a756355522eb60fcd61f8372ac2549073c8788f6114449b37e9e8104f15a5"}, + {file = "scipy-1.13.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5acd8e1dbd8dbe38d0004b1497019b2dbbc3d70691e65d69615f8a7292865d7"}, + {file = "scipy-1.13.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ff7dad5d24a8045d836671e082a490848e8639cabb3dbdacb29f943a678683d"}, + {file = "scipy-1.13.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:4dca18c3ffee287ddd3bc8f1dabaf45f5305c5afc9f8ab9cbfab855e70b2df5c"}, + {file = "scipy-1.13.0-cp311-cp311-win_amd64.whl", hash = "sha256:a2f471de4d01200718b2b8927f7d76b5d9bde18047ea0fa8bd15c5ba3f26a1d6"}, + {file = "scipy-1.13.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:d0de696f589681c2802f9090fff730c218f7c51ff49bf252b6a97ec4a5d19e8b"}, + {file = "scipy-1.13.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:b2a3ff461ec4756b7e8e42e1c681077349a038f0686132d623fa404c0bee2551"}, + {file = "scipy-1.13.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6bf9fe63e7a4bf01d3645b13ff2aa6dea023d38993f42aaac81a18b1bda7a82a"}, + {file = "scipy-1.13.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1e7626dfd91cdea5714f343ce1176b6c4745155d234f1033584154f60ef1ff42"}, + {file = "scipy-1.13.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:109d391d720fcebf2fbe008621952b08e52907cf4c8c7efc7376822151820820"}, + {file = "scipy-1.13.0-cp312-cp312-win_amd64.whl", hash = "sha256:8930ae3ea371d6b91c203b1032b9600d69c568e537b7988a3073dfe4d4774f21"}, + {file = "scipy-1.13.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5407708195cb38d70fd2d6bb04b1b9dd5c92297d86e9f9daae1576bd9e06f602"}, + {file = "scipy-1.13.0-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:ac38c4c92951ac0f729c4c48c9e13eb3675d9986cc0c83943784d7390d540c78"}, + {file = "scipy-1.13.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:09c74543c4fbeb67af6ce457f6a6a28e5d3739a87f62412e4a16e46f164f0ae5"}, + {file = "scipy-1.13.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28e286bf9ac422d6beb559bc61312c348ca9b0f0dae0d7c5afde7f722d6ea13d"}, + {file = "scipy-1.13.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:33fde20efc380bd23a78a4d26d59fc8704e9b5fd9b08841693eb46716ba13d86"}, + {file = "scipy-1.13.0-cp39-cp39-win_amd64.whl", hash = "sha256:45c08bec71d3546d606989ba6e7daa6f0992918171e2a6f7fbedfa7361c2de1e"}, + {file = "scipy-1.13.0.tar.gz", hash = "sha256:58569af537ea29d3f78e5abd18398459f195546bb3be23d16677fb26616cc11e"}, +] + +[package.dependencies] +numpy = ">=1.22.4,<2.3" + +[package.extras] +dev = ["cython-lint (>=0.12.2)", "doit (>=0.36.0)", "mypy", "pycodestyle", "pydevtool", "rich-click", "ruff", "types-psutil", "typing_extensions"] +doc = ["jupyterlite-pyodide-kernel", "jupyterlite-sphinx (>=0.12.0)", "jupytext", "matplotlib (>=3.5)", "myst-nb", "numpydoc", "pooch", "pydata-sphinx-theme (>=0.15.2)", "sphinx (>=5.0.0)", "sphinx-design (>=0.4.0)"] +test = ["array-api-strict", "asv", "gmpy2", "hypothesis (>=6.30)", "mpmath", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] + +[[package]] +name = "send2trash" +version = "1.8.3" +description = "Send file to trash natively under Mac OS X, Windows and Linux" +optional = true +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" +files = [ + {file = "Send2Trash-1.8.3-py3-none-any.whl", hash = "sha256:0c31227e0bd08961c7665474a3d1ef7193929fedda4233843689baa056be46c9"}, + {file = "Send2Trash-1.8.3.tar.gz", hash = "sha256:b18e7a3966d99871aefeb00cfbcfdced55ce4871194810fc71f4aa484b953abf"}, +] + +[package.extras] +nativelib = ["pyobjc-framework-Cocoa", "pywin32"] +objc = ["pyobjc-framework-Cocoa"] +win32 = ["pywin32"] + +[[package]] +name = "simpy" +version = "4.1.1" +description = "Event discrete, process based simulation for Python." +optional = true +python-versions = ">=3.8" +files = [ + {file = "simpy-4.1.1-py3-none-any.whl", hash = "sha256:7c5ae380240fd2238671160e4830956f8055830a8317edf5c05e495b3823cd88"}, + {file = "simpy-4.1.1.tar.gz", hash = "sha256:06d0750a7884b11e0e8e20ce0bc7c6d4ed5f1743d456695340d13fdff95001a6"}, +] + +[[package]] +name = "six" +version = "1.16.0" +description = "Python 2 and 3 compatibility utilities" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +files = [ + {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, + {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, +] + +[[package]] +name = "sniffio" +version = "1.3.1" +description = "Sniff out which async library your code is running under" +optional = true +python-versions = ">=3.7" +files = [ + {file = "sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2"}, + {file = "sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc"}, +] + +[[package]] +name = "sortedcontainers" +version = "2.4.0" +description = "Sorted Containers -- Sorted List, Sorted Dict, Sorted Set" +optional = true +python-versions = "*" +files = [ + {file = "sortedcontainers-2.4.0-py2.py3-none-any.whl", hash = "sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0"}, + {file = "sortedcontainers-2.4.0.tar.gz", hash = "sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88"}, +] + +[[package]] +name = "soupsieve" +version = "2.5" +description = "A modern CSS selector implementation for Beautiful Soup." +optional = true +python-versions = ">=3.8" +files = [ + {file = "soupsieve-2.5-py3-none-any.whl", hash = "sha256:eaa337ff55a1579b6549dc679565eac1e3d000563bcb1c8ab0d0fefbc0c2cdc7"}, + {file = "soupsieve-2.5.tar.gz", hash = "sha256:5663d5a7b3bfaeee0bc4372e7fc48f9cff4940b3eec54a6451cc5299f1097690"}, +] + +[[package]] +name = "stack-data" +version = "0.6.3" +description = "Extract data from python stack frames and tracebacks for informative displays" +optional = true +python-versions = "*" +files = [ + {file = "stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695"}, + {file = "stack_data-0.6.3.tar.gz", hash = "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9"}, +] + +[package.dependencies] +asttokens = ">=2.1.0" +executing = ">=1.2.0" +pure-eval = "*" + +[package.extras] +tests = ["cython", "littleutils", "pygments", "pytest", "typeguard"] + +[[package]] +name = "statsmodels" +version = "0.14.2" +description = "Statistical computations and models for Python" +optional = true +python-versions = ">=3.9" +files = [ + {file = "statsmodels-0.14.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:df5d6f95c46f0341da6c79ee7617e025bf2b371e190a8e60af1ae9cabbdb7a97"}, + {file = "statsmodels-0.14.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a87ef21fadb445b650f327340dde703f13aec1540f3d497afb66324499dea97a"}, + {file = "statsmodels-0.14.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5827a12e3ede2b98a784476d61d6bec43011fedb64aa815f2098e0573bece257"}, + {file = "statsmodels-0.14.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10f2b7611a61adb7d596a6d239abdf1a4d5492b931b00d5ed23d32844d40e48e"}, + {file = "statsmodels-0.14.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c254c66142f1167b4c7d031cf8db55294cc62ff3280e090fc45bd10a7f5fd029"}, + {file = "statsmodels-0.14.2-cp310-cp310-win_amd64.whl", hash = "sha256:0e46e9d59293c1af4cc1f4e5248f17e7e7bc596bfce44d327c789ac27f09111b"}, + {file = "statsmodels-0.14.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:50fcb633987779e795142f51ba49fb27648d46e8a1382b32ebe8e503aaabaa9e"}, + {file = "statsmodels-0.14.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:876794068abfaeed41df71b7887000031ecf44fbfa6b50d53ccb12ebb4ab747a"}, + {file = "statsmodels-0.14.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7a91f6c4943de13e3ce2e20ee3b5d26d02bd42300616a421becd53756f5deb37"}, + {file = "statsmodels-0.14.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4864a1c4615c5ea5f2e3b078a75bdedc90dd9da210a37e0738e064b419eccee2"}, + {file = "statsmodels-0.14.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:afbd92410e0df06f3d8c4e7c0e2e71f63f4969531f280fb66059e2ecdb6e0415"}, + {file = "statsmodels-0.14.2-cp311-cp311-win_amd64.whl", hash = "sha256:8e004cfad0e46ce73fe3f3812010c746f0d4cfd48e307b45c14e9e360f3d2510"}, + {file = "statsmodels-0.14.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:eb0ba1ad3627705f5ae20af6b2982f500546d43892543b36c7bca3e2f87105e7"}, + {file = "statsmodels-0.14.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:90fd2f0110b73fc3fa5a2f21c3ca99b0e22285cccf38e56b5b8fd8ce28791b0f"}, + {file = "statsmodels-0.14.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac780ad9ff552773798829a0b9c46820b0faa10e6454891f5e49a845123758ab"}, + {file = "statsmodels-0.14.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:55d1742778400ae67acb04b50a2c7f5804182f8a874bd09ca397d69ed159a751"}, + {file = "statsmodels-0.14.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:f870d14a587ea58a3b596aa994c2ed889cc051f9e450e887d2c83656fc6a64bf"}, + {file = "statsmodels-0.14.2-cp312-cp312-win_amd64.whl", hash = "sha256:f450fcbae214aae66bd9d2b9af48e0f8ba1cb0e8596c6ebb34e6e3f0fec6542c"}, + {file = "statsmodels-0.14.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:201c3d00929c4a67cda1fe05b098c8dcf1b1eeefa88e80a8f963a844801ed59f"}, + {file = "statsmodels-0.14.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9edefa4ce08e40bc1d67d2f79bc686ee5e238e801312b5a029ee7786448c389a"}, + {file = "statsmodels-0.14.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:29c78a7601fdae1aa32104c5ebff2e0b72c26f33e870e2f94ab1bcfd927ece9b"}, + {file = "statsmodels-0.14.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f36494df7c03d63168fccee5038a62f469469ed6a4dd6eaeb9338abedcd0d5f5"}, + {file = "statsmodels-0.14.2-cp39-cp39-win_amd64.whl", hash = "sha256:8875823bdd41806dc853333cc4e1b7ef9481bad2380a999e66ea42382cf2178d"}, + {file = "statsmodels-0.14.2.tar.gz", hash = "sha256:890550147ad3a81cda24f0ba1a5c4021adc1601080bd00e191ae7cd6feecd6ad"}, +] + +[package.dependencies] +numpy = ">=1.22.3" +packaging = ">=21.3" +pandas = ">=1.4,<2.1.0 || >2.1.0" +patsy = ">=0.5.6" +scipy = ">=1.8,<1.9.2 || >1.9.2" + +[package.extras] +build = ["cython (>=0.29.33)"] +develop = ["colorama", "cython (>=0.29.33)", "cython (>=3.0.10,<4)", "flake8", "isort", "joblib", "matplotlib (>=3)", "pytest (>=7.3.0,<8)", "pytest-cov", "pytest-randomly", "pytest-xdist", "pywinpty", "setuptools-scm[toml] (>=8.0,<9.0)"] +docs = ["ipykernel", "jupyter-client", "matplotlib", "nbconvert", "nbformat", "numpydoc", "pandas-datareader", "sphinx"] + +[[package]] +name = "terminado" +version = "0.18.1" +description = "Tornado websocket backend for the Xterm.js Javascript terminal emulator library." +optional = true +python-versions = ">=3.8" +files = [ + {file = "terminado-0.18.1-py3-none-any.whl", hash = "sha256:a4468e1b37bb318f8a86514f65814e1afc977cf29b3992a4500d9dd305dcceb0"}, + {file = "terminado-0.18.1.tar.gz", hash = "sha256:de09f2c4b85de4765f7714688fff57d3e75bad1f909b589fde880460c753fd2e"}, +] + +[package.dependencies] +ptyprocess = {version = "*", markers = "os_name != \"nt\""} +pywinpty = {version = ">=1.1.0", markers = "os_name == \"nt\""} +tornado = ">=6.1.0" + +[package.extras] +docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] +test = ["pre-commit", "pytest (>=7.0)", "pytest-timeout"] +typing = ["mypy (>=1.6,<2.0)", "traitlets (>=5.11.1)"] + +[[package]] +name = "text-unidecode" +version = "1.3" +description = "The most basic Text::Unidecode port" +optional = true +python-versions = "*" +files = [ + {file = "text-unidecode-1.3.tar.gz", hash = "sha256:bad6603bb14d279193107714b288be206cac565dfa49aa5b105294dd5c4aab93"}, + {file = "text_unidecode-1.3-py2.py3-none-any.whl", hash = "sha256:1311f10e8b895935241623731c2ba64f4c455287888b18189350b67134a822e8"}, +] + +[[package]] +name = "tinycss2" +version = "1.3.0" +description = "A tiny CSS parser" +optional = true +python-versions = ">=3.8" +files = [ + {file = "tinycss2-1.3.0-py3-none-any.whl", hash = "sha256:54a8dbdffb334d536851be0226030e9505965bb2f30f21a4a82c55fb2a80fae7"}, + {file = "tinycss2-1.3.0.tar.gz", hash = "sha256:152f9acabd296a8375fbca5b84c961ff95971fcfc32e79550c8df8e29118c54d"}, +] + +[package.dependencies] +webencodings = ">=0.4" + +[package.extras] +doc = ["sphinx", "sphinx_rtd_theme"] +test = ["pytest", "ruff"] + +[[package]] +name = "tomli" +version = "2.0.1" +description = "A lil' TOML parser" +optional = true +python-versions = ">=3.7" +files = [ + {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, + {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, +] + +[[package]] +name = "tornado" +version = "6.4" +description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." +optional = true +python-versions = ">= 3.8" +files = [ + {file = "tornado-6.4-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:02ccefc7d8211e5a7f9e8bc3f9e5b0ad6262ba2fbb683a6443ecc804e5224ce0"}, + {file = "tornado-6.4-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:27787de946a9cffd63ce5814c33f734c627a87072ec7eed71f7fc4417bb16263"}, + {file = "tornado-6.4-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f7894c581ecdcf91666a0912f18ce5e757213999e183ebfc2c3fdbf4d5bd764e"}, + {file = "tornado-6.4-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e43bc2e5370a6a8e413e1e1cd0c91bedc5bd62a74a532371042a18ef19e10579"}, + {file = "tornado-6.4-cp38-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f0251554cdd50b4b44362f73ad5ba7126fc5b2c2895cc62b14a1c2d7ea32f212"}, + {file = "tornado-6.4-cp38-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:fd03192e287fbd0899dd8f81c6fb9cbbc69194d2074b38f384cb6fa72b80e9c2"}, + {file = "tornado-6.4-cp38-abi3-musllinux_1_1_i686.whl", hash = "sha256:88b84956273fbd73420e6d4b8d5ccbe913c65d31351b4c004ae362eba06e1f78"}, + {file = "tornado-6.4-cp38-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:71ddfc23a0e03ef2df1c1397d859868d158c8276a0603b96cf86892bff58149f"}, + {file = "tornado-6.4-cp38-abi3-win32.whl", hash = "sha256:6f8a6c77900f5ae93d8b4ae1196472d0ccc2775cc1dfdc9e7727889145c45052"}, + {file = "tornado-6.4-cp38-abi3-win_amd64.whl", hash = "sha256:10aeaa8006333433da48dec9fe417877f8bcc21f48dda8d661ae79da357b2a63"}, + {file = "tornado-6.4.tar.gz", hash = "sha256:72291fa6e6bc84e626589f1c29d90a5a6d593ef5ae68052ee2ef000dfd273dee"}, +] + +[[package]] +name = "traitlets" +version = "5.14.3" +description = "Traitlets Python configuration system" +optional = true +python-versions = ">=3.8" +files = [ + {file = "traitlets-5.14.3-py3-none-any.whl", hash = "sha256:b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f"}, + {file = "traitlets-5.14.3.tar.gz", hash = "sha256:9ed0579d3502c94b4b3732ac120375cda96f923114522847de4b3bb98b96b6b7"}, +] + +[package.extras] +docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] +test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0,<8.2)", "pytest-mock", "pytest-mypy-testing"] + +[[package]] +name = "treon" +version = "0.1.4" +description = "Testing framework for Jupyter Notebooks" +optional = true +python-versions = ">=3" +files = [ + {file = "treon-0.1.4-py3-none-any.whl", hash = "sha256:ab7f54c7f45ee38ee27f9022e065a7fc261f09b36dc595f619393a0548d93a17"}, + {file = "treon-0.1.4.tar.gz", hash = "sha256:6c31a1701036ee8a746adcc9ca59640269c01e887ea13ccc675680d39705d4f4"}, +] + +[package.dependencies] +docopt = "*" +jupyter = "*" +jupyter-client = "*" +nbconvert = "*" + +[[package]] +name = "types-python-dateutil" +version = "2.9.0.20240316" +description = "Typing stubs for python-dateutil" +optional = true +python-versions = ">=3.8" +files = [ + {file = "types-python-dateutil-2.9.0.20240316.tar.gz", hash = "sha256:5d2f2e240b86905e40944dd787db6da9263f0deabef1076ddaed797351ec0202"}, + {file = "types_python_dateutil-2.9.0.20240316-py3-none-any.whl", hash = "sha256:6b8cb66d960771ce5ff974e9dd45e38facb81718cc1e208b10b1baccbfdbee3b"}, +] + +[[package]] +name = "typing-extensions" +version = "4.11.0" +description = "Backported and Experimental Type Hints for Python 3.8+" +optional = true +python-versions = ">=3.8" +files = [ + {file = "typing_extensions-4.11.0-py3-none-any.whl", hash = "sha256:c1f94d72897edaf4ce775bb7558d5b79d8126906a14ea5ed1635921406c0387a"}, + {file = "typing_extensions-4.11.0.tar.gz", hash = "sha256:83f085bd5ca59c80295fc2a82ab5dac679cbe02b9f33f7d83af68e241bea51b0"}, +] + +[[package]] +name = "tzdata" +version = "2024.1" +description = "Provider of IANA time zone data" +optional = false +python-versions = ">=2" +files = [ + {file = "tzdata-2024.1-py2.py3-none-any.whl", hash = "sha256:9068bc196136463f5245e51efda838afa15aaeca9903f49050dfa2679db4d252"}, + {file = "tzdata-2024.1.tar.gz", hash = "sha256:2674120f8d891909751c38abcdfd386ac0a5a1127954fbc332af6b5ceae07efd"}, +] + +[[package]] +name = "uri-template" +version = "1.3.0" +description = "RFC 6570 URI Template Processor" +optional = true +python-versions = ">=3.7" +files = [ + {file = "uri-template-1.3.0.tar.gz", hash = "sha256:0e00f8eb65e18c7de20d595a14336e9f337ead580c70934141624b6d1ffdacc7"}, + {file = "uri_template-1.3.0-py3-none-any.whl", hash = "sha256:a44a133ea12d44a0c0f06d7d42a52d71282e77e2f937d8abd5655b8d56fc1363"}, +] + +[package.extras] +dev = ["flake8", "flake8-annotations", "flake8-bandit", "flake8-bugbear", "flake8-commas", "flake8-comprehensions", "flake8-continuation", "flake8-datetimez", "flake8-docstrings", "flake8-import-order", "flake8-literal", "flake8-modern-annotations", "flake8-noqa", "flake8-pyproject", "flake8-requirements", "flake8-typechecking-import", "flake8-use-fstring", "mypy", "pep8-naming", "types-PyYAML"] + +[[package]] +name = "urllib3" +version = "2.2.1" +description = "HTTP library with thread-safe connection pooling, file post, and more." +optional = true +python-versions = ">=3.8" +files = [ + {file = "urllib3-2.2.1-py3-none-any.whl", hash = "sha256:450b20ec296a467077128bff42b73080516e71b56ff59a60a02bef2232c4fa9d"}, + {file = "urllib3-2.2.1.tar.gz", hash = "sha256:d0570876c61ab9e520d776c38acbbb5b05a776d3f9ff98a5c8fd5162a444cf19"}, +] + +[package.extras] +brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] +h2 = ["h2 (>=4,<5)"] +socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] +zstd = ["zstandard (>=0.18.0)"] + +[[package]] +name = "wcwidth" +version = "0.2.13" +description = "Measures the displayed width of unicode strings in a terminal" +optional = true +python-versions = "*" +files = [ + {file = "wcwidth-0.2.13-py2.py3-none-any.whl", hash = "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859"}, + {file = "wcwidth-0.2.13.tar.gz", hash = "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5"}, +] + +[[package]] +name = "webcolors" +version = "1.13" +description = "A library for working with the color formats defined by HTML and CSS." +optional = true +python-versions = ">=3.7" +files = [ + {file = "webcolors-1.13-py3-none-any.whl", hash = "sha256:29bc7e8752c0a1bd4a1f03c14d6e6a72e93d82193738fa860cbff59d0fcc11bf"}, + {file = "webcolors-1.13.tar.gz", hash = "sha256:c225b674c83fa923be93d235330ce0300373d02885cef23238813b0d5668304a"}, +] + +[package.extras] +docs = ["furo", "sphinx", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-notfound-page", "sphinxext-opengraph"] +tests = ["pytest", "pytest-cov"] + +[[package]] +name = "webencodings" +version = "0.5.1" +description = "Character encoding aliases for legacy web content" +optional = true +python-versions = "*" +files = [ + {file = "webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78"}, + {file = "webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"}, +] + +[[package]] +name = "websocket-client" +version = "1.8.0" +description = "WebSocket client for Python with low level API options" +optional = true +python-versions = ">=3.8" +files = [ + {file = "websocket_client-1.8.0-py3-none-any.whl", hash = "sha256:17b44cc997f5c498e809b22cdf2d9c7a9e71c02c8cc2b6c56e7c2d1239bfa526"}, + {file = "websocket_client-1.8.0.tar.gz", hash = "sha256:3239df9f44da632f96012472805d40a23281a991027ce11d2f45a6f24ac4c3da"}, +] + +[package.extras] +docs = ["Sphinx (>=6.0)", "myst-parser (>=2.0.0)", "sphinx-rtd-theme (>=1.1.0)"] +optional = ["python-socks", "wsaccel"] +test = ["websockets"] + +[[package]] +name = "widgetsnbextension" +version = "4.0.10" +description = "Jupyter interactive widgets for Jupyter Notebook" +optional = true +python-versions = ">=3.7" +files = [ + {file = "widgetsnbextension-4.0.10-py3-none-any.whl", hash = "sha256:d37c3724ec32d8c48400a435ecfa7d3e259995201fbefa37163124a9fcb393cc"}, + {file = "widgetsnbextension-4.0.10.tar.gz", hash = "sha256:64196c5ff3b9a9183a8e699a4227fb0b7002f252c814098e66c4d1cd0644688f"}, +] + +[[package]] +name = "wisdem" +version = "3.15.3" +description = "Wind-Plant Integrated System Design & Engineering Model" +optional = true +python-versions = ">=3.9" +files = [ + {file = "wisdem-3.15.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:47ed687a46ea7a09eca81083854d79211a809711778510a357e5be6f38eb664a"}, + {file = "wisdem-3.15.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:877b5cdf8dfec86adcf86cfea5abafed20a805fcde29e0e0d917aa94781bb6a8"}, + {file = "wisdem-3.15.3-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dc1c5bb437723b288eb3abe1e2d5de8cb9bac7df0522ece4516e2cf45ab24813"}, + {file = "wisdem-3.15.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a077b93ae2c13c83411a03060e5e075ac48f65b77c0932f7b3f88a1d87ef247b"}, + {file = "wisdem-3.15.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:d9d7a592235e3602299780bb2460cc44a50a6cd8df51d5fa64dc5e3f43434a9c"}, + {file = "wisdem-3.15.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:17ba3ef0861f75eefc3d7a0fb3e7ad61dd0b0246346b7e80f73cd330bad20bd0"}, + {file = "wisdem-3.15.3-cp310-cp310-win_amd64.whl", hash = "sha256:6f8da3bb1ea4681f0ca339d78b5718b1ec2ba53b248e4e1a169265ef033c01a1"}, + {file = "wisdem-3.15.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4187c2bb072c306c693153fccf481de3b4666a96b933b10c77222946c34603fc"}, + {file = "wisdem-3.15.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:15822097ff53bffe18e1bf9fb6479ad709cfca3e18f58ba1240d350082166163"}, + {file = "wisdem-3.15.3-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8e59a40df0672799818cce199f6006ac1bda2e78e7be2b13061893179a6f3cbc"}, + {file = "wisdem-3.15.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac5862cf972a5086bc3774f0f6fb5890421909eddee9947b930a1ef4db859076"}, + {file = "wisdem-3.15.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:b9d64f8aaddf0c0fca9160fb53111935b85ff49a9fe937f50e4214d85a3bc12c"}, + {file = "wisdem-3.15.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a40ea5b12206e42771915e22d317de7627ab44a238db0161fd7cf11653f0ee10"}, + {file = "wisdem-3.15.3-cp311-cp311-win_amd64.whl", hash = "sha256:bffccec7be0165cdba60241f0a6c7c420422cab4a608a89ddabf9e1839ccc2a7"}, + {file = "wisdem-3.15.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:176a14302b682ff6fddb345b57ff7520af825846b2e33625a9b795fbb03a99aa"}, + {file = "wisdem-3.15.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:cb1d024ce1ae1c6834381c087977adaf6fa6f9a48fbf1a1510031d369fe854f1"}, + {file = "wisdem-3.15.3-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aac4eef9f5dc9115b9a1acc910202c4a9453c70ff93e16a724c1f95caffeac9e"}, + {file = "wisdem-3.15.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1e791a86639a788e697737879f99cfbf0ddd7fb1c1bc105aa4198489d03bb61d"}, + {file = "wisdem-3.15.3-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:146dd239f9a8f7b854358b9145ed0cad11c19394a05c76573b8476177c04e138"}, + {file = "wisdem-3.15.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a2875d38104485fdd034b0d2bb106084f667fe736653d96de7ea64e81f8e3985"}, + {file = "wisdem-3.15.3-cp312-cp312-win_amd64.whl", hash = "sha256:544ce4919225f711148c766b180b7b83a1dfc77101caec29ace800ca38941891"}, + {file = "wisdem-3.15.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:19bc8feae082c8fb295685b4f8141118e0ff25492d5697680c530b8fd1993cc6"}, + {file = "wisdem-3.15.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:22c0afb6235a5068db1850ebd217831ce81f986d5ee6f38affd483ab888d974d"}, + {file = "wisdem-3.15.3-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7454d8f56279fe3c1ba179b26f03d225b4360095552b1ccfb4d6b81bc6d042b1"}, + {file = "wisdem-3.15.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e32deab7e17046a92b0cf47e902045e401a1407fc6d354d3f60e80508e2c7975"}, + {file = "wisdem-3.15.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:c675da34f2fda489c950f8f9534328928f78da64aea272f536361badfbac33be"}, + {file = "wisdem-3.15.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c9598e2e1deb51e5f853db93a5b53e40db117a402b23aa176c45bc4f55ed89c2"}, + {file = "wisdem-3.15.3-cp39-cp39-win_amd64.whl", hash = "sha256:afb3492c76efe6d4aeb62ff02c28398a341501534da44e6f6d55e838837d4713"}, + {file = "wisdem-3.15.3.tar.gz", hash = "sha256:9f19b1532fee14ebf14908ed4addaa203715c9d02112f25b37285dd148348a07"}, +] + +[package.dependencies] +dearpygui = "*" +jsonschema = "*" +marmot-agents = ">=0.2.5" +moorpy = "*" +numpy = ">=1.26" +openmdao = ">=3.31" +openpyxl = "*" +pandas = "*" +pydoe3 = "*" +python-benedict = "*" +pyyaml = "*" +"ruamel.yaml" = "*" +scipy = "*" +simpy = "*" +sortedcontainers = "*" +statsmodels = "*" + +[package.extras] +dev = ["meson", "ninja", "swig"] +docs = ["sphinx", "sphinx-jsonschema", "sphinx-rtd-theme (>=1.3)", "sphinxcontrib-bibtex"] +opt = ["nlopt", "pyoptsparse"] +test = ["coveralls", "pytest", "pytest-cov"] + +[[package]] +name = "xlrd" +version = "2.0.1" +description = "Library for developers to extract data from Microsoft Excel (tm) .xls spreadsheet files" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" +files = [ + {file = "xlrd-2.0.1-py2.py3-none-any.whl", hash = "sha256:6a33ee89877bd9abc1158129f6e94be74e2679636b8a205b43b85206c3f0bbdd"}, + {file = "xlrd-2.0.1.tar.gz", hash = "sha256:f72f148f54442c6b056bf931dbc34f986fd0c3b0b6b5a58d013c9aef274d0c88"}, +] + +[package.extras] +build = ["twine", "wheel"] +docs = ["sphinx"] +test = ["pytest", "pytest-cov"] + +[[package]] +name = "zipp" +version = "3.18.2" +description = "Backport of pathlib-compatible object wrapper for zip files" +optional = true +python-versions = ">=3.8" +files = [ + {file = "zipp-3.18.2-py3-none-any.whl", hash = "sha256:dce197b859eb796242b0622af1b8beb0a722d52aa2f57133ead08edd5bf5374e"}, + {file = "zipp-3.18.2.tar.gz", hash = "sha256:6278d9ddbcfb1f1089a88fde84481528b07b0e10474e09dcfe53dad4069fa059"}, +] + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +testing = ["big-O", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-itertools", "pytest (>=6,!=8.1.*)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy", "pytest-ruff (>=0.2.1)"] + +[extras] +rosco = ["rosco"] + +[metadata] +lock-version = "2.0" +python-versions = "^3.9" +content-hash = "c869eff97c77ac768580e7cc54b0b21b451f721ce307a906c541d0967808baf7" diff --git a/openfast_python/pyproject.toml b/openfast_python/pyproject.toml new file mode 100644 index 0000000000..c5da3bb4c2 --- /dev/null +++ b/openfast_python/pyproject.toml @@ -0,0 +1,33 @@ +[tool.poetry] +name = "octue-openfast" +version = "3.5.4.beta-1" +description = "Readers and writers for OpenFAST files." +license = "Apache-2.0" +authors = [ + "NREL WISDEM Team ", + "dzalkind", + "Garrett Barter ", + "Pietro Bortolotti ", + "Mayank Chetan", + "John Jasa", +] +readme = "README.md" +packages = [{include = "openfast_io"}] + + +[tool.poetry.dependencies] +python = "^3.9" +numpy = "^1" +pandas = "^2" +xlrd = "^2" +ruamel_yaml = "^0.18" +rosco = {version = "^2.9.2", optional = true} + + +[tool.poetry.extras] +rosco = ["rosco"] + + +[build-system] +requires = ["poetry-core"] +build-backend = "poetry.core.masonry.api" From cef1e0b3a59851cf7bb625df773df34a20446ada Mon Sep 17 00:00:00 2001 From: Derek Slaughter Date: Tue, 9 Jul 2024 11:14:10 -0600 Subject: [PATCH 06/30] Always build openfastcpplib as shared. Use BUILD_OPENFAST_CPP_DRIVER to enable/disable openfastcpp so yaml-cpp isn't required for openfastcpplib --- glue-codes/openfast-cpp/CMakeLists.txt | 54 ++++++++++++++++---------- 1 file changed, 33 insertions(+), 21 deletions(-) diff --git a/glue-codes/openfast-cpp/CMakeLists.txt b/glue-codes/openfast-cpp/CMakeLists.txt index 1b9cc76bf0..6405e48cc6 100644 --- a/glue-codes/openfast-cpp/CMakeLists.txt +++ b/glue-codes/openfast-cpp/CMakeLists.txt @@ -27,9 +27,8 @@ find_package(MPI REQUIRED) find_package(LibXml2 REQUIRED) find_package(ZLIB REQUIRED) find_package(HDF5 REQUIRED COMPONENTS C HL) -find_package(yaml-cpp REQUIRED) -add_library(openfastcpplib src/OpenFAST.cpp src/SC.cpp) +add_library(openfastcpplib SHARED src/OpenFAST.cpp src/SC.cpp) set_property(TARGET openfastcpplib PROPERTY POSITION_INDEPENDENT_CODE ON) target_link_libraries(openfastcpplib openfastlib @@ -48,28 +47,41 @@ target_include_directories(openfastcpplib PUBLIC ) set_target_properties(openfastcpplib PROPERTIES PUBLIC_HEADER "src/OpenFAST.H;src/SC.h") -add_executable(openfastcpp src/FAST_Prog.cpp) -target_link_libraries(openfastcpp - ${YAML_CPP_LIBRARIES} - openfastcpplib -) -target_include_directories(openfastcpp PRIVATE ${YAML_CPP_INCLUDE_DIR}) -set_target_properties(openfastcpp PROPERTIES LINKER_LANGUAGE CXX) - -if(MPI_COMPILE_FLAGS) - set_target_properties(openfastcpp PROPERTIES - COMPILE_FLAGS "${MPI_COMPILE_FLAGS}") -endif(MPI_COMPILE_FLAGS) - -if(MPI_LINK_FLAGS) - set_target_properties(openfastcpp PROPERTIES - LINK_FLAGS "${MPI_LINK_FLAGS}") -endif(MPI_LINK_FLAGS) - -install(TARGETS openfastcpp openfastcpplib +install(TARGETS openfastcpplib EXPORT "${CMAKE_PROJECT_NAME}Libraries" RUNTIME DESTINATION lib ARCHIVE DESTINATION lib LIBRARY DESTINATION lib PUBLIC_HEADER DESTINATION include ) + +# Build driver if requested +if (BUILD_OPENFAST_CPP_DRIVER) + + find_package(yaml-cpp REQUIRED) + add_executable(openfastcpp src/FAST_Prog.cpp) + target_link_libraries(openfastcpp + ${YAML_CPP_LIBRARIES} + openfastcpplib + ) + target_include_directories(openfastcpp PRIVATE ${YAML_CPP_INCLUDE_DIR}) + set_target_properties(openfastcpp PROPERTIES LINKER_LANGUAGE CXX) + + if(MPI_COMPILE_FLAGS) + set_target_properties(openfastcpp PROPERTIES + COMPILE_FLAGS "${MPI_COMPILE_FLAGS}") + endif(MPI_COMPILE_FLAGS) + + if(MPI_LINK_FLAGS) + set_target_properties(openfastcpp PROPERTIES + LINK_FLAGS "${MPI_LINK_FLAGS}") + endif(MPI_LINK_FLAGS) + + install(TARGETS openfastcpp + EXPORT "${CMAKE_PROJECT_NAME}Libraries" + RUNTIME DESTINATION lib + ARCHIVE DESTINATION lib + LIBRARY DESTINATION lib + PUBLIC_HEADER DESTINATION include + ) +endif() From 62b273e3b77554f0c6458b1a878109e5ce781910 Mon Sep 17 00:00:00 2001 From: Derek Slaughter Date: Thu, 11 Jul 2024 17:16:49 +0000 Subject: [PATCH 07/30] Fix a couple of bugs in NWTC_IO.f90 which cause out of bounds array addressing or null pointer dereferencing - CountWords would scan past end of line - ProcessComFile Cleanup would dereference a null pointer when getting NextFile pointer - WrScr would hide a character string allocation which caused a memory issue in ifx --- modules/nwtc-library/src/NWTC_IO.f90 | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/modules/nwtc-library/src/NWTC_IO.f90 b/modules/nwtc-library/src/NWTC_IO.f90 index 231b7e4a3c..879591c1b9 100644 --- a/modules/nwtc-library/src/NWTC_IO.f90 +++ b/modules/nwtc-library/src/NWTC_IO.f90 @@ -1584,7 +1584,7 @@ FUNCTION CountWords ( Line ) Ch = 0 - DO + DO while (Ch + 1 < len(Line)) NextWhite = SCAN( Line(Ch+1:) , ' ,;''"'//Tab ) Ch = Ch + NextWhite @@ -4355,12 +4355,11 @@ SUBROUTINE Cleanup ( ) ! Deallocate the linked list of file names. CurrFile => FirstFile - NextFile => CurrFile%Next - DO + DO WHILE(ASSOCIATED(currFile)) + NextFile => CurrFile%Next DEALLOCATE(CurrFile) IF ( .NOT. ASSOCIATED( NextFile ) ) EXIT CurrFile => NextFile - NextFile => CurrFile%Next ENDDO !bjj: this needs to happen elsewhere... @@ -7708,7 +7707,7 @@ RECURSIVE SUBROUTINE WrScr ( InStr ) INTEGER :: NewLineIndx ! The string index where the NewLine character occurs CHARACTER(10) :: Frm ! Format specifier for the output. - CHARACTER(LEN(InStr)) :: Str ! The next string to be processed + CHARACTER(Len=:),allocatable :: Str ! The next string to be processed From 5f7b3c9496514515b1bbf0af826286e22474de2b Mon Sep 17 00:00:00 2001 From: andrew-platt Date: Thu, 11 Jul 2024 14:59:50 -0600 Subject: [PATCH 08/30] ED: set all values in RtHS to zero during allocation Some of these values were not getting zeroed out. This was occasionally leading to spurious root acceleration values when memory that was previously occupied by something else non-zero was used. --- modules/elastodyn/src/ElastoDyn.f90 | 380 +++++++++------------------- 1 file changed, 118 insertions(+), 262 deletions(-) diff --git a/modules/elastodyn/src/ElastoDyn.f90 b/modules/elastodyn/src/ElastoDyn.f90 index 2bcfb11fc4..28db59d3d5 100644 --- a/modules/elastodyn/src/ElastoDyn.f90 +++ b/modules/elastodyn/src/ElastoDyn.f90 @@ -2872,296 +2872,152 @@ SUBROUTINE SetOtherParameters( p, InputFileData, ErrStat, ErrMsg ) CALL Coeff(p, InputFileData, ErrStat, ErrMsg) IF ( ErrStat /= ErrID_None ) RETURN - - END SUBROUTINE SetOtherParameters + + !---------------------------------------------------------------------------------------------------------------------------------- !> This routine allocates arrays in the RtHndSide data structure. !! It requires p\%TwrNodes, p\%NumBl, p\%TipNode, p\%NDOF, p\%BldNodes to be set before calling this routine. SUBROUTINE Alloc_RtHS( RtHS, p, ErrStat, ErrMsg ) -!.................................................................................................................................. - TYPE(ED_RtHndSide), INTENT(INOUT) :: RtHS !< RtHndSide data type TYPE(ED_ParameterType), INTENT(IN) :: p !< Parameters of the structural dynamics module INTEGER(IntKi), INTENT(OUT) :: ErrStat !< Error status CHARACTER(*), INTENT(OUT) :: ErrMsg !< Error message ! local variables: + integer(IntKi) :: ErrStat2 + character(ErrMsgLen) :: ErrMsg2 INTEGER(IntKi), PARAMETER :: Dims = 3 ! The position arrays all must be allocated with a dimension for X,Y,and Z CHARACTER(*), PARAMETER :: RoutineName = 'Alloc_RtHS' - ! positions: - !CALL AllocAry( RtHS%rZT, Dims, p%TwrNodes, 'rZT', ErrStat, ErrMsg ); IF ( ErrStat /= ErrID_None ) RETURN - CALL AllocAry( RtHS%rT, Dims, p%TwrNodes, 'rT', ErrStat, ErrMsg ); IF ( ErrStat /= ErrID_None ) RETURN - CALL AllocAry( RtHS%rT0T, Dims, p%TwrNodes, 'rT0T', ErrStat, ErrMsg ); IF ( ErrStat /= ErrID_None ) RETURN - !CALL AllocAry( RtHS%rQS, Dims, p%NumBl,p%TipNode, 'rQS', ErrStat, ErrMsg ); IF ( ErrStat /= ErrID_None ) RETURN - !CALL AllocAry( RtHS%rS, Dims, p%NumBl,p%TipNode, 'rS', ErrStat, ErrMsg ); IF ( ErrStat /= ErrID_None ) RETURN - CALL AllocAry( RtHS%rS0S, Dims, p%NumBl,p%TipNode, 'rS0S', ErrStat, ErrMsg ); IF ( ErrStat /= ErrID_None ) RETURN - CALL AllocAry( RtHS%rPS0, Dims, p%NumBl, 'rPS0', ErrStat, ErrMsg ); IF ( ErrStat /= ErrID_None ) RETURN - CALL AllocAry( RtHS%rSAerCen, Dims, p%TipNode, p%NumBl,'rSAerCen', ErrStat, ErrMsg ); IF ( ErrStat /= ErrID_None ) RETURN + ! positions: + !call AllocAry( RtHS%rZT, Dims, p%TwrNodes, 'rZT', ErrStat2, ErrMsg2 ); if (Failed()) return; RtHS%rZT = 0.0_ReKi + call AllocAry( RtHS%rT, Dims, p%TwrNodes, 'rT', ErrStat2, ErrMsg2 ); if (Failed()) return; RtHS%rT = 0.0_ReKi + call AllocAry( RtHS%rT0T, Dims, p%TwrNodes, 'rT0T', ErrStat2, ErrMsg2 ); if (Failed()) return; RtHS%rT0T = 0.0_ReKi + !call AllocAry( RtHS%rQS, Dims, p%NumBl,p%TipNode, 'rQS', ErrStat2, ErrMsg2 ); if (Failed()) return; RtHS%rQS = 0.0_ReKi + !call AllocAry( RtHS%rS, Dims, p%NumBl,p%TipNode, 'rS', ErrStat2, ErrMsg2 ); if (Failed()) return; RtHS%rS = 0.0_ReKi + call AllocAry( RtHS%rS0S, Dims, p%NumBl,p%TipNode, 'rS0S', ErrStat2, ErrMsg2 ); if (Failed()) return; RtHS%rS0S = 0.0_ReKi + call AllocAry( RtHS%rPS0, Dims, p%NumBl, 'rPS0', ErrStat2, ErrMsg2 ); if (Failed()) return; RtHS%rPS0 = 0.0_ReKi + call AllocAry( RtHS%rSAerCen, Dims, p%TipNode, p%NumBl,'rSAerCen', ErrStat2, ErrMsg2 ); if (Failed()) return; RtHS%rSAerCen = 0.0_ReKi - ! tower - allocate(RtHS%rZT( Dims, 0:p%TwrNodes), & - RtHS%AngPosEF( Dims, 0:p%TwrNodes), & - RtHS%AngPosXF( Dims, 0:p%TwrNodes), & - RtHS%AngVelEF( Dims, 0:p%TwrNodes), & - RtHS%LinVelET( Dims, 0:p%TwrNodes), & - RtHS%AngAccEFt(Dims, 0:p%TwrNodes), & - RtHS%LinAccETt(Dims, 0:p%TwrNodes), & - STAT=ErrStat) - if (ErrStat /= 0) then - ErrStat = ErrID_Fatal - ErrMsg = "Error allocating rZT, AngPosEF, AngPosXF, LinVelET, AngVelEF, LinAccETt, and AngAccEFt arrays." - RETURN - end if - - - ! blades - allocate(RtHS%rS( Dims, p%NumBl,0:p%TipNode), & - RtHS%rQS(Dims, p%NumBl,0:p%TipNode), STAT=ErrStat) - if (ErrStat /= 0) then - ErrStat = ErrID_Fatal - ErrMsg = "Error allocating rS and rQS." - RETURN - end if - - - ! angular velocities (including partial angular velocities): - !CALL AllocAry( RtHS%AngVelEF, Dims, p%TwrNodes, 'AngVelEF', ErrStat, ErrMsg ); IF ( ErrStat /= ErrID_None ) RETURN - !CALL AllocAry( RtHS%AngPosEF, Dims, p%TwrNodes, 'AngPosEF', ErrStat, ErrMsg ); IF ( ErrStat /= ErrID_None ) RETURN - !CALL AllocAry( RtHS%AngPosXF, Dims, p%TwrNodes, 'AngPosXF', ErrStat, ErrMsg ); IF ( ErrStat /= ErrID_None ) RETURN - - - ! These angular velocities are allocated to start numbering a dimension with 0 instead of 1: - ALLOCATE ( RtHS%PAngVelEB(p%NDOF,0:1,Dims) , STAT=ErrStat ) - IF ( ErrStat /= 0_IntKi ) THEN - ErrStat = ErrID_Fatal - ErrMsg = ' Error allocating memory for the PAngVelEB array.' - RETURN - ENDIF - - ALLOCATE ( RtHS%PAngVelER(p%NDOF,0:1,Dims) , STAT=ErrStat ) - IF ( ErrStat /= 0_IntKi ) THEN - ErrStat = ErrID_Fatal - ErrMsg = ' Error allocating memory for the PAngVelER array.' - RETURN - ENDIF - - ALLOCATE ( RtHS%PAngVelEX(p%NDOF,0:1,Dims) , STAT=ErrStat ) - IF ( ErrStat /= 0_IntKi ) THEN - ErrStat = ErrID_Fatal - ErrMsg = ' Error allocating memory for the PAngVelEX array.' - RETURN - ENDIF - - ALLOCATE ( RtHS%PAngVelEA(p%NDOF,0:1,Dims) , STAT=ErrStat ) - IF ( ErrStat /= 0_IntKi ) THEN - ErrStat = ErrID_Fatal - ErrMsg = ' Error allocating memory for the PAngVelEA array.' - RETURN - ENDIF - - ALLOCATE ( RtHS%PAngVelEF(0:p%TwrNodes, p%NDOF,0:1,Dims) , STAT=ErrStat ) - IF ( ErrStat /= 0_IntKi ) THEN - ErrStat = ErrID_Fatal - ErrMsg = ' Error allocating memory for the PAngVelEF array.' - RETURN - ENDIF - ALLOCATE ( RtHS%PAngVelEG( p%NDOF,0:1,Dims) , STAT=ErrStat ) - IF ( ErrStat /= 0_IntKi ) THEN - ErrStat = ErrID_Fatal - ErrMsg = ' Error allocating memory for the PAngVelEG array.' - RETURN - ENDIF - ALLOCATE ( RtHS%PAngVelEH( p%NDOF,0:1,Dims) , STAT=ErrStat ) - IF ( ErrStat /= 0_IntKi ) THEN - ErrStat = ErrID_Fatal - ErrMsg = ' Error allocating memory for the PAngVelEH array.' - RETURN - ENDIF - ALLOCATE ( RtHS%PAngVelEL( p%NDOF,0:1,Dims) , STAT=ErrStat ) - IF ( ErrStat /= 0_IntKi ) THEN - ErrStat = ErrID_Fatal - ErrMsg = ' Error allocating memory for the PAngVelEL array.' - RETURN - ENDIF - ALLOCATE ( RtHS%PAngVelEM(p%NumBl,0:p%TipNode,p%NDOF,0:1,Dims) , STAT=ErrStat ) - IF ( ErrStat /= 0_IntKi ) THEN - ErrStat = ErrID_Fatal - ErrMsg = ' Error allocating memory for the PAngVelEM array.' - RETURN - ENDIF - ALLOCATE ( RtHS%PAngVelEN( p%NDOF,0:1,Dims) , STAT=ErrStat ) - IF ( ErrStat /= 0_IntKi ) THEN - ErrStat = ErrID_Fatal - ErrMsg = ' Error allocating memory for the PAngVelEN array.' - RETURN - ENDIF - - ! angular accelerations: - !CALL AllocAry( RtHS%AngAccEFt, Dims, p%TwrNodes, 'AngAccEFt', ErrStat, ErrMsg ); IF ( ErrStat /= ErrID_None ) RETURN - - ! linear velocities (including partial linear velocities): - !CALL AllocAry( RtHS%LinVelET, Dims, p%TwrNodes, 'LinVelET', ErrStat, ErrMsg ); IF ( ErrStat /= ErrID_None ) RETURN - - !CALL AllocAry( RtHS%LinVelESm2, p%NumBl, 'LinVelESm2',ErrStat, ErrMsg ); IF ( ErrStat /= ErrID_None ) RETURN ! The m2-component (closest to tip) of LinVelES - ALLOCATE( RtHS%LinVelES( Dims, 0:p%TipNode, p%NumBl ), & - RtHS%AngVelEM( Dims, 0:p%TipNode, p%NumBl ), STAT=ErrStat ) - IF (ErrStat /= 0 ) THEN - ErrStat = ErrID_Fatal - ErrMsg = RoutineName//":Error allocating LinVelES and AngVelEM." - RETURN - END IF - - ! These linear velocities are allocated to start numbering a dimension with 0 instead of 1: - - ALLOCATE ( RtHS%PLinVelEIMU(p%NDOF,0:1,Dims) , STAT=ErrStat ) - IF ( ErrStat /= 0_IntKi ) THEN - ErrStat = ErrID_Fatal - ErrMsg = ' Error allocating memory for the PLinVelEIMU array.' - RETURN - ENDIF + ! tower + allocate(RtHS%rZT( Dims, 0:p%TwrNodes), STAT=ErrStat2); if (Failed0('rZT ')) return; RtHS%rZT = 0.0_ReKi + allocate(RtHS%AngPosEF( Dims, 0:p%TwrNodes), STAT=ErrStat2); if (Failed0('AngPosEF ')) return; RtHS%AngPosEF = 0.0_ReKi + allocate(RtHS%AngPosXF( Dims, 0:p%TwrNodes), STAT=ErrStat2); if (Failed0('AngPosXF ')) return; RtHS%AngPosXF = 0.0_ReKi + allocate(RtHS%AngVelEF( Dims, 0:p%TwrNodes), STAT=ErrStat2); if (Failed0('AngVelEF ')) return; RtHS%AngVelEF = 0.0_ReKi + allocate(RtHS%LinVelET( Dims, 0:p%TwrNodes), STAT=ErrStat2); if (Failed0('LinVelET ')) return; RtHS%LinVelET = 0.0_ReKi + allocate(RtHS%AngAccEFt(Dims, 0:p%TwrNodes), STAT=ErrStat2); if (Failed0('AngAccEFt')) return; RtHS%AngAccEFt = 0.0_ReKi + allocate(RtHS%LinAccETt(Dims, 0:p%TwrNodes), STAT=ErrStat2); if (Failed0('LinAccETt')) return; RtHS%LinAccETt = 0.0_ReKi + + ! blades + allocate(RtHS%rS( Dims, p%NumBl, 0:p%TipNode), STAT=ErrStat2); if (Failed0('rS ')) return; RtHS%rS = 0.0_ReKi + allocate(RtHS%rQS(Dims, p%NumBl, 0:p%TipNode), STAT=ErrStat2); if (Failed0('rQS')) return; RtHS%rQS = 0.0_ReKi + + ! angular velocities (including partial angular velocities): + !call AllocAry( RtHS%AngVelEF, Dims, p%TwrNodes, 'AngVelEF', ErrStat2, ErrMsg2 ); if (Failed()) return; RtHS%AngVelEF = 0.0_ReKi + !call AllocAry( RtHS%AngPosEF, Dims, p%TwrNodes, 'AngPosEF', ErrStat2, ErrMsg2 ); if (Failed()) return; RtHS%AngPosEF = 0.0_ReKi + !call AllocAry( RtHS%AngPosXF, Dims, p%TwrNodes, 'AngPosXF', ErrStat2, ErrMsg2 ); if (Failed()) return; RtHS%AngPosXF = 0.0_ReKi + + + ! These angular velocities are allocated to start numbering a dimension with 0 instead of 1: + allocate(RtHS%PAngVelEB( p%NDOF,0:1,Dims), STAT=ErrStat2); if (Failed0('PAngVelEB')) return; RtHS%PAngVelEB = 0.0_ReKi + allocate(RtHS%PAngVelER( p%NDOF,0:1,Dims), STAT=ErrStat2); if (Failed0('PAngVelER')) return; RtHS%PAngVelER = 0.0_ReKi + allocate(RtHS%PAngVelEX( p%NDOF,0:1,Dims), STAT=ErrStat2); if (Failed0('PAngVelEX')) return; RtHS%PAngVelEX = 0.0_ReKi + allocate(RtHS%PAngVelEA( p%NDOF,0:1,Dims), STAT=ErrStat2); if (Failed0('PAngVelEA')) return; RtHS%PAngVelEA = 0.0_ReKi + allocate(RtHS%PAngVelEF(0:p%TwrNodes, p%NDOF,0:1,Dims), STAT=ErrStat2); if (Failed0('PAngVelEF')) return; RtHS%PAngVelEF = 0.0_ReKi + allocate(RtHS%PAngVelEG( p%NDOF,0:1,Dims), STAT=ErrStat2); if (Failed0('PAngVelEG')) return; RtHS%PAngVelEG = 0.0_ReKi + allocate(RtHS%PAngVelEH( p%NDOF,0:1,Dims), STAT=ErrStat2); if (Failed0('PAngVelEH')) return; RtHS%PAngVelEH = 0.0_ReKi + allocate(RtHS%PAngVelEL( p%NDOF,0:1,Dims), STAT=ErrStat2); if (Failed0('PAngVelEL')) return; RtHS%PAngVelEL = 0.0_ReKi + allocate(RtHS%PAngVelEM(p%NumBl,0:p%TipNode,p%NDOF,0:1,Dims), STAT=ErrStat2); if (Failed0('PAngVelEM')) return; RtHS%PAngVelEM = 0.0_ReKi + allocate(RtHS%PAngVelEN( p%NDOF,0:1,Dims), STAT=ErrStat2); if (Failed0('PAngVelEN')) return; RtHS%PAngVelEN = 0.0_ReKi + + ! angular accelerations: + !CALL AllocAry( RtHS%AngAccEFt, Dims, p%TwrNodes, 'AngAccEFt', ErrStat2, ErrMsg2 ); + + ! linear velocities (including partial linear velocities): + !CALL AllocAry( RtHS%LinVelET, Dims, p%TwrNodes, 'LinVelET', ErrStat2, ErrMsg2 ); + !CALL AllocAry( RtHS%LinVelESm2, p%NumBl, 'LinVelESm2',ErrStat2, ErrMsg2 ); ! The m2-component (closest to tip) of LinVelES + allocate(RtHS%LinVelES( Dims, 0:p%TipNode, p%NumBl), STAT=ErrStat2); if (Failed0('LinVelES')) return; RtHS%LinVelES = 0.0_ReKi + allocate(RtHS%AngVelEM( Dims, 0:p%TipNode, p%NumBl), STAT=ErrStat2); if (Failed0('AngVelEM')) return; RtHS%AngVelEM = 0.0_ReKi + + ! These linear velocities are allocated to start numbering a dimension with 0 instead of 1: + allocate(RtHS%PLinVelEIMU(p%NDOF,0:1,Dims), STAT=ErrStat2); if (Failed0('PLinVelEIMU')) return; RtHS%PLinVelEIMU = 0.0_ReKi; + allocate(RtHS%PLinVelEO(p%NDOF,0:1,Dims), STAT=ErrStat2); if (Failed0('PLinVelEO ')) return; RtHS%PLinVelEO = 0.0_ReKi; + allocate(RtHS%PLinVelES(p%NumBl,0:p%TipNode,p%NDOF,0:1,Dims), STAT=ErrStat2); if (Failed0('PLinVelES ')) return; RtHS%PLinVelES = 0.0_ReKi; + allocate(RtHS%PLinVelET(0:p%TwrNodes,p%NDOF,0:1,Dims), STAT=ErrStat2); if (Failed0('PLinVelET ')) return; RtHS%PLinVelET = 0.0_ReKi; + allocate(RtHS%PLinVelEZ(p%NDOF,0:1,Dims), STAT=ErrStat2); if (Failed0('PLinVelEZ ')) return; RtHS%PLinVelEZ = 0.0_ReKi; + allocate(RtHS%PLinVelEC(p%NDOF,0:1,3), STAT=ErrStat2); if (Failed0('PLinVelEC ')) return; RtHS%PLinVelEC = 0.0_ReKi; + allocate(RtHS%PLinVelED(p%NDOF,0:1,3), STAT=ErrStat2); if (Failed0('PLinVelED ')) return; RtHS%PLinVelED = 0.0_ReKi; + allocate(RtHS%PLinVelEI(p%NDOF,0:1,3), STAT=ErrStat2); if (Failed0('PLinVelEI ')) return; RtHS%PLinVelEI = 0.0_ReKi; + allocate(RtHS%PLinVelEJ(p%NDOF,0:1,3), STAT=ErrStat2); if (Failed0('PLinVelEJ ')) return; RtHS%PLinVelEJ = 0.0_ReKi; + allocate(RtHS%PLinVelEP(p%NDOF,0:1,3), STAT=ErrStat2); if (Failed0('PLinVelEP ')) return; RtHS%PLinVelEP = 0.0_ReKi; + allocate(RtHS%PLinVelEQ(p%NDOF,0:1,3), STAT=ErrStat2); if (Failed0('PLinVelEQ ')) return; RtHS%PLinVelEQ = 0.0_ReKi; + allocate(RtHS%PLinVelEU(p%NDOF,0:1,3), STAT=ErrStat2); if (Failed0('PLinVelEU ')) return; RtHS%PLinVelEU = 0.0_ReKi; + allocate(RtHS%PLinVelEV(p%NDOF,0:1,3), STAT=ErrStat2); if (Failed0('PLinVelEV ')) return; RtHS%PLinVelEV = 0.0_ReKi; + allocate(RtHS%PLinVelEW(p%NDOF,0:1,3), STAT=ErrStat2); if (Failed0('PLinVelEW ')) return; RtHS%PLinVelEW = 0.0_ReKi; + allocate(RtHS%PLinVelEY(p%NDOF,0:1,3), STAT=ErrStat2); if (Failed0('PLinVelEY ')) return; RtHS%PLinVelEY = 0.0_ReKi; + allocate(RtHS%LinAccESt(Dims, p%NumBl, 0:p%TipNode), STAT=ErrStat2); if (Failed0('LinAccESt ')) return; RtHS%LinAccESt = 0.0_ReKi; + allocate(RtHS%AngAccEKt(Dims, 0:p%TipNode, p%NumBl), STAT=ErrStat2); if (Failed0('AngAccEKt ')) return; RtHS%AngAccEKt = 0.0_ReKi; + allocate(RtHS%AngPosHM( Dims, p%NumBl, 0:p%TipNode), STAT=ErrStat2); if (Failed0('AngPosHM ')) return; RtHS%AngPosHM = 0.0_ReKi; + + !call AllocAry( RtHS%LinAccESt, Dims, p%NumBl, p%TipNode,'LinAccESt', ErrStat2, ErrMsg2); if ( Failed()) return; RtHS%LinAccESt = 0.0_ReKi; + !call AllocAry( RtHS%LinAccETt, Dims, p%TwrNodes, 'LinAccETt', ErrStat2, ErrMsg2); if ( Failed()) return; RtHS%LinAccETt = 0.0_ReKi + call AllocAry( RtHS%PFrcS0B, Dims, p%NumBl,p%NDOF, 'PFrcS0B ', ErrStat2, ErrMsg2); if ( Failed()) return; RtHS%PFrcS0B = 0.0_ReKi + call AllocAry( RtHS%FrcS0Bt, Dims, p%NumBl, 'FrcS0Bt ', ErrStat2, ErrMsg2); if ( Failed()) return; RtHS%FrcS0Bt = 0.0_ReKi + call AllocAry( RtHS%PMomH0B, Dims, p%NumBl, p%NDOF, 'PMomH0B ', ErrStat2, ErrMsg2); if ( Failed()) return; RtHS%PMomH0B = 0.0_ReKi + call AllocAry( RtHS%MomH0Bt, Dims, p%NumBl, 'MomH0Bt ', ErrStat2, ErrMsg2); if ( Failed()) return; RtHS%MomH0Bt = 0.0_ReKi + call AllocAry( RtHS%PFrcPRot, Dims, p%NDOF, 'PFrcPRot ', ErrStat2, ErrMsg2); if ( Failed()) return; RtHS%PFrcPRot = 0.0_ReKi + call AllocAry( RtHS%PMomLPRot, Dims, p%NDOF, 'PMomLPRot', ErrStat2, ErrMsg2); if ( Failed()) return; RtHS%PMomLPRot = 0.0_ReKi + call AllocAry( RtHS%PMomNGnRt, Dims, p%NDOF, 'PMomNGnRt', ErrStat2, ErrMsg2); if ( Failed()) return; RtHS%PMomNGnRt = 0.0_ReKi + call AllocAry( RtHS%PMomNTail, Dims, p%NDOF, 'PMomNTail', ErrStat2, ErrMsg2); if ( Failed()) return; RtHS%PMomNTail = 0.0_ReKi + call AllocAry( RtHS%PFrcONcRt, Dims, p%NDOF, 'PFrcONcRt', ErrStat2, ErrMsg2); if ( Failed()) return; RtHS%PFrcONcRt = 0.0_ReKi + call AllocAry( RtHS%PMomBNcRt, Dims, p%NDOF, 'PMomBNcRt', ErrStat2, ErrMsg2); if ( Failed()) return; RtHS%PMomBNcRt = 0.0_ReKi + call AllocAry( RtHS%PFrcT0Trb, Dims, p%NDOF, 'PFrcT0Trb', ErrStat2, ErrMsg2); if ( Failed()) return; RtHS%PFrcT0Trb = 0.0_ReKi + call AllocAry( RtHS%PMomX0Trb, Dims, p%NDOF, 'PMomX0Trb', ErrStat2, ErrMsg2); if ( Failed()) return; RtHS%PMomX0Trb = 0.0_ReKi + call AllocAry( RtHS%FSAero, Dims, p%NumBl,p%BldNodes,'FSAero ', ErrStat2, ErrMsg2); if ( Failed()) return; RtHS%FSAero = 0.0_ReKi + call AllocAry( RtHS%MMAero, Dims, p%NumBl,p%BldNodes,'MMAero ', ErrStat2, ErrMsg2); if ( Failed()) return; RtHS%MMAero = 0.0_ReKi + call AllocAry( RtHS%FSTipDrag, Dims, p%NumBl, 'FSTipDrag', ErrStat2, ErrMsg2); if ( Failed()) return; RtHS%FSTipDrag = 0.0_ReKi + call AllocAry( RtHS%PFTHydro, Dims, p%TwrNodes, p%NDOF,'PFTHydro ', ErrStat2, ErrMsg2); if ( Failed()) return; RtHS%PFTHydro = 0.0_ReKi + call AllocAry( RtHS%PMFHydro, Dims, p%TwrNodes, p%NDOF,'PMFHydro ', ErrStat2, ErrMsg2); if ( Failed()) return; RtHS%PMFHydro = 0.0_ReKi + call AllocAry( RtHS%FTHydrot, Dims, p%TwrNodes, 'FTHydrot ', ErrStat2, ErrMsg2); if ( Failed()) return; RtHS%FTHydrot = 0.0_ReKi + call AllocAry( RtHS%MFHydrot, Dims, p%TwrNodes, 'MFHydrot ', ErrStat2, ErrMsg2); if ( Failed()) return; RtHS%MFHydrot = 0.0_ReKi + + call AllocAry( RtHS%PFrcVGnRt, Dims, p%NDOF, 'PFrcVGnRt', ErrStat2, ErrMsg2); if ( Failed()) return; RtHS%PFrcVGnRt = 0.0_ReKi + call AllocAry( RtHS%PFrcWTail, Dims, p%NDOF, 'PFrcWTail', ErrStat2, ErrMsg2); if ( Failed()) return; RtHS%PFrcWTail = 0.0_ReKi + call AllocAry( RtHS%PFrcZAll, Dims, p%NDOF, 'PFrcZAll ', ErrStat2, ErrMsg2); if ( Failed()) return; RtHS%PFrcZAll = 0.0_ReKi + call AllocAry( RtHS%PMomXAll, Dims, p%NDOF, 'PMomXAll ', ErrStat2, ErrMsg2); if ( Failed()) return; RtHS%PMomXAll = 0.0_ReKi - ALLOCATE ( RtHS%PLinVelEO(p%NDOF,0:1,Dims) , STAT=ErrStat ) - IF ( ErrStat /= 0_IntKi ) THEN - ErrStat = ErrID_Fatal - ErrMsg = ' Error allocating memory for the PLinVelEO array.' - RETURN - ENDIF - - ALLOCATE ( RtHS%PLinVelES(p%NumBl,0:p%TipNode,p%NDOF,0:1,Dims) , STAT=ErrStat ) - IF ( ErrStat /= 0_IntKi ) THEN - ErrStat = ErrID_Fatal - ErrMsg = ' Error allocating memory for the PLinVelES array.' - RETURN - ENDIF - - ALLOCATE ( RtHS%PLinVelET(0:p%TwrNodes,p%NDOF,0:1,Dims) , STAT=ErrStat ) - IF ( ErrStat /= 0_IntKi ) THEN - ErrStat = ErrID_Fatal - ErrMsg = ' Error allocating memory for the PLinVelET array.' - RETURN - ENDIF - - ALLOCATE ( RtHS%PLinVelEZ(p%NDOF,0:1,Dims) , STAT=ErrStat ) - IF ( ErrStat /= 0_IntKi ) THEN - ErrStat = ErrID_Fatal - ErrMsg = ' Error allocating memory for the PLinVelEZ array.' - RETURN - ENDIF - - ALLOCATE ( RtHS%PLinVelEC(p%NDOF,0:1,3) , STAT=ErrStat ) - IF ( ErrStat /= 0_IntKi ) THEN - ErrStat = ErrID_Fatal - ErrMsg = ' Error allocating memory for the PLinVelEC array.' - RETURN - ENDIF - ALLOCATE ( RtHS%PLinVelED(p%NDOF,0:1,3) , STAT=ErrStat ) - IF ( ErrStat /= 0_IntKi ) THEN - ErrStat = ErrID_Fatal - ErrMsg = ' Error allocating memory for the PLinVelED array.' - RETURN - ENDIF - ALLOCATE ( RtHS%PLinVelEI(p%NDOF,0:1,3) , STAT=ErrStat ) - IF ( ErrStat /= 0_IntKi ) THEN - ErrStat = ErrID_Fatal - ErrMsg = ' Error allocating memory for the PLinVelEI array.' - RETURN - ENDIF - ALLOCATE ( RtHS%PLinVelEJ(p%NDOF,0:1,3) , STAT=ErrStat ) - IF ( ErrStat /= 0_IntKi ) THEN - ErrStat = ErrID_Fatal - ErrMsg = ' Error allocating memory for the PLinVelEJ array.' - RETURN - ENDIF - ALLOCATE ( RtHS%PLinVelEP(p%NDOF,0:1,3) , STAT=ErrStat ) - IF ( ErrStat /= 0_IntKi ) THEN - ErrStat = ErrID_Fatal - ErrMsg = ' Error allocating memory for the PLinVelEP array.' - RETURN - ENDIF - ALLOCATE ( RtHS%PLinVelEQ(p%NDOF,0:1,3) , STAT=ErrStat ) - IF ( ErrStat /= 0_IntKi ) THEN - ErrStat = ErrID_Fatal - ErrMsg = ' Error allocating memory for the PLinVelEQ array.' - RETURN - ENDIF - - ALLOCATE ( RtHS%PLinVelEU(p%NDOF,0:1,3) , & - RtHS%PLinVelEV(p%NDOF,0:1,3) , & - RtHS%PLinVelEW(p%NDOF,0:1,3) , & - RtHS%PLinVelEY(p%NDOF,0:1,3) , STAT=ErrStat ) - IF ( ErrStat /= 0_IntKi ) THEN - ErrStat = ErrID_Fatal - ErrMsg = ' Error allocating memory for the PLinVelEU, PLinVelEV, PLinVelEW and PLinVelEY arrays.' - RETURN - ENDIF - - - ALLOCATE( RtHS%LinAccESt( Dims, p%NumBl, 0:p%TipNode ), STAT=ErrStat ) - IF ( ErrStat /= 0_IntKi ) THEN - ErrStat = ErrID_Fatal - ErrMsg = ' Error allocating memory for LinAccESt.' - RETURN - ENDIF - ALLOCATE ( RtHS%AngAccEKt( Dims, 0:p%TipNode, p%NumBl ) , STAT=ErrStat ) - IF ( ErrStat /= 0_IntKi ) THEN - ErrStat = ErrID_Fatal - ErrMsg = ' Error allocating memory for AngAccEKt.' - RETURN - ENDIF +contains + logical function Failed() + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + Failed = ErrStat >= AbortErrLev + end function Failed + ! check for failed where /= 0 is fatal + logical function Failed0(txt) + character(*), intent(in) :: txt + if (errStat /= 0) then + ErrStat2 = ErrID_Fatal + ErrMsg2 = "Could not allocate "//trim(txt) + call SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg2, RoutineName) + endif + Failed0 = ErrStat >= AbortErrLev + end function Failed0 +END SUBROUTINE Alloc_RtHS - ALLOCATE(RtHS%AngPosHM(Dims, p%NumBl, 0:p%TipNode), STAT=ErrStat ) - IF ( ErrStat /= 0_IntKi ) THEN - ErrStat = ErrID_Fatal - ErrMsg = ' Error allocating memory for the AngPosHM arrays.' - RETURN - ENDIF - !CALL AllocAry( RtHS%LinAccESt, Dims, p%NumBl, p%TipNode,'LinAccESt', ErrStat, ErrMsg ); IF ( ErrStat /= ErrID_None ) RETURN - !CALL AllocAry( RtHS%LinAccETt, Dims, p%TwrNodes, 'LinAccETt', ErrStat, ErrMsg ); IF ( ErrStat /= ErrID_None ) RETURN - CALL AllocAry( RtHS%PFrcS0B, Dims, p%NumBl,p%NDOF, 'PFrcS0B', ErrStat, ErrMsg ); IF ( ErrStat /= ErrID_None ) RETURN - CALL AllocAry( RtHS%FrcS0Bt, Dims, p%NumBl, 'FrcS0Bt', ErrStat, ErrMsg ); IF ( ErrStat /= ErrID_None ) RETURN - CALL AllocAry( RtHS%PMomH0B, Dims, p%NumBl, p%NDOF, 'PMomH0B', ErrStat, ErrMsg ); IF ( ErrStat /= ErrID_None ) RETURN - CALL AllocAry( RtHS%MomH0Bt, Dims, p%NumBl, 'MomH0Bt', ErrStat, ErrMsg ); IF ( ErrStat /= ErrID_None ) RETURN - CALL AllocAry( RtHS%PFrcPRot, Dims, p%NDOF, 'PFrcPRot', ErrStat, ErrMsg ); IF ( ErrStat /= ErrID_None ) RETURN - CALL AllocAry( RtHS%PMomLPRot, Dims, p%NDOF, 'PMomLPRot', ErrStat, ErrMsg ); IF ( ErrStat /= ErrID_None ) RETURN - CALL AllocAry( RtHS%PMomNGnRt, Dims, p%NDOF, 'PMomNGnRt', ErrStat, ErrMsg ); IF ( ErrStat /= ErrID_None ) RETURN - CALL AllocAry( RtHS%PMomNTail, Dims, p%NDOF, 'PMomNTail', ErrStat, ErrMsg ); IF ( ErrStat /= ErrID_None ) RETURN - CALL AllocAry( RtHS%PFrcONcRt, Dims, p%NDOF, 'PFrcONcRt', ErrStat, ErrMsg ); IF ( ErrStat /= ErrID_None ) RETURN - CALL AllocAry( RtHS%PMomBNcRt, Dims, p%NDOF, 'PMomBNcRt', ErrStat, ErrMsg ); IF ( ErrStat /= ErrID_None ) RETURN - CALL AllocAry( RtHS%PFrcT0Trb, Dims, p%NDOF, 'PFrcT0Trb', ErrStat, ErrMsg ); IF ( ErrStat /= ErrID_None ) RETURN - CALL AllocAry( RtHS%PMomX0Trb, Dims, p%NDOF, 'PMomX0Trb', ErrStat, ErrMsg ); IF ( ErrStat /= ErrID_None ) RETURN - CALL AllocAry( RtHS%FSAero, Dims, p%NumBl,p%BldNodes,'FSAero', ErrStat, ErrMsg ); IF ( ErrStat /= ErrID_None ) RETURN - CALL AllocAry( RtHS%MMAero, Dims, p%NumBl,p%BldNodes,'MMAero', ErrStat, ErrMsg ); IF ( ErrStat /= ErrID_None ) RETURN - CALL AllocAry( RtHS%FSTipDrag, Dims, p%NumBl, 'FSTipDrag', ErrStat, ErrMsg ); IF ( ErrStat /= ErrID_None ) RETURN - CALL AllocAry( RtHS%PFTHydro, Dims, p%TwrNodes, p%NDOF,'PFTHydro', ErrStat, ErrMsg ); IF ( ErrStat /= ErrID_None ) RETURN - CALL AllocAry( RtHS%PMFHydro, Dims, p%TwrNodes, p%NDOF,'PMFHydro', ErrStat, ErrMsg ); IF ( ErrStat /= ErrID_None ) RETURN - CALL AllocAry( RtHS%FTHydrot, Dims, p%TwrNodes, 'FTHydrot', ErrStat, ErrMsg ); IF ( ErrStat /= ErrID_None ) RETURN - CALL AllocAry( RtHS%MFHydrot, Dims, p%TwrNodes, 'MFHydrot', ErrStat, ErrMsg ); IF ( ErrStat /= ErrID_None ) RETURN - - CALL AllocAry( RtHS%PFrcVGnRt, Dims, p%NDOF, 'PFrcVGnRt', ErrStat, ErrMsg ); IF ( ErrStat /= ErrID_None ) RETURN - CALL AllocAry( RtHS%PFrcWTail, Dims, p%NDOF, 'PFrcWTail', ErrStat, ErrMsg ); IF ( ErrStat /= ErrID_None ) RETURN - CALL AllocAry( RtHS%PFrcZAll, Dims, p%NDOF, 'PFrcZAll', ErrStat, ErrMsg ); IF ( ErrStat /= ErrID_None ) RETURN - CALL AllocAry( RtHS%PMomXAll, Dims, p%NDOF, 'PMomXAll', ErrStat, ErrMsg ); IF ( ErrStat /= ErrID_None ) RETURN -END SUBROUTINE Alloc_RtHS !---------------------------------------------------------------------------------------------------------------------------------- !> This takes the tower input file data and sets the corresponding tower parameters, performing linear interpolation of the !! input data to the specified tower mesh. !! It requires p\%TwrFlexL, and p\%TwrNodes to be set first. -SUBROUTINE SetTowerParameters( p, InputFileData, ErrStat, ErrMsg ) -!.................................................................................................................................. - - ! Passed variables - +SUBROUTINE SetTowerParameters( p, InputFileData, ErrStat, ErrMsg ) + ! Passed variables TYPE(ED_ParameterType), INTENT(INOUT) :: p !< Parameters of the structural dynamics module TYPE(ED_InputFile), INTENT(IN) :: InputFileData !< Data stored in the module's input file INTEGER(IntKi), INTENT(OUT) :: ErrStat !< Error status CHARACTER(*), INTENT(OUT) :: ErrMsg !< Error message - ! Local variables: - + ! Local variables: REAL(ReKi) :: x ! Fractional location between two points in linear interpolation INTEGER(IntKi ) :: J ! Index for the node arrays INTEGER(IntKi) :: InterpInd ! Index for the interpolation routine From 517640de531889e9d00865bd835663c90c8894ea Mon Sep 17 00:00:00 2001 From: andrew-platt Date: Fri, 12 Jul 2024 11:01:03 -0600 Subject: [PATCH 09/30] NWTC_IO: initialize all arrays created by AllocAry calls to zero Also moved the zeroing into the `else` part of the error checking instead of after -- we could potentially have triggered memory violations otherwise and not gotten our error back. --- modules/nwtc-library/src/NWTC_IO.f90 | 288 ++++++++------------------- 1 file changed, 81 insertions(+), 207 deletions(-) diff --git a/modules/nwtc-library/src/NWTC_IO.f90 b/modules/nwtc-library/src/NWTC_IO.f90 index 879591c1b9..931aaf76e7 100644 --- a/modules/nwtc-library/src/NWTC_IO.f90 +++ b/modules/nwtc-library/src/NWTC_IO.f90 @@ -287,21 +287,17 @@ END SUBROUTINE AdjRealStr !! If the array is already allocated on entry to this routine, an error will be generated. \n !! Use AllocAry (nwtc_io::allocary) instead of directly calling a specific routine in the generic interface. SUBROUTINE AllCAry1 ( Ary, AryDim1, Descr, ErrStat, ErrMsg ) + ! This routine allocates a 1-D CHARACTER array. - ! This routine allocates a 1-D CHARACTER array. - - ! Argument declarations. - + ! Argument declarations. CHARACTER(*), ALLOCATABLE :: Ary (:) !< Array to be allocated INTEGER, INTENT(IN) :: AryDim1 !< The size of the first dimension of the array. CHARACTER(*), INTENT(IN) :: Descr !< Brief array description (for error message). INTEGER, INTENT(OUT) :: ErrStat !< Error status CHARACTER(*), INTENT(OUT) :: ErrMsg !< Error message corresponding to ErrStat - ALLOCATE ( Ary(AryDim1) , STAT=ErrStat ) - IF ( ErrStat /= 0 ) THEN ErrStat = ErrID_Fatal IF ( ALLOCATED(Ary) ) THEN ! or Sttus=151 on IVF @@ -312,6 +308,7 @@ SUBROUTINE AllCAry1 ( Ary, AryDim1, Descr, ErrStat, ErrMsg ) ELSE ErrStat = ErrID_None ErrMsg = '' + Ary = '' END IF RETURN @@ -319,12 +316,9 @@ END SUBROUTINE AllCAry1 !======================================================================= !> \copydoc nwtc_io::allcary1 SUBROUTINE AllCAry2 ( Ary, AryDim1, AryDim2, Descr, ErrStat, ErrMsg ) + ! This routine allocates a 2-D CHARACTER array. - ! This routine allocates a 2-D CHARACTER array. - - - ! Argument declarations. - + ! Argument declarations. CHARACTER(*), ALLOCATABLE :: Ary (:,:) ! Array to be allocated INTEGER, INTENT(IN) :: AryDim1 ! The size of the first dimension of the array. INTEGER, INTENT(IN) :: AryDim2 !< The size of the second dimension of the array. @@ -332,8 +326,6 @@ SUBROUTINE AllCAry2 ( Ary, AryDim1, AryDim2, Descr, ErrStat, ErrMsg ) CHARACTER(*), INTENT(OUT) :: ErrMsg ! Error message corresponding to ErrStat CHARACTER(*), INTENT(IN) :: Descr ! Brief array description. - - ALLOCATE ( Ary(AryDim1,AryDim2) , STAT=ErrStat ) IF ( ErrStat /= 0 ) THEN @@ -346,21 +338,17 @@ SUBROUTINE AllCAry2 ( Ary, AryDim1, AryDim2, Descr, ErrStat, ErrMsg ) ELSE ErrStat = ErrID_None ErrMsg = '' + Ary = '' END IF - RETURN END SUBROUTINE AllCAry2 !======================================================================= !> \copydoc nwtc_io::allcary1 SUBROUTINE AllCAry3 ( Ary, AryDim1, AryDim2, AryDim3, Descr, ErrStat, ErrMsg ) + ! This routine allocates a 3-D CHARACTER array. - - ! This routine allocates a 3-D CHARACTER array. - - - ! Argument declarations. - + ! Argument declarations. CHARACTER(*), ALLOCATABLE :: Ary (:,:,:) ! Array to be allocated INTEGER, INTENT(IN) :: AryDim1 ! The size of the first dimension of the array. INTEGER, INTENT(IN) :: AryDim2 !< The size of the second dimension of the array. @@ -369,7 +357,6 @@ SUBROUTINE AllCAry3 ( Ary, AryDim1, AryDim2, AryDim3, Descr, ErrStat, ErrMsg ) INTEGER, INTENT(OUT) :: ErrStat ! Error status CHARACTER(*), INTENT(OUT) :: ErrMsg ! Error message corresponding to ErrStat - ALLOCATE ( Ary(AryDim1,AryDim2,AryDim3) , STAT=ErrStat ) IF ( ErrStat /= 0 ) THEN @@ -382,28 +369,23 @@ SUBROUTINE AllCAry3 ( Ary, AryDim1, AryDim2, AryDim3, Descr, ErrStat, ErrMsg ) ELSE ErrStat = ErrID_None ErrMsg = '' + Ary = '' END IF - - RETURN END SUBROUTINE AllCAry3 !======================================================================= !> \copydoc nwtc_io::allcary1 SUBROUTINE AllI1BAry1 ( Ary, AryDim1, Descr, ErrStat, ErrMsg ) + ! This routine allocates a 1-D INTEGER B1Ki array. - ! This routine allocates a 1-D INTEGER B1Ki array. - - - ! Argument declarations. - + ! Argument declarations. INTEGER(B1Ki), ALLOCATABLE :: Ary (:) ! Array to be allocated INTEGER(IntKi), INTENT(IN) :: AryDim1 ! The size of the array CHARACTER(*), INTENT(IN) :: Descr ! Brief array description INTEGER(IntKi), INTENT(OUT) :: ErrStat ! Error status CHARACTER(*), INTENT(OUT) :: ErrMsg ! Error message corresponding to ErrStat - ALLOCATE ( Ary(AryDim1) , STAT=ErrStat ) IF ( ErrStat /= 0 ) THEN @@ -416,6 +398,7 @@ SUBROUTINE AllI1BAry1 ( Ary, AryDim1, Descr, ErrStat, ErrMsg ) ELSE ErrStat = ErrID_None ErrMsg = ' ' + Ary = 0_B1Ki END IF RETURN @@ -423,20 +406,15 @@ END SUBROUTINE AllI1BAry1 !======================================================================= !> \copydoc nwtc_io::allcary1 SUBROUTINE AllI2BAry1 ( Ary, AryDim1, Descr, ErrStat, ErrMsg ) + ! This routine allocates a 1-D INTEGER B2Ki array. - - ! This routine allocates a 1-D INTEGER B2Ki array. - - - ! Argument declarations. - + ! Argument declarations. INTEGER(B2Ki), ALLOCATABLE :: Ary (:) ! Array to be allocated INTEGER(IntKi), INTENT(IN) :: AryDim1 ! The size of the array CHARACTER(*), INTENT(IN) :: Descr ! Brief array description INTEGER(IntKi), INTENT(OUT) :: ErrStat ! Error status CHARACTER(*), INTENT(OUT) :: ErrMsg ! Error message corresponding to ErrStat - ALLOCATE ( Ary(AryDim1) , STAT=ErrStat ) IF ( ErrStat /= 0 ) THEN @@ -449,6 +427,7 @@ SUBROUTINE AllI2BAry1 ( Ary, AryDim1, Descr, ErrStat, ErrMsg ) ELSE ErrStat = ErrID_None ErrMsg = ' ' + Ary = 0_B2Ki END IF RETURN @@ -456,20 +435,15 @@ END SUBROUTINE AllI2BAry1 !======================================================================= !> \copydoc nwtc_io::allcary1 SUBROUTINE AllI4BAry1 ( Ary, AryDim1, Descr, ErrStat, ErrMsg ) + ! This routine allocates a 1-D INTEGER B1Ki array. - - ! This routine allocates a 1-D INTEGER B1Ki array. - - - ! Argument declarations. - + ! Argument declarations. INTEGER(B4Ki), ALLOCATABLE :: Ary (:) ! Array to be allocated INTEGER(IntKi), INTENT(IN) :: AryDim1 ! The size of the array CHARACTER(*), INTENT(IN) :: Descr ! Brief array description INTEGER(IntKi), INTENT(OUT) :: ErrStat ! Error status CHARACTER(*), INTENT(OUT) :: ErrMsg ! Error message corresponding to ErrStat - ALLOCATE ( Ary(AryDim1) , STAT=ErrStat ) IF ( ErrStat /= 0 ) THEN @@ -482,6 +456,7 @@ SUBROUTINE AllI4BAry1 ( Ary, AryDim1, Descr, ErrStat, ErrMsg ) ELSE ErrStat = ErrID_None ErrMsg = ' ' + Ary = 0_B4Ki END IF RETURN @@ -489,13 +464,9 @@ END SUBROUTINE AllI4BAry1 !======================================================================= !> \copydoc nwtc_io::allcary1 SUBROUTINE AllIAry2 ( Ary, AryDim1, AryDim2, Descr, ErrStat, ErrMsg ) + ! This routine allocates a 2-D INTEGER array. - - ! This routine allocates a 2-D INTEGER array. - - - ! Argument declarations. - + ! Argument declarations. INTEGER(IntKi), ALLOCATABLE :: Ary (:,:) ! Array to be allocated INTEGER, INTENT(IN) :: AryDim1 ! The size of the first dimension of the array. INTEGER, INTENT(IN) :: AryDim2 !< The size of the second dimension of the array. @@ -503,7 +474,6 @@ SUBROUTINE AllIAry2 ( Ary, AryDim1, AryDim2, Descr, ErrStat, ErrMsg ) INTEGER, INTENT(OUT) :: ErrStat ! Error status CHARACTER(*), INTENT(OUT) :: ErrMsg ! Error message corresponding to ErrStat - ALLOCATE ( Ary(AryDim1,AryDim2) , STAT=ErrStat ) IF ( ErrStat /= 0 ) THEN @@ -516,6 +486,7 @@ SUBROUTINE AllIAry2 ( Ary, AryDim1, AryDim2, Descr, ErrStat, ErrMsg ) ELSE ErrStat = ErrID_None ErrMsg = '' + Ary = 0_IntKi END IF RETURN @@ -523,13 +494,9 @@ END SUBROUTINE AllIAry2 !======================================================================= !> \copydoc nwtc_io::allcary1 SUBROUTINE AllIAry3 ( Ary, AryDim1, AryDim2, AryDim3, Descr, ErrStat, ErrMsg ) + ! This routine allocates a 3-D INTEGER array. - - ! This routine allocates a 3-D INTEGER array. - - - ! Argument declarations. - + ! Argument declarations. INTEGER(IntKi), ALLOCATABLE :: Ary (:,:,:) ! Array to be allocated INTEGER, INTENT(IN) :: AryDim1 ! The size of the first dimension of the array. INTEGER, INTENT(IN) :: AryDim2 !< The size of the second dimension of the array. @@ -538,8 +505,6 @@ SUBROUTINE AllIAry3 ( Ary, AryDim1, AryDim2, AryDim3, Descr, ErrStat, ErrMsg ) INTEGER, INTENT(OUT) :: ErrStat ! Error status; if present, program does not abort on error CHARACTER(*), INTENT(OUT) :: ErrMsg ! Error message corresponding to ErrStat - - ALLOCATE ( Ary(AryDim1,AryDim2,AryDim3) , STAT=ErrStat ) IF ( ErrStat /= 0 ) THEN @@ -552,8 +517,8 @@ SUBROUTINE AllIAry3 ( Ary, AryDim1, AryDim2, AryDim3, Descr, ErrStat, ErrMsg ) ELSE ErrStat = ErrID_None ErrMsg = '' + Ary = 0_IntKi END IF - RETURN END SUBROUTINE AllIAry3 @@ -564,18 +529,15 @@ END SUBROUTINE AllIAry3 !! will be deallocated first. \n !! Use AllocPAry (nwtc_io::allocpary) instead of directly calling a specific routine in the generic interface. SUBROUTINE AllIPAry1 ( Ary, AryDim1, Descr, ErrStat, ErrMsg ) + ! This routine allocates a 1-D INTEGER array. - ! This routine allocates a 1-D INTEGER array. - - ! Argument declarations. - + ! Argument declarations. INTEGER, POINTER :: Ary (:) !< Array to be allocated INTEGER, INTENT(IN) :: AryDim1 !< The size of the first dimension of the array. INTEGER, INTENT(OUT) :: ErrStat !< Error status CHARACTER(*), INTENT(OUT) :: ErrMsg !< Error message corresponding to ErrStat CHARACTER(*), INTENT(IN) :: Descr !< Brief array description. - IF ( ASSOCIATED(Ary) ) THEN DEALLOCATE(Ary) !ErrStat = ErrID_Warn @@ -590,21 +552,17 @@ SUBROUTINE AllIPAry1 ( Ary, AryDim1, Descr, ErrStat, ErrMsg ) ELSE ErrStat = ErrID_None ErrMsg = '' + Ary = 0 END IF - - Ary = 0 RETURN END SUBROUTINE AllIPAry1 !======================================================================= !> \copydoc nwtc_io::allipary1 SUBROUTINE AllIPAry2 ( Ary, AryDim1, AryDim2, Descr, ErrStat, ErrMsg ) + ! This routine allocates a 2-D INTEGER array. - - ! This routine allocates a 2-D INTEGER array. - - ! Argument declarations. - + ! Argument declarations. INTEGER, POINTER :: Ary (:,:) ! Array to be allocated INTEGER, INTENT(IN) :: AryDim1 ! The size of the first dimension of the array. INTEGER, INTENT(IN) :: AryDim2 !< The size of the second dimension of the array. @@ -612,8 +570,6 @@ SUBROUTINE AllIPAry2 ( Ary, AryDim1, AryDim2, Descr, ErrStat, ErrMsg ) CHARACTER(*), INTENT(OUT) :: ErrMsg ! Error message corresponding to ErrStat CHARACTER(*), INTENT(IN) :: Descr ! Brief array description. - - IF ( ASSOCIATED(Ary) ) THEN DEALLOCATE(Ary) !ErrStat = ErrID_Warn @@ -627,25 +583,23 @@ SUBROUTINE AllIPAry2 ( Ary, AryDim1, AryDim2, Descr, ErrStat, ErrMsg ) ELSE ErrStat = ErrID_None ErrMsg = '' + Ary = 0 END IF - Ary = 0 RETURN END SUBROUTINE AllIPAry2 !======================================================================= !> \copydoc nwtc_io::allipary1 SUBROUTINE AllFPAry1 ( Ary, AryDim1, Descr, ErrStat, ErrMsg ) + ! This routine allocates a 1-D REAL array. - ! This routine allocates a 1-D REAL array. - ! Argument declarations. - + ! Argument declarations. REAL(C_FLOAT), POINTER :: Ary (:) ! Array to be allocated INTEGER, INTENT(IN) :: AryDim1 ! The size of the first dimension of the array. INTEGER, INTENT(OUT) :: ErrStat !< Error status CHARACTER(*), INTENT(OUT) :: ErrMsg ! Error message corresponding to ErrStat CHARACTER(*), INTENT(IN) :: Descr ! Brief array description. - IF ( ASSOCIATED(Ary) ) THEN DEALLOCATE(Ary) !ErrStat = ErrID_Warn @@ -660,18 +614,17 @@ SUBROUTINE AllFPAry1 ( Ary, AryDim1, Descr, ErrStat, ErrMsg ) ELSE ErrStat = ErrID_None ErrMsg = '' + Ary = 0 END IF - Ary = 0 RETURN END SUBROUTINE AllFPAry1 !======================================================================= !> \copydoc nwtc_io::allipary1 SUBROUTINE AllRPAry2 ( Ary, AryDim1, AryDim2, Descr, ErrStat, ErrMsg ) + ! This routine allocates a 2-D REAL array. - ! This routine allocates a 2-D REAL array. - ! Argument declarations. - + ! Argument declarations. REAL(ReKi), POINTER :: Ary (:,:) ! Array to be allocated INTEGER, INTENT(IN) :: AryDim1 ! The size of the first dimension of the array. INTEGER, INTENT(IN) :: AryDim2 !< The size of the second dimension of the array. @@ -679,7 +632,6 @@ SUBROUTINE AllRPAry2 ( Ary, AryDim1, AryDim2, Descr, ErrStat, ErrMsg ) CHARACTER(*), INTENT(OUT) :: ErrMsg ! Error message corresponding to ErrStat CHARACTER(*), INTENT(IN) :: Descr ! Brief array description. - IF ( ASSOCIATED(Ary) ) THEN DEALLOCATE(Ary) !ErrStat = ErrID_Warn @@ -694,20 +646,17 @@ SUBROUTINE AllRPAry2 ( Ary, AryDim1, AryDim2, Descr, ErrStat, ErrMsg ) ELSE ErrStat = ErrID_None ErrMsg = '' + Ary = 0 END IF - Ary = 0 RETURN END SUBROUTINE AllRPAry2 !======================================================================= !> \copydoc nwtc_io::allipary1 SUBROUTINE AllR4PAry3 ( Ary, AryDim1, AryDim2, AryDim3, Descr, ErrStat, ErrMsg ) + ! This routine allocates a 3-D REAL array. - - ! This routine allocates a 3-D REAL array. - - ! Argument declarations. - + ! Argument declarations. REAL(SiKi), POINTER :: Ary (:,:,:) ! Array to be allocated INTEGER, INTENT(IN) :: AryDim1 ! The size of the first dimension of the array. INTEGER, INTENT(IN) :: AryDim2 !< The size of the second dimension of the array. @@ -716,7 +665,6 @@ SUBROUTINE AllR4PAry3 ( Ary, AryDim1, AryDim2, AryDim3, Descr, ErrStat, ErrMsg CHARACTER(*), INTENT(OUT) :: ErrMsg ! Error message corresponding to ErrStat CHARACTER(*), INTENT(IN) :: Descr ! Brief array description. - IF ( ASSOCIATED(Ary) ) THEN DEALLOCATE(Ary) !ErrStat = ErrID_Warn @@ -731,20 +679,17 @@ SUBROUTINE AllR4PAry3 ( Ary, AryDim1, AryDim2, AryDim3, Descr, ErrStat, ErrMsg ELSE ErrStat = ErrID_None ErrMsg = '' + Ary = 0 END IF - Ary = 0 RETURN END SUBROUTINE AllR4PAry3 !======================================================================= !> \copydoc nwtc_io::allipary1 SUBROUTINE AllR8PAry3 ( Ary, AryDim1, AryDim2, AryDim3, Descr, ErrStat, ErrMsg ) + ! This routine allocates a 3-D REAL array. - - ! This routine allocates a 3-D REAL array. - - ! Argument declarations. - + ! Argument declarations. REAL(R8Ki), POINTER :: Ary (:,:,:) ! Array to be allocated INTEGER, INTENT(IN) :: AryDim1 ! The size of the first dimension of the array. INTEGER, INTENT(IN) :: AryDim2 !< The size of the second dimension of the array. @@ -753,7 +698,6 @@ SUBROUTINE AllR8PAry3 ( Ary, AryDim1, AryDim2, AryDim3, Descr, ErrStat, ErrMsg CHARACTER(*), INTENT(OUT) :: ErrMsg ! Error message corresponding to ErrStat CHARACTER(*), INTENT(IN) :: Descr ! Brief array description. - IF ( ASSOCIATED(Ary) ) THEN DEALLOCATE(Ary) !ErrStat = ErrID_Warn @@ -768,29 +712,23 @@ SUBROUTINE AllR8PAry3 ( Ary, AryDim1, AryDim2, AryDim3, Descr, ErrStat, ErrMsg ELSE ErrStat = ErrID_None ErrMsg = '' + Ary = 0 END IF - Ary = 0 RETURN END SUBROUTINE AllR8PAry3 !======================================================================= !> \copydoc nwtc_io::allcary1 SUBROUTINE AllLAry1 ( Ary, AryDim1, Descr, ErrStat, ErrMsg ) + ! This routine allocates a 1-D LOGICAL array. - - ! This routine allocates a 1-D LOGICAL array. - - - ! Argument declarations. - + ! Argument declarations. LOGICAL, ALLOCATABLE :: Ary (:) ! Array to be allocated INTEGER, INTENT(IN) :: AryDim1 ! The size of the array. CHARACTER(*), INTENT(IN) :: Descr ! Brief array description. INTEGER, INTENT(OUT) :: ErrStat ! Error status; if present, program does not abort on error CHARACTER(*), INTENT(OUT) :: ErrMsg ! Error message corresponding to ErrStat - - ALLOCATE ( Ary(AryDim1) , STAT=ErrStat ) IF ( ErrStat /= 0 ) THEN @@ -804,21 +742,17 @@ SUBROUTINE AllLAry1 ( Ary, AryDim1, Descr, ErrStat, ErrMsg ) ELSE ErrStat = ErrID_None ErrMsg = '' + Ary = .FALSE. END IF - RETURN END SUBROUTINE AllLAry1 !======================================================================= !> \copydoc nwtc_io::allcary1 SUBROUTINE AllLAry2 ( Ary, AryDim1, AryDim2, Descr, ErrStat, ErrMsg ) + ! This routine allocates a 2-D LOGICAL array. - - ! This routine allocates a 2-D LOGICAL array. - - - ! Argument declarations. - + ! Argument declarations. LOGICAL, ALLOCATABLE :: Ary (:,:) ! Array to be allocated INTEGER, INTENT(IN) :: AryDim1 ! The size of the first dimension of the array. INTEGER, INTENT(IN) :: AryDim2 !< The size of the second dimension of the array. @@ -826,8 +760,6 @@ SUBROUTINE AllLAry2 ( Ary, AryDim1, AryDim2, Descr, ErrStat, ErrMsg ) INTEGER, INTENT(OUT) :: ErrStat ! Error status; if present, program does not abort on error CHARACTER(*), INTENT(OUT) :: ErrMsg ! Error message corresponding to ErrStat - - ALLOCATE ( Ary(AryDim1,AryDim2) , STAT=ErrStat ) IF ( ErrStat /= 0 ) THEN @@ -841,27 +773,24 @@ SUBROUTINE AllLAry2 ( Ary, AryDim1, AryDim2, Descr, ErrStat, ErrMsg ) ELSE ErrStat = ErrID_None ErrMsg = '' + Ary = .FALSE. END IF - RETURN END SUBROUTINE AllLAry2 !======================================================================= !> \copydoc nwtc_io::allcary1 SUBROUTINE AllLAry3 ( Ary, AryDim1, AryDim2, AryDim3, Descr, ErrStat, ErrMsg ) - ! Argument declarations. + ! Argument declarations. LOGICAL, ALLOCATABLE :: Ary (:,:,:) ! Array to be allocated INTEGER, INTENT(IN) :: AryDim1 ! The size of the first dimension of the array. INTEGER, INTENT(IN) :: AryDim2 !< The size of the second dimension of the array. INTEGER, INTENT(IN) :: AryDim3 !< The size of the third dimension of the array. - CHARACTER(*), INTENT(IN) :: Descr ! Brief array description. INTEGER, INTENT(OUT) :: ErrStat ! Error status; if present, program does not abort on error CHARACTER(*), INTENT(OUT) :: ErrMsg ! Error message corresponding to ErrStat - - ALLOCATE ( Ary(AryDim1,AryDim2,AryDim3) , STAT=ErrStat ) IF ( ErrStat /= 0 ) THEN @@ -875,25 +804,22 @@ SUBROUTINE AllLAry3 ( Ary, AryDim1, AryDim2, AryDim3, Descr, ErrStat, ErrMsg ) ELSE ErrStat = ErrID_None ErrMsg = '' + Ary = .FALSE. END IF - RETURN END SUBROUTINE AllLAry3 !======================================================================= !> \copydoc nwtc_io::allcary1 SUBROUTINE AllR4Ary1 ( Ary, AryDim1, Descr, ErrStat, ErrMsg ) - ! Argument declarations. - + ! Argument declarations. REAL(SiKi), ALLOCATABLE :: Ary (:) ! Array to be allocated INTEGER, INTENT(IN) :: AryDim1 ! The size of the array. - CHARACTER(*), INTENT(IN) :: Descr ! Brief array description. INTEGER, INTENT(OUT) :: ErrStat ! Error status CHARACTER(*), INTENT(OUT) :: ErrMsg ! Error message corresponding to ErrStat - ALLOCATE ( Ary(AryDim1) , STAT=ErrStat ) IF ( ErrStat /= 0 ) THEN @@ -906,27 +832,22 @@ SUBROUTINE AllR4Ary1 ( Ary, AryDim1, Descr, ErrStat, ErrMsg ) ELSE ErrStat = ErrID_None ErrMsg = '' + Ary = 0.0_SiKi END IF - + RETURN END SUBROUTINE AllR4Ary1 !======================================================================= !> \copydoc nwtc_io::allcary1 SUBROUTINE AllR8Ary1 ( Ary, AryDim1, Descr, ErrStat, ErrMsg ) + ! This routine allocates a 1-D 8-byte REAL array. - - ! This routine allocates a 1-D 8-byte REAL array. - - - ! Argument declarations. - + ! Argument declarations. REAL(R8Ki), ALLOCATABLE :: Ary (:) ! Array to be allocated INTEGER, INTENT(IN) :: AryDim1 ! The size of the array. - CHARACTER(*), INTENT(IN) :: Descr ! Brief array description. INTEGER, INTENT(OUT) :: ErrStat ! Error status CHARACTER(*), INTENT(OUT) :: ErrMsg ! Error message corresponding to ErrStat - ALLOCATE ( Ary(AryDim1) , STAT=ErrStat ) @@ -940,31 +861,25 @@ SUBROUTINE AllR8Ary1 ( Ary, AryDim1, Descr, ErrStat, ErrMsg ) ELSE ErrStat = ErrID_None ErrMsg = '' + Ary = 0.0_R8Ki END IF - + RETURN END SUBROUTINE AllR8Ary1 !======================================================================= !> \copydoc nwtc_io::allcary1 SUBROUTINE AllR4Ary2 ( Ary, AryDim1, AryDim2, Descr, ErrStat, ErrMsg ) + ! This routine allocates a 2-D 4-Byte REAL array. - - ! This routine allocates a 2-D 4-Byte REAL array. - - - ! Argument declarations. - + ! Argument declarations. REAL(SiKi), ALLOCATABLE :: Ary (:,:) ! Array to be allocated - INTEGER, INTENT(IN) :: AryDim1 ! The size of the first dimension of the array. INTEGER, INTENT(IN) :: AryDim2 !< The size of the second dimension of the array. CHARACTER(*), INTENT(IN) :: Descr ! Brief array description. INTEGER, INTENT(OUT) :: ErrStat ! Error status CHARACTER(*), INTENT(OUT) :: ErrMsg ! Error message corresponding to ErrStat - ALLOCATE ( Ary(AryDim1,AryDim2) , STAT=ErrStat ) - IF ( ErrStat /= 0 ) THEN ErrStat = ErrID_Fatal @@ -977,31 +892,24 @@ SUBROUTINE AllR4Ary2 ( Ary, AryDim1, AryDim2, Descr, ErrStat, ErrMsg ) ELSE ErrStat = ErrID_None ErrMsg = '' + Ary = 0.0_SiKi END IF - RETURN END SUBROUTINE AllR4Ary2 !======================================================================= !> \copydoc nwtc_io::allcary1 SUBROUTINE AllR8Ary2 ( Ary, AryDim1, AryDim2, Descr, ErrStat, ErrMsg ) + ! This routine allocates a 2-D 8-Byte REAL array. - - ! This routine allocates a 2-D 8-Byte REAL array. - - - ! Argument declarations. - + ! Argument declarations. REAL(R8Ki), ALLOCATABLE :: Ary (:,:) ! Array to be allocated - INTEGER, INTENT(IN) :: AryDim1 ! The size of the first dimension of the array. INTEGER, INTENT(IN) :: AryDim2 !< The size of the second dimension of the array. CHARACTER(*), INTENT(IN) :: Descr ! Brief array description. INTEGER, INTENT(OUT) :: ErrStat ! Error status CHARACTER(*), INTENT(OUT) :: ErrMsg ! Error message corresponding to ErrStat - - ALLOCATE ( Ary(AryDim1,AryDim2) , STAT=ErrStat ) IF ( ErrStat /= 0 ) THEN @@ -1015,23 +923,18 @@ SUBROUTINE AllR8Ary2 ( Ary, AryDim1, AryDim2, Descr, ErrStat, ErrMsg ) ELSE ErrStat = ErrID_None ErrMsg = '' + Ary = 0.0_R8Ki END IF - RETURN END SUBROUTINE AllR8Ary2 !======================================================================= !> \copydoc nwtc_io::allcary1 SUBROUTINE AllR4Ary3 ( Ary, AryDim1, AryDim2, AryDim3, Descr, ErrStat, ErrMsg ) + ! This routine allocates a 3-D 4-byte REAL array. - - ! This routine allocates a 3-D 4-byte REAL array. - - - ! Argument declarations. - + ! Argument declarations. REAL(SiKi), ALLOCATABLE :: Ary (:,:,:) ! Array to be allocated - INTEGER, INTENT(IN) :: AryDim1 ! The size of the first dimension of the array. INTEGER, INTENT(IN) :: AryDim2 !< The size of the second dimension of the array. INTEGER, INTENT(IN) :: AryDim3 !< The size of the third dimension of the array. @@ -1039,7 +942,6 @@ SUBROUTINE AllR4Ary3 ( Ary, AryDim1, AryDim2, AryDim3, Descr, ErrStat, ErrMsg ) INTEGER, INTENT(OUT) :: ErrStat ! Error status; if present, program does not abort on error CHARACTER(*), INTENT(OUT) :: ErrMsg ! Error message corresponding to ErrStat - ALLOCATE ( Ary(AryDim1,AryDim2,AryDim3) , STAT=ErrStat ) IF ( ErrStat /= 0 ) THEN @@ -1053,6 +955,7 @@ SUBROUTINE AllR4Ary3 ( Ary, AryDim1, AryDim2, AryDim3, Descr, ErrStat, ErrMsg ) ELSE ErrStat = ErrID_None ErrMsg = '' + Ary = 0.0_SiKi END IF RETURN @@ -1060,15 +963,10 @@ END SUBROUTINE AllR4Ary3 !======================================================================= !> \copydoc nwtc_io::allcary1 SUBROUTINE AllR8Ary3 ( Ary, AryDim1, AryDim2, AryDim3, Descr, ErrStat, ErrMsg ) + ! This routine allocates a 3-D 8-byte REAL array. - - ! This routine allocates a 3-D 8-byte REAL array. - - - ! Argument declarations. - + ! Argument declarations. REAL(R8Ki), ALLOCATABLE :: Ary (:,:,:) ! Array to be allocated - INTEGER, INTENT(IN) :: AryDim1 ! The size of the first dimension of the array. INTEGER, INTENT(IN) :: AryDim2 !< The size of the second dimension of the array. INTEGER, INTENT(IN) :: AryDim3 !< The size of the third dimension of the array. @@ -1076,7 +974,6 @@ SUBROUTINE AllR8Ary3 ( Ary, AryDim1, AryDim2, AryDim3, Descr, ErrStat, ErrMsg ) INTEGER, INTENT(OUT) :: ErrStat ! Error status; if present, program does not abort on error CHARACTER(*), INTENT(OUT) :: ErrMsg ! Error message corresponding to ErrStat - ALLOCATE ( Ary(AryDim1,AryDim2,AryDim3) , STAT=ErrStat ) IF ( ErrStat /= 0 ) THEN @@ -1090,6 +987,7 @@ SUBROUTINE AllR8Ary3 ( Ary, AryDim1, AryDim2, AryDim3, Descr, ErrStat, ErrMsg ) ELSE ErrStat = ErrID_None ErrMsg = '' + Ary = 0.0_R8Ki END IF RETURN @@ -1097,15 +995,10 @@ END SUBROUTINE AllR8Ary3 !======================================================================= !> \copydoc nwtc_io::allcary1 SUBROUTINE AllR4Ary4 ( Ary, AryDim1, AryDim2, AryDim3, AryDim4, Descr, ErrStat, ErrMsg ) + ! This routine allocates a 4-D 4-byte REAL array. - - ! This routine allocates a 4-D 4-byte REAL array. - - - ! Argument declarations. - + ! Argument declarations. REAL(SiKi), ALLOCATABLE :: Ary (:,:,:,:) ! Array to be allocated - INTEGER, INTENT(IN) :: AryDim1 ! The size of the first dimension of the array. INTEGER, INTENT(IN) :: AryDim2 !< The size of the second dimension of the array. INTEGER, INTENT(IN) :: AryDim3 !< The size of the third dimension of the array. @@ -1114,7 +1007,6 @@ SUBROUTINE AllR4Ary4 ( Ary, AryDim1, AryDim2, AryDim3, AryDim4, Descr, ErrStat, INTEGER, INTENT(OUT) :: ErrStat ! Error status; if present, program does not abort on error CHARACTER(*), INTENT(OUT) :: ErrMsg ! Error message corresponding to ErrStat - ALLOCATE ( Ary(AryDim1,AryDim2,AryDim3,AryDim4) , STAT=ErrStat ) IF ( ErrStat /= 0 ) THEN @@ -1128,6 +1020,7 @@ SUBROUTINE AllR4Ary4 ( Ary, AryDim1, AryDim2, AryDim3, AryDim4, Descr, ErrStat, ELSE ErrStat = ErrID_None ErrMsg = '' + Ary = 0.0_SiKi END IF RETURN @@ -1135,15 +1028,10 @@ END SUBROUTINE AllR4Ary4 !======================================================================= !> \copydoc nwtc_io::allcary1 SUBROUTINE AllR8Ary4 ( Ary, AryDim1, AryDim2, AryDim3, AryDim4, Descr, ErrStat, ErrMsg ) + ! This routine allocates a 4-D 8-byte REAL array. - - ! This routine allocates a 4-D 8-byte REAL array. - - - ! Argument declarations. - + ! Argument declarations. REAL(R8Ki), ALLOCATABLE :: Ary (:,:,:,:) ! Array to be allocated - INTEGER, INTENT(IN) :: AryDim1 ! The size of the first dimension of the array. INTEGER, INTENT(IN) :: AryDim2 !< The size of the second dimension of the array. INTEGER, INTENT(IN) :: AryDim3 !< The size of the third dimension of the array. @@ -1152,7 +1040,6 @@ SUBROUTINE AllR8Ary4 ( Ary, AryDim1, AryDim2, AryDim3, AryDim4, Descr, ErrStat, INTEGER, INTENT(OUT) :: ErrStat ! Error status; if present, program does not abort on error CHARACTER(*), INTENT(OUT) :: ErrMsg ! Error message corresponding to ErrStat - ALLOCATE ( Ary(AryDim1,AryDim2,AryDim3,AryDim4) , STAT=ErrStat ) IF ( ErrStat /= 0 ) THEN @@ -1166,6 +1053,7 @@ SUBROUTINE AllR8Ary4 ( Ary, AryDim1, AryDim2, AryDim3, AryDim4, Descr, ErrStat, ELSE ErrStat = ErrID_None ErrMsg = '' + Ary = 0.0_R8Ki END IF RETURN @@ -1173,15 +1061,10 @@ END SUBROUTINE AllR8Ary4 !======================================================================= !> \copydoc nwtc_io::allcary1 SUBROUTINE AllR4Ary5 ( Ary, AryDim1, AryDim2, AryDim3, AryDim4, AryDim5, Descr, ErrStat, ErrMsg ) + ! This routine allocates a 5-D 4-byte REAL array. - - ! This routine allocates a 5-D 4-byte REAL array. - - - ! Argument declarations. - + ! Argument declarations. REAL(SiKi), ALLOCATABLE :: Ary (:,:,:,:,:) ! Array to be allocated - INTEGER, INTENT(IN) :: AryDim1 ! The size of the first dimension of the array. INTEGER, INTENT(IN) :: AryDim2 !< The size of the second dimension of the array. INTEGER, INTENT(IN) :: AryDim3 !< The size of the third dimension of the array. @@ -1191,7 +1074,6 @@ SUBROUTINE AllR4Ary5 ( Ary, AryDim1, AryDim2, AryDim3, AryDim4, AryDim5, Descr, INTEGER, INTENT(OUT) :: ErrStat ! Error status; if present, program does not abort on error CHARACTER(*), INTENT(OUT) :: ErrMsg ! Error message corresponding to ErrStat - ALLOCATE ( Ary(AryDim1,AryDim2,AryDim3,AryDim4,AryDim5) , STAT=ErrStat ) IF ( ErrStat /= 0 ) THEN @@ -1205,24 +1087,18 @@ SUBROUTINE AllR4Ary5 ( Ary, AryDim1, AryDim2, AryDim3, AryDim4, AryDim5, Descr, ELSE ErrStat = ErrID_None ErrMsg = '' + Ary = 0.0_SiKi END IF - - RETURN END SUBROUTINE AllR4Ary5 !======================================================================= !> \copydoc nwtc_io::allcary1 SUBROUTINE AllR8Ary5 ( Ary, AryDim1, AryDim2, AryDim3, AryDim4, AryDim5, Descr, ErrStat, ErrMsg ) + ! This routine allocates a 5-D 8-byte REAL array. - - ! This routine allocates a 5-D 8-byte REAL array. - - - ! Argument declarations. - + ! Argument declarations. REAL(R8Ki), ALLOCATABLE :: Ary (:,:,:,:,:) ! Array to be allocated - INTEGER, INTENT(IN) :: AryDim1 ! The size of the first dimension of the array. INTEGER, INTENT(IN) :: AryDim2 !< The size of the second dimension of the array. INTEGER, INTENT(IN) :: AryDim3 !< The size of the third dimension of the array. @@ -1232,7 +1108,6 @@ SUBROUTINE AllR8Ary5 ( Ary, AryDim1, AryDim2, AryDim3, AryDim4, AryDim5, Descr, INTEGER, INTENT(OUT) :: ErrStat ! Error status; if present, program does not abort on error CHARACTER(*), INTENT(OUT) :: ErrMsg ! Error message corresponding to ErrStat - ALLOCATE ( Ary(AryDim1,AryDim2,AryDim3,AryDim4,AryDim5) , STAT=ErrStat ) IF ( ErrStat /= 0 ) THEN @@ -1246,10 +1121,9 @@ SUBROUTINE AllR8Ary5 ( Ary, AryDim1, AryDim2, AryDim3, AryDim4, AryDim5, Descr, ELSE ErrStat = ErrID_None ErrMsg = '' + Ary = 0.0_R8Ki END IF - - RETURN END SUBROUTINE AllR8Ary5 !======================================================================= From 75f1e32918a156281f1ff7bcd933d443616e6d73 Mon Sep 17 00:00:00 2001 From: andrew-platt Date: Fri, 19 Jul 2024 10:58:09 -0600 Subject: [PATCH 10/30] Fix docs -- fails on rtd --- docs/source/install/index.rst | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/source/install/index.rst b/docs/source/install/index.rst index 9c4a4fa46f..ee7951a100 100644 --- a/docs/source/install/index.rst +++ b/docs/source/install/index.rst @@ -208,11 +208,11 @@ To pull a specific release, substitute the version number in place of `latest` i Build your own images --------------------- -You can also build your own custom images using our `Dockerfile` or base your images on ours. See -`here `_ for more information on this. +You can also build your own custom images using our `Dockerfile` or base your images on ours. See the +`Docker readme `_ for more information on this. -.. _python_wrapper +.. _python_wrapper: Install the ``openfast_io`` python wrapper ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -229,7 +229,7 @@ or poetry add openfast_io -For more information and installation options, see `here `_. +For more information and installation options, see the `OpenFAST Python readme `_. .. _compile_from_source: From 0e7774a668dd0dbf9e451402dcf1ad0e37279a33 Mon Sep 17 00:00:00 2001 From: andrew-platt Date: Fri, 19 Jul 2024 12:47:56 -0600 Subject: [PATCH 11/30] Add !$ OMP critical around file opening for VTK We were having problems with the `!OMP` directives around high resolution file reading in AWAE.f90. Since the file reading starts with a call to `GetNewUnit` before starting the opening, parallel calls to `GetNewUnit` could result in the same unit number handed out to two processes. The first process would open the file and start reading, but then the second process would open a different file with the same unit number causing read errors for both processes as they attempted to read the same file at the same time. Adding `$OMP critical` around the `GetNewUnit` and following `OpenFile...` calls so that in theory these cannot be done in parallel. Co-authored-by: Derek Slaughter --- modules/nwtc-library/src/VTK.f90 | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/modules/nwtc-library/src/VTK.f90 b/modules/nwtc-library/src/VTK.f90 index d70345dec7..fb57a5781b 100644 --- a/modules/nwtc-library/src/VTK.f90 +++ b/modules/nwtc-library/src/VTK.f90 @@ -158,8 +158,10 @@ SUBROUTINE ReadVTK_SP_info( FileName, descr, dims, origin, gridSpacing, vecLabel closeOnReturn = .FALSE. END IF + !$OMP critical CALL GetNewUnit( Un, ErrStat, ErrMsg ) CALL OpenFInpFile ( Un, TRIM(FileName), ErrStat, ErrMsg ) + !$OMP end critical if (ErrStat >= AbortErrLev) return CALL ReadCom( Un, FileName, 'File header: Module Version (line 1)', ErrStat2, ErrMsg2, 0 ) @@ -358,8 +360,10 @@ SUBROUTINE WrVTK_SP_header( FileName, descr, Un, ErrStat, ErrMsg ) INTEGER(IntKi) , INTENT( OUT) :: ErrStat !< error level/status of OpenFOutFile operation CHARACTER(*) , INTENT( OUT) :: ErrMsg !< message when error occurs + !$OMP critical CALL GetNewUnit( Un, ErrStat, ErrMsg ) CALL OpenFOutFile ( Un, TRIM(FileName), ErrStat, ErrMsg ) + !$OMP end critical if (ErrStat >= AbortErrLev) return WRITE(Un,'(A)') '# vtk DataFile Version 3.0' From ff67ad42966eb20ad95a753c6192c20950a2f27d Mon Sep 17 00:00:00 2001 From: andrew-platt Date: Fri, 23 Aug 2024 14:11:27 -0600 Subject: [PATCH 12/30] FileInfoType: increase line length allowed The old line length was 1024 characters. Increased this to 8192 -- May be need in HD if a large number of floating bodies are specified --- modules/nwtc-library/src/NWTC_Base.f90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/nwtc-library/src/NWTC_Base.f90 b/modules/nwtc-library/src/NWTC_Base.f90 index 2ccec45fb1..b27652c695 100644 --- a/modules/nwtc-library/src/NWTC_Base.f90 +++ b/modules/nwtc-library/src/NWTC_Base.f90 @@ -40,7 +40,7 @@ MODULE NWTC_Base INTEGER(IntKi), PARAMETER :: MinChanLen = 10 !< The min allowable length of channel names (i.e., width of output columns), used because some modules (like Bladed DLL outputs) have excessively long names INTEGER(IntKi), PARAMETER :: LinChanLen = 200 !< The allowable length of row/column names in linearization files - INTEGER(IntKi), PARAMETER :: MaxFileInfoLineLen = 1024 !< The allowable length of an input line stored in FileInfoType%Lines + INTEGER(IntKi), PARAMETER :: MaxFileInfoLineLen = 8192 !< The allowable length of an input line stored in FileInfoType%Lines INTEGER(IntKi), PARAMETER :: NWTC_Verbose = 10 !< The maximum level of verbosity INTEGER(IntKi), PARAMETER :: NWTC_VerboseLevel = 5 !< a number in [0, NWTC_Verbose]: 0 = no output; NWTC_Verbose=verbose; From d97ee668c5ca3f83827485ab50f9370ad3e590fd Mon Sep 17 00:00:00 2001 From: Lu Wang Date: Wed, 28 Aug 2024 12:57:16 -0600 Subject: [PATCH 13/30] HD bug fix: prevent array index out-of-bound error in HDOut_MapOutputs when more than 9 potential-flow bodies are present --- modules/hydrodyn/src/HydroDyn_Output.f90 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/hydrodyn/src/HydroDyn_Output.f90 b/modules/hydrodyn/src/HydroDyn_Output.f90 index 44668a17c7..a48f6429ef 100644 --- a/modules/hydrodyn/src/HydroDyn_Output.f90 +++ b/modules/hydrodyn/src/HydroDyn_Output.f90 @@ -1161,7 +1161,7 @@ SUBROUTINE HDOut_MapOutputs( CurrentTime, p, y, m_WAMIT, m_WAMIT2, NWaveElev, Wa ! Need to use individual components of force for output reporting, the y%mesh data has total forces from all contributions if ( p%potMod == 1 ) then if ( p%NBodyMod == 1 .or. p%NBody == 1 ) then - do iBody = 1,p%NBody + do iBody = 1,min(p%NBody,9) ! Can only output the first 9 bodies for now startIndx = 6*(iBody-1) + 1 endIndx = startIndx + 5 AllOuts(FWaves1 (:,iBody)) = m_WAMIT(1)%F_Waves1(startIndx:endIndx) @@ -1179,7 +1179,7 @@ SUBROUTINE HDOut_MapOutputs( CurrentTime, p, y, m_WAMIT, m_WAMIT2, NWaveElev, Wa ! This happens when NBodyMod > 1, in which case, each WAMIT object is for a single body, but there may be multiple bodies in the HydroDyn model, ! so we need to use BodyID to determine the index into the complete HydroDyn list of WAMIT bodies - do iBody = 1,p%NBody + do iBody = 1,min(p%NBody,9) ! Can only output the first 9 bodies for now startIndx = 6*(iBody-1) + 1 endIndx = startIndx + 5 AllOuts(FWaves1 (:,iBody)) = m_WAMIT(iBody)%F_Waves1 From 6253e3e99ec91a179de20e344117dee789bb901f Mon Sep 17 00:00:00 2001 From: Derek Slaughter Date: Fri, 16 Aug 2024 14:36:32 +0000 Subject: [PATCH 14/30] BeamDyn, ModMesh, NWTC_Num performance improvements --- modules/beamdyn/src/BeamDyn.f90 | 718 ++++++++++--------- modules/beamdyn/src/BeamDyn_Subs.f90 | 55 +- modules/nwtc-library/src/ModMesh.f90 | 114 +-- modules/nwtc-library/src/ModMesh_Mapping.f90 | 40 +- modules/nwtc-library/src/NWTC_Num.f90 | 8 +- 5 files changed, 499 insertions(+), 436 deletions(-) diff --git a/modules/beamdyn/src/BeamDyn.f90 b/modules/beamdyn/src/BeamDyn.f90 index 2f8dbfd1e5..ad69f87474 100644 --- a/modules/beamdyn/src/BeamDyn.f90 +++ b/modules/beamdyn/src/BeamDyn.f90 @@ -1648,7 +1648,7 @@ subroutine Init_MiscVars( p, u, y, m, ErrStat, ErrMsg ) ! Array for storing the position information for the quadrature points. CALL AllocAry(m%qp%uuu, p%dof_node ,p%nqp,p%elem_total, 'm%qp%uuu displacement at quadrature point',ErrStat2,ErrMsg2); CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) - CALL AllocAry(m%qp%uup, p%dof_node/2,p%nqp,p%elem_total, 'm%qp%uup displacement prime at quadrature point',ErrStat2,ErrMsg2); CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + CALL AllocAry(m%qp%uup, p%dof_node ,p%nqp,p%elem_total, 'm%qp%uup displacement prime at quadrature point',ErrStat2,ErrMsg2); CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) CALL AllocAry(m%qp%vvv, p%dof_node ,p%nqp,p%elem_total, 'm%qp%vvv velocity at quadrature point',ErrStat2,ErrMsg2); CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) CALL AllocAry(m%qp%vvp, p%dof_node ,p%nqp,p%elem_total, 'm%qp%vvp velocity prime at quadrature point',ErrStat2,ErrMsg2); CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) CALL AllocAry(m%qp%aaa, p%dof_node ,p%nqp,p%elem_total, 'm%qp%aaa acceleration at quadrature point',ErrStat2,ErrMsg2); CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) @@ -1677,7 +1677,7 @@ subroutine Init_MiscVars( p, u, y, m, ErrStat, ErrMsg ) ! Inertial force terms CALL AllocAry(m%qp%Gi, 6,6, p%nqp,p%elem_total, 'm%qp%Gi gyroscopic at quadrature point',ErrStat2,ErrMsg2); CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) CALL AllocAry(m%qp%Ki, 6,6, p%nqp,p%elem_total, 'm%qp%Ki stiffness at quadrature point',ErrStat2,ErrMsg2); CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) - CALL AllocAry(m%qp%Mi, 6,6, p%nqp,p%elem_total, 'm%qp%Mi mass at quadrature point',ErrStat2,ErrMsg2); CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + CALL AllocAry(m%qp%Mi, p%nqp, 6,6, p%elem_total, 'm%qp%Mi mass at quadrature point',ErrStat2,ErrMsg2); CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) ! Elastic force terms: \f$ \underline{\underline{\mathcal{O}}} \f$, etc. from equation (19-21) of NREL CP-2C00-60759. CALL AllocAry(m%qp%Oe, 6,6, p%nqp,p%elem_total, 'm%qp%Oe term at quadrature point',ErrStat2,ErrMsg2); CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) @@ -2360,48 +2360,44 @@ SUBROUTINE BD_DisplacementQP( nelem, p, x, m ) TYPE(BD_ContinuousStateType), INTENT(IN ) :: x !< Continuous states at t TYPE(BD_MiscVarType), INTENT(INOUT) :: m !< misc/optimization variables + INTEGER(IntKi) :: ErrStat !< index to current element + CHARACTER(ErrMsgLen) :: ErrMsg !< index to current element INTEGER(IntKi) :: idx_qp !< index to the current quadrature point INTEGER(IntKi) :: elem_start !< Node point of first node in current element - INTEGER(IntKi) :: idx_node - CHARACTER(*), PARAMETER :: RoutineName = 'BD_DisplacementQP' - - - DO idx_qp=1,p%nqp - ! Node point before start of this element - elem_start = p%node_elem_idx( nelem,1 ) - - !> ### Calculate the the displacement fields in an element - !! Using equations (27) and (28) \n - !! \f$ \underline{u}\left( \xi \right) = - !! \sum_{i=1}^{p+1} h^i\left( \xi \right) \underline{\hat{u}}^i - !! \f$ \n - !! and \n - !! \f$ \underline{u}^\prime \left( \xi \right) = - !! \sum_{k=1}^{p+1} h^{k\prime} \left( \xi \right) \underline{\hat{u}}^i - !! \f$ - !! - !! | Variable | Value | - !! | :---------: | :------------------------------------------------------------------------- | - !! | \f$ \xi \f$ | Element natural coordinate \f$ \in [-1,1] \f$ | - !! | \f$ k \f$ | Node number of a \f$ p^\text{th} \f$ order Langrangian-interpolant | - !! | \f$ h^i \left( \xi \right ) \f$ | Component of the shape function matrix, \f$ \underline{\underline{N}} \f$ | - !! | \f$ h^{k\prime} \left( \xi \right ) \f$ | \f$ \frac{\mathrm{d}}{\mathrm{d}x_1} h^i \left( \xi \right) \f$ | - !! | \f$ \underline{\hat{u}}^i \f$ | \f$ k^\text{th} \f$ nodal value | + !> ### Calculate the the displacement fields in an element + !! Using equations (27) and (28) \n + !! \f$ \underline{u}\left( \xi \right) = + !! \sum_{i=1}^{p+1} h^i\left( \xi \right) \underline{\hat{u}}^i + !! \f$ \n + !! and \n + !! \f$ \underline{u}^\prime \left( \xi \right) = + !! \sum_{k=1}^{p+1} h^{k\prime} \left( \xi \right) \underline{\hat{u}}^i + !! \f$ + !! + !! | Variable | Value | + !! | :---------: | :------------------------------------------------------------------------- | + !! | \f$ \xi \f$ | Element natural coordinate \f$ \in [-1,1] \f$ | + !! | \f$ k \f$ | Node number of a \f$ p^\text{th} \f$ order Langrangian-interpolant | + !! | \f$ h^i \left( \xi \right ) \f$ | Component of the shape function matrix, \f$ \underline{\underline{N}} \f$ | + !! | \f$ h^{k\prime} \left( \xi \right ) \f$ | \f$ \frac{\mathrm{d}}{\mathrm{d}x_1} h^i \left( \xi \right) \f$ | + !! | \f$ \underline{\hat{u}}^i \f$ | \f$ k^\text{th} \f$ nodal value | + + ! Node point before start of this element + elem_start = p%node_elem_idx(nelem,1) - ! Initialize values for summation - m%qp%uuu(:,idx_qp,nelem) = 0.0_BDKi ! displacement field \f$ \underline{u} \left( \xi \right) \f$ - m%qp%uup(:,idx_qp,nelem) = 0.0_BDKi ! displacement field \f$ \underline{u}^\prime \left( \xi \right) \f$ + ! Use matrix multiplication to interpolate position and position derivative to quadrature points + call LAPACK_DGEMM('N','N', 1.0_BDKi, x%q(1:3,elem_start:elem_start+p%nodes_per_elem-1), p%Shp, 0.0_BDKi, m%qp%uuu(1:3,:,nelem), ErrStat, ErrMsg) + call LAPACK_DGEMM('N','N', 1.0_BDKi, x%q(1:3,elem_start:elem_start+p%nodes_per_elem-1), p%ShpDer, 0.0_BDKi, m%qp%uup(1:3,:,nelem), ErrStat, ErrMsg) - DO idx_node=1,p%nodes_per_elem - m%qp%uuu(1:3,idx_qp,nelem) = m%qp%uuu(1:3,idx_qp,nelem) + p%Shp(idx_node,idx_qp) *x%q(1:3,elem_start - 1 + idx_node) - m%qp%uup(1:3,idx_qp,nelem) = m%qp%uup(1:3,idx_qp,nelem) + p%ShpDer(idx_node,idx_qp)/p%Jacobian(idx_qp,nelem)*x%q(1:3,elem_start - 1 + idx_node) - ENDDO + ! Apply Jacobian to get position derivative with respect to X-axis + do idx_qp = 1, p%nqp + m%qp%uup(1:3,idx_qp,nelem) = m%qp%uup(1:3,idx_qp,nelem) / p%Jacobian(idx_qp,nelem) + end do - !> Calculate \f$ \underline{E}_1 = x_0^\prime + u^\prime \f$ (equation 23). Note E_1 is along the z direction. - m%qp%E1(1:3,idx_qp,nelem) = p%E10(1:3,idx_qp,nelem) + m%qp%uup(1:3,idx_qp,nelem) + !> Calculate \f$ \underline{E}_1 = x_0^\prime + u^\prime \f$ (equation 23). Note E_1 is along the z direction. + m%qp%E1(1:3,:,nelem) = p%E10(1:3,:,nelem) + m%qp%uup(1:3,:,nelem) - ENDDO END SUBROUTINE BD_DisplacementQP @@ -2418,6 +2414,8 @@ SUBROUTINE BD_RotationalInterpQP( nelem, p, x, m ) TYPE(BD_ContinuousStateType), INTENT(IN ) :: x !< Continuous states at t TYPE(BD_MiscVarType), INTENT(INOUT) :: m !< misc/optimization variables + INTEGER(IntKi) :: ErrStat !< index to current element + CHARACTER(ErrMsgLen) :: ErrMsg !< index to current element INTEGER(IntKi) :: idx_qp !< index to the current quadrature point INTEGER(IntKi) :: elem_start !< Node point of first node in current element INTEGER(IntKi) :: idx_node !< index to current GLL point in element @@ -2426,8 +2424,6 @@ SUBROUTINE BD_RotationalInterpQP( nelem, p, x, m ) REAL(BDKi) :: cc(3) REAL(BDKi) :: temp33(3,3) REAL(BDKi) :: DCM_root(3,3) !< DCM for first node - CHARACTER(*), PARAMETER :: RoutineName = 'BD_RotationalInterpQP' - !> ## Calculate the interpolated rotational displacements !! To calculate this, the algorithm given in http://www.nrel.gov/docs/fy14osti/60759.pdf @@ -2482,6 +2478,15 @@ SUBROUTINE BD_RotationalInterpQP( nelem, p, x, m ) ENDDO + ! Use matrix multiplication to interpolate rotation and rotation derivative to quadrature points + ! These rotations do not include the root node rotation at this point (added later in function) + call LAPACK_DGEMM('N','N', 1.0_BDKi, m%Nrrr(:,:,nelem), p%Shp, 0.0_BDKi, m%qp%uuu(4:6,:,nelem), ErrStat, ErrMsg) + call LAPACK_DGEMM('N','N', 1.0_BDKi, m%Nrrr(:,:,nelem), p%ShpDer, 0.0_BDKi, m%qp%uup(4:6,:,nelem), ErrStat, ErrMsg) + + ! Apply Jacobian to get rotation derivative with respect to X-axis + do idx_qp = 1, p%nqp + m%qp%uup(4:6,idx_qp,nelem) = m%qp%uup(4:6,idx_qp,nelem) / p%Jacobian(idx_qp,nelem) + end do ! QP rotational interpolation DO idx_qp=1,p%nqp @@ -2507,16 +2512,9 @@ SUBROUTINE BD_RotationalInterpQP( nelem, p, x, m ) !! | \f$ h^{k\prime} \left( \xi \right ) \f$ | \f$ \frac{\mathrm{d}}{\mathrm{d}x_1} h^i \left( \xi \right) \f$ | !! | \f$ \underline{\hat{r}}^i \f$ | \f$ k^\text{th} \f$ nodal value | - - ! Initialize values for summations - rrr = 0.0_BDKi ! intermediate rotation field for calculation - rrp = 0.0_BDKi - - ! Note: `m%Nrrr` is \f$ \underline{\hat{r}}^i \f$ - DO idx_node=1,p%nodes_per_elem - rrr(1:3) = rrr(1:3) + p%Shp(idx_node,idx_qp) *m%Nrrr(1:3,idx_node,nelem) - rrp(1:3) = rrp(1:3) + p%ShpDer(idx_node,idx_qp)/p%Jacobian(idx_qp,nelem)*m%Nrrr(1:3,idx_node,nelem) - ENDDO + ! Get rotation and rotation derivative at quadrature point (root rotation is not included) + rrr = m%qp%uuu(4:6,idx_qp,nelem) + rrp = m%qp%uup(4:6,idx_qp,nelem) !> **Step 3:** Restore the rigid body rotation at node \f$ \xi \f$ with \n !! \f$ \underline{c}(\xi) = \underline{\hat{c}}^1 \oplus \underline{r}(\xi) \f$ \n @@ -2564,55 +2562,77 @@ SUBROUTINE BD_StifAtDeformedQP( nelem, p, m ) TYPE(BD_MiscVarType), INTENT(INOUT) :: m !< misc/optimization variables INTEGER(IntKi) :: idx_qp !< index counter for quadrature point - INTEGER(IntKi) :: temp_id2 !< Index to last node of previous element - INTEGER(IntKi) :: i,j !< generic counters - REAL(BDKi) :: tempR6(6,6) - REAL(BDKi) :: tempBeta6(6,6) + INTEGER(IntKi) :: idx_Stif0 !< Index to last node of previous element + + ! Initial stiffness matrix index + idx_Stif0 = (nelem-1)*p%nqp + ! Loop through quadrature points + do idx_qp = 1, p%nqp - ! see Bauchau 2011 Flexible Multibody Dynamics p 692-693, section 17.7.2 + ! Initial stiffness matrix index + idx_Stif0 = idx_Stif0 + 1 - ! extract the mass and stiffness matrices for the current element - temp_id2 = (nelem-1)*p%nqp + ! Calculate stiffness and damping matrices for this quadrature point + call Calc_Stif_betaC(m%qp%RR0(:,:,idx_qp,nelem), & + p%Stif0_QP(:,:,idx_Stif0), & + m%qp%Stif(:,:,idx_qp,nelem), & + m%qp%betaC(:,:,idx_qp,nelem)) + end do - DO idx_qp=1,p%nqp +contains + subroutine Calc_Stif_betaC(RR0, Stif0, Stif, betaC) + REAL(BDKi), intent(in) :: RR0(:,:), Stif0(:,:) + REAL(BDKi), intent(inout) :: Stif(:,:), betaC(:,:) + REAL(BDKi) :: tempR6(6,6) + REAL(BDKi) :: tempR6_T(6,6) + REAL(BDKi) :: tempBeta6(6,6) + REAL(BDKi) :: tempBeta_diag(6) + INTEGER(IntKi) :: i, j + + ! see Bauchau 2011 Flexible Multibody Dynamics p 692-693, section 17.7.2 !> RR0 is the rotation tensor at quadrature point \f$ \left(\underline{\underline{R}}\underline{\underline{R}}_0\right) \f$ (3x3) - - ! Setup the temporary matrix for modifying the stiffness matrix. RR0 is changing with time. + + ! Setup the temporary matrix for modifying the stiffness matrix. RR0 is changing with time. tempR6 = 0.0_BDKi - tempBeta6 = 0.0_BDKi - tempR6(1:3,1:3) = m%qp%RR0(:,:,idx_qp,nelem) ! upper left -- translation - tempR6(4:6,4:6) = m%qp%RR0(:,:,idx_qp,nelem) ! lower right -- rotation - !NOTE: Bauchau has the lower right corner multiplied by H - - ! Move damping ratio from material frame to the calculation reference frame - ! This is the following: - ! tempBEta6=matmul(tempR6,matmul(diag(p%beta),transpose(tempR6))) - do j=1,6 - do i=1,6 - ! diagonal of p%beta * TRANSPOSE(tempR6) - tempBeta6(i,j) = p%beta(i)*tempR6(j,i) - enddo - enddo - tempBeta6 = matmul(tempR6,tempBeta6) - - - !> Modify the Mass matrix so it is in the calculation reference frame - !! \f$ \begin{bmatrix} - !! \left(\underline{\underline{R}} \underline{\underline{R}}_0\right) & 0 \\ - !! 0 & \left(\underline{\underline{R}} \underline{\underline{R}}_0\right) - !! \end{bmatrix} - !! \underline{\underline{C}} - !! \begin{bmatrix} - !! \left(\underline{\underline{R}} \underline{\underline{R}}_0\right)^T & 0 \\ - !! 0 & \left(\underline{\underline{R}} \underline{\underline{R}}_0\right)^T - !! \end{bmatrix} \f$ - m%qp%Stif(:,:,idx_qp,nelem) = MATMUL(tempR6,MATMUL(p%Stif0_QP(1:6,1:6,temp_id2+idx_qp),TRANSPOSE(tempR6))) - - ! Now apply the damping - m%qp%betaC(:,:,idx_qp,nelem) = matmul(tempBeta6,m%qp%Stif(:,:,idx_qp,nelem)) - ENDDO + tempR6(1:3,1:3) = RR0 ! upper left -- translation + tempR6(4:6,4:6) = RR0 ! lower right -- rotation + !NOTE: Bauchau has the lower right corner multiplied by H + ! Compute the transpose of tempR6 + tempR6_T = TRANSPOSE(tempR6) + + ! Move damping ratio from material frame to the calculation reference frame + ! This is the following: + ! tempBeta6 = matmul(tempR6, matmul(diag(p%beta), transpose(tempR6))) + + ! Compute tempBeta_diag = beta * tempR6_T (for diagonal elements only) + do j = 1, 6 + tempBeta_diag(j) = p%beta(j) * tempR6_T(j, j) + end do + + ! Compute tempBeta6 using tempBeta_diag + do j = 1, 6 + do i = 1, 6 + tempBeta6(i, j) = tempR6(i, j) * tempBeta_diag(j) + end do + end do + + !> Modify the Mass matrix so it is in the calculation reference frame + !! \f$ \begin{bmatrix} + !! \left(\underline{\underline{R}} \underline{\underline{R}}_0\right) & 0 \\ + !! 0 & \left(\underline{\underline{R}} \underline{\underline{R}}_0\right) + !! \end{bmatrix} + !! \underline{\underline{C}} + !! \begin{bmatrix} + !! \left(\underline{\underline{R}} \underline{\underline{R}}_0\right)^T & 0 \\ + !! 0 & \left(\underline{\underline{R}} \underline{\underline{R}}_0\right)^T + !! \end{bmatrix} \f$ + Stif = matmul(tempR6, matmul(Stif0, tempR6_T)) + + ! Now apply the damping + betaC = matmul(tempBeta6, Stif) + end subroutine END SUBROUTINE BD_StifAtDeformedQP @@ -2630,23 +2650,35 @@ SUBROUTINE BD_QPData_mEta_rho( p, m ) TYPE(BD_MiscVarType), INTENT(INOUT) :: m !< misc/optimization variables INTEGER(IntKi) :: nelem !< index to current element number + INTEGER(IntKi) :: qp_start !< index to start qp indexing for element INTEGER(IntKi) :: idx_qp !< index to the current quadrature point - DO nelem=1,p%elem_total - DO idx_qp=1,p%nqp + do nelem = 1, p%elem_total + qp_start = (nelem-1)*p%nqp + do idx_qp = 1, p%nqp + call Calc_RR0mEta_rho(m%qp%RR0(:,:,idx_qp,nelem), & + p%Mass0_QP(:,:,qp_start+idx_qp), & + m%qp%RR0mEta(:,idx_qp,nelem), & + m%qp%rho(:,:,idx_qp,nelem)) + end do + end do + +contains + subroutine Calc_RR0mEta_rho(RR0, Mass0, RR0mEta, rho) + real(BDKi), intent(in) :: RR0(:,:), Mass0(:,:) + real(BDKi), intent(out) :: RR0mEta(:), rho(:,:) + !> Calculate the new center of mass times mass at the deflected location !! as \f$ \left(\underline{\underline{R}}\underline{\underline{R}}_0\right) m \underline{\eta} \f$ - m%qp%RR0mEta(:,idx_qp,nelem) = MATMUL(m%qp%RR0(:,:,idx_qp,nelem),p%qp%mEta(:,idx_qp,nelem)) + m%qp%RR0mEta(:,idx_qp,nelem) = MATMUL(RR0, p%qp%mEta(:,idx_qp,nelem)) !> Calculate \f$ \rho = \left(\underline{\underline{R}}\underline{\underline{R}}_0\right) !! \underline{\underline{M}}_{2,2} !! \left(\underline{\underline{R}}\underline{\underline{R}}_0\right)^T \f$ where !! \f$ \underline{\underline{M}}_{2,2} \f$ is the inertial terms of the undeflected mass matrix at this quadrature point - m%qp%rho(:,:,idx_qp,nelem) = p%Mass0_QP(4:6,4:6,(nelem-1)*p%nqp+idx_qp) - m%qp%rho(:,:,idx_qp,nelem) = MATMUL(m%qp%RR0(:,:,idx_qp,nelem),MATMUL(m%qp%rho(:,:,idx_qp,nelem),TRANSPOSE(m%qp%RR0(:,:,idx_qp,nelem)))) - ENDDO - ENDDO + rho = MATMUL(RR0, MATMUL(Mass0(4:6,4:6), TRANSPOSE(RR0))) + end subroutine END SUBROUTINE BD_QPData_mEta_rho @@ -2663,99 +2695,117 @@ SUBROUTINE BD_ElasticForce(nelem,p,m,fact) TYPE(BD_MiscVarType), INTENT(INOUT) :: m !< Misc/optimization variables. LOGICAL, INTENT(IN ) :: fact !< Boolean to calculate the Jacobian - REAL(BDKi) :: cet !< for storing the \f$ I_{yy} + I_{zz} \f$ inertia term - REAL(BDKi) :: k1s - REAL(BDKi) :: Wrk33(3,3) - REAL(BDKi) :: tildeE(3,3) - REAL(BDKi) :: C21(3,3) - REAL(BDKi) :: epsi(3,3) - REAL(BDKi) :: mu(3,3) + INTEGER(IntKi) :: idx_qp !< Index to quadrature point currently being calculated if (.not. fact) then - do idx_qp=1,p%nqp - call Calc_Fc_Fd() + call Calc_Fc_Fd(m%qp%RR0(:,:,idx_qp,nelem), & + m%qp%uuu(:,idx_qp,nelem), & + m%qp%E1(:,idx_qp,nelem), & + m%qp%Fc(:,idx_qp,nelem), & + m%qp%Fd(:,idx_qp,nelem)) end do - else - do idx_qp=1,p%nqp - - call Calc_Fc_Fd() - - - !> ###Calculate the \f$ \underline{\underline{\mathcal{O}}} \f$ from equation (19) - !! - !! \f$ \underline{\underline{\mathcal{O}}} = - !! \begin{bmatrix} - !! \underline{\underline{0}} & \underline{\underline{C}}_{11} \tilde{E}_1 - \tilde{F} \\ - !! \underline{\underline{0}} & \underline{\underline{C}}_{21} \tilde{E}_1 - \tilde{M} - !! \end{bmatrix} - !! = \begin{bmatrix} - !! \underline{\underline{0}} & \psi_E - \tilde{F} \\ - !! \underline{\underline{0}} & \mu - \tilde{M} - !! \end{bmatrix} - !! \f$ - Wrk33(:,:) = OuterProduct(m%qp%RR0(1:3,3,idx_qp,nelem), m%qp%RR0(1:3,3,idx_qp,nelem)) ! z-direction in IEC coords - C21(:,:) = m%qp%Stif(4:6,1:3,idx_qp,nelem) + cet*k1s*Wrk33(:,:) - - tildeE = SkewSymMat(m%qp%E1(:,idx_qp,nelem)) - epsi(:,:) = MATMUL(m%qp%Stif(1:3,1:3,idx_qp,nelem),tildeE) ! Stif is RR0 * p%Stif0_QP * RR0^T - mu(:,:) = MATMUL(C21,tildeE) - - m%qp%Oe(:,:,idx_qp,nelem) = 0.0_BDKi - m%qp%Oe(1:3,4:6,idx_qp,nelem) = epsi(1:3,1:3) - SkewSymMat(m%qp%Fc(1:3,idx_qp,nelem)) - m%qp%Oe(4:6,4:6,idx_qp,nelem) = mu(1:3,1:3) - SkewSymMat(m%qp%Fc(4:6,idx_qp,nelem)) - - - !> ###Calculated \f$ \underline{\underline{\mathcal{P}}} \f$ from equation (20) - !! - !! \f$ \underline{\underline{\mathcal{P}}} = - !! \begin{bmatrix} - !! \underline{\underline{0}} & \underline{\underline{0}} \\ - !! \left(\underline{\underline{\bar{C}}}_{11} \tilde{E}_1 \right)^T + \tilde{F} - !! \left(\underline{\underline{\bar{C}}}_{11} \tilde{E}_1 \right)^T - !! \end{bmatrix} - !! = \begin{bmatrix} - !! \underline{\underline{0}} & \underline{\underline{0}} \\ - !! \psi_E^T + \tilde{F} & \mu^T - !! \end{bmatrix} \f$ - m%qp%Pe(:,:,idx_qp,nelem) = 0.0_BDKi - m%qp%Pe(4:6,1:3,idx_qp,nelem) = TRANSPOSE(epsi) + SkewSymMat(m%qp%Fc(1:3,idx_qp,nelem)) - m%qp%Pe(4:6,4:6,idx_qp,nelem) = TRANSPOSE(mu) - - !> ###Calculated \f$ \underline{\underline{\mathcal{Q}}} \f$ from equation (21) - !! - !! \f{eqnarray*}{ - !! \underline{\underline{\mathcal{Q}}} - !! & =& \underline{\underline{\Upsilon}} \underline{\underline{\mathcal{O}}} - !! = \begin{bmatrix} 0 & 0 \\ - !! \tilde{E}_1^T & 0 \end{bmatrix} - !! \underline{\underline{\mathcal{O}}} \\ - !! \begin{bmatrix} 0 & 0 \\ - !! 0 & \underline{\underline{\mathcal{Q}}}_{22} \end{bmatrix} - !! & =& \tilde{E}_1^T \underline{\underline{\mathcal{O}}}_{12} - !! = - \tilde{E}_1 \underline{\underline{\mathcal{O}}}_{12} - !! \f}\n - !! Note: \f$ \tilde{E}_1^T = - \tilde{E}_1 \f$ - m%qp%Qe(:,:,idx_qp,nelem) = 0.0_BDKi - m%qp%Qe(4:6,4:6,idx_qp,nelem) = -MATMUL(tildeE,m%qp%Oe(1:3,4:6,idx_qp,nelem)) + call Calc_Fc_Fd(m%qp%RR0(:,:,idx_qp,nelem), & + m%qp%uuu(:,idx_qp,nelem), & + m%qp%E1(:,idx_qp,nelem), & + m%qp%Fc(:,idx_qp,nelem), & + m%qp%Fd(:,idx_qp,nelem)) + + call Calc_Oe_Pe_Qe(m%qp%RR0(:,:,idx_qp,nelem), & + m%qp%Stif(:,:,idx_qp,nelem), & + m%qp%Fc(:,idx_qp,nelem), & + m%qp%Oe(:,:,idx_qp,nelem), & + m%qp%Pe(:,:,idx_qp,nelem), & + m%qp%Qe(:,:,idx_qp,nelem)) end do - - ENDIF + end if contains - subroutine Calc_Fc_Fd() - REAL(BDKi) :: e1s - REAL(BDKi) :: eee(6) !< intermediate array for calculation Strain and curvature terms of Fc - REAL(BDKi) :: fff(6) !< intermediate array for calculation of the elastic force, Fc - REAL(BDKi) :: R(3,3) !< rotation matrix at quatrature point - REAL(BDKi) :: Rx0p(3) !< \f$ \underline{R} \underline{x}^\prime_0 \f$ - !REAL(BDKi) :: Wrk(3) - + subroutine Calc_Oe_Pe_Qe(RR0, Stif, Fc, Oe, Pe, Qe) + REAL(BDKi), intent(in) :: RR0(:,:), Stif(:,:), Fc(:) + REAL(BDKi), intent(inout) :: Oe(:,:), Pe(:,:), Qe(:,:) + REAL(BDKi) :: Wrk33(3,3) + REAL(BDKi) :: tildeE(3,3) + REAL(BDKi) :: C21(3,3) + REAL(BDKi) :: epsi(3,3) + REAL(BDKi) :: mu(3,3) + REAL(BDKi) :: cet !< for storing the \f$ I_{yy} + I_{zz} \f$ inertia term + REAL(BDKi) :: k1s + + !> ###Calculate the \f$ \underline{\underline{\mathcal{O}}} \f$ from equation (19) + !! + !! \f$ \underline{\underline{\mathcal{O}}} = + !! \begin{bmatrix} + !! \underline{\underline{0}} & \underline{\underline{C}}_{11} \tilde{E}_1 - \tilde{F} \\ + !! \underline{\underline{0}} & \underline{\underline{C}}_{21} \tilde{E}_1 - \tilde{M} + !! \end{bmatrix} + !! = \begin{bmatrix} + !! \underline{\underline{0}} & \psi_E - \tilde{F} \\ + !! \underline{\underline{0}} & \mu - \tilde{M} + !! \end{bmatrix} + !! \f$ + Wrk33 = OuterProduct(RR0(1:3,3), RR0(1:3,3)) ! z-direction in IEC coords + C21 = Stif(4:6,1:3) + cet*k1s*Wrk33(:,:) + + tildeE = SkewSymMat(m%qp%E1(:,idx_qp,nelem)) + epsi = MATMUL(Stif(1:3,1:3),tildeE) ! Stif is RR0 * p%Stif0_QP * RR0^T + mu = MATMUL(C21,tildeE) + + Oe = 0.0_BDKi + Oe(1:3,4:6) = epsi(1:3,1:3) - SkewSymMat(Fc(1:3)) + Oe(4:6,4:6) = mu(1:3,1:3) - SkewSymMat(Fc(4:6)) + + + !> ###Calculated \f$ \underline{\underline{\mathcal{P}}} \f$ from equation (20) + !! + !! \f$ \underline{\underline{\mathcal{P}}} = + !! \begin{bmatrix} + !! \underline{\underline{0}} & \underline{\underline{0}} \\ + !! \left(\underline{\underline{\bar{C}}}_{11} \tilde{E}_1 \right)^T + \tilde{F} + !! \left(\underline{\underline{\bar{C}}}_{11} \tilde{E}_1 \right)^T + !! \end{bmatrix} + !! = \begin{bmatrix} + !! \underline{\underline{0}} & \underline{\underline{0}} \\ + !! \psi_E^T + \tilde{F} & \mu^T + !! \end{bmatrix} \f$ + Pe = 0.0_BDKi + Pe(4:6,1:3) = TRANSPOSE(epsi) + SkewSymMat(Fc(1:3)) + Pe(4:6,4:6) = TRANSPOSE(mu) + + !> ###Calculated \f$ \underline{\underline{\mathcal{Q}}} \f$ from equation (21) + !! + !! \f{eqnarray*}{ + !! \underline{\underline{\mathcal{Q}}} + !! & =& \underline{\underline{\Upsilon}} \underline{\underline{\mathcal{O}}} + !! = \begin{bmatrix} 0 & 0 \\ + !! \tilde{E}_1^T & 0 \end{bmatrix} + !! \underline{\underline{\mathcal{O}}} \\ + !! \begin{bmatrix} 0 & 0 \\ + !! 0 & \underline{\underline{\mathcal{Q}}}_{22} \end{bmatrix} + !! & =& \tilde{E}_1^T \underline{\underline{\mathcal{O}}}_{12} + !! = - \tilde{E}_1 \underline{\underline{\mathcal{O}}}_{12} + !! \f}\n + !! Note: \f$ \tilde{E}_1^T = - \tilde{E}_1 \f$ + Qe(:,:) = 0.0_BDKi + Qe(4:6,4:6) = -MATMUL(tildeE,Oe(1:3,4:6)) + end subroutine + + subroutine Calc_Fc_Fd(RR0, uuu, E1, Fc, Fd) + REAL(BDKi), intent(in) :: RR0(:,:), uuu(:), E1(:) + REAL(BDKi), intent(inout) :: Fc(:), Fd(:) + REAL(BDKi) :: e1s + REAL(BDKi) :: eee(6) !< intermediate array for calculation Strain and curvature terms of Fc + REAL(BDKi) :: fff(6) !< intermediate array for calculation of the elastic force, Fc + REAL(BDKi) :: R(3,3) !< rotation matrix at quatrature point + REAL(BDKi) :: Rx0p(3) !< \f$ \underline{R} \underline{x}^\prime_0 \f$ + REAL(BDKi) :: Wrk(3) + REAL(BDKi) :: cet !< for storing the \f$ I_{yy} + I_{zz} \f$ inertia term + REAL(BDKi) :: k1s !> ### Calculate the 1D strain, \f$ \underline{\epsilon} \f$, equation (5) !! \f$ \underline{\epsilon} = \underline{x}^\prime_0 + \underline{u}^\prime - @@ -2768,9 +2818,9 @@ subroutine Calc_Fc_Fd() !! Note: \f$ \underline{\underline{R}}\underline{\underline{R}}_0 \f$ is used to go from the material basis into the inertial basis !! and the transpose for the other direction. ! eee(1:3) = m%qp%E1(1:3,idx_qp,nelem) - m%qp%RR0(1:3,3,idx_qp,nelem) ! Using RR0 z direction in IEC coords - call BD_CrvMatrixR(m%qp%uuu(4:6,idx_qp,nelem), R) ! Get rotation at QP as a matrix + call BD_CrvMatrixR(uuu(4:6), R) ! Get rotation at QP as a matrix Rx0p = matmul(R,p%E10(:,idx_qp,nelem)) ! Calculate rotated initial tangent - eee(1:3) = m%qp%E1(1:3,idx_qp,nelem) - Rx0p ! Use rotated initial tangent in place of RR0*i1 to eliminate likely mismatch between R0*i1 and x0' + eee(1:3) = E1(1:3) - Rx0p ! Use rotated initial tangent in place of RR0*i1 to eliminate likely mismatch between R0*i1 and x0' !> ### Set the 1D sectional curvature, \f$ \underline{\kappa} \f$, equation (5) !! \f$ \underline{\kappa} = \underline{k} + \underline{\underline{R}}\underline{k}_i \f$ @@ -2835,11 +2885,11 @@ subroutine Calc_Fc_Fd() ! Strain into the material basis (eq (39) of Dymore manual) !Wrk(:) = MATMUL(TRANSPOSE(m%qp%RR0(:,:,idx_qp,nelem)),eee(1:3)) !e1s = Wrk(3) !epsilon_{1} in material basis (for major axis of blade, which is z in the IEC formulation) - e1s = dot_product( m%qp%RR0(:,3,idx_qp,nelem), eee(1:3) ) + e1s = dot_product( RR0(:,3), eee(1:3) ) !Wrk(:) = MATMUL(TRANSPOSE(m%qp%RR0(:,:,idx_qp,nelem)),eee(4:6)) !k1s = Wrk(3) !kappa_{1} in material basis (for major axis of blade, which is z in the IEC formulation) - k1s = dot_product( m%qp%RR0(:,3,idx_qp,nelem), eee(4:6) ) + k1s = dot_product( RR0(:,3), eee(4:6) ) !> Add extension twist coupling terms to the \f$ \underline{F}^c_{a} \f$\n @@ -2858,8 +2908,8 @@ subroutine Calc_Fc_Fd() !! \f$ C_{et} = C_{4,4} + C_{5,5} \f$ ! Refer Section 1.4 in "Dymore User's Manual - Formulation and finite element implementation of beam elements". cet= p%Stif0_QP(4,4,(nelem-1)*p%nqp+idx_qp) + p%Stif0_QP(5,5,(nelem-1)*p%nqp+idx_qp) ! Dymore theory (22) - m%qp%Fc(1:3,idx_qp,nelem) = fff(1:3) + 0.5_BDKi*cet*k1s*k1s*m%qp%RR0(1:3,3,idx_qp,nelem) ! Dymore theory (25a). Note z-axis is the length of blade. - m%qp%Fc(4:6,idx_qp,nelem) = fff(4:6) + cet*e1s*k1s*m%qp%RR0(1:3,3,idx_qp,nelem) ! Dymore theory (25b). Note z-axis is the length of blade. + Fc(1:3) = fff(1:3) + 0.5_BDKi*cet*k1s*k1s*RR0(1:3,3) ! Dymore theory (25a). Note z-axis is the length of blade. + Fc(4:6) = fff(4:6) + cet*e1s*k1s*RR0(1:3,3) ! Dymore theory (25b). Note z-axis is the length of blade. !> ###Calculate \f$ \underline{\mathcal{F}}^d \f$, equation (16) !! \f$ \underline{F}^d = @@ -2870,9 +2920,9 @@ subroutine Calc_Fc_Fd() !! = \begin{bmatrix} \underline{0} \\ !! \left(\underline{\mathcal{F}}^c \times \underline{E}_1 \right)^T !! \end{bmatrix} \f$ - m%qp%Fd(1:3,idx_qp,nelem) = 0.0_BDKi + Fd(1:3) = 0.0_BDKi ! ADP uu0 ref: If E1 is referenced against a different curve than Stif0_QP, there will be strange coupling terms here. - m%qp%Fd(4:6,idx_qp,nelem) = cross_product(m%qp%Fc(1:3,idx_qp,nelem), m%qp%E1(:,idx_qp,nelem)) + Fd(4:6) = cross_product(Fc(1:3), E1(:)) end subroutine Calc_Fc_Fd END SUBROUTINE BD_ElasticForce @@ -2893,32 +2943,29 @@ SUBROUTINE BD_QPDataVelocity( p, x, m ) TYPE(BD_ContinuousStateType), INTENT(IN ) :: x !< Continuous states at t TYPE(BD_MiscVarType), INTENT(INOUT) :: m !< Misc/optimization variables + INTEGER(IntKi) :: ErrStat !< index to current element + CHARACTER(ErrMsgLen) :: ErrMsg !< index to current element INTEGER(IntKi) :: nelem !< index to current element INTEGER(IntKi) :: idx_qp !< index to quadrature point - INTEGER(IntKi) :: idx_node !< index to the GLL node INTEGER(IntKi) :: elem_start !< Starting quadrature point of current element - DO nelem=1,p%elem_total - - elem_start = p%node_elem_idx(nelem,1) - - DO idx_qp=1,p%nqp - - !> Calculate the values for the + ! Calculate the velocity term, velocity prime (derivative of velocity with respect to X-axis), and acceleration terms - ! Initialize to zero for summation - m%qp%vvv(:,idx_qp,nelem) = 0.0_BDKi - m%qp%vvp(:,idx_qp,nelem) = 0.0_BDKi + ! Loop through elements + do nelem = 1, p%elem_total - ! Calculate the velocity term, velocity prime (derivative of velocity with respect to X-axis), and acceleration terms - DO idx_node=1,p%nodes_per_elem - m%qp%vvv(:,idx_qp,nelem) = m%qp%vvv(:,idx_qp,nelem) + p%Shp(idx_node,idx_qp) * x%dqdt(:,elem_start-1+idx_node) - m%qp%vvp(:,idx_qp,nelem) = m%qp%vvp(:,idx_qp,nelem) + p%ShpDer(idx_node,idx_qp)/p%Jacobian(idx_qp,nelem) * x%dqdt(:,elem_start-1+idx_node) - ENDDO + ! Get start index of quadrature points for given element + elem_start = p%node_elem_idx(nelem,1) - ENDDO + ! Use matrix multiplication to interpolate velocity and velocity derivative to quadrature points + call LAPACK_DGEMM('N','N', 1.0_BDKi, x%dqdt(:,elem_start:elem_start+p%nodes_per_elem-1), p%Shp, 0.0_BDKi, m%qp%vvv(:,:,nelem), ErrStat, ErrMsg) + call LAPACK_DGEMM('N','N', 1.0_BDKi, x%dqdt(:,elem_start:elem_start+p%nodes_per_elem-1), p%ShpDer, 0.0_BDKi, m%qp%vvp(:,:,nelem), ErrStat, ErrMsg) - ENDDO + ! Apply Jacobian to get velocity derivative with respect to X-axis + do idx_qp = 1, p%nqp + m%qp%vvp(:,idx_qp,nelem) = m%qp%vvp(:,idx_qp,nelem) / p%Jacobian(idx_qp,nelem) + end do + end do END SUBROUTINE BD_QPDataVelocity @@ -2938,30 +2985,22 @@ SUBROUTINE BD_QPDataAcceleration( p, OtherState, m ) TYPE(BD_OtherStateType), INTENT(IN ) :: OtherState !< Other states at t on input; at t+dt on outputs TYPE(BD_MiscVarType), INTENT(INOUT) :: m !< Misc/optimization variables + INTEGER(IntKi) :: ErrStat !< index to current element + CHARACTER(ErrMsgLen) :: ErrMsg !< index to current element INTEGER(IntKi) :: nelem !< index of current element INTEGER(IntKi) :: idx_qp !< index of current quadrature point INTEGER(IntKi) :: idx_node INTEGER(IntKi) :: elem_start - - - ! Initialize to zero for summation - m%qp%aaa = 0.0_BDKi - - ! Calculate the acceleration term at t+dt (OtherState%acc is at t+dt) - - DO nelem=1,p%elem_total + ! Loop through elements + do nelem = 1, p%elem_total elem_start = p%node_elem_idx(nelem,1) - DO idx_qp=1,p%nqp - DO idx_node=1,p%nodes_per_elem - m%qp%aaa(:,idx_qp,nelem) = m%qp%aaa(:,idx_qp,nelem) + p%Shp(idx_node,idx_qp) * OtherState%acc(:,elem_start-1+idx_node) - END DO - END DO + ! Interpolate the acceleration term at t+dt (OtherState%acc is at t+dt) to quadrature points + call LAPACK_DGEMM('N','N', 1.0_BDKi, OtherState%acc(:,elem_start:elem_start+p%nodes_per_elem-1), p%Shp, 0.0_BDKi, m%qp%aaa(:,:,nelem), ErrStat, ErrMsg) - END DO - + end do END SUBROUTINE BD_QPDataAcceleration @@ -3049,23 +3088,18 @@ SUBROUTINE BD_DissipativeForce( nelem, p, m,fact ) TYPE(BD_MiscVarType), INTENT(INOUT) :: m !< Misc/optimization variables LOGICAL, INTENT(IN ) :: fact - REAL(BDKi) :: SS_ome(3,3) - REAL(BDKi) :: ffd(6) - REAL(BDKi) :: D11(3,3) - REAL(BDKi) :: D12(3,3) - REAL(BDKi) :: D21(3,3) - REAL(BDKi) :: D22(3,3) - REAL(BDKi) :: b11(3,3) - REAL(BDKi) :: b12(3,3) - REAL(BDKi) :: alpha(3,3) - INTEGER(IntKi) :: idx_qp !< index of current quadrature point - - + IF (.NOT. fact) then ! skip all but Fc and Fd terms - DO idx_qp=1,p%nqp - call Calc_FC_FD_ffd() ! this modifies m%qp%Fc and m%qp%Fd + DO idx_qp=1,p%nqp + ! this modifies m%qp%Fc and m%qp%Fd + CALL Calc_FC_FD_ffd(m%qp%E1(:,idx_qp,nelem), & + m%qp%vvv(:,idx_qp,nelem), & + m%qp%vvp(:,idx_qp,nelem), & + m%qp%betaC(:,:,idx_qp,nelem), & + m%qp%Fc(:,idx_qp,nelem), & + m%qp%Fd(:,idx_qp,nelem)) END DO ! bjj: we don't use these values when fact is FALSE, so let's save time and ignore them here, too. @@ -3078,72 +3112,100 @@ SUBROUTINE BD_DissipativeForce( nelem, p, m,fact ) ! m%qp%Yd(:,:,:,nelem) = 0.0_BDKi ELSE -!FIXME: sometime we can condense this with vector arithmetic and removing some variables that aren't needed. DO idx_qp=1,p%nqp - CALL Calc_FC_FD_ffd() ! this sets local variable ffd and modifies m%qp%Fc and m%qp%Fd - - D11 = m%qp%betaC(1:3,1:3,idx_qp,nelem) - D12 = m%qp%betaC(1:3,4:6,idx_qp,nelem) - D21 = m%qp%betaC(4:6,1:3,idx_qp,nelem) - D22 = m%qp%betaC(4:6,4:6,idx_qp,nelem) - - b11(1:3,1:3) = -MATMUL(SkewSymMat(m%qp%E1(:,idx_qp,nelem)),D11) - b12(1:3,1:3) = -MATMUL(SkewSymMat(m%qp%E1(:,idx_qp,nelem)),D12) - - SS_ome = SkewSymMat( m%qp%vvv(4:6,idx_qp,nelem) ) - - ! Compute stiffness matrix Sd - m%qp%Sd(1:3,1:3,idx_qp,nelem) = -MATMUL(D11,SS_ome) - m%qp%Sd(1:3,4:6,idx_qp,nelem) = -MATMUL(D12,SS_ome) - m%qp%Sd(4:6,1:3,idx_qp,nelem) = -MATMUL(D21,SS_ome) - m%qp%Sd(4:6,4:6,idx_qp,nelem) = -MATMUL(D22,SS_ome) - - ! Compute stiffness matrix Pd - m%qp%Pd(:,:,idx_qp,nelem) = 0.0_BDKi - m%qp%Pd(4:6,1:3,idx_qp,nelem) = SkewSymMat(ffd(1:3)) - MATMUL(b11,SS_ome) - m%qp%Pd(4:6,4:6,idx_qp,nelem) = -MATMUL(b12,SS_ome) - - ! Compute stiffness matrix Od - m%qp%Od(:,1:3,idx_qp,nelem) = 0.0_BDKi - alpha = SkewSymMat(m%qp%vvp(1:3,idx_qp,nelem)) - MATMUL(SS_ome,SkewSymMat(m%qp%E1(:,idx_qp,nelem))) - m%qp%Od(1:3,4:6,idx_qp,nelem) = MATMUL(D11,alpha) - SkewSymMat(ffd(1:3)) - m%qp%Od(4:6,4:6,idx_qp,nelem) = MATMUL(D21,alpha) - SkewSymMat(ffd(4:6)) - - ! Compute stiffness matrix Qd - m%qp%Qd(:,:,idx_qp,nelem) = 0.0_BDKi - m%qp%Qd(4:6,4:6,idx_qp,nelem) = -MATMUL(SkewSymMat(m%qp%E1(:,idx_qp,nelem)),m%qp%Od(1:3,4:6,idx_qp,nelem)) - ! Compute gyroscopic matrix Gd - m%qp%Gd(:,1:3,idx_qp,nelem) = 0.0_BDKi - m%qp%Gd(1:3,4:6,idx_qp,nelem) = TRANSPOSE(b11) - m%qp%Gd(4:6,4:6,idx_qp,nelem) = TRANSPOSE(b12) - - ! Compute gyroscopic matrix Xd - m%qp%Xd(:,:,idx_qp,nelem) = 0.0_BDKi - m%qp%Xd(4:6,4:6,idx_qp,nelem) = -MATMUL(SkewSymMat(m%qp%E1(:,idx_qp,nelem)),m%qp%Gd(1:3,4:6,idx_qp,nelem)) - - ! Compute gyroscopic matrix Yd - m%qp%Yd(1:3,:,idx_qp,nelem) = 0.0_BDKi - m%qp%Yd(4:6,1:3,idx_qp,nelem) = b11 - m%qp%Yd(4:6,4:6,idx_qp,nelem) = b12 + ! this sets local variable ffd and modifies m%qp%Fc and m%qp%Fd + CALL Calc_FC_FD_ffd(m%qp%E1(:,idx_qp,nelem), & + m%qp%vvv(:,idx_qp,nelem), & + m%qp%vvp(:,idx_qp,nelem), & + m%qp%betaC(:,:,idx_qp,nelem), & + m%qp%Fc(:,idx_qp,nelem), & + m%qp%Fd(:,idx_qp,nelem)) + + call Calc_Sd_Pd_Od_Qd_Gd_Xd_Yd(m%qp%E1(:,idx_qp,nelem), & + m%qp%vvp(:,idx_qp,nelem), & + m%qp%betaC(:,:,idx_qp,nelem), & + m%qp%Sd(:,:,idx_qp,nelem), & + m%qp%Od(:,:,idx_qp,nelem), & + m%qp%Qd(:,:,idx_qp,nelem), & + m%qp%Gd(:,:,idx_qp,nelem), & + m%qp%Xd(:,:,idx_qp,nelem), & + m%qp%Yd(:,:,idx_qp,nelem), & + m%qp%Pd(:,:,idx_qp,nelem)) END DO ENDIF CONTAINS - SUBROUTINE Calc_FC_FD_ffd() - REAL(BDKi) :: eed(6) - + subroutine Calc_Sd_Pd_Od_Qd_Gd_Xd_Yd(E1, vvp, betaC, Sd, Od, Qd, Gd, Xd, Yd, Pd) + REAL(BDKi), intent(in) :: E1(:), vvp(:), betaC(:,:) + REAL(BDKi), intent(inout) :: Sd(:,:), Od(:,:), Qd(:,:), Gd(:,:), Xd(:,:), Yd(:,:), Pd(:,:) + REAL(BDKi) :: D11(3,3), D12(3,3), D21(3,3), D22(3,3) + REAL(BDKi) :: b11(3,3), b12(3,3) + REAL(BDKi) :: alpha(3,3) + REAL(BDKi) :: SS_ome(3,3) + REAL(BDKi) :: ffd(6) + + D11 = betaC(1:3,1:3) + D12 = betaC(1:3,4:6) + D21 = betaC(4:6,1:3) + D22 = betaC(4:6,4:6) + + b11(1:3,1:3) = -MATMUL(SkewSymMat(E1),D11) + b12(1:3,1:3) = -MATMUL(SkewSymMat(E1),D12) + + SS_ome = SkewSymMat( m%qp%vvv(4:6,idx_qp,nelem) ) + + ! Compute stiffness matrix Sd + Sd(1:3,1:3) = -MATMUL(D11,SS_ome) + Sd(1:3,4:6) = -MATMUL(D12,SS_ome) + Sd(4:6,1:3) = -MATMUL(D21,SS_ome) + Sd(4:6,4:6) = -MATMUL(D22,SS_ome) + + ! Compute stiffness matrix Pd + Pd = 0.0_BDKi + Pd(4:6,1:3) = SkewSymMat(ffd(1:3)) - MATMUL(b11,SS_ome) + Pd(4:6,4:6) = -MATMUL(b12,SS_ome) + + ! Compute stiffness matrix Od + alpha = SkewSymMat(vvp(1:3)) - MATMUL(SS_ome,SkewSymMat(E1)) + Od(:,1:3) = 0.0_BDKi + Od(1:3,4:6) = MATMUL(D11,alpha) - SkewSymMat(ffd(1:3)) + Od(4:6,4:6) = MATMUL(D21,alpha) - SkewSymMat(ffd(4:6)) + + ! Compute stiffness matrix Qd + Qd = 0.0_BDKi + Qd(4:6,4:6) = -MATMUL(SkewSymMat(E1),Od(1:3,4:6)) + + ! Compute gyroscopic matrix Gd + Gd(:,1:3) = 0.0_BDKi + Gd(1:3,4:6) = TRANSPOSE(b11) + Gd(4:6,4:6) = TRANSPOSE(b12) + + ! Compute gyroscopic matrix Xd + Xd = 0.0_BDKi + Xd(4:6,4:6) = -MATMUL(SkewSymMat(E1),Gd(1:3,4:6)) + + ! Compute gyroscopic matrix Yd + Yd(1:3,:) = 0.0_BDKi + Yd(4:6,1:3) = b11 + Yd(4:6,4:6) = b12 + end subroutine + + SUBROUTINE Calc_FC_FD_ffd(E1, vvv, vvp, betaC, Fc, Fd) + REAL(BDKi), intent(in) :: E1(:), vvv(:), vvp(:), betaC(:,:) + REAL(BDKi), intent(inout) :: Fc(:), Fd(:) + REAL(BDKi) :: eed(6), ffd(6) + ! Compute strain rates - eed = m%qp%vvp(1:6,idx_qp,nelem) - eed(1:3) = eed(1:3) + cross_product(m%qp%E1(:,idx_qp,nelem),m%qp%vvv(4:6,idx_qp,nelem)) + eed = vvp + eed(1:3) = eed(1:3) + cross_product(E1,vvv(4:6)) ! Compute dissipative force - ffd(1:6) = MATMUL(m%qp%betaC(:,:,idx_qp,nelem),eed) + ffd(1:6) = MATMUL(betaC(:,:),eed) - m%qp%Fc(1:6,idx_qp,nelem) = m%qp%Fc(1:6,idx_qp,nelem) + ffd - m%qp%Fd(4:6,idx_qp,nelem) = m%qp%Fd(4:6,idx_qp,nelem) + cross_product(ffd(1:3),m%qp%E1(:,idx_qp,nelem)) - + Fc(1:6) = Fc(1:6) + ffd + Fd(4:6) = Fd(4:6) + cross_product(ffd(1:3),E1) END SUBROUTINE Calc_FC_FD_ffd END SUBROUTINE BD_DissipativeForce @@ -3260,21 +3322,21 @@ SUBROUTINE BD_InertialMassMatrix( nelem, p, m ) INTEGER(IntKi) :: i INTEGER(IntKi) :: idx_qp !< index of current quadrature point - do idx_qp=1,p%nqp + m%qp%Mi(:,:,:,nelem) = 0.0_BDKi - m%qp%Mi(:,:,idx_qp,nelem) = 0.0_BDKi + do idx_qp=1,p%nqp ! Set diagonal values for mass DO i=1,3 - m%qp%Mi(i,i,idx_qp,nelem) = p%qp%mmm(idx_qp,nelem) + m%qp%Mi(idx_qp,i,i,nelem) = p%qp%mmm(idx_qp,nelem) ENDDO ! set mass-inertia coupling terms - m%qp%Mi(1:3,4:6,idx_qp,nelem) = -SkewSymMat(m%qp%RR0mEta(:,idx_qp,nelem)) - m%qp%Mi(4:6,1:3,idx_qp,nelem) = SkewSymMat(m%qp%RR0mEta(:,idx_qp,nelem)) + m%qp%Mi(idx_qp,1:3,4:6,nelem) = -SkewSymMat(m%qp%RR0mEta(:,idx_qp,nelem)) + m%qp%Mi(idx_qp,4:6,1:3,nelem) = SkewSymMat(m%qp%RR0mEta(:,idx_qp,nelem)) ! Set inertia terms - m%qp%Mi(4:6,4:6,idx_qp,nelem) = m%qp%rho(:,:,idx_qp,nelem) + m%qp%Mi(idx_qp,4:6,4:6,nelem) = m%qp%rho(:,:,idx_qp,nelem) end do @@ -3771,19 +3833,10 @@ SUBROUTINE Integrate_ElementForce(nelem, p, m) INTEGER(IntKi) :: idx_dof1 CHARACTER(*), PARAMETER :: RoutineName = 'Integrate_ElementForce' - DO i=1,p%nodes_per_elem - DO idx_dof1=1,p%dof_node - - m%elf(idx_dof1,i) = 0.0_BDKi - - DO idx_qp = 1,p%nqp ! dot_product( m%qp%Fc (idx_dof1,:,nelem), p%QPtw_ShpDer( :,i)) - m%elf(idx_dof1,i) = m%elf(idx_dof1,i) - m%qp%Fc (idx_dof1,idx_qp,nelem)*p%QPtw_ShpDer(idx_qp,i) - END DO - - DO idx_qp = 1,p%nqp ! dot_product(m%qp%Ftemp(idx_dof1,:,nelem), p%QPtw_Shp_Jac(:,i,nelem) ) - m%elf(idx_dof1,i) = m%elf(idx_dof1,i) - m%qp%Ftemp(idx_dof1,idx_qp,nelem)*p%QPtw_Shp_Jac(idx_qp,i,nelem) - END DO - + DO i = 1, p%nodes_per_elem + DO idx_dof1 = 1, p%dof_node + m%elf(idx_dof1,i) = -(dot_product(m%qp%Fc(idx_dof1,:,nelem), p%QPtw_ShpDer(:,i)) + & + dot_product(m%qp%Ftemp(idx_dof1,:,nelem), p%QPtw_Shp_Jac(:,i,nelem))) ENDDO ENDDO @@ -3796,31 +3849,28 @@ SUBROUTINE Integrate_ElementMass(nelem, p, m) TYPE(BD_ParameterType), INTENT(IN ) :: p !< Parameters TYPE(BD_MiscVarType), INTENT(INOUT) :: m !< Misc/optimization variables - INTEGER(IntKi) :: idx_qp - INTEGER(IntKi) :: i - INTEGER(IntKi) :: j - INTEGER(IntKi) :: idx_dof1, idx_dof2 CHARACTER(*), PARAMETER :: RoutineName = 'Integrate_ElementMass' - - DO j=1,p%nodes_per_elem - DO idx_dof2=1,p%dof_node - - DO i=1,p%nodes_per_elem - DO idx_dof1=1,p%dof_node - - m%elm(idx_dof1,i,idx_dof2,j) = 0.0_BDKi - - DO idx_qp = 1,p%nqp - m%elm(idx_dof1,i,idx_dof2,j) = m%elm(idx_dof1,i,idx_dof2,j) + m%qp%Mi(idx_dof1,idx_dof2,idx_qp,nelem)*p%QPtw_Shp_Shp_Jac(idx_qp,i,j,nelem) - END DO - - END DO - END DO - + INTEGER(IntKi) :: ErrStat + CHARACTER(ErrMsgLen) :: ErrMsg + INTEGER(IntKi) :: j + INTEGER(IntKi) :: idx_dof2 + ! INTEGER(IntKi) :: idx_qp + ! INTEGER(IntKi) :: i + ! INTEGER(IntKi) :: idx_dof1 + + DO j = 1, p%nodes_per_elem + DO idx_dof2 = 1, p%dof_node + ! DO i = 1, p%nodes_per_elem + ! DO idx_dof1 = 1, p%dof_node + ! do idx_qp = 1, p%nqp + ! m%elm(idx_dof1,i,idx_dof2,j) = m%elm(idx_dof1,i,idx_dof2,j) + (m%qp%Mi(idx_qp,idx_dof1,idx_dof2,nelem),p%QPtw_Shp_Shp_Jac(idx_qp,i,j,nelem)) + ! end do + ! END DO + ! END DO + call LAPACK_gemm('T', 'N', 1.0_R8Ki, m%qp%Mi(:,:,idx_dof2,nelem), p%QPtw_Shp_Shp_Jac(:,:,j,nelem), 0.0_R8Ki, m%elm(:,:,idx_dof2,j), ErrStat, ErrMsg) END DO END DO - END SUBROUTINE Integrate_ElementMass @@ -5582,10 +5632,7 @@ SUBROUTINE BD_CalcForceAcc( u, p, OtherState, m, ErrStat, ErrMsg ) ! Add point forces at GLL points to RHS of equation. - DO j=1,p%node_total - m%RHS(1:3,j) = m%RHS(1:3,j) + m%PointLoadLcl(1:3,j) - m%RHS(4:6,j) = m%RHS(4:6,j) + m%PointLoadLcl(4:6,j) - ENDDO + m%RHS = m%RHS + m%PointLoadLcl ! Now set the root reaction force. @@ -6847,6 +6894,7 @@ subroutine BD_UpdateGlobalRef(u, p, x, OtherState, ErrStat, ErrMsg) character(ErrMsgLen) :: ErrMsg2 ! Temporary Error message real(R8Ki) :: GlbWM_old(3), GlbWM_new(3), GlbWM_diff(3) real(R8Ki) :: GlbRot_old(3, 3), GlbRot_new(3, 3), GlbRot_diff(3, 3) + real(R8Ki) :: NodeRot_old(3) real(R8Ki) :: GlbPos_old(3), GlbPos_new(3) real(R8Ki) :: pos(3), rot(3), trans_vel(3), rot_vel(3), uuN0(3) integer(IntKi) :: i, j, temp_id @@ -6887,8 +6935,8 @@ subroutine BD_UpdateGlobalRef(u, p, x, OtherState, ErrStat, ErrMsg) matmul(GlbRot_new, p%uuN0(1:3, j, i))) ! Update the node orientation rotation of the node - call BD_CrvCompose(x%q(4:6, temp_id), GlbWM_diff, x%q(4:6, temp_id), FLAG_R1R2) - + NodeRot_old = x%q(4:6, temp_id) + call BD_CrvCompose(x%q(4:6, temp_id), GlbWM_diff, NodeRot_old, FLAG_R1R2) end do end do diff --git a/modules/beamdyn/src/BeamDyn_Subs.f90 b/modules/beamdyn/src/BeamDyn_Subs.f90 index 519a40e589..c1b9796a07 100644 --- a/modules/beamdyn/src/BeamDyn_Subs.f90 +++ b/modules/beamdyn/src/BeamDyn_Subs.f90 @@ -242,32 +242,31 @@ SUBROUTINE BD_CrvCompose( rr, pp, qq, flag) REAL(BDKi), INTENT( OUT):: rr(3) !< Composed rotation REAL(BDKi), INTENT(IN ):: pp(3) !< Input rotation 1 REAL(BDKi), INTENT(IN ):: qq(3) !< Input rotation 2 - INTEGER ,INTENT(IN ):: flag !< Option flag + INTEGER, INTENT(IN ):: flag !< Option flag - REAL(BDKi) :: pp0 - REAL(BDKi) :: p(3) - REAL(BDKi) :: qq0 - REAL(BDKi) :: q(3) + REAL(BDKi) :: pp0, p(3) + REAL(BDKi) :: qq0, q(3) REAL(BDKi) :: tr1 - REAL(BDKi) :: Delta1 - REAL(BDKi) :: Delta2 + REAL(BDKi) :: Delta1, Delta2 REAL(BDKi) :: dd1 REAL(BDKi) :: dd2 - ! Set the local values pp and qq allowing for the transpose - - IF(flag==FLAG_R1TR2 .OR. flag==FLAG_R1TR2T) THEN ! "transpose" (negative) of first rotation parameter - p = -pp - ELSE - p = pp - ENDIF - - IF(flag==FLAG_R1R2T .OR. flag==FLAG_R1TR2T) THEN ! "transpose" (negative) of second rotation parameter - q = -qq - ELSE - q = qq - ENDIF + ! Set the local values pp (R1) and qq (R2) and apply transpose based on flag value + select case (flag) + case (FLAG_R1R2) + p = pp ! R1 + q = qq ! R2 + case (FLAG_R1R2T) + p = pp ! R1 + q = -qq ! R2^T + case (FLAG_R1TR2) + p = -pp ! R1^T + q = qq ! R2 + case (FLAG_R1TR2T) + p = -pp ! R1^T + q = -qq ! R2^T + end select !> ## Composing the resulting Wiener-Milenkovic parameter !! @@ -289,7 +288,6 @@ SUBROUTINE BD_CrvCompose( rr, pp, qq, flag) !! !! - ! Calculate pp0 and qq0. See Bauchau for the mathematics here (equations 8 to 9 and interviening text) pp0 = 2.0_BDKi - dot_product(p,p) / 8.0_BDKi ! p_0 @@ -297,19 +295,16 @@ SUBROUTINE BD_CrvCompose( rr, pp, qq, flag) Delta1 = (4.0_BDKi - pp0) * (4.0_BDKi - qq0) ! Delta_1 in Bauchau Delta2 = pp0 * qq0 - dot_product(p,q) ! Delta_2 in Bauchau - dd1 = Delta1 + Delta2 ! Denomimator term for \Delta_2 >= 0 - dd2 = Delta1 - Delta2 ! Denomimator term for \Delta_2 < 0 - ! Rescaling to remove singularities at +/- 2 \pi - ! Note: changed this to test on \Delta_2 (instead of dd1 > dd2) for better consistency with documentation. - IF ( Delta2 >= 0.0_BDKi ) THEN - tr1 = 4.0_BDKi / dd1 + ! Rescaling to remove singularities at +/- 2 \pi + ! Note: changed this to test on \Delta_2 (instead of dd1 > dd2) for better consistency with documentation. + IF (Delta2 >= 0.0_BDKi) THEN + tr1 = 4.0_BDKi / (Delta1 + Delta2) ELSE - tr1 = -4.0_BDKi / dd2 + tr1 = -4.0_BDKi / (Delta1 - Delta2) ENDIF - rr = tr1 * (qq0*p + pp0*q + cross_product(p,q)) - + rr = tr1 * (qq0*p + pp0*q + Cross_Product(p,q)) END SUBROUTINE BD_CrvCompose diff --git a/modules/nwtc-library/src/ModMesh.f90 b/modules/nwtc-library/src/ModMesh.f90 index 6661370353..7ede50f626 100644 --- a/modules/nwtc-library/src/ModMesh.f90 +++ b/modules/nwtc-library/src/ModMesh.f90 @@ -2020,33 +2020,73 @@ SUBROUTINE MeshCopy( SrcMesh, DestMesh, CtrlCode, ErrStat , ErrMess & IF (.NOT. SrcMesh%Initialized) RETURN !bjj: maybe we should first CALL MeshDestroy(DestMesh,ErrStat, ErrMess) - IF ( CtrlCode .EQ. MESH_NEWCOPY .OR. CtrlCode .EQ. MESH_SIBLING .OR. CtrlCode .EQ. MESH_COUSIN ) THEN - - IF (CtrlCode .EQ. MESH_NEWCOPY) THEN - IOS_l = SrcMesh%IOS - Force_l = SrcMesh%FieldMask(MASKID_FORCE) - Moment_l = SrcMesh%FieldMask(MASKID_MOMENT) - Orientation_l = SrcMesh%FieldMask(MASKID_ORIENTATION) - TranslationDisp_l = SrcMesh%FieldMask(MASKID_TRANSLATIONDISP) - TranslationVel_l = SrcMesh%FieldMask(MASKID_TRANSLATIONVEL) - RotationVel_l = SrcMesh%FieldMask(MASKID_ROTATIONVEL) - TranslationAcc_l = SrcMesh%FieldMask(MASKID_TRANSLATIONACC) - RotationAcc_l = SrcMesh%FieldMask(MASKID_ROTATIONACC) - nScalars_l = SrcMesh%nScalars - ELSE ! Sibling or cousin - IOS_l = SrcMesh%IOS ; IF ( PRESENT(IOS) ) IOS_l = IOS - Force_l = .FALSE. ; IF ( PRESENT(Force) ) Force_l = Force - Moment_l = .FALSE. ; IF ( PRESENT(Moment) ) Moment_l = Moment - Orientation_l = .FALSE. ; IF ( PRESENT(Orientation) ) Orientation_l = Orientation - TranslationDisp_l = .FALSE. ; IF ( PRESENT(TranslationDisp) ) TranslationDisp_l = TranslationDisp - TranslationVel_l = .FALSE. ; IF ( PRESENT(TranslationVel) ) TranslationVel_l = TranslationVel - RotationVel_l = .FALSE. ; IF ( PRESENT(RotationVel) ) RotationVel_l = RotationVel - TranslationAcc_l = .FALSE. ; IF ( PRESENT(TranslationAcc) ) TranslationAcc_l = TranslationAcc - RotationAcc_l = .FALSE. ; IF ( PRESENT(RotationAcc) ) RotationAcc_l = RotationAcc - nScalars_l = 0 ; IF ( PRESENT(nScalars) ) nScalars_l = nScalars - END IF - - IF ( CtrlCode .EQ. MESH_NEWCOPY .OR. CtrlCode .EQ. MESH_COUSIN ) THEN + select case (CtrlCode) + case (MESH_NEWCOPY) + IOS_l = SrcMesh%IOS + Force_l = SrcMesh%FieldMask(MASKID_FORCE) + Moment_l = SrcMesh%FieldMask(MASKID_MOMENT) + Orientation_l = SrcMesh%FieldMask(MASKID_ORIENTATION) + TranslationDisp_l = SrcMesh%FieldMask(MASKID_TRANSLATIONDISP) + TranslationVel_l = SrcMesh%FieldMask(MASKID_TRANSLATIONVEL) + RotationVel_l = SrcMesh%FieldMask(MASKID_ROTATIONVEL) + TranslationAcc_l = SrcMesh%FieldMask(MASKID_TRANSLATIONACC) + RotationAcc_l = SrcMesh%FieldMask(MASKID_ROTATIONACC) + nScalars_l = SrcMesh%nScalars + case (MESH_SIBLING, MESH_COUSIN) + IF ( PRESENT(IOS) ) then + IOS_l = IOS + else + IOS_l = SrcMesh%IOS + end if + IF ( PRESENT(Force) ) then + Force_l = Force + else + Force_l = .FALSE. + end if + IF ( PRESENT(Moment) ) then + Moment_l = Moment + else + Moment_l = .FALSE. + end if + IF ( PRESENT(Orientation) ) then + Orientation_l = Orientation + else + Orientation_l = .FALSE. + end if + IF ( PRESENT(TranslationDisp) ) then + TranslationDisp_l = TranslationDisp + else + TranslationDisp_l = .FALSE. + end if + IF ( PRESENT(TranslationVel) ) then + TranslationVel_l = TranslationVel + else + TranslationVel_l = .FALSE. + end if + IF ( PRESENT(RotationVel) ) then + RotationVel_l = RotationVel + else + RotationVel_l = .FALSE. + end if + IF ( PRESENT(TranslationAcc) ) then + TranslationAcc_l = TranslationAcc + else + TranslationAcc_l = .FALSE. + end if + IF ( PRESENT(RotationAcc) ) then + RotationAcc_l = RotationAcc + else + RotationAcc_l = .FALSE. + end if + IF ( PRESENT(nScalars) ) then + nScalars_l = nScalars + else + nScalars_l = 0 + end if + end select + + select case (CtrlCode) + case (MESH_NEWCOPY, MESH_COUSIN) CALL MeshCreate( DestMesh, IOS=IOS_l, Nnodes=SrcMesh%Nnodes, ErrStat=ErrStat, ErrMess=ErrMess & ,Force=Force_l & @@ -2123,7 +2163,7 @@ SUBROUTINE MeshCopy( SrcMesh, DestMesh, CtrlCode, ErrStat , ErrMess & DestMesh%RemapFlag = SrcMesh%RemapFlag - ELSE IF ( CtrlCode .EQ. MESH_SIBLING ) THEN + case (MESH_SIBLING) !bjj: we should make sure the mesh has been committed, otherwise the element lists haven't been created, yet (and thus not shared) IF ( ASSOCIATED(SrcMesh%SiblingMesh) ) THEN ErrStat = ErrID_Fatal @@ -2165,17 +2205,7 @@ SUBROUTINE MeshCopy( SrcMesh, DestMesh, CtrlCode, ErrStat , ErrMess & DestMesh%maxelemlist = SrcMesh%maxelemlist DestMesh%nextelem = SrcMesh%nextelem - - ENDIF - - DO i = 1, NELEMKINDS - IF ( ASSOCIATED(SrcMesh%ElemTable) ) THEN - ENDIF - IF ( ASSOCIATED(DestMesh%ElemTable) ) THEN - ENDIF - ENDDO - - ELSE IF ( CtrlCode .EQ. MESH_UPDATECOPY ) THEN + case (MESH_UPDATECOPY) IF ( SrcMesh%nNodes .NE. DestMesh%nNodes ) THEN ErrStat = ErrID_Fatal @@ -2183,7 +2213,7 @@ SUBROUTINE MeshCopy( SrcMesh, DestMesh, CtrlCode, ErrStat , ErrMess & RETURN ENDIF - ELSE IF ( CtrlCode .EQ. MESH_UPDATEREFERENCE ) THEN + case (MESH_UPDATEREFERENCE) IF ( SrcMesh%nNodes .NE. DestMesh%nNodes ) THEN ErrStat = ErrID_Fatal @@ -2195,11 +2225,11 @@ SUBROUTINE MeshCopy( SrcMesh, DestMesh, CtrlCode, ErrStat , ErrMess & DestMesh%RefOrientation = SrcMesh%RefOrientation DestMesh%RemapFlag = SrcMesh%RemapFlag - ELSE + case default ErrStat = ErrID_Fatal ErrMess = 'MeshCopy: Invalid CtrlCode.' RETURN - ENDIF + end select ! These aren't shared between siblings, so they get copied, no matter what the CtrlCode: diff --git a/modules/nwtc-library/src/ModMesh_Mapping.f90 b/modules/nwtc-library/src/ModMesh_Mapping.f90 index df2723a60b..6d9a7325d1 100644 --- a/modules/nwtc-library/src/ModMesh_Mapping.f90 +++ b/modules/nwtc-library/src/ModMesh_Mapping.f90 @@ -3262,38 +3262,28 @@ FUNCTION GetLoadsScaleFactor( Src ) ! LOCAL: INTEGER :: I, j - REAL(ReKi) :: MaxLoad + REAL(ReKi) :: MaxLoad, MaxForce, MaxMoment + IF ( Src%FIELDMASK( MASKID_FORCE ) ) then + MaxForce = maxval(abs(src%Force)) + else + MaxForce = 0.0_ReKi + end if - GetLoadsScaleFactor = 1.0 - MaxLoad = 0.0 - - IF ( Src%FIELDMASK( MASKID_FORCE ) ) THEN - - DO I=1,Src%Nnodes - DO J=1,3 - MaxLoad = MAX(MaxLoad, ABS(Src%Force(j,I) ) ) - END DO - END DO - - END IF - + IF ( Src%FIELDMASK( MASKID_MOMENT ) ) then + MaxMoment = maxval(abs(src%Moment)) + else + MaxMoment = 0.0_ReKi + end if + + MaxLoad = max(MaxForce, MaxMoment) - IF ( Src%FIELDMASK( MASKID_MOMENT ) ) THEN - - DO I=1,Src%Nnodes - DO J=1,3 - MaxLoad = MAX(MaxLoad, ABS(Src%Moment(j,I) ) ) - END DO - END DO - - END IF - IF ( MaxLoad > 10. ) THEN GetLoadsScaleFactor = 10**MIN( NINT(log10(MaxLoad)), 15 ) ! Let's not get carried away and cause overflow; 10E15 is as far as we'll go + else + GetLoadsScaleFactor = 1.0_ReKi END IF - END FUNCTION GetLoadsScaleFactor !---------------------------------------------------------------------------------------------------------------------------------- SUBROUTINE CreateLoadMap_P_to_P( Src, Dest, MeshMap, ErrStat, ErrMsg ) diff --git a/modules/nwtc-library/src/NWTC_Num.f90 b/modules/nwtc-library/src/NWTC_Num.f90 index 2daf088cca..8d7eb9338d 100644 --- a/modules/nwtc-library/src/NWTC_Num.f90 +++ b/modules/nwtc-library/src/NWTC_Num.f90 @@ -485,7 +485,7 @@ END SUBROUTINE ConvertUnitsToEngr !> This function computes the cross product of two 3-element arrays (resulting in a vector): \n !! cross_product = Vector1 \f$\times\f$ Vector2 \n !! Use cross_product (nwtc_num::cross_product) instead of directly calling a specific routine in the generic interface. - FUNCTION Cross_ProductR4(Vector1, Vector2) result(CProd) + PURE FUNCTION Cross_ProductR4(Vector1, Vector2) result(CProd) ! Argument declarations. @@ -505,7 +505,7 @@ FUNCTION Cross_ProductR4(Vector1, Vector2) result(CProd) END FUNCTION Cross_ProductR4 !======================================================================= !> \copydoc nwtc_num::cross_productr4 - FUNCTION Cross_ProductR4R8(Vector1, Vector2) result(CProd) + PURE FUNCTION Cross_ProductR4R8(Vector1, Vector2) result(CProd) ! Argument declarations. @@ -525,7 +525,7 @@ FUNCTION Cross_ProductR4R8(Vector1, Vector2) result(CProd) END FUNCTION Cross_ProductR4R8 !======================================================================= !> \copydoc nwtc_num::cross_productr4 - FUNCTION Cross_ProductR8(Vector1, Vector2) result(CProd) + PURE FUNCTION Cross_ProductR8(Vector1, Vector2) result(CProd) ! Argument declarations. @@ -545,7 +545,7 @@ FUNCTION Cross_ProductR8(Vector1, Vector2) result(CProd) END FUNCTION Cross_ProductR8 !======================================================================= !> \copydoc nwtc_num::cross_productr4 - FUNCTION Cross_ProductR8R4(Vector1, Vector2) result(CProd) + PURE FUNCTION Cross_ProductR8R4(Vector1, Vector2) result(CProd) ! Argument declarations. From c8b984824924d971e5c1d20c5886d62bddbd342c Mon Sep 17 00:00:00 2001 From: Derek Slaughter Date: Mon, 19 Aug 2024 20:18:56 +0000 Subject: [PATCH 15/30] Fix bug in BeamDyn performance commit --- modules/beamdyn/src/BeamDyn.f90 | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/modules/beamdyn/src/BeamDyn.f90 b/modules/beamdyn/src/BeamDyn.f90 index ad69f87474..d37909b0e8 100644 --- a/modules/beamdyn/src/BeamDyn.f90 +++ b/modules/beamdyn/src/BeamDyn.f90 @@ -2695,9 +2695,9 @@ SUBROUTINE BD_ElasticForce(nelem,p,m,fact) TYPE(BD_MiscVarType), INTENT(INOUT) :: m !< Misc/optimization variables. LOGICAL, INTENT(IN ) :: fact !< Boolean to calculate the Jacobian - - - INTEGER(IntKi) :: idx_qp !< Index to quadrature point currently being calculated + REAL(BDKi) :: cet !< for storing the \f$ I_{yy} + I_{zz} \f$ inertia term + REAL(BDKi) :: k1s + INTEGER(IntKi) :: idx_qp !< Index to quadrature point currently being calculated if (.not. fact) then @@ -2734,8 +2734,6 @@ subroutine Calc_Oe_Pe_Qe(RR0, Stif, Fc, Oe, Pe, Qe) REAL(BDKi) :: C21(3,3) REAL(BDKi) :: epsi(3,3) REAL(BDKi) :: mu(3,3) - REAL(BDKi) :: cet !< for storing the \f$ I_{yy} + I_{zz} \f$ inertia term - REAL(BDKi) :: k1s !> ###Calculate the \f$ \underline{\underline{\mathcal{O}}} \f$ from equation (19) !! @@ -2804,8 +2802,6 @@ subroutine Calc_Fc_Fd(RR0, uuu, E1, Fc, Fd) REAL(BDKi) :: R(3,3) !< rotation matrix at quatrature point REAL(BDKi) :: Rx0p(3) !< \f$ \underline{R} \underline{x}^\prime_0 \f$ REAL(BDKi) :: Wrk(3) - REAL(BDKi) :: cet !< for storing the \f$ I_{yy} + I_{zz} \f$ inertia term - REAL(BDKi) :: k1s !> ### Calculate the 1D strain, \f$ \underline{\epsilon} \f$, equation (5) !! \f$ \underline{\epsilon} = \underline{x}^\prime_0 + \underline{u}^\prime - From 1d313c9370587c6fa32088eddea2be64f3a16777 Mon Sep 17 00:00:00 2001 From: Derek Slaughter Date: Tue, 20 Aug 2024 20:54:00 +0000 Subject: [PATCH 16/30] Fix beamdyn_utest incorrect size of m%qp%upp --- modules/beamdyn/tests/test_tools.F90 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/beamdyn/tests/test_tools.F90 b/modules/beamdyn/tests/test_tools.F90 index 1f64ec584e..4850f1770b 100644 --- a/modules/beamdyn/tests/test_tools.F90 +++ b/modules/beamdyn/tests/test_tools.F90 @@ -173,8 +173,8 @@ type(BD_MiscVarType) function simpleMiscVarType(nqp, dof_node, elem_total, nodes call AllocAry(m%qp%RR0mEta, 3, nqp, elem_total, 'qp_RR0mEta', ErrStat, ErrMsg) call AllocAry(m%DistrLoad_QP, 6, nqp, elem_total, 'DistrLoad_QP', ErrStat, ErrMsg) - CALL AllocAry(m%qp%uuu, dof_node ,nqp,elem_total, 'm%qp%uuu displacement at quadrature point',ErrStat,ErrMsg) - CALL AllocAry(m%qp%uup, dof_node/2,nqp,elem_total, 'm%qp%uup displacement prime at quadrature point',ErrStat,ErrMsg) + call AllocAry(m%qp%uuu, dof_node, nqp, elem_total, 'm%qp%uuu displacement at quadrature point', ErrStat, ErrMsg) + call AllocAry(m%qp%uup, dof_node, nqp, elem_total, 'm%qp%uup displacement prime at quadrature point', ErrStat, ErrMsg) ! E1, kappa -- used in force calculations CALL AllocAry(m%qp%E1, dof_node/2,nqp,elem_total, 'm%qp%E1 at quadrature point',ErrStat,ErrMsg) From 48a9e87d1fa3d0040a50c118457bd3ca7ee53380 Mon Sep 17 00:00:00 2001 From: Derek Slaughter Date: Thu, 22 Aug 2024 12:56:48 +0000 Subject: [PATCH 17/30] Fix more bugs in BeamDyn performance improvements --- modules/beamdyn/src/BeamDyn.f90 | 82 +++++++++++++++++++-------------- 1 file changed, 48 insertions(+), 34 deletions(-) diff --git a/modules/beamdyn/src/BeamDyn.f90 b/modules/beamdyn/src/BeamDyn.f90 index d37909b0e8..172fca1bd9 100644 --- a/modules/beamdyn/src/BeamDyn.f90 +++ b/modules/beamdyn/src/BeamDyn.f90 @@ -2606,17 +2606,16 @@ subroutine Calc_Stif_betaC(RR0, Stif0, Stif, betaC) ! This is the following: ! tempBeta6 = matmul(tempR6, matmul(diag(p%beta), transpose(tempR6))) - ! Compute tempBeta_diag = beta * tempR6_T (for diagonal elements only) - do j = 1, 6 - tempBeta_diag(j) = p%beta(j) * tempR6_T(j, j) - end do - - ! Compute tempBeta6 using tempBeta_diag - do j = 1, 6 - do i = 1, 6 - tempBeta6(i, j) = tempR6(i, j) * tempBeta_diag(j) - end do - end do + ! Move damping ratio from material frame to the calculation reference frame + ! This is the following: + ! tempBEta6=matmul(tempR6,matmul(diag(p%beta),transpose(tempR6))) + do j=1,6 + do i=1,6 + ! diagonal of p%beta * TRANSPOSE(tempR6) + tempBeta6(i,j) = p%beta(i)*tempR6(j,i) + enddo + enddo + tempBeta6 = matmul(tempR6,tempBeta6) !> Modify the Mass matrix so it is in the calculation reference frame !! \f$ \begin{bmatrix} @@ -2695,8 +2694,8 @@ SUBROUTINE BD_ElasticForce(nelem,p,m,fact) TYPE(BD_MiscVarType), INTENT(INOUT) :: m !< Misc/optimization variables. LOGICAL, INTENT(IN ) :: fact !< Boolean to calculate the Jacobian - REAL(BDKi) :: cet !< for storing the \f$ I_{yy} + I_{zz} \f$ inertia term - REAL(BDKi) :: k1s + REAL(BDKi) :: cet_t !< for storing the \f$ I_{yy} + I_{zz} \f$ inertia term + REAL(BDKi) :: k1s_t INTEGER(IntKi) :: idx_qp !< Index to quadrature point currently being calculated @@ -2704,21 +2703,33 @@ SUBROUTINE BD_ElasticForce(nelem,p,m,fact) do idx_qp=1,p%nqp call Calc_Fc_Fd(m%qp%RR0(:,:,idx_qp,nelem), & m%qp%uuu(:,idx_qp,nelem), & + p%E10(:,idx_qp,nelem), & m%qp%E1(:,idx_qp,nelem), & + m%qp%kappa(1:3,idx_qp,nelem), & + p%Stif0_QP(:,:,(nelem-1)*p%nqp+idx_qp), & + m%qp%Stif(:,:,idx_qp,nelem), & m%qp%Fc(:,idx_qp,nelem), & - m%qp%Fd(:,idx_qp,nelem)) + m%qp%Fd(:,idx_qp,nelem), & + cet_t, k1s_t) end do else do idx_qp=1,p%nqp call Calc_Fc_Fd(m%qp%RR0(:,:,idx_qp,nelem), & m%qp%uuu(:,idx_qp,nelem), & + p%E10(:,idx_qp,nelem), & m%qp%E1(:,idx_qp,nelem), & + m%qp%kappa(1:3,idx_qp,nelem), & + p%Stif0_QP(:,:,(nelem-1)*p%nqp+idx_qp), & + m%qp%Stif(:,:,idx_qp,nelem), & m%qp%Fc(:,idx_qp,nelem), & - m%qp%Fd(:,idx_qp,nelem)) + m%qp%Fd(:,idx_qp,nelem), & + cet_t, k1s_t) call Calc_Oe_Pe_Qe(m%qp%RR0(:,:,idx_qp,nelem), & m%qp%Stif(:,:,idx_qp,nelem), & + m%qp%E1(:,idx_qp,nelem), & m%qp%Fc(:,idx_qp,nelem), & + cet_t, k1s_t, & m%qp%Oe(:,:,idx_qp,nelem), & m%qp%Pe(:,:,idx_qp,nelem), & m%qp%Qe(:,:,idx_qp,nelem)) @@ -2726,8 +2737,8 @@ SUBROUTINE BD_ElasticForce(nelem,p,m,fact) end if contains - subroutine Calc_Oe_Pe_Qe(RR0, Stif, Fc, Oe, Pe, Qe) - REAL(BDKi), intent(in) :: RR0(:,:), Stif(:,:), Fc(:) + subroutine Calc_Oe_Pe_Qe(RR0, Stif, E1, Fc, cet, k1s, Oe, Pe, Qe) + REAL(BDKi), intent(in) :: RR0(:,:), Stif(:,:), E1(:), Fc(:), cet, k1s REAL(BDKi), intent(inout) :: Oe(:,:), Pe(:,:), Qe(:,:) REAL(BDKi) :: Wrk33(3,3) REAL(BDKi) :: tildeE(3,3) @@ -2750,7 +2761,7 @@ subroutine Calc_Oe_Pe_Qe(RR0, Stif, Fc, Oe, Pe, Qe) Wrk33 = OuterProduct(RR0(1:3,3), RR0(1:3,3)) ! z-direction in IEC coords C21 = Stif(4:6,1:3) + cet*k1s*Wrk33(:,:) - tildeE = SkewSymMat(m%qp%E1(:,idx_qp,nelem)) + tildeE = SkewSymMat(E1) epsi = MATMUL(Stif(1:3,1:3),tildeE) ! Stif is RR0 * p%Stif0_QP * RR0^T mu = MATMUL(C21,tildeE) @@ -2793,9 +2804,9 @@ subroutine Calc_Oe_Pe_Qe(RR0, Stif, Fc, Oe, Pe, Qe) Qe(4:6,4:6) = -MATMUL(tildeE,Oe(1:3,4:6)) end subroutine - subroutine Calc_Fc_Fd(RR0, uuu, E1, Fc, Fd) - REAL(BDKi), intent(in) :: RR0(:,:), uuu(:), E1(:) - REAL(BDKi), intent(inout) :: Fc(:), Fd(:) + subroutine Calc_Fc_Fd(RR0, uuu, E10, E1, kappa, Stif0, Stif, Fc, Fd, cet, k1s) + REAL(BDKi), intent(in) :: RR0(:,:), uuu(:), E10(:), E1(:), kappa(:), Stif0(:,:), Stif(:,:) + REAL(BDKi), intent(out) :: Fc(:), Fd(:), cet, k1s REAL(BDKi) :: e1s REAL(BDKi) :: eee(6) !< intermediate array for calculation Strain and curvature terms of Fc REAL(BDKi) :: fff(6) !< intermediate array for calculation of the elastic force, Fc @@ -2815,7 +2826,7 @@ subroutine Calc_Fc_Fd(RR0, uuu, E1, Fc, Fd) !! and the transpose for the other direction. ! eee(1:3) = m%qp%E1(1:3,idx_qp,nelem) - m%qp%RR0(1:3,3,idx_qp,nelem) ! Using RR0 z direction in IEC coords call BD_CrvMatrixR(uuu(4:6), R) ! Get rotation at QP as a matrix - Rx0p = matmul(R,p%E10(:,idx_qp,nelem)) ! Calculate rotated initial tangent + Rx0p = matmul(R,E10) ! Calculate rotated initial tangent eee(1:3) = E1(1:3) - Rx0p ! Use rotated initial tangent in place of RR0*i1 to eliminate likely mismatch between R0*i1 and x0' !> ### Set the 1D sectional curvature, \f$ \underline{\kappa} \f$, equation (5) @@ -2836,7 +2847,7 @@ subroutine Calc_Fc_Fd(RR0, uuu, E1, Fc, Fd) !! \f$ !! In other words, \f$ \tilde{k} = \left(\underline{\underline{R}}^\prime\underline{\underline{R}}^T \right) \f$. !! Note: \f$ \underline{\kappa} \f$ was already calculated in the BD_DisplacementQP routine - eee(4:6) = m%qp%kappa(1:3,idx_qp,nelem) + eee(4:6) = kappa(1:3) !FIXME: note that the k_i terms may not be documented correctly here. @@ -2868,7 +2879,7 @@ subroutine Calc_Fc_Fd(RR0, uuu, E1, Fc, Fd) !! \underline{k} !! \end{array} \right\} \f$ !! - fff(1:6) = MATMUL(m%qp%Stif(:,:,idx_qp,nelem),eee) + fff(1:6) = MATMUL(Stif,eee) !> ###Calculate the extension twist coupling. @@ -2903,7 +2914,7 @@ subroutine Calc_Fc_Fd(RR0, uuu, E1, Fc, Fd) !! Note that with coverting to the FAST / IEC coordinate system, we now are using the Ixx and Iyy terms which are located at !! \f$ C_{et} = C_{4,4} + C_{5,5} \f$ ! Refer Section 1.4 in "Dymore User's Manual - Formulation and finite element implementation of beam elements". - cet= p%Stif0_QP(4,4,(nelem-1)*p%nqp+idx_qp) + p%Stif0_QP(5,5,(nelem-1)*p%nqp+idx_qp) ! Dymore theory (22) + cet = Stif0(4,4) + Stif0(5,5) ! Dymore theory (22) Fc(1:3) = fff(1:3) + 0.5_BDKi*cet*k1s*k1s*RR0(1:3,3) ! Dymore theory (25a). Note z-axis is the length of blade. Fc(4:6) = fff(4:6) + cet*e1s*k1s*RR0(1:3,3) ! Dymore theory (25b). Note z-axis is the length of blade. @@ -3085,6 +3096,7 @@ SUBROUTINE BD_DissipativeForce( nelem, p, m,fact ) LOGICAL, INTENT(IN ) :: fact INTEGER(IntKi) :: idx_qp !< index of current quadrature point + REAL(BDKi) :: ffd_t(6) IF (.NOT. fact) then ! skip all but Fc and Fd terms @@ -3095,7 +3107,8 @@ SUBROUTINE BD_DissipativeForce( nelem, p, m,fact ) m%qp%vvp(:,idx_qp,nelem), & m%qp%betaC(:,:,idx_qp,nelem), & m%qp%Fc(:,idx_qp,nelem), & - m%qp%Fd(:,idx_qp,nelem)) + m%qp%Fd(:,idx_qp,nelem), & + ffd_t) END DO ! bjj: we don't use these values when fact is FALSE, so let's save time and ignore them here, too. @@ -3117,11 +3130,13 @@ SUBROUTINE BD_DissipativeForce( nelem, p, m,fact ) m%qp%vvp(:,idx_qp,nelem), & m%qp%betaC(:,:,idx_qp,nelem), & m%qp%Fc(:,idx_qp,nelem), & - m%qp%Fd(:,idx_qp,nelem)) + m%qp%Fd(:,idx_qp,nelem), & + ffd_t) call Calc_Sd_Pd_Od_Qd_Gd_Xd_Yd(m%qp%E1(:,idx_qp,nelem), & m%qp%vvp(:,idx_qp,nelem), & m%qp%betaC(:,:,idx_qp,nelem), & + ffd_t, & m%qp%Sd(:,:,idx_qp,nelem), & m%qp%Od(:,:,idx_qp,nelem), & m%qp%Qd(:,:,idx_qp,nelem), & @@ -3133,14 +3148,13 @@ SUBROUTINE BD_DissipativeForce( nelem, p, m,fact ) ENDIF CONTAINS - subroutine Calc_Sd_Pd_Od_Qd_Gd_Xd_Yd(E1, vvp, betaC, Sd, Od, Qd, Gd, Xd, Yd, Pd) - REAL(BDKi), intent(in) :: E1(:), vvp(:), betaC(:,:) - REAL(BDKi), intent(inout) :: Sd(:,:), Od(:,:), Qd(:,:), Gd(:,:), Xd(:,:), Yd(:,:), Pd(:,:) + subroutine Calc_Sd_Pd_Od_Qd_Gd_Xd_Yd(E1, vvp, betaC, ffd, Sd, Od, Qd, Gd, Xd, Yd, Pd) + REAL(BDKi), intent(in) :: E1(:), vvp(:), betaC(:,:), ffd(:) + REAL(BDKi), intent(out) :: Sd(:,:), Od(:,:), Qd(:,:), Gd(:,:), Xd(:,:), Yd(:,:), Pd(:,:) REAL(BDKi) :: D11(3,3), D12(3,3), D21(3,3), D22(3,3) REAL(BDKi) :: b11(3,3), b12(3,3) REAL(BDKi) :: alpha(3,3) REAL(BDKi) :: SS_ome(3,3) - REAL(BDKi) :: ffd(6) D11 = betaC(1:3,1:3) D12 = betaC(1:3,4:6) @@ -3188,10 +3202,10 @@ subroutine Calc_Sd_Pd_Od_Qd_Gd_Xd_Yd(E1, vvp, betaC, Sd, Od, Qd, Gd, Xd, Yd, Pd) Yd(4:6,4:6) = b12 end subroutine - SUBROUTINE Calc_FC_FD_ffd(E1, vvv, vvp, betaC, Fc, Fd) + SUBROUTINE Calc_FC_FD_ffd(E1, vvv, vvp, betaC, Fc, Fd, ffd) REAL(BDKi), intent(in) :: E1(:), vvv(:), vvp(:), betaC(:,:) - REAL(BDKi), intent(inout) :: Fc(:), Fd(:) - REAL(BDKi) :: eed(6), ffd(6) + REAL(BDKi), intent(out) :: Fc(:), Fd(:), ffd(:) + REAL(BDKi) :: eed(6) ! Compute strain rates eed = vvp From f93ef0504765569fd7c0038ada621d0f64d99b38 Mon Sep 17 00:00:00 2001 From: Derek Slaughter Date: Thu, 29 Aug 2024 18:41:46 +0000 Subject: [PATCH 18/30] Modfy executeOpenfastLinearRegressionCase.py to skip comparison of numbers less than 5e-5 --- reg_tests/executeOpenfastLinearRegressionCase.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/reg_tests/executeOpenfastLinearRegressionCase.py b/reg_tests/executeOpenfastLinearRegressionCase.py index fbdbe635e3..f8c2aa191d 100644 --- a/reg_tests/executeOpenfastLinearRegressionCase.py +++ b/reg_tests/executeOpenfastLinearRegressionCase.py @@ -292,6 +292,9 @@ def indent(msg, sindent='\t'): # Loop through elements where Mloc is not within tolerance of Mbas # Retest to get error message for n, (i,j) in enumerate(zip(*np.where(M_in_tol == False)), 1): + # Skip comparisons of really small numbers + if np.abs(Mloc[i,j]) < 5e-5 and np.abs(Mloc[i,j]) < 5e-5: + continue try: np.testing.assert_allclose(Mloc[i,j], Mbas[i,j], rtol=rtol, atol=atol) except Exception as e: From 63c9d3beff5c341dbf5079622fbcb827283c8c6b Mon Sep 17 00:00:00 2001 From: Derek Slaughter Date: Wed, 18 Sep 2024 13:54:32 +0000 Subject: [PATCH 19/30] Revert "Modfy executeOpenfastLinearRegressionCase.py to skip comparison of numbers less than 5e-5" This reverts commit f93ef0504765569fd7c0038ada621d0f64d99b38. --- reg_tests/executeOpenfastLinearRegressionCase.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/reg_tests/executeOpenfastLinearRegressionCase.py b/reg_tests/executeOpenfastLinearRegressionCase.py index f8c2aa191d..fbdbe635e3 100644 --- a/reg_tests/executeOpenfastLinearRegressionCase.py +++ b/reg_tests/executeOpenfastLinearRegressionCase.py @@ -292,9 +292,6 @@ def indent(msg, sindent='\t'): # Loop through elements where Mloc is not within tolerance of Mbas # Retest to get error message for n, (i,j) in enumerate(zip(*np.where(M_in_tol == False)), 1): - # Skip comparisons of really small numbers - if np.abs(Mloc[i,j]) < 5e-5 and np.abs(Mloc[i,j]) < 5e-5: - continue try: np.testing.assert_allclose(Mloc[i,j], Mbas[i,j], rtol=rtol, atol=atol) except Exception as e: From 56a97f6e4094b228a2f4c69e2e9defd0e2cd7456 Mon Sep 17 00:00:00 2001 From: Derek Slaughter Date: Wed, 18 Sep 2024 14:23:58 +0000 Subject: [PATCH 20/30] Perturb BD rotation states in WM parameters --- modules/beamdyn/src/BeamDyn_IO.f90 | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/modules/beamdyn/src/BeamDyn_IO.f90 b/modules/beamdyn/src/BeamDyn_IO.f90 index 08a1f714fb..15ed92d7d6 100644 --- a/modules/beamdyn/src/BeamDyn_IO.f90 +++ b/modules/beamdyn/src/BeamDyn_IO.f90 @@ -2472,6 +2472,7 @@ SUBROUTINE Perturb_x( p, fieldIndx, node, dof, perturb_sign, x, dx ) REAL(R8Ki) :: orientation(3,3) REAL(R8Ki) :: rotation(3,3) + REAL(R8Ki) :: CrvPerturb(3), CrvBase(3) dx = p%dx(dof) @@ -2479,13 +2480,16 @@ SUBROUTINE Perturb_x( p, fieldIndx, node, dof, perturb_sign, x, dx ) if (dof < 4) then ! translational displacement x%q( dof, node ) = x%q( dof, node ) + dx * perturb_sign else ! w-m parameters - call BD_CrvMatrixR( x%q( 4:6, node ), rotation ) ! returns the rotation matrix (transpose of DCM) that was stored in the state as a w-m parameter - orientation = transpose(rotation) - CALL PerturbOrientationMatrix( orientation, dx * perturb_sign, dof-3 ) ! NOTE: call not using DCM_logmap - - rotation = transpose(orientation) - call BD_CrvExtractCrv( rotation, x%q( 4:6, node ), ErrStat2, ErrMsg2 ) ! return the w-m parameters of the new orientation + ! Calculate perturbation in WM parameters + CrvPerturb = 0.0_R8Ki + CrvPerturb(dof-3) = 4.0_R8Ki * tan(dx * perturb_sign / 4.0_R8Ki) + + ! Get base rotation in WM parameters + CrvBase = x%q(4:6, node) + + ! Compose pertubation and base rotation and store in state + call BD_CrvCompose(x%q(4:6, node), CrvPerturb, CrvBase, FLAG_R1R2) end if else x%dqdt( dof, node ) = x%dqdt( dof, node ) + dx * perturb_sign From 68423c362d5d144a529b7910bbb99cb5be1012e8 Mon Sep 17 00:00:00 2001 From: Derek Slaughter Date: Fri, 20 Sep 2024 15:34:01 +0000 Subject: [PATCH 21/30] BeamDyn: fix formatting in test_tools.F90 --- modules/beamdyn/tests/test_tools.F90 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/beamdyn/tests/test_tools.F90 b/modules/beamdyn/tests/test_tools.F90 index 4850f1770b..3dfa5e31c4 100644 --- a/modules/beamdyn/tests/test_tools.F90 +++ b/modules/beamdyn/tests/test_tools.F90 @@ -173,8 +173,8 @@ type(BD_MiscVarType) function simpleMiscVarType(nqp, dof_node, elem_total, nodes call AllocAry(m%qp%RR0mEta, 3, nqp, elem_total, 'qp_RR0mEta', ErrStat, ErrMsg) call AllocAry(m%DistrLoad_QP, 6, nqp, elem_total, 'DistrLoad_QP', ErrStat, ErrMsg) - call AllocAry(m%qp%uuu, dof_node, nqp, elem_total, 'm%qp%uuu displacement at quadrature point', ErrStat, ErrMsg) - call AllocAry(m%qp%uup, dof_node, nqp, elem_total, 'm%qp%uup displacement prime at quadrature point', ErrStat, ErrMsg) + call AllocAry(m%qp%uuu, dof_node, nqp, elem_total, 'm%qp%uuu displacement at quadrature point', ErrStat, ErrMsg) + call AllocAry(m%qp%uup, dof_node, nqp, elem_total, 'm%qp%uup displacement prime at quadrature point', ErrStat, ErrMsg) ! E1, kappa -- used in force calculations CALL AllocAry(m%qp%E1, dof_node/2,nqp,elem_total, 'm%qp%E1 at quadrature point',ErrStat,ErrMsg) From 11f1cd332bc419ae4296d2684f2653709ed692b1 Mon Sep 17 00:00:00 2001 From: Derek Slaughter Date: Fri, 20 Sep 2024 15:41:59 +0000 Subject: [PATCH 22/30] Update r-test pointer --- reg_tests/r-test | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reg_tests/r-test b/reg_tests/r-test index 548bf21436..a8ddb774a0 160000 --- a/reg_tests/r-test +++ b/reg_tests/r-test @@ -1 +1 @@ -Subproject commit 548bf2143633a7066f4582167fdf4180951fd7f6 +Subproject commit a8ddb774a0724e0880e95f32b7a9db628aaaf2a8 From e1d3cdb0ce1607504a45c239278cba8bc0fc872c Mon Sep 17 00:00:00 2001 From: andrew-platt Date: Fri, 20 Sep 2024 12:50:19 -0600 Subject: [PATCH 23/30] BD: change to LAPACK_GEMM, add note on ignored error handling --- modules/beamdyn/src/BeamDyn.f90 | 34 ++++++++++++++++++--------------- 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/modules/beamdyn/src/BeamDyn.f90 b/modules/beamdyn/src/BeamDyn.f90 index 172fca1bd9..25eff3875b 100644 --- a/modules/beamdyn/src/BeamDyn.f90 +++ b/modules/beamdyn/src/BeamDyn.f90 @@ -2360,8 +2360,8 @@ SUBROUTINE BD_DisplacementQP( nelem, p, x, m ) TYPE(BD_ContinuousStateType), INTENT(IN ) :: x !< Continuous states at t TYPE(BD_MiscVarType), INTENT(INOUT) :: m !< misc/optimization variables - INTEGER(IntKi) :: ErrStat !< index to current element - CHARACTER(ErrMsgLen) :: ErrMsg !< index to current element + INTEGER(IntKi) :: ErrStat !< Ignored error handling for LAPACK_GEMM + CHARACTER(ErrMsgLen) :: ErrMsg !< Ignored error handling for LAPACK_GEMM INTEGER(IntKi) :: idx_qp !< index to the current quadrature point INTEGER(IntKi) :: elem_start !< Node point of first node in current element @@ -2387,8 +2387,9 @@ SUBROUTINE BD_DisplacementQP( nelem, p, x, m ) elem_start = p%node_elem_idx(nelem,1) ! Use matrix multiplication to interpolate position and position derivative to quadrature points - call LAPACK_DGEMM('N','N', 1.0_BDKi, x%q(1:3,elem_start:elem_start+p%nodes_per_elem-1), p%Shp, 0.0_BDKi, m%qp%uuu(1:3,:,nelem), ErrStat, ErrMsg) - call LAPACK_DGEMM('N','N', 1.0_BDKi, x%q(1:3,elem_start:elem_start+p%nodes_per_elem-1), p%ShpDer, 0.0_BDKi, m%qp%uup(1:3,:,nelem), ErrStat, ErrMsg) + ! NOTE: errors from LAPACK_GEMM can only be due to matrix size mismatch, so they can be safely ignored if matrices are correct size + call LAPACK_GEMM('N','N', 1.0_BDKi, x%q(1:3,elem_start:elem_start+p%nodes_per_elem-1), p%Shp, 0.0_BDKi, m%qp%uuu(1:3,:,nelem), ErrStat, ErrMsg) + call LAPACK_GEMM('N','N', 1.0_BDKi, x%q(1:3,elem_start:elem_start+p%nodes_per_elem-1), p%ShpDer, 0.0_BDKi, m%qp%uup(1:3,:,nelem), ErrStat, ErrMsg) ! Apply Jacobian to get position derivative with respect to X-axis do idx_qp = 1, p%nqp @@ -2414,8 +2415,8 @@ SUBROUTINE BD_RotationalInterpQP( nelem, p, x, m ) TYPE(BD_ContinuousStateType), INTENT(IN ) :: x !< Continuous states at t TYPE(BD_MiscVarType), INTENT(INOUT) :: m !< misc/optimization variables - INTEGER(IntKi) :: ErrStat !< index to current element - CHARACTER(ErrMsgLen) :: ErrMsg !< index to current element + INTEGER(IntKi) :: ErrStat !< Ignored error handling for LAPACK_GEMM + CHARACTER(ErrMsgLen) :: ErrMsg !< Ignored error handling for LAPACK_GEMM INTEGER(IntKi) :: idx_qp !< index to the current quadrature point INTEGER(IntKi) :: elem_start !< Node point of first node in current element INTEGER(IntKi) :: idx_node !< index to current GLL point in element @@ -2480,8 +2481,9 @@ SUBROUTINE BD_RotationalInterpQP( nelem, p, x, m ) ! Use matrix multiplication to interpolate rotation and rotation derivative to quadrature points ! These rotations do not include the root node rotation at this point (added later in function) - call LAPACK_DGEMM('N','N', 1.0_BDKi, m%Nrrr(:,:,nelem), p%Shp, 0.0_BDKi, m%qp%uuu(4:6,:,nelem), ErrStat, ErrMsg) - call LAPACK_DGEMM('N','N', 1.0_BDKi, m%Nrrr(:,:,nelem), p%ShpDer, 0.0_BDKi, m%qp%uup(4:6,:,nelem), ErrStat, ErrMsg) + ! NOTE: errors from LAPACK_GEMM can only be due to matrix size mismatch, so they can be safely ignored if matrices are correct size + call LAPACK_GEMM('N','N', 1.0_BDKi, m%Nrrr(:,:,nelem), p%Shp, 0.0_BDKi, m%qp%uuu(4:6,:,nelem), ErrStat, ErrMsg) + call LAPACK_GEMM('N','N', 1.0_BDKi, m%Nrrr(:,:,nelem), p%ShpDer, 0.0_BDKi, m%qp%uup(4:6,:,nelem), ErrStat, ErrMsg) ! Apply Jacobian to get rotation derivative with respect to X-axis do idx_qp = 1, p%nqp @@ -2950,8 +2952,8 @@ SUBROUTINE BD_QPDataVelocity( p, x, m ) TYPE(BD_ContinuousStateType), INTENT(IN ) :: x !< Continuous states at t TYPE(BD_MiscVarType), INTENT(INOUT) :: m !< Misc/optimization variables - INTEGER(IntKi) :: ErrStat !< index to current element - CHARACTER(ErrMsgLen) :: ErrMsg !< index to current element + INTEGER(IntKi) :: ErrStat !< Ignored error handling for LAPACK_GEMM + CHARACTER(ErrMsgLen) :: ErrMsg !< Ignored error handling for LAPACK_GEMM INTEGER(IntKi) :: nelem !< index to current element INTEGER(IntKi) :: idx_qp !< index to quadrature point INTEGER(IntKi) :: elem_start !< Starting quadrature point of current element @@ -2965,8 +2967,9 @@ SUBROUTINE BD_QPDataVelocity( p, x, m ) elem_start = p%node_elem_idx(nelem,1) ! Use matrix multiplication to interpolate velocity and velocity derivative to quadrature points - call LAPACK_DGEMM('N','N', 1.0_BDKi, x%dqdt(:,elem_start:elem_start+p%nodes_per_elem-1), p%Shp, 0.0_BDKi, m%qp%vvv(:,:,nelem), ErrStat, ErrMsg) - call LAPACK_DGEMM('N','N', 1.0_BDKi, x%dqdt(:,elem_start:elem_start+p%nodes_per_elem-1), p%ShpDer, 0.0_BDKi, m%qp%vvp(:,:,nelem), ErrStat, ErrMsg) + ! NOTE: errors from LAPACK_GEMM can only be due to matrix size mismatch, so they can be safely ignored if matrices are correct size + call LAPACK_GEMM('N','N', 1.0_BDKi, x%dqdt(:,elem_start:elem_start+p%nodes_per_elem-1), p%Shp, 0.0_BDKi, m%qp%vvv(:,:,nelem), ErrStat, ErrMsg) + call LAPACK_GEMM('N','N', 1.0_BDKi, x%dqdt(:,elem_start:elem_start+p%nodes_per_elem-1), p%ShpDer, 0.0_BDKi, m%qp%vvp(:,:,nelem), ErrStat, ErrMsg) ! Apply Jacobian to get velocity derivative with respect to X-axis do idx_qp = 1, p%nqp @@ -2992,8 +2995,8 @@ SUBROUTINE BD_QPDataAcceleration( p, OtherState, m ) TYPE(BD_OtherStateType), INTENT(IN ) :: OtherState !< Other states at t on input; at t+dt on outputs TYPE(BD_MiscVarType), INTENT(INOUT) :: m !< Misc/optimization variables - INTEGER(IntKi) :: ErrStat !< index to current element - CHARACTER(ErrMsgLen) :: ErrMsg !< index to current element + INTEGER(IntKi) :: ErrStat !< Ignored error handling for LAPACK_GEMM + CHARACTER(ErrMsgLen) :: ErrMsg !< Ignored error handling for LAPACK_GEMM INTEGER(IntKi) :: nelem !< index of current element INTEGER(IntKi) :: idx_qp !< index of current quadrature point INTEGER(IntKi) :: idx_node @@ -3005,7 +3008,8 @@ SUBROUTINE BD_QPDataAcceleration( p, OtherState, m ) elem_start = p%node_elem_idx(nelem,1) ! Interpolate the acceleration term at t+dt (OtherState%acc is at t+dt) to quadrature points - call LAPACK_DGEMM('N','N', 1.0_BDKi, OtherState%acc(:,elem_start:elem_start+p%nodes_per_elem-1), p%Shp, 0.0_BDKi, m%qp%aaa(:,:,nelem), ErrStat, ErrMsg) + ! NOTE: errors from LAPACK_GEMM can only be due to matrix size mismatch, so they can be safely ignored if matrices are correct size + call LAPACK_GEMM('N','N', 1.0_BDKi, OtherState%acc(:,elem_start:elem_start+p%nodes_per_elem-1), p%Shp, 0.0_BDKi, m%qp%aaa(:,:,nelem), ErrStat, ErrMsg) end do From dde75b8a388829395c5b4b44dc23dcf7ed78fc4e Mon Sep 17 00:00:00 2001 From: andrew-platt Date: Mon, 7 Oct 2024 18:32:19 -0600 Subject: [PATCH 24/30] Intel builds: add /heap-arrays:1000 compile flag We have been having issues with stack overflows in FAST.Farm when large wind grids were passed to AWAE. This was eventually tracked down to line 1078 in AWAE.f90 which reads: `m%u_IfW_Low%PositionXYZ = p%Grid_low` The `p%Grid_low` is of unknown size at compile time, but can be extremely large (3x160000 or more). This copy involves a temporary array and would normally be handled on the stack, but could result in an overflow for some models. By setting the `/heap-arrays:1000` any operation resulting in a temporary array of unknown array size at compile time will use the heap for the temprary array, and as will any array known at compile time to be larger than 1000 kB. Testing shows that this fixes issue #2053, and will likely also solve #843 and #2241 See https://www.intel.com/content/www/us/en/docs/fortran-compiler/developer-guide-reference/2024-2/heap-arrays.html for reference. --- vs-build/FAST-farm/FAST-Farm.vfproj | 6 +++--- vs-build/FASTlib/FASTlib.vfproj | 14 +++++++------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/vs-build/FAST-farm/FAST-Farm.vfproj b/vs-build/FAST-farm/FAST-Farm.vfproj index e7c3152f30..5f1d3153bd 100644 --- a/vs-build/FAST-farm/FAST-Farm.vfproj +++ b/vs-build/FAST-farm/FAST-Farm.vfproj @@ -25,7 +25,7 @@ - + @@ -35,7 +35,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/vs-build/FASTlib/FASTlib.vfproj b/vs-build/FASTlib/FASTlib.vfproj index 7a94c7ae68..32c624b94e 100644 --- a/vs-build/FASTlib/FASTlib.vfproj +++ b/vs-build/FASTlib/FASTlib.vfproj @@ -23,7 +23,7 @@ - + @@ -32,7 +32,7 @@ - + @@ -50,7 +50,7 @@ - + @@ -68,7 +68,7 @@ - + @@ -86,7 +86,7 @@ - + @@ -104,7 +104,7 @@ - + @@ -122,7 +122,7 @@ - + From 31d281e444f704d87e1b959efec8b45360c83d57 Mon Sep 17 00:00:00 2001 From: andrew-platt Date: Mon, 7 Oct 2024 18:45:41 -0600 Subject: [PATCH 25/30] Add /heap-arrays:1000 to cmake intel builds --- cmake/OpenfastFortranOptions.cmake | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/cmake/OpenfastFortranOptions.cmake b/cmake/OpenfastFortranOptions.cmake index 0efa0aed55..eba55e8dff 100644 --- a/cmake/OpenfastFortranOptions.cmake +++ b/cmake/OpenfastFortranOptions.cmake @@ -158,7 +158,9 @@ endmacro(set_fast_intel_fortran) # arch # macro(set_fast_intel_fortran_posix) - set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -fpic -fpp") + # Set size where temporary are stored on heap instead of stack + # 1000: size in kB (1 MB) + set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -fpic -fpp -heap-arrays 1000") # debug flags if(CMAKE_BUILD_TYPE MATCHES Debug) @@ -201,7 +203,9 @@ macro(set_fast_intel_fortran_windows) # Turn off specific warnings # - 5199: too many continuation lines # - 5268: 132 column limit - set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} /Qdiag-disable:5199,5268 /fpp") + # Set size where temporary are stored on heap instead of stack + # 1000: size in kB (1 MB) + set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} /Qdiag-disable:5199,5268 /fpp /heap-arrays:1000") # If double precision, make constants double precision if (DOUBLE_PRECISION) From a2e0381bf1abdaf78a856109602a25a5711abb0d Mon Sep 17 00:00:00 2001 From: andrew-platt Date: Mon, 21 Oct 2024 16:28:29 -0600 Subject: [PATCH 26/30] Add changelog for 3.5.4 --- docs/changelogs/v3.5.4.md | 91 +++++++++++++++++++++++++++++++++ docs/source/user/api_change.rst | 6 +++ 2 files changed, 97 insertions(+) create mode 100644 docs/changelogs/v3.5.4.md diff --git a/docs/changelogs/v3.5.4.md b/docs/changelogs/v3.5.4.md new file mode 100644 index 0000000000..2cd5054cab --- /dev/null +++ b/docs/changelogs/v3.5.4.md @@ -0,0 +1,91 @@ +**Feature or improvement description** +Pull request to merge `rc-3.5.4` into `main` and create a tagged release for v3.5.4. + +See the milestone and project pages for additional information + + https://github.com/OpenFAST/openfast/milestone/14 + +Test results, if applicable +See GitHub Actions + +### Release checklist: +- [ ] Update the documentation version in docs/conf.py +- [ ] Update the versions in docs/source/user/api_change.rst +- [ ] Verify readthedocs builds correctly +- [ ] Create a tag in OpenFAST +- [ ] Create a merge commit in r-test and add a corresponding annotated tag +- [ ] Compile executables for Windows builds + - [ ] AeroDyn_Driver_x64.exe + - [ ] AeroDyn_Driver_x64_OpenMP.exe + - [ ] AeroDyn_Inflow_C_Binding_x64.dll + - [ ] AeroDyn_Inflow_C_Binding_x64_OpenMP.dll + - [ ] BeamDyn_Driver_x64.exe + - [ ] DISCON.dll (x64) + - [ ] DISCON_ITIBarge.dll (x64) + - [ ] DISCON_OC3Hywind.dll (x64) + - [ ] DISCON_SC.dll (x64) + - [ ] FAST.Farm_x64.exe + - [ ] FAST.Farm_x64_OMP.exe + - [ ] FAST_SFunc.mexw64 + - [ ] HydroDynDriver_x64.exe + - [ ] HydroDyn_C_Binding_x64.dll + - [ ] IfW_C_Binding_x64.dll + - [ ] InflowWind_Driver_x64.exe + - [ ] InflowWind_Driver_x64_OpenMP.exe + - [ ] MoorDyn_Driver_x64.exe + - [ ] MoorDyn_C_Binding_x64.dll + - [ ] OpenFAST-Simulink_x64.dll + - [ ] openfast_x64.exe + - [ ] Turbsim_x64.exe + +# Changelog + +## Overview + +This release includes performance improvements for BeamDyn (up to 30% speed increase), and a fix for stack overflows with FAST.Farm (Intel compilation). A few other minor pdates are inluded as outlined below. + +Anyone using BeamDyn will want to update to this version. + + +## General + +### Build systems + +#2311 Always build `openfastcpplib` as shared. Use `BUILD_OPENFAST_CPP_DRIVER` to disable `openfastcpp` executable (@deslaughter) + +### Docker builds + + + + +## Solvers + + +### FAST.Farm + +#2452 Fix for some stack overflow issues with FAST.Farm when copying large amounts of wind data (closes #2053) (@andrew-platt) +#2340 Add `!$ OMP critical` around file opening for VTK to prevent file collision (@andrew-platt) + +## Module changes + + +### BeamDyn + +#2399 BeamDyn performance improvements (@deslaughter) + + +### ElastoDyn + +#2321 Backport of #2317: Explicitly initialize `ED` `RtHS` to zero -- corrects issue with inccorect linearization results (@andrew-platt) + + + + +## Input file changes + +No input files change with this release, as this only includes minor bugfixes. + +Full list of changes: https://openfast.readthedocs.io/en/main/source/user/api_change.html + +Full input file sets: https://github.com/OpenFAST/r-test/tree/v3.5.4 (example input files from the regression testing) + diff --git a/docs/source/user/api_change.rst b/docs/source/user/api_change.rst index 07af23f90c..cf16f2fe4c 100644 --- a/docs/source/user/api_change.rst +++ b/docs/source/user/api_change.rst @@ -9,6 +9,12 @@ The changes are tabulated according to the module input file, line number, and f The line number corresponds to the resulting line number after all changes are implemented. Thus, be sure to implement each in order so that subsequent line numbers are correct. +OpenFAST v3.5.3 to OpenFAST v3.5.4 +---------------------------------- + +No input file changes were made. + + OpenFAST v3.5.2 to OpenFAST v3.5.3 ---------------------------------- From 05a16b2672cc1e0b1eb7c7d1f8f68575487583cf Mon Sep 17 00:00:00 2001 From: andrew-platt Date: Mon, 21 Oct 2024 16:43:23 -0600 Subject: [PATCH 27/30] Update version info in conf.py --- docs/conf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/conf.py b/docs/conf.py index 146fb2b413..f1b3d9f221 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -130,7 +130,7 @@ def runDoxygen(sourcfile, doxyfileIn, doxyfileOut): # The short X.Y version. version = u'3.5' # The full version, including alpha/beta/rc tags. -release = u'v3.5.3' +release = u'v3.5.4' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. From ea167509c08e2f559a1458bdf901a618540aaf45 Mon Sep 17 00:00:00 2001 From: andrew-platt Date: Mon, 21 Oct 2024 17:17:37 -0600 Subject: [PATCH 28/30] Correction to changelog v3.5.4.md --- docs/changelogs/v3.5.4.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/docs/changelogs/v3.5.4.md b/docs/changelogs/v3.5.4.md index 2cd5054cab..8862d40a88 100644 --- a/docs/changelogs/v3.5.4.md +++ b/docs/changelogs/v3.5.4.md @@ -42,7 +42,7 @@ See GitHub Actions ## Overview -This release includes performance improvements for BeamDyn (up to 30% speed increase), and a fix for stack overflows with FAST.Farm (Intel compilation). A few other minor pdates are inluded as outlined below. +This release includes performance improvements for BeamDyn (up to 30% speed increase), python file readers and writers from WEIS, and a fix for stack overflows with FAST.Farm (Intel compilation). A few other minor updates are inluded as outlined below. Anyone using BeamDyn will want to update to this version. @@ -52,22 +52,23 @@ Anyone using BeamDyn will want to update to this version. ### Build systems #2311 Always build `openfastcpplib` as shared. Use `BUILD_OPENFAST_CPP_DRIVER` to disable `openfastcpp` executable (@deslaughter) +#2173 Fix crash in `MAP_End` when using Intel's new icx compiler and disable caching in setup-python GH action (@deslaughter) -### Docker builds +### Python file readers/writers +#2188 Add WEIS file readers and writers (@cortadocodes and @mayankchetan) ## Solvers - ### FAST.Farm #2452 Fix for some stack overflow issues with FAST.Farm when copying large amounts of wind data (closes #2053) (@andrew-platt) #2340 Add `!$ OMP critical` around file opening for VTK to prevent file collision (@andrew-platt) -## Module changes +## Module changes ### BeamDyn From efad7a31e76579f77f44768eb9d5195032a408af Mon Sep 17 00:00:00 2001 From: andrew-platt Date: Thu, 24 Oct 2024 15:13:58 -0600 Subject: [PATCH 29/30] Missing PRs and Typo in v3.5.4.md Thanks to @pablo-benito for noticing the typo --- docs/changelogs/v3.5.4.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/docs/changelogs/v3.5.4.md b/docs/changelogs/v3.5.4.md index 8862d40a88..e099bfab56 100644 --- a/docs/changelogs/v3.5.4.md +++ b/docs/changelogs/v3.5.4.md @@ -42,7 +42,7 @@ See GitHub Actions ## Overview -This release includes performance improvements for BeamDyn (up to 30% speed increase), python file readers and writers from WEIS, and a fix for stack overflows with FAST.Farm (Intel compilation). A few other minor updates are inluded as outlined below. +This release includes performance improvements for BeamDyn (up to 30% speed increase), python file readers and writers from WEIS, and a fix for stack overflows with FAST.Farm (Intel compilation). A few other minor updates are included as outlined below. Anyone using BeamDyn will want to update to this version. @@ -80,7 +80,11 @@ Anyone using BeamDyn will want to update to this version. #2321 Backport of #2317: Explicitly initialize `ED` `RtHS` to zero -- corrects issue with inccorect linearization results (@andrew-platt) +### HydroDyn +#2397 HD bug fix: prevent array index out-of-bound error in `HDOut_MapOutputs` when more than 9 potential-flow bodies are present (@luwang00) +### NWTC-Library +#2389 FileInfoType: increase line length allowed (@andrew-platt) ## Input file changes From 8136967120f9fc09ded62b5feb3cb89f64cf4fe7 Mon Sep 17 00:00:00 2001 From: andrew-platt Date: Mon, 28 Oct 2024 15:25:22 -0600 Subject: [PATCH 30/30] Update r-test pointer for 3.5.4 --- reg_tests/r-test | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reg_tests/r-test b/reg_tests/r-test index a8ddb774a0..f282c79af7 160000 --- a/reg_tests/r-test +++ b/reg_tests/r-test @@ -1 +1 @@ -Subproject commit a8ddb774a0724e0880e95f32b7a9db628aaaf2a8 +Subproject commit f282c79af7152d20ec7becb7a7c9edbf65cca71c