Problem
Inside the gsThinShellAssembler we use the gsExprAssembler. The material evaluations are moved into the gsExprAssembler by lines like:
gsMaterialMatrixIntegrate<T,MaterialOutput::MatrixA> m_mmA(m_materialMatrices,&m_patches,&defpatches);
gsMaterialMatrixIntegrate<T,MaterialOutput::MatrixB> m_mmB(m_materialMatrices,&m_patches,&defpatches);
gsMaterialMatrixIntegrate<T,MaterialOutput::MatrixC> m_mmC(m_materialMatrices,&m_patches,&defpatches);
gsMaterialMatrixIntegrate<T,MaterialOutput::MatrixD> m_mmD(m_materialMatrices,&m_patches,&defpatches);
auto mmA = m_assembler.getCoeff(m_mmA);
auto mmB = m_assembler.getCoeff(m_mmB);
auto mmC = m_assembler.getCoeff(m_mmC);
auto mmD = m_assembler.getCoeff(m_mmD);
However, when inside an assembly call we use m_mmA and m_mmB, they both call pre-computation of the same geometric quantities (see gsMaterialMatrixBaseDim.hpp.
Solution
It would be more optimal to perform the geometric computations only once, preferably delegated by the gsExprAssembler and the parse functions in the expressions.
We can do this by making expression objects for gsMaterialMatrixIntegrate and gsMaterialMatrixEval.
(example follows...)
Problem
Inside the
gsThinShellAssemblerwe use thegsExprAssembler. The material evaluations are moved into thegsExprAssemblerby lines like:However, when inside an assembly call we use
m_mmAandm_mmB, they both call pre-computation of the same geometric quantities (seegsMaterialMatrixBaseDim.hpp.Solution
It would be more optimal to perform the geometric computations only once, preferably delegated by the
gsExprAssemblerand theparsefunctions in the expressions.We can do this by making expression objects for
gsMaterialMatrixIntegrateandgsMaterialMatrixEval.(example follows...)