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
105 module procedure kim_model_create_set_influence_distance_pointer
115 module procedure kim_model_create_set_neighbor_list_pointers
124 module procedure kim_model_create_set_routine_pointer
133 module procedure kim_model_create_set_species_code
144 module procedure kim_model_create_set_parameter_pointer_integer
145 module procedure kim_model_create_set_parameter_pointer_double
155 module procedure kim_model_create_set_model_buffer_pointer
164 module procedure kim_model_create_set_units
173 module procedure kim_model_create_convert_unit
182 module procedure kim_model_create_log_entry
191 module procedure kim_model_create_to_string
198 logical recursive function kim_model_create_handle_equal(lhs, 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)
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
241 end function set_model_numbering
244 type(kim_numbering_type),
intent(in) :: numbering
245 integer(c_int),
intent(out) :: ierr
250 end subroutine kim_model_create_set_model_numbering
258 recursive subroutine kim_model_create_set_influence_distance_pointer( &
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
274 real(c_double),
intent(in),
target :: influence_distance
279 c_loc(influence_distance))
280 end subroutine kim_model_create_set_influence_distance_pointer
288 recursive subroutine kim_model_create_set_neighbor_list_pointers( &
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
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))
320 end subroutine kim_model_create_set_neighbor_list_pointers
327 recursive subroutine kim_model_create_set_routine_pointer( &
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
345 :: model_routine_name
347 integer(c_int),
intent(in),
value :: required
348 type(c_funptr),
intent(in),
value :: fptr
349 end function set_routine_pointer
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)
362 end subroutine kim_model_create_set_routine_pointer
369 recursive subroutine kim_model_create_set_species_code( &
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
384 integer(c_int),
intent(in),
value :: code
385 end function set_species_code
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)
395 end subroutine kim_model_create_set_species_code
403 recursive subroutine kim_model_create_set_parameter_pointer_integer( &
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( &
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)
451 end subroutine kim_model_create_set_parameter_pointer_integer
459 recursive subroutine kim_model_create_set_parameter_pointer_double( &
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)
506 end subroutine kim_model_create_set_parameter_pointer_double
514 recursive subroutine kim_model_create_set_model_buffer_pointer( &
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
529 type(c_ptr),
intent(in) :: ptr
534 end subroutine kim_model_create_set_model_buffer_pointer
541 recursive subroutine kim_model_create_set_units( &
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
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)
584 end subroutine kim_model_create_set_units
591 recursive subroutine kim_model_create_convert_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, &
662 end subroutine kim_model_create_convert_unit
669 recursive subroutine kim_model_create_log_entry(model_create_handle, &
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(*)
687 end subroutine log_entry
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, &
697 end subroutine kim_model_create_log_entry
704 recursive subroutine kim_model_create_to_string(model_create_handle, string)
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
718 character(len=*, kind=c_char),
intent(out) :: string
725 call kim_convert_c_char_ptr_to_string(p, string)
726 end subroutine kim_model_create_to_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.
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.