123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 |
- 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] ;
|