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
|