Fixes in vswf spec.
Former-commit-id: 87e0dbd73de266801c5bed7e8d3e43aaf4a0ed0e
This commit is contained in:
parent
53109e6d92
commit
20af81440f
|
@ -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)
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -4,9 +4,16 @@ typedef int qpms_gmi_t;// There is something wrong in the includes, apparently.
|
|||
#include <qpms/scatsystem.h>
|
||||
#include <stdlib.h>
|
||||
#include <qpms/vswf.h>
|
||||
#include <qpms/indexing.h>
|
||||
#include <stdio.h>
|
||||
#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);
|
||||
|
|
Loading…
Reference in New Issue