aboutsummaryrefslogtreecommitdiff
path: root/src/GRHydro_AlfvenWaveM.F90
diff options
context:
space:
mode:
Diffstat (limited to 'src/GRHydro_AlfvenWaveM.F90')
-rw-r--r--src/GRHydro_AlfvenWaveM.F90178
1 files changed, 178 insertions, 0 deletions
diff --git a/src/GRHydro_AlfvenWaveM.F90 b/src/GRHydro_AlfvenWaveM.F90
new file mode 100644
index 0000000..8ed68c2
--- /dev/null
+++ b/src/GRHydro_AlfvenWaveM.F90
@@ -0,0 +1,178 @@
+ /*@@
+ @file GRHydro_AlfvenWaveM.F90
+ @date Oct 10, 2011
+ @author Bruno Mundim, Joshua Faber, Scott Noble
+ @desc
+ Circularly Polarized Alfven Wave test as implemented by
+ Beckwith and Stone Astrophys.J.Suppl. 193 (2011) 6, arXiv:1101.3573,
+ and Del Zanna et. al. A&A 473, 11 (2007), arXiv:0704.3206;
+
+ Other relevant references:
+ Stone et. al. Astrophys.J.Suppl. 178 (2008) 137, arXiv:0804.0402;
+ Gardiner and Stone JCP 227, 4123 (2008), arXiv:0712.2634;
+ Toth JCP 161, 605 (2000);
+ @enddesc
+ @@*/
+
+#include "cctk.h"
+#include "cctk_Parameters.h"
+#include "cctk_Arguments.h"
+#include "cctk_Functions.h"
+#include "GRHydro_Macros.h"
+
+#define velx(i,j,k) vel(i,j,k,1)
+#define vely(i,j,k) vel(i,j,k,2)
+#define velz(i,j,k) vel(i,j,k,3)
+#define sx(i,j,k) scon(i,j,k,1)
+#define sy(i,j,k) scon(i,j,k,2)
+#define sz(i,j,k) scon(i,j,k,3)
+#define Bvecx(i,j,k) Bvec(i,j,k,1)
+#define Bvecy(i,j,k) Bvec(i,j,k,2)
+#define Bvecz(i,j,k) Bvec(i,j,k,3)
+#define Bconsx(i,j,k) Bcons(i,j,k,1)
+#define Bconsy(i,j,k) Bcons(i,j,k,2)
+#define Bconsz(i,j,k) Bcons(i,j,k,3)
+
+
+ /*@@
+ @routine GRHydro_AlfvenWaveM
+ @date Oct 10, 2011
+ @author Bruno Mundim, Joshua Faber, Scott Noble
+ @desc
+ Initial data for Circularly Polarized Alfven Wave test
+ @enddesc
+ @calls
+ @calledby
+ @history
+ Using GRHydro_AdvectedLoopM.F90 as a template.
+ @endhistory
+
+@@*/
+
+subroutine GRHydro_AlfvenWaveM(CCTK_ARGUMENTS)
+
+ implicit none
+
+ DECLARE_CCTK_ARGUMENTS
+ DECLARE_CCTK_PARAMETERS
+ DECLARE_CCTK_FUNCTIONS
+
+ CCTK_INT :: i, j, k, nx, ny, nz
+ CCTK_REAL :: pi,gam,AA,wnbr
+ CCTK_REAL :: vxval,vyval,vzval, valf
+ CCTK_REAL :: rhoval,pressval,epsval,hval
+ CCTK_REAL :: Bxval, Byval, Bzval
+ CCTK_REAL :: dx,dy,dz
+ CCTK_REAL :: range_x,range_y,range_z,range_d
+ CCTK_REAL :: cos_theta, sin_theta
+ CCTK_REAL :: Bvecx_d, Bvecz_d
+ CCTK_REAL :: velx_d, velz_d
+ CCTK_REAL :: det
+ CCTK_REAL :: t1,t2,t3
+
+ pi=4.0d0*atan(1.0d0)
+
+!!$Adiabatic index for this test:
+ gam = (5.0d0/3.0d0)
+
+!!$pressure, density, B^x, specific internal energy and enthalpy:
+ rhoval = 1.0d0
+ pressval = 1.0d0
+ Bxval = 1.0d0
+ epsval = pressval/(gam-1.0d0)/rhoval
+ hval = 1.0d0 + epsval + pressval/rhoval
+
+!!$ Alfven Wave Amplitude:
+ AA=1.0d0
+
+!!$ Alfven wave speed:
+ t1 = rhoval*hval+Bxval**2*(1.0d0+AA**2)
+ t2 = 2.0d0*AA*Bxval**2/t1
+ t3 = 0.5d0*(1.0d0+sqrt(1.0d0-t2**2))
+ valf = sqrt(Bxval**2/t1/t3)
+
+!!$ Vx value:
+ vxval=0.0d0
+
+ nx = cctk_lsh(1)
+ ny = cctk_lsh(2)
+ nz = cctk_lsh(3)
+
+ dx = CCTK_DELTA_SPACE(1)
+ dy = CCTK_DELTA_SPACE(2)
+ dz = CCTK_DELTA_SPACE(3)
+
+!!$ Note that the 3D test wasn't deviced to be used with AMR!
+ range_x = (cctk_gsh(1)-1)*dx
+ range_y = (cctk_gsh(2)-1)*dy
+ range_z = (cctk_gsh(3)-1)*dz
+
+ range_d = sqrt(range_z**2+range_x**2)
+
+ cos_theta = range_z/range_d
+ sin_theta = range_x/range_d
+
+!!$ Alfven wave number
+ wnbr = 2.0d0*pi/range_x
+
+ do i=1,nx
+ do j=1,ny
+ do k=1,nz
+
+ rho(i,j,k)=rhoval
+ press(i,j,k)=pressval
+ eps(i,j,k)=epsval
+ velx(i,j,k)=vxval
+ vely(i,j,k)=-valf*AA*cos(wnbr*x(i,j,k))
+ velz(i,j,k)=-valf*AA*sin(wnbr*x(i,j,k))
+ Bvecx(i,j,k)=Bxval
+ Bvecy(i,j,k)=AA*Bxval*cos(wnbr*x(i,j,k))
+ Bvecz(i,j,k)=AA*Bxval*sin(wnbr*x(i,j,k))
+
+
+!!$ if (CCTK_EQUALS(advectedloop_type,"3D")) then
+!!$ Bvecx_d = cos_theta*Bvecx(i,j,k)+sin_theta*Bvecz(i,j,k)
+!!$ Bvecz_d = cos_theta*Bvecz(i,j,k)-sin_theta*Bvecx(i,j,k)
+!!$ velx_d = cos_theta*velx(i,j,k)+sin_theta*velz(i,j,k)
+!!$ velz_d = cos_theta*velz(i,j,k)-sin_theta*velx(i,j,k)
+!!$
+!!$ Bvecx(i,j,k) = Bvecx_d
+!!$ Bvecz(i,j,k) = Bvecz_d
+!!$ velx(i,j,k) = velx_d
+!!$ velz(i,j,k) = velz_d
+!!$ end if
+
+ det=SPATIAL_DETERMINANT(gxx(i,j,k),gxy(i,j,k),gxz(i,j,k),gyy(i,j,k),gyz(i,j,k),gzz(i,j,k))
+
+ if (CCTK_EQUALS(GRHydro_eos_type,"Polytype")) then
+ call Prim2ConPolyM(GRHydro_eos_handle,gxx(i,j,k),gxy(i,j,k),&
+ gxz(i,j,k),gyy(i,j,k),gyz(i,j,k),gzz(i,j,k),&
+ det, dens(i,j,k),sx(i,j,k),sy(i,j,k),sz(i,j,k),&
+ tau(i,j,k),Bconsx(i,j,k),Bconsy(i,j,k),Bconsz(i,j,k),rho(i,j,k),&
+ velx(i,j,k),vely(i,j,k),velz(i,j,k),&
+ eps(i,j,k),press(i,j,k),Bvecx(i,j,k),Bvecy(i,j,k),Bvecz(i,j,k),&
+ w_lorentz(i,j,k))
+ else
+ call Prim2ConGenM(GRHydro_eos_handle,gxx(i,j,k),gxy(i,j,k),&
+ gxz(i,j,k),gyy(i,j,k),gyz(i,j,k),gzz(i,j,k),&
+ det, dens(i,j,k),sx(i,j,k),sy(i,j,k),sz(i,j,k),&
+ tau(i,j,k),Bconsx(i,j,k),Bconsy(i,j,k),Bconsz(i,j,k),rho(i,j,k),&
+ velx(i,j,k),vely(i,j,k),velz(i,j,k),&
+ eps(i,j,k),press(i,j,k),Bvecx(i,j,k),Bvecy(i,j,k),Bvecz(i,j,k),&
+ w_lorentz(i,j,k))
+ end if
+
+ enddo
+ enddo
+ enddo
+
+ densrhs = 0.d0
+ srhs = 0.d0
+ taurhs = 0.d0
+ Bconsrhs = 0.d0
+
+ return
+
+end subroutine GRHydro_AlfvenWaveM
+
+