Neko 1.99.9
A portable framework for high-order spectral element flow simulations
Loading...
Searching...
No Matches
ax_helm_compr_cpu::ax_helm_compr_cpu_t Type Referenceabstract

CPU matrix-vector product for a Helmholtz problem, reading the geometric factors \( G_{ij} \) from their compressed form in coef_t. More...

Inheritance diagram for ax_helm_compr_cpu::ax_helm_compr_cpu_t:
Collaboration diagram for ax_helm_compr_cpu::ax_helm_compr_cpu_t:

Public Member Functions

procedure, pass(this) compute (this, w, u, coef, msh, xh)
 Compute the product.
 
procedure, pass(this) compute_vector ax_helm_compr_compute_vector
 Compute the product (vector version).
 
procedure, pass(this) compute (this, w, u, coef, msh, xh)
 Compute the product.
 
procedure(ax_compute), deferred, pass compute (this, w, u, coef, msh, xh)
 
procedure, pass(this) compute_vector (this, au, av, aw, u, v, w, coef, msh, xh)
 
procedure(ax_compute_vector), deferred, pass compute_vector (this, au, av, aw, u, v, w, coef, msh, xh)
 
procedure, pass(this) free (this)
 Release resources held by a matrix-vector product.
 

Detailed Description

Elements with the same geometric factors share one copy of them, coefG11_compr etc., and element e reads the copy coefcompression_inds(e). On a mesh of repeated element shapes this takes most of the six factors, 48 of the 80 bytes per point in double precision, out of the memory traffic of the product. Without compressed factors, see coef_t::enable_geo_compression, the product is the one of ax_helm_cpu_t.

Definition at line 55 of file ax_helm_compr_cpu.f90.

Member Function/Subroutine Documentation

◆ compute() [1/3]

procedure(ax_compute), deferred, pass ax_product::ax_t::compute ( class(ax_t), intent(in)  this,
real(kind=rp), dimension(xh%lx, xh%ly, xh%lz, msh%nelv), intent(inout)  w,
real(kind=rp), dimension(xh%lx, xh%ly, xh%lz, msh%nelv), intent(in)  u,
type(coef_t), intent(in)  coef,
type(mesh_t), intent(in)  msh,
type(space_t), intent(in)  xh 
)
pure virtualinherited

Definition at line 46 of file ax.f90.

◆ compute() [2/3]

procedure, pass(this) ax_helm_compr_cpu::ax_helm_compr_cpu_t::compute ( class(ax_helm_compr_cpu_t), intent(in)  this,
real(kind=rp), dimension(xh%lx, xh%ly, xh%lz, msh%nelv), intent(inout)  w,
real(kind=rp), dimension(xh%lx, xh%ly, xh%lz, msh%nelv), intent(in)  u,
type(coef_t), intent(in)  coef,
type(mesh_t), intent(in)  msh,
type(space_t), intent(in)  xh 
)
Parameters
auResult for the first component of the vector.
avResult for the first component of the vector.
awResult for the first component of the vector.
uThe first component of the vector.
vThe second component of the vector.
wThe third component of the vector.
coefCoefficients.
mshMesh.
XhFunction space \( X_h \). Compute the product.
wVector of size (lx,ly,lz,nelv).
uVector of size (lx,ly,lz,nelv).
coefCoefficients.
mshMesh.
XhFunction space \( X_h \).
Note
Since this is a performance-crtical routine, it is implemented in several kernels corresponding to different polynmial orders.

Definition at line 58 of file ax_helm_compr_cpu.f90.

◆ compute() [3/3]

procedure, pass(this) ax_helm_cpu::ax_helm_cpu_t::compute ( class(ax_helm_cpu_t), intent(in)  this,
real(kind=rp), dimension(xh%lx, xh%ly, xh%lz, msh%nelv), intent(inout)  w,
real(kind=rp), dimension(xh%lx, xh%ly, xh%lz, msh%nelv), intent(in)  u,
type(coef_t), intent(in)  coef,
type(mesh_t), intent(in)  msh,
type(space_t), intent(in)  xh 
)
inherited
Parameters
auResult for the first component of the vector.
avResult for the first component of the vector.
awResult for the first component of the vector.
uThe first component of the vector.
vThe second component of the vector.
wThe third component of the vector.
coefCoefficients.
mshMesh.
XhFunction space \( X_h \). Compute the product.
wVector of size (lx,ly,lz,nelv).
uVector of size (lx,ly,lz,nelv).
coefCoefficients.
mshMesh.
XhFunction space \( X_h \).
Note
Since this is a performance-crtical routine, it is implemented in several kernels corresponding to different polynmial orders.

Definition at line 46 of file ax_helm_cpu.f90.

◆ compute_vector() [1/3]

procedure(ax_compute_vector), deferred, pass ax_product::ax_t::compute_vector ( class(ax_t), intent(in)  this,
real(kind=rp), dimension(xh%lx, xh%ly, xh%lz, msh%nelv), intent(inout)  au,
real(kind=rp), dimension(xh%lx, xh%ly, xh%lz, msh%nelv), intent(inout)  av,
real(kind=rp), dimension(xh%lx, xh%ly, xh%lz, msh%nelv), intent(inout)  aw,
real(kind=rp), dimension(xh%lx, xh%ly, xh%lz, msh%nelv), intent(in)  u,
real(kind=rp), dimension(xh%lx, xh%ly, xh%lz, msh%nelv), intent(in)  v,
real(kind=rp), dimension(xh%lx, xh%ly, xh%lz, msh%nelv), intent(in)  w,
type(coef_t), intent(in)  coef,
type(mesh_t), intent(in)  msh,
type(space_t), intent(in)  xh 
)
pure virtualinherited

Definition at line 47 of file ax.f90.

◆ compute_vector() [2/3]

procedure, pass(this) ax_helm::ax_helm_t::compute_vector ( class(ax_helm_t), intent(in)  this,
real(kind=rp), dimension(xh%lx, xh%ly, xh%lz, msh%nelv), intent(inout)  au,
real(kind=rp), dimension(xh%lx, xh%ly, xh%lz, msh%nelv), intent(inout)  av,
real(kind=rp), dimension(xh%lx, xh%ly, xh%lz, msh%nelv), intent(inout)  aw,
real(kind=rp), dimension(xh%lx, xh%ly, xh%lz, msh%nelv), intent(in)  u,
real(kind=rp), dimension(xh%lx, xh%ly, xh%lz, msh%nelv), intent(in)  v,
real(kind=rp), dimension(xh%lx, xh%ly, xh%lz, msh%nelv), intent(in)  w,
type(coef_t), intent(in)  coef,
type(mesh_t), intent(in)  msh,
type(space_t), intent(in)  xh 
)
inherited

Definition at line 47 of file ax_helm.f90.

◆ compute_vector() [3/3]

procedure, pass(this) ax_helm_compr_cpu::ax_helm_compr_cpu_t::compute_vector

Definition at line 60 of file ax_helm_compr_cpu.f90.

◆ free()

procedure, pass(this) ax_product::ax_t::free ( class(ax_t), intent(inout)  this)
inherited

This default implementation permits resource-free operators to require no special handling. Descendants with pointer or allocatable components should override it.

Definition at line 48 of file ax.f90.


The documentation for this type was generated from the following file: