Changeset ac6d04 for src/smoother/gsrb.cpp
- Timestamp:
- Apr 10, 2012, 1:55:49 PM (14 years ago)
- Children:
- a40eea
- Parents:
- d24c2f
- File:
-
- 1 edited
-
src/smoother/gsrb.cpp (modified) (7 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/smoother/gsrb.cpp
rd24c2f rac6d04 11 11 #include <config.h> 12 12 #endif 13 14 #include <mpi.h> 13 15 14 16 #include <sstream> … … 32 34 33 35 for (i=begin.X(); i<end.X(); ++i) 34 for (j=begin.Y(); j<end.Y(); ++j) 35 for (k=begin.Z()+((i+j+off)%2); k<end.Z(); k+=2) { 36 for (j=begin.Y(); j<end.Y(); ++j) { 37 38 int z_begin = begin.Z() + (i + j + begin.Z() + off) % 2; 39 40 #ifdef DEBUG 41 int off_sum = MG::GetComm()->LevelSum(rhs, z_begin - begin.Z()); 42 assert(z_begin - begin.Z() == 0 || z_begin - begin.Z() == 1); 43 assert(off_sum == 0 || off_sum == MG::GetComm()->Size(rhs)); 44 #endif /* DEBUG */ 45 46 for (k=z_begin; k<end.Z(); k+=2) { 36 47 37 48 temp = prefactor * rhs.GetVal(i,j,k); … … 45 56 46 57 } 58 } 47 59 } 48 60 49 61 void GaussSeidelRB::Compute(Grid& sol, Grid& rhs) 50 62 { 51 #ifdef DEBUG_MATRIX_CHECKS52 sol.IsConsistent();53 rhs.IsConsistent();54 #endif55 56 #ifdef DEBUG57 sol.IsCompatible(rhs);58 #endif59 60 63 const Stencil& mat = MG::GetDiscretization()->GetStencil(); 61 64 const vmg_float prefactor_inv = 1.0 / MG::GetDiscretization()->OperatorPrefactor(sol); 62 65 const vmg_float diag_inv = 1.0 / mat.GetDiag(); 63 const int off = rhs.Global().BeginLocal().Sum() - rhs.Local().HasHalo1().Sum(); 66 const int off = rhs.Global().LocalBegin().Sum() - rhs.Local().HaloSize1().Sum(); 67 const LocalIndices& local = rhs.Local(); 64 68 Comm& comm = *MG::GetComm(); 65 69 … … 73 77 // Smooth part not depending on ghost cells 74 78 ComputePartial(sol, rhs, mat, 75 rhs.Local().Begin()+1, rhs.Local().End()-1,79 local.Begin()+1, local.End()-1, 76 80 prefactor_inv, diag_inv, off+1); 77 81 78 82 // Finish asynchronous communication 79 comm.CommToGhostsAsyncFinish( );83 comm.CommToGhostsAsyncFinish(sol); 80 84 81 85 /* … … 84 88 85 89 ComputePartial(sol, rhs, mat, 86 rhs.Local().Begin(),87 Index( rhs.Local().Begin().X()+1, rhs.Local().End().Y(), rhs.Local().End().Z()),90 local.Begin(), 91 Index(local.Begin().X()+1, local.End().Y(), local.End().Z()), 88 92 prefactor_inv, diag_inv, off+1); 89 93 90 94 ComputePartial(sol, rhs, mat, 91 Index( rhs.Local().End().X()-1, rhs.Local().Begin().Y(), rhs.Local().Begin().Z()),92 rhs.Local().End(),95 Index(local.End().X()-1, local.Begin().Y(), local.Begin().Z()), 96 local.End(), 93 97 prefactor_inv, diag_inv, off+1); 94 98 95 99 ComputePartial(sol, rhs, mat, 96 Index( rhs.Local().Begin().X()+1, rhs.Local().Begin().Y(), rhs.Local().Begin().Z()),97 Index( rhs.Local().End().X()-1, rhs.Local().Begin().Y()+1, rhs.Local().End().Z()),100 Index(local.Begin().X()+1, local.Begin().Y(), local.Begin().Z()), 101 Index(local.End().X()-1, local.Begin().Y()+1, local.End().Z()), 98 102 prefactor_inv, diag_inv, off+1); 99 103 100 104 ComputePartial(sol, rhs, mat, 101 Index( rhs.Local().Begin().X()+1, rhs.Local().End().Y()-1, rhs.Local().Begin().Z()),102 Index( rhs.Local().End().X()-1, rhs.Local().End().Y(), rhs.Local().End().Z()),105 Index(local.Begin().X()+1, local.End().Y()-1, local.Begin().Z()), 106 Index(local.End().X()-1, local.End().Y(), local.End().Z()), 103 107 prefactor_inv, diag_inv, off+1); 104 108 105 109 ComputePartial(sol, rhs, mat, 106 Index( rhs.Local().Begin().X()+1, rhs.Local().Begin().Y()+1, rhs.Local().Begin().Z()),107 Index( rhs.Local().End().X()-1, rhs.Local().End().Y()-1, rhs.Local().Begin().Z()+1),110 Index(local.Begin().X()+1, local.Begin().Y()+1, local.Begin().Z()), 111 Index(local.End().X()-1, local.End().Y()-1, local.Begin().Z()+1), 108 112 prefactor_inv, diag_inv, off+1); 109 113 110 114 ComputePartial(sol, rhs, mat, 111 Index( rhs.Local().Begin().X()+1, rhs.Local().Begin().Y()+1, rhs.Local().End().Z()-1),112 Index( rhs.Local().End().X()-1, rhs.Local().End().Y()-1, rhs.Local().End().Z()),115 Index(local.Begin().X()+1, local.Begin().Y()+1, local.End().Z()-1), 116 Index(local.End().X()-1, local.End().Y()-1, local.End().Z()), 113 117 prefactor_inv, diag_inv, off+1); 114 118 … … 122 126 // Smooth part not depending on ghost cells 123 127 ComputePartial(sol, rhs, mat, 124 rhs.Local().Begin()+1, rhs.Local().End()-1,128 local.Begin()+1, local.End()-1, 125 129 prefactor_inv, diag_inv, off); 126 130 127 131 // Finish asynchronous communication 128 comm.CommToGhostsAsyncFinish( );132 comm.CommToGhostsAsyncFinish(sol); 129 133 130 134 /* … … 133 137 134 138 ComputePartial(sol, rhs, mat, 135 rhs.Local().Begin(),136 Index( rhs.Local().Begin().X()+1, rhs.Local().End().Y(), rhs.Local().End().Z()),139 local.Begin(), 140 Index(local.Begin().X()+1, local.End().Y(), local.End().Z()), 137 141 prefactor_inv, diag_inv, off); 138 142 139 143 ComputePartial(sol, rhs, mat, 140 Index( rhs.Local().End().X()-1, rhs.Local().Begin().Y(), rhs.Local().Begin().Z()),141 rhs.Local().End(),144 Index(local.End().X()-1, local.Begin().Y(), local.Begin().Z()), 145 local.End(), 142 146 prefactor_inv, diag_inv, off); 143 147 144 148 ComputePartial(sol, rhs, mat, 145 Index( rhs.Local().Begin().X()+1, rhs.Local().Begin().Y(), rhs.Local().Begin().Z()),146 Index( rhs.Local().End().X()-1, rhs.Local().Begin().Y()+1, rhs.Local().End().Z()),149 Index(local.Begin().X()+1, local.Begin().Y(), local.Begin().Z()), 150 Index(local.End().X()-1, local.Begin().Y()+1, local.End().Z()), 147 151 prefactor_inv, diag_inv, off); 148 152 149 153 ComputePartial(sol, rhs, mat, 150 Index( rhs.Local().Begin().X()+1, rhs.Local().End().Y()-1, rhs.Local().Begin().Z()),151 Index( rhs.Local().End().X()-1, rhs.Local().End().Y(), rhs.Local().End().Z()),154 Index(local.Begin().X()+1, local.End().Y()-1, local.Begin().Z()), 155 Index(local.End().X()-1, local.End().Y(), local.End().Z()), 152 156 prefactor_inv, diag_inv, off); 153 157 154 158 ComputePartial(sol, rhs, mat, 155 Index( rhs.Local().Begin().X()+1, rhs.Local().Begin().Y()+1, rhs.Local().Begin().Z()),156 Index( rhs.Local().End().X()-1, rhs.Local().End().Y()-1, rhs.Local().Begin().Z()+1),159 Index(local.Begin().X()+1, local.Begin().Y()+1, local.Begin().Z()), 160 Index(local.End().X()-1, local.End().Y()-1, local.Begin().Z()+1), 157 161 prefactor_inv, diag_inv, off); 158 162 159 163 ComputePartial(sol, rhs, mat, 160 Index( rhs.Local().Begin().X()+1, rhs.Local().Begin().Y()+1, rhs.Local().End().Z()-1),161 Index( rhs.Local().End().X()-1, rhs.Local().End().Y()-1, rhs.Local().End().Z()),164 Index(local.Begin().X()+1, local.Begin().Y()+1, local.End().Z()-1), 165 Index(local.End().X()-1, local.End().Y()-1, local.End().Z()), 162 166 prefactor_inv, diag_inv, off); 163 167 }
Note:
See TracChangeset
for help on using the changeset viewer.
