00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 
00025 
00026 
00027 
00028 
00029 
00030 
00031 
00032 #include "SundanceTempStack.hpp"
00033 #include "SundanceEvalVector.hpp"
00034 #include "Teuchos_Time.hpp"
00035 #include "Teuchos_TimeMonitor.hpp"
00036 
00037 using namespace Sundance;
00038 using namespace Sundance;
00039 
00040 using namespace Sundance;
00041 using namespace Sundance;
00042 using namespace Teuchos;
00043 
00044 
00045 
00046 
00047 
00048 TempStack::TempStack(int vecSize)
00049   : 
00050   vecSize_(vecSize),
00051   stack_(),
00052   numVecsAllocated_(0),
00053   numVecsAccessed_(0)
00054 {}
00055 
00056 TempStack::TempStack()
00057   : 
00058   vecSize_(0),
00059   stack_(),
00060   numVecsAllocated_(0),
00061   numVecsAccessed_(0)
00062 {}
00063 
00064 
00065 void TempStack::pushVectorData(const RCP<Array<double> >& vecData)
00066 {
00067   stack_.push(vecData);
00068 }
00069 
00070 RCP<Array<double> > TempStack::popVectorData()
00071 {
00072   RCP<Array<double> > data;
00073   if (stack_.empty())
00074     {
00075       numVecsAllocated_++;
00076       data = rcp(new Array<double>(vecSize_));
00077     }
00078   else
00079     {
00080       data = stack_.top();
00081       data->resize(vecSize_);
00082       stack_.pop();
00083     }
00084   numVecsAccessed_++;
00085   return data;
00086 }
00087 
00088 
00089 
00090 void TempStack::resetCounter()
00091 {
00092   numVecsAllocated_=0;
00093   numVecsAccessed_=0;
00094 }
00095 
00096