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--2020, 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-2.2.1 package. 31! 32 33!> \brief \copybrief KIM::Numbering 34!! 35!! \sa KIM::Numbering, KIM_Numbering 36!! 37!! \since 2.0 38module kim_numbering_module 39 use, intrinsic :: iso_c_binding 40 implicit none 41 private 42 43 public & 44 ! Derived types 45 kim_numbering_type, & 46 ! Constants 47 KIM_NUMBERING_ZERO_BASED, & 48 KIM_NUMBERING_ONE_BASED, & 49 ! Routines 50 kim_known, & 51 operator(.eq.), & 52 operator(.ne.), & 53 kim_from_string, & 54 kim_to_string, & 55 kim_get_number_of_numberings, & 56 kim_get_numbering 57 58 !> \brief \copybrief KIM::Numbering 59 !! 60 !! \sa KIM::Numbering, KIM_Numbering 61 !! 62 !! \since 2.0 63 type, bind(c) :: kim_numbering_type 64 integer(c_int) :: numbering_id 65 end type kim_numbering_type 66 67 !> \brief \copybrief KIM::NUMBERING::zeroBased 68 !! 69 !! \sa KIM::NUMBERING::zeroBased, KIM_NUMBERING_zeroBased 70 !! 71 !! \since 2.0 72 type(kim_numbering_type), protected, save, & 73 bind(c, name="KIM_NUMBERING_zeroBased") & 74 :: KIM_NUMBERING_ZERO_BASED 75 76 !> \brief \copybrief KIM::NUMBERING::oneBased 77 !! 78 !! \sa KIM::NUMBERING::oneBased, KIM_NUMBERING_oneBased 79 !! 80 !! \since 2.0 81 type(kim_numbering_type), protected, save, & 82 bind(c, name="KIM_NUMBERING_oneBased") & 83 :: KIM_NUMBERING_ONE_BASED 84 85 !> \brief \copybrief KIM::Numbering::Known 86 !! 87 !! \sa KIM::Numbering::Known, KIM_Numbering_Known 88 !! 89 !! \since 2.0 90 interface kim_known 91 module procedure kim_numbering_known 92 end interface kim_known 93 94 !> \brief \copybrief KIM::Numbering::operator==() 95 !! 96 !! \sa KIM::Numbering::operator==(), KIM_Numbering_Equal 97 !! 98 !! \since 2.0 99 interface operator(.eq.) 100 module procedure kim_numbering_equal 101 end interface operator(.eq.) 102 103 !> \brief \copybrief KIM::Numbering::operator!=() 104 !! 105 !! \sa KIM::Numbering::operator!=(), KIM_Numbering_NotEqual 106 !! 107 !! \since 2.0 108 interface operator(.ne.) 109 module procedure kim_numbering_not_equal 110 end interface operator(.ne.) 111 112 !> \brief \copybrief KIM::Numbering::Numbering(std::string const &) 113 !! 114 !! \sa KIM::Numbering::Numbering(std::string const &), 115 !! KIM_Numbering_FromString 116 !! 117 !! \since 2.0 118 interface kim_from_string 119 module procedure kim_numbering_from_string 120 end interface kim_from_string 121 122 !> \brief \copybrief KIM::Numbering::ToString 123 !! 124 !! \sa KIM::Numbering::ToString, KIM_Numbering_ToString 125 !! 126 !! \since 2.0 127 interface kim_to_string 128 module procedure kim_numbering_to_string 129 end interface kim_to_string 130 131contains 132 !> \brief \copybrief KIM::Numbering::Known 133 !! 134 !! \sa KIM::Numbering::Known, KIM_Numbering_Known 135 !! 136 !! \since 2.0 137 logical recursive function kim_numbering_known(numbering) 138 implicit none 139 interface 140 integer(c_int) recursive function known(numbering) & 141 bind(c, name="KIM_Numbering_Known") 142 use, intrinsic :: iso_c_binding 143 import kim_numbering_type 144 implicit none 145 type(kim_numbering_type), intent(in), value :: numbering 146 end function known 147 end interface 148 type(kim_numbering_type), intent(in) :: numbering 149 150 kim_numbering_known = (known(numbering) /= 0) 151 end function kim_numbering_known 152 153 !> \brief \copybrief KIM::Numbering::operator==() 154 !! 155 !! \sa KIM::Numbering::operator==(), KIM_Numbering_Equal 156 !! 157 !! \since 2.0 158 logical recursive function kim_numbering_equal(lhs, rhs) 159 implicit none 160 type(kim_numbering_type), intent(in) :: lhs 161 type(kim_numbering_type), intent(in) :: rhs 162 163 kim_numbering_equal = (lhs%numbering_id == rhs%numbering_id) 164 end function kim_numbering_equal 165 166 !> \brief \copybrief KIM::Numbering::operator!=() 167 !! 168 !! \sa KIM::Numbering::operator!=(), KIM_Numbering_NotEqual 169 !! 170 !! \since 2.0 171 logical recursive function kim_numbering_not_equal(lhs, rhs) 172 implicit none 173 type(kim_numbering_type), intent(in) :: lhs 174 type(kim_numbering_type), intent(in) :: rhs 175 176 kim_numbering_not_equal = .not. (lhs == rhs) 177 end function kim_numbering_not_equal 178 179 !> \brief \copybrief KIM::Numbering::Numbering(std::string const &) 180 !! 181 !! \sa KIM::Numbering::Numbering(std::string const &), 182 !! KIM_Numbering_FromString 183 !! 184 !! \since 2.0 185 recursive subroutine kim_numbering_from_string(string, numbering) 186 implicit none 187 interface 188 type(kim_numbering_type) recursive function from_string(string) & 189 bind(c, name="KIM_Numbering_FromString") 190 use, intrinsic :: iso_c_binding 191 import kim_numbering_type 192 implicit none 193 character(c_char), intent(in) :: string(*) 194 end function from_string 195 end interface 196 character(len=*, kind=c_char), intent(in) :: string 197 type(kim_numbering_type), intent(out) :: numbering 198 199 numbering = from_string(trim(string)//c_null_char) 200 end subroutine kim_numbering_from_string 201 202 !> \brief \copybrief KIM::Numbering::ToString 203 !! 204 !! \sa KIM::Numbering::ToString, KIM_Numbering_ToString 205 !! 206 !! \since 2.0 207 recursive subroutine kim_numbering_to_string(numbering, string) 208 use kim_convert_string_module, only: kim_convert_c_char_ptr_to_string 209 implicit none 210 interface 211 type(c_ptr) recursive function get_string(numbering) & 212 bind(c, name="KIM_Numbering_ToString") 213 use, intrinsic :: iso_c_binding 214 import kim_numbering_type 215 implicit none 216 type(kim_numbering_type), intent(in), value :: numbering 217 end function get_string 218 end interface 219 type(kim_numbering_type), intent(in) :: numbering 220 character(len=*, kind=c_char), intent(out) :: string 221 222 type(c_ptr) :: p 223 224 p = get_string(numbering) 225 call kim_convert_c_char_ptr_to_string(p, string) 226 end subroutine kim_numbering_to_string 227 228 !> \brief \copybrief KIM::NUMBERING::GetNumberOfNumberings 229 !! 230 !! \sa KIM::NUMBERING::GetNumberOfNumberings, 231 !! KIM_NUMBERING_GetNumberOfNumberings 232 !! 233 !! \since 2.0 234 recursive subroutine kim_get_number_of_numberings(number_of_numberings) 235 implicit none 236 interface 237 recursive subroutine get_number_of_numberings(number_of_numberings) & 238 bind(c, name="KIM_NUMBERING_GetNumberOfNumberings") 239 use, intrinsic :: iso_c_binding 240 implicit none 241 integer(c_int), intent(out) :: number_of_numberings 242 end subroutine get_number_of_numberings 243 end interface 244 integer(c_int), intent(out) :: number_of_numberings 245 246 call get_number_of_numberings(number_of_numberings) 247 end subroutine kim_get_number_of_numberings 248 249 !> \brief \copybrief KIM::NUMBERING::GetNumbering 250 !! 251 !! \sa KIM::NUMBERING::GetNumbering, KIM_NUMBERING_GetNumbering 252 !! 253 !! \since 2.0 254 recursive subroutine kim_get_numbering(index, numbering, ierr) 255 implicit none 256 interface 257 integer(c_int) recursive function get_numbering(index, numbering) & 258 bind(c, name="KIM_NUMBERING_GetNumbering") 259 use, intrinsic :: iso_c_binding 260 import kim_numbering_type 261 implicit none 262 integer(c_int), intent(in), value :: index 263 type(kim_numbering_type), intent(out) :: numbering 264 end function get_numbering 265 end interface 266 integer(c_int), intent(in) :: index 267 type(kim_numbering_type), intent(out) :: numbering 268 integer(c_int), intent(out) :: ierr 269 270 ierr = get_numbering(index - 1, numbering) 271 end subroutine kim_get_numbering 272end module kim_numbering_module 273