-
Dilawar Singh authored6753dfb2
ZombieReac.cpp 4.61 KiB
/**********************************************************************
** This program is part of 'MOOSE', the
** Messaging Object Oriented Simulation Environment.
** Copyright (C) 2003-2010 Upinder S. Bhalla. and NCBS
** It is made available under the terms of the
** GNU Lesser General Public License version 2.1
** See the file COPYING.LIB for the full notice.
**********************************************************************/
#include "header.h"
#include "ReacBase.h"
#include "lookupVolumeFromMesh.h"
#include "RateTerm.h"
#include "FuncTerm.h"
#include "SparseMatrix.h"
#include "KinSparseMatrix.h"
#include "VoxelPoolsBase.h"
#include "../mesh/VoxelJunction.h"
#include "XferInfo.h"
#include "ZombiePoolInterface.h"
#include "Stoich.h"
#include "ZombieReac.h"
// #include "Reac.h"
// #include "ElementValueFinfo.h"
// #include "DataHandlerWrapper.h"
const Cinfo* ZombieReac::initCinfo()
{
//////////////////////////////////////////////////////////////
// Field Definitions: All inherited.
//////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////
// MsgDest Definitions: All inherited.
//////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////
// SharedMsg Definitions: All inherited
//////////////////////////////////////////////////////////////
static Dinfo< ZombieReac > dinfo( true );
static Cinfo zombieReacCinfo (
"ZombieReac",
ReacBase::initCinfo(),
0,
0,
&dinfo
);
return &zombieReacCinfo;
}
//////////////////////////////////////////////////////////////
// Class definitions
//////////////////////////////////////////////////////////////
static const Cinfo* zombieReacCinfo = ZombieReac::initCinfo();
static const SrcFinfo2< double, double >* subOut =
dynamic_cast< const SrcFinfo2< double, double >* >(
zombieReacCinfo->findFinfo( "subOut" ) );
static const SrcFinfo2< double, double >* prdOut =
dynamic_cast< const SrcFinfo2< double, double >* >(
zombieReacCinfo->findFinfo( "prdOut" ) );
ZombieReac::ZombieReac()
: stoich_( 0 )
{;}
ZombieReac::~ZombieReac()
{;}
//////////////////////////////////////////////////////////////
// MsgDest Definitions
//////////////////////////////////////////////////////////////
/*
void ZombieReac::vRemesh( const Eref& e )
{
stoich_->setReacKf( e, concKf_ );
stoich_->setReacKb( e, concKb_ );
}
*/
//////////////////////////////////////////////////////////////
// Field Definitions
//////////////////////////////////////////////////////////////
// This conversion is deprecated, used mostly for kkit conversions.
void ZombieReac::vSetNumKf( const Eref& e, double v )
{
double volScale = convertConcToNumRateUsingMesh( e, subOut, 0 );
concKf_ = v * volScale;
stoich_->setReacKf( e, concKf_ );
}
double ZombieReac::vGetNumKf( const Eref& e ) const
{
// Return value for voxel 0. Conceivably I might want to use the
// DataId part to specify which voxel to use, but that isn't in the
// current definition for Reacs as being a single entity for the entire
// compartment.
double volScale = convertConcToNumRateUsingMesh( e, subOut, 0 );
return concKf_ / volScale;
}
// Deprecated, used for kkit conversion backward compatibility
void ZombieReac::vSetNumKb( const Eref& e, double v )
{
double volScale = convertConcToNumRateUsingMesh( e, prdOut, 0 );
concKb_ = v * volScale;
stoich_->setReacKb( e, concKb_ );
}
double ZombieReac::vGetNumKb( const Eref& e ) const
{
double volScale = convertConcToNumRateUsingMesh( e, prdOut, 0 );
return concKb_ / volScale;
}
void ZombieReac::vSetConcKf( const Eref& e, double v )
{
concKf_ = v;
stoich_->setReacKf( e, v );
}
double ZombieReac::vGetConcKf( const Eref& e ) const
{
return concKf_;
}
void ZombieReac::vSetConcKb( const Eref& e, double v )
{
concKb_ = v;
stoich_->setReacKb( e, v );
}
double ZombieReac::vGetConcKb( const Eref& e ) const
{
// double volScale = convertConcToNumRateUsingMesh( e, prdOut, 0 );
// double kb = stoich_->getReacNumKb( e );
// return kb / volScale;
return concKb_;
}
//////////////////////////////////////////////////////////////
// Utility function
//////////////////////////////////////////////////////////////
// Virtual func called in zombify before fields are assigned.
void ZombieReac::setSolver( Id stoich, Id orig )
{
assert( stoich != Id() );
vector< Id > sub;
vector< Id > prd;
orig.element()->getNeighbors( sub, subOut );
orig.element()->getNeighbors( prd, prdOut );
assert( stoich.element()->cinfo()->isA( "Stoich" ) );
stoich_ = reinterpret_cast< Stoich* >( stoich.eref().data( ) );
stoich_->installReaction( orig, sub, prd );
}