Beispiel #1
0
        private IVector CalculateRhsImplicit(ILinearSystem linearSystem, bool addRhs)
        {
            //TODO: what is the meaning of addRhs? Do we need this when solving dynamic thermal equations?
            //TODO: stabilizingRhs has not been implemented

            // result = -dt(conductuvity*temperature + rhs -dt(stabilizingConductivity*temperature + StabilizingRhs))
            double[,] kappa = new double[model.Nodes.Count, model.Nodes.Count];
            kappa[0, 0]     = 1;
            kappa[model.Nodes.Count - 1, model.Nodes.Count - 1] = 1;
            IMatrix penalty = Matrix.CreateFromArray(kappa);
            int     id      = linearSystem.Subdomain.ID;

            dummyWeakImpositionTimesTemperature[id]     = penalty.Multiply(temperature[id]);
            conductivityTimesTemperature[id]            = provider.ConductivityMatrixVectorProduct(linearSystem.Subdomain, temperature[id]);
            conductivityTimesTemperature[id]            = conductivityTimesTemperature[id].LinearCombination(1, dummyWeakImpositionTimesTemperature[id], 1);
            stabilizingConductivityTimesTemperature[id] = provider.StabilizingConductivityMatrixVectorProduct(linearSystem.Subdomain, temperature[id]);

            IVector rhsResult    = conductivityTimesTemperature[id].Subtract(rhs[id]);
            var     rhsResultnew = rhsResult.LinearCombination(1, stabilizingConductivityTimesTemperature[id], -timeStep);

            rhsResultnew.ScaleIntoThis(-timeStep);

            //rhsPrevious[id] = rhs[id];
            return(rhsResultnew);
        }
Beispiel #2
0
        private IVector CalculateRhsImplicit(ILinearSystem linearSystem, bool addRhs)
        {
            //TODO: what is the meaning of addRhs? Do we need this when solving dynamic thermal equations?
            //TODO: stabilizingRhs has not been implemented

            // result = (capacity/dt^2-diffusionConductivity/dt-massTransportConductivity/dt+stabilizingConductivity)*temperature - (StabilizingRhs - rhs/dt))
            // result = -dt(conductuvity*temperature - rhs -dt(stabilizingConductivity*temperature + StabilizingRhs))
            double a0 = 1 / Math.Pow(timeStep, 2);
            double a1 = 1 / (2 * timeStep);
            double a2 = 1 / timeStep;
            int    id = linearSystem.Subdomain.ID;

            diffusionConductivityTimesTemperature[id]     = provider.DiffusionConductivityMatrixVectorProduct(linearSystem.Subdomain, temperature[id]);
            massTransportConductivityTimesTemperature[id] = provider.MassTransportConductivityMatrixVectorProduct(linearSystem.Subdomain, temperature[id]);
            var conductivityTimesTemperature = diffusionConductivityTimesTemperature[id].LinearCombination(1, massTransportConductivityTimesTemperature[id], 1);

            stabilizingConductivityTimesTemperature[id] = provider.StabilizingConductivityMatrixVectorProduct(linearSystem.Subdomain, temperature[id]);

            IVector rhsResult    = conductivityTimesTemperature.Subtract(rhs[id]);
            var     rhsResultnew = rhsResult.LinearCombination(1, stabilizingConductivityTimesTemperature[id], -timeStep);

            rhsResultnew.ScaleIntoThis(-timeStep);

            //rhsPrevious[id] = rhs[id];
            return(rhsResultnew);
        }
        private IVector CalculateRhsImplicit(ILinearSystem linearSystem, int modelNo, bool addRhs)
        {
            //TODO: what is the meaning of addRhs? Do we need this when solving dynamic thermal equations?
            //TODO: stabilizingRhs has not been implemented

            // result = -dt(conductuvity*temperature + rhs -dt(stabilizingConductivity*temperature + StabilizingRhs))
            int id = linearSystem.Subdomain.ID;

            conductivityTimesTemperature[modelNo][id]            = providers[modelNo].ConductivityMatrixVectorProduct(linearSystem.Subdomain, temperature[modelNo][id]);
            stabilizingConductivityTimesTemperature[modelNo][id] = providers[modelNo].StabilizingConductivityMatrixVectorProduct(linearSystem.Subdomain, temperature[modelNo][id]);

            IVector rhsResult    = conductivityTimesTemperature[modelNo][id].Subtract(rhs[modelNo][id]);
            var     rhsResultnew = rhsResult.LinearCombination(1, stabilizingConductivityTimesTemperature[modelNo][id], -timeStep);

            rhsResultnew.ScaleIntoThis(-timeStep);

            //rhsPrevious[id] = rhs[id];
            return(rhsResultnew);
        }