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.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 &
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_cutoffs_pointer( &
161  model_driver_create_handle, number_of_cutoffs, cutoffs)
162  use, intrinsic :: iso_c_binding
163  import kim_model_driver_create_handle_type
164  implicit none
165  type(kim_model_driver_create_handle_type), intent(inout) &
166  :: model_driver_create_handle
167  integer(c_int), intent(in), value :: number_of_cutoffs
168  real(c_double), intent(in), target :: cutoffs(number_of_cutoffs)
169  end subroutine kim_model_driver_create_set_neighbor_list_cutoffs_pointer
170 
171  subroutine kim_model_driver_create_set_refresh_pointer( &
172  model_driver_create_handle, language_name, fptr, ierr)
173  use, intrinsic :: iso_c_binding
174  use kim_language_name_module, only : kim_language_name_type
175  import kim_model_driver_create_handle_type
176  implicit none
177  type(kim_model_driver_create_handle_type), intent(in) &
178  :: model_driver_create_handle
179  type(kim_language_name_type), intent(in), value :: language_name
180  type(c_funptr), intent(in), value :: fptr
181  integer(c_int), intent(out) :: ierr
182  end subroutine kim_model_driver_create_set_refresh_pointer
183 
185  model_driver_create_handle, language_name, fptr, ierr)
186  use, intrinsic :: iso_c_binding
187  use kim_language_name_module, only : kim_language_name_type
188  import kim_model_driver_create_handle_type
189  implicit none
190  type(kim_model_driver_create_handle_type), intent(in) &
191  :: model_driver_create_handle
192  type(kim_language_name_type), intent(in), value :: language_name
193  type(c_funptr), intent(in), value :: fptr
194  integer(c_int), intent(out) :: ierr
196 
198  model_driver_create_handle, language_name, fptr, ierr)
199  use, intrinsic :: iso_c_binding
200  use kim_language_name_module, only : kim_language_name_type
201  import kim_model_driver_create_handle_type
202  implicit none
203  type(kim_model_driver_create_handle_type), intent(in) &
204  :: model_driver_create_handle
205  type(kim_language_name_type), intent(in), value :: language_name
206  type(c_funptr), intent(in), value :: fptr
207  integer(c_int), intent(out) :: ierr
209 
211  model_driver_create_handle, language_name, fptr, ierr)
212  use, intrinsic :: iso_c_binding
213  use kim_language_name_module, only : kim_language_name_type
214  import kim_model_driver_create_handle_type
215  implicit none
216  type(kim_model_driver_create_handle_type), intent(in) &
217  :: model_driver_create_handle
218  type(kim_language_name_type), intent(in), value :: language_name
219  type(c_funptr), intent(in), value :: fptr
220  integer(c_int), intent(out) :: ierr
222 
224  model_driver_create_handle, language_name, fptr, ierr)
225  use, intrinsic :: iso_c_binding
226  use kim_language_name_module, only : kim_language_name_type
227  import kim_model_driver_create_handle_type
228  implicit none
229  type(kim_model_driver_create_handle_type), intent(in) &
230  :: model_driver_create_handle
231  type(kim_language_name_type), intent(in), value :: language_name
232  type(c_funptr), intent(in), value :: fptr
233  integer(c_int), intent(out) :: ierr
235 
237  model_driver_create_handle, species_name, code, ierr)
238  use, intrinsic :: iso_c_binding
239  use kim_species_name_module, only : kim_species_name_type
240  import kim_model_driver_create_handle_type
241  implicit none
242  type(kim_model_driver_create_handle_type), intent(in) &
243  :: model_driver_create_handle
244  type(kim_species_name_type), intent(in), value :: species_name
245  integer(c_int), intent(in), value :: code
246  integer(c_int), intent(out) :: ierr
248 
250  model_driver_create_handle, ptr)
251  use, intrinsic :: iso_c_binding
252  import kim_model_driver_create_handle_type
253  implicit none
254  type(kim_model_driver_create_handle_type), intent(in) &
255  :: model_driver_create_handle
256  type(c_ptr), intent(in), value :: ptr
258 
259  subroutine kim_model_driver_create_set_units( &
260  model_driver_create_handle, length_unit, energy_unit, charge_unit, &
261  temperature_unit, time_unit, ierr)
262  use, intrinsic :: iso_c_binding
263  use kim_unit_system_module, only : &
264  kim_length_unit_type, &
265  kim_energy_unit_type, &
266  kim_charge_unit_type, &
267  kim_temperature_unit_type, &
268  kim_time_unit_type
269  import kim_model_driver_create_handle_type
270  implicit none
271  type(kim_model_driver_create_handle_type), intent(in) &
272  :: model_driver_create_handle
273  type(kim_length_unit_type), intent(in), value :: length_unit
274  type(kim_energy_unit_type), intent(in), value :: energy_unit
275  type(kim_charge_unit_type), intent(in), value :: charge_unit
276  type(kim_temperature_unit_type), intent(in), value :: temperature_unit
277  type(kim_time_unit_type), intent(in), value :: time_unit
278  integer(c_int), intent(out) :: ierr
279  end subroutine kim_model_driver_create_set_units
280 
282  model_driver_create_handle, from_length_unit, from_energy_unit, &
283  from_charge_unit, from_temperature_unit, from_time_unit, &
284  to_length_unit, to_energy_unit, to_charge_unit, to_temperature_unit, &
285  to_time_unit, length_exponent, energy_exponent, charge_exponent, &
286  temperature_exponent, time_exponent, conversion_factor, ierr)
287  use, intrinsic :: iso_c_binding
288  use kim_unit_system_module, only : kim_length_unit_type
289  use kim_unit_system_module, only : kim_energy_unit_type
290  use kim_unit_system_module, only : kim_charge_unit_type
291  use kim_unit_system_module, only : kim_temperature_unit_type
292  use kim_unit_system_module, only : kim_time_unit_type
293  import kim_model_driver_create_handle_type
294  implicit none
295  type(kim_model_driver_create_handle_type), intent(in) &
296  :: model_driver_create_handle
297  type(kim_length_unit_type), intent(in), value :: from_length_unit
298  type(kim_energy_unit_type), intent(in), value :: from_energy_unit
299  type(kim_charge_unit_type), intent(in), value :: from_charge_unit
300  type(kim_temperature_unit_type), intent(in), value :: &
301  from_temperature_unit
302  type(kim_time_unit_type), intent(in), value :: from_time_unit
303  type(kim_length_unit_type), intent(in), value :: to_length_unit
304  type(kim_energy_unit_type), intent(in), value :: to_energy_unit
305  type(kim_charge_unit_type), intent(in), value :: to_charge_unit
306  type(kim_temperature_unit_type), intent(in), value :: &
307  to_temperature_unit
308  type(kim_time_unit_type), intent(in), value :: to_time_unit
309  real(c_double), intent(in), value :: length_exponent
310  real(c_double), intent(in), value :: energy_exponent
311  real(c_double), intent(in), value :: charge_exponent
312  real(c_double), intent(in), value :: temperature_exponent
313  real(c_double), intent(in), value :: time_exponent
314  real(c_double), intent(out) :: conversion_factor
315  integer(c_int), intent(out) :: ierr
317 
319  model_driver_create_handle, log_verbosity, message, line_number, &
320  file_name)
321  use, intrinsic :: iso_c_binding
322  use kim_log_verbosity_module, only : kim_log_verbosity_type
323  import kim_model_driver_create_handle_type
324  implicit none
325  type(kim_model_driver_create_handle_type), intent(in) &
326  :: model_driver_create_handle
327  type(kim_log_verbosity_type), intent(in), value :: log_verbosity
328  character(len=*, kind=c_char), intent(in) :: message
329  integer(c_int), intent(in), value :: line_number
330  character(len=*, kind=c_char), intent(in) :: file_name
331  end subroutine kim_model_driver_create_log_entry
332 
334  model_driver_create_handle, string)
335  use, intrinsic :: iso_c_binding
336  import kim_model_driver_create_handle_type
337  implicit none
338  type(kim_model_driver_create_handle_type), intent(in) &
339  :: model_driver_create_handle
340  character(len=*, kind=c_char), intent(out) :: string
341  end subroutine kim_model_driver_create_string
342  end interface
type(kim_model_driver_create_handle_type), public, protected kim_model_driver_create_null_handle