36 use,
intrinsic :: iso_c_binding
42 kim_model_driver_create_handle_type, &
48 kim_get_parameter_file_directory_name, &
49 kim_get_number_of_parameter_files, &
50 kim_get_parameter_file_name, &
51 kim_get_parameter_file_basename, &
52 kim_set_model_numbering, &
53 kim_set_influence_distance_pointer, &
54 kim_set_neighbor_list_pointers, &
55 kim_set_routine_pointer, &
56 kim_set_species_code, &
57 kim_set_parameter_pointer, &
58 kim_set_model_buffer_pointer, &
69 type, bind(c) :: kim_model_driver_create_handle_type
70 type(c_ptr) :: p = c_null_ptr
71 end type kim_model_driver_create_handle_type
76 type(kim_model_driver_create_handle_type),
protected,
save &
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.)
99 interface kim_get_parameter_file_directory_name
100 module procedure kim_model_driver_create_get_parameter_file_directory_name
101 end interface kim_get_parameter_file_directory_name
109 interface kim_get_number_of_parameter_files
111 end interface kim_get_number_of_parameter_files
122 interface kim_get_parameter_file_name
124 end interface kim_get_parameter_file_name
132 interface kim_get_parameter_file_basename
134 end interface kim_get_parameter_file_basename
142 interface kim_set_model_numbering
144 end interface kim_set_model_numbering
152 interface kim_set_influence_distance_pointer
154 end interface kim_set_influence_distance_pointer
162 interface kim_set_neighbor_list_pointers
164 end interface kim_set_neighbor_list_pointers
172 interface kim_set_routine_pointer
174 end interface kim_set_routine_pointer
182 interface kim_set_species_code
184 end interface kim_set_species_code
193 interface kim_set_parameter_pointer
196 end interface kim_set_parameter_pointer
204 interface kim_set_model_buffer_pointer
206 end interface kim_set_model_buffer_pointer
213 interface kim_set_units
215 end interface kim_set_units
222 interface kim_convert_unit
224 end interface kim_convert_unit
231 interface kim_log_entry
233 end interface kim_log_entry
240 interface kim_to_string
242 end interface kim_to_string
248 logical recursive function kim_model_driver_create_handle_equal(lhs, rhs)
250 type(kim_model_driver_create_handle_type),
intent(in) :: lhs
251 type(kim_model_driver_create_handle_type),
intent(in) :: 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)
265 type(kim_model_driver_create_handle_type),
intent(in) :: lhs
266 type(kim_model_driver_create_handle_type),
intent(in) :: 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
294 type(kim_model_driver_create_handle_type),
intent(in) :: &
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
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) &
324 :: model_driver_create
325 integer(c_int),
intent(out) :: number_of_parameter_files
326 end subroutine get_number_of_parameter_files
328 type(kim_model_driver_create_handle_type),
intent(in) &
329 :: model_driver_create_handle
330 integer(c_int),
intent(out) :: number_of_parameter_files
331 type(kim_model_driver_create_type),
pointer :: model_driver_create
333 call c_f_pointer(model_driver_create_handle%p, model_driver_create)
334 call get_number_of_parameter_files(model_driver_create, &
335 number_of_parameter_files)
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( &
354 model_driver_create, index, 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) &
360 :: model_driver_create
361 integer(c_int),
intent(in),
value :: index
362 type(c_ptr),
intent(out) :: parameter_file_name
363 end function get_parameter_file_name
365 type(kim_model_driver_create_handle_type),
intent(in) &
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
370 type(kim_model_driver_create_type),
pointer :: model_driver_create
374 call c_f_pointer(model_driver_create_handle%p, model_driver_create)
375 ierr = get_parameter_file_name(model_driver_create, &
377 call kim_convert_c_char_ptr_to_string(p, parameter_file_name)
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( &
393 model_driver_create, index, 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) &
399 :: model_driver_create
400 integer(c_int),
intent(in),
value :: index
401 type(c_ptr),
intent(out) :: parameter_file_basename
402 end function get_parameter_file_basename
404 type(kim_model_driver_create_handle_type),
intent(in) &
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
409 type(kim_model_driver_create_type),
pointer :: model_driver_create
413 call c_f_pointer(model_driver_create_handle%p, model_driver_create)
414 ierr = get_parameter_file_basename(model_driver_create, &
416 call kim_convert_c_char_ptr_to_string(p, parameter_file_basename)
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( &
432 model_driver_create, 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) &
439 :: model_driver_create
440 type(kim_numbering_type),
intent(in),
value :: numbering
441 end function set_model_numbering
443 type(kim_model_driver_create_handle_type),
intent(in) &
444 :: model_driver_create_handle
445 type(kim_numbering_type),
intent(in) :: numbering
446 integer(c_int),
intent(out) :: ierr
447 type(kim_model_driver_create_type),
pointer :: model_driver_create
449 call c_f_pointer(model_driver_create_handle%p, model_driver_create)
450 ierr = set_model_numbering(model_driver_create, numbering)
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) &
471 :: model_driver_create
472 type(c_ptr),
intent(in),
value :: influence_distance
473 end subroutine set_influence_distance_pointer
475 type(kim_model_driver_create_handle_type),
intent(in) &
476 :: model_driver_create_handle
477 real(c_double),
intent(in),
target :: influence_distance
478 type(kim_model_driver_create_type),
pointer :: model_driver_create
480 call c_f_pointer(model_driver_create_handle%p, model_driver_create)
481 call set_influence_distance_pointer(model_driver_create, &
482 c_loc(influence_distance))
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) &
505 :: model_driver_create
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
512 type(kim_model_driver_create_handle_type),
intent(in) &
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)
520 type(kim_model_driver_create_type),
pointer :: model_driver_create
522 call c_f_pointer(model_driver_create_handle%p, model_driver_create)
523 call set_neighbor_list_pointers( &
524 model_driver_create, number_of_neighbor_lists, c_loc(cutoffs), &
525 c_loc(model_will_not_request_neighbors_of_noncontributing_particles))
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( &
543 model_driver_create, model_routine_name, language_name, required, &
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) &
551 :: model_driver_create
552 type(kim_model_routine_name_type),
intent(in),
value &
553 :: model_routine_name
554 type(kim_language_name_type),
intent(in),
value :: language_name
555 integer(c_int),
intent(in),
value :: required
556 type(c_funptr),
intent(in),
value :: fptr
557 end function set_routine_pointer
559 type(kim_model_driver_create_handle_type),
intent(in) &
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
566 type(kim_model_driver_create_type),
pointer :: model_driver_create
568 call c_f_pointer(model_driver_create_handle%p, model_driver_create)
569 ierr = set_routine_pointer(model_driver_create, model_routine_name, &
570 language_name, required, fptr)
580 model_driver_create_handle, species_name, code, ierr)
582 use kim_interoperable_types_module
, only: kim_model_driver_create_type
585 integer(c_int) recursive function set_species_code(model_driver_create, &
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) &
593 :: model_driver_create
594 type(kim_species_name_type),
intent(in),
value :: species_name
595 integer(c_int),
intent(in),
value :: code
596 end function set_species_code
598 type(kim_model_driver_create_handle_type),
intent(in) &
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
603 type(kim_model_driver_create_type),
pointer :: model_driver_create
605 call c_f_pointer(model_driver_create_handle%p, model_driver_create)
606 ierr = set_species_code(model_driver_create, species_name, code)
616 model_driver_create_handle, int1, name, description, ierr)
617 use kim_interoperable_types_module
, only: kim_model_driver_create_type
619 type(kim_model_driver_create_handle_type),
intent(in) &
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
625 type(kim_model_driver_create_type),
pointer :: model_driver_create
627 call c_f_pointer(model_driver_create_handle%p, model_driver_create)
628 call set_parameter(model_driver_create,
size(int1, 1, c_int), int1, &
629 name, description, ierr)
633 recursive subroutine set_parameter(model_driver_create, extent, int1, &
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( &
639 model_driver_create, extent, ptr, name, description) &
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) &
646 :: model_driver_create
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) &
654 :: model_driver_create
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
661 ierr = set_parameter_pointer_integer(model_driver_create, &
664 trim(name)//c_null_char, &
665 trim(description)//c_null_char)
676 model_driver_create_handle, double1, name, description, ierr)
677 use kim_interoperable_types_module
, only: kim_model_driver_create_type
679 type(kim_model_driver_create_handle_type),
intent(in) &
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
685 type(kim_model_driver_create_type),
pointer :: model_driver_create
687 call c_f_pointer(model_driver_create_handle%p, model_driver_create)
688 call set_parameter(model_driver_create,
size(double1, 1, c_int), &
689 double1, name, description, ierr)
693 recursive subroutine set_parameter(model_driver_create, extent, double1, &
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( &
699 model_driver_create, extent, ptr, name, description) &
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) &
706 :: model_driver_create
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) &
714 :: model_driver_create
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
721 ierr = set_parameter_pointer_double(model_driver_create, &
724 trim(name)//c_null_char, &
725 trim(description)//c_null_char)
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) &
746 :: model_driver_create
747 type(c_ptr),
intent(in),
value :: ptr
748 end subroutine set_model_buffer_pointer
750 type(kim_model_driver_create_handle_type),
intent(in) &
751 :: model_driver_create_handle
752 type(c_ptr),
intent(in) :: ptr
753 type(kim_model_driver_create_type),
pointer :: model_driver_create
755 call c_f_pointer(model_driver_create_handle%p, model_driver_create)
756 call set_model_buffer_pointer(model_driver_create, ptr)
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( &
776 model_driver_create, length_unit, energy_unit, charge_unit, &
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) &
788 :: model_driver_create
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
796 type(kim_model_driver_create_handle_type),
intent(in) &
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
804 type(kim_model_driver_create_type),
pointer :: model_driver_create
806 call c_f_pointer(model_driver_create_handle%p, model_driver_create)
807 ierr = set_units(model_driver_create, length_unit, energy_unit, &
808 charge_unit, temperature_unit, time_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, &
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) &
908 :: model_driver_create
909 type(kim_log_verbosity_type),
intent(in),
value :: log_verbosity
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
915 type(kim_model_driver_create_handle_type),
intent(in) &
916 :: model_driver_create_handle
917 type(kim_log_verbosity_type),
intent(in) :: log_verbosity
918 character(len=*, kind=c_char),
intent(in) :: message
919 type(kim_model_driver_create_type),
pointer :: model_driver_create
921 call c_f_pointer(model_driver_create_handle%p, model_driver_create)
922 call log_entry(model_driver_create, log_verbosity, &
923 trim(message)//c_null_char, 0,
""//c_null_char)
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( &
938 model_driver_create) &
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) &
944 :: model_driver_create
945 end function model_driver_create_string
947 type(kim_model_driver_create_handle_type),
intent(in) &
948 :: model_driver_create_handle
949 character(len=*, kind=c_char),
intent(out) :: string
950 type(kim_model_driver_create_type),
pointer :: model_driver_create
954 call c_f_pointer(model_driver_create_handle%p, model_driver_create)
955 p = model_driver_create_string(model_driver_create)
956 call kim_convert_c_char_ptr_to_string(p, string)
recursive subroutine kim_model_driver_create_convert_unit(from_length_unit, from_energy_unit, from_charge_unit, from_temperature_unit, from_time_unit, to_length_unit, to_energy_unit, to_charge_unit, to_temperature_unit, to_time_unit, length_exponent, energy_exponent, charge_exponent, temperature_exponent, time_exponent, conversion_factor, ierr)
Get the multiplicative factor to convert between a derived unit represented in two different sets of ...
Provides the interface to a KIM API Model object for use by models within their MODEL_ROUTINE_NAME::C...
recursive subroutine kim_model_driver_create_get_parameter_file_name(model_driver_create_handle, index, parameter_file_name, ierr)
Get a particular parameter file name.
recursive subroutine kim_model_driver_create_set_neighbor_list_pointers(model_driver_create_handle, number_of_neighbor_lists, cutoffs, model_will_not_request_neighbors_of_noncontributing_particles)
Set the Model's neighbor list data pointers.
recursive subroutine kim_model_driver_create_set_influence_distance_pointer(model_driver_create_handle, influence_distance)
Set the Model's influence distance data pointer.
recursive subroutine kim_model_driver_create_get_parameter_file_basename(model_driver_create_handle, index, parameter_file_basename, ierr)
Get a particular parameter file basename. The file is located in the Model's parameter file directory...
recursive subroutine kim_model_driver_create_log_entry(model_driver_create_handle, log_verbosity, message)
Write a log entry into the log file.
An Extensible Enumeration for the ModelRoutineName's supported by the KIM API.
recursive subroutine kim_model_driver_create_set_parameter_pointer_integer(model_driver_create_handle, int1, name, description, ierr)
Set the next parameter data pointer to be provided by the model.
recursive subroutine kim_model_driver_create_set_units(model_driver_create_handle, length_unit, energy_unit, charge_unit, temperature_unit, time_unit, ierr)
Set the Model's base unit values.
recursive subroutine kim_model_driver_create_set_model_numbering(model_driver_create_handle, numbering, ierr)
Set the Model's particle Numbering.
An Extensible Enumeration for the Numbering's supported by the KIM API.
recursive subroutine kim_model_driver_create_set_species_code(model_driver_create_handle, species_name, code, ierr)
Set integer code for supported SpeciesName.
An Extensible Enumeration for the LanguageName's supported by the KIM API.
recursive subroutine kim_model_driver_create_set_model_buffer_pointer(model_driver_create_handle, ptr)
Set the Model's buffer pointer within the Model object.
An Extensible Enumeration for the SpeciesName's supported by the KIM API.
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)
recursive subroutine set_parameter(model_create, extent, int1, name, description, ierr)
recursive subroutine kim_model_driver_create_get_number_of_parameter_files(model_driver_create_handle, number_of_parameter_files)
Get the number of parameter files provided by the parameterized model.
recursive subroutine kim_model_driver_create_to_string(model_driver_create_handle, string)
Get a string representing the internal state of the Model object.
type(kim_model_driver_create_handle_type), save, public, protected kim_model_driver_create_null_handle
NULL handle for use in comparisons.
recursive subroutine kim_model_driver_create_set_routine_pointer(model_driver_create_handle, model_routine_name, language_name, required, fptr, ierr)
Set the function pointer for the ModelRoutineName of interest.
recursive subroutine kim_model_driver_create_set_parameter_pointer_double(model_driver_create_handle, double1, name, description, ierr)
Set the next parameter data pointer to be provided by the model.
An Extensible Enumeration for the LogVerbosity's supported by the KIM API.