परिचय
पिछली
पोस्ट में, हमने मॉडलिंग वायुगतिकीय प्रक्रियाओं के लिए एक कार्यक्रम में तीसरे पक्ष के ओपन सोर्स लाइब्रेरीज़ फ्रीफेम ++ और नेटजेन का उपयोग करने की सुविधाओं की जांच की। यह इन पुस्तकालयों को लाइसेंस के परिप्रेक्ष्य से एक व्यावसायिक परियोजना में शामिल करने की संभावना के बारे में था, जो कि प्रदर्शन कार्यों की विशेषताओं और सॉफ्टवेयर वास्तुकला में शामिल करने के बारे में था। यह आलेख पिछले एक का पूरक है, इसमें हम NetGen लाइब्रेरी की अधिक विस्तार से जाँच करेंगे। ब्याज मॉडल के सतह पर दिए गए क्षेत्रों के साथ परिमित तत्वों की एक 3 डी मेष बनाने के कार्य हैं।
MS Visual Studio में NetGen कनेक्शन
हम दिखाते हैं कि आप NetGen को C ++ प्रोग्राम से कैसे जोड़ सकते हैं।
नेटजेन परियोजना की आधिकारिक
साइट से संग्रह
डाउनलोड करें । हमारे मामले में, नेटजन संस्करण 4.9.13 उपलब्ध था। पुस्तकालय को जोड़ने के लिए, आपको संग्रह से तीन फ़ोल्डर चाहिए: libsrc, nglib, windows। विज़ुअल स्टूडियो में, डेमो प्रोग्राम के लिए एक प्रोजेक्ट और एक समाधान बनाएँ और विंडोज़ फ़ोल्डर से मौजूदा प्रोजेक्ट फ़ाइल nglib.vcxproj संलग्न करें। चूंकि हमारे प्रयोग में दृश्य स्टूडियो के पुराने संस्करण में nglib प्रोजेक्ट बनाया गया था, इसलिए हम प्रोजेक्ट को एक नए संस्करण में बदल देते हैं। Nglib प्रोजेक्ट सेटिंग में, libsrc \ n शामिल करें फ़ोल्डर में, NO_PARALLEL_THREADS प्रतीक जोड़ें, अतिरिक्त लिंकर निर्भरता से pthreadVC2.lib को हटा दें, लिंकर पोस्ट-ईवेंट को हटा दें, और लक्ष्य फ़ोल्डर को कॉन्फ़िगर करें ताकि प्रोजेक्ट बिना त्रुटियों के बन जाए।
Nglib.h हेडर फ़ाइल के शामिल किए जाने को निम्नलिखित में नहीं जाना जाना चाहिए:
नामस्थान nglib
{
# अलग "nglib.h"
}
नामस्थान nglib का उपयोग करना;
टेस्ट मॉडल
वह स्थान जो परिमित तत्वों से भरा होना चाहिए, दो तरीकों से NetGen के लिए निर्दिष्ट किया जा सकता है:
- रचनात्मक ब्लॉक ज्यामिति (सीएसजी) ऑपरेटरों के रूप में।
- एसटीएल फ़ाइल में अंतरिक्ष सीमा के विवरण के रूप में।
यहां हम सतह विवरण के केवल दूसरे संस्करण पर विचार करते हैं - एसटीएल पाठ प्रारूप में तीन आयामी मॉडल का वर्णन। अंजीर में परीक्षण मॉडल की एक ग्राफिक छवि दिखाई जाती है। 1. मॉडल आकार 10 X 10 X 5 का एक समानांतर आकार है। एक चेहरे पर एक ऑफसेट (4; 2) के साथ आकार 5 X 2 का एक आयताकार क्षेत्र है, जिसकी सीमाओं को अपरिवर्तित रहना चाहिए;
अंजीर। 1. एसटीएल फाइल बनाने के लिए सरफेस ट्राइंगुलेशन। जिस क्षेत्र की सीमाओं को अपरिवर्तित रहना चाहिए, वह लाल रंग में हाइलाइट किया गया हैपरीक्षण मॉडल का वर्णन करने वाली एसटीएल फ़ाइल की सामग्री निम्नलिखित है:
ठोस
सामान्य सामान्य 1 0 0 बाहरी लूप वर्टेक्स 10 4 2 वर्टेक्स 10 6.5 3 वर्टेक्स 10 4 4 एंडलूप एंडफैसेट
सामान्य सामान्य 1 0 0 बाहरी लूप वर्टेक्स 10 6.5 3 वर्टेक्स 10 9 4 वर्टेक्स 10 4 4 एंडलूप एंडफैसेट
सामान्य सामान्य 1 0 0 बाहरी लूप वर्टेक्स 10 9 2 वर्टेक्स 10 6.5 3 वर्टेक्स 10 4 2 एंडलूप एंडफैसेट
सामान्य सामान्य 1 0 0 बाहरी लूप वर्टेक्स 10 9 2 वर्टेक्स 10 9 4 वर्टेक्स 10 6.5 3 एंडलूप एंडफैसेट
सामान्य सामान्य 1 0 0 बाहरी लूप वर्टेक्स 10 0 5 वर्टेक्स 10 0 0 वर्टेक्स 10 4 2 एंडलूप एंडफैसेट
सामान्य सामान्य 1 0 0 बाहरी लूप वर्टेक्स 10 4 2 वर्टेक्स 10 4 4 वर्टेक्स 10 0 5 एंडलूप एंडफैसेट
सामान्य सामान्य 1 0 0 बाहरी लूप वर्टेक्स 10 10 5 5 शीर्ष 10 10 5 5 शीर्ष 10 4 4 एंडलूप एंडफैसेट
सामान्य सामान्य 1 0 0 बाहरी लूप वर्टेक्स 10 9 4 वर्टेक्स 10 10 5 वर्टेक्स 10 4 4 एंडलूप एंडफैसेट
सामान्य सामान्य 1 0 0 बाहरी लूप वर्टेक्स 10 9 2 वर्टेक्स 10 10 5 वर्टेक्स 10 9 4 एंडलूप एंडफैसेट
सामान्य सामान्य 1 0 0 बाहरी लूप वर्टेक्स 10 10 0 वर्टेक्स 10 10 5 वर्टेक्स 10 9 2 एंडलूप एंडफैसेट
सामान्य सामान्य 1 0 0 बाहरी लूप वर्टेक्स 10 10 0 वर्टेक्स 10 9 2 वर्टेक्स 10 4 2 एंडलूप एंडफैसेट
सामान्य सामान्य 1 0 0 बाहरी लूप वर्टेक्स 10 10 0 वर्टेक्स 10 4 2 वर्टेक्स 10 0 0 एंडलूप एंडफैसेट
सामान्य सामान्य -1 0 0 बाहरी लूप वर्टेक्स 0 10 5 वर्टेक्स 0 10 0 वर्टेक्स 0 0 5 एंडलूप एंडफैसेट
सामान्य सामान्य -1 0 0 बाहरी लूप वर्टेक्स 0 0 0 वर्टेक्स 0 0 5 वर्टेक्स 0 10 0 एंडलूप एंडफैसेट
सामान्य सामान्य 0 -1 -1 बाहरी लूप शीर्ष 0 0 5 5 शीर्ष 0 0 0 शीर्ष 10 10 5 एंडलूप एंडफेट
सामान्य सामान्य 0 -1 -1 0 बाहरी लूप वर्टेक्स 10 0 0 वर्टेक्स 10 0 5 वर्टेक्स 0 0 0 एंडलूप एंडफैसेट
सामान्य 0 0 1 0 बाहरी लूप वर्टेक्स 10 10 5 5 शीर्ष 10 10 0 वर्टेक्स 0 10 5 एंडलूप एंडफैसेट
सामान्य सामान्य 0 1 0 0 बाहरी लूप वर्टेक्स 0 10 0 वर्टेक्स 0 10 5 वर्टेक्स 10 10 0 एंडलूप एंडफैसेट
सामान्य सामान्य 0 0 1 1 बाहरी लूप शीर्ष 0 0 5 5 शीर्ष 10 0 5 शीर्ष 0 0 5 5 एंडलूप एंडफैसेट
सामान्य सामान्य 0 0 1 1 बाहरी लूप वर्टेक्स 10 10 5 वर्टेक्स 0 10 5 वर्टेक्स 10 0 5 एंडलूप एंडफैसेट
सामान्य सामान्य 0 0 -1 -1 बाहरी लूप वर्टेक्स 10 0 0 वर्टेक्स 0 0 0 वर्टेक्स 10 10 0 एंडलूप एंडफैसेट
सामान्य 0 0 -1 -1 बाहरी लूप वर्टेक्स 0 10 0 वर्टेक्स 10 10 0 वर्टेक्स 0 0 0 एंडलूप एंडफैसेट
endsolid
STL फ़ाइल में दी गई जानकारी में निम्न प्रारूप है। फ़ाइल की शुरुआत और अंत में, कीवर्ड ठोस और एंडोसोलिड इंगित किए जाते हैं, जिसके बीच त्रिकोण सूचीबद्ध होते हैं जो प्रारूप में आवश्यक सतह निर्दिष्ट करते हैं:
पहलू सामान्य nx ny nz
बाहरी लूप
वर्टेक्स v1x v1y v1z
वर्टेक्स v2x v2y v2z
वर्टेक्स v3x v3y v3z
endloop
endfacet
जहां nx, ny, nz एक्सिस, वाई, जेड के साथ सामान्य वेक्टर के घटक हैं, जो सिम्युलेटेड ऑब्जेक्ट से बाहर की ओर निर्देशित होते हैं; (v1x, v1y, v1z), (v2x, v2y, v2z), (v3x, v3y, v3z) - त्रिभुज के तीन कोने के निर्देशांक।
एक परिमित तत्व जाल निर्माण कार्यक्रम का उदाहरण
नीचे एक प्रोग्राम का पाठ है जो एक परिमित तत्व जाल प्राप्त करने के लिए आवश्यक सभी चरणों को करता है। यह प्रोग्राम OneLegionBar.stl STL फ़ाइल को पढ़ता है और OneRegionBar.vol फ़ाइल को एक परिमित तत्व ग्रिड लिखता है।
#include "stdafx.h"
# किंकर्तव्यविमूढ़ <iostream>
# अलग करें <
नामस्थान nglib
{
# जीतना ".. \ NetGen \ nglib \ nglib.h"
}
नाम स्थान std का उपयोग करना;
नामस्थान nglib का उपयोग करना;
शून्य मुख्य ()
{
const char * stlFileName = ".. \\ Data \\ OneRegionBar.stl";
const char * volFileName = ".. \\ Data \\ OneRegionBar.vol";
// सतह पर पसलियां
const int EDGES_NUM = 4;
const int POINTS_NUM = 4;
टाइपडिफ डबल प्वाइंट [3];
बिंदु अंक [POINTS_NUM] = {{10, 4, 2}, {10, 9, 2}, {10, 9, 4}, {10, 4, 4}};
typedef जोड़ी <int, int> एज;
धार किनारों [EDGES_NUM] = {एज (0,1), एज (1, 2), एज (2,3), एज (3, 0)};
// मेष पीढ़ी के पैरामीटर
Ng_Meshing_Parameters ngMeshParameters;
ngMeshParameters.maxh = 10;
ngMeshParameters.fineness = 0.4;
ngMeshParameters.secondorder = 0;
ngMeshParameters.quad_dominated = 0;
ngMeshParameters.mission = 0.0;
ngMeshParameters.optsurfmeshenable = false;
ngMeshParameters.optsteps_2d = 0;
ngMeshParameters.closeedgeenable = false;
// संचालन का परिणाम
Ng_Result ng_res;
//
// प्रारंभ करना
//
// STL फ़ाइल पढ़ें, "STL ज्यामिति" ऑब्जेक्ट बनाएं
Ng_STL_Geometry * stlGeometry = Ng_STL_LoadGeometry (stlFileNeometry);
// "ज्यामिति" में अपरिवर्तनीय किनारों को जोड़ना
for (int i = 0; मैं <EDGES_NUM; i ++)
{
डबल * p1 = अंक [किनारों [i]। प्यास];
डबल * पी 2 = अंक [किनारों [i]। सेकेंड];
Ng_STL_AddEdge (stlGeometry, p1, P2);
}
// STL विवरण के साथ एक ऑब्जेक्ट को इनिशियलाइज़ करें
ng_res = Ng_STL_InitSTLGeometry (stlGeometry);
अगर (ng_res! = NG_OK)
{
cout << "Ng_STL_InitSTLGeometry में त्रुटि" << endl;
}
// वर्तमान में खाली आइटम ग्रिड
Ng_Mesh * mesh = Ng_NewMesh ();
// मॉडल सतह पर किनारों को
ng_res = Ng_STL_MakeEdges (stlGeometry, mesh, & ngMeshParameters);
अगर (ng_res! = NG_OK)
{
cout << "Ng_STL_MakeEdges में त्रुटि" << endl;
}
// एक अंतरिक्ष सतह उत्पन्न करें
ng_res = Ng_STL_GenerateSurfaceMesh (stlGeometry, mesh, & ngMeshParameters);
अगर (ng_res! = NG_OK)
{
cout << "Ng_STL_GenerateSurfaceMesh में त्रुटि" << endl;
}
// एक परिमित तत्व नेटवर्क उत्पन्न करें
ng_res = Ng_GenerateVolumeMesh (जाल, और ngMeshParameters);
अगर (ng_res! = NG_OK)
{
cout << "Ng_GenerateVolumeMesh में त्रुटि" << endl;
}
// एक फ़ाइल में परिमित तत्वों की जाली को बचाएं
Ng_SaveMesh (मेष, volFileName);
}
अगला, हम कार्यक्रम पाठ पर विस्तृत टिप्पणी देते हैं:
- बिंदुओं के निर्देशांक जो किनारों के किनारे हैं, वे अंक [POINTS_NUM] सरणी में हैं। किनारों [EDGES_NUM] सरणी बिंदु संख्याओं के संगत जोड़े के रूप में सतह क्षेत्र के किनारों को परिभाषित करता है। इन किनारों को नेटजेन द्वारा निर्दिष्ट करने की आवश्यकता होगी ताकि वे मॉडल की सतह पर संरक्षित रहें।
- ग्रिड बनाने की प्रक्रिया को Ng_Meshing_Parameters वर्ग के ngMeshParameters ऑब्जेक्ट में एकत्रित मापदंडों द्वारा नियंत्रित किया जाता है। मापदंडों में से एक - अधिकतम ग्रिड तत्वों के अधिकतम आकार को सीमित करता है। अन्य मापदंडों का उपयोग करते हुए, आप पीढ़ी प्रक्रिया को ठीक कर सकते हैं: तत्वों के न्यूनतम आकार को सीमित करें, ग्रिड अनुकूलन की शुरुआत करें, आदि।
- STL फ़ाइल को Ng_STL_LoadGeometry () फ़ंक्शन द्वारा पढ़ा जाता है, और STL ज्यामिति ऑब्जेक्ट को लौटा दिया जाता है:
Ng_STL_Geometry * stlGeometry = Ng_STL_LoadGeometry (stlFileNeometry);
जहाँ Ng_STL_Geometry को STL ज्यामिति वाली किसी वस्तु के सूचक के रूप में समझा जाना चाहिए। वास्तव में, Ng_STL_Geometry, कुछ अन्य प्रकारों की तरह, शून्य का पर्याय है *। इस तरह से नेटजेन लेखकों ने जटिल वस्तुओं की कार्यान्वयन सुविधाओं को पूरी तरह से छिपा दिया।
- अगला, एसटीएल ज्यामिति ऑब्जेक्ट में किनारों को जोड़ें। उन्हें Ng_STL_AddEdge () फ़ंक्शन का उपयोग करके एक लूप में जोड़ा गया है:
Ng_STL_AddEdge (stlGeometry, p1, P2);
जहां stlGeometry STL ज्यामिति का एक ऑब्जेक्ट है; p1 और P2 किनारे के कोने हैं। प्रत्येक शीर्ष को एक्स, वाई, जेड अक्षों के साथ घटकों की एक सरणी द्वारा परिभाषित किया गया है। इन छोरों को किनारों के किनारों के सरणी से चुना जाता है, जो पहले बनाया गया था।
- STL ज्यामिति ऑब्जेक्ट को आरंभीकृत करने के लिए Ng_STL_InitSTLGeometry () फ़ंक्शन को कॉल करें:
ng_res = Ng_STL_InitSTLGeometry (stlGeometry);
- एक खाली तत्व मेष वस्तु बनाएं जो मेष को इंगित करता है। ऐसा करने के लिए, Ng_NewMesh () फ़ंक्शन निष्पादित किया जाता है:
Ng_Mesh * mesh = Ng_NewMesh ();
- एसटीएल ज्यामिति और पीढ़ी के मापदंडों के अनुसार मॉडल की सतह पर प्रपत्र किनारों:
ng_res = Ng_STL_MakeEdges (stlGeometry, mesh, & ngMeshParameters);
- Ng_STL_GenerateSurfaceMesh () फ़ंक्शन का उपयोग करके मॉडल की सतह को त्रिकोणित करें। यहां, पहले से परिभाषित किनारों जो कि पहले से मौजूद नहीं हैं, को पहले से ही ध्यान में रखा जाता है, और पीढ़ी के मापदंडों को ध्यान में रखा जाएगा:
ng_res = Ng_STL_GenerateSurfaceMesh (stlGeometry, mesh, & ngMeshParameters);
- और, अंत में, तत्व ग्रिड को सीधे Ng_GenerateVolumeMesh () फ़ंक्शन जनरेटिंग पैरामीटर को ध्यान में रखते हुए जनरेट किया जाता है:
ng_res = Ng_GenerateVolumeMesh (जाल, और ngMeshParameters);
- इस कार्यक्रम में, ग्रिड उत्पादन परिणाम Ng_SaveMesh () फ़ंक्शन के माध्यम से वीओएल-फ़ाइल में आउटपुट होता है, जो पॉइंटर को पॉइडर और फ़ाइल नाम में स्थानांतरित करता है:
Ng_SaveMesh (मेष, volFileName);
ग्रिड जनरेशन रिजल्ट
मेष पीढ़ी का परिणाम एक प्रोग्राम ऑब्जेक्ट है जो कि प्रकार Ng_Mesh के पॉइंटर द्वारा है, डेमो प्रोग्राम में यह एक मेष पॉइंटर है। ऐसे कार्यों का एक सेट है जो तत्वों के ग्रिड के गुणों के लिए प्रोग्रामेटिक पहुंच प्रदान करता है: ग्रिड में बिंदुओं की संख्या प्राप्त करें Ng_GetNP (), सतह पर त्रिकोणों की संख्या प्राप्त करें Ng_GetNSE (), परिमित तत्वों की संख्या प्राप्त करें Ng_GetNE (), बिंदु Ng_Getante () के समन्वय प्राप्त करें। ), अंतिम तत्व प्राप्त करें Ng_GetVolumeElement (), Ng_SaveMesh फ़ाइल में ग्रिड को सहेजें।
प्रोग्राम में सहेजी गई VOL फ़ाइल को netgen.exe विज़ुअलाइज़र में खोला जा सकता है। फ़ाइल को देखने का परिणाम अंजीर में दिखाया गया है। 2. जैसा कि आंकड़े में देखा जा सकता है, सतह क्षेत्र की सीमाएं अपरिवर्तित रहीं।
अंजीर। 2. तत्वों की एक जाली उत्पन्न करने के बाद मॉडल की सतहNetGen द्वारा बनाई गई VOL फ़ाइल में निम्न प्रारूप है:
- फ़ाइल की शुरुआत में, प्रारूप कोड (mesh3d), मॉडल का आयाम (आयाम 3), और ज्यामिति कोड (geomtype 0) संकेत दिए गए हैं:
mesh3d
आयाम
3
geomtype
0
- फिर, कीवर्ड सरफेसमेंट्स के बाद, मात्रा को इंगित किया जाता है और सतह तत्वों को सूचीबद्ध किया जाता है। प्रत्येक तत्व के लिए, सतह संख्या, सतह की "सामग्री" की संख्या, आरक्षित पूर्णांक फ़ील्ड, सतह तत्व का वर्णन करने वाले बिंदुओं की संख्या (त्रिकोण के लिए - 3), और सतह तत्व के कोने के तीन बिंदुओं की संख्या दर्ज की गई है। इसके बाद, अंक 1 से गिने जाते हैं।
# सर्फर bcnr डोम डॉमप एनपी पी 1 पी 2 पी 3
surfaceelements
546
2 1 1 0 3 3 4 13
2 1 1 0 3 4 5 107
# ...
- फ़ाइल परिमित तत्वों को सूचीबद्ध करती है, जिनमें से प्रत्येक के लिए "सामग्री" की संख्या दर्ज की गई है, एक तत्व के वर्टिकल की संख्या (टेट्राहेड्रों के लिए चार हैं) और अंक की संख्या जो वर्टिकल हैं:
# matnr np p1 P2 p3 p4
volumeelements
1009
1 4 213 85 153 214
1 4 298 307 301 305
# ...
- सतह पर किनारों के बारे में जानकारी दी गई है:
# सर्फ़िड 0 p1 P2 ट्राइग्नम 1 ट्राइग्नम 2 डोम / सर्फ़र 1 डोमाउट / सर्फ्न 2 एड्नर 1 डिस्ट्रिक्ट 1 एडीएनआर 2 डिस्ट 2
edgesegmentsgi2
220
1 0 1 2 1 1 0 0 1 1 2 2
2 0 2 1 6 6 0 0 1 2 1 0
# ...
- वे बिंदु जो ग्रिड के नोड हैं, वे सूचीबद्ध हैं:
# XYZ
अंक
333
10.0000000000000000 4.0000000000000000 4.0000000000000000
10.0000000000000000 4.0000000000000000 2.0000000000000000
# ...
- फ़ाइल के अंत में संख्याओं द्वारा पहचानी गई सतहों के लिए रंग घटक लिखे जाते हैं। इन रंगों का उपयोग विज़ुअलाइज़र द्वारा सतह को चित्रित करने के लिए किया जाता है। यहां नंबर 2 के साथ सतह के लिए, रंग सेट किया गया है ताकि अंजीर में आयताकार क्षेत्र को उजागर किया जा सके। 2।
# सर्फनर रेड ग्रीन ब्लू
face_colours
7
2 1.00000000 1.00000000 0.00000000
3 0.00000000 1.00000000 0.00000000
# ...
नेटजन के साथ 2 डी मेशिंग
NetGen में तत्वों का 2D जाल बनाने की सुविधा है। विशेष मामले में, यह फ़ंक्शन उपयोगी हो सकता है, उदाहरण के लिए, फ्लैट चेहरों के साथ 3 डी मॉडल के लिए एसटीएल फ़ाइल बनाने के लिए। मॉडल की ज्यामिति को इनपुट फ़ाइल में अंतरिक्ष के क्षेत्रों की सीमाओं के रूप में वर्णित किया गया है। विभाजन के उप-क्षेत्रों की सीमाएं या तो लाइन सेगमेंट का उपयोग करके या द्विघात विभाजन का उपयोग करके निर्दिष्ट की जाती हैं। सीमा का वर्णन करते समय, सीमा के बाईं और दाईं ओर क्षेत्र की संख्या को इंगित करें। ग्रिड के बाहर का क्षेत्र नंबर 0 से एनकोडेड है।
अंजीर। 3. तत्वों का 2 डी जाल बनाने के लिए अंक और क्षेत्रों का कोडिंगहम अंजीर के अनुरूप एक इनपुट फ़ाइल का एक उदाहरण देते हैं। 3।
splinecurves2dv2
2
अंक
१ ० ०
२ ३ ०
३ ३ २
४ ० २
५ १ ०
६ २ ०
२ १
1 १ १
खंडों
1 0 2 1 5 -bc = 1
2 0 2 5 6 -bc = 1
1 0 2 6 2 -bc = 1
1 0 2 2 3 -bc = 1
1 0 2 3 4 -bc = 1
1 0 2 4 1 -bc = 1
2 1 2 6 7 -bc = 1
2 1 2 7 8 -bc = 1
2 1 2 8 5 -bc = 1
सामग्री
1 डोमेन 1 -मैक्स = 1
2 डोमेन 2 -मैक्स = 1
इस फाइल की शुरुआत में splinecurves2dv2 कीवर्ड दर्शाया गया है। इसके बाद यह ग्रिड पुनर्निर्माण कारक है (यहां - 2)। कीवर्ड बिंदुओं के बाद, मॉडल विवरण बिंदुओं को सूचीबद्ध किया जाता है: बिंदु संख्या और X, Y अक्षों के साथ समन्वय करता है।
अगला, कीवर्ड सेगमेंट के बाद, सीमा खंडों की एक सूची निम्न प्रारूप में होती है:
- सीमा के बाईं ओर क्षेत्र संख्या।
- सीमा के दाईं ओर क्षेत्र संख्या।
- सीमा खंड (उदाहरण 2 में) का वर्णन करने के लिए अंकों की संख्या।
- सीमा के शुरुआती बिंदु की संख्या।
- सीमा का समापन बिंदु संख्या।
- जनरेशन कंट्रोल फ्लैग। उपयोग में न होने पर भी बीसी ध्वज (सीमा स्थिति संख्या) को इंगित किया जाना चाहिए।
कीवर्ड सामग्री के बाद, क्षेत्रों ("सामग्री") को निम्न प्रारूप में सूचीबद्ध किया गया है:
- क्षेत्र संख्या।
- सामग्री का नाम।
- जनरेशन कंट्रोल फ्लैग। तत्व ग्रिड के अधिकतम आकार को सीमित करते हुए, यहां अधिकतम ध्वज को निर्दिष्ट किया जा सकता है।
निम्नलिखित एक प्रोग्राम है जो एक 2 डी मेष उत्पन्न करता है:
#include "stdafx.h"
नामस्थान nglib
{
# जीतना ".. \ NetGen \ nglib \ nglib.h"
}
नामस्थान nglib का उपयोग करना;
शून्य मुख्य () {
const char * in2DFileName = ".. \\ Data \\ triangulation.in2d";
const char * volFileName = ".. \\ Data \\ triangulation.vol";
Ng_Geometry_2D * जियोम;
Ng_Init ();
geom = Ng_LoadGeometry_2D (in2DFileName);
Ng_Meshing_Parameters mp;
mp.maxh = 10000;
mp.fineness = 1;
mp.secondorder = 0;
Ng_Mesh * जाली;
Ng_GenerateMesh_2D (geom, & mesh, & mp);
Ng_SaveMesh (मेष, volFileName);
}
2 डी मेष उत्पन्न करने के लिए, जीओएम पॉइंटर का उपयोग करके 2 डी ज्यामिति विवरण वस्तु का उपयोग किया जाता है। जाल पीढ़ी का परिणाम मेष सूचक द्वारा वस्तु में है। उदाहरण में, समान Ng_SaveMesh () फ़ंक्शन का उपयोग जनरेशन परिणाम को 3D मेष पीढ़ी उदाहरण में प्रदर्शित करने के लिए किया जाता है। इसलिए, इस मामले में, आउटपुट फ़ाइल में 3 डी मेष के लिए एक संरचना होती है, लेकिन इसमें जेड समन्वय का मूल्य हमेशा शून्य होता है। 2 डी ग्रिड के साथ काम करने के लिए प्रोग्राम इंटरफ़ेस में फ़ंक्शन शामिल हैं Ng_GetNP_2D () - ग्रिड नोड्स की संख्या प्राप्त करें, Ng_GetNE_2D () - ग्रिड में तत्वों की संख्या प्राप्त करें, Ng_GetPoint_2D () - नोड संख्या द्वारा निर्देशांक प्राप्त करें, Ng_GetElement_2D () - निर्देशांक प्राप्त करें। आइटम नंबर। 2D जाल की पीढ़ी के परिणाम का दृश्य अंजीर में दिखाया गया है। 4. जैसा कि आंकड़े से देखा जा सकता है, क्षेत्र की सीमाएं विकृत नहीं हैं।
अंजीर। 4. 2 डी मेष उत्पन्न करने का परिणामनिष्कर्ष
यह लेख नेटगेन का एक संक्षिप्त अवलोकन देता है, जिससे यह इस प्रकार है कि इस पुस्तकालय को उन अनुप्रयोगों में आसानी से उपयोग किया जा सकता है जिनके लिए तत्वों की एक 3 डी मेष की आवश्यकता होती है। पुस्तकालय कार्यों को कोड लिखे बिना सीखा और उपयोग किया जा सकता है। NetGen में एप्लिकेशन netgen.exe शामिल है, जो सभी लाइब्रेरी फ़ंक्शंस के लिए विज़ुअल इंटरफ़ेस लागू करता है। इस आलेख में चित्र, तत्वों की एक ग्रिड को दर्शाते हुए, इस एप्लिकेशन का उपयोग करके प्राप्त किए जाते हैं।