kim-api 2.3.0+AppleClang.AppleClang.GNU
An Application Programming Interface (API) for the Knowledgebase of Interatomic Models (KIM).
Loading...
Searching...
No Matches
kim_language_name_module.f90
Go to the documentation of this file.
1!
2! KIM-API: An API for interatomic models
3! Copyright (c) 2013--2022, Regents of the University of Minnesota.
4! All rights reserved.
5!
6! Contributors:
7! Ryan S. Elliott
8!
9! SPDX-License-Identifier: LGPL-2.1-or-later
10!
11! This library is free software; you can redistribute it and/or
12! modify it under the terms of the GNU Lesser General Public
13! License as published by the Free Software Foundation; either
14! version 2.1 of the License, or (at your option) any later version.
15!
16! This library is distributed in the hope that it will be useful,
17! but WITHOUT ANY WARRANTY; without even the implied warranty of
18! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19! Lesser General Public License for more details.
20!
21! You should have received a copy of the GNU Lesser General Public License
22! along with this library; if not, write to the Free Software Foundation,
23! Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
24!
25
26!
27! Release: This file is part of the kim-api-2.3.0 package.
28!
29
36 use, intrinsic :: iso_c_binding
37 implicit none
38 private
39
40 public &
41 ! Derived types
43 ! Constants
47 ! Routines
48 kim_known, &
49 operator(.eq.), &
50 operator(.ne.), &
55
61 type, bind(c) :: kim_language_name_type
67 integer(c_int) :: language_name_id
69
75 type(kim_language_name_type), protected, save, &
76 bind(c, name="KIM_LANGUAGE_NAME_cpp") &
78
84 type(kim_language_name_type), protected, save, &
85 bind(c, name="KIM_LANGUAGE_NAME_c") &
87
93 type(kim_language_name_type), protected, save, &
94 bind(c, name="KIM_LANGUAGE_NAME_fortran") &
96
102 interface kim_known
103 module procedure kim_language_name_known
104 end interface kim_known
105
111 interface operator(.eq.)
112 module procedure kim_language_name_equal
113 end interface operator(.eq.)
114
120 interface operator(.ne.)
121 module procedure kim_language_name_not_equal
122 end interface operator(.ne.)
123
131 module procedure kim_language_name_from_string
132 end interface kim_from_string
133
140 module procedure kim_language_name_to_string
141 end interface kim_to_string
142
143contains
149 logical recursive function kim_language_name_known(language_name)
150 implicit none
151 interface
152 integer(c_int) recursive function known(language_name) &
153 bind(c, name="KIM_LanguageName_Known")
154 use, intrinsic :: iso_c_binding
156 implicit none
157 type(kim_language_name_type), intent(in), value :: language_name
158 end function known
159 end interface
160 type(kim_language_name_type), intent(in) :: language_name
161
162 kim_language_name_known = (known(language_name) /= 0)
163 end function kim_language_name_known
164
170 logical recursive function kim_language_name_equal(lhs, rhs)
171 implicit none
172 type(kim_language_name_type), intent(in) :: lhs
173 type(kim_language_name_type), intent(in) :: rhs
174
175 kim_language_name_equal &
176 = (lhs%language_name_id == rhs%language_name_id)
177 end function kim_language_name_equal
178
184 logical recursive function kim_language_name_not_equal(lhs, rhs)
185 implicit none
186 type(kim_language_name_type), intent(in) :: lhs
187 type(kim_language_name_type), intent(in) :: rhs
188
189 kim_language_name_not_equal = .not. (lhs == rhs)
190 end function kim_language_name_not_equal
191
198 recursive subroutine kim_language_name_from_string(string, language_name)
199 implicit none
200 interface
201 type(kim_language_name_type) recursive function from_string(string) &
202 bind(c, name="KIM_LanguageName_FromString")
203 use, intrinsic :: iso_c_binding
205 implicit none
206 character(c_char), intent(in) :: string(*)
207 end function from_string
208 end interface
209 character(len=*, kind=c_char), intent(in) :: string
210 type(kim_language_name_type), intent(out) :: language_name
211
212 language_name = from_string(trim(string)//c_null_char)
213 end subroutine kim_language_name_from_string
214
220 recursive subroutine kim_language_name_to_string(language_name, string)
221 use kim_convert_string_module, only: kim_convert_c_char_ptr_to_string
222 implicit none
223 interface
224 type(c_ptr) recursive function get_string(language_name) &
225 bind(c, name="KIM_LanguageName_ToString")
226 use, intrinsic :: iso_c_binding
228 implicit none
229 type(kim_language_name_type), intent(in), value :: language_name
230 end function get_string
231 end interface
232 type(kim_language_name_type), intent(in) :: language_name
233 character(len=*, kind=c_char), intent(out) :: string
234
235 type(c_ptr) :: p
236
237 p = get_string(language_name)
238 call kim_convert_c_char_ptr_to_string(p, string)
239 end subroutine kim_language_name_to_string
240
247 recursive subroutine kim_get_number_of_language_names( &
248 number_of_language_names)
249 implicit none
250 interface
251 recursive subroutine get_number_of_language_names( &
252 number_of_language_names) &
253 bind(c, name="KIM_LANGUAGE_NAME_GetNumberOfLanguageNames")
254 use, intrinsic :: iso_c_binding
255 integer(c_int), intent(out) :: number_of_language_names
256 end subroutine get_number_of_language_names
257 end interface
258 integer(c_int), intent(out) :: number_of_language_names
259
260 call get_number_of_language_names(number_of_language_names)
262
268 recursive subroutine kim_get_language_name(index, language_name, ierr)
269 implicit none
270 interface
271 integer(c_int) recursive function get_language_name(index, &
272 language_name) &
273 bind(c, name="KIM_LANGUAGE_NAME_GetLanguageName")
274 use, intrinsic :: iso_c_binding
276 integer(c_int), intent(in), value :: index
277 type(kim_language_name_type), intent(out) :: language_name
278 end function get_language_name
279 end interface
280 integer(c_int), intent(in) :: index
281 type(kim_language_name_type), intent(out) :: language_name
282 integer(c_int), intent(out) :: ierr
283
284 ierr = get_language_name(index - 1, language_name)
285 end subroutine kim_get_language_name
Create a LanguageName object corresponding to the provided string. If the string does not match one o...
Determines if the object is a quantity known to the KIM API.
An Extensible Enumeration for the LanguageName's supported by the KIM API.
recursive subroutine, public kim_get_number_of_language_names(number_of_language_names)
Get the number of standard LanguageName's defined by the KIM API.
recursive subroutine, public kim_get_language_name(index, language_name, ierr)
Get the identity of each defined standard LanguageName.
type(kim_language_name_type), save, bind(C, name="KIM_LANGUAGE_NAME_cpp"), public, protected kim_language_name_cpp
The standard cpp language.
type(kim_language_name_type), save, bind(C, name="KIM_LANGUAGE_NAME_c"), public, protected kim_language_name_c
The standard c language.
type(kim_language_name_type), save, bind(C, name="KIM_LANGUAGE_NAME_fortran"), public, protected kim_language_name_fortran
The standard fortran language.
An Extensible Enumeration for the LanguageName's supported by the KIM API.