kim-api  2.3.1-git+v2.3.0-git-2-g378406f9.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 ! KIM-API: An API for interatomic models
3 ! Copyright (c) 2013--2022, Regents of the University of Minnesota.
4 ! All rights reserved.
5 !
6 ! Contributors:
7 ! Ryan S. Elliott
8 !
9 ! SPDX-License-Identifier: LGPL-2.1-or-later
10 !
11 ! This library is free software; you can redistribute it and/or
12 ! modify it under the terms of the GNU Lesser General Public
13 ! License as published by the Free Software Foundation; either
14 ! version 2.1 of the License, or (at your option) any later version.
15 !
16 ! This library is distributed in the hope that it will be useful,
17 ! but WITHOUT ANY WARRANTY; without even the implied warranty of
18 ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19 ! Lesser General Public License for more details.
20 !
21 ! You should have received a copy of the GNU Lesser General Public License
22 ! along with this library; if not, write to the Free Software Foundation,
23 ! Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
24 !
25 
26 !
27 ! Release: This file is part of the kim-api.git repository.
28 !
29 
36  use, intrinsic :: iso_c_binding
37  implicit none
38  private
39 
40  public &
41  ! Derived types
42  kim_model_write_parameterized_model_handle_type, &
43  ! Constants
45  ! Routines
46  operator(.eq.), &
47  operator(.ne.), &
48  kim_get_path, &
49  kim_get_model_name, &
50  kim_set_parameter_file_name, &
51  kim_get_model_buffer_pointer, &
52  kim_log_entry, &
53  kim_to_string
54 
60  type, bind(c) :: kim_model_write_parameterized_model_handle_type
61  type(c_ptr) :: p = c_null_ptr
62  end type kim_model_write_parameterized_model_handle_type
63 
67  type(kim_model_write_parameterized_model_handle_type), protected, save &
69 
74  interface operator(.eq.)
75  module procedure kim_model_write_parameterized_model_handle_equal
76  end interface operator(.eq.)
77 
82  interface operator(.ne.)
83  module procedure kim_model_write_parameterized_model_handle_not_equal
84  end interface operator(.ne.)
85 
92  interface kim_get_path
93  module procedure kim_model_write_parameterized_model_get_path
94  end interface kim_get_path
95 
102  interface kim_get_model_name
104  end interface kim_get_model_name
105 
112  interface kim_set_parameter_file_name
114  end interface kim_set_parameter_file_name
115 
122  interface kim_get_model_buffer_pointer
123  module procedure &
125  end interface kim_get_model_buffer_pointer
126 
133  interface kim_log_entry
135  end interface kim_log_entry
136 
143  interface kim_to_string
145  end interface kim_to_string
146 
147 contains
152  logical recursive function kim_model_write_parameterized_model_handle_equal( &
153  lhs, rhs)
154  implicit none
155  type(kim_model_write_parameterized_model_handle_type), intent(in) :: lhs
156  type(kim_model_write_parameterized_model_handle_type), intent(in) :: rhs
157 
158  if ((.not. c_associated(lhs%p)) .and. (.not. c_associated(rhs%p))) then
159  kim_model_write_parameterized_model_handle_equal = .true.
160  else
161  kim_model_write_parameterized_model_handle_equal = &
162  c_associated(lhs%p, rhs%p)
163  end if
164  end function kim_model_write_parameterized_model_handle_equal
165 
170  logical recursive function &
171  kim_model_write_parameterized_model_handle_not_equal(lhs, rhs)
172  implicit none
173  type(kim_model_write_parameterized_model_handle_type), intent(in) :: lhs
174  type(kim_model_write_parameterized_model_handle_type), intent(in) :: rhs
175 
176  kim_model_write_parameterized_model_handle_not_equal = .not. (lhs == rhs)
177  end function kim_model_write_parameterized_model_handle_not_equal
178 
185  recursive subroutine kim_model_write_parameterized_model_get_path( &
186  model_write_parameterized_model_handle, path)
187  use kim_convert_string_module, only: kim_convert_c_char_ptr_to_string
188  use kim_interoperable_types_module, only: &
189  kim_model_write_parameterized_model_type
190  implicit none
191  interface
192  recursive subroutine get_path(model_write_parameterized_model, path) &
193  bind(c, name="KIM_ModelWriteParameterizedModel_GetPath")
194  use, intrinsic :: iso_c_binding
195  use kim_interoperable_types_module, only: &
196  kim_model_write_parameterized_model_type
197  implicit none
198  type(kim_model_write_parameterized_model_type), intent(in) &
199  :: model_write_parameterized_model
200  type(c_ptr), intent(out) :: path
201  end subroutine get_path
202  end interface
203  type(kim_model_write_parameterized_model_handle_type), intent(in) &
204  :: model_write_parameterized_model_handle
205  character(len=*, kind=c_char), intent(out) :: path
206  type(kim_model_write_parameterized_model_type), pointer &
207  :: model_write_parameterized_model
208 
209  type(c_ptr) :: ppath
210 
211  call c_f_pointer(model_write_parameterized_model_handle%p, &
212  model_write_parameterized_model)
213  call get_path(model_write_parameterized_model, ppath)
214  call kim_convert_c_char_ptr_to_string(ppath, path)
215  end subroutine kim_model_write_parameterized_model_get_path
216 
224  model_write_parameterized_model_handle, model_name)
225  use kim_convert_string_module, only: kim_convert_c_char_ptr_to_string
226  use kim_interoperable_types_module, only: &
227  kim_model_write_parameterized_model_type
228  implicit none
229  interface
230  recursive subroutine get_model_name(model_write_parameterized_model, &
231  model_name) &
232  bind(c, name="KIM_ModelWriteParameterizedModel_GetModelName")
233  use, intrinsic :: iso_c_binding
234  use kim_interoperable_types_module, only: &
235  kim_model_write_parameterized_model_type
236  implicit none
237  type(kim_model_write_parameterized_model_type), intent(in) &
238  :: model_write_parameterized_model
239  type(c_ptr), intent(out) :: model_name
240  end subroutine get_model_name
241  end interface
242  type(kim_model_write_parameterized_model_handle_type), intent(in) &
243  :: model_write_parameterized_model_handle
244  character(len=*, kind=c_char), intent(out) :: model_name
245  type(kim_model_write_parameterized_model_type), pointer &
246  :: model_write_parameterized_model
247 
248  type(c_ptr) :: pmodel_name
249 
250  call c_f_pointer(model_write_parameterized_model_handle%p, &
251  model_write_parameterized_model)
252  call get_model_name(model_write_parameterized_model, pmodel_name)
253  call kim_convert_c_char_ptr_to_string(pmodel_name, model_name)
255 
262  recursive subroutine &
264  model_write_parameterized_model_handle, file_name)
265  use kim_interoperable_types_module, only: &
266  kim_model_write_parameterized_model_type
267  implicit none
268  interface
269  recursive subroutine set_parameter_file_name( &
270  model_write_parameterized_model, file_name) &
271  bind(c, name="KIM_ModelWriteParameterizedModel_SetParameterFileName")
272  use, intrinsic :: iso_c_binding
273  use kim_interoperable_types_module, only: &
274  kim_model_write_parameterized_model_type
275  implicit none
276  type(kim_model_write_parameterized_model_type), intent(in) &
277  :: model_write_parameterized_model
278  character(c_char), intent(in) :: file_name(*)
279  end subroutine set_parameter_file_name
280  end interface
281  type(kim_model_write_parameterized_model_handle_type), intent(in) &
282  :: model_write_parameterized_model_handle
283  character(len=*, kind=c_char), intent(in) :: file_name
284  type(kim_model_write_parameterized_model_type), pointer &
285  :: model_write_parameterized_model
286 
287  call c_f_pointer(model_write_parameterized_model_handle%p, &
288  model_write_parameterized_model)
289  call set_parameter_file_name(model_write_parameterized_model, &
290  trim(file_name)//c_null_char)
292 
299  recursive subroutine &
301  model_write_parameterized_model_handle, ptr)
302  use kim_interoperable_types_module, only: &
303  kim_model_write_parameterized_model_type
304  implicit none
305  interface
306  recursive subroutine get_model_buffer_pointer( &
307  model_write_parameterized_model, ptr) &
308  bind(c, name="KIM_ModelCompute_GetModelBufferPointer")
309  use, intrinsic :: iso_c_binding
310  use kim_interoperable_types_module, only: &
311  kim_model_write_parameterized_model_type
312  implicit none
313  type(kim_model_write_parameterized_model_type), intent(in) &
314  :: model_write_parameterized_model
315  type(c_ptr), intent(out) :: ptr
316  end subroutine get_model_buffer_pointer
317  end interface
318  type(kim_model_write_parameterized_model_handle_type), intent(in) &
319  :: model_write_parameterized_model_handle
320  type(c_ptr), intent(out) :: ptr
321  type(kim_model_write_parameterized_model_type), pointer &
322  :: model_write_parameterized_model
323 
324  call c_f_pointer(model_write_parameterized_model_handle%p, &
325  model_write_parameterized_model)
326  call get_model_buffer_pointer(model_write_parameterized_model, ptr)
328 
335  recursive subroutine kim_model_write_parameterized_model_log_entry( &
336  model_write_parameterized_model_handle, log_verbosity, message)
337  use kim_log_verbosity_module, only: kim_log_verbosity_type
338  use kim_interoperable_types_module, only: &
339  kim_model_write_parameterized_model_type
340  implicit none
341  interface
342  recursive subroutine log_entry( &
343  model_write_parameterized_model, log_verbosity, message, line_number, &
344  file_name) bind(c, name="KIM_ModelCompute_LogEntry")
345  use, intrinsic :: iso_c_binding
346  use kim_log_verbosity_module, only: kim_log_verbosity_type
347  use kim_interoperable_types_module, only: &
348  kim_model_write_parameterized_model_type
349  implicit none
350  type(kim_model_write_parameterized_model_type), intent(in) &
351  :: model_write_parameterized_model
352  type(kim_log_verbosity_type), intent(in), value :: log_verbosity
353  character(c_char), intent(in) :: message(*)
354  integer(c_int), intent(in), value :: line_number
355  character(c_char), intent(in) :: file_name(*)
356  end subroutine log_entry
357  end interface
358  type(kim_model_write_parameterized_model_handle_type), intent(in) &
359  :: model_write_parameterized_model_handle
360  type(kim_log_verbosity_type), intent(in) :: log_verbosity
361  character(len=*, kind=c_char), intent(in) :: message
362  type(kim_model_write_parameterized_model_type), pointer &
363  :: model_write_parameterized_model
364 
365  call c_f_pointer(model_write_parameterized_model_handle%p, &
366  model_write_parameterized_model)
367  call log_entry(model_write_parameterized_model, log_verbosity, &
368  trim(message)//c_null_char, 0, ""//c_null_char)
370 
377  recursive subroutine kim_model_write_parameterized_model_to_string( &
378  model_write_parameterized_model_handle, string)
379  use kim_convert_string_module, only: kim_convert_c_char_ptr_to_string
380  use kim_interoperable_types_module, only: &
381  kim_model_write_parameterized_model_type
382  implicit none
383  interface
384  type(c_ptr) recursive function model_write_parameterized_model_string( &
385  model_write_parameterized_model) &
386  bind(c, name="KIM_ModelCompute_ToString")
387  use, intrinsic :: iso_c_binding
388  use kim_interoperable_types_module, only: &
389  kim_model_write_parameterized_model_type
390  implicit none
391  type(kim_model_write_parameterized_model_type), intent(in) &
392  :: model_write_parameterized_model
393  end function model_write_parameterized_model_string
394  end interface
395  type(kim_model_write_parameterized_model_handle_type), intent(in) &
396  :: model_write_parameterized_model_handle
397  character(len=*, kind=c_char), intent(out) :: string
398  type(kim_model_write_parameterized_model_type), pointer &
399  :: model_write_parameterized_model
400 
401  type(c_ptr) :: p
402 
403  call c_f_pointer(model_write_parameterized_model_handle%p, &
404  model_write_parameterized_model)
405  p = model_write_parameterized_model_string(model_write_parameterized_model)
406  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.