From 13bb321d227dea8fca3bd6485321aeb59dba4829 Mon Sep 17 00:00:00 2001 From: Jingang Liang Date: Mon, 28 Jul 2025 16:48:34 +0800 Subject: [PATCH] fix bug for virtual lattice --- src/cell.cpp | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/src/cell.cpp b/src/cell.cpp index 95f143428b..790f5115b6 100644 --- a/src/cell.cpp +++ b/src/cell.cpp @@ -271,9 +271,11 @@ bool Universe::find_cell(Particle& p) const Cell& c {*model::cells[model::cell_map[filled_with_triso_base_]]}; vector lat_ind(3); Position r {p.r_local()}; - lat_ind[0]=floor((r.x-c.vl_lower_left_[0])/c.vl_pitch_[0]); - lat_ind[1]=floor((r.y-c.vl_lower_left_[1])/c.vl_pitch_[1]); - lat_ind[2]=floor((r.z-c.vl_lower_left_[2])/c.vl_pitch_[2]); + lat_ind[0]=std::max(std::min(floor((r.x-c.vl_lower_left_[0])/c.vl_pitch_[0]),c.vl_shape_[0]-1),0); + lat_ind[1]=std::max(std::min(floor((r.y-c.vl_lower_left_[1])/c.vl_pitch_[1]),c.vl_shape_[1]-1),0); + lat_ind[2]=std::max(std::min(floor((r.z-c.vl_lower_left_[2])/c.vl_pitch_[2]),c.vl_shape_[2]-1),0); + + int32_t i_univ = p.coord(p.n_coord() - 1).universe; for (int token : c.vl_triso_distribution_[lat_ind[0]+lat_ind[1]*c.vl_shape_[0]+lat_ind[2]*c.vl_shape_[0]*c.vl_shape_[1]]) { vector triso_center=model::surfaces[abs(token) - 1]->get_center(); @@ -715,13 +717,6 @@ CSGCell::CSGCell(pugi::xml_node cell_node) if (virtual_lattice_) { vl_triso_distribution_ = generate_triso_distribution(vl_shape_, vl_pitch_, vl_lower_left_, rpn_, id_); - write_message("successfully generated virtual lattice", 5); - for (int tri_sur_id : vl_triso_distribution_[floor(vl_shape_[0]/2)+floor(vl_shape_[1]/2)*vl_shape_[0]+\ - floor(vl_shape_[2]/2)*vl_shape_[0]*vl_shape_[1]]) - { - std::cout<id_< CSGCell::distance( int loop_time; for (int i=0; i<3; i++) { lat_ind[i]=floor((temp_pos[i]-vl_lower_left_[i])/vl_pitch_[i]); + if (lat_ind[i]==vl_shape_[i] && norm_u[i]<0) { + lat_ind[i]=vl_shape_[i]-1; + } + if (lat_ind[i]==-1 && norm_u[i]>0) { + lat_ind[i]=0; + } } dis_to_bou = {INFTY,INFTY,INFTY};