set_B0_cell Subroutine

private subroutine set_B0_cell(wB0, x, ixImin1, ixImin2, ixImin3, ixImax1, ixImax2, ixImax3, ixmin1, ixmin2, ixmin3, ixmax1, ixmax2, ixmax3)

Uses

  • proc~~set_b0_cell~~UsesGraph proc~set_b0_cell set_B0_cell module~mod_geometry mod_geometry proc~set_b0_cell->module~mod_geometry module~mod_global_parameters mod_global_parameters proc~set_b0_cell->module~mod_global_parameters module~mod_usr_methods mod_usr_methods proc~set_b0_cell->module~mod_usr_methods module~mod_comm_lib mod_comm_lib 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

Arguments

Type IntentOptional Attributes Name
double precision, intent(inout) :: wB0(ixImin1:ixImax1,ixImin2:ixImax2,ixImin3:ixImax3,1:ndir)
double precision, intent(in) :: x(ixImin1:ixImax1,ixImin2:ixImax2,ixImin3:ixImax3,1:ndim)
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) :: ixmin1
integer, intent(in) :: ixmin2
integer, intent(in) :: ixmin3
integer, intent(in) :: ixmax1
integer, intent(in) :: ixmax2
integer, intent(in) :: ixmax3

Calls

proc~~set_b0_cell~~CallsGraph proc~set_b0_cell set_B0_cell dcos dcos proc~set_b0_cell->dcos dsin dsin proc~set_b0_cell->dsin

Called by

proc~~set_b0_cell~~CalledByGraph proc~set_b0_cell set_B0_cell proc~set_b0_face set_B0_face proc~set_b0_face->proc~set_b0_cell proc~set_b0_grid set_B0_grid proc~set_b0_grid->proc~set_b0_cell proc~set_b0_grid->proc~set_b0_face proc~alloc_node alloc_node proc~alloc_node->proc~set_b0_grid proc~alloc_node~2 alloc_node proc~alloc_node~2->proc~set_b0_grid proc~alloc_node~3 alloc_node proc~alloc_node~3->proc~set_b0_grid proc~alloc_node~4 alloc_node proc~alloc_node~4->proc~set_b0_grid

Source Code

  subroutine set_B0_cell(wB0,x,ixImin1,ixImin2,ixImin3,ixImax1,ixImax2,ixImax3,&
     ixmin1,ixmin2,ixmin3,ixmax1,ixmax2,ixmax3)
    use mod_usr_methods, only: usr_set_B0
    use mod_global_parameters
    use mod_geometry
    
    integer, intent(in):: ixImin1,ixImin2,ixImin3,ixImax1,ixImax2,ixImax3,&
       ixmin1,ixmin2,ixmin3,ixmax1,ixmax2,ixmax3
    double precision, intent(inout) :: wB0(ixImin1:ixImax1,ixImin2:ixImax2,&
       ixImin3:ixImax3,1:ndir)
    double precision, intent(in) :: x(ixImin1:ixImax1,ixImin2:ixImax2,&
       ixImin3:ixImax3,1:ndim)
  
    wB0(ixmin1:ixmax1,ixmin2:ixmax2,ixmin3:ixmax3,1:ndir)=zero
  
    ! approximate cell-averaged B0 as cell-centered B0
    select case (coordinate)
    case (spherical)
       
       if (dabs(Bdip)>smalldouble) then
          wB0(ixmin1:ixmax1,ixmin2:ixmax2,ixmin3:ixmax3,&
             1)=2.0d0*Bdip*dcos(x(ixmin1:ixmax1,ixmin2:ixmax2,ixmin3:ixmax3,&
             2))/x(ixmin1:ixmax1,ixmin2:ixmax2,ixmin3:ixmax3,1)**3
          wB0(ixmin1:ixmax1,ixmin2:ixmax2,ixmin3:ixmax3,&
             2)=Bdip*dsin(x(ixmin1:ixmax1,ixmin2:ixmax2,ixmin3:ixmax3,&
             2))/x(ixmin1:ixmax1,ixmin2:ixmax2,ixmin3:ixmax3,1)**3
       end if
    
       if (abs(Bquad)>smalldouble) then
          wB0(ixmin1:ixmax1,ixmin2:ixmax2,ixmin3:ixmax3,1)=wB0(ixmin1:ixmax1,&
             ixmin2:ixmax2,ixmin3:ixmax3,&
             1) +Bquad*0.5d0*(1.0d0+3.0d0*dcos(2.0d0*x(ixmin1:ixmax1,&
             ixmin2:ixmax2,ixmin3:ixmax3,2)))/x(ixmin1:ixmax1,ixmin2:ixmax2,&
             ixmin3:ixmax3,1)**4
          wB0(ixmin1:ixmax1,ixmin2:ixmax2,ixmin3:ixmax3,2)=wB0(ixmin1:ixmax1,&
             ixmin2:ixmax2,ixmin3:ixmax3,2)+Bquad*dsin(2.0d0*x(ixmin1:ixmax1,&
             ixmin2:ixmax2,ixmin3:ixmax3,2))/x(ixmin1:ixmax1,ixmin2:ixmax2,&
             ixmin3:ixmax3,1)**4
       end if
       if (abs(Boct)>smalldouble) then
          wB0(ixmin1:ixmax1,ixmin2:ixmax2,ixmin3:ixmax3,1)=wB0(ixmin1:ixmax1,&
             ixmin2:ixmax2,ixmin3:ixmax3,&
             1) +Boct*(10.0d0*dcos(2.0d0*x(ixmin1:ixmax1,ixmin2:ixmax2,&
             ixmin3:ixmax3,2))-2.0d0) *dcos(x(ixmin1:ixmax1,ixmin2:ixmax2,&
             ixmin3:ixmax3,2))/x(ixmin1:ixmax1,ixmin2:ixmax2,ixmin3:ixmax3,&
             1)**5
          wB0(ixmin1:ixmax1,ixmin2:ixmax2,ixmin3:ixmax3,2)=wB0(ixmin1:ixmax1,&
             ixmin2:ixmax2,ixmin3:ixmax3,&
             2) +Boct*1.5d0*(3.0d0+5.0d0*dcos(2.0d0*x(ixmin1:ixmax1,&
             ixmin2:ixmax2,ixmin3:ixmax3,2))) *dsin(x(ixmin1:ixmax1,&
             ixmin2:ixmax2,ixmin3:ixmax3,2))/x(ixmin1:ixmax1,ixmin2:ixmax2,&
             ixmin3:ixmax3,1)**5
       end if
      
    end select
    
    if (associated(usr_set_B0)) call usr_set_B0(ixImin1,ixImin2,ixImin3,&
       ixImax1,ixImax2,ixImax3,ixmin1,ixmin2,ixmin3,ixmax1,ixmax2,ixmax3,x,&
       wB0)
  
  end subroutine set_B0_cell