#pragma once #include "BgMesh/BgMesh.hpp" #include "Implict/ImplictModel.hpp" #include #include #include namespace ImplictSIM { enum class HeightDir { X = 0, Y = 1, Z = 2 }; typedef std::pair Interval; template class VolumeIntegral { public: typedef double (*integrandFunc)(const Eigen::Vector& point); int dimension; std::vector> phiFuncs; std::vector si; BgMesh meshU; integrandFunc f; bool flagS; int GaussOrderQ; public: VolumeIntegral(int dimension_, std::vector>& phiFuncs_, const std::vector& si_, const BgMesh& meshU_, const integrandFunc f_, bool flagS_, int GaussOrderQ_) : dimension(dimension_) , phiFuncs(phiFuncs_) , si(si_) , meshU(meshU_) , f(f_) , flagS(flagS_) , GaussOrderQ(GaussOrderQ_) { } void findRoots(ImplictModel phiFunc,int si, HeightDir k, Interval interval, Eigen::Vector x, std::vector roots,double eps); void getOneIntegrationOnInterval(ImplictModel phiFunc, int si, HeightDir k, Interval interval, Eigen::Vector x, std::vector& hDirPoints); void getIntegration(); }; }; // namespace ImplictSIM