95 |
|
static final double dtdxsq = dt / (dx * dx); |
96 |
|
static final double dtdysq = dt / (dy * dy); |
97 |
|
|
98 |
< |
|
99 |
< |
// the function being applied across the cells |
98 |
> |
/** the function being applied across the cells */ |
99 |
|
static final double f(double x, double y) { |
100 |
|
return Math.sin(x) * Math.sin(y); |
101 |
|
} |
118 |
|
return Math.exp(-2*t) * Math.sin(x) * Math.sin(y); |
119 |
|
} |
120 |
|
|
122 |
– |
|
123 |
– |
|
124 |
– |
|
121 |
|
static final class Compute extends RecursiveAction { |
122 |
|
final int lb; |
123 |
|
final int ub; |
145 |
|
compstripe(oldm, newm); |
146 |
|
} |
147 |
|
|
152 |
– |
|
148 |
|
/** Updates all cells. */ |
149 |
|
final void compstripe(double[][] newMat, double[][] oldMat) { |
150 |
|
|
179 |
|
nv[b] = cell |
180 |
|
+ dtdysq * (prev - twoc + next) |
181 |
|
+ dtdxsq * (east[b] - twoc + west[b]); |
187 |
– |
|
182 |
|
} |
183 |
|
} |
184 |
|
|
185 |
|
edges(newMat, llb, lub, tu + time * dt); |
186 |
|
} |
187 |
|
|
188 |
< |
|
195 |
< |
// the original version from cilk |
188 |
> |
/** the original version from cilk */ |
189 |
|
final void origcompstripe(double[][] newMat, double[][] oldMat) { |
190 |
|
|
191 |
|
final int llb = (lb == 0) ? 1 : lb; |
198 |
|
newMat[a][b] = cell |
199 |
|
+ dtdxsq * (oldMat[a+1][b] - twoc + oldMat[a-1][b]) |
200 |
|
+ dtdysq * (oldMat[a][b+1] - twoc + oldMat[a][b-1]); |
208 |
– |
|
201 |
|
} |
202 |
|
} |
203 |
|
|
204 |
|
edges(newMat, llb, lub, tu + time * dt); |
205 |
|
} |
206 |
|
|
215 |
– |
|
207 |
|
/** Initializes all cells. */ |
208 |
|
final void init() { |
209 |
|
final int llb = (lb == 0) ? 1 : lb; |
220 |
|
} |
221 |
|
|
222 |
|
edges(oldm, llb, lub, 0); |
232 |
– |
|
223 |
|
} |
224 |
|
|
225 |
|
/** Fills in edges with boundary values. */ |