https://mooseframework.inl.gov
Public Types | Public Member Functions | Static Public Member Functions | Public Attributes | Static Public Attributes | Protected Member Functions | Static Protected Member Functions | Protected Attributes | Static Protected Attributes | List of all members
EBSDReader Class Reference

A GeneralUserObject that reads an EBSD file and stores the centroid data in a data structure which indexes on element centroids. More...

#include <EBSDReader.h>

Inheritance diagram for EBSDReader:
[legend]

Public Types

typedef DataFileName DataFileParameterType
 

Public Member Functions

 EBSDReader (const InputParameters &params)
 
virtual ~EBSDReader ()
 
virtual void readFile ()
 
virtual void initialize ()
 
virtual void execute ()
 
virtual void finalize ()
 
const EBSDPointDatagetData (const Point &p) const
 Get the requested type of data at the point p. More...
 
const EBSDAvgDatagetAvgData (unsigned int i) const
 Get the requested type of average data for (global) grain number i. More...
 
const EBSDAvgDatagetAvgData (unsigned int phase, unsigned int local_id) const
 Get the requested type of average data for a given phase and (local) grain. More...
 
virtual const EulerAnglesgetEulerAngles (unsigned int) const
 EulerAngleProvider interface implementation to fetch a triplet of Euler angles. More...
 
virtual unsigned int getGrainNum () const
 Return the total number of grains. More...
 
virtual unsigned int getPhaseNum () const
 Return the total number of phases. More...
 
virtual unsigned int getGrainNum (unsigned int phase) const
 Return the number of grains in a given phase. More...
 
unsigned int getFeatureID (unsigned int phase, unsigned int local_id) const
 Return the EBSD feature id for a given phase and phase (local) grain number. More...
 
unsigned int getFeatureID (unsigned int global_id) const
 Return the EBSD feature id for a given (global) grain number. More...
 
virtual unsigned int getGlobalID (unsigned int phase, unsigned int local_id) const
 Return the (global) grain id for a given phase and (local) grain number. More...
 
virtual unsigned int getGlobalID (unsigned int feature_id) const
 Return the (global) grain id for a given feature_id. More...
 
MooseSharedPointer< EBSDPointDataFunctorgetPointDataAccessFunctor (const MooseEnum &field_name) const
 Factory function to return a point functor specified by name. More...
 
MooseSharedPointer< EBSDAvgDataFunctorgetAvgDataAccessFunctor (const MooseEnum &field_name) const
 Factory function to return a average functor specified by name. More...
 
const std::map< dof_id_type, std::vector< Real > > & getNodeToGrainWeightMap () const
 Returns a map consisting of the node index followd by a vector of all grain weights for that node. More...
 
const std::map< dof_id_type, std::vector< Real > > & getNodeToPhaseWeightMap () const
 Returns a map consisting of the node index followd by a vector of all phase weights for that node. More...
 
void meshChanged ()
 Maps need to be updated when the mesh changes. More...
 
SubProblemgetSubProblem () const
 
bool shouldDuplicateInitialExecution () const
 
virtual Real spatialValue (const Point &) const
 
virtual const std::vector< Point > spatialPoints () const
 
void gatherSum (T &value)
 
void gatherMax (T &value)
 
void gatherMin (T &value)
 
void gatherProxyValueMax (T1 &proxy, T2 &value)
 
void gatherProxyValueMin (T1 &proxy, T2 &value)
 
void setPrimaryThreadCopy (UserObject *primary)
 
UserObjectprimaryThreadCopy ()
 
std::set< UserObjectName > getDependObjects () const
 
virtual bool needThreadedCopy () const
 
const std::set< std::string > & getRequestedItems () override
 
const std::set< std::string > & getSuppliedItems () override
 
unsigned int systemNumber () const
 
virtual bool enabled () const
 
std::shared_ptr< MooseObjectgetSharedPtr ()
 
std::shared_ptr< const MooseObjectgetSharedPtr () const
 
MooseAppgetMooseApp () const
 
const std::string & type () const
 
virtual const std::string & name () const
 
std::string typeAndName () const
 
std::string errorPrefix (const std::string &error_type) const
 
void callMooseError (std::string msg, const bool with_prefix) const
 
MooseObjectParameterName uniqueParameterName (const std::string &parameter_name) const
 
const InputParametersparameters () const
 
MooseObjectName uniqueName () const
 
const T & getParam (const std::string &name) const
 
std::vector< std::pair< T1, T2 > > getParam (const std::string &param1, const std::string &param2) const
 
const T * queryParam (const std::string &name) const
 
const T & getRenamedParam (const std::string &old_name, const std::string &new_name) const
 
getCheckedPointerParam (const std::string &name, const std::string &error_string="") const
 
bool isParamValid (const std::string &name) const
 
bool isParamSetByUser (const std::string &nm) const
 
void paramError (const std::string &param, Args... args) const
 
void paramWarning (const std::string &param, Args... args) const
 
void paramInfo (const std::string &param, Args... args) const
 
void connectControllableParams (const std::string &parameter, const std::string &object_type, const std::string &object_name, const std::string &object_parameter) const
 
void mooseError (Args &&... args) const
 
void mooseErrorNonPrefixed (Args &&... args) const
 
void mooseDocumentedError (const std::string &repo_name, const unsigned int issue_num, Args &&... args) const
 
void mooseWarning (Args &&... args) const
 
void mooseWarningNonPrefixed (Args &&... args) const
 
void mooseDeprecated (Args &&... args) const
 
void mooseInfo (Args &&... args) const
 
std::string getDataFileName (const std::string &param) const
 
std::string getDataFileNameByName (const std::string &relative_path) const
 
std::string getDataFilePath (const std::string &relative_path) const
 
virtual void initialSetup ()
 
virtual void timestepSetup ()
 
virtual void jacobianSetup ()
 
virtual void residualSetup ()
 
virtual void customSetup (const ExecFlagType &)
 
const ExecFlagEnumgetExecuteOnEnum () const
 
UserObjectName getUserObjectName (const std::string &param_name) const
 
const T & getUserObject (const std::string &param_name, bool is_dependency=true) const
 
const T & getUserObjectByName (const UserObjectName &object_name, bool is_dependency=true) const
 
const UserObjectgetUserObjectBase (const std::string &param_name, bool is_dependency=true) const
 
const UserObjectgetUserObjectBaseByName (const UserObjectName &object_name, bool is_dependency=true) const
 
const std::vector< MooseVariableScalar *> & getCoupledMooseScalarVars ()
 
const std::set< TagID > & getScalarVariableCoupleableVectorTags () const
 
const std::set< TagID > & getScalarVariableCoupleableMatrixTags () const
 
const GenericMaterialProperty< T, is_ad > & getGenericMaterialProperty (const std::string &name, MaterialData &material_data, const unsigned int state=0)
 
const GenericMaterialProperty< T, is_ad > & getGenericMaterialProperty (const std::string &name, const unsigned int state=0)
 
const GenericMaterialProperty< T, is_ad > & getGenericMaterialProperty (const std::string &name, const unsigned int state=0)
 
const MaterialProperty< T > & getMaterialProperty (const std::string &name, MaterialData &material_data, const unsigned int state=0)
 
const MaterialProperty< T > & getMaterialProperty (const std::string &name, const unsigned int state=0)
 
const MaterialProperty< T > & getMaterialProperty (const std::string &name, const unsigned int state=0)
 
const ADMaterialProperty< T > & getADMaterialProperty (const std::string &name, MaterialData &material_data)
 
const ADMaterialProperty< T > & getADMaterialProperty (const std::string &name)
 
const ADMaterialProperty< T > & getADMaterialProperty (const std::string &name)
 
const MaterialProperty< T > & getMaterialPropertyOld (const std::string &name, MaterialData &material_data)
 
const MaterialProperty< T > & getMaterialPropertyOld (const std::string &name)
 
const MaterialProperty< T > & getMaterialPropertyOld (const std::string &name)
 
const MaterialProperty< T > & getMaterialPropertyOlder (const std::string &name, MaterialData &material_data)
 
const MaterialProperty< T > & getMaterialPropertyOlder (const std::string &name)
 
const MaterialProperty< T > & getMaterialPropertyOlder (const std::string &name)
 
const GenericMaterialProperty< T, is_ad > & getGenericMaterialPropertyByName (const MaterialPropertyName &name, MaterialData &material_data, const unsigned int state)
 
const GenericMaterialProperty< T, is_ad > & getGenericMaterialPropertyByName (const MaterialPropertyName &name, const unsigned int state=0)
 
const GenericMaterialProperty< T, is_ad > & getGenericMaterialPropertyByName (const MaterialPropertyName &name, const unsigned int state=0)
 
const MaterialProperty< T > & getMaterialPropertyByName (const MaterialPropertyName &name, MaterialData &material_data, const unsigned int state=0)
 
const MaterialProperty< T > & getMaterialPropertyByName (const MaterialPropertyName &name, const unsigned int state=0)
 
const MaterialProperty< T > & getMaterialPropertyByName (const MaterialPropertyName &name, const unsigned int state=0)
 
const ADMaterialProperty< T > & getADMaterialPropertyByName (const MaterialPropertyName &name, MaterialData &material_data)
 
const ADMaterialProperty< T > & getADMaterialPropertyByName (const MaterialPropertyName &name)
 
const ADMaterialProperty< T > & getADMaterialPropertyByName (const MaterialPropertyName &name)
 
const MaterialProperty< T > & getMaterialPropertyOldByName (const MaterialPropertyName &name, MaterialData &material_data)
 
const MaterialProperty< T > & getMaterialPropertyOldByName (const MaterialPropertyName &name)
 
const MaterialProperty< T > & getMaterialPropertyOldByName (const MaterialPropertyName &name)
 
const MaterialProperty< T > & getMaterialPropertyOlderByName (const MaterialPropertyName &name, MaterialData &material_data)
 
const MaterialProperty< T > & getMaterialPropertyOlderByName (const MaterialPropertyName &name)
 
const MaterialProperty< T > & getMaterialPropertyOlderByName (const MaterialPropertyName &name)
 
std::pair< const MaterialProperty< T > *, std::set< SubdomainID > > getBlockMaterialProperty (const MaterialPropertyName &name)
 
const GenericMaterialProperty< T, is_ad > & getGenericZeroMaterialProperty (const std::string &name)
 
const GenericMaterialProperty< T, is_ad > & getGenericZeroMaterialProperty ()
 
const GenericMaterialProperty< T, is_ad > & getGenericZeroMaterialPropertyByName (const std::string &prop_name)
 
const MaterialProperty< T > & getZeroMaterialProperty (Ts... args)
 
std::set< SubdomainIDgetMaterialPropertyBlocks (const std::string &name)
 
std::vector< SubdomainName > getMaterialPropertyBlockNames (const std::string &name)
 
std::set< BoundaryIDgetMaterialPropertyBoundaryIDs (const std::string &name)
 
std::vector< BoundaryName > getMaterialPropertyBoundaryNames (const std::string &name)
 
void checkBlockAndBoundaryCompatibility (std::shared_ptr< MaterialBase > discrete)
 
std::unordered_map< SubdomainID, std::vector< MaterialBase *> > buildRequiredMaterials (bool allow_stateful=true)
 
void statefulPropertiesAllowed (bool)
 
bool getMaterialPropertyCalled () const
 
virtual const std::unordered_set< unsigned int > & getMatPropDependencies () const
 
virtual void resolveOptionalProperties ()
 
const GenericMaterialProperty< T, is_ad > & getPossiblyConstantGenericMaterialPropertyByName (const MaterialPropertyName &prop_name, MaterialData &material_data, const unsigned int state)
 
bool isImplicit ()
 
Moose::StateArg determineState () const
 
virtual void threadJoin (const UserObject &) override
 
virtual void threadJoin (const UserObject &) override
 
virtual void subdomainSetup () override
 
virtual void subdomainSetup () override
 
bool hasUserObject (const std::string &param_name) const
 
bool hasUserObject (const std::string &param_name) const
 
bool hasUserObject (const std::string &param_name) const
 
bool hasUserObject (const std::string &param_name) const
 
bool hasUserObjectByName (const UserObjectName &object_name) const
 
bool hasUserObjectByName (const UserObjectName &object_name) const
 
bool hasUserObjectByName (const UserObjectName &object_name) const
 
bool hasUserObjectByName (const UserObjectName &object_name) const
 
const GenericOptionalMaterialProperty< T, is_ad > & getGenericOptionalMaterialProperty (const std::string &name, const unsigned int state=0)
 
const GenericOptionalMaterialProperty< T, is_ad > & getGenericOptionalMaterialProperty (const std::string &name, const unsigned int state=0)
 
const OptionalMaterialProperty< T > & getOptionalMaterialProperty (const std::string &name, const unsigned int state=0)
 
const OptionalMaterialProperty< T > & getOptionalMaterialProperty (const std::string &name, const unsigned int state=0)
 
const OptionalADMaterialProperty< T > & getOptionalADMaterialProperty (const std::string &name)
 
const OptionalADMaterialProperty< T > & getOptionalADMaterialProperty (const std::string &name)
 
const OptionalMaterialProperty< T > & getOptionalMaterialPropertyOld (const std::string &name)
 
const OptionalMaterialProperty< T > & getOptionalMaterialPropertyOld (const std::string &name)
 
const OptionalMaterialProperty< T > & getOptionalMaterialPropertyOlder (const std::string &name)
 
const OptionalMaterialProperty< T > & getOptionalMaterialPropertyOlder (const std::string &name)
 
MaterialBasegetMaterial (const std::string &name)
 
MaterialBasegetMaterial (const std::string &name)
 
MaterialBasegetMaterialByName (const std::string &name, bool no_warn=false)
 
MaterialBasegetMaterialByName (const std::string &name, bool no_warn=false)
 
bool hasMaterialProperty (const std::string &name)
 
bool hasMaterialProperty (const std::string &name)
 
bool hasMaterialPropertyByName (const std::string &name)
 
bool hasMaterialPropertyByName (const std::string &name)
 
bool hasADMaterialProperty (const std::string &name)
 
bool hasADMaterialProperty (const std::string &name)
 
bool hasADMaterialPropertyByName (const std::string &name)
 
bool hasADMaterialPropertyByName (const std::string &name)
 
bool hasGenericMaterialProperty (const std::string &name)
 
bool hasGenericMaterialProperty (const std::string &name)
 
bool hasGenericMaterialPropertyByName (const std::string &name)
 
bool hasGenericMaterialPropertyByName (const std::string &name)
 
const FunctiongetFunction (const std::string &name) const
 
const FunctiongetFunctionByName (const FunctionName &name) const
 
bool hasFunction (const std::string &param_name) const
 
bool hasFunctionByName (const FunctionName &name) const
 
bool isDefaultPostprocessorValue (const std::string &param_name, const unsigned int index=0) const
 
bool hasPostprocessor (const std::string &param_name, const unsigned int index=0) const
 
bool hasPostprocessorByName (const PostprocessorName &name) const
 
std::size_t coupledPostprocessors (const std::string &param_name) const
 
const PostprocessorName & getPostprocessorName (const std::string &param_name, const unsigned int index=0) const
 
const VectorPostprocessorValuegetVectorPostprocessorValue (const std::string &param_name, const std::string &vector_name) const
 
const VectorPostprocessorValuegetVectorPostprocessorValue (const std::string &param_name, const std::string &vector_name, bool needs_broadcast) const
 
const VectorPostprocessorValuegetVectorPostprocessorValueByName (const VectorPostprocessorName &name, const std::string &vector_name) const
 
const VectorPostprocessorValuegetVectorPostprocessorValueByName (const VectorPostprocessorName &name, const std::string &vector_name, bool needs_broadcast) const
 
const VectorPostprocessorValuegetVectorPostprocessorValueOld (const std::string &param_name, const std::string &vector_name) const
 
const VectorPostprocessorValuegetVectorPostprocessorValueOld (const std::string &param_name, const std::string &vector_name, bool needs_broadcast) const
 
const VectorPostprocessorValuegetVectorPostprocessorValueOldByName (const VectorPostprocessorName &name, const std::string &vector_name) const
 
const VectorPostprocessorValuegetVectorPostprocessorValueOldByName (const VectorPostprocessorName &name, const std::string &vector_name, bool needs_broadcast) const
 
const ScatterVectorPostprocessorValuegetScatterVectorPostprocessorValue (const std::string &param_name, const std::string &vector_name) const
 
const ScatterVectorPostprocessorValuegetScatterVectorPostprocessorValueByName (const VectorPostprocessorName &name, const std::string &vector_name) const
 
const ScatterVectorPostprocessorValuegetScatterVectorPostprocessorValueOld (const std::string &param_name, const std::string &vector_name) const
 
const ScatterVectorPostprocessorValuegetScatterVectorPostprocessorValueOldByName (const VectorPostprocessorName &name, const std::string &vector_name) const
 
bool hasVectorPostprocessor (const std::string &param_name, const std::string &vector_name) const
 
bool hasVectorPostprocessor (const std::string &param_name) const
 
bool hasVectorPostprocessorByName (const VectorPostprocessorName &name, const std::string &vector_name) const
 
bool hasVectorPostprocessorByName (const VectorPostprocessorName &name) const
 
const VectorPostprocessorName & getVectorPostprocessorName (const std::string &param_name) const
 
T & getSampler (const std::string &name)
 
SamplergetSampler (const std::string &name)
 
T & getSamplerByName (const SamplerName &name)
 
SamplergetSamplerByName (const SamplerName &name)
 
virtual void meshDisplaced ()
 
PerfGraphperfGraph ()
 
const PostprocessorValuegetPostprocessorValue (const std::string &param_name, const unsigned int index=0) const
 
const PostprocessorValuegetPostprocessorValue (const std::string &param_name, const unsigned int index=0) const
 
const PostprocessorValuegetPostprocessorValueOld (const std::string &param_name, const unsigned int index=0) const
 
const PostprocessorValuegetPostprocessorValueOld (const std::string &param_name, const unsigned int index=0) const
 
const PostprocessorValuegetPostprocessorValueOlder (const std::string &param_name, const unsigned int index=0) const
 
const PostprocessorValuegetPostprocessorValueOlder (const std::string &param_name, const unsigned int index=0) const
 
virtual const PostprocessorValuegetPostprocessorValueByName (const PostprocessorName &name) const
 
virtual const PostprocessorValuegetPostprocessorValueByName (const PostprocessorName &name) const
 
const PostprocessorValuegetPostprocessorValueOldByName (const PostprocessorName &name) const
 
const PostprocessorValuegetPostprocessorValueOldByName (const PostprocessorName &name) const
 
const PostprocessorValuegetPostprocessorValueOlderByName (const PostprocessorName &name) const
 
const PostprocessorValuegetPostprocessorValueOlderByName (const PostprocessorName &name) const
 
bool isVectorPostprocessorDistributed (const std::string &param_name) const
 
bool isVectorPostprocessorDistributed (const std::string &param_name) const
 
bool isVectorPostprocessorDistributedByName (const VectorPostprocessorName &name) const
 
bool isVectorPostprocessorDistributedByName (const VectorPostprocessorName &name) const
 
const DistributiongetDistribution (const std::string &name) const
 
const T & getDistribution (const std::string &name) const
 
const DistributiongetDistribution (const std::string &name) const
 
const T & getDistribution (const std::string &name) const
 
const DistributiongetDistributionByName (const DistributionName &name) const
 
const T & getDistributionByName (const std::string &name) const
 
const DistributiongetDistributionByName (const DistributionName &name) const
 
const T & getDistributionByName (const std::string &name) const
 
const Parallel::Communicator & comm () const
 
processor_id_type n_processors () const
 
processor_id_type processor_id () const
 

Static Public Member Functions

static InputParameters validParams ()
 
static void sort (typename std::vector< T > &vector)
 
static void sortDFS (typename std::vector< T > &vector)
 
static void cyclicDependencyError (CyclicDependencyException< T2 > &e, const std::string &header)
 
static MooseEnum getPointDataFieldType ()
 
static MooseEnum getAvgDataFieldType ()
 

Public Attributes

const ConsoleStream _console
 

Static Public Attributes

static constexpr PropertyValue::id_type default_property_id
 
static constexpr PropertyValue::id_type zero_property_id
 
static constexpr auto SYSTEM
 
static constexpr auto NAME
 

Protected Member Functions

unsigned indexFromPoint (const Point &p) const
 Computes a global index in the _data array given an input centroid point. More...
 
unsigned indexFromIndex (unsigned int var) const
 Transfer the index into the _avg_data array from given index. More...
 
void buildNodeWeightMaps ()
 Build grain and phase weight maps. More...
 
virtual void addPostprocessorDependencyHelper (const PostprocessorName &name) const override
 
virtual void addVectorPostprocessorDependencyHelper (const VectorPostprocessorName &name) const override
 
virtual void addUserObjectDependencyHelper (const UserObject &uo) const override
 
void addReporterDependencyHelper (const ReporterName &reporter_name) override
 
const ReporterNamegetReporterName (const std::string &param_name) const
 
T & declareRestartableData (const std::string &data_name, Args &&... args)
 
ManagedValue< T > declareManagedRestartableDataWithContext (const std::string &data_name, void *context, Args &&... args)
 
const T & getRestartableData (const std::string &data_name) const
 
T & declareRestartableDataWithContext (const std::string &data_name, void *context, Args &&... args)
 
T & declareRecoverableData (const std::string &data_name, Args &&... args)
 
T & declareRestartableDataWithObjectName (const std::string &data_name, const std::string &object_name, Args &&... args)
 
T & declareRestartableDataWithObjectNameWithContext (const std::string &data_name, const std::string &object_name, void *context, Args &&... args)
 
std::string restartableName (const std::string &data_name) const
 
const T & getMeshProperty (const std::string &data_name, const std::string &prefix)
 
const T & getMeshProperty (const std::string &data_name)
 
bool hasMeshProperty (const std::string &data_name, const std::string &prefix) const
 
bool hasMeshProperty (const std::string &data_name, const std::string &prefix) const
 
bool hasMeshProperty (const std::string &data_name) const
 
bool hasMeshProperty (const std::string &data_name) const
 
std::string meshPropertyName (const std::string &data_name) const
 
PerfID registerTimedSection (const std::string &section_name, const unsigned int level) const
 
PerfID registerTimedSection (const std::string &section_name, const unsigned int level, const std::string &live_message, const bool print_dots=true) const
 
std::string timedSectionName (const std::string &section_name) const
 
bool isCoupledScalar (const std::string &var_name, unsigned int i=0) const
 
unsigned int coupledScalarComponents (const std::string &var_name) const
 
unsigned int coupledScalar (const std::string &var_name, unsigned int comp=0) const
 
libMesh::Order coupledScalarOrder (const std::string &var_name, unsigned int comp=0) const
 
const VariableValuecoupledScalarValue (const std::string &var_name, unsigned int comp=0) const
 
const ADVariableValueadCoupledScalarValue (const std::string &var_name, unsigned int comp=0) const
 
const GenericVariableValue< is_ad > & coupledGenericScalarValue (const std::string &var_name, unsigned int comp=0) const
 
const GenericVariableValue< false > & coupledGenericScalarValue (const std::string &var_name, const unsigned int comp) const
 
const GenericVariableValue< true > & coupledGenericScalarValue (const std::string &var_name, const unsigned int comp) const
 
const VariableValuecoupledVectorTagScalarValue (const std::string &var_name, TagID tag, unsigned int comp=0) const
 
const VariableValuecoupledMatrixTagScalarValue (const std::string &var_name, TagID tag, unsigned int comp=0) const
 
const VariableValuecoupledScalarValueOld (const std::string &var_name, unsigned int comp=0) const
 
const VariableValuecoupledScalarValueOlder (const std::string &var_name, unsigned int comp=0) const
 
const VariableValuecoupledScalarDot (const std::string &var_name, unsigned int comp=0) const
 
const ADVariableValueadCoupledScalarDot (const std::string &var_name, unsigned int comp=0) const
 
const VariableValuecoupledScalarDotDot (const std::string &var_name, unsigned int comp=0) const
 
const VariableValuecoupledScalarDotOld (const std::string &var_name, unsigned int comp=0) const
 
const VariableValuecoupledScalarDotDotOld (const std::string &var_name, unsigned int comp=0) const
 
const VariableValuecoupledScalarDotDu (const std::string &var_name, unsigned int comp=0) const
 
const VariableValuecoupledScalarDotDotDu (const std::string &var_name, unsigned int comp=0) const
 
const MooseVariableScalargetScalarVar (const std::string &var_name, unsigned int comp) const
 
virtual void checkMaterialProperty (const std::string &name, const unsigned int state)
 
void markMatPropRequested (const std::string &)
 
MaterialPropertyName getMaterialPropertyName (const std::string &name) const
 
void checkExecutionStage ()
 
const T & getReporterValue (const std::string &param_name, const std::size_t time_index=0)
 
const T & getReporterValue (const std::string &param_name, ReporterMode mode, const std::size_t time_index=0)
 
const T & getReporterValue (const std::string &param_name, const std::size_t time_index=0)
 
const T & getReporterValue (const std::string &param_name, ReporterMode mode, const std::size_t time_index=0)
 
const T & getReporterValueByName (const ReporterName &reporter_name, const std::size_t time_index=0)
 
const T & getReporterValueByName (const ReporterName &reporter_name, ReporterMode mode, const std::size_t time_index=0)
 
const T & getReporterValueByName (const ReporterName &reporter_name, const std::size_t time_index=0)
 
const T & getReporterValueByName (const ReporterName &reporter_name, ReporterMode mode, const std::size_t time_index=0)
 
bool hasReporterValue (const std::string &param_name) const
 
bool hasReporterValue (const std::string &param_name) const
 
bool hasReporterValue (const std::string &param_name) const
 
bool hasReporterValue (const std::string &param_name) const
 
bool hasReporterValueByName (const ReporterName &reporter_name) const
 
bool hasReporterValueByName (const ReporterName &reporter_name) const
 
bool hasReporterValueByName (const ReporterName &reporter_name) const
 
bool hasReporterValueByName (const ReporterName &reporter_name) const
 
const GenericMaterialProperty< T, is_ad > * defaultGenericMaterialProperty (const std::string &name)
 
const GenericMaterialProperty< T, is_ad > * defaultGenericMaterialProperty (const std::string &name)
 
const MaterialProperty< T > * defaultMaterialProperty (const std::string &name)
 
const MaterialProperty< T > * defaultMaterialProperty (const std::string &name)
 
const ADMaterialProperty< T > * defaultADMaterialProperty (const std::string &name)
 
const ADMaterialProperty< T > * defaultADMaterialProperty (const std::string &name)
 

Static Protected Member Functions

static std::string meshPropertyName (const std::string &data_name, const std::string &prefix)
 

Protected Attributes

unsigned int _custom_columns
 number of additional custom data columns More...
 
std::vector< EBSDPointData_data
 Logically three-dimensional data indexed by geometric points in a 1D vector. More...
 
std::vector< EBSDAvgData_avg_data
 Averages by (global) grain ID. More...
 
std::vector< EulerAngles_avg_angles
 Euler Angles by (global) grain ID. More...
 
std::map< unsigned int, unsigned int_global_id_map
 map from feature_id to global_id More...
 
std::vector< std::vector< unsigned int > > _global_id
 global ID for given phases and grains More...
 
std::map< dof_id_type, std::vector< Real > > _node_to_grain_weight_map
 Map of grain weights per node. More...
 
std::map< dof_id_type, std::vector< Real > > _node_to_phase_weight_map
 Map of phase weights per node. More...
 
const int_time_step
 current timestep. Maps are only rebuild on mesh change during time step zero More...
 
unsigned int _mesh_dimension
 Dimension of the problem domain. More...
 
unsigned int _bins
 number of bins for each quaternion component More...
 
unsigned int _L_norm
 L_norm value for averaging. More...
 
unsigned _nx
 The number of values in the x, y and z directions. More...
 
unsigned _ny
 
unsigned _nz
 
Real _dx
 The spacing of the values in x, y and z directions. More...
 
Real _dy
 
Real _dz
 
Real _minx
 Grid origin. More...
 
Real _miny
 
Real _minz
 
Real _maxx
 Maximum grid extent. More...
 
Real _maxy
 
Real _maxz
 
SubProblem_subproblem
 
FEProblemBase_fe_problem
 
SystemBase_sys
 
const THREAD_ID _tid
 
Assembly_assembly
 
const Moose::CoordinateSystemType_coord_sys
 
const bool _duplicate_initial_execution
 
std::set< std::string > _depend_uo
 
const bool & _enabled
 
MooseApp_app
 
const std::string _type
 
const std::string _name
 
const InputParameters_pars
 
Factory_factory
 
ActionFactory_action_factory
 
const ExecFlagEnum_execute_enum
 
const ExecFlagType_current_execute_flag
 
MooseApp_restartable_app
 
const std::string _restartable_system_name
 
const THREAD_ID _restartable_tid
 
const bool _restartable_read_only
 
FEProblemBase_mci_feproblem
 
FEProblemBase_mdi_feproblem
 
MooseApp_pg_moose_app
 
const std::string _prefix
 
FEProblemBase_sc_fe_problem
 
const THREAD_ID _sc_tid
 
const Real_real_zero
 
const VariableValue_scalar_zero
 
const Point & _point_zero
 
const InputParameters_mi_params
 
const std::string _mi_name
 
const MooseObjectName _mi_moose_object_name
 
FEProblemBase_mi_feproblem
 
SubProblem_mi_subproblem
 
const THREAD_ID _mi_tid
 
const Moose::MaterialDataType _material_data_type
 
MaterialData_material_data
 
bool _stateful_allowed
 
bool _get_material_property_called
 
std::vector< std::unique_ptr< PropertyValue > > _default_properties
 
std::unordered_set< unsigned int_material_property_dependencies
 
const MaterialPropertyName _get_suffix
 
const bool _use_interpolated_state
 
const InputParameters_ti_params
 
FEProblemBase_ti_feproblem
 
bool _is_implicit
 
Real_t
 
const Real_t_old
 
int_t_step
 
Real_dt
 
Real_dt_old
 
bool _is_transient
 
const Parallel::Communicator & _communicator
 
MooseMesh_mesh
 MooseMesh Variables. More...
 
NonlinearSystemBase_nl
 
unsigned int _grain_num
 Variables needed to determine reduced order parameter values. More...
 
Point _bottom_left
 
Point _top_right
 
Point _range
 

Static Protected Attributes

static const std::string _interpolated_old
 
static const std::string _interpolated_older
 

Detailed Description

A GeneralUserObject that reads an EBSD file and stores the centroid data in a data structure which indexes on element centroids.

Grains are indexed through multiple schemes:

Phases are referred to using the numbers in the EBSD data file. In case the phase number in the data file starts at 1 the phase 0 will simply contain no grains.

Definition at line 31 of file EBSDReader.h.

Constructor & Destructor Documentation

◆ EBSDReader()

EBSDReader::EBSDReader ( const InputParameters params)

Definition at line 40 of file EBSDReader.C.

41  : EulerAngleProvider(params),
44  _grain_num(0),
45  _custom_columns(getParam<unsigned int>("custom_columns")),
48  _bins(getParam<unsigned int>("bins")),
49  _L_norm(getParam<Real>("L_norm")),
50  _nx(0),
51  _ny(0),
52  _nz(0),
53  _dx(0.),
54  _dy(0.),
55  _dz(0.)
56 {
57  readFile();
58  // throws an error for zero bins
59  if (_bins == 0)
60  mooseError("One cannot have zero bins");
61 }
unsigned int _custom_columns
number of additional custom data columns
Definition: EBSDReader.h:135
unsigned _nz
Definition: EBSDReader.h:171
unsigned int _grain_num
Variables needed to determine reduced order parameter values.
Definition: EBSDReader.h:128
unsigned int _L_norm
L_norm value for averaging.
Definition: EBSDReader.h:168
unsigned _nx
The number of values in the x, y and z directions.
Definition: EBSDReader.h:171
MooseMesh & _mesh
MooseMesh Variables.
Definition: EBSDReader.h:123
virtual unsigned int dimension() const
const int & _time_step
current timestep. Maps are only rebuild on mesh change during time step zero
Definition: EBSDReader.h:159
unsigned _ny
Definition: EBSDReader.h:171
NonlinearSystemBase & getNonlinearSystemBase(const unsigned int sys_num)
SystemBase & _sys
Real _dx
The spacing of the values in x, y and z directions.
Definition: EBSDReader.h:174
unsigned int number() const
EulerAngleProvider(const InputParameters &parameters)
unsigned int _mesh_dimension
Dimension of the problem domain.
Definition: EBSDReader.h:162
virtual int & timeStep() const
FEProblemBase & _fe_problem
unsigned int _bins
number of bins for each quaternion component
Definition: EBSDReader.h:165
virtual MooseMesh & mesh() override
void mooseError(Args &&... args) const
NonlinearSystemBase & _nl
Definition: EBSDReader.h:124
virtual void readFile()
Definition: EBSDReader.C:64

◆ ~EBSDReader()

EBSDReader::~EBSDReader ( )
virtual

Definition at line 347 of file EBSDReader.C.

347 {}

Member Function Documentation

◆ buildNodeWeightMaps()

void EBSDReader::buildNodeWeightMaps ( )
protected

Build grain and phase weight maps.

Definition at line 466 of file EBSDReader.C.

Referenced by meshChanged(), and readFile().

467 {
468  // Import nodeToElemMap from MooseMesh for current node
469  // This map consists of the node index followed by a vector of element indices that are associated
470  // with that node
471  const std::map<dof_id_type, std::vector<dof_id_type>> & node_to_elem_map =
474 
475  // Loop through each node in mesh and calculate eta values for each grain associated with the node
476  for (const auto & node : as_range(mesh.active_nodes_begin(), mesh.active_nodes_end()))
477  {
478  // Get node_id
479  const dof_id_type node_id = node->id();
480 
481  // Initialize map entries for current node
482  _node_to_grain_weight_map[node_id].assign(getGrainNum(), 0.0);
483  _node_to_phase_weight_map[node_id].assign(getPhaseNum(), 0.0);
484 
485  // Loop through element indices associated with the current node and record weighted eta value
486  // in new map
487  const auto & node_to_elem_pair = node_to_elem_map.find(node_id);
488  if (node_to_elem_pair != node_to_elem_map.end())
489  {
490  unsigned int n_elems =
491  node_to_elem_pair->second
492  .size(); // n_elems can range from 1 to 4 for 2D and 1 to 8 for 3D problems
493 
494  for (unsigned int ne = 0; ne < n_elems; ++ne)
495  {
496  // Current element index
497  unsigned int elem_id = (node_to_elem_pair->second)[ne];
498 
499  // Retrieve EBSD grain number for the current element index
500  const Elem * elem = mesh.elem_ptr(elem_id);
501  const EBSDReader::EBSDPointData & d = getData(elem->vertex_average());
502 
503  // get the (global) grain ID for the EBSD feature ID
504  const unsigned int global_id = getGlobalID(d._feature_id);
505 
506  // Calculate eta value and add to map
507  _node_to_grain_weight_map[node_id][global_id] += 1.0 / n_elems;
508  _node_to_phase_weight_map[node_id][d._phase] += 1.0 / n_elems;
509  }
510  }
511  }
512 }
std::map< dof_id_type, std::vector< Real > > _node_to_phase_weight_map
Map of phase weights per node.
Definition: EBSDReader.h:156
const std::map< dof_id_type, std::vector< dof_id_type > > & nodeToActiveSemilocalElemMap()
MeshBase & mesh
const EBSDPointData & getData(const Point &p) const
Get the requested type of data at the point p.
Definition: EBSDReader.C:350
MooseMesh & _mesh
MooseMesh Variables.
Definition: EBSDReader.h:123
MeshBase & getMesh()
Per element EBSD data point.
SimpleRange< IndexType > as_range(const std::pair< IndexType, IndexType > &p)
virtual unsigned int getGrainNum() const
Return the total number of grains.
Definition: EBSDReader.C:374
std::map< dof_id_type, std::vector< Real > > _node_to_grain_weight_map
Map of grain weights per node.
Definition: EBSDReader.h:153
virtual unsigned int getPhaseNum() const
Return the total number of phases.
Definition: EBSDReader.h:73
uint8_t dof_id_type
virtual unsigned int getGlobalID(unsigned int phase, unsigned int local_id) const
Return the (global) grain id for a given phase and (local) grain number.
Definition: EBSDReader.h:92

◆ execute()

virtual void EBSDReader::execute ( )
inlinevirtual

Implements GeneralUserObject.

Definition at line 42 of file EBSDReader.h.

42 {}

◆ finalize()

virtual void EBSDReader::finalize ( )
inlinevirtual

Implements GeneralUserObject.

Definition at line 43 of file EBSDReader.h.

43 {}

◆ getAvgData() [1/2]

const EBSDReader::EBSDAvgData & EBSDReader::getAvgData ( unsigned int  i) const

Get the requested type of average data for (global) grain number i.

Definition at line 356 of file EBSDReader.C.

Referenced by PolycrystalEBSD::getGrainsBasedOnPoint(), and EBSDReaderAvgDataAux::precalculateValue().

357 {
358  return _avg_data[indexFromIndex(var)];
359 }
std::vector< EBSDAvgData > _avg_data
Averages by (global) grain ID.
Definition: EBSDReader.h:141
unsigned indexFromIndex(unsigned int var) const
Transfer the index into the _avg_data array from given index.
Definition: EBSDReader.C:420

◆ getAvgData() [2/2]

const EBSDReader::EBSDAvgData & EBSDReader::getAvgData ( unsigned int  phase,
unsigned int  local_id 
) const

Get the requested type of average data for a given phase and (local) grain.

Definition at line 368 of file EBSDReader.C.

369 {
370  return _avg_data[indexFromIndex(_global_id[phase][local_id])];
371 }
std::vector< EBSDAvgData > _avg_data
Averages by (global) grain ID.
Definition: EBSDReader.h:141
unsigned indexFromIndex(unsigned int var) const
Transfer the index into the _avg_data array from given index.
Definition: EBSDReader.C:420
std::vector< std::vector< unsigned int > > _global_id
global ID for given phases and grains
Definition: EBSDReader.h:150

◆ getAvgDataAccessFunctor()

MooseSharedPointer< EBSDAccessFunctors::EBSDAvgDataFunctor > EBSDReader::getAvgDataAccessFunctor ( const MooseEnum field_name) const

Factory function to return a average functor specified by name.

Definition at line 561 of file EBSDReader.C.

562 {
563  EBSDAvgDataFunctor * ret_val = NULL;
564 
565  switch (field_name)
566  {
567  case 0: // phi1
568  ret_val = new EBSDAvgDataPhi1();
569  break;
570  case 1: // phi
571  ret_val = new EBSDAvgDataPhi();
572  break;
573  case 2: // phi2
574  ret_val = new EBSDAvgDataPhi2();
575  break;
576  case 3: // phase
577  ret_val = new EBSDAvgDataPhase();
578  break;
579  case 4: // symmetry
580  ret_val = new EBSDAvgDataSymmetry();
581  break;
582  case 5: // local_id
583  ret_val = new EBSDAvgDataLocalID();
584  break;
585  case 6: // feature_id
586  ret_val = new EBSDAvgDataFeatureID();
587  break;
588  default:
589  {
590  // check for custom columns
591  for (const auto i : make_range(_custom_columns))
592  if (field_name == "CUSTOM" + Moose::stringify(i))
593  {
594  ret_val = new EBSDAvgDataCustom(i);
595  break;
596  }
597  }
598  }
599 
600  // If ret_val was not set by any of the above cases, throw an error.
601  if (!ret_val)
602  mooseError("Error: Please input supported EBSD_param");
603 
604  // If we made it here, wrap up the the ret_val in a
605  // MooseSharedPointer and ship it off.
606  return MooseSharedPointer<EBSDAvgDataFunctor>(ret_val);
607 }
unsigned int _custom_columns
number of additional custom data columns
Definition: EBSDReader.h:135
std::string stringify(const T &t)
IntRange< T > make_range(T beg, T end)
void mooseError(Args &&... args) const

◆ getAvgDataFieldType()

MooseEnum EBSDAccessFunctors::getAvgDataFieldType ( )
staticinherited

Definition at line 19 of file EBSDAccessFunctors.C.

Referenced by EBSDReaderAvgDataAux::validParams().

20 {
21  return MooseEnum("phi1 phi phi2 phase symmetry local_id feature_id", "", true);
22 }

◆ getData()

const EBSDReader::EBSDPointData & EBSDReader::getData ( const Point &  p) const

Get the requested type of data at the point p.

Definition at line 350 of file EBSDReader.C.

Referenced by buildNodeWeightMaps(), PolycrystalEBSD::getGrainsBasedOnPoint(), and EBSDReaderPointDataAux::precalculateValue().

351 {
352  return _data[indexFromPoint(p)];
353 }
unsigned indexFromPoint(const Point &p) const
Computes a global index in the _data array given an input centroid point.
Definition: EBSDReader.C:386
std::vector< EBSDPointData > _data
Logically three-dimensional data indexed by geometric points in a 1D vector.
Definition: EBSDReader.h:138

◆ getEulerAngles()

const EulerAngles & EBSDReader::getEulerAngles ( unsigned int  var) const
virtual

EulerAngleProvider interface implementation to fetch a triplet of Euler angles.

Implements EulerAngleProvider.

Definition at line 362 of file EBSDReader.C.

Referenced by ComputeGBMisorientationType::getMisorientationAngles().

363 {
364  return _avg_angles[indexFromIndex(var)];
365 }
unsigned indexFromIndex(unsigned int var) const
Transfer the index into the _avg_data array from given index.
Definition: EBSDReader.C:420
std::vector< EulerAngles > _avg_angles
Euler Angles by (global) grain ID.
Definition: EBSDReader.h:144

◆ getFeatureID() [1/2]

unsigned int EBSDReader::getFeatureID ( unsigned int  phase,
unsigned int  local_id 
) const
inline

Return the EBSD feature id for a given phase and phase (local) grain number.

Definition at line 81 of file EBSDReader.h.

Referenced by ComputeGBMisorientationType::computeQpProperties(), and ComputeGBMisorientationType::getMisorientationAngles().

82  {
83  return _avg_data[_global_id[phase][local_id]]._feature_id;
84  }
std::vector< EBSDAvgData > _avg_data
Averages by (global) grain ID.
Definition: EBSDReader.h:141
std::vector< std::vector< unsigned int > > _global_id
global ID for given phases and grains
Definition: EBSDReader.h:150

◆ getFeatureID() [2/2]

unsigned int EBSDReader::getFeatureID ( unsigned int  global_id) const
inline

Return the EBSD feature id for a given (global) grain number.

Definition at line 86 of file EBSDReader.h.

87  {
88  return _avg_data[global_id]._feature_id;
89  }
std::vector< EBSDAvgData > _avg_data
Averages by (global) grain ID.
Definition: EBSDReader.h:141

◆ getGlobalID() [1/2]

virtual unsigned int EBSDReader::getGlobalID ( unsigned int  phase,
unsigned int  local_id 
) const
inlinevirtual

Return the (global) grain id for a given phase and (local) grain number.

Definition at line 92 of file EBSDReader.h.

Referenced by buildNodeWeightMaps(), PolycrystalEBSD::getGrainsBasedOnPoint(), PolycrystalEBSD::getNodalVariableValue(), and EulerAngleProvider2RGBAux::precalculateValue().

93  {
94  return _global_id[phase][local_id];
95  }
std::vector< std::vector< unsigned int > > _global_id
global ID for given phases and grains
Definition: EBSDReader.h:150

◆ getGlobalID() [2/2]

unsigned int EBSDReader::getGlobalID ( unsigned int  feature_id) const
virtual

Return the (global) grain id for a given feature_id.

Definition at line 449 of file EBSDReader.C.

450 {
451  auto it = _global_id_map.find(feature_id);
452  if (it == _global_id_map.end())
453  mooseError("Invalid Feature ID");
454  return it->second;
455 }
std::map< unsigned int, unsigned int > _global_id_map
map from feature_id to global_id
Definition: EBSDReader.h:147
void mooseError(Args &&... args) const

◆ getGrainNum() [1/2]

unsigned int EBSDReader::getGrainNum ( ) const
virtual

Return the total number of grains.

Implements EulerAngleProvider.

Definition at line 374 of file EBSDReader.C.

Referenced by buildNodeWeightMaps(), ComputeGBMisorientationType::getMisorientationAngles(), PolycrystalEBSD::getNumGrains(), and EulerAngleProvider2RGBAux::getNumGrains().

375 {
376  return _grain_num;
377 }
unsigned int _grain_num
Variables needed to determine reduced order parameter values.
Definition: EBSDReader.h:128

◆ getGrainNum() [2/2]

unsigned int EBSDReader::getGrainNum ( unsigned int  phase) const
virtual

Return the number of grains in a given phase.

Definition at line 380 of file EBSDReader.C.

381 {
382  return _global_id[phase].size();
383 }
std::vector< std::vector< unsigned int > > _global_id
global ID for given phases and grains
Definition: EBSDReader.h:150

◆ getNodeToGrainWeightMap()

const std::map< dof_id_type, std::vector< Real > > & EBSDReader::getNodeToGrainWeightMap ( ) const

Returns a map consisting of the node index followd by a vector of all grain weights for that node.

Needed by ReconVarIC

Definition at line 437 of file EBSDReader.C.

438 {
440 }
std::map< dof_id_type, std::vector< Real > > _node_to_grain_weight_map
Map of grain weights per node.
Definition: EBSDReader.h:153

◆ getNodeToPhaseWeightMap()

const std::map< dof_id_type, std::vector< Real > > & EBSDReader::getNodeToPhaseWeightMap ( ) const

Returns a map consisting of the node index followd by a vector of all phase weights for that node.

Needed by ReconPhaseVarIC

Definition at line 443 of file EBSDReader.C.

444 {
446 }
std::map< dof_id_type, std::vector< Real > > _node_to_phase_weight_map
Map of phase weights per node.
Definition: EBSDReader.h:156

◆ getPhaseNum()

virtual unsigned int EBSDReader::getPhaseNum ( ) const
inlinevirtual

Return the total number of phases.

Definition at line 73 of file EBSDReader.h.

Referenced by buildNodeWeightMaps().

73 { return _global_id.size(); }
std::vector< std::vector< unsigned int > > _global_id
global ID for given phases and grains
Definition: EBSDReader.h:150

◆ getPointDataAccessFunctor()

MooseSharedPointer< EBSDAccessFunctors::EBSDPointDataFunctor > EBSDReader::getPointDataAccessFunctor ( const MooseEnum field_name) const

Factory function to return a point functor specified by name.

Definition at line 515 of file EBSDReader.C.

516 {
517  EBSDPointDataFunctor * ret_val = NULL;
518 
519  switch (field_name)
520  {
521  case 0: // phi1
522  ret_val = new EBSDPointDataPhi1();
523  break;
524  case 1: // phi
525  ret_val = new EBSDPointDataPhi();
526  break;
527  case 2: // phi2
528  ret_val = new EBSDPointDataPhi2();
529  break;
530  case 3: // grain
531  ret_val = new EBSDPointDataFeatureID();
532  break;
533  case 4: // phase
534  ret_val = new EBSDPointDataPhase();
535  break;
536  case 5: // symmetry
537  ret_val = new EBSDPointDataSymmetry();
538  break;
539  default:
540  {
541  // check for custom columns
542  for (const auto i : make_range(_custom_columns))
543  if (field_name == "CUSTOM" + Moose::stringify(i))
544  {
545  ret_val = new EBSDPointDataCustom(i);
546  break;
547  }
548  }
549  }
550 
551  // If ret_val was not set by any of the above cases, throw an error.
552  if (!ret_val)
553  mooseError("Error: Please input supported EBSD_param");
554 
555  // If we made it here, wrap up the the ret_val in a
556  // MooseSharedPointer and ship it off.
557  return MooseSharedPointer<EBSDPointDataFunctor>(ret_val);
558 }
unsigned int _custom_columns
number of additional custom data columns
Definition: EBSDReader.h:135
std::string stringify(const T &t)
IntRange< T > make_range(T beg, T end)
void mooseError(Args &&... args) const

◆ getPointDataFieldType()

MooseEnum EBSDAccessFunctors::getPointDataFieldType ( )
staticinherited

Definition at line 13 of file EBSDAccessFunctors.C.

Referenced by EBSDReaderPointDataAux::validParams().

14 {
15  return MooseEnum("phi1 phi phi2 feature_id phase symmetry", "", true);
16 }

◆ indexFromIndex()

unsigned int EBSDReader::indexFromIndex ( unsigned int  var) const
protected

Transfer the index into the _avg_data array from given index.

Definition at line 420 of file EBSDReader.C.

Referenced by getAvgData(), and getEulerAngles().

421 {
422 
423  // Transfer the index into the _avg_data array.
424  unsigned avg_index = var;
425 
426  // Don't access out of range!
427  if (avg_index >= _avg_data.size())
428  mooseError("Error! Index out of range in EBSDReader::indexFromIndex(), index: ",
429  avg_index,
430  " size: ",
431  _avg_data.size());
432 
433  return avg_index;
434 }
std::vector< EBSDAvgData > _avg_data
Averages by (global) grain ID.
Definition: EBSDReader.h:141
void mooseError(Args &&... args) const

◆ indexFromPoint()

unsigned int EBSDReader::indexFromPoint ( const Point &  p) const
protected

Computes a global index in the _data array given an input centroid point.

Definition at line 386 of file EBSDReader.C.

Referenced by getData(), and readFile().

387 {
388  // Don't assume an ordering on the input data, use the (x, y,
389  // z) values of this centroid to determine the index.
390  unsigned int x_index, y_index, z_index, global_index;
391 
392  x_index = (unsigned int)((p(0) - _minx) / _dx);
393  y_index = (unsigned int)((p(1) - _miny) / _dy);
394  if (p(0) <= _minx || p(0) >= _maxx || p(1) <= _miny || p(1) >= _maxy)
395  mooseError("Data points must be on the interior of the mesh elements. In EBSDReader ", name());
396 
397  if (_mesh_dimension == 3)
398  {
399  z_index = (unsigned int)((p(2) - _minz) / _dz);
400  global_index = z_index * _ny;
401  if (p(2) <= _minz || p(2) >= _maxz)
402  mooseError("Data points must be on the interior of the mesh elements. In EBSDReader ",
403  name());
404  }
405  else
406  global_index = 0;
407 
408  // Compute the global index into the _data array. This stores points
409  // in a [z][y][x] ordering.
410  global_index = (global_index + y_index) * _nx + x_index;
411 
412  // Don't access out of range!
413  mooseAssert(global_index < _data.size(),
414  "global_index " << global_index << " points out of _data range: " << _data.size());
415 
416  return global_index;
417 }
Real _minx
Grid origin.
Definition: EBSDReader.h:177
Real _maxx
Maximum grid extent.
Definition: EBSDReader.h:180
Real _miny
Definition: EBSDReader.h:177
unsigned _nx
The number of values in the x, y and z directions.
Definition: EBSDReader.h:171
virtual const std::string & name() const
Real _minz
Definition: EBSDReader.h:177
unsigned _ny
Definition: EBSDReader.h:171
Real _dx
The spacing of the values in x, y and z directions.
Definition: EBSDReader.h:174
unsigned int _mesh_dimension
Dimension of the problem domain.
Definition: EBSDReader.h:162
Real _maxz
Definition: EBSDReader.h:180
void mooseError(Args &&... args) const
Real _maxy
Definition: EBSDReader.h:180
void ErrorVector unsigned int
std::vector< EBSDPointData > _data
Logically three-dimensional data indexed by geometric points in a 1D vector.
Definition: EBSDReader.h:138

◆ initialize()

virtual void EBSDReader::initialize ( )
inlinevirtual

Implements GeneralUserObject.

Definition at line 41 of file EBSDReader.h.

41 {}

◆ meshChanged()

void EBSDReader::meshChanged ( )
virtual

Maps need to be updated when the mesh changes.

Reimplemented from GeneralUserObject.

Definition at line 458 of file EBSDReader.C.

459 {
460  // maps are only rebuild for use in initial conditions, which happens in time step zero
461  if (_time_step == 0)
463 }
const int & _time_step
current timestep. Maps are only rebuild on mesh change during time step zero
Definition: EBSDReader.h:159
void buildNodeWeightMaps()
Build grain and phase weight maps.
Definition: EBSDReader.C:466

◆ readFile()

void EBSDReader::readFile ( )
virtual

Markley, F. Landis, Yang Cheng, John Lucas Crassidis, and Yaakov Oshman. "Averaging quaternions." Journal of Guidance, Control, and Dynamics 30, no. 4 (2007): 1193-1197. A 4 by N matrix (Q) is constructed, where N is the number of quaternions. A weight matrix (W) is created. The eigenvector corresponding to the maximum eigenvalue of Q*W*Q' is the weighted average quaternion

If no bin exists which has at least 50% of total quaternions in a grain then the EBSD data may not be reliable Note: The limit 50% is arbitrary

Definition at line 64 of file EBSDReader.C.

Referenced by EBSDReader().

65 {
66  std::string ebsd_filename;
68 
69  // Fetch and check mesh or meshgenerators
70  EBSDMesh * mesh = dynamic_cast<EBSDMesh *>(&_mesh);
71  if (mesh != NULL)
72  {
73  ebsd_filename = mesh->getEBSDFilename();
74  geometry = mesh->getEBSDGeometry();
75  }
76  else
77  {
78  std::string ebsd_meshgenerator_name;
79  if (isParamValid("ebsd_meshgenerator"))
80  ebsd_meshgenerator_name = getParam<std::string>("ebsd_meshgenerator");
81  else
82  {
83  auto meshgenerator_names = _app.getMeshGeneratorNames();
84  for (auto & mgn : meshgenerator_names)
85  {
86  const EBSDMeshGenerator * emg =
87  dynamic_cast<const EBSDMeshGenerator *>(&_app.getMeshGenerator(mgn));
88  if (emg)
89  {
90  if (!ebsd_meshgenerator_name.empty())
91  mooseError("Found multiple EBSDMeshGenerator objects (",
92  ebsd_meshgenerator_name,
93  " and ",
94  mgn,
95  "). Use the 'ebsd_meshgenerator' parameter to specify which one to use.");
96  ebsd_meshgenerator_name = mgn;
97  }
98  }
99 
100  if (ebsd_meshgenerator_name.empty())
101  mooseError("Failed to autodetect an EBSDMeshGenerator (or a deprecated EBSDMesh object).");
102  }
103 
104  // get the selected or detected mesh generator
105  const EBSDMeshGenerator * emg =
106  dynamic_cast<const EBSDMeshGenerator *>(&_app.getMeshGenerator(ebsd_meshgenerator_name));
107  if (!emg)
108  paramError("ebsd_meshgenerator", "No valid EBSDMeshGenerator object found.");
109 
110  ebsd_filename = emg->getEBSDFilename();
111  geometry = emg->getEBSDGeometry();
112  }
113 
114  std::ifstream stream_in(ebsd_filename.c_str());
115  if (!stream_in)
116  mooseError("Can't open EBSD file: ", ebsd_filename);
117 
118  // Copy file header data from the EBSDMesh
119  _dx = geometry.d[0];
120  _nx = geometry.n[0];
121  _minx = geometry.min[0];
122  _maxx = _minx + _dx * _nx;
123 
124  _dy = geometry.d[1];
125  _ny = geometry.n[1];
126  _miny = geometry.min[1];
127  _maxy = _miny + _dy * _ny;
128 
129  _dz = geometry.d[2];
130  _nz = geometry.n[2];
131  _minz = geometry.min[2];
132  _maxz = _minz + _dz * _nz;
133 
134  // Resize the _data array
135  unsigned total_size = geometry.dim < 3 ? _nx * _ny : _nx * _ny * _nz;
136  _data.resize(total_size);
137 
138  std::string line;
139  while (std::getline(stream_in, line))
140  {
141  if (line.find("#") != 0)
142  {
143  // Temporary variables to read in on each line
144  EBSDPointData d;
145  Real x, y, z;
146 
147  std::istringstream iss(line);
148  iss >> d._phi1 >> d._Phi >> d._phi2 >> x >> y >> z >> d._feature_id >> d._phase >>
149  d._symmetry;
150 
151  // Transform angles to degrees
152  d._phi1 *= 180.0 / libMesh::pi;
153  d._Phi *= 180.0 / libMesh::pi;
154  d._phi2 *= 180.0 / libMesh::pi;
155 
156  // Custom columns
157  d._custom.resize(_custom_columns);
158  for (unsigned int i = 0; i < _custom_columns; ++i)
159  if (!(iss >> d._custom[i]))
160  mooseError("Unable to read in EBSD custom data column #", i);
161 
162  if (x < _minx || y < _miny || x > _maxx || y > _maxy ||
163  (geometry.dim == 3 && (z < _minz || z > _maxz)))
164  mooseError("EBSD Data ouside of the domain declared in the header ([",
165  _minx,
166  ':',
167  _maxx,
168  "], [",
169  _miny,
170  ':',
171  _maxy,
172  "], [",
173  _minz,
174  ':',
175  _maxz,
176  "]) dim=",
177  geometry.dim,
178  "\n",
179  line);
180 
181  d._p = Point(x, y, z);
182 
183  // determine number of grains in the dataset
184  if (_global_id_map.find(d._feature_id) == _global_id_map.end())
185  _global_id_map[d._feature_id] = _grain_num++;
186 
187  unsigned int global_index = indexFromPoint(Point(x, y, z));
188  _data[global_index] = d;
189  }
190  }
191  stream_in.close();
192 
193  // Resize the variables
194  _avg_data.resize(_grain_num);
195  _avg_angles.resize(_grain_num);
196 
197  // clear the averages
198  for (const auto i : make_range(_grain_num))
199  {
200  EBSDAvgData & a = _avg_data[i];
201  a._symmetry = a._phase = a._n = 0;
202  a._p = 0.0;
203  a._custom.assign(_custom_columns, 0.0);
204 
205  EulerAngles & b = _avg_angles[i];
206  b.phi1 = b.Phi = b.phi2 = 0.0;
207  }
208 
209  // Array of vectors to store quaternions of each grain
210  std::vector<std::vector<Eigen::Quaternion<Real>>> quat(_grain_num);
211 
212  // Iterate through data points to store orientation information for each grain
213  for (auto & j : _data)
214  {
215  EBSDAvgData & a = _avg_data[_global_id_map[j._feature_id]];
216  EulerAngles angles;
217 
218  angles.phi1 = j._phi1;
219  angles.Phi = j._Phi;
220  angles.phi2 = j._phi2;
221 
222  // convert Euler angles to quaternions
223  Eigen::Quaternion<Real> q = angles.toQuaternion();
224  quat[_global_id_map[j._feature_id]].push_back(q);
225 
226  if (a._n == 0)
227  a._phase = j._phase;
228  else if (a._phase != j._phase)
229  mooseError("An EBSD feature needs to have a uniform phase.");
230 
231  if (a._n == 0)
232  a._symmetry = j._symmetry;
233  else if (a._symmetry != j._symmetry)
234  mooseError("An EBSD feature needs to have a uniform symmetry parameter.");
235 
236  for (unsigned int i = 0; i < _custom_columns; ++i)
237  a._custom[i] += j._custom[i];
238 
239  // store the feature (or grain) ID
240  a._feature_id = j._feature_id;
241 
242  a._p += j._p;
243  a._n++;
244  }
245 
246  for (const auto i : make_range(_grain_num))
247  {
248  EBSDAvgData & a = _avg_data[i];
249  EulerAngles & b = _avg_angles[i];
250 
251  if (a._n == 0)
252  continue;
253 
254  // creating a map to store the quaternion count for each bin index
255  std::map<std::tuple<int, int, int, int>, unsigned int> feature_weights;
256 
257  // looping through all quaternions of the current grain
258  for (const auto & q : quat[i])
259  {
260  const auto bin = std::make_tuple<int, int, int, int>(std::floor(q.w() * 0.5 * _bins),
261  std::floor(q.x() * 0.5 * _bins),
262  std::floor(q.y() * 0.5 * _bins),
263  std::floor(q.z() * 0.5 * _bins));
264  feature_weights[bin]++;
265  }
266 
276  // quaternion average matrix Q*w*Q^T
277  typedef Eigen::Matrix<Real, 4, 4> Matrix4x4;
278  Matrix4x4 quat_mat = Matrix4x4::Zero();
279  typedef Eigen::Matrix<Real, 4, 1> Vector4;
280 
281  bool data_quality_ok = false;
282  Real total_weight = 0.0;
283  for (const auto & q : quat[i])
284  {
285  Vector4 v(q.w(), q.x(), q.y(), q.z());
286 
287  const auto bin = std::make_tuple<int, int, int, int>(std::floor(q.w() * 0.5 * _bins),
288  std::floor(q.x() * 0.5 * _bins),
289  std::floor(q.y() * 0.5 * _bins),
290  std::floor(q.z() * 0.5 * _bins));
291  const auto bin_size = feature_weights[bin];
292  const auto weight = std::pow(bin_size, _L_norm);
293  total_weight += weight;
294 
295  quat_mat += v * weight * v.transpose();
296 
302  if (bin_size * 2 > quat[i].size())
303  data_quality_ok = true;
304  }
305 
306  quat_mat *= 1.0 / total_weight;
307 
308  // throws a warning if EBSD data is not reliable
309  if (!data_quality_ok)
310  _console << COLOR_YELLOW << "EBSD orientation data may not be reliable for grain " << i
311  << '\n'
312  << COLOR_DEFAULT << std::flush;
313 
314  // compute eigenvalues and eigenvectors
315  Eigen::EigenSolver<Matrix4x4> EigenSolver(quat_mat);
316  Vector4 eigen_values = EigenSolver.eigenvalues().real();
317  Matrix4x4 eigen_vectors = EigenSolver.eigenvectors().real();
318 
319  // Selecting eigenvector corresponding to max eigenvalue to compute average Euler angle
320  Vector4::Index max_index = 0;
321  eigen_values.maxCoeff(&max_index);
322  const auto max_vec = eigen_vectors.col(max_index);
323  const Eigen::Quaternion<Real> q(max_vec(0), max_vec(1), max_vec(2), max_vec(3));
324  b = EulerAngles(q);
325 
326  // link the EulerAngles into the EBSDAvgData for access via the functors
327  a._angles = &b;
328 
329  if (a._phase >= _global_id.size())
330  _global_id.resize(a._phase + 1);
331 
332  // The averaged per grain data locally contains the phase id, local id, and
333  // original feature id. It is stored contiguously indexed by global id.
334  a._local_id = _global_id[a._phase].size();
335  _global_id[a._phase].push_back(i);
336 
337  a._p *= 1.0 / Real(a._n);
338 
339  for (unsigned int i = 0; i < _custom_columns; ++i)
340  a._custom[i] /= Real(a._n);
341  }
342  // Build maps to indicate the weights with which grain and phase data
343  // from the surrounding elements contributes to a node for IC purposes
345 }
const Geometry & getEBSDGeometry() const
unsigned indexFromPoint(const Point &p) const
Computes a global index in the _data array given an input centroid point.
Definition: EBSDReader.C:386
const MeshGenerator & getMeshGenerator(const std::string &name) const
unsigned int _custom_columns
number of additional custom data columns
Definition: EBSDReader.h:135
Real _minx
Grid origin.
Definition: EBSDReader.h:177
std::vector< std::string > getMeshGeneratorNames() const
Real _maxx
Maximum grid extent.
Definition: EBSDReader.h:180
unsigned _nz
Definition: EBSDReader.h:171
MeshBase & mesh
Real _miny
Definition: EBSDReader.h:177
unsigned int _grain_num
Variables needed to determine reduced order parameter values.
Definition: EBSDReader.h:128
const std::vector< double > y
unsigned int _L_norm
L_norm value for averaging.
Definition: EBSDReader.h:168
unsigned _nx
The number of values in the x, y and z directions.
Definition: EBSDReader.h:171
const std::string & getEBSDFilename() const
MooseMesh & _mesh
MooseMesh Variables.
Definition: EBSDReader.h:123
Real _minz
Definition: EBSDReader.h:177
Mesh generated from parameters read from a DREAM3D EBSD file.
bool isParamValid(const std::string &name) const
const std::vector< double > x
dof_id_type weight(const MeshBase &mesh, const processor_id_type pid)
std::map< unsigned int, unsigned int > _global_id_map
map from feature_id to global_id
Definition: EBSDReader.h:147
std::array< Real, 3 > min
unsigned _ny
Definition: EBSDReader.h:171
Real _dx
The spacing of the values in x, y and z directions.
Definition: EBSDReader.h:174
void paramError(const std::string &param, Args... args) const
std::array< Real, 3 > d
dof_id_type total_weight(const MeshBase &mesh)
std::vector< EBSDAvgData > _avg_data
Averages by (global) grain ID.
Definition: EBSDReader.h:141
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const std::string v
Definition: NS.h:84
Real _maxz
Definition: EBSDReader.h:180
unsigned int _bins
number of bins for each quaternion component
Definition: EBSDReader.h:165
Euler angle triplet.
Definition: EulerAngles.h:24
IntRange< T > make_range(T beg, T end)
void mooseError(Args &&... args) const
static const std::complex< double > j(0, 1)
Complex number "j" (also known as "i")
std::array< unsigned int, 3 > n
Real _maxy
Definition: EBSDReader.h:180
const ConsoleStream _console
std::vector< EulerAngles > _avg_angles
Euler Angles by (global) grain ID.
Definition: EBSDReader.h:144
void buildNodeWeightMaps()
Build grain and phase weight maps.
Definition: EBSDReader.C:466
Mesh generated from parameters.
Definition: EBSDMesh.h:20
MooseUnits pow(const MooseUnits &, int)
std::vector< std::vector< unsigned int > > _global_id
global ID for given phases and grains
Definition: EBSDReader.h:150
std::vector< EBSDPointData > _data
Logically three-dimensional data indexed by geometric points in a 1D vector.
Definition: EBSDReader.h:138
const Real pi
Eigen::Quaternion< Real > toQuaternion()
Definition: EulerAngles.C:44

◆ validParams()

InputParameters EBSDReader::validParams ( )
static

Definition at line 25 of file EBSDReader.C.

26 {
28  params.addClassDescription("Load and manage DREAM.3D EBSD data files for running simulations on "
29  "reconstructed microstructures.");
30  params.addParam<unsigned int>(
31  "custom_columns", 0, "Number of additional custom data columns to read from the EBSD file");
32  params.addParam<unsigned int>("bins", 20, "Number of bins to segregate quaternions");
33  params.addParam<Real>("L_norm", 1, "Specifies the type of average the user intends to perform");
34  params.addParam<std::string>("ebsd_meshgenerator",
35  "Specify the name of the EBSDMeshGenerator. The EBSDReader can "
36  "autodetect this, if only one such MeshGenerator exists.");
37  return params;
38 }
void addParam(const std::string &name, const std::initializer_list< typename T::value_type > &value, const std::string &doc_string)
static InputParameters validParams()
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
void addClassDescription(const std::string &doc_string)

Member Data Documentation

◆ _avg_angles

std::vector<EulerAngles> EBSDReader::_avg_angles
protected

Euler Angles by (global) grain ID.

Definition at line 144 of file EBSDReader.h.

Referenced by getEulerAngles(), and readFile().

◆ _avg_data

std::vector<EBSDAvgData> EBSDReader::_avg_data
protected

Averages by (global) grain ID.

Definition at line 141 of file EBSDReader.h.

Referenced by getAvgData(), getFeatureID(), indexFromIndex(), and readFile().

◆ _bins

unsigned int EBSDReader::_bins
protected

number of bins for each quaternion component

Definition at line 165 of file EBSDReader.h.

Referenced by EBSDReader(), and readFile().

◆ _bottom_left

Point EBSDReader::_bottom_left
protected

Definition at line 129 of file EBSDReader.h.

◆ _custom_columns

unsigned int EBSDReader::_custom_columns
protected

number of additional custom data columns

Definition at line 135 of file EBSDReader.h.

Referenced by getAvgDataAccessFunctor(), getPointDataAccessFunctor(), and readFile().

◆ _data

std::vector<EBSDPointData> EBSDReader::_data
protected

Logically three-dimensional data indexed by geometric points in a 1D vector.

Definition at line 138 of file EBSDReader.h.

Referenced by getData(), indexFromPoint(), and readFile().

◆ _dx

Real EBSDReader::_dx
protected

The spacing of the values in x, y and z directions.

Definition at line 174 of file EBSDReader.h.

Referenced by indexFromPoint(), and readFile().

◆ _dy

Real EBSDReader::_dy
protected

Definition at line 174 of file EBSDReader.h.

Referenced by indexFromPoint(), and readFile().

◆ _dz

Real EBSDReader::_dz
protected

Definition at line 174 of file EBSDReader.h.

Referenced by indexFromPoint(), and readFile().

◆ _global_id

std::vector<std::vector<unsigned int> > EBSDReader::_global_id
protected

global ID for given phases and grains

Definition at line 150 of file EBSDReader.h.

Referenced by getAvgData(), getFeatureID(), getGlobalID(), getGrainNum(), getPhaseNum(), and readFile().

◆ _global_id_map

std::map<unsigned int, unsigned int> EBSDReader::_global_id_map
protected

map from feature_id to global_id

Definition at line 147 of file EBSDReader.h.

Referenced by getGlobalID(), and readFile().

◆ _grain_num

unsigned int EBSDReader::_grain_num
protected

Variables needed to determine reduced order parameter values.

Definition at line 128 of file EBSDReader.h.

Referenced by getGrainNum(), and readFile().

◆ _L_norm

unsigned int EBSDReader::_L_norm
protected

L_norm value for averaging.

Definition at line 168 of file EBSDReader.h.

Referenced by readFile().

◆ _maxx

Real EBSDReader::_maxx
protected

Maximum grid extent.

Definition at line 180 of file EBSDReader.h.

Referenced by indexFromPoint(), and readFile().

◆ _maxy

Real EBSDReader::_maxy
protected

Definition at line 180 of file EBSDReader.h.

Referenced by indexFromPoint(), and readFile().

◆ _maxz

Real EBSDReader::_maxz
protected

Definition at line 180 of file EBSDReader.h.

Referenced by indexFromPoint(), and readFile().

◆ _mesh

MooseMesh& EBSDReader::_mesh
protected

MooseMesh Variables.

Definition at line 123 of file EBSDReader.h.

Referenced by buildNodeWeightMaps(), and readFile().

◆ _mesh_dimension

unsigned int EBSDReader::_mesh_dimension
protected

Dimension of the problem domain.

Definition at line 162 of file EBSDReader.h.

Referenced by indexFromPoint().

◆ _minx

Real EBSDReader::_minx
protected

Grid origin.

Definition at line 177 of file EBSDReader.h.

Referenced by indexFromPoint(), and readFile().

◆ _miny

Real EBSDReader::_miny
protected

Definition at line 177 of file EBSDReader.h.

Referenced by indexFromPoint(), and readFile().

◆ _minz

Real EBSDReader::_minz
protected

Definition at line 177 of file EBSDReader.h.

Referenced by indexFromPoint(), and readFile().

◆ _nl

NonlinearSystemBase& EBSDReader::_nl
protected

Definition at line 124 of file EBSDReader.h.

◆ _node_to_grain_weight_map

std::map<dof_id_type, std::vector<Real> > EBSDReader::_node_to_grain_weight_map
protected

Map of grain weights per node.

Definition at line 153 of file EBSDReader.h.

Referenced by buildNodeWeightMaps(), and getNodeToGrainWeightMap().

◆ _node_to_phase_weight_map

std::map<dof_id_type, std::vector<Real> > EBSDReader::_node_to_phase_weight_map
protected

Map of phase weights per node.

Definition at line 156 of file EBSDReader.h.

Referenced by buildNodeWeightMaps(), and getNodeToPhaseWeightMap().

◆ _nx

unsigned EBSDReader::_nx
protected

The number of values in the x, y and z directions.

Definition at line 171 of file EBSDReader.h.

Referenced by indexFromPoint(), and readFile().

◆ _ny

unsigned EBSDReader::_ny
protected

Definition at line 171 of file EBSDReader.h.

Referenced by indexFromPoint(), and readFile().

◆ _nz

unsigned EBSDReader::_nz
protected

Definition at line 171 of file EBSDReader.h.

Referenced by readFile().

◆ _range

Point EBSDReader::_range
protected

Definition at line 131 of file EBSDReader.h.

◆ _time_step

const int& EBSDReader::_time_step
protected

current timestep. Maps are only rebuild on mesh change during time step zero

Definition at line 159 of file EBSDReader.h.

Referenced by meshChanged().

◆ _top_right

Point EBSDReader::_top_right
protected

Definition at line 130 of file EBSDReader.h.


The documentation for this class was generated from the following files: