kim-api 2.3.0+AppleClang.AppleClang.GNU
An Application Programming Interface (API) for the Knowledgebase of Interatomic Models (KIM).
Loading...
Searching...
No Matches
kim_model_driver_create_module.f90
Go to the documentation of this file.
1!
2! KIM-API: An API for interatomic models
3! Copyright (c) 2013--2022, Regents of the University of Minnesota.
4! All rights reserved.
5!
6! Contributors:
7! Ryan S. Elliott
8!
9! SPDX-License-Identifier: LGPL-2.1-or-later
10!
11! This library is free software; you can redistribute it and/or
12! modify it under the terms of the GNU Lesser General Public
13! License as published by the Free Software Foundation; either
14! version 2.1 of the License, or (at your option) any later version.
15!
16! This library is distributed in the hope that it will be useful,
17! but WITHOUT ANY WARRANTY; without even the implied warranty of
18! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19! Lesser General Public License for more details.
20!
21! You should have received a copy of the GNU Lesser General Public License
22! along with this library; if not, write to the Free Software Foundation,
23! Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
24!
25
26!
27! Release: This file is part of the kim-api-2.3.0 package.
28!
29
36 use, intrinsic :: iso_c_binding
37 implicit none
38 private
39
40 public &
41 ! Derived types
43 ! Constants
45 ! Routines
46 operator(.eq.), &
47 operator(.ne.), &
63
69 type, bind(c) :: kim_model_driver_create_handle_type
70 type(c_ptr) :: p = c_null_ptr
72
76 type(kim_model_driver_create_handle_type), protected, save &
78
82 interface operator(.eq.)
83 module procedure kim_model_driver_create_handle_equal
84 end interface operator(.eq.)
85
89 interface operator(.ne.)
90 module procedure kim_model_driver_create_handle_not_equal
91 end interface operator(.ne.)
92
100 module procedure kim_model_driver_create_get_parameter_file_directory_name
102
112
124 end interface kim_get_parameter_file_name
125
135
144 end interface kim_set_model_numbering
145
155
165
174 end interface kim_set_routine_pointer
175
184 end interface kim_set_species_code
185
196 end interface kim_set_parameter_pointer
197
206 end interface kim_set_model_buffer_pointer
207
214 module procedure kim_model_driver_create_set_units
215 end interface kim_set_units
216
224 end interface kim_convert_unit
225
232 module procedure kim_model_driver_create_log_entry
233 end interface kim_log_entry
234
241 module procedure kim_model_driver_create_to_string
242 end interface kim_to_string
243
244contains
248 logical recursive function kim_model_driver_create_handle_equal(lhs, rhs)
249 implicit none
250 type(kim_model_driver_create_handle_type), intent(in) :: lhs
251 type(kim_model_driver_create_handle_type), intent(in) :: rhs
252
253 if ((.not. c_associated(lhs%p)) .and. (.not. c_associated(rhs%p))) then
254 kim_model_driver_create_handle_equal = .true.
255 else
256 kim_model_driver_create_handle_equal = c_associated(lhs%p, rhs%p)
257 end if
258 end function kim_model_driver_create_handle_equal
259
263 logical recursive function kim_model_driver_create_handle_not_equal(lhs, rhs)
264 implicit none
265 type(kim_model_driver_create_handle_type), intent(in) :: lhs
266 type(kim_model_driver_create_handle_type), intent(in) :: rhs
267
268 kim_model_driver_create_handle_not_equal = .not. (lhs == rhs)
269 end function kim_model_driver_create_handle_not_equal
270
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
282 implicit none
283 interface
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
289 implicit none
290 type(kim_model_driver_create_type), intent(in) :: model_driver_create
291 type(c_ptr), intent(out) :: directory_name
293 end interface
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
297 type(kim_model_driver_create_type), pointer :: model_driver_create
298
299 type(c_ptr) pdirectory_name
300
301 call c_f_pointer(model_driver_create_handle%p, model_driver_create)
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
305
313 model_driver_create_handle, number_of_parameter_files)
314 use kim_interoperable_types_module, only: kim_model_driver_create_type
315 implicit none
316 interface
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
322 implicit none
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
327 end interface
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
332
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)
337
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
351 implicit none
352 interface
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
358 implicit none
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
364 end interface
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
371
372 type(c_ptr) :: p
373
374 call c_f_pointer(model_driver_create_handle%p, model_driver_create)
376 index - 1, p)
377 call kim_convert_c_char_ptr_to_string(p, parameter_file_name)
379
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
390 implicit none
391 interface
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
397 implicit none
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
403 end interface
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
410
411 type(c_ptr) :: p
412
413 call c_f_pointer(model_driver_create_handle%p, model_driver_create)
415 index - 1, p)
416 call kim_convert_c_char_ptr_to_string(p, parameter_file_basename)
418
426 model_driver_create_handle, numbering, ierr)
428 use kim_interoperable_types_module, only: kim_model_driver_create_type
429 implicit none
430 interface
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
437 implicit none
438 type(kim_model_driver_create_type), intent(in) &
440 type(kim_numbering_type), intent(in), value :: numbering
441 end function set_model_numbering
442 end interface
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
448
449 call c_f_pointer(model_driver_create_handle%p, model_driver_create)
452
460 model_driver_create_handle, influence_distance)
461 use kim_interoperable_types_module, only: kim_model_driver_create_type
462 implicit none
463 interface
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
469 implicit none
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
474 end interface
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
479
480 call c_f_pointer(model_driver_create_handle%p, model_driver_create)
482 c_loc(influence_distance))
484
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
495 implicit none
496 interface
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
503 implicit none
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
511 end interface
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)
519
520 type(kim_model_driver_create_type), pointer :: model_driver_create
521
522 call c_f_pointer(model_driver_create_handle%p, model_driver_create)
524 model_driver_create, number_of_neighbor_lists, c_loc(cutoffs), &
525 c_loc(model_will_not_request_neighbors_of_noncontributing_particles))
527
535 model_driver_create_handle, model_routine_name, language_name, required, &
536 fptr, ierr)
539 use kim_interoperable_types_module, only: kim_model_driver_create_type
540 implicit none
541 interface
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
549 implicit none
550 type(kim_model_driver_create_type), intent(in) &
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
558 end interface
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 ! must be left as "value"!?!
565 integer(c_int), intent(out) :: ierr
566 type(kim_model_driver_create_type), pointer :: model_driver_create
567
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)
572
580 model_driver_create_handle, species_name, code, ierr)
582 use kim_interoperable_types_module, only: kim_model_driver_create_type
583 implicit none
584 interface
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
591 implicit none
592 type(kim_model_driver_create_type), intent(in) &
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
597 end interface
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
604
605 call c_f_pointer(model_driver_create_handle%p, model_driver_create)
606 ierr = set_species_code(model_driver_create, species_name, code)
608
616 model_driver_create_handle, int1, name, description, ierr)
617 use kim_interoperable_types_module, only: kim_model_driver_create_type
618 implicit none
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
626
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)
630 return
631
632 contains
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
636 implicit none
637 interface
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
644 implicit none
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(*)
652 end interface
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
660
662 extent, &
663 c_loc(int1), &
664 trim(name)//c_null_char, &
665 trim(description)//c_null_char)
666 end subroutine set_parameter
668
676 model_driver_create_handle, double1, name, description, ierr)
677 use kim_interoperable_types_module, only: kim_model_driver_create_type
678 implicit none
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
686
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)
690 return
691
692 contains
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
696 implicit none
697 interface
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
704 implicit none
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
712 end interface
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
720
721 ierr = set_parameter_pointer_double(model_driver_create, &
722 extent, &
723 c_loc(double1), &
724 trim(name)//c_null_char, &
725 trim(description)//c_null_char)
726 end subroutine set_parameter
728
736 model_driver_create_handle, ptr)
737 use kim_interoperable_types_module, only: kim_model_driver_create_type
738 implicit none
739 interface
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
744 implicit none
745 type(kim_model_driver_create_type), intent(in) &
747 type(c_ptr), intent(in), value :: ptr
748 end subroutine set_model_buffer_pointer
749 end interface
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
754
755 call c_f_pointer(model_driver_create_handle%p, model_driver_create)
758
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)
767 use kim_unit_system_module, only: kim_length_unit_type, &
768 kim_energy_unit_type, &
769 kim_charge_unit_type, &
770 kim_temperature_unit_type, &
771 kim_time_unit_type
772 use kim_interoperable_types_module, only: kim_model_driver_create_type
773 implicit none
774 interface
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
780 use kim_unit_system_module, only: kim_length_unit_type, &
781 kim_energy_unit_type, &
782 kim_charge_unit_type, &
783 kim_temperature_unit_type, &
784 kim_time_unit_type
785 use kim_interoperable_types_module, only: kim_model_driver_create_type
786 implicit none
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
795 end interface
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
805
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)
810
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)
822 use kim_unit_system_module, only: kim_length_unit_type
823 use kim_unit_system_module, only: kim_energy_unit_type
824 use kim_unit_system_module, only: kim_charge_unit_type
825 use kim_unit_system_module, only: kim_temperature_unit_type
826 use kim_unit_system_module, only: kim_time_unit_type
827 implicit none
828 interface
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
837 use kim_unit_system_module, only: kim_length_unit_type
838 use kim_unit_system_module, only: kim_energy_unit_type
839 use kim_unit_system_module, only: kim_charge_unit_type
840 use kim_unit_system_module, only: kim_temperature_unit_type
841 use kim_unit_system_module, only: kim_time_unit_type
842 implicit none
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 :: &
853 to_temperature_unit
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
862 end interface
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
880
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, &
886 conversion_factor)
888
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
898 implicit none
899 interface
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
906 implicit none
907 type(kim_model_driver_create_type), intent(in) &
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
914 end interface
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
920
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)
925
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
935 implicit none
936 interface
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
942 implicit none
943 type(kim_model_driver_create_type), intent(in) &
944 :: model_driver_create
945 end function model_driver_create_string
946 end interface
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
951
952 type(c_ptr) :: p
953
954 call c_f_pointer(model_driver_create_handle%p, model_driver_create)
956 call kim_convert_c_char_ptr_to_string(p, 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...
Write a log entry into the log file.
Set the Model's buffer pointer within the Model object.
Set the next parameter data pointer to be provided by the model.
Set the function pointer for the ModelRoutineName of interest.
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...
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_species_code(model_driver_create_handle, species_name, code, ierr)
Set integer code for supported SpeciesName.
recursive subroutine kim_model_driver_create_set_model_numbering(model_driver_create_handle, numbering, ierr)
Set the Model's particle Numbering.
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.
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.
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 ...
recursive subroutine kim_model_driver_create_to_string(model_driver_create_handle, string)
Get a string representing the internal state of the Model object.
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_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_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_get_number_of_parameter_files(model_driver_create_handle, number_of_parameter_files)
Get the number of parameter files provided by the parameterized model.
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_influence_distance_pointer(model_driver_create_handle, influence_distance)
Set the Model's influence distance data pointer.
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_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.
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.