Пример #1
0
        /// <summary>
        /// returns
        /// \f[
        ///   \vec{v} \cdot \phi,
        /// \f]
        /// where \f$ \vec{v}\f$  is the linearization point.
        /// </summary>
        protected override void Flux(ref Foundation.CommonParamsVol inp, double[] U, double[] output)
        {
            double u = inp.Parameters[0];
            double v = inp.Parameters[1];

            output[0] = u * U[0];
            output[1] = v * U[0];
            if (m_SpatialDimension == 3)
            {
                double w = inp.Parameters[2];
                output[2] = w * U[0];
            }
            if (m_bcmap.PhysMode == PhysicsMode.LowMach)
            {
                double rho = EoS.GetDensity(inp.Parameters[2 * m_SpatialDimension]);
                for (int d = 0; d < m_SpatialDimension; d++)
                {
                    output[d] *= rho;
                }
            }

            if (m_bcmap.PhysMode == PhysicsMode.Combustion)
            {
                double[] args = new double[NumberOfReactants + 1];
                for (int n = 0; n < NumberOfReactants + 1; n++)
                {
                    args[n] = inp.Parameters[2 * m_SpatialDimension + n];
                }
                double rho = EoS.GetDensity(args);
                for (int d = 0; d < m_SpatialDimension; d++)
                {
                    output[d] *= rho;
                }
            }
        }
Пример #2
0
        protected override void Flux(ref Foundation.CommonParamsVol inp, double[] U, double[] output)
        {
            int D = output.Length;

            Array.Clear(output, 0, D);

            switch (Bcmap.PhysMode)
            {
            case PhysicsMode.Incompressible:
                output[Component] = U[0];
                break;

            case PhysicsMode.LowMach:
            case PhysicsMode.Multiphase:
                output[Component] = EoS.GetDensity(inp.Parameters[0]) * U[0];
                break;

            case PhysicsMode.Combustion:
                output[Component] = EoS.GetDensity(inp.Parameters) * U[0];
                break;

            default:
                throw new ApplicationException("PhysicsMode not implemented");
            }
        }
Пример #3
0
        void Flux(ref Foundation.CommonParamsVol inp, double[] U, double[] output)
        {
            int D = output.Length;

            Array.Clear(output, 0, D);
            double[] DensityArguments; // Arguments used to calculate the density with the EoS
            switch (Bcmap.PhysMode)
            {
            case PhysicsMode.Incompressible:
                output[Component] = U[Component];
                break;

            case PhysicsMode.MixtureFraction:
                output[Component] = EoS.getDensityFromZ(U[inp.D]) * U[Component];
                break;

            case PhysicsMode.LowMach:
            case PhysicsMode.Multiphase:
                DensityArguments  = U.GetSubVector(m_SpatialDimension, 1);
                output[Component] = EoS.GetDensity(DensityArguments) * U[Component];
                break;

            case PhysicsMode.Combustion:
                DensityArguments  = U.GetSubVector(m_SpatialDimension, NumberOfSpecies);     //MassFraction4 does not exist as a variable, because it is just calculated at the end of each iteration
                output[Component] = EoS.GetDensity(DensityArguments) * U[Component];
                break;

            default:
                throw new ApplicationException("PhysicsMode not implemented");
            }
        }
Пример #4
0
        /// <summary>
        /// returns
        /// \f[
        ///   \vec{v} \cdot \phi,
        /// \f]
        /// where \f$ \vec{v}\f$  is the linearization point.
        /// </summary>
        void Flux(ref Foundation.CommonParamsVol inp, double[] U, double[] output)
        {
            double u = U[0];
            double v = U[1];

            output[0] = u * U[argumentIndex];
            output[1] = v * U[argumentIndex];

            if (m_SpatialDimension == 3)
            {
                double w = U[2];
                output[2] = w * U[argumentIndex];
            }


            double rho;

            switch (m_bcmap.PhysMode)
            {
            case PhysicsMode.Incompressible:
                rho = 1.0;
                break;

            case PhysicsMode.MixtureFraction:
                rho = EoS.getDensityFromZ(U[inp.D]);
                break;

            case PhysicsMode.LowMach:
                double[] DensityArguments = U.GetSubVector(m_SpatialDimension, 1);
                rho = EoS.GetDensity(DensityArguments);
                break;

            case PhysicsMode.Combustion:
                double[] DensityArguments2 = U.GetSubVector(m_SpatialDimension, NumberOfReactants);     // T, Y0,Y1,Y2
                rho = EoS.GetDensity(DensityArguments2);
                break;

            default:
                throw new NotImplementedException("not implemented physics mode");
            }


            for (int d = 0; d < m_SpatialDimension; d++)
            {
                output[d] *= rho;
            }


            for (int d = 0; d < m_SpatialDimension; d++)
            {
                if (double.IsNaN(output[d]))
                {
                    throw new NotFiniteNumberException();
                }
            }
        }
Пример #5
0
        /// <summary>
        /// Volume integrand of the SIP
        /// </summary>
        public double VolumeForm(ref Foundation.CommonParamsVol cpv, double[] U, double[,] GradU, double V, double[] GradV)
        {
            double acc = 0;

            for (int d = 0; d < cpv.D; d++)
            {
                acc -= GradU[0, d] * GradV[d] * this.Nu(cpv.Xglobal, cpv.Parameters, cpv.jCell) * this.m_alpha;
            }
            return(acc);
        }
Пример #6
0
        public override double VolumeForm(ref Foundation.CommonParamsVol cpv, double[] U, double[,] GradU, double V, double[] GradV)
        {
            double acc = 0;

            for (int d = 0; d < cpv.D; d++)
            {
                acc -= GradU[d, d] * GradV[base.m_iComp] * Viscosity(cpv.Parameters) * base.m_alpha;
            }
            return(acc * (2.0 / 3.0));
        }
Пример #7
0
        //public override IList<string> ArgumentOrdering
        //{
        //    get
        //    {
        //        return new string[] { VariableNames.Velocity_d(m_iComp) };
        //    }
        //}

        public override double VolumeForm(ref Foundation.CommonParamsVol cpv, double[] U, double[,] GradU, double V, double[] GradV)
        {
            double acc = 0;

            for (int d = 0; d < cpv.D; d++)
            {
                //acc -= GradU[0, d] * GradV[d] * Viscosity(cpv.Parameters) * base.m_alpha;
                acc -= GradU[m_iComp, d] * GradV[d] * Viscosity(cpv.Parameters) * base.m_alpha;
            }
            return(-acc);
        }
Пример #8
0
        public double VolumeForm(ref Foundation.CommonParamsVol cpv, double[] U, double[,] GradU, double V, double[] GradV)
        {
            double Acc = 0;

            for (int d = 0; d < m_D; d++)
            {
                Acc += U[d] * GradV[d];
            }

            return(-Acc);
        }
 /// <summary>
 /// returns
 /// \f[
 ///   \vec{v} \cdot \phi,
 /// \f]
 /// where \f$ \vec{v}\f$  is the linearization point.
 /// </summary>
 protected void Flux(ref Foundation.CommonParamsVol inp, double[] U, double[] output)
 {
     for (int i = 0; i < m_SpatialDimension; ++i)
     {
         output[i] = U[i] * GetScalar(U);
         if (double.IsNaN(output[i]))
         {
             throw new NotFiniteNumberException();
         }
     }
 }
Пример #10
0
        public override double VolumeForm(ref Foundation.CommonParamsVol cpv, double[] U, double[,] GradU, double V, double[] GradV)
        {
            double acc = 0;

            for (int d = 0; d < cpv.D; d++)
            {
                // we want to:
                //    sum(  \partial_{m_iComp} u_d  * \partial_{d} v, d=0..D-1)
                acc += GradU[d, base.m_iComp] * GradV[d] * Viscosity(cpv.Parameters) * base.m_alpha;
            }
            return(acc);
        }
Пример #11
0
        public double VolumeForm(ref Foundation.CommonParamsVol cpv, double[] U, double[,] GradU, double V, double[] GradV)
        {
            double acc = 0;

            for (int d = 0; d < cpv.D; d++)
            {
                acc += GradU[0, d] * GradV[d] * Viscosity;
            }

            acc -= rhs(cpv.Xglobal, cpv.time) * V;

            return(acc);
        }
Пример #12
0
        public double VolumeForm(ref Foundation.CommonParamsVol cpv, double[] U, double[,] GradU, double V, double[] GradV)
        {
            double acc = 0;

            for (int d = 0; d < cpv.D; d++)
            {
                acc -= GradU[0, d] * GradV[d];
            }

            if (acc != 0.0)
            {
                acc *= Conductivity(cpv.Parameters) * this.m_alpha;
            }
            return(-acc);
        }
Пример #13
0
        protected override void Flux(ref Foundation.CommonParamsVol inp, double[] U, double[] output)
        {
            double rho  = EoS.GetDensity(inp.Parameters[2 * SpatDimension]);
            double Temp = U[0];
            double u_1  = inp.Parameters[0];
            double u_2  = inp.Parameters[1];

            output[0] = rho * Temp * u_1;
            output[1] = rho * Temp * u_2;

            if (SpatDimension == 3)
            {
                double u_3 = inp.Parameters[2];
                output[2] = rho * Temp * u_3;
            }
        }
Пример #14
0
        protected override void Flux(ref Foundation.CommonParamsVol inp, double[] U, double[] output)
        {
            base.Flux(ref inp, U, output);
            //switch (m_varMode) {
            //    case EquationAndVarMode.u_p:
            //    BLAS.dscal(output.Length, oneOverRho, output, 1);
            //    break;

            //    case EquationAndVarMode.u_p_2:
            //    case EquationAndVarMode.mom_p:
            //    case EquationAndVarMode.u_Psi:
            //    // nop
            //    break;

            //    default:
            //    throw new NotImplementedException();
            //}
        }
Пример #15
0
        /// <summary>
        /// returns
        /// \f[
        ///   \vec{v} \cdot \phi,
        /// \f]
        /// where \f$ \vec{v}\f$  is the linearization point.
        /// </summary>
        protected override void Flux(ref Foundation.CommonParamsVol inp, double[] U, double[] output)
        {
            double u = inp.Parameters[0];
            double v = inp.Parameters[1];

            output[0] = u * U[0];
            output[1] = v * U[0];
            if (m_SpatialDimension == 3)
            {
                double w = inp.Parameters[2];
                output[2] = w * U[0];
            }

            if (m_bcmap.PhysMode == PhysicsMode.LowMach)
            {
                double rho = EoS.GetDensity(inp.Parameters[2 * m_SpatialDimension]);
                for (int d = 0; d < m_SpatialDimension; d++)
                {
                    output[d] *= rho;
                }
            }
        }
Пример #16
0
 protected override void Flux(ref Foundation.CommonParamsVol inp, double[] U, double[] output)
 {
     output[0] = -alpha * U[0];
 }
Пример #17
0
 protected override void Flux(ref Foundation.CommonParamsVol inp, double[] U, double[] output)
 {
     output[0] = U[0] * m_factor;
 }
Пример #18
0
 abstract public double VolumeForm(ref Foundation.CommonParamsVol cpv, double[] U, double[,] GradU, double V, double[] GradV);
Пример #19
0
 protected override void Flux(ref Foundation.CommonParamsVol inp, double[] U, double[] output)
 {
     base.Flux(ref inp, U, output);
     output.ScaleV(cap);
 }