def serialize(self, rm):
        """
        Serialize rupture model to NRML file
        """
        srcm = SourceModelXMLWriter(None)
        with NRMLFile(self.dest, 'w') as fh:
            root = etree.Element(
                'nrml', nsmap=SERIALIZE_NS_MAP
            )

            if isinstance(rm, ComplexFaultRuptureModel):
                rm_elem = etree.SubElement(root, 'complexFaultRupture')
                mag = etree.SubElement(rm_elem, 'magnitude')
                mag.text = str(rm.magnitude)
                rake = etree.SubElement(rm_elem, 'rake')
                rake.text = str(rm.rake)
                hypocenter = etree.SubElement(rm_elem, 'hypocenter',
                    attrib={'lon': rm.hypocenter[0], 'lat': rm.hypocenter[1],
                    'depth': rm.hypocenter[2]})
                srcm._append_complex_fault_geom(rm_elem, rm.geometry)
            elif isinstance(rm, SimpleFaultRuptureModel):
                rm_elem = etree.SubElement(root, 'simpleFaultRupture')
                mag = etree.SubElement(rm_elem, 'magnitude')
                mag.text = str(rm.magnitude)
                rake = etree.SubElement(rm_elem, 'rake')
                rake.text = str(rm.rake)
                hypocenter = etree.SubElement(rm_elem, 'hypocenter',
                    attrib={'lon': rm.hypocenter[0], 'lat': rm.hypocenter[1],
                    'depth': rm.hypocenter[2]})
                srcm._append_simple_fault_geom(rm_elem, rm.geometry)
            else:
                raise ValueError('Rupture model %s not recognized' % rm.__class__)

            fh.write(etree.tostring(root, pretty_print=True,
                xml_declaration=True, encoding='UTF-8'))