00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #ifndef CMGUIWRITER_HPP_
00030 #define CMGUIWRITER_HPP_
00031
00032 #include "AbstractTetrahedralMeshWriter.hpp"
00033 #include "OutputFileHandler.hpp"
00034
00038 static const char CmguiNodeFileHeader3D[] = " #Fields=1\n\
00039 1) coordinates, coordinate, rectangular cartesian, #Components=3\n\
00040 x. Value index= 1, #Derivatives= 0\n\
00041 y. Value index= 2, #Derivatives= 0\n\
00042 z. Value index= 3, #Derivatives= 0\n";
00043
00047 static const char CmguiNodeFileHeader2D[] = " #Fields=1\n\
00048 1) coordinates, coordinate, rectangular cartesian, #Components=2\n\
00049 x. Value index= 1, #Derivatives= 0\n\
00050 y. Value index= 2, #Derivatives= 0\n";
00051
00052
00056 static const char CmguiNodeFileHeader1D[] = " #Fields=1\n\
00057 1) coordinates, coordinate, rectangular cartesian, #Components=1\n\
00058 x. Value index= 1, #Derivatives= 0\n";
00059
00063 static const char CmguiElementFileHeader3D[] = "Shape. Dimension=3, simplex(2;3)*simplex*simplex\n\
00064 #Scale factor sets= 0\n\
00065 #Nodes= 4\n";
00066
00070 static const char CmguiElementFileHeader3DQuadratic[] = "Shape. Dimension=3, simplex(2;3)*simplex*simplex\n\
00071 #Scale factor sets= 0\n\
00072 #Nodes= 10\n";
00073
00074
00078 static const char CmguiElementFileHeader2D[] = "Shape. Dimension=2, simplex(2)*simplex\n\
00079 #Scale factor sets= 0\n\
00080 #Nodes= 3\n";
00081
00085 static const char CmguiElementFileHeader2DQuadratic[] = "Shape. Dimension=2, simplex(2)*simplex\n\
00086 #Scale factor sets= 0\n\
00087 #Nodes= 6\n";
00088
00092 static const char CmguiElementFileHeader1D[] = "Shape. Dimension=1, line\n\
00093 #Scale factor sets= 0\n\
00094 #Nodes= 2\n";
00095
00099 static const char CmguiElementFileHeader1DQuadratic[] = "Shape. Dimension=1, line\n\
00100 #Scale factor sets= 0\n\
00101 #Nodes= 3\n";
00102
00103
00107 static const char CmguiCoordinatesFileHeader3D[] = " 1) coordinates, coordinate, rectangular cartesian, #Components=3\n\
00108 x. l.simplex(2;3)*l.simplex*l.simplex, no modify, standard node based.\n\
00109 #Nodes= 4\n\
00110 1. #Values=1\n\
00111 Value indices: 1\n\
00112 Scale factor indices: 1\n\
00113 2. #Values=1\n\
00114 Value indices: 1\n\
00115 Scale factor indices: 2\n\
00116 3. #Values=1\n\
00117 Value indices: 1\n\
00118 Scale factor indices: 3\n\
00119 4. #Values=1\n\
00120 Value indices: 1\n\
00121 Scale factor indices: 4\n\
00122 y. l.simplex(2;3)*l.simplex*l.simplex, no modify, standard node based.\n\
00123 #Nodes= 4\n\
00124 1. #Values=1\n\
00125 Value indices: 1\n\
00126 Scale factor indices: 1\n\
00127 2. #Values=1\n\
00128 Value indices: 1\n\
00129 Scale factor indices: 2\n\
00130 3. #Values=1\n\
00131 Value indices: 1\n\
00132 Scale factor indices: 3\n\
00133 4. #Values=1\n\
00134 Value indices: 1\n\
00135 Scale factor indices: 4\n\
00136 z. l.simplex(2;3)*l.simplex*l.simplex, no modify, standard node based.\n\
00137 #Nodes= 4\n\
00138 1. #Values=1\n\
00139 Value indices: 1\n\
00140 Scale factor indices: 1\n\
00141 2. #Values=1\n\
00142 Value indices: 1\n\
00143 Scale factor indices: 2\n\
00144 3. #Values=1\n\
00145 Value indices: 1\n\
00146 Scale factor indices: 3\n\
00147 4. #Values=1\n\
00148 Value indices: 1\n\
00149 Scale factor indices: 4\n";
00150
00151
00155 static const char CmguiCoordinatesFileHeader3DQuadratic[] = " 1) coordinates, coordinate, rectangular cartesian, #Components=3\n\
00156 x. q.simplex(2;3)*q.simplex*q.simplex, no modify, standard node based.\n\
00157 #Nodes= 10\n\
00158 1. #Values=1\n\
00159 Value indices: 1\n\
00160 Scale factor indices: 1\n\
00161 2. #Values=1\n\
00162 Value indices: 1\n\
00163 Scale factor indices: 2\n\
00164 3. #Values=1\n\
00165 Value indices: 1\n\
00166 Scale factor indices: 3\n\
00167 4. #Values=1\n\
00168 Value indices: 1\n\
00169 Scale factor indices: 4\n\
00170 5. #Values=1\n\
00171 Value indices: 1\n\
00172 Scale factor indices: 5\n\
00173 6. #Values=1\n\
00174 Value indices: 1\n\
00175 Scale factor indices: 6\n\
00176 7. #Values=1\n\
00177 Value indices: 1\n\
00178 Scale factor indices: 7\n\
00179 8. #Values=1\n\
00180 Value indices: 1\n\
00181 Scale factor indices: 8\n\
00182 9. #Values=1\n\
00183 Value indices: 1\n\
00184 Scale factor indices: 9\n\
00185 10. #Values=1\n\
00186 Value indices: 1\n\
00187 Scale factor indices: 10\n\
00188 y. q.simplex(2;3)*q.simplex*q.simplex, no modify, standard node based.\n\
00189 #Nodes= 10\n\
00190 1. #Values=1\n\
00191 Value indices: 1\n\
00192 Scale factor indices: 1\n\
00193 2. #Values=1\n\
00194 Value indices: 1\n\
00195 Scale factor indices: 2\n\
00196 3. #Values=1\n\
00197 Value indices: 1\n\
00198 Scale factor indices: 3\n\
00199 4. #Values=1\n\
00200 Value indices: 1\n\
00201 Scale factor indices: 4\n\
00202 5. #Values=1\n\
00203 Value indices: 1\n\
00204 Scale factor indices: 5\n\
00205 6. #Values=1\n\
00206 Value indices: 1\n\
00207 Scale factor indices: 6\n\
00208 7. #Values=1\n\
00209 Value indices: 1\n\
00210 Scale factor indices: 7\n\
00211 8. #Values=1\n\
00212 Value indices: 1\n\
00213 Scale factor indices: 8\n\
00214 9. #Values=1\n\
00215 Value indices: 1\n\
00216 Scale factor indices: 9\n\
00217 10. #Values=1\n\
00218 Value indices: 1\n\
00219 Scale factor indices: 10\n\
00220 z. q.simplex(2;3)*q.simplex*q.simplex, no modify, standard node based.\n\
00221 #Nodes= 10\n\
00222 1. #Values=1\n\
00223 Value indices: 1\n\
00224 Scale factor indices: 1\n\
00225 2. #Values=1\n\
00226 Value indices: 1\n\
00227 Scale factor indices: 2\n\
00228 3. #Values=1\n\
00229 Value indices: 1\n\
00230 Scale factor indices: 3\n\
00231 4. #Values=1\n\
00232 Value indices: 1\n\
00233 Scale factor indices: 4\n\
00234 5. #Values=1\n\
00235 Value indices: 1\n\
00236 Scale factor indices: 5\n\
00237 6. #Values=1\n\
00238 Value indices: 1\n\
00239 Scale factor indices: 6\n\
00240 7. #Values=1\n\
00241 Value indices: 1\n\
00242 Scale factor indices: 7\n\
00243 8. #Values=1\n\
00244 Value indices: 1\n\
00245 Scale factor indices: 8\n\
00246 9. #Values=1\n\
00247 Value indices: 1\n\
00248 Scale factor indices: 9\n\
00249 10. #Values=1\n\
00250 Value indices: 1\n\
00251 Scale factor indices: 10\n";
00252
00253
00257 static const char CmguiCoordinatesFileHeader2D[] = " 1) coordinates, coordinate, rectangular cartesian, #Components=2\n\
00258 x. l.simplex(2)*l.simplex, no modify, standard node based.\n\
00259 #Nodes= 3\n\
00260 1. #Values=1\n\
00261 Value indices: 1\n\
00262 Scale factor indices: 1\n\
00263 2. #Values=1\n\
00264 Value indices: 1\n\
00265 Scale factor indices: 2\n\
00266 3. #Values=1\n\
00267 Value indices: 1\n\
00268 Scale factor indices: 3\n\
00269 y. l.simplex(2)*l.simplex, no modify, standard node based.\n\
00270 #Nodes= 3\n\
00271 1. #Values=1\n\
00272 Value indices: 1\n\
00273 Scale factor indices: 1\n\
00274 2. #Values=1\n\
00275 Value indices: 1\n\
00276 Scale factor indices: 2\n\
00277 3. #Values=1\n\
00278 Value indices: 1\n\
00279 Scale factor indices: 3\n";
00280
00281
00286 static const char CmguiCoordinatesFileHeader2DQuadratic[] = " 1) coordinates, coordinate, rectangular cartesian, #Components=2\n\
00287 x. q.simplex(2)*q.simplex, no modify, standard node based.\n\
00288 #Nodes= 6\n\
00289 1. #Values=1\n\
00290 Value indices: 1\n\
00291 Scale factor indices: 1\n\
00292 2. #Values=1\n\
00293 Value indices: 1\n\
00294 Scale factor indices: 2\n\
00295 3. #Values=1\n\
00296 Value indices: 1\n\
00297 Scale factor indices: 3\n\
00298 4. #Values=1\n\
00299 Value indices: 1\n\
00300 Scale factor indices: 4\n\
00301 5. #Values=1\n\
00302 Value indices: 1\n\
00303 Scale factor indices: 5\n\
00304 6. #Values=1\n\
00305 Value indices: 1\n\
00306 Scale factor indices: 6\n\
00307 y. q.simplex(2)*q.simplex, no modify, standard node based.\n\
00308 #Nodes= 6\n\
00309 1. #Values=1\n\
00310 Value indices: 1\n\
00311 Scale factor indices: 1\n\
00312 2. #Values=1\n\
00313 Value indices: 1\n\
00314 Scale factor indices: 2\n\
00315 3. #Values=1\n\
00316 Value indices: 1\n\
00317 Scale factor indices: 3\n\
00318 4. #Values=1\n\
00319 Value indices: 1\n\
00320 Scale factor indices: 4\n\
00321 5. #Values=1\n\
00322 Value indices: 1\n\
00323 Scale factor indices: 5\n\
00324 6. #Values=1\n\
00325 Value indices: 1\n\
00326 Scale factor indices: 6\n";
00327
00328
00329
00334 static const char CmguiCoordinatesFileHeader1D[] = " 1) coordinates, coordinate, rectangular cartesian, #Components=1\n\
00335 x. l.Lagrange, no modify, standard node based.\n\
00336 #Nodes= 2\n\
00337 1. #Values=1\n\
00338 Value indices: 1\n\
00339 Scale factor indices: 1\n\
00340 2. #Values=1\n\
00341 Value indices: 1\n\
00342 Scale factor indices: 2\n";
00343
00344
00349 static const char CmguiCoordinatesFileHeader1DQuadratic[] = " 1) coordinates, coordinate, rectangular cartesian, #Components=1\n\
00350 x. q.Lagrange, no modify, standard node based.\n\
00351 #Nodes= 3\n\
00352 1. #Values=1\n\
00353 Value indices: 1\n\
00354 Scale factor indices: 1\n\
00355 2. #Values=1\n\
00356 Value indices: 1\n\
00357 Scale factor indices: 2\n\
00358 3. #Values=1\n\
00359 Value indices: 1\n\
00360 Scale factor indices: 3\n";
00361
00366 static const char CmguiAdditionalFieldHeader3D[] = " field, rectangular cartesian, #Components=1\n\
00367 x. l.simplex(2;3)*l.simplex*l.simplex, no modify, standard node based.\n\
00368 #Nodes= 4\n\
00369 1. #Values=1\n\
00370 Value indices: 1\n\
00371 Scale factor indices: 1\n\
00372 2. #Values=1\n\
00373 Value indices: 1\n\
00374 Scale factor indices: 2\n\
00375 3. #Values=1\n\
00376 Value indices: 1\n\
00377 Scale factor indices: 3\n\
00378 4. #Values=1\n\
00379 Value indices: 1\n\
00380 Scale factor indices: 4\n";
00381
00382
00388 static const char CmguiAdditionalFieldHeader3DQuadratic[] = " field, rectangular cartesian, #Components=1\n\
00389 x. q.simplex(2;3)*q.simplex*q.simplex, no modify, standard node based.\n\
00390 #Nodes= 10\n\
00391 1. #Values=1\n\
00392 Value indices: 1\n\
00393 Scale factor indices: 1\n\
00394 2. #Values=1\n\
00395 Value indices: 1\n\
00396 Scale factor indices: 2\n\
00397 3. #Values=1\n\
00398 Value indices: 1\n\
00399 Scale factor indices: 3\n\
00400 4. #Values=1\n\
00401 Value indices: 1\n\
00402 Scale factor indices: 4\n\
00403 5. #Values=1\n\
00404 Value indices: 1\n\
00405 Scale factor indices: 5\n\
00406 6. #Values=1\n\
00407 Value indices: 1\n\
00408 Scale factor indices: 6\n\
00409 7. #Values=1\n\
00410 Value indices: 1\n\
00411 Scale factor indices: 7\n\
00412 8. #Values=1\n\
00413 Value indices: 1\n\
00414 Scale factor indices: 8\n\
00415 9. #Values=1\n\
00416 Value indices: 1\n\
00417 Scale factor indices: 9\n\
00418 10. #Values=1\n\
00419 Value indices: 1\n\
00420 Scale factor indices: 10\n";
00421
00426 static const char CmguiAdditionalFieldHeader2D[] = " field, rectangular cartesian, #Components=1\n\
00427 x. l.simplex(2)*l.simplex, no modify, standard node based.\n\
00428 #Nodes= 3\n\
00429 1. #Values=1\n\
00430 Value indices: 1\n\
00431 Scale factor indices: 1\n\
00432 2. #Values=1\n\
00433 Value indices: 1\n\
00434 Scale factor indices: 2\n\
00435 3. #Values=1\n\
00436 Value indices: 1\n\
00437 Scale factor indices: 3\n";
00438
00443 static const char CmguiAdditionalFieldHeader2DQuadratic[] = " field, rectangular cartesian, #Components=1\n\
00444 x. q.simplex(2)*q.simplex, no modify, standard node based.\n\
00445 #Nodes= 6\n\
00446 1. #Values=1\n\
00447 Value indices: 1\n\
00448 Scale factor indices: 1\n\
00449 2. #Values=1\n\
00450 Value indices: 1\n\
00451 Scale factor indices: 2\n\
00452 3. #Values=1\n\
00453 Value indices: 1\n\
00454 Scale factor indices: 3\n\
00455 4. #Values=1\n\
00456 Value indices: 1\n\
00457 Scale factor indices: 4\n\
00458 5. #Values=1\n\
00459 Value indices: 1\n\
00460 Scale factor indices: 5\n\
00461 6. #Values=1\n\
00462 Value indices: 1\n\
00463 Scale factor indices: 6\n";
00464
00465
00470 static const char CmguiAdditionalFieldHeader1D[] = " field, rectangular cartesian, #Components=1\n\
00471 x. l.Lagrange, no modify, standard node based.\n\
00472 #Nodes= 2\n\
00473 1. #Values=1\n\
00474 Value indices: 1\n\
00475 Scale factor indices: 1\n\
00476 2. #Values=1\n\
00477 Value indices: 1\n\
00478 Scale factor indices: 2\n";
00479
00484 static const char CmguiAdditionalFieldHeader1DQuadratic[] = " field, rectangular cartesian, #Components=1\n\
00485 x. q.Lagrange, no modify, standard node based.\n\
00486 #Nodes= 2\n\
00487 1. #Values=1\n\
00488 Value indices: 1\n\
00489 Scale factor indices: 1\n\
00490 2. #Values=1\n\
00491 Value indices: 1\n\
00492 Scale factor indices: 2\n\
00493 3. #Values=1\n\
00494 Value indices: 1\n\
00495 Scale factor indices: 3\n";
00496
00497
00509 template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
00510 class CmguiMeshWriter : public AbstractTetrahedralMeshWriter<ELEMENT_DIM,SPACE_DIM>
00511 {
00512 protected:
00513
00517 std::vector<std::string> mAdditionalFieldNames;
00518
00519
00524 std::vector<std::string> mRegionNames;
00525
00532 std::string mGroupName;
00533
00538 std::string mElementFileHeader;
00539
00545 std::string mCoordinatesFileHeader;
00546
00551 std::string mAdditionalFieldHeader;
00552
00557 unsigned mNumNodesPerElement;
00558
00562 std::vector<unsigned> mReordering;
00563
00569 std::ios_base::openmode GetOpenMode(bool append);
00570
00576 out_stream OpenNodeFile(bool append = false);
00577
00583 std::vector<boost::shared_ptr<std::ofstream> > OpenElementFiles(bool append = false);
00584
00591 void WriteNodeFileHeader(out_stream& rpNodeFile);
00592
00598 void WriteElementsFileHeader(std::vector<boost::shared_ptr<std::ofstream> >& rElemFiles);
00599
00600
00604 void CreateFilesWithHeaders();
00605
00609 void AppendLocalDataToFiles();
00610
00614 void WriteFilesFooter();
00615
00616 public:
00617
00625 CmguiMeshWriter(const std::string& rDirectory,
00626 const std::string& rBaseName,
00627 bool cleanDirectory=true);
00628
00632 void WriteFiles();
00633
00639 void SetAdditionalFieldNames(std::vector<std::string>& rFieldNames);
00640
00646 void SetRegionNames(std::vector<std::string>& rRegionNames);
00647
00651 virtual ~CmguiMeshWriter()
00652 {}
00653
00662 static bool CompareCmguiFiles(std::string& rPath1, std::string& rPath2);
00663 };
00664
00665 #endif