MOAB: Mesh Oriented datABase
(version 5.4.1)
|
00001 #ifndef RELAXATION_SMOOTHER_HPP 00002 #define RELAXATION_SMOOTHER_HPP 00003 00004 #include "Mesquite.hpp" 00005 #include "VertexPatches.hpp" 00006 #include "VertexMover.hpp" 00007 00008 namespace MBMesquite 00009 { 00010 /**\brief Base class for LaPlacian and other relaxation smoothers */ 00011 class RelaxationSmoother : public VertexMover 00012 { 00013 public: 00014 /** 00015 * \param OF For many relaxation solvers (e.g. Laplacian) 00016 * this ObjectiveFunction is used only to evaluate user-specified 00017 * termination criteria that require an objective function. 00018 */ 00019 MESQUITE_EXPORT 00020 RelaxationSmoother( ObjectiveFunction* OF = NULL ) : VertexMover( OF ) {} 00021 00022 MESQUITE_EXPORT 00023 virtual ~RelaxationSmoother(); 00024 00025 MESQUITE_EXPORT 00026 PatchSet* get_patch_set() 00027 { 00028 return &patchSet; 00029 } 00030 00031 protected: 00032 MESQUITE_EXPORT 00033 virtual void initialize( PatchData& pd, MsqError& err ); 00034 00035 MESQUITE_EXPORT 00036 virtual void optimize_vertex_positions( PatchData& pd, MsqError& err ) = 0; 00037 00038 MESQUITE_EXPORT 00039 virtual void initialize_mesh_iteration( PatchData& pd, MsqError& err ); 00040 00041 MESQUITE_EXPORT 00042 virtual void terminate_mesh_iteration( PatchData& pd, MsqError& err ); 00043 00044 MESQUITE_EXPORT 00045 virtual void cleanup(); 00046 00047 private: 00048 VertexPatches patchSet; 00049 }; 00050 00051 } // namespace MBMesquite 00052 00053 #endif