123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358 |
-
-
-
-
-
-
- #ifndef OCTREEGRID_INC
- #define OCTREEGRID_INC
-
-
-
- #ifdef LEMMAUSEVTK
- #include "grid.h"
- #include "vtkHyperOctree.h"
- #include "vtkHyperOctreeCursor.h"
- #include "vtkHyperOctreeSampleFunction.h"
- #include "vtkImplicitFunction.h"
- #include "vtkCell.h"
- #include "vtkGenericCell.h"
-
- #ifdef LEMMA_SINGLE_PRECISION
- #include "vtkFloatArray.h"
- #else
- #include "vtkDoubleArray.h"
- #endif
-
- #include "kernel.h"
- #include "receiverpoints.h"
- #include "receivercubes.h"
- #include "layeredearth.h"
-
- #include "inversesolver.h"
-
-
-
-
- namespace Lemma {
-
-
- class InverseSolver ;
-
-
-
-
-
-
- class OctreeGrid : public Grid {
-
- friend class InverseSolver;
-
-
- friend std::ostream &operator<<(std::ostream &stream,
- const OctreeGrid &ob);
-
- public:
-
-
-
-
-
- static OctreeGrid* New();
-
-
-
- void Delete();
-
-
-
-
-
-
-
-
- void SetKernel(Kernel* kern);
-
-
-
-
-
- void SetLayeredEarth(LayeredEarth* model1d);
-
-
-
- void SetSize(const Vector3r& size);
-
-
-
- void SetOrigin(const Vector3r& origin);
-
-
-
- void SetMinimumDepth(const Real& depth);
-
-
-
- void FillMeshWithKernel();
-
-
-
- void FillMeshWithKernel(vtkImplicitFunction* Impl);
-
-
-
- void SetSize(const Real &x, const Real &y, const Real &z);
-
-
-
- void GenerateMesh(const Real &tol);
-
-
-
-
- void GenerateMesh(const Real& tol, vtkImplicitFunction* Impl,
- const Real& impltol);
-
-
-
- void GenerateMesh(const Real& tol, vtkImplicitFunction* Impl,
- vtkHyperOctreeSampleFunction* OctSamp);
-
-
-
- Complex EvaluateKernelOnMesh();
-
-
-
- void ReceiverCubeRepresentation();
-
-
- ReceiverCubes* GetReceiverCubes();
-
-
- Complex GetKernelSum();
-
-
-
- vtkHyperOctree* GetVtkHyperOctree( );
-
-
-
- void TraverseAndCall(InverseSolver* Inverse);
-
-
-
- void TraverseAndCall( vtkImplicitFunction* Impl );
-
-
-
- void TraverseLeaves(vtkImplicitFunction* Impl);
-
-
-
- void FollowExistingTree(vtkHyperOctree* Leader, vtkHyperOctreeCursor* LeaderCursor,
- vtkImplicitFunction* Impl);
-
-
-
-
-
- template <class Derived>
- void SampleScalarFromLayeredEarth(LayeredEarth* earth,
- Real (Derived::*fcnptr)(const int& id), const std::string &name) {
- std::cerr << "In octreegrid.h SampleScalrFromLayeredEarth FastDelegate method was "
- << "removed, need to fix with move semantics or function pointer." << std::endl;
- exit(3);
-
-
-
- }
-
-
-
- void CursorToRoot();
-
-
-
- protected:
-
-
-
-
- OctreeGrid (const std::string &name);
-
-
- ~OctreeGrid ();
-
-
-
- void Release();
-
-
-
-
-
- void SetLeafDataFromGridCreation();
-
-
-
- void GetPosition( Real* p );
-
-
-
-
-
-
-
-
-
-
-
- void EvaluateKids( );
-
-
-
- void EvaluateKids( Complex kval );
-
-
-
- void EvaluateKids (vtkImplicitFunction* Impl);
-
-
-
- void EvaluateKids (const Real& fval, vtkImplicitFunction* Impl);
-
-
-
- void EvaluateKidsStatic(const Real& fval);
-
-
-
- void SampleFunction(vtkImplicitFunction* Impl);
-
-
-
- void FillGrid( );
-
-
-
- void FillGrid(vtkImplicitFunction* Impl);
-
-
-
- void AssembleReceiverCubes( );
-
-
-
- void SampleScalar();
-
-
-
-
-
-
-
-
- private:
-
- Vector3r Size;
- Vector3r Origin;
- Vector3r step;
- Vector3r cpos;
-
- int level;
- int maxlevel;
- int index;
- int counter;
-
- Real cvol;
- Real tvol;
- Real tol;
- Complex KernelSum;
-
- Eigen::Matrix<Real, 8, 3> Posadd;
-
- std::vector<Real> leafdata;
- std::vector<vtkIdType> leafids;
-
- Kernel *SenseKernel;
- ReceiverCubes *Cubes;
- LayeredEarth *Model1D;
-
- vtkHyperOctree *Octree;
- vtkHyperOctreeCursor *Cursor;
- vtkHyperOctreeSampleFunction *OctSamp;
-
- #ifdef LEMMA_SINGLE_PRECISION
- vtkFloatArray *KernelArray;
- #else
- vtkDoubleArray *KernelArray;
- #endif
- vtkDataArray *SampleArray;
-
- };
-
- }
-
- #endif
- #endif
|