36 use,
intrinsic :: iso_c_binding
42 kim_model_create_handle_type, &
48 kim_set_model_numbering, &
49 kim_set_influence_distance_pointer, &
50 kim_set_neighbor_list_pointers, &
51 kim_set_routine_pointer, &
52 kim_set_species_code, &
53 kim_set_parameter_pointer, &
54 kim_set_model_buffer_pointer, &
65 type, bind(c) :: kim_model_create_handle_type
66 type(c_ptr) :: p = c_null_ptr
67 end type kim_model_create_handle_type
72 type(kim_model_create_handle_type),
protected,
save &
78 interface operator(.eq.)
79 module procedure kim_model_create_handle_equal
80 end interface operator(.eq.)
85 interface operator(.ne.)
86 module procedure kim_model_create_handle_not_equal
87 end interface operator(.ne.)
94 interface kim_set_model_numbering
95 module procedure kim_model_create_set_model_numbering
96 end interface kim_set_model_numbering
104 interface kim_set_influence_distance_pointer
106 end interface kim_set_influence_distance_pointer
114 interface kim_set_neighbor_list_pointers
116 end interface kim_set_neighbor_list_pointers
123 interface kim_set_routine_pointer
125 end interface kim_set_routine_pointer
132 interface kim_set_species_code
134 end interface kim_set_species_code
143 interface kim_set_parameter_pointer
146 end interface kim_set_parameter_pointer
154 interface kim_set_model_buffer_pointer
156 end interface kim_set_model_buffer_pointer
163 interface kim_set_units
165 end interface kim_set_units
172 interface kim_convert_unit
174 end interface kim_convert_unit
181 interface kim_log_entry
183 end interface kim_log_entry
190 interface kim_to_string
192 end interface kim_to_string
198 logical recursive function kim_model_create_handle_equal(lhs, rhs)
200 type(kim_model_create_handle_type),
intent(in) :: lhs
201 type(kim_model_create_handle_type),
intent(in) :: rhs
203 if ((.not. c_associated(lhs%p)) .and. (.not. c_associated(rhs%p)))
then 204 kim_model_create_handle_equal = .true.
206 kim_model_create_handle_equal = c_associated(lhs%p, rhs%p)
208 end function kim_model_create_handle_equal
213 logical recursive function kim_model_create_handle_not_equal(lhs, rhs)
215 type(kim_model_create_handle_type),
intent(in) :: lhs
216 type(kim_model_create_handle_type),
intent(in) :: rhs
218 kim_model_create_handle_not_equal = .not. (lhs == rhs)
219 end function kim_model_create_handle_not_equal
226 recursive subroutine kim_model_create_set_model_numbering( &
227 model_create_handle, numbering, ierr)
229 use kim_interoperable_types_module
, only: kim_model_create_type
232 integer(c_int) recursive function set_model_numbering( &
233 model_create, numbering) &
234 bind(c, name=
"KIM_ModelCreate_SetModelNumbering")
235 use,
intrinsic :: iso_c_binding
237 use kim_interoperable_types_module
, only: kim_model_create_type
240 type(kim_numbering_type),
intent(in),
value :: numbering
241 end function set_model_numbering
243 type(kim_model_create_handle_type),
intent(in) :: model_create_handle
244 type(kim_numbering_type),
intent(in) :: numbering
245 integer(c_int),
intent(out) :: ierr
250 end subroutine kim_model_create_set_model_numbering
259 model_create_handle, influence_distance)
260 use kim_interoperable_types_module
, only: kim_model_create_type
263 recursive subroutine set_influence_distance_pointer(model_create, &
264 influence_distance) &
265 bind(c, name=
"KIM_ModelCreate_SetInfluenceDistancePointer")
266 use,
intrinsic :: iso_c_binding
267 use kim_interoperable_types_module
, only: kim_model_create_type
269 type(kim_model_create_type),
intent(in) :: model_create
270 type(c_ptr),
intent(in),
value :: influence_distance
271 end subroutine set_influence_distance_pointer
273 type(kim_model_create_handle_type),
intent(in) :: model_create_handle
274 real(c_double),
intent(in),
target :: influence_distance
275 type(kim_model_create_type),
pointer :: model_create
277 call c_f_pointer(model_create_handle%p, model_create)
278 call set_influence_distance_pointer(model_create, &
279 c_loc(influence_distance))
289 model_create_handle, number_of_neighbor_lists, cutoffs, &
290 model_will_not_request_neighbors_of_noncontributing_particles)
291 use kim_interoperable_types_module
, only: kim_model_create_type
294 recursive subroutine set_neighbor_list_pointers( &
295 model_create, number_of_neighbor_lists, cutoffs_ptr, &
296 model_will_not_request_neighbors_of_noncontributing_particles) &
297 bind(c, name=
"KIM_ModelCreate_SetNeighborListPointers")
298 use,
intrinsic :: iso_c_binding
299 use kim_interoperable_types_module
, only: kim_model_create_type
301 type(kim_model_create_type),
intent(in) :: model_create
302 integer(c_int),
intent(in),
value :: number_of_neighbor_lists
303 type(c_ptr),
intent(in),
value :: cutoffs_ptr
304 type(c_ptr),
intent(in),
value :: &
305 model_will_not_request_neighbors_of_noncontributing_particles
306 end subroutine set_neighbor_list_pointers
308 type(kim_model_create_handle_type),
intent(in) :: model_create_handle
309 integer(c_int),
intent(in) :: number_of_neighbor_lists
310 real(c_double),
intent(in),
target :: cutoffs(number_of_neighbor_lists)
311 integer(c_int),
intent(in),
target :: &
312 model_will_not_request_neighbors_of_noncontributing_particles( &
313 number_of_neighbor_lists)
314 type(kim_model_create_type),
pointer :: model_create
316 call c_f_pointer(model_create_handle%p, model_create)
317 call set_neighbor_list_pointers( &
318 model_create, number_of_neighbor_lists, c_loc(cutoffs), &
319 c_loc(model_will_not_request_neighbors_of_noncontributing_particles))
328 model_create_handle, model_routine_name, language_name, required, fptr, &
332 use kim_interoperable_types_module
, only: kim_model_create_type
335 integer(c_int) recursive function set_routine_pointer( &
336 model_create, model_routine_name, language_name, required, fptr) &
337 bind(c, name=
"KIM_ModelCreate_SetRoutinePointer")
338 use,
intrinsic :: iso_c_binding
341 use kim_interoperable_types_module
, only: kim_model_create_type
343 type(kim_model_create_type),
intent(in) :: model_create
344 type(kim_model_routine_name_type),
intent(in),
value &
345 :: model_routine_name
346 type(kim_language_name_type),
intent(in),
value :: language_name
347 integer(c_int),
intent(in),
value :: required
348 type(c_funptr),
intent(in),
value :: fptr
349 end function set_routine_pointer
351 type(kim_model_create_handle_type),
intent(in) :: model_create_handle
352 type(kim_model_routine_name_type),
intent(in) :: model_routine_name
353 type(kim_language_name_type),
intent(in) :: language_name
354 integer(c_int),
intent(in) :: required
355 type(c_funptr),
intent(in),
value :: fptr
356 integer(c_int),
intent(out) :: ierr
357 type(kim_model_create_type),
pointer :: model_create
359 call c_f_pointer(model_create_handle%p, model_create)
360 ierr = set_routine_pointer(model_create, model_routine_name, &
361 language_name, required, fptr)
370 model_create_handle, species_name, code, ierr)
372 use kim_interoperable_types_module
, only: kim_model_create_type
375 integer(c_int) recursive function set_species_code(model_create, &
376 species_name, code) &
377 bind(c, name=
"KIM_ModelCreate_SetSpeciesCode")
378 use,
intrinsic :: iso_c_binding
380 use kim_interoperable_types_module
, only: kim_model_create_type
382 type(kim_model_create_type),
intent(in) :: model_create
383 type(kim_species_name_type),
intent(in),
value :: species_name
384 integer(c_int),
intent(in),
value :: code
385 end function set_species_code
387 type(kim_model_create_handle_type),
intent(in) :: model_create_handle
388 type(kim_species_name_type),
intent(in) :: species_name
389 integer(c_int),
intent(in) :: code
390 integer(c_int),
intent(out) :: ierr
391 type(kim_model_create_type),
pointer :: model_create
393 call c_f_pointer(model_create_handle%p, model_create)
394 ierr = set_species_code(model_create, species_name, code)
404 model_create_handle, int1, name, description, ierr)
405 use kim_interoperable_types_module
, only: kim_model_create_type
407 type(kim_model_create_handle_type),
intent(in) :: model_create_handle
408 integer(c_int),
intent(in),
target :: int1(:)
409 character(len=*, kind=c_char),
intent(in) :: name
410 character(len=*, kind=c_char),
intent(in) :: description
411 integer(c_int),
intent(out) :: ierr
412 type(kim_model_create_type),
pointer :: model_create
414 call c_f_pointer(model_create_handle%p, model_create)
415 call set_parameter(model_create,
size(int1, 1, c_int), int1, name, &
420 recursive subroutine set_parameter(model_create, extent, int1, name, &
422 use kim_interoperable_types_module
, only: kim_model_create_type
425 integer(c_int) recursive function set_parameter_pointer_integer( &
426 model_create, extent, ptr, name, description) &
427 bind(c, name=
"KIM_ModelCreate_SetParameterPointerInteger")
428 use,
intrinsic :: iso_c_binding
429 use kim_interoperable_types_module
, only: kim_model_create_type
431 type(kim_model_create_type),
intent(in) :: model_create
432 integer(c_int),
intent(in),
value :: extent
433 type(c_ptr),
intent(in),
value :: ptr
434 character(c_char),
intent(in) :: name(*)
435 character(c_char),
intent(in) :: description(*)
436 end function set_parameter_pointer_integer
438 type(kim_model_create_type),
intent(in) :: model_create
439 integer(c_int),
intent(in) :: extent
440 integer(c_int),
intent(in),
target :: int1(extent)
441 character(len=*, kind=c_char),
intent(in) :: name
442 character(len=*, kind=c_char),
intent(in) :: description
443 integer(c_int),
intent(out) :: ierr
445 ierr = set_parameter_pointer_integer(model_create, &
448 trim(name)//c_null_char, &
449 trim(description)//c_null_char)
460 model_create_handle, double1, name, description, ierr)
461 use kim_interoperable_types_module
, only: kim_model_create_type
463 type(kim_model_create_handle_type),
intent(in) :: model_create_handle
464 real(c_double),
intent(in),
target :: double1(:)
465 character(len=*, kind=c_char),
intent(in) :: name
466 character(len=*, kind=c_char),
intent(in) :: description
467 integer(c_int),
intent(out) :: ierr
468 type(kim_model_create_type),
pointer :: model_create
470 call c_f_pointer(model_create_handle%p, model_create)
471 call set_parameter(model_create,
size(double1, 1, c_int), double1, &
472 name, description, ierr)
476 recursive subroutine set_parameter(model_create, extent, double1, name, &
480 integer(c_int) recursive function set_parameter_pointer_double( &
481 model_create, extent, ptr, name, description) &
482 bind(c, name=
"KIM_ModelCreate_SetParameterPointerDouble")
483 use,
intrinsic :: iso_c_binding
484 use kim_interoperable_types_module
, only: kim_model_create_type
486 type(kim_model_create_type),
intent(in) :: model_create
487 integer(c_int),
intent(in),
value :: extent
488 type(c_ptr),
intent(in),
value :: ptr
489 character(c_char),
intent(in) :: name(*)
490 character(c_char),
intent(in) :: description(*)
491 end function set_parameter_pointer_double
493 type(kim_model_create_type),
intent(in) :: model_create
494 integer(c_int),
intent(in) :: extent
495 real(c_double),
intent(in),
target :: double1(extent)
496 character(len=*, kind=c_char),
intent(in) :: name
497 character(len=*, kind=c_char),
intent(in) :: description
498 integer(c_int),
intent(out) :: ierr
500 ierr = set_parameter_pointer_double(model_create, &
503 trim(name)//c_null_char, &
504 trim(description)//c_null_char)
515 model_create_handle, ptr)
516 use kim_interoperable_types_module
, only: kim_model_create_type
519 recursive subroutine set_model_buffer_pointer(model_create, ptr) &
520 bind(c, name=
"KIM_ModelCreate_SetModelBufferPointer")
521 use,
intrinsic :: iso_c_binding
522 use kim_interoperable_types_module
, only: kim_model_create_type
524 type(kim_model_create_type),
intent(in) :: model_create
525 type(c_ptr),
intent(in),
value :: ptr
526 end subroutine set_model_buffer_pointer
528 type(kim_model_create_handle_type),
intent(in) :: model_create_handle
529 type(c_ptr),
intent(in) :: ptr
530 type(kim_model_create_type),
pointer :: model_create
532 call c_f_pointer(model_create_handle%p, model_create)
533 call set_model_buffer_pointer(model_create, ptr)
542 model_create_handle, length_unit, energy_unit, charge_unit, &
543 temperature_unit, time_unit, ierr)
545 kim_length_unit_type, &
546 kim_energy_unit_type, &
547 kim_charge_unit_type, &
548 kim_temperature_unit_type, &
550 use kim_interoperable_types_module
, only: kim_model_create_type
553 integer(c_int) recursive function set_units( &
554 model_create, length_unit, energy_unit, charge_unit, temperature_unit, &
555 time_unit) bind(c, name="KIM_ModelCreate_SetUnits")
556 use,
intrinsic :: iso_c_binding
558 kim_energy_unit_type, &
559 kim_charge_unit_type, &
560 kim_temperature_unit_type, &
562 use kim_interoperable_types_module
, only: kim_model_create_type
564 type(kim_model_create_type),
intent(in) :: model_create
565 type(kim_length_unit_type),
intent(in),
value :: length_unit
566 type(kim_energy_unit_type),
intent(in),
value :: energy_unit
567 type(kim_charge_unit_type),
intent(in),
value :: charge_unit
568 type(kim_temperature_unit_type),
intent(in),
value :: temperature_unit
569 type(kim_time_unit_type),
intent(in),
value :: time_unit
570 end function set_units
572 type(kim_model_create_handle_type),
intent(in) :: model_create_handle
573 type(kim_length_unit_type),
intent(in) :: length_unit
574 type(kim_energy_unit_type),
intent(in) :: energy_unit
575 type(kim_charge_unit_type),
intent(in) :: charge_unit
576 type(kim_temperature_unit_type),
intent(in) :: temperature_unit
577 type(kim_time_unit_type),
intent(in) :: time_unit
578 integer(c_int),
intent(out) :: ierr
579 type(kim_model_create_type),
pointer :: model_create
581 call c_f_pointer(model_create_handle%p, model_create)
582 ierr = set_units(model_create, length_unit, energy_unit, &
583 charge_unit, temperature_unit, time_unit)
592 from_length_unit, from_energy_unit, &
593 from_charge_unit, from_temperature_unit, from_time_unit, &
594 to_length_unit, to_energy_unit, to_charge_unit, to_temperature_unit, &
595 to_time_unit, length_exponent, energy_exponent, charge_exponent, &
596 temperature_exponent, time_exponent, conversion_factor, ierr)
604 integer(c_int) recursive function convert_unit( &
605 from_length_unit, from_energy_unit, &
606 from_charge_unit, from_temperature_unit, from_time_unit, &
607 to_length_unit, to_energy_unit, to_charge_unit, to_temperature_unit, &
608 to_time_unit, length_exponent, energy_exponent, charge_exponent, &
609 temperature_exponent, time_exponent, conversion_factor) &
610 bind(c, name=
"KIM_ModelCreate_ConvertUnit")
611 use,
intrinsic :: iso_c_binding
618 type(kim_length_unit_type),
intent(in),
value :: from_length_unit
619 type(kim_energy_unit_type),
intent(in),
value :: from_energy_unit
620 type(kim_charge_unit_type),
intent(in),
value :: from_charge_unit
621 type(kim_temperature_unit_type),
intent(in),
value :: &
622 from_temperature_unit
623 type(kim_time_unit_type),
intent(in),
value :: from_time_unit
624 type(kim_length_unit_type),
intent(in),
value :: to_length_unit
625 type(kim_energy_unit_type),
intent(in),
value :: to_energy_unit
626 type(kim_charge_unit_type),
intent(in),
value :: to_charge_unit
627 type(kim_temperature_unit_type),
intent(in),
value :: &
629 type(kim_time_unit_type),
intent(in),
value :: to_time_unit
630 real(c_double),
intent(in),
value :: length_exponent
631 real(c_double),
intent(in),
value :: energy_exponent
632 real(c_double),
intent(in),
value :: charge_exponent
633 real(c_double),
intent(in),
value :: temperature_exponent
634 real(c_double),
intent(in),
value :: time_exponent
635 real(c_double),
intent(out) :: conversion_factor
636 end function convert_unit
638 type(kim_length_unit_type),
intent(in) :: from_length_unit
639 type(kim_energy_unit_type),
intent(in) :: from_energy_unit
640 type(kim_charge_unit_type),
intent(in) :: from_charge_unit
641 type(kim_temperature_unit_type),
intent(in) :: from_temperature_unit
642 type(kim_time_unit_type),
intent(in) :: from_time_unit
643 type(kim_length_unit_type),
intent(in) :: to_length_unit
644 type(kim_energy_unit_type),
intent(in) :: to_energy_unit
645 type(kim_charge_unit_type),
intent(in) :: to_charge_unit
646 type(kim_temperature_unit_type),
intent(in) :: to_temperature_unit
647 type(kim_time_unit_type),
intent(in) :: to_time_unit
648 real(c_double),
intent(in) :: length_exponent
649 real(c_double),
intent(in) :: energy_exponent
650 real(c_double),
intent(in) :: charge_exponent
651 real(c_double),
intent(in) :: temperature_exponent
652 real(c_double),
intent(in) :: time_exponent
653 real(c_double),
intent(out) :: conversion_factor
654 integer(c_int),
intent(out) :: ierr
656 ierr = convert_unit(from_length_unit, from_energy_unit, from_charge_unit, &
657 from_temperature_unit, from_time_unit, to_length_unit, &
658 to_energy_unit, to_charge_unit, to_temperature_unit, &
659 to_time_unit, length_exponent, energy_exponent, &
660 charge_exponent, temperature_exponent, time_exponent, &
670 log_verbosity, message)
672 use kim_interoperable_types_module
, only: kim_model_create_type
675 recursive subroutine log_entry(model_create, log_verbosity, message, &
676 line_number, file_name) &
677 bind(c, name=
"KIM_ModelCreate_LogEntry")
678 use,
intrinsic :: iso_c_binding
680 use kim_interoperable_types_module
, only: kim_model_create_type
682 type(kim_model_create_type),
intent(in) :: model_create
683 type(kim_log_verbosity_type),
intent(in),
value :: log_verbosity
684 character(c_char),
intent(in) :: message(*)
685 integer(c_int),
intent(in),
value :: line_number
686 character(c_char),
intent(in) :: file_name(*)
687 end subroutine log_entry
689 type(kim_model_create_handle_type),
intent(in) :: model_create_handle
690 type(kim_log_verbosity_type),
intent(in) :: log_verbosity
691 character(len=*, kind=c_char),
intent(in) :: message
692 type(kim_model_create_type),
pointer :: model_create
694 call c_f_pointer(model_create_handle%p, model_create)
695 call log_entry(model_create, log_verbosity, trim(message)//c_null_char, &
705 use kim_convert_string_module
, only: kim_convert_c_char_ptr_to_string
706 use kim_interoperable_types_module
, only: kim_model_create_type
709 type(c_ptr)
recursive function model_create_string(
model_create) &
710 bind(c, name=
"KIM_ModelCreate_ToString")
711 use,
intrinsic :: iso_c_binding
712 use kim_interoperable_types_module
, only: kim_model_create_type
714 type(kim_model_create_type),
intent(in) :: model_create
715 end function model_create_string
717 type(kim_model_create_handle_type),
intent(in) :: model_create_handle
718 character(len=*, kind=c_char),
intent(out) :: string
719 type(kim_model_create_type),
pointer :: model_create
723 call c_f_pointer(model_create_handle%p, model_create)
724 p = model_create_string(model_create)
725 call kim_convert_c_char_ptr_to_string(p, string)
recursive subroutine kim_model_create_set_influence_distance_pointer(model_create_handle, influence_distance)
Set the Model's influence distance data pointer.
recursive subroutine kim_model_create_set_model_buffer_pointer(model_create_handle, ptr)
Set the Model's buffer pointer within the Model object.
recursive subroutine kim_model_create_set_parameter_pointer_integer(model_create_handle, int1, name, description, ierr)
Set the next parameter data pointer to be provided by the model.
int model_create(KIM_ModelCreate *const modelCreate, KIM_LengthUnit const requestedLengthUnit, KIM_EnergyUnit const requestedEnergyUnit, KIM_ChargeUnit const requestedChargeUnit, KIM_TemperatureUnit const requestedTemperatureUnit, KIM_TimeUnit const requestedTimeUnit)
An Extensible Enumeration for the ModelRoutineName'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 Numbering's supported by the KIM API.
recursive subroutine kim_model_create_set_species_code(model_create_handle, species_name, code, ierr)
Set integer code for supported SpeciesName.
recursive subroutine kim_model_create_set_units(model_create_handle, length_unit, energy_unit, charge_unit, temperature_unit, time_unit, ierr)
Set the Model's base unit values.
recursive subroutine kim_model_create_set_neighbor_list_pointers(model_create_handle, number_of_neighbor_lists, cutoffs, model_will_not_request_neighbors_of_noncontributing_particles)
Set the Model's neighbor list data pointers.
An Extensible Enumeration for the LanguageName's supported by the KIM API.
recursive subroutine kim_model_create_set_parameter_pointer_double(model_create_handle, double1, name, description, ierr)
Set the next parameter data pointer to be provided by the model.
recursive subroutine kim_model_create_log_entry(model_create_handle, log_verbosity, message)
Write a log entry into the log file.
An Extensible Enumeration for the SpeciesName's supported by the KIM API.
recursive subroutine set_parameter(model_create, extent, int1, name, description, ierr)
recursive subroutine kim_model_create_to_string(model_create_handle, string)
Get a string representing the internal state of the Model object.
recursive subroutine kim_model_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 ...
type(kim_model_create_handle_type), save, public, protected kim_model_create_null_handle
NULL handle for use in comparisons.
An Extensible Enumeration for the LogVerbosity's supported by the KIM API.
recursive subroutine kim_model_create_set_routine_pointer(model_create_handle, model_routine_name, language_name, required, fptr, ierr)
Set the function pointer for the ModelRoutineName of interest.