blog:articles:general:martian_weird_spring
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
blog:articles:general:martian_weird_spring [2019/08/07 15:17] – [Southern Hemisphere] Phil Ide | blog:articles:general:martian_weird_spring [2020/09/15 14:00] (current) – removed Phil Ide | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== Martian Spring Weirdness ====== | ||
- | {{ : | ||
- | To explain this, we need to understand everything that is contributing to the issue, so we can then draw some conclusions that fit the data. | ||
- | ===== Identifying the Problem ===== | ||
- | First off, let's take a snapshot of the data received from the InSight lander on Mars, and present it in an easily digestible form. | ||
- | |||
- | //Vertical lines indicate: **SE** (spring equinox), **SS** (summer solstice), **AE** (autumn equinox), **WS** (winter solstice)// | ||
- | |||
- | < | ||
- | To understand the **Sols**, the Spring Equinox occurs on March 23< | ||
- | <JS> | ||
- | wdata = [ | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | [" | ||
- | ]; | ||
- | |||
- | plot_temperature(' | ||
- | |||
- | function plot_temperature( canvas ){ | ||
- | var canvas = document.getElementById(canvas); | ||
- | | ||
- | let lbuffer = 25; | ||
- | let bbuffer = 40; | ||
- | |||
- | // calculate data spread | ||
- | let dataSpread = wdata[0][1] - wdata[wdata.length-1][1]; | ||
- | let min = 0; | ||
- | let peak = 0; | ||
- | for( i = 0; i < wdata.length; | ||
- | let tp = parseInt(wdata[i][2]); | ||
- | let tm = parseInt(wdata[i][4]); | ||
- | peak = (tp > peak) ? tp : peak; | ||
- | min = (tm < min) ? tm : min; | ||
- | } | ||
- | min -= 10; | ||
- | gheight = Math.abs(peak-min); | ||
- | gwidth = lbuffer+(dataSpread*10); | ||
- | gmax = 800; | ||
- | gmax = 814; | ||
- | canvas.style.border = 'solid 1px #000'; | ||
- | canvas.width = gmax; | ||
- | canvas.height = (bbuffer+(gheight*2))*1; | ||
- | |||
- | var ctx = canvas.getContext(" | ||
- | // | ||
- | // | ||
- | // | ||
- | | ||
- | // width | ||
- | ctx.strokeStyle = '# | ||
- | ctx.beginPath(); | ||
- | ctx.moveTo(lbuffer, | ||
- | ctx.lineTo(canvas.width-lbuffer, | ||
- | ctx.stroke(); | ||
- | | ||
- | ctx.moveTo(lbuffer, | ||
- | ctx.lineTo(lbuffer, | ||
- | ctx.stroke(); | ||
- | ctx.closePath(); | ||
- | | ||
- | // grid | ||
- | ctx.font = "8px Arial"; | ||
- | ctx.textAlign = " | ||
- | p = min; | ||
- | h = canvas.height-bbuffer | ||
- | vdiff = (canvas.height-(bbuffer*2)) / ((peak-min)/ | ||
- | for( i = min; i < peak; i += 10 ){ | ||
- | ctx.fillText(p, | ||
- | p += 10; | ||
- | h -= vdiff; | ||
- | } | ||
- | ctx.fillText(peak, | ||
- | ctx.font = "10px Arial"; | ||
- | ctx.fillText(" | ||
- | | ||
- | // now do sols | ||
- | ctx.font = "10px Arial"; | ||
- | ctx.textAlign = " | ||
- | ctx.fillText(" | ||
- | | ||
- | // first sol is the oldest | ||
- | ctx.font = "8px Arial"; | ||
- | dstart = wdata[wdata.length-1][1]*1; | ||
- | dend = wdata[0][1]*1; | ||
- | | ||
- | count = (dend-dstart); | ||
- | diff = (canvas.width-(lbuffer*2)) / count; | ||
- | // | ||
- | //diff = 750/ | ||
- | if( count % 2 > 0 ){ | ||
- | count++; | ||
- | } | ||
- | for( i = 0; i < count+2; i += 4 ){ | ||
- | ctx.fillText(dstart+i, | ||
- | } | ||
- | for( i = 2; i < count+2; i += 4 ){ | ||
- | ctx.fillText(dstart+i, | ||
- | } | ||
- | | ||
- | ctx.font = "12px Arial"; | ||
- | ctx.textAlign = " | ||
- | ctx.fillText(" | ||
- | | ||
- | ctx.font = "10px Arial"; | ||
- | ctx.textAlign = " | ||
- | ctx.fillStyle = '# | ||
- | ctx.fillText(" | ||
- | ctx.fillStyle = '# | ||
- | ctx.fillText(" | ||
- | ctx.fillStyle = '# | ||
- | ctx.fillText(" | ||
- | | ||
- | diff = (canvas.width-(lbuffer*2)) / (dend-dstart); | ||
- | vdiff = (canvas.height-(bbuffer*2)) / (peak-min); | ||
- | orig = {x: lbuffer*1, y: bbuffer}; | ||
- | | ||
- | ctx.strokeStyle = '# | ||
- | |||
- | // ############################### | ||
- | // add the spring equinox (sol 113 = 113-102 = ) | ||
- | ctx.beginPath(); | ||
- | ctx.moveTo(lbuffer+(diff*11), | ||
- | ctx.lineTo(lbuffer+(diff*11), | ||
- | ctx.stroke(); | ||
- | ctx.closePath(); | ||
- | ctx.fillStyle = '# | ||
- | ctx.fillText(' | ||
- | | ||
- | | ||
- | // bounding bars | ||
- | // max temp | ||
- | v = 2; | ||
- | max = -1000; | ||
- | min = 0; | ||
- | for( i = 0; i < wdata.length; | ||
- | max = (parseFloat(wdata[i][v]) > max) ? parseFloat(wdata[i][v]) : max; | ||
- | min = (parseFloat(wdata[i][v]) < min) ? parseFloat(wdata[i][v]) : min; | ||
- | } | ||
- | ctx.beginPath(); | ||
- | bar = calcY( max, orig, vdiff ); | ||
- | ctx.moveTo(lbuffer+1, | ||
- | ctx.lineTo(canvas.width-lbuffer, | ||
- | bar = calcY( min, orig, vdiff ); | ||
- | ctx.moveTo(lbuffer+1, | ||
- | ctx.lineTo(canvas.width-lbuffer, | ||
- | ctx.stroke(); | ||
- | ctx.closePath(); | ||
- | |||
- | // bounding bars | ||
- | // avg temp | ||
- | v = 3; | ||
- | max = -1000; | ||
- | min = 0; | ||
- | for( i = 0; i < wdata.length; | ||
- | max = (parseFloat(wdata[i][v]) > max) ? parseFloat(wdata[i][v]) : max; | ||
- | min = (parseFloat(wdata[i][v]) < min) ? parseFloat(wdata[i][v]) : min; | ||
- | } | ||
- | ctx.beginPath(); | ||
- | bar = calcY( max, orig, vdiff ); | ||
- | ctx.moveTo(lbuffer+1, | ||
- | ctx.lineTo(canvas.width-lbuffer, | ||
- | bar = calcY( min, orig, vdiff ); | ||
- | ctx.moveTo(lbuffer+1, | ||
- | ctx.lineTo(canvas.width-lbuffer, | ||
- | ctx.stroke(); | ||
- | ctx.closePath(); | ||
- | |||
- | // bounding bars | ||
- | // min temp | ||
- | v = 4; | ||
- | max = -1000; | ||
- | min = 0; | ||
- | for( i = 0; i < wdata.length; | ||
- | max = (parseFloat(wdata[i][v]) > max) ? parseFloat(wdata[i][v]) : max; | ||
- | min = (parseFloat(wdata[i][v]) < min) ? parseFloat(wdata[i][v]) : min; | ||
- | } | ||
- | ctx.beginPath(); | ||
- | bar = calcY( max, orig, vdiff ); | ||
- | ctx.moveTo(lbuffer+1, | ||
- | ctx.lineTo(canvas.width-lbuffer, | ||
- | bar = calcY( min, orig, vdiff ); | ||
- | ctx.moveTo(lbuffer+1, | ||
- | ctx.lineTo(canvas.width-lbuffer, | ||
- | ctx.stroke(); | ||
- | ctx.closePath(); | ||
- | | ||
- | // max temp | ||
- | vector = 2; | ||
- | sol = parseInt(wdata[wdata.length-1][1])-dstart; | ||
- | x = orig.x+(sol*diff); | ||
- | y = calcY( parseFloat(wdata[wdata.length-1][vector]), | ||
- | | ||
- | ctx.beginPath(); | ||
- | ctx.strokeStyle = '# | ||
- | ctx.moveTo( x, y ); | ||
- | | ||
- | for( i = wdata.length; | ||
- | v = i-1; | ||
- | sol = parseInt(wdata[v][1])-dstart; | ||
- | x = orig.x+(sol*diff); | ||
- | y = calcY( parseFloat(wdata[v][vector]), | ||
- | ctx.lineTo( x, y ); | ||
- | | ||
- | if( v == 0 || parseInt(wdata[v][1])+1 < parseInt(wdata[v-1][1]) ){ | ||
- | ctx.stroke(); | ||
- | ctx.closePath(); | ||
- | if( v > 0 ){ | ||
- | ctx.beginPath(); | ||
- | sol = parseInt(wdata[v-1][1])-dstart; | ||
- | x = orig.x+(sol*diff); | ||
- | y = calcY( parseFloat(wdata[v-1][vector]), | ||
- | ctx.moveTo( x-1, y-1 ); | ||
- | } | ||
- | } | ||
- | } | ||
- | | ||
- | // avg temp | ||
- | vector = 3; | ||
- | sol = parseInt(wdata[wdata.length-1][1])-dstart; | ||
- | x = orig.x+(sol*diff); | ||
- | y = calcY( parseFloat(wdata[wdata.length-1][vector]), | ||
- | | ||
- | ctx.beginPath(); | ||
- | ctx.strokeStyle = '# | ||
- | ctx.moveTo( x, y ); | ||
- | | ||
- | for( i = wdata.length; | ||
- | v = i-1; | ||
- | sol = parseInt(wdata[v][1])-dstart; | ||
- | x = orig.x+(sol*diff); | ||
- | y = calcY( parseFloat(wdata[v][vector]), | ||
- | ctx.lineTo( x, y ); | ||
- | | ||
- | if( v == 0 || parseInt(wdata[v][1])+1 < parseInt(wdata[v-1][1]) ){ | ||
- | ctx.stroke(); | ||
- | ctx.closePath(); | ||
- | if( v > 0 ){ | ||
- | ctx.beginPath(); | ||
- | sol = parseInt(wdata[v-1][1])-dstart; | ||
- | x = orig.x+(sol*diff); | ||
- | y = calcY( parseFloat(wdata[v-1][vector]), | ||
- | ctx.moveTo( x-1, y-1 ); | ||
- | } | ||
- | } | ||
- | } | ||
- | // min temp | ||
- | vector = 4; | ||
- | sol = parseInt(wdata[wdata.length-1][1])-dstart; | ||
- | x = orig.x+(sol*diff); | ||
- | y = calcY( parseFloat(wdata[wdata.length-1][vector]), | ||
- | | ||
- | ctx.beginPath(); | ||
- | ctx.strokeStyle = '# | ||
- | ctx.moveTo( x, y ); | ||
- | | ||
- | for( i = wdata.length; | ||
- | v = i-1; | ||
- | sol = parseInt(wdata[v][1])-dstart; | ||
- | x = orig.x+(sol*diff); | ||
- | y = calcY( parseFloat(wdata[v][vector]), | ||
- | ctx.lineTo( x, y ); | ||
- | | ||
- | if( v == 0 || parseInt(wdata[v][1])+1 < parseInt(wdata[v-1][1]) ){ | ||
- | ctx.stroke(); | ||
- | ctx.closePath(); | ||
- | if( v > 0 ){ | ||
- | ctx.beginPath(); | ||
- | sol = parseInt(wdata[v-1][1])-dstart; | ||
- | x = orig.x+(sol*diff); | ||
- | y = calcY( parseFloat(wdata[v-1][vector]), | ||
- | ctx.moveTo( x-1, y-1 ); | ||
- | } | ||
- | } | ||
- | } | ||
- | |||
- | } | ||
- | |||
- | function calcY( value, orig, vdiff ){ | ||
- | return orig.y+(Math.abs(value) * vdiff); | ||
- | } | ||
- | |||
- | </JS> | ||
- | ===== The Martian Orbit ===== | ||
- | The graph is proof that the maximum temperature each day is slowly declining. Remember that this is derived from real data coming from an experiment on the Martian surface. InSight is located approximately 135°E 4.5°N, which places it just 266km or so north of the equator. | ||
- | |||
- | Let's take a look at the inner planets as they were on 22< | ||
- | {{ : | ||
- | |||
- | Mars is in red, Earth is blue, Venus is yellow and Mercury is white. | ||
- | |||
- | The equinoxes and solstices for each planet are marked as ve, ss, ae and ws. VE stands for Vernal Equinox and this is also known as the Spring Equinox. At the equator, the vernal equinox occurs when the sun is directly overhead and when this occurs after winter. During spring, the position of the sun in the sky migrates north, until the moment of the summer solstice, when the sun is at its lowest angle vis the horizon and most northerly position. After that, it begins climbing back until it is once again above the equator - this is the autumn equinox. Thereafter, it descends towards the horizon again, this time south of the equator, until it reaches the winter solstice. Then it climbs again until it is once more above the equator and we reach the next vernal equinox. | ||
- | |||
- | The angle of the sun is described as L< | ||
- | |||
- | - L< | ||
- | - L< | ||
- | - L< | ||
- | - L< | ||
- | |||
- | Mars has an axial tilt very similar to Earth' | ||
- | |||
- | Since Mars is further away from the sun, the circumference of its orbit is much greater, and also means that it is moving //slower// in that orbit than Earth. This gives Mars a year of approximately 686 days as observed from Earth. It has its own rotational period though, which is (on average) 39 minutes and 53 seconds longer, so from a Martian perspective, | ||
- | |||
- | You'll also notice from the orbits that Earth has a pretty much circular orbit. This results in the months all being approximately the same length. Mars though has a very elliptical orbit. A month on Mars is deemed to pass while the planet crosses 30° around the sun. Since the orbit is elliptical, and since orbital mechanics requires objects to move slower as they approach aphelion - furthest distance from the sun - and faster when they approach perihelion, Martian months vary in length from 46 sols to 67. You'll note that Aphelion and Perihelion are also marked on the orbits for each planet as //ap// (aphelion) and //p// (perihelion). | ||
- | |||
- | The Martian spring occurs (in the northern hemisphere) when Mars is moving away from the sun, and summer when it begins its journey back. This is why these seasons are very long. | ||
- | |||
- | ===== Spring ===== | ||
- | InSight, as mentioned before, is just a few degrees north of the equator. Therefore, shortly after the vernal equinox, the sun is directly overhead. After that, the sun (at midday) is heading lower and lower in the sky to the north. This in itself is enough to cause a drop in temperature. Add to that the fact that Mars is moving further and further away from the sun, and you can begin to understand why it is getting colder. Mars will continue to move further away until it reaches aphelion, then begin the journey inward. Shortly after that inward journey begins, the summer solstice occurs. | ||
- | |||
- | Late spring and early summer bring long days and short nights. Long days allow the sun to heat the ground and the atmosphere, while the shorter nights don't have enough time to allow the temperatures to drop to the extent they will during the long winter nights. The inability of Mars to retain heat is displayed in the graph at the top of the article - nighttime temperatures drop eighty degrees centigrade. Shortening the night by two hours is sufficient to allow some heat to be conserved into the next day. | ||
- | |||
- | ===== Summer ===== | ||
- | As summer progresses, the sun - from InSight' | ||
- | |||
- | ===== Conclusion ===== | ||
- | What we have deduced, from examining the data, is that a combination of the elevation and angle of the sun in the daytime sky and the distance from the sun are causing temperatures to fall as spring progresses. We can expect temperatures to climb as the planet passes through apoheion and heads towards the autumn equinox. | ||
- | |||
- | This means we can make some predictions about Autumn and Winter. These seasons will be short, but the sun is going to be very low in the sky and the nights long. The word //cold// springs to mind. | ||
- | |||
- | ===== Southern Hemisphere ===== | ||
- | What does this mean for southern spring and summer seasons? Mars will be as close to the sun as it ever gets. According to the Kasting OPtimistic Model for determining the location of habitable zones around stars (a.k.a. Goldilocks Zones) - which is based on the triple-point of water - it is only during this brief period that Mars grazes the edge of the habitable zone. The days are long, and the nights are short, and proximity to the sun ensures temperatures can rise to a staggering +35°C. That would be a hot day on Earth. | ||
- | |||
- | Satellite data has already shown that such temperatures occur. | ||
- | |||
- | Hellas Planitia, an incredibly large and deep impact basin in the southern hemisphere, is so deep that air pressure in its lowest areas is sufficient to sustain liquid water. At the moment nearly all our experiments we've sent to the Martian surface have landed in the northern hemisphere. The Curiosity rover is an exception to this, but it is wandering around inside Gale Crater, just south of the equator and only a few hundred kilometres from InSight. It will be very interesting to get on-sight weather data from deeper in the southern hemisphere, which we'll surely do as our ability to land on much more [[: | ||
- | |||
- | //images courtesy of [[https:// | ||
- | Graph generated by the author, based on data available from NASA's [[https:// | ||
- | |||
- | ~~socialite~~ | ||
- | ~~DISCUSSION~~ |