Skip to content
Snippets Groups Projects
Select Git revision
  • b9baae89b313ed9ccc1e656314316adda41018b9
  • master default protected
  • aca
  • improve_README
  • v1.2.0
  • v1.1.1 protected
  • v1.1.0 protected
  • v1.0.0 protected
8 results

M2E_visualize_interareal_connectivity-checkpoint.py

  • 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 );
    }