47 CHARACTER(len=*),
INTENT(IN) :: filename
50 CHARACTER(LEN=*),
PARAMETER :: routinen =
'deepmd_model_load'
52 CHARACTER(LEN=1, KIND=C_CHAR),
DIMENSION(:), &
53 POINTER :: error_f_ptr
54 CHARACTER(LEN=default_string_length) :: error_str
56 TYPE(c_ptr) :: error_c_ptr
58 FUNCTION newdeeppot(filename)
BIND(C, name="DP_NewDeepPot")
59 IMPORT :: c_ptr, c_char
60 CHARACTER(kind=C_CHAR),
DIMENSION(*) :: filename
61 TYPE(c_ptr) :: newdeeppot
65 FUNCTION deeppotcheckok(model)
BIND(C, name="DP_DeepPotCheckOK")
67 TYPE(c_ptr),
VALUE :: model
68 TYPE(c_ptr) :: deeppotcheckok
69 END FUNCTION deeppotcheckok
72 SUBROUTINE deletechar(ptr)
BIND(C, name="DP_DeleteChar")
74 TYPE(c_ptr),
VALUE :: ptr
75 END SUBROUTINE deletechar
78 CALL timeset(routinen, handle)
81 cpassert(.NOT. c_associated(model%c_ptr))
82 model%c_ptr = newdeeppot(filename=trim(filename)//c_null_char)
83 cpassert(c_associated(model%c_ptr))
86 error_c_ptr = deeppotcheckok(model%c_ptr)
87 cpassert(c_associated(error_c_ptr))
91 IF (error_f_ptr(i) == c_null_char)
EXIT
92 error_str(i:i) = error_f_ptr(i)
94 CALL deletechar(error_c_ptr)
95 IF (len_trim(error_str) > 0) cpabort(trim(error_str))
97 cpabort(
"CP2K was compiled without libdeepmd_c library.")
102 mark_used(error_c_ptr)
103 mark_used(error_f_ptr)
106 CALL timestop(handle)
123 atomic_energy, atomic_virial)
126 REAL(kind=
dp),
DIMENSION(natom, 3),
INTENT(IN) :: coord
127 INTEGER,
DIMENSION(natom),
INTENT(IN) :: atype
128 REAL(kind=
dp),
DIMENSION(9),
INTENT(IN) :: cell
129 REAL(kind=
dp),
INTENT(OUT) :: energy
130 REAL(kind=
dp),
DIMENSION(natom, 3),
INTENT(OUT) :: force
131 REAL(kind=
dp),
DIMENSION(9),
INTENT(OUT) :: virial
132 REAL(kind=
dp),
DIMENSION(natom),
INTENT(OUT) :: atomic_energy
133 REAL(kind=
dp),
DIMENSION(natom, 9),
INTENT(OUT) :: atomic_virial
135 CHARACTER(LEN=*),
PARAMETER :: routinen =
'deepmd_model_compute'
139 SUBROUTINE deeppotcompute(model, natom, coord, atype, cell, energy, force, virial, &
140 atomic_energy, atomic_virial)
BIND(C, name="DP_DeepPotCompute")
141 IMPORT :: c_ptr, c_int, c_double
142 TYPE(c_ptr),
VALUE :: model
143 INTEGER(C_INT),
VALUE :: natom
144 REAL(c_double),
DIMENSION(natom, 3) :: coord
145 INTEGER(C_INT),
DIMENSION(natom) :: atype
146 REAL(c_double),
DIMENSION(9) :: cell
147 REAL(c_double) :: energy
148 REAL(c_double),
DIMENSION(natom, 3) :: force
149 REAL(c_double),
DIMENSION(9) :: virial
150 REAL(c_double),
DIMENSION(natom) :: atomic_energy
151 REAL(c_double),
DIMENSION(natom, 9) :: atomic_virial
155 CALL timeset(routinen, handle)
158 cpassert(c_associated(model%c_ptr))
159 CALL deeppotcompute(model=model%c_ptr, &
167 atomic_energy=atomic_energy, &
168 atomic_virial=atomic_virial)
170 cpabort(
"CP2K was compiled without libdeepmd_c library.")
179 atomic_energy = 0.0_dp
180 atomic_virial = 0.0_dp
183 CALL timestop(handle)
subroutine, public deepmd_model_compute(model, natom, coord, atype, cell, energy, force, virial, atomic_energy, atomic_virial)
Compute energy, force and virial from DP.