Mesh Oriented datABase
(version 5.4.1)
Array-based unstructured mesh datastructure
|
00001 /** 00002 * MOAB, a Mesh-Oriented datABase, is a software component for creating, 00003 * storing and accessing finite element mesh data. 00004 * 00005 * Copyright 2004 Sandia Corporation. Under the terms of Contract 00006 * DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government 00007 * retains certain rights in this software. 00008 * 00009 * This library is free software; you can redistribute it and/or 00010 * modify it under the terms of the GNU Lesser General Public 00011 * License as published by the Free Software Foundation; either 00012 * version 2.1 of the License, or (at your option) any later version. 00013 * 00014 */ 00015 00016 #ifndef MOAB_PROC_CONFIG_HPP 00017 #define MOAB_PROC_CONFIG_HPP 00018 00019 #include "moab_mpi.h" 00020 00021 #include "moab/Types.hpp" 00022 #include "moab/Range.hpp" 00023 #include "moab/gs.hpp" 00024 00025 namespace moab 00026 { 00027 00028 class Interface; 00029 00030 /**\brief Multi-CPU information for parallel MOAB */ 00031 class ProcConfig 00032 { 00033 public: 00034 ProcConfig( MPI_Comm proc_comm ); 00035 00036 ~ProcConfig(); 00037 00038 //! Get the current processor number 00039 unsigned proc_rank() const 00040 { 00041 return procRank; 00042 } 00043 00044 //! Get the number of processors 00045 unsigned proc_size() const 00046 { 00047 return procSize; 00048 } 00049 00050 //! get a crystal router for this parallel job 00051 gs_data::crystal_data* crystal_router( bool construct_if_missing = true ); 00052 00053 //! get/set the communicator for this proc config 00054 MPI_Comm proc_comm() const 00055 { 00056 return procComm; 00057 } 00058 void proc_comm( MPI_Comm this_comm ) 00059 { 00060 procComm = this_comm; 00061 } 00062 00063 //! set rank/size; USED FOR TESTING ONLY! 00064 void proc_rank( unsigned r ) 00065 { 00066 procRank = r; 00067 } 00068 void proc_size( unsigned s ) 00069 { 00070 procSize = s; 00071 } 00072 00073 private: 00074 //! MPI communicator set for this instance 00075 MPI_Comm procComm; 00076 00077 //! rank of this processor 00078 unsigned procRank; 00079 00080 //! number of processors 00081 unsigned procSize; 00082 00083 //! crystal router for this parallel job 00084 gs_data::crystal_data* crystalData; 00085 }; 00086 00087 } // namespace moab 00088 00089 #endif