コード例 #1
0
        /// <summary>
        /// Calls the calculation of the hydrodynamics
        /// </summary>
        /// <param name="U"></param>
        /// <param name="P"></param>
        /// <param name="levelSetTracker"></param>
        /// <param name="muA"></param>
        public override void UpdateForcesAndTorque(ParticleHydrodynamicsIntegration hydrodynamicsIntegration, double fluidDensity, bool firstIteration, double dt = 0)
        {
            double[] tempForces = new double[m_Dim];
            double   tempTorque = CalculateHydrodynamicTorque(hydrodynamicsIntegration);

            HydrodynamicsPostprocessing(tempTorque);
        }
コード例 #2
0
ファイル: Motion.Dry.cs プロジェクト: rohitvuppala/BoSSS
        /// <summary>
        /// Update Forces and Torque acting from fluid onto the particle
        /// </summary>
        /// <param name="hydrodynamicsIntegration"></param>
        /// <param name="fluidDensity"></param>
        public override Vector CalculateHydrodynamicForces(ParticleHydrodynamicsIntegration hydrodynamicsIntegration, double fluidDensity, CellMask cutCells, double dt)
        {
            Vector tempForces = new Vector(SpatialDim);

            tempForces = CalculateGravitationalForces(fluidDensity, tempForces);
            return(tempForces);
        }
コード例 #3
0
        /// <summary>
        /// Update Forces and Torque acting from fluid onto the particle
        /// </summary>
        /// <param name="U"></param>
        /// <param name="P"></param>
        /// <param name="levelSetTracker"></param>
        /// <param name="fluidViscosity"></param>
        /// <param name="cutCells"></param>
        /// <param name="dt"></param>
        public virtual double CalculateHydrodynamicTorque(ParticleHydrodynamicsIntegration hydrodynamicsIntegration, CellMask cutCells, double dt = 0)
        {
            double tempTorque = hydrodynamicsIntegration.Torque(Position[0], cutCells);

            Aux.TestArithmeticException(tempTorque, "temporal torque during calculation of hydrodynamics");
            TorqueMPISum(ref tempTorque);
            return(tempTorque);
        }
コード例 #4
0
        /// <summary>
        /// Update Forces and Torque acting from fluid onto the particle
        /// </summary>
        /// <param name="U"></param>
        /// <param name="P"></param>
        /// <param name="levelSetTracker"></param>
        /// <param name="fluidViscosity"></param>
        /// <param name="cutCells"></param>
        /// <param name="dt"></param>
        public override double CalculateHydrodynamicTorque(ParticleHydrodynamicsIntegration hydrodynamicsIntegration, CellMask cutCells, double dt)
        {
            double tempTorque = hydrodynamicsIntegration.Torque(GetPosition(0), cutCells);

            Aux.TestArithmeticException(tempTorque, "temporal torque during calculation of hydrodynamics");
            TorqueMPISum(ref tempTorque);
            TorqueAddedDamping(ref tempTorque, dt);
            return(tempTorque);
        }
コード例 #5
0
        /// <summary>
        /// ...
        /// </summary>
        /// <param name="AllParticles"></param>
        /// <param name="hydrodynamicsIntegration"></param>
        /// <param name="fluidDensity"></param>
        /// <param name="underrelax"></param>
        internal void CalculateHydrodynamics(List <Particle> AllParticles, ParticleHydrodynamicsIntegration hydrodynamicsIntegration, double fluidDensity, bool underrelax)
        {
            double[] hydrodynamics = new double[m_Dim * AllParticles.Count() + AllParticles.Count()];
            for (int p = 0; p < AllParticles.Count(); p++)
            {
                Particle currentParticle = AllParticles[p];
                CellMask cutCells        = currentParticle.CutCells_P(m_LsTrk);
                int      offset          = p * (m_Dim + 1);
                double[] tempForces      = currentParticle.Motion.CalculateHydrodynamicForces(hydrodynamicsIntegration, fluidDensity, cutCells);
                double   tempTorque      = currentParticle.Motion.CalculateHydrodynamicTorque(hydrodynamicsIntegration, cutCells);
                for (int d = 0; d < m_Dim; d++)
                {
                    hydrodynamics[offset + d] = tempForces[d];
                }
                hydrodynamics[offset + m_Dim] = tempTorque;
            }
            for (int p = 0; p < AllParticles.Count(); p++)
            {
                Particle currentParticle = AllParticles[p];
                int      offset          = p * (m_Dim + 1);
                if (!currentParticle.IsMaster)
                {
                    continue;
                }
                if (!currentParticle.MasterGhostIDs.IsNullOrEmpty())
                {
                    for (int g = 1; g < currentParticle.MasterGhostIDs.Length; g++)
                    {
                        int ghostOffset = (currentParticle.MasterGhostIDs[g] - 1) * (m_Dim + 1);
                        if (currentParticle.MasterGhostIDs[g] < 1)
                        {
                            continue;
                        }
                        for (int d = 0; d < m_Dim; d++)
                        {
                            hydrodynamics[offset + d]     += hydrodynamics[ghostOffset + d];
                            hydrodynamics[ghostOffset + d] = 0;
                        }
                        hydrodynamics[offset + m_Dim]     += hydrodynamics[ghostOffset + m_Dim];
                        hydrodynamics[ghostOffset + m_Dim] = 0;
                    }
                }
            }
            double[] relaxatedHydrodynamics = hydrodynamics.CloneAs();
            double   omega = AllParticles[0].Motion.omega;

            if (underrelax)
            {
                relaxatedHydrodynamics = HydrodynamicsPostprocessing(hydrodynamics, ref omega);
            }
            AllParticles[0].Motion.omega = omega;
            for (int p = 0; p < AllParticles.Count(); p++)
            {
                Particle currentParticle = AllParticles[p];
                currentParticle.Motion.UpdateForcesAndTorque(p, relaxatedHydrodynamics);
            }
        }
コード例 #6
0
        /// <summary>
        /// Update Forces and Torque acting from fluid onto the particle
        /// </summary>
        /// <param name="hydrodynamicsIntegration"></param>
        /// <param name="fluidDensity"></param>
        public override Vector CalculateHydrodynamicForces(ParticleHydrodynamicsIntegration hydrodynamicsIntegration, double fluidDensity, CellMask cutCells, double dt)
        {
            Vector tempForces = new Vector(hydrodynamicsIntegration.Forces(out List <double[]>[] stressToPrintOut, cutCells));

            currentStress = TransformStressToPrint(stressToPrintOut);
            Aux.TestArithmeticException(tempForces, "temporal forces during calculation of hydrodynamics");
            tempForces = ForcesMPISum(tempForces);
            tempForces = CalculateGravitationalForces(fluidDensity, tempForces);
            return(tempForces);
        }
コード例 #7
0
ファイル: Motion_Dry.cs プロジェクト: rieckmann/BoSSS
        /// <summary>
        /// Overrides the calculation of hydrodynamics for fixed particles, so that nothing happens.
        /// </summary>
        public override void UpdateForcesAndTorque(ParticleHydrodynamicsIntegration hydrodynamicsIntegration = null, double fluidDensity = 0, bool firstIteration = false, double dt = 0)
        {
            double[] tempForces = new double[m_Dim];
            for (int d = 0; d < m_Dim; d++)
            {
                tempForces[d] = Gravity[d] * Density * ParticleArea;
            }
            double tempTorque = 0;

            HydrodynamicsPostprocessing(tempForces, tempTorque);
        }
コード例 #8
0
 /// <summary>
 /// Calls the calculation of the hydrodynamics
 /// </summary>
 /// <param name="U"></param>
 /// <param name="P"></param>
 /// <param name="levelSetTracker"></param>
 /// <param name="fluidViscosity"></param>
 public override void UpdateForcesAndTorque(ParticleHydrodynamicsIntegration hydrodynamicsIntegration, double fluidDensity, bool firstIteration, double dt = 0)
 {
     double[] tempForces = CalculateHydrodynamicForces(hydrodynamicsIntegration, fluidDensity);
     HydrodynamicsPostprocessing(tempForces);
 }
コード例 #9
0
 /// <summary>
 /// Update Forces and Torque acting from fluid onto the particle
 /// </summary>
 /// <param name="U"></param>
 /// <param name="P"></param>
 /// <param name="levelSetTracker"></param>
 /// <param name="fluidViscosity"></param>
 /// <param name="cutCells"></param>
 /// <param name="dt"></param>
 public override double CalculateHydrodynamicTorque(ParticleHydrodynamicsIntegration hydrodynamicsIntegration, CellMask cutCells, double dt)
 {
     return(0);
 }
コード例 #10
0
 /// <summary>
 /// Update Forces and Torque acting from fluid onto the particle
 /// </summary>
 /// <param name="hydrodynamicsIntegration"></param>
 /// <param name="fluidDensity"></param>
 public override Vector CalculateHydrodynamicForces(ParticleHydrodynamicsIntegration hydrodynamicsIntegration, double fluidDensity, CellMask cutCells, double dt)
 {
     return(new Vector(SpatialDim));
 }