/// <summary>
        /// Poisson Equation on a (-1,1)x(-1,1), Dirichlet everywhere
        /// </summary>
        public static SipControl Square(int xRes = 5, int yRes = 5, int deg = 5)
        {
            //Func<double[], double> exRhs = X => 2 * X[0] * X[0] + 2 * X[1] * X[1] - 4;
            //Func<double[], double> exSol = X => (1.0 - X[0] * X[0]) * (1.0 - X[1] * X[1]);

            //Func<double[], double> exSol = X => (1.0 - X[1]);
            //Func<double[], double> exRhs = X => 0.0;

            Func <double[], double> exSol = X => - Math.Cos(X[0] * Math.PI * 0.5) * Math.Cos(X[1] * Math.PI * 0.5);
            Func <double[], double> exRhs = X => (Math.PI * Math.PI * 0.5 * Math.Cos(X[0] * Math.PI * 0.5) * Math.Cos(X[1] * Math.PI * 0.5)); // == - /\ exSol


            var R = new SipControl();

            R.ProjectName = "ipPoison/square";
            R.savetodb    = false;
            //R.DbPath = "D:\\BoSSS-db";

            R.FieldOptions.Add("T", new FieldOpts()
            {
                Degree = deg, SaveToDB = FieldOpts.SaveToDBOpt.TRUE
            });
            R.FieldOptions.Add("Tex", new FieldOpts()
            {
                Degree = 4
            });
            R.InitialValues_Evaluators.Add("RHS", exRhs);
            R.InitialValues_Evaluators.Add("Tex", exSol);
            R.ExactSolution_provided = true;
            //R.LinearSolver.NoOfMultigridLevels = 2;
            //R.LinearSolver.SolverCode = LinearSolverCode.exp_softpcg_mg;
            R.LinearSolver.SolverCode = LinearSolverCode.exp_softpcg_schwarz_directcoarse;
            R.SuppressExceptionPrompt = true;
            //R.LinearSolver.SolverCode = LinearSolverCode.classic_mumps;

            R.GridFunc = delegate() {
                double[] xNodes = GenericBlas.Linspace(-1, 1, xRes);
                double[] yNodes = GenericBlas.Linspace(-1, 1, yRes);
                var      grd    = Grid2D.Cartesian2DGrid(xNodes, yNodes);

                grd.EdgeTagNames.Add(1, BoundaryType.Dirichlet.ToString());
                grd.DefineEdgeTags(delegate(double[] X) {
                    byte ret = 1;
                    return(ret);
                });


                return(grd);
            };

            R.AddBoundaryValue(BoundaryType.Dirichlet.ToString(), "T", exSol);

            R.NoOfSolverRuns = 1;

            R.AdaptiveMeshRefinement = true;
            R.NoOfTimesteps          = 5;


            return(R);
        }
Exemple #2
0
        //static void Main(string[] args) {
        //    BoSSS.Solution.Application._Main(args, false, null, () => new VortexRock4());
        //}

        protected override GridCommons CreateOrLoadGrid()
        {
            int NumOfCells = 4;

            double[] xnodes1 = GenericBlas.Linspace(-10, -5, NumOfCells + 1);
            double[] xnodes2 = GenericBlas.Linspace(-5, 5, 4 * NumOfCells + 1);
            double[] xnodes3 = GenericBlas.Linspace(5, 10, NumOfCells + 1);

            double[] xComplete = new double[xnodes1.Length + xnodes2.Length + xnodes3.Length - 2];
            for (int i = 0; i < xnodes1.Length; i++)
            {
                xComplete[i] = xnodes1[i];
            }
            for (int i = 1; i < xnodes2.Length; i++)
            {
                xComplete[i + xnodes1.Length - 1] = xnodes2[i];
            }
            for (int i = 1; i < xnodes3.Length; i++)
            {
                xComplete[i + xnodes1.Length + xnodes2.Length - 2] = xnodes3[i];
            }


            GridCommons grd = Grid2D.Cartesian2DGrid(xComplete, xComplete, CellType.Square_Linear, true, true);

            grd.Description = "2D cartesian grid 10x10 cells";

            return(grd);
        }
Exemple #3
0
        protected override IGrid CreateOrLoadGrid()
        {
            double[] xnodes1 = GenericBlas.Linspace(-1, 0, a1 + 1);
            double[] xnodes2 = GenericBlas.Linspace(0, 0.5, a2 + 1);
            double[] xnodes3 = GenericBlas.Linspace(0.5, 1, a3 + 1);

            double[] xComplete = new double[xnodes1.Length + xnodes2.Length + xnodes3.Length - 2];
            for (int i = 0; i < xnodes1.Length; i++)
            {
                xComplete[i] = xnodes1[i];
            }
            for (int i = 1; i < xnodes2.Length; i++)
            {
                xComplete[i + xnodes1.Length - 1] = xnodes2[i];
            }
            for (int i = 1; i < xnodes3.Length; i++)
            {
                xComplete[i + xnodes1.Length + xnodes2.Length - 2] = xnodes3[i];
            }

            double[]    ynodes = GenericBlas.Linspace(0, 0.1, 2);
            GridCommons grd    = Grid2D.Cartesian2DGrid(xComplete, ynodes, CellType.Square_Linear, true, false);

            grd.Description = "2D cartesian grid 35x1 cells";

            return(grd);
        }
Exemple #4
0
        protected override IGrid CreateOrLoadGrid()
        {
            double[] nodes = GenericBlas.Linspace(-5, 5, 21);
            var      grd   = Grid2D.Cartesian2DGrid(nodes, nodes);

            this.Control.NoOfMultigridLevels = 1; // required for XDG-BDF timestepper
            return(grd);
        }
        protected override GridCommons CreateOrLoadGrid()
        {
            double[] nodes = GenericBlas.Linspace(-5, 5, 21);
            var      grd   = Grid2D.Cartesian2DGrid(nodes, nodes);

            base.m_GridPartitioningType = GridPartType.none;
            return(grd);
        }
Exemple #6
0
        public override IGrid GetGrid(IDatabaseInfo db)
        {
            IGrid grid;

            switch (GridType)
            {
            case GridTypes.Structured:
                int noOfCellsPerDirection;

                switch (GridSize)
                {
                case GridSizes.Tiny:
                    noOfCellsPerDirection = 5;
                    break;

                case GridSizes.Small:
                    noOfCellsPerDirection = 10;
                    break;

                case GridSizes.Normal:
                    noOfCellsPerDirection = 20;
                    break;

                case GridSizes.Large:
                    noOfCellsPerDirection = 40;
                    break;

                case GridSizes.Huge:
                    noOfCellsPerDirection = 80;
                    break;

                default:
                    throw new Exception();
                }

                grid = Grid2D.Cartesian2DGrid(
                    GenericBlas.Linspace(-2.0, 2.0, noOfCellsPerDirection + 1),
                    GenericBlas.Linspace(-2.0, 2.0, noOfCellsPerDirection + 1),
                    CellType.Square_Linear,
                    false,
                    false,
                    null,
                    new BoundingBox(new double[, ] {
                    { -0.2, -0.2 }, { 0.2, 0.2 }
                }));
                break;

            case GridTypes.Unstructured:
                grid = db.Controller.DBDriver.LoadGrid(
                    new Guid("7a4cf525-76e0-44fc-add2-7ce683a082c3"), db);
                break;

            default:
                throw new Exception();
            }

            return(grid);
        }
Exemple #7
0
        public static XdgTimesteppingTestControl AggDbg()
        {
            XdgTimesteppingTestControl R = new XdgTimesteppingTestControl();

            R.ProjectName = "XdgMassMatrixEvolution/AgglomDebuch";
            R.savetodb    = false;

            R.FieldOptions.Add("Phi", new FieldOpts()
            {
                Degree   = 3,
                SaveToDB = FieldOpts.SaveToDBOpt.TRUE
            });
            R.FieldOptions.Add("u", new FieldOpts()
            {
                Degree   = 1,
                SaveToDB = FieldOpts.SaveToDBOpt.TRUE
            });
            R.FieldOptions.Add("Vx", new FieldOpts()
            {
                Degree   = 1,
                SaveToDB = FieldOpts.SaveToDBOpt.TRUE
            });
            R.FieldOptions.Add("Vy", new FieldOpts()
            {
                Degree   = 1,
                SaveToDB = FieldOpts.SaveToDBOpt.TRUE
            });

            R.GridFunc = delegate() {
                var grd = Grid2D.Cartesian2DGrid(new double[] { -4, -2, 0, 2, 4 }, GenericBlas.Linspace(-1, 1, 2));
                grd.AddPredefinedPartitioning("For2", (double[] X) => (Math.Sign(X[0]) + 1) / 2);
                return(grd);
            };

            R.GridPartType    = GridPartType.Predefined;
            R.GridPartOptions = "For2";

            const double S = 0.3;

            R.S   = ((double[] X, double t) => S);
            R.Phi = ((double[] X, double t) => X[0] - S * t);

            // set the level-set
            R.InitialValues_Evaluators.Add("Phi", X => R.Phi(X, 0.0));
            R.InitialValues_Evaluators.Add("Vx", X => 0.3);
            R.InitialValues_Evaluators.Add("Vy", X => 0.0);
            R.InitialValues_Evaluators.Add("u#A", X => 0.8);
            R.InitialValues_Evaluators.Add("u#B", X => 1.66);

            //R.InitialValues_Evaluators.Add("u#A", X => X[0] < 0 ? 0.8 : 1.66);
            //R.InitialValues_Evaluators.Add("u#B", X => X[0] < 0 ? 0.8 : 1.66);


            R.dtFixed = 0.18;


            return(R);
        }
Exemple #8
0
        protected override IGrid CreateOrLoadGrid()
        {
            //base.Control.ImmediatePlotPeriod = 1;
            DeleteOldPlotFiles();

            //base.Control.GridPartType = BoSSS.Foundation.Grid.GridPartType.METIS;
            var comm = csMPI.Raw._COMM.WORLD;
            int size;

            csMPI.Raw.Comm_Size(comm, out size);


            double xMax = 1.0, yMax = 1.0;
            double xMin = -1.0, yMin = -1.0;
            Func <double[], int> MakeMyPartioning = delegate(double[] X) {
                double x = X[0];
                double y = X[1];

                int    separation = 2;
                double xspan      = (xMax - xMin) / separation;
                double yspan      = (yMax - yMin) / separation;
                int    rank       = int.MaxValue;
                int    icore      = 0;
                for (int i = 0; i < separation; i++)
                {
                    for (int j = 0; j < separation; j++)
                    {
                        bool xtrue = x <= xspan * (i + 1) + xMin;
                        bool ytrue = y <= yspan * (j + 1) + yMin;
                        if (xtrue && ytrue)
                        {
                            rank = icore;
                            return(rank);
                        }
                        icore++;
                    }
                }

                return(rank);
            };

            m_grid = Grid2D.Cartesian2DGrid(GenericBlas.Linspace(-1, 1, m_Res + 1), GenericBlas.Linspace(-1, 1, m_Res + 1));
            if (size == 4)
            {
                base.Control.GridPartType    = BoSSS.Foundation.Grid.GridPartType.Predefined;
                base.Control.GridPartOptions = "hallo";
                ((Grid2D)m_grid).AddPredefinedPartitioning("hallo", MakeMyPartioning);
            }
            else
            {
                if (size != 1)
                {
                    throw new NotSupportedException("supported MPIsize is 1 or 4");
                }
                base.Control.GridPartType = BoSSS.Foundation.Grid.GridPartType.none;
            }
            return(m_grid);
        }
        /// <summary>
        /// Test on a Cartesian grid, with an exact polynomial solution.
        /// </summary>
        public static SipControl TestCartesian1(int xRes = 32, double xStretch = 1.0, int yRes = 16, double yStretch = 1.01, int pDG = 2)
        {
            //BoSSS.Application.SipPoisson.SipHardcodedControl.TestCartesian1()
            var RR = new SipControl();

            RR.ProjectName = "ipPoison/cartesian";
            RR.savetodb    = false;

            RR.FieldOptions.Add("T", new FieldOpts()
            {
                Degree = pDG, SaveToDB = FieldOpts.SaveToDBOpt.TRUE
            });
            RR.FieldOptions.Add("Tex", new FieldOpts()
            {
                Degree = pDG * 2
            });
            RR.InitialValues_Evaluators.Add("RHS", X => 1.0);
            RR.InitialValues_Evaluators.Add("Tex", X => (0.5 * X[0].Pow2() - 10 * X[0]));
            RR.ExactSolution_provided = true;


            RR.GridFunc = delegate()
            {
                double[] xNodes = CreateNodes(xRes, xStretch, 0, 10);
                double[] yNodes = CreateNodes(yRes, yStretch, -1, +1);

                var grd = Grid2D.Cartesian2DGrid(xNodes, yNodes);
                grd.EdgeTagNames.Add(1, BoundaryType.Dirichlet.ToString());
                grd.EdgeTagNames.Add(2, BoundaryType.Neumann.ToString());
                grd.DefineEdgeTags(delegate(double[] X)
                {
                    byte ret;
                    if (Math.Abs(X[0] - 0.0) <= 1.0e-6)
                    {
                        ret = 1;
                    }
                    else
                    {
                        ret = 2;
                    }
                    return(ret);
                });

                return(grd);
            };


            RR.AddBoundaryValue(BoundaryType.Dirichlet.ToString());
            RR.AddBoundaryValue(BoundaryType.Neumann.ToString());


            RR.GridPartType = BoSSS.Foundation.Grid.GridPartType.none;


            return(RR);
        }
Exemple #10
0
        protected override GridCommons CreateOrLoadGrid()
        {
            GridCommons grd;

            double[] xnodes = GenericBlas.Linspace(xMin, xMax, numOfCellsX + 1);
            double[] ynodes = GenericBlas.Linspace(yMin, yMax, numOfCellsY + 1);
            grd = Grid2D.Cartesian2DGrid(xnodes, ynodes, type: CellType.Square_Linear, periodicX: false, periodicY: false);

            return(grd);
        }
Exemple #11
0
        protected override GridCommons CreateOrLoadGrid()
        {
            base.Control.GridPartType = BoSSS.Foundation.Grid.GridPartType.METIS;
            var grd = Grid2D.Cartesian2DGrid(GenericBlas.Linspace(-3, 3, 13), GenericBlas.Linspace(-3, 3, 13));

            //var grd = Grid2D.Cartesian2DGrid(GenericBlas.Linspace(-3, 3, 8), GenericBlas.Linspace(-3, 3, 2));
            //Console.WriteLine("testcode");

            return(grd);
        }
Exemple #12
0
        protected override GridCommons CreateOrLoadGrid()
        {
            var xNodes = GenericBlas.Linspace(-0.33333, 0.666667, 7);
            //var yNodes = GenericBlas.Linspace(-1, 1, 2);
            //var xNodes = GenericBlas.Linspace(-2, 2, 25);
            var yNodes = GenericBlas.Linspace(-1, 1, 13);
            var grd    = Grid2D.Cartesian2DGrid(xNodes, yNodes);

            return(grd);
        }
Exemple #13
0
        protected override GridCommons CreateOrLoadGrid()
        {
            var grd = Grid2D.Cartesian2DGrid(GenericBlas.Linspace(-3, 3, 13), GenericBlas.Linspace(-3, 3, 13));

            //var grd = Grid2D.Cartesian2DGrid(GenericBlas.Linspace(-3, 3, 8), GenericBlas.Linspace(-3, 3, 2));
            //Console.WriteLine("testcode");
            base.m_GridPartitioningType = GridPartType.METIS;

            return(grd);
        }
Exemple #14
0
        /// <summary>
        /// A circular interface in the 2D domain \f$ (3/2,3/2)^2 \f$.
        /// </summary>
        public static XdgPoisson3Control Circle(int Resolution = 16, int p = 1, string DBPath = null, LinearSolverCode solver = LinearSolverCode.classic_pardiso)
        {
            //BoSSS.Application.XdgPoisson3.HardCodedControl.Circle(Resolution: 8);

            XdgPoisson3Control R = new XdgPoisson3Control();

            R.ProjectName = "XdgPoisson3/Circle";
            if (DBPath == null)
            {
                R.savetodb = false;
            }
            else
            {
                R.savetodb = false;
                R.DbPath   = DBPath;
            }


            R.SetDGdegree(p);

            R.GridFunc = delegate() {
                return(Grid2D.Cartesian2DGrid(GenericBlas.Linspace(-1.5, 1.5, Resolution + 1), GenericBlas.Linspace(-1.5, 1.5, Resolution + 1)));
            };


            double RADIUS = 0.8;

            R.InitialValues_Evaluators.Add("Phi", X => - (X[0] - 0.0).Pow2() - (X[1] - 0.0).Pow2() + (RADIUS).Pow2());

            R.ExcactSolSupported = false;
            R.InitialValues_Evaluators.Add("uEx#A", X => 0.0);
            R.InitialValues_Evaluators.Add("uEx#B", X => 0.0);
            R.InitialValues_Evaluators.Add("u#A", X => 0.0);
            R.InitialValues_Evaluators.Add("u#B", X => 0.0);
            R.InitialValues_Evaluators.Add("rhs#A", X => + 1.0);
            R.InitialValues_Evaluators.Add("rhs#B", X => + 1.0);

            R.MU_A = -1.0;
            R.MU_B = -1000.0;

            R.xLaplaceBCs.g_Diri      = (X => 0.0);
            R.xLaplaceBCs.IsDirichlet = (inp => true);

            R.LinearSolver.SolverCode = solver;
            R.LinearSolver.SolverCode = LinearSolverCode.classic_pardiso;

            R.TimesteppingMode = AppControl._TimesteppingMode.Steady;

            R.AgglomerationThreshold           = 0.1;
            R.PrePreCond                       = MultigridOperator.Mode.SymPart_DiagBlockEquilib;
            R.LinearSolver.NoOfMultigridLevels = 5;


            return(R);
        }
        protected override GridCommons CreateOrLoadGrid()
        {
            double[] xNodes = GenericBlas.Linspace(-5, 5, 21);
            double[] yNodes = GenericBlas.Linspace(-5, 5, 21);
            //double[] xNodes = GenericBlas.Linspace(-3, 3, 4);
            //double[] yNodes = GenericBlas.Linspace(-1, 1, 2);

            var grd = Grid2D.Cartesian2DGrid(xNodes, yNodes);

            return(grd);
        }
Exemple #16
0
        public static SipControl JumpingSquare(int xRes = 5, int yRes = 5, int deg = 3)
        {
            var R = new SipControl();

            R.ProjectName = "ipPoison/square";
            R.savetodb    = false;

            R.FieldOptions.Add("T", new FieldOpts()
            {
                Degree = deg
            });
            R.FieldOptions.Add("Tex", new FieldOpts()
            {
                Degree = 4
            });
            R.InitialValues_Evaluators.Add("RHS", X => 0.0);
            R.InitialValues_Evaluators.Add("Tex", X => 0.1);
            R.ExactSolution_provided  = true;
            R.SuppressExceptionPrompt = true;
            R.AddBoundaryValue(BoundaryType.Dirichlet.ToString(), "T",
                               X => {
                if (X[0] > 0.9999)
                {
                    return(0.1);
                }
                else
                {
                    return(0.1);
                }
            });
            R.NoOfSolverRuns = 1;

            R.AdaptiveMeshRefinement = true;
            R.NoOfTimesteps          = 1;

            R.ImmediatePlotPeriod = 1;
            R.SuperSampling       = 2;

            R.GridFunc = delegate() {
                double[] xNodes = GenericBlas.Linspace(-1, 1, xRes);
                double[] yNodes = GenericBlas.Linspace(-1, 1, yRes);
                var      grd    = Grid2D.Cartesian2DGrid(xNodes, yNodes);

                grd.EdgeTagNames.Add(1, BoundaryType.Dirichlet.ToString());
                grd.DefineEdgeTags(delegate(double[] X) {
                    byte ret = 1;
                    return(ret);
                });
                return(grd);
            };
            return(R);
        }
Exemple #17
0
        public GridCommons CreateGrid()
        {
            var grd = Grid2D.Cartesian2DGrid(GenericBlas.Linspace(-2, 2, 5), GenericBlas.Linspace(-2, 2, 5));

            //var grd = Grid2D.Cartesian2DGrid(GenericBlas.Linspace(-2, 2, 3), GenericBlas.Linspace(-2, 2, 3));

            grd.EdgeTagNames.Add(1, "Velocity_Inlet");
            grd.DefineEdgeTags(delegate(double[] _X) {
                return(1);
            });

            return(grd);
        }
Exemple #18
0
        public GridCommons GetGrid()
        {
            var grd = Grid2D.Cartesian2DGrid(GenericBlas.Linspace(-2, 2, 7), GenericBlas.Linspace(-2, 2, 5));

            grd.EdgeTagNames.Add(1, "Pressure_Outlet");

            grd.DefineEdgeTags(delegate(double[] _X) {
                return(1);
            });


            return(grd);
        }
        /// <summary>
        /// Poisson Equation on a (-1,1)x(-1,1), Dirichlet everywhere
        /// </summary>
        public static SipControl Square(int xRes = 21, int yRes = 16, int deg = 5)
        {
            //Func<double[], double> exRhs = X => 2 * X[0] * X[0] + 2 * X[1] * X[1] - 4;
            //Func<double[], double> exSol = X => (1.0 - X[0] * X[0]) * (1.0 - X[1] * X[1]);

            //Func<double[], double> exSol = X => (1.0 - X[1]);
            //Func<double[], double> exRhs = X => 0.0;

            Func <double[], double> exSol = X => - Math.Cos(X[0] * Math.PI * 0.5) * Math.Cos(X[1] * Math.PI * 0.5);
            Func <double[], double> exRhs = X => (Math.PI * Math.PI * 0.5 * Math.Cos(X[0] * Math.PI * 0.5) * Math.Cos(X[1] * Math.PI * 0.5)); // == - /\ exSol


            var R = new SipControl();

            R.ProjectName = "ipPoison/square";
            R.savetodb    = false;
            //R.DbPath = "D:\\BoSSS-db";

            R.FieldOptions.Add("T", new FieldOpts()
            {
                Degree = deg, SaveToDB = FieldOpts.SaveToDBOpt.TRUE
            });
            R.FieldOptions.Add("Tex", new FieldOpts()
            {
                Degree = 4
            });
            R.InitialValues_Evaluators.Add("RHS", exRhs);
            R.InitialValues_Evaluators.Add("Tex", exSol);
            R.ExactSolution_provided = true;

            R.GridFunc = delegate() {
                double[] xNodes = GenericBlas.Linspace(-1, 1, xRes);
                double[] yNodes = GenericBlas.Linspace(-1, 1, yRes);
                var      grd    = Grid2D.Cartesian2DGrid(xNodes, yNodes);

                grd.EdgeTagNames.Add(1, BoundaryType.Dirichlet.ToString());
                grd.DefineEdgeTags(delegate(double[] X) {
                    byte ret = 1;
                    return(ret);
                });


                return(grd);
            };

            R.AddBoundaryCondition(BoundaryType.Dirichlet.ToString(), "T", exSol);

            R.NoOfSolverRuns = 1;

            return(R);
        }
Exemple #20
0
        /// <summary>
        /// A 45-degree interface in the 2D domain \f$ (-2,2)^2 \f$.
        /// </summary>
        public static XdgPoisson3Control Schraeg()
        {
            XdgPoisson3Control R = new XdgPoisson3Control();

            R.ProjectName = "XdgPoisson3/Schräg";
            R.savetodb    = false;

            R.FieldOptions.Add("Phi", new FieldOpts()
            {
                Degree   = 3,
                SaveToDB = FieldOpts.SaveToDBOpt.TRUE
            });
            R.FieldOptions.Add("u", new FieldOpts()
            {
                Degree   = 3,
                SaveToDB = FieldOpts.SaveToDBOpt.TRUE
            });

            R.GridFunc = delegate() {
                return(Grid2D.Cartesian2DGrid(GenericBlas.Linspace(-2, 2, 8), GenericBlas.Linspace(-2, 2, 8)));
            };


            // set the level-set
            R.InitialValues_Evaluators.Add("Phi", X => (X[0] + X[1]) + 0.075);
            //R.InitialValues.Add("Phi", X => X[0] + +X[1]*0.001);
            R.ExcactSolSupported = true;
            R.InitialValues_Evaluators.Add("uEx#A", X => X[1]);
            R.InitialValues_Evaluators.Add("uEx#B", X => X[1]);
            R.InitialValues_Evaluators.Add("rhs#A", X => 0.0);
            R.InitialValues_Evaluators.Add("rhs#B", X => 0.0);


            R.MU_A = -1.0;
            R.MU_B = -1.0;

            R.xLaplaceBCs.g_Diri = delegate(CommonParamsBnd inp) {
                double y = inp.X[1];
                return(y);
            };

            R.xLaplaceBCs.IsDirichlet = (inp => true);

            R.LinearSolver.SolverCode = LinearSolverConfig.Code.classic_pardiso;//R.solverName = "direct";
            R.AgglomerationThreshold  = 0.0;
            R.PrePreCond         = MultigridOperator.Mode.IdMass;
            R.penalty_multiplyer = 1.1;
            R.ViscosityMode      = XLaplace_Interface.Mode.SIP;

            return(R);
        }
Exemple #21
0
        /// <summary>
        /// creates a simple 2d/3d Cartesian grid within the domain (-7,7)x(-7,7);
        /// </summary>
        protected override GridCommons CreateOrLoadGrid()
        {
            //m_GridPartitioningType = GridPartType.none;
            double[]    xnodes = GenericBlas.Linspace(-7, 7, 101);
            double[]    ynodes = GenericBlas.Linspace(-7, 7, 101);
            GridCommons grd    = Grid2D.Cartesian2DGrid(xnodes, ynodes, type: CellType.Square_Linear);

            //double[] xnodes = GenericBlas.Linspace(-7, 7, 25);
            //double[] ynodes = GenericBlas.Linspace(-7, 7, 25);
            //double[] znodes = GenericBlas.Linspace(-7, 7, 25);
            //var grd = Grid3D.Cartesian3DGrid(xnodes, ynodes, znodes);

            return(grd);
        }
Exemple #22
0
        protected override GridCommons CreateOrLoadGrid()
        {
            int MeshPara = 32;

            double[] nodesX = GenericBlas.Linspace(-2, 2, MeshPara + 1);
            double[] nodesY = GenericBlas.Linspace(-3, 3, MeshPara / 2 + 1);
            var      grid   = Grid2D.Cartesian2DGrid(nodesX, nodesY, periodicX: m_periodicX, periodicY: m_periodicY);

            this.m_GridPartitioningType = GridPartType.METIS;
            return(grid);



            /*
             * var grd = Grid2D.Cartesian2DGrid(GenericBlas.Linspace(-2, 2, 5), GenericBlas.Linspace(-3, 3, 5), periodicX: m_periodicX, periodicY: m_periodicY);
             *
             * grd.AddPredefinedPartitioning("For4", delegate(double[] X) {
             *  double x = X[0];
             *  double y = X[1];
             *
             *  int row = (y < 0) ? 0 : 1;
             *  int col = (x < 0) ? 0 : 1;
             *
             *  int rank = row * 2 + col;
             *  return rank;
             * });
             *
             * grd.AddPredefinedPartitioning("For2", delegate (double[] X) {
             *  double x = X[0];
             *  double y = X[1];
             *
             *  //int col = (x < 0) ? 0 : 1;
             *  int row = (y > 0) ? 0 : 1;
             *
             *  int rank = row;
             *  return rank;
             * });
             *
             * if (base.MPISize == 4) {
             *  this.m_GridPartitioningType = GridPartType.Predefined;
             *  this.m_GridPartitioningOptions = "For4";
             * } else if (base.MPISize == 2) {
             *  this.m_GridPartitioningType = GridPartType.Predefined;
             *  this.m_GridPartitioningOptions = "For2";
             * } else {
             *  this.m_GridPartitioningType = GridPartType.ParMETIS;
             * }
             * return grd;
             */
        }
        public GridCommons CreateGrid(int Resolution)
        {
            if (Resolution < 1)
            {
                throw new ArgumentException();
            }


            var xNodes = GenericBlas.Linspace(-1.5, 1.5, 18 * Resolution + 1);
            var yNodes = GenericBlas.Linspace(-1.5, 1.5, 18 * Resolution + 1);



            var grd = Grid2D.Cartesian2DGrid(xNodes, yNodes);

            grd.EdgeTagNames.Add(1, "wall_top");
            grd.EdgeTagNames.Add(2, "wall_bottom");
            grd.EdgeTagNames.Add(3, "velocity_inlet_pos");
            grd.EdgeTagNames.Add(4, "velocity_inlet_neg");

            grd.DefineEdgeTags(delegate(double[] X) {
                double x = X[0], y = X[1];
                if (Math.Abs(x - (-1.5)) <= 1.0e-7)
                {
                    // velocity inlet
                    return((byte)3);
                }
                if (Math.Abs(x - (1.5)) <= 1.0e-7)
                {
                    //  velocity inlet (
                    return((byte)4);
                }
                if (Math.Abs(y - (-1.5)) <= 1.0e-7)
                {
                    // bottom wall
                    return((byte)2);
                }
                if (Math.Abs(y - (+1.5)) <= 1.0e-7)
                {
                    // top wall
                    return((byte)1);
                }

                throw new ArgumentOutOfRangeException();
            });

            return(grd);
        }
Exemple #24
0
        /// <summary>
        /// creates a simple 2d/3d bilinear grid;
        /// </summary>


        protected override GridCommons CreateOrLoadGrid()
        {
            // 2d Grid
            // =======
            var xNodes = Grid1D.Linspace(-1, 1, 3);
            var yNodes = Grid1D.Linspace(-1, 1, 3);
            var grd    = Grid2D.Cartesian2DGrid(xNodes, yNodes, CellType.Square_8, false, false);

            //var grd = Grid2D.BilinearSquareGrid(Grid1D.Linspace(-100, 100, 8), Grid1D.Linspace(-100, 100, 8), 0.8, 0, 0, null);
            //var grd = Grid2D.CurvedSquareGrid(Grid1D.Linspace(1, 2, 7), Grid1D.Linspace(0, 1, 16), 9);
            // var grd = Grid2D.CurvedSquareGrid(Grid1D.Linspace(1, 2, 3), Grid1D.Linspace(0, 1, 101), CellType.Square_9, true);
            //var grd = Grid3D.Cartesian3DGrid(Grid1D.Linspace(0, 1, 3), Grid1D.Linspace(0, 1, 3), Grid1D.Linspace(0, 1, 3),false, false, false,CellType.Cube_8);
            //var grd = Grid3D.Cartesian3DGrid(Grid1D.Linspace(-1, 1, 4), Grid1D.Linspace(-1, 1, 4), Grid1D.Linspace(-1, 1, 4),true, true, true, CellType.Cube_Linear);
            //var grd = Grid3D.CylinderGrid(Grid1D.Linspace(1, 2, 4), Grid1D.Linspace(0, 0.25, 4), Grid1D.Linspace(0, 2, 4), CellType.Cube_27, true, true);
            return(grd);
        }
Exemple #25
0
        /// <summary>
        /// Poisson Equation on a (-1,1)x(-1,1), Dirichlet everywhere
        /// </summary>
        public static SipControl RegularSquare(int xRes = 5, int yRes = 5, int deg = 2)
        {
            Func <double[], double> exSol =
                X => - Math.Cos(X[0] * Math.PI * 0.5) * Math.Cos(X[1] * Math.PI * 0.5);
            Func <double[], double> exRhs =
                X => (Math.PI * Math.PI * 0.5 * Math.Cos(X[0] * Math.PI * 0.5) * Math.Cos(X[1] * Math.PI * 0.5)); // == - /\ exSol

            var R = new SipControl();

            R.ProjectName = "ipPoison/square";
            R.savetodb    = false;

            R.FieldOptions.Add("T", new FieldOpts()
            {
                Degree = deg
            });
            R.FieldOptions.Add("Tex", new FieldOpts()
            {
                Degree = 4
            });
            R.InitialValues_Evaluators.Add("RHS", exRhs);
            R.InitialValues_Evaluators.Add("Tex", exSol);
            R.ExactSolution_provided  = true;
            R.SuppressExceptionPrompt = true;
            R.AddBoundaryValue(BoundaryType.Dirichlet.ToString(), "T", exSol);
            R.NoOfSolverRuns = 1;

            R.AdaptiveMeshRefinement = true;
            R.NoOfTimesteps          = 1;

            R.ImmediatePlotPeriod = 1;
            R.SuperSampling       = 2;

            R.GridFunc = delegate() {
                double[] xNodes = GenericBlas.Linspace(-1, 1, xRes);
                double[] yNodes = GenericBlas.Linspace(-1, 1, yRes);
                var      grd    = Grid2D.Cartesian2DGrid(xNodes, yNodes);

                grd.EdgeTagNames.Add(1, BoundaryType.Dirichlet.ToString());
                grd.DefineEdgeTags(delegate(double[] X) {
                    byte ret = 1;
                    return(ret);
                });
                return(grd);
            };
            return(R);
        }
Exemple #26
0
        /// <summary>
        /// Test on a Cartesian grid, with an exact polynomial solution.
        /// </summary>
        public static ippControl TestCartesian1(int xRes = 32, double xStretch = 1.0, int yRes = 16, double yStretch = 1.01, int pDG = 2)
        {
            var RR = new ippControl();

            RR.ProjectName = "ipPoison/cartesian";
            RR.savetodb    = false;

            RR.FieldOptions.Add("T", new FieldOpts()
            {
                Degree = pDG, SaveToDB = FieldOpts.SaveToDBOpt.TRUE
            });
            RR.FieldOptions.Add("Tex", new FieldOpts()
            {
                Degree = pDG
            });
            RR.InitialValues_Evaluators.Add("RHS", X => 1.0);
            RR.InitialValues_Evaluators.Add("Tex", X => (0.5 * X[0].Pow2() - 10 * X[0]));
            RR.ExactSolution_provided = true;

            RR.GridFunc = delegate() {
                double[] xNodes = CreateNodes(xRes, xStretch, 0, 10);
                double[] yNodes = CreateNodes(yRes, yStretch, -1, +1);

                var grd = Grid2D.Cartesian2DGrid(xNodes, yNodes);
                //Console.WriteLine("Achtung: Dreieck-gitter.");
                //var grd = Grid2D.UnstructuredTriangleGrid(xNodes, yNodes);
                return(grd);
            };

            RR.IsDirichlet = delegate(CommonParamsBnd inp) {
                return(Math.Abs(inp.X[0] - 0.0) <= 1.0e-6);
            };
            RR.g_Diri = delegate(CommonParamsBnd inp) {
                return(0.0);
            };
            RR.g_Neum = delegate(CommonParamsBnd inp) {
                return(0.0);
            };

            //RR.solver_name = "direct";
            RR.solver_name = null;

            RR.GridPartType = BoSSS.Foundation.Grid.GridPartType.none;


            return(RR);
        }
        public GridCommons CreateGrid(int Resolution)
        {
            if (Resolution < 1)
            {
                throw new ArgumentException();
            }

            var grd = Grid2D.Cartesian2DGrid(GenericBlas.Linspace(-2, 2, 5 * Resolution + 1), GenericBlas.Linspace(-2, 2, 5 * Resolution + 1));

            //var grd = Grid2D.Cartesian2DGrid(GenericBlas.Linspace(-2, 2, 2), GenericBlas.Linspace(-2, 2, 2));

            grd.EdgeTagNames.Add(1, "Velocity_Inlet");
            grd.DefineEdgeTags(delegate(double[] _X) {
                return(1);
            });

            return(grd);
        }
Exemple #28
0
        public GridCommons CreateGrid()
        {
            var grd = Grid2D.Cartesian2DGrid(GenericBlas.Linspace(0, 1, 4), GenericBlas.Linspace(0, 1, 4));

            grd.EdgeTagNames.Add(1, IncompressibleBcType.Velocity_Inlet.ToString());
            grd.EdgeTagNames.Add(2, outcond.ToString());
            grd.DefineEdgeTags(delegate(double[] _X) {
                double x = _X[0];
                if (Math.Abs(x - 1.0) < 1.0e-6)
                {
                    return(2);
                }

                return(1);
            });

            return(grd);
        }
Exemple #29
0
        protected override GridCommons CreateOrLoadGrid()
        {
            var t = Triangle.Instance;


            var grd = Grid2D.Cartesian2DGrid(GenericBlas.Linspace(-3, 3, 13), GenericBlas.Linspace(-3, 3, 13));

            Array.Sort(grd.Cells, (C1, C2) => (int)(C1.GlobalID - C2.GlobalID));

            int J  = grd.Cells.Length;
            int j0 = grd.CellPartitioning.i0;

            for (int jCell = 0; jCell < J; jCell++)
            {
                Debug.Assert(jCell + j0 == grd.Cells[jCell].GlobalID);
            }

            return(grd);
        }
Exemple #30
0
        static RefineAndLoadBalControl Refine()
        {
            RefineAndLoadBalControl C = new RefineAndLoadBalControl();

            C.GridFunc = delegate() {
                double[] Xnodes = GenericBlas.Linspace(-5, 5, 4);
                double[] Ynodes = GenericBlas.Linspace(-5, 5, 4);
                var      grd    = Grid2D.Cartesian2DGrid(Xnodes, Ynodes);
                return(grd);
            };

            C.LevelSet = (double[] X, double t) => X[0];


            C.NoOfTimesteps = 1;
            C.dtFixed       = 0.0001;


            return(C);
        }