00001 #include<config.h>
00002 CPS_START_NAMESPACE
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 CPS_END_NAMESPACE
00020 #include <alg/w_all.h>
00021 #include <alg/w_gamma_mat.h>
00022 #ifdef PARALLEL
00023 #include <comms/sysfunc_cps.h>
00024 #endif
00025
00026 #include <util/error.h>
00027 #include <util/verbose.h>
00028 #include <util/vector.h>
00029 #include <util/qcdio.h>
00030 #include <comms/glb.h>
00031 #include <alg/alg_w_spect.h>
00032 CPS_START_NAMESPACE
00033
00034
00035
00036
00037
00038
00039
00040 #ifdef TIME_W_MESON
00041 CPS_END_NAMESPACE
00042 #include <time.h>
00043 CPS_START_NAMESPACE
00044 #endif
00045
00046
00047
00048
00049
00050 char * WspectMesons::d_class_name = "WspectMesons";
00051
00052
00053
00054
00055
00056 WspectMesons::WspectMesons(const IFloat *quark1, const IFloat *quark2,
00057 const WspectHyperRectangle &whr,
00058 const WspectMomenta & mom)
00059 : d_quark1_p(quark1),
00060 d_quark2_p(quark2),
00061 d_whr(whr),
00062 d_mom(mom)
00063 {
00064 Everything();
00065 }
00066
00067
00068
00069
00070
00071
00072
00073 WspectMesons::WspectMesons(const WspectQuark &quark1,
00074 const WspectQuark &quark2,
00075 const WspectHyperRectangle &whr,
00076 const WspectMomenta & mom)
00077 : d_quark1_p(quark1.Data()),
00078 d_quark2_p(quark2.Data()),
00079 d_whr(whr),
00080 d_mom(mom)
00081 {
00082 Everything();
00083 }
00084
00085
00086
00087
00088
00089
00090 void
00091 WspectMesons::Everything()
00092 {
00093 VRB.Func(d_class_name, ctor_str);
00094
00095 #ifdef TIME_W_MESON
00096 int beforeClock = clock();
00097 #endif
00098
00099
00100
00101 d_prop_dir = d_whr.dir();
00102 d_glb_walls = glb_sites[d_prop_dir];
00103 {
00104 const int *low = d_whr.lclMin();
00105 const int *high = d_whr.lclMax();
00106 for (int i = 0; i < LORENTZs; ++i) {
00107 d_lclMin[i] = low[i];
00108 d_lclMax[i] = high[i];
00109 }
00110 }
00111
00112
00113
00114
00115 d_num_mom = 1;
00116 if (d_mom)
00117 d_num_mom += d_mom.numNonZeroMom();
00118
00119
00120
00121
00122 d_size = d_num_mom * d_glb_walls * MESONs * COMPLEXs;
00123 {
00124 int fsize = d_size * sizeof(IFloat);
00125 d_data_p = (Complex *)smalloc(fsize);
00126 if (!d_data_p)
00127 ERR.Pointer(d_class_name, ctor_str, empty_str);
00128 VRB.Smalloc(d_class_name, ctor_str, empty_str, d_data_p, fsize);
00129
00130 IFloat *flt_p = (IFloat *)d_data_p;
00131 for (int i = 0; i < d_size; ++i)
00132 *flt_p++ = 0.0;
00133 }
00134
00135
00136
00137 {
00138 int lcl_walls = lcl_sites[d_prop_dir];
00139
00140 for (int lclW = 0; lclW < lcl_walls; ++lclW) {
00141 DiracAlgebra(lclW);
00142 }
00143
00144 }
00145
00146
00147 #ifdef DEBUG_W_MESON
00148 dumpData("before.gsum.meson.dat");
00149 #endif
00150
00151
00152
00153
00154 {
00155 Float *Flt_p = (Float *)d_data_p;
00156 for (int i = 0; i < d_size; ++i) glb_sum(Flt_p++);
00157 }
00158
00159
00160 #ifdef DEBUG_W_MESON
00161 dumpData("after.gsum.meson.Mdat");
00162 #endif
00163
00164
00165 #ifdef TIME_W_MESON
00166 int afterClock = clock();
00167 int clockTime = afterClock - beforeClock;
00168 printf("Meson %d = [%d - %d]", clockTime, afterClock, beforeClock);
00169 #endif
00170
00171 }
00172
00173
00174
00175
00176
00177
00178
00179 WspectMesons::~WspectMesons()
00180 {
00181 VRB.Func(d_class_name, dtor_str);
00182 VRB.Sfree(d_class_name, dtor_str, empty_str, d_data_p);
00183 sfree(d_data_p);
00184 }
00185
00186
00187
00188
00189
00190
00191
00192
00193
00194
00195
00196 void
00197 WspectMesons::ColorAlgebra(int D1x, int D2x, int D1y, int D2y,
00198 const int lcl[LORENTZs], Complex &result) const
00199 {
00200 int local_site_offset = siteOffset(lcl) * SPINORs;
00201
00202 const Complex *q1_p = (const Complex *)(d_quark1_p +
00203 WspectQuark::weightSrcDirac()*D1y +
00204 local_site_offset +
00205 (COMPLEXs*COLORs) * D1x);
00206 const Complex *q2_p = (const Complex *)(d_quark2_p +
00207 WspectQuark::weightSrcDirac()*D2y +
00208 local_site_offset +
00209 (COMPLEXs*COLORs) * D2x);
00210
00211 int off_Cy_in_complex = WspectQuark::weightSrcColor() / COMPLEXs;
00212
00213 for (int Cy = 0; Cy < COLORs; Cy++) {
00214 result += q1_p[0] * conj(q2_p[0]);
00215 result += q1_p[1] * conj(q2_p[1]);
00216 result += q1_p[2] * conj(q2_p[2]);
00217 q1_p += off_Cy_in_complex;
00218 q2_p += off_Cy_in_complex;
00219 }
00220 }
00221
00222
00223
00224
00225
00226
00227
00228 void
00229 WspectMesons::MomProject(int D1x, int D2x, int D1y, int D2y, int lclW)
00230 {
00231 VRB.Func(d_class_name, "MomProject");
00232
00233
00234
00235 d_lclMin[d_prop_dir] = d_lclMax[d_prop_dir] = lclW;
00236
00237
00238
00239
00240 int lcl[LORENTZs];
00241 for (lcl[0] = d_lclMin[0]; lcl[0] <= d_lclMax[0]; lcl[0]++) {
00242 for (lcl[1] = d_lclMin[1]; lcl[1] <= d_lclMax[1]; lcl[1]++) {
00243 for (lcl[2] = d_lclMin[2]; lcl[2] <= d_lclMax[2]; lcl[2]++) {
00244 for (lcl[3] = d_lclMin[3]; lcl[3] <= d_lclMax[3]; lcl[3]++) {
00245
00246 Complex colorSum(0.0, 0.0);
00247 ColorAlgebra(D1x, D2x, D1y, D2y, lcl, colorSum);
00248
00249
00250 d_mom_proj[0][D1x][D1y][D2x][D2y] += colorSum;
00251
00252
00253 if (d_mom) {
00254 const Complex *mom = d_mom[lcl];
00255 for (int iMom = 1; iMom < d_num_mom; ++iMom) {
00256 d_mom_proj[iMom][D1x][D1y][D2x][D2y] += mom[iMom-1] * colorSum;
00257 }
00258 }
00259 }
00260 }
00261 }
00262 }
00263 }
00264
00265
00266
00267
00268 void WspectMesons::traceDirac(int sign, IFloat *gam1, IFloat *gam2,int mom,
00269 Complex *result_p){
00270 char *fname="traceDirac";
00271
00272
00273
00274
00275
00276
00277 if(sign!=1 && sign !=-1) {
00278 ERR.General(d_class_name, fname,"sign must be 1 or -1");
00279 }
00280 if(DIRACs!=4) ERR.General(d_class_name,fname,"DIRACs must be 4!");
00281
00282 if(gam1==0 || gam2==0 || result_p==0) {
00283 ERR.General(d_class_name,fname,"null pointer passed");
00284 }
00285
00286 for(int d1=0;d1<DIRACs;d1++){
00287 for(int d2=0;d2<DIRACs;d2++){
00288 for(int d3=0;d3<DIRACs;d3++){
00289 for(int d4=0;d4<DIRACs;d4++){
00290
00291 Complex gam1_element(gam1[d1*4*2+d2*2],gam1[d1*4*2+d2*2+1]);
00292 Complex gam2_element(gam2[d3*4*2+d4*2],gam2[d3*4*2+d4*2+1]);
00293
00294
00295
00296
00297
00298 if(sign==1){
00299 *(result_p) +=
00300 gam1_element*gam2_element*d_mom_proj[mom][d2][d3][d1][d4];
00301 }else{
00302 *(result_p) -=
00303 gam1_element*gam2_element*d_mom_proj[mom][d2][d3][d1][d4];
00304 }
00305 }
00306 }
00307 }
00308 }
00309
00310
00311 }
00312
00313
00314
00315
00316
00317 void
00318 WspectMesons::DiracAlgebra(int lclW)
00319 {
00320 VRB.Func(d_class_name, "DiracAlgebra");
00321
00322
00323
00324
00325
00326
00327
00328
00329 {
00330
00331 IFloat *p = (IFloat *)d_mom_proj;
00332 for (int i = 0; i < sizeof(d_mom_proj)/sizeof(IFloat); ++i)
00333 *p++ = 0.0;
00334
00335
00336 int D1x, D2x, D1y, D2y;
00337 for (D1x = 0; D1x < DIRACs; D1x++) {
00338 for (D1y = 0; D1y < DIRACs; D1y++) {
00339 for (D2x = 0; D2x < DIRACs; D2x++) {
00340 if (D1x==D1y)
00341 D2y=D2x;
00342 else if (D1x==D2x)
00343 D2y=D1y;
00344 else if (D1y==D2x)
00345 D2y=D1x;
00346 else {
00347 for (D2y = 0; D2y == D1x || D2y == D1y || D2y == D2x; ++D2y);
00348 }
00349 MomProject(D1x, D2x, D1y, D2y, lclW);
00350 }
00351 }
00352 }
00353 }
00354
00355
00356 #ifdef DEBUG_W_MESON
00357 {
00358 static int calls = 0; calls++;
00359 FILE *fp = Fopen("meson.dirac.dat", "a");
00360 Fprintf(fp, "Call %d\n", calls);
00361 for (int i0 = 0; i0 < DIRACs; ++i0) {
00362 for (int i1 = 0; i1 < DIRACs; ++i1) {
00363 for (int i2 = 0; i2 < DIRACs; ++i2) {
00364 for (int i3 = 0; i3 < DIRACs; ++i3) {
00365 for (int iMom = 0; iMom < d_num_mom; ++iMom) {
00366 const Complex & tmp = d_mom_proj[iMom][i0][i1][i2][i3];
00367 Fprintf(fp, "mom %d %d %d %d %d [%g %g]\n",
00368 iMom, i0, i1, i2, i3, tmp.real(), tmp.imag());
00369 }
00370 }
00371 }
00372 }
00373 }
00374 Fclose(fp);
00375 }
00376 #endif
00377
00378
00379
00380
00381 Complex *mesonsAddr = d_data_p + (lclW + lcl2glb_offset[d_prop_dir]
00382 ) * MESONs;
00383
00384
00385
00386
00387
00388
00389 int numComplexToNextMom = (d_glb_walls-1) * MESONs + 1;
00390
00391
00392
00393 for (int iMom = 0; iMom < d_num_mom; ++iMom) {
00394
00395
00396
00397 *mesonsAddr = d_mom_proj[iMom][0][0][0][0];
00398 *mesonsAddr += d_mom_proj[iMom][0][1][0][1];
00399 *mesonsAddr -= d_mom_proj[iMom][0][2][0][2];
00400 *mesonsAddr -= d_mom_proj[iMom][0][3][0][3];
00401 *mesonsAddr += d_mom_proj[iMom][1][0][1][0];
00402 *mesonsAddr += d_mom_proj[iMom][1][1][1][1];
00403 *mesonsAddr -= d_mom_proj[iMom][1][2][1][2];
00404 *mesonsAddr -= d_mom_proj[iMom][1][3][1][3];
00405 *mesonsAddr -= d_mom_proj[iMom][2][0][2][0];
00406 *mesonsAddr -= d_mom_proj[iMom][2][1][2][1];
00407 *mesonsAddr += d_mom_proj[iMom][2][2][2][2];
00408 *mesonsAddr += d_mom_proj[iMom][2][3][2][3];
00409 *mesonsAddr -= d_mom_proj[iMom][3][0][3][0];
00410 *mesonsAddr -= d_mom_proj[iMom][3][1][3][1];
00411 *mesonsAddr += d_mom_proj[iMom][3][2][3][2];
00412 *mesonsAddr++ += d_mom_proj[iMom][3][3][3][3];
00413
00414
00415
00416
00417 *mesonsAddr = d_mom_proj[iMom][0][0][3][3];
00418 *mesonsAddr += d_mom_proj[iMom][0][1][3][2];
00419 *mesonsAddr += d_mom_proj[iMom][0][2][3][1];
00420 *mesonsAddr += d_mom_proj[iMom][0][3][3][0];
00421 *mesonsAddr += d_mom_proj[iMom][1][0][2][3];
00422 *mesonsAddr += d_mom_proj[iMom][1][1][2][2];
00423 *mesonsAddr += d_mom_proj[iMom][1][2][2][1];
00424 *mesonsAddr += d_mom_proj[iMom][1][3][2][0];
00425 *mesonsAddr += d_mom_proj[iMom][2][0][1][3];
00426 *mesonsAddr += d_mom_proj[iMom][2][1][1][2];
00427 *mesonsAddr += d_mom_proj[iMom][2][2][1][1];
00428 *mesonsAddr += d_mom_proj[iMom][2][3][1][0];
00429 *mesonsAddr += d_mom_proj[iMom][3][0][0][3];
00430 *mesonsAddr += d_mom_proj[iMom][3][1][0][2];
00431 *mesonsAddr += d_mom_proj[iMom][3][2][0][1];
00432 *mesonsAddr++ += d_mom_proj[iMom][3][3][0][0];
00433
00434
00435
00436
00437
00438 *mesonsAddr = d_mom_proj[iMom][0][0][3][3];
00439 *mesonsAddr -= d_mom_proj[iMom][0][1][3][2];
00440 *mesonsAddr += d_mom_proj[iMom][0][2][3][1];
00441 *mesonsAddr -= d_mom_proj[iMom][0][3][3][0];
00442 *mesonsAddr -= d_mom_proj[iMom][1][0][2][3];
00443 *mesonsAddr += d_mom_proj[iMom][1][1][2][2];
00444 *mesonsAddr -= d_mom_proj[iMom][1][2][2][1];
00445 *mesonsAddr += d_mom_proj[iMom][1][3][2][0];
00446 *mesonsAddr += d_mom_proj[iMom][2][0][1][3];
00447 *mesonsAddr -= d_mom_proj[iMom][2][1][1][2];
00448 *mesonsAddr += d_mom_proj[iMom][2][2][1][1];
00449 *mesonsAddr -= d_mom_proj[iMom][2][3][1][0];
00450 *mesonsAddr -= d_mom_proj[iMom][3][0][0][3];
00451 *mesonsAddr += d_mom_proj[iMom][3][1][0][2];
00452 *mesonsAddr -= d_mom_proj[iMom][3][2][0][1];
00453 *mesonsAddr++ += d_mom_proj[iMom][3][3][0][0];
00454
00455
00456
00457
00458
00459
00460 *mesonsAddr = d_mom_proj[iMom][0][1][0][1];
00461 *mesonsAddr -= d_mom_proj[iMom][0][0][0][0];
00462 *mesonsAddr += d_mom_proj[iMom][0][2][0][2];
00463 *mesonsAddr -= d_mom_proj[iMom][0][3][0][3];
00464 *mesonsAddr += d_mom_proj[iMom][1][0][1][0];
00465 *mesonsAddr -= d_mom_proj[iMom][1][1][1][1];
00466 *mesonsAddr -= d_mom_proj[iMom][1][2][1][2];
00467 *mesonsAddr += d_mom_proj[iMom][1][3][1][3];
00468 *mesonsAddr += d_mom_proj[iMom][2][0][2][0];
00469 *mesonsAddr -= d_mom_proj[iMom][2][1][2][1];
00470 *mesonsAddr -= d_mom_proj[iMom][2][2][2][2];
00471 *mesonsAddr += d_mom_proj[iMom][2][3][2][3];
00472 *mesonsAddr -= d_mom_proj[iMom][3][0][3][0];
00473 *mesonsAddr += d_mom_proj[iMom][3][1][3][1];
00474 *mesonsAddr += d_mom_proj[iMom][3][2][3][2];
00475 *mesonsAddr++ -= d_mom_proj[iMom][3][3][3][3];
00476
00477
00478
00479
00480
00481 *mesonsAddr = d_mom_proj[iMom][0][0][2][2];
00482 *mesonsAddr -= d_mom_proj[iMom][0][1][2][3];
00483 *mesonsAddr += d_mom_proj[iMom][0][2][2][0];
00484 *mesonsAddr -= d_mom_proj[iMom][0][3][2][1];
00485 *mesonsAddr -= d_mom_proj[iMom][1][0][3][2];
00486 *mesonsAddr += d_mom_proj[iMom][1][1][3][3];
00487 *mesonsAddr -= d_mom_proj[iMom][1][2][3][0];
00488 *mesonsAddr += d_mom_proj[iMom][1][3][3][1];
00489 *mesonsAddr += d_mom_proj[iMom][2][0][0][2];
00490 *mesonsAddr -= d_mom_proj[iMom][2][1][0][3];
00491 *mesonsAddr += d_mom_proj[iMom][2][2][0][0];
00492 *mesonsAddr -= d_mom_proj[iMom][2][3][0][1];
00493 *mesonsAddr -= d_mom_proj[iMom][3][0][1][2];
00494 *mesonsAddr += d_mom_proj[iMom][3][1][1][3];
00495 *mesonsAddr -= d_mom_proj[iMom][3][2][1][0];
00496 *mesonsAddr++ += d_mom_proj[iMom][3][3][1][1];
00497
00498
00499
00500
00501
00502 *mesonsAddr = d_mom_proj[iMom][0][1][1][0];
00503 *mesonsAddr -= d_mom_proj[iMom][0][0][1][1];
00504 *mesonsAddr += d_mom_proj[iMom][0][2][1][3];
00505 *mesonsAddr -= d_mom_proj[iMom][0][3][1][2];
00506 *mesonsAddr += d_mom_proj[iMom][1][0][0][1];
00507 *mesonsAddr -= d_mom_proj[iMom][1][1][0][0];
00508 *mesonsAddr -= d_mom_proj[iMom][1][2][0][3];
00509 *mesonsAddr += d_mom_proj[iMom][1][3][0][2];
00510 *mesonsAddr += d_mom_proj[iMom][2][0][3][1];
00511 *mesonsAddr -= d_mom_proj[iMom][2][1][3][0];
00512 *mesonsAddr -= d_mom_proj[iMom][2][2][3][3];
00513 *mesonsAddr += d_mom_proj[iMom][2][3][3][2];
00514 *mesonsAddr -= d_mom_proj[iMom][3][0][2][1];
00515 *mesonsAddr += d_mom_proj[iMom][3][1][2][0];
00516 *mesonsAddr += d_mom_proj[iMom][3][2][2][3];
00517 *mesonsAddr++ -= d_mom_proj[iMom][3][3][2][2];
00518
00519
00520
00521
00522
00523 *mesonsAddr = d_mom_proj[iMom][0][2][1][3];
00524 *mesonsAddr -= d_mom_proj[iMom][0][0][1][1];
00525 *mesonsAddr -= d_mom_proj[iMom][0][1][1][0];
00526 *mesonsAddr += d_mom_proj[iMom][0][3][1][2];
00527 *mesonsAddr -= d_mom_proj[iMom][1][0][0][1];
00528 *mesonsAddr -= d_mom_proj[iMom][1][1][0][0];
00529 *mesonsAddr += d_mom_proj[iMom][1][2][0][3];
00530 *mesonsAddr += d_mom_proj[iMom][1][3][0][2];
00531 *mesonsAddr += d_mom_proj[iMom][2][0][3][1];
00532 *mesonsAddr += d_mom_proj[iMom][2][1][3][0];
00533 *mesonsAddr -= d_mom_proj[iMom][2][2][3][3];
00534 *mesonsAddr -= d_mom_proj[iMom][2][3][3][2];
00535 *mesonsAddr += d_mom_proj[iMom][3][0][2][1];
00536 *mesonsAddr += d_mom_proj[iMom][3][1][2][0];
00537 *mesonsAddr -= d_mom_proj[iMom][3][2][2][3];
00538 *mesonsAddr++ -= d_mom_proj[iMom][3][3][2][2];
00539
00540
00541
00542
00543
00544 *mesonsAddr = 0;
00545 *mesonsAddr -= d_mom_proj[iMom][0][0][2][2];
00546 *mesonsAddr -= d_mom_proj[iMom][0][1][2][3];
00547 *mesonsAddr -= d_mom_proj[iMom][0][2][2][0];
00548 *mesonsAddr -= d_mom_proj[iMom][0][3][2][1];
00549 *mesonsAddr -= d_mom_proj[iMom][1][0][3][2];
00550 *mesonsAddr -= d_mom_proj[iMom][1][1][3][3];
00551 *mesonsAddr -= d_mom_proj[iMom][1][2][3][0];
00552 *mesonsAddr -= d_mom_proj[iMom][1][3][3][1];
00553 *mesonsAddr -= d_mom_proj[iMom][2][0][0][2];
00554 *mesonsAddr -= d_mom_proj[iMom][2][1][0][3];
00555 *mesonsAddr -= d_mom_proj[iMom][2][2][0][0];
00556 *mesonsAddr -= d_mom_proj[iMom][2][3][0][1];
00557 *mesonsAddr -= d_mom_proj[iMom][3][0][1][2];
00558 *mesonsAddr -= d_mom_proj[iMom][3][1][1][3];
00559 *mesonsAddr -= d_mom_proj[iMom][3][2][1][0];
00560 *mesonsAddr++ -= d_mom_proj[iMom][3][3][1][1];
00561
00562
00563
00564
00565
00566 *mesonsAddr = d_mom_proj[iMom][0][0][2][2];
00567 *mesonsAddr += d_mom_proj[iMom][0][1][2][3];
00568 *mesonsAddr -= d_mom_proj[iMom][0][2][2][0];
00569 *mesonsAddr -= d_mom_proj[iMom][0][3][2][1];
00570 *mesonsAddr += d_mom_proj[iMom][1][0][3][2];
00571 *mesonsAddr += d_mom_proj[iMom][1][1][3][3];
00572 *mesonsAddr -= d_mom_proj[iMom][1][2][3][0];
00573 *mesonsAddr -= d_mom_proj[iMom][1][3][3][1];
00574 *mesonsAddr -= d_mom_proj[iMom][2][0][0][2];
00575 *mesonsAddr -= d_mom_proj[iMom][2][1][0][3];
00576 *mesonsAddr += d_mom_proj[iMom][2][2][0][0];
00577 *mesonsAddr += d_mom_proj[iMom][2][3][0][1];
00578 *mesonsAddr -= d_mom_proj[iMom][3][0][1][2];
00579 *mesonsAddr -= d_mom_proj[iMom][3][1][1][3];
00580 *mesonsAddr += d_mom_proj[iMom][3][2][1][0];
00581 *mesonsAddr++ += d_mom_proj[iMom][3][3][1][1];
00582
00583
00584
00585
00586
00587 *mesonsAddr = 0;
00588 *mesonsAddr -= d_mom_proj[iMom][0][0][1][1];
00589 *mesonsAddr -= d_mom_proj[iMom][0][1][1][0];
00590 *mesonsAddr -= d_mom_proj[iMom][0][2][1][3];
00591 *mesonsAddr -= d_mom_proj[iMom][0][3][1][2];
00592 *mesonsAddr -= d_mom_proj[iMom][1][0][0][1];
00593 *mesonsAddr -= d_mom_proj[iMom][1][1][0][0];
00594 *mesonsAddr -= d_mom_proj[iMom][1][2][0][3];
00595 *mesonsAddr -= d_mom_proj[iMom][1][3][0][2];
00596 *mesonsAddr -= d_mom_proj[iMom][2][0][3][1];
00597 *mesonsAddr -= d_mom_proj[iMom][2][1][3][0];
00598 *mesonsAddr -= d_mom_proj[iMom][2][2][3][3];
00599 *mesonsAddr -= d_mom_proj[iMom][2][3][3][2];
00600 *mesonsAddr -= d_mom_proj[iMom][3][0][2][1];
00601 *mesonsAddr -= d_mom_proj[iMom][3][1][2][0];
00602 *mesonsAddr -= d_mom_proj[iMom][3][2][2][3];
00603 *mesonsAddr++ -= d_mom_proj[iMom][3][3][2][2];
00604
00605
00606
00607
00608
00609 *mesonsAddr = d_mom_proj[iMom][0][1][1][0];
00610 *mesonsAddr -= d_mom_proj[iMom][0][0][1][1];
00611 *mesonsAddr -= d_mom_proj[iMom][0][2][1][3];
00612 *mesonsAddr += d_mom_proj[iMom][0][3][1][2];
00613 *mesonsAddr += d_mom_proj[iMom][1][0][0][1];
00614 *mesonsAddr -= d_mom_proj[iMom][1][1][0][0];
00615 *mesonsAddr += d_mom_proj[iMom][1][2][0][3];
00616 *mesonsAddr -= d_mom_proj[iMom][1][3][0][2];
00617 *mesonsAddr -= d_mom_proj[iMom][2][0][3][1];
00618 *mesonsAddr += d_mom_proj[iMom][2][1][3][0];
00619 *mesonsAddr -= d_mom_proj[iMom][2][2][3][3];
00620 *mesonsAddr += d_mom_proj[iMom][2][3][3][2];
00621 *mesonsAddr += d_mom_proj[iMom][3][0][2][1];
00622 *mesonsAddr -= d_mom_proj[iMom][3][1][2][0];
00623 *mesonsAddr += d_mom_proj[iMom][3][2][2][3];
00624 *mesonsAddr++ -= d_mom_proj[iMom][3][3][2][2];
00625
00626
00627
00628
00629
00630 *mesonsAddr = d_mom_proj[iMom][0][1][2][3];
00631 *mesonsAddr -= d_mom_proj[iMom][0][0][2][2];
00632 *mesonsAddr += d_mom_proj[iMom][0][2][2][0];
00633 *mesonsAddr -= d_mom_proj[iMom][0][3][2][1];
00634 *mesonsAddr += d_mom_proj[iMom][1][0][3][2];
00635 *mesonsAddr -= d_mom_proj[iMom][1][1][3][3];
00636 *mesonsAddr -= d_mom_proj[iMom][1][2][3][0];
00637 *mesonsAddr += d_mom_proj[iMom][1][3][3][1];
00638 *mesonsAddr += d_mom_proj[iMom][2][0][0][2];
00639 *mesonsAddr -= d_mom_proj[iMom][2][1][0][3];
00640 *mesonsAddr -= d_mom_proj[iMom][2][2][0][0];
00641 *mesonsAddr += d_mom_proj[iMom][2][3][0][1];
00642 *mesonsAddr -= d_mom_proj[iMom][3][0][1][2];
00643 *mesonsAddr += d_mom_proj[iMom][3][1][1][3];
00644 *mesonsAddr += d_mom_proj[iMom][3][2][1][0];
00645 *mesonsAddr++ -= d_mom_proj[iMom][3][3][1][1];
00646
00647
00648
00649
00650
00651 *mesonsAddr = d_mom_proj[iMom][0][1][0][1];
00652 *mesonsAddr -= d_mom_proj[iMom][0][0][0][0];
00653 *mesonsAddr -= d_mom_proj[iMom][0][2][0][2];
00654 *mesonsAddr += d_mom_proj[iMom][0][3][0][3];
00655 *mesonsAddr += d_mom_proj[iMom][1][0][1][0];
00656 *mesonsAddr -= d_mom_proj[iMom][1][1][1][1];
00657 *mesonsAddr += d_mom_proj[iMom][1][2][1][2];
00658 *mesonsAddr -= d_mom_proj[iMom][1][3][1][3];
00659 *mesonsAddr -= d_mom_proj[iMom][2][0][2][0];
00660 *mesonsAddr += d_mom_proj[iMom][2][1][2][1];
00661 *mesonsAddr -= d_mom_proj[iMom][2][2][2][2];
00662 *mesonsAddr += d_mom_proj[iMom][2][3][2][3];
00663 *mesonsAddr += d_mom_proj[iMom][3][0][3][0];
00664 *mesonsAddr -= d_mom_proj[iMom][3][1][3][1];
00665 *mesonsAddr += d_mom_proj[iMom][3][2][3][2];
00666 *mesonsAddr++ -= d_mom_proj[iMom][3][3][3][3];
00667
00668
00669
00670
00671
00672 *mesonsAddr = d_mom_proj[iMom][0][1][3][2];
00673 *mesonsAddr -= d_mom_proj[iMom][0][0][3][3];
00674 *mesonsAddr += d_mom_proj[iMom][0][2][3][1];
00675 *mesonsAddr -= d_mom_proj[iMom][0][3][3][0];
00676 *mesonsAddr += d_mom_proj[iMom][1][0][2][3];
00677 *mesonsAddr -= d_mom_proj[iMom][1][1][2][2];
00678 *mesonsAddr -= d_mom_proj[iMom][1][2][2][1];
00679 *mesonsAddr += d_mom_proj[iMom][1][3][2][0];
00680 *mesonsAddr += d_mom_proj[iMom][2][0][1][3];
00681 *mesonsAddr -= d_mom_proj[iMom][2][1][1][2];
00682 *mesonsAddr -= d_mom_proj[iMom][2][2][1][1];
00683 *mesonsAddr += d_mom_proj[iMom][2][3][1][0];
00684 *mesonsAddr -= d_mom_proj[iMom][3][0][0][3];
00685 *mesonsAddr += d_mom_proj[iMom][3][1][0][2];
00686 *mesonsAddr += d_mom_proj[iMom][3][2][0][1];
00687 *mesonsAddr++ -= d_mom_proj[iMom][3][3][0][0];
00688
00689
00690
00691
00692
00693 *mesonsAddr = d_mom_proj[iMom][0][2][3][1];
00694 *mesonsAddr -= d_mom_proj[iMom][0][0][3][3];
00695 *mesonsAddr -= d_mom_proj[iMom][0][1][3][2];
00696 *mesonsAddr += d_mom_proj[iMom][0][3][3][0];
00697 *mesonsAddr -= d_mom_proj[iMom][1][0][2][3];
00698 *mesonsAddr -= d_mom_proj[iMom][1][1][2][2];
00699 *mesonsAddr += d_mom_proj[iMom][1][2][2][1];
00700 *mesonsAddr += d_mom_proj[iMom][1][3][2][0];
00701 *mesonsAddr += d_mom_proj[iMom][2][0][1][3];
00702 *mesonsAddr += d_mom_proj[iMom][2][1][1][2];
00703 *mesonsAddr -= d_mom_proj[iMom][2][2][1][1];
00704 *mesonsAddr -= d_mom_proj[iMom][2][3][1][0];
00705 *mesonsAddr += d_mom_proj[iMom][3][0][0][3];
00706 *mesonsAddr += d_mom_proj[iMom][3][1][0][2];
00707 *mesonsAddr -= d_mom_proj[iMom][3][2][0][1];
00708 *mesonsAddr++ -= d_mom_proj[iMom][3][3][0][0];
00709
00710
00711
00712
00713
00714 *mesonsAddr = d_mom_proj[iMom][0][0][0][0];
00715 *mesonsAddr += d_mom_proj[iMom][0][1][0][1];
00716 *mesonsAddr += d_mom_proj[iMom][0][2][0][2];
00717 *mesonsAddr += d_mom_proj[iMom][0][3][0][3];
00718 *mesonsAddr += d_mom_proj[iMom][1][0][1][0];
00719 *mesonsAddr += d_mom_proj[iMom][1][1][1][1];
00720 *mesonsAddr += d_mom_proj[iMom][1][2][1][2];
00721 *mesonsAddr += d_mom_proj[iMom][1][3][1][3];
00722 *mesonsAddr += d_mom_proj[iMom][2][0][2][0];
00723 *mesonsAddr += d_mom_proj[iMom][2][1][2][1];
00724 *mesonsAddr += d_mom_proj[iMom][2][2][2][2];
00725 *mesonsAddr += d_mom_proj[iMom][2][3][2][3];
00726 *mesonsAddr += d_mom_proj[iMom][3][0][3][0];
00727 *mesonsAddr += d_mom_proj[iMom][3][1][3][1];
00728 *mesonsAddr += d_mom_proj[iMom][3][2][3][2];
00729 *mesonsAddr += d_mom_proj[iMom][3][3][3][3];
00730
00731
00732 mesonsAddr += numComplexToNextMom;
00733 }
00734 }
00735
00736
00737
00738
00739
00740 void
00741 WspectMesons::print(WspectOutput *w_spect_output) const
00742 {
00743
00744 #if TARGET==cpsMPI
00745 using MPISCU::fprintf;
00746 #endif
00747 char *fname = "print";
00748 VRB.Func(d_class_name, fname);
00749
00750
00751 enum {a0, a0_prime, a1, b1,
00752 pion, pion_prime, rho, rho_prime,
00753 NUM_DATAFILEs,
00754 a1_x, a1_y, a1_z,
00755 b1_x, b1_y, b1_z,
00756 rho_x, rho_y, rho_z,
00757 rho_x_prime, rho_y_prime, rho_z_prime,
00758 NUM_MAP
00759 };
00760
00761
00762
00763
00764 int map[NUM_MAP];
00765 {
00766 int time = d_whr.dir();
00767 int offset_time = (1 << time);
00768
00769 int space = 0;
00770 for (int l = 0; l < LORENTZs; ++l) {
00771 if (l != time) {
00772 int offset_space = (1<<l);
00773 map[rho_x+space] = offset_space;
00774 map[rho_x_prime+space] = offset_space + offset_time;
00775 map[b1_x+space] = (MESONs-1) - offset_space - offset_time;
00776 map[a1_x+space] = (MESONs-1) - offset_space;
00777 ++space;
00778 }
00779 }
00780
00781 map[pion] = (MESONs-1);
00782 map[pion_prime] = (MESONs-1) - offset_time;
00783 map[a0] = 0;
00784 map[a0_prime] = offset_time;
00785 map[a1] = map[a1_x];
00786 map[b1] = map[b1_x];
00787 map[rho] = map[rho_x];
00788 map[rho_prime] = map[rho_x_prime];
00789 }
00790
00791 char *meson_names[16];
00792 meson_names[0] = w_spect_output->meson_name00;
00793 meson_names[1] = w_spect_output->meson_name01;
00794 meson_names[2] = w_spect_output->meson_name02;
00795 meson_names[3] = w_spect_output->meson_name03;
00796 meson_names[4] = w_spect_output->meson_name04;
00797 meson_names[5] = w_spect_output->meson_name05;
00798 meson_names[6] = w_spect_output->meson_name06;
00799 meson_names[7] = w_spect_output->meson_name07;
00800 meson_names[8] = w_spect_output->meson_name08;
00801 meson_names[9] = w_spect_output->meson_name09;
00802 meson_names[10] = w_spect_output->meson_name10;
00803 meson_names[11] = w_spect_output->meson_name11;
00804 meson_names[12] = w_spect_output->meson_name12;
00805 meson_names[13] = w_spect_output->meson_name13;
00806 meson_names[14] = w_spect_output->meson_name14;
00807 meson_names[15] = w_spect_output->meson_name15;
00808
00809
00810
00811
00812
00813
00814
00815 #if 0
00816 char *meson_names[] =
00817 {
00818 #if 1
00819 "Scalar.dat" ,
00820 "Vector_x.dat" ,
00821 "Vector_y.dat" ,
00822 "Tensor_xy.dat" ,
00823 "Vector_z.dat" ,
00824 "Tensor_xz.dat",
00825 "Tensor_yz.dat",
00826 "PV_t.dat",
00827 "Vector_t.dat",
00828 "Tensor_xt.dat",
00829 "Tensor_yt.dat",
00830 "PV_z.dat" ,
00831 "Tensor_zt.dat" ,
00832 "PV_y.dat" ,
00833 "PV_x.dat" ,
00834 "PS.dat"
00835 #else
00836 "a0.dat" ,
00837 "rho_x.dat" ,
00838 "rho_y.dat" ,
00839 "b1_z.dat" ,
00840 "rho_z.dat" ,
00841 "b1_y.dat",
00842 "b1_x.dat",
00843 "pion_prime.dat",
00844 "a0_prime.dat",
00845 "rho_x_prime.dat",
00846 "rho_y_prime.dat",
00847 "a1_z.dat" ,
00848 "rho_z_prime.dat" ,
00849 "a1_y.dat" ,
00850 "a1_x.dat" ,
00851 "pion.dat"
00852 #endif
00853
00854 };
00855 #endif
00856
00857 for(int imap= 0 ; imap < NUM_MAP ; ++imap)
00858 { map[imap] = imap ; }
00859
00860
00861
00862
00863
00864
00865 #ifdef GGGGGGGGGGGGGG
00866
00867
00868
00869 {
00870 int size_in_complex = d_size / COMPLEXs;
00871 int x1 = map[a1_x]; int y1 = map[a1_y]; int z1 = map[a1_z];
00872 int x2 = map[b1_x]; int y2 = map[b1_y]; int z2 = map[b1_z];
00873 int x3 = map[rho_x]; int y3 = map[rho_y]; int z3 = map[rho_z];
00874 int x4 = map[rho_x_prime];
00875 int y4 = map[rho_y_prime];
00876 int z4 = map[rho_z_prime];
00877
00878 for (int i = 0; i < size_in_complex; i += MESONs) {
00879 d_data_p[i+x1] += d_data_p[i+y1] += d_data_p[i+z1]; d_data_p[i+x1] /= 3;
00880 d_data_p[i+x2] += d_data_p[i+y2] += d_data_p[i+z2]; d_data_p[i+x2] /= 3;
00881 d_data_p[i+x3] += d_data_p[i+y3] += d_data_p[i+z3]; d_data_p[i+x3] /= 3;
00882 d_data_p[i+x4] += d_data_p[i+y4] += d_data_p[i+z4]; d_data_p[i+x4] /= 3;
00883 }
00884 }
00885 #endif
00886
00887
00888
00889 FILE *fp;
00890 for (int meson = 0; meson < 16 ; ++meson)
00891 {
00892
00893 if ( !meson_names[meson] || !(fp = Fopen(meson_names[meson], "a")) ) {
00894 ERR.FileA(d_class_name,fname, meson_names[meson]);
00895 }
00896
00897 printf("Writing data to file: %s\n",meson_names[meson]);
00898 for (int wall = 0; wall < d_glb_walls; ++wall) {
00899 for (int mom = 0; mom < d_num_mom; ++mom) {
00900 int offset = mom * d_glb_walls * MESONs + map[meson];
00901 Complex tmp = d_data_p[offset + MESONs*
00902 ((d_whr.glbCoord() + wall)%d_glb_walls)];
00903
00904 Fprintf(fp, "%d %d %d %.10e\n",
00905 AlgWspect::GetCounter(), wall, mom, tmp.real());
00906 }
00907 }
00908 Fclose(fp);
00909
00910 }
00911
00912
00913
00914 }
00915
00916
00917
00918
00919
00920 void
00921 WspectMesons::print_mp(char *filename) const
00922 {
00923
00924 #if TARGET==cpsMPI
00925 using MPISCU::fprintf;
00926 #endif
00927 char *fname = "print_mp";
00928 VRB.Func(d_class_name, fname);
00929
00930
00931
00932
00933 FILE *fp;
00934
00935 if ( filename != 0 ) {
00936 if ( !(fp = Fopen(filename, "a")))
00937 ERR.FileA(d_class_name,fname, filename);
00938
00939 for (int wall = 0; wall < d_glb_walls; ++wall) {
00940 for (int mom = 0; mom < d_num_mom; ++mom) {
00941 int offset = mom * d_glb_walls * MESONs + MESONs -1;
00942 Complex tmp = d_data_p[offset + MESONs*
00943 ((d_whr.glbCoord() + wall)%d_glb_walls)];
00944
00945 Fprintf(fp, "%d %d %d %e\n",
00946 AlgWspect::GetCounter(), wall, mom, tmp.real());
00947 }
00948 }
00949 Fclose(fp);
00950 }
00951 }
00952
00953
00954
00955
00956 void
00957 WspectMesons::dumpData(char *filename) const {
00958
00959 #if TARGET==cpsMPI
00960 using MPISCU::fprintf;
00961 #endif
00962
00963 FILE *fp;
00964
00965 if (filename && (fp = Fopen(filename, "a"))) {
00966 for (int i = 0; i < d_size/COMPLEXs; ++i) {
00967 Fprintf(fp, "%.10e %.10e\n", d_data_p[i].real(), d_data_p[i].imag());
00968 }
00969 Fclose(fp);
00970 } else {
00971 ERR.FileA(d_class_name, "dumpData", filename);
00972 }
00973 }
00974
00975
00976
00977
00978
00979
00980
00981
00982
00983
00984
00985
00986
00987
00988
00989
00990
00991
00992
00993
00994
00995
00996
00997
00998
00999
01000
01001
01002
01003
01004
01005
01006
01007
01008
01009
01010
01011
01012
01013
01014
01015
01016
01017
01018
01019
01020
01021
01022
01023 #ifdef TEST_COS_SIN
01024 static void testCosSin()
01025 {
01026 Float f, g;
01027 f = MY_TWO_PI * 0.101;
01028 printf("COS(%g) = %g SIN(%g) = %g\n", (IFloat)f,
01029 (IFloat)(COS(f)), (IFloat)f, (IFloat)(SIN(f)));
01030 g = -f;
01031 printf("COS(%g) = %g SIN(%g) = %g\n", (IFloat)g,
01032 (IFloat)(COS(g)), (IFloat)g, (IFloat)(SIN(g)));
01033 f += MY_TWO_PI * 0.2;
01034 printf("COS(%g) = %g SIN(%g) = %g\n", (IFloat)f,
01035 (IFloat)(COS(f)), (IFloat)f, (IFloat)(SIN(f)));
01036 g = -f;
01037 printf("COS(%g) = %g SIN(%g) = %g\n", (IFloat)g,
01038 (IFloat)(COS(g)), (IFloat)g, (IFloat)(SIN(g)));
01039 f += MY_TWO_PI * 0.2;
01040 printf("COS(%g) = %g SIN(%g) = %g\n", (IFloat)f,
01041 (IFloat)(COS(f)), (IFloat)f, (IFloat)(SIN(f)));
01042 g = -f;
01043 printf("COS(%g) = %g SIN(%g) = %g\n", (IFloat)g,
01044 (IFloat)(COS(g)), (IFloat)g, (IFloat)(SIN(g)));
01045 f += MY_TWO_PI * 0.2;
01046 printf("COS(%g) = %g SIN(%g) = %g\n", (IFloat)f,
01047 (IFloat)(COS(f)), (IFloat)f, (IFloat)(SIN(f)));
01048 g = -f;
01049 printf("COS(%g) = %g SIN(%g) = %g\n", (IFloat)g,
01050 (IFloat)(COS(g)), (IFloat)g, (IFloat)(SIN(g)));
01051 g = -f;
01052 printf("COS(%g) = %g SIN(%g) = %g\n", (IFloat)g,
01053 (IFloat)(COS(g)), (IFloat)g, (IFloat)(SIN(g)));
01054 f += MY_TWO_PI * 0.2;
01055 printf("COS(%g) = %g SIN(%g) = %g\n", (IFloat)f,
01056 (IFloat)(COS(f)), (IFloat)f, (IFloat)(SIN(f)));
01057 g = -f;
01058 printf("COS(%g) = %g SIN(%g) = %g\n", (IFloat)g,
01059 (IFloat)(COS(g)), (IFloat)g, (IFloat)(SIN(g)));
01060 f += MY_TWO_PI * 0.2;
01061 printf("COS(%g) = %g SIN(%g) = %g\n", (IFloat)f,
01062 (IFloat)(COS(f)), (IFloat)f, (IFloat)(SIN(f)));
01063 g = -f;
01064 printf("COS(%g) = %g SIN(%g) = %g\n", (IFloat)g,
01065 (IFloat)(COS(g)), (IFloat)g, (IFloat)(SIN(g)));
01066 f += MY_TWO_PI * 0.2;
01067 printf("COS(%g) = %g SIN(%g) = %g\n", (IFloat)f,
01068 (IFloat)(COS(f)), (IFloat)f, (IFloat)(SIN(f)));
01069 g = -f;
01070 printf("COS(%g) = %g SIN(%g) = %g\n", (IFloat)g,
01071 (IFloat)(COS(g)), (IFloat)g, (IFloat)(SIN(g)));
01072 f += MY_TWO_PI * 0.2;
01073 printf("COS(%g) = %g SIN(%g) = %g\n", (IFloat)f,
01074 (IFloat)(COS(f)), (IFloat)f, (IFloat)(SIN(f)));
01075 g = -f;
01076 printf("COS(%g) = %g SIN(%g) = %g\n", (IFloat)g,
01077 (IFloat)(COS(g)), (IFloat)g, (IFloat)(SIN(g)));
01078 f += MY_TWO_PI * 0.2;
01079 printf("COS(%g) = %g SIN(%g) = %g\n", (IFloat)f,
01080 (IFloat)(COS(f)), (IFloat)f, (IFloat)(SIN(f)));
01081 g = -f;
01082 printf("COS(%g) = %g SIN(%g) = %g\n", (IFloat)g,
01083 (IFloat)(COS(g)), (IFloat)g, (IFloat)(SIN(g)));
01084 f += MY_TWO_PI * 0.2;
01085 printf("COS(%g) = %g SIN(%g) = %g\n", (IFloat)f,
01086 (IFloat)(COS(f)), (IFloat)f, (IFloat)(SIN(f)));
01087 g = -f;
01088 printf("COS(%g) = %g SIN(%g) = %g\n", (IFloat)g,
01089 (IFloat)(COS(g)), (IFloat)g, (IFloat)(SIN(g)));
01090 f += MY_TWO_PI * 0.2;
01091 printf("COS(%g) = %g SIN(%g) = %g\n", (IFloat)f,
01092 (IFloat)(COS(f)), (IFloat)f, (IFloat)(SIN(f)));
01093 g = -f;
01094 printf("COS(%g) = %g SIN(%g) = %g\n", (IFloat)g,
01095 (IFloat)(COS(g)), (IFloat)g, (IFloat)(SIN(g)));
01096 f += MY_TWO_PI * 0.2;
01097 printf("COS(%g) = %g SIN(%g) = %g\n", (IFloat)f,
01098 (IFloat)(COS(f)), (IFloat)f, (IFloat)(SIN(f)));
01099 g = -f;
01100 printf("COS(%g) = %g SIN(%g) = %g\n", (IFloat)g,
01101 (IFloat)(COS(g)), (IFloat)g, (IFloat)(SIN(g)));
01102 f += MY_TWO_PI * 0.2;
01103 printf("COS(%g) = %g SIN(%g) = %g\n", (IFloat)f,
01104 (IFloat)(COS(f)), (IFloat)f, (IFloat)(SIN(f)));
01105 g = -f;
01106 printf("COS(%g) = %g SIN(%g) = %g\n", (IFloat)g,
01107 (IFloat)(COS(g)), (IFloat)g, (IFloat)(SIN(g)));
01108 f += MY_TWO_PI * 0.2;
01109 printf("COS(%g) = %g SIN(%g) = %g\n", (IFloat)f,
01110 (IFloat)(COS(f)), (IFloat)f, (IFloat)(SIN(f)));
01111 g = -f;
01112 printf("COS(%g) = %g SIN(%g) = %g\n", (IFloat)g,
01113 (IFloat)(COS(g)), (IFloat)g, (IFloat)(SIN(g)));
01114 f += MY_TWO_PI * 0.2;
01115 printf("COS(%g) = %g SIN(%g) = %g\n", (IFloat)f,
01116 (IFloat)(COS(f)), (IFloat)f, (IFloat)(SIN(f)));
01117 g = -f;
01118 printf("COS(%g) = %g SIN(%g) = %g\n", (IFloat)g,
01119 (IFloat)(COS(g)), (IFloat)g, (IFloat)(SIN(g)));
01120 f += MY_TWO_PI * 0.2;
01121 printf("COS(%g) = %g SIN(%g) = %g\n", (IFloat)f,
01122 (IFloat)(COS(f)), (IFloat)f, (IFloat)(SIN(f)));
01123 g = -f;
01124 printf("COS(%g) = %g SIN(%g) = %g\n", (IFloat)g,
01125 (IFloat)(COS(g)), (IFloat)g, (IFloat)(SIN(g)));
01126 f += MY_TWO_PI * 0.2;
01127 printf("COS(%g) = %g SIN(%g) = %g\n", (IFloat)f,
01128 (IFloat)(COS(f)), (IFloat)f, (IFloat)(SIN(f)));
01129 g = -f;
01130 printf("COS(%g) = %g SIN(%g) = %g\n", (IFloat)g,
01131 (IFloat)(COS(g)), (IFloat)g, (IFloat)(SIN(g)));
01132 f += MY_TWO_PI * 0.2;
01133 printf("COS(%g) = %g SIN(%g) = %g\n", (IFloat)f,
01134 (IFloat)(COS(f)), (IFloat)f, (IFloat)(SIN(f)));
01135 g = -f;
01136 printf("COS(%g) = %g SIN(%g) = %g\n", (IFloat)g,
01137 (IFloat)(COS(g)), (IFloat)g, (IFloat)(SIN(g)));
01138 f += MY_TWO_PI * 0.2;
01139 printf("COS(%g) = %g SIN(%g) = %g\n", (IFloat)f,
01140 (IFloat)(COS(f)), (IFloat)f, (IFloat)(SIN(f)));
01141 g = -f;
01142 printf("COS(%g) = %g SIN(%g) = %g\n", (IFloat)g,
01143 (IFloat)(COS(g)), (IFloat)g, (IFloat)(SIN(g)));
01144 f += MY_TWO_PI * 0.2;
01145 printf("COS(%g) = %g SIN(%g) = %g\n", (IFloat)f,
01146 (IFloat)(COS(f)), (IFloat)f, (IFloat)(SIN(f)));
01147 g = -f;
01148 printf("COS(%g) = %g SIN(%g) = %g\n", (IFloat)g,
01149 (IFloat)(COS(g)), (IFloat)g, (IFloat)(SIN(g)));
01150 f += MY_TWO_PI * 0.2;
01151 printf("COS(%g) = %g SIN(%g) = %g\n", (IFloat)f,
01152 (IFloat)(COS(f)), (IFloat)f, (IFloat)(SIN(f)));
01153 g = -f;
01154 printf("COS(%g) = %g SIN(%g) = %g\n", (IFloat)g,
01155 (IFloat)(COS(g)), (IFloat)g, (IFloat)(SIN(g)));
01156 f += MY_TWO_PI * 0.2;
01157 printf("COS(%g) = %g SIN(%g) = %g\n", (IFloat)f,
01158 (IFloat)(COS(f)), (IFloat)f, (IFloat)(SIN(f)));
01159 g = -f;
01160 printf("COS(%g) = %g SIN(%g) = %g\n", (IFloat)g,
01161 (IFloat)(COS(g)), (IFloat)g, (IFloat)(SIN(g)));
01162 f += MY_TWO_PI * 0.2;
01163 printf("COS(%g) = %g SIN(%g) = %g\n", (IFloat)f,
01164 (IFloat)(COS(f)), (IFloat)f, (IFloat)(SIN(f)));
01165 g = -f;
01166 printf("COS(%g) = %g SIN(%g) = %g\n", (IFloat)g,
01167 (IFloat)(COS(g)), (IFloat)g, (IFloat)(SIN(g)));
01168 f += MY_TWO_PI * 0.2;
01169 printf("COS(%g) = %g SIN(%g) = %g\n", (IFloat)f,
01170 (IFloat)(COS(f)), (IFloat)f, (IFloat)(SIN(f)));
01171 g = -f;
01172 printf("COS(%g) = %g SIN(%g) = %g\n", (IFloat)g,
01173 (IFloat)(COS(g)), (IFloat)g, (IFloat)(SIN(g)));
01174 f += MY_TWO_PI * 0.2;
01175 printf("COS(%g) = %g SIN(%g) = %g\n", (IFloat)f,
01176 (IFloat)(COS(f)), (IFloat)f, (IFloat)(SIN(f)));
01177 g = -f;
01178 printf("COS(%g) = %g SIN(%g) = %g\n", (IFloat)g,
01179 (IFloat)(COS(g)), (IFloat)g, (IFloat)(SIN(g)));
01180 }
01181 #endif // #ifdef TEST_COS_SIN
01182
01183 CPS_END_NAMESPACE