/// <summary> /// Test cases using an <see cref="IdealGas"/> /// </summary> /// <returns></returns> public static RinglebControl RinglebIdealGasTest() { RinglebControl c = GetTemplate(2, new StiffenedGas(1.4, 0.0)); c.GridGuid = new Guid("499a52ea-9a36-48c4-9c3a-a13d1414b936"); c.ConvectiveFluxType = Convection.ConvectiveFluxTypes.Rusanov; c.Queries.Add("L2ErrorEntropy", QueryLibrary.L2Error(CNSVariables.Entropy, (X, t) => 0.7142857142857142)); return(c); }
/// <summary> /// Test cases using a <see cref="StiffenedGas"/> /// </summary> /// <returns></returns> public static RinglebControl RinglebStiffenedGasTest() { RinglebControl c = GetTemplate(2, new StiffenedGas(7.0, 10.0)); c.GridGuid = new Guid("f5a0fea5-156d-42ce-abf2-a418469140bb"); c.ConvectiveFluxType = Convection.ConvectiveFluxTypes.Rusanov; c.RinglebReferenceSpeedOfSound = 5.0; c.RinglebReferenceTotalPressure = 30.0; c.Queries.Add("L2ErrorEntropy", QueryLibrary.L2Error(CNSVariables.Entropy, (X, t) => 1.80939686135e-6)); return(c); }
/// <summary> /// Common settings for all tests within this set of test cases /// </summary> /// <param name="dgDegree"></param> /// <param name="eos"></param> /// <returns></returns> private static RinglebControl GetTemplate(int dgDegree, StiffenedGas eos) { RinglebControl c = new RinglebControl(); c.DbPath = "../../Tests/Ringleb/ringlebTests.zip"; c.savetodb = false; c.ActiveOperators = Operators.Convection; c.EquationOfState = eos; c.ExplicitScheme = ExplicitSchemes.RungeKutta; c.ExplicitOrder = 4; c.MachNumber = 1 / Math.Sqrt(c.EquationOfState.HeatCapacityRatio); c.AddVariable(CompressibleVariables.Density, dgDegree); c.AddVariable(CompressibleVariables.Momentum.xComponent, dgDegree); c.AddVariable(CompressibleVariables.Momentum.yComponent, dgDegree); c.AddVariable(CompressibleVariables.Energy, dgDegree); c.AddVariable(CNSVariables.Pressure, dgDegree); c.AddVariable(CNSVariables.Entropy, dgDegree); Func <double[], RinglebExactSolution.FlowState> solution = X => RinglebExactSolution.GetFlowState( X[0], X[1], eos.HeatCapacityRatio, eos.ReferencePressure, c.RinglebReferenceSpeedOfSound, c.RinglebReferenceTotalPressure); c.InitialValues_Evaluators.Add(CompressibleVariables.Density, X => solution(X).Density); c.InitialValues_Evaluators.Add(CompressibleVariables.Momentum.xComponent, X => solution(X).Momentum[0]); c.InitialValues_Evaluators.Add(CompressibleVariables.Momentum.yComponent, X => solution(X).Momentum[1]); c.InitialValues_Evaluators.Add(CompressibleVariables.Energy, X => solution(X).Energy); c.AddBoundaryValue("ringleb"); c.Queries.Add("L2ErrorDensity", QueryLibrary.L2Error(CompressibleVariables.Density, (X, t) => solution(X).Density)); c.Queries.Add("L2ErrorPressure", QueryLibrary.L2Error(CNSVariables.Pressure, (X, t) => solution(X).Pressure)); c.dtMin = 0.0; c.dtMax = 1.0; c.CFLFraction = 0.5; c.Endtime = double.MaxValue; c.NoOfTimesteps = 50; return(c); }
/// <summary> /// Constructs a new boundary state /// </summary> /// <param name="control"></param> public ExactRinglebBoundaryState(RinglebControl control) : base(control) { this.control = control; }
/// <summary> /// Constructs a new map /// </summary> /// <param name="gridData"></param> /// <param name="control"></param> public RinglebBoundaryConditionMap(GridData gridData, RinglebControl control) : base(gridData, control) { this.ringlebControl = control; }