kim-api  2.2.1+v2.2.1.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 ! 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_create_handle_type, &
46  ! Constants
48  ! Routines
49  operator(.eq.), &
50  operator(.ne.), &
51  kim_set_model_numbering, &
52  kim_set_influence_distance_pointer, &
53  kim_set_neighbor_list_pointers, &
54  kim_set_routine_pointer, &
55  kim_set_species_code, &
56  kim_set_parameter_pointer, &
57  kim_set_model_buffer_pointer, &
58  kim_set_units, &
59  kim_convert_unit, &
60  kim_log_entry, &
61  kim_to_string
62 
68  type, bind(c) :: kim_model_create_handle_type
69  type(c_ptr) :: p = c_null_ptr
70  end type kim_model_create_handle_type
71 
75  type(kim_model_create_handle_type), protected, save &
77 
81  interface operator(.eq.)
82  module procedure kim_model_create_handle_equal
83  end interface operator(.eq.)
84 
88  interface operator(.ne.)
89  module procedure kim_model_create_handle_not_equal
90  end interface operator(.ne.)
91 
97  interface kim_set_model_numbering
98  module procedure kim_model_create_set_model_numbering
99  end interface kim_set_model_numbering
100 
107  interface kim_set_influence_distance_pointer
109  end interface kim_set_influence_distance_pointer
110 
117  interface kim_set_neighbor_list_pointers
119  end interface kim_set_neighbor_list_pointers
120 
126  interface kim_set_routine_pointer
127  module procedure kim_model_create_set_routine_pointer
128  end interface kim_set_routine_pointer
129 
135  interface kim_set_species_code
136  module procedure kim_model_create_set_species_code
137  end interface kim_set_species_code
138 
146  interface kim_set_parameter_pointer
149  end interface kim_set_parameter_pointer
150 
157  interface kim_set_model_buffer_pointer
159  end interface kim_set_model_buffer_pointer
160 
166  interface kim_set_units
167  module procedure kim_model_create_set_units
168  end interface kim_set_units
169 
175  interface kim_convert_unit
176  module procedure kim_model_create_convert_unit
177  end interface kim_convert_unit
178 
184  interface kim_log_entry
185  module procedure kim_model_create_log_entry
186  end interface kim_log_entry
187 
193  interface kim_to_string
194  module procedure kim_model_create_to_string
195  end interface kim_to_string
196 
197 contains
201  logical recursive function kim_model_create_handle_equal(lhs, rhs)
202  implicit none
203  type(kim_model_create_handle_type), intent(in) :: lhs
204  type(kim_model_create_handle_type), intent(in) :: rhs
205 
206  if ((.not. c_associated(lhs%p)) .and. (.not. c_associated(rhs%p))) then
207  kim_model_create_handle_equal = .true.
208  else
209  kim_model_create_handle_equal = c_associated(lhs%p, rhs%p)
210  end if
211  end function kim_model_create_handle_equal
212 
216  logical recursive function kim_model_create_handle_not_equal(lhs, rhs)
217  implicit none
218  type(kim_model_create_handle_type), intent(in) :: lhs
219  type(kim_model_create_handle_type), intent(in) :: rhs
220 
221  kim_model_create_handle_not_equal = .not. (lhs == rhs)
222  end function kim_model_create_handle_not_equal
223 
229  recursive subroutine kim_model_create_set_model_numbering( &
230  model_create_handle, numbering, ierr)
231  use kim_numbering_module, only: kim_numbering_type
232  use kim_interoperable_types_module, only: kim_model_create_type
233  implicit none
234  interface
235  integer(c_int) recursive function set_model_numbering( &
236  model_create, numbering) &
237  bind(c, name="KIM_ModelCreate_SetModelNumbering")
238  use, intrinsic :: iso_c_binding
239  use kim_numbering_module, only: kim_numbering_type
240  use kim_interoperable_types_module, only: kim_model_create_type
241  implicit none
242  type(kim_model_create_type), intent(in) :: model_create
243  type(kim_numbering_type), intent(in), value :: numbering
244  end function set_model_numbering
245  end interface
246  type(kim_model_create_handle_type), intent(in) :: model_create_handle
247  type(kim_numbering_type), intent(in) :: numbering
248  integer(c_int), intent(out) :: ierr
249  type(kim_model_create_type), pointer :: model_create
250 
251  call c_f_pointer(model_create_handle%p, model_create)
252  ierr = set_model_numbering(model_create, numbering)
253  end subroutine kim_model_create_set_model_numbering
254 
262  model_create_handle, influence_distance)
263  use kim_interoperable_types_module, only: kim_model_create_type
264  implicit none
265  interface
266  recursive subroutine set_influence_distance_pointer(model_create, &
267  influence_distance) &
268  bind(c, name="KIM_ModelCreate_SetInfluenceDistancePointer")
269  use, intrinsic :: iso_c_binding
270  use kim_interoperable_types_module, only: kim_model_create_type
271  implicit none
272  type(kim_model_create_type), intent(in) :: model_create
273  type(c_ptr), intent(in), value :: influence_distance
274  end subroutine set_influence_distance_pointer
275  end interface
276  type(kim_model_create_handle_type), intent(in) :: model_create_handle
277  real(c_double), intent(in), target :: influence_distance
278  type(kim_model_create_type), pointer :: model_create
279 
280  call c_f_pointer(model_create_handle%p, model_create)
281  call set_influence_distance_pointer(model_create, &
282  c_loc(influence_distance))
284 
291  recursive subroutine kim_model_create_set_neighbor_list_pointers( &
292  model_create_handle, number_of_neighbor_lists, cutoffs, &
293  model_will_not_request_neighbors_of_noncontributing_particles)
294  use kim_interoperable_types_module, only: kim_model_create_type
295  implicit none
296  interface
297  recursive subroutine set_neighbor_list_pointers( &
298  model_create, number_of_neighbor_lists, cutoffs_ptr, &
299  model_will_not_request_neighbors_of_noncontributing_particles) &
300  bind(c, name="KIM_ModelCreate_SetNeighborListPointers")
301  use, intrinsic :: iso_c_binding
302  use kim_interoperable_types_module, only: kim_model_create_type
303  implicit none
304  type(kim_model_create_type), intent(in) :: model_create
305  integer(c_int), intent(in), value :: number_of_neighbor_lists
306  type(c_ptr), intent(in), value :: cutoffs_ptr
307  type(c_ptr), intent(in), value :: &
308  model_will_not_request_neighbors_of_noncontributing_particles
309  end subroutine set_neighbor_list_pointers
310  end interface
311  type(kim_model_create_handle_type), intent(in) :: model_create_handle
312  integer(c_int), intent(in) :: number_of_neighbor_lists
313  real(c_double), intent(in), target :: cutoffs(number_of_neighbor_lists)
314  integer(c_int), intent(in), target :: &
315  model_will_not_request_neighbors_of_noncontributing_particles( &
316  number_of_neighbor_lists)
317  type(kim_model_create_type), pointer :: model_create
318 
319  call c_f_pointer(model_create_handle%p, model_create)
320  call set_neighbor_list_pointers( &
321  model_create, number_of_neighbor_lists, c_loc(cutoffs), &
322  c_loc(model_will_not_request_neighbors_of_noncontributing_particles))
324 
330  recursive subroutine kim_model_create_set_routine_pointer( &
331  model_create_handle, model_routine_name, language_name, required, fptr, &
332  ierr)
333  use kim_model_routine_name_module, only: kim_model_routine_name_type
334  use kim_language_name_module, only: kim_language_name_type
335  use kim_interoperable_types_module, only: kim_model_create_type
336  implicit none
337  interface
338  integer(c_int) recursive function set_routine_pointer( &
339  model_create, model_routine_name, language_name, required, fptr) &
340  bind(c, name="KIM_ModelCreate_SetRoutinePointer")
341  use, intrinsic :: iso_c_binding
342  use kim_model_routine_name_module, only: kim_model_routine_name_type
343  use kim_language_name_module, only: kim_language_name_type
344  use kim_interoperable_types_module, only: kim_model_create_type
345  implicit none
346  type(kim_model_create_type), intent(in) :: model_create
347  type(kim_model_routine_name_type), intent(in), value &
348  :: model_routine_name
349  type(kim_language_name_type), intent(in), value :: language_name
350  integer(c_int), intent(in), value :: required
351  type(c_funptr), intent(in), value :: fptr
352  end function set_routine_pointer
353  end interface
354  type(kim_model_create_handle_type), intent(in) :: model_create_handle
355  type(kim_model_routine_name_type), intent(in) :: model_routine_name
356  type(kim_language_name_type), intent(in) :: language_name
357  integer(c_int), intent(in) :: required
358  type(c_funptr), intent(in), value :: fptr ! must be left as "value"!?!
359  integer(c_int), intent(out) :: ierr
360  type(kim_model_create_type), pointer :: model_create
361 
362  call c_f_pointer(model_create_handle%p, model_create)
363  ierr = set_routine_pointer(model_create, model_routine_name, &
364  language_name, required, fptr)
366 
372  recursive subroutine kim_model_create_set_species_code( &
373  model_create_handle, species_name, code, ierr)
374  use kim_species_name_module, only: kim_species_name_type
375  use kim_interoperable_types_module, only: kim_model_create_type
376  implicit none
377  interface
378  integer(c_int) recursive function set_species_code(model_create, &
379  species_name, code) &
380  bind(c, name="KIM_ModelCreate_SetSpeciesCode")
381  use, intrinsic :: iso_c_binding
382  use kim_species_name_module, only: kim_species_name_type
383  use kim_interoperable_types_module, only: kim_model_create_type
384  implicit none
385  type(kim_model_create_type), intent(in) :: model_create
386  type(kim_species_name_type), intent(in), value :: species_name
387  integer(c_int), intent(in), value :: code
388  end function set_species_code
389  end interface
390  type(kim_model_create_handle_type), intent(in) :: model_create_handle
391  type(kim_species_name_type), intent(in) :: species_name
392  integer(c_int), intent(in) :: code
393  integer(c_int), intent(out) :: ierr
394  type(kim_model_create_type), pointer :: model_create
395 
396  call c_f_pointer(model_create_handle%p, model_create)
397  ierr = set_species_code(model_create, species_name, code)
398  end subroutine kim_model_create_set_species_code
399 
406  recursive subroutine kim_model_create_set_parameter_pointer_integer( &
407  model_create_handle, int1, name, description, ierr)
408  use kim_interoperable_types_module, only: kim_model_create_type
409  implicit none
410  type(kim_model_create_handle_type), intent(in) :: model_create_handle
411  integer(c_int), intent(in), target :: int1(:)
412  character(len=*, kind=c_char), intent(in) :: name
413  character(len=*, kind=c_char), intent(in) :: description
414  integer(c_int), intent(out) :: ierr
415  type(kim_model_create_type), pointer :: model_create
416 
417  call c_f_pointer(model_create_handle%p, model_create)
418  call set_parameter(model_create, size(int1, 1, c_int), int1, name, &
419  description, ierr)
420  return
421 
422  contains
423  recursive subroutine set_parameter(model_create, extent, int1, name, &
424  description, ierr)
425  use kim_interoperable_types_module, only: kim_model_create_type
426  implicit none
427  interface
428  integer(c_int) recursive function set_parameter_pointer_integer( &
429  model_create, extent, ptr, name, description) &
430  bind(c, name="KIM_ModelCreate_SetParameterPointerInteger")
431  use, intrinsic :: iso_c_binding
432  use kim_interoperable_types_module, only: kim_model_create_type
433  implicit none
434  type(kim_model_create_type), intent(in) :: model_create
435  integer(c_int), intent(in), value :: extent
436  type(c_ptr), intent(in), value :: ptr
437  character(c_char), intent(in) :: name(*)
438  character(c_char), intent(in) :: description(*)
439  end function set_parameter_pointer_integer
440  end interface
441  type(kim_model_create_type), intent(in) :: model_create
442  integer(c_int), intent(in) :: extent
443  integer(c_int), intent(in), target :: int1(extent)
444  character(len=*, kind=c_char), intent(in) :: name
445  character(len=*, kind=c_char), intent(in) :: description
446  integer(c_int), intent(out) :: ierr
447 
448  ierr = set_parameter_pointer_integer(model_create, &
449  extent, &
450  c_loc(int1), &
451  trim(name)//c_null_char, &
452  trim(description)//c_null_char)
453  end subroutine set_parameter
455 
462  recursive subroutine kim_model_create_set_parameter_pointer_double( &
463  model_create_handle, double1, name, description, ierr)
464  use kim_interoperable_types_module, only: kim_model_create_type
465  implicit none
466  type(kim_model_create_handle_type), intent(in) :: model_create_handle
467  real(c_double), intent(in), target :: double1(:)
468  character(len=*, kind=c_char), intent(in) :: name
469  character(len=*, kind=c_char), intent(in) :: description
470  integer(c_int), intent(out) :: ierr
471  type(kim_model_create_type), pointer :: model_create
472 
473  call c_f_pointer(model_create_handle%p, model_create)
474  call set_parameter(model_create, size(double1, 1, c_int), double1, &
475  name, description, ierr)
476  return
477 
478  contains
479  recursive subroutine set_parameter(model_create, extent, double1, name, &
480  description, ierr)
481  implicit none
482  interface
483  integer(c_int) recursive function set_parameter_pointer_double( &
484  model_create, extent, ptr, name, description) &
485  bind(c, name="KIM_ModelCreate_SetParameterPointerDouble")
486  use, intrinsic :: iso_c_binding
487  use kim_interoperable_types_module, only: kim_model_create_type
488  implicit none
489  type(kim_model_create_type), intent(in) :: model_create
490  integer(c_int), intent(in), value :: extent
491  type(c_ptr), intent(in), value :: ptr
492  character(c_char), intent(in) :: name(*)
493  character(c_char), intent(in) :: description(*)
494  end function set_parameter_pointer_double
495  end interface
496  type(kim_model_create_type), intent(in) :: model_create
497  integer(c_int), intent(in) :: extent
498  real(c_double), intent(in), target :: double1(extent)
499  character(len=*, kind=c_char), intent(in) :: name
500  character(len=*, kind=c_char), intent(in) :: description
501  integer(c_int), intent(out) :: ierr
502 
503  ierr = set_parameter_pointer_double(model_create, &
504  extent, &
505  c_loc(double1), &
506  trim(name)//c_null_char, &
507  trim(description)//c_null_char)
508  end subroutine set_parameter
510 
517  recursive subroutine kim_model_create_set_model_buffer_pointer( &
518  model_create_handle, ptr)
519  use kim_interoperable_types_module, only: kim_model_create_type
520  implicit none
521  interface
522  recursive subroutine set_model_buffer_pointer(model_create, ptr) &
523  bind(c, name="KIM_ModelCreate_SetModelBufferPointer")
524  use, intrinsic :: iso_c_binding
525  use kim_interoperable_types_module, only: kim_model_create_type
526  implicit none
527  type(kim_model_create_type), intent(in) :: model_create
528  type(c_ptr), intent(in), value :: ptr
529  end subroutine set_model_buffer_pointer
530  end interface
531  type(kim_model_create_handle_type), intent(in) :: model_create_handle
532  type(c_ptr), intent(in) :: ptr
533  type(kim_model_create_type), pointer :: model_create
534 
535  call c_f_pointer(model_create_handle%p, model_create)
536  call set_model_buffer_pointer(model_create, ptr)
538 
544  recursive subroutine kim_model_create_set_units( &
545  model_create_handle, length_unit, energy_unit, charge_unit, &
546  temperature_unit, time_unit, ierr)
548  kim_length_unit_type, &
549  kim_energy_unit_type, &
550  kim_charge_unit_type, &
551  kim_temperature_unit_type, &
552  kim_time_unit_type
553  use kim_interoperable_types_module, only: kim_model_create_type
554  implicit none
555  interface
556  integer(c_int) recursive function set_units( &
557  model_create, length_unit, energy_unit, charge_unit, temperature_unit, &
558  time_unit) bind(c, name="KIM_ModelCreate_SetUnits")
559  use, intrinsic :: iso_c_binding
560  use kim_unit_system_module, only: kim_length_unit_type, &
561  kim_energy_unit_type, &
562  kim_charge_unit_type, &
563  kim_temperature_unit_type, &
564  kim_time_unit_type
565  use kim_interoperable_types_module, only: kim_model_create_type
566  implicit none
567  type(kim_model_create_type), intent(in) :: model_create
568  type(kim_length_unit_type), intent(in), value :: length_unit
569  type(kim_energy_unit_type), intent(in), value :: energy_unit
570  type(kim_charge_unit_type), intent(in), value :: charge_unit
571  type(kim_temperature_unit_type), intent(in), value :: temperature_unit
572  type(kim_time_unit_type), intent(in), value :: time_unit
573  end function set_units
574  end interface
575  type(kim_model_create_handle_type), intent(in) :: model_create_handle
576  type(kim_length_unit_type), intent(in) :: length_unit
577  type(kim_energy_unit_type), intent(in) :: energy_unit
578  type(kim_charge_unit_type), intent(in) :: charge_unit
579  type(kim_temperature_unit_type), intent(in) :: temperature_unit
580  type(kim_time_unit_type), intent(in) :: time_unit
581  integer(c_int), intent(out) :: ierr
582  type(kim_model_create_type), pointer :: model_create
583 
584  call c_f_pointer(model_create_handle%p, model_create)
585  ierr = set_units(model_create, length_unit, energy_unit, &
586  charge_unit, temperature_unit, time_unit)
587  end subroutine kim_model_create_set_units
588 
594  recursive subroutine kim_model_create_convert_unit( &
595  from_length_unit, from_energy_unit, &
596  from_charge_unit, from_temperature_unit, from_time_unit, &
597  to_length_unit, to_energy_unit, to_charge_unit, to_temperature_unit, &
598  to_time_unit, length_exponent, energy_exponent, charge_exponent, &
599  temperature_exponent, time_exponent, conversion_factor, ierr)
600  use kim_unit_system_module, only: kim_length_unit_type
601  use kim_unit_system_module, only: kim_energy_unit_type
602  use kim_unit_system_module, only: kim_charge_unit_type
603  use kim_unit_system_module, only: kim_temperature_unit_type
604  use kim_unit_system_module, only: kim_time_unit_type
605  implicit none
606  interface
607  integer(c_int) recursive function convert_unit( &
608  from_length_unit, from_energy_unit, &
609  from_charge_unit, from_temperature_unit, from_time_unit, &
610  to_length_unit, to_energy_unit, to_charge_unit, to_temperature_unit, &
611  to_time_unit, length_exponent, energy_exponent, charge_exponent, &
612  temperature_exponent, time_exponent, conversion_factor) &
613  bind(c, name="KIM_ModelCreate_ConvertUnit")
614  use, intrinsic :: iso_c_binding
615  use kim_unit_system_module, only: kim_length_unit_type
616  use kim_unit_system_module, only: kim_energy_unit_type
617  use kim_unit_system_module, only: kim_charge_unit_type
618  use kim_unit_system_module, only: kim_temperature_unit_type
619  use kim_unit_system_module, only: kim_time_unit_type
620  implicit none
621  type(kim_length_unit_type), intent(in), value :: from_length_unit
622  type(kim_energy_unit_type), intent(in), value :: from_energy_unit
623  type(kim_charge_unit_type), intent(in), value :: from_charge_unit
624  type(kim_temperature_unit_type), intent(in), value :: &
625  from_temperature_unit
626  type(kim_time_unit_type), intent(in), value :: from_time_unit
627  type(kim_length_unit_type), intent(in), value :: to_length_unit
628  type(kim_energy_unit_type), intent(in), value :: to_energy_unit
629  type(kim_charge_unit_type), intent(in), value :: to_charge_unit
630  type(kim_temperature_unit_type), intent(in), value :: &
631  to_temperature_unit
632  type(kim_time_unit_type), intent(in), value :: to_time_unit
633  real(c_double), intent(in), value :: length_exponent
634  real(c_double), intent(in), value :: energy_exponent
635  real(c_double), intent(in), value :: charge_exponent
636  real(c_double), intent(in), value :: temperature_exponent
637  real(c_double), intent(in), value :: time_exponent
638  real(c_double), intent(out) :: conversion_factor
639  end function convert_unit
640  end interface
641  type(kim_length_unit_type), intent(in) :: from_length_unit
642  type(kim_energy_unit_type), intent(in) :: from_energy_unit
643  type(kim_charge_unit_type), intent(in) :: from_charge_unit
644  type(kim_temperature_unit_type), intent(in) :: from_temperature_unit
645  type(kim_time_unit_type), intent(in) :: from_time_unit
646  type(kim_length_unit_type), intent(in) :: to_length_unit
647  type(kim_energy_unit_type), intent(in) :: to_energy_unit
648  type(kim_charge_unit_type), intent(in) :: to_charge_unit
649  type(kim_temperature_unit_type), intent(in) :: to_temperature_unit
650  type(kim_time_unit_type), intent(in) :: to_time_unit
651  real(c_double), intent(in) :: length_exponent
652  real(c_double), intent(in) :: energy_exponent
653  real(c_double), intent(in) :: charge_exponent
654  real(c_double), intent(in) :: temperature_exponent
655  real(c_double), intent(in) :: time_exponent
656  real(c_double), intent(out) :: conversion_factor
657  integer(c_int), intent(out) :: ierr
658 
659  ierr = convert_unit(from_length_unit, from_energy_unit, from_charge_unit, &
660  from_temperature_unit, from_time_unit, to_length_unit, &
661  to_energy_unit, to_charge_unit, to_temperature_unit, &
662  to_time_unit, length_exponent, energy_exponent, &
663  charge_exponent, temperature_exponent, time_exponent, &
664  conversion_factor)
665  end subroutine kim_model_create_convert_unit
666 
672  recursive subroutine kim_model_create_log_entry(model_create_handle, &
673  log_verbosity, message)
674  use kim_log_verbosity_module, only: kim_log_verbosity_type
675  use kim_interoperable_types_module, only: kim_model_create_type
676  implicit none
677  interface
678  recursive subroutine log_entry(model_create, log_verbosity, message, &
679  line_number, file_name) &
680  bind(c, name="KIM_ModelCreate_LogEntry")
681  use, intrinsic :: iso_c_binding
682  use kim_log_verbosity_module, only: kim_log_verbosity_type
683  use kim_interoperable_types_module, only: kim_model_create_type
684  implicit none
685  type(kim_model_create_type), intent(in) :: model_create
686  type(kim_log_verbosity_type), intent(in), value :: log_verbosity
687  character(c_char), intent(in) :: message(*)
688  integer(c_int), intent(in), value :: line_number
689  character(c_char), intent(in) :: file_name(*)
690  end subroutine log_entry
691  end interface
692  type(kim_model_create_handle_type), intent(in) :: model_create_handle
693  type(kim_log_verbosity_type), intent(in) :: log_verbosity
694  character(len=*, kind=c_char), intent(in) :: message
695  type(kim_model_create_type), pointer :: model_create
696 
697  call c_f_pointer(model_create_handle%p, model_create)
698  call log_entry(model_create, log_verbosity, trim(message)//c_null_char, &
699  0, ""//c_null_char)
700  end subroutine kim_model_create_log_entry
701 
707  recursive subroutine kim_model_create_to_string(model_create_handle, string)
708  use kim_convert_string_module, only: kim_convert_c_char_ptr_to_string
709  use kim_interoperable_types_module, only: kim_model_create_type
710  implicit none
711  interface
712  type(c_ptr) recursive function model_create_string(model_create) &
713  bind(c, name="KIM_ModelCreate_ToString")
714  use, intrinsic :: iso_c_binding
715  use kim_interoperable_types_module, only: kim_model_create_type
716  implicit none
717  type(kim_model_create_type), intent(in) :: model_create
718  end function model_create_string
719  end interface
720  type(kim_model_create_handle_type), intent(in) :: model_create_handle
721  character(len=*, kind=c_char), intent(out) :: string
722  type(kim_model_create_type), pointer :: model_create
723 
724  type(c_ptr) :: p
725 
726  call c_f_pointer(model_create_handle%p, model_create)
727  p = model_create_string(model_create)
728  call kim_convert_c_char_ptr_to_string(p, string)
729  end subroutine kim_model_create_to_string
730 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.