40 use,
intrinsic :: iso_c_binding
46 kim_model_handle_type, &
56 kim_is_routine_present, &
57 kim_get_influence_distance, &
58 kim_get_number_of_neighbor_lists, &
59 kim_get_neighbor_list_values, &
61 kim_compute_arguments_create, &
62 kim_compute_arguments_destroy, &
65 kim_clear_then_refresh, &
66 kim_write_parameterized_model, &
67 kim_get_species_support_and_code, &
68 kim_get_number_of_parameters, &
69 kim_get_parameter_metadata, &
72 kim_set_simulator_buffer_pointer, &
73 kim_get_simulator_buffer_pointer, &
76 kim_push_log_verbosity, &
85 type, bind(c) :: kim_model_handle_type
86 type(c_ptr) :: p = c_null_ptr
87 end type kim_model_handle_type
92 type(kim_model_handle_type),
protected,
save &
98 interface operator (.eq.)
99 module procedure kim_model_handle_equal
100 end interface operator (.eq.)
105 interface operator (.ne.)
106 module procedure kim_model_handle_not_equal
107 end interface operator (.ne.)
114 interface kim_is_routine_present
115 module procedure kim_model_is_routine_present
116 end interface kim_is_routine_present
123 interface kim_get_influence_distance
125 end interface kim_get_influence_distance
132 interface kim_get_number_of_neighbor_lists
134 end interface kim_get_number_of_neighbor_lists
141 interface kim_get_neighbor_list_values
143 end interface kim_get_neighbor_list_values
150 interface kim_get_units
152 end interface kim_get_units
159 interface kim_compute_arguments_create
161 end interface kim_compute_arguments_create
168 interface kim_compute_arguments_destroy
170 end interface kim_compute_arguments_destroy
177 interface kim_compute
179 end interface kim_compute
186 interface kim_extension
188 end interface kim_extension
195 interface kim_clear_then_refresh
197 end interface kim_clear_then_refresh
204 interface kim_write_parameterized_model
206 end interface kim_write_parameterized_model
214 interface kim_get_species_support_and_code
216 end interface kim_get_species_support_and_code
223 interface kim_get_number_of_parameters
225 end interface kim_get_number_of_parameters
232 interface kim_get_parameter_metadata
234 end interface kim_get_parameter_metadata
242 interface kim_get_parameter
245 end interface kim_get_parameter
253 interface kim_set_parameter
256 end interface kim_set_parameter
264 interface kim_set_simulator_buffer_pointer
266 end interface kim_set_simulator_buffer_pointer
274 interface kim_get_simulator_buffer_pointer
276 end interface kim_get_simulator_buffer_pointer
283 interface kim_to_string
285 end interface kim_to_string
292 interface kim_set_log_id
294 end interface kim_set_log_id
301 interface kim_push_log_verbosity
303 end interface kim_push_log_verbosity
310 interface kim_pop_log_verbosity
312 end interface kim_pop_log_verbosity
318 logical recursive function kim_model_handle_equal(lhs, rhs)
320 type(kim_model_handle_type),
intent(in) :: lhs
321 type(kim_model_handle_type),
intent(in) :: rhs
323 if ((.not. c_associated(lhs%p)) .and. (.not. c_associated(rhs%p)))
then 324 kim_model_handle_equal = .true.
326 kim_model_handle_equal = c_associated(lhs%p, rhs%p)
328 end function kim_model_handle_equal
333 logical recursive function kim_model_handle_not_equal(lhs, rhs)
335 type(kim_model_handle_type),
intent(in) :: lhs
336 type(kim_model_handle_type),
intent(in) :: rhs
338 kim_model_handle_not_equal = .not. (lhs .eq. rhs)
339 end function kim_model_handle_not_equal
347 requested_energy_unit, requested_charge_unit, &
348 requested_temperature_unit, requested_time_unit, model_name, &
349 requested_units_accepted, model_handle, ierr)
352 kim_energy_unit_type, kim_charge_unit_type, kim_temperature_unit_type, &
356 integer(c_int) recursive function create(numbering, &
357 requested_length_unit, requested_energy_unit, requested_charge_unit, &
358 requested_temperature_unit, requested_time_unit, model_name, &
359 requested_units_accepted, model) bind(c, name="KIM_Model_Create")
360 use,
intrinsic :: iso_c_binding
363 kim_energy_unit_type, kim_charge_unit_type, &
364 kim_temperature_unit_type, kim_time_unit_type
366 type(kim_numbering_type),
intent(in),
value :: numbering
367 type(kim_length_unit_type),
intent(in),
value :: requested_length_unit
368 type(kim_energy_unit_type),
intent(in),
value :: requested_energy_unit
369 type(kim_charge_unit_type),
intent(in),
value :: requested_charge_unit
370 type(kim_temperature_unit_type),
intent(in),
value :: &
371 requested_temperature_unit
372 type(kim_time_unit_type),
intent(in),
value :: requested_time_unit
373 character(c_char),
intent(in) :: model_name(*)
374 integer(c_int),
intent(out) :: requested_units_accepted
375 type(c_ptr),
intent(out) :: model
378 type(kim_numbering_type),
intent(in) :: numbering
379 type(kim_length_unit_type),
intent(in) :: requested_length_unit
380 type(kim_energy_unit_type),
intent(in) :: requested_energy_unit
381 type(kim_charge_unit_type),
intent(in) :: requested_charge_unit
382 type(kim_temperature_unit_type),
intent(in) :: &
383 requested_temperature_unit
384 type(kim_time_unit_type),
intent(in) :: requested_time_unit
385 character(len=*, kind=c_char),
intent(in) :: model_name
386 integer(c_int),
intent(out) :: requested_units_accepted
387 type(kim_model_handle_type),
intent(out) :: model_handle
388 integer(c_int),
intent(out) :: ierr
390 type(c_ptr) :: pmodel
392 ierr = create(numbering, requested_length_unit, requested_energy_unit, &
393 requested_charge_unit, requested_temperature_unit, requested_time_unit, &
394 trim(model_name)//c_null_char, requested_units_accepted, pmodel)
395 model_handle%p = pmodel
406 recursive subroutine destroy(model) bind(c, name="KIM_Model_Destroy")
407 use,
intrinsic :: iso_c_binding
409 type(c_ptr),
intent(inout) :: model
410 end subroutine destroy
412 type(kim_model_handle_type),
intent(inout) :: model_handle
414 type(c_ptr) :: pmodel
415 pmodel = model_handle%p
417 model_handle%p = c_null_ptr
425 recursive subroutine kim_model_is_routine_present(model_handle, &
426 model_routine_name, present, required, ierr)
427 use kim_interoperable_types_module
, only : kim_model_type
431 integer(c_int) recursive function is_routine_present(model, &
432 model_routine_name, present, required) &
433 bind(c, name=
"KIM_Model_IsRoutinePresent")
434 use,
intrinsic :: iso_c_binding
435 use kim_interoperable_types_module
, only : kim_model_type
438 type(kim_model_type),
intent(in) :: model
439 type(kim_model_routine_name_type),
intent(in),
value &
440 :: model_routine_name
441 integer(c_int),
intent(out) :: present
442 integer(c_int),
intent(out) :: required
443 end function is_routine_present
445 type(kim_model_handle_type),
intent(in) :: model_handle
446 type(kim_model_routine_name_type),
intent(in) :: model_routine_name
447 integer(c_int),
intent(out) :: present
448 integer(c_int),
intent(out) :: required
449 integer(c_int),
intent(out) :: ierr
450 type(kim_model_type),
pointer :: model
452 call c_f_pointer(model_handle%p, model)
453 ierr = is_routine_present(model, model_routine_name,
present, required)
454 end subroutine kim_model_is_routine_present
463 use kim_interoperable_types_module
, only : kim_model_type
466 recursive subroutine get_influence_distance(model, influence_distance) &
467 bind(c, name=
"KIM_Model_GetInfluenceDistance")
468 use,
intrinsic :: iso_c_binding
469 use kim_interoperable_types_module
, only : kim_model_type
471 type(kim_model_type),
intent(in) :: model
472 real(c_double),
intent(out) :: influence_distance
473 end subroutine get_influence_distance
475 type(kim_model_handle_type),
intent(in) :: model_handle
476 real(c_double),
intent(out) :: influence_distance
477 type(kim_model_type),
pointer :: model
479 call c_f_pointer(model_handle%p, model)
480 call get_influence_distance(model, influence_distance)
489 number_of_neighbor_lists)
490 use kim_interoperable_types_module
, only : kim_model_type
493 recursive subroutine get_neighbor_list_pointers(model, &
494 number_of_neighbor_lists, cutoffs_ptr, &
495 model_will_not_request_neighbors_of_noncontributing__ptr) &
496 bind(c, name=
"KIM_Model_GetNeighborListPointers")
497 use,
intrinsic :: iso_c_binding
498 use kim_interoperable_types_module
, only : kim_model_type
500 type(kim_model_type),
intent(in) :: model
501 integer(c_int),
intent(out) :: number_of_neighbor_lists
502 type(c_ptr),
intent(out) :: cutoffs_ptr
503 type(c_ptr),
intent(out) :: &
504 model_will_not_request_neighbors_of_noncontributing__ptr
505 end subroutine get_neighbor_list_pointers
507 type(kim_model_handle_type),
intent(in) :: model_handle
508 integer(c_int),
intent(out) :: number_of_neighbor_lists
509 type(kim_model_type),
pointer :: model
511 type(c_ptr) cutoffs_ptr, hint_ptr
513 call c_f_pointer(model_handle%p, model)
514 call get_neighbor_list_pointers(model, number_of_neighbor_lists, &
515 cutoffs_ptr, hint_ptr)
524 cutoffs, model_will_not_request_neighbors_of_noncontributing_particles, &
526 use kim_interoperable_types_module
, only : kim_model_type
529 recursive subroutine get_neighbor_list_pointers(model, &
530 number_of_neighbor_lists, cutoffs_ptr, &
531 model_will_not_request_neighbors_of_noncontributing__ptr) &
532 bind(c, name=
"KIM_Model_GetNeighborListPointers")
533 use,
intrinsic :: iso_c_binding
534 use kim_interoperable_types_module
, only : kim_model_type
536 type(kim_model_type),
intent(in) :: model
537 integer(c_int),
intent(out) :: number_of_neighbor_lists
538 type(c_ptr),
intent(out) :: cutoffs_ptr
539 type(c_ptr),
intent(out) :: &
540 model_will_not_request_neighbors_of_noncontributing__ptr
541 end subroutine get_neighbor_list_pointers
543 type(kim_model_handle_type),
intent(in) :: model_handle
544 real(c_double),
intent(out) :: cutoffs(:)
545 integer(c_int),
intent(out) :: &
546 model_will_not_request_neighbors_of_noncontributing_particles(:)
547 integer(c_int),
intent(out) :: ierr
548 type(kim_model_type),
pointer :: model
550 integer(c_int) number_of_neighbor_lists
551 real(c_double),
pointer :: cutoffs_fpointer(:)
552 integer(c_int),
pointer :: &
553 model_will_not_request_neighbors_of_noncontributing__fpointer(:)
554 type(c_ptr) cutoffs_ptr
555 type(c_ptr) model_will_not_request_neighbors_of_noncontributing__ptr
557 call c_f_pointer(model_handle%p, model)
558 call get_neighbor_list_pointers(model, number_of_neighbor_lists, &
560 model_will_not_request_neighbors_of_noncontributing__ptr)
561 if (c_associated(cutoffs_ptr))
then 562 call c_f_pointer(cutoffs_ptr, cutoffs_fpointer, &
563 [number_of_neighbor_lists])
565 nullify(cutoffs_fpointer)
567 if (
size(cutoffs) < number_of_neighbor_lists)
then 571 cutoffs = cutoffs_fpointer(1:number_of_neighbor_lists)
575 model_will_not_request_neighbors_of_noncontributing__ptr))
then 577 model_will_not_request_neighbors_of_noncontributing__ptr, &
578 model_will_not_request_neighbors_of_noncontributing__fpointer, &
579 [number_of_neighbor_lists])
582 model_will_not_request_neighbors_of_noncontributing__fpointer)
585 model_will_not_request_neighbors_of_noncontributing_particles) &
586 < number_of_neighbor_lists)
then 590 model_will_not_request_neighbors_of_noncontributing_particles = &
591 model_will_not_request_neighbors_of_noncontributing__fpointer( &
592 1:number_of_neighbor_lists)
602 energy_unit, charge_unit, temperature_unit, time_unit)
604 kim_energy_unit_type, kim_charge_unit_type, kim_temperature_unit_type, &
606 use kim_interoperable_types_module
, only : kim_model_type
609 recursive subroutine get_units(model, length_unit, energy_unit, &
610 charge_unit, temperature_unit, time_unit) &
611 bind(c, name=
"KIM_Model_GetUnits")
612 use,
intrinsic :: iso_c_binding
614 kim_energy_unit_type, kim_charge_unit_type, &
615 kim_temperature_unit_type, kim_time_unit_type
616 use kim_interoperable_types_module
, only : kim_model_type
617 type(kim_model_type),
intent(in) :: model
618 type(kim_length_unit_type),
intent(out) :: length_unit
619 type(kim_energy_unit_type),
intent(out) :: energy_unit
620 type(kim_charge_unit_type),
intent(out) :: charge_unit
621 type(kim_temperature_unit_type),
intent(out) :: temperature_unit
622 type(kim_time_unit_type),
intent(out) :: time_unit
623 end subroutine get_units
625 type(kim_model_handle_type),
intent(in) :: model_handle
626 type(kim_length_unit_type),
intent(out) :: length_unit
627 type(kim_energy_unit_type),
intent(out) :: energy_unit
628 type(kim_charge_unit_type),
intent(out) :: charge_unit
629 type(kim_temperature_unit_type),
intent(out) :: temperature_unit
630 type(kim_time_unit_type),
intent(out) :: time_unit
631 type(kim_model_type),
pointer :: model
633 call c_f_pointer(model_handle%p, model)
634 call get_units(model, length_unit, energy_unit, charge_unit, &
635 temperature_unit, time_unit)
644 compute_arguments_handle, ierr)
646 kim_compute_arguments_handle_type
647 use kim_interoperable_types_module
, only : kim_model_type
651 compute_arguments) bind(c, name="KIM_Model_ComputeArgumentsCreate")
652 use,
intrinsic :: iso_c_binding
653 use kim_interoperable_types_module
, only : kim_model_type
655 type(kim_model_type),
intent(in) :: model
656 type(c_ptr),
intent(out) :: compute_arguments
659 type(kim_model_handle_type),
intent(in) :: model_handle
660 type(kim_compute_arguments_handle_type),
intent(out) :: &
661 compute_arguments_handle
662 integer(c_int),
intent(out) :: ierr
663 type(kim_model_type),
pointer :: model
664 type(c_ptr) :: pcompute_arguments
666 call c_f_pointer(model_handle%p, model)
670 compute_arguments_handle%p = pcompute_arguments
680 compute_arguments_handle, ierr)
682 kim_compute_arguments_handle_type
683 use kim_interoperable_types_module
, only : kim_model_type
687 compute_arguments) bind(c, name="KIM_Model_ComputeArgumentsDestroy")
688 use,
intrinsic :: iso_c_binding
689 use kim_interoperable_types_module
, only : kim_model_type
691 type(kim_model_type),
intent(in) :: model
692 type(c_ptr),
intent(inout) :: compute_arguments
695 type(kim_model_handle_type),
intent(in) :: model_handle
696 type(kim_compute_arguments_handle_type),
intent(inout) :: &
697 compute_arguments_handle
698 integer(c_int),
intent(out) :: ierr
699 type(kim_model_type),
pointer :: model
700 type(c_ptr) pcompute_arguments
702 call c_f_pointer(model_handle%p, model)
703 pcompute_arguments = compute_arguments_handle%p
706 compute_arguments_handle%p = c_null_ptr
716 compute_arguments_handle, ierr)
718 use kim_interoperable_types_module
, only : kim_compute_arguments_type, &
722 integer(c_int) recursive function compute(model, compute_arguments) &
723 bind(c, name=
"KIM_Model_Compute")
724 use,
intrinsic :: iso_c_binding
725 use kim_interoperable_types_module
, only : kim_compute_arguments_type
726 use kim_interoperable_types_module
, only : kim_model_type
728 type(kim_model_type),
intent(in) :: model
729 type(kim_compute_arguments_type),
intent(in) :: compute_arguments
732 type(kim_model_handle_type),
intent(in) :: model_handle
733 type(kim_compute_arguments_handle_type),
intent(in) :: &
734 compute_arguments_handle
735 integer(c_int),
intent(out) :: ierr
736 type(kim_model_type),
pointer :: model
737 type(kim_compute_arguments_type),
pointer :: compute_arguments
739 call c_f_pointer(model_handle%p, model)
740 call c_f_pointer(compute_arguments_handle%p, compute_arguments)
741 ierr = compute(model, compute_arguments)
750 extension_structure, ierr)
751 use kim_interoperable_types_module
, only : kim_model_type
754 integer(c_int) recursive function extension(model, extension_id, &
755 extension_structure) bind(c, name="KIM_Model_Extension")
756 use,
intrinsic :: iso_c_binding
757 use kim_interoperable_types_module
, only : kim_model_type
759 type(kim_model_type),
intent(in) :: model
760 character(c_char),
intent(in) :: extension_id(*)
761 type(c_ptr),
intent(in),
value :: extension_structure
762 end function extension
764 type(kim_model_handle_type),
intent(in) :: model_handle
765 character(len=*, kind=c_char),
intent(in) :: extension_id
766 type(c_ptr),
intent(in) :: extension_structure
767 integer(c_int),
intent(out) :: ierr
768 type(kim_model_type),
pointer :: model
770 call c_f_pointer(model_handle%p, model)
771 ierr = extension(model, trim(extension_id)//c_null_char, &
781 use kim_interoperable_types_module
, only : kim_model_type
784 integer(c_int) recursive function clear_then_refresh(model) &
785 bind(c, name=
"KIM_Model_ClearThenRefresh")
786 use,
intrinsic :: iso_c_binding
787 use kim_interoperable_types_module
, only : kim_model_type
789 type(kim_model_type),
intent(in) :: model
790 end function clear_then_refresh
792 type(kim_model_handle_type),
intent(in) :: model_handle
793 integer(c_int),
intent(out) :: ierr
794 type(kim_model_type),
pointer :: model
796 call c_f_pointer(model_handle%p, model)
797 ierr = clear_then_refresh(model)
806 path, model_name, ierr)
807 use kim_interoperable_types_module
, only : kim_model_type
811 path, model_name) bind(c, name="KIM_Model_WriteParameterizedModel")
812 use,
intrinsic :: iso_c_binding
813 use kim_interoperable_types_module
, only : kim_model_type
815 type(kim_model_type),
intent(in) :: model
816 character(c_char),
intent(in) :: path(*)
817 character(c_char),
intent(in) :: model_name(*)
820 type(kim_model_handle_type),
intent(in) :: model_handle
821 character(len=*, kind=c_char),
intent(in) :: path
822 character(len=*, kind=c_char),
intent(in) :: model_name
823 integer(c_int),
intent(out) :: ierr
824 type(kim_model_type),
pointer :: model
826 call c_f_pointer(model_handle%p, model)
828 trim(model_name)//c_null_char)
838 species_name, species_is_supported, code, ierr)
840 use kim_interoperable_types_module
, only : kim_model_type
843 integer(c_int) recursive function get_species_support_and_code(model, &
844 species_name, species_is_supported, code) &
845 bind(c, name=
"KIM_Model_GetSpeciesSupportAndCode")
846 use,
intrinsic :: iso_c_binding
848 use kim_interoperable_types_module
, only : kim_model_type
850 type(kim_model_type),
intent(in) :: model
851 type(kim_species_name_type),
intent(in),
value :: species_name
852 integer(c_int),
intent(out) :: species_is_supported
853 integer(c_int),
intent(out) :: code
854 end function get_species_support_and_code
856 type(kim_model_handle_type),
intent(in) :: model_handle
857 type(kim_species_name_type),
intent(in) :: species_name
858 integer(c_int),
intent(out) :: species_is_supported
859 integer(c_int),
intent(out) :: code
860 integer(c_int),
intent(out) :: ierr
861 type(kim_model_type),
pointer :: model
863 call c_f_pointer(model_handle%p, model)
864 ierr = get_species_support_and_code(model, species_name, &
865 species_is_supported, code)
874 number_of_parameters)
875 use kim_interoperable_types_module
, only : kim_model_type
878 recursive subroutine get_number_of_parameters(model, &
879 number_of_parameters) bind(c, name="KIM_Model_GetNumberOfParameters")
880 use,
intrinsic :: iso_c_binding
881 use kim_interoperable_types_module
, only : kim_model_type
883 type(kim_model_type),
intent(in) :: model
884 integer(c_int),
intent(out) :: number_of_parameters
885 end subroutine get_number_of_parameters
887 type(kim_model_handle_type),
intent(in) :: model_handle
888 integer(c_int),
intent(out) :: number_of_parameters
889 type(kim_model_type),
pointer :: model
891 call c_f_pointer(model_handle%p, model)
892 call get_number_of_parameters(model, number_of_parameters)
901 parameter_index, data_type, extent, name, description, ierr)
903 use kim_convert_string_module
, only : kim_convert_c_char_ptr_to_string
904 use kim_interoperable_types_module
, only : kim_model_type
907 integer(c_int) recursive function get_parameter_metadata(model, &
908 parameter_index, data_type, extent, name, description) &
909 bind(c, name=
"KIM_Model_GetParameterMetadata")
910 use,
intrinsic :: iso_c_binding
912 use kim_interoperable_types_module
, only : kim_model_type
914 type(kim_model_type),
intent(in) :: model
915 integer(c_int),
intent(in),
value :: parameter_index
916 type(kim_data_type_type),
intent(out) :: data_type
917 integer(c_int),
intent(out) :: extent
918 type(c_ptr),
intent(out) :: name
919 type(c_ptr),
intent(out) :: description
920 end function get_parameter_metadata
922 type(kim_model_handle_type),
intent(in) :: model_handle
923 integer(c_int),
intent(in) :: parameter_index
924 type(kim_data_type_type),
intent(out) :: data_type
925 integer(c_int),
intent(out) :: extent
926 character(len=*, kind=c_char),
intent(out) :: name
927 character(len=*, kind=c_char),
intent(out) :: description
928 integer(c_int),
intent(out) :: ierr
929 type(kim_model_type),
pointer :: model
931 type(c_ptr) :: pname, pdesc
933 call c_f_pointer(model_handle%p, model)
934 ierr = get_parameter_metadata(model, parameter_index-1, data_type, extent, &
936 call kim_convert_c_char_ptr_to_string(pname, name)
937 call kim_convert_c_char_ptr_to_string(pdesc, description)
946 parameter_index, array_index, parameter_value, ierr)
947 use kim_interoperable_types_module
, only : kim_model_type
950 integer(c_int) recursive function get_parameter_integer(model, &
951 parameter_index, array_index, parameter_value) &
952 bind(c, name=
"KIM_Model_GetParameterInteger")
953 use,
intrinsic :: iso_c_binding
954 use kim_interoperable_types_module
, only : kim_model_type
956 type(kim_model_type),
intent(in) :: model
957 integer(c_int),
intent(in),
value :: parameter_index
958 integer(c_int),
intent(in),
value :: array_index
959 integer(c_int),
intent(out) :: parameter_value
960 end function get_parameter_integer
962 type(kim_model_handle_type),
intent(in) :: model_handle
963 integer(c_int),
intent(in) :: parameter_index
964 integer(c_int),
intent(in) :: array_index
965 integer(c_int),
intent(out) :: parameter_value
966 integer(c_int),
intent(out) :: ierr
967 type(kim_model_type),
pointer :: model
969 call c_f_pointer(model_handle%p, model)
970 ierr = get_parameter_integer(model, parameter_index-1, array_index-1, &
980 parameter_index, array_index, parameter_value, ierr)
981 use kim_interoperable_types_module
, only : kim_model_type
984 integer(c_int) recursive function get_parameter_double(model, &
985 parameter_index, array_index, parameter_value) &
986 bind(c, name=
"KIM_Model_GetParameterDouble")
987 use,
intrinsic :: iso_c_binding
988 use kim_interoperable_types_module
, only : kim_model_type
990 type(kim_model_type),
intent(in) :: model
991 integer(c_int),
intent(in),
value :: parameter_index
992 integer(c_int),
intent(in),
value :: array_index
993 real(c_double),
intent(out) :: parameter_value
994 end function get_parameter_double
996 type(kim_model_handle_type),
intent(in) :: model_handle
997 integer(c_int),
intent(in) :: parameter_index
998 integer(c_int),
intent(in) :: array_index
999 real(c_double),
intent(out) :: parameter_value
1000 integer(c_int),
intent(out) :: ierr
1001 type(kim_model_type),
pointer :: model
1003 call c_f_pointer(model_handle%p, model)
1004 ierr = get_parameter_double(model, parameter_index-1, array_index-1, &
1014 parameter_index, array_index, parameter_value, ierr)
1015 use kim_interoperable_types_module
, only : kim_model_type
1018 integer(c_int) recursive function set_parameter_integer(model, &
1019 parameter_index, array_index, parameter_value) &
1020 bind(c, name=
"KIM_Model_SetParameterInteger")
1021 use,
intrinsic :: iso_c_binding
1022 use kim_interoperable_types_module
, only : kim_model_type
1024 type(kim_model_type),
intent(in) :: model
1025 integer(c_int),
intent(in),
value :: parameter_index
1026 integer(c_int),
intent(in),
value :: array_index
1027 integer(c_int),
intent(in),
value :: parameter_value
1028 end function set_parameter_integer
1030 type(kim_model_handle_type),
intent(in) :: model_handle
1031 integer(c_int),
intent(in) :: parameter_index
1032 integer(c_int),
intent(in) :: array_index
1033 integer(c_int),
intent(in) :: parameter_value
1034 integer(c_int),
intent(out) :: ierr
1035 type(kim_model_type),
pointer :: model
1037 call c_f_pointer(model_handle%p, model)
1038 ierr = set_parameter_integer(model, parameter_index-1, array_index-1, &
1048 parameter_index, array_index, parameter_value, ierr)
1049 use kim_interoperable_types_module
, only : kim_model_type
1052 integer(c_int) recursive function set_parameter_double(model, &
1053 parameter_index, array_index, parameter_value) &
1054 bind(c, name=
"KIM_Model_SetParameterDouble")
1055 use,
intrinsic :: iso_c_binding
1056 use kim_interoperable_types_module
, only : kim_model_type
1058 type(kim_model_type),
intent(in) :: model
1059 integer(c_int),
intent(in),
value :: parameter_index
1060 integer(c_int),
intent(in),
value :: array_index
1061 real(c_double),
intent(in),
value :: parameter_value
1062 end function set_parameter_double
1064 type(kim_model_handle_type),
intent(in) :: model_handle
1065 integer(c_int),
intent(in) :: parameter_index
1066 integer(c_int),
intent(in) :: array_index
1067 real(c_double),
intent(in) :: parameter_value
1068 integer(c_int),
intent(out) :: ierr
1069 type(kim_model_type),
pointer :: model
1071 call c_f_pointer(model_handle%p, model)
1072 ierr = set_parameter_double(model, parameter_index-1, array_index-1, &
1083 use kim_interoperable_types_module
, only : kim_model_type
1086 recursive subroutine set_simulator_buffer_pointer(model, ptr) &
1087 bind(c, name=
"KIM_Model_SetSimulatorBufferPointer")
1088 use,
intrinsic :: iso_c_binding
1089 use kim_interoperable_types_module
, only : kim_model_type
1091 type(kim_model_type),
intent(in) :: model
1092 type(c_ptr),
intent(in),
value :: ptr
1093 end subroutine set_simulator_buffer_pointer
1095 type(kim_model_handle_type),
intent(in) :: model_handle
1096 type(c_ptr),
intent(in) :: ptr
1097 type(kim_model_type),
pointer :: model
1099 call c_f_pointer(model_handle%p, model)
1100 call set_simulator_buffer_pointer(model, ptr)
1110 use kim_interoperable_types_module
, only : kim_model_type
1113 recursive subroutine get_simulator_buffer_pointer(model, ptr) &
1114 bind(c, name=
"KIM_Model_GetSimulatorBufferPointer")
1115 use,
intrinsic :: iso_c_binding
1116 use kim_interoperable_types_module
, only : kim_model_type
1118 type(kim_model_type),
intent(in) :: model
1119 type(c_ptr),
intent(out) :: ptr
1120 end subroutine get_simulator_buffer_pointer
1122 type(kim_model_handle_type),
intent(in) :: model_handle
1123 type(c_ptr),
intent(out) :: ptr
1124 type(kim_model_type),
pointer :: model
1126 call c_f_pointer(model_handle%p, model)
1127 call get_simulator_buffer_pointer(model, ptr)
1136 use kim_convert_string_module
, only : kim_convert_c_char_ptr_to_string
1137 use kim_interoperable_types_module
, only : kim_model_type
1140 type(c_ptr)
recursive function model_string(model) &
1141 bind(c, name=
"KIM_Model_ToString")
1142 use,
intrinsic :: iso_c_binding
1143 use kim_interoperable_types_module
, only : kim_model_type
1145 type(kim_model_type),
intent(in) :: model
1146 end function model_string
1148 type(kim_model_handle_type),
intent(in) :: model_handle
1149 character(len=*, kind=c_char),
intent(out) :: string
1150 type(kim_model_type),
pointer :: model
1154 call c_f_pointer(model_handle%p, model)
1155 p = model_string(model)
1156 call kim_convert_c_char_ptr_to_string(p, string)
1165 use kim_interoperable_types_module
, only : kim_model_type
1168 recursive subroutine set_log_id(model, log_id) &
1169 bind(c, name=
"KIM_Model_SetLogID")
1170 use,
intrinsic :: iso_c_binding
1171 use kim_interoperable_types_module
, only : kim_model_type
1173 type(kim_model_type),
intent(in) :: model
1174 character(c_char),
intent(in) :: log_id(*)
1175 end subroutine set_log_id
1177 type(kim_model_handle_type),
intent(in) :: model_handle
1178 character(len=*, kind=c_char),
intent(in) :: log_id
1179 type(kim_model_type),
pointer :: model
1181 call c_f_pointer(model_handle%p, model)
1182 call set_log_id(model, trim(log_id)//c_null_char)
1192 use kim_interoperable_types_module
, only : kim_model_type
1195 recursive subroutine push_log_verbosity(model, log_verbosity) &
1196 bind(c, name=
"KIM_Model_PushLogVerbosity")
1197 use,
intrinsic :: iso_c_binding
1199 use kim_interoperable_types_module
, only : kim_model_type
1201 type(kim_model_type),
intent(in) :: model
1202 type(kim_log_verbosity_type),
intent(in),
value :: log_verbosity
1203 end subroutine push_log_verbosity
1205 type(kim_model_handle_type),
intent(in) :: model_handle
1206 type(kim_log_verbosity_type),
intent(in) :: log_verbosity
1207 type(kim_model_type),
pointer :: model
1209 call c_f_pointer(model_handle%p, model)
1210 call push_log_verbosity(model, log_verbosity)
1220 use kim_interoperable_types_module
, only : kim_model_type
1223 recursive subroutine pop_log_verbosity(model) &
1224 bind(c, name=
"KIM_Model_PopLogVerbosity")
1225 use,
intrinsic :: iso_c_binding
1227 use kim_interoperable_types_module
, only : kim_model_type
1229 type(kim_model_type),
intent(in) :: model
1230 end subroutine pop_log_verbosity
1232 type(kim_model_handle_type),
intent(in) :: model_handle
1233 type(kim_model_type),
pointer :: model
1235 call c_f_pointer(model_handle%p, model)
1236 call pop_log_verbosity(model)
recursive subroutine, public kim_model_destroy(model_handle)
Destroy a previously Model::Create'd object.
recursive subroutine kim_model_get_influence_distance(model_handle, influence_distance)
Get the Model's influence distance.
recursive subroutine kim_model_to_string(model_handle, string)
Get a string representing the internal state of the Model object.
recursive subroutine kim_model_get_parameter_double(model_handle, parameter_index, array_index, parameter_value, ierr)
Get a parameter value from the Model.
recursive subroutine kim_model_compute_arguments_create(model_handle, compute_arguments_handle, ierr)
Create a new ComputeArguments object for the Model object.
recursive subroutine kim_model_clear_then_refresh(model_handle, ierr)
Clear influence distance and neighbor list pointers and refresh Model object after parameter changes...
recursive subroutine kim_model_compute(model_handle, compute_arguments_handle, ierr)
Call the Model's MODEL_ROUTINE_NAME::Compute routine.
An Extensible Enumeration for the ModelRoutineName's supported by the KIM API.
recursive subroutine kim_model_get_neighbor_list_values(model_handle, cutoffs, model_will_not_request_neighbors_of_noncontributing_particles, ierr)
Get Model's neighbor list values.
recursive subroutine kim_model_set_log_id(model_handle, log_id)
Set the identity of the Log object associated with the Model object.
recursive subroutine kim_model_push_log_verbosity(model_handle, log_verbosity)
Push a new LogVerbosity onto the Model object's Log object verbosity stack.
recursive subroutine kim_model_write_parameterized_model(model_handle, path, model_name, ierr)
Call the Model's MODEL_ROUTINE_NAME::WriteParameterizedModel routine.
An Extensible Enumeration for the Numbering's supported by the KIM API.
recursive subroutine kim_model_set_parameter_double(model_handle, parameter_index, array_index, parameter_value, ierr)
Set a parameter value for the Model.
type(kim_model_handle_type), save, public, protected kim_model_null_handle
NULL handle for use in comparisons.
recursive subroutine kim_model_get_number_of_parameters(model_handle, number_of_parameters)
Get the number of parameter arrays provided by the Model.
static int compute_arguments_create(KIM_ModelCompute const *const modelCompute, KIM_ModelComputeArgumentsCreate *const modelComputeArgumentsCreate)
recursive subroutine kim_model_get_parameter_metadata(model_handle, parameter_index, data_type, extent, name, description, ierr)
Get the metadata associated with one of the Model's parameter arrays.
recursive subroutine kim_model_get_number_of_neighbor_lists(model_handle, number_of_neighbor_lists)
Get Model's number of neighbor lists.
recursive subroutine kim_model_get_parameter_integer(model_handle, parameter_index, array_index, parameter_value, ierr)
Get a parameter value from the Model.
Provides the primary interface to a KIM API Model object and is meant to be used by simulators...
An Extensible Enumeration for the SpeciesName's supported by the KIM API.
recursive subroutine kim_model_get_simulator_buffer_pointer(model_handle, ptr)
Get the Simulator's buffer pointer from the Model object.
Provides the primary interface to a KIM API ComputeArguments object and is meant to be used by simula...
recursive subroutine kim_model_set_parameter_integer(model_handle, parameter_index, array_index, parameter_value, ierr)
Set a parameter value for the Model.
recursive subroutine kim_model_set_simulator_buffer_pointer(model_handle, ptr)
Set the Simulator's buffer pointer within the Model object.
recursive subroutine kim_model_get_species_support_and_code(model_handle, species_name, species_is_supported, code, ierr)
Get the Model's support and code for the requested SpeciesName.
recursive subroutine, public kim_model_create(numbering, requested_length_unit, requested_energy_unit, requested_charge_unit, requested_temperature_unit, requested_time_unit, model_name, requested_units_accepted, model_handle, ierr)
Create a new KIM API Model object.
recursive subroutine kim_model_extension(model_handle, extension_id, extension_structure, ierr)
Call the Model's MODEL_ROUTINE_NAME::Extension routine.
An Extensible Enumeration for the DataType's supported by the KIM API.
recursive subroutine kim_model_pop_log_verbosity(model_handle)
Pop a LogVerbosity from the Model object's Log object verbosity stack.
static int write_parameterized_model(KIM_ModelWriteParameterizedModel const *const modelWriteParameterizedModel)
static int compute_arguments_destroy(KIM_ModelCompute const *const modelCompute, KIM_ModelComputeArgumentsDestroy *const modelComputeArgumentsDestroy)
An Extensible Enumeration for the LogVerbosity's supported by the KIM API.
recursive subroutine kim_model_get_units(model_handle, length_unit, energy_unit, charge_unit, temperature_unit, time_unit)
Get the Model's base unit values.
recursive subroutine kim_model_compute_arguments_destroy(model_handle, compute_arguments_handle, ierr)
Destroy a previously Model::ComputeArgumentsCreate'd object.