/******************************************************************************* * This file is part of SWIFT. * Copyright (c) 2024 Matthieu Schaller (schaller@strw.leidenuniv.nl) * Yolan Uyttenhove (Yolan.Uyttenhove@UGent.be) * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published * by the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * ******************************************************************************/ #ifndef SWIFTSIM_CELL_GRID_H #define SWIFTSIM_CELL_GRID_H /* Config parameters. */ #include /* Includes. */ #include /* Local includes */ #include "const.h" #include "shadowswift/voronoi.h" #include "timeline.h" /*! @brief Enum indicating the completeness for the Voronoi mesh of this cell. * * A cell is considered complete when it and its neighbours on the same level in * the AMR have at least one particle in every 1/27th cube of the cell (obtained * by dividing cells in three along all axes). * * The Voronoi grid can safely be constructed on any level where the cell is * complete. */ enum grid_completeness { grid_invalidated_completeness = 0, grid_complete, grid_incomplete, }; struct cell_grid { /*! Pointer to parent where the grid is constructed. */ struct cell *construction_level; /*! Pointer to shallowest parent of this cell used in any pair construction * task. Can be above the construction level of this cell. We need to drift at * this level. */ struct cell *super; /*! Whether this cell is complete (at least one particle in all 27 sub-cells * if this cell is divided in thirds along each axis). */ enum grid_completeness self_completeness; /*! Whether this cell is itself complete and has directly neighbouring cell * on the same level in all directions which are also complete. */ int complete; #ifdef WITH_MPI /*! Flags indicating whether we should send the faces for the corresponding * SIDs over MPI */ int send_flags; #endif /*! Pointer to the voronoi struct of this cell (if any) */ struct voronoi *voronoi; /*! Pointer to this cells construction task. */ struct task *construction; /*! Linked list of this cells outgoing construction synchronization tasks * (i.e. for cells that need this cell for their construction task) */ struct link *sync_out; /*! Linked list of this cells incoming construction synchronization tasks * (i.e. cells needed for this cell's construction task) */ struct link *sync_in; /*! Time of last construction */ integertime_t ti_old; }; struct pcell_faces { size_t counts[27]; struct voronoi_pair faces[]; }; /*! @brief Enum used to indicate whether a cell is above, below or on the * construction level. Only used in the packed cell representation */ enum grid_construction_level { grid_above_construction_level, grid_on_construction_level, grid_below_construction_level }; #endif // SWIFTSIM_CELL_GRID_H