36 use,
intrinsic :: iso_c_binding
69 type,
bind(c) :: kim_model_driver_create_handle_type
70 type(c_ptr) :: p = c_null_ptr
82 interface operator(.eq.)
83 module procedure kim_model_driver_create_handle_equal
84 end interface operator(.eq.)
89 interface operator(.ne.)
90 module procedure kim_model_driver_create_handle_not_equal
91 end interface operator(.ne.)
100 module procedure kim_model_driver_create_get_parameter_file_directory_name
110 module procedure kim_model_driver_create_get_number_of_parameter_files
123 module procedure kim_model_driver_create_get_parameter_file_name
133 module procedure kim_model_driver_create_get_parameter_file_basename
143 module procedure kim_model_driver_create_set_model_numbering
153 module procedure kim_model_driver_create_set_influence_distance_pointer
163 module procedure kim_model_driver_create_set_neighbor_list_pointers
173 module procedure kim_model_driver_create_set_routine_pointer
183 module procedure kim_model_driver_create_set_species_code
194 module procedure kim_model_driver_create_set_parameter_pointer_integer
195 module procedure kim_model_driver_create_set_parameter_pointer_double
205 module procedure kim_model_driver_create_set_model_buffer_pointer
214 module procedure kim_model_driver_create_set_units
223 module procedure kim_model_driver_create_convert_unit
232 module procedure kim_model_driver_create_log_entry
241 module procedure kim_model_driver_create_to_string
248 logical recursive function kim_model_driver_create_handle_equal(lhs, rhs)
253 if ((.not. c_associated(lhs%p)) .and. (.not. c_associated(rhs%p)))
then
254 kim_model_driver_create_handle_equal = .true.
256 kim_model_driver_create_handle_equal = c_associated(lhs%p, rhs%p)
258 end function kim_model_driver_create_handle_equal
263 logical recursive function kim_model_driver_create_handle_not_equal(lhs, rhs)
268 kim_model_driver_create_handle_not_equal = .not. (lhs == rhs)
269 end function kim_model_driver_create_handle_not_equal
277 recursive subroutine &
278 kim_model_driver_create_get_parameter_file_directory_name( &
279 model_driver_create_handle, directory_name)
280 use kim_interoperable_types_module,
only: kim_model_driver_create_type
281 use kim_convert_string_module,
only: kim_convert_c_char_ptr_to_string
284 recursive subroutine get_parameter_file_directory_name( &
285 model_driver_create, directory_name) &
286 bind(c, name="KIM_ModelDriverCreate_GetParameterFileDirectoryName")
287 use,
intrinsic :: iso_c_binding
288 use kim_interoperable_types_module,
only: kim_model_driver_create_type
291 type(c_ptr),
intent(out) :: directory_name
292 end subroutine get_parameter_file_directory_name
295 model_driver_create_handle
296 character(len=*, kind=c_char),
intent(out) :: directory_name
299 type(c_ptr) pdirectory_name
303 call kim_convert_c_char_ptr_to_string(pdirectory_name, directory_name)
304 end subroutine kim_model_driver_create_get_parameter_file_directory_name
312 recursive subroutine kim_model_driver_create_get_number_of_parameter_files( &
313 model_driver_create_handle, number_of_parameter_files)
314 use kim_interoperable_types_module,
only: kim_model_driver_create_type
317 recursive subroutine get_number_of_parameter_files( &
318 model_driver_create, number_of_parameter_files) &
319 bind(c, name="KIM_ModelDriverCreate_GetNumberOfParameterFiles")
320 use,
intrinsic :: iso_c_binding
321 use kim_interoperable_types_module,
only: kim_model_driver_create_type
323 type(kim_model_driver_create_type),
intent(in) &
325 integer(c_int),
intent(out) :: number_of_parameter_files
326 end subroutine get_number_of_parameter_files
329 :: model_driver_create_handle
330 integer(c_int),
intent(out) :: number_of_parameter_files
335 number_of_parameter_files)
336 end subroutine kim_model_driver_create_get_number_of_parameter_files
347 recursive subroutine kim_model_driver_create_get_parameter_file_name( &
348 model_driver_create_handle, index, parameter_file_name, ierr)
349 use kim_convert_string_module,
only: kim_convert_c_char_ptr_to_string
350 use kim_interoperable_types_module,
only: kim_model_driver_create_type
353 integer(c_int) recursive function get_parameter_file_name( &
355 bind(c, name="KIM_ModelDriverCreate_GetParameterFileName")
356 use,
intrinsic :: iso_c_binding
357 use kim_interoperable_types_module,
only: kim_model_driver_create_type
359 type(kim_model_driver_create_type),
intent(in) &
361 integer(c_int),
intent(in),
value :: index
362 type(c_ptr),
intent(out) :: parameter_file_name
363 end function get_parameter_file_name
366 :: model_driver_create_handle
367 integer(c_int),
intent(in) :: index
368 character(len=*, kind=c_char),
intent(out) :: parameter_file_name
369 integer(c_int),
intent(out) :: ierr
377 call kim_convert_c_char_ptr_to_string(p, parameter_file_name)
378 end subroutine kim_model_driver_create_get_parameter_file_name
386 recursive subroutine kim_model_driver_create_get_parameter_file_basename( &
387 model_driver_create_handle, index, parameter_file_basename, ierr)
388 use kim_convert_string_module,
only: kim_convert_c_char_ptr_to_string
389 use kim_interoperable_types_module,
only: kim_model_driver_create_type
392 integer(c_int) recursive function get_parameter_file_basename( &
394 bind(c, name="KIM_ModelDriverCreate_GetParameterFileBasename")
395 use,
intrinsic :: iso_c_binding
396 use kim_interoperable_types_module,
only: kim_model_driver_create_type
398 type(kim_model_driver_create_type),
intent(in) &
400 integer(c_int),
intent(in),
value :: index
401 type(c_ptr),
intent(out) :: parameter_file_basename
402 end function get_parameter_file_basename
405 :: model_driver_create_handle
406 integer(c_int),
intent(in) :: index
407 character(len=*, kind=c_char),
intent(out) :: parameter_file_basename
408 integer(c_int),
intent(out) :: ierr
416 call kim_convert_c_char_ptr_to_string(p, parameter_file_basename)
417 end subroutine kim_model_driver_create_get_parameter_file_basename
425 recursive subroutine kim_model_driver_create_set_model_numbering( &
426 model_driver_create_handle, numbering, ierr)
428 use kim_interoperable_types_module,
only: kim_model_driver_create_type
431 integer(c_int) recursive function set_model_numbering( &
433 bind(c, name="KIM_ModelDriverCreate_SetModelNumbering")
434 use,
intrinsic :: iso_c_binding
436 use kim_interoperable_types_module,
only: kim_model_driver_create_type
438 type(kim_model_driver_create_type),
intent(in) &
441 end function set_model_numbering
444 :: model_driver_create_handle
445 type(kim_numbering_type),
intent(in) :: numbering
446 integer(c_int),
intent(out) :: ierr
451 end subroutine kim_model_driver_create_set_model_numbering
459 recursive subroutine kim_model_driver_create_set_influence_distance_pointer( &
460 model_driver_create_handle, influence_distance)
461 use kim_interoperable_types_module,
only: kim_model_driver_create_type
464 recursive subroutine set_influence_distance_pointer(model_driver_create, &
465 influence_distance) &
466 bind(c, name="KIM_ModelDriverCreate_SetInfluenceDistancePointer")
467 use,
intrinsic :: iso_c_binding
468 use kim_interoperable_types_module,
only: kim_model_driver_create_type
470 type(kim_model_driver_create_type),
intent(in) &
472 type(c_ptr),
intent(in),
value :: influence_distance
473 end subroutine set_influence_distance_pointer
476 :: model_driver_create_handle
477 real(c_double),
intent(in),
target :: influence_distance
482 c_loc(influence_distance))
483 end subroutine kim_model_driver_create_set_influence_distance_pointer
491 recursive subroutine kim_model_driver_create_set_neighbor_list_pointers( &
492 model_driver_create_handle, number_of_neighbor_lists, cutoffs, &
493 model_will_not_request_neighbors_of_noncontributing_particles)
494 use kim_interoperable_types_module,
only: kim_model_driver_create_type
497 recursive subroutine set_neighbor_list_pointers( &
498 model_driver_create, number_of_neighbor_lists, cutoffs_ptr, &
499 model_will_not_request_neighbors_of_noncontributing_particles) &
500 bind(c, name="KIM_ModelDriverCreate_SetNeighborListPointers")
501 use,
intrinsic :: iso_c_binding
502 use kim_interoperable_types_module,
only: kim_model_driver_create_type
504 type(kim_model_driver_create_type),
intent(in) &
506 integer(c_int),
intent(in),
value :: number_of_neighbor_lists
507 type(c_ptr),
intent(in),
value :: cutoffs_ptr
508 type(c_ptr),
intent(in),
value :: &
509 model_will_not_request_neighbors_of_noncontributing_particles
510 end subroutine set_neighbor_list_pointers
513 :: model_driver_create_handle
514 integer(c_int),
intent(in) :: number_of_neighbor_lists
515 real(c_double),
intent(in),
target :: cutoffs(number_of_neighbor_lists)
516 integer(c_int),
intent(in),
target :: &
517 model_will_not_request_neighbors_of_noncontributing_particles( &
518 number_of_neighbor_lists)
523 call set_neighbor_list_pointers( &
525 c_loc(model_will_not_request_neighbors_of_noncontributing_particles))
526 end subroutine kim_model_driver_create_set_neighbor_list_pointers
534 recursive subroutine kim_model_driver_create_set_routine_pointer( &
535 model_driver_create_handle, model_routine_name, language_name, required, &
539 use kim_interoperable_types_module,
only: kim_model_driver_create_type
542 integer(c_int) recursive function set_routine_pointer( &
544 fptr)
bind(c, name="KIM_ModelDriverCreate_SetRoutinePointer")
545 use,
intrinsic :: iso_c_binding
548 use kim_interoperable_types_module,
only: kim_model_driver_create_type
550 type(kim_model_driver_create_type),
intent(in) &
553 :: model_routine_name
555 integer(c_int),
intent(in),
value :: required
556 type(c_funptr),
intent(in),
value :: fptr
557 end function set_routine_pointer
560 :: model_driver_create_handle
561 type(kim_model_routine_name_type),
intent(in) :: model_routine_name
562 type(kim_language_name_type),
intent(in) :: language_name
563 integer(c_int),
intent(in) :: required
564 type(c_funptr),
intent(in),
value :: fptr
565 integer(c_int),
intent(out) :: ierr
570 language_name, required, fptr)
571 end subroutine kim_model_driver_create_set_routine_pointer
579 recursive subroutine kim_model_driver_create_set_species_code( &
580 model_driver_create_handle, species_name, code, ierr)
582 use kim_interoperable_types_module,
only: kim_model_driver_create_type
586 species_name, code) &
587 bind(c, name="KIM_ModelDriverCreate_SetSpeciesCode")
588 use,
intrinsic :: iso_c_binding
590 use kim_interoperable_types_module,
only: kim_model_driver_create_type
592 type(kim_model_driver_create_type),
intent(in) &
595 integer(c_int),
intent(in),
value :: code
596 end function set_species_code
599 :: model_driver_create_handle
600 type(kim_species_name_type),
intent(in) :: species_name
601 integer(c_int),
intent(in) :: code
602 integer(c_int),
intent(out) :: ierr
607 end subroutine kim_model_driver_create_set_species_code
615 recursive subroutine kim_model_driver_create_set_parameter_pointer_integer( &
616 model_driver_create_handle, int1, name, description, ierr)
617 use kim_interoperable_types_module,
only: kim_model_driver_create_type
620 :: model_driver_create_handle
621 integer(c_int),
intent(in),
target :: int1(:)
622 character(len=*, kind=c_char),
intent(in) :: name
623 character(len=*, kind=c_char),
intent(in) :: description
624 integer(c_int),
intent(out) :: ierr
629 name, description, ierr)
634 name, description, ierr)
635 use kim_interoperable_types_module,
only: kim_model_driver_create_type
638 integer(c_int) recursive function set_parameter_pointer_integer( &
640 bind(c, name="KIM_ModelDriverCreate_SetParameterPointerInteger")
641 use,
intrinsic :: iso_c_binding
642 use kim_interoperable_types_module,
only: &
643 kim_model_driver_create_type
645 type(kim_model_driver_create_type),
intent(in) &
647 integer(c_int),
intent(in),
value :: extent
648 type(c_ptr),
intent(in),
value :: ptr
649 character(c_char),
intent(in) :: name(*)
650 character(c_char),
intent(in) :: description(*)
651 end function set_parameter_pointer_integer
653 type(kim_model_driver_create_type),
intent(in) &
655 integer(c_int),
intent(in) :: extent
656 integer(c_int),
intent(in),
target :: int1(extent)
657 character(len=*, kind=c_char),
intent(in) :: name
658 character(len=*, kind=c_char),
intent(in) :: description
659 integer(c_int),
intent(out) :: ierr
664 trim(name)//c_null_char, &
665 trim(description)//c_null_char)
667 end subroutine kim_model_driver_create_set_parameter_pointer_integer
675 recursive subroutine kim_model_driver_create_set_parameter_pointer_double( &
676 model_driver_create_handle, double1, name, description, ierr)
677 use kim_interoperable_types_module,
only: kim_model_driver_create_type
680 :: model_driver_create_handle
681 real(c_double),
intent(in),
target :: double1(:)
682 character(len=*, kind=c_char),
intent(in) :: name
683 character(len=*, kind=c_char),
intent(in) :: description
684 integer(c_int),
intent(out) :: ierr
689 double1, name, description, ierr)
694 name, description, ierr)
695 use kim_interoperable_types_module,
only: kim_model_driver_create_type
698 integer(c_int) recursive function set_parameter_pointer_double( &
700 bind(c, name="KIM_ModelDriverCreate_SetParameterPointerDouble")
701 use,
intrinsic :: iso_c_binding
702 use kim_interoperable_types_module,
only: &
703 kim_model_driver_create_type
705 type(kim_model_driver_create_type),
intent(in) &
707 integer(c_int),
intent(in),
value :: extent
708 type(c_ptr),
intent(in),
value :: ptr
709 character(c_char),
intent(in) :: name(*)
710 character(c_char),
intent(in) :: description(*)
711 end function set_parameter_pointer_double
713 type(kim_model_driver_create_type),
intent(in) &
715 integer(c_int),
intent(in) :: extent
716 real(c_double),
intent(in),
target :: double1(extent)
717 character(len=*, kind=c_char),
intent(in) :: name
718 character(len=*, kind=c_char),
intent(in) :: description
719 integer(c_int),
intent(out) :: ierr
724 trim(name)//c_null_char, &
725 trim(description)//c_null_char)
727 end subroutine kim_model_driver_create_set_parameter_pointer_double
735 recursive subroutine kim_model_driver_create_set_model_buffer_pointer( &
736 model_driver_create_handle, ptr)
737 use kim_interoperable_types_module,
only: kim_model_driver_create_type
740 recursive subroutine set_model_buffer_pointer(model_driver_create, ptr) &
741 bind(c, name="KIM_ModelDriverCreate_SetModelBufferPointer")
742 use,
intrinsic :: iso_c_binding
743 use kim_interoperable_types_module,
only: kim_model_driver_create_type
745 type(kim_model_driver_create_type),
intent(in) &
747 type(c_ptr),
intent(in),
value :: ptr
748 end subroutine set_model_buffer_pointer
751 :: model_driver_create_handle
752 type(c_ptr),
intent(in) :: ptr
757 end subroutine kim_model_driver_create_set_model_buffer_pointer
764 recursive subroutine kim_model_driver_create_set_units( &
765 model_driver_create_handle, length_unit, energy_unit, charge_unit, &
766 temperature_unit, time_unit, ierr)
768 kim_energy_unit_type, &
769 kim_charge_unit_type, &
770 kim_temperature_unit_type, &
772 use kim_interoperable_types_module,
only: kim_model_driver_create_type
775 integer(c_int) recursive function set_units( &
777 temperature_unit, time_unit) &
778 bind(c, name="KIM_ModelDriverCreate_SetUnits")
779 use,
intrinsic :: iso_c_binding
781 kim_energy_unit_type, &
782 kim_charge_unit_type, &
783 kim_temperature_unit_type, &
785 use kim_interoperable_types_module,
only: kim_model_driver_create_type
787 type(kim_model_driver_create_type),
intent(in) &
789 type(kim_length_unit_type),
intent(in),
value :: length_unit
790 type(kim_energy_unit_type),
intent(in),
value :: energy_unit
791 type(kim_charge_unit_type),
intent(in),
value :: charge_unit
792 type(kim_temperature_unit_type),
intent(in),
value :: temperature_unit
793 type(kim_time_unit_type),
intent(in),
value :: time_unit
794 end function set_units
797 :: model_driver_create_handle
798 type(kim_length_unit_type),
intent(in) :: length_unit
799 type(kim_energy_unit_type),
intent(in) :: energy_unit
800 type(kim_charge_unit_type),
intent(in) :: charge_unit
801 type(kim_temperature_unit_type),
intent(in) :: temperature_unit
802 type(kim_time_unit_type),
intent(in) :: time_unit
803 integer(c_int),
intent(out) :: ierr
808 charge_unit, temperature_unit, time_unit)
809 end subroutine kim_model_driver_create_set_units
816 recursive subroutine kim_model_driver_create_convert_unit( &
817 from_length_unit, from_energy_unit, &
818 from_charge_unit, from_temperature_unit, from_time_unit, &
819 to_length_unit, to_energy_unit, to_charge_unit, to_temperature_unit, &
820 to_time_unit, length_exponent, energy_exponent, charge_exponent, &
821 temperature_exponent, time_exponent, conversion_factor, ierr)
829 integer(c_int) recursive function convert_unit( &
830 from_length_unit, from_energy_unit, &
831 from_charge_unit, from_temperature_unit, from_time_unit, &
832 to_length_unit, to_energy_unit, to_charge_unit, to_temperature_unit, &
833 to_time_unit, length_exponent, energy_exponent, charge_exponent, &
834 temperature_exponent, time_exponent, conversion_factor) &
835 bind(c, name="KIM_ModelDriverCreate_ConvertUnit")
836 use,
intrinsic :: iso_c_binding
843 type(kim_length_unit_type),
intent(in),
value :: from_length_unit
844 type(kim_energy_unit_type),
intent(in),
value :: from_energy_unit
845 type(kim_charge_unit_type),
intent(in),
value :: from_charge_unit
846 type(kim_temperature_unit_type),
intent(in),
value :: &
847 from_temperature_unit
848 type(kim_time_unit_type),
intent(in),
value :: from_time_unit
849 type(kim_length_unit_type),
intent(in),
value :: to_length_unit
850 type(kim_energy_unit_type),
intent(in),
value :: to_energy_unit
851 type(kim_charge_unit_type),
intent(in),
value :: to_charge_unit
852 type(kim_temperature_unit_type),
intent(in),
value :: &
854 type(kim_time_unit_type),
intent(in),
value :: to_time_unit
855 real(c_double),
intent(in),
value :: length_exponent
856 real(c_double),
intent(in),
value :: energy_exponent
857 real(c_double),
intent(in),
value :: charge_exponent
858 real(c_double),
intent(in),
value :: temperature_exponent
859 real(c_double),
intent(in),
value :: time_exponent
860 real(c_double),
intent(out) :: conversion_factor
861 end function convert_unit
863 type(kim_length_unit_type),
intent(in) :: from_length_unit
864 type(kim_energy_unit_type),
intent(in) :: from_energy_unit
865 type(kim_charge_unit_type),
intent(in) :: from_charge_unit
866 type(kim_temperature_unit_type),
intent(in) :: from_temperature_unit
867 type(kim_time_unit_type),
intent(in) :: from_time_unit
868 type(kim_length_unit_type),
intent(in) :: to_length_unit
869 type(kim_energy_unit_type),
intent(in) :: to_energy_unit
870 type(kim_charge_unit_type),
intent(in) :: to_charge_unit
871 type(kim_temperature_unit_type),
intent(in) :: to_temperature_unit
872 type(kim_time_unit_type),
intent(in) :: to_time_unit
873 real(c_double),
intent(in) :: length_exponent
874 real(c_double),
intent(in) :: energy_exponent
875 real(c_double),
intent(in) :: charge_exponent
876 real(c_double),
intent(in) :: temperature_exponent
877 real(c_double),
intent(in) :: time_exponent
878 real(c_double),
intent(out) :: conversion_factor
879 integer(c_int),
intent(out) :: ierr
881 ierr = convert_unit(from_length_unit, from_energy_unit, from_charge_unit, &
882 from_temperature_unit, from_time_unit, to_length_unit, &
883 to_energy_unit, to_charge_unit, to_temperature_unit, &
884 to_time_unit, length_exponent, energy_exponent, &
885 charge_exponent, temperature_exponent, time_exponent, &
887 end subroutine kim_model_driver_create_convert_unit
894 recursive subroutine kim_model_driver_create_log_entry( &
895 model_driver_create_handle, log_verbosity, message)
897 use kim_interoperable_types_module,
only: kim_model_driver_create_type
900 recursive subroutine log_entry(model_driver_create, log_verbosity, &
901 message, line_number, file_name) &
902 bind(c, name="KIM_ModelDriverCreate_LogEntry")
903 use,
intrinsic :: iso_c_binding
905 use kim_interoperable_types_module,
only: kim_model_driver_create_type
907 type(kim_model_driver_create_type),
intent(in) &
910 character(c_char),
intent(in) :: message(*)
911 integer(c_int),
intent(in),
value :: line_number
912 character(c_char),
intent(in) :: file_name(*)
913 end subroutine log_entry
916 :: model_driver_create_handle
917 type(kim_log_verbosity_type),
intent(in) :: log_verbosity
918 character(len=*, kind=c_char),
intent(in) :: message
923 trim(message)//c_null_char, 0,
""//c_null_char)
924 end subroutine kim_model_driver_create_log_entry
931 recursive subroutine kim_model_driver_create_to_string( &
932 model_driver_create_handle, string)
933 use kim_convert_string_module,
only: kim_convert_c_char_ptr_to_string
934 use kim_interoperable_types_module,
only: kim_model_driver_create_type
937 type(c_ptr)
recursive function model_driver_create_string( &
939 bind(c, name="KIM_ModelDriverCreate_ToString")
940 use,
intrinsic :: iso_c_binding
941 use kim_interoperable_types_module,
only: kim_model_driver_create_type
943 type(kim_model_driver_create_type),
intent(in) &
945 end function model_driver_create_string
948 :: model_driver_create_handle
949 character(len=*, kind=c_char),
intent(out) :: string
956 call kim_convert_c_char_ptr_to_string(p, string)
957 end subroutine kim_model_driver_create_to_string
int model_driver_create(KIM_ModelDriverCreate *const modelDriverCreate, KIM_LengthUnit const requestedLengthUnit, KIM_EnergyUnit const requestedEnergyUnit, KIM_ChargeUnit const requestedChargeUnit, KIM_TemperatureUnit const requestedTemperatureUnit, KIM_TimeUnit const requestedTimeUnit)
Get the multiplicative factor to convert between a derived unit represented in two different sets of ...
Get the number of parameter files provided by the parameterized model.
Get a particular parameter file basename. The file is located in the Model's parameter file directory...
Get absolute path name of the temporary directory where parameter files provided by the model are wri...
Get a particular parameter file name.
Write a log entry into the log file.
Set the Model's influence distance data pointer.
Set the Model's buffer pointer within the Model object.
Set the Model's particle Numbering.
Set the Model's neighbor list data pointers.
Set the next parameter data pointer to be provided by the model.
Set the function pointer for the ModelRoutineName of interest.
Set integer code for supported SpeciesName.
Set the Model's base unit values.
Get a string representing the internal state of the Model object.
recursive subroutine set_parameter(model_create, extent, int1, name, description, ierr)
An Extensible Enumeration for the LanguageName's supported by the KIM API.
An Extensible Enumeration for the LogVerbosity's supported by the KIM API.
Provides the interface to a KIM API Model object for use by models within their MODEL_ROUTINE_NAME::C...
type(kim_model_driver_create_handle_type), save, public, protected kim_model_driver_create_null_handle
NULL handle for use in comparisons.
An Extensible Enumeration for the ModelRoutineName's supported by the KIM API.
An Extensible Enumeration for the Numbering's supported by the KIM API.
An Extensible Enumeration for the SpeciesName's supported by the KIM API.
An Extensible Enumeration for the LanguageName's supported by the KIM API.
An Extensible Enumeration for the LogVerbosity's supported by the KIM API.
Provides the interface to a KIM API Model object for use by models within their MODEL_ROUTINE_NAME::C...
An Extensible Enumeration for the ModelRoutineName's supported by the KIM API.
An Extensible Enumeration for the Numbering's supported by the KIM API.
An Extensible Enumeration for the SpeciesName's supported by the KIM API.