/// <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); }
//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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
/// <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); }
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); }
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); }
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); }
/// <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); }
/// <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); }
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); }
/// <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); }
/// <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); }
/// <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); }
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); }
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); }
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); }