kim-api  2.2.1+v2.2.1.GNU.GNU.
An Application Programming Interface (API) for the Knowledgebase of Interatomic Models (KIM).
kim_compute_arguments_module.f90
Go to the documentation of this file.
1 !
2 ! CDDL HEADER START
3 !
4 ! The contents of this file are subject to the terms of the Common Development
5 ! and Distribution License Version 1.0 (the "License").
6 !
7 ! You can obtain a copy of the license at
8 ! http://www.opensource.org/licenses/CDDL-1.0. See the License for the
9 ! specific language governing permissions and limitations under the License.
10 !
11 ! When distributing Covered Code, include this CDDL HEADER in each file and
12 ! include the License file in a prominent location with the name LICENSE.CDDL.
13 ! If applicable, add the following below this CDDL HEADER, with the fields
14 ! enclosed by brackets "[]" replaced with your own identifying information:
15 !
16 ! Portions Copyright (c) [yyyy] [name of copyright owner]. All rights reserved.
17 !
18 ! CDDL HEADER END
19 !
20 
21 !
22 ! Copyright (c) 2016--2020, Regents of the University of Minnesota.
23 ! All rights reserved.
24 !
25 ! Contributors:
26 ! Ryan S. Elliott
27 !
28 
29 !
30 ! Release: This file is part of the kim-api-2.2.1 package.
31 !
32 
39  use, intrinsic :: iso_c_binding
40  implicit none
41  private
42 
43  public &
44  ! Derived types
45  kim_compute_arguments_handle_type, &
46  ! Constants
48  ! Routines
49  operator(.eq.), &
50  operator(.ne.), &
51  kim_get_argument_support_status, &
52  kim_get_callback_support_status, &
53  kim_set_argument_pointer, &
54  kim_set_callback_pointer, &
55  kim_are_all_required_present, &
56  kim_set_simulator_buffer_pointer, &
57  kim_get_simulator_buffer_pointer, &
58  kim_to_string, &
59  kim_set_log_id, &
60  kim_push_log_verbosity, &
61  kim_pop_log_verbosity
62 
68  type, bind(c) :: kim_compute_arguments_handle_type
69  type(c_ptr) :: p = c_null_ptr
70  end type kim_compute_arguments_handle_type
71 
75  type(kim_compute_arguments_handle_type), protected, save &
77 
81  interface operator(.eq.)
82  module procedure kim_compute_arguments_handle_equal
83  end interface operator(.eq.)
84 
88  interface operator(.ne.)
89  module procedure kim_compute_arguments_handle_not_equal
90  end interface operator(.ne.)
91 
98  interface kim_get_argument_support_status
99  module procedure kim_compute_arguments_get_argument_support_status
100  end interface kim_get_argument_support_status
101 
108  interface kim_get_callback_support_status
110  end interface kim_get_callback_support_status
111 
119  interface kim_set_argument_pointer
126  end interface kim_set_argument_pointer
127 
134  interface kim_set_callback_pointer
136  end interface kim_set_callback_pointer
137 
145  interface kim_are_all_required_present
147  end interface kim_are_all_required_present
148 
155  interface kim_set_simulator_buffer_pointer
157  end interface kim_set_simulator_buffer_pointer
158 
165  interface kim_get_simulator_buffer_pointer
167  end interface kim_get_simulator_buffer_pointer
168 
174  interface kim_to_string
175  module procedure kim_compute_arguments_to_string
176  end interface kim_to_string
177 
183  interface kim_set_log_id
184  module procedure kim_compute_arguments_set_log_id
185  end interface kim_set_log_id
186 
193  interface kim_push_log_verbosity
195  end interface kim_push_log_verbosity
196 
203  interface kim_pop_log_verbosity
205  end interface kim_pop_log_verbosity
206 
207 contains
211  logical recursive function kim_compute_arguments_handle_equal(lhs, rhs)
212  implicit none
213  type(kim_compute_arguments_handle_type), intent(in) :: lhs
214  type(kim_compute_arguments_handle_type), intent(in) :: rhs
215 
216  if ((.not. c_associated(lhs%p)) .and. (.not. c_associated(rhs%p))) then
217  kim_compute_arguments_handle_equal = .true.
218  else
219  kim_compute_arguments_handle_equal = c_associated(lhs%p, rhs%p)
220  end if
221  end function kim_compute_arguments_handle_equal
222 
226  logical recursive function kim_compute_arguments_handle_not_equal(lhs, rhs)
227  implicit none
228  type(kim_compute_arguments_handle_type), intent(in) :: lhs
229  type(kim_compute_arguments_handle_type), intent(in) :: rhs
230 
231  kim_compute_arguments_handle_not_equal = .not. (lhs == rhs)
232  end function kim_compute_arguments_handle_not_equal
233 
240  recursive subroutine kim_compute_arguments_get_argument_support_status( &
241  compute_arguments_handle, compute_argument_name, &
242  support_status, ierr)
243  use kim_compute_argument_name_module, only: kim_compute_argument_name_type
244  use kim_support_status_module, only: kim_support_status_type
245  use kim_interoperable_types_module, only: kim_compute_arguments_type
246  implicit none
247  interface
248  integer(c_int) recursive function get_argument_support_status( &
249  compute_arguments, compute_argument_name, support_status) &
250  bind(c, name="KIM_ComputeArguments_GetArgumentSupportStatus")
251  use, intrinsic :: iso_c_binding
253  kim_compute_argument_name_type
254  use kim_support_status_module, only: kim_support_status_type
255  use kim_interoperable_types_module, only: kim_compute_arguments_type
256  implicit none
257  type(kim_compute_arguments_type), intent(in) :: compute_arguments
258  type(kim_compute_argument_name_type), intent(in), value :: &
259  compute_argument_name
260  type(kim_support_status_type), intent(out) :: support_status
261  end function get_argument_support_status
262  end interface
263  type(kim_compute_arguments_handle_type), intent(in) :: &
264  compute_arguments_handle
265  type(kim_compute_argument_name_type), intent(in) :: &
266  compute_argument_name
267  type(kim_support_status_type), intent(out) :: support_status
268  integer(c_int), intent(out) :: ierr
269  type(kim_compute_arguments_type), pointer :: compute_arguments
270 
271  call c_f_pointer(compute_arguments_handle%p, compute_arguments)
272  ierr = get_argument_support_status(compute_arguments, &
273  compute_argument_name, support_status)
274  end subroutine kim_compute_arguments_get_argument_support_status
275 
283  compute_arguments_handle, compute_callback_name, support_status, ierr)
284  use kim_compute_callback_name_module, only: kim_compute_callback_name_type
285  use kim_support_status_module, only: kim_support_status_type
286  use kim_interoperable_types_module, only: kim_compute_arguments_type
287  implicit none
288  interface
289  integer(c_int) recursive function get_callback_support_status( &
290  compute_arguments, compute_callback_name, support_status) &
291  bind(c, name="KIM_ComputeArguments_GetCallbackSupportStatus")
292  use, intrinsic :: iso_c_binding
294  kim_compute_callback_name_type
295  use kim_support_status_module, only: kim_support_status_type
296  use kim_interoperable_types_module, only: kim_compute_arguments_type
297  implicit none
298  type(kim_compute_arguments_type), intent(in) :: compute_arguments
299  type(kim_compute_callback_name_type), intent(in), value :: &
300  compute_callback_name
301  type(kim_support_status_type), intent(out) :: support_status
302  end function get_callback_support_status
303  end interface
304  type(kim_compute_arguments_handle_type), intent(in) :: &
305  compute_arguments_handle
306  type(kim_compute_callback_name_type), intent(in) :: &
307  compute_callback_name
308  type(kim_support_status_type), intent(out) :: support_status
309  integer(c_int), intent(out) :: ierr
310  type(kim_compute_arguments_type), pointer :: compute_arguments
311 
312  call c_f_pointer(compute_arguments_handle%p, compute_arguments)
313  ierr = get_callback_support_status(compute_arguments, &
314  compute_callback_name, support_status)
316 
324  compute_arguments_handle, compute_argument_name, int0, ierr)
325  use kim_compute_argument_name_module, only: kim_compute_argument_name_type
326  use kim_interoperable_types_module, only: kim_compute_arguments_type
327  implicit none
328  interface
329  integer(c_int) recursive function set_argument_pointer_integer( &
330  compute_arguments, compute_argument_name, ptr) &
331  bind(c, name="KIM_ComputeArguments_SetArgumentPointerInteger")
332  use, intrinsic :: iso_c_binding
334  kim_compute_argument_name_type
335  use kim_interoperable_types_module, only: kim_compute_arguments_type
336  implicit none
337  type(kim_compute_arguments_type), intent(in) :: compute_arguments
338  type(kim_compute_argument_name_type), intent(in), value :: &
339  compute_argument_name
340  type(c_ptr), intent(in), value :: ptr
341  end function set_argument_pointer_integer
342  end interface
343  type(kim_compute_arguments_handle_type), intent(in) :: &
344  compute_arguments_handle
345  type(kim_compute_argument_name_type), intent(in) :: &
346  compute_argument_name
347  integer(c_int), intent(in), target :: int0
348  integer(c_int), intent(out) :: ierr
349  type(kim_compute_arguments_type), pointer :: compute_arguments
350 
351  call c_f_pointer(compute_arguments_handle%p, compute_arguments)
352  ierr = set_argument_pointer_integer(compute_arguments, &
353  compute_argument_name, c_loc(int0))
355 
363  compute_arguments_handle, compute_argument_name, int1, ierr)
364  use kim_compute_argument_name_module, only: kim_compute_argument_name_type
365  use kim_interoperable_types_module, only: kim_compute_arguments_type
366  implicit none
367  type(kim_compute_arguments_handle_type), intent(in) :: &
368  compute_arguments_handle
369  type(kim_compute_argument_name_type), intent(in) :: &
370  compute_argument_name
371  integer(c_int), intent(in), target :: int1(:)
372  integer(c_int), intent(out) :: ierr
373  type(kim_compute_arguments_type), pointer :: compute_arguments
374 
375  call c_f_pointer(compute_arguments_handle%p, compute_arguments)
376  call set(compute_arguments, compute_argument_name, size(int1, 1, c_int), &
377  int1, ierr)
378  return
379 
380  contains
381  recursive subroutine set(compute_arguments, compute_argument_name, &
382  extent1, int1, ierr)
384  kim_compute_argument_name_type
385  use kim_interoperable_types_module, only: kim_compute_arguments_type
386  implicit none
387  interface
388  integer(c_int) recursive function set_argument_pointer_integer( &
389  compute_arguments, compute_argument_name, ptr) &
390  bind(c, name="KIM_ComputeArguments_SetArgumentPointerInteger")
391  use, intrinsic :: iso_c_binding
393  kim_compute_argument_name_type
394  use kim_interoperable_types_module, only: kim_compute_arguments_type
395  implicit none
396  type(kim_compute_arguments_type), intent(in) :: compute_arguments
397  type(kim_compute_argument_name_type), intent(in), value :: &
398  compute_argument_name
399  type(c_ptr), intent(in), value :: ptr
400  end function set_argument_pointer_integer
401  end interface
402  type(kim_compute_arguments_type), intent(in) :: compute_arguments
403  type(kim_compute_argument_name_type), intent(in) :: &
404  compute_argument_name
405  integer(c_int), intent(in) :: extent1
406  integer(c_int), intent(in), target :: int1(extent1)
407  integer(c_int), intent(out) :: ierr
408 
409  ierr = set_argument_pointer_integer(compute_arguments, &
410  compute_argument_name, c_loc(int1))
411  end subroutine set
413 
421  compute_arguments_handle, compute_argument_name, int2, ierr)
422  use kim_compute_argument_name_module, only: kim_compute_argument_name_type
423  use kim_interoperable_types_module, only: kim_compute_arguments_type
424  implicit none
425  type(kim_compute_arguments_handle_type), intent(in) :: &
426  compute_arguments_handle
427  type(kim_compute_argument_name_type), intent(in) :: &
428  compute_argument_name
429  integer(c_int), intent(in), target :: int2(:, :)
430  integer(c_int), intent(out) :: ierr
431  type(kim_compute_arguments_type), pointer :: compute_arguments
432 
433  call c_f_pointer(compute_arguments_handle%p, compute_arguments)
434  call set(compute_arguments, compute_argument_name, size(int2, 1, c_int), &
435  size(int2, 2, c_int), int2, ierr)
436  return
437 
438  contains
439  recursive subroutine set(compute_arguments, compute_argument_name, &
440  extent1, extent2, int2, ierr)
442  kim_compute_argument_name_type
443  use kim_interoperable_types_module, only: kim_compute_arguments_type
444  implicit none
445  interface
446  integer(c_int) recursive function set_argument_pointer_integer( &
447  compute_arguments, compute_argument_name, ptr) &
448  bind(c, name="KIM_ComputeArguments_SetArgumentPointerInteger")
449  use, intrinsic :: iso_c_binding
451  kim_compute_argument_name_type
452  use kim_interoperable_types_module, only: kim_compute_arguments_type
453  implicit none
454  type(kim_compute_arguments_type), intent(in) :: compute_arguments
455  type(kim_compute_argument_name_type), intent(in), value :: &
456  compute_argument_name
457  type(c_ptr), intent(in), value :: ptr
458  end function set_argument_pointer_integer
459  end interface
460  type(kim_compute_arguments_type), intent(in) :: compute_arguments
461  type(kim_compute_argument_name_type), intent(in) :: &
462  compute_argument_name
463  integer(c_int), intent(in) :: extent1
464  integer(c_int), intent(in) :: extent2
465  integer(c_int), intent(in), target :: int2(extent1, extent2)
466  integer(c_int), intent(out) :: ierr
467 
468  ierr = set_argument_pointer_integer(compute_arguments, &
469  compute_argument_name, c_loc(int2))
470  end subroutine set
472 
480  compute_arguments_handle, compute_argument_name, double0, ierr)
481  use kim_compute_argument_name_module, only: kim_compute_argument_name_type
482  use kim_interoperable_types_module, only: kim_compute_arguments_type
483  implicit none
484  interface
485  integer(c_int) recursive function set_argument_pointer_double( &
486  compute_arguments, compute_argument_name, ptr) &
487  bind(c, name="KIM_ComputeArguments_SetArgumentPointerDouble")
488  use, intrinsic :: iso_c_binding
490  kim_compute_argument_name_type
491  use kim_interoperable_types_module, only: kim_compute_arguments_type
492  implicit none
493  type(kim_compute_arguments_type), intent(in) :: compute_arguments
494  type(kim_compute_argument_name_type), intent(in), value :: &
495  compute_argument_name
496  type(c_ptr), intent(in), value :: ptr
497  end function set_argument_pointer_double
498  end interface
499  type(kim_compute_arguments_handle_type), intent(in) :: &
500  compute_arguments_handle
501  type(kim_compute_argument_name_type), intent(in) :: &
502  compute_argument_name
503  real(c_double), intent(in), target :: double0
504  integer(c_int), intent(out) :: ierr
505  type(kim_compute_arguments_type), pointer :: compute_arguments
506 
507  call c_f_pointer(compute_arguments_handle%p, compute_arguments)
508  ierr = set_argument_pointer_double(compute_arguments, &
509  compute_argument_name, c_loc(double0))
511 
519  compute_arguments_handle, compute_argument_name, double1, ierr)
520  use kim_compute_argument_name_module, only: kim_compute_argument_name_type
521  use kim_interoperable_types_module, only: kim_compute_arguments_type
522  implicit none
523  type(kim_compute_arguments_handle_type), intent(in) :: &
524  compute_arguments_handle
525  type(kim_compute_argument_name_type), intent(in) :: &
526  compute_argument_name
527  real(c_double), intent(in), target :: double1(:)
528  integer(c_int), intent(out) :: ierr
529  type(kim_compute_arguments_type), pointer :: compute_arguments
530 
531  call c_f_pointer(compute_arguments_handle%p, compute_arguments)
532  call set(compute_arguments, compute_argument_name, &
533  size(double1, 1, c_int), double1, ierr)
534  return
535 
536  contains
537  recursive subroutine set(compute_arguments, compute_argument_name, &
538  extent1, double1, ierr)
540  kim_compute_argument_name_type
541  use kim_interoperable_types_module, only: kim_compute_arguments_type
542  implicit none
543  interface
544  integer(c_int) recursive function set_argument_pointer_double( &
545  compute_arguments, compute_argument_name, ptr) &
546  bind(c, name="KIM_ComputeArguments_SetArgumentPointerDouble")
547  use, intrinsic :: iso_c_binding
549  kim_compute_argument_name_type
550  use kim_interoperable_types_module, only: kim_compute_arguments_type
551  implicit none
552  type(kim_compute_arguments_type), intent(in) :: compute_arguments
553  type(kim_compute_argument_name_type), intent(in), value :: &
554  compute_argument_name
555  type(c_ptr), intent(in), value :: ptr
556  end function set_argument_pointer_double
557  end interface
558  type(kim_compute_arguments_type), intent(in) :: compute_arguments
559  type(kim_compute_argument_name_type), intent(in) :: &
560  compute_argument_name
561  integer(c_int), intent(in) :: extent1
562  real(c_double), intent(in), target :: double1(extent1)
563  integer(c_int), intent(out) :: ierr
564 
565  ierr = set_argument_pointer_double(compute_arguments, &
566  compute_argument_name, c_loc(double1))
567  end subroutine set
569 
577  compute_arguments_handle, compute_argument_name, double2, ierr)
578  use kim_compute_argument_name_module, only: kim_compute_argument_name_type
579  use kim_interoperable_types_module, only: kim_compute_arguments_type
580  implicit none
581  type(kim_compute_arguments_handle_type), intent(in) :: &
582  compute_arguments_handle
583  type(kim_compute_argument_name_type), intent(in) :: &
584  compute_argument_name
585  real(c_double), intent(in), target :: double2(:, :)
586  integer(c_int), intent(out) :: ierr
587  type(kim_compute_arguments_type), pointer :: compute_arguments
588 
589  call c_f_pointer(compute_arguments_handle%p, compute_arguments)
590  call set(compute_arguments, compute_argument_name, &
591  size(double2, 1, c_int), size(double2, 2, c_int), double2, ierr)
592  return
593 
594  contains
595  recursive subroutine set(compute_arguments, compute_argument_name, &
596  extent1, extent2, double2, ierr)
598  kim_compute_argument_name_type
599  implicit none
600  interface
601  integer(c_int) recursive function set_argument_pointer_double( &
602  compute_arguments, compute_argument_name, ptr) &
603  bind(c, name="KIM_ComputeArguments_SetArgumentPointerDouble")
604  use, intrinsic :: iso_c_binding
606  kim_compute_argument_name_type
607  use kim_interoperable_types_module, only: kim_compute_arguments_type
608  implicit none
609  type(kim_compute_arguments_type), intent(in) :: compute_arguments
610  type(kim_compute_argument_name_type), intent(in), value :: &
611  compute_argument_name
612  type(c_ptr), intent(in), value :: ptr
613  end function set_argument_pointer_double
614  end interface
615  type(kim_compute_arguments_type), intent(in) :: compute_arguments
616  type(kim_compute_argument_name_type), intent(in) :: &
617  compute_argument_name
618  integer(c_int), intent(in) :: extent1
619  integer(c_int), intent(in) :: extent2
620  real(c_double), intent(in), target :: double2(extent1, extent2)
621  integer(c_int), intent(out) :: ierr
622 
623  ierr = set_argument_pointer_double(compute_arguments, &
624  compute_argument_name, c_loc(double2))
625  end subroutine set
627 
634  recursive subroutine kim_compute_arguments_set_callback_pointer( &
635  compute_arguments_handle, compute_callback_name, language_name, fptr, &
636  data_object, ierr)
637  use kim_compute_callback_name_module, only: kim_compute_callback_name_type
638  use kim_language_name_module, only: kim_language_name_type
639  use kim_interoperable_types_module, only: kim_compute_arguments_type
640  implicit none
641  interface
642  integer(c_int) recursive function set_callback_pointer( &
643  compute_arguments, compute_callback_name, language_name, fptr, &
644  data_object) bind(c, name="KIM_ComputeArguments_SetCallbackPointer")
645  use, intrinsic :: iso_c_binding
646  use kim_language_name_module, only: kim_language_name_type
648  kim_compute_callback_name_type
649  use kim_interoperable_types_module, only: kim_compute_arguments_type
650  implicit none
651  type(kim_compute_arguments_type), intent(in) :: compute_arguments
652  type(kim_language_name_type), intent(in), value :: language_name
653  type(kim_compute_callback_name_type), intent(in), value :: &
654  compute_callback_name
655  type(c_funptr), intent(in), value :: fptr
656  type(c_ptr), intent(in), value :: data_object
657  end function set_callback_pointer
658  end interface
659  type(kim_compute_arguments_handle_type), intent(in) :: &
660  compute_arguments_handle
661  type(kim_compute_callback_name_type), intent(in) :: &
662  compute_callback_name
663  type(kim_language_name_type), intent(in) :: language_name
664  type(c_funptr), intent(in), value :: fptr ! must be left as "value"!?!
665  type(c_ptr), intent(in) :: data_object
666  integer(c_int), intent(out) :: ierr
667  type(kim_compute_arguments_type), pointer :: compute_arguments
668 
669  call c_f_pointer(compute_arguments_handle%p, compute_arguments)
670  ierr = set_callback_pointer(compute_arguments, compute_callback_name, &
671  language_name, fptr, data_object)
673 
681  recursive subroutine kim_compute_arguments_are_all_required_present( &
682  compute_arguments_handle, result_value, ierr)
683  use kim_interoperable_types_module, only: kim_compute_arguments_type
684  implicit none
685  interface
686  integer(c_int) recursive function &
687  are_all_required_arguments_and_callbacks_present( &
688  compute_arguments, result_value) &
689  bind(c, &
690  name= &
691  "KIM_ComputeArguments_AreAllRequiredArgumentsAndCallbacksPresent")
692  use, intrinsic :: iso_c_binding
693  use kim_interoperable_types_module, only: kim_compute_arguments_type
694  implicit none
695  type(kim_compute_arguments_type), intent(in) :: compute_arguments
696  integer(c_int), intent(out) :: result_value
697  end function are_all_required_arguments_and_callbacks_present
698  end interface
699  type(kim_compute_arguments_handle_type), intent(in) :: &
700  compute_arguments_handle
701  integer(c_int), intent(out) :: result_value
702  integer(c_int), intent(out) :: ierr
703  type(kim_compute_arguments_type), pointer :: compute_arguments
704 
705  call c_f_pointer(compute_arguments_handle%p, compute_arguments)
706  ierr = are_all_required_arguments_and_callbacks_present( &
707  compute_arguments, result_value)
709 
717  compute_arguments_handle, ptr)
718  use kim_interoperable_types_module, only: kim_compute_arguments_type
719  implicit none
720  interface
721  recursive subroutine set_simulator_buffer_pointer( &
722  compute_arguments, ptr) &
723  bind(c, name="KIM_ComputeArguments_SetSimulatorBufferPointer")
724  use, intrinsic :: iso_c_binding
725  use kim_interoperable_types_module, only: kim_compute_arguments_type
726  implicit none
727  type(kim_compute_arguments_type), intent(in) :: compute_arguments
728  type(c_ptr), intent(in), value :: ptr
729  end subroutine set_simulator_buffer_pointer
730  end interface
731  type(kim_compute_arguments_handle_type), intent(in) :: &
732  compute_arguments_handle
733  type(c_ptr), intent(in) :: ptr
734  type(kim_compute_arguments_type), pointer :: compute_arguments
735 
736  call c_f_pointer(compute_arguments_handle%p, compute_arguments)
737  call set_simulator_buffer_pointer(compute_arguments, ptr)
739 
747  compute_arguments_handle, ptr)
748  use kim_interoperable_types_module, only: kim_compute_arguments_type
749  implicit none
750  interface
751  recursive subroutine get_simulator_buffer_pointer( &
752  compute_arguments, ptr) &
753  bind(c, name="KIM_ComputeArguments_GetSimulatorBufferPointer")
754  use, intrinsic :: iso_c_binding
755  use kim_interoperable_types_module, only: kim_compute_arguments_type
756  implicit none
757  type(kim_compute_arguments_type), intent(in) :: compute_arguments
758  type(c_ptr), intent(out) :: ptr
759  end subroutine get_simulator_buffer_pointer
760  end interface
761  type(kim_compute_arguments_handle_type), intent(in) :: &
762  compute_arguments_handle
763  type(c_ptr), intent(out) :: ptr
764  type(kim_compute_arguments_type), pointer :: compute_arguments
765 
766  call c_f_pointer(compute_arguments_handle%p, compute_arguments)
767  call get_simulator_buffer_pointer(compute_arguments, ptr)
769 
775  recursive subroutine kim_compute_arguments_to_string( &
776  compute_arguments_handle, string)
777  use kim_convert_string_module, only: kim_convert_c_char_ptr_to_string
778  use kim_interoperable_types_module, only: kim_compute_arguments_type
779  implicit none
780  interface
781  type(c_ptr) recursive function compute_arguments_string( &
782  compute_arguments) bind(c, name="KIM_ComputeArguments_ToString")
783  use, intrinsic :: iso_c_binding
784  use kim_interoperable_types_module, only: kim_compute_arguments_type
785  implicit none
786  type(kim_compute_arguments_type), intent(in) :: compute_arguments
787  end function compute_arguments_string
788  end interface
789  type(kim_compute_arguments_handle_type), intent(in) :: &
790  compute_arguments_handle
791  character(len=*, kind=c_char), intent(out) :: string
792  type(kim_compute_arguments_type), pointer :: compute_arguments
793 
794  type(c_ptr) :: p
795 
796  call c_f_pointer(compute_arguments_handle%p, compute_arguments)
797  p = compute_arguments_string(compute_arguments)
798  call kim_convert_c_char_ptr_to_string(p, string)
799  end subroutine kim_compute_arguments_to_string
800 
806  recursive subroutine kim_compute_arguments_set_log_id( &
807  compute_arguments_handle, log_id)
808  use kim_interoperable_types_module, only: kim_compute_arguments_type
809  implicit none
810  interface
811  recursive subroutine set_log_id(compute_arguments, log_id) &
812  bind(c, name="KIM_ComputeArguments_SetLogID")
813  use, intrinsic :: iso_c_binding
814  use kim_interoperable_types_module, only: kim_compute_arguments_type
815  implicit none
816  type(kim_compute_arguments_type), intent(in) :: compute_arguments
817  character(c_char), intent(in) :: log_id(*)
818  end subroutine set_log_id
819  end interface
820  type(kim_compute_arguments_handle_type), intent(in) :: &
821  compute_arguments_handle
822  character(len=*, kind=c_char), intent(in) :: log_id
823  type(kim_compute_arguments_type), pointer :: compute_arguments
824 
825  call c_f_pointer(compute_arguments_handle%p, compute_arguments)
826  call set_log_id(compute_arguments, trim(log_id)//c_null_char)
827  end subroutine kim_compute_arguments_set_log_id
828 
835  recursive subroutine kim_compute_arguments_push_log_verbosity( &
836  compute_arguments_handle, log_verbosity)
837  use kim_log_verbosity_module, only: kim_log_verbosity_type
838  use kim_interoperable_types_module, only: kim_compute_arguments_type
839  implicit none
840  interface
841  recursive subroutine push_log_verbosity( &
842  compute_arguments, log_verbosity) &
843  bind(c, name="KIM_ComputeArguments_PushLogVerbosity")
844  use, intrinsic :: iso_c_binding
845  use kim_log_verbosity_module, only: kim_log_verbosity_type
846  use kim_interoperable_types_module, only: kim_compute_arguments_type
847  implicit none
848  type(kim_compute_arguments_type), intent(in) :: compute_arguments
849  type(kim_log_verbosity_type), intent(in), value :: log_verbosity
850  end subroutine push_log_verbosity
851  end interface
852  type(kim_compute_arguments_handle_type), intent(in) :: &
853  compute_arguments_handle
854  type(kim_log_verbosity_type), intent(in) :: log_verbosity
855  type(kim_compute_arguments_type), pointer :: compute_arguments
856 
857  call c_f_pointer(compute_arguments_handle%p, compute_arguments)
858  call push_log_verbosity(compute_arguments, log_verbosity)
860 
867  recursive subroutine kim_compute_arguments_pop_log_verbosity( &
868  compute_arguments_handle)
869  use kim_log_verbosity_module, only: kim_log_verbosity_type
870  use kim_interoperable_types_module, only: kim_compute_arguments_type
871  implicit none
872  interface
873  recursive subroutine pop_log_verbosity(compute_arguments) &
874  bind(c, name="KIM_ComputeArguments_PopLogVerbosity")
875  use, intrinsic :: iso_c_binding
876  use kim_log_verbosity_module, only: kim_log_verbosity_type
877  use kim_interoperable_types_module, only: kim_compute_arguments_type
878  implicit none
879  type(kim_compute_arguments_type), intent(in) :: compute_arguments
880  end subroutine pop_log_verbosity
881  end interface
882  type(kim_compute_arguments_handle_type), intent(in) :: &
883  compute_arguments_handle
884  type(kim_compute_arguments_type), pointer :: compute_arguments
885 
886  call c_f_pointer(compute_arguments_handle%p, compute_arguments)
887  call pop_log_verbosity(compute_arguments)
recursive subroutine kim_compute_arguments_set_argument_pointer_double1(compute_arguments_handle, compute_argument_name, double1, ierr)
Set the data pointer for a ComputeArgumentName.
recursive subroutine kim_compute_arguments_get_callback_support_status(compute_arguments_handle, compute_callback_name, support_status, ierr)
Get the SupportStatus of a ComputeCallbackName.
recursive subroutine kim_compute_arguments_set_log_id(compute_arguments_handle, log_id)
Set the identity of the Log object associated with the ComputeArguments object.
recursive subroutine kim_compute_arguments_set_simulator_buffer_pointer(compute_arguments_handle, ptr)
Set the Simulator's buffer pointer within the ComputeArguments object.
recursive subroutine kim_compute_arguments_get_simulator_buffer_pointer(compute_arguments_handle, ptr)
Get the Simulator's buffer pointer from the ComputeArguments object.
recursive subroutine kim_compute_arguments_set_argument_pointer_double0(compute_arguments_handle, compute_argument_name, double0, ierr)
Set the data pointer for a ComputeArgumentName.
An Extensible Enumeration for the LanguageName's supported by the KIM API.
type(kim_compute_arguments_handle_type), save, public, protected kim_compute_arguments_null_handle
NULL handle for use in comparisons.
recursive subroutine kim_compute_arguments_set_argument_pointer_double2(compute_arguments_handle, compute_argument_name, double2, ierr)
Set the data pointer for a ComputeArgumentName.
recursive subroutine kim_compute_arguments_are_all_required_present(compute_arguments_handle, result_value, ierr)
Determine if non-NULL pointers have been set for all ComputeArgumentName's and ComputeCallbackName's ...
recursive subroutine kim_compute_arguments_set_argument_pointer_int1(compute_arguments_handle, compute_argument_name, int1, ierr)
Set the data pointer for a ComputeArgumentName.
recursive subroutine kim_compute_arguments_push_log_verbosity(compute_arguments_handle, log_verbosity)
Push a new LogVerbosity onto the ComputeArguments object's Log object verbosity stack.
Provides the primary interface to a KIM API ComputeArguments object and is meant to be used by simula...
recursive subroutine kim_compute_arguments_pop_log_verbosity(compute_arguments_handle)
Pop a LogVerbosity from the ComputeArguments object's Log object verbosity stack. ...
An Extensible Enumeration for the SupportStatus's supported by the KIM API.
recursive subroutine kim_compute_arguments_set_callback_pointer(compute_arguments_handle, compute_callback_name, language_name, fptr, data_object, ierr)
Set the function pointer for a ComputeCallbackName.
recursive subroutine kim_compute_arguments_set_argument_pointer_int0(compute_arguments_handle, compute_argument_name, int0, ierr)
Set the data pointer for a ComputeArgumentName.
recursive subroutine set(compute_arguments, compute_argument_name, extent1, int1, ierr)
An Extensible Enumeration for the ComputeCallbackName's supported by the KIM API. ...
recursive subroutine kim_compute_arguments_set_argument_pointer_int2(compute_arguments_handle, compute_argument_name, int2, ierr)
Set the data pointer for a ComputeArgumentName.
An Extensible Enumeration for the ComputeArgumentName's supported by the KIM API. ...
An Extensible Enumeration for the LogVerbosity's supported by the KIM API.
recursive subroutine kim_compute_arguments_to_string(compute_arguments_handle, string)
Get a string representing the internal state of the ComputeArguments object.