mindspore.ops.AngleForce

class mindspore.ops.AngleForce(angle_numbers)[source]

Calculate the force exerted by angles made of 3 atoms on the corresponding atoms. Assume the number of angles is m and the number of atoms is n.

Because there is a large amount of inputs and each of them are related, there is no way to construct Examples using random methods. For details, refer the webpage SPONGE in MindSpore.

\[dr_{ab} = (x_b-x_a, y_b-y_a, z_b-z_a)\]
\[dr_{cb} = (x_b-x_c, y_b-y_c, z_b-z_c)\]
\[theta = arccos(inner_product(dr_{ab}, dr_{cb})/|dr_{ab}|/|dr_{cb}|)\]
\[F_a = -2*k*(theta-theta_0)/sin(theta)*[cos(theta)/|dr_{ab}|^2*dr_{ab} - 1/|dr_{ab}|/|dr_{cb}|*dr_{cb}]\]
\[F_c = -2*k*(theta-theta_0)/sin(theta)*[cos(theta)/|dr_{cb}|^2*dr_{cb} - 1/|dr_{cb}|/|dr_{ab}|*dr_{ab}]\]
\[F_b = -F_a - F_c\]
Parameters

angle_numbers (int32) – the number of angles m.

Inputs:
  • uint_crd_f (Tensor) - The unsigned int coordinate value of each atom. The data type is uint32 and the shape is \((n, 3)\).

  • scaler_f (Tensor) - The 3-D scale factor between the real space float coordinates and the unsigned int coordinates. The data type is float32 and the shape is \((3,)\).

  • atom_a (Tensor) - The 1st atom index of each angle. The data type is int32 and the shape is \((m,)\).

  • atom_b (Tensor) - The 2nd and the central atom index of each angle. The data type is int32 and the shape is \((m,)\).

  • atom_c (Tensor) - The 3rd atom index of each angle. The data type is int32 and the shape is \((m,)\).

  • angle_k (Tensor) - The force constant for each angle. The data type is float32 and the shape is \((m,)\).

  • angle_theta0 (Tensor) - The equilibrium position value for each angle. The data type is float32 and the shape is \((m,)\).

Outputs:
  • frc_f (Tensor) - The force felt by each atom. The data type is float32 and the shape is \((n, 3)\).

Supported Platforms:

GPU