Galactic tide

Galactic tide

The Mice Galaxies NGC 4676

A galactic tide is tidal force experienced by objects subject to the gravitational field of a galaxy such as the Milky Way. Particular areas of interest concerning galactic tides include galactic collisions, the disruption of dwarf or satellite galaxies, and the Milky Way's tidal effect on the Oort cloud of the Solar System.

Origin

A body in proximity to a larger mass becomes stretched out by tidal forces

When one body (like the blue object in the diagrams at left) is in the gravitational field of a large mass (the yellow object), it becomes tidally distorted.

Gravitational attraction increases with decreasing distance; the closer any object A is to another object B, the more intensely A is affected by the object B's gravity, according to Newton's law of universal gravitation. This is also true of the different parts of an object; The surface of object A feels a stronger attraction to object B than the core of object A. When the other object's gravity is particularly strong, this causes the smaller object's surface to pull away from the core, and the object to distend and flatten in the direction of the larger object. The large body feels a similar but far weaker distortion caused in the same way by the gravitational field of the small body. In technical terms, the equilibrium shape of the small body is the one that minimizes its gravitational potential energy. In empty space, this would be a sphere. However, in the proximity of the large body, the lowest potential energy shape is an ovoid stretched along the axis connecting the two bodies.

For example, the tides on Earth are caused by the distortion that the Moon and the Sun cause to the Earth's gravitational field. In this case, the Earth's rotation is slow enough that the Earth is able to reshape itself so that the distortions remain oriented approximately in the direction of the Moon and the Sun. From the point of view of a person on the surface, we pass over the long axes of the distortions approximately twice a day for each, at which points high tide are experienced. Since the relative positions of the Earth, Sun and Moon are constantly changing, the tidal effects reinforce or counteract each other to various degrees. (see Spring tide).

Galactic tides demonstrate the same processes on a far grander scale. Tidally interacting galaxies will be stretched towards each other. They may eventually flatten out and distend towards the galaxy's centre, or suffer perturbations to their orbits. Furthermore, if the galaxies are rapidly rotating, their sections may not be able to keep up with the distortion like the Earth, and long tails of stars and other highly distorted regions can be formed, as seen in the diagrams in this article.

Effects on external galaxies

Galaxy collisions

The lengthy tidal tails of the colliding antennae galaxies

Tidal forces are dependent on the gradient of a gravitational field, rather than its strength, and so tidal effects are usually limited to the immediate surroundings of a galaxy. Two large galaxies undergoing collisions or passing nearby each other will be subjected to very large tidal forces, often producing the most visually striking demonstrations of galactic tides in action.

Two interacting galaxies will not always collide head-on (if at all), and the tidal forces will distort each galaxy along an axis pointing roughly towards and away from its perturber. As the two galaxies briefly orbit each other, these distorted regions, pulled away from the main body of each galaxy, will be sheared by the galaxy's differential rotation and flung off into intergalactic space, forming tidal tails. Such tails are typically strongly curved; where a tail appears straight, it is probably being viewed edge-on. The stars and gas that comprise the tails will have been pulled from the easily distorted galactic discs (or other extremities) of one or both bodies, rather than the gravitationally bound galactic centres.[1] Two very prominent examples of collisions producing tidal tails are the Mice Galaxies and the Antennae Galaxies.

Just as the Moon raises two water tides on opposite sides of the Earth, so a galactic tide produces two arms in its galactic companion. While a large tail is formed if the perturbed galaxy is equal to or less massive than its partner, if it is significantly more massive than the perturbing galaxy, then the trailing arm will be relatively minor, and the leading arm, sometimes called a bridge, will be more prominent.[1] Tidal bridges are typically harder to distinguish than tidal tails: in the first instance, the bridge may be absorbed by the passing galaxy or the resulting merged galaxy, making it visible for a shorter duration than a typical large tail. Secondly, if one of the two galaxies is in the foreground, then the second galaxy — and the bridge between them — may be partially obscured. Together, these effects can make it hard to see where one galaxy ends and the next begins. Tidal loops, where a tail joins with its parent galaxy at both ends, are rarer still.[2]

Satellite interactions

The Andromeda Galaxy. Note its satellite galaxy M32 (top left), whose outer arms have been stripped away by Andromeda's tidal forces.

Because tidal effects are strongest in the immediate vicinity of a galaxy, satellite galaxies are particularly likely to be affected. Such an external force upon a satellite can produce ordered motions within it, leading to large-scale observable effects: the interior structure and motions of a dwarf satellite galaxy may be severely affected by a galactic tide, inducing rotation (as with the tides of the Earth's oceans) or an anomalous mass-to-luminosity ratio.[3] Satellite galaxies can also be subjected to the same tidal stripping that occurs in galactic collisions, where stars and gas are torn from the extremities of a galaxy, possibly to be absorbed by its companion. The dwarf galaxy M32, a satellite galaxy of Andromeda, may have lost its spiral arms to tidal stripping, while a high star formation rate in the remaining core may be the result of tidally-induced motions of the remaining molecular clouds[4] (Because tidal forces can knead and compress the interstellar gas clouds inside galaxies, they induce large amounts of star formation in small satellites. The process is somewhat similar to making something hotter by squeezing it).

The stripping mechanism is the same as between two comparable galaxies, although its comparatively weak gravitational field ensures that only the satellite, not the host galaxy, is affected. If the satellite is very small compared to the host, the tidal debris tails produced are likely to be symmetric, and follow a very similar orbit, effectively tracing the satellite's path.[5] However, if the satellite is reasonably large—typically over one ten thousandth the mass of its host—then the satellite's own gravity may affect the tails, breaking the symmetry and accelerating the tails in different directions. The resulting structure is dependent on both the mass and orbit of the satellite, and the mass and structure of the conjectured galactic halo around the host, and may provide a means of probing the dark matter potential of a galaxy such as the Milky Way.[6]

Over many orbits of its parent galaxy, or if the orbit passes too close to it, a dwarf satellite may eventually be completely disrupted, to form a tidal stream of stars and gas wrapping around the larger body. It has been suggested that the extended discs of gas and stars around some galaxies, such as Andromeda, may be the result of the complete tidal disruption (and subsequent merger with the parent galaxy) of a dwarf satellite galaxy.[7]

Effects on bodies within a galaxy

Tidal effects are also present within a galaxy, where their gradients are likely to be steepest. This can have consequences for the formation of stars and planetary systems. Typically a star's gravity will dominate within its own system, with only the passage of other stars substantially affecting dynamics. However, at the outer reaches of the system, the star's gravity is weak and galactic tides may be significant. In our own solar system, the hypothetical Oort cloud, believed to be the source of long-period comets, lies in this transitional region.

Diagram of the Oort cloud.

The Oort cloud is believed to be a vast shell surrounding our solar system, possibly over a light-year in radius. Across such a vast distance, the gradient of the Milky Way's gravitational field plays a far more noticeable role. Because of this gradient, galactic tides may then deform an otherwise spherical Oort cloud, stretching the cloud in the direction of the galactic centre and compressing it along the other two axes, just as the Earth distends in response to the gravity of the Moon.

The Sun's gravity is sufficiently weak at such a distance that these small galactic perturbations may be enough to dislodge some planetesimals from such distant orbits, sending them towards the Sun and planets by significantly reducing their perihelia.[8] Such a body, being composed of a rock and ice mixture, would become a comet when subjected to the increased solar radiation present in the inner solar system.

It has been suggested that the galactic tide may also contribute to the formation of an Oort cloud, by increasing the perihelia of planetesimals with large aphelia.[9] This shows that the effects of the galactic tide are quite complex, and depend heavily on the behaviour of individual objects within a planetary system. Cumulatively the effect can be quite significant, however; up to 90% of all comets originating from an Oort cloud may be the result of the galactic tide.[10]

Effect on Earth

The galactic tide's effect is negligible on Earth, though could in theory be measured by sea level changes like other tides: If the sun's tidal effect is 1, then the Moon's is 2 and the Milky Way's is about 10−12.require('Module:No globals')

local p = {}

-- articles in which traditional Chinese preceeds simplified Chinese local t1st = { ["228 Incident"] = true, ["Chinese calendar"] = true, ["Lippo Centre, Hong Kong"] = true, ["Republic of China"] = true, ["Republic of China at the 1924 Summer Olympics"] = true, ["Taiwan"] = true, ["Taiwan (island)"] = true, ["Taiwan Province"] = true, ["Wei Boyang"] = true, }

-- the labels for each part local labels = { ["c"] = "Chinese", ["s"] = "simplified Chinese", ["t"] = "traditional Chinese", ["p"] = "pinyin", ["tp"] = "Tongyong Pinyin", ["w"] = "Wade–Giles", ["j"] = "Jyutping", ["cy"] = "Cantonese Yale", ["poj"] = "Pe̍h-ōe-jī", ["zhu"] = "Zhuyin Fuhao", ["l"] = "literally", }

-- article titles for wikilinks for each part local wlinks = { ["c"] = "Chinese language", ["s"] = "simplified Chinese characters", ["t"] = "traditional Chinese characters", ["p"] = "pinyin", ["tp"] = "Tongyong Pinyin", ["w"] = "Wade–Giles", ["j"] = "Jyutping", ["cy"] = "Yale romanization of Cantonese", ["poj"] = "Pe̍h-ōe-jī", ["zhu"] = "Bopomofo", }

-- for those parts which are to be treated as languages their ISO code local ISOlang = { ["c"] = "zh", ["t"] = "zh-Hant", ["s"] = "zh-Hans", ["p"] = "zh-Latn-pinyin", ["tp"] = "zh-Latn", ["w"] = "zh-Latn-wadegile", ["j"] = "yue-jyutping", ["cy"] = "yue", ["poj"] = "hak", ["zhu"] = "zh-Bopo", }

local italic = { ["p"] = true, ["tp"] = true, ["w"] = true, ["j"] = true, ["cy"] = true, ["poj"] = true, } -- Categories for different kinds of Chinese text local cats = { ["c"] = "", ["s"] = "", ["t"] = "", }

function p.Zh(frame) -- load arguments module to simplify handling of args local getArgs = require('Module:Arguments').getArgs local args = getArgs(frame) return p._Zh(args) end function p._Zh(args) local uselinks = not (args["links"] == "no") -- whether to add links local uselabels = not (args["labels"] == "no") -- whether to have labels local capfirst = args["scase"] ~= nil

        local t1 = false -- whether traditional Chinese characters go first
        local j1 = false -- whether Cantonese Romanisations go first
        local testChar
        if (args["first"]) then
                 for testChar in mw.ustring.gmatch(args["first"], "%a+") do
          if (testChar == "t") then
           t1 = true
           end
          if (testChar == "j") then
           j1 = true
           end
         end
        end
        if (t1 == false) then
         local title = mw.title.getCurrentTitle()
         t1 = t1st[title.text] == true
        end

-- based on setting/preference specify order local orderlist = {"c", "s", "t", "p", "tp", "w", "j", "cy", "poj", "zhu", "l"} if (t1) then orderlist[2] = "t" orderlist[3] = "s" end if (j1) then orderlist[4] = "j" orderlist[5] = "cy" orderlist[6] = "p" orderlist[7] = "tp" orderlist[8] = "w" end -- rename rules. Rules to change parameters and labels based on other parameters if args["hp"] then -- hp an alias for p ([hanyu] pinyin) args["p"] = args["hp"] end if args["tp"] then -- if also Tongyu pinyin use full name for Hanyu pinyin labels["p"] = "Hanyu Pinyin" end if (args["s"] and args["s"] == args["t"]) then -- Treat simplified + traditional as Chinese if they're the same args["c"] = args["s"] args["s"] = nil args["t"] = nil elseif (not (args["s"] and args["t"])) then -- use short label if only one of simplified and traditional labels["s"] = labels["c"] labels["t"] = labels["c"] end local body = "" -- the output string local params -- for creating HTML spans local label -- the label, i.e. the bit preceeding the supplied text local val -- the supplied text -- go through all possible fields in loop, adding them to the output for i, part in ipairs(orderlist) do if (args[part]) then -- build label label = "" if (uselabels) then label = labels[part] if (capfirst) then label = mw.language.getContentLanguage():ucfirst( Therefore, if tidal effects from the Moon were to raise the sea level 10 meters, the effect of the Milky Way would raise the sea about 10 Picometres, less than the size of an atom.

See also

References


-- Module:Hatnote -- -- -- -- This module produces hatnote links and links to related articles. It -- -- implements the and meta-templates and includes -- -- helper functions for other Lua hatnote modules. --


local libraryUtil = require('libraryUtil') local checkType = libraryUtil.checkType local mArguments -- lazily initialise Module:Arguments local yesno -- lazily initialise Module:Yesno

local p = {}


-- Helper functions


local function getArgs(frame) -- Fetches the arguments from the parent frame. Whitespace is trimmed and -- blanks are removed. mArguments = require('Module:Arguments') return mArguments.getArgs(frame, {parentOnly = true}) end

local function removeInitialColon(s) -- Removes the initial colon from a string, if present. return s:match('^:?(.*)') end

function p.findNamespaceId(link, removeColon) -- Finds the namespace id (namespace number) of a link or a pagename. This -- function will not work if the link is enclosed in double brackets. Colons -- are trimmed from the start of the link by default. To skip colon -- trimming, set the removeColon parameter to true. checkType('findNamespaceId', 1, link, 'string') checkType('findNamespaceId', 2, removeColon, 'boolean', true) if removeColon ~= false then link = removeInitialColon(link) end local namespace = link:match('^(.-):') if namespace then local nsTable = mw.site.namespaces[namespace] if nsTable then return nsTable.id end end return 0 end

function p.formatPages(...) -- Formats a list of pages using formatLink and returns it as an array. Nil -- values are not allowed. local pages = {...} local ret = {} for i, page in ipairs(pages) do ret[i] = p._formatLink(page) end return ret end

function p.formatPageTables(...) -- Takes a list of page/display tables and returns it as a list of -- formatted links. Nil values are not allowed. local pages = {...} local links = {} for i, t in ipairs(pages) do checkType('formatPageTables', i, t, 'table') local link = t[1] local display = t[2] links[i] = p._formatLink(link, display) end return links end

function p.makeWikitextError(msg, helpLink, addTrackingCategory) -- Formats an error message to be returned to wikitext. If -- addTrackingCategory is not false after being returned from -- Module:Yesno, and if we are not on a talk page, a tracking category -- is added. checkType('makeWikitextError', 1, msg, 'string') checkType('makeWikitextError', 2, helpLink, 'string', true) yesno = require('Module:Yesno') local title = mw.title.getCurrentTitle() -- Make the help link text. local helpText if helpLink then helpText = ' (help)' else helpText = end -- Make the category text. local category if not title.isTalkPage and yesno(addTrackingCategory) ~= false then category = 'Hatnote templates with errors' category = string.format( '%s:%s', mw.site.namespaces[14].name, category ) else category = end return string.format( '%s', msg, helpText, category ) end


-- Format link -- -- Makes a wikilink from the given link and display values. Links are escaped -- with colons if necessary, and links to sections are detected and displayed -- with " § " as a separator rather than the standard MediaWiki "#". Used in -- the template.


function p.formatLink(frame) local args = getArgs(frame) local link = args[1] local display = args[2] if not link then return p.makeWikitextError( 'no link specified', 'Template:Format hatnote link#Errors', args.category ) end return p._formatLink(link, display) end

function p._formatLink(link, display) -- Find whether we need to use the colon trick or not. We need to use the -- colon trick for categories and files, as otherwise category links -- categorise the page and file links display the file. checkType('_formatLink', 1, link, 'string') checkType('_formatLink', 2, display, 'string', true) link = removeInitialColon(link) local namespace = p.findNamespaceId(link, false) local colon if namespace == 6 or namespace == 14 then colon = ':' else colon = end -- Find whether a faux display value has been added with the | magic -- word. if not display then local prePipe, postPipe = link:match('^(.-)|(.*)$') link = prePipe or link display = postPipe end -- Find the display value. if not display then local page, section = link:match('^(.-)#(.*)$') if page then display = page .. ' § ' .. section end end -- Assemble the link. if display then return string.format('%s', colon, link, display) else return string.format('%s%s', colon, link) end end


-- Hatnote -- -- Produces standard hatnote text. Implements the template.


function p.hatnote(frame) local args = getArgs(frame) local s = args[1] local options = {} if not s then return p.makeWikitextError( 'no text specified', 'Template:Hatnote#Errors', args.category ) end options.extraclasses = args.extraclasses options.selfref = args.selfref return p._hatnote(s, options) end

function p._hatnote(s, options) checkType('_hatnote', 1, s, 'string') checkType('_hatnote', 2, options, 'table', true) local classes = {'hatnote'} local extraclasses = options.extraclasses local selfref = options.selfref if type(extraclasses) == 'string' then classes[#classes + 1] = extraclasses end if selfref then classes[#classes + 1] = 'selfref' end return string.format( '
%s
', table.concat(classes, ' '), s )

end

return p-------------------------------------------------------------------------------- -- Module:Hatnote -- -- -- -- This module produces hatnote links and links to related articles. It -- -- implements the and meta-templates and includes -- -- helper functions for other Lua hatnote modules. --


local libraryUtil = require('libraryUtil') local checkType = libraryUtil.checkType local mArguments -- lazily initialise Module:Arguments local yesno -- lazily initialise Module:Yesno

local p = {}


-- Helper functions


local function getArgs(frame) -- Fetches the arguments from the parent frame. Whitespace is trimmed and -- blanks are removed. mArguments = require('Module:Arguments') return mArguments.getArgs(frame, {parentOnly = true}) end

local function removeInitialColon(s) -- Removes the initial colon from a string, if present. return s:match('^:?(.*)') end

function p.findNamespaceId(link, removeColon) -- Finds the namespace id (namespace number) of a link or a pagename. This -- function will not work if the link is enclosed in double brackets. Colons -- are trimmed from the start of the link by default. To skip colon -- trimming, set the removeColon parameter to true. checkType('findNamespaceId', 1, link, 'string') checkType('findNamespaceId', 2, removeColon, 'boolean', true) if removeColon ~= false then link = removeInitialColon(link) end local namespace = link:match('^(.-):') if namespace then local nsTable = mw.site.namespaces[namespace] if nsTable then return nsTable.id end end return 0 end

function p.formatPages(...) -- Formats a list of pages using formatLink and returns it as an array. Nil -- values are not allowed. local pages = {...} local ret = {} for i, page in ipairs(pages) do ret[i] = p._formatLink(page) end return ret end

function p.formatPageTables(...) -- Takes a list of page/display tables and returns it as a list of -- formatted links. Nil values are not allowed. local pages = {...} local links = {} for i, t in ipairs(pages) do checkType('formatPageTables', i, t, 'table') local link = t[1] local display = t[2] links[i] = p._formatLink(link, display) end return links end

function p.makeWikitextError(msg, helpLink, addTrackingCategory) -- Formats an error message to be returned to wikitext. If -- addTrackingCategory is not false after being returned from -- Module:Yesno, and if we are not on a talk page, a tracking category -- is added. checkType('makeWikitextError', 1, msg, 'string') checkType('makeWikitextError', 2, helpLink, 'string', true) yesno = require('Module:Yesno') local title = mw.title.getCurrentTitle() -- Make the help link text. local helpText if helpLink then helpText = ' (help)' else helpText = end -- Make the category text. local category if not title.isTalkPage and yesno(addTrackingCategory) ~= false then category = 'Hatnote templates with errors' category = string.format( '%s:%s', mw.site.namespaces[14].name, category ) else category = end return string.format( '%s', msg, helpText, category ) end


-- Format link -- -- Makes a wikilink from the given link and display values. Links are escaped -- with colons if necessary, and links to sections are detected and displayed -- with " § " as a separator rather than the standard MediaWiki "#". Used in -- the template.


function p.formatLink(frame) local args = getArgs(frame) local link = args[1] local display = args[2] if not link then return p.makeWikitextError( 'no link specified', 'Template:Format hatnote link#Errors', args.category ) end return p._formatLink(link, display) end

function p._formatLink(link, display) -- Find whether we need to use the colon trick or not. We need to use the -- colon trick for categories and files, as otherwise category links -- categorise the page and file links display the file. checkType('_formatLink', 1, link, 'string') checkType('_formatLink', 2, display, 'string', true) link = removeInitialColon(link) local namespace = p.findNamespaceId(link, false) local colon if namespace == 6 or namespace == 14 then colon = ':' else colon = end -- Find whether a faux display value has been added with the | magic -- word. if not display then local prePipe, postPipe = link:match('^(.-)|(.*)$') link = prePipe or link display = postPipe end -- Find the display value. if not display then local page, section = link:match('^(.-)#(.*)$') if page then display = page .. ' § ' .. section end end -- Assemble the link. if display then return string.format('%s', colon, link, display) else return string.format('%s%s', colon, link) end end


-- Hatnote -- -- Produces standard hatnote text. Implements the template.


function p.hatnote(frame) local args = getArgs(frame) local s = args[1] local options = {} if not s then return p.makeWikitextError( 'no text specified', 'Template:Hatnote#Errors', args.category ) end options.extraclasses = args.extraclasses options.selfref = args.selfref return p._hatnote(s, options) end

function p._hatnote(s, options) checkType('_hatnote', 1, s, 'string') checkType('_hatnote', 2, options, 'table', true) local classes = {'hatnote'} local extraclasses = options.extraclasses local selfref = options.selfref if type(extraclasses) == 'string' then classes[#classes + 1] = extraclasses end if selfref then classes[#classes + 1] = 'selfref' end return string.format( '
%s
', table.concat(classes, ' '), s )

end

return p
  1. ^ a b
  2. ^
  3. ^
  4. ^
  5. ^
  6. ^
  7. ^
  8. ^
  9. ^
  10. ^