41 typename gsExprHelper<T>::Ptr m_exprdata;
44 std::vector<T> m_elWise;
50 typedef typename gsBoundaryConditions<T>::bcRefList bcRefList;
52 typedef std::vector< boundaryInterface > intContainer;
53 typedef std::vector< patchSide > bContainer;
55 typedef typename gsExprHelper<T>::element element;
56 typedef typename gsExprHelper<T>::geometryMap geometryMap;
64 m_options(defaultOptions()) { }
67 : m_exprdata(env), m_value(-1), m_options(defaultOptions())
73 : m_exprdata(o.exprData()), m_options(defaultOptions())
79 opt.
addReal(
"quA",
"Number of quadrature points: quA*deg + quB", 1.0 );
80 opt.
addInt (
"quB",
"Number of quadrature points: quA*deg + quB", 1 );
81 opt.
addInt (
"plot.npts",
"Number of sampling points for plotting", 3000 );
82 opt.
addSwitch(
"plot.elements",
"Include the element mesh in plot (when applicable)",
false);
83 opt.
addSwitch(
"flipSide",
"Flip side of interface where evaluation is performed.",
false);
93 T
value()
const {
return m_value; }
96 size_t nValues()
const {
return m_elWise.size(); }
99 const std::vector<T> &
elementwise()
const {
return m_elWise; }
111 { m_exprdata->setMultiBasis(mesh); }
113 const typename gsExprHelper<T>::Ptr exprData()
const {
return m_exprdata; }
117 {
return m_exprdata->getMap(mp); }
121 {
return m_exprdata->getMap(gm); }
125 {
return m_exprdata->getVar(func, dim); }
129 {
return m_exprdata->getVar(func, G); }
138 en.array() = en.array().sqrt();
139 m_value = math::sqrt(m_value);
146 en.array() = en.array().pow(static_cast<T>(1)/p);
147 m_value = math::pow(m_value, static_cast<T>(1)/p );
155 {
return compute_impl<E,false,plus_op>(expr); }
160 {
return compute_impl<E,true,plus_op>(expr); }
163 T
integral(
const T & val) {
return integral<T>(val); }
164 T
integralElWise(
const T & val) {
return integralElWise<T>(val); }
170 {
return computeBdr_impl<E,plus_op>(expr,
171 m_exprdata->multiBasis().topology().boundaries()); }
176 T
integralBdr(
const expr::_expr<E> & expr,
const bContainer & bdrlist)
177 {
return computeBdr_impl<E,plus_op>(expr,bdrlist); }
183 {
return computeBdrBc_impl<E,plus_op>(BCs,expr); }
189 {
return computeInterface_impl<E,plus_op>(expr,
190 m_exprdata->multiBasis().topology().interfaces()); }
196 {
return computeInterface_impl<E,plus_op>(expr, iFaces); }
201 T
max(
const expr::_expr<E> & expr)
202 {
return compute_impl<E,false,max_op>(expr); }
208 {
return compute_impl<E,true,max_op>(expr); }
214 {
return computeInterface_impl<E,max_op>(expr, m_exprdata->multiBasis().topology().interfaces()); }
219 T
maxInterface(
const expr::_expr<E> & expr,
const intContainer & iFaces)
220 {
return computeInterface_impl<E,max_op>(expr, iFaces); }
226 {
return computeInterface_impl<E,min_op>(expr, m_exprdata->multiBasis().topology().interfaces()); }
231 T
minInterface(
const expr::_expr<E> & expr,
const intContainer & iFaces)
232 {
return computeInterface_impl<E,min_op>(expr, iFaces); }
237 T
min(
const expr::_expr<E> & expr)
238 {
return compute_impl<E,false,min_op>(expr); }
244 {
return compute_impl<E,true,min_op>(expr); }
249 template<
class E>
void
251 template<
class E,
int mode,
short_t d>
252 typename util::enable_if<E::ScalarValued,void>::type
254 eval(
const expr::_expr<E> & expr,
255 gsGridIterator<T,mode,d> & git,
258 template<
class E,
int mode,
short_t d>
259 typename util::enable_if<!E::ScalarValued,void>::type
260 eval(
const expr::_expr<E> & expr,
261 gsGridIterator<T,mode,d> & git,
270 typename util::enable_if<E::ScalarValued,gsAsConstMatrix<T> >::type
276 typename util::enable_if<!E::ScalarValued,gsAsConstMatrix<T> >::type
284 typename util::enable_if<E::ScalarValued,gsAsConstMatrix<T> >::type
286 evalIfc(
const expr::_expr<E> & testExpr,
const gsVector<T> & pt,
290 typename util::enable_if<!E::ScalarValued,gsAsConstMatrix<T> >::type
291 evalIfc(
const expr::_expr<E> & testExpr,
const gsVector<T> & pt,
296 template<
class E>
void
301 gsInfo <<
"Result:\n"<<
eval(expr,pt,patchInd) <<
"\n";
304 void info()
const { m_exprdata->print(); }
307 template<
class E>
void interpolate(
const expr::_expr<E> &)
324 geometryMap G, std::string
const & fn)
325 { writeParaview_impl<E,true>(expr,G,fn); }
333 std::string
const & fn)
334 { writeParaview_impl<E,false>(expr,m_exprdata->getMap(),fn); }
338 template<
class E,
bool gmap>
339 void writeParaview_impl(
const expr::_expr<E> & expr,
340 geometryMap G, std::string
const & fn);
344 template<
class E,
bool storeElWise,
class _op>
345 T compute_impl(
const expr::_expr<E> & expr);
347 template<
class E,
class _op>
348 T
computeBdr_impl(
const expr::_expr<E> & expr,
const bContainer & bdrlist);
350 template<
class E,
class _op>
351 T computeBdrBc_impl(
const bcRefList & BCs,
const expr::_expr<E> & expr);
353 template<
class E,
class _op>
354 T computeInterface_impl(
const expr::_expr<E> & expr,
const intContainer & iFaces);
357 void computeGrid_impl(
const expr::_expr<E> & expr,
const index_t patchInd);
361 static inline T init() {
return 0; }
362 static inline void acc(
const T contrib,
const T w, T & res)
363 { res += w * contrib; }
367 static inline T init() {
return math::limits::max(); }
368 static inline void acc (
const T contrib,
const T, T & res)
369 { res = math::min(contrib, res); }
373 static inline T init() {
return math::limits::min(); }
374 static inline void acc (
const T contrib,
const T, T & res)
375 { res = math::max(contrib, res); }
381 template<
class E,
bool storeElWise,
class _op>
382 T gsExprEvaluator<T>::compute_impl(
const expr::_expr<E> & expr)
384 m_value = _op::init();
387 m_elWise.resize(m_exprdata->multiBasis().totalElements());
392 const int tid = omp_get_thread_num();
393 const int nt = omp_get_num_threads();
397 gsQuadRule<T> QuRule;
398 gsVector<T> quWeights;
400 auto _arg = expr.val();
401 m_exprdata->parse(_arg);
407 for (
unsigned patchInd=0; patchInd < m_exprdata->multiBasis().nBases(); ++patchInd)
413 typename gsBasis<T>::domainIter domIt =
414 m_exprdata->multiBasis().piece(patchInd).makeDomainIterator();
415 m_exprdata->getElement().set(*domIt,quWeights);
422 patch_cnt += domIt->numElements();
424 for ( domIt->next(tid); domIt->good(); domIt->next(nt) )
426 for (; domIt->good(); domIt->next() )
430 QuRule.mapTo( domIt->lowerCorner(), domIt->upperCorner(),
431 m_exprdata->points(), quWeights);
434 m_exprdata->precompute(patchInd);
438 for (
index_t k = 0; k != quWeights.rows(); ++k)
439 _op::acc(_arg.eval(k), quWeights[k], elVal);
447 m_elWise[c++] = elVal;
451 # pragma omp critical (_op_acc)
452 _op::acc(elVal, 1, m_value);
461 template<
class E,
class _op>
463 const bContainer & bdrlist)
474 auto _arg = expr.val();
475 m_exprdata->parse(_arg);
480 m_value = _op::init();
483 for (
typename gsBoxTopology::const_biterator bit =
484 bdrlist.begin(); bit != bdrlist.end(); ++bit)
487 QuRule =
gsQuadrature::get(m_exprdata->multiBasis().basis(bit->patch), m_options,bit->direction());
490 typename gsBasis<T>::domainIter domIt =
491 m_exprdata->multiBasis().piece(bit->patch).makeDomainIterator(bit->side());
492 m_exprdata->getElement().set(*domIt,quWeights);
495 for (; domIt->good(); domIt->next() )
498 QuRule.
mapTo( domIt->lowerCorner(), domIt->upperCorner(),
499 m_exprdata->points(), quWeights);
502 m_exprdata->precompute(bit->patch, bit->side() );
506 for (
index_t k = 0; k != quWeights.rows(); ++k)
507 _op::acc(_arg.eval(k), quWeights[k], elVal);
509 _op::acc(elVal, 1, m_value);
518 template<
class E,
class _op>
520 const expr::_expr<E> & expr)
528 if ( BCs.empty() )
return 0;
529 m_exprdata->setMutSource(*BCs.front().get().function());
531 typename gsQuadRule<T>::uPtr QuRule;
534 auto _arg = expr.val();
535 m_exprdata->parse(_arg);
540 m_value = _op::init();
543 for (
typename bcRefList::const_iterator iit = BCs.begin(); iit!= BCs.end(); ++iit)
551 m_exprdata->setMutSource(*it->
function());
554 typename gsBasis<T>::domainIter domIt =
555 m_exprdata->multiBasis().basis(it->
patch()).makeDomainIterator(it->
side());
556 m_exprdata->getElement().set(*domIt,quWeights);
559 for (; domIt->good(); domIt->next() )
562 QuRule->
mapTo( domIt->lowerCorner(), domIt->upperCorner(),
563 m_exprdata->points(), quWeights);
565 if (m_exprdata->points().cols()==0)
569 m_exprdata->precompute(it->
patch(), it->
side() );
573 for (
index_t k = 0; k != quWeights.rows(); ++k)
574 _op::acc(_arg.eval(k), quWeights[k], elVal);
576 _op::acc(elVal, 1, m_value);
585 template<
class E,
class _op>
586 T gsExprEvaluator<T>::computeInterface_impl(
const expr::_expr<E> & expr,
const intContainer & iFaces)
588 auto arg_tpl = expr.val();
589 m_exprdata->parse(arg_tpl);
592 typename gsQuadRule<T>::uPtr QuRule;
593 gsVector<T> quWeights;
597 m_value = _op::init();
599 m_elWise.reserve(m_exprdata->multiBasis().topology().nInterfaces());
602 ifacemap interfaceMap;
603 for (
typename gsBoxTopology::const_iiterator iit =
604 iFaces.begin(); iit != iFaces.end(); ++iit)
606 const boundaryInterface & iFace = *iit;
607 const index_t patch1 = iFace.first().patch;
608 const index_t patch2 = iFace.second().patch;
610 if (iFace.type() == interaction::conforming)
611 interfaceMap = gsAffineFunction<T>::make( iFace.dirMap(), iFace.dirOrientation(),
612 m_exprdata->multiBasis().basis(patch1).support(),
613 m_exprdata->multiBasis().basis(patch2).support() );
615 interfaceMap = gsCPPInterface<T>::make(m_exprdata->multiPatch(), m_exprdata->multiBasis(), iFace);
623 m_options, iFace.first().side().direction());
626 typename gsBasis<T>::domainIter domIt =
628 m_exprdata->multiBasis().
piece(patch1).makeDomainIterator(iFace.first().side());
629 m_exprdata->getElement().set(*domIt,quWeights);
633 for (; domIt->good(); domIt->next() )
636 QuRule->mapTo( domIt->lowerCorner(), domIt->upperCorner(),
637 m_exprdata->points(), quWeights);
638 interfaceMap->eval_into(m_exprdata->points(), m_exprdata->pointsIfc());
641 m_exprdata->precompute(iFace);
644 for (
index_t k = 0; k != quWeights.rows(); ++k)
646 _op::acc(arg_tpl.eval(k), quWeights[k], elVal);
649 _op::acc(elVal, 1, m_value);
651 m_elWise.push_back( elVal );
659 template<
class E,
int mode,
short_t d>
660 typename util::enable_if<E::ScalarValued,void>::type
662 gsGridIterator<T,mode,d> & git,
668 auto _arg = expr.val();
669 m_exprdata->parse(_arg);
671 m_elWise.reserve(git.numPoints());
673 for( git.reset(); git; ++git )
675 m_exprdata->points() = *git;
676 m_exprdata->precompute(patchInd);
677 m_elWise.push_back( _arg.eval(0) );
683 m_value = m_elWise.back();
687 template<
class E,
int mode,
short_t d>
688 typename util::enable_if<!E::ScalarValued,void>::type
690 gsGridIterator<T,mode,d> & git,
696 m_exprdata->parse(expr);
698 m_elWise.reserve(git.numPoints());
700 for( git.reset(); git; ++git )
702 m_exprdata->points() = *git;
703 m_exprdata->precompute(patchInd);
706 m_elWise.insert(m_elWise.end(), tmp.data(), tmp.data()+tmp.size());
714 typename util::enable_if<E::ScalarValued,gsAsConstMatrix<T> >::type
718 auto _arg = expr.val();
719 m_exprdata->parse(_arg);
721 m_exprdata->points() = pt;
722 m_exprdata->precompute(patchInd);
726 m_value = _arg.eval(0);
727 return gsAsConstMatrix<T>(&m_value,1,1);
732 typename util::enable_if<!E::ScalarValued,gsAsConstMatrix<T> >::type
736 m_exprdata->parse(expr);
737 m_exprdata->points() = pt;
738 m_exprdata->precompute(patchInd);
742 gsMatrix<T> tmp = expr.eval(0);
748 m_elWise.resize(r*c);
749 gsAsMatrix<T>(m_elWise, r, c) = tmp;
750 return gsAsConstMatrix<T>(m_elWise, r, c);
810 typename util::enable_if<E::ScalarValued,gsAsConstMatrix<T> >::type
811 gsExprEvaluator<T>::evalIfc(
const expr::_expr<E> & expr,
const gsVector<T> & pt,
812 const boundaryInterface & ifc)
814 auto _arg = expr.val();
815 m_exprdata->parse(_arg);
818 const bool flipSide = m_options.askSwitch(
"flipSide",
false);
819 const boundaryInterface & iFace = flipSide ? ifc.getInverse() : ifc;
821 const index_t patch1 = iFace.first().patch;
822 const index_t patch2 = iFace.second().patch;
824 ifacemap interfaceMap;
825 if (iFace.type() == interaction::conforming)
826 interfaceMap = gsAffineFunction<T>::make( iFace.dirMap(), iFace.dirOrientation(),
827 m_exprdata->multiBasis().basis(patch1).support(),
828 m_exprdata->multiBasis().basis(patch2).support() );
830 interfaceMap = gsCPPInterface<T>::make(m_exprdata->multiPatch(), m_exprdata->multiBasis(), iFace);
832 m_exprdata->points() = pt;
833 interfaceMap->eval_into(m_exprdata->points(), m_exprdata->pointsIfc());
834 m_exprdata->precompute(iFace);
838 m_value = _arg.eval(0);
839 return gsAsConstMatrix<T>(&m_value,1,1);
844 typename util::enable_if<!E::ScalarValued,gsAsConstMatrix<T> >::type
845 gsExprEvaluator<T>::evalIfc(
const expr::_expr<E> & expr,
const gsVector<T> & pt,
846 const boundaryInterface & ifc)
848 m_exprdata->parse(expr);
850 const bool flipSide = m_options.askSwitch(
"flipSide",
false);
851 const boundaryInterface & iFace = flipSide ? ifc.getInverse() : ifc;
853 const index_t patch1 = iFace.first().patch;
854 const index_t patch2 = iFace.second().patch;
856 ifacemap interfaceMap;
857 if (iFace.type() == interaction::conforming)
858 interfaceMap = gsAffineFunction<T>::make( iFace.dirMap(), iFace.dirOrientation(),
859 m_exprdata->multiBasis().basis(patch1).support(),
860 m_exprdata->multiBasis().basis(patch2).support() );
862 interfaceMap = gsCPPInterface<T>::make(m_exprdata->multiPatch(), m_exprdata->multiBasis(), iFace);
864 m_exprdata->points() = pt;
865 interfaceMap->eval_into(m_exprdata->points(), m_exprdata->pointsIfc());
867 m_exprdata->precompute(iFace);
871 gsMatrix<T> tmp = expr.eval(0);
877 m_elWise.resize(r*c);
878 gsAsMatrix<T>(m_elWise, r, c) = tmp;
879 return gsAsConstMatrix<T>(m_elWise, r, c);
884 template<
class E,
bool gmap>
885 void gsExprEvaluator<T>::writeParaview_impl(
const expr::_expr<E> & expr,
887 std::string
const & fn)
890 m_exprdata->parse(expr);
893 const index_t n = m_exprdata->multiBasis().nBases();
897 std::stringstream file;
899 file <<
"<?xml version=\"1.0\"?>\n";
900 file <<
"<VTKFile type=\"Collection\" version=\"0.1\">";
901 file <<
"<Collection>\n";
907 std::string fileName;
909 gsMatrix<T> pts, vals, ab;
911 const bool mesh = m_options.askSwitch(
"plot.elements");
913 for (
index_t i=0; i != n; ++i )
916 unsigned nPts = m_options.askInt(
"plot.npts", 1000);
918 ab = G.source().piece(i).support();
919 gsGridIterator<T,CUBE> pt(ab, nPts);
921 nPts = pt.numPoints();
922 vals = allValues(m_elWise.size()/nPts, nPts);
927 pts = allValues(m_elWise.size()/nPts, nPts);
930 gsWriteParaviewTPgrid( gmap ? pts : pt.toMatrix(),
932 pt.numPointsCwise(), fileName );
936 GISMO_ASSERT(counter!=-1,
"Error: collection has been already saved." );
937 file <<
"<DataSet part=\""<< counter++ <<
"\" file=\""<<fileName<<
".vts"<<
"\"/>\n";
942 gsMesh<T> msh(m_exprdata->multiBasis().basis(i), 2);
943 static_cast<const gsGeometry<T>&
>(G.source().piece(i)).evaluateMesh(msh);
944 gsWriteParaview(msh, fileName +
"_mesh",
false);
947 GISMO_ASSERT(counter!=-1,
"Error: collection has been already saved." );
948 file <<
"<DataSet part=\""<< counter++ <<
"\" file=\""<<fileName<<
"_mesh.vtp"<<
"\"/>\n";
955 GISMO_ASSERT(counter!=-1,
"Error: gsParaviewCollection::save() already called." );
956 file <<
"</Collection>\n";
957 file <<
"</VTKFile>\n";
959 std::string mfn = fn +
".pvd";
961 std::ofstream f( mfn.c_str() );
T integralBdr(const expr::_expr< E > &expr)
Definition: gsExprEvaluator.h:169
Provides a mapping between the corresponding sides of two patches sharing an interface.
function_ptr function() const
Returns the function data pointer of the boundary condition.
Definition: gsBoundaryConditions.h:254
T integral(const expr::_expr< E > &expr)
Calculates the integral of the expression expr on the whole integration domain.
Definition: gsExprEvaluator.h:154
Definition: gsExprAssembler.h:30
Class representing a reference quadrature rule.
Definition: gsQuadRule.h:28
#define GISMO_NO_IMPLEMENTATION
Definition: gsDebug.h:129
Definition: gsExpressions.h:96
void setIntegrationElements(const gsMultiBasis< T > &mesh)
Sets the domain of integration.
Definition: gsExprEvaluator.h:110
Provides a mapping between the corresponding sides of two patches sharing an interface, by means of a Closest Point Projection.
std::string to_string(const C &value)
Converts value to string, assuming "operator<<" defined on C.
Definition: gsUtils.h:56
boxSide side() const
Returns the side to which this boundary condition refers to.
Definition: gsBoundaryConditions.h:269
#define index_t
Definition: gsConfig.h:32
static gsQuadRule< T >::uPtr getPtr(const gsBasis< T > &basis, const gsOptionList &options, short_t fixDir=-1)
Constructs a quadrature rule based on input options.
Definition: gsQuadrature.h:61
const std::vector< T > & elementwise() const
Returns an std::vector containing the last computed values per element.
Definition: gsExprEvaluator.h:99
const gsBasis< T > & piece(const index_t k) const
Returns the piece(s) of the function(s) at subdomain k.
Definition: gsBasis.h:106
T maxInterface(const expr::_expr< E > &expr, const intContainer &iFaces)
Definition: gsExprEvaluator.h:219
T computeBdr_impl(const expr::_expr< E > &expr, const bContainer &bdrlist)
Definition: gsExprEvaluator.h:462
memory::unique_ptr< gsFunction > uPtr
Unique pointer for gsFunction.
Definition: gsFunction.h:68
T integralElWise(const expr::_expr< E > &expr)
Calculates the integral of the expression expr on each element.
Definition: gsExprEvaluator.h:159
#define GISMO_ASSERT(cond, message)
Definition: gsDebug.h:89
index_t patch() const
Returns the patch to which this boundary condition refers to.
Definition: gsBoundaryConditions.h:266
T integralInterface(const expr::_expr< E > &expr)
Definition: gsExprEvaluator.h:188
variable getVariable(const gsFunctionSet< T > &func, index_t dim=1)
Registers func as a variable and returns a handle to it.
Definition: gsExprEvaluator.h:124
T maxElWise(const expr::_expr< E > &expr)
Definition: gsExprEvaluator.h:207
void addInt(const std::string &label, const std::string &desc, const index_t &value)
Adds a option named label, with description desc and value value.
Definition: gsOptionList.cpp:201
static gsQuadRule< T > get(const gsBasis< T > &basis, const gsOptionList &options, short_t fixDir=-1)
Constructs a quadrature rule based on input options.
Definition: gsQuadrature.h:48
Creates a mapped object or data pointer to a vector without copying data.
Definition: gsLinearAlgebra.h:129
Holds a set of patch-wise bases and their topology information.
Definition: gsMultiBasis.h:36
T minInterface(const expr::_expr< E > &expr, const intContainer &iFaces)
Definition: gsExprEvaluator.h:231
void testEval(const expr::_expr< E > &expr, const gsVector< T > &pt, const index_t patchInd=0)
Definition: gsExprEvaluator.h:297
element getElement()
Returns a handle to an isogeometric element.
Definition: gsExprEvaluator.h:132
T integralInterface(const expr::_expr< E > &expr, const intContainer &iFaces)
Definition: gsExprEvaluator.h:195
expr::gsComposition< T > getVariable(const gsFunctionSet< T > &func, geometryMap G)
Registers func as a variable defined on G and returns a handle to it.
Definition: gsExprEvaluator.h:128
#define gsInfo
Definition: gsDebug.h:43
Interface for the set of functions defined on a domain (the total number of functions in the set equa...
Definition: gsFuncData.h:23
void eval(const expr::_expr< E > &expr, gsGridIterator< T, mode, d > &git, const index_t patchInd=0)
Container class for a set of geometry patches and their topology, that is, the interface connections ...
Definition: gsMultiPatch.h:33
Generic evaluator of isogeometric expressions.
Definition: gsExprEvaluator.h:38
T min(const expr::_expr< E > &expr)
Definition: gsExprEvaluator.h:237
Creates a mapped object or data pointer to a const matrix without copying data.
Definition: gsLinearAlgebra.h:127
T integralBdr(const expr::_expr< E > &expr, const bContainer &bdrlist)
Definition: gsExprEvaluator.h:176
Creates a variety of quadrature rules.
T integralBdrBc(const bcRefList &BCs, const expr::_expr< E > &expr)
Definition: gsExprEvaluator.h:182
virtual void mapTo(const gsVector< T > &lower, const gsVector< T > &upper, gsMatrix< T > &nodes, gsVector< T > &weights) const
Maps quadrature rule (i.e., points and weights) from the reference domain to an element.
Definition: gsQuadRule.h:177
gsAsConstMatrix< T > allValues(index_t nR, index_t nC) const
Returns the last computed values per element, resized as a matrix.
Definition: gsExprEvaluator.h:105
Enable optimizations based on the assumption that all evaluation points are in the same bezier domain...
Definition: gsForwardDeclarations.h:89
Class that defines a boundary condition for a side of a patch for some unknown variable of a PDE...
Definition: gsBoundaryConditions.h:106
T minInterface(const expr::_expr< E > &expr)
Definition: gsExprEvaluator.h:225
T max(const expr::_expr< E > &expr)
Definition: gsExprEvaluator.h:201
geometryMap getMap(const gsFunctionSet< T > &gm)
Registers g as an isogeometric geometry map and return a handle to it.
Definition: gsExprEvaluator.h:120
void addReal(const std::string &label, const std::string &desc, const Real &value)
Adds a option named label, with description desc and value value.
Definition: gsOptionList.cpp:211
gsAsConstVector< T > allValues() const
Returns a vector containing the last computed values per element.
Definition: gsExprEvaluator.h:102
T maxInterface(const expr::_expr< E > &expr)
Definition: gsExprEvaluator.h:213
void calcSqrt()
Calculates the square root of the lastly computed quantities (eg. integrals)
Definition: gsExprEvaluator.h:135
Creates a mapped object or data pointer to a const vector without copying data.
Definition: gsLinearAlgebra.h:130
Struct which represents an interface between two patches.
Definition: gsBoundary.h:649
size_t nValues() const
The number of lastly computed values.
Definition: gsExprEvaluator.h:96
Class which holds a list of parameters/options, and provides easy access to them. ...
Definition: gsOptionList.h:32
T minElWise(const expr::_expr< E > &expr)
Definition: gsExprEvaluator.h:243
void writeParaview(const expr::_expr< E > &expr, geometryMap G, std::string const &fn)
Creates a paraview file named fn containing valies of the.
Definition: gsExprEvaluator.h:323
void writeParaview(const expr::_expr< E > &expr, std::string const &fn)
Creates a paraview file named fn containing valies of the.
Definition: gsExprEvaluator.h:332
void addSwitch(const std::string &label, const std::string &desc, const bool &value)
Adds a option named label, with description desc and value value.
Definition: gsOptionList.cpp:235
geometryMap getMap(const gsMultiPatch< T > &mp)
Registers mp as an isogeometric geometry map and return a handle to it.
Definition: gsExprEvaluator.h:116
short_t direction() const
Returns the parametric direction orthogonal to this side.
Definition: gsBoundary.h:113
Definition: gsExpressions.h:114
T value() const
Returns the last computed value.
Definition: gsExprEvaluator.h:93
void calcRoot(const index_t p)
Calculates the p-th root of the lastly computed quantities (eg. integrals)
Definition: gsExprEvaluator.h:143