get_divb Subroutine

public subroutine get_divb(w, ixImin1, ixImin2, ixImin3, ixImax1, ixImax2, ixImax3, ixOmin1, ixOmin2, ixOmin3, ixOmax1, ixOmax2, ixOmax3, divb, fourthorder)

Uses

  • proc~~get_divb~~UsesGraph proc~get_divb get_divb mod_physics mod_physics proc~get_divb->mod_physics module~mod_comm_lib mod_comm_lib proc~get_divb->module~mod_comm_lib module~mod_geometry mod_geometry proc~get_divb->module~mod_geometry module~mod_global_parameters mod_global_parameters proc~get_divb->module~mod_global_parameters module~mod_geometry->module~mod_comm_lib 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

Calculate div B within ixO

Arguments

Type IntentOptional Attributes Name
double precision, intent(in) :: w(ixImin1:ixImax1,ixImin2:ixImax2,ixImin3:ixImax3,1:nw)
integer, intent(in) :: ixImin1
integer, intent(in) :: ixImin2
integer, intent(in) :: ixImin3
integer, intent(in) :: ixImax1
integer, intent(in) :: ixImax2
integer, intent(in) :: ixImax3
integer, intent(in) :: ixOmin1
integer, intent(in) :: ixOmin2
integer, intent(in) :: ixOmin3
integer, intent(in) :: ixOmax1
integer, intent(in) :: ixOmax2
integer, intent(in) :: ixOmax3
double precision, intent(inout) :: divb(ixImin1:ixImax1,ixImin2:ixImax2,ixImin3:ixImax3)
logical, intent(in), optional :: fourthorder

Calls

proc~~get_divb~~CallsGraph proc~get_divb get_divb mag mag proc~get_divb->mag proc~divvector divvector proc~get_divb->proc~divvector proc~divvectors divvectorS proc~get_divb->proc~divvectors proc~mpistop mpistop proc~get_divb->proc~mpistop proc~divvector->proc~mpistop proc~divvectors->proc~mpistop proc~dwlimiter2 dwlimiter2 proc~divvectors->proc~dwlimiter2 mpi_abort mpi_abort proc~mpistop->mpi_abort proc~dwlimiter2->proc~mpistop

Source Code

  subroutine get_divb(w,ixImin1,ixImin2,ixImin3,ixImax1,ixImax2,ixImax3,&
     ixOmin1,ixOmin2,ixOmin3,ixOmax1,ixOmax2,ixOmax3,divb, fourthorder)
    use mod_global_parameters
    use mod_geometry
    use mod_physics, only: mag
    use mod_comm_lib, only: mpistop

    integer, intent(in)             :: ixImin1,ixImin2,ixImin3,ixImax1,ixImax2,&
       ixImax3, ixOmin1,ixOmin2,ixOmin3,ixOmax1,ixOmax2,ixOmax3
    double precision, intent(in)    :: w(ixImin1:ixImax1,ixImin2:ixImax2,&
       ixImin3:ixImax3,1:nw)
    double precision, intent(inout) :: divb(ixImin1:ixImax1,ixImin2:ixImax2,&
       ixImin3:ixImax3)
    logical, intent(in), optional   :: fourthorder

    integer                            :: ixCmin1,ixCmin2,ixCmin3,ixCmax1,&
       ixCmax2,ixCmax3, idir

    if(stagger_grid) then
      divb(ixOmin1:ixOmax1,ixOmin2:ixOmax2,ixOmin3:ixOmax3)=0.d0
      do idir=1,ndim
        ixCmin1=ixOmin1-kr(idir,1);ixCmin2=ixOmin2-kr(idir,2)
        ixCmin3=ixOmin3-kr(idir,3);ixCmax1=ixOmax1-kr(idir,1)
        ixCmax2=ixOmax2-kr(idir,2);ixCmax3=ixOmax3-kr(idir,3);
        divb(ixOmin1:ixOmax1,ixOmin2:ixOmax2,&
           ixOmin3:ixOmax3)=divb(ixOmin1:ixOmax1,ixOmin2:ixOmax2,&
           ixOmin3:ixOmax3)+block%ws(ixOmin1:ixOmax1,ixOmin2:ixOmax2,&
           ixOmin3:ixOmax3,idir)*block%surfaceC(ixOmin1:ixOmax1,&
           ixOmin2:ixOmax2,ixOmin3:ixOmax3,idir)-block%ws(ixCmin1:ixCmax1,&
           ixCmin2:ixCmax2,ixCmin3:ixCmax3,&
           idir)*block%surfaceC(ixCmin1:ixCmax1,ixCmin2:ixCmax2,&
           ixCmin3:ixCmax3,idir)
      end do
      divb(ixOmin1:ixOmax1,ixOmin2:ixOmax2,&
         ixOmin3:ixOmax3)=divb(ixOmin1:ixOmax1,ixOmin2:ixOmax2,&
         ixOmin3:ixOmax3)/block%dvolume(ixOmin1:ixOmax1,ixOmin2:ixOmax2,&
         ixOmin3:ixOmax3)
    else
      select case(typediv)
      case("central")
        call divvector(w(ixImin1:ixImax1,ixImin2:ixImax2,ixImin3:ixImax3,&
           mag(1:ndir)),ixImin1,ixImin2,ixImin3,ixImax1,ixImax2,ixImax3,&
           ixOmin1,ixOmin2,ixOmin3,ixOmax1,ixOmax2,ixOmax3,divb,fourthorder)
      case("limited")
        call divvectorS(w(ixImin1:ixImax1,ixImin2:ixImax2,ixImin3:ixImax3,&
           mag(1:ndir)),ixImin1,ixImin2,ixImin3,ixImax1,ixImax2,ixImax3,&
           ixOmin1,ixOmin2,ixOmin3,ixOmax1,ixOmax2,ixOmax3,divb)
      case default
        call mpistop("unknown typediv")
      end select
    end if

  end subroutine get_divb