![]() |
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