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); }
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); }