-1

大家早上好,

有时我想知道是否有可能通过 Matlab 做一些接近我将要描述的事情:

  1. 使用外部工具(即 Ansys、Abaqus 或其他软件),我生成了一个列出的“种子”文件(文件扩展名为 .inp、.db 或其他),该文件将用作后续步骤的参考;

  2. 从这个种子列出的文件开始,我想得到,比如说,200 个类似的项目文件,与种子相比包​​含一些细微的变化:我的意思是,例如,模拟时间或任何其他特征。

我将举一个简短的例子:我目前正在研究 Bladed,该软件为风能应用执行气动弹性模拟;例如,Blade 让我有机会产生湍流风场。种子代码如下所示:

<?xml version="1.0" encoding="ISO-8859-1" ?>
<BladedProject version="4.2.0.46">
    <BladedData dataFormat="project">
        <![CDATA[
VERSION 4.2.0.46
MULTIBODY    1
CALCULATION 3
OPTIONS 0
PROJNAME    
DATE    
ENGINEER    
NOTES   ""
PASSWORD    
MSTART WINDND
SPMODEL 7
NLAT    31
NVER    45
LATDIM   150
VERDIM   220
LONGLS   340.2
LATLS    42.1482
VERTLS   42.1467
XLV  113.4
YLV  66.3117
ZLV  33.1546
XLW  27.72
YLW  25.228
ZLW  50.4542
LAMBDA1  0
CohScale     340.2
COHDEC   12
SCALE    0
GAMMA    0
YDIML    0
N2  0
YDIMS    0
K1MIN    3
LENGTH   1830
STEP     .2233905
UBAR     3
SEED    3
OUTFILE l:\02_turb_dev\50-1\loads\50-1_D116_Validation_adapted_to_AV07\wind\DLC1-2_Kaimal\s1\3.wnd
DIAM     0
HUBHT    0
TURBHTTYPE   0
TURBBOTTOM   0
GUSTAVT  0
GUSTSPEED    0
TOLERANCE    0
DLONGMIN     0
DLONGMAX     0
Z0MIN    0
Z0MAX    0
MAXITER  14
MAXSEED  100
NFILES   1
UseWindShear     0
UseShearToGust   0
WVMODEL 0
MATCHFILE   ''
SPACING  0
SAMPLEFREQ   0
MEANSPEED    0
ILAT     0
IVERT    0
GUSTMETHOD   0
DLONG    0
ILAT     0
IVERT    0
LONGGUST     0
LATGUST  0
VERTGUST     0
iLONGGUST    0
iLATGUST     0
iVERTGUST    0
PEAKINESS    0
MAXFRAN  0
MEND

0WINDND
        ]]>
    </BladedData>
</BladedProject>

通过matlab,我希望能够为不同的风速和随机种子(UBAR,SEED)生成类似的项目文件,并将这些文件保存在预定的子文件夹中。

最后,我很高兴知道你们是否有任何线索/建议可以给我。然后,我的任务就是找到一个合适的编码架构。

我提前感谢大家的支持。

最好的问候,弗朗切斯科

4

1 回答 1

1

所以这里有一些答案,阅读更多关于 Matlab 文档中使用的函数的信息。下面的代码只是一个示例,但扩展它应该没有任何问题。此代码将写入 5 个带有UBAR值的文件1..5。我假设,在执行开始时,您当前的工作目录是这 5 个文件驻留的合适位置,至少是暂时的

for ubar = 1:5  %using the name of the variable as the iteration variable here
    fname = ['bladefile' num2str(ubar) '.txt'] % filenames will be bladefile1.txt etc
    fid = fopen(fname,'w') % open the file for writing, keep the file id for later reference
    fprintf(fid, '<?xml version="1.0" encoding="ISO-8859-1" ?>\n<BladedProject version="4.2.0.46">\n    <BladedData dataFormat="project">\n      <![CDATA[\n')

fprintf调用写入输出文件(使用文件 id fid);它会写入您的 XML 标头。请注意嵌入\n的 s 将在输出文件中转换为新行。

    fprintf(fid, 'VERSION 4.2.0.46\n') % note, again, the trailing newline so the next line of output starts on a new line
    ...
    fprintf(fid, 'ubar %i\n', ubar)

此调用fprintf将字符串写入ubar文件,然后%i表示将写入一个整数,并且该整数的值将从变量 中获取ubar

以此类推,直到循环结束

    fclose(fid)
end % and loop around

这应该可以帮助您入门,如果您的目标只是一次编写一组输出文件,那么对于一次性使用来说已经足够了。

如果您希望像在任何编程语言中一样重用代码并将其包装成一个函数。例如,您可以编写一个函数,该函数将一个值ubar和一个值seed作为输入并写入文件,如下所示;

for ubar = 1:5
    for seed = 1:7
        write_inp_file(ubar,seed)
    end
end
于 2012-08-21T10:54:15.393 回答