コード例 #1
0
 /// <summary>
 /// passes the coefficients to original form
 /// </summary>
 public void CoefficientUpdate(CoefficientSet cs, int[] DomainDGdeg, int TestDGdeg)
 {
     if (m_OrgForm is IEquationComponentCoefficient eqc)
     {
         eqc.CoefficientUpdate(cs, DomainDGdeg, TestDGdeg);
     }
 }
コード例 #2
0
 /// <summary>
 /// update the coefficient such as the current Weissenberg number
 /// </summary>
 public void CoefficientUpdate(CoefficientSet cs, int[] DomainDGdeg, int TestDGdeg)
 {
     if (cs.UserDefinedValues.Keys.Contains("Weissenbergnumber"))
     {
         weissenberg = (double)cs.UserDefinedValues["Weissenbergnumber"];
     }
 }
コード例 #3
0
 public void CoefficientUpdate(CoefficientSet csA, CoefficientSet csB, int[] DomainDGdeg, int TestDGdeg)
 {
     if (csA.UserDefinedValues.Keys.Contains("EvapMicroRegion"))
     {
         evapMicroRegion = (BitArray)csA.UserDefinedValues["EvapMicroRegion"];
     }
 }
コード例 #4
0
 public void CoefficientUpdate(CoefficientSet cs, int[] DomainDGdeg, int TestDGdeg)
 {
     if (cs.UserDefinedValues.Keys.Contains("time"))
     {
         time = (double)cs.UserDefinedValues["time"];
     }
 }
コード例 #5
0
 public void CoefficientUpdate(CoefficientSet cs, int[] DomainDGdeg, int TestDGdeg)
 {
     if (cs.UserDefinedValues.Keys.Contains("Weissenbergnumber")) {
         m_Weissenberg = (double)cs.UserDefinedValues["Weissenbergnumber"];
         //Console.WriteLine("Weissenbergnumber = {0}", m_Weissenberg);
     }
 }
コード例 #6
0
ファイル: SIPDiffusion.cs プロジェクト: rieckmann/BoSSS
 /// <summary>
 ///
 /// </summary>
 public void CoefficientUpdate(CoefficientSet cs, int[] DomainDGdeg, int TestDGdeg)
 {
     if (cs.UserDefinedValues.Keys.Contains("Reynolds"))
     {
         m_Reynolds = (double)cs.UserDefinedValues["Reynolds"];
     }
 }
コード例 #7
0
        public override void CoefficientUpdate(CoefficientSet csA, CoefficientSet csB, int[] DomainDGdeg, int TestDGdeg)
        {
            base.CoefficientUpdate(csA, csB, DomainDGdeg, TestDGdeg);

            NegLengthScaleS = csA.CellLengthScales;
            PosLengthScaleS = csB.CellLengthScales;
        }
コード例 #8
0
 /// <summary>
 /// Da number used within the homotopie algorithm
 /// </summary>
 /// <param name="cs"></param>
 /// <param name="DomainDGdeg"></param>
 /// <param name="TestDGdeg"></param>
 public void CoefficientUpdate(CoefficientSet cs, int[] DomainDGdeg, int TestDGdeg)
 {
     if (cs.UserDefinedValues.Keys.Contains("Damkoehler"))
     {
         m_Da = (double)cs.UserDefinedValues["Damkoehler"];
     }
 }
コード例 #9
0
 /// <summary>
 /// Called by
 /// <see cref="XSpatialOperatorMk2.XEvaluatorNonlin.Evaluate{Tout}(double, double, Tout, double[])"/>
 /// resp.
 /// <see cref="XSpatialOperatorMk2.XEvaluatorLinear.ComputeMatrix{M, V}(M, V)"/>.
 /// </summary>
 public void CoefficientUpdate(CoefficientSet csA, CoefficientSet csB, int[] DomainDGdeg, int TestDGdeg)
 {
     NegCellLengthScaleS = csA.CellLengthScales;
     if (csB != null)
     {
         PosCellLengthScaleS = csB.CellLengthScales;
     }
 }
コード例 #10
0
 override public void CoefficientUpdate(CoefficientSet cs, int[] DomainDGdeg, int TestDGdeg)
 {
     base.CoefficientUpdate(cs, DomainDGdeg, TestDGdeg);
     if (cs.CellLengthScales == null)
     {
         throw new ArgumentException("Internal Error - no cell Lengths provided.");
     }
     this.m_LenScales = cs.CellLengthScales;
 }
コード例 #11
0
        public void CoefficientUpdate(CoefficientSet csA, CoefficientSet csB, int[] DomainDGdeg, int TestDGdeg)
        {
            NegLengthScaleS = csA.CellLengthScales;
            PosLengthScaleS = csB.CellLengthScales;

            if (csA.UserDefinedValues.Keys.Contains("EvapMicroRegion"))
            {
                evapMicroRegion = (BitArray)csA.UserDefinedValues["EvapMicroRegion"];
            }
        }
コード例 #12
0
        public virtual void CoefficientUpdate(CoefficientSet csA, CoefficientSet csB, int[] DomainDGdeg, int TestDGdeg)
        {
            if (csA.UserDefinedValues.Keys.Contains("EvapMicroRegion"))
            {
                evapMicroRegion = (BitArray)csA.UserDefinedValues["EvapMicroRegion"];
            }

            if (csA.UserDefinedValues.Keys.Contains("prescribedMassflux"))
            {
                MEvapIsPrescribd = true;
                prescrbMEvap     = (double)csA.UserDefinedValues["prescribedMassflux"];
            }
        }
コード例 #13
0
        /// <summary>
        /// Update of penalty length scales.
        /// </summary>
        /// <param name="cs"></param>
        /// <param name="DomainDGdeg"></param>
        /// <param name="TestDGdeg"></param>
        public virtual void CoefficientUpdate(CoefficientSet cs, int[] DomainDGdeg, int TestDGdeg)
        {
            m_D = cs.GrdDat.SpatialDimension;
            double _D = m_D;
            double _p = DomainDGdeg.Max();

            double penalty_deg_tri = (_p + 1) * (_p + _D) / _D;     // formula for triangles/tetras
            double penalty_deg_sqr = (_p + 1.0) * (_p + 1.0);       // formula for squares/cubes

            m_penalty = Math.Max(penalty_deg_tri, penalty_deg_sqr); // the conservative choice

            cj = cs.CellLengthScales;
        }
コード例 #14
0
        public void CoefficientUpdate(CoefficientSet csA, CoefficientSet csB, int[] DomainDGdeg, int TestDGdeg)
        {
            NegLengthScaleS = csA.CellLengthScales;
            PosLengthScaleS = csB.CellLengthScales;

            if (csA.UserDefinedValues.Keys.Contains("Weissenbergnumber"))
            {
                WeissenbergA = (double)csA.UserDefinedValues["Weissenbergnumber"];
            }

            if (csB.UserDefinedValues.Keys.Contains("Weissenbergnumber"))
            {
                WeissenbergB = (double)csB.UserDefinedValues["Weissenbergnumber"];
            }
        }
コード例 #15
0
        public async Task <Temps> ReadThermometer(int index)
        {
            if (index < 0 || index > 7)
            {
                throw new IndexOutOfRangeException("Index must be from 0-7");
            }

            using (await this.thermometerLock.LockAsync())
            {
                await this.initTask;

                double    sum        = 0;
                const int numSamples = 3;
                for (int i = 0; i < numSamples; i++)
                {
                    var reading = this.mcp.Read(Channels[index]);
                    sum += reading.NormalizedValue;
                    await Task.Delay(100);
                }

                double averageValue = sum / numSamples;

                //Debug.WriteLine($"Reading for thermometer {index} is {reading.RawValue}, Normalized: {reading.NormalizedValue}");

                double voltage    = averageValue * InputVoltage;
                double resistance = TempUtils.GetThermistorResistenceFromVoltage(3.3, voltage, BalancingResistorOhms);
                //Debug.WriteLine($"Got Resistance {resistance} from voltage {voltage}");

                CoefficientSet coefficients = Coefficients[0];

                var temps = new Temps();
                if (double.IsInfinity(resistance))
                {
                    temps.Kelvin = 0;
                }
                else
                {
                    temps.Kelvin = TempUtils.ResistanceToTemp(coefficients.A, coefficients.B, coefficients.C, resistance);
                }

                temps.Celcius     = TempUtils.KelvinToCelcius(temps.Kelvin);
                temps.Farenheight = TempUtils.CelciusToFarenheight(temps.Celcius);

                return(temps);
            }
        }
コード例 #16
0
ファイル: swipViscosity.cs プロジェクト: shanxiangjun/BoSSS
        /// <summary>
        /// Update of penalty length scales.
        /// </summary>
        /// <param name="cs"></param>
        /// <param name="DomainDGdeg"></param>
        /// <param name="TestDGdeg"></param>
        public void CoefficientUpdate(CoefficientSet cs, int[] DomainDGdeg, int TestDGdeg)
        {
            m_D = cs.GrdDat.SpatialDimension;
            double _D = m_D;
            double _p = DomainDGdeg.Max();

            double penalty_deg_tri = (_p + 1) * (_p + _D) / _D;     // formula for triangles/tetras
            double penalty_deg_sqr = (_p + 1.0) * (_p + 1.0);       // formula for squares/cubes

            m_penalty = Math.Max(penalty_deg_tri, penalty_deg_sqr); // the conservative choice

            cj = cs.CellLengthScales;

            if (cs.UserDefinedValues.Keys.Contains("SlipLengths"))
            {
                Lslip = (MultidimensionalArray)cs.UserDefinedValues["SlipLengths"];
            }
        }
コード例 #17
0
ファイル: SIPDiffusion.cs プロジェクト: rohitvuppala/BoSSS
        /// <summary>
        /// Update of penalty length scales.
        /// </summary>
        /// <param name="cs"></param>
        /// <param name="DomainDGdeg"></param>
        /// <param name="TestDGdeg"></param>
        public void CoefficientUpdate(CoefficientSet cs, int[] DomainDGdeg, int TestDGdeg)
        {
            m_D = cs.GrdDat.SpatialDimension;
            double _D = m_D;
            double _p = DomainDGdeg.Max();

            double penalty_deg_tri = (_p + 1) * (_p + _D) / _D;     // formula for triangles/tetras
            double penalty_deg_sqr = (_p + 1.0) * (_p + 1.0);       // formula for squares/cubes

            m_penalty = Math.Max(penalty_deg_tri, penalty_deg_sqr); // the conservative choice

            cj = cs.CellLengthScales;

            // Set the Reynolds number to a user defined value contained in the CoefficientSet cs
            // Useful in case that the Reynolds number changes during a simulation...
            if (cs.UserDefinedValues.Keys.Contains("Reynolds"))
            {
                m_Reynolds = (double)cs.UserDefinedValues["Reynolds"];
            }
        }
コード例 #18
0
 public void CoefficientUpdate(CoefficientSet cs, int[] DomainDGdeg, int TestDGdeg)
 {
     owner.CoefficientUpdate(cs, DomainDGdeg, TestDGdeg);
 }
コード例 #19
0
ファイル: PressureStabilization.cs プロジェクト: xyuan/BoSSS
 public void CoefficientUpdate(CoefficientSet cs, int[] DomainDGdeg, int TestDGdeg)
 {
     h_max_Edge = cs.EdgeLengthScales;
 }
コード例 #20
0
ファイル: Extender.cs プロジェクト: rohitvuppala/BoSSS
        /// <summary>
        /// Create Spatial Operators and build the corresponding Matrices
        /// </summary>
        public void ComputeMatrices(IList <DGField> InterfaceParams, bool nearfield)
        {
            OpMatrix = new MsrMatrix(this.Extension.Mapping, this.Extension.Mapping);
            OpAffine = new double[OpMatrix.RowPartitioning.LocalLength];

            OpMatrix_bulk = new MsrMatrix(this.Extension.Mapping, this.Extension.Mapping);
            OpAffine_bulk = new double[OpMatrix.RowPartitioning.LocalLength];

            OpMatrix_interface = new MsrMatrix(this.Extension.Mapping, this.Extension.Mapping);
            OpAffine_interface = new double[OpMatrix.RowPartitioning.LocalLength];


            //LevelSetTracker.GetLevelSetGradients(0,);

            // bulk part of the matrix
            //Operator_bulk.ComputeMatrix(
            //    Extension.Mapping,
            //    LevelSetGradient.ToArray(),
            //    Extension.Mapping,
            //    OpMatrix_bulk, OpAffine_bulk,
            //    OnlyAffine: false, sgrd: null);

            switch (Control.FluxVariant)
            {
            case FluxVariant.GradientBased:
                // Flux Direction based on Mean Level Set Gradient
                BulkParams = new List <DGField> {
                };                                      // Hack, to make ArrayTools.Cat produce a List of DGFields
                // second Hack: Does only work, when InterfaceParams is according to a single component flux,
                // else, we will have to change the boundary edge flux
                BulkParams = ArrayTools.Cat(BulkParams, LevelSetGradient.ToArray(), Phi, MeanLevelSetGradient.ToArray(), InterfaceParams.ToArray());
                MeanLevelSetGradient.Clear();
                MeanLevelSetGradient.AccLaidBack(1.0, LevelSetGradient);
                break;

            case FluxVariant.ValueBased:
                // Flux Direction Based on Cell-Averaged Level-Set Value
                BulkParams = ArrayTools.Cat(LevelSetGradient.ToArray(), Phi, MeanLevelSet);
                MeanLevelSet.Clear();
                MeanLevelSet.AccLaidBack(1.0, Phi);
                break;

            case FluxVariant.SWIP:
                BulkParams = LevelSetGradient.ToArray();
                break;

            default:
                throw new Exception();
            }

            // Build Operator

            Operator_bulk.ComputeMatrixEx(Extension.Mapping,
                                          BulkParams,
                                          Extension.Mapping,
                                          OpMatrix_bulk, OpAffine_bulk,
                                          OnlyAffine: false,
                                          time: 0.0,
                                          edgeQuadScheme: new EdgeQuadratureScheme(true, nearfield ? LevelSetTracker.Regions.GetNearFieldSubgrid(1).InnerEdgesMask : null),
                                          volQuadScheme: new CellQuadratureScheme(true, nearfield ? LevelSetTracker.Regions.GetNearFieldSubgrid(1).VolumeMask : null)
                                          );



            //Operator_interface.ComputeMatrixEx(
            //    LevelSetTracker,
            //    Extension.Mapping,
            //    InterfaceParams,
            //    Extension.Mapping,
            //    OpMatrix_interface,
            //    OpAffine_interface,
            //    OnlyAffine: false,
            //    time: 0,
            //    MPIParameterExchange: false,
            //    whichSpc: LevelSetTracker.GetSpeciesId("A")
            //    );

            Operator_interface.OperatorCoefficientsProvider =
                delegate(LevelSetTracker lstrk, SpeciesId spc, int quadOrder, int TrackerHistoryIdx, double time) {
                var r = new CoefficientSet()
                {
                };

                //throw new NotImplementedException("todo");
                return(r);
            };
            XSpatialOperatorMk2.XEvaluatorLinear mtxBuilder = Operator_interface.GetMatrixBuilder(LevelSetTracker,
                                                                                                  Extension.Mapping, InterfaceParams, Extension.Mapping);

            MultiphaseCellAgglomerator dummy = LevelSetTracker.GetAgglomerator(LevelSetTracker.SpeciesIdS.ToArray(), 2 * Extension.Basis.Degree + 2, 0.0);

            mtxBuilder.CellLengthScales.Add(LevelSetTracker.GetSpeciesId("A"), dummy.CellLengthScales[LevelSetTracker.GetSpeciesId("A")]);

            mtxBuilder.time           = 0;
            mtxBuilder.MPITtransceive = false;
            mtxBuilder.ComputeMatrix(OpMatrix_interface, OpAffine_interface);

#if DEBUG
            OpMatrix_bulk.CheckForNanOrInfM();
            OpAffine_bulk.CheckForNanOrInfV();

            OpMatrix_interface.CheckForNanOrInfM();
            OpAffine_interface.CheckForNanOrInfV();
#endif

            //Only for Debugging purposes

            Debug.Assert(OpMatrix_interface.GetDiagVector().L2Norm() > 0, "L2-Norm of Diagonal of InterfaceOperator is 0");
            Debug.Assert(OpMatrix_bulk.GetDiagVector().L2Norm() > 0, "L2-Norm of Diagonal of BulkOperator is 0");
#if DEBUG
            //Console.WriteLine( "L2-Norm of Diagonal of InterfaceOperator is {0}", OpMatrix_interface.GetDiagVector().L2Norm() );
#endif
            OpMatrix.Clear();
            OpMatrix.Acc(1.0, OpMatrix_bulk);
            OpMatrix.Acc(1.0, OpMatrix_interface);
            //Console.WriteLine("Op-Matrix Symmetry-Deviation: {0}", OpMatrix.SymmetryDeviation());
            OpMatrix.AssumeSymmetric = false;

            OpAffine.Clear();
            OpAffine.AccV(1.0, OpAffine_bulk);
            OpAffine.AccV(1.0, OpAffine_interface);
#if DEBUG
            //Console.WriteLine("Condition Number of Extension Operator {0}", OpMatrix.condest());
#endif
        }
コード例 #21
0
 public void CoefficientUpdate(CoefficientSet cs, int[] DomainDGdeg, int TestDGdeg)
 {
     SubGrdMask = lsTrk.Regions.GetSpeciesSubGrid(m_spcId).VolumeMask.GetBitMaskWithExternal();
 }
コード例 #22
0
ファイル: XLaplace.cs プロジェクト: shanxiangjun/BoSSS
        override public void CoefficientUpdate(CoefficientSet cs, int[] DomainDGdeg, int TestDGdeg)
        {
            base.CoefficientUpdate(cs, DomainDGdeg, TestDGdeg);

            this.m_LenScales = cs.CellLengthScales;
        }
コード例 #23
0
 public void CoefficientUpdate(CoefficientSet csA, CoefficientSet csB, int[] DomainDGdeg, int TestDGdeg)
 {
     NegLengthScaleS = csA.CellLengthScales;
     PosLengthScaleS = csB.CellLengthScales;
 }
コード例 #24
0
ファイル: HeatFlux.cs プロジェクト: xyuan/BoSSS
 public void CoefficientUpdate(CoefficientSet cs, int[] DomainDGdeg, int TestDGdeg)
 {
     m_LengthScales = cs.CellLengthScales;
 }