https://mooseframework.inl.gov
Static Public Member Functions | Static Private Attributes | List of all members
AbaqusUtils Class Reference

Utility class to interface between the object oriented MOOSE app structure and global Abaqus utility functions. More...

#include <AbaqusUtils.h>

Static Public Member Functions

static void setInputFile (const std::string &input_file)
 Global storage for the simulation output directory, this will be set by any Abaqus class. More...
 
static std::string getOutputDir ()
 
static std::string getJobName ()
 
static void setCommunicator (const libMesh::Parallel::Communicator *communicator)
 Global storage for the MPI communicator, this will be set by any Abaqus class. More...
 
static const libMesh::Parallel::CommunicatorgetCommunicator ()
 
template<typename T >
static std::map< int, std::vector< T > >::iterator getSMAIterator (std::map< int, std::vector< T >> &array, int id, const std::string &function)
 get data vector iterator with error checking More...
 
template<typename T >
static std::map< int, std::vector< T > > & getSMAThreadArray (std::vector< std::map< int, std::vector< T >>> &local_array, const std::string &function)
 get thread local array More...
 
static void smaInitialize ()
 thread storage initialization More...
 
static void mutexInit (std::size_t n)
 Mutex API. More...
 
static void mutexLock (std::size_t n)
 
static void mutexUnlock (std::size_t n)
 

Static Public Attributes

static std::map< int, std::vector< int > > _sma_int_array
 Shared Memory Arrays. More...
 
static std::map< int, std::vector< Real > > _sma_float_array
 
static std::vector< std::map< int, std::vector< int > > > _sma_local_int_array
 
static std::vector< std::map< int, std::vector< Real > > > _sma_local_float_array
 

Static Private Attributes

static std::array< std::unique_ptr< Threads::spin_mutex >, 101 > _mutex = {{nullptr}}
 
static std::string _output_dir = ""
 
static std::string _job_name = ""
 
static const libMesh::Parallel::Communicator_communicator = nullptr
 

Detailed Description

Utility class to interface between the object oriented MOOSE app structure and global Abaqus utility functions.

The class encapsulates static members for intermediate data storage.

Definition at line 19 of file AbaqusUtils.h.

Member Function Documentation

◆ getCommunicator()

static const libMesh::Parallel::Communicator* AbaqusUtils::getCommunicator ( )
inlinestatic

Definition at line 35 of file AbaqusUtils.h.

Referenced by get_communicator(), getnumcpus_(), and getrank_().

35 { return _communicator; }
static const libMesh::Parallel::Communicator * _communicator
Definition: AbaqusUtils.h:67

◆ getJobName()

static std::string AbaqusUtils::getJobName ( )
inlinestatic

Definition at line 28 of file AbaqusUtils.h.

Referenced by getjobname_().

28 { return _job_name; }
static std::string _job_name
Definition: AbaqusUtils.h:66

◆ getOutputDir()

static std::string AbaqusUtils::getOutputDir ( )
inlinestatic

Definition at line 27 of file AbaqusUtils.h.

Referenced by getoutdir_().

27 { return _output_dir; }
static std::string _output_dir
Definition: AbaqusUtils.h:65

◆ getSMAIterator()

template<typename T >
std::map< int, std::vector< T > >::iterator AbaqusUtils::getSMAIterator ( std::map< int, std::vector< T >> &  array,
int  id,
const std::string &  function 
)
static

get data vector iterator with error checking

Definition at line 72 of file AbaqusUtils.h.

Referenced by SMAFloatArrayAccess(), SMAFloatArrayDelete(), SMAFloatArraySize(), SMAIntArrayAccess(), SMAIntArrayDelete(), SMAIntArraySize(), SMALocalFloatArrayAccess(), SMALocalFloatArrayDelete(), SMALocalFloatArraySize(), SMALocalIntArrayAccess(), SMALocalIntArrayDelete(), and SMALocalIntArraySize().

75 {
76  auto it = array.find(id);
77  if (it == array.end())
78  mooseError("Invalid id ", id, " in ", function, ".");
79  return it;
80 }
void mooseError(Args &&... args)

◆ getSMAThreadArray()

template<typename T >
std::map< int, std::vector< T > > & AbaqusUtils::getSMAThreadArray ( std::vector< std::map< int, std::vector< T >>> &  local_array,
const std::string &  function 
)
static

get thread local array

Definition at line 84 of file AbaqusUtils.h.

Referenced by SMALocalFloatArrayAccess(), SMALocalFloatArrayCreate(), SMALocalFloatArrayDelete(), SMALocalFloatArraySize(), SMALocalIntArrayAccess(), SMALocalIntArrayCreate(), SMALocalIntArrayDelete(), and SMALocalIntArraySize().

86 {
87  ParallelUniqueId puid;
88  if (puid.id >= local_array.size())
89  mooseError("SMA storage not properly initialized in ", function, ".");
90  return local_array[puid.id];
91 }
void mooseError(Args &&... args)

◆ mutexInit()

void AbaqusUtils::mutexInit ( std::size_t  n)
static

Mutex API.

Definition at line 358 of file AbaqusUtils.C.

Referenced by MutexInit().

359 {
360  // Guard the initialization with a double checked lock
361  if (!_mutex[n])
362  {
363  Threads::spin_mutex::scoped_lock lock(Threads::spin_mtx);
364  if (!_mutex[n])
365  _mutex[n] = std::make_unique<Threads::spin_mutex>();
366  }
367 }
static std::array< std::unique_ptr< Threads::spin_mutex >, 101 > _mutex
Definition: AbaqusUtils.h:64

◆ mutexLock()

void AbaqusUtils::mutexLock ( std::size_t  n)
static

Definition at line 370 of file AbaqusUtils.C.

Referenced by MutexLock().

371 {
372  if (n >= _mutex.size() || !_mutex[n])
373  mooseError("Invalid or uninitialized mutex ", n);
374  _mutex[n]->lock();
375 }
static std::array< std::unique_ptr< Threads::spin_mutex >, 101 > _mutex
Definition: AbaqusUtils.h:64
void mooseError(Args &&... args)

◆ mutexUnlock()

void AbaqusUtils::mutexUnlock ( std::size_t  n)
static

Definition at line 378 of file AbaqusUtils.C.

Referenced by MutexUnlock().

379 {
380  if (n >= _mutex.size() || !_mutex[n])
381  mooseError("Invalid or uninitialized mutex ", n);
382  _mutex[n]->unlock();
383 }
static std::array< std::unique_ptr< Threads::spin_mutex >, 101 > _mutex
Definition: AbaqusUtils.h:64
void mooseError(Args &&... args)

◆ setCommunicator()

void AbaqusUtils::setCommunicator ( const libMesh::Parallel::Communicator communicator)
static

Global storage for the MPI communicator, this will be set by any Abaqus class.

MOOSE will throw a warning if multiple objects try to set this to different values.

Definition at line 19 of file AbaqusUtils.C.

Referenced by AbaqusUExternalDB::AbaqusUExternalDB().

20 {
21  if (_communicator != nullptr && communicator != _communicator)
22  mooseWarning("Conflicting MPI communicators specified in Abaqus compatibility objects. Are you "
23  "running a multiapps simulation?");
24 
26 }
void mooseWarning(Args &&... args)
static const libMesh::Parallel::Communicator * _communicator
Definition: AbaqusUtils.h:67
DIE A HORRIBLE DEATH HERE typedef MPI_Comm communicator

◆ setInputFile()

void AbaqusUtils::setInputFile ( const std::string &  input_file)
static

Global storage for the simulation output directory, this will be set by any Abaqus class.

MOOSE will throw a warning if multiple objects try to set this to different values.

Definition at line 70 of file AbaqusUtils.C.

Referenced by AbaqusUExternalDB::AbaqusUExternalDB().

71 {
72  auto split = MooseUtils::splitFileName(input_file);
73  auto output_dir = split.first;
74  auto job_name = MooseUtils::stripExtension(split.second);
75 
76  if (!_output_dir.empty() && output_dir != _output_dir)
77  mooseWarning("Conflicting output directories specified in Abaqus compatibility objects: ",
78  output_dir,
79  " != ",
81  ". Are you running a multiapps simulation?");
82 
83  if (!_job_name.empty() && job_name != _job_name)
84  mooseWarning("Conflicting job names specified in Abaqus compatibility objects: ",
85  job_name,
86  " != ",
87  _job_name,
88  ". Are you running a multiapps simulation?");
89 
90  _output_dir = output_dir;
91  _job_name = job_name;
92 }
void mooseWarning(Args &&... args)
std::pair< std::filesystem::path, std::filesystem::path > splitFileName(const T &full_file)
std::string stripExtension(const std::string &s, const bool rfind=false)
static std::string _output_dir
Definition: AbaqusUtils.h:65
static std::string _job_name
Definition: AbaqusUtils.h:66
tbb::split split

◆ smaInitialize()

void AbaqusUtils::smaInitialize ( )
static

thread storage initialization

Definition at line 188 of file AbaqusUtils.C.

Referenced by SMALocalFloatArrayCreate(), and SMALocalIntArrayCreate().

189 {
190  static bool initialized = false;
191 
192  // Guard the initialization with a double checked lock
193  if (!initialized)
194  {
195  Threads::spin_mutex::scoped_lock lock(Threads::spin_mtx);
196  if (!initialized)
197  {
198  const auto n = getnumthreads_();
199  _sma_local_int_array.resize(n);
200  _sma_local_float_array.resize(n);
201  initialized = true;
202  }
203  }
204 }
int getnumthreads_()
Definition: AbaqusUtils.C:52
static std::vector< std::map< int, std::vector< Real > > > _sma_local_float_array
Definition: AbaqusUtils.h:55
bool initialized()
static std::vector< std::map< int, std::vector< int > > > _sma_local_int_array
Definition: AbaqusUtils.h:54

Member Data Documentation

◆ _communicator

const libMesh::Parallel::Communicator * AbaqusUtils::_communicator = nullptr
staticprivate

Definition at line 67 of file AbaqusUtils.h.

Referenced by getCommunicator(), and setCommunicator().

◆ _job_name

std::string AbaqusUtils::_job_name = ""
staticprivate

Definition at line 66 of file AbaqusUtils.h.

Referenced by getJobName(), and setInputFile().

◆ _mutex

std::array< std::unique_ptr< Threads::spin_mutex >, 101 > AbaqusUtils::_mutex = {{nullptr}}
staticprivate

Definition at line 64 of file AbaqusUtils.h.

Referenced by mutexInit(), mutexLock(), and mutexUnlock().

◆ _output_dir

std::string AbaqusUtils::_output_dir = ""
staticprivate

Definition at line 65 of file AbaqusUtils.h.

Referenced by getOutputDir(), and setInputFile().

◆ _sma_float_array

std::map< int, std::vector< Real > > AbaqusUtils::_sma_float_array
static

◆ _sma_int_array

std::map< int, std::vector< int > > AbaqusUtils::_sma_int_array
static

Shared Memory Arrays.

Definition at line 52 of file AbaqusUtils.h.

Referenced by SMAIntArrayAccess(), SMAIntArrayCreate(), SMAIntArrayDelete(), and SMAIntArraySize().

◆ _sma_local_float_array

std::vector< std::map< int, std::vector< Real > > > AbaqusUtils::_sma_local_float_array
static

◆ _sma_local_int_array

std::vector< std::map< int, std::vector< int > > > AbaqusUtils::_sma_local_int_array
static

The documentation for this class was generated from the following files: