123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- function model = mttPropagateDomains(model,branch)
- is_root_model = (nargin==1) ;
-
- objects = mttGetFieldNames(model,'obj') ;
-
- for i = 1:length(objects)
- object_name = objects{i} ;
- object = getfield(model,'obj',object_name) ;
-
- if is_root_model
- branch = mttDetachText(model.source,'/') ;
- end
- here = [branch,':',object_name] ;
-
- if ~isempty(object.abg)
-
- for j = 1:mttGetFieldLength(object,'interface')
- port_name = object.interface(j).name ;
-
- inbond = object.interface(j).in ;
- outbond = object.interface(j).out ;
- inmap = object.interface(j).map.in ;
- outmap = object.interface(j).map.out ;
-
- [inbond_domain,inbond_domain_item] = mttGetBondDomain(model,inbond) ;
- [outbond_domain,outbond_domain_item] = mttGetBondDomain(model,outbond) ;
- [inmap_domain,inmap_domain_item] = mttGetBondDomain(object,inmap) ;
- [outmap_domain,outmap_domain_item] = mttGetBondDomain(object,outmap) ;
-
- [model,inbond_ok] = mttUpdateBondDomain(model,inbond,inmap_domain,inmap_domain_item) ;
- [model,outbond_ok] = mttUpdateBondDomain(model,outbond,outmap_domain,outmap_domain_item) ;
- [object,inmap_ok] = mttUpdateBondDomain(object,inmap,inbond_domain,inbond_domain_item) ;
- [object,outmap_ok] = mttUpdateBondDomain(object,outmap,outbond_domain,outbond_domain_item) ;
-
- ok = inbond_ok & outbond_ok & inmap_ok & outmap_ok ;
- mttAssert(ok,['Domain conflict at port "',port_name,'" in ',here]) ;
- end
-
- if is_root_model
- branch = object_name ;
- else
- branch = [branch,'/',object_name] ;
- end
-
- object = mttPropagateDomains(object,branch) ;
- model = setfield(model,'obj',object_name,object) ;
-
- elseif ~isempty(object.cr)
-
- interface = object.cr.interface ;
- port_names = mttGetFieldNames(interface,'port') ;
-
- for j = 1:length(port_names)
- port_name = port_names{j} ;
- port = getfield(interface,'port',port_name) ;
-
- inbond = port.in ;
- outbond = port.out ;
-
- [model,inbond_ok] = mttUpdateBondDomain(model,inbond,port.domain,port.domain_item) ;
- [model,outbond_ok] = mttUpdateBondDomain(model,outbond,port.domain,port.domain_item) ;
-
- ok = inbond_ok & outbond_ok ;
- mttAssert(ok,['Domain conflict at port "',port_name,'" in ',here]) ;
- end
-
- else
-
- number_of_interfaces = mttGetFieldLength(object,'interface') ;
-
- switch object.class
- case {'0','1'},
- index = 0 ;
- finding_domain = 1 ;
-
- while finding_domain
- index = index + 1 ;
-
- inbond = object.interface(index).in ;
- outbond = object.interface(index).out ;
-
- if isempty(inbond)
- bond_number = outbond ;
- else
- bond_number = inbond ;
- end
-
- [existing_domain,existing_domain_item] = mttGetBondDomain(model,bond_number) ;
-
- found_domain = ~isempty(existing_domain) ;
- finding_domain = ~found_domain & index<number_of_interfaces ;
- end
-
- if found_domain
- for j = 1:number_of_interfaces
- inbond = object.interface(j).in ;
- outbond = object.interface(j).out ;
-
- if isempty(inbond)
- bond_number = outbond ;
- else
- bond_number = inbond ;
- end
-
- model = mttUpdateBondDomain(model,bond_number,existing_domain,existing_domain_item) ;
- end
- end
- end
- end
- end
-
|