Esempio n. 1
0
  int Ng_GetSurfaceList (ClientData clientData,
			 Tcl_Interp * interp,
			 int argc, tcl_const char *argv[])
  {
    CSGeometry * geometry = dynamic_cast<CSGeometry*> (ng_geometry.get());
    if (!geometry)
      {
	Tcl_SetResult (interp, err_needscsgeometry, TCL_STATIC);
	return TCL_ERROR;
      }


    tcl_const char * valuevar = argv[1];
    int i;

    stringstream vst;

    for (i = 1; i <= geometry->GetNSurf(); i++)
      {
	const Surface * surf = geometry->GetSurface(i);
	vst << surf->Name() << " ";
      }

    cout << "surfnames = " << vst.str() << endl;

    Tcl_SetVar  (interp, valuevar, (char*)vst.str().c_str(), 0);

    return TCL_OK;
  }
Esempio n. 2
0
  int Ng_CreatePrimitive (ClientData clientData,
			  Tcl_Interp * interp,
			  int argc, tcl_const char *argv[])
  {
    CSGeometry * geometry = dynamic_cast<CSGeometry*> (ng_geometry.Ptr());
    if (!geometry)
      {
	Tcl_SetResult (interp, err_needscsgeometry, TCL_STATIC);
	return TCL_ERROR;
      }


    tcl_const char * classname = argv[1];
    tcl_const char * name = argv[2];

    cout << "Create primitive, class = " << classname
	 << ", name = " << name << endl;

    Primitive * nprim = Primitive::CreatePrimitive (classname);
    Solid * nsol = new Solid (nprim);

    char sname[100];
    for (int j = 1; j <= nprim->GetNSurfaces(); j++)
      {
	sprintf (sname, "%s,%d", name, j);
	geometry -> AddSurface (sname, &nprim->GetSurface(j));
	nprim -> SetSurfaceId (j, geometry->GetNSurf());
      }

    geometry->SetSolid (name, nsol);

    return TCL_OK;
  }
Esempio n. 3
0
  void SaveVolumeMesh (const Mesh & mesh, 
		       const CSGeometry & geometry,
		       char * filename)
  {
    INDEX i;

    ofstream outfile(filename);
    outfile << "volumemesh" << endl;

    outfile << mesh.GetNSE() << endl;
    for (i = 1; i <= mesh.GetNSE(); i++)
      {
	if (mesh.SurfaceElement(i).GetIndex())
	  outfile << mesh.GetFaceDescriptor(mesh.SurfaceElement(i).GetIndex ()).SurfNr()
		  << "\t";
	else
	  outfile << "0" << "\t";
	outfile << mesh.SurfaceElement(i)[0] << " "
		<< mesh.SurfaceElement(i)[1] << " "
		<< mesh.SurfaceElement(i)[2] << endl;
      }
    outfile << mesh.GetNE() << endl;
    for (ElementIndex ei = 0; ei < mesh.GetNE(); ei++)
      outfile << mesh[ei].GetIndex() << "\t"
	      << mesh[ei][0] << " " << mesh[ei][1] << " "
	      << mesh[ei][2] << " " << mesh[ei][3] << endl;

    outfile << mesh.GetNP() << endl;
    for (i = 1; i <= mesh.GetNP(); i++)
      outfile << mesh.Point(i)(0) << " "
	      << mesh.Point(i)(1) << " "
	      << mesh.Point(i)(2) << endl;

#ifdef SOLIDGEOM
    outfile << geometry.GetNSurf() << endl;
    for (i = 1; i <= geometry.GetNSurf(); i++)
      geometry.GetSurface(i) -> Print (outfile);
#endif
  }
Esempio n. 4
0
/*
 * FEPP .. a finite element package developed at University Linz, Austria
 */
void WriteFEPPFormat (const Mesh & mesh,
                      const CSGeometry & geom,
                      const string & filename)
{

    ofstream outfile (filename.c_str());

    if (mesh.GetDimension() == 3)

    {

        // output for FEPP

        int np = mesh.GetNP();
        int ne = mesh.GetNE();
        int nse = mesh.GetNSE();
        int ns = mesh.GetNFD();
        int i, j;

        outfile.precision(5);
        outfile.setf (ios::fixed, ios::floatfield);
        outfile.setf (ios::showpoint);

        outfile << "volumemesh4" << endl;
        outfile << nse << endl;
        for (i = 1; i <= nse; i++)
        {
            const Element2d & el = mesh.SurfaceElement(i);

            //	  int facenr = mesh.facedecoding.Get(el.GetIndex()).surfnr;
            outfile.width(4);
            outfile << el.GetIndex() << " ";
            outfile.width(4);
            //	  outfile << mesh.GetFaceDescriptor(el.GetIndex()).BCProperty() << " ";
            outfile << mesh.GetFaceDescriptor(el.GetIndex()).BCProperty() << " ";
            outfile.width(4);
            outfile << el.GetNP() << "    ";
            for (j = 1; j <= el.GetNP(); j++)
            {
                outfile.width(8);
                outfile << el.PNum(j);
            }
            outfile << "\n";
        }


        outfile << ne << "\n";
        for (i = 1; i <= ne; i++)
        {
            const Element & el = mesh.VolumeElement(i);
            outfile.width(4);
            outfile << el.GetIndex() << " ";
            outfile.width(4);
            outfile << el.GetNP() << " ";
            for (j = 1; j <= el.GetNP(); j++)
            {
                outfile.width(8);
                outfile << el.PNum(j);
            }
            outfile << "\n";
        }

        outfile << np << "\n";
        for (i = 1; i <= np; i++)
        {
            const Point3d & p = mesh.Point(i);

            outfile.width(10);
            outfile << p.X() << " ";
            outfile.width(9);
            outfile << p.Y() << " ";
            outfile.width(9);
            outfile << p.Z() << "\n";
        }

        /*
        if (typ == WRITE_FEPPML)
        {
          int nbn =  mesh.mlbetweennodes.Size();
          outfile << nbn << "\n";
          for (i = 1; i <= nbn; i++)
            outfile << mesh.mlbetweennodes.Get(i).I1() << " "
        	    << mesh.mlbetweennodes.Get(i).I2() << "\n";


          //	  int ncon = mesh.connectedtonode.Size();
          //	  outfile << ncon << "\n";
          //	  for (i = 1; i <= ncon; i++)
          //	    outfile << i << " " << mesh.connectedtonode.Get(i) << endl;
        }
             */


        // write CSG surfaces
        if (&geom && geom.GetNSurf() >= ns)
        {
            outfile << ns << endl;
            for (i = 1; i <= ns; i++)
                geom.GetSurface(mesh.GetFaceDescriptor(i).SurfNr())->Print(outfile);
        }
        else
            outfile << "0" << endl;
    }


    else

    {   // 2D fepp format

        ;
        /*
        extern SplineGeometry2d * geometry2d;
        if (geometry2d)
        Save2DMesh (mesh, &geometry2d->GetSplines(), outfile);
             else
        Save2DMesh (mesh, 0, outfile);
             */
    }
}
Esempio n. 5
0
void WriteTecPlotFormat (const Mesh & mesh,
			 const CSGeometry & geom,
			 const string & filename)
{
  INDEX i;
  int j, k, e, z;
  Vec<3> n;
  
  INDEX np = mesh.GetNP();
  INDEX ne = mesh.GetNE();
  INDEX nse = mesh.GetNSE();
  
  ARRAY<int> sn(np);
  ofstream outfile(filename.c_str());
  
  outfile << "TITLE=\" " << filename << "\"" << endl;

  // fill hashtable

  INDEX_3_HASHTABLE<int> face2volelement(ne);

  for (i = 1; i <= ne; i++)
    {
      const Element & el = mesh.VolumeElement(i);
      INDEX_3 i3;
      int l;
      for (j = 1; j <= 4; j++)   // loop over faces of tet
	{
	  l = 0;
	  for (k = 1; k <= 4; k++)
	    if (k != j)
	      {
		l++;
		i3.I(l) = el.PNum(k);
	      }
	  i3.Sort();
	  face2volelement.Set (i3, i);
	}
    }
      
      
  for (j = 1; j <= geom.GetNSurf(); j++)       /* Flaeche Nummer j */
    {
      for (i = 1; i <= np; i++)
	sn.Elem(i) = 0;

      e = 0;
       
      for (i = 1; i <= nse; i++)
	{
	  const Element2d & el = mesh.SurfaceElement(i);
	  if (j ==  mesh.GetFaceDescriptor (el.GetIndex ()).SurfNr())
	    {
	      for (k = 1; k <= 3; k++)
		sn.Elem(el.PNum(k)) = 1;
	      e++;                     /* e= Anzahl der neuen Elemente */
	    }
	}

      z = 0;
      for (i = 1; i <= np; i++)
	if (sn.Elem(i) == 1)
	  sn.Elem(i) = ++z;

      outfile << "ZONE T=\" Surface " << j << " \", N=" << z
	      << ", E=" << e << ", ET=TRIANGLE, F=FEPOINT" << endl;

      for (i = 1; i <= np; i++)
	if (sn.Elem(i) != 0)
	  {
	    n = geom.GetSurface(j) -> GetNormalVector ( mesh.Point(i) );
		
	    outfile << mesh.Point(i)(0) << " " /* Knoten Koordinaten */
		    << mesh.Point(i)(1) << " "
		    << mesh.Point(i)(2) << " "
		    << n(0) << " "
		    << n(1) << " "
		    << n(2) << " "
		    << i     << endl;
	  }
	  

      for (i = 1; i <= nse; i++)
	{
	  const Element2d & el = mesh.SurfaceElement(i);
	  if (j ==  mesh.GetFaceDescriptor(el.GetIndex ()).SurfNr())
	    /* FlaechenKnoten (3) */
	    outfile << sn.Get(el.PNum(1)) << " " 
		    << sn.Get(el.PNum(2)) << " "
		    << sn.Get(el.PNum(3)) << endl;
	      
	  /// Hier soll noch die Ausgabe der Nummer des angrenzenden
	      /// Vol.elements erfolgen !

	      for (k = 1; k <= nse; k++)
		{
		  const Element2d & sel = mesh.SurfaceElement(k);
		  INDEX_3 i3;
		  for (j = 1; j <= 3; j++)
		    i3.I(j) = sel.PNum(j);
		  i3.Sort();
		  
		  //int elind = face2volelement.Get(i3);
		}
	}
    }
}