tweak alm <-> alm_tmp

This commit is contained in:
Martin Reinecke 2012-11-05 13:13:20 +01:00
parent bea64bd65f
commit 549d1c35e1

View file

@ -415,18 +415,36 @@ static void dealloc_almtmp (sharp_job *job)
static void alm2almtmp (sharp_job *job, int lmax, int mi)
{
if (job->type!=SHARP_MAP2ALM)
for (int l=job->ainfo->mval[mi]; l<=lmax; ++l)
{
ptrdiff_t ofs=job->ainfo->mvstart[mi];
int stride=job->ainfo->stride;
if (job->spin==0)
{
ptrdiff_t aidx = sharp_alm_index(job->ainfo,l,mi);
double fct = job->norm_l[l];
for (int i=0; i<job->ntrans*job->nalm; ++i)
if (job->fde==DOUBLE)
job->almtmp[job->ntrans*job->nalm*l+i]
= ((dcmplx *)job->alm[i])[aidx]*fct;
else
job->almtmp[job->ntrans*job->nalm*l+i]
= ((fcmplx *)job->alm[i])[aidx]*fct;
if (job->fde==DOUBLE)
for (int l=job->ainfo->mval[mi]; l<=lmax; ++l)
for (int i=0; i<job->ntrans*job->nalm; ++i)
job->almtmp[job->ntrans*job->nalm*l+i]
= ((dcmplx *)job->alm[i])[ofs+l*stride];
else
for (int l=job->ainfo->mval[mi]; l<=lmax; ++l)
for (int i=0; i<job->ntrans*job->nalm; ++i)
job->almtmp[job->ntrans*job->nalm*l+i]
= ((fcmplx *)job->alm[i])[ofs+l*stride];
}
else
{
if (job->fde==DOUBLE)
for (int l=job->ainfo->mval[mi]; l<=lmax; ++l)
for (int i=0; i<job->ntrans*job->nalm; ++i)
job->almtmp[job->ntrans*job->nalm*l+i]
= ((dcmplx *)job->alm[i])[ofs+l*stride]*job->norm_l[l];
else
for (int l=job->ainfo->mval[mi]; l<=lmax; ++l)
for (int i=0; i<job->ntrans*job->nalm; ++i)
job->almtmp[job->ntrans*job->nalm*l+i]
= ((fcmplx *)job->alm[i])[ofs+l*stride]*job->norm_l[l];
}
}
else
SET_ARRAY(job->almtmp,job->ntrans*job->nalm*job->ainfo->mval[mi],
job->ntrans*job->nalm*(lmax+1),0.);
@ -435,16 +453,33 @@ static void alm2almtmp (sharp_job *job, int lmax, int mi)
static void almtmp2alm (sharp_job *job, int lmax, int mi)
{
if (job->type != SHARP_MAP2ALM) return;
for (int l=job->ainfo->mval[mi]; l<=lmax; ++l)
ptrdiff_t ofs=job->ainfo->mvstart[mi];
int stride=job->ainfo->stride;
if (job->spin==0)
{
ptrdiff_t aidx = sharp_alm_index(job->ainfo,l,mi);
for (int i=0;i<job->ntrans*job->nalm;++i)
if (job->fde==DOUBLE)
((dcmplx *)job->alm[i])[aidx] +=
job->almtmp[job->ntrans*job->nalm*l+i]*job->norm_l[l];
else
((fcmplx *)job->alm[i])[aidx] +=
(fcmplx)(job->almtmp[job->ntrans*job->nalm*l+i]*job->norm_l[l]);
if (job->fde==DOUBLE)
for (int l=job->ainfo->mval[mi]; l<=lmax; ++l)
for (int i=0;i<job->ntrans*job->nalm;++i)
((dcmplx *)job->alm[i])[ofs+l*stride] +=
job->almtmp[job->ntrans*job->nalm*l+i];
else
for (int l=job->ainfo->mval[mi]; l<=lmax; ++l)
for (int i=0;i<job->ntrans*job->nalm;++i)
((fcmplx *)job->alm[i])[ofs+l*stride] +=
(fcmplx)(job->almtmp[job->ntrans*job->nalm*l+i]);
}
else
{
if (job->fde==DOUBLE)
for (int l=job->ainfo->mval[mi]; l<=lmax; ++l)
for (int i=0;i<job->ntrans*job->nalm;++i)
((dcmplx *)job->alm[i])[ofs+l*stride] +=
job->almtmp[job->ntrans*job->nalm*l+i]*job->norm_l[l];
else
for (int l=job->ainfo->mval[mi]; l<=lmax; ++l)
for (int i=0;i<job->ntrans*job->nalm;++i)
((fcmplx *)job->alm[i])[ofs+l*stride] +=
(fcmplx)(job->almtmp[job->ntrans*job->nalm*l+i]*job->norm_l[l]);
}
}
@ -600,6 +635,8 @@ static int sharp_oracle (sharp_jobtype type, int spin, int ntrans)
int nrings=(lmax+1)/4;
int ppring=1;
spin = (spin!=0) ? 2 : 0;
ptrdiff_t npix=(ptrdiff_t)nrings*ppring;
sharp_geom_info *tinfo;
sharp_make_gauss_geom_info (nrings, ppring, 1, ppring, &tinfo);