Changeset 37630
- Timestamp:
- Nov 18, 2014, 8:22:08 PM (12 years ago)
- Location:
- branches/eam_branches/ipp-20140904/Ohana/src/opihi/cmd.data
- Files:
-
- 2 added
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/eam_branches/ipp-20140904/Ohana/src/opihi/cmd.data/Makefile
r37546 r37630 164 164 $(SRC)/shterms.$(ARCH).o \ 165 165 $(SRC)/shfit.$(ARCH).o \ 166 $(SRC)/shdot.$(ARCH).o \ 167 $(SRC)/shapply.$(ARCH).o \ 166 168 $(SRC)/wd.$(ARCH).o \ 167 169 $(SRC)/write_vectors.$(ARCH).o \ -
branches/eam_branches/ipp-20140904/Ohana/src/opihi/cmd.data/init.c
r37546 r37630 152 152 int shterms PROTO((int, char **)); 153 153 int shfit PROTO((int, char **)); 154 int shdot PROTO((int, char **)); 155 int shapply PROTO((int, char **)); 154 156 int wd PROTO((int, char **)); 155 157 int write_vectors PROTO((int, char **)); … … 323 325 {1, "shterms", shterms, "Spherical Harmonics terms"}, 324 326 {1, "shfit", shfit, "Spherical Harmonics fits"}, 327 {1, "shdot", shdot, "Spherical Harmonics dot product"}, 328 {1, "shapply", shapply, "Spherical Harmonics fit application"}, 325 329 {1, "wd", wd, "write an image to a file"}, 326 330 {1, "write", write_vectors, "write vectors to datafile"}, -
branches/eam_branches/ipp-20140904/Ohana/src/opihi/cmd.data/shfit.c
r37546 r37630 3 3 int shfit (int argc, char **argv) { 4 4 5 int i, j ;5 int i, j, k; 6 6 Vector *Rvec, *Dvec, *Fvec, *Lvec, *Mvec, *Frvec, *Fivec; 7 7 double *Fr, *Fi; … … 34 34 ResetVector (Mvec, OPIHI_FLT, terms->Nterms); 35 35 36 // measure the dot product \sum(F_i * Ylm_i) 36 double **Ar, **br, **Ai, **bi; 37 ALLOCATE (Ar, double *, terms->Nterms); 38 ALLOCATE (Ai, double *, terms->Nterms); 39 ALLOCATE (br, double *, terms->Nterms); 40 ALLOCATE (bi, double *, terms->Nterms); 41 for (i = 0; i < terms->Nterms; i++) { 42 ALLOCATE_ZERO (Ar[i], double, terms->Nterms); 43 ALLOCATE_ZERO (Ai[i], double, terms->Nterms); 44 ALLOCATE_ZERO (br[i], double, 1); 45 ALLOCATE_ZERO (bi[i], double, 1); 46 } 47 48 // measure the dot product \sum(F_i * Ylm_i) and the cross terms (\sum(Y_lm * Y_jk)) 37 49 for (i = 0; i < Rvec->Nelements; i++) { 38 50 … … 42 54 43 55 for (j = 0; j < terms->Nterms; j++) { 44 Fr[j] += Fv * terms->Fr[j]; 45 Fi[j] += Fv * terms->Fi[j]; 56 br[j][0] += Fv * terms->Fr[j]; 57 bi[j][0] += Fv * terms->Fi[j]; 58 } 59 60 for (j = 0; j < terms->Nterms; j++) { 61 for (k = j; k < terms->Nterms; k++) { 62 Ar[j][k] += terms->Fr[j] * terms->Fr[k]; 63 Ai[j][k] += terms->Fi[j] * terms->Fi[k]; 64 } 46 65 } 47 66 } 48 67 49 // for (j = 0; j < terms->Nterms; j++) { 50 // fprintf (stderr, "%d : %d %d : %f %f\n", j, terms->l[j], terms->m[j], Fr[j], Fi[j]); 51 // } 68 for (j = 1; j < terms->Nterms; j++) { 69 for (k = 0; k < j; k++) { 70 Ar[j][k] = Ar[k][j]; 71 Ai[j][k] = Ai[k][j]; 72 } 73 } 52 74 53 75 for (j = 0; j < terms->Nterms; j++) { 54 Fr[j] /= Fvec->Nelements; 55 Fi[j] /= Fvec->Nelements; 76 if (terms->m[j] == 0) { 77 Ai[j][j] = 1.0; // Im(Y_l0) == 0.0 78 bi[j][0] = 0.0; 79 } else { 80 if (terms->m[j] < 0) { 81 for (k = 0; k < terms->Nterms; k++) { 82 Ar[j][k] = 0.0; 83 Ar[k][j] = 0.0; 84 Ai[j][k] = 0.0; 85 Ai[k][j] = 0.0; 86 } 87 Ar[j][j] = 1.0; 88 Ai[j][j] = 1.0; 89 br[j][0] = 0.0; 90 bi[j][0] = 0.0; 91 // Re(Y_lm) = Re(Y_l(-m)) [m even], Re(Y_lm) = Re(-Y_l(-m)) [m odd] 92 } 93 } 94 } 95 96 if (0) { 97 fprintf (stderr, "--- Ar --- : br \n"); 98 for (i = 0; i < terms->Nterms; i++) { 99 for (j = 0; j < terms->Nterms; j++) { 100 fprintf (stderr, "%10.6f ", Ar[i][j]); 101 } 102 fprintf (stderr, " : %10.6f\n", br[i][0]); 103 } 104 105 fprintf (stderr, "--- Ai --- : bi \n"); 106 for (i = 0; i < terms->Nterms; i++) { 107 for (j = 0; j < terms->Nterms; j++) { 108 fprintf (stderr, "%10.6f ", Ai[i][j]); 109 } 110 fprintf (stderr, " : %10.6f\n", bi[i][0]); 111 } 112 } 113 114 fprintf (stderr, "--- Ar --- : br \n"); 115 for (j = 0; j < terms->Nterms; j++) { 116 fprintf (stderr, "%10.6f ", Ar[j][j]); 117 fprintf (stderr, " : %10.6f\n", br[j][0]); 118 } 119 120 fprintf (stderr, "--- Ai --- : bi \n"); 121 for (i = 0; i < terms->Nterms; i++) { 122 fprintf (stderr, "%10.6f : ", Ai[i][i]); 123 fprintf (stderr, " : %10.6f\n", bi[i][0]); 124 } 125 126 if (!dgaussjordan (Ar, br, terms->Nterms, 1)) { 127 gprint (GP_ERR, "failed to fit data : ill-conditioned matrix\n"); 128 return FALSE; 129 } 130 if (!dgaussjordan (Ai, bi, terms->Nterms, 1)) { 131 gprint (GP_ERR, "failed to fit data : ill-conditioned matrix\n"); 132 return FALSE; 133 } 134 135 for (j = 0; j < terms->Nterms; j++) { 136 Fr[j] = br[j][0] / (float) Frvec[0].Nelements; 137 Fi[j] = bi[j][0] / (float) Fivec[0].Nelements; 56 138 } 57 139
Note:
See TracChangeset
for help on using the changeset viewer.
