Microscopic 3-Temperature-Model¶
Here we adapt the NTM from the last example to allow for calculations of the magnetization within the microscopic 3-temperature-model as proposed by:
We need to solve the following coupled differential equations:
\begin{align} c_e(T_e) \rho \frac{\partial T_e}{\partial t} & = & \frac{\partial}{\partial z} \left( k_e(T_e) \frac{\partial T_e}{\partial z} \right) - G_{ep}(T_e-T_p) + S(z, t) \\ c_p(T_p) \rho \frac{\partial T_p}{\partial t} & = & \frac{\partial}{\partial z} \left( k_p(T_p) \frac{\partial T_p}{\partial z} \right) + G_{ep}(T_e-T_p) \\ \frac{\partial m}{\partial t} & = & R m \frac{T_p}{T_C} \left( 1 - m \coth\left( \frac{m T_C}{T_e} \right) \right) \end{align}
We treat the temperature of the 3rd subsystem as magnetization \(m\). For that we have to set its heat_capacity
to \(1/\rho\) and thermal_conductivity
to zero. We put the complete right term of the last equation in the sub_system_coupling
term for the 3rd subsystem. Here, we need to rewrite the kotangens hyperbolicus in Python as
The values of the used parameters are not experimentally verified.
Setup¶
Do all necessary imports and settings.
[1]:
import udkm1Dsim as ud
u = ud.u # import the pint unit registry from udkm1Dsim
import scipy.constants as constants
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
u.setup_matplotlib() # use matplotlib with pint units
Structure¶
to the structure-example for more details.
[2]:
Co = ud.Atom('Co')
Ni = ud.Atom('Ni')
CoNi = ud.AtomMixed('CoNi')
CoNi.add_atom(Co, 0.5)
CoNi.add_atom(Ni, 0.5)
Si = ud.Atom('Si')
[3]:
prop_CoNi = {}
prop_CoNi['heat_capacity'] = ['lambda T: 0.1*T',
532*u.J/u.kg/u.K,
1/7000
]
prop_CoNi['therm_cond'] = [20*u.W/(u.m *u.K),
80*u.W/(u.m *u.K),
0]
R = 25.3/1e-12
Tc = 1388
g = 4.0e18
prop_CoNi['sub_system_coupling'] = ['lambda T: -{:f}*(T[0]-T[1])'.format(g),
'lambda T: {:f}*(T[0]-T[1])'.format(g),
'lambda T: {0:f}*T[2]*T[1]/{1:f}*(1-T[2]* (1 + 2/(np.exp(2*T[2]*{1:f}/T[0]) - 1) ))'.format(R, Tc)
]
prop_CoNi['lin_therm_exp'] = [0, 11.8e-6, 0]
prop_CoNi['sound_vel'] = 4.910*u.nm/u.ps
prop_CoNi['opt_ref_index'] = 2.9174+3.3545j
layer_CoNi = ud.AmorphousLayer('CoNi', 'CoNi amorphous', thickness=1*u.nm,
density=7000*u.kg/u.m**3, atom=CoNi, **prop_CoNi)
[4]:
prop_Si = {}
prop_Si['heat_capacity'] = [100*u.J/u.kg/u.K, 603*u.J/u.kg/u.K, 1]
prop_Si['therm_cond'] = [0, 100*u.W/(u.m *u.K), 0]
prop_Si['sub_system_coupling'] = [0, 0, 0]
prop_Si['lin_therm_exp'] = [0, 2.6e-6, 0]
prop_Si['sound_vel'] = 8.433*u.nm/u.ps
prop_Si['opt_ref_index'] = 3.6941+0.0065435j
layer_Si = ud.AmorphousLayer('Si', "Si amorphous", thickness=1*u.nm,
density=2336*u.kg/u.m**3, atom=Si, **prop_Si)
[5]:
S = ud.Structure('CoNi')
S.add_sub_structure(layer_CoNi, 20)
S.add_sub_structure(layer_Si, 50)
[6]:
S.visualize()

Initialize Heat and the Excitation¶
[7]:
h = ud.Heat(S, True)
h.save_data = False
h.disp_messages = True
[8]:
h.excitation = {'fluence': [30]*u.mJ/u.cm**2,
'delay_pump': [0]*u.ps,
'pulse_width': [0.05]*u.ps,
'multilayer_absorption': True,
'wavelength': 800*u.nm,
'theta': 45*u.deg}
# temporal and spatial grid
delays = np.r_[-1:5:0.005]*u.ps
_, _, distances = S.get_distances_of_layers()
Calculate Heat Diffusion¶
The init_temp
sets the magnetization in the 3rd subsystem to 1
for CoNi and 0
for Si.
[9]:
# enable heat diffusion
h.heat_diffusion = True
# set the boundary conditions
h.boundary_conditions = {'top_type': 'isolator', 'bottom_type': 'isolator'}
# The resulting temperature profile is calculated in one line:
init_temp = np.ones([S.get_number_of_layers(), 3])
init_temp[:, 0] = 300
init_temp[:, 1] = 300
init_temp[20:, 2] = 0
temp_map, delta_temp = h.get_temp_map(delays, init_temp)
Surface incidence fluence scaled by factor 0.7071 due to incidence angle theta=45.00 deg
Calculating _heat_diffusion_ ...
Absorption profile is calculated by multilayer formalism.
Total reflectivity of 42.4 % and transmission of 28.4 %.
Elapsed time for _heat_diffusion_: 1.912075 s
Calculating _heat_diffusion_ for excitation 1:1 ...
Absorption profile is calculated by multilayer formalism.
Total reflectivity of 42.4 % and transmission of 28.4 %.
Elapsed time for _heat_diffusion_ with 1 excitation(s): 5.409857 s
Calculating _heat_diffusion_ ...
Absorption profile is calculated by multilayer formalism.
Total reflectivity of 42.4 % and transmission of 28.4 %.
Elapsed time for _heat_diffusion_: 16.854034 s
Elapsed time for _temp_map_: 24.341133 s
[10]:
plt.figure(figsize=[6, 12])
plt.subplot(3, 1, 1)
plt.contourf(distances.to('nm').magnitude, delays.to('ps').magnitude, temp_map[:, :, 0], levels=100)
plt.colorbar()
plt.xlabel('Distance [nm]')
plt.ylabel('Delay [ps]')
plt.title('Temperature Map Electrons')
plt.subplot(3, 1, 2)
plt.contourf(distances.to('nm').magnitude, delays.to('ps').magnitude, temp_map[:, :, 1], levels=100)
plt.colorbar()
plt.xlabel('Distance [nm]')
plt.ylabel('Delay [ps]')
plt.title('Temperature Map Phonons')
plt.subplot(3, 1, 3)
plt.contourf(distances.to('nm').magnitude, delays.to('ps').magnitude, temp_map[:, :, 2], levels=100)
plt.colorbar()
plt.xlabel('Distance [nm]')
plt.ylabel('Delay [ps]')
plt.title('Magnetization')
plt.tight_layout()
plt.show()

[11]:
plt.figure(figsize=[6,8])
plt.subplot(2,1,1)
plt.plot(delays.to('ps'), np.mean(temp_map[:, S.get_all_positions_per_unique_layer()['CoNi'], 0], 1), label='electrons')
plt.plot(delays.to('ps'), np.mean(temp_map[:, S.get_all_positions_per_unique_layer()['CoNi'], 1], 1), label='phonons')
plt.ylabel('Temperature [K]')
plt.xlabel('Delay [ps]')
plt.legend()
plt.title('M3TM Koopmans et. al')
plt.subplot(2,1,2)
plt.plot(delays.to('ps'), np.mean(temp_map[:, S.get_all_positions_per_unique_layer()['CoNi'], 2], 1), label='M')
plt.ylabel('Magnetization')
plt.xlabel('Delay [ps]')
plt.legend()
plt.show()
