diff --git a/qpms/qpms_c.pyx b/qpms/qpms_c.pyx index db78208..bffd0a4 100644 --- a/qpms/qpms_c.pyx +++ b/qpms/qpms_c.pyx @@ -703,6 +703,7 @@ cdef class BaseSpec: self.s.norm = QPMS_NORMALISATION_POWER # set the other metadata cdef qpms_l_t l + self.s.lMax_L = -1 cdef qpms_m_t m cdef qpms_vswf_type_t t for i in range(self.s.n): @@ -713,7 +714,7 @@ cdef class BaseSpec: elif (t == QPMS_VSWF_MAGNETIC): self.s.lMax_M = max(self.s.lMax_M, l) elif (t == QPMS_VSWF_LONGITUDINAL): - self.s.lMax.L = max(self.s.lMax_L, l) + self.s.lMax_L = max(self.s.lMax_L, l) else: raise ValueError # If this happens, it's probably a bug, as it should have failed already at qpms_uvswfi2tmn self.s.lMax = max(self.s.lMax, l) diff --git a/qpms/translations.c b/qpms/translations.c index dc9c60d..db7af4d 100644 --- a/qpms/translations.c +++ b/qpms/translations.c @@ -1165,7 +1165,7 @@ qpms_errno_t qpms_trans_calculator_get_trans_array(const qpms_trans_calculator * { assert(c->normalisation == destspec->norm && c->normalisation == srcspec->norm); assert(c->lMax >= destspec->lMax && c->lMax >= srcspec->lMax); - assert(!destspec->lMax_L && !srcspec->lMax_L); + assert(destspec->lMax_L < 0 && srcspec->lMax_L < 0); complex double A[c->nelem][c->nelem]; complex double B[c->nelem][c->nelem]; qpms_errno_t retval = qpms_trans_calculator_get_AB_arrays(c, diff --git a/qpms/vswf.c b/qpms/vswf.c index 66cfb3b..b38ebec 100644 --- a/qpms/vswf.c +++ b/qpms/vswf.c @@ -25,9 +25,10 @@ qpms_errno_t qpms_vswf_set_spec_append(qpms_vswf_set_spec_t *s, const qpms_uvswf qpms_vswf_type_t t; if (qpms_uvswfi2tmn(u, &t, &m, &l)!=QPMS_SUCCESS) return QPMS_ERROR; // TODO WARN if (s->n + 1 > s->capacity) { - size_t newcap = (s->capacity > 32) ? 32 : 2*s->capacity; + size_t newcap = (s->capacity < 32) ? 32 : 2*s->capacity; qpms_uvswfi_t *newmem = realloc(s->ilist, newcap * sizeof(qpms_uvswfi_t)); if (newmem == NULL) return QPMS_ENOMEM; // TODO WARN + s->capacity = newcap; s->ilist = newmem; } s->ilist[s->n] = u; diff --git a/tests/ss_syms_packs.c b/tests/ss_syms_packs.c index b495834..470fc5f 100644 --- a/tests/ss_syms_packs.c +++ b/tests/ss_syms_packs.c @@ -4,9 +4,16 @@ typedef int qpms_gmi_t;// There is something wrong in the includes, apparently. #include #include #include +#include +#include #include "staticgroups.h" const qpms_finite_group_t *D3h = &QPMS_FINITE_GROUP_D3h; +const qpms_finite_group_t *C4v = &QPMS_FINITE_GROUP_C4v; +const qpms_finite_group_t *TRIVG = &QPMS_FINITE_GROUP_trivial_g; +const qpms_finite_group_t *C2v = &QPMS_FINITE_GROUP_C2v; +const qpms_finite_group_t *D2h = &QPMS_FINITE_GROUP_D2h; +const qpms_finite_group_t *D4h = &QPMS_FINITE_GROUP_D4h; double uniform_random(double min, double max) { double random_value = min + (max-min)*(double)rand()/RAND_MAX; @@ -16,10 +23,22 @@ double uniform_random(double min, double max) { int main() { srand(666); - +#if 0 qpms_vswf_set_spec_t *b1 = qpms_vswf_set_spec_from_lMax(1,QPMS_NORMALISATION_POWER_CS), *b2 = qpms_vswf_set_spec_from_lMax(2,QPMS_NORMALISATION_POWER_CS); +#else + // Only electric waves + qpms_vswf_set_spec_t *b1 = qpms_vswf_set_spec_init(), + *b2 = qpms_vswf_set_spec_init(); + b1->norm = b2-> norm = QPMS_NORMALISATION_POWER_CS; + for(qpms_l_t l = 1; l <= 1; ++l) + for (qpms_m_t m = -l; m <= l; ++m) + qpms_vswf_set_spec_append(b1, qpms_tmn2uvswfi(QPMS_VSWF_ELECTRIC, m, l)); + for(qpms_l_t l = 1; l <= 2; ++l) + for (qpms_m_t m = -l; m <= l; ++m) + qpms_vswf_set_spec_append(b2, qpms_tmn2uvswfi(QPMS_VSWF_ELECTRIC, m, l)); +#endif qpms_tmatrix_t *t1 = qpms_tmatrix_init(b1); qpms_tmatrix_t *t2 = qpms_tmatrix_init(b2); @@ -39,7 +58,11 @@ int main() protoss.p = plist; protoss.p_count=3; - qpms_scatsys_t *ss = qpms_scatsys_apply_symmetry(&protoss, D3h); + qpms_scatsys_t *ss = qpms_scatsys_apply_symmetry(&protoss, D4h); + + printf("p_count: %d, tm_count: %d, nirreps: %d, orbit_type_count: %d\n", + (int)ss->p_count, (int)ss->tm_count, (int)ss->sym->nirreps, + (int)ss->orbit_type_count); const double k = 1.7; @@ -61,6 +84,8 @@ int main() double err = cabs(S_full[i] - S_recfull[i]); maxerr = (err > maxerr) ? err : maxerr; } + + printf("maxerr: %lg\n", maxerr); for (qpms_iri_t iri = 0; iri < ss->sym->nirreps; ++iri) free(S_packed[iri]); free(S_full);