当前位置: 首页>>代码示例>>C++>>正文


C++ AssemblyContext::get_side_fe方法代码示例

本文整理汇总了C++中AssemblyContext::get_side_fe方法的典型用法代码示例。如果您正苦于以下问题:C++ AssemblyContext::get_side_fe方法的具体用法?C++ AssemblyContext::get_side_fe怎么用?C++ AssemblyContext::get_side_fe使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在AssemblyContext的用法示例。


在下文中一共展示了AssemblyContext::get_side_fe方法的8个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: init_context

	void PracticeCDRinv::init_context( AssemblyContext& context){
		context.get_element_fe(_c_var)->get_JxW();
    context.get_element_fe(_c_var)->get_phi();
    context.get_element_fe(_c_var)->get_dphi();
    context.get_element_fe(_c_var)->get_xyz();

    context.get_side_fe(_c_var)->get_JxW();
    context.get_side_fe(_c_var)->get_phi();
    context.get_side_fe(_c_var)->get_dphi();
    context.get_side_fe(_c_var)->get_xyz();

    return;
	}
开发者ID:kameeko,项目名称:harriet_libmesh,代码行数:13,代码来源:practice_cdr_inv.C

示例2: apply_neumann_normal

  void BoundaryConditions::apply_neumann_normal( AssemblyContext& context,
                                                 const VariableIndex var,
                                                 const libMesh::Real sign,
                                                 const FEShape& value ) const
  {
    libMesh::FEGenericBase<FEShape>* side_fe = NULL; 
    context.get_side_fe( var, side_fe );

    // The number of local degrees of freedom in each variable.
    const unsigned int n_var_dofs = context.get_dof_indices(var).size();

    // Element Jacobian * quadrature weight for side integration.
    const std::vector<libMesh::Real> &JxW_side = side_fe->get_JxW();

    // The var shape functions at side quadrature points.
    const std::vector<std::vector<FEShape> >& var_phi_side = side_fe->get_phi();

    libMesh::DenseSubVector<libMesh::Number> &F_var = context.get_elem_residual(var); // residual

    unsigned int n_qpoints = context.get_side_qrule().n_points();
    for (unsigned int qp=0; qp != n_qpoints; qp++)
      {
	for (unsigned int i=0; i != n_var_dofs; i++)
	  {
	    F_var(i) += sign*value*var_phi_side[i][qp]*JxW_side[qp];
	  }
      }

    return;
  }
开发者ID:gdmcbain,项目名称:grins,代码行数:30,代码来源:boundary_conditions.C

示例3:

  void HeatConduction<K>::init_context( AssemblyContext& context )
  {
    // We should prerequest all the data
    // we will need to build the linear system
    // or evaluate a quantity of interest.
    context.get_element_fe(_temp_vars.T_var())->get_JxW();
    context.get_element_fe(_temp_vars.T_var())->get_phi();
    context.get_element_fe(_temp_vars.T_var())->get_dphi();
    context.get_element_fe(_temp_vars.T_var())->get_xyz();

    context.get_side_fe(_temp_vars.T_var())->get_JxW();
    context.get_side_fe(_temp_vars.T_var())->get_phi();
    context.get_side_fe(_temp_vars.T_var())->get_dphi();
    context.get_side_fe(_temp_vars.T_var())->get_xyz();

    return;
  }
开发者ID:jcamata,项目名称:grins,代码行数:17,代码来源:heat_conduction.C

示例4:

  void AxisymmetricHeatTransfer<Conductivity>::init_context( AssemblyContext& context )
  {
    // We should prerequest all the data
    // we will need to build the linear system
    // or evaluate a quantity of interest.
    context.get_element_fe(_T_var)->get_JxW();
    context.get_element_fe(_T_var)->get_phi();
    context.get_element_fe(_T_var)->get_dphi();
    context.get_element_fe(_T_var)->get_xyz();

    context.get_side_fe(_T_var)->get_JxW();
    context.get_side_fe(_T_var)->get_phi();
    context.get_side_fe(_T_var)->get_dphi();
    context.get_side_fe(_T_var)->get_xyz();

    // _u_var is registered so can we assume things related to _u_var
    // are available in FEMContext

    return;
  }
开发者ID:vikramvgarg,项目名称:grins,代码行数:20,代码来源:axisym_heat_transfer.C

示例5:

  void IncompressibleNavierStokesBase<Mu>::init_context( AssemblyContext& context )
  {
    // We should prerequest all the data
    // we will need to build the linear system
    // or evaluate a quantity of interest.
    context.get_element_fe(_flow_vars.u_var())->get_JxW();
    context.get_element_fe(_flow_vars.u_var())->get_phi();
    context.get_element_fe(_flow_vars.u_var())->get_dphi();
    context.get_element_fe(_flow_vars.u_var())->get_xyz();

    context.get_element_fe(_flow_vars.p_var())->get_phi();
    context.get_element_fe(_flow_vars.p_var())->get_xyz();

    context.get_side_fe(_flow_vars.u_var())->get_JxW();
    context.get_side_fe(_flow_vars.u_var())->get_phi();
    context.get_side_fe(_flow_vars.u_var())->get_dphi();
    context.get_side_fe(_flow_vars.u_var())->get_xyz();

    return;
  }
开发者ID:gmeer,项目名称:grins,代码行数:20,代码来源:inc_navier_stokes_base.C

示例6:

  void LowMachNavierStokes<Mu,SH,TC>::init_context( AssemblyContext& context )
  {
    // First call base class
    LowMachNavierStokesBase<Mu,SH,TC>::init_context(context);

    // We also need the side shape functions, etc.
    context.get_side_fe(this->_u_var)->get_JxW();
    context.get_side_fe(this->_u_var)->get_phi();
    context.get_side_fe(this->_u_var)->get_dphi();
    context.get_side_fe(this->_u_var)->get_xyz();

    context.get_side_fe(this->_T_var)->get_JxW();
    context.get_side_fe(this->_T_var)->get_phi();
    context.get_side_fe(this->_T_var)->get_dphi();
    context.get_side_fe(this->_T_var)->get_xyz();

    return;
  }
开发者ID:SylvainPlessis,项目名称:grins,代码行数:18,代码来源:low_mach_navier_stokes.C

示例7:

  bool GasRecombinationCatalyticWall<Chemistry>::eval_flux( bool compute_jacobian,
                                                            AssemblyContext& context,
                                                            libMesh::Real sign,
                                                            bool is_axisymmetric )
  {
    libMesh::FEGenericBase<libMesh::Real>* side_fe = NULL;
    context.get_side_fe( _reactant_var_idx, side_fe );

    // The number of local degrees of freedom in each variable.
    const unsigned int n_var_dofs = context.get_dof_indices(_reactant_var_idx).size();

    libmesh_assert_equal_to( n_var_dofs, context.get_dof_indices(_product_var_idx).size() );

    // Element Jacobian * quadrature weight for side integration.
    const std::vector<libMesh::Real> &JxW_side = side_fe->get_JxW();

    // The var shape functions at side quadrature points.
    const std::vector<std::vector<libMesh::Real> >& var_phi_side = side_fe->get_phi();

    // Physical location of the quadrature points
    const std::vector<libMesh::Point>& var_qpoint = side_fe->get_xyz();

    // reactant residual
    libMesh::DenseSubVector<libMesh::Number> &F_r_var = context.get_elem_residual(_reactant_var_idx);

    // product residual
    libMesh::DenseSubVector<libMesh::Number> &F_p_var = context.get_elem_residual(_product_var_idx);

    unsigned int n_qpoints = context.get_side_qrule().n_points();

    for (unsigned int qp=0; qp != n_qpoints; qp++)
      {
        libMesh::Real jac = JxW_side[qp];

        if(is_axisymmetric)
          {
            const libMesh::Number r = var_qpoint[qp](0);
            jac *= r;
          }

        std::vector<libMesh::Real> mass_fractions(this->_chem_ptr->n_species());
        for( unsigned int s = 0; s < this->_chem_ptr->n_species(); s++ )
          mass_fractions[s] = context.side_value(this->_species_vars[s], qp);

        libMesh::Real Y_r = mass_fractions[this->_reactant_species_idx];
        libMesh::Real T =  context.side_value(this->_T_var, qp);
        libMesh::Real R_mix = this->_chem_ptr->R_mix(mass_fractions);
        libMesh::Real rho = this->rho( T, this->_p0, R_mix );

         const libMesh::Real r_value = this->compute_reactant_mass_flux(rho, Y_r, T);

         const libMesh::Real p_value = -r_value;

         for (unsigned int i=0; i != n_var_dofs; i++)
          {
            F_r_var(i) += sign*r_value*var_phi_side[i][qp]*jac;

            F_p_var(i) += sign*p_value*var_phi_side[i][qp]*jac;

            if( compute_jacobian )
              libmesh_not_implemented();
          }
      }

    // We're not computing the Jacobian yet
    return false;
  }
开发者ID:coreymbryant,项目名称:grins,代码行数:67,代码来源:gas_recombination_catalytic_wall.C

示例8: apply_neumann_axisymmetric

  void BoundaryConditions::apply_neumann_axisymmetric( AssemblyContext& context,
                                                       const CachedValues& cache,
                                                       const bool request_jacobian,
                                                       const VariableIndex var,
                                                       const libMesh::Real sign,
                                                       SharedPtr<NeumannFuncObj> neumann_func ) const
  {
    libMesh::FEGenericBase<libMesh::Real>* side_fe = NULL; 
    context.get_side_fe( var, side_fe );

    // The number of local degrees of freedom
    const unsigned int n_var_dofs = context.get_dof_indices(var).size();
  
    // Element Jacobian * quadrature weight for side integration.
    const std::vector<libMesh::Real> &JxW_side = side_fe->get_JxW();

    // The var shape functions at side quadrature points.
    const std::vector<std::vector<libMesh::Real> >& var_phi_side =
      side_fe->get_phi();

    // Physical location of the quadrature points
    const std::vector<libMesh::Point>& var_qpoint =
      side_fe->get_xyz();

    const std::vector<libMesh::Point> &normals = side_fe->get_normals();

    libMesh::DenseSubVector<libMesh::Number> &F_var = context.get_elem_residual(var); // residual
    libMesh::DenseSubMatrix<libMesh::Number> &K_var = context.get_elem_jacobian(var,var); // jacobian

    unsigned int n_qpoints = context.get_side_qrule().n_points();

    for (unsigned int qp=0; qp != n_qpoints; qp++)
      {
	const libMesh::Point bc_value = neumann_func->value( context, cache, qp );
        libMesh::Point jac_value;
        if (request_jacobian)
          {
            jac_value = neumann_func->derivative( context, cache, qp );
          }

	const libMesh::Number r = var_qpoint[qp](0);

	for (unsigned int i=0; i != n_var_dofs; i++)
	  {
	    F_var(i) += sign*r*JxW_side[qp]*bc_value*normals[qp]*var_phi_side[i][qp];

	    if (request_jacobian)
	      {
		for (unsigned int j=0; j != n_var_dofs; j++)
		  {
		    K_var(i,j) += sign*r*JxW_side[qp]*jac_value*normals[qp]*
		      var_phi_side[i][qp]*var_phi_side[j][qp];
		  }
	      }
	  }
      } // End quadrature loop

    // Now must take care of the case that the boundary condition depends on variables
    // other than var.
    std::vector<VariableIndex> other_jac_vars = neumann_func->get_other_jac_vars();

    if( (other_jac_vars.size() > 0) && request_jacobian )
      {
	for( std::vector<VariableIndex>::const_iterator var2 = other_jac_vars.begin();
	     var2 != other_jac_vars.end();
	     var2++ )
	  {
            libMesh::FEGenericBase<libMesh::Real>* side_fe2 = NULL; 
            context.get_side_fe( *var2, side_fe2 );

            libMesh::DenseSubMatrix<libMesh::Number> &K_var2 = context.get_elem_jacobian(var,*var2); // jacobian

	    const unsigned int n_var2_dofs = context.get_dof_indices(*var2).size();
	    const std::vector<std::vector<libMesh::Real> >& var2_phi_side =
              side_fe2->get_phi();

	    for (unsigned int qp=0; qp != n_qpoints; qp++)
	      {
		const libMesh::Number r = var_qpoint[qp](0);

		const libMesh::Point jac_value = neumann_func->derivative( context, cache, qp, *var2 );

		for (unsigned int i=0; i != n_var_dofs; i++)
		  {
		    for (unsigned int j=0; j != n_var2_dofs; j++)
		      {
			K_var2(i,j) += sign*r*JxW_side[qp]*jac_value*normals[qp]*
			  var_phi_side[i][qp]*var2_phi_side[j][qp];
		      }
		  }
	      }
	  } // End loop over auxillary Jacobian variables
      }
    return;
  }
开发者ID:gdmcbain,项目名称:grins,代码行数:95,代码来源:boundary_conditions.C


注:本文中的AssemblyContext::get_side_fe方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。