MATLAB调用NASTRAN的连续计算解决方案
使用MATLAB调用NASTRAN提交bdf文件计算的方法笔者试过几种,分别做一下介绍
MATLAB直接调用操作系统命令
该方法对单次计算可能方便些,定义一个字符串,并使用eval命令调用,具体格式为:
% strNas为NASRTAN路径
% strBDF为bdf文件路径
str = ['!', strNAS, ' ', strBDF];
eval(str);
印象中该方法似乎是非阻塞的,但最近几次实际使用居然是阻塞调用,可能记忆有所偏差,或者版本不同(笔者版本是2019b)?不过可以顺便提下早期的做法,判断NASTRAN计算的大致时间T,通过pause(T),从而实现每个nastran计算时matlab处于暂停运算的状态,避免多个运算同时进行。当然NASTRAN的每次计算耗时并不一定相同,T只能是一个比计算耗时最大值还要大一些的值,这可能造成了大量的时间浪费。
最早我是遇到了pause的问题,并希望能在需要自动连续计算时减少不必要的等待时间,因此笔者又探索出下一种方法并至今一直在使用。
生成批处理文件调用
批处理(bat)文件功能强大,而且现在看来也很方便。不过似乎在Linux平台上有点问题?但一般在Windows系统中还是比较通用的。此外可以按需附加对一些格式文件的删除功能,代码如下:
% strNas为NASRTAN路径
% strBDF为bdf文件路径
% strBAT为bat文件路径
strDEL = ['del /a /f /q *.MASTER' newline...
'del /a /f /q *.DBALL' newline...
'del /a /f /q *.f04' newline...
'del /a /f /q *.IFPDAT' newline...
'del /a /f /q *.xdb'];
fidbat = fopen(strBAT,'w');
strCOM = [strNas ' ' strBDF];
fprintf(fidbat,'%s\n',strCOM);
fprintf(fidbat,'%s\n',strDEL); % 删除一些不需要的文件
fclose(fidbat);
system(strBAT);
此处有几个小点要注意一下:
1.bdf文件与bat文件如果在同一文件夹下只需提供文件名即可,否则还是需要完整路径的。
2.matlab中调用bat分两种情况,一种是阻塞型,一种是非阻塞型,前者在被调程序运行结束后将控制权返给matlab,而后者是同步运行,在调用格式上的区别是后者是需要加标识符&的。
这是阻塞型调用:
str = 'test.bat';
system(str);
这是非阻塞型调用:
str = 'test.bat &';
system(str);
bat被调后会有相应输出重定向至MATLAB界面,若不希望显示在界面上,则可使用该格式
[s,c] = system(str);
若需要记录这些内容,则可以进一步地,使用diary命令,将界面内容存盘。
3.在编辑路径如strNas时,建议使用双引号括上字符串,这样的格式是一定不会出问题的,如下:
strNas = '"C:\Program Files\MSC.Software\MSC_Nastran\2020sp1\bin\nast20200.exe"';
这当中就扯到一个很有意思的话题了,如果不用双引号可不可以?在笔者这个路径下不行,原因就是笔者的NASTRAN安装在C:\Program Files...下,该文件夹居然有空格。但如果一定不想用双引号也是有办法的,恰巧之前在知乎上看到相关的讨论,在DOS下文件夹最长识别8字符,因此需要用PROGRA~1代替表示,这也算是一个非常古早的系统设计了吧。
需要注意的是,bat的路径在MATLAB当前工作路径下,如果存在子文件夹,则需要cd进所需路径,否则nastran计算生成的一堆内容全塞在当前路径下了。
后话
其实一直百思不得其解的问题是,在最早笔者用的应当是第1种方法,当时被计算时间的问题整的无力吐槽,恰逢当时遇到了需要连续计算大量bdf文件的问题,因此自己尝试了很多方法,最后用批处理文件至今。但回过头去发现该方法似乎和第一种大同小异,因为批处理也把控制权交由MATLAB来管理,即若在MATLAB运行bat文件时使用Ctrl+C强行中止是能够中止计算与MATLAB程序的,这与第一种已无差别。权做一个没啥用的小发现吧(手动狗头)。不过还是觉得关于PROGRA~1路径的事还是非常有意思的。
MATLAB调用NASTRAN的连续计算解决方案的更多相关文章
- 【kate总结】matlab调用opencv总结
正常情况下,编写好matlab调用opencv的代码. 1.输入 MEX XX.CPP(所有的mex都要编译) 2.将生成的.mexw64 放到要调用的文件夹下即可 出错总结: 本人写的matla ...
- MATLAB调用C程序、调试和LDPC译码
MATLAB是一个很好用的工具.利用MATLAB脚本进行科学计算也特别方便快捷.但是代码存在较多循环时,MATLAB运行速度极慢.如果不想放弃MATLAB中大量方便使用的库,又希望代码能迅速快捷的运行 ...
- 向量和矩阵的范数及MATLAB调用函数
范数就是长度的一种推广形式,数学语言叫一种度量.比如有一个平面向量,有两个分量来描述:横坐标和纵坐标.向量的二范数就是欧几里得意义下的这个向量的长度.还有一些诸如极大值范数,就是横坐标或者纵坐标的最大 ...
- Libsvm的MATLAB调用和交叉验证
今天听了一个师兄的讲课,才发现我一直在科研上特别差劲,主要表现在以下几个方面,(现在提出也为了督促自己在以后的学习工作道路上能够避免这些问题) 1.做事情总是有头无尾,致使知识点不能一次搞透,每次在用 ...
- 关于双11过后MATLAB许可过期问题的解决方案
在距离双11还有2个月之前,matlab会提示:Your MATLAB license will expire in 50 days --------------------------------- ...
- Matlab调用Java类
第一步:定位Matlab中Java环境的ext目录 新建一个M script文件,或者直接在Matlab的交互式命令行中输入: >> disp(java.lang.System.getPr ...
- Matlab调用C程序
Matlab调用C程序 复制来自https://blog.csdn.net/u010839382/article/details/42463237 Matlab是矩阵语言,如果运算可以用矩阵实现, ...
- Cocos2d-x 3.x 在wp8中调用系统字体的解决方案
问题和解决方法: 在使用cocos2d-x设计游戏的时候,字体是个很重要的部分.如果游戏中对字体没有太多的要求,就可以使用平台系统自带的字体,可以节省游戏的尺寸,以及减小游戏运行时所占用的内存.当加载 ...
- siganl tappII的应用及MATLAB调用
1.在应用SIGNAL TAPPII时一定要把不用的端口设置为输入三态,否则观察不到数据. 2.用SIGNAL TAPII 观察数据时双向是观察不到数据的,但模块内部用于传输双向口数据的寄存器可以看到 ...
随机推荐
- python-转换函数使用
输入一个整数和进制,转换成十进制输出 输入格式: 在一行输入整数和进制 输出格式: 在一行十进制输出结果 输入样例: 在这里给出一组输入.例如: 45,8 输出样例: 在这里给出相应的输出.例如: 3 ...
- Java中if else条件判断语句的执行顺序
学习目标: 掌握 if else 条件判断的使用 学习内容: 1.if语法 if(boolean表达式) { 语句体; } if后面的{}表示一个整体-代码块,称之为语句体,当boolean表达式为t ...
- mongodb安装错误以及原理
安装mongodb,默认是安装到"C:\Program Files\MongoDB\"这里的,我在注册表里没有找到mongodb的信息,所以猜测它只是将其解压到那个位置而已,它只是 ...
- Python入门-运算符
运算通常可以根据最终获得的值不同,可以分两类,即结果为具体的值,结果为bool值,那么哪些结果为具体的值-->算数运算.赋值运算,哪些结果又为bool值?--->比较运算.逻辑运算和成员运 ...
- spring配置数据源(交给spring容器完成)
##将DataSource的创建权交给spring容器去完成 1.导入spring依赖 <dependency> <groupId>org.springframework< ...
- LAN交换机自学习算法
LAN交换机自学习算法 提示 第二层交完全忽略帧的数据部分协议,仅根据第二层以太网的MAC地址做出转发决策. MAC地址表有时又被称作内容可编址内存(CAM)表 检查源MAC地址 如果源MAC地址不存 ...
- docker基础_数据卷
docker数据卷 为什么要使用数据卷 如果数据都在容器中,那么容器一旦删除,数据就会丢失!docker容器需要将产生的数据同步到本地.容器与容器之间也需要有一个数据共享的技术 将某些文件共享.这就是 ...
- Android四大组件——Activity——Activity数据回传
既然可以传递数据给下一个Activity,自然也可以返回数据给上一个Activity.返回上一个Activity时只需要点击back键就好,并没有一个用于启动Activity的Intent来传递数据, ...
- 【GPLT】 集合相似度(c++)
题目如下: 这题主要用来练习stl的使用,是一道比较简单的题目 AC代码如下 #include<iostream> #include<cmath> #include<ma ...
- IOC简介 -Bean的作用域 创建对象
创建对象 创建对象时默认使用无参构造器,无论对象在容器中后续是否被使用, 都会先实例化对象 . (婚介网站,里面人都是先存在的,到时直接牵手就行) 也可以使用以下方法,使用有参构造器来创建对象 根据参 ...