kim-api  2.2.1+v2.2.1.GNU.GNU.
An Application Programming Interface (API) for the Knowledgebase of Interatomic Models (KIM).
kim_model_write_parameterized_model_module.f90
Go to the documentation of this file.
1 !
2 ! CDDL HEADER START
3 !
4 ! The contents of this file are subject to the terms of the Common Development
5 ! and Distribution License Version 1.0 (the "License").
6 !
7 ! You can obtain a copy of the license at
8 ! http://www.opensource.org/licenses/CDDL-1.0. See the License for the
9 ! specific language governing permissions and limitations under the License.
10 !
11 ! When distributing Covered Code, include this CDDL HEADER in each file and
12 ! include the License file in a prominent location with the name LICENSE.CDDL.
13 ! If applicable, add the following below this CDDL HEADER, with the fields
14 ! enclosed by brackets "[]" replaced with your own identifying information:
15 !
16 ! Portions Copyright (c) [yyyy] [name of copyright owner]. All rights reserved.
17 !
18 ! CDDL HEADER END
19 !
20 
21 !
22 ! Copyright (c) 2016--2020, Regents of the University of Minnesota.
23 ! All rights reserved.
24 !
25 ! Contributors:
26 ! Ryan S. Elliott
27 !
28 
29 !
30 ! Release: This file is part of the kim-api-2.2.1 package.
31 !
32 
39  use, intrinsic :: iso_c_binding
40  implicit none
41  private
42 
43  public &
44  ! Derived types
45  kim_model_write_parameterized_model_handle_type, &
46  ! Constants
48  ! Routines
49  operator(.eq.), &
50  operator(.ne.), &
51  kim_get_path, &
52  kim_get_model_name, &
53  kim_set_parameter_file_name, &
54  kim_get_model_buffer_pointer, &
55  kim_log_entry, &
56  kim_to_string
57 
63  type, bind(c) :: kim_model_write_parameterized_model_handle_type
64  type(c_ptr) :: p = c_null_ptr
65  end type kim_model_write_parameterized_model_handle_type
66 
70  type(kim_model_write_parameterized_model_handle_type), protected, save &
72 
77  interface operator(.eq.)
78  module procedure kim_model_write_parameterized_model_handle_equal
79  end interface operator(.eq.)
80 
85  interface operator(.ne.)
86  module procedure kim_model_write_parameterized_model_handle_not_equal
87  end interface operator(.ne.)
88 
95  interface kim_get_path
96  module procedure kim_model_write_parameterized_model_get_path
97  end interface kim_get_path
98 
105  interface kim_get_model_name
107  end interface kim_get_model_name
108 
115  interface kim_set_parameter_file_name
117  end interface kim_set_parameter_file_name
118 
125  interface kim_get_model_buffer_pointer
126  module procedure &
128  end interface kim_get_model_buffer_pointer
129 
136  interface kim_log_entry
138  end interface kim_log_entry
139 
146  interface kim_to_string
148  end interface kim_to_string
149 
150 contains
155  logical recursive function kim_model_write_parameterized_model_handle_equal( &
156  lhs, rhs)
157  implicit none
158  type(kim_model_write_parameterized_model_handle_type), intent(in) :: lhs
159  type(kim_model_write_parameterized_model_handle_type), intent(in) :: rhs
160 
161  if ((.not. c_associated(lhs%p)) .and. (.not. c_associated(rhs%p))) then
162  kim_model_write_parameterized_model_handle_equal = .true.
163  else
164  kim_model_write_parameterized_model_handle_equal = &
165  c_associated(lhs%p, rhs%p)
166  end if
167  end function kim_model_write_parameterized_model_handle_equal
168 
173  logical recursive function &
174  kim_model_write_parameterized_model_handle_not_equal(lhs, rhs)
175  implicit none
176  type(kim_model_write_parameterized_model_handle_type), intent(in) :: lhs
177  type(kim_model_write_parameterized_model_handle_type), intent(in) :: rhs
178 
179  kim_model_write_parameterized_model_handle_not_equal = .not. (lhs == rhs)
180  end function kim_model_write_parameterized_model_handle_not_equal
181 
188  recursive subroutine kim_model_write_parameterized_model_get_path( &
189  model_write_parameterized_model_handle, path)
190  use kim_convert_string_module, only: kim_convert_c_char_ptr_to_string
191  use kim_interoperable_types_module, only: &
192  kim_model_write_parameterized_model_type
193  implicit none
194  interface
195  recursive subroutine get_path(model_write_parameterized_model, path) &
196  bind(c, name="KIM_ModelWriteParameterizedModel_GetPath")
197  use, intrinsic :: iso_c_binding
198  use kim_interoperable_types_module, only: &
199  kim_model_write_parameterized_model_type
200  implicit none
201  type(kim_model_write_parameterized_model_type), intent(in) &
202  :: model_write_parameterized_model
203  type(c_ptr), intent(out) :: path
204  end subroutine get_path
205  end interface
206  type(kim_model_write_parameterized_model_handle_type), intent(in) &
207  :: model_write_parameterized_model_handle
208  character(len=*, kind=c_char), intent(out) :: path
209  type(kim_model_write_parameterized_model_type), pointer &
210  :: model_write_parameterized_model
211 
212  type(c_ptr) :: ppath
213 
214  call c_f_pointer(model_write_parameterized_model_handle%p, &
215  model_write_parameterized_model)
216  call get_path(model_write_parameterized_model, ppath)
217  call kim_convert_c_char_ptr_to_string(ppath, path)
218  end subroutine kim_model_write_parameterized_model_get_path
219 
227  model_write_parameterized_model_handle, model_name)
228  use kim_convert_string_module, only: kim_convert_c_char_ptr_to_string
229  use kim_interoperable_types_module, only: &
230  kim_model_write_parameterized_model_type
231  implicit none
232  interface
233  recursive subroutine get_model_name(model_write_parameterized_model, &
234  model_name) &
235  bind(c, name="KIM_ModelWriteParameterizedModel_GetModelName")
236  use, intrinsic :: iso_c_binding
237  use kim_interoperable_types_module, only: &
238  kim_model_write_parameterized_model_type
239  implicit none
240  type(kim_model_write_parameterized_model_type), intent(in) &
241  :: model_write_parameterized_model
242  type(c_ptr), intent(out) :: model_name
243  end subroutine get_model_name
244  end interface
245  type(kim_model_write_parameterized_model_handle_type), intent(in) &
246  :: model_write_parameterized_model_handle
247  character(len=*, kind=c_char), intent(out) :: model_name
248  type(kim_model_write_parameterized_model_type), pointer &
249  :: model_write_parameterized_model
250 
251  type(c_ptr) :: pmodel_name
252 
253  call c_f_pointer(model_write_parameterized_model_handle%p, &
254  model_write_parameterized_model)
255  call get_model_name(model_write_parameterized_model, pmodel_name)
256  call kim_convert_c_char_ptr_to_string(pmodel_name, model_name)
258 
265  recursive subroutine &
267  model_write_parameterized_model_handle, file_name)
268  use kim_interoperable_types_module, only: &
269  kim_model_write_parameterized_model_type
270  implicit none
271  interface
272  recursive subroutine set_parameter_file_name( &
273  model_write_parameterized_model, file_name) &
274  bind(c, name="KIM_ModelWriteParameterizedModel_SetParameterFileName")
275  use, intrinsic :: iso_c_binding
276  use kim_interoperable_types_module, only: &
277  kim_model_write_parameterized_model_type
278  implicit none
279  type(kim_model_write_parameterized_model_type), intent(in) &
280  :: model_write_parameterized_model
281  character(c_char), intent(in) :: file_name(*)
282  end subroutine set_parameter_file_name
283  end interface
284  type(kim_model_write_parameterized_model_handle_type), intent(in) &
285  :: model_write_parameterized_model_handle
286  character(len=*, kind=c_char), intent(in) :: file_name
287  type(kim_model_write_parameterized_model_type), pointer &
288  :: model_write_parameterized_model
289 
290  call c_f_pointer(model_write_parameterized_model_handle%p, &
291  model_write_parameterized_model)
292  call set_parameter_file_name(model_write_parameterized_model, &
293  trim(file_name)//c_null_char)
295 
302  recursive subroutine &
304  model_write_parameterized_model_handle, ptr)
305  use kim_interoperable_types_module, only: &
306  kim_model_write_parameterized_model_type
307  implicit none
308  interface
309  recursive subroutine get_model_buffer_pointer( &
310  model_write_parameterized_model, ptr) &
311  bind(c, name="KIM_ModelCompute_GetModelBufferPointer")
312  use, intrinsic :: iso_c_binding
313  use kim_interoperable_types_module, only: &
314  kim_model_write_parameterized_model_type
315  implicit none
316  type(kim_model_write_parameterized_model_type), intent(in) &
317  :: model_write_parameterized_model
318  type(c_ptr), intent(out) :: ptr
319  end subroutine get_model_buffer_pointer
320  end interface
321  type(kim_model_write_parameterized_model_handle_type), intent(in) &
322  :: model_write_parameterized_model_handle
323  type(c_ptr), intent(out) :: ptr
324  type(kim_model_write_parameterized_model_type), pointer &
325  :: model_write_parameterized_model
326 
327  call c_f_pointer(model_write_parameterized_model_handle%p, &
328  model_write_parameterized_model)
329  call get_model_buffer_pointer(model_write_parameterized_model, ptr)
331 
338  recursive subroutine kim_model_write_parameterized_model_log_entry( &
339  model_write_parameterized_model_handle, log_verbosity, message)
340  use kim_log_verbosity_module, only: kim_log_verbosity_type
341  use kim_interoperable_types_module, only: &
342  kim_model_write_parameterized_model_type
343  implicit none
344  interface
345  recursive subroutine log_entry( &
346  model_write_parameterized_model, log_verbosity, message, line_number, &
347  file_name) bind(c, name="KIM_ModelCompute_LogEntry")
348  use, intrinsic :: iso_c_binding
349  use kim_log_verbosity_module, only: kim_log_verbosity_type
350  use kim_interoperable_types_module, only: &
351  kim_model_write_parameterized_model_type
352  implicit none
353  type(kim_model_write_parameterized_model_type), intent(in) &
354  :: model_write_parameterized_model
355  type(kim_log_verbosity_type), intent(in), value :: log_verbosity
356  character(c_char), intent(in) :: message(*)
357  integer(c_int), intent(in), value :: line_number
358  character(c_char), intent(in) :: file_name(*)
359  end subroutine log_entry
360  end interface
361  type(kim_model_write_parameterized_model_handle_type), intent(in) &
362  :: model_write_parameterized_model_handle
363  type(kim_log_verbosity_type), intent(in) :: log_verbosity
364  character(len=*, kind=c_char), intent(in) :: message
365  type(kim_model_write_parameterized_model_type), pointer &
366  :: model_write_parameterized_model
367 
368  call c_f_pointer(model_write_parameterized_model_handle%p, &
369  model_write_parameterized_model)
370  call log_entry(model_write_parameterized_model, log_verbosity, &
371  trim(message)//c_null_char, 0, ""//c_null_char)
373 
380  recursive subroutine kim_model_write_parameterized_model_to_string( &
381  model_write_parameterized_model_handle, string)
382  use kim_convert_string_module, only: kim_convert_c_char_ptr_to_string
383  use kim_interoperable_types_module, only: &
384  kim_model_write_parameterized_model_type
385  implicit none
386  interface
387  type(c_ptr) recursive function model_write_parameterized_model_string( &
388  model_write_parameterized_model) &
389  bind(c, name="KIM_ModelCompute_ToString")
390  use, intrinsic :: iso_c_binding
391  use kim_interoperable_types_module, only: &
392  kim_model_write_parameterized_model_type
393  implicit none
394  type(kim_model_write_parameterized_model_type), intent(in) &
395  :: model_write_parameterized_model
396  end function model_write_parameterized_model_string
397  end interface
398  type(kim_model_write_parameterized_model_handle_type), intent(in) &
399  :: model_write_parameterized_model_handle
400  character(len=*, kind=c_char), intent(out) :: string
401  type(kim_model_write_parameterized_model_type), pointer &
402  :: model_write_parameterized_model
403 
404  type(c_ptr) :: p
405 
406  call c_f_pointer(model_write_parameterized_model_handle%p, &
407  model_write_parameterized_model)
408  p = model_write_parameterized_model_string(model_write_parameterized_model)
409  call kim_convert_c_char_ptr_to_string(p, string)
recursive subroutine kim_model_write_parameterized_model_get_model_buffer_pointer(model_write_parameterized_model_handle, ptr)
Get the Model's buffer pointer within the Model object.
recursive subroutine kim_model_write_parameterized_model_get_model_name(model_write_parameterized_model_handle, model_name)
Get the name of the new parameterized model.
recursive subroutine kim_model_write_parameterized_model_to_string(model_write_parameterized_model_handle, string)
Get a string representing the internal state of the Model object.
type(kim_model_write_parameterized_model_handle_type), save, public, protected kim_model_write_parameterized_model_null_handle
NULL handle for use in comparisons.
Provides the interface to a KIM API Model object for use by models within their MODEL_ROUTINE_NAME::W...
recursive subroutine kim_model_write_parameterized_model_set_parameter_file_name(model_write_parameterized_model_handle, file_name)
Set the file name for the next parameter file.
An Extensible Enumeration for the LogVerbosity's supported by the KIM API.
recursive subroutine kim_model_write_parameterized_model_log_entry(model_write_parameterized_model_handle, log_verbosity, message)
Write a log entry into the log file.