Todo List
Member AngledPeriodicBoundary::checkBoundaryAfterParticleMoved (BaseParticle *P)
TW: can't we do the shift in the createPeriodicParticles function only? We are checking the distance three times!
Member AngledPeriodicBoundary::set (Vec3D normalLeft, Vec3D normalRight, Vec3D origin)
TW: Note, I cannot calculate angular shift; this needs to be revisited when we complete quaternion implementation
Member AngledPeriodicBoundary::shiftPosition (BaseParticle *P)

add velocity, angular, springs shift

TW: recalculate the orientation here

TW: not sure how to calculate the angular position in common_axis direction; this needs to be revisited when we complete quaternion implementation

Member AngledPeriodicBoundary::shiftPositions (Vec3D &P1, Vec3D &P2)
TW: this still doesn't shift all data
Member ArcWall::getInteractionWith (BaseParticle *p, unsigned timeStamp, InteractionHandler *interactionHandler) override
Hacked please fix @Thomas
Member AxisymmetricIntersectionOfWalls::getDistanceAndNormal (const BaseParticle &P, Mdouble &distance, Vec3D &normal_return) const final
check, maybe orientation has to be normalized differently for axisymmetric walls (or axis needs to be normalized)
Member BaseCG::averageBeyondDomain_

should the default be false?

currently, the above description is not implemented; it simply ignores particles outside the domain.

Member BaseCG::setWidth (Mdouble width)=0
should be standard deviation, but is currently cutoff.
Member BaseClusterInsertionBoundary::checkBoundaryBeforeTimeStep (DPMBase *md) override
rename to something like "insertUntilMaxFailed"?
Member BaseHandler< T >::addGhostObject (T *O)
mx: type the stuff here: keeps the id unique key
Member BaseHandler< T >::BaseHandler (const BaseHandler< T > &BH)
Should max objects be set to the number of objects after this constructor? Maybe in copyContentsFromOtherHandler?
Member BaseHandler< T >::setDPMBase (DPMBase *DPMBase)
MX: Bad practice to have a function parameter with the exact name of the class
Member BaseHandler< T >::setId (T *object, unsigned int id)
we should use this function only to set the id of particles, not BaseObject::setId; however, to block BaseObject::setId, I need to make this function a friend of BaseObject, and I don't know how to do that.
Class BaseInteractable
Check prescribed objects have infinite mass.
Member BaseInteractable::getCurvature (const Vec3D &labFixedCoordinates) const
should be wall-type dependent
Member BaseInteractable::getInteractionWith (BaseParticle *P, unsigned timeStamp, InteractionHandler *interactionHandler)=0

TW make sure this function sets normal, distance, overlap, contact point

AT why is this a BaseParticle and not a BaseInteratable.

Member BaseInteractable::rotate (const Vec3D &angularVelocityDt)
TW the move and rotate functions should only pass the time step, as teh velocity can be accessed directly by the object; this would simplify functions like Screw::rotate
Member BaseInteractable::write (std::ostream &os) const override
take the zero out
Member BaseInteraction::BaseInteraction (const BaseInteraction &p)
why are not all of the member variables copied?
Member BaseInteraction::BaseInteraction ()
: empty baseInteraction, used in mpi code probably
Member BaseInteraction::copySwitchPointer (const BaseInteractable *original, BaseInteractable *ghost) const
Can this be simpler if we replace the particle with the ghost.
Member BaseInteraction::gatherContactStatistics ()

Thomas please document this; as this is the area you are currently rewriting.

Thomas please document.

TW centre is used just for backward compatibility; replace centre by contact law; we also have to correct it in StatisticsVector::gatherContactStatistics. There also seems to be an issue with the normal being defined differently for walls

Member BaseInteraction::getAbsoluteNormalForce () const
Ant: Check this comment.
Member BaseInteraction::getIC () const
getDistance is not set in postprocessing
Member BaseInteraction::getNormalRelativeVelocity () const
Ant: Check this comment.
Member BaseInteraction::rotateHistory (Matrix3D &rotationMatrix)
some of these might be unneccesary
Member BaseInteraction::setBasicMPIInteractionValues (int P, int I, unsigned timeStamp, Vec3D force, Vec3D torque, bool isWallInteraction, bool resetPointers)
TW should P, I be of type unsigned?
Member BaseInteraction::timeStamp_
TW it would be safer to use the integer time step here, instead of the double
Member BaseInteraction::write (std::ostream &os) const override
should we output id's here? os << " id " << getId() << " particleIds " << P_->getId() << " " << I_->getId();
Member BaseInteraction::writeToFStat (std::ostream &os, Mdouble time) const

MX The documentation mentions that the first variable is the time - this is incorrect, is is the timeStamp the interaction started

the flip in normal/tangential direction for walls should not be done; this is an old bug

Member BaseObject::setId (unsigned long id)
TW: here we should update BaseHandler::nextId_
Member BaseParticle::getDisplacement2 (Mdouble xmin, Mdouble xmax, Mdouble ymin, Mdouble ymax, Mdouble zmin, Mdouble zmax, Mdouble t) const

see .cc file. \TWH

Rewrite, redefine (TW). Is only used in StatisticsVector.hcc, consider moving to that class.

Member BaseParticle::getInteractionWith (BaseParticle *P, unsigned timeStamp, InteractionHandler *interactionHandler) override
We should consider setting the contact point to
Member BaseParticle::getPeriodicComplexity (int index)
TW @Marnix, this is indeed a hack; you should call a setter every time you add a value to the periodic boundary handler (this function takes 0.5% cpu time in the speedtest)
Member BaseParticle::integrateBeforeForceComputation (double time, double timeStep)
If the position is described by the user, one should also call BaseInteractable::integrateBeforeForceComputation. To check if it works correctly, remove the p0.fixParticle() line from the DrivenParticleUnitTest
Member BaseParticle::isSphericalParticle () const =0
This flag is used badly, and used to determine whether particles are superquadric
Member BaseParticle::oldRead (std::istream &is)
incorporate contact information
Member BaseParticle::setIndSpecies (unsigned int indSpecies) override

TW do we have to update the species stored in the interactions here?

MX: this index is used in the MPI transmission. This should be "undeprecated"

Member BaseParticle::setSpecies (const ParticleSpecies *species)

TW should we chaeck here if we have the right kind of species for the right kind of particle?

TW: this function should also check if the particle is the correct particle for the species type

Member BasePeriodicBoundary::createPeriodicParticles (ParticleHandler &pH) override
{JMFT: Should this be virtual?}
Member BaseSpecies::~BaseSpecies ()
the BaseSpecies destructor should delete all particles and wall belonging to that species; however, that will break all codes replacing a species (e.g. Sudeshna and Hao) so we need a proper way to replace a species
Member BaseVTKWriter< H >::makeVTKFileWithHeader () const
vtw wall files only need to be written by one processor
Member BaseWall::getInteractionWith (BaseParticle *p, unsigned timeStamp, InteractionHandler *interactionHandler) override
Member BaseWall::getInteractionWithSuperQuad (SuperQuadricParticle *p, unsigned timeStamp, InteractionHandler *interactionHandler)
make it work with screw, coil and other weird walls
Member BaseWall::setSpecies (const ParticleSpecies *species)
TW: this function should also check if the particle is the correct particle for the species type.
Member BasicIntersectionOfWalls::add (BaseWall &wall)
TW maybe the Restricted wall should be templated with the wall type such that we don't need to use new and delete.
Member BasicIntersectionOfWalls::getVTK (std::vector< Vec3D > &points, std::vector< std::vector< double >> &triangleStrips)

this function could be improved; might not plot full wall

change getVTK to writeVTK

Member BasicUnionOfWalls::add (BaseWall &wall)
TW maybe the Restricted wall should be templated with the wall type such that we don't need to use new and delete.
Member BasicUnionOfWalls::getVTK (std::vector< Vec3D > &points, std::vector< std::vector< double >> &triangleStrips)

change getVTK to writeVTK

this function could be improved; might not plot full wall

Member BondedInteraction::BondedInteraction ()
MX: add to MPI
Member BondedInteraction::BondedInteraction (const BondedInteraction &p)
tw check if the parameters are valid when inserting the species into the handler
Member Box::getNrPanelsOnLevel (int level)
some ints here should be unsigned long
Member CG< Coordinates, BaseFunction, Fields >::evaluateContact (const BaseInteraction &i)
the check for contact statistics should be done here, not per particle.
Member CG< Coordinates, BaseFunction, Fields >::evaluateParticle (const BaseParticle &p)
evaluateParticle and evaluateContact can be optimized by using the grid properties for smart neighborhood search.
Member CGCoordinates::O::getVolumeOfAveragedDimensions (const Vec3D &min, const Vec3D &max)
Generalise to 2D
Member CGCoordinates::R::getLength (const Vec3D &p)
Member CGCoordinates::R::normalisePolynomialCoefficients (std::vector< Mdouble > &coefficients, Mdouble cutoff)
Member CGCoordinates::RZ::getLength (const Vec3D &p)
Member CGCoordinates::RZ::getVolumeOfAveragedDimensions (const Vec3D &min, const Vec3D &max)
Generalise to 2D
Member CGCoordinates::spaceEvenly (Vec3D min, Vec3D max, std::vector< std::size_t > nAll, std::vector< T > &points)
limit to r>0
Member CGCoordinates::X::getINormal (const BaseInteraction &c, const Vec3D &normal) const
change from normal.X to sign(normal.X)
Member CGCoordinates::X::getVolumeOfAveragedDimensions (const Vec3D &min, const Vec3D &max)
Generalise to 2D
Member CGCoordinates::XY::getLength (const Vec3D &p)
Member CGCoordinates::XY::getVolumeOfAveragedDimensions (const Vec3D &min, const Vec3D &max)
Generalise to 2D
Member CGCoordinates::XYZ::getLength (const Vec3D &p)
Member CGCoordinates::XZ::getLength (const Vec3D &p)
Member CGCoordinates::XZ::getVolumeOfAveragedDimensions (const Vec3D &min, const Vec3D &max)
Generalise to 2D
Member CGCoordinates::Y::getLength (const Vec3D &p)
Member CGCoordinates::Y::getVolumeOfAveragedDimensions (const Vec3D &min, const Vec3D &max)
Generalise to 2D
Member CGCoordinates::YZ::getLength (const Vec3D &p)
Member CGCoordinates::YZ::getVolumeOfAveragedDimensions (const Vec3D &min, const Vec3D &max)
Generalise to 2D
Member CGCoordinates::Z::getLength (const Vec3D &p)
Member CGCoordinates::Z::getVolumeOfAveragedDimensions (const Vec3D &min, const Vec3D &max)
Generalise to 2D
Class CGFields::LiquidMigrationFields
These are currently the only fields that are computed. However, this class is destined to be extended to contain additional information such as fabric, energy, local angular momentum. Also, a simpler version is planned, where only particle statistics are evaluated (density and momentum).
Class CGFields::OrientationField
These are currently the only fields that are computed. However, this class is destined to be extended to contain additional information such as fabric, energy, local angular momentum. Also, a simpler version is planned, where only particle statistics are evaluated (density and momentum).
Class CGFields::StandardFields
These are currently the only fields that are computed. However, this class is destined to be extended to contain additional information such as fabric, energy, local angular momentum. Also, a simpler version is planned, where only particle statistics are evaluated (density and momentum).
Member CGFunctions::Gauss< Coordinates >::width_
TW I thought of implementing width_, cutoff_ and prefactor_ as const Mdouble&, as theses parameters are not set per CGPoint, but per CG object (i.e. all points share the same values). However, this site seems to discourage this: http://stackoverflow.com/questions/12387239/reference-member-variables-as-class-members Anyone has an opinion on this? @dducks @thorntonar
Member CGFunctions::Polynomial< Coordinates >::coefficients_
Make variables internal.
Member CGFunctions::PolynomialType
add user-defined PolynomialType USER
Class CGHandler

get function that by default can distinguish species, but also density

make tests

change output format

command line arguments

make more readable definitions

read (a) restart, (b) data/fstat files

add speed by using the mesh

introduce standardDev

add 2D support

do we need to store the BaseObject::index_ anymore?

Can Interaction inherit directly from BaseInteraction?

make Files::statFile_, ... public, like the handlers; remove get functions for File's and handlers.

take out dependence on DPMBase::statFile (i.e. the savecount)

TW note, to keep the code working on Windows:

  • std::exit requires correct header cstdlib,
  • don't use toString (thanks to Silvia for debugging)
Member CGHandler::evaluateDataFiles (bool evaluateFStatFiles=true)
use ignore if time is out of bounds
Member ChargedBondedInteraction::ChargedBondedInteraction (BaseInteractable *P, BaseInteractable *I, unsigned timeStamp)

Clean up this file by using the logger instead of cout, //cout, cerr and assert, and by motivating why the commented out code needs to be here.

Complete the documentation of these methods

Member ChargedBondedInteraction::ChargedBondedInteraction ()
MX: add to MPI
Member Chute::Chute (const Chute &other)
Check if this should indeed be a shallow copy.
Member Chute::createBottom ()
Does the bottom we always has to be this particle? Maybe add a BaseParticle* argument, and add a default value with particle radius < 1e-12.
Member Chute::setChuteAngle (Mdouble chuteAngle)
would a check on the angle be beneficial to check if it is indeed in degrees?
Member Chute::setRoughBottomType (std::string roughBottomTypeString)
: logger::Fatal seems very strong here, maybe set a default instead?
Member Chutebelt::actionsAfterTimeStep () override
Work out why the volume inserted is not what I expext
Member ChuteBottom::ChuteBottom (const ChuteBottom &other)
IFCD: why are the name and file-stuff not set here, in contrast to constructor()?
Member ChuteBottom::makeRoughBottom (Chute &chute)

Make sure that the post-conditions are:

  • N fixed particles in particleHandler, with z-coordinate < 0
  • 1 wall, below the rough bottom
  • no boundaries

IFCD: Only a warning, or an error?

Member ChuteBottom::setupInitialConditions () override

Particles are created without insertion boundary... this reeks of double work (see also Dinant's todo in this same function (ChuteBottom::setupInitialConditions()). (BvdH)

The createBottom() function also creates some walls and boundaries, but at slightly different locations. In this version they are removed and reset, but this is (in my opinion (Dinant)) not the correct way.

Member ChuteInsertionBoundary::placeParticle (BaseParticle *p, RNG &random) override
change to driver level (ask Thomas)
Member ChuteWithHopper::addHopper ()

Why shift A by arbitrary number of 40, when isHopperCentred_ = True? NB: this is probably the same shift of 40 as happens in HopperInsertionBoundary::generateParticle(RNG) with the calculation of 'point A'. NB2: seems to be just generating a nice 'view' of the hopper (in the center of the viewer...?)

Waarom had ik deze ook al weer gecomment? IFCD: this was probably BvdH

Member ChuteWithHopper::getChuteLength () const
this hides the non-virtual function Chute::getChuteLength
Member ChuteWithHopper::getTimeStepRatio () const
Consider generalising this method by implementing it in the MercuryBase class.
Member ChuteWithHopper::setHopper (Mdouble exitLength, Mdouble exitHeight, Mdouble angle, Mdouble length, Mdouble height)
: check whether hopperCornerHeight >=0, if not change hopperangle, line 105, I do not yet understand what the criteria is...
Member ChuteWithPeriodicInflow::computeInternalForces (BaseParticle *P1, BaseParticle *P2)

{The spring should be cut back such that fdott=mu*fdotn. This is simple for getSlidingDissipation()=0; we have to think about what happens in the sliding case with tang. dissipation; same for walls; Update Dec-2-2011: fixed}

TW: the following 13 lines concern only the sliding spring and could be moved into the if statement above

Define the center this way or are radii involved? Or maybe just use middle of overlap region? Thomas: Yes, we should correct that for polydispersed problems; however, then we also have to correct it in StatisticsVector::gatherContactStatistics.

{Is it the first particle the force acts on?}

Member CircularPeriodicBoundary::checkBoundaryAfterParticleMoved (BaseParticle *P, ParticleHandler &pH)
TW: Dinant, please confirm that i and oldI should be integer
Member CircularPeriodicBoundary::checkBoundaryAfterParticlesMove (ParticleHandler &pH) override
MX: When implementing this function, I realised there might not be a unit test for this boundary
Member CircularPeriodicBoundary::createPeriodicParticle (BaseParticle *p, ParticleHandler &pH) override
TW getLargestParticle()->getInteractionRadius() should be getLargestInteractionRadius()
Class Coil

IFCD: Can someone look at the details of the documentation of class Coil? I can't make sense of them.

Coil is now fixed in Z-direction, centered around the Z-axis. Consider converting to more general parameters, with direction of choise and central axis of choice.

Member Coil::getDistanceAndNormal (const BaseParticle &P, Mdouble &distance, Vec3D &normal_return) const override
Make this function readable and explain the steps in the details.
Class CoilSelfTest
update documentation to simpler structure
Member CoilSelfTest::coil
why is the coil public?
Member Combtooth::getInteractionWith (BaseParticle *p, unsigned timeStamp, InteractionHandler *interactionHandler) override
Quick hack JMF2 please clean up with teh new way
Class ConstantMassFlowMaserBoundary

Which Maser is it used in Denissen2019? To cite the Maser: I. F. C. Denissen, T. Weinhart, A. Te Voortwis, S. Luding, J. M. N. T. Gray and A. R. Thornton, Bulbous head formation in bidisperse shallow granular flow over an inclined plane. Journal of Fluid Mechanics, 866:263–297, mar 2019.

Add functionality which allows for opening the maser boundary after a certain time, being a normal periodic boundary until then

Consider writing a destructor that closes the gap again

Consider splitting it in 2 DPMBase instances, one for the periodic domain and one for the outflow domain

Consider re-using the PeriodicBoundary by adding it as a data member

Member ConstantMassFlowMaserBoundary::activateMaser ()
JMFT: Would it be helpful to be able to set a custom gapSize ?
Member ConstantMassFlowMaserBoundary::gapSize_
JMFT: Do you mean 6 radii?
Member ContactDetectionNormalSpheresTest::actionsAfterTimeStep () override
merge hack please fix
Member ContactDetectionRotatedSpheresTest::actionsAfterTimeStep () override
merge hack please fix
Member ContactDetectionTester::testEllipsoidsContact ()
For each contact, check position, overlap and normal
Member ContactDetectionTester::testSpheresContact ()
For each contact, check position, overlap and normal
Member ContactDetectionWithWallTester::testEllipsoidsContact ()
For each contact, check position, overlap and normal
Member ContactDetectionWithWallTester::testSpheresContact ()
For each contact, check position, overlap and normal
Member copyDataFromMPIParticleToParticle (MPIParticle *bP, BaseParticle *p, ParticleHandler *particleHandler)
MX: Maybe renamet his function to setParticleSpecies() or something
Member CubeDeletionBoundary::getDistance (const Vec3D &position) const override
JMFT: Calculate the distance properly, not just 1 or -1.
Member CubeInsertionBoundary::set (BaseParticle *particleToCopy, unsigned int maxFailed, Vec3D posMin, Vec3D posMax, Vec3D velMin, Vec3D velMax, Mdouble rMin, Mdouble rMax)
Check with Timo and Thomas about this.
Member CubeInsertionBoundary::set (BaseParticle &particleToCopy, unsigned int maxFailed, Vec3D posMin, Vec3D posMax, Vec3D velMin, Vec3D velMax, Mdouble rMin, Mdouble rMax)
Check with Timo and Thomas about this.
Member CubicCell::actionsAfterTimeStep () override
IFCD: I uncommented the next lines because they prevent a lot of warnings. Please check if uncommenting is correct.
Member CubicCell::setupInitialConditions () override
Periodic walls are still not checked in checkParticleForInteraction!
Member DeletionBoundary::checkBoundaryAfterParticleMoved (BaseParticle *p, ParticleHandler &pH)

JMFT: The mass and volume counters need to be updated in the MPI code.

: MX: update the above comment

Member DeletionBoundary::checkBoundaryAfterParticlesMove (ParticleHandler &pH) override
MX: I changed the syntax to a more mpi compatible (and neater) code. Need to update the comments of the checkBoundaryAfterParticleMoved function
Page Directory Structure
TW Anthony, please add information about your new output file here.
Member Domain::boundaryList_
TW@Marnix should this be unsigned int
Member Domain::findParticleInList (unsigned int identification, std::vector< BaseParticle * > particleList)
MX: This is probably not the fastest method
Member Domain::localIndexToGlobalIndexTable_
TW@Marnix should this be unsigned int
Member Domain::localIndexToProcessorList_
TW@Marnix should this be unsigned int
Member Domain::read (std::istream &is) override
MX: why would this function be called?
Member Domain::write (std::ostream &os) const override
MX: why would this function be called?
Member DomainHandler::getName () const final
Still has to be implemented
Member DomainHandler::getParticleDomain (int globalIndex)
TW@Marnix should this be unsigned int?
Member DomainHandler::getParticleDomainGlobalIndex (BaseParticle *particle)

MX: This function is still under development the goal of this function is to obtain the globalIndex of the domain the particle is located in

MX: function under construction

TW@Marnix should this be unsigned int?

Member DomainHandler::getParticleProcessor (int globalIndex)
TW@Marnix should this be unsigned int?
Member DomainHandler::readAndAddObject (std::istream &is) final
Still has to be implemented
Member DomainHandler::readOldObject (std::istream &is)
Still has to be implemented
Member DPMBase::checkParticleForInteractionLocal (const BaseParticle &P)
tw check against periodic copies (see ShearCell3DInitialConditions.cpp)
Member DPMBase::checkParticleForInteractionLocalPeriodic (const BaseParticle &P)
TW the implementation of this function is not very efficient and should be improved
Member DPMBase::computeForcesDueToWalls (BaseParticle *, BaseWall *)
TW: I think this torque has the wrong sign
Member DPMBase::computeOneTimeStep ()

IFCD @AT, TW: please check what should be in here, and whether it should be virtual or not.

MX: this is not true anymore. all boundaries are handled here. particles have received a position update, so here the deletion boundary deletes particles \TODO add particles need a periodic check

Member DPMBase::deleteGhostParticles (std::set< BaseParticle * > &particlesToBeDeleted)
: doc
Member DPMBase::getParticlesWriteVTK () const
Move this (and the set) to ParticleHandler.
Member DPMBase::getRotationalEnergy () const
TW why is the ene_rot commented out
Member DPMBase::getWallsWriteVTK () const
Move this (and the set) to WallHandler.
Member DPMBase::initialiseSolve ()

Is it necessary to reset initial conditions here and in setTimeStepByParticle (i.e. should it be in constructor) Thomas: I agree, setTimeStepByParticle should be rewritten to work without calling setupInitialConditions

Is it necessary to reset initial conditions here and in setTimeStepByParticle (i.e. should it be in constructor)? Thomas: I agree, setTimeStepByParticle should be rewritten to work without calling setupInitialConditions

MX: Why does the mass get computed here? if a particle is assigned a radius, it automatically also computes its mass. IFCD: commenting out this line does not make any test fail on my system.

Member DPMBase::performGhostParticleUpdate ()
MX: Under construction
Member DPMBase::read (std::istream &is, ReadOptions opt=ReadOptions::ReadAll)
warning: hides non-virtual function from the class 'Files'.
Member DPMBase::setFixedParticles (unsigned int n)
Question: can this function be called during the run of the program? i.e. can particles be made to suddenly "become fixed"?
Member DPMBase::setParticlesWriteVTK (bool writeParticlesVTK)
Move this (and the get) to ParticleHandler.
Member DPMBase::setRotation (bool rotation)
Member DPMBase::setupInitialConditions ()
I (Anthony) wants to change this to be an external function. This has a lot of advantages especially when using copy-constructors. This is a major change and will break other codes, so therefore has to be done carefully.
Member DPMBase::setWallsWriteVTK (FileType writeWallsVTK)
Move this (and the get) to WallHandler.
Member DPMBase::setWallsWriteVTK (bool)
Move this (and the get) to WallHandler.
Member DPMBase::setWritePythonFileForVTKVisualisation (bool forceWritePythonFileForVTKVisualisation)
When restarting the indexMax should be reset
Member DPMBase::solve ()
IFCD @AT, TW: Consider moving some things before the time loop to actionsBeforeTimeLoop
Member DPMBase::splitDomain (DomainSplit domainSplit)
the function needs improvement: for non-cubic domains (with different domain length in x,y,z), having a equal number of grid cell is not the best choice.
Member DPMBase::write (std::ostream &os, bool writeAllParticles=true) const
what to do with statisticsFromRestartData?
Member DPMBase::writeEneHeader (std::ostream &os) const

Add number of particles to this file (change from Jonny to be added later)

{Why is there a +6 here? TW: to get the numbers and title aligned}

JMFT: Get rid of aligned columns. They make things too wide. (changed back) *‍/

Member DPMBase::writeXBallsScript () const
Implement or make pure virtual
Member File::write (std::ostream &os) const
TW: openMode_ is not saved, maybe it should not even be stored but set every time you open a file
Member FileReader::read ()
taking this line of of the for loop gives a huge speed improvement; why?
Member free_cooling::setupInitialConditions () override
TW check that all user codes are compiling AND running; but many of them need input files.
Member FrictionInteraction::computeFrictionForce ()
TW: Why do we not use the corrected diameter here, as in the rolling case? And check if Stefan uses radius or diameter
Class FrictionSpecies
TW: should this class be renamed SlidingRollingTorsionFrictionSpecies?
Member HeaterBoundary::checkBoundaryAfterParticleMoved (BaseParticle *p, ParticleHandler &pH)
JMFT: Make a 2D version of this
Member HeaterBoundary::getDistance (const Vec3D &position) const
JMFT: Calculate the distance properly, not just 1 or -1.
Member helpers::addToFile (std::string filename, std::string filecontent)
gmb Make this MPI compatible.
Member helpers::computeDisptFromCollisionTimeAndRestitutionCoefficientAndTangentialRestitutionCoefficientAndEffectiveMass (Mdouble tc, Mdouble r, Mdouble beta, Mdouble mass)
what should be used instead of this function?
Member helpers::createDirectory (std::string)

gmb log error using strerror(errno)

gmb Make this MPI compatible.

Member helpers::getMaximumVelocity (Mdouble k, Mdouble disp, Mdouble radius, Mdouble mass)
what should be used instead of this function?
Member helpers::getPath ()
gmb log error using strerror(errno)
Member helpers::more (std::string filename, unsigned nLines=constants::unsignedMax)
gmb Make this MPI compatible.
Member helpers::openFile (std::fstream &file, std::string filename, std::fstream::openmode mode)
gmb Make this MPI compatible. Is it used?
Member helpers::readArrayFromFile (std::string filename, int &n, int &m)
gmb Make this MPI compatible.
Member helpers::readOptionalVariable (std::istream &is, const std::string &name, T &variable)
readOptionalVariable should check the full variable name, not just the next value. However, I don't know how to put the location in the ifstream back.
Member helpers::writeCommandLineToFile (const std::string filename, const int argc, char *const argv[])
gmb Make this MPI compatible.
Member helpers::writeToFile (std::string filename, std::string filecontent)
gmb Make this MPI compatible.
Member HertzianSinterInteraction::getElasticEnergy () const override
TW this is not correct; we should count the return energy
Member HertzianSinterInteraction::HertzianSinterInteraction ()
: MX add interaction to mpi
Member HertzianViscoelasticInteraction::computeNormalForce ()
check for superquadrics
Member HertzianViscoelasticInteraction::getElasticEnergyAtEquilibrium (Mdouble adhesiveForce) const override
TW consider renaming to getElasticAdhesiveEnergy or getElasticAdhesiveEnergyRelativeToEquilibrium
Member HGrid::computeHashBucketIndex (int x, int y, int z, unsigned int l) const
consider moving to HGridCell, which might give better performance.
Member HGrid::info () const
use logger everywhere
Class HGridOptimiser
Find out what this class does and document it.
Class HopperInsertionBoundary
(BvdH) Better graphical diagrams are needed for further clarification, as well as some property renaming.
Member HopperInsertionBoundary::placeParticle (BaseParticle *p, RNG &random) override

Thomas, could you check if this bug is still valid? (BvdH)

(BvdH) make a nice (InkScape) diagram with all useful properties in one image, and some angles explaining the definitions of AB and AC directions, the P->setPosition operation and the calculation of the Z-direction of the Vec3D A position.

Member HorizontalBaseScrew::getDistanceAndNormal (const BaseParticle &P, Mdouble &distance, Vec3D &normal_return) const final
check, maybe orientation has to be normalised differently for axisymmetric walls (or axis needs to be normalised)
Class HorizontalScrew
IFCD: Can these details about class HorizontalScrew be made more clear? I don't understand them.
Member HorizontalScrew::getDistanceAndNormal (const BaseParticle &P, Mdouble &distance, Vec3D &normal_return) const final
Make this function readable and explain the steps in the details.
Member InfiniteWallWithHole::move_time (Mdouble dt)
TW: generalize the move function for all walls Allows the wall to be moved with time
Member InfiniteWallWithHole::set (Vec3D normal, Mdouble position, Mdouble holeRadius)
Since InfiniteWall:set is deprecated, should we deprecate this format as well (and similar formats in other walls)?
Member inflowFromPeriodic::Check_and_Duplicate_Periodic_Particle (int i, int nWallPeriodic)
{distance should be Particles[i].Radius+max(Particles[j].Radius)}
Member InsertionBoundary::checkBoundaryBeforeTimeStep (DPMBase *md) override

create a definition for zero-size particles. Right now the zero-size particle is only used as a stop criterion for the manual PSD insertion

rename to something like "insertUntilMaxFailed"?

Member InsertionBoundary::InsertionBoundary ()
think about making both possible; a discrete distribution and a continuous which is more accurate
Member InsertionBoundary::isActivated_
JMFT: This is currently not saved to .restart files.
Member InsertionBoundary::read (std::istream &is) override
make theses reads non-optional
Member InsertionBoundary::setPSD (const PSD psd)
TP: Consider std::move instead of a set function. This would result in a speedup + no one has to set the PSD for insertionBoundaries again as it is set when a PSD is inserted.
Member InsertionBoundary::setPSD (std::vector< PSD > psd, std::vector< Mdouble > probability)
TP: Consider std::move instead of a set function. This would result in a speedup + no one has to set the PSD for insertionBoundaries again as it is set when a PSD is inserted.
Class Interaction< NormalForceInteraction, FrictionForceInteraction, AdhesiveForceInteraction >
MX: I do not think the above is correct. integrateBeforeForceComputation() updates the positions
Member InteractionHandler::eraseOldInteractions (unsigned)
TW: this function has to be sped up with sth like this: erase(remove_if(begin(), end(), bind2nd(checkSpringTime(), lastTimeStep)), end());
Member InteractionHandler::getInteraction (BaseInteractable *P, BaseInteractable *I, unsigned timeStamp)
TW this can bet set earlier
Member InteractionHandler::InteractionHandler (const InteractionHandler &IH UNUSED)
Please check if interactions indeed don't need to be copied.
Member InteractionHandler::readAndAddObject (std::istream &is) override

TW: Change identifier in restart file from id to index; is there any reason the id should be kept after restarting, once this is done? (Note, the id is set to the old one in the particle handler because interactions store id, not indices; also note id's are slow

Ant This is a tmp fix as in some cases the line before has not be finished reading. This should be looked at again at a later date.

Member InteractionHandler::removeObjectKeepingPeriodics (unsigned int id)

this function will create an error if the timeStamp is in the future! This should not happen (ever), but who knows.

TW The code assumes in a few places that P->getIndex()<I->getIndex(), but the copySwitchPointer function does not obey that rule; we have to check if this is valid behaviour.

Member IntersectionOfWalls::getDistanceAndNormal (const BaseParticle &p, Mdouble &distance, Vec3D &normal_return) const override
do this for all walls
Member IntersectionOfWalls::read (std::istream &is) override
currently the IntersectionOfWall is special for moving and rotating; should we remove that specialty?
Member IrreversibleAdhesiveInteraction::IrreversibleAdhesiveInteraction (const IrreversibleAdhesiveInteraction &p)
tw check if the parameters are valid when inserting the species into the handler
Class LeesEdwardsBoundary

Add link to paper by Lees-Edwards in the documentation of this class.

Is implemented for 2D only now. Needs extension to 3D.

Member LevelSetWall::getDistanceAndNormal (const BaseParticle &p, Mdouble &distance, Vec3D &normal_return) const override
do this for all walls
Member LevelSetWall::read (std::istream &is) override
Member LinearPlasticViscoelasticInteraction::getElasticEnergy () const override
TW this is not correct; we should count the return energy
Member LinearPlasticViscoelasticNormalSpecies::getCollisionTime (Mdouble mass) const
should this use unloading stiffness?
Member LinearPlasticViscoelasticNormalSpecies::setCollisionTimeAndRestitutionCoefficient (Mdouble tc, Mdouble eps, Mdouble mass)
TW: check that the masses are described correctly here (m_eff or m_p?))
Member LinearViscoelasticInteraction::getSpecies () const
you can remove this by adding the species to the Interaction instead of the base interaction
Member LiquidBridgeWilletInteraction::getElasticEnergy () const override
TW
Member LiquidMigrationLSInteraction::form ()
: maybe we need to check ghost particles?
Member LiquidMigrationLSInteraction::getElasticEnergy () const override
TW
Member LiquidMigrationSelfTest::printTime () const override
how to set the precision in the logger? Below the former code.
Member LiquidMigrationWilletInteraction::form ()
: maybe we need to check ghost particles?
Member LiquidMigrationWilletInteraction::getElasticEnergy () const override
TW
Member logWriteAndDie (const std::string &module, std::string message)
Why is this here, and not in the logger?
Member main (int argc UNUSED, char *argv[] UNUSED)

TW we need a replacement for BaseParticle::calculateMaximumVelocity

TW:should be lightest particle, but computeMass has to be automated first

Member main (int argc, char *argv[])
change this to the mean particle size (not small particle size)
Member main (int argc UNUSED, char *argv[] UNUSED)

TW the output of the old and new stat doesn't compare perfectly, check.

TW:should be lightest particle, but computeMass has to be automated first

Member main (int argc, char *argv[])
we should force people to set a name
Member main (int argc UNUSED, char *argv[] UNUSED)

TW automatically measure simulation time

should inertia and mass be outputted by restart, since these are computed variables?

TW The inaccuracy of the calculation is much worse for the irreversible force model, as there is a jump in force at zero overlap; we should correct for that in the time stepping algorithm (i.e. find out what the mean force was over the duration of the time step, not using a left Riemann sum.

TW:should be lightest particle, but computeMass has to be automated first

Member main ()

TW should there be a discrepancy between distance and distance2?

why do we need to set the position?

Member main (int argc, char **argv)
figure out a way to test a LU factorisation
Member main (int argc, char *argv[])
make selftest smaller (currently 8 sec)); also CoilSelfTest (8s), LeesEdwardsSelfTest (13s), MaserSelfTest (14s)
Member MarbleRun::bigSeesawInvInertia
apply the parallel axis theorem to compute the inertia around the center of roation instead of the center of mass: https://en.wikipedia.org/wiki/Parallel_axis_theorem
Member MarbleRun::smallSeesawInvInertia
apply the parallel axis theorem to compute the inertia around the center of roation instead of the center of mass: https://en.wikipedia.org/wiki/Parallel_axis_theorem
Member mathsFunc::log (Mdouble Power)
check if this function works
Member mathsFunc::tan (T x)
should be properly computed
Member Matrix3D::operator* (const Matrix3D &a) const
check
Member MatrixSymmetric3D::getCylindricalTensorField (const Vec3D &p) const
implement MatrixSymmetric3D::getCylindricalTensorField
Member Mercury2D::hGridFindContactsWithinTargetCell (int x, int y, unsigned int l)
replace this generic check of the each bucket to checking only the object to avoid the critical
Member Mercury2D::hGridFindParticlesWithTargetCell (int x, int y, unsigned int l, BaseParticle *obj, std::vector< BaseParticle * > &list)

: MX: generalise this

: MX: generalise this

Member Mercury3D::hGridFindContactsWithinTargetCell (int x, int y, int z, unsigned int l)
replace this generic check of the each bucket to checking only the object to avoid the critical
Class MercuryBase
Discuss if we want to remove Mercury2D and Mercury3D and template MercuryBase as the interface for the user.
Member MercuryBase::checkParticleForInteraction (const BaseParticle &P) final

IFCD: I think it might be better if it returns true if there is an interaction.

MX: use all reduce with the appropriate operator

Member MercuryBase::checkParticleForInteractionLocal (const BaseParticle &P) final
IFCD: I think it might be better if it returns true if there is an interaction.
Member MercuryBase::getHGridTargetNumberOfBuckets () const
TW SpeedCheckThomas revealed that adding a factor 10 here improved performance by 20% for monodisperse particles, 45% for highly polydisperse (this seems true for particle numbers 1e3 - 1e6); a larger factor seems to little extra effect; the memory cost is small compared to the number of particles, so I added the factor permanently. @Irana please check this is ok to do.
Member MercuryBase::hGridRebuild ()
Member MercuryBase::setHGridCellOverSizeRatio (Mdouble cellOverSizeRatio)
IFCD: I changed the if unequal to if equal, can someone check this is correct?
Member MercuryTimeStep< NDIMS >::dataFile_
Chris, please check if this parameter is needed; it causes a warning with [-Wunused-private-field]
Member MeshTriangle::getInteractionWith (BaseParticle *p, unsigned timeStamp, InteractionHandler *interactionHandler) override
Member MindlinInteraction::getAbsoluteNormalForcePrevious () const
Ant: Check this comment.
Member MindlinInteraction::getTangentialOverlap () const override
TWnow this should be positive
Member MindlinRollingTorsionInteraction::computeFrictionForce ()
TW: Why do we not use the corrected diameter here, as in the rolling case? And check if Stefan uses radius or diameter
Class MindlinRollingTorsionSpecies
TW: should this class be renamed SlidingRollingTorsionMindlinRollingTorsionSpecies?
Member MPIContainer::receive (T *t, int count, int from, int tag)
MX: type documentation. this is used to receive vectors of scalars accross
Member MPIContainer::send (T *t, int count, int to, int tag)
MX: type documentation. This one is used to send vectors of scalars across (hence the *t)
Member my_problem::setupInitialConditions () override
check whether setMass is needed here
Member NEVER
IFCD: can we make this an int instead of unsigned int, as -1 as an unsigned is not good style?
Member NurbsSurface::getDistance (Vec3D P, double radius, double &distance, Vec3D &normal) const
here we should use the convex hull argument to rule out certain contactse quickly
Member ParhamiMcMeekingSinterInteraction::getElasticEnergy () const override
TW
Member ParhamiMcMeekingSinterInteraction::ParhamiMcMeekingSinterInteraction ()
: MX add to MPI
Member ParhamiMcMeekingSinterSpecies::ParhamiMcMeekingSinterSpecies ()
: implement initial/read/write values
Class ParticleCreation

is the above still true? it seems that there are 20^3 particles are constructed ///

this code still feels a bit messy and unclear

Member ParticleCreation::ParticleCreation (Mdouble width, Mdouble length, Mdouble height, Mdouble sizeDistribution)
is this intended? currently , this comment is misleading
Member ParticleHandler::addedFixedParticle ()
MX: For Jonny, is this still required, keeping the parallel code in mind?
Member ParticleHandler::getNumberOfRealObjectsLocal () const
MX: in future also add the periodic mpi particles
Member ParticleHandler::largestParticle_
TW: note that checkExtrema gets called if a particle gets created and its Species and Radius gets set, even if it's not yet included in the particleHandler! This is necessary to check a not included particle for overlaps before inserting it into the handler. Not sure if this is a sensible structure; to be discussed. Note: these statistic now include mpi and ghost particles as well
Member ParticleHandler::readAndCreateObject (std::istream &is)
check what is special about this case
Member ParticleHandler::removedFixedParticle ()
MX: For Jonny, is this still required, keeping the parallel code in mind?
Member ParticleSpecies::getMassFromRadius (Mdouble radius) const
TW: should getMassFromRadius be removed? IFCD: it is used in at least one driver (AxisymmetricHopper).
Member ParticleSpecies::getVolumeFromRadius (Mdouble radius) const
this should depend on the particle shape; thus, it should be a static function of BaseParticle
Member ParticleSpecies::setDensity (Mdouble density)
recalculate masses when setting dim_particle or rho
Member PeriodicBoundary::shiftPositions (Vec3D &postition1, Vec3D &postion2) const
(AT) see toDo of PeriodicBoundary::shiftPosition().
Member PeriodicBoundaryHandler::flushParticles (std::set< BaseParticle * > &particlesToBeFlushed)
This function uses a brute force method to flush the particles, this can be done in a smarter way if profiling shows that this is a bottleneck.
Member PeriodicBoundaryHandler::~PeriodicBoundaryHandler () override
MX: Because the periodicBoundaryHandler contains a pointer to a boundary, which is also in the boundary handler currently we just need to empty the PeriodicBoundaryHandler without destroying the object Otherwise we create a segfault in the BoundaryHandler
Member PointIsAboveCurve (double h, double a, int study_num)
TWnow: add Hertz again
Class PossibleContact
Change the names so that they follow the code guidelines.
Class PossibleContactList

Look at the memory management of PossibleContactList. Maybe a destructor that takes out all remaining PossibleContact? Or is there a Handler that calls remove_ParticlePosibleContacts for all particles?

Restart-tests are not working with CONTACT_LIST_HGRID turned on, so either finish the ContactList-related code, or get rid of it. If we keep it, clean up the code, in particular the naming-convention.

Member PSD::convertCumulativeToCumulativeNumberDistribution (TYPE CDFType)
TP: NOT WORKING! If anyone knows how to do it feel free to add
Class PSDContinuous
Make an object storing a vector of these values.
Member PSDContinuous::convertSubtractiveNumberToVolume (std::vector< PSDContinuous > &psd)
should this be:
Member PSDContinuous::convertSubtractiveVolumeToNumber (std::vector< PSDContinuous > &psd)
should this be:
Class Quaternion
Need to generalize this to n-dimensional quaternions of any type
Member Quaternion::angularVelocityBodyFixedFrameToAngularDisplacement (Vec3D v) const

rename to angularVelocityBodyFixedFrameToAngularDisplacement?

should the arguments be passed by reference?

Member Quaternion::applyCInverse (Quaternion q) const
rename to angularDisplacementToAngularVelocity?
Member Quaternion::Quaternion (Vec3D normal)
should be explicit as teh conversion is not unique
Member Quaternion::rotateInverseInertiaTensor (const MatrixSymmetric3D &invI) const
move link to where it belongs http://stackoverflow.com/questions/1171849/finding-quaternion-representing-the-rotation-from-one-vector-to-another This is the same as rotateTensor, but than for MatrixSymmetric3D instead of SmallMatrix<3,3>.
Member rapidjson::Writer< Stream, Encoding, Allocator >::WriteDouble (double d)
Optimization with custom double-to-string converter.
Member RestrictedWall::getInteractionWith (BaseParticle *p, unsigned timeStamp, InteractionHandler *interactionHandler) override

{setting the index of the wall is necessary to get the right index reported in fstat; however, the better way would be to make setIndex virtual.}

Shouldn't this function be defined in BaseWall?

Member RestrictedWall::set (BaseWall *wall, InfiniteWall *restriction)
TW maybe the Restricted wall should be templated with the wall type such that we don't need to use new and delete.
Member ReversibleAdhesiveInteraction::getElasticEnergy () const override
TW
Class RNG
(AT) implement new C++-standard RNG instead of this one (Kudos on the hard work done here though ;). NB: maybe something for Mercury 2?
Member RNG::RNG ()

{Thomas: This code does sth. when min>max; I would prefer to throw an error.}

Member RoughBottomType

consider converting to an enum class.

consider changing to just 'bottomType' and add 'FLAT' (or something similar) as an option so that from ALL bottom types can be chosen with just ONE enumerator IFCD: I did add FLAT, but since there are multiple users using RoughBottomType, it might be a bad idea to change the interface with BottomType. Please also check if I have forgotten places to add "FLAT" to make this a complete interface.

Member ScaleCoupling< M, O >::getCoupledElements ()
check if set
Member SCoupling< M, O >::createTriangleWall (std::array< Vec3D, 3 > vertex)
Why we need to set GroupID. I don't remember anymore.
Class SCoupling< M, O >::SCoupledElement
should we move this to SurfaceCoupledElement.h?
Member SCoupling< M, O >::updateTriangleWall (TriangleWall *&wall, std::array< Vec3D, 3 > vertex)

why is it using setPrescribedPosition

we need to set velocity

Class Screw
IFCD: Can these details about class Screw be made more clear? I don't understand them.
Member Screw::getDistanceAndNormal (const BaseParticle &P, Mdouble &distance, Vec3D &normal_return) const final
do this for all walls
Member Screw::getDistanceAndNormalLabCoordinates (Vec3D position, Mdouble wallInteractionRadius, Mdouble &distance, Vec3D &normal_return) const
Make this function readable and explain the steps in the details.
Member Screw::rotate (const Vec3D &angularVelocityDt) override
the move and rotate functions should only pass the time step, as teh velocity can be accessed directly by the object
Class ShearBoxBoundary

Add link to paper by Lees-Edwards in the documentation of this class.

Is implemented for 2D only now. Needs extension to 3D.

Member SilbertPeriodic::set_study (int study_num)

Thomas: Hertzian does not appear in the restart file

TW: can we switch species from SlidingFriction to Friction only in the case rolling friction is needed?

turn on rolling friction only at the wall

Class SimpleDrumSuperquadrics

Document

Definitions in source-file

VTK-write function

Test

Member SineWall::getInteractionWith (BaseParticle *p, unsigned timeStamp, InteractionHandler *interactionHandler) override
Hacked please fix
Member SinterInteraction::computeNormalForce ()
adhesive force only, or add normalForce?
Member SinterInteraction::getElasticEnergy () const override
TW this is not correct; we should count the return energy
Member SinterInteraction::SinterInteraction ()
: MX add to MPI
Member SinterLinInteraction::getElasticEnergy () const override
TW this is not correct; we should count the return energy
Member SinterLinInteraction::SinterLinInteraction ()
: MX add to MPI
Member SinterLinNormalSpecies::setCollisionTimeAndRestitutionCoefficient (Mdouble tc, Mdouble eps, Mdouble mass)
TW: check that the masses are described correctly here (m_eff or m_p?))
Member SinterNormalSpecies::setCollisionTimeAndRestitutionCoefficient (Mdouble tc, Mdouble eps, Mdouble mass)
TW: check that the masses are described correctly here (m_eff or m_p?))
Member SinterNormalSpecies::setSinterForceAndTime (Mdouble adhesionForce, Mdouble sinterTime, Mdouble radius)
fix
Member SlidingFrictionInteraction::getTangentialOverlap () const override
TWnow this should be positive
Member SlidingSpheresUnitTest::actionsAfterTimeStep () override
should getTimeStep be getNTimeStep?
Class SmallVector< numberOfRows >
Need to generalize this to n-dimensional vectors of any type
Class SmoothChute

decide what to do with commented out code

remove/add commented out code before the release

Member SmoothChute::actionsBeforeTimeStep () override

this message was commented out in a cout, maybe make a more sensible message

make a more sensible logger message

IFCD: what happens here?

Member SmoothChute::insertTimeInterval
what does this do?
Member SpeciesHandler::addObject (ParticleSpecies *S) override
TW don't put logger messages that only make sense for one application!
Member SpeciesHandler::getMixedObject (unsigned int id1, unsigned int id2)
This function should probably be made private. The user should use the function SpeciesHandler::getMixedObject(const U* S, const U* T), which deals with pointers.
Member SpeciesHandler::readAndAddObject (std::istream &is) override

TW why does deleting these objects create a segmentation fault How do you create the segmentation fault?

IFCD how does the numbering of mixedSpecies_ work? the numbering of mixed species is 01, 02, 12, 03, 13, 23, 04, 14, 24, 34, i.e. if you add the n-th ParticleSpecies, then you have to add n-1 MixedSpecies. So here I remove the last n-1 MixedSpecies and add n-1 new ones.

Member SpeciesHandler::~SpeciesHandler () override
TW Note: deleting the species does not delete the particles and walls of this species.
Member SphericalParticle::getName () const override
Should be renamed to SphericalParticle
Member SPHInteraction::getSpecies () const
you can remove this by adding the species to the Interaction instead of the base interaction
Member StatisticsPoint< T >::CG_gradient (const Vec3D &P, const Mdouble phi)
Member StatisticsPoint< T >::CG_integral_gradient (Vec3D &P1, Vec3D &P2, Vec3D &P1_P2_normal, Mdouble P1_P2_distance)
Member StatisticsPoint< T >::CollisionalHeatFlux
Member StatisticsPoint< T >::Dissipation
Member StatisticsPoint< T >::Potential
{Potential calculations have not been checked, only implemented; fstat file does not include the torsional and rolling spring and hence cannot account for their potential}
Member StatisticsVector< T >::periodicWalls
{Thomas: the case periodicWalls=true seems to mess up some statistics. Needs to be checked or removed}
Member StatisticsVector< T >::rmin
Thomas: maybe this fixed condition should be replaced by a condition function, bool include_statistics_if()
Class SubcriticalMaserBoundary
Which Maser is it used in Denissen2019? To cite the Maser: I. F. C. Denissen, T. Weinhart, A. Te Voortwis, S. Luding, J. M. N. T. Gray and A. R. Thornton, Bulbous head formation in bidisperse shallow granular flow over an inclined plane. Journal of Fluid Mechanics, 866:263–297, mar 2019.
Member SubcriticalMaserBoundaryTEST::createPeriodicParticle (BaseParticle *p, ParticleHandler &pH) override
why 2.0?
Class SubcriticalMaserBoundaryTESTMPI2Test
add asserts to actually check the behaviour
Member SuperQuadricParticle::computeHessianLabFixed (const LabFixedCoordinates &labFixedCoordinates) const
Come up with good expression for when x = y = 0 and n1 < n2
Member SuperQuadricParticle::computeShapeGradientLabFixed (const LabFixedCoordinates &labFixedCoordinates) const
Come up with good expression for when x = y = 0 and n1 < n2
Member SuperQuadricParticle::getAxes () const override

TW we could remove this function from the BaseParticle and use a dynamic_cast instead

ID Middle-term plan is to template the BaseParticle on shape-type, so that we won't have to cast etc.

Member SuperQuadricParticle::getCurvature (const LabFixedCoordinates &labFixedCoordinates) const override
Minus sign the wrong way around, check why
Member SuperQuadricParticle::getInteractionWithSuperQuad (SuperQuadricParticle *p, unsigned timeStamp, InteractionHandler *interactionHandler)
: find correct value for 'distance'
Member SuperQuadricParticle::setBoundingRadius ()
Currently only implemented for ellipsoids
Member test1 ()
shouldn't this be default?
Member test2 ()
shouldn't this be default?
Class TimeDependentPeriodicBoundary

Add link to paper by Lees-Edwards in the documentation of this class.

Is implemented for 2D only now. Needs extension to 3D.

Member TimeDependentPeriodicBoundary::createGhostParticle (BaseParticle *pReal)
{JMFT: The time comes from p->getHandler()->getDPMBase()->getTime(), which will be undefined if p does not belong to a handler.}
Member TimeDependentPeriodicBoundary::shiftPosition (BaseParticle *p) const override
{JMFT: The time comes from p->getHandler()->getDPMBase()->getTime(), which will be undefined if p does not belong to a handler.}
Member TriangleMeshWall::getInteractionWith (BaseParticle *p, unsigned timeStamp, InteractionHandler *interactionHandler) override
TW: I think this torque has the wrong sign
Member TriangulatedWall::Face::getDistanceAndNormal (const BaseParticle &p, Mdouble &distance, Vec3D &normal_return, Mdouble interactionRadius) const
make the triangle work from both sides
Member TriangulatedWall::move (const Vec3D &move) override
We should use the position_ and orientation_ of the TriangulatedWall; that way, TriangulatedWall can be moved with the standard BaseInteractable::move function, getting rid of an anomaly in the code and removing the virtual from the move function.
Member TriangulatedWall::read (std::istream &is) override
Member VChute::getInteractionWith (BaseParticle *p, unsigned timeStamp, InteractionHandler *interactionHandler) override
Hacked please fix
Member Vec3D::getFromCylindricalCoordinates () const
Member VolumeCoupling::actionsAfterTimeStep () override
actions after time step should be user-defined, so not be used here
Member VolumeCoupling::solveFirstHalfTimeStep ()
MX: this is not true anymore. all boundaries are handled here. particles have received a position update, so here the deletion boundary deletes particles \TODO add particles need a periodic check
Member WallHandler::createObject (const std::string &type)
Review this line. Problem came up in merging.
Member WallHandler::readAndCreateOldObject (std::istream &is)
This is deprecated since r ~2360.
Member WallHandler::WallHandler ()
why is this being done?
Member WallHandler::WallHandler (const WallHandler &BH)
why is this being done?
Member WallVTKWriter::writeVTKSurfaceArea (std::fstream &file, VTKContainer &vtk) const

gmb This only needs to be calculated if the mesh changes.

gmb Check if it always true.