Class xlifepp::ComputationAlgorithm#

template<number_t CM>
class ComputationAlgorithm#

Collaboration diagram for xlifepp::ComputationAlgorithm:

digraph { graph [bgcolor="#00000000"] node [shape=rectangle style=filled fillcolor="#FFFFFF" font=Helvetica padding=2] edge [color="#1414CE"] "1" [label="xlifepp::ComputationAlgorithm< CM >" tooltip="xlifepp::ComputationAlgorithm< CM >" fillcolor="#BFBFBF"] }

templated computation functions ComputationAlgorithm class is a trick to template FE/IE computation algorithm

Public Functions

void compute(const SuBilinearForm &subf, LargeMatrix<T> &mat, K &vt, Space *space_u_p, Space *space_v_p, const Unknown *u_p, const TestFct *v_p)#

FE-SP hybrid computation of a scalar SuBiinearForm on a == unique domain == -&#8212; u space is a FE/SP space and v space is a SP/FE space ——&#8212; subf: a single unknown bilinear form defined on a unique domain (assumed), single integral v: reference to matrix entries of type T vt: to pass as template the scalar type (real or complex)

void compute(const SuBilinearForm &subf, LargeMatrix<T> &mat, K &vt, Space *space_u_p, Space *space_v_p, const Unknown *u_p, const TestFct *v_p)

IE SP computation of a scalar SuBilinearForm on a == unique domain == subf: a single unknown bilinear form defined on a unique domains pair (assumed) of IE form with a TensorKernel (see TensorKernel.hpp) :

        /     /
        |     |   v(x)|[sum_mn psi_m(x)*Amn*phi_n(y)]|u(y) dy dx
        /domx /domy
or when TensorKernel.isConjugate is true: / / | | v(x)|[sum_mn psi_m(x)*Amn*conj(phi_n(y))]|u(y) dy dx /domx /domy

Note that the conjugate is applied to phi_n basis related to unknown

v: reference to matrix entries of type T vt: to pass as template the scalar type (real or complex)

algorithm: loop on bilinear form loop on element on uy-domain compute op_u(wj) compute sum_k[pk*phi_m(yk)*wj(yk)] loop on element on vx-domain compute op_v(ti) compute sum_k[qk*psi_n(xk)*ti(xk)] (psi may be conjugated) compute elem matrix by tensorial product

Note: this algorithm is general and not optimal when psi=phi, (wj)=(ti), op_u=op_v, quad_x=quad_y because some quantities are computed many times, nevertheless it is not memory expansive to be improved in future

void compute(const SuBilinearForm &subf, LargeMatrix<T> &mat, K &vt, Space *space_u_p, Space *space_v_p, const Unknown *u_p, const TestFct *v_p)

compute SuTermMatrix for spectral unknowns u, v subf: a single unknown bilinear form defined on a unique domain (assumed), single integral v: reference to matrix entries of type T vt: to pass as template the scalar type (real or complex)

void compute(const SuBilinearForm &subf0, LargeMatrix<T> &mat, K &vt, Space *space_u_p, Space *space_v_p, const Unknown *u_p, const TestFct *v_p)

IE computation of a scalar SuBiinearForm on a == unique domain == subf: a single unknown bilinear form defined on a unique domains pair (assumed) mat: T LargeMatrix to be filled in space_u_p: space related to col index of LargeMatrix space_v_p: space related to row index of LargeMatrix u_p, v_p: involved unknown and test function vt: to pass as template the scalar type (real or complex)

deals with scalar (T = K = real or complex) or vector problem (T = Matrix<K> with K= real or complex) deals with standard IE or extended IE (requiring to extend computation to volume dofs) deals with a list of integration methods for regular or singular part, for close to far elements interaction

Public Static Functions

template<typename T, typename K>
static inline void compute(const SuBilinearForm &sub, LargeMatrix<T> &mat, K &vt, Space *space_u_p, Space *space_v_p, const Unknown *u_p, const Unknown *v_p)#

computation algorithm