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 <complex.h>
00033 #include <math.h>
00034 #include <string.h>
00035 #include "sharp_vecsupport.h"
00036 #include "sharp_complex_hacks.h"
00037 #include "sharp_ylmgen_c.h"
00038 #include "sharp.h"
00039 #include "sharp_core.h"
00040 #include "c_utils.h"
00041
00042 typedef complex double dcmplx;
00043
00044
00045 #define MAXJOB_SPECIAL 2
00046
00047 #define XCONCAT2(a,b) a##_##b
00048 #define CONCAT2(a,b) XCONCAT2(a,b)
00049 #define XCONCAT3(a,b,c) a##_##b##_##c
00050 #define CONCAT3(a,b,c) XCONCAT3(a,b,c)
00051
00052 #define nvec 1
00053 #include "sharp_core_inchelper.c"
00054 #undef nvec
00055
00056 #define nvec 2
00057 #include "sharp_core_inchelper.c"
00058 #undef nvec
00059
00060 #define nvec 3
00061 #include "sharp_core_inchelper.c"
00062 #undef nvec
00063
00064 #define nvec 4
00065 #include "sharp_core_inchelper.c"
00066 #undef nvec
00067
00068 #define nvec 5
00069 #include "sharp_core_inchelper.c"
00070 #undef nvec
00071
00072 #define nvec 6
00073 #include "sharp_core_inchelper.c"
00074 #undef nvec
00075
00076 void inner_loop (sharp_job *job, const int *ispair,const double *cth,
00077 const double *sth, int llim, int ulim, sharp_Ylmgen_C *gen, int mi,
00078 const int *mlim)
00079 {
00080 int njobs=job->ntrans, nv=job->flags&SHARP_NVMAX;
00081 if (njobs<=MAXJOB_SPECIAL)
00082 {
00083 switch (njobs*16+nv)
00084 {
00085 #if ((MAXJOB_SPECIAL>=1)&&(SHARP_MAXTRANS>=1))
00086 case 0x11:
00087 CONCAT3(inner_loop,1,1) (job, ispair,cth,sth,llim,ulim,gen,mi,mlim);
00088 return;
00089 case 0x12:
00090 CONCAT3(inner_loop,2,1) (job, ispair,cth,sth,llim,ulim,gen,mi,mlim);
00091 return;
00092 case 0x13:
00093 CONCAT3(inner_loop,3,1) (job, ispair,cth,sth,llim,ulim,gen,mi,mlim);
00094 return;
00095 case 0x14:
00096 CONCAT3(inner_loop,4,1) (job, ispair,cth,sth,llim,ulim,gen,mi,mlim);
00097 return;
00098 case 0x15:
00099 CONCAT3(inner_loop,5,1) (job, ispair,cth,sth,llim,ulim,gen,mi,mlim);
00100 return;
00101 case 0x16:
00102 CONCAT3(inner_loop,6,1) (job, ispair,cth,sth,llim,ulim,gen,mi,mlim);
00103 return;
00104 #endif
00105 #if ((MAXJOB_SPECIAL>=2)&&(SHARP_MAXTRANS>=2))
00106 case 0x21:
00107 CONCAT3(inner_loop,1,2) (job, ispair,cth,sth,llim,ulim,gen,mi,mlim);
00108 return;
00109 case 0x22:
00110 CONCAT3(inner_loop,2,2) (job, ispair,cth,sth,llim,ulim,gen,mi,mlim);
00111 return;
00112 case 0x23:
00113 CONCAT3(inner_loop,3,2) (job, ispair,cth,sth,llim,ulim,gen,mi,mlim);
00114 return;
00115 case 0x24:
00116 CONCAT3(inner_loop,4,2) (job, ispair,cth,sth,llim,ulim,gen,mi,mlim);
00117 return;
00118 case 0x25:
00119 CONCAT3(inner_loop,5,2) (job, ispair,cth,sth,llim,ulim,gen,mi,mlim);
00120 return;
00121 case 0x26:
00122 CONCAT3(inner_loop,6,2) (job, ispair,cth,sth,llim,ulim,gen,mi,mlim);
00123 return;
00124 #endif
00125 #if ((MAXJOB_SPECIAL>=3)&&(SHARP_MAXTRANS>=3))
00126 case 0x31:
00127 CONCAT3(inner_loop,1,3) (job, ispair,cth,sth,llim,ulim,gen,mi,mlim);
00128 return;
00129 case 0x32:
00130 CONCAT3(inner_loop,2,3) (job, ispair,cth,sth,llim,ulim,gen,mi,mlim);
00131 return;
00132 case 0x33:
00133 CONCAT3(inner_loop,3,3) (job, ispair,cth,sth,llim,ulim,gen,mi,mlim);
00134 return;
00135 case 0x34:
00136 CONCAT3(inner_loop,4,3) (job, ispair,cth,sth,llim,ulim,gen,mi,mlim);
00137 return;
00138 case 0x35:
00139 CONCAT3(inner_loop,5,3) (job, ispair,cth,sth,llim,ulim,gen,mi,mlim);
00140 return;
00141 case 0x36:
00142 CONCAT3(inner_loop,6,3) (job, ispair,cth,sth,llim,ulim,gen,mi,mlim);
00143 return;
00144 #endif
00145 #if ((MAXJOB_SPECIAL>=4)&&(SHARP_MAXTRANS>=4))
00146 case 0x41:
00147 CONCAT3(inner_loop,1,4) (job, ispair,cth,sth,llim,ulim,gen,mi,mlim);
00148 return;
00149 case 0x42:
00150 CONCAT3(inner_loop,2,4) (job, ispair,cth,sth,llim,ulim,gen,mi,mlim);
00151 return;
00152 case 0x43:
00153 CONCAT3(inner_loop,3,4) (job, ispair,cth,sth,llim,ulim,gen,mi,mlim);
00154 return;
00155 case 0x44:
00156 CONCAT3(inner_loop,4,4) (job, ispair,cth,sth,llim,ulim,gen,mi,mlim);
00157 return;
00158 case 0x45:
00159 CONCAT3(inner_loop,5,4) (job, ispair,cth,sth,llim,ulim,gen,mi,mlim);
00160 return;
00161 case 0x46:
00162 CONCAT3(inner_loop,6,4) (job, ispair,cth,sth,llim,ulim,gen,mi,mlim);
00163 return;
00164 #endif
00165 #if ((MAXJOB_SPECIAL>=5)&&(SHARP_MAXTRANS>=5))
00166 case 0x51:
00167 CONCAT3(inner_loop,1,5) (job, ispair,cth,sth,llim,ulim,gen,mi,mlim);
00168 return;
00169 case 0x52:
00170 CONCAT3(inner_loop,2,5) (job, ispair,cth,sth,llim,ulim,gen,mi,mlim);
00171 return;
00172 case 0x53:
00173 CONCAT3(inner_loop,3,5) (job, ispair,cth,sth,llim,ulim,gen,mi,mlim);
00174 return;
00175 case 0x54:
00176 CONCAT3(inner_loop,4,5) (job, ispair,cth,sth,llim,ulim,gen,mi,mlim);
00177 return;
00178 case 0x55:
00179 CONCAT3(inner_loop,5,5) (job, ispair,cth,sth,llim,ulim,gen,mi,mlim);
00180 return;
00181 case 0x56:
00182 CONCAT3(inner_loop,6,5) (job, ispair,cth,sth,llim,ulim,gen,mi,mlim);
00183 return;
00184 #endif
00185 #if ((MAXJOB_SPECIAL>=6)&&(SHARP_MAXTRANS>=6))
00186 case 0x61:
00187 CONCAT3(inner_loop,1,6) (job, ispair,cth,sth,llim,ulim,gen,mi,mlim);
00188 return;
00189 case 0x62:
00190 CONCAT3(inner_loop,2,6) (job, ispair,cth,sth,llim,ulim,gen,mi,mlim);
00191 return;
00192 case 0x63:
00193 CONCAT3(inner_loop,3,6) (job, ispair,cth,sth,llim,ulim,gen,mi,mlim);
00194 return;
00195 case 0x64:
00196 CONCAT3(inner_loop,4,6) (job, ispair,cth,sth,llim,ulim,gen,mi,mlim);
00197 return;
00198 case 0x65:
00199 CONCAT3(inner_loop,5,6) (job, ispair,cth,sth,llim,ulim,gen,mi,mlim);
00200 return;
00201 case 0x66:
00202 CONCAT3(inner_loop,6,6) (job, ispair,cth,sth,llim,ulim,gen,mi,mlim);
00203 return;
00204 #endif
00205 }
00206 }
00207 #if (SHARP_MAXTRANS>MAXJOB_SPECIAL)
00208 else
00209 {
00210 switch (nv)
00211 {
00212 case 1:
00213 CONCAT2(inner_loop,1)
00214 (job, ispair,cth,sth,llim,ulim,gen,mi,mlim,job->ntrans);
00215 return;
00216 case 2:
00217 CONCAT2(inner_loop,2)
00218 (job, ispair,cth,sth,llim,ulim,gen,mi,mlim,job->ntrans);
00219 return;
00220 case 3:
00221 CONCAT2(inner_loop,3)
00222 (job, ispair,cth,sth,llim,ulim,gen,mi,mlim,job->ntrans);
00223 return;
00224 case 4:
00225 CONCAT2(inner_loop,4)
00226 (job, ispair,cth,sth,llim,ulim,gen,mi,mlim,job->ntrans);
00227 return;
00228 case 5:
00229 CONCAT2(inner_loop,5)
00230 (job, ispair,cth,sth,llim,ulim,gen,mi,mlim,job->ntrans);
00231 return;
00232 case 6:
00233 CONCAT2(inner_loop,6)
00234 (job, ispair,cth,sth,llim,ulim,gen,mi,mlim,job->ntrans);
00235 return;
00236 }
00237 }
00238 #endif
00239 UTIL_FAIL("Incorrect vector parameters");
00240 }