function model = mttCreateAcausalBondgraph(system,root)
global mtt_environment
switch nargin
case 0,
model = [] ; return ;
case 1,
root = [] ;
is_root_model = 1 ;
otherwise,
is_root_model = 0 ;
end
if is_root_model
model = intialise_model(system) ;
directory_name = identify_directory_name(system) ;
source_name = identify_source_name(system,directory_name) ;
mttNotify('...acquiring "abg" source definitions') ;
mttWriteNewLine ;
else
model = propagate_root_data(root) ;
source_name = system ;
end
specification_filename = [source_name,'_abg.txt'] ;
specification = mttFetchSpecification(specification_filename) ;
specification = mttSetFieldDefault(specification,'bondgraph',system) ;
[local_system_name,rubbish] = mttDetachText(system,'/') ;
if isempty(local_system_name)
local_system_name = system ;
end
if is_root_model
source_name = identify_source_name(specification.bondgraph,directory_name) ;
else
source_name = specification.bondgraph ;
end
source_name = mttCutText(source_name,'_abg.fig') ;
bondgraph_filename = [source_name,'_abg.fig'] ;
bondgraph = mttFetchBondgraph(bondgraph_filename) ;
model = mttCreateUnifiedModel(model,bondgraph,specification) ;
model = mttDeleteField(model,'branch') ;
model = mttDeleteField(model,'leaf') ;
if is_root_model
mttWriteNewLine ;
mttNotify('...acquiring "cr" source definitions') ;
mttWriteNewLine ;
for n = 1:length(model.crs)
source_name = model.crs{n} ;
cr_filename = [source_name,'_cr.txt'] ;
if ~mttFileExists(cr_filename)
cr_short_name = mttDetachText(source_name,'/') ;
mttNotify([' ...ERROR: "',cr_short_name,'_cr" source does not exist']) ;
mttWriteNewLine ;
mttNotify([' ...finding dependencies for ',source_name,':']) ;
mttWriteNewLine ;
prefix = mttDetachText(system,'/') ;
if isempty(prefix)
prefix = system ;
end
cr_user = model.cr_usage(n).obj ;
for i = 1:length(cr_user)
mttNotify([' ',prefix,'/',cr_user{i}]) ;
mttWriteNewLine ;
end
end
model.cr(n) = mttFetchInterfaceDefinition(cr_filename) ;
end
model = mttDeleteField(model,'cr_usage') ;
model = mttDeleteField(model,'crs') ;
model = mttDeleteField(model,'abgs') ;
end
model.env = mtt_environment ;
function model = intialise_model(system)
model.representation = 'abg' ;
model.abgs = [] ;
model.crs = [] ;
model.cr_usage = [] ;
model.branch = [] ;
model.leaf = [] ;
function model = propagate_root_data(root)
model.abgs = root.abgs ;
model.crs = root.crs ;
model.cr_usage = root.cr_usage ;
model.branch = root.branch ;
model.leaf = root.leaf ;
function directory = identify_directory_name(system)
mttAssert(ischar(system),'System must be specified by name') ;
working_directory = pwd ;
working_directory = strrep(working_directory,'\','/') ;
[system_name,local_directory] = mttDetachText(system,'/') ;
if isempty(system_name)
local_directory = [] ;
end
if isempty(local_directory)
directory = working_directory ;
else
directory = mttLocateDirectory(working_directory,local_directory) ;
end
function source = identify_source_name(system,directory)
[system_name,local_directory] = mttDetachText(system,'/') ;
if isempty(system_name)
system_name = system ;
local_directory = [] ;
end
source = [directory,'/',system_name] ;