addsource_local Subroutine

private subroutine addsource_local(qdt, dtfactor, qtC, wCT, wCTprim, qt, wnew, x, dr, qsourcesplit)

Uses

  • proc~~addsource_local~7~~UsesGraph proc~addsource_local~7 addsource_local mod_radiative_cooling mod_radiative_cooling proc~addsource_local~7->mod_radiative_cooling mod_usr mod_usr proc~addsource_local~7->mod_usr module~mod_global_parameters mod_global_parameters proc~addsource_local~7->module~mod_global_parameters module~mod_basic_types mod_basic_types module~mod_global_parameters->module~mod_basic_types module~mod_connectivity mod_connectivity module~mod_global_parameters->module~mod_connectivity module~mod_constants mod_constants module~mod_global_parameters->module~mod_constants module~mod_physicaldata mod_physicaldata module~mod_global_parameters->module~mod_physicaldata module~mod_variables mod_variables module~mod_global_parameters->module~mod_variables mpi mpi module~mod_global_parameters->mpi module~mod_variables->module~mod_basic_types

Arguments

Type IntentOptional Attributes Name
real(kind=dp), intent(in) :: qdt
real(kind=dp), intent(in) :: dtfactor
real(kind=dp), intent(in) :: qtC
real(kind=dp), intent(in) :: wCT(nw_phys)
real(kind=dp), intent(in) :: wCTprim(nw_phys)
real(kind=dp), intent(in) :: qt
real(kind=dp), intent(inout) :: wnew(nw_phys)
real(kind=dp), intent(in) :: x(1:ndim)
real(kind=dp), intent(in) :: dr(ndim)
logical, intent(in) :: qsourcesplit

Calls

proc~~addsource_local~7~~CallsGraph proc~addsource_local~7 addsource_local addsource_usr addsource_usr proc~addsource_local~7->addsource_usr dexp dexp proc~addsource_local~7->dexp gravity_field gravity_field proc~addsource_local~7->gravity_field radiative_cooling_add_source radiative_cooling_add_source proc~addsource_local~7->radiative_cooling_add_source

Called by

proc~~addsource_local~7~~CalledByGraph proc~addsource_local~7 addsource_local proc~finite_volume_local_muscl_hllc~3 finite_volume_local_muscl_hllc proc~finite_volume_local_muscl_hllc~3->proc~addsource_local~7 proc~finite_volume_local_muscl_hll~3 finite_volume_local_muscl_hll proc~finite_volume_local_muscl_hll~3->proc~addsource_local~7 proc~finite_volume_local_muscl_llf~3 finite_volume_local_muscl_llf proc~finite_volume_local_muscl_llf~3->proc~addsource_local~7 proc~finite_volume_local~3 finite_volume_local proc~finite_volume_local~3->proc~finite_volume_local_muscl_hllc~3 proc~finite_volume_local~3->proc~finite_volume_local_muscl_hll~3 proc~finite_volume_local~3->proc~finite_volume_local_muscl_llf~3

Source Code

subroutine addsource_local(qdt, dtfactor, qtC, wCT, wCTprim, qt, wnew, x, dr, &
    qsourcesplit)
  use mod_usr, only: addsource_usr
  use mod_usr, only: gravity_field
  use mod_radiative_cooling, only: rc_fl, radiative_cooling_add_source
  use mod_global_parameters, only:cmax_global
  
  real(dp), intent(in)     :: qdt, dtfactor, qtC, qt
  real(dp), intent(in)     :: wCT(nw_phys), wCTprim(nw_phys)
  real(dp), intent(in)     :: x(1:ndim), dr(ndim)
  real(dp), intent(inout)  :: wnew(nw_phys)
  logical, intent(in)      :: qsourcesplit
  ! .. local ..
  integer                  :: idim
  real(dp)                 :: field

  if (.not. qsourcesplit) then 
     !---------------------------------
     ! unsplit sources
     !---------------------------------

     do idim = 1, ndim
        field = gravity_field(wCT, x, idim)
        wnew(iw_mom(idim)) = wnew(iw_mom(idim)) + qdt * field * wCT(iw_rho)
        wnew(iw_e)         = wnew(iw_e) + qdt * field * wCT(iw_mom(idim))
     end do

     call radiative_cooling_add_source(qdt,wCT,wCTprim,wnew,x)

     call addsource_usr(qdt, qt, wCT, wCTprim, wnew, x, .false.)

     
  else
     !---------------------------------
     ! split sources     
     !---------------------------------
     
     wnew(psi_)=wnew(psi_)*dexp(-qdt*cmax_global*mhd_glm_alpha/minval(dr))
     
  end if

end subroutine addsource_local