Source code for astromugs.dust.CustomDistrib

"""
_____________________________________________________________________________________________________________
file name: CustomDistrib
@author: Sacha Gavino
last update: June 2022
language: PYTHON 3.8
short description:  Creates a dust population.
_____________________________________________________________________________________________________________
"""
import numpy as np
from .. constants.constants import mu, amu



[docs] class CustomDistrib:
[docs] def __init__(self, rsingle=1.000e-01, rho_m=2.5, units='microns', filename="dust_sizes.inp"): """ The argument 'units' represents the size units given in the file. It can be microns, mm, cm, or m. The file to read must be, and only be, in the form of a simple column, from smallest to largest size. ------- """ self.filename = filename self.units = units self.rho_m = rho_m self.rsingle = rsingle
def sizes(self): """ A) Create an array with grain sizes from a given file. Returns the list of sizes. Units: microns ------- Numpy array (sizes). len(array) = (nb_sizes). """ if (self.filename == None): filename = "dust_sizes.inp" else: filename = self.filename sizes = [] f = open(filename,"r") sizes.append(f.readline().replace("\n","")) while len(sizes[-1]) > 0: sizes.append(f.readline().replace("\n","")) sizes.pop() # remove last empty element f.close() sizes = np.array([sizes], dtype=float) # we add extra brackets because the array is meant to have more than one dimension, ultimately, with the actual sizes as the last. #convert in microns if self.units == 'microns': sizes = sizes if self.units == 'mm': sizes = sizes*1e3 if self.units == 'cm': sizes = sizes*1e4 if self.units == 'm': sizes = sizes*1e6 return sizes def grainmass(self): """ B) Create an array with masses of a single grain for each grain population. Returns ------- Numpy array. len(array) = (nb_sizes). Units: gram """ a = self.sizes() mass = ((4.*np.pi)/3.)*self.rho_m*(a[-1]*1e-4)**3 return mass