diff --git a/Solver/dgRungeKutta.cpp b/Solver/dgRungeKutta.cpp index 336744ef18399af60348e99c317ec6d4338ee108..d61ffbca6f9de99ccbde3b6e98856515c84e7435 100644 --- a/Solver/dgRungeKutta.cpp +++ b/Solver/dgRungeKutta.cpp @@ -115,11 +115,12 @@ double dgRungeKutta::diagonalRK (const dgConservationLaw *claw, dgDofContainer K (groups, nbFields); dgDofContainer Unp (groups, nbFields); dgDofContainer resd(groups, nbFields); - Unp.scale(0.); - Unp.axpy(*sol); + - if (_TransformNodalValue) _TransformNodalValue->apply(&Unp); - + if (_TransformNodalValue) _TransformNodalValue->apply(sol); + + Unp.scale(0.); + Unp.axpy(*sol); K.scale(0.); K.axpy(Unp); @@ -130,8 +131,8 @@ double dgRungeKutta::diagonalRK (const dgConservationLaw *claw, K.scale(A[j]*dt); K.axpy(*sol); } - if (_TransformNodalValue) _TransformNodalValue->apply_Inverse(&K); - if (_limiter) _limiter->apply(&K); + if (_limiter) _limiter->apply(&K); + if (_TransformNodalValue) _TransformNodalValue->apply_Inverse(&K); residual.compute(*groups,K,resd); K.scale(0.); for(int k=0; k < groups->getNbElementGroups(); k++) { diff --git a/Solver/dgTransformNodalValue.cpp b/Solver/dgTransformNodalValue.cpp index bd5af3752054f468c7625f8b32541b2a825fd251..86d26c30b497a9f955b9102d19e1d3caf17faded 100644 --- a/Solver/dgTransformNodalValue.cpp +++ b/Solver/dgTransformNodalValue.cpp @@ -8,55 +8,29 @@ static double n_supra = 20; int dgSupraTransformNodalValue::apply ( dgDofContainer *solution) { - dgGroupCollection *groups=solution->getGroups(); - int nbFields =_claw->getNbFields(); - - - for (int iGroup=0 ; iGroup<groups->getNbElementGroups() ; iGroup++) { - dgGroupOfElements &group = *groups->getElementGroup(iGroup); - fullMatrix<double> &sol = solution->getGroupProxy(iGroup); - fullMatrix<double> Temp; - for (int iElement=0 ; iElement<group.getNbElements() ; ++iElement) { - Temp.setAsProxy(sol, nbFields*iElement, nbFields ); - int fSize = Temp.size1(); - for (int k=0; k<nbFields; ++k) { - - for (int i=0; i<fSize; ++i) { - if (Temp(i,k)<0) Temp(i,k) = - pow(fabs(Temp(i,k)),1/n_supra); - else Temp(i,k) = pow(fabs(Temp(i,k)),1/n_supra); - // Temp(i,k) = Temp(i,k)*0.5; - } - - } + + + fullVector<double> sol = (*solution).getVector(); + for (int i=0;i< sol.size();i++){ + + if ((sol)(i)<0) (sol)(i)=-pow(- (sol)(i), 1/n_supra); + else (sol)(i)=pow( (sol)(i), 1/n_supra); } - } + return 1; } int dgSupraTransformNodalValue::apply_Inverse ( dgDofContainer *solution) { - dgGroupCollection *groups=solution->getGroups(); - int nbFields =_claw->getNbFields(); - for (int iGroup=0 ; iGroup<groups->getNbElementGroups() ; iGroup++) { - dgGroupOfElements &group = *groups->getElementGroup(iGroup); - fullMatrix<double> &sol = solution->getGroupProxy(iGroup); - fullMatrix<double> Temp; - for (int iElement=0 ; iElement<group.getNbElements() ; ++iElement) { - Temp.setAsProxy(sol, nbFields*iElement, nbFields ); - int fSize = Temp.size1(); - for (int k=0; k<nbFields; ++k) { - - - for (int i=0; i<fSize; ++i) { - if (Temp(i,k)<0) Temp(i,k) =- pow(fabs(Temp(i,k)),n_supra); - else Temp(i,k) = pow(fabs(Temp(i,k)),n_supra); - //Temp(i,k) = 2*Temp(i,k); - - } + - } + fullVector<double> sol = (*solution).getVector(); + for (int i=0;i< sol.size();i++){ + + if ((sol)(i)<0) (sol)(i)=-pow(- (sol)(i), n_supra); + else (sol)(i)=pow( (sol)(i), n_supra); } - } + return 1; }