Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007 #ifndef ALBANY_GENERICSTKMESHSTRUCT_HPP
00008 #define ALBANY_GENERICSTKMESHSTRUCT_HPP
00009
00010 #include "Albany_AbstractSTKMeshStruct.hpp"
00011 #include "Teuchos_ParameterList.hpp"
00012 #include "Epetra_Comm.h"
00013
00014
00015 #ifdef ALBANY_STK_PERCEPT
00016 #include <stk_percept/PerceptMesh.hpp>
00017 #include <stk_adapt/UniformRefinerPattern.hpp>
00018 #endif
00019
00020
00021 namespace Albany {
00022
00023
00024 class GenericSTKMeshStruct : public AbstractSTKMeshStruct {
00025
00026 public:
00027 virtual void setFieldAndBulkData(
00028 const Teuchos::RCP<const Epetra_Comm>& comm,
00029 const Teuchos::RCP<Teuchos::ParameterList>& params,
00030 const unsigned int neq_,
00031 const AbstractFieldContainer::FieldContainerRequirements& req,
00032 const Teuchos::RCP<Albany::StateInfoStruct>& sis,
00033 const unsigned int worksetSize) = 0;
00034
00035 Teuchos::ArrayRCP<Teuchos::RCP<Albany::MeshSpecsStruct> >& getMeshSpecs();
00036
00037 #ifdef ALBANY_STK_PERCEPT
00038 Teuchos::RCP<stk::percept::PerceptMesh> getPerceptMesh(){ return eMesh; }
00039 Teuchos::RCP<stk::adapt::UniformRefinerPatternBase> getRefinerPattern(){ return refinerPattern; }
00040 #endif
00041
00043 void rebalanceAdaptedMesh(const Teuchos::RCP<Teuchos::ParameterList>& params,
00044 const Teuchos::RCP<const Epetra_Comm>& comm);
00045
00046 bool useCompositeTet(){ return compositeTet; }
00047
00049 void setupMeshBlkInfo();
00050
00051 const Albany::DynamicDataArray<Albany::CellSpecs>::type& getMeshDynamicData() const
00052 { return meshDynamicData; }
00053
00054 protected:
00055 GenericSTKMeshStruct(
00056 const Teuchos::RCP<Teuchos::ParameterList>& params,
00057 const Teuchos::RCP<Teuchos::ParameterList>& adaptParams,
00058 const int numDim=-1);
00059
00060 void SetupFieldData(
00061 const Teuchos::RCP<const Epetra_Comm>& comm,
00062 const int neq_,
00063 const AbstractFieldContainer::FieldContainerRequirements& req,
00064 const Teuchos::RCP<Albany::StateInfoStruct>& sis,
00065 const int worksetSize_);
00066
00067 bool buildUniformRefiner();
00068
00069 bool buildLocalRefiner();
00070
00071 void printParts(stk::mesh::fem::FEMMetaData *metaData);
00072
00073 void cullSubsetParts(std::vector<std::string>& ssNames,
00074 std::map<std::string, stk::mesh::Part*>& partVec);
00075
00077 int computeWorksetSize(const int worksetSizeMax, const int ebSizeMax) const;
00078
00080 void rebalanceInitialMesh(const Teuchos::RCP<const Epetra_Comm>& comm);
00081
00083 bool buildEMesh;
00084 bool buildPerceptEMesh();
00085
00087 void uniformRefineMesh(const Teuchos::RCP<const Epetra_Comm>& comm);
00088
00090 void checkInput(std::string option, std::string value, std::string allowed_values);
00091
00093 void computeAddlConnectivity();
00094
00095 ~GenericSTKMeshStruct();
00096
00097 Teuchos::RCP<Teuchos::ParameterList> getValidGenericSTKParameters(
00098 std::string listname = "Discretization Param Names") const;
00099
00100 Teuchos::RCP<Teuchos::ParameterList> params;
00101
00103 Teuchos::RCP<Teuchos::ParameterList> adaptParams;
00104
00105 Teuchos::ArrayRCP<Teuchos::RCP<Albany::MeshSpecsStruct> > meshSpecs;
00106
00107
00108 Albany::DynamicDataArray<CellSpecs>::type meshDynamicData;
00109
00110 #ifdef ALBANY_STK_PERCEPT
00111 Teuchos::RCP<stk::percept::PerceptMesh> eMesh;
00112 Teuchos::RCP<stk::adapt::UniformRefinerPatternBase> refinerPattern;
00113 #endif
00114
00115 bool uniformRefinementInitialized;
00116
00117 bool compositeTet;
00118
00119 };
00120
00121 }
00122
00123 #endif