Gmsh與Nastran
Gmsh只能劃分網(wǎng)格,并不能直接作為有限元軟件的前處理器。Gmsh無法直接設(shè)置求解參數(shù),單元屬性,邊界條件,材料類型等。但是可以在Gmsh的基礎(chǔ)做進(jìn)一步開發(fā),完成以上設(shè)置。
Gmsh導(dǎo)出的網(wǎng)格與幾何關(guān)聯(lián),單元的Property編號(hào)可以與“幾何tag”或“Group tag”一致。通過“Physical Group”將幾何編入不同的組,獲取特定幾何上的單元,節(jié)點(diǎn)編號(hào),從而實(shí)現(xiàn)求解設(shè)置。本文通過修改Gmsh導(dǎo)出的“BDF”文件,實(shí)現(xiàn)Nastran靜力學(xué)求解。
1.BDF文件的結(jié)構(gòu)
可供Nastran計(jì)算的BDF文件由5部分組成,前2部分可選,后3部分必須有。其簡(jiǎn)單介紹:
Statement:控制程序的計(jì)算參數(shù),如內(nèi)存設(shè)置,數(shù)值方法等。
File Management:控制文件,執(zhí)行“restart”
Executive Control:設(shè)置求解類型,設(shè)置最長(zhǎng)允許時(shí)間
Case Control:定義子步,載荷步,選取載荷,約束,輸出結(jié)果
Bulk Data:定義具體的單元,節(jié)點(diǎn),載荷,材料信息。
2.Gmsh劃分網(wǎng)格并導(dǎo)出BDF文件
將Gmsh導(dǎo)出為特定的文件,使用“option”控制,支持很多格式,“31”標(biāo)定BDF。
gmsh::model::addPhysicalGroup()
gmsh::option::setNumber("Mesh.SaveAll", 0);
gmsh::option::setNumber("Mesh.SaveElementTagType", 2);軟件默認(rèn)單元導(dǎo)出后的“Property 編號(hào)”采用幾何編號(hào),此處改為使用Physical Group的編號(hào)。
gmsh::model::mesh::getNodesForPhysicalGroup()
gmsh::model::removePhysicalGroups(),通過這個(gè)命令實(shí)現(xiàn)僅導(dǎo)出2維單元。
int main(int argc, char **argv){gmsh::initialize(argc, argv);gmsh::model::add("bdf-Nastran");double lc = 1.0;gmsh::model::occ::addPoint(0, 0, 0,lc, 100);gmsh::model::occ::addPoint(20, 0, 0, lc,101);gmsh::model::occ::addPoint(20, 10, 0,lc, 102);gmsh::model::occ::addPoint(0, 10, 0, lc,103);gmsh::model::occ::addPoint(0, 0, 20, lc, 104);gmsh::model::occ::addPoint(0, 10, 20, lc, 105);gmsh::model::occ::addLine(100, 101, 200);gmsh::model::occ::addLine(101, 102, 201);//此線段固定gmsh::model::occ::addLine(102, 103, 202);gmsh::model::occ::addLine(103, 100, 203);gmsh::model::occ::addLine(103, 105, 204);gmsh::model::occ::addLine(105, 104, 205);//此線段加載荷gmsh::model::occ::addLine(104, 100, 206);gmsh::model::occ::addCurveLoop({200,201,202,203}, 300);gmsh::model::occ::addCurveLoop({ -203,204,205,206 }, 301);gmsh::model::occ::addPlaneSurface({300}, 400);gmsh::model::occ::addPlaneSurface({ 301 }, 401);gmsh::model::occ::synchronize();gmsh::model::addPhysicalGroup(1, { 201 }, 500, "Fixed Nodes");gmsh::model::addPhysicalGroup(1, { 205 }, 501, "Load Nodes");gmsh::model::addPhysicalGroup(2, { 400 }, 502, "Aluminum");gmsh::model::addPhysicalGroup(2, { 401 }, 503, "Steel");gmsh::option::setNumber("Mesh.SaveAll", 0);//僅輸出與Group相連的單元,gmsh::option::setNumber("Mesh.BdfFieldFormat", 1);//0: free, 1: small, 2: largegmsh::option::setNumber("Mesh.Format", 31);//導(dǎo)出為bdfgmsh::option::setNumber("Mesh.SaveElementTagType", 2);//1: elementary, 2: physical, 3: partition。Default value: 1gmsh::option::setNumber("Mesh.Lines", 1);gmsh::option::setNumber("Mesh.Algorithm", 11);gmsh::model::mesh::generate(2);std::vector<size_t> fixNodes,loadNodes;std::vector<double> fixCoors,loadCoors;gmsh::model::mesh::getNodesForPhysicalGroup(1, 500, fixNodes, fixCoors);//獲得fix Nodes 的編號(hào)gmsh::model::mesh::getNodesForPhysicalGroup(1, 501, loadNodes, loadCoors);//獲得load Nodes 的編號(hào)//將節(jié)點(diǎn)編號(hào)輸出到“Nodes.txt”std::fstream file;file.open("Nodes.txt", std::ios::app);file << "Fixed Nodes:\n";for (int i = 0; i < fixNodes.size(); i++) file << fixNodes[i] << " ";file << "\nLoad Nodes:\n";for (int i = 0; i < loadNodes.size(); i++) file << loadNodes[i] << " ";gmsh::model::removePhysicalGroups({ {1,500},{1,501} });//將Curve的Group刪除,僅導(dǎo)出QUAD單元。gmsh::write("bdf-Nastran.bdf");std::set<std::string> args(argv, argv + argc);if (!args.count("-nopopup")) gmsh::fltk::run();gmsh::finalize();return 0;}
Nodes.txt文件中的節(jié)點(diǎn)信息:
Fixed Nodes:2 3 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 Load Nodes:5 6 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204
BDF文件太長(zhǎng),此處僅展示與Group設(shè)置相關(guān)部分,
//兩個(gè)面上單元,被編號(hào)為502,503CQUAD4 1054 502 1192 54 72 1193 CQUAD4 1055 502 1193 72 53 1194 CQUAD4 1056 502 1194 53 3 85 CQUAD4 1057 503 4 118 1195 151 CQUAD4 1058 503 151 1195 1196 162 CQUAD4 1059 503 162 1196 1197 140 CQUAD4 1060 503 140 1197 1198 163
3.添加材料、邊界條件、求解
在Gmsh導(dǎo)出的“bdf-Nastran.bdf”加入材料、Property信息:
$ AluminumMAT1,1,72395.,,0.33$ SteelMAT1,2,193060.,,0.3PSHELL,502,1,1.0,1,,1PSHELL,503,2,1.0,2,,2
加入載荷,邊界:
SPCADD,500,1LOAD,501,1.0,1.0,1$Fixed Nodes:SPC1,1,123456,2 3SPC1,1,123456,53,THRU,72FORCE,1,5,0,10.,1.,0.,0.FORCE,1,6,0,10.,1.,0.,0.FORCE,1,184,0,10.,1.,0.,0.FORCE,1,185,0,10.,1.,0.,0.FORCE,1,186,0,10.,1.,0.,0.FORCE,1,187,0,10.,1.,0.,0.FORCE,1,188,0,10.,1.,0.,0.FORCE,1,189,0,10.,1.,0.,0.FORCE,1,190,0,10.,1.,0.,0.FORCE,1,191,0,10.,1.,0.,0.FORCE,1,192,0,10.,1.,0.,0.FORCE,1,193,0,10.,1.,0.,0.FORCE,1,194,0,10.,1.,0.,0.FORCE,1,195,0,10.,1.,0.,0.FORCE,1,196,0,10.,1.,0.,0.FORCE,1,197,0,10.,1.,0.,0.FORCE,1,198,0,10.,1.,0.,0.FORCE,1,199,0,10.,1.,0.,0.FORCE,1,200,0,10.,1.,0.,0.FORCE,1,201,0,10.,1.,0.,0.FORCE,1,202,0,10.,1.,0.,0.FORCE,1,203,0,10.,1.,0.,0.FORCE,1,204,0,10.,1.,0.,0.
加入求解控制,載荷步選取
SOL 101CENDTITLE =BDF FROM GmshSUBCASE 1SUBTITLE=DefaultSPC = 500LOAD = 501DISPLACEMENT(SORT1,REAL)=ALLSPCFORCES(SORT1,REAL)=ALLSTRAIN(SORT1,REAL,VONMISES,STRCUR,BILIN)=ALLSTRESS(SORT1,REAL,VONMISES,BILIN)=ALL$ Direct Text Input for this SubcaseBEGIN BULK
Nastran求解結(jié)果:
參考:
Gmsh 文檔
Nastran Quick Reference Guide
文章來源:有限元仿真技術(shù)交流平臺(tái)
工程師必備
- 項(xiàng)目客服
- 培訓(xùn)客服
- 平臺(tái)客服
TOP




















