Changeset 06e153
- Timestamp:
- May 10, 2012, 2:17:09 PM (14 years ago)
- Children:
- fcf7f6
- Parents:
- cd0fed
- Location:
- src/units/particle
- Files:
-
- 2 edited
-
bspline.hpp (modified) (1 diff)
-
interface_particles.cpp (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
src/units/particle/bspline.hpp
rcd0fed r06e153 48 48 int c = 0; 49 49 50 Index i; 51 Vector dir; 50 const int index_global_x = (p.Pos().X() - grid.Extent().Begin().X()) / grid.Extent().MeshWidth().X(); 51 const int index_global_y = (p.Pos().Y() - grid.Extent().Begin().Y()) / grid.Extent().MeshWidth().Y(); 52 const int index_global_z = (p.Pos().Z() - grid.Extent().Begin().Z()) / grid.Extent().MeshWidth().Z(); 52 53 53 const Index index_global = static_cast<Index>((p.Pos() - grid.Extent().Begin()) / grid.Extent().MeshWidth()); 54 assert(index_global.X() >= grid.Global().LocalBegin().X() && index_global.X() < grid.Global().LocalEnd().X()); 55 assert(index_global.Y() >= grid.Global().LocalBegin().Y() && index_global.Y() < grid.Global().LocalEnd().Y()); 56 assert(index_global.Z() >= grid.Global().LocalBegin().Z() && index_global.Z() < grid.Global().LocalEnd().Z()); 54 assert(index_global_x >= grid.Global().LocalBegin().X() && index_global_x < grid.Global().LocalEnd().X()); 55 assert(index_global_y >= grid.Global().LocalBegin().Y() && index_global_y < grid.Global().LocalEnd().Y()); 56 assert(index_global_z >= grid.Global().LocalBegin().Z() && index_global_z < grid.Global().LocalEnd().Z()); 57 57 58 const Index index_local = index_global - grid.Global().LocalBegin() + grid.Local().Begin(); 59 assert(index_local.X() >= grid.Local().Begin().X() && index_local.X() < grid.Local().End().X()); 60 assert(index_local.Y() >= grid.Local().Begin().Y() && index_local.Y() < grid.Local().End().Y()); 61 assert(index_local.Z() >= grid.Local().Begin().Z() && index_local.Z() < grid.Local().End().Z()); 58 const int index_local_x = index_global_x - grid.Global().LocalBegin().X() + grid.Local().Begin().X(); 59 const int index_local_y = index_global_y - grid.Global().LocalBegin().Y() + grid.Local().Begin().Y(); 60 const int index_local_z = index_global_z - grid.Global().LocalBegin().Z() + grid.Local().Begin().Z(); 62 61 63 const Vector pos_beg = p.Pos() - grid.Extent().Begin() - grid.Extent().MeshWidth() * (index_global - near_field_cells); 64 const Vector& h = grid.Extent().MeshWidth(); 62 assert(index_local_x >= grid.Local().Begin().X() && index_local_x < grid.Local().End().X()); 63 assert(index_local_y >= grid.Local().Begin().Y() && index_local_y < grid.Local().End().Y()); 64 assert(index_local_z >= grid.Local().Begin().Z() && index_local_z < grid.Local().End().Z()); 65 66 const vmg_float pos_beg_x = p.Pos().X() - grid.Extent().Begin().X() - grid.Extent().MeshWidth().X() * (index_global_x - near_field_cells); 67 const vmg_float pos_beg_y = p.Pos().Y() - grid.Extent().Begin().Y() - grid.Extent().MeshWidth().Y() * (index_global_y - near_field_cells); 68 const vmg_float pos_beg_z = p.Pos().Z() - grid.Extent().Begin().Z() - grid.Extent().MeshWidth().Z() * (index_global_z - near_field_cells); 69 70 const vmg_float h_x = grid.Extent().MeshWidth().X(); 71 const vmg_float h_y = grid.Extent().MeshWidth().Y(); 72 const vmg_float h_z = grid.Extent().MeshWidth().Z(); 65 73 66 74 // Iterate over all grid points which lie in the support of the interpolating B-Spline 67 dir[0] = pos_beg[0]; 68 for (i.X()=-1*near_field_cells; i.X()<=near_field_cells; ++i.X()) { 69 dir[1] = pos_beg[1]; 70 for (i.Y()=-1*near_field_cells; i.Y()<=near_field_cells; ++i.Y()) { 71 dir[2] = pos_beg[2]; 72 for (i.Z()=-1*near_field_cells; i.Z()<=near_field_cells; ++i.Z()) { 75 76 vmg_float dir_x, dir_y, dir_z; 77 dir_x = pos_beg_x; 78 for (int i=-1*near_field_cells; i<=near_field_cells; ++i) { 79 dir_y = pos_beg_y; 80 for (int j=-1*near_field_cells; j<=near_field_cells; ++j) { 81 dir_z = pos_beg_z; 82 for (int k=-1*near_field_cells; k<=near_field_cells; ++k) { 73 83 74 84 // Compute distance from grid point to particle 75 temp_val = EvaluateSpline( dir.Length());85 temp_val = EvaluateSpline(std::sqrt(dir_x*dir_x+dir_y*dir_y+dir_z*dir_z)); 76 86 vals[c++] = temp_val * p.Charge(); 77 87 int_val += temp_val; 78 88 79 dir [2] -= h[2];89 dir_z -= h_z; 80 90 } 81 dir [1] -= h[1];91 dir_y -= h_y; 82 92 } 83 dir [0] -= h[0];93 dir_x -= h_x; 84 94 } 85 95 86 96 // Reciprocal value of the numerically integrated spline 87 int_val = 1.0 / (int_val * grid.Extent().MeshWidth().Product());97 int_val = 1.0 / (int_val * h_x * h_y * h_z); 88 98 89 99 c = 0; 90 for (i.X()=-1*near_field_cells; i.X()<=near_field_cells; ++i.X()) 91 for (i.Y()=-1*near_field_cells; i.Y()<=near_field_cells; ++i.Y()) 92 for (i.Z()=-1*near_field_cells; i.Z()<=near_field_cells; ++i.Z()) 93 grid(index_local+i) += vals[c++] * int_val; 100 for (int i=-1*near_field_cells; i<=near_field_cells; ++i) 101 for (int j=-1*near_field_cells; j<=near_field_cells; ++j) 102 for (int k=-1*near_field_cells; k<=near_field_cells; ++k) 103 grid(index_local_x + i, 104 index_local_y + j, 105 index_local_z + k) += vals[c++] * int_val; 94 106 95 107 } -
src/units/particle/interface_particles.cpp
rcd0fed r06e153 84 84 85 85 // Assign charge values to the right hand side 86 for (index.X()=0; index.X()<grid.Local().Size().X(); ++index.X()) 87 for (index.Y()=0; index.Y()<grid.Local().Size().Y(); ++index.Y()) 88 for (index.Z()=0; index.Z()<grid.Local().Size().Z(); ++index.Z()) 89 grid(index + grid.Local().Begin()) = 4.0 * Math::pi * particle_grid.GetVal(index + particle_grid.Local().Begin()); 86 for (int i=0; i<grid.Local().Size().X(); ++i) 87 for (int j=0; j<grid.Local().Size().Y(); ++j) 88 for (int k=0; k<grid.Local().Size().Z(); ++k) 89 grid(grid.Local().Begin().X() + i, 90 grid.Local().Begin().Y() + j, 91 grid.Local().Begin().Z() + k) = 4.0 * Math::pi * 92 particle_grid.GetVal(particle_grid.Local().Begin().X() + i, 93 particle_grid.Local().Begin().Y() + j, 94 particle_grid.Local().Begin().Z() + k); 90 95 91 96 #ifdef DEBUG_OUTPUT
Note:
See TracChangeset
for help on using the changeset viewer.
