00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #ifndef UNIFORM_CARTESIAN_H
00012 #define UNIFORM_CARTESIAN_H
00013
00014
00015
00016
00017
00018 #include "Meshes/Mesh.h"
00019 #include "Meshes/Centering.h"
00020 #include "Meshes/CartesianCentering.h"
00021 #include "AppTypes/Vektor.h"
00022
00023
00024 template<class T, unsigned D> class BareField;
00025 template<class T, unsigned D, class M, class C> class Field;
00026 template <unsigned Dim, class MFLOAT> class UniformCartesian;
00027 template <unsigned Dim, class MFLOAT>
00028 ostream& operator<<(ostream&, const UniformCartesian<Dim,MFLOAT>&);
00029
00030 template <unsigned Dim, class MFLOAT=double>
00031 class UniformCartesian : public Mesh<Dim>
00032 {
00033 public:
00034
00035 typedef Cell DefaultCentering;
00036 typedef MFLOAT MeshValue_t;
00037 typedef Vektor<MFLOAT,Dim> MeshVektor_t;
00038
00039
00040 UniformCartesian()
00041 {
00042 hasSpacingFields = false;
00043 };
00044
00045 ~UniformCartesian()
00046 {
00047 if (hasSpacingFields) {
00048 delete VertSpacings;
00049 delete CellSpacings;
00050 delete FlVert;
00051 delete FlCell;
00052 }
00053 };
00054
00055
00056 UniformCartesian(const NDIndex<Dim>& ndi);
00057 UniformCartesian(const Index& I);
00058 UniformCartesian(const Index& I, const Index& J);
00059 UniformCartesian(const Index& I, const Index& J, const Index& K);
00060
00061 UniformCartesian(const NDIndex<Dim>& ndi, MFLOAT* const delX);
00062 UniformCartesian(const Index& I, MFLOAT* const delX);
00063 UniformCartesian(const Index& I, const Index& J, MFLOAT* const delX);
00064 UniformCartesian(const Index& I, const Index& J, const Index& K,
00065 MFLOAT* const delX);
00066
00067 UniformCartesian(const NDIndex<Dim>& ndi, MFLOAT* const delX,
00068 const Vektor<MFLOAT,Dim>& orig);
00069 UniformCartesian(const Index& I, MFLOAT* const delX,
00070 const Vektor<MFLOAT,Dim>& orig);
00071 UniformCartesian(const Index& I, const Index& J, MFLOAT* const delX,
00072 const Vektor<MFLOAT,Dim>& orig);
00073 UniformCartesian(const Index& I, const Index& J, const Index& K,
00074 MFLOAT* const delX, const Vektor<MFLOAT,Dim>& orig);
00075
00076
00077 void initialize(const NDIndex<Dim>& ndi);
00078 void initialize(const Index& I);
00079 void initialize(const Index& I, const Index& J);
00080 void initialize(const Index& I, const Index& J, const Index& K);
00081
00082 void initialize(const NDIndex<Dim>& ndi, MFLOAT* const delX);
00083 void initialize(const Index& I, MFLOAT* const delX);
00084 void initialize(const Index& I, const Index& J, MFLOAT* const delX);
00085 void initialize(const Index& I, const Index& J, const Index& K,
00086 MFLOAT* const delX);
00087
00088 void initialize(const NDIndex<Dim>& ndi, MFLOAT* const delX,
00089 const Vektor<MFLOAT,Dim>& orig);
00090 void initialize(const Index& I, MFLOAT* const delX,
00091 const Vektor<MFLOAT,Dim>& orig);
00092 void initialize(const Index& I, const Index& J, MFLOAT* const delX,
00093 const Vektor<MFLOAT,Dim>& orig);
00094 void initialize(const Index& I, const Index& J, const Index& K,
00095 MFLOAT* const delX, const Vektor<MFLOAT,Dim>& orig);
00096
00097
00098 private:
00099
00100
00101 MFLOAT meshSpacing[Dim];
00102 MFLOAT volume;
00103 Vektor<MFLOAT,Dim> origin;
00104 FieldLayout<Dim>* FlCell;
00105 FieldLayout<Dim>* FlVert;
00106
00107
00108 void setup();
00109
00110 void set_Dvc();
00111
00112
00113 public:
00114
00115
00116 unsigned gridSizes[Dim];
00117 Vektor<MFLOAT,Dim> Dvc[1<<Dim];
00118 bool hasSpacingFields;
00119 BareField<Vektor<MFLOAT,Dim>,Dim>* VertSpacings;
00120 BareField<Vektor<MFLOAT,Dim>,Dim>* CellSpacings;
00121
00122
00123
00124
00125
00126
00127
00128 void storeSpacingFields();
00129
00130 void storeSpacingFields(e_dim_tag p1, int vnodes=-1);
00131 void storeSpacingFields(e_dim_tag p1, e_dim_tag p2, int vnodes=-1);
00132 void storeSpacingFields(e_dim_tag p1, e_dim_tag p2, e_dim_tag p3,
00133 int vnodes=-1);
00134
00135
00136 void storeSpacingFields(e_dim_tag *p, int vnodes=-1);
00137
00138
00139
00140
00141
00142
00143
00144 void storeSpacingFields(e_dim_tag p1,
00145 unsigned vnodes1,
00146 bool recurse=false,
00147 int vnodes=-1);
00148 void storeSpacingFields(e_dim_tag p1, e_dim_tag p2,
00149 unsigned vnodes1, unsigned vnodes2,
00150 bool recurse=false,int vnodes=-1);
00151 void storeSpacingFields(e_dim_tag p1, e_dim_tag p2, e_dim_tag p3,
00152 unsigned vnodes1, unsigned vnodes2, unsigned vnodes3,
00153 bool recurse=false, int vnodes=-1);
00154
00155
00156 void storeSpacingFields(e_dim_tag *p,
00157 unsigned* vnodesPerDirection,
00158 bool recurse=false, int vnodes=-1);
00159
00160
00161
00162 Vektor<MFLOAT,Dim> get_origin() const;
00163
00164 MFLOAT get_meshSpacing(unsigned d) const;
00165
00166 MFLOAT get_volume() const;
00167
00168
00169
00170 void set_origin(const Vektor<MFLOAT,Dim>& o);
00171
00172 void set_meshSpacing(MFLOAT* const del);
00173
00174
00175 void print(ostream&);
00176
00177
00178
00179 MFLOAT getCellVolume(const NDIndex<Dim>&) const;
00180
00181 Field<MFLOAT,Dim,UniformCartesian<Dim,MFLOAT>,Cell>&
00182 getCellVolumeField(Field<MFLOAT,Dim,UniformCartesian<Dim,MFLOAT>,Cell>&) const;
00183
00184 MFLOAT getVertRangeVolume(const NDIndex<Dim>&) const;
00185
00186 MFLOAT getCellRangeVolume(const NDIndex<Dim>&) const;
00187
00188 NDIndex<Dim> getNearestVertex(const Vektor<MFLOAT,Dim>&) const;
00189
00190 NDIndex<Dim> getVertexBelow(const Vektor<MFLOAT,Dim>&) const;
00191
00192 inline
00193 NDIndex<Dim> getCellContaining(const Vektor<MFLOAT,Dim>& x) const
00194 {
00195 return getVertexBelow(x);
00196 }
00197
00198 Vektor<MFLOAT,Dim> getVertexPosition(const NDIndex<Dim>&) const;
00199
00200 Field<Vektor<MFLOAT,Dim>,Dim,UniformCartesian<Dim,MFLOAT>,Vert>&
00201 getVertexPositionField(Field<Vektor<MFLOAT,Dim>,Dim,
00202 UniformCartesian<Dim,MFLOAT>,Vert>& ) const;
00203
00204 Vektor<MFLOAT,Dim> getCellPosition(const NDIndex<Dim>&) const;
00205
00206 Field<Vektor<MFLOAT,Dim>,Dim,UniformCartesian<Dim,MFLOAT>,Cell>&
00207 getCellPositionField(Field<Vektor<MFLOAT,Dim>,Dim,
00208 UniformCartesian<Dim,MFLOAT>,Cell>& ) const;
00209
00210 Vektor<MFLOAT,Dim> getDeltaVertex(const NDIndex<Dim>&) const;
00211
00212 Field<Vektor<MFLOAT,Dim>,Dim,UniformCartesian<Dim,MFLOAT>,Cell>&
00213 getDeltaVertexField(Field<Vektor<MFLOAT,Dim>,Dim,
00214 UniformCartesian<Dim,MFLOAT>,Cell>& ) const;
00215
00216 Vektor<MFLOAT,Dim> getDeltaCell(const NDIndex<Dim>&) const;
00217
00218 Field<Vektor<MFLOAT,Dim>,Dim,UniformCartesian<Dim,MFLOAT>,Vert>&
00219 getDeltaCellField(Field<Vektor<MFLOAT,Dim>,Dim,
00220 UniformCartesian<Dim,MFLOAT>,Vert>& ) const;
00221
00222 Vektor<MFLOAT,Dim>* getSurfaceNormals(const NDIndex<Dim>&) const;
00223
00224 void getSurfaceNormalFields(Field<Vektor<MFLOAT,Dim>,Dim,
00225 UniformCartesian<Dim,MFLOAT>,Cell>** ) const;
00226
00227
00228
00229
00230 Vektor<MFLOAT,Dim> getSurfaceNormal(const NDIndex<Dim>&, unsigned) const;
00231 Field<Vektor<MFLOAT,Dim>,Dim,UniformCartesian<Dim,MFLOAT>,Cell>&
00232 getSurfaceNormalField(Field<Vektor<MFLOAT,Dim>,Dim,
00233 UniformCartesian<Dim,MFLOAT>,Cell>&, unsigned) const;
00234
00235 };
00236
00237
00238
00239
00240 template< unsigned Dim, class MFLOAT >
00241 inline
00242 ostream& operator<<(ostream& out, const UniformCartesian<Dim,MFLOAT>& mesh)
00243 {
00244 UniformCartesian<Dim,MFLOAT>& ncmesh =
00245 const_cast<UniformCartesian<Dim,MFLOAT>&>(mesh);
00246 ncmesh.print(out);
00247 return out;
00248 }
00249
00250
00251
00252
00253
00254 #ifndef CARTESIAN_STENCIL_SETUP_H
00255 #include "Meshes/CartesianStencilSetup.h"
00256 #endif
00257
00258
00259
00260
00261
00262
00263
00264
00265
00266
00267
00268
00269
00270
00271
00272
00273
00274
00275
00276
00277
00278
00279
00280
00281
00282
00283
00284 #ifdef UNDEFINED
00285
00286
00287
00288
00289
00290 template<class T1, class T2, unsigned Dim>
00291
00292 inline PETE_Expr<StencilElem<
00293
00294 Field<T1,Dim,UniformCartesian<Dim,T2>,Vert>::iterator,
00295
00296 CenteredDivergence<Dim,UniformCartesian<Dim,T2>,Vert,Cell>
00297 > >
00298 Div( Field< T1 , Dim , UniformCartesian<Dim,T2> , Vert >& x)
00299 {
00300
00301 typedef Field<T1,Dim,UniformCartesian<Dim,T2>,Vert>::iterator A;
00302 typedef CenteredDivergence<Dim,UniformCartesian<Dim,T2>,Vert,Cell> Op_t;
00303 typedef StencilElem<A,Op_t> Elem_t;
00304
00305 return PETE_Expr<Elem_t>( Elem_t(x.begin() ) );
00306 }
00307
00308
00309
00310
00311
00312
00313
00314
00315
00316
00317
00318
00319
00320
00321
00322
00323
00324
00325
00326
00327
00328
00329
00330
00331
00332
00333
00334
00335
00336
00337
00338
00339
00340
00341
00342
00343
00344
00345
00346
00347
00348
00349
00350
00351
00352
00353
00354
00355
00356
00357
00358
00359
00360
00361
00362
00363
00364
00365
00366
00367
00368
00369
00370
00371
00372
00373
00374
00375
00376
00377
00378
00379
00380
00381
00382
00383
00384
00385
00386
00387
00388
00389
00390
00391
00392
00393
00394
00395
00396
00397
00398
00399
00400
00401
00402
00403
00404
00405
00406
00407
00408
00409
00410
00411
00412
00413
00414
00415
00416
00417
00418
00419
00420
00421
00422
00423
00424
00425
00426
00427
00428
00429
00430
00431
00432
00433
00434
00435
00436
00437
00438
00439
00440
00441
00442
00443
00444
00445
00446
00447
00448
00449
00450
00451
00452
00453
00454
00455
00456
00457
00458
00459
00460
00461
00462
00463
00464
00465
00466
00467
00468
00469
00470
00471
00472
00473 #endif
00474
00476
00477
00478
00480
00481
00482
00483
00484 template < class T, class MFLOAT >
00485 Field<T,1U,UniformCartesian<1U,MFLOAT>,Cell>&
00486 Div(Field<Vektor<T,1U>,1U,UniformCartesian<1U,MFLOAT>,Vert>& x,
00487 Field<T,1U,UniformCartesian<1U,MFLOAT>,Cell>& r);
00488
00489 template < class T, class MFLOAT >
00490 Field<T,2U,UniformCartesian<2U,MFLOAT>,Cell>&
00491 Div(Field<Vektor<T,2U>,2U,UniformCartesian<2U,MFLOAT>,Vert>& x,
00492 Field<T,2U,UniformCartesian<2U,MFLOAT>,Cell>& r);
00493
00494 template < class T, class MFLOAT >
00495 Field<T,3U,UniformCartesian<3U,MFLOAT>,Cell>&
00496 Div(Field<Vektor<T,3U>,3U,UniformCartesian<3U,MFLOAT>,Vert>& x,
00497 Field<T,3U,UniformCartesian<3U,MFLOAT>,Cell>& r);
00498
00499
00500
00501 template < class T, class MFLOAT >
00502 Field<T,1U,UniformCartesian<1U,MFLOAT>,Vert>&
00503 Div(Field<Vektor<T,1U>,1U,UniformCartesian<1U,MFLOAT>,Cell>& x,
00504 Field<T,1U,UniformCartesian<1U,MFLOAT>,Vert>& r);
00505
00506 template < class T, class MFLOAT >
00507 Field<T,2U,UniformCartesian<2U,MFLOAT>,Vert>&
00508 Div(Field<Vektor<T,2U>,2U,UniformCartesian<2U,MFLOAT>,Cell>& x,
00509 Field<T,2U,UniformCartesian<2U,MFLOAT>,Vert>& r);
00510
00511 template < class T, class MFLOAT >
00512 Field<T,3U,UniformCartesian<3U,MFLOAT>,Vert>&
00513 Div(Field<Vektor<T,3U>,3U,UniformCartesian<3U,MFLOAT>,Cell>& x,
00514 Field<T,3U,UniformCartesian<3U,MFLOAT>,Vert>& r);
00515
00516
00517
00518 template < class T, class MFLOAT >
00519 Field<T,1U,UniformCartesian<1U,MFLOAT>,Vert>&
00520 Div(Field<Vektor<T,1U>,1U,UniformCartesian<1U,MFLOAT>,Vert>& x,
00521 Field<T,1U,UniformCartesian<1U,MFLOAT>,Vert>& r);
00522
00523 template < class T, class MFLOAT >
00524 Field<T,2U,UniformCartesian<2U,MFLOAT>,Vert>&
00525 Div(Field<Vektor<T,2U>,2U,UniformCartesian<2U,MFLOAT>,Vert>& x,
00526 Field<T,2U,UniformCartesian<2U,MFLOAT>,Vert>& r);
00527
00528 template < class T, class MFLOAT >
00529 Field<T,3U,UniformCartesian<3U,MFLOAT>,Vert>&
00530 Div(Field<Vektor<T,3U>,3U,UniformCartesian<3U,MFLOAT>,Vert>& x,
00531 Field<T,3U,UniformCartesian<3U,MFLOAT>,Vert>& r);
00532
00533
00534
00535 template < class T, class MFLOAT >
00536 Field<T,1U,UniformCartesian<1U,MFLOAT>,Cell>&
00537 Div(Field<Vektor<T,1U>,1U,UniformCartesian<1U,MFLOAT>,Cell>& x,
00538 Field<T,1U,UniformCartesian<1U,MFLOAT>,Cell>& r);
00539
00540 template < class T, class MFLOAT >
00541 Field<T,2U,UniformCartesian<2U,MFLOAT>,Cell>&
00542 Div(Field<Vektor<T,2U>,2U,UniformCartesian<2U,MFLOAT>,Cell>& x,
00543 Field<T,2U,UniformCartesian<2U,MFLOAT>,Cell>& r);
00544
00545 template < class T, class MFLOAT >
00546 Field<T,3U,UniformCartesian<3U,MFLOAT>,Cell>&
00547 Div(Field<Vektor<T,3U>,3U,UniformCartesian<3U,MFLOAT>,Cell>& x,
00548 Field<T,3U,UniformCartesian<3U,MFLOAT>,Cell>& r);
00549
00550
00551
00552 template < class T, class MFLOAT >
00553 Field<Vektor<T,1U>,1U,UniformCartesian<1U,MFLOAT>,Cell>&
00554 Div(Field<Tenzor<T,1U>,1U,UniformCartesian<1U,MFLOAT>,Vert>& x,
00555 Field<Vektor<T,1U>,1U,UniformCartesian<1U,MFLOAT>,Cell>& r);
00556
00557 template < class T, class MFLOAT >
00558 Field<Vektor<T,2U>,2U,UniformCartesian<2U,MFLOAT>,Cell>&
00559 Div(Field<Tenzor<T,2U>,2U,UniformCartesian<2U,MFLOAT>,Vert>& x,
00560 Field<Vektor<T,2U>,2U,UniformCartesian<2U,MFLOAT>,Cell>& r);
00561
00562 template < class T, class MFLOAT >
00563 Field<Vektor<T,3U>,3U,UniformCartesian<3U,MFLOAT>,Cell>&
00564 Div(Field<Tenzor<T,3U>,3U,UniformCartesian<3U,MFLOAT>,Vert>& x,
00565 Field<Vektor<T,3U>,3U,UniformCartesian<3U,MFLOAT>,Cell>& r);
00566
00567
00568
00569 template < class T, class MFLOAT >
00570 Field<Vektor<T,1U>,1U,UniformCartesian<1U,MFLOAT>,Vert>&
00571 Div(Field<Tenzor<T,1U>,1U,UniformCartesian<1U,MFLOAT>,Cell>& x,
00572 Field<Vektor<T,1U>,1U,UniformCartesian<1U,MFLOAT>,Vert>& r);
00573
00574 template < class T, class MFLOAT >
00575 Field<Vektor<T,2U>,2U,UniformCartesian<2U,MFLOAT>,Vert>&
00576 Div(Field<Tenzor<T,2U>,2U,UniformCartesian<2U,MFLOAT>,Cell>& x,
00577 Field<Vektor<T,2U>,2U,UniformCartesian<2U,MFLOAT>,Vert>& r);
00578
00579 template < class T, class MFLOAT >
00580 Field<Vektor<T,3U>,3U,UniformCartesian<3U,MFLOAT>,Vert>&
00581 Div(Field<Tenzor<T,3U>,3U,UniformCartesian<3U,MFLOAT>,Cell>& x,
00582 Field<Vektor<T,3U>,3U,UniformCartesian<3U,MFLOAT>,Vert>& r);
00583
00584
00585
00586
00587 template < class T, class MFLOAT >
00588 Field<Vektor<T,1U>,1U,UniformCartesian<1U,MFLOAT>,Cell>&
00589 Grad(Field<T,1U,UniformCartesian<1U,MFLOAT>,Vert>& x,
00590 Field<Vektor<T,1U>,1U,UniformCartesian<1U,MFLOAT>,Cell>& r);
00591
00592 template < class T, class MFLOAT >
00593 Field<Vektor<T,2U>,2U,UniformCartesian<2U,MFLOAT>,Cell>&
00594 Grad(Field<T,2U,UniformCartesian<2U,MFLOAT>,Vert>& x,
00595 Field<Vektor<T,2u>,2U,UniformCartesian<2U,MFLOAT>,Cell>& r);
00596
00597 template < class T, class MFLOAT >
00598 Field<Vektor<T,3U>,3U,UniformCartesian<3U,MFLOAT>,Cell>&
00599 Grad(Field<T,3U,UniformCartesian<3U,MFLOAT>,Vert>& x,
00600 Field<Vektor<T,3U>,3U,UniformCartesian<3U,MFLOAT>,Cell>& r);
00601
00602
00603
00604 template < class T, class MFLOAT >
00605 Field<Vektor<T,1U>,1U,UniformCartesian<1U,MFLOAT>,Vert>&
00606 Grad(Field<T,1U,UniformCartesian<1U,MFLOAT>,Cell>& x,
00607 Field<Vektor<T,1U>,1U,UniformCartesian<1U,MFLOAT>,Vert>& r);
00608
00609 template < class T, class MFLOAT >
00610 Field<Vektor<T,2U>,2U,UniformCartesian<2U,MFLOAT>,Vert>&
00611 Grad(Field<T,2U,UniformCartesian<2U,MFLOAT>,Cell>& x,
00612 Field<Vektor<T,2U>,2U,UniformCartesian<2U,MFLOAT>,Vert>& r);
00613
00614 template < class T, class MFLOAT >
00615 Field<Vektor<T,3U>,3U,UniformCartesian<3U,MFLOAT>,Vert>&
00616 Grad(Field<T,3U,UniformCartesian<3U,MFLOAT>,Cell>& x,
00617 Field<Vektor<T,3U>,3U,UniformCartesian<3U,MFLOAT>,Vert>& r);
00618
00619
00620
00621 template < class T, class MFLOAT >
00622 Field<Vektor<T,1U>,1U,UniformCartesian<1U,MFLOAT>,Vert>&
00623 Grad(Field<T,1U,UniformCartesian<1U,MFLOAT>,Vert>& x,
00624 Field<Vektor<T,1U>,1U,UniformCartesian<1U,MFLOAT>,Vert>& r);
00625
00626 template < class T, class MFLOAT >
00627 Field<Vektor<T,2U>,2U,UniformCartesian<2U,MFLOAT>,Vert>&
00628 Grad(Field<T,2U,UniformCartesian<2U,MFLOAT>,Vert>& x,
00629 Field<Vektor<T,2u>,2U,UniformCartesian<2U,MFLOAT>,Vert>& r);
00630
00631 template < class T, class MFLOAT >
00632 Field<Vektor<T,3U>,3U,UniformCartesian<3U,MFLOAT>,Vert>&
00633 Grad(Field<T,3U,UniformCartesian<3U,MFLOAT>,Vert>& x,
00634 Field<Vektor<T,3U>,3U,UniformCartesian<3U,MFLOAT>,Vert>& r);
00635
00636
00637
00638 template < class T, class MFLOAT >
00639 Field<Vektor<T,1U>,1U,UniformCartesian<1U,MFLOAT>,Cell>&
00640 Grad(Field<T,1U,UniformCartesian<1U,MFLOAT>,Cell>& x,
00641 Field<Vektor<T,1U>,1U,UniformCartesian<1U,MFLOAT>,Cell>& r);
00642
00643 template < class T, class MFLOAT >
00644 Field<Vektor<T,2U>,2U,UniformCartesian<2U,MFLOAT>,Cell>&
00645 Grad(Field<T,2U,UniformCartesian<2U,MFLOAT>,Cell>& x,
00646 Field<Vektor<T,2u>,2U,UniformCartesian<2U,MFLOAT>,Cell>& r);
00647
00648 template < class T, class MFLOAT >
00649 Field<Vektor<T,3U>,3U,UniformCartesian<3U,MFLOAT>,Cell>&
00650 Grad(Field<T,3U,UniformCartesian<3U,MFLOAT>,Cell>& x,
00651 Field<Vektor<T,3U>,3U,UniformCartesian<3U,MFLOAT>,Cell>& r);
00652
00653
00654
00655 template < class T, class MFLOAT >
00656 Field<Tenzor<T,1U>,1U,UniformCartesian<1U,MFLOAT>,Cell>&
00657 Grad(Field<Vektor<T,1U>,1U,UniformCartesian<1U,MFLOAT>,Vert>& x,
00658 Field<Tenzor<T,1U>,1U,UniformCartesian<1U,MFLOAT>,Cell>& r);
00659
00660 template < class T, class MFLOAT >
00661 Field<Tenzor<T,2U>,2U,UniformCartesian<2U,MFLOAT>,Cell>&
00662 Grad(Field<Vektor<T,2U>,2U,UniformCartesian<2U,MFLOAT>,Vert>& x,
00663 Field<Tenzor<T,2U>,2U,UniformCartesian<2U,MFLOAT>,Cell>& r);
00664
00665 template < class T, class MFLOAT >
00666 Field<Tenzor<T,3U>,3U,UniformCartesian<3U,MFLOAT>,Cell>&
00667 Grad(Field<Vektor<T,3U>,3U,UniformCartesian<3U,MFLOAT>,Vert>& x,
00668 Field<Tenzor<T,3U>,3U,UniformCartesian<3U,MFLOAT>,Cell>& r);
00669
00670
00671
00672 template < class T, class MFLOAT >
00673 Field<Tenzor<T,1U>,1U,UniformCartesian<1U,MFLOAT>,Vert>&
00674 Grad(Field<Vektor<T,1U>,1U,UniformCartesian<1U,MFLOAT>,Cell>& x,
00675 Field<Tenzor<T,1U>,1U,UniformCartesian<1U,MFLOAT>,Vert>& r);
00676
00677 template < class T, class MFLOAT >
00678 Field<Tenzor<T,2U>,2U,UniformCartesian<2U,MFLOAT>,Vert>&
00679 Grad(Field<Vektor<T,2U>,2U,UniformCartesian<2U,MFLOAT>,Cell>& x,
00680 Field<Tenzor<T,2U>,2U,UniformCartesian<2U,MFLOAT>,Vert>& r);
00681
00682 template < class T, class MFLOAT >
00683 Field<Tenzor<T,3U>,3U,UniformCartesian<3U,MFLOAT>,Vert>&
00684 Grad(Field<Vektor<T,3U>,3U,UniformCartesian<3U,MFLOAT>,Cell>& x,
00685 Field<Tenzor<T,3U>,3U,UniformCartesian<3U,MFLOAT>,Vert>& r);
00686
00687
00688
00689
00690 template < class T, class MFLOAT >
00691 Field<Vektor<T,2U>,2U,UniformCartesian<2U,MFLOAT>,Cell>&
00692 Div(Field<SymTenzor<T,2U>,2U,UniformCartesian<2U,MFLOAT>,Vert>& x,
00693 Field<Vektor<T,2U>,2U,UniformCartesian<2U,MFLOAT>,Cell>& r);
00694
00695 template < class T, class MFLOAT >
00696 Field<Vektor<T,3U>,3U,UniformCartesian<3U,MFLOAT>,Cell>&
00697 Div(Field<SymTenzor<T,3U>,3U,UniformCartesian<3U,MFLOAT>,Vert>& x,
00698 Field<Vektor<T,3U>,3U,UniformCartesian<3U,MFLOAT>,Cell>& r);
00699
00700
00701
00702 template < class T, class MFLOAT >
00703 Field<Vektor<T,1U>,1U,UniformCartesian<1U,MFLOAT>,Vert>&
00704 Div(Field<SymTenzor<T,1U>,1U,UniformCartesian<1U,MFLOAT>,Cell>& x,
00705 Field<Vektor<T,1U>,1U,UniformCartesian<1U,MFLOAT>,Vert>& r);
00706
00707 template < class T, class MFLOAT >
00708 Field<Vektor<T,2U>,2U,UniformCartesian<2U,MFLOAT>,Vert>&
00709 Div(Field<SymTenzor<T,2U>,2U,UniformCartesian<2U,MFLOAT>,Cell>& x,
00710 Field<Vektor<T,2U>,2U,UniformCartesian<2U,MFLOAT>,Vert>& r);
00711
00712 template < class T, class MFLOAT >
00713 Field<Vektor<T,3U>,3U,UniformCartesian<3U,MFLOAT>,Vert>&
00714 Div(Field<SymTenzor<T,3U>,3U,UniformCartesian<3U,MFLOAT>,Cell>& x,
00715 Field<Vektor<T,3U>,3U,UniformCartesian<3U,MFLOAT>,Vert>& r);
00716
00717
00718
00719 template < class T1, class T2, class MFLOAT >
00720 Field<T1,1U,UniformCartesian<1U,MFLOAT>,Vert>&
00721 Average(Field<T1,1U,UniformCartesian<1U,MFLOAT>,Cell>& x,
00722 Field<T2,1U,UniformCartesian<1U,MFLOAT>,Cell>& w,
00723 Field<T1,1U,UniformCartesian<1U,MFLOAT>,Vert>& r) ;
00724
00725 template < class T1, class T2, class MFLOAT >
00726 Field<T1,2U,UniformCartesian<2U,MFLOAT>,Vert>&
00727 Average(Field<T1,2U,UniformCartesian<2U,MFLOAT>,Cell>& x,
00728 Field<T2,2U,UniformCartesian<2U,MFLOAT>,Cell>& w,
00729 Field<T1,2U,UniformCartesian<2U,MFLOAT>,Vert>& r);
00730
00731 template < class T1, class T2, class MFLOAT >
00732 Field<T1,3U,UniformCartesian<3U,MFLOAT>,Vert>&
00733 Average(Field<T1,3U,UniformCartesian<3U,MFLOAT>,Cell>& x,
00734 Field<T2,3U,UniformCartesian<3U,MFLOAT>,Cell>& w,
00735 Field<T1,3U,UniformCartesian<3U,MFLOAT>,Vert>& r);
00736
00737
00738
00739
00740 template < class T1, class T2, class MFLOAT >
00741 Field<T1,1U,UniformCartesian<1U,MFLOAT>,Cell>&
00742 Average(Field<T1,1U,UniformCartesian<1U,MFLOAT>,Vert>& x,
00743 Field<T2,1U,UniformCartesian<1U,MFLOAT>,Vert>& w,
00744 Field<T1,1U,UniformCartesian<1U,MFLOAT>,Cell>& r) ;
00745
00746 template < class T1, class T2, class MFLOAT >
00747 Field<T1,2U,UniformCartesian<2U,MFLOAT>,Cell>&
00748 Average(Field<T1,2U,UniformCartesian<2U,MFLOAT>,Vert>& x,
00749 Field<T2,2U,UniformCartesian<2U,MFLOAT>,Vert>& w,
00750 Field<T1,2U,UniformCartesian<2U,MFLOAT>,Cell>& r);
00751
00752 template < class T1, class T2, class MFLOAT >
00753 Field<T1,3U,UniformCartesian<3U,MFLOAT>,Cell>&
00754 Average(Field<T1,3U,UniformCartesian<3U,MFLOAT>,Vert>& x,
00755 Field<T2,3U,UniformCartesian<3U,MFLOAT>,Vert>& w,
00756 Field<T1,3U,UniformCartesian<3U,MFLOAT>,Cell>& r);
00757
00758
00759
00760
00761
00762
00763 template < class T1, class MFLOAT >
00764 Field<T1,1U,UniformCartesian<1U,MFLOAT>,Vert>&
00765 Average(Field<T1,1U,UniformCartesian<1U,MFLOAT>,Cell>& x,
00766 Field<T1,1U,UniformCartesian<1U,MFLOAT>,Vert>& r) ;
00767
00768 template < class T1, class MFLOAT >
00769 Field<T1,2U,UniformCartesian<2U,MFLOAT>,Vert>&
00770 Average(Field<T1,2U,UniformCartesian<2U,MFLOAT>,Cell>& x,
00771 Field<T1,2U,UniformCartesian<2U,MFLOAT>,Vert>& r);
00772
00773 template < class T1, class MFLOAT >
00774 Field<T1,3U,UniformCartesian<3U,MFLOAT>,Vert>&
00775 Average(Field<T1,3U,UniformCartesian<3U,MFLOAT>,Cell>& x,
00776 Field<T1,3U,UniformCartesian<3U,MFLOAT>,Vert>& r);
00777
00778
00779
00780
00781 template < class T1, class MFLOAT >
00782 Field<T1,1U,UniformCartesian<1U,MFLOAT>,Cell>&
00783 Average(Field<T1,1U,UniformCartesian<1U,MFLOAT>,Vert>& x,
00784 Field<T1,1U,UniformCartesian<1U,MFLOAT>,Cell>& r) ;
00785
00786 template < class T1, class MFLOAT >
00787 Field<T1,2U,UniformCartesian<2U,MFLOAT>,Cell>&
00788 Average(Field<T1,2U,UniformCartesian<2U,MFLOAT>,Vert>& x,
00789 Field<T1,2U,UniformCartesian<2U,MFLOAT>,Cell>& r);
00790
00791 template < class T1, class MFLOAT >
00792 Field<T1,3U,UniformCartesian<3U,MFLOAT>,Cell>&
00793 Average(Field<T1,3U,UniformCartesian<3U,MFLOAT>,Vert>& x,
00794 Field<T1,3U,UniformCartesian<3U,MFLOAT>,Cell>& r);
00795
00796
00797
00798 #include "Meshes/UniformCartesian.cpp"
00799
00800 #endif // UNIFORM_CARTESIAN_H
00801
00802
00803
00804
00805
00806