def test_volumetric_heating_rate_density(): """ For a constant volumetric heating rate [erg/s/cm^3] => net cooling rate [erg*cm^3/s] should go as 1 / rho^2. """ density = mass_hydrogen_cgs fc = container_setup(density=density) heating_rate = get_heating_rate(fc) myrand = np.random.RandomState(seed=8675309) for i in range(6): new_density = mass_hydrogen_cgs * \ random_logscale(-1, 1, random_state=myrand)[0] for field in fc.density_fields: fc[field] *= new_density / density new_heating_rate = get_heating_rate(fc) assert_almost_equal(new_heating_rate / heating_rate, (density / new_density)**2, decimal=1, err_msg="\nViolates density constraint!") density = new_density heating_rate = new_heating_rate
def test_volumetric_heating_rate_redshift(): """ For a constant volumetric heating rate [erg/s/cm^3] => net cooling rate [erg*cm^3/s] should be independent of redshift. """ redshift = 0. fc = container_setup(density=0.5 * mass_hydrogen_cgs, current_redshift=redshift) heating_rate = get_heating_rate(fc) myrand = np.random.RandomState(seed=8675309) for i in range(6): new_redshift = 3 * myrand.random_sample() fc.chemistry_data.a_value = 1.0 / (1.0 + new_redshift) / \ fc.chemistry_data.a_units new_heating_rate = get_heating_rate(fc) assert_almost_equal(new_heating_rate / heating_rate, 1.0, decimal=1, err_msg="\nViolates redshift constraint!") redshift = new_redshift heating_rate = new_heating_rate
def test_volumetric_heating_rate_a_units(): """ For a constant volumetric heating rate [erg/s/cm^3] => net cooling rate [erg*cm^3/s] should be independent of a_units. """ redshift = 0. fc = container_setup(density=0.5 * mass_hydrogen_cgs, current_redshift=redshift) heating_rate = get_heating_rate(fc) velocity_units = fc.chemistry_data.velocity_units myrand = np.random.RandomState(seed=8675309) for i in range(6): fc.chemistry_data.a_units = \ random_logscale(-0.5, 0.5, random_state=myrand)[0] fc.chemistry_data.a_value = 1.0 / (1.0 + redshift) / \ fc.chemistry_data.a_units new_velocity_units = fc.chemistry_data.a_units * \ (fc.chemistry_data.length_units / fc.chemistry_data.a_value) / \ fc.chemistry_data.time_units fc.chemistry_data.velocity_units = new_velocity_units fc["energy"] *= (velocity_units / new_velocity_units)**2 new_heating_rate = get_heating_rate(fc) assert_almost_equal(new_heating_rate / heating_rate, 1.0, decimal=1, err_msg="\nViolates a_units constraint!") velocity_units = new_velocity_units heating_rate = new_heating_rate
def test_volumetric_heating_rate_density_units(): """ For a constant volumetric heating rate [erg/s/cm^3] => net cooling rate [erg*cm^3/s] should be independent of density_units. """ fc = container_setup(density=0.5 * mass_hydrogen_cgs) density_units = fc.chemistry_data.density_units heating_rate = get_heating_rate(fc) myrand = np.random.RandomState(seed=8675309) for i in range(6): new_density_units = density_units * \ random_logscale(-2, 2, random_state=myrand)[0] fc.density_units = new_density_units new_heating_rate = get_heating_rate(fc) assert_almost_equal(new_heating_rate / heating_rate, 1.0, decimal=1, err_msg="\nViolates density_units constraint!") density_units = new_density_units heating_rate = new_heating_rate