49{
   52 
   53    if (argc != 2)
   54    {
   55        fprintf(stderr, "Usage: CheckXmlFile  meshfile.xml\n");
   56        exit(1);
   57    }
   58 
   60        LibUtilities::SessionReader::CreateInstance(argc, argv);
   61 
   62    
   63    
   64    string meshfile(argv[argc - 1]);
   66        SpatialDomains::MeshGraph::Read(vSession);
   67    
   68 
   69    
   70    
   71    int expdim = mesh->GetMeshDimension();
   72 
   73    switch (expdim)
   74    {
   75        case 1:
   77            break;
   78        case 2:
   79        {
   81            string outname(strtok(argv[argc - 1], "."));
   82            outname += ".dat";
   83            FILE *fp = fopen(outname.c_str(), "w");
   84 
   87 
   88            int nverts = mesh->GetNvertices();
   89 
   91 
   92            for (int i = 0; i < nverts; ++i)
   93            {
   94                mesh->GetVertex(i)->GetCoords(x, y, 
z);
 
   95                xc[i] = x;
   96                yc[i] = y;
   98            }
   99 
  100            std::map<int, SpatialDomains::TriGeomSharedPtr>::iterator triIter;
  101            for (triIter = trigeom.begin(); triIter != trigeom.end(); ++triIter)
  102            {
  103                fprintf(fp, "%d %d %d %d\n", (triIter->second)->GetVid(0) + 1,
  104                        (triIter->second)->GetVid(1) + 1,
  105                        (triIter->second)->GetVid(2) + 1,
  106                        (triIter->second)->GetVid(2) + 1);
  107            }
  108 
  109            std::map<int, SpatialDomains::QuadGeomSharedPtr>::iterator quadIter;
  110            for (quadIter = quadgeom.begin(); quadIter != quadgeom.end();
  111                 ++quadIter)
  112            {
  113                fprintf(fp, "%d %d %d %d\n", (quadIter->second)->GetVid(0) + 1,
  114                        (quadIter->second)->GetVid(1) + 1,
  115                        (quadIter->second)->GetVid(2) + 1,
  116                        (quadIter->second)->GetVid(3) + 1);
  117            }
  118        }
  119        break;
  120        case 3:
  121        {
  123            string outname(strtok(argv[argc - 1], "."));
  124            outname += ".dat";
  125 
  130 
  131            int nverts = mesh->GetNvertices();
  132 
  134 
  135            for (int i = 0; i < nverts; ++i)
  136            {
  137                
  138                mesh->GetVertex(i)->GetCoords(x, y, 
z);
 
  139                xc[i] = x;
  140                yc[i] = y;
  142            }
  143 
  144            for (int i = 0; i < nverts; ++i)
  145            {
  146                for (int j = i + 1; j < nverts; ++j)
  147                {
  148                    if ((xc[i] - xc[j]) * (xc[i] - xc[j]) +
  149                            (yc[i] - yc[j]) * (yc[i] - yc[j]) +
  150                            (zc[i] - zc[j]) * (zc[i] - zc[j]) <
  151                        1e-10)
  152                    {
  153                        cout << "Duplicate vertices: " << i << " " << j << endl;
  154                    }
  155                }
  156            }
  157 
  158            std::map<int, SpatialDomains::TetGeomSharedPtr>::iterator tetIter;
  159            int cnt                  = 0;
  160            bool NoRotateIssues      = true;
  161            bool NoOrientationIssues = true;
  162            for (tetIter = tetgeom.begin(); tetIter != tetgeom.end(); ++tetIter)
  163            {
  164                
  165                NoOrientationIssues =
  167 
  168                
  169                if ((tetIter->second)->GetFace(0)->GetVid(2) !=
  170                    (tetIter->second)->GetVid(2))
  171                {
  172                    cout << "ERROR: Face " << tetIter->second->GetFid(0)
  173                         << " (vert "
  174                         << (tetIter->second)->GetFace(0)->GetVid(2)
  175                         << ") is not aligned with base vertex of Tet "
  176                         << (tetIter->second)->GetGlobalID() << " (vert "
  177                         << (tetIter->second)->GetVid(2) << ")" << endl;
  178                    NoRotateIssues = false;
  179                }
  180 
  181                for (int i = 1; i < 4; ++i)
  182 
  183                {
  184                    if ((tetIter->second)->GetFace(i)->GetVid(2) !=
  185                        (tetIter->second)->GetVid(3))
  186                    {
  187                        cout << "ERROR: Face " << tetIter->second->GetFid(i)
  188                             << " is not aligned with top Vertex of Tet "
  189                             << (tetIter->second)->GetGlobalID() << endl;
  190                        NoRotateIssues = false;
  191                    }
  192                }
  193            }
  194            if (NoOrientationIssues)
  195            {
  196                cout << "All Tet have correct ordering for anticlockwise "
  197                        "rotation"
  198                     << endl;
  199            }
  200 
  201            if (NoRotateIssues)
  202            {
  203                cout << "All Tet faces are correctly aligned" << endl;
  204            }
  205 
  206            std::map<int, SpatialDomains::PyrGeomSharedPtr>::iterator pyrIter;
  207            for (pyrIter = pyrgeom.begin(); pyrIter != pyrgeom.end(); ++pyrIter)
  208            {
  209                
  210            }
  211 
  212            
  213            std::map<int, SpatialDomains::PrismGeomSharedPtr>::iterator Iter;
  214            NoRotateIssues      = true;
  215            NoOrientationIssues = true;
  216            for (Iter = prismgeom.begin(); Iter != prismgeom.end(); ++Iter)
  217            {
  218 
  219                
  220                if ((Iter->second)->GetFace(1)->GetVid(2) !=
  221                    (Iter->second)->GetVid(4))
  222                {
  223                    cout << "ERROR: Face " << Iter->second->GetFid(1)
  224                         << " (vert " << (Iter->second)->GetFace(1)->GetVid(2)
  225                         << ") not aligned to face 1 singular vert of Prism "
  226                         << (Iter->second)->GetGlobalID() << " (vert "
  227                         << (Iter->second)->GetVid(4) << ")" << endl;
  228                    NoRotateIssues = false;
  229                }
  230 
  231                
  232                if ((Iter->second)->GetFace(3)->GetVid(2) !=
  233                    (Iter->second)->GetVid(5))
  234                {
  235                    cout << "ERROR: Face " << Iter->second->GetFid(3)
  236                         << " (vert " << (Iter->second)->GetFace(3)->GetVid(2)
  237                         << ") not aligned to face 3 singular vert of Prism "
  238                         << (Iter->second)->GetGlobalID() << " (vert "
  239                         << (Iter->second)->GetVid(5) << ")" << endl;
  240                    NoRotateIssues = false;
  241                }
  242            }
  243 
  244            if (NoRotateIssues)
  245            {
  246                cout << "All Prism Tri faces are correctly aligned" << endl;
  247            }
  248 
  249            std::map<int, SpatialDomains::HexGeomSharedPtr>::iterator hexIter;
  250            for (hexIter = hexgeom.begin(); hexIter != hexgeom.end(); ++hexIter)
  251            {
  252                
  253            }
  254        }
  255 
  256        break;
  257        default:
  258            ASSERTL0(
false, 
"Expansion dimension not recognised");
 
  259            break;
  260    }
  261 
  262    
  263 
  264    return 0;
  265}
bool CheckTetRotation(Array< OneD, NekDouble > &xc, Array< OneD, NekDouble > &yc, Array< OneD, NekDouble > &xz, std::map< int, SpatialDomains::TetGeomSharedPtr >::iterator &tetIter, int id)
 
#define ASSERTL0(condition, msg)
 
std::shared_ptr< SessionReader > SessionReaderSharedPtr
 
std::map< int, TriGeomSharedPtr > TriGeomMap
 
std::map< int, PyrGeomSharedPtr > PyrGeomMap
 
std::map< int, QuadGeomSharedPtr > QuadGeomMap
 
std::map< int, TetGeomSharedPtr > TetGeomMap
 
std::shared_ptr< MeshGraph > MeshGraphSharedPtr
 
std::map< int, PrismGeomSharedPtr > PrismGeomMap
 
std::map< int, HexGeomSharedPtr > HexGeomMap