30 for (
int i=0; i<
nl0; i++) {
34 for (
int i=0; i<
nl1; i++) {
38 for (
int i=0; i<
nl2; i++) {
42 for (
int i=0; i<
nl3; i++) {
46 for (
int i=0; i<
nl4; i++) {
54 int nElements = (L*L+1)/2;
57 if (mIdx*L + nIdx > nElements-1) {
71 unsigned int mIdx = m+l;
72 unsigned int nIdx = n+l;
75 unsigned int L = 2*l+1;
81 std::complex<T>
get(
int l,
int m,
int n) {
82 unsigned int flatIdx = this->
getFlatIdx(l,m,n);
103 throw std::runtime_error(
"No implementation for l>4");
108 std::complex<T> mult;
109 mult.real(std::pow(-1.0, m+n));
111 val = mult*std::conj(val);
119 void set(
int l,
int m,
int n, std::complex<T> val) {
120 unsigned int flatIdx = this->
getFlatIdx(l,m,n);
124 std::complex<T> mult;
125 mult.real(std::pow(-1.0, m+n));
127 val = mult*std::conj(val);
148 throw std::runtime_error(
"No implementation for l>4");
153 std::vector<T> vals(2*
nl0);
154 for (
int i=0; i<
nl0; i++) {
155 vals[2*i] =
l0[i].real();
156 vals[2*i+1] =
l0[i].imag();
162 std::vector<T> vals(2*
nl1);
163 for (
int i=0; i<
nl1; i++) {
164 vals[2*i] =
l1[i].real();
165 vals[2*i+1] =
l1[i].imag();
171 std::vector<T> vals(2*
nl2);
172 for (
int i=0; i<
nl2; i++) {
173 vals[2*i] =
l2[i].real();
174 vals[2*i+1] =
l2[i].imag();
180 std::vector<T> vals(2*
nl3);
181 for (
int i=0; i<
nl3; i++) {
182 vals[2*i] =
l3[i].real();
183 vals[2*i+1] =
l3[i].imag();
189 std::vector<T> vals(2*
nl4);
190 for (
int i=0; i<
nl4; i++) {
191 vals[2*i] =
l4[i].real();
192 vals[2*i+1] =
l4[i].imag();
202 std::complex<T>
l0[2*0*(0+1)+1];
203 std::complex<T>
l1[2*1*(1+1)+1];
204 std::complex<T>
l2[2*2*(2+1)+1];
205 std::complex<T>
l3[2*3*(3+1)+1];
206 std::complex<T>
l4[2*4*(4+1)+1];
209 template <
typename T>
212 for (
int i=0; i<res.
nl0; i++) {
213 res.
l0[i] = coeffs1.
l0[i]+coeffs2.
l0[i];
215 for (
int i=0; i<res.
nl1; i++) {
216 res.
l1[i] = coeffs1.
l1[i]+coeffs2.
l1[i];
218 for (
int i=0; i<res.
nl2; i++) {
219 res.
l2[i] = coeffs1.
l2[i]+coeffs2.
l2[i];
221 for (
int i=0; i<res.
nl3; i++) {
222 res.
l3[i] = coeffs1.
l3[i]+coeffs2.
l3[i];
224 for (
int i=0; i<res.
nl4; i++) {
225 res.
l4[i] = coeffs1.
l4[i]+coeffs2.
l4[i];
230 template <
typename T>
235 template <
typename T>
238 for (
int i=0; i<res.
nl0; i++) {
239 res.
l0[i] = coeffs.
l0[i]/val;
241 for (
int i=0; i<res.
nl1; i++) {
242 res.
l1[i] = coeffs.
l1[i]/val;
244 for (
int i=0; i<res.
nl2; i++) {
245 res.
l2[i] = coeffs.
l2[i]/val;
247 for (
int i=0; i<res.
nl3; i++) {
248 res.
l3[i] = coeffs.
l3[i]/val;
250 for (
int i=0; i<res.
nl4; i++) {
251 res.
l4[i] = coeffs.
l4[i]/val;
256 template <
typename T>
std::complex< T > l2[2 *2 *(2+1)+1]
Definition: gsh.h:204
void operator+=(GSHCoeffs< T > &A, const GSHCoeffs< T > &B)
Definition: gsh.h:231
unsigned int getFlatIdx(int l, int m, int n)
Definition: gsh.h:65
int nl2
Definition: gsh.h:199
void operator/=(GSHCoeffs< T > &A, const T B)
Definition: gsh.h:257
Definition: casesUtils.cpp:4
std::complex< T > l1[2 *1 *(1+1)+1]
Definition: gsh.h:203
std::vector< T > getl1Reals()
Definition: gsh.h:161
GSHCoeffs< T > operator/(const GSHCoeffs< T > &coeffs, const T val)
Definition: gsh.h:236
std::complex< T > l4[2 *4 *(4+1)+1]
Definition: gsh.h:206
bool isInSymmetrizedSection(int l, int m, int n)
Definition: gsh.h:52
std::vector< T > getl4Reals()
Definition: gsh.h:188
std::complex< T > l0[2 *0 *(0+1)+1]
Definition: gsh.h:202
std::vector< T > getl0Reals()
Definition: gsh.h:152
int nl1
Definition: gsh.h:198
int nl0
Definition: gsh.h:197
std::vector< T > getl2Reals()
Definition: gsh.h:170
GSHCoeffs()
Definition: gsh.h:29
std::complex< T > l3[2 *3 *(3+1)+1]
Definition: gsh.h:205
std::vector< T > getl3Reals()
Definition: gsh.h:179
GSHCoeffs< T > operator+(const GSHCoeffs< T > &coeffs1, const GSHCoeffs< T > &coeffs2)
Definition: gsh.h:210
int nl3
Definition: gsh.h:200
int nl4
Definition: gsh.h:201