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