namespace ewalena
0.2.15
ewalena is not an acronym
|
Base class for crystal fields of empirical moduli. More...
#include <include/ewalena/numerics/crystal_field_base.h>
Public Member Functions | |
virtual void | assign_symmetry_flags (const SymmetryFlag &symmetry_flags, const SymmetryFlag &group_flags=null) |
CrystalFieldBase (const Vector< ValueType > &moduli=Vector< ValueType >(), const SymmetryFlag &symmetry_flags=SymmetryFlag::null, const SymmetryFlag &group_flags=SymmetryFlag::null) | |
virtual void | distribute_moduli (const Vector< ValueType > &moduli) |
SymmetryFlag | group_flags () const |
unsigned int | n_components () const |
Tensor< dim, rank, ValueType > | operator* () const |
CrystalFieldBase< dim, rank, ValueType > & | operator= (const CrystalFieldBase< dim, rank, ValueType > &T) |
SymmetryFlag | symmetry_flags () const |
void | write_gnuplot (std::ostream &out) const |
virtual | ~CrystalFieldBase () |
Protected Member Functions | |
virtual void | assign_moduli (const Vector< ValueType > &moduli) |
Protected Attributes | |
SymmetryFlag | group_flags_ |
Vector< ValueType > | moduli_ |
SymmetryFlag | symmetry_flags_ |
Base class for crystal fields of empirical moduli.
CrystalFieldBase is a base class for other classes that describe classical crystal fields that in turn describe the solid-state physics of crystal structures. Enigmatic examples of such fields are the elastic field (a fourth-order tensor) and the dielectric field (second-order) tensor.
Derived classes of the CrystalFieldBase class are normally used in application code by first assigning a crystal symmetry class and a set of moduli to the tensor base, and then let the member function distribute_moduli ()
automagically fill the tensor according to the rules governed by the class (or field) type and symmetry group. Schematically, this may look like:
// Initialise an elastic tensor field and elastic moduli. ewalena::ElasticField elastic_field; // Elastic fields of cubic symmetry have exactly three // independent constants. This example is for cubic zinc-oxide // (units: GPa). ewalena::Vector<double> elastic_moduli = {193, 139, 96}; // Assign symmetry flags to this elastic tensor field. elastic_field.assign_symmetry_flag (ewalena::SymmetryFlag::Crystal::cubic); // Distribute these elastic moduli onto this tensor. elastic_field.distribute_moduli (elastic_moduli);
ewalena::Crystal::CrystalFieldBase< dim, rank, ValueType >::CrystalFieldBase | ( | const Vector< ValueType > & | moduli = Vector<ValueType> () , |
const SymmetryFlag & | symmetry_flags = SymmetryFlag::null , |
||
const SymmetryFlag & | group_flags = SymmetryFlag::null |
||
) | [inline] |
Constructor.
virtual ewalena::Crystal::CrystalFieldBase< dim, rank, ValueType >::~CrystalFieldBase | ( | ) | [virtual] |
Virtual destructor.
virtual void ewalena::Crystal::CrystalFieldBase< dim, rank, ValueType >::assign_moduli | ( | const Vector< ValueType > & | moduli | ) | [protected, virtual] |
Assign moduli to this tensor field. Any previously assigned moduli will be brutely overwritten.
virtual void ewalena::Crystal::CrystalFieldBase< dim, rank, ValueType >::assign_symmetry_flags | ( | const SymmetryFlag & | symmetry_flags, |
const SymmetryFlag & | group_flags = null |
||
) | [virtual] |
Assign symmetry flags to this tensor field. Any previously assigned symmetry flags will be brutely overwritten.
virtual void ewalena::Crystal::CrystalFieldBase< dim, rank, ValueType >::distribute_moduli | ( | const Vector< ValueType > & | moduli | ) | [virtual] |
Distribute moduli onto this tensor field according to rules governing the crystal group symmetry.
Reimplemented in ewalena::Crystal::ElasticField< ValueType >, ewalena::Crystal::DielectricField< ValueType >, ewalena::Crystal::PiezoelectricField< ValueType >, ewalena::Crystal::PyroelectricField< ValueType >, and ewalena::Crystal::FerroelectricField< ValueType >.
SymmetryFlag ewalena::Crystal::CrystalFieldBase< dim, rank, ValueType >::group_flags | ( | ) | const |
Return the symmetry flag associated with this tensor field.
unsigned int ewalena::Crystal::CrystalFieldBase< dim, rank, ValueType >::n_components | ( | ) | const |
Return the number of components in this tensor field.
Reimplemented from ewalena::Tensor< dim, rank, ValueType >.
Tensor<dim, rank, ValueType> ewalena::Crystal::CrystalFieldBase< dim, rank, ValueType >::operator* | ( | ) | const [inline] |
Access operator to the underlying tensor associated with this tensor field.
Reimplemented from ewalena::Tensor< dim, rank, ValueType >.
Reimplemented in ewalena::Crystal::ElasticField< ValueType >, ewalena::Crystal::DielectricField< ValueType >, ewalena::Crystal::PiezoelectricField< ValueType >, ewalena::Crystal::PyroelectricField< ValueType >, and ewalena::Crystal::FerroelectricField< ValueType >.
CrystalFieldBase<dim, rank, ValueType>& ewalena::Crystal::CrystalFieldBase< dim, rank, ValueType >::operator= | ( | const CrystalFieldBase< dim, rank, ValueType > & | T | ) |
Assignment operator. Initialise this tensor with the T
.
SymmetryFlag ewalena::Crystal::CrystalFieldBase< dim, rank, ValueType >::symmetry_flags | ( | ) | const |
Return the symmetry flag associated with this tensor field.
void ewalena::Crystal::CrystalFieldBase< dim, rank, ValueType >::write_gnuplot | ( | std::ostream & | out | ) | const |
Write gnuplot.
SymmetryFlag ewalena::Crystal::CrystalFieldBase< dim, rank, ValueType >::group_flags_ [protected] |
Original symmetry flags handed to the constructor.
Vector<ValueType> ewalena::Crystal::CrystalFieldBase< dim, rank, ValueType >::moduli_ [protected] |
Original moduli handed to the constructor.
SymmetryFlag ewalena::Crystal::CrystalFieldBase< dim, rank, ValueType >::symmetry_flags_ [protected] |
Original symmetry flags handed to the constructor.