Ejemplo n.º 1
0
 public Race()
 {
     Actions         = ActionFlag.None;
     Affects         = AffectedByFlag.None;
     Offenses        = OffensiveFlag.None;
     Immunities      = ImmunityFlag.None;
     Resistances     = ResistanceFlag.None;
     Vulnerabilities = VulnerabilityFlag.None;
     Form            = FormFlag.None;
     Parts           = PartFlag.None;
 }
Ejemplo n.º 2
0
        public void Command(string[] arg)
        {
            Grid grid = sparta.grid;
            Surf surf = sparta.surf;
            Domain domain = sparta.domain;
            Particle particle = sparta.particle;
            int narg = arg.Length;
            filename = arg[0];

            double[] origion = new double[3];
            if (!grid.exist)
            {
                sparta.DumpError("Cannot read_surf before grid is defined");
            }
            surf.exist = true;
            dim = domain.dimension;
            if (narg < 1)
            {
                sparta.DumpError("Illegal read_surf command");
            }
            Console.WriteLine("Reading surf file ...\n");
            try
            {
                fp = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Read);
            }
            catch (Exception e)
            {

                throw e;
            }
            double time1 = Timer.getTime();
            Header();

            pts = new List<Point>(npoint);
            lines = new List<Line>(nline);

            ParseKeyword(true);

            ParseKeyword(false);
            PartFlag pf = PartFlag.NONE;
            bool grouparg = false;

            int iarg = 1;
            while (iarg < narg)
            {
                switch (arg[iarg])
                {

                    default:
                        sparta.DumpError(string.Format("ReadSurf->Command: complete args {0}", arg[iarg]));
                        break;
                }
            }

            if (particle.exist && pf == PartFlag.NONE)
            {
                sparta.DumpError("Using read_surf particle none when particles exist");
            }

            //if (grouparg)
            //{
            //    int igroup=surf.FindGroup
            //}
            // extent of surfs after geometric transformations
            // compute sizes of smallest surface elements

            double[,] extent = new double[3, 2];
            extent[0, 0] = extent[1, 0] = extent[2, 0] = double.MaxValue;
            extent[0, 1] = extent[1, 1] = extent[2, 1] = -double.MaxValue;

            foreach (Point p in pts)
            {
                extent[0, 0] = Math.Min(extent[0, 0], p.x[0]);
                extent[0, 1] = Math.Max(extent[0, 1], p.x[0]);
                extent[1, 0] = Math.Min(extent[1, 0], p.x[1]);
                extent[1, 1] = Math.Max(extent[1, 1], p.x[1]);
                extent[2, 0] = Math.Min(extent[2, 0], p.x[2]);
                extent[2, 1] = Math.Max(extent[2, 1], p.x[2]);
            }

            double minlen=0, minarea=0;
            if (dim == 2)
            {
                minlen = ShortestLine();
            }
            if (dim == 3)
            {
                sparta.DumpError("Readsurf->Command: complete dimension3");
            }

            StringBuilder sb = new StringBuilder();

            sb.AppendFormat("  {0:G6} {1:G6} xlo xhi\n", extent[0, 0], extent[0, 1]);
            sb.AppendFormat("  {0:G6} {1:G6} ylo yhi\n", extent[1, 0], extent[1, 1]);
            sb.AppendFormat("  {0:G6} {1:G6} zlo zhi\n", extent[2, 0], extent[2, 1]);
            if (dim==2)
            {
                sb.AppendFormat("  {0:G6} min line length\n", minlen);
            }
            else
            {
                sparta.DumpError("Readsurf->Command: complete dimension3");
            }
            sparta.DumpMessage(sb.ToString());

            if (dim == 2)
            {
                surf.nline = nline;
                surf.Grow();
                List<Surf.Line> newlines = surf.lines;

                int m = 0;
                foreach (Line line in lines)
                {
                    Surf.Line l = new Surf.Line();
                    l.id = m + 1;  // check for overflow when allow distributed surfs
                    l.type = line.type;
                    l.mask = line.mask;
                    l.isc = l.isr = -1;
                    Array.Copy(pts[line.p1].x, l.p1,  3);
                    Array.Copy(pts[line.p2].x, l.p2,  3);
                    newlines.Add(l);
                    m++;
                }


            }
            else if (dim==3)
            {
                sparta.DumpError("Readsurf->Command: complete dimension3");
            }


            if (dim==2)
            {
                surf.ComputeLineNormal();
            }
            else
            {
                sparta.DumpError("Readsurf->Command: complete dimension3");
            }

            if (dim == 2)
            {
                surf.CheckPointInside();
            }
            else
            {
                sparta.DumpError("Readsurf->Command: complete dimension3");
            }

            double time2 = Timer.getTime();

            if (particle.exist)
            {
                particle.Sort();
            }

            surf.SetupSurf();
            //todo:not necessary
            grid.UnsetNeighbors();
            grid.RemoveGhosts();

            if (particle.exist&&grid.nsplitlocal!=0)
            {
                throw new NotImplementedException();

            }

            grid.ClearSurf();

            double time3 = Timer.getTime();
            if (dim==2)
            {
                surf.CheckWatertight2d(nline);
                CheckNeighborNorm2d();
            }

            double time4 = Timer.getTime();
            //todo:continue
            grid.SurftoGrid(true);

            throw new NotImplementedException();
        }