00001 /****************************************************************************** 00002 00003 Copyright 2013 Scientific Computation Research Center, 00004 Rensselaer Polytechnic Institute. All rights reserved. 00005 00006 The LICENSE file included with this distribution describes the terms 00007 of the SCOREC Non-Commercial License this program is distributed under. 00008 00009 *******************************************************************************/ 00010 #ifndef MA_SOLUTIONTRANSFER_H 00011 #define MA_SOLUTIONTRANSFER_H 00012 00016 #include <apf.h> 00017 #include "maMesh.h" 00018 00019 namespace ma { 00020 00027 class SolutionTransfer 00028 { 00029 public: 00031 virtual ~SolutionTransfer(); 00034 virtual bool hasNodesOn(int dimension) = 0; 00045 virtual void onVertex( 00046 apf::MeshElement* parent, 00047 Vector const& xi, 00048 Entity* vert); 00058 virtual void onRefine( 00059 Entity* parent, 00060 EntityArray& newEntities); 00069 virtual void onCavity( 00070 EntityArray& oldElements, 00071 EntityArray& newEntities); 00073 int getTransferDimension(); 00074 }; 00075 00080 SolutionTransfer* createFieldTransfer(apf::Field* f); 00081 00085 class SolutionTransfers : public SolutionTransfer 00086 { 00087 public: 00088 SolutionTransfers(); 00089 virtual ~SolutionTransfers(); 00091 void add(SolutionTransfer* t); 00092 virtual bool hasNodesOn(int dimension); 00093 virtual void onVertex( 00094 apf::MeshElement* parent, 00095 Vector const& xi, 00096 Entity* vert); 00097 virtual void onRefine( 00098 Entity* parent, 00099 EntityArray& newEntities); 00100 virtual void onCavity( 00101 EntityArray& oldElements, 00102 EntityArray& newEntities); 00103 private: 00104 typedef std::vector<SolutionTransfer*> Transfers; 00105 Transfers transfers; 00106 }; 00107 00111 class AutoSolutionTransfer : public SolutionTransfers 00112 { 00113 public: 00114 AutoSolutionTransfer(Mesh* m); 00115 }; 00116 00117 } 00118 00119 #endif