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-alpha.0 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_cutoffs_pointer, &
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, &
67  bind(c,name="KIM_MODEL_DRIVER_CREATE_null_handle") &
69 
70  interface operator (.eq.)
71  logical function kim_model_driver_create_handle_equal(left, right)
72  use, intrinsic :: iso_c_binding
73  import kim_model_driver_create_handle_type
74  implicit none
75  type(kim_model_driver_create_handle_type), intent(in) :: left
76  type(kim_model_driver_create_handle_type), intent(in) :: right
77  end function kim_model_driver_create_handle_equal
78  end interface operator (.eq.)
79 
80  interface operator (.ne.)
81  logical function kim_model_driver_createhandle_not_equal(left, right)
82  use, intrinsic :: iso_c_binding
83  import kim_model_driver_create_handle_type
84  implicit none
85  type(kim_model_driver_create_handle_type), intent(in) :: left
86  type(kim_model_driver_create_handle_type), intent(in) :: right
87  end function kim_model_driver_createhandle_not_equal
88  end interface operator (.ne.)
89 
90  interface kim_model_driver_create_set_parameter_pointer
91  subroutine kim_model_driver_create_set_parameter_pointer_integer( &
92  model_driver_create_handle, int1, description, ierr)
93  use, intrinsic :: iso_c_binding
94  import kim_model_driver_create_handle_type
95  implicit none
96  type(kim_model_driver_create_handle_type), intent(in) &
97  :: model_driver_create_handle
98  integer(c_int), intent(in), target :: int1(:)
99  character(len=*), intent(in) :: description
100  integer(c_int), intent(out) :: ierr
101  end subroutine kim_model_driver_create_set_parameter_pointer_integer
102 
103  subroutine kim_model_driver_create_set_parameter_pointer_double( &
104  model_driver_create_handle, double1, description, ierr)
105  use, intrinsic :: iso_c_binding
106  import kim_model_driver_create_handle_type
107  implicit none
108  type(kim_model_driver_create_handle_type), intent(in) &
109  :: model_driver_create_handle
110  real(c_double), intent(in), target :: double1(:)
111  character(len=*), intent(in) :: description
112  integer(c_int), intent(out) :: ierr
113  end subroutine kim_model_driver_create_set_parameter_pointer_double
114  end interface kim_model_driver_create_set_parameter_pointer
115 
116  interface
117  subroutine kim_model_driver_create_get_number_of_parameter_files( &
118  model_driver_create_handle, number_of_parameter_files)
119  use, intrinsic :: iso_c_binding
120  import kim_model_driver_create_handle_type
121  implicit none
122  type(kim_model_driver_create_handle_type), intent(in) &
123  :: model_driver_create_handle
124  integer(c_int), intent(out) :: number_of_parameter_files
125  end subroutine kim_model_driver_create_get_number_of_parameter_files
126 
127  subroutine kim_model_driver_create_get_parameter_file_name( &
128  model_driver_create_handle, index, parameter_file_name, ierr)
129  use, intrinsic :: iso_c_binding
130  import kim_model_driver_create_handle_type
131  implicit none
132  type(kim_model_driver_create_handle_type), intent(in) &
133  :: model_driver_create_handle
134  integer(c_int), intent(in), value :: index
135  character(len=*), intent(out) :: parameter_file_name
136  integer(c_int), intent(out) :: ierr
137  end subroutine kim_model_driver_create_get_parameter_file_name
138 
139  subroutine kim_model_driver_create_set_model_numbering( &
140  model_driver_create_handle, numbering, ierr)
141  use, intrinsic :: iso_c_binding
142  use kim_numbering_module, only : kim_numbering_type
143  import kim_model_driver_create_handle_type
144  implicit none
145  type(kim_model_driver_create_handle_type), intent(in) &
146  :: model_driver_create_handle
147  type(kim_numbering_type), intent(in), value :: numbering
148  integer(c_int), intent(out) :: ierr
149  end subroutine kim_model_driver_create_set_model_numbering
150 
152  model_driver_create_handle, influence_distance)
153  use, intrinsic :: iso_c_binding
154  import kim_model_driver_create_handle_type
155  implicit none
156  type(kim_model_driver_create_handle_type), intent(in) &
157  :: model_driver_create_handle
158  real(c_double), intent(in), target :: influence_distance
160 
161  subroutine kim_model_driver_create_set_neighbor_list_cutoffs_pointer( &
162  model_driver_create_handle, number_of_cutoffs, cutoffs)
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_cutoffs
169  real(c_double), intent(in), target :: cutoffs(number_of_cutoffs)
170  end subroutine kim_model_driver_create_set_neighbor_list_cutoffs_pointer
171 
172  subroutine kim_model_driver_create_set_refresh_pointer( &
173  model_driver_create_handle, language_name, fptr, ierr)
174  use, intrinsic :: iso_c_binding
175  use kim_language_name_module, only : kim_language_name_type
176  import kim_model_driver_create_handle_type
177  implicit none
178  type(kim_model_driver_create_handle_type), intent(in) &
179  :: model_driver_create_handle
180  type(kim_language_name_type), intent(in), value :: language_name
181  type(c_funptr), intent(in), value :: fptr
182  integer(c_int), intent(out) :: ierr
183  end subroutine kim_model_driver_create_set_refresh_pointer
184 
186  model_driver_create_handle, language_name, fptr, ierr)
187  use, intrinsic :: iso_c_binding
188  use kim_language_name_module, only : kim_language_name_type
189  import kim_model_driver_create_handle_type
190  implicit none
191  type(kim_model_driver_create_handle_type), intent(in) &
192  :: model_driver_create_handle
193  type(kim_language_name_type), intent(in), value :: language_name
194  type(c_funptr), intent(in), value :: fptr
195  integer(c_int), intent(out) :: ierr
197 
199  model_driver_create_handle, language_name, fptr, ierr)
200  use, intrinsic :: iso_c_binding
201  use kim_language_name_module, only : kim_language_name_type
202  import kim_model_driver_create_handle_type
203  implicit none
204  type(kim_model_driver_create_handle_type), intent(in) &
205  :: model_driver_create_handle
206  type(kim_language_name_type), intent(in), value :: language_name
207  type(c_funptr), intent(in), value :: fptr
208  integer(c_int), intent(out) :: ierr
210 
212  model_driver_create_handle, species_name, code, ierr)
213  use, intrinsic :: iso_c_binding
214  use kim_species_name_module, only : kim_species_name_type
215  import kim_model_driver_create_handle_type
216  implicit none
217  type(kim_model_driver_create_handle_type), intent(in) &
218  :: model_driver_create_handle
219  type(kim_species_name_type), intent(in), value :: species_name
220  integer(c_int), intent(in), value :: code
221  integer(c_int), intent(out) :: ierr
223 
225  model_driver_create_handle, argument_name, support_status, ierr)
226  use, intrinsic :: iso_c_binding
227  use kim_argument_name_module, only : kim_argument_name_type
228  use kim_support_status_module, only : kim_support_status_type
229  import kim_model_driver_create_handle_type
230  implicit none
231  type(kim_model_driver_create_handle_type), intent(in) &
232  :: model_driver_create_handle
233  type(kim_argument_name_type), intent(in), value :: argument_name
234  type(kim_support_status_type), intent(in), value :: support_status
235  integer(c_int), intent(out) :: ierr
237 
239  model_driver_create_handle, callback_name, support_status, ierr)
240  use, intrinsic :: iso_c_binding
241  use kim_callback_name_module, only : kim_callback_name_type
242  use kim_support_status_module, only : kim_support_status_type
243  import kim_model_driver_create_handle_type
244  implicit none
245  type(kim_model_driver_create_handle_type), intent(in) &
246  :: model_driver_create_handle
247  type(kim_callback_name_type), intent(in), value :: callback_name
248  type(kim_support_status_type), intent(in), value :: support_status
249  integer(c_int), intent(out) :: ierr
251 
253  model_driver_create_handle, ptr)
254  use, intrinsic :: iso_c_binding
255  import kim_model_driver_create_handle_type
256  implicit none
257  type(kim_model_driver_create_handle_type), intent(in) &
258  :: model_driver_create_handle
259  type(c_ptr), intent(in), value :: ptr
261 
262  subroutine kim_model_driver_create_set_units( &
263  model_driver_create_handle, length_unit, energy_unit, charge_unit, &
264  temperature_unit, time_unit, ierr)
265  use, intrinsic :: iso_c_binding
266  use kim_unit_system_module, only : &
267  kim_length_unit_type, &
268  kim_energy_unit_type, &
269  kim_charge_unit_type, &
270  kim_temperature_unit_type, &
271  kim_time_unit_type
272  import kim_model_driver_create_handle_type
273  implicit none
274  type(kim_model_driver_create_handle_type), intent(in) &
275  :: model_driver_create_handle
276  type(kim_length_unit_type), intent(in), value :: length_unit
277  type(kim_energy_unit_type), intent(in), value :: energy_unit
278  type(kim_charge_unit_type), intent(in), value :: charge_unit
279  type(kim_temperature_unit_type), intent(in), value :: temperature_unit
280  type(kim_time_unit_type), intent(in), value :: time_unit
281  integer(c_int), intent(out) :: ierr
282  end subroutine kim_model_driver_create_set_units
283 
285  model_driver_create_handle, from_length_unit, from_energy_unit, &
286  from_charge_unit, from_temperature_unit, from_time_unit, &
287  to_length_unit, to_energy_unit, to_charge_unit, to_temperature_unit, &
288  to_time_unit, length_exponent, energy_exponent, charge_exponent, &
289  temperature_exponent, time_exponent, conversion_factor, ierr)
290  use, intrinsic :: iso_c_binding
291  use kim_unit_system_module, only : kim_length_unit_type
292  use kim_unit_system_module, only : kim_energy_unit_type
293  use kim_unit_system_module, only : kim_charge_unit_type
294  use kim_unit_system_module, only : kim_temperature_unit_type
295  use kim_unit_system_module, only : kim_time_unit_type
296  import kim_model_driver_create_handle_type
297  implicit none
298  type(kim_model_driver_create_handle_type), intent(in) &
299  :: model_driver_create_handle
300  type(kim_length_unit_type), intent(in), value :: from_length_unit
301  type(kim_energy_unit_type), intent(in), value :: from_energy_unit
302  type(kim_charge_unit_type), intent(in), value :: from_charge_unit
303  type(kim_temperature_unit_type), intent(in), value :: &
304  from_temperature_unit
305  type(kim_time_unit_type), intent(in), value :: from_time_unit
306  type(kim_length_unit_type), intent(in), value :: to_length_unit
307  type(kim_energy_unit_type), intent(in), value :: to_energy_unit
308  type(kim_charge_unit_type), intent(in), value :: to_charge_unit
309  type(kim_temperature_unit_type), intent(in), value :: &
310  to_temperature_unit
311  type(kim_time_unit_type), intent(in), value :: to_time_unit
312  real(c_double), intent(in), value :: length_exponent
313  real(c_double), intent(in), value :: energy_exponent
314  real(c_double), intent(in), value :: charge_exponent
315  real(c_double), intent(in), value :: temperature_exponent
316  real(c_double), intent(in), value :: time_exponent
317  real(c_double), intent(out) :: conversion_factor
318  integer(c_int), intent(out) :: ierr
320 
322  model_driver_create_handle, log_verbosity, message, line_number, &
323  file_name)
324  use, intrinsic :: iso_c_binding
325  use kim_log_verbosity_module, only : kim_log_verbosity_type
326  import kim_model_driver_create_handle_type
327  implicit none
328  type(kim_model_driver_create_handle_type), intent(in) &
329  :: model_driver_create_handle
330  type(kim_log_verbosity_type), intent(in), value :: log_verbosity
331  character(len=*), intent(in) :: message
332  integer(c_int), intent(in), value :: line_number
333  character(len=*), intent(in) :: file_name
334  end subroutine kim_model_driver_create_log_entry
335 
337  model_driver_create_handle, string)
338  use, intrinsic :: iso_c_binding
339  import kim_model_driver_create_handle_type
340  implicit none
341  type(kim_model_driver_create_handle_type), intent(in) &
342  :: model_driver_create_handle
343  character(len=*), intent(out) :: string
344  end subroutine kim_model_driver_create_string
345  end interface
type(kim_model_driver_create_handle_type), public, protected kim_model_driver_create_null_handle