从单个“种子”文件开始生成多个输出文件

时间:2012-08-21 09:48:44

标签: matlab object-oriented-analysis

大家早上好,

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

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

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

  3. 我将举一个简短的例子:我目前正在研究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)生成类似的项目文件,并将这些文件保存在预定的子文件夹中。

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

    我事先感谢你们的支持。

    祝你好运, 弗朗西斯

1 个答案:

答案 0 :(得分:1)

所以这里有一些部分的答案,请阅读有关Matlab文档中使用的函数的更多信息。下面的代码只是一个示例,但您不应该在扩展它时遇到任何问题。此代码将写入包含UBAR1..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