#!/usr/bin/env python3
import matplotlib.pyplot as plt
import numpy as np
# .................................................. Define Functions
def fun1(t,omega,tau,ampl):
  y=ampl*np.cos(omega*t)*np.exp(-t/tau)
  return y
def fun2(t,omega1,omega2,ampl):
  y=ampl*np.sin(omega1*t)*np.sin(omega2*t)
  return y
# ............................... Numerical values for the parameters
omega=16.0
omega1=32.0
omega2=np.pi/2.0
tau=1.0
ampl=5.0
ampl2=10.0
# ................................................ Create Plot Arrays
t=np.linspace(0.0,2.0,81)
s1=fun1(t,omega,tau,ampl)
s2=fun2(t,omega1,omega2,ampl2)
# ........................................... Figure Width and Height
fig = plt.figure()
PlotGrid=fig.add_gridspec(3,2,width_ratios=[1.5,2],\
  height_ratios=[1.5,1,2])
SubPl0 = fig.add_subplot(PlotGrid[:2,0])
SubPl1 = fig.add_subplot(PlotGrid[0,1])
SubPl2 = fig.add_subplot(PlotGrid[1,1])
SubPl3 = fig.add_subplot(PlotGrid[2,:])
# ......................................................... subplot 0
SubPl0.plot(t,s1)
SubPl0.plot(t,ampl*np.exp(-t/tau))
SubPl0.grid(True)
SubPl0.xaxis.set_tick_params(labelsize=10)
SubPl0.yaxis.set_tick_params(labelsize=10)
SubPl0.set_ylabel(r'$A\,\cos(\omega t)\,{\rm e}^{-t/\tau}$',fontsize=10)
SubPl0.set_xlabel(r'$t$',fontsize=10)
# ......................................................... subplot 1
SubPl1.plot(t,s2)
SubPl1.plot(t,ampl2*np.sin(omega2*t))
SubPl1.grid(True)
SubPl1.xaxis.set_tick_params(labelsize=10)
SubPl1.yaxis.set_tick_params(labelsize=10)
SubPl1.set_ylabel(r'$B\,\sin(\omega_1 t)\,\sin(\omega_2 t)$',fontsize=10)
SubPl1.set_xlabel(r'$t$',fontsize=10)
# ......................................................... subplot 2
x=np.linspace(-1.0,1.0,41)
SubPl2.plot(x,np.exp(-x**2/0.2))
SubPl2.grid(True)
SubPl2.xaxis.set_tick_params(labelsize=10)
SubPl2.yaxis.set_tick_params(labelsize=10)
SubPl2.set_ylabel(r'${\rm e}^{-x^2/0.2}$',fontsize=14)
SubPl2.set_xlabel(r'$x$',fontsize=10)
# ......................................................... subplot 3
x=np.linspace(-2.0,2.0,41)
SubPl3.plot(x,np.tanh(x))
SubPl3.grid(True)
SubPl3.xaxis.set_tick_params(labelsize=10)
SubPl3.yaxis.set_tick_params(labelsize=10)
SubPl3.set_ylabel(r'$\tanh(x)$',fontsize=10)
SubPl3.set_xlabel(r'$x$',fontsize=10)
# ....................................................... Show Figure
plt.tight_layout()
plt.savefig('SubPlots.pdf',format='pdf')
plt.show()

