FEBio  1.5.0
FEBio/FEMaterialPoint.h
00001 #pragma once
00002 
00003 #include "mat3d.h"
00004 #include "DumpFile.h"
00005 #include <vector>
00006 using namespace std;
00007 
00008 //-----------------------------------------------------------------------------
00010 
00016 
00017 class FEMaterialPoint
00018 {
00019 public:
00020         FEMaterialPoint(FEMaterialPoint* ppt = 0) : m_pt(ppt){}
00021         virtual ~FEMaterialPoint() { if (m_pt) { delete m_pt; m_pt = 0; } }
00022 
00024         virtual void Init(bool bflag) = 0;
00025 
00026         virtual FEMaterialPoint* Copy() = 0;
00027 
00028         virtual void Serialize(DumpFile& ar) = 0;
00029 
00030         template <class T>
00031         T* ExtractData()
00032         {
00033                 T* p = dynamic_cast<T*>(this);
00034                 if (p) return p; 
00035                 else
00036                 {
00037                         if (m_pt) return m_pt->ExtractData<T>();
00038                         else return 0;
00039                 }
00040         }
00041 
00042 protected:
00043         FEMaterialPoint*        m_pt;   //<! nested point data
00044 
00045 public:
00046         static double time;     // time value
00047         static double dt; // time increment
00048 };