Corrected error (lbox) in mass determination

This commit is contained in:
Noe Brucy
2019-04-25 09:31:21 +02:00
parent edb9f2bda8
commit e654c5591d
+59 -22
View File
@@ -15,7 +15,7 @@ import glob as glob
import pickle as pickle import pickle as pickle
from pymses.sources.ramses import output from pymses.sources.ramses import output
from pymses.analysis import Camera, raytracing, slicing from pymses.analysis import Camera, raytracing, slicing, splatting
from pymses.filters import CellsToPoints from pymses.filters import CellsToPoints
from pymses.analysis import ScalarOperator, FractionOperator, MaxLevelOperator from pymses.analysis import ScalarOperator, FractionOperator, MaxLevelOperator
@@ -39,6 +39,7 @@ def make_image_disk(
cpuamr=False, cpuamr=False,
pos_star=np.array([1.0, 1.0, 1.0]), pos_star=np.array([1.0, 1.0, 1.0]),
interactive=False, interactive=False,
fft=False,
): ):
""" """
Make several useful image of an output of a simulation Make several useful image of an output of a simulation
@@ -77,6 +78,7 @@ def make_image_disk(
put_title=put_title, put_title=put_title,
pos_star=pos_star, pos_star=pos_star,
interactive=interactive, interactive=interactive,
fft=fft,
) )
@@ -96,6 +98,7 @@ def make_image_aux(
pos_star=np.array([1.0, 1.0, 1.0]), pos_star=np.array([1.0, 1.0, 1.0]),
put_title=True, put_title=True,
interactive=False, interactive=False,
fft=False,
): ):
""" """
Make several useful image of an output of a simulation, auxillary function Make several useful image of an output of a simulation, auxillary function
@@ -136,7 +139,12 @@ def make_image_aux(
return return
rho_op = ScalarOperator(lambda dset: dset["rho"], ro.info["unit_density"]) rho_op = ScalarOperator(lambda dset: dset["rho"], ro.info["unit_density"])
rt = raytracing.RayTracer(amr, ro.info, rho_op)
rt = None
if fft:
rt = splatting.SplatterProcessor(amr, ro.info, rho_op)
else:
rt = raytracing.RayTracer(amr, ro.info, rho_op)
axes_los = ["x", "y", "z"] # Line of sight axes axes_los = ["x", "y", "z"] # Line of sight axes
axes_h = ["y", "x", "x"] # Horizontal axes axes_h = ["y", "x", "x"] # Horizontal axes
@@ -336,7 +344,11 @@ def make_image_aux(
ro.info["unit_velocity"], ro.info["unit_velocity"],
) )
rt_omega = raytracing.RayTracer(amr, ro.info, omega_op) rt_omega = raytracing.RayTracer(amr, ro.info, omega_op)
rt_cs = raytracing.RayTracer(amr, ro.info, cs_op)
if fft:
rt_cs = splatting.SplatterProcessor(amr, ro.info, cs_op, surf_qty=False)
else:
rt_cs = raytracing.RayTracer(amr, ro.info, cs_op)
dmap_omega = rt_omega.process(cam) dmap_omega = rt_omega.process(cam)
dmap_cs = rt_cs.process(cam) dmap_cs = rt_cs.process(cam)
@@ -505,7 +517,7 @@ def disk_prop(
amr = ro.amr_source(["rho", "vel", "Br", "Bl", "P"]) amr = ro.amr_source(["rho", "vel", "Br", "Bl", "P"])
cell_source = CellsToPoints(amr) cell_source = CellsToPoints(amr)
cells = cell_source.flatten() cells = cell_source.flatten()
dx = cells.get_sizes() dx = cells.get_sizes() * lbox
pos = cells.points * lbox pos = cells.points * lbox
# Get positions in the frame of the protostar # Get positions in the frame of the protostar
pos = pos - pos_star pos = pos - pos_star
@@ -540,8 +552,13 @@ def disk_prop(
v_rad_disk = v_rad[mask] v_rad_disk = v_rad[mask]
v_az_disk = v_az[mask] v_az_disk = v_az[mask]
v_kepl = np.sqrt(mass_star * G / rc_disk) v_kepl = np.sqrt(mass_star * G / rc_disk)
height_disk = height[mask]
total_mass_disk = np.sum(rho_disk * dvol_disk) total_mass_disk = np.sum(rho_disk * dvol_disk)
total_mass = np.sum(cells["rho"] * dx ** 3)
print("Mass disk", total_mass_disk)
print("Mass box", total_mass)
# Initialize binned quantities # Initialize binned quantities
cs_rad = np.zeros(nb_bin - 1) cs_rad = np.zeros(nb_bin - 1)
@@ -554,15 +571,12 @@ def disk_prop(
v_rad_rad = np.zeros(nb_bin - 1) v_rad_rad = np.zeros(nb_bin - 1)
alpha_rey_rad = np.zeros(nb_bin - 1) alpha_rey_rad = np.zeros(nb_bin - 1)
Q_kepl_rad = np.zeros(nb_bin - 1) Q_kepl_rad = np.zeros(nb_bin - 1)
height_rad = np.zeros(nb_bin - 1)
for i in range(nb_bin - 1): for i in range(nb_bin - 1):
mask_bin = (rc_disk > rad[i]) & (rc_disk < rad[i + 1]) mask_bin = (rc_disk > rad[i]) & (rc_disk < rad[i + 1])
print( # print("Bin #{} : {} cells between {} and {}".format(i, np.sum(mask_bin), rad[i], rad[i + 1]))
"Bin #{} : {} cells between {} and {}".format(
i, np.sum(mask_bin), rad[i], rad[i + 1]
)
)
press_rad[i] = np.sum(press_disk[mask_bin] * dvol_disk[mask_bin]) / np.sum( press_rad[i] = np.sum(press_disk[mask_bin] * dvol_disk[mask_bin]) / np.sum(
dvol_disk[mask_bin] dvol_disk[mask_bin]
@@ -577,10 +591,8 @@ def disk_prop(
# TODO verifier unites # TODO verifier unites
# Surface of a bin : S = dr * 2 * pi * r with # Surface of a bin : S = dr * 2 * pi * r with
# dr = rad[i + 1] - rad[i] and r = (rad[i + 1] + rad[i]) / 2. # dr = rad[i + 1] - rad[i] and r = (rad[i + 1] + rad[i]) / 2.
coldens_rad[i] = ( coldens_rad[i] = np.sum(rho_disk[mask_bin] * dvol_disk[mask_bin]) / (
np.sum(rho_disk[mask_bin] * dvol_disk[mask_bin]) (rad[i + 1] - rad[i]) * (rad[i + 1] + rad[i]) * np.pi
* (lbox) ** 3
/ ((rad[i + 1] - rad[i]) * (rad[i + 1] + rad[i]) * np.pi)
) )
v_az_rad[i] = np.sum( v_az_rad[i] = np.sum(
@@ -590,6 +602,9 @@ def disk_prop(
v_rad_rad[i] = np.sum( v_rad_rad[i] = np.sum(
v_rad_disk[mask_bin] * rho_disk[mask_bin] * dvol_disk[mask_bin] v_rad_disk[mask_bin] * rho_disk[mask_bin] * dvol_disk[mask_bin]
) / np.sum(rho_disk[mask_bin] * dvol_disk[mask_bin]) ) / np.sum(rho_disk[mask_bin] * dvol_disk[mask_bin])
height_rad[i] = np.sum(
height_disk[mask_bin] * rho_disk[mask_bin] * dvol_disk[mask_bin]
) / np.sum(rho_disk[mask_bin] * dvol_disk[mask_bin])
alpha_rey_rad[i] = ( alpha_rey_rad[i] = (
( (
@@ -624,6 +639,7 @@ def disk_prop(
prop_disk = { prop_disk = {
"time": time, "time": time,
"tot_mass": total_mass_disk, "tot_mass": total_mass_disk,
"mass_box": total_mass,
"rad": rad[0 : nb_bin - 1], "rad": rad[0 : nb_bin - 1],
"center": pos_star, "center": pos_star,
"alpha_rey": alpha_rey_rad, "alpha_rey": alpha_rey_rad,
@@ -636,6 +652,7 @@ def disk_prop(
"temp": temp_rad, "temp": temp_rad,
"cs": cs_rad, "cs": cs_rad,
"Q_kepl": Q_kepl_rad, "Q_kepl": Q_kepl_rad,
"height": height_rad,
} }
# store the results # store the results
@@ -678,8 +695,10 @@ def plot_disk_prop(path, num, force=False, tag="", interactive=False):
P.close() P.close()
P.xscale("log") P.xscale("log")
P.plot(prop_disk["rad"], np.log10(prop_disk["rho"]), color="k", linewidth=2) P.yscale("log")
P.ylabel(r"$\log(n) \, (code)$") P.grid()
P.plot(prop_disk["rad"], prop_disk["rho"], color="k", linewidth=2)
P.ylabel(r"$n \, (code)$")
P.xlabel("disk radius") P.xlabel("disk radius")
P.title(title) P.title(title)
if interactive: if interactive:
@@ -689,8 +708,10 @@ def plot_disk_prop(path, num, force=False, tag="", interactive=False):
P.close() P.close()
P.xscale("log") P.xscale("log")
P.plot(prop_disk["rad"], np.log10(prop_disk["temp"]), color="k", linewidth=2) P.yscale("log")
P.ylabel(r"$\log(T) \, (K)$") P.grid()
P.plot(prop_disk["rad"], prop_disk["temp"], color="k", linewidth=2)
P.ylabel(r"$T \, (K)$")
P.xlabel("disk radius") P.xlabel("disk radius")
P.title(title) P.title(title)
if interactive: if interactive:
@@ -718,8 +739,10 @@ def plot_disk_prop(path, num, force=False, tag="", interactive=False):
P.close() P.close()
P.xscale("log") P.xscale("log")
P.plot(prop_disk["rad"], np.log10(prop_disk["coldens"]), color="k", linewidth=2) P.yscale("log")
P.ylabel(r"$\log(N) \, (cm^{-2})$") P.grid()
P.plot(prop_disk["rad"], prop_disk["coldens"], color="k", linewidth=2)
P.ylabel(r"$N\, (cm^{-2})$")
P.xlabel("disk radius ") P.xlabel("disk radius ")
P.title(title) P.title(title)
if interactive: if interactive:
@@ -763,6 +786,20 @@ def plot_disk_prop(path, num, force=False, tag="", interactive=False):
P.savefig(path + "/Q_r_" + str(num).zfill(5) + out_ext) P.savefig(path + "/Q_r_" + str(num).zfill(5) + out_ext)
P.close() P.close()
if pdf: # height ration
P.savefig(path + "/Q_r_" + str(num).zfill(5) + ".pdf") P.grid()
P.savefig(path + "/Q_r_" + str(num).zfill(5) + ".jpeg") P.plot(
prop_disk["rad"],
abs(prop_disk["height"] / prop_disk["rad"]),
color="b",
linewidth=2,
)
P.ylabel(r"H ratio")
P.xlabel("disk radius ")
P.title(title + ", mass of box = {} (code)".format(prop_disk["mass_box"]))
if interactive:
pass
else:
P.savefig(path + "/H_r_" + str(num).zfill(5) + out_ext)
P.close()