Пример #1
0
        /// <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);
        }
Пример #2
0
        /// <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);
        }
Пример #3
0
        /// <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;
 }
Пример #5
0
 /// <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;
 }