KIM API V2
kim_model_driver_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--2018, 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-v2.0.0-beta.1 package.
31 !
32 
33 
35  use, intrinsic :: iso_c_binding
36  implicit none
37  private
38 
39  public &
40  kim_model_driver_create_handle_type, &
42  operator (.eq.), &
43  operator (.ne.), &
44  kim_model_driver_create_get_number_of_parameter_files, &
45  kim_model_driver_create_get_parameter_file_name, &
46  kim_model_driver_create_set_model_numbering, &
48  kim_model_driver_create_set_neighbor_list_pointers, &
49  kim_model_driver_create_set_refresh_pointer, &
55  kim_model_driver_create_set_parameter_pointer, &
57  kim_model_driver_create_set_units, &
61 
62  type, bind(c) :: kim_model_driver_create_handle_type
63  type(c_ptr) :: p = c_null_ptr
64  end type kim_model_driver_create_handle_type
65 
66  type(kim_model_driver_create_handle_type), protected &
68 
69  interface operator (.eq.)
70  logical function kim_model_driver_create_handle_equal(left, right)
71  use, intrinsic :: iso_c_binding
72  import kim_model_driver_create_handle_type
73  implicit none
74  type(kim_model_driver_create_handle_type), intent(in) :: left
75  type(kim_model_driver_create_handle_type), intent(in) :: right
76  end function kim_model_driver_create_handle_equal
77  end interface operator (.eq.)
78 
79  interface operator (.ne.)
80  logical function kim_model_driver_createhandle_not_equal(left, right)
81  use, intrinsic :: iso_c_binding
82  import kim_model_driver_create_handle_type
83  implicit none
84  type(kim_model_driver_create_handle_type), intent(in) :: left
85  type(kim_model_driver_create_handle_type), intent(in) :: right
86  end function kim_model_driver_createhandle_not_equal
87  end interface operator (.ne.)
88 
89  interface kim_model_driver_create_set_parameter_pointer
90  subroutine kim_model_driver_create_set_parameter_pointer_integer( &
91  model_driver_create_handle, int1, description, ierr)
92  use, intrinsic :: iso_c_binding
93  import kim_model_driver_create_handle_type
94  implicit none
95  type(kim_model_driver_create_handle_type), intent(in) &
96  :: model_driver_create_handle
97  integer(c_int), intent(in), target :: int1(:)
98  character(len=*, kind=c_char), intent(in) :: description
99  integer(c_int), intent(out) :: ierr
100  end subroutine kim_model_driver_create_set_parameter_pointer_integer
101 
102  subroutine kim_model_driver_create_set_parameter_pointer_double( &
103  model_driver_create_handle, double1, description, ierr)
104  use, intrinsic :: iso_c_binding
105  import kim_model_driver_create_handle_type
106  implicit none
107  type(kim_model_driver_create_handle_type), intent(in) &
108  :: model_driver_create_handle
109  real(c_double), intent(in), target :: double1(:)
110  character(len=*, kind=c_char), intent(in) :: description
111  integer(c_int), intent(out) :: ierr
112  end subroutine kim_model_driver_create_set_parameter_pointer_double
113  end interface kim_model_driver_create_set_parameter_pointer
114 
115  interface
116  subroutine kim_model_driver_create_get_number_of_parameter_files( &
117  model_driver_create_handle, number_of_parameter_files)
118  use, intrinsic :: iso_c_binding
119  import kim_model_driver_create_handle_type
120  implicit none
121  type(kim_model_driver_create_handle_type), intent(in) &
122  :: model_driver_create_handle
123  integer(c_int), intent(out) :: number_of_parameter_files
124  end subroutine kim_model_driver_create_get_number_of_parameter_files
125 
126  subroutine kim_model_driver_create_get_parameter_file_name( &
127  model_driver_create_handle, index, parameter_file_name, ierr)
128  use, intrinsic :: iso_c_binding
129  import kim_model_driver_create_handle_type
130  implicit none
131  type(kim_model_driver_create_handle_type), intent(in) &
132  :: model_driver_create_handle
133  integer(c_int), intent(in), value :: index
134  character(len=*, kind=c_char), intent(out) :: parameter_file_name
135  integer(c_int), intent(out) :: ierr
136  end subroutine kim_model_driver_create_get_parameter_file_name
137 
138  subroutine kim_model_driver_create_set_model_numbering( &
139  model_driver_create_handle, numbering, ierr)
140  use, intrinsic :: iso_c_binding
141  use kim_numbering_module, only : kim_numbering_type
142  import kim_model_driver_create_handle_type
143  implicit none
144  type(kim_model_driver_create_handle_type), intent(in) &
145  :: model_driver_create_handle
146  type(kim_numbering_type), intent(in), value :: numbering
147  integer(c_int), intent(out) :: ierr
148  end subroutine kim_model_driver_create_set_model_numbering
149 
151  model_driver_create_handle, influence_distance)
152  use, intrinsic :: iso_c_binding
153  import kim_model_driver_create_handle_type
154  implicit none
155  type(kim_model_driver_create_handle_type), intent(in) &
156  :: model_driver_create_handle
157  real(c_double), intent(in), target :: influence_distance
159 
160  subroutine kim_model_driver_create_set_neighbor_list_pointers( &
161  model_driver_create_handle, number_of_neighbor_lists, cutoffs, &
162  padding_neighbor_hints, half_list_hints)
163  use, intrinsic :: iso_c_binding
164  import kim_model_driver_create_handle_type
165  implicit none
166  type(kim_model_driver_create_handle_type), intent(inout) &
167  :: model_driver_create_handle
168  integer(c_int), intent(in), value :: number_of_neighbor_lists
169  real(c_double), intent(in), target :: cutoffs(number_of_neighbor_lists)
170  integer(c_int), intent(in), target :: &
171  padding_neighbor_hints(number_of_neighbor_lists)
172  integer(c_int), intent(in), target :: &
173  half_list_hints(number_of_neighbor_lists)
174  end subroutine kim_model_driver_create_set_neighbor_list_pointers
175 
176  subroutine kim_model_driver_create_set_refresh_pointer( &
177  model_driver_create_handle, language_name, fptr, ierr)
178  use, intrinsic :: iso_c_binding
179  use kim_language_name_module, only : kim_language_name_type
180  import kim_model_driver_create_handle_type
181  implicit none
182  type(kim_model_driver_create_handle_type), intent(in) &
183  :: model_driver_create_handle
184  type(kim_language_name_type), intent(in), value :: language_name
185  type(c_funptr), intent(in), value :: fptr
186  integer(c_int), intent(out) :: ierr
187  end subroutine kim_model_driver_create_set_refresh_pointer
188 
190  model_driver_create_handle, language_name, fptr, ierr)
191  use, intrinsic :: iso_c_binding
192  use kim_language_name_module, only : kim_language_name_type
193  import kim_model_driver_create_handle_type
194  implicit none
195  type(kim_model_driver_create_handle_type), intent(in) &
196  :: model_driver_create_handle
197  type(kim_language_name_type), intent(in), value :: language_name
198  type(c_funptr), intent(in), value :: fptr
199  integer(c_int), intent(out) :: ierr
201 
203  model_driver_create_handle, language_name, fptr, ierr)
204  use, intrinsic :: iso_c_binding
205  use kim_language_name_module, only : kim_language_name_type
206  import kim_model_driver_create_handle_type
207  implicit none
208  type(kim_model_driver_create_handle_type), intent(in) &
209  :: model_driver_create_handle
210  type(kim_language_name_type), intent(in), value :: language_name
211  type(c_funptr), intent(in), value :: fptr
212  integer(c_int), intent(out) :: ierr
214 
216  model_driver_create_handle, language_name, fptr, ierr)
217  use, intrinsic :: iso_c_binding
218  use kim_language_name_module, only : kim_language_name_type
219  import kim_model_driver_create_handle_type
220  implicit none
221  type(kim_model_driver_create_handle_type), intent(in) &
222  :: model_driver_create_handle
223  type(kim_language_name_type), intent(in), value :: language_name
224  type(c_funptr), intent(in), value :: fptr
225  integer(c_int), intent(out) :: ierr
227 
229  model_driver_create_handle, language_name, fptr, ierr)
230  use, intrinsic :: iso_c_binding
231  use kim_language_name_module, only : kim_language_name_type
232  import kim_model_driver_create_handle_type
233  implicit none
234  type(kim_model_driver_create_handle_type), intent(in) &
235  :: model_driver_create_handle
236  type(kim_language_name_type), intent(in), value :: language_name
237  type(c_funptr), intent(in), value :: fptr
238  integer(c_int), intent(out) :: ierr
240 
242  model_driver_create_handle, species_name, code, ierr)
243  use, intrinsic :: iso_c_binding
244  use kim_species_name_module, only : kim_species_name_type
245  import kim_model_driver_create_handle_type
246  implicit none
247  type(kim_model_driver_create_handle_type), intent(in) &
248  :: model_driver_create_handle
249  type(kim_species_name_type), intent(in), value :: species_name
250  integer(c_int), intent(in), value :: code
251  integer(c_int), intent(out) :: ierr
253 
255  model_driver_create_handle, ptr)
256  use, intrinsic :: iso_c_binding
257  import kim_model_driver_create_handle_type
258  implicit none
259  type(kim_model_driver_create_handle_type), intent(in) &
260  :: model_driver_create_handle
261  type(c_ptr), intent(in), value :: ptr
263 
264  subroutine kim_model_driver_create_set_units( &
265  model_driver_create_handle, length_unit, energy_unit, charge_unit, &
266  temperature_unit, time_unit, ierr)
267  use, intrinsic :: iso_c_binding
268  use kim_unit_system_module, only : &
269  kim_length_unit_type, &
270  kim_energy_unit_type, &
271  kim_charge_unit_type, &
272  kim_temperature_unit_type, &
273  kim_time_unit_type
274  import kim_model_driver_create_handle_type
275  implicit none
276  type(kim_model_driver_create_handle_type), intent(in) &
277  :: model_driver_create_handle
278  type(kim_length_unit_type), intent(in), value :: length_unit
279  type(kim_energy_unit_type), intent(in), value :: energy_unit
280  type(kim_charge_unit_type), intent(in), value :: charge_unit
281  type(kim_temperature_unit_type), intent(in), value :: temperature_unit
282  type(kim_time_unit_type), intent(in), value :: time_unit
283  integer(c_int), intent(out) :: ierr
284  end subroutine kim_model_driver_create_set_units
285 
287  model_driver_create_handle, from_length_unit, from_energy_unit, &
288  from_charge_unit, from_temperature_unit, from_time_unit, &
289  to_length_unit, to_energy_unit, to_charge_unit, to_temperature_unit, &
290  to_time_unit, length_exponent, energy_exponent, charge_exponent, &
291  temperature_exponent, time_exponent, conversion_factor, ierr)
292  use, intrinsic :: iso_c_binding
293  use kim_unit_system_module, only : kim_length_unit_type
294  use kim_unit_system_module, only : kim_energy_unit_type
295  use kim_unit_system_module, only : kim_charge_unit_type
296  use kim_unit_system_module, only : kim_temperature_unit_type
297  use kim_unit_system_module, only : kim_time_unit_type
298  import kim_model_driver_create_handle_type
299  implicit none
300  type(kim_model_driver_create_handle_type), intent(in) &
301  :: model_driver_create_handle
302  type(kim_length_unit_type), intent(in), value :: from_length_unit
303  type(kim_energy_unit_type), intent(in), value :: from_energy_unit
304  type(kim_charge_unit_type), intent(in), value :: from_charge_unit
305  type(kim_temperature_unit_type), intent(in), value :: &
306  from_temperature_unit
307  type(kim_time_unit_type), intent(in), value :: from_time_unit
308  type(kim_length_unit_type), intent(in), value :: to_length_unit
309  type(kim_energy_unit_type), intent(in), value :: to_energy_unit
310  type(kim_charge_unit_type), intent(in), value :: to_charge_unit
311  type(kim_temperature_unit_type), intent(in), value :: &
312  to_temperature_unit
313  type(kim_time_unit_type), intent(in), value :: to_time_unit
314  real(c_double), intent(in), value :: length_exponent
315  real(c_double), intent(in), value :: energy_exponent
316  real(c_double), intent(in), value :: charge_exponent
317  real(c_double), intent(in), value :: temperature_exponent
318  real(c_double), intent(in), value :: time_exponent
319  real(c_double), intent(out) :: conversion_factor
320  integer(c_int), intent(out) :: ierr
322 
324  model_driver_create_handle, log_verbosity, message, line_number, &
325  file_name)
326  use, intrinsic :: iso_c_binding
327  use kim_log_verbosity_module, only : kim_log_verbosity_type
328  import kim_model_driver_create_handle_type
329  implicit none
330  type(kim_model_driver_create_handle_type), intent(in) &
331  :: model_driver_create_handle
332  type(kim_log_verbosity_type), intent(in), value :: log_verbosity
333  character(len=*, kind=c_char), intent(in) :: message
334  integer(c_int), intent(in), value :: line_number
335  character(len=*, kind=c_char), intent(in) :: file_name
336  end subroutine kim_model_driver_create_log_entry
337 
339  model_driver_create_handle, string)
340  use, intrinsic :: iso_c_binding
341  import kim_model_driver_create_handle_type
342  implicit none
343  type(kim_model_driver_create_handle_type), intent(in) &
344  :: model_driver_create_handle
345  character(len=*, kind=c_char), intent(out) :: string
346  end subroutine kim_model_driver_create_string
347  end interface
type(kim_model_driver_create_handle_type), public, protected kim_model_driver_create_null_handle