00001
00002
00003
00004
00005
00006
00007 #ifndef ALBANY_NAVIERSTOKES_HPP
00008 #define ALBANY_NAVIERSTOKES_HPP
00009
00010 #include "Teuchos_RCP.hpp"
00011 #include "Teuchos_ParameterList.hpp"
00012
00013 #include "Albany_AbstractProblem.hpp"
00014
00015 #include "Phalanx.hpp"
00016 #include "PHAL_Workset.hpp"
00017 #include "PHAL_Dimension.hpp"
00018
00019 namespace Albany {
00020
00025 class NavierStokes : public AbstractProblem {
00026 public:
00027
00029 NavierStokes(const Teuchos::RCP<Teuchos::ParameterList>& params,
00030 const Teuchos::RCP<ParamLib>& paramLib,
00031 const int numDim_);
00032
00034 ~NavierStokes();
00035
00037 virtual int spatialDimension() const { return numDim; }
00038
00040 virtual void buildProblem(
00041 Teuchos::ArrayRCP<Teuchos::RCP<Albany::MeshSpecsStruct> > meshSpecs,
00042 StateManager& stateMgr);
00043
00044
00045 virtual Teuchos::Array< Teuchos::RCP<const PHX::FieldTag> >
00046 buildEvaluators(
00047 PHX::FieldManager<PHAL::AlbanyTraits>& fm0,
00048 const Albany::MeshSpecsStruct& meshSpecs,
00049 Albany::StateManager& stateMgr,
00050 Albany::FieldManagerChoice fmchoice,
00051 const Teuchos::RCP<Teuchos::ParameterList>& responseList);
00052
00054 Teuchos::RCP<const Teuchos::ParameterList> getValidProblemParameters() const;
00055
00056 private:
00057
00059 NavierStokes(const NavierStokes&);
00060
00062 NavierStokes& operator=(const NavierStokes&);
00063
00064 public:
00065
00067 template <typename EvalT> Teuchos::RCP<const PHX::FieldTag>
00068 constructEvaluators(
00069 PHX::FieldManager<PHAL::AlbanyTraits>& fm0,
00070 const Albany::MeshSpecsStruct& meshSpecs,
00071 Albany::StateManager& stateMgr,
00072 Albany::FieldManagerChoice fmchoice,
00073 const Teuchos::RCP<Teuchos::ParameterList>& responseList);
00074
00075 void constructDirichletEvaluators(const std::vector<std::string>& nodeSetIDs);
00076 void constructNeumannEvaluators(const Teuchos::RCP<Albany::MeshSpecsStruct>& meshSpecs);
00077
00078 protected:
00079
00081 enum NS_VAR_TYPE {
00082 NS_VAR_TYPE_NONE,
00083 NS_VAR_TYPE_CONSTANT,
00084 NS_VAR_TYPE_DOF
00085 };
00086
00087 void getVariableType(Teuchos::ParameterList& paramList,
00088 const std::string& defaultType,
00089 NS_VAR_TYPE& variableType,
00090 bool& haveVariable,
00091 bool& haveEquation);
00092 std::string variableTypeToString(const NS_VAR_TYPE variableType);
00093
00094 protected:
00095
00096 bool periodic;
00097 int numDim;
00098
00099 NS_VAR_TYPE flowType;
00100 NS_VAR_TYPE heatType;
00101 NS_VAR_TYPE neutType;
00102
00103 bool haveFlow;
00104 bool haveHeat;
00105 bool haveNeut;
00106
00107 bool haveFlowEq;
00108 bool haveHeatEq;
00109 bool haveNeutEq;
00110
00111 bool haveSource;
00112 bool haveNeutSource;
00113 bool havePSPG;
00114 bool haveSUPG;
00115 bool porousMedia;
00116
00117 Teuchos::RCP<Albany::Layouts> dl;
00118 };
00119
00120 }
00121
00122 #include <boost/type_traits/is_same.hpp>
00123
00124 #include "Intrepid_FieldContainer.hpp"
00125 #include "Intrepid_DefaultCubatureFactory.hpp"
00126 #include "Shards_CellTopology.hpp"
00127
00128 #include "Albany_Utils.hpp"
00129 #include "Albany_ProblemUtils.hpp"
00130 #include "Albany_EvaluatorUtils.hpp"
00131 #include "Albany_ResponseUtilities.hpp"
00132
00133 #include "PHAL_NSContravarientMetricTensor.hpp"
00134 #include "PHAL_NSMaterialProperty.hpp"
00135 #include "PHAL_Source.hpp"
00136 #include "PHAL_NSBodyForce.hpp"
00137 #include "PHAL_NSPermeabilityTerm.hpp"
00138 #include "PHAL_NSForchheimerTerm.hpp"
00139 #include "PHAL_NSRm.hpp"
00140 #include "PHAL_NSTauM.hpp"
00141 #include "PHAL_NSTauT.hpp"
00142 #include "PHAL_NSMomentumResid.hpp"
00143 #include "PHAL_NSContinuityResid.hpp"
00144 #include "PHAL_NSThermalEqResid.hpp"
00145 #include "PHAL_NSNeutronEqResid.hpp"
00146
00147 template <typename EvalT>
00148 Teuchos::RCP<const PHX::FieldTag>
00149 Albany::NavierStokes::constructEvaluators(
00150 PHX::FieldManager<PHAL::AlbanyTraits>& fm0,
00151 const Albany::MeshSpecsStruct& meshSpecs,
00152 Albany::StateManager& stateMgr,
00153 Albany::FieldManagerChoice fieldManagerChoice,
00154 const Teuchos::RCP<Teuchos::ParameterList>& responseList)
00155 {
00156 using Teuchos::RCP;
00157 using Teuchos::rcp;
00158 using Teuchos::ParameterList;
00159 using PHX::DataLayout;
00160 using PHX::MDALayout;
00161 using std::vector;
00162 using std::string;
00163 using std::map;
00164 using PHAL::AlbanyTraits;
00165
00166 const CellTopologyData * const elem_top = &meshSpecs.ctd;
00167
00168 RCP<Intrepid::Basis<RealType, Intrepid::FieldContainer<RealType> > >
00169 intrepidBasis = Albany::getIntrepidBasis(meshSpecs.ctd);
00170 RCP<shards::CellTopology> cellType = rcp(new shards::CellTopology (&meshSpecs.ctd));
00171
00172 const int numNodes = intrepidBasis->getCardinality();
00173 const int worksetSize = meshSpecs.worksetSize;
00174
00175 Intrepid::DefaultCubatureFactory<RealType> cubFactory;
00176 RCP <Intrepid::Cubature<RealType> > cubature = cubFactory.create(*cellType, meshSpecs.cubatureDegree);
00177
00178 const int numQPts = cubature->getNumPoints();
00179 const int numVertices = cellType->getNodeCount();
00180
00181
00182
00183 if(boost::is_same<EvalT, PHAL::AlbanyTraits::Residual>::value)
00184
00185 *out << "Field Dimensions: Workset=" << worksetSize
00186 << ", Vertices= " << numVertices
00187 << ", Nodes= " << numNodes
00188 << ", QuadPts= " << numQPts
00189 << ", Dim= " << numDim << std::endl;
00190
00191 dl = rcp(new Albany::Layouts(worksetSize,numVertices,numNodes,numQPts,numDim));
00192 TEUCHOS_TEST_FOR_EXCEPTION(dl->vectorAndGradientLayoutsAreEquivalent==false, std::logic_error,
00193 "Data Layout Usage in NavierStokes problem assumes vecDim = numDim");
00194
00195 Albany::EvaluatorUtils<EvalT, PHAL::AlbanyTraits> evalUtils(dl);
00196 bool supportsTransient=true;
00197 int offset=0;
00198
00199
00200 Teuchos::RCP<PHX::Evaluator<AlbanyTraits> > ev;
00201
00202
00203
00204 if (haveFlowEq) {
00205 Teuchos::ArrayRCP<string> dof_names(1);
00206 Teuchos::ArrayRCP<string> dof_names_dot(1);
00207 Teuchos::ArrayRCP<string> resid_names(1);
00208 dof_names[0] = "Velocity";
00209 dof_names_dot[0] = dof_names[0]+"_dot";
00210 resid_names[0] = "Momentum Residual";
00211 fm0.template registerEvaluator<EvalT>
00212 (evalUtils.constructGatherSolutionEvaluator(true, dof_names, dof_names_dot, offset));
00213
00214 fm0.template registerEvaluator<EvalT>
00215 (evalUtils.constructDOFVecInterpolationEvaluator(dof_names[0], offset));
00216
00217 fm0.template registerEvaluator<EvalT>
00218 (evalUtils.constructDOFVecInterpolationEvaluator(dof_names_dot[0], offset));
00219
00220 fm0.template registerEvaluator<EvalT>
00221 (evalUtils.constructDOFVecGradInterpolationEvaluator(dof_names[0], offset));
00222
00223 fm0.template registerEvaluator<EvalT>
00224 (evalUtils.constructScatterResidualEvaluator(true, resid_names,offset, "Scatter Momentum"));
00225 offset += numDim;
00226 }
00227 else if (haveFlow) {
00228 RCP<ParameterList> p = rcp(new ParameterList);
00229
00230 p->set<string>("Material Property Name", "Velocity");
00231 p->set< RCP<DataLayout> >("Data Layout", dl->qp_vector);
00232 p->set<string>("Coordinate Vector Name", "Coord Vec");
00233 p->set< RCP<DataLayout> >("Coordinate Vector Data Layout", dl->qp_vector);
00234
00235 p->set<RCP<ParamLib> >("Parameter Library", paramLib);
00236 Teuchos::ParameterList& paramList = params->sublist("Flow");
00237 p->set<Teuchos::ParameterList*>("Parameter List", ¶mList);
00238
00239 ev = rcp(new PHAL::NSMaterialProperty<EvalT,AlbanyTraits>(*p));
00240 fm0.template registerEvaluator<EvalT>(ev);
00241 }
00242
00243 if (haveFlowEq) {
00244 Teuchos::ArrayRCP<string> dof_names(1);
00245 Teuchos::ArrayRCP<string> dof_names_dot(1);
00246 Teuchos::ArrayRCP<string> resid_names(1);
00247 dof_names[0] = "Pressure";
00248 dof_names_dot[0] = dof_names[0]+"_dot";
00249 resid_names[0] = "Continuity Residual";
00250 fm0.template registerEvaluator<EvalT>
00251 (evalUtils.constructGatherSolutionEvaluator(false, dof_names, dof_names_dot, offset));
00252
00253 fm0.template registerEvaluator<EvalT>
00254 (evalUtils.constructDOFInterpolationEvaluator(dof_names[0], offset));
00255
00256 fm0.template registerEvaluator<EvalT>
00257 (evalUtils.constructDOFInterpolationEvaluator(dof_names_dot[0], offset));
00258
00259 fm0.template registerEvaluator<EvalT>
00260 (evalUtils.constructDOFGradInterpolationEvaluator(dof_names[0], offset));
00261
00262 fm0.template registerEvaluator<EvalT>
00263 (evalUtils.constructScatterResidualEvaluator(false, resid_names,offset, "Scatter Continuity"));
00264 offset ++;
00265 }
00266
00267 if (haveHeatEq) {
00268 Teuchos::ArrayRCP<string> dof_names(1);
00269 Teuchos::ArrayRCP<string> dof_names_dot(1);
00270 Teuchos::ArrayRCP<string> resid_names(1);
00271 dof_names[0] = "Temperature";
00272 dof_names_dot[0] = dof_names[0]+"_dot";
00273 resid_names[0] = dof_names[0]+" Residual";
00274 fm0.template registerEvaluator<EvalT>
00275 (evalUtils.constructGatherSolutionEvaluator(false, dof_names, dof_names_dot, offset));
00276
00277 fm0.template registerEvaluator<EvalT>
00278 (evalUtils.constructDOFInterpolationEvaluator(dof_names[0], offset));
00279
00280 fm0.template registerEvaluator<EvalT>
00281 (evalUtils.constructDOFInterpolationEvaluator(dof_names_dot[0], offset));
00282
00283 fm0.template registerEvaluator<EvalT>
00284 (evalUtils.constructDOFGradInterpolationEvaluator(dof_names[0], offset));
00285
00286 fm0.template registerEvaluator<EvalT>
00287 (evalUtils.constructScatterResidualEvaluator(false, resid_names, offset, "Scatter Temperature"));
00288 offset ++;
00289 }
00290 else if (haveHeat) {
00291 RCP<ParameterList> p = rcp(new ParameterList);
00292
00293 p->set<string>("Material Property Name", "Temperature");
00294 p->set< RCP<DataLayout> >("Data Layout", dl->qp_scalar);
00295 p->set<string>("Coordinate Vector Name", "Coord Vec");
00296 p->set< RCP<DataLayout> >("Coordinate Vector Data Layout", dl->qp_vector);
00297
00298 p->set<RCP<ParamLib> >("Parameter Library", paramLib);
00299 Teuchos::ParameterList& paramList = params->sublist("Heat");
00300 p->set<Teuchos::ParameterList*>("Parameter List", ¶mList);
00301
00302 ev = rcp(new PHAL::NSMaterialProperty<EvalT,AlbanyTraits>(*p));
00303 fm0.template registerEvaluator<EvalT>(ev);
00304 }
00305
00306 if (haveNeutEq) {
00307 Teuchos::ArrayRCP<string> dof_names(1);
00308 Teuchos::ArrayRCP<string> dof_names_dot(1);
00309 Teuchos::ArrayRCP<string> resid_names(1);
00310 dof_names[0] = "Neutron Flux";
00311 dof_names_dot[0] = dof_names[0]+"_dot";
00312 resid_names[0] = dof_names[0]+" Residual";
00313 fm0.template registerEvaluator<EvalT>
00314 (evalUtils.constructGatherSolutionEvaluator(false, dof_names, dof_names_dot, offset));
00315
00316 fm0.template registerEvaluator<EvalT>
00317 (evalUtils.constructDOFInterpolationEvaluator(dof_names[0], offset));
00318
00319 fm0.template registerEvaluator<EvalT>
00320 (evalUtils.constructDOFInterpolationEvaluator(dof_names_dot[0], offset));
00321
00322 fm0.template registerEvaluator<EvalT>
00323 (evalUtils.constructDOFGradInterpolationEvaluator(dof_names[0], offset));
00324
00325 fm0.template registerEvaluator<EvalT>
00326 (evalUtils.constructScatterResidualEvaluator(false, resid_names, offset, "Scatter Neutron"));
00327 offset ++;
00328 }
00329 else if (haveNeut) {
00330 RCP<ParameterList> p = rcp(new ParameterList);
00331
00332 p->set<string>("Material Property Name", "Neutron Flux");
00333 p->set< RCP<DataLayout> >("Data Layout", dl->qp_scalar);
00334 p->set<string>("Coordinate Vector Name", "Coord Vec");
00335 p->set< RCP<DataLayout> >("Coordinate Vector Data Layout", dl->qp_vector);
00336
00337 p->set<RCP<ParamLib> >("Parameter Library", paramLib);
00338 Teuchos::ParameterList& paramList = params->sublist("Neutronics");
00339 p->set<Teuchos::ParameterList*>("Parameter List", ¶mList);
00340
00341 ev = rcp(new PHAL::NSMaterialProperty<EvalT,AlbanyTraits>(*p));
00342 fm0.template registerEvaluator<EvalT>(ev);
00343 }
00344
00345 fm0.template registerEvaluator<EvalT>
00346 (evalUtils.constructGatherCoordinateVectorEvaluator());
00347
00348 fm0.template registerEvaluator<EvalT>
00349 (evalUtils.constructMapToPhysicalFrameEvaluator(cellType, cubature));
00350
00351 fm0.template registerEvaluator<EvalT>
00352 (evalUtils.constructComputeBasisFunctionsEvaluator(cellType, intrepidBasis, cubature));
00353
00354 if (havePSPG || haveSUPG) {
00355 RCP<ParameterList> p =
00356 rcp(new ParameterList("Contravarient Metric Tensor"));
00357
00358
00359 p->set<string>("Coordinate Vector Name","Coord Vec");
00360 p->set< RCP<DataLayout> >("Coordinate Data Layout", dl->vertices_vector);
00361 p->set< RCP<Intrepid::Cubature<RealType> > >("Cubature", cubature);
00362
00363 p->set<RCP<shards::CellTopology> >("Cell Type", cellType);
00364
00365
00366 p->set<string>("Contravarient Metric Tensor Name", "Gc");
00367 p->set< RCP<DataLayout> >("QP Tensor Data Layout", dl->qp_tensor);
00368
00369 ev = rcp(new PHAL::NSContravarientMetricTensor<EvalT,AlbanyTraits>(*p));
00370 fm0.template registerEvaluator<EvalT>(ev);
00371 }
00372
00373 if (haveFlowEq || haveHeatEq) {
00374 RCP<ParameterList> p = rcp(new ParameterList);
00375
00376 p->set<string>("Material Property Name", "Density");
00377 p->set< RCP<DataLayout> >("Data Layout", dl->qp_scalar);
00378 p->set<string>("Coordinate Vector Name", "Coord Vec");
00379 p->set< RCP<DataLayout> >("Coordinate Vector Data Layout", dl->qp_vector);
00380
00381 p->set<RCP<ParamLib> >("Parameter Library", paramLib);
00382 Teuchos::ParameterList& paramList = params->sublist("Density");
00383 p->set<Teuchos::ParameterList*>("Parameter List", ¶mList);
00384
00385 ev = rcp(new PHAL::NSMaterialProperty<EvalT,AlbanyTraits>(*p));
00386 fm0.template registerEvaluator<EvalT>(ev);
00387 }
00388
00389 if (haveFlowEq) {
00390 RCP<ParameterList> p = rcp(new ParameterList);
00391
00392 p->set<string>("Material Property Name", "Viscosity");
00393 p->set< RCP<DataLayout> >("Data Layout", dl->qp_scalar);
00394 p->set<string>("Coordinate Vector Name", "Coord Vec");
00395 p->set< RCP<DataLayout> >("Coordinate Vector Data Layout", dl->qp_vector);
00396
00397 p->set<RCP<ParamLib> >("Parameter Library", paramLib);
00398 Teuchos::ParameterList& paramList = params->sublist("Viscosity");
00399 p->set<Teuchos::ParameterList*>("Parameter List", ¶mList);
00400
00401 ev = rcp(new PHAL::NSMaterialProperty<EvalT,AlbanyTraits>(*p));
00402 fm0.template registerEvaluator<EvalT>(ev);
00403 }
00404
00405 if (haveHeatEq) {
00406 RCP<ParameterList> p = rcp(new ParameterList);
00407
00408 p->set<string>("Material Property Name", "Specific Heat");
00409 p->set< RCP<DataLayout> >("Data Layout", dl->qp_scalar);
00410 p->set<string>("Coordinate Vector Name", "Coord Vec");
00411 p->set< RCP<DataLayout> >("Coordinate Vector Data Layout", dl->qp_vector);
00412
00413 p->set<RCP<ParamLib> >("Parameter Library", paramLib);
00414 Teuchos::ParameterList& paramList = params->sublist("Specific Heat");
00415 p->set<Teuchos::ParameterList*>("Parameter List", ¶mList);
00416
00417 ev = rcp(new PHAL::NSMaterialProperty<EvalT,AlbanyTraits>(*p));
00418 fm0.template registerEvaluator<EvalT>(ev);
00419 }
00420
00421 if (haveHeatEq) {
00422 RCP<ParameterList> p = rcp(new ParameterList);
00423
00424 p->set<string>("Material Property Name", "Thermal Conductivity");
00425 p->set< RCP<DataLayout> >("Data Layout", dl->qp_scalar);
00426 p->set<string>("Coordinate Vector Name", "Coord Vec");
00427 p->set< RCP<DataLayout> >("Coordinate Vector Data Layout", dl->qp_vector);
00428
00429 p->set<RCP<ParamLib> >("Parameter Library", paramLib);
00430 Teuchos::ParameterList& paramList = params->sublist("Thermal Conductivity");
00431 p->set<Teuchos::ParameterList*>("Parameter List", ¶mList);
00432
00433 ev = rcp(new PHAL::NSMaterialProperty<EvalT,AlbanyTraits>(*p));
00434 fm0.template registerEvaluator<EvalT>(ev);
00435 }
00436
00437 if (haveNeutEq) {
00438 RCP<ParameterList> p = rcp(new ParameterList);
00439
00440 p->set<string>("Material Property Name", "Neutron Diffusion Coefficient");
00441 p->set< RCP<DataLayout> >("Data Layout", dl->qp_scalar);
00442 p->set<string>("Coordinate Vector Name", "Coord Vec");
00443 p->set< RCP<DataLayout> >("Coordinate Vector Data Layout", dl->qp_vector);
00444 p->set<string>("Temperature Variable Name", "Temperature");
00445 p->set<string>("Absorption Cross Section Name",
00446 "Absorption Cross Section");
00447 p->set<string>("Scattering Cross Section Name",
00448 "Scattering Cross Section");
00449 p->set<string>("Average Scattering Angle Name",
00450 "Average Scattering Angle");
00451
00452 p->set<RCP<ParamLib> >("Parameter Library", paramLib);
00453 Teuchos::ParameterList& paramList =
00454 params->sublist("Neutron Diffusion Coefficient");
00455 p->set<Teuchos::ParameterList*>("Parameter List", ¶mList);
00456
00457 ev = rcp(new PHAL::NSMaterialProperty<EvalT,AlbanyTraits>(*p));
00458 fm0.template registerEvaluator<EvalT>(ev);
00459 }
00460
00461 if (haveNeutEq) {
00462 RCP<ParameterList> p = rcp(new ParameterList);
00463
00464 p->set<string>("Material Property Name", "Reference Temperature");
00465 p->set< RCP<DataLayout> >("Data Layout", dl->qp_scalar);
00466 p->set<string>("Coordinate Vector Name", "Coord Vec");
00467 p->set< RCP<DataLayout> >("Coordinate Vector Data Layout", dl->qp_vector);
00468
00469 p->set<RCP<ParamLib> >("Parameter Library", paramLib);
00470 Teuchos::ParameterList& paramList =
00471 params->sublist("Reference Temperature");
00472 p->set<Teuchos::ParameterList*>("Parameter List", ¶mList);
00473
00474 ev = rcp(new PHAL::NSMaterialProperty<EvalT,AlbanyTraits>(*p));
00475 fm0.template registerEvaluator<EvalT>(ev);
00476 }
00477
00478 if (haveNeutEq) {
00479 RCP<ParameterList> p = rcp(new ParameterList);
00480
00481 p->set<string>("Material Property Name", "Absorption Cross Section");
00482 p->set< RCP<DataLayout> >("Data Layout", dl->qp_scalar);
00483 p->set<string>("Coordinate Vector Name", "Coord Vec");
00484 p->set< RCP<DataLayout> >("Coordinate Vector Data Layout", dl->qp_vector);
00485 p->set<string>("Temperature Variable Name", "Temperature");
00486
00487 p->set<RCP<ParamLib> >("Parameter Library", paramLib);
00488 Teuchos::ParameterList& paramList =
00489 params->sublist("Absorption Cross Section");
00490 p->set<Teuchos::ParameterList*>("Parameter List", ¶mList);
00491
00492 ev = rcp(new PHAL::NSMaterialProperty<EvalT,AlbanyTraits>(*p));
00493 fm0.template registerEvaluator<EvalT>(ev);
00494 }
00495
00496 if (haveNeutEq) {
00497 RCP<ParameterList> p = rcp(new ParameterList);
00498
00499 p->set<string>("Material Property Name",
00500 "Scattering Cross Section");
00501 p->set< RCP<DataLayout> >("Data Layout", dl->qp_scalar);
00502 p->set<string>("Coordinate Vector Name", "Coord Vec");
00503 p->set< RCP<DataLayout> >("Coordinate Vector Data Layout", dl->qp_vector);
00504 p->set<string>("Temperature Variable Name", "Temperature");
00505
00506 p->set<RCP<ParamLib> >("Parameter Library", paramLib);
00507 Teuchos::ParameterList& paramList =
00508 params->sublist("Scattering Cross Section");
00509 p->set<Teuchos::ParameterList*>("Parameter List", ¶mList);
00510
00511 ev = rcp(new PHAL::NSMaterialProperty<EvalT,AlbanyTraits>(*p));
00512 fm0.template registerEvaluator<EvalT>(ev);
00513 }
00514
00515 if (haveNeutEq || (haveNeut && haveHeatEq)) {
00516 RCP<ParameterList> p = rcp(new ParameterList);
00517
00518 p->set<string>("Material Property Name", "Fission Cross Section");
00519 p->set< RCP<DataLayout> >("Data Layout", dl->qp_scalar);
00520 p->set<string>("Coordinate Vector Name", "Coord Vec");
00521 p->set< RCP<DataLayout> >("Coordinate Vector Data Layout", dl->qp_vector);
00522 p->set<string>("Temperature Variable Name", "Temperature");
00523
00524 p->set<RCP<ParamLib> >("Parameter Library", paramLib);
00525 Teuchos::ParameterList& paramList =
00526 params->sublist("Fission Cross Section");
00527 p->set<Teuchos::ParameterList*>("Parameter List", ¶mList);
00528
00529 ev = rcp(new PHAL::NSMaterialProperty<EvalT,AlbanyTraits>(*p));
00530 fm0.template registerEvaluator<EvalT>(ev);
00531 }
00532
00533 if (haveNeutEq) {
00534 RCP<ParameterList> p = rcp(new ParameterList);
00535
00536 p->set<string>("Material Property Name", "Neutrons per Fission");
00537 p->set< RCP<DataLayout> >("Data Layout", dl->qp_scalar);
00538 p->set<string>("Coordinate Vector Name", "Coord Vec");
00539 p->set< RCP<DataLayout> >("Coordinate Vector Data Layout", dl->qp_vector);
00540 p->set<string>("Temperature Variable Name", "Temperature");
00541
00542 p->set<RCP<ParamLib> >("Parameter Library", paramLib);
00543 Teuchos::ParameterList& paramList =
00544 params->sublist("Neutrons per Fission");
00545 p->set<Teuchos::ParameterList*>("Parameter List", ¶mList);
00546
00547 ev = rcp(new PHAL::NSMaterialProperty<EvalT,AlbanyTraits>(*p));
00548 fm0.template registerEvaluator<EvalT>(ev);
00549 }
00550
00551 if (haveNeutEq) {
00552 RCP<ParameterList> p = rcp(new ParameterList);
00553
00554 p->set<string>("Material Property Name", "Average Scattering Angle");
00555 p->set< RCP<DataLayout> >("Data Layout", dl->qp_scalar);
00556 p->set<string>("Coordinate Vector Name", "Coord Vec");
00557 p->set< RCP<DataLayout> >("Coordinate Vector Data Layout", dl->qp_vector);
00558 p->set<string>("Temperature Variable Name", "Temperature");
00559 p->set("Default Value", 0.0);
00560
00561 p->set<RCP<ParamLib> >("Parameter Library", paramLib);
00562 Teuchos::ParameterList& paramList =
00563 params->sublist("Average Scattering Angle");
00564 p->set<Teuchos::ParameterList*>("Parameter List", ¶mList);
00565
00566 ev = rcp(new PHAL::NSMaterialProperty<EvalT,AlbanyTraits>(*p));
00567 fm0.template registerEvaluator<EvalT>(ev);
00568 }
00569
00570 if (haveNeut && haveHeatEq) {
00571 RCP<ParameterList> p = rcp(new ParameterList);
00572
00573 p->set<string>("Material Property Name", "Energy Released per Fission");
00574 p->set< RCP<DataLayout> >("Data Layout", dl->qp_scalar);
00575 p->set<string>("Coordinate Vector Name", "Coord Vec");
00576 p->set< RCP<DataLayout> >("Coordinate Vector Data Layout", dl->qp_vector);
00577
00578 p->set<RCP<ParamLib> >("Parameter Library", paramLib);
00579 Teuchos::ParameterList& paramList =
00580 params->sublist("Energy Released per Fission");
00581 p->set<Teuchos::ParameterList*>("Parameter List", ¶mList);
00582
00583 ev = rcp(new PHAL::NSMaterialProperty<EvalT,AlbanyTraits>(*p));
00584 fm0.template registerEvaluator<EvalT>(ev);
00585 }
00586
00587 if (haveFlowEq && haveHeat) {
00588 RCP<ParameterList> p = rcp(new ParameterList);
00589
00590 p->set<string>("Material Property Name",
00591 "Volumetric Expansion Coefficient");
00592 p->set< RCP<DataLayout> >("Data Layout", dl->qp_scalar);
00593 p->set<string>("Coordinate Vector Name", "Coord Vec");
00594 p->set< RCP<DataLayout> >("Coordinate Vector Data Layout", dl->qp_vector);
00595
00596 p->set<RCP<ParamLib> >("Parameter Library", paramLib);
00597 Teuchos::ParameterList& paramList =
00598 params->sublist("Volumetric Expansion Coefficient");
00599 p->set<Teuchos::ParameterList*>("Parameter List", ¶mList);
00600
00601 ev = rcp(new PHAL::NSMaterialProperty<EvalT,AlbanyTraits>(*p));
00602 fm0.template registerEvaluator<EvalT>(ev);
00603 }
00604
00605 if (porousMedia) {
00606 RCP<ParameterList> p = rcp(new ParameterList);
00607
00608 p->set<string>("Material Property Name",
00609 "Porosity");
00610 p->set< RCP<DataLayout> >("Data Layout", dl->qp_scalar);
00611 p->set<string>("Coordinate Vector Name", "Coord Vec");
00612 p->set< RCP<DataLayout> >("Coordinate Vector Data Layout", dl->qp_vector);
00613
00614 p->set<RCP<ParamLib> >("Parameter Library", paramLib);
00615 Teuchos::ParameterList& paramList =
00616 params->sublist("Porosity");
00617 p->set<Teuchos::ParameterList*>("Parameter List", ¶mList);
00618
00619 ev = rcp(new PHAL::NSMaterialProperty<EvalT,AlbanyTraits>(*p));
00620 fm0.template registerEvaluator<EvalT>(ev);
00621 }
00622
00623 if (porousMedia) {
00624 RCP<ParameterList> p = rcp(new ParameterList);
00625
00626 p->set<string>("Material Property Name",
00627 "Permeability");
00628 p->set< RCP<DataLayout> >("Data Layout", dl->qp_scalar);
00629 p->set<string>("Coordinate Vector Name", "Coord Vec");
00630 p->set< RCP<DataLayout> >("Coordinate Vector Data Layout", dl->qp_vector);
00631
00632 p->set<RCP<ParamLib> >("Parameter Library", paramLib);
00633 Teuchos::ParameterList& paramList =
00634 params->sublist("Permeability");
00635 p->set<Teuchos::ParameterList*>("Parameter List", ¶mList);
00636
00637 ev = rcp(new PHAL::NSMaterialProperty<EvalT,AlbanyTraits>(*p));
00638 fm0.template registerEvaluator<EvalT>(ev);
00639 }
00640
00641 if (porousMedia) {
00642 RCP<ParameterList> p = rcp(new ParameterList);
00643
00644 p->set<string>("Material Property Name",
00645 "Forchheimer");
00646 p->set< RCP<DataLayout> >("Data Layout", dl->qp_scalar);
00647 p->set<string>("Coordinate Vector Name", "Coord Vec");
00648 p->set< RCP<DataLayout> >("Coordinate Vector Data Layout", dl->qp_vector);
00649
00650 p->set<RCP<ParamLib> >("Parameter Library", paramLib);
00651 Teuchos::ParameterList& paramList =
00652 params->sublist("Forchheimer");
00653 p->set<Teuchos::ParameterList*>("Parameter List", ¶mList);
00654
00655 ev = rcp(new PHAL::NSMaterialProperty<EvalT,AlbanyTraits>(*p));
00656 fm0.template registerEvaluator<EvalT>(ev);
00657 }
00658
00659 if (haveHeatEq && haveSource) {
00660 RCP<ParameterList> p = rcp(new ParameterList);
00661
00662 p->set<string>("Source Name", "Heat Source");
00663 p->set<string>("Variable Name", "Temperature");
00664 p->set< RCP<DataLayout> >("QP Scalar Data Layout", dl->qp_scalar);
00665 p->set< RCP<DataLayout> >("QP Vector Data Layout", dl->qp_vector);
00666 p->set<string>("QP Coordinate Vector Name", "Coord Vec");
00667 p->set<string>("Neutron Flux Name", "Neutron Flux");
00668 p->set<string>("Fission Cross Section Name", "Fission Cross Section");
00669 p->set<string>("Energy Released per Fission Name",
00670 "Energy Released per Fission");
00671
00672 p->set<RCP<ParamLib> >("Parameter Library", paramLib);
00673 Teuchos::ParameterList& paramList = params->sublist("Source Functions");
00674 p->set<Teuchos::ParameterList*>("Parameter List", ¶mList);
00675
00676 ev = rcp(new PHAL::Source<EvalT,AlbanyTraits>(*p));
00677 fm0.template registerEvaluator<EvalT>(ev);
00678 }
00679
00680 if (haveNeutEq && haveNeutSource) {
00681 RCP<ParameterList> p = rcp(new ParameterList);
00682
00683 p->set<string>("Source Name", "Neutron Source");
00684 p->set<string>("Variable Name", "Neutron Flux");
00685 p->set< RCP<DataLayout> >("QP Scalar Data Layout", dl->qp_scalar);
00686 p->set< RCP<DataLayout> >("QP Vector Data Layout", dl->qp_vector);
00687 p->set<string>("QP Coordinate Vector Name", "Coord Vec");
00688
00689 p->set<RCP<ParamLib> >("Parameter Library", paramLib);
00690 Teuchos::ParameterList& paramList = params->sublist("Neutron Source");
00691 p->set<Teuchos::ParameterList*>("Parameter List", ¶mList);
00692
00693 ev = rcp(new PHAL::Source<EvalT,AlbanyTraits>(*p));
00694 fm0.template registerEvaluator<EvalT>(ev);
00695 }
00696
00697 if (haveFlowEq) {
00698 RCP<ParameterList> p = rcp(new ParameterList("Body Force"));
00699
00700
00701 p->set<bool>("Have Heat", haveHeat);
00702 p->set<string>("Temperature QP Variable Name", "Temperature");
00703 p->set<string>("Density QP Variable Name", "Density");
00704 p->set<string>("Volumetric Expansion Coefficient QP Variable Name",
00705 "Volumetric Expansion Coefficient");
00706
00707 p->set< RCP<DataLayout> >("QP Scalar Data Layout", dl->qp_scalar);
00708 p->set< RCP<DataLayout> >("QP Vector Data Layout", dl->qp_vector);
00709
00710 Teuchos::ParameterList& paramList = params->sublist("Body Force");
00711 p->set<Teuchos::ParameterList*>("Parameter List", ¶mList);
00712
00713
00714 p->set<string>("Body Force Name", "Body Force");
00715
00716 ev = rcp(new PHAL::NSBodyForce<EvalT,AlbanyTraits>(*p));
00717 fm0.template registerEvaluator<EvalT>(ev);
00718 }
00719
00720
00721
00722
00723
00724
00725
00726
00727
00728
00729
00730
00731
00732
00733
00734
00735
00736
00737
00738
00739
00740
00741
00742
00743
00744
00745
00746
00747
00748
00749
00750
00751
00752
00753
00754
00755
00756
00757
00758
00759
00760
00761
00762
00763
00764
00765
00766
00767
00768
00769
00770
00771
00772
00773
00774
00775
00776
00777
00778
00779
00780
00781
00782
00783
00784
00785
00786
00787
00788
00789
00790
00791
00792
00793
00794
00795
00796
00797
00798
00799
00800
00801
00802
00803
00804
00805
00806
00807
00808
00809
00810
00811
00812
00813
00814
00815
00816
00817
00818
00819
00820
00821
00822
00823
00824
00825
00826
00827
00828
00829
00830
00831
00832
00833
00834
00835
00836
00837
00838
00839
00840
00841 if (porousMedia) {
00842 std::cout <<"This is flow through porous media problem" << std::endl;
00843 RCP<ParameterList> p = rcp(new ParameterList("Permeability Term"));
00844
00845
00846 p->set<string>("Velocity QP Variable Name", "Velocity");
00847 p->set<string>("Density QP Variable Name", "Density");
00848 p->set<string>("Viscosity QP Variable Name", "Viscosity");
00849 p->set<string>("Porosity QP Variable Name", "Porosity");
00850 p->set<string>("Permeability QP Variable Name", "Permeability");
00851
00852 p->set< RCP<DataLayout> >("QP Scalar Data Layout", dl->qp_scalar);
00853 p->set< RCP<DataLayout> >("QP Vector Data Layout", dl->qp_vector);
00854 p->set< RCP<DataLayout> >("QP Tensor Data Layout", dl->qp_tensor);
00855 p->set< RCP<DataLayout> >("Node QP Vector Data Layout", dl->node_qp_vector);
00856
00857 p->set<RCP<ParamLib> >("Parameter Library", paramLib);
00858
00859
00860 p->set<string>("Permeability Term", "Permeability Term");
00861
00862 ev = rcp(new PHAL::NSPermeabilityTerm<EvalT,AlbanyTraits>(*p));
00863 fm0.template registerEvaluator<EvalT>(ev);
00864 }
00865
00866 if (porousMedia) {
00867 RCP<ParameterList> p = rcp(new ParameterList("Forchheimer Term"));
00868
00869
00870 p->set<string>("Velocity QP Variable Name", "Velocity");
00871 p->set<string>("Density QP Variable Name", "Density");
00872 p->set<string>("Viscosity QP Variable Name", "Viscosity");
00873 p->set<string>("Porosity QP Variable Name", "Porosity");
00874 p->set<string>("Permeability QP Variable Name", "Permeability");
00875 p->set<string>("Forchheimer QP Variable Name", "Forchheimer");
00876
00877 p->set< RCP<DataLayout> >("QP Scalar Data Layout", dl->qp_scalar);
00878 p->set< RCP<DataLayout> >("QP Vector Data Layout", dl->qp_vector);
00879 p->set< RCP<DataLayout> >("QP Tensor Data Layout", dl->qp_tensor);
00880 p->set< RCP<DataLayout> >("Node QP Vector Data Layout", dl->node_qp_vector);
00881
00882 p->set<RCP<ParamLib> >("Parameter Library", paramLib);
00883
00884
00885 p->set<string>("Forchheimer Term", "Forchheimer Term");
00886
00887 ev = rcp(new PHAL::NSForchheimerTerm<EvalT,AlbanyTraits>(*p));
00888 fm0.template registerEvaluator<EvalT>(ev);
00889 }
00890
00891 if (haveFlowEq) {
00892 RCP<ParameterList> p = rcp(new ParameterList("Rm"));
00893
00894
00895 p->set<string>("Velocity QP Variable Name", "Velocity");
00896 p->set<string>("Velocity Dot QP Variable Name", "Velocity_dot");
00897 p->set<string>("Velocity Gradient QP Variable Name", "Velocity Gradient");
00898 p->set<string>("Pressure Gradient QP Variable Name", "Pressure Gradient");
00899 p->set<string>("Density QP Variable Name", "Density");
00900 p->set<string>("Body Force QP Variable Name", "Body Force");
00901 p->set<string>("Porosity QP Variable Name", "Porosity");
00902 p->set<string>("Permeability Term", "Permeability Term");
00903 p->set<string>("Forchheimer Term", "Forchheimer Term");
00904
00905 p->set<bool>("Porous Media", porousMedia);
00906
00907 p->set< RCP<DataLayout> >("QP Scalar Data Layout", dl->qp_scalar);
00908 p->set< RCP<DataLayout> >("QP Vector Data Layout", dl->qp_vector);
00909 p->set< RCP<DataLayout> >("QP Tensor Data Layout", dl->qp_tensor);
00910 p->set< RCP<DataLayout> >("Node QP Vector Data Layout", dl->node_qp_vector);
00911
00912 p->set<RCP<ParamLib> >("Parameter Library", paramLib);
00913
00914
00915 p->set<string>("Rm Name", "Rm");
00916
00917 ev = rcp(new PHAL::NSRm<EvalT,AlbanyTraits>(*p));
00918 fm0.template registerEvaluator<EvalT>(ev);
00919 }
00920
00921 if (haveFlowEq && (haveSUPG || havePSPG)) {
00922 RCP<ParameterList> p = rcp(new ParameterList("Tau M"));
00923
00924
00925 p->set<string>("Velocity QP Variable Name", "Velocity");
00926 p->set<std::string>("Contravarient Metric Tensor Name", "Gc");
00927 p->set<string>("Density QP Variable Name", "Density");
00928 p->set<string>("Viscosity QP Variable Name", "Viscosity");
00929
00930 p->set< RCP<DataLayout> >("QP Scalar Data Layout", dl->qp_scalar);
00931 p->set< RCP<DataLayout> >("QP Vector Data Layout", dl->qp_vector);
00932 p->set< RCP<DataLayout> >("QP Tensor Data Layout", dl->qp_tensor);
00933
00934
00935 p->set<string>("Tau M Name", "Tau M");
00936
00937 ev = rcp(new PHAL::NSTauM<EvalT,AlbanyTraits>(*p));
00938 fm0.template registerEvaluator<EvalT>(ev);
00939 }
00940
00941 if (haveHeatEq && haveFlow && haveSUPG) {
00942 RCP<ParameterList> p = rcp(new ParameterList("Tau T"));
00943
00944
00945 p->set<string>("Velocity QP Variable Name", "Velocity");
00946 p->set<std::string>("Contravarient Metric Tensor Name", "Gc");
00947 p->set<string>("Thermal Conductivity Name", "Thermal Conductivity");
00948 p->set<string>("Density QP Variable Name", "Density");
00949 p->set<string>("Specific Heat QP Variable Name", "Specific Heat");
00950
00951 p->set< RCP<DataLayout> >("QP Scalar Data Layout", dl->qp_scalar);
00952 p->set< RCP<DataLayout> >("QP Vector Data Layout", dl->qp_vector);
00953 p->set< RCP<DataLayout> >("QP Tensor Data Layout", dl->qp_tensor);
00954
00955
00956 p->set<string>("Tau T Name", "Tau T");
00957
00958 ev = rcp(new PHAL::NSTauT<EvalT,AlbanyTraits>(*p));
00959 fm0.template registerEvaluator<EvalT>(ev);
00960 }
00961
00962 if (haveFlowEq) {
00963 RCP<ParameterList> p = rcp(new ParameterList("Momentum Resid"));
00964
00965
00966 p->set<string>("Weighted BF Name", "wBF");
00967 p->set<string>("Weighted Gradient BF Name", "wGrad BF");
00968 p->set<string>("Velocity Gradient QP Variable Name", "Velocity Gradient");
00969 p->set<string>("Pressure QP Variable Name", "Pressure");
00970 p->set<string>("Pressure Gradient QP Variable Name", "Pressure Gradient");
00971 p->set<string>("Viscosity QP Variable Name", "Viscosity");
00972 p->set<string>("Rm Name", "Rm");
00973
00974 p->set<bool>("Have SUPG", haveSUPG);
00975 p->set<string>("Velocity QP Variable Name", "Velocity");
00976 p->set<string>("Density QP Variable Name", "Density");
00977 p->set<string> ("Tau M Name", "Tau M");
00978
00979 p->set< RCP<DataLayout> >("QP Scalar Data Layout", dl->qp_scalar);
00980 p->set< RCP<DataLayout> >("QP Vector Data Layout", dl->qp_vector);
00981 p->set< RCP<DataLayout> >("QP Tensor Data Layout", dl->qp_tensor);
00982 p->set< RCP<DataLayout> >("Node QP Scalar Data Layout", dl->node_qp_scalar);
00983 p->set< RCP<DataLayout> >("Node QP Vector Data Layout", dl->node_qp_vector);
00984
00985 p->set<RCP<ParamLib> >("Parameter Library", paramLib);
00986
00987
00988 p->set<string>("Residual Name", "Momentum Residual");
00989 p->set< RCP<DataLayout> >("Node Vector Data Layout", dl->node_vector);
00990
00991 ev = rcp(new PHAL::NSMomentumResid<EvalT,AlbanyTraits>(*p));
00992 fm0.template registerEvaluator<EvalT>(ev);
00993 }
00994
00995 if (haveFlowEq) {
00996 RCP<ParameterList> p = rcp(new ParameterList("Continuity Resid"));
00997
00998
00999 p->set<string>("Weighted BF Name", "wBF");
01000 p->set<string>("Gradient QP Variable Name", "Velocity Gradient");
01001 p->set<string>("Density QP Variable Name", "Density");
01002
01003 p->set<bool>("Have PSPG", havePSPG);
01004 p->set<string>("Weighted Gradient BF Name", "wGrad BF");
01005 p->set<std::string> ("Tau M Name", "Tau M");
01006 p->set<std::string> ("Rm Name", "Rm");
01007
01008 p->set< RCP<DataLayout> >("Node QP Scalar Data Layout", dl->node_qp_scalar);
01009 p->set< RCP<DataLayout> >("Node QP Vector Data Layout", dl->node_qp_vector);
01010 p->set< RCP<PHX::DataLayout> >("QP Scalar Data Layout", dl->qp_scalar);
01011 p->set< RCP<PHX::DataLayout> >("QP Vector Data Layout", dl->qp_vector);
01012 p->set< RCP<DataLayout> >("QP Tensor Data Layout", dl->qp_tensor);
01013
01014
01015 p->set<string>("Residual Name", "Continuity Residual");
01016 p->set< RCP<DataLayout> >("Node Scalar Data Layout", dl->node_scalar);
01017
01018 ev = rcp(new PHAL::NSContinuityResid<EvalT,AlbanyTraits>(*p));
01019 fm0.template registerEvaluator<EvalT>(ev);
01020 }
01021
01022 if (haveHeatEq) {
01023 RCP<ParameterList> p = rcp(new ParameterList("Temperature Resid"));
01024
01025
01026 p->set<string>("Weighted BF Name", "wBF");
01027 p->set<string>("Weighted Gradient BF Name", "wGrad BF");
01028 p->set<string>("QP Variable Name", "Temperature");
01029 p->set<string>("QP Time Derivative Variable Name", "Temperature_dot");
01030 p->set<string>("Gradient QP Variable Name", "Temperature Gradient");
01031 p->set<string>("Density QP Variable Name", "Density");
01032 p->set<string>("Specific Heat QP Variable Name", "Specific Heat");
01033 p->set<string>("Thermal Conductivity Name", "Thermal Conductivity");
01034
01035 p->set<bool>("Have Source", haveSource);
01036 p->set<string>("Source Name", "Heat Source");
01037
01038 p->set<bool>("Have Flow", haveFlow);
01039 p->set<string>("Velocity QP Variable Name", "Velocity");
01040
01041 p->set<bool>("Have SUPG", haveSUPG);
01042 p->set<string> ("Tau T Name", "Tau T");
01043
01044 p->set< RCP<DataLayout> >("QP Scalar Data Layout", dl->qp_scalar);
01045 p->set< RCP<DataLayout> >("QP Vector Data Layout", dl->qp_vector);
01046 p->set< RCP<DataLayout> >("Node QP Scalar Data Layout", dl->node_qp_scalar);
01047 p->set< RCP<DataLayout> >("Node QP Vector Data Layout", dl->node_qp_vector);
01048
01049
01050 p->set<string>("Residual Name", "Temperature Residual");
01051 p->set< RCP<DataLayout> >("Node Scalar Data Layout", dl->node_scalar);
01052
01053 ev = rcp(new PHAL::NSThermalEqResid<EvalT,AlbanyTraits>(*p));
01054 fm0.template registerEvaluator<EvalT>(ev);
01055 }
01056
01057 if (haveNeutEq) {
01058 RCP<ParameterList> p = rcp(new ParameterList("Neutron Resid"));
01059
01060
01061 p->set<string>("Weighted BF Name", "wBF");
01062 p->set<string>("Weighted Gradient BF Name", "wGrad BF");
01063 p->set<string>("QP Variable Name", "Neutron Flux");
01064 p->set<string>("Gradient QP Variable Name", "Neutron Flux Gradient");
01065 p->set<string>("Neutron Diffusion Name", "Neutron Diffusion Coefficient");
01066 p->set<string>("Neutron Absorption Name", "Absorption Cross Section");
01067 p->set<string>("Neutron Fission Name", "Fission Cross Section");
01068 p->set<string>("Neutrons per Fission Name", "Neutrons per Fission");
01069
01070 p->set<bool>("Have Neutron Source", haveNeutSource);
01071 p->set<string>("Source Name", "Neutron Source");
01072
01073 p->set< RCP<DataLayout> >("QP Scalar Data Layout", dl->qp_scalar);
01074 p->set< RCP<DataLayout> >("QP Vector Data Layout", dl->qp_vector);
01075 p->set< RCP<DataLayout> >("Node QP Scalar Data Layout", dl->node_qp_scalar);
01076 p->set< RCP<DataLayout> >("Node QP Vector Data Layout", dl->node_qp_vector);
01077
01078
01079 p->set<string>("Residual Name", "Neutron Flux Residual");
01080 p->set< RCP<DataLayout> >("Node Scalar Data Layout", dl->node_scalar);
01081
01082 ev = rcp(new PHAL::NSNeutronEqResid<EvalT,AlbanyTraits>(*p));
01083 fm0.template registerEvaluator<EvalT>(ev);
01084 }
01085
01086 if (fieldManagerChoice == Albany::BUILD_RESID_FM) {
01087 Teuchos::RCP<const PHX::FieldTag> ret_tag;
01088 if (haveFlowEq) {
01089 PHX::Tag<typename EvalT::ScalarT> mom_tag("Scatter Momentum", dl->dummy);
01090 fm0.requireField<EvalT>(mom_tag);
01091 PHX::Tag<typename EvalT::ScalarT> con_tag("Scatter Continuity", dl->dummy);
01092 fm0.requireField<EvalT>(con_tag);
01093 ret_tag = mom_tag.clone();
01094 }
01095 if (haveHeatEq) {
01096 PHX::Tag<typename EvalT::ScalarT> heat_tag("Scatter Temperature", dl->dummy);
01097 fm0.requireField<EvalT>(heat_tag);
01098 ret_tag = heat_tag.clone();
01099 }
01100 if (haveNeutEq) {
01101 PHX::Tag<typename EvalT::ScalarT> neut_tag("Scatter Neutron", dl->dummy);
01102 fm0.requireField<EvalT>(neut_tag);
01103 ret_tag = neut_tag.clone();
01104 }
01105 return ret_tag;
01106 }
01107 else if (fieldManagerChoice == Albany::BUILD_RESPONSE_FM) {
01108 Albany::ResponseUtilities<EvalT, PHAL::AlbanyTraits> respUtils(dl);
01109 return respUtils.constructResponses(fm0, *responseList, Teuchos::null, stateMgr);
01110 }
01111
01112 return Teuchos::null;
01113 }
01114 #endif // ALBANY_NAVIERSTOKES_HPP