# spawnwind
# Copyright (C) 2018-2019, Simmovation Ltd.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
"""Defines the :mod:`mutliwindcalc` plugin for nrel
"""
from os import path
from luigi import configuration
from spawn.util.validation import validate_file, validate_dir
from .simulation_input import TurbsimInput
from .fast_input import Fast7Input, Fast8Input
from .turbsim_spawner import TurbsimSpawner
from .fast_spawner import FastSimulationSpawner
from .tasks import WindGenerationTask, FastSimulationTask
[docs]def create_spawner(
turbsim_exe, fast_exe, turbsim_base_file, fast_base_file, fast_version,
runner_type, turbsim_working_dir, fast_working_dir, outdir, prereq_outdir
):
"""
:param turbsim_exe: Location of TurbSim executable
:param fast_exe: Location of FAST executable
:param turbsim_base_file: Baseline TurbSim input file (typically `TurbSim.inp`)
from which wind file generation tasks are spawned
:param fast_base_file: FAST input file (typically `.fst`) to which all parameter
editions are made and from which simulations are spawned
:param fast_version: Major version of FAST {'v7', 'v8'}
:param runner_type: default is `process`
:param turbsim_working_dir: Directory in which TurbSim wind generation tasks are executed
:param fast_working_dir: Directory in which FAST simulations are executed.
Note that the discon.dll must be in this directory
:param outdir: Root output directory for spawning and thus where simulation outputs are located
:param prereq_outdir: Root output directory for prerequisite tasks (i.e. wind file generation)
:returns: `FastSimulationSpawner` object
"""
validate_file(turbsim_exe, 'turbsim_exe')
validate_file(fast_exe, 'fast_exe')
validate_file(turbsim_base_file, 'turbsim_base_file')
validate_file(fast_base_file, 'fast_base_file')
validate_dir(turbsim_working_dir, 'turbsim_working_dir')
validate_dir(fast_working_dir, 'fast_working_dir')
luigi_config = configuration.get_config()
luigi_config.set(WindGenerationTask.__name__, '_exe_path', turbsim_exe)
luigi_config.set(WindGenerationTask.__name__, '_runner_type', runner_type)
luigi_config.set(WindGenerationTask.__name__, '_working_dir', turbsim_working_dir)
luigi_config.set(FastSimulationTask.__name__, '_exe_path', fast_exe)
luigi_config.set(FastSimulationTask.__name__, '_runner_type', runner_type)
luigi_config.set(FastSimulationTask.__name__, '_working_dir', fast_working_dir)
wind_spawner = TurbsimSpawner(TurbsimInput.from_file(turbsim_base_file))
fast_input_cls = {
'v7': Fast7Input,
'v8': Fast8Input
}
return FastSimulationSpawner(fast_input_cls[fast_version].from_file(fast_base_file),
wind_spawner,
path.join(outdir, prereq_outdir))
#pylint: disable=invalid-name
[docs]def NTM(Iref, wind_speed):
"""
Additional evaluator - evaluates turbulence intensity according to IEC edition 3 normal turbulence model
:param Iref: Reference turbulence intensity in percent according to turbine class
:param wind_speed: 10-minute mean wind speed in m/s
:returns: Turbulence intensity in percent
"""
return Iref * (0.75 * wind_speed + 5.6) / wind_speed
#pylint: disable=invalid-name
[docs]def ETM(Iref, Vmean, wind_speed):
"""
Additional evaluator - evaluates turbulence intensity according to IEC edition 3 extreme turbulence model
:param Iref: Reference turbulence intensity in percent according to turbine class
:param Vmean: Annual mean wind speed according to turbine class
:param wind_speed: 10-minute mean wind speed in m/s
:returns: Turbulence intensity in percent
"""
#pylint: disable=invalid-name
c = 2.0
return c * Iref * (0.072 * (Vmean / c + 3.0) * (wind_speed / c - 4) + 10.0) / wind_speed