00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #ifndef INT_SUDS_H
00012 #define INT_SUDS_H
00013
00014
00015
00016
00017
00018 #include "Particle/Interpolator.h"
00019 #include "Field/Field.h"
00020
00021
00022
00023 class IntSUDS;
00024
00025
00026 template <class T, unsigned Dim>
00027 struct InterpolatorTraits<T,Dim,IntSUDS> {
00028 typedef CacheData1<T,Dim> Cache_t;
00029 };
00030
00031
00032
00033 template <unsigned Dim>
00034 class IntSUDSImpl : public Interpolator {
00035
00036 public:
00037
00038 IntSUDSImpl() {}
00039 ~IntSUDSImpl() {}
00040
00041
00042
00043
00044 template <class FT, class M, class C, class PT>
00045 static
00046 void scatter(const FT& pdata, Field<FT,Dim,M,C>& f,
00047 const Vektor<PT,Dim>& ppos, const M& mesh) {
00048 CenteringTag<C> ctag;
00049 Vektor<PT,Dim> gpos, dpos, delta;
00050
00051
00052 NDIndex<Dim> ngp = FindNGP(mesh, ppos, ctag);
00053
00054 FindPos(gpos, mesh, ngp, ctag);
00055
00056 dpos = ppos - gpos;
00057
00058 FindDelta(delta, mesh, ngp, ctag);
00059
00060 dpos /= delta;
00061
00062 CompressedBrickIterator<FT,Dim> fiter = getFieldIter(f,ngp);
00063
00064 ERRORMSG("IntSUDS::scatter: not implemented for Dim>3!!"<<endl);
00065 return;
00066 }
00067
00068
00069
00070 template <class FT, class M, class C, class PT>
00071 static
00072 void scatter(const FT& pdata, Field<FT,Dim,M,C>& f,
00073 const Vektor<PT,Dim>& ppos, const M& mesh,
00074 NDIndex<Dim>& ngp, Vektor<PT,Dim>& dpos) {
00075 CenteringTag<C> ctag;
00076 Vektor<PT,Dim> gpos, delta;
00077
00078
00079 ngp = FindNGP(mesh, ppos, ctag);
00080
00081 FindPos(gpos, mesh, ngp, ctag);
00082
00083 dpos = ppos - gpos;
00084
00085 FindDelta(delta, mesh, ngp, ctag);
00086
00087 dpos /= delta;
00088
00089 CompressedBrickIterator<FT,Dim> fiter = getFieldIter(f,ngp);
00090
00091 ERRORMSG("IntSUDS::scatter: not implemented for Dim>3!!"<<endl);
00092 return;
00093 }
00094
00095
00096 template <class FT, class M, class C, class PT>
00097 static
00098 void scatter(const FT& pdata, Field<FT,Dim,M,C>& f,
00099 const NDIndex<Dim>& ngp, const Vektor<PT,Dim>& dpos) {
00100
00101 CompressedBrickIterator<FT,Dim> fiter = getFieldIter(f,ngp);
00102
00103 ERRORMSG("IntSUDS::scatter: not implemented for Dim>3!!"<<endl);
00104 return;
00105 }
00106
00107
00108 template <class FT, class M, class C, class PT>
00109 static
00110 void gather(FT& pdata, const Field<FT,Dim,M,C>& f,
00111 const Vektor<PT,Dim>& ppos, const M& mesh) {
00112 CenteringTag<C> ctag;
00113 Vektor<PT,Dim> gpos, dpos, delta;
00114
00115
00116 NDIndex<Dim> ngp = FindNGP(mesh, ppos, ctag);
00117
00118 FindPos(gpos, mesh, ngp, ctag);
00119
00120 dpos = ppos - gpos;
00121
00122 FindDelta(delta, mesh, ngp, ctag);
00123
00124 dpos /= delta;
00125
00126 CompressedBrickIterator<FT,Dim> fiter = getFieldIter(f,ngp);
00127
00128 ERRORMSG("IntSUDS::gather: not implemented for Dim>3!!"<<endl);
00129 return;
00130 }
00131
00132
00133
00134 template <class FT, class M, class C, class PT>
00135 static
00136 void gather(FT& pdata, const Field<FT,Dim,M,C>& f,
00137 const Vektor<PT,Dim>& ppos, const M& mesh,
00138 NDIndex<Dim>& ngp, Vektor<PT,Dim>& dpos) {
00139 CenteringTag<C> ctag;
00140 Vektor<PT,Dim> gpos, delta;
00141
00142
00143 ngp = FindNGP(mesh, ppos, ctag);
00144
00145 FindPos(gpos, mesh, ngp, ctag);
00146
00147 dpos = ppos - gpos;
00148
00149 FindDelta(delta, mesh, ngp, ctag);
00150
00151 dpos /= delta;
00152
00153 CompressedBrickIterator<FT,Dim> fiter = getFieldIter(f,ngp);
00154
00155 ERRORMSG("IntSUDS::gather: not implemented for Dim>3!!"<<endl);
00156 return;
00157 }
00158
00159
00160 template <class FT, class M, class C, class PT>
00161 static
00162 void gather(FT& pdata, const Field<FT,Dim,M,C>& f,
00163 const NDIndex<Dim>& ngp, const Vektor<PT,Dim>& dpos) {
00164
00165 CompressedBrickIterator<FT,Dim> fiter = getFieldIter(f,ngp);
00166
00167 ERRORMSG("IntSUDS::gather: not implemented for Dim>3!!"<<endl);
00168 return;
00169 }
00170
00171 };
00172
00173
00174 template <>
00175 class IntSUDSImpl<1U> : public Interpolator {
00176
00177 public:
00178
00179 IntSUDSImpl() {}
00180 ~IntSUDSImpl() {}
00181
00182
00183
00184
00185 template <class FT, class M, class C, class PT>
00186 static
00187 void scatter(const FT& pdata, Field<FT,1U,M,C>& f,
00188 const Vektor<PT,1U>& ppos, const M& mesh) {
00189 CenteringTag<C> ctag;
00190 Vektor<PT,1U> gpos, dpos, delta;
00191
00192 NDIndex<1U> ngp = FindNGP(mesh, ppos, ctag);
00193
00194 FindPos(gpos, mesh, ngp, ctag);
00195
00196 dpos = ppos - gpos;
00197
00198 FindDelta(delta, mesh, ngp, ctag);
00199
00200 dpos /= delta;
00201
00202 CompressedBrickIterator<FT,1U> fiter = getFieldIter(f,ngp);
00203
00204 *fiter += pdata;
00205 fiter.offset( 1) += 0.5 * dpos(0) * pdata;
00206 fiter.offset(-1) -= 0.5 * dpos(0) * pdata;
00207 return;
00208 }
00209
00210
00211
00212 template <class FT, class M, class C, class PT>
00213 static
00214 void scatter(const FT& pdata, Field<FT,1U,M,C>& f,
00215 const Vektor<PT,1U>& ppos, const M& mesh,
00216 NDIndex<1U>& ngp, Vektor<PT,1U>& dpos) {
00217 CenteringTag<C> ctag;
00218 Vektor<PT,1U> gpos, delta;
00219
00220 ngp = FindNGP(mesh, ppos, ctag);
00221
00222 FindPos(gpos, mesh, ngp, ctag);
00223
00224 dpos = ppos - gpos;
00225
00226 FindDelta(delta, mesh, ngp, ctag);
00227
00228 dpos /= delta;
00229
00230 CompressedBrickIterator<FT,1U> fiter = getFieldIter(f,ngp);
00231
00232 *fiter += pdata;
00233 fiter.offset( 1) += 0.5 * dpos(0) * pdata;
00234 fiter.offset(-1) -= 0.5 * dpos(0) * pdata;
00235 return;
00236 }
00237
00238
00239 template <class FT, class M, class C, class PT>
00240 static
00241 void scatter(const FT& pdata, Field<FT,1U,M,C>& f,
00242 const NDIndex<1U>& ngp, const Vektor<PT,1U>& dpos) {
00243
00244 CompressedBrickIterator<FT,1U> fiter = getFieldIter(f,ngp);
00245
00246 *fiter += pdata;
00247 fiter.offset( 1) += 0.5 * dpos(0) * pdata;
00248 fiter.offset(-1) -= 0.5 * dpos(0) * pdata;
00249 return;
00250 }
00251
00252
00253 template <class FT, class M, class C, class PT>
00254 static
00255 void gather(FT& pdata, const Field<FT,1U,M,C>& f,
00256 const Vektor<PT,1U>& ppos, const M& mesh) {
00257 CenteringTag<C> ctag;
00258 Vektor<PT,1U> gpos, dpos, delta;
00259
00260 NDIndex<1U> ngp = FindNGP(mesh, ppos, ctag);
00261
00262 FindPos(gpos, mesh, ngp, ctag);
00263
00264 dpos = ppos - gpos;
00265
00266 FindDelta(delta, mesh, ngp, ctag);
00267
00268 dpos /= delta;
00269
00270 CompressedBrickIterator<FT,1U> fiter = getFieldIter(f,ngp);
00271
00272 pdata = (*fiter) +
00273 0.5 * dpos(0) * (fiter.offset(1) - fiter.offset(-1));
00274 return;
00275 }
00276
00277
00278
00279 template <class FT, class M, class C, class PT>
00280 static
00281 void gather(FT& pdata, const Field<FT,1U,M,C>& f,
00282 const Vektor<PT,1U>& ppos, const M& mesh,
00283 NDIndex<1U>& ngp, Vektor<PT,1U>& dpos) {
00284 CenteringTag<C> ctag;
00285 Vektor<PT,1U> gpos, delta;
00286
00287 ngp = FindNGP(mesh, ppos, ctag);
00288
00289 FindPos(gpos, mesh, ngp, ctag);
00290
00291 dpos = ppos - gpos;
00292
00293 FindDelta(delta, mesh, ngp, ctag);
00294
00295 dpos /= delta;
00296
00297 CompressedBrickIterator<FT,1U> fiter = getFieldIter(f,ngp);
00298
00299 pdata = (*fiter) +
00300 0.5 * dpos(0) * (fiter.offset(1) - fiter.offset(-1));
00301 return;
00302 }
00303
00304
00305 template <class FT, class M, class C, class PT>
00306 static
00307 void gather(FT& pdata, const Field<FT,1U,M,C>& f,
00308 const NDIndex<1U>& ngp, const Vektor<PT,1U>& dpos) {
00309
00310 CompressedBrickIterator<FT,1U> fiter = getFieldIter(f,ngp);
00311
00312 pdata = (*fiter) +
00313 0.5 * dpos(0) * (fiter.offset(1) - fiter.offset(-1));
00314 return;
00315 }
00316
00317 };
00318
00319
00320 template <>
00321 class IntSUDSImpl<2U> : public Interpolator {
00322
00323 public:
00324
00325 IntSUDSImpl() {}
00326 ~IntSUDSImpl() {}
00327
00328
00329
00330
00331 template <class FT, class M, class C, class PT>
00332 static
00333 void scatter(const FT& pdata, Field<FT,2U,M,C>& f,
00334 const Vektor<PT,2U>& ppos, const M& mesh) {
00335 CenteringTag<C> ctag;
00336 Vektor<PT,2U> gpos, dpos, delta;
00337
00338 NDIndex<2U> ngp = FindNGP(mesh, ppos, ctag);
00339
00340 FindPos(gpos, mesh, ngp, ctag);
00341
00342 dpos = ppos - gpos;
00343
00344 FindDelta(delta, mesh, ngp, ctag);
00345
00346 dpos /= delta;
00347
00348 CompressedBrickIterator<FT,2U> fiter = getFieldIter(f,ngp);
00349
00350 *fiter += pdata;
00351 fiter.offset( 1,0) += 0.5 * dpos(0) * pdata;
00352 fiter.offset(-1,0) -= 0.5 * dpos(0) * pdata;
00353 fiter.offset(0, 1) += 0.5 * dpos(1) * pdata;
00354 fiter.offset(0,-1) -= 0.5 * dpos(1) * pdata;
00355 return;
00356 }
00357
00358
00359
00360 template <class FT, class M, class C, class PT>
00361 static
00362 void scatter(const FT& pdata, Field<FT,2U,M,C>& f,
00363 const Vektor<PT,2U>& ppos, const M& mesh,
00364 NDIndex<2U>& ngp, Vektor<PT,2U>& dpos) {
00365 CenteringTag<C> ctag;
00366 Vektor<PT,2U> gpos, delta;
00367
00368 ngp = FindNGP(mesh, ppos, ctag);
00369
00370 FindPos(gpos, mesh, ngp, ctag);
00371
00372 dpos = ppos - gpos;
00373
00374 FindDelta(delta, mesh, ngp, ctag);
00375
00376 dpos /= delta;
00377
00378 CompressedBrickIterator<FT,2U> fiter = getFieldIter(f,ngp);
00379
00380 *fiter += pdata;
00381 fiter.offset( 1,0) += 0.5 * dpos(0) * pdata;
00382 fiter.offset(-1,0) -= 0.5 * dpos(0) * pdata;
00383 fiter.offset(0, 1) += 0.5 * dpos(1) * pdata;
00384 fiter.offset(0,-1) -= 0.5 * dpos(1) * pdata;
00385 return;
00386 }
00387
00388
00389 template <class FT, class M, class C, class PT>
00390 static
00391 void scatter(const FT& pdata, Field<FT,2U,M,C>& f,
00392 const NDIndex<2U>& ngp, const Vektor<PT,2U>& dpos) {
00393
00394 CompressedBrickIterator<FT,2U> fiter = getFieldIter(f,ngp);
00395
00396 *fiter += pdata;
00397 fiter.offset( 1,0) += 0.5 * dpos(0) * pdata;
00398 fiter.offset(-1,0) -= 0.5 * dpos(0) * pdata;
00399 fiter.offset(0, 1) += 0.5 * dpos(1) * pdata;
00400 fiter.offset(0,-1) -= 0.5 * dpos(1) * pdata;
00401 return;
00402 }
00403
00404
00405 template <class FT, class M, class C, class PT>
00406 static
00407 void gather(FT& pdata, const Field<FT,2U,M,C>& f,
00408 const Vektor<PT,2U>& ppos, const M& mesh) {
00409 CenteringTag<C> ctag;
00410 Vektor<PT,2U> gpos, dpos, delta;
00411
00412 NDIndex<2U> ngp = FindNGP(mesh, ppos, ctag);
00413
00414 FindPos(gpos, mesh, ngp, ctag);
00415
00416 dpos = ppos - gpos;
00417
00418 FindDelta(delta, mesh, ngp, ctag);
00419
00420 dpos /= delta;
00421
00422 CompressedBrickIterator<FT,2U> fiter = getFieldIter(f,ngp);
00423
00424 pdata = (*fiter) +
00425 0.5 * dpos(0) * (fiter.offset(1,0) - fiter.offset(-1,0)) +
00426 0.5 * dpos(1) * (fiter.offset(0,1) - fiter.offset(0,-1));
00427 return;
00428 }
00429
00430
00431
00432 template <class FT, class M, class C, class PT>
00433 static
00434 void gather(FT& pdata, const Field<FT,2U,M,C>& f,
00435 const Vektor<PT,2U>& ppos, const M& mesh,
00436 NDIndex<2U>& ngp, Vektor<PT,2U>& dpos) {
00437 CenteringTag<C> ctag;
00438 Vektor<PT,2U> gpos, delta;
00439
00440 ngp = FindNGP(mesh, ppos, ctag);
00441
00442 FindPos(gpos, mesh, ngp, ctag);
00443
00444 dpos = ppos - gpos;
00445
00446 FindDelta(delta, mesh, ngp, ctag);
00447
00448 dpos /= delta;
00449
00450 CompressedBrickIterator<FT,2U> fiter = getFieldIter(f,ngp);
00451
00452 pdata = (*fiter) +
00453 0.5 * dpos(0) * (fiter.offset(1,0) - fiter.offset(-1,0)) +
00454 0.5 * dpos(1) * (fiter.offset(0,1) - fiter.offset(0,-1));
00455 return;
00456 }
00457
00458
00459 template <class FT, class M, class C, class PT>
00460 static
00461 void gather(FT& pdata, const Field<FT,2U,M,C>& f,
00462 const NDIndex<2U>& ngp, const Vektor<PT,2U>& dpos) {
00463
00464 CompressedBrickIterator<FT,2U> fiter = getFieldIter(f,ngp);
00465
00466 pdata = (*fiter) +
00467 0.5 * dpos(0) * (fiter.offset(1,0) - fiter.offset(-1,0)) +
00468 0.5 * dpos(1) * (fiter.offset(0,1) - fiter.offset(0,-1));
00469 return;
00470 }
00471
00472 };
00473
00474
00475 template <>
00476 class IntSUDSImpl<3U> : public Interpolator {
00477
00478 public:
00479
00480 IntSUDSImpl() {}
00481 ~IntSUDSImpl() {}
00482
00483
00484
00485
00486 template <class FT, class M, class C, class PT>
00487 static
00488 void scatter(const FT& pdata, Field<FT,3U,M,C>& f,
00489 const Vektor<PT,3U>& ppos, const M& mesh) {
00490 CenteringTag<C> ctag;
00491 Vektor<PT,3U> gpos, dpos, delta;
00492
00493 NDIndex<3U> ngp = FindNGP(mesh, ppos, ctag);
00494
00495 FindPos(gpos, mesh, ngp, ctag);
00496
00497 dpos = ppos - gpos;
00498
00499 FindDelta(delta, mesh, ngp, ctag);
00500
00501 dpos /= delta;
00502
00503 CompressedBrickIterator<FT,3U> fiter = getFieldIter(f,ngp);
00504
00505 *fiter += pdata;
00506 fiter.offset( 1,0,0) += 0.5 * dpos(0) * pdata;
00507 fiter.offset(-1,0,0) -= 0.5 * dpos(0) * pdata;
00508 fiter.offset(0, 1,0) += 0.5 * dpos(1) * pdata;
00509 fiter.offset(0,-1,0) -= 0.5 * dpos(1) * pdata;
00510 fiter.offset(0,0, 1) += 0.5 * dpos(2) * pdata;
00511 fiter.offset(0,0,-1) -= 0.5 * dpos(2) * pdata;
00512 return;
00513 }
00514
00515
00516
00517 template <class FT, class M, class C, class PT>
00518 static
00519 void scatter(const FT& pdata, Field<FT,3U,M,C>& f,
00520 const Vektor<PT,3U>& ppos, const M& mesh,
00521 NDIndex<3U>& ngp, Vektor<PT,3U>& dpos) {
00522 CenteringTag<C> ctag;
00523 Vektor<PT,3U> gpos, delta;
00524
00525 ngp = FindNGP(mesh, ppos, ctag);
00526
00527 FindPos(gpos, mesh, ngp, ctag);
00528
00529 dpos = ppos - gpos;
00530
00531 FindDelta(delta, mesh, ngp, ctag);
00532
00533 dpos /= delta;
00534
00535 CompressedBrickIterator<FT,3U> fiter = getFieldIter(f,ngp);
00536
00537 *fiter += pdata;
00538 fiter.offset( 1,0,0) += 0.5 * dpos(0) * pdata;
00539 fiter.offset(-1,0,0) -= 0.5 * dpos(0) * pdata;
00540 fiter.offset(0, 1,0) += 0.5 * dpos(1) * pdata;
00541 fiter.offset(0,-1,0) -= 0.5 * dpos(1) * pdata;
00542 fiter.offset(0,0, 1) += 0.5 * dpos(2) * pdata;
00543 fiter.offset(0,0,-1) -= 0.5 * dpos(2) * pdata;
00544 return;
00545 }
00546
00547
00548 template <class FT, class M, class C, class PT>
00549 static
00550 void scatter(const FT& pdata, Field<FT,3U,M,C>& f,
00551 const NDIndex<3U>& ngp, const Vektor<PT,3U>& dpos) {
00552
00553 CompressedBrickIterator<FT,3U> fiter = getFieldIter(f,ngp);
00554
00555 *fiter += pdata;
00556 fiter.offset( 1,0,0) += 0.5 * dpos(0) * pdata;
00557 fiter.offset(-1,0,0) -= 0.5 * dpos(0) * pdata;
00558 fiter.offset(0, 1,0) += 0.5 * dpos(1) * pdata;
00559 fiter.offset(0,-1,0) -= 0.5 * dpos(1) * pdata;
00560 fiter.offset(0,0, 1) += 0.5 * dpos(2) * pdata;
00561 fiter.offset(0,0,-1) -= 0.5 * dpos(2) * pdata;
00562 return;
00563 }
00564
00565
00566 template <class FT, class M, class C, class PT>
00567 static
00568 void gather(FT& pdata, const Field<FT,3U,M,C>& f,
00569 const Vektor<PT,3U>& ppos, const M& mesh) {
00570 CenteringTag<C> ctag;
00571 Vektor<PT,3U> gpos, dpos, delta;
00572
00573 NDIndex<3U> ngp = FindNGP(mesh, ppos, ctag);
00574
00575 FindPos(gpos, mesh, ngp, ctag);
00576
00577 dpos = ppos - gpos;
00578
00579 FindDelta(delta, mesh, ngp, ctag);
00580
00581 dpos /= delta;
00582
00583 CompressedBrickIterator<FT,3U> fiter = getFieldIter(f,ngp);
00584
00585 pdata = (*fiter) +
00586 0.5 * dpos(0) * (fiter.offset(1,0,0) - fiter.offset(-1,0,0)) +
00587 0.5 * dpos(1) * (fiter.offset(0,1,0) - fiter.offset(0,-1,0)) +
00588 0.5 * dpos(2) * (fiter.offset(0,0,1) - fiter.offset(0,0,-1));
00589 return;
00590 }
00591
00592
00593
00594 template <class FT, class M, class C, class PT>
00595 static
00596 void gather(FT& pdata, const Field<FT,3U,M,C>& f,
00597 const Vektor<PT,3U>& ppos, const M& mesh,
00598 NDIndex<3U>& ngp, Vektor<PT,3U>& dpos) {
00599 CenteringTag<C> ctag;
00600 Vektor<PT,3U> gpos, delta;
00601
00602 ngp = FindNGP(mesh, ppos, ctag);
00603
00604 FindPos(gpos, mesh, ngp, ctag);
00605
00606 dpos = ppos - gpos;
00607
00608 FindDelta(delta, mesh, ngp, ctag);
00609
00610 dpos /= delta;
00611
00612 CompressedBrickIterator<FT,3U> fiter = getFieldIter(f,ngp);
00613
00614 pdata = (*fiter) +
00615 0.5 * dpos(0) * (fiter.offset(1,0,0) - fiter.offset(-1,0,0)) +
00616 0.5 * dpos(1) * (fiter.offset(0,1,0) - fiter.offset(0,-1,0)) +
00617 0.5 * dpos(2) * (fiter.offset(0,0,1) - fiter.offset(0,0,-1));
00618 return;
00619 }
00620
00621
00622 template <class FT, class M, class C, class PT>
00623 static
00624 void gather(FT& pdata, const Field<FT,3U,M,C>& f,
00625 const NDIndex<3U>& ngp, const Vektor<PT,3U>& dpos) {
00626
00627 CompressedBrickIterator<FT,3U> fiter = getFieldIter(f,ngp);
00628
00629 pdata = (*fiter) +
00630 0.5 * dpos(0) * (fiter.offset(1,0,0) - fiter.offset(-1,0,0)) +
00631 0.5 * dpos(1) * (fiter.offset(0,1,0) - fiter.offset(0,-1,0)) +
00632 0.5 * dpos(2) * (fiter.offset(0,0,1) - fiter.offset(0,0,-1));
00633 return;
00634 }
00635
00636 };
00637
00638
00639
00640 class IntSUDS {
00641
00642 public:
00643
00644 IntSUDS() {}
00645 ~IntSUDS() {}
00646
00647
00648
00649
00650 template <class FT, unsigned Dim, class M, class C, class PT>
00651 static
00652 void scatter(const FT& pdata, Field<FT,Dim,M,C>& f,
00653 const Vektor<PT,Dim>& ppos, const M& mesh) {
00654 IntSUDSImpl<Dim>::scatter(pdata,f,ppos,mesh);
00655 }
00656
00657
00658
00659 template <class FT, unsigned Dim, class M, class C, class PT>
00660 static
00661 void scatter(const FT& pdata, Field<FT,Dim,M,C>& f,
00662 const Vektor<PT,Dim>& ppos, const M& mesh,
00663 CacheData1<PT,Dim>& cache) {
00664 IntSUDSImpl<Dim>::scatter(pdata,f,ppos,mesh,cache.Index_m,cache.Delta_m);
00665 }
00666
00667
00668 template <class FT, unsigned Dim, class M, class C, class PT>
00669 static
00670 void scatter(const FT& pdata, Field<FT,Dim,M,C>& f,
00671 const CacheData1<PT,Dim>& cache) {
00672 IntSUDSImpl<Dim>::scatter(pdata,f,cache.Index_m,cache.Delta_m);
00673 }
00674
00675
00676 template <class FT, unsigned Dim, class M, class C, class PT>
00677 static
00678 void gather(FT& pdata, const Field<FT,Dim,M,C>& f,
00679 const Vektor<PT,Dim>& ppos, const M& mesh) {
00680 IntSUDSImpl<Dim>::gather(pdata,f,ppos,mesh);
00681 }
00682
00683
00684
00685 template <class FT, unsigned Dim, class M, class C, class PT>
00686 static
00687 void gather(FT& pdata, const Field<FT,Dim,M,C>& f,
00688 const Vektor<PT,Dim>& ppos, const M& mesh,
00689 CacheData1<PT,Dim>& cache) {
00690 IntSUDSImpl<Dim>::gather(pdata,f,ppos,mesh,cache.Index_m,cache.Delta_m);
00691 }
00692
00693
00694 template <class FT, unsigned Dim, class M, class C, class PT>
00695 static
00696 void gather(FT& pdata, const Field<FT,Dim,M,C>& f,
00697 const CacheData1<PT,Dim>& cache) {
00698 IntSUDSImpl<Dim>::gather(pdata,f,cache.Index_m,cache.Delta_m);
00699 }
00700
00701 };
00702
00703 #endif // INT_SUDS_H
00704
00705
00706
00707
00708
00709
00710