MPI-AMRVAC 3.1
The MPI - Adaptive Mesh Refinement - Versatile Advection Code (development version)
Loading...
Searching...
No Matches
mod_dipole.t
Go to the documentation of this file.
1!> sets up a magnetic dipole in a 3D cartesian box
2! parameters for dipole moment:
3! strength mu_dipole (factor 4pi included)
4! polar angle in degrees theta_dipole [0 to 90]
5! azimuthal angle in degrees phi_dipole [0 to 360]
6! center of dipole at x1_dip, x2_dip, x3_dip
8 implicit none
10 double precision :: mx, my, mz
11
12contains
13
14{^ifthreed
15 subroutine dipole(ixI^L,ixO^L,x,B)
17 use mod_comm_lib, only: mpistop
18
19 integer, intent(in) :: ixI^L, ixO^L
20 double precision, intent(in) :: x(ixI^S,1:ndim)
21 double precision, intent(inout) :: B(ixI^S,1:ndir)
22
23 double precision :: xsincos(ixI^S),xsinsin(ixI^S),xcos(ixI^S)
24 double precision :: rr0(ixI^S),mdotr(ixI^S)
25
26 b=0.0d0
27 mx=mu_dipole*dsin(theta_dipole*dpi/180.0d0)*dcos(phi_dipole*dpi/180.d0)
28 my=mu_dipole*dsin(theta_dipole*dpi/180.0d0)*dsin(phi_dipole*dpi/180.0d0)
29 mz=mu_dipole*dcos(theta_dipole*dpi/180.0d0)
30 rr0(ixo^s)=dsqrt((x(ixo^s,1)-x1_dip)**2 &
31 +(x(ixo^s,2)-x2_dip)**2 &
32 +(x(ixo^s,3)-x3_dip)**2)
33 if(any(rr0(ixo^s)<smalldouble)) call mpistop("dipole center at cell center")
34 !where(rr0(ixO^S)<smalldouble)
35 ! rr0(ixO^S)=bigdouble
36 !endwhere
37 xsincos(ixo^s)=(x(ixo^s,1)-x1_dip)/rr0(ixo^s)
38 xsinsin(ixo^s)=(x(ixo^s,2)-x2_dip)/rr0(ixo^s)
39 xcos(ixo^s) =(x(ixo^s,3)-x3_dip)/rr0(ixo^s)
40 mdotr(ixo^s)=mx*xsincos(ixo^s)+my*xsinsin(ixo^s)+mz*xcos(ixo^s)
41 b(ixo^s,1)=(3.0d0*xsincos(ixo^s)*mdotr(ixo^s)-mx)/rr0(ixo^s)**3
42 b(ixo^s,2)=(3.0d0*xsinsin(ixo^s)*mdotr(ixo^s)-my)/rr0(ixo^s)**3
43 b(ixo^s,3)=(3.0d0*xcos(ixo^s) *mdotr(ixo^s)-mz)/rr0(ixo^s)**3
44
45 end subroutine dipole
46}
47end module mod_dipole
subroutine, public mpistop(message)
Exit MPI-AMRVAC with an error message.
sets up a magnetic dipole in a 3D cartesian box
Definition mod_dipole.t:7
double precision x1_dip
Definition mod_dipole.t:9
double precision mz
Definition mod_dipole.t:10
double precision x3_dip
Definition mod_dipole.t:9
double precision my
Definition mod_dipole.t:10
double precision mx
Definition mod_dipole.t:10
subroutine dipole(ixil, ixol, x, b)
Definition mod_dipole.t:16
double precision phi_dipole
Definition mod_dipole.t:9
double precision mu_dipole
Definition mod_dipole.t:9
double precision x2_dip
Definition mod_dipole.t:9
double precision theta_dipole
Definition mod_dipole.t:9
This module contains definitions of global parameters and variables and some generic functions/subrou...