get_current Subroutine

public subroutine get_current(w, ixImin1, ixImin2, ixImin3, ixImax1, ixImax2, ixImax3, ixOmin1, ixOmin2, ixOmin3, ixOmax1, ixOmax2, ixOmax3, idirmin, current, fourthorder)

Uses

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

Compute the current density j = curl(B)

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
integer, intent(out) :: idirmin
double precision, intent(inout) :: current(ixImin1:ixImax1,ixImin2:ixImax2,ixImin3:ixImax3,7-2*ndir:3)
logical, intent(in), optional :: fourthorder

Calls

proc~~get_current~~CallsGraph proc~get_current get_current mag mag proc~get_current->mag proc~curlvector curlvector proc~get_current->proc~curlvector proc~mpistop mpistop proc~get_current->proc~mpistop proc~curlvector->proc~mpistop dcos dcos proc~curlvector->dcos dsin dsin proc~curlvector->dsin mpi_abort mpi_abort proc~mpistop->mpi_abort

Source Code

  subroutine get_current(w, ixImin1, ixImin2, ixImin3, ixImax1, ixImax2, ixImax3, &
                         ixOmin1, ixOmin2, ixOmin3, ixOmax1, ixOmax2, ixOmax3, &
                         idirmin, current, fourthorder)
    use mod_global_parameters
    use mod_geometry, only: curlvector
    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)
    integer, intent(out)            :: idirmin
    double precision, intent(inout) :: current(ixImin1:ixImax1,ixImin2:ixImax2,ixImin3:ixImax3,7-2*ndir:3)
    logical, intent(in), optional   :: fourthorder
    !> Default: false

    double precision :: qvec(ixImin1:ixImax1,ixImin2:ixImax2,ixImin3:ixImax3,1:ndir)

    if (B0field) then
      call mpistop("get_current is not implemented for B0field")
    else
      qvec(ixImin1:ixImax1,ixImin2:ixImax2,ixImin3:ixImax3,1:ndir) = &
          w(ixImin1:ixImax1,ixImin2:ixImax2,ixImin3:ixImax3,mag(1:ndir))

      call curlvector(qvec, ixImin1, ixImin2, ixImin3, ixImax1, ixImax2, ixImax3, &
                      ixOmin1, ixOmin2, ixOmin3, ixOmax1, ixOmax2, ixOmax3, &
                      current, idirmin, 7-2*ndir, ndir, fourthorder)
    end if

  end subroutine get_current