https://mooseframework.inl.gov
Loading...
Searching...
No Matches
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.
 
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.
 
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
 
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
 
static void smaInitialize ()
 thread storage initialization
 
static void mutexInit (std::size_t n)
 Mutex API.
 
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.
 
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.

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

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

◆ getJobName()

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

Definition at line 28 of file AbaqusUtils.h.

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

Referenced by getjobname_().

◆ getOutputDir()

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

Definition at line 27 of file AbaqusUtils.h.

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

Referenced by getoutdir_().

◆ 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.

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)

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

◆ 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.

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

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

◆ mutexInit()

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

Mutex API.

Definition at line 358 of file AbaqusUtils.C.

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

Referenced by MutexInit().

◆ mutexLock()

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

Definition at line 370 of file AbaqusUtils.C.

371{
372 if (n >= _mutex.size() || !_mutex[n])
373 mooseError("Invalid or uninitialized mutex ", n);
374 _mutex[n]->lock();
375}

Referenced by MutexLock().

◆ mutexUnlock()

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

Definition at line 378 of file AbaqusUtils.C.

379{
380 if (n >= _mutex.size() || !_mutex[n])
381 mooseError("Invalid or uninitialized mutex ", n);
382 _mutex[n]->unlock();
383}

Referenced by MutexUnlock().

◆ 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.

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)
DIE A HORRIBLE DEATH HERE typedef MPI_Comm communicator

Referenced by AbaqusUExternalDB::AbaqusUExternalDB().

◆ 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.

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 " != ",
88 ". Are you running a multiapps simulation?");
89
90 _output_dir = output_dir;
91 _job_name = job_name;
92}
std::string stripExtension(const std::string &s, const bool rfind)
tbb::split split

Referenced by AbaqusUExternalDB::AbaqusUExternalDB().

◆ smaInitialize()

void AbaqusUtils::smaInitialize ( )
static

thread storage initialization

Definition at line 188 of file AbaqusUtils.C.

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
static std::vector< std::map< int, std::vector< int > > > _sma_local_int_array
Definition AbaqusUtils.h:54
bool initialized()

Referenced by SMALocalFloatArrayCreate(), and SMALocalIntArrayCreate().

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 355 of file AbaqusUtils.h.

374{
375public:
380 static void setInputFile(const std::string & input_file);
381 static std::string getOutputDir() { return _output_dir; }
382 static std::string getJobName() { return _job_name; }
383
388 static void setCommunicator(const libMesh::Parallel::Communicator * communicator);
390
392 template <typename T>
393 static typename std::map<int, std::vector<T>>::iterator
394 getSMAIterator(std::map<int, std::vector<T>> & array, int id, const std::string & function);
395
397 template <typename T>
398 static typename std::map<int, std::vector<T>> &
399 getSMAThreadArray(std::vector<std::map<int, std::vector<T>>> & local_array,
400 const std::string & function);
401
403 static void smaInitialize();
404
406 static std::map<int, std::vector<int>> _sma_int_array;
407 static std::map<int, std::vector<Real>> _sma_float_array;
408 static std::vector<std::map<int, std::vector<int>>> _sma_local_int_array;
409 static std::vector<std::map<int, std::vector<Real>>> _sma_local_float_array;
411
413 static void mutexInit(std::size_t n);
414 static void mutexLock(std::size_t n);
415 static void mutexUnlock(std::size_t n);
417private:
418 static std::array<std::unique_ptr<Threads::spin_mutex>, 101> _mutex;
419 static std::string _output_dir;
420 static std::string _job_name;
422};
423
424template <typename T>
425typename std::map<int, std::vector<T>>::iterator
426AbaqusUtils::getSMAIterator(std::map<int, std::vector<T>> & array,
427 int id,
428 const std::string & function)
429{
430 auto it = array.find(id);
431 if (it == array.end())
432 mooseError("Invalid id ", id, " in ", function, ".");
433 return it;
434}
435
436template <typename T>
437typename std::map<int, std::vector<T>> &
438AbaqusUtils::getSMAThreadArray(std::vector<std::map<int, std::vector<T>>> & local_array,
439 const std::string & function)
440{
441 ParallelUniqueId puid;
442 if (puid.id >= local_array.size())
443 mooseError("SMA storage not properly initialized in ", function, ".");
444 return local_array[puid.id];
445}
static std::map< int, std::vector< int > > _sma_int_array
Shared Memory Arrays.
Definition AbaqusUtils.h:52
static void smaInitialize()
thread storage initialization
static void mutexInit(std::size_t n)
Mutex API.
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
Definition AbaqusUtils.h:72
static void setCommunicator(const libMesh::Parallel::Communicator *communicator)
Global storage for the MPI communicator, this will be set by any Abaqus class.
Definition AbaqusUtils.C:19
static const libMesh::Parallel::Communicator * getCommunicator()
Definition AbaqusUtils.h:35
static std::string getJobName()
Definition AbaqusUtils.h:28
static std::map< int, std::vector< Real > > _sma_float_array
Definition AbaqusUtils.h:53
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
Definition AbaqusUtils.h:84
static std::string getOutputDir()
Definition AbaqusUtils.h:27
static void mutexUnlock(std::size_t n)
static void mutexLock(std::size_t n)
static void setInputFile(const std::string &input_file)
Global storage for the simulation output directory, this will be set by any Abaqus class.
Definition AbaqusUtils.C:70

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: