2 use,
intrinsic :: iso_fortran_env, only : error_unit
4 use iso_c_binding,
only : c_ptr
24 generic :: get => get_by_index, get_by_name
30 generic :: assign => assign_to_ptr, assign_to_field_ptr, &
33 procedure, pass(this) :: assign_to_field_ptr => &
65 integer,
intent(in) :: size
68 allocate(this%items(size))
77 if (
allocated(this%items))
then
90 integer,
intent(in) :: i
91 f => this%items(i)%ptr
99 character(len=*),
intent(in) :: name
104 do i = 1, this%size()
105 if (this%name(i) .eq. trim(name))
then
106 f => this%items(i)%ptr
112 write(error_unit,*)
"Current field list contents:"
114 do i = 1, this%size()
115 write(error_unit,*)
"- ", this%name(i)
119 call neko_error(
"No field with name " // trim(name) //
" found in list")
126 class(
field_t),
intent(in),
target :: f
130 if (.not.
allocated(this%items))
then
131 allocate(this%items(1))
132 call this%items(1)%init(f)
136 len =
size(this%items)
139 tmp(1:len) = this%items
140 call move_alloc(tmp, this%items)
141 call this%items(len+1)%init(f)
148 integer :: i, n_fields
150 if (
allocated(this%items))
then
151 n_fields = this%size()
153 call this%items(i)%free()
155 deallocate(this%items)
164 integer,
intent(in) :: i
167 ptr = this%items(i)%ptr%x_d
172 real(kind=
rp),
pointer,
contiguous :: x(:,:,:,:)
173 integer,
intent(in) :: i
174 x => this%items(i)%ptr%x
181 integer,
intent(in) :: i
184 size = this%items(i)%ptr%size()
193 integer,
intent(in) :: i
194 type(
field_t),
pointer,
intent(in) :: ptr
196 call this%items(i)%init(ptr)
205 integer,
intent(in) :: i
208 call this%items(i)%init(ptr%ptr)
216 integer,
intent(in) :: i
217 type(
field_t),
target,
intent(in) :: fld
219 call this%items(i)%init(fld)
231 call this%init(other%size())
232 do i = 1, other%size()
233 call this%assign(i, other%items(i)%ptr)
241 integer,
intent(in) :: i
244 result => this%items(i)%ptr%dof
251 integer,
intent(in) :: i
252 type(
space_t),
pointer :: result
254 result => this%items(i)%ptr%Xh
261 integer,
intent(in) :: i
262 type(
mesh_t),
pointer :: result
264 result => this%items(i)%ptr%msh
271 integer,
intent(in) :: i
274 result = this%items(i)%ptr%internal_dofmap
281 integer,
intent(in) :: i
282 character(len=80) :: result
284 result = this%items(i)%ptr%name
294 integer,
intent(in) :: memdir
295 logical,
intent(in) :: sync
302 call this%items(i)%ptr%copy_from(memdir, .false.)
304 call this%items(n)%ptr%copy_from(memdir, sync)
integer, public pe_rank
MPI rank.
Defines a mapping of the degrees of freedom.
type(dofmap_t) function, pointer field_list_dof(this, i)
Get the the dofmap for item i.
subroutine field_list_init(this, size)
Constructor. Just allocates the array.
type(space_t) function, pointer field_list_space(this, i)
Get the the space for item i.
subroutine field_list_assign_to_field_list(this, other)
Point item at a given index.
subroutine field_list_assign_to_ptr(this, i, ptr)
Point item at a given index.
pure integer function field_list_size(this)
Get number of items in the list.
subroutine field_list_assign_to_field_ptr(this, i, ptr)
Point item at a given index.
integer function field_list_item_size(this, i)
Get the size of the dofmap for item i.
character(len=80) function field_list_name(this, i)
Get the name for an item in the list.
subroutine field_list_copy_from(this, memdir, sync)
Copy all fields to or from device.
logical function field_list_internal_dofmap(this, i)
Whether the dofmap is internal for item i.
real(kind=rp) function, dimension(:,:,:,:), pointer, contiguous field_list_x(this, i)
type(field_t) function, pointer field_list_get_by_index(this, i)
Get an item pointer by array index.
type(mesh_t) function, pointer field_list_msh(this, i)
Get the the mesh for item i.
subroutine field_list_assign_to_field(this, i, fld)
Point item at a given index.
type(c_ptr) function field_list_x_d(this, i)
Get device pointer for a given index.
subroutine field_list_free(this)
Destructor.
subroutine field_list_append(this, f)
Append a field to the list.
type(field_t) function, pointer field_list_get_by_name(this, name)
Get an item pointer by array index.
integer, parameter, public rp
Global precision used in computations.
Defines a function space.
field_ptr_t, To easily obtain a pointer to a field
field_list_t, To be able to group fields together
The function space for the SEM solution fields.