Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,8 @@ if(PHARE_WITH_CCACHE)
endif()
####

include("${PHARE_PROJECT_DIR}/res/cmake/test.cmake")

#*******************************************************************************
# PHARE source code
add_subdirectory(src/core)
Expand All @@ -56,7 +58,6 @@ add_subdirectory(src/python3)
add_subdirectory(src/phare)
#*******************************************************************************

include("${PHARE_PROJECT_DIR}/res/cmake/test.cmake")
include("${PHARE_PROJECT_DIR}/res/cmake/bench.cmake")

print_phare_options()
4 changes: 2 additions & 2 deletions src/amr/data/particles/refine/split.hpp
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
#ifndef PHARE_SPLIT_HPP
#define PHARE_SPLIT_HPP

#include "amr/data/particles/refine/split_1d.hpp"
#include "amr/data/particles/refine/split_2d.hpp"
#include "amr/data/particles/refine/split_1d.hpp" // IWYU pragma: keep
#include "amr/data/particles/refine/split_2d.hpp" // IWYU pragma: keep


#endif // endif PHARE_SPLIT_HPP
1 change: 0 additions & 1 deletion src/amr/data/particles/refine/splitter.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
#include <array>
#include <cmath>
#include <tuple>
#include <vector>
#include <cassert>
#include <cstdint>
#include <cstddef>
Expand Down
26 changes: 18 additions & 8 deletions src/core/utilities/meta/meta_utilities.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -78,11 +78,17 @@ namespace core

SimulatorOption<DimConst<2>, InterpConst<1>, 4, 5, 8, 9>,
SimulatorOption<DimConst<2>, InterpConst<2>, 4, 5, 8, 9, 16>,
SimulatorOption<DimConst<2>, InterpConst<3>, 4, 5, 8, 9, 25>>{};
SimulatorOption<DimConst<2>, InterpConst<3>, 4, 5, 8, 9, 25>,

SimulatorOption<DimConst<3>, InterpConst<1>, 6, 12>,
SimulatorOption<DimConst<3>, InterpConst<2>, 6, 12>,
SimulatorOption<DimConst<3>, InterpConst<3>, 6, 12>

>{};
}

template<std::size_t dim, std::size_t interp>
constexpr auto defaultNbrRefinedParts()

constexpr std::size_t defaultNbrRefinedParts(std::size_t dim, std::size_t interp)
{
auto sims = possibleSimulators();
using SimsTuple_t = decltype(sims);
Expand All @@ -93,8 +99,8 @@ namespace core
for_N<nsims>([&](auto i) {
using SimOption = std::tuple_element_t<i, SimsTuple_t>;

if constexpr (std::tuple_element_t<0, SimOption>{}() == dim
and std::tuple_element_t<1, SimOption>{}() == interp)
if (std::tuple_element_t<0, SimOption>{}() == dim
and std::tuple_element_t<1, SimOption>{}() == interp)
{
nbRefinedPart = std::tuple_element_t<2, SimOption>{};
}
Expand All @@ -116,8 +122,9 @@ namespace core
using SimuType = std::decay_t<decltype(simType)>;
using _dim = typename std::tuple_element<0, SimuType>::type;

if (!p)
p = maker(dim, _dim{});
if constexpr (_dim{}() < 3) // TORM on 3D PR
if (!p)
p = maker(dim, _dim{});
});

return p;
Expand All @@ -144,7 +151,10 @@ namespace core
Ptr_t p = nullptr;

core::apply(possibleSimulators(), [&](auto const& simType) {
_makeAtRuntime(maker, p, dim, interpOrder, nbRefinedPart, simType);
using SimuType = std::decay_t<decltype(simType)>; // TORM on 3D PR
using _dim = typename std::tuple_element<0, SimuType>::type; // TORM on 3D PR
if constexpr (_dim{}() < 3) // TORM on 3D PR
_makeAtRuntime(maker, p, dim, interpOrder, nbRefinedPart, simType);
});

return p;
Expand Down
45 changes: 20 additions & 25 deletions src/phare_amr.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,54 +2,49 @@
#define PHARE_AMR_INCLUDE_HPP


#include "core/def/phare_mpi.hpp"
#include "core/def/phare_mpi.hpp" // IWYU pragma: keep

#include "phare_core.hpp"
#include "amr/wrappers/hierarchy.hpp"
#include "amr/data/particles/refine/splitter.hpp"
#include "amr/data/particles/refine/particles_data_split.hpp"


#include <SAMRAI/algs/TimeRefinementIntegrator.h>
#include <SAMRAI/geom/CartesianGridGeometry.h>
#include <SAMRAI/hier/Box.h>
#include <SAMRAI/hier/BoxContainer.h>
#include <SAMRAI/tbox/Database.h>
#include <SAMRAI/hier/IntVector.h>
#include <SAMRAI/tbox/DatabaseBox.h>
#include <SAMRAI/hier/BoxContainer.h>
#include <SAMRAI/tbox/InputManager.h>
#include <SAMRAI/tbox/MemoryDatabase.h>
#include <SAMRAI/hier/PatchHierarchy.h>
#include <SAMRAI/mesh/BergerRigoutsos.h>
#include <SAMRAI/mesh/GriddingAlgorithm.h>
#include <SAMRAI/mesh/StandardTagAndInitialize.h>
#include <SAMRAI/mesh/TreeLoadBalancer.h>
#include <SAMRAI/tbox/Database.h>
#include <SAMRAI/tbox/DatabaseBox.h>
#include <SAMRAI/tbox/InputManager.h>
#include <SAMRAI/tbox/MemoryDatabase.h>


#include <SAMRAI/geom/CartesianGridGeometry.h>
#include <SAMRAI/mesh/StandardTagAndInitialize.h>
#include <SAMRAI/algs/TimeRefinementIntegrator.h>

#include "phare_core.hpp"
#include "amr/amr_constants.hpp"
#include "amr/types/amr_types.hpp"
#include "amr/wrappers/hierarchy.hpp"
#include "amr/wrappers/integrator.hpp"
#include "amr/messengers/messenger_factory.hpp"
#include "amr/data/particles/refine/splitter.hpp"
#include "amr/data/particles/refine/particles_data_split.hpp"



namespace PHARE::amr
{
template<std::size_t dimension_, std::size_t interp_order_, std::size_t nbRefinedPart_>
template<SimOpts opts>
struct PHARE_Types
{
static auto constexpr dimension = dimension_;
static auto constexpr interp_order = interp_order_;
static auto constexpr nbRefinedPart = nbRefinedPart_;
auto static constexpr dimension = opts.dimension;
auto static constexpr interp_order = opts.interp_order;
auto static constexpr nbRefinedPart = opts.nbRefinedPart;

using core_types = PHARE::core::PHARE_Types<opts>;

using hierarchy_t = PHARE::amr::Hierarchy;

using Splitter_t = PHARE::amr::Splitter<PHARE::core::DimConst<dimension>,
PHARE::core::InterpConst<interp_order>,
PHARE::core::RefinedParticlesConst<nbRefinedPart>>;

using core_types = PHARE::core::PHARE_Types<dimension, interp_order>;

using RefinementParams
= PHARE::amr::RefinementParams<typename core_types::ParticleArray_t, Splitter_t>;
};
Expand Down
68 changes: 31 additions & 37 deletions src/phare_core.hpp
Original file line number Diff line number Diff line change
@@ -1,63 +1,57 @@
#ifndef PHARE_CORE_INCLUDE_HPP
#define PHARE_CORE_INCLUDE_HPP

#include "core/data/ions/ions.hpp"
#include "core/data/grid/grid.hpp"
#include "core/data/electromag/electromag.hpp"
#include "core/data/electrons/electrons.hpp"
#include "core/data/grid/gridlayout.hpp"
#include "core/data/vecfield/vecfield.hpp"
#include "core/data/electrons/electrons.hpp"
#include "core/data/electromag/electromag.hpp"
#include "core/data/grid/gridlayoutimplyee.hpp"
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Broken include path for GridLayoutImplYee

"gridlayoutimplyee.hpp" looks misspelled; tests include "core/data/grid/gridlayout_impl.hpp". This will fail to build.

-#include "core/data/grid/gridlayoutimplyee.hpp"
+#include "core/data/grid/gridlayout_impl.hpp"

If the actual header is gridlayout_impl_yee.hpp, include that instead.

📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
#include "core/data/grid/gridlayoutimplyee.hpp"
#include "core/data/grid/gridlayout_impl.hpp"
🤖 Prompt for AI Agents
In src/phare_core.hpp around line 10, the include "#include
"core/data/grid/gridlayoutimplyee.hpp"" is misspelled and will break builds;
replace it with the correct header path used by the project (either
"core/data/grid/gridlayout_impl.hpp" if that is the canonical header, or
"core/data/grid/gridlayout_impl_yee.hpp" if the Yee-specific implementation is
intended), and ensure the filename and path exactly match the header present in
the repo (fix casing/underscores) so the compiler can locate it.

#include "core/data/ions/ion_population/ion_population.hpp"
#include "core/data/ions/ions.hpp"
#include "core/data/ions/particle_initializers/maxwellian_particle_initializer.hpp"
#include "core/data/ndarray/ndarray_vector.hpp"
#include "core/data/particles/particle_array.hpp"
#include "core/data/vecfield/vecfield.hpp"
#include "core/models/physical_state.hpp"
#include "core/models/physical_state.hpp"
#include "core/utilities/meta/meta_utilities.hpp"
#include "core/utilities/algorithm.hpp"
#include "core/logger.hpp"
#include "core/data/ions/ion_population/ion_population.hpp"
#include "core/data/ions/particle_initializers/maxwellian_particle_initializer.hpp"

#include "phare_simulator_options.hpp"

#include "cppdict/include/dict.hpp"

#include <string>
#include <vector>
#include <cstdint>
#include <functional>
#include <unordered_map>

#include "cppdict/include/dict.hpp"

namespace PHARE::core
{
template<std::size_t dimension_, std::size_t interp_order_>

template<SimOpts opts>
struct PHARE_Types
{
static auto constexpr dimension = dimension_;
static auto constexpr interp_order = interp_order_;
auto static constexpr dimension = opts.dimension;
auto static constexpr interp_order = opts.interp_order;

using Array_t = PHARE::core::NdArrayVector<dimension>;
using ArrayView_t = PHARE::core::NdArrayView<dimension>;
using Grid_t = PHARE::core::Grid<Array_t, PHARE::core::HybridQuantity::Scalar>;
using Field_t = PHARE::core::Field<dimension, PHARE::core::HybridQuantity::Scalar>;
using VecField_t = PHARE::core::VecField<Field_t, PHARE::core::HybridQuantity>;
using SymTensorField_t = PHARE::core::SymTensorField<Field_t, PHARE::core::HybridQuantity>;
using Electromag_t = PHARE::core::Electromag<VecField_t>;
using YeeLayout_t = PHARE::core::GridLayoutImplYee<dimension, interp_order>;
using GridLayout_t = PHARE::core::GridLayout<YeeLayout_t>;
using Array_t = NdArrayVector<dimension>;
using ArrayView_t = NdArrayView<dimension>;
using Grid_t = Grid<Array_t, HybridQuantity::Scalar>;
using Field_t = Field<dimension, HybridQuantity::Scalar>;
using VecField_t = VecField<Field_t, HybridQuantity>;
using SymTensorField_t = SymTensorField<Field_t, HybridQuantity>;
using Electromag_t = Electromag<VecField_t>;
using YeeLayout_t = GridLayoutImplYee<dimension, interp_order>;
using GridLayout_t = GridLayout<YeeLayout_t>;

using Particle_t = PHARE::core::Particle<dimension>;
using ParticleAoS_t = PHARE::core::ParticleArray<dimension>;
using Particle_t = Particle<dimension>;
using ParticleAoS_t = ParticleArray<dimension>;
using ParticleArray_t = ParticleAoS_t;
using ParticleSoA_t = PHARE::core::ContiguousParticles<dimension>;
using ParticleSoA_t = ContiguousParticles<dimension>;

using MaxwellianParticleInitializer_t
= PHARE::core::MaxwellianParticleInitializer<ParticleArray_t, GridLayout_t>;
using IonPopulation_t
= PHARE::core::IonPopulation<ParticleArray_t, VecField_t, SymTensorField_t>;
using Ions_t = PHARE::core::Ions<IonPopulation_t, GridLayout_t>;
using Electrons_t = PHARE::core::Electrons<Ions_t>;
= MaxwellianParticleInitializer<ParticleArray_t, GridLayout_t>;
using IonPopulation_t = IonPopulation<ParticleArray_t, VecField_t, SymTensorField_t>;
using Ions_t = Ions<IonPopulation_t, GridLayout_t>;
using Electrons_t = Electrons<Ions_t>;

using ParticleInitializerFactory
= PHARE::core::ParticleInitializerFactory<ParticleArray_t, GridLayout_t>;
using ParticleInitializerFactory_t = ParticleInitializerFactory<ParticleArray_t, GridLayout_t>;
};

struct PHARE_Sim_Types
Expand Down
24 changes: 24 additions & 0 deletions src/phare_simulator_options.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
#ifndef PHARE_SIMULATOR_OPTIONS_HPP
#define PHARE_SIMULATOR_OPTIONS_HPP

#include "core/utilities/meta/meta_utilities.hpp"

#include <cstddef>

namespace PHARE
{


struct SimOpts
{
std::size_t dimension = 1;
std::size_t interp_order = 1;

std::size_t nbRefinedPart = core::defaultNbrRefinedParts(dimension, interp_order);
};



} // namespace PHARE

#endif // PHARE_SIMULATOR_OPTIONS_HPP
55 changes: 26 additions & 29 deletions src/phare_solver.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,57 +2,54 @@
#ifndef PHARE_SOLVER_INCLUDE_HPP
#define PHARE_SOLVER_INCLUDE_HPP

#include "phare_amr.hpp"
#include "phare_amr.hpp" // IWYU pragma: keep

#include "amr/solvers/solver.hpp"
#include "amr/solvers/solver_mhd.hpp"
#include "amr/solvers/solver_ppc.hpp"
#include "amr/level_initializer/level_initializer.hpp"
#include "amr/level_initializer/level_initializer_factory.hpp"
#include "amr/multiphysics_integrator.hpp"
#include "amr/physical_models/hybrid_model.hpp"
#include "amr/physical_models/mhd_model.hpp"
#include "amr/messengers/messenger_factory.hpp"
#include "amr/physical_models/hybrid_model.hpp"
#include "amr/physical_models/physical_model.hpp"
#include "amr/level_initializer/level_initializer_factory.hpp"

namespace PHARE::solver
{
template<std::size_t dimension_, std::size_t interp_order_, std::size_t nbRefinedPart_>
template<auto opts>
struct PHARE_Types
{
static auto constexpr dimension = dimension_;
static auto constexpr interp_order = interp_order_;
static auto constexpr nbRefinedPart = nbRefinedPart_;
auto static constexpr dimension = opts.dimension;
auto static constexpr interp_order = opts.interp_order;
auto static constexpr nbRefinedPart = opts.nbRefinedPart;

// core deps
using core_types = PHARE::core::PHARE_Types<dimension, interp_order>;
using VecField_t = typename core_types::VecField_t;
using Grid_t = typename core_types::Grid_t;
using Electromag_t = typename core_types::Electromag_t;
using Ions_t = typename core_types::Ions_t;
using GridLayout_t = typename core_types::GridLayout_t;
using Electrons_t = typename core_types::Electrons_t;
using core_types = PHARE::core::PHARE_Types<opts>;
using VecField_t = core_types::VecField_t;
using Grid_t = core_types::Grid_t;
using Electromag_t = core_types::Electromag_t;
using Ions_t = core_types::Ions_t;
using GridLayout_t = core_types::GridLayout_t;
using Electrons_t = core_types::Electrons_t;
Comment on lines +27 to +32
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Add missing typename on dependent nested types

These aliases reference dependent types and require typename to compile.

Apply:

-    using VecField_t   = core_types::VecField_t;
-    using Grid_t       = core_types::Grid_t;
-    using Electromag_t = core_types::Electromag_t;
-    using Ions_t       = core_types::Ions_t;
-    using GridLayout_t = core_types::GridLayout_t;
-    using Electrons_t  = core_types::Electrons_t;
+    using VecField_t   = typename core_types::VecField_t;
+    using Grid_t       = typename core_types::Grid_t;
+    using Electromag_t = typename core_types::Electromag_t;
+    using Ions_t       = typename core_types::Ions_t;
+    using GridLayout_t = typename core_types::GridLayout_t;
+    using Electrons_t  = typename core_types::Electrons_t;
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
using VecField_t = core_types::VecField_t;
using Grid_t = core_types::Grid_t;
using Electromag_t = core_types::Electromag_t;
using Ions_t = core_types::Ions_t;
using GridLayout_t = core_types::GridLayout_t;
using Electrons_t = core_types::Electrons_t;
using VecField_t = typename core_types::VecField_t;
using Grid_t = typename core_types::Grid_t;
using Electromag_t = typename core_types::Electromag_t;
using Ions_t = typename core_types::Ions_t;
using GridLayout_t = typename core_types::GridLayout_t;
using Electrons_t = typename core_types::Electrons_t;
🤖 Prompt for AI Agents
In src/phare_solver.hpp around lines 27 to 32, the type aliases reference
dependent nested types and must be prefixed with the keyword typename; update
each alias to use "typename core_types::..." (e.g., change using VecField_t =
core_types::VecField_t; to using VecField_t = typename core_types::VecField_t;)
for all six aliases so the code compiles when core_types is a dependent type.

// core deps

using IPhysicalModel = PHARE::solver::IPhysicalModel<PHARE::amr::SAMRAI_Types>;
using HybridModel_t = PHARE::solver::HybridModel<GridLayout_t, Electromag_t, Ions_t,
Electrons_t, PHARE::amr::SAMRAI_Types, Grid_t>;
using MHDModel_t
= PHARE::solver::MHDModel<GridLayout_t, VecField_t, PHARE::amr::SAMRAI_Types, Grid_t>;
using SolverPPC_t = PHARE::solver::SolverPPC<HybridModel_t, PHARE::amr::SAMRAI_Types>;
using SolverMHD_t = PHARE::solver::SolverMHD<MHDModel_t, PHARE::amr::SAMRAI_Types>;
using LevelInitializerFactory_t = PHARE::solver::LevelInitializerFactory<HybridModel_t>;
using HybridModel_t = HybridModel<GridLayout_t, Electromag_t, Ions_t, Electrons_t,
PHARE::amr::SAMRAI_Types, Grid_t>;
using MHDModel_t = MHDModel<GridLayout_t, VecField_t, PHARE::amr::SAMRAI_Types, Grid_t>;
using SolverPPC_t = SolverPPC<HybridModel_t, PHARE::amr::SAMRAI_Types>;
using SolverMHD_t = SolverMHD<MHDModel_t, PHARE::amr::SAMRAI_Types>;
using LevelInitializerFactory_t = LevelInitializerFactory<HybridModel_t>;

// amr deps
using amr_types = PHARE::amr::PHARE_Types<dimension, interp_order, nbRefinedPart>;
using RefinementParams = typename amr_types::RefinementParams;
using amr_types = PHARE::amr::PHARE_Types<opts>;
using RefinementParams = amr_types::RefinementParams;

using MessengerFactory // = amr/solver bidirectional dependency
= PHARE::amr::MessengerFactory<MHDModel_t, HybridModel_t, RefinementParams>;
// amr deps

using MultiPhysicsIntegrator
= PHARE::solver::MultiPhysicsIntegrator<MessengerFactory, LevelInitializerFactory_t,
PHARE::amr::SAMRAI_Types>;
using MultiPhysicsIntegrator_t
= MultiPhysicsIntegrator<MessengerFactory, LevelInitializerFactory_t,
PHARE::amr::SAMRAI_Types>;
};

} // namespace PHARE::solver
Expand Down
Loading