{ "cells": [ { "cell_type": "code", "execution_count": 2, "id": "a0e822ab-6601-47f5-8ec2-be0ede781531", "metadata": {}, "outputs": [], "source": [ "import astropy.units as u\n", "import astropy.constants as c\n", "import numpy as np" ] }, { "cell_type": "markdown", "id": "0c44d53b-d152-4879-81ce-401131e879d9", "metadata": {}, "source": [ "# Stellar Formation" ] }, { "cell_type": "markdown", "id": "6678cb2b-c405-447f-b855-a5b905b298be", "metadata": {}, "source": [ "## Cloud Collapse" ] }, { "cell_type": "markdown", "id": "502fd281-a613-4246-b062-512345bbf24d", "metadata": {}, "source": [ "A few lectures ago, we generated the H-R diagram. At the time, we simply said that normal stars fall on a diagonal line between the top left and bottom right corners. Now we're going to ask ourselves the question \"How do stars form and evolve across that diagram?\".\n", "\n", "First, we need to create our star. Consider a spherical cloud of dust of radius $R$ and total mass $M$, as shown below. \n", "\n", "![DustCloud](Figures/Spherical_Dust_Cloud.png)\n", "\n", "The mass, $m$, contained within a spherical shell of radius of $r$, is given by\n", "$$\n", " m(r) = \\int^{r}_{0} \\rho(r')4\\pi r'^2 dr'\n", "$$\n", "where $\\rho(r)$ is the density of the cloud, and is a function of the radius. This mass acts as a gravitational point mass giving rise to an inward acceleration of\n", "$$\n", " g(r)=\\frac{Gm(r)}{r^2}.\n", "$$\n", "So we have a expression for the gravitational acceleration that a mass element within the sphere will experience. However, that is not the only force at play here. There is likely to be a pressure gradient across the cloud. To find an expression for this, consider the volume element, $\\Delta A \\Delta r$, enclosed in the grey area in the above diagram (the $\\Delta A$ part is difficult to image due to the 2-d representation of this figure). At the inner face of the volume element (radius=$r$), the force is $P(r)\\Delta A$. The force on the outer face (radius=$r+\\delta r$) is $(P(r)+\\frac{dP}{dr}\\Delta r)\\Delta A$. The resultant force experienced by the volume element is thus\n", "$$\n", " \\Delta F_{P} = (P(r)+\\frac{dP}{dr}\\Delta r - P(r))\\Delta A = \\frac{dP}{dr}\\Delta r \\Delta A\n", "$$\n", "Now, the mass volume of this element, $\\Delta M= \\rho(r)\\Delta r \\Delta A$. By using $F = \\Delta M \\; g(r) + \\Delta F_{P}$, we arrive at\n", "$$\n", " -\\frac{d^2r}{dt^2}=g(r)+\\frac{1}{\\rho (r)}\\frac{dP}{dr}\n", "$$\n", "Ok, so now we have an expression which gives us the acceleration, taking into account both gravity and pressure.\n", "\n", "### Freefall time\n", "The freefall time is the timescale required for collapse ignoring pressure. Consider a collapse from a starting radius, $r_0$, to a radius $r$, by a shell of mass $\\Delta m$, and which encloses a total mass $m_0$ (and where $m_0$ does not change during the collapse) as shown below.\n", "\n", "![DustCloud](Figures/Thin_Shell.png)\n", "\n", "By consering kinetic and potential energy, the velocity of the shell as it reaches a radius of $r$ is given by\n", "$$\n", " \\frac{1}{2} \\left(\\frac{dr}{dt}\\right)^2=\\frac{Gm_0}{r}-\\frac{Gm_0}{r_0}\n", "$$\n", "The freefall time is then given by\n", "$$\n", "t_{\\rm FF} = \\int^0_{r_0} \\frac{dt}{dr} = -\\int^0_{r_0} \\left[ \\frac{2Gm_0}{r}-\\frac{2Gm_0}{r_0}\\right]^{1/2} dr.\n", "$$\n", "By letting $x=r/r_0$, and using the expression \n", "$$\n", " \\int^1_0 \\left(\\frac{x}{1-x}\\right)^{1/2} dx=\\pi/2\n", "$$\n", "we get that\n", "$$\n", " t_{\\rm FF} = \\left[\\frac{3\\pi}{32G\\rho}\\right]^{1/2}.\n", "$$\n", "So what does this actually tell us? Let's assume a density of $\\rho=1$ Hydrogen atom/cm$^3$. Then we get" ] }, { "cell_type": "code", "execution_count": 3, "id": "2e29827c-e2fb-443f-b2aa-abdd9781d091", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The freefall time is: 0.05147008117133267 Gyr\n" ] } ], "source": [ "rho = 1*c.m_p/u.cm**3\n", "teff = ((3*np.pi)/(32*c.G*rho))**(1/2)\n", "print(\"The freefall time is:\", teff.to(u.Gyr))" ] }, { "cell_type": "markdown", "id": "a177594d-de41-4ef9-9221-d7b595f37a03", "metadata": {}, "source": [ "This is pretty short compared to the age of the Galaxy. Also, ignoring pressure is not always a bad assumption - assuming that the internal energy within the cloud is lost as radiation, or absorbed into electrons transitioning between states, then the pressure within dust clouds can be kept very very low. Eventually, however, the cloud will become opaque to the radiation it is producing - at this point, we'll get a balance between in inward force of gravity and the outward force of pressure. This is known as Hydrostatic equilibrium." ] }, { "cell_type": "markdown", "id": "c273aeda-ac1b-4ab0-8995-bc18f9e13f36", "metadata": {}, "source": [ "### Hydrostatic Equilibrium" ] }, { "cell_type": "markdown", "id": "72ba9137-62cc-4ebe-aeaf-d311c2742bf4", "metadata": {}, "source": [ "The formal condition for hydrotstatic equilibrium is\n", "$$\n", " -\\frac{d^2r}{dt^2}=0\n", "$$\n", "From this, we get\n", "$$\n", " \\frac{dP}{dr}=\\frac{-Gm(r)\\rho (r)}{r^2}\n", "$$\n", "By multiplying by $4\\pi r^3$ and integreating from $r=0$ to $r=R$ we get\n", "$$\n", " \\int^R_0 4\\pi r^3 \\frac{dP}{dr} dr = \\int^R_0 \\frac{-4\\pi G m(r)\\rho (r) r^2}{r} dr\n", "$$\n", "The right hand side is the gravitational potential energy of the system ($E_{\\rm GP}$), but the left is tricker, and needs to be integrated by parts to give\n", "$$\n", " [P(r)4\\pi r^3]^R_0-3\\int^R_0 P(r) 4 \\pi r^2 dr\n", "$$\n", "The first term is 0, as $P(r)=0$ at R (there is no pressure at the edge of the cloud). The second term is the same as $3

V$, where $

$ is the volume average pressure. Thus, we get\n", "$$\n", "

= -\\frac{1}{3}\\frac{E_{\\rm GP}}{V}\n", "$$\n", "This is the **Virial theorem**. So now we have the condition for reaching hydrostatic equilibrium. But how does the initial collapse even start?" ] }, { "cell_type": "markdown", "id": "ae67a326-4e07-4ae2-9522-83b70c8df94b", "metadata": {}, "source": [ "### The Jeans Mass" ] }, { "cell_type": "markdown", "id": "4c567ae1-32f8-430f-a1f4-941e2e79ba3d", "metadata": {}, "source": [ "When the total energy of a cloud (kinetic+potential) is less than 0, the cloud can be considered bound.\n", "$$\n", " E_{kinetic}+E_{\\rm GP}<0\n", "$$\n", "or\n", "$$\n", " E_{kinetic}<|E_{\\rm GP}|\n", "$$\n", "The kinetic energy of each particle is $\\frac{3}{2}kT$, so for N particles in a cloud, the kinetic energy of the cloud is\n", "$$\n", " E_{kinetic}=\\frac{3}{2}NkT\n", "$$\n", "The expression for the graviational potential energy of the cloud is given by $\\frac{GM^2}{R}$. Balancing these,we get\n", "$$\n", " M>\\frac{3kT}{2g\\bar{m}}R\n", "$$\n", "where $\\bar{m}$ is the average mass of the particles in the cloud. Thus, a cloud will collapse if it's mass exceeds this quanity, which is known as the **Jeans Mass**\n", "$$\n", " M_{\\rm J} = \\frac{3kT}{2g\\bar{m}}R\n", "$$\n", "This can also be expressed in terms of density as \n", "$$\n", " \\rho_{\\rm J} = \\frac{3}{4 \\pi M^2}\\left[\\frac{3kT}{2G\\bar{m}}\\right]^3\n", "$$\n", "That is, a cloud of mass $M$ will collapse if it's density exceeds $\\rho_{\\rm J}$." ] }, { "cell_type": "code", "execution_count": 5, "id": "b09508e1-e6d1-4e34-94b8-f61e66fce6fc", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The Jeans density for a cloud of 300 solar masses, made entirely of molecular Hydrogen, and with a temperature of 20 Kelvin, is:\n", "4.283217812346973e-21 kg / m3 (mass density).\n", "1280390.3116663964 1 / m3 (particle density).\n" ] } ], "source": [ "M = 300*u.solMass\n", "m = 2*c.m_p\n", "T = 20*u.K\n", "\n", "rho = (3/(4*np.pi*M**2)) * ((3*c.k_B*T)/(2*c.G*m))**3\n", "rho_n = rho/m\n", "\n", "print(\"The Jeans density for a cloud of 300 solar masses, made entirely of molecular Hydrogen, and with a temperature of 20 Kelvin, is:\")\n", "print(rho.to(u.kg/u.m**3), \" (mass density).\")\n", "print(rho_n.to(u.m**-3), \"(particle density).\")" ] }, { "cell_type": "code", "execution_count": 5, "id": "0c82601f-6e19-432d-bdb0-c226b816b086", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The Jeans density for a cloud of 1 solar masses, made entirely of molecular Hydrogen, and with a temperature of 20 Kelvin, is:\n", "3.854896031112276e-16 kg / m3 (mass density).\n", "115235128049.97566 1 / m3 (particle density).\n" ] } ], "source": [ "M = 1*u.solMass\n", "m = 2*c.m_p\n", "T = 20*u.K\n", "\n", "rho = (3/(4*np.pi*M**2)) * ((3*c.k_B*T)/(2*c.G*m))**3\n", "rho_n = rho/m\n", "\n", "print(\"The Jeans density for a cloud of 1 solar masses, made entirely of molecular Hydrogen, and with a temperature of 20 Kelvin, is:\")\n", "print(rho.to(u.kg/u.m**3), \" (mass density).\")\n", "print(rho_n.to(u.m**-3), \"(particle density).\")" ] }, { "cell_type": "code", "execution_count": null, "id": "4bead646-0e17-460d-b0ec-d9aea8208789", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.10" } }, "nbformat": 4, "nbformat_minor": 5 }