@@ -33,7 +33,7 @@ def write_table(tablename, radius, density, mass, potential, fmt="%.6e"):
3333 header = f"! { tablename } \n ! R D M P\n { len (radius )} "
3434 np .savetxt (tablename , data , fmt = fmt , header = header , comments = "" )
3535
36- def makemodel (radius , density , Mtotal , output_filename = '' , physical_units = False , verbose = True ):
36+ def make_model (radius , density , Mtotal , output_filename = '' , physical_units = False , verbose = True ):
3737 """
3838 Generate an EXP-compatible spherical basis function table.
3939
@@ -47,33 +47,39 @@ def makemodel(radius, density, Mtotal, output_filename='', physical_units=False,
4747 Total mass of the model, used for normalization.
4848 output_filename : str, optional
4949 Name of the output file to save the table. If empty, no file is written.
50+ physical_units : bool, optional
51+ If True, disables scaling and returns physical values (default: False).
5052 verbose : bool, optional
5153 If True, prints scaling information.
5254
5355 Returns
5456 -------
55- radius_scaled : ndarray
56- Scaled radius values.
57- density_scaled : ndarray
58- Scaled density values.
59- mass_scaled : ndarray
60- Scaled enclosed mass values.
61- potential_scaled : ndarray
62- Scaled potential values.
57+ result : dict
58+ Dictionary with the following keys:
59+ - 'radius' : ndarray
60+ Scaled radius values.
61+ - 'density' : ndarray
62+ Scaled density values.
63+ - 'mass' : ndarray
64+ Scaled enclosed mass values.
65+ - 'potential' : ndarray
66+ Scaled potential values.
6367 """
68+ EPS_MASS = 1e-15
69+ EPS_R = 1e-10
70+
6471 Rmax = np .nanmax (radius )
65-
72+
6673 mass = np .zeros_like (density )
6774 pwvals = np .zeros_like (density )
6875
6976 mass [0 ] = 1.e-15
7077 pwvals [0 ] = 0.
7178
72- #dr = radius[indx] - radius[indx - 1]
73- dr = np .diff (radius ) # differences between consecutive radii
79+ dr = np .diff (radius )
7480
75- # Midpoint mass contribution terms
76- mass_contrib = 2.0 * np .pi * (
81+ # Midpoint integration for enclosed mass and potential
82+ mass_contrib = 2.0 * np .pi * (
7783 radius [:- 1 ]** 2 * density [:- 1 ] + radius [1 :]** 2 * density [1 :]
7884 ) * dr
7985
@@ -82,10 +88,10 @@ def makemodel(radius, density, Mtotal, output_filename='', physical_units=False,
8288 ) * dr
8389
8490 # Now cumulative sum to get the arrays
85- mass = np .concatenate (([1e-15 ], 1e-15 + np .cumsum (mass_contrib )))
91+ mass = np .concatenate (([EPS_MASS ], EPS_MASS + np .cumsum (mass_contrib )))
8692 pwvals = np .concatenate (([0.0 ], np .cumsum (pwvals_contrib )))
8793
88- potential = - mass / (radius + 1.e-10 ) - (pwvals [- 1 ] - pwvals )
94+ potential = - mass / (radius + EPS_R ) - (pwvals [- 1 ] - pwvals )
8995
9096 M0 = mass [- 1 ]
9197 R0 = radius [- 1 ]
@@ -101,11 +107,8 @@ def makemodel(radius, density, Mtotal, output_filename='', physical_units=False,
101107 mfac = Beta ** 0.75 * Gamma ** - 0.5
102108 pfac = Beta
103109
104- if physical_units == True :
105- rfac = 1
106- dfac = 1
107- mfac = 1
108- pfac = 1
110+ if physical_units :
111+ rfac = dfac = mfac = pfac = 1.0
109112
110113 if verbose :
111114 print (f"Scaling factors: rfac = { rfac } , dfac = { dfac } , mfac = { mfac } , pfac = { pfac } " )
@@ -119,5 +122,10 @@ def makemodel(radius, density, Mtotal, output_filename='', physical_units=False,
119122 potential * pfac
120123 )
121124
122- return radius * rfac , density * dfac , mass * mfac , potential * pfac
125+ return return {
126+ "radius" : radius * rfac ,
127+ "density" : density * dfac ,
128+ "mass" : mass * mfac ,
129+ "potential" : potential * pfac ,
130+ }
123131
0 commit comments