diff --git a/FunctionSpace/BasisVector.cpp b/FunctionSpace/BasisVector.cpp index b639e1d598e457668acd183c749ef3dcdb721afb..abec04f83eff009d28a168509eb79793f1ee4c4d 100644 --- a/FunctionSpace/BasisVector.cpp +++ b/FunctionSpace/BasisVector.cpp @@ -13,11 +13,29 @@ BasisVector::~BasisVector(void){ string BasisVector::toString(void) const{ stringstream stream; - for(int i = 0; i < size; i++) - stream << "[" << "]" << endl - << "[" << "]" << endl - << "[" << "]" << endl - << endl; + for(int i = 0; i < nVertex; i++) + stream << "f(" << i << ") = " << endl + << "[ " <<(*(*node)[i])[0].toString() << " ]" << endl + << "[ " <<(*(*node)[i])[1].toString() << " ]" << endl + << "[ " <<(*(*node)[i])[2].toString() << " ]" << endl; + + for(int i = 0; i < nEdge; i++) + stream << "f(" << i + nVertex << ") = " << endl + << "[ " << (*(*(*edge)[0])[i])[0].toString() << " ]" << endl + << "[ " << (*(*(*edge)[0])[i])[1].toString() << " ]" << endl + << "[ " << (*(*(*edge)[0])[i])[2].toString() << " ]" << endl; + + for(int i = 0; i < nFace; i++) + stream << "f(" << i + nVertex + nEdge << ") = " << endl + << "[ " << (*(*(*face)[0])[i])[0].toString() << " ]" << endl + << "[ " << (*(*(*face)[0])[i])[1].toString() << " ]" << endl + << "[ " << (*(*(*face)[0])[i])[2].toString() << " ]" << endl; + + for(int i = 0; i < nCell; i++) + stream << "f(" << i + nVertex + nEdge + nFace << ") = " + << "[ " << (*(*cell)[i])[0].toString() << " ]" << endl + << "[ " << (*(*cell)[i])[1].toString() << " ]" << endl + << "[ " << (*(*cell)[i])[2].toString() << " ]" << endl; return stream.str(); } diff --git a/FunctionSpace/TriEdgeBasis.cpp b/FunctionSpace/TriEdgeBasis.cpp index eb02ba7dc87eb62c0da62a51a034944862543000..b1069425586158e22a502bce801d23c2b72d8364 100644 --- a/FunctionSpace/TriEdgeBasis.cpp +++ b/FunctionSpace/TriEdgeBasis.cpp @@ -131,6 +131,24 @@ TriEdgeBasis::TriEdgeBasis(int order){ v[l].mul(lagrange[2]); } + vector<Polynomial> gradL1 = lagrange[0].gradient(); + vector<Polynomial> gradL2 = lagrange[1].gradient(); + + vector<Polynomial> l2GradL1(gradL1); + l2GradL1[0].mul(lagrange[1]); + l2GradL1[1].mul(lagrange[1]); + l2GradL1[2].mul(lagrange[1]); + + vector<Polynomial> l1GradL2(gradL2); + l1GradL2[0].mul(lagrange[0]); + l1GradL2[1].mul(lagrange[0]); + l1GradL2[2].mul(lagrange[0]); + + vector<Polynomial> subGradL1L2(l2GradL1); + subGradL1L2[0].sub(l1GradL2[0]); + subGradL1L2[1].sub(l1GradL2[1]); + subGradL1L2[2].sub(l1GradL2[2]); + unsigned int i = 0; // Cell Based (Type 1) // @@ -179,11 +197,13 @@ TriEdgeBasis::TriEdgeBasis(int order){ // Cell Based (Type 3) // for(int l = 0; l < orderMinus; l++){ - (*cell)[i] = new vector<Polynomial>(*(*cell)[0]); - - (*cell)[i]->at(0).mul(v[l]); - (*cell)[i]->at(1).mul(v[l]); - (*cell)[i]->at(2).mul(v[l]); + vector<Polynomial> subGradL1L2V(subGradL1L2); + + subGradL1L2V[0].mul(v[l]); + subGradL1L2V[1].mul(v[l]); + subGradL1L2V[2].mul(v[l]); + + (*cell)[i] = new vector<Polynomial>(subGradL1L2V); i++; }