001: //
002: // Heccer : a compartmental solver that implements efficient Crank-Nicolson
003: // integration for neuronal models.
004: //
005: 
006: //////////////////////////////////////////////////////////////////////////////
007: //'
008: //' Heccer : testbed C implementation
009: //'
010: //' Copyright (C) 2006-2008 Hugo Cornelis
011: //'
012: //' functional ideas ..   Hugo Cornelis, hugo.cornelis@gmail.com
013: //'
014: //' coding ............   Hugo Cornelis, hugo.cornelis@gmail.com
015: //'
016: //////////////////////////////////////////////////////////////////////////////
017: 
018: 
019: #include <stdlib.h>
020: 
021: #include "../../heccer/compartment.h"
022: #include "../../heccer/heccer.h"
023: 
024: 
025: #define HECCER_TEST_INTERVAL_DEFAULT_START                      (-0.1)
026: #define HECCER_TEST_INTERVAL_DEFAULT_END                        (0.05)
027: #define HECCER_TEST_INTERVAL_DEFAULT_ENTRIES                    50
028: #define HECCER_TEST_STEPS 1
029: 
030: 
031: struct Compartment comp =
032: {
033:     //m administrative overhead
034: 
035:     {
036:         //m type of structure
037: 
038:         MATH_TYPE_Compartment,
039:     },
040: 
041:     //m index of parent compartment, -1 for none
042: 
043:     -1,
044: 
045: /* 	//m first mechanism */
046: 
047: /* 	NULL, */
048: 
049: /* 	//m number of mechanisms */
050: 
051: /* 	0, */
052: 
053:     //m descriptive values, alphabetical order
054: 
055: /*     double dCm; */
056: 
057:     5.755329373e-12, // unscaled 0.0164,
058: 
059: /*     double dEm; */
060: 
061:     -0.08,
062: 
063: /*     double dInitVm; */
064: 
065:     -0.068,
066: 
067: /*     double dInject;		 */
068: 
069:     0,
070: 
071: /*     double dRa; */
072: 
073:     772813.4375, // unscaled 2.5,
074: 
075: /*     double dRm; */
076: 
077:     8.548598272e9, // unscaled 3
078: };
079: 
080: 
081: struct ChannelActInact caiCaP =
082: {
083:     //m administrative overhead
084: 
085:     {
086:         //m type of structure
087: 
088:         MATH_TYPE_ChannelActInact,
089:     },
090: 
091:     //m first set of descriptive values, alphabetical order
092: 
093:     //m initial reversal potential
094: 
095:     0.14702148735523224,
096: 
097:     //m get reversal potential from this intermediary, -1 for none
098: 
099:     -1,
100: 
101:     //m maximal conductance when all channels are permissive
102: 
103:     1.57921e-08,
104: 
105:     //m contributes to this concentration pool, -1 for none, boolean indicator only.
106: 
107:     -1,
108: 
109:     //m activation description
110: 
111:     {
112:         //m power, for a standard heccer, something between 1 and 4 or so.
113: 
114:         1,
115: 
116:         //m gate definition
117: 
118:         {
119:             //m initial value, commonly forward over backward steady states
120: 
121:             0.001391094927,
122: 
123:             //m corresponding index in tables, set to -1 for initialization.
124: 
125:             -1,
126: 
127:             {
128:                 //m forward kinetiks, commonly denoted with alpha or non-perm to perm rate
129: 
130:                 {
131:                     //m multiplier
132: 
133:                     8.50e3,
134: 
135:                     //m multiplier membrane dependence, 0.0 for no dependence
136: 
137:                     0.0,
138: 
139:                     //m 2b: multiplier membrane dependence offset, 0.0 for no dependence
140: 
141:                     0.0,
142: 
143:                     //m choose between nominator or denominator, 1 means nominator, -1
144:                     //m means denominator
145: 
146:                     -1.0,
147: 
148:                     //m nominator or denominator offset
149: 
150:                     1.0,
151: 
152:                     //m membrane offset
153: 
154:                     -0.0080,
155: 
156:                     //m denormalized time constant
157: 
158:                     -12.5e-3,
159:                 },
160: 
161:                 //m backward kinetiks, commonly denoted with beta or perm to non-perm rate
162: 
163:                 {
164:                     //m multiplier
165: 
166:                     35.0e3,
167: 
168:                     //m multiplier membrane dependence, 0.0 for no dependence
169: 
170:                     0.0,
171: 
172:                     //m 2b: multiplier membrane dependence offset, 0.0 for no dependence
173: 
174:                     0.0,
175: 
176:                     //m choose between nominator or denominator, 1 means nominator, -1
177:                     //m means denominator
178: 
179:                     -1.0,
180: 
181:                     //m nominator or denominator offset
182: 
183:                     1.0,
184: 
185:                     //m membrane offset
186: 
187:                     0.074,
188: 
189:                     //m denormalized time constant
190: 
191:                     14.5e-3,
192:                 },
193:             },
194:         },
195:     },
196: 
197:     //m inactivation description
198: 
199:     {
200:         //m power, for a standard heccer, something between 1 and 4 or so.
201: 
202:         1,
203: 
204:         //m gate definition
205: 
206:         {
207:             //m initial value, commonly forward over backward steady states
208: 
209:             0.9868968318,
210: 
211:             //m corresponding index in tables, set to -1 for initialization.
212: 
213:             -1,
214: 
215:             {
216:                 //m forward kinetiks, commonly denoted with alpha or non-perm to perm rate
217: 
218:                 {
219:                     //m multiplier
220: 
221:                     0.0015e3,
222: 
223:                     //m multiplier membrane dependence, 0.0 for no dependence
224: 
225:                     0.0,
226: 
227:                     //m 2b: multiplier membrane dependence offset, 0.0 for no dependence
228: 
229:                     0.0,
230: 
231:                     //m choose between nominator or denominator, 1 means nominator, -1
232:                     //m means denominator
233: 
234:                     -1.0,
235: 
236:                     //m nominator or denominator offset
237: 
238:                     1.0,
239: 
240:                     //m membrane offset
241: 
242:                     0.029,
243: 
244:                     //m denormalized time constant
245: 
246:                     8.0e-3,
247:                 },
248: 
249:                 //m backward kinetiks, commonly denoted with beta or perm to non-perm rate
250: 
251:                 {
252:                     //m multiplier
253: 
254:                     0.0055e3,
255: 
256:                     //m multiplier membrane dependence, 0.0 for no dependence
257: 
258:                     0.0,
259: 
260:                     //m 2b: multiplier membrane dependence offset, 0.0 for no dependence
261: 
262:                     0.0,
263: 
264:                     //m choose between nominator or denominator, 1 means nominator, -1
265:                     //m means denominator
266: 
267:                     -1.0,
268: 
269:                     //m nominator or denominator offset
270: 
271:                     1.0,
272: 
273:                     //m membrane offset
274: 
275:                     0.023,
276: 
277:                     //m denormalized time constant
278: 
279:                     -8.0e-3,
280:                 },
281:             },
282:         },
283:     },
284: };
285: 
286: 
287: int piC2m[] =
288: {
289:     1,
290:     -1,
291: };
292: 
293: 
294: struct MathComponentArray mca =
295: {
296:     //m number of math components
297: 
298:     1,
299: 
300:     //m math component data
301: 
302:     &caiCaP.mc,
303: 
304:     //m math component index, initialize to NULL
305: 
306:     NULL,
307: 
308: };
309: 
310: 
311: struct Intermediary inter =
312: {
313:     //m compartment array
314: 
315:     1,
316: 
317:     &comp,
318: 
319:     //m all other mathematical components
320: 
321:     &mca,
322: 
323:     //m compartment 2 first mechanism number
324: 
325:     piC2m,
326: };
327: 
328: 
329: #include "main.c"
330: 
331: