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 观察数据时双向是观察不到数据的,但模块内部用于传输双向口数据的寄存器可以看到 ...
随机推荐
- c++语法拾遗,一些细节与特性
写了2年多的C+STL的acmer,在学习<C++ primer>时总结的一些少见的语法特性与细节.总体还是和题目说的一样这是一篇 c++ 拾遗. 1 变量和基本类型 1.1 基本类型 1 ...
- lunix或者centos服务器下如何下载自己在github上面的项目代码
1.在github找到项目压缩包下载地址 打开自己的github主页找到需要下载的项目首页,如图所示,找到zip下载地址(ps:如何找这个地址我就不多说了,了解过一点html的同学肯定很容易可以找到) ...
- html是什么,html5是什么?web开发必备知识之html
如果你要写一篇文章,你可以能会这样写:"我是小明,今年6岁了,现在在上小学一年级.我喜欢吃鲍鱼." 当时如果你像让"鲍鱼"这两个字红色并且字体大一点怎么办?? ...
- 从零开始的 Hexo 生活(一)入门安装篇
目录 前言 一.Hexo 是什么 1.什么是静态网站 2.为什么选择静态网站 3.为什么选择 Hexo 二.Markdown 是什么 1.为什么要学 Markdown 2.怎么学 Markdown 三 ...
- python---双链表的常用操作
class Node(object): """结点""" def __init__(self, data): self.data = dat ...
- JavaWeb入门day10-JSP
JSP 什么是JSP Java Server Pages:Java服务器端页面,也和Servlet一样,用于动态Web技术 最大特点: 写JSP就像在写HTML 区别 HTML只给用户提供静态数据 J ...
- Kotlin 之 let、with、run、apply、also 函数的使用
一.内联拓展函数 let let 扩展函数的实际上是一个作用域函数,当你需要去定义一个变量在一个特定的作用域范围内,let函数的是一个不错的选择:let函数另一个作用就是可以避免写一些判断null的操 ...
- 解构华为云HE2E项目中的容器技术应用
摘要:本文从容器技术应用的角度解构了HE2E项目的代码仓库配置.镜像构建.及docker-compose的部署方式.希望通过本篇文章分享可以使更多的开发者了解容器技术和华为云. 本文分享自华为云社区& ...
- 前端性能优化之js,css调用优化
规则1:减少HTTP请求 把多个JS请求合并为一个JS请求,把多个CSS请求合并为一个CSS请求.从而减少从客户端向服务器端的请求数. 规则3:添加Expires头 用http ...
- python基础练习题(题目 使用lambda来创建匿名函数。)
day34 --------------------------------------------------------------- 实例049:lambda 题目 使用lambda来创建匿名函 ...