Main Page   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members  

CellAverageObserver.cpp

Go to the documentation of this file.
00001 // CellAverageObserver.cpp: implementation of the CellAverageObserver class.
00002 //
00004 
00005 #include "CellAverageObserver.h"
00006 
00008 // Construction/Destruction
00010 
00011 CellAverageObserver::CellAverageObserver(int numberOfChemicals, int numberOfTimeSteps, int numberOfCells)
00012 {
00013         this->numberOfChemicals = numberOfChemicals;
00014         this->numberOfTimeSteps = numberOfTimeSteps;
00015         this->numberOfCells = numberOfCells;
00016 
00017         averageConcentration = new double *[numberOfChemicals];
00018         averageConcentration[0] = new double[numberOfChemicals*numberOfTimeSteps];
00019 
00020         for (int chem = 1; chem < numberOfChemicals; chem++)
00021         {
00022                 averageConcentration[chem] = &(averageConcentration[0][chem*numberOfTimeSteps]);
00023         }
00024 
00025         ZeroConcentrations();
00026 }
00027 
00028 CellAverageObserver::~CellAverageObserver()
00029 {
00030         delete [] averageConcentration[0];
00031         delete [] averageConcentration;
00032 }
00033 
00034 void CellAverageObserver::Update(Subject *theChangedSubject)
00035 {
00036         // cast dynamically for safety
00037         // CReactionMover *reactionMover = dynamic_cast<CReactionMover *>(theChangedSubject);
00038 
00039         // static cast may be dangerous
00040         CReactionMover *reactionMover = (CReactionMover *)theChangedSubject;
00041         ReactionNetwork *reactionNetwork = reactionMover->GetReactionNetwork();
00042 
00043         int count = reactionMover->GetTimeCount();
00044         //cout << "count = " << count << endl;
00045         assert(count <= numberOfTimeSteps);
00046  
00047         for (int chem = 0; chem < reactionNetwork->GetNumberOfChemicals(); chem++)
00048         {       
00049                 averageConcentration[chem][count-1] += (reactionNetwork->GetChemical(chem)->GetAmount())/numberOfCells;                 
00050         }
00051                                 
00052 }
00053 
00054 
00055 void CellAverageObserver::ZeroConcentrations()
00056 {
00057         for (int chem = 0; chem < numberOfChemicals; chem++)
00058         {
00059                 for (int count = 0; count < numberOfTimeSteps; count++)
00060                 {
00061                         averageConcentration[chem][count] = 0;
00062                 }
00063         }
00064 }

Generated on Mon Nov 3 09:37:39 2003 by doxygen1.2.14 written by Dimitri van Heesch, © 1997-2002