dschick / udkm1Dsim

A Python Simulation Toolkit for 1D Ultrafast Dynamics in Condensed Matter
http://udkm1dsim.readthedocs.io
MIT License
21 stars 12 forks source link

How to create a layer of SiO2 #149

Closed Serj-R closed 8 months ago

Serj-R commented 8 months ago

Hi,

I would like to simulate the generation and propagation of coherent acoustic phonons in materials like metal/dielectric or metal/semiconductor upon irradiation with an ultrashort laser pulse. It would be great if you could explain how one could create using your udkm1Dsim code, for example, a SiO2 (silicon dioxide) layer, which represents a very common dielectric substrate for a light-absorbing thin metal films. I suppose, this SiO2 layer should be amorphous, as well.

dschick commented 8 months ago

Hi @Serj-R

Thanks for your interest in the toolbox.

Have you already checked the examples for coherent phonon calculations? https://udkm1dsim.readthedocs.io/en/latest/examples/phonons.html

In order to adapt from crystalline to amorphous layers, you could adapt the example for resonant magnetic X-ray scattering up to the phonon generation: https://udkm1dsim.readthedocs.io/en/latest/examples/dynamical_magnetic_xray.html

Let me know in case you have further questions

Best

Daniel

Serj-R commented 8 months ago

Yes, before addressing to you I looked through the example for phonons. But I stuck with the creating of the desired material which is a thin polycrystalline Ni film upon a glass substrate (SiO2). I've just looked at the example for Dynamical Magnetic X-ray Scattering, but still it is not clear for me how to create a SiO2 layer.

dschick commented 8 months ago

In case, you are only interested in the phonon dynamics, it is mainly relevant to assign the correct thermal and elastic properties to the layers.

So as a minimal example, you could do (the values are not correct):

# creating the atoms
Ni = ud.Atom('Ni')

Si = ud.Atom('Si')
O = ud.Atom('O')

SiO2 = ud.AtomMixed('SiO2', id='SiO2')
SiO2.add_atom(Si, 0.33)
SiO2.add_atom(O, 0.67)

# creating the layers
density_Ni = 7140*u.kg/u.m**3
prop_Ni = {}
prop_Ni ['heat_capacity'] = 449*u.J/u.kg/u.K
prop_Ni ['therm_cond'] = 94*u.W/(u.m*u.K)
prop_Ni ['lin_therm_exp'] = 6.2e-6
prop_Ni ['sound_vel'] = 5.940*u.nm/u.ps
prop_Ni ['opt_ref_index'] = 3.1612+3.4606j

layer_Ni = ud.AmorphousLayer('Ni', "Ni amorphous", 1*u.nm, density_Ni, atom=Ni, **prop_Ni)

density_SiO2 = 2336*u.kg/u.m**3

prop_SiO2 = {}
prop_SiO2 ['heat_capacity'] = 703*u.J/u.kg/u.K
prop_SiO2 ['therm_cond'] = 150*u.W/(u.m*u.K)
prop_SiO2 ['lin_therm_exp'] = 2.6e-6
prop_SiO2 ['sound_vel'] = 8.433*u.nm/u.ps
prop_SiO2 ['opt_ref_index'] = 3.6941+0.0065435j

layer_SiO2 = ud.AmorphousLayer('SiO2', "SiO2 amorphous", 1*u.nm, density_SiO2, atom=SiO2, **prop_SiO2)

# creating the sample structure
S = ud.Structure('Fe/Cr AFM Super Lattice')

# create a sub-structure
S.add_sub_structure(layer_Ni , 10) # 10 nm of nickel
S.add_sub_structure(layer_SiO2 , 100) #  100 nm of SiO2
dschick commented 8 months ago

is this issue solved?

Serj-R commented 8 months ago

Yes, thank you very much for the code simulating a Ni/SiO2 structure. Daniel, in what units the strain is calculated?

dschick commented 8 months ago

the strain is defined as \delta d / d being a relative number