Exemplo n.º 1
0
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;
}
Exemplo n.º 2
0
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;
}
Exemplo n.º 3
0
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;
}