39 use,
intrinsic :: iso_c_binding
45 kim_model_handle_type, &
53 kim_is_routine_present, &
54 kim_get_influence_distance, &
55 kim_get_number_of_neighbor_lists, &
56 kim_get_neighbor_list_values, &
58 kim_compute_arguments_create, &
59 kim_compute_arguments_destroy, &
62 kim_clear_then_refresh, &
63 kim_write_parameterized_model, &
64 kim_get_species_support_and_code, &
65 kim_get_number_of_parameters, &
66 kim_get_parameter_metadata, &
69 kim_set_simulator_buffer_pointer, &
70 kim_get_simulator_buffer_pointer, &
73 kim_push_log_verbosity, &
81 type, bind(c) :: kim_model_handle_type
82 type(c_ptr) :: p = c_null_ptr
83 end type kim_model_handle_type
88 type(kim_model_handle_type),
protected,
save &
94 interface operator(.eq.)
95 module procedure kim_model_handle_equal
96 end interface operator(.eq.)
101 interface operator(.ne.)
102 module procedure kim_model_handle_not_equal
103 end interface operator(.ne.)
110 interface kim_is_routine_present
111 module procedure kim_model_is_routine_present
112 end interface kim_is_routine_present
119 interface kim_get_influence_distance
121 end interface kim_get_influence_distance
128 interface kim_get_number_of_neighbor_lists
130 end interface kim_get_number_of_neighbor_lists
137 interface kim_get_neighbor_list_values
139 end interface kim_get_neighbor_list_values
146 interface kim_get_units
148 end interface kim_get_units
155 interface kim_compute_arguments_create
157 end interface kim_compute_arguments_create
164 interface kim_compute_arguments_destroy
166 end interface kim_compute_arguments_destroy
173 interface kim_compute
175 end interface kim_compute
182 interface kim_extension
184 end interface kim_extension
191 interface kim_clear_then_refresh
193 end interface kim_clear_then_refresh
200 interface kim_write_parameterized_model
202 end interface kim_write_parameterized_model
210 interface kim_get_species_support_and_code
212 end interface kim_get_species_support_and_code
219 interface kim_get_number_of_parameters
221 end interface kim_get_number_of_parameters
228 interface kim_get_parameter_metadata
230 end interface kim_get_parameter_metadata
238 interface kim_get_parameter
241 end interface kim_get_parameter
249 interface kim_set_parameter
252 end interface kim_set_parameter
260 interface kim_set_simulator_buffer_pointer
262 end interface kim_set_simulator_buffer_pointer
270 interface kim_get_simulator_buffer_pointer
272 end interface kim_get_simulator_buffer_pointer
279 interface kim_to_string
281 end interface kim_to_string
288 interface kim_set_log_id
290 end interface kim_set_log_id
297 interface kim_push_log_verbosity
299 end interface kim_push_log_verbosity
306 interface kim_pop_log_verbosity
308 end interface kim_pop_log_verbosity
314 logical recursive function kim_model_handle_equal(lhs, rhs)
316 type(kim_model_handle_type),
intent(in) :: lhs
317 type(kim_model_handle_type),
intent(in) :: rhs
319 if ((.not. c_associated(lhs%p)) .and. (.not. c_associated(rhs%p)))
then 320 kim_model_handle_equal = .true.
322 kim_model_handle_equal = c_associated(lhs%p, rhs%p)
324 end function kim_model_handle_equal
329 logical recursive function kim_model_handle_not_equal(lhs, rhs)
331 type(kim_model_handle_type),
intent(in) :: lhs
332 type(kim_model_handle_type),
intent(in) :: rhs
334 kim_model_handle_not_equal = .not. (lhs == rhs)
335 end function kim_model_handle_not_equal
395 numbering, requested_length_unit, requested_energy_unit, &
396 requested_charge_unit, requested_temperature_unit, requested_time_unit, &
397 model_name, requested_units_accepted, model_handle, ierr)
400 kim_energy_unit_type, &
401 kim_charge_unit_type, &
402 kim_temperature_unit_type, &
406 integer(c_int) recursive function create( &
407 numbering, requested_length_unit, requested_energy_unit, &
408 requested_charge_unit, requested_temperature_unit, &
409 requested_time_unit, model_name, requested_units_accepted, model) &
410 bind(c, name=
"KIM_Model_Create")
411 use,
intrinsic :: iso_c_binding
414 kim_energy_unit_type, &
415 kim_charge_unit_type, &
416 kim_temperature_unit_type, &
419 type(kim_numbering_type),
intent(in),
value :: numbering
420 type(kim_length_unit_type),
intent(in),
value :: requested_length_unit
421 type(kim_energy_unit_type),
intent(in),
value :: requested_energy_unit
422 type(kim_charge_unit_type),
intent(in),
value :: requested_charge_unit
423 type(kim_temperature_unit_type),
intent(in),
value :: &
424 requested_temperature_unit
425 type(kim_time_unit_type),
intent(in),
value :: requested_time_unit
426 character(c_char),
intent(in) :: model_name(*)
427 integer(c_int),
intent(out) :: requested_units_accepted
428 type(c_ptr),
intent(out) :: model
431 type(kim_numbering_type),
intent(in) :: numbering
432 type(kim_length_unit_type),
intent(in) :: requested_length_unit
433 type(kim_energy_unit_type),
intent(in) :: requested_energy_unit
434 type(kim_charge_unit_type),
intent(in) :: requested_charge_unit
435 type(kim_temperature_unit_type),
intent(in) :: &
436 requested_temperature_unit
437 type(kim_time_unit_type),
intent(in) :: requested_time_unit
438 character(len=*, kind=c_char),
intent(in) :: model_name
439 integer(c_int),
intent(out) :: requested_units_accepted
440 type(kim_model_handle_type),
intent(out) :: model_handle
441 integer(c_int),
intent(out) :: ierr
443 type(c_ptr) :: pmodel
445 ierr = create(numbering, requested_length_unit, requested_energy_unit, &
446 requested_charge_unit, requested_temperature_unit, &
447 requested_time_unit, trim(model_name)//c_null_char, &
448 requested_units_accepted, pmodel)
449 model_handle%p = pmodel
476 recursive subroutine destroy(model) bind(c, name="KIM_Model_Destroy")
477 use,
intrinsic :: iso_c_binding
479 type(c_ptr),
intent(inout) :: model
480 end subroutine destroy
482 type(kim_model_handle_type),
intent(inout) :: model_handle
484 type(c_ptr) :: pmodel
485 pmodel = model_handle%p
487 model_handle%p = c_null_ptr
495 recursive subroutine kim_model_is_routine_present( &
496 model_handle, model_routine_name, present, required, ierr)
497 use kim_interoperable_types_module
, only: kim_model_type
501 integer(c_int) recursive function is_routine_present( &
502 model, model_routine_name, present, required) &
503 bind(c, name=
"KIM_Model_IsRoutinePresent")
504 use,
intrinsic :: iso_c_binding
505 use kim_interoperable_types_module
, only: kim_model_type
508 type(kim_model_type),
intent(in) :: model
509 type(kim_model_routine_name_type),
intent(in),
value &
510 :: model_routine_name
511 integer(c_int),
intent(out) :: present
512 integer(c_int),
intent(out) :: required
513 end function is_routine_present
515 type(kim_model_handle_type),
intent(in) :: model_handle
516 type(kim_model_routine_name_type),
intent(in) :: model_routine_name
517 integer(c_int),
intent(out) :: present
518 integer(c_int),
intent(out) :: required
519 integer(c_int),
intent(out) :: ierr
520 type(kim_model_type),
pointer :: model
522 call c_f_pointer(model_handle%p, model)
523 ierr = is_routine_present(model, model_routine_name,
present, required)
524 end subroutine kim_model_is_routine_present
532 model_handle, influence_distance)
533 use kim_interoperable_types_module
, only: kim_model_type
536 recursive subroutine get_influence_distance(model, influence_distance) &
537 bind(c, name=
"KIM_Model_GetInfluenceDistance")
538 use,
intrinsic :: iso_c_binding
539 use kim_interoperable_types_module
, only: kim_model_type
541 type(kim_model_type),
intent(in) :: model
542 real(c_double),
intent(out) :: influence_distance
543 end subroutine get_influence_distance
545 type(kim_model_handle_type),
intent(in) :: model_handle
546 real(c_double),
intent(out) :: influence_distance
547 type(kim_model_type),
pointer :: model
549 call c_f_pointer(model_handle%p, model)
550 call get_influence_distance(model, influence_distance)
559 model_handle, number_of_neighbor_lists)
560 use kim_interoperable_types_module
, only: kim_model_type
563 recursive subroutine get_neighbor_list_pointers( &
564 model, number_of_neighbor_lists, cutoffs_ptr, &
565 model_will_not_request_neighbors_of_noncontributing__ptr) &
566 bind(c, name=
"KIM_Model_GetNeighborListPointers")
567 use,
intrinsic :: iso_c_binding
568 use kim_interoperable_types_module
, only: kim_model_type
570 type(kim_model_type),
intent(in) :: model
571 integer(c_int),
intent(out) :: number_of_neighbor_lists
572 type(c_ptr),
intent(out) :: cutoffs_ptr
573 type(c_ptr),
intent(out) :: &
574 model_will_not_request_neighbors_of_noncontributing__ptr
575 end subroutine get_neighbor_list_pointers
577 type(kim_model_handle_type),
intent(in) :: model_handle
578 integer(c_int),
intent(out) :: number_of_neighbor_lists
579 type(kim_model_type),
pointer :: model
581 type(c_ptr) cutoffs_ptr, hint_ptr
583 call c_f_pointer(model_handle%p, model)
584 call get_neighbor_list_pointers(model, number_of_neighbor_lists, &
585 cutoffs_ptr, hint_ptr)
594 model_handle, cutoffs, &
595 model_will_not_request_neighbors_of_noncontributing_particles, ierr)
596 use kim_interoperable_types_module
, only: kim_model_type
599 recursive subroutine get_neighbor_list_pointers( &
600 model, number_of_neighbor_lists, cutoffs_ptr, &
601 model_will_not_request_neighbors_of_noncontributing__ptr) &
602 bind(c, name=
"KIM_Model_GetNeighborListPointers")
603 use,
intrinsic :: iso_c_binding
604 use kim_interoperable_types_module
, only: kim_model_type
606 type(kim_model_type),
intent(in) :: model
607 integer(c_int),
intent(out) :: number_of_neighbor_lists
608 type(c_ptr),
intent(out) :: cutoffs_ptr
609 type(c_ptr),
intent(out) :: &
610 model_will_not_request_neighbors_of_noncontributing__ptr
611 end subroutine get_neighbor_list_pointers
613 type(kim_model_handle_type),
intent(in) :: model_handle
614 real(c_double),
intent(out) :: cutoffs(:)
615 integer(c_int),
intent(out) :: &
616 model_will_not_request_neighbors_of_noncontributing_particles(:)
617 integer(c_int),
intent(out) :: ierr
618 type(kim_model_type),
pointer :: model
620 integer(c_int) number_of_neighbor_lists
621 real(c_double),
pointer :: cutoffs_fpointer(:)
622 integer(c_int),
pointer :: &
623 model_will_not_request_neighbors_of_noncontributing__fpointer(:)
624 type(c_ptr) cutoffs_ptr
625 type(c_ptr) model_will_not_request_neighbors_of_noncontributing__ptr
627 call c_f_pointer(model_handle%p, model)
628 call get_neighbor_list_pointers( &
629 model, number_of_neighbor_lists, cutoffs_ptr, &
630 model_will_not_request_neighbors_of_noncontributing__ptr)
631 if (c_associated(cutoffs_ptr))
then 632 call c_f_pointer(cutoffs_ptr, cutoffs_fpointer, &
633 [number_of_neighbor_lists])
635 nullify (cutoffs_fpointer)
637 if (
size(cutoffs) < number_of_neighbor_lists)
then 641 cutoffs = cutoffs_fpointer(1:number_of_neighbor_lists)
645 model_will_not_request_neighbors_of_noncontributing__ptr))
then 647 model_will_not_request_neighbors_of_noncontributing__ptr, &
648 model_will_not_request_neighbors_of_noncontributing__fpointer, &
649 [number_of_neighbor_lists])
652 model_will_not_request_neighbors_of_noncontributing__fpointer)
655 model_will_not_request_neighbors_of_noncontributing_particles) &
656 < number_of_neighbor_lists)
then 660 model_will_not_request_neighbors_of_noncontributing_particles = &
661 model_will_not_request_neighbors_of_noncontributing__fpointer( &
662 1:number_of_neighbor_lists)
672 model_handle, length_unit, energy_unit, charge_unit, temperature_unit, &
675 kim_energy_unit_type, &
676 kim_charge_unit_type, &
677 kim_temperature_unit_type, &
679 use kim_interoperable_types_module
, only: kim_model_type
682 recursive subroutine get_units( &
683 model, length_unit, energy_unit, charge_unit, temperature_unit, &
685 bind(c, name=
"KIM_Model_GetUnits")
686 use,
intrinsic :: iso_c_binding
688 kim_energy_unit_type, &
689 kim_charge_unit_type, &
690 kim_temperature_unit_type, &
692 use kim_interoperable_types_module
, only: kim_model_type
693 type(kim_model_type),
intent(in) :: model
694 type(kim_length_unit_type),
intent(out) :: length_unit
695 type(kim_energy_unit_type),
intent(out) :: energy_unit
696 type(kim_charge_unit_type),
intent(out) :: charge_unit
697 type(kim_temperature_unit_type),
intent(out) :: temperature_unit
698 type(kim_time_unit_type),
intent(out) :: time_unit
699 end subroutine get_units
701 type(kim_model_handle_type),
intent(in) :: model_handle
702 type(kim_length_unit_type),
intent(out) :: length_unit
703 type(kim_energy_unit_type),
intent(out) :: energy_unit
704 type(kim_charge_unit_type),
intent(out) :: charge_unit
705 type(kim_temperature_unit_type),
intent(out) :: temperature_unit
706 type(kim_time_unit_type),
intent(out) :: time_unit
707 type(kim_model_type),
pointer :: model
709 call c_f_pointer(model_handle%p, model)
710 call get_units(model, length_unit, energy_unit, charge_unit, &
711 temperature_unit, time_unit)
741 model_handle, compute_arguments_handle, ierr)
743 kim_compute_arguments_handle_type
744 use kim_interoperable_types_module
, only: kim_model_type
748 model, compute_arguments) &
749 bind(c, name=
"KIM_Model_ComputeArgumentsCreate")
750 use,
intrinsic :: iso_c_binding
751 use kim_interoperable_types_module
, only: kim_model_type
753 type(kim_model_type),
intent(in) :: model
754 type(c_ptr),
intent(out) :: compute_arguments
757 type(kim_model_handle_type),
intent(in) :: model_handle
758 type(kim_compute_arguments_handle_type),
intent(out) :: &
759 compute_arguments_handle
760 integer(c_int),
intent(out) :: ierr
761 type(kim_model_type),
pointer :: model
762 type(c_ptr) :: pcompute_arguments
764 call c_f_pointer(model_handle%p, model)
768 compute_arguments_handle%p = pcompute_arguments
800 model_handle, compute_arguments_handle, ierr)
802 use kim_interoperable_types_module
, only: kim_model_type
806 model, compute_arguments) &
807 bind(c, name=
"KIM_Model_ComputeArgumentsDestroy")
808 use,
intrinsic :: iso_c_binding
809 use kim_interoperable_types_module
, only: kim_model_type
811 type(kim_model_type),
intent(in) :: model
812 type(c_ptr),
intent(inout) :: compute_arguments
815 type(kim_model_handle_type),
intent(in) :: model_handle
816 type(kim_compute_arguments_handle_type),
intent(inout) :: &
817 compute_arguments_handle
818 integer(c_int),
intent(out) :: ierr
819 type(kim_model_type),
pointer :: model
820 type(c_ptr) pcompute_arguments
822 call c_f_pointer(model_handle%p, model)
823 pcompute_arguments = compute_arguments_handle%p
826 compute_arguments_handle%p = c_null_ptr
856 model_handle, compute_arguments_handle, ierr)
858 use kim_interoperable_types_module
, only: kim_compute_arguments_type, &
862 integer(c_int) recursive function compute(model, compute_arguments) &
863 bind(c, name=
"KIM_Model_Compute")
864 use,
intrinsic :: iso_c_binding
865 use kim_interoperable_types_module
, only: kim_compute_arguments_type
866 use kim_interoperable_types_module
, only: kim_model_type
868 type(kim_model_type),
intent(in) :: model
869 type(kim_compute_arguments_type),
intent(in) :: compute_arguments
872 type(kim_model_handle_type),
intent(in) :: model_handle
873 type(kim_compute_arguments_handle_type),
intent(in) :: &
874 compute_arguments_handle
875 integer(c_int),
intent(out) :: ierr
876 type(kim_model_type),
pointer :: model
877 type(kim_compute_arguments_type),
pointer :: compute_arguments
879 call c_f_pointer(model_handle%p, model)
880 call c_f_pointer(compute_arguments_handle%p, compute_arguments)
881 ierr = compute(model, compute_arguments)
910 model_handle, extension_id, extension_structure, ierr)
911 use kim_interoperable_types_module
, only: kim_model_type
914 integer(c_int) recursive function extension( &
915 model, extension_id, extension_structure) &
916 bind(c, name=
"KIM_Model_Extension")
917 use,
intrinsic :: iso_c_binding
918 use kim_interoperable_types_module
, only: kim_model_type
920 type(kim_model_type),
intent(in) :: model
921 character(c_char),
intent(in) :: extension_id(*)
922 type(c_ptr),
intent(in),
value :: extension_structure
923 end function extension
925 type(kim_model_handle_type),
intent(in) :: model_handle
926 character(len=*, kind=c_char),
intent(in) :: extension_id
927 type(c_ptr),
intent(in) :: extension_structure
928 integer(c_int),
intent(out) :: ierr
929 type(kim_model_type),
pointer :: model
931 call c_f_pointer(model_handle%p, model)
932 ierr = extension(model, trim(extension_id)//c_null_char, &
958 use kim_interoperable_types_module
, only: kim_model_type
961 integer(c_int) recursive function clear_then_refresh(model) &
962 bind(c, name=
"KIM_Model_ClearThenRefresh")
963 use,
intrinsic :: iso_c_binding
964 use kim_interoperable_types_module
, only: kim_model_type
966 type(kim_model_type),
intent(in) :: model
967 end function clear_then_refresh
969 type(kim_model_handle_type),
intent(in) :: model_handle
970 integer(c_int),
intent(out) :: ierr
971 type(kim_model_type),
pointer :: model
973 call c_f_pointer(model_handle%p, model)
974 ierr = clear_then_refresh(model)
1003 model_handle, path, model_name, ierr)
1004 use kim_interoperable_types_module
, only: kim_model_type
1008 model, path, model_name) &
1009 bind(c, name=
"KIM_Model_WriteParameterizedModel")
1010 use,
intrinsic :: iso_c_binding
1011 use kim_interoperable_types_module
, only: kim_model_type
1013 type(kim_model_type),
intent(in) :: model
1014 character(c_char),
intent(in) :: path(*)
1015 character(c_char),
intent(in) :: model_name(*)
1018 type(kim_model_handle_type),
intent(in) :: model_handle
1019 character(len=*, kind=c_char),
intent(in) :: path
1020 character(len=*, kind=c_char),
intent(in) :: model_name
1021 integer(c_int),
intent(out) :: ierr
1022 type(kim_model_type),
pointer :: model
1024 call c_f_pointer(model_handle%p, model)
1026 trim(model_name)//c_null_char)
1036 model_handle, species_name, species_is_supported, code, ierr)
1038 use kim_interoperable_types_module
, only: kim_model_type
1041 integer(c_int) recursive function get_species_support_and_code( &
1042 model, species_name, species_is_supported, code) &
1043 bind(c, name=
"KIM_Model_GetSpeciesSupportAndCode")
1044 use,
intrinsic :: iso_c_binding
1046 use kim_interoperable_types_module
, only: kim_model_type
1048 type(kim_model_type),
intent(in) :: model
1049 type(kim_species_name_type),
intent(in),
value :: species_name
1050 integer(c_int),
intent(out) :: species_is_supported
1051 integer(c_int),
intent(out) :: code
1052 end function get_species_support_and_code
1054 type(kim_model_handle_type),
intent(in) :: model_handle
1055 type(kim_species_name_type),
intent(in) :: species_name
1056 integer(c_int),
intent(out) :: species_is_supported
1057 integer(c_int),
intent(out) :: code
1058 integer(c_int),
intent(out) :: ierr
1059 type(kim_model_type),
pointer :: model
1061 call c_f_pointer(model_handle%p, model)
1062 ierr = get_species_support_and_code(model, species_name, &
1063 species_is_supported, code)
1072 model_handle, number_of_parameters)
1073 use kim_interoperable_types_module
, only: kim_model_type
1076 recursive subroutine get_number_of_parameters( &
1077 model, number_of_parameters) &
1078 bind(c, name=
"KIM_Model_GetNumberOfParameters")
1079 use,
intrinsic :: iso_c_binding
1080 use kim_interoperable_types_module
, only: kim_model_type
1082 type(kim_model_type),
intent(in) :: model
1083 integer(c_int),
intent(out) :: number_of_parameters
1084 end subroutine get_number_of_parameters
1086 type(kim_model_handle_type),
intent(in) :: model_handle
1087 integer(c_int),
intent(out) :: number_of_parameters
1088 type(kim_model_type),
pointer :: model
1090 call c_f_pointer(model_handle%p, model)
1091 call get_number_of_parameters(model, number_of_parameters)
1100 model_handle, parameter_index, data_type, extent, name, description, ierr)
1102 use kim_convert_string_module
, only: kim_convert_c_char_ptr_to_string
1103 use kim_interoperable_types_module
, only: kim_model_type
1106 integer(c_int) recursive function get_parameter_metadata( &
1107 model, parameter_index, data_type, extent, name, description) &
1108 bind(c, name=
"KIM_Model_GetParameterMetadata")
1109 use,
intrinsic :: iso_c_binding
1111 use kim_interoperable_types_module
, only: kim_model_type
1113 type(kim_model_type),
intent(in) :: model
1114 integer(c_int),
intent(in),
value :: parameter_index
1115 type(kim_data_type_type),
intent(out) :: data_type
1116 integer(c_int),
intent(out) :: extent
1117 type(c_ptr),
intent(out) :: name
1118 type(c_ptr),
intent(out) :: description
1119 end function get_parameter_metadata
1121 type(kim_model_handle_type),
intent(in) :: model_handle
1122 integer(c_int),
intent(in) :: parameter_index
1123 type(kim_data_type_type),
intent(out) :: data_type
1124 integer(c_int),
intent(out) :: extent
1125 character(len=*, kind=c_char),
intent(out) :: name
1126 character(len=*, kind=c_char),
intent(out) :: description
1127 integer(c_int),
intent(out) :: ierr
1128 type(kim_model_type),
pointer :: model
1130 type(c_ptr) :: pname, pdesc
1132 call c_f_pointer(model_handle%p, model)
1133 ierr = get_parameter_metadata(model, parameter_index - 1, data_type, &
1134 extent, pname, pdesc)
1135 call kim_convert_c_char_ptr_to_string(pname, name)
1136 call kim_convert_c_char_ptr_to_string(pdesc, description)
1145 model_handle, parameter_index, array_index, parameter_value, ierr)
1146 use kim_interoperable_types_module
, only: kim_model_type
1149 integer(c_int) recursive function get_parameter_integer( &
1150 model, parameter_index, array_index, parameter_value) &
1151 bind(c, name=
"KIM_Model_GetParameterInteger")
1152 use,
intrinsic :: iso_c_binding
1153 use kim_interoperable_types_module
, only: kim_model_type
1155 type(kim_model_type),
intent(in) :: model
1156 integer(c_int),
intent(in),
value :: parameter_index
1157 integer(c_int),
intent(in),
value :: array_index
1158 integer(c_int),
intent(out) :: parameter_value
1159 end function get_parameter_integer
1161 type(kim_model_handle_type),
intent(in) :: model_handle
1162 integer(c_int),
intent(in) :: parameter_index
1163 integer(c_int),
intent(in) :: array_index
1164 integer(c_int),
intent(out) :: parameter_value
1165 integer(c_int),
intent(out) :: ierr
1166 type(kim_model_type),
pointer :: model
1168 call c_f_pointer(model_handle%p, model)
1169 ierr = get_parameter_integer(model, parameter_index - 1, array_index - 1, &
1179 model_handle, parameter_index, array_index, parameter_value, ierr)
1180 use kim_interoperable_types_module
, only: kim_model_type
1183 integer(c_int) recursive function get_parameter_double( &
1184 model, parameter_index, array_index, parameter_value) &
1185 bind(c, name=
"KIM_Model_GetParameterDouble")
1186 use,
intrinsic :: iso_c_binding
1187 use kim_interoperable_types_module
, only: kim_model_type
1189 type(kim_model_type),
intent(in) :: model
1190 integer(c_int),
intent(in),
value :: parameter_index
1191 integer(c_int),
intent(in),
value :: array_index
1192 real(c_double),
intent(out) :: parameter_value
1193 end function get_parameter_double
1195 type(kim_model_handle_type),
intent(in) :: model_handle
1196 integer(c_int),
intent(in) :: parameter_index
1197 integer(c_int),
intent(in) :: array_index
1198 real(c_double),
intent(out) :: parameter_value
1199 integer(c_int),
intent(out) :: ierr
1200 type(kim_model_type),
pointer :: model
1202 call c_f_pointer(model_handle%p, model)
1203 ierr = get_parameter_double(model, parameter_index - 1, array_index - 1, &
1213 model_handle, parameter_index, array_index, parameter_value, ierr)
1214 use kim_interoperable_types_module
, only: kim_model_type
1217 integer(c_int) recursive function set_parameter_integer( &
1218 model, parameter_index, array_index, parameter_value) &
1219 bind(c, name=
"KIM_Model_SetParameterInteger")
1220 use,
intrinsic :: iso_c_binding
1221 use kim_interoperable_types_module
, only: kim_model_type
1223 type(kim_model_type),
intent(in) :: model
1224 integer(c_int),
intent(in),
value :: parameter_index
1225 integer(c_int),
intent(in),
value :: array_index
1226 integer(c_int),
intent(in),
value :: parameter_value
1227 end function set_parameter_integer
1229 type(kim_model_handle_type),
intent(in) :: model_handle
1230 integer(c_int),
intent(in) :: parameter_index
1231 integer(c_int),
intent(in) :: array_index
1232 integer(c_int),
intent(in) :: parameter_value
1233 integer(c_int),
intent(out) :: ierr
1234 type(kim_model_type),
pointer :: model
1236 call c_f_pointer(model_handle%p, model)
1237 ierr = set_parameter_integer(model, parameter_index - 1, array_index - 1, &
1247 model_handle, parameter_index, array_index, parameter_value, ierr)
1248 use kim_interoperable_types_module
, only: kim_model_type
1251 integer(c_int) recursive function set_parameter_double( &
1252 model, parameter_index, array_index, parameter_value) &
1253 bind(c, name=
"KIM_Model_SetParameterDouble")
1254 use,
intrinsic :: iso_c_binding
1255 use kim_interoperable_types_module
, only: kim_model_type
1257 type(kim_model_type),
intent(in) :: model
1258 integer(c_int),
intent(in),
value :: parameter_index
1259 integer(c_int),
intent(in),
value :: array_index
1260 real(c_double),
intent(in),
value :: parameter_value
1261 end function set_parameter_double
1263 type(kim_model_handle_type),
intent(in) :: model_handle
1264 integer(c_int),
intent(in) :: parameter_index
1265 integer(c_int),
intent(in) :: array_index
1266 real(c_double),
intent(in) :: parameter_value
1267 integer(c_int),
intent(out) :: ierr
1268 type(kim_model_type),
pointer :: model
1270 call c_f_pointer(model_handle%p, model)
1271 ierr = set_parameter_double(model, parameter_index - 1, array_index - 1, &
1282 use kim_interoperable_types_module
, only: kim_model_type
1285 recursive subroutine set_simulator_buffer_pointer(model, ptr) &
1286 bind(c, name=
"KIM_Model_SetSimulatorBufferPointer")
1287 use,
intrinsic :: iso_c_binding
1288 use kim_interoperable_types_module
, only: kim_model_type
1290 type(kim_model_type),
intent(in) :: model
1291 type(c_ptr),
intent(in),
value :: ptr
1292 end subroutine set_simulator_buffer_pointer
1294 type(kim_model_handle_type),
intent(in) :: model_handle
1295 type(c_ptr),
intent(in) :: ptr
1296 type(kim_model_type),
pointer :: model
1298 call c_f_pointer(model_handle%p, model)
1299 call set_simulator_buffer_pointer(model, ptr)
1309 use kim_interoperable_types_module
, only: kim_model_type
1312 recursive subroutine get_simulator_buffer_pointer(model, ptr) &
1313 bind(c, name=
"KIM_Model_GetSimulatorBufferPointer")
1314 use,
intrinsic :: iso_c_binding
1315 use kim_interoperable_types_module
, only: kim_model_type
1317 type(kim_model_type),
intent(in) :: model
1318 type(c_ptr),
intent(out) :: ptr
1319 end subroutine get_simulator_buffer_pointer
1321 type(kim_model_handle_type),
intent(in) :: model_handle
1322 type(c_ptr),
intent(out) :: ptr
1323 type(kim_model_type),
pointer :: model
1325 call c_f_pointer(model_handle%p, model)
1326 call get_simulator_buffer_pointer(model, ptr)
1335 use kim_convert_string_module
, only: kim_convert_c_char_ptr_to_string
1336 use kim_interoperable_types_module
, only: kim_model_type
1339 type(c_ptr)
recursive function model_string(model) &
1340 bind(c, name=
"KIM_Model_ToString")
1341 use,
intrinsic :: iso_c_binding
1342 use kim_interoperable_types_module
, only: kim_model_type
1344 type(kim_model_type),
intent(in) :: model
1345 end function model_string
1347 type(kim_model_handle_type),
intent(in) :: model_handle
1348 character(len=*, kind=c_char),
intent(out) :: string
1349 type(kim_model_type),
pointer :: model
1353 call c_f_pointer(model_handle%p, model)
1354 p = model_string(model)
1355 call kim_convert_c_char_ptr_to_string(p, string)
1364 use kim_interoperable_types_module
, only: kim_model_type
1367 recursive subroutine set_log_id(model, log_id) &
1368 bind(c, name=
"KIM_Model_SetLogID")
1369 use,
intrinsic :: iso_c_binding
1370 use kim_interoperable_types_module
, only: kim_model_type
1372 type(kim_model_type),
intent(in) :: model
1373 character(c_char),
intent(in) :: log_id(*)
1374 end subroutine set_log_id
1376 type(kim_model_handle_type),
intent(in) :: model_handle
1377 character(len=*, kind=c_char),
intent(in) :: log_id
1378 type(kim_model_type),
pointer :: model
1380 call c_f_pointer(model_handle%p, model)
1381 call set_log_id(model, trim(log_id)//c_null_char)
1391 use kim_interoperable_types_module
, only: kim_model_type
1394 recursive subroutine push_log_verbosity(model, log_verbosity) &
1395 bind(c, name=
"KIM_Model_PushLogVerbosity")
1396 use,
intrinsic :: iso_c_binding
1398 use kim_interoperable_types_module
, only: kim_model_type
1400 type(kim_model_type),
intent(in) :: model
1401 type(kim_log_verbosity_type),
intent(in),
value :: log_verbosity
1402 end subroutine push_log_verbosity
1404 type(kim_model_handle_type),
intent(in) :: model_handle
1405 type(kim_log_verbosity_type),
intent(in) :: log_verbosity
1406 type(kim_model_type),
pointer :: model
1408 call c_f_pointer(model_handle%p, model)
1409 call push_log_verbosity(model, log_verbosity)
1419 use kim_interoperable_types_module
, only: kim_model_type
1422 recursive subroutine pop_log_verbosity(model) &
1423 bind(c, name=
"KIM_Model_PopLogVerbosity")
1424 use,
intrinsic :: iso_c_binding
1426 use kim_interoperable_types_module
, only: kim_model_type
1428 type(kim_model_type),
intent(in) :: model
1429 end subroutine pop_log_verbosity
1431 type(kim_model_handle_type),
intent(in) :: model_handle
1432 type(kim_model_type),
pointer :: model
1434 call c_f_pointer(model_handle%p, model)
1435 call pop_log_verbosity(model)
static int write_parameterized_model(KIM_ModelWriteParameterizedModel const *const modelWriteParameterizedModel)
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.
static int compute_arguments_destroy(KIM_ModelCompute const *const modelCompute, KIM_ModelComputeArgumentsDestroy *const modelComputeArgumentsDestroy)
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.
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...
static int compute_arguments_create(KIM_ModelCompute const *const modelCompute, KIM_ModelComputeArgumentsCreate *const modelComputeArgumentsCreate)
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.
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.