MomentumBuoyancyBoussinesqSrcElemKernel<AlgTraits>::MomentumBuoyancyBoussinesqSrcElemKernel( const stk::mesh::BulkData& bulkData, const SolutionOptions& solnOpts, ElemDataRequests& dataPreReqs) : Kernel(), rhoRef_(solnOpts.referenceDensity_), ipNodeMap_(sierra::nalu::MasterElementRepo::get_volume_master_element(AlgTraits::topo_)->ipNodeMap()) { const stk::mesh::MetaData& metaData = bulkData.mesh_meta_data(); ScalarFieldType *temperature = metaData.get_field<ScalarFieldType>(stk::topology::NODE_RANK, "temperature"); temperatureNp1_ = &(temperature->field_of_state(stk::mesh::StateNP1)); coordinates_ = metaData.get_field<VectorFieldType>(stk::topology::NODE_RANK, solnOpts.get_coordinates_name()); const std::vector<double>& solnOptsGravity = solnOpts.get_gravity_vector(AlgTraits::nDim_); for (int i = 0; i < AlgTraits::nDim_; i++) gravity_(i) = solnOptsGravity[i]; tRef_ = solnOpts.referenceTemperature_; rhoRef_ = solnOpts.referenceDensity_; beta_ = solnOpts.thermalExpansionCoeff_; MasterElement* meSCV = sierra::nalu::MasterElementRepo::get_volume_master_element(AlgTraits::topo_); get_scv_shape_fn_data<AlgTraits>([&](double* ptr){meSCV->shape_fcn(ptr);}, v_shape_function_); // add master elements dataPreReqs.add_cvfem_volume_me(meSCV); // fields and data dataPreReqs.add_coordinates_field(*coordinates_, AlgTraits::nDim_, CURRENT_COORDINATES); dataPreReqs.add_gathered_nodal_field(*temperatureNp1_, 1); dataPreReqs.add_master_element_call(SCV_VOLUME, CURRENT_COORDINATES); }
ContinuityMassElemSuppAlg<AlgTraits>::ContinuityMassElemSuppAlg( Realm &realm, ElemDataRequests& dataPreReqs, const bool lumpedMass) : SupplementalAlgorithm(realm), densityNm1_(NULL), densityN_(NULL), densityNp1_(NULL), coordinates_(NULL), dt_(0.0), gamma1_(0.0), gamma2_(0.0), gamma3_(0.0), lumpedMass_(lumpedMass), ipNodeMap_(realm.get_volume_master_element(AlgTraits::topo_)->ipNodeMap()) { // save off fields; shove state N into Nm1 if this is BE stk::mesh::MetaData & meta_data = realm_.meta_data(); ScalarFieldType *density = meta_data.get_field<ScalarFieldType>(stk::topology::NODE_RANK, "density"); densityNm1_ = realm_.number_of_states() == 2 ? &(density->field_of_state(stk::mesh::StateN)) : &(density->field_of_state(stk::mesh::StateNM1)); densityN_ = &(density->field_of_state(stk::mesh::StateN)); densityNp1_ = &(density->field_of_state(stk::mesh::StateNP1)); coordinates_ = meta_data.get_field<VectorFieldType>(stk::topology::NODE_RANK, realm_.get_coordinates_name()); MasterElement *meSCV = realm.get_volume_master_element(AlgTraits::topo_); // compute shape function if ( lumpedMass_ ) meSCV->shifted_shape_fcn(&v_shape_function_(0,0)); else meSCV->shape_fcn(&v_shape_function_(0,0)); // add master elements dataPreReqs.add_cvfem_volume_me(meSCV); // fields and data dataPreReqs.add_gathered_nodal_field(*coordinates_, AlgTraits::nDim_); dataPreReqs.add_gathered_nodal_field(*densityNm1_, 1); dataPreReqs.add_gathered_nodal_field(*densityN_, 1); dataPreReqs.add_gathered_nodal_field(*densityNp1_, 1); dataPreReqs.add_master_element_call(SCV_VOLUME); }