int main(int argc, char *argv[]) { // Fill fuse_operations structure tffs_oper.getattr = tffs_getattr; tffs_oper.readdir = tffs_readdir; tffs_oper.open = tffs_open; tffs_oper.read = tffs_read; tffs_oper.statfs = tffs_statfs; // Extract device name from command line char **newargv = (char **) malloc((argc + 2) * sizeof(char *)); char *device = NULL; int newargc = 1; newargv[newargc++] = strdup("-r"); for (int i = 1; i < argc; ++i) { if (argv[i][0] != '-' && !device) device = argv[i]; else newargv[newargc++] = argv[i]; } if (!device) usage(argv[0]); newargv[0] = device; // Create tfdisk object tfdisk tfd(device); tf = &tfd; if (tfd.open()) { //fprintf(stderr,"%s: %s\n",argv[0],strerror(errno)); exit(1); } // Run FUSE main loop newargv[newargc] = NULL; return fuse_main(newargc, newargv, &tffs_oper); }
void testSymmetrize(Pooma::Tester &tester) { tester.out() << std::endl << "========= " << D << "D =========" << std::endl; // Create Full, Antisymmetric, Symmetric, and Diagonal Tensors as inputs: Tensor<D,double,Full> tf; double value = 1.0; for (int i = 0; i < D; i++) { for (int j = 0; j < D; j++) { tf(i,j) = value; value++; } } tester.out() << "tf: " << tf << std::endl; Tensor<D,double,Antisymmetric> ta; value = 1.0; for (int i = 0; i < TensorStorageSize<D,Antisymmetric>::Size; i++) { ta(i) = i + 1.0; } tester.out() << "ta: " << ta << std::endl; Tensor<D,double,Symmetric> ts; for (int i = 0; i < TensorStorageSize<D,Symmetric>::Size; i++) { ts(i) = i + 1.0; } tester.out() << "ts: " << ts << std::endl; Tensor<D,double,Diagonal> td; for (int i = 0; i < TensorStorageSize<D,Diagonal>::Size; i++) { td(i) = i + 1.0; } tester.out() << "td: " << td << std::endl; //--------------------------------------------------------------------------- // Make Fields of these types, to test forwarding of symmetrize<>() function: // Create the physical Domains: const int nVerts = 6; const int nCells = nVerts - 1; int nCellsTot = 1; Interval<D> vertexDomain; for (int d = 0; d < D; d++) { vertexDomain[d] = Interval<1>(nVerts); nCellsTot *= nCells; } // Create the (uniform, logically rectilinear) mesh. Vector<D> origin(0.0), spacings(0.2); typedef UniformRectilinearMesh<D> Mesh_t; DomainLayout<D> layout(vertexDomain, GuardLayers<D>(0)); // Create the Fields: Centering<D> cell = canonicalCentering<D>(CellType, Continuous); // Full, Antisymmetric, Symmetric, Diagonal Tensor Fields: Field<Mesh_t,Tensor<D,double,Full> > tff(cell, layout, origin, spacings); Field<Mesh_t,Tensor<D,double,Symmetric> > tfs(cell, layout, origin, spacings); Field<Mesh_t,Tensor<D,double,Antisymmetric> > tfa(cell, layout, origin, spacings); Field<Mesh_t,Tensor<D,double,Diagonal> > tfd(cell, layout, origin, spacings); // Assign to the single-Tensor values: tff = tf; tfs = ts; tfa = ta; tfd = td; #ifndef __MWERKS__ // This whole module is too much for CW5 to compile // -------------------------------------------------------------------------- // Symmetrize from Full tensor to {Antisymmetric, Symmetric, Diagonal}: // To Antisymmetric: if (!tester.check("symmetrize<Antisymmetric>(tf): ", (symmetrize<Antisymmetric>(tf) == makeAntisymmetric(tf)))) { tester.out() << "symmetrize<Antisymmetric>(tf) = " << symmetrize<Antisymmetric>(tf) << " != makeAntisymmetric(tf) = " << makeAntisymmetric(tf) << std::endl; } if (!tester.check("sum(symmetrize<Antisymmetric>(tff)): ", (sum(symmetrize<Antisymmetric>(tff)) == nCellsTot*makeAntisymmetric(tf)))) { tester.out() << "sum(symmetrize<Antisymmetric>(tff)) = " << sum(symmetrize<Antisymmetric>(tff)) << " != nCellsTot*makeAntisymmetric(tf) = " << nCellsTot*makeAntisymmetric(tf) << std::endl; } // To Symmetric: if (!tester.check("symmetrize<Symmetric>(tf): ", (symmetrize<Symmetric>(tf) == makeSymmetric(tf)))) { tester.out() << "symmetrize<Symmetric>(tf) = " << symmetrize<Symmetric>(tf) << " != makeSymmetric(tf) = " << makeSymmetric(tf) << std::endl; } if (!tester.check("sum(symmetrize<Symmetric>(tff)): ", (sum(symmetrize<Symmetric>(tff)) == nCellsTot*makeSymmetric(tf)))) { tester.out() << "sum(symmetrize<Symmetric>(tff)) = " << sum(symmetrize<Symmetric>(tff)) << " != nCellsTot*makeSymmetric(tf) = " << nCellsTot*makeSymmetric(tf) << std::endl; } // To Diagonal:: if (!tester.check("symmetrize<Diagonal>(tf): ", (symmetrize<Diagonal>(tf) == makeDiagonal(tf)))) { tester.out() << "symmetrize<Diagonal>(tf) = " << symmetrize<Diagonal>(tf) << " != makeDiagonal(tf) = " << makeDiagonal(tf) << std::endl; } if (!tester.check("sum(symmetrize<Diagonal>(tff)): ", (sum(symmetrize<Diagonal>(tff)) == nCellsTot*makeDiagonal(tf)))) { tester.out() << "sum(symmetrize<Diagonal>(tff)) = " << sum(symmetrize<Diagonal>(tff)) << " != nCellsTot*makeDiagonal(tf) = " << nCellsTot*makeDiagonal(tf) << std::endl; } // -------------------------------------------------------------------------- // Symmetrize from Antisymmetric tensor to {Full, Symmetric, Diagonal}: // To Full: if (!tester.check("symmetrize<Full>(ta): ", (symmetrize<Full>(ta) == makeFull(ta)))) { tester.out() << "symmetrize<Full>(ta) = " << symmetrize<Full>(ta) << " != makeFull(ta) = " << makeFull(ta) << std::endl; } if (!tester.check("sum(symmetrize<Full>(tfa)): ", (sum(symmetrize<Full>(tfa)) == nCellsTot*makeFull(ta)))) { tester.out() << "sum(symmetrize<Full>(tfa)) = " << sum(symmetrize<Full>(tfa)) << " != nCellsTot*makeFull(ta) = " << nCellsTot*makeFull(ta) << std::endl; } // To Symmetric: if (!tester.check("symmetrize<Symmetric>(ta): ", (symmetrize<Symmetric>(ta) == makeSymmetric(ta)))) { tester.out() << "symmetrize<Symmetric>(ta) = " << symmetrize<Symmetric>(ta) << " != makeSymmetric(ta) = " << makeSymmetric(ta) << std::endl; } if (!tester.check("sum(symmetrize<Symmetric>(tfa)): ", (sum(symmetrize<Symmetric>(tfa)) == nCellsTot*makeSymmetric(ta)))) { tester.out() << "sum(symmetrize<Symmetric>(tfa)) = " << sum(symmetrize<Symmetric>(tfa)) << " != nCellsTot*makeSymmetric(ta) = " << nCellsTot*makeSymmetric(ta) << std::endl; } // To Diagonal:: if (!tester.check("symmetrize<Diagonal>(ta): ", (symmetrize<Diagonal>(ta) == makeDiagonal(ta)))) { tester.out() << "symmetrize<Diagonal>(ta) = " << symmetrize<Diagonal>(ta) << " != makeDiagonal(ta) = " << makeDiagonal(ta) << std::endl; } if (!tester.check("sum(symmetrize<Diagonal>(tfa)): ", (sum(symmetrize<Diagonal>(tfa)) == nCellsTot*makeDiagonal(ta)))) { tester.out() << "sum(symmetrize<Diagonal>(tfa)) = " << sum(symmetrize<Diagonal>(tfa)) << " != nCellsTot*makeDiagonal(ta) = " << nCellsTot*makeDiagonal(ta) << std::endl; } #endif // __MWERKS__ // -------------------------------------------------------------------------- // Symmetrize from Symmetric tensor to {Full, Antisymmetric, Diagonal}: // To Full: if (!tester.check("symmetrize<Full>(ts): ", (symmetrize<Full>(ts) == makeFull(ts)))) { tester.out() << "symmetrize<Full>(ts) = " << symmetrize<Full>(ts) << " != makeFull(ts) = " << makeFull(ts) << std::endl; } if (!tester.check("sum(symmetrize<Full>(tfs)): ", (sum(symmetrize<Full>(tfs)) == nCellsTot*makeFull(ts)))) { tester.out() << "sum(symmetrize<Full>(tfs)) = " << sum(symmetrize<Full>(tfs)) << " != nCellsTot*makeFull(ts) = " << nCellsTot*makeFull(ts) << std::endl; } // To Antisymmetric: if (!tester.check("symmetrize<Antisymmetric>(ts): ", (symmetrize<Antisymmetric>(ts) == makeAntisymmetric(ts)))) { tester.out() << "symmetrize<Antisymmetric>(ts) = " << symmetrize<Antisymmetric>(ts) << " != makeAntisymmetric(ts) = " << makeAntisymmetric(ts) << std::endl; } if (!tester.check("sum(symmetrize<Antisymmetric>(tfs)): ", (sum(symmetrize<Antisymmetric>(tfs)) == nCellsTot*makeAntisymmetric(ts)))) { tester.out() << "sum(symmetrize<Antisymmetric>(tfs)) = " << sum(symmetrize<Antisymmetric>(tfs)) << " != nCellsTot*makeAntisymmetric(ts) = " << nCellsTot*makeAntisymmetric(ts) << std::endl; } // To Diagonal:: if (!tester.check("symmetrize<Diagonal>(ts): ", (symmetrize<Diagonal>(ts) == makeDiagonal(ts)))) { tester.out() << "symmetrize<Diagonal>(ts) = " << symmetrize<Diagonal>(ts) << " != makeDiagonal(ts) = " << makeDiagonal(ts) << std::endl; } if (!tester.check("sum(symmetrize<Diagonal>(tfs)): ", (sum(symmetrize<Diagonal>(tfs)) == nCellsTot*makeDiagonal(ts)))) { tester.out() << "sum(symmetrize<Diagonal>(tfs)) = " << sum(symmetrize<Diagonal>(tfs)) << " != nCellsTot*makeDiagonal(ts) = " << nCellsTot*makeDiagonal(ts) << std::endl; } // -------------------------------------------------------------------------- // Symmetrize from Diagonal tensor to {Full, Antisymmetric, Symmetric}: // To Full: if (!tester.check("symmetrize<Full>(td): ", (symmetrize<Full>(td) == makeFull(td)))) { tester.out() << "symmetrize<Full>(td) = " << symmetrize<Full>(td) << " != makeFull(td) = " << makeFull(td) << std::endl; } if (!tester.check("sum(symmetrize<Full>(tfd)): ", (sum(symmetrize<Full>(tfd)) == nCellsTot*makeFull(td)))) { tester.out() << "sum(symmetrize<Full>(tfd)) = " << sum(symmetrize<Full>(tfd)) << " != nCellsTot*makeFull(td) = " << nCellsTot*makeFull(td) << std::endl; } // To Antisymmetric: if (!tester.check("symmetrize<Antisymmetric>(td): ", (symmetrize<Antisymmetric>(td) == makeAntisymmetric(td)))) { tester.out() << "symmetrize<Antisymmetric>(td) = " << symmetrize<Antisymmetric>(td) << " != makeAntisymmetric(td) = " << makeAntisymmetric(td) << std::endl; } if (!tester.check("sum(symmetrize<Antisymmetric>(tfd)): ", (sum(symmetrize<Antisymmetric>(tfd)) == nCellsTot*makeAntisymmetric(td)))) { tester.out() << "sum(symmetrize<Antisymmetric>(tfd)) = " << sum(symmetrize<Antisymmetric>(tfd)) << " != nCellsTot*makeAntisymmetric(td) = " << nCellsTot*makeAntisymmetric(td) << std::endl; } // To Symmetric: if (!tester.check("symmetrize<Symmetric>(td): ", (symmetrize<Symmetric>(td) == makeSymmetric(td)))) { tester.out() << "symmetrize<Symmetric>(td) = " << symmetrize<Symmetric>(td) << " != makeSymmetric(td) = " << makeSymmetric(td) << std::endl; } if (!tester.check("sum(symmetrize<Symmetric>(tfd)): ", (sum(symmetrize<Symmetric>(tfd)) == nCellsTot*makeSymmetric(td)))) { tester.out() << "sum(symmetrize<Symmetric>(tfd)) = " << sum(symmetrize<Symmetric>(tfd)) << " != nCellsTot*makeSymmetric(td) = " << nCellsTot*makeSymmetric(td) << std::endl; } }
void testTrace(Pooma::Tester &tester) { // Create the physical Domains: const int nVerts = 6; const int nCells = nVerts - 1; int nCellsTot = 1; Interval<Dim> vertexDomain; for (int d = 0; d < Dim; d++) { vertexDomain[d] = Interval<1>(nVerts); nCellsTot *= nCells; } // Create the (uniform, logically rectilinear) mesh. Vector<Dim> origin(0.0), spacings(0.2); typedef UniformRectilinearMesh<Dim> Mesh_t; DomainLayout<Dim> layout(vertexDomain, GuardLayers<Dim>(0)); // Create the Fields: Centering<Dim> cell = canonicalCentering<Dim>(CellType, Continuous); // Full, Antisymmetric, Symmetric, Diagonal Tensor Fields: Field<Mesh_t,Tensor<Dim,double,Full> > tff(cell, layout, origin, spacings); Field<Mesh_t,Tensor<Dim,double,Antisymmetric> > tfa(cell, layout, origin, spacings); Field<Mesh_t,Tensor<Dim,double,Symmetric> > tfs(cell, layout, origin, spacings); Field<Mesh_t,Tensor<Dim,double,Diagonal> > tfd(cell, layout, origin, spacings); // Assign values: Tensor<Dim,double,Full> tf(0.0); Tensor<Dim,double,Antisymmetric> ta(0.0); Tensor<Dim,double,Symmetric> ts(0.0); Tensor<Dim,double,Diagonal> td(0.0); double fullSymDiagTrace = 0.0; for (int i = 0; i < Dim; i++) { for (int j = 0; j < Dim; j++) { tf(i,j) = (i+1)*(i+1) + (j+1)*(j+1) + (i+4)*(j+4) + i; if (i == j) fullSymDiagTrace += tf(i,j); } } // tester.out() << "tf = " << tf << std::endl; ta = symmetrize<Antisymmetric>(tf); ts = symmetrize<Symmetric>(tf); td = symmetrize<Diagonal>(tf); tff = tf; tfa = ta; tfs = ts; tfd = td; // Test trace of Full Tensor: double traceValue; traceValue = sum(trace(tff)); tester.out() << "traceValue = sum(trace(tff)): " << traceValue << std::endl; tester.check("traceValue", traceValue, fullSymDiagTrace*nCellsTot); // Test trace of Symmetric Tensor: traceValue = sum(trace(tfs)); if (!tester.check("traceValue", traceValue, fullSymDiagTrace*nCellsTot)) { tester.out() << Dim << "D, sum(trace(tfs)): " << traceValue << " != fullSymDiagTrace*nCellsTot = " << fullSymDiagTrace*nCellsTot << std::endl; } // Test trace of Antisymmetric Tensor: traceValue = sum(trace(tfa)); if (!tester.check("traceValue", traceValue, 0.0*nCellsTot)) { tester.out() << Dim << "D, sum(trace(tfa)): " << traceValue << " != 0.0" << std::endl; } // Test trace of Diagonal Tensor: traceValue = sum(trace(tfd)); if (!tester.check("traceValue", traceValue, fullSymDiagTrace*nCellsTot)) { tester.out() << Dim << "D, sum(trace(tfd)): " << traceValue << " != fullSymDiagTrace*nCellsTot = " << fullSymDiagTrace*nCellsTot << std::endl; } }