# 滞回与骨架数据处理
**Repository Path**: HawkYarn/HystereticSkeletonPrj
## Basic Information
- **Project Name**: 滞回与骨架数据处理
- **Description**: 1、滞回:滞回环分解、骨架提取、耗能计算、等效阻尼比计算、割线刚度计算,等。
2、骨架:等效屈服点计算、延性系数计算,等;
3、屈服点计算:作图法、Park法、能量等效法。
- **Primary Language**: C#
- **License**: MulanPSL-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 9
- **Created**: 2022-05-25
- **Last Updated**: 2022-05-25
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 滞回与骨架数据处理
## 介绍
* 滞回:滞回环分解、骨架提取、耗能计算、等效阻尼比计算、割线刚度计算,等。
* 骨架:等效屈服点计算、延性系数计算,等;
* 屈服点计算:作图法、Park法、能量等效法。
* 滞回曲线案例详见[ColumnTest](https://gitee.com/civilwilson/HystereticSkeletonPrj/tree/master/HystereticBasic/ColumnTest)
* C#使用案例详见[Example.cs](https://gitee.com/civilwilson/HystereticSkeletonPrj/blob/master/HystereticBasic/HystereticBasic/Example.cs)
* Python使用案例详见[Hysteretic.py](https://gitee.com/civilwilson/HystereticSkeletonPrj/blob/master/HystereticBasic/HystereticBasic/Python/Hysteretic.py)
## C#使用说明
#### 构造滞回数据
```C#
///
/// 构造滞回数据
///
/// 滞回数据文件路径
/// 跳过行数
/// 骨架取滞回环位移最大点,否则取力最大点
/// 是否过滤等位移滞回环(仅保留第一滞回环)
var dataObj = new BasicData(string filePath, int skipLine, bool isDispCtrl, bool isFilter);
///
/// 构造滞回数据
///
/// 位移数据点
/// 力数据点
/// 骨架取滞回环位移最大点,否则取力最大点
/// 是否过滤等位移滞回环(仅保留第一滞回环)
var dataObj = new BasicData(List dispList, List forceList, bool isDispCtrl, bool isFilter);
```
#### 滞回数据常用操作
```C#
///
/// 获得加载历史
///
/// 每个滞回环的最大位移
List histroy = dataObj.CircleSet.GetLoadingHistory();
///
/// 获得数据
///
/// 数据类型(累积面积、刚度退化系数、粘滞阻尼系数等)
/// 对象数据列表
List reusltList = dataObj[DataType dataType];
///
/// 获得滞回环数据
///
/// 是否过滤等位移滞回环(仅保留第一滞回环)
/// 滞回环对象列表
List circleList = dataObj.CircleSet.GetCircleList(bool isFilter);
```
#### 滞回环常用操作
```C#
// 获得第一个滞回环对象
OneCircle circle = circleList.First();
// 滞回环的最大、最小位移点,最大、最小承载力点
ForceDispBasicPair dispMaxPtr = circle.DispMaxPoint;
ForceDispBasicPair dispMinPtr = circle.DispMinPoint;
ForceDispBasicPair forceMaxPtr = circle.ForceMaxPoint;
ForceDispBasicPair forceMinPtr = circle.ForceMinPoint;
// 通过点获得对应的位移和变形
float dispMax = dispMaxPtr.Disp;
float forceMax = forceMaxPtr.Force;
///
/// 求滞回环面积
///
/// 面积
float A = circle.GetA();
```
#### 骨架曲线常用操作
```C#
// 骨架曲线
ForceDispObj skeleton = dataObj.SkeletonCurveObj;
///
/// 获得正向或负向骨架曲线
///
/// 是否为正向
/// 骨架曲线
ForceDispObj negSkeleton = skeleton.GetHalfSkeletonCurveObj(bool isPositive);
///
/// 力位移曲线位移放缩
///
/// 放缩系数
negSkeleton.DispAmplitude(double factor);
///
/// 力位移曲线力放缩
///
/// 放缩系数
negSkeleton.ForceAmplitude(double factor);
//骨架曲线位移和力散点
List dispSkeletonList = negSkeleton.Disps;
List forceSkeletonList = negSkeleton.Forces;
```
#### 延性系数常用操作
```C#
///
/// 构造延性系数求解器
///
/// 力位移均为+的骨架
var obj = new DuctilityData(ForceDispObj negSkeleton);
///
/// 设定延性系数相关方法的计算参数
///
/// 极限承载力退化系数
/// Park法系数
obj.SetDuctilityFactor(float UltimateStrengthCo, float ParkCo);
///
/// 获得延性系数
///
/// 计算方法
///
float factor = obj.GetDuctilityFactor(DuctilityMethod methodType);
```
## python使用说明
#### 构造滞回数据
```python
# 构造滞回数据
# filePath: 滞回数据文件路径 string
# skipLine: 跳过行数 int
# isDispCtrl: 骨架取滞回环位移最大点,否则取力最大点 bool
# isFilter: 是否过滤等位移滞回环(仅保留第一滞回环) bool
dataObj = HystereticBasic.BasicData(filePath, 0, isDisp, isFilter)
# 构造滞回数据
# dispList: 位移数据点 List
# forceList: 力数据点 List
# isDispCtrl: 骨架取滞回环位移最大点,否则取力最大点 bool
# isFilter: 是否过滤等位移滞回环(仅保留第一滞回环) bool
dataObj = HystereticBasic.BasicData(dispList, forceList, isDispCtrl, isFilter)
```
#### 滞回数据常用操作
```python
# 每个滞回环的最大位移
histroy = dataObj.CircleSet.GetLoadingHistory()
# 获得累积耗能面积 List
energyList = dataObj[HystereticBasic.DataType.Energy]
# 获得刚度退化系数 List
sDegradationList = dataObj[HystereticBasic.DataType.DegradCoe]
# 获得每个滞回环 List
# isFilter: 是否过滤等位移滞回环(仅保留第一滞回环) bool
circleList = dataObj.CircleSet.GetCircleList(isFilter)
```
#### 滞回环常用操作
```python
# 获得第一个滞回环对象
circle = circleList[0]]
# 滞回环的最大、最小位移点,最大、最小承载力点
dispMaxPtr = circle.DispMaxPoint
dispMinPtr = circle.DispMinPoint
forceMaxPtr = circle.ForceMaxPoint
forceMinPtr = circle.ForceMinPoint
# 通过点获得对应的位移和变形
dispMax = dispMaxPtr.Disp
forceMax = forceMaxPtr.Force
# 求滞回环面积
A = circle.GetA()
```
#### 骨架曲线常用操作
```python
# 骨架曲线
skeleton = dataObj.SkeletonCurveObj
# 获得正向或负向骨架曲线
# isPositive: 是否为正向 bool
negSkeleton = skeleton.GetHalfSkeletonCurveObj(isPositive)
# 力位移曲线位移放缩
# factor: 放缩系数 float
negSkeleton.DispAmplitude(factor)
# 力位移曲线力放缩
# factor: 放缩系数 float
negSkeleton.ForceAmplitude(factor)
# 骨架曲线位移和力散点
dispSkeletonList = negSkeleton.Disps
forceSkeletonList = negSkeleton.Forces
```
#### 延性系数常用操作
```python
# 构造延性系数求解器
# negSkeleton: 力位移均为+的骨架
obj = HystereticBasic.DuctilityData(negSkeleton)
# 设定延性系数相关方法的计算参数
# UltimateStrengthCo: 极限承载力退化系数 float
# ParkCo: Park法系数 float
obj.SetDuctilityFactor(UltimateStrengthCo, ParkCo)
# 获得延性系数
# methodType: 计算方法 float
factor = obj.GetDuctilityFactor(DuctilityMethod methodType)
```