file:/local_home/local_home/hugo/neurospaces_project/heccer/source/c/snapshots/0/tests/code/channel1-nernst1.c (Mon Jun 16 00:03:49 2008
) HOME
1: //
2: // Heccer : a compartmental solver that implements efficient Crank-Nicolson
3: // integration for neuronal models.
4: //
5:
6: //////////////////////////////////////////////////////////////////////////////
7: //'
8: //' Heccer : testbed C implementation
9: //'
10: //' Copyright (C) 2006-2008 Hugo Cornelis
11: //'
12: //' functional ideas .. Hugo Cornelis, hugo.cornelis@gmail.com
13: //'
14: //' coding ............ Hugo Cornelis, hugo.cornelis@gmail.com
15: //'
16: //////////////////////////////////////////////////////////////////////////////
17:
18:
19: #include <stdlib.h>
20:
21: #include "../../heccer/compartment.h"
22: #include "../../heccer/heccer.h"
23: #include "../../heccer/mathcomponent.h"
24:
25:
26: #define HECCER_TEST_REPORTING_GRANULARITY 100000
27: #define HECCER_TEST_STEPS 1000000
28: #define HECCER_TEST_TESTED_THINGS ( HECCER_DUMP_VM_COMPARTMENT_MATRIX \
29: | HECCER_DUMP_VM_COMPARTMENT_DATA \
30: | HECCER_DUMP_VM_COMPARTMENT_OPERATIONS \
31: | HECCER_DUMP_VM_CHANNEL_POOL_FLUXES \
32: | HECCER_DUMP_VM_MECHANISM_DATA \
33: | HECCER_DUMP_VM_MECHANISM_OPERATIONS \
34: | HECCER_DUMP_VM_SUMMARY \
35: )
36: #define HECCER_TEST_TIME_GRANULARITY (1e-14)
37: #define HECCER_TEST_TIME_STEP (1e-11)
38:
39:
40: struct Compartment comp =
41: {
42: //m administrative overhead
43:
44: {
45: //m type of structure
46:
47: MATH_TYPE_Compartment,
48: },
49:
50: //m index of parent compartment, -1 for none
51:
52: -1,
53:
54: /* //m first mechanism */
55:
56: /* NULL, */
57:
58: /* //m number of mechanisms */
59:
60: /* 0, */
61:
62: //m descriptive values, alphabetical order
63:
64: /* double dCm; */
65:
66: 5.755329373e-12, // unscaled 0.0164,
67:
68: /* double dEm; */
69:
70: -0.08,
71:
72: /* double dInitVm; */
73:
74: -0.068,
75:
76: /* double dInject; */
77:
78: 1e-9,
79:
80: /* double dRa; */
81:
82: 772813.4375, // unscaled 2.5,
83:
84: /* double dRm; */
85:
86: 8.548598272e9, // unscaled 3
87: };
88:
89:
90: //v a simple fast calcium channel
91:
92: struct ChannelActInact caiCaT =
93: {
94: //m administrative overhead
95:
96: {
97: //m type of structure
98:
99: MATH_TYPE_ChannelActInact,
100: },
101:
102: //m first set of descriptive values, alphabetical order
103:
104: //m initial reversal potential
105:
106: 0.1470214874,
107:
108: //m get reversal potential from this intermediary, -1 for none
109:
110: 1,
111:
112: //m maximal conductance when all channels are permissive
113:
114: 1.754672296e-09,
115:
116: //m contributes to this concentration pool, -1 for none, boolean indicator only.
117:
118: 1,
119:
120: //m activation description
121:
122: {
123: //m power, for a standard heccer, something between 1 and 4 or so.
124:
125: 1,
126:
127: //m gate definition
128:
129: {
130: //m initial value, commonly forward over backward steady states
131:
132: 0.038918706451336625,
133:
134: //m corresponding index in tables, set to -1 for initialization.
135:
136: -1,
137:
138: {
139: //m forward kinetiks, commonly denoted with alpha or non-perm to perm rate
140:
141: {
142: //m multiplier
143:
144: 2.6e3,
145:
146: //m multiplier membrane dependence, 0.0 for no dependence
147:
148: 0.0,
149:
150: //m 2b: multiplier membrane dependence offset, 0.0 for no dependence
151:
152: 0.0,
153:
154: //m choose between nominator or denominator, 1 means nominator, -1
155: //m means denominator
156:
157: -1.0,
158:
159: //m nominator or denominator offset
160:
161: 1.0,
162:
163: //m membrane offset
164:
165: 0.021,
166:
167: //m denormalized time constant
168:
169: -8e-3,
170: },
171:
172: //m backward kinetiks, commonly denoted with beta or perm to non-perm rate
173:
174: {
175: //m multiplier
176:
177: 0.18e3,
178:
179: //m multiplier membrane dependence, 0.0 for no dependence
180:
181: 0.0,
182:
183: //m 2b: multiplier membrane dependence offset, 0.0 for no dependence
184:
185: 0.0,
186:
187: //m choose between nominator or denominator, 1 means nominator, -1
188: //m means denominator
189:
190: -1.0,
191:
192: //m nominator or denominator offset
193:
194: 1.0,
195:
196: //m membrane offset
197:
198: 0.04,
199:
200: //m denormalized time constant
201:
202: 4e-3,
203: },
204: },
205: },
206: },
207:
208: //m inactivation description
209:
210: {
211: //m power, for a standard heccer, something between 1 and 4 or so.
212:
213: 1,
214:
215: //m gate definition
216:
217: {
218: //m initial value, commonly forward over backward steady states
219:
220: 0.082602128127539254,
221:
222: //m corresponding index in tables, set to -1 for initialization.
223:
224: -1,
225:
226: {
227: //m forward kinetiks, commonly denoted with alpha or non-perm to perm rate
228:
229: {
230: //m multiplier
231:
232: 0.0025e3,
233:
234: //m multiplier membrane dependence, 0.0 for no dependence
235:
236: 0.0,
237:
238: //m 2b: multiplier membrane dependence offset, 0.0 for no dependence
239:
240: 0.0,
241:
242: //m choose between nominator or denominator, 1 means nominator, -1
243: //m means denominator
244:
245: -1.0,
246:
247: //m nominator or denominator offset
248:
249: 1.0,
250:
251: //m membrane offset
252:
253: 0.04,
254:
255: //m denormalized time constant
256:
257: 8e-3,
258: },
259:
260: //m backward kinetiks, commonly denoted with beta or perm to non-perm rate
261:
262: {
263: //m multiplier
264:
265: 0.19e3,
266:
267: //m multiplier membrane dependence, 0.0 for no dependence
268:
269: 0.0,
270:
271: //m 2b: multiplier membrane dependence offset, 0.0 for no dependence
272:
273: 0.0,
274:
275: //m choose between nominator or denominator, 1 means nominator, -1
276: //m means denominator
277:
278: -1.0,
279:
280: //m nominator or denominator offset
281:
282: 1.0,
283:
284: //m membrane offset
285:
286: 0.05,
287:
288: //m denormalized time constant
289:
290: -10.0e-3,
291: },
292: },
293: },
294: },
295: };
296:
297:
298: struct InternalNernst inCa =
299: {
300: //m administrative overhead
301:
302: {
303: //m type of structure
304:
305: MATH_TYPE_InternalNernst,
306: },
307:
308: //m nernst constant
309:
310: 0.013363,
311:
312: //m link to internal concentration
313:
314: 2,
315:
316: //m constant external concentration
317:
318: 2.4000,
319:
320: //m initial nernst potential
321:
322: 0.1470214874,
323: };
324:
325:
326: struct ExponentialDecay exdecCa =
327: {
328: //m administrative overhead
329:
330: {
331: //m type of structure
332:
333: MATH_TYPE_ExponentialDecay,
334: },
335:
336: //m initial value
337:
338: 4e-5,
339:
340: //m beta
341:
342: 7.579027046e+10,
343:
344: //m steady state
345:
346: 4e-05,
347:
348: //m tau
349:
350: 0.00010,
351:
352: //m external contribution delivered by these intermediaries
353:
354: {
355: 0,
356: -1,
357: -1,
358: -1,
359: },
360: };
361:
362:
363: int piC2m[] =
364: {
365: 3,
366: -1,
367: };
368:
369:
370: struct MathComponentArray mca =
371: {
372: //m number of math components
373:
374: 3,
375:
376: //m math component data
377:
378: NULL,
379:
380: //m math component index, initialize to NULL
381:
382: NULL,
383:
384: };
385:
386:
387: struct Intermediary inter =
388: {
389: //m compartment array
390:
391: 1,
392:
393: &comp,
394:
395: //m all other mathematical components
396:
397: &mca,
398:
399: //m compartment 2 first mechanism number
400:
401: piC2m,
402: };
403:
404:
405: int main(int argc, char *argv[])
406: {
407: //- determine intermediary size, and allocate
408:
409: struct MathComponentInfo *pmciCaT = MathComponentInfoLookup(caiCaT.mc.iType);
410:
411: struct MathComponentInfo *pmciCa = MathComponentInfoLookup(exdecCa.mc.iType);
412:
413: struct MathComponentInfo *pmciNernst = MathComponentInfoLookup(inCa.mc.iType);
414:
415: int iChars = pmciCaT->iChars + pmciCa->iChars + pmciNernst->iChars;
416:
417: void *pmc = calloc(sizeof(char), iChars);
418:
419: //- prepare the mechanism intermediary
420:
421: struct ChannelActInact *pcai = (struct ChannelActInact *)pmc;
422:
423: *pcai = caiCaT;
424:
425: struct InternalNernst *pin = (struct InternalNernst *)&((char *)pcai)[pmciCaT->iChars];
426:
427: *pin = inCa;
428:
429: struct ExponentialDecay *pexdec = (struct ExponentialDecay *)&((char *)pin)[pmciNernst->iChars];
430:
431: *pexdec = exdecCa;
432:
433: //! other order:
434:
435: /* struct ExponentialDecay *pexdec = (struct ExponentialDecay *)&((char *)pcai)[pmciCaT->iChars]; */
436:
437: /* *pexdec = exdecCa; */
438:
439: /* struct InternalNernst *pin = (struct InternalNernst *)&((char *)pexdec)[pmciCa->iChars]; */
440:
441: /* *pin = inCa; */
442:
443: //- link the intermediary
444:
445: mca.pmc = pmc;
446:
447: //- do the simulation
448:
449: simulate(argc,argv);
450: }
451:
452:
453: #define main(argc,argv) simulate(argc,argv)
454:
455: //t this prototype can give warning and perhaps errors.
456:
457: int main(int argc, char *argv[]);
458:
459:
460: #include "main.c"
461:
462:
463:
Generated by Xrefactory version 2.0.14 on Thu Jul 24 22:41:20 2008