Example
%% clean-up the workspace & command
window clear; clc;
%% pass data to Sap2000 as
one-dimensional arrays feature('COM_SafeArraySingleDim',
1);%% pass non-scalar arrays to Sap2000 API by reference feature('COM_PassSafeArrayByRef', 1);
%% create Sap2000 object SapObject = actxserver('Sap2000v15.SapObject');
%% start Sap2000 application SapObject.ApplicationStart;
%% create SapModel object SapModel = SapObject.SapModel;
%% initialize model ret = SapModel.InitializeNewModel;
%% create new blank model ret = SapModel.File.NewBlank;
%% define material property MATERIAL_CONCRETE = 2; ret = SapModel.PropMaterial.SetMaterial('CONC', MATERIAL_CONCRETE);
%% assign isotropic mechanical properties to material ret = SapModel.PropMaterial.SetMPIsotropic('CONC', 3600, 0.2, 0.0000055);
%% define rectangular frame section property ret = SapModel.PropFrame.SetRectangle('R1', 'CONC', 12, 12);
%% define frame section property modifiers ModValue = zeros(8,1,'double'); for i = 1 : 8 ModValue(i,1) = 1; end ModValue(1,1) = 1000; ModValue(2,1) = 0; ModValue(3,1) = 0; ret = SapModel.PropFrame.SetModifiers('R1', ModValue);
%% switch to k-ft units kip_ft_F = 4; ret = SapModel.SetPresentUnits(kip_ft_F);
%% add frame object by coordinates FrameName1 = ' '; FrameName2 = ' '; FrameName3 = ' '; [ret, FrameName1] = SapModel.FrameObj.AddByCoord(0, 0, 0, 0, 0, 10, FrameName1, 'R1', '1', 'Global'); [ret, FrameName2] = SapModel.FrameObj.AddByCoord(0, 0, 10, 8, 0, 16, FrameName2, 'R1', '2', 'Global'); [ret, FrameName3] = SapModel.FrameObj.AddByCoord(-4, 0, 10, 0, 0, 10, FrameName3, 'R1', '3', 'Global');
%% assign point object restraint at base PointName1 = ' '; PointName2 = ' '; Restraint = logical(zeros(6,1)); for i = 1 : 4 Restraint(i,1) = true(); end for i = 5 : 6 Restraint(i,1) = false(); end [ret, PointName1, PointName2] = SapModel.FrameObj.GetPoints(FrameName1, PointName1, PointName2); ret = SapModel.PointObj.SetRestraint(PointName1, Restraint);
%% assign point object restraint at top for i = 1 : 2 Restraint(i,1) = true(); end for i = 3 : 6 Restraint(i,1) = false(); end [ret, PointName1, PointName2] = SapModel.FrameObj.GetPoints(FrameName2, PointName1, PointName2); ret = SapModel.PointObj.SetRestraint(PointName2, Restraint);
%% refresh view, update (initialize) zoom ret = SapModel.View.RefreshView(0, false());
%% add load patterns LTYPE_OTHER = 8; ret = SapModel.LoadPatterns.Add('1', LTYPE_OTHER, 1, true()); ret = SapModel.LoadPatterns.Add('2', LTYPE_OTHER, 0, true()); ret = SapModel.LoadPatterns.Add('3', LTYPE_OTHER, 0, true()); ret = SapModel.LoadPatterns.Add('4', LTYPE_OTHER, 0, true()); ret = SapModel.LoadPatterns.Add('5', LTYPE_OTHER, 0, true()); ret = SapModel.LoadPatterns.Add('6', LTYPE_OTHER, 0, true()); ret = SapModel.LoadPatterns.Add('7', LTYPE_OTHER, 0, true());
%% assign loading for load pattern 2 [ret, PointName1, PointName2] = SapModel.FrameObj.GetPoints(FrameName3, PointName1, PointName2); PointLoadValue(6,1) = 0; PointLoadValue(3,1) = -10; ret = SapModel.PointObj.SetLoadForce(PointName1, '2', PointLoadValue); ret = SapModel.FrameObj.SetLoadDistributed(FrameName3, '2', 1, 10, 0, 1, 1.8, 1.8);
%% assign loading for load pattern 3 [ret, PointName1, PointName2] = SapModel.FrameObj.GetPoints(FrameName3, PointName1, PointName2); PointLoadValue(6,1) = 0; PointLoadValue(3,1) = -17.2; PointLoadValue(5,1) = -54.4; ret = SapModel.PointObj.SetLoadForce(PointName2, '3', PointLoadValue);
%% assign loading for load pattern 4 ret = SapModel.FrameObj.SetLoadDistributed(FrameName2, '4', 1, 11, 0, 1, 2, 2);
%% assign loading for load pattern 5 ret = SapModel.FrameObj.SetLoadDistributed(FrameName1, '5', 1, 2, 0, 1, 2, 2, 'Local'); ret = SapModel.FrameObj.SetLoadDistributed(FrameName2, '5', 1, 2, 0, 1, -2, -2, 'Local');
%% assign loading for load pattern 6 ret = SapModel.FrameObj.SetLoadDistributed(FrameName1, '6', 1, 2, 0, 1, 0.9984, 0.3744, 'Local'); ret = SapModel.FrameObj.SetLoadDistributed(FrameName2, '6', 1, 2, 0, 1, -0.3744, 0, 'Local');
%% assign loading for load pattern 7 ret = SapModel.FrameObj.SetLoadPoint(FrameName2, '7', 1, 2, 0.5, -15, 'Local');
%% switch to k-in units kip_in_F = 3; ret = SapModel.SetPresentUnits(kip_in_F);
%% save model ret = SapModel.File.Save('C:\API\API_1-001.sdb');
%% run model (this will create the analysis model) ret = SapModel.Analyze.RunAnalysis();
%% initialize for Sap2000 results SapResult= zeros(7,1,'double'); [ret, PointName1, PointName2] = SapModel.FrameObj.GetPoints(FrameName2, PointName1, PointName2);
%% get Sap2000 results for load cases 1 through 7 for i = 1 : 7 NumberResults = 0; Obj = cellstr(' '); Elm = cellstr(' '); ACase = cellstr(' '); StepType = cellstr(' '); StepNum = zeros(1,1,'double'); U1 = zeros(1,1,'double'); U2 = zeros(1,1,'double'); U3 = zeros(1,1,'double'); R1 = zeros(1,1,'double'); R2 = zeros(1,1,'double'); R3 = zeros(1,1,'double'); ObjectElm = 0; ret = SapModel.Results.Setup.DeselectAllCasesAndCombosForOutput; ret = SapModel.Results.Setup.SetCaseSelectedForOutput(int2str(i)); if i <= 4 [ret, NumberResults, Obj, Elm, ACase, StepType, StepNum, U1, U2, U3, R1, R2, R3] = SapModel.Results.JointDispl(PointName2, ObjectElm, NumberResults, Obj, Elm, ACase, StepType, StepNum, U1, U2, U3, R1, R2, R3); SapResult(i) = U3(1); else [ret, NumberResults, Obj, Elm, ACase, StepType, StepNum, U1, U2, U3, R1, R2, R3] = SapModel.Results.JointDispl(PointName1, ObjectElm, NumberResults, Obj, Elm, ACase, StepType, StepNum, U1, U2, U3, R1, R2, R3); SapResult(i) = U1(1); end end
%% close Sap2000 ret = SapObject.ApplicationExit(false()); SapModel = 0; SapObject = 0;
%% fill independent results IndResult= zeros(7,1,'double'); IndResult(1) = -0.02639; IndResult(2) = 0.06296; IndResult(3) = 0.06296; IndResult(4) = -0.2963; IndResult(5) = 0.3125; IndResult(6) = 0.11556; IndResult(7) = 0.00651;
%% fill percent difference PercentDiff = zeros(7,1,'double'); for i = 1 : 7 PercentDiff(i) = (SapResult(i) / IndResult(i)) - 1; end
%% display results SapResult IndResult PercentDiff |