Parallel network simulations with NEURON (Migliore et al 2006)

 Download zip file   Auto-launch 
Help downloading and running models
Accession:64229
The NEURON simulation environment has been extended to support parallel network simulations. The performance of three published network models with very different spike patterns exhibits superlinear speedup on Beowulf clusters.
Reference:
1 . Migliore M, Cannia C, Lytton WW, Markram H, Hines ML (2006) Parallel network simulations with NEURON. J Comput Neurosci 21:119-29 [PubMed]
Citations  Citation Browser
Model Information (Click on a link to find other models with that property)
Model Type: Realistic Network;
Brain Region(s)/Organism:
Cell Type(s):
Channel(s):
Gap Junctions:
Receptor(s):
Gene(s):
Transmitter(s):
Simulation Environment: NEURON;
Model Concept(s): Methods;
Implementer(s): Hines, Michael [Michael.Hines at Yale.edu];
/
netmod
parscalebush
AMPA.mod *
arhRT03.mod *
cadecay.mod
cadRT03.mod
cah.mod
calRT03.mod
catRT03.mod *
GABAa.mod *
GABAb.mod *
intf.mod
k2RT03.mod *
kahpRT03.mod
kaRT03.mod *
kca.mod *
kcRT03.mod
kdr.mod
kdrp.mod
kdrRT03.mod *
kmRT03.mod *
misc.mod
myfit.mod
na.mod
nafRT03.mod *
nap.mod
napRT03.mod *
NMDA.mod *
nstim.mod
stats.mod
vecst.mod
batch.hoc
bg
bg_cvode.inc
boltz_cvode.inc
geneval_cvode.inc
geom.hoc
init.hoc
netcon.inc
network.hoc
nqsnet.hoc
nspike.dat
params.hoc
parnetwork.hoc
parnqsnet.hoc
perfrun.hoc
prebatch_.hoc
run.hoc
spkplt.hoc *
x_vs_nspike.hoc
                            
// $Id: geom.hoc,v 1.2 2006/02/08 11:59:39 hines Exp $

create acell_home_
access acell_home_

{load_file("netparmpi.hoc")}

//* replace labels
FP=2 // fat pyramidal cell
TP=3 // thin pyramidal cell
B5=4 // layer 5 basket interneuron

{CTYP.remove_all()}
for scase(XO,"NU","SM","FP","TP","B5","TC","RE","NS") CTYP.append(new String2(XO.s))
for scase(XO,"","NStim","Pyramidal","Pyramidal2","Basket","","","") CTYP.o(i1).t=XO.s

//* template SStim
begintemplate SStim
external acell_home_
public fflag,pp,synlist,connect2target
public lid,gid
objref pp

proc init () {
  acell_home_ pp=new NStim(0.5)
}

proc connect2target () {
  $o2 = new NetCon(pp,$o1)
  $o2.threshold=0.
}

func fflag () { return 1 }

endtemplate SStim

//* template Basket
begintemplate Basket
public soma, dend, ampa, pre, gabaa, fflag, stim, synlist,connect2target, slist
public lid,gid

// Basket cell approximation (4.92) from G1.34 of V1 project
// Paul Bush 1992

create soma, dend[6]

objref ampa[5], pre, gabaa[3], stim[3], synlist, slist

proc init() {
  soma connect dend[0](0), 1
  dend[0] connect dend[1](0), 1
  dend[0] connect dend[2](0), 1
  soma connect dend[3](0), 0
  dend[3] connect dend[4](0), 1
  dend[3] connect dend[5](0), 1

  soma.L = 15
  dend[0].L = 50
  dend[1].L = 150
  dend[2].L = 150
  dend[3].L = 50
  dend[4].L = 150
  dend[5].L = 150

  soma.diam = 15
  dend[0].diam = 2.5
  dend[1].diam = 1.6
  dend[2].diam = 1.6
  dend[3].diam = 2.5
  dend[4].diam = 1.6
  dend[5].diam = 1.6

  forall { nseg=1 cm = 2.2125 Ra=200 }


  soma gabaa[0] = new GABAa(0.5)
  dend[0] gabaa[1] = new GABAa(0.5)
  dend[3] gabaa[2] = new GABAa(0.5)

  soma ampa[0] = new AMPA(0.5)
  dend[1] ampa[1] = new AMPA(0.5)
  dend[2] ampa[2] = new AMPA(0.5)
  dend[4] ampa[3] = new AMPA(0.5)
  dend[5] ampa[4] = new AMPA(0.5)

  soma    stim[0] = new Exp2Syn(0.5)
  dend[1] stim[1] = new Exp2Syn(0.5)
  dend[4] stim[2] = new Exp2Syn(0.5)

  synlist=new List()
  for ii=0,4 synlist.append(ampa[ii])    // 0
  for ii=0,2 synlist.append(gabaa[ii])   // 5
  for ii=0,2 synlist.append(stim[ii])    // 8
  slist=new List()
  for ii=0,4 slist.append(new String("AMPA"))    // 0
  for ii=0,2 slist.append(new String("GABAA"))   // 5
  for ii=0,2 slist.append(new String("Exp2Syn"))    // 8
}

proc connect2target () {
  soma $o2 = new NetCon(&v(0.5),$o1)
  $o2.threshold=0.
}

func fflag () { return 0 }

endtemplate Basket

//* template Pyramidal (FP)
begintemplate Pyramidal
public soma, dend, pre, ampa, gabaa, gabab, nmda, fflag, stim, synlist,connect2target,slist
public lid,gid

// Reduced layer 5 pyramidal cell geometry, j4.cab.
// Paul Bush 1991

create soma, dend[8]
objref pre, ampa[3], gabaa[3], gabab[3], nmda[3], stim[3], synlist, slist

proc init() {

  soma connect dend[0](0), 1
  dend[0] connect dend[1](0), 1
  dend[0] connect dend[2](0), 1
  dend[2] connect dend[3](0), 1
  dend[3] connect dend[4](0), 1
  soma connect dend[5](0), 0
  dend[5] connect dend[6](0), 1
  dend[5] connect dend[7](0), 1

  soma.L = 13
  dend[0].L = 60
  dend[1].L = 150
  dend[2].L = 400
  dend[3].L = 400
  dend[4].L = 250
  dend[5].L = 50
  dend[6].L = 150
  dend[7].L = 150

  soma.diam = 18.95
  dend[0].diam = 6
  dend[1].diam = 3
  dend[2].diam = 4.4
  dend[3].diam = 2.9
  dend[4].diam = 2
  dend[5].diam = 4
  dend[6].diam = 5
  dend[7].diam = 5

  forall { nseg=1 cm = 1.56 Ra=200 }

  soma gabaa[0] = new GABAa(0.5)
  dend[0] gabaa[1] = new GABAa(0.5)
  dend[5] gabaa[2] = new GABAa(0.5)

  dend[1] ampa[0] = new AMPA(0.5)
  dend[6] ampa[1] = new AMPA(0.5)
  dend[7] ampa[2] = new AMPA(0.5)

  dend[1] nmda[0] = new NMDA(0.5)
  dend[6] nmda[1] = new NMDA(0.5)
  dend[7] nmda[2] = new NMDA(0.5)

  dend[1] gabab[0] = new GABAb(0.5)
  dend[6] gabab[1] = new GABAb(0.5)
  dend[7] gabab[2] = new GABAb(0.5)

  dend[1] stim[0] = new Exp2Syn(0.5)
  dend[6] stim[1] = new Exp2Syn(0.5)
  dend[7] stim[2] = new Exp2Syn(0.5)

  synlist=new List()
  for ii=0,2 synlist.append(ampa[ii])  // 0
  for ii=0,2 synlist.append(nmda[ii])  // 3
  for ii=0,2 synlist.append(gabaa[ii]) // 6
  for ii=0,2 synlist.append(gabab[ii]) // 9
  for ii=0,2 synlist.append(stim[ii])  // 12

  slist=new List()
  for ii=0,2 slist.append(new String("AMPA"))  // 0
  for ii=0,2 slist.append(new String("NMDA"))  // 3
  for ii=0,2 slist.append(new String("GABAA")) // 6
  for ii=0,2 slist.append(new String("GABAB")) // 9
  for ii=0,2 slist.append(new String("Exp2Syn"))  // 12
}

proc connect2target () {
  soma $o2 = new NetCon(&v(0.5),$o1)
  $o2.threshold=0.
}

func fflag () { return 0 }

endtemplate Pyramidal

//* template Pyramidal2 (TP)
begintemplate Pyramidal2
public soma, dend, pre, ampa, gabaa, gabab, nmda, fflag, stim, synlist,connect2target,slist
public lid,gid

// Reduced layer 2 pyramidal cell geometry, j8.cab.
// Paul Bush 1991

create soma, dend[7]
objref pre, ampa[3], gabaa[3], gabab[3], nmda[3], stim[3], synlist, slist

proc init() {

  soma connect dend[0](0), 1
  dend[0] connect dend[1](0), 1
  dend[0] connect dend[2](0), 1
  dend[2] connect dend[3](0), 1
  soma connect dend[4](0), 0
  dend[4] connect dend[5](0), 1
  dend[4] connect dend[6](0), 1

  soma.L = 13
  dend[0].L = 35
  dend[1].L = 200
  dend[2].L = 180
  dend[3].L = 140
  dend[4].L = 50
  dend[5].L = 150
  dend[6].L = 150

  soma.diam = 15.6
  dend[0].diam = 2.5
  dend[1].diam = 2.3
  dend[2].diam = 2.4
  dend[3].diam = 2
  dend[4].diam = 2.5
  dend[5].diam = 1.6
  dend[6].diam = 1.6

  forall { nseg=1 cm = 2.065 Ra=200 }

  soma gabaa[0] = new GABAa(0.5)
  dend[0] gabaa[1] = new GABAa(0.5)
  dend[4] gabaa[2] = new GABAa(0.5)

  dend[1] ampa[0] = new AMPA(0.5)
  dend[5] ampa[1] = new AMPA(0.5)
  dend[6] ampa[2] = new AMPA(0.5)

  dend[1] nmda[0] = new NMDA(0.5)
  dend[5] nmda[1] = new NMDA(0.5)
  dend[6] nmda[2] = new NMDA(0.5)

  dend[1] gabab[0] = new GABAb(0.5)
  dend[5] gabab[1] = new GABAb(0.5)
  dend[6] gabab[2] = new GABAb(0.5)

  dend[1] stim[0] = new Exp2Syn(0.5)
  dend[5] stim[1] = new Exp2Syn(0.5)
  dend[6] stim[2] = new Exp2Syn(0.5)

  synlist=new List()
  for ii=0,2 synlist.append(ampa[ii])    // 0 
  for ii=0,2 synlist.append(nmda[ii])    // 3 
  for ii=0,2 synlist.append(gabaa[ii])   // 6 
  for ii=0,2 synlist.append(gabab[ii])   // 9 
  for ii=0,2 synlist.append(stim[ii])    // 12
  slist=new List()
  for ii=0,2 slist.append(new String("AMPA"))  // 0
  for ii=0,2 slist.append(new String("NMDA"))  // 3
  for ii=0,2 slist.append(new String("GABAA")) // 6
  for ii=0,2 slist.append(new String("GABAB")) // 9
  for ii=0,2 slist.append(new String("Exp2Syn"))  // 12
}

proc connect2target () {
  soma $o2 = new NetCon(&v(0.5),$o1)
  $o2.threshold=0.
}

func fflag () { return 0 }

endtemplate Pyramidal2

// sytyp(CELL,STYPE,VEC)
// sytyp(fp[0],AM,vec) vec will get indices for postsyns that use AMPA
proc sytyp () { local x
  revec($o3)
  for ltr(XO,$o1.slist,&x) if (strcmp(XO.s,STYP.o($2).s)==0) $o3.append(x)
}