Exemplo n.º 1
0
/*!
 * \method Galerkin_Method
 * \brief calculate the element stiffness matrix
 * \author A. Lonkar
 */
void CPoissonSolver::Viscous_Residual(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics,
                                     CConfig *config, unsigned short iMesh, unsigned short iRKStep) {
  
  unsigned long iElem, Point_0 = 0, Point_1 = 0, Point_2 = 0, Point_3 = 0;
  su2double *Coord_0 = NULL, *Coord_1= NULL, *Coord_2= NULL, *Coord_3 = NULL;
  
  if (nDim == 2 ) {
    for (iElem = 0; iElem < geometry->GetnElem(); iElem++) {
      
      Point_0 = geometry->elem[iElem]->GetNode(0);
      Point_1 = geometry->elem[iElem]->GetNode(1);
      Point_2 = geometry->elem[iElem]->GetNode(2);
      
      Coord_0 = geometry->node[Point_0]->GetCoord();
      Coord_1 = geometry->node[Point_1]->GetCoord();
      Coord_2 = geometry->node[Point_2]->GetCoord();
      
      numerics->SetCoord(Coord_0, Coord_1, Coord_2);
      numerics->ComputeResidual(StiffMatrix_Elem, config);
      AddStiffMatrix(StiffMatrix_Elem, Point_0, Point_1, Point_2, Point_3);
    }
  }
  
  if (nDim == 3 ) {
    
    for (iElem = 0; iElem < geometry->GetnElem(); iElem++) {
      
      Point_0 = geometry->elem[iElem]->GetNode(0);   Coord_0 = geometry->node[Point_0]->GetCoord();
      Point_1 = geometry->elem[iElem]->GetNode(1);  Coord_1 = geometry->node[Point_1]->GetCoord();
      Point_2 = geometry->elem[iElem]->GetNode(2);   Coord_2 = geometry->node[Point_2]->GetCoord();
      Point_3 = geometry->elem[iElem]->GetNode(3);  Coord_3 = geometry->node[Point_3]->GetCoord();
      
      numerics->SetCoord(Coord_0, Coord_1, Coord_2, Coord_3);
      numerics->ComputeResidual(StiffMatrix_Elem, config);
      AddStiffMatrix(StiffMatrix_Elem, Point_0, Point_1, Point_2, Point_3);
      
    }
  }
}
Exemplo n.º 2
0
/*!
 * \method Galerkin_Method
 * \brief calculate the element stiffness matrix
 * \author A. Lonkar
 */
void CElectricSolver::Galerkin_Method(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics,
		CConfig *config, unsigned short iMesh) {

	unsigned long iElem, Point_0 = 0, Point_1 = 0, Point_2 = 0, Point_3 = 0;
	double *Coord_0 = NULL, *Coord_1= NULL, *Coord_2= NULL, *Coord_3 = NULL;
	if (nDim == 2 ) {
		for (iElem = 0; iElem < geometry->GetnElem(); iElem++) {

			Point_0 = geometry->elem[iElem]->GetNode(0);
			Point_1 = geometry->elem[iElem]->GetNode(1);
			Point_2 = geometry->elem[iElem]->GetNode(2);

			Coord_0 = geometry->node[Point_0]->GetCoord();
			Coord_1 = geometry->node[Point_1]->GetCoord();
			Coord_2 = geometry->node[Point_2]->GetCoord();

			numerics->SetCoord(Coord_0, Coord_1, Coord_2);
			numerics->ComputeResidual(StiffMatrix_Elem, config);
			AddStiffMatrix(StiffMatrix_Elem, Point_0, Point_1, Point_2, Point_3);
		}

		for (iElem = 0; iElem < geometry->GetnElem(); iElem++) {
			if (geometry->elem[iElem]->GetVTK_Type() == RECTANGLE) {

				Point_0 = geometry->elem[iElem]->GetNode(3);
				Point_1 = geometry->elem[iElem]->GetNode(0);
				Point_2 = geometry->elem[iElem]->GetNode(2);

				Coord_0 = geometry->node[Point_0]->GetCoord();
				Coord_1 = geometry->node[Point_1]->GetCoord();
				Coord_2 = geometry->node[Point_2]->GetCoord();

				numerics->SetCoord(Coord_0, Coord_1, Coord_2);
				numerics->ComputeResidual(StiffMatrix_Elem, config);
				AddStiffMatrix(StiffMatrix_Elem,Point_0, Point_1, Point_2, Point_3);
			}
		}
	}

	if (nDim == 3 ) {

		for (iElem = 0; iElem < geometry->GetnElem(); iElem++) {

			if (geometry->elem[iElem]->GetVTK_Type() == TETRAHEDRON) {

				Point_0 = geometry->elem[iElem]->GetNode(0); 	Coord_0 = geometry->node[Point_0]->GetCoord();
				Point_1 = geometry->elem[iElem]->GetNode(1);	Coord_1 = geometry->node[Point_1]->GetCoord();
				Point_2 = geometry->elem[iElem]->GetNode(2); 	Coord_2 = geometry->node[Point_2]->GetCoord();
				Point_3 = geometry->elem[iElem]->GetNode(3);	Coord_3 = geometry->node[Point_3]->GetCoord();

				numerics->SetCoord(Coord_0, Coord_1, Coord_2, Coord_3);
				numerics->ComputeResidual(StiffMatrix_Elem, config);
				AddStiffMatrix(StiffMatrix_Elem, Point_0, Point_1, Point_2, Point_3);
			}

			if (geometry->elem[iElem]->GetVTK_Type() == HEXAHEDRON) {

				/* Tetrahedron: 1, nodes: [0,2,3,6] */
				Point_0 = geometry->elem[iElem]->GetNode(0); 	Coord_0 = geometry->node[Point_0]->GetCoord();
				Point_1 = geometry->elem[iElem]->GetNode(2);	Coord_1 = geometry->node[Point_1]->GetCoord();
				Point_2 = geometry->elem[iElem]->GetNode(3); 	Coord_2 = geometry->node[Point_2]->GetCoord();
				Point_3 = geometry->elem[iElem]->GetNode(6);	Coord_3 = geometry->node[Point_3]->GetCoord();

				numerics->SetCoord(Coord_0, Coord_1, Coord_2, Coord_3);
				numerics->ComputeResidual(StiffMatrix_Elem, config);
				AddStiffMatrix(StiffMatrix_Elem, Point_0, Point_1, Point_2, Point_3);
				/******************/

				/* Tetrahedron: 2, nodes: [0,3,7,6]  */
				Point_0 = geometry->elem[iElem]->GetNode(0); 	Coord_0 = geometry->node[Point_0]->GetCoord();
				Point_1 = geometry->elem[iElem]->GetNode(3);	Coord_1 = geometry->node[Point_1]->GetCoord();
				Point_2 = geometry->elem[iElem]->GetNode(7); 	Coord_2 = geometry->node[Point_2]->GetCoord();
				Point_3 = geometry->elem[iElem]->GetNode(6);	Coord_3 = geometry->node[Point_3]->GetCoord();

				numerics->SetCoord(Coord_0, Coord_1, Coord_2, Coord_3);
				numerics->ComputeResidual(StiffMatrix_Elem, config);
				AddStiffMatrix(StiffMatrix_Elem, Point_0, Point_1, Point_2, Point_3);
				/******************/

				/* Tetrahedron: 3, nodes: [0,7,4, 6]  */
				Point_0 = geometry->elem[iElem]->GetNode(0); 	Coord_0 = geometry->node[Point_0]->GetCoord();
				Point_1 = geometry->elem[iElem]->GetNode(7);	Coord_1 = geometry->node[Point_1]->GetCoord();
				Point_2 = geometry->elem[iElem]->GetNode(4); 	Coord_2 = geometry->node[Point_2]->GetCoord();
				Point_3 = geometry->elem[iElem]->GetNode(6);	Coord_3 = geometry->node[Point_3]->GetCoord();

				numerics->SetCoord(Coord_0, Coord_1, Coord_2, Coord_3);
				numerics->ComputeResidual(StiffMatrix_Elem, config);
				AddStiffMatrix(StiffMatrix_Elem, Point_0, Point_1, Point_2, Point_3);
				/******************/

				/* Tetrahedron: 4, nodes: [0,5,6,4]  */
				Point_0 = geometry->elem[iElem]->GetNode(0); 	Coord_0 = geometry->node[Point_0]->GetCoord();
				Point_1 = geometry->elem[iElem]->GetNode(5);	Coord_1 = geometry->node[Point_1]->GetCoord();
				Point_2 = geometry->elem[iElem]->GetNode(6); 	Coord_2 = geometry->node[Point_2]->GetCoord();
				Point_3 = geometry->elem[iElem]->GetNode(4);	Coord_3 = geometry->node[Point_3]->GetCoord();

				numerics->SetCoord(Coord_0, Coord_1, Coord_2, Coord_3);
				numerics->ComputeResidual(StiffMatrix_Elem, config);
				AddStiffMatrix(StiffMatrix_Elem, Point_0, Point_1, Point_2, Point_3);
				/******************/

				/* Tetrahedron: 5, nodes: [1,5,6,0]  */
				Point_0 = geometry->elem[iElem]->GetNode(1); 	Coord_0 = geometry->node[Point_0]->GetCoord();
				Point_1 = geometry->elem[iElem]->GetNode(5);	Coord_1 = geometry->node[Point_1]->GetCoord();
				Point_2 = geometry->elem[iElem]->GetNode(6); 	Coord_2 = geometry->node[Point_2]->GetCoord();
				Point_3 = geometry->elem[iElem]->GetNode(0);	Coord_3 = geometry->node[Point_3]->GetCoord();

				numerics->SetCoord(Coord_0, Coord_1, Coord_2, Coord_3);
				numerics->ComputeResidual(StiffMatrix_Elem, config);
				AddStiffMatrix(StiffMatrix_Elem, Point_0, Point_1, Point_2, Point_3);
				/******************/

				/* Tetrahedron: 6, nodes: [1,6,2,0]  */
				Point_0 = geometry->elem[iElem]->GetNode(1); 	Coord_0 = geometry->node[Point_0]->GetCoord();
				Point_1 = geometry->elem[iElem]->GetNode(6);	Coord_1 = geometry->node[Point_1]->GetCoord();
				Point_2 = geometry->elem[iElem]->GetNode(2); 	Coord_2 = geometry->node[Point_2]->GetCoord();
				Point_3 = geometry->elem[iElem]->GetNode(0);	Coord_3 = geometry->node[Point_3]->GetCoord();

				numerics->SetCoord(Coord_0, Coord_1, Coord_2, Coord_3);
				numerics->ComputeResidual(StiffMatrix_Elem, config);
				AddStiffMatrix(StiffMatrix_Elem, Point_0, Point_1, Point_2, Point_3);
				/******************/
			}

		}
	}
}