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
112 SUBROUTINE torch_tensor_from_array_int32_1d(tensor, source, requires_grad)
114 INTEGER(kind=int_4),
DIMENSION(:),
ALLOCATABLE,
INTENT(IN) :: source
115 LOGICAL,
OPTIONAL,
INTENT(IN) :: requires_grad
117#if defined(__LIBTORCH)
118 INTEGER(kind=int_8),
DIMENSION(1) :: sizes_c
119 LOGICAL :: my_req_grad
122 SUBROUTINE torch_c_tensor_from_array_int32 (tensor, req_grad, ndims, sizes, source) &
123 BIND(C, name="torch_c_tensor_from_array_int32")
124 IMPORT :: c_ptr, c_int, c_int32_t, c_int64_t, c_float, c_double, c_bool
125 TYPE(c_ptr) :: tensor
126 LOGICAL(kind=C_BOOL),
VALUE :: req_grad
127 INTEGER(kind=C_INT),
VALUE :: ndims
128 INTEGER(kind=C_INT64_T),
DIMENSION(*) :: sizes
129 INTEGER(kind=C_INT32_T),
DIMENSION(*) :: source
130 END SUBROUTINE torch_c_tensor_from_array_int32
133 my_req_grad = .false.
134 IF (
PRESENT(requires_grad)) my_req_grad = requires_grad
136 sizes_c(1) =
SIZE(source, 1)
138 cpassert(.NOT. c_associated(tensor%c_ptr))
139 CALL torch_c_tensor_from_array_int32 (tensor=tensor%c_ptr, &
140 req_grad=
LOGICAL(my_req_grad, C_BOOL), &
144 cpassert(c_associated(tensor%c_ptr))
146 cpabort(
"CP2K compiled without the Torch library.")
149 mark_used(requires_grad)
151 END SUBROUTINE torch_tensor_from_array_int32_1d
158 SUBROUTINE torch_tensor_data_ptr_int32_1d(tensor, data_ptr)
160 INTEGER(kind=int_4),
DIMENSION(:),
POINTER :: data_ptr
162#if defined(__LIBTORCH)
163 INTEGER(kind=int_8),
DIMENSION(1) :: sizes_f, sizes_c
164 TYPE(c_ptr) :: data_ptr_c
167 SUBROUTINE torch_c_tensor_data_ptr_int32 (tensor, ndims, sizes, data_ptr) &
168 BIND(C, name="torch_c_tensor_data_ptr_int32")
169 IMPORT :: c_char, c_ptr, c_int, c_int32_t, c_int64_t
170 TYPE(c_ptr),
VALUE :: tensor
171 INTEGER(kind=C_INT),
VALUE :: ndims
172 INTEGER(kind=C_INT64_T),
DIMENSION(*) :: sizes
173 TYPE(c_ptr) :: data_ptr
174 END SUBROUTINE torch_c_tensor_data_ptr_int32
178 data_ptr_c = c_null_ptr
179 cpassert(c_associated(tensor%c_ptr))
180 cpassert(.NOT.
ASSOCIATED(data_ptr))
181 CALL torch_c_tensor_data_ptr_int32 (tensor=tensor%c_ptr, &
186 sizes_f(1) = sizes_c(1)
188 IF (all(sizes_f /= 0))
THEN
189 cpassert(c_associated(data_ptr_c))
190 CALL c_f_pointer(data_ptr_c, data_ptr, shape=sizes_f)
193 cpabort(
"CP2K compiled without the Torch library.")
197 END SUBROUTINE torch_tensor_data_ptr_int32_1d
205 SUBROUTINE torch_tensor_from_array_float_1d(tensor, source, requires_grad)
207 REAL(sp),
DIMENSION(:),
ALLOCATABLE,
INTENT(IN) :: source
208 LOGICAL,
OPTIONAL,
INTENT(IN) :: requires_grad
210#if defined(__LIBTORCH)
211 INTEGER(kind=int_8),
DIMENSION(1) :: sizes_c
212 LOGICAL :: my_req_grad
215 SUBROUTINE torch_c_tensor_from_array_float (tensor, req_grad, ndims, sizes, source) &
216 BIND(C, name="torch_c_tensor_from_array_float")
217 IMPORT :: c_ptr, c_int, c_int32_t, c_int64_t, c_float, c_double, c_bool
218 TYPE(c_ptr) :: tensor
219 LOGICAL(kind=C_BOOL),
VALUE :: req_grad
220 INTEGER(kind=C_INT),
VALUE :: ndims
221 INTEGER(kind=C_INT64_T),
DIMENSION(*) :: sizes
222 REAL(kind=c_float),
DIMENSION(*) :: source
223 END SUBROUTINE torch_c_tensor_from_array_float
226 my_req_grad = .false.
227 IF (
PRESENT(requires_grad)) my_req_grad = requires_grad
229 sizes_c(1) =
SIZE(source, 1)
231 cpassert(.NOT. c_associated(tensor%c_ptr))
232 CALL torch_c_tensor_from_array_float (tensor=tensor%c_ptr, &
233 req_grad=
LOGICAL(my_req_grad, C_BOOL), &
237 cpassert(c_associated(tensor%c_ptr))
239 cpabort(
"CP2K compiled without the Torch library.")
242 mark_used(requires_grad)
244 END SUBROUTINE torch_tensor_from_array_float_1d
251 SUBROUTINE torch_tensor_data_ptr_float_1d(tensor, data_ptr)
253 REAL(sp),
DIMENSION(:),
POINTER :: data_ptr
255#if defined(__LIBTORCH)
256 INTEGER(kind=int_8),
DIMENSION(1) :: sizes_f, sizes_c
257 TYPE(c_ptr) :: data_ptr_c
260 SUBROUTINE torch_c_tensor_data_ptr_float (tensor, ndims, sizes, data_ptr) &
261 BIND(C, name="torch_c_tensor_data_ptr_float")
262 IMPORT :: c_char, c_ptr, c_int, c_int32_t, c_int64_t
263 TYPE(c_ptr),
VALUE :: tensor
264 INTEGER(kind=C_INT),
VALUE :: ndims
265 INTEGER(kind=C_INT64_T),
DIMENSION(*) :: sizes
266 TYPE(c_ptr) :: data_ptr
267 END SUBROUTINE torch_c_tensor_data_ptr_float
271 data_ptr_c = c_null_ptr
272 cpassert(c_associated(tensor%c_ptr))
273 cpassert(.NOT.
ASSOCIATED(data_ptr))
274 CALL torch_c_tensor_data_ptr_float (tensor=tensor%c_ptr, &
279 sizes_f(1) = sizes_c(1)
281 IF (all(sizes_f /= 0))
THEN
282 cpassert(c_associated(data_ptr_c))
283 CALL c_f_pointer(data_ptr_c, data_ptr, shape=sizes_f)
286 cpabort(
"CP2K compiled without the Torch library.")
290 END SUBROUTINE torch_tensor_data_ptr_float_1d
298 SUBROUTINE torch_tensor_from_array_int64_1d(tensor, source, requires_grad)
300 INTEGER(kind=int_8),
DIMENSION(:),
ALLOCATABLE,
INTENT(IN) :: source
301 LOGICAL,
OPTIONAL,
INTENT(IN) :: requires_grad
303#if defined(__LIBTORCH)
304 INTEGER(kind=int_8),
DIMENSION(1) :: sizes_c
305 LOGICAL :: my_req_grad
308 SUBROUTINE torch_c_tensor_from_array_int64 (tensor, req_grad, ndims, sizes, source) &
309 BIND(C, name="torch_c_tensor_from_array_int64")
310 IMPORT :: c_ptr, c_int, c_int32_t, c_int64_t, c_float, c_double, c_bool
311 TYPE(c_ptr) :: tensor
312 LOGICAL(kind=C_BOOL),
VALUE :: req_grad
313 INTEGER(kind=C_INT),
VALUE :: ndims
314 INTEGER(kind=C_INT64_T),
DIMENSION(*) :: sizes
315 INTEGER(kind=C_INT64_T),
DIMENSION(*) :: source
316 END SUBROUTINE torch_c_tensor_from_array_int64
319 my_req_grad = .false.
320 IF (
PRESENT(requires_grad)) my_req_grad = requires_grad
322 sizes_c(1) =
SIZE(source, 1)
324 cpassert(.NOT. c_associated(tensor%c_ptr))
325 CALL torch_c_tensor_from_array_int64 (tensor=tensor%c_ptr, &
326 req_grad=
LOGICAL(my_req_grad, C_BOOL), &
330 cpassert(c_associated(tensor%c_ptr))
332 cpabort(
"CP2K compiled without the Torch library.")
335 mark_used(requires_grad)
337 END SUBROUTINE torch_tensor_from_array_int64_1d
344 SUBROUTINE torch_tensor_data_ptr_int64_1d(tensor, data_ptr)
346 INTEGER(kind=int_8),
DIMENSION(:),
POINTER :: data_ptr
348#if defined(__LIBTORCH)
349 INTEGER(kind=int_8),
DIMENSION(1) :: sizes_f, sizes_c
350 TYPE(c_ptr) :: data_ptr_c
353 SUBROUTINE torch_c_tensor_data_ptr_int64 (tensor, ndims, sizes, data_ptr) &
354 BIND(C, name="torch_c_tensor_data_ptr_int64")
355 IMPORT :: c_char, c_ptr, c_int, c_int32_t, c_int64_t
356 TYPE(c_ptr),
VALUE :: tensor
357 INTEGER(kind=C_INT),
VALUE :: ndims
358 INTEGER(kind=C_INT64_T),
DIMENSION(*) :: sizes
359 TYPE(c_ptr) :: data_ptr
360 END SUBROUTINE torch_c_tensor_data_ptr_int64
364 data_ptr_c = c_null_ptr
365 cpassert(c_associated(tensor%c_ptr))
366 cpassert(.NOT.
ASSOCIATED(data_ptr))
367 CALL torch_c_tensor_data_ptr_int64 (tensor=tensor%c_ptr, &
372 sizes_f(1) = sizes_c(1)
374 IF (all(sizes_f /= 0))
THEN
375 cpassert(c_associated(data_ptr_c))
376 CALL c_f_pointer(data_ptr_c, data_ptr, shape=sizes_f)
379 cpabort(
"CP2K compiled without the Torch library.")
383 END SUBROUTINE torch_tensor_data_ptr_int64_1d
391 SUBROUTINE torch_tensor_from_array_double_1d(tensor, source, requires_grad)
393 REAL(dp),
DIMENSION(:),
ALLOCATABLE,
INTENT(IN) :: source
394 LOGICAL,
OPTIONAL,
INTENT(IN) :: requires_grad
396#if defined(__LIBTORCH)
397 INTEGER(kind=int_8),
DIMENSION(1) :: sizes_c
398 LOGICAL :: my_req_grad
401 SUBROUTINE torch_c_tensor_from_array_double (tensor, req_grad, ndims, sizes, source) &
402 BIND(C, name="torch_c_tensor_from_array_double")
403 IMPORT :: c_ptr, c_int, c_int32_t, c_int64_t, c_float, c_double, c_bool
404 TYPE(c_ptr) :: tensor
405 LOGICAL(kind=C_BOOL),
VALUE :: req_grad
406 INTEGER(kind=C_INT),
VALUE :: ndims
407 INTEGER(kind=C_INT64_T),
DIMENSION(*) :: sizes
408 REAL(kind=c_double),
DIMENSION(*) :: source
409 END SUBROUTINE torch_c_tensor_from_array_double
412 my_req_grad = .false.
413 IF (
PRESENT(requires_grad)) my_req_grad = requires_grad
415 sizes_c(1) =
SIZE(source, 1)
417 cpassert(.NOT. c_associated(tensor%c_ptr))
418 CALL torch_c_tensor_from_array_double (tensor=tensor%c_ptr, &
419 req_grad=
LOGICAL(my_req_grad, C_BOOL), &
423 cpassert(c_associated(tensor%c_ptr))
425 cpabort(
"CP2K compiled without the Torch library.")
428 mark_used(requires_grad)
430 END SUBROUTINE torch_tensor_from_array_double_1d
437 SUBROUTINE torch_tensor_data_ptr_double_1d(tensor, data_ptr)
439 REAL(dp),
DIMENSION(:),
POINTER :: data_ptr
441#if defined(__LIBTORCH)
442 INTEGER(kind=int_8),
DIMENSION(1) :: sizes_f, sizes_c
443 TYPE(c_ptr) :: data_ptr_c
446 SUBROUTINE torch_c_tensor_data_ptr_double (tensor, ndims, sizes, data_ptr) &
447 BIND(C, name="torch_c_tensor_data_ptr_double")
448 IMPORT :: c_char, c_ptr, c_int, c_int32_t, c_int64_t
449 TYPE(c_ptr),
VALUE :: tensor
450 INTEGER(kind=C_INT),
VALUE :: ndims
451 INTEGER(kind=C_INT64_T),
DIMENSION(*) :: sizes
452 TYPE(c_ptr) :: data_ptr
453 END SUBROUTINE torch_c_tensor_data_ptr_double
457 data_ptr_c = c_null_ptr
458 cpassert(c_associated(tensor%c_ptr))
459 cpassert(.NOT.
ASSOCIATED(data_ptr))
460 CALL torch_c_tensor_data_ptr_double (tensor=tensor%c_ptr, &
465 sizes_f(1) = sizes_c(1)
467 IF (all(sizes_f /= 0))
THEN
468 cpassert(c_associated(data_ptr_c))
469 CALL c_f_pointer(data_ptr_c, data_ptr, shape=sizes_f)
472 cpabort(
"CP2K compiled without the Torch library.")
476 END SUBROUTINE torch_tensor_data_ptr_double_1d
484 SUBROUTINE torch_tensor_from_array_int32_2d(tensor, source, requires_grad)
486 INTEGER(kind=int_4),
DIMENSION(:, :),
ALLOCATABLE,
INTENT(IN) :: source
487 LOGICAL,
OPTIONAL,
INTENT(IN) :: requires_grad
489#if defined(__LIBTORCH)
490 INTEGER(kind=int_8),
DIMENSION(2) :: sizes_c
491 LOGICAL :: my_req_grad
494 SUBROUTINE torch_c_tensor_from_array_int32 (tensor, req_grad, ndims, sizes, source) &
495 BIND(C, name="torch_c_tensor_from_array_int32")
496 IMPORT :: c_ptr, c_int, c_int32_t, c_int64_t, c_float, c_double, c_bool
497 TYPE(c_ptr) :: tensor
498 LOGICAL(kind=C_BOOL),
VALUE :: req_grad
499 INTEGER(kind=C_INT),
VALUE :: ndims
500 INTEGER(kind=C_INT64_T),
DIMENSION(*) :: sizes
501 INTEGER(kind=C_INT32_T),
DIMENSION(*) :: source
502 END SUBROUTINE torch_c_tensor_from_array_int32
505 my_req_grad = .false.
506 IF (
PRESENT(requires_grad)) my_req_grad = requires_grad
508 sizes_c(1) =
SIZE(source, 2)
509 sizes_c(2) =
SIZE(source, 1)
511 cpassert(.NOT. c_associated(tensor%c_ptr))
512 CALL torch_c_tensor_from_array_int32 (tensor=tensor%c_ptr, &
513 req_grad=
LOGICAL(my_req_grad, C_BOOL), &
517 cpassert(c_associated(tensor%c_ptr))
519 cpabort(
"CP2K compiled without the Torch library.")
522 mark_used(requires_grad)
524 END SUBROUTINE torch_tensor_from_array_int32_2d
531 SUBROUTINE torch_tensor_data_ptr_int32_2d(tensor, data_ptr)
533 INTEGER(kind=int_4),
DIMENSION(:, :),
POINTER :: data_ptr
535#if defined(__LIBTORCH)
536 INTEGER(kind=int_8),
DIMENSION(2) :: sizes_f, sizes_c
537 TYPE(c_ptr) :: data_ptr_c
540 SUBROUTINE torch_c_tensor_data_ptr_int32 (tensor, ndims, sizes, data_ptr) &
541 BIND(C, name="torch_c_tensor_data_ptr_int32")
542 IMPORT :: c_char, c_ptr, c_int, c_int32_t, c_int64_t
543 TYPE(c_ptr),
VALUE :: tensor
544 INTEGER(kind=C_INT),
VALUE :: ndims
545 INTEGER(kind=C_INT64_T),
DIMENSION(*) :: sizes
546 TYPE(c_ptr) :: data_ptr
547 END SUBROUTINE torch_c_tensor_data_ptr_int32
551 data_ptr_c = c_null_ptr
552 cpassert(c_associated(tensor%c_ptr))
553 cpassert(.NOT.
ASSOCIATED(data_ptr))
554 CALL torch_c_tensor_data_ptr_int32 (tensor=tensor%c_ptr, &
559 sizes_f(1) = sizes_c(2)
560 sizes_f(2) = sizes_c(1)
562 IF (all(sizes_f /= 0))
THEN
563 cpassert(c_associated(data_ptr_c))
564 CALL c_f_pointer(data_ptr_c, data_ptr, shape=sizes_f)
567 cpabort(
"CP2K compiled without the Torch library.")
571 END SUBROUTINE torch_tensor_data_ptr_int32_2d
579 SUBROUTINE torch_tensor_from_array_float_2d(tensor, source, requires_grad)
581 REAL(sp),
DIMENSION(:, :),
ALLOCATABLE,
INTENT(IN) :: source
582 LOGICAL,
OPTIONAL,
INTENT(IN) :: requires_grad
584#if defined(__LIBTORCH)
585 INTEGER(kind=int_8),
DIMENSION(2) :: sizes_c
586 LOGICAL :: my_req_grad
589 SUBROUTINE torch_c_tensor_from_array_float (tensor, req_grad, ndims, sizes, source) &
590 BIND(C, name="torch_c_tensor_from_array_float")
591 IMPORT :: c_ptr, c_int, c_int32_t, c_int64_t, c_float, c_double, c_bool
592 TYPE(c_ptr) :: tensor
593 LOGICAL(kind=C_BOOL),
VALUE :: req_grad
594 INTEGER(kind=C_INT),
VALUE :: ndims
595 INTEGER(kind=C_INT64_T),
DIMENSION(*) :: sizes
596 REAL(kind=c_float),
DIMENSION(*) :: source
597 END SUBROUTINE torch_c_tensor_from_array_float
600 my_req_grad = .false.
601 IF (
PRESENT(requires_grad)) my_req_grad = requires_grad
603 sizes_c(1) =
SIZE(source, 2)
604 sizes_c(2) =
SIZE(source, 1)
606 cpassert(.NOT. c_associated(tensor%c_ptr))
607 CALL torch_c_tensor_from_array_float (tensor=tensor%c_ptr, &
608 req_grad=
LOGICAL(my_req_grad, C_BOOL), &
612 cpassert(c_associated(tensor%c_ptr))
614 cpabort(
"CP2K compiled without the Torch library.")
617 mark_used(requires_grad)
619 END SUBROUTINE torch_tensor_from_array_float_2d
626 SUBROUTINE torch_tensor_data_ptr_float_2d(tensor, data_ptr)
628 REAL(sp),
DIMENSION(:, :),
POINTER :: data_ptr
630#if defined(__LIBTORCH)
631 INTEGER(kind=int_8),
DIMENSION(2) :: sizes_f, sizes_c
632 TYPE(c_ptr) :: data_ptr_c
635 SUBROUTINE torch_c_tensor_data_ptr_float (tensor, ndims, sizes, data_ptr) &
636 BIND(C, name="torch_c_tensor_data_ptr_float")
637 IMPORT :: c_char, c_ptr, c_int, c_int32_t, c_int64_t
638 TYPE(c_ptr),
VALUE :: tensor
639 INTEGER(kind=C_INT),
VALUE :: ndims
640 INTEGER(kind=C_INT64_T),
DIMENSION(*) :: sizes
641 TYPE(c_ptr) :: data_ptr
642 END SUBROUTINE torch_c_tensor_data_ptr_float
646 data_ptr_c = c_null_ptr
647 cpassert(c_associated(tensor%c_ptr))
648 cpassert(.NOT.
ASSOCIATED(data_ptr))
649 CALL torch_c_tensor_data_ptr_float (tensor=tensor%c_ptr, &
654 sizes_f(1) = sizes_c(2)
655 sizes_f(2) = sizes_c(1)
657 IF (all(sizes_f /= 0))
THEN
658 cpassert(c_associated(data_ptr_c))
659 CALL c_f_pointer(data_ptr_c, data_ptr, shape=sizes_f)
662 cpabort(
"CP2K compiled without the Torch library.")
666 END SUBROUTINE torch_tensor_data_ptr_float_2d
674 SUBROUTINE torch_tensor_from_array_int64_2d(tensor, source, requires_grad)
676 INTEGER(kind=int_8),
DIMENSION(:, :),
ALLOCATABLE,
INTENT(IN) :: source
677 LOGICAL,
OPTIONAL,
INTENT(IN) :: requires_grad
679#if defined(__LIBTORCH)
680 INTEGER(kind=int_8),
DIMENSION(2) :: sizes_c
681 LOGICAL :: my_req_grad
684 SUBROUTINE torch_c_tensor_from_array_int64 (tensor, req_grad, ndims, sizes, source) &
685 BIND(C, name="torch_c_tensor_from_array_int64")
686 IMPORT :: c_ptr, c_int, c_int32_t, c_int64_t, c_float, c_double, c_bool
687 TYPE(c_ptr) :: tensor
688 LOGICAL(kind=C_BOOL),
VALUE :: req_grad
689 INTEGER(kind=C_INT),
VALUE :: ndims
690 INTEGER(kind=C_INT64_T),
DIMENSION(*) :: sizes
691 INTEGER(kind=C_INT64_T),
DIMENSION(*) :: source
692 END SUBROUTINE torch_c_tensor_from_array_int64
695 my_req_grad = .false.
696 IF (
PRESENT(requires_grad)) my_req_grad = requires_grad
698 sizes_c(1) =
SIZE(source, 2)
699 sizes_c(2) =
SIZE(source, 1)
701 cpassert(.NOT. c_associated(tensor%c_ptr))
702 CALL torch_c_tensor_from_array_int64 (tensor=tensor%c_ptr, &
703 req_grad=
LOGICAL(my_req_grad, C_BOOL), &
707 cpassert(c_associated(tensor%c_ptr))
709 cpabort(
"CP2K compiled without the Torch library.")
712 mark_used(requires_grad)
714 END SUBROUTINE torch_tensor_from_array_int64_2d
721 SUBROUTINE torch_tensor_data_ptr_int64_2d(tensor, data_ptr)
723 INTEGER(kind=int_8),
DIMENSION(:, :),
POINTER :: data_ptr
725#if defined(__LIBTORCH)
726 INTEGER(kind=int_8),
DIMENSION(2) :: sizes_f, sizes_c
727 TYPE(c_ptr) :: data_ptr_c
730 SUBROUTINE torch_c_tensor_data_ptr_int64 (tensor, ndims, sizes, data_ptr) &
731 BIND(C, name="torch_c_tensor_data_ptr_int64")
732 IMPORT :: c_char, c_ptr, c_int, c_int32_t, c_int64_t
733 TYPE(c_ptr),
VALUE :: tensor
734 INTEGER(kind=C_INT),
VALUE :: ndims
735 INTEGER(kind=C_INT64_T),
DIMENSION(*) :: sizes
736 TYPE(c_ptr) :: data_ptr
737 END SUBROUTINE torch_c_tensor_data_ptr_int64
741 data_ptr_c = c_null_ptr
742 cpassert(c_associated(tensor%c_ptr))
743 cpassert(.NOT.
ASSOCIATED(data_ptr))
744 CALL torch_c_tensor_data_ptr_int64 (tensor=tensor%c_ptr, &
749 sizes_f(1) = sizes_c(2)
750 sizes_f(2) = sizes_c(1)
752 IF (all(sizes_f /= 0))
THEN
753 cpassert(c_associated(data_ptr_c))
754 CALL c_f_pointer(data_ptr_c, data_ptr, shape=sizes_f)
757 cpabort(
"CP2K compiled without the Torch library.")
761 END SUBROUTINE torch_tensor_data_ptr_int64_2d
769 SUBROUTINE torch_tensor_from_array_double_2d(tensor, source, requires_grad)
771 REAL(dp),
DIMENSION(:, :),
ALLOCATABLE,
INTENT(IN) :: source
772 LOGICAL,
OPTIONAL,
INTENT(IN) :: requires_grad
774#if defined(__LIBTORCH)
775 INTEGER(kind=int_8),
DIMENSION(2) :: sizes_c
776 LOGICAL :: my_req_grad
779 SUBROUTINE torch_c_tensor_from_array_double (tensor, req_grad, ndims, sizes, source) &
780 BIND(C, name="torch_c_tensor_from_array_double")
781 IMPORT :: c_ptr, c_int, c_int32_t, c_int64_t, c_float, c_double, c_bool
782 TYPE(c_ptr) :: tensor
783 LOGICAL(kind=C_BOOL),
VALUE :: req_grad
784 INTEGER(kind=C_INT),
VALUE :: ndims
785 INTEGER(kind=C_INT64_T),
DIMENSION(*) :: sizes
786 REAL(kind=c_double),
DIMENSION(*) :: source
787 END SUBROUTINE torch_c_tensor_from_array_double
790 my_req_grad = .false.
791 IF (
PRESENT(requires_grad)) my_req_grad = requires_grad
793 sizes_c(1) =
SIZE(source, 2)
794 sizes_c(2) =
SIZE(source, 1)
796 cpassert(.NOT. c_associated(tensor%c_ptr))
797 CALL torch_c_tensor_from_array_double (tensor=tensor%c_ptr, &
798 req_grad=
LOGICAL(my_req_grad, C_BOOL), &
802 cpassert(c_associated(tensor%c_ptr))
804 cpabort(
"CP2K compiled without the Torch library.")
807 mark_used(requires_grad)
809 END SUBROUTINE torch_tensor_from_array_double_2d
816 SUBROUTINE torch_tensor_data_ptr_double_2d(tensor, data_ptr)
818 REAL(dp),
DIMENSION(:, :),
POINTER :: data_ptr
820#if defined(__LIBTORCH)
821 INTEGER(kind=int_8),
DIMENSION(2) :: sizes_f, sizes_c
822 TYPE(c_ptr) :: data_ptr_c
825 SUBROUTINE torch_c_tensor_data_ptr_double (tensor, ndims, sizes, data_ptr) &
826 BIND(C, name="torch_c_tensor_data_ptr_double")
827 IMPORT :: c_char, c_ptr, c_int, c_int32_t, c_int64_t
828 TYPE(c_ptr),
VALUE :: tensor
829 INTEGER(kind=C_INT),
VALUE :: ndims
830 INTEGER(kind=C_INT64_T),
DIMENSION(*) :: sizes
831 TYPE(c_ptr) :: data_ptr
832 END SUBROUTINE torch_c_tensor_data_ptr_double
836 data_ptr_c = c_null_ptr
837 cpassert(c_associated(tensor%c_ptr))
838 cpassert(.NOT.
ASSOCIATED(data_ptr))
839 CALL torch_c_tensor_data_ptr_double (tensor=tensor%c_ptr, &
844 sizes_f(1) = sizes_c(2)
845 sizes_f(2) = sizes_c(1)
847 IF (all(sizes_f /= 0))
THEN
848 cpassert(c_associated(data_ptr_c))
849 CALL c_f_pointer(data_ptr_c, data_ptr, shape=sizes_f)
852 cpabort(
"CP2K compiled without the Torch library.")
856 END SUBROUTINE torch_tensor_data_ptr_double_2d
864 SUBROUTINE torch_tensor_from_array_int32_3d(tensor, source, requires_grad)
866 INTEGER(kind=int_4),
DIMENSION(:, :, :),
ALLOCATABLE,
INTENT(IN) :: source
867 LOGICAL,
OPTIONAL,
INTENT(IN) :: requires_grad
869#if defined(__LIBTORCH)
870 INTEGER(kind=int_8),
DIMENSION(3) :: sizes_c
871 LOGICAL :: my_req_grad
874 SUBROUTINE torch_c_tensor_from_array_int32 (tensor, req_grad, ndims, sizes, source) &
875 BIND(C, name="torch_c_tensor_from_array_int32")
876 IMPORT :: c_ptr, c_int, c_int32_t, c_int64_t, c_float, c_double, c_bool
877 TYPE(c_ptr) :: tensor
878 LOGICAL(kind=C_BOOL),
VALUE :: req_grad
879 INTEGER(kind=C_INT),
VALUE :: ndims
880 INTEGER(kind=C_INT64_T),
DIMENSION(*) :: sizes
881 INTEGER(kind=C_INT32_T),
DIMENSION(*) :: source
882 END SUBROUTINE torch_c_tensor_from_array_int32
885 my_req_grad = .false.
886 IF (
PRESENT(requires_grad)) my_req_grad = requires_grad
888 sizes_c(1) =
SIZE(source, 3)
889 sizes_c(2) =
SIZE(source, 2)
890 sizes_c(3) =
SIZE(source, 1)
892 cpassert(.NOT. c_associated(tensor%c_ptr))
893 CALL torch_c_tensor_from_array_int32 (tensor=tensor%c_ptr, &
894 req_grad=
LOGICAL(my_req_grad, C_BOOL), &
898 cpassert(c_associated(tensor%c_ptr))
900 cpabort(
"CP2K compiled without the Torch library.")
903 mark_used(requires_grad)
905 END SUBROUTINE torch_tensor_from_array_int32_3d
912 SUBROUTINE torch_tensor_data_ptr_int32_3d(tensor, data_ptr)
914 INTEGER(kind=int_4),
DIMENSION(:, :, :),
POINTER :: data_ptr
916#if defined(__LIBTORCH)
917 INTEGER(kind=int_8),
DIMENSION(3) :: sizes_f, sizes_c
918 TYPE(c_ptr) :: data_ptr_c
921 SUBROUTINE torch_c_tensor_data_ptr_int32 (tensor, ndims, sizes, data_ptr) &
922 BIND(C, name="torch_c_tensor_data_ptr_int32")
923 IMPORT :: c_char, c_ptr, c_int, c_int32_t, c_int64_t
924 TYPE(c_ptr),
VALUE :: tensor
925 INTEGER(kind=C_INT),
VALUE :: ndims
926 INTEGER(kind=C_INT64_T),
DIMENSION(*) :: sizes
927 TYPE(c_ptr) :: data_ptr
928 END SUBROUTINE torch_c_tensor_data_ptr_int32
932 data_ptr_c = c_null_ptr
933 cpassert(c_associated(tensor%c_ptr))
934 cpassert(.NOT.
ASSOCIATED(data_ptr))
935 CALL torch_c_tensor_data_ptr_int32 (tensor=tensor%c_ptr, &
940 sizes_f(1) = sizes_c(3)
941 sizes_f(2) = sizes_c(2)
942 sizes_f(3) = sizes_c(1)
944 IF (all(sizes_f /= 0))
THEN
945 cpassert(c_associated(data_ptr_c))
946 CALL c_f_pointer(data_ptr_c, data_ptr, shape=sizes_f)
949 cpabort(
"CP2K compiled without the Torch library.")
953 END SUBROUTINE torch_tensor_data_ptr_int32_3d
961 SUBROUTINE torch_tensor_from_array_float_3d(tensor, source, requires_grad)
963 REAL(sp),
DIMENSION(:, :, :),
ALLOCATABLE,
INTENT(IN) :: source
964 LOGICAL,
OPTIONAL,
INTENT(IN) :: requires_grad
966#if defined(__LIBTORCH)
967 INTEGER(kind=int_8),
DIMENSION(3) :: sizes_c
968 LOGICAL :: my_req_grad
971 SUBROUTINE torch_c_tensor_from_array_float (tensor, req_grad, ndims, sizes, source) &
972 BIND(C, name="torch_c_tensor_from_array_float")
973 IMPORT :: c_ptr, c_int, c_int32_t, c_int64_t, c_float, c_double, c_bool
974 TYPE(c_ptr) :: tensor
975 LOGICAL(kind=C_BOOL),
VALUE :: req_grad
976 INTEGER(kind=C_INT),
VALUE :: ndims
977 INTEGER(kind=C_INT64_T),
DIMENSION(*) :: sizes
978 REAL(kind=c_float),
DIMENSION(*) :: source
979 END SUBROUTINE torch_c_tensor_from_array_float
982 my_req_grad = .false.
983 IF (
PRESENT(requires_grad)) my_req_grad = requires_grad
985 sizes_c(1) =
SIZE(source, 3)
986 sizes_c(2) =
SIZE(source, 2)
987 sizes_c(3) =
SIZE(source, 1)
989 cpassert(.NOT. c_associated(tensor%c_ptr))
990 CALL torch_c_tensor_from_array_float (tensor=tensor%c_ptr, &
991 req_grad=
LOGICAL(my_req_grad, C_BOOL), &
995 cpassert(c_associated(tensor%c_ptr))
997 cpabort(
"CP2K compiled without the Torch library.")
1000 mark_used(requires_grad)
1002 END SUBROUTINE torch_tensor_from_array_float_3d
1009 SUBROUTINE torch_tensor_data_ptr_float_3d(tensor, data_ptr)
1011 REAL(sp),
DIMENSION(:, :, :),
POINTER :: data_ptr
1013#if defined(__LIBTORCH)
1014 INTEGER(kind=int_8),
DIMENSION(3) :: sizes_f, sizes_c
1015 TYPE(c_ptr) :: data_ptr_c
1018 SUBROUTINE torch_c_tensor_data_ptr_float (tensor, ndims, sizes, data_ptr) &
1019 BIND(C, name="torch_c_tensor_data_ptr_float")
1020 IMPORT :: c_char, c_ptr, c_int, c_int32_t, c_int64_t
1021 TYPE(c_ptr),
VALUE :: tensor
1022 INTEGER(kind=C_INT),
VALUE :: ndims
1023 INTEGER(kind=C_INT64_T),
DIMENSION(*) :: sizes
1024 TYPE(c_ptr) :: data_ptr
1025 END SUBROUTINE torch_c_tensor_data_ptr_float
1029 data_ptr_c = c_null_ptr
1030 cpassert(c_associated(tensor%c_ptr))
1031 cpassert(.NOT.
ASSOCIATED(data_ptr))
1032 CALL torch_c_tensor_data_ptr_float (tensor=tensor%c_ptr, &
1035 data_ptr=data_ptr_c)
1037 sizes_f(1) = sizes_c(3)
1038 sizes_f(2) = sizes_c(2)
1039 sizes_f(3) = sizes_c(1)
1041 IF (all(sizes_f /= 0))
THEN
1042 cpassert(c_associated(data_ptr_c))
1043 CALL c_f_pointer(data_ptr_c, data_ptr, shape=sizes_f)
1046 cpabort(
"CP2K compiled without the Torch library.")
1050 END SUBROUTINE torch_tensor_data_ptr_float_3d
1058 SUBROUTINE torch_tensor_from_array_int64_3d(tensor, source, requires_grad)
1060 INTEGER(kind=int_8),
DIMENSION(:, :, :),
ALLOCATABLE,
INTENT(IN) :: source
1061 LOGICAL,
OPTIONAL,
INTENT(IN) :: requires_grad
1063#if defined(__LIBTORCH)
1064 INTEGER(kind=int_8),
DIMENSION(3) :: sizes_c
1065 LOGICAL :: my_req_grad
1068 SUBROUTINE torch_c_tensor_from_array_int64 (tensor, req_grad, ndims, sizes, source) &
1069 BIND(C, name="torch_c_tensor_from_array_int64")
1070 IMPORT :: c_ptr, c_int, c_int32_t, c_int64_t, c_float, c_double, c_bool
1071 TYPE(c_ptr) :: tensor
1072 LOGICAL(kind=C_BOOL),
VALUE :: req_grad
1073 INTEGER(kind=C_INT),
VALUE :: ndims
1074 INTEGER(kind=C_INT64_T),
DIMENSION(*) :: sizes
1075 INTEGER(kind=C_INT64_T),
DIMENSION(*) :: source
1076 END SUBROUTINE torch_c_tensor_from_array_int64
1079 my_req_grad = .false.
1080 IF (
PRESENT(requires_grad)) my_req_grad = requires_grad
1082 sizes_c(1) =
SIZE(source, 3)
1083 sizes_c(2) =
SIZE(source, 2)
1084 sizes_c(3) =
SIZE(source, 1)
1086 cpassert(.NOT. c_associated(tensor%c_ptr))
1087 CALL torch_c_tensor_from_array_int64 (tensor=tensor%c_ptr, &
1088 req_grad=
LOGICAL(my_req_grad, C_BOOL), &
1092 cpassert(c_associated(tensor%c_ptr))
1094 cpabort(
"CP2K compiled without the Torch library.")
1097 mark_used(requires_grad)
1099 END SUBROUTINE torch_tensor_from_array_int64_3d
1106 SUBROUTINE torch_tensor_data_ptr_int64_3d(tensor, data_ptr)
1108 INTEGER(kind=int_8),
DIMENSION(:, :, :),
POINTER :: data_ptr
1110#if defined(__LIBTORCH)
1111 INTEGER(kind=int_8),
DIMENSION(3) :: sizes_f, sizes_c
1112 TYPE(c_ptr) :: data_ptr_c
1115 SUBROUTINE torch_c_tensor_data_ptr_int64 (tensor, ndims, sizes, data_ptr) &
1116 BIND(C, name="torch_c_tensor_data_ptr_int64")
1117 IMPORT :: c_char, c_ptr, c_int, c_int32_t, c_int64_t
1118 TYPE(c_ptr),
VALUE :: tensor
1119 INTEGER(kind=C_INT),
VALUE :: ndims
1120 INTEGER(kind=C_INT64_T),
DIMENSION(*) :: sizes
1121 TYPE(c_ptr) :: data_ptr
1122 END SUBROUTINE torch_c_tensor_data_ptr_int64
1126 data_ptr_c = c_null_ptr
1127 cpassert(c_associated(tensor%c_ptr))
1128 cpassert(.NOT.
ASSOCIATED(data_ptr))
1129 CALL torch_c_tensor_data_ptr_int64 (tensor=tensor%c_ptr, &
1132 data_ptr=data_ptr_c)
1134 sizes_f(1) = sizes_c(3)
1135 sizes_f(2) = sizes_c(2)
1136 sizes_f(3) = sizes_c(1)
1138 IF (all(sizes_f /= 0))
THEN
1139 cpassert(c_associated(data_ptr_c))
1140 CALL c_f_pointer(data_ptr_c, data_ptr, shape=sizes_f)
1143 cpabort(
"CP2K compiled without the Torch library.")
1147 END SUBROUTINE torch_tensor_data_ptr_int64_3d
1155 SUBROUTINE torch_tensor_from_array_double_3d(tensor, source, requires_grad)
1157 REAL(dp),
DIMENSION(:, :, :),
ALLOCATABLE,
INTENT(IN) :: source
1158 LOGICAL,
OPTIONAL,
INTENT(IN) :: requires_grad
1160#if defined(__LIBTORCH)
1161 INTEGER(kind=int_8),
DIMENSION(3) :: sizes_c
1162 LOGICAL :: my_req_grad
1165 SUBROUTINE torch_c_tensor_from_array_double (tensor, req_grad, ndims, sizes, source) &
1166 BIND(C, name="torch_c_tensor_from_array_double")
1167 IMPORT :: c_ptr, c_int, c_int32_t, c_int64_t, c_float, c_double, c_bool
1168 TYPE(c_ptr) :: tensor
1169 LOGICAL(kind=C_BOOL),
VALUE :: req_grad
1170 INTEGER(kind=C_INT),
VALUE :: ndims
1171 INTEGER(kind=C_INT64_T),
DIMENSION(*) :: sizes
1172 REAL(kind=c_double),
DIMENSION(*) :: source
1173 END SUBROUTINE torch_c_tensor_from_array_double
1176 my_req_grad = .false.
1177 IF (
PRESENT(requires_grad)) my_req_grad = requires_grad
1179 sizes_c(1) =
SIZE(source, 3)
1180 sizes_c(2) =
SIZE(source, 2)
1181 sizes_c(3) =
SIZE(source, 1)
1183 cpassert(.NOT. c_associated(tensor%c_ptr))
1184 CALL torch_c_tensor_from_array_double (tensor=tensor%c_ptr, &
1185 req_grad=
LOGICAL(my_req_grad, C_BOOL), &
1189 cpassert(c_associated(tensor%c_ptr))
1191 cpabort(
"CP2K compiled without the Torch library.")
1194 mark_used(requires_grad)
1196 END SUBROUTINE torch_tensor_from_array_double_3d
1203 SUBROUTINE torch_tensor_data_ptr_double_3d(tensor, data_ptr)
1205 REAL(dp),
DIMENSION(:, :, :),
POINTER :: data_ptr
1207#if defined(__LIBTORCH)
1208 INTEGER(kind=int_8),
DIMENSION(3) :: sizes_f, sizes_c
1209 TYPE(c_ptr) :: data_ptr_c
1212 SUBROUTINE torch_c_tensor_data_ptr_double (tensor, ndims, sizes, data_ptr) &
1213 BIND(C, name="torch_c_tensor_data_ptr_double")
1214 IMPORT :: c_char, c_ptr, c_int, c_int32_t, c_int64_t
1215 TYPE(c_ptr),
VALUE :: tensor
1216 INTEGER(kind=C_INT),
VALUE :: ndims
1217 INTEGER(kind=C_INT64_T),
DIMENSION(*) :: sizes
1218 TYPE(c_ptr) :: data_ptr
1219 END SUBROUTINE torch_c_tensor_data_ptr_double
1223 data_ptr_c = c_null_ptr
1224 cpassert(c_associated(tensor%c_ptr))
1225 cpassert(.NOT.
ASSOCIATED(data_ptr))
1226 CALL torch_c_tensor_data_ptr_double (tensor=tensor%c_ptr, &
1229 data_ptr=data_ptr_c)
1231 sizes_f(1) = sizes_c(3)
1232 sizes_f(2) = sizes_c(2)
1233 sizes_f(3) = sizes_c(1)
1235 IF (all(sizes_f /= 0))
THEN
1236 cpassert(c_associated(data_ptr_c))
1237 CALL c_f_pointer(data_ptr_c, data_ptr, shape=sizes_f)
1240 cpabort(
"CP2K compiled without the Torch library.")
1244 END SUBROUTINE torch_tensor_data_ptr_double_3d
1252 SUBROUTINE torch_tensor_reset_from_array_double_1d(tensor, source, requires_grad)
1254 REAL(dp),
DIMENSION(:),
ALLOCATABLE,
INTENT(IN) :: source
1255 LOGICAL,
OPTIONAL,
INTENT(IN) :: requires_grad
1257#if defined(__LIBTORCH)
1258 INTEGER(kind=int_8),
DIMENSION(1) :: sizes_c
1259 LOGICAL :: my_req_grad
1262 SUBROUTINE torch_c_tensor_reset_from_array_double(tensor, req_grad, ndims, sizes, source) &
1263 BIND(C, name="torch_c_tensor_reset_from_array_double")
1264 IMPORT :: c_ptr, c_int, c_int64_t, c_double, c_bool
1265 TYPE(c_ptr) :: tensor
1266 LOGICAL(kind=C_BOOL),
VALUE :: req_grad
1267 INTEGER(kind=C_INT),
VALUE :: ndims
1268 INTEGER(kind=C_INT64_T),
DIMENSION(*) :: sizes
1269 REAL(kind=c_double),
DIMENSION(*) :: source
1270 END SUBROUTINE torch_c_tensor_reset_from_array_double
1273 my_req_grad = .false.
1274 IF (
PRESENT(requires_grad)) my_req_grad = requires_grad
1276 sizes_c(1) =
SIZE(source, 1)
1278 CALL torch_c_tensor_reset_from_array_double(tensor=tensor%c_ptr, &
1279 req_grad=
LOGICAL(my_req_grad, C_BOOL), &
1283 cpassert(c_associated(tensor%c_ptr))
1285 cpabort(
"CP2K compiled without the Torch library.")
1288 mark_used(requires_grad)
1290 END SUBROUTINE torch_tensor_reset_from_array_double_1d
1297 SUBROUTINE torch_tensor_reset_from_array_double_2d(tensor, source, requires_grad)
1299 REAL(dp),
DIMENSION(:, :),
ALLOCATABLE,
INTENT(IN) :: source
1300 LOGICAL,
OPTIONAL,
INTENT(IN) :: requires_grad
1302#if defined(__LIBTORCH)
1303 INTEGER(kind=int_8),
DIMENSION(2) :: sizes_c
1304 LOGICAL :: my_req_grad
1307 SUBROUTINE torch_c_tensor_reset_from_array_double(tensor, req_grad, ndims, sizes, source) &
1308 BIND(C, name="torch_c_tensor_reset_from_array_double")
1309 IMPORT :: c_ptr, c_int, c_int64_t, c_double, c_bool
1310 TYPE(c_ptr) :: tensor
1311 LOGICAL(kind=C_BOOL),
VALUE :: req_grad
1312 INTEGER(kind=C_INT),
VALUE :: ndims
1313 INTEGER(kind=C_INT64_T),
DIMENSION(*) :: sizes
1314 REAL(kind=c_double),
DIMENSION(*) :: source
1315 END SUBROUTINE torch_c_tensor_reset_from_array_double
1318 my_req_grad = .false.
1319 IF (
PRESENT(requires_grad)) my_req_grad = requires_grad
1321 sizes_c(1) =
SIZE(source, 2)
1322 sizes_c(2) =
SIZE(source, 1)
1324 CALL torch_c_tensor_reset_from_array_double(tensor=tensor%c_ptr, &
1325 req_grad=
LOGICAL(my_req_grad, C_BOOL), &
1329 cpassert(c_associated(tensor%c_ptr))
1331 cpabort(
"CP2K compiled without the Torch library.")
1334 mark_used(requires_grad)
1336 END SUBROUTINE torch_tensor_reset_from_array_double_2d
1343 SUBROUTINE torch_tensor_reset_from_array_double_3d(tensor, source, requires_grad)
1345 REAL(dp),
DIMENSION(:, :, :),
ALLOCATABLE,
INTENT(IN) :: source
1346 LOGICAL,
OPTIONAL,
INTENT(IN) :: requires_grad
1348#if defined(__LIBTORCH)
1349 INTEGER(kind=int_8),
DIMENSION(3) :: sizes_c
1350 LOGICAL :: my_req_grad
1353 SUBROUTINE torch_c_tensor_reset_from_array_double(tensor, req_grad, ndims, sizes, source) &
1354 BIND(C, name="torch_c_tensor_reset_from_array_double")
1355 IMPORT :: c_ptr, c_int, c_int64_t, c_double, c_bool
1356 TYPE(c_ptr) :: tensor
1357 LOGICAL(kind=C_BOOL),
VALUE :: req_grad
1358 INTEGER(kind=C_INT),
VALUE :: ndims
1359 INTEGER(kind=C_INT64_T),
DIMENSION(*) :: sizes
1360 REAL(kind=c_double),
DIMENSION(*) :: source
1361 END SUBROUTINE torch_c_tensor_reset_from_array_double
1364 my_req_grad = .false.
1365 IF (
PRESENT(requires_grad)) my_req_grad = requires_grad
1367 sizes_c(1) =
SIZE(source, 3)
1368 sizes_c(2) =
SIZE(source, 2)
1369 sizes_c(3) =
SIZE(source, 1)
1371 CALL torch_c_tensor_reset_from_array_double(tensor=tensor%c_ptr, &
1372 req_grad=
LOGICAL(my_req_grad, C_BOOL), &
1376 cpassert(c_associated(tensor%c_ptr))
1378 cpabort(
"CP2K compiled without the Torch library.")
1381 mark_used(requires_grad)
1383 END SUBROUTINE torch_tensor_reset_from_array_double_3d
1391 INTEGER,
INTENT(IN) :: dim, extent
1394#if defined(__LIBTORCH)
1396 SUBROUTINE torch_c_tensor_expand_dim(tensor, dim, extent, result) &
1397 BIND(C, name="torch_c_tensor_expand_dim")
1398 IMPORT :: c_int64_t, c_ptr
1399 TYPE(c_ptr),
VALUE ::
tensor
1400 INTEGER(kind=C_INT64_T),
VALUE :: dim, extent
1401 TYPE(c_ptr) :: result
1402 END SUBROUTINE torch_c_tensor_expand_dim
1405 cpassert(c_associated(
tensor%c_ptr))
1406 cpassert(.NOT. c_associated(result%c_ptr))
1408 cpassert(extent >= 0)
1410 dim=int(dim, c_int64_t), &
1411 extent=int(extent, c_int64_t), &
1412 result=result%c_ptr)
1413 cpassert(c_associated(result%c_ptr))
1415 cpabort(
"CP2K compiled without the Torch library.")
1428 INTEGER,
INTENT(IN) :: dim, start_index, length
1431#if defined(__LIBTORCH)
1433 SUBROUTINE torch_c_tensor_narrow(tensor, dim, start_index, length, result) &
1434 BIND(C, name="torch_c_tensor_narrow")
1435 IMPORT :: c_int64_t, c_ptr
1436 TYPE(c_ptr),
VALUE ::
tensor
1437 INTEGER(kind=C_INT64_T),
VALUE :: dim, start_index, length
1438 TYPE(c_ptr) :: result
1439 END SUBROUTINE torch_c_tensor_narrow
1442 cpassert(c_associated(
tensor%c_ptr))
1443 cpassert(.NOT. c_associated(result%c_ptr))
1445 cpassert(start_index >= 0)
1446 cpassert(length >= 0)
1448 dim=int(dim, c_int64_t), &
1449 start_index=int(start_index, c_int64_t), &
1450 length=int(length, c_int64_t), &
1451 result=result%c_ptr)
1452 cpassert(c_associated(result%c_ptr))
1454 cpabort(
"CP2K compiled without the Torch library.")
1457 mark_used(start_index)
1471#if defined(__LIBTORCH)
1472 CHARACTER(len=*),
PARAMETER :: routinen =
'torch_tensor_backward'
1476 SUBROUTINE torch_c_tensor_backward(tensor, outer_grad) &
1477 BIND(C, name="torch_c_tensor_backward")
1478 IMPORT :: c_char, c_ptr
1479 TYPE(c_ptr),
VALUE ::
tensor
1480 TYPE(c_ptr),
VALUE :: outer_grad
1481 END SUBROUTINE torch_c_tensor_backward
1484 CALL timeset(routinen, handle)
1485 cpassert(c_associated(
tensor%c_ptr))
1486 cpassert(c_associated(outer_grad%c_ptr))
1487 CALL torch_c_tensor_backward(
tensor=
tensor%c_ptr, outer_grad=outer_grad%c_ptr)
1488 CALL timestop(handle)
1490 cpabort(
"CP2K compiled without the Torch library.")
1492 mark_used(outer_grad)
1502#if defined(__LIBTORCH)
1504 SUBROUTINE torch_c_tensor_backward_scalar(tensor) &
1505 BIND(C, name="torch_c_tensor_backward_scalar")
1507 TYPE(c_ptr),
VALUE ::
tensor
1508 END SUBROUTINE torch_c_tensor_backward_scalar
1511 cpassert(c_associated(
tensor%c_ptr))
1512 CALL torch_c_tensor_backward_scalar(
tensor=
tensor%c_ptr)
1514 cpabort(
"CP2K compiled without the Torch library.")
1524 LOGICAL,
INTENT(IN) :: requires_grad
1526#if defined(__LIBTORCH)
1528 SUBROUTINE torch_c_tensor_to_device_leaf(tensor, req_grad) &
1529 BIND(C, name="torch_c_tensor_to_device_leaf")
1530 IMPORT :: c_bool, c_ptr
1532 LOGICAL(kind=C_BOOL),
VALUE :: req_grad
1533 END SUBROUTINE torch_c_tensor_to_device_leaf
1536 cpassert(c_associated(
tensor%c_ptr))
1537 CALL torch_c_tensor_to_device_leaf(
tensor=
tensor%c_ptr, &
1538 req_grad=
LOGICAL(requires_grad, c_bool))
1539 cpassert(c_associated(
tensor%c_ptr))
1541 cpabort(
"CP2K compiled without the Torch library.")
1543 mark_used(requires_grad)
1551 LOGICAL,
INTENT(IN) :: use_cuda
1553#if defined(__LIBTORCH)
1555 SUBROUTINE torch_c_use_cuda(use_cuda)
BIND(C, name="torch_c_use_cuda")
1557 LOGICAL(kind=C_BOOL),
VALUE :: use_cuda
1558 END SUBROUTINE torch_c_use_cuda
1561 CALL torch_c_use_cuda(use_cuda=
LOGICAL(use_cuda, c_bool))
1575#if defined(__LIBTORCH)
1577 SUBROUTINE torch_c_tensor_grad(tensor, grad) &
1578 BIND(C, name="torch_c_tensor_grad")
1580 TYPE(c_ptr),
VALUE ::
tensor
1582 END SUBROUTINE torch_c_tensor_grad
1585 cpassert(c_associated(
tensor%c_ptr))
1586 cpassert(.NOT. c_associated(grad%c_ptr))
1587 CALL torch_c_tensor_grad(
tensor=
tensor%c_ptr, grad=grad%c_ptr)
1588 cpassert(c_associated(grad%c_ptr))
1590 cpabort(
"CP2K compiled without the Torch library.")
1603#if defined(__LIBTORCH)
1605 SUBROUTINE torch_c_tensor_weighted_sum(values, weights, result) &
1606 BIND(C, name="torch_c_tensor_weighted_sum")
1608 TYPE(c_ptr),
VALUE :: values
1609 TYPE(c_ptr),
VALUE :: weights
1610 TYPE(c_ptr) :: result
1611 END SUBROUTINE torch_c_tensor_weighted_sum
1614 cpassert(c_associated(values%c_ptr))
1615 cpassert(c_associated(weights%c_ptr))
1616 cpassert(.NOT. c_associated(result%c_ptr))
1617 CALL torch_c_tensor_weighted_sum(values=values%c_ptr, weights=weights%c_ptr, result=result%c_ptr)
1618 cpassert(c_associated(result%c_ptr))
1620 cpabort(
"CP2K compiled without the Torch library.")
1632 REAL(kind=
dp) ::
value
1634#if defined(__LIBTORCH)
1636 FUNCTION torch_c_tensor_item_double(tensor)
RESULT(value) &
1637 BIND(C, name="torch_c_tensor_item_double")
1638 IMPORT :: c_double, c_ptr
1639 TYPE(c_ptr),
VALUE ::
tensor
1640 REAL(kind=c_double) ::
value
1641 END FUNCTION torch_c_tensor_item_double
1644 cpassert(c_associated(
tensor%c_ptr))
1645 value = torch_c_tensor_item_double(
tensor=
tensor%c_ptr)
1648 cpabort(
"CP2K compiled without the Torch library.")
1660#if defined(__LIBTORCH)
1662 SUBROUTINE torch_c_tensor_release(tensor)
BIND(C, name="torch_c_tensor_release")
1664 TYPE(c_ptr),
VALUE ::
tensor
1665 END SUBROUTINE torch_c_tensor_release
1668 cpassert(c_associated(
tensor%c_ptr))
1670 tensor%c_ptr = c_null_ptr
1672 cpabort(
"CP2K was compiled without Torch library.")
1684#if defined(__LIBTORCH)
1686 SUBROUTINE torch_c_dict_create(dict)
BIND(C, name="torch_c_dict_create")
1689 END SUBROUTINE torch_c_dict_create
1692 cpassert(.NOT. c_associated(dict%c_ptr))
1693 CALL torch_c_dict_create(dict=dict%c_ptr)
1694 cpassert(c_associated(dict%c_ptr))
1696 cpabort(
"CP2K was compiled without Torch library.")
1708#if defined(__LIBTORCH)
1710 SUBROUTINE torch_c_dict_clone(source, target)
BIND(C, name="torch_c_dict_clone")
1712 TYPE(c_ptr),
VALUE :: source
1713 TYPE(c_ptr) :: target
1714 END SUBROUTINE torch_c_dict_clone
1717 cpassert(c_associated(source%c_ptr))
1718 cpassert(.NOT. c_associated(
target%c_ptr))
1719 CALL torch_c_dict_clone(source=source%c_ptr,
target=
target%c_ptr)
1720 cpassert(c_associated(
target%c_ptr))
1722 cpabort(
"CP2K was compiled without Torch library.")
1734 CHARACTER(len=*),
INTENT(IN) :: key
1737#if defined(__LIBTORCH)
1740 SUBROUTINE torch_c_dict_insert(dict, key, tensor) &
1741 BIND(C, name="torch_c_dict_insert")
1742 IMPORT :: c_char, c_ptr
1743 TYPE(c_ptr),
VALUE :: dict
1744 CHARACTER(kind=C_CHAR),
DIMENSION(*) :: key
1745 TYPE(c_ptr),
VALUE ::
tensor
1746 END SUBROUTINE torch_c_dict_insert
1749 cpassert(c_associated(dict%c_ptr))
1750 cpassert(c_associated(
tensor%c_ptr))
1751 CALL torch_c_dict_insert(dict=dict%c_ptr, key=trim(key)//c_null_char,
tensor=
tensor%c_ptr)
1753 cpabort(
"CP2K compiled without the Torch library.")
1766 CHARACTER(len=*),
INTENT(IN) :: key
1769#if defined(__LIBTORCH)
1772 SUBROUTINE torch_c_dict_get(dict, key, tensor) &
1773 BIND(C, name="torch_c_dict_get")
1774 IMPORT :: c_char, c_ptr
1775 TYPE(c_ptr),
VALUE :: dict
1776 CHARACTER(kind=C_CHAR),
DIMENSION(*) :: key
1778 END SUBROUTINE torch_c_dict_get
1781 cpassert(c_associated(dict%c_ptr))
1782 cpassert(.NOT. c_associated(
tensor%c_ptr))
1783 CALL torch_c_dict_get(dict=dict%c_ptr, key=trim(key)//c_null_char,
tensor=
tensor%c_ptr)
1784 cpassert(c_associated(
tensor%c_ptr))
1787 cpabort(
"CP2K compiled without the Torch library.")
1801#if defined(__LIBTORCH)
1803 SUBROUTINE torch_c_dict_release(dict)
BIND(C, name="torch_c_dict_release")
1805 TYPE(c_ptr),
VALUE :: dict
1806 END SUBROUTINE torch_c_dict_release
1809 cpassert(c_associated(dict%c_ptr))
1810 CALL torch_c_dict_release(dict=dict%c_ptr)
1811 dict%c_ptr = c_null_ptr
1813 cpabort(
"CP2K was compiled without Torch library.")
1824 CHARACTER(len=*),
INTENT(IN) :: filename
1826#if defined(__LIBTORCH)
1827 CHARACTER(len=*),
PARAMETER :: routinen =
'torch_model_load'
1831 SUBROUTINE torch_c_model_load(model, filename)
BIND(C, name="torch_c_model_load")
1832 IMPORT :: c_ptr, c_char
1833 TYPE(c_ptr) :: model
1834 CHARACTER(kind=C_CHAR),
DIMENSION(*) :: filename
1835 END SUBROUTINE torch_c_model_load
1838 CALL timeset(routinen, handle)
1839 cpassert(.NOT. c_associated(model%c_ptr))
1840 CALL torch_c_model_load(model=model%c_ptr, filename=trim(filename)//c_null_char)
1841 cpassert(c_associated(model%c_ptr))
1842 CALL timestop(handle)
1844 cpabort(
"CP2K was compiled without Torch library.")
1859#if defined(__LIBTORCH)
1860 CHARACTER(len=*),
PARAMETER :: routinen =
'torch_model_forward'
1864 SUBROUTINE torch_c_model_forward(model, inputs, outputs)
BIND(C, name="torch_c_model_forward")
1866 TYPE(c_ptr),
VALUE :: model
1867 TYPE(c_ptr),
VALUE :: inputs
1868 TYPE(c_ptr),
VALUE :: outputs
1869 END SUBROUTINE torch_c_model_forward
1872 CALL timeset(routinen, handle)
1873 cpassert(c_associated(model%c_ptr))
1874 cpassert(c_associated(inputs%c_ptr))
1875 cpassert(c_associated(outputs%c_ptr))
1876 CALL torch_c_model_forward(model=model%c_ptr, inputs=inputs%c_ptr, outputs=outputs%c_ptr)
1877 CALL timestop(handle)
1879 cpabort(
"CP2K was compiled without Torch library.")
1891 CHARACTER(len=*),
INTENT(IN) :: method_name
1895#if defined(__LIBTORCH)
1896 CHARACTER(len=*),
PARAMETER :: routinen =
'torch_model_forward_mol_tensor'
1900 SUBROUTINE torch_c_model_forward_mol_tensor(model, method_name, inputs, output) &
1901 BIND(C, name="torch_c_model_forward_mol_tensor")
1902 IMPORT :: c_char, c_ptr
1903 TYPE(c_ptr),
VALUE :: model
1904 CHARACTER(kind=C_CHAR),
DIMENSION(*) :: method_name
1905 TYPE(c_ptr),
VALUE :: inputs
1906 TYPE(c_ptr) :: output
1907 END SUBROUTINE torch_c_model_forward_mol_tensor
1910 CALL timeset(routinen, handle)
1911 cpassert(c_associated(model%c_ptr))
1912 cpassert(c_associated(inputs%c_ptr))
1913 cpassert(.NOT. c_associated(output%c_ptr))
1914 CALL torch_c_model_forward_mol_tensor(model=model%c_ptr, &
1915 method_name=trim(method_name)//c_null_char, &
1916 inputs=inputs%c_ptr, &
1917 output=output%c_ptr)
1918 cpassert(c_associated(output%c_ptr))
1919 CALL timestop(handle)
1921 cpabort(
"CP2K was compiled without Torch library.")
1923 mark_used(method_name)
1936#if defined(__LIBTORCH)
1938 SUBROUTINE torch_c_model_release(model)
BIND(C, name="torch_c_model_release")
1940 TYPE(c_ptr),
VALUE :: model
1941 END SUBROUTINE torch_c_model_release
1944 cpassert(c_associated(model%c_ptr))
1945 CALL torch_c_model_release(model=model%c_ptr)
1946 model%c_ptr = c_null_ptr
1948 cpabort(
"CP2K was compiled without Torch library.")
1958 CHARACTER(len=*),
INTENT(IN) :: filename, key
1959 CHARACTER(:),
ALLOCATABLE :: res
1961#if defined(__LIBTORCH)
1962 CHARACTER(len=*),
PARAMETER :: routinen =
'torch_model_read_metadata'
1966 TYPE(c_ptr) :: content_c
1969 SUBROUTINE torch_c_model_read_metadata(filename, key, content, length) &
1970 BIND(C, name="torch_c_model_read_metadata")
1971 IMPORT :: c_char, c_ptr, c_int
1972 CHARACTER(kind=C_CHAR),
DIMENSION(*) :: filename, key
1973 TYPE(c_ptr) :: content
1974 INTEGER(kind=C_INT) :: length
1975 END SUBROUTINE torch_c_model_read_metadata
1978 CALL timeset(routinen, handle)
1979 content_c = c_null_ptr
1981 CALL torch_c_model_read_metadata(filename=trim(filename)//c_null_char, &
1982 key=trim(key)//c_null_char, &
1983 content=content_c, &
1985 CALL c_string_to_allocatable(content_c, length, res)
1986 CALL timestop(handle)
1991 cpabort(
"CP2K was compiled without Torch library.")
1998 SUBROUTINE c_string_to_allocatable(content_c, length, res)
1999 TYPE(c_ptr),
INTENT(INOUT) :: content_c
2000 INTEGER,
INTENT(IN) :: length
2001 CHARACTER(:),
ALLOCATABLE,
INTENT(OUT) :: res
2003#if defined(__LIBTORCH)
2004 CHARACTER(LEN=1, KIND=C_CHAR),
DIMENSION(:), &
2005 POINTER :: content_f
2009 SUBROUTINE torch_c_free_string(content)
BIND(C, name="torch_c_free_string")
2011 TYPE(c_ptr),
VALUE :: content
2012 END SUBROUTINE torch_c_free_string
2015 cpassert(c_associated(content_c))
2016 cpassert(length >= 0)
2018 CALL c_f_pointer(content_c, content_f, shape=[length + 1])
2019 cpassert(content_f(length + 1) == c_null_char)
2021 ALLOCATE (
CHARACTER(LEN=length) :: res)
2023 cpassert(content_f(i) /= c_null_char)
2024 res(i:i) = content_f(i)
2028 CALL torch_c_free_string(content_c)
2029 content_c = c_null_ptr
2033 mark_used(content_c)
2035 cpabort(
"CP2K was compiled without Torch library.")
2037 END SUBROUTINE c_string_to_allocatable
2046#if defined(__LIBTORCH)
2048 FUNCTION torch_c_cuda_is_available()
BIND(C, name="torch_c_cuda_is_available")
2050 LOGICAL(C_BOOL) :: torch_c_cuda_is_available
2051 END FUNCTION torch_c_cuda_is_available
2054 res = torch_c_cuda_is_available()
2056 cpabort(
"CP2K was compiled without Torch library.")
2067#if defined(__LIBTORCH)
2069 FUNCTION torch_c_cuda_device_count()
BIND(C, name="torch_c_cuda_device_count")
2071 INTEGER(C_INT) :: torch_c_cuda_device_count
2072 END FUNCTION torch_c_cuda_device_count
2075 count = torch_c_cuda_device_count()
2077 cpabort(
"CP2K was compiled without Torch library.")
2089 LOGICAL,
INTENT(IN) :: allow_tf32
2091#if defined(__LIBTORCH)
2093 SUBROUTINE torch_c_allow_tf32(allow_tf32)
BIND(C, name="torch_c_allow_tf32")
2095 LOGICAL(C_BOOL),
VALUE :: allow_tf32
2096 END SUBROUTINE torch_c_allow_tf32
2099 CALL torch_c_allow_tf32(allow_tf32=
LOGICAL(allow_tf32, c_bool))
2101 cpabort(
"CP2K was compiled without Torch library.")
2102 mark_used(allow_tf32)
2114#if defined(__LIBTORCH)
2115 CHARACTER(len=*),
PARAMETER :: routinen =
'torch_model_freeze'
2119 SUBROUTINE torch_c_model_freeze(model)
BIND(C, name="torch_c_model_freeze")
2121 TYPE(c_ptr),
VALUE :: model
2122 END SUBROUTINE torch_c_model_freeze
2125 CALL timeset(routinen, handle)
2126 cpassert(c_associated(model%c_ptr))
2127 CALL torch_c_model_freeze(model=model%c_ptr)
2128 CALL timestop(handle)
2130 cpabort(
"CP2K was compiled without Torch library.")
2140 SUBROUTINE torch_model_get_attr_int64 (model, key, dest)
2142 CHARACTER(len=*),
INTENT(IN) :: key
2143 INTEGER(kind=int_8),
INTENT(OUT) :: dest
2145#if defined(__LIBTORCH)
2148 SUBROUTINE torch_c_model_get_attr_int64 (model, key, dest) &
2149 BIND(C, name="torch_c_model_get_attr_int64")
2150 IMPORT :: c_ptr, c_char, c_int64_t, c_double
2151 TYPE(c_ptr),
VALUE :: model
2152 CHARACTER(kind=C_CHAR),
DIMENSION(*) :: key
2153 INTEGER(kind=C_INT64_T) :: dest
2154 END SUBROUTINE torch_c_model_get_attr_int64
2157 CALL torch_c_model_get_attr_int64 (model=model%c_ptr, &
2158 key=trim(key)//c_null_char, &
2164 cpabort(
"CP2K compiled without the Torch library.")
2166 END SUBROUTINE torch_model_get_attr_int64
2171 SUBROUTINE torch_model_get_attr_double (model, key, dest)
2173 CHARACTER(len=*),
INTENT(IN) :: key
2174 REAL(dp),
INTENT(OUT) :: dest
2176#if defined(__LIBTORCH)
2179 SUBROUTINE torch_c_model_get_attr_double (model, key, dest) &
2180 BIND(C, name="torch_c_model_get_attr_double")
2181 IMPORT :: c_ptr, c_char, c_int64_t, c_double
2182 TYPE(c_ptr),
VALUE :: model
2183 CHARACTER(kind=C_CHAR),
DIMENSION(*) :: key
2184 REAL(kind=c_double) :: dest
2185 END SUBROUTINE torch_c_model_get_attr_double
2188 CALL torch_c_model_get_attr_double (model=model%c_ptr, &
2189 key=trim(key)//c_null_char, &
2195 cpabort(
"CP2K compiled without the Torch library.")
2197 END SUBROUTINE torch_model_get_attr_double
2202 SUBROUTINE torch_model_get_attr_string (model, key, dest)
2204 CHARACTER(len=*),
INTENT(IN) :: key
2205 CHARACTER(LEN=default_string_length),
INTENT(OUT) :: dest
2207#if defined(__LIBTORCH)
2210 SUBROUTINE torch_c_model_get_attr_string (model, key, dest) &
2211 BIND(C, name="torch_c_model_get_attr_string")
2212 IMPORT :: c_ptr, c_char, c_int64_t, c_double
2213 TYPE(c_ptr),
VALUE :: model
2214 CHARACTER(kind=C_CHAR),
DIMENSION(*) :: key
2215 CHARACTER(kind=C_CHAR),
DIMENSION(*) :: dest
2216 END SUBROUTINE torch_c_model_get_attr_string
2219 CALL torch_c_model_get_attr_string (model=model%c_ptr, &
2220 key=trim(key)//c_null_char, &
2226 cpabort(
"CP2K compiled without the Torch library.")
2228 END SUBROUTINE torch_model_get_attr_string
2234 SUBROUTINE torch_model_get_attr_int32(model, key, dest)
2236 CHARACTER(len=*),
INTENT(IN) :: key
2237 INTEGER,
INTENT(OUT) :: dest
2239 INTEGER(kind=int_8) :: temp
2240 CALL torch_model_get_attr_int64(model, key, temp)
2241 cpassert(abs(temp) < huge(dest))
2243 END SUBROUTINE torch_model_get_attr_int32
2249 SUBROUTINE torch_model_get_attr_strlist(model, key, dest)
2251 CHARACTER(len=*),
INTENT(IN) :: key
2252 CHARACTER(LEN=default_string_length), &
2253 ALLOCATABLE,
DIMENSION(:) :: dest
2255#if defined(__LIBTORCH)
2257 INTEGER :: num_items, i
2260 SUBROUTINE torch_c_model_get_attr_list_size(model, key, size) &
2261 BIND(C, name="torch_c_model_get_attr_list_size")
2262 IMPORT :: c_ptr, c_char, c_int
2263 TYPE(c_ptr),
VALUE :: model
2264 CHARACTER(kind=C_CHAR),
DIMENSION(*) :: key
2265 INTEGER(kind=C_INT) :: size
2266 END SUBROUTINE torch_c_model_get_attr_list_size
2270 SUBROUTINE torch_c_model_get_attr_strlist(model, key, index, dest) &
2271 BIND(C, name="torch_c_model_get_attr_strlist")
2272 IMPORT :: c_ptr, c_char, c_int
2273 TYPE(c_ptr),
VALUE :: model
2274 CHARACTER(kind=C_CHAR),
DIMENSION(*) :: key
2275 INTEGER(kind=C_INT),
VALUE :: index
2276 CHARACTER(kind=C_CHAR),
DIMENSION(*) :: dest
2277 END SUBROUTINE torch_c_model_get_attr_strlist
2280 CALL torch_c_model_get_attr_list_size(model=model%c_ptr, &
2281 key=trim(key)//c_null_char, &
2283 ALLOCATE (dest(num_items))
2287 CALL torch_c_model_get_attr_strlist(model=model%c_ptr, &
2288 key=trim(key)//c_null_char, &
2294 cpabort(
"CP2K compiled without the Torch library.")
2300 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_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.
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(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_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_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_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.