MOOSE - Multiscale Object Oriented Simulation Environment
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
Reac.cpp
Go to the documentation of this file.
1 /**********************************************************************
2 ** This program is part of 'MOOSE', the
3 ** Messaging Object Oriented Simulation Environment.
4 ** Copyright (C) 2003-2010 Upinder S. Bhalla. and NCBS
5 ** It is made available under the terms of the
6 ** GNU Lesser General Public License version 2.1
7 ** See the file COPYING.LIB for the full notice.
8 **********************************************************************/
9 
10 #include "header.h"
11 #include "ElementValueFinfo.h"
12 #include "lookupVolumeFromMesh.h"
13 #include "ReacBase.h"
14 #include "Reac.h"
15 
16 #define EPSILON 1e-15
17 
19 {
21  // Field Definitions: All inherited from ReacBase
24  // MsgDest Definitions: All inherited
27  // Shared Msg Definitions: All inherited.
29  static Dinfo< Reac > dinfo;
30  static Cinfo reacCinfo (
31  "Reac",
33  0,
34  0,
35  &dinfo
36  );
37 
38  return &reacCinfo;
39 }
40 
41 static const Cinfo* reacCinfo = Reac::initCinfo();
42 
44  dynamic_cast< const SrcFinfo2< double, double >* >(
45  reacCinfo->findFinfo( "subOut" ) );
46 
48  dynamic_cast< const SrcFinfo2< double, double >* >(
49  reacCinfo->findFinfo( "prdOut" ) );
50 
52 // Reac internal functions
54 
55 
57  : kf_( 0.1 ), kb_( 0.2 ), sub_( 0.0 ), prd_( 0.0 )
58 {
59  ;
60 }
61 
62 /*
63 Reac::Reac( double kf, double kb )
64  : kf_( kf ), kb_( kb ), concKf_( 0.1 ), concKb_( 0.2 ),
65  sub_( 0.0 ), prd_( 0.0 )
66 {
67  ;
68 }
69 */
70 
72 // MsgDest Definitions
74 
75 void Reac::vSub( double v )
76 {
77  sub_ *= v;
78 }
79 
80 void Reac::vPrd( double v )
81 {
82  prd_ *= v;
83 }
84 
85 void Reac::vProcess( const Eref& e, ProcPtr p )
86 {
87  prdOut->send( e, sub_, prd_ );
88  subOut->send( e, prd_, sub_ );
89 
90  sub_ = kf_;
91  prd_ = kb_;
92 }
93 
94 void Reac::vReinit( const Eref& e, ProcPtr p )
95 {
96  sub_ = kf_ = concKf_ /
97  convertConcToNumRateUsingMesh( e, subOut, 0 );
98  prd_ = kb_ = concKb_ /
99  convertConcToNumRateUsingMesh( e, prdOut, 0 );
100 }
101 
102 void Reac::vRemesh( const Eref& e )
103 {
104  kf_ = concKf_ / convertConcToNumRateUsingMesh( e, subOut, 0 );
105  kb_ = concKb_ / convertConcToNumRateUsingMesh( e, prdOut, 0 );
106 }
107 
109 // Field Definitions
111 
112 void Reac::vSetNumKf( const Eref& e, double v )
113 {
114  sub_ = kf_ = v;
115  double volScale = convertConcToNumRateUsingMesh( e, subOut, false );
116  concKf_ = kf_ * volScale;
117 }
118 
119 double Reac::vGetNumKf( const Eref& e) const
120 {
121  double kf = concKf_ / convertConcToNumRateUsingMesh( e, subOut, false );
122  return kf;
123 }
124 
125 void Reac::vSetNumKb( const Eref& e, double v )
126 {
127  prd_ = kb_ = v;
128  /*
129  double volScale = convertConcToNumRateUsingMesh( e, prdOut, true );
130  vector< double > vols;
131  getReactantVols( e, subOut, vols );
132  assert( vols.size() > 0 );
133  volScale /= (vols[0] * NA);
134  */
135 
136  double volScale = convertConcToNumRateUsingMesh( e, prdOut, false );
137  concKb_ = kb_ * volScale;
138 }
139 
140 double Reac::vGetNumKb( const Eref& e ) const
141 {
142  double kb = concKb_ / convertConcToNumRateUsingMesh( e, prdOut, 0 );
143  return kb;
144 }
145 
146 void Reac::vSetConcKf( const Eref& e, double v )
147 {
148  concKf_ = v;
149  sub_ = kf_ = v / convertConcToNumRateUsingMesh( e, subOut, 0 );
150 }
151 
152 double Reac::vGetConcKf( const Eref& e ) const
153 {
154  return concKf_;
155 }
156 
157 void Reac::vSetConcKb( const Eref& e, double v )
158 {
159  concKb_ = v;
160  prd_ = kb_ = v / convertConcToNumRateUsingMesh( e, prdOut, 0 );
161 }
162 
163 double Reac::vGetConcKb( const Eref& e ) const
164 {
165  return concKb_;
166 }
double vGetConcKf(const Eref &e) const
vGet Kf in concentration units
Definition: Reac.cpp:152
double concKf_
Definition: ReacBase.h:86
double vGetNumKf(const Eref &e) const
Definition: Reac.cpp:119
void vReinit(const Eref &e, ProcPtr p)
Definition: Reac.cpp:94
void vSetNumKb(const Eref &e, double v)
Definition: Reac.cpp:125
Definition: Dinfo.h:60
double concKb_
Definition: ReacBase.h:87
double kf_
Definition: Reac.h:50
double sub_
Definition: Reac.h:52
void send(const Eref &e, const T1 &arg1, const T2 &arg2) const
Definition: SrcFinfo.h:228
static const Cinfo * initCinfo()
Definition: ReacBase.cpp:33
static const SrcFinfo2< double, double > * subOut
Definition: Reac.cpp:43
Definition: Eref.h:26
void vSetConcKb(const Eref &e, double v)
set Kb in concentration units
Definition: Reac.cpp:157
void vRemesh(const Eref &e)
Definition: Reac.cpp:102
static const Cinfo * initCinfo()
Definition: Reac.cpp:18
double convertConcToNumRateUsingMesh(const Eref &e, const SrcFinfo *pools, bool doPartialConversion)
void vSetNumKf(const Eref &e, double v)
Definition: Reac.cpp:112
void vProcess(const Eref &e, ProcPtr p)
Definition: Reac.cpp:85
void vSetConcKf(const Eref &e, double v)
set Kf in concentration units
Definition: Reac.cpp:146
static const Cinfo * reacCinfo
Definition: Reac.cpp:41
double prd_
Definition: Reac.h:53
void vPrd(double v)
Definition: Reac.cpp:80
double vGetConcKb(const Eref &e) const
get Kb in concentration units
Definition: Reac.cpp:163
double kb_
Definition: Reac.h:51
static const SrcFinfo2< double, double > * prdOut
Definition: Reac.cpp:47
void vSub(double v)
Definition: Reac.cpp:75
Definition: Cinfo.h:18
double vGetNumKb(const Eref &e) const
Definition: Reac.cpp:140
Reac()
Definition: Reac.cpp:56
const Finfo * findFinfo(const string &name) const
Definition: Cinfo.cpp:224