aboutsummaryrefslogtreecommitdiff
path: root/CarpetExtra/IDHydroToy/src/InitialData.F77
diff options
context:
space:
mode:
Diffstat (limited to 'CarpetExtra/IDHydroToy/src/InitialData.F77')
-rw-r--r--CarpetExtra/IDHydroToy/src/InitialData.F77231
1 files changed, 231 insertions, 0 deletions
diff --git a/CarpetExtra/IDHydroToy/src/InitialData.F77 b/CarpetExtra/IDHydroToy/src/InitialData.F77
new file mode 100644
index 000000000..65f6e4e3a
--- /dev/null
+++ b/CarpetExtra/IDHydroToy/src/InitialData.F77
@@ -0,0 +1,231 @@
+c -*-Fortran-*-
+c $Header: /home/eschnett/C/carpet/Carpet/CarpetExtra/IDHydroToy/src/InitialData.F77,v 1.6 2003/11/05 16:18:40 schnetter Exp $
+
+#include "cctk.h"
+#include "cctk_Arguments.h"
+#include "cctk_Functions.h"
+#include "cctk_Parameters.h"
+
+ subroutine IDHydroToy_InitialData (CCTK_ARGUMENTS)
+
+ implicit none
+
+ DECLARE_CCTK_ARGUMENTS
+ DECLARE_CCTK_PARAMETERS
+ DECLARE_CCTK_FUNCTIONS
+
+ CCTK_REAL pi
+ CCTK_REAL omega
+ CCTK_REAL dt
+ CCTK_REAL x,y,z, r
+ integer i,j,k
+
+ CCTK_REAL vr
+
+ external erf
+ real*8 erf
+
+ pi = 4*atan(1.d0)
+
+ omega = sqrt(kx**2+ky**2+kz**2)
+
+ dt = CCTK_DELTA_TIME
+
+ if (CCTK_EQUALS(initial_data,"plane")) then
+
+ do k=1,cctk_lsh(3)
+ do j=1,cctk_lsh(2)
+ do i=1,cctk_lsh(1)
+
+ x = cart3d_x(i,j,k)
+ y = cart3d_y(i,j,k)
+ z = cart3d_z(i,j,k)
+
+ u(i,j,k) = amplitude
+ $ * cos((kx*x + ky*y + kz*z + omega*cctk_time) * pi)
+ vx(i,j,k) = u(i,j,k) * kx / omega
+ vy(i,j,k) = u(i,j,k) * ky / omega
+ vz(i,j,k) = u(i,j,k) * kz / omega
+
+ u_p(i,j,k) = amplitude
+ $ * cos((kx*x + ky*y + kz*z + omega*(cctk_time-dt)) * pi)
+ vx_p(i,j,k) = u_p(i,j,k) * kx / omega
+ vy_p(i,j,k) = u_p(i,j,k) * ky / omega
+ vz_p(i,j,k) = u_p(i,j,k) * kz / omega
+
+ u_p_p(i,j,k) = amplitude
+ $ * cos((kx*x + ky*y + kz*z + omega*(cctk_time-2*dt)) * pi)
+ vx_p_p(i,j,k) = u_p_p(i,j,k) * kx / omega
+ vy_p_p(i,j,k) = u_p_p(i,j,k) * ky / omega
+ vz_p_p(i,j,k) = u_p_p(i,j,k) * kz / omega
+
+ end do
+ end do
+ end do
+
+ else if (CCTK_EQUALS(initial_data,"gaussian")) then
+
+ do k=1,cctk_lsh(3)
+ do j=1,cctk_lsh(2)
+ do i=1,cctk_lsh(1)
+
+ x = cart3d_x(i,j,k)
+ y = cart3d_y(i,j,k)
+ z = cart3d_z(i,j,k)
+ r = spher3d_r(i,j,k)
+
+ u(i,j,k) = amplitude
+ $ * exp(- (r - radius)**2 / sigma**2)
+
+ vr = - 2*amplitude * (r - radius) / sigma**2
+ $ * exp(- (r - radius)**2 / sigma**2)
+ vx(i,j,k) = vr * x/r
+ vy(i,j,k) = vr * y/r
+ vz(i,j,k) = vr * z/r
+
+ u_p(i,j,k) = amplitude/2 * (r - dt) / r
+ $ * exp(- (r - radius - dt)**2 / sigma**2)
+ $ + amplitude/2 * (r + dt) / r
+ $ * exp(- (r - radius + dt)**2 / sigma**2)
+
+ vr = - amplitude/2 * (-dt / r**2 + (r - dt) * (r - radius - dt) / (r * sigma**2))
+ $ * exp(- (r - radius - dt)**2 / sigma**2)
+ $ - amplitude/2 * ( dt / r**2 + (r + dt) * (r - radius + dt) / (r * sigma**2))
+ $ * exp(- (r - radius - dt)**2 / sigma**2)
+ vx_p(i,j,k) = vr * x/r
+ vy_p(i,j,k) = vr * y/r
+ vz_p(i,j,k) = vr * z/r
+
+ u_p_p(i,j,k) = amplitude/2 * (r - 2*dt) / r
+ $ * exp(- (r - radius - 2*dt)**2 / sigma**2)
+ $ + amplitude/2 * (r + 2*dt) / r
+ $ * exp(- (r - radius + 2*dt)**2 / sigma**2)
+
+ vr = - amplitude/2 * (-2*dt / r**2 + (r - 2*dt) * (r - radius - 2*dt) / (r * sigma**2))
+ $ * exp(- (r - radius - 2*dt)**2 / sigma**2)
+ $ - amplitude/2 * ( 2*dt / r**2 + (r + 2*dt) * (r - radius + 2*dt) / (r * sigma**2))
+ $ * exp(- (r - radius - 2*dt)**2 / sigma**2)
+ vx_p_p(i,j,k) = vr * x/r
+ vy_p_p(i,j,k) = vr * y/r
+ vz_p_p(i,j,k) = vr * z/r
+
+ end do
+ end do
+ end do
+
+ else if (CCTK_EQUALS(initial_data, "box")) then
+
+c Use kx,ky,kz as number of modes in each direction.
+
+ do k=1,cctk_lsh(3)
+ do j=1,cctk_lsh(2)
+ do i=1,cctk_lsh(1)
+
+ x = cart3d_x(i,j,k)
+ y = cart3d_y(i,j,k)
+ z = cart3d_z(i,j,k)
+
+ u(i,j,k) = amplitude
+ $ * sin(kx * (x - 0.5d0) * pi)
+ $ * sin(ky * (y - 0.5d0) * pi)
+ $ * sin(kz * (z - 0.5d0) * pi)
+ $ * cos(omega * cctk_time * pi)
+ vx(i,j,k) = amplitude
+ $ * cos(kx * (x - 0.5d0) * pi)
+ $ * sin(ky * (y - 0.5d0) * pi)
+ $ * sin(kz * (z - 0.5d0) * pi)
+ $ * sin(omega * cctk_time * pi)
+ $ * kx / omega
+ vy(i,j,k) = amplitude
+ $ * sin(kx * (x - 0.5d0) * pi)
+ $ * cos(ky * (y - 0.5d0) * pi)
+ $ * sin(kz * (z - 0.5d0) * pi)
+ $ * sin(omega * cctk_time * pi)
+ $ * ky / omega
+ vz(i,j,k) = amplitude
+ $ * sin(kx * (x - 0.5d0) * pi)
+ $ * sin(ky * (y - 0.5d0) * pi)
+ $ * cos(kz * (z - 0.5d0) * pi)
+ $ * sin(omega * cctk_time * pi)
+ $ * kz / omega
+
+ u_p(i,j,k) = amplitude
+ $ * sin(kx * (x - 0.5d0) * pi)
+ $ * sin(ky * (y - 0.5d0) * pi)
+ $ * sin(kz * (z - 0.5d0) * pi)
+ $ * cos(omega * (cctk_time - dt) * pi)
+ vx_p(i,j,k) = amplitude
+ $ * cos(kx * (x - 0.5d0) * pi)
+ $ * sin(ky * (y - 0.5d0) * pi)
+ $ * sin(kz * (z - 0.5d0) * pi)
+ $ * sin(omega * (cctk_time - dt) * pi)
+ $ * kx / omega
+ vy_p(i,j,k) = amplitude
+ $ * sin(kx * (x - 0.5d0) * pi)
+ $ * cos(ky * (y - 0.5d0) * pi)
+ $ * sin(kz * (z - 0.5d0) * pi)
+ $ * sin(omega * (cctk_time - dt) * pi)
+ $ * ky / omega
+ vz_p(i,j,k) = amplitude
+ $ * sin(kx * (x - 0.5d0) * pi)
+ $ * sin(ky * (y - 0.5d0) * pi)
+ $ * cos(kz * (z - 0.5d0) * pi)
+ $ * sin(omega * (cctk_time - dt) * pi)
+ $ * kz / omega
+
+ u_p_p(i,j,k) = amplitude
+ $ * sin(kx * (x - 0.5d0) * pi)
+ $ * sin(ky * (y - 0.5d0) * pi)
+ $ * sin(kz * (z - 0.5d0) * pi)
+ $ * cos(omega * (cctk_time - 2*dt) * pi)
+ vx_p_p(i,j,k) = amplitude
+ $ * cos(kx * (x - 0.5d0) * pi)
+ $ * sin(ky * (y - 0.5d0) * pi)
+ $ * sin(kz * (z - 0.5d0) * pi)
+ $ * sin(omega * (cctk_time - 2*dt) * pi)
+ $ * kx / omega
+ vy_p_p(i,j,k) = amplitude
+ $ * sin(kx * (x - 0.5d0) * pi)
+ $ * cos(ky * (y - 0.5d0) * pi)
+ $ * sin(kz * (z - 0.5d0) * pi)
+ $ * sin(omega * (cctk_time - 2*dt) * pi)
+ $ * ky / omega
+ vz_p_p(i,j,k) = amplitude
+ $ * sin(kx * (x - 0.5d0) * pi)
+ $ * sin(ky * (y - 0.5d0) * pi)
+ $ * cos(kz * (z - 0.5d0) * pi)
+ $ * sin(omega * (cctk_time - 2*dt) * pi)
+ $ * kz / omega
+
+ end do
+ end do
+ end do
+
+ else
+
+ do k=1,cctk_lsh(3)
+ do j=1,cctk_lsh(2)
+ do i=1,cctk_lsh(1)
+
+ u(i,j,k) = 0
+ vx(i,j,k) = 0
+ vy(i,j,k) = 0
+ vz(i,j,k) = 0
+
+ u_p(i,j,k) = 0
+ vx_p(i,j,k) = 0
+ vy_p(i,j,k) = 0
+ vz_p(i,j,k) = 0
+
+ u_p_p(i,j,k) = 0
+ vx_p_p(i,j,k) = 0
+ vy_p_p(i,j,k) = 0
+ vz_p_p(i,j,k) = 0
+
+ end do
+ end do
+ end do
+
+ end if
+
+ end