https://mooseframework.inl.gov
AbaqusUtils.h
Go to the documentation of this file.
1 //* This file is part of the MOOSE framework
2 //* https://mooseframework.inl.gov
3 //*
4 //* All rights reserved, see COPYRIGHT for full restrictions
5 //* https://github.com/idaholab/moose/blob/master/COPYRIGHT
6 //*
7 //* Licensed under LGPL 2.1, please see LICENSE for details
8 //* https://www.gnu.org/licenses/lgpl-2.1.html
9 
10 #pragma once
11 
12 #include "ParallelUniqueId.h"
13 
20 {
21 public:
26  static void setInputFile(const std::string & input_file);
27  static std::string getOutputDir() { return _output_dir; }
28  static std::string getJobName() { return _job_name; }
29 
34  static void setCommunicator(const libMesh::Parallel::Communicator * communicator);
36 
38  template <typename T>
39  static typename std::map<int, std::vector<T>>::iterator
40  getSMAIterator(std::map<int, std::vector<T>> & array, int id, const std::string & function);
41 
43  template <typename T>
44  static typename std::map<int, std::vector<T>> &
45  getSMAThreadArray(std::vector<std::map<int, std::vector<T>>> & local_array,
46  const std::string & function);
47 
49  static void smaInitialize();
50 
52  static std::map<int, std::vector<int>> _sma_int_array;
53  static std::map<int, std::vector<Real>> _sma_float_array;
54  static std::vector<std::map<int, std::vector<int>>> _sma_local_int_array;
55  static std::vector<std::map<int, std::vector<Real>>> _sma_local_float_array;
57 
59  static void mutexInit(std::size_t n);
60  static void mutexLock(std::size_t n);
61  static void mutexUnlock(std::size_t n);
63 private:
64  static std::array<std::unique_ptr<Threads::spin_mutex>, 101> _mutex;
65  static std::string _output_dir;
66  static std::string _job_name;
68 };
69 
70 template <typename T>
71 typename std::map<int, std::vector<T>>::iterator
72 AbaqusUtils::getSMAIterator(std::map<int, std::vector<T>> & array,
73  int id,
74  const std::string & function)
75 {
76  auto it = array.find(id);
77  if (it == array.end())
78  mooseError("Invalid id ", id, " in ", function, ".");
79  return it;
80 }
81 
82 template <typename T>
83 typename std::map<int, std::vector<T>> &
84 AbaqusUtils::getSMAThreadArray(std::vector<std::map<int, std::vector<T>>> & local_array,
85  const std::string & function)
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 }
static std::string getOutputDir()
Definition: AbaqusUtils.h:27
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 std::array< std::unique_ptr< Threads::spin_mutex >, 101 > _mutex
Definition: AbaqusUtils.h:64
static std::string getJobName()
Definition: AbaqusUtils.h:28
void mooseError(Args &&... args)
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 mutexInit(std::size_t n)
Mutex API.
Definition: AbaqusUtils.C:358
static void smaInitialize()
thread storage initialization
Definition: AbaqusUtils.C:188
static std::vector< std::map< int, std::vector< Real > > > _sma_local_float_array
Definition: AbaqusUtils.h:55
static const libMesh::Parallel::Communicator * getCommunicator()
Definition: AbaqusUtils.h:35
static void mutexLock(std::size_t n)
Definition: AbaqusUtils.C:370
static void mutexUnlock(std::size_t n)
Definition: AbaqusUtils.C:378
static const libMesh::Parallel::Communicator * _communicator
Definition: AbaqusUtils.h:67
static std::string _output_dir
Definition: AbaqusUtils.h:65
static std::string _job_name
Definition: AbaqusUtils.h:66
static std::map< int, std::vector< int > > _sma_int_array
Shared Memory Arrays.
Definition: AbaqusUtils.h:52
Utility class to interface between the object oriented MOOSE app structure and global Abaqus utility ...
Definition: AbaqusUtils.h:19
static std::map< int, std::vector< Real > > _sma_float_array
Definition: AbaqusUtils.h:53
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
static std::vector< std::map< int, std::vector< int > > > _sma_local_int_array
Definition: AbaqusUtils.h:54
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