Sunspots

Sunspots are dark areas on the sun's surface. They have been observed for centuries. The sunspot record shows a clear 11 year cycle.

Sunspots are magnetic storms on the sun's surface. They persist for days or even months and are vortices analagous to hurricanes or typhoons.

The red eye of Jupiter is also a magnetic storm. It has very likely persisted for millenia, having been stable since it was first observed.

The sun's magnetic field in fact follows a 22 year cycle. The poles are (approximately) aligned with the sun's equator, and hence the plane of the ecliptic.

However, the field appears to move, over a 22 year period up and down across this equator.

The period of 11 years is intriguingly close to the 11.86 year orbital period of Jupiter.

Nicola Scafetta [1] constructs a harmonic model based on three periods.

  • the period of Jupiter = 12.86

  • A period of 10.87 years.

  • 0.5 * the interval between Jupiter/Saturn conjunctions, also known as the Jupiter/Saturn tidal spring period.

The second period is close to the 11 year solar cycle. The period of this cycle has exhibited some variation throughout the observational history, with cycles as long as 15 years and as short as 9 years.

Scafetta set the phase of these cycles as follows:

The third important component of the model is the phase timing of the three harmonics. We use T_1 = 2000.475 (the synodic conjunction date of Jupiter and Saturn, 23/June/2000 relative to the Sun, when the spring tide should be stronger); T_2 = 2002.364 (which is calculated through regression of the harmonic model against the sunspot number record by keeping all other parameters fixed); and T_3 = 1999.381 (the perihelion date of Jupiter, 20/May/1999, when Jupiter’s induced tide is stronger)

As a result of these frequencies, beat frequencies emerge in the model. When the cycles are in phase, they interfere constructively to produce stronger activity, when out of phase they interfere destructively.

Scafetta's model fits extremely well with the sunspot record and in particular fits well with the solar minima such as the Dalton and Maunder periods.

Data Credits

The Sunspot Number data can be freely downloaded.

http://www.sidc.be/silso/datafiles

e.g.: "Source: WDC-SILSO, Royal Observatory of Belgium, Brussels".

The dataset being used in this notebook is the monthly total data.

Harmony in solar systems

Gravity

The Kirkwood gaps in the asteroid belt are regions where the orbital period is in resonance with that of Jupiter. It is not possible to have a stable orbit in these regions.

In short, to have a stable orbit a planet needs to avoid resonance with Jupiter.

Tidal locking

Our planets and moons have been orbiting for billions of years. During that time there has been tidal locking (for example of the moon and earth).

Magnetism, solar wind,

As the earth orbits the sun it passes through the Sun's magnetic field. The interactions with the field vary over time, depending on the relative orientation of earth's orbit and the Sun's magnetic field.

Further, this field itself varies in strength.

There is evidence that these variations are in part driven by resonance with Jupiter, Saturn and indeed other planets.

Gravity will likely be driving tidal currents, but the varying magnetic field may also be a driver.

Although these fields are very weak there have been billions of years for resonance to build up.

Further, we perhaps should not be surprised that the fundamental frequency of the sun's magnetic resonance is close to, but not exactly aligned with that of Jupiter.

A dynamo resonating at with the same period (or a harmonic) as that of Jupiter would likely be unstable, in the same way as asteroids avoid the Kirkwood gaps.

Quakes and volcanic activity

Earthquakes and volcanic activity are driven by the movement of magma within the earth's core.

The core is a conductor, passing through a varying magnetic field. When things are in phase, we can expect stronger magnetic fields and more energy transferred to the core. This may result in increased turbulence in the magma, increasingly the likelihood of volcanic activity and earthquakes.

There is a hint of this in this analysis of large earthquakes in the last 100 years:

https://tallbloke.wordpress.com/2015/01/31/big-earthquakes-generally-occur-at-low-sunspot-numbers/

Note also, that when the magnetic resonance is in phase, so is the graviational resonance, again potentially adding to the earthquake risk.

In reality, there are likely many harmonies involved, and as per the sunspot activiy, the dominant frequencies may be close to, but slightly displaced from the (primary) driving forces, namely Jupiter and the Sun.

Correlation between climate, quakes and volcanic activity

It has been noted that volcanic eruptions can have an significant impact on climate, due to the dust that ends up in the atmosphere following a major eruption.

There is an intriguing possiblity that increased solar activity also increases quake and volanic activity. Hence, changes in the climate due to volcanoes may actually be synchronised with the periods of increased solar activity.

Climate change

It should also be noted that the melting ice-caps are changing the pressure on magma chambers, so again there is a relationship between climate and seismology.

References

[1] Centennial variations in sunspot number, open solar flux, and streamer belt width: 2. Comparison with the geomagnetic data M. Lockwood1, M. J. Owens1, and L. Barnard1

Department of Meteorology, University of Reading, Reading, UK

http://onlinelibrary.wiley.com/doi/10.1002/2014JA019972/epdf

[2] Coronal streamer belt asymmetries and seasonal solar wind variations deduced from Wind and Ulysses data

N. U. Crooker, A. J. Lazarus, J. L. Phillips, J. T. Steinberg, A. Szabo, R. P. Lepping, E. J. Smith

http://onlinelibrary.wiley.com/doi/10.1029/96JA03681/abstract

[3] Multi-scale harmonic model for solar and climate cyclical variation throughout the Holocene based on Jupiter–Saturn tidal frequencies plus the 11-year solar dynamo cycle

Nicola Scafetta

Scafetta, N., Multi-scale harmonic model for solar and climate cyclical variation throughout the Holocene based on Jupiter–Saturn tidal.... Journal of Atmospheric and Solar-Terrestrial Physics (2012), doi:10.1016/j.jastp.2012.02.016

ACRIM (Active Cavity Radiometer Solar Irradiance Monitor Lab) & Duke University, Durham, NC 27708, USA

http://www.fel.duke.edu/~scafetta/pdf/Scafetta_JStides.pdf

Scafetta Harmonic model


In [ ]:
jup = 11.86
nep = 164.8
sat = 29.4571

x = (1/jup - 1/sat)

jupsat = 1/(2 * x)

x = (1/jup - 1/nep)
jupnep = 1/(2 * x)

jupsat, jupnep

In [ ]:
period = [jupsat, 10.87, jup, 11.07]

phase = [2000.475, 2002.364, 1999.381, 2009]

weight = [0.83, 1.0, 0.55, 0.25]

In [ ]:
import datetime
import pandas
import math

from karmapi import base

In [ ]:
%matplotlib inline

In [ ]:
!head 'SN_m_tot_V2.0.csv'

In [ ]:
df = pandas.read_csv('SN_m_tot_V2.0.csv', 
                     names=['year', 'month', 'time', 'sunspot', 'sd', 'status'], 
                     sep=';',
                     header=None,
                     index_col=False)
def add_date(x):
    
    # FIXME -- turn time into day
    return datetime.date(int(x.year), int(x.month), 1)

df.index = df.apply(add_date, axis=1)

df.index = pandas.date_range(datetime.date(int(df.index[0].year), 
                                           int(df.index[0].month), 1), 
                             periods=len(df), freq='M')

In [ ]:
df['year2'] = pandas.np.linspace(1749, 2016.67, 3212)

In [ ]:
# add columns for the harmonic model
#df = pandas.DataFrame(dict(year=pandas.np.linspace(1750, 2050, 10000)))
pi = math.pi
cos = pandas.np.cos
for ii in range(4):
    
    df['h{}'.format(ii + 1)] = weight[ii] * cos((2 * pi) * ((df.year2 - phase[ii]) / period[ii]))
    
df['model'] = df.h1 + df.h2 + df.h3 + df.h4

In [ ]:
df.model.plot()

In [ ]:
df['guess'] = df.model.clip_lower(0.0) * 150

pandas.rolling_mean(df['sunspot'], 12).plot(figsize=(12,4), style='r')

df['guess'].plot(style='b')

((df.h3 * 20) -10).plot(style='g')
((df.h2 * 20) -40).plot(style='k', grid=True)

In [ ]:
df.tail()

Fourier transforms of sunspot data


In [ ]:
df.index = pandas.to_datetime(df.index)

In [ ]:
df.sunspot.plot(grid=True, figsize=(12,4))

In [ ]:
xx = base.fft.fft(df.sunspot)

fdf = pandas.DataFrame(dict(real=xx.real, imag=xx.imag))

fdf['power'] = ((fdf.imag ** 2.) + (fdf.real ** 2.0)) ** 0.5

In [ ]:
fdf[20:30].plot()

In [ ]:
def freq(x, n):
    
    m = len(x)
    
    for nn in range(n-1, n+2):
        print(nn, 'years: {}'.format((m / nn)/12))

In [ ]:
freq(xx, 24)

In [ ]:
df.sunspot.head()

In [ ]:
df.info()

In [ ]:
ton = df[(df.year >= 1754) & (df.year <= 2008) ]

In [ ]:
xx = base.fft.fft(ton.sunspot)

fdf = pandas.DataFrame(dict(real=xx.real, imag=xx.imag))

fdf['power'] = ((fdf.imag ** 2.) + (fdf.real ** 2.0)) ** 0.5

fdf.index = pandas.date_range(df.index[0], periods=len(fdf), freq='M')

In [ ]:
fdf.head()

In [ ]:
df.info()

In [ ]:
freq(fdf, 23)

In [ ]:
len(df), len(fdf)

In [ ]:
fdf.real.plot()

In [ ]:
x = 1
y = len(fdf)/2
#y = 1 * x 
#y=5
fdf[x:int(x+y)].real.plot(grid=True)

In [ ]:
# remove a frequency...
point = 25
xx[point:-point] = 0.0
xx[int(point/2)] = 0.0
#xx[point+1:] = 0.0

In [ ]:
smooth = pandas.np.fft.ifft(xx)

In [ ]:
fdf['guess'] = smooth.real

In [ ]:
fdf.guess.plot()

In [ ]:
fdf.describe()

In [ ]:
df['guess'] = fdf.guess

In [ ]:
df[['guess', 'sunspot']][1500:].plot()

In [ ]:
365.25 * 11.86/10.86

In [ ]:
11.86/10.86

In [ ]:
x = .092081

x / 1. + x

In [ ]:
pyplot.plot?

In [ ]:
len(df.year)

In [ ]:
266 * 12

In [ ]:
df.info()

In [ ]:
220 / 12.

In [ ]:
df.sunspot.describe()

In [ ]:
n = 12 * 50
offset = 48
end = offset + 120
#end = n/2

cmap = 'rainbow'
#cmap = None

so = base.sono(df.sunspot, n)

from matplotlib import pyplot

so = pandas.np.array(so)
pyplot.figure(figsize=(12, 4))


#pyplot.subplot(2,1,1)
pyplot.title('offset: {} end: {} n: {}'.format(offset/12, end/12, n/12))
pyplot.imshow(so[:, offset:int(end)].T.imag, aspect='auto', cmap='rainbow')
#pyplot.subplot(2,1,2)
#pyplot.imshow(so[:, offset:int(end)].T.real, aspect='auto', cmap=cmap)

#pyplot.yticks([x + 120 for x in pyplot.yticks()])
yt = pyplot.yticks()
#
#yt = pyplot.yticks(yt[0] + offset)
#pyplot.grid(True)

In [ ]:
n = 12 * 50
offset = 100
end = 144
so = base.sono(df.sunspot, n)

from matplotlib import pyplot

so = pandas.np.array(so)
pyplot.figure(figsize=(12, 4))

#end = n/2
pyplot.subplot(2,1,1)
pyplot.title('offset: {} end: {} n: {}'.format(offset/12, end/12, n/12))

pyplot.imshow(so[:, offset:int(end)].T.imag, aspect='auto')
pyplot.subplot(2,1,2)
pyplot.imshow(so[:, offset:int(end)].T.real, aspect='auto')

#pyplot.yticks([x + 120 for x in pyplot.yticks()])
yt = pyplot.yticks()
#
#yt = pyplot.yticks(yt[0] + offset)
pyplot.grid(True)

In [ ]:
from karmapi import show
show.sono2(so,offset=48, end=300)

In [ ]:
so.shape

In [ ]:
df.sunspot.plot()

In [ ]:
freq(df, 2)

In [ ]:
1749 + (1500/12)

In [ ]:


In [ ]:


In [ ]:


In [ ]:
pyplot.plot(so[0][120:144])

In [ ]:
x = pandas.np.random.random(3200)

In [ ]:
xsono = base.sono(x, 5 * 120)
xsono = pandas.np.array(xsono)

In [ ]:
pyplot.imshow(xsono.T.imag, aspect='auto')

In [ ]: