tecplot錄製巨集(Macro)用以批量匯入資料
今天要用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)的名字。很方便。