https://mooseframework.inl.gov
Loading...
Searching...
No Matches
MaterialPropertyInterface.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#ifdef MOOSE_KOKKOS_ENABLED
14#endif
15
16// MOOSE includes
17#include "MaterialProperty.h"
18#include "MooseTypes.h"
19#include "MaterialData.h"
20#include "MathUtils.h"
21#include "MooseObjectName.h"
22#include "InputParameters.h"
23
24#include <unordered_map>
25
26#define usingMaterialPropertyInterfaceMembers \
27 using MaterialPropertyInterface::_material_data_type; \
28 using MaterialPropertyInterface::_material_data
29
30// Forward declarations
31class MooseObject;
32class FEProblemBase;
33class SubProblem;
34
43template <class M>
45{
46public:
47 OptionalMaterialPropertyProxyBase(const std::string & name, const unsigned int state)
48 : _name(name), _state(state)
49 {
50 }
52 virtual void resolve(M & material) = 0;
53
54protected:
55 const std::string _name;
56 const unsigned int _state;
57};
58
70{
71public:
72 MaterialPropertyInterface(const MooseObject * moose_object,
73 const std::set<SubdomainID> & block_ids,
74 const std::set<BoundaryID> & boundary_ids);
75
76#ifdef MOOSE_KOKKOS_ENABLED
81 const Moose::Kokkos::FunctorCopy & key);
82#endif
83
85
91
93
102 template <typename T, bool is_ad>
104 const unsigned int state = 0)
105 {
106 return getGenericMaterialProperty<T, is_ad>(name, _material_data, state);
107 }
108 template <typename T>
109 const MaterialProperty<T> & getMaterialProperty(const std::string & name,
110 const unsigned int state = 0)
111 {
112 return getGenericMaterialProperty<T, false>(name, state);
113 }
114 template <typename T>
115 const ADMaterialProperty<T> & getADMaterialProperty(const std::string & name)
116 {
117 return getGenericMaterialProperty<T, true>(name, 0);
118 }
119 template <typename T>
120 const MaterialProperty<T> & getMaterialPropertyOld(const std::string & name)
121 {
122 return getMaterialProperty<T>(name, 1);
123 }
124 template <typename T>
125 const MaterialProperty<T> & getMaterialPropertyOlder(const std::string & name)
126 {
127 return getMaterialProperty<T>(name, 2);
128 }
130
132
139 template <typename T, bool is_ad>
141 getGenericMaterialPropertyByName(const MaterialPropertyName & name, const unsigned int state = 0)
142 {
143 return getGenericMaterialPropertyByName<T, is_ad>(name, _material_data, state);
144 }
145 template <typename T>
146 const MaterialProperty<T> & getMaterialPropertyByName(const MaterialPropertyName & name,
147 const unsigned int state = 0)
148 {
149 return getGenericMaterialPropertyByName<T, false>(name, state);
150 }
151 template <typename T>
152 const ADMaterialProperty<T> & getADMaterialPropertyByName(const MaterialPropertyName & name)
153 {
154 return getGenericMaterialPropertyByName<T, true>(name, 0);
155 }
156 template <typename T>
157 const MaterialProperty<T> & getMaterialPropertyOldByName(const MaterialPropertyName & name)
158 {
159 return getMaterialPropertyByName<T>(name, 1);
160 }
161 template <typename T>
162 const MaterialProperty<T> & getMaterialPropertyOlderByName(const MaterialPropertyName & name)
163 {
164 return getMaterialPropertyByName<T>(name, 2);
165 }
167
168#ifdef MOOSE_KOKKOS_SCOPE
177 template <typename T, unsigned int dimension = 0, unsigned int state = 0>
179 getKokkosMaterialPropertyByName(const std::string & prop_name_in);
187 template <typename T, unsigned int dimension = 0>
189 getKokkosMaterialPropertyOldByName(const std::string & prop_name)
190 {
191 return getKokkosMaterialPropertyByName<T, dimension, 1>(prop_name);
192 }
200 template <typename T, unsigned int dimension = 0>
202 getKokkosMaterialPropertyOlderByName(const std::string & prop_name)
203 {
204 return getKokkosMaterialPropertyByName<T, dimension, 2>(prop_name);
205 }
214 template <typename T, unsigned int dimension = 0, unsigned int state = 0>
216 {
217 return getKokkosMaterialPropertyByName<T, dimension, state>(getMaterialPropertyName(name));
218 }
226 template <typename T, unsigned int dimension = 0>
228 getKokkosMaterialPropertyOld(const std::string & name)
229 {
230 return getKokkosMaterialPropertyByName<T, dimension, 1>(getMaterialPropertyName(name));
231 }
239 template <typename T, unsigned int dimension = 0>
241 getKokkosMaterialPropertyOlder(const std::string & name)
242 {
243 return getKokkosMaterialPropertyByName<T, dimension, 2>(getMaterialPropertyName(name));
244 }
245#endif
246
249 template <typename T, bool is_ad>
251 getGenericOptionalMaterialProperty(const std::string & name, const unsigned int state = 0);
252
253 template <typename T>
255 const unsigned int state = 0)
256 {
257 return getGenericOptionalMaterialProperty<T, false>(name, state);
258 }
259 template <typename T>
261 {
262 return getGenericOptionalMaterialProperty<T, true>(name);
263 }
264
265 template <typename T>
267 {
268 return getOptionalMaterialProperty<T>(name, 1);
269 }
270 template <typename T>
272 {
273 return getOptionalMaterialProperty<T>(name, 2);
274 }
276
287 template <typename T>
288 std::pair<const MaterialProperty<T> *, std::set<SubdomainID>>
289 getBlockMaterialProperty(const MaterialPropertyName & name);
290
291#ifdef MOOSE_KOKKOS_SCOPE
303 template <typename T, unsigned int dimension = 0, unsigned int state = 0>
304 std::pair<Moose::Kokkos::MaterialProperty<T, dimension>, std::set<SubdomainID>>
305 getKokkosBlockMaterialProperty(const MaterialPropertyName & name);
306#endif
307
312 template <typename T, bool is_ad>
314 getGenericZeroMaterialProperty(const std::string & name);
315 template <typename T, bool is_ad>
317 getGenericZeroMaterialPropertyByName(const std::string & prop_name);
318
322 template <typename T, bool is_ad>
324
326 template <typename T, typename... Ts>
328 {
329 return getGenericZeroMaterialProperty<T, false>(args...);
330 }
331
337 std::set<SubdomainID> getMaterialPropertyBlocks(const std::string & name);
338
344 std::vector<SubdomainName> getMaterialPropertyBlockNames(const std::string & name);
345
351 std::set<BoundaryID> getMaterialPropertyBoundaryIDs(const std::string & name);
352
358 std::vector<BoundaryName> getMaterialPropertyBoundaryNames(const std::string & name);
359
364 void checkBlockAndBoundaryCompatibility(std::shared_ptr<MaterialBase> discrete);
365
367
375 MaterialBase & getMaterial(const std::string & name);
376 MaterialBase & getMaterialByName(const std::string & name, bool no_warn = false);
378
380 std::unordered_map<SubdomainID, std::vector<MaterialBase *>>
381 buildRequiredMaterials(bool allow_stateful = true);
382
384
389 template <typename T>
390 bool hasMaterialProperty(const std::string & name);
391 template <typename T>
392 bool hasMaterialPropertyByName(const std::string & name);
393 template <typename T>
394 bool hasADMaterialProperty(const std::string & name);
395 template <typename T>
396 bool hasADMaterialPropertyByName(const std::string & name);
397#ifdef MOOSE_KOKKOS_SCOPE
398 template <typename T, unsigned int dimension = 0>
399 bool hasKokkosMaterialProperty(const std::string & name);
400 template <typename T, unsigned int dimension = 0>
401 bool hasKokkosMaterialPropertyByName(const std::string & name);
402#endif
404
406 template <typename T, bool is_ad>
407 bool hasGenericMaterialProperty(const std::string & name)
408 {
409 if constexpr (is_ad)
410 return hasADMaterialProperty<T>(name);
411 else
412 return hasMaterialProperty<T>(name);
413 }
414 template <typename T, bool is_ad>
415 bool hasGenericMaterialPropertyByName(const std::string & name)
416 {
417 if constexpr (is_ad)
418 return hasADMaterialPropertyByName<T>(name);
419 else
420 return hasMaterialPropertyByName<T>(name);
421 }
423
429 void statefulPropertiesAllowed(bool);
430
435
442 virtual const std::unordered_set<unsigned int> & getMatPropDependencies() const
443 {
445 }
446
448 virtual void resolveOptionalProperties();
449
453 template <typename T, bool is_ad>
455 const std::string & name, MaterialData & material_data, const unsigned int state = 0);
456
462 template <typename T>
463 const MaterialProperty<T> & getMaterialProperty(const std::string & name,
464 MaterialData & material_data,
465 const unsigned int state = 0)
466 {
467 return getGenericMaterialProperty<T, false>(name, material_data, state);
468 }
469
475 template <typename T>
476 const ADMaterialProperty<T> & getADMaterialProperty(const std::string & name,
477 MaterialData & material_data)
478 {
479 return getGenericMaterialProperty<T, true>(name, material_data, 0);
480 }
481
486 template <typename T, bool is_ad>
488 const MaterialPropertyName & name, MaterialData & material_data, const unsigned int state);
489
495 template <typename T, bool is_ad>
497 getPossiblyConstantGenericMaterialPropertyByName(const MaterialPropertyName & prop_name,
498 MaterialData & material_data,
499 const unsigned int state);
500
506 template <typename T>
507 const MaterialProperty<T> & getMaterialPropertyByName(const MaterialPropertyName & name,
508 MaterialData & material_data,
509 const unsigned int state = 0)
510 {
511 return getGenericMaterialPropertyByName<T, false>(name, material_data, state);
512 }
513
518 template <typename T>
519 const ADMaterialProperty<T> & getADMaterialPropertyByName(const MaterialPropertyName & name,
520 MaterialData & material_data)
521 {
522 return getGenericMaterialPropertyByName<T, true>(name, material_data, 0);
523 }
524
528 template <typename T>
529 const MaterialProperty<T> & getMaterialPropertyOld(const std::string & name,
530 MaterialData & material_data)
531 {
532 return getMaterialProperty<T>(name, material_data, 1);
533 }
534
539 template <typename T>
540 const MaterialProperty<T> & getMaterialPropertyOlder(const std::string & name,
541 MaterialData & material_data)
542 {
543 return getMaterialProperty<T>(name, material_data, 2);
544 }
545
550 template <typename T>
551 const MaterialProperty<T> & getMaterialPropertyOldByName(const MaterialPropertyName & name,
552 MaterialData & material_data)
553 {
554 return getMaterialPropertyByName<T>(name, material_data, 1);
555 }
556
561 template <typename T>
562 const MaterialProperty<T> & getMaterialPropertyOlderByName(const MaterialPropertyName & name,
563 MaterialData & material_data)
564 {
565 return getMaterialPropertyByName<T>(name, material_data, 2);
566 }
567
568private:
571
572protected:
575
577 const std::string _mi_name;
578
581
584
587
590
591#ifdef MOOSE_KOKKOS_ENABLED
594#endif
595
598
601
607 virtual void checkMaterialProperty(const std::string & name, const unsigned int state);
608
609#ifdef MOOSE_KOKKOS_ENABLED
616 virtual void getKokkosMaterialPropertyHook(const std::string & /* prop_name_in */,
617 const unsigned int /* state */)
618 {
619 }
620#endif
621
625 void markMatPropRequested(const std::string &);
626
634 MaterialPropertyName getMaterialPropertyName(const std::string & name) const;
635
644 template <typename T, bool is_ad>
646 defaultGenericMaterialProperty(const std::string & name);
647 template <typename T>
648 const MaterialProperty<T> * defaultMaterialProperty(const std::string & name)
649 {
650 return defaultGenericMaterialProperty<T, false>(name);
651 }
652 template <typename T>
653 const ADMaterialProperty<T> * defaultADMaterialProperty(const std::string & name)
654 {
655 return defaultGenericMaterialProperty<T, true>(name);
656 }
658
662 void checkExecutionStage();
663
669
676
678 std::vector<std::unique_ptr<PropertyValue>> _default_properties;
679
681 std::unordered_set<unsigned int> _material_property_dependencies;
682
683 const MaterialPropertyName _get_suffix;
684
687
689 static const std::string _interpolated_old;
690 static const std::string _interpolated_older;
692
693private:
697 Moose::MaterialDataType getMaterialDataType(const std::set<BoundaryID> & boundary_ids) const;
698
699 /*
700 * A proxy method for _mi_feproblem.getMaxQps()
701 */
702 unsigned int getMaxQps() const;
703
704 /*
705 * A proxy method for _mi_feproblem.addConsumedPropertyName()
706 */
707 void addConsumedPropertyName(const MooseObjectName & obj_name, const std::string & prop_name);
708
711
713 const std::set<SubdomainID> & _mi_block_ids;
714
716 const std::set<BoundaryID> & _mi_boundary_ids;
717
719 std::vector<std::unique_ptr<OptionalMaterialPropertyProxyBase<MaterialPropertyInterface>>>
721};
722
723template <class M, typename T, bool is_ad>
725{
726public:
727 OptionalMaterialPropertyProxy(const std::string & name, const unsigned int state)
728 : OptionalMaterialPropertyProxyBase<M>(name, state)
729 {
730 }
732 void resolve(M & mpi) override
733 {
734 if (mpi.template hasGenericMaterialProperty<T, is_ad>(this->_name))
735 {
736 if constexpr (is_ad)
737 if (this->_state > 0)
738 mooseError("Non-current (state > 0) material properties are not available as AD");
739
740 _value.set(&mpi.template getGenericMaterialProperty<T, is_ad>(this->_name, this->_state));
741 }
742 }
743
744private:
746};
747
748template <typename T, bool is_ad>
751{
752 if constexpr (std::is_same_v<T, Real> || std::is_same_v<T, RealVectorValue>)
753 {
754 std::istringstream ss(name);
755 Real real_value;
756
757 // check if the string parsed cleanly into a Real number
758 if (ss >> real_value && ss.eof())
759 {
760 using prop_type = GenericMaterialProperty<T, is_ad>;
761
762 const auto nqp = Moose::constMaxQpsPerElem;
763 auto & property =
764 _default_properties.emplace_back(std::make_unique<prop_type>(default_property_id));
765 auto & T_property = static_cast<prop_type &>(*property);
766
767 T_property.resize(nqp);
768 for (const auto qp : make_range(nqp))
769 T_property[qp] = real_value;
770
771 return &T_property;
772 }
773 }
774
775 return nullptr;
776}
777
778template <typename T>
779std::pair<const MaterialProperty<T> *, std::set<SubdomainID>>
780MaterialPropertyInterface::getBlockMaterialProperty(const MaterialPropertyName & name_in)
781{
782 if (_mi_block_ids.empty())
783 mooseError("getBlockMaterialProperty must be called by a block restrictable object");
784
785 const auto name = _get_suffix.empty()
786 ? static_cast<const std::string &>(name_in)
787 : MooseUtils::join(std::vector<std::string>({name_in, _get_suffix}), "_");
788
789 using pair_type = std::pair<const MaterialProperty<T> *, std::set<SubdomainID>>;
790
791 if (!hasMaterialPropertyByName<T>(name))
792 return pair_type(nullptr, {});
793
794 // Call first so that the ID gets registered
795 const auto & prop = _material_data.getProperty<T, false>(name, 0, _mi_moose_object);
797 auto prop_blocks_pair = pair_type(&prop, std::move(blocks));
798
800
801 // Update consumed properties in MaterialPropertyDebugOutput
803
804 return prop_blocks_pair;
805}
806
807template <typename T>
808bool
810{
811 // Check if the supplied parameter is a valid input parameter key
812 const auto prop_name = getMaterialPropertyName(name);
813 return hasMaterialPropertyByName<T>(prop_name);
814}
815
816template <typename T>
817bool
819{
820 const auto name = _get_suffix.empty()
821 ? name_in
822 : MooseUtils::join(std::vector<std::string>({name_in, _get_suffix}), "_");
823 return _material_data.haveProperty<T>(name);
824}
825
826template <typename T, bool is_ad>
829{
830 const auto prop_name = getMaterialPropertyName(name);
831 return getGenericZeroMaterialPropertyByName<T, is_ad>(prop_name);
832}
833
834template <typename T, bool is_ad>
837{
838 // if found return the requested property
839 if (hasGenericMaterialPropertyByName<T, is_ad>(prop_name))
840 return getGenericMaterialPropertyByName<T, is_ad>(prop_name);
841
842 return getGenericZeroMaterialProperty<T, is_ad>();
843}
844
845template <typename T, bool is_ad>
848{
849 // static zero property storage
851
852 // resize to accomodate maximum number of qpoints
853 // (in multiapp scenarios getMaxQps can return different values in each app; we need the max)
854 unsigned int nqp = getMaxQps();
855 if (nqp > zero.size())
856 zero.resize(nqp);
857
858 // set values for all qpoints to zero
859 for (unsigned int qp = 0; qp < nqp; ++qp)
861
862 return zero;
863}
864
865template <typename T>
866bool
868{
869 // Check if the supplied parameter is a valid input parameter key
870 const auto prop_name = getMaterialPropertyName(name);
871 return hasADMaterialPropertyByName<T>(prop_name);
872}
873
874template <typename T>
875bool
877{
878 const auto name = _get_suffix.empty()
879 ? name_in
880 : MooseUtils::join(std::vector<std::string>({name_in, _get_suffix}), "_");
881 return _material_data.haveADProperty<T>(name);
882}
883
884template <typename T, bool is_ad>
887 const unsigned int state)
888{
889 auto proxy = std::make_unique<OptionalMaterialPropertyProxy<MaterialPropertyInterface, T, is_ad>>(
890 name, state);
891 auto & optional_property = proxy->value();
892 _optional_property_proxies.push_back(std::move(proxy));
893 return optional_property;
894}
895
896template <typename T, bool is_ad>
899 const MaterialPropertyName & prop_name, MaterialData & material_data, const unsigned int state)
900{
901 // Check if it's just a constant
902 if (const auto * default_property = defaultGenericMaterialProperty<T, is_ad>(prop_name))
903 {
905 return *default_property;
906 }
907
908 if (state > 0 && !_stateful_allowed)
909 mooseError("Stateful material properties not allowed for this object."
910 " State ",
911 state,
912 " property for \"",
913 prop_name,
914 "\" was requested.");
915
916 return this->getGenericMaterialPropertyByName<T, is_ad>(prop_name, material_data, state);
917}
918
919template <typename T, bool is_ad>
922 MaterialData & material_data,
923 const unsigned int state)
924{
925 // Check if the supplied parameter is a valid input parameter key
926 const auto prop_name = getMaterialPropertyName(name);
927
928 return getPossiblyConstantGenericMaterialPropertyByName<T, is_ad>(
929 prop_name, material_data, state);
930}
931
932template <typename T, bool is_ad>
935 MaterialData & material_data,
936 const unsigned int state)
937{
938#ifdef MOOSE_KOKKOS_ENABLED
941 "Attempted to retrieve a standard MOOSE material property from a Kokkos object.");
942#endif
943
945 {
946 if (state == 1)
947 return getGenericMaterialPropertyByName<T, is_ad>(
948 name_in + _interpolated_old, material_data, 0);
949 if (state == 2)
950 return getGenericMaterialPropertyByName<T, is_ad>(
951 name_in + _interpolated_older, material_data, 0);
952 }
953
954 const auto name = _get_suffix.empty()
955 ? static_cast<const std::string &>(name_in)
956 : MooseUtils::join(std::vector<std::string>({name_in, _get_suffix}), "_");
957
959 checkMaterialProperty(name, state);
960
961 // mark property as requested
963
964 // Update the boolean flag.
966
967 // Call first so that the ID gets registered
968 auto & prop = material_data.getProperty<T, is_ad>(name, state, _mi_moose_object);
969
970 // Does the material data used here matter?
971 _material_property_dependencies.insert(material_data.getPropertyId(name));
972
973 if (state == 0)
975
976 return prop;
977}
978
979#ifdef MOOSE_KOKKOS_SCOPE
980template <typename T, unsigned int dimension>
981bool
983{
984 // Check if the supplied parameter is a valid input parameter key
985 const auto prop_name = getMaterialPropertyName(name);
986 return hasKokkosMaterialPropertyByName<T, dimension>(prop_name);
987}
988
989template <typename T, unsigned int dimension>
990bool
992{
993 const auto name = _get_suffix.empty()
994 ? name_in
995 : MooseUtils::join(std::vector<std::string>({name_in, _get_suffix}), "_");
996 return _material_data.haveKokkosProperty<T, dimension>(name);
997}
998
999template <typename T, unsigned int dimension, unsigned int state>
1002{
1003 if (!_is_kokkos_object)
1005 "Attempted to retrieve a Kokkos material property from a standard MOOSE object.");
1006
1007 if constexpr (std::is_same_v<T, Real>)
1008 {
1009 std::istringstream ss(prop_name_in);
1010 Real value;
1011
1012 // Check if the string parsed cleanly into a Real number
1013 if (ss >> value && ss.eof())
1015 }
1016
1017 const auto prop_name =
1018 _get_suffix.empty()
1019 ? static_cast<const std::string &>(prop_name_in)
1020 : MooseUtils::join(std::vector<std::string>({prop_name_in, _get_suffix}), "_");
1021
1023 checkMaterialProperty(prop_name, state);
1024
1025 // Mark property as requested
1026 markMatPropRequested(prop_name);
1027
1028 // Update the boolean flag
1030
1031 // Call first so that the ID gets registered
1032 auto prop = _material_data.getKokkosProperty<T, dimension, state>(prop_name);
1033
1034 // Does the material data used here matter?
1036
1037 if constexpr (state == 0)
1039
1040 getKokkosMaterialPropertyHook(prop_name_in, state);
1041
1042 return prop;
1043}
1044
1045template <typename T, unsigned int dimension, unsigned int state>
1046std::pair<Moose::Kokkos::MaterialProperty<T, dimension>, std::set<SubdomainID>>
1048{
1049 if (!_is_kokkos_object)
1051 "Attempted to retrieve a Kokkos material property from a standard MOOSE object.");
1052
1053 if (_mi_block_ids.empty())
1054 mooseError("getKokkosBlockMaterialProperty must be called by a block restrictable object");
1055
1056 const auto name = _get_suffix.empty()
1057 ? static_cast<const std::string &>(name_in)
1058 : MooseUtils::join(std::vector<std::string>({name_in, _get_suffix}), "_");
1059
1060 using pair_type = std::pair<Moose::Kokkos::MaterialProperty<T, dimension>, std::set<SubdomainID>>;
1061
1062 if (!hasKokkosMaterialPropertyByName<T, dimension>(name))
1063 return pair_type(Moose::Kokkos::MaterialProperty<T, dimension>(), {});
1064
1066
1067 // Mark property as requested
1069
1070 // Call first so that the ID gets registered
1071 auto prop = _material_data.getKokkosProperty<T, dimension, state>(name);
1072 auto blocks = getMaterialPropertyBlocks(name);
1073 auto prop_blocks_pair = pair_type(prop, std::move(blocks));
1074
1076
1077 // Update consumed properties in MaterialPropertyDebugOutput
1078 if constexpr (state == 0)
1080
1081 getKokkosMaterialPropertyHook(name_in, state);
1082
1083 return prop_blocks_pair;
1084}
1085#endif
typename GenericMaterialPropertyStruct< T, is_ad >::type GenericMaterialProperty
void mooseError(Args &&... args)
Emit an error message with the given stringified, concatenated args and terminate the application.
Definition MooseError.h:311
unsigned int THREAD_ID
Definition MooseTypes.h:237
char ** blocks
Specialization of SubProblem for solving nonlinear equations plus auxiliary equations.
Wrapper around a material property pointer.
The main MOOSE class responsible for handling user-defined parameters in almost every MOOSE system.
MaterialBases compute MaterialProperties.
Proxy for accessing MaterialPropertyStorage.
bool haveProperty(const std::string &prop_name) const
Returns true if the regular material property exists - defined by any material.
unsigned int getPropertyId(const std::string &prop_name) const
Wrapper for MaterialStorage::getPropertyId.
bool haveKokkosProperty(const std::string &prop_name) const
Get whether a Kokkos material property exists.
bool haveADProperty(const std::string &prop_name) const
Returns true if the AD material property exists - defined by any material.
Moose::Kokkos::MaterialProperty< T, dimension > getKokkosProperty(const std::string &prop_name)
Get a Kokkos material property.
GenericMaterialProperty< T, is_ad > & getProperty(const std::string &prop_name, const unsigned int state, const MooseObject &requestor)
Retrieves a material property.
An interface for accessing Materials.
const MaterialProperty< T > & getMaterialPropertyOlder(const std::string &name)
const MaterialProperty< T > & getMaterialProperty(const std::string &name, MaterialData &material_data, const unsigned int state=0)
Retrieve the property named "name" for the specified material_data.
const ADMaterialProperty< T > * defaultADMaterialProperty(const std::string &name)
const std::set< BoundaryID > & _mi_boundary_ids
Storage for the boundary ids created by BoundaryRestrictable.
bool hasMaterialPropertyByName(const std::string &name)
bool hasADMaterialProperty(const std::string &name)
bool _get_material_property_called
Initialized to false.
void statefulPropertiesAllowed(bool)
Derived classes can declare whether or not they work with stateful material properties.
const MaterialProperty< T > & getMaterialPropertyByName(const MaterialPropertyName &name, const unsigned int state=0)
bool hasGenericMaterialProperty(const std::string &name)
generic hasMaterialProperty helper
const OptionalMaterialProperty< T > & getOptionalMaterialPropertyOld(const std::string &name)
const bool _mi_boundary_restricted
BoundaryRestricted flag.
const THREAD_ID _mi_tid
Current threaded it.
const MaterialProperty< T > & getMaterialPropertyOlderByName(const MaterialPropertyName &name)
Moose::Kokkos::MaterialProperty< T, dimension > getKokkosMaterialPropertyByName(const std::string &prop_name_in)
Get a Kokkos material property by property name for any state.
std::vector< BoundaryName > getMaterialPropertyBoundaryNames(const std::string &name)
Retrieve the boundary namess that the material property is defined.
const MaterialProperty< T > & getMaterialPropertyOldByName(const MaterialPropertyName &name)
Moose::Kokkos::MaterialProperty< T, dimension > getKokkosMaterialPropertyOlderByName(const std::string &prop_name)
Get an older Kokkos material property by property name.
bool hasADMaterialPropertyByName(const std::string &name)
std::vector< std::unique_ptr< OptionalMaterialPropertyProxyBase< MaterialPropertyInterface > > > _optional_property_proxies
optional material properties
const MaterialProperty< T > & getMaterialProperty(const std::string &name, const unsigned int state=0)
std::vector< SubdomainName > getMaterialPropertyBlockNames(const std::string &name)
Retrieve the block names that the material property is defined.
MaterialPropertyName getMaterialPropertyName(const std::string &name) const
MaterialBase & getMaterial(const std::string &name)
Return a MaterialBase reference - usable for computing directly.
const ADMaterialProperty< T > & getADMaterialPropertyByName(const MaterialPropertyName &name, MaterialData &material_data)
Retrieve the AD property named "name" without any deduction for the specified \q material_data.
MaterialBase & getMaterialByName(const std::string &name, bool no_warn=false)
const GenericMaterialProperty< T, is_ad > * defaultGenericMaterialProperty(const std::string &name)
static const std::string _interpolated_old
name suffixes for interpolated old and older properties
const MaterialProperty< T > & getMaterialPropertyOld(const std::string &name, MaterialData &material_data)
Retrieve the old property deduced from the name name for the specified material_data.
virtual void checkMaterialProperty(const std::string &name, const unsigned int state)
A helper method for checking material properties This method was required to avoid a compiler problem...
Moose::Kokkos::MaterialProperty< T, dimension > getKokkosMaterialPropertyOldByName(const std::string &prop_name)
Get an old Kokkos material property by property name.
const Moose::MaterialDataType _material_data_type
The type of data.
std::set< SubdomainID > getMaterialPropertyBlocks(const std::string &name)
Retrieve the block ids that the material property is defined.
static const std::string _interpolated_older
const std::set< SubdomainID > & _mi_block_ids
Storage for the block ids created by BlockRestrictable.
const bool _is_kokkos_object
Whether the MOOSE object is a Kokkos object.
const ADMaterialProperty< T > & getADMaterialPropertyByName(const MaterialPropertyName &name)
void markMatPropRequested(const std::string &)
A proxy method for _mi_feproblem.markMatPropRequested(name)
const GenericMaterialProperty< T, is_ad > & getGenericZeroMaterialPropertyByName(const std::string &prop_name)
const GenericMaterialProperty< T, is_ad > & getPossiblyConstantGenericMaterialPropertyByName(const MaterialPropertyName &prop_name, MaterialData &material_data, const unsigned int state)
Retrieve the generic property named "prop_name" without any deduction for the specified material_data...
FEProblemBase & _mi_feproblem
Reference to the FEProblemBase class.
const GenericMaterialProperty< T, is_ad > & getGenericMaterialPropertyByName(const MaterialPropertyName &name, const unsigned int state=0)
Retrieve reference to material property or its old or older value The name required by this method is...
std::unordered_set< unsigned int > _material_property_dependencies
The set of material properties (as given by their IDs) that this object depends on.
std::vector< std::unique_ptr< PropertyValue > > _default_properties
Storage vector for default properties.
std::unordered_map< SubdomainID, std::vector< MaterialBase * > > buildRequiredMaterials(bool allow_stateful=true)
get a map of MaterialBase pointers for all material objects that this object depends on for each bloc...
void checkBlockAndBoundaryCompatibility(std::shared_ptr< MaterialBase > discrete)
Check if block and boundary restrictions of a given material are compatible with the current material...
const OptionalADMaterialProperty< T > & getOptionalADMaterialProperty(const std::string &name)
const OptionalMaterialProperty< T > & getOptionalMaterialPropertyOlder(const std::string &name)
static constexpr PropertyValue::id_type zero_property_id
The material property ID for a zero property.
std::pair< Moose::Kokkos::MaterialProperty< T, dimension >, std::set< SubdomainID > > getKokkosBlockMaterialProperty(const MaterialPropertyName &name)
Retrieve a Kokkos material property with the mesh blocks where it is defined NOTE: This is not a drop...
bool hasKokkosMaterialProperty(const std::string &name)
const ADMaterialProperty< T > & getADMaterialProperty(const std::string &name)
virtual bool getMaterialPropertyCalled() const
Returns true if getMaterialProperty() has been called, false otherwise.
virtual const std::unordered_set< unsigned int > & getMatPropDependencies() const
Retrieve the set of material properties that this object depends on.
bool hasMaterialProperty(const std::string &name)
Check if the material property exists.
const InputParameters & _mi_params
Parameters of the object with this interface.
SubProblem & _mi_subproblem
Reference to the subproblem.
const MooseObjectName _mi_moose_object_name
The "complete" name of the object that this interface belongs for material property output.
const GenericMaterialProperty< T, is_ad > & getGenericZeroMaterialProperty()
Return a constant zero anonymous material property.
MaterialData & _material_data
The material data class that stores properties.
bool hasGenericMaterialPropertyByName(const std::string &name)
Moose::MaterialDataType getMaterialDataType(const std::set< BoundaryID > &boundary_ids) const
const ADMaterialProperty< T > & getADMaterialProperty(const std::string &name, MaterialData &material_data)
Retrieve the AD property named "name" for the specified material_data.
const MaterialProperty< T > & getMaterialPropertyOldByName(const MaterialPropertyName &name, MaterialData &material_data)
Retrieve the old property named name without any deduction for the specified material_data.
static InputParameters validParams()
const MaterialProperty< T > & getMaterialPropertyOld(const std::string &name)
Moose::Kokkos::MaterialProperty< T, dimension > getKokkosMaterialPropertyOlder(const std::string &name)
Get an older Kokkos material property.
const MaterialProperty< T > & getMaterialPropertyByName(const MaterialPropertyName &name, MaterialData &material_data, const unsigned int state=0)
Retrieve the property named "name" without any deduction for the specified material_data.
const MooseObject & _mi_moose_object
The MooseObject creating the MaterialPropertyInterface.
const bool _use_interpolated_state
Use the interpolated state set up through the ProjectedStatefulMaterialStorageAction.
void addConsumedPropertyName(const MooseObjectName &obj_name, const std::string &prop_name)
const MaterialPropertyName _get_suffix
const GenericMaterialProperty< T, is_ad > & getGenericMaterialProperty(const std::string &name, const unsigned int state=0)
Retrieve reference to material property or one of it's old or older values.
const MaterialProperty< T > & getMaterialPropertyOlder(const std::string &name, MaterialData &material_data)
Retrieve the older property deduced from the name name for the specified material_data.
std::set< BoundaryID > getMaterialPropertyBoundaryIDs(const std::string &name)
Retrieve the boundary ids that the material property is defined.
Moose::Kokkos::MaterialProperty< T, dimension > getKokkosMaterialPropertyOld(const std::string &name)
Get an old Kokkos material property.
bool hasKokkosMaterialPropertyByName(const std::string &name)
const OptionalMaterialProperty< T > & getOptionalMaterialProperty(const std::string &name, const unsigned int state=0)
std::pair< const MaterialProperty< T > *, std::set< SubdomainID > > getBlockMaterialProperty(const MaterialPropertyName &name)
Retrieve pointer to a material property with the mesh blocks where it is defined The name required by...
virtual void resolveOptionalProperties()
resolve all optional properties
const std::string _mi_name
The name of the object that this interface belongs to.
void checkExecutionStage()
Check and throw an error if the execution has progressed past the construction stage.
const MaterialProperty< T > * defaultMaterialProperty(const std::string &name)
const MaterialProperty< T > & getMaterialPropertyOlderByName(const MaterialPropertyName &name, MaterialData &material_data)
Retrieve the older property named name without any deduction for the specified material_data.
const GenericOptionalMaterialProperty< T, is_ad > & getGenericOptionalMaterialProperty(const std::string &name, const unsigned int state=0)
Moose::Kokkos::MaterialProperty< T, dimension > getKokkosMaterialProperty(const std::string &name)
Get a Kokkos material property for any state.
static constexpr PropertyValue::id_type default_property_id
The material property ID for a default (parsed from input) property.
virtual void getKokkosMaterialPropertyHook(const std::string &, const unsigned int)
A virtual method that can be overriden by Kokkos objects to insert additional operations in getKokkos...
const MaterialProperty< T > & getZeroMaterialProperty(Ts... args)
for backwards compatibility
void mooseError(Args &&... args) const
Emits an error prefixed with object name and type and optionally a file path to the top-level block p...
Definition MooseBase.h:271
A class for storing the names of MooseObject by tag and object name.
Every object that can be built by the factory should be derived from this class.
Definition MooseObject.h:31
The Kokkos material property class.
Helper class for deferred getting of material properties after the construction phase for materials.
OptionalMaterialPropertyProxyBase(const std::string &name, const unsigned int state)
virtual void resolve(M &material)=0
OptionalMaterialPropertyProxy(const std::string &name, const unsigned int state)
GenericOptionalMaterialProperty< T, is_ad > _value
const GenericOptionalMaterialProperty< T, is_ad > & value() const
static constexpr id_type invalid_property_id
The material property ID for an invalid property We only have this because there are a few cases wher...
unsigned int id_type
The type for a material property ID.
Generic class for solving transient nonlinear problems.
Definition SubProblem.h:79
void mooseSetToZero(T &v)
Helper function templates to set a variable to zero.
Definition MathUtils.h:373
constexpr std::size_t constMaxQpsPerElem
This is used for places where we initialize some qp-sized data structures that would end up being siz...
Definition MooseTypes.h:258
MaterialDataType
MaterialData types.
Definition MooseTypes.h:746