8 USE iso_c_binding,
ONLY: c_associated, &
23#include "./base/base_uses.f90"
31 TYPE(C_PTR) :: c_ptr = c_null_ptr
36 TYPE(C_PTR) :: c_ptr = c_null_ptr
41 TYPE(C_PTR) :: c_ptr = c_null_ptr
45 MODULE PROCEDURE torch_tensor_from_array_int32_1d
46 MODULE PROCEDURE torch_tensor_from_array_float_1d
47 MODULE PROCEDURE torch_tensor_from_array_int64_1d
48 MODULE PROCEDURE torch_tensor_from_array_double_1d
49 MODULE PROCEDURE torch_tensor_from_array_int32_2d
50 MODULE PROCEDURE torch_tensor_from_array_float_2d
51 MODULE PROCEDURE torch_tensor_from_array_int64_2d
52 MODULE PROCEDURE torch_tensor_from_array_double_2d
53 MODULE PROCEDURE torch_tensor_from_array_int32_3d
54 MODULE PROCEDURE torch_tensor_from_array_float_3d
55 MODULE PROCEDURE torch_tensor_from_array_int64_3d
56 MODULE PROCEDURE torch_tensor_from_array_double_3d
60 MODULE PROCEDURE torch_tensor_reset_from_array_double_1d
61 MODULE PROCEDURE torch_tensor_reset_from_array_double_2d
62 MODULE PROCEDURE torch_tensor_reset_from_array_double_3d
66 MODULE PROCEDURE torch_tensor_data_ptr_int32_1d
67 MODULE PROCEDURE torch_tensor_data_ptr_float_1d
68 MODULE PROCEDURE torch_tensor_data_ptr_int64_1d
69 MODULE PROCEDURE torch_tensor_data_ptr_double_1d
70 MODULE PROCEDURE torch_tensor_data_ptr_int32_2d
71 MODULE PROCEDURE torch_tensor_data_ptr_float_2d
72 MODULE PROCEDURE torch_tensor_data_ptr_int64_2d
73 MODULE PROCEDURE torch_tensor_data_ptr_double_2d
74 MODULE PROCEDURE torch_tensor_data_ptr_int32_3d
75 MODULE PROCEDURE torch_tensor_data_ptr_float_3d
76 MODULE PROCEDURE torch_tensor_data_ptr_int64_3d
77 MODULE PROCEDURE torch_tensor_data_ptr_double_3d
81 MODULE PROCEDURE torch_model_get_attr_string
82 MODULE PROCEDURE torch_model_get_attr_double
83 MODULE PROCEDURE torch_model_get_attr_int64
84 MODULE PROCEDURE torch_model_get_attr_int32
85 MODULE PROCEDURE torch_model_get_attr_strlist
116 SUBROUTINE torch_tensor_from_array_int32_1d(tensor, source, requires_grad)
118 INTEGER(kind=int_4),
DIMENSION(:),
ALLOCATABLE,
INTENT(IN) :: source
119 LOGICAL,
OPTIONAL,
INTENT(IN) :: requires_grad
121#if defined(__LIBTORCH)
122 INTEGER(kind=int_8),
DIMENSION(1) :: sizes_c
123 LOGICAL :: my_req_grad
126 SUBROUTINE torch_c_tensor_from_array_int32 (tensor, req_grad, ndims, sizes, source) &
127 BIND(C, name="torch_c_tensor_from_array_int32")
128 IMPORT :: c_ptr, c_int, c_int32_t, c_int64_t, c_float, c_double, c_bool
129 TYPE(c_ptr) :: tensor
130 LOGICAL(kind=C_BOOL),
VALUE :: req_grad
131 INTEGER(kind=C_INT),
VALUE :: ndims
132 INTEGER(kind=C_INT64_T),
DIMENSION(*) :: sizes
133 INTEGER(kind=C_INT32_T),
DIMENSION(*) :: source
134 END SUBROUTINE torch_c_tensor_from_array_int32
137 my_req_grad = .false.
138 IF (
PRESENT(requires_grad)) my_req_grad = requires_grad
140 sizes_c(1) =
SIZE(source, 1)
142 cpassert(.NOT. c_associated(tensor%c_ptr))
143 CALL torch_c_tensor_from_array_int32 (tensor=tensor%c_ptr, &
144 req_grad=
LOGICAL(my_req_grad, C_BOOL), &
148 cpassert(c_associated(tensor%c_ptr))
150 cpabort(
"CP2K compiled without the Torch library.")
153 mark_used(requires_grad)
155 END SUBROUTINE torch_tensor_from_array_int32_1d
162 SUBROUTINE torch_tensor_data_ptr_int32_1d(tensor, data_ptr)
164 INTEGER(kind=int_4),
DIMENSION(:),
POINTER :: data_ptr
166#if defined(__LIBTORCH)
167 INTEGER(kind=int_8),
DIMENSION(1) :: sizes_f, sizes_c
168 TYPE(c_ptr) :: data_ptr_c
171 SUBROUTINE torch_c_tensor_data_ptr_int32 (tensor, ndims, sizes, data_ptr) &
172 BIND(C, name="torch_c_tensor_data_ptr_int32")
173 IMPORT :: c_char, c_ptr, c_int, c_int32_t, c_int64_t
174 TYPE(c_ptr),
VALUE :: tensor
175 INTEGER(kind=C_INT),
VALUE :: ndims
176 INTEGER(kind=C_INT64_T),
DIMENSION(*) :: sizes
177 TYPE(c_ptr) :: data_ptr
178 END SUBROUTINE torch_c_tensor_data_ptr_int32
182 data_ptr_c = c_null_ptr
183 cpassert(c_associated(tensor%c_ptr))
184 cpassert(.NOT.
ASSOCIATED(data_ptr))
185 CALL torch_c_tensor_data_ptr_int32 (tensor=tensor%c_ptr, &
190 sizes_f(1) = sizes_c(1)
192 IF (all(sizes_f /= 0))
THEN
193 cpassert(c_associated(data_ptr_c))
194 CALL c_f_pointer(data_ptr_c, data_ptr, shape=sizes_f)
197 cpabort(
"CP2K compiled without the Torch library.")
201 END SUBROUTINE torch_tensor_data_ptr_int32_1d
209 SUBROUTINE torch_tensor_from_array_float_1d(tensor, source, requires_grad)
211 REAL(sp),
DIMENSION(:),
ALLOCATABLE,
INTENT(IN) :: source
212 LOGICAL,
OPTIONAL,
INTENT(IN) :: requires_grad
214#if defined(__LIBTORCH)
215 INTEGER(kind=int_8),
DIMENSION(1) :: sizes_c
216 LOGICAL :: my_req_grad
219 SUBROUTINE torch_c_tensor_from_array_float (tensor, req_grad, ndims, sizes, source) &
220 BIND(C, name="torch_c_tensor_from_array_float")
221 IMPORT :: c_ptr, c_int, c_int32_t, c_int64_t, c_float, c_double, c_bool
222 TYPE(c_ptr) :: tensor
223 LOGICAL(kind=C_BOOL),
VALUE :: req_grad
224 INTEGER(kind=C_INT),
VALUE :: ndims
225 INTEGER(kind=C_INT64_T),
DIMENSION(*) :: sizes
226 REAL(kind=c_float),
DIMENSION(*) :: source
227 END SUBROUTINE torch_c_tensor_from_array_float
230 my_req_grad = .false.
231 IF (
PRESENT(requires_grad)) my_req_grad = requires_grad
233 sizes_c(1) =
SIZE(source, 1)
235 cpassert(.NOT. c_associated(tensor%c_ptr))
236 CALL torch_c_tensor_from_array_float (tensor=tensor%c_ptr, &
237 req_grad=
LOGICAL(my_req_grad, C_BOOL), &
241 cpassert(c_associated(tensor%c_ptr))
243 cpabort(
"CP2K compiled without the Torch library.")
246 mark_used(requires_grad)
248 END SUBROUTINE torch_tensor_from_array_float_1d
255 SUBROUTINE torch_tensor_data_ptr_float_1d(tensor, data_ptr)
257 REAL(sp),
DIMENSION(:),
POINTER :: data_ptr
259#if defined(__LIBTORCH)
260 INTEGER(kind=int_8),
DIMENSION(1) :: sizes_f, sizes_c
261 TYPE(c_ptr) :: data_ptr_c
264 SUBROUTINE torch_c_tensor_data_ptr_float (tensor, ndims, sizes, data_ptr) &
265 BIND(C, name="torch_c_tensor_data_ptr_float")
266 IMPORT :: c_char, c_ptr, c_int, c_int32_t, c_int64_t
267 TYPE(c_ptr),
VALUE :: tensor
268 INTEGER(kind=C_INT),
VALUE :: ndims
269 INTEGER(kind=C_INT64_T),
DIMENSION(*) :: sizes
270 TYPE(c_ptr) :: data_ptr
271 END SUBROUTINE torch_c_tensor_data_ptr_float
275 data_ptr_c = c_null_ptr
276 cpassert(c_associated(tensor%c_ptr))
277 cpassert(.NOT.
ASSOCIATED(data_ptr))
278 CALL torch_c_tensor_data_ptr_float (tensor=tensor%c_ptr, &
283 sizes_f(1) = sizes_c(1)
285 IF (all(sizes_f /= 0))
THEN
286 cpassert(c_associated(data_ptr_c))
287 CALL c_f_pointer(data_ptr_c, data_ptr, shape=sizes_f)
290 cpabort(
"CP2K compiled without the Torch library.")
294 END SUBROUTINE torch_tensor_data_ptr_float_1d
302 SUBROUTINE torch_tensor_from_array_int64_1d(tensor, source, requires_grad)
304 INTEGER(kind=int_8),
DIMENSION(:),
ALLOCATABLE,
INTENT(IN) :: source
305 LOGICAL,
OPTIONAL,
INTENT(IN) :: requires_grad
307#if defined(__LIBTORCH)
308 INTEGER(kind=int_8),
DIMENSION(1) :: sizes_c
309 LOGICAL :: my_req_grad
312 SUBROUTINE torch_c_tensor_from_array_int64 (tensor, req_grad, ndims, sizes, source) &
313 BIND(C, name="torch_c_tensor_from_array_int64")
314 IMPORT :: c_ptr, c_int, c_int32_t, c_int64_t, c_float, c_double, c_bool
315 TYPE(c_ptr) :: tensor
316 LOGICAL(kind=C_BOOL),
VALUE :: req_grad
317 INTEGER(kind=C_INT),
VALUE :: ndims
318 INTEGER(kind=C_INT64_T),
DIMENSION(*) :: sizes
319 INTEGER(kind=C_INT64_T),
DIMENSION(*) :: source
320 END SUBROUTINE torch_c_tensor_from_array_int64
323 my_req_grad = .false.
324 IF (
PRESENT(requires_grad)) my_req_grad = requires_grad
326 sizes_c(1) =
SIZE(source, 1)
328 cpassert(.NOT. c_associated(tensor%c_ptr))
329 CALL torch_c_tensor_from_array_int64 (tensor=tensor%c_ptr, &
330 req_grad=
LOGICAL(my_req_grad, C_BOOL), &
334 cpassert(c_associated(tensor%c_ptr))
336 cpabort(
"CP2K compiled without the Torch library.")
339 mark_used(requires_grad)
341 END SUBROUTINE torch_tensor_from_array_int64_1d
348 SUBROUTINE torch_tensor_data_ptr_int64_1d(tensor, data_ptr)
350 INTEGER(kind=int_8),
DIMENSION(:),
POINTER :: data_ptr
352#if defined(__LIBTORCH)
353 INTEGER(kind=int_8),
DIMENSION(1) :: sizes_f, sizes_c
354 TYPE(c_ptr) :: data_ptr_c
357 SUBROUTINE torch_c_tensor_data_ptr_int64 (tensor, ndims, sizes, data_ptr) &
358 BIND(C, name="torch_c_tensor_data_ptr_int64")
359 IMPORT :: c_char, c_ptr, c_int, c_int32_t, c_int64_t
360 TYPE(c_ptr),
VALUE :: tensor
361 INTEGER(kind=C_INT),
VALUE :: ndims
362 INTEGER(kind=C_INT64_T),
DIMENSION(*) :: sizes
363 TYPE(c_ptr) :: data_ptr
364 END SUBROUTINE torch_c_tensor_data_ptr_int64
368 data_ptr_c = c_null_ptr
369 cpassert(c_associated(tensor%c_ptr))
370 cpassert(.NOT.
ASSOCIATED(data_ptr))
371 CALL torch_c_tensor_data_ptr_int64 (tensor=tensor%c_ptr, &
376 sizes_f(1) = sizes_c(1)
378 IF (all(sizes_f /= 0))
THEN
379 cpassert(c_associated(data_ptr_c))
380 CALL c_f_pointer(data_ptr_c, data_ptr, shape=sizes_f)
383 cpabort(
"CP2K compiled without the Torch library.")
387 END SUBROUTINE torch_tensor_data_ptr_int64_1d
395 SUBROUTINE torch_tensor_from_array_double_1d(tensor, source, requires_grad)
397 REAL(dp),
DIMENSION(:),
ALLOCATABLE,
INTENT(IN) :: source
398 LOGICAL,
OPTIONAL,
INTENT(IN) :: requires_grad
400#if defined(__LIBTORCH)
401 INTEGER(kind=int_8),
DIMENSION(1) :: sizes_c
402 LOGICAL :: my_req_grad
405 SUBROUTINE torch_c_tensor_from_array_double (tensor, req_grad, ndims, sizes, source) &
406 BIND(C, name="torch_c_tensor_from_array_double")
407 IMPORT :: c_ptr, c_int, c_int32_t, c_int64_t, c_float, c_double, c_bool
408 TYPE(c_ptr) :: tensor
409 LOGICAL(kind=C_BOOL),
VALUE :: req_grad
410 INTEGER(kind=C_INT),
VALUE :: ndims
411 INTEGER(kind=C_INT64_T),
DIMENSION(*) :: sizes
412 REAL(kind=c_double),
DIMENSION(*) :: source
413 END SUBROUTINE torch_c_tensor_from_array_double
416 my_req_grad = .false.
417 IF (
PRESENT(requires_grad)) my_req_grad = requires_grad
419 sizes_c(1) =
SIZE(source, 1)
421 cpassert(.NOT. c_associated(tensor%c_ptr))
422 CALL torch_c_tensor_from_array_double (tensor=tensor%c_ptr, &
423 req_grad=
LOGICAL(my_req_grad, C_BOOL), &
427 cpassert(c_associated(tensor%c_ptr))
429 cpabort(
"CP2K compiled without the Torch library.")
432 mark_used(requires_grad)
434 END SUBROUTINE torch_tensor_from_array_double_1d
441 SUBROUTINE torch_tensor_data_ptr_double_1d(tensor, data_ptr)
443 REAL(dp),
DIMENSION(:),
POINTER :: data_ptr
445#if defined(__LIBTORCH)
446 INTEGER(kind=int_8),
DIMENSION(1) :: sizes_f, sizes_c
447 TYPE(c_ptr) :: data_ptr_c
450 SUBROUTINE torch_c_tensor_data_ptr_double (tensor, ndims, sizes, data_ptr) &
451 BIND(C, name="torch_c_tensor_data_ptr_double")
452 IMPORT :: c_char, c_ptr, c_int, c_int32_t, c_int64_t
453 TYPE(c_ptr),
VALUE :: tensor
454 INTEGER(kind=C_INT),
VALUE :: ndims
455 INTEGER(kind=C_INT64_T),
DIMENSION(*) :: sizes
456 TYPE(c_ptr) :: data_ptr
457 END SUBROUTINE torch_c_tensor_data_ptr_double
461 data_ptr_c = c_null_ptr
462 cpassert(c_associated(tensor%c_ptr))
463 cpassert(.NOT.
ASSOCIATED(data_ptr))
464 CALL torch_c_tensor_data_ptr_double (tensor=tensor%c_ptr, &
469 sizes_f(1) = sizes_c(1)
471 IF (all(sizes_f /= 0))
THEN
472 cpassert(c_associated(data_ptr_c))
473 CALL c_f_pointer(data_ptr_c, data_ptr, shape=sizes_f)
476 cpabort(
"CP2K compiled without the Torch library.")
480 END SUBROUTINE torch_tensor_data_ptr_double_1d
488 SUBROUTINE torch_tensor_from_array_int32_2d(tensor, source, requires_grad)
490 INTEGER(kind=int_4),
DIMENSION(:, :),
ALLOCATABLE,
INTENT(IN) :: source
491 LOGICAL,
OPTIONAL,
INTENT(IN) :: requires_grad
493#if defined(__LIBTORCH)
494 INTEGER(kind=int_8),
DIMENSION(2) :: sizes_c
495 LOGICAL :: my_req_grad
498 SUBROUTINE torch_c_tensor_from_array_int32 (tensor, req_grad, ndims, sizes, source) &
499 BIND(C, name="torch_c_tensor_from_array_int32")
500 IMPORT :: c_ptr, c_int, c_int32_t, c_int64_t, c_float, c_double, c_bool
501 TYPE(c_ptr) :: tensor
502 LOGICAL(kind=C_BOOL),
VALUE :: req_grad
503 INTEGER(kind=C_INT),
VALUE :: ndims
504 INTEGER(kind=C_INT64_T),
DIMENSION(*) :: sizes
505 INTEGER(kind=C_INT32_T),
DIMENSION(*) :: source
506 END SUBROUTINE torch_c_tensor_from_array_int32
509 my_req_grad = .false.
510 IF (
PRESENT(requires_grad)) my_req_grad = requires_grad
512 sizes_c(1) =
SIZE(source, 2)
513 sizes_c(2) =
SIZE(source, 1)
515 cpassert(.NOT. c_associated(tensor%c_ptr))
516 CALL torch_c_tensor_from_array_int32 (tensor=tensor%c_ptr, &
517 req_grad=
LOGICAL(my_req_grad, C_BOOL), &
521 cpassert(c_associated(tensor%c_ptr))
523 cpabort(
"CP2K compiled without the Torch library.")
526 mark_used(requires_grad)
528 END SUBROUTINE torch_tensor_from_array_int32_2d
535 SUBROUTINE torch_tensor_data_ptr_int32_2d(tensor, data_ptr)
537 INTEGER(kind=int_4),
DIMENSION(:, :),
POINTER :: data_ptr
539#if defined(__LIBTORCH)
540 INTEGER(kind=int_8),
DIMENSION(2) :: sizes_f, sizes_c
541 TYPE(c_ptr) :: data_ptr_c
544 SUBROUTINE torch_c_tensor_data_ptr_int32 (tensor, ndims, sizes, data_ptr) &
545 BIND(C, name="torch_c_tensor_data_ptr_int32")
546 IMPORT :: c_char, c_ptr, c_int, c_int32_t, c_int64_t
547 TYPE(c_ptr),
VALUE :: tensor
548 INTEGER(kind=C_INT),
VALUE :: ndims
549 INTEGER(kind=C_INT64_T),
DIMENSION(*) :: sizes
550 TYPE(c_ptr) :: data_ptr
551 END SUBROUTINE torch_c_tensor_data_ptr_int32
555 data_ptr_c = c_null_ptr
556 cpassert(c_associated(tensor%c_ptr))
557 cpassert(.NOT.
ASSOCIATED(data_ptr))
558 CALL torch_c_tensor_data_ptr_int32 (tensor=tensor%c_ptr, &
563 sizes_f(1) = sizes_c(2)
564 sizes_f(2) = sizes_c(1)
566 IF (all(sizes_f /= 0))
THEN
567 cpassert(c_associated(data_ptr_c))
568 CALL c_f_pointer(data_ptr_c, data_ptr, shape=sizes_f)
571 cpabort(
"CP2K compiled without the Torch library.")
575 END SUBROUTINE torch_tensor_data_ptr_int32_2d
583 SUBROUTINE torch_tensor_from_array_float_2d(tensor, source, requires_grad)
585 REAL(sp),
DIMENSION(:, :),
ALLOCATABLE,
INTENT(IN) :: source
586 LOGICAL,
OPTIONAL,
INTENT(IN) :: requires_grad
588#if defined(__LIBTORCH)
589 INTEGER(kind=int_8),
DIMENSION(2) :: sizes_c
590 LOGICAL :: my_req_grad
593 SUBROUTINE torch_c_tensor_from_array_float (tensor, req_grad, ndims, sizes, source) &
594 BIND(C, name="torch_c_tensor_from_array_float")
595 IMPORT :: c_ptr, c_int, c_int32_t, c_int64_t, c_float, c_double, c_bool
596 TYPE(c_ptr) :: tensor
597 LOGICAL(kind=C_BOOL),
VALUE :: req_grad
598 INTEGER(kind=C_INT),
VALUE :: ndims
599 INTEGER(kind=C_INT64_T),
DIMENSION(*) :: sizes
600 REAL(kind=c_float),
DIMENSION(*) :: source
601 END SUBROUTINE torch_c_tensor_from_array_float
604 my_req_grad = .false.
605 IF (
PRESENT(requires_grad)) my_req_grad = requires_grad
607 sizes_c(1) =
SIZE(source, 2)
608 sizes_c(2) =
SIZE(source, 1)
610 cpassert(.NOT. c_associated(tensor%c_ptr))
611 CALL torch_c_tensor_from_array_float (tensor=tensor%c_ptr, &
612 req_grad=
LOGICAL(my_req_grad, C_BOOL), &
616 cpassert(c_associated(tensor%c_ptr))
618 cpabort(
"CP2K compiled without the Torch library.")
621 mark_used(requires_grad)
623 END SUBROUTINE torch_tensor_from_array_float_2d
630 SUBROUTINE torch_tensor_data_ptr_float_2d(tensor, data_ptr)
632 REAL(sp),
DIMENSION(:, :),
POINTER :: data_ptr
634#if defined(__LIBTORCH)
635 INTEGER(kind=int_8),
DIMENSION(2) :: sizes_f, sizes_c
636 TYPE(c_ptr) :: data_ptr_c
639 SUBROUTINE torch_c_tensor_data_ptr_float (tensor, ndims, sizes, data_ptr) &
640 BIND(C, name="torch_c_tensor_data_ptr_float")
641 IMPORT :: c_char, c_ptr, c_int, c_int32_t, c_int64_t
642 TYPE(c_ptr),
VALUE :: tensor
643 INTEGER(kind=C_INT),
VALUE :: ndims
644 INTEGER(kind=C_INT64_T),
DIMENSION(*) :: sizes
645 TYPE(c_ptr) :: data_ptr
646 END SUBROUTINE torch_c_tensor_data_ptr_float
650 data_ptr_c = c_null_ptr
651 cpassert(c_associated(tensor%c_ptr))
652 cpassert(.NOT.
ASSOCIATED(data_ptr))
653 CALL torch_c_tensor_data_ptr_float (tensor=tensor%c_ptr, &
658 sizes_f(1) = sizes_c(2)
659 sizes_f(2) = sizes_c(1)
661 IF (all(sizes_f /= 0))
THEN
662 cpassert(c_associated(data_ptr_c))
663 CALL c_f_pointer(data_ptr_c, data_ptr, shape=sizes_f)
666 cpabort(
"CP2K compiled without the Torch library.")
670 END SUBROUTINE torch_tensor_data_ptr_float_2d
678 SUBROUTINE torch_tensor_from_array_int64_2d(tensor, source, requires_grad)
680 INTEGER(kind=int_8),
DIMENSION(:, :),
ALLOCATABLE,
INTENT(IN) :: source
681 LOGICAL,
OPTIONAL,
INTENT(IN) :: requires_grad
683#if defined(__LIBTORCH)
684 INTEGER(kind=int_8),
DIMENSION(2) :: sizes_c
685 LOGICAL :: my_req_grad
688 SUBROUTINE torch_c_tensor_from_array_int64 (tensor, req_grad, ndims, sizes, source) &
689 BIND(C, name="torch_c_tensor_from_array_int64")
690 IMPORT :: c_ptr, c_int, c_int32_t, c_int64_t, c_float, c_double, c_bool
691 TYPE(c_ptr) :: tensor
692 LOGICAL(kind=C_BOOL),
VALUE :: req_grad
693 INTEGER(kind=C_INT),
VALUE :: ndims
694 INTEGER(kind=C_INT64_T),
DIMENSION(*) :: sizes
695 INTEGER(kind=C_INT64_T),
DIMENSION(*) :: source
696 END SUBROUTINE torch_c_tensor_from_array_int64
699 my_req_grad = .false.
700 IF (
PRESENT(requires_grad)) my_req_grad = requires_grad
702 sizes_c(1) =
SIZE(source, 2)
703 sizes_c(2) =
SIZE(source, 1)
705 cpassert(.NOT. c_associated(tensor%c_ptr))
706 CALL torch_c_tensor_from_array_int64 (tensor=tensor%c_ptr, &
707 req_grad=
LOGICAL(my_req_grad, C_BOOL), &
711 cpassert(c_associated(tensor%c_ptr))
713 cpabort(
"CP2K compiled without the Torch library.")
716 mark_used(requires_grad)
718 END SUBROUTINE torch_tensor_from_array_int64_2d
725 SUBROUTINE torch_tensor_data_ptr_int64_2d(tensor, data_ptr)
727 INTEGER(kind=int_8),
DIMENSION(:, :),
POINTER :: data_ptr
729#if defined(__LIBTORCH)
730 INTEGER(kind=int_8),
DIMENSION(2) :: sizes_f, sizes_c
731 TYPE(c_ptr) :: data_ptr_c
734 SUBROUTINE torch_c_tensor_data_ptr_int64 (tensor, ndims, sizes, data_ptr) &
735 BIND(C, name="torch_c_tensor_data_ptr_int64")
736 IMPORT :: c_char, c_ptr, c_int, c_int32_t, c_int64_t
737 TYPE(c_ptr),
VALUE :: tensor
738 INTEGER(kind=C_INT),
VALUE :: ndims
739 INTEGER(kind=C_INT64_T),
DIMENSION(*) :: sizes
740 TYPE(c_ptr) :: data_ptr
741 END SUBROUTINE torch_c_tensor_data_ptr_int64
745 data_ptr_c = c_null_ptr
746 cpassert(c_associated(tensor%c_ptr))
747 cpassert(.NOT.
ASSOCIATED(data_ptr))
748 CALL torch_c_tensor_data_ptr_int64 (tensor=tensor%c_ptr, &
753 sizes_f(1) = sizes_c(2)
754 sizes_f(2) = sizes_c(1)
756 IF (all(sizes_f /= 0))
THEN
757 cpassert(c_associated(data_ptr_c))
758 CALL c_f_pointer(data_ptr_c, data_ptr, shape=sizes_f)
761 cpabort(
"CP2K compiled without the Torch library.")
765 END SUBROUTINE torch_tensor_data_ptr_int64_2d
773 SUBROUTINE torch_tensor_from_array_double_2d(tensor, source, requires_grad)
775 REAL(dp),
DIMENSION(:, :),
ALLOCATABLE,
INTENT(IN) :: source
776 LOGICAL,
OPTIONAL,
INTENT(IN) :: requires_grad
778#if defined(__LIBTORCH)
779 INTEGER(kind=int_8),
DIMENSION(2) :: sizes_c
780 LOGICAL :: my_req_grad
783 SUBROUTINE torch_c_tensor_from_array_double (tensor, req_grad, ndims, sizes, source) &
784 BIND(C, name="torch_c_tensor_from_array_double")
785 IMPORT :: c_ptr, c_int, c_int32_t, c_int64_t, c_float, c_double, c_bool
786 TYPE(c_ptr) :: tensor
787 LOGICAL(kind=C_BOOL),
VALUE :: req_grad
788 INTEGER(kind=C_INT),
VALUE :: ndims
789 INTEGER(kind=C_INT64_T),
DIMENSION(*) :: sizes
790 REAL(kind=c_double),
DIMENSION(*) :: source
791 END SUBROUTINE torch_c_tensor_from_array_double
794 my_req_grad = .false.
795 IF (
PRESENT(requires_grad)) my_req_grad = requires_grad
797 sizes_c(1) =
SIZE(source, 2)
798 sizes_c(2) =
SIZE(source, 1)
800 cpassert(.NOT. c_associated(tensor%c_ptr))
801 CALL torch_c_tensor_from_array_double (tensor=tensor%c_ptr, &
802 req_grad=
LOGICAL(my_req_grad, C_BOOL), &
806 cpassert(c_associated(tensor%c_ptr))
808 cpabort(
"CP2K compiled without the Torch library.")
811 mark_used(requires_grad)
813 END SUBROUTINE torch_tensor_from_array_double_2d
820 SUBROUTINE torch_tensor_data_ptr_double_2d(tensor, data_ptr)
822 REAL(dp),
DIMENSION(:, :),
POINTER :: data_ptr
824#if defined(__LIBTORCH)
825 INTEGER(kind=int_8),
DIMENSION(2) :: sizes_f, sizes_c
826 TYPE(c_ptr) :: data_ptr_c
829 SUBROUTINE torch_c_tensor_data_ptr_double (tensor, ndims, sizes, data_ptr) &
830 BIND(C, name="torch_c_tensor_data_ptr_double")
831 IMPORT :: c_char, c_ptr, c_int, c_int32_t, c_int64_t
832 TYPE(c_ptr),
VALUE :: tensor
833 INTEGER(kind=C_INT),
VALUE :: ndims
834 INTEGER(kind=C_INT64_T),
DIMENSION(*) :: sizes
835 TYPE(c_ptr) :: data_ptr
836 END SUBROUTINE torch_c_tensor_data_ptr_double
840 data_ptr_c = c_null_ptr
841 cpassert(c_associated(tensor%c_ptr))
842 cpassert(.NOT.
ASSOCIATED(data_ptr))
843 CALL torch_c_tensor_data_ptr_double (tensor=tensor%c_ptr, &
848 sizes_f(1) = sizes_c(2)
849 sizes_f(2) = sizes_c(1)
851 IF (all(sizes_f /= 0))
THEN
852 cpassert(c_associated(data_ptr_c))
853 CALL c_f_pointer(data_ptr_c, data_ptr, shape=sizes_f)
856 cpabort(
"CP2K compiled without the Torch library.")
860 END SUBROUTINE torch_tensor_data_ptr_double_2d
868 SUBROUTINE torch_tensor_from_array_int32_3d(tensor, source, requires_grad)
870 INTEGER(kind=int_4),
DIMENSION(:, :, :),
ALLOCATABLE,
INTENT(IN) :: source
871 LOGICAL,
OPTIONAL,
INTENT(IN) :: requires_grad
873#if defined(__LIBTORCH)
874 INTEGER(kind=int_8),
DIMENSION(3) :: sizes_c
875 LOGICAL :: my_req_grad
878 SUBROUTINE torch_c_tensor_from_array_int32 (tensor, req_grad, ndims, sizes, source) &
879 BIND(C, name="torch_c_tensor_from_array_int32")
880 IMPORT :: c_ptr, c_int, c_int32_t, c_int64_t, c_float, c_double, c_bool
881 TYPE(c_ptr) :: tensor
882 LOGICAL(kind=C_BOOL),
VALUE :: req_grad
883 INTEGER(kind=C_INT),
VALUE :: ndims
884 INTEGER(kind=C_INT64_T),
DIMENSION(*) :: sizes
885 INTEGER(kind=C_INT32_T),
DIMENSION(*) :: source
886 END SUBROUTINE torch_c_tensor_from_array_int32
889 my_req_grad = .false.
890 IF (
PRESENT(requires_grad)) my_req_grad = requires_grad
892 sizes_c(1) =
SIZE(source, 3)
893 sizes_c(2) =
SIZE(source, 2)
894 sizes_c(3) =
SIZE(source, 1)
896 cpassert(.NOT. c_associated(tensor%c_ptr))
897 CALL torch_c_tensor_from_array_int32 (tensor=tensor%c_ptr, &
898 req_grad=
LOGICAL(my_req_grad, C_BOOL), &
902 cpassert(c_associated(tensor%c_ptr))
904 cpabort(
"CP2K compiled without the Torch library.")
907 mark_used(requires_grad)
909 END SUBROUTINE torch_tensor_from_array_int32_3d
916 SUBROUTINE torch_tensor_data_ptr_int32_3d(tensor, data_ptr)
918 INTEGER(kind=int_4),
DIMENSION(:, :, :),
POINTER :: data_ptr
920#if defined(__LIBTORCH)
921 INTEGER(kind=int_8),
DIMENSION(3) :: sizes_f, sizes_c
922 TYPE(c_ptr) :: data_ptr_c
925 SUBROUTINE torch_c_tensor_data_ptr_int32 (tensor, ndims, sizes, data_ptr) &
926 BIND(C, name="torch_c_tensor_data_ptr_int32")
927 IMPORT :: c_char, c_ptr, c_int, c_int32_t, c_int64_t
928 TYPE(c_ptr),
VALUE :: tensor
929 INTEGER(kind=C_INT),
VALUE :: ndims
930 INTEGER(kind=C_INT64_T),
DIMENSION(*) :: sizes
931 TYPE(c_ptr) :: data_ptr
932 END SUBROUTINE torch_c_tensor_data_ptr_int32
936 data_ptr_c = c_null_ptr
937 cpassert(c_associated(tensor%c_ptr))
938 cpassert(.NOT.
ASSOCIATED(data_ptr))
939 CALL torch_c_tensor_data_ptr_int32 (tensor=tensor%c_ptr, &
944 sizes_f(1) = sizes_c(3)
945 sizes_f(2) = sizes_c(2)
946 sizes_f(3) = sizes_c(1)
948 IF (all(sizes_f /= 0))
THEN
949 cpassert(c_associated(data_ptr_c))
950 CALL c_f_pointer(data_ptr_c, data_ptr, shape=sizes_f)
953 cpabort(
"CP2K compiled without the Torch library.")
957 END SUBROUTINE torch_tensor_data_ptr_int32_3d
965 SUBROUTINE torch_tensor_from_array_float_3d(tensor, source, requires_grad)
967 REAL(sp),
DIMENSION(:, :, :),
ALLOCATABLE,
INTENT(IN) :: source
968 LOGICAL,
OPTIONAL,
INTENT(IN) :: requires_grad
970#if defined(__LIBTORCH)
971 INTEGER(kind=int_8),
DIMENSION(3) :: sizes_c
972 LOGICAL :: my_req_grad
975 SUBROUTINE torch_c_tensor_from_array_float (tensor, req_grad, ndims, sizes, source) &
976 BIND(C, name="torch_c_tensor_from_array_float")
977 IMPORT :: c_ptr, c_int, c_int32_t, c_int64_t, c_float, c_double, c_bool
978 TYPE(c_ptr) :: tensor
979 LOGICAL(kind=C_BOOL),
VALUE :: req_grad
980 INTEGER(kind=C_INT),
VALUE :: ndims
981 INTEGER(kind=C_INT64_T),
DIMENSION(*) :: sizes
982 REAL(kind=c_float),
DIMENSION(*) :: source
983 END SUBROUTINE torch_c_tensor_from_array_float
986 my_req_grad = .false.
987 IF (
PRESENT(requires_grad)) my_req_grad = requires_grad
989 sizes_c(1) =
SIZE(source, 3)
990 sizes_c(2) =
SIZE(source, 2)
991 sizes_c(3) =
SIZE(source, 1)
993 cpassert(.NOT. c_associated(tensor%c_ptr))
994 CALL torch_c_tensor_from_array_float (tensor=tensor%c_ptr, &
995 req_grad=
LOGICAL(my_req_grad, C_BOOL), &
999 cpassert(c_associated(tensor%c_ptr))
1001 cpabort(
"CP2K compiled without the Torch library.")
1004 mark_used(requires_grad)
1006 END SUBROUTINE torch_tensor_from_array_float_3d
1013 SUBROUTINE torch_tensor_data_ptr_float_3d(tensor, data_ptr)
1015 REAL(sp),
DIMENSION(:, :, :),
POINTER :: data_ptr
1017#if defined(__LIBTORCH)
1018 INTEGER(kind=int_8),
DIMENSION(3) :: sizes_f, sizes_c
1019 TYPE(c_ptr) :: data_ptr_c
1022 SUBROUTINE torch_c_tensor_data_ptr_float (tensor, ndims, sizes, data_ptr) &
1023 BIND(C, name="torch_c_tensor_data_ptr_float")
1024 IMPORT :: c_char, c_ptr, c_int, c_int32_t, c_int64_t
1025 TYPE(c_ptr),
VALUE :: tensor
1026 INTEGER(kind=C_INT),
VALUE :: ndims
1027 INTEGER(kind=C_INT64_T),
DIMENSION(*) :: sizes
1028 TYPE(c_ptr) :: data_ptr
1029 END SUBROUTINE torch_c_tensor_data_ptr_float
1033 data_ptr_c = c_null_ptr
1034 cpassert(c_associated(tensor%c_ptr))
1035 cpassert(.NOT.
ASSOCIATED(data_ptr))
1036 CALL torch_c_tensor_data_ptr_float (tensor=tensor%c_ptr, &
1039 data_ptr=data_ptr_c)
1041 sizes_f(1) = sizes_c(3)
1042 sizes_f(2) = sizes_c(2)
1043 sizes_f(3) = sizes_c(1)
1045 IF (all(sizes_f /= 0))
THEN
1046 cpassert(c_associated(data_ptr_c))
1047 CALL c_f_pointer(data_ptr_c, data_ptr, shape=sizes_f)
1050 cpabort(
"CP2K compiled without the Torch library.")
1054 END SUBROUTINE torch_tensor_data_ptr_float_3d
1062 SUBROUTINE torch_tensor_from_array_int64_3d(tensor, source, requires_grad)
1064 INTEGER(kind=int_8),
DIMENSION(:, :, :),
ALLOCATABLE,
INTENT(IN) :: source
1065 LOGICAL,
OPTIONAL,
INTENT(IN) :: requires_grad
1067#if defined(__LIBTORCH)
1068 INTEGER(kind=int_8),
DIMENSION(3) :: sizes_c
1069 LOGICAL :: my_req_grad
1072 SUBROUTINE torch_c_tensor_from_array_int64 (tensor, req_grad, ndims, sizes, source) &
1073 BIND(C, name="torch_c_tensor_from_array_int64")
1074 IMPORT :: c_ptr, c_int, c_int32_t, c_int64_t, c_float, c_double, c_bool
1075 TYPE(c_ptr) :: tensor
1076 LOGICAL(kind=C_BOOL),
VALUE :: req_grad
1077 INTEGER(kind=C_INT),
VALUE :: ndims
1078 INTEGER(kind=C_INT64_T),
DIMENSION(*) :: sizes
1079 INTEGER(kind=C_INT64_T),
DIMENSION(*) :: source
1080 END SUBROUTINE torch_c_tensor_from_array_int64
1083 my_req_grad = .false.
1084 IF (
PRESENT(requires_grad)) my_req_grad = requires_grad
1086 sizes_c(1) =
SIZE(source, 3)
1087 sizes_c(2) =
SIZE(source, 2)
1088 sizes_c(3) =
SIZE(source, 1)
1090 cpassert(.NOT. c_associated(tensor%c_ptr))
1091 CALL torch_c_tensor_from_array_int64 (tensor=tensor%c_ptr, &
1092 req_grad=
LOGICAL(my_req_grad, C_BOOL), &
1096 cpassert(c_associated(tensor%c_ptr))
1098 cpabort(
"CP2K compiled without the Torch library.")
1101 mark_used(requires_grad)
1103 END SUBROUTINE torch_tensor_from_array_int64_3d
1110 SUBROUTINE torch_tensor_data_ptr_int64_3d(tensor, data_ptr)
1112 INTEGER(kind=int_8),
DIMENSION(:, :, :),
POINTER :: data_ptr
1114#if defined(__LIBTORCH)
1115 INTEGER(kind=int_8),
DIMENSION(3) :: sizes_f, sizes_c
1116 TYPE(c_ptr) :: data_ptr_c
1119 SUBROUTINE torch_c_tensor_data_ptr_int64 (tensor, ndims, sizes, data_ptr) &
1120 BIND(C, name="torch_c_tensor_data_ptr_int64")
1121 IMPORT :: c_char, c_ptr, c_int, c_int32_t, c_int64_t
1122 TYPE(c_ptr),
VALUE :: tensor
1123 INTEGER(kind=C_INT),
VALUE :: ndims
1124 INTEGER(kind=C_INT64_T),
DIMENSION(*) :: sizes
1125 TYPE(c_ptr) :: data_ptr
1126 END SUBROUTINE torch_c_tensor_data_ptr_int64
1130 data_ptr_c = c_null_ptr
1131 cpassert(c_associated(tensor%c_ptr))
1132 cpassert(.NOT.
ASSOCIATED(data_ptr))
1133 CALL torch_c_tensor_data_ptr_int64 (tensor=tensor%c_ptr, &
1136 data_ptr=data_ptr_c)
1138 sizes_f(1) = sizes_c(3)
1139 sizes_f(2) = sizes_c(2)
1140 sizes_f(3) = sizes_c(1)
1142 IF (all(sizes_f /= 0))
THEN
1143 cpassert(c_associated(data_ptr_c))
1144 CALL c_f_pointer(data_ptr_c, data_ptr, shape=sizes_f)
1147 cpabort(
"CP2K compiled without the Torch library.")
1151 END SUBROUTINE torch_tensor_data_ptr_int64_3d
1159 SUBROUTINE torch_tensor_from_array_double_3d(tensor, source, requires_grad)
1161 REAL(dp),
DIMENSION(:, :, :),
ALLOCATABLE,
INTENT(IN) :: source
1162 LOGICAL,
OPTIONAL,
INTENT(IN) :: requires_grad
1164#if defined(__LIBTORCH)
1165 INTEGER(kind=int_8),
DIMENSION(3) :: sizes_c
1166 LOGICAL :: my_req_grad
1169 SUBROUTINE torch_c_tensor_from_array_double (tensor, req_grad, ndims, sizes, source) &
1170 BIND(C, name="torch_c_tensor_from_array_double")
1171 IMPORT :: c_ptr, c_int, c_int32_t, c_int64_t, c_float, c_double, c_bool
1172 TYPE(c_ptr) :: tensor
1173 LOGICAL(kind=C_BOOL),
VALUE :: req_grad
1174 INTEGER(kind=C_INT),
VALUE :: ndims
1175 INTEGER(kind=C_INT64_T),
DIMENSION(*) :: sizes
1176 REAL(kind=c_double),
DIMENSION(*) :: source
1177 END SUBROUTINE torch_c_tensor_from_array_double
1180 my_req_grad = .false.
1181 IF (
PRESENT(requires_grad)) my_req_grad = requires_grad
1183 sizes_c(1) =
SIZE(source, 3)
1184 sizes_c(2) =
SIZE(source, 2)
1185 sizes_c(3) =
SIZE(source, 1)
1187 cpassert(.NOT. c_associated(tensor%c_ptr))
1188 CALL torch_c_tensor_from_array_double (tensor=tensor%c_ptr, &
1189 req_grad=
LOGICAL(my_req_grad, C_BOOL), &
1193 cpassert(c_associated(tensor%c_ptr))
1195 cpabort(
"CP2K compiled without the Torch library.")
1198 mark_used(requires_grad)
1200 END SUBROUTINE torch_tensor_from_array_double_3d
1207 SUBROUTINE torch_tensor_data_ptr_double_3d(tensor, data_ptr)
1209 REAL(dp),
DIMENSION(:, :, :),
POINTER :: data_ptr
1211#if defined(__LIBTORCH)
1212 INTEGER(kind=int_8),
DIMENSION(3) :: sizes_f, sizes_c
1213 TYPE(c_ptr) :: data_ptr_c
1216 SUBROUTINE torch_c_tensor_data_ptr_double (tensor, ndims, sizes, data_ptr) &
1217 BIND(C, name="torch_c_tensor_data_ptr_double")
1218 IMPORT :: c_char, c_ptr, c_int, c_int32_t, c_int64_t
1219 TYPE(c_ptr),
VALUE :: tensor
1220 INTEGER(kind=C_INT),
VALUE :: ndims
1221 INTEGER(kind=C_INT64_T),
DIMENSION(*) :: sizes
1222 TYPE(c_ptr) :: data_ptr
1223 END SUBROUTINE torch_c_tensor_data_ptr_double
1227 data_ptr_c = c_null_ptr
1228 cpassert(c_associated(tensor%c_ptr))
1229 cpassert(.NOT.
ASSOCIATED(data_ptr))
1230 CALL torch_c_tensor_data_ptr_double (tensor=tensor%c_ptr, &
1233 data_ptr=data_ptr_c)
1235 sizes_f(1) = sizes_c(3)
1236 sizes_f(2) = sizes_c(2)
1237 sizes_f(3) = sizes_c(1)
1239 IF (all(sizes_f /= 0))
THEN
1240 cpassert(c_associated(data_ptr_c))
1241 CALL c_f_pointer(data_ptr_c, data_ptr, shape=sizes_f)
1244 cpabort(
"CP2K compiled without the Torch library.")
1248 END SUBROUTINE torch_tensor_data_ptr_double_3d
1256 SUBROUTINE torch_tensor_reset_from_array_double_1d(tensor, source, requires_grad)
1258 REAL(dp),
DIMENSION(:),
ALLOCATABLE,
INTENT(IN) :: source
1259 LOGICAL,
OPTIONAL,
INTENT(IN) :: requires_grad
1261#if defined(__LIBTORCH)
1262 INTEGER(kind=int_8),
DIMENSION(1) :: sizes_c
1263 LOGICAL :: my_req_grad
1266 SUBROUTINE torch_c_tensor_reset_from_array_double(tensor, req_grad, ndims, sizes, source) &
1267 BIND(C, name="torch_c_tensor_reset_from_array_double")
1268 IMPORT :: c_ptr, c_int, c_int64_t, c_double, c_bool
1269 TYPE(c_ptr) :: tensor
1270 LOGICAL(kind=C_BOOL),
VALUE :: req_grad
1271 INTEGER(kind=C_INT),
VALUE :: ndims
1272 INTEGER(kind=C_INT64_T),
DIMENSION(*) :: sizes
1273 REAL(kind=c_double),
DIMENSION(*) :: source
1274 END SUBROUTINE torch_c_tensor_reset_from_array_double
1277 my_req_grad = .false.
1278 IF (
PRESENT(requires_grad)) my_req_grad = requires_grad
1280 sizes_c(1) =
SIZE(source, 1)
1282 CALL torch_c_tensor_reset_from_array_double(tensor=tensor%c_ptr, &
1283 req_grad=
LOGICAL(my_req_grad, C_BOOL), &
1287 cpassert(c_associated(tensor%c_ptr))
1289 cpabort(
"CP2K compiled without the Torch library.")
1292 mark_used(requires_grad)
1294 END SUBROUTINE torch_tensor_reset_from_array_double_1d
1301 SUBROUTINE torch_tensor_reset_from_array_double_2d(tensor, source, requires_grad)
1303 REAL(dp),
DIMENSION(:, :),
ALLOCATABLE,
INTENT(IN) :: source
1304 LOGICAL,
OPTIONAL,
INTENT(IN) :: requires_grad
1306#if defined(__LIBTORCH)
1307 INTEGER(kind=int_8),
DIMENSION(2) :: sizes_c
1308 LOGICAL :: my_req_grad
1311 SUBROUTINE torch_c_tensor_reset_from_array_double(tensor, req_grad, ndims, sizes, source) &
1312 BIND(C, name="torch_c_tensor_reset_from_array_double")
1313 IMPORT :: c_ptr, c_int, c_int64_t, c_double, c_bool
1314 TYPE(c_ptr) :: tensor
1315 LOGICAL(kind=C_BOOL),
VALUE :: req_grad
1316 INTEGER(kind=C_INT),
VALUE :: ndims
1317 INTEGER(kind=C_INT64_T),
DIMENSION(*) :: sizes
1318 REAL(kind=c_double),
DIMENSION(*) :: source
1319 END SUBROUTINE torch_c_tensor_reset_from_array_double
1322 my_req_grad = .false.
1323 IF (
PRESENT(requires_grad)) my_req_grad = requires_grad
1325 sizes_c(1) =
SIZE(source, 2)
1326 sizes_c(2) =
SIZE(source, 1)
1328 CALL torch_c_tensor_reset_from_array_double(tensor=tensor%c_ptr, &
1329 req_grad=
LOGICAL(my_req_grad, C_BOOL), &
1333 cpassert(c_associated(tensor%c_ptr))
1335 cpabort(
"CP2K compiled without the Torch library.")
1338 mark_used(requires_grad)
1340 END SUBROUTINE torch_tensor_reset_from_array_double_2d
1347 SUBROUTINE torch_tensor_reset_from_array_double_3d(tensor, source, requires_grad)
1349 REAL(dp),
DIMENSION(:, :, :),
ALLOCATABLE,
INTENT(IN) :: source
1350 LOGICAL,
OPTIONAL,
INTENT(IN) :: requires_grad
1352#if defined(__LIBTORCH)
1353 INTEGER(kind=int_8),
DIMENSION(3) :: sizes_c
1354 LOGICAL :: my_req_grad
1357 SUBROUTINE torch_c_tensor_reset_from_array_double(tensor, req_grad, ndims, sizes, source) &
1358 BIND(C, name="torch_c_tensor_reset_from_array_double")
1359 IMPORT :: c_ptr, c_int, c_int64_t, c_double, c_bool
1360 TYPE(c_ptr) :: tensor
1361 LOGICAL(kind=C_BOOL),
VALUE :: req_grad
1362 INTEGER(kind=C_INT),
VALUE :: ndims
1363 INTEGER(kind=C_INT64_T),
DIMENSION(*) :: sizes
1364 REAL(kind=c_double),
DIMENSION(*) :: source
1365 END SUBROUTINE torch_c_tensor_reset_from_array_double
1368 my_req_grad = .false.
1369 IF (
PRESENT(requires_grad)) my_req_grad = requires_grad
1371 sizes_c(1) =
SIZE(source, 3)
1372 sizes_c(2) =
SIZE(source, 2)
1373 sizes_c(3) =
SIZE(source, 1)
1375 CALL torch_c_tensor_reset_from_array_double(tensor=tensor%c_ptr, &
1376 req_grad=
LOGICAL(my_req_grad, C_BOOL), &
1380 cpassert(c_associated(tensor%c_ptr))
1382 cpabort(
"CP2K compiled without the Torch library.")
1385 mark_used(requires_grad)
1387 END SUBROUTINE torch_tensor_reset_from_array_double_3d
1395 INTEGER,
INTENT(IN) :: dim, extent
1398#if defined(__LIBTORCH)
1400 SUBROUTINE torch_c_tensor_expand_dim(tensor, dim, extent, result) &
1401 BIND(C, name="torch_c_tensor_expand_dim")
1402 IMPORT :: c_int64_t, c_ptr
1403 TYPE(c_ptr),
VALUE ::
tensor
1404 INTEGER(kind=C_INT64_T),
VALUE :: dim, extent
1405 TYPE(c_ptr) :: result
1406 END SUBROUTINE torch_c_tensor_expand_dim
1409 cpassert(c_associated(
tensor%c_ptr))
1410 cpassert(.NOT. c_associated(result%c_ptr))
1412 cpassert(extent >= 0)
1414 dim=int(dim, c_int64_t), &
1415 extent=int(extent, c_int64_t), &
1416 result=result%c_ptr)
1417 cpassert(c_associated(result%c_ptr))
1419 cpabort(
"CP2K compiled without the Torch library.")
1432 INTEGER,
INTENT(IN) :: dim, start_index, length
1435#if defined(__LIBTORCH)
1437 SUBROUTINE torch_c_tensor_narrow(tensor, dim, start_index, length, result) &
1438 BIND(C, name="torch_c_tensor_narrow")
1439 IMPORT :: c_int64_t, c_ptr
1440 TYPE(c_ptr),
VALUE ::
tensor
1441 INTEGER(kind=C_INT64_T),
VALUE :: dim, start_index, length
1442 TYPE(c_ptr) :: result
1443 END SUBROUTINE torch_c_tensor_narrow
1446 cpassert(c_associated(
tensor%c_ptr))
1447 cpassert(.NOT. c_associated(result%c_ptr))
1449 cpassert(start_index >= 0)
1450 cpassert(length >= 0)
1452 dim=int(dim, c_int64_t), &
1453 start_index=int(start_index, c_int64_t), &
1454 length=int(length, c_int64_t), &
1455 result=result%c_ptr)
1456 cpassert(c_associated(result%c_ptr))
1458 cpabort(
"CP2K compiled without the Torch library.")
1461 mark_used(start_index)
1475#if defined(__LIBTORCH)
1476 CHARACTER(len=*),
PARAMETER :: routinen =
'torch_tensor_backward'
1480 SUBROUTINE torch_c_tensor_backward(tensor, outer_grad) &
1481 BIND(C, name="torch_c_tensor_backward")
1482 IMPORT :: c_char, c_ptr
1483 TYPE(c_ptr),
VALUE ::
tensor
1484 TYPE(c_ptr),
VALUE :: outer_grad
1485 END SUBROUTINE torch_c_tensor_backward
1488 CALL timeset(routinen, handle)
1489 cpassert(c_associated(
tensor%c_ptr))
1490 cpassert(c_associated(outer_grad%c_ptr))
1491 CALL torch_c_tensor_backward(
tensor=
tensor%c_ptr, outer_grad=outer_grad%c_ptr)
1492 CALL timestop(handle)
1494 cpabort(
"CP2K compiled without the Torch library.")
1496 mark_used(outer_grad)
1506#if defined(__LIBTORCH)
1508 SUBROUTINE torch_c_tensor_backward_scalar(tensor) &
1509 BIND(C, name="torch_c_tensor_backward_scalar")
1511 TYPE(c_ptr),
VALUE ::
tensor
1512 END SUBROUTINE torch_c_tensor_backward_scalar
1515 cpassert(c_associated(
tensor%c_ptr))
1516 CALL torch_c_tensor_backward_scalar(
tensor=
tensor%c_ptr)
1518 cpabort(
"CP2K compiled without the Torch library.")
1528 LOGICAL,
INTENT(IN) :: requires_grad
1530#if defined(__LIBTORCH)
1532 SUBROUTINE torch_c_tensor_to_device_leaf(tensor, req_grad) &
1533 BIND(C, name="torch_c_tensor_to_device_leaf")
1534 IMPORT :: c_bool, c_ptr
1536 LOGICAL(kind=C_BOOL),
VALUE :: req_grad
1537 END SUBROUTINE torch_c_tensor_to_device_leaf
1540 cpassert(c_associated(
tensor%c_ptr))
1541 CALL torch_c_tensor_to_device_leaf(
tensor=
tensor%c_ptr, &
1542 req_grad=
LOGICAL(requires_grad, c_bool))
1543 cpassert(c_associated(
tensor%c_ptr))
1545 cpabort(
"CP2K compiled without the Torch library.")
1547 mark_used(requires_grad)
1555 LOGICAL,
INTENT(IN) :: use_cuda
1557#if defined(__LIBTORCH)
1559 SUBROUTINE torch_c_use_cuda(use_cuda)
BIND(C, name="torch_c_use_cuda")
1561 LOGICAL(kind=C_BOOL),
VALUE :: use_cuda
1562 END SUBROUTINE torch_c_use_cuda
1565 CALL torch_c_use_cuda(use_cuda=
LOGICAL(use_cuda, c_bool))
1579#if defined(__LIBTORCH)
1581 SUBROUTINE torch_c_tensor_grad(tensor, grad) &
1582 BIND(C, name="torch_c_tensor_grad")
1584 TYPE(c_ptr),
VALUE ::
tensor
1586 END SUBROUTINE torch_c_tensor_grad
1589 cpassert(c_associated(
tensor%c_ptr))
1590 cpassert(.NOT. c_associated(grad%c_ptr))
1591 CALL torch_c_tensor_grad(
tensor=
tensor%c_ptr, grad=grad%c_ptr)
1592 cpassert(c_associated(grad%c_ptr))
1594 cpabort(
"CP2K compiled without the Torch library.")
1607#if defined(__LIBTORCH)
1609 SUBROUTINE torch_c_tensor_grad_batch3(tensor1, tensor2, tensor3, grad1, grad2, grad3) &
1610 BIND(C, name="torch_c_tensor_grad_batch3")
1612 TYPE(c_ptr),
VALUE :: tensor1, tensor2, tensor3
1613 TYPE(c_ptr) :: grad1, grad2, grad3
1614 END SUBROUTINE torch_c_tensor_grad_batch3
1617 cpassert(c_associated(tensor1%c_ptr))
1618 cpassert(c_associated(tensor2%c_ptr))
1619 cpassert(c_associated(tensor3%c_ptr))
1620 cpassert(.NOT. c_associated(grad1%c_ptr))
1621 cpassert(.NOT. c_associated(grad2%c_ptr))
1622 cpassert(.NOT. c_associated(grad3%c_ptr))
1623 CALL torch_c_tensor_grad_batch3(tensor1=tensor1%c_ptr, tensor2=tensor2%c_ptr, &
1624 tensor3=tensor3%c_ptr, grad1=grad1%c_ptr, &
1625 grad2=grad2%c_ptr, grad3=grad3%c_ptr)
1626 cpassert(c_associated(grad1%c_ptr))
1627 cpassert(c_associated(grad2%c_ptr))
1628 cpassert(c_associated(grad3%c_ptr))
1630 cpabort(
"CP2K compiled without the Torch library.")
1647#if defined(__LIBTORCH)
1649 SUBROUTINE torch_c_tensor_weighted_sum(values, weights, result) &
1650 BIND(C, name="torch_c_tensor_weighted_sum")
1652 TYPE(c_ptr),
VALUE :: values
1653 TYPE(c_ptr),
VALUE :: weights
1654 TYPE(c_ptr) :: result
1655 END SUBROUTINE torch_c_tensor_weighted_sum
1658 cpassert(c_associated(values%c_ptr))
1659 cpassert(c_associated(weights%c_ptr))
1660 cpassert(.NOT. c_associated(result%c_ptr))
1661 CALL torch_c_tensor_weighted_sum(values=values%c_ptr, weights=weights%c_ptr, result=result%c_ptr)
1662 cpassert(c_associated(result%c_ptr))
1664 cpabort(
"CP2K compiled without the Torch library.")
1676 REAL(kind=
dp) ::
value
1678#if defined(__LIBTORCH)
1680 FUNCTION torch_c_tensor_item_double(tensor)
RESULT(value) &
1681 BIND(C, name="torch_c_tensor_item_double")
1682 IMPORT :: c_double, c_ptr
1683 TYPE(c_ptr),
VALUE ::
tensor
1684 REAL(kind=c_double) ::
value
1685 END FUNCTION torch_c_tensor_item_double
1688 cpassert(c_associated(
tensor%c_ptr))
1689 value = torch_c_tensor_item_double(
tensor=
tensor%c_ptr)
1692 cpabort(
"CP2K compiled without the Torch library.")
1704#if defined(__LIBTORCH)
1706 SUBROUTINE torch_c_tensor_release(tensor)
BIND(C, name="torch_c_tensor_release")
1708 TYPE(c_ptr),
VALUE ::
tensor
1709 END SUBROUTINE torch_c_tensor_release
1712 cpassert(c_associated(
tensor%c_ptr))
1714 tensor%c_ptr = c_null_ptr
1716 cpabort(
"CP2K was compiled without Torch library.")
1728#if defined(__LIBTORCH)
1730 SUBROUTINE torch_c_dict_create(dict)
BIND(C, name="torch_c_dict_create")
1733 END SUBROUTINE torch_c_dict_create
1736 cpassert(.NOT. c_associated(dict%c_ptr))
1737 CALL torch_c_dict_create(dict=dict%c_ptr)
1738 cpassert(c_associated(dict%c_ptr))
1740 cpabort(
"CP2K was compiled without Torch library.")
1752#if defined(__LIBTORCH)
1754 SUBROUTINE torch_c_dict_clone(source, target)
BIND(C, name="torch_c_dict_clone")
1756 TYPE(c_ptr),
VALUE :: source
1757 TYPE(c_ptr) :: target
1758 END SUBROUTINE torch_c_dict_clone
1761 cpassert(c_associated(source%c_ptr))
1762 cpassert(.NOT. c_associated(
target%c_ptr))
1763 CALL torch_c_dict_clone(source=source%c_ptr,
target=
target%c_ptr)
1764 cpassert(c_associated(
target%c_ptr))
1766 cpabort(
"CP2K was compiled without Torch library.")
1778 CHARACTER(len=*),
INTENT(IN) :: key
1781#if defined(__LIBTORCH)
1784 SUBROUTINE torch_c_dict_insert(dict, key, tensor) &
1785 BIND(C, name="torch_c_dict_insert")
1786 IMPORT :: c_char, c_ptr
1787 TYPE(c_ptr),
VALUE :: dict
1788 CHARACTER(kind=C_CHAR),
DIMENSION(*) :: key
1789 TYPE(c_ptr),
VALUE ::
tensor
1790 END SUBROUTINE torch_c_dict_insert
1793 cpassert(c_associated(dict%c_ptr))
1794 cpassert(c_associated(
tensor%c_ptr))
1795 CALL torch_c_dict_insert(dict=dict%c_ptr, key=trim(key)//c_null_char,
tensor=
tensor%c_ptr)
1797 cpabort(
"CP2K compiled without the Torch library.")
1810 CHARACTER(len=*),
INTENT(IN) :: key
1813#if defined(__LIBTORCH)
1816 SUBROUTINE torch_c_dict_get(dict, key, tensor) &
1817 BIND(C, name="torch_c_dict_get")
1818 IMPORT :: c_char, c_ptr
1819 TYPE(c_ptr),
VALUE :: dict
1820 CHARACTER(kind=C_CHAR),
DIMENSION(*) :: key
1822 END SUBROUTINE torch_c_dict_get
1825 cpassert(c_associated(dict%c_ptr))
1826 cpassert(.NOT. c_associated(
tensor%c_ptr))
1827 CALL torch_c_dict_get(dict=dict%c_ptr, key=trim(key)//c_null_char,
tensor=
tensor%c_ptr)
1828 cpassert(c_associated(
tensor%c_ptr))
1831 cpabort(
"CP2K compiled without the Torch library.")
1845#if defined(__LIBTORCH)
1847 SUBROUTINE torch_c_dict_release(dict)
BIND(C, name="torch_c_dict_release")
1849 TYPE(c_ptr),
VALUE :: dict
1850 END SUBROUTINE torch_c_dict_release
1853 cpassert(c_associated(dict%c_ptr))
1854 CALL torch_c_dict_release(dict=dict%c_ptr)
1855 dict%c_ptr = c_null_ptr
1857 cpabort(
"CP2K was compiled without Torch library.")
1868 CHARACTER(len=*),
INTENT(IN) :: filename
1870#if defined(__LIBTORCH)
1871 CHARACTER(len=*),
PARAMETER :: routinen =
'torch_model_load'
1875 SUBROUTINE torch_c_model_load(model, filename)
BIND(C, name="torch_c_model_load")
1876 IMPORT :: c_ptr, c_char
1877 TYPE(c_ptr) :: model
1878 CHARACTER(kind=C_CHAR),
DIMENSION(*) :: filename
1879 END SUBROUTINE torch_c_model_load
1882 CALL timeset(routinen, handle)
1883 cpassert(.NOT. c_associated(model%c_ptr))
1884 CALL torch_c_model_load(model=model%c_ptr, filename=trim(filename)//c_null_char)
1885 cpassert(c_associated(model%c_ptr))
1886 CALL timestop(handle)
1888 cpabort(
"CP2K was compiled without Torch library.")
1899 CHARACTER(len=*),
INTENT(IN) :: filename, key1, key2
1900 CHARACTER(:),
ALLOCATABLE,
INTENT(OUT) :: value1, value2
1902#if defined(__LIBTORCH)
1903 CHARACTER(len=*),
PARAMETER :: routinen =
'torch_model_load_with_metadata'
1904 INTEGER :: handle, length1, length2
1905 TYPE(c_ptr) :: content1_c, content2_c
1908 SUBROUTINE torch_c_model_load_with_metadata(model, filename, key1, key2, &
1909 content1, length1, content2, length2) &
1910 BIND(C, name="torch_c_model_load_with_metadata")
1911 IMPORT :: c_char, c_int, c_ptr
1912 TYPE(c_ptr) :: model
1913 CHARACTER(kind=C_CHAR),
DIMENSION(*) :: filename, key1, key2
1914 TYPE(c_ptr) :: content1, content2
1915 INTEGER(kind=C_INT) :: length1, length2
1916 END SUBROUTINE torch_c_model_load_with_metadata
1919 CALL timeset(routinen, handle)
1920 cpassert(.NOT. c_associated(model%c_ptr))
1921 content1_c = c_null_ptr
1922 content2_c = c_null_ptr
1925 CALL torch_c_model_load_with_metadata(model=model%c_ptr, &
1926 filename=trim(filename)//c_null_char, &
1927 key1=trim(key1)//c_null_char, &
1928 key2=trim(key2)//c_null_char, &
1929 content1=content1_c, length1=length1, &
1930 content2=content2_c, length2=length2)
1931 cpassert(c_associated(model%c_ptr))
1932 CALL c_string_to_allocatable(content1_c, length1, value1)
1933 CALL c_string_to_allocatable(content2_c, length2, value2)
1934 CALL timestop(handle)
1936 cpabort(
"CP2K was compiled without Torch library.")
1952#if defined(__LIBTORCH)
1954 SUBROUTINE torch_c_model_remap_device_constants(model) &
1955 BIND(C, name="torch_c_model_remap_device_constants")
1957 TYPE(c_ptr),
VALUE :: model
1958 END SUBROUTINE torch_c_model_remap_device_constants
1961 cpassert(c_associated(model%c_ptr))
1962 CALL torch_c_model_remap_device_constants(model=model%c_ptr)
1964 cpabort(
"CP2K was compiled without Torch library.")
1975#if defined(__LIBTORCH)
1977 SUBROUTINE torch_c_model_promote_float32(model)
BIND(C, name="torch_c_model_promote_float32")
1979 TYPE(c_ptr),
VALUE :: model
1980 END SUBROUTINE torch_c_model_promote_float32
1983 cpassert(c_associated(model%c_ptr))
1984 CALL torch_c_model_promote_float32(model%c_ptr)
1986 cpabort(
"CP2K was compiled without Torch library.")
1997#if defined(__LIBTORCH)
1999 SUBROUTINE torch_c_model_disable_parameter_gradients(model) &
2000 BIND(C, name="torch_c_model_disable_parameter_gradients")
2002 TYPE(c_ptr),
VALUE :: model
2003 END SUBROUTINE torch_c_model_disable_parameter_gradients
2006 cpassert(c_associated(model%c_ptr))
2007 CALL torch_c_model_disable_parameter_gradients(model=model%c_ptr)
2009 cpabort(
"CP2K was compiled without Torch library.")
2023#if defined(__LIBTORCH)
2024 CHARACTER(len=*),
PARAMETER :: routinen =
'torch_model_forward'
2028 SUBROUTINE torch_c_model_forward(model, inputs, outputs)
BIND(C, name="torch_c_model_forward")
2030 TYPE(c_ptr),
VALUE :: model
2031 TYPE(c_ptr),
VALUE :: inputs
2032 TYPE(c_ptr),
VALUE :: outputs
2033 END SUBROUTINE torch_c_model_forward
2036 CALL timeset(routinen, handle)
2037 cpassert(c_associated(model%c_ptr))
2038 cpassert(c_associated(inputs%c_ptr))
2039 cpassert(c_associated(outputs%c_ptr))
2040 CALL torch_c_model_forward(model=model%c_ptr, inputs=inputs%c_ptr, outputs=outputs%c_ptr)
2041 CALL timestop(handle)
2043 cpabort(
"CP2K was compiled without Torch library.")
2055 CHARACTER(len=*),
INTENT(IN) :: method_name
2059#if defined(__LIBTORCH)
2060 CHARACTER(len=*),
PARAMETER :: routinen =
'torch_model_forward_mol_tensor'
2064 SUBROUTINE torch_c_model_forward_mol_tensor(model, method_name, inputs, output) &
2065 BIND(C, name="torch_c_model_forward_mol_tensor")
2066 IMPORT :: c_char, c_ptr
2067 TYPE(c_ptr),
VALUE :: model
2068 CHARACTER(kind=C_CHAR),
DIMENSION(*) :: method_name
2069 TYPE(c_ptr),
VALUE :: inputs
2070 TYPE(c_ptr) :: output
2071 END SUBROUTINE torch_c_model_forward_mol_tensor
2074 CALL timeset(routinen, handle)
2075 cpassert(c_associated(model%c_ptr))
2076 cpassert(c_associated(inputs%c_ptr))
2077 cpassert(.NOT. c_associated(output%c_ptr))
2078 CALL torch_c_model_forward_mol_tensor(model=model%c_ptr, &
2079 method_name=trim(method_name)//c_null_char, &
2080 inputs=inputs%c_ptr, &
2081 output=output%c_ptr)
2082 cpassert(c_associated(output%c_ptr))
2083 CALL timestop(handle)
2085 cpabort(
"CP2K was compiled without Torch library.")
2087 mark_used(method_name)
2100#if defined(__LIBTORCH)
2102 SUBROUTINE torch_c_model_release(model)
BIND(C, name="torch_c_model_release")
2104 TYPE(c_ptr),
VALUE :: model
2105 END SUBROUTINE torch_c_model_release
2108 cpassert(c_associated(model%c_ptr))
2109 CALL torch_c_model_release(model=model%c_ptr)
2110 model%c_ptr = c_null_ptr
2112 cpabort(
"CP2K was compiled without Torch library.")
2122 CHARACTER(len=*),
INTENT(IN) :: filename, key
2123 CHARACTER(:),
ALLOCATABLE :: res
2125#if defined(__LIBTORCH)
2126 CHARACTER(len=*),
PARAMETER :: routinen =
'torch_model_read_metadata'
2130 TYPE(c_ptr) :: content_c
2133 SUBROUTINE torch_c_model_read_metadata(filename, key, content, length) &
2134 BIND(C, name="torch_c_model_read_metadata")
2135 IMPORT :: c_char, c_ptr, c_int
2136 CHARACTER(kind=C_CHAR),
DIMENSION(*) :: filename, key
2137 TYPE(c_ptr) :: content
2138 INTEGER(kind=C_INT) :: length
2139 END SUBROUTINE torch_c_model_read_metadata
2142 CALL timeset(routinen, handle)
2143 content_c = c_null_ptr
2145 CALL torch_c_model_read_metadata(filename=trim(filename)//c_null_char, &
2146 key=trim(key)//c_null_char, &
2147 content=content_c, &
2149 CALL c_string_to_allocatable(content_c, length, res)
2150 CALL timestop(handle)
2155 cpabort(
"CP2K was compiled without Torch library.")
2162 SUBROUTINE c_string_to_allocatable(content_c, length, res)
2163 TYPE(c_ptr),
INTENT(INOUT) :: content_c
2164 INTEGER,
INTENT(IN) :: length
2165 CHARACTER(:),
ALLOCATABLE,
INTENT(OUT) :: res
2167#if defined(__LIBTORCH)
2168 CHARACTER(LEN=1, KIND=C_CHAR),
DIMENSION(:), &
2169 POINTER :: content_f
2173 SUBROUTINE torch_c_free_string(content)
BIND(C, name="torch_c_free_string")
2175 TYPE(c_ptr),
VALUE :: content
2176 END SUBROUTINE torch_c_free_string
2179 cpassert(c_associated(content_c))
2180 cpassert(length >= 0)
2182 CALL c_f_pointer(content_c, content_f, shape=[length + 1])
2183 cpassert(content_f(length + 1) == c_null_char)
2185 ALLOCATE (
CHARACTER(LEN=length) :: res)
2187 cpassert(content_f(i) /= c_null_char)
2188 res(i:i) = content_f(i)
2192 CALL torch_c_free_string(content_c)
2193 content_c = c_null_ptr
2197 mark_used(content_c)
2199 cpabort(
"CP2K was compiled without Torch library.")
2201 END SUBROUTINE c_string_to_allocatable
2210#if defined(__LIBTORCH)
2212 FUNCTION torch_c_cuda_is_available()
BIND(C, name="torch_c_cuda_is_available")
2214 LOGICAL(C_BOOL) :: torch_c_cuda_is_available
2215 END FUNCTION torch_c_cuda_is_available
2218 res = torch_c_cuda_is_available()
2220 cpabort(
"CP2K was compiled without Torch library.")
2231#if defined(__LIBTORCH)
2233 FUNCTION torch_c_cuda_device_count()
BIND(C, name="torch_c_cuda_device_count")
2235 INTEGER(C_INT) :: torch_c_cuda_device_count
2236 END FUNCTION torch_c_cuda_device_count
2239 count = torch_c_cuda_device_count()
2241 cpabort(
"CP2K was compiled without Torch library.")
2253 LOGICAL,
INTENT(IN) :: allow_tf32
2255#if defined(__LIBTORCH)
2257 SUBROUTINE torch_c_allow_tf32(allow_tf32)
BIND(C, name="torch_c_allow_tf32")
2259 LOGICAL(C_BOOL),
VALUE :: allow_tf32
2260 END SUBROUTINE torch_c_allow_tf32
2263 CALL torch_c_allow_tf32(allow_tf32=
LOGICAL(allow_tf32, c_bool))
2265 cpabort(
"CP2K was compiled without Torch library.")
2266 mark_used(allow_tf32)
2278#if defined(__LIBTORCH)
2279 CHARACTER(len=*),
PARAMETER :: routinen =
'torch_model_freeze'
2283 SUBROUTINE torch_c_model_freeze(model)
BIND(C, name="torch_c_model_freeze")
2285 TYPE(c_ptr),
VALUE :: model
2286 END SUBROUTINE torch_c_model_freeze
2289 CALL timeset(routinen, handle)
2290 cpassert(c_associated(model%c_ptr))
2291 CALL torch_c_model_freeze(model=model%c_ptr)
2292 CALL timestop(handle)
2294 cpabort(
"CP2K was compiled without Torch library.")
2306 CHARACTER(len=*),
INTENT(IN) :: method_name
2308#if defined(__LIBTORCH)
2309 CHARACTER(len=*),
PARAMETER :: routinen = &
2310 'torch_model_freeze_preserving_method'
2314 SUBROUTINE torch_c_model_freeze_preserving_method(model, method_name) &
2315 BIND(C, name="torch_c_model_freeze_preserving_method")
2316 IMPORT :: c_char, c_ptr
2317 TYPE(c_ptr),
VALUE :: model
2318 CHARACTER(kind=C_CHAR),
DIMENSION(*) :: method_name
2319 END SUBROUTINE torch_c_model_freeze_preserving_method
2322 CALL timeset(routinen, handle)
2323 cpassert(c_associated(model%c_ptr))
2324 CALL torch_c_model_freeze_preserving_method( &
2325 model=model%c_ptr, method_name=trim(method_name)//c_null_char)
2326 CALL timestop(handle)
2328 cpabort(
"CP2K was compiled without Torch library.")
2329 mark_used(method_name)
2339 SUBROUTINE torch_model_get_attr_int64 (model, key, dest)
2341 CHARACTER(len=*),
INTENT(IN) :: key
2342 INTEGER(kind=int_8),
INTENT(OUT) :: dest
2344#if defined(__LIBTORCH)
2347 SUBROUTINE torch_c_model_get_attr_int64 (model, key, dest) &
2348 BIND(C, name="torch_c_model_get_attr_int64")
2349 IMPORT :: c_ptr, c_char, c_int64_t, c_double
2350 TYPE(c_ptr),
VALUE :: model
2351 CHARACTER(kind=C_CHAR),
DIMENSION(*) :: key
2352 INTEGER(kind=C_INT64_T) :: dest
2353 END SUBROUTINE torch_c_model_get_attr_int64
2356 CALL torch_c_model_get_attr_int64 (model=model%c_ptr, &
2357 key=trim(key)//c_null_char, &
2363 cpabort(
"CP2K compiled without the Torch library.")
2365 END SUBROUTINE torch_model_get_attr_int64
2370 SUBROUTINE torch_model_get_attr_double (model, key, dest)
2372 CHARACTER(len=*),
INTENT(IN) :: key
2373 REAL(dp),
INTENT(OUT) :: dest
2375#if defined(__LIBTORCH)
2378 SUBROUTINE torch_c_model_get_attr_double (model, key, dest) &
2379 BIND(C, name="torch_c_model_get_attr_double")
2380 IMPORT :: c_ptr, c_char, c_int64_t, c_double
2381 TYPE(c_ptr),
VALUE :: model
2382 CHARACTER(kind=C_CHAR),
DIMENSION(*) :: key
2383 REAL(kind=c_double) :: dest
2384 END SUBROUTINE torch_c_model_get_attr_double
2387 CALL torch_c_model_get_attr_double (model=model%c_ptr, &
2388 key=trim(key)//c_null_char, &
2394 cpabort(
"CP2K compiled without the Torch library.")
2396 END SUBROUTINE torch_model_get_attr_double
2401 SUBROUTINE torch_model_get_attr_string (model, key, dest)
2403 CHARACTER(len=*),
INTENT(IN) :: key
2404 CHARACTER(LEN=default_string_length),
INTENT(OUT) :: dest
2406#if defined(__LIBTORCH)
2409 SUBROUTINE torch_c_model_get_attr_string (model, key, dest) &
2410 BIND(C, name="torch_c_model_get_attr_string")
2411 IMPORT :: c_ptr, c_char, c_int64_t, c_double
2412 TYPE(c_ptr),
VALUE :: model
2413 CHARACTER(kind=C_CHAR),
DIMENSION(*) :: key
2414 CHARACTER(kind=C_CHAR),
DIMENSION(*) :: dest
2415 END SUBROUTINE torch_c_model_get_attr_string
2418 CALL torch_c_model_get_attr_string (model=model%c_ptr, &
2419 key=trim(key)//c_null_char, &
2425 cpabort(
"CP2K compiled without the Torch library.")
2427 END SUBROUTINE torch_model_get_attr_string
2433 SUBROUTINE torch_model_get_attr_int32(model, key, dest)
2435 CHARACTER(len=*),
INTENT(IN) :: key
2436 INTEGER,
INTENT(OUT) :: dest
2438 INTEGER(kind=int_8) :: temp
2439 CALL torch_model_get_attr_int64(model, key, temp)
2440 cpassert(abs(temp) < huge(dest))
2442 END SUBROUTINE torch_model_get_attr_int32
2448 SUBROUTINE torch_model_get_attr_strlist(model, key, dest)
2450 CHARACTER(len=*),
INTENT(IN) :: key
2451 CHARACTER(LEN=default_string_length), &
2452 ALLOCATABLE,
DIMENSION(:) :: dest
2454#if defined(__LIBTORCH)
2456 INTEGER :: num_items, i
2459 SUBROUTINE torch_c_model_get_attr_list_size(model, key, size) &
2460 BIND(C, name="torch_c_model_get_attr_list_size")
2461 IMPORT :: c_ptr, c_char, c_int
2462 TYPE(c_ptr),
VALUE :: model
2463 CHARACTER(kind=C_CHAR),
DIMENSION(*) :: key
2464 INTEGER(kind=C_INT) :: size
2465 END SUBROUTINE torch_c_model_get_attr_list_size
2469 SUBROUTINE torch_c_model_get_attr_strlist(model, key, index, dest) &
2470 BIND(C, name="torch_c_model_get_attr_strlist")
2471 IMPORT :: c_ptr, c_char, c_int
2472 TYPE(c_ptr),
VALUE :: model
2473 CHARACTER(kind=C_CHAR),
DIMENSION(*) :: key
2474 INTEGER(kind=C_INT),
VALUE :: index
2475 CHARACTER(kind=C_CHAR),
DIMENSION(*) :: dest
2476 END SUBROUTINE torch_c_model_get_attr_strlist
2479 CALL torch_c_model_get_attr_list_size(model=model%c_ptr, &
2480 key=trim(key)//c_null_char, &
2482 ALLOCATE (dest(num_items))
2486 CALL torch_c_model_get_attr_strlist(model=model%c_ptr, &
2487 key=trim(key)//c_null_char, &
2493 cpabort(
"CP2K compiled without the Torch library.")
2499 END SUBROUTINE torch_model_get_attr_strlist
Defines the basic variable types.
integer, parameter, public int_8
integer, parameter, public dp
integer, parameter, public default_string_length
integer, parameter, public sp
integer, parameter, public int_4
subroutine, public torch_dict_release(dict)
Releases a Torch dictionary and all its ressources.
subroutine, public torch_tensor_backward(tensor, outer_grad)
Runs autograd on a Torch tensor.
subroutine, public torch_model_promote_float32(model)
Promote float32 model state and explicit floating-point casts to double precision.
subroutine, public torch_use_cuda(use_cuda)
Select whether Torch wrappers should use CUDA when available.
subroutine, public torch_dict_get(dict, key, tensor)
Retrieves a Torch tensor from a Torch dictionary.
subroutine, public torch_model_freeze_preserving_method(model, method_name)
Freeze a Torch model while preserving one exported method.
real(kind=dp) function, public torch_tensor_item_double(tensor)
Returns a scalar double value from a Torch tensor.
subroutine, public torch_tensor_backward_scalar(tensor)
Runs autograd on a scalar Torch tensor.
subroutine, public torch_model_load_with_metadata(model, filename, key1, value1, key2, value2)
Loads a Torch model and reads two metadata entries in the same archive pass.
subroutine, public torch_model_load(model, filename)
Loads a Torch model from given "*.pth" file. (In Torch lingo models are called modules).
subroutine, public torch_tensor_narrow(tensor, dim, start_index, length, result)
Creates a view of a contiguous tensor slice.
subroutine, public torch_model_remap_device_constants(model)
Maps serialized TorchScript device constants to the active Torch device.
subroutine, public torch_tensor_to_device_leaf(tensor, requires_grad)
Moves a tensor to the active Torch device and makes it an autograd leaf.
subroutine, public torch_dict_create(dict)
Creates an empty Torch dictionary.
subroutine, public torch_model_forward_mol_tensor(model, method_name, inputs, output)
Evaluates a TorchScript model method expecting keyword argument "mol".
subroutine, public torch_model_disable_parameter_gradients(model)
Disable gradients for inference-only model parameters.
subroutine, public torch_model_release(model)
Releases a Torch model and all its ressources.
subroutine, public torch_tensor_grad(tensor, grad)
Returns the gradient of a Torch tensor which was computed by autograd.
subroutine, public torch_allow_tf32(allow_tf32)
Set whether to allow the use of TF32. Needed due to changes in defaults from pytorch 1....
subroutine, public torch_tensor_weighted_sum(values, weights, result)
Returns the weighted sum of two Torch tensors.
subroutine, public torch_tensor_grad_batch3(tensor1, tensor2, tensor3, grad1, grad2, grad3)
Copies three autograd gradients to CPU memory.
subroutine, public torch_model_freeze(model)
Freeze the given Torch model: applies generic optimization that speed up model. See https://pytorch....
integer function, public torch_cuda_device_count()
Return the number of CUDA devices visible to Torch.
character(:) function, allocatable, public torch_model_read_metadata(filename, key)
Reads metadata entry from given "*.pth" file. (In Torch lingo they are called extra files).
subroutine, public torch_tensor_expand_dim(tensor, dim, extent, result)
Creates an expanded tensor view along one singleton dimension.
subroutine, public torch_dict_insert(dict, key, tensor)
Inserts a Torch tensor into a Torch dictionary.
logical function, public torch_cuda_is_available()
Returns true iff the Torch CUDA backend is available.
subroutine, public torch_dict_clone(source, target)
Clones a Torch dictionary.
subroutine, public torch_tensor_release(tensor)
Releases a Torch tensor and all its ressources.
subroutine, public torch_model_forward(model, inputs, outputs)
Evaluates the given Torch model.