test/parallel-old.cpp

00001 #include "DAPTA.hpp"
00002 
00003 #include <set>
00004 #include <fstream>
00005 #include <iostream>
00006 #include <iomanip>
00007 #undef SEEK_SET
00008 #undef SEEK_CUR
00009 #undef SEEK_END
00010 #include "mpi.h"
00011 using namespace DAPTA;
00012 
00013 #define LENGTH_EXPORT_FILE 0
00014 #define STRING_EXPORT_FILE 1
00015 
00016 typedef Mesh<Tri3MeshTraits> TriMesh;
00017 TriMesh mesh;
00018 RCBDecomposer<TriMesh::VertexType> rcb;
00019 std::vector<TriMesh::VertexHandle> points;
00020 
00021 int main(int argc, char **argv) {
00022    // Setup the mesh
00023    int          myrank, nprocs;
00024    MPI_Status   status;
00025    
00026    // Initialize MPI
00027    MPI_Init(&argc, &argv);
00028 
00029    // Get my rank id and number of MPI processes
00030    MPI_Comm_rank(MPI_COMM_WORLD, &myrank);
00031    MPI_Comm_size(MPI_COMM_WORLD, &nprocs);
00032    
00033    // Load in the complete mesh
00034    mesh.ClearMesh();
00035    std::ifstream meshfile;
00036    int num;
00037    
00038    meshfile.open(argv[1]);
00039    if(!meshfile) {
00040       std::cout << "ERROR READING FILE!" << std::endl;
00041       exit(1);
00042    }
00043    
00044    mesh.ReadFile(meshfile);
00045    meshfile.close();
00046    points = mesh.GetCentres();
00047    
00048    rcb.loadVertices(points);
00049    
00050    std::cout << "client(" << myrank << "): LOADING IN THE MESH FILE..." << std::endl;
00051    std::vector<int> myElems = rcb.decompose(nprocs, myrank);
00052    std::set<TriMesh::VertexHandle> part_vert;
00053    std::set<TriMesh::ElementHandle> part_elem;
00054    std::string export_file;
00055    
00056    for(std::vector<int>::iterator j=myElems.begin(); j!=myElems.end(); ++j) {
00057    TriMesh::ElementHandle this_elem = mesh.FindElementFromIndex(*j);
00058       part_elem.insert(this_elem);
00059       for(int k=0; k<TriMesh::ElementType::num_vertices; k++) {
00060          part_vert.insert(this_elem->vertices.at(k));
00061       }
00062    }
00063    
00064    myElems.clear();
00065    
00066    // Now load in the domain mesh
00067    std::cout << "client(" << myrank << "): READING MY DOMAIN..." << std::endl;
00068    export_file = mesh.ExportDomainFile(part_vert, part_elem);
00069    part_vert.clear();
00070    part_elem.clear();
00071    std::stringstream export_file_stream;
00072    export_file_stream.str(export_file);
00073    
00074    mesh.ClearMesh();
00075    mesh.ReadFile(export_file_stream);
00076    
00077    std::cout << "client(" << myrank << "): ================================================" << std::endl;
00078    for(TriMesh::VertexMapIterator v_iter=mesh.VertexMapBegin(); v_iter!=mesh.VertexMapEnd(); ++v_iter) {
00079       std::cout << std::setprecision(4);
00080       std::cout << "client(" << myrank << "): " << (*v_iter)->globalID << "\t";
00081       for(int i=0; i<TriMesh::VertexType::dimension; i++) {
00082          std::cout << (*v_iter)->coords.at(i) << "\t";
00083       }
00084       std::cout << (*v_iter) << std::endl;
00085    }
00086    std::cout << "client(" << myrank << "): " << std::endl;
00087    for(TriMesh::ElementMapIterator e_iter=mesh.ElementMapBegin(); e_iter!=mesh.ElementMapEnd(); ++e_iter) {
00088       std::cout << "client(" << myrank << "): " << (*e_iter)->globalID << "\t";
00089       for(int i=0; i<TriMesh::ElementType::num_vertices; i++) {
00090          std::cout << (*e_iter)->vertices.at(i)->globalID << "\t";
00091       }
00092       std::cout << (*e_iter) << std::endl;
00093    }
00094    std::cout << "client(" << myrank << "): ================================================" << std::endl;
00095    
00096    std::cout << "client(" << myrank << "): WAITING FOR ALL PROCESSES..." << std::endl;
00097    MPI_Barrier(MPI_COMM_WORLD);
00098    
00099    // ********************
00100    // * BEGIN FEM CODE
00101    // ********************
00102    
00103    
00104    
00105    // ********************
00106    // * END FEM CODE
00107    // ********************
00108    
00109    // Shut Down MPI
00110    MPI_Finalize();
00111    
00112    return 0;
00113 }

Generated on Tue May 29 17:13:49 2007 for DAPTA by  doxygen 1.5.1