## -*-octave-*-
function write_ibg(system_name,bonds);
fid = fopen([system_name,"_ibg.m"], "wt");
[nbonds, junk] = size(struct_elements(bonds));
format_hc = " %s.bonds.bond%i.head.component\t= \"%s\";\n";
format_tc = " %s.bonds.bond%i.tail.component\t= \"%s\";\n";
format_hp = " %s.bonds.bond%i.head.ports\t= \"%s\";\n";
format_tp = " %s.bonds.bond%i.tail.ports\t= \"%s\";\n";
format_ce = " %s.bonds.bond%i.causality.effort\t= \"%s\";\n";
format_cf = " %s.bonds.bond%i.causality.flow\t= \"%s\";\n";
fprintf(fid, "## -*-octave-*-\n\n");
fprintf(fid, "function [%s] = %s_ibg\n\n", system_name, system_name);
fprintf(fid, " ## Intermediate bond graph representation of %s\n", \
system_name);
fprintf(fid, " ## Generated by MTT on %s\n", ctime(time));
fprintf(fid, " ## head refers to the harpoon end of a bond\n");
fprintf(fid, " ## tail refers to the other end of a bond\n");
fprintf(fid, " ## causality.? is the end at which ? is imposed\n\n");
for i=1:nbonds
fprintf(fid, "\n ## bond %i\n", i);
fprintf(fid, format_hc, system_name, i, \
eval(sprintf("bonds.bond%i.head.component", i)));
fprintf(fid, format_tc, system_name, i, \
eval(sprintf("bonds.bond%i.tail.component", i)));
fprintf(fid, format_hp, system_name, i, \
eval(sprintf("bonds.bond%i.head.ports", i)));
fprintf(fid, format_tp, system_name, i, \
eval(sprintf("bonds.bond%i.tail.ports", i)));
fprintf(fid, format_ce, system_name, i, \
eval(sprintf("bonds.bond%i.causality.effort", i)));
fprintf(fid, format_cf, system_name, i, \
eval(sprintf("bonds.bond%i.causality.flow", i)));
endfor;
fprintf(fid, "\nendfunction\n");
fclose(fid);
endfunction;