本篇为基于YJK Control的工程测试。YJK Control是基于线程从外部调用YJK 5.1,模拟手动输入命令行调用YJK进行计算和数据后处理的模块,这种并不是纯正的API,但好歹是YJK的一个尝试,然后本码在向YJK技术支持百般询问下也尝试了下了一二。
”
电脑系统:win11 64位
CPU: AMD 5950X 16核心32线程 内存:32G , GPU: RTX3070 , YJK主要是基于CPU运行,GPU主要是SSG和Abaqus可能用到。 最近新配的电脑性能还不错,但到底如何,心里还没个数。 编译环境:visual studio 2019测试任务:通过自编程序,通过YJK Control打开.yjk模型的功能(380米框筒)并计算完成,所花的时间显示在窗口栏。
”
1 编程环境配置
配置起来倒不是太难,但YJK 的手册实在不敢恭维,还好技术支持服务态度还不错。
【step 1】通过git获取YJK官方YJK Control代码。没有git的话,自己到百度git下载一个。
git clone https://gitee.com/yjk-opensource/csharp-yjks.git
【step 2】将C:\ProgramData\yjkSoft\YJKS5.1\YJKS\Config.ini添加如下语句
[YJKSControl]
Flag = True
添加完后,然后为如下:
【step 3】利用step1下载下来的文件替换,YJK5.1安装路径下文件。
到此,环境配置完毕。
2 案例学习
先学习下YJK技术支持给的案例1(上面step1中下载下来的代码),代码如下:
using System;
using System.Runtime.InteropServices;
/*该例演示通过脚本控制YJK,在如下代码中修改yjk的路径及模型文件及ydb的路径后即可运行,
运行的说明及命令的说明可参考相关文件*/
namespace test01
{
class Program
{
static ConsoleEventDelegate handler;
private delegate bool ConsoleEventDelegate(int eventType);
[DllImport("kernel32.dll", SetLastError = true)]
private static extern bool SetConsoleCtrlHandler(ConsoleEventDelegate callback, bool add);
static bool ConsoleEventCallback(int eventType)
{
if (eventType == 2)
YJKSControl.exit();
return false;
}
static void Main(string[] args)
{
/*对单独命令进行调用可取消下面四句,但需要手动修改
C:\ProgramData\yjkSoft\YJKS5.1\YJKS\Config.ini中YJKSControl下的Flag为True,
启动YJK后即可运行脚本,不需要YJKSControl后再将Flag改成False*/
//handler = new ConsoleEventDelegate(ConsoleEventCallback);//这个地方我注释掉了,因为我的Flag已经改为了True
//SetConsoleCtrlHandler(handler, true);//此处主要是改Flag
string str = YJKSControl.init(@"C:\YJKS\YJKS_5_1\yjks.exe", "5.1");//YJK安装路径
Console.WriteLine(str);//差不多是启动YJK程序的意思
YJKSControl.RunCmd("yjk_opennew", @"D:\T1\1.yjk");//新建一个模型
YJKSControl.RunCmd("yjk_importydb", @"D:\T1\pymodel.ydb");//导入模型ydb
YJKSControl.RunCmd("yjk_repairex", "");//工程修复
YJKSControl.RunCmd("yjk_save", "");//模型保存
YJKSControl.RunCmd("yjk_formnode", "");
YJKSControl.RunCmd("yjk_setlayersupport", "");
YJKSControl.RunCmd("yjkspre_genmodrel", "");//生成分析模型
YJKSControl.RunCmd("yjktransload_tlplan", "");//平面荷载导荷
YJKSControl.RunCmd("yjktransload_tlvert", "");//竖向荷载导荷
YJKSControl.RunCmd("SetCurrentLabel", "IDSPRE_ROOT");//切换到计算参数界面
YJKSControl.RunCmd("yjkdesign_dsncalculating_all", "");//计算
YJKSControl.RunCmd("SetCurrentLabel", "IDDSN_DSP");//切换到设计结果界面
Console.WriteLine("运行完成!");//计算完成。
Console.ReadLine();
}
}
}
以上是模拟手动打开yjk,然后输入命令调用YJK的各个模块完成工作。
3 工程测试
【step 1】先创建一个窗体,选择Windows窗体应用,然后点击下一步。
用winform画一个界面,如下:
【step 2】实现选择路径和运行YJK程序。
按下面代码实现功能,另外需要添加YJKControl.dll的引用。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace testYJKControl
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
if (textBox1.Text != null)
{
DateTime begintime = DateTime.Now;//获取开始时间
string str = YJKSControl.init(@"C:\YJKS\YJKS_5_1\yjks.exe", "5.1");
YJKSControl.RunCmd("yjk_opennew", textBox1.Text);
YJKSControl.RunCmd("yjk_repairex", "");
YJKSControl.RunCmd("yjk_save", "");
YJKSControl.RunCmd("yjk_formnode", "");
YJKSControl.RunCmd("yjk_setlayersupport", "");
YJKSControl.RunCmd("yjkspre_genmodrel", "");
YJKSControl.RunCmd("yjktransload_tlplan", "");
YJKSControl.RunCmd("yjktransload_tlvert", "");
YJKSControl.RunCmd("SetCurrentLabel", "IDSPRE_ROOT");
YJKSControl.RunCmd("yjkdesign_dsncalculating_all", "");
YJKSControl.RunCmd("SetCurrentLabel", "IDDSN_DSP");
DateTime endtime = DateTime.Now;//获取开始时间
TimeSpan otime = endtime.Subtract(begintime);
MessageBox.Show("运行耗时:" + otime.TotalMinutes + "分钟");
}
else
{
MessageBox.Show("请选择YJK模型路径!");
}
}
private void button2_Click(object sender, EventArgs e)
{
OpenFileDialog dialog = new OpenFileDialog();
dialog.Title= "请选择YJK模型路径";
dialog.Filter = "yjk模型数据(*.yjk)|*.yjk";
if(dialog.ShowDialog()==DialogResult.OK)
{
textBox1.Text = dialog.FileName.ToString();
}
}
private void button3_Click(object sender, EventArgs e)
{
Close();
}
}
}
4 运行效果
用管理员方式运行该程序,单元数和自由度信息和testYJKcontrol运行视频如下所示:
0:00:03.41 [INFO] ====== 开始处理模型 [ 基本模型 ] =====
0:00:03.41 [INFO]
0:00:03.41 [STAG] 数据预处理
0:00:03.41 [INFO] 开始准备计算数据.
0:00:03.41 [STAG] 形成自由度以及节点质量.
0:00:03.91 [INFO] 工况: 15 振型:0
0:00:03.95 [INFO] 节点数: 97062
0:00:03.95 [INFO] 单元数: 49389
0:00:03.95 [INFO] 自由度: 444384(主) + 89623(从) + 0(强制位移)
PS:80层,380米框筒,新电脑,YJK5.1计算大概25分钟。或许借助YJKControl操作YJK没有CSI OAPI那样方便,但是却可以从外部调用YJK,然后通过命令行传送命令给YJK线程程序,而不需要手动点击鼠标,省去一些操作,也算一种“曲道救国”的思维吧。代码已经上传到gittee上了,大家gitee一起来哈。
git clone https://gitee.com/ming91915/test-yjkcontrol.git
-
往期文章 -
#参数化建模# -
#[详解Grasshopper中的C#脚本电池详解附源码] -
#[如何开发Grasshopper插件附源码] -
#Rhino.Python脚本建模学习笔记【1】 -
#结构编程# -
#ETABS墙肢编号插件开发(附源码) -
#OpenSEES自动前后处理程序AutoOS -
#超限报告自动生成平台2022版本之小震模块演示 -
#一起玩玩结构设计软件API -
#ETABS墙肢编号插件及演示 -
#Abaqus模拟剪力墙滞回曲线【python源码】 -
#有关选波的若干技术吐槽 -
#自动选波程序AutoWave更新 -
#[PKPM5.转ETABS201X接口程序Free] -
#YJK模型转ETABS201X自编接口介绍 -
#结构软件关于梁柱刚域的考虑 -
#AutoWave自动选波及人工波生成工具操作演示 -
#结构分析设计有哪些工作可以让Python干? -
#一名结构工程师学习Python的心路历程 -
#Python从YJK数据库读取荷载工况信息 -
#AutoWave选波及操作实例 -
#建筑大师# -
[#建筑大师](1)貝聿銘的光影傳奇 -
#[建筑大师](2)勒·柯布西耶的现代主义 -
#[建筑大师](3)奥斯卡梅尼耶的建筑曲线与女人 -
#[建筑大师扎哈·哈迪德用曲线演绎传奇](http://mp.weixin.qq.com/s?__biz=MzAwNDUyOTcxMw==&mid=2649342160&idx=1&sn=505ba8f4619e55253761fec0a6328881&chksm=8337eb8eb44062989d88c6829a95601dcdd08df2575db80f0c2ad50510ce0caec1b846d4c27b&scene=21#wechat_redirect) -
#结构大师# -
#[高层建筑设计-以结构为建筑上] bySOM大神马克*夏凯星 -
#[高层建筑设计-以结构为建筑中] bySOM大神马克*夏凯星 -
#[高层建筑设计-以结构为建筑下] bySOM大神马克*夏凯星 -
#抗震性能设计大神Graham.H.Powell讲座第1节-上 -
#抗震性能设计大神Graham.H.Powell讲座第1节-下 -
#超高层建筑抗震性能设计by伯克利教授Jack Moehle -
#结构设计# -
#[《深圳高规》非官方讨论一] -
#[《深圳高规》非官方讨论二] -
#[《深圳高规》非官方讨论三] -
#《深圳高规》构件的抗剪性能探讨 -
#剪力墙底部加强区的误解 -
#《ACI318-19》美规特殊结构墙的设计和构造 -
#非线性**#** -
#关于弹塑性分析的一些思考 -
#PERFORM-3D中梁自重荷载的细节 -
#关于近期震害的几点感悟