int LoadSU2Mesh(char *FilNam, Mesh *Msh) { FILE *FilHdl=NULL; if ( (Msh == NULL) || (FilNam == NULL) ) { printf(" ## ERROR: LOADMESH: MESH/FILE NAME NOT ALLOCATED \n"); return 0; } if ( GetInputFileType (FilNam) != FILE_SU2 ) return 0; FilHdl = fopen (FilNam, "r"); if ( !FilHdl ) { fprintf(stderr, " -- Info : Tried to open %s. Failed.\n", FilNam ); return 0; } //printf(" %%%% %s OPENED (READ)\n",FilNam); strcpy(Msh->MshNam, FilNam); Msh->FilTyp = FILE_SU2; rewind(FilHdl); Msh->Dim = GetSU2KeywordValue (FilHdl, "NDIME="); rewind(FilHdl); if ( Msh->Dim != 2 && Msh->Dim != 3 ) { fprintf(stderr, " ## ERROR SU2: WRONG DIMENSION NUMBER FOR MESH FILE %s (DIM=%d).\n", FilNam, Msh->Dim); return 0; } //--- Read vertices LoadSU2Vertices (FilHdl, Msh); //--- Read Elements LoadSU2Elements(FilHdl, Msh); if ( FilHdl ) fclose(FilHdl); return 1; }
bool WebAppInputLine::OpenInputFile(FILE** ppFile, const PathName& fileName) { const char* lpszFileName = fileName.GetData(); #if defined(MIKTEX_WINDOWS) string utf8FileName; if (!Utils::IsUTF8(lpszFileName)) { LogWarn("converting ANSI file name"); utf8FileName = StringUtil::AnsiToUTF8(lpszFileName); LogWarn("conversion succeeded: " + utf8FileName); lpszFileName = utf8FileName.c_str(); } #endif shared_ptr<Session> session = GetSession(); if (pimpl->enablePipes && lpszFileName[0] == '|') { string command = lpszFileName + 1; Session::ExamineCommandLineResult examineResult; string examinedCommand; string toBeExecuted; tie(examineResult, examinedCommand, toBeExecuted) = session->ExamineCommandLine(command); if (examineResult == Session::ExamineCommandLineResult::SyntaxError) { LogError("command line syntax error: " + command); return false; } if (examineResult != Session::ExamineCommandLineResult::ProbablySafe && examineResult != Session::ExamineCommandLineResult::MaybeSafe) { LogError("command is unsafe: " + command); return false; } switch (pimpl->shellCommandMode) { case ShellCommandMode::Unrestricted: toBeExecuted = command; break; case ShellCommandMode::Forbidden: LogError("command not executed: " + command); return false; case ShellCommandMode::Query: // TODO case ShellCommandMode::Restricted: if (examineResult != Session::ExamineCommandLineResult::ProbablySafe) { LogError("command not allowed: " + command); return false; } break; default: MIKTEX_UNEXPECTED(); } LogInfo("executing input pipe: " + toBeExecuted); *ppFile = session->OpenFile(toBeExecuted, FileMode::Command, FileAccess::Read, false); pimpl->foundFile.Clear(); pimpl->foundFileFq.Clear(); } else { #if defined(WITH_OMEGA) PathName unmangled; if (AmI("omega")) { unmangled = UnmangleNameOfFile(lpszFileName); lpszFileName = unmangled.GetData(); } #endif if (!session->FindFile(lpszFileName, GetInputFileType(), pimpl->foundFile)) { return false; } pimpl->foundFileFq = pimpl->foundFile; pimpl->foundFileFq.MakeAbsolute(); #if 1 // 2015-01-15 if (pimpl->foundFile[0] == '.' && PathName::IsDirectoryDelimiter(pimpl->foundFile[1])) { PathName temp(pimpl->foundFile.GetData() + 2); pimpl->foundFile = temp; } #endif try { if (pimpl->foundFile.HasExtension(".gz")) { CommandLineBuilder cmd("zcat"); cmd.AppendArgument(pimpl->foundFile); *ppFile = session->OpenFile(cmd.ToString(), FileMode::Command, FileAccess::Read, false); } else if (pimpl->foundFile.HasExtension(".bz2")) { CommandLineBuilder cmd("bzcat"); cmd.AppendArgument(pimpl->foundFile); *ppFile = session->OpenFile(cmd.ToString(), FileMode::Command, FileAccess::Read, false); } else if (pimpl->foundFile.HasExtension(".xz") || pimpl->foundFile.HasExtension(".lzma")) { CommandLineBuilder cmd("xzcat"); cmd.AppendArgument(pimpl->foundFile); *ppFile = session->OpenFile(cmd.ToString(), FileMode::Command, FileAccess::Read, false); } else { *ppFile = session->OpenFile(pimpl->foundFile.GetData(), FileMode::Open, FileAccess::Read, false); } } #if defined(MIKTEX_WINDOWS) catch (const SharingViolationException &) { } #endif catch (const UnauthorizedAccessException &) { } catch (const FileNotFoundException &) { } } if (*ppFile == nullptr) { return false; } if (!AmI("xetex")) { auto openFileInfo = session->TryGetOpenFileInfo(*ppFile); if (openFileInfo.first && openFileInfo.second.mode != FileMode::Command) { int bom = CheckBom(*ppFile); switch (bom) { case Bom::UTF8: LogInfo("UTF8 BOM detected: " + openFileInfo.second.fileName); break; case Bom::UTF16be: LogInfo("UTF16be BOM detected: " + openFileInfo.second.fileName); break; case Bom::UTF16le: LogInfo("UTF16le BOM detected: " + openFileInfo.second.fileName); break; } } } pimpl->lastInputFileName = lpszFileName; return true; }
int AddSU2MeshSize(char *FilNam, int *SizMsh) { int i, NbrElt, iElt, typ, CptElt; int NbrTri, NbrTet, NbrHex, NbrPyr, NbrRec, NbrLin, NbrWed, NbrP2Tri, NbrP2Lin; int NbrMark, iMark; FILE *FilHdl = NULL; char str[1024]; for (i=0; i<GmfMaxSizMsh; i++) SizMsh[i] = 0; if ( GetInputFileType (FilNam) != FILE_SU2 ) { printf("NOT SU2, return\n"); return 0; } FilHdl = fopen (FilNam, "r"); if ( !FilHdl ) { fprintf(stderr, " -- Info : Tried to open %s. Failed.\n", FilNam ); return 0; } //--- Dim ? rewind(FilHdl); SizMsh[GmfDimension] = GetSU2KeywordValue (FilHdl, "NDIME="); //--- Elements? NbrTri = NbrTet = NbrHex = NbrPyr = NbrLin = NbrRec = NbrWed = NbrP2Tri = NbrP2Lin = 0; NbrElt = GetSU2KeywordValue (FilHdl, "NELEM="); for (iElt=0; iElt<NbrElt; iElt++) { fscanf(FilHdl, "%d", &typ); if ( typ == SU2_TRIANGLE ) { NbrTri++; } else if ( typ == SU2_TETRAHEDRAL ) { NbrTet++; } else if ( typ == SU2_HEXAHEDRAL ) { NbrHex++; } else if ( typ == SU2_PYRAMID ) { NbrPyr++; } else if ( typ == SU2_RECTANGLE ) { NbrRec++; } else if ( typ == SU2_WEDGE ) { NbrWed++; } else if ( typ == SU2_LINE ) { NbrLin++; } else if ( typ == SU2_TRIANGLEP2 ) { NbrP2Tri++; } else if ( typ == SU2_LINEP2 ) { NbrP2Lin++; } else { printf(" ## ERROR : AddSU2MeshSize: Unknown element type %d\n", typ); return 0; } fgets (str, sizeof str, FilHdl); }//for iElt rewind(FilHdl); SizMsh[GmfVertices] = GetSU2KeywordValue (FilHdl, "NPOIN="); //--- Boundary Elements? NbrMark = 0; rewind(FilHdl); NbrMark = GetSU2KeywordValue (FilHdl, "NMARK="); for (iMark=1; iMark<=NbrMark; iMark++) { GetSU2KeywordValueStr (FilHdl, "MARKER_TAG=", str); if ( !strcmp(str,"SEND_RECEIVE") ) { printf(" Tag %s was ignored.\n", str); continue; } CptElt = GetSU2KeywordValue (FilHdl, "MARKER_ELEMS="); for (iElt=0; iElt<CptElt; iElt++) { fscanf(FilHdl, "%d", &typ); if ( typ == SU2_TRIANGLE ) { NbrTri++; } else if ( typ == SU2_RECTANGLE ) { NbrRec++; } else if ( typ == SU2_LINE ) { NbrLin++; } else if ( typ == SU2_LINEP2 ) { NbrP2Lin++; } else { printf(" ## ERROR : AddSU2MeshSize : Unknown boundary element type %d\n", typ); return 0; } fgets (str, sizeof str, FilHdl); } } SizMsh[GmfTriangles] = NbrTri+NbrP2Tri; SizMsh[GmfTetrahedra] = NbrTet; SizMsh[GmfEdges] = NbrLin+NbrP2Lin; SizMsh[GmfPrisms] = NbrWed; SizMsh[GmfQuadrilaterals] = NbrRec; SizMsh[GmfPyramids] = NbrPyr; SizMsh[GmfHexahedra] = NbrHex; SizMsh[GmfTrianglesP2] = NbrP2Tri; SizMsh[GmfFileType] = FILE_SU2; SizMsh[GmfEdgesP2] = NbrP2Lin; if ( FilHdl ) fclose(FilHdl); return 1; }