# PBSD二次开发 **Repository Path**: civilwilson/PBSD-SecondaryDevelopment ## Basic Information - **Project Name**: PBSD二次开发 - **Description**: 基于PBSD的二次开发,功能包括: 1. 结构及构件性能评估; 2. 结构宏观分析结果:最大层间位移角,残余层间位移角,等; 3. 构件性能评估结果:构件变形、应变、需求能力比、变形限值,等; 4. 构件承载力计算及性能指标插值。 - **Primary Language**: C# - **License**: AGPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 1 - **Created**: 2020-12-13 - **Last Updated**: 2024-09-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # PBSD二次开发 ## PBSD简介 * **结构抗震性能设计软件PBSD**包含[设计指标统计](https://help.gwforu.com/PBSD/DesignData)、[地震动工具箱](https://help.gwforu.com/PBSD/GMTool)、[弹塑性分析](https://help.gwforu.com/PBSD/PERFORM3D)、[抗震性能评估](https://help.gwforu.com/PBSD/SeismicPerform)等模块功能; * PBSD正式版于2019年底上线,截止至2021年底注册用户超1500人,涵盖国内超250所设计院及高等院校; * 点击跳转[PBSD官方网站](http://www.wwforu.com),点击跳转[PBSD用户手册及功能介绍](https://help.gwforu.com),点击[加入官方交流群](https://help.gwforu.com/PBSD/General/afaf)。 * 为满足研究人员及高级用户的需求,开放二次开发接口,可用于且不限于:不同方案间构件性能对比、批量模型构件损伤批量提取,等。 ## 二次开发接口功能简介 * 结构及构件性能评估; * **结构宏观结果-塔楼**:最大层间位移角GetMaxDrift、最大残余层间位移角GetMaxResDrift、顶点位移GetTopDisp、底部剪力GetBottomForce、底部倾覆弯矩GetBottomMoment; * **结构宏观结果-楼层**:最大层间位移角GetMaxDrift、残余层间位移角GetResDrift、最大位移GetMaxDisp、最大剪力GetMaxForce、最大倾覆弯矩GetMaxMoment; * **构件性能结果-塔楼**:单元组各楼层构件性能状态占比GetStoreyDeformPerformRatio; * **构件性能结果-楼层**:单元组楼层平均变形GetAVGDeform、单元组楼层平均变形需求能力比GetAVGDeformDCR; * **构件性能结果-构件**:变形大小GetDeform、变形限值GetDeformLimits、变形需求能力比GetDeformDCRList、某性能的变形需求能力比GetDeformDCR、压应变GetCompressStrain、拉应变GetTensionStrain; * **截面承载力计算与构件变形指标插值**; * C#使用案例详见[ExampleDemo.cs](https://gitee.com/civilwilson/PBSD-SecondaryDevelopment/blob/master/PBSD_Development/PBSD_Development/ExampleDemo.cs); ## 结构及构件性能评估:C#使用说明 #### 架构与文档 ![架构与文档](http://server.wwforu.com//application//GiteeImage//PBSD-Doc20211204.png) #### 分析结果FEMResultObj ```C# /// /// 构造分析结果 /// /// PF3DS所在路径或.tcl所在路径 /// 如果宏观分析结果存在,是否重新读取 FEMResultObj result = new FEMResultObj(string directPath, bool isReRead); /// /// 反序列化构件分析结果 /// /// 是否成功 bool isSuccess = result.SetElementResult(); ``` #### 工况LoadCaseObj ```C# /// /// 地震工况列表 /// /// 工况对象列表 List loadCaseList = result.GetGroundMotionLoadCaseList(); //获得工况 LoadCaseObj loadCase = loadCaseList.First(); //获得工况名称 string loadcaseName = loadCase.Name; ``` #### 体系SystemObj ```C# /// /// 获得体系(多塔塔楼集合) /// /// 体系对象 SystemObj system = result.GetSystem(); /// /// 获得所有塔楼 /// /// 塔楼对象列表 List towerList = system.GetTowerList(); ``` #### 塔楼TowerObj ```C# /// /// 获得体系第一塔楼 /// /// 塔楼对象 TowerObj tower = result.GetFirstTower(); /// /// 获得体系第一塔楼 /// /// 塔楼对象 TowerObj tower = system.GetFirstTower(); /// /// 体系内塔楼查询 /// /// 塔楼编号 /// 塔楼对象 /// 是否存在 bool isExist = system.GetTower(int towerIndex, out TowerObj towerObj); /// /// 塔楼最大层间位移角 /// /// 工况 /// X向/Y向层间位移角 /// 层间位移角 var maxDrift = tower.GetMaxDrift(LoadCaseObj loadcase, bool isX); /// /// 塔楼最大残余层间位移角 /// /// 工况 /// X向/Y向残余层间位移角 /// 残余层间位移角 var resDrift = tower.GetMaxResDrift(LoadCaseObj loadcase, bool isX); /// /// 塔楼最大顶点位移 /// /// 工况 /// X向/Y向顶点位移 /// 位移 var topDisp = tower.GetTopDisp(LoadCaseObj loadcase, bool isX); /// /// 最大基底剪力 /// /// 工况 /// X向/Y向基底剪力 /// 基底剪力 var baseShear = tower.GetBottomForce(LoadCaseObj loadcase, bool isX); /// /// 最大基底倾覆弯矩 /// /// 工况 /// X向/Y向倾覆弯矩 /// 倾覆弯矩 var baseMoment = tower.GetBottomMoment(LoadCaseObj loadcase, bool isX); ``` #### 楼层StoreyObj ```C# /// /// 塔楼所有楼层 /// /// 楼层列表 List storeyList = tower.GetStoreyList(); /// /// 塔楼内楼层查询 /// /// 楼层编号 /// 楼层对象 /// 是否存在 bool isExist = tower.GetStorey(int storeyIndex, out StoreyObj storeyObj); /// /// 楼层最大层间位移角 /// /// 工况 /// X向/Y向层间位移角 /// 层间位移角 var maxDrift = storeyObj.GetMaxDrift(LoadCaseObj loadcase, bool isX); /// /// 楼层残余层间位移角 /// /// 工况 /// X向/Y向残余层间位移角 /// 残余层间位移角 var resDrift = storeyObj.GetResDrift(LoadCaseObj loadcase, bool isX); /// /// 最大楼层位移 /// /// 工况 /// X向/Y向顶点位移 /// 位移 var topDisp = storeyObj.GetMaxDisp(LoadCaseObj loadcase, bool isX); /// /// 最大楼层剪力 /// /// 工况 /// X向/Y向剪力 /// 剪力 var baseShear = storeyObj.GetMaxForce(LoadCaseObj loadcase, bool isX); /// /// 最大楼层倾覆弯矩 /// /// 工况 /// X向/Y向倾覆弯矩 /// 倾覆弯矩 var baseMoment = storeyObj.GetMaxMoment(LoadCaseObj loadcase, bool isX); ``` #### 单元组集合ElementGroupSetObj ```C# /// /// 单元组对象列表 /// /// 单元组对象 /// 是否存在构件分析结果 bool isExist = result.GetElementGroupSetObj(out ElementGroupSetObj groupSet); /// /// 单元组描述 /// /// 单元组描述列表 List groupDescps = groupSet.GetGroupDescps(); ``` #### 单元组ElementGroupObj ```C# /// /// 获得所有单元组 /// /// 单元组对象列表 List groupObjList = groupSet.GetGroupList(); /// /// 获得所有框架单元组 /// /// 框架单元组列表 List frameGroupList = groupSet.GetFRAMEGroupList(); /// /// 获得所有墙单元组 /// /// 墙单元组列表 List wallGroupList = groupSet.GetWallGroupList(); /// /// 获得单元组 /// /// 单元组描述 /// 单元组对象 /// 是否存在 bool isExist = groupSet.GetGroup(string descp, out ElementGroupObj groupObj); /// /// 楼层内单元组构件的平均转角 /// /// 工况 /// 楼层 /// 平均转角 float avgDeform = groupObj.GetAVGDeform(LoadCaseObj loadcase, StoreyObj storey); /// /// 楼层内单元组构件的平均能力需求比 /// /// 工况 /// 楼层 /// 性能类型 /// 需求能力比 float avgDeformDCR = groupObj.GetAVGDeformDCR(LoadCaseObj loadcase, StoreyObj storey, DeformType deformType); /// /// 单元组各楼层构件性能状态占比 /// /// 工况 /// 塔楼 /// 各楼层构件性能状态占比 Dictionary> deformPerformDict = groupObj.GetStoreyDeformPerformRatio(LoadCaseObj loadcase, TowerObj tower); ``` #### 单元ElementObj ```C# /// /// 获得所有单元 /// /// 单元对象列表 List elementList = groupObj.GetElementList(); /// /// 楼层内单元组的所有单元 /// /// 楼层对象 /// 单元对象列表 List elementList = groupObj.GetElementList(StoreyObj storey); //获得第一个单元 ElementObj element = elementList.First(); /// /// 最大压应变 /// /// 工况 /// 压应变 float compressStrain = element.GetCompressStrain(LoadCaseObj loadCase); /// /// 最大拉应变 /// /// 工况 /// 拉应变 float tensionStrain = element.GetTensionStrain(LoadCaseObj loadCase); /// /// 控制性能的构件变形 /// /// 工况 /// 构件变形 float deform = element.GetDeform(LoadCaseObj loadCase); /// /// 端部构件变形 /// /// 工况 /// 端部类型 /// 构件变形 float deform = element.GetDeform(LoadCaseObj loadCase, FRAMReusltDirect direct); /// /// 控制性能的变形限值 /// /// 工况 /// 变形限值列表 List deformLimits = element.GetDeformLimits(LoadCaseObj loadCase); /// /// 端部变形限值 /// /// 工况 /// 端部类型 /// 变形限值列表 List deformLimits = element.GetDeformLimits(LoadCaseObj loadCase, FRAMReusltDirect direct); /// /// 控制性能的需求能力比列表 /// /// 工况 /// 需求能力比列表 List deformDCRList = element.GetDeformDCRList(LoadCaseObj loadCase); /// /// 端部需求能力比列表 /// /// 工况 /// 端部类型 /// 需求能力比列表 List deformDCRList = element.GetDeformLimits(LoadCaseObj loadCase, FRAMReusltDirect direct); /// /// 控制性能的某个性能状态下的需求能力比 /// /// 工况 /// 性能类型 /// 需求能力比 float deformDCR = element.GetDeformDCR(LoadCaseObj loadCase, DeformType deformType); /// /// 端部某个性能状态下的需求能力比 /// /// 工况 /// 端部类型 /// 性能类型 /// 需求能力比 float deformDCR = element.GetDeformDCR(LoadCaseObj loadCase, FRAMReusltDirect direct, DeformType deformType); ``` #### 节点NodeObj ```C# /// /// 获得所有节点 /// /// 节点对象列表 List nodeList = element.GetNodeList(); //第一个节点 NodeObj node = nodeList.First(); //坐标 double x = node.X; double y = node.Y; double z = node.Z; ``` ## 截面承载力计算及构件变形指标插值:C#使用说明 #### 基本步骤 1. 定义截面受力(剪跨、轴力)及截面尺寸; 2. 定义配筋数据(纵筋、箍筋、分布筋,等); 3. 定义材料强度; 4. 通过SetLimits完成承载力计算和变形指标插值; 4. 获得变形指标及截面抗弯、抗剪承载力,等。 #### 架构与文档 ![架构与文档](http://server.wwforu.com//application//GiteeImage//PBSD-PIDoc20211205.png) #### 框架截面构造 ```C# /// /// 构造截面 /// /// 剪跨长度 mm /// 轴力 N var section = new FrameSection(double shearSpan, double axialLoad = 0); /// /// 设定矩形截面 /// /// 截面宽度 /// 截面高度 /// 保护层厚度 section.SetRCRectangularSection(double width, double height, int cover); /// /// 工形劲截面 /// /// 截面宽度 /// 截面高度 /// 腹板厚度 /// 型钢高度 /// 翼缘宽度 /// 翼缘厚度 /// 保护层厚度 section.SetSRCRectangularSection13(double width, double height, double webThick, double steelHeight, double flangeWidth, double flangeThick, int cover); /// /// 对称十字劲截面 /// /// 截面宽度 /// 截面高度 /// 腹板厚度 /// 型钢高度 /// 翼缘宽度 /// 翼缘厚度 /// 保护层厚度 section.SetSRCRectangularSection15(double width, double height, double webThick, double steelHeight, double flangeWidth, double flangeThick, int cover); /// /// 设定矩形梁配筋 /// /// 顶筋-正向加载受压钢筋 /// 底筋-正向加载受拉钢筋 section.SetRectBeamReinforcement(int AsCompress, int AsTension); /// /// 设定矩形柱截面 /// /// 角筋 /// 除角筋外的X向(宽度方向)单测配筋 /// 除角筋外的Y向(高度方向)单测配筋 section.SetRectColumnReinforcement(int Ascor, int Asx, int Asy); /// /// 设定箍筋信息 /// /// 面积配箍率(加载方向) /// 体积配箍率 section.SetStirrup(double sRatio, double vRatio); ``` #### 剪力墙截面构造 ```C# /// /// 构造截面 /// /// 剪跨长度 mm /// 轴力 N var section = new WallSection(double shearSpan, double axialLoad = 0); /// /// 一字墙截面 /// /// 墙长 /// 墙厚 /// I端边缘构件长度 /// J端边缘构件长度 section.SetWallSection(double length, double thickness, double boundaryLengthI, double boundaryLengthJ); /// /// 异形墙截面(L、T等) /// /// 墙长 /// 墙厚 /// I端边缘构件长度 /// J端边缘构件长度 /// I端边缘构件面积放大系数 /// J端边缘构件面积放大系数 section.SetWallSection(double length, double thickness, double boundaryLengthI, double boundaryLengthJ, double boundaryAreaFactorI, double boundaryAreaFactorJ); /// /// 设定剪力墙配筋信息 /// /// 竖向分布筋配筋率 /// 水平分布筋配筋率 /// I端边缘构件纵筋配筋率 /// J端边缘构件纵筋配筋率 /// 边缘构件体积配箍率 section.SetWallReinforcement(double vAsRatio, double hAsRatio, double bAsRatioI, double bAsRatioJ, double bStirrupVRatio); /// /// 设定型钢及钢板 /// /// I端边缘构件含钢率 /// J端边缘构件含钢率 /// 钢板厚度 section.SetWallSteel(double steelRatioI, double steelRatioJ, double steelPlateThickness = 0); ``` #### 材料强度 ```C# /// /// 设定RC构件材料强度 /// /// 混凝土等级 /// 纵筋强度 /// 箍筋强度 section.SetRCMaterial(int concreteGrade, int barGrade, int stirrupGrade); /// /// 设定SRC构件材料强度 /// /// 混凝土等级 /// 纵筋强度 /// 箍筋强度 /// 型钢强度 section.SetSRCMaterial(int concreteGrade, int barGrade, int stirrupGrade, int steelGrade); ``` #### 承载力与性能指标 ```C# /// /// 设定变形限值 /// /// 是否正向加载(剪力墙i端受拉) /// 剪力大小(部分截面类型用于计算剪压比) /// 是否成功 bool isSuccess = section.SetLimits(bool isPosLoading, double shearForce = 0); /// /// 抗弯承载力 /// /// 承载力类型:设计值、标准值、平均值 /// 承载力 double momentCapacity = section.GetMomentCapacity(CapacityType capacityType); /// /// 抗剪承载力 /// /// 承载力类型:设计值、标准值、平均值 /// 承载力 double shearCapacity = section.GetShearCapacity(CapacityType capacityType); /// /// 变形限值 /// /// 变形限值 List limits = section.GetLimits(); /// /// 破坏形态 /// /// 破坏形态 DamageMode damageMode = section.GetDamageMode(); /// /// 性能状态 /// /// 构件变形 /// 性能状态 DeformType perform = section.GetPerform(double rotation); //弯剪比 double msr = section.MSR; //剪跨比 double lamda = section.Lammda; //轴压系数 double alr = section.AxialLoadRatio; ```