Execução em 3D
Todos os códigos aqui podem gerar simulações tridimensionais. Na verdade, os únicos códigos que têm alguma dimensão definida são os que escrevem o arquivo de saída (printxyz) e o que calcula a função de distribuição radial (radial_distribution). Todos os outros códigos são genéricos, e o que fazem depende apenas do tipo de variável de entrada, ou seja, da dimensão da caixa e dos pontos.
9.1. Inicializando o sistema com 3 dimensões:
Basta criar o sistema em uma caixa tridimensional:
julia> sys = System(n=100,sides=[50,50,50])
System{Point3D}:
Number of particles = 100
Box sides = [50.0, 50.0, 50.0]Note que agora os pontos são do tipo Point3D. Efetivamente, as coordenadas, sys.x0, são tridimensionais:
julia> sys.x0
100-element Vector{Point3D}:
[1.7209592667160578, 2.6345231665739135, 1.9123751433362468]
...
[-2.229487380572972, -2.4612177799986634, 8.742176399685668]
[3.9099597073208123, 7.797739759305074, 4.3056981321251655]A energia pode então ser minimizada como antes:
julia> minimize!(sys)
Energy before minimization: 1.8502746330219281e6
Energy after minimization: -451.71097181538559.2. Executando e visualizando a simulação
A simulação, qualquer que seja, pode ser executada normalmente. Os códigos executados são exatamente os mesmos. Por exemplo, uma simulação com dinâmica de Langevin pode ser executada com:
julia> md_out = md_langevin(
sys,
Options(lambda=0.01,nsteps=20_000,trajectory_file="md.xyz")
)A simulação pode ser visualizada no VMD, com:
shell> vmd md.xyzE podemos visualizar a função de distribuição radial, com
julia> rmd, gmd = radial_distribution(sys,"md.xyz")
julia> plot(rmd,gmd,xlabel="r",ylabel="g(r)",label="MD")9.3. Código completo resumido
using FundamentosDMC, Plots
sys = System(n=100,sides=[50,50,50])
minimize!(sys)
md_out = md_langevin(
sys,
Options(lambda=0.01,nsteps=20_000,trajectory_file="md.xyz")
)
rmd, gmd = radial_distribution(sys,"md.xyz")
plot(rmd,gmd,xlabel="r",ylabel="g(r)",label="MD")