编程语言   发布时间:2022-06-22  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了MATLAB调用NASTRAN的连续计算解决方案大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_450_0@使用MATLAB调用NASTRAN提交bdf文件计算的方法笔者试过几种,分别做一下介绍

@H_55_2@mATLAB直接调用操作系统命令 @H_450_0@该方法对单次计算可能方便些,定义一个字符串,并使用eval命令调用,具体格式为:

% strNas为NASRTAN路径
% strBDF为bdf文件路径
str = ['!', strNAS, ' ', strBDF];
eval(str);
@H_450_0@印象中该方法似乎是非阻塞的,但最近几次实际使用居然是阻塞调用,可能记忆有所偏差,或者版本不同(笔者版本是2019b)?不过可以顺便提下早期的做法,判断NASTRAN计算的大致时间T,通过pause(T),从而实现每个nastran计算时matlab处于暂停运算的状态,避免多个运算同时进行。当然NASTRAN的每次计算耗时并不一定相同,T只能是一个比计算耗时最大值还要大一些的值,这可能造成了大量的时间浪费。

@H_450_0@最早我是遇到了pause的问题,并希望能在需要自动连续计算时减少不必要的等待时间,因此笔者又探索出下一种方法并至今一直在使用。

生成批处理文件调用

@H_450_0@批处理(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,'%sn',strCOM);
fprintf(fidbat,'%sn',strDEL);      % 删除一些不需要的文件
fclose(fidbat);
system(strBAT);
@H_450_0@此处有几个小点要注意一下:

@H_450_0@1.bdf文件与bat文件如果在同一文件夹下只需提供文件名即可,否则还是需要完整路径的。

@H_450_0@2.matlab中调用bat分两种情况,一种是阻塞型,一种是非阻塞型,前者在被调程序运行结束后将控制权返给matlab,而后者是同步运行,在调用格式上的区别是后者是需要加标识符&的。

@H_450_0@这是阻塞型调用:

str = 'test.bat';
system(str);
@H_450_0@这是非阻塞型调用:

str = 'test.bat &';
system(str);
@H_450_0@bat被调后会有相应输出重定向至MATLAB界面,若不希望显示在界面上,则可使用该格式

[s,c] = system(str);
@H_450_0@若需要记录这些内容,则可以进一步地,使用diary命令,将界面内容存盘。

@H_450_0@3.在编辑路径如strNas时,建议使用双引号括上字符串,这样的格式是一定不会出问题的,如下:

strNas = '"C:Program FilesMSC.SoftwareMSC_Nastran2020sp1binnast20200.exe"';
@H_450_0@这当中就扯到一个很有意思的话题了,如果不用双引号可不可以?在笔者这个路径下不行,原因就是笔者的NASTRAN安装在C:Program Files...下,该文件夹居然有空格。但如果一定不想用双引号也是有办法的,恰巧之前在知乎上看到相关的讨论,在DOS下文件夹最长识别8字符,因此需要用PROGRA~1代替表示,这也算是一个非常古早的系统设计了吧。

@H_450_0@需要注意的是,bat的路径在MATLAB当前工作路径下,如果存在子文件夹,则需要cd进所需路径,否则nastran计算生成的一堆内容全塞在当前路径下了。

后话

@H_450_0@其实一直百思不得其解的问题是,在最早笔者用的应当是第1种方法,当时被计算时间的问题整的无力吐槽,恰逢当时遇到了需要连续计算大量bdf文件的问题,因此自己尝试了很多方法,最后用批处理文件至今。但回过头去发现该方法似乎和第一种大同小异,因为批处理也把控制权交由MATLAB来管理,即若在MATLAB运行bat文件时使用Ctrl+C强行中止是能够中止计算与MATLAB程序的,这与第一种已无差别。权做一个没啥用的小发现吧(手动狗头)。不过还是觉得关于PROGRA~1路径的事还是非常有意思的。

大佬总结

以上是大佬教程为你收集整理的MATLAB调用NASTRAN的连续计算解决方案全部内容,希望文章能够帮你解决MATLAB调用NASTRAN的连续计算解决方案所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。