m_alm Module

Actuator Line Model (ALM) turbine forcing (iturbine = 1).

Ported from Incompact3d's actuator line model (G. Deskos, 2015-2017; acl_*.f90, airfoils.f90). Each blade (and the optional tower) is a line of actuator elements; the blade-element loads computed from the airfoil polars (m_alm_turbine, m_alm_element) are projected back onto the flow as a momentum source.

Once per time step, on the first substage: 1. the fluid velocity at every element centre is interpolated trilinearly from the grid, 2. the element forces follow from the polars, 3. they are smeared onto the grid with an isotropic Gaussian kernel, truncated at , 4. the rotors are advanced to the next time step. The same sources are projected onto the momentum RHS at every substage of the step, as Incompact3d adds its force field. The sampling and the projection run on the backend; the blade bookkeeping is replicated on every rank.

Turbines are described by Incompact3d .turb files (see m_alm_turbine). The standalone actuator lines of Incompact3d (NActuatorlines) are not ported. Only uniform grids are supported. Kernel truncation radius in units of epsilon (Incompact3d's dist2_max = 100 epsilon^2)


Uses

  • module~~m_alm~~UsesGraph module~m_alm m_alm m_mpi m_mpi module~m_alm->m_mpi module~m_allocator m_allocator module~m_alm->module~m_allocator module~m_alm_controller m_alm_controller module~m_alm->module~m_alm_controller module~m_alm_element m_alm_element module~m_alm->module~m_alm_element module~m_alm_output m_alm_output module~m_alm->module~m_alm_output module~m_alm_turbine m_alm_turbine module~m_alm->module~m_alm_turbine module~m_base_backend m_base_backend module~m_alm->module~m_base_backend module~m_common m_common module~m_alm->module~m_common module~m_field m_field module~m_alm->module~m_field module~m_io_session m_io_session module~m_alm->module~m_io_session module~m_logger m_logger module~m_alm->module~m_logger module~m_mesh m_mesh module~m_alm->module~m_mesh module~m_scalar_series m_scalar_series module~m_alm->module~m_scalar_series module~m_turbine_model m_turbine_model module~m_alm->module~m_turbine_model module~m_allocator->module~m_common module~m_allocator->module~m_field module~m_alm_controller->module~m_common module~m_alm_controller->module~m_logger module~m_alm_element->module~m_common module~m_alm_airfoil m_alm_airfoil module~m_alm_element->module~m_alm_airfoil module~m_alm_output->module~m_alm_element module~m_alm_output->module~m_common module~m_alm_output->module~m_logger module~m_alm_turbine->module~m_alm_controller module~m_alm_turbine->module~m_alm_element module~m_alm_turbine->module~m_common module~m_alm_turbine->module~m_logger module~m_alm_turbine->module~m_alm_airfoil module~m_base_backend->m_mpi module~m_base_backend->module~m_allocator module~m_base_backend->module~m_common module~m_base_backend->module~m_field module~m_base_backend->module~m_logger module~m_base_backend->module~m_mesh iso_c_binding iso_c_binding module~m_base_backend->iso_c_binding module~m_poisson_fft m_poisson_fft module~m_base_backend->module~m_poisson_fft module~m_tdsops m_tdsops module~m_base_backend->module~m_tdsops module~m_common->m_mpi module~m_common->module~m_logger module~m_field->module~m_common module~m_field->iso_c_binding module~m_io_session->module~m_base_backend module~m_io_session->module~m_common module~m_io_session->module~m_field module~m_io_session->module~m_logger module~m_io_backend m_io_backend module~m_io_session->module~m_io_backend module~m_io_base m_io_base module~m_io_session->module~m_io_base module~m_logger->m_mpi iso_fortran_env iso_fortran_env module~m_logger->iso_fortran_env module~m_mesh->m_mpi module~m_mesh->module~m_common module~m_mesh->module~m_field module~m_mesh->module~m_logger module~m_mesh_content m_mesh_content module~m_mesh->module~m_mesh_content module~m_scalar_series->module~m_common module~m_scalar_series->module~m_logger module~m_turbine_model->module~m_allocator module~m_turbine_model->module~m_base_backend module~m_turbine_model->module~m_common module~m_turbine_model->module~m_field module~m_turbine_model->module~m_mesh module~m_checkpoint_state m_checkpoint_state module~m_turbine_model->module~m_checkpoint_state module~m_alm_airfoil->module~m_common module~m_alm_airfoil->module~m_logger module~m_checkpoint_state->module~m_io_session module~m_io_backend->module~m_base_backend module~m_io_backend->module~m_common module~m_io_backend->module~m_field module~m_io_backend->module~m_logger module~m_io_backend->module~m_io_base module~m_io_base->module~m_base_backend module~m_io_base->module~m_common module~m_io_base->module~m_field module~m_mesh_content->module~m_common module~m_mesh_content->module~m_logger module~m_poisson_fft->module~m_common module~m_poisson_fft->module~m_field module~m_poisson_fft->module~m_logger module~m_poisson_fft->module~m_mesh module~m_poisson_fft->module~m_tdsops module~m_tdsops->module~m_common module~m_tdsops->module~m_logger

Used by

  • module~~m_alm~~UsedByGraph module~m_alm m_alm module~m_turbine_setup m_turbine_setup module~m_turbine_setup->module~m_alm module~m_case_abl m_case_abl module~m_case_abl->module~m_turbine_setup module~m_case_wind_turbine m_case_wind_turbine module~m_case_wind_turbine->module~m_turbine_setup module~m_case_factory m_case_factory module~m_case_factory->module~m_case_abl module~m_case_factory->module~m_case_wind_turbine module~m_memcheck_build m_memcheck_build module~m_memcheck_build->module~m_case_abl module~m_memcheck_build->module~m_case_factory program~x3d2_memcheck x3d2_memcheck program~x3d2_memcheck->module~m_memcheck_build program~xcompact xcompact program~xcompact->module~m_case_factory

Derived Types

type, public, extends(turbine_model_t) ::  alm_t

Components

Type Visibility Attributes Name Initial
character(len=256), public, allocatable :: turbine_files(:)
real(kind=dp), public :: rho_air = 1._dp
real(kind=dp), public :: eps_factor = 2._dp

kernel width in cell sizes

real(kind=dp), public :: nu = 0._dp

kinematic viscosity (element Re)

real(kind=dp), public :: u_inflow = 0._dp

initial reference speed (NREL mode)

integer, public :: stats_start = 1
integer, public :: stats_freq = 1
integer, public :: n_turb = 0
type(turbine_t), public, allocatable :: turbine(:)
integer, public :: n_src = 0

actuator points over all turbines

integer, public :: n_tower_elem = 0
real(kind=dp), public :: eps
real(kind=dp), public :: r_cut
real(kind=dp), public :: prefactor
real(kind=dp), public :: dt
real(kind=dp), public :: ctime = 0._dp

rotor time, as Incompact3d's ctime

real(kind=dp), public :: last_update_time = -huge(1._dp)
integer, public :: current_iter = 0
logical, public :: new_step = .true.
integer, public :: sample_count = 0
real(kind=dp), public, allocatable :: thrust_mean(:)

Sources of the current step: positions and acceleration coefficients

real(kind=dp), public, allocatable :: torque_mean(:)

Sources of the current step: positions and acceleration coefficients

real(kind=dp), public, allocatable :: power_mean(:)

Sources of the current step: positions and acceleration coefficients

real(kind=dp), public, allocatable :: src_points(:,:)
real(kind=dp), public, allocatable :: src_coeffs(:,:)
type(scalar_series_t), public, allocatable :: perf(:)
class(base_backend_t), public, pointer :: backend => null()
type(mesh_t), public, pointer :: mesh => null()
type(allocator_t), public, pointer :: host_allocator => null()

Type-Bound Procedures

procedure, public :: init => init_alm
procedure, public :: update => update_alm
procedure, public :: project_forces => project_forces_alm
procedure, public :: write_output => write_output_alm
procedure, public :: setup_output => setup_output_alm
procedure, public :: write_checkpoint => write_checkpoint_alm
procedure, public :: read_checkpoint => read_checkpoint_alm
procedure, public :: finalise => finalise_alm
procedure, public :: gather_points
procedure, public :: sample_velocity