correct_face_flux Subroutine

private subroutine correct_face_flux(mesh, flow, bc, params, transport, predicted_flux, phi, face_flux)

Corrects face fluxes using the pressure potential gradient.

Arguments

Type IntentOptional Attributes Name
type(mesh_t), intent(in) :: mesh
type(flow_mpi_t), intent(in) :: flow
type(bc_set_t), intent(in) :: bc
type(case_params_t), intent(in) :: params
type(transport_properties_t), intent(in) :: transport
real(kind=rk), intent(in) :: predicted_flux(:)
real(kind=rk), intent(in) :: phi(:)
real(kind=rk), intent(out) :: face_flux(:)

Source Code

   subroutine correct_face_flux(mesh, flow, bc, params, transport, predicted_flux, phi, face_flux)
      type(mesh_t), intent(in) :: mesh
      type(flow_mpi_t), intent(in) :: flow
      type(bc_set_t), intent(in) :: bc
      type(case_params_t), intent(in) :: params
      type(transport_properties_t), intent(in) :: transport
      real(rk), intent(in) :: predicted_flux(:)
      real(rk), intent(in) :: phi(:)
      real(rk), intent(out) :: face_flux(:)

      integer :: i, f, owner, nb
      real(rk) :: dist, beta_face

      face_flux = zero

      do i = 1, size(flow%owned_faces)
         f = flow%owned_faces(i)
         owner = mesh%faces(f)%owner

         nb = face_effective_neighbor(mesh, bc, f, owner)

         face_flux(f) = predicted_flux(f)

         if (nb > 0) then
            dist = face_normal_distance(mesh, bc, f, owner, nb)

            if (params%enable_variable_density) then
               beta_face = pressure_face_inverse_density(transport, owner, nb)
               face_flux(f) = predicted_flux(f) - params%dt * beta_face * &
                               mesh%faces(f)%area * (phi(nb) - phi(owner)) / dist
            else
               face_flux(f) = predicted_flux(f) - params%dt / params%rho * &
                               mesh%faces(f)%area * (phi(nb) - phi(owner)) / dist
            end if
         else
            if (boundary_pressure_type(mesh, bc, f) == bc_dirichlet) then
               dist = face_normal_distance(mesh, bc, f, owner, 0)
               if (params%enable_variable_density) then
                  beta_face = pressure_face_inverse_density(transport, owner, 0)
                  face_flux(f) = predicted_flux(f) - params%dt * beta_face * &
                                  mesh%faces(f)%area * (zero - phi(owner)) / dist
               else
                  face_flux(f) = predicted_flux(f) - params%dt / params%rho * &
                                  mesh%faces(f)%area * (zero - phi(owner)) / dist
               end if
            end if
         end if
      end do
   end subroutine correct_face_flux