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
00030
00031
00032
00033
00034
00035
00036 #ifndef CMGUIWRITER_HPP_
00037 #define CMGUIWRITER_HPP_
00038
00039 #include "AbstractTetrahedralMeshWriter.hpp"
00040 #include "OutputFileHandler.hpp"
00041
00045 static const char CmguiNodeFileHeader3D[] = " #Fields=1\n\
00046 1) coordinates, coordinate, rectangular cartesian, #Components=3\n\
00047 x. Value index= 1, #Derivatives= 0\n\
00048 y. Value index= 2, #Derivatives= 0\n\
00049 z. Value index= 3, #Derivatives= 0\n";
00050
00054 static const char CmguiNodeFileHeader2D[] = " #Fields=1\n\
00055 1) coordinates, coordinate, rectangular cartesian, #Components=2\n\
00056 x. Value index= 1, #Derivatives= 0\n\
00057 y. Value index= 2, #Derivatives= 0\n";
00058
00059
00063 static const char CmguiNodeFileHeader1D[] = " #Fields=1\n\
00064 1) coordinates, coordinate, rectangular cartesian, #Components=1\n\
00065 x. Value index= 1, #Derivatives= 0\n";
00066
00070 static const char CmguiElementFileHeader3D[] = "Shape. Dimension=3, simplex(2;3)*simplex*simplex\n\
00071 #Scale factor sets= 0\n\
00072 #Nodes= 4\n";
00073
00077 static const char CmguiElementFileHeader3DQuadratic[] = "Shape. Dimension=3, simplex(2;3)*simplex*simplex\n\
00078 #Scale factor sets= 0\n\
00079 #Nodes= 10\n";
00080
00081
00085 static const char CmguiElementFileHeader2D[] = "Shape. Dimension=2, simplex(2)*simplex\n\
00086 #Scale factor sets= 0\n\
00087 #Nodes= 3\n";
00088
00092 static const char CmguiElementFileHeader2DQuadratic[] = "Shape. Dimension=2, simplex(2)*simplex\n\
00093 #Scale factor sets= 0\n\
00094 #Nodes= 6\n";
00095
00099 static const char CmguiElementFileHeader1D[] = "Shape. Dimension=1, line\n\
00100 #Scale factor sets= 0\n\
00101 #Nodes= 2\n";
00102
00106 static const char CmguiElementFileHeader1DQuadratic[] = "Shape. Dimension=1, line\n\
00107 #Scale factor sets= 0\n\
00108 #Nodes= 3\n";
00109
00110
00114 static const char CmguiCoordinatesFileHeader3D[] = " 1) coordinates, coordinate, rectangular cartesian, #Components=3\n\
00115 x. l.simplex(2;3)*l.simplex*l.simplex, no modify, standard node based.\n\
00116 #Nodes= 4\n\
00117 1. #Values=1\n\
00118 Value indices: 1\n\
00119 Scale factor indices: 1\n\
00120 2. #Values=1\n\
00121 Value indices: 1\n\
00122 Scale factor indices: 2\n\
00123 3. #Values=1\n\
00124 Value indices: 1\n\
00125 Scale factor indices: 3\n\
00126 4. #Values=1\n\
00127 Value indices: 1\n\
00128 Scale factor indices: 4\n\
00129 y. l.simplex(2;3)*l.simplex*l.simplex, no modify, standard node based.\n\
00130 #Nodes= 4\n\
00131 1. #Values=1\n\
00132 Value indices: 1\n\
00133 Scale factor indices: 1\n\
00134 2. #Values=1\n\
00135 Value indices: 1\n\
00136 Scale factor indices: 2\n\
00137 3. #Values=1\n\
00138 Value indices: 1\n\
00139 Scale factor indices: 3\n\
00140 4. #Values=1\n\
00141 Value indices: 1\n\
00142 Scale factor indices: 4\n\
00143 z. l.simplex(2;3)*l.simplex*l.simplex, no modify, standard node based.\n\
00144 #Nodes= 4\n\
00145 1. #Values=1\n\
00146 Value indices: 1\n\
00147 Scale factor indices: 1\n\
00148 2. #Values=1\n\
00149 Value indices: 1\n\
00150 Scale factor indices: 2\n\
00151 3. #Values=1\n\
00152 Value indices: 1\n\
00153 Scale factor indices: 3\n\
00154 4. #Values=1\n\
00155 Value indices: 1\n\
00156 Scale factor indices: 4\n";
00157
00158
00162 static const char CmguiCoordinatesFileHeader3DQuadratic[] = " 1) coordinates, coordinate, rectangular cartesian, #Components=3\n\
00163 x. q.simplex(2;3)*q.simplex*q.simplex, no modify, standard node based.\n\
00164 #Nodes= 10\n\
00165 1. #Values=1\n\
00166 Value indices: 1\n\
00167 Scale factor indices: 1\n\
00168 2. #Values=1\n\
00169 Value indices: 1\n\
00170 Scale factor indices: 2\n\
00171 3. #Values=1\n\
00172 Value indices: 1\n\
00173 Scale factor indices: 3\n\
00174 4. #Values=1\n\
00175 Value indices: 1\n\
00176 Scale factor indices: 4\n\
00177 5. #Values=1\n\
00178 Value indices: 1\n\
00179 Scale factor indices: 5\n\
00180 6. #Values=1\n\
00181 Value indices: 1\n\
00182 Scale factor indices: 6\n\
00183 7. #Values=1\n\
00184 Value indices: 1\n\
00185 Scale factor indices: 7\n\
00186 8. #Values=1\n\
00187 Value indices: 1\n\
00188 Scale factor indices: 8\n\
00189 9. #Values=1\n\
00190 Value indices: 1\n\
00191 Scale factor indices: 9\n\
00192 10. #Values=1\n\
00193 Value indices: 1\n\
00194 Scale factor indices: 10\n\
00195 y. q.simplex(2;3)*q.simplex*q.simplex, no modify, standard node based.\n\
00196 #Nodes= 10\n\
00197 1. #Values=1\n\
00198 Value indices: 1\n\
00199 Scale factor indices: 1\n\
00200 2. #Values=1\n\
00201 Value indices: 1\n\
00202 Scale factor indices: 2\n\
00203 3. #Values=1\n\
00204 Value indices: 1\n\
00205 Scale factor indices: 3\n\
00206 4. #Values=1\n\
00207 Value indices: 1\n\
00208 Scale factor indices: 4\n\
00209 5. #Values=1\n\
00210 Value indices: 1\n\
00211 Scale factor indices: 5\n\
00212 6. #Values=1\n\
00213 Value indices: 1\n\
00214 Scale factor indices: 6\n\
00215 7. #Values=1\n\
00216 Value indices: 1\n\
00217 Scale factor indices: 7\n\
00218 8. #Values=1\n\
00219 Value indices: 1\n\
00220 Scale factor indices: 8\n\
00221 9. #Values=1\n\
00222 Value indices: 1\n\
00223 Scale factor indices: 9\n\
00224 10. #Values=1\n\
00225 Value indices: 1\n\
00226 Scale factor indices: 10\n\
00227 z. q.simplex(2;3)*q.simplex*q.simplex, no modify, standard node based.\n\
00228 #Nodes= 10\n\
00229 1. #Values=1\n\
00230 Value indices: 1\n\
00231 Scale factor indices: 1\n\
00232 2. #Values=1\n\
00233 Value indices: 1\n\
00234 Scale factor indices: 2\n\
00235 3. #Values=1\n\
00236 Value indices: 1\n\
00237 Scale factor indices: 3\n\
00238 4. #Values=1\n\
00239 Value indices: 1\n\
00240 Scale factor indices: 4\n\
00241 5. #Values=1\n\
00242 Value indices: 1\n\
00243 Scale factor indices: 5\n\
00244 6. #Values=1\n\
00245 Value indices: 1\n\
00246 Scale factor indices: 6\n\
00247 7. #Values=1\n\
00248 Value indices: 1\n\
00249 Scale factor indices: 7\n\
00250 8. #Values=1\n\
00251 Value indices: 1\n\
00252 Scale factor indices: 8\n\
00253 9. #Values=1\n\
00254 Value indices: 1\n\
00255 Scale factor indices: 9\n\
00256 10. #Values=1\n\
00257 Value indices: 1\n\
00258 Scale factor indices: 10\n";
00259
00260
00264 static const char CmguiCoordinatesFileHeader2D[] = " 1) coordinates, coordinate, rectangular cartesian, #Components=2\n\
00265 x. l.simplex(2)*l.simplex, no modify, standard node based.\n\
00266 #Nodes= 3\n\
00267 1. #Values=1\n\
00268 Value indices: 1\n\
00269 Scale factor indices: 1\n\
00270 2. #Values=1\n\
00271 Value indices: 1\n\
00272 Scale factor indices: 2\n\
00273 3. #Values=1\n\
00274 Value indices: 1\n\
00275 Scale factor indices: 3\n\
00276 y. l.simplex(2)*l.simplex, no modify, standard node based.\n\
00277 #Nodes= 3\n\
00278 1. #Values=1\n\
00279 Value indices: 1\n\
00280 Scale factor indices: 1\n\
00281 2. #Values=1\n\
00282 Value indices: 1\n\
00283 Scale factor indices: 2\n\
00284 3. #Values=1\n\
00285 Value indices: 1\n\
00286 Scale factor indices: 3\n";
00287
00288
00293 static const char CmguiCoordinatesFileHeader2DQuadratic[] = " 1) coordinates, coordinate, rectangular cartesian, #Components=2\n\
00294 x. q.simplex(2)*q.simplex, no modify, standard node based.\n\
00295 #Nodes= 6\n\
00296 1. #Values=1\n\
00297 Value indices: 1\n\
00298 Scale factor indices: 1\n\
00299 2. #Values=1\n\
00300 Value indices: 1\n\
00301 Scale factor indices: 2\n\
00302 3. #Values=1\n\
00303 Value indices: 1\n\
00304 Scale factor indices: 3\n\
00305 4. #Values=1\n\
00306 Value indices: 1\n\
00307 Scale factor indices: 4\n\
00308 5. #Values=1\n\
00309 Value indices: 1\n\
00310 Scale factor indices: 5\n\
00311 6. #Values=1\n\
00312 Value indices: 1\n\
00313 Scale factor indices: 6\n\
00314 y. q.simplex(2)*q.simplex, no modify, standard node based.\n\
00315 #Nodes= 6\n\
00316 1. #Values=1\n\
00317 Value indices: 1\n\
00318 Scale factor indices: 1\n\
00319 2. #Values=1\n\
00320 Value indices: 1\n\
00321 Scale factor indices: 2\n\
00322 3. #Values=1\n\
00323 Value indices: 1\n\
00324 Scale factor indices: 3\n\
00325 4. #Values=1\n\
00326 Value indices: 1\n\
00327 Scale factor indices: 4\n\
00328 5. #Values=1\n\
00329 Value indices: 1\n\
00330 Scale factor indices: 5\n\
00331 6. #Values=1\n\
00332 Value indices: 1\n\
00333 Scale factor indices: 6\n";
00334
00335
00336
00341 static const char CmguiCoordinatesFileHeader1D[] = " 1) coordinates, coordinate, rectangular cartesian, #Components=1\n\
00342 x. l.Lagrange, no modify, standard node based.\n\
00343 #Nodes= 2\n\
00344 1. #Values=1\n\
00345 Value indices: 1\n\
00346 Scale factor indices: 1\n\
00347 2. #Values=1\n\
00348 Value indices: 1\n\
00349 Scale factor indices: 2\n";
00350
00351
00356 static const char CmguiCoordinatesFileHeader1DQuadratic[] = " 1) coordinates, coordinate, rectangular cartesian, #Components=1\n\
00357 x. q.Lagrange, no modify, standard node based.\n\
00358 #Nodes= 3\n\
00359 1. #Values=1\n\
00360 Value indices: 1\n\
00361 Scale factor indices: 1\n\
00362 2. #Values=1\n\
00363 Value indices: 1\n\
00364 Scale factor indices: 2\n\
00365 3. #Values=1\n\
00366 Value indices: 1\n\
00367 Scale factor indices: 3\n";
00368
00373 static const char CmguiAdditionalFieldHeader3D[] = " field, rectangular cartesian, #Components=1\n\
00374 x. l.simplex(2;3)*l.simplex*l.simplex, no modify, standard node based.\n\
00375 #Nodes= 4\n\
00376 1. #Values=1\n\
00377 Value indices: 1\n\
00378 Scale factor indices: 1\n\
00379 2. #Values=1\n\
00380 Value indices: 1\n\
00381 Scale factor indices: 2\n\
00382 3. #Values=1\n\
00383 Value indices: 1\n\
00384 Scale factor indices: 3\n\
00385 4. #Values=1\n\
00386 Value indices: 1\n\
00387 Scale factor indices: 4\n";
00388
00389
00395 static const char CmguiAdditionalFieldHeader3DQuadratic[] = " field, rectangular cartesian, #Components=1\n\
00396 x. q.simplex(2;3)*q.simplex*q.simplex, no modify, standard node based.\n\
00397 #Nodes= 10\n\
00398 1. #Values=1\n\
00399 Value indices: 1\n\
00400 Scale factor indices: 1\n\
00401 2. #Values=1\n\
00402 Value indices: 1\n\
00403 Scale factor indices: 2\n\
00404 3. #Values=1\n\
00405 Value indices: 1\n\
00406 Scale factor indices: 3\n\
00407 4. #Values=1\n\
00408 Value indices: 1\n\
00409 Scale factor indices: 4\n\
00410 5. #Values=1\n\
00411 Value indices: 1\n\
00412 Scale factor indices: 5\n\
00413 6. #Values=1\n\
00414 Value indices: 1\n\
00415 Scale factor indices: 6\n\
00416 7. #Values=1\n\
00417 Value indices: 1\n\
00418 Scale factor indices: 7\n\
00419 8. #Values=1\n\
00420 Value indices: 1\n\
00421 Scale factor indices: 8\n\
00422 9. #Values=1\n\
00423 Value indices: 1\n\
00424 Scale factor indices: 9\n\
00425 10. #Values=1\n\
00426 Value indices: 1\n\
00427 Scale factor indices: 10\n";
00428
00433 static const char CmguiAdditionalFieldHeader2D[] = " field, rectangular cartesian, #Components=1\n\
00434 x. l.simplex(2)*l.simplex, no modify, standard node based.\n\
00435 #Nodes= 3\n\
00436 1. #Values=1\n\
00437 Value indices: 1\n\
00438 Scale factor indices: 1\n\
00439 2. #Values=1\n\
00440 Value indices: 1\n\
00441 Scale factor indices: 2\n\
00442 3. #Values=1\n\
00443 Value indices: 1\n\
00444 Scale factor indices: 3\n";
00445
00450 static const char CmguiAdditionalFieldHeader2DQuadratic[] = " field, rectangular cartesian, #Components=1\n\
00451 x. q.simplex(2)*q.simplex, no modify, standard node based.\n\
00452 #Nodes= 6\n\
00453 1. #Values=1\n\
00454 Value indices: 1\n\
00455 Scale factor indices: 1\n\
00456 2. #Values=1\n\
00457 Value indices: 1\n\
00458 Scale factor indices: 2\n\
00459 3. #Values=1\n\
00460 Value indices: 1\n\
00461 Scale factor indices: 3\n\
00462 4. #Values=1\n\
00463 Value indices: 1\n\
00464 Scale factor indices: 4\n\
00465 5. #Values=1\n\
00466 Value indices: 1\n\
00467 Scale factor indices: 5\n\
00468 6. #Values=1\n\
00469 Value indices: 1\n\
00470 Scale factor indices: 6\n";
00471
00472
00477 static const char CmguiAdditionalFieldHeader1D[] = " field, rectangular cartesian, #Components=1\n\
00478 x. l.Lagrange, no modify, standard node based.\n\
00479 #Nodes= 2\n\
00480 1. #Values=1\n\
00481 Value indices: 1\n\
00482 Scale factor indices: 1\n\
00483 2. #Values=1\n\
00484 Value indices: 1\n\
00485 Scale factor indices: 2\n";
00486
00491 static const char CmguiAdditionalFieldHeader1DQuadratic[] = " field, rectangular cartesian, #Components=1\n\
00492 x. q.Lagrange, no modify, standard node based.\n\
00493 #Nodes= 2\n\
00494 1. #Values=1\n\
00495 Value indices: 1\n\
00496 Scale factor indices: 1\n\
00497 2. #Values=1\n\
00498 Value indices: 1\n\
00499 Scale factor indices: 2\n\
00500 3. #Values=1\n\
00501 Value indices: 1\n\
00502 Scale factor indices: 3\n";
00503
00504
00516 template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
00517 class CmguiMeshWriter : public AbstractTetrahedralMeshWriter<ELEMENT_DIM,SPACE_DIM>
00518 {
00519 protected:
00520
00524 std::vector<std::string> mAdditionalFieldNames;
00525
00526
00531 std::vector<std::string> mRegionNames;
00532
00539 std::string mGroupName;
00540
00545 std::string mElementFileHeader;
00546
00552 std::string mCoordinatesFileHeader;
00553
00558 std::string mAdditionalFieldHeader;
00559
00564 unsigned mNumNodesPerElement;
00565
00569 std::vector<unsigned> mReordering;
00570
00576 std::ios_base::openmode GetOpenMode(bool append);
00577
00584 out_stream OpenNodeFile(bool append = false);
00585
00592 std::vector<boost::shared_ptr<std::ofstream> > OpenElementFiles(bool append = false);
00593
00600 void WriteNodeFileHeader(out_stream& rpNodeFile);
00601
00607 void WriteElementsFileHeader(std::vector<boost::shared_ptr<std::ofstream> >& rElemFiles);
00608
00609
00613 void CreateFilesWithHeaders();
00614
00618 void AppendLocalDataToFiles();
00619
00623 void WriteFilesFooter();
00624
00625 public:
00626
00634 CmguiMeshWriter(const std::string& rDirectory,
00635 const std::string& rBaseName,
00636 bool cleanDirectory=true);
00637
00641 void WriteFiles();
00642
00648 void SetAdditionalFieldNames(std::vector<std::string>& rFieldNames);
00649
00655 void SetRegionNames(std::vector<std::string>& rRegionNames);
00656
00660 virtual ~CmguiMeshWriter()
00661 {}
00662
00663
00664
00665
00666 };
00667
00668 #endif