turbine_setup.f90 Source File


This file depends on

sourcefile~~turbine_setup.f90~~EfferentGraph sourcefile~turbine_setup.f90 turbine_setup.f90 sourcefile~adm.f90 adm.f90 sourcefile~turbine_setup.f90->sourcefile~adm.f90 sourcefile~alm.f90 alm.f90 sourcefile~turbine_setup.f90->sourcefile~alm.f90 sourcefile~config.f90 config.f90 sourcefile~turbine_setup.f90->sourcefile~config.f90 sourcefile~io_manager.f90 io_manager.f90 sourcefile~turbine_setup.f90->sourcefile~io_manager.f90 sourcefile~logger.f90 logger.f90 sourcefile~turbine_setup.f90->sourcefile~logger.f90 sourcefile~solver.f90 solver.f90 sourcefile~turbine_setup.f90->sourcefile~solver.f90 sourcefile~turbine_dummy.f90 turbine_dummy.f90 sourcefile~turbine_setup.f90->sourcefile~turbine_dummy.f90 sourcefile~turbine_model.f90 turbine_model.f90 sourcefile~turbine_setup.f90->sourcefile~turbine_model.f90 sourcefile~adm.f90->sourcefile~logger.f90 sourcefile~adm.f90->sourcefile~turbine_model.f90 sourcefile~allocator.f90~3 allocator.f90 sourcefile~adm.f90->sourcefile~allocator.f90~3 sourcefile~backend.f90~4 backend.f90 sourcefile~adm.f90->sourcefile~backend.f90~4 sourcefile~common.f90~4 common.f90 sourcefile~adm.f90->sourcefile~common.f90~4 sourcefile~field.f90 field.f90 sourcefile~adm.f90->sourcefile~field.f90 sourcefile~io_session.f90 io_session.f90 sourcefile~adm.f90->sourcefile~io_session.f90 sourcefile~mesh.f90 mesh.f90 sourcefile~adm.f90->sourcefile~mesh.f90 sourcefile~scalar_series.f90 scalar_series.f90 sourcefile~adm.f90->sourcefile~scalar_series.f90 sourcefile~alm.f90->sourcefile~logger.f90 sourcefile~alm.f90->sourcefile~turbine_model.f90 sourcefile~alm.f90->sourcefile~allocator.f90~3 sourcefile~alm_controller.f90 alm_controller.f90 sourcefile~alm.f90->sourcefile~alm_controller.f90 sourcefile~alm_element.f90 alm_element.f90 sourcefile~alm.f90->sourcefile~alm_element.f90 sourcefile~alm_output.f90 alm_output.f90 sourcefile~alm.f90->sourcefile~alm_output.f90 sourcefile~alm_turbine.f90 alm_turbine.f90 sourcefile~alm.f90->sourcefile~alm_turbine.f90 sourcefile~alm.f90->sourcefile~backend.f90~4 sourcefile~alm.f90->sourcefile~common.f90~4 sourcefile~alm.f90->sourcefile~field.f90 sourcefile~alm.f90->sourcefile~io_session.f90 sourcefile~alm.f90->sourcefile~mesh.f90 sourcefile~alm.f90->sourcefile~scalar_series.f90 sourcefile~config.f90->sourcefile~logger.f90 sourcefile~config.f90->sourcefile~common.f90~4 sourcefile~io_manager.f90->sourcefile~solver.f90 sourcefile~checkpoint_manager.f90 checkpoint_manager.f90 sourcefile~io_manager.f90->sourcefile~checkpoint_manager.f90 sourcefile~checkpoint_state.f90 checkpoint_state.f90 sourcefile~io_manager.f90->sourcefile~checkpoint_state.f90 sourcefile~snapshot_manager.f90 snapshot_manager.f90 sourcefile~io_manager.f90->sourcefile~snapshot_manager.f90 sourcefile~stats.f90 stats.f90 sourcefile~io_manager.f90->sourcefile~stats.f90 sourcefile~solver.f90->sourcefile~config.f90 sourcefile~solver.f90->sourcefile~logger.f90 sourcefile~solver.f90->sourcefile~allocator.f90~3 sourcefile~solver.f90->sourcefile~backend.f90~4 sourcefile~solver.f90->sourcefile~common.f90~4 sourcefile~solver.f90->sourcefile~field.f90 sourcefile~ibm.f90 ibm.f90 sourcefile~solver.f90->sourcefile~ibm.f90 sourcefile~les.f90 les.f90 sourcefile~solver.f90->sourcefile~les.f90 sourcefile~solver.f90->sourcefile~mesh.f90 sourcefile~tdsops.f90 tdsops.f90 sourcefile~solver.f90->sourcefile~tdsops.f90 sourcefile~tdsops_setup.f90 tdsops_setup.f90 sourcefile~solver.f90->sourcefile~tdsops_setup.f90 sourcefile~time_integrator.f90 time_integrator.f90 sourcefile~solver.f90->sourcefile~time_integrator.f90 sourcefile~vector_calculus.f90 vector_calculus.f90 sourcefile~solver.f90->sourcefile~vector_calculus.f90 sourcefile~turbine_dummy.f90->sourcefile~turbine_model.f90 sourcefile~turbine_dummy.f90->sourcefile~allocator.f90~3 sourcefile~turbine_dummy.f90->sourcefile~backend.f90~4 sourcefile~turbine_dummy.f90->sourcefile~common.f90~4 sourcefile~turbine_dummy.f90->sourcefile~field.f90 sourcefile~turbine_dummy.f90->sourcefile~io_session.f90 sourcefile~turbine_dummy.f90->sourcefile~mesh.f90 sourcefile~turbine_model.f90->sourcefile~allocator.f90~3 sourcefile~turbine_model.f90->sourcefile~backend.f90~4 sourcefile~turbine_model.f90->sourcefile~checkpoint_state.f90 sourcefile~turbine_model.f90->sourcefile~common.f90~4 sourcefile~turbine_model.f90->sourcefile~field.f90 sourcefile~turbine_model.f90->sourcefile~mesh.f90 sourcefile~allocator.f90~3->sourcefile~common.f90~4 sourcefile~allocator.f90~3->sourcefile~field.f90 sourcefile~alm_controller.f90->sourcefile~logger.f90 sourcefile~alm_controller.f90->sourcefile~common.f90~4 sourcefile~alm_element.f90->sourcefile~logger.f90 sourcefile~alm_element.f90->sourcefile~common.f90~4 sourcefile~alm_airfoil.f90 alm_airfoil.f90 sourcefile~alm_element.f90->sourcefile~alm_airfoil.f90 sourcefile~alm_output.f90->sourcefile~logger.f90 sourcefile~alm_output.f90->sourcefile~alm_element.f90 sourcefile~alm_output.f90->sourcefile~common.f90~4 sourcefile~alm_turbine.f90->sourcefile~logger.f90 sourcefile~alm_turbine.f90->sourcefile~alm_controller.f90 sourcefile~alm_turbine.f90->sourcefile~alm_element.f90 sourcefile~alm_turbine.f90->sourcefile~common.f90~4 sourcefile~alm_turbine.f90->sourcefile~alm_airfoil.f90 sourcefile~backend.f90~4->sourcefile~logger.f90 sourcefile~backend.f90~4->sourcefile~allocator.f90~3 sourcefile~backend.f90~4->sourcefile~common.f90~4 sourcefile~backend.f90~4->sourcefile~field.f90 sourcefile~backend.f90~4->sourcefile~mesh.f90 sourcefile~backend.f90~4->sourcefile~tdsops.f90 sourcefile~poisson_fft.f90~2 poisson_fft.f90 sourcefile~backend.f90~4->sourcefile~poisson_fft.f90~2 sourcefile~checkpoint_manager.f90->sourcefile~config.f90 sourcefile~checkpoint_manager.f90->sourcefile~logger.f90 sourcefile~checkpoint_manager.f90->sourcefile~solver.f90 sourcefile~checkpoint_manager.f90->sourcefile~checkpoint_state.f90 sourcefile~checkpoint_manager.f90->sourcefile~common.f90~4 sourcefile~checkpoint_manager.f90->sourcefile~field.f90 sourcefile~checkpoint_manager.f90->sourcefile~io_session.f90 sourcefile~checkpoint_manager.f90->sourcefile~stats.f90 sourcefile~io.f90 io.f90 sourcefile~checkpoint_manager.f90->sourcefile~io.f90 sourcefile~io_field_utils.f90 io_field_utils.f90 sourcefile~checkpoint_manager.f90->sourcefile~io_field_utils.f90 sourcefile~checkpoint_state.f90->sourcefile~io_session.f90 sourcefile~common.f90~4->sourcefile~logger.f90 sourcefile~field.f90->sourcefile~common.f90~4 sourcefile~ibm.f90->sourcefile~logger.f90 sourcefile~ibm.f90->sourcefile~allocator.f90~3 sourcefile~ibm.f90->sourcefile~backend.f90~4 sourcefile~ibm.f90->sourcefile~common.f90~4 sourcefile~ibm.f90->sourcefile~field.f90 sourcefile~ibm.f90->sourcefile~io_session.f90 sourcefile~ibm.f90->sourcefile~mesh.f90 sourcefile~io_session.f90->sourcefile~logger.f90 sourcefile~io_session.f90->sourcefile~backend.f90~4 sourcefile~io_session.f90->sourcefile~common.f90~4 sourcefile~io_session.f90->sourcefile~field.f90 sourcefile~io_session.f90->sourcefile~io.f90 sourcefile~io_base.f90 io_base.f90 sourcefile~io_session.f90->sourcefile~io_base.f90 sourcefile~les.f90->sourcefile~config.f90 sourcefile~les.f90->sourcefile~logger.f90 sourcefile~les.f90->sourcefile~backend.f90~4 sourcefile~les.f90->sourcefile~common.f90~4 sourcefile~les.f90->sourcefile~field.f90 sourcefile~les.f90->sourcefile~mesh.f90 sourcefile~les.f90->sourcefile~tdsops.f90 sourcefile~mesh.f90->sourcefile~logger.f90 sourcefile~mesh.f90->sourcefile~common.f90~4 sourcefile~mesh.f90->sourcefile~field.f90 sourcefile~decomp_2decompfft.f90 decomp_2decompfft.f90 sourcefile~mesh.f90->sourcefile~decomp_2decompfft.f90 sourcefile~mesh_content.f90 mesh_content.f90 sourcefile~mesh.f90->sourcefile~mesh_content.f90 sourcefile~scalar_series.f90->sourcefile~logger.f90 sourcefile~scalar_series.f90->sourcefile~common.f90~4 sourcefile~snapshot_manager.f90->sourcefile~config.f90 sourcefile~snapshot_manager.f90->sourcefile~logger.f90 sourcefile~snapshot_manager.f90->sourcefile~solver.f90 sourcefile~snapshot_manager.f90->sourcefile~common.f90~4 sourcefile~snapshot_manager.f90->sourcefile~field.f90 sourcefile~snapshot_manager.f90->sourcefile~io_session.f90 sourcefile~snapshot_manager.f90->sourcefile~io.f90 sourcefile~snapshot_manager.f90->sourcefile~io_base.f90 sourcefile~snapshot_manager.f90->sourcefile~io_field_utils.f90 sourcefile~stats.f90->sourcefile~config.f90 sourcefile~stats.f90->sourcefile~logger.f90 sourcefile~stats.f90->sourcefile~solver.f90 sourcefile~stats.f90->sourcefile~common.f90~4 sourcefile~stats.f90->sourcefile~field.f90 sourcefile~stats.f90->sourcefile~io_session.f90 sourcefile~tdsops.f90->sourcefile~logger.f90 sourcefile~tdsops.f90->sourcefile~common.f90~4 sourcefile~tdsops_setup.f90->sourcefile~logger.f90 sourcefile~tdsops_setup.f90->sourcefile~backend.f90~4 sourcefile~tdsops_setup.f90->sourcefile~common.f90~4 sourcefile~tdsops_setup.f90->sourcefile~mesh.f90 sourcefile~tdsops_setup.f90->sourcefile~tdsops.f90 sourcefile~time_integrator.f90->sourcefile~logger.f90 sourcefile~time_integrator.f90->sourcefile~allocator.f90~3 sourcefile~time_integrator.f90->sourcefile~backend.f90~4 sourcefile~time_integrator.f90->sourcefile~common.f90~4 sourcefile~time_integrator.f90->sourcefile~field.f90 sourcefile~vector_calculus.f90->sourcefile~logger.f90 sourcefile~vector_calculus.f90->sourcefile~allocator.f90~3 sourcefile~vector_calculus.f90->sourcefile~backend.f90~4 sourcefile~vector_calculus.f90->sourcefile~common.f90~4 sourcefile~vector_calculus.f90->sourcefile~field.f90 sourcefile~vector_calculus.f90->sourcefile~tdsops.f90 sourcefile~alm_airfoil.f90->sourcefile~logger.f90 sourcefile~alm_airfoil.f90->sourcefile~common.f90~4 sourcefile~decomp_2decompfft.f90->sourcefile~logger.f90 sourcefile~decomp_2decompfft.f90->sourcefile~mesh_content.f90 sourcefile~io.f90->sourcefile~logger.f90 sourcefile~io.f90->sourcefile~backend.f90~4 sourcefile~io.f90->sourcefile~common.f90~4 sourcefile~io.f90->sourcefile~field.f90 sourcefile~io.f90->sourcefile~io_base.f90 sourcefile~io_base.f90->sourcefile~backend.f90~4 sourcefile~io_base.f90->sourcefile~common.f90~4 sourcefile~io_base.f90->sourcefile~field.f90 sourcefile~io_field_utils.f90->sourcefile~logger.f90 sourcefile~io_field_utils.f90->sourcefile~solver.f90 sourcefile~io_field_utils.f90->sourcefile~common.f90~4 sourcefile~io_field_utils.f90->sourcefile~field.f90 sourcefile~io_field_utils.f90->sourcefile~io_base.f90 sourcefile~nvtx.f90 nvtx.f90 sourcefile~io_field_utils.f90->sourcefile~nvtx.f90 sourcefile~mesh_content.f90->sourcefile~logger.f90 sourcefile~mesh_content.f90->sourcefile~common.f90~4 sourcefile~poisson_fft.f90~2->sourcefile~logger.f90 sourcefile~poisson_fft.f90~2->sourcefile~common.f90~4 sourcefile~poisson_fft.f90~2->sourcefile~field.f90 sourcefile~poisson_fft.f90~2->sourcefile~mesh.f90 sourcefile~poisson_fft.f90~2->sourcefile~tdsops.f90

Files dependent on this one

sourcefile~~turbine_setup.f90~~AfferentGraph sourcefile~turbine_setup.f90 turbine_setup.f90 sourcefile~abl.f90~2 abl.f90 sourcefile~abl.f90~2->sourcefile~turbine_setup.f90 sourcefile~wind_turbine.f90 wind_turbine.f90 sourcefile~wind_turbine.f90->sourcefile~turbine_setup.f90 sourcefile~build.f90 build.f90 sourcefile~build.f90->sourcefile~abl.f90~2 sourcefile~case_factory.f90 case_factory.f90 sourcefile~build.f90->sourcefile~case_factory.f90 sourcefile~case_factory.f90->sourcefile~abl.f90~2 sourcefile~case_factory.f90->sourcefile~wind_turbine.f90 sourcefile~memcheck.f90 memcheck.f90 sourcefile~memcheck.f90->sourcefile~build.f90 sourcefile~xcompact.f90 xcompact.f90 sourcefile~xcompact.f90->sourcefile~case_factory.f90

Source Code

module m_turbine_setup
  !! Turbine set-up and tear-down shared by the cases that carry turbines
  !! (wind_turbine and abl). This is the only place the `iturbine` switch
  !! appears (at allocation time); downstream a case calls the polymorphic
  !! turbine object with no branching.
  use m_adm, only: adm_t
  use m_alm, only: alm_t
  use m_config, only: wind_turbine_config_t
  use m_io_manager, only: io_manager_t
  use m_logger, only: abort_run
  use m_solver, only: solver_t
  use m_turbine_dummy, only: turbine_dummy_t
  use m_turbine_model, only: turbine_model_t

  implicit none

  private
  public :: init_turbine_model, finalise_turbine_model

contains

  subroutine init_turbine_model(turbine, cfg, solver, io_mgr)
    !! Allocate the turbine model wind_turbine_nml selects, initialise it and
    !! register it for checkpointing
    implicit none

    class(turbine_model_t), pointer, intent(inout) :: turbine
    type(wind_turbine_config_t), intent(in) :: cfg
    class(solver_t), intent(in) :: solver
    type(io_manager_t), intent(inout) :: io_mgr

    select case (cfg%iturbine)
    case (1)
      allocate (alm_t :: turbine)
      select type (turbine)
      type is (alm_t)
        turbine%turbine_files = cfg%alm_turbines
        turbine%rho_air = cfg%rho_air
        turbine%eps_factor = cfg%eps_factor
        turbine%nu = solver%nu
        turbine%u_inflow = cfg%bc_start_u
        turbine%stats_start = max(1, io_mgr%stats_mgr%config%initstat)
        turbine%stats_freq = max(1, io_mgr%stats_mgr%config%istatfreq)
      end select
    case (2)
      allocate (adm_t :: turbine)
      select type (turbine)
      type is (adm_t)
        turbine%coords_file = cfg%adm_coords
        turbine%rho_air = cfg%rho_air
        turbine%T_relax = cfg%T_relax
        turbine%stats_start = max(1, io_mgr%stats_mgr%config%initstat)
        turbine%stats_freq = max(1, io_mgr%stats_mgr%config%istatfreq)
      end select
    case (0)
      allocate (turbine_dummy_t :: turbine)
    case default
      call abort_run('Unsupported wind turbine model selected.', &
                     collective=.true.)
    end select

    call turbine%init(solver%backend, solver%mesh, solver%host_allocator, &
                      solver%dt)
    call io_mgr%register_checkpoint_state(turbine)
    call turbine%setup_output(solver%mesh%par%is_root(), io_mgr%is_restart())
  end subroutine init_turbine_model

  subroutine finalise_turbine_model(turbine, io_mgr)
    !! Release a turbine model set up by init_turbine_model; a no-op when
    !! the case has none
    implicit none

    class(turbine_model_t), pointer, intent(inout) :: turbine
    type(io_manager_t), intent(inout) :: io_mgr

    if (.not. associated(turbine)) return
    call turbine%finalise()
    call io_mgr%unregister_checkpoint_state()
    deallocate (turbine)
  end subroutine finalise_turbine_model

end module m_turbine_setup