• Main Page
  • Related Pages
  • Namespaces
  • Classes
  • Files
  • File List
  • File Members

Albany_BCUtils.hpp

Go to the documentation of this file.
00001 //*****************************************************************//
00002 //    Albany 2.0:  Copyright 2012 Sandia Corporation               //
00003 //    This Software is released under the BSD license detailed     //
00004 //    in the file "license.txt" in the top-level Albany directory  //
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       // If the BC sublist is not in the input file,
00103       // side/node sets can be contained in the Exodus file but are not defined in the problem statement.
00104       // This is OK, just return
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 // Define macro for explicit template instantiation
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

Generated on Wed Mar 26 2014 18:36:36 for Albany: a Trilinos-based PDE code by  doxygen 1.7.1