Branch data Line data Source code
1 : : #include <stdio.h>
2 : : #include "meshkit/AssyMesher.hpp"
3 : : #include "meshkit/LocalSet.hpp"
4 : : #include "meshkit/MKCore.hpp"
5 : : #include "meshkit/ModelEnt.hpp"
6 : : #include "meshkit/OneToOneSwept.hpp"
7 : : #include "meshkit/RegisterMeshOp.hpp"
8 : : #include "meshkit/SizingFunction.hpp"
9 : :
10 : : #include "iMesh_extensions.h"
11 : : #include "MBCN.h"
12 : : #include "moab/Types.hpp"
13 : : #include "MBTagConventions.hpp"
14 : :
15 : :
16 : : namespace MeshKit
17 : : {
18 : : // static registration of this mesh scheme
19 : : moab::EntityType AssyMesher_tps[] = { moab::MBTET,
20 : : moab::MBQUAD,
21 : : moab::MBTRI,
22 : : moab::MBHEX,
23 : : moab::MBMAXTYPE};
24 : 40 : const moab::EntityType* AssyMesher::output_types()
25 : 40 : { return AssyMesher_tps; }
26 : :
27 : 1 : AssyMesher::AssyMesher(MKCore *mk, const MEntVector &me_vec)
28 : : : MeshScheme( mk, me_vec),
29 [ + - ][ + - ]: 1 : igeom(mk->igeom_instance()), imesh(mk->imesh_instance()),
30 [ + - ][ + - ]: 2 : mb (mk->moab_instance())
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
31 : : {
32 : 1 : m_nPlanar = 0; //default is 3D
33 : 1 : m_nLineNumber = 0;
34 [ + - ]: 1 : szComment = "!";
35 : 1 : MAXCHARS = 300;
36 : 1 : pi = M_PI;
37 : 1 : m_dRadialSize = -1.0;
38 : 1 : m_dAxialSize = -1.0;
39 : 1 : m_dTetMeshSize = -1.0;
40 : 1 : m_nDimensions = 0;
41 : 1 : m_nMaterialSetId = 1;
42 : 1 : m_nNeumannSetId = 1;
43 [ + - ]: 1 : m_szEngine = "acis";
44 [ + - ]: 1 : m_szMeshType = "hex";
45 : 1 : m_nDuct = 0;
46 : 1 : m_nDuctNum = 0;
47 : 1 : m_nJouFlag = 0;
48 [ + - ]: 1 : m_szSideset = "yes";
49 : 1 : m_dMergeTol = 1e-4;
50 [ + - ]: 1 : m_GeomFile = "";
51 : 1 : }
52 : :
53 : 3 : AssyMesher::~AssyMesher()
54 [ - + ]: 2 : {}
55 : :
56 : 0 : bool AssyMesher::add_modelent(ModelEnt *model_ent)
57 : : {
58 : 0 : return MeshOp::add_modelent(model_ent);
59 : : }
60 : :
61 : 1 : void AssyMesher::setup_this()
62 : : {
63 : : // populate the model entities based on the geometry
64 [ + - ][ + - ]: 1 : mk_core()->populate_model_ents();
65 : :
66 : : // create a set with the names of materials as std::string
67 [ + + ]: 4 : for (int mtrlIndx = 1; mtrlIndx <= m_nAssemblyMat; ++mtrlIndx)
68 : : {
69 [ + - ][ + - ]: 3 : allMtrlsSet.insert(m_szAssmMat(mtrlIndx));
70 : : }
71 : :
72 : : // get a vector of all surfaces
73 [ + - ]: 1 : std::vector<iGeom::EntityHandle> allSurfs;
74 [ + - ]: 1 : iGeom::EntitySetHandle rootSetHandle = igeom->getRootSet();
75 [ + - ]: 1 : igeom->getEntities(rootSetHandle, iBase_FACE, allSurfs);
76 : :
77 : : // get a vector of all surfaces that have are identified
78 : : // as top surfaces for some material
79 : : std::vector<iGeom::EntityHandle> *allTopSurfs =
80 [ + - ]: 1 : selectByMaterialsAndNameSuffix(allSurfs, allMtrlsSet, "_top");
81 : :
82 : : // get the tag on the geometry that identifies the associated model entity
83 [ + - ][ + - ]: 1 : iGeom::TagHandle meTag = mk_core()->igeom_model_tag();
84 : :
85 : : // sizing function for radial mesh size . . . MeshKit core will delete it
86 : : SizingFunction* radialMeshSizePtr;
87 [ - + ][ # # ]: 1 : if (m_dRadialSize <= 0 && m_nDimensions > 0)
88 : : {
89 : : // the radial size was not specified in the input
90 : : // but there are pins
91 [ # # ][ # # ]: 0 : if (m_szGeomType == "hexagonal")
92 : : {
93 [ # # ]: 0 : double pitch = m_dMAssmPitch(1, m_nDimensions);
94 [ # # ][ # # ]: 0 : radialMeshSizePtr = new SizingFunction(mk_core(), -1, 0.1*pitch);
[ # # ]
95 : : }
96 : : else
97 : : {
98 [ # # ]: 0 : double pitchX = m_dMAssmPitchX(1, m_nDimensions);
99 [ # # ]: 0 : double pitchY = m_dMAssmPitchY(1, m_nDimensions);
100 : 0 : radialMeshSizePtr = new SizingFunction(mk_core(), -1,
101 [ # # ][ # # ]: 0 : 0.02*0.5*(pitchX + pitchY));
[ # # ]
102 : 0 : }
103 : : }
104 [ - + ]: 1 : else if (m_dRadialSize <= 0)
105 : : {
106 : : // there are no pins and no radial mesh size
107 [ # # ][ # # ]: 0 : radialMeshSizePtr = new SizingFunction(mk_core(), -1, 1.0);
[ # # ]
108 : : }
109 : : else
110 : : {
111 [ + - ][ + - ]: 1 : radialMeshSizePtr = new SizingFunction(mk_core(), -1, m_dRadialSize);
[ + - ]
112 : : }
113 [ + - ]: 1 : int radialSizeIndex = radialMeshSizePtr->core_index();
114 : :
115 : : // sizing function for axial mesh size . . . MeshKit core will delete it
116 : : // it looks like axial mesh size can be more complicated depending
117 : : // on number of ducts but for the moment assume it is uniform
118 : : SizingFunction* axialMeshSizePtr;
119 [ - + ]: 1 : if (m_dAxialSize <= 0) // the axial size was not specified in the input
120 : : {
121 : : // in uniform size case, default is 10 intervals, i.e. 10% of height
122 [ # # ][ # # ]: 0 : axialMeshSizePtr = new SizingFunction(mk_core(), 10, -1);
[ # # ]
123 : : }
124 : : else
125 : : {
126 [ + - ][ + - ]: 1 : axialMeshSizePtr = new SizingFunction(mk_core(), -1, m_dAxialSize);
[ + - ]
127 : : }
128 [ + - ]: 1 : int axialSizeIndex = axialMeshSizePtr->core_index();
129 : :
130 : : // set the mesh sizes and operations starting from top surfaces
131 [ + + ]: 5 : for (unsigned int tsi = 0; tsi < allTopSurfs->size(); ++tsi)
132 : : {
133 : : // Remark: iterator pattern may perform better that indexed loop here
134 [ + - ]: 4 : iGeom::EntityHandle topGeoHandle = (*allTopSurfs)[tsi];
135 : : ModelEnt* meTopSurf;
136 [ + - ]: 4 : igeom->getData(topGeoHandle, meTag, &meTopSurf);
137 : : // TODO: check success
138 [ + - ]: 4 : meTopSurf->sizing_function_index(radialSizeIndex);
139 : :
140 [ + - ]: 4 : MEntVector topSurfVec;
141 [ + - ]: 4 : topSurfVec.push_back(meTopSurf);
142 [ + - ][ + - ]: 4 : MeshOp* paveOp = mk_core()->construct_meshop("CAMALPaver", topSurfVec);
[ + - ]
143 [ + - ][ + - ]: 4 : mk_core()->insert_node(paveOp, (MeshOp*) this, mk_core()->root_node());
[ + - ][ + - ]
144 : :
145 : : double topBBMinX, topBBMinY, topBBMinZ, topBBMaxX, topBBMaxY, topBBMaxZ;
146 : : igeom->getEntBoundBox(topGeoHandle,
147 [ + - ]: 4 : topBBMinX, topBBMinY, topBBMinZ, topBBMaxX, topBBMaxY, topBBMaxZ);
148 : :
149 [ + - ]: 8 : std::vector<iGeom::EntityHandle> adjRegions;
150 [ + - ]: 4 : igeom->getEntAdj(topGeoHandle, iBase_REGION, adjRegions);
151 [ + + ]: 8 : for (size_t ari = 0; ari < adjRegions.size(); ++ari)
152 : : {
153 [ + - ]: 4 : iGeom::EntityHandle adjRegionHandle = adjRegions[ari];
154 : :
155 : : // confirm that the adjacent region is really below the top surface
156 : : double arBBMinX, arBBMinY, arBBMinZ, arBBMaxX, arBBMaxY, arBBMaxZ;
157 : : igeom->getEntBoundBox(adjRegionHandle,
158 [ + - ]: 4 : arBBMinX, arBBMinY, arBBMinZ, arBBMaxX, arBBMaxY, arBBMaxZ);
159 [ - + ]: 4 : if (arBBMinZ >= topBBMinZ)
160 : : {
161 : : // this is not the correct region since it is not below the top surface
162 : 0 : continue;
163 : : }
164 : :
165 : : ModelEnt* regionME;
166 [ + - ]: 4 : igeom->getData(adjRegionHandle, meTag, ®ionME);
167 : : // TODO: check success
168 : :
169 [ + - ]: 4 : regionME->sizing_function_index(axialSizeIndex, false);
170 : :
171 : : // examine the faces of the region in order to
172 : : // (1) identify indices of the top and bottom face
173 : : // (2) set sizes on vertical faces and bottom face as needed
174 [ + - ]: 4 : std::vector<iGeom::EntityHandle> regionSurfs;
175 [ + - ]: 4 : igeom->getEntAdj(adjRegionHandle, iBase_FACE, regionSurfs);
176 : 4 : size_t topFaceIndex=0, bottomFaceIndex=0;
177 [ + + ]: 28 : for (size_t rfi = 0; rfi < regionSurfs.size(); ++rfi)
178 : : {
179 [ + - ]: 24 : iGeom::EntityHandle regionFaceHandle = regionSurfs[rfi];
180 [ + + ]: 24 : if (regionFaceHandle == topGeoHandle)
181 : : {
182 : 4 : topFaceIndex = rfi;
183 : 4 : continue;
184 : : }
185 : :
186 : : // check whether this face shares an edge with the top face
187 : 20 : bool commonEdge = false;
188 [ + - ]: 20 : std::vector<iGeom::EntityHandle> edgesOfFace;
189 [ + - ]: 20 : igeom->getEntAdj(regionFaceHandle, iBase_EDGE, edgesOfFace);
190 [ + + ]: 70 : for (size_t eofci = 0; eofci < edgesOfFace.size(); ++eofci)
191 : : {
192 [ + - ][ + - ]: 66 : igeom->isEntAdj(topGeoHandle, edgesOfFace[eofci], commonEdge);
193 [ + + ]: 66 : if (commonEdge) break;
194 : : }
195 : :
196 [ + + ]: 20 : if (commonEdge)
197 : : {
198 : : // this is a vertical face
199 : : ModelEnt* meVertSurf;
200 [ + - ]: 16 : igeom->getData(regionFaceHandle, meTag, &meVertSurf);
201 : : // TODO: check success
202 [ + - ][ + + ]: 16 : if (meVertSurf->sizing_function_index() == -1)
203 : : {
204 : : // the vertical surface has not yet been processed, since no
205 : : // sizing function index is set on it
206 [ + - ]: 10 : meVertSurf->sizing_function_index(axialSizeIndex, false);
207 : : // sizing function needs to be set on the vertical edges . . .
208 : : // it should be okay to set it on all boundary edges not yet set
209 [ + - ]: 10 : MEntVector edgeMEsVec;
210 [ + - ]: 20 : std::vector<int> senses;
211 [ + - ]: 10 : meVertSurf->boundary(1, edgeMEsVec, &senses);
212 [ + + ]: 50 : for (size_t emei = 0; emei < edgeMEsVec.size(); ++emei)
213 : : {
214 [ + - ][ + - ]: 40 : if (edgeMEsVec[emei]->sizing_function_index() == -1)
[ + + ]
215 : : {
216 [ + - ][ + - ]: 15 : edgeMEsVec[emei]->sizing_function_index(axialSizeIndex, false);
217 : : }
218 : 16 : }
219 : : }
220 : : }
221 : : else
222 : : {
223 : : // this is the bottom face
224 : 4 : bottomFaceIndex = rfi;
225 : : ModelEnt* meBottomSurf;
226 [ + - ]: 4 : igeom->getData(regionFaceHandle, meTag, &meBottomSurf);
227 : : // TODO: check success
228 [ + - ][ + - ]: 4 : if (meBottomSurf->sizing_function_index() == -1)
229 : : {
230 : : // the bottom surface does not yet have a
231 : : // sizing function set on it
232 [ + - ]: 4 : meBottomSurf->sizing_function_index(radialSizeIndex);
233 : : }
234 [ + - ]: 4 : MEntVector edgeMEsVec;
235 [ + - ]: 8 : std::vector<int> senses;
236 [ + - ]: 4 : meBottomSurf->boundary(1, edgeMEsVec, &senses);
237 [ + + ]: 20 : for (size_t emei = 0; emei < edgeMEsVec.size(); ++emei)
238 : : {
239 [ + - ][ + - ]: 16 : edgeMEsVec[emei]->constrain_even(true);
240 : 4 : }
241 : : }
242 : 20 : }
243 : :
244 [ + - ]: 8 : MEntVector regionVec;
245 [ + - ]: 4 : regionVec.push_back(regionME);
246 : : OneToOneSwept *sweepOp = (OneToOneSwept*)
247 [ + - ][ + - ]: 4 : mk_core()->construct_meshop("OneToOneSwept", regionVec);
[ + - ]
248 [ + - ]: 4 : sweepOp->SetSourceSurface(topFaceIndex);
249 [ + - ]: 4 : sweepOp->SetTargetSurface(bottomFaceIndex);
250 [ + - ][ + - ]: 4 : mk_core()->insert_node(sweepOp, (MeshOp*)this, paveOp);
251 : 4 : }
252 : 4 : }
253 : :
254 [ + - ]: 1 : delete allTopSurfs;
255 : :
256 [ + - ][ + - ]: 1 : mk_core()->print_graph();
257 : 1 : }
258 : :
259 : 1 : void AssyMesher::execute_this()
260 : : {
261 : 1 : std::cout << "Execute : start meshing the assembly" << std::endl;
262 : 1 : createMaterialNeumannSets(allMtrlsSet);
263 : : //createMaterialNeumannSets();
264 : : // Start doing the steps in .jou file: /MeshKit/rgg/io.cpp:routine:CreateCubitJournal()
265 : : // AssyMesher
266 : : // 1. Find surfaces with names <pin_material>_top and set radial mesh size, also set mesh scheme to CAMALTriMesher or GRUMMP trimesher
267 : : // 2. Sweep the volumes with top surfaces of pins, use bottom surfaces of the pins if required: bottom surfaces are name as <pin_material_bot>
268 : : // 3. Find edges in surfaces with names <material_side> set size equal to edge length
269 : : // 4. After meshing assign block names for all pins, by filtering using volumes
270 : : // 5. Now mesh the top cutout portion using CAMALTriMesher or GRUMMP trim//esher (Report if this fails, if this fails change in radial mesh size and edge interval might be needed)
271 : : // 6. Now sweep and name blocks.
272 : : // 7. Create Neumann Sets
273 : :
274 : : // step 1
275 : :
276 : :
277 : 1 : }
278 : :
279 : 1 : void AssyMesher::PrepareIO (int argc, char *argv[], std::string TestDir)
280 : : // ---------------------------------------------------------------------------
281 : : // Function: Obtains file names and opens input/output files
282 : : // Input: command line arguments
283 : : // Output: none
284 : : // ---------------------------------------------------------------------------
285 : : {
286 : : // set and open input output files
287 : 1 : bool bDone = false;
288 : : #ifdef HAVE_OCC
289 : : //switch to else to protect from having define twice
290 : : #define EXTENSION ".brep";
291 : : #else
292 : : #define EXTENSION ""
293 : : #endif
294 [ - + ]: 1 : do{
295 [ - + ]: 1 : if (2 == argc) {
296 [ # # ][ # # ]: 0 : m_InputFile = (std::string)argv[1] + ".inp";
[ # # ]
297 [ # # ][ # # ]: 0 : m_LogName = m_InputFile + ".log";
298 [ # # ][ # # ]: 0 : m_GeomFile = (std::string)argv[1] + EXTENSION;
[ # # ]
299 [ # # ]: 0 : m_szCommonFile = "common.inp";
300 : : }
301 [ + - ]: 1 : else if (1 == argc){
302 [ + - ][ + - ]: 1 : m_LogFile << "\nRunning default case:\n" << std::endl;
303 [ + - ][ + - ]: 1 : m_GeomFile = TestDir + "/" + (char *)DEFAULT_TEST_AM+ EXTENSION;
[ + - ][ + - ]
304 [ + - ][ + - ]: 1 : m_InputFile = TestDir + "/" + (char *)DEFAULT_TEST_AM + ".inp";
[ + - ][ + - ]
305 [ + - ][ + - ]: 1 : m_LogName = (std::string)DEFAULT_TEST_AM + ".log";
[ + - ]
306 [ + - ][ + - ]: 1 : m_szCommonFile = TestDir + "/" + "common.inp";
[ + - ]
307 : :
308 : : }
309 : : // open input file for reading
310 [ + - ]: 1 : m_FileInput.open (m_InputFile.c_str(), std::ios::in);
311 [ + - ][ - + ]: 1 : if (!m_FileInput){
312 [ # # ][ # # ]: 0 : m_LogFile << "Unable to open file: " << m_InputFile << std::endl;
[ # # ][ # # ]
313 [ # # ]: 0 : m_FileInput.clear ();
314 : 0 : exit(1);
315 : : }
316 : : else
317 : 1 : bDone = true; // file opened successfully
318 : :
319 : : // open common.inp file, if not found do nothing.
320 [ + - ]: 1 : m_FileCommon.open (m_szCommonFile.c_str(), std::ios::in);
321 [ + - ][ - + ]: 1 : if (!m_FileCommon){
322 : 0 : have_common = false;
323 [ # # ][ # # ]: 0 : std::cout << "common.inp file not specified." << std::endl;
324 [ # # ]: 0 : m_FileCommon.clear ();
325 : : }
326 : : else {
327 : 1 : have_common = true;
328 : : }
329 [ + - ][ + - ]: 1 : std::cout << " opened file " << m_szCommonFile << " have common is "
[ + - ]
330 [ + - ][ + - ]: 1 : << have_common << std::endl;
331 : : // } while (!bDone);
332 : :
333 : :
334 : : // open the log file for dumping debug/output statements
335 [ + - ]: 1 : m_LogFile.coss.open (m_LogName.c_str(), std::ios::out);
336 [ + - ][ - + ]: 1 : if (!m_LogFile.coss){
337 [ # # ][ # # ]: 0 : m_LogFile << "Unable to open file: " << m_LogName << std::endl;
[ # # ][ # # ]
338 [ # # ]: 0 : m_LogFile.coss.clear ();
339 : 0 : exit(1);
340 : : }
341 : : else
342 : 1 : bDone = true; // file opened successfully
343 [ + - ]: 1 : m_LogFile << '\n';
344 [ + - ][ + - ]: 1 : m_LogFile << "\t\t---------------------------------------------------------" << '\n';
345 [ + - ][ + - ]: 1 : m_LogFile << "\t\t Tool to generate assembly mesh " << '\n';
346 [ + - ][ + - ]: 1 : m_LogFile << "\t\t\t\tArgonne National Laboratory" << '\n';
347 [ + - ][ + - ]: 1 : m_LogFile << "\t\t\t\t 2015 " << '\n';
348 [ + - ][ + - ]: 1 : m_LogFile << "\t\t---------------------------------------------------------" << '\n';
349 [ + - ][ + - ]: 1 : m_LogFile << "\nsee README file for using the program and details on various cards.\n"<< std::endl;
350 : :
351 : 1 : }while (!bDone);
352 : :
353 : : /////////////////////////
354 : : /////////////////////////
355 [ + - ]: 1 : CParser Parse1;
356 : 1 : bool found = false;
357 [ + - ]: 2 : std::string card;
358 : 1 : m_nLineNumber = 0;
359 [ + - ][ + - ]: 1 : std::cout << "Reading from common.inp file." << std::endl;
360 : : for(;;){
361 [ - + ]: 8 : if (!Parse1.ReadNextLine (m_FileCommon, m_nLineNumber, szInputString,
362 [ + - ]: 8 : MAXCHARS, szComment))
363 [ # # ]: 0 : IOErrorHandler (INVALIDINPUT);
364 : :
365 [ + - ][ + - ]: 8 : if (szInputString.substr(0,10) == "geomengine"){
[ + + ]
366 : 1 : found = true;
367 [ + - ]: 1 : std::istringstream szFormatString (szInputString);
368 [ + - ][ + - ]: 1 : szFormatString >> card >> m_szEngine;
369 [ # # ][ - + ]: 2 : if( ((strcmp (m_szEngine.c_str(), "acis") != 0) &&
370 [ - + ][ + - ]: 1 : (strcmp (m_szEngine.c_str(), "occ") != 0)) || szFormatString.fail())
[ - + ]
371 [ # # ]: 1 : IOErrorHandler(EGEOMENGINE);
372 : : }
373 [ + - ][ + - ]: 8 : if (szInputString.substr(0,8) == "meshtype"){
[ + + ]
374 : 1 : found = true;
375 [ + - ]: 1 : std::istringstream szFormatString (szInputString);
376 [ + - ][ + - ]: 1 : szFormatString >> card >> m_szMeshType;
377 [ + - ][ - + ]: 3 : if( ((strcmp (m_szMeshType.c_str(), "hex") != 0) &&
378 [ + - ][ + - ]: 2 : (strcmp (m_szMeshType.c_str(), "tet") != 0)) || szFormatString.fail())
[ - + ]
379 [ # # ]: 1 : IOErrorHandler(INVALIDINPUT);
380 : : }
381 : :
382 : : // Hex or Rect geometry type
383 [ + - ][ + - ]: 8 : if (szInputString.substr(0,12) == "geometrytype"){
[ + + ]
384 : 1 : found = true;
385 [ + - ]: 1 : std::istringstream szFormatString (szInputString);
386 [ + - ][ + - ]: 1 : szFormatString >> card >> m_szGeomType;
387 [ + - ][ - + ]: 3 : if( ((strcmp (m_szGeomType.c_str(), "hexagonal") != 0) &&
388 [ + - ][ + - ]: 2 : (strcmp (m_szGeomType.c_str(), "rectangular") != 0)) || szFormatString.fail())
[ - + ]
389 [ # # ]: 0 : IOErrorHandler(EGEOMTYPE);
390 : :
391 : : // set the number of sides in the geometry
392 [ + - ][ - + ]: 1 : if(m_szGeomType == "hexagonal")
393 : 0 : m_nSides = 6;
394 [ + - ][ + - ]: 1 : else if(m_szGeomType == "rectangular")
395 : 1 : m_nSides = 4;
396 : : }
397 : : // Default if volume, set geometry type to surface for 2D assemblies
398 [ + - ][ + - ]: 8 : if (szInputString.substr(0,8) == "geometry"){
[ + + ]
399 : 1 : found = true;
400 [ + - ]: 1 : std::string outfile;
401 [ + - ]: 2 : std::istringstream szFormatString (szInputString);
402 [ + - ][ + - ]: 1 : szFormatString >> card >> outfile;
403 [ + - ][ + - ]: 1 : if(strcmp (outfile.c_str(), "surface") == 0 || szFormatString.fail())
[ - + ][ - + ]
404 : 1 : m_nPlanar=1;
405 : : }
406 : :
407 : : // breaking condition
408 [ + - ][ + - ]: 8 : if(szInputString.substr(0,3) == "end" || m_nLineNumber == 500){
[ + + ][ - + ]
[ + - ]
[ + + # # ]
409 : 1 : found = true;
410 : 1 : break;
411 : : }
412 [ - + ]: 7 : if (found == false){
413 [ # # ][ # # ]: 0 : std::cout << "Cannot specify: " << szInputString << " in common.inp files" << std::endl;
[ # # ][ # # ]
414 : : }
415 : 7 : }
416 : :
417 : : /////////////////////////////////////
418 : : /////////////////////////////////////
419 : : ///
420 : : ///
421 : :
422 : : // Read AssyGen input file
423 [ + - ]: 2 : CParser Parse;
424 : 1 : int nCyl =0, nCellMat=0, nInputLines=0;
425 [ + - ][ + - ]: 2 : std::string szVolId, szVolAlias;
426 : : // count the total number of cylinder commands in each pincell
427 : : for(;;){
428 [ - + ]: 17 : if (!Parse.ReadNextLine (m_FileInput, m_nLineNumber, szInputString,
429 [ + - ]: 17 : MAXCHARS, szComment))
430 [ # # ]: 0 : IOErrorHandler (INVALIDINPUT);
431 : :
432 [ + - ][ + - ]: 17 : if (szInputString.substr(0,10) == "geomengine"){
[ - + ]
433 [ # # ]: 0 : std::istringstream szFormatString (szInputString);
434 [ # # ][ # # ]: 0 : szFormatString >> card >> m_szEngine;
435 [ # # ][ # # ]: 0 : if( ((strcmp (m_szEngine.c_str(), "acis") != 0) &&
436 [ # # ][ # # ]: 0 : (strcmp (m_szEngine.c_str(), "occ") != 0)) || szFormatString.fail())
[ # # ]
437 [ # # ]: 0 : IOErrorHandler(EGEOMENGINE);
438 : : }
439 [ + - ][ + - ]: 17 : if (szInputString.substr(0,8) == "meshtype"){
[ + + ]
440 [ + - ]: 1 : std::istringstream szFormatString (szInputString);
441 [ + - ][ + - ]: 1 : szFormatString >> card >> m_szMeshType;
442 [ # # ][ - + ]: 2 : if( ((strcmp (m_szMeshType.c_str(), "hex") != 0) &&
443 [ - + ][ + - ]: 1 : (strcmp (m_szMeshType.c_str(), "tet") != 0)) || szFormatString.fail())
[ - + ]
444 [ # # ]: 1 : IOErrorHandler(INVALIDINPUT);
445 : : }
446 [ + - ][ + - ]: 17 : if (szInputString.substr(0,4) == "duct" || szInputString.substr(0,10) == "dimensions"){
[ + + ][ + - ]
[ + - ][ - + ]
[ + + ][ + - ]
[ + + # #
# # ]
447 : 1 : ++m_nDuct;
448 : : }
449 [ + - ][ + - ]: 17 : if (szInputString.substr(0,8) == "pincells"){
[ + + ]
450 [ + - ]: 1 : std::istringstream szFormatString (szInputString);
451 [ + - ][ + - ]: 1 : szFormatString >> card >> m_nPincells;
452 [ + - ]: 1 : if(m_nPincells>0)
453 [ + - ]: 1 : m_Pincell.SetSize(m_nPincells);
454 [ # # ]: 0 : else if(m_nPincells ==0)
455 [ # # ]: 0 : m_Pincell.SetSize(1); // assume for using dummy pincell
456 : :
457 : : // count the number of cylinder lines for each pincell
458 [ + + ]: 2 : for (int i=1; i<=m_nPincells; i++){
459 : : // read the no. of input lines first pincell
460 [ - + ]: 1 : if (!Parse.ReadNextLine (m_FileInput, m_nLineNumber, szInputString,
461 [ + - ]: 1 : MAXCHARS, szComment))
462 [ # # ]: 0 : IOErrorHandler (INVALIDINPUT);
463 [ + - ]: 1 : std::istringstream szFormatString1 (szInputString);
464 [ + - ][ + - ]: 1 : szFormatString1 >> szVolId >> szVolAlias >> nInputLines;
[ + - ]
465 [ + - ][ - + ]: 1 : if(szFormatString1.fail())
466 [ # # ]: 0 : IOErrorHandler(INVALIDINPUT);
467 : : // loop thru the input lines of each pincell
468 [ + + ]: 4 : for(int l=1; l<=nInputLines; l++){
469 [ - + ]: 3 : if (!Parse.ReadNextLine (m_FileInput, m_nLineNumber, szInputString,
470 [ + - ]: 3 : MAXCHARS, szComment))
471 [ # # ]: 0 : IOErrorHandler (INVALIDINPUT);
472 [ + - ][ + - ]: 3 : if (szInputString.substr(0,8) == "cylinder"){
[ + + ]
473 : 1 : ++nCyl;
474 : : }
475 [ + - ][ + - ]: 3 : if (szInputString.substr(0,12) == "cellmaterial"){
[ - + ]
476 : 0 : ++nCellMat;
477 : : }
478 : : }
479 : :
480 : : // set the sizes
481 [ + - ]: 1 : if (nCyl>0) {
482 [ - + ]: 1 : if (nCellMat > 0) {
483 [ # # ][ # # ]: 0 : m_Pincell(i).SetCellMatSize(nCellMat);
484 : : }
485 [ + - ][ + - ]: 1 : m_Pincell(i).SetNumCyl(nCyl);
486 : : }
487 [ # # ]: 0 : else if (nCyl ==0) {
488 : : // used to be nInputLines > 0 . . . is it an error if
489 : : // neither a cylinder nor a material line in the pin cell input?
490 [ # # ]: 0 : if (nCellMat > 0)
491 [ # # ][ # # ]: 0 : m_Pincell(i).SetCellMatSize(nCellMat);
492 : : }
493 : 1 : nCyl = 0;
494 : 1 : nCellMat = 0;
495 : 2 : }
496 : : }
497 : : // breaking condition
498 [ + - ][ + - ]: 17 : if(szInputString.substr(0,3) == "end"){
[ + + ]
499 [ + - ]: 1 : std::istringstream szFormatString (szInputString);
500 : 1 : break;
501 : : }
502 : 16 : }
503 : :
504 : : // //ACIS ENGINE
505 : : //#ifdef HAVE_ACIS
506 : : // // if(m_szEngine == "acis"){
507 : : // m_szGeomFile = m_InputFile+".sat";
508 : : // // }
509 : : //#elif defined(HAVE_OCC)
510 : : // // OCC ENGINE
511 : : // // if (m_szEngine == "occ"){
512 : : // m_szG= m_InputFile+".stp";
513 : : // // }
514 : : //#endif
515 : : // std::cout << "\no/p geometry file name: " << m_szGeomFile <<std::endl;
516 : :
517 : : //Rewind the input file
518 [ + - ]: 1 : m_FileInput.clear (std::ios_base::goodbit);
519 [ + - ]: 1 : m_FileInput.seekg (0L, std::ios::beg);
520 : 1 : m_nLineNumber = 0;
521 : : // CParser Parse;
522 : : // std::string card;
523 : :
524 : : // start reading the input file break when encounter end
525 : : for(;;){
526 [ - + ]: 17 : if (!Parse.ReadNextLine (m_FileInput, m_nLineNumber, szInputString,
527 [ + - ]: 17 : MAXCHARS, szComment))
528 [ # # ]: 0 : IOErrorHandler (INVALIDINPUT);
529 [ + - ][ + - ]: 17 : if (szInputString.substr(0,12) == "geometrytype"){
[ + + ]
530 [ + - ]: 1 : std::istringstream szFormatString (szInputString);
531 [ + - ][ + - ]: 1 : szFormatString >> card >> m_szGeomType;
532 [ + - ][ - + ]: 3 : if( ((strcmp (m_szGeomType.c_str(), "hexagonal") != 0) &&
533 [ + - ][ + - ]: 2 : (strcmp (m_szGeomType.c_str(), "rectangular") != 0)) || szFormatString.fail())
[ - + ]
534 [ # # ]: 0 : IOErrorHandler(EGEOMTYPE);
535 : :
536 : : // set the number of sides in the geometry
537 [ + - ][ - + ]: 1 : if(m_szGeomType == "hexagonal")
538 : 0 : m_nSides = 6;
539 [ + - ][ + - ]: 1 : else if(m_szGeomType == "rectangular")
540 : 1 : m_nSides = 4;
541 : : }
542 [ + - ][ + - ]: 16 : else if (szInputString.substr(0,8) == "geometry"){
[ - + ]
543 [ # # ]: 0 : std::string outfile;
544 [ # # ]: 0 : std::istringstream szFormatString (szInputString);
545 [ # # ][ # # ]: 0 : szFormatString >> card >> outfile;
546 [ # # ][ # # ]: 0 : if(strcmp (outfile.c_str(), "surface") == 0 || szFormatString.fail())
[ # # ][ # # ]
547 : 0 : m_nPlanar=1;
548 : : }
549 [ + - ][ + - ]: 17 : if ((szInputString.substr(0,9) == "materials") && (szInputString.substr(0,19) != "materialset_startid")){
[ + + ][ + - ]
[ + - ][ + - ]
[ + + ][ + - ]
[ + + # #
# # ]
550 : :
551 [ + - ]: 1 : std::istringstream szFormatString (szInputString);
552 [ + - ][ + - ]: 1 : szFormatString >> card >> m_nAssemblyMat;
553 [ + - ][ - + ]: 1 : if(szFormatString.fail())
554 [ # # ]: 0 : IOErrorHandler(INVALIDINPUT);
555 [ + - ][ + - ]: 1 : m_szAssmMat.SetSize(m_nAssemblyMat); m_szAssmMatAlias.SetSize(m_nAssemblyMat);
556 [ + + ]: 4 : for (int j=1; j<=m_nAssemblyMat; j++){
557 [ + - ][ + - ]: 3 : szFormatString >> m_szAssmMat(j) >> m_szAssmMatAlias(j);
[ + - ][ + - ]
558 [ + - ]: 6 : if( (strcmp (m_szAssmMat(j).c_str(), "") == 0) ||
[ + - - + ]
[ - + ]
559 [ + - ]: 3 : (strcmp (m_szAssmMatAlias(j).c_str(), "") == 0)){
560 [ # # ]: 0 : IOErrorHandler(EMAT);
561 : : }
562 : : // checking if & inserted at the end of the material by mistake
563 [ + + ]: 3 : if (j == m_nAssemblyMat){
564 [ + - ]: 1 : std::string dummy = "";
565 [ + - ]: 1 : szFormatString >> dummy;
566 [ - + ]: 1 : if (strcmp (dummy.c_str(), "") != 0)
567 [ # # ]: 1 : IOErrorHandler(EMAT);
568 : : }
569 : 1 : }
570 : : }
571 [ + - ][ + - ]: 51 : if( (szInputString.substr(0,10) == "dimensions") ||
[ + - ][ + + ]
[ + - ]
[ + + # # ]
572 [ + - ][ + - ]: 34 : (szInputString.substr(0,4) == "duct") ){
[ + - ][ # # ]
573 : :
574 : 1 : ++m_nDuctNum;
575 [ + - ][ + - ]: 1 : std::cout << "getting assembly dimensions " << m_nDuctNum << std::endl;
[ + - ]
576 : :
577 [ + - ][ - + ]: 1 : if(m_szGeomType =="hexagonal"){
578 [ # # ]: 0 : std::istringstream szFormatString (szInputString);
579 : :
580 [ # # ]: 0 : if(m_nDuctNum == 1){
581 [ # # ][ # # ]: 0 : m_dMXYAssm.SetSize(m_nDuct, 2); m_dMZAssm.SetSize(m_nDuct, 2);
582 : : }
583 [ # # ][ # # ]: 0 : szFormatString >> card >> m_nDimensions
584 [ # # ][ # # ]: 0 : >> m_dMXYAssm(m_nDuctNum, 1) >> m_dMXYAssm(m_nDuctNum, 2)
[ # # ][ # # ]
585 [ # # ][ # # ]: 0 : >> m_dMZAssm(m_nDuctNum, 1) >> m_dMZAssm(m_nDuctNum, 2);
[ # # ][ # # ]
586 [ # # ]: 0 : if(m_nDuctNum == 1){
587 [ # # ][ # # ]: 0 : m_dMAssmPitch.SetSize(m_nDuct, m_nDimensions); m_szMMAlias.SetSize(m_nDuct, m_nDimensions);
588 : :
589 [ # # ]: 0 : assms.resize(m_nDimensions*m_nDuct); // setup while reading the problem size
590 : : }
591 : :
592 [ # # ]: 0 : for (int i=1; i<=m_nDimensions; i++){
593 [ # # ][ # # ]: 0 : szFormatString >> m_dMAssmPitch(m_nDuctNum, i);
594 [ # # ][ # # ]: 0 : if( m_dMAssmPitch(m_nDuctNum, i) < 0 )
595 [ # # ]: 0 : IOErrorHandler(ENEGATIVE);
596 : : }
597 : :
598 [ # # ]: 0 : for (int i=1; i<=m_nDimensions; i++){
599 [ # # ][ # # ]: 0 : szFormatString >> m_szMMAlias(m_nDuctNum, i);
600 [ # # ][ # # ]: 0 : if(strcmp (m_szMMAlias(m_nDuctNum, i).c_str(), "") == 0)
601 [ # # ]: 0 : IOErrorHandler(EALIAS);
602 : 0 : }
603 : : }
604 [ + - ][ + - ]: 1 : if(m_szGeomType =="rectangular"){
605 [ + - ]: 1 : std::istringstream szFormatString (szInputString);
606 [ + - ]: 1 : if(m_nDuctNum == 1){
607 [ + - ]: 1 : m_dMXYAssm.SetSize(m_nDuct, 2);
608 [ + - ]: 1 : m_dMZAssm.SetSize(m_nDuct, 2);
609 : : }
610 [ + - ][ + - ]: 1 : szFormatString >> card >> m_nDimensions
611 [ + - ][ + - ]: 2 : >> m_dMXYAssm(m_nDuctNum, 1) >> m_dMXYAssm(m_nDuctNum, 2)
[ + - ][ + - ]
612 [ + - ][ + - ]: 2 : >> m_dMZAssm(m_nDuctNum, 1) >> m_dMZAssm(m_nDuctNum, 2);
[ + - ][ + - ]
613 [ + - ][ - + ]: 1 : if (szFormatString.fail())
614 [ # # ]: 0 : IOErrorHandler(INVALIDINPUT);
615 [ + - ]: 1 : if(m_nDuctNum == 1){
616 [ + - ]: 1 : m_dMAssmPitchX.SetSize(m_nDuct, m_nDimensions);
617 [ + - ]: 1 : m_dMAssmPitchY.SetSize(m_nDuct, m_nDimensions);
618 [ + - ]: 1 : m_szMMAlias.SetSize(m_nDuct, m_nDimensions);
619 [ + - ]: 1 : assms.resize(m_nDimensions*m_nDuct);
620 : : }
621 [ + + ]: 3 : for (int i=1; i<=m_nDimensions; i++){
622 [ + - ][ + - ]: 2 : szFormatString >> m_dMAssmPitchX(m_nDuctNum, i) >> m_dMAssmPitchY(m_nDuctNum, i);
[ + - ][ + - ]
623 [ + - ][ + - ]: 2 : if( m_dMAssmPitchX(m_nDuctNum, i) < 0 || m_dMAssmPitchY(m_nDuctNum, i) < 0 || szFormatString.fail())
[ + - ][ + - ]
[ + - ][ - + ]
[ - + ]
624 [ # # ]: 0 : IOErrorHandler(ENEGATIVE);
625 : : }
626 : :
627 [ + + ]: 3 : for (int i=1; i<=m_nDimensions; i++){
628 [ + - ][ + - ]: 2 : szFormatString >> m_szMMAlias(m_nDuctNum, i);
629 [ + - ][ + - ]: 2 : if(strcmp (m_szMMAlias(m_nDuctNum, i).c_str(), "") == 0 || szFormatString.fail())
[ + - ][ - + ]
[ - + ]
630 [ # # ]: 0 : IOErrorHandler(EALIAS);
631 : 1 : }
632 : : }
633 : : }
634 [ + - ][ + - ]: 17 : if (szInputString.substr(0,8) == "pincells"){
[ + + ]
635 [ + - ]: 1 : std::istringstream szFormatString (szInputString);
636 : :
637 [ + - ][ + - ]: 1 : szFormatString >> card >> m_nPincells >> m_dPitch;
[ + - ]
638 [ - + ]: 1 : if(m_nPincells < 0)
639 [ # # ]: 0 : IOErrorHandler(ENEGATIVE);
640 : :
641 : : // this is an option if a user wants to specify pitch here
642 : 1 : double dTotalHeight = 0.0;
643 : :
644 : : //get the number of cylinder in each pincell
645 : 1 : int nTemp = 1;
646 [ + - ]: 1 : if(m_nDimensions > 0){
647 [ + - ][ + - ]: 1 : dTotalHeight = m_dMZAssm(nTemp, 2)-m_dMZAssm(nTemp, 1);
648 : : }
649 : : else{
650 : 0 : dTotalHeight = 0; // nothing specified only pincells in the model
651 : : }
652 : :
653 : : // loop thro' the pincells and read/store pincell data
654 [ + + ]: 2 : for (int i=1; i<=m_nPincells; i++){
655 : :
656 : : // set pitch if specified in pincell card
657 [ - + ]: 1 : if(m_dPitch > 0.0)
658 [ # # ][ # # ]: 0 : m_Pincell(i).SetPitch(m_dPitch, dTotalHeight);
659 : :
660 [ + - ]: 1 : ReadPinCellData( i);
661 [ + - ][ + - ]: 1 : std::cout << "\nread pincell " << i << std::endl;
[ + - ]
662 : 1 : }
663 : : }
664 : :
665 : : // 'yes' or 'no' for creating sidesets
666 [ + - ][ + - ]: 17 : if (szInputString.substr(0,13) == "createsideset"){
[ + + ]
667 [ + - ]: 1 : std::istringstream szFormatString (szInputString);
668 [ + - ][ + - ]: 1 : szFormatString >> card >> m_szSideset;
669 [ + - ][ + - ]: 1 : std::cout <<"--------------------------------------------------"<<std::endl;
670 : : }
671 : : // specify a merge tolerance value for cubit journal file
672 [ + - ][ + - ]: 17 : if (szInputString.substr(0,14) == "mergetolerance"){
[ + + ]
673 [ + - ]: 1 : std::istringstream szFormatString (szInputString);
674 [ + - ][ + - ]: 1 : szFormatString >> card >> m_dMergeTol;
675 [ + - ][ + - ]: 1 : std::cout <<"--------------------------------------------------"<<std::endl;
676 : : } // Handle mesh size inputs
677 [ + - ][ + - ]: 17 : if (szInputString.substr(0,14) == "radialmeshsize"){
[ + + ]
678 [ + - ]: 1 : std::istringstream szFormatString (szInputString);
679 [ + - ][ + - ]: 1 : szFormatString >> card >> m_dRadialSize;
680 [ + - ][ + - ]: 1 : if(m_dRadialSize < 0 || szFormatString.fail())
[ - + ][ - + ]
681 [ # # ]: 0 : IOErrorHandler(ENEGATIVE);
682 [ + - ][ + - ]: 1 : std::cout <<"--------------------------------------------------"<<std::endl;
683 : :
684 : : }
685 : : // Handle mesh size inputs
686 [ + - ][ + - ]: 17 : if (szInputString.substr(0,11) == "tetmeshsize"){
[ - + ]
687 [ # # ]: 0 : std::istringstream szFormatString (szInputString);
688 [ # # ][ # # ]: 0 : szFormatString >> card >> m_dTetMeshSize;
689 [ # # ][ # # ]: 0 : if(m_dTetMeshSize < 0 || szFormatString.fail())
[ # # ][ # # ]
690 [ # # ]: 0 : IOErrorHandler(ENEGATIVE);
691 [ # # ][ # # ]: 0 : std::cout <<"--------------------------------------------------"<<std::endl;
692 : :
693 : : }
694 : : // Handle mesh size inputs
695 [ + - ][ + - ]: 17 : if (szInputString.substr(0,13) == "axialmeshsize"){
[ + + ]
696 [ + - ]: 1 : std::istringstream szFormatString (szInputString);
697 [ + - ][ + - ]: 1 : szFormatString >> card >> m_dAxialSize;
698 [ + - ][ + - ]: 1 : if(m_dAxialSize < 0 || szFormatString.fail())
[ - + ][ - + ]
699 [ # # ]: 0 : IOErrorHandler(ENEGATIVE);
700 [ + - ][ + - ]: 1 : std::cout <<"--------------------------------------------------"<<std::endl;
701 : :
702 : : }
703 : : // Handle mesh size inputs
704 [ + - ][ + - ]: 17 : if (szInputString.substr(0,18) == "neumannset_startid"){
[ - + ]
705 [ # # ]: 0 : std::istringstream szFormatString (szInputString);
706 [ # # ][ # # ]: 0 : szFormatString >> card >> m_nNeumannSetId;
707 [ # # ][ # # ]: 0 : if(m_nNeumannSetId < 0 || szFormatString.fail())
[ # # ][ # # ]
708 [ # # ]: 0 : IOErrorHandler(ENEGATIVE);
709 [ # # ][ # # ]: 0 : std::cout <<"--------------------------------------------------"<<std::endl;
710 : :
711 : : }
712 : : // Handle mesh size inputs
713 [ + - ][ + - ]: 17 : if (szInputString.substr(0,19) == "materialset_startid"){
[ - + ]
714 [ # # ]: 0 : std::istringstream szFormatString (szInputString);
715 [ # # ][ # # ]: 0 : szFormatString >> card >> m_nMaterialSetId;
716 [ # # ][ # # ]: 0 : if(m_nMaterialSetId < 0 || szFormatString.fail())
[ # # ][ # # ]
717 [ # # ]: 0 : IOErrorHandler(ENEGATIVE);
718 [ # # ][ # # ]: 0 : std::cout <<"--------------------------------------------------"<<std::endl;
719 : :
720 : : }
721 [ + - ][ + - ]: 17 : if (szInputString.substr(0,3) == "end"){
[ + + ]
722 : :
723 : :
724 : : // if ( m_nJouFlag == 0){
725 : : // // impring merge before saving
726 : : // // Imprint_Merge();
727 : :
728 : : // // save .sat file
729 : : // IBERRCHK(igeom->save(m_szGeomFile.c_str()), *igeom);
730 : : // std::cout << "Normal Termination.\n"<< "Geometry file: " << m_szGeomFile << " saved." << std::endl;
731 : : // }
732 : 1 : break;
733 : : }
734 : 16 : }
735 : :
736 : : // Done reading now load file
737 : :
738 [ + - ][ + - ]: 2 : IBERRCHK(igeom->load(m_GeomFile.c_str()), *igeom);
739 : :
740 : 1 : }
741 : :
742 : : ///////////////////////////////////////////////////////////////////////////////////////////
743 : :
744 : 1 : void AssyMesher::ReadPinCellData ( int i)
745 : : //---------------------------------------------------------------------------
746 : : //Function: reading pincell i from file and storing the data
747 : : //Input: none
748 : : //Output: none
749 : : //---------------------------------------------------------------------------
750 : : {
751 [ + - ]: 1 : CParser Parse;
752 [ + - ][ + - ]: 2 : std::string card, szVolId, szVolAlias, szIFlag;
[ + - ][ + - ]
753 : 1 : int nInputLines, nMaterials, nCyl = 0, nRadii=0, nCellMat=0;
754 : 1 : double dLZ=0.0, dFlatF=0.0, dPX=0.0, dPY=0.0, dPZ=0.0;
755 [ + - ][ + - ]: 2 : CVector <std::string> szVMatName, szVMatAlias, szVCylMat, szVCellMat;
[ + - ][ + - ]
756 [ + - ][ + - ]: 2 : CVector<double> dVCoor(2), dVCylRadii, dVCylZPos, dZVStart, dZVEnd;
[ + - ][ + - ]
[ + - ]
757 : :
758 : : //loop over input lines
759 [ + - ][ + - ]: 1 : if (m_szGeomType == "rectangular"){
760 : :
761 [ + - ]: 1 : std::cout << "\ngetting volume id";
762 [ - + ]: 1 : if (!Parse.ReadNextLine (m_FileInput, m_nLineNumber, szInputString,
763 [ + - ]: 1 : MAXCHARS, szComment))
764 [ # # ]: 0 : IOErrorHandler (INVALIDINPUT);
765 [ + - ]: 1 : std::istringstream szFormatString (szInputString);
766 [ + - ][ + - ]: 1 : szFormatString >> szVolId >> szVolAlias >> nInputLines >> szIFlag;
[ + - ][ + - ]
767 : :
768 : : // error checking
769 [ + - - + ]: 2 : if( (strcmp (szVolAlias.c_str(), "") == 0) ||
[ - + ]
770 : 1 : (strcmp (szVolId.c_str(), "") == 0))
771 [ # # ]: 0 : IOErrorHandler(EPIN);
772 [ - + ]: 1 : if( nInputLines < 0 )
773 [ # # ]: 0 : IOErrorHandler(ENEGATIVE);
774 : :
775 [ + - ][ + - ]: 1 : m_Pincell(i).SetLineOne (szVolId, szVolAlias, nInputLines);
[ + - ][ + - ]
776 [ + - ][ - + ]: 1 : if(szIFlag == "intersect"){
777 [ # # ][ # # ]: 0 : m_Pincell(i).SetIntersectFlag(1);
778 : : }
779 : : else{
780 [ + - ][ + - ]: 1 : m_Pincell(i).SetIntersectFlag(0);
781 : : }
782 [ + + ]: 4 : for(int l=1; l<=nInputLines; l++){
783 [ - + ]: 3 : if (!Parse.ReadNextLine (m_FileInput, m_nLineNumber, szInputString,
784 [ + - ]: 3 : MAXCHARS, szComment))
785 [ # # ]: 0 : IOErrorHandler (INVALIDINPUT);
786 [ + - ][ + - ]: 3 : if (szInputString.substr(0,5) == "pitch"){
[ + + ]
787 : :
788 [ + - ]: 1 : std::istringstream szFormatString (szInputString);
789 [ + - ]: 1 : std::cout << "\ngetting pitch data";
790 [ + - ][ + - ]: 1 : szFormatString >> card >> dPX >> dPY >> dPZ;
[ + - ][ + - ]
791 : :
792 [ + - ][ + - ]: 1 : if( dPX < 0 || dPY < 0 || dPZ < 0 || szFormatString.fail())
[ + - ][ + - ]
[ - + ][ - + ]
793 [ # # ]: 0 : IOErrorHandler(ENEGATIVE);
794 [ + - ][ + - ]: 1 : m_Pincell(i).SetPitch (dPX, dPY, dPZ);
795 : : }
796 [ + - ][ + - ]: 3 : if (szInputString.substr(0,9) == "materials"){
[ - + ]
797 : :
798 [ # # ]: 0 : std::istringstream szFormatString (szInputString);
799 [ # # ][ # # ]: 0 : szFormatString >> card >> nMaterials;
800 [ # # ][ # # ]: 0 : if(szFormatString.fail())
801 [ # # ]: 0 : IOErrorHandler(INVALIDINPUT);
802 : :
803 : : //setting local arrays
804 [ # # ]: 0 : szVMatName.SetSize(nMaterials);
805 [ # # ]: 0 : szVMatAlias.SetSize(nMaterials);
806 : :
807 : : //set class variable sizes
808 [ # # ][ # # ]: 0 : m_Pincell(i).SetMatArray(nMaterials);
809 [ # # ]: 0 : std::cout << "\ngetting material data";
810 [ # # ]: 0 : for(int j=1; j<= nMaterials; j++){
811 [ # # ][ # # ]: 0 : szFormatString >> szVMatName(j) >> szVMatAlias(j);
[ # # ][ # # ]
812 [ # # ][ # # ]: 0 : if(szFormatString.fail())
813 [ # # ]: 0 : IOErrorHandler(INVALIDINPUT);
814 : : }
815 [ # # ][ # # ]: 0 : m_Pincell(i).SetMat(szVMatName, szVMatAlias);
[ # # ][ # # ]
816 : : }
817 [ + - ][ + - ]: 3 : if (szInputString.substr(0,8) == "cylinder"){
[ + + ]
818 : :
819 : 1 : ++nCyl;
820 [ + - ]: 1 : std::cout << "\ngetting cylinder data";
821 [ + - ]: 1 : std::istringstream szFormatString (szInputString);
822 [ + - ][ + - ]: 1 : szFormatString >> card >> nRadii >> dVCoor(1) >> dVCoor(2);
[ + - ][ + - ]
[ + - ][ + - ]
823 [ + - ][ - + ]: 1 : if(szFormatString.fail())
824 [ # # ]: 0 : IOErrorHandler(INVALIDINPUT);
825 [ + - ][ + - ]: 1 : m_Pincell(i).SetCylSizes(nCyl, nRadii);
826 [ + - ][ + - ]: 1 : m_Pincell(i).SetCylPos(nCyl, dVCoor);
[ + - ]
827 : :
828 : : //set local array
829 [ + - ]: 1 : dVCylRadii.SetSize(2*nRadii);
830 [ + - ]: 1 : szVCylMat.SetSize(nRadii);
831 [ + - ]: 1 : dVCylZPos.SetSize(2);
832 [ + - ][ + - ]: 1 : m_Pincell(i).SetCylSizes(nCyl, nRadii);
833 : :
834 : : // reading ZCoords
835 [ + + ]: 3 : for(int k=1; k<=2; k++){
836 [ + - ][ + - ]: 2 : szFormatString >> dVCylZPos(k);
837 [ + - ][ - + ]: 2 : if(szFormatString.fail())
838 [ # # ]: 0 : IOErrorHandler(INVALIDINPUT);
839 : : }
840 [ + - ][ + - ]: 1 : m_Pincell(i).SetCylZPos(nCyl, dVCylZPos);
[ + - ]
841 : :
842 : : // reading Radii
843 [ + + ]: 2 : for(int l=1; l<= nRadii; l++){
844 [ + - ][ + - ]: 1 : szFormatString >> dVCylRadii(l);
845 [ + - ][ + - ]: 1 : if( dVCylRadii(l) < 0 || szFormatString.fail())
[ + - ][ - + ]
[ - + ]
846 [ # # ]: 0 : IOErrorHandler(ENEGATIVE);
847 : : }
848 [ + - ][ + - ]: 1 : m_Pincell(i).SetCylRadii(nCyl, dVCylRadii);
[ + - ]
849 : :
850 : : // reading Material alias
851 [ + + ]: 2 : for(int m=1; m<= nRadii; m++){
852 [ + - ][ + - ]: 1 : szFormatString >> szVCylMat(m);
853 [ + - ][ + - ]: 1 : if(strcmp (szVCylMat(m).c_str(), "") == 0 || szFormatString.fail())
[ + - ][ - + ]
[ - + ]
854 [ # # ]: 0 : IOErrorHandler(EALIAS);
855 : : }
856 [ + - ][ + - ]: 1 : m_Pincell(i).SetCylMat(nCyl, szVCylMat);
[ + - ]
857 : : }
858 [ + - ][ + - ]: 3 : if (szInputString.substr(0,12) == "cellmaterial"){
[ - + ]
859 : :
860 [ # # ]: 0 : std::cout << "\ngetting cell material data\n";
861 [ # # ]: 0 : std::istringstream szFormatString (szInputString);
862 [ # # ]: 0 : szFormatString >> card;
863 : :
864 : : //set local arrays
865 [ # # ][ # # ]: 0 : m_Pincell(i).GetCellMatSize(nCellMat); // since size of cell material already set equal to number of cylinders
866 [ # # ]: 0 : dZVStart.SetSize(nCellMat);
867 [ # # ]: 0 : dZVEnd.SetSize(nCellMat);
868 [ # # ]: 0 : szVCellMat.SetSize(nCellMat);
869 : :
870 [ # # ]: 0 : for(int k=1; k<=nCellMat; k++){
871 [ # # ][ # # ]: 0 : szFormatString >> dZVStart(k)>> dZVEnd(k) >> szVCellMat(k);
[ # # ][ # # ]
[ # # ][ # # ]
872 [ # # ][ # # ]: 0 : if(strcmp (szVCellMat(k).c_str(), "") == 0 || szFormatString.fail())
[ # # ][ # # ]
[ # # ]
873 [ # # ]: 0 : IOErrorHandler(EALIAS);
874 : : }
875 [ # # ][ # # ]: 0 : m_Pincell(i).SetCellMat(dZVStart, dZVEnd, szVCellMat);
[ # # ][ # # ]
[ # # ]
876 : : }
877 : 1 : }
878 : : }//if rectangular ends
879 : :
880 [ + - ][ - + ]: 1 : if (m_szGeomType == "hexagonal"){
881 : :
882 [ # # ]: 0 : std::cout << "\ngetting volume id";
883 [ # # ]: 0 : if (!Parse.ReadNextLine (m_FileInput, m_nLineNumber, szInputString,
884 [ # # ]: 0 : MAXCHARS, szComment))
885 [ # # ]: 0 : IOErrorHandler (INVALIDINPUT);
886 [ # # ]: 0 : std::istringstream szFormatString (szInputString);
887 [ # # ][ # # ]: 0 : szFormatString >> szVolId >> szVolAlias >> nInputLines >> szIFlag;
[ # # ][ # # ]
888 : :
889 : : // error checking
890 [ # # # # ]: 0 : if( (strcmp (szVolAlias.c_str(), "") == 0) ||
[ # # ]
891 : 0 : (strcmp (szVolId.c_str(), "") == 0))
892 [ # # ]: 0 : IOErrorHandler(EPIN);
893 [ # # ]: 0 : if( nInputLines < 0 )
894 [ # # ]: 0 : IOErrorHandler(ENEGATIVE);
895 : :
896 [ # # ][ # # ]: 0 : m_Pincell(i).SetLineOne (szVolId, szVolAlias, nInputLines);
[ # # ][ # # ]
897 [ # # ][ # # ]: 0 : if(szIFlag == "intersect"){
898 [ # # ][ # # ]: 0 : m_Pincell(i).SetIntersectFlag(1);
899 : : }
900 : : else{
901 [ # # ][ # # ]: 0 : m_Pincell(i).SetIntersectFlag(0);
902 : : }
903 [ # # ]: 0 : for(int l=1; l<=nInputLines; l++){
904 [ # # ]: 0 : if (!Parse.ReadNextLine (m_FileInput, m_nLineNumber, szInputString,
905 [ # # ]: 0 : MAXCHARS, szComment))
906 [ # # ]: 0 : IOErrorHandler (INVALIDINPUT);
907 [ # # ][ # # ]: 0 : if (szInputString.substr(0,5) == "pitch"){
[ # # ]
908 : :
909 [ # # ]: 0 : std::istringstream szFormatString (szInputString);
910 [ # # ]: 0 : std::cout << "\ngetting pitch data";
911 [ # # ][ # # ]: 0 : szFormatString >> card >> dFlatF >> dLZ;
[ # # ]
912 [ # # ][ # # ]: 0 : if( dFlatF < 0 || dLZ < 0 || szFormatString.fail())
[ # # ][ # # ]
[ # # ]
913 [ # # ]: 0 : IOErrorHandler(ENEGATIVE);
914 [ # # ][ # # ]: 0 : m_Pincell(i).SetPitch (dFlatF, dLZ);
915 : : }
916 [ # # ][ # # ]: 0 : if (szInputString.substr(0,9) == "materials"){
[ # # ]
917 : :
918 [ # # ]: 0 : std::istringstream szFormatString (szInputString);
919 [ # # ][ # # ]: 0 : szFormatString >> card >> nMaterials;
920 [ # # ][ # # ]: 0 : if(szFormatString.fail())
921 [ # # ]: 0 : IOErrorHandler(INVALIDINPUT);
922 : : //setting local arrays
923 [ # # ]: 0 : szVMatName.SetSize(nMaterials);
924 [ # # ]: 0 : szVMatAlias.SetSize(nMaterials);
925 : :
926 : : //set class variable sizes
927 [ # # ][ # # ]: 0 : m_Pincell(i).SetMatArray(nMaterials);
928 [ # # ]: 0 : std::cout << "\ngetting material data";
929 [ # # ]: 0 : for(int j=1; j<= nMaterials; j++){
930 [ # # ][ # # ]: 0 : szFormatString >> szVMatName(j) >> szVMatAlias(j);
[ # # ][ # # ]
931 [ # # ][ # # ]: 0 : if(szFormatString.fail())
932 [ # # ]: 0 : IOErrorHandler(INVALIDINPUT);
933 : : }
934 [ # # ][ # # ]: 0 : m_Pincell(i).SetMat(szVMatName, szVMatAlias);
[ # # ][ # # ]
935 : : }
936 [ # # ][ # # ]: 0 : if (szInputString.substr(0,8) == "cylinder"){
[ # # ]
937 : :
938 : 0 : ++nCyl;
939 [ # # ]: 0 : std::cout << "\ngetting cylinder data";
940 [ # # ]: 0 : std::istringstream szFormatString (szInputString);
941 [ # # ][ # # ]: 0 : szFormatString >> card >> nRadii >> dVCoor(1) >> dVCoor(2);
[ # # ][ # # ]
[ # # ][ # # ]
942 [ # # ][ # # ]: 0 : if(szFormatString.fail())
943 [ # # ]: 0 : IOErrorHandler(INVALIDINPUT);
944 [ # # ][ # # ]: 0 : m_Pincell(i).SetCylSizes(nCyl, nRadii);
945 [ # # ][ # # ]: 0 : m_Pincell(i).SetCylPos(nCyl, dVCoor);
[ # # ]
946 : :
947 : : //set local array
948 [ # # ]: 0 : dVCylRadii.SetSize(nRadii);
949 [ # # ]: 0 : szVCylMat.SetSize(nRadii);
950 [ # # ]: 0 : dVCylZPos.SetSize(2);
951 : : //
952 [ # # ][ # # ]: 0 : m_Pincell(i).SetCylSizes(nCyl, nRadii);
953 : :
954 : : // reading ZCoords - max and min 2 always
955 [ # # ]: 0 : for(int k=1; k<=2; k++)
956 [ # # ][ # # ]: 0 : szFormatString >> dVCylZPos(k);
957 [ # # ][ # # ]: 0 : m_Pincell(i).SetCylZPos(nCyl, dVCylZPos);
[ # # ]
958 : :
959 : : // reading Radii
960 [ # # ]: 0 : for(int l=1; l<= nRadii; l++){
961 [ # # ][ # # ]: 0 : szFormatString >> dVCylRadii(l);
962 [ # # ][ # # ]: 0 : if( dVCylRadii(l) < 0 || szFormatString.fail())
[ # # ][ # # ]
[ # # ]
963 [ # # ]: 0 : IOErrorHandler(ENEGATIVE);
964 : : }
965 [ # # ][ # # ]: 0 : m_Pincell(i).SetCylRadii(nCyl, dVCylRadii);
[ # # ]
966 : :
967 : : // reading Material alias
968 [ # # ]: 0 : for(int m=1; m<= nRadii; m++){
969 [ # # ][ # # ]: 0 : szFormatString >> szVCylMat(m);
970 [ # # ][ # # ]: 0 : if(strcmp (szVCylMat(m).c_str(), "") == 0 || szFormatString.fail())
[ # # ][ # # ]
[ # # ]
971 [ # # ]: 0 : IOErrorHandler(EALIAS);
972 : : }
973 : :
974 [ # # ][ # # ]: 0 : m_Pincell(i).SetCylMat(nCyl, szVCylMat);
[ # # ]
975 : : }
976 [ # # ][ # # ]: 0 : if (szInputString.substr(0,12) == "cellmaterial"){
[ # # ]
977 : :
978 [ # # ]: 0 : std::cout << "\ngetting cell material data";
979 [ # # ]: 0 : std::istringstream szFormatString (szInputString);
980 [ # # ]: 0 : szFormatString >> card;
981 : :
982 : : //set local arrays
983 [ # # ][ # # ]: 0 : m_Pincell(i).GetCellMatSize(nCellMat); // since size of cell material already set equal to number of cylinders
984 [ # # ]: 0 : dZVStart.SetSize(nCellMat);
985 [ # # ]: 0 : dZVEnd.SetSize(nCellMat);
986 [ # # ]: 0 : szVCellMat.SetSize(nCellMat);
987 : :
988 [ # # ]: 0 : for(int k=1; k<=nCellMat; k++){
989 [ # # ][ # # ]: 0 : szFormatString >> dZVStart(k)>> dZVEnd(k) >> szVCellMat(k);
[ # # ][ # # ]
[ # # ][ # # ]
990 [ # # ][ # # ]: 0 : if(strcmp (szVCellMat(k).c_str(), "") == 0 || szFormatString.fail())
[ # # ][ # # ]
[ # # ]
991 [ # # ]: 0 : IOErrorHandler(EALIAS);
992 : : }
993 [ # # ][ # # ]: 0 : m_Pincell(i).SetCellMat(dZVStart, dZVEnd, szVCellMat);
[ # # ][ # # ]
[ # # ]
994 : : }
995 : 0 : }
996 : 1 : }// if hexagonal end
997 : :
998 : 1 : }
999 : :
1000 : :
1001 : 0 : void AssyMesher::IOErrorHandler (ErrorStates ECode) const
1002 : : // ---------------------------------------------------------------------------
1003 : : //! Function: Displays error messages related to input data \n
1004 : : //! Input: Error code \n
1005 : : //! Output: none \n
1006 : : // ---------------------------------------------------------------------------
1007 : : {
1008 : 0 : std::cerr << '\n';
1009 : :
1010 [ # # ]: 0 : if (ECode == PINCELLS) // invalid number of pincells
1011 : 0 : std::cerr << "Number of pincells must be >= 0.";
1012 [ # # ]: 0 : else if (ECode == INVALIDINPUT) // invalid input
1013 : 0 : std::cerr << "Invalid input.";
1014 [ # # ]: 0 : else if (ECode == EMAT) // invalid input
1015 : 0 : std::cerr << "Invalid Material Data.";
1016 [ # # ]: 0 : else if (ECode == EGEOMTYPE) // invalid input
1017 : 0 : std::cerr << "Invalid GeomType Data.";
1018 [ # # ]: 0 : else if (ECode == EGEOMENGINE) // invalid input
1019 : 0 : std::cerr << "Invalid Geometry Engine.";
1020 [ # # ]: 0 : else if (ECode == EALIAS) // invalid input
1021 : 0 : std::cerr << "Error Reading Aliases.";
1022 [ # # ]: 0 : else if (ECode == ENEGATIVE) // invalid input
1023 : 0 : std::cerr << "Unexpected negative value.";
1024 [ # # ]: 0 : else if (ECode == EPIN) // invalid input
1025 : 0 : std::cerr << "Invalid pinCell specs.";
1026 : : else
1027 : 0 : std::cerr << "Unknown error ...?";
1028 : :
1029 : 0 : std::cerr << '\n' << "Error in input file line : " << m_nLineNumber;
1030 : 0 : std::cerr << std::endl;
1031 : 0 : exit (1);
1032 : : }
1033 : :
1034 : 1 : std::vector<iGeom::EntityHandle>* AssyMesher::selectByMaterialsAndNameSuffix(
1035 : : std::vector<iGeom::EntityHandle> const &geoEntVec,
1036 : : std::set<std::string> const &matFilter, const char* suffix) const
1037 : : {
1038 : : // get the name tag
1039 : : iGeom::TagHandle nameTag;
1040 : : int tagSize;
1041 [ + - ]: 1 : igeom->getTagHandle("NAME", nameTag);
1042 [ + - ]: 1 : igeom->getTagSizeBytes(nameTag, tagSize);
1043 : :
1044 : : // get the length of the suffix
1045 : 1 : int suffixLen = strlen(suffix);
1046 : :
1047 : : // allocate space to store the entity name retrieved from geometric entity
1048 [ + - ]: 1 : char* entName = new char[tagSize];
1049 : :
1050 : : // allocate the vector that will be recturned
1051 : : std::vector<iGeom::EntityHandle> *selectedEnts =
1052 [ + - ][ + - ]: 1 : new std::vector<iGeom::EntityHandle>;
1053 : :
1054 [ + + ]: 19 : for (unsigned int ei = 0; ei < geoEntVec.size(); ++ei)
1055 : : {
1056 : 18 : entName[0] = 0;
1057 [ + - ][ + - ]: 18 : igeom->getData(geoEntVec[ei], nameTag, entName);
1058 : : // TODO: error check for result == iBase_SUCCESS
1059 : : // it should always be true for current code of CGM
1060 : :
1061 : : // the suffix, if present, should end at the first @ character in the
1062 : : // name or at the end of the name if there are no @ characters
1063 : 18 : size_t enLen = strlen(entName);
1064 : 18 : char* endMatchChar = strchr(entName, '@');
1065 [ + + ]: 18 : if (endMatchChar == NULL)
1066 : : {
1067 : 15 : endMatchChar = &entName[enLen];
1068 : : }
1069 : :
1070 : : // if the suffix is present
1071 [ + - ][ + + ]: 18 : if ((endMatchChar - entName) > suffixLen &&
1072 : 18 : strncmp(endMatchChar - suffixLen, suffix, suffixLen) == 0)
1073 : : {
1074 : : // if the part of the name before the suffix is in the
1075 : : // set of acceptable materials
1076 [ + - ]: 4 : std::string matNameStr(entName, endMatchChar - suffixLen);
1077 [ + - ][ + - ]: 4 : if (matFilter.find(matNameStr) != matFilter.end())
[ + - ]
1078 : : {
1079 : : // add it to the vector
1080 [ + - ][ + - ]: 4 : selectedEnts->push_back(geoEntVec[ei]);
1081 : 4 : }
1082 : : }
1083 : : }
1084 : :
1085 : : // release the memory allocated for the entity name
1086 [ + - ]: 1 : delete[] entName;
1087 : :
1088 : 1 : return selectedEnts;
1089 : : }
1090 : :
1091 : 1 : void AssyMesher::createMaterialNeumannSets(std::set <std::string> const &matFilter){
1092 : : // Name by material names in AssyGen input file
1093 : :
1094 [ + - ]: 1 : std::set<std::string>::iterator it;
1095 : 1 : int matId = 1;
1096 : : moab::Tag geomTag, matTag, neuTag, nameTag;
1097 [ + - ]: 1 : mb->tag_get_handle( "MATERIAL_SET", matTag );
1098 : : //mb->tag_get_handle( "NAME", nameTag );
1099 : 1 : char dum_val[64] = {0};
1100 : : mb->tag_get_handle(NAME_TAG_NAME, NAME_TAG_SIZE, moab::MB_TYPE_OPAQUE,
1101 [ + - ]: 1 : nameTag, moab::MB_TAG_SPARSE | moab::MB_TAG_CREAT, dum_val);
1102 : :
1103 [ + - ][ + - ]: 4 : for(it = matFilter.begin(); it != matFilter.end(); ++it){
[ + + ]
1104 : :
1105 [ + - ][ + - ]: 3 : std::cout << *it << std::endl;
[ + - ]
1106 : : // std::string matName = *it;
1107 : :
1108 : : //create a material set with id=matId
1109 : : moab::EntityHandle jj; // material meshset
1110 [ + - ]: 3 : mb->create_meshset(moab::MESHSET_SET,jj);
1111 : :
1112 [ + - ]: 3 : mb->tag_set_data(matTag, &jj, 1, (void*)&matId);
1113 : : // mb->tag_set_data(nameTag, &jj, 1, (void*)matName.c_str());
1114 : : //TODO:
1115 : : // if(matName == volumeName){
1116 : : // // Add the set to this material set
1117 : : // }
1118 : 3 : ++matId;
1119 : : }
1120 : :
1121 : 1 : }
1122 : :
1123 : 0 : void AssyMesher::createMaterialNeumannSets()
1124 : : {
1125 : : iRel::PairHandle * pair;
1126 : : mk_core()->irel_instance()->createPair (
1127 [ # # ][ # # ]: 0 : mk_core()->igeom_instance()->instance(), iRel::ENTITY, iRel::IGEOM_IFACE, iRel::ACTIVE,
[ # # ]
1128 [ # # ][ # # ]: 0 : mk_core()->imesh_instance()->instance(), iRel::SET, iRel::IMESH_IFACE, iRel::ACTIVE, pair);
[ # # ][ # # ]
[ # # ][ # # ]
1129 : :
1130 [ # # ][ # # ]: 0 : int ixrel = mk_core()->add_irel_pair(pair);
1131 : :
1132 : :
1133 : : moab::Tag geomTag, matTag, neuTag;
1134 [ # # ]: 0 : mb->tag_get_handle( "MATERIAL_SET", matTag );
1135 [ # # ]: 0 : mb->tag_get_handle( "NEUMANN_SET", neuTag );
1136 : :
1137 [ # # ][ # # ]: 0 : geomTag = mk_core()->moab_geom_dim_tag();
1138 [ # # ][ # # ]: 0 : moab::Range geom_sets[2];
[ # # ]
1139 : : moab::EntityHandle jj; // meshset
1140 : 0 : int ss = 0;
1141 : :
1142 : 0 : bool name_all_vol_surfs = true;
1143 [ # # ]: 0 : if(name_all_vol_surfs){
1144 [ # # ]: 0 : for(unsigned dim=2; dim<4; dim++) {
1145 : 0 : void *val[] = {&dim};
1146 : : mb->get_entities_by_type_and_tag(0,
1147 [ # # ]: 0 : moab::MBENTITYSET, &geomTag, val, 1, geom_sets[ss], moab::Interface::UNION);
1148 : 0 : int n_id = 1, m_id = 1;
1149 [ # # ][ # # ]: 0 : for(moab::Range::iterator i=geom_sets[ss].begin(); i!=geom_sets[ss].end(); i++)
[ # # ][ # # ]
[ # # ]
1150 : : {
1151 [ # # ]: 0 : mb->create_meshset(moab::MESHSET_SET,jj);
1152 [ # # ][ # # ]: 0 : mb->add_entities(jj, &(*i), 1);
1153 [ # # ]: 0 : if (dim == 2){
1154 [ # # ]: 0 : mb->tag_set_data(neuTag, &jj, 1, (void*)&n_id);
1155 : 0 : n_id+=1;
1156 : : }
1157 : : else{
1158 [ # # ]: 0 : mb->tag_set_data(matTag, &jj, 1, (void*)&m_id);
1159 : 0 : m_id+=1;;
1160 : : }
1161 : : }
1162 : 0 : ss++;
1163 : : }
1164 [ # # # # ]: 0 : }
1165 : : // // get the name tag
1166 : : // iGeom::TagHandle nameTag;
1167 : : // //moab::Tag geomTag;
1168 : : // int tagSize;
1169 : : // int dim = 3;
1170 : : // void *val[] = {&dim};
1171 : : // igeom->getTagHandle("NAME", nameTag);
1172 : :
1173 : : // mb->get_entities_by_type_and_tag(0,
1174 : : // moab::MBENTITYSET, &geomTag, val, 1, geom_sets[0], moab::Interface::UNION);
1175 : : // std::cout << geom_sets[0].size() << std::endl;
1176 : : // char matname[64];
1177 : : // mb->tag_get_data(nameTag, &geom_sets[0].front(), 1, &matname);
1178 : : // std::cout << matname << std::endl;
1179 : :
1180 : :
1181 : :
1182 : : // moab::Range vol_sets, surf_sets;
1183 : : // int dim = 3;
1184 : : // void *val[] = {&dim};
1185 : : // mb->get_entities_by_type_and_tag(0,
1186 : : // moab::MBENTITYSET, &geomTag, val, 1, vol_sets, moab::Interface::UNION);
1187 : : // dim = 2;
1188 : : // void *val2[] = {&dim};
1189 : : // mb->get_entities_by_type_and_tag(0,
1190 : : // moab::MBENTITYSET, &geomTag, val2, 1, surf_sets, moab::Interface::UNION);
1191 : :
1192 : :
1193 : : //MBERRCHK(rval, mk_core()->moab_instance());
1194 : :
1195 : :
1196 : :
1197 : : // igeom->getTagSizeBytes(nameTag, tagSize);
1198 : :
1199 : :
1200 : :
1201 : :
1202 [ # # ]: 0 : }
1203 : :
1204 [ + - ][ + - ]: 156 : } // namespace MeshKit
|