Cavities¶
We will here describe the inheritance hierarchy for generating cavities, in order to use and extend it properly. The runtime creation of cavity objects relies on the Factory Method pattern [GHJV94][Ale01], implemented through the generic Factory class.
ICavity¶
-
class
pcm
::
ICavity
¶ Abstract Base Class for cavities.
This class represents a cavity made of spheres, its surface being discretized in terms of finite elements.
- Author
Krzysztof Mozgawa
- Date
2011
Subclassed by pcm::cavity::GePolCavity, pcm::cavity::RestartCavity
Public Functions
-
ICavity
()¶ Default constructor.
-
ICavity
(const Sphere &sph)¶ Constructor from a single sphere.
Only used when we have to deal with a single sphere, i.e. in the unit tests
- Parameters
[in] sph
: the sphere
-
ICavity
(const std::vector<Sphere> &sph)¶ Constructor from list of spheres.
Only used when we have to deal with a single sphere, i.e. in the unit tests
- Parameters
[in] sph
: the list of spheres
-
ICavity
(const Molecule &molec)¶ Constructor from Molecule.
- Parameters
[in] molec
: the molecular aggregate
-
void
saveCavity
(const std::string &fname = "cavity.npz")¶ Save cavity specification to file.
The cavity specification contains: 0. the number of finite elements, nElements;
the weight of the finite elements, elementArea;
the radius of the finite elements, elementRadius;
the centers of the finite elements, elementCenter;
the normal vectors relative to the centers, elementNormal. Each of these objects is saved in a separate .npy binary file and compressed into one .npz file. Notice that this is just the minimal set of data needed to restart an energy calculation.
-
void
loadCavity
(const std::string &fname = "cavity.npz")¶ Load cavity specification from file.
Protected Attributes
-
std::vector<Sphere>
spheres_
¶ List of spheres.
-
PCMSolverIndex
nElements_
¶ Number of finite elements generated.
-
PCMSolverIndex
nIrrElements_
¶ Number of irreducible finite elements.
-
bool
built
¶ Whether the cavity has been built.
-
Eigen::Matrix3Xd
elementCenter_
¶ Coordinates of elements centers.
-
Eigen::Matrix3Xd
elementNormal_
¶ Outward-pointing normal vectors to the elements centers.
-
Eigen::VectorXd
elementArea_
¶ Elements areas.
-
int
nSpheres_
¶ Number of spheres.
-
Eigen::Matrix3Xd
elementSphereCenter_
¶ Centers of the sphere the elements belong to.
-
Eigen::VectorXd
elementRadius_
¶ Radii of the sphere the elements belong to.
-
Eigen::Matrix3Xd
sphereCenter_
¶ Spheres centers.
-
Eigen::VectorXd
sphereRadius_
¶ Spheres radii.
-
std::vector<Element>
elements_
¶ List of finite elements.
Private Functions
-
void
makeCavity
() = 0¶ Creates the cavity and discretizes its surface.
Has to be implemented by classes lower down in the inheritance hierarchy
GePolCavity¶
-
class
pcm::cavity
::
GePolCavity
: public pcm::ICavity¶ A class for GePol cavity.
This class is an interface to the Fortran code PEDRA for the generation of cavities according to the GePol algorithm.
- Author
Krzysztof Mozgawa, Roberto Di Remigio
- Date
2011, 2016
Private Functions
-
void
makeCavity
() override¶ Creates the cavity and discretizes its surface.
Has to be implemented by classes lower down in the inheritance hierarchy
-
void
build
(const std::string &suffix, int maxts, int maxsp, int maxvert)¶ Driver for PEDRA Fortran module.
- Parameters
[in] suffix
: for the cavity.off and PEDRA.OUT files, the PID will also be added[in] maxts
: maximum number of tesserae[in] maxsp
: maximum number of spheres (original + added)[in] maxvert
: maximum number of vertices
-
void
writeOFF
(const std::string &suffix)¶ Writes the cavity.off file for visualizing the cavity.
- Parameters
[in] suffix
: for the cavity.off The full name of the visualization file will be cavity.off_suffix_PID