# WSAPDemo
**Repository Path**: timegis/WSAPDemo
## Basic Information
- **Project Name**: WSAPDemo
- **Description**: 基于C++开发力学求解器,开放CLR接口,方便测试及入门者使用。
- **Primary Language**: C#
- **License**: MulanPSL-1.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 5
- **Created**: 2022-09-04
- **Last Updated**: 2022-09-04
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# WSAP结构力学求解器
### 依赖关系
1. 生成目录需包含以下链接库,WSAPNet.dll及WSAPModelVisible.dll为关键引用项;
2. [WSAP_Release](https://gitee.com/civilwilson/WSAPDemo/tree/master/WSAP_Release)含有稳定版本的依赖项链接库
3. [WSAP_Bin/WSAP_Debug](https://gitee.com/civilwilson/WSAPDemo/tree/master/WSAP_Bin/WSAP_Debug)为生成路径
4. 程序运行需依赖VC运行库环境(2015-2019):[vc_redist.x64.exe(点击跳转)](https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads)
依赖 | 简介 |
:-------------: | :-------------: |
WSAP.dll | 力学求解器核心 |
WSAPCLR.dll | 力学求解器核心 |
WSAPNet.dll | clr对外接口,关键引用项 |
WSAPModelVisible.dll | 拓展方法,关键引用项 |
PGMHelper.dll | 编程辅助 |
Login.dll | 广州市微望建筑科技有限公司 |
Newtonsoft.Json.dll | 序列化与反序列化 |
Chart3D.dll | .NET简易三维绘图 |
#### 目录
实例 | 简介 |
:-------------:| :------------- |
[WSAPCantileverColumn](https://gitee.com/civilwilson/WSAPDemo/tree/master/WSAPCantileverColumn) | 悬臂杆模型:P-Delta |
[WSAPDemo](https://gitee.com/civilwilson/WSAPDemo/tree/master/WSAPDemo) | 框架结构实例:P-Delta、Eigen、RigidEnd |
[BeamLoad](https://gitee.com/civilwilson/WSAPDemo/tree/master/BeamLoad) | 梁荷载测试:LoadType、RigidEnd、Release、MonitorPrt |
[MDOF](https://gitee.com/civilwilson/WSAPDemo/tree/master/MDOF) | 多质点模型:AddDOF、Eigen |
[LagrangeBeam](https://gitee.com/civilwilson/WSAPDemo/tree/master/LagrangeBeam) | 大变形问题测试 |
[SAPRecSlab](https://gitee.com/civilwilson/WSAPDemo/tree/master/SAPRecSlab) | 壳单元测试 |
#### 相关推送
1. [【WSAP】结构力学求解器(一):二阶效应分析[开源]](https://mp.weixin.qq.com/s/djyqpL6CKUb5qWhkXz7yQQ)
#### 关键接口示意
```C#
//模型初始化
//量纲:N、mm、t
var model = new WModelNet();
///
/// WModelNet:添加节点
///
/// 节点编号
/// 节点X坐标
/// 节点Y坐标
/// 节点Z坐标
/// 节点是否约束
/// 节点对象
WNodeNet node = model.AddNode(int tag, double x, double y, double z, bool isFix);
///
/// WModelNet:添加单质点
/// 本命令仅适用于多质点模型
///
/// 质量
/// 刚度
/// 是否添加成功
bool isSuccess = model.AddDOF(double mass, double stiffness);
///
/// WModelNet:添加节点荷载
///
/// 节点编号
/// 荷载自由度方向
/// 荷载(mm、N)
/// 是否添加成功
bool isSuccess = model.AddNodeLoad(int nodeTag, int dof, double load);
///
/// WModelNet:添加节点质量
///
/// 节点编号
/// 平动质量
/// 扭转质量
/// 是否添加成功
bool isSuccess = model.SetNodeMass(int nodeTag, double transfMass, double inertiaMass);
///
/// WModelNet:添加坐标为Z的所有节点
///
/// Z坐标
/// void
model.FixZ(double z);
///
/// WModelNet:添加矩形柱单元,默认考虑P-Delta
/// 截面局部向量默认高度方向指向全局Y向
/// 默认不考虑刚域
///
/// I端节点编号
/// J端节点编号
/// 截面宽度
/// 截面高度
/// 单元对象
WElementNet column = model.AddRectConcreteColumn(int iNodeTag, int jNodeTag, double width, double height);
///
/// WModelNet:添加矩形梁单元,默认不考虑P-Delta
/// 截面局部向量默认高度方向指向全局Z向
/// 默认不考虑刚域
///
/// I端节点编号
/// J端节点编号
/// 截面宽度
/// 截面高度
/// 单元对象
WElementNet beam = model.AddRectConcreteBeam(int iNodeTag, int jNodeTag, double width, double height);
///
/// WElementNet:修改单元是否考虑P-Delta
///
/// 是否考虑P-Delta
/// 是否修改成功
bool isSuccess = column.SetPDelta(bool isPDelta);
///
/// WElementNet:设定单元杆端弯矩释放类型
/// FrameReleaseEnum.NoRelease:不释放弯矩(默认)
/// IRelease:释放i端弯矩
/// JRelease:释放j端弯矩
/// IJRelease:释放ij端弯矩
///
/// 杆端弯矩释放类型
/// 是否修改成功
bool isSuccess = beam.SetReleaseType(FrameReleaseEnum releaseType);
///
/// WElementNet:设定单元刚域长度
///
/// i端刚域长度
/// j端刚域长度
/// 是否修改成功
bool isSuccess = beam.SetRigidEndLength(double iLength, double jLength);
///
/// WModelNet:对框架单元施加均布荷载(-Z方向)
/// 荷载分布形式:----
///
/// 单元编号
/// 均布荷载
/// 是否施加成功
bool isSuccess = model.AddBeamUniformLoad(int elementTag, double gravityUniformLoad);
///
/// WModelNet:对框架单元施加点荷载(-Z方向)
/// 荷载分布形式:*
///
/// 单元编号
/// 点荷载
/// 点荷载施加位置:距I端长度系数
/// 是否施加成功
bool isSuccess = model.AddBeamPointLoad(int elementTag, double gravityLoad, double loadLengthFacotr);
///
/// WModelNet:对框架单元施加三角形荷载(-Z方向)
/// 荷载分布形式:/\
///
/// 单元编号
/// 三角形荷载峰值
/// 三角形荷载峰值位置:距I端长度系数
/// 是否施加成功
bool isSuccess = model.AddBeamTriangularLoad(int elementTag, double gravityMaxLoad, double maxLoadLengthFacotr);
///
/// WModelNet:对框架单元施加梯形荷载(-Z方向)
/// 荷载分布形式:/---\
///
/// 单元编号
/// 梯形荷载峰值
/// 梯形荷载峰值峰值起始位置:距I端长度系数
/// 梯形荷载峰值峰值终点位置:距I端长度系数
/// 是否施加成功
bool isSuccess = model.AddBeamTrapezoidLoad(int elementTag, double gravityMaxLoad, double maxLoadLengthFacotrI, double maxLoadLengthFacotrJ);
///
/// WModelNet:创建有限元模型
///
/// 是否清空荷载
/// 是否创建成功
bool isSuccess = model.CreateFEModel(bool clearLoadCases);
///
/// WModelNet:基于荷载的线性求解器
///
/// 是否求解成功
bool isSuccess = model.DoLinearStaticAnalyze();
///
/// WModelNet:基于荷载的非线性求解器
///
/// 分析步数
/// 是否求解成功
bool isSuccess = model.DoGeneralStaticAnalyze(int stepNumber);
///
/// WModelNet:模态分析
///
/// 模态数量
/// 周期列表
List periodList = model.DoEigen(int modeNumber);
///
/// WElementNet:获得监测截面的截面力
/// 默认有11个监测截面,当施加有集中荷载时自动扩充监测截面
/// forceType:N Vy Vz My Mz T
///
/// 截面力类型
/// 监测截面的截面力列表
List sectionForceList = element.GetSectionForces(FrameLocalForceEnum forceType);
///
/// WElementNet:获得监测截面距I端相对位置
/// 默认有11个监测截面,当施加有集中荷载时自动扩充监测截面
///
/// 监测截面的位置列表
List posList = element.GetSectionPosList();
```