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( &
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
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
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
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)
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
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
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
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
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
422 use kim_interoperable_types_module,
only: kim_model_create_type
425 integer(c_int) recursive function set_parameter_pointer_integer( &
427 bind(c, name="KIM_ModelCreate_SetParameterPointerInteger")
428 use,
intrinsic :: iso_c_binding
429 use kim_interoperable_types_module,
only: kim_model_create_type
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
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
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
472 name, description, ierr)
480 integer(c_int) recursive function set_parameter_pointer_double( &
482 bind(c, name="KIM_ModelCreate_SetParameterPointerDouble")
483 use,
intrinsic :: iso_c_binding
484 use kim_interoperable_types_module,
only: kim_model_create_type
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
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
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
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
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
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
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
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
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
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
725 call kim_convert_c_char_ptr_to_string(p, string)
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)
recursive subroutine set_parameter(model_create, extent, int1, name, description, ierr)
An Extensible Enumeration for the LanguageName's supported by the KIM API.
An Extensible Enumeration for the LogVerbosity's supported by the KIM API.
Provides the interface to a KIM API Model object for use by models within their MODEL_ROUTINE_NAME::C...
type(kim_model_create_handle_type), save, public, protected kim_model_create_null_handle
NULL handle for use in comparisons.
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.
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.
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_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_create_set_routine_pointer(model_create_handle, model_routine_name, language_name, required, fptr, ierr)
Set the function pointer for the ModelRoutineName of interest.
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_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_to_string(model_create_handle, string)
Get a string representing the internal state of 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.
recursive subroutine kim_model_create_set_species_code(model_create_handle, species_name, code, ierr)
Set integer code for supported SpeciesName.
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.