21 #ifndef _aspect_particle_generator_interface_h 22 #define _aspect_particle_generator_interface_h 27 #include <deal.II/particles/particle.h> 28 #include <deal.II/particles/generators.h> 29 #include <deal.II/base/parameter_handler.h> 30 #include <deal.II/base/exceptions.h> 48 using namespace ::Particles;
49 using ::Particles::Particle;
55 "You requested to generate a particle at a position that " 56 "is not owned by this process, therefore the " 57 "Particle::Generator::Interface::generate_particle() function " 58 "refused to create it. You can circumvent this error message " 59 "by catching the ExcParticlePointNotInDomain exception and " 60 "do whatever you think is appropriate in this case.");
68 class Interface :
public SimulatorAccess<dim>,
public ParticleInterfaceBase
92 generate_particles(std::multimap<Particles::internal::LevelInd, Particle<dim>> &particles);
115 std::pair<Particles::internal::LevelInd,Particle<dim>>
116 generate_particle (
const typename parallel::distributed::Triangulation<dim>::active_cell_iterator &cell,
117 const types::particle_index
id);
132 std::pair<Particles::internal::LevelInd,Particle<dim>>
134 const types::particle_index
id)
const;
156 Particles::ParticleIterator<dim>
158 const types::particle_index
id,
159 Particles::ParticleHandler<dim> &particle_handler)
const;
186 const std::string &description,
187 void (*declare_parameters_function) (ParameterHandler &),
201 std::unique_ptr<Interface<dim>>
235 #define ASPECT_REGISTER_PARTICLE_GENERATOR(classname, name, description) \ 236 template class classname<2>; \ 237 template class classname<3>; \ 238 namespace ASPECT_REGISTER_PARTICLE_GENERATOR_ ## classname \ 240 aspect::internal::Plugins::RegisterHelper<aspect::Particle::Generator::Interface<2>,classname<2 >> \ 241 dummy_ ## classname ## _2d (&aspect::Particle::Generator::register_particle_generator<2>, \ 242 name, description); \ 243 aspect::internal::Plugins::RegisterHelper<aspect::Particle::Generator::Interface<3>,classname<3>> \ 244 dummy_ ## classname ## _3d (&aspect::Particle::Generator::register_particle_generator<3>, \ 245 name, description); \ Particles::ParticleIterator< dim > insert_particle_at_position(const Point< dim > &position, const types::particle_index id, Particles::ParticleHandler< dim > &particle_handler) const
StructuredDataLookup< dim > DEAL_II_DEPRECATED
virtual void initialize() override
std::pair< Particles::internal::LevelInd, Particle< dim > > generate_particle(const typename parallel::distributed::Triangulation< dim >::active_cell_iterator &cell, const types::particle_index id)
DeclExceptionMsg(ExcParticlePointNotInDomain, "You requested to generate a particle at a position that " "is not owned by this process, therefore the " "Particle::Generator::Interface::generate_particle() function " "refused to create it. You can circumvent this error message " "by catching the ExcParticlePointNotInDomain exception and " "do whatever you think is appropriate in this case.")
void register_particle_generator(const std::string &name, const std::string &description, void(*declare_parameters_function)(ParameterHandler &), std::unique_ptr< Interface< dim >>(*factory_function)())
void write_plugin_graph(std::ostream &output_stream)
std::unique_ptr< Interface< dim > > create_particle_generator(ParameterHandler &prm)
virtual DEAL_II_DEPRECATED void generate_particles(std::multimap< Particles::internal::LevelInd, Particle< dim >> &particles)
std::mt19937 random_number_generator
static void declare_parameters(ParameterHandler &prm)