Case for wind-turbine simulations (the two_turbines setup):
uniform inflow and convective outflow in x, periodic in y and z.
The case owns a polymorphic turbine forcing model (turbine_model_t) and is
the only place the iturbine switch appears (at allocation time). It drives
the model from its forcings()/postprocess() hooks.
The inflow/outflow boundary treatment mirrors m_case_cylinder. BCs are
dirichlet/periodic/periodic for the same reason cylinder uses them: the FFT
Poisson solver requires z periodic and only supports a single rank for
non-periodic directions. The two_turbines case uses free-slip walls
in y and z (wind-tunnel walls), which the FFT solver cannot currently do.
module~~m_case_wind_turbine~~UsesGraph
module~m_case_wind_turbine
m_case_wind_turbine
m_mpi
m_mpi
module~m_case_wind_turbine->m_mpi
module~m_adm
m_adm
module~m_case_wind_turbine->module~m_adm
module~m_allocator
m_allocator
module~m_case_wind_turbine->module~m_allocator
module~m_base_backend
m_base_backend
module~m_case_wind_turbine->module~m_base_backend
module~m_base_case
m_base_case
module~m_case_wind_turbine->module~m_base_case
module~m_common
m_common
module~m_case_wind_turbine->module~m_common
module~m_config
m_config
module~m_case_wind_turbine->module~m_config
module~m_field
m_field
module~m_case_wind_turbine->module~m_field
module~m_logger
m_logger
module~m_case_wind_turbine->module~m_logger
module~m_mesh
m_mesh
module~m_case_wind_turbine->module~m_mesh
module~m_solver
m_solver
module~m_case_wind_turbine->module~m_solver
module~m_turbine_dummy
m_turbine_dummy
module~m_case_wind_turbine->module~m_turbine_dummy
module~m_turbine_model
m_turbine_model
module~m_case_wind_turbine->module~m_turbine_model
module~m_adm->m_mpi
module~m_adm->module~m_allocator
module~m_adm->module~m_base_backend
module~m_adm->module~m_common
module~m_adm->module~m_field
module~m_adm->module~m_logger
module~m_adm->module~m_mesh
module~m_adm->module~m_turbine_model
module~m_io_session
m_io_session
module~m_adm->module~m_io_session
module~m_scalar_series
m_scalar_series
module~m_adm->module~m_scalar_series
module~m_allocator->module~m_common
module~m_allocator->module~m_field
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_base_case->m_mpi
module~m_base_case->module~m_allocator
module~m_base_case->module~m_base_backend
module~m_base_case->module~m_common
module~m_base_case->module~m_config
module~m_base_case->module~m_field
module~m_base_case->module~m_logger
module~m_base_case->module~m_mesh
module~m_base_case->module~m_solver
module~m_io_manager
m_io_manager
module~m_base_case->module~m_io_manager
module~m_monitoring
m_monitoring
module~m_base_case->module~m_monitoring
module~m_postprocess
m_postprocess
module~m_base_case->module~m_postprocess
module~m_common->m_mpi
module~m_common->module~m_logger
module~m_config->module~m_common
module~m_config->module~m_logger
module~m_field->module~m_common
module~m_field->iso_c_binding
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_solver->module~m_allocator
module~m_solver->module~m_base_backend
module~m_solver->module~m_common
module~m_solver->module~m_config
module~m_solver->module~m_field
module~m_solver->module~m_logger
module~m_solver->module~m_mesh
module~m_ibm
m_ibm
module~m_solver->module~m_ibm
module~m_les
m_les
module~m_solver->module~m_les
module~m_solver->module~m_tdsops
module~m_tdsops_setup
m_tdsops_setup
module~m_solver->module~m_tdsops_setup
module~m_time_integrator
m_time_integrator
module~m_solver->module~m_time_integrator
module~m_vector_calculus
m_vector_calculus
module~m_solver->module~m_vector_calculus
module~m_turbine_dummy->module~m_allocator
module~m_turbine_dummy->module~m_base_backend
module~m_turbine_dummy->module~m_common
module~m_turbine_dummy->module~m_field
module~m_turbine_dummy->module~m_mesh
module~m_turbine_dummy->module~m_turbine_model
module~m_turbine_dummy->module~m_io_session
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_checkpoint_state->module~m_io_session
module~m_ibm->m_mpi
module~m_ibm->module~m_allocator
module~m_ibm->module~m_base_backend
module~m_ibm->module~m_common
module~m_ibm->module~m_field
module~m_ibm->module~m_logger
module~m_ibm->module~m_mesh
module~m_ibm->module~m_io_session
module~m_io_manager->m_mpi
module~m_io_manager->module~m_solver
module~m_io_manager->module~m_checkpoint_state
module~m_checkpoint_manager
m_checkpoint_manager
module~m_io_manager->module~m_checkpoint_manager
module~m_snapshot_manager
m_snapshot_manager
module~m_io_manager->module~m_snapshot_manager
module~m_stats
m_stats
module~m_io_manager->module~m_stats
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~2
m_io_backend
module~m_io_session->module~m_io_backend~2
module~m_io_base
m_io_base
module~m_io_session->module~m_io_base
module~m_les->module~m_base_backend
module~m_les->module~m_common
module~m_les->module~m_config
module~m_les->module~m_field
module~m_les->module~m_logger
module~m_les->module~m_mesh
module~m_les->module~m_tdsops
module~m_mesh_content->module~m_common
module~m_mesh_content->module~m_logger
module~m_monitoring->module~m_common
module~m_monitoring->module~m_field
module~m_monitoring->module~m_logger
module~m_monitoring->module~m_solver
module~m_monitoring->module~m_scalar_series
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_postprocess->module~m_common
module~m_postprocess->module~m_field
module~m_postprocess->module~m_logger
module~m_postprocess->module~m_solver
module~m_scalar_series->module~m_common
module~m_scalar_series->module~m_logger
module~m_tdsops->module~m_common
module~m_tdsops->module~m_logger
module~m_tdsops_setup->module~m_base_backend
module~m_tdsops_setup->module~m_common
module~m_tdsops_setup->module~m_logger
module~m_tdsops_setup->module~m_mesh
module~m_tdsops_setup->module~m_tdsops
module~m_time_integrator->module~m_allocator
module~m_time_integrator->module~m_base_backend
module~m_time_integrator->module~m_common
module~m_time_integrator->module~m_field
module~m_time_integrator->module~m_logger
module~m_vector_calculus->module~m_allocator
module~m_vector_calculus->module~m_base_backend
module~m_vector_calculus->module~m_common
module~m_vector_calculus->module~m_field
module~m_vector_calculus->module~m_logger
module~m_vector_calculus->module~m_tdsops
module~m_checkpoint_manager->m_mpi
module~m_checkpoint_manager->module~m_common
module~m_checkpoint_manager->module~m_config
module~m_checkpoint_manager->module~m_field
module~m_checkpoint_manager->module~m_logger
module~m_checkpoint_manager->module~m_solver
module~m_checkpoint_manager->module~m_checkpoint_state
module~m_checkpoint_manager->module~m_io_session
module~m_checkpoint_manager->module~m_stats
module~m_io_field_utils
m_io_field_utils
module~m_checkpoint_manager->module~m_io_field_utils
module~m_io_backend~2->m_mpi
module~m_io_backend~2->module~m_base_backend
module~m_io_backend~2->module~m_common
module~m_io_backend~2->module~m_field
module~m_io_backend~2->module~m_logger
module~m_io_backend~2->iso_c_binding
module~m_io_backend~2->iso_fortran_env
module~m_io_backend~2->module~m_io_base
adios2
adios2
module~m_io_backend~2->adios2
cudafor
cudafor
module~m_io_backend~2->cudafor
module~m_nvtx
m_nvtx
module~m_io_backend~2->module~m_nvtx
module~m_io_base->module~m_base_backend
module~m_io_base->module~m_common
module~m_io_base->module~m_field
module~m_snapshot_manager->m_mpi
module~m_snapshot_manager->module~m_common
module~m_snapshot_manager->module~m_config
module~m_snapshot_manager->module~m_field
module~m_snapshot_manager->module~m_logger
module~m_snapshot_manager->module~m_solver
module~m_snapshot_manager->module~m_io_session
module~m_snapshot_manager->module~m_io_field_utils
module~m_stats->module~m_common
module~m_stats->module~m_config
module~m_stats->module~m_field
module~m_stats->module~m_logger
module~m_stats->module~m_solver
module~m_stats->module~m_io_session
module~m_io_field_utils->module~m_common
module~m_io_field_utils->module~m_field
module~m_io_field_utils->module~m_logger
module~m_io_field_utils->module~m_solver
module~m_io_field_utils->module~m_io_base
module~m_io_field_utils->module~m_nvtx
module~m_nvtx->iso_c_binding
Nodes of different colours represent the following:
Graph Key
Module
Module
Submodule
Submodule
Subroutine
Subroutine
Function
Function
Program
Program
This Page's Entity
This Page's Entity
Solid arrows point from a submodule to the (sub)module which it is
descended from. Dashed arrows point from a module or program unit to
modules which it uses.
Where possible, edges connecting nodes are
given different colours to make them easier to distinguish in
large graphs.
module~~m_case_wind_turbine~~UsedByGraph
module~m_case_wind_turbine
m_case_wind_turbine
program~xcompact
xcompact
program~xcompact->module~m_case_wind_turbine
Nodes of different colours represent the following:
Graph Key
Module
Module
Submodule
Submodule
Subroutine
Subroutine
Function
Function
Program
Program
This Page's Entity
This Page's Entity
Solid arrows point from a submodule to the (sub)module which it is
descended from. Dashed arrows point from a module or program unit to
modules which it uses.
Where possible, edges connecting nodes are
given different colours to make them easier to distinguish in
large graphs.
Interfaces
public function case_wind_turbine_init (backend, mesh, host_allocator) result(flow_case)
Arguments
Type
Intent Optional Attributes
Name
class(base_backend_t ),
intent(inout),
target
::
backend
type(mesh_t ),
intent(inout),
target
::
mesh
type(allocator_t ),
intent(inout),
target
::
host_allocator
Derived Types
Components
Type
Visibility Attributes
Name
Initial
class(solver_t ),
public,
allocatable
::
solver
type(io_manager_t ),
public
::
io_mgr
type(monitoring_t ),
public
::
monitoring
class(field_t ),
public,
pointer
::
bc_start_u_x
=>
null()
class(field_t ),
public,
pointer
::
bc_start_v_x
=>
null()
class(field_t ),
public,
pointer
::
bc_start_w_x
=>
null()
class(field_t ),
public,
pointer
::
bc_end_u_x
=>
null()
class(field_t ),
public,
pointer
::
bc_end_v_x
=>
null()
class(field_t ),
public,
pointer
::
bc_end_w_x
=>
null()
class(field_t ),
public,
pointer
::
bc_start_u_y
=>
null()
class(field_t ),
public,
pointer
::
bc_start_v_y
=>
null()
class(field_t ),
public,
pointer
::
bc_start_w_y
=>
null()
class(field_t ),
public,
pointer
::
bc_end_u_y
=>
null()
class(field_t ),
public,
pointer
::
bc_end_v_y
=>
null()
class(field_t ),
public,
pointer
::
bc_end_w_y
=>
null()
type(wind_turbine_config_t ),
public
::
wt_cfg
class(turbine_model_t ),
public,
pointer
::
turbine
=>
null()
Constructor
Type-Bound Procedures
procedure, public ::
case_init
procedure, public ::
case_finalise
procedure, public ::
set_init
procedure, public ::
run
procedure, public ::
define_BC => define_BC_wind_turbine
procedure, public ::
initial_conditions => initial_conditions_wind_turbine
procedure, public ::
forcings => forcings_wind_turbine
procedure, public ::
apply_BC => apply_BC_wind_turbine
procedure, public ::
postprocess => postprocess_wind_turbine
procedure, public ::
finalise_case_specific => finalise_wind_turbine
procedure, public ::
compute_outflow_params
Functions
Arguments
Type
Intent Optional Attributes
Name
class(base_backend_t ),
intent(inout),
target
::
backend
type(mesh_t ),
intent(inout),
target
::
mesh
type(allocator_t ),
intent(inout),
target
::
host_allocator
Subroutines
Deterministic seeding of the intrinsic RNG, distinct for every
(rank, start iteration) pair. A fresh run starts at iter = 0.
Arguments
Type
Intent Optional Attributes
Name
integer,
intent(in)
::
nrank
integer,
intent(in)
::
nproc
integer,
intent(in)
::
iter
Arguments
Type
Intent Optional Attributes
Name
class(case_wind_turbine_t )
::
self
real(kind=dp),
intent(out)
::
out_vel
Boundary Conditions hook (called per substep before transeq).
Builds the inlet Dirichlet profile only; outflow parameters are
computed in apply_BC from the post-integration velocity.
u = bc_start_u + inlet_noise(1) * um * (2r - 1)
v = bc_start_v + inlet_noise(2) * um * (2r - 1)
w = bc_start_w + inlet_noise(3) * um * (2r - 1)
Arguments
Pre-correction (called per substep after the integrator step):
enforce the inflow Dirichlet and convective outflow BCs, then apply
an exact uniform mass correction to the outlet, following
Incompact3d's pre_correc.
Read more…
Arguments
Arguments
Type
Intent Optional Attributes
Name
class(case_wind_turbine_t )
::
self
class(field_t ),
intent(inout)
::
du
class(field_t ),
intent(inout)
::
dv
class(field_t ),
intent(inout)
::
dw
integer,
intent(in)
::
iter
Arguments
Type
Intent Optional Attributes
Name
class(case_wind_turbine_t )
::
self
integer,
intent(in)
::
iter
real(kind=dp),
intent(in)
::
t