40 use,
intrinsic :: iso_c_binding
46 kim_model_refresh_handle_type, &
54 kim_set_influence_distance_pointer, &
55 kim_set_neighbor_list_pointers, &
56 kim_get_model_buffer_pointer, &
66 type, bind(c) :: kim_model_refresh_handle_type
67 type(c_ptr) :: p = c_null_ptr
68 end type kim_model_refresh_handle_type
73 type(kim_model_refresh_handle_type),
protected,
save &
79 interface operator (.eq.)
80 module procedure kim_model_refresh_handle_equal
81 end interface operator (.eq.)
86 interface operator (.ne.)
87 module procedure kim_model_refresh_handle_not_equal
88 end interface operator (.ne.)
96 interface kim_set_influence_distance_pointer
97 module procedure kim_model_refresh_set_influence_distance_pointer
98 end interface kim_set_influence_distance_pointer
106 interface kim_set_neighbor_list_pointers
108 end interface kim_set_neighbor_list_pointers
116 interface kim_get_model_buffer_pointer
118 end interface kim_get_model_buffer_pointer
125 interface kim_log_entry
127 end interface kim_log_entry
134 interface kim_to_string
136 end interface kim_to_string
142 logical recursive function kim_model_refresh_handle_equal(lhs, rhs)
144 type(kim_model_refresh_handle_type),
intent(in) :: lhs
145 type(kim_model_refresh_handle_type),
intent(in) :: rhs
147 if ((.not. c_associated(lhs%p) .and. c_associated(rhs%p)))
then 148 kim_model_refresh_handle_equal = .true.
150 kim_model_refresh_handle_equal = c_associated(lhs%p, rhs%p)
152 end function kim_model_refresh_handle_equal
157 logical recursive function kim_model_refresh_handle_not_equal(lhs, rhs)
159 type(kim_model_refresh_handle_type),
intent(in) :: lhs
160 type(kim_model_refresh_handle_type),
intent(in) :: rhs
162 kim_model_refresh_handle_not_equal = .not. (lhs .eq. rhs)
163 end function kim_model_refresh_handle_not_equal
171 recursive subroutine kim_model_refresh_set_influence_distance_pointer( &
172 model_refresh_handle, influence_distance)
173 use kim_interoperable_types_module
, only : kim_model_refresh_type
176 recursive subroutine set_influence_distance_pointer(model_refresh, &
177 influence_distance) &
178 bind(c, name=
"KIM_ModelRefresh_SetInfluenceDistancePointer")
179 use,
intrinsic :: iso_c_binding
180 use kim_interoperable_types_module
, only : kim_model_refresh_type
182 type(kim_model_refresh_type),
intent(in) :: &
184 type(c_ptr),
intent(in),
value :: influence_distance
185 end subroutine set_influence_distance_pointer
187 type(kim_model_refresh_handle_type),
intent(in) :: model_refresh_handle
188 real(c_double),
intent(in),
target :: influence_distance
189 type(kim_model_refresh_type),
pointer :: model_refresh
191 call c_f_pointer(model_refresh_handle%p, model_refresh)
192 call set_influence_distance_pointer(model_refresh, &
193 c_loc(influence_distance))
194 end subroutine kim_model_refresh_set_influence_distance_pointer
203 model_refresh_handle, number_of_neighbor_lists, cutoffs, &
204 modelWillNotRequestNeighborsOfNoncontributingParticles)
205 use kim_interoperable_types_module
, only : kim_model_refresh_type
208 recursive subroutine set_neighbor_list_pointers(model_refresh, &
209 number_of_neighbor_lists, cutoffs_ptr, &
210 modelWillNotRequestNeighborsOfNoncontributingParticles) &
211 bind(c, name=
"KIM_ModelRefresh_SetNeighborListPointers")
212 use,
intrinsic :: iso_c_binding
213 use kim_interoperable_types_module
, only : kim_model_refresh_type
215 type(kim_model_refresh_type),
intent(in) :: &
217 integer(c_int),
intent(in),
value :: number_of_neighbor_lists
218 type(c_ptr),
intent(in),
value :: cutoffs_ptr
219 type(c_ptr),
intent(in),
value :: &
220 modelWillNotRequestNeighborsOfNoncontributingParticles
221 end subroutine set_neighbor_list_pointers
223 type(kim_model_refresh_handle_type),
intent(in) :: model_refresh_handle
224 integer(c_int),
intent(in) :: number_of_neighbor_lists
225 real(c_double),
intent(in),
target :: cutoffs(number_of_neighbor_lists)
226 integer(c_int),
intent(in),
target :: &
227 modelWillNotRequestNeighborsOfNoncontributingParticles( &
228 number_of_neighbor_lists)
229 type(kim_model_refresh_type),
pointer :: model_refresh
231 call c_f_pointer(model_refresh_handle%p, model_refresh)
232 call set_neighbor_list_pointers(model_refresh, number_of_neighbor_lists, &
234 c_loc(modelwillnotrequestneighborsofnoncontributingparticles))
244 model_refresh_handle, ptr)
245 use kim_interoperable_types_module
, only : kim_model_refresh_type
248 recursive subroutine get_model_buffer_pointer(model_refresh, ptr) &
249 bind(c, name=
"KIM_ModelRefresh_GetModelBufferPointer")
250 use,
intrinsic :: iso_c_binding
251 use kim_interoperable_types_module
, only : kim_model_refresh_type
253 type(kim_model_refresh_type),
intent(in) :: &
255 type(c_ptr),
intent(out) :: ptr
256 end subroutine get_model_buffer_pointer
258 type(kim_model_refresh_handle_type),
intent(in) :: model_refresh_handle
259 type(c_ptr),
intent(out) :: ptr
260 type(kim_model_refresh_type),
pointer :: model_refresh
262 call c_f_pointer(model_refresh_handle%p, model_refresh)
263 call get_model_buffer_pointer(model_refresh, ptr)
272 log_verbosity, message)
274 use kim_interoperable_types_module
, only : kim_model_refresh_type
277 recursive subroutine log_entry(model_refresh, log_verbosity, message, &
278 line_number, file_name) bind(c, name="KIM_ModelRefresh_LogEntry")
279 use,
intrinsic :: iso_c_binding
281 use kim_interoperable_types_module
, only : kim_model_refresh_type
283 type(kim_model_refresh_type),
intent(in) :: &
285 type(kim_log_verbosity_type),
intent(in),
value :: log_verbosity
286 character(c_char),
intent(in) :: message(*)
287 integer(c_int),
intent(in),
value :: line_number
288 character(c_char),
intent(in) :: file_name(*)
289 end subroutine log_entry
291 type(kim_model_refresh_handle_type),
intent(in) :: model_refresh_handle
292 type(kim_log_verbosity_type),
intent(in) :: log_verbosity
293 character(len=*, kind=c_char),
intent(in) :: message
294 type(kim_model_refresh_type),
pointer :: model_refresh
296 call c_f_pointer(model_refresh_handle%p, model_refresh)
297 call log_entry(model_refresh, log_verbosity, trim(message)//c_null_char, &
307 use kim_convert_string_module
, only : kim_convert_c_char_ptr_to_string
308 use kim_interoperable_types_module
, only : kim_model_refresh_type
311 type(c_ptr)
recursive function model_refresh_string(model_refresh) &
312 bind(c, name=
"KIM_ModelRefresh_ToString")
313 use,
intrinsic :: iso_c_binding
314 use kim_interoperable_types_module
, only : kim_model_refresh_type
316 type(kim_model_refresh_type),
intent(in) :: &
318 end function model_refresh_string
320 type(kim_model_refresh_handle_type),
intent(in) :: model_refresh_handle
321 character(len=*, kind=c_char),
intent(out) :: string
322 type(kim_model_refresh_type),
pointer :: model_refresh
326 call c_f_pointer(model_refresh_handle%p, model_refresh)
327 p = model_refresh_string(model_refresh)
328 call kim_convert_c_char_ptr_to_string(p, string)
recursive subroutine kim_model_refresh_log_entry(model_refresh_handle, log_verbosity, message)
Write a log entry into the log file.
recursive subroutine kim_model_refresh_set_neighbor_list_pointers(model_refresh_handle, number_of_neighbor_lists, cutoffs, modelWillNotRequestNeighborsOfNoncontributingParticles)
Set the Model's neighbor list data pointers.
Provides the interface to a KIM API Model object for use by models within their MODEL_ROUTINE_NAME::R...
recursive subroutine kim_model_refresh_to_string(model_refresh_handle, string)
Get a string representing the internal state of the Model object.
recursive subroutine kim_model_refresh_get_model_buffer_pointer(model_refresh_handle, ptr)
Get the Model's buffer pointer within the Model object.
type(kim_model_refresh_handle_type), save, public, protected kim_model_refresh_null_handle
NULL handle for use in comparisons.
An Extensible Enumeration for the LogVerbosity's supported by the KIM API.