コード例 #1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name = "XOp" ></ param >
        /// < param name="config"></param>
        /// <param name = "BcMap" ></ param >
        /// < param name="LsTrk"></param>
        /// <param name="U0meanrequired"></param>
        public static void AddInterfaceConstitutive(XSpatialOperatorMk2 XOp, IRheology_Configuration config, int D,
                                                    IncompressibleMultiphaseBoundaryCondMap BcMap, LevelSetTracker LsTrk, out bool U0meanrequired)
        {
            U0meanrequired = false;

            for (int d = 0; d < 3; d++)
            {
                AddInterfaceConstitutive_component(XOp, config, d, D, BcMap, LsTrk, out U0meanrequired);
            }
        }
コード例 #2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="XOp"></param>
        /// <param name="config"></param>
        /// <param name="spcName"></param>
        /// <param name="spcId"></param>
        /// <param name="BcMap"></param>
        /// <param name="LsTrk"></param>
        /// <param name="U0meanrequired"></param>
        public static void AddSpeciesConstitutive(XSpatialOperatorMk2 XOp, IRheology_Configuration config, int D, int stressDegree, string spcName, SpeciesId spcId,
                                                  IncompressibleMultiphaseBoundaryCondMap BcMap, LevelSetTracker LsTrk, out bool U0meanrequired)
        {
            if (D > 2)
            {
                throw new NotSupportedException("Viscoelastic solver does not support 3D calculation. Only implemented for 2D cases!");
            }

            U0meanrequired = false;

            for (int d = 0; d < 3; d++)
            {
                AddSpeciesConstitutive_component(XOp, config, d, D, stressDegree, spcName, spcId, BcMap, LsTrk, out U0meanrequired);
            }
        }
コード例 #3
0
        //=======================
        // Constitutive equations fo viscoelastic multiphase flow
        //=======================

        /// <summary>
        ///
        /// </summary>
        /// <param name="XOp"></param>
        /// <param name="d"></param>
        /// <param name="D"></param>
        /// <param name="spcName"></param>
        /// <param name="spcId"></param>
        /// <param name="BcMap"></param>
        /// <param name="config"></param>
        /// <param name="LsTrk"></param>
        /// <param name="U0meanrequired"></param>
        public static void AddSpeciesConstitutive_component(XSpatialOperatorMk2 XOp, IRheology_Configuration config, int d, int D, int stressDegree, string spcName, SpeciesId spcId,
                                                            IncompressibleMultiphaseBoundaryCondMap BcMap, LevelSetTracker LsTrk, out bool U0meanrequired)
        {
            // check input
            if (XOp.IsCommited)
            {
                throw new InvalidOperationException("Spatial Operator is already comitted. Adding of new components is not allowed");
            }

            string CodName;

            if (d == 0)
            {
                CodName = EquationNames.ConstitutiveXX;
            }
            else if (d == 1)
            {
                CodName = EquationNames.ConstitutiveXY;
            }
            else if (d == 2)
            {
                CodName = EquationNames.ConstitutiveYY;
            }
            else
            {
                throw new NotSupportedException("Invalid index (3D not supported), d is: " + d);
            }


            if (!XOp.CodomainVar.Contains(CodName))
            {
                throw new ArgumentException("CoDomain variable \"" + CodName + "\" is not defined in Spatial Operator");
            }

            PhysicalParameters   physParams = config.getPhysParams;
            DoNotTouchParameters dntParams  = config.getDntParams;

            // set species arguments
            double WiSpc, betaSpc, giesekusfactorSpc;

            switch (spcName)
            {
            case "A": { WiSpc = physParams.Weissenberg_a; betaSpc = physParams.beta_a; giesekusfactorSpc = physParams.giesekusfactor_a; break; }

            case "B": { WiSpc = physParams.Weissenberg_b; betaSpc = physParams.beta_b; giesekusfactorSpc = physParams.giesekusfactor_b; break; }

            default: throw new ArgumentException("Unknown species.");
            }

            // set components
            var comps = XOp.EquationComponents[CodName];

            // identity part
            // ===================
            var identity = new IdentityInBulk(d, giesekusfactorSpc, WiSpc, betaSpc, spcName, spcId);

            //var identity = new IdentityInBulk(d, spcName, spcId);
            comps.Add(identity);


            U0meanrequired = false;

            if (config.isOldroydB)
            {
                // convective operator
                // ===================
                var convective = new ConvectiveInBulk(d, BcMap, WiSpc, dntParams.alpha, spcName, spcId);
                comps.Add(convective);
                U0meanrequired = true;

                // objective operator
                // ===================
                var objective = new ObjectiveInBulk(d, BcMap, WiSpc, dntParams.StressPenalty, spcName, spcId);
                comps.Add(objective);
            }

            // viscous operator
            // ==================
            var viscosity = new ViscosityInBulk(d, BcMap, betaSpc, dntParams.Penalty1, spcName, spcId);

            comps.Add(viscosity);

            // artificial diffusion
            // =====================
            if (config.isUseArtificialDiffusion == true)
            {
                throw new NotImplementedException();
                //    if (d == 0)
                //        var diffusion = new DiffusionInBulk(stressDegree, D, ((GridData)GridData).Cells.cj, VariableNames.StressXX);
                //        comps.Add(diffusion);
                //    if (d == 1)
                //         var diffusion = new DiffusionInBulk(stressDegree, D, ((GridData)GridData).Cells.cj, VariableNames.StressXY);
                //        comps.Add(diffusion);
                //    if (d == 2)
                //         var diffusion = new DiffusionInBulk(stressDegree, D, ((GridData)GridData).Cells.cj, VariableNames.StressYY);
                //        comps.Add(diffusion);
            }
        }
コード例 #4
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="XOp"></param>
        /// <param name="config"></param>
        /// <param name="d"></param>
        /// <param name="D"></param>
        /// <param name="BcMap"></param>
        /// <param name="LsTrk"></param>
        public static void AddInterfaceConstitutive_component(XSpatialOperatorMk2 XOp, IRheology_Configuration config, int d, int D,
                                                              IncompressibleMultiphaseBoundaryCondMap BcMap, LevelSetTracker LsTrk, out bool U0meanrequired)
        {
            // check input
            if (XOp.IsCommited)
            {
                throw new InvalidOperationException("Spatial Operator is already comitted. Adding of new components is not allowed");
            }


            string CodName;

            if (d == 0)
            {
                CodName = EquationNames.ConstitutiveXX;
            }
            else if (d == 1)
            {
                CodName = EquationNames.ConstitutiveXY;
            }
            else if (d == 2)
            {
                CodName = EquationNames.ConstitutiveYY;
            }
            else
            {
                throw new NotSupportedException("Invalid index (3D not supported), d is: " + d);
            }

            if (!XOp.CodomainVar.Contains(CodName))
            {
                throw new ArgumentException("CoDomain variable \"" + CodName + "\" is not defined in Spatial Operator");
            }

            PhysicalParameters   physParams = config.getPhysParams;
            DoNotTouchParameters dntParams  = config.getDntParams;

            // set components
            var comps = XOp.EquationComponents[CodName];

            // identity part: local variable, therefore no contribution at interface!
            // ===================

            U0meanrequired = false;

            if (config.isOldroydB)
            {
                // convective operator
                // ===================
                var convective = new ConvectiveAtLevelSet(LsTrk, d, physParams.Weissenberg_a, physParams.Weissenberg_b, dntParams.alpha);
                comps.Add(convective);
                U0meanrequired = true;

                // objective operator
                // ===================
                var objective = new ObjectiveAtLevelSet(LsTrk, d, physParams.Weissenberg_a, physParams.Weissenberg_b);
                comps.Add(objective);
            }

            // viscous operator
            // ==================
            var viscosity = new ViscosityAtLevelSet(LsTrk, d, physParams.beta_a, physParams.beta_b, dntParams.Penalty1, dntParams.UseWeightedAverages);

            comps.Add(viscosity);
        }