#ifndef FILE_NGSOBJECT #define FILE_NGSOBJECT /*********************************************************************/ /* File: ngsobject.hh */ /* Author: Joachim Schoeberl */ /* Date: 2. Aug. 2000 */ /*********************************************************************/ /** NG-Solve base class */ class NGS_Object { protected: string name; const MeshAccess & ma; double time; public: /// NGS_Object (const MeshAccess & ama, const string & aname = "noname") : name(aname), ma(ama), time(0) { ; } virtual ~NGS_Object () { ; } /// void SetName (const string & aname) { name = aname; } /// const string & GetName () const { return name; } /// const MeshAccess & GetMeshAccess() const { return ma; } virtual string GetClassName () const { return typeid(*this).name(); } virtual void PrintReport (ostream & ost) { ost << typeid(*this).name(); } virtual void MemoryUsage (ARRAY & mu) const { cout << "MemoryUsage not implemented for class " << GetClassName() << endl; } double GetTime () const { return time; } void SetTime (double t) { time = t; } }; #define CreateVecObject1S(dest, Object, dim, SCAL, arg) \ switch (dim) { \ case 1: dest = new Object(arg); break; \ case 2: dest = new Object >(arg); break; \ case 3: dest = new Object >(arg); break; \ case 4: dest = new Object >(arg); break; \ case 5: dest = new Object >(arg); break; \ case 6: dest = new Object >(arg); break; \ case 7: dest = new Object >(arg); break; \ case 8: dest = new Object >(arg); break; \ case 9: dest = new Object >(arg); break; \ case 12: dest = new Object >(arg); break; \ case 18: dest = new Object >(arg); break; \ case 24: dest = new Object >(arg); break; \ } #define CreateVecObject1(dest, Object, dim, iscomplex, arg) \ if (iscomplex) \ CreateVecObject1S (dest, Object, dim, Complex, arg) \ else \ CreateVecObject1S (dest, Object, dim, double, arg); #define CreateVecObject2S(dest, Object, dim, SCAL, arg, arg2) \ switch (dim) { \ case 1: dest = new Object(arg, arg2); break; \ case 2: dest = new Object >(arg, arg2); break; \ case 3: dest = new Object >(arg, arg2); break; \ case 4: dest = new Object >(arg, arg2); break; \ case 5: dest = new Object >(arg, arg2); break; \ case 6: dest = new Object >(arg, arg2); break; \ case 7: dest = new Object >(arg, arg2); break; \ case 8: dest = new Object >(arg, arg2); break; \ case 9: dest = new Object >(arg, arg2); break; \ case 12: dest = new Object >(arg, arg2); break; \ case 18: dest = new Object >(arg, arg2); break; \ case 24: dest = new Object >(arg, arg2); break; \ } #define CreateVecObject2(dest, Object, dim, iscomplex, arg, arg2) \ if (iscomplex) \ CreateVecObject2S (dest, Object, dim, Complex, arg, arg2) \ else \ CreateVecObject2S (dest, Object, dim, double, arg, arg2); #define CreateVecObject3S(dest, Object, dim, SCAL, arg, arg2, arg3) \ switch (dim) { \ case 1: dest = new Object(arg, arg2, arg3); break; \ case 2: dest = new Object >(arg, arg2, arg3); break; \ case 3: dest = new Object >(arg, arg2, arg3); break; \ case 4: dest = new Object >(arg, arg2, arg3); break; \ case 5: dest = new Object >(arg, arg2, arg3); break; \ case 6: dest = new Object >(arg, arg2, arg3); break; \ case 7: dest = new Object >(arg, arg2, arg3); break; \ case 8: dest = new Object >(arg, arg2, arg3); break; \ case 9: dest = new Object >(arg, arg2, arg3); break; \ case 12: dest = new Object >(arg, arg2, arg3); break; \ case 18: dest = new Object >(arg, arg2, arg3); break; \ case 24: dest = new Object >(arg, arg2, arg3); break; \ } #define CreateVecObject3(dest, Object, dim, iscomplex, arg, arg2, arg3) \ if (iscomplex) \ CreateVecObject3S (dest, Object, dim, Complex, arg, arg2, arg3) \ else \ CreateVecObject3S (dest, Object, dim, double, arg, arg2, arg3); template