|
- /**
- * CCopyright (c) Huawei Technologies Co., Ltd. 2021. All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
- /*!
- * \file deep_md.h
- * \brief
- */
- #ifndef OPS_BUILT_IN_OP_PROTO_INC_DEEP_MD_H_
- #define OPS_BUILT_IN_OP_PROTO_INC_DEEP_MD_H_
-
- #include "graph/operator_reg.h"
-
- namespace ge {
-
- /**
- * @brief Calculate TabulateFusion. \n
- *
- * @par Inputs:
- * Five inputs, including:
- * @li table: A Tensor. Must be one of the following types: float16, float32, float64.
- * @li table_info: A Tensor. Must be one of the following types: float16, float32, float64.
- * @li em_x: A Tensor. Must be one of the following types: float16, float32, float64.
- * @li em: A Tensor. Must be one of the following types: float16, float32, float64. \n
- *
- * @par Outputs:
- * descriptor: A Tensor. Must be one of the following types: float16, float32, float64. \n
- *
- * @par Attributes:
- * Three attributes, including:
- * @li last_layer_size: int value.
- * @li split_count: int value.
- * @li split_index: int value. \n
- *
- * @par Restrictions:
- * Warning: THIS FUNCTION IS EXPERIMENTAL. Please do not use.
- */
- REG_OP(TabulateFusion)
- .INPUT(table, TensorType({DT_FLOAT16, DT_FLOAT, DT_DOUBLE}))
- .INPUT(table_info, TensorType({DT_FLOAT16, DT_FLOAT, DT_DOUBLE}))
- .INPUT(em_x, TensorType({DT_FLOAT16, DT_FLOAT, DT_DOUBLE}))
- .INPUT(em, TensorType({DT_FLOAT16, DT_FLOAT, DT_DOUBLE}))
- .OUTPUT(descriptor, TensorType({DT_FLOAT16, DT_FLOAT, DT_DOUBLE}))
- .REQUIRED_ATTR(last_layer_size, Int)
- .OP_END_FACTORY_REG(TabulateFusion)
-
- /**
- * @brief Calculate ProdEnvMatA. \n
- *
- * @par Inputs:
- * @li coord: A Tensor. Must be one of the following types: float32, float64.
- * @li type: A Tensor. Must be one of the following types: int32.
- * @li natoms: A Tensor. Must be one of the following types: int32.
- * @li box: A Tensor. Must be one of the following types: float32, float64.
- * @li mesh: A Tensor. Must be one of the following types: int32.
- * @li davg: A Tensor. Must be one of the following types: float32, float64.
- * @li dstd: A Tensor. Must be one of the following types: float32, float64.
- *
- * @par Outputs:
- * descrpt: A Tensor. Must be one of the following types: float32, float64.
- * descrpt_deriv: A Tensor. Must be one of the following types: float32, float64.
- * rij: A Tensor. Must be one of the following types: float32, float64.
- * nlist: A Tensor. Must be one of the following types: int32. \n
- *
- * @par Attributes:
- * @li rcut_a: A Float.
- * @li rcut_r: A Float.
- * @li rcut_r_smth: A Float.
- * @li sel_a: A ListInt.
- * @li split_count: A Int.
- * @li split_index: A Int.\n
- *
- */
- REG_OP(ProdEnvMatA)
- .INPUT(coord, TensorType({DT_FLOAT, DT_DOUBLE}))
- .INPUT(type, TensorType({DT_INT32}))
- .INPUT(natoms, TensorType({DT_INT32}))
- .INPUT(box, TensorType({DT_FLOAT, DT_DOUBLE}))
- .INPUT(mesh, TensorType({DT_INT32}))
- .INPUT(davg, TensorType({DT_FLOAT, DT_DOUBLE}))
- .INPUT(dstd, TensorType({DT_FLOAT, DT_DOUBLE}))
- .OUTPUT(descrpt, TensorType({DT_FLOAT, DT_DOUBLE}))
- .OUTPUT(descrpt_deriv, TensorType({DT_FLOAT, DT_DOUBLE}))
- .OUTPUT(rij, TensorType({DT_FLOAT, DT_DOUBLE}))
- .OUTPUT(nlist, TensorType({DT_INT32}))
- .ATTR(rcut_a, Float, 1.0)
- .ATTR(rcut_r, Float, 1.0)
- .ATTR(rcut_r_smth, Float, 1.0)
- .ATTR(sel_a, ListInt, {})
- .ATTR(sel_r, ListInt, {})
- .OP_END_FACTORY_REG(ProdEnvMatA)
-
- /**
- * @brief Calculate ProdEnvMatACalRij.
- * Use type, natoms, sel_a, and rcut_r as constraints, find the central element in
- * the corresponding coord through mesh, output the index of the central element
- * and the distance between the central element and each neighbor. \n
- *
- * @par Inputs:
- * @li coord: A Tensor. Must be one of the following types: float32, float64.
- * @li type: A Tensor. Must be one of the following types: int32.
- * @li natoms: A Tensor. Must be one of the following types: int32.
- * @li box: A Tensor. Must be one of the following types: float32, float64.
- * @li mesh: A Tensor. Must be one of the following types: int32.
- *
- * @par Outputs:
- * rij: A Tensor. Must be one of the following types: float32, float64.
- * nlist: A Tensor. Must be one of the following types: int32.
- * distance: A Tensor. Must be one of the following types: float32, float64.
- * rij_x: A Tensor. Must be one of the following types: float32, float64.
- * rij_y: A Tensor. Must be one of the following types: float32, float64.
- * rij_z: A Tensor. Must be one of the following types: float32, float64. \n
- *
- * @par Attributes:
- * @li rcut_a: A Float.
- * @li rcut_r: A Float.
- * @li rcut_r_smth: A Float.
- * @li sel_a: A ListInt.
- * @li sel_r: A ListInt. \n
- *
- * @par Restrictions:
- * Warning: THIS FUNCTION IS EXPERIMENTAL. Please do not use.
- */
- REG_OP(ProdEnvMatACalcRij)
- .INPUT(coord, TensorType({DT_FLOAT, DT_DOUBLE}))
- .INPUT(type, TensorType({DT_INT32}))
- .INPUT(natoms, TensorType({DT_INT32}))
- .INPUT(box, TensorType({DT_FLOAT, DT_DOUBLE}))
- .INPUT(mesh, TensorType({DT_INT32}))
- .OUTPUT(rij, TensorType({DT_FLOAT, DT_DOUBLE}))
- .OUTPUT(nlist, TensorType({DT_INT32}))
- .OUTPUT(distance, TensorType({DT_FLOAT, DT_DOUBLE}))
- .OUTPUT(rij_x, TensorType({DT_FLOAT, DT_DOUBLE}))
- .OUTPUT(rij_y, TensorType({DT_FLOAT, DT_DOUBLE}))
- .OUTPUT(rij_z, TensorType({DT_FLOAT, DT_DOUBLE}))
- .ATTR(rcut_a, Float, 1.0)
- .ATTR(rcut_r, Float, 1.0)
- .ATTR(rcut_r_smth, Float, 1.0)
- .ATTR(sel_a, ListInt, {})
- .ATTR(sel_r, ListInt, {})
- .OP_END_FACTORY_REG(ProdEnvMatACalcRij)
-
- /**
- * @brief Calculate ProdEnvMatACalcDescrpt. \n
- *
- * @par Inputs:
- * @li distance: A Tensor. Must be one of the following types: float32, float64.
- * @li rij_x: A Tensor. Must be one of the following types: float32, float64.
- * @li rij_y: A Tensor. Must be one of the following types: float32, float64.
- * @li rij_z: A Tensor. Must be one of the following types: float32, float64.
- * @li type: A Tensor. Must be one of the following types: int32.
- * @li natoms: A Tensor. Must be one of the following types: int32.
- * @li mesh: A Tensor. Must be one of the following types: int32.
- * @li davg: A Tensor. Must be one of the following types: float32, float64.
- * @li dstd: A Tensor. Must be one of the following types: float32, float64. \n
- *
- * @par Outputs:
- * @li descrpt: A Tensor. Must be one of the following types: float32, float64.
- * @li descrpt_deriv: A Tensor. Must be one of the following types: float32, float64. \n
- *
- * @par Attributes:
- * @li rcut_a: A Float.
- * @li rcut_r: A Float.
- * @li rcut_r_smth: A Float.
- * @li sel_a: A ListInt.
- * @li sel_r: A ListInt. \n
- *
- * @par Restrictions:
- * Warning: THIS FUNCTION IS EXPERIMENTAL. Please do not use.
- */
- REG_OP(ProdEnvMatACalcDescrpt)
- .INPUT(distance, TensorType({DT_FLOAT, DT_DOUBLE}))
- .INPUT(rij_x, TensorType({DT_FLOAT, DT_DOUBLE}))
- .INPUT(rij_y, TensorType({DT_FLOAT, DT_DOUBLE}))
- .INPUT(rij_z, TensorType({DT_FLOAT, DT_DOUBLE}))
- .INPUT(type, TensorType({DT_INT32}))
- .INPUT(natoms, TensorType({DT_INT32}))
- .INPUT(mesh, TensorType({DT_INT32}))
- .INPUT(davg, TensorType({DT_FLOAT, DT_DOUBLE}))
- .INPUT(dstd, TensorType({DT_FLOAT, DT_DOUBLE}))
- .OUTPUT(descrpt, TensorType({DT_FLOAT, DT_DOUBLE}))
- .OUTPUT(descrpt_deriv, TensorType({DT_FLOAT, DT_DOUBLE}))
- .ATTR(rcut_a, Float, 1.0)
- .ATTR(rcut_r, Float, 1.0)
- .ATTR(rcut_r_smth, Float, 1.0)
- .ATTR(sel_a, ListInt, {})
- .ATTR(sel_r, ListInt, {})
- .OP_END_FACTORY_REG(ProdEnvMatACalcDescrpt)
-
- /**
- * @brief Calculate ProdForceSeA. \n
- *
- * @par Inputs:
- * Five inputs, including:
- * @li net_deriv: A Tensor. Must be one of the following types: float16, float32, float64.
- * @li in_deriv: A Tensor. Must be one of the following types: float16, float32, float64.
- * @li nlist: A Tensor. dtype is int32.
- * @li natoms: A Tensor. dtype is int32. \n
- *
- * @par Outputs:
- * atom_force: A Tensor. Must be one of the following types: float16, float32, float64. \n
- *
- * @par Attributes:
- * Two attributes, including:
- * @li n_a_sel: A Scalar.
- * @li n_r_sel: A Scalar. \n
- *
- * @par Restrictions:
- * Warning: THIS FUNCTION IS EXPERIMENTAL. Please do not use.
- */
- REG_OP(ProdForceSeA)
- .INPUT(net_deriv, TensorType({DT_FLOAT16, DT_FLOAT, DT_DOUBLE}))
- .INPUT(in_deriv, TensorType({DT_FLOAT16, DT_FLOAT, DT_DOUBLE}))
- .INPUT(nlist, TensorType({DT_INT32}))
- .INPUT(natoms, TensorType({DT_INT32}))
- .OUTPUT(atom_force, TensorType({DT_FLOAT16, DT_FLOAT, DT_DOUBLE}))
- .REQUIRED_ATTR(n_a_sel, Int)
- .REQUIRED_ATTR(n_r_sel, Int)
- .OP_END_FACTORY_REG(ProdForceSeA)
-
- /**
- * @brief Calculate ProdVirialSeA. \n
- *
- * @par Inputs:
- * Five inputs, including:
- * @li net_deriv: A Tensor. Must be one of the following types: float16, float32, float64.
- * @li in_deriv: A Tensor. Must be one of the following types: float16, float32, float64.
- * @li rij: A Tensor. Must be one of the following types: float16, float32, float64.
- * @li nlist: A Tensor. dtype is int32.
- * @li natoms: A Tensor. dtype is int32. \n
- *
- * @par Outputs:
- * Two outputs, including:
- * @li virial: A Tensor. Must be one of the following types: float16, float32, float64.
- * @li atom_virial: A Tensor. Must be one of the following types: float16, float32, float64. \n
- *
- * @par Attributes:
- * Two attributes, including:
- * @li n_a_sel: Int value.
- * @li n_r_sel: Int value.
- * @li split_count: Int value.
- * @li split_index: Int value. \n
- */
- REG_OP(ProdVirialSeA)
- .INPUT(net_deriv, TensorType({DT_FLOAT16, DT_FLOAT, DT_DOUBLE}))
- .INPUT(in_deriv, TensorType({DT_FLOAT16, DT_FLOAT, DT_DOUBLE}))
- .INPUT(rij, TensorType({DT_FLOAT16, DT_FLOAT, DT_DOUBLE}))
- .INPUT(nlist, TensorType({DT_INT32}))
- .INPUT(natoms, TensorType({DT_INT32}))
- .OUTPUT(virial, TensorType({DT_FLOAT16, DT_FLOAT, DT_DOUBLE}))
- .OUTPUT(atom_virial, TensorType({DT_FLOAT16, DT_FLOAT, DT_DOUBLE}))
- .REQUIRED_ATTR(n_a_sel, Int)
- .REQUIRED_ATTR(n_r_sel, Int)
- .OP_END_FACTORY_REG(ProdVirialSeA)
-
- /**
- * @brief Calculate TabulateFusionGrad. \n
- *
- * @par Inputs:
- * Five inputs, including:
- * @li table: A Tensor. Must be one of the following types: float16, float32, float64.
- * @li table_info: A Tensor. Must be one of the following types: float16, float32, float64.
- * @li em_x: A Tensor. Must be one of the following types: float16, float32, float64.
- * @li em: A Tensor. Must be one of the following types: float16, float32, float64.
- * @li dy: A Tensor. Must be one of the following types: float16, float32, float64.
- * @li descriptor: A Tensor. Must be one of the following types: float16, float32, float64. \n
- *
- * @par Outputs:
- * @li dy_dem_x: A Tensor. Must be one of the following types: float16, float32, float64.
- * @li dy_dem: A Tensor. Must be one of the following types: float16, float32, float64. \n
- *
- * @par Attributes:
- * Two attributes, including:
- * @li split_count: A Scalar.
- * @li split_index: A Scalar. \n
- *
- * @par Restrictions:
- * Warning: THIS FUNCTION IS EXPERIMENTAL. Please do not use.
- */
- REG_OP(TabulateFusionGrad)
- .INPUT(table, TensorType({DT_FLOAT16, DT_FLOAT, DT_DOUBLE}))
- .INPUT(table_info, TensorType({DT_FLOAT16, DT_FLOAT, DT_DOUBLE}))
- .INPUT(em_x, TensorType({DT_FLOAT16, DT_FLOAT, DT_DOUBLE}))
- .INPUT(em, TensorType({DT_FLOAT16, DT_FLOAT, DT_DOUBLE}))
- .INPUT(dy, TensorType({DT_FLOAT16, DT_FLOAT, DT_DOUBLE}))
- .INPUT(descriptor, TensorType({DT_FLOAT16, DT_FLOAT, DT_DOUBLE}))
- .OUTPUT(dy_dem_x, TensorType({DT_FLOAT16, DT_FLOAT, DT_DOUBLE}))
- .OUTPUT(dy_dem, TensorType({DT_FLOAT16, DT_FLOAT, DT_DOUBLE}))
- .OP_END_FACTORY_REG(TabulateFusionGrad)
- } // namespace ge
-
- #endif // OPS_BUILT_IN_OP_PROTO_INC_DEEP_MD_H_
|