78 real(real64),
allocatable,
public :: partner_field(:,:)
79 real(real64),
allocatable,
public :: system_field(:,:)
80 type(grid_t),
pointer,
public :: system_gr => null()
81 type(regridding_t),
pointer,
public :: regridding => null()
82 type(time_interpolation_t),
pointer,
public :: interpolation => null()
83 integer,
public :: ndim
84 logical,
public :: interpolation_initialized = .false.
97 procedure :: dfield_transfer_interpolate, zfield_transfer_interpolate
98 generic :: interpolate => dfield_transfer_interpolate, zfield_transfer_interpolate
114 class(field_transfer_t),
intent(inout) :: this
115 type(grid_t),
target,
intent(in) :: gr
116 integer,
intent(in) :: ndim
122 safe_allocate(this%system_field(1:gr%np, 1:ndim))
123 this%system_field(:,:) =
m_zero
130 class(field_transfer_t),
intent(inout) :: this
131 type(grid_t),
intent(in) :: partner_gr
132 class(space_t),
intent(in) :: partner_space
133 type(namespace_t),
intent(in) :: partner_namespace
137 safe_allocate(this%partner_field(1:partner_gr%np, 1:this%ndim))
138 this%partner_field(:,:) =
m_zero
139 this%regridding =>
regridding_t(this%system_gr, partner_gr, partner_space, partner_namespace)
148 class(field_transfer_t),
intent(inout) :: this
149 integer,
intent(in) :: depth
150 character(len=*),
intent(in) :: label
151 logical,
optional,
intent(in) :: cmplx
156 optional_default(cmplx, .false.), trim(label) //
'-' // trim(this%partner%namespace%get()))
157 this%interpolation_initialized = .
true.
163 class(field_transfer_t),
intent(inout) :: this
168 safe_deallocate_a(this%partner_field)
169 safe_deallocate_a(this%system_field)
170 safe_deallocate_p(this%regridding)
171 safe_deallocate_p(this%interpolation)
203 assert(this%interpolation_initialized)
205 if (
allocated(this%partner_field))
then
206 call this%regridding%do_transfer(this%system_field, this%partner_field)
209 call this%interpolation%add_time(this%partner%quantities(this%couplings_from_partner(1))%iteration%value(), &
218 real(real64),
intent(in) :: time
219 real(real64),
contiguous,
intent(out) :: field(:, :)
224 call this%interpolation%interpolate(time, field)
232 real(real64),
intent(in) :: time
233 complex(real64),
contiguous,
intent(out) :: field(:, :)
238 call this%interpolation%interpolate(time, field)
257 class(
mesh_t),
intent(in) :: mesh
258 class(space_t),
intent(in) :: space
260 integer,
intent(out) :: err
264 call this%interpolation%read_restart(mesh, space, restart, err)
271 class(
mesh_t),
intent(in) :: mesh
272 class(space_t),
intent(in) :: space
274 integer,
intent(out) :: err
278 call this%interpolation%write_restart(mesh, space, restart, err)
This module implements the field transfer.
subroutine field_transfer_end(this)
subroutine field_transfer_read_restart(this, mesh, space, restart, err)
subroutine zfield_transfer_interpolate(this, time, field)
return the interpolated field for a given time
subroutine field_transfer_write_restart(this, mesh, space, restart, err)
subroutine field_transfer_do_mapping(this)
perform the regridding and add the system field to the time interpolator using the time of the quanti...
subroutine field_transfer_init_from_partner(this, partner_gr, partner_space, partner_namespace)
the partner field is allocated and initialized to 0; moreover the regridding structure is initialized
subroutine field_transfer_init_interpolation(this, depth, label, cmplx)
the time interpolation is initialized; it needs to know the depth which is usually given by the order...
subroutine, public field_transfer_init(this, gr, ndim)
the system field is allocated and initialized to 0
subroutine dfield_transfer_interpolate(this, time, field)
return the interpolated field for a given time
subroutine field_transfer_calculate_energy(this)
subroutine field_transfer_calculate(this)
real(real64), parameter, public m_zero
This module implements the underlying real-space grid.
This module defines the abstract interaction_t class, and some auxiliary classes for interactions.
subroutine, public interaction_end(this)
This module defines classes and functions for interaction partners.
This module defines the meshes, which are used in Octopus.
This module defines the quantity_t class and the IDs for quantities, which can be exposed by a system...
Implementation details for regridding.
class defining the field_transfer interaction
abstract interaction class
Describes mesh distribution to nodes.
contains the information of the meshes and provides the transfer functions