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(); }
68 for (
int i = 0; i < D; ++i) {
73 for (
int i = 0; i < D; ++i) {
88 for (
int p = 0; p < D; ++p){
89 for (
int q = 0; q < D; ++q){
91 value += vec[p]*vec[q]*element;
106 {
return bool(signalPtr_); }
121 void UnitCellBase<D>::initializeToZero()
125 for (i = 0; i < D; ++i) {
126 for (j = 0; j < D; ++j) {
131 for (k = 0; k < 6; ++k){
132 for (i = 0; i < D; ++i) {
133 for (j = 0; j < D; ++j) {
134 drBasis_[k](i,j) = 0.0;
135 dkBasis_[k](i,j) = 0.0;
136 drrBasis_[k](i,j) = 0.0;
137 dkkBasis_[k](i,j) = 0.0;
147 void UnitCellBase<D>::computeDerivatives()
151 for (p = 0; p < nParameter_; ++p) {
152 for (q = 0; q < D; ++q) {
153 for (r = 0; r < D; ++r) {
156 for (s = 0; s < D; ++s) {
157 for (t = 0; t < D; ++t) {
170 for (q = 0; q < D; ++q) {
171 for (r = 0; r < D; ++r) {
172 for (s = 0; s < D; ++s) {
193 computeDerivatives();
196 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?
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_
Parameters used to describe the unit cell.
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.