1#ifndef PRDC_UNIT_CELL_BASE_TPP
2#define PRDC_UNIT_CELL_BASE_TPP
11#include "UnitCellBase.h"
13#include <util/signal/Signal.h>
14#include <util/math/Constants.h>
15#include <util/containers/FSArray.h>
30 { initializeToZero(); }
75 for (
int i = 0; i < D; ++i) {
80 for (
int i = 0; i < D; ++i) {
95 for (
int p = 0; p < D; ++p){
96 for (
int q = 0; q < D; ++q){
98 value += vec[p]*vec[q]*element;
113 {
return bool(signalPtr_); }
128 void UnitCellBase<D>::initializeToZero()
132 for (i = 0; i < D; ++i) {
133 for (j = 0; j < D; ++j) {
138 for (k = 0; k < 6; ++k){
139 for (i = 0; i < D; ++i) {
140 for (j = 0; j < D; ++j) {
141 drBasis_[k](i,j) = 0.0;
142 dkBasis_[k](i,j) = 0.0;
143 drrBasis_[k](i,j) = 0.0;
144 dkkBasis_[k](i,j) = 0.0;
154 void UnitCellBase<D>::computeDerivatives()
158 for (p = 0; p < nParameter_; ++p) {
159 for (q = 0; q < D; ++q) {
160 for (r = 0; r < D; ++r) {
163 for (s = 0; s < D; ++s) {
164 for (t = 0; t < D; ++t) {
177 for (q = 0; q < D; ++q) {
178 for (r = 0; r < D; ++r) {
179 for (s = 0; s < D; ++s) {
200 computeDerivatives();
203 signalPtr_->notify();
An IntVec<D, T> is a D-component vector of elements of integer type T.
bool isInitialized_
Has this unit cell been fully initialized?
~UnitCellBase()
Destructor.
void setParameters(FSArray< double, 6 > const ¶meters)
Set all the parameters of unit cell.
void setSignal(Signal< void > &signal)
Associating an externally defined signal with this unit cell.
UnitCellBase()
Constructor.
FArray< RealVec< D >, D > rBasis_
FArray< FMatrix< double, D, D >, 6 > drBasis_
double dkkBasis(int k, int i, int j) const
Get derivative of dot product bi.bj with respect to parameter k.
FArray< RealVec< D >, D > kBasis_
Array of reciprocal lattice basis vectors.
Signal< void > & signal()
Get the associated Signal by non-const reference.
FSArray< double, 6 > parameters() const
Get the parameters of this unit cell.
FArray< double, 6 > parameters_
virtual double ksq(IntVec< D > const &k) const
Compute square magnitude of reciprocal lattice vector.
FArray< FMatrix< double, D, D >, 6 > dkBasis_
FArray< FMatrix< double, D, D >, 6 > drrBasis_
bool hasSignal() const
Does this object have an associated Signal<void>?
void setLattice()
Compute all protected data, given latticeSystem and parameters.
virtual double dksq(IntVec< D > const &vec, int n) const
Compute derivative of square wavevector w/respect to cell parameter.
int nParameter_
Number of parameters required to specify unit cell.
FArray< FMatrix< double, D, D >, 6 > dkkBasis_
A RealVec<D, T> is D-component vector with elements of floating type T.
Vec< D, T > & multiply(const Vec< D, T > &v, T s)
Multiply a vector v by a scalar s.
static const double Pi
Trigonometric constant Pi.
A fixed capacity (static) contiguous array with a variable logical size.
Notifier (or subject) in the Observer design pattern.
#define UTIL_CHECK(condition)
Assertion macro suitable for serial or parallel production code.
Periodic fields and crystallography.
PSCF package top-level namespace.