Projection Notebook

This commit is contained in:
spectre 2024-04-20 01:37:08 +02:00
parent fc20e4913d
commit dafd652cbb
4 changed files with 2199 additions and 0 deletions

View file

@ -0,0 +1,6 @@
{
"cells": [],
"metadata": {},
"nbformat": 4,
"nbformat_minor": 5
}

View file

@ -0,0 +1,76 @@
using SpiDy
using NPZ
using DataFrames
using CSV
using ProgressMeter
using Random
using Statistics
using LinearAlgebra
using Plots
########################
########################
Δt = 0.1
N = 10_000
tspan = (0., N*Δt)
saveat = (0:1:N)*Δt
α = 10.
ω0 = 7.
Γ = 5.
J = LorentzianSD(α, ω0, Γ) # coloring the noise
matrix = AnisoCoupling([-sin(π/4) 0. 0. # coupling to the environment
0. 0. 0.
cos(π/4) 0. 0.]);
T = 1.
noise = ClassicalNoise(T);
navg = 6 # number of stochastic realizations
nspin = 4 # number of spins
s0 = zeros(3*nspin)
for i in 1:nspin
ϵ = 0.1
s0tmp = [ϵ*rand(), ϵ*rand(), -1]
s0[1+(i-1)*3:3+(i-1)*3] = s0tmp./norm(s0tmp)
end
J0 = 1.
JH = Nchain(nspin, J0)
########################
########################
println("Starting...")
progress = Progress(navg);
sols = zeros(navg, length(saveat), 3*nspin)
Threads.@threads for i in 1:navg
bfields = [bfield(N, Δt, J, noise),
bfield(N, Δt, J, noise),
bfield(N, Δt, J, noise)];
sol = diffeqsolver(s0, tspan, J, bfields, matrix; JH=JH, saveat=saveat);
sols[i, :, :] = transpose(sol[:, :])
next!(progress)
end
solavg = mean(sols, dims=1)[1, :, :];
########################
########################
### Save data NPZ ###
npzwrite("./outputs/dynamics.npz", Dict("t" => saveat,
"S" => solavg))
### Save data CSV ###
dataframe = DataFrame(t = saveat,
Sx = solavg[:, 1],
Sy = solavg[:, 2],
Sz = solavg[:, 3])
CSV.write("./outputs/dynamics.csv", dataframe)
### Plots ###
plot(saveat, solavg[:, 1], xlabel="t", ylabel="S_x")
savefig("./outputs/sx.pdf")
plot(saveat, solavg[:, 2], xlabel="t", ylabel="S_y")
savefig("./outputs/sy.pdf")
plot(saveat, solavg[:, 3], xlabel="t", ylabel="S_z")
savefig("./outputs/sz.pdf")

2041
runs/Projections.ipynb Normal file

File diff suppressed because one or more lines are too long

76
runs/run_dynamics.jl Normal file
View file

@ -0,0 +1,76 @@
using SpiDy
using NPZ
using DataFrames
using CSV
using ProgressMeter
using Random
using Statistics
using LinearAlgebra
using Plots
########################
########################
Δt = 0.1
N = 10_000
tspan = (0., N*Δt)
saveat = (0:1:N)*Δt
α = 10.
ω0 = 7.
Γ = 5.
J = LorentzianSD(α, ω0, Γ) # coloring the noise
matrix = AnisoCoupling([-sin(π/4) 0. 0. # coupling to the environment
0. 0. 0.
cos(π/4) 0. 0.]);
T = 1.
noise = ClassicalNoise(T);
navg = 6 # number of stochastic realizations
nspin = 4 # number of spins
s0 = zeros(3*nspin)
for i in 1:nspin
ϵ = 0.1
s0tmp = [ϵ*rand(), ϵ*rand(), -1]
s0[1+(i-1)*3:3+(i-1)*3] = s0tmp./norm(s0tmp)
end
J0 = 1.
JH = Nchain(nspin, J0)
########################
########################
println("Starting...")
progress = Progress(navg);
sols = zeros(navg, length(saveat), 3*nspin)
Threads.@threads for i in 1:navg
bfields = [bfield(N, Δt, J, noise),
bfield(N, Δt, J, noise),
bfield(N, Δt, J, noise)];
sol = diffeqsolver(s0, tspan, J, bfields, matrix; JH=JH, saveat=saveat);
sols[i, :, :] = transpose(sol[:, :])
next!(progress)
end
solavg = mean(sols, dims=1)[1, :, :];
########################
########################
### Save data NPZ ###
npzwrite("./outputs/dynamics.npz", Dict("t" => saveat,
"S" => solavg))
### Save data CSV ###
dataframe = DataFrame(t = saveat,
Sx = solavg[:, 1],
Sy = solavg[:, 2],
Sz = solavg[:, 3])
CSV.write("./outputs/dynamics.csv", dataframe)
### Plots ###
plot(saveat, solavg[:, 1], xlabel="t", ylabel="S_x")
savefig("./outputs/sx.pdf")
plot(saveat, solavg[:, 2], xlabel="t", ylabel="S_y")
savefig("./outputs/sy.pdf")
plot(saveat, solavg[:, 3], xlabel="t", ylabel="S_z")
savefig("./outputs/sz.pdf")