SourceProlongSolution Subroutine

public subroutine SourceProlongSolution(source_zone, mesh, eSides)

Uses

    • ElementClass

$omp& t)

Arguments

Type IntentOptional Attributes Name
class(Zone_t), intent(in) :: source_zone
class(HexMesh), intent(inout), target :: mesh
integer, intent(in), dimension(:) :: eSides

Source Code

   Subroutine SourceProlongSolution(source_zone, mesh, eSides)

!     *******************************************************************
!        This subroutine prolong the solution from the mesh storage to the faces (source).
!         TODO: use openmp (commented)
!         TODO: use mpi (see surface integral)
!     *******************************************************************
!
      use ElementClass
      implicit none
      class (Zone_t), intent(in)                           :: source_zone
      class (HexMesh), intent(inout), target               :: mesh
      integer, dimension(:), intent(in)                    :: eSides

      ! local variables
      integer                                              :: zoneFaceID, meshFaceID, eID
      integer, dimension(6)                                :: meshFaceIDs
      class(Element), pointer                              :: elements(:)

!     *************************
!     Perform the interpolation
!     *************************
!
      elements => mesh % elements
!$omp parallel private(meshFaceID,eID,meshFaceIDs) shared(elements,mesh,NodalStorage)
!!$omp&                                        t)
!$omp single

!        Loop the zone to get faces and elements
!        ---------------------------------------
      do zoneFaceID = 1, source_zone % no_of_faces
          meshFaceID = source_zone % faces(zoneFaceID)

         eID = mesh % faces(meshFaceID) % elementIDs(eSides(zoneFaceID))
         meshFaceIDs = mesh % elements(eID) % faceIDs

!$omp task depend(inout:elements(eID))
         call elements(eID) % ProlongSolutionToFaces(NCONS,&
                                                            mesh % faces(meshFaceIDs(1)),&
                                                            mesh % faces(meshFaceIDs(2)),&
                                                            mesh % faces(meshFaceIDs(3)),&
                                                            mesh % faces(meshFaceIDs(4)),&
                                                            mesh % faces(meshFaceIDs(5)),&
                                                            mesh % faces(meshFaceIDs(6)),&
                                                             computeQdot = .TRUE.)

         ! if ( computeGradients ) then
         !    call elements(eID) % ProlongGradientsToFaces(NGRAD, mesh % faces(meshFaceIDs(1)),&
         !                                     mesh % faces(meshFaceIDs(2)),&
         !                                     mesh % faces(meshFaceIDs(3)),&
         !                                     mesh % faces(meshFaceIDs(4)),&
         !                                     mesh % faces(meshFaceIDs(5)),&
         !                                     mesh % faces(meshFaceIDs(6)) )
         ! end if
!$omp end task
      end do
!$omp end single
!$omp end parallel

   End Subroutine SourceProlongSolution