KIM API V2
kim_model_compute_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_compute_handle_type, &
42  operator (.eq.), &
43  operator (.ne.), &
45  kim_model_compute_process_dedr_term, &
46  kim_model_compute_process_d2edr2_term, &
47  kim_model_compute_get_argument_pointer, &
48  kim_model_compute_is_callback_present, &
50  kim_model_compute_log_entry, &
52 
53  type, bind(c) :: kim_model_compute_handle_type
54  type(c_ptr) :: p = c_null_ptr
55  end type kim_model_compute_handle_type
56 
57  type(kim_model_compute_handle_type), protected, &
58  bind(c,name="KIM_MODEL_COMPUTE_null_handle") &
60 
61  interface operator (.eq.)
62  logical function kim_model_compute_handle_equal(left, right)
63  use, intrinsic :: iso_c_binding
64  import kim_model_compute_handle_type
65  implicit none
66  type(kim_model_compute_handle_type), intent(in) :: left
67  type(kim_model_compute_handle_type), intent(in) :: right
68  end function kim_model_compute_handle_equal
69  end interface operator (.eq.)
70 
71  interface operator (.ne.)
72  logical function kim_model_compute_handle_not_equal(left, right)
73  use, intrinsic :: iso_c_binding
74  import kim_model_compute_handle_type
75  implicit none
76  type(kim_model_compute_handle_type), intent(in) :: left
77  type(kim_model_compute_handle_type), intent(in) :: right
78  end function kim_model_compute_handle_not_equal
79  end interface operator (.ne.)
80 
81  interface kim_model_compute_get_argument_pointer
82  subroutine kim_model_compute_get_argument_pointer_int0( &
83  model_compute_handle, argument_name, int0, ierr)
84  use, intrinsic :: iso_c_binding
85  use kim_argument_name_module, only : kim_argument_name_type
86  import kim_model_compute_handle_type
87  implicit none
88  type(kim_model_compute_handle_type), intent(in) :: model_compute_handle
89  type(kim_argument_name_type), intent(in), value :: argument_name
90  integer(c_int), intent(out), pointer :: int0
91  integer(c_int), intent(out) :: ierr
92  end subroutine kim_model_compute_get_argument_pointer_int0
93 
94  subroutine kim_model_compute_get_argument_pointer_int1( &
95  model_compute_handle, argument_name, extent1, int1, ierr)
96  use, intrinsic :: iso_c_binding
97  use kim_argument_name_module, only : kim_argument_name_type
98  import kim_model_compute_handle_type
99  implicit none
100  type(kim_model_compute_handle_type), intent(in) :: model_compute_handle
101  type(kim_argument_name_type), intent(in), value :: argument_name
102  integer(c_int), intent(in), value :: extent1
103  integer(c_int), intent(out), pointer :: int1(:)
104  integer(c_int), intent(out) :: ierr
105  end subroutine kim_model_compute_get_argument_pointer_int1
106 
107  subroutine kim_model_compute_get_argument_pointer_int2( &
108  model_compute_handle, argument_name, extent1, extent2, int2, ierr)
109  use, intrinsic :: iso_c_binding
110  use kim_argument_name_module, only : kim_argument_name_type
111  import kim_model_compute_handle_type
112  implicit none
113  type(kim_model_compute_handle_type), intent(in) :: model_compute_handle
114  type(kim_argument_name_type), intent(in), value :: argument_name
115  integer(c_int), intent(in), value :: extent1
116  integer(c_int), intent(in), value :: extent2
117  integer(c_int), intent(out), pointer :: int2(:,:)
118  integer(c_int), intent(out) :: ierr
119  end subroutine kim_model_compute_get_argument_pointer_int2
120 
121  subroutine kim_model_compute_get_argument_pointer_double0( &
122  model_compute_handle, argument_name, double0, ierr)
123  use, intrinsic :: iso_c_binding
124  use kim_argument_name_module, only : kim_argument_name_type
125  import kim_model_compute_handle_type
126  implicit none
127  type(kim_model_compute_handle_type), intent(in) :: model_compute_handle
128  type(kim_argument_name_type), intent(in), value :: argument_name
129  real(c_double), intent(out), pointer :: double0
130  integer(c_int), intent(out) :: ierr
131  end subroutine kim_model_compute_get_argument_pointer_double0
132 
133  subroutine kim_model_compute_get_argument_pointer_double1( &
134  model_compute_handle, argument_name, extent1, double1, ierr)
135  use, intrinsic :: iso_c_binding
136  use kim_argument_name_module, only : kim_argument_name_type
137  import kim_model_compute_handle_type
138  implicit none
139  type(kim_model_compute_handle_type), intent(in) :: model_compute_handle
140  type(kim_argument_name_type), intent(in), value :: argument_name
141  integer(c_int), intent(in), value :: extent1
142  real(c_double), intent(out), pointer :: double1(:)
143  integer(c_int), intent(out) :: ierr
144  end subroutine kim_model_compute_get_argument_pointer_double1
145 
146  subroutine kim_model_compute_get_argument_pointer_double2( &
147  model_compute_handle, argument_name, extent1, extent2, double2, ierr)
148  use, intrinsic :: iso_c_binding
149  use kim_argument_name_module, only : kim_argument_name_type
150  import kim_model_compute_handle_type
151  implicit none
152  type(kim_model_compute_handle_type), intent(in) :: model_compute_handle
153  type(kim_argument_name_type), intent(in), value :: argument_name
154  integer(c_int), intent(in), value :: extent1
155  integer(c_int), intent(in), value :: extent2
156  real(c_double), intent(out), pointer :: double2(:,:)
157  integer(c_int), intent(out) :: ierr
158  end subroutine kim_model_compute_get_argument_pointer_double2
159  end interface kim_model_compute_get_argument_pointer
160 
161  interface
162  subroutine kim_model_compute_get_neighbor_list(model_compute_handle, &
163  neighbor_list_index, particle_number, number_of_neighbors, &
164  neighbors_of_particle, ierr)
165  use, intrinsic :: iso_c_binding
166  import kim_model_compute_handle_type
167  implicit none
168  type(kim_model_compute_handle_type), intent(in) :: model_compute_handle
169  integer(c_int), intent(in), value :: neighbor_list_index
170  integer(c_int), intent(in), value :: particle_number
171  integer(c_int), intent(out) :: number_of_neighbors
172  integer(c_int), intent(out), pointer :: neighbors_of_particle(:)
173  integer(c_int), intent(out) :: ierr
175 
176  subroutine kim_model_compute_process_dedr_term(model_compute_handle, &
177  de, r, dx, i, j, ierr)
178  use, intrinsic :: iso_c_binding
179  import kim_model_compute_handle_type
180  implicit none
181  type(kim_model_compute_handle_type), intent(in) :: model_compute_handle
182  real(c_double), intent(in), value :: de
183  real(c_double), intent(in), value :: r
184  type(c_ptr), intent(in) :: dx
185  integer(c_int), intent(in), value :: i
186  integer(c_int), intent(in), value :: j
187  integer(c_int), intent(out) :: ierr
188  end subroutine kim_model_compute_process_dedr_term
189 
190  subroutine kim_model_compute_process_d2edr2_term(model_compute_handle, &
191  de, r, dx, i, j, ierr)
192  use, intrinsic :: iso_c_binding
193  import kim_model_compute_handle_type
194  implicit none
195  type(kim_model_compute_handle_type), intent(in) :: model_compute_handle
196  real(c_double), intent(in), value :: de
197  type(c_ptr), intent(in), value :: r
198  type(c_ptr), intent(in), value :: dx
199  type(c_ptr), intent(in), value :: i
200  type(c_ptr), intent(in), value :: j
201  integer(c_int), intent(out) :: ierr
202  end subroutine kim_model_compute_process_d2edr2_term
203 
204  subroutine kim_model_compute_is_callback_present(model_compute_handle, &
205  callback_name, present, ierr)
206  use, intrinsic :: iso_c_binding
207  use kim_callback_name_module, only : kim_callback_name_type
208  import kim_model_compute_handle_type
209  implicit none
210  type(kim_model_compute_handle_type), intent(in) :: model_compute_handle
211  type(kim_callback_name_type), intent(in), value :: callback_name
212  integer(c_int), intent(out) :: present
213  integer(c_int), intent(out) :: ierr
214  end subroutine kim_model_compute_is_callback_present
215 
217  model_compute_handle, ptr)
218  use, intrinsic :: iso_c_binding
219  import kim_model_compute_handle_type
220  implicit none
221  type(kim_model_compute_handle_type), intent(in) :: model_compute_handle
222  type(c_ptr), intent(out) :: ptr
224 
225  subroutine kim_model_compute_log_entry(model_compute_handle, &
226  log_verbosity, message, line_number, file_name)
227  use, intrinsic :: iso_c_binding
228  use kim_log_verbosity_module, only : kim_log_verbosity_type
229  import kim_model_compute_handle_type
230  implicit none
231  type(kim_model_compute_handle_type), intent(in) :: model_compute_handle
232  type(kim_log_verbosity_type), intent(in), value :: log_verbosity
233  character(len=*), intent(in) :: message
234  integer(c_int), intent(in), value :: line_number
235  character(len=*), intent(in) :: file_name
236  end subroutine kim_model_compute_log_entry
237 
238  subroutine kim_model_compute_string(model_compute_handle, string)
239  use, intrinsic :: iso_c_binding
240  import kim_model_compute_handle_type
241  implicit none
242  type(kim_model_compute_handle_type), intent(in) :: model_compute_handle
243  character(len=*), intent(out) :: string
244  end subroutine kim_model_compute_string
245 end interface
246 end module kim_model_compute_module
type(kim_model_compute_handle_type), public, protected kim_model_compute_null_handle