39 use,
intrinsic :: iso_c_binding
45 kim_model_driver_create_handle_type, &
51 kim_get_parameter_file_directory_name, &
52 kim_get_number_of_parameter_files, &
53 kim_get_parameter_file_name, &
54 kim_get_parameter_file_basename, &
55 kim_set_model_numbering, &
56 kim_set_influence_distance_pointer, &
57 kim_set_neighbor_list_pointers, &
58 kim_set_routine_pointer, &
59 kim_set_species_code, &
60 kim_set_parameter_pointer, &
61 kim_set_model_buffer_pointer, &
72 type, bind(c) :: kim_model_driver_create_handle_type
73 type(c_ptr) :: p = c_null_ptr
74 end type kim_model_driver_create_handle_type
79 type(kim_model_driver_create_handle_type),
protected,
save &
85 interface operator(.eq.)
86 module procedure kim_model_driver_create_handle_equal
87 end interface operator(.eq.)
92 interface operator(.ne.)
93 module procedure kim_model_driver_create_handle_not_equal
94 end interface operator(.ne.)
102 interface kim_get_parameter_file_directory_name
103 module procedure kim_model_driver_create_get_parameter_file_directory_name
104 end interface kim_get_parameter_file_directory_name
112 interface kim_get_number_of_parameter_files
114 end interface kim_get_number_of_parameter_files
125 interface kim_get_parameter_file_name
127 end interface kim_get_parameter_file_name
135 interface kim_get_parameter_file_basename
137 end interface kim_get_parameter_file_basename
145 interface kim_set_model_numbering
147 end interface kim_set_model_numbering
155 interface kim_set_influence_distance_pointer
157 end interface kim_set_influence_distance_pointer
165 interface kim_set_neighbor_list_pointers
167 end interface kim_set_neighbor_list_pointers
175 interface kim_set_routine_pointer
177 end interface kim_set_routine_pointer
185 interface kim_set_species_code
187 end interface kim_set_species_code
196 interface kim_set_parameter_pointer
199 end interface kim_set_parameter_pointer
207 interface kim_set_model_buffer_pointer
209 end interface kim_set_model_buffer_pointer
216 interface kim_set_units
218 end interface kim_set_units
225 interface kim_convert_unit
227 end interface kim_convert_unit
234 interface kim_log_entry
236 end interface kim_log_entry
243 interface kim_to_string
245 end interface kim_to_string
251 logical recursive function kim_model_driver_create_handle_equal(lhs, rhs)
253 type(kim_model_driver_create_handle_type),
intent(in) :: lhs
254 type(kim_model_driver_create_handle_type),
intent(in) :: rhs
256 if ((.not. c_associated(lhs%p)) .and. (.not. c_associated(rhs%p)))
then 257 kim_model_driver_create_handle_equal = .true.
259 kim_model_driver_create_handle_equal = c_associated(lhs%p, rhs%p)
261 end function kim_model_driver_create_handle_equal
266 logical recursive function kim_model_driver_create_handle_not_equal(lhs, rhs)
268 type(kim_model_driver_create_handle_type),
intent(in) :: lhs
269 type(kim_model_driver_create_handle_type),
intent(in) :: rhs
271 kim_model_driver_create_handle_not_equal = .not. (lhs == rhs)
272 end function kim_model_driver_create_handle_not_equal
280 recursive subroutine &
281 kim_model_driver_create_get_parameter_file_directory_name( &
282 model_driver_create_handle, directory_name)
283 use kim_interoperable_types_module
, only: kim_model_driver_create_type
284 use kim_convert_string_module
, only: kim_convert_c_char_ptr_to_string
287 recursive subroutine get_parameter_file_directory_name( &
288 model_driver_create, directory_name) &
289 bind(c, name=
"KIM_ModelDriverCreate_GetParameterFileDirectoryName")
290 use,
intrinsic :: iso_c_binding
291 use kim_interoperable_types_module
, only: kim_model_driver_create_type
294 type(c_ptr),
intent(out) :: directory_name
295 end subroutine get_parameter_file_directory_name
297 type(kim_model_driver_create_handle_type),
intent(in) :: &
298 model_driver_create_handle
299 character(len=*, kind=c_char),
intent(out) :: directory_name
302 type(c_ptr) pdirectory_name
306 call kim_convert_c_char_ptr_to_string(pdirectory_name, directory_name)
307 end subroutine kim_model_driver_create_get_parameter_file_directory_name
316 model_driver_create_handle, number_of_parameter_files)
317 use kim_interoperable_types_module
, only: kim_model_driver_create_type
320 recursive subroutine get_number_of_parameter_files( &
321 model_driver_create, number_of_parameter_files) &
322 bind(c, name=
"KIM_ModelDriverCreate_GetNumberOfParameterFiles")
323 use,
intrinsic :: iso_c_binding
324 use kim_interoperable_types_module
, only: kim_model_driver_create_type
326 type(kim_model_driver_create_type),
intent(in) &
327 :: model_driver_create
328 integer(c_int),
intent(out) :: number_of_parameter_files
329 end subroutine get_number_of_parameter_files
331 type(kim_model_driver_create_handle_type),
intent(in) &
332 :: model_driver_create_handle
333 integer(c_int),
intent(out) :: number_of_parameter_files
334 type(kim_model_driver_create_type),
pointer :: model_driver_create
336 call c_f_pointer(model_driver_create_handle%p, model_driver_create)
337 call get_number_of_parameter_files(model_driver_create, &
338 number_of_parameter_files)
351 model_driver_create_handle, index, parameter_file_name, ierr)
352 use kim_convert_string_module
, only: kim_convert_c_char_ptr_to_string
353 use kim_interoperable_types_module
, only: kim_model_driver_create_type
356 integer(c_int) recursive function get_parameter_file_name( &
357 model_driver_create, index, parameter_file_name) &
358 bind(c, name=
"KIM_ModelDriverCreate_GetParameterFileName")
359 use,
intrinsic :: iso_c_binding
360 use kim_interoperable_types_module
, only: kim_model_driver_create_type
362 type(kim_model_driver_create_type),
intent(in) &
363 :: model_driver_create
364 integer(c_int),
intent(in),
value :: index
365 type(c_ptr),
intent(out) :: parameter_file_name
366 end function get_parameter_file_name
368 type(kim_model_driver_create_handle_type),
intent(in) &
369 :: model_driver_create_handle
370 integer(c_int),
intent(in) :: index
371 character(len=*, kind=c_char),
intent(out) :: parameter_file_name
372 integer(c_int),
intent(out) :: ierr
373 type(kim_model_driver_create_type),
pointer :: model_driver_create
377 call c_f_pointer(model_driver_create_handle%p, model_driver_create)
378 ierr = get_parameter_file_name(model_driver_create, &
380 call kim_convert_c_char_ptr_to_string(p, parameter_file_name)
390 model_driver_create_handle, index, parameter_file_basename, ierr)
391 use kim_convert_string_module
, only: kim_convert_c_char_ptr_to_string
392 use kim_interoperable_types_module
, only: kim_model_driver_create_type
395 integer(c_int) recursive function get_parameter_file_basename( &
396 model_driver_create, index, parameter_file_basename) &
397 bind(c, name=
"KIM_ModelDriverCreate_GetParameterFileBasename")
398 use,
intrinsic :: iso_c_binding
399 use kim_interoperable_types_module
, only: kim_model_driver_create_type
401 type(kim_model_driver_create_type),
intent(in) &
402 :: model_driver_create
403 integer(c_int),
intent(in),
value :: index
404 type(c_ptr),
intent(out) :: parameter_file_basename
405 end function get_parameter_file_basename
407 type(kim_model_driver_create_handle_type),
intent(in) &
408 :: model_driver_create_handle
409 integer(c_int),
intent(in) :: index
410 character(len=*, kind=c_char),
intent(out) :: parameter_file_basename
411 integer(c_int),
intent(out) :: ierr
412 type(kim_model_driver_create_type),
pointer :: model_driver_create
416 call c_f_pointer(model_driver_create_handle%p, model_driver_create)
417 ierr = get_parameter_file_basename(model_driver_create, &
419 call kim_convert_c_char_ptr_to_string(p, parameter_file_basename)
429 model_driver_create_handle, numbering, ierr)
431 use kim_interoperable_types_module
, only: kim_model_driver_create_type
434 integer(c_int) recursive function set_model_numbering( &
435 model_driver_create, numbering) &
436 bind(c, name=
"KIM_ModelDriverCreate_SetModelNumbering")
437 use,
intrinsic :: iso_c_binding
439 use kim_interoperable_types_module
, only: kim_model_driver_create_type
441 type(kim_model_driver_create_type),
intent(in) &
442 :: model_driver_create
443 type(kim_numbering_type),
intent(in),
value :: numbering
444 end function set_model_numbering
446 type(kim_model_driver_create_handle_type),
intent(in) &
447 :: model_driver_create_handle
448 type(kim_numbering_type),
intent(in) :: numbering
449 integer(c_int),
intent(out) :: ierr
450 type(kim_model_driver_create_type),
pointer :: model_driver_create
452 call c_f_pointer(model_driver_create_handle%p, model_driver_create)
453 ierr = set_model_numbering(model_driver_create, numbering)
463 model_driver_create_handle, influence_distance)
464 use kim_interoperable_types_module
, only: kim_model_driver_create_type
467 recursive subroutine set_influence_distance_pointer(model_driver_create, &
468 influence_distance) &
469 bind(c, name=
"KIM_ModelDriverCreate_SetInfluenceDistancePointer")
470 use,
intrinsic :: iso_c_binding
471 use kim_interoperable_types_module
, only: kim_model_driver_create_type
473 type(kim_model_driver_create_type),
intent(in) &
474 :: model_driver_create
475 type(c_ptr),
intent(in),
value :: influence_distance
476 end subroutine set_influence_distance_pointer
478 type(kim_model_driver_create_handle_type),
intent(in) &
479 :: model_driver_create_handle
480 real(c_double),
intent(in),
target :: influence_distance
481 type(kim_model_driver_create_type),
pointer :: model_driver_create
483 call c_f_pointer(model_driver_create_handle%p, model_driver_create)
484 call set_influence_distance_pointer(model_driver_create, &
485 c_loc(influence_distance))
495 model_driver_create_handle, number_of_neighbor_lists, cutoffs, &
496 model_will_not_request_neighbors_of_noncontributing_particles)
497 use kim_interoperable_types_module
, only: kim_model_driver_create_type
500 recursive subroutine set_neighbor_list_pointers( &
501 model_driver_create, number_of_neighbor_lists, cutoffs_ptr, &
502 model_will_not_request_neighbors_of_noncontributing_particles) &
503 bind(c, name=
"KIM_ModelDriverCreate_SetNeighborListPointers")
504 use,
intrinsic :: iso_c_binding
505 use kim_interoperable_types_module
, only: kim_model_driver_create_type
507 type(kim_model_driver_create_type),
intent(in) &
508 :: model_driver_create
509 integer(c_int),
intent(in),
value :: number_of_neighbor_lists
510 type(c_ptr),
intent(in),
value :: cutoffs_ptr
511 type(c_ptr),
intent(in),
value :: &
512 model_will_not_request_neighbors_of_noncontributing_particles
513 end subroutine set_neighbor_list_pointers
515 type(kim_model_driver_create_handle_type),
intent(in) &
516 :: model_driver_create_handle
517 integer(c_int),
intent(in) :: number_of_neighbor_lists
518 real(c_double),
intent(in),
target :: cutoffs(number_of_neighbor_lists)
519 integer(c_int),
intent(in),
target :: &
520 model_will_not_request_neighbors_of_noncontributing_particles( &
521 number_of_neighbor_lists)
523 type(kim_model_driver_create_type),
pointer :: model_driver_create
525 call c_f_pointer(model_driver_create_handle%p, model_driver_create)
526 call set_neighbor_list_pointers( &
527 model_driver_create, number_of_neighbor_lists, c_loc(cutoffs), &
528 c_loc(model_will_not_request_neighbors_of_noncontributing_particles))
538 model_driver_create_handle, model_routine_name, language_name, required, &
542 use kim_interoperable_types_module
, only: kim_model_driver_create_type
545 integer(c_int) recursive function set_routine_pointer( &
546 model_driver_create, model_routine_name, language_name, required, &
547 fptr) bind(c, name="KIM_ModelDriverCreate_SetRoutinePointer")
548 use,
intrinsic :: iso_c_binding
551 use kim_interoperable_types_module
, only: kim_model_driver_create_type
553 type(kim_model_driver_create_type),
intent(in) &
554 :: model_driver_create
555 type(kim_model_routine_name_type),
intent(in),
value &
556 :: model_routine_name
557 type(kim_language_name_type),
intent(in),
value :: language_name
558 integer(c_int),
intent(in),
value :: required
559 type(c_funptr),
intent(in),
value :: fptr
560 end function set_routine_pointer
562 type(kim_model_driver_create_handle_type),
intent(in) &
563 :: model_driver_create_handle
564 type(kim_model_routine_name_type),
intent(in) :: model_routine_name
565 type(kim_language_name_type),
intent(in) :: language_name
566 integer(c_int),
intent(in) :: required
567 type(c_funptr),
intent(in),
value :: fptr
568 integer(c_int),
intent(out) :: ierr
569 type(kim_model_driver_create_type),
pointer :: model_driver_create
571 call c_f_pointer(model_driver_create_handle%p, model_driver_create)
572 ierr = set_routine_pointer(model_driver_create, model_routine_name, &
573 language_name, required, fptr)
583 model_driver_create_handle, species_name, code, ierr)
585 use kim_interoperable_types_module
, only: kim_model_driver_create_type
588 integer(c_int) recursive function set_species_code(model_driver_create, &
589 species_name, code) &
590 bind(c, name=
"KIM_ModelDriverCreate_SetSpeciesCode")
591 use,
intrinsic :: iso_c_binding
593 use kim_interoperable_types_module
, only: kim_model_driver_create_type
595 type(kim_model_driver_create_type),
intent(in) &
596 :: model_driver_create
597 type(kim_species_name_type),
intent(in),
value :: species_name
598 integer(c_int),
intent(in),
value :: code
599 end function set_species_code
601 type(kim_model_driver_create_handle_type),
intent(in) &
602 :: model_driver_create_handle
603 type(kim_species_name_type),
intent(in) :: species_name
604 integer(c_int),
intent(in) :: code
605 integer(c_int),
intent(out) :: ierr
606 type(kim_model_driver_create_type),
pointer :: model_driver_create
608 call c_f_pointer(model_driver_create_handle%p, model_driver_create)
609 ierr = set_species_code(model_driver_create, species_name, code)
619 model_driver_create_handle, int1, name, description, ierr)
620 use kim_interoperable_types_module
, only: kim_model_driver_create_type
622 type(kim_model_driver_create_handle_type),
intent(in) &
623 :: model_driver_create_handle
624 integer(c_int),
intent(in),
target :: int1(:)
625 character(len=*, kind=c_char),
intent(in) :: name
626 character(len=*, kind=c_char),
intent(in) :: description
627 integer(c_int),
intent(out) :: ierr
628 type(kim_model_driver_create_type),
pointer :: model_driver_create
630 call c_f_pointer(model_driver_create_handle%p, model_driver_create)
631 call set_parameter(model_driver_create,
size(int1, 1, c_int), int1, &
632 name, description, ierr)
636 recursive subroutine set_parameter(model_driver_create, extent, int1, &
637 name, description, ierr)
638 use kim_interoperable_types_module
, only: kim_model_driver_create_type
641 integer(c_int) recursive function set_parameter_pointer_integer( &
642 model_driver_create, extent, ptr, name, description) &
643 bind(c, name=
"KIM_ModelDriverCreate_SetParameterPointerInteger")
644 use,
intrinsic :: iso_c_binding
645 use kim_interoperable_types_module
, only: &
646 kim_model_driver_create_type
648 type(kim_model_driver_create_type),
intent(in) &
649 :: model_driver_create
650 integer(c_int),
intent(in),
value :: extent
651 type(c_ptr),
intent(in),
value :: ptr
652 character(c_char),
intent(in) :: name(*)
653 character(c_char),
intent(in) :: description(*)
654 end function set_parameter_pointer_integer
656 type(kim_model_driver_create_type),
intent(in) &
657 :: model_driver_create
658 integer(c_int),
intent(in) :: extent
659 integer(c_int),
intent(in),
target :: int1(extent)
660 character(len=*, kind=c_char),
intent(in) :: name
661 character(len=*, kind=c_char),
intent(in) :: description
662 integer(c_int),
intent(out) :: ierr
664 ierr = set_parameter_pointer_integer(model_driver_create, &
667 trim(name)//c_null_char, &
668 trim(description)//c_null_char)
679 model_driver_create_handle, double1, name, description, ierr)
680 use kim_interoperable_types_module
, only: kim_model_driver_create_type
682 type(kim_model_driver_create_handle_type),
intent(in) &
683 :: model_driver_create_handle
684 real(c_double),
intent(in),
target :: double1(:)
685 character(len=*, kind=c_char),
intent(in) :: name
686 character(len=*, kind=c_char),
intent(in) :: description
687 integer(c_int),
intent(out) :: ierr
688 type(kim_model_driver_create_type),
pointer :: model_driver_create
690 call c_f_pointer(model_driver_create_handle%p, model_driver_create)
691 call set_parameter(model_driver_create,
size(double1, 1, c_int), &
692 double1, name, description, ierr)
696 recursive subroutine set_parameter(model_driver_create, extent, double1, &
697 name, description, ierr)
698 use kim_interoperable_types_module
, only: kim_model_driver_create_type
701 integer(c_int) recursive function set_parameter_pointer_double( &
702 model_driver_create, extent, ptr, name, description) &
703 bind(c, name=
"KIM_ModelDriverCreate_SetParameterPointerDouble")
704 use,
intrinsic :: iso_c_binding
705 use kim_interoperable_types_module
, only: &
706 kim_model_driver_create_type
708 type(kim_model_driver_create_type),
intent(in) &
709 :: model_driver_create
710 integer(c_int),
intent(in),
value :: extent
711 type(c_ptr),
intent(in),
value :: ptr
712 character(c_char),
intent(in) :: name(*)
713 character(c_char),
intent(in) :: description(*)
714 end function set_parameter_pointer_double
716 type(kim_model_driver_create_type),
intent(in) &
717 :: model_driver_create
718 integer(c_int),
intent(in) :: extent
719 real(c_double),
intent(in),
target :: double1(extent)
720 character(len=*, kind=c_char),
intent(in) :: name
721 character(len=*, kind=c_char),
intent(in) :: description
722 integer(c_int),
intent(out) :: ierr
724 ierr = set_parameter_pointer_double(model_driver_create, &
727 trim(name)//c_null_char, &
728 trim(description)//c_null_char)
739 model_driver_create_handle, ptr)
740 use kim_interoperable_types_module
, only: kim_model_driver_create_type
743 recursive subroutine set_model_buffer_pointer(model_driver_create, ptr) &
744 bind(c, name=
"KIM_ModelDriverCreate_SetModelBufferPointer")
745 use,
intrinsic :: iso_c_binding
746 use kim_interoperable_types_module
, only: kim_model_driver_create_type
748 type(kim_model_driver_create_type),
intent(in) &
749 :: model_driver_create
750 type(c_ptr),
intent(in),
value :: ptr
751 end subroutine set_model_buffer_pointer
753 type(kim_model_driver_create_handle_type),
intent(in) &
754 :: model_driver_create_handle
755 type(c_ptr),
intent(in) :: ptr
756 type(kim_model_driver_create_type),
pointer :: model_driver_create
758 call c_f_pointer(model_driver_create_handle%p, model_driver_create)
759 call set_model_buffer_pointer(model_driver_create, ptr)
768 model_driver_create_handle, length_unit, energy_unit, charge_unit, &
769 temperature_unit, time_unit, ierr)
771 kim_energy_unit_type, &
772 kim_charge_unit_type, &
773 kim_temperature_unit_type, &
775 use kim_interoperable_types_module
, only: kim_model_driver_create_type
778 integer(c_int) recursive function set_units( &
779 model_driver_create, length_unit, energy_unit, charge_unit, &
780 temperature_unit, time_unit) &
781 bind(c, name=
"KIM_ModelDriverCreate_SetUnits")
782 use,
intrinsic :: iso_c_binding
784 kim_energy_unit_type, &
785 kim_charge_unit_type, &
786 kim_temperature_unit_type, &
788 use kim_interoperable_types_module
, only: kim_model_driver_create_type
790 type(kim_model_driver_create_type),
intent(in) &
791 :: model_driver_create
792 type(kim_length_unit_type),
intent(in),
value :: length_unit
793 type(kim_energy_unit_type),
intent(in),
value :: energy_unit
794 type(kim_charge_unit_type),
intent(in),
value :: charge_unit
795 type(kim_temperature_unit_type),
intent(in),
value :: temperature_unit
796 type(kim_time_unit_type),
intent(in),
value :: time_unit
797 end function set_units
799 type(kim_model_driver_create_handle_type),
intent(in) &
800 :: model_driver_create_handle
801 type(kim_length_unit_type),
intent(in) :: length_unit
802 type(kim_energy_unit_type),
intent(in) :: energy_unit
803 type(kim_charge_unit_type),
intent(in) :: charge_unit
804 type(kim_temperature_unit_type),
intent(in) :: temperature_unit
805 type(kim_time_unit_type),
intent(in) :: time_unit
806 integer(c_int),
intent(out) :: ierr
807 type(kim_model_driver_create_type),
pointer :: model_driver_create
809 call c_f_pointer(model_driver_create_handle%p, model_driver_create)
810 ierr = set_units(model_driver_create, length_unit, energy_unit, &
811 charge_unit, temperature_unit, time_unit)
820 from_length_unit, from_energy_unit, &
821 from_charge_unit, from_temperature_unit, from_time_unit, &
822 to_length_unit, to_energy_unit, to_charge_unit, to_temperature_unit, &
823 to_time_unit, length_exponent, energy_exponent, charge_exponent, &
824 temperature_exponent, time_exponent, conversion_factor, ierr)
832 integer(c_int) recursive function convert_unit( &
833 from_length_unit, from_energy_unit, &
834 from_charge_unit, from_temperature_unit, from_time_unit, &
835 to_length_unit, to_energy_unit, to_charge_unit, to_temperature_unit, &
836 to_time_unit, length_exponent, energy_exponent, charge_exponent, &
837 temperature_exponent, time_exponent, conversion_factor) &
838 bind(c, name=
"KIM_ModelDriverCreate_ConvertUnit")
839 use,
intrinsic :: iso_c_binding
846 type(kim_length_unit_type),
intent(in),
value :: from_length_unit
847 type(kim_energy_unit_type),
intent(in),
value :: from_energy_unit
848 type(kim_charge_unit_type),
intent(in),
value :: from_charge_unit
849 type(kim_temperature_unit_type),
intent(in),
value :: &
850 from_temperature_unit
851 type(kim_time_unit_type),
intent(in),
value :: from_time_unit
852 type(kim_length_unit_type),
intent(in),
value :: to_length_unit
853 type(kim_energy_unit_type),
intent(in),
value :: to_energy_unit
854 type(kim_charge_unit_type),
intent(in),
value :: to_charge_unit
855 type(kim_temperature_unit_type),
intent(in),
value :: &
857 type(kim_time_unit_type),
intent(in),
value :: to_time_unit
858 real(c_double),
intent(in),
value :: length_exponent
859 real(c_double),
intent(in),
value :: energy_exponent
860 real(c_double),
intent(in),
value :: charge_exponent
861 real(c_double),
intent(in),
value :: temperature_exponent
862 real(c_double),
intent(in),
value :: time_exponent
863 real(c_double),
intent(out) :: conversion_factor
864 end function convert_unit
866 type(kim_length_unit_type),
intent(in) :: from_length_unit
867 type(kim_energy_unit_type),
intent(in) :: from_energy_unit
868 type(kim_charge_unit_type),
intent(in) :: from_charge_unit
869 type(kim_temperature_unit_type),
intent(in) :: from_temperature_unit
870 type(kim_time_unit_type),
intent(in) :: from_time_unit
871 type(kim_length_unit_type),
intent(in) :: to_length_unit
872 type(kim_energy_unit_type),
intent(in) :: to_energy_unit
873 type(kim_charge_unit_type),
intent(in) :: to_charge_unit
874 type(kim_temperature_unit_type),
intent(in) :: to_temperature_unit
875 type(kim_time_unit_type),
intent(in) :: to_time_unit
876 real(c_double),
intent(in) :: length_exponent
877 real(c_double),
intent(in) :: energy_exponent
878 real(c_double),
intent(in) :: charge_exponent
879 real(c_double),
intent(in) :: temperature_exponent
880 real(c_double),
intent(in) :: time_exponent
881 real(c_double),
intent(out) :: conversion_factor
882 integer(c_int),
intent(out) :: ierr
884 ierr = convert_unit(from_length_unit, from_energy_unit, from_charge_unit, &
885 from_temperature_unit, from_time_unit, to_length_unit, &
886 to_energy_unit, to_charge_unit, to_temperature_unit, &
887 to_time_unit, length_exponent, energy_exponent, &
888 charge_exponent, temperature_exponent, time_exponent, &
898 model_driver_create_handle, log_verbosity, message)
900 use kim_interoperable_types_module
, only: kim_model_driver_create_type
903 recursive subroutine log_entry(model_driver_create, log_verbosity, &
904 message, line_number, file_name) &
905 bind(c, name=
"KIM_ModelDriverCreate_LogEntry")
906 use,
intrinsic :: iso_c_binding
908 use kim_interoperable_types_module
, only: kim_model_driver_create_type
910 type(kim_model_driver_create_type),
intent(in) &
911 :: model_driver_create
912 type(kim_log_verbosity_type),
intent(in),
value :: log_verbosity
913 character(c_char),
intent(in) :: message(*)
914 integer(c_int),
intent(in),
value :: line_number
915 character(c_char),
intent(in) :: file_name(*)
916 end subroutine log_entry
918 type(kim_model_driver_create_handle_type),
intent(in) &
919 :: model_driver_create_handle
920 type(kim_log_verbosity_type),
intent(in) :: log_verbosity
921 character(len=*, kind=c_char),
intent(in) :: message
922 type(kim_model_driver_create_type),
pointer :: model_driver_create
924 call c_f_pointer(model_driver_create_handle%p, model_driver_create)
925 call log_entry(model_driver_create, log_verbosity, &
926 trim(message)//c_null_char, 0,
""//c_null_char)
935 model_driver_create_handle, string)
936 use kim_convert_string_module
, only: kim_convert_c_char_ptr_to_string
937 use kim_interoperable_types_module
, only: kim_model_driver_create_type
940 type(c_ptr)
recursive function model_driver_create_string( &
941 model_driver_create) &
942 bind(c, name=
"KIM_ModelDriverCreate_ToString")
943 use,
intrinsic :: iso_c_binding
944 use kim_interoperable_types_module
, only: kim_model_driver_create_type
946 type(kim_model_driver_create_type),
intent(in) &
947 :: model_driver_create
948 end function model_driver_create_string
950 type(kim_model_driver_create_handle_type),
intent(in) &
951 :: model_driver_create_handle
952 character(len=*, kind=c_char),
intent(out) :: string
953 type(kim_model_driver_create_type),
pointer :: model_driver_create
957 call c_f_pointer(model_driver_create_handle%p, model_driver_create)
958 p = model_driver_create_string(model_driver_create)
959 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.