35 use,
intrinsic :: iso_c_binding
41 kim_model_handle_type, &
47 kim_model_get_influence_distance, &
48 kim_model_get_number_of_neighbor_list_cutoffs, &
49 kim_model_get_neighbor_list_cutoffs, &
50 kim_model_get_argument_support_status, &
53 kim_model_set_argument_pointer, &
56 kim_model_clear_influence_dist_and_cutoffs_then_refresh_model, &
57 kim_model_get_species_support_and_code, &
59 kim_model_get_parameter_data_type_extent_and_description, &
60 kim_model_get_parameter, &
61 kim_model_set_parameter, &
63 kim_model_get_simulator_buffer_pointer, &
65 kim_model_set_log_id, &
66 kim_model_push_log_verbosity, &
69 type, bind(c) :: kim_model_handle_type
70 type(c_ptr) :: p = c_null_ptr
71 end type kim_model_handle_type
73 type(kim_model_handle_type),
protected, &
74 bind(c,name=
"KIM_MODEL_null_handle") &
77 interface operator (.eq.)
78 logical function kim_model_handle_equal(left, right)
79 use,
intrinsic :: iso_c_binding
80 import kim_model_handle_type
82 type(kim_model_handle_type),
intent(in) :: left
83 type(kim_model_handle_type),
intent(in) :: right
84 end function kim_model_handle_equal
85 end interface operator (.eq.)
87 interface operator (.ne.)
88 logical function kim_model_handle_not_equal(left, right)
89 use,
intrinsic :: iso_c_binding
90 import kim_model_handle_type
92 type(kim_model_handle_type),
intent(in) :: left
93 type(kim_model_handle_type),
intent(in) :: right
94 end function kim_model_handle_not_equal
95 end interface operator (.ne.)
97 interface kim_model_get_parameter
98 subroutine kim_model_get_parameter_integer(model_handle, parameter_index, &
99 array_index, parameter_value, ierr)
100 use,
intrinsic :: iso_c_binding
101 import kim_model_handle_type
103 type(kim_model_handle_type),
intent(in) :: model_handle
104 integer(c_int),
intent(in),
value :: parameter_index
105 integer(c_int),
intent(in),
value :: array_index
106 integer(c_int),
intent(out) :: parameter_value
107 integer(c_int),
intent(out) :: ierr
108 end subroutine kim_model_get_parameter_integer
110 subroutine kim_model_get_parameter_double(model_handle, parameter_index, &
111 array_index, parameter_value, ierr)
112 use,
intrinsic :: iso_c_binding
113 import kim_model_handle_type
115 type(kim_model_handle_type),
intent(in) :: model_handle
116 integer(c_int),
intent(in),
value :: parameter_index
117 integer(c_int),
intent(in),
value :: array_index
118 real(c_double),
intent(out) :: parameter_value
119 integer(c_int),
intent(out) :: ierr
120 end subroutine kim_model_get_parameter_double
121 end interface kim_model_get_parameter
123 interface kim_model_set_parameter
124 subroutine kim_model_set_parameter_integer(model_handle, parameter_index, &
125 array_index, parameter_value, ierr)
126 use,
intrinsic :: iso_c_binding
127 import kim_model_handle_type
129 type(kim_model_handle_type),
intent(in) :: model_handle
130 integer(c_int),
intent(in),
value :: parameter_index
131 integer(c_int),
intent(in),
value :: array_index
132 integer(c_int),
intent(in),
value :: parameter_value
133 integer(c_int),
intent(out) :: ierr
134 end subroutine kim_model_set_parameter_integer
136 subroutine kim_model_set_parameter_double(model_handle, parameter_index, &
137 array_index, parameter_value, ierr)
138 use,
intrinsic :: iso_c_binding
139 import kim_model_handle_type
141 type(kim_model_handle_type),
intent(in) :: model_handle
142 integer(c_int),
intent(in),
value :: parameter_index
143 integer(c_int),
intent(in),
value :: array_index
144 real(c_double),
intent(in),
value :: parameter_value
145 integer(c_int),
intent(out) :: ierr
146 end subroutine kim_model_set_parameter_double
147 end interface kim_model_set_parameter
149 interface kim_model_set_argument_pointer
150 subroutine kim_model_set_argument_pointer_int0(model_handle, &
151 argument_name, int0, ierr)
152 use,
intrinsic :: iso_c_binding
154 import kim_model_handle_type
156 type(kim_model_handle_type),
intent(in) :: model_handle
157 type(kim_argument_name_type),
intent(in),
value :: argument_name
158 integer(c_int),
intent(in),
target :: int0
159 integer(c_int),
intent(out) :: ierr
160 end subroutine kim_model_set_argument_pointer_int0
162 subroutine kim_model_set_argument_pointer_int1(model_handle, &
163 argument_name, int1, ierr)
164 use,
intrinsic :: iso_c_binding
166 import kim_model_handle_type
168 type(kim_model_handle_type),
intent(in) :: model_handle
169 type(kim_argument_name_type),
intent(in),
value :: argument_name
170 integer(c_int),
intent(in),
target :: int1(:)
171 integer(c_int),
intent(out) :: ierr
172 end subroutine kim_model_set_argument_pointer_int1
174 subroutine kim_model_set_argument_pointer_int2(model_handle, &
175 argument_name, int2, ierr)
176 use,
intrinsic :: iso_c_binding
178 import kim_model_handle_type
180 type(kim_model_handle_type),
intent(in) :: model_handle
181 type(kim_argument_name_type),
intent(in),
value :: argument_name
182 integer(c_int),
intent(in),
target :: int2(:,:)
183 integer(c_int),
intent(out) :: ierr
184 end subroutine kim_model_set_argument_pointer_int2
186 subroutine kim_model_set_argument_pointer_double0(model_handle, &
187 argument_name, double0, ierr)
188 use,
intrinsic :: iso_c_binding
190 kim_argument_name_type
191 import kim_model_handle_type
193 type(kim_model_handle_type),
intent(in) :: model_handle
194 type(kim_argument_name_type),
intent(in),
value :: argument_name
195 real(c_double),
intent(in),
target :: double0
196 integer(c_int),
intent(out) :: ierr
197 end subroutine kim_model_set_argument_pointer_double0
199 subroutine kim_model_set_argument_pointer_double1(model_handle, &
200 argument_name, double1, ierr)
201 use,
intrinsic :: iso_c_binding
203 import kim_model_handle_type
205 type(kim_model_handle_type),
intent(in) :: model_handle
206 type(kim_argument_name_type),
intent(in),
value :: argument_name
207 real(c_double),
intent(in),
target :: double1(:)
208 integer(c_int),
intent(out) :: ierr
209 end subroutine kim_model_set_argument_pointer_double1
211 subroutine kim_model_set_argument_pointer_double2(model_handle, &
212 argument_name, double2, ierr)
213 use,
intrinsic :: iso_c_binding
215 import kim_model_handle_type
217 type(kim_model_handle_type),
intent(in) :: model_handle
218 type(kim_argument_name_type),
intent(in),
value :: argument_name
219 real(c_double),
intent(in),
target :: double2(:,:)
220 integer(c_int),
intent(out) :: ierr
221 end subroutine kim_model_set_argument_pointer_double2
222 end interface kim_model_set_argument_pointer
226 requested_energy_unit, requested_charge_unit, &
227 requested_temperature_unit, requested_time_unit, model_name, &
228 requested_units_accepted, model_handle, ierr)
229 use,
intrinsic :: iso_c_binding
232 kim_energy_unit_type, kim_charge_unit_type, kim_temperature_unit_type, &
234 import kim_model_handle_type
236 type(kim_numbering_type),
intent(in),
value :: numbering
237 type(kim_length_unit_type),
intent(in),
value :: requested_length_unit
238 type(kim_energy_unit_type),
intent(in),
value :: requested_energy_unit
239 type(kim_charge_unit_type),
intent(in),
value :: requested_charge_unit
240 type(kim_temperature_unit_type),
intent(in),
value :: &
241 requested_temperature_unit
242 type(kim_time_unit_type),
intent(in),
value :: requested_time_unit
243 character(len=*),
intent(in) :: model_name
244 type(kim_model_handle_type),
intent(out) :: model_handle
245 integer(c_int),
intent(out) :: requested_units_accepted
246 integer(c_int),
intent(out) :: ierr
250 use,
intrinsic :: iso_c_binding
251 import kim_model_handle_type
253 type(kim_model_handle_type),
intent(inout) :: model_handle
256 subroutine kim_model_get_influence_distance(model_handle, &
258 use,
intrinsic :: iso_c_binding
259 import kim_model_handle_type
261 type(kim_model_handle_type),
intent(in) :: model_handle
262 real(c_double),
intent(out) :: influence_distance
263 end subroutine kim_model_get_influence_distance
265 subroutine kim_model_get_number_of_neighbor_list_cutoffs(model_handle, &
267 use,
intrinsic :: iso_c_binding
268 import kim_model_handle_type
270 type(kim_model_handle_type),
intent(in) :: model_handle
271 integer(c_int),
intent(out) :: number_of_cutoffs
272 end subroutine kim_model_get_number_of_neighbor_list_cutoffs
274 subroutine kim_model_get_neighbor_list_cutoffs(model_handle, cutoffs, ierr)
275 use,
intrinsic :: iso_c_binding
276 import kim_model_handle_type
278 type(kim_model_handle_type),
intent(in) :: model_handle
279 real(c_double),
intent(out) :: cutoffs(:)
280 integer(c_int),
intent(out) :: ierr
281 end subroutine kim_model_get_neighbor_list_cutoffs
283 subroutine kim_model_get_argument_support_status(model_handle, &
284 argument_name, support_status, ierr)
285 use,
intrinsic :: iso_c_binding
288 import kim_model_handle_type
290 type(kim_model_handle_type),
intent(in) :: model_handle
291 type(kim_argument_name_type),
intent(in),
value :: argument_name
292 type(kim_support_status_type),
intent(out) :: support_status
293 integer(c_int),
intent(out) :: ierr
294 end subroutine kim_model_get_argument_support_status
297 callback_name, support_status, ierr)
298 use,
intrinsic :: iso_c_binding
301 import kim_model_handle_type
303 type(kim_model_handle_type),
intent(in) :: model_handle
304 type(kim_callback_name_type),
intent(in),
value :: callback_name
305 type(kim_support_status_type),
intent(out) :: support_status
306 integer(c_int),
intent(out) :: ierr
310 language_name, fptr, data_object, ierr)
311 use,
intrinsic :: iso_c_binding
314 import kim_model_handle_type
316 type(kim_model_handle_type),
intent(in) :: model_handle
317 type(kim_callback_name_type),
intent(in),
value :: callback_name
318 type(kim_language_name_type),
intent(in),
value :: language_name
319 type(c_funptr),
intent(in),
value :: fptr
320 type(c_ptr),
intent(in),
value :: data_object
321 integer(c_int),
intent(out) :: ierr
325 charge_unit, temperature_unit, time_unit)
326 use,
intrinsic :: iso_c_binding
328 kim_energy_unit_type, kim_charge_unit_type, kim_temperature_unit_type, &
330 import kim_model_handle_type
331 type(kim_model_handle_type),
intent(in) :: model_handle
332 type(kim_length_unit_type),
intent(out) :: length_unit
333 type(kim_energy_unit_type),
intent(out) :: energy_unit
334 type(kim_charge_unit_type),
intent(out) :: charge_unit
335 type(kim_temperature_unit_type),
intent(out) :: temperature_unit
336 type(kim_time_unit_type),
intent(out) :: time_unit
340 use,
intrinsic :: iso_c_binding
341 import kim_model_handle_type
343 type(kim_model_handle_type),
intent(in) :: model_handle
344 integer(c_int),
intent(out) :: ierr
347 subroutine kim_model_clear_influence_dist_and_cutoffs_then_refresh_model( &
349 use,
intrinsic :: iso_c_binding
350 import kim_model_handle_type
352 type(kim_model_handle_type),
intent(in) :: model_handle
353 integer(c_int),
intent(out) :: ierr
354 end subroutine kim_model_clear_influence_dist_and_cutoffs_then_refresh_model
356 subroutine kim_model_get_species_support_and_code(model_handle, &
357 species_name, species_is_supported, code, ierr)
358 use,
intrinsic :: iso_c_binding
360 import kim_model_handle_type
362 type(kim_model_handle_type),
intent(in) :: model_handle
363 type(kim_species_name_type),
intent(in),
value :: species_name
364 integer(c_int),
intent(out) :: species_is_supported
365 integer(c_int),
intent(out) :: code
366 integer(c_int),
intent(out) :: ierr
367 end subroutine kim_model_get_species_support_and_code
370 number_of_parameters)
371 use,
intrinsic :: iso_c_binding
372 import kim_model_handle_type
374 type(kim_model_handle_type),
intent(in) :: model_handle
375 integer(c_int),
intent(out) :: number_of_parameters
378 subroutine kim_model_get_parameter_data_type_extent_and_description( &
379 model_handle, index, data_type, extent, description, ierr)
380 use,
intrinsic :: iso_c_binding
382 import kim_model_handle_type
384 type(kim_model_handle_type),
intent(in) :: model_handle
385 integer(c_int),
intent(in),
value :: index
386 type(kim_data_type_type),
intent(out) :: data_type
387 integer(c_int),
intent(out) :: extent
388 character(len=*),
intent(out) :: description
389 integer(c_int),
intent(out) :: ierr
390 end subroutine kim_model_get_parameter_data_type_extent_and_description
393 use,
intrinsic :: iso_c_binding
394 import kim_model_handle_type
396 type(kim_model_handle_type),
intent(in) :: model_handle
397 type(c_ptr),
intent(in),
value :: ptr
400 subroutine kim_model_get_simulator_buffer_pointer(model_handle, ptr)
401 use,
intrinsic :: iso_c_binding
402 import kim_model_handle_type
404 type(kim_model_handle_type),
intent(in) :: model_handle
405 type(c_ptr),
intent(out) :: ptr
406 end subroutine kim_model_get_simulator_buffer_pointer
408 subroutine kim_model_string(model_handle, string)
409 use,
intrinsic :: iso_c_binding
410 import kim_model_handle_type
412 type(kim_model_handle_type),
intent(in) :: model_handle
413 character(len=*),
intent(out) :: string
414 end subroutine kim_model_string
416 subroutine kim_model_set_log_id(model_handle, log_id)
417 use,
intrinsic :: iso_c_binding
418 import kim_model_handle_type
420 type(kim_model_handle_type),
intent(in) :: model_handle
421 character(len=*),
intent(in) :: log_id
422 end subroutine kim_model_set_log_id
424 subroutine kim_model_push_log_verbosity(model_handle, log_verbosity)
425 use,
intrinsic :: iso_c_binding
427 import kim_model_handle_type
429 type(kim_model_handle_type),
intent(in) :: model_handle
430 type(kim_log_verbosity_type),
intent(in) :: log_verbosity
431 end subroutine kim_model_push_log_verbosity
434 use,
intrinsic :: iso_c_binding
436 import kim_model_handle_type
438 type(kim_model_handle_type),
intent(in) :: model_handle
type(kim_model_handle_type), public, protected kim_model_null_handle