39 use,
intrinsic :: iso_c_binding
45 kim_model_create_handle_type, &
51 kim_set_model_numbering, &
52 kim_set_influence_distance_pointer, &
53 kim_set_neighbor_list_pointers, &
54 kim_set_routine_pointer, &
55 kim_set_species_code, &
56 kim_set_parameter_pointer, &
57 kim_set_model_buffer_pointer, &
68 type, bind(c) :: kim_model_create_handle_type
69 type(c_ptr) :: p = c_null_ptr
70 end type kim_model_create_handle_type
75 type(kim_model_create_handle_type),
protected,
save &
81 interface operator(.eq.)
82 module procedure kim_model_create_handle_equal
83 end interface operator(.eq.)
88 interface operator(.ne.)
89 module procedure kim_model_create_handle_not_equal
90 end interface operator(.ne.)
97 interface kim_set_model_numbering
98 module procedure kim_model_create_set_model_numbering
99 end interface kim_set_model_numbering
107 interface kim_set_influence_distance_pointer
109 end interface kim_set_influence_distance_pointer
117 interface kim_set_neighbor_list_pointers
119 end interface kim_set_neighbor_list_pointers
126 interface kim_set_routine_pointer
128 end interface kim_set_routine_pointer
135 interface kim_set_species_code
137 end interface kim_set_species_code
146 interface kim_set_parameter_pointer
149 end interface kim_set_parameter_pointer
157 interface kim_set_model_buffer_pointer
159 end interface kim_set_model_buffer_pointer
166 interface kim_set_units
168 end interface kim_set_units
175 interface kim_convert_unit
177 end interface kim_convert_unit
184 interface kim_log_entry
186 end interface kim_log_entry
193 interface kim_to_string
195 end interface kim_to_string
201 logical recursive function kim_model_create_handle_equal(lhs, rhs)
203 type(kim_model_create_handle_type),
intent(in) :: lhs
204 type(kim_model_create_handle_type),
intent(in) :: rhs
206 if ((.not. c_associated(lhs%p)) .and. (.not. c_associated(rhs%p)))
then 207 kim_model_create_handle_equal = .true.
209 kim_model_create_handle_equal = c_associated(lhs%p, rhs%p)
211 end function kim_model_create_handle_equal
216 logical recursive function kim_model_create_handle_not_equal(lhs, rhs)
218 type(kim_model_create_handle_type),
intent(in) :: lhs
219 type(kim_model_create_handle_type),
intent(in) :: rhs
221 kim_model_create_handle_not_equal = .not. (lhs == rhs)
222 end function kim_model_create_handle_not_equal
229 recursive subroutine kim_model_create_set_model_numbering( &
230 model_create_handle, numbering, ierr)
232 use kim_interoperable_types_module
, only: kim_model_create_type
235 integer(c_int) recursive function set_model_numbering( &
236 model_create, numbering) &
237 bind(c, name=
"KIM_ModelCreate_SetModelNumbering")
238 use,
intrinsic :: iso_c_binding
240 use kim_interoperable_types_module
, only: kim_model_create_type
243 type(kim_numbering_type),
intent(in),
value :: numbering
244 end function set_model_numbering
246 type(kim_model_create_handle_type),
intent(in) :: model_create_handle
247 type(kim_numbering_type),
intent(in) :: numbering
248 integer(c_int),
intent(out) :: ierr
253 end subroutine kim_model_create_set_model_numbering
262 model_create_handle, influence_distance)
263 use kim_interoperable_types_module
, only: kim_model_create_type
266 recursive subroutine set_influence_distance_pointer(model_create, &
267 influence_distance) &
268 bind(c, name=
"KIM_ModelCreate_SetInfluenceDistancePointer")
269 use,
intrinsic :: iso_c_binding
270 use kim_interoperable_types_module
, only: kim_model_create_type
272 type(kim_model_create_type),
intent(in) :: model_create
273 type(c_ptr),
intent(in),
value :: influence_distance
274 end subroutine set_influence_distance_pointer
276 type(kim_model_create_handle_type),
intent(in) :: model_create_handle
277 real(c_double),
intent(in),
target :: influence_distance
278 type(kim_model_create_type),
pointer :: model_create
280 call c_f_pointer(model_create_handle%p, model_create)
281 call set_influence_distance_pointer(model_create, &
282 c_loc(influence_distance))
292 model_create_handle, number_of_neighbor_lists, cutoffs, &
293 model_will_not_request_neighbors_of_noncontributing_particles)
294 use kim_interoperable_types_module
, only: kim_model_create_type
297 recursive subroutine set_neighbor_list_pointers( &
298 model_create, number_of_neighbor_lists, cutoffs_ptr, &
299 model_will_not_request_neighbors_of_noncontributing_particles) &
300 bind(c, name=
"KIM_ModelCreate_SetNeighborListPointers")
301 use,
intrinsic :: iso_c_binding
302 use kim_interoperable_types_module
, only: kim_model_create_type
304 type(kim_model_create_type),
intent(in) :: model_create
305 integer(c_int),
intent(in),
value :: number_of_neighbor_lists
306 type(c_ptr),
intent(in),
value :: cutoffs_ptr
307 type(c_ptr),
intent(in),
value :: &
308 model_will_not_request_neighbors_of_noncontributing_particles
309 end subroutine set_neighbor_list_pointers
311 type(kim_model_create_handle_type),
intent(in) :: model_create_handle
312 integer(c_int),
intent(in) :: number_of_neighbor_lists
313 real(c_double),
intent(in),
target :: cutoffs(number_of_neighbor_lists)
314 integer(c_int),
intent(in),
target :: &
315 model_will_not_request_neighbors_of_noncontributing_particles( &
316 number_of_neighbor_lists)
317 type(kim_model_create_type),
pointer :: model_create
319 call c_f_pointer(model_create_handle%p, model_create)
320 call set_neighbor_list_pointers( &
321 model_create, number_of_neighbor_lists, c_loc(cutoffs), &
322 c_loc(model_will_not_request_neighbors_of_noncontributing_particles))
331 model_create_handle, model_routine_name, language_name, required, fptr, &
335 use kim_interoperable_types_module
, only: kim_model_create_type
338 integer(c_int) recursive function set_routine_pointer( &
339 model_create, model_routine_name, language_name, required, fptr) &
340 bind(c, name=
"KIM_ModelCreate_SetRoutinePointer")
341 use,
intrinsic :: iso_c_binding
344 use kim_interoperable_types_module
, only: kim_model_create_type
346 type(kim_model_create_type),
intent(in) :: model_create
347 type(kim_model_routine_name_type),
intent(in),
value &
348 :: model_routine_name
349 type(kim_language_name_type),
intent(in),
value :: language_name
350 integer(c_int),
intent(in),
value :: required
351 type(c_funptr),
intent(in),
value :: fptr
352 end function set_routine_pointer
354 type(kim_model_create_handle_type),
intent(in) :: model_create_handle
355 type(kim_model_routine_name_type),
intent(in) :: model_routine_name
356 type(kim_language_name_type),
intent(in) :: language_name
357 integer(c_int),
intent(in) :: required
358 type(c_funptr),
intent(in),
value :: fptr
359 integer(c_int),
intent(out) :: ierr
360 type(kim_model_create_type),
pointer :: model_create
362 call c_f_pointer(model_create_handle%p, model_create)
363 ierr = set_routine_pointer(model_create, model_routine_name, &
364 language_name, required, fptr)
373 model_create_handle, species_name, code, ierr)
375 use kim_interoperable_types_module
, only: kim_model_create_type
378 integer(c_int) recursive function set_species_code(model_create, &
379 species_name, code) &
380 bind(c, name=
"KIM_ModelCreate_SetSpeciesCode")
381 use,
intrinsic :: iso_c_binding
383 use kim_interoperable_types_module
, only: kim_model_create_type
385 type(kim_model_create_type),
intent(in) :: model_create
386 type(kim_species_name_type),
intent(in),
value :: species_name
387 integer(c_int),
intent(in),
value :: code
388 end function set_species_code
390 type(kim_model_create_handle_type),
intent(in) :: model_create_handle
391 type(kim_species_name_type),
intent(in) :: species_name
392 integer(c_int),
intent(in) :: code
393 integer(c_int),
intent(out) :: ierr
394 type(kim_model_create_type),
pointer :: model_create
396 call c_f_pointer(model_create_handle%p, model_create)
397 ierr = set_species_code(model_create, species_name, code)
407 model_create_handle, int1, name, description, ierr)
408 use kim_interoperable_types_module
, only: kim_model_create_type
410 type(kim_model_create_handle_type),
intent(in) :: model_create_handle
411 integer(c_int),
intent(in),
target :: int1(:)
412 character(len=*, kind=c_char),
intent(in) :: name
413 character(len=*, kind=c_char),
intent(in) :: description
414 integer(c_int),
intent(out) :: ierr
415 type(kim_model_create_type),
pointer :: model_create
417 call c_f_pointer(model_create_handle%p, model_create)
418 call set_parameter(model_create,
size(int1, 1, c_int), int1, name, &
423 recursive subroutine set_parameter(model_create, extent, int1, name, &
425 use kim_interoperable_types_module
, only: kim_model_create_type
428 integer(c_int) recursive function set_parameter_pointer_integer( &
429 model_create, extent, ptr, name, description) &
430 bind(c, name=
"KIM_ModelCreate_SetParameterPointerInteger")
431 use,
intrinsic :: iso_c_binding
432 use kim_interoperable_types_module
, only: kim_model_create_type
434 type(kim_model_create_type),
intent(in) :: model_create
435 integer(c_int),
intent(in),
value :: extent
436 type(c_ptr),
intent(in),
value :: ptr
437 character(c_char),
intent(in) :: name(*)
438 character(c_char),
intent(in) :: description(*)
439 end function set_parameter_pointer_integer
441 type(kim_model_create_type),
intent(in) :: model_create
442 integer(c_int),
intent(in) :: extent
443 integer(c_int),
intent(in),
target :: int1(extent)
444 character(len=*, kind=c_char),
intent(in) :: name
445 character(len=*, kind=c_char),
intent(in) :: description
446 integer(c_int),
intent(out) :: ierr
448 ierr = set_parameter_pointer_integer(model_create, &
451 trim(name)//c_null_char, &
452 trim(description)//c_null_char)
463 model_create_handle, double1, name, description, ierr)
464 use kim_interoperable_types_module
, only: kim_model_create_type
466 type(kim_model_create_handle_type),
intent(in) :: model_create_handle
467 real(c_double),
intent(in),
target :: double1(:)
468 character(len=*, kind=c_char),
intent(in) :: name
469 character(len=*, kind=c_char),
intent(in) :: description
470 integer(c_int),
intent(out) :: ierr
471 type(kim_model_create_type),
pointer :: model_create
473 call c_f_pointer(model_create_handle%p, model_create)
474 call set_parameter(model_create,
size(double1, 1, c_int), double1, &
475 name, description, ierr)
479 recursive subroutine set_parameter(model_create, extent, double1, name, &
483 integer(c_int) recursive function set_parameter_pointer_double( &
484 model_create, extent, ptr, name, description) &
485 bind(c, name=
"KIM_ModelCreate_SetParameterPointerDouble")
486 use,
intrinsic :: iso_c_binding
487 use kim_interoperable_types_module
, only: kim_model_create_type
489 type(kim_model_create_type),
intent(in) :: model_create
490 integer(c_int),
intent(in),
value :: extent
491 type(c_ptr),
intent(in),
value :: ptr
492 character(c_char),
intent(in) :: name(*)
493 character(c_char),
intent(in) :: description(*)
494 end function set_parameter_pointer_double
496 type(kim_model_create_type),
intent(in) :: model_create
497 integer(c_int),
intent(in) :: extent
498 real(c_double),
intent(in),
target :: double1(extent)
499 character(len=*, kind=c_char),
intent(in) :: name
500 character(len=*, kind=c_char),
intent(in) :: description
501 integer(c_int),
intent(out) :: ierr
503 ierr = set_parameter_pointer_double(model_create, &
506 trim(name)//c_null_char, &
507 trim(description)//c_null_char)
518 model_create_handle, ptr)
519 use kim_interoperable_types_module
, only: kim_model_create_type
522 recursive subroutine set_model_buffer_pointer(model_create, ptr) &
523 bind(c, name=
"KIM_ModelCreate_SetModelBufferPointer")
524 use,
intrinsic :: iso_c_binding
525 use kim_interoperable_types_module
, only: kim_model_create_type
527 type(kim_model_create_type),
intent(in) :: model_create
528 type(c_ptr),
intent(in),
value :: ptr
529 end subroutine set_model_buffer_pointer
531 type(kim_model_create_handle_type),
intent(in) :: model_create_handle
532 type(c_ptr),
intent(in) :: ptr
533 type(kim_model_create_type),
pointer :: model_create
535 call c_f_pointer(model_create_handle%p, model_create)
536 call set_model_buffer_pointer(model_create, ptr)
545 model_create_handle, length_unit, energy_unit, charge_unit, &
546 temperature_unit, time_unit, ierr)
548 kim_length_unit_type, &
549 kim_energy_unit_type, &
550 kim_charge_unit_type, &
551 kim_temperature_unit_type, &
553 use kim_interoperable_types_module
, only: kim_model_create_type
556 integer(c_int) recursive function set_units( &
557 model_create, length_unit, energy_unit, charge_unit, temperature_unit, &
558 time_unit) bind(c, name="KIM_ModelCreate_SetUnits")
559 use,
intrinsic :: iso_c_binding
561 kim_energy_unit_type, &
562 kim_charge_unit_type, &
563 kim_temperature_unit_type, &
565 use kim_interoperable_types_module
, only: kim_model_create_type
567 type(kim_model_create_type),
intent(in) :: model_create
568 type(kim_length_unit_type),
intent(in),
value :: length_unit
569 type(kim_energy_unit_type),
intent(in),
value :: energy_unit
570 type(kim_charge_unit_type),
intent(in),
value :: charge_unit
571 type(kim_temperature_unit_type),
intent(in),
value :: temperature_unit
572 type(kim_time_unit_type),
intent(in),
value :: time_unit
573 end function set_units
575 type(kim_model_create_handle_type),
intent(in) :: model_create_handle
576 type(kim_length_unit_type),
intent(in) :: length_unit
577 type(kim_energy_unit_type),
intent(in) :: energy_unit
578 type(kim_charge_unit_type),
intent(in) :: charge_unit
579 type(kim_temperature_unit_type),
intent(in) :: temperature_unit
580 type(kim_time_unit_type),
intent(in) :: time_unit
581 integer(c_int),
intent(out) :: ierr
582 type(kim_model_create_type),
pointer :: model_create
584 call c_f_pointer(model_create_handle%p, model_create)
585 ierr = set_units(model_create, length_unit, energy_unit, &
586 charge_unit, temperature_unit, time_unit)
595 from_length_unit, from_energy_unit, &
596 from_charge_unit, from_temperature_unit, from_time_unit, &
597 to_length_unit, to_energy_unit, to_charge_unit, to_temperature_unit, &
598 to_time_unit, length_exponent, energy_exponent, charge_exponent, &
599 temperature_exponent, time_exponent, conversion_factor, ierr)
607 integer(c_int) recursive function convert_unit( &
608 from_length_unit, from_energy_unit, &
609 from_charge_unit, from_temperature_unit, from_time_unit, &
610 to_length_unit, to_energy_unit, to_charge_unit, to_temperature_unit, &
611 to_time_unit, length_exponent, energy_exponent, charge_exponent, &
612 temperature_exponent, time_exponent, conversion_factor) &
613 bind(c, name=
"KIM_ModelCreate_ConvertUnit")
614 use,
intrinsic :: iso_c_binding
621 type(kim_length_unit_type),
intent(in),
value :: from_length_unit
622 type(kim_energy_unit_type),
intent(in),
value :: from_energy_unit
623 type(kim_charge_unit_type),
intent(in),
value :: from_charge_unit
624 type(kim_temperature_unit_type),
intent(in),
value :: &
625 from_temperature_unit
626 type(kim_time_unit_type),
intent(in),
value :: from_time_unit
627 type(kim_length_unit_type),
intent(in),
value :: to_length_unit
628 type(kim_energy_unit_type),
intent(in),
value :: to_energy_unit
629 type(kim_charge_unit_type),
intent(in),
value :: to_charge_unit
630 type(kim_temperature_unit_type),
intent(in),
value :: &
632 type(kim_time_unit_type),
intent(in),
value :: to_time_unit
633 real(c_double),
intent(in),
value :: length_exponent
634 real(c_double),
intent(in),
value :: energy_exponent
635 real(c_double),
intent(in),
value :: charge_exponent
636 real(c_double),
intent(in),
value :: temperature_exponent
637 real(c_double),
intent(in),
value :: time_exponent
638 real(c_double),
intent(out) :: conversion_factor
639 end function convert_unit
641 type(kim_length_unit_type),
intent(in) :: from_length_unit
642 type(kim_energy_unit_type),
intent(in) :: from_energy_unit
643 type(kim_charge_unit_type),
intent(in) :: from_charge_unit
644 type(kim_temperature_unit_type),
intent(in) :: from_temperature_unit
645 type(kim_time_unit_type),
intent(in) :: from_time_unit
646 type(kim_length_unit_type),
intent(in) :: to_length_unit
647 type(kim_energy_unit_type),
intent(in) :: to_energy_unit
648 type(kim_charge_unit_type),
intent(in) :: to_charge_unit
649 type(kim_temperature_unit_type),
intent(in) :: to_temperature_unit
650 type(kim_time_unit_type),
intent(in) :: to_time_unit
651 real(c_double),
intent(in) :: length_exponent
652 real(c_double),
intent(in) :: energy_exponent
653 real(c_double),
intent(in) :: charge_exponent
654 real(c_double),
intent(in) :: temperature_exponent
655 real(c_double),
intent(in) :: time_exponent
656 real(c_double),
intent(out) :: conversion_factor
657 integer(c_int),
intent(out) :: ierr
659 ierr = convert_unit(from_length_unit, from_energy_unit, from_charge_unit, &
660 from_temperature_unit, from_time_unit, to_length_unit, &
661 to_energy_unit, to_charge_unit, to_temperature_unit, &
662 to_time_unit, length_exponent, energy_exponent, &
663 charge_exponent, temperature_exponent, time_exponent, &
673 log_verbosity, message)
675 use kim_interoperable_types_module
, only: kim_model_create_type
678 recursive subroutine log_entry(model_create, log_verbosity, message, &
679 line_number, file_name) &
680 bind(c, name=
"KIM_ModelCreate_LogEntry")
681 use,
intrinsic :: iso_c_binding
683 use kim_interoperable_types_module
, only: kim_model_create_type
685 type(kim_model_create_type),
intent(in) :: model_create
686 type(kim_log_verbosity_type),
intent(in),
value :: log_verbosity
687 character(c_char),
intent(in) :: message(*)
688 integer(c_int),
intent(in),
value :: line_number
689 character(c_char),
intent(in) :: file_name(*)
690 end subroutine log_entry
692 type(kim_model_create_handle_type),
intent(in) :: model_create_handle
693 type(kim_log_verbosity_type),
intent(in) :: log_verbosity
694 character(len=*, kind=c_char),
intent(in) :: message
695 type(kim_model_create_type),
pointer :: model_create
697 call c_f_pointer(model_create_handle%p, model_create)
698 call log_entry(model_create, log_verbosity, trim(message)//c_null_char, &
708 use kim_convert_string_module
, only: kim_convert_c_char_ptr_to_string
709 use kim_interoperable_types_module
, only: kim_model_create_type
712 type(c_ptr)
recursive function model_create_string(
model_create) &
713 bind(c, name=
"KIM_ModelCreate_ToString")
714 use,
intrinsic :: iso_c_binding
715 use kim_interoperable_types_module
, only: kim_model_create_type
717 type(kim_model_create_type),
intent(in) :: model_create
718 end function model_create_string
720 type(kim_model_create_handle_type),
intent(in) :: model_create_handle
721 character(len=*, kind=c_char),
intent(out) :: string
722 type(kim_model_create_type),
pointer :: model_create
726 call c_f_pointer(model_create_handle%p, model_create)
727 p = model_create_string(model_create)
728 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.