今天要用Tecplot做后處理。需要導入幾十個甚至上百個數據文件,並且每導入一個數據文件,就要重命名,以便區分。這樣的工作量手動一個一個地操作顯然不太現實,我想能不能讓其自動地完成這些重復地操作。這個問題讓我想到了以前用的幾款軟件都有宏Marco這個命令,即可以把操作過程錄制成宏,然后運行這個宏命令,就可以把剛才錄制的命令完整地重新操作一遍,比如三維設計軟件CATIA,網格畫分軟件Pointwise。更加簡便靈活的地方是可以對宏進行編輯,比如修改某個尺寸,修改某個名字,甚至復制某段命令,讓其重復執行。
Tecplot當然也有這樣的操作。於是我就按照這個思路嘗試錄制宏。
首先新建一個宏開始錄制。菜單欄選擇Scripting>>Record Macro,新建宏。然后會出現一個小對話框,暫時不管它。
接着,導入一個數據文件,並在Data中對此文件(就是Zone)重命名。然后在剛才的小對話框中選擇Stop Recording,結束錄制。用文件編輯器打開保存的宏命令文件,比如UltraEdit,對其進行編輯。
1 #!MC 1410 2 $!ReadDataSet '"D:\data\611\results_grid_1_tecplot.dat" ' 3 ReadDataOption = Append 4 ResetStyle = No 5 VarLoadMode = ByName 6 AssignStrandIDs = Yes 7 VarNameList = '"x" "y" "u" "v" "w" "rho" "p" "Z Vorticity"' 8 $!RenameDataSetZone 9 Zone = 28 10 Name = '611'
以上即是保存的宏命令文件。如果要重復操作的文件數量不多,比如10個,那么就可以直接在UltraEdit中復制粘貼命令,修改對應的文件路徑與文件名即可。這里僅需要修改對應的第二行的文件路徑,第九行的Zone代碼,和第十行的Name。但是如果文件數量非常多,手動復制修改仍然非常繁瑣。對於這種簡單重復的操作,當然可以寫一小段代碼幫助實現了。最近一直在用Fortran寫代碼,於是我就寫了段Fortran實現自動復制與編輯。代碼如下:
1 program main 2 implicit none 3 4 integer j 5 integer, parameter :: n_data = 670 6 character(len=3) :: cTemp 7 8 open(10, file="tecplot_load_data.mcr", status="replace") 9 10 do j = 611, n_data 11 12 write(cTemp, "(i3)") j 13 write(10,*) "#!MC 1410" 14 write(10,*) "$!ReadDataSet " // "'""D:\data\" & 15 &// trim(adjustl(cTemp)) // "\results_grid_1_tecplot.dat"" '" 16 write(10,*) " ReadDataOption = Append" 17 write(10,*) " ResetStyle = No" 18 write(10,*) " VarLoadMode = ByName" 19 write(10,*) " AssignStrandIDs = Yes" 20 write(10,*) " VarNameList = '""x"" ""y"" ""u"" ""v"" ""w"" ""rho"" ""p"" ""Z Vorticity""'" 21 write(10,*) "$!RenameDataSetZone" 22 write(10,"("" Zone = "" i3)") j-583 23 write(10,*) " Name = " // "'" // trim(adjustl(cTemp)) // "'" 24 25 end do 26 27 end
代碼需要注意的地方是引號的問題,單引號,雙引號套用要注意。我會單獨開一篇博文講一下單雙引號的問題。
修改完之后保存,然后在Tecplot里邊運行這個宏Macro文件即可,這個宏命令會自動循環加載數據文件並修改文件(Zone)的名字。很方便。