public static GaussianIntegrator CreateFor1DProblem(Func <double, Matrix> function, double x0, double x1, int sampling) { var buf = new GaussianIntegrator(); buf.A1 = x0; buf.A2 = x1; buf.F1 = gama => 0; buf.F2 = gama => 1; buf.G1 = (eta, gama) => 0; buf.G2 = (eta, gama) => 1; buf.GammaPointCount = sampling; buf.XiPointCount = buf.EtaPointCount = 1; buf.H = new FunctionMatrixFunction((xi, eta, gama) => function(gama)); return(buf); }
/// <inheritdoc/> public Matrix CalcLocalStiffnessMatrix(Element targetElement) { var intg = new BriefFiniteElementNet.Integration.GaussianIntegrator(); var tri = targetElement as TriangleElement; intg.A2 = 1; intg.A1 = 0; intg.F2 = (gama => 1); intg.F1 = (gama => 0); intg.G2 = ((eta, gama) => 1 - eta); intg.G1 = ((eta, gama) => 0); intg.XiPointCount = intg.EtaPointCount = 3; intg.GammaPointCount = 1; intg.H = new FunctionMatrixFunction((xi, eta, gamma) => { var b = GetBMatrixAt(targetElement, xi, eta); var d = this.GetDMatrixAt(targetElement, xi, eta); var j = GetJMatrixAt(targetElement, xi, eta); var detJ = j.Determinant(); var ki = b.Transpose() * d * b; ki.Scale(Math.Abs(j.Determinant())); //eq 3.27: thickness* bT * d * b; ki.Scale(tri.Section.GetThicknessAt(new double[] { xi, eta })); return(ki); }); var res = intg.Integrate(); return(res); }
public Matrix CalcLocalStiffnessMatrix(Element targetElement) { var intg = new BriefFiniteElementNet.Integration.GaussianIntegrator(); // using eq. 3.50 [1] / eq 8 [3] var quad = targetElement as QuadrilaturalElement; intg.A2 = 1.0; intg.A1 = 0.0; intg.F2 = (gama => + 1.0); intg.F1 = (gama => - 1.0); intg.G2 = (eta, gama) => + 1.0; intg.G1 = (eta, gama) => - 1.0; intg.XiPointCount = intg.EtaPointCount = 3; // ref [2] intg.GammaPointCount = 1; intg.H = new FunctionMatrixFunction((xi, eta, gamma) => { var b = GetBMatrixAt(targetElement, xi, eta); var d = this.GetDMatrixAt(targetElement, xi, eta); var j = GetJMatrixAt(targetElement, xi, eta); var detJ = j.Determinant(); var ki = b.Transpose() * d * b; ki.Scale(Math.Abs(j.Determinant())); ki.Scale(quad.Section.GetThicknessAt(new double[] { xi, eta })); return(ki); }); var res = intg.Integrate(); return(res); }
/// <inheritdoc/> public Matrix CalcLocalStiffnessMatrix(Element targetElement) { var intg = new BriefFiniteElementNet.Integration.GaussianIntegrator(); intg.A2 = 1; intg.A1 = 0; intg.F2 = (gama => 1); intg.F1 = (gama => 0); intg.G2 = ((eta, gama) => 1 - eta); intg.G1 = ((eta, gama) => 0); intg.XiPointCount = intg.EtaPointCount = 3; intg.GammaPointCount = 1; intg.H = new FunctionMatrixFunction((xi, eta, gamma) => { var b = GetBMatrixAt(targetElement, xi, eta); var d = this.GetDMatrixAt(targetElement, xi, eta); var j = GetJMatrixAt(targetElement, xi, eta); var detJ = j.Determinant(); var ki = b.Transpose() * d * b; ki.MultiplyByConstant(Math.Abs(j.Determinant())); return(ki); }); var res = intg.Integrate(); return(res); }