field.f90 Source File


This file depends on

sourcefile~~field.f90~~EfferentGraph sourcefile~field.f90 field.f90 sourcefile~common.f90~4 common.f90 sourcefile~field.f90->sourcefile~common.f90~4 sourcefile~logger.f90 logger.f90 sourcefile~common.f90~4->sourcefile~logger.f90

Files dependent on this one

sourcefile~~field.f90~~AfferentGraph sourcefile~field.f90 field.f90 sourcefile~abl.f90 abl.f90 sourcefile~abl.f90->sourcefile~field.f90 sourcefile~allocator.f90~3 allocator.f90 sourcefile~abl.f90->sourcefile~allocator.f90~3 sourcefile~backend.f90~4 backend.f90 sourcefile~abl.f90->sourcefile~backend.f90~4 sourcefile~les.f90 les.f90 sourcefile~abl.f90->sourcefile~les.f90 sourcefile~mesh.f90 mesh.f90 sourcefile~abl.f90->sourcefile~mesh.f90 sourcefile~abl.f90~2 abl.f90 sourcefile~abl.f90~2->sourcefile~field.f90 sourcefile~abl.f90~2->sourcefile~abl.f90 sourcefile~abl.f90~2->sourcefile~allocator.f90~3 sourcefile~abl.f90~2->sourcefile~backend.f90~4 sourcefile~base_case.f90 base_case.f90 sourcefile~abl.f90~2->sourcefile~base_case.f90 sourcefile~diagnostics.f90 diagnostics.f90 sourcefile~abl.f90~2->sourcefile~diagnostics.f90 sourcefile~inflow_planes.f90 inflow_planes.f90 sourcefile~abl.f90~2->sourcefile~inflow_planes.f90 sourcefile~abl.f90~2->sourcefile~mesh.f90 sourcefile~turbine_model.f90 turbine_model.f90 sourcefile~abl.f90~2->sourcefile~turbine_model.f90 sourcefile~turbine_setup.f90 turbine_setup.f90 sourcefile~abl.f90~2->sourcefile~turbine_setup.f90 sourcefile~adm.f90 adm.f90 sourcefile~adm.f90->sourcefile~field.f90 sourcefile~adm.f90->sourcefile~allocator.f90~3 sourcefile~adm.f90->sourcefile~backend.f90~4 sourcefile~io_session.f90 io_session.f90 sourcefile~adm.f90->sourcefile~io_session.f90 sourcefile~adm.f90->sourcefile~mesh.f90 sourcefile~adm.f90->sourcefile~turbine_model.f90 sourcefile~allocator.f90 allocator.f90 sourcefile~allocator.f90->sourcefile~field.f90 sourcefile~allocator.f90->sourcefile~allocator.f90~3 sourcefile~allocator.f90->sourcefile~mesh.f90 sourcefile~allocator.f90~2 allocator.f90 sourcefile~allocator.f90~2->sourcefile~field.f90 sourcefile~allocator.f90~2->sourcefile~allocator.f90~3 sourcefile~allocator.f90~2->sourcefile~mesh.f90 sourcefile~allocator.f90~3->sourcefile~field.f90 sourcefile~alm.f90 alm.f90 sourcefile~alm.f90->sourcefile~field.f90 sourcefile~alm.f90->sourcefile~allocator.f90~3 sourcefile~alm.f90->sourcefile~backend.f90~4 sourcefile~alm.f90->sourcefile~io_session.f90 sourcefile~alm.f90->sourcefile~mesh.f90 sourcefile~alm.f90->sourcefile~turbine_model.f90 sourcefile~backend.f90 backend.f90 sourcefile~backend.f90->sourcefile~field.f90 sourcefile~backend.f90->sourcefile~allocator.f90~3 sourcefile~backend.f90->sourcefile~backend.f90~4 sourcefile~backend.f90->sourcefile~mesh.f90 sourcefile~backend.f90~2 backend.f90 sourcefile~backend.f90~2->sourcefile~field.f90 sourcefile~backend.f90~2->sourcefile~allocator.f90~2 sourcefile~backend.f90~2->sourcefile~allocator.f90~3 sourcefile~backend.f90~2->sourcefile~backend.f90~4 sourcefile~backend.f90~2->sourcefile~mesh.f90 sourcefile~poisson_fft.f90~3 poisson_fft.f90 sourcefile~backend.f90~2->sourcefile~poisson_fft.f90~3 sourcefile~backend.f90~3 backend.f90 sourcefile~backend.f90~3->sourcefile~field.f90 sourcefile~backend.f90~3->sourcefile~allocator.f90~3 sourcefile~backend.f90~3->sourcefile~backend.f90~4 sourcefile~backend.f90~3->sourcefile~mesh.f90 sourcefile~poisson_fft.f90 poisson_fft.f90 sourcefile~backend.f90~3->sourcefile~poisson_fft.f90 sourcefile~backend.f90~4->sourcefile~field.f90 sourcefile~backend.f90~4->sourcefile~allocator.f90~3 sourcefile~backend.f90~4->sourcefile~mesh.f90 sourcefile~poisson_fft.f90~2 poisson_fft.f90 sourcefile~backend.f90~4->sourcefile~poisson_fft.f90~2 sourcefile~base_case.f90->sourcefile~field.f90 sourcefile~base_case.f90->sourcefile~allocator.f90~3 sourcefile~base_case.f90->sourcefile~backend.f90~4 sourcefile~base_case.f90->sourcefile~mesh.f90 sourcefile~monitoring.f90 monitoring.f90 sourcefile~base_case.f90->sourcefile~monitoring.f90 sourcefile~postprocess.f90 postprocess.f90 sourcefile~base_case.f90->sourcefile~postprocess.f90 sourcefile~solver.f90 solver.f90 sourcefile~base_case.f90->sourcefile~solver.f90 sourcefile~io_manager.f90 io_manager.f90 sourcefile~base_case.f90->sourcefile~io_manager.f90 sourcefile~build.f90 build.f90 sourcefile~build.f90->sourcefile~field.f90 sourcefile~build.f90->sourcefile~abl.f90~2 sourcefile~build.f90->sourcefile~base_case.f90 sourcefile~ibm.f90 ibm.f90 sourcefile~build.f90->sourcefile~ibm.f90 sourcefile~build.f90->sourcefile~mesh.f90 sourcefile~build.f90->sourcefile~monitoring.f90 sourcefile~case_factory.f90 case_factory.f90 sourcefile~build.f90->sourcefile~case_factory.f90 sourcefile~context.f90 context.f90 sourcefile~build.f90->sourcefile~context.f90 sourcefile~estimate.f90 estimate.f90 sourcefile~build.f90->sourcefile~estimate.f90 sourcefile~memory_estimate.f90 memory_estimate.f90 sourcefile~build.f90->sourcefile~memory_estimate.f90 sourcefile~setup.f90 setup.f90 sourcefile~build.f90->sourcefile~setup.f90 sourcefile~report.f90 report.f90 sourcefile~build.f90->sourcefile~report.f90 sourcefile~channel.f90 channel.f90 sourcefile~channel.f90->sourcefile~field.f90 sourcefile~channel.f90->sourcefile~allocator.f90~3 sourcefile~channel.f90->sourcefile~backend.f90~4 sourcefile~channel.f90->sourcefile~base_case.f90 sourcefile~channel.f90->sourcefile~mesh.f90 sourcefile~channel.f90->sourcefile~solver.f90 sourcefile~checkpoint_manager.f90 checkpoint_manager.f90 sourcefile~checkpoint_manager.f90->sourcefile~field.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_manager.f90->sourcefile~io_session.f90 sourcefile~checkpoint_manager.f90->sourcefile~solver.f90 sourcefile~stats.f90 stats.f90 sourcefile~checkpoint_manager.f90->sourcefile~stats.f90 sourcefile~checkpoint_state.f90 checkpoint_state.f90 sourcefile~checkpoint_manager.f90->sourcefile~checkpoint_state.f90 sourcefile~cylinder.f90 cylinder.f90 sourcefile~cylinder.f90->sourcefile~field.f90 sourcefile~cylinder.f90->sourcefile~allocator.f90~3 sourcefile~cylinder.f90->sourcefile~backend.f90~4 sourcefile~cylinder.f90->sourcefile~base_case.f90 sourcefile~cylinder.f90->sourcefile~mesh.f90 sourcefile~cylinder.f90->sourcefile~solver.f90 sourcefile~diagnostics.f90->sourcefile~field.f90 sourcefile~diagnostics.f90->sourcefile~backend.f90~4 sourcefile~diagnostics.f90->sourcefile~les.f90 sourcefile~diagnostics.f90->sourcefile~mesh.f90 sourcefile~generic.f90 generic.f90 sourcefile~generic.f90->sourcefile~field.f90 sourcefile~generic.f90->sourcefile~allocator.f90~3 sourcefile~generic.f90->sourcefile~backend.f90~4 sourcefile~generic.f90->sourcefile~base_case.f90 sourcefile~generic.f90->sourcefile~mesh.f90 sourcefile~generic.f90->sourcefile~solver.f90 sourcefile~ibm.f90->sourcefile~field.f90 sourcefile~ibm.f90->sourcefile~allocator.f90~3 sourcefile~ibm.f90->sourcefile~backend.f90~4 sourcefile~ibm.f90->sourcefile~io_session.f90 sourcefile~ibm.f90->sourcefile~mesh.f90 sourcefile~inflow_planes.f90->sourcefile~field.f90 sourcefile~inflow_planes.f90->sourcefile~backend.f90~4 sourcefile~inflow_planes.f90->sourcefile~io_session.f90 sourcefile~inflow_planes.f90->sourcefile~mesh.f90 sourcefile~io.f90->sourcefile~field.f90 sourcefile~io.f90->sourcefile~backend.f90~4 sourcefile~io_base.f90 io_base.f90 sourcefile~io.f90->sourcefile~io_base.f90 sourcefile~io.f90~2 io.f90 sourcefile~io.f90~2->sourcefile~field.f90 sourcefile~io.f90~2->sourcefile~backend.f90~4 sourcefile~io.f90~2->sourcefile~io_base.f90 sourcefile~io_base.f90->sourcefile~field.f90 sourcefile~io_base.f90->sourcefile~backend.f90~4 sourcefile~io_field_utils.f90->sourcefile~field.f90 sourcefile~io_field_utils.f90->sourcefile~io_base.f90 sourcefile~io_field_utils.f90->sourcefile~solver.f90 sourcefile~io_session.f90->sourcefile~field.f90 sourcefile~io_session.f90->sourcefile~backend.f90~4 sourcefile~io_session.f90->sourcefile~io.f90 sourcefile~io_session.f90->sourcefile~io_base.f90 sourcefile~les.f90->sourcefile~field.f90 sourcefile~les.f90->sourcefile~backend.f90~4 sourcefile~les.f90->sourcefile~mesh.f90 sourcefile~mesh.f90->sourcefile~field.f90 sourcefile~monitoring.f90->sourcefile~field.f90 sourcefile~monitoring.f90->sourcefile~solver.f90 sourcefile~poisson_fft.f90->sourcefile~field.f90 sourcefile~poisson_fft.f90->sourcefile~mesh.f90 sourcefile~poisson_fft.f90->sourcefile~poisson_fft.f90~2 sourcefile~poisson_fft.f90~2->sourcefile~field.f90 sourcefile~poisson_fft.f90~2->sourcefile~mesh.f90 sourcefile~poisson_fft.f90~3->sourcefile~field.f90 sourcefile~poisson_fft.f90~3->sourcefile~allocator.f90~2 sourcefile~poisson_fft.f90~3->sourcefile~mesh.f90 sourcefile~poisson_fft.f90~3->sourcefile~poisson_fft.f90~2 sourcefile~postprocess.f90->sourcefile~field.f90 sourcefile~postprocess.f90->sourcefile~solver.f90 sourcefile~snapshot_manager.f90 snapshot_manager.f90 sourcefile~snapshot_manager.f90->sourcefile~field.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~snapshot_manager.f90->sourcefile~io_session.f90 sourcefile~snapshot_manager.f90->sourcefile~solver.f90 sourcefile~solver.f90->sourcefile~field.f90 sourcefile~solver.f90->sourcefile~allocator.f90~3 sourcefile~solver.f90->sourcefile~backend.f90~4 sourcefile~solver.f90->sourcefile~ibm.f90 sourcefile~solver.f90->sourcefile~les.f90 sourcefile~solver.f90->sourcefile~mesh.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~tdsops_setup.f90 tdsops_setup.f90 sourcefile~solver.f90->sourcefile~tdsops_setup.f90 sourcefile~stats.f90->sourcefile~field.f90 sourcefile~stats.f90->sourcefile~io_session.f90 sourcefile~stats.f90->sourcefile~solver.f90 sourcefile~tgv.f90 tgv.f90 sourcefile~tgv.f90->sourcefile~field.f90 sourcefile~tgv.f90->sourcefile~allocator.f90~3 sourcefile~tgv.f90->sourcefile~backend.f90~4 sourcefile~tgv.f90->sourcefile~base_case.f90 sourcefile~tgv.f90->sourcefile~mesh.f90 sourcefile~tgv.f90->sourcefile~solver.f90 sourcefile~time_integrator.f90->sourcefile~field.f90 sourcefile~time_integrator.f90->sourcefile~allocator.f90~3 sourcefile~time_integrator.f90->sourcefile~backend.f90~4 sourcefile~turbine_dummy.f90 turbine_dummy.f90 sourcefile~turbine_dummy.f90->sourcefile~field.f90 sourcefile~turbine_dummy.f90->sourcefile~allocator.f90~3 sourcefile~turbine_dummy.f90->sourcefile~backend.f90~4 sourcefile~turbine_dummy.f90->sourcefile~io_session.f90 sourcefile~turbine_dummy.f90->sourcefile~mesh.f90 sourcefile~turbine_dummy.f90->sourcefile~turbine_model.f90 sourcefile~turbine_model.f90->sourcefile~field.f90 sourcefile~turbine_model.f90->sourcefile~allocator.f90~3 sourcefile~turbine_model.f90->sourcefile~backend.f90~4 sourcefile~turbine_model.f90->sourcefile~mesh.f90 sourcefile~turbine_model.f90->sourcefile~checkpoint_state.f90 sourcefile~vector_calculus.f90->sourcefile~field.f90 sourcefile~vector_calculus.f90->sourcefile~allocator.f90~3 sourcefile~vector_calculus.f90->sourcefile~backend.f90~4 sourcefile~wind_turbine.f90 wind_turbine.f90 sourcefile~wind_turbine.f90->sourcefile~field.f90 sourcefile~wind_turbine.f90->sourcefile~allocator.f90~3 sourcefile~wind_turbine.f90->sourcefile~backend.f90~4 sourcefile~wind_turbine.f90->sourcefile~base_case.f90 sourcefile~wind_turbine.f90->sourcefile~mesh.f90 sourcefile~wind_turbine.f90->sourcefile~solver.f90 sourcefile~wind_turbine.f90->sourcefile~turbine_model.f90 sourcefile~wind_turbine.f90->sourcefile~turbine_setup.f90 sourcefile~case_factory.f90->sourcefile~abl.f90~2 sourcefile~case_factory.f90->sourcefile~allocator.f90~3 sourcefile~case_factory.f90->sourcefile~backend.f90~4 sourcefile~case_factory.f90->sourcefile~base_case.f90 sourcefile~case_factory.f90->sourcefile~channel.f90 sourcefile~case_factory.f90->sourcefile~cylinder.f90 sourcefile~case_factory.f90->sourcefile~generic.f90 sourcefile~case_factory.f90->sourcefile~mesh.f90 sourcefile~case_factory.f90->sourcefile~tgv.f90 sourcefile~case_factory.f90->sourcefile~wind_turbine.f90 sourcefile~checkpoint_state.f90->sourcefile~io_session.f90 sourcefile~context.f90->sourcefile~io.f90 sourcefile~context.f90->sourcefile~mesh.f90 sourcefile~memcheck_device.f90 memcheck_device.f90 sourcefile~context.f90->sourcefile~memcheck_device.f90 sourcefile~estimate.f90->sourcefile~poisson_fft.f90~3 sourcefile~estimate.f90->sourcefile~context.f90 sourcefile~estimate.f90->sourcefile~memory_estimate.f90 sourcefile~io_manager.f90->sourcefile~checkpoint_manager.f90 sourcefile~io_manager.f90->sourcefile~snapshot_manager.f90 sourcefile~io_manager.f90->sourcefile~solver.f90 sourcefile~io_manager.f90->sourcefile~stats.f90 sourcefile~io_manager.f90->sourcefile~checkpoint_state.f90 sourcefile~memcheck.f90 memcheck.f90 sourcefile~memcheck.f90->sourcefile~build.f90 sourcefile~memcheck.f90->sourcefile~context.f90 sourcefile~memcheck.f90->sourcefile~estimate.f90 sourcefile~memcheck.f90->sourcefile~memory_estimate.f90 sourcefile~memcheck.f90->sourcefile~report.f90 sourcefile~memcheck_device.f90->sourcefile~base_case.f90 sourcefile~memcheck_device.f90->sourcefile~mesh.f90 sourcefile~memcheck_device.f90->sourcefile~poisson_fft.f90~3 sourcefile~memcheck_device.f90->sourcefile~memory_estimate.f90 sourcefile~memory_estimate.f90->sourcefile~allocator.f90~3 sourcefile~memory_estimate.f90->sourcefile~time_integrator.f90 sourcefile~poisson_solver.f90 poisson_solver.f90 sourcefile~poisson_solver.f90->sourcefile~allocator.f90~3 sourcefile~poisson_solver.f90->sourcefile~backend.f90~4 sourcefile~poisson_solver.f90->sourcefile~mesh.f90 sourcefile~poisson_solver.f90->sourcefile~setup.f90 sourcefile~poisson_solver.f90->sourcefile~tdsops_setup.f90 sourcefile~setup.f90->sourcefile~allocator.f90 sourcefile~setup.f90->sourcefile~allocator.f90~2 sourcefile~setup.f90->sourcefile~allocator.f90~3 sourcefile~setup.f90->sourcefile~backend.f90 sourcefile~setup.f90->sourcefile~backend.f90~2 sourcefile~setup.f90->sourcefile~backend.f90~3 sourcefile~setup.f90->sourcefile~backend.f90~4 sourcefile~setup.f90->sourcefile~mesh.f90 sourcefile~tdsops_setup.f90->sourcefile~backend.f90~4 sourcefile~tdsops_setup.f90->sourcefile~mesh.f90 sourcefile~turbine_setup.f90->sourcefile~adm.f90 sourcefile~turbine_setup.f90->sourcefile~alm.f90 sourcefile~turbine_setup.f90->sourcefile~solver.f90 sourcefile~turbine_setup.f90->sourcefile~turbine_dummy.f90 sourcefile~turbine_setup.f90->sourcefile~turbine_model.f90 sourcefile~turbine_setup.f90->sourcefile~io_manager.f90 sourcefile~xcompact.f90 xcompact.f90 sourcefile~xcompact.f90->sourcefile~base_case.f90 sourcefile~xcompact.f90->sourcefile~mesh.f90 sourcefile~xcompact.f90->sourcefile~case_factory.f90 sourcefile~xcompact.f90->sourcefile~setup.f90 sourcefile~report.f90->sourcefile~context.f90 sourcefile~report.f90->sourcefile~estimate.f90 sourcefile~report.f90->sourcefile~memcheck_device.f90 sourcefile~report.f90->sourcefile~memory_estimate.f90

Source Code

module m_field

  use iso_c_binding, only: c_ptr, c_null_ptr

  use m_common, only: dp, DIR_X, DIR_Y, DIR_Z, DIR_C

  type :: field_t
     !! Memory block type holding both a data field and a pointer
     !! to the next block.  The `field_t` type also holds an integer
     !! `refcount` that counts the number of references to this
     !! field.  User code is currently responsible for incrementing
     !! the reference count.
    class(field_t), pointer :: next
    real(dp), pointer, private :: p_data(:)
    real(dp), pointer, contiguous :: data(:, :, :)
    integer :: dir
    integer :: data_loc
    integer :: refcount = 0
    integer :: id !! An integer identifying the memory block.
  contains
    procedure :: fill
    procedure :: get_shape
    procedure :: set_shape
    procedure :: set_data_loc
    procedure :: get_dev_ptr
  end type field_t

  interface field_t
    module procedure field_init
  end interface field_t

  type :: flist_t
    !! Use for creating a list of field pointers
    class(field_t), pointer :: ptr
  end type flist_t

contains

  function field_init(ngrid, next, id) result(f)
    integer, intent(in) :: ngrid, id
    !! `next` matches the polymorphic `next` component it is assigned to, so
    !! the caller hands over the list head as-is (see omptgt_field_init).
    class(field_t), pointer, intent(in) :: next
    type(field_t) :: f

    allocate (f%p_data(ngrid))
    f%refcount = 0
    f%next => next
    f%id = id
  end function field_init

  subroutine fill(self, c)
    implicit none

    class(field_t) :: self
    real(dp), intent(in) :: c

    self%p_data(:) = c

  end subroutine fill

  subroutine set_data_loc(self, data_loc)
    class(field_t) :: self
    integer, intent(in) :: data_loc

    self%data_loc = data_loc

  end subroutine

  type(c_ptr) function get_dev_ptr(self) result(ptr)
    !! Address of the block's storage in a separate device allocation, null
    !! for a host block. A device field type that keeps its storage behind a
    !! raw device pointer overrides this, letting its backend reach the
    !! storage by dynamic dispatch rather than by a type query.
    implicit none

    class(field_t) :: self

    ptr = c_null_ptr

  end function get_dev_ptr

  function get_shape(self) result(dims)
    implicit none

    class(field_t) :: self
    integer :: dims(3)

    dims = shape(self%data)

  end function get_shape

  subroutine set_shape(self, dims)
    implicit none

    class(field_t) :: self
    integer, intent(in) :: dims(3)

    self%data(1:dims(1), 1:dims(2), 1:dims(3)) => self%p_data

  end subroutine set_shape

end module m_field