function icd = mttCreateSystemMdl_ICD(model) sympar = map_system_sympars(model) ; input = map_system_inputs(model) ; invar = map_system_invars(model) ; outvar = map_system_outvars(model) ; icd.output_namelist = outvar ; icd.input_namelist = invar ; if ~isempty(input) icd.input_namelist = [icd.input_namelist,input] ; end if ~isempty(sympar) icd.input_namelist = [icd.input_namelist,sympar] ; end icd.output_namelist = sort(icd.output_namelist) ; icd.input_namelist = sort(icd.input_namelist) ; function map = map_system_sympars(model) mttNotify('...mapping system inputs (symbolic parameters)') ; mttWriteNewLine ; map = [] ; line = 0 ; number_of_variables = mttGetFieldLength(model,'sympar') ; model_name = mttDetachText(model.source,'/') ; for i = 1:number_of_variables variable_name = model.sympar{i} ; default_value = model.sympar_default{i} ; if isempty(default_value) line = line + 1 ; map{line} = [model_name,'___',variable_name] ; end end function map = map_system_inputs(model,root,branch) is_root_model = nargin==1 ; if is_root_model mttNotify('...mapping system inputs (input variables)') ; mttWriteNewLine ; root = model ; current_branch = mttDetachText(model.source,'/') ; else current_branch = branch ; end map = [] ; line = 0 ; number_of_variables = mttGetFieldLength(model,'input') ; for i = 1:number_of_variables variable_name = model.input{i} ; line = line + 1 ; map{line} = [current_branch,'___',variable_name] ; end objects = mttGetFieldNames(model,'obj') ; for i = 1:length(objects) object_name = objects{i} ; object = getfield(model,'obj',object_name) ; next_branch = [current_branch,'__',object_name] ; additional_map = [] ; if ~isempty(object.abg) additional_map = map_system_inputs(object,root,next_branch) ; elseif ~isempty(object.cr) additional_map = map_system_inputs(object.cr,root,next_branch) ; end if isempty(map) map = additional_map ; else line = length(map) ; for j = 1:length(additional_map) if ~ismember(additional_map{j},map) line = line + 1 ; map{line} = additional_map{j} ; end end end end function map = map_system_invars(model,root,branch,env) is_root_model = nargin==1 ; if is_root_model mttNotify('...mapping system inputs (input covariables)') ; mttWriteNewLine ; root = model ; current_branch = mttDetachText(model.source,'/') ; env = model.env ; else current_branch = branch ; end map = [] ; line = 0 ; objects = mttGetFieldNames(model,'obj') ; for i = 1:length(objects) object_name = objects{i} ; object = getfield(model,'obj',object_name) ; next_branch = [current_branch,'__',object_name] ; switch object.class case {'SS','Se','Sf','De','Df'} inbond_number = object.interface.in ; outbond_number = object.interface.out ; inbond = model.bond(inbond_number) ; outbond = model.bond(outbond_number) ; if ~isempty(inbond) covariables = mttGetCovariables(env,inbond.domain,inbond.domain_item) ; covar = [] ; if ~inbond.effort if ~strcmp(object.class,'Df') covar = covariables.effort ; end elseif inbond.flow if ~strcmp(object.class,'De') covar = covariables.flow ; end end for j = 1:length(covar) line = line + 1 ; covariable = strrep(covar{j},'.','__') ; map{line} = [current_branch,'__',object_name,'(',covariable,')'] ; end end if ~isempty(outbond) covariables = mttGetCovariables(env,outbond.domain,outbond.domain_item) ; if outbond.effort covar = covariables.effort ; elseif ~outbond.flow covar = covariables.flow ; end for j = 1:length(covar) line = line + 1 ; covariable = strrep(covar{j},'.','__') ; map{line} = [current_branch,'__',object_name,'(',covariable,')'] ; end end end additional_map = [] ; if ~isempty(object.abg) additional_map = map_system_invars(object,root,next_branch,env) ; end if isempty(map) map = additional_map ; else line = length(map) ; for j = 1:length(additional_map) if ~ismember(additional_map{j},map) line = line + 1 ; map{line} = additional_map{j} ; end end end end function map = map_system_outvars(model,root,branch,env) is_root_model = nargin==1 ; if is_root_model mttNotify('...mapping system outputs (output covariables)') ; mttWriteNewLine ; root = model ; current_branch = mttDetachText(model.source,'/') ; env = model.env ; else current_branch = branch ; end map = [] ; line = 0 ; objects = mttGetFieldNames(model,'obj') ; for i = 1:length(objects) object_name = objects{i} ; object = getfield(model,'obj',object_name) ; next_branch = [current_branch,'__',object_name] ; switch object.class case {'SS','Se','Sf','De','Df'} inbond_number = object.interface.in ; outbond_number = object.interface.out ; inbond = model.bond(inbond_number) ; outbond = model.bond(outbond_number) ; if ~isempty(inbond) covariables = mttGetCovariables(env,inbond.domain,inbond.domain_item) ; covar = [] ; if inbond.effort covar = covariables.effort ; elseif ~inbond.flow covar = covariables.flow ; end for j = 1:length(covar) line = line + 1 ; covariable = strrep(covar{j},'.','__') ; map{line} = [current_branch,'__',object_name,'(',covariable,')'] ; end end if ~isempty(outbond) covariables = mttGetCovariables(env,outbond.domain,outbond.domain_item) ; covar = [] ; if ~outbond.effort if ~strcmp(object.class,'Sf') covar = covariables.effort ; end elseif outbond.flow if ~strcmp(object.class,'Se') covar = covariables.flow ; end end for j = 1:length(covar) line = line + 1 ; covariable = strrep(covar{j},'.','__') ; map{line} = [current_branch,'__',object_name,'(',covariable,')'] ; end end end additional_map = [] ; if ~isempty(object.abg) additional_map = map_system_outvars(object,root,next_branch,env) ; end if isempty(map) map = additional_map ; else line = length(map) ; for j = 1:length(additional_map) if ~ismember(additional_map{j},map) line = line + 1 ; map{line} = additional_map{j} ; end end end end