yade-dev team mailing list archive
-
yade-dev team
-
Mailing list archive
-
Message #11088
[Branch ~yade-pkg/yade/git-trunk] Rev 4094: Remove some more .cpp-files.
------------------------------------------------------------
revno: 4094
committer: Anton Gladky <gladky.anton@xxxxxxxxx>
timestamp: Sat 2014-07-19 21:52:41 +0200
message:
Remove some more .cpp-files.
removed:
core/Bound.cpp
core/Dispatcher.cpp
core/EnergyTracker.cpp
core/Engine.cpp
core/FrontEnd.cpp
core/PartialEngine.cpp
core/Shape.cpp
core/TimeStepper.cpp
pkg/common/Aabb.cpp
pkg/common/ElastMat.cpp
pkg/common/PeriodicEngines.cpp
pkg/common/PyRunner.cpp
pkg/common/Sphere.cpp
modified:
core/Dispatcher.hpp
core/EnergyTracker.hpp
core/Engine.hpp
core/FrontEnd.hpp
core/Functor.hpp
core/Material.cpp
core/Material.hpp
core/Shape.hpp
core/TimeStepper.hpp
pkg/common/Aabb.hpp
pkg/common/ElastMat.hpp
pkg/common/ParallelEngine.cpp
pkg/common/PeriodicEngines.hpp
pkg/common/PyRunner.hpp
pkg/common/Sphere.hpp
--
lp:yade
https://code.launchpad.net/~yade-pkg/yade/git-trunk
Your team Yade developers is subscribed to branch lp:yade.
To unsubscribe from this branch go to https://code.launchpad.net/~yade-pkg/yade/git-trunk/+edit-subscription
=== removed file 'core/Bound.cpp'
--- core/Bound.cpp 2009-12-04 23:07:34 +0000
+++ core/Bound.cpp 1970-01-01 00:00:00 +0000
@@ -1,12 +0,0 @@
-/*************************************************************************
-* Copyright (C) 2004 by Olivier Galizzi *
-* olivier.galizzi@xxxxxxx *
-* *
-* This program is free software; it is licensed under the terms of the *
-* GNU General Public License v2 or later. See file LICENSE for details. *
-*************************************************************************/
-
-#include "Bound.hpp"
-
-
-
=== removed file 'core/Dispatcher.cpp'
--- core/Dispatcher.cpp 2014-07-03 17:20:40 +0000
+++ core/Dispatcher.cpp 1970-01-01 00:00:00 +0000
@@ -1,15 +0,0 @@
-/*************************************************************************
-* Copyright (C) 2004 by Olivier Galizzi *
-* olivier.galizzi@xxxxxxx *
-* *
-* This program is free software; it is licensed under the terms of the *
-* GNU General Public License v2 or later. See file LICENSE for details. *
-*************************************************************************/
-
-
-#include<yade/core/Functor.hpp>
-Functor::~Functor(){}; // vtable
-
-#include "Dispatcher.hpp"
-
-Dispatcher::~Dispatcher(){}
=== modified file 'core/Dispatcher.hpp'
--- core/Dispatcher.hpp 2014-07-03 17:20:40 +0000
+++ core/Dispatcher.hpp 2014-07-19 19:52:41 +0000
@@ -24,7 +24,7 @@
virtual int getDimension() { throw; };
virtual string getBaseClassType(unsigned int ) { throw; };
//
- virtual ~Dispatcher();
+ virtual ~Dispatcher() {};
YADE_CLASS_BASE_DOC(Dispatcher,Engine,"Engine dispatching control to its associated functors, based on types of argument it receives. This abstract base class provides no functionality in itself.")
};
REGISTER_SERIALIZABLE(Dispatcher);
=== removed file 'core/EnergyTracker.cpp'
--- core/EnergyTracker.cpp 2011-02-15 11:36:29 +0000
+++ core/EnergyTracker.cpp 1970-01-01 00:00:00 +0000
@@ -1,12 +0,0 @@
-#include<yade/core/EnergyTracker.hpp>
-
-Real EnergyTracker::total() const { Real ret=0; size_t sz=energies.size(); for(size_t id=0; id<sz; id++) ret+=energies.get(id); return ret; }
-py::list EnergyTracker::keys_py() const { py::list ret; FOREACH(pairStringInt p, names) ret.append(p.first); return ret; }
-py::list EnergyTracker::items_py() const { py::list ret; FOREACH(pairStringInt p, names) ret.append(py::make_tuple(p.first,energies.get(p.second))); return ret; }
-py::dict EnergyTracker::perThreadData() const {
- py::dict ret;
- std::vector<std::vector<Real> > dta=energies.getPerThreadData();
- FOREACH(pairStringInt p,names) ret[p.first]=dta[p.second];
- return ret;
-}
-
=== modified file 'core/EnergyTracker.hpp'
--- core/EnergyTracker.hpp 2014-07-03 17:20:40 +0000
+++ core/EnergyTracker.hpp 2014-07-19 19:52:41 +0000
@@ -38,10 +38,15 @@
void clear(){ energies.clear(); names.clear(); resetStep.clear();}
void resetResettables(){ size_t sz=energies.size(); for(size_t id=0; id<sz; id++){ if(resetStep[id]) energies.reset(id); } }
- Real total() const;
- py::list keys_py() const;
- py::list items_py() const;
- py::dict perThreadData() const;
+ Real total() const { Real ret=0; size_t sz=energies.size(); for(size_t id=0; id<sz; id++) ret+=energies.get(id); return ret; };
+ py::list keys_py() const { py::list ret; FOREACH(pairStringInt p, names) ret.append(p.first); return ret; };
+ py::list items_py() const { py::list ret; FOREACH(pairStringInt p, names) ret.append(py::make_tuple(p.first,energies.get(p.second))); return ret; };
+ py::dict perThreadData() const {
+ py::dict ret;
+ std::vector<std::vector<Real> > dta=energies.getPerThreadData();
+ FOREACH(pairStringInt p,names) ret[p.first]=dta[p.second];
+ return ret;
+ };
typedef std::map<std::string,int> mapStringInt;
typedef std::pair<std::string,int> pairStringInt;
=== removed file 'core/Engine.cpp'
--- core/Engine.cpp 2010-09-02 09:11:04 +0000
+++ core/Engine.cpp 1970-01-01 00:00:00 +0000
@@ -1,13 +0,0 @@
-#include<yade/core/Engine.hpp>
-
-CREATE_LOGGER(Engine);
-
-void Engine::action(){
- LOG_FATAL("Engine "<<getClassName()<<" calling virtual method Engine::action(). Please submit bug report at http://bugs.launchpad.net/yade.");
- throw std::logic_error("Engine::action() called.");
-}
-
-void Engine::explicitAction(){
- scene=Omega::instance().getScene().get(); action();
-}
-
=== modified file 'core/Engine.hpp'
--- core/Engine.hpp 2014-07-03 17:20:40 +0000
+++ core/Engine.hpp 2014-07-19 19:52:41 +0000
@@ -18,6 +18,8 @@
class Body;
class Scene;
+CREATE_LOGGER(Engine);
+
class Engine: public Serializable{
public:
// pointer to the simulation, set at every step by Scene::moveToNextTimeStep
@@ -29,14 +31,17 @@
virtual ~Engine() {};
virtual bool isActivated() { return true; };
- virtual void action();
+ virtual void action() {
+ LOG_FATAL("Engine "<<getClassName()<<" calling virtual method Engine::action(). Please submit bug report at http://bugs.launchpad.net/yade.");
+ throw std::logic_error("Engine::action() called.");
+ }
private:
// py access funcs
TimingInfo::delta timingInfo_nsec_get(){return timingInfo.nsec;};
void timingInfo_nsec_set(TimingInfo::delta d){ timingInfo.nsec=d;}
long timingInfo_nExec_get(){return timingInfo.nExec;};
void timingInfo_nExec_set(long d){ timingInfo.nExec=d;}
- void explicitAction();
+ void explicitAction() {scene=Omega::instance().getScene().get(); action();};
DECLARE_LOGGER;
=== removed file 'core/FrontEnd.cpp'
--- core/FrontEnd.cpp 2007-03-31 06:18:17 +0000
+++ core/FrontEnd.cpp 1970-01-01 00:00:00 +0000
@@ -1,21 +0,0 @@
-/*************************************************************************
-* Copyright (C) 2004 by Olivier Galizzi *
-* olivier.galizzi@xxxxxxx *
-* *
-* This program is free software; it is licensed under the terms of the *
-* GNU General Public License v2 or later. See file LICENSE for details. *
-*************************************************************************/
-
-#include "FrontEnd.hpp"
-
-
-FrontEnd::FrontEnd()
-{
-}
-
-
-FrontEnd::~FrontEnd()
-{
-
-}
-
=== modified file 'core/FrontEnd.hpp'
--- core/FrontEnd.hpp 2010-11-07 11:46:20 +0000
+++ core/FrontEnd.hpp 2014-07-19 19:52:41 +0000
@@ -15,8 +15,8 @@
class FrontEnd : public Factorable
{
public :
- FrontEnd ();
- virtual ~FrontEnd ();
+ FrontEnd () {};
+ virtual ~FrontEnd () {};
virtual int run(int , char * []) { return -1;};
// called before actually invoking it
=== modified file 'core/Functor.hpp'
--- core/Functor.hpp 2014-07-02 16:11:24 +0000
+++ core/Functor.hpp 2014-07-19 19:52:41 +0000
@@ -23,7 +23,7 @@
shared_ptr<TimingDeltas> timingDeltas;
//! updated before every dispatch loop by the dispatcher; DO NOT ABUSE access to scene, except for getting global variables like scene->dt.
Scene* scene;
- virtual ~Functor(); // defined in Dispatcher.cpp
+ virtual ~Functor() {}; // defined in Dispatcher.cpp
YADE_CLASS_BASE_DOC_ATTRS_CTOR_PY(Functor,Serializable,"Function-like object that is called by Dispatcher, if types of arguments match those the Functor declares to accept.",
((string,label,,,"Textual label for this object; must be a valid python identifier, you can refer to it directly from python.")),
/*ctor*/
=== modified file 'core/Material.cpp'
--- core/Material.cpp 2014-07-03 17:20:40 +0000
+++ core/Material.cpp 2014-07-19 19:52:41 +0000
@@ -2,8 +2,6 @@
#include<yade/core/Material.hpp>
#include<yade/core/Scene.hpp>
-Material::~Material(){}
-
const shared_ptr<Material> Material::byId(int id, Scene* w_){
Scene* w=w_?w_:Omega::instance().getScene().get();
assert(id>=0 && (size_t)id<w->materials.size());
=== modified file 'core/Material.hpp'
--- core/Material.hpp 2014-07-03 17:20:40 +0000
+++ core/Material.hpp 2014-07-19 19:52:41 +0000
@@ -14,7 +14,7 @@
*/
class Material: public Serializable, public Indexable{
public:
- virtual ~Material();
+ virtual ~Material() {};
//! Function to return empty default-initialized instance of State that
// is supposed to go along with this Material. Don't override unless you need
=== removed file 'core/PartialEngine.cpp'
--- core/PartialEngine.cpp 2010-03-20 12:40:44 +0000
+++ core/PartialEngine.cpp 1970-01-01 00:00:00 +0000
@@ -1,10 +0,0 @@
-/*************************************************************************
-* Copyright (C) 2004 by Olivier Galizzi *
-* olivier.galizzi@xxxxxxx *
-* *
-* This program is free software; it is licensed under the terms of the *
-* GNU General Public License v2 or later. See file LICENSE for details. *
-*************************************************************************/
-
-#include "PartialEngine.hpp"
-
=== removed file 'core/Shape.cpp'
--- core/Shape.cpp 2010-02-06 16:01:07 +0000
+++ core/Shape.cpp 1970-01-01 00:00:00 +0000
@@ -1,2 +0,0 @@
-#include<yade/core/Shape.hpp>
-Shape::~Shape(){}
=== modified file 'core/Shape.hpp'
--- core/Shape.hpp 2010-11-07 11:46:20 +0000
+++ core/Shape.hpp 2014-07-19 19:52:41 +0000
@@ -18,7 +18,7 @@
class Shape: public Serializable, public Indexable {
public:
- ~Shape(); // vtable
+ ~Shape() {}; // vtable
#ifdef BV_FUNCTOR_CACHE
shared_ptr<BoundFunctor> boundFunctor;
#endif
=== removed file 'core/TimeStepper.cpp'
--- core/TimeStepper.cpp 2010-08-16 21:31:08 +0000
+++ core/TimeStepper.cpp 1970-01-01 00:00:00 +0000
@@ -1,29 +0,0 @@
-/*************************************************************************
-* Copyright (C) 2004 by Olivier Galizzi *
-* olivier.galizzi@xxxxxxx *
-* Copyright (C) 2004 by Janek Kozicki *
-* cosurgi@xxxxxxxxxx *
-* *
-* This program is free software; it is licensed under the terms of the *
-* GNU General Public License v2 or later. See file LICENSE for details. *
-*************************************************************************/
-
-#include<yade/core/TimeStepper.hpp>
-#include<yade/core/GlobalEngine.hpp>
-#include<yade/core/Scene.hpp>
-
-bool TimeStepper::isActivated()
-{
- return (active && (scene->iter % timeStepUpdateInterval == 0));
-}
-
-
-
-void TimeStepper::setActive(bool a, int nb)
-{
- active = a;
- if (nb>0)
- timeStepUpdateInterval = (unsigned int)nb;
-}
-
-
=== modified file 'core/TimeStepper.hpp'
--- core/TimeStepper.hpp 2010-08-24 12:54:14 +0000
+++ core/TimeStepper.hpp 2014-07-19 19:52:41 +0000
@@ -12,15 +12,16 @@
#include <vector>
#include "Interaction.hpp"
#include "GlobalEngine.hpp"
+#include "Scene.hpp"
class Body;
class TimeStepper: public GlobalEngine{
public:
virtual void computeTimeStep(Scene* ) { throw; };
- virtual bool isActivated();
+ virtual bool isActivated() {return (active && (scene->iter % timeStepUpdateInterval == 0));};
virtual void action() { computeTimeStep(scene);} ;
- void setActive(bool a, int nb=-1);
+ void setActive(bool a, int nb=-1) {active = a; if (nb>0) {timeStepUpdateInterval = (unsigned int)nb;}}
YADE_CLASS_BASE_DOC_ATTRS(
TimeStepper,GlobalEngine,"Engine defining time-step (fundamental class)",
=== removed file 'pkg/common/Aabb.cpp'
--- pkg/common/Aabb.cpp 2010-10-13 16:23:08 +0000
+++ pkg/common/Aabb.cpp 1970-01-01 00:00:00 +0000
@@ -1,13 +0,0 @@
-/*************************************************************************
-* Copyright (C) 2004 by Olivier Galizzi *
-* olivier.galizzi@xxxxxxx *
-* *
-* This program is free software; it is licensed under the terms of the *
-* GNU General Public License v2 or later. See file LICENSE for details. *
-*************************************************************************/
-
-#include "Aabb.hpp"
-
-Aabb::~Aabb(){}
-YADE_PLUGIN((Aabb));
-
=== modified file 'pkg/common/Aabb.hpp'
--- pkg/common/Aabb.hpp 2010-10-13 16:23:08 +0000
+++ pkg/common/Aabb.hpp 2014-07-19 19:52:41 +0000
@@ -18,11 +18,9 @@
*/
class Aabb : public Bound{
public :
- virtual ~Aabb();
+ virtual ~Aabb() {};
YADE_CLASS_BASE_DOC_ATTRS_CTOR(Aabb,Bound,"Axis-aligned bounding box, for use with :yref:`InsertionSortCollider`. (This class is quasi-redundant since min,max are already contained in :yref:`Bound` itself. That might change at some point, though.)",/*attrs*/,/*ctor*/createIndex(););
REGISTER_CLASS_INDEX(Aabb,Bound);
};
REGISTER_SERIALIZABLE(Aabb);
-
-
=== removed file 'pkg/common/ElastMat.cpp'
--- pkg/common/ElastMat.cpp 2010-11-07 11:46:20 +0000
+++ pkg/common/ElastMat.cpp 1970-01-01 00:00:00 +0000
@@ -1,5 +0,0 @@
-// 2009 © Václav Šmilauer <eudoxos@xxxxxxxx>
-#include<yade/pkg/common/ElastMat.hpp>
-YADE_PLUGIN((ElastMat)(FrictMat));
-ElastMat::~ElastMat(){}
-FrictMat::~FrictMat(){}
=== modified file 'pkg/common/ElastMat.hpp'
--- pkg/common/ElastMat.hpp 2014-07-03 17:20:40 +0000
+++ pkg/common/ElastMat.hpp 2014-07-19 19:52:41 +0000
@@ -5,7 +5,7 @@
/*! Elastic material */
class ElastMat: public Material{
public:
- virtual ~ElastMat();
+ virtual ~ElastMat() {};
YADE_CLASS_BASE_DOC_ATTRS_CTOR(ElastMat,Material,"Purely elastic material. The material parameters may have different meanings depending on the :yref:`IPhysFunctor` used : true Young and Poisson in :yref:`Ip2_FrictMat_FrictMat_MindlinPhys`, or contact stiffnesses in :yref:`Ip2_FrictMat_FrictMat_FrictPhys`.",
((Real,young,1e9,,"elastic modulus [Pa]. It has different meanings depending on the Ip functor."))
((Real,poisson,.25,,"Poisson's ratio or the ratio between shear and normal stiffness [-]. It has different meanings depending on the Ip functor. ")),
@@ -18,7 +18,7 @@
/*! Granular material */
class FrictMat: public ElastMat{
public:
- virtual ~FrictMat();
+ virtual ~FrictMat() {};
YADE_CLASS_BASE_DOC_ATTRS_CTOR(FrictMat,ElastMat,"Elastic material with contact friction. See also :yref:`ElastMat`.",
((Real,frictionAngle,.5,,"Contact friction angle (in radians). Hint : use 'radians(degreesValue)' in python scripts.")),
createIndex();
=== modified file 'pkg/common/ParallelEngine.cpp'
--- pkg/common/ParallelEngine.cpp 2014-07-03 17:20:40 +0000
+++ pkg/common/ParallelEngine.cpp 2014-07-19 19:52:41 +0000
@@ -1,11 +1,15 @@
#include"ParallelEngine.hpp"
+#include<yade/pkg/common/PeriodicEngines.hpp>
+#include<yade/pkg/common/ElastMat.hpp>
+#include<yade/pkg/common/PyRunner.hpp>
+#include<yade/pkg/common/Sphere.hpp>
+#include<yade/pkg/common/Aabb.hpp>
+YADE_PLUGIN((PeriodicEngine)(Sphere)(Aabb)(ElastMat)(FrictMat)(PyRunner)(ParallelEngine));
#ifdef YADE_OPENMP
#include<omp.h>
#endif
-YADE_PLUGIN((ParallelEngine));
-
//! ParallelEngine's pseudo-ctor (factory), taking nested lists of slave engines (might be moved to real ctor perhaps)
shared_ptr<ParallelEngine> ParallelEngine_ctor_list(const boost::python::list& slaves){ shared_ptr<ParallelEngine> instance(new ParallelEngine); instance->slaves_set(slaves); return instance; }
=== removed file 'pkg/common/PeriodicEngines.cpp'
--- pkg/common/PeriodicEngines.cpp 2010-11-07 11:46:20 +0000
+++ pkg/common/PeriodicEngines.cpp 1970-01-01 00:00:00 +0000
@@ -1,3 +0,0 @@
-#include<yade/pkg/common/PeriodicEngines.hpp>
-YADE_PLUGIN((PeriodicEngine));
-PeriodicEngine::~PeriodicEngine(){};
=== modified file 'pkg/common/PeriodicEngines.hpp'
--- pkg/common/PeriodicEngines.hpp 2013-03-26 12:03:38 +0000
+++ pkg/common/PeriodicEngines.hpp 2014-07-19 19:52:41 +0000
@@ -9,7 +9,7 @@
class PeriodicEngine: public GlobalEngine {
public:
static Real getClock(){ timeval tp; gettimeofday(&tp,NULL); return tp.tv_sec+tp.tv_usec/1e6; }
- virtual ~PeriodicEngine(); // vtable
+ virtual ~PeriodicEngine() {}; // vtable
virtual bool isActivated(){
const Real& virtNow=scene->time;
Real realNow=getClock();
@@ -67,44 +67,3 @@
);
};
REGISTER_SERIALIZABLE(PeriodicEngine);
-
-#if 0
- /*!
- PeriodicEngine but with constraint that may be stretched by a given stretchFactor (default 2).
- Limits for each periodicity criterion may be set and the mayStretch bool says whether the period
- can be stretched (default: doubled) without active criteria getting off limits.
-
- stretchFactor must be positive; if >1, period is stretched, for <1, it is shrunk.
-
- Limit consistency (whether actual period is not over/below the limit) is checked: period is set to the
- limit value if we are off. If the limit is zero, however, and the period is non-zero, the limit is set
- to the period value (therefore, if you initialize only iterPeriod, you will get what you expect: engine
- running at iterPeriod).
-
- Note: the logic here is probably too complicated to be practical, although it works. Chances are that
- if unused, it will be removed from the codebase.
- */
- class StretchPeriodicEngine: public PeriodicEngine{
- public:
- StretchPeriodicEngine(): PeriodicEngine(), realLim(0.), virtLim(0.), iterLim(0), stretchFactor(2.), mayStretch(false){}
- Real realLim, virtLim; long iterLim;
- Real stretchFactor;
- bool mayStretch;
- virtual bool isActivated(){
- assert(stretchFactor>0);
- if(iterLim==0 && iterPeriod!=0){iterLim=iterPeriod;} else if(iterLim!=0 && iterPeriod==0){iterPeriod=iterLim;}
- if(realLim==0 && realPeriod!=0){realLim=realPeriod;} else if(realLim!=0 && realPeriod==0){realPeriod=realLim;}
- if(virtLim==0 && virtPeriod!=0){virtLim=virtPeriod;} else if(virtLim!=0 && virtPeriod==0){virtPeriod=virtLim;}
- if(stretchFactor>1){iterPeriod=min(iterPeriod,iterLim); realPeriod=min(realPeriod,realLim); virtPeriod=min(virtPeriod,virtLim);}
- else {iterPeriod=max(iterPeriod,iterLim); realPeriod=max(realPeriod,realLim); virtPeriod=max(virtPeriod,virtLim);}
- mayStretch=((virtPeriod<0 || (stretchFactor>1 ? stretchFactor*virtPeriod<=virtLim : stretchFactor*virtPeriod>=virtLim))
- && (realPeriod<0 || (stretchFactor>1 ? stretchFactor*realPeriod<=realLim : stretchFactor*realPeriod>=realLim))
- && (iterPeriod<0 || (stretchFactor>1 ? stretchFactor*iterPeriod<=iterLim : stretchFactor*iterPeriod>=iterLim)));
- return PeriodicEngine::isActivated();
- }
- REGISTER_ATTRIBUTES(PeriodicEngine,(realLim)(virtLim)(iterLim)(mayStretch)(stretchFactor));
- REGISTER_CLASS_NAME(StretchPeriodicEngine);
- REGISTER_BASE_CLASS_NAME(PeriodicEngine);
- };
- REGISTER_SERIALIZABLE(StretchPeriodicEngine);
-#endif
=== removed file 'pkg/common/PyRunner.cpp'
--- pkg/common/PyRunner.cpp 2010-11-07 11:46:20 +0000
+++ pkg/common/PyRunner.cpp 1970-01-01 00:00:00 +0000
@@ -1,2 +0,0 @@
-#include<yade/pkg/common/PyRunner.hpp>
-YADE_PLUGIN((PyRunner));
=== modified file 'pkg/common/PyRunner.hpp'
--- pkg/common/PyRunner.hpp 2010-11-07 11:46:20 +0000
+++ pkg/common/PyRunner.hpp 2014-07-19 19:52:41 +0000
@@ -15,4 +15,3 @@
);
};
REGISTER_SERIALIZABLE(PyRunner);
-
=== removed file 'pkg/common/Sphere.cpp'
--- pkg/common/Sphere.cpp 2010-10-13 16:23:08 +0000
+++ pkg/common/Sphere.cpp 1970-01-01 00:00:00 +0000
@@ -1,3 +0,0 @@
-#include "Sphere.hpp"
-Sphere::~Sphere(){}
-YADE_PLUGIN((Sphere));
=== modified file 'pkg/common/Sphere.hpp'
--- pkg/common/Sphere.hpp 2010-10-13 16:23:08 +0000
+++ pkg/common/Sphere.hpp 2014-07-19 19:52:41 +0000
@@ -8,7 +8,7 @@
class Sphere: public Shape{
public:
Sphere(Real _radius): radius(_radius){ createIndex(); }
- virtual ~Sphere ();
+ virtual ~Sphere () {};
YADE_CLASS_BASE_DOC_ATTRS_CTOR(Sphere,Shape,"Geometry of spherical particle.",
((Real,radius,NaN,,"Radius [m]")),
createIndex(); /*ctor*/