33?>
44
55CudaDeviceFunction real_t getJ() {
6- return 0 ;
6+ return m_7[0] + m_6[0] + m_5[0] + m_4[0] + m_3[0] + m_2[0] + m_1[0] ;
77}
88
99CudaDeviceFunction real_t getC() {
@@ -12,11 +12,14 @@ CudaDeviceFunction real_t getC() {
1212
1313CudaDeviceFunction vector_t getU() {
1414 vector_t u;
15+ u.x = m_7[1] + m_6[1] + m_5[1] + m_4[1] + m_3[1] + m_2[1] + m_1[1];
16+ u.y = m_7[2] + m_6[2] + m_5[2] + m_4[2] + m_3[2] + m_2[2] + m_1[2];
17+ u.z = m_7[3] + m_6[3] + m_5[3] + m_4[3] + m_3[3] + m_2[3] + m_1[3];
1518 return u;
1619}
1720
1821CudaDeviceFunction real_t getR() {
19- return resL2;
22+ return resL2(0,0,0) ;
2023}
2124
2225CudaDeviceFunction float2 Color() {
@@ -105,7 +108,7 @@ CudaDeviceFunction void Collision()
105108 real_t lambda[k];
106109 for (int j=0; j<k; j++) lambda[j] = 0;
107110 //lambda[0] = log(m[0]);
108- for (int iter=0; iter<20 ; iter++) {
111+ for (int iter=0; iter<15 ; iter++) {
109112 real_t res[k];
110113 real_t mat[k*k];
111114 for (int j=0; j<k; j++) {
@@ -114,9 +117,9 @@ CudaDeviceFunction void Collision()
114117 mat[j+g*k] = 0;
115118 }
116119 }
117- printf("lambda = [");
118- for (int g=0; g<k; g++) printf(" %lg", lambda[g]);
119- printf(" ]\n");
120+ // printf("lambda = [");
121+ // for (int g=0; g<k; g++) printf(" %lg", lambda[g]);
122+ // printf(" ]\n");
120123 for (int i=0; i<sph_n; i++) {
121124 real_t x = sph_points[0+3*i];
122125 real_t y = sph_points[1+3*i];
@@ -144,21 +147,23 @@ CudaDeviceFunction void Collision()
144147 for (int g=0; g<k; g++) printf(" %lg", mat[j+g*k]);
145148 printf(" ]\n");
146149 }
147- */
150+
148151 printf("res = [");
149152 for (int g=0; g<k; g++) printf(" %lg", res[g]);
150153 printf(" ]\n");
151-
154+ */
152155 resL2 = 0;
153156 for (int j=0; j<k; j++) resL2 += res[j]*res[j];
154157 resL2 = sqrt(resL2);
155- printf("iter:%d resL2: %lg\n", iter, resL2);
158+ // printf("iter:%d resL2: %lg\n", iter, resL2);
156159 chol_solve(k, mat, res);
157160 for (int j=0; j<k; j++) lambda[j] = lambda[j] - res[j];
158161 }
159- <?R
160- C(ms,0);
161- ?>
162+ for (int j=0; j<k; j++) {
163+ <?R for (i in seq_len(nrow(dirs))) { ?>
164+ m_<?%d i ?>[j] = 0;
165+ <?R } ?>
166+ }
162167
163168 for (int i=0; i<sph_n; i++) {
164169 real_t x = sph_points[0+3*i];
@@ -168,13 +173,18 @@ CudaDeviceFunction void Collision()
168173 <?R C(PV("poly[",1:k-1,"]"), polies); ?>
169174 real_t a = 0;
170175 for (int j=0; j<k; j++) a += lambda[j]*poly[j];
171- real_t b = exp(a)*sph_weights[i];
176+ real_t l = exp(a) + Source;
177+ real_t b = l*sph_weights[i];
178+ real_t flux;
179+ for (int j=0; j<k; j++) {
180+ m_1[j] += poly[j]*b;
181+ }
172182 <?R for (i in seq_len(nrow(dirs))) { ?>
173- real_t flux = <?R C(sum(PV(c("x","y","z"))*c(dirs$x[i],dirs$y[i],dirs$z[i]))) ?>;
183+ flux = <?R C(sum(PV(c("x","y","z"))*c(dirs$x[i],dirs$y[i],dirs$z[i]))) ?>;
174184 if (flux > 0) {
175185 for (int j=0; j<k; j++) {
176186 m_<?%d i ?>[j] += poly[j]*b*flux;
177- m [j] -= poly[j]*b*flux;
187+ m_1 [j] -= poly[j]*b*flux;
178188 }
179189 }
180190 <?R } ?>
0 commit comments