大家早上好,
有时候我想知道是否可以通过Matlab做一些接近我要描述的事情:
使用外部工具(即Ansys,Abaqus或其他软件)我产生了一个列出的“种子”(文件扩展名.inp,.db或其他)文件,该文件将作为后续步骤的参考; < / p>
从这个种子列表文件开始,我想得到200个类似的项目文件,与种子相比包含一些细微的变化:我的意思是,例如,模拟时间或任何其他特征。 / p>
我将举一个简短的例子:我目前正在研究Bladed,用于风能应用的软件航空弹性仿真;例如,刀片让我有机会产生湍流风场。种子代码如下所示:
<?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)生成类似的项目文件,并将这些文件保存在预定的子文件夹中。
最后,我很高兴知道你是否有任何线索/建议给我。 然后,我的任务是找到适当的编码架构。
我事先感谢你们的支持。
祝你好运, 弗朗西斯
答案 0 :(得分:1)
所以这里有一些部分的答案,请阅读有关Matlab文档中使用的函数的更多信息。下面的代码只是一个示例,但您不应该在扩展它时遇到任何问题。此代码将写入包含UBAR
值1..5
的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
调用写入输出文件(使用文件标识fid
);它会编写您的XML标头。请注意嵌入的\n
将在输出文件中转换为新行。
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