- Timestamp:
- May 2, 2012, 1:36:54 PM (14 years ago)
- Children:
- 4e8206
- Parents:
- 6fee21
- File:
-
- 1 edited
-
src/comm/comm.cpp (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/comm/comm.cpp
r6fee21 r49f8653 27 27 using namespace VMG; 28 28 29 vmg_float Comm::ComputeResidualNorm(Multigrid& sol , Multigrid& rhs)29 vmg_float Comm::ComputeResidualNorm(Multigrid& sol_mg, Multigrid& rhs_mg) 30 30 { 31 31 #ifdef DEBUG_MATRIX_CHECKS … … 35 35 #endif 36 36 37 Grid::iterator grid_iter;38 37 Stencil::iterator stencil_iter; 39 vmg_float val;40 38 vmg_float norm = 0.0; 41 39 42 const vmg_float prefactor = MG::GetDiscretization()->OperatorPrefactor(sol ());40 const vmg_float prefactor = MG::GetDiscretization()->OperatorPrefactor(sol_mg()); 43 41 const Stencil& A = MG::GetDiscretization()->GetStencil(); 44 42 45 this->CommToGhosts(sol ());43 this->CommToGhosts(sol_mg()); 46 44 47 if (sol ().Global().BoundaryType() == LocallyRefined)48 MG::GetDiscretization()->SetInnerBoundary(sol (), rhs(), sol(sol.Level()-1));45 if (sol_mg().Global().BoundaryType() == LocallyRefined) 46 MG::GetDiscretization()->SetInnerBoundary(sol_mg(), rhs_mg(), sol_mg(sol_mg.Level()-1)); 49 47 50 for (grid_iter=rhs().Iterators().Local().Begin(); grid_iter!=rhs().Iterators().Local().End(); ++grid_iter) { 51 val = rhs().GetVal(*grid_iter) - prefactor * A.GetDiag() * sol().GetVal(*grid_iter); 52 for (stencil_iter=A.begin(); stencil_iter!=A.end(); ++stencil_iter) 53 val -= prefactor * stencil_iter->Val() * sol().GetVal(grid_iter->X() + stencil_iter->Disp().X(), 54 grid_iter->Y() + stencil_iter->Disp().Y(), 55 grid_iter->Z() + stencil_iter->Disp().Z()); 56 norm += val*val; 57 } 48 const Grid& sol = sol_mg(); 49 const Grid& rhs = rhs_mg(); 58 50 59 norm = sqrt(sol().Extent().MeshWidth().Product() * GlobalSum(norm)); 51 for (int i=rhs.Local().Begin().X(); i<rhs.Local().End().X(); ++i) 52 for (int j=rhs.Local().Begin().Y(); j<rhs.Local().End().Y(); ++j) 53 for (int k=rhs.Local().Begin().Z(); k<rhs.Local().End().Z(); ++k) { 54 vmg_float val = rhs.GetVal(i,j,k) - prefactor * A.GetDiag() * sol.GetVal(i,j,k); 55 for (stencil_iter=A.begin(); stencil_iter!=A.end(); ++stencil_iter) 56 val -= prefactor * stencil_iter->Val() * sol.GetVal(i + stencil_iter->Disp().X(), 57 j + stencil_iter->Disp().Y(), 58 k + stencil_iter->Disp().Z()); 59 norm = val*val; 60 } 61 62 norm = GlobalSum(norm); 63 norm = std::sqrt(sol.Extent().MeshWidth().Product() * norm); 60 64 61 65 return norm;
Note:
See TracChangeset
for help on using the changeset viewer.
