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

ConcentrationObserver.cpp

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

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