![]() |
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 #include "moab/ProcConfig.hpp"
00017 #include "moab/gs.hpp"
00018
00019 namespace moab
00020 {
00021
00022 //! Constructor
00023 ProcConfig::ProcConfig( MPI_Comm proc_comm1 ) : procComm( proc_comm1 ), crystalData( 0 )
00024 {
00025 #ifdef MOAB_HAVE_MPI
00026 int rank, size;
00027 MPI_Comm_rank( procComm, &rank );
00028 procRank = (unsigned int)rank;
00029 MPI_Comm_size( procComm, &size );
00030 procSize = (unsigned int)size;
00031 #else
00032 procRank = 0;
00033 procSize = 1;
00034 #endif
00035 }
00036
00037 gs_data::crystal_data* ProcConfig::crystal_router( bool construct_if_missing )
00038 {
00039 #ifdef MOAB_HAVE_MPI
00040 if( !crystalData && construct_if_missing )
00041 {
00042 crystalData = new gs_data::crystal_data( procComm );
00043 }
00044 #endif
00045
00046 return crystalData;
00047 }
00048
00049 ProcConfig::~ProcConfig()
00050 {
00051 if( crystalData )
00052 {
00053 #ifdef MOAB_HAVE_MPI
00054 crystalData->reset();
00055 #endif
00056 delete crystalData;
00057 crystalData = 0;
00058 }
00059 }
00060
00061 } // namespace moab