39 use,
intrinsic :: iso_c_binding
45 kim_model_extension_handle_type, &
51 kim_get_extension_id, &
53 kim_to_model_compute, &
54 kim_to_model_create, &
55 kim_to_model_destroy, &
56 kim_to_model_driver_create, &
57 kim_to_model_refresh, &
58 kim_to_model_write_parameterized_model, &
59 kim_to_model_compute_arguments, &
60 kim_to_model_compute_arguments_create, &
61 kim_to_model_compute_arguments_destroy, &
62 kim_c_char_array_to_string, &
63 kim_c_char_ptr_to_string, &
64 kim_string_to_c_char_array, &
65 kim_get_model_buffer_pointer, &
74 type, bind(c) :: kim_model_extension_handle_type
75 type(c_ptr) :: p = c_null_ptr
76 end type kim_model_extension_handle_type
81 type(kim_model_extension_handle_type),
protected,
save &
87 interface operator(.eq.)
88 module procedure kim_model_extension_handle_equal
89 end interface operator(.eq.)
94 interface operator(.ne.)
95 module procedure kim_model_extension_handle_not_equal
96 end interface operator(.ne.)
103 interface kim_get_extension_id
104 module procedure kim_model_extension_get_extension_id
105 end interface kim_get_extension_id
112 interface kim_to_model
114 end interface kim_to_model
121 interface kim_to_model_compute
123 end interface kim_to_model_compute
130 interface kim_to_model_create
132 end interface kim_to_model_create
139 interface kim_to_model_destroy
141 end interface kim_to_model_destroy
149 interface kim_to_model_driver_create
151 end interface kim_to_model_driver_create
158 interface kim_to_model_refresh
160 end interface kim_to_model_refresh
168 interface kim_to_model_write_parameterized_model
170 end interface kim_to_model_write_parameterized_model
178 interface kim_to_model_compute_arguments
180 end interface kim_to_model_compute_arguments
188 interface kim_to_model_compute_arguments_create
190 end interface kim_to_model_compute_arguments_create
198 interface kim_to_model_compute_arguments_destroy
200 end interface kim_to_model_compute_arguments_destroy
205 interface kim_c_char_array_to_string
207 end interface kim_c_char_array_to_string
212 interface kim_c_char_ptr_to_string
214 end interface kim_c_char_ptr_to_string
219 interface kim_string_to_c_char_array
221 end interface kim_string_to_c_char_array
229 interface kim_get_model_buffer_pointer
231 end interface kim_get_model_buffer_pointer
238 interface kim_log_entry
240 end interface kim_log_entry
247 interface kim_to_string
249 end interface kim_to_string
255 logical recursive function kim_model_extension_handle_equal(lhs, rhs)
257 type(kim_model_extension_handle_type),
intent(in) :: lhs
258 type(kim_model_extension_handle_type),
intent(in) :: rhs
260 if ((.not. c_associated(lhs%p)) .and. (.not. c_associated(rhs%p)))
then 261 kim_model_extension_handle_equal = .true.
263 kim_model_extension_handle_equal = c_associated(lhs%p, rhs%p)
265 end function kim_model_extension_handle_equal
270 logical recursive function kim_model_extension_handle_not_equal(lhs, rhs)
272 type(kim_model_extension_handle_type),
intent(in) :: lhs
273 type(kim_model_extension_handle_type),
intent(in) :: rhs
275 kim_model_extension_handle_not_equal = .not. (lhs == rhs)
276 end function kim_model_extension_handle_not_equal
283 recursive subroutine kim_model_extension_get_extension_id( &
284 model_extension_handle, extension_id)
285 use kim_convert_string_module
, only: kim_convert_c_char_ptr_to_string
286 use kim_interoperable_types_module
, only: kim_model_extension_type
289 recursive subroutine get_extension_id(model_extension, extension_id) &
290 bind(c, name=
"KIM_ModelExtension_GetExtensionID")
291 use,
intrinsic :: iso_c_binding
292 use kim_interoperable_types_module
, only: kim_model_extension_type
295 type(c_ptr),
intent(out) :: extension_id
296 end subroutine get_extension_id
298 type(kim_model_extension_handle_type),
intent(in) :: model_extension_handle
299 character(len=*, kind=c_char),
intent(out) :: extension_id
306 call kim_convert_c_char_ptr_to_string(p, extension_id)
307 end subroutine kim_model_extension_get_extension_id
318 type(kim_model_extension_handle_type),
intent(in) :: model_extension_handle
319 type(kim_model_handle_type),
intent(out) :: model_handle
321 model_handle%p = model_extension_handle%p
330 model_extension_handle, model_compute_handle)
333 type(kim_model_extension_handle_type),
intent(in) :: model_extension_handle
334 type(kim_model_compute_handle_type),
intent(out) :: model_compute_handle
336 model_compute_handle%p = model_extension_handle%p
345 model_extension_handle, model_create_handle)
348 type(kim_model_extension_handle_type),
intent(in) :: model_extension_handle
349 type(kim_model_create_handle_type),
intent(out) :: model_create_handle
351 model_create_handle%p = model_extension_handle%p
360 model_extension_handle, model_destroy_handle)
363 type(kim_model_extension_handle_type),
intent(in) :: model_extension_handle
364 type(kim_model_destroy_handle_type),
intent(out) :: model_destroy_handle
366 model_destroy_handle%p = model_extension_handle%p
376 model_extension_handle, model_driver_create_handle)
379 type(kim_model_extension_handle_type),
intent(in) :: model_extension_handle
380 type(kim_model_driver_create_handle_type),
intent(out) &
381 :: model_driver_create_handle
383 model_driver_create_handle%p = model_extension_handle%p
392 model_extension_handle, model_refresh_handle)
395 type(kim_model_extension_handle_type),
intent(in) :: model_extension_handle
396 type(kim_model_refresh_handle_type),
intent(out) :: model_refresh_handle
398 model_refresh_handle%p = model_extension_handle%p
408 model_extension_handle, model_write_parameterized_model_handle)
411 type(kim_model_extension_handle_type),
intent(in) :: model_extension_handle
412 type(kim_model_write_parameterized_model_handle_type),
intent(out) &
413 :: model_write_parameterized_model_handle
415 model_write_parameterized_model_handle%p = model_extension_handle%p
425 model_extension_handle, compute_arguments_c_ptr, &
426 model_compute_arguments_handle)
429 type(kim_model_extension_handle_type),
intent(in) :: model_extension_handle
430 type(c_ptr),
intent(in) :: compute_arguments_c_ptr
431 type(kim_model_compute_arguments_handle_type),
intent(out) &
432 :: model_compute_arguments_handle
437 model_compute_arguments_handle%p = compute_arguments_c_ptr
447 model_extension_handle, compute_arguments_c_ptr, &
448 model_compute_arguments_create_handle)
451 type(kim_model_extension_handle_type),
intent(in) :: model_extension_handle
452 type(c_ptr),
intent(in) :: compute_arguments_c_ptr
453 type(kim_model_compute_arguments_create_handle_type),
intent(out) &
454 :: model_compute_arguments_create_handle
459 model_compute_arguments_create_handle%p = compute_arguments_c_ptr
469 model_extension_handle, compute_arguments_c_ptr, &
470 model_compute_arguments_destroy_handle)
473 type(kim_model_extension_handle_type),
intent(in) :: model_extension_handle
474 type(c_ptr),
intent(in) :: compute_arguments_c_ptr
475 type(kim_model_compute_arguments_destroy_handle_type),
intent(out) &
476 :: model_compute_arguments_destroy_handle
481 model_compute_arguments_destroy_handle%p = compute_arguments_c_ptr
488 c_char_array, string)
489 use kim_convert_string_module
, only: kim_convert_c_char_array_to_string
491 character(len=1, kind=c_char),
intent(in) :: c_char_array(:)
492 character(len=*, kind=c_char),
intent(out) :: string
494 call kim_convert_c_char_array_to_string(c_char_array, string)
502 use kim_convert_string_module
, only: kim_convert_c_char_ptr_to_string
504 type(c_ptr),
intent(in) :: c_char_ptr
505 character(len=*, kind=c_char),
intent(out) :: string
507 call kim_convert_c_char_ptr_to_string(c_char_ptr, string)
514 string, c_char_array)
515 use kim_convert_string_module
, only: kim_convert_string_to_c_char_array
517 character(len=*, kind=c_char),
intent(in) :: string
518 character(len=1, kind=c_char),
intent(out) :: c_char_array(:)
520 call kim_convert_string_to_c_char_array(string, c_char_array)
530 model_extension_handle, ptr)
531 use kim_interoperable_types_module
, only: kim_model_extension_type
534 recursive subroutine get_model_buffer_pointer(model_extension, ptr) &
535 bind(c, name=
"KIM_ModelExtension_GetModelBufferPointer")
536 use,
intrinsic :: iso_c_binding
537 use kim_interoperable_types_module
, only: kim_model_extension_type
539 type(kim_model_extension_type),
intent(in) :: model_extension
540 type(c_ptr),
intent(out) :: ptr
541 end subroutine get_model_buffer_pointer
543 type(kim_model_extension_handle_type),
intent(in) :: model_extension_handle
544 type(c_ptr),
intent(out) :: ptr
545 type(kim_model_extension_type),
pointer :: model_extension
547 call c_f_pointer(model_extension_handle%p, model_extension)
548 call get_model_buffer_pointer(model_extension, ptr)
557 log_verbosity, message)
559 use kim_interoperable_types_module
, only: kim_model_extension_type
562 recursive subroutine log_entry( &
563 model_extension, log_verbosity, message, line_number, file_name) &
564 bind(c, name=
"KIM_ModelExtension_LogEntry")
565 use,
intrinsic :: iso_c_binding
567 use kim_interoperable_types_module
, only: kim_model_extension_type
569 type(kim_model_extension_type),
intent(in) :: model_extension
570 type(kim_log_verbosity_type),
intent(in),
value :: log_verbosity
571 character(c_char),
intent(in) :: message(*)
572 integer(c_int),
intent(in),
value :: line_number
573 character(c_char),
intent(in) :: file_name(*)
574 end subroutine log_entry
576 type(kim_model_extension_handle_type),
intent(in) :: model_extension_handle
577 type(kim_log_verbosity_type),
intent(in) :: log_verbosity
578 character(len=*, kind=c_char),
intent(in) :: message
579 type(kim_model_extension_type),
pointer :: model_extension
581 call c_f_pointer(model_extension_handle%p, model_extension)
582 call log_entry(model_extension, log_verbosity, trim(message)//c_null_char, &
593 use kim_convert_string_module
, only: kim_convert_c_char_ptr_to_string
594 use kim_interoperable_types_module
, only: kim_model_extension_type
597 type(c_ptr)
recursive function model_extension_string(
model_extension) &
598 bind(c, name=
"KIM_ModelExtension_ToString")
599 use,
intrinsic :: iso_c_binding
600 use kim_interoperable_types_module
, only: kim_model_extension_type
602 type(kim_model_extension_type),
intent(in) :: model_extension
603 end function model_extension_string
605 type(kim_model_extension_handle_type),
intent(in) :: model_extension_handle
606 character(len=*, kind=c_char),
intent(out) :: string
607 type(kim_model_extension_type),
pointer :: model_extension
613 call kim_convert_c_char_ptr_to_string(p, string)
recursive subroutine kim_model_extension_to_model_compute_arguments_destroy(model_extension_handle, compute_arguments_c_ptr, model_compute_arguments_destroy_handle)
Convert the ModelExtension interface to the Model object to a ModelComputeArgumentsDestroy interface...
Provides the interface to a KIM API Model object for use by models within their MODEL_ROUTINE_NAME::C...
recursive subroutine kim_model_extension_to_model_driver_create(model_extension_handle, model_driver_create_handle)
Convert the ModelExtension interface to the Model object to a ModelDriverCreate interface.
recursive subroutine kim_model_extension_to_model_create(model_extension_handle, model_create_handle)
Convert the ModelExtension interface to the Model object to a ModelCompute interface.
recursive subroutine kim_model_extension_convert_c_char_ptr_to_string(c_char_ptr, string)
Copy C character pointer to Fortran string.
Provides the interface to a KIM API ComputeArguments object for use by models within their MODEL_ROUT...
recursive subroutine kim_model_extension_to_model_refresh(model_extension_handle, model_refresh_handle)
Convert the ModelExtension interface to the Model object to a ModelRefresh interface.
Provides the interface to a KIM API Model object for use by models within their MODEL_ROUTINE_NAME::C...
Provides the interface to a KIM API Model object for use by models within their MODEL_ROUTINE_NAME::E...
Provides the interface to a KIM API Model object for use by models within their MODEL_ROUTINE_NAME::R...
Provides the interface to a KIM API Model object for use by models within their MODEL_ROUTINE_NAME::D...
recursive subroutine kim_model_extension_to_model(model_extension_handle, model_handle)
Convert the ModelExtension interface to the Model object to a Model interface.
recursive subroutine kim_model_extension_to_model_compute_arguments(model_extension_handle, compute_arguments_c_ptr, model_compute_arguments_handle)
Convert the ModelExtension interface to the Model object to a ModelComputeArguments interface...
Provides the interface to a KIM API Model object for use by models within their MODEL_ROUTINE_NAME::W...
recursive subroutine kim_model_extension_to_model_destroy(model_extension_handle, model_destroy_handle)
Convert the ModelExtension interface to the Model object to a ModelDestroy interface.
recursive subroutine kim_model_extension_log_entry(model_extension_handle, log_verbosity, message)
Write a log entry into the log file.
Provides the primary interface to a KIM API Model object and is meant to be used by simulators...
recursive subroutine kim_model_extension_to_model_compute(model_extension_handle, model_compute_handle)
Convert the ModelExtension interface to the Model object to a ModelCompute interface.
recursive subroutine kim_model_extension_to_model_write_parameterized_model(model_extension_handle, model_write_parameterized_model_handle)
Convert the ModelExtension interface to the Model object to a ModelWriteParameterizedModel interface...
recursive subroutine kim_model_extension_get_model_buffer_pointer(model_extension_handle, ptr)
Get the Model's buffer pointer within the Model object.
recursive subroutine kim_model_extension_to_model_compute_arguments_create(model_extension_handle, compute_arguments_c_ptr, model_compute_arguments_create_handle)
Convert the ModelExtension interface to the Model object to a ModelComputeArgumentsCreate interface...
Provides the interface to a KIM API ComputeArguments object for use by models within their MODEL_ROUT...
type(kim_model_extension_handle_type), save, public, protected kim_model_extension_null_handle
NULL handle for use in comparisons.
Provides the interface to a KIM API ComputeArguments object for use by models within their MODEL_ROUT...
recursive subroutine kim_model_extension_convert_c_char_array_to_string(c_char_array, string)
Copy C character array to Fortran string.
Provides the interface to a KIM API Model object for use by models within their MODEL_ROUTINE_NAME::C...
static int model_extension(KIM_ModelExtension *const modelExtension, void *const extensionStructure)
An Extensible Enumeration for the LogVerbosity's supported by the KIM API.
recursive subroutine kim_model_extension_convert_string_to_c_char_array(string, c_char_array)
Convert Fortran string to C character array.
recursive subroutine kim_model_extension_to_string(model_extension_handle, string)
Get a string representing the internal state of the Model object.