https://mooseframework.inl.gov
Loading...
Searching...
No Matches
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{
21public:
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);
63private:
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
70template <typename T>
71typename std::map<int, std::vector<T>>::iterator
72AbaqusUtils::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
82template <typename T>
83typename std::map<int, std::vector<T>> &
84AbaqusUtils::getSMAThreadArray(std::vector<std::map<int, std::vector<T>>> & local_array,
85 const std::string & function)
86{
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)
Utility class to interface between the object oriented MOOSE app structure and global Abaqus utility ...
Definition AbaqusUtils.h:20
static std::map< int, std::vector< int > > _sma_int_array
Shared Memory Arrays.
Definition AbaqusUtils.h: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
static void smaInitialize()
thread storage initialization
static void mutexInit(std::size_t n)
Mutex API.
static const libMesh::Parallel::Communicator * _communicator
Definition AbaqusUtils.h:67
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::string _job_name
Definition AbaqusUtils.h:66
static std::string _output_dir
Definition AbaqusUtils.h:65
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 std::array< std::unique_ptr< Threads::spin_mutex >, 101 > _mutex
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