1 ! 2 ! Attribute routines: 3 ! 4 ! ------- 5 function nf90_copy_att(ncid_in, varid_in, name, ncid_out, varid_out) 6 integer, intent( in) :: ncid_in, varid_in 7 character (len = *), intent( in) :: name 8 integer, intent( in) :: ncid_out, varid_out 9 integer :: nf90_copy_att 10 11 nf90_copy_att = nf_copy_att(ncid_in, varid_in, name, ncid_out, varid_out) 12 end function nf90_copy_att 13 ! ------- 14 function nf90_rename_att(ncid, varid, curname, newname) 15 integer, intent( in) :: ncid, varid 16 character (len = *), intent( in) :: curname, newname 17 integer :: nf90_rename_att 18 19 nf90_rename_att = nf_rename_att(ncid, varid, curname, newname) 20 end function nf90_rename_att 21 ! ------- 22 function nf90_del_att(ncid, varid, name) 23 integer, intent( in) :: ncid, varid 24 character (len = *), intent( in) :: name 25 integer :: nf90_del_att 26 27 nf90_del_att = nf_del_att(ncid, varid, name) 28 end function nf90_del_att 29 ! ------- 30 ! Attribute inquiry functions 31 ! ------- 32 function nf90_inq_attname(ncid, varid, attnum, name) 33 integer, intent( in) :: ncid, varid, attnum 34 character (len = *), intent(out) :: name 35 integer :: nf90_inq_attname 36 37 nf90_inq_attname = nf_inq_attname(ncid, varid, attnum, name) 38 end function nf90_inq_attname 39 ! ------- 40 function nf90_inquire_attribute(ncid, varid, name, xtype, len, attnum) 41 integer, intent( in) :: ncid, varid 42 character (len = *), intent( in) :: name 43 integer, intent(out), optional :: xtype, len, attnum 44 integer :: nf90_inquire_attribute 45 46 integer :: local_xtype, local_len 47 48 ! Do we need to worry about not saving the state from this call? 49 if(present(attnum)) & 50 nf90_inquire_attribute = nf_inq_attid(ncid, varid, name, attnum) 51 nf90_inquire_attribute = nf_inq_att (ncid, varid, name, local_xtype, local_len) 52 if(present(xtype)) xtype = local_xtype 53 if(present(len )) len = local_len 54 end function nf90_inquire_attribute 55 ! ------- 56 ! Put and get functions; these will get overloaded 57 ! ------- 58 ! Text 59 ! ------- 60 function nf90_put_att_text(ncid, varid, name, values) 61 integer, intent( in) :: ncid, varid 62 character(len = *), intent( in) :: name 63 character(len = *), intent( in) :: values 64 integer :: nf90_put_att_text 65 66 nf90_put_att_text = nf_put_att_text(ncid, varid, name, len_trim(values), trim(values)) 67 end function nf90_put_att_text 68 ! ------- 69 function nf90_get_att_text(ncid, varid, name, values) 70 integer, intent( in) :: ncid, varid 71 character(len = *), intent( in) :: name 72 character(len = *), intent(out) :: values 73 integer :: nf90_get_att_text 74 75 values = ' ' !! make sure result will be blank padded 76 nf90_get_att_text = nf_get_att_text(ncid, varid, name, values) 77 end function nf90_get_att_text 78 ! ------- 79 ! Integer attributes 80 ! ------- 81 function nf90_put_att_OneByteInt(ncid, varid, name, values) 82 integer, intent( in) :: ncid, varid 83 character(len = *), intent( in) :: name 84 integer (kind = OneByteInt), dimension(:), intent( in) :: values 85 integer :: nf90_put_att_OneByteInt 86 87 nf90_put_att_OneByteInt = nf_put_att_int1(ncid, varid, name, nf90_int1, size(values), values) 88 end function nf90_put_att_OneByteInt 89 ! ------- 90 function nf90_put_att_one_OneByteInt(ncid, varid, name, values) 91 integer, intent( in) :: ncid, varid 92 character(len = *), intent( in) :: name 93 integer (kind = OneByteInt), intent( in) :: values 94 integer :: nf90_put_att_one_OneByteInt 95 96 integer (kind = OneByteInt), dimension(1) :: valuesA 97 valuesA(1) = values 98 nf90_put_att_one_OneByteInt = nf_put_att_int1(ncid, varid, name, nf90_int1, 1, valuesA) 99 end function nf90_put_att_one_OneByteInt 100 ! ------- 101 function nf90_get_att_OneByteInt(ncid, varid, name, values) 102 integer, intent( in) :: ncid, varid 103 character(len = *), intent( in) :: name 104 integer (kind = OneByteInt), dimension(:), intent(out) :: values 105 integer :: nf90_get_att_OneByteInt 106 107 nf90_get_att_OneByteInt = nf_get_att_int1(ncid, varid, name, values) 108 end function nf90_get_att_OneByteInt 109 ! ------- 110 function nf90_get_att_one_OneByteInt(ncid, varid, name, values) 111 integer, intent( in) :: ncid, varid 112 character(len = *), intent( in) :: name 113 integer (kind = OneByteInt), intent(out) :: values 114 integer :: nf90_get_att_one_OneByteInt 115 116 integer (kind = OneByteInt), dimension(1) :: valuesA 117 nf90_get_att_one_OneByteInt = nf_get_att_int1(ncid, varid, name, valuesA) 118 values = valuesA(1) 119 end function nf90_get_att_one_OneByteInt 120 ! ------- 121 function nf90_put_att_TwoByteInt(ncid, varid, name, values) 122 integer, intent( in) :: ncid, varid 123 character(len = *), intent( in) :: name 124 integer (kind = TwoByteInt), dimension(:), intent( in) :: values 125 integer :: nf90_put_att_TwoByteInt 126 127 nf90_put_att_TwoByteInt = nf_put_att_int2(ncid, varid, name, nf90_int2, size(values), values) 128 end function nf90_put_att_TwoByteInt 129 ! ------- 130 function nf90_put_att_one_TwoByteInt(ncid, varid, name, values) 131 integer, intent( in) :: ncid, varid 132 character(len = *), intent( in) :: name 133 integer (kind = TwoByteInt), intent( in) :: values 134 integer :: nf90_put_att_one_TwoByteInt 135 136 integer (kind = TwoByteInt), dimension(1) :: valuesA 137 valuesA(1) = values 138 nf90_put_att_one_TwoByteInt = nf_put_att_int2(ncid, varid, name, nf90_int2, 1, valuesA) 139 end function nf90_put_att_one_TwoByteInt 140 ! ------- 141 function nf90_get_att_TwoByteInt(ncid, varid, name, values) 142 integer, intent( in) :: ncid, varid 143 character(len = *), intent( in) :: name 144 integer (kind = TwoByteInt), dimension(:), intent(out) :: values 145 integer :: nf90_get_att_TwoByteInt 146 147 nf90_get_att_TwoByteInt = nf_get_att_int2(ncid, varid, name, values) 148 end function nf90_get_att_TwoByteInt 149 ! ------- 150 function nf90_get_att_one_TwoByteInt(ncid, varid, name, values) 151 integer, intent( in) :: ncid, varid 152 character(len = *), intent( in) :: name 153 integer (kind = TwoByteInt), intent(out) :: values 154 integer :: nf90_get_att_one_TwoByteInt 155 156 integer (kind = TwoByteInt), dimension(1) :: valuesA 157 nf90_get_att_one_TwoByteInt = nf_get_att_int2(ncid, varid, name, valuesA) 158 values = valuesA(1) 159 end function nf90_get_att_one_TwoByteInt 160 ! ------- 161 function nf90_put_att_FourByteInt(ncid, varid, name, values) 162 integer, intent( in) :: ncid, varid 163 character(len = *), intent( in) :: name 164 integer (kind = FourByteInt), dimension(:), intent( in) :: values 165 integer :: nf90_put_att_FourByteInt 166 167 nf90_put_att_FourByteInt = nf_put_att_int(ncid, varid, name, nf90_int, size(values), int(values)) 168 end function nf90_put_att_FourByteInt 169 ! ------- 170 function nf90_put_att_one_FourByteInt(ncid, varid, name, values) 171 integer, intent( in) :: ncid, varid 172 character(len = *), intent( in) :: name 173 integer (kind = FourByteInt), intent( in) :: values 174 integer :: nf90_put_att_one_FourByteInt 175 176 integer (kind = FourByteInt), dimension(1) :: valuesA 177 valuesA(1) = int(values) 178 nf90_put_att_one_FourByteInt = nf_put_att_int(ncid, varid, name, nf90_int, 1, int(valuesA)) 179 end function nf90_put_att_one_FourByteInt 180 ! ------- 181 function nf90_get_att_FourByteInt(ncid, varid, name, values) 182 integer, intent( in) :: ncid, varid 183 character(len = *), intent( in) :: name 184 integer (kind = FourByteInt), dimension(:), intent(out) :: values 185 integer :: nf90_get_att_FourByteInt 186 187 integer, dimension(size(values)) :: defaultInteger 188 189 nf90_get_att_FourByteInt = nf_get_att_int(ncid, varid, name, defaultInteger) 190 values(:) = defaultInteger(:) 191 end function nf90_get_att_FourByteInt 192 ! ------- 193 function nf90_get_att_one_FourByteInt(ncid, varid, name, values) 194 integer, intent( in) :: ncid, varid 195 character(len = *), intent( in) :: name 196 integer (kind = FourByteInt), intent(out) :: values 197 integer :: nf90_get_att_one_FourByteInt 198 199 integer, dimension(1) :: defaultInteger 200 201 nf90_get_att_one_FourByteInt = nf_get_att_int(ncid, varid, name, defaultInteger) 202 values = defaultInteger(1) 203 end function nf90_get_att_one_FourByteInt 204 ! ------- 205 function nf90_put_att_EightByteInt(ncid, varid, name, values) 206 integer, intent( in) :: ncid, varid 207 character(len = *), intent( in) :: name 208 integer (kind = EightByteInt), dimension(:), intent( in) :: values 209 integer :: nf90_put_att_EightByteInt 210 211 nf90_put_att_EightByteInt = nf_put_att_int64(ncid, varid, name, nf90_int64, size(values), values) 212 end function nf90_put_att_EightByteInt 213 ! ------- 214 function nf90_put_att_one_EightByteInt(ncid, varid, name, values) 215 integer, intent( in) :: ncid, varid 216 character(len = *), intent( in) :: name 217 integer (kind = EightByteInt), intent( in) :: values 218 integer :: nf90_put_att_one_EightByteInt 219 220 integer(kind=EightByteInt), dimension(1) :: valuesA 221 valuesA(1) = values 222 nf90_put_att_one_EightByteInt = nf_put_att_int64(ncid, varid, name, nf90_int64, 1, valuesA) 223 end function nf90_put_att_one_EightByteInt 224 ! ------- 225 function nf90_get_att_EightByteInt(ncid, varid, name, values) 226 integer, intent( in) :: ncid, varid 227 character(len = *), intent( in) :: name 228 integer (kind = EightByteInt), dimension(:), intent(out) :: values 229 integer :: nf90_get_att_EightByteInt 230 231 nf90_get_att_EightByteInt = nf_get_att_int64(ncid, varid, name, values) 232 end function nf90_get_att_EightByteInt 233 ! ------- 234 function nf90_get_att_one_EightByteInt(ncid, varid, name, values) 235 integer, intent( in) :: ncid, varid 236 character(len = *), intent( in) :: name 237 integer (kind = EightByteInt), intent(out) :: values 238 integer :: nf90_get_att_one_EightByteInt 239 240 integer(kind=EightByteInt), dimension(1) :: valuesA 241 242 nf90_get_att_one_EightByteInt = nf_get_att_int64(ncid, varid, name, valuesA) 243 values = valuesA(1) 244 end function nf90_get_att_one_EightByteInt 245 ! ------- 246 ! Real attributes 247 ! ------- 248 function nf90_put_att_FourByteReal(ncid, varid, name, values) 249 integer, intent( in) :: ncid, varid 250 character(len = *), intent( in) :: name 251 real (kind = FourByteReal), dimension(:), intent( in) :: values 252 integer :: nf90_put_att_FourByteReal 253 254 nf90_put_att_FourByteReal = nf_put_att_real(ncid, varid, name, nf90_real4, size(values), values) 255 end function nf90_put_att_FourByteReal 256 ! ------- 257 function nf90_put_att_one_FourByteReal(ncid, varid, name, values) 258 integer, intent( in) :: ncid, varid 259 character(len = *), intent( in) :: name 260 real (kind = FourByteReal), intent( in) :: values 261 integer :: nf90_put_att_one_FourByteReal 262 263 real (kind = FourByteReal), dimension(1) :: valuesA 264 valuesA(1) = values 265 nf90_put_att_one_FourByteReal = nf_put_att_real(ncid, varid, name, nf90_real4, 1, valuesA) 266 end function nf90_put_att_one_FourByteReal 267 ! ------- 268 function nf90_get_att_FourByteReal(ncid, varid, name, values) 269 integer, intent( in) :: ncid, varid 270 character(len = *), intent( in) :: name 271 real (kind = FourByteReal), dimension(:), intent(out) :: values 272 integer :: nf90_get_att_FourByteReal 273 274 nf90_get_att_FourByteReal = nf_get_att_real(ncid, varid, name, values) 275 end function nf90_get_att_FourByteReal 276 ! ------- 277 function nf90_get_att_one_FourByteReal(ncid, varid, name, values) 278 integer, intent( in) :: ncid, varid 279 character(len = *), intent( in) :: name 280 real (kind = FourByteReal), intent(out) :: values 281 integer :: nf90_get_att_one_FourByteReal 282 283 real (kind = FourByteReal), dimension(1) :: valuesA 284 nf90_get_att_one_FourByteReal = nf_get_att_real(ncid, varid, name, valuesA) 285 values = valuesA(1) 286 end function nf90_get_att_one_FourByteReal 287 ! ------- 288 function nf90_put_att_EightByteReal(ncid, varid, name, values) 289 integer, intent( in) :: ncid, varid 290 character(len = *), intent( in) :: name 291 real (kind = EightByteReal), dimension(:), intent( in) :: values 292 integer :: nf90_put_att_EightByteReal 293 294 nf90_put_att_EightByteReal = nf_put_att_double(ncid, varid, name, nf90_real8, size(values), values) 295 end function nf90_put_att_EightByteReal 296 ! ------- 297 function nf90_put_att_one_EightByteReal(ncid, varid, name, values) 298 integer, intent( in) :: ncid, varid 299 character(len = *), intent( in) :: name 300 real (kind = EightByteReal), intent( in) :: values 301 integer :: nf90_put_att_one_EightByteReal 302 303 real (kind = EightByteReal), dimension(1) :: valuesA 304 valuesA(1) = values 305 nf90_put_att_one_EightByteReal = nf_put_att_double(ncid, varid, name, nf90_real8, 1, valuesA) 306 end function nf90_put_att_one_EightByteReal 307 ! ------- 308 function nf90_get_att_EightByteReal(ncid, varid, name, values) 309 integer, intent( in) :: ncid, varid 310 character(len = *), intent( in) :: name 311 real (kind = EightByteReal), dimension(:), intent(out) :: values 312 integer :: nf90_get_att_EightByteReal 313 314 nf90_get_att_EightByteReal = nf_get_att_double(ncid, varid, name, values) 315 end function nf90_get_att_EightByteReal 316 ! ------- 317 function nf90_get_att_one_EightByteReal(ncid, varid, name, values) 318 integer, intent( in) :: ncid, varid 319 character(len = *), intent( in) :: name 320 real (kind = EightByteReal), intent(out) :: values 321 integer :: nf90_get_att_one_EightByteReal 322 323 real (kind = EightByteReal), dimension(1) :: valuesA 324 nf90_get_att_one_EightByteReal = nf_get_att_double(ncid, varid, name, valuesA) 325 values = valuesA(1) 326 end function nf90_get_att_one_EightByteReal 327 ! ------- 328