11#ifndef __Panzer_STK_ParameterListCallbackBlocked_hpp__
12#define __Panzer_STK_ParameterListCallbackBlocked_hpp__
14#include "PanzerAdaptersSTK_config.hpp"
15#ifdef PANZER_HAVE_TEKO
17#include "Teuchos_RCP.hpp"
18#include "Teuchos_ParameterList.hpp"
20#include "Teko_RequestCallback.hpp"
24#ifdef PANZER_HAVE_EPETRA_STACK
40class ParameterListCallbackBlocked :
public Teko::RequestCallback<Teuchos::RCP<Teuchos::ParameterList> > {
42 ParameterListCallbackBlocked(
const Teuchos::RCP<const panzer_stk::STKConnManager> & connManager,
43 const Teuchos::RCP<const panzer::BlockedDOFManager> & blkDofs,
44 const Teuchos::RCP<const panzer::BlockedDOFManager> & auxBlkDofs=Teuchos::null);
46 Teuchos::RCP<Teuchos::ParameterList> request(
const Teko::RequestMesg & rm);
48 bool handlesRequest(
const Teko::RequestMesg & rm);
50 void preRequest(
const Teko::RequestMesg & rm);
54 bool isField(
const std::string&
field)
const
58 std::vector<Teuchos::RCP<panzer::GlobalIndexer>>
59 fieldDOFMngrs = blocked_ugi_->getFieldDOFManagers();
60 for (
int b(0); b < static_cast<int>(fieldDOFMngrs.size()); ++b)
62 for (
int f(0); f < fieldDOFMngrs[b]->getNumFields(); ++f)
64 if (fieldDOFMngrs[b]->getFieldString(f) ==
field)
69 return (aux_blocked_ugi_->getFieldNum(
field) != -1);
71 return (blocked_ugi_->getFieldNum(
field) != -1);
74 void buildArrayToVectorTpetra(
int block,
const std::string &
field,
const bool useAux =
false);
75 void buildCoordinatesTpetra(
const std::string &
field,
const bool useAux =
false);
77#ifdef PANZER_HAVE_EPETRA_STACK
78 void buildArrayToVectorEpetra(
int block,
const std::string &
field,
const bool useAux =
false);
79 void buildCoordinatesEpetra(
const std::string &
field,
const bool useAux =
false);
83 std::string getHandledField(
const Teuchos::ParameterList & pl)
const;
85 void setFieldByKey(
const std::string & key,
const std::string &
field,Teuchos::ParameterList & pl)
const;
89 const std::vector<double> & getCoordinateByField(
int dim,
const std::string &
field)
const;
93 Teuchos::RCP<const panzer::Intrepid2FieldPattern> getFieldPattern(
const std::string & fieldName,
const bool useAux =
false)
const;
96 Teuchos::RCP<const panzer_stk::STKConnManager> connManager_;
97 Teuchos::RCP<const panzer::BlockedDOFManager> blocked_ugi_;
98 Teuchos::RCP<const panzer::BlockedDOFManager> aux_blocked_ugi_;
100 std::map<std::string,Teuchos::RCP<const panzer::Intrepid2FieldPattern> > fieldPatterns_;
104 std::map<std::string,std::vector<double> > xcoords_;
105 std::map<std::string,std::vector<double> > ycoords_;
106 std::map<std::string,std::vector<double> > zcoords_;
108 mutable std::map<std::string,Teuchos::RCP<const panzer::ArrayToFieldVector> > arrayToVectorTpetra_;
109#ifdef PANZER_HAVE_EPETRA_STACK
110 mutable std::map<std::string,Teuchos::RCP<const panzer::ArrayToFieldVectorEpetra> > arrayToVectorEpetra_;
113 Teuchos::RCP<Tpetra::MultiVector<double,int,panzer::GlobalOrdinal,panzer::TpetraNodeType> > coordsVecTp_;
114#ifdef PANZER_HAVE_EPETRA_STACK
115 Teuchos::RCP<Epetra_MultiVector> coordsVecEp_;
118 bool returnTpetraObjects_;
PHX::MDField< ScalarT, panzer::Cell, panzer::BASIS > field
A field to which we'll contribute, or in which we'll store, the result of computing this integral.