Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007 #ifndef ALBANY_BCUTILS_HPP
00008 #define ALBANY_BCUTILS_HPP
00009
00010 #include <vector>
00011 #include <string>
00012
00013 #include "Teuchos_RCP.hpp"
00014 #include "Teuchos_ParameterList.hpp"
00015
00016 #include "Albany_DataTypes.hpp"
00017 #include "PHAL_AlbanyTraits.hpp"
00018 #include "Phalanx.hpp"
00019 #include "PHAL_FactoryTraits.hpp"
00020
00021 #include "QCAD_MaterialDatabase.hpp"
00022
00023
00024 namespace Albany {
00025
00030
00031 struct DirichletTraits {
00032
00033 enum { type = PHAL::DirichletFactoryTraits<PHAL::AlbanyTraits>::id_dirichlet };
00034 enum { typeTd = PHAL::DirichletFactoryTraits<PHAL::AlbanyTraits>::id_timedep_bc };
00035 enum { typeKf = PHAL::DirichletFactoryTraits<PHAL::AlbanyTraits>::id_kfield_bc };
00036 enum { typeTo = PHAL::DirichletFactoryTraits<PHAL::AlbanyTraits>::id_torsion_bc };
00037 enum { typeDa = PHAL::DirichletFactoryTraits<PHAL::AlbanyTraits>::id_dirichlet_aggregator };
00038 enum { typeFb = PHAL::DirichletFactoryTraits<PHAL::AlbanyTraits>::id_dirichlet_coordinate_function };
00039
00040 static const std::string bcParamsPl;
00041
00042 typedef PHAL::DirichletFactoryTraits<PHAL::AlbanyTraits> factory_type;
00043
00044 static Teuchos::RCP<const Teuchos::ParameterList>
00045 getValidBCParameters(
00046 const std::vector<std::string>& nodeSetIDs,
00047 const std::vector<std::string>& bcNames);
00048
00049 static std::string
00050 constructBCName(const std::string ns, const std::string dof);
00051
00052 static std::string
00053 constructTimeDepBCName(const std::string ns, const std::string dof);
00054
00055 };
00056
00057 struct NeumannTraits {
00058
00059 enum { type = PHAL::NeumannFactoryTraits<PHAL::AlbanyTraits>::id_neumann };
00060 enum { typeNa = PHAL::NeumannFactoryTraits<PHAL::AlbanyTraits>::id_neumann_aggregator };
00061 enum { typeGCV = PHAL::NeumannFactoryTraits<PHAL::AlbanyTraits>::id_gather_coord_vector };
00062 enum { typeGS = PHAL::NeumannFactoryTraits<PHAL::AlbanyTraits>::id_gather_solution };
00063 enum { typeTd = PHAL::NeumannFactoryTraits<PHAL::AlbanyTraits>::id_timedep_bc };
00064 enum { typeGBF = PHAL::NeumannFactoryTraits<PHAL::AlbanyTraits>::id_gather_basalFriction };
00065 enum { typeGT = PHAL::NeumannFactoryTraits<PHAL::AlbanyTraits>::id_gather_thickness };
00066 enum { typeGSH = PHAL::NeumannFactoryTraits<PHAL::AlbanyTraits>::id_gather_surfaceHeight };
00067
00068 static const std::string bcParamsPl;
00069
00070 typedef PHAL::NeumannFactoryTraits<PHAL::AlbanyTraits> factory_type;
00071
00072 static Teuchos::RCP<const Teuchos::ParameterList>
00073 getValidBCParameters(
00074 const std::vector<std::string>& sideSetIDs,
00075 const std::vector<std::string>& bcNames,
00076 const std::vector<std::string>& conditions);
00077
00078 static std::string
00079 constructBCName(const std::string ns, const std::string dof,
00080 const std::string condition);
00081
00082 static std::string
00083 constructTimeDepBCName(const std::string ns,
00084 const std::string dof, const std::string condition);
00085
00086 };
00087
00088 template<typename BCTraits>
00089
00090 class BCUtils {
00091
00092 public:
00093
00094 BCUtils() {}
00095
00097 typedef BCTraits traits_type;
00098
00100 bool haveBCSpecified(const Teuchos::RCP<Teuchos::ParameterList>& params) const {
00101
00102
00103
00104
00105
00106 return params->isSublist(traits_type::bcParamsPl);
00107
00108 }
00109
00111
00112 Teuchos::RCP<PHX::FieldManager<PHAL::AlbanyTraits> >
00113 constructBCEvaluators(
00114 const std::vector<std::string>& nodeSetIDs,
00115 const std::vector<std::string>& bcNames,
00116 Teuchos::RCP<Teuchos::ParameterList> params,
00117 Teuchos::RCP<ParamLib> paramLib,
00118 const int numEqn = 0);
00119
00121
00122 Teuchos::RCP<PHX::FieldManager<PHAL::AlbanyTraits> >
00123 constructBCEvaluators(
00124 const Teuchos::RCP<Albany::MeshSpecsStruct>& meshSpecs,
00125 const std::vector<std::string>& bcNames,
00126 const Teuchos::ArrayRCP<std::string>& dof_names,
00127 bool isVectorField,
00128 int offsetToFirstDOF,
00129 const std::vector<std::string>& conditions,
00130 const Teuchos::Array<Teuchos::Array<int> >& offsets,
00131 const Teuchos::RCP<Albany::Layouts>& dl,
00132 Teuchos::RCP<Teuchos::ParameterList> params,
00133 Teuchos::RCP<ParamLib> paramLib,
00134 const Teuchos::RCP<QCAD::MaterialDatabase>& materialDB = Teuchos::null);
00135
00136 private:
00137
00139 Teuchos::RCP<PHX::FieldManager<PHAL::AlbanyTraits> >
00140 buildFieldManager(const std::map<std::string, Teuchos::RCP<Teuchos::ParameterList> >& evals_to_build,
00141 std::string& allBC, Teuchos::RCP<PHX::DataLayout>& dummy);
00142
00143 };
00144
00146
00147 template<>
00148 Teuchos::RCP<PHX::FieldManager<PHAL::AlbanyTraits> >
00149 BCUtils<DirichletTraits>::constructBCEvaluators(
00150 const std::vector<std::string>& nodeSetIDs,
00151 const std::vector<std::string>& bcNames,
00152 Teuchos::RCP<Teuchos::ParameterList> params,
00153 Teuchos::RCP<ParamLib> paramLib,
00154 const int numEqn);
00155
00157
00158 template<>
00159 Teuchos::RCP<PHX::FieldManager<PHAL::AlbanyTraits> >
00160 BCUtils<NeumannTraits>::constructBCEvaluators(
00161 const Teuchos::RCP<Albany::MeshSpecsStruct>& meshSpecs,
00162 const std::vector<std::string>& bcNames,
00163 const Teuchos::ArrayRCP<std::string>& dof_names,
00164 bool isVectorField,
00165 int offsetToFirstDOF,
00166 const std::vector<std::string>& conditions,
00167 const Teuchos::Array<Teuchos::Array<int> >& offsets,
00168 const Teuchos::RCP<Albany::Layouts>& dl,
00169 Teuchos::RCP<Teuchos::ParameterList> params,
00170 Teuchos::RCP<ParamLib> paramLib,
00171 const Teuchos::RCP<QCAD::MaterialDatabase>& materialDB);
00172
00173 }
00174
00175
00176 #define BCUTILS_INSTANTIATE_TEMPLATE_CLASS_DIRICHLET(name) \
00177 template class name<Albany::DirichletTraits>;
00178 #define BCUTILS_INSTANTIATE_TEMPLATE_CLASS_NEUMANN(name) \
00179 template class name<Albany::NeumannTraits>;
00180
00181 #define BCUTILS_INSTANTIATE_TEMPLATE_CLASS(name) \
00182 BCUTILS_INSTANTIATE_TEMPLATE_CLASS_DIRICHLET(name) \
00183 BCUTILS_INSTANTIATE_TEMPLATE_CLASS_NEUMANN(name)
00184
00185 #endif