예제 #1
0
    def add_particles_to_store(self, keys, attributes=[], values=[]):
        if len(keys) == 0:
            return

        all_attributes = []
        all_attributes.extend(attributes)
        all_values = []
        all_values.extend(values)

        mapping_from_attribute_to_default_value = {
            "stellar_type": 1 | units.stellar_type,
            "radius": 0 | units.RSun,
            "luminosity": 0 | units.LSun,
            "core_mass": 0 | units.MSun,
            "CO_core_mass": 0 | units.MSun,
            "core_radius": 0 | units.RSun,
            "convective_envelope_mass": 0 | units.MSun,
            "convective_envelope_radius": 0 | units.RSun,
            "epoch": 0 | units.Myr,
            "spin": 0 | units.yr**-1,
            "main_sequence_lifetime": 0 | units.Myr,
            "age": 0 | units.Myr
        }

        given_attributes = set(attributes)

        if not "initial_mass" in given_attributes:
            index_of_mass_attibute = attributes.index("mass")
            all_attributes.append("initial_mass")
            all_values.append(values[index_of_mass_attibute] * 1.0)

        for attribute, default_value in mapping_from_attribute_to_default_value.items(
        ):
            if not attribute in given_attributes:
                all_attributes.append(attribute)
                all_values.append(
                    default_value.as_vector_with_length(len(keys)))

        super(SSEParticles,
              self).add_particles_to_store(keys, all_attributes, all_values)

        added_particles = ParticlesSubset(self, keys)
        self._private.code_interface._evolve_particles(added_particles,
                                                       0 | units.yr)
예제 #2
0
    def add_particles_to_store(self, keys, attributes=[], values=[]):
        if len(keys) == 0:
            return

        given_attributes = set(attributes)

        if not "child1" in given_attributes:
            raise Exception("a binary must always have a child1 attribute")

        if not "child2" in given_attributes:
            raise Exception("a binary must always have a child2 attribute")

        all_attributes = []
        all_values = []
        for attribute, value in zip(attributes, values):
            all_attributes.append(attribute)
            if attribute == 'child1' or attribute == 'child2':
                value = value.copy_with_link_transfer(
                    None, self._private.code_interface.particles)
                all_values.append(value)
            else:
                all_values.append(value)

        mapping_from_attribute_to_default_value = {
            "eccentricity": 0.0 | units.none,
            "age": 0 | units.Myr
        }

        for attribute, default_value in mapping_from_attribute_to_default_value.iteritems(
        ):
            if not attribute in given_attributes:
                all_attributes.append(attribute)
                all_values.append(
                    default_value.as_vector_with_length(len(keys)))

        super(MOBSEBinaries,
              self).add_particles_to_store(keys, all_attributes, all_values)

        added_particles = ParticlesSubset(self, keys)
        self._private.code_interface._evolve_binaries(added_particles,
                                                      1e-08 | units.yr)