energy_force.py 1.39 KB
Newer Older
Xiang Gao's avatar
Xiang Gao committed
1
import torch
2
import os
Xiang Gao's avatar
Xiang Gao committed
3
4
5
import torchani

device = torch.device('cpu')
6
7
8
9
path = os.path.dirname(os.path.realpath(__file__))
const_file = os.path.join(path, '../torchani/resources/ani-1x_dft_x8ens/rHCNO-5.2R_16-3.5A_a4-8.params')  # noqa: E501
sae_file = os.path.join(path, '../torchani/resources/ani-1x_dft_x8ens/sae_linfit.dat')  # noqa: E501
network_dir = os.path.join(path, '../torchani/resources/ani-1x_dft_x8ens/train')  # noqa: E501
Xiang Gao's avatar
Xiang Gao committed
10

11
aev_computer = torchani.AEVComputer(const_file=const_file)
12
13
nn = torchani.models.NeuroChemNNP(aev_computer.species, from_=network_dir,
                                  ensemble=8)
Gao, Xiang's avatar
Gao, Xiang committed
14
shift_energy = torchani.EnergyShifter(aev_computer.species, sae_file)
15
model = torch.nn.Sequential(aev_computer, nn, shift_energy)
Xiang Gao's avatar
Xiang Gao committed
16
17
18
19
20
21

coordinates = torch.tensor([[[0.03192167,  0.00638559,  0.01301679],
                             [-0.83140486,  0.39370209, -0.26395324],
                             [-0.66518241, -0.84461308,  0.20759389],
                             [0.45554739,   0.54289633,  0.81170881],
                             [0.66091919,  -0.16799635, -0.91037834]]],
Gao, Xiang's avatar
Gao, Xiang committed
22
                           requires_grad=True)
Gao, Xiang's avatar
Gao, Xiang committed
23
species = torch.LongTensor([[1, 0, 0, 0, 0]])  # 0 = H, 1 = C, 2 = N, 3 = O
Xiang Gao's avatar
Xiang Gao committed
24

25
_, energy = model((species, coordinates))
Gao, Xiang's avatar
Gao, Xiang committed
26
derivative = torch.autograd.grad(energy.sum(), coordinates)[0]
Xiang Gao's avatar
Xiang Gao committed
27
28
29
30
force = -derivative

print('Energy:', energy.item())
print('Force:', force.squeeze().numpy())