From e28530dbb026efb7405d47cb731c280b084177c5 Mon Sep 17 00:00:00 2001
From: dsjohns2 <dsjohns2@illinois.edu>
Date: Fri, 20 Oct 2017 10:48:52 -0500
Subject: [PATCH] Add other l2 modes extraction

---
 POWER/plot.py         |  12 +--
 POWER/plot_monitor.py |   4 +-
 POWER/power.py        | 235 +++++++++++++++++++++---------------------
 3 files changed, 126 insertions(+), 125 deletions(-)

diff --git a/POWER/plot.py b/POWER/plot.py
index 200fe39..16ec403 100755
--- a/POWER/plot.py
+++ b/POWER/plot.py
@@ -43,9 +43,9 @@ import sys
 
 run_name = sys.argv[1]
 
-python_strain = np.loadtxt("./Extrapolated_Strain/"+run_name+"/"+run_name+"_radially_extrapolated_strain.dat")
-python_phase = np.loadtxt("./Extrapolated_Strain/"+run_name+"/"+run_name+"_radially_extrapolated_phase.dat")
-python_amp = np.loadtxt("./Extrapolated_Strain/"+run_name+"/"+run_name+"_radially_extrapolated_amplitude.dat")
+python_strain = np.loadtxt("./Extrapolated_Strain/"+run_name+"/"+run_name+"_radially_extrapolated_strain_l2_m2.dat")
+python_phase = np.loadtxt("./Extrapolated_Strain/"+run_name+"/"+run_name+"_radially_extrapolated_phase_l2_m2.dat")
+python_amp = np.loadtxt("./Extrapolated_Strain/"+run_name+"/"+run_name+"_radially_extrapolated_amplitude_l2_m2.dat")
 py_t = python_strain[:, 0]
 py_hplus = python_strain[:, 1]
 py_phase = python_phase[:, 1]
@@ -60,7 +60,7 @@ plt.plot(py_t, py_hplus)
 plt.xlim((0,None))
 plt.ylabel('${\mathfrak{R}} [h(t)]$')
 plt.xlabel('Time [M]')
-plt.savefig("./Extrapolated_Strain/"+run_name+"/strain_plot.png")
+plt.savefig("./Extrapolated_Strain/"+run_name+"/strain_plot_l2_m2.png")
 plt.close()
 
 matplotlib.rcParams.update({'font.size': 12})
@@ -70,7 +70,7 @@ plt.plot(py_t, py_phase)
 plt.xlim((0,None))
 plt.ylabel('Phase')
 plt.xlabel('Time [M]')
-plt.savefig("./Extrapolated_Strain/"+run_name+"/phase_plot.png")
+plt.savefig("./Extrapolated_Strain/"+run_name+"/phase_plot_l2_m2.png")
 plt.close()
 
 matplotlib.rcParams.update({'font.size': 12})
@@ -80,5 +80,5 @@ plt.plot(py_t, py_amp)
 plt.xlim((0,None))
 plt.ylabel('Amplitude')
 plt.xlabel('Time [M]')
-plt.savefig("./Extrapolated_Strain/"+run_name+"/amplitude_plot.png")
+plt.savefig("./Extrapolated_Strain/"+run_name+"/amplitude_plot_l2_m2.png")
 plt.close()
diff --git a/POWER/plot_monitor.py b/POWER/plot_monitor.py
index 210324d..379412e 100755
--- a/POWER/plot_monitor.py
+++ b/POWER/plot_monitor.py
@@ -43,8 +43,8 @@ import sys
 
 run_name = sys.argv[1]
 
-python_strain = np.loadtxt("./Extrapolated_Strain/"+run_name+"/"+run_name+"_radially_extrapolated_strain.dat")
-python_phase = np.loadtxt("./Extrapolated_Strain/"+run_name+"/"+run_name+"_radially_extrapolated_phase.dat")
+python_strain = np.loadtxt("./Extrapolated_Strain/"+run_name+"/"+run_name+"_radially_extrapolated_strain_l2_m2.dat")
+python_phase = np.loadtxt("./Extrapolated_Strain/"+run_name+"/"+run_name+"_radially_extrapolated_phase_l2_m2.dat")
 py_t = python_strain[:, 0]
 py_hplus = python_strain[:, 1]
 py_phase = python_phase[:, 1]
diff --git a/POWER/power.py b/POWER/power.py
index d2d425d..f8ef9f1 100755
--- a/POWER/power.py
+++ b/POWER/power.py
@@ -319,120 +319,121 @@ for sim_path in paths:
 			if(line_elems[0] == "initial-ADM-energy"):
 				ADMMass = float(line_elems[-1])
 
-	#Get Psi4
-	radii = [100, 115, 136, 167, 214, 300, 500]
-	psi4dsetname_100 = 'l2_m2_r'+str(radii[0])+'.00'
-	psi4dsetname_115 = 'l2_m2_r'+str(radii[1])+'.00'
-	psi4dsetname_136 = 'l2_m2_r'+str(radii[2])+'.00'
-	psi4dsetname_167 = 'l2_m2_r'+str(radii[3])+'.00'
-	psi4dsetname_214 = 'l2_m2_r'+str(radii[4])+'.00'
-	psi4dsetname_300 = 'l2_m2_r'+str(radii[5])+'.00'
-	psi4dsetname_500 = 'l2_m2_r'+str(radii[6])+'.00'
-	mp_psi4_100 = loadHDF5Series(simdirs+"mp_psi4.h5", psi4dsetname_100)
-	mp_psi4_115 = loadHDF5Series(simdirs+"mp_psi4.h5", psi4dsetname_115)
-	mp_psi4_136 = loadHDF5Series(simdirs+"mp_psi4.h5", psi4dsetname_136)
-	mp_psi4_167 = loadHDF5Series(simdirs+"mp_psi4.h5", psi4dsetname_167)
-	mp_psi4_214 = loadHDF5Series(simdirs+"mp_psi4.h5", psi4dsetname_214)
-	mp_psi4_300 = loadHDF5Series(simdirs+"mp_psi4.h5", psi4dsetname_300)
-	mp_psi4_500 = loadHDF5Series(simdirs+"mp_psi4.h5", psi4dsetname_500)
-	mp_psi4_vars = [mp_psi4_100, mp_psi4_115, mp_psi4_136, mp_psi4_167, mp_psi4_214, mp_psi4_300, mp_psi4_500]
-
-	#Get Tortoise Coordinate
-	tortoise = [None] * 7
-	for i in range(0, 7):
-		tortoise[i] = -RadialToTortoise(radii[i], ADMMass)
-
-	strain = [None]*7
-	phase = [None]*7
-	amp = [None]*7
-	for i in range(0, 7):
-		#Get modified Psi4 (Multiply real and imaginary psi4 columns by radii and add the tortoise coordinate to the time colum)
-		mp_psi4_vars[i][:, 0] += tortoise[i]
-		mp_psi4_vars[i][:, 1] *= radii[i]
-		mp_psi4_vars[i][:, 2] *= radii[i]
-
-		#Fixed-frequency integration twice to get strain
-		hTable = psi4ToStrain(mp_psi4_vars[i], f0)
-		time = hTable[:, 0]
-		h = hTable[:, 1]
-		hplus = h.real
-		hcross = h.imag
-		newhTable = np.column_stack((time, hplus, hcross))
-		warnings.filterwarnings('ignore')
-		finalhTable = newhTable.astype(float)
-		np.savetxt("./Extrapolated_Strain/"+sim+"/"+sim+"_strain_at_"+str(radii[i])+".dat", finalhTable)
-		strain[i] = finalhTable
-
-		#Get phase and amplitude of strain
-		h_phase = np.unwrap(np.angle(h))
-		while(h_phase[0] < 0):
-			h_phase[:] += 2*math.pi
-		angleTable = np.column_stack((time, h_phase))
-		angleTable = angleTable.astype(float)
-		phase[i] = angleTable
-		h_amp = np.absolute(h)
-		ampTable = np.column_stack((time, h_amp))
-		ampTable = ampTable.astype(float)
-		amp[i] = ampTable
-
-	#Interpolate phase and amplitude
-	t = phase[0][:, 0]
-	last_t = phase[radiiUsedForExtrapolation - 1][-1, 0]
-	last_index = 0;
-	for i in range(0, len(phase[0][:, 0])):
-		if(t[i] > last_t):
-			last_index = i
-			break
-	last_index = last_index-1
-	t = phase[0][0:last_index, 0]
-	dts = t[1:] - t[:-1]
-	dt = float(np.amin(dts))
-	t = np.arange(phase[0][0, 0], phase[0][last_index, 0], dt)
-	interpolation_order = 9
-	for i in range(0, radiiUsedForExtrapolation):
-		interp_function = scipy.interpolate.interp1d(phase[i][:, 0], phase[i][:, 1], kind=interpolation_order)
-		resampled_phase_vals = interp_function(t)
-		while(resampled_phase_vals[0] < 0):
-			resampled_phase_vals[:] += 2*math.pi
-		phase[i] = np.column_stack((t, resampled_phase_vals))
-		interp_function = scipy.interpolate.interp1d(amp[i][:, 0], amp[i][:, 1], kind=interpolation_order)
-		resampled_amp_vals = interp_function(t)
-		amp[i] = np.column_stack((t, resampled_amp_vals))
-
-	#Extrapolate
-	phase_extrapolation_order = 1
-	amp_extrapolation_order = 2
-	radii = np.asarray(radii, dtype=float)
-	radii = radii[0:radiiUsedForExtrapolation]
-	A_phase = np.power(radii, 0)
-	A_amp = np.power(radii, 0)
-	for i in range(1, phase_extrapolation_order+1):
-		A_phase = np.column_stack((A_phase, np.power(radii, -1*i)))
-
-	for i in range(1, amp_extrapolation_order+1):
-		A_amp = np.column_stack((A_amp, np.power(radii, -1*i)))
-
-	radially_extrapolated_phase = np.empty(0)
-	radially_extrapolated_amp = np.empty(0)
-	for i in range(0, len(t)):
-		b_phase = np.empty(0)
-		for j in range(0, radiiUsedForExtrapolation):
-			b_phase = np.append(b_phase, phase[j][i, 1])
-		x_phase = np.linalg.lstsq(A_phase, b_phase)[0]
-		radially_extrapolated_phase = np.append(radially_extrapolated_phase, x_phase[0])
-
-		b_amp = np.empty(0)
-		for j in range(0, radiiUsedForExtrapolation):
-			b_amp = np.append(b_amp, amp[j][i, 1])
-		x_amp = np.linalg.lstsq(A_amp, b_amp)[0]
-		radially_extrapolated_amp = np.append(radially_extrapolated_amp, x_amp[0])
-
-	radially_extrapolated_h_plus = np.empty(0)
-	radially_extrapolated_h_cross = np.empty(0)
-	for i in range(0, len(radially_extrapolated_amp)):
-		radially_extrapolated_h_plus = np.append(radially_extrapolated_h_plus, radially_extrapolated_amp[i] * math.cos(radially_extrapolated_phase[i]))
-		radially_extrapolated_h_cross = np.append(radially_extrapolated_h_cross, radially_extrapolated_amp[i] * math.sin(radially_extrapolated_phase[i]))
-
-	np.savetxt("./Extrapolated_Strain/"+sim+"/"+sim+"_radially_extrapolated_strain.dat", np.column_stack((t, radially_extrapolated_h_plus, radially_extrapolated_h_cross)))
-	np.savetxt("./Extrapolated_Strain/"+sim+"/"+sim+"_radially_extrapolated_amplitude.dat", np.column_stack((t, radially_extrapolated_amp)))
-	np.savetxt("./Extrapolated_Strain/"+sim+"/"+sim+"_radially_extrapolated_phase.dat", np.column_stack((t, radially_extrapolated_phase)))
+	for m in [-2, -1, 0, 1, 2]:
+		#Get Psi4
+		radii = [100, 115, 136, 167, 214, 300, 500]
+		psi4dsetname_100 = 'l2_m'+str(m)+'_r'+str(radii[0])+'.00'
+		psi4dsetname_115 = 'l2_m'+str(m)+'_r'+str(radii[1])+'.00'
+		psi4dsetname_136 = 'l2_m'+str(m)+'_r'+str(radii[2])+'.00'
+		psi4dsetname_167 = 'l2_m'+str(m)+'_r'+str(radii[3])+'.00'
+		psi4dsetname_214 = 'l2_m'+str(m)+'_r'+str(radii[4])+'.00'
+		psi4dsetname_300 = 'l2_m'+str(m)+'_r'+str(radii[5])+'.00'
+		psi4dsetname_500 = 'l2_m'+str(m)+'_r'+str(radii[6])+'.00'
+		mp_psi4_100 = loadHDF5Series(simdirs+"mp_psi4.h5", psi4dsetname_100)
+		mp_psi4_115 = loadHDF5Series(simdirs+"mp_psi4.h5", psi4dsetname_115)
+		mp_psi4_136 = loadHDF5Series(simdirs+"mp_psi4.h5", psi4dsetname_136)
+		mp_psi4_167 = loadHDF5Series(simdirs+"mp_psi4.h5", psi4dsetname_167)
+		mp_psi4_214 = loadHDF5Series(simdirs+"mp_psi4.h5", psi4dsetname_214)
+		mp_psi4_300 = loadHDF5Series(simdirs+"mp_psi4.h5", psi4dsetname_300)
+		mp_psi4_500 = loadHDF5Series(simdirs+"mp_psi4.h5", psi4dsetname_500)
+		mp_psi4_vars = [mp_psi4_100, mp_psi4_115, mp_psi4_136, mp_psi4_167, mp_psi4_214, mp_psi4_300, mp_psi4_500]
+
+		#Get Tortoise Coordinate
+		tortoise = [None] * 7
+		for i in range(0, 7):
+			tortoise[i] = -RadialToTortoise(radii[i], ADMMass)
+
+		strain = [None]*7
+		phase = [None]*7
+		amp = [None]*7
+		for i in range(0, 7):
+			#Get modified Psi4 (Multiply real and imaginary psi4 columns by radii and add the tortoise coordinate to the time colum)
+			mp_psi4_vars[i][:, 0] += tortoise[i]
+			mp_psi4_vars[i][:, 1] *= radii[i]
+			mp_psi4_vars[i][:, 2] *= radii[i]
+
+			#Fixed-frequency integration twice to get strain
+			hTable = psi4ToStrain(mp_psi4_vars[i], f0)
+			time = hTable[:, 0]
+			h = hTable[:, 1]
+			hplus = h.real
+			hcross = h.imag
+			newhTable = np.column_stack((time, hplus, hcross))
+			warnings.filterwarnings('ignore')
+			finalhTable = newhTable.astype(float)
+			np.savetxt("./Extrapolated_Strain/"+sim+"/"+sim+"_strain_at_"+str(radii[i])+"_l2_m"+str(m)+".dat", finalhTable)
+			strain[i] = finalhTable
+
+			#Get phase and amplitude of strain
+			h_phase = np.unwrap(np.angle(h))
+			while(h_phase[0] < 0):
+				h_phase[:] += 2*math.pi
+			angleTable = np.column_stack((time, h_phase))
+			angleTable = angleTable.astype(float)
+			phase[i] = angleTable
+			h_amp = np.absolute(h)
+			ampTable = np.column_stack((time, h_amp))
+			ampTable = ampTable.astype(float)
+			amp[i] = ampTable
+
+		#Interpolate phase and amplitude
+		t = phase[0][:, 0]
+		last_t = phase[radiiUsedForExtrapolation - 1][-1, 0]
+		last_index = 0;
+		for i in range(0, len(phase[0][:, 0])):
+			if(t[i] > last_t):
+				last_index = i
+				break
+		last_index = last_index-1
+		t = phase[0][0:last_index, 0]
+		dts = t[1:] - t[:-1]
+		dt = float(np.amin(dts))
+		t = np.arange(phase[0][0, 0], phase[0][last_index, 0], dt)
+		interpolation_order = 9
+		for i in range(0, radiiUsedForExtrapolation):
+			interp_function = scipy.interpolate.interp1d(phase[i][:, 0], phase[i][:, 1], kind=interpolation_order)
+			resampled_phase_vals = interp_function(t)
+			while(resampled_phase_vals[0] < 0):
+				resampled_phase_vals[:] += 2*math.pi
+			phase[i] = np.column_stack((t, resampled_phase_vals))
+			interp_function = scipy.interpolate.interp1d(amp[i][:, 0], amp[i][:, 1], kind=interpolation_order)
+			resampled_amp_vals = interp_function(t)
+			amp[i] = np.column_stack((t, resampled_amp_vals))
+
+		#Extrapolate
+		phase_extrapolation_order = 1
+		amp_extrapolation_order = 2
+		radii = np.asarray(radii, dtype=float)
+		radii = radii[0:radiiUsedForExtrapolation]
+		A_phase = np.power(radii, 0)
+		A_amp = np.power(radii, 0)
+		for i in range(1, phase_extrapolation_order+1):
+			A_phase = np.column_stack((A_phase, np.power(radii, -1*i)))
+
+		for i in range(1, amp_extrapolation_order+1):
+			A_amp = np.column_stack((A_amp, np.power(radii, -1*i)))
+
+		radially_extrapolated_phase = np.empty(0)
+		radially_extrapolated_amp = np.empty(0)
+		for i in range(0, len(t)):
+			b_phase = np.empty(0)
+			for j in range(0, radiiUsedForExtrapolation):
+				b_phase = np.append(b_phase, phase[j][i, 1])
+			x_phase = np.linalg.lstsq(A_phase, b_phase)[0]
+			radially_extrapolated_phase = np.append(radially_extrapolated_phase, x_phase[0])
+
+			b_amp = np.empty(0)
+			for j in range(0, radiiUsedForExtrapolation):
+				b_amp = np.append(b_amp, amp[j][i, 1])
+			x_amp = np.linalg.lstsq(A_amp, b_amp)[0]
+			radially_extrapolated_amp = np.append(radially_extrapolated_amp, x_amp[0])
+
+		radially_extrapolated_h_plus = np.empty(0)
+		radially_extrapolated_h_cross = np.empty(0)
+		for i in range(0, len(radially_extrapolated_amp)):
+			radially_extrapolated_h_plus = np.append(radially_extrapolated_h_plus, radially_extrapolated_amp[i] * math.cos(radially_extrapolated_phase[i]))
+			radially_extrapolated_h_cross = np.append(radially_extrapolated_h_cross, radially_extrapolated_amp[i] * math.sin(radially_extrapolated_phase[i]))
+
+		np.savetxt("./Extrapolated_Strain/"+sim+"/"+sim+"_radially_extrapolated_strain_l2_m"+str(m)+".dat", np.column_stack((t, radially_extrapolated_h_plus, radially_extrapolated_h_cross)))
+		np.savetxt("./Extrapolated_Strain/"+sim+"/"+sim+"_radially_extrapolated_amplitude_l2_m"+str(m)+".dat", np.column_stack((t, radially_extrapolated_amp)))
+		np.savetxt("./Extrapolated_Strain/"+sim+"/"+sim+"_radially_extrapolated_phase_l2_m"+str(m)+".dat", np.column_stack((t, radially_extrapolated_phase)))
-- 
GitLab