https://mooseframework.inl.gov
Loading...
Searching...
No Matches
MooseUtils.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// MOOSE includes
13#include "MooseTypes.h"
14#include "HashMap.h"
15#include "InfixIterator.h"
16#include "MooseEnumItem.h"
17#include "MooseError.h"
18#include "Moose.h"
19#include "ExecutablePath.h"
20#include "ConsoleUtils.h"
21#include "MooseStringUtils.h"
22
23#include "libmesh/compare_types.h"
24#include "libmesh/bounding_box.h"
25#include "libmesh/int_range.h"
26#include "libmesh/tensor_tools.h"
27#include "metaphysicl/raw_type.h"
28#include "metaphysicl/metaphysicl_version.h"
29#include "metaphysicl/dualnumber_decl.h"
30#include "metaphysicl/dynamic_std_array_wrapper.h"
31#include "timpi/standard_type.h"
32
33// C++ includes
34#include <string>
35#include <vector>
36#include <map>
37#include <list>
38#include <filesystem>
39#include <deque>
40#include <regex>
41
42// Forward Declarations
43class InputParameters;
44class ExecFlagEnum;
46class MaterialBase;
47
48namespace libMesh
49{
50class Elem;
51namespace Parallel
52{
53class Communicator;
54}
55}
56class MultiMooseEnum;
57
58namespace MooseUtils
59{
60
61std::filesystem::path pathjoin(const std::filesystem::path & p);
62
63template <typename... Args>
64std::filesystem::path
65pathjoin(const std::filesystem::path & p, Args... args)
66{
67 return p / pathjoin(args...);
68}
69
73bool parsesToReal(const std::string & input, Real * parsed_real = nullptr);
74
77std::string runTestsExecutable();
78
82std::string findTestRoot();
83
85std::string installedInputsDir(const std::string & app_name,
86 const std::string & dir_name,
87 const std::string & extra_error_msg = "");
88
90std::string docsDir(const std::string & app_name);
91
99std::string mooseDocsURL(const std::string & path);
100
102std::string replaceAll(std::string str, const std::string & from, const std::string & to);
103
107std::string convertLatestCheckpoint(std::string orig);
108
110int levenshteinDist(const std::string & s1, const std::string & s2);
111
117void escape(std::string & str);
118
124std::string removeExtraWhitespace(const std::string & str);
125
132std::vector<std::string> split(const std::string & str,
133 const std::string & delimiter,
134 std::size_t max_count = std::numeric_limits<std::size_t>::max());
135std::vector<std::string> rsplit(const std::string & str,
136 const std::string & delimiter,
137 std::size_t max_count = std::numeric_limits<std::size_t>::max());
138
142template <typename Iterator>
143std::string
144join(Iterator begin, Iterator end, const std::string & delimiter)
145{
146 std::ostringstream oss;
147 std::copy(begin, end, infix_ostream_iterator<std::string>(oss, delimiter.c_str()));
148 return oss.str();
149}
150
154template <typename T>
155std::string
156join(const T & strings, const std::string & delimiter)
157{
158 return join(strings.begin(), strings.end(), delimiter);
159}
160
164std::size_t fileSize(const std::string & filename);
165
169bool pathContains(const std::string & expression,
170 const std::string & string_to_find,
171 const std::string & delims = "/");
172
182bool checkFileReadable(const std::string & filename,
183 bool check_line_endings = false,
184 bool throw_on_unreadable = true,
185 bool check_for_git_lfs_pointer = true);
186
193bool checkFileWriteable(const std::string & filename, bool throw_on_unwritable = true);
194
204bool checkForGitLFSPointer(std::ifstream & file);
205
210void parallelBarrierNotify(const libMesh::Parallel::Communicator & comm, bool messaging = true);
211
220void serialBegin(const libMesh::Parallel::Communicator & comm, bool warn = true);
221
228void serialEnd(const libMesh::Parallel::Communicator & comm, bool warn = true);
229
237bool hasExtension(const std::string & filename, std::string ext, bool strip_exodus_ext = false);
238
246std::string getExtension(const std::string & filename, const bool rfind = false);
247
252std::string stripExtension(const std::string & s, const bool rfind = false);
253
261template <typename T>
262std::pair<std::filesystem::path, std::filesystem::path>
263splitFileName(const T & full_file)
264{
265 const auto p = std::filesystem::path(std::string(full_file));
266 // Error if path ends with /
267 if (!p.has_filename())
268 mooseError("Invalid full file name: ", p);
269
270 const auto d = p.parent_path();
271 return {d.empty() ? "." : d, p.filename()};
272}
273
279std::string getCurrentWorkingDir();
280
289void makedirs(const std::string & dir_name, bool throw_on_failure = false);
290
299void removedirs(const std::string & dir_name, bool throw_on_failure = false);
300
306std::string camelCaseToUnderscore(const std::string & camel_case_name);
307
313std::string underscoreToCamelCase(const std::string & underscore_name, bool leading_upper_case);
314
318std::string shortName(const std::string & name);
319
323std::string baseName(const std::string & name);
324
328std::string hostname();
329
333unsigned short getTermWidth(bool use_environment);
334
338std::string prettyCppType(const std::string & cpp_type);
339
343template <typename T>
344std::string
345prettyCppType(const T * obj = nullptr)
346{
347 if (obj)
348 return prettyCppType(libMesh::demangle(typeid(*obj).name()));
349 else
350 return prettyCppType(libMesh::demangle(typeid(T).name()));
351}
352
356bool isFinitePoint(const Point & point);
357
361template <typename T1, typename T2>
362bool
363doesMapContainValue(const std::map<T1, T2> & the_map, const T2 & value)
364{
365 for (typename std::map<T1, T2>::const_iterator iter = the_map.begin(); iter != the_map.end();
366 ++iter)
367 if (iter->second == value)
368 return true;
369 return false;
370}
371
381inline bool
382absoluteFuzzyEqual(const Point & v1,
383 const Point & v2,
384 const Real tol = libMesh::TOLERANCE * libMesh::TOLERANCE)
385{
386 for (const auto i : make_range(Moose::dim))
387 if (std::abs(v1(i) - v2(i)) > tol)
388 return false;
389 return true;
390}
391
399template <
400 typename T,
401 typename T2,
402 typename T3 = T,
403 typename std::enable_if<libMesh::ScalarTraits<T>::value && libMesh::ScalarTraits<T2>::value &&
405 int>::type = 0>
406bool
407absoluteFuzzyEqual(const T & var1,
408 const T2 & var2,
409 const T3 & tol = libMesh::TOLERANCE * libMesh::TOLERANCE)
410{
411 return (std::abs(MetaPhysicL::raw_value(var1) - MetaPhysicL::raw_value(var2)) <=
413}
414
423template <
424 typename T,
425 typename T2,
426 typename T3 = T,
427 typename std::enable_if<libMesh::ScalarTraits<T>::value && libMesh::ScalarTraits<T2>::value &&
429 int>::type = 0>
430bool
431absoluteFuzzyGreaterEqual(const T & var1,
432 const T2 & var2,
433 const T3 & tol = libMesh::TOLERANCE * libMesh::TOLERANCE)
434{
435 return (MetaPhysicL::raw_value(var1) >=
437}
438
447template <
448 typename T,
449 typename T2,
450 typename T3 = T,
451 typename std::enable_if<libMesh::ScalarTraits<T>::value && libMesh::ScalarTraits<T2>::value &&
453 int>::type = 0>
454bool
455absoluteFuzzyGreaterThan(const T & var1,
456 const T2 & var2,
457 const T3 & tol = libMesh::TOLERANCE * libMesh::TOLERANCE)
458{
459 return (MetaPhysicL::raw_value(var1) >
461}
462
471template <
472 typename T,
473 typename T2,
474 typename T3 = T,
475 typename std::enable_if<libMesh::ScalarTraits<T>::value && libMesh::ScalarTraits<T2>::value &&
477 int>::type = 0>
478bool
479absoluteFuzzyLessEqual(const T & var1,
480 const T2 & var2,
481 const T3 & tol = libMesh::TOLERANCE * libMesh::TOLERANCE)
482{
483 return (MetaPhysicL::raw_value(var1) <=
485}
486
494template <
495 typename T,
496 typename T2,
497 typename T3 = T,
498 typename std::enable_if<libMesh::ScalarTraits<T>::value && libMesh::ScalarTraits<T2>::value &&
500 int>::type = 0>
501bool
502absoluteFuzzyLessThan(const T & var1,
503 const T2 & var2,
504 const T3 & tol = libMesh::TOLERANCE * libMesh::TOLERANCE)
505{
506 return (MetaPhysicL::raw_value(var1) <
508}
509
517template <typename T, typename T2, typename T3 = Real>
518bool
519relativeFuzzyEqual(const T & var1,
520 const T2 & var2,
521 const T3 & tol = libMesh::TOLERANCE * libMesh::TOLERANCE)
522{
523 if constexpr (libMesh::ScalarTraits<T>::value ||
525 {
528 "Mathematical types must be same for arguments to relativelyFuzzEqual");
530 return absoluteFuzzyEqual(
531 var1,
532 var2,
533 tol * (std::abs(MetaPhysicL::raw_value(var1)) + std::abs(MetaPhysicL::raw_value(var2))));
534 else if constexpr (libMesh::TensorTools::TensorTraits<T>::rank == 1)
535 {
536 for (const auto i : make_range(Moose::dim))
537 if (!relativeFuzzyEqual(var1(i), var2(i), tol))
538 return false;
539
540 return true;
541 }
542 else if constexpr (libMesh::TensorTools::TensorTraits<T>::rank == 2)
543 {
544 for (const auto i : make_range(Moose::dim))
545 for (const auto j : make_range(Moose::dim))
546 if (!relativeFuzzyEqual(var1(i, j), var2(i, j), tol))
547 return false;
548
549 return true;
550 }
551 }
552 else
553 {
554 // We dare to dream
555 mooseAssert(var1.size() == var2.size(), "These must be the same size");
556 for (const auto i : index_range(var1))
557 if (!relativeFuzzyEqual(var1(i), var2(i), tol))
558 return false;
559
560 return true;
561 }
562}
563
572template <
573 typename T,
574 typename T2,
575 typename T3 = T,
576 typename std::enable_if<libMesh::ScalarTraits<T>::value && libMesh::ScalarTraits<T2>::value &&
578 int>::type = 0>
579bool
580relativeFuzzyGreaterEqual(const T & var1,
581 const T2 & var2,
582 const T3 & tol = libMesh::TOLERANCE * libMesh::TOLERANCE)
583{
584 return (absoluteFuzzyGreaterEqual(
585 var1,
586 var2,
587 tol * (std::abs(MetaPhysicL::raw_value(var1)) + std::abs(MetaPhysicL::raw_value(var2)))));
588}
589
597template <
598 typename T,
599 typename T2,
600 typename T3 = T,
601 typename std::enable_if<libMesh::ScalarTraits<T>::value && libMesh::ScalarTraits<T2>::value &&
603 int>::type = 0>
604bool
605relativeFuzzyGreaterThan(const T & var1,
606 const T2 & var2,
607 const T3 & tol = libMesh::TOLERANCE * libMesh::TOLERANCE)
608{
609 return (absoluteFuzzyGreaterThan(
610 var1,
611 var2,
612 tol * (std::abs(MetaPhysicL::raw_value(var1)) + std::abs(MetaPhysicL::raw_value(var2)))));
613}
614
623template <
624 typename T,
625 typename T2,
626 typename T3 = T,
627 typename std::enable_if<libMesh::ScalarTraits<T>::value && libMesh::ScalarTraits<T2>::value &&
629 int>::type = 0>
630bool
631relativeFuzzyLessEqual(const T & var1,
632 const T2 & var2,
633 const T3 & tol = libMesh::TOLERANCE * libMesh::TOLERANCE)
634{
635 return (absoluteFuzzyLessEqual(
636 var1,
637 var2,
638 tol * (std::abs(MetaPhysicL::raw_value(var1)) + std::abs(MetaPhysicL::raw_value(var2)))));
639}
640
648template <
649 typename T,
650 typename T2,
651 typename T3 = T,
652 typename std::enable_if<libMesh::ScalarTraits<T>::value && libMesh::ScalarTraits<T2>::value &&
654 int>::type = 0>
655bool
656relativeFuzzyLessThan(const T & var1,
657 const T2 & var2,
658 const T3 & tol = libMesh::TOLERANCE * libMesh::TOLERANCE)
659{
660 return (absoluteFuzzyLessThan(
661 var1,
662 var2,
663 tol * (std::abs(MetaPhysicL::raw_value(var1)) + std::abs(MetaPhysicL::raw_value(var2)))));
664}
665
670template <typename T>
671void
672getUnion(const std::vector<T> & vector1, const std::vector<T> & vector2, std::vector<T> & common)
673{
674 std::unordered_set<T> unique_elements;
675 unique_elements.reserve(vector1.size() + vector2.size());
676 unique_elements.insert(vector1.begin(), vector1.end());
677 unique_elements.insert(vector2.begin(), vector2.end());
678
679 // Now populate the common vector with the union
680 common.assign(unique_elements.begin(), unique_elements.end());
681}
682
688template <typename T>
689class Has_size
690{
691 using Yes = char;
692 struct No
693 {
694 char x[2];
695 };
696
697 template <typename C>
698 static Yes test(decltype(&C::size));
699 template <typename C>
700 static No test(...);
701
702public:
703 static constexpr bool value = sizeof(test<T>(0)) == sizeof(Yes);
704};
705
712template <typename T>
713bool
714isZero(const T & value, const Real tolerance = TOLERANCE * TOLERANCE * TOLERANCE)
715{
716 if constexpr (Has_size<T>::value)
717 {
718 for (const auto & element : value)
719 if (!isZero(element, tolerance))
720 return false;
721
722 return true;
723 }
724 else if constexpr (libMesh::TensorTools::TensorTraits<T>::rank == 0)
725 return MooseUtils::absoluteFuzzyEqual(MetaPhysicL::raw_value(value), 0, tolerance);
726 else if constexpr (libMesh::TensorTools::TensorTraits<T>::rank == 1)
727 {
728 for (const auto i : make_range(Moose::dim))
729 if (!MooseUtils::absoluteFuzzyEqual(MetaPhysicL::raw_value(value(i)), 0, tolerance))
730 return false;
731
732 return true;
733 }
734 else if constexpr (libMesh::TensorTools::TensorTraits<T>::rank == 2)
735 {
736 for (const auto i : make_range(Moose::dim))
737 for (const auto j : make_range(Moose::dim))
738 if (!MooseUtils::absoluteFuzzyEqual(MetaPhysicL::raw_value(value(i, j)), 0, tolerance))
739 return false;
740
741 return true;
742 }
743}
744
756
786void indentMessage(const std::string & prefix,
787 std::string & message,
788 const char * color = COLOR_CYAN,
789 bool dont_indent_first_line = true,
790 const std::string & post_prefix = ": ");
791
795std::string & removeColor(std::string & msg);
796
797std::list<std::string> listDir(const std::string path, bool files_only = false);
798
799bool pathExists(const std::string & path);
800
808std::list<std::string> getFilesInDirs(const std::list<std::string> & directory_list,
809 const bool files_only = true);
810
816std::string getLatestCheckpointFilePrefix(const std::list<std::string> & checkpoint_files);
817
818/*
819 * Checks to see if a string matches a search string
820 * @param name The name to check
821 * @param search_string The search string to check name against
822 */
823bool wildCardMatch(std::string name, std::string search_string);
824
825/*
826 * Checks to see if a candidate string matches a pattern string, permitting glob
827 * wildcards (* and ?) anywhere in the pattern.
828 * @param candidate The name to check
829 * @param pattern The search string to check name candidate
830 */
831bool globCompare(const std::string & candidate,
832 const std::string & pattern,
833 std::size_t c = 0,
834 std::size_t p = 0);
835
836template <typename T>
837void
838expandAllMatches(const std::vector<T> & candidates, std::vector<T> & patterns)
839{
840 std::set<T> expanded;
841 for (const auto & p : patterns)
842 {
843 unsigned int found = 0;
844 for (const auto & c : candidates)
845 if (globCompare(c, p))
846 {
847 expanded.insert(c);
848 found++;
849 }
850 if (!found)
851 throw std::invalid_argument(p);
852 }
853 patterns.assign(expanded.begin(), expanded.end());
854}
855
866template <typename T>
867T
868convert(const std::string & str, bool throw_on_failure = false)
869{
870 T val;
871 try
872 {
873 convert(str, val, true);
874 }
875 catch (std::exception const & e)
876 {
877 if (throw_on_failure)
878 throw;
879 mooseError(e.what());
880 }
881 return val;
882}
883
887void createSymlink(const std::string & target, const std::string & link);
888
892void clearSymlink(const std::string & link);
893
898template <typename T>
899T
900concatenate(T c1, const T & c2)
901{
902 c1.insert(c2.begin(), c2.end());
903 return c1;
904}
905
909template <typename T>
910std::vector<T>
911concatenate(std::vector<T> c1, const std::vector<T> & c2)
912{
913 c1.insert(c1.end(), c2.begin(), c2.end());
914 return c1;
915}
916
920template <typename T>
921std::vector<T>
922concatenate(std::vector<T> c1, const T & item)
923{
924 c1.push_back(item);
925 return c1;
926}
927
931bool beginsWith(const std::string & value, const std::string & begin_value);
932
941template <typename T>
942int
943numDigits(const T & num)
944{
945 return num > 9 ? static_cast<int>(std::log10(static_cast<double>(num))) + 1 : 1;
946}
947
952
958int stringToInteger(const std::string & input, bool throw_on_failure = false);
959
971void linearPartitionItems(dof_id_type num_items,
972 dof_id_type num_chunks,
973 dof_id_type chunk_id,
974 dof_id_type & num_local_items,
975 dof_id_type & local_items_begin,
976 dof_id_type & local_items_end);
977
987linearPartitionChunk(dof_id_type num_items, dof_id_type num_chunks, dof_id_type item_id);
988
992std::string realpath(const std::string & path);
993
999template <typename T>
1000struct IsLikeReal
1001{
1002 static constexpr bool value = false;
1003};
1004template <>
1005struct IsLikeReal<Real>
1006{
1007 static constexpr bool value = true;
1008};
1009template <>
1010struct IsLikeReal<ADReal>
1011{
1012 static constexpr bool value = true;
1013};
1014
1018template <typename T>
1019struct canBroadcast
1020{
1021 static constexpr bool value = std::is_base_of<TIMPI::DataType, TIMPI::StandardType<T>>::value ||
1022 TIMPI::Has_buffer_type<TIMPI::Packing<T>>::value;
1023};
1024
1026const static struct AnyType
1027{
1028} Any;
1029
1030template <typename T1, typename T2>
1031bool
1032wildcardEqual(const T1 & a, const T2 & b)
1033{
1034 return a == b;
1035}
1036
1037template <typename T>
1038bool
1039wildcardEqual(const T &, AnyType)
1040{
1041 return true;
1042}
1043template <typename T>
1044bool
1045wildcardEqual(AnyType, const T &)
1046{
1047 return true;
1048}
1050
1054template <typename C, typename It, typename M1, typename M2>
1055auto
1056findPair(C & container, It start_iterator, const M1 & first, const M2 & second)
1057{
1058 return std::find_if(
1059 start_iterator,
1060 container.end(),
1061 [&](auto & item)
1062 { return wildcardEqual(first, item.first) && wildcardEqual(second, item.second); });
1063}
1064
1080libMesh::BoundingBox buildBoundingBox(const Point & p1, const Point & p2);
1081
1089template <typename T, std::size_t N, bool value_init = true>
1090#if METAPHYSICL_MAJOR_VERSION < 2
1091class SemidynamicVector : public MetaPhysicL::DynamicStdArrayWrapper<T, MetaPhysicL::NWrapper<N>>
1092{
1093 typedef MetaPhysicL::DynamicStdArrayWrapper<T, MetaPhysicL::NWrapper<N>> Parent;
1094#else
1095class SemidynamicVector : public MetaPhysicL::DynamicStdArrayWrapper<T, N>
1096{
1097 typedef MetaPhysicL::DynamicStdArrayWrapper<T, N> Parent;
1098#endif
1099
1100public:
1101 SemidynamicVector(std::size_t size) : Parent()
1102 {
1103 Parent::resize(size);
1104 if constexpr (value_init)
1105 for (const auto i : make_range(size))
1106 _data[i] = T{};
1107 }
1108
1109 void resize(std::size_t new_size)
1110 {
1111 [[maybe_unused]] const auto old_dynamic_n = Parent::size();
1112
1113 Parent::resize(new_size);
1114
1115 if constexpr (value_init)
1116 for (const auto i : make_range(old_dynamic_n, _dynamic_n))
1117 _data[i] = T{};
1118 }
1119
1120 void push_back(const T & v)
1121 {
1122 const auto old_dynamic_n = Parent::size();
1123 Parent::resize(old_dynamic_n + 1);
1124 _data[old_dynamic_n] = v;
1125 }
1126
1127 template <typename... Args>
1128 void emplace_back(Args &&... args)
1129 {
1130 const auto old_dynamic_n = Parent::size();
1131 Parent::resize(old_dynamic_n + 1);
1132 (::new (&_data[old_dynamic_n]) T(std::forward<Args>(args)...));
1133 }
1134
1135 std::size_t max_size() const { return N; }
1136
1137 using Parent::_data;
1138 using Parent::_dynamic_n;
1139};
1140
1153template <typename T>
1154T *
1155get(const std::unique_ptr<T> & u)
1156{
1157 return u.get();
1158}
1159
1160template <typename T>
1161T *
1162get(T * p)
1163{
1164 return p;
1165}
1166
1167template <typename T>
1168T *
1169get(const std::shared_ptr<T> & s)
1170{
1171 return s.get();
1172}
1173
1178template <class InputIterator>
1179bool
1180setsIntersect(InputIterator first1, InputIterator last1, InputIterator first2, InputIterator last2)
1181{
1182 while (first1 != last1 && first2 != last2)
1183 {
1184 if (*first1 == *first2)
1185 return true;
1186
1187 if (*first1 < *first2)
1188 ++first1;
1189 else if (*first1 > *first2)
1190 ++first2;
1191 }
1192 return false;
1193}
1194
1195template <class T>
1196bool
1197setsIntersect(const T & s1, const T & s2)
1198{
1199 return setsIntersect(s1.begin(), s1.end(), s2.begin(), s2.end());
1200}
1201
1207inline bool
1208isDigits(const std::string & str)
1209{
1210 return std::all_of(str.begin(), str.end(), [](unsigned char c) { return std::isdigit(c); });
1211}
1212
1218inline bool
1219isFloat(const std::string & str)
1220{
1221 if (str.empty())
1222 return false;
1223 char * ptr;
1224 strtof(str.c_str(), &ptr);
1225 return (*ptr) == '\0';
1226}
1227
1231std::string canonicalPath(const std::string & path);
1232
1236bool startsWith(const std::string & string1, const std::string & string2);
1237
1242void replaceStart(std::string & string1, const std::string & string2, const std::string & string3);
1243
1247bool isAllLowercase(const std::string & str);
1248} // MooseUtils namespace
1249
1250namespace Moose
1251{
1252template <typename T>
1253struct ADType;
1254
1255template <typename T, std::size_t N, bool value_init>
1256struct ADType<MooseUtils::SemidynamicVector<T, N, value_init>>
1257{
1258 typedef MooseUtils::SemidynamicVector<typename ADType<T>::type, N, value_init> type;
1259};
1260}
1261
1265void removeSubstring(std::string & main, const std::string & sub);
1266
1270std::string removeSubstring(const std::string & main, const std::string & sub);
DualNumber< Real, DNDerivativeType, true > ADReal
void mooseError(Args &&... args)
Emit an error message with the given stringified, concatenated args and terminate the application.
Definition MooseError.h:311
void removeSubstring(std::string &main, const std::string &sub)
for(PetscInt i=0;i< nvars;++i)
if(!dmm->_nl) SETERRQ(PETSC_COMM_WORLD
unsigned int dim
A MultiMooseEnum object to hold "execute_on" flags.
HashMap is an abstraction for dictionary data type, we make it thread-safe by locking inserts.
Definition HashMap.h:19
The main MOOSE class responsible for handling user-defined parameters in almost every MOOSE system.
MaterialBases compute MaterialProperties.
This is a "smart" enum class intended to replace many of the shortcomings in the C++ enum type.
GCC9 currently hits a "no type named 'value_type'" error during build if this is removed and iterator...
MetaPhysicL::DualNumber< V, D, asd > abs(const MetaPhysicL::DualNumber< V, D, asd > &a)
Definition EigenADReal.h:50
We need to instantiate the following CompareTypes to tell the compiler that ADReal is a subtype of Ch...
auto raw_value(const Eigen::Map< T > &in)
bool convert(const std::string &str, T &value, const bool throw_on_failure)
Takes the string representation of a value and converts it to the value.
std::string hostname()
Definition MooseUtils.C:635
void replaceStart(std::string &string1, const std::string &string2, const std::string &string3)
void linearPartitionItems(dof_id_type num_items, dof_id_type num_chunks, dof_id_type chunk_id, dof_id_type &num_local_items, dof_id_type &local_items_begin, dof_id_type &local_items_end)
Definition MooseUtils.C:984
int stringToInteger(const std::string &input, bool throw_on_failure)
Definition MooseUtils.C:978
bool isFinitePoint(const Point &point)
Definition MooseUtils.C:60
std::string mooseDocsURL(const std::string &path)
Definition MooseUtils.C:150
bool checkForGitLFSPointer(std::ifstream &file)
Definition MooseUtils.C:301
std::string & removeColor(std::string &msg)
Definition MooseUtils.C:733
std::string realpath(const std::string &path)
void removedirs(const std::string &dir_name, bool throw_on_failure)
Definition MooseUtils.C:516
std::filesystem::path pathjoin(const std::filesystem::path &p)
Definition MooseUtils.C:70
bool hasExtension(const std::string &filename, std::string ext, bool strip_exodus_ext)
Definition MooseUtils.C:398
unsigned short getTermWidth(bool use_environment)
Definition MooseUtils.C:651
std::string canonicalPath(const std::string &path)
void indentMessage(const std::string &prefix, std::string &message, const char *color, bool indent_first_line, const std::string &post_prefix)
Definition MooseUtils.C:749
std::string removeExtraWhitespace(const std::string &input)
Definition MooseUtils.C:236
std::string getCurrentWorkingDir()
Definition MooseUtils.C:447
std::string camelCaseToUnderscore(const std::string &camel_case_name)
Definition MooseUtils.C:579
std::string baseName(const std::string &name)
Definition MooseUtils.C:629
bool pathContains(const std::string &expression, const std::string &string_to_find, const std::string &delims)
Definition MooseUtils.C:242
void createSymlink(const std::string &target, const std::string &link)
void makedirs(const std::string &dir_name, bool throw_on_failure)
Definition MooseUtils.C:460
std::string installedInputsDir(const std::string &app_name, const std::string &dir_name, const std::string &extra_error_msg)
Definition MooseUtils.C:114
std::vector< std::string > split(const std::string &str, const std::string &delimiter, std::size_t max_count)
std::list< std::string > getFilesInDirs(const std::list< std::string > &directory_list, const bool files_only)
Definition MooseUtils.C:819
bool checkFileWriteable(const std::string &filename, bool throw_on_unwritable)
Definition MooseUtils.C:318
void serialEnd(const libMesh::Parallel::Communicator &comm, bool warn)
Definition MooseUtils.C:382
std::string getExtension(const std::string &filename, const bool rfind)
Definition MooseUtils.C:422
bool isAllLowercase(const std::string &str)
bool pathExists(const std::string &path)
Definition MooseUtils.C:258
int levenshteinDist(const std::string &s1, const std::string &s2)
Definition MooseUtils.C:187
std::string docsDir(const std::string &app_name)
Definition MooseUtils.C:136
bool startsWith(const std::string &string1, const std::string &string2)
bool parsesToReal(const std::string &input, Real *parsed_real)
Definition MooseUtils.C:100
std::string replaceAll(std::string str, const std::string &from, const std::string &to)
Definition MooseUtils.C:156
processor_id_type linearPartitionChunk(dof_id_type num_items, dof_id_type num_chunks, dof_id_type item_id)
void escape(std::string &str)
Definition MooseUtils.C:218
std::string convertLatestCheckpoint(std::string orig)
Definition MooseUtils.C:168
std::string underscoreToCamelCase(const std::string &underscore_name, bool leading_upper_case)
Definition MooseUtils.C:591
bool globCompare(const std::string &candidate, const std::string &pattern, std::size_t c, std::size_t p)
Definition MooseUtils.C:943
ExecFlagEnum getDefaultExecFlagEnum()
Definition MooseUtils.C:972
bool beginsWith(const std::string &value, const std::string &begin_value)
Definition MooseUtils.C:966
void parallelBarrierNotify(const Parallel::Communicator &comm, bool messaging)
Definition MooseUtils.C:338
BoundingBox buildBoundingBox(const Point &p1, const Point &p2)
void MaterialPropertyStorageDump(const HashMap< const libMesh::Elem *, HashMap< unsigned int, MaterialProperties > > &props)
Definition MooseUtils.C:699
std::string prettyCppType(const std::string &cpp_type)
std::string stripExtension(const std::string &s, const bool rfind)
Definition MooseUtils.C:438
std::string findTestRoot()
Definition MooseUtils.C:86
std::size_t fileSize(const std::string &filename)
bool wildCardMatch(std::string name, std::string search_string)
Definition MooseUtils.C:899
std::list< std::string > listDir(const std::string path, bool files_only)
Definition MooseUtils.C:793
void serialBegin(const libMesh::Parallel::Communicator &comm, bool warn)
Definition MooseUtils.C:368
std::string getLatestCheckpointFilePrefix(const std::list< std::string > &checkpoint_files)
Definition MooseUtils.C:830
void clearSymlink(const std::string &link)
bool checkFileReadable(const std::string &filename, bool check_line_endings, bool throw_on_unreadable, bool check_for_git_lfs_pointer)
Definition MooseUtils.C:265
std::string runTestsExecutable()
Definition MooseUtils.C:76
std::string shortName(const std::string &name)
Definition MooseUtils.C:623
std::vector< std::string > rsplit(const std::string &str, const std::string &delimiter, std::size_t max_count)
MOOSE now contains C++17 code, so give a reasonable error message stating what the user can do to add...
uint8_t processor_id_type
Real value(unsigned n, unsigned alpha, unsigned beta, Real x)
std::string name(const ElemQuality q)
const Elem & get(const ElemType type_in)
The following methods are specializations for using the libMesh::Parallel::packed_range_* routines fo...
auto index_range(const T &sizable)
std::string demangle(const char *name)
static constexpr Real TOLERANCE
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
IntRange< T > make_range(T beg, T end)