36 use,
intrinsic :: iso_c_binding
65 type,
bind(c) :: kim_model_create_handle_type
66 type(c_ptr) :: p = c_null_ptr
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.)
95 module procedure kim_model_create_set_model_numbering
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
239 type(kim_model_create_type),
intent(in) :: model_create
240 type(kim_numbering_type),
intent(in),
value :: 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
246 type(kim_model_create_type),
pointer :: model_create
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
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
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)
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
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
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)
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
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
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
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
404 model_create_handle, int1, name, description, ierr)
405 use kim_interoperable_types_module,
only: kim_model_create_type
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( &
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(*)
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
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
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
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
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
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
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
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
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
684 character(c_char),
intent(in) :: message(*)
685 integer(c_int),
intent(in),
value :: line_number
686 character(c_char),
intent(in) :: file_name(*)
690 type(kim_log_verbosity_type),
intent(in) :: log_verbosity
691 character(len=*, kind=c_char),
intent(in) :: message
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
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
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)
Get the multiplicative factor to convert between a derived unit represented in two different sets of ...
Write a log entry into the log file.
Set the Model's influence distance data pointer.
Set the Model's buffer pointer within the Model object.
Set the Model's particle Numbering.
Set the Model's neighbor list data pointers.
Set the next parameter data pointer to be provided by the model.
Set the function pointer for the ModelRoutineName of interest.
Set integer code for supported SpeciesName.
Set the Model's base unit values.
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...
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.
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.