Skip to content

GitLab

  • Projects
  • Groups
  • Snippets
  • Help
    • Loading...
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
  • Sign in
S src
  • Project overview
    • Project overview
    • Details
    • Activity
    • Releases
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 61
    • Issues 61
    • List
    • Boards
    • Labels
    • Service Desk
    • Milestones
    • Iterations
  • Merge requests 9
    • Merge requests 9
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Operations
    • Operations
    • Incidents
    • Environments
  • Analytics
    • Analytics
    • CI/CD
    • Code Review
    • Repository
    • Value Stream
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Members
    • Members
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • OPAL
  • src
  • Wiki
  • doxygen

Last edited by Andreas Adelmann Nov 01, 2016
Page history

doxygen

** Doxygen Example to be used for ALL OPAL Development **

/*!
* @file PoissonProblems.h
* @author Matthias Frey
* @date 25. - 26. October 2016 
* @details Solve \f$ \Delta\phi = \rho \f$ on \f$ [0, 1]\times [0, 1]\times [0, 1]\f$ for different \f$\rho\f$.\n
* Every function returns the \f$L_{2}\f$-error compared to the solution of a single-level problem.
* 
* - doSolveNoParticles:          \f$\rho = -1\f$ everywhere on the domain (no particles)\n
* - doSolveParticlesUniform:     \f$\rho = -1\f$ everywhere (initialized by particles, idea: we generate particles on the
*                                cell center and then do an AssignDensity-function call. The charge is scaled such that
*                                \f$\rho = -1\f$ everywhere on the domain\n
* - doSolveParticlesGaussian:    \f$\rho\f$ is a Gaussian distribution initialized by particles\n
* - doSolveParticlesReal:        Read in a H5 cyclotron file and use its particle distribution for \f$\rho\f$\n
* @brief Several ways of Poisson problems, i.e. different \f$\rho\f$
*/

/// Defines several Poisson problems and solves them on \f$ [0, 1]\times [0, 1]\times [0, 1]\f$
class PoissonProblems {
public:
   /*!
    * @param nr is the number of grid cells in x, y, and z of the coarsest level
    * @param maxGridSize is the max. size of a grid
    * @param nLevels is the max. number of nLevels
    * @param lower boundary of physical domain (applied in all dimensions)
    * @param upper boundary of phyiscal domain (applied in all dimensions)
    */
   PoissonProblems(int nr[3], int maxGridSize, int nLevels,
                   const std::vector<double>& lower,
                   const std::vector<double>& upper);

   /*!
    * Solves \f$\Delta\phi = -1\f$ only on the grid. In case of
    * nLevels > 0, the refinement is performed on the whole domain.
    * @returns l2 error (single-level vs. multi-level solve)
    */
   double doSolveNoParticles();

   /*!
    * Solves \f$\Delta\phi = -1\f$ by initializing
    * particles on the finest level. The charge is scaled
    * such that the rhs is -1 everywhere on the domain. In case of
    * nLevels > 0, the refinement is performed on the whole domain.
    * @returns l2 error (single-level vs. multi-level solve)
    */
   double doSolveParticlesUniform();

   /*!
    * Solves \f$\Delta\phi = \rho\f$ where the particles are
    * randomly initialized.
    * @param nParticles to be generated
    * @param mean of the Gaussian distribution
    * @param stddev is the standard deviation of the Gaussian distribution
    * @returns l2 error (single-level vs. multi-level solve)
    */
   double doSolveParticlesGaussian(int nParticles, double mean, double stddev);

   /*!
    * Solve the Poisson equation with a real particle distribution
    * read in from a H5 file (Cyclotron)
    * @param step specifies where to read in the H5 file
    * @param h5file specifies the path and filename
    * @returns l2 error (single-level vs. multi-level solve)
    */
   double doSolveParticlesReal(int step, std::string h5file);

private:
   void refineWholeDomain_m();     ///< Create refined levels (DistributionMapping and BoxArray)
   void initMultiFabs_m();         ///< Initialize the MultiFab's for solving Poisson with MultiGrid solver

   RealBox domain_m;                       ///< Physical domain [0, 1] x [0, 1] x [0, 1]
   int nr_m[3];                            ///< Number of grid cells in each dimension (x, y, z)
   int maxGridSize_m;                      ///< Max. grid size of each level
   int nLevels_m;                          ///< Number of levels
   Array<Geometry> geom_m;                 ///< Geometry of every level
   Array<DistributionMapping> dmap_m;      ///< Distribution to cores of each level
   Array<BoxArray> ba_m;                   ///< All boxes of each level
   Array<int> refRatio_m;                  ///< Refinement ratios among levels (here: 2)

   PArray<MultiFab> rho_m;                 ///< Density (i.e. rhs)
   PArray<MultiFab> phi_m;                 ///< Potential
   PArray<MultiFab> efield_m;              ///< Electric field
   PArray<MultiFab> phi_single_m;          ///< Potential for single-level solve

};
Clone repository
  • Examples
    • FFA
    • RFPhotoInjector
    • cyclotron
    • regressiontestexamples
  • FFA school prerequisites
  • For Developers
    • CodingStyle
    • Compile OPAL at CSCS
    • Compile OPAL
    • Compile required software
    • File Format for stat Storage
    • Most Used Directories in the Code
    • OPAL Development Workflow
    • Pmodules
    • Release Procedure
    • Setup build environment at PSI
View All Pages