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
115 SUBROUTINE torch_tensor_from_array_int32_1d(tensor, source, requires_grad)
117 INTEGER(kind=int_4),
DIMENSION(:),
ALLOCATABLE,
INTENT(IN) :: source
118 LOGICAL,
OPTIONAL,
INTENT(IN) :: requires_grad
120#if defined(__LIBTORCH)
121 INTEGER(kind=int_8),
DIMENSION(1) :: sizes_c
122 LOGICAL :: my_req_grad
125 SUBROUTINE torch_c_tensor_from_array_int32 (tensor, req_grad, ndims, sizes, source) &
126 BIND(C, name="torch_c_tensor_from_array_int32")
127 IMPORT :: c_ptr, c_int, c_int32_t, c_int64_t, c_float, c_double, c_bool
128 TYPE(c_ptr) :: tensor
129 LOGICAL(kind=C_BOOL),
VALUE :: req_grad
130 INTEGER(kind=C_INT),
VALUE :: ndims
131 INTEGER(kind=C_INT64_T),
DIMENSION(*) :: sizes
132 INTEGER(kind=C_INT32_T),
DIMENSION(*) :: source
133 END SUBROUTINE torch_c_tensor_from_array_int32
136 my_req_grad = .false.
137 IF (
PRESENT(requires_grad)) my_req_grad = requires_grad
139 sizes_c(1) =
SIZE(source, 1)
141 cpassert(.NOT. c_associated(tensor%c_ptr))
142 CALL torch_c_tensor_from_array_int32 (tensor=tensor%c_ptr, &
143 req_grad=
LOGICAL(my_req_grad, C_BOOL), &
147 cpassert(c_associated(tensor%c_ptr))
149 cpabort(
"CP2K compiled without the Torch library.")
152 mark_used(requires_grad)
154 END SUBROUTINE torch_tensor_from_array_int32_1d
161 SUBROUTINE torch_tensor_data_ptr_int32_1d(tensor, data_ptr)
163 INTEGER(kind=int_4),
DIMENSION(:),
POINTER :: data_ptr
165#if defined(__LIBTORCH)
166 INTEGER(kind=int_8),
DIMENSION(1) :: sizes_f, sizes_c
167 TYPE(c_ptr) :: data_ptr_c
170 SUBROUTINE torch_c_tensor_data_ptr_int32 (tensor, ndims, sizes, data_ptr) &
171 BIND(C, name="torch_c_tensor_data_ptr_int32")
172 IMPORT :: c_char, c_ptr, c_int, c_int32_t, c_int64_t
173 TYPE(c_ptr),
VALUE :: tensor
174 INTEGER(kind=C_INT),
VALUE :: ndims
175 INTEGER(kind=C_INT64_T),
DIMENSION(*) :: sizes
176 TYPE(c_ptr) :: data_ptr
177 END SUBROUTINE torch_c_tensor_data_ptr_int32
181 data_ptr_c = c_null_ptr
182 cpassert(c_associated(tensor%c_ptr))
183 cpassert(.NOT.
ASSOCIATED(data_ptr))
184 CALL torch_c_tensor_data_ptr_int32 (tensor=tensor%c_ptr, &
189 sizes_f(1) = sizes_c(1)
191 IF (all(sizes_f /= 0))
THEN
192 cpassert(c_associated(data_ptr_c))
193 CALL c_f_pointer(data_ptr_c, data_ptr, shape=sizes_f)
196 cpabort(
"CP2K compiled without the Torch library.")
200 END SUBROUTINE torch_tensor_data_ptr_int32_1d
208 SUBROUTINE torch_tensor_from_array_float_1d(tensor, source, requires_grad)
210 REAL(sp),
DIMENSION(:),
ALLOCATABLE,
INTENT(IN) :: source
211 LOGICAL,
OPTIONAL,
INTENT(IN) :: requires_grad
213#if defined(__LIBTORCH)
214 INTEGER(kind=int_8),
DIMENSION(1) :: sizes_c
215 LOGICAL :: my_req_grad
218 SUBROUTINE torch_c_tensor_from_array_float (tensor, req_grad, ndims, sizes, source) &
219 BIND(C, name="torch_c_tensor_from_array_float")
220 IMPORT :: c_ptr, c_int, c_int32_t, c_int64_t, c_float, c_double, c_bool
221 TYPE(c_ptr) :: tensor
222 LOGICAL(kind=C_BOOL),
VALUE :: req_grad
223 INTEGER(kind=C_INT),
VALUE :: ndims
224 INTEGER(kind=C_INT64_T),
DIMENSION(*) :: sizes
225 REAL(kind=c_float),
DIMENSION(*) :: source
226 END SUBROUTINE torch_c_tensor_from_array_float
229 my_req_grad = .false.
230 IF (
PRESENT(requires_grad)) my_req_grad = requires_grad
232 sizes_c(1) =
SIZE(source, 1)
234 cpassert(.NOT. c_associated(tensor%c_ptr))
235 CALL torch_c_tensor_from_array_float (tensor=tensor%c_ptr, &
236 req_grad=
LOGICAL(my_req_grad, C_BOOL), &
240 cpassert(c_associated(tensor%c_ptr))
242 cpabort(
"CP2K compiled without the Torch library.")
245 mark_used(requires_grad)
247 END SUBROUTINE torch_tensor_from_array_float_1d
254 SUBROUTINE torch_tensor_data_ptr_float_1d(tensor, data_ptr)
256 REAL(sp),
DIMENSION(:),
POINTER :: data_ptr
258#if defined(__LIBTORCH)
259 INTEGER(kind=int_8),
DIMENSION(1) :: sizes_f, sizes_c
260 TYPE(c_ptr) :: data_ptr_c
263 SUBROUTINE torch_c_tensor_data_ptr_float (tensor, ndims, sizes, data_ptr) &
264 BIND(C, name="torch_c_tensor_data_ptr_float")
265 IMPORT :: c_char, c_ptr, c_int, c_int32_t, c_int64_t
266 TYPE(c_ptr),
VALUE :: tensor
267 INTEGER(kind=C_INT),
VALUE :: ndims
268 INTEGER(kind=C_INT64_T),
DIMENSION(*) :: sizes
269 TYPE(c_ptr) :: data_ptr
270 END SUBROUTINE torch_c_tensor_data_ptr_float
274 data_ptr_c = c_null_ptr
275 cpassert(c_associated(tensor%c_ptr))
276 cpassert(.NOT.
ASSOCIATED(data_ptr))
277 CALL torch_c_tensor_data_ptr_float (tensor=tensor%c_ptr, &
282 sizes_f(1) = sizes_c(1)
284 IF (all(sizes_f /= 0))
THEN
285 cpassert(c_associated(data_ptr_c))
286 CALL c_f_pointer(data_ptr_c, data_ptr, shape=sizes_f)
289 cpabort(
"CP2K compiled without the Torch library.")
293 END SUBROUTINE torch_tensor_data_ptr_float_1d
301 SUBROUTINE torch_tensor_from_array_int64_1d(tensor, source, requires_grad)
303 INTEGER(kind=int_8),
DIMENSION(:),
ALLOCATABLE,
INTENT(IN) :: source
304 LOGICAL,
OPTIONAL,
INTENT(IN) :: requires_grad
306#if defined(__LIBTORCH)
307 INTEGER(kind=int_8),
DIMENSION(1) :: sizes_c
308 LOGICAL :: my_req_grad
311 SUBROUTINE torch_c_tensor_from_array_int64 (tensor, req_grad, ndims, sizes, source) &
312 BIND(C, name="torch_c_tensor_from_array_int64")
313 IMPORT :: c_ptr, c_int, c_int32_t, c_int64_t, c_float, c_double, c_bool
314 TYPE(c_ptr) :: tensor
315 LOGICAL(kind=C_BOOL),
VALUE :: req_grad
316 INTEGER(kind=C_INT),
VALUE :: ndims
317 INTEGER(kind=C_INT64_T),
DIMENSION(*) :: sizes
318 INTEGER(kind=C_INT64_T),
DIMENSION(*) :: source
319 END SUBROUTINE torch_c_tensor_from_array_int64
322 my_req_grad = .false.
323 IF (
PRESENT(requires_grad)) my_req_grad = requires_grad
325 sizes_c(1) =
SIZE(source, 1)
327 cpassert(.NOT. c_associated(tensor%c_ptr))
328 CALL torch_c_tensor_from_array_int64 (tensor=tensor%c_ptr, &
329 req_grad=
LOGICAL(my_req_grad, C_BOOL), &
333 cpassert(c_associated(tensor%c_ptr))
335 cpabort(
"CP2K compiled without the Torch library.")
338 mark_used(requires_grad)
340 END SUBROUTINE torch_tensor_from_array_int64_1d
347 SUBROUTINE torch_tensor_data_ptr_int64_1d(tensor, data_ptr)
349 INTEGER(kind=int_8),
DIMENSION(:),
POINTER :: data_ptr
351#if defined(__LIBTORCH)
352 INTEGER(kind=int_8),
DIMENSION(1) :: sizes_f, sizes_c
353 TYPE(c_ptr) :: data_ptr_c
356 SUBROUTINE torch_c_tensor_data_ptr_int64 (tensor, ndims, sizes, data_ptr) &
357 BIND(C, name="torch_c_tensor_data_ptr_int64")
358 IMPORT :: c_char, c_ptr, c_int, c_int32_t, c_int64_t
359 TYPE(c_ptr),
VALUE :: tensor
360 INTEGER(kind=C_INT),
VALUE :: ndims
361 INTEGER(kind=C_INT64_T),
DIMENSION(*) :: sizes
362 TYPE(c_ptr) :: data_ptr
363 END SUBROUTINE torch_c_tensor_data_ptr_int64
367 data_ptr_c = c_null_ptr
368 cpassert(c_associated(tensor%c_ptr))
369 cpassert(.NOT.
ASSOCIATED(data_ptr))
370 CALL torch_c_tensor_data_ptr_int64 (tensor=tensor%c_ptr, &
375 sizes_f(1) = sizes_c(1)
377 IF (all(sizes_f /= 0))
THEN
378 cpassert(c_associated(data_ptr_c))
379 CALL c_f_pointer(data_ptr_c, data_ptr, shape=sizes_f)
382 cpabort(
"CP2K compiled without the Torch library.")
386 END SUBROUTINE torch_tensor_data_ptr_int64_1d
394 SUBROUTINE torch_tensor_from_array_double_1d(tensor, source, requires_grad)
396 REAL(dp),
DIMENSION(:),
ALLOCATABLE,
INTENT(IN) :: source
397 LOGICAL,
OPTIONAL,
INTENT(IN) :: requires_grad
399#if defined(__LIBTORCH)
400 INTEGER(kind=int_8),
DIMENSION(1) :: sizes_c
401 LOGICAL :: my_req_grad
404 SUBROUTINE torch_c_tensor_from_array_double (tensor, req_grad, ndims, sizes, source) &
405 BIND(C, name="torch_c_tensor_from_array_double")
406 IMPORT :: c_ptr, c_int, c_int32_t, c_int64_t, c_float, c_double, c_bool
407 TYPE(c_ptr) :: tensor
408 LOGICAL(kind=C_BOOL),
VALUE :: req_grad
409 INTEGER(kind=C_INT),
VALUE :: ndims
410 INTEGER(kind=C_INT64_T),
DIMENSION(*) :: sizes
411 REAL(kind=c_double),
DIMENSION(*) :: source
412 END SUBROUTINE torch_c_tensor_from_array_double
415 my_req_grad = .false.
416 IF (
PRESENT(requires_grad)) my_req_grad = requires_grad
418 sizes_c(1) =
SIZE(source, 1)
420 cpassert(.NOT. c_associated(tensor%c_ptr))
421 CALL torch_c_tensor_from_array_double (tensor=tensor%c_ptr, &
422 req_grad=
LOGICAL(my_req_grad, C_BOOL), &
426 cpassert(c_associated(tensor%c_ptr))
428 cpabort(
"CP2K compiled without the Torch library.")
431 mark_used(requires_grad)
433 END SUBROUTINE torch_tensor_from_array_double_1d
440 SUBROUTINE torch_tensor_data_ptr_double_1d(tensor, data_ptr)
442 REAL(dp),
DIMENSION(:),
POINTER :: data_ptr
444#if defined(__LIBTORCH)
445 INTEGER(kind=int_8),
DIMENSION(1) :: sizes_f, sizes_c
446 TYPE(c_ptr) :: data_ptr_c
449 SUBROUTINE torch_c_tensor_data_ptr_double (tensor, ndims, sizes, data_ptr) &
450 BIND(C, name="torch_c_tensor_data_ptr_double")
451 IMPORT :: c_char, c_ptr, c_int, c_int32_t, c_int64_t
452 TYPE(c_ptr),
VALUE :: tensor
453 INTEGER(kind=C_INT),
VALUE :: ndims
454 INTEGER(kind=C_INT64_T),
DIMENSION(*) :: sizes
455 TYPE(c_ptr) :: data_ptr
456 END SUBROUTINE torch_c_tensor_data_ptr_double
460 data_ptr_c = c_null_ptr
461 cpassert(c_associated(tensor%c_ptr))
462 cpassert(.NOT.
ASSOCIATED(data_ptr))
463 CALL torch_c_tensor_data_ptr_double (tensor=tensor%c_ptr, &
468 sizes_f(1) = sizes_c(1)
470 IF (all(sizes_f /= 0))
THEN
471 cpassert(c_associated(data_ptr_c))
472 CALL c_f_pointer(data_ptr_c, data_ptr, shape=sizes_f)
475 cpabort(
"CP2K compiled without the Torch library.")
479 END SUBROUTINE torch_tensor_data_ptr_double_1d
487 SUBROUTINE torch_tensor_from_array_int32_2d(tensor, source, requires_grad)
489 INTEGER(kind=int_4),
DIMENSION(:, :),
ALLOCATABLE,
INTENT(IN) :: source
490 LOGICAL,
OPTIONAL,
INTENT(IN) :: requires_grad
492#if defined(__LIBTORCH)
493 INTEGER(kind=int_8),
DIMENSION(2) :: sizes_c
494 LOGICAL :: my_req_grad
497 SUBROUTINE torch_c_tensor_from_array_int32 (tensor, req_grad, ndims, sizes, source) &
498 BIND(C, name="torch_c_tensor_from_array_int32")
499 IMPORT :: c_ptr, c_int, c_int32_t, c_int64_t, c_float, c_double, c_bool
500 TYPE(c_ptr) :: tensor
501 LOGICAL(kind=C_BOOL),
VALUE :: req_grad
502 INTEGER(kind=C_INT),
VALUE :: ndims
503 INTEGER(kind=C_INT64_T),
DIMENSION(*) :: sizes
504 INTEGER(kind=C_INT32_T),
DIMENSION(*) :: source
505 END SUBROUTINE torch_c_tensor_from_array_int32
508 my_req_grad = .false.
509 IF (
PRESENT(requires_grad)) my_req_grad = requires_grad
511 sizes_c(1) =
SIZE(source, 2)
512 sizes_c(2) =
SIZE(source, 1)
514 cpassert(.NOT. c_associated(tensor%c_ptr))
515 CALL torch_c_tensor_from_array_int32 (tensor=tensor%c_ptr, &
516 req_grad=
LOGICAL(my_req_grad, C_BOOL), &
520 cpassert(c_associated(tensor%c_ptr))
522 cpabort(
"CP2K compiled without the Torch library.")
525 mark_used(requires_grad)
527 END SUBROUTINE torch_tensor_from_array_int32_2d
534 SUBROUTINE torch_tensor_data_ptr_int32_2d(tensor, data_ptr)
536 INTEGER(kind=int_4),
DIMENSION(:, :),
POINTER :: data_ptr
538#if defined(__LIBTORCH)
539 INTEGER(kind=int_8),
DIMENSION(2) :: sizes_f, sizes_c
540 TYPE(c_ptr) :: data_ptr_c
543 SUBROUTINE torch_c_tensor_data_ptr_int32 (tensor, ndims, sizes, data_ptr) &
544 BIND(C, name="torch_c_tensor_data_ptr_int32")
545 IMPORT :: c_char, c_ptr, c_int, c_int32_t, c_int64_t
546 TYPE(c_ptr),
VALUE :: tensor
547 INTEGER(kind=C_INT),
VALUE :: ndims
548 INTEGER(kind=C_INT64_T),
DIMENSION(*) :: sizes
549 TYPE(c_ptr) :: data_ptr
550 END SUBROUTINE torch_c_tensor_data_ptr_int32
554 data_ptr_c = c_null_ptr
555 cpassert(c_associated(tensor%c_ptr))
556 cpassert(.NOT.
ASSOCIATED(data_ptr))
557 CALL torch_c_tensor_data_ptr_int32 (tensor=tensor%c_ptr, &
562 sizes_f(1) = sizes_c(2)
563 sizes_f(2) = sizes_c(1)
565 IF (all(sizes_f /= 0))
THEN
566 cpassert(c_associated(data_ptr_c))
567 CALL c_f_pointer(data_ptr_c, data_ptr, shape=sizes_f)
570 cpabort(
"CP2K compiled without the Torch library.")
574 END SUBROUTINE torch_tensor_data_ptr_int32_2d
582 SUBROUTINE torch_tensor_from_array_float_2d(tensor, source, requires_grad)
584 REAL(sp),
DIMENSION(:, :),
ALLOCATABLE,
INTENT(IN) :: source
585 LOGICAL,
OPTIONAL,
INTENT(IN) :: requires_grad
587#if defined(__LIBTORCH)
588 INTEGER(kind=int_8),
DIMENSION(2) :: sizes_c
589 LOGICAL :: my_req_grad
592 SUBROUTINE torch_c_tensor_from_array_float (tensor, req_grad, ndims, sizes, source) &
593 BIND(C, name="torch_c_tensor_from_array_float")
594 IMPORT :: c_ptr, c_int, c_int32_t, c_int64_t, c_float, c_double, c_bool
595 TYPE(c_ptr) :: tensor
596 LOGICAL(kind=C_BOOL),
VALUE :: req_grad
597 INTEGER(kind=C_INT),
VALUE :: ndims
598 INTEGER(kind=C_INT64_T),
DIMENSION(*) :: sizes
599 REAL(kind=c_float),
DIMENSION(*) :: source
600 END SUBROUTINE torch_c_tensor_from_array_float
603 my_req_grad = .false.
604 IF (
PRESENT(requires_grad)) my_req_grad = requires_grad
606 sizes_c(1) =
SIZE(source, 2)
607 sizes_c(2) =
SIZE(source, 1)
609 cpassert(.NOT. c_associated(tensor%c_ptr))
610 CALL torch_c_tensor_from_array_float (tensor=tensor%c_ptr, &
611 req_grad=
LOGICAL(my_req_grad, C_BOOL), &
615 cpassert(c_associated(tensor%c_ptr))
617 cpabort(
"CP2K compiled without the Torch library.")
620 mark_used(requires_grad)
622 END SUBROUTINE torch_tensor_from_array_float_2d
629 SUBROUTINE torch_tensor_data_ptr_float_2d(tensor, data_ptr)
631 REAL(sp),
DIMENSION(:, :),
POINTER :: data_ptr
633#if defined(__LIBTORCH)
634 INTEGER(kind=int_8),
DIMENSION(2) :: sizes_f, sizes_c
635 TYPE(c_ptr) :: data_ptr_c
638 SUBROUTINE torch_c_tensor_data_ptr_float (tensor, ndims, sizes, data_ptr) &
639 BIND(C, name="torch_c_tensor_data_ptr_float")
640 IMPORT :: c_char, c_ptr, c_int, c_int32_t, c_int64_t
641 TYPE(c_ptr),
VALUE :: tensor
642 INTEGER(kind=C_INT),
VALUE :: ndims
643 INTEGER(kind=C_INT64_T),
DIMENSION(*) :: sizes
644 TYPE(c_ptr) :: data_ptr
645 END SUBROUTINE torch_c_tensor_data_ptr_float
649 data_ptr_c = c_null_ptr
650 cpassert(c_associated(tensor%c_ptr))
651 cpassert(.NOT.
ASSOCIATED(data_ptr))
652 CALL torch_c_tensor_data_ptr_float (tensor=tensor%c_ptr, &
657 sizes_f(1) = sizes_c(2)
658 sizes_f(2) = sizes_c(1)
660 IF (all(sizes_f /= 0))
THEN
661 cpassert(c_associated(data_ptr_c))
662 CALL c_f_pointer(data_ptr_c, data_ptr, shape=sizes_f)
665 cpabort(
"CP2K compiled without the Torch library.")
669 END SUBROUTINE torch_tensor_data_ptr_float_2d
677 SUBROUTINE torch_tensor_from_array_int64_2d(tensor, source, requires_grad)
679 INTEGER(kind=int_8),
DIMENSION(:, :),
ALLOCATABLE,
INTENT(IN) :: source
680 LOGICAL,
OPTIONAL,
INTENT(IN) :: requires_grad
682#if defined(__LIBTORCH)
683 INTEGER(kind=int_8),
DIMENSION(2) :: sizes_c
684 LOGICAL :: my_req_grad
687 SUBROUTINE torch_c_tensor_from_array_int64 (tensor, req_grad, ndims, sizes, source) &
688 BIND(C, name="torch_c_tensor_from_array_int64")
689 IMPORT :: c_ptr, c_int, c_int32_t, c_int64_t, c_float, c_double, c_bool
690 TYPE(c_ptr) :: tensor
691 LOGICAL(kind=C_BOOL),
VALUE :: req_grad
692 INTEGER(kind=C_INT),
VALUE :: ndims
693 INTEGER(kind=C_INT64_T),
DIMENSION(*) :: sizes
694 INTEGER(kind=C_INT64_T),
DIMENSION(*) :: source
695 END SUBROUTINE torch_c_tensor_from_array_int64
698 my_req_grad = .false.
699 IF (
PRESENT(requires_grad)) my_req_grad = requires_grad
701 sizes_c(1) =
SIZE(source, 2)
702 sizes_c(2) =
SIZE(source, 1)
704 cpassert(.NOT. c_associated(tensor%c_ptr))
705 CALL torch_c_tensor_from_array_int64 (tensor=tensor%c_ptr, &
706 req_grad=
LOGICAL(my_req_grad, C_BOOL), &
710 cpassert(c_associated(tensor%c_ptr))
712 cpabort(
"CP2K compiled without the Torch library.")
715 mark_used(requires_grad)
717 END SUBROUTINE torch_tensor_from_array_int64_2d
724 SUBROUTINE torch_tensor_data_ptr_int64_2d(tensor, data_ptr)
726 INTEGER(kind=int_8),
DIMENSION(:, :),
POINTER :: data_ptr
728#if defined(__LIBTORCH)
729 INTEGER(kind=int_8),
DIMENSION(2) :: sizes_f, sizes_c
730 TYPE(c_ptr) :: data_ptr_c
733 SUBROUTINE torch_c_tensor_data_ptr_int64 (tensor, ndims, sizes, data_ptr) &
734 BIND(C, name="torch_c_tensor_data_ptr_int64")
735 IMPORT :: c_char, c_ptr, c_int, c_int32_t, c_int64_t
736 TYPE(c_ptr),
VALUE :: tensor
737 INTEGER(kind=C_INT),
VALUE :: ndims
738 INTEGER(kind=C_INT64_T),
DIMENSION(*) :: sizes
739 TYPE(c_ptr) :: data_ptr
740 END SUBROUTINE torch_c_tensor_data_ptr_int64
744 data_ptr_c = c_null_ptr
745 cpassert(c_associated(tensor%c_ptr))
746 cpassert(.NOT.
ASSOCIATED(data_ptr))
747 CALL torch_c_tensor_data_ptr_int64 (tensor=tensor%c_ptr, &
752 sizes_f(1) = sizes_c(2)
753 sizes_f(2) = sizes_c(1)
755 IF (all(sizes_f /= 0))
THEN
756 cpassert(c_associated(data_ptr_c))
757 CALL c_f_pointer(data_ptr_c, data_ptr, shape=sizes_f)
760 cpabort(
"CP2K compiled without the Torch library.")
764 END SUBROUTINE torch_tensor_data_ptr_int64_2d
772 SUBROUTINE torch_tensor_from_array_double_2d(tensor, source, requires_grad)
774 REAL(dp),
DIMENSION(:, :),
ALLOCATABLE,
INTENT(IN) :: source
775 LOGICAL,
OPTIONAL,
INTENT(IN) :: requires_grad
777#if defined(__LIBTORCH)
778 INTEGER(kind=int_8),
DIMENSION(2) :: sizes_c
779 LOGICAL :: my_req_grad
782 SUBROUTINE torch_c_tensor_from_array_double (tensor, req_grad, ndims, sizes, source) &
783 BIND(C, name="torch_c_tensor_from_array_double")
784 IMPORT :: c_ptr, c_int, c_int32_t, c_int64_t, c_float, c_double, c_bool
785 TYPE(c_ptr) :: tensor
786 LOGICAL(kind=C_BOOL),
VALUE :: req_grad
787 INTEGER(kind=C_INT),
VALUE :: ndims
788 INTEGER(kind=C_INT64_T),
DIMENSION(*) :: sizes
789 REAL(kind=c_double),
DIMENSION(*) :: source
790 END SUBROUTINE torch_c_tensor_from_array_double
793 my_req_grad = .false.
794 IF (
PRESENT(requires_grad)) my_req_grad = requires_grad
796 sizes_c(1) =
SIZE(source, 2)
797 sizes_c(2) =
SIZE(source, 1)
799 cpassert(.NOT. c_associated(tensor%c_ptr))
800 CALL torch_c_tensor_from_array_double (tensor=tensor%c_ptr, &
801 req_grad=
LOGICAL(my_req_grad, C_BOOL), &
805 cpassert(c_associated(tensor%c_ptr))
807 cpabort(
"CP2K compiled without the Torch library.")
810 mark_used(requires_grad)
812 END SUBROUTINE torch_tensor_from_array_double_2d
819 SUBROUTINE torch_tensor_data_ptr_double_2d(tensor, data_ptr)
821 REAL(dp),
DIMENSION(:, :),
POINTER :: data_ptr
823#if defined(__LIBTORCH)
824 INTEGER(kind=int_8),
DIMENSION(2) :: sizes_f, sizes_c
825 TYPE(c_ptr) :: data_ptr_c
828 SUBROUTINE torch_c_tensor_data_ptr_double (tensor, ndims, sizes, data_ptr) &
829 BIND(C, name="torch_c_tensor_data_ptr_double")
830 IMPORT :: c_char, c_ptr, c_int, c_int32_t, c_int64_t
831 TYPE(c_ptr),
VALUE :: tensor
832 INTEGER(kind=C_INT),
VALUE :: ndims
833 INTEGER(kind=C_INT64_T),
DIMENSION(*) :: sizes
834 TYPE(c_ptr) :: data_ptr
835 END SUBROUTINE torch_c_tensor_data_ptr_double
839 data_ptr_c = c_null_ptr
840 cpassert(c_associated(tensor%c_ptr))
841 cpassert(.NOT.
ASSOCIATED(data_ptr))
842 CALL torch_c_tensor_data_ptr_double (tensor=tensor%c_ptr, &
847 sizes_f(1) = sizes_c(2)
848 sizes_f(2) = sizes_c(1)
850 IF (all(sizes_f /= 0))
THEN
851 cpassert(c_associated(data_ptr_c))
852 CALL c_f_pointer(data_ptr_c, data_ptr, shape=sizes_f)
855 cpabort(
"CP2K compiled without the Torch library.")
859 END SUBROUTINE torch_tensor_data_ptr_double_2d
867 SUBROUTINE torch_tensor_from_array_int32_3d(tensor, source, requires_grad)
869 INTEGER(kind=int_4),
DIMENSION(:, :, :),
ALLOCATABLE,
INTENT(IN) :: source
870 LOGICAL,
OPTIONAL,
INTENT(IN) :: requires_grad
872#if defined(__LIBTORCH)
873 INTEGER(kind=int_8),
DIMENSION(3) :: sizes_c
874 LOGICAL :: my_req_grad
877 SUBROUTINE torch_c_tensor_from_array_int32 (tensor, req_grad, ndims, sizes, source) &
878 BIND(C, name="torch_c_tensor_from_array_int32")
879 IMPORT :: c_ptr, c_int, c_int32_t, c_int64_t, c_float, c_double, c_bool
880 TYPE(c_ptr) :: tensor
881 LOGICAL(kind=C_BOOL),
VALUE :: req_grad
882 INTEGER(kind=C_INT),
VALUE :: ndims
883 INTEGER(kind=C_INT64_T),
DIMENSION(*) :: sizes
884 INTEGER(kind=C_INT32_T),
DIMENSION(*) :: source
885 END SUBROUTINE torch_c_tensor_from_array_int32
888 my_req_grad = .false.
889 IF (
PRESENT(requires_grad)) my_req_grad = requires_grad
891 sizes_c(1) =
SIZE(source, 3)
892 sizes_c(2) =
SIZE(source, 2)
893 sizes_c(3) =
SIZE(source, 1)
895 cpassert(.NOT. c_associated(tensor%c_ptr))
896 CALL torch_c_tensor_from_array_int32 (tensor=tensor%c_ptr, &
897 req_grad=
LOGICAL(my_req_grad, C_BOOL), &
901 cpassert(c_associated(tensor%c_ptr))
903 cpabort(
"CP2K compiled without the Torch library.")
906 mark_used(requires_grad)
908 END SUBROUTINE torch_tensor_from_array_int32_3d
915 SUBROUTINE torch_tensor_data_ptr_int32_3d(tensor, data_ptr)
917 INTEGER(kind=int_4),
DIMENSION(:, :, :),
POINTER :: data_ptr
919#if defined(__LIBTORCH)
920 INTEGER(kind=int_8),
DIMENSION(3) :: sizes_f, sizes_c
921 TYPE(c_ptr) :: data_ptr_c
924 SUBROUTINE torch_c_tensor_data_ptr_int32 (tensor, ndims, sizes, data_ptr) &
925 BIND(C, name="torch_c_tensor_data_ptr_int32")
926 IMPORT :: c_char, c_ptr, c_int, c_int32_t, c_int64_t
927 TYPE(c_ptr),
VALUE :: tensor
928 INTEGER(kind=C_INT),
VALUE :: ndims
929 INTEGER(kind=C_INT64_T),
DIMENSION(*) :: sizes
930 TYPE(c_ptr) :: data_ptr
931 END SUBROUTINE torch_c_tensor_data_ptr_int32
935 data_ptr_c = c_null_ptr
936 cpassert(c_associated(tensor%c_ptr))
937 cpassert(.NOT.
ASSOCIATED(data_ptr))
938 CALL torch_c_tensor_data_ptr_int32 (tensor=tensor%c_ptr, &
943 sizes_f(1) = sizes_c(3)
944 sizes_f(2) = sizes_c(2)
945 sizes_f(3) = sizes_c(1)
947 IF (all(sizes_f /= 0))
THEN
948 cpassert(c_associated(data_ptr_c))
949 CALL c_f_pointer(data_ptr_c, data_ptr, shape=sizes_f)
952 cpabort(
"CP2K compiled without the Torch library.")
956 END SUBROUTINE torch_tensor_data_ptr_int32_3d
964 SUBROUTINE torch_tensor_from_array_float_3d(tensor, source, requires_grad)
966 REAL(sp),
DIMENSION(:, :, :),
ALLOCATABLE,
INTENT(IN) :: source
967 LOGICAL,
OPTIONAL,
INTENT(IN) :: requires_grad
969#if defined(__LIBTORCH)
970 INTEGER(kind=int_8),
DIMENSION(3) :: sizes_c
971 LOGICAL :: my_req_grad
974 SUBROUTINE torch_c_tensor_from_array_float (tensor, req_grad, ndims, sizes, source) &
975 BIND(C, name="torch_c_tensor_from_array_float")
976 IMPORT :: c_ptr, c_int, c_int32_t, c_int64_t, c_float, c_double, c_bool
977 TYPE(c_ptr) :: tensor
978 LOGICAL(kind=C_BOOL),
VALUE :: req_grad
979 INTEGER(kind=C_INT),
VALUE :: ndims
980 INTEGER(kind=C_INT64_T),
DIMENSION(*) :: sizes
981 REAL(kind=c_float),
DIMENSION(*) :: source
982 END SUBROUTINE torch_c_tensor_from_array_float
985 my_req_grad = .false.
986 IF (
PRESENT(requires_grad)) my_req_grad = requires_grad
988 sizes_c(1) =
SIZE(source, 3)
989 sizes_c(2) =
SIZE(source, 2)
990 sizes_c(3) =
SIZE(source, 1)
992 cpassert(.NOT. c_associated(tensor%c_ptr))
993 CALL torch_c_tensor_from_array_float (tensor=tensor%c_ptr, &
994 req_grad=
LOGICAL(my_req_grad, C_BOOL), &
998 cpassert(c_associated(tensor%c_ptr))
1000 cpabort(
"CP2K compiled without the Torch library.")
1003 mark_used(requires_grad)
1005 END SUBROUTINE torch_tensor_from_array_float_3d
1012 SUBROUTINE torch_tensor_data_ptr_float_3d(tensor, data_ptr)
1014 REAL(sp),
DIMENSION(:, :, :),
POINTER :: data_ptr
1016#if defined(__LIBTORCH)
1017 INTEGER(kind=int_8),
DIMENSION(3) :: sizes_f, sizes_c
1018 TYPE(c_ptr) :: data_ptr_c
1021 SUBROUTINE torch_c_tensor_data_ptr_float (tensor, ndims, sizes, data_ptr) &
1022 BIND(C, name="torch_c_tensor_data_ptr_float")
1023 IMPORT :: c_char, c_ptr, c_int, c_int32_t, c_int64_t
1024 TYPE(c_ptr),
VALUE :: tensor
1025 INTEGER(kind=C_INT),
VALUE :: ndims
1026 INTEGER(kind=C_INT64_T),
DIMENSION(*) :: sizes
1027 TYPE(c_ptr) :: data_ptr
1028 END SUBROUTINE torch_c_tensor_data_ptr_float
1032 data_ptr_c = c_null_ptr
1033 cpassert(c_associated(tensor%c_ptr))
1034 cpassert(.NOT.
ASSOCIATED(data_ptr))
1035 CALL torch_c_tensor_data_ptr_float (tensor=tensor%c_ptr, &
1038 data_ptr=data_ptr_c)
1040 sizes_f(1) = sizes_c(3)
1041 sizes_f(2) = sizes_c(2)
1042 sizes_f(3) = sizes_c(1)
1044 IF (all(sizes_f /= 0))
THEN
1045 cpassert(c_associated(data_ptr_c))
1046 CALL c_f_pointer(data_ptr_c, data_ptr, shape=sizes_f)
1049 cpabort(
"CP2K compiled without the Torch library.")
1053 END SUBROUTINE torch_tensor_data_ptr_float_3d
1061 SUBROUTINE torch_tensor_from_array_int64_3d(tensor, source, requires_grad)
1063 INTEGER(kind=int_8),
DIMENSION(:, :, :),
ALLOCATABLE,
INTENT(IN) :: source
1064 LOGICAL,
OPTIONAL,
INTENT(IN) :: requires_grad
1066#if defined(__LIBTORCH)
1067 INTEGER(kind=int_8),
DIMENSION(3) :: sizes_c
1068 LOGICAL :: my_req_grad
1071 SUBROUTINE torch_c_tensor_from_array_int64 (tensor, req_grad, ndims, sizes, source) &
1072 BIND(C, name="torch_c_tensor_from_array_int64")
1073 IMPORT :: c_ptr, c_int, c_int32_t, c_int64_t, c_float, c_double, c_bool
1074 TYPE(c_ptr) :: tensor
1075 LOGICAL(kind=C_BOOL),
VALUE :: req_grad
1076 INTEGER(kind=C_INT),
VALUE :: ndims
1077 INTEGER(kind=C_INT64_T),
DIMENSION(*) :: sizes
1078 INTEGER(kind=C_INT64_T),
DIMENSION(*) :: source
1079 END SUBROUTINE torch_c_tensor_from_array_int64
1082 my_req_grad = .false.
1083 IF (
PRESENT(requires_grad)) my_req_grad = requires_grad
1085 sizes_c(1) =
SIZE(source, 3)
1086 sizes_c(2) =
SIZE(source, 2)
1087 sizes_c(3) =
SIZE(source, 1)
1089 cpassert(.NOT. c_associated(tensor%c_ptr))
1090 CALL torch_c_tensor_from_array_int64 (tensor=tensor%c_ptr, &
1091 req_grad=
LOGICAL(my_req_grad, C_BOOL), &
1095 cpassert(c_associated(tensor%c_ptr))
1097 cpabort(
"CP2K compiled without the Torch library.")
1100 mark_used(requires_grad)
1102 END SUBROUTINE torch_tensor_from_array_int64_3d
1109 SUBROUTINE torch_tensor_data_ptr_int64_3d(tensor, data_ptr)
1111 INTEGER(kind=int_8),
DIMENSION(:, :, :),
POINTER :: data_ptr
1113#if defined(__LIBTORCH)
1114 INTEGER(kind=int_8),
DIMENSION(3) :: sizes_f, sizes_c
1115 TYPE(c_ptr) :: data_ptr_c
1118 SUBROUTINE torch_c_tensor_data_ptr_int64 (tensor, ndims, sizes, data_ptr) &
1119 BIND(C, name="torch_c_tensor_data_ptr_int64")
1120 IMPORT :: c_char, c_ptr, c_int, c_int32_t, c_int64_t
1121 TYPE(c_ptr),
VALUE :: tensor
1122 INTEGER(kind=C_INT),
VALUE :: ndims
1123 INTEGER(kind=C_INT64_T),
DIMENSION(*) :: sizes
1124 TYPE(c_ptr) :: data_ptr
1125 END SUBROUTINE torch_c_tensor_data_ptr_int64
1129 data_ptr_c = c_null_ptr
1130 cpassert(c_associated(tensor%c_ptr))
1131 cpassert(.NOT.
ASSOCIATED(data_ptr))
1132 CALL torch_c_tensor_data_ptr_int64 (tensor=tensor%c_ptr, &
1135 data_ptr=data_ptr_c)
1137 sizes_f(1) = sizes_c(3)
1138 sizes_f(2) = sizes_c(2)
1139 sizes_f(3) = sizes_c(1)
1141 IF (all(sizes_f /= 0))
THEN
1142 cpassert(c_associated(data_ptr_c))
1143 CALL c_f_pointer(data_ptr_c, data_ptr, shape=sizes_f)
1146 cpabort(
"CP2K compiled without the Torch library.")
1150 END SUBROUTINE torch_tensor_data_ptr_int64_3d
1158 SUBROUTINE torch_tensor_from_array_double_3d(tensor, source, requires_grad)
1160 REAL(dp),
DIMENSION(:, :, :),
ALLOCATABLE,
INTENT(IN) :: source
1161 LOGICAL,
OPTIONAL,
INTENT(IN) :: requires_grad
1163#if defined(__LIBTORCH)
1164 INTEGER(kind=int_8),
DIMENSION(3) :: sizes_c
1165 LOGICAL :: my_req_grad
1168 SUBROUTINE torch_c_tensor_from_array_double (tensor, req_grad, ndims, sizes, source) &
1169 BIND(C, name="torch_c_tensor_from_array_double")
1170 IMPORT :: c_ptr, c_int, c_int32_t, c_int64_t, c_float, c_double, c_bool
1171 TYPE(c_ptr) :: tensor
1172 LOGICAL(kind=C_BOOL),
VALUE :: req_grad
1173 INTEGER(kind=C_INT),
VALUE :: ndims
1174 INTEGER(kind=C_INT64_T),
DIMENSION(*) :: sizes
1175 REAL(kind=c_double),
DIMENSION(*) :: source
1176 END SUBROUTINE torch_c_tensor_from_array_double
1179 my_req_grad = .false.
1180 IF (
PRESENT(requires_grad)) my_req_grad = requires_grad
1182 sizes_c(1) =
SIZE(source, 3)
1183 sizes_c(2) =
SIZE(source, 2)
1184 sizes_c(3) =
SIZE(source, 1)
1186 cpassert(.NOT. c_associated(tensor%c_ptr))
1187 CALL torch_c_tensor_from_array_double (tensor=tensor%c_ptr, &
1188 req_grad=
LOGICAL(my_req_grad, C_BOOL), &
1192 cpassert(c_associated(tensor%c_ptr))
1194 cpabort(
"CP2K compiled without the Torch library.")
1197 mark_used(requires_grad)
1199 END SUBROUTINE torch_tensor_from_array_double_3d
1206 SUBROUTINE torch_tensor_data_ptr_double_3d(tensor, data_ptr)
1208 REAL(dp),
DIMENSION(:, :, :),
POINTER :: data_ptr
1210#if defined(__LIBTORCH)
1211 INTEGER(kind=int_8),
DIMENSION(3) :: sizes_f, sizes_c
1212 TYPE(c_ptr) :: data_ptr_c
1215 SUBROUTINE torch_c_tensor_data_ptr_double (tensor, ndims, sizes, data_ptr) &
1216 BIND(C, name="torch_c_tensor_data_ptr_double")
1217 IMPORT :: c_char, c_ptr, c_int, c_int32_t, c_int64_t
1218 TYPE(c_ptr),
VALUE :: tensor
1219 INTEGER(kind=C_INT),
VALUE :: ndims
1220 INTEGER(kind=C_INT64_T),
DIMENSION(*) :: sizes
1221 TYPE(c_ptr) :: data_ptr
1222 END SUBROUTINE torch_c_tensor_data_ptr_double
1226 data_ptr_c = c_null_ptr
1227 cpassert(c_associated(tensor%c_ptr))
1228 cpassert(.NOT.
ASSOCIATED(data_ptr))
1229 CALL torch_c_tensor_data_ptr_double (tensor=tensor%c_ptr, &
1232 data_ptr=data_ptr_c)
1234 sizes_f(1) = sizes_c(3)
1235 sizes_f(2) = sizes_c(2)
1236 sizes_f(3) = sizes_c(1)
1238 IF (all(sizes_f /= 0))
THEN
1239 cpassert(c_associated(data_ptr_c))
1240 CALL c_f_pointer(data_ptr_c, data_ptr, shape=sizes_f)
1243 cpabort(
"CP2K compiled without the Torch library.")
1247 END SUBROUTINE torch_tensor_data_ptr_double_3d
1255 SUBROUTINE torch_tensor_reset_from_array_double_1d(tensor, source, requires_grad)
1257 REAL(dp),
DIMENSION(:),
ALLOCATABLE,
INTENT(IN) :: source
1258 LOGICAL,
OPTIONAL,
INTENT(IN) :: requires_grad
1260#if defined(__LIBTORCH)
1261 INTEGER(kind=int_8),
DIMENSION(1) :: sizes_c
1262 LOGICAL :: my_req_grad
1265 SUBROUTINE torch_c_tensor_reset_from_array_double(tensor, req_grad, ndims, sizes, source) &
1266 BIND(C, name="torch_c_tensor_reset_from_array_double")
1267 IMPORT :: c_ptr, c_int, c_int64_t, c_double, c_bool
1268 TYPE(c_ptr) :: tensor
1269 LOGICAL(kind=C_BOOL),
VALUE :: req_grad
1270 INTEGER(kind=C_INT),
VALUE :: ndims
1271 INTEGER(kind=C_INT64_T),
DIMENSION(*) :: sizes
1272 REAL(kind=c_double),
DIMENSION(*) :: source
1273 END SUBROUTINE torch_c_tensor_reset_from_array_double
1276 my_req_grad = .false.
1277 IF (
PRESENT(requires_grad)) my_req_grad = requires_grad
1279 sizes_c(1) =
SIZE(source, 1)
1281 CALL torch_c_tensor_reset_from_array_double(tensor=tensor%c_ptr, &
1282 req_grad=
LOGICAL(my_req_grad, C_BOOL), &
1286 cpassert(c_associated(tensor%c_ptr))
1288 cpabort(
"CP2K compiled without the Torch library.")
1291 mark_used(requires_grad)
1293 END SUBROUTINE torch_tensor_reset_from_array_double_1d
1300 SUBROUTINE torch_tensor_reset_from_array_double_2d(tensor, source, requires_grad)
1302 REAL(dp),
DIMENSION(:, :),
ALLOCATABLE,
INTENT(IN) :: source
1303 LOGICAL,
OPTIONAL,
INTENT(IN) :: requires_grad
1305#if defined(__LIBTORCH)
1306 INTEGER(kind=int_8),
DIMENSION(2) :: sizes_c
1307 LOGICAL :: my_req_grad
1310 SUBROUTINE torch_c_tensor_reset_from_array_double(tensor, req_grad, ndims, sizes, source) &
1311 BIND(C, name="torch_c_tensor_reset_from_array_double")
1312 IMPORT :: c_ptr, c_int, c_int64_t, c_double, c_bool
1313 TYPE(c_ptr) :: tensor
1314 LOGICAL(kind=C_BOOL),
VALUE :: req_grad
1315 INTEGER(kind=C_INT),
VALUE :: ndims
1316 INTEGER(kind=C_INT64_T),
DIMENSION(*) :: sizes
1317 REAL(kind=c_double),
DIMENSION(*) :: source
1318 END SUBROUTINE torch_c_tensor_reset_from_array_double
1321 my_req_grad = .false.
1322 IF (
PRESENT(requires_grad)) my_req_grad = requires_grad
1324 sizes_c(1) =
SIZE(source, 2)
1325 sizes_c(2) =
SIZE(source, 1)
1327 CALL torch_c_tensor_reset_from_array_double(tensor=tensor%c_ptr, &
1328 req_grad=
LOGICAL(my_req_grad, C_BOOL), &
1332 cpassert(c_associated(tensor%c_ptr))
1334 cpabort(
"CP2K compiled without the Torch library.")
1337 mark_used(requires_grad)
1339 END SUBROUTINE torch_tensor_reset_from_array_double_2d
1346 SUBROUTINE torch_tensor_reset_from_array_double_3d(tensor, source, requires_grad)
1348 REAL(dp),
DIMENSION(:, :, :),
ALLOCATABLE,
INTENT(IN) :: source
1349 LOGICAL,
OPTIONAL,
INTENT(IN) :: requires_grad
1351#if defined(__LIBTORCH)
1352 INTEGER(kind=int_8),
DIMENSION(3) :: sizes_c
1353 LOGICAL :: my_req_grad
1356 SUBROUTINE torch_c_tensor_reset_from_array_double(tensor, req_grad, ndims, sizes, source) &
1357 BIND(C, name="torch_c_tensor_reset_from_array_double")
1358 IMPORT :: c_ptr, c_int, c_int64_t, c_double, c_bool
1359 TYPE(c_ptr) :: tensor
1360 LOGICAL(kind=C_BOOL),
VALUE :: req_grad
1361 INTEGER(kind=C_INT),
VALUE :: ndims
1362 INTEGER(kind=C_INT64_T),
DIMENSION(*) :: sizes
1363 REAL(kind=c_double),
DIMENSION(*) :: source
1364 END SUBROUTINE torch_c_tensor_reset_from_array_double
1367 my_req_grad = .false.
1368 IF (
PRESENT(requires_grad)) my_req_grad = requires_grad
1370 sizes_c(1) =
SIZE(source, 3)
1371 sizes_c(2) =
SIZE(source, 2)
1372 sizes_c(3) =
SIZE(source, 1)
1374 CALL torch_c_tensor_reset_from_array_double(tensor=tensor%c_ptr, &
1375 req_grad=
LOGICAL(my_req_grad, C_BOOL), &
1379 cpassert(c_associated(tensor%c_ptr))
1381 cpabort(
"CP2K compiled without the Torch library.")
1384 mark_used(requires_grad)
1386 END SUBROUTINE torch_tensor_reset_from_array_double_3d
1394 INTEGER,
INTENT(IN) :: dim, extent
1397#if defined(__LIBTORCH)
1399 SUBROUTINE torch_c_tensor_expand_dim(tensor, dim, extent, result) &
1400 BIND(C, name="torch_c_tensor_expand_dim")
1401 IMPORT :: c_int64_t, c_ptr
1402 TYPE(c_ptr),
VALUE ::
tensor
1403 INTEGER(kind=C_INT64_T),
VALUE :: dim, extent
1404 TYPE(c_ptr) :: result
1405 END SUBROUTINE torch_c_tensor_expand_dim
1408 cpassert(c_associated(
tensor%c_ptr))
1409 cpassert(.NOT. c_associated(result%c_ptr))
1411 cpassert(extent >= 0)
1413 dim=int(dim, c_int64_t), &
1414 extent=int(extent, c_int64_t), &
1415 result=result%c_ptr)
1416 cpassert(c_associated(result%c_ptr))
1418 cpabort(
"CP2K compiled without the Torch library.")
1431 INTEGER,
INTENT(IN) :: dim, start_index, length
1434#if defined(__LIBTORCH)
1436 SUBROUTINE torch_c_tensor_narrow(tensor, dim, start_index, length, result) &
1437 BIND(C, name="torch_c_tensor_narrow")
1438 IMPORT :: c_int64_t, c_ptr
1439 TYPE(c_ptr),
VALUE ::
tensor
1440 INTEGER(kind=C_INT64_T),
VALUE :: dim, start_index, length
1441 TYPE(c_ptr) :: result
1442 END SUBROUTINE torch_c_tensor_narrow
1445 cpassert(c_associated(
tensor%c_ptr))
1446 cpassert(.NOT. c_associated(result%c_ptr))
1448 cpassert(start_index >= 0)
1449 cpassert(length >= 0)
1451 dim=int(dim, c_int64_t), &
1452 start_index=int(start_index, c_int64_t), &
1453 length=int(length, c_int64_t), &
1454 result=result%c_ptr)
1455 cpassert(c_associated(result%c_ptr))
1457 cpabort(
"CP2K compiled without the Torch library.")
1460 mark_used(start_index)
1474#if defined(__LIBTORCH)
1475 CHARACTER(len=*),
PARAMETER :: routinen =
'torch_tensor_backward'
1479 SUBROUTINE torch_c_tensor_backward(tensor, outer_grad) &
1480 BIND(C, name="torch_c_tensor_backward")
1481 IMPORT :: c_char, c_ptr
1482 TYPE(c_ptr),
VALUE ::
tensor
1483 TYPE(c_ptr),
VALUE :: outer_grad
1484 END SUBROUTINE torch_c_tensor_backward
1487 CALL timeset(routinen, handle)
1488 cpassert(c_associated(
tensor%c_ptr))
1489 cpassert(c_associated(outer_grad%c_ptr))
1490 CALL torch_c_tensor_backward(
tensor=
tensor%c_ptr, outer_grad=outer_grad%c_ptr)
1491 CALL timestop(handle)
1493 cpabort(
"CP2K compiled without the Torch library.")
1495 mark_used(outer_grad)
1505#if defined(__LIBTORCH)
1507 SUBROUTINE torch_c_tensor_backward_scalar(tensor) &
1508 BIND(C, name="torch_c_tensor_backward_scalar")
1510 TYPE(c_ptr),
VALUE ::
tensor
1511 END SUBROUTINE torch_c_tensor_backward_scalar
1514 cpassert(c_associated(
tensor%c_ptr))
1515 CALL torch_c_tensor_backward_scalar(
tensor=
tensor%c_ptr)
1517 cpabort(
"CP2K compiled without the Torch library.")
1527 LOGICAL,
INTENT(IN) :: requires_grad
1529#if defined(__LIBTORCH)
1531 SUBROUTINE torch_c_tensor_to_device_leaf(tensor, req_grad) &
1532 BIND(C, name="torch_c_tensor_to_device_leaf")
1533 IMPORT :: c_bool, c_ptr
1535 LOGICAL(kind=C_BOOL),
VALUE :: req_grad
1536 END SUBROUTINE torch_c_tensor_to_device_leaf
1539 cpassert(c_associated(
tensor%c_ptr))
1540 CALL torch_c_tensor_to_device_leaf(
tensor=
tensor%c_ptr, &
1541 req_grad=
LOGICAL(requires_grad, c_bool))
1542 cpassert(c_associated(
tensor%c_ptr))
1544 cpabort(
"CP2K compiled without the Torch library.")
1546 mark_used(requires_grad)
1554 LOGICAL,
INTENT(IN) :: use_cuda
1556#if defined(__LIBTORCH)
1558 SUBROUTINE torch_c_use_cuda(use_cuda)
BIND(C, name="torch_c_use_cuda")
1560 LOGICAL(kind=C_BOOL),
VALUE :: use_cuda
1561 END SUBROUTINE torch_c_use_cuda
1564 CALL torch_c_use_cuda(use_cuda=
LOGICAL(use_cuda, c_bool))
1578#if defined(__LIBTORCH)
1580 SUBROUTINE torch_c_tensor_grad(tensor, grad) &
1581 BIND(C, name="torch_c_tensor_grad")
1583 TYPE(c_ptr),
VALUE ::
tensor
1585 END SUBROUTINE torch_c_tensor_grad
1588 cpassert(c_associated(
tensor%c_ptr))
1589 cpassert(.NOT. c_associated(grad%c_ptr))
1590 CALL torch_c_tensor_grad(
tensor=
tensor%c_ptr, grad=grad%c_ptr)
1591 cpassert(c_associated(grad%c_ptr))
1593 cpabort(
"CP2K compiled without the Torch library.")
1606#if defined(__LIBTORCH)
1608 SUBROUTINE torch_c_tensor_grad_batch3(tensor1, tensor2, tensor3, grad1, grad2, grad3) &
1609 BIND(C, name="torch_c_tensor_grad_batch3")
1611 TYPE(c_ptr),
VALUE :: tensor1, tensor2, tensor3
1612 TYPE(c_ptr) :: grad1, grad2, grad3
1613 END SUBROUTINE torch_c_tensor_grad_batch3
1616 cpassert(c_associated(tensor1%c_ptr))
1617 cpassert(c_associated(tensor2%c_ptr))
1618 cpassert(c_associated(tensor3%c_ptr))
1619 cpassert(.NOT. c_associated(grad1%c_ptr))
1620 cpassert(.NOT. c_associated(grad2%c_ptr))
1621 cpassert(.NOT. c_associated(grad3%c_ptr))
1622 CALL torch_c_tensor_grad_batch3(tensor1=tensor1%c_ptr, tensor2=tensor2%c_ptr, &
1623 tensor3=tensor3%c_ptr, grad1=grad1%c_ptr, &
1624 grad2=grad2%c_ptr, grad3=grad3%c_ptr)
1625 cpassert(c_associated(grad1%c_ptr))
1626 cpassert(c_associated(grad2%c_ptr))
1627 cpassert(c_associated(grad3%c_ptr))
1629 cpabort(
"CP2K compiled without the Torch library.")
1646#if defined(__LIBTORCH)
1648 SUBROUTINE torch_c_tensor_weighted_sum(values, weights, result) &
1649 BIND(C, name="torch_c_tensor_weighted_sum")
1651 TYPE(c_ptr),
VALUE :: values
1652 TYPE(c_ptr),
VALUE :: weights
1653 TYPE(c_ptr) :: result
1654 END SUBROUTINE torch_c_tensor_weighted_sum
1657 cpassert(c_associated(values%c_ptr))
1658 cpassert(c_associated(weights%c_ptr))
1659 cpassert(.NOT. c_associated(result%c_ptr))
1660 CALL torch_c_tensor_weighted_sum(values=values%c_ptr, weights=weights%c_ptr, result=result%c_ptr)
1661 cpassert(c_associated(result%c_ptr))
1663 cpabort(
"CP2K compiled without the Torch library.")
1675 REAL(kind=
dp) ::
value
1677#if defined(__LIBTORCH)
1679 FUNCTION torch_c_tensor_item_double(tensor)
RESULT(value) &
1680 BIND(C, name="torch_c_tensor_item_double")
1681 IMPORT :: c_double, c_ptr
1682 TYPE(c_ptr),
VALUE ::
tensor
1683 REAL(kind=c_double) ::
value
1684 END FUNCTION torch_c_tensor_item_double
1687 cpassert(c_associated(
tensor%c_ptr))
1688 value = torch_c_tensor_item_double(
tensor=
tensor%c_ptr)
1691 cpabort(
"CP2K compiled without the Torch library.")
1703#if defined(__LIBTORCH)
1705 SUBROUTINE torch_c_tensor_release(tensor)
BIND(C, name="torch_c_tensor_release")
1707 TYPE(c_ptr),
VALUE ::
tensor
1708 END SUBROUTINE torch_c_tensor_release
1711 cpassert(c_associated(
tensor%c_ptr))
1713 tensor%c_ptr = c_null_ptr
1715 cpabort(
"CP2K was compiled without Torch library.")
1727#if defined(__LIBTORCH)
1729 SUBROUTINE torch_c_dict_create(dict)
BIND(C, name="torch_c_dict_create")
1732 END SUBROUTINE torch_c_dict_create
1735 cpassert(.NOT. c_associated(dict%c_ptr))
1736 CALL torch_c_dict_create(dict=dict%c_ptr)
1737 cpassert(c_associated(dict%c_ptr))
1739 cpabort(
"CP2K was compiled without Torch library.")
1751#if defined(__LIBTORCH)
1753 SUBROUTINE torch_c_dict_clone(source, target)
BIND(C, name="torch_c_dict_clone")
1755 TYPE(c_ptr),
VALUE :: source
1756 TYPE(c_ptr) :: target
1757 END SUBROUTINE torch_c_dict_clone
1760 cpassert(c_associated(source%c_ptr))
1761 cpassert(.NOT. c_associated(
target%c_ptr))
1762 CALL torch_c_dict_clone(source=source%c_ptr,
target=
target%c_ptr)
1763 cpassert(c_associated(
target%c_ptr))
1765 cpabort(
"CP2K was compiled without Torch library.")
1777 CHARACTER(len=*),
INTENT(IN) :: key
1780#if defined(__LIBTORCH)
1783 SUBROUTINE torch_c_dict_insert(dict, key, tensor) &
1784 BIND(C, name="torch_c_dict_insert")
1785 IMPORT :: c_char, c_ptr
1786 TYPE(c_ptr),
VALUE :: dict
1787 CHARACTER(kind=C_CHAR),
DIMENSION(*) :: key
1788 TYPE(c_ptr),
VALUE ::
tensor
1789 END SUBROUTINE torch_c_dict_insert
1792 cpassert(c_associated(dict%c_ptr))
1793 cpassert(c_associated(
tensor%c_ptr))
1794 CALL torch_c_dict_insert(dict=dict%c_ptr, key=trim(key)//c_null_char,
tensor=
tensor%c_ptr)
1796 cpabort(
"CP2K compiled without the Torch library.")
1809 CHARACTER(len=*),
INTENT(IN) :: key
1812#if defined(__LIBTORCH)
1815 SUBROUTINE torch_c_dict_get(dict, key, tensor) &
1816 BIND(C, name="torch_c_dict_get")
1817 IMPORT :: c_char, c_ptr
1818 TYPE(c_ptr),
VALUE :: dict
1819 CHARACTER(kind=C_CHAR),
DIMENSION(*) :: key
1821 END SUBROUTINE torch_c_dict_get
1824 cpassert(c_associated(dict%c_ptr))
1825 cpassert(.NOT. c_associated(
tensor%c_ptr))
1826 CALL torch_c_dict_get(dict=dict%c_ptr, key=trim(key)//c_null_char,
tensor=
tensor%c_ptr)
1827 cpassert(c_associated(
tensor%c_ptr))
1830 cpabort(
"CP2K compiled without the Torch library.")
1844#if defined(__LIBTORCH)
1846 SUBROUTINE torch_c_dict_release(dict)
BIND(C, name="torch_c_dict_release")
1848 TYPE(c_ptr),
VALUE :: dict
1849 END SUBROUTINE torch_c_dict_release
1852 cpassert(c_associated(dict%c_ptr))
1853 CALL torch_c_dict_release(dict=dict%c_ptr)
1854 dict%c_ptr = c_null_ptr
1856 cpabort(
"CP2K was compiled without Torch library.")
1867 CHARACTER(len=*),
INTENT(IN) :: filename
1869#if defined(__LIBTORCH)
1870 CHARACTER(len=*),
PARAMETER :: routinen =
'torch_model_load'
1874 SUBROUTINE torch_c_model_load(model, filename)
BIND(C, name="torch_c_model_load")
1875 IMPORT :: c_ptr, c_char
1876 TYPE(c_ptr) :: model
1877 CHARACTER(kind=C_CHAR),
DIMENSION(*) :: filename
1878 END SUBROUTINE torch_c_model_load
1881 CALL timeset(routinen, handle)
1882 cpassert(.NOT. c_associated(model%c_ptr))
1883 CALL torch_c_model_load(model=model%c_ptr, filename=trim(filename)//c_null_char)
1884 cpassert(c_associated(model%c_ptr))
1885 CALL timestop(handle)
1887 cpabort(
"CP2K was compiled without Torch library.")
1898 CHARACTER(len=*),
INTENT(IN) :: filename, key1, key2
1899 CHARACTER(:),
ALLOCATABLE,
INTENT(OUT) :: value1, value2
1901#if defined(__LIBTORCH)
1902 CHARACTER(len=*),
PARAMETER :: routinen =
'torch_model_load_with_metadata'
1903 INTEGER :: handle, length1, length2
1904 TYPE(c_ptr) :: content1_c, content2_c
1907 SUBROUTINE torch_c_model_load_with_metadata(model, filename, key1, key2, &
1908 content1, length1, content2, length2) &
1909 BIND(C, name="torch_c_model_load_with_metadata")
1910 IMPORT :: c_char, c_int, c_ptr
1911 TYPE(c_ptr) :: model
1912 CHARACTER(kind=C_CHAR),
DIMENSION(*) :: filename, key1, key2
1913 TYPE(c_ptr) :: content1, content2
1914 INTEGER(kind=C_INT) :: length1, length2
1915 END SUBROUTINE torch_c_model_load_with_metadata
1918 CALL timeset(routinen, handle)
1919 cpassert(.NOT. c_associated(model%c_ptr))
1920 content1_c = c_null_ptr
1921 content2_c = c_null_ptr
1924 CALL torch_c_model_load_with_metadata(model=model%c_ptr, &
1925 filename=trim(filename)//c_null_char, &
1926 key1=trim(key1)//c_null_char, &
1927 key2=trim(key2)//c_null_char, &
1928 content1=content1_c, length1=length1, &
1929 content2=content2_c, length2=length2)
1930 cpassert(c_associated(model%c_ptr))
1931 CALL c_string_to_allocatable(content1_c, length1, value1)
1932 CALL c_string_to_allocatable(content2_c, length2, value2)
1933 CALL timestop(handle)
1935 cpabort(
"CP2K was compiled without Torch library.")
1951#if defined(__LIBTORCH)
1953 SUBROUTINE torch_c_model_remap_device_constants(model) &
1954 BIND(C, name="torch_c_model_remap_device_constants")
1956 TYPE(c_ptr),
VALUE :: model
1957 END SUBROUTINE torch_c_model_remap_device_constants
1960 cpassert(c_associated(model%c_ptr))
1961 CALL torch_c_model_remap_device_constants(model=model%c_ptr)
1963 cpabort(
"CP2K was compiled without Torch library.")
1974#if defined(__LIBTORCH)
1976 SUBROUTINE torch_c_model_disable_parameter_gradients(model) &
1977 BIND(C, name="torch_c_model_disable_parameter_gradients")
1979 TYPE(c_ptr),
VALUE :: model
1980 END SUBROUTINE torch_c_model_disable_parameter_gradients
1983 cpassert(c_associated(model%c_ptr))
1984 CALL torch_c_model_disable_parameter_gradients(model=model%c_ptr)
1986 cpabort(
"CP2K was compiled without Torch library.")
2000#if defined(__LIBTORCH)
2001 CHARACTER(len=*),
PARAMETER :: routinen =
'torch_model_forward'
2005 SUBROUTINE torch_c_model_forward(model, inputs, outputs)
BIND(C, name="torch_c_model_forward")
2007 TYPE(c_ptr),
VALUE :: model
2008 TYPE(c_ptr),
VALUE :: inputs
2009 TYPE(c_ptr),
VALUE :: outputs
2010 END SUBROUTINE torch_c_model_forward
2013 CALL timeset(routinen, handle)
2014 cpassert(c_associated(model%c_ptr))
2015 cpassert(c_associated(inputs%c_ptr))
2016 cpassert(c_associated(outputs%c_ptr))
2017 CALL torch_c_model_forward(model=model%c_ptr, inputs=inputs%c_ptr, outputs=outputs%c_ptr)
2018 CALL timestop(handle)
2020 cpabort(
"CP2K was compiled without Torch library.")
2032 CHARACTER(len=*),
INTENT(IN) :: method_name
2036#if defined(__LIBTORCH)
2037 CHARACTER(len=*),
PARAMETER :: routinen =
'torch_model_forward_mol_tensor'
2041 SUBROUTINE torch_c_model_forward_mol_tensor(model, method_name, inputs, output) &
2042 BIND(C, name="torch_c_model_forward_mol_tensor")
2043 IMPORT :: c_char, c_ptr
2044 TYPE(c_ptr),
VALUE :: model
2045 CHARACTER(kind=C_CHAR),
DIMENSION(*) :: method_name
2046 TYPE(c_ptr),
VALUE :: inputs
2047 TYPE(c_ptr) :: output
2048 END SUBROUTINE torch_c_model_forward_mol_tensor
2051 CALL timeset(routinen, handle)
2052 cpassert(c_associated(model%c_ptr))
2053 cpassert(c_associated(inputs%c_ptr))
2054 cpassert(.NOT. c_associated(output%c_ptr))
2055 CALL torch_c_model_forward_mol_tensor(model=model%c_ptr, &
2056 method_name=trim(method_name)//c_null_char, &
2057 inputs=inputs%c_ptr, &
2058 output=output%c_ptr)
2059 cpassert(c_associated(output%c_ptr))
2060 CALL timestop(handle)
2062 cpabort(
"CP2K was compiled without Torch library.")
2064 mark_used(method_name)
2077#if defined(__LIBTORCH)
2079 SUBROUTINE torch_c_model_release(model)
BIND(C, name="torch_c_model_release")
2081 TYPE(c_ptr),
VALUE :: model
2082 END SUBROUTINE torch_c_model_release
2085 cpassert(c_associated(model%c_ptr))
2086 CALL torch_c_model_release(model=model%c_ptr)
2087 model%c_ptr = c_null_ptr
2089 cpabort(
"CP2K was compiled without Torch library.")
2099 CHARACTER(len=*),
INTENT(IN) :: filename, key
2100 CHARACTER(:),
ALLOCATABLE :: res
2102#if defined(__LIBTORCH)
2103 CHARACTER(len=*),
PARAMETER :: routinen =
'torch_model_read_metadata'
2107 TYPE(c_ptr) :: content_c
2110 SUBROUTINE torch_c_model_read_metadata(filename, key, content, length) &
2111 BIND(C, name="torch_c_model_read_metadata")
2112 IMPORT :: c_char, c_ptr, c_int
2113 CHARACTER(kind=C_CHAR),
DIMENSION(*) :: filename, key
2114 TYPE(c_ptr) :: content
2115 INTEGER(kind=C_INT) :: length
2116 END SUBROUTINE torch_c_model_read_metadata
2119 CALL timeset(routinen, handle)
2120 content_c = c_null_ptr
2122 CALL torch_c_model_read_metadata(filename=trim(filename)//c_null_char, &
2123 key=trim(key)//c_null_char, &
2124 content=content_c, &
2126 CALL c_string_to_allocatable(content_c, length, res)
2127 CALL timestop(handle)
2132 cpabort(
"CP2K was compiled without Torch library.")
2139 SUBROUTINE c_string_to_allocatable(content_c, length, res)
2140 TYPE(c_ptr),
INTENT(INOUT) :: content_c
2141 INTEGER,
INTENT(IN) :: length
2142 CHARACTER(:),
ALLOCATABLE,
INTENT(OUT) :: res
2144#if defined(__LIBTORCH)
2145 CHARACTER(LEN=1, KIND=C_CHAR),
DIMENSION(:), &
2146 POINTER :: content_f
2150 SUBROUTINE torch_c_free_string(content)
BIND(C, name="torch_c_free_string")
2152 TYPE(c_ptr),
VALUE :: content
2153 END SUBROUTINE torch_c_free_string
2156 cpassert(c_associated(content_c))
2157 cpassert(length >= 0)
2159 CALL c_f_pointer(content_c, content_f, shape=[length + 1])
2160 cpassert(content_f(length + 1) == c_null_char)
2162 ALLOCATE (
CHARACTER(LEN=length) :: res)
2164 cpassert(content_f(i) /= c_null_char)
2165 res(i:i) = content_f(i)
2169 CALL torch_c_free_string(content_c)
2170 content_c = c_null_ptr
2174 mark_used(content_c)
2176 cpabort(
"CP2K was compiled without Torch library.")
2178 END SUBROUTINE c_string_to_allocatable
2187#if defined(__LIBTORCH)
2189 FUNCTION torch_c_cuda_is_available()
BIND(C, name="torch_c_cuda_is_available")
2191 LOGICAL(C_BOOL) :: torch_c_cuda_is_available
2192 END FUNCTION torch_c_cuda_is_available
2195 res = torch_c_cuda_is_available()
2197 cpabort(
"CP2K was compiled without Torch library.")
2208#if defined(__LIBTORCH)
2210 FUNCTION torch_c_cuda_device_count()
BIND(C, name="torch_c_cuda_device_count")
2212 INTEGER(C_INT) :: torch_c_cuda_device_count
2213 END FUNCTION torch_c_cuda_device_count
2216 count = torch_c_cuda_device_count()
2218 cpabort(
"CP2K was compiled without Torch library.")
2230 LOGICAL,
INTENT(IN) :: allow_tf32
2232#if defined(__LIBTORCH)
2234 SUBROUTINE torch_c_allow_tf32(allow_tf32)
BIND(C, name="torch_c_allow_tf32")
2236 LOGICAL(C_BOOL),
VALUE :: allow_tf32
2237 END SUBROUTINE torch_c_allow_tf32
2240 CALL torch_c_allow_tf32(allow_tf32=
LOGICAL(allow_tf32, c_bool))
2242 cpabort(
"CP2K was compiled without Torch library.")
2243 mark_used(allow_tf32)
2255#if defined(__LIBTORCH)
2256 CHARACTER(len=*),
PARAMETER :: routinen =
'torch_model_freeze'
2260 SUBROUTINE torch_c_model_freeze(model)
BIND(C, name="torch_c_model_freeze")
2262 TYPE(c_ptr),
VALUE :: model
2263 END SUBROUTINE torch_c_model_freeze
2266 CALL timeset(routinen, handle)
2267 cpassert(c_associated(model%c_ptr))
2268 CALL torch_c_model_freeze(model=model%c_ptr)
2269 CALL timestop(handle)
2271 cpabort(
"CP2K was compiled without Torch library.")
2283 CHARACTER(len=*),
INTENT(IN) :: method_name
2285#if defined(__LIBTORCH)
2286 CHARACTER(len=*),
PARAMETER :: routinen = &
2287 'torch_model_freeze_preserving_method'
2291 SUBROUTINE torch_c_model_freeze_preserving_method(model, method_name) &
2292 BIND(C, name="torch_c_model_freeze_preserving_method")
2293 IMPORT :: c_char, c_ptr
2294 TYPE(c_ptr),
VALUE :: model
2295 CHARACTER(kind=C_CHAR),
DIMENSION(*) :: method_name
2296 END SUBROUTINE torch_c_model_freeze_preserving_method
2299 CALL timeset(routinen, handle)
2300 cpassert(c_associated(model%c_ptr))
2301 CALL torch_c_model_freeze_preserving_method( &
2302 model=model%c_ptr, method_name=trim(method_name)//c_null_char)
2303 CALL timestop(handle)
2305 cpabort(
"CP2K was compiled without Torch library.")
2306 mark_used(method_name)
2316 SUBROUTINE torch_model_get_attr_int64 (model, key, dest)
2318 CHARACTER(len=*),
INTENT(IN) :: key
2319 INTEGER(kind=int_8),
INTENT(OUT) :: dest
2321#if defined(__LIBTORCH)
2324 SUBROUTINE torch_c_model_get_attr_int64 (model, key, dest) &
2325 BIND(C, name="torch_c_model_get_attr_int64")
2326 IMPORT :: c_ptr, c_char, c_int64_t, c_double
2327 TYPE(c_ptr),
VALUE :: model
2328 CHARACTER(kind=C_CHAR),
DIMENSION(*) :: key
2329 INTEGER(kind=C_INT64_T) :: dest
2330 END SUBROUTINE torch_c_model_get_attr_int64
2333 CALL torch_c_model_get_attr_int64 (model=model%c_ptr, &
2334 key=trim(key)//c_null_char, &
2340 cpabort(
"CP2K compiled without the Torch library.")
2342 END SUBROUTINE torch_model_get_attr_int64
2347 SUBROUTINE torch_model_get_attr_double (model, key, dest)
2349 CHARACTER(len=*),
INTENT(IN) :: key
2350 REAL(dp),
INTENT(OUT) :: dest
2352#if defined(__LIBTORCH)
2355 SUBROUTINE torch_c_model_get_attr_double (model, key, dest) &
2356 BIND(C, name="torch_c_model_get_attr_double")
2357 IMPORT :: c_ptr, c_char, c_int64_t, c_double
2358 TYPE(c_ptr),
VALUE :: model
2359 CHARACTER(kind=C_CHAR),
DIMENSION(*) :: key
2360 REAL(kind=c_double) :: dest
2361 END SUBROUTINE torch_c_model_get_attr_double
2364 CALL torch_c_model_get_attr_double (model=model%c_ptr, &
2365 key=trim(key)//c_null_char, &
2371 cpabort(
"CP2K compiled without the Torch library.")
2373 END SUBROUTINE torch_model_get_attr_double
2378 SUBROUTINE torch_model_get_attr_string (model, key, dest)
2380 CHARACTER(len=*),
INTENT(IN) :: key
2381 CHARACTER(LEN=default_string_length),
INTENT(OUT) :: dest
2383#if defined(__LIBTORCH)
2386 SUBROUTINE torch_c_model_get_attr_string (model, key, dest) &
2387 BIND(C, name="torch_c_model_get_attr_string")
2388 IMPORT :: c_ptr, c_char, c_int64_t, c_double
2389 TYPE(c_ptr),
VALUE :: model
2390 CHARACTER(kind=C_CHAR),
DIMENSION(*) :: key
2391 CHARACTER(kind=C_CHAR),
DIMENSION(*) :: dest
2392 END SUBROUTINE torch_c_model_get_attr_string
2395 CALL torch_c_model_get_attr_string (model=model%c_ptr, &
2396 key=trim(key)//c_null_char, &
2402 cpabort(
"CP2K compiled without the Torch library.")
2404 END SUBROUTINE torch_model_get_attr_string
2410 SUBROUTINE torch_model_get_attr_int32(model, key, dest)
2412 CHARACTER(len=*),
INTENT(IN) :: key
2413 INTEGER,
INTENT(OUT) :: dest
2415 INTEGER(kind=int_8) :: temp
2416 CALL torch_model_get_attr_int64(model, key, temp)
2417 cpassert(abs(temp) < huge(dest))
2419 END SUBROUTINE torch_model_get_attr_int32
2425 SUBROUTINE torch_model_get_attr_strlist(model, key, dest)
2427 CHARACTER(len=*),
INTENT(IN) :: key
2428 CHARACTER(LEN=default_string_length), &
2429 ALLOCATABLE,
DIMENSION(:) :: dest
2431#if defined(__LIBTORCH)
2433 INTEGER :: num_items, i
2436 SUBROUTINE torch_c_model_get_attr_list_size(model, key, size) &
2437 BIND(C, name="torch_c_model_get_attr_list_size")
2438 IMPORT :: c_ptr, c_char, c_int
2439 TYPE(c_ptr),
VALUE :: model
2440 CHARACTER(kind=C_CHAR),
DIMENSION(*) :: key
2441 INTEGER(kind=C_INT) :: size
2442 END SUBROUTINE torch_c_model_get_attr_list_size
2446 SUBROUTINE torch_c_model_get_attr_strlist(model, key, index, dest) &
2447 BIND(C, name="torch_c_model_get_attr_strlist")
2448 IMPORT :: c_ptr, c_char, c_int
2449 TYPE(c_ptr),
VALUE :: model
2450 CHARACTER(kind=C_CHAR),
DIMENSION(*) :: key
2451 INTEGER(kind=C_INT),
VALUE :: index
2452 CHARACTER(kind=C_CHAR),
DIMENSION(*) :: dest
2453 END SUBROUTINE torch_c_model_get_attr_strlist
2456 CALL torch_c_model_get_attr_list_size(model=model%c_ptr, &
2457 key=trim(key)//c_null_char, &
2459 ALLOCATE (dest(num_items))
2463 CALL torch_c_model_get_attr_strlist(model=model%c_ptr, &
2464 key=trim(key)//c_null_char, &
2470 cpabort(
"CP2K compiled without the Torch library.")
2476 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.
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.