0% found this document useful (0 votes)
349 views

Matlab Sap20

This document contains code to perform a structural analysis in SAP2000. It defines material properties, frame sections, loads, and runs the analysis to obtain results. The results from SAP2000 are then compared to independent results to calculate the percent difference at 7 load cases.

Uploaded by

83357796
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
349 views

Matlab Sap20

This document contains code to perform a structural analysis in SAP2000. It defines material properties, frame sections, loads, and runs the analysis to obtain results. The results from SAP2000 are then compared to independent results to calculate the percent difference at 7 load cases.

Uploaded by

83357796
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 9

%% clean-up the workspace & command window

clear;

clc;

%% set the following flag to true to manually specify the path to SAP2000.exe

%% this allows for a connection to a version of SAP2000 other than the latest
installation

%% otherwise the latest installed version of SAP2000 will be launched

SpecifyPath = false;

%% if the above flag is set to true, specify the path to ETABS below

ProgramPath = 'C:\Program Files\Computers and Structures\SAP2000 20\SAP2000.exe';

%% full path to API dll

%% set it to the installation folder

APIDLLPath = 'C:\Program Files\Computers and Structures\SAP2000 20\SAP2000v20.dll';

%% full path to the model

%% set it to the desired path of your model

ModelDirectory = 'C:\CSiAPIexample';

if ~exist(ModelDirectory, 'dir')

mkdir(ModelDirectory);

end

ModelName = 'API_1-001.sdb';

ModelPath = strcat(ModelDirectory, filesep, ModelName);

%% create API helper object

a = NET.addAssembly(APIDLLPath);

helper = SAP2000v20.Helper;

helper = NET.explicitCast(helper,'SAP2000v20.cHelper');
if SpecifyPath

%% create an instance of the SapObject from the specified path

SapObject = helper.CreateObject(ProgramPath);

else

%% create an instance of the SapObject from the latest installed ETABS

SapObject = helper.CreateObjectProgID('CSI.SAP2000.API.SapObject');

end

SapObject = NET.explicitCast(SapObject,'SAP2000v20.cOAPI');

helper = 0;

%% start Sap2000 application

SapObject.ApplicationStart;

%% create SapModel object

SapModel = NET.explicitCast(SapObject.SapModel,'SAP2000v20.cSapModel');

%% initialize model

ret = SapModel.InitializeNewModel;

%% create new blank model

File = NET.explicitCast(SapModel.File,'SAP2000v20.cFile');

ret = File.NewBlank;

%% define material property

PropMaterial = NET.explicitCast(SapModel.PropMaterial,'SAP2000v20.cPropMaterial');

ret = PropMaterial.SetMaterial('CONC', SAP2000v20.eMatType.Concrete);

%% assign isotropic mechanical properties to material


ret = PropMaterial.SetMPIsotropic('CONC', 3600, 0.2, 0.0000055);

%% define rectangular frame section property

PropFrame = NET.explicitCast(SapModel.PropFrame,'SAP2000v20.cPropFrame');

ret = PropFrame.SetRectangle('R1', 'CONC', 12, 12);

%% define frame section property modifiers

ModValue = NET.createArray('System.Double',8);

for i = 1 : 8

ModValue(i) = 1;

end

ModValue(1) = 1000;

ModValue(2) = 0;

ModValue(3) = 0;

ret = PropFrame.SetModifiers('R1', ModValue);

%% switch to k-ft units

ret = SapModel.SetPresentUnits(SAP2000v20.eUnits.kip_ft_F);

%% add frame object by coordinates

FrameObj = NET.explicitCast(SapModel.FrameObj,'SAP2000v20.cFrameObj');

FrameName1 = System.String(' ');

FrameName2 = System.String(' ');

FrameName3 = System.String(' ');

[ret, FrameName1] = FrameObj.AddByCoord(0, 0, 0, 0, 0, 10, FrameName1, 'R1', '1',


'Global');

[ret, FrameName2] = FrameObj.AddByCoord(0, 0, 10, 8, 0, 16, FrameName2, 'R1', '2',


'Global');

[ret, FrameName3] = FrameObj.AddByCoord(-4, 0, 10, 0, 0, 10, FrameName3, 'R1', '3',


'Global');
%% assign point object restraint at base

PointObj = NET.explicitCast(SapModel.PointObj,'SAP2000v20.cPointObj');

PointName1 = System.String(' ');

PointName2 = System.String(' ');

Restraint = NET.createArray('System.Boolean',6);

for i = 1 : 4

Restraint(i) = true();

end

for i = 5 : 6

Restraint(i) = false();

end

[ret, PointName1, PointName2] = FrameObj.GetPoints(FrameName1, PointName1,


PointName2);

ret = PointObj.SetRestraint(PointName1, Restraint);

%% assign point object restraint at top

for i = 1 : 2

Restraint(i) = true();

end

for i = 3 : 6

Restraint(i) = false();

end

[ret, PointName1, PointName2] = FrameObj.GetPoints(FrameName2, PointName1,


PointName2);

ret = PointObj.SetRestraint(PointName2, Restraint);

%% refresh view, update (initialize) zoom

View = NET.explicitCast(SapModel.View,'SAP2000v20.cView');

ret = View.RefreshView(0, false());


%% add load patterns

LoadPatterns = NET.explicitCast(SapModel.LoadPatterns,'SAP2000v20.cLoadPatterns');

ret = LoadPatterns.Add('1', SAP2000v20.eLoadPatternType.Other, 1, true());

ret = LoadPatterns.Add('2', SAP2000v20.eLoadPatternType.Other, 0, true());

ret = LoadPatterns.Add('3', SAP2000v20.eLoadPatternType.Other, 0, true());

ret = LoadPatterns.Add('4', SAP2000v20.eLoadPatternType.Other, 0, true());

ret = LoadPatterns.Add('5', SAP2000v20.eLoadPatternType.Other, 0, true());

ret = LoadPatterns.Add('6', SAP2000v20.eLoadPatternType.Other, 0, true());

ret = LoadPatterns.Add('7', SAP2000v20.eLoadPatternType.Other, 0, true());

%% assign loading for load pattern 2

[ret, PointName1, PointName2] = FrameObj.GetPoints(FrameName3, PointName1,


PointName2);

PointLoadValue = NET.createArray('System.Double',6);

for i = 1 : 6

PointLoadValue(i) = 0.0;

end

PointLoadValue(3) = -10;

ret = PointObj.SetLoadForce(PointName1, '2', PointLoadValue);

ret = FrameObj.SetLoadDistributed(FrameName3, '2', 1, 10, 0, 1, 1.8, 1.8);

%% assign loading for load pattern 3

[ret, PointName1, PointName2] = FrameObj.GetPoints(FrameName3, PointName1,


PointName2);

for i = 1 : 6

PointLoadValue(i) = 0.0;

end

PointLoadValue(3) = -17.2;

PointLoadValue(5) = -54.4;

ret = PointObj.SetLoadForce(PointName2, '3', PointLoadValue);


%% assign loading for load pattern 4

ret = FrameObj.SetLoadDistributed(FrameName2, '4', 1, 11, 0, 1, 2, 2);

%% assign loading for load pattern 5

ret = FrameObj.SetLoadDistributed(FrameName1, '5', 1, 2, 0, 1, 2, 2, 'Local');

ret = FrameObj.SetLoadDistributed(FrameName2, '5', 1, 2, 0, 1, -2, -2, 'Local');

%% assign loading for load pattern 6

ret = FrameObj.SetLoadDistributed(FrameName1, '6', 1, 2, 0, 1, 0.9984, 0.3744,


'Local');

ret = FrameObj.SetLoadDistributed(FrameName2, '6', 1, 2, 0, 1, -0.3744, 0,


'Local');

%% assign loading for load pattern 7

ret = FrameObj.SetLoadPoint(FrameName2, '7', 1, 2, 0.5, -15, 'Local');

%% switch to k-in units

ret = SapModel.SetPresentUnits(SAP2000v20.eUnits.kip_in_F);

%% save model

ret = File.Save(ModelPath);

%% run model (this will create the analysis model)

Analyze = NET.explicitCast(SapModel.Analyze,'SAP2000v20.cAnalyze');

ret = Analyze.RunAnalysis();

%% initialize for Sap2000 results

SapResult = zeros(7,1,'double');

[ret, PointName1, PointName2] = FrameObj.GetPoints(FrameName2, PointName1,


PointName2);
%% get Sap2000 results for load cases 1 through 7

AnalysisResults = NET.explicitCast(SapModel.Results,'SAP2000v20.cAnalysisResults');

AnalysisResultsSetup =
NET.explicitCast(AnalysisResults.Setup,'SAP2000v20.cAnalysisResultsSetup');

for i = 1 : 7

NumberResults = 0;

Obj = NET.createArray('System.String',2);

Elm = NET.createArray('System.String',2);

ACase = NET.createArray('System.String',2);

StepType = NET.createArray('System.String',2);

StepNum = NET.createArray('System.Double',2);

U1 = NET.createArray('System.Double',2);

U2 = NET.createArray('System.Double',2);

U3 = NET.createArray('System.Double',2);

R1 = NET.createArray('System.Double',2);

R2 = NET.createArray('System.Double',2);

R3 = NET.createArray('System.Double',2);

ret = AnalysisResultsSetup.DeselectAllCasesAndCombosForOutput;

ret = AnalysisResultsSetup.SetCaseSelectedForOutput(int2str(i));

if i <= 4

[ret, NumberResults, Obj, Elm, ACase, StepType, StepNum, U1, U2, U3, R1,
R2, R3] = AnalysisResults.JointDispl(PointName2,
SAP2000v20.eItemTypeElm.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] = AnalysisResults.JointDispl(PointName1, SAP2000v20.eItemTypeElm.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());

File = 0;

PropMaterial = 0;

PropFrame = 0;

FrameObj = 0;

PointObj = 0;

View = 0;

LoadPatterns = 0;

Analyze = 0;

AnalysisResults = 0;

AnalysisResultsSetup = 0;

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

You might also like