diff --git a/Solver/dgDofContainer.cpp b/Solver/dgDofContainer.cpp index 3911f6d59039cc80d2c9b02aa57314d2887e14ad..c7820481922777ef2fa4d829f095579e2426684a 100644 --- a/Solver/dgDofContainer.cpp +++ b/Solver/dgDofContainer.cpp @@ -309,35 +309,41 @@ void dgDofContainer::Mesh2Mesh_BuildL2Projection(linearSystemCSRGmm<double> &pro void dgDofContainer::Mesh2Mesh_ApplyL2Projection(linearSystemCSRGmm<double> &projector,dgDofContainer &donor){ scale(0.); + + dgGroupCollection* dGroups = donor.getGroups(); + dgGroupCollection* rGroups = this->getGroups(); + std::vector<int> dGroupsStartIGlobal(dGroups->getNbElementGroups() + 1); + int iGlobal = 0; // indices in global container + dGroupsStartIGlobal[0] = 0; + for (int i = 1; i<dGroupsStartIGlobal.size(); i++) + dGroupsStartIGlobal[i] = dGroupsStartIGlobal[i-1] + dGroups->getElementGroup(i-1)->getNbElements()*dGroups->getElementGroup(i-1)->getNbNodes(); + int *startIndex; int *columns; double *values; projector.getMatrix(startIndex,columns,values); -/*nt nbCoarseNodes = 0; // OLD CODE - int nbCoarseElements = 0; - int r = 0; - for (int kFine = 0;kFine < fineGroups.getNbElementGroups();kFine++) { - int nbFineNodes = fineGroups.getElementGroup(kFine)->getNbNodes(); - fineSol.getGroupProxy(kFine).scale(0); - for (int fineElement = 0 ; fineElement<fineGroups.getElementGroup(kFine)->getNbElements() ;++fineElement) { - for (int fineNodes = 0 ; fineNodes<nbFineNodes ;++fineNodes) { - int kCoarse = 0; - int c0 = 0; - for (int i = startIndex[r++]; i < startIndex[r] - 1; i++){ - int c = columns[i]; - for (;c-c0 < nbCoarseNodes*nbCoarseElements;kCoarse++) { - c0 += nbCoarseNodes*nbCoarseElements; - nbCoarseNodes = coarseGroups.getElementGroup(kCoarse)->getNbNodes(); - nbCoarseElements = coarseGroups.getElementGroup(kCoarse)->getNbElements(); + +int nbFields = 0; // TO DEFINE !!! + + for (int iGroup=0;iGroup<rGroups->getNbElementGroups();iGroup++) {// for 2d.groups + const dgGroupOfElements &rGroup = *rGroups->getElementGroup(iGroup); + this->getGroupProxy(iGroup).scale(0); + for (int iElement=0 ; iElement<rGroup.getNbElements() ;++iElement) {// for elements + for (int iNode = 0 ; iNode<rGroup.getNbNodes() ;++iNode) { + int jGroup = 0; + for (int i = startIndex[iGlobal++]; i < startIndex[iGlobal] - 1; i++){ + int jGlobal = columns[i]; + for (;jGlobal < dGroupsStartIGlobal[jGroup+1];jGroup++) { } - int coarseElement = (c-c0)/nbCoarseNodes; - int coarseNodes = c-c0-nbCoarseNodes*coarseElement; + int jElement = (jGlobal-dGroupsStartIGlobal[jGroup])/dGroups->getElementGroup(jGroup)->getNbNodes(); + int jNode = jGlobal-dGroupsStartIGlobal[jGroup]-jElement*dGroups->getElementGroup(jGroup)->getNbNodes(); for (int m = 0; m < nbFields; m++){ - (fineSol.getGroupProxy(kFine))(fineNodes,fineElement*nbFields+m) += values[i]*(coarseSol.getGroupProxy(kCoarse))(coarseNodes,coarseElement*nbFields+m); + (this->getGroupProxy(iGroup))(iNode,iElement*nbFields+m) += values[i]*(donor.getGroupProxy(jGroup))(jNode,jElement*nbFields+m); } } } - }*/ + }//*/ + } } void dgDofContainer::exportGroupIdMsh(){