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/fe_type.h"
26#include "libmesh/int_range.h"
27#include "libmesh/tensor_tools.h"
28#include "metaphysicl/raw_type.h"
29#include "metaphysicl/metaphysicl_version.h"
30#include "metaphysicl/dualnumber_decl.h"
31#include "metaphysicl/dynamic_std_array_wrapper.h"
32#include "timpi/standard_type.h"
33
34// C++ includes
35#include <string>
36#include <vector>
37#include <map>
38#include <list>
39#include <filesystem>
40#include <deque>
41#include <regex>
42
43// Forward Declarations
44class InputParameters;
45class ExecFlagEnum;
47class MaterialBase;
48
49namespace libMesh
50{
51class Elem;
52namespace Parallel
53{
54class Communicator;
55}
56}
57class MultiMooseEnum;
58
59namespace MooseUtils
60{
61
62std::filesystem::path pathjoin(const std::filesystem::path & p);
63
64template <typename... Args>
65std::filesystem::path
66pathjoin(const std::filesystem::path & p, Args... args)
67{
68 return p / pathjoin(args...);
69}
70
74bool parsesToReal(const std::string & input, Real * parsed_real = nullptr);
75
78
81std::string runTestsExecutable();
82
86std::string findTestRoot();
87
89std::string installedInputsDir(const std::string & app_name,
90 const std::string & dir_name,
91 const std::string & extra_error_msg = "");
92
94std::string docsDir(const std::string & app_name);
95
103std::string mooseDocsURL(const std::string & path);
104
106std::string replaceAll(std::string str, const std::string & from, const std::string & to);
107
111std::string convertLatestCheckpoint(std::string orig);
112
114int levenshteinDist(const std::string & s1, const std::string & s2);
115
121void escape(std::string & str);
122
128std::string removeExtraWhitespace(const std::string & str);
129
136std::vector<std::string> split(const std::string & str,
137 const std::string & delimiter,
138 std::size_t max_count = std::numeric_limits<std::size_t>::max());
139std::vector<std::string> rsplit(const std::string & str,
140 const std::string & delimiter,
141 std::size_t max_count = std::numeric_limits<std::size_t>::max());
142
146template <typename Iterator>
147std::string
148join(Iterator begin, Iterator end, const std::string & delimiter)
149{
150 std::ostringstream oss;
151 std::copy(begin, end, infix_ostream_iterator<std::string>(oss, delimiter.c_str()));
152 return oss.str();
153}
154
158template <typename T>
159std::string
160join(const T & strings, const std::string & delimiter)
161{
162 return join(strings.begin(), strings.end(), delimiter);
163}
164
168std::size_t fileSize(const std::string & filename);
169
173bool pathContains(const std::string & expression,
174 const std::string & string_to_find,
175 const std::string & delims = "/");
176
186bool checkFileReadable(const std::string & filename,
187 bool check_line_endings = false,
188 bool throw_on_unreadable = true,
189 bool check_for_git_lfs_pointer = true);
190
197bool checkFileWriteable(const std::string & filename, bool throw_on_unwritable = true);
198
208bool checkForGitLFSPointer(std::ifstream & file);
209
214void parallelBarrierNotify(const libMesh::Parallel::Communicator & comm, bool messaging = true);
215
224void serialBegin(const libMesh::Parallel::Communicator & comm, bool warn = true);
225
232void serialEnd(const libMesh::Parallel::Communicator & comm, bool warn = true);
233
241bool hasExtension(const std::string & filename, std::string ext, bool strip_exodus_ext = false);
242
250std::string getExtension(const std::string & filename, const bool rfind = false);
251
256std::string stripExtension(const std::string & s, const bool rfind = false);
257
265template <typename T>
266std::pair<std::filesystem::path, std::filesystem::path>
267splitFileName(const T & full_file)
268{
269 const auto p = std::filesystem::path(std::string(full_file));
270 // Error if path ends with /
271 if (!p.has_filename())
272 mooseError("Invalid full file name: ", p);
273
274 const auto d = p.parent_path();
275 return {d.empty() ? "." : d, p.filename()};
276}
277
283std::string getCurrentWorkingDir();
284
293void makedirs(const std::string & dir_name, bool throw_on_failure = false);
294
303void removedirs(const std::string & dir_name, bool throw_on_failure = false);
304
310std::string camelCaseToUnderscore(const std::string & camel_case_name);
311
317std::string underscoreToCamelCase(const std::string & underscore_name, bool leading_upper_case);
318
322std::string shortName(const std::string & name);
323
327std::string baseName(const std::string & name);
328
332std::string hostname();
333
337unsigned short getTermWidth(bool use_environment);
338
342std::string prettyCppType(const std::string & cpp_type);
343
347template <typename T>
348std::string
349prettyCppType(const T * obj = nullptr)
350{
351 if (obj)
352 return prettyCppType(libMesh::demangle(typeid(*obj).name()));
353 else
354 return prettyCppType(libMesh::demangle(typeid(T).name()));
355}
356
360bool isFinitePoint(const Point & point);
361
365template <typename T1, typename T2>
366bool
367doesMapContainValue(const std::map<T1, T2> & the_map, const T2 & value)
368{
369 for (typename std::map<T1, T2>::const_iterator iter = the_map.begin(); iter != the_map.end();
370 ++iter)
371 if (iter->second == value)
372 return true;
373 return false;
374}
375
385inline bool
386absoluteFuzzyEqual(const Point & v1,
387 const Point & v2,
388 const Real tol = libMesh::TOLERANCE * libMesh::TOLERANCE)
389{
390 for (const auto i : make_range(Moose::dim))
391 if (std::abs(v1(i) - v2(i)) > tol)
392 return false;
393 return true;
394}
395
403template <
404 typename T,
405 typename T2,
406 typename T3 = T,
407 typename std::enable_if<libMesh::ScalarTraits<T>::value && libMesh::ScalarTraits<T2>::value &&
409 int>::type = 0>
410bool
411absoluteFuzzyEqual(const T & var1,
412 const T2 & var2,
413 const T3 & tol = libMesh::TOLERANCE * libMesh::TOLERANCE)
414{
415 return (std::abs(MetaPhysicL::raw_value(var1) - MetaPhysicL::raw_value(var2)) <=
417}
418
427template <
428 typename T,
429 typename T2,
430 typename T3 = T,
431 typename std::enable_if<libMesh::ScalarTraits<T>::value && libMesh::ScalarTraits<T2>::value &&
433 int>::type = 0>
434bool
435absoluteFuzzyGreaterEqual(const T & var1,
436 const T2 & var2,
437 const T3 & tol = libMesh::TOLERANCE * libMesh::TOLERANCE)
438{
439 return (MetaPhysicL::raw_value(var1) >=
441}
442
451template <
452 typename T,
453 typename T2,
454 typename T3 = T,
455 typename std::enable_if<libMesh::ScalarTraits<T>::value && libMesh::ScalarTraits<T2>::value &&
457 int>::type = 0>
458bool
459absoluteFuzzyGreaterThan(const T & var1,
460 const T2 & var2,
461 const T3 & tol = libMesh::TOLERANCE * libMesh::TOLERANCE)
462{
463 return (MetaPhysicL::raw_value(var1) >
465}
466
475template <
476 typename T,
477 typename T2,
478 typename T3 = T,
479 typename std::enable_if<libMesh::ScalarTraits<T>::value && libMesh::ScalarTraits<T2>::value &&
481 int>::type = 0>
482bool
483absoluteFuzzyLessEqual(const T & var1,
484 const T2 & var2,
485 const T3 & tol = libMesh::TOLERANCE * libMesh::TOLERANCE)
486{
487 return (MetaPhysicL::raw_value(var1) <=
489}
490
498template <
499 typename T,
500 typename T2,
501 typename T3 = T,
502 typename std::enable_if<libMesh::ScalarTraits<T>::value && libMesh::ScalarTraits<T2>::value &&
504 int>::type = 0>
505bool
506absoluteFuzzyLessThan(const T & var1,
507 const T2 & var2,
508 const T3 & tol = libMesh::TOLERANCE * libMesh::TOLERANCE)
509{
510 return (MetaPhysicL::raw_value(var1) <
512}
513
521template <typename T, typename T2, typename T3 = Real>
522bool
523relativeFuzzyEqual(const T & var1,
524 const T2 & var2,
525 const T3 & tol = libMesh::TOLERANCE * libMesh::TOLERANCE)
526{
527 if constexpr (libMesh::ScalarTraits<T>::value ||
529 {
532 "Mathematical types must be same for arguments to relativelyFuzzEqual");
534 return absoluteFuzzyEqual(
535 var1,
536 var2,
537 tol * (std::abs(MetaPhysicL::raw_value(var1)) + std::abs(MetaPhysicL::raw_value(var2))));
538 else if constexpr (libMesh::TensorTools::TensorTraits<T>::rank == 1)
539 {
540 for (const auto i : make_range(Moose::dim))
541 if (!relativeFuzzyEqual(var1(i), var2(i), tol))
542 return false;
543
544 return true;
545 }
546 else if constexpr (libMesh::TensorTools::TensorTraits<T>::rank == 2)
547 {
548 for (const auto i : make_range(Moose::dim))
549 for (const auto j : make_range(Moose::dim))
550 if (!relativeFuzzyEqual(var1(i, j), var2(i, j), tol))
551 return false;
552
553 return true;
554 }
555 }
556 else
557 {
558 // We dare to dream
559 mooseAssert(var1.size() == var2.size(), "These must be the same size");
560 for (const auto i : index_range(var1))
561 if (!relativeFuzzyEqual(var1(i), var2(i), tol))
562 return false;
563
564 return true;
565 }
566}
567
576template <
577 typename T,
578 typename T2,
579 typename T3 = T,
580 typename std::enable_if<libMesh::ScalarTraits<T>::value && libMesh::ScalarTraits<T2>::value &&
582 int>::type = 0>
583bool
584relativeFuzzyGreaterEqual(const T & var1,
585 const T2 & var2,
586 const T3 & tol = libMesh::TOLERANCE * libMesh::TOLERANCE)
587{
588 return (absoluteFuzzyGreaterEqual(
589 var1,
590 var2,
591 tol * (std::abs(MetaPhysicL::raw_value(var1)) + std::abs(MetaPhysicL::raw_value(var2)))));
592}
593
601template <
602 typename T,
603 typename T2,
604 typename T3 = T,
605 typename std::enable_if<libMesh::ScalarTraits<T>::value && libMesh::ScalarTraits<T2>::value &&
607 int>::type = 0>
608bool
609relativeFuzzyGreaterThan(const T & var1,
610 const T2 & var2,
611 const T3 & tol = libMesh::TOLERANCE * libMesh::TOLERANCE)
612{
613 return (absoluteFuzzyGreaterThan(
614 var1,
615 var2,
616 tol * (std::abs(MetaPhysicL::raw_value(var1)) + std::abs(MetaPhysicL::raw_value(var2)))));
617}
618
627template <
628 typename T,
629 typename T2,
630 typename T3 = T,
631 typename std::enable_if<libMesh::ScalarTraits<T>::value && libMesh::ScalarTraits<T2>::value &&
633 int>::type = 0>
634bool
635relativeFuzzyLessEqual(const T & var1,
636 const T2 & var2,
637 const T3 & tol = libMesh::TOLERANCE * libMesh::TOLERANCE)
638{
639 return (absoluteFuzzyLessEqual(
640 var1,
641 var2,
642 tol * (std::abs(MetaPhysicL::raw_value(var1)) + std::abs(MetaPhysicL::raw_value(var2)))));
643}
644
652template <
653 typename T,
654 typename T2,
655 typename T3 = T,
656 typename std::enable_if<libMesh::ScalarTraits<T>::value && libMesh::ScalarTraits<T2>::value &&
658 int>::type = 0>
659bool
660relativeFuzzyLessThan(const T & var1,
661 const T2 & var2,
662 const T3 & tol = libMesh::TOLERANCE * libMesh::TOLERANCE)
663{
664 return (absoluteFuzzyLessThan(
665 var1,
666 var2,
667 tol * (std::abs(MetaPhysicL::raw_value(var1)) + std::abs(MetaPhysicL::raw_value(var2)))));
668}
669
674template <typename T>
675void
676getUnion(const std::vector<T> & vector1, const std::vector<T> & vector2, std::vector<T> & common)
677{
678 std::unordered_set<T> unique_elements;
679 unique_elements.reserve(vector1.size() + vector2.size());
680 unique_elements.insert(vector1.begin(), vector1.end());
681 unique_elements.insert(vector2.begin(), vector2.end());
682
683 // Now populate the common vector with the union
684 common.assign(unique_elements.begin(), unique_elements.end());
685}
686
692template <typename T>
693class Has_size
694{
695 using Yes = char;
696 struct No
697 {
698 char x[2];
699 };
700
701 template <typename C>
702 static Yes test(decltype(&C::size));
703 template <typename C>
704 static No test(...);
705
706public:
707 static constexpr bool value = sizeof(test<T>(0)) == sizeof(Yes);
708};
709
716template <typename T>
717bool
718isZero(const T & value, const Real tolerance = TOLERANCE * TOLERANCE * TOLERANCE)
719{
720 if constexpr (Has_size<T>::value)
721 {
722 for (const auto & element : value)
723 if (!isZero(element, tolerance))
724 return false;
725
726 return true;
727 }
728 else if constexpr (libMesh::TensorTools::TensorTraits<T>::rank == 0)
729 return MooseUtils::absoluteFuzzyEqual(MetaPhysicL::raw_value(value), 0, tolerance);
730 else if constexpr (libMesh::TensorTools::TensorTraits<T>::rank == 1)
731 {
732 for (const auto i : make_range(Moose::dim))
733 if (!MooseUtils::absoluteFuzzyEqual(MetaPhysicL::raw_value(value(i)), 0, tolerance))
734 return false;
735
736 return true;
737 }
738 else if constexpr (libMesh::TensorTools::TensorTraits<T>::rank == 2)
739 {
740 for (const auto i : make_range(Moose::dim))
741 for (const auto j : make_range(Moose::dim))
742 if (!MooseUtils::absoluteFuzzyEqual(MetaPhysicL::raw_value(value(i, j)), 0, tolerance))
743 return false;
744
745 return true;
746 }
747}
748
760
790void indentMessage(const std::string & prefix,
791 std::string & message,
792 const char * color = COLOR_CYAN,
793 bool dont_indent_first_line = true,
794 const std::string & post_prefix = ": ");
795
799std::string & removeColor(std::string & msg);
800
801std::list<std::string> listDir(const std::string path, bool files_only = false);
802
803bool pathExists(const std::string & path);
804
812std::list<std::string> getFilesInDirs(const std::list<std::string> & directory_list,
813 const bool files_only = true);
814
820std::string getLatestCheckpointFilePrefix(const std::list<std::string> & checkpoint_files);
821
822/*
823 * Checks to see if a string matches a search string
824 * @param name The name to check
825 * @param search_string The search string to check name against
826 */
827bool wildCardMatch(std::string name, std::string search_string);
828
829/*
830 * Checks to see if a candidate string matches a pattern string, permitting glob
831 * wildcards (* and ?) anywhere in the pattern.
832 * @param candidate The name to check
833 * @param pattern The search string to check name candidate
834 */
835bool globCompare(const std::string & candidate,
836 const std::string & pattern,
837 std::size_t c = 0,
838 std::size_t p = 0);
839
840template <typename T>
841void
842expandAllMatches(const std::vector<T> & candidates, std::vector<T> & patterns)
843{
844 std::set<T> expanded;
845 for (const auto & p : patterns)
846 {
847 unsigned int found = 0;
848 for (const auto & c : candidates)
849 if (globCompare(c, p))
850 {
851 expanded.insert(c);
852 found++;
853 }
854 if (!found)
855 throw std::invalid_argument(p);
856 }
857 patterns.assign(expanded.begin(), expanded.end());
858}
859
870template <typename T>
871T
872convert(const std::string & str, bool throw_on_failure = false)
873{
874 T val;
875 try
876 {
877 convert(str, val, true);
878 }
879 catch (std::exception const & e)
880 {
881 if (throw_on_failure)
882 throw;
883 mooseError(e.what());
884 }
885 return val;
886}
887
891void createSymlink(const std::string & target, const std::string & link);
892
896void clearSymlink(const std::string & link);
897
902template <typename T>
903T
904concatenate(T c1, const T & c2)
905{
906 c1.insert(c2.begin(), c2.end());
907 return c1;
908}
909
913template <typename T>
914std::vector<T>
915concatenate(std::vector<T> c1, const std::vector<T> & c2)
916{
917 c1.insert(c1.end(), c2.begin(), c2.end());
918 return c1;
919}
920
924template <typename T>
925std::vector<T>
926concatenate(std::vector<T> c1, const T & item)
927{
928 c1.push_back(item);
929 return c1;
930}
931
935bool beginsWith(const std::string & value, const std::string & begin_value);
936
945template <typename T>
946int
947numDigits(const T & num)
948{
949 return num > 9 ? static_cast<int>(std::log10(static_cast<double>(num))) + 1 : 1;
950}
951
956
962int stringToInteger(const std::string & input, bool throw_on_failure = false);
963
975void linearPartitionItems(dof_id_type num_items,
976 dof_id_type num_chunks,
977 dof_id_type chunk_id,
978 dof_id_type & num_local_items,
979 dof_id_type & local_items_begin,
980 dof_id_type & local_items_end);
981
991linearPartitionChunk(dof_id_type num_items, dof_id_type num_chunks, dof_id_type item_id);
992
996std::string realpath(const std::string & path);
997
1003template <typename T>
1004struct IsLikeReal
1005{
1006 static constexpr bool value = false;
1007};
1008template <>
1009struct IsLikeReal<Real>
1010{
1011 static constexpr bool value = true;
1012};
1013template <>
1014struct IsLikeReal<ADReal>
1015{
1016 static constexpr bool value = true;
1017};
1018
1022template <typename T>
1023struct canBroadcast
1024{
1025 static constexpr bool value = std::is_base_of<TIMPI::DataType, TIMPI::StandardType<T>>::value ||
1026 TIMPI::Has_buffer_type<TIMPI::Packing<T>>::value;
1027};
1028
1030const static struct AnyType
1031{
1032} Any;
1033
1034template <typename T1, typename T2>
1035bool
1036wildcardEqual(const T1 & a, const T2 & b)
1037{
1038 return a == b;
1039}
1040
1041template <typename T>
1042bool
1043wildcardEqual(const T &, AnyType)
1044{
1045 return true;
1046}
1047template <typename T>
1048bool
1049wildcardEqual(AnyType, const T &)
1050{
1051 return true;
1052}
1054
1058template <typename C, typename It, typename M1, typename M2>
1059auto
1060findPair(C & container, It start_iterator, const M1 & first, const M2 & second)
1061{
1062 return std::find_if(
1063 start_iterator,
1064 container.end(),
1065 [&](auto & item)
1066 { return wildcardEqual(first, item.first) && wildcardEqual(second, item.second); });
1067}
1068
1084libMesh::BoundingBox buildBoundingBox(const Point & p1, const Point & p2);
1085
1093template <typename T, std::size_t N, bool value_init = true>
1094#if METAPHYSICL_MAJOR_VERSION < 2
1095class SemidynamicVector : public MetaPhysicL::DynamicStdArrayWrapper<T, MetaPhysicL::NWrapper<N>>
1096{
1097 typedef MetaPhysicL::DynamicStdArrayWrapper<T, MetaPhysicL::NWrapper<N>> Parent;
1098#else
1099class SemidynamicVector : public MetaPhysicL::DynamicStdArrayWrapper<T, N>
1100{
1101 typedef MetaPhysicL::DynamicStdArrayWrapper<T, N> Parent;
1102#endif
1103
1104public:
1105 SemidynamicVector(std::size_t size) : Parent()
1106 {
1107 Parent::resize(size);
1108 if constexpr (value_init)
1109 for (const auto i : make_range(size))
1110 _data[i] = T{};
1111 }
1112
1113 void resize(std::size_t new_size)
1114 {
1115 [[maybe_unused]] const auto old_dynamic_n = Parent::size();
1116
1117 Parent::resize(new_size);
1118
1119 if constexpr (value_init)
1120 for (const auto i : make_range(old_dynamic_n, _dynamic_n))
1121 _data[i] = T{};
1122 }
1123
1124 void push_back(const T & v)
1125 {
1126 const auto old_dynamic_n = Parent::size();
1127 Parent::resize(old_dynamic_n + 1);
1128 _data[old_dynamic_n] = v;
1129 }
1130
1131 template <typename... Args>
1132 void emplace_back(Args &&... args)
1133 {
1134 const auto old_dynamic_n = Parent::size();
1135 Parent::resize(old_dynamic_n + 1);
1136 (::new (&_data[old_dynamic_n]) T(std::forward<Args>(args)...));
1137 }
1138
1139 std::size_t max_size() const { return N; }
1140
1141 using Parent::_data;
1142 using Parent::_dynamic_n;
1143};
1144
1157template <typename T>
1158T *
1159get(const std::unique_ptr<T> & u)
1160{
1161 return u.get();
1162}
1163
1164template <typename T>
1165T *
1166get(T * p)
1167{
1168 return p;
1169}
1170
1171template <typename T>
1172T *
1173get(const std::shared_ptr<T> & s)
1174{
1175 return s.get();
1176}
1177
1182template <class InputIterator>
1183bool
1184setsIntersect(InputIterator first1, InputIterator last1, InputIterator first2, InputIterator last2)
1185{
1186 while (first1 != last1 && first2 != last2)
1187 {
1188 if (*first1 == *first2)
1189 return true;
1190
1191 if (*first1 < *first2)
1192 ++first1;
1193 else if (*first1 > *first2)
1194 ++first2;
1195 }
1196 return false;
1197}
1198
1199template <class T>
1200bool
1201setsIntersect(const T & s1, const T & s2)
1202{
1203 return setsIntersect(s1.begin(), s1.end(), s2.begin(), s2.end());
1204}
1205
1211inline bool
1212isDigits(const std::string & str)
1213{
1214 return std::all_of(str.begin(), str.end(), [](unsigned char c) { return std::isdigit(c); });
1215}
1216
1222inline bool
1223isFloat(const std::string & str)
1224{
1225 if (str.empty())
1226 return false;
1227 char * ptr;
1228 strtof(str.c_str(), &ptr);
1229 return (*ptr) == '\0';
1230}
1231
1235std::string canonicalPath(const std::string & path);
1236
1240bool startsWith(const std::string & string1, const std::string & string2);
1241
1246void replaceStart(std::string & string1, const std::string & string2, const std::string & string3);
1247
1251bool isAllLowercase(const std::string & str);
1252} // MooseUtils namespace
1253
1254namespace Moose
1255{
1256template <typename T>
1257struct ADType;
1258
1259template <typename T, std::size_t N, bool value_init>
1260struct ADType<MooseUtils::SemidynamicVector<T, N, value_init>>
1261{
1262 typedef MooseUtils::SemidynamicVector<typename ADType<T>::type, N, value_init> type;
1263};
1264}
1265
1269void removeSubstring(std::string & main, const std::string & sub);
1270
1274std::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:687
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)
int stringToInteger(const std::string &input, bool throw_on_failure)
bool isFinitePoint(const Point &point)
Definition MooseUtils.C:63
std::string mooseDocsURL(const std::string &path)
Definition MooseUtils.C:202
bool checkForGitLFSPointer(std::ifstream &file)
Definition MooseUtils.C:353
std::string & removeColor(std::string &msg)
Definition MooseUtils.C:785
libMesh::FEType variableFEType(const InputParameters &params)
Definition MooseUtils.C:98
std::string realpath(const std::string &path)
void removedirs(const std::string &dir_name, bool throw_on_failure)
Definition MooseUtils.C:568
std::filesystem::path pathjoin(const std::filesystem::path &p)
Definition MooseUtils.C:122
bool hasExtension(const std::string &filename, std::string ext, bool strip_exodus_ext)
Definition MooseUtils.C:450
unsigned short getTermWidth(bool use_environment)
Definition MooseUtils.C:703
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:801
std::string removeExtraWhitespace(const std::string &input)
Definition MooseUtils.C:288
std::string getCurrentWorkingDir()
Definition MooseUtils.C:499
std::string camelCaseToUnderscore(const std::string &camel_case_name)
Definition MooseUtils.C:631
std::string baseName(const std::string &name)
Definition MooseUtils.C:681
bool pathContains(const std::string &expression, const std::string &string_to_find, const std::string &delims)
Definition MooseUtils.C:294
void createSymlink(const std::string &target, const std::string &link)
void makedirs(const std::string &dir_name, bool throw_on_failure)
Definition MooseUtils.C:512
std::string installedInputsDir(const std::string &app_name, const std::string &dir_name, const std::string &extra_error_msg)
Definition MooseUtils.C:166
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:871
bool checkFileWriteable(const std::string &filename, bool throw_on_unwritable)
Definition MooseUtils.C:370
void serialEnd(const libMesh::Parallel::Communicator &comm, bool warn)
Definition MooseUtils.C:434
std::string getExtension(const std::string &filename, const bool rfind)
Definition MooseUtils.C:474
bool isAllLowercase(const std::string &str)
bool pathExists(const std::string &path)
Definition MooseUtils.C:310
int levenshteinDist(const std::string &s1, const std::string &s2)
Definition MooseUtils.C:239
std::string docsDir(const std::string &app_name)
Definition MooseUtils.C:188
bool startsWith(const std::string &string1, const std::string &string2)
bool parsesToReal(const std::string &input, Real *parsed_real)
Definition MooseUtils.C:152
std::string replaceAll(std::string str, const std::string &from, const std::string &to)
Definition MooseUtils.C:208
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:270
std::string convertLatestCheckpoint(std::string orig)
Definition MooseUtils.C:220
std::string underscoreToCamelCase(const std::string &underscore_name, bool leading_upper_case)
Definition MooseUtils.C:643
bool globCompare(const std::string &candidate, const std::string &pattern, std::size_t c, std::size_t p)
Definition MooseUtils.C:995
ExecFlagEnum getDefaultExecFlagEnum()
bool beginsWith(const std::string &value, const std::string &begin_value)
void parallelBarrierNotify(const Parallel::Communicator &comm, bool messaging)
Definition MooseUtils.C:390
BoundingBox buildBoundingBox(const Point &p1, const Point &p2)
void MaterialPropertyStorageDump(const HashMap< const libMesh::Elem *, HashMap< unsigned int, MaterialProperties > > &props)
Definition MooseUtils.C:751
std::string prettyCppType(const std::string &cpp_type)
std::string stripExtension(const std::string &s, const bool rfind)
Definition MooseUtils.C:490
std::string findTestRoot()
Definition MooseUtils.C:138
std::size_t fileSize(const std::string &filename)
bool wildCardMatch(std::string name, std::string search_string)
Definition MooseUtils.C:951
std::list< std::string > listDir(const std::string path, bool files_only)
Definition MooseUtils.C:845
void serialBegin(const libMesh::Parallel::Communicator &comm, bool warn)
Definition MooseUtils.C:420
std::string getLatestCheckpointFilePrefix(const std::list< std::string > &checkpoint_files)
Definition MooseUtils.C:882
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:317
std::string runTestsExecutable()
Definition MooseUtils.C:128
std::string shortName(const std::string &name)
Definition MooseUtils.C:675
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)