function counter = mttCountSystemMapping(model) sympars = count_system_sympars(model) ; inputs = count_system_inputs(model) ; invars = count_system_invars(model) ; outvars = count_system_outvars(model) ; states = count_system_states(model) ; counter.input = sympars + inputs + invars ; counter.output = outvars ; counter.state = states ; function counter = count_system_sympars(model) number_of_variables = mttGetFieldLength(model,'sympar') ; counter = 0 ; for i = 1:number_of_variables default_value = model.sympar_default{i} ; if isempty(default_value) counter = counter + 1 ; end end function counter = count_system_inputs(model) number_of_variables = mttGetFieldLength(model,'input') ; objects = mttGetFieldNames(model,'obj') ; for i = 1:length(objects) object_name = objects{i} ; object = getfield(model,'obj',object_name) ; additional_variables = 0 ; if ~isempty(object.abg) additional_variables = count_system_inputs(object) ; elseif ~isempty(object.cr) additional_variables = count_system_inputs(object.cr) ; end number_of_variables = number_of_variables + additional_variables ; end counter = number_of_variables ; function counter = count_system_invars(model,root,env) is_root_model = nargin==1 ; if is_root_model root = model ; env = model.env ; end number_of_variables = 0 ; objects = mttGetFieldNames(model,'obj') ; for i = 1:length(objects) object_name = objects{i} ; object = getfield(model,'obj',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 number_of_variables = number_of_variables + length(covar) ; end if ~isempty(outbond) covariables = mttGetCovariables(env,outbond.domain,outbond.domain_item) ; covar = [] ; if outbond.effort covar = covariables.effort ; elseif ~outbond.flow covar = covariables.flow ; end number_of_variables = number_of_variables + length(covar) ; end end additional_variables = 0 ; if ~isempty(object.abg) additional_variables = count_system_invars(object,root,env) ; end number_of_variables = number_of_variables + additional_variables ; end counter = number_of_variables ; function counter = count_system_outvars(model,root,env) is_root_model = nargin==1 ; if is_root_model root = model ; env = model.env ; end number_of_variables = 0 ; objects = mttGetFieldNames(model,'obj') ; for i = 1:length(objects) object_name = objects{i} ; object = getfield(model,'obj',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 number_of_variables = number_of_variables + length(covar) ; 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 number_of_variables = number_of_variables + length(covar) ; end end additional_variables = 0 ; if ~isempty(object.abg) additional_variables = count_system_outvars(object,root,env) ; end number_of_variables = number_of_variables + additional_variables ; end counter = number_of_variables ; function counter = count_system_states(model) number_of_variables = mttGetFieldLength(model,'state') ; objects = mttGetFieldNames(model,'obj') ; for i = 1:length(objects) object_name = objects{i} ; object = getfield(model,'obj',object_name) ; additional_variables = 0 ; if ~isempty(object.abg) additional_variables = count_system_states(object) ; elseif ~isempty(object.cr) additional_variables = count_system_states(object.cr) ; end number_of_variables = number_of_variables + additional_variables ; end counter = number_of_variables ;