39 use,
intrinsic :: iso_c_binding
45 kim_model_compute_handle_type, &
51 kim_get_model_buffer_pointer, &
60 type, bind(c) :: kim_model_compute_handle_type
61 type(c_ptr) :: p = c_null_ptr
62 end type kim_model_compute_handle_type
67 type(kim_model_compute_handle_type),
protected,
save &
73 interface operator(.eq.)
74 module procedure kim_model_compute_handle_equal
75 end interface operator(.eq.)
80 interface operator(.ne.)
81 module procedure kim_model_compute_handle_not_equal
82 end interface operator(.ne.)
90 interface kim_get_model_buffer_pointer
91 module procedure kim_model_compute_get_model_buffer_pointer
92 end interface kim_get_model_buffer_pointer
99 interface kim_log_entry
101 end interface kim_log_entry
108 interface kim_to_string
110 end interface kim_to_string
116 logical recursive function kim_model_compute_handle_equal(lhs, rhs)
118 type(kim_model_compute_handle_type),
intent(in) :: lhs
119 type(kim_model_compute_handle_type),
intent(in) :: rhs
121 if ((.not. c_associated(lhs%p)) .and. (.not. c_associated(rhs%p)))
then 122 kim_model_compute_handle_equal = .true.
124 kim_model_compute_handle_equal = c_associated(lhs%p, rhs%p)
126 end function kim_model_compute_handle_equal
131 logical recursive function kim_model_compute_handle_not_equal(lhs, rhs)
133 type(kim_model_compute_handle_type),
intent(in) :: lhs
134 type(kim_model_compute_handle_type),
intent(in) :: rhs
136 kim_model_compute_handle_not_equal = .not. (lhs == rhs)
137 end function kim_model_compute_handle_not_equal
145 recursive subroutine kim_model_compute_get_model_buffer_pointer( &
146 model_compute_handle, ptr)
147 use kim_interoperable_types_module
, only: kim_model_compute_type
150 recursive subroutine get_model_buffer_pointer(model_compute, ptr) &
151 bind(c, name=
"KIM_ModelCompute_GetModelBufferPointer")
152 use,
intrinsic :: iso_c_binding
153 use kim_interoperable_types_module
, only: kim_model_compute_type
156 type(c_ptr),
intent(out) :: ptr
157 end subroutine get_model_buffer_pointer
159 type(kim_model_compute_handle_type),
intent(in) :: model_compute_handle
160 type(c_ptr),
intent(out) :: ptr
165 end subroutine kim_model_compute_get_model_buffer_pointer
173 log_verbosity, message)
175 use kim_interoperable_types_module
, only: kim_model_compute_type
178 recursive subroutine log_entry( &
179 model_compute, log_verbosity, message, line_number, file_name) &
180 bind(c, name=
"KIM_ModelCompute_LogEntry")
181 use,
intrinsic :: iso_c_binding
183 use kim_interoperable_types_module
, only: kim_model_compute_type
185 type(kim_model_compute_type),
intent(in) :: model_compute
186 type(kim_log_verbosity_type),
intent(in),
value :: log_verbosity
187 character(c_char),
intent(in) :: message(*)
188 integer(c_int),
intent(in),
value :: line_number
189 character(c_char),
intent(in) :: file_name(*)
190 end subroutine log_entry
192 type(kim_model_compute_handle_type),
intent(in) :: model_compute_handle
193 type(kim_log_verbosity_type),
intent(in) :: log_verbosity
194 character(len=*, kind=c_char),
intent(in) :: message
195 type(kim_model_compute_type),
pointer :: model_compute
197 call c_f_pointer(model_compute_handle%p, model_compute)
198 call log_entry(model_compute, log_verbosity, trim(message)//c_null_char, &
208 use kim_convert_string_module
, only: kim_convert_c_char_ptr_to_string
209 use kim_interoperable_types_module
, only: kim_model_compute_type
212 type(c_ptr)
recursive function model_compute_string(
model_compute) &
213 bind(c, name=
"KIM_ModelCompute_ToString")
214 use,
intrinsic :: iso_c_binding
215 use kim_interoperable_types_module
, only: kim_model_compute_type
217 type(kim_model_compute_type),
intent(in) :: model_compute
218 end function model_compute_string
220 type(kim_model_compute_handle_type),
intent(in) :: model_compute_handle
221 character(len=*, kind=c_char),
intent(out) :: string
222 type(kim_model_compute_type),
pointer :: model_compute
228 call kim_convert_c_char_ptr_to_string(p, string)
type(kim_model_compute_handle_type), save, public, protected kim_model_compute_null_handle
NULL handle for use in comparisons.
static int model_compute(KIM_ModelCompute const *const modelCompute, KIM_ModelComputeArguments const *const modelComputeArguments)
recursive subroutine kim_model_compute_to_string(model_compute_handle, string)
Get a string representing the internal state of the Model object.
recursive subroutine kim_model_compute_log_entry(model_compute_handle, log_verbosity, message)
Write a log entry into the log file.
Provides the interface to a KIM API Model object for use by models within their MODEL_ROUTINE_NAME::C...
An Extensible Enumeration for the LogVerbosity's supported by the KIM API.