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_create_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_create_handle_type, &
43  ! Constants
45  ! Routines
46  operator(.eq.), &
47  operator(.ne.), &
48  kim_set_model_numbering, &
49  kim_set_influence_distance_pointer, &
50  kim_set_neighbor_list_pointers, &
51  kim_set_routine_pointer, &
52  kim_set_species_code, &
53  kim_set_parameter_pointer, &
54  kim_set_model_buffer_pointer, &
55  kim_set_units, &
56  kim_convert_unit, &
57  kim_log_entry, &
58  kim_to_string
59 
65  type, bind(c) :: kim_model_create_handle_type
66  type(c_ptr) :: p = c_null_ptr
67  end type kim_model_create_handle_type
68 
72  type(kim_model_create_handle_type), protected, save &
74 
78  interface operator(.eq.)
79  module procedure kim_model_create_handle_equal
80  end interface operator(.eq.)
81 
85  interface operator(.ne.)
86  module procedure kim_model_create_handle_not_equal
87  end interface operator(.ne.)
88 
94  interface kim_set_model_numbering
95  module procedure kim_model_create_set_model_numbering
96  end interface kim_set_model_numbering
97 
104  interface kim_set_influence_distance_pointer
106  end interface kim_set_influence_distance_pointer
107 
114  interface kim_set_neighbor_list_pointers
116  end interface kim_set_neighbor_list_pointers
117 
123  interface kim_set_routine_pointer
124  module procedure kim_model_create_set_routine_pointer
125  end interface kim_set_routine_pointer
126 
132  interface kim_set_species_code
133  module procedure kim_model_create_set_species_code
134  end interface kim_set_species_code
135 
143  interface kim_set_parameter_pointer
146  end interface kim_set_parameter_pointer
147 
154  interface kim_set_model_buffer_pointer
156  end interface kim_set_model_buffer_pointer
157 
163  interface kim_set_units
164  module procedure kim_model_create_set_units
165  end interface kim_set_units
166 
172  interface kim_convert_unit
173  module procedure kim_model_create_convert_unit
174  end interface kim_convert_unit
175 
181  interface kim_log_entry
182  module procedure kim_model_create_log_entry
183  end interface kim_log_entry
184 
190  interface kim_to_string
191  module procedure kim_model_create_to_string
192  end interface kim_to_string
193 
194 contains
198  logical recursive function kim_model_create_handle_equal(lhs, rhs)
199  implicit none
200  type(kim_model_create_handle_type), intent(in) :: lhs
201  type(kim_model_create_handle_type), intent(in) :: rhs
202 
203  if ((.not. c_associated(lhs%p)) .and. (.not. c_associated(rhs%p))) then
204  kim_model_create_handle_equal = .true.
205  else
206  kim_model_create_handle_equal = c_associated(lhs%p, rhs%p)
207  end if
208  end function kim_model_create_handle_equal
209 
213  logical recursive function kim_model_create_handle_not_equal(lhs, rhs)
214  implicit none
215  type(kim_model_create_handle_type), intent(in) :: lhs
216  type(kim_model_create_handle_type), intent(in) :: rhs
217 
218  kim_model_create_handle_not_equal = .not. (lhs == rhs)
219  end function kim_model_create_handle_not_equal
220 
226  recursive subroutine kim_model_create_set_model_numbering( &
227  model_create_handle, numbering, ierr)
228  use kim_numbering_module, only: kim_numbering_type
229  use kim_interoperable_types_module, only: kim_model_create_type
230  implicit none
231  interface
232  integer(c_int) recursive function set_model_numbering( &
233  model_create, numbering) &
234  bind(c, name="KIM_ModelCreate_SetModelNumbering")
235  use, intrinsic :: iso_c_binding
236  use kim_numbering_module, only: kim_numbering_type
237  use kim_interoperable_types_module, only: kim_model_create_type
238  implicit none
239  type(kim_model_create_type), intent(in) :: model_create
240  type(kim_numbering_type), intent(in), value :: numbering
241  end function set_model_numbering
242  end interface
243  type(kim_model_create_handle_type), intent(in) :: model_create_handle
244  type(kim_numbering_type), intent(in) :: numbering
245  integer(c_int), intent(out) :: ierr
246  type(kim_model_create_type), pointer :: model_create
247 
248  call c_f_pointer(model_create_handle%p, model_create)
249  ierr = set_model_numbering(model_create, numbering)
250  end subroutine kim_model_create_set_model_numbering
251 
259  model_create_handle, influence_distance)
260  use kim_interoperable_types_module, only: kim_model_create_type
261  implicit none
262  interface
263  recursive subroutine set_influence_distance_pointer(model_create, &
264  influence_distance) &
265  bind(c, name="KIM_ModelCreate_SetInfluenceDistancePointer")
266  use, intrinsic :: iso_c_binding
267  use kim_interoperable_types_module, only: kim_model_create_type
268  implicit none
269  type(kim_model_create_type), intent(in) :: model_create
270  type(c_ptr), intent(in), value :: influence_distance
271  end subroutine set_influence_distance_pointer
272  end interface
273  type(kim_model_create_handle_type), intent(in) :: model_create_handle
274  real(c_double), intent(in), target :: influence_distance
275  type(kim_model_create_type), pointer :: model_create
276 
277  call c_f_pointer(model_create_handle%p, model_create)
278  call set_influence_distance_pointer(model_create, &
279  c_loc(influence_distance))
281 
288  recursive subroutine kim_model_create_set_neighbor_list_pointers( &
289  model_create_handle, number_of_neighbor_lists, cutoffs, &
290  model_will_not_request_neighbors_of_noncontributing_particles)
291  use kim_interoperable_types_module, only: kim_model_create_type
292  implicit none
293  interface
294  recursive subroutine set_neighbor_list_pointers( &
295  model_create, number_of_neighbor_lists, cutoffs_ptr, &
296  model_will_not_request_neighbors_of_noncontributing_particles) &
297  bind(c, name="KIM_ModelCreate_SetNeighborListPointers")
298  use, intrinsic :: iso_c_binding
299  use kim_interoperable_types_module, only: kim_model_create_type
300  implicit none
301  type(kim_model_create_type), intent(in) :: model_create
302  integer(c_int), intent(in), value :: number_of_neighbor_lists
303  type(c_ptr), intent(in), value :: cutoffs_ptr
304  type(c_ptr), intent(in), value :: &
305  model_will_not_request_neighbors_of_noncontributing_particles
306  end subroutine set_neighbor_list_pointers
307  end interface
308  type(kim_model_create_handle_type), intent(in) :: model_create_handle
309  integer(c_int), intent(in) :: number_of_neighbor_lists
310  real(c_double), intent(in), target :: cutoffs(number_of_neighbor_lists)
311  integer(c_int), intent(in), target :: &
312  model_will_not_request_neighbors_of_noncontributing_particles( &
313  number_of_neighbor_lists)
314  type(kim_model_create_type), pointer :: model_create
315 
316  call c_f_pointer(model_create_handle%p, model_create)
317  call set_neighbor_list_pointers( &
318  model_create, number_of_neighbor_lists, c_loc(cutoffs), &
319  c_loc(model_will_not_request_neighbors_of_noncontributing_particles))
321 
327  recursive subroutine kim_model_create_set_routine_pointer( &
328  model_create_handle, model_routine_name, language_name, required, fptr, &
329  ierr)
330  use kim_model_routine_name_module, only: kim_model_routine_name_type
331  use kim_language_name_module, only: kim_language_name_type
332  use kim_interoperable_types_module, only: kim_model_create_type
333  implicit none
334  interface
335  integer(c_int) recursive function set_routine_pointer( &
336  model_create, model_routine_name, language_name, required, fptr) &
337  bind(c, name="KIM_ModelCreate_SetRoutinePointer")
338  use, intrinsic :: iso_c_binding
339  use kim_model_routine_name_module, only: kim_model_routine_name_type
340  use kim_language_name_module, only: kim_language_name_type
341  use kim_interoperable_types_module, only: kim_model_create_type
342  implicit none
343  type(kim_model_create_type), intent(in) :: model_create
344  type(kim_model_routine_name_type), intent(in), value &
345  :: model_routine_name
346  type(kim_language_name_type), intent(in), value :: language_name
347  integer(c_int), intent(in), value :: required
348  type(c_funptr), intent(in), value :: fptr
349  end function set_routine_pointer
350  end interface
351  type(kim_model_create_handle_type), intent(in) :: model_create_handle
352  type(kim_model_routine_name_type), intent(in) :: model_routine_name
353  type(kim_language_name_type), intent(in) :: language_name
354  integer(c_int), intent(in) :: required
355  type(c_funptr), intent(in), value :: fptr ! must be left as "value"!?!
356  integer(c_int), intent(out) :: ierr
357  type(kim_model_create_type), pointer :: model_create
358 
359  call c_f_pointer(model_create_handle%p, model_create)
360  ierr = set_routine_pointer(model_create, model_routine_name, &
361  language_name, required, fptr)
363 
369  recursive subroutine kim_model_create_set_species_code( &
370  model_create_handle, species_name, code, ierr)
371  use kim_species_name_module, only: kim_species_name_type
372  use kim_interoperable_types_module, only: kim_model_create_type
373  implicit none
374  interface
375  integer(c_int) recursive function set_species_code(model_create, &
376  species_name, code) &
377  bind(c, name="KIM_ModelCreate_SetSpeciesCode")
378  use, intrinsic :: iso_c_binding
379  use kim_species_name_module, only: kim_species_name_type
380  use kim_interoperable_types_module, only: kim_model_create_type
381  implicit none
382  type(kim_model_create_type), intent(in) :: model_create
383  type(kim_species_name_type), intent(in), value :: species_name
384  integer(c_int), intent(in), value :: code
385  end function set_species_code
386  end interface
387  type(kim_model_create_handle_type), intent(in) :: model_create_handle
388  type(kim_species_name_type), intent(in) :: species_name
389  integer(c_int), intent(in) :: code
390  integer(c_int), intent(out) :: ierr
391  type(kim_model_create_type), pointer :: model_create
392 
393  call c_f_pointer(model_create_handle%p, model_create)
394  ierr = set_species_code(model_create, species_name, code)
395  end subroutine kim_model_create_set_species_code
396 
403  recursive subroutine kim_model_create_set_parameter_pointer_integer( &
404  model_create_handle, int1, name, description, ierr)
405  use kim_interoperable_types_module, only: kim_model_create_type
406  implicit none
407  type(kim_model_create_handle_type), intent(in) :: model_create_handle
408  integer(c_int), intent(in), target :: int1(:)
409  character(len=*, kind=c_char), intent(in) :: name
410  character(len=*, kind=c_char), intent(in) :: description
411  integer(c_int), intent(out) :: ierr
412  type(kim_model_create_type), pointer :: model_create
413 
414  call c_f_pointer(model_create_handle%p, model_create)
415  call set_parameter(model_create, size(int1, 1, c_int), int1, name, &
416  description, ierr)
417  return
418 
419  contains
420  recursive subroutine set_parameter(model_create, extent, int1, name, &
421  description, ierr)
422  use kim_interoperable_types_module, only: kim_model_create_type
423  implicit none
424  interface
425  integer(c_int) recursive function set_parameter_pointer_integer( &
426  model_create, extent, ptr, name, description) &
427  bind(c, name="KIM_ModelCreate_SetParameterPointerInteger")
428  use, intrinsic :: iso_c_binding
429  use kim_interoperable_types_module, only: kim_model_create_type
430  implicit none
431  type(kim_model_create_type), intent(in) :: model_create
432  integer(c_int), intent(in), value :: extent
433  type(c_ptr), intent(in), value :: ptr
434  character(c_char), intent(in) :: name(*)
435  character(c_char), intent(in) :: description(*)
436  end function set_parameter_pointer_integer
437  end interface
438  type(kim_model_create_type), intent(in) :: model_create
439  integer(c_int), intent(in) :: extent
440  integer(c_int), intent(in), target :: int1(extent)
441  character(len=*, kind=c_char), intent(in) :: name
442  character(len=*, kind=c_char), intent(in) :: description
443  integer(c_int), intent(out) :: ierr
444 
445  ierr = set_parameter_pointer_integer(model_create, &
446  extent, &
447  c_loc(int1), &
448  trim(name)//c_null_char, &
449  trim(description)//c_null_char)
450  end subroutine set_parameter
452 
459  recursive subroutine kim_model_create_set_parameter_pointer_double( &
460  model_create_handle, double1, name, description, ierr)
461  use kim_interoperable_types_module, only: kim_model_create_type
462  implicit none
463  type(kim_model_create_handle_type), intent(in) :: model_create_handle
464  real(c_double), intent(in), target :: double1(:)
465  character(len=*, kind=c_char), intent(in) :: name
466  character(len=*, kind=c_char), intent(in) :: description
467  integer(c_int), intent(out) :: ierr
468  type(kim_model_create_type), pointer :: model_create
469 
470  call c_f_pointer(model_create_handle%p, model_create)
471  call set_parameter(model_create, size(double1, 1, c_int), double1, &
472  name, description, ierr)
473  return
474 
475  contains
476  recursive subroutine set_parameter(model_create, extent, double1, name, &
477  description, ierr)
478  implicit none
479  interface
480  integer(c_int) recursive function set_parameter_pointer_double( &
481  model_create, extent, ptr, name, description) &
482  bind(c, name="KIM_ModelCreate_SetParameterPointerDouble")
483  use, intrinsic :: iso_c_binding
484  use kim_interoperable_types_module, only: kim_model_create_type
485  implicit none
486  type(kim_model_create_type), intent(in) :: model_create
487  integer(c_int), intent(in), value :: extent
488  type(c_ptr), intent(in), value :: ptr
489  character(c_char), intent(in) :: name(*)
490  character(c_char), intent(in) :: description(*)
491  end function set_parameter_pointer_double
492  end interface
493  type(kim_model_create_type), intent(in) :: model_create
494  integer(c_int), intent(in) :: extent
495  real(c_double), intent(in), target :: double1(extent)
496  character(len=*, kind=c_char), intent(in) :: name
497  character(len=*, kind=c_char), intent(in) :: description
498  integer(c_int), intent(out) :: ierr
499 
500  ierr = set_parameter_pointer_double(model_create, &
501  extent, &
502  c_loc(double1), &
503  trim(name)//c_null_char, &
504  trim(description)//c_null_char)
505  end subroutine set_parameter
507 
514  recursive subroutine kim_model_create_set_model_buffer_pointer( &
515  model_create_handle, ptr)
516  use kim_interoperable_types_module, only: kim_model_create_type
517  implicit none
518  interface
519  recursive subroutine set_model_buffer_pointer(model_create, ptr) &
520  bind(c, name="KIM_ModelCreate_SetModelBufferPointer")
521  use, intrinsic :: iso_c_binding
522  use kim_interoperable_types_module, only: kim_model_create_type
523  implicit none
524  type(kim_model_create_type), intent(in) :: model_create
525  type(c_ptr), intent(in), value :: ptr
526  end subroutine set_model_buffer_pointer
527  end interface
528  type(kim_model_create_handle_type), intent(in) :: model_create_handle
529  type(c_ptr), intent(in) :: ptr
530  type(kim_model_create_type), pointer :: model_create
531 
532  call c_f_pointer(model_create_handle%p, model_create)
533  call set_model_buffer_pointer(model_create, ptr)
535 
541  recursive subroutine kim_model_create_set_units( &
542  model_create_handle, length_unit, energy_unit, charge_unit, &
543  temperature_unit, time_unit, ierr)
545  kim_length_unit_type, &
546  kim_energy_unit_type, &
547  kim_charge_unit_type, &
548  kim_temperature_unit_type, &
549  kim_time_unit_type
550  use kim_interoperable_types_module, only: kim_model_create_type
551  implicit none
552  interface
553  integer(c_int) recursive function set_units( &
554  model_create, length_unit, energy_unit, charge_unit, temperature_unit, &
555  time_unit) bind(c, name="KIM_ModelCreate_SetUnits")
556  use, intrinsic :: iso_c_binding
557  use kim_unit_system_module, only: kim_length_unit_type, &
558  kim_energy_unit_type, &
559  kim_charge_unit_type, &
560  kim_temperature_unit_type, &
561  kim_time_unit_type
562  use kim_interoperable_types_module, only: kim_model_create_type
563  implicit none
564  type(kim_model_create_type), intent(in) :: model_create
565  type(kim_length_unit_type), intent(in), value :: length_unit
566  type(kim_energy_unit_type), intent(in), value :: energy_unit
567  type(kim_charge_unit_type), intent(in), value :: charge_unit
568  type(kim_temperature_unit_type), intent(in), value :: temperature_unit
569  type(kim_time_unit_type), intent(in), value :: time_unit
570  end function set_units
571  end interface
572  type(kim_model_create_handle_type), intent(in) :: model_create_handle
573  type(kim_length_unit_type), intent(in) :: length_unit
574  type(kim_energy_unit_type), intent(in) :: energy_unit
575  type(kim_charge_unit_type), intent(in) :: charge_unit
576  type(kim_temperature_unit_type), intent(in) :: temperature_unit
577  type(kim_time_unit_type), intent(in) :: time_unit
578  integer(c_int), intent(out) :: ierr
579  type(kim_model_create_type), pointer :: model_create
580 
581  call c_f_pointer(model_create_handle%p, model_create)
582  ierr = set_units(model_create, length_unit, energy_unit, &
583  charge_unit, temperature_unit, time_unit)
584  end subroutine kim_model_create_set_units
585 
591  recursive subroutine kim_model_create_convert_unit( &
592  from_length_unit, from_energy_unit, &
593  from_charge_unit, from_temperature_unit, from_time_unit, &
594  to_length_unit, to_energy_unit, to_charge_unit, to_temperature_unit, &
595  to_time_unit, length_exponent, energy_exponent, charge_exponent, &
596  temperature_exponent, time_exponent, conversion_factor, ierr)
597  use kim_unit_system_module, only: kim_length_unit_type
598  use kim_unit_system_module, only: kim_energy_unit_type
599  use kim_unit_system_module, only: kim_charge_unit_type
600  use kim_unit_system_module, only: kim_temperature_unit_type
601  use kim_unit_system_module, only: kim_time_unit_type
602  implicit none
603  interface
604  integer(c_int) recursive function convert_unit( &
605  from_length_unit, from_energy_unit, &
606  from_charge_unit, from_temperature_unit, from_time_unit, &
607  to_length_unit, to_energy_unit, to_charge_unit, to_temperature_unit, &
608  to_time_unit, length_exponent, energy_exponent, charge_exponent, &
609  temperature_exponent, time_exponent, conversion_factor) &
610  bind(c, name="KIM_ModelCreate_ConvertUnit")
611  use, intrinsic :: iso_c_binding
612  use kim_unit_system_module, only: kim_length_unit_type
613  use kim_unit_system_module, only: kim_energy_unit_type
614  use kim_unit_system_module, only: kim_charge_unit_type
615  use kim_unit_system_module, only: kim_temperature_unit_type
616  use kim_unit_system_module, only: kim_time_unit_type
617  implicit none
618  type(kim_length_unit_type), intent(in), value :: from_length_unit
619  type(kim_energy_unit_type), intent(in), value :: from_energy_unit
620  type(kim_charge_unit_type), intent(in), value :: from_charge_unit
621  type(kim_temperature_unit_type), intent(in), value :: &
622  from_temperature_unit
623  type(kim_time_unit_type), intent(in), value :: from_time_unit
624  type(kim_length_unit_type), intent(in), value :: to_length_unit
625  type(kim_energy_unit_type), intent(in), value :: to_energy_unit
626  type(kim_charge_unit_type), intent(in), value :: to_charge_unit
627  type(kim_temperature_unit_type), intent(in), value :: &
628  to_temperature_unit
629  type(kim_time_unit_type), intent(in), value :: to_time_unit
630  real(c_double), intent(in), value :: length_exponent
631  real(c_double), intent(in), value :: energy_exponent
632  real(c_double), intent(in), value :: charge_exponent
633  real(c_double), intent(in), value :: temperature_exponent
634  real(c_double), intent(in), value :: time_exponent
635  real(c_double), intent(out) :: conversion_factor
636  end function convert_unit
637  end interface
638  type(kim_length_unit_type), intent(in) :: from_length_unit
639  type(kim_energy_unit_type), intent(in) :: from_energy_unit
640  type(kim_charge_unit_type), intent(in) :: from_charge_unit
641  type(kim_temperature_unit_type), intent(in) :: from_temperature_unit
642  type(kim_time_unit_type), intent(in) :: from_time_unit
643  type(kim_length_unit_type), intent(in) :: to_length_unit
644  type(kim_energy_unit_type), intent(in) :: to_energy_unit
645  type(kim_charge_unit_type), intent(in) :: to_charge_unit
646  type(kim_temperature_unit_type), intent(in) :: to_temperature_unit
647  type(kim_time_unit_type), intent(in) :: to_time_unit
648  real(c_double), intent(in) :: length_exponent
649  real(c_double), intent(in) :: energy_exponent
650  real(c_double), intent(in) :: charge_exponent
651  real(c_double), intent(in) :: temperature_exponent
652  real(c_double), intent(in) :: time_exponent
653  real(c_double), intent(out) :: conversion_factor
654  integer(c_int), intent(out) :: ierr
655 
656  ierr = convert_unit(from_length_unit, from_energy_unit, from_charge_unit, &
657  from_temperature_unit, from_time_unit, to_length_unit, &
658  to_energy_unit, to_charge_unit, to_temperature_unit, &
659  to_time_unit, length_exponent, energy_exponent, &
660  charge_exponent, temperature_exponent, time_exponent, &
661  conversion_factor)
662  end subroutine kim_model_create_convert_unit
663 
669  recursive subroutine kim_model_create_log_entry(model_create_handle, &
670  log_verbosity, message)
671  use kim_log_verbosity_module, only: kim_log_verbosity_type
672  use kim_interoperable_types_module, only: kim_model_create_type
673  implicit none
674  interface
675  recursive subroutine log_entry(model_create, log_verbosity, message, &
676  line_number, file_name) &
677  bind(c, name="KIM_ModelCreate_LogEntry")
678  use, intrinsic :: iso_c_binding
679  use kim_log_verbosity_module, only: kim_log_verbosity_type
680  use kim_interoperable_types_module, only: kim_model_create_type
681  implicit none
682  type(kim_model_create_type), intent(in) :: model_create
683  type(kim_log_verbosity_type), intent(in), value :: log_verbosity
684  character(c_char), intent(in) :: message(*)
685  integer(c_int), intent(in), value :: line_number
686  character(c_char), intent(in) :: file_name(*)
687  end subroutine log_entry
688  end interface
689  type(kim_model_create_handle_type), intent(in) :: model_create_handle
690  type(kim_log_verbosity_type), intent(in) :: log_verbosity
691  character(len=*, kind=c_char), intent(in) :: message
692  type(kim_model_create_type), pointer :: model_create
693 
694  call c_f_pointer(model_create_handle%p, model_create)
695  call log_entry(model_create, log_verbosity, trim(message)//c_null_char, &
696  0, ""//c_null_char)
697  end subroutine kim_model_create_log_entry
698 
704  recursive subroutine kim_model_create_to_string(model_create_handle, string)
705  use kim_convert_string_module, only: kim_convert_c_char_ptr_to_string
706  use kim_interoperable_types_module, only: kim_model_create_type
707  implicit none
708  interface
709  type(c_ptr) recursive function model_create_string(model_create) &
710  bind(c, name="KIM_ModelCreate_ToString")
711  use, intrinsic :: iso_c_binding
712  use kim_interoperable_types_module, only: kim_model_create_type
713  implicit none
714  type(kim_model_create_type), intent(in) :: model_create
715  end function model_create_string
716  end interface
717  type(kim_model_create_handle_type), intent(in) :: model_create_handle
718  character(len=*, kind=c_char), intent(out) :: string
719  type(kim_model_create_type), pointer :: model_create
720 
721  type(c_ptr) :: p
722 
723  call c_f_pointer(model_create_handle%p, model_create)
724  p = model_create_string(model_create)
725  call kim_convert_c_char_ptr_to_string(p, string)
726  end subroutine kim_model_create_to_string
727 end module kim_model_create_module
recursive subroutine kim_model_create_set_influence_distance_pointer(model_create_handle, influence_distance)
Set the Model's influence distance data pointer.
recursive subroutine kim_model_create_set_model_buffer_pointer(model_create_handle, ptr)
Set the Model's buffer pointer within the Model object.
recursive subroutine kim_model_create_set_parameter_pointer_integer(model_create_handle, int1, name, description, ierr)
Set the next parameter data pointer to be provided by the model.
int model_create(KIM_ModelCreate *const modelCreate, KIM_LengthUnit const requestedLengthUnit, KIM_EnergyUnit const requestedEnergyUnit, KIM_ChargeUnit const requestedChargeUnit, KIM_TemperatureUnit const requestedTemperatureUnit, KIM_TimeUnit const requestedTimeUnit)
An Extensible Enumeration for the ModelRoutineName's supported by the KIM API.
Provides the interface to a KIM API Model object for use by models within their MODEL_ROUTINE_NAME::C...
An Extensible Enumeration for the Numbering's supported by the KIM API.
recursive subroutine kim_model_create_set_species_code(model_create_handle, species_name, code, ierr)
Set integer code for supported SpeciesName.
recursive subroutine kim_model_create_set_units(model_create_handle, length_unit, energy_unit, charge_unit, temperature_unit, time_unit, ierr)
Set the Model's base unit values.
recursive subroutine kim_model_create_set_neighbor_list_pointers(model_create_handle, number_of_neighbor_lists, cutoffs, model_will_not_request_neighbors_of_noncontributing_particles)
Set the Model's neighbor list data pointers.
An Extensible Enumeration for the LanguageName's supported by the KIM API.
recursive subroutine kim_model_create_set_parameter_pointer_double(model_create_handle, double1, name, description, ierr)
Set the next parameter data pointer to be provided by the model.
recursive subroutine kim_model_create_log_entry(model_create_handle, log_verbosity, message)
Write a log entry into the log file.
An Extensible Enumeration for the SpeciesName's supported by the KIM API.
recursive subroutine set_parameter(model_create, extent, int1, name, description, ierr)
recursive subroutine kim_model_create_to_string(model_create_handle, string)
Get a string representing the internal state of the Model object.
recursive subroutine kim_model_create_convert_unit(from_length_unit, from_energy_unit, from_charge_unit, from_temperature_unit, from_time_unit, to_length_unit, to_energy_unit, to_charge_unit, to_temperature_unit, to_time_unit, length_exponent, energy_exponent, charge_exponent, temperature_exponent, time_exponent, conversion_factor, ierr)
Get the multiplicative factor to convert between a derived unit represented in two different sets of ...
type(kim_model_create_handle_type), save, public, protected kim_model_create_null_handle
NULL handle for use in comparisons.
An Extensible Enumeration for the LogVerbosity's supported by the KIM API.
recursive subroutine kim_model_create_set_routine_pointer(model_create_handle, model_routine_name, language_name, required, fptr, ierr)
Set the function pointer for the ModelRoutineName of interest.