42 template <
unsigned Dim,
class MFLOAT>
47 hasSpacingFields =
false;
58 template <
unsigned Dim,
class MFLOAT>
63 for (
unsigned int d=0; d<
Dim; d++) {
64 gridSizes[d] = ndi[d].length();
65 meshSpacing[d] = ndi[d].stride();
66 origin(d) = ndi[d].first();
72 template <
unsigned Dim,
class MFLOAT>
77 for (
unsigned int d=0; d<
Dim; d++) {
78 gridSizes[d] = ndi[d].length();
79 origin(d) = ndi[d].first();
81 set_meshSpacing(delX);
84 template <
unsigned Dim,
class MFLOAT>
90 for (
unsigned int d=0; d<
Dim; d++) {
91 gridSizes[d] = ndi[d].length();
94 set_meshSpacing(delX);
101 template <
unsigned Dim,
class MFLOAT>
105 PInsist(
Dim==1,
"Number of Index arguments does not match mesh dimension!!");
107 gridSizes[0] = I.
length();
108 meshSpacing[0] = I.
stride();
109 origin(0) = I.
first();
115 template <
unsigned Dim,
class MFLOAT>
119 PInsist(
Dim==1,
"Number of Index arguments does not match mesh dimension!!");
121 gridSizes[0] = I.
length();
122 origin(0) = I.
first();
124 set_meshSpacing(delX);
127 template <
unsigned Dim,
class MFLOAT>
132 PInsist(
Dim==1,
"Number of Index arguments does not match mesh dimension!!");
134 gridSizes[0] = I.
length();
136 set_meshSpacing(delX);
140 template <
unsigned Dim,
class MFLOAT>
144 PInsist(
Dim==2,
"Number of Index arguments does not match mesh dimension!!");
146 gridSizes[0] = I.
length();
147 gridSizes[1] = J.
length();
148 meshSpacing[0] = I.
stride();
149 meshSpacing[1] = J.
stride();
150 origin(0) = I.
first();
151 origin(1) = J.
first();
157 template <
unsigned Dim,
class MFLOAT>
161 PInsist(
Dim==2,
"Number of Index arguments does not match mesh dimension!!");
163 gridSizes[0] = I.
length();
164 gridSizes[1] = J.
length();
165 origin(0) = I.
first();
166 origin(1) = J.
first();
167 set_meshSpacing(delX);
170 template <
unsigned Dim,
class MFLOAT>
175 PInsist(
Dim==2,
"Number of Index arguments does not match mesh dimension!!");
177 gridSizes[0] = I.
length();
178 gridSizes[1] = J.
length();
180 set_meshSpacing(delX);
184 template <
unsigned Dim,
class MFLOAT>
188 PInsist(
Dim==3,
"Number of Index arguments does not match mesh dimension!!");
190 gridSizes[0] = I.
length();
191 gridSizes[1] = J.
length();
192 gridSizes[2] = K.
length();
193 meshSpacing[0] = I.
stride();
194 meshSpacing[1] = J.
stride();
195 meshSpacing[2] = K.
stride();
196 origin(0) = I.
first();
197 origin(1) = J.
first();
198 origin(2) = K.
first();
204 template <
unsigned Dim,
class MFLOAT>
209 PInsist(
Dim==3,
"Number of Index arguments does not match mesh dimension!!");
211 gridSizes[0] = I.
length();
212 gridSizes[1] = J.
length();
213 gridSizes[2] = K.
length();
214 origin(0) = I.
first();
215 origin(1) = J.
first();
216 origin(2) = K.
first();
217 set_meshSpacing(delX);
220 template <
unsigned Dim,
class MFLOAT>
225 PInsist(
Dim==3,
"Number of Index arguments does not match mesh dimension!!");
227 gridSizes[0] = I.
length();
228 gridSizes[1] = J.
length();
229 gridSizes[2] = K.
length();
231 set_meshSpacing(delX);
237 template <
unsigned Dim,
class MFLOAT>
243 for (
unsigned int d=0; d<
Dim; d++) {
244 gridSizes[d] = ndi[d].length();
245 meshSpacing[d] = ndi[d].stride();
246 origin(d) = ndi[d].first();
252 template <
unsigned Dim,
class MFLOAT>
258 for (
unsigned int d=0; d<
Dim; d++) {
259 gridSizes[d] = ndi[d].length();
260 origin(d) = ndi[d].first();
262 set_meshSpacing(delX);
265 template <
unsigned Dim,
class MFLOAT>
272 for (
unsigned int d=0; d<
Dim; d++) {
273 gridSizes[d] = ndi[d].length();
276 set_meshSpacing(delX);
283 template <
unsigned Dim,
class MFLOAT>
288 PInsist(
Dim==1,
"Number of Index arguments does not match mesh dimension!!");
290 gridSizes[0] = I.
length();
291 meshSpacing[0] = I.
stride();
292 origin(0) = I.
first();
298 template <
unsigned Dim,
class MFLOAT>
303 PInsist(
Dim==1,
"Number of Index arguments does not match mesh dimension!!");
305 gridSizes[0] = I.
length();
306 origin(0) = I.
first();
308 set_meshSpacing(delX);
311 template <
unsigned Dim,
class MFLOAT>
317 PInsist(
Dim==1,
"Number of Index arguments does not match mesh dimension!!");
319 gridSizes[0] = I.
length();
321 set_meshSpacing(delX);
325 template <
unsigned Dim,
class MFLOAT>
330 PInsist(
Dim==2,
"Number of Index arguments does not match mesh dimension!!");
332 gridSizes[0] = I.
length();
333 gridSizes[1] = J.
length();
334 meshSpacing[0] = I.
stride();
335 meshSpacing[1] = J.
stride();
336 origin(0) = I.
first();
337 origin(1) = J.
first();
343 template <
unsigned Dim,
class MFLOAT>
348 PInsist(
Dim==2,
"Number of Index arguments does not match mesh dimension!!");
350 gridSizes[0] = I.
length();
351 gridSizes[1] = J.
length();
352 origin(0) = I.
first();
353 origin(1) = J.
first();
354 set_meshSpacing(delX);
357 template <
unsigned Dim,
class MFLOAT>
363 PInsist(
Dim==2,
"Number of Index arguments does not match mesh dimension!!");
365 gridSizes[0] = I.
length();
366 gridSizes[1] = J.
length();
368 set_meshSpacing(delX);
372 template <
unsigned Dim,
class MFLOAT>
377 PInsist(
Dim==3,
"Number of Index arguments does not match mesh dimension!!");
379 gridSizes[0] = I.
length();
380 gridSizes[1] = J.
length();
381 gridSizes[2] = K.
length();
382 meshSpacing[0] = I.
stride();
383 meshSpacing[1] = J.
stride();
384 meshSpacing[2] = K.
stride();
385 origin(0) = I.
first();
386 origin(1) = J.
first();
387 origin(2) = K.
first();
393 template <
unsigned Dim,
class MFLOAT>
399 PInsist(
Dim==3,
"Number of Index arguments does not match mesh dimension!!");
401 gridSizes[0] = I.
length();
402 gridSizes[1] = J.
length();
403 gridSizes[2] = K.
length();
404 origin(0) = I.
first();
405 origin(1) = J.
first();
406 origin(2) = K.
first();
407 set_meshSpacing(delX);
410 template <
unsigned Dim,
class MFLOAT>
416 PInsist(
Dim==3,
"Number of Index arguments does not match mesh dimension!!");
418 gridSizes[0] = I.
length();
419 gridSizes[1] = J.
length();
420 gridSizes[2] = K.
length();
422 set_meshSpacing(delX);
429 template<
unsigned Dim,
class MFLOAT>
434 this->notifyOfChange();
437 template<
unsigned Dim,
class MFLOAT>
445 template<
unsigned Dim,
class MFLOAT>
451 for (d=0; d<
Dim; ++d) {
452 meshSpacing[d] = del[d];
457 if (hasSpacingFields) storeSpacingFields();
458 this->notifyOfChange();
461 template<
unsigned Dim,
class MFLOAT>
467 for (d=1;d<
Dim;++d) coef *= 0.5;
469 for (d=0;d<
Dim;++d) {
470 MFLOAT dvc = coef/meshSpacing[d];
471 for (
unsigned b=0; b<(1u<<
Dim); ++b) {
472 int s = ( b&(1<<d) ) ? 1 : -1;
478 template<
unsigned Dim,
class MFLOAT>
483 MFLOAT ms = meshSpacing[d];
488 template<
unsigned Dim,
class MFLOAT>
519 template<
unsigned Dim,
class MFLOAT>
525 for (
unsigned int d=0; d<
Dim; d++) et[d] =
PARALLEL;
526 storeSpacingFields(et, -1);
529 template<
unsigned Dim,
class MFLOAT>
535 storeSpacingFields(et, vnodes);
538 template<
unsigned Dim,
class MFLOAT>
545 storeSpacingFields(et, vnodes);
548 template<
unsigned Dim,
class MFLOAT>
556 storeSpacingFields(et, vnodes);
559 template<
unsigned Dim,
class MFLOAT>
566 for (d=0; d<
Dim; d++) {
567 cells[d] =
Index(gridSizes[d]-1);
568 verts[d] =
Index(gridSizes[d]);
570 if (!hasSpacingFields) {
587 for (d=0; d<
Dim; d++)
588 vertexSpacing[d] = meshSpacing[d];
589 vertSpacings = vertexSpacing;
606 for (face=0; face < 2*
Dim; face++) {
616 vSlab[d] =
Index(cells[d].
max() + 1,
626 voffset = 2*cells[d].max() + 1 - 1;
628 voffset = 2*cells[d].min() - 1 + 1;
632 for (vfill_i=vertSpacings.
begin_if();
633 vfill_i!=vertSpacings.
end_if(); ++vfill_i)
644 if ( vSlab.
touches( fill_alloc ) )
657 src[d] = voffset - src[d];
662 for (from_i=vertSpacings.
begin_if();
663 from_i!=vertSpacings.
end_if(); ++from_i)
670 if ( src.touches( from_owned ) )
676 LFI lhs = fill.
begin(vfill_it);
677 LFI rhs = from.
begin(from_it);
693 cellSpacings = vertexSpacing;
695 hasSpacingFields =
true;
706 template<
unsigned Dim,
class MFLOAT>
714 unsigned vnodesPerDirection[
Dim];
715 vnodesPerDirection[0] = vnodes1;
716 storeSpacingFields(et, vnodesPerDirection, recurse, vnodes);
719 template<
unsigned Dim,
class MFLOAT>
722 unsigned vnodes1,
unsigned vnodes2,
723 bool recurse,
int vnodes) {
727 unsigned vnodesPerDirection[
Dim];
728 vnodesPerDirection[0] = vnodes1;
729 vnodesPerDirection[1] = vnodes2;
730 storeSpacingFields(et, vnodesPerDirection, recurse, vnodes);
733 template<
unsigned Dim,
class MFLOAT>
736 unsigned vnodes1,
unsigned vnodes2,
unsigned vnodes3,
737 bool recurse,
int vnodes) {
742 unsigned vnodesPerDirection[
Dim];
743 vnodesPerDirection[0] = vnodes1;
744 vnodesPerDirection[1] = vnodes2;
745 vnodesPerDirection[2] = vnodes3;
746 storeSpacingFields(et, vnodesPerDirection, recurse, vnodes);
753 template<
unsigned Dim,
class MFLOAT>
756 unsigned* vnodesPerDirection,
757 bool recurse,
int vnodes)
762 for (d=0; d<
Dim; d++) {
763 cells[d] =
Index(gridSizes[d]-1);
764 verts[d] =
Index(gridSizes[d]);
766 if (!hasSpacingFields) {
784 for (d=0; d<
Dim; d++)
785 vertexSpacing[d] = meshSpacing[d];
786 vertSpacings = vertexSpacing;
803 for (face=0; face < 2*
Dim; face++) {
813 vSlab[d] =
Index(cells[d].
max() + 1,
823 voffset = 2*cells[d].max() + 1 - 1;
825 voffset = 2*cells[d].min() - 1 + 1;
829 for (vfill_i=vertSpacings.
begin_if();
830 vfill_i!=vertSpacings.
end_if(); ++vfill_i)
841 if ( vSlab.
touches( fill_alloc ) )
854 src[d] = voffset - src[d];
859 for (from_i=vertSpacings.
begin_if();
860 from_i!=vertSpacings.
end_if(); ++from_i)
867 if ( src.touches( from_owned ) )
873 LFI lhs = fill.
begin(vfill_it);
874 LFI rhs = from.
begin(from_it);
890 cellSpacings = vertexSpacing;
892 hasSpacingFields =
true;
899 template<
unsigned Dim,
class MFLOAT >
908 template<
unsigned Dim,
class MFLOAT >
913 out <<
"======UniformCartesian<" <<
Dim <<
",MFLOAT>==begin======\n";
915 for (d=0; d <
Dim; d++)
916 out <<
"gridSizes[" << d <<
"] = " << gridSizes[d] <<
"\n";
917 out <<
"origin = " << origin <<
"\n";
918 for (d=0; d <
Dim; d++)
919 out <<
"meshSpacing[" << d <<
"] = " << meshSpacing[d] <<
"\n";
920 for (d=0; d < (1u<<
Dim); d++)
921 out <<
"Dvc[" << d <<
"] = " << Dvc[d] <<
"\n";
922 out <<
"cell volume = " << volume <<
"\n";
923 out <<
"======UniformCartesian<" << Dim <<
",MFLOAT>==end========\n";
931 template <
unsigned Dim,
class MFLOAT>
937 for (d=0; d<
Dim; d++)
938 if (ndi[d].length() != 1)
939 ERRORMSG(
"UniformCartesian::getCellVolume() error: arg is not a NDIndex"
940 <<
"specifying a single element" <<
endl);
944 template <
unsigned Dim,
class MFLOAT>
954 template <
unsigned Dim,
class MFLOAT>
964 for (d=0; d<
Dim; d++) {
967 ndi0[d] =
Index(i0,i0,1);
968 ndi1[d] =
Index(i1,i1,1);
970 v0 = getVertexPosition(ndi0);
971 v1 = getVertexPosition(ndi1);
974 for (d=0; d<
Dim; d++) volume *=
abs(v1(d) - v0(d));
978 template <
unsigned Dim,
class MFLOAT>
988 for (d=0; d<
Dim; d++) {
990 i1 = ndi[d].last() + 1;
991 ndi0[d] =
Index(i0,i0,1);
992 ndi1[d] =
Index(i1,i1,1);
994 v0 = getVertexPosition(ndi0);
995 v1 = getVertexPosition(ndi1);
998 for (d=0; d<
Dim; d++) volume *=
abs(v1(d) - v0(d));
1003 template <
unsigned Dim,
class MFLOAT>
1012 for (
unsigned int d=0; d<
Dim; d++) {
1013 i = (int)((x(d) - origin(d))/meshSpacing[d] + 0.5);
1014 if (x(d) >= origin(d))
1015 ndi[d] =
Index(i,i);
1017 ndi[d] =
Index(i-1,i-1);
1022 template <
unsigned Dim,
class MFLOAT>
1031 for (
unsigned int d=0; d<
Dim; d++) {
1032 i = (int)((x(d) - origin(d))/meshSpacing[d]);
1033 if (x(d) >= origin(d))
1034 ndi[d] =
Index(i,i);
1036 ndi[d] =
Index(i-1,i-1);
1041 template <
unsigned Dim,
class MFLOAT>
1047 for (d=0; d<
Dim; d++) {
1048 if (ndi[d].length() != 1)
1049 ERRORMSG(
"UniformCartesian::getVertexPosition() error: arg is not a"
1050 <<
" NDIndex specifying a single element" <<
endl);
1054 for (d=0; d<
Dim; d++)
1055 vertexPosition(d) = ndi[d].first()*meshSpacing[d] + origin(d);
1056 return vertexPosition;
1059 template <
unsigned Dim,
class MFLOAT>
1066 int currentLocation[
Dim];
1068 vertexPositions.Uncompress();
1070 fi_end = vertexPositions.end();
1071 for (fi = vertexPositions.
begin(); fi != fi_end; ++fi) {
1072 fi.GetCurrentLocation(currentLocation);
1073 for (d=0; d<
Dim; d++)
1074 vertexPosition(d) = origin(d) + currentLocation[d]*meshSpacing[d];
1075 *fi = vertexPosition;
1077 return vertexPositions;
1081 template <
unsigned Dim,
class MFLOAT>
1087 for (d=0; d<
Dim; d++) {
1088 if (ndi[d].length() != 1)
1089 ERRORMSG(
"UniformCartesian::getCellPosition() error: arg is not a"
1090 <<
" NDIndex specifying a single element" <<
endl);
1094 for (d=0; d<
Dim; d++)
1095 cellPosition(d) = (ndi[d].first()+0.5)*meshSpacing[d] + origin(d);
1096 return cellPosition;
1099 template <
unsigned Dim,
class MFLOAT>
1106 int currentLocation[
Dim];
1108 cellPositions.Uncompress();
1110 fi_end = cellPositions.end();
1111 for (fi = cellPositions.
begin(); fi != fi_end; ++fi) {
1112 fi.GetCurrentLocation(currentLocation);
1113 for (d=0; d<
Dim; d++)
1114 cellPosition(d) = origin(d) + (currentLocation[d]+0.5)*meshSpacing[d];
1117 return cellPositions;
1121 template <
unsigned Dim,
class MFLOAT>
1128 for (
unsigned int d=0; d<
Dim; d++)
1129 vertexVertexSpacing[d] = meshSpacing[d] * ndi[d].length();
1130 return vertexVertexSpacing;
1134 template <
unsigned Dim,
class MFLOAT>
1142 for (d=0; d<
Dim; d++) vertexVertexSpacing(d) = meshSpacing[d];
1143 vertexSpacings = vertexVertexSpacing;
1144 return vertexSpacings;
1148 template <
unsigned Dim,
class MFLOAT>
1155 for (
unsigned int d=0; d<
Dim; d++)
1156 cellCellSpacing[d] = meshSpacing[d] * ndi[d].length();
1157 return cellCellSpacing;
1161 template <
unsigned Dim,
class MFLOAT>
1169 for (d=0; d<
Dim; d++) cellCellSpacing(d) = meshSpacing[d];
1170 cellSpacings = cellCellSpacing;
1171 return cellSpacings;
1174 template <
unsigned Dim,
class MFLOAT>
1181 for (d=0; d<
Dim; d++) {
1182 for (i=0; i<
Dim; i++) {
1183 surfaceNormals[2*d](i) = 0.0;
1184 surfaceNormals[2*d+1](i) = 0.0;
1186 surfaceNormals[2*d](d) = -1.0;
1187 surfaceNormals[2*d+1](d) = 1.0;
1189 return surfaceNormals;
1192 template <
unsigned Dim,
class MFLOAT>
1197 surfaceNormalsFields )
const
1201 for (d=0; d<
Dim; d++) {
1202 for (i=0; i<
Dim; i++) {
1203 surfaceNormals[2*d](i) = 0.0;
1204 surfaceNormals[2*d+1](i) = 0.0;
1206 surfaceNormals[2*d](d) = -1.0;
1207 surfaceNormals[2*d+1](d) = 1.0;
1209 for (d=0; d<2*
Dim; d++)
assign((*(surfaceNormalsFields[d])),
1218 template <
unsigned Dim,
class MFLOAT>
1230 for (d=0; d<
Dim; d++) {
1231 if ((face/2) == d) {
1232 surfaceNormal(face) = -1.0;
1234 surfaceNormal(face) = 0.0;
1238 for (d=0; d<
Dim; d++) {
1239 if ((face/2) == d) {
1240 surfaceNormal(face) = 1.0;
1242 surfaceNormal(face) = 0.0;
1246 return surfaceNormal;
1249 template <
unsigned Dim,
class MFLOAT>
1254 unsigned face)
const
1263 for (d=0; d<
Dim; d++) {
1264 if ((face/2) == d) {
1265 surfaceNormal(face) = -1.0;
1267 surfaceNormal(face) = 0.0;
1271 for (d=0; d<
Dim; d++) {
1272 if ((face/2) == d) {
1273 surfaceNormal(face) = 1.0;
1275 surfaceNormal(face) = 0.0;
1279 surfaceNormalField = surfaceNormal;
1280 return surfaceNormalField;
1296 template <
class T,
class MFLOAT >
1302 Index I = domain[0];
1305 dot(x[I ], x.get_mesh().Dvc[0]) +
1306 dot(x[I+1], x.get_mesh().Dvc[1]));
1310 template <
class T,
class MFLOAT >
1316 Index I = domain[0];
1317 Index J = domain[1];
1320 dot(x[I ][J ], x.get_mesh().Dvc[0]) +
1321 dot(x[I+1][J ], x.get_mesh().Dvc[1]) +
1322 dot(x[I ][J+1], x.get_mesh().Dvc[2]) +
1323 dot(x[I+1][J+1], x.get_mesh().Dvc[3]));
1327 template <
class T,
class MFLOAT >
1333 Index I = domain[0];
1334 Index J = domain[1];
1338 dot(x[I ][J ][K ], x.get_mesh().Dvc[0]) +
1339 dot(x[I+1][J ][K ], x.get_mesh().Dvc[1]) +
1340 dot(x[I ][J+1][K ], x.get_mesh().Dvc[2]) +
1341 dot(x[I+1][J+1][K ], x.get_mesh().Dvc[3]) +
1342 dot(x[I ][J ][K+1], x.get_mesh().Dvc[4]) +
1343 dot(x[I+1][J ][K+1], x.get_mesh().Dvc[5]) +
1344 dot(x[I ][J+1][K+1], x.get_mesh().Dvc[6]) +
1345 dot(x[I+1][J+1][K+1], x.get_mesh().Dvc[7]));
1351 template <
class T,
class MFLOAT >
1357 Index I = domain[0];
1360 dot(x[I-1], x.get_mesh().Dvc[0]) +
1361 dot(x[I ], x.get_mesh().Dvc[1]));
1366 template <
class T,
class MFLOAT >
1372 Index I = domain[0];
1373 Index J = domain[1];
1376 dot(x[I-1][J-1], x.get_mesh().Dvc[0]) +
1377 dot(x[I ][J-1], x.get_mesh().Dvc[1]) +
1378 dot(x[I-1][J ], x.get_mesh().Dvc[2]) +
1379 dot(x[I ][J ], x.get_mesh().Dvc[3]));
1383 template <
class T,
class MFLOAT >
1389 Index I = domain[0];
1390 Index J = domain[1];
1394 dot(x[I-1][J-1][K-1], x.get_mesh().Dvc[0]) +
1395 dot(x[I ][J-1][K-1], x.get_mesh().Dvc[1]) +
1396 dot(x[I-1][J ][K-1], x.get_mesh().Dvc[2]) +
1397 dot(x[I ][J ][K-1], x.get_mesh().Dvc[3]) +
1398 dot(x[I-1][J-1][K ], x.get_mesh().Dvc[4]) +
1399 dot(x[I ][J-1][K ], x.get_mesh().Dvc[5]) +
1400 dot(x[I-1][J ][K ], x.get_mesh().Dvc[6]) +
1401 dot(x[I ][J ][K ], x.get_mesh().Dvc[7]));
1407 template <
class T,
class MFLOAT >
1413 Index I = domain[0];
1415 idx[0] = 0.5/x.get_mesh().get_meshSpacing(0);
1417 assign( r[I] ,
dot( idx , (x[I+1] - x[I-1]) ) );
1421 template <
class T,
class MFLOAT >
1427 Index I = domain[0];
1428 Index J = domain[1];
1430 idx[0] = 0.5/x.get_mesh().get_meshSpacing(0);
1433 idy[1] = 0.5/x.get_mesh().get_meshSpacing(1);
1436 dot( idx , (x[I+1][J ] - x[I-1][J ])) +
1437 dot( idy , (x[I ][J+1] - x[I ][J-1])) );
1441 template <
class T,
class MFLOAT >
1447 Index I = domain[0];
1448 Index J = domain[1];
1451 idx[0] = 0.5/x.get_mesh().get_meshSpacing(0);
1455 idy[1] = 0.5/x.get_mesh().get_meshSpacing(1);
1459 idz[2] = 0.5/x.get_mesh().get_meshSpacing(2);
1462 dot(idx , (x[I+1][J ][K ] - x[I-1][J ][K ] )) +
1463 dot(idy , (x[I ][J+1][K ] - x[I ][J-1][K ] )) +
1464 dot(idz , (x[I ][J ][K+1] - x[I ][J ][K-1] )) );
1470 template <
class T,
class MFLOAT >
1476 Index I = domain[0];
1478 idx[0] = 1.0/x.get_mesh().get_meshSpacing(0);
1480 assign( r[I] ,
dot( idx , (x[I] - x[I-1]) ) );
1484 template <
class T,
class MFLOAT >
1490 Index I = domain[0];
1491 Index J = domain[1];
1493 idx[0] = 1.0/x.get_mesh().get_meshSpacing(0);
1496 idy[1] = 1.0/x.get_mesh().get_meshSpacing(1);
1499 dot( idx , (x[I][J] - x[I-1][J ])) +
1500 dot( idy , (x[I][J] - x[I ][J-1])) );
1504 template <
class T,
class MFLOAT >
1510 Index I = domain[0];
1511 Index J = domain[1];
1514 idx[0] = 1.0/x.get_mesh().get_meshSpacing(0);
1518 idy[1] = 1.0/x.get_mesh().get_meshSpacing(1);
1522 idz[2] = 1.0/x.get_mesh().get_meshSpacing(2);
1525 dot(idx , (x[I][J][K] - x[I-1][J ][K ] )) +
1526 dot(idy , (x[I][J][K] - x[I ][J-1][K ] )) +
1527 dot(idz , (x[I][J][K] - x[I ][J ][K-1] )) );
1533 template <
class T,
class MFLOAT >
1539 Index I = domain[0];
1541 idx[0] = 0.5/x.get_mesh().get_meshSpacing(0);
1543 assign( r[I] ,
dot( idx , (x[I+1] - x[I-1]) ) );
1547 template <
class T,
class MFLOAT >
1553 Index I = domain[0];
1554 Index J = domain[1];
1556 idx[0] = 0.5/x.get_mesh().get_meshSpacing(0);
1559 idy[1] = 0.5/x.get_mesh().get_meshSpacing(1);
1562 dot( idx , (x[I+1][J ] - x[I-1][J ])) +
1563 dot( idy , (x[I ][J+1] - x[I ][J-1])) );
1567 template <
class T,
class MFLOAT >
1573 Index I = domain[0];
1574 Index J = domain[1];
1577 idx[0] = 0.5/x.get_mesh().get_meshSpacing(0);
1581 idy[1] = 0.5/x.get_mesh().get_meshSpacing(1);
1585 idz[2] = 0.5/x.get_mesh().get_meshSpacing(2);
1588 dot(idx , (x[I+1][J ][K ] - x[I-1][J ][K ] )) +
1589 dot(idy , (x[I ][J+1][K ] - x[I ][J-1][K ] )) +
1590 dot(idz , (x[I ][J ][K+1] - x[I ][J ][K-1] )) );
1596 template <
class T,
class MFLOAT >
1602 Index I = domain[0];
1605 dot(x[I ], x.get_mesh().Dvc[0]) +
1606 dot(x[I+1], x.get_mesh().Dvc[1]));
1610 template <
class T,
class MFLOAT >
1616 Index I = domain[0];
1617 Index J = domain[1];
1620 dot(x[I ][J ], x.get_mesh().Dvc[0]) +
1621 dot(x[I+1][J ], x.get_mesh().Dvc[1]) +
1622 dot(x[I ][J+1], x.get_mesh().Dvc[2]) +
1623 dot(x[I+1][J+1], x.get_mesh().Dvc[3]));
1628 template <
class T,
class MFLOAT >
1634 Index I = domain[0];
1635 Index J = domain[1];
1639 dot(x[I ][J ][K ], x.get_mesh().Dvc[0]) +
1640 dot(x[I+1][J ][K ], x.get_mesh().Dvc[1]) +
1641 dot(x[I ][J+1][K ], x.get_mesh().Dvc[2]) +
1642 dot(x[I+1][J+1][K ], x.get_mesh().Dvc[3]) +
1643 dot(x[I ][J ][K+1], x.get_mesh().Dvc[4]) +
1644 dot(x[I+1][J ][K+1], x.get_mesh().Dvc[5]) +
1645 dot(x[I ][J+1][K+1], x.get_mesh().Dvc[6]) +
1646 dot(x[I+1][J+1][K+1], x.get_mesh().Dvc[7]));
1653 template <
class T,
class MFLOAT >
1659 Index I = domain[0];
1662 dot(x[I ], x.get_mesh().Dvc[0]) +
1663 dot(x[I+1], x.get_mesh().Dvc[1]));
1667 template <
class T,
class MFLOAT >
1673 Index I = domain[0];
1674 Index J = domain[1];
1677 dot(x[I ][J ], x.get_mesh().Dvc[0]) +
1678 dot(x[I+1][J ], x.get_mesh().Dvc[1]) +
1679 dot(x[I ][J+1], x.get_mesh().Dvc[2]) +
1680 dot(x[I+1][J+1], x.get_mesh().Dvc[3]));
1684 template <
class T,
class MFLOAT >
1690 Index I = domain[0];
1691 Index J = domain[1];
1695 dot(x[I ][J ][K ], x.get_mesh().Dvc[0]) +
1696 dot(x[I+1][J ][K ], x.get_mesh().Dvc[1]) +
1697 dot(x[I ][J+1][K ], x.get_mesh().Dvc[2]) +
1698 dot(x[I+1][J+1][K ], x.get_mesh().Dvc[3]) +
1699 dot(x[I ][J ][K+1], x.get_mesh().Dvc[4]) +
1700 dot(x[I+1][J ][K+1], x.get_mesh().Dvc[5]) +
1701 dot(x[I ][J+1][K+1], x.get_mesh().Dvc[6]) +
1702 dot(x[I+1][J+1][K+1], x.get_mesh().Dvc[7]));
1709 template <
class T,
class MFLOAT >
1715 Index I = domain[0];
1718 dot(x[I-1], x.get_mesh().Dvc[0]) +
1719 dot(x[I ], x.get_mesh().Dvc[1]));
1723 template <
class T,
class MFLOAT >
1729 Index I = domain[0];
1730 Index J = domain[1];
1733 dot(x[I-1][J-1], x.get_mesh().Dvc[0]) +
1734 dot(x[I ][J-1], x.get_mesh().Dvc[1]) +
1735 dot(x[I-1][J ], x.get_mesh().Dvc[2]) +
1736 dot(x[I ][J ], x.get_mesh().Dvc[3]));
1740 template <
class T,
class MFLOAT >
1746 Index I = domain[0];
1747 Index J = domain[1];
1751 dot(x[I-1][J-1][K-1], x.get_mesh().Dvc[0]) +
1752 dot(x[I ][J-1][K-1], x.get_mesh().Dvc[1]) +
1753 dot(x[I-1][J ][K-1], x.get_mesh().Dvc[2]) +
1754 dot(x[I ][J ][K-1], x.get_mesh().Dvc[3]) +
1755 dot(x[I-1][J-1][K ], x.get_mesh().Dvc[4]) +
1756 dot(x[I ][J-1][K ], x.get_mesh().Dvc[5]) +
1757 dot(x[I-1][J ][K ], x.get_mesh().Dvc[6]) +
1758 dot(x[I ][J ][K ], x.get_mesh().Dvc[7]));
1765 template <
class T,
class MFLOAT >
1771 Index I = domain[0];
1774 dot(x[I-1], x.get_mesh().Dvc[0]) +
1775 dot(x[I ], x.get_mesh().Dvc[1]));
1779 template <
class T,
class MFLOAT >
1785 Index I = domain[0];
1786 Index J = domain[1];
1789 dot(x[I-1][J-1], x.get_mesh().Dvc[0]) +
1790 dot(x[I ][J-1], x.get_mesh().Dvc[1]) +
1791 dot(x[I-1][J ], x.get_mesh().Dvc[2]) +
1792 dot(x[I ][J ], x.get_mesh().Dvc[3]));
1796 template <
class T,
class MFLOAT >
1802 Index I = domain[0];
1803 Index J = domain[1];
1807 dot(x[I-1][J-1][K-1], x.get_mesh().Dvc[0]) +
1808 dot(x[I ][J-1][K-1], x.get_mesh().Dvc[1]) +
1809 dot(x[I-1][J ][K-1], x.get_mesh().Dvc[2]) +
1810 dot(x[I ][J ][K-1], x.get_mesh().Dvc[3]) +
1811 dot(x[I-1][J-1][K ], x.get_mesh().Dvc[4]) +
1812 dot(x[I ][J-1][K ], x.get_mesh().Dvc[5]) +
1813 dot(x[I-1][J ][K ], x.get_mesh().Dvc[6]) +
1814 dot(x[I ][J ][K ], x.get_mesh().Dvc[7]));
1821 template <
class T,
class MFLOAT >
1827 Index I = domain[0];
1830 x[I ] * x.get_mesh().Dvc[0] +
1831 x[I+1] * x.get_mesh().Dvc[1]);
1835 template <
class T,
class MFLOAT >
1841 Index I = domain[0];
1842 Index J = domain[1];
1845 x[I ][J ] * x.get_mesh().Dvc[0] +
1846 x[I+1][J ] * x.get_mesh().Dvc[1] +
1847 x[I ][J+1] * x.get_mesh().Dvc[2] +
1848 x[I+1][J+1] * x.get_mesh().Dvc[3]);
1852 template <
class T,
class MFLOAT >
1858 Index I = domain[0];
1859 Index J = domain[1];
1863 x[I ][J ][K ] * x.get_mesh().Dvc[0] +
1864 x[I+1][J ][
K ] * x.get_mesh().Dvc[1] +
1865 x[I ][J+1][
K ] * x.get_mesh().Dvc[2] +
1866 x[I+1][J+1][
K ] * x.get_mesh().Dvc[3] +
1867 x[I ][J ][K+1] * x.get_mesh().Dvc[4] +
1868 x[I+1][J ][K+1] * x.get_mesh().Dvc[5] +
1869 x[I ][J+1][K+1] * x.get_mesh().Dvc[6] +
1870 x[I+1][J+1][K+1] * x.get_mesh().Dvc[7]);
1877 template <
class T,
class MFLOAT >
1883 Index I =
Index(domain[0].first(), domain[0].last()-1);
1886 x[I ] * x.get_mesh().Dvc[0] +
1887 x[I+1] * x.get_mesh().Dvc[1]);
1891 template <
class T,
class MFLOAT >
1897 Index I =
Index(domain[0].first(), domain[0].last()-1);
1898 Index J =
Index(domain[1].first(), domain[1].last()-1);
1901 idx[0] = 1.0/x.get_mesh().get_meshSpacing(0);
1904 idy[1] = 1.0/x.get_mesh().get_meshSpacing(1);
1907 (x[I+1][J ] - x[I ][J ]) * idx +
1908 (x[I ][J+1] - x[I ][J ]) * idy);
1909 I =
Index(domain[0].last(), domain[0].last());
1911 (x[I][J+1] - x[I][J]));
1912 I =
Index(domain[0].first(), domain[0].last()-1);
1913 J =
Index(domain[1].last(), domain[1].last());
1915 (x[I+1][J] - x[I][J]));
1916 J =
Index(domain[1].first(), domain[1].last()-1);
1920 template <
class T,
class MFLOAT >
1926 Index I =
Index(domain[0].first(), domain[0].last()-1);
1927 Index J =
Index(domain[1].first(), domain[1].last()-1);
1928 Index K =
Index(domain[2].first(), domain[2].last()-1);
1931 idx[0] = 1.0/x.get_mesh().get_meshSpacing(0);
1935 idy[1] = 1.0/x.get_mesh().get_meshSpacing(1);
1939 idz[2] = 1.0/x.get_mesh().get_meshSpacing(2);
1942 (x[I+1][J ][K ] - x[I ][J ][K ]) * idx +
1943 (x[I ][J+1][K ] - x[I ][J ][K ]) * idy +
1944 (x[I ][J ][K+1] - x[I ][J ][K ]) * idz);
1945 I =
Index(domain[0].last(), domain[0].last());
1947 (x[I ][J+1][K ] - x[I ][J ][K ]));
1949 (x[I ][J ][K+1] - x[I ][J ][K ]));
1950 I =
Index(domain[0].first(), domain[0].last()-1);
1951 J =
Index(domain[1].last(), domain[1].last());
1953 (x[I+1][J ][K ] - x[I ][J ][K ]));
1955 (x[I ][J ][K+1] - x[I ][J ][K ]));
1956 J =
Index(domain[1].first(), domain[1].last()-1);
1957 K =
Index(domain[2].last(), domain[2].last());
1959 (x[I+1][J ][K ] - x[I ][J ][K ]));
1961 (x[I ][J+1][K ] - x[I ][J ][K ]));
1962 K =
Index(domain[2].first(), domain[2].last()-1);
1969 template <
class T,
class MFLOAT >
1975 Index I = domain[0];
1978 x[I-1] * x.get_mesh().Dvc[0] +
1979 x[I ] * x.get_mesh().Dvc[1]);
1983 template <
class T,
class MFLOAT >
1989 Index I = domain[0];
1990 Index J = domain[1];
1993 x[I-1][J-1] * x.get_mesh().Dvc[0] +
1994 x[I ][J-1] * x.get_mesh().Dvc[1] +
1995 x[I-1][J ] * x.get_mesh().Dvc[2] +
1996 x[I ][J ] * x.get_mesh().Dvc[3]);
2000 template <
class T,
class MFLOAT >
2006 Index I = domain[0];
2007 Index J = domain[1];
2011 x[I-1][J-1][K-1] * x.get_mesh().Dvc[0] +
2012 x[I ][J-1][K-1] * x.get_mesh().Dvc[1] +
2013 x[I-1][J ][K-1] * x.get_mesh().Dvc[2] +
2014 x[I ][J ][K-1] * x.get_mesh().Dvc[3] +
2015 x[I-1][J-1][
K ] * x.get_mesh().Dvc[4] +
2016 x[I ][J-1][
K ] * x.get_mesh().Dvc[5] +
2017 x[I-1][J ][
K ] * x.get_mesh().Dvc[6] +
2018 x[I ][J ][
K ] * x.get_mesh().Dvc[7]);
2024 template <
class T,
class MFLOAT >
2030 Index I = domain[0];
2033 idx[0] = 0.5/x.get_mesh().get_meshSpacing(0);
2035 assign( r[I] , idx * (x[I+1] - x[I-1] ) );
2039 template <
class T,
class MFLOAT >
2045 Index I = domain[0];
2046 Index J = domain[1];
2049 idx[0] = 0.5/x.get_mesh().get_meshSpacing(0);
2052 idy[1] = 0.5/x.get_mesh().get_meshSpacing(1);
2055 idx * (x[I+1][J ] - x[I-1][J ]) +
2056 idy * (x[I ][J+1] - x[I ][J-1]) );
2060 template <
class T,
class MFLOAT >
2066 Index I = domain[0];
2067 Index J = domain[1];
2071 idx[0] = 0.5/x.get_mesh().get_meshSpacing(0);
2075 idy[1] = 0.5/x.get_mesh().get_meshSpacing(1);
2079 idz[2] = 0.5/x.get_mesh().get_meshSpacing(2);
2082 idx * (x[I+1][J ][K ] - x[I-1][J ][K ]) +
2083 idy * (x[I ][J+1][K ] - x[I ][J-1][K ]) +
2084 idz * (x[I ][J ][K+1] - x[I ][J ][K-1]));
2090 template <
class T,
class MFLOAT >
2096 Index I = domain[0];
2099 idx[0] = 0.5/x.get_mesh().get_meshSpacing(0);
2101 assign( r[I] , idx * (x[I+1] - x[I-1] ) );
2105 template <
class T,
class MFLOAT >
2111 Index I = domain[0];
2112 Index J = domain[1];
2115 idx[0] = 0.5/x.get_mesh().get_meshSpacing(0);
2118 idy[1] = 0.5/x.get_mesh().get_meshSpacing(1);
2121 idx * (x[I+1][J ] - x[I-1][J ]) +
2122 idy * (x[I ][J+1] - x[I ][J-1]) );
2127 template <
class T,
class MFLOAT >
2133 Index I = domain[0];
2134 Index J = domain[1];
2138 idx[0] = 0.5/x.get_mesh().get_meshSpacing(0);
2142 idy[1] = 0.5/x.get_mesh().get_meshSpacing(1);
2146 idz[2] = 0.5/x.get_mesh().get_meshSpacing(2);
2149 idx * (x[I+1][J ][K ] - x[I-1][J ][K ]) +
2150 idy * (x[I ][J+1][K ] - x[I ][J-1][K ]) +
2151 idz * (x[I ][J ][K+1] - x[I ][J ][K-1]));
2160 int maxI = I.
length() - 1;
2161 int maxJ = J.
length() - 1;
2162 int maxK = K.length() - 1;
2164 Index Iup(maxI, maxI);
2165 Index Jup(maxJ, maxJ);
2166 Index Kup(maxK, maxK);
2168 r[lo][J][
K] = (idx * (- 1.0*x[lo+2][J][
K]
2173 r[Iup][J][
K] = (idx * ( 1.0*x[Iup-2][J][
K]
2174 - 4.0*x[Iup-1][J][
K]
2175 + 3.0*x[Iup ][J][
K])
2179 r[I][lo][
K] = (idy * (- 1.0*x[I][lo+2][
K]
2184 r[I][Jup][
K] = (idy * ( 1.0*x[I][Jup-2][
K]
2185 - 4.0*x[I][Jup-1][
K]
2186 + 3.0*x[I][Jup ][
K])
2190 r[I][J][lo] = (idz * (- 1.0*x[I][J][lo+2]
2195 r[I][J][Kup] = (idz * ( 1.0*x[I][J][Kup-2]
2196 - 4.0*x[I][J][Kup-1]
2197 + 3.0*x[I][J][Kup ])
2205 template <
class T,
class MFLOAT >
2211 Index I = domain[0];
2212 Index J = domain[1];
2216 idx[0] = 0.5/x.get_mesh().get_meshSpacing(0);
2220 idy[1] = 0.5/x.get_mesh().get_meshSpacing(1);
2224 idz[2] = 0.5/x.get_mesh().get_meshSpacing(2);
2227 idx * (x[I+1][J ][K ] - x[I-1][J ][K ]) +
2228 idy * (x[I ][J+1][K ] - x[I ][J-1][K ]) +
2229 idz * (x[I ][J ][K+1] - x[I ][J ][K-1]));
2235 template <
class T,
class MFLOAT >
2241 Index I = domain[0];
2249 template <
class T,
class MFLOAT >
2255 Index I = domain[0];
2256 Index J = domain[1];
2266 template <
class T,
class MFLOAT >
2272 Index I = domain[0];
2273 Index J = domain[1];
2280 outerProduct( x[I+1][J+1][K ] , x.get_mesh().Dvc[3] ) +
2282 outerProduct( x[I+1][J ][K+1] , x.get_mesh().Dvc[5] ) +
2283 outerProduct( x[I ][J+1][K+1] , x.get_mesh().Dvc[6] ) +
2284 outerProduct( x[I+1][J+1][K+1] , x.get_mesh().Dvc[7] ));
2291 template <
class T,
class MFLOAT >
2297 Index I = domain[0];
2305 template <
class T,
class MFLOAT >
2311 Index I = domain[0];
2312 Index J = domain[1];
2322 template <
class T,
class MFLOAT >
2328 Index I = domain[0];
2329 Index J = domain[1];
2333 outerProduct( x[I-1][J-1][K-1] , x.get_mesh().Dvc[0] ) +
2334 outerProduct( x[I ][J-1][K-1] , x.get_mesh().Dvc[1] ) +
2335 outerProduct( x[I-1][J ][K-1] , x.get_mesh().Dvc[2] ) +
2337 outerProduct( x[I-1][J-1][K ] , x.get_mesh().Dvc[4] ) +
2349 template <
class T1,
class T2,
class MFLOAT >
2352 Field<T2,1U,UniformCartesian<1U,MFLOAT>,
Cell>& w,
2353 Field<T1,1U,UniformCartesian<1U,MFLOAT>,
Vert>& r)
2356 Index I = domain[0];
2358 ( x[I-1] * w[I-1] + x[I ] * w[I ] )/
2359 ( w[I-1] + w[I ] ) );
2363 template <
class T1,
class T2,
class MFLOAT >
2366 Field<T2,2U,UniformCartesian<2U,MFLOAT>,
Cell>& w,
2367 Field<T1,2U,UniformCartesian<2U,MFLOAT>,
Vert>& r)
2370 Index I = domain[0];
2371 Index J = domain[1];
2374 ( x[I-1][J-1] * w[I-1][J-1] +
2375 x[I ][J-1] * w[I ][J-1] +
2376 x[I-1][J ] * w[I-1][J ] +
2377 x[I ][J ] * w[I ][J ] )/
2385 template <
class T1,
class T2,
class MFLOAT >
2388 Field<T2,3U,UniformCartesian<3U,MFLOAT>,
Cell>& w,
2389 Field<T1,3U,UniformCartesian<3U,MFLOAT>,
Vert>& r)
2392 Index I = domain[0];
2393 Index J = domain[1];
2397 ( x[I-1][J-1][K-1] * w[I-1][J-1][K-1] +
2398 x[I ][J-1][K-1] * w[I ][J-1][K-1] +
2399 x[I-1][J ][K-1] * w[I-1][J ][K-1] +
2400 x[I ][J ][K-1] * w[I ][J ][K-1] +
2401 x[I-1][J-1][K ] * w[I-1][J-1][K ] +
2402 x[I ][J-1][K ] * w[I ][J-1][K ] +
2403 x[I-1][J ][K ] * w[I-1][J ][K ] +
2404 x[I ][J ][K ] * w[I ][J ][K ] )/
2405 ( w[I-1][J-1][K-1] +
2419 template <
class T1,
class T2,
class MFLOAT >
2422 Field<T2,1U,UniformCartesian<1U,MFLOAT>,
Vert>& w,
2423 Field<T1,1U,UniformCartesian<1U,MFLOAT>,
Cell>& r)
2426 Index I = domain[0];
2428 ( x[I+1] * w[I+1] + x[I ] * w[I ] )/
2429 ( w[I+1] + w[I ] ) );
2433 template <
class T1,
class T2,
class MFLOAT >
2436 Field<T2,2U,UniformCartesian<2U,MFLOAT>,
Vert>& w,
2437 Field<T1,2U,UniformCartesian<2U,MFLOAT>,
Cell>& r)
2440 Index I = domain[0];
2441 Index J = domain[1];
2444 ( x[I+1][J+1] * w[I+1][J+1] +
2445 x[I ][J+1] * w[I ][J+1] +
2446 x[I+1][J ] * w[I+1][J ] +
2447 x[I ][J ] * w[I ][J ] )/
2455 template <
class T1,
class T2,
class MFLOAT >
2458 Field<T2,3U,UniformCartesian<3U,MFLOAT>,
Vert>& w,
2459 Field<T1,3U,UniformCartesian<3U,MFLOAT>,
Cell>& r)
2462 Index I = domain[0];
2463 Index J = domain[1];
2467 ( x[I+1][J+1][K+1] * w[I+1][J+1][K+1] +
2468 x[I ][J+1][K+1] * w[I ][J+1][K+1] +
2469 x[I+1][J ][K+1] * w[I+1][J ][K+1] +
2470 x[I ][J ][K+1] * w[I ][J ][K+1] +
2471 x[I+1][J+1][K ] * w[I+1][J+1][K ] +
2472 x[I ][J+1][K ] * w[I ][J+1][K ] +
2473 x[I+1][J ][K ] * w[I+1][J ][K ] +
2474 x[I ][J ][K ] * w[I ][J ][K ] )/
2475 ( w[I+1][J+1][K+1] +
2489 template <
class T1,
class MFLOAT >
2492 Field<T1,1U,UniformCartesian<1U,MFLOAT>,
Vert>& r)
2495 Index I = domain[0];
2496 r[I] = 0.5*(x[I-1] + x[I ]);
2500 template <
class T1,
class MFLOAT >
2503 Field<T1,2U,UniformCartesian<2U,MFLOAT>,
Vert>& r)
2506 Index I = domain[0];
2507 Index J = domain[1];
2508 r[I][J] = 0.25*(x[I-1][J-1] + x[I ][J-1] + x[I-1][J ] + x[I ][J ]);
2512 template <
class T1,
class MFLOAT >
2515 Field<T1,3U,UniformCartesian<3U,MFLOAT>,
Vert>& r)
2518 Index I = domain[0];
2519 Index J = domain[1];
2521 r[I][J][
K] = 0.125*(x[I-1][J-1][K-1] + x[I ][J-1][K-1] + x[I-1][J ][K-1] +
2522 x[I ][J ][K-1] + x[I-1][J-1][
K ] + x[I ][J-1][
K ] +
2523 x[I-1][J ][
K ] + x[I ][J ][
K ]);
2530 template <
class T1,
class MFLOAT >
2534 Field<T1,1U,UniformCartesian<1U,MFLOAT>,
Cell>& r)
2537 Index I = domain[0];
2538 r[I] = 0.5*(x[I+1] + x[I ]);
2542 template <
class T1,
class MFLOAT >
2545 Field<T1,2U,UniformCartesian<2U,MFLOAT>,
Cell>& r)
2548 Index I = domain[0];
2549 Index J = domain[1];
2550 r[I][J] = 0.25*(x[I+1][J+1] + x[I ][J+1] + x[I+1][J ] + x[I ][J ]);
2554 template <
class T1,
class MFLOAT >
2557 Field<T1,3U,UniformCartesian<3U,MFLOAT>,
Cell>& r)
2560 Index I = domain[0];
2561 Index J = domain[1];
2563 r[I][J][
K] = 0.125*(x[I+1][J+1][K+1] + x[I ][J+1][K+1] + x[I+1][J ][K+1] +
2564 x[I ][J ][K+1] + x[I+1][J+1][
K ] + x[I ][J+1][
K ] +
2565 x[I+1][J ][
K ] + x[I ][J ][
K ]);
void PETE_apply(const OpPeriodic< T > &e, T &a, const T &b)
Field< Vektor< MFLOAT, Dim >, Dim, UniformCartesian< Dim, MFLOAT >, Cell > & getCellPositionField(Field< Vektor< MFLOAT, Dim >, Dim, UniformCartesian< Dim, MFLOAT >, Cell > &) const
PETE_TUTree< FnAbs, typename T::PETE_Expr_t > abs(const PETE_Expr< T > &l)
void print(std::ostream &)
ac_id_larray::iterator iterator_if
constexpr double e
The value of .
Vektor< MFLOAT, Dim > getVertexPosition(const NDIndex< Dim > &) const
Vektor< MFLOAT, Dim > getDeltaCell(const NDIndex< Dim > &) const
Vektor< MFLOAT, Dim > get_origin() const
void storeSpacingFields()
const NDIndex< Dim > & getOwned() const
T::PETE_Expr_t::PETE_Return_t max(const PETE_Expr< T > &expr, NDIndex< D > &loc)
Vektor< MFLOAT, Dim > getSurfaceNormal(const NDIndex< Dim > &, unsigned) const
MFLOAT getVertRangeVolume(const NDIndex< Dim > &) const
Field< Vektor< MFLOAT, Dim >, Dim, UniformCartesian< Dim, MFLOAT >, Cell > & getSurfaceNormalField(Field< Vektor< MFLOAT, Dim >, Dim, UniformCartesian< Dim, MFLOAT >, Cell > &, unsigned) const
NDIndex< Dim > AddGuardCells(const NDIndex< Dim > &idx, const GuardCellSizes< Dim > &g)
void assign(const BareField< T, Dim > &a, RHS b, OP op, ExprTag< true >)
MFLOAT getCellRangeVolume(const NDIndex< Dim > &) const
double dot(const Vector3D &lhs, const Vector3D &rhs)
Vector dot product.
Field< Vektor< T, 1U >, 1U, Cartesian< 1U, MFLOAT >, Cell > & Grad(Field< T, 1U, Cartesian< 1U, MFLOAT >, Vert > &x, Field< Vektor< T, 1U >, 1U, Cartesian< 1U, MFLOAT >, Cell > &r)
const iterator & begin() const
unsigned int length() const
NDIndex< Dim > plugBase(const NDIndex< 1 > &i) const
virtual void fillGuardCells(bool reallyFill=true) const
Field< Vektor< MFLOAT, Dim >, Dim, UniformCartesian< Dim, MFLOAT >, Vert > & getVertexPositionField(Field< Vektor< MFLOAT, Dim >, Dim, UniformCartesian< Dim, MFLOAT >, Vert > &) const
MFLOAT get_volume() const
Vektor< MFLOAT, Dim > getCellPosition(const NDIndex< Dim > &) const
unsigned rightGuard(unsigned d) const
void getSurfaceNormalFields(Field< Vektor< MFLOAT, Dim >, Dim, UniformCartesian< Dim, MFLOAT >, Cell > **) const
bool touches(const NDIndex< Dim > &) const
unsigned leftGuard(unsigned d) const
const NDIndex< Dim > & getAllocated() const
Vektor< MFLOAT, Dim > * getSurfaceNormals(const NDIndex< Dim > &) const
void set_origin(const Vektor< MFLOAT, Dim > &o)
void initialize(const NDIndex< Dim > &ndi)
Field< T1, 1U, Cartesian< 1U, MFLOAT >, Vert > & Average(Field< T1, 1U, Cartesian< 1U, MFLOAT >, Cell > &x, Field< T2, 1U, Cartesian< 1U, MFLOAT >, Cell > &w, Field< T1, 1U, Cartesian< 1U, MFLOAT >, Vert > &r)
Field< MFLOAT, Dim, UniformCartesian< Dim, MFLOAT >, Cell > & getCellVolumeField(Field< MFLOAT, Dim, UniformCartesian< Dim, MFLOAT >, Cell > &) const
Field< Vektor< T, 3U >, 3U, UniformCartesian< 3U, MFLOAT >, Cell > & Grad1Ord(Field< T, 3U, UniformCartesian< 3U, MFLOAT >, Vert > &x, Field< Vektor< T, 3U >, 3U, UniformCartesian< 3U, MFLOAT >, Cell > &r)
Old Grad operator.
MFLOAT get_meshSpacing(unsigned d) const
Tenzor< typename PETEBinaryReturn< T1, T2, OpMultipply >::type, D > outerProduct(const Vektor< T1, D > &v1, const Vektor< T2, D > &v2)
NDIndex< Dim > getNearestVertex(const Vektor< MFLOAT, Dim > &) const
NDIndex< Dim > intersect(const NDIndex< Dim > &) const
std::string::iterator iterator
const GuardCellSizes< Dim > & getGuardCellSizes() const
void set_meshSpacing(MFLOAT *const del)
OpUMeshExtrapolate(T &o, T &s)
Field< Vektor< MFLOAT, Dim >, Dim, UniformCartesian< Dim, MFLOAT >, Vert > & getDeltaCellField(Field< Vektor< MFLOAT, Dim >, Dim, UniformCartesian< Dim, MFLOAT >, Vert > &) const
Field< Vektor< MFLOAT, Dim >, Dim, UniformCartesian< Dim, MFLOAT >, Cell > & getDeltaVertexField(Field< Vektor< MFLOAT, Dim >, Dim, UniformCartesian< Dim, MFLOAT >, Cell > &) const
T::PETE_Expr_t::PETE_Return_t min(const PETE_Expr< T > &expr, NDIndex< D > &loc)
double Div(double a, double b)
MFLOAT getCellVolume(const NDIndex< Dim > &) const
NDIndex< Dim > getVertexBelow(const Vektor< MFLOAT, Dim > &) const
Inform & endl(Inform &inf)
Vektor< MFLOAT, Dim > getDeltaVertex(const NDIndex< Dim > &) const