int msgcount int msgindex int total_number_axial_msgs = 0 int diffamp_index = 0 str sender // count how many diffamps are needed foreach name ({el /L5P/##[][TYPE=compartment]}) msgcount = {getmsg {name} -incoming -count} // echo {msgcount} for (msgindex = 0; msgindex < {msgcount}; msgindex = {msgindex} + 1) if (! {strcmp {getmsg {name} -in -type {msgindex}} "AXIAL"}) // echo {name} {msgindex} AXIAL total_number_axial_msgs = {total_number_axial_msgs} + 1 elif (! {strcmp {getmsg {name} -in -type {msgindex}} "RAXIAL"}) // echo {name} {msgindex} RAXIAL total_number_axial_msgs = {total_number_axial_msgs} + 1 end // echo {getmsg {name} -in -type {msgindex}} end end echo total number of AXIAL and RAXIAL msgs is {total_number_axial_msgs} // create the diffamp array create diffamp /diffamp createmap /diffamp /diffamp_array {total_number_axial_msgs} 1 // position each diffamp element to the corresponding compartment, and make msgs foreach name ({el /L5P/##[][TYPE=compartment]}) msgcount = {getmsg {name} -incoming -count} // echo {msgcount} for (msgindex = 0; msgindex < {msgcount}; msgindex = {msgindex} + 1) if (! {strcmp {getmsg {name} -in -type {msgindex}} "AXIAL"}) // echo {name} {msgindex} AXIAL {diffamp_index} setfield /diffamp_array/diffamp[{diffamp_index}] x {getfield {name} x} \ y {getfield {name} y} \ z {getfield {name} z} addmsg {name} /diffamp_array/diffamp[{diffamp_index}] PLUS Vm sender = {getmsg {name} -in -source {msgindex}} addmsg {sender} /diffamp_array/diffamp[{diffamp_index}] MINUS Vm setfield /diffamp_array/diffamp[{diffamp_index}] gain {1.0 / {getfield {name} Ra}} \ saturation 10e10 diffamp_index = {diffamp_index} + 1 elif (! {strcmp {getmsg {name} -in -type {msgindex}} "RAXIAL"}) // echo {name} {msgindex} RAXIAL {diffamp_index} setfield /diffamp_array/diffamp[{diffamp_index}] x {getfield {name} x} \ y {getfield {name} y} \ z {getfield {name} z} addmsg {name} /diffamp_array/diffamp[{diffamp_index}] PLUS Vm sender = {getmsg {name} -in -source {msgindex}} addmsg {sender} /diffamp_array/diffamp[{diffamp_index}] MINUS Vm setfield /diffamp_array/diffamp[{diffamp_index}] gain {1.0 / {getfield {sender} Ra}} \ saturation 10e10 diffamp_index = {diffamp_index} + 1 end // echo {getmsg {name} -in -type {msgindex}} end end // echo {name} foreach name2 ({el /electrode_array/##[][TYPE=efield]}) echo making msgs to electrode {name2} el_x = {getfield {name2} x} el_y = {getfield {name2} y} el_z = {getfield {name2} z} foreach name ({el /diffamp_array/##[][TYPE=diffamp]}) cp_x = {getfield {name} x} cp_y = {getfield {name} y} cp_z = {getfield {name} z} distance = {sqrt {{pow {{cp_x} - {el_x}} 2.0} + \ {pow {{cp_y} - {el_y}} 2.0} + \ {pow {{cp_z} - {el_z}} 2.0}}} // echo {distance} // elem = ({findsolvefield {name}/../solve {name} Im}) // echo {elem} // addmsg {name}/../solve /electrode[{index}] CURRENT {elem} {distance} addmsg {name} {name2} CURRENT output {distance} end end // end