% APM Index 2+ DAE Integrator % % y = apm_solve(app) % % Function apm_solve uploads the model file (apm) and optionally % a data file (csv) with the same name to the web-server and performs % a forward-time stepping integration of ODE or DAE equations % with the following arguments: % % Input: app = model (apm) and data file (csv) name % % Output: y.names = names of all variables % y.values = tables of values corresponding to y.names % y.nvar = number of variables % y.x = combined variables and values but variable % names may be modified to make them valid MATLAB % characters (e.g. replace '[' with '_') % function y = apm_solve(app) % server and application file names server = 'http://xps.apmonitor.com'; app_model = [app '.apm']; app_data = [app '.csv']; % clear previous application apm(server,app,'clear all'); % check that model file exists (required) if (~exist(app_model,'file')), disp(['Error: file ' app_model ' does not exist']); y = []; return else % load model file apm_load(server,app,app_model); end % check if data file exists (optional) if (exist(app_data,'file')), % load data file csv_load(server,app,app_data); end % default options % use or don't use web viewer web = false; if web, apm_option(server,app,'nlc.web',2); else apm_option(server,app,'nlc.web',0); end % internal nodes in the collocation (between 2 and 6) apm_option(server,app,'nlc.nodes',3); % sensitivity analysis (default: 0 - off) apm_option(server,app,'nlc.sensitivity',0); % simulation mode (1=ss, 2=mpu, 3=rto) % (4=sim, 5=est, 6=nlc, 7=sqs) apm_option(server,app,'nlc.imode',7); % attempt solution solver_output = apm(server,app,'solve'); % check for successful solution status = apm_tag(server,app,'nlc.appstatus'); if status==1, % open web viewer if selected if web, apm_web(server,app); end % retrieve solution and solution.csv y = apm_sol(server,app); return else apm_web_root(server,app); disp(solver_output); disp('Error: Did not converge to a solution'); y = solver_output; return end