00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032 #include "sharp_almhelpers.h"
00033 #include "c_utils.h"
00034
00035 void sharp_make_triangular_alm_info (int lmax, int mmax, int stride,
00036 sharp_alm_info **alm_info)
00037 {
00038 sharp_alm_info *info = RALLOC(sharp_alm_info,1);
00039 info->lmax = lmax;
00040 info->nm = mmax+1;
00041 info->mval = RALLOC(int,mmax+1);
00042 info->mvstart = RALLOC(ptrdiff_t,mmax+1);
00043 info->stride = stride;
00044 info->flags = 0;
00045 ptrdiff_t tval = 2*lmax+1;
00046 for (ptrdiff_t m=0; m<=mmax; ++m)
00047 {
00048 info->mval[m] = m;
00049 info->mvstart[m] = stride*((m*(tval-m))>>1);
00050 }
00051 *alm_info = info;
00052 }
00053
00054 void sharp_make_rectangular_alm_info (int lmax, int mmax, int stride,
00055 sharp_alm_info **alm_info)
00056 {
00057 sharp_alm_info *info = RALLOC(sharp_alm_info,1);
00058 info->lmax = lmax;
00059 info->nm = mmax+1;
00060 info->mval = RALLOC(int,mmax+1);
00061 info->mvstart = RALLOC(ptrdiff_t,mmax+1);
00062 info->stride = stride;
00063 info->flags = 0;
00064 for (ptrdiff_t m=0; m<=mmax; ++m)
00065 {
00066 info->mval[m] = m;
00067 info->mvstart[m] = stride*m*(lmax+1);
00068 }
00069 *alm_info = info;
00070 }