diff --git a/dune/mmdg/dg.hh b/dune/mmdg/dg.hh index b3372b7d897b46f5449017539fcd379390e5da5a..adfb45e8237acfe78afa5f47be624517213cd94a 100644 --- a/dune/mmdg/dg.hh +++ b/dune/mmdg/dg.hh @@ -28,11 +28,8 @@ public: using Scalar = typename GridView::ctype; using Coordinate = typename Problem::CoordinateType; using CoordinateMatrix = typename Problem::Matrix; - // using Matrix = Dune::BCRSMatrix<Dune::FieldMatrix<Scalar,1,1>>; - // using Vector = Dune::BlockVector<Dune::FieldVector<Scalar,1>>; - - using Matrix = Dune::DynamicMatrix<Scalar>; - using Vector = Dune::DynamicVector<Scalar>; + using Matrix = Dune::BCRSMatrix<Dune::FieldMatrix<Scalar,1,1>>; + using Vector = Dune::BlockVector<Dune::FieldVector<Scalar,1>>; using VTKFunction = Dune::VTKFunction<GridView>; using P1Function = Dune::NonconformingP1VTKFunction<GridView, Dune::DynamicVector<Scalar>>; @@ -46,34 +43,21 @@ public: gridView_(gridView), mapper_(mapper), problem_(problem), dof_((1 + dim) * gridView.size(0)) { - - A = std::make_shared<Matrix>(dof_, dof_, 0.0); //stiffness matrix - b = Vector(dof_, 0.0); //load vector - d = Vector(dof_, 0.0); //solution vector - //initialize stiffness matrix A, load vector b and solution vector d - // A = std::make_shared<Matrix>(dof_, dof_, 10, 1, Matrix::implicit); //TODO - // b = Vector(dof_); - // d = Vector(dof_); + A = std::make_shared<Matrix>(dof_, dof_, 10, 1, Matrix::implicit); //TODO + b = Vector(dof_); + d = Vector(dof_); } void operator() (const Scalar mu0) { //assemble stiffness matrix A and load vector b assembleSLE(mu0); - //A->compress(); + A->compress(); - (*A).solve(d, b); - - for (int i = 0; i < dof_; i++) - for (int j = 0; j < i; j++) - /*assert*/if(std::abs((*A)[i][j] - (*A)[j][i]) > - std::numeric_limits<Scalar>::epsilon()) - std::cout << i << ", " << j << std::endl; - - // Dune::InverseOperatorResult result; - // Dune::UMFPack<Matrix> solver(*A); - // solver.apply(d, b, result); + Dune::InverseOperatorResult result; + Dune::UMFPack<Matrix> solver(*A); + solver.apply(d, b, result); //write solution to a vtk file writeVTKoutput(); @@ -130,14 +114,10 @@ protected: const int dof) : gridView_(gridView), mapper_(mapper), problem_(problem), dof_(dof) { - A = std::make_shared<Matrix>(dof_, dof_, 0.0); //stiffness matrix - b = Vector(dof_, 0.0); //load vector - d = Vector(dof_, 0.0); //solution vector - //initialize stiffness matrix A, load vector b and solution vector d - // A = std::make_shared<Matrix>(dof_, dof_, 10, 1, Matrix::implicit); //TODO - // b = Vector(dof_); - // d = Vector(dof_); + A = std::make_shared<Matrix>(dof_, dof_, 10, 1, Matrix::implicit); //TODO + b = Vector(dof_); + d = Vector(dof_); } //assemble stiffness matrix A and load vector b @@ -199,7 +179,7 @@ protected: { for (int j = 0; j <= i; j++) { - (*A)[elemIdxSLE + i + 1][elemIdxSLE + j + 1] += + A->entry(elemIdxSLE + i + 1, elemIdxSLE + j + 1) += weight * problem_.K(qpGlobal)[j][i]; } } @@ -301,7 +281,7 @@ protected: //exact evaluation of // int_intersct mu*jump(phi_elem,0)*jump(phi_elem,0) ds - (*A)[elemIdxSLE][elemIdxSLE] += mu * intersctVol; + A->entry(elemIdxSLE, elemIdxSLE) += mu * intersctVol; if (intersct.neighbor()) //intersct has neighboring element { @@ -316,7 +296,7 @@ protected: //and // int_intersct avg(K*grad(phi_elem,i))*jump(phi_elem,0) ds // = 0.5 * int_intersct K[:,i] * normal ds - (*A)[elemIdxSLE + i + 1][elemIdxSLE] += + A->entry(elemIdxSLE + i + 1, elemIdxSLE) += mu * linearIntegrals[i] - 0.5 * KIntegrals[i]; for (int j = 0; j <= i; j++) @@ -327,7 +307,7 @@ protected: //and // int_intersct avg(K*grad(phi_elem,i))*jump(phi_elem,j) ds // = 0.5 * int_intersct x[j] * ( K[:,i] * normal ) ds - (*A)[elemIdxSLE + i + 1][elemIdxSLE + j + 1] + A->entry(elemIdxSLE + i + 1, elemIdxSLE + j + 1) += mu * quadraticIntregrals[i][j] - 0.5 * ( KIntegralsX[i][j] + KIntegralsX[j][i] ); } @@ -340,10 +320,11 @@ protected: //exact evaluation of // int_intersct mu * jump(phi_elem,0) * jump(phi_neighbor,0) ds - (*A)[elemIdxSLE][neighborIdxSLE] += -mu * intersctVol; + A->entry(elemIdxSLE, neighborIdxSLE) += -mu * intersctVol; //stiffness matrix A is symmetric - (*A)[neighborIdxSLE][elemIdxSLE] += (*A)[elemIdxSLE][neighborIdxSLE]; + A->entry(neighborIdxSLE, elemIdxSLE) += + A->entry(elemIdxSLE, neighborIdxSLE); for (int i = 0; i < dim; i++) { @@ -353,7 +334,7 @@ protected: //and // int_intersct avg(K*grad(phi_neighbor,i)) * jump(phi_elem,0) ds // = -0.5 * int_intersct K[:,i] * normal ds - (*A)[elemIdxSLE + i + 1][neighborIdxSLE] += + A->entry(elemIdxSLE + i + 1, neighborIdxSLE) += -mu * linearIntegrals[i] + 0.5 * KIntegrals[i]; //we use the relations @@ -362,14 +343,14 @@ protected: //and // int_intersct avg(K*grad(phi_neighbor,i)) * jump(phi_elem,0) ds // = 0.5 * int_intersct K[:,i] * normal ds - (*A)[elemIdxSLE][neighborIdxSLE + i + 1] += + A->entry(elemIdxSLE, neighborIdxSLE + i + 1) += -mu * linearIntegrals[i] - 0.5 * KIntegrals[i]; //stiffness matrix A is symmetric - (*A)[neighborIdxSLE][elemIdxSLE + i + 1] += - (*A)[elemIdxSLE + i + 1][neighborIdxSLE]; - (*A)[neighborIdxSLE + i + 1][elemIdxSLE] += - (*A)[elemIdxSLE][neighborIdxSLE + i + 1]; + A->entry(neighborIdxSLE, elemIdxSLE + i + 1) += + A->entry(elemIdxSLE + i + 1, neighborIdxSLE); + A->entry(neighborIdxSLE + i + 1, elemIdxSLE) += + A->entry(elemIdxSLE, neighborIdxSLE + i + 1); for (int j = 0; j <= i; j++) { @@ -382,13 +363,13 @@ protected: //as well as // int_intersct avg(K*grad(phi_elem,i)) * jump(phi_neighbor,j) ds // = -0.5 * int_intersct x[j] * ( K[:,i] * normal ) ds - (*A)[elemIdxSLE + i + 1][neighborIdxSLE + j + 1] += + A->entry(elemIdxSLE + i + 1, neighborIdxSLE + j + 1) += -mu * quadraticIntregrals[i][j] - 0.5 * ( KIntegralsX[j][i] - KIntegralsX[i][j] ); //stiffness matrix A is symmetric - (*A)[neighborIdxSLE + j + 1][elemIdxSLE + i + 1] += - (*A)[elemIdxSLE + i + 1][neighborIdxSLE + j + 1]; + A->entry(neighborIdxSLE + j + 1, elemIdxSLE + i + 1) += + A->entry(elemIdxSLE + i + 1, neighborIdxSLE + j + 1); if (i != j) { @@ -401,13 +382,13 @@ protected: //as well as // int_intersct avg(K*grad(phi_elem,j))*jump(phi_neighbor,i) ds // = -0.5 * int_intersct x[i] * ( K[:,j] * normal ) ds - (*A)[elemIdxSLE + j + 1][neighborIdxSLE + i + 1] += + A->entry(elemIdxSLE + j + 1, neighborIdxSLE + i + 1) += -mu * quadraticIntregrals[i][j] - 0.5 * ( KIntegralsX[i][j] - KIntegralsX[j][i] ); //stiffness matrix A is symmetric - (*A)[neighborIdxSLE + i + 1][elemIdxSLE + j + 1] += - (*A)[elemIdxSLE + j + 1][neighborIdxSLE + i + 1]; + A->entry(neighborIdxSLE + i + 1, elemIdxSLE + j + 1) += + A->entry(elemIdxSLE + j + 1, neighborIdxSLE + i + 1); } } } @@ -445,7 +426,7 @@ protected: //and // int_intersct phi_elem,0 * K*grad(phi_elem,i) * normal ds //with K*grad(phi_elem,i) = K[:,i] - (*A)[elemIdxSLE + i + 1][elemIdxSLE] += + A->entry(elemIdxSLE + i + 1, elemIdxSLE) += mu * linearIntegrals[i] - KIntegrals[i]; for (int j = 0; j <= i; j++) @@ -456,7 +437,7 @@ protected: // int_intersct (phi_elem,i * K[:,j] // + phi_elem,j * K[:,i]) * normal ds //with K*grad(phi_elem,i) = K[:,i] - (*A)[elemIdxSLE + i + 1][elemIdxSLE + j + 1] += + A->entry(elemIdxSLE + i + 1, elemIdxSLE + j + 1) += mu * quadraticIntregrals[i][j] - ( KIntegralsX[i][j] + KIntegralsX[j][i] ); } @@ -467,13 +448,13 @@ protected: //stiffness matrix A is symmetric for (int i = 0; i < dim; i++) { - (*A)[elemIdxSLE][elemIdxSLE + i + 1] = - (*A)[elemIdxSLE + i + 1][elemIdxSLE]; + A->entry(elemIdxSLE, elemIdxSLE + i + 1) = + A->entry(elemIdxSLE + i + 1, elemIdxSLE); for(int j = 0; j < i; j++) { - (*A)[elemIdxSLE + j + 1][elemIdxSLE + i + 1] = - (*A)[elemIdxSLE + i + 1][elemIdxSLE + j + 1]; + A->entry(elemIdxSLE + j + 1, elemIdxSLE + i + 1) = + A->entry(elemIdxSLE + i + 1, elemIdxSLE + j + 1); } } } diff --git a/dune/mmdg/mmdg.hh b/dune/mmdg/mmdg.hh index f58bbf0a2a4c3ef759dc29bcd0b4ba034afe3737..73890ca6d263ecb11b1e9c6690702239ad47a091 100644 --- a/dune/mmdg/mmdg.hh +++ b/dune/mmdg/mmdg.hh @@ -38,13 +38,11 @@ public: const void operator() (const Scalar mu0, const Scalar xi) { assembleSLE(mu0, xi); - //Base::A->compress(); + Base::A->compress(); - (*Base::A).solve(Base::d, Base::b); - - // Dune::InverseOperatorResult result; - // Dune::UMFPack<Matrix> solver(*Base::A); - // solver.apply(Base::d, Base::b, result); + Dune::InverseOperatorResult result; + Dune::UMFPack<Matrix> solver(*Base::A); + solver.apply(Base::d, Base::b, result); //write solution to a vtk file writeVTKoutput(); @@ -203,25 +201,25 @@ private: //quadrature for // int_iElem beta * phi_iElem,0 * phi_iElem,0 ds - (*Base::A)[iElemIdxSLE][iElemIdxSLE] += weight * betaEvaluation; + Base::A->entry(iElemIdxSLE, iElemIdxSLE) += weight * betaEvaluation; //quadrature for // int_iElem K_perp * jump(phi_elem1,0) * jump(phi_elem2,i) ds //and // int_iElem beta * avg(phi_elem1,0) * avg(phi_elem2,0) ds //for elem1, elem2 in {elemIn, elemOut} - (*Base::A)[elemInIdxSLE][elemInIdxSLE] += bulkUpdate1; - (*Base::A)[elemOutIdxSLE][elemOutIdxSLE] += bulkUpdate1; - (*Base::A)[elemInIdxSLE][elemOutIdxSLE] += bulkUpdate2; - (*Base::A)[elemOutIdxSLE][elemInIdxSLE] += bulkUpdate2; + Base::A->entry(elemInIdxSLE, elemInIdxSLE) += bulkUpdate1; + Base::A->entry(elemOutIdxSLE, elemOutIdxSLE) += bulkUpdate1; + Base::A->entry(elemInIdxSLE, elemOutIdxSLE) += bulkUpdate2; + Base::A->entry(elemOutIdxSLE, elemInIdxSLE) += bulkUpdate2; //quadrature for // -int_iElem beta * phi_iElem,0 * avg(phi_elem,j) ds //for elem in {elemIn, elemOut} - (*Base::A)[elemInIdxSLE][iElemIdxSLE] -= couplingUpdate1; - (*Base::A)[iElemIdxSLE][elemInIdxSLE] -= couplingUpdate1; - (*Base::A)[elemOutIdxSLE][iElemIdxSLE] -= couplingUpdate1; - (*Base::A)[iElemIdxSLE][elemOutIdxSLE] -= couplingUpdate1; + Base::A->entry(elemInIdxSLE, iElemIdxSLE) -= couplingUpdate1; + Base::A->entry(iElemIdxSLE, elemInIdxSLE) -= couplingUpdate1; + Base::A->entry(elemOutIdxSLE, iElemIdxSLE) -= couplingUpdate1; + Base::A->entry(iElemIdxSLE, elemOutIdxSLE) -= couplingUpdate1; for (int i = 0; i < dim; i++) { @@ -238,16 +236,16 @@ private: //quadrature for // int_iElem beta * phi_iElem,0 * phi_iElem,i ds - (*Base::A)[iElemIdxSLE + i + 1][iElemIdxSLE] += interfaceUpdate; - (*Base::A)[iElemIdxSLE][iElemIdxSLE + i + 1] += interfaceUpdate; + Base::A->entry(iElemIdxSLE + i + 1, iElemIdxSLE) += interfaceUpdate; + Base::A->entry(iElemIdxSLE, iElemIdxSLE + i + 1) += interfaceUpdate; //quadrature for // -int_iElem beta * phi_iElem,i * avg(phi_elem,0) ds //for elem in {elemIn, elemOut} using a quadrature rule - (*Base::A)[elemInIdxSLE][iElemIdxSLE + i + 1] -= couplingUpdate3; - (*Base::A)[iElemIdxSLE + i + 1][elemInIdxSLE] -= couplingUpdate3; - (*Base::A)[elemOutIdxSLE][iElemIdxSLE + i + 1] -= couplingUpdate3; - (*Base::A)[iElemIdxSLE + i + 1][elemOutIdxSLE] -= couplingUpdate3; + Base::A->entry(elemInIdxSLE, iElemIdxSLE + i + 1) -= couplingUpdate3; + Base::A->entry(iElemIdxSLE + i + 1, elemInIdxSLE) -= couplingUpdate3; + Base::A->entry(elemOutIdxSLE, iElemIdxSLE + i + 1) -= couplingUpdate3; + Base::A->entry(iElemIdxSLE + i + 1, elemOutIdxSLE) -= couplingUpdate3; } //quadrature for @@ -255,22 +253,22 @@ private: //and // int_iElem beta * avg(phi_elem1,0) * avg(phi_elem2,i) ds //for elem1, elem2 in {elemIn, elemOut} - (*Base::A)[elemInIdxSLE + i + 1][elemInIdxSLE] += bulkUpdate3; - (*Base::A)[elemInIdxSLE][elemInIdxSLE + i + 1] += bulkUpdate3; - (*Base::A)[elemOutIdxSLE + i + 1][elemOutIdxSLE] += bulkUpdate3; - (*Base::A)[elemOutIdxSLE][elemOutIdxSLE + i + 1] += bulkUpdate3; - (*Base::A)[elemInIdxSLE + i + 1][elemOutIdxSLE] += bulkUpdate4; - (*Base::A)[elemOutIdxSLE][elemInIdxSLE + i + 1] += bulkUpdate4; - (*Base::A)[elemOutIdxSLE + i + 1][elemInIdxSLE] += bulkUpdate4; - (*Base::A)[elemInIdxSLE][elemOutIdxSLE + i + 1] += bulkUpdate4; + Base::A->entry(elemInIdxSLE + i + 1, elemInIdxSLE) += bulkUpdate3; + Base::A->entry(elemInIdxSLE, elemInIdxSLE + i + 1) += bulkUpdate3; + Base::A->entry(elemOutIdxSLE + i + 1, elemOutIdxSLE) += bulkUpdate3; + Base::A->entry(elemOutIdxSLE, elemOutIdxSLE + i + 1) += bulkUpdate3; + Base::A->entry(elemInIdxSLE + i + 1, elemOutIdxSLE) += bulkUpdate4; + Base::A->entry(elemOutIdxSLE, elemInIdxSLE + i + 1) += bulkUpdate4; + Base::A->entry(elemOutIdxSLE + i + 1, elemInIdxSLE) += bulkUpdate4; + Base::A->entry(elemInIdxSLE, elemOutIdxSLE + i + 1) += bulkUpdate4; //quadrature for // -int_iElem beta * phi_iElem,0 * avg(phi_elem,i) ds //for elem in {elemIn, elemOut} - (*Base::A)[elemInIdxSLE + i + 1][iElemIdxSLE] -= couplingUpdate2; - (*Base::A)[iElemIdxSLE][elemInIdxSLE + i + 1] -= couplingUpdate2; - (*Base::A)[elemOutIdxSLE + i + 1][iElemIdxSLE] -= couplingUpdate2; - (*Base::A)[iElemIdxSLE][elemOutIdxSLE + i + 1] -= couplingUpdate2; + Base::A->entry(elemInIdxSLE + i + 1, iElemIdxSLE) -= couplingUpdate2; + Base::A->entry(iElemIdxSLE, elemInIdxSLE + i + 1) -= couplingUpdate2; + Base::A->entry(elemOutIdxSLE + i + 1, iElemIdxSLE) -= couplingUpdate2; + Base::A->entry(iElemIdxSLE, elemOutIdxSLE + i + 1) -= couplingUpdate2; } }; @@ -311,19 +309,19 @@ private: { //quadrature for // int_iElem beta * (phi_iElem,i)^2 ds - (*Base::A)[iElemIdxSLE + i + 1][iElemIdxSLE + i + 1] += + Base::A->entry(iElemIdxSLE + i + 1, iElemIdxSLE + i + 1) += interfaceUpdate1 * qpI; //quadrature for // -int_iElem beta * phi_iElem,i * avg(phi_elem,i) ds //for elem in {elemIn, elemOut} - (*Base::A)[elemInIdxSLE + i + 1][iElemIdxSLE + i + 1] -= + Base::A->entry(elemInIdxSLE + i + 1, iElemIdxSLE + i + 1) -= couplingUpdate2; - (*Base::A)[iElemIdxSLE + i + 1][elemInIdxSLE + i + 1] -= + Base::A->entry(iElemIdxSLE + i + 1, elemInIdxSLE + i + 1) -= couplingUpdate2; - (*Base::A)[elemOutIdxSLE + i + 1][iElemIdxSLE + i + 1] -= + Base::A->entry(elemOutIdxSLE + i + 1, iElemIdxSLE + i + 1) -= couplingUpdate2; - (*Base::A)[iElemIdxSLE + i + 1][elemOutIdxSLE + i + 1] -= + Base::A->entry(iElemIdxSLE + i + 1, elemOutIdxSLE + i + 1) -= couplingUpdate2; } @@ -332,13 +330,13 @@ private: //and // int_iElem beta * avg(phi_elem1,i) * avg(phi_elem2,i) ds //for elem1, elem2 in {elemIn, elemOut} - (*Base::A)[elemInIdxSLE + i + 1][elemInIdxSLE + i + 1] += + Base::A->entry(elemInIdxSLE + i + 1, elemInIdxSLE + i + 1) += bulkUpdate3; - (*Base::A)[elemOutIdxSLE + i + 1][elemOutIdxSLE + i + 1] += + Base::A->entry(elemOutIdxSLE + i + 1, elemOutIdxSLE + i + 1) += bulkUpdate3; - (*Base::A)[elemInIdxSLE + i + 1][elemOutIdxSLE + i + 1] += + Base::A->entry(elemInIdxSLE + i + 1, elemOutIdxSLE + i + 1) += bulkUpdate4; - (*Base::A)[elemOutIdxSLE + i + 1][elemInIdxSLE + i + 1] += + Base::A->entry(elemOutIdxSLE + i + 1, elemInIdxSLE + i + 1) += bulkUpdate4; for (int j = 0; j < i; j++) @@ -359,21 +357,21 @@ private: //quadrature for // int_iElem beta * phi_iElem,i * phi_iElem,j ds - (*Base::A)[iElemIdxSLE + i + 1][iElemIdxSLE + j + 1] += + Base::A->entry(iElemIdxSLE + i + 1, iElemIdxSLE + j + 1) += interfaceUpdate2; - (*Base::A)[iElemIdxSLE + j + 1][iElemIdxSLE + i + 1] += + Base::A->entry(iElemIdxSLE + j + 1, iElemIdxSLE + i + 1) += interfaceUpdate2; //quadrature for // -int_iElem beta * phi_iElem,i * avg(phi_elem,j) ds //for elem in {elemIn, elemOut} - (*Base::A)[elemInIdxSLE + j + 1][iElemIdxSLE + i + 1] -= + Base::A->entry(elemInIdxSLE + j + 1, iElemIdxSLE + i + 1) -= couplingUpdate4; - (*Base::A)[iElemIdxSLE + i + 1][elemInIdxSLE + j + 1] -= + Base::A->entry(iElemIdxSLE + i + 1, elemInIdxSLE + j + 1) -= couplingUpdate4; - (*Base::A)[elemOutIdxSLE + j + 1][iElemIdxSLE + i + 1] -= + Base::A->entry(elemOutIdxSLE + j + 1, iElemIdxSLE + i + 1) -= couplingUpdate4; - (*Base::A)[iElemIdxSLE + i + 1][elemOutIdxSLE + j + 1] -= + Base::A->entry(iElemIdxSLE + i + 1, elemOutIdxSLE + j + 1) -= couplingUpdate4; } @@ -382,33 +380,33 @@ private: //and // int_iElem beta * avg(phi_elem1,i) * avg(phi_elem2,j) ds //for elem1, elem2 in {elemIn, elemOut} - (*Base::A)[elemInIdxSLE + i + 1][elemInIdxSLE + j + 1] += + Base::A->entry(elemInIdxSLE + i + 1, elemInIdxSLE + j + 1) += bulkUpdate5; - (*Base::A)[elemInIdxSLE + j + 1][elemInIdxSLE + i + 1] += + Base::A->entry(elemInIdxSLE + j + 1, elemInIdxSLE + i + 1) += bulkUpdate5; - (*Base::A)[elemOutIdxSLE + i + 1][elemOutIdxSLE + j + 1] += + Base::A->entry(elemOutIdxSLE + i + 1, elemOutIdxSLE + j + 1) += bulkUpdate5; - (*Base::A)[elemOutIdxSLE + j + 1][elemOutIdxSLE + i + 1] += + Base::A->entry(elemOutIdxSLE + j + 1, elemOutIdxSLE + i + 1) += bulkUpdate5; - (*Base::A)[elemInIdxSLE + i + 1][elemOutIdxSLE + j + 1] += + Base::A->entry(elemInIdxSLE + i + 1, elemOutIdxSLE + j + 1) += bulkUpdate6; - (*Base::A)[elemOutIdxSLE + j + 1][elemInIdxSLE + i + 1] += + Base::A->entry(elemOutIdxSLE + j + 1, elemInIdxSLE + i + 1) += bulkUpdate6; - (*Base::A)[elemOutIdxSLE + i + 1][elemInIdxSLE + j + 1] += + Base::A->entry(elemOutIdxSLE + i + 1, elemInIdxSLE + j + 1) += bulkUpdate6; - (*Base::A)[elemInIdxSLE + j + 1][elemOutIdxSLE + i + 1] += + Base::A->entry(elemInIdxSLE + j + 1, elemOutIdxSLE + i + 1) += bulkUpdate6; //quadrature for // -int_iElem beta * phi_iElem,j * avg(phi_elem,i) ds //for elem in {elemIn, elemOut} - (*Base::A)[elemInIdxSLE + i + 1][iElemIdxSLE + j + 1] -= + Base::A->entry(elemInIdxSLE + i + 1, iElemIdxSLE + j + 1) -= couplingUpdate3; - (*Base::A)[iElemIdxSLE + j + 1][elemInIdxSLE + i + 1] -= + Base::A->entry(iElemIdxSLE + j + 1, elemInIdxSLE + i + 1) -= couplingUpdate3; - (*Base::A)[elemOutIdxSLE + i + 1][iElemIdxSLE + j + 1] -= + Base::A->entry(elemOutIdxSLE + i + 1, iElemIdxSLE + j + 1) -= couplingUpdate3; - (*Base::A)[iElemIdxSLE + j + 1][elemOutIdxSLE + i + 1] -= + Base::A->entry(iElemIdxSLE + j + 1, elemOutIdxSLE + i + 1) -= couplingUpdate3; } } @@ -457,7 +455,7 @@ private: //quadrature for // int_iElem (Kpar * grad(d * phi_iElem,0)) * grad(d * phi,iElem,0) ds - (*Base::A)[iElemIdxSLE][iElemIdxSLE] += weight * interfaceUpdate1; + Base::A->entry(iElemIdxSLE, iElemIdxSLE) += weight * interfaceUpdate1; for (int i = 0; i < dim - 1 ; i++) { @@ -472,13 +470,13 @@ private: //quadrature for // int_iElem (Kpar * grad(d * phi_iElem,i)) // * grad(d * phi,iElem,0) ds - (*Base::A)[iElemIdxSLE + i + 1][iElemIdxSLE] += interfaceUpdate3; - (*Base::A)[iElemIdxSLE][iElemIdxSLE + i + 1] += interfaceUpdate3; + Base::A->entry(iElemIdxSLE + i + 1, iElemIdxSLE) += interfaceUpdate3; + Base::A->entry(iElemIdxSLE, iElemIdxSLE + i + 1) += interfaceUpdate3; //quadrature for // int_iElem (Kpar * grad(d * phi_iElem,i)) // * grad(d * phi,iElem,i) ds - (*Base::A)[iElemIdxSLE + i + 1][iElemIdxSLE + i + 1] += + Base::A->entry(iElemIdxSLE + i + 1, iElemIdxSLE + i + 1) += weight * ( dEvaluation2 * (KparDotTau_i * iFrame[i]) + qpI * (qpI * interfaceUpdate1 + 2.0 * interfaceUpdate2) ); @@ -493,9 +491,9 @@ private: //quadrature for // int_iElem (Kpar * grad(d * phi_iElem,i)) // * grad(d * phi,iElem,j) ds - (*Base::A)[iElemIdxSLE + i + 1][iElemIdxSLE + j + 1] += + Base::A->entry(iElemIdxSLE + i + 1, iElemIdxSLE + j + 1) += interfaceUpdate4; - (*Base::A)[iElemIdxSLE + j + 1][iElemIdxSLE + i + 1] += + Base::A->entry(iElemIdxSLE + j + 1, iElemIdxSLE + i + 1) += interfaceUpdate4; } } @@ -548,7 +546,7 @@ private: //quadrature for // int_intersct mu * d^2 * jump(phi_iElem,0) // * jump(phi_iElem,0) dr - (*Base::A)[iElemIdxSLE][iElemIdxSLE] += + Base::A->entry(iElemIdxSLE, iElemIdxSLE) += weight * dEvaluation * (mu * dEvaluation - interfaceUpdate1); for (int i = 0; i < dim - 1; i++) @@ -568,9 +566,9 @@ private: //and // -int_intersct avg(Kparallel * grad(d * phi_iElem,i)) // * jump(phi_iElem,0) dr - (*Base::A)[iElemIdxSLE + i + 1][iElemIdxSLE] += + Base::A->entry(iElemIdxSLE + i + 1, iElemIdxSLE) += interfaceUpdate4; - (*Base::A)[iElemIdxSLE][iElemIdxSLE + i + 1] += + Base::A->entry(iElemIdxSLE, iElemIdxSLE + i + 1) += interfaceUpdate4; //quadrature for @@ -578,7 +576,7 @@ private: //and // -int_intersct avg(Kparallel * grad(d * phi_iElem,i)) // * jump(phi_iElem,i) dr - (*Base::A)[iElemIdxSLE + i + 1][iElemIdxSLE + i + 1] += + Base::A->entry(iElemIdxSLE + i + 1, iElemIdxSLE + i + 1) += weight * dEvaluation * qpI * (interfaceUpdate2 - interfaceUpdate3 - qpI * interfaceUpdate1); @@ -596,9 +594,9 @@ private: //and // -int_intersct avg(Kparallel * grad(d * phi_iElem,i)) // * jump(phi_iElem,j) dr - (*Base::A)[iElemIdxSLE + i + 1][iElemIdxSLE + j + 1] += + Base::A->entry(iElemIdxSLE + i + 1, iElemIdxSLE + j + 1) += interfaceUpdate5; - (*Base::A)[iElemIdxSLE + j + 1][iElemIdxSLE + i + 1] += + Base::A->entry(iElemIdxSLE + j + 1, iElemIdxSLE + i + 1) += interfaceUpdate5; } } @@ -620,9 +618,9 @@ private: //quadrature for // int_intersct mu * d^2 * jump(phi_iElem,0) // * jump(phi_neighbor,0) dr - (*Base::A)[iElemIdxSLE][neighborIdxSLE] -= + Base::A->entry(iElemIdxSLE, neighborIdxSLE) -= weight * mu * dEvaluation2; - (*Base::A)[neighborIdxSLE][iElemIdxSLE] -= + Base::A->entry(neighborIdxSLE, iElemIdxSLE) -= weight * mu * dEvaluation2; for (int i = 0; i < dim - 1; i++) @@ -647,9 +645,9 @@ private: //and // -int_intersct d * avg(Kparallel * grad(d * phi_iElem,i)) // * jump(phi_neighbor,0) dr - (*Base::A)[iElemIdxSLE + i + 1][neighborIdxSLE] += + Base::A->entry(iElemIdxSLE + i + 1, neighborIdxSLE) += interfaceUpdate3a; - (*Base::A)[neighborIdxSLE][iElemIdxSLE + i + 1] += + Base::A->entry(neighborIdxSLE, iElemIdxSLE + i + 1) += interfaceUpdate3a; //quadrature for @@ -658,9 +656,9 @@ private: //and. // -int_intersct d * avg(Kparallel * grad(d * phi_neighbor,i)) // * jump(phi_iElem,0) dr - (*Base::A)[neighborIdxSLE + i + 1][iElemIdxSLE] += + Base::A->entry(neighborIdxSLE + i + 1, iElemIdxSLE) += interfaceUpdate3b; - (*Base::A)[iElemIdxSLE][neighborIdxSLE + i + 1] += + Base::A->entry(iElemIdxSLE, neighborIdxSLE + i + 1) += interfaceUpdate3b; for (int j = 0; j < dim - 1; j++) @@ -683,9 +681,9 @@ private: //resp. // -int_intersct d * avg(Kparallel * grad(d * phi_neighbor,i)) // * jump(phi_iElem,j) dr - (*Base::A)[iElemIdxSLE + i + 1][neighborIdxSLE + j + 1] += + Base::A->entry(iElemIdxSLE + i + 1, neighborIdxSLE + j + 1) += interfaceUpdate5; - (*Base::A)[neighborIdxSLE + j + 1][iElemIdxSLE + i + 1] += + Base::A->entry(neighborIdxSLE + j + 1, iElemIdxSLE + i + 1) += interfaceUpdate5; } } @@ -721,7 +719,7 @@ private: //quadrature for // int_intersct mu * d^2 * jump(phi_iElem,0) // * jump(phi_iElem,0) dr - (*Base::A)[iElemIdxSLE][iElemIdxSLE] += + Base::A->entry(iElemIdxSLE, iElemIdxSLE) += weight * dEvaluation * (mu * dEvaluation - interfaceUpdate1); for (int i = 0; i < dim - 1; i++) @@ -741,9 +739,9 @@ private: //and // -int_intersct d * (Kparallel * grad(d * phi_iElem,i)) // * phi_iElem,0 * normal dr - (*Base::A)[iElemIdxSLE + i + 1][iElemIdxSLE] += + Base::A->entry(iElemIdxSLE + i + 1, iElemIdxSLE) += interfaceUpdate4; - (*Base::A)[iElemIdxSLE][iElemIdxSLE + i + 1] += + Base::A->entry(iElemIdxSLE, iElemIdxSLE + i + 1) += interfaceUpdate4; //quadrature for @@ -751,7 +749,7 @@ private: //and // -int_intersct d * (Kparallel * grad(d * phi_iElem,i)) // * phi_iElem,i * normal dr - (*Base::A)[iElemIdxSLE + i + 1][iElemIdxSLE + i + 1] += + Base::A->entry(iElemIdxSLE + i + 1, iElemIdxSLE + i + 1) += weight * qpI * dEvaluation * (interfaceUpdate2 - 2.0 * interfaceUpdate3 - qpI * interfaceUpdate1); @@ -771,9 +769,9 @@ private: //and // -int_intersct d * (Kparallel * grad(d * phi_iElem,i)) // * phi_iElem,j * normal dr - (*Base::A)[iElemIdxSLE + i + 1][iElemIdxSLE + j + 1] += + Base::A->entry(iElemIdxSLE + i + 1, iElemIdxSLE + j + 1) += interfaceUpdate5; - (*Base::A)[iElemIdxSLE + j + 1][iElemIdxSLE + i + 1] += + Base::A->entry(iElemIdxSLE + j + 1, iElemIdxSLE + i + 1) += interfaceUpdate5; } } diff --git a/src/mmdgAnalysis.py b/src/mmdgAnalysis.py index e8312ed1986217a5d88c4f0eb5030a0da6f5916b..c5b972e5d4023cc82cfcb1dcf4783b0aa297d0f6 100644 --- a/src/mmdgAnalysis.py +++ b/src/mmdgAnalysis.py @@ -61,9 +61,9 @@ if not exists("plots"): numberOfMeans = 1 # names of the grid files sorted by refinement -gridfiles = ["mmdg2_1", "mmdg2_5e-1", "mmdg2_2e-1", "mmdg2_8e-2", "mmdg2_5e-2"] -# gridfiles = ["mmdg3_1", "mmdg3_5e-1", "mmdg3_2e-1", "mmdg3_8e-2", "mmdg3_5e-2"] -# gridfiles = ["mmdg5_1", "mmdg5_5e-1", "mmdg5_2e-1", "mmdg5_8e-2", "mmdg5_5e-2"] +gridfiles = ["mmdg2_1", "mmdg2_5e-1", "mmdg2_2e-1", "mmdg2_8e-2", "mmdg2_5e-2", "mmdg2_3e-2", "mmdg2_2e-2", "mmdg2_1e-2", "mmdg2_9e-3", "mmdg2_8e-3"] +# gridfiles = ["mmdg3_1", "mmdg3_5e-1", "mmdg3_2e-1", "mmdg3_8e-2", "mmdg3_5e-2", "mmdg3_3e-2", "mmdg3_2e-2", "mmdg3_1e-2", "mmdg3_9e-3", "mmdg3_8e-3"] +# gridfiles = ["mmdg5_1", "mmdg5_5e-1", "mmdg5_2e-1", "mmdg5_8e-2", "mmdg5_5e-2", "mmdg5_3e-2", "mmdg5_2e-2", "mmdg5_1e-2", "mmdg5_9e-3", "mmdg5_8e-3"] dim = 2 diff --git a/src/parameterMMDG.ini b/src/parameterMMDG.ini index 69a5f032bf4973d219c54707fad381c001e8ceae..03de01e8285d469c6e3c7eae0e7cdf47911cddb7 100644 --- a/src/parameterMMDG.ini +++ b/src/parameterMMDG.ini @@ -1,5 +1,5 @@ mu0 = 1000 -xi = 0.75 -d = 1 +#xi = 0.75 +d = 0.01 problem = mmdg2 gridfile = mmdg2_5e-2