PageRenderTime 88ms CodeModel.GetById 19ms RepoModel.GetById 0ms app.codeStats 1ms

/other/netcdf_write_matrix/src/nf_test/test_get.F

http://github.com/jbeezley/wrf-fire
FORTRAN Legacy | 5599 lines | 4980 code | 145 blank | 474 comment | 822 complexity | e7ee9925a4301636414196baa095d4ae MD5 | raw file
Possible License(s): AGPL-1.0
  1. C Do not edit this file. It is produced from the corresponding .m4 source */
  2. C*********************************************************************
  3. C Copyright 1996, UCAR/Unidata
  4. C See netcdf/COPYRIGHT file for copying and redistribution conditions.
  5. C $Id: test_get.m4,v 1.10 1997/06/06 21:54:38 steve Exp $
  6. C*********************************************************************
  7. subroutine test_nf_get_var1_text()
  8. implicit none
  9. #include "tests.inc"
  10. integer ncid
  11. integer i
  12. integer j
  13. integer err
  14. integer nok
  15. integer index(MAX_RANK)
  16. doubleprecision expect
  17. logical canConvert
  18. character value
  19. doubleprecision val
  20. nok = 0
  21. err = nf_open(testfile, NF_NOWRITE, ncid)
  22. if (err .ne. 0)
  23. + call errore('nf_open: ', err)
  24. do 1, i = 1, NVARS
  25. canConvert = (var_type(i) .eq. NF_CHAR) .eqv.
  26. + (NFT_TEXT .eq. NFT_TEXT)
  27. do 2, j = 1, var_rank(i)
  28. index(j) = 1
  29. 2 continue
  30. err = nf_get_var1_text(BAD_ID, i, index, value)
  31. if (err .ne. NF_EBADID)
  32. + call errore('bad ncid: ', err)
  33. err = nf_get_var1_text(ncid, BAD_VARID,
  34. + index, value)
  35. if (err .ne. NF_ENOTVAR)
  36. + call errore('bad var id: ', err)
  37. do 3, j = 1, var_rank(i)
  38. index(j) = var_shape(j,i) + 1
  39. err = nf_get_var1_text(ncid, i, index, value)
  40. if (.not. canConvert) then
  41. if (err .ne. NF_ECHAR)
  42. + call errore('conversion: ', err)
  43. else
  44. if (err .ne. NF_EINVALCOORDS)
  45. + call errore('bad index: ', err)
  46. endif
  47. index(j) = 1
  48. 3 continue
  49. do 4, j = 1, var_nels(i)
  50. err = index2indexes(j, var_rank(i), var_shape(1,i),
  51. + index)
  52. if (err .ne. 0)
  53. + call error('error in index2indexes 1')
  54. expect = hash4( var_type(i), var_rank(i), index,
  55. + NFT_TEXT )
  56. err = nf_get_var1_text(ncid, i, index,
  57. + value)
  58. if (canConvert) then
  59. if (inRange3(expect,var_type(i),
  60. + NFT_TEXT)) then
  61. if (in_internal_range(NFT_TEXT,
  62. + expect)) then
  63. if (err .ne. 0) then
  64. call errore('nf_get_var: ', err)
  65. else
  66. val = ichar(value)
  67. if (.not. equal(val, expect,
  68. + var_type(i),
  69. + NFT_TEXT)) then
  70. call errord('unexpected: ', val)
  71. else
  72. nok = nok + 1
  73. end if
  74. end if
  75. else
  76. if (err .ne. NF_ERANGE)
  77. + call errore('Range error: ', err)
  78. end if
  79. else
  80. if (err .ne. 0 .and. err .ne. NF_ERANGE)
  81. + call errore('OK or Range error: ', err)
  82. end if
  83. else
  84. if (err .ne. NF_ECHAR)
  85. + call errore('wrong type: ', err)
  86. end if
  87. 4 continue
  88. 1 continue
  89. err = nf_close(ncid)
  90. if (err .ne. 0)
  91. + call errore('nf_close: ', err)
  92. call print_nok(nok)
  93. end
  94. #ifdef NF_INT1_T
  95. subroutine test_nf_get_var1_int1()
  96. implicit none
  97. #include "tests.inc"
  98. integer ncid
  99. integer i
  100. integer j
  101. integer err
  102. integer nok
  103. integer index(MAX_RANK)
  104. doubleprecision expect
  105. logical canConvert
  106. NF_INT1_T value
  107. doubleprecision val
  108. nok = 0
  109. err = nf_open(testfile, NF_NOWRITE, ncid)
  110. if (err .ne. 0)
  111. + call errore('nf_open: ', err)
  112. do 1, i = 1, NVARS
  113. canConvert = (var_type(i) .eq. NF_CHAR) .eqv.
  114. + (NFT_INT1 .eq. NFT_TEXT)
  115. do 2, j = 1, var_rank(i)
  116. index(j) = 1
  117. 2 continue
  118. err = nf_get_var1_int1(BAD_ID, i, index, value)
  119. if (err .ne. NF_EBADID)
  120. + call errore('bad ncid: ', err)
  121. err = nf_get_var1_int1(ncid, BAD_VARID,
  122. + index, value)
  123. if (err .ne. NF_ENOTVAR)
  124. + call errore('bad var id: ', err)
  125. do 3, j = 1, var_rank(i)
  126. index(j) = var_shape(j,i) + 1
  127. err = nf_get_var1_int1(ncid, i, index, value)
  128. if (.not. canConvert) then
  129. if (err .ne. NF_ECHAR)
  130. + call errore('conversion: ', err)
  131. else
  132. if (err .ne. NF_EINVALCOORDS)
  133. + call errore('bad index: ', err)
  134. endif
  135. index(j) = 1
  136. 3 continue
  137. do 4, j = 1, var_nels(i)
  138. err = index2indexes(j, var_rank(i), var_shape(1,i),
  139. + index)
  140. if (err .ne. 0)
  141. + call error('error in index2indexes 1')
  142. expect = hash4( var_type(i), var_rank(i), index,
  143. + NFT_INT1 )
  144. err = nf_get_var1_int1(ncid, i, index,
  145. + value)
  146. if (canConvert) then
  147. if (inRange3(expect,var_type(i),
  148. + NFT_INT1)) then
  149. if (in_internal_range(NFT_INT1,
  150. + expect)) then
  151. if (err .ne. 0) then
  152. call errore('nf_get_var: ', err)
  153. else
  154. val = value
  155. if (.not. equal(val, expect,
  156. + var_type(i),
  157. + NFT_INT1)) then
  158. call errord('unexpected: ', val)
  159. else
  160. nok = nok + 1
  161. end if
  162. end if
  163. else
  164. if (err .ne. NF_ERANGE)
  165. + call errore('Range error: ', err)
  166. end if
  167. else
  168. if (err .ne. 0 .and. err .ne. NF_ERANGE)
  169. + call errore('OK or Range error: ', err)
  170. end if
  171. else
  172. if (err .ne. NF_ECHAR)
  173. + call errore('wrong type: ', err)
  174. end if
  175. 4 continue
  176. 1 continue
  177. err = nf_close(ncid)
  178. if (err .ne. 0)
  179. + call errore('nf_close: ', err)
  180. call print_nok(nok)
  181. end
  182. #endif
  183. #ifdef NF_INT2_T
  184. subroutine test_nf_get_var1_int2()
  185. implicit none
  186. #include "tests.inc"
  187. integer ncid
  188. integer i
  189. integer j
  190. integer err
  191. integer nok
  192. integer index(MAX_RANK)
  193. doubleprecision expect
  194. logical canConvert
  195. NF_INT2_T value
  196. doubleprecision val
  197. nok = 0
  198. err = nf_open(testfile, NF_NOWRITE, ncid)
  199. if (err .ne. 0)
  200. + call errore('nf_open: ', err)
  201. do 1, i = 1, NVARS
  202. canConvert = (var_type(i) .eq. NF_CHAR) .eqv.
  203. + (NFT_INT2 .eq. NFT_TEXT)
  204. do 2, j = 1, var_rank(i)
  205. index(j) = 1
  206. 2 continue
  207. err = nf_get_var1_int2(BAD_ID, i, index, value)
  208. if (err .ne. NF_EBADID)
  209. + call errore('bad ncid: ', err)
  210. err = nf_get_var1_int2(ncid, BAD_VARID,
  211. + index, value)
  212. if (err .ne. NF_ENOTVAR)
  213. + call errore('bad var id: ', err)
  214. do 3, j = 1, var_rank(i)
  215. index(j) = var_shape(j,i) + 1
  216. err = nf_get_var1_int2(ncid, i, index, value)
  217. if (.not. canConvert) then
  218. if (err .ne. NF_ECHAR)
  219. + call errore('conversion: ', err)
  220. else
  221. if (err .ne. NF_EINVALCOORDS)
  222. + call errore('bad index: ', err)
  223. endif
  224. index(j) = 1
  225. 3 continue
  226. do 4, j = 1, var_nels(i)
  227. err = index2indexes(j, var_rank(i), var_shape(1,i),
  228. + index)
  229. if (err .ne. 0)
  230. + call error('error in index2indexes 1')
  231. expect = hash4( var_type(i), var_rank(i), index,
  232. + NFT_INT2 )
  233. err = nf_get_var1_int2(ncid, i, index,
  234. + value)
  235. if (canConvert) then
  236. if (inRange3(expect,var_type(i),
  237. + NFT_INT2)) then
  238. if (in_internal_range(NFT_INT2,
  239. + expect)) then
  240. if (err .ne. 0) then
  241. call errore('nf_get_var: ', err)
  242. else
  243. val = value
  244. if (.not. equal(val, expect,
  245. + var_type(i),
  246. + NFT_INT2)) then
  247. call errord('unexpected: ', val)
  248. else
  249. nok = nok + 1
  250. end if
  251. end if
  252. else
  253. if (err .ne. NF_ERANGE)
  254. + call errore('Range error: ', err)
  255. end if
  256. else
  257. if (err .ne. 0 .and. err .ne. NF_ERANGE)
  258. + call errore('OK or Range error: ', err)
  259. end if
  260. else
  261. if (err .ne. NF_ECHAR)
  262. + call errore('wrong type: ', err)
  263. end if
  264. 4 continue
  265. 1 continue
  266. err = nf_close(ncid)
  267. if (err .ne. 0)
  268. + call errore('nf_close: ', err)
  269. call print_nok(nok)
  270. end
  271. #endif
  272. subroutine test_nf_get_var1_int()
  273. implicit none
  274. #include "tests.inc"
  275. integer ncid
  276. integer i
  277. integer j
  278. integer err
  279. integer nok
  280. integer index(MAX_RANK)
  281. doubleprecision expect
  282. logical canConvert
  283. integer value
  284. doubleprecision val
  285. nok = 0
  286. err = nf_open(testfile, NF_NOWRITE, ncid)
  287. if (err .ne. 0)
  288. + call errore('nf_open: ', err)
  289. do 1, i = 1, NVARS
  290. canConvert = (var_type(i) .eq. NF_CHAR) .eqv.
  291. + (NFT_INT .eq. NFT_TEXT)
  292. do 2, j = 1, var_rank(i)
  293. index(j) = 1
  294. 2 continue
  295. err = nf_get_var1_int(BAD_ID, i, index, value)
  296. if (err .ne. NF_EBADID)
  297. + call errore('bad ncid: ', err)
  298. err = nf_get_var1_int(ncid, BAD_VARID,
  299. + index, value)
  300. if (err .ne. NF_ENOTVAR)
  301. + call errore('bad var id: ', err)
  302. do 3, j = 1, var_rank(i)
  303. index(j) = var_shape(j,i) + 1
  304. err = nf_get_var1_int(ncid, i, index, value)
  305. if (.not. canConvert) then
  306. if (err .ne. NF_ECHAR)
  307. + call errore('conversion: ', err)
  308. else
  309. if (err .ne. NF_EINVALCOORDS)
  310. + call errore('bad index: ', err)
  311. endif
  312. index(j) = 1
  313. 3 continue
  314. do 4, j = 1, var_nels(i)
  315. err = index2indexes(j, var_rank(i), var_shape(1,i),
  316. + index)
  317. if (err .ne. 0)
  318. + call error('error in index2indexes 1')
  319. expect = hash4( var_type(i), var_rank(i), index,
  320. + NFT_INT )
  321. err = nf_get_var1_int(ncid, i, index,
  322. + value)
  323. if (canConvert) then
  324. if (inRange3(expect,var_type(i),
  325. + NFT_INT)) then
  326. if (in_internal_range(NFT_INT,
  327. + expect)) then
  328. if (err .ne. 0) then
  329. call errore('nf_get_var: ', err)
  330. else
  331. val = value
  332. if (.not. equal(val, expect,
  333. + var_type(i),
  334. + NFT_INT)) then
  335. call errord('unexpected: ', val)
  336. else
  337. nok = nok + 1
  338. end if
  339. end if
  340. else
  341. if (err .ne. NF_ERANGE)
  342. + call errore('Range error: ', err)
  343. end if
  344. else
  345. if (err .ne. 0 .and. err .ne. NF_ERANGE)
  346. + call errore('OK or Range error: ', err)
  347. end if
  348. else
  349. if (err .ne. NF_ECHAR)
  350. + call errore('wrong type: ', err)
  351. end if
  352. 4 continue
  353. 1 continue
  354. err = nf_close(ncid)
  355. if (err .ne. 0)
  356. + call errore('nf_close: ', err)
  357. call print_nok(nok)
  358. end
  359. subroutine test_nf_get_var1_real()
  360. implicit none
  361. #include "tests.inc"
  362. integer ncid
  363. integer i
  364. integer j
  365. integer err
  366. integer nok
  367. integer index(MAX_RANK)
  368. doubleprecision expect
  369. logical canConvert
  370. real value
  371. doubleprecision val
  372. nok = 0
  373. err = nf_open(testfile, NF_NOWRITE, ncid)
  374. if (err .ne. 0)
  375. + call errore('nf_open: ', err)
  376. do 1, i = 1, NVARS
  377. canConvert = (var_type(i) .eq. NF_CHAR) .eqv.
  378. + (NFT_REAL .eq. NFT_TEXT)
  379. do 2, j = 1, var_rank(i)
  380. index(j) = 1
  381. 2 continue
  382. err = nf_get_var1_real(BAD_ID, i, index, value)
  383. if (err .ne. NF_EBADID)
  384. + call errore('bad ncid: ', err)
  385. err = nf_get_var1_real(ncid, BAD_VARID,
  386. + index, value)
  387. if (err .ne. NF_ENOTVAR)
  388. + call errore('bad var id: ', err)
  389. do 3, j = 1, var_rank(i)
  390. index(j) = var_shape(j,i) + 1
  391. err = nf_get_var1_real(ncid, i, index, value)
  392. if (.not. canConvert) then
  393. if (err .ne. NF_ECHAR)
  394. + call errore('conversion: ', err)
  395. else
  396. if (err .ne. NF_EINVALCOORDS)
  397. + call errore('bad index: ', err)
  398. endif
  399. index(j) = 1
  400. 3 continue
  401. do 4, j = 1, var_nels(i)
  402. err = index2indexes(j, var_rank(i), var_shape(1,i),
  403. + index)
  404. if (err .ne. 0)
  405. + call error('error in index2indexes 1')
  406. expect = hash4( var_type(i), var_rank(i), index,
  407. + NFT_REAL )
  408. err = nf_get_var1_real(ncid, i, index,
  409. + value)
  410. if (canConvert) then
  411. if (inRange3(expect,var_type(i),
  412. + NFT_REAL)) then
  413. if (in_internal_range(NFT_REAL,
  414. + expect)) then
  415. if (err .ne. 0) then
  416. call errore('nf_get_var: ', err)
  417. else
  418. val = value
  419. if (.not. equal(val, expect,
  420. + var_type(i),
  421. + NFT_REAL)) then
  422. call errord('unexpected: ', val)
  423. else
  424. nok = nok + 1
  425. end if
  426. end if
  427. else
  428. if (err .ne. NF_ERANGE)
  429. + call errore('Range error: ', err)
  430. end if
  431. else
  432. if (err .ne. 0 .and. err .ne. NF_ERANGE)
  433. + call errore('OK or Range error: ', err)
  434. end if
  435. else
  436. if (err .ne. NF_ECHAR)
  437. + call errore('wrong type: ', err)
  438. end if
  439. 4 continue
  440. 1 continue
  441. err = nf_close(ncid)
  442. if (err .ne. 0)
  443. + call errore('nf_close: ', err)
  444. call print_nok(nok)
  445. end
  446. subroutine test_nf_get_var1_double()
  447. implicit none
  448. #include "tests.inc"
  449. integer ncid
  450. integer i
  451. integer j
  452. integer err
  453. integer nok
  454. integer index(MAX_RANK)
  455. doubleprecision expect
  456. logical canConvert
  457. doubleprecision value
  458. doubleprecision val
  459. nok = 0
  460. err = nf_open(testfile, NF_NOWRITE, ncid)
  461. if (err .ne. 0)
  462. + call errore('nf_open: ', err)
  463. do 1, i = 1, NVARS
  464. canConvert = (var_type(i) .eq. NF_CHAR) .eqv.
  465. + (NFT_DOUBLE .eq. NFT_TEXT)
  466. do 2, j = 1, var_rank(i)
  467. index(j) = 1
  468. 2 continue
  469. err = nf_get_var1_double(BAD_ID, i, index, value)
  470. if (err .ne. NF_EBADID)
  471. + call errore('bad ncid: ', err)
  472. err = nf_get_var1_double(ncid, BAD_VARID,
  473. + index, value)
  474. if (err .ne. NF_ENOTVAR)
  475. + call errore('bad var id: ', err)
  476. do 3, j = 1, var_rank(i)
  477. index(j) = var_shape(j,i) + 1
  478. err = nf_get_var1_double(ncid, i, index, value)
  479. if (.not. canConvert) then
  480. if (err .ne. NF_ECHAR)
  481. + call errore('conversion: ', err)
  482. else
  483. if (err .ne. NF_EINVALCOORDS)
  484. + call errore('bad index: ', err)
  485. endif
  486. index(j) = 1
  487. 3 continue
  488. do 4, j = 1, var_nels(i)
  489. err = index2indexes(j, var_rank(i), var_shape(1,i),
  490. + index)
  491. if (err .ne. 0)
  492. + call error('error in index2indexes 1')
  493. expect = hash4( var_type(i), var_rank(i), index,
  494. + NFT_DOUBLE )
  495. err = nf_get_var1_double(ncid, i, index,
  496. + value)
  497. if (canConvert) then
  498. if (inRange3(expect,var_type(i),
  499. + NFT_DOUBLE)) then
  500. if (in_internal_range(NFT_DOUBLE,
  501. + expect)) then
  502. if (err .ne. 0) then
  503. call errore('nf_get_var: ', err)
  504. else
  505. val = value
  506. if (.not. equal(val, expect,
  507. + var_type(i),
  508. + NFT_DOUBLE)) then
  509. call errord('unexpected: ', val)
  510. else
  511. nok = nok + 1
  512. end if
  513. end if
  514. else
  515. if (err .ne. NF_ERANGE)
  516. + call errore('Range error: ', err)
  517. end if
  518. else
  519. if (err .ne. 0 .and. err .ne. NF_ERANGE)
  520. + call errore('OK or Range error: ', err)
  521. end if
  522. else
  523. if (err .ne. NF_ECHAR)
  524. + call errore('wrong type: ', err)
  525. end if
  526. 4 continue
  527. 1 continue
  528. err = nf_close(ncid)
  529. if (err .ne. 0)
  530. + call errore('nf_close: ', err)
  531. call print_nok(nok)
  532. end
  533. subroutine test_nf_get_var_text()
  534. implicit none
  535. #include "tests.inc"
  536. integer ncid
  537. integer i
  538. integer j
  539. integer err
  540. logical allInExtRange
  541. logical allInIntRange
  542. integer nels
  543. integer nok
  544. integer index(MAX_RANK)
  545. doubleprecision expect(MAX_NELS)
  546. logical canConvert
  547. character value(MAX_NELS)
  548. doubleprecision val
  549. nok = 0
  550. err = nf_open(testfile, NF_NOWRITE, ncid)
  551. if (err .ne. 0)
  552. + call errore('nf_open: ', err)
  553. do 1, i = 1, NVARS
  554. canConvert = (var_type(i) .eq. NF_CHAR) .eqv.
  555. + (NFT_TEXT .eq. NFT_TEXT)
  556. err = nf_get_var_text(BAD_ID, i, value)
  557. if (err .ne. NF_EBADID)
  558. + call errore('bad ncid: ', err)
  559. err = nf_get_var_text(ncid, BAD_VARID, value)
  560. if (err .ne. NF_ENOTVAR)
  561. + call errore('bad var id: ', err)
  562. nels = 1
  563. do 3, j = 1, var_rank(i)
  564. nels = nels * var_shape(j,i)
  565. 3 continue
  566. allInExtRange = .true.
  567. allInIntRange = .true.
  568. do 4, j = 1, var_nels(i)
  569. err = index2indexes(j, var_rank(i), var_shape(1,i),
  570. + index)
  571. if (err .ne. 0)
  572. + call error('error in index2indexes 1')
  573. expect(j) = hash4( var_type(i), var_rank(i), index,
  574. + NFT_TEXT )
  575. if (inRange3(expect(j),var_type(i), NFT_TEXT)) then
  576. allInIntRange = allInIntRange .and.
  577. + in_internal_range(NFT_TEXT, expect(j))
  578. else
  579. allInExtRange = .false.
  580. end if
  581. 4 continue
  582. err = nf_get_var_text(ncid, i, value)
  583. if (canConvert) then
  584. if (allInExtRange) then
  585. if (allInIntRange) then
  586. if (err .ne. 0)
  587. + call errore('nf_get_var: ', err)
  588. else
  589. if (err .ne. NF_ERANGE)
  590. + call errore('Range error: ', err)
  591. endif
  592. else
  593. if (err .ne. 0 .and. err .ne. NF_ERANGE)
  594. + call errore('Range error: ', err)
  595. endif
  596. do 5, j = 1, var_nels(i)
  597. if (inRange3(expect(j),var_type(i),
  598. + NFT_TEXT) .and.
  599. + in_internal_range(NFT_TEXT,
  600. + expect(j))) then
  601. val = ichar(value(j))
  602. if (.not. equal(val, expect(j),
  603. + var_type(i),
  604. + NFT_TEXT)) then
  605. call errord('unexpected: ', val)
  606. else
  607. nok = nok + 1
  608. end if
  609. endif
  610. 5 continue
  611. else
  612. if (err .ne. NF_ECHAR)
  613. + call errore('wrong type: ', err)
  614. end if
  615. 1 continue
  616. err = nf_close(ncid)
  617. if (err .ne. 0)
  618. + call errore('nf_close: ', err)
  619. call print_nok(nok)
  620. end
  621. #ifdef NF_INT1_T
  622. subroutine test_nf_get_var_int1()
  623. implicit none
  624. #include "tests.inc"
  625. integer ncid
  626. integer i
  627. integer j
  628. integer err
  629. logical allInExtRange
  630. logical allInIntRange
  631. integer nels
  632. integer nok
  633. integer index(MAX_RANK)
  634. doubleprecision expect(MAX_NELS)
  635. logical canConvert
  636. NF_INT1_T value(MAX_NELS)
  637. doubleprecision val
  638. nok = 0
  639. err = nf_open(testfile, NF_NOWRITE, ncid)
  640. if (err .ne. 0)
  641. + call errore('nf_open: ', err)
  642. do 1, i = 1, NVARS
  643. canConvert = (var_type(i) .eq. NF_CHAR) .eqv.
  644. + (NFT_INT1 .eq. NFT_TEXT)
  645. err = nf_get_var_int1(BAD_ID, i, value)
  646. if (err .ne. NF_EBADID)
  647. + call errore('bad ncid: ', err)
  648. err = nf_get_var_int1(ncid, BAD_VARID, value)
  649. if (err .ne. NF_ENOTVAR)
  650. + call errore('bad var id: ', err)
  651. nels = 1
  652. do 3, j = 1, var_rank(i)
  653. nels = nels * var_shape(j,i)
  654. 3 continue
  655. allInExtRange = .true.
  656. allInIntRange = .true.
  657. do 4, j = 1, var_nels(i)
  658. err = index2indexes(j, var_rank(i), var_shape(1,i),
  659. + index)
  660. if (err .ne. 0)
  661. + call error('error in index2indexes 1')
  662. expect(j) = hash4( var_type(i), var_rank(i), index,
  663. + NFT_INT1 )
  664. if (inRange3(expect(j),var_type(i), NFT_INT1)) then
  665. allInIntRange = allInIntRange .and.
  666. + in_internal_range(NFT_INT1, expect(j))
  667. else
  668. allInExtRange = .false.
  669. end if
  670. 4 continue
  671. err = nf_get_var_int1(ncid, i, value)
  672. if (canConvert) then
  673. if (allInExtRange) then
  674. if (allInIntRange) then
  675. if (err .ne. 0)
  676. + call errore('nf_get_var: ', err)
  677. else
  678. if (err .ne. NF_ERANGE)
  679. + call errore('Range error: ', err)
  680. endif
  681. else
  682. if (err .ne. 0 .and. err .ne. NF_ERANGE)
  683. + call errore('Range error: ', err)
  684. endif
  685. do 5, j = 1, var_nels(i)
  686. if (inRange3(expect(j),var_type(i),
  687. + NFT_INT1) .and.
  688. + in_internal_range(NFT_INT1,
  689. + expect(j))) then
  690. val = value(j)
  691. if (.not. equal(val, expect(j),
  692. + var_type(i),
  693. + NFT_INT1)) then
  694. call errord('unexpected: ', val)
  695. else
  696. nok = nok + 1
  697. end if
  698. endif
  699. 5 continue
  700. else
  701. if (err .ne. NF_ECHAR)
  702. + call errore('wrong type: ', err)
  703. end if
  704. 1 continue
  705. err = nf_close(ncid)
  706. if (err .ne. 0)
  707. + call errore('nf_close: ', err)
  708. call print_nok(nok)
  709. end
  710. #endif
  711. #ifdef NF_INT2_T
  712. subroutine test_nf_get_var_int2()
  713. implicit none
  714. #include "tests.inc"
  715. integer ncid
  716. integer i
  717. integer j
  718. integer err
  719. logical allInExtRange
  720. logical allInIntRange
  721. integer nels
  722. integer nok
  723. integer index(MAX_RANK)
  724. doubleprecision expect(MAX_NELS)
  725. logical canConvert
  726. NF_INT2_T value(MAX_NELS)
  727. doubleprecision val
  728. nok = 0
  729. err = nf_open(testfile, NF_NOWRITE, ncid)
  730. if (err .ne. 0)
  731. + call errore('nf_open: ', err)
  732. do 1, i = 1, NVARS
  733. canConvert = (var_type(i) .eq. NF_CHAR) .eqv.
  734. + (NFT_INT2 .eq. NFT_TEXT)
  735. err = nf_get_var_int2(BAD_ID, i, value)
  736. if (err .ne. NF_EBADID)
  737. + call errore('bad ncid: ', err)
  738. err = nf_get_var_int2(ncid, BAD_VARID, value)
  739. if (err .ne. NF_ENOTVAR)
  740. + call errore('bad var id: ', err)
  741. nels = 1
  742. do 3, j = 1, var_rank(i)
  743. nels = nels * var_shape(j,i)
  744. 3 continue
  745. allInExtRange = .true.
  746. allInIntRange = .true.
  747. do 4, j = 1, var_nels(i)
  748. err = index2indexes(j, var_rank(i), var_shape(1,i),
  749. + index)
  750. if (err .ne. 0)
  751. + call error('error in index2indexes 1')
  752. expect(j) = hash4( var_type(i), var_rank(i), index,
  753. + NFT_INT2 )
  754. if (inRange3(expect(j),var_type(i), NFT_INT2)) then
  755. allInIntRange = allInIntRange .and.
  756. + in_internal_range(NFT_INT2, expect(j))
  757. else
  758. allInExtRange = .false.
  759. end if
  760. 4 continue
  761. err = nf_get_var_int2(ncid, i, value)
  762. if (canConvert) then
  763. if (allInExtRange) then
  764. if (allInIntRange) then
  765. if (err .ne. 0)
  766. + call errore('nf_get_var: ', err)
  767. else
  768. if (err .ne. NF_ERANGE)
  769. + call errore('Range error: ', err)
  770. endif
  771. else
  772. if (err .ne. 0 .and. err .ne. NF_ERANGE)
  773. + call errore('Range error: ', err)
  774. endif
  775. do 5, j = 1, var_nels(i)
  776. if (inRange3(expect(j),var_type(i),
  777. + NFT_INT2) .and.
  778. + in_internal_range(NFT_INT2,
  779. + expect(j))) then
  780. val = value(j)
  781. if (.not. equal(val, expect(j),
  782. + var_type(i),
  783. + NFT_INT2)) then
  784. call errord('unexpected: ', val)
  785. else
  786. nok = nok + 1
  787. end if
  788. endif
  789. 5 continue
  790. else
  791. if (err .ne. NF_ECHAR)
  792. + call errore('wrong type: ', err)
  793. end if
  794. 1 continue
  795. err = nf_close(ncid)
  796. if (err .ne. 0)
  797. + call errore('nf_close: ', err)
  798. call print_nok(nok)
  799. end
  800. #endif
  801. subroutine test_nf_get_var_int()
  802. implicit none
  803. #include "tests.inc"
  804. integer ncid
  805. integer i
  806. integer j
  807. integer err
  808. logical allInExtRange
  809. logical allInIntRange
  810. integer nels
  811. integer nok
  812. integer index(MAX_RANK)
  813. doubleprecision expect(MAX_NELS)
  814. logical canConvert
  815. integer value(MAX_NELS)
  816. doubleprecision val
  817. nok = 0
  818. err = nf_open(testfile, NF_NOWRITE, ncid)
  819. if (err .ne. 0)
  820. + call errore('nf_open: ', err)
  821. do 1, i = 1, NVARS
  822. canConvert = (var_type(i) .eq. NF_CHAR) .eqv.
  823. + (NFT_INT .eq. NFT_TEXT)
  824. err = nf_get_var_int(BAD_ID, i, value)
  825. if (err .ne. NF_EBADID)
  826. + call errore('bad ncid: ', err)
  827. err = nf_get_var_int(ncid, BAD_VARID, value)
  828. if (err .ne. NF_ENOTVAR)
  829. + call errore('bad var id: ', err)
  830. nels = 1
  831. do 3, j = 1, var_rank(i)
  832. nels = nels * var_shape(j,i)
  833. 3 continue
  834. allInExtRange = .true.
  835. allInIntRange = .true.
  836. do 4, j = 1, var_nels(i)
  837. err = index2indexes(j, var_rank(i), var_shape(1,i),
  838. + index)
  839. if (err .ne. 0)
  840. + call error('error in index2indexes 1')
  841. expect(j) = hash4( var_type(i), var_rank(i), index,
  842. + NFT_INT )
  843. if (inRange3(expect(j),var_type(i), NFT_INT)) then
  844. allInIntRange = allInIntRange .and.
  845. + in_internal_range(NFT_INT, expect(j))
  846. else
  847. allInExtRange = .false.
  848. end if
  849. 4 continue
  850. err = nf_get_var_int(ncid, i, value)
  851. if (canConvert) then
  852. if (allInExtRange) then
  853. if (allInIntRange) then
  854. if (err .ne. 0)
  855. + call errore('nf_get_var: ', err)
  856. else
  857. if (err .ne. NF_ERANGE)
  858. + call errore('Range error: ', err)
  859. endif
  860. else
  861. if (err .ne. 0 .and. err .ne. NF_ERANGE)
  862. + call errore('Range error: ', err)
  863. endif
  864. do 5, j = 1, var_nels(i)
  865. if (inRange3(expect(j),var_type(i),
  866. + NFT_INT) .and.
  867. + in_internal_range(NFT_INT,
  868. + expect(j))) then
  869. val = value(j)
  870. if (.not. equal(val, expect(j),
  871. + var_type(i),
  872. + NFT_INT)) then
  873. call errord('unexpected: ', val)
  874. else
  875. nok = nok + 1
  876. end if
  877. endif
  878. 5 continue
  879. else
  880. if (err .ne. NF_ECHAR)
  881. + call errore('wrong type: ', err)
  882. end if
  883. 1 continue
  884. err = nf_close(ncid)
  885. if (err .ne. 0)
  886. + call errore('nf_close: ', err)
  887. call print_nok(nok)
  888. end
  889. subroutine test_nf_get_var_real()
  890. implicit none
  891. #include "tests.inc"
  892. integer ncid
  893. integer i
  894. integer j
  895. integer err
  896. logical allInExtRange
  897. logical allInIntRange
  898. integer nels
  899. integer nok
  900. integer index(MAX_RANK)
  901. doubleprecision expect(MAX_NELS)
  902. logical canConvert
  903. real value(MAX_NELS)
  904. doubleprecision val
  905. nok = 0
  906. err = nf_open(testfile, NF_NOWRITE, ncid)
  907. if (err .ne. 0)
  908. + call errore('nf_open: ', err)
  909. do 1, i = 1, NVARS
  910. canConvert = (var_type(i) .eq. NF_CHAR) .eqv.
  911. + (NFT_REAL .eq. NFT_TEXT)
  912. err = nf_get_var_real(BAD_ID, i, value)
  913. if (err .ne. NF_EBADID)
  914. + call errore('bad ncid: ', err)
  915. err = nf_get_var_real(ncid, BAD_VARID, value)
  916. if (err .ne. NF_ENOTVAR)
  917. + call errore('bad var id: ', err)
  918. nels = 1
  919. do 3, j = 1, var_rank(i)
  920. nels = nels * var_shape(j,i)
  921. 3 continue
  922. allInExtRange = .true.
  923. allInIntRange = .true.
  924. do 4, j = 1, var_nels(i)
  925. err = index2indexes(j, var_rank(i), var_shape(1,i),
  926. + index)
  927. if (err .ne. 0)
  928. + call error('error in index2indexes 1')
  929. expect(j) = hash4( var_type(i), var_rank(i), index,
  930. + NFT_REAL )
  931. if (inRange3(expect(j),var_type(i), NFT_REAL)) then
  932. allInIntRange = allInIntRange .and.
  933. + in_internal_range(NFT_REAL, expect(j))
  934. else
  935. allInExtRange = .false.
  936. end if
  937. 4 continue
  938. err = nf_get_var_real(ncid, i, value)
  939. if (canConvert) then
  940. if (allInExtRange) then
  941. if (allInIntRange) then
  942. if (err .ne. 0)
  943. + call errore('nf_get_var: ', err)
  944. else
  945. if (err .ne. NF_ERANGE)
  946. + call errore('Range error: ', err)
  947. endif
  948. else
  949. if (err .ne. 0 .and. err .ne. NF_ERANGE)
  950. + call errore('Range error: ', err)
  951. endif
  952. do 5, j = 1, var_nels(i)
  953. if (inRange3(expect(j),var_type(i),
  954. + NFT_REAL) .and.
  955. + in_internal_range(NFT_REAL,
  956. + expect(j))) then
  957. val = value(j)
  958. if (.not. equal(val, expect(j),
  959. + var_type(i),
  960. + NFT_REAL)) then
  961. call errord('unexpected: ', val)
  962. else
  963. nok = nok + 1
  964. end if
  965. endif
  966. 5 continue
  967. else
  968. if (err .ne. NF_ECHAR)
  969. + call errore('wrong type: ', err)
  970. end if
  971. 1 continue
  972. err = nf_close(ncid)
  973. if (err .ne. 0)
  974. + call errore('nf_close: ', err)
  975. call print_nok(nok)
  976. end
  977. subroutine test_nf_get_var_double()
  978. implicit none
  979. #include "tests.inc"
  980. integer ncid
  981. integer i
  982. integer j
  983. integer err
  984. logical allInExtRange
  985. logical allInIntRange
  986. integer nels
  987. integer nok
  988. integer index(MAX_RANK)
  989. doubleprecision expect(MAX_NELS)
  990. logical canConvert
  991. doubleprecision value(MAX_NELS)
  992. doubleprecision val
  993. nok = 0
  994. err = nf_open(testfile, NF_NOWRITE, ncid)
  995. if (err .ne. 0)
  996. + call errore('nf_open: ', err)
  997. do 1, i = 1, NVARS
  998. canConvert = (var_type(i) .eq. NF_CHAR) .eqv.
  999. + (NFT_DOUBLE .eq. NFT_TEXT)
  1000. err = nf_get_var_double(BAD_ID, i, value)
  1001. if (err .ne. NF_EBADID)
  1002. + call errore('bad ncid: ', err)
  1003. err = nf_get_var_double(ncid, BAD_VARID, value)
  1004. if (err .ne. NF_ENOTVAR)
  1005. + call errore('bad var id: ', err)
  1006. nels = 1
  1007. do 3, j = 1, var_rank(i)
  1008. nels = nels * var_shape(j,i)
  1009. 3 continue
  1010. allInExtRange = .true.
  1011. allInIntRange = .true.
  1012. do 4, j = 1, var_nels(i)
  1013. err = index2indexes(j, var_rank(i), var_shape(1,i),
  1014. + index)
  1015. if (err .ne. 0)
  1016. + call error('error in index2indexes 1')
  1017. expect(j) = hash4( var_type(i), var_rank(i), index,
  1018. + NFT_DOUBLE )
  1019. if (inRange3(expect(j),var_type(i), NFT_DOUBLE)) then
  1020. allInIntRange = allInIntRange .and.
  1021. + in_internal_range(NFT_DOUBLE, expect(j))
  1022. else
  1023. allInExtRange = .false.
  1024. end if
  1025. 4 continue
  1026. err = nf_get_var_double(ncid, i, value)
  1027. if (canConvert) then
  1028. if (allInExtRange) then
  1029. if (allInIntRange) then
  1030. if (err .ne. 0)
  1031. + call errore('nf_get_var: ', err)
  1032. else
  1033. if (err .ne. NF_ERANGE)
  1034. + call errore('Range error: ', err)
  1035. endif
  1036. else
  1037. if (err .ne. 0 .and. err .ne. NF_ERANGE)
  1038. + call errore('Range error: ', err)
  1039. endif
  1040. do 5, j = 1, var_nels(i)
  1041. if (inRange3(expect(j),var_type(i),
  1042. + NFT_DOUBLE) .and.
  1043. + in_internal_range(NFT_DOUBLE,
  1044. + expect(j))) then
  1045. val = value(j)
  1046. if (.not. equal(val, expect(j),
  1047. + var_type(i),
  1048. + NFT_DOUBLE)) then
  1049. call errord('unexpected: ', val)
  1050. else
  1051. nok = nok + 1
  1052. end if
  1053. endif
  1054. 5 continue
  1055. else
  1056. if (err .ne. NF_ECHAR)
  1057. + call errore('wrong type: ', err)
  1058. end if
  1059. 1 continue
  1060. err = nf_close(ncid)
  1061. if (err .ne. 0)
  1062. + call errore('nf_close: ', err)
  1063. call print_nok(nok)
  1064. end
  1065. subroutine test_nf_get_vara_text()
  1066. implicit none
  1067. #include "tests.inc"
  1068. integer ncid
  1069. integer d
  1070. integer i
  1071. integer j
  1072. integer k
  1073. integer err
  1074. logical allInExtRange
  1075. logical allInIntRange
  1076. integer nels
  1077. integer nslabs
  1078. integer nok
  1079. integer start(MAX_RANK)
  1080. integer edge(MAX_RANK)
  1081. integer index(MAX_RANK)
  1082. integer mid(MAX_RANK)
  1083. logical canConvert
  1084. character value(MAX_NELS)
  1085. doubleprecision expect(MAX_NELS)
  1086. doubleprecision val
  1087. integer udshift
  1088. nok = 0
  1089. err = nf_open(testfile, NF_NOWRITE, ncid)
  1090. if (err .ne. 0)
  1091. + call errore('nf_open: ', err)
  1092. do 1, i = 1, NVARS
  1093. canConvert = (var_type(i) .eq. NF_CHAR) .eqv.
  1094. + (NFT_TEXT .eq. NFT_TEXT)
  1095. if (.not.(var_rank(i) .le. MAX_RANK)) stop 'assert'
  1096. if (.not.(var_nels(i) .le. MAX_NELS)) stop 'assert'
  1097. do 2, j = 1, var_rank(i)
  1098. start(j) = 1
  1099. edge(j) = 1
  1100. 2 continue
  1101. err = nf_get_vara_text(BAD_ID, i, start,
  1102. + edge, value)
  1103. if (err .ne. NF_EBADID)
  1104. + call errore('bad ncid: ', err)
  1105. err = nf_get_vara_text(ncid, BAD_VARID, start,
  1106. + edge, value)
  1107. if (err .ne. NF_ENOTVAR)
  1108. + call errore('bad var id: ', err)
  1109. do 3, j = 1, var_rank(i)
  1110. start(j) = var_shape(j,i) + 1
  1111. err = nf_get_vara_text(ncid, i, start,
  1112. + edge, value)
  1113. if (canConvert .and. err .ne. NF_EINVALCOORDS)
  1114. + call errore('bad index: ', err)
  1115. start(j) = 1
  1116. edge(j) = var_shape(j,i) + 1
  1117. err = nf_get_vara_text(ncid, i, start,
  1118. + edge, value)
  1119. if (canConvert .and. err .ne. NF_EEDGE)
  1120. + call errore('bad edge: ', err)
  1121. edge(j) = 1
  1122. 3 continue
  1123. C /* Check non-scalars for correct error returned even when */
  1124. C /* there is nothing to get (edge(j).eq.0) */
  1125. if (var_rank(i) .gt. 0) then
  1126. do 10, j = 1, var_rank(i)
  1127. edge(j) = 0
  1128. 10 continue
  1129. err = nf_get_vara_text(BAD_ID, i, start,
  1130. + edge, value)
  1131. if (err .ne. NF_EBADID)
  1132. + call errore('bad ncid: ', err)
  1133. err = nf_get_vara_text(ncid, BAD_VARID,
  1134. + start, edge, value)
  1135. if (err .ne. NF_ENOTVAR)
  1136. + call errore('bad var id: ', err)
  1137. do 11, j = 1, var_rank(i)
  1138. if (var_dimid(j,i) .gt. 1) then !/* skip record dim */
  1139. start(j) = var_shape(j,i) + 1
  1140. err = nf_get_vara_text(ncid, i,
  1141. + start, edge, value)
  1142. if (canConvert .and. err .ne. NF_EINVALCOORDS)
  1143. + call errore('bad start: ', err)
  1144. start(j) = 1
  1145. endif
  1146. 11 continue
  1147. err = nf_get_vara_text(ncid, i, start,
  1148. + edge, value)
  1149. if (canConvert) then
  1150. if (err .ne. 0)
  1151. + call error(nf_strerror(err))
  1152. else
  1153. if (err .ne. NF_ECHAR)
  1154. + call errore('wrong type: ', err)
  1155. endif
  1156. do 12, j = 1, var_rank(i)
  1157. edge(j) = 1
  1158. 12 continue
  1159. endif
  1160. C Choose a random point dividing each dim into 2 parts
  1161. C get 2^rank (nslabs) slabs so defined
  1162. nslabs = 1
  1163. do 4, j = 1, var_rank(i)
  1164. mid(j) = roll( var_shape(j,i) )
  1165. nslabs = nslabs * 2
  1166. 4 continue
  1167. C bits of k determine whether to get lower or upper part of dim
  1168. do 5, k = 1, nslabs
  1169. nels = 1
  1170. do 6, j = 1, var_rank(i)
  1171. if (mod(udshift((k-1), -(j-1)), 2) .eq. 1) then
  1172. start(j) = 1
  1173. edge(j) = mid(j)
  1174. else
  1175. start(j) = 1 + mid(j)
  1176. edge(j) = var_shape(j,i) - mid(j)
  1177. end if
  1178. nels = nels * edge(j)
  1179. 6 continue
  1180. allInIntRange = .true.
  1181. allInExtRange = .true.
  1182. do 7, j = 1, nels
  1183. err = index2indexes(j, var_rank(i), edge, index)
  1184. if (err .ne. 0)
  1185. + call error('error in index2indexes 1')
  1186. do 8, d = 1, var_rank(i)
  1187. index(d) = index(d) + start(d) - 1
  1188. 8 continue
  1189. expect(j) = hash4(var_type(i), var_rank(i), index,
  1190. + NFT_TEXT)
  1191. if (inRange3(expect(j),var_type(i),
  1192. + NFT_TEXT)) then
  1193. allInIntRange =
  1194. + allInIntRange .and.
  1195. + in_internal_range(NFT_TEXT, expect(j))
  1196. else
  1197. allInExtRange = .false.
  1198. end if
  1199. 7 continue
  1200. err = nf_get_vara_text(ncid, i, start,
  1201. + edge, value)
  1202. if (canConvert) then
  1203. if (allInExtRange) then
  1204. if (allInIntRange) then
  1205. if (err .ne. 0)
  1206. + call errore('nf_get_vara_text:', err)
  1207. else
  1208. if (err .ne. NF_ERANGE)
  1209. + call errore('Range error: ', err)
  1210. end if
  1211. else
  1212. if (err .ne. 0 .and. err .ne. NF_ERANGE)
  1213. + call errore('OK or Range error: ', err)
  1214. end if
  1215. do 9, j = 1, nels
  1216. if (inRange3(expect(j),var_type(i),
  1217. + NFT_TEXT) .and.
  1218. + in_internal_range(NFT_TEXT, expect(j)))
  1219. + then
  1220. val = ichar(value(j))
  1221. if (.not.equal(val,expect(j),
  1222. + var_type(i),NFT_TEXT))
  1223. + then
  1224. call error(
  1225. + 'value read not that expected')
  1226. if (verbose) then
  1227. call error(' ')
  1228. call errori('varid: ', i)
  1229. call errorc('var_name: ',
  1230. + var_name(i))
  1231. call errori('element number: %d ',
  1232. + j)
  1233. call errord('expect: ', expect(j))
  1234. call errord('got: ', val)
  1235. end if
  1236. else
  1237. nok = nok + 1
  1238. end if
  1239. end if
  1240. 9 continue
  1241. else
  1242. if (nels .gt. 0 .and. err .ne. NF_ECHAR)
  1243. + call errore('wrong type: ', err)
  1244. end if
  1245. 5 continue
  1246. 1 continue
  1247. err = nf_close(ncid)
  1248. if (err .ne. 0)
  1249. + call errorc('nf_close: ', nf_strerror(err))
  1250. call print_nok(nok)
  1251. end
  1252. #ifdef NF_INT1_T
  1253. subroutine test_nf_get_vara_int1()
  1254. implicit none
  1255. #include "tests.inc"
  1256. integer ncid
  1257. integer d
  1258. integer i
  1259. integer j
  1260. integer k
  1261. integer err
  1262. logical allInExtRange
  1263. logical allInIntRange
  1264. integer nels
  1265. integer nslabs
  1266. integer nok
  1267. integer start(MAX_RANK)
  1268. integer edge(MAX_RANK)
  1269. integer index(MAX_RANK)
  1270. integer mid(MAX_RANK)
  1271. logical canConvert
  1272. NF_INT1_T value(MAX_NELS)
  1273. doubleprecision expect(MAX_NELS)
  1274. doubleprecision val
  1275. integer udshift
  1276. nok = 0
  1277. err = nf_open(testfile, NF_NOWRITE, ncid)
  1278. if (err .ne. 0)
  1279. + call errore('nf_open: ', err)
  1280. do 1, i = 1, NVARS
  1281. canConvert = (var_type(i) .eq. NF_CHAR) .eqv.
  1282. + (NFT_INT1 .eq. NFT_TEXT)
  1283. if (.not.(var_rank(i) .le. MAX_RANK)) stop 'assert'
  1284. if (.not.(var_nels(i) .le. MAX_NELS)) stop 'assert'
  1285. do 2, j = 1, var_rank(i)
  1286. start(j) = 1
  1287. edge(j) = 1
  1288. 2 continue
  1289. err = nf_get_vara_int1(BAD_ID, i, start,
  1290. + edge, value)
  1291. if (err .ne. NF_EBADID)
  1292. + call errore('bad ncid: ', err)
  1293. err = nf_get_vara_int1(ncid, BAD_VARID, start,
  1294. + edge, value)
  1295. if (err .ne. NF_ENOTVAR)
  1296. + call errore('bad var id: ', err)
  1297. do 3, j = 1, var_rank(i)
  1298. start(j) = var_shape(j,i) + 1
  1299. err = nf_get_vara_int1(ncid, i, start,
  1300. + edge, value)
  1301. if (canConvert .and. err .ne. NF_EINVALCOORDS)
  1302. + call errore('bad index: ', err)
  1303. start(j) = 1
  1304. edge(j) = var_shape(j,i) + 1
  1305. err = nf_get_vara_int1(ncid, i, start,
  1306. + edge, value)
  1307. if (canConvert .and. err .ne. NF_EEDGE)
  1308. + call errore('bad edge: ', err)
  1309. edge(j) = 1
  1310. 3 continue
  1311. C /* Check non-scalars for correct error returned even when */
  1312. C /* there is nothing to get (edge(j).eq.0) */
  1313. if (var_rank(i) .gt. 0) then
  1314. do 10, j = 1, var_rank(i)
  1315. edge(j) = 0
  1316. 10 continue
  1317. err = nf_get_vara_int1(BAD_ID, i, start,
  1318. + edge, value)
  1319. if (err .ne. NF_EBADID)
  1320. + call errore('bad ncid: ', err)
  1321. err = nf_get_vara_int1(ncid, BAD_VARID,
  1322. + start, edge, value)
  1323. if (err .ne. NF_ENOTVAR)
  1324. + call errore('bad var id: ', err)
  1325. do 11, j = 1, var_rank(i)
  1326. if (var_dimid(j,i) .gt. 1) then !/* skip record dim */
  1327. start(j) = var_shape(j,i) + 1
  1328. err = nf_get_vara_int1(ncid, i,
  1329. + start, edge, value)
  1330. if (canConvert .and. err .ne. NF_EINVALCOORDS)
  1331. + call errore('bad start: ', err)
  1332. start(j) = 1
  1333. endif
  1334. 11 continue
  1335. err = nf_get_vara_int1(ncid, i, start,
  1336. + edge, value)
  1337. if (canConvert) then
  1338. if (err .ne. 0)
  1339. + call error(nf_strerror(err))
  1340. else
  1341. if (err .ne. NF_ECHAR)
  1342. + call errore('wrong type: ', err)
  1343. endif
  1344. do 12, j = 1, var_rank(i)
  1345. edge(j) = 1
  1346. 12 continue
  1347. endif
  1348. C Choose a random point dividing each dim into 2 parts
  1349. C get 2^rank (nslabs) slabs so defined
  1350. nslabs = 1
  1351. do 4, j = 1, var_rank(i)
  1352. mid(j) = roll( var_shape(j,i) )
  1353. nslabs = nslabs * 2
  1354. 4 continue
  1355. C bits of k determine whether to get lower or upper part of dim
  1356. do 5, k = 1, nslabs
  1357. nels = 1
  1358. do 6, j = 1, var_rank(i)
  1359. if (mod(udshift((k-1), -(j-1)), 2) .eq. 1) then
  1360. start(j) = 1
  1361. edge(j) = mid(j)
  1362. else
  1363. start(j) = 1 + mid(j)
  1364. edge(j) = var_shape(j,i) - mid(j)
  1365. end if
  1366. nels = nels * edge(j)
  1367. 6 continue
  1368. allInIntRange = .true.
  1369. allInExtRange = .true.
  1370. do 7, j = 1, nels
  1371. err = index2indexes(j, var_rank(i), edge, index)
  1372. if (err .ne. 0)
  1373. + call error('error in index2indexes 1')
  1374. do 8, d = 1, var_rank(i)
  1375. index(d) = index(d) + start(d) - 1
  1376. 8 continue
  1377. expect(j) = hash4(var_type(i), var_rank(i), index,
  1378. + NFT_INT1)
  1379. if (inRange3(expect(j),var_type(i),
  1380. + NFT_INT1)) then
  1381. allInIntRange =
  1382. + allInIntRange .and.
  1383. + in_internal_range(NFT_INT1, expect(j))
  1384. else
  1385. allInExtRange = .false.
  1386. end if
  1387. 7 continue
  1388. err = nf_get_vara_int1(ncid, i, start,
  1389. + edge, value)
  1390. if (canConvert) then
  1391. if (allInExtRange) then
  1392. if (allInIntRange) then
  1393. if (err .ne. 0)
  1394. + call errore('nf_get_vara_int1:', err)
  1395. else
  1396. if (err .ne. NF_ERANGE)
  1397. + call errore('Range error: ', err)
  1398. end if
  1399. else
  1400. if (err .ne. 0 .and. err .ne. NF_ERANGE)
  1401. + call errore('OK or Range error: ', err)
  1402. end if
  1403. do 9, j = 1, nels
  1404. if (inRange3(expect(j),var_type(i),
  1405. + NFT_INT1) .and.
  1406. + in_internal_range(NFT_INT1, expect(j)))
  1407. + then
  1408. val = value(j)
  1409. if (.not.equal(val,expect(j),
  1410. + var_type(i),NFT_INT1))
  1411. + then
  1412. call error(
  1413. + 'value read not that expected')
  1414. if (verbose) then
  1415. call error(' ')
  1416. call errori('varid: ', i)
  1417. call errorc('var_name: ',
  1418. + var_name(i))
  1419. call errori('element number: %d ',
  1420. + j)
  1421. call errord('expect: ', expect(j))
  1422. call errord('got: ', val)
  1423. end if
  1424. else
  1425. nok = nok + 1
  1426. end if
  1427. end if
  1428. 9 continue
  1429. else
  1430. if (nels .gt. 0 .and. err .ne. NF_ECHAR)
  1431. + call errore('wrong type: ', err)
  1432. end if
  1433. 5 continue
  1434. 1 continue
  1435. err = nf_close(ncid)
  1436. if (err .ne. 0)
  1437. + call errorc('nf_close: ', nf_strerror(err))
  1438. call print_nok(nok)
  1439. end
  1440. #endif
  1441. #ifdef NF_INT2_T
  1442. subroutine test_nf_get_vara_int2()
  1443. implicit none
  1444. #include "tests.inc"
  1445. integer ncid
  1446. integer d
  1447. integer i
  1448. integer j
  1449. integer k
  1450. integer err
  1451. logical allInExtRange
  1452. logical allInIntRange
  1453. integer nels
  1454. integer nslabs
  1455. integer nok
  1456. integer start(MAX_RANK)
  1457. integer edge(MAX_RANK)
  1458. integer index(MAX_RANK)
  1459. integer mid(MAX_RANK)
  1460. logical canConvert
  1461. NF_INT2_T value(MAX_NELS)
  1462. doubleprecision expect(MAX_NELS)
  1463. doubleprecision val
  1464. integer udshift
  1465. nok = 0
  1466. err = nf_open(testfile, NF_NOWRITE, ncid)
  1467. if (err .ne. 0)
  1468. + call errore('nf_open: ', err)
  1469. do 1, i = 1, NVARS
  1470. canConvert = (var_type(i) .eq. NF_CHAR) .eqv.
  1471. + (NFT_INT2 .eq. NFT_TEXT)
  1472. if (.not.(var_rank(i) .le. MAX_RANK)) stop 'assert'
  1473. if (.not.(var_nels(i) .le. MAX_NELS)) stop 'assert'
  1474. do 2, j = 1, var_rank(i)
  1475. start(j) = 1
  1476. edge(j) = 1
  1477. 2 continue
  1478. err = nf_get_vara_int2(BAD_ID, i, start,
  1479. + edge, value)
  1480. if (err .ne. NF_EBADID)
  1481. + call errore('bad ncid: ', err)
  1482. err = nf_get_vara_int2(ncid, BAD_VARID, start,
  1483. + edge, value)
  1484. if (err .ne. NF_ENOTVAR)
  1485. + call errore('bad var id: ', err)
  1486. do 3, j = 1, var_rank(i)
  1487. start(j) = var_shape(j,i) + 1
  1488. err = nf_get_vara_int2(ncid, i, start,
  1489. + edge, value)
  1490. if (canConvert .and. err .ne. NF_EINVALCOORDS)
  1491. + call errore('bad index: ', err)
  1492. start(j) = 1
  1493. edge(j) = var_shape(j,i) + 1
  1494. err = nf_get_vara_int2(ncid, i, start,
  1495. + edge, value)
  1496. if (canConvert .and. err .ne. NF_EEDGE)
  1497. + call errore('bad edge: ', err)
  1498. edge(j) = 1
  1499. 3 continue
  1500. C /* Check non-scalars for correct error returned even when */
  1501. C /* there is nothing to get (edge(j).eq.0) */
  1502. if (var_rank(i) .gt. 0) then
  1503. do 10, j = 1, var_rank(i)
  1504. edge(j) = 0
  1505. 10 continue
  1506. err = nf_get_vara_int2(BAD_ID, i, start,
  1507. + edge, value)
  1508. if (err .ne. NF_EBADID)
  1509. + call errore('bad ncid: ', err)
  1510. err = nf_get_vara_int2(ncid, BAD_VARID,
  1511. + start, edge, value)
  1512. if (err .ne. NF_ENOTVAR)
  1513. + call errore('bad var id: ', err)
  1514. do 11, j = 1, var_rank(i)
  1515. if (var_dimid(j,i) .gt. 1) then !/* skip record dim */
  1516. start(j) = var_shape(j,i) + 1
  1517. err = nf_get_vara_int2(ncid, i,
  1518. + start, edge, value)
  1519. if (canConvert .and. err .ne. NF_EINVALCOORDS)
  1520. + call errore('bad start: ', err)
  1521. start(j) = 1
  1522. endif
  1523. 11 continue
  1524. err = nf_get_vara_int2(ncid, i, start,
  1525. + edge, value)
  1526. if (canConvert) then
  1527. if (err .ne. 0)
  1528. + call error(nf_strerror(err))
  1529. else
  1530. if (err .ne. NF_ECHAR)
  1531. + call errore('wrong type: ', err)
  1532. endif
  1533. do 12, j = 1, var_rank(i)
  1534. edge(j) = 1
  1535. 12 continue
  1536. endif
  1537. C Choose a random point dividing each dim into 2 parts
  1538. C get 2^rank (nslabs) slabs so defined
  1539. nslabs = 1
  1540. do 4, j = 1, var_rank(i)
  1541. mid(j) = roll( var_shape(j,i) )
  1542. nslabs = nslabs * 2
  1543. 4 continue
  1544. C bits of k determine whether to get lower or upper part of dim
  1545. do 5, k = 1, nslabs
  1546. nels = 1
  1547. do 6, j = 1, var_rank(i)
  1548. if (mod(udshift((k-1), -(j-1)), 2) .eq. 1) then
  1549. start(j) = 1
  1550. edge(j) = mid(j)
  1551. else
  1552. start(j) = 1 + mid(j)
  1553. edge(j) = var_shape(j,i) - mid(j)
  1554. end if
  1555. nels = nels * edge(j)
  1556. 6 continue
  1557. allInIntRange = .true.
  1558. allInExtRange = .true.
  1559. do 7, j = 1, nels
  1560. err = index2indexes(j, var_rank(i), edge, index)
  1561. if (err .ne. 0)
  1562. + call error('error in index2indexes 1')
  1563. do 8, d = 1, var_rank(i)
  1564. index(d) = index(d) + start(d) - 1
  1565. 8 continue
  1566. expect(j) = hash4(var_type(i), var_rank(i), index,
  1567. + NFT_INT2)
  1568. if (inRange3(expect(j),var_type(i),
  1569. + NFT_INT2)) then
  1570. allInIntRange =
  1571. + allInIntRange .and.
  1572. + in_internal_range(NFT_INT2, expect(j))
  1573. else
  1574. allInExtRange = .false.
  1575. end if
  1576. 7 continue
  1577. err = nf_get_vara_int2(ncid, i, start,
  1578. + edge, value)
  1579. if (canConvert) then
  1580. if (allInExtRange) then
  1581. if (allInIntRange) then
  1582. if (err .ne. 0)
  1583. + call errore('nf_get_vara_int2:', err)
  1584. else
  1585. if (err .ne. NF_ERANGE)
  1586. + call errore('Range error: ', err)
  1587. end if
  1588. else
  1589. if (err .ne. 0 .and. err .ne. NF_ERANGE)
  1590. + call errore('OK or Range error: ', err)
  1591. end if
  1592. do 9, j = 1, nels
  1593. if (inRange3(expect(j),var_type(i),
  1594. + NFT_INT2) .and.
  1595. + in_internal_range(NFT_INT2, expect(j)))
  1596. + then
  1597. val = value(j)
  1598. if (.not.equal(val,expect(j),
  1599. + var_type(i),NFT_INT2))
  1600. + then
  1601. call error(
  1602. + 'value read not that expected')
  1603. if (verbose) then
  1604. call error(' ')
  1605. call errori('varid: ', i)
  1606. call errorc('var_name: ',
  1607. + var_name(i))
  1608. call errori('element number: %d ',
  1609. + j)
  1610. call errord('expect: ', expect(j))
  1611. call errord('got: ', val)
  1612. end if
  1613. else
  1614. nok = nok + 1
  1615. end if
  1616. end if
  1617. 9 continue
  1618. else
  1619. if (nels .gt. 0 .and. err .ne. NF_ECHAR)
  1620. + call errore('wrong type: ', err)
  1621. end if
  1622. 5 continue
  1623. 1 continue
  1624. err = nf_close(ncid)
  1625. if (err .ne. 0)
  1626. + call errorc('nf_close: ', nf_strerror(err))
  1627. call print_nok(nok)
  1628. end
  1629. #endif
  1630. subroutine test_nf_get_vara_int()
  1631. implicit none
  1632. #include "tests.inc"
  1633. integer ncid
  1634. integer d
  1635. integer i
  1636. integer j
  1637. integer k
  1638. integer err
  1639. logical allInExtRange
  1640. logical allInIntRange
  1641. integer nels
  1642. integer nslabs
  1643. integer nok
  1644. integer start(MAX_RANK)
  1645. integer edge(MAX_RANK)
  1646. integer index(MAX_RANK)
  1647. integer mid(MAX_RANK)
  1648. logical canConvert
  1649. integer value(MAX_NELS)
  1650. doubleprecision expect(MAX_NELS)
  1651. doubleprecision val
  1652. integer udshift
  1653. nok = 0
  1654. err = nf_open(testfile, NF_NOWRITE, ncid)
  1655. if (err .ne. 0)
  1656. + call errore('nf_open: ', err)
  1657. do 1, i = 1, NVARS
  1658. canConvert = (var_type(i) .eq. NF_CHAR) .eqv.
  1659. + (NFT_INT .eq. NFT_TEXT)
  1660. if (.not.(var_rank(i) .le. MAX_RANK)) stop 'assert'
  1661. if (.not.(var_nels(i) .le. MAX_NELS)) stop 'assert'
  1662. do 2, j = 1, var_rank(i)
  1663. start(j) = 1
  1664. edge(j) = 1
  1665. 2 continue
  1666. err = nf_get_vara_int(BAD_ID, i, start,
  1667. + edge, value)
  1668. if (err .ne. NF_EBADID)
  1669. + call errore('bad ncid: ', err)
  1670. err = nf_get_vara_int(ncid, BAD_VARID, start,
  1671. + edge, value)
  1672. if (err .ne. NF_ENOTVAR)
  1673. + call errore('bad var id: ', err)
  1674. do 3, j = 1, var_rank(i)
  1675. start(j) = var_shape(j,i) + 1
  1676. err = nf_get_vara_int(ncid, i, start,
  1677. + edge, value)
  1678. if (canConvert .and. err .ne. NF_EINVALCOORDS)
  1679. + call errore('bad index: ', err)
  1680. start(j) = 1
  1681. edge(j) = var_shape(j,i) + 1
  1682. err = nf_get_vara_int(ncid, i, start,
  1683. + edge, value)
  1684. if (canConvert .and. err .ne. NF_EEDGE)
  1685. + call errore('bad edge: ', err)
  1686. edge(j) = 1
  1687. 3 continue
  1688. C /* Check non-scalars for correct error returned even when */
  1689. C /* there is nothing to get (edge(j).eq.0) */
  1690. if (var_rank(i) .gt. 0) then
  1691. do 10, j = 1, var_rank(i)
  1692. edge(j) = 0
  1693. 10 continue
  1694. err = nf_get_vara_int(BAD_ID, i, start,
  1695. + edge, value)
  1696. if (err .ne. NF_EBADID)
  1697. + call errore('bad ncid: ', err)
  1698. err = nf_get_vara_int(ncid, BAD_VARID,
  1699. + start, edge, value)
  1700. if (err .ne. NF_ENOTVAR)
  1701. + call errore('bad var id: ', err)
  1702. do 11, j = 1, var_rank(i)
  1703. if (var_dimid(j,i) .gt. 1) then !/* skip record dim */
  1704. start(j) = var_shape(j,i) + 1
  1705. err = nf_get_vara_int(ncid, i,
  1706. + start, edge, value)
  1707. if (canConvert .and. err .ne. NF_EINVALCOORDS)
  1708. + call errore('bad start: ', err)
  1709. start(j) = 1
  1710. endif
  1711. 11 continue
  1712. err = nf_get_vara_int(ncid, i, start,
  1713. + edge, value)
  1714. if (canConvert) then
  1715. if (err .ne. 0)
  1716. + call error(nf_strerror(err))
  1717. else
  1718. if (err .ne. NF_ECHAR)
  1719. + call errore('wrong type: ', err)
  1720. endif
  1721. do 12, j = 1, var_rank(i)
  1722. edge(j) = 1
  1723. 12 continue
  1724. endif
  1725. C Choose a random point dividing each dim into 2 parts
  1726. C get 2^rank (nslabs) slabs so defined
  1727. nslabs = 1
  1728. do 4, j = 1, var_rank(i)
  1729. mid(j) = roll( var_shape(j,i) )
  1730. nslabs = nslabs * 2
  1731. 4 continue
  1732. C bits of k determine whether to get lower or upper part of dim
  1733. do 5, k = 1, nslabs
  1734. nels = 1
  1735. do 6, j = 1, var_rank(i)
  1736. if (mod(udshift((k-1), -(j-1)), 2) .eq. 1) then
  1737. start(j) = 1
  1738. edge(j) = mid(j)
  1739. else
  1740. start(j) = 1 + mid(j)
  1741. edge(j) = var_shape(j,i) - mid(j)
  1742. end if
  1743. nels = nels * edge(j)
  1744. 6 continue
  1745. allInIntRange = .true.
  1746. allInExtRange = .true.
  1747. do 7, j = 1, nels
  1748. err = index2indexes(j, var_rank(i), edge, index)
  1749. if (err .ne. 0)
  1750. + call error('error in index2indexes 1')
  1751. do 8, d = 1, var_rank(i)
  1752. index(d) = index(d) + start(d) - 1
  1753. 8 continue
  1754. expect(j) = hash4(var_type(i), var_rank(i), index,
  1755. + NFT_INT)
  1756. if (inRange3(expect(j),var_type(i),
  1757. + NFT_INT)) then
  1758. allInIntRange =
  1759. + allInIntRange .and.
  1760. + in_internal_range(NFT_INT, expect(j))
  1761. else
  1762. allInExtRange = .false.
  1763. end if
  1764. 7 continue
  1765. err = nf_get_vara_int(ncid, i, start,
  1766. + edge, value)
  1767. if (canConvert) then
  1768. if (allInExtRange) then
  1769. if (allInIntRange) then
  1770. if (err .ne. 0)
  1771. + call errore('nf_get_vara_int:', err)
  1772. else
  1773. if (err .ne. NF_ERANGE)
  1774. + call errore('Range error: ', err)
  1775. end if
  1776. else
  1777. if (err .ne. 0 .and. err .ne. NF_ERANGE)
  1778. + call errore('OK or Range error: ', err)
  1779. end if
  1780. do 9, j = 1, nels
  1781. if (inRange3(expect(j),var_type(i),
  1782. + NFT_INT) .and.
  1783. + in_internal_range(NFT_INT, expect(j)))
  1784. + then
  1785. val = value(j)
  1786. if (.not.equal(val,expect(j),
  1787. + var_type(i),NFT_INT))
  1788. + then
  1789. call error(
  1790. + 'value read not that expected')
  1791. if (verbose) then
  1792. call error(' ')
  1793. call errori('varid: ', i)
  1794. call errorc('var_name: ',
  1795. + var_name(i))
  1796. call errori('element number: %d ',
  1797. + j)
  1798. call errord('expect: ', expect(j))
  1799. call errord('got: ', val)
  1800. end if
  1801. else
  1802. nok = nok + 1
  1803. end if
  1804. end if
  1805. 9 continue
  1806. else
  1807. if (nels .gt. 0 .and. err .ne. NF_ECHAR)
  1808. + call errore('wrong type: ', err)
  1809. end if
  1810. 5 continue
  1811. 1 continue
  1812. err = nf_close(ncid)
  1813. if (err .ne. 0)
  1814. + call errorc('nf_close: ', nf_strerror(err))
  1815. call print_nok(nok)
  1816. end
  1817. subroutine test_nf_get_vara_real()
  1818. implicit none
  1819. #include "tests.inc"
  1820. integer ncid
  1821. integer d
  1822. integer i
  1823. integer j
  1824. integer k
  1825. integer err
  1826. logical allInExtRange
  1827. logical allInIntRange
  1828. integer nels
  1829. integer nslabs
  1830. integer nok
  1831. integer start(MAX_RANK)
  1832. integer edge(MAX_RANK)
  1833. integer index(MAX_RANK)
  1834. integer mid(MAX_RANK)
  1835. logical canConvert
  1836. real value(MAX_NELS)
  1837. doubleprecision expect(MAX_NELS)
  1838. doubleprecision val
  1839. integer udshift
  1840. nok = 0
  1841. err = nf_open(testfile, NF_NOWRITE, ncid)
  1842. if (err .ne. 0)
  1843. + call errore('nf_open: ', err)
  1844. do 1, i = 1, NVARS
  1845. canConvert = (var_type(i) .eq. NF_CHAR) .eqv.
  1846. + (NFT_REAL .eq. NFT_TEXT)
  1847. if (.not.(var_rank(i) .le. MAX_RANK)) stop 'assert'
  1848. if (.not.(var_nels(i) .le. MAX_NELS)) stop 'assert'
  1849. do 2, j = 1, var_rank(i)
  1850. start(j) = 1
  1851. edge(j) = 1
  1852. 2 continue
  1853. err = nf_get_vara_real(BAD_ID, i, start,
  1854. + edge, value)
  1855. if (err .ne. NF_EBADID)
  1856. + call errore('bad ncid: ', err)
  1857. err = nf_get_vara_real(ncid, BAD_VARID, start,
  1858. + edge, value)
  1859. if (err .ne. NF_ENOTVAR)
  1860. + call errore('bad var id: ', err)
  1861. do 3, j = 1, var_rank(i)
  1862. start(j) = var_shape(j,i) + 1
  1863. err = nf_get_vara_real(ncid, i, start,
  1864. + edge, value)
  1865. if (canConvert .and. err .ne. NF_EINVALCOORDS)
  1866. + call errore('bad index: ', err)
  1867. start(j) = 1
  1868. edge(j) = var_shape(j,i) + 1
  1869. err = nf_get_vara_real(ncid, i, start,
  1870. + edge, value)
  1871. if (canConvert .and. err .ne. NF_EEDGE)
  1872. + call errore('bad edge: ', err)
  1873. edge(j) = 1
  1874. 3 continue
  1875. C /* Check non-scalars for correct error returned even when */
  1876. C /* there is nothing to get (edge(j).eq.0) */
  1877. if (var_rank(i) .gt. 0) then
  1878. do 10, j = 1, var_rank(i)
  1879. edge(j) = 0
  1880. 10 continue
  1881. err = nf_get_vara_real(BAD_ID, i, start,
  1882. + edge, value)
  1883. if (err .ne. NF_EBADID)
  1884. + call errore('bad ncid: ', err)
  1885. err = nf_get_vara_real(ncid, BAD_VARID,
  1886. + start, edge, value)
  1887. if (err .ne. NF_ENOTVAR)
  1888. + call errore('bad var id: ', err)
  1889. do 11, j = 1, var_rank(i)
  1890. if (var_dimid(j,i) .gt. 1) then !/* skip record dim */
  1891. start(j) = var_shape(j,i) + 1
  1892. err = nf_get_vara_real(ncid, i,
  1893. + start, edge, value)
  1894. if (canConvert .and. err .ne. NF_EINVALCOORDS)
  1895. + call errore('bad start: ', err)
  1896. start(j) = 1
  1897. endif
  1898. 11 continue
  1899. err = nf_get_vara_real(ncid, i, start,
  1900. + edge, value)
  1901. if (canConvert) then
  1902. if (err .ne. 0)
  1903. + call error(nf_strerror(err))
  1904. else
  1905. if (err .ne. NF_ECHAR)
  1906. + call errore('wrong type: ', err)
  1907. endif
  1908. do 12, j = 1, var_rank(i)
  1909. edge(j) = 1
  1910. 12 continue
  1911. endif
  1912. C Choose a random point dividing each dim into 2 parts
  1913. C get 2^rank (nslabs) slabs so defined
  1914. nslabs = 1
  1915. do 4, j = 1, var_rank(i)
  1916. mid(j) = roll( var_shape(j,i) )
  1917. nslabs = nslabs * 2
  1918. 4 continue
  1919. C bits of k determine whether to get lower or upper part of dim
  1920. do 5, k = 1, nslabs
  1921. nels = 1
  1922. do 6, j = 1, var_rank(i)
  1923. if (mod(udshift((k-1), -(j-1)), 2) .eq. 1) then
  1924. start(j) = 1
  1925. edge(j) = mid(j)
  1926. else
  1927. start(j) = 1 + mid(j)
  1928. edge(j) = var_shape(j,i) - mid(j)
  1929. end if
  1930. nels = nels * edge(j)
  1931. 6 continue
  1932. allInIntRange = .true.
  1933. allInExtRange = .true.
  1934. do 7, j = 1, nels
  1935. err = index2indexes(j, var_rank(i), edge, index)
  1936. if (err .ne. 0)
  1937. + call error('error in index2indexes 1')
  1938. do 8, d = 1, var_rank(i)
  1939. index(d) = index(d) + start(d) - 1
  1940. 8 continue
  1941. expect(j) = hash4(var_type(i), var_rank(i), index,
  1942. + NFT_REAL)
  1943. if (inRange3(expect(j),var_type(i),
  1944. + NFT_REAL)) then
  1945. allInIntRange =
  1946. + allInIntRange .and.
  1947. + in_internal_range(NFT_REAL, expect(j))
  1948. else
  1949. allInExtRange = .false.
  1950. end if
  1951. 7 continue
  1952. err = nf_get_vara_real(ncid, i, start,
  1953. + edge, value)
  1954. if (canConvert) then
  1955. if (allInExtRange) then
  1956. if (allInIntRange) then
  1957. if (err .ne. 0)
  1958. + call errore('nf_get_vara_real:', err)
  1959. else
  1960. if (err .ne. NF_ERANGE)
  1961. + call errore('Range error: ', err)
  1962. end if
  1963. else
  1964. if (err .ne. 0 .and. err .ne. NF_ERANGE)
  1965. + call errore('OK or Range error: ', err)
  1966. end if
  1967. do 9, j = 1, nels
  1968. if (inRange3(expect(j),var_type(i),
  1969. + NFT_REAL) .and.
  1970. + in_internal_range(NFT_REAL, expect(j)))
  1971. + then
  1972. val = value(j)
  1973. if (.not.equal(val,expect(j),
  1974. + var_type(i),NFT_REAL))
  1975. + then
  1976. call error(
  1977. + 'value read not that expected')
  1978. if (verbose) then
  1979. call error(' ')
  1980. call errori('varid: ', i)
  1981. call errorc('var_name: ',
  1982. + var_name(i))
  1983. call errori('element number: %d ',
  1984. + j)
  1985. call errord('expect: ', expect(j))
  1986. call errord('got: ', val)
  1987. end if
  1988. else
  1989. nok = nok + 1
  1990. end if
  1991. end if
  1992. 9 continue
  1993. else
  1994. if (nels .gt. 0 .and. err .ne. NF_ECHAR)
  1995. + call errore('wrong type: ', err)
  1996. end if
  1997. 5 continue
  1998. 1 continue
  1999. err = nf_close(ncid)
  2000. if (err .ne. 0)
  2001. + call errorc('nf_close: ', nf_strerror(err))
  2002. call print_nok(nok)
  2003. end
  2004. subroutine test_nf_get_vara_double()
  2005. implicit none
  2006. #include "tests.inc"
  2007. integer ncid
  2008. integer d
  2009. integer i
  2010. integer j
  2011. integer k
  2012. integer err
  2013. logical allInExtRange
  2014. logical allInIntRange
  2015. integer nels
  2016. integer nslabs
  2017. integer nok
  2018. integer start(MAX_RANK)
  2019. integer edge(MAX_RANK)
  2020. integer index(MAX_RANK)
  2021. integer mid(MAX_RANK)
  2022. logical canConvert
  2023. doubleprecision value(MAX_NELS)
  2024. doubleprecision expect(MAX_NELS)
  2025. doubleprecision val
  2026. integer udshift
  2027. nok = 0
  2028. err = nf_open(testfile, NF_NOWRITE, ncid)
  2029. if (err .ne. 0)
  2030. + call errore('nf_open: ', err)
  2031. do 1, i = 1, NVARS
  2032. canConvert = (var_type(i) .eq. NF_CHAR) .eqv.
  2033. + (NFT_DOUBLE .eq. NFT_TEXT)
  2034. if (.not.(var_rank(i) .le. MAX_RANK)) stop 'assert'
  2035. if (.not.(var_nels(i) .le. MAX_NELS)) stop 'assert'
  2036. do 2, j = 1, var_rank(i)
  2037. start(j) = 1
  2038. edge(j) = 1
  2039. 2 continue
  2040. err = nf_get_vara_double(BAD_ID, i, start,
  2041. + edge, value)
  2042. if (err .ne. NF_EBADID)
  2043. + call errore('bad ncid: ', err)
  2044. err = nf_get_vara_double(ncid, BAD_VARID, start,
  2045. + edge, value)
  2046. if (err .ne. NF_ENOTVAR)
  2047. + call errore('bad var id: ', err)
  2048. do 3, j = 1, var_rank(i)
  2049. start(j) = var_shape(j,i) + 1
  2050. err = nf_get_vara_double(ncid, i, start,
  2051. + edge, value)
  2052. if (canConvert .and. err .ne. NF_EINVALCOORDS)
  2053. + call errore('bad index: ', err)
  2054. start(j) = 1
  2055. edge(j) = var_shape(j,i) + 1
  2056. err = nf_get_vara_double(ncid, i, start,
  2057. + edge, value)
  2058. if (canConvert .and. err .ne. NF_EEDGE)
  2059. + call errore('bad edge: ', err)
  2060. edge(j) = 1
  2061. 3 continue
  2062. C /* Check non-scalars for correct error returned even when */
  2063. C /* there is nothing to get (edge(j).eq.0) */
  2064. if (var_rank(i) .gt. 0) then
  2065. do 10, j = 1, var_rank(i)
  2066. edge(j) = 0
  2067. 10 continue
  2068. err = nf_get_vara_double(BAD_ID, i, start,
  2069. + edge, value)
  2070. if (err .ne. NF_EBADID)
  2071. + call errore('bad ncid: ', err)
  2072. err = nf_get_vara_double(ncid, BAD_VARID,
  2073. + start, edge, value)
  2074. if (err .ne. NF_ENOTVAR)
  2075. + call errore('bad var id: ', err)
  2076. do 11, j = 1, var_rank(i)
  2077. if (var_dimid(j,i) .gt. 1) then !/* skip record dim */
  2078. start(j) = var_shape(j,i) + 1
  2079. err = nf_get_vara_double(ncid, i,
  2080. + start, edge, value)
  2081. if (canConvert .and. err .ne. NF_EINVALCOORDS)
  2082. + call errore('bad start: ', err)
  2083. start(j) = 1
  2084. endif
  2085. 11 continue
  2086. err = nf_get_vara_double(ncid, i, start,
  2087. + edge, value)
  2088. if (canConvert) then
  2089. if (err .ne. 0)
  2090. + call error(nf_strerror(err))
  2091. else
  2092. if (err .ne. NF_ECHAR)
  2093. + call errore('wrong type: ', err)
  2094. endif
  2095. do 12, j = 1, var_rank(i)
  2096. edge(j) = 1
  2097. 12 continue
  2098. endif
  2099. C Choose a random point dividing each dim into 2 parts
  2100. C get 2^rank (nslabs) slabs so defined
  2101. nslabs = 1
  2102. do 4, j = 1, var_rank(i)
  2103. mid(j) = roll( var_shape(j,i) )
  2104. nslabs = nslabs * 2
  2105. 4 continue
  2106. C bits of k determine whether to get lower or upper part of dim
  2107. do 5, k = 1, nslabs
  2108. nels = 1
  2109. do 6, j = 1, var_rank(i)
  2110. if (mod(udshift((k-1), -(j-1)), 2) .eq. 1) then
  2111. start(j) = 1
  2112. edge(j) = mid(j)
  2113. else
  2114. start(j) = 1 + mid(j)
  2115. edge(j) = var_shape(j,i) - mid(j)
  2116. end if
  2117. nels = nels * edge(j)
  2118. 6 continue
  2119. allInIntRange = .true.
  2120. allInExtRange = .true.
  2121. do 7, j = 1, nels
  2122. err = index2indexes(j, var_rank(i), edge, index)
  2123. if (err .ne. 0)
  2124. + call error('error in index2indexes 1')
  2125. do 8, d = 1, var_rank(i)
  2126. index(d) = index(d) + start(d) - 1
  2127. 8 continue
  2128. expect(j) = hash4(var_type(i), var_rank(i), index,
  2129. + NFT_DOUBLE)
  2130. if (inRange3(expect(j),var_type(i),
  2131. + NFT_DOUBLE)) then
  2132. allInIntRange =
  2133. + allInIntRange .and.
  2134. + in_internal_range(NFT_DOUBLE, expect(j))
  2135. else
  2136. allInExtRange = .false.
  2137. end if
  2138. 7 continue
  2139. err = nf_get_vara_double(ncid, i, start,
  2140. + edge, value)
  2141. if (canConvert) then
  2142. if (allInExtRange) then
  2143. if (allInIntRange) then
  2144. if (err .ne. 0)
  2145. + call errore('nf_get_vara_double:', err)
  2146. else
  2147. if (err .ne. NF_ERANGE)
  2148. + call errore('Range error: ', err)
  2149. end if
  2150. else
  2151. if (err .ne. 0 .and. err .ne. NF_ERANGE)
  2152. + call errore('OK or Range error: ', err)
  2153. end if
  2154. do 9, j = 1, nels
  2155. if (inRange3(expect(j),var_type(i),
  2156. + NFT_DOUBLE) .and.
  2157. + in_internal_range(NFT_DOUBLE, expect(j)))
  2158. + then
  2159. val = value(j)
  2160. if (.not.equal(val,expect(j),
  2161. + var_type(i),NFT_DOUBLE))
  2162. + then
  2163. call error(
  2164. + 'value read not that expected')
  2165. if (verbose) then
  2166. call error(' ')
  2167. call errori('varid: ', i)
  2168. call errorc('var_name: ',
  2169. + var_name(i))
  2170. call errori('element number: %d ',
  2171. + j)
  2172. call errord('expect: ', expect(j))
  2173. call errord('got: ', val)
  2174. end if
  2175. else
  2176. nok = nok + 1
  2177. end if
  2178. end if
  2179. 9 continue
  2180. else
  2181. if (nels .gt. 0 .and. err .ne. NF_ECHAR)
  2182. + call errore('wrong type: ', err)
  2183. end if
  2184. 5 continue
  2185. 1 continue
  2186. err = nf_close(ncid)
  2187. if (err .ne. 0)
  2188. + call errorc('nf_close: ', nf_strerror(err))
  2189. call print_nok(nok)
  2190. end
  2191. subroutine test_nf_get_vars_text()
  2192. implicit none
  2193. #include "tests.inc"
  2194. integer ncid
  2195. integer d
  2196. integer i
  2197. integer j
  2198. integer k
  2199. integer m
  2200. integer err
  2201. logical allInExtRange
  2202. logical allInIntRange
  2203. integer nels
  2204. integer nslabs
  2205. integer nstarts
  2206. integer nok
  2207. integer start(MAX_RANK)
  2208. integer edge(MAX_RANK)
  2209. integer index(MAX_RANK)
  2210. integer index2(MAX_RANK)
  2211. integer mid(MAX_RANK)
  2212. integer count(MAX_RANK)
  2213. integer sstride(MAX_RANK)
  2214. integer stride(MAX_RANK)
  2215. logical canConvert
  2216. character value(MAX_NELS)
  2217. doubleprecision expect(MAX_NELS)
  2218. doubleprecision val
  2219. integer udshift
  2220. nok = 0
  2221. err = nf_open(testfile, NF_NOWRITE, ncid)
  2222. if (err .ne. 0)
  2223. + call errore('nf_open: ', err)
  2224. do 1, i = 1, NVARS
  2225. canConvert = (var_type(i) .eq. NF_CHAR) .eqv.
  2226. + (NFT_TEXT .eq. NFT_TEXT)
  2227. if (.not.(var_rank(i) .le. MAX_RANK)) stop 'assert'
  2228. if (.not.(var_nels(i) .le. MAX_NELS)) stop 'assert'
  2229. do 2, j = 1, var_rank(i)
  2230. start(j) = 1
  2231. edge(j) = 1
  2232. stride(j) = 1
  2233. 2 continue
  2234. err = nf_get_vars_text(BAD_ID, i, start,
  2235. + edge, stride, value)
  2236. if (err .ne. NF_EBADID)
  2237. + call errore('bad ncid: ', err)
  2238. err = nf_get_vars_text(ncid, BAD_VARID,
  2239. + start, edge, stride,
  2240. + value)
  2241. if (err .ne. NF_ENOTVAR)
  2242. + call errore('bad var id: ', err)
  2243. do 3, j = 1, var_rank(i)
  2244. start(j) = var_shape(j,i) + 1
  2245. err = nf_get_vars_text(ncid, i, start,
  2246. + edge, stride,
  2247. + value)
  2248. if (.not. canConvert) then
  2249. if (err .ne. NF_ECHAR)
  2250. + call errore('conversion: ', err)
  2251. else
  2252. if (err .ne. NF_EINVALCOORDS)
  2253. + call errore('bad index: ', err)
  2254. endif
  2255. start(j) = 1
  2256. edge(j) = var_shape(j,i) + 1
  2257. err = nf_get_vars_text(ncid, i, start,
  2258. + edge, stride,
  2259. + value)
  2260. if (.not. canConvert) then
  2261. if (err .ne. NF_ECHAR)
  2262. + call errore('conversion: ', err)
  2263. else
  2264. if (err .ne. NF_EEDGE)
  2265. + call errore('bad edge: ', err)
  2266. endif
  2267. edge(j) = 1
  2268. stride(j) = 0
  2269. err = nf_get_vars_text(ncid, i, start,
  2270. + edge, stride,
  2271. + value)
  2272. if (.not. canConvert) then
  2273. if (err .ne. NF_ECHAR)
  2274. + call errore('conversion: ', err)
  2275. else
  2276. if (err .ne. NF_ESTRIDE)
  2277. + call errore('bad stride: ', err)
  2278. endif
  2279. stride(j) = 1
  2280. 3 continue
  2281. C Choose a random point dividing each dim into 2 parts
  2282. C get 2^rank (nslabs) slabs so defined
  2283. nslabs = 1
  2284. do 4, j = 1, var_rank(i)
  2285. mid(j) = roll( var_shape(j,i) )
  2286. nslabs = nslabs * 2
  2287. 4 continue
  2288. C bits of k determine whether to get lower or upper part of dim
  2289. C choose random stride from 1 to edge
  2290. do 5, k = 1, nslabs
  2291. nstarts = 1
  2292. do 6, j = 1, var_rank(i)
  2293. if (mod(udshift(k-1, j-1), 2) .eq. 1) then
  2294. start(j) = 1
  2295. edge(j) = mid(j)
  2296. else
  2297. start(j) = 1 + mid(j)
  2298. edge(j) = var_shape(j,i) - mid(j)
  2299. end if
  2300. if (edge(j) .gt. 0) then
  2301. sstride(j) = 1 + roll(edge(j))
  2302. else
  2303. sstride(j) = 1
  2304. end if
  2305. nstarts = nstarts * stride(j)
  2306. 6 continue
  2307. do 7, m = 1, nstarts
  2308. err = index2indexes(m, var_rank(i), sstride,
  2309. + index)
  2310. if (err .ne. 0)
  2311. + call error('error in index2indexes')
  2312. nels = 1
  2313. do 8, j = 1, var_rank(i)
  2314. count(j) = 1 + (edge(j) - index(j)) /
  2315. + stride(j)
  2316. nels = nels * count(j)
  2317. index(j) = index(j) + start(j) - 1
  2318. 8 continue
  2319. C Random choice of forward or backward
  2320. C /* TODO
  2321. C if ( roll(2) ) then
  2322. C for (j = 0 j < var_rank(i) j++) {
  2323. C index(j) += (count(j) - 1) * stride(j)
  2324. C stride(j) = -stride(j)
  2325. C }
  2326. C end if
  2327. C */
  2328. allInIntRange = .true.
  2329. allInExtRange = .true.
  2330. do 9, j = 1, nels
  2331. err = index2indexes(j, var_rank(i), count,
  2332. + index2)
  2333. if (err .ne. 0)
  2334. + call error('error in index2indexes() 1')
  2335. do 10, d = 1, var_rank(i)
  2336. index2(d) = index(d) + (index2(d)-1) *
  2337. + stride(d)
  2338. 10 continue
  2339. expect(j) = hash4(var_type(i), var_rank(i),
  2340. + index2, NFT_TEXT)
  2341. if (inRange3(expect(j),var_type(i),
  2342. + NFT_TEXT)) then
  2343. allInIntRange =
  2344. + allInIntRange .and.
  2345. + in_internal_range(NFT_TEXT,
  2346. + expect(j))
  2347. else
  2348. allInExtRange = .false.
  2349. end if
  2350. 9 continue
  2351. err = nf_get_vars_text(ncid, i, index,
  2352. + count, stride,
  2353. + value)
  2354. if (canConvert) then
  2355. if (allInExtRange) then
  2356. if (allInIntRange) then
  2357. if (err .ne. 0)
  2358. + call error(nf_strerror(err))
  2359. else
  2360. if (err .ne. NF_ERANGE)
  2361. + call errore('Range error: ', err)
  2362. end if
  2363. else
  2364. if (err .ne. 0 .and. err .ne. NF_ERANGE)
  2365. + call errore('OK or Range error: ', err)
  2366. end if
  2367. do 11, j = 1, nels
  2368. if (inRange3(expect(j),var_type(i),
  2369. + NFT_TEXT) .and.
  2370. + in_internal_range(NFT_TEXT,
  2371. + expect(j))) then
  2372. val = ichar(value(j))
  2373. if (.not.equal(val, expect(j),
  2374. + var_type(i), NFT_TEXT)) then
  2375. call error(
  2376. + 'value read not that expected')
  2377. if (verbose) then
  2378. call error(' ')
  2379. call errori('varid: ', i)
  2380. call errorc('var_name: ',
  2381. + var_name(i))
  2382. call errori('element number: ',
  2383. + j)
  2384. call errord('expect: ',
  2385. + expect(j))
  2386. call errord('got: ', val)
  2387. end if
  2388. else
  2389. nok = nok + 1
  2390. end if
  2391. end if
  2392. 11 continue
  2393. else
  2394. if (nels .gt. 0 .and. err .ne. NF_ECHAR)
  2395. + call errore('wrong type: ', err)
  2396. end if
  2397. 7 continue
  2398. 5 continue
  2399. 1 continue
  2400. err = nf_close(ncid)
  2401. if (err .ne. 0)
  2402. + call errore('nf_close: ', err)
  2403. call print_nok(nok)
  2404. end
  2405. #ifdef NF_INT1_T
  2406. subroutine test_nf_get_vars_int1()
  2407. implicit none
  2408. #include "tests.inc"
  2409. integer ncid
  2410. integer d
  2411. integer i
  2412. integer j
  2413. integer k
  2414. integer m
  2415. integer err
  2416. logical allInExtRange
  2417. logical allInIntRange
  2418. integer nels
  2419. integer nslabs
  2420. integer nstarts
  2421. integer nok
  2422. integer start(MAX_RANK)
  2423. integer edge(MAX_RANK)
  2424. integer index(MAX_RANK)
  2425. integer index2(MAX_RANK)
  2426. integer mid(MAX_RANK)
  2427. integer count(MAX_RANK)
  2428. integer sstride(MAX_RANK)
  2429. integer stride(MAX_RANK)
  2430. logical canConvert
  2431. NF_INT1_T value(MAX_NELS)
  2432. doubleprecision expect(MAX_NELS)
  2433. doubleprecision val
  2434. integer udshift
  2435. nok = 0
  2436. err = nf_open(testfile, NF_NOWRITE, ncid)
  2437. if (err .ne. 0)
  2438. + call errore('nf_open: ', err)
  2439. do 1, i = 1, NVARS
  2440. canConvert = (var_type(i) .eq. NF_CHAR) .eqv.
  2441. + (NFT_INT1 .eq. NFT_TEXT)
  2442. if (.not.(var_rank(i) .le. MAX_RANK)) stop 'assert'
  2443. if (.not.(var_nels(i) .le. MAX_NELS)) stop 'assert'
  2444. do 2, j = 1, var_rank(i)
  2445. start(j) = 1
  2446. edge(j) = 1
  2447. stride(j) = 1
  2448. 2 continue
  2449. err = nf_get_vars_int1(BAD_ID, i, start,
  2450. + edge, stride, value)
  2451. if (err .ne. NF_EBADID)
  2452. + call errore('bad ncid: ', err)
  2453. err = nf_get_vars_int1(ncid, BAD_VARID,
  2454. + start, edge, stride,
  2455. + value)
  2456. if (err .ne. NF_ENOTVAR)
  2457. + call errore('bad var id: ', err)
  2458. do 3, j = 1, var_rank(i)
  2459. start(j) = var_shape(j,i) + 1
  2460. err = nf_get_vars_int1(ncid, i, start,
  2461. + edge, stride,
  2462. + value)
  2463. if (.not. canConvert) then
  2464. if (err .ne. NF_ECHAR)
  2465. + call errore('conversion: ', err)
  2466. else
  2467. if (err .ne. NF_EINVALCOORDS)
  2468. + call errore('bad index: ', err)
  2469. endif
  2470. start(j) = 1
  2471. edge(j) = var_shape(j,i) + 1
  2472. err = nf_get_vars_int1(ncid, i, start,
  2473. + edge, stride,
  2474. + value)
  2475. if (.not. canConvert) then
  2476. if (err .ne. NF_ECHAR)
  2477. + call errore('conversion: ', err)
  2478. else
  2479. if (err .ne. NF_EEDGE)
  2480. + call errore('bad edge: ', err)
  2481. endif
  2482. edge(j) = 1
  2483. stride(j) = 0
  2484. err = nf_get_vars_int1(ncid, i, start,
  2485. + edge, stride,
  2486. + value)
  2487. if (.not. canConvert) then
  2488. if (err .ne. NF_ECHAR)
  2489. + call errore('conversion: ', err)
  2490. else
  2491. if (err .ne. NF_ESTRIDE)
  2492. + call errore('bad stride: ', err)
  2493. endif
  2494. stride(j) = 1
  2495. 3 continue
  2496. C Choose a random point dividing each dim into 2 parts
  2497. C get 2^rank (nslabs) slabs so defined
  2498. nslabs = 1
  2499. do 4, j = 1, var_rank(i)
  2500. mid(j) = roll( var_shape(j,i) )
  2501. nslabs = nslabs * 2
  2502. 4 continue
  2503. C bits of k determine whether to get lower or upper part of dim
  2504. C choose random stride from 1 to edge
  2505. do 5, k = 1, nslabs
  2506. nstarts = 1
  2507. do 6, j = 1, var_rank(i)
  2508. if (mod(udshift(k-1, j-1), 2) .eq. 1) then
  2509. start(j) = 1
  2510. edge(j) = mid(j)
  2511. else
  2512. start(j) = 1 + mid(j)
  2513. edge(j) = var_shape(j,i) - mid(j)
  2514. end if
  2515. if (edge(j) .gt. 0) then
  2516. sstride(j) = 1 + roll(edge(j))
  2517. else
  2518. sstride(j) = 1
  2519. end if
  2520. nstarts = nstarts * stride(j)
  2521. 6 continue
  2522. do 7, m = 1, nstarts
  2523. err = index2indexes(m, var_rank(i), sstride,
  2524. + index)
  2525. if (err .ne. 0)
  2526. + call error('error in index2indexes')
  2527. nels = 1
  2528. do 8, j = 1, var_rank(i)
  2529. count(j) = 1 + (edge(j) - index(j)) /
  2530. + stride(j)
  2531. nels = nels * count(j)
  2532. index(j) = index(j) + start(j) - 1
  2533. 8 continue
  2534. C Random choice of forward or backward
  2535. C /* TODO
  2536. C if ( roll(2) ) then
  2537. C for (j = 0 j < var_rank(i) j++) {
  2538. C index(j) += (count(j) - 1) * stride(j)
  2539. C stride(j) = -stride(j)
  2540. C }
  2541. C end if
  2542. C */
  2543. allInIntRange = .true.
  2544. allInExtRange = .true.
  2545. do 9, j = 1, nels
  2546. err = index2indexes(j, var_rank(i), count,
  2547. + index2)
  2548. if (err .ne. 0)
  2549. + call error('error in index2indexes() 1')
  2550. do 10, d = 1, var_rank(i)
  2551. index2(d) = index(d) + (index2(d)-1) *
  2552. + stride(d)
  2553. 10 continue
  2554. expect(j) = hash4(var_type(i), var_rank(i),
  2555. + index2, NFT_INT1)
  2556. if (inRange3(expect(j),var_type(i),
  2557. + NFT_INT1)) then
  2558. allInIntRange =
  2559. + allInIntRange .and.
  2560. + in_internal_range(NFT_INT1,
  2561. + expect(j))
  2562. else
  2563. allInExtRange = .false.
  2564. end if
  2565. 9 continue
  2566. err = nf_get_vars_int1(ncid, i, index,
  2567. + count, stride,
  2568. + value)
  2569. if (canConvert) then
  2570. if (allInExtRange) then
  2571. if (allInIntRange) then
  2572. if (err .ne. 0)
  2573. + call error(nf_strerror(err))
  2574. else
  2575. if (err .ne. NF_ERANGE)
  2576. + call errore('Range error: ', err)
  2577. end if
  2578. else
  2579. if (err .ne. 0 .and. err .ne. NF_ERANGE)
  2580. + call errore('OK or Range error: ', err)
  2581. end if
  2582. do 11, j = 1, nels
  2583. if (inRange3(expect(j),var_type(i),
  2584. + NFT_INT1) .and.
  2585. + in_internal_range(NFT_INT1,
  2586. + expect(j))) then
  2587. val = value(j)
  2588. if (.not.equal(val, expect(j),
  2589. + var_type(i), NFT_INT1)) then
  2590. call error(
  2591. + 'value read not that expected')
  2592. if (verbose) then
  2593. call error(' ')
  2594. call errori('varid: ', i)
  2595. call errorc('var_name: ',
  2596. + var_name(i))
  2597. call errori('element number: ',
  2598. + j)
  2599. call errord('expect: ',
  2600. + expect(j))
  2601. call errord('got: ', val)
  2602. end if
  2603. else
  2604. nok = nok + 1
  2605. end if
  2606. end if
  2607. 11 continue
  2608. else
  2609. if (nels .gt. 0 .and. err .ne. NF_ECHAR)
  2610. + call errore('wrong type: ', err)
  2611. end if
  2612. 7 continue
  2613. 5 continue
  2614. 1 continue
  2615. err = nf_close(ncid)
  2616. if (err .ne. 0)
  2617. + call errore('nf_close: ', err)
  2618. call print_nok(nok)
  2619. end
  2620. #endif
  2621. #ifdef NF_INT2_T
  2622. subroutine test_nf_get_vars_int2()
  2623. implicit none
  2624. #include "tests.inc"
  2625. integer ncid
  2626. integer d
  2627. integer i
  2628. integer j
  2629. integer k
  2630. integer m
  2631. integer err
  2632. logical allInExtRange
  2633. logical allInIntRange
  2634. integer nels
  2635. integer nslabs
  2636. integer nstarts
  2637. integer nok
  2638. integer start(MAX_RANK)
  2639. integer edge(MAX_RANK)
  2640. integer index(MAX_RANK)
  2641. integer index2(MAX_RANK)
  2642. integer mid(MAX_RANK)
  2643. integer count(MAX_RANK)
  2644. integer sstride(MAX_RANK)
  2645. integer stride(MAX_RANK)
  2646. logical canConvert
  2647. NF_INT2_T value(MAX_NELS)
  2648. doubleprecision expect(MAX_NELS)
  2649. doubleprecision val
  2650. integer udshift
  2651. nok = 0
  2652. err = nf_open(testfile, NF_NOWRITE, ncid)
  2653. if (err .ne. 0)
  2654. + call errore('nf_open: ', err)
  2655. do 1, i = 1, NVARS
  2656. canConvert = (var_type(i) .eq. NF_CHAR) .eqv.
  2657. + (NFT_INT2 .eq. NFT_TEXT)
  2658. if (.not.(var_rank(i) .le. MAX_RANK)) stop 'assert'
  2659. if (.not.(var_nels(i) .le. MAX_NELS)) stop 'assert'
  2660. do 2, j = 1, var_rank(i)
  2661. start(j) = 1
  2662. edge(j) = 1
  2663. stride(j) = 1
  2664. 2 continue
  2665. err = nf_get_vars_int2(BAD_ID, i, start,
  2666. + edge, stride, value)
  2667. if (err .ne. NF_EBADID)
  2668. + call errore('bad ncid: ', err)
  2669. err = nf_get_vars_int2(ncid, BAD_VARID,
  2670. + start, edge, stride,
  2671. + value)
  2672. if (err .ne. NF_ENOTVAR)
  2673. + call errore('bad var id: ', err)
  2674. do 3, j = 1, var_rank(i)
  2675. start(j) = var_shape(j,i) + 1
  2676. err = nf_get_vars_int2(ncid, i, start,
  2677. + edge, stride,
  2678. + value)
  2679. if (.not. canConvert) then
  2680. if (err .ne. NF_ECHAR)
  2681. + call errore('conversion: ', err)
  2682. else
  2683. if (err .ne. NF_EINVALCOORDS)
  2684. + call errore('bad index: ', err)
  2685. endif
  2686. start(j) = 1
  2687. edge(j) = var_shape(j,i) + 1
  2688. err = nf_get_vars_int2(ncid, i, start,
  2689. + edge, stride,
  2690. + value)
  2691. if (.not. canConvert) then
  2692. if (err .ne. NF_ECHAR)
  2693. + call errore('conversion: ', err)
  2694. else
  2695. if (err .ne. NF_EEDGE)
  2696. + call errore('bad edge: ', err)
  2697. endif
  2698. edge(j) = 1
  2699. stride(j) = 0
  2700. err = nf_get_vars_int2(ncid, i, start,
  2701. + edge, stride,
  2702. + value)
  2703. if (.not. canConvert) then
  2704. if (err .ne. NF_ECHAR)
  2705. + call errore('conversion: ', err)
  2706. else
  2707. if (err .ne. NF_ESTRIDE)
  2708. + call errore('bad stride: ', err)
  2709. endif
  2710. stride(j) = 1
  2711. 3 continue
  2712. C Choose a random point dividing each dim into 2 parts
  2713. C get 2^rank (nslabs) slabs so defined
  2714. nslabs = 1
  2715. do 4, j = 1, var_rank(i)
  2716. mid(j) = roll( var_shape(j,i) )
  2717. nslabs = nslabs * 2
  2718. 4 continue
  2719. C bits of k determine whether to get lower or upper part of dim
  2720. C choose random stride from 1 to edge
  2721. do 5, k = 1, nslabs
  2722. nstarts = 1
  2723. do 6, j = 1, var_rank(i)
  2724. if (mod(udshift(k-1, j-1), 2) .eq. 1) then
  2725. start(j) = 1
  2726. edge(j) = mid(j)
  2727. else
  2728. start(j) = 1 + mid(j)
  2729. edge(j) = var_shape(j,i) - mid(j)
  2730. end if
  2731. if (edge(j) .gt. 0) then
  2732. sstride(j) = 1 + roll(edge(j))
  2733. else
  2734. sstride(j) = 1
  2735. end if
  2736. nstarts = nstarts * stride(j)
  2737. 6 continue
  2738. do 7, m = 1, nstarts
  2739. err = index2indexes(m, var_rank(i), sstride,
  2740. + index)
  2741. if (err .ne. 0)
  2742. + call error('error in index2indexes')
  2743. nels = 1
  2744. do 8, j = 1, var_rank(i)
  2745. count(j) = 1 + (edge(j) - index(j)) /
  2746. + stride(j)
  2747. nels = nels * count(j)
  2748. index(j) = index(j) + start(j) - 1
  2749. 8 continue
  2750. C Random choice of forward or backward
  2751. C /* TODO
  2752. C if ( roll(2) ) then
  2753. C for (j = 0 j < var_rank(i) j++) {
  2754. C index(j) += (count(j) - 1) * stride(j)
  2755. C stride(j) = -stride(j)
  2756. C }
  2757. C end if
  2758. C */
  2759. allInIntRange = .true.
  2760. allInExtRange = .true.
  2761. do 9, j = 1, nels
  2762. err = index2indexes(j, var_rank(i), count,
  2763. + index2)
  2764. if (err .ne. 0)
  2765. + call error('error in index2indexes() 1')
  2766. do 10, d = 1, var_rank(i)
  2767. index2(d) = index(d) + (index2(d)-1) *
  2768. + stride(d)
  2769. 10 continue
  2770. expect(j) = hash4(var_type(i), var_rank(i),
  2771. + index2, NFT_INT2)
  2772. if (inRange3(expect(j),var_type(i),
  2773. + NFT_INT2)) then
  2774. allInIntRange =
  2775. + allInIntRange .and.
  2776. + in_internal_range(NFT_INT2,
  2777. + expect(j))
  2778. else
  2779. allInExtRange = .false.
  2780. end if
  2781. 9 continue
  2782. err = nf_get_vars_int2(ncid, i, index,
  2783. + count, stride,
  2784. + value)
  2785. if (canConvert) then
  2786. if (allInExtRange) then
  2787. if (allInIntRange) then
  2788. if (err .ne. 0)
  2789. + call error(nf_strerror(err))
  2790. else
  2791. if (err .ne. NF_ERANGE)
  2792. + call errore('Range error: ', err)
  2793. end if
  2794. else
  2795. if (err .ne. 0 .and. err .ne. NF_ERANGE)
  2796. + call errore('OK or Range error: ', err)
  2797. end if
  2798. do 11, j = 1, nels
  2799. if (inRange3(expect(j),var_type(i),
  2800. + NFT_INT2) .and.
  2801. + in_internal_range(NFT_INT2,
  2802. + expect(j))) then
  2803. val = value(j)
  2804. if (.not.equal(val, expect(j),
  2805. + var_type(i), NFT_INT2)) then
  2806. call error(
  2807. + 'value read not that expected')
  2808. if (verbose) then
  2809. call error(' ')
  2810. call errori('varid: ', i)
  2811. call errorc('var_name: ',
  2812. + var_name(i))
  2813. call errori('element number: ',
  2814. + j)
  2815. call errord('expect: ',
  2816. + expect(j))
  2817. call errord('got: ', val)
  2818. end if
  2819. else
  2820. nok = nok + 1
  2821. end if
  2822. end if
  2823. 11 continue
  2824. else
  2825. if (nels .gt. 0 .and. err .ne. NF_ECHAR)
  2826. + call errore('wrong type: ', err)
  2827. end if
  2828. 7 continue
  2829. 5 continue
  2830. 1 continue
  2831. err = nf_close(ncid)
  2832. if (err .ne. 0)
  2833. + call errore('nf_close: ', err)
  2834. call print_nok(nok)
  2835. end
  2836. #endif
  2837. subroutine test_nf_get_vars_int()
  2838. implicit none
  2839. #include "tests.inc"
  2840. integer ncid
  2841. integer d
  2842. integer i
  2843. integer j
  2844. integer k
  2845. integer m
  2846. integer err
  2847. logical allInExtRange
  2848. logical allInIntRange
  2849. integer nels
  2850. integer nslabs
  2851. integer nstarts
  2852. integer nok
  2853. integer start(MAX_RANK)
  2854. integer edge(MAX_RANK)
  2855. integer index(MAX_RANK)
  2856. integer index2(MAX_RANK)
  2857. integer mid(MAX_RANK)
  2858. integer count(MAX_RANK)
  2859. integer sstride(MAX_RANK)
  2860. integer stride(MAX_RANK)
  2861. logical canConvert
  2862. integer value(MAX_NELS)
  2863. doubleprecision expect(MAX_NELS)
  2864. doubleprecision val
  2865. integer udshift
  2866. nok = 0
  2867. err = nf_open(testfile, NF_NOWRITE, ncid)
  2868. if (err .ne. 0)
  2869. + call errore('nf_open: ', err)
  2870. do 1, i = 1, NVARS
  2871. canConvert = (var_type(i) .eq. NF_CHAR) .eqv.
  2872. + (NFT_INT .eq. NFT_TEXT)
  2873. if (.not.(var_rank(i) .le. MAX_RANK)) stop 'assert'
  2874. if (.not.(var_nels(i) .le. MAX_NELS)) stop 'assert'
  2875. do 2, j = 1, var_rank(i)
  2876. start(j) = 1
  2877. edge(j) = 1
  2878. stride(j) = 1
  2879. 2 continue
  2880. err = nf_get_vars_int(BAD_ID, i, start,
  2881. + edge, stride, value)
  2882. if (err .ne. NF_EBADID)
  2883. + call errore('bad ncid: ', err)
  2884. err = nf_get_vars_int(ncid, BAD_VARID,
  2885. + start, edge, stride,
  2886. + value)
  2887. if (err .ne. NF_ENOTVAR)
  2888. + call errore('bad var id: ', err)
  2889. do 3, j = 1, var_rank(i)
  2890. start(j) = var_shape(j,i) + 1
  2891. err = nf_get_vars_int(ncid, i, start,
  2892. + edge, stride,
  2893. + value)
  2894. if (.not. canConvert) then
  2895. if (err .ne. NF_ECHAR)
  2896. + call errore('conversion: ', err)
  2897. else
  2898. if (err .ne. NF_EINVALCOORDS)
  2899. + call errore('bad index: ', err)
  2900. endif
  2901. start(j) = 1
  2902. edge(j) = var_shape(j,i) + 1
  2903. err = nf_get_vars_int(ncid, i, start,
  2904. + edge, stride,
  2905. + value)
  2906. if (.not. canConvert) then
  2907. if (err .ne. NF_ECHAR)
  2908. + call errore('conversion: ', err)
  2909. else
  2910. if (err .ne. NF_EEDGE)
  2911. + call errore('bad edge: ', err)
  2912. endif
  2913. edge(j) = 1
  2914. stride(j) = 0
  2915. err = nf_get_vars_int(ncid, i, start,
  2916. + edge, stride,
  2917. + value)
  2918. if (.not. canConvert) then
  2919. if (err .ne. NF_ECHAR)
  2920. + call errore('conversion: ', err)
  2921. else
  2922. if (err .ne. NF_ESTRIDE)
  2923. + call errore('bad stride: ', err)
  2924. endif
  2925. stride(j) = 1
  2926. 3 continue
  2927. C Choose a random point dividing each dim into 2 parts
  2928. C get 2^rank (nslabs) slabs so defined
  2929. nslabs = 1
  2930. do 4, j = 1, var_rank(i)
  2931. mid(j) = roll( var_shape(j,i) )
  2932. nslabs = nslabs * 2
  2933. 4 continue
  2934. C bits of k determine whether to get lower or upper part of dim
  2935. C choose random stride from 1 to edge
  2936. do 5, k = 1, nslabs
  2937. nstarts = 1
  2938. do 6, j = 1, var_rank(i)
  2939. if (mod(udshift(k-1, j-1), 2) .eq. 1) then
  2940. start(j) = 1
  2941. edge(j) = mid(j)
  2942. else
  2943. start(j) = 1 + mid(j)
  2944. edge(j) = var_shape(j,i) - mid(j)
  2945. end if
  2946. if (edge(j) .gt. 0) then
  2947. sstride(j) = 1 + roll(edge(j))
  2948. else
  2949. sstride(j) = 1
  2950. end if
  2951. nstarts = nstarts * stride(j)
  2952. 6 continue
  2953. do 7, m = 1, nstarts
  2954. err = index2indexes(m, var_rank(i), sstride,
  2955. + index)
  2956. if (err .ne. 0)
  2957. + call error('error in index2indexes')
  2958. nels = 1
  2959. do 8, j = 1, var_rank(i)
  2960. count(j) = 1 + (edge(j) - index(j)) /
  2961. + stride(j)
  2962. nels = nels * count(j)
  2963. index(j) = index(j) + start(j) - 1
  2964. 8 continue
  2965. C Random choice of forward or backward
  2966. C /* TODO
  2967. C if ( roll(2) ) then
  2968. C for (j = 0 j < var_rank(i) j++) {
  2969. C index(j) += (count(j) - 1) * stride(j)
  2970. C stride(j) = -stride(j)
  2971. C }
  2972. C end if
  2973. C */
  2974. allInIntRange = .true.
  2975. allInExtRange = .true.
  2976. do 9, j = 1, nels
  2977. err = index2indexes(j, var_rank(i), count,
  2978. + index2)
  2979. if (err .ne. 0)
  2980. + call error('error in index2indexes() 1')
  2981. do 10, d = 1, var_rank(i)
  2982. index2(d) = index(d) + (index2(d)-1) *
  2983. + stride(d)
  2984. 10 continue
  2985. expect(j) = hash4(var_type(i), var_rank(i),
  2986. + index2, NFT_INT)
  2987. if (inRange3(expect(j),var_type(i),
  2988. + NFT_INT)) then
  2989. allInIntRange =
  2990. + allInIntRange .and.
  2991. + in_internal_range(NFT_INT,
  2992. + expect(j))
  2993. else
  2994. allInExtRange = .false.
  2995. end if
  2996. 9 continue
  2997. err = nf_get_vars_int(ncid, i, index,
  2998. + count, stride,
  2999. + value)
  3000. if (canConvert) then
  3001. if (allInExtRange) then
  3002. if (allInIntRange) then
  3003. if (err .ne. 0)
  3004. + call error(nf_strerror(err))
  3005. else
  3006. if (err .ne. NF_ERANGE)
  3007. + call errore('Range error: ', err)
  3008. end if
  3009. else
  3010. if (err .ne. 0 .and. err .ne. NF_ERANGE)
  3011. + call errore('OK or Range error: ', err)
  3012. end if
  3013. do 11, j = 1, nels
  3014. if (inRange3(expect(j),var_type(i),
  3015. + NFT_INT) .and.
  3016. + in_internal_range(NFT_INT,
  3017. + expect(j))) then
  3018. val = value(j)
  3019. if (.not.equal(val, expect(j),
  3020. + var_type(i), NFT_INT)) then
  3021. call error(
  3022. + 'value read not that expected')
  3023. if (verbose) then
  3024. call error(' ')
  3025. call errori('varid: ', i)
  3026. call errorc('var_name: ',
  3027. + var_name(i))
  3028. call errori('element number: ',
  3029. + j)
  3030. call errord('expect: ',
  3031. + expect(j))
  3032. call errord('got: ', val)
  3033. end if
  3034. else
  3035. nok = nok + 1
  3036. end if
  3037. end if
  3038. 11 continue
  3039. else
  3040. if (nels .gt. 0 .and. err .ne. NF_ECHAR)
  3041. + call errore('wrong type: ', err)
  3042. end if
  3043. 7 continue
  3044. 5 continue
  3045. 1 continue
  3046. err = nf_close(ncid)
  3047. if (err .ne. 0)
  3048. + call errore('nf_close: ', err)
  3049. call print_nok(nok)
  3050. end
  3051. subroutine test_nf_get_vars_real()
  3052. implicit none
  3053. #include "tests.inc"
  3054. integer ncid
  3055. integer d
  3056. integer i
  3057. integer j
  3058. integer k
  3059. integer m
  3060. integer err
  3061. logical allInExtRange
  3062. logical allInIntRange
  3063. integer nels
  3064. integer nslabs
  3065. integer nstarts
  3066. integer nok
  3067. integer start(MAX_RANK)
  3068. integer edge(MAX_RANK)
  3069. integer index(MAX_RANK)
  3070. integer index2(MAX_RANK)
  3071. integer mid(MAX_RANK)
  3072. integer count(MAX_RANK)
  3073. integer sstride(MAX_RANK)
  3074. integer stride(MAX_RANK)
  3075. logical canConvert
  3076. real value(MAX_NELS)
  3077. doubleprecision expect(MAX_NELS)
  3078. doubleprecision val
  3079. integer udshift
  3080. nok = 0
  3081. err = nf_open(testfile, NF_NOWRITE, ncid)
  3082. if (err .ne. 0)
  3083. + call errore('nf_open: ', err)
  3084. do 1, i = 1, NVARS
  3085. canConvert = (var_type(i) .eq. NF_CHAR) .eqv.
  3086. + (NFT_REAL .eq. NFT_TEXT)
  3087. if (.not.(var_rank(i) .le. MAX_RANK)) stop 'assert'
  3088. if (.not.(var_nels(i) .le. MAX_NELS)) stop 'assert'
  3089. do 2, j = 1, var_rank(i)
  3090. start(j) = 1
  3091. edge(j) = 1
  3092. stride(j) = 1
  3093. 2 continue
  3094. err = nf_get_vars_real(BAD_ID, i, start,
  3095. + edge, stride, value)
  3096. if (err .ne. NF_EBADID)
  3097. + call errore('bad ncid: ', err)
  3098. err = nf_get_vars_real(ncid, BAD_VARID,
  3099. + start, edge, stride,
  3100. + value)
  3101. if (err .ne. NF_ENOTVAR)
  3102. + call errore('bad var id: ', err)
  3103. do 3, j = 1, var_rank(i)
  3104. start(j) = var_shape(j,i) + 1
  3105. err = nf_get_vars_real(ncid, i, start,
  3106. + edge, stride,
  3107. + value)
  3108. if (.not. canConvert) then
  3109. if (err .ne. NF_ECHAR)
  3110. + call errore('conversion: ', err)
  3111. else
  3112. if (err .ne. NF_EINVALCOORDS)
  3113. + call errore('bad index: ', err)
  3114. endif
  3115. start(j) = 1
  3116. edge(j) = var_shape(j,i) + 1
  3117. err = nf_get_vars_real(ncid, i, start,
  3118. + edge, stride,
  3119. + value)
  3120. if (.not. canConvert) then
  3121. if (err .ne. NF_ECHAR)
  3122. + call errore('conversion: ', err)
  3123. else
  3124. if (err .ne. NF_EEDGE)
  3125. + call errore('bad edge: ', err)
  3126. endif
  3127. edge(j) = 1
  3128. stride(j) = 0
  3129. err = nf_get_vars_real(ncid, i, start,
  3130. + edge, stride,
  3131. + value)
  3132. if (.not. canConvert) then
  3133. if (err .ne. NF_ECHAR)
  3134. + call errore('conversion: ', err)
  3135. else
  3136. if (err .ne. NF_ESTRIDE)
  3137. + call errore('bad stride: ', err)
  3138. endif
  3139. stride(j) = 1
  3140. 3 continue
  3141. C Choose a random point dividing each dim into 2 parts
  3142. C get 2^rank (nslabs) slabs so defined
  3143. nslabs = 1
  3144. do 4, j = 1, var_rank(i)
  3145. mid(j) = roll( var_shape(j,i) )
  3146. nslabs = nslabs * 2
  3147. 4 continue
  3148. C bits of k determine whether to get lower or upper part of dim
  3149. C choose random stride from 1 to edge
  3150. do 5, k = 1, nslabs
  3151. nstarts = 1
  3152. do 6, j = 1, var_rank(i)
  3153. if (mod(udshift(k-1, j-1), 2) .eq. 1) then
  3154. start(j) = 1
  3155. edge(j) = mid(j)
  3156. else
  3157. start(j) = 1 + mid(j)
  3158. edge(j) = var_shape(j,i) - mid(j)
  3159. end if
  3160. if (edge(j) .gt. 0) then
  3161. sstride(j) = 1 + roll(edge(j))
  3162. else
  3163. sstride(j) = 1
  3164. end if
  3165. nstarts = nstarts * stride(j)
  3166. 6 continue
  3167. do 7, m = 1, nstarts
  3168. err = index2indexes(m, var_rank(i), sstride,
  3169. + index)
  3170. if (err .ne. 0)
  3171. + call error('error in index2indexes')
  3172. nels = 1
  3173. do 8, j = 1, var_rank(i)
  3174. count(j) = 1 + (edge(j) - index(j)) /
  3175. + stride(j)
  3176. nels = nels * count(j)
  3177. index(j) = index(j) + start(j) - 1
  3178. 8 continue
  3179. C Random choice of forward or backward
  3180. C /* TODO
  3181. C if ( roll(2) ) then
  3182. C for (j = 0 j < var_rank(i) j++) {
  3183. C index(j) += (count(j) - 1) * stride(j)
  3184. C stride(j) = -stride(j)
  3185. C }
  3186. C end if
  3187. C */
  3188. allInIntRange = .true.
  3189. allInExtRange = .true.
  3190. do 9, j = 1, nels
  3191. err = index2indexes(j, var_rank(i), count,
  3192. + index2)
  3193. if (err .ne. 0)
  3194. + call error('error in index2indexes() 1')
  3195. do 10, d = 1, var_rank(i)
  3196. index2(d) = index(d) + (index2(d)-1) *
  3197. + stride(d)
  3198. 10 continue
  3199. expect(j) = hash4(var_type(i), var_rank(i),
  3200. + index2, NFT_REAL)
  3201. if (inRange3(expect(j),var_type(i),
  3202. + NFT_REAL)) then
  3203. allInIntRange =
  3204. + allInIntRange .and.
  3205. + in_internal_range(NFT_REAL,
  3206. + expect(j))
  3207. else
  3208. allInExtRange = .false.
  3209. end if
  3210. 9 continue
  3211. err = nf_get_vars_real(ncid, i, index,
  3212. + count, stride,
  3213. + value)
  3214. if (canConvert) then
  3215. if (allInExtRange) then
  3216. if (allInIntRange) then
  3217. if (err .ne. 0)
  3218. + call error(nf_strerror(err))
  3219. else
  3220. if (err .ne. NF_ERANGE)
  3221. + call errore('Range error: ', err)
  3222. end if
  3223. else
  3224. if (err .ne. 0 .and. err .ne. NF_ERANGE)
  3225. + call errore('OK or Range error: ', err)
  3226. end if
  3227. do 11, j = 1, nels
  3228. if (inRange3(expect(j),var_type(i),
  3229. + NFT_REAL) .and.
  3230. + in_internal_range(NFT_REAL,
  3231. + expect(j))) then
  3232. val = value(j)
  3233. if (.not.equal(val, expect(j),
  3234. + var_type(i), NFT_REAL)) then
  3235. call error(
  3236. + 'value read not that expected')
  3237. if (verbose) then
  3238. call error(' ')
  3239. call errori('varid: ', i)
  3240. call errorc('var_name: ',
  3241. + var_name(i))
  3242. call errori('element number: ',
  3243. + j)
  3244. call errord('expect: ',
  3245. + expect(j))
  3246. call errord('got: ', val)
  3247. end if
  3248. else
  3249. nok = nok + 1
  3250. end if
  3251. end if
  3252. 11 continue
  3253. else
  3254. if (nels .gt. 0 .and. err .ne. NF_ECHAR)
  3255. + call errore('wrong type: ', err)
  3256. end if
  3257. 7 continue
  3258. 5 continue
  3259. 1 continue
  3260. err = nf_close(ncid)
  3261. if (err .ne. 0)
  3262. + call errore('nf_close: ', err)
  3263. call print_nok(nok)
  3264. end
  3265. subroutine test_nf_get_vars_double()
  3266. implicit none
  3267. #include "tests.inc"
  3268. integer ncid
  3269. integer d
  3270. integer i
  3271. integer j
  3272. integer k
  3273. integer m
  3274. integer err
  3275. logical allInExtRange
  3276. logical allInIntRange
  3277. integer nels
  3278. integer nslabs
  3279. integer nstarts
  3280. integer nok
  3281. integer start(MAX_RANK)
  3282. integer edge(MAX_RANK)
  3283. integer index(MAX_RANK)
  3284. integer index2(MAX_RANK)
  3285. integer mid(MAX_RANK)
  3286. integer count(MAX_RANK)
  3287. integer sstride(MAX_RANK)
  3288. integer stride(MAX_RANK)
  3289. logical canConvert
  3290. doubleprecision value(MAX_NELS)
  3291. doubleprecision expect(MAX_NELS)
  3292. doubleprecision val
  3293. integer udshift
  3294. nok = 0
  3295. err = nf_open(testfile, NF_NOWRITE, ncid)
  3296. if (err .ne. 0)
  3297. + call errore('nf_open: ', err)
  3298. do 1, i = 1, NVARS
  3299. canConvert = (var_type(i) .eq. NF_CHAR) .eqv.
  3300. + (NFT_DOUBLE .eq. NFT_TEXT)
  3301. if (.not.(var_rank(i) .le. MAX_RANK)) stop 'assert'
  3302. if (.not.(var_nels(i) .le. MAX_NELS)) stop 'assert'
  3303. do 2, j = 1, var_rank(i)
  3304. start(j) = 1
  3305. edge(j) = 1
  3306. stride(j) = 1
  3307. 2 continue
  3308. err = nf_get_vars_double(BAD_ID, i, start,
  3309. + edge, stride, value)
  3310. if (err .ne. NF_EBADID)
  3311. + call errore('bad ncid: ', err)
  3312. err = nf_get_vars_double(ncid, BAD_VARID,
  3313. + start, edge, stride,
  3314. + value)
  3315. if (err .ne. NF_ENOTVAR)
  3316. + call errore('bad var id: ', err)
  3317. do 3, j = 1, var_rank(i)
  3318. start(j) = var_shape(j,i) + 1
  3319. err = nf_get_vars_double(ncid, i, start,
  3320. + edge, stride,
  3321. + value)
  3322. if (.not. canConvert) then
  3323. if (err .ne. NF_ECHAR)
  3324. + call errore('conversion: ', err)
  3325. else
  3326. if (err .ne. NF_EINVALCOORDS)
  3327. + call errore('bad index: ', err)
  3328. endif
  3329. start(j) = 1
  3330. edge(j) = var_shape(j,i) + 1
  3331. err = nf_get_vars_double(ncid, i, start,
  3332. + edge, stride,
  3333. + value)
  3334. if (.not. canConvert) then
  3335. if (err .ne. NF_ECHAR)
  3336. + call errore('conversion: ', err)
  3337. else
  3338. if (err .ne. NF_EEDGE)
  3339. + call errore('bad edge: ', err)
  3340. endif
  3341. edge(j) = 1
  3342. stride(j) = 0
  3343. err = nf_get_vars_double(ncid, i, start,
  3344. + edge, stride,
  3345. + value)
  3346. if (.not. canConvert) then
  3347. if (err .ne. NF_ECHAR)
  3348. + call errore('conversion: ', err)
  3349. else
  3350. if (err .ne. NF_ESTRIDE)
  3351. + call errore('bad stride: ', err)
  3352. endif
  3353. stride(j) = 1
  3354. 3 continue
  3355. C Choose a random point dividing each dim into 2 parts
  3356. C get 2^rank (nslabs) slabs so defined
  3357. nslabs = 1
  3358. do 4, j = 1, var_rank(i)
  3359. mid(j) = roll( var_shape(j,i) )
  3360. nslabs = nslabs * 2
  3361. 4 continue
  3362. C bits of k determine whether to get lower or upper part of dim
  3363. C choose random stride from 1 to edge
  3364. do 5, k = 1, nslabs
  3365. nstarts = 1
  3366. do 6, j = 1, var_rank(i)
  3367. if (mod(udshift(k-1, j-1), 2) .eq. 1) then
  3368. start(j) = 1
  3369. edge(j) = mid(j)
  3370. else
  3371. start(j) = 1 + mid(j)
  3372. edge(j) = var_shape(j,i) - mid(j)
  3373. end if
  3374. if (edge(j) .gt. 0) then
  3375. sstride(j) = 1 + roll(edge(j))
  3376. else
  3377. sstride(j) = 1
  3378. end if
  3379. nstarts = nstarts * stride(j)
  3380. 6 continue
  3381. do 7, m = 1, nstarts
  3382. err = index2indexes(m, var_rank(i), sstride,
  3383. + index)
  3384. if (err .ne. 0)
  3385. + call error('error in index2indexes')
  3386. nels = 1
  3387. do 8, j = 1, var_rank(i)
  3388. count(j) = 1 + (edge(j) - index(j)) /
  3389. + stride(j)
  3390. nels = nels * count(j)
  3391. index(j) = index(j) + start(j) - 1
  3392. 8 continue
  3393. C Random choice of forward or backward
  3394. C /* TODO
  3395. C if ( roll(2) ) then
  3396. C for (j = 0 j < var_rank(i) j++) {
  3397. C index(j) += (count(j) - 1) * stride(j)
  3398. C stride(j) = -stride(j)
  3399. C }
  3400. C end if
  3401. C */
  3402. allInIntRange = .true.
  3403. allInExtRange = .true.
  3404. do 9, j = 1, nels
  3405. err = index2indexes(j, var_rank(i), count,
  3406. + index2)
  3407. if (err .ne. 0)
  3408. + call error('error in index2indexes() 1')
  3409. do 10, d = 1, var_rank(i)
  3410. index2(d) = index(d) + (index2(d)-1) *
  3411. + stride(d)
  3412. 10 continue
  3413. expect(j) = hash4(var_type(i), var_rank(i),
  3414. + index2, NFT_DOUBLE)
  3415. if (inRange3(expect(j),var_type(i),
  3416. + NFT_DOUBLE)) then
  3417. allInIntRange =
  3418. + allInIntRange .and.
  3419. + in_internal_range(NFT_DOUBLE,
  3420. + expect(j))
  3421. else
  3422. allInExtRange = .false.
  3423. end if
  3424. 9 continue
  3425. err = nf_get_vars_double(ncid, i, index,
  3426. + count, stride,
  3427. + value)
  3428. if (canConvert) then
  3429. if (allInExtRange) then
  3430. if (allInIntRange) then
  3431. if (err .ne. 0)
  3432. + call error(nf_strerror(err))
  3433. else
  3434. if (err .ne. NF_ERANGE)
  3435. + call errore('Range error: ', err)
  3436. end if
  3437. else
  3438. if (err .ne. 0 .and. err .ne. NF_ERANGE)
  3439. + call errore('OK or Range error: ', err)
  3440. end if
  3441. do 11, j = 1, nels
  3442. if (inRange3(expect(j),var_type(i),
  3443. + NFT_DOUBLE) .and.
  3444. + in_internal_range(NFT_DOUBLE,
  3445. + expect(j))) then
  3446. val = value(j)
  3447. if (.not.equal(val, expect(j),
  3448. + var_type(i), NFT_DOUBLE)) then
  3449. call error(
  3450. + 'value read not that expected')
  3451. if (verbose) then
  3452. call error(' ')
  3453. call errori('varid: ', i)
  3454. call errorc('var_name: ',
  3455. + var_name(i))
  3456. call errori('element number: ',
  3457. + j)
  3458. call errord('expect: ',
  3459. + expect(j))
  3460. call errord('got: ', val)
  3461. end if
  3462. else
  3463. nok = nok + 1
  3464. end if
  3465. end if
  3466. 11 continue
  3467. else
  3468. if (nels .gt. 0 .and. err .ne. NF_ECHAR)
  3469. + call errore('wrong type: ', err)
  3470. end if
  3471. 7 continue
  3472. 5 continue
  3473. 1 continue
  3474. err = nf_close(ncid)
  3475. if (err .ne. 0)
  3476. + call errore('nf_close: ', err)
  3477. call print_nok(nok)
  3478. end
  3479. subroutine test_nf_get_varm_text()
  3480. implicit none
  3481. #include "tests.inc"
  3482. integer ncid
  3483. integer d
  3484. integer i
  3485. integer j
  3486. integer k
  3487. integer m
  3488. integer err
  3489. logical allInExtRange
  3490. logical allInIntRange
  3491. integer nels
  3492. integer nslabs
  3493. integer nstarts
  3494. integer nok
  3495. integer start(MAX_RANK)
  3496. integer edge(MAX_RANK)
  3497. integer index(MAX_RANK)
  3498. integer index2(MAX_RANK)
  3499. integer mid(MAX_RANK)
  3500. integer count(MAX_RANK)
  3501. integer sstride(MAX_RANK)
  3502. integer stride(MAX_RANK)
  3503. integer imap(MAX_RANK)
  3504. logical canConvert
  3505. character value(MAX_NELS)
  3506. doubleprecision expect(MAX_NELS)
  3507. doubleprecision val
  3508. integer udshift
  3509. nok = 0
  3510. err = nf_open(testfile, NF_NOWRITE, ncid)
  3511. if (err .ne. 0)
  3512. + call errore('nf_open: ', err)
  3513. do 1, i = 1, NVARS
  3514. canConvert = (var_type(i) .eq. NF_CHAR) .eqv.
  3515. + (NFT_TEXT .eq. NFT_TEXT)
  3516. if (.not.(var_rank(i) .le. MAX_RANK)) stop 'assertion'
  3517. if (.not.(var_nels(i) .le. MAX_NELS)) stop 'assertion'
  3518. do 2, j = 1, var_rank(i)
  3519. start(j) = 1
  3520. edge(j) = 1
  3521. stride(j) = 1
  3522. imap(j) = 1
  3523. 2 continue
  3524. err = nf_get_varm_text(BAD_ID, i, start, edge,
  3525. + stride, imap,
  3526. + value)
  3527. if (err .ne. NF_EBADID)
  3528. + call errore('bad ncid: ', err)
  3529. err = nf_get_varm_text(ncid, BAD_VARID, start,
  3530. + edge, stride,
  3531. + imap, value)
  3532. if (err .ne. NF_ENOTVAR)
  3533. + call errore('bad var id: ', err)
  3534. do 3, j = 1, var_rank(i)
  3535. start(j) = var_shape(j,i) + 1
  3536. err = nf_get_varm_text(ncid, i, start,
  3537. + edge, stride,
  3538. + imap, value)
  3539. if (.not. canConvert) then
  3540. if (err .ne. NF_ECHAR)
  3541. + call errore('conversion: ', err)
  3542. else
  3543. if (err .ne. NF_EINVALCOORDS)
  3544. + call errore('bad index: ', err)
  3545. endif
  3546. start(j) = 1
  3547. edge(j) = var_shape(j,i) + 1
  3548. err = nf_get_varm_text(ncid, i, start,
  3549. + edge, stride,
  3550. + imap, value)
  3551. if (.not. canConvert) then
  3552. if (err .ne. NF_ECHAR)
  3553. + call errore('conversion: ', err)
  3554. else
  3555. if (err .ne. NF_EEDGE)
  3556. + call errore('bad edge: ', err)
  3557. endif
  3558. edge(j) = 1
  3559. stride(j) = 0
  3560. err = nf_get_varm_text(ncid, i, start,
  3561. + edge, stride,
  3562. + imap, value)
  3563. if (.not. canConvert) then
  3564. if (err .ne. NF_ECHAR)
  3565. + call errore('conversion: ', err)
  3566. else
  3567. if (err .ne. NF_ESTRIDE)
  3568. + call errore('bad stride: ', err)
  3569. endif
  3570. stride(j) = 1
  3571. 3 continue
  3572. C Choose a random point dividing each dim into 2 parts
  3573. C get 2^rank (nslabs) slabs so defined
  3574. nslabs = 1
  3575. do 4, j = 1, var_rank(i)
  3576. mid(j) = roll( var_shape(j,i) )
  3577. nslabs = nslabs * 2
  3578. 4 continue
  3579. C /* bits of k determine whether to get lower or upper part
  3580. C * of dim
  3581. C * choose random stride from 1 to edge */
  3582. do 5, k = 1, nslabs
  3583. nstarts = 1
  3584. do 6, j = 1, var_rank(i)
  3585. if (mod(udshift((k-1), -(j-1)), 2) .ne. 0) then
  3586. start(j) = 1
  3587. edge(j) = mid(j)
  3588. else
  3589. start(j) = 1 + mid(j)
  3590. edge(j) = var_shape(j,i) - mid(j)
  3591. end if
  3592. if (edge(j) .gt. 0) then
  3593. stride(j) = 1+roll(edge(j))
  3594. else
  3595. stride(j) = 1
  3596. end if
  3597. sstride(j) = stride(j)
  3598. nstarts = nstarts * stride(j)
  3599. 6 continue
  3600. do 7, m = 1, nstarts
  3601. err = index2indexes(m, var_rank(i), sstride, index)
  3602. if (err .ne. 0)
  3603. + call error('error in index2indexes')
  3604. nels = 1
  3605. do 8, j = 1, var_rank(i)
  3606. count(j) = 1 + (edge(j) - index(j)) /
  3607. + stride(j)
  3608. nels = nels * count(j)
  3609. index(j) = index(j) + start(j) - 1
  3610. 8 continue
  3611. C Random choice of forward or backward
  3612. C /* TODO
  3613. C if ( roll(2) ) then
  3614. C for (j = 0 j < var_rank(i) j++) {
  3615. C index(j) += (count(j) - 1) * stride(j)
  3616. C stride(j) = -stride(j)
  3617. C }
  3618. C end if
  3619. C */
  3620. if (var_rank(i) .gt. 0) then
  3621. imap(1) = 1
  3622. do 9, j = 2, var_rank(i)
  3623. imap(j) = imap(j-1) * count(j-1)
  3624. 9 continue
  3625. end if
  3626. allInIntRange = .true.
  3627. allInExtRange = .true.
  3628. do 10, j = 1, nels
  3629. err = index2indexes(j, var_rank(i), count,
  3630. + index2)
  3631. if (err .ne. 0)
  3632. + call error('error in index2indexes 1')
  3633. do 11, d = 1, var_rank(i)
  3634. index2(d) = index(d) + (index2(d)-1) *
  3635. + stride(d)
  3636. 11 continue
  3637. expect(j) = hash4(var_type(i), var_rank(i),
  3638. + index2, NFT_TEXT)
  3639. if (inRange3(expect(j),var_type(i),
  3640. + NFT_TEXT)) then
  3641. allInIntRange =
  3642. + allInIntRange .and.
  3643. + in_internal_range(NFT_TEXT,
  3644. + expect(j))
  3645. else
  3646. allInExtRange = .false.
  3647. end if
  3648. 10 continue
  3649. err = nf_get_varm_text(ncid,i,index,count,
  3650. + stride,imap,
  3651. + value)
  3652. if (canConvert) then
  3653. if (allInExtRange) then
  3654. if (allInIntRange) then
  3655. if (err .ne. 0)
  3656. + call error(nf_strerror(err))
  3657. else
  3658. if (err .ne. NF_ERANGE)
  3659. + call errore('Range error: ', err)
  3660. end if
  3661. else
  3662. if (err .ne. 0 .and. err .ne. NF_ERANGE)
  3663. + call errore('OK or Range error: ', err)
  3664. end if
  3665. do 12, j = 1, nels
  3666. if (inRange3(expect(j),var_type(i),
  3667. + NFT_TEXT) .and.
  3668. + in_internal_range(NFT_TEXT,
  3669. + expect(j))) then
  3670. val = ichar(value(j))
  3671. if (.not.equal(val, expect(j),
  3672. + var_type(i),
  3673. + NFT_TEXT)) then
  3674. call error(
  3675. + 'value read not that expected')
  3676. if (verbose) then
  3677. call error(' ')
  3678. call errori('varid: ', i)
  3679. call errorc('var_name: ',
  3680. + var_name(i))
  3681. call errori('element number: ',
  3682. + j)
  3683. call errord('expect: ',
  3684. + expect(j))
  3685. call errord('got: ', val)
  3686. end if
  3687. else
  3688. nok = nok + 1
  3689. end if
  3690. end if
  3691. 12 continue
  3692. else
  3693. if (nels .gt. 0 .and. err .ne. NF_ECHAR)
  3694. + call errore('wrong type: ', err)
  3695. end if
  3696. 7 continue
  3697. 5 continue
  3698. 1 continue
  3699. err = nf_close(ncid)
  3700. if (err .ne. 0)
  3701. + call errore('nf_close: ', err)
  3702. call print_nok(nok)
  3703. end
  3704. #ifdef NF_INT1_T
  3705. subroutine test_nf_get_varm_int1()
  3706. implicit none
  3707. #include "tests.inc"
  3708. integer ncid
  3709. integer d
  3710. integer i
  3711. integer j
  3712. integer k
  3713. integer m
  3714. integer err
  3715. logical allInExtRange
  3716. logical allInIntRange
  3717. integer nels
  3718. integer nslabs
  3719. integer nstarts
  3720. integer nok
  3721. integer start(MAX_RANK)
  3722. integer edge(MAX_RANK)
  3723. integer index(MAX_RANK)
  3724. integer index2(MAX_RANK)
  3725. integer mid(MAX_RANK)
  3726. integer count(MAX_RANK)
  3727. integer sstride(MAX_RANK)
  3728. integer stride(MAX_RANK)
  3729. integer imap(MAX_RANK)
  3730. logical canConvert
  3731. NF_INT1_T value(MAX_NELS)
  3732. doubleprecision expect(MAX_NELS)
  3733. doubleprecision val
  3734. integer udshift
  3735. nok = 0
  3736. err = nf_open(testfile, NF_NOWRITE, ncid)
  3737. if (err .ne. 0)
  3738. + call errore('nf_open: ', err)
  3739. do 1, i = 1, NVARS
  3740. canConvert = (var_type(i) .eq. NF_CHAR) .eqv.
  3741. + (NFT_INT1 .eq. NFT_TEXT)
  3742. if (.not.(var_rank(i) .le. MAX_RANK)) stop 'assertion'
  3743. if (.not.(var_nels(i) .le. MAX_NELS)) stop 'assertion'
  3744. do 2, j = 1, var_rank(i)
  3745. start(j) = 1
  3746. edge(j) = 1
  3747. stride(j) = 1
  3748. imap(j) = 1
  3749. 2 continue
  3750. err = nf_get_varm_int1(BAD_ID, i, start, edge,
  3751. + stride, imap,
  3752. + value)
  3753. if (err .ne. NF_EBADID)
  3754. + call errore('bad ncid: ', err)
  3755. err = nf_get_varm_int1(ncid, BAD_VARID, start,
  3756. + edge, stride,
  3757. + imap, value)
  3758. if (err .ne. NF_ENOTVAR)
  3759. + call errore('bad var id: ', err)
  3760. do 3, j = 1, var_rank(i)
  3761. start(j) = var_shape(j,i) + 1
  3762. err = nf_get_varm_int1(ncid, i, start,
  3763. + edge, stride,
  3764. + imap, value)
  3765. if (.not. canConvert) then
  3766. if (err .ne. NF_ECHAR)
  3767. + call errore('conversion: ', err)
  3768. else
  3769. if (err .ne. NF_EINVALCOORDS)
  3770. + call errore('bad index: ', err)
  3771. endif
  3772. start(j) = 1
  3773. edge(j) = var_shape(j,i) + 1
  3774. err = nf_get_varm_int1(ncid, i, start,
  3775. + edge, stride,
  3776. + imap, value)
  3777. if (.not. canConvert) then
  3778. if (err .ne. NF_ECHAR)
  3779. + call errore('conversion: ', err)
  3780. else
  3781. if (err .ne. NF_EEDGE)
  3782. + call errore('bad edge: ', err)
  3783. endif
  3784. edge(j) = 1
  3785. stride(j) = 0
  3786. err = nf_get_varm_int1(ncid, i, start,
  3787. + edge, stride,
  3788. + imap, value)
  3789. if (.not. canConvert) then
  3790. if (err .ne. NF_ECHAR)
  3791. + call errore('conversion: ', err)
  3792. else
  3793. if (err .ne. NF_ESTRIDE)
  3794. + call errore('bad stride: ', err)
  3795. endif
  3796. stride(j) = 1
  3797. 3 continue
  3798. C Choose a random point dividing each dim into 2 parts
  3799. C get 2^rank (nslabs) slabs so defined
  3800. nslabs = 1
  3801. do 4, j = 1, var_rank(i)
  3802. mid(j) = roll( var_shape(j,i) )
  3803. nslabs = nslabs * 2
  3804. 4 continue
  3805. C /* bits of k determine whether to get lower or upper part
  3806. C * of dim
  3807. C * choose random stride from 1 to edge */
  3808. do 5, k = 1, nslabs
  3809. nstarts = 1
  3810. do 6, j = 1, var_rank(i)
  3811. if (mod(udshift((k-1), -(j-1)), 2) .ne. 0) then
  3812. start(j) = 1
  3813. edge(j) = mid(j)
  3814. else
  3815. start(j) = 1 + mid(j)
  3816. edge(j) = var_shape(j,i) - mid(j)
  3817. end if
  3818. if (edge(j) .gt. 0) then
  3819. stride(j) = 1+roll(edge(j))
  3820. else
  3821. stride(j) = 1
  3822. end if
  3823. sstride(j) = stride(j)
  3824. nstarts = nstarts * stride(j)
  3825. 6 continue
  3826. do 7, m = 1, nstarts
  3827. err = index2indexes(m, var_rank(i), sstride, index)
  3828. if (err .ne. 0)
  3829. + call error('error in index2indexes')
  3830. nels = 1
  3831. do 8, j = 1, var_rank(i)
  3832. count(j) = 1 + (edge(j) - index(j)) /
  3833. + stride(j)
  3834. nels = nels * count(j)
  3835. index(j) = index(j) + start(j) - 1
  3836. 8 continue
  3837. C Random choice of forward or backward
  3838. C /* TODO
  3839. C if ( roll(2) ) then
  3840. C for (j = 0 j < var_rank(i) j++) {
  3841. C index(j) += (count(j) - 1) * stride(j)
  3842. C stride(j) = -stride(j)
  3843. C }
  3844. C end if
  3845. C */
  3846. if (var_rank(i) .gt. 0) then
  3847. imap(1) = 1
  3848. do 9, j = 2, var_rank(i)
  3849. imap(j) = imap(j-1) * count(j-1)
  3850. 9 continue
  3851. end if
  3852. allInIntRange = .true.
  3853. allInExtRange = .true.
  3854. do 10, j = 1, nels
  3855. err = index2indexes(j, var_rank(i), count,
  3856. + index2)
  3857. if (err .ne. 0)
  3858. + call error('error in index2indexes 1')
  3859. do 11, d = 1, var_rank(i)
  3860. index2(d) = index(d) + (index2(d)-1) *
  3861. + stride(d)
  3862. 11 continue
  3863. expect(j) = hash4(var_type(i), var_rank(i),
  3864. + index2, NFT_INT1)
  3865. if (inRange3(expect(j),var_type(i),
  3866. + NFT_INT1)) then
  3867. allInIntRange =
  3868. + allInIntRange .and.
  3869. + in_internal_range(NFT_INT1,
  3870. + expect(j))
  3871. else
  3872. allInExtRange = .false.
  3873. end if
  3874. 10 continue
  3875. err = nf_get_varm_int1(ncid,i,index,count,
  3876. + stride,imap,
  3877. + value)
  3878. if (canConvert) then
  3879. if (allInExtRange) then
  3880. if (allInIntRange) then
  3881. if (err .ne. 0)
  3882. + call error(nf_strerror(err))
  3883. else
  3884. if (err .ne. NF_ERANGE)
  3885. + call errore('Range error: ', err)
  3886. end if
  3887. else
  3888. if (err .ne. 0 .and. err .ne. NF_ERANGE)
  3889. + call errore('OK or Range error: ', err)
  3890. end if
  3891. do 12, j = 1, nels
  3892. if (inRange3(expect(j),var_type(i),
  3893. + NFT_INT1) .and.
  3894. + in_internal_range(NFT_INT1,
  3895. + expect(j))) then
  3896. val = value(j)
  3897. if (.not.equal(val, expect(j),
  3898. + var_type(i),
  3899. + NFT_INT1)) then
  3900. call error(
  3901. + 'value read not that expected')
  3902. if (verbose) then
  3903. call error(' ')
  3904. call errori('varid: ', i)
  3905. call errorc('var_name: ',
  3906. + var_name(i))
  3907. call errori('element number: ',
  3908. + j)
  3909. call errord('expect: ',
  3910. + expect(j))
  3911. call errord('got: ', val)
  3912. end if
  3913. else
  3914. nok = nok + 1
  3915. end if
  3916. end if
  3917. 12 continue
  3918. else
  3919. if (nels .gt. 0 .and. err .ne. NF_ECHAR)
  3920. + call errore('wrong type: ', err)
  3921. end if
  3922. 7 continue
  3923. 5 continue
  3924. 1 continue
  3925. err = nf_close(ncid)
  3926. if (err .ne. 0)
  3927. + call errore('nf_close: ', err)
  3928. call print_nok(nok)
  3929. end
  3930. #endif
  3931. #ifdef NF_INT2_T
  3932. subroutine test_nf_get_varm_int2()
  3933. implicit none
  3934. #include "tests.inc"
  3935. integer ncid
  3936. integer d
  3937. integer i
  3938. integer j
  3939. integer k
  3940. integer m
  3941. integer err
  3942. logical allInExtRange
  3943. logical allInIntRange
  3944. integer nels
  3945. integer nslabs
  3946. integer nstarts
  3947. integer nok
  3948. integer start(MAX_RANK)
  3949. integer edge(MAX_RANK)
  3950. integer index(MAX_RANK)
  3951. integer index2(MAX_RANK)
  3952. integer mid(MAX_RANK)
  3953. integer count(MAX_RANK)
  3954. integer sstride(MAX_RANK)
  3955. integer stride(MAX_RANK)
  3956. integer imap(MAX_RANK)
  3957. logical canConvert
  3958. NF_INT2_T value(MAX_NELS)
  3959. doubleprecision expect(MAX_NELS)
  3960. doubleprecision val
  3961. integer udshift
  3962. nok = 0
  3963. err = nf_open(testfile, NF_NOWRITE, ncid)
  3964. if (err .ne. 0)
  3965. + call errore('nf_open: ', err)
  3966. do 1, i = 1, NVARS
  3967. canConvert = (var_type(i) .eq. NF_CHAR) .eqv.
  3968. + (NFT_INT2 .eq. NFT_TEXT)
  3969. if (.not.(var_rank(i) .le. MAX_RANK)) stop 'assertion'
  3970. if (.not.(var_nels(i) .le. MAX_NELS)) stop 'assertion'
  3971. do 2, j = 1, var_rank(i)
  3972. start(j) = 1
  3973. edge(j) = 1
  3974. stride(j) = 1
  3975. imap(j) = 1
  3976. 2 continue
  3977. err = nf_get_varm_int2(BAD_ID, i, start, edge,
  3978. + stride, imap,
  3979. + value)
  3980. if (err .ne. NF_EBADID)
  3981. + call errore('bad ncid: ', err)
  3982. err = nf_get_varm_int2(ncid, BAD_VARID, start,
  3983. + edge, stride,
  3984. + imap, value)
  3985. if (err .ne. NF_ENOTVAR)
  3986. + call errore('bad var id: ', err)
  3987. do 3, j = 1, var_rank(i)
  3988. start(j) = var_shape(j,i) + 1
  3989. err = nf_get_varm_int2(ncid, i, start,
  3990. + edge, stride,
  3991. + imap, value)
  3992. if (.not. canConvert) then
  3993. if (err .ne. NF_ECHAR)
  3994. + call errore('conversion: ', err)
  3995. else
  3996. if (err .ne. NF_EINVALCOORDS)
  3997. + call errore('bad index: ', err)
  3998. endif
  3999. start(j) = 1
  4000. edge(j) = var_shape(j,i) + 1
  4001. err = nf_get_varm_int2(ncid, i, start,
  4002. + edge, stride,
  4003. + imap, value)
  4004. if (.not. canConvert) then
  4005. if (err .ne. NF_ECHAR)
  4006. + call errore('conversion: ', err)
  4007. else
  4008. if (err .ne. NF_EEDGE)
  4009. + call errore('bad edge: ', err)
  4010. endif
  4011. edge(j) = 1
  4012. stride(j) = 0
  4013. err = nf_get_varm_int2(ncid, i, start,
  4014. + edge, stride,
  4015. + imap, value)
  4016. if (.not. canConvert) then
  4017. if (err .ne. NF_ECHAR)
  4018. + call errore('conversion: ', err)
  4019. else
  4020. if (err .ne. NF_ESTRIDE)
  4021. + call errore('bad stride: ', err)
  4022. endif
  4023. stride(j) = 1
  4024. 3 continue
  4025. C Choose a random point dividing each dim into 2 parts
  4026. C get 2^rank (nslabs) slabs so defined
  4027. nslabs = 1
  4028. do 4, j = 1, var_rank(i)
  4029. mid(j) = roll( var_shape(j,i) )
  4030. nslabs = nslabs * 2
  4031. 4 continue
  4032. C /* bits of k determine whether to get lower or upper part
  4033. C * of dim
  4034. C * choose random stride from 1 to edge */
  4035. do 5, k = 1, nslabs
  4036. nstarts = 1
  4037. do 6, j = 1, var_rank(i)
  4038. if (mod(udshift((k-1), -(j-1)), 2) .ne. 0) then
  4039. start(j) = 1
  4040. edge(j) = mid(j)
  4041. else
  4042. start(j) = 1 + mid(j)
  4043. edge(j) = var_shape(j,i) - mid(j)
  4044. end if
  4045. if (edge(j) .gt. 0) then
  4046. stride(j) = 1+roll(edge(j))
  4047. else
  4048. stride(j) = 1
  4049. end if
  4050. sstride(j) = stride(j)
  4051. nstarts = nstarts * stride(j)
  4052. 6 continue
  4053. do 7, m = 1, nstarts
  4054. err = index2indexes(m, var_rank(i), sstride, index)
  4055. if (err .ne. 0)
  4056. + call error('error in index2indexes')
  4057. nels = 1
  4058. do 8, j = 1, var_rank(i)
  4059. count(j) = 1 + (edge(j) - index(j)) /
  4060. + stride(j)
  4061. nels = nels * count(j)
  4062. index(j) = index(j) + start(j) - 1
  4063. 8 continue
  4064. C Random choice of forward or backward
  4065. C /* TODO
  4066. C if ( roll(2) ) then
  4067. C for (j = 0 j < var_rank(i) j++) {
  4068. C index(j) += (count(j) - 1) * stride(j)
  4069. C stride(j) = -stride(j)
  4070. C }
  4071. C end if
  4072. C */
  4073. if (var_rank(i) .gt. 0) then
  4074. imap(1) = 1
  4075. do 9, j = 2, var_rank(i)
  4076. imap(j) = imap(j-1) * count(j-1)
  4077. 9 continue
  4078. end if
  4079. allInIntRange = .true.
  4080. allInExtRange = .true.
  4081. do 10, j = 1, nels
  4082. err = index2indexes(j, var_rank(i), count,
  4083. + index2)
  4084. if (err .ne. 0)
  4085. + call error('error in index2indexes 1')
  4086. do 11, d = 1, var_rank(i)
  4087. index2(d) = index(d) + (index2(d)-1) *
  4088. + stride(d)
  4089. 11 continue
  4090. expect(j) = hash4(var_type(i), var_rank(i),
  4091. + index2, NFT_INT2)
  4092. if (inRange3(expect(j),var_type(i),
  4093. + NFT_INT2)) then
  4094. allInIntRange =
  4095. + allInIntRange .and.
  4096. + in_internal_range(NFT_INT2,
  4097. + expect(j))
  4098. else
  4099. allInExtRange = .false.
  4100. end if
  4101. 10 continue
  4102. err = nf_get_varm_int2(ncid,i,index,count,
  4103. + stride,imap,
  4104. + value)
  4105. if (canConvert) then
  4106. if (allInExtRange) then
  4107. if (allInIntRange) then
  4108. if (err .ne. 0)
  4109. + call error(nf_strerror(err))
  4110. else
  4111. if (err .ne. NF_ERANGE)
  4112. + call errore('Range error: ', err)
  4113. end if
  4114. else
  4115. if (err .ne. 0 .and. err .ne. NF_ERANGE)
  4116. + call errore('OK or Range error: ', err)
  4117. end if
  4118. do 12, j = 1, nels
  4119. if (inRange3(expect(j),var_type(i),
  4120. + NFT_INT2) .and.
  4121. + in_internal_range(NFT_INT2,
  4122. + expect(j))) then
  4123. val = value(j)
  4124. if (.not.equal(val, expect(j),
  4125. + var_type(i),
  4126. + NFT_INT2)) then
  4127. call error(
  4128. + 'value read not that expected')
  4129. if (verbose) then
  4130. call error(' ')
  4131. call errori('varid: ', i)
  4132. call errorc('var_name: ',
  4133. + var_name(i))
  4134. call errori('element number: ',
  4135. + j)
  4136. call errord('expect: ',
  4137. + expect(j))
  4138. call errord('got: ', val)
  4139. end if
  4140. else
  4141. nok = nok + 1
  4142. end if
  4143. end if
  4144. 12 continue
  4145. else
  4146. if (nels .gt. 0 .and. err .ne. NF_ECHAR)
  4147. + call errore('wrong type: ', err)
  4148. end if
  4149. 7 continue
  4150. 5 continue
  4151. 1 continue
  4152. err = nf_close(ncid)
  4153. if (err .ne. 0)
  4154. + call errore('nf_close: ', err)
  4155. call print_nok(nok)
  4156. end
  4157. #endif
  4158. subroutine test_nf_get_varm_int()
  4159. implicit none
  4160. #include "tests.inc"
  4161. integer ncid
  4162. integer d
  4163. integer i
  4164. integer j
  4165. integer k
  4166. integer m
  4167. integer err
  4168. logical allInExtRange
  4169. logical allInIntRange
  4170. integer nels
  4171. integer nslabs
  4172. integer nstarts
  4173. integer nok
  4174. integer start(MAX_RANK)
  4175. integer edge(MAX_RANK)
  4176. integer index(MAX_RANK)
  4177. integer index2(MAX_RANK)
  4178. integer mid(MAX_RANK)
  4179. integer count(MAX_RANK)
  4180. integer sstride(MAX_RANK)
  4181. integer stride(MAX_RANK)
  4182. integer imap(MAX_RANK)
  4183. logical canConvert
  4184. integer value(MAX_NELS)
  4185. doubleprecision expect(MAX_NELS)
  4186. doubleprecision val
  4187. integer udshift
  4188. nok = 0
  4189. err = nf_open(testfile, NF_NOWRITE, ncid)
  4190. if (err .ne. 0)
  4191. + call errore('nf_open: ', err)
  4192. do 1, i = 1, NVARS
  4193. canConvert = (var_type(i) .eq. NF_CHAR) .eqv.
  4194. + (NFT_INT .eq. NFT_TEXT)
  4195. if (.not.(var_rank(i) .le. MAX_RANK)) stop 'assertion'
  4196. if (.not.(var_nels(i) .le. MAX_NELS)) stop 'assertion'
  4197. do 2, j = 1, var_rank(i)
  4198. start(j) = 1
  4199. edge(j) = 1
  4200. stride(j) = 1
  4201. imap(j) = 1
  4202. 2 continue
  4203. err = nf_get_varm_int(BAD_ID, i, start, edge,
  4204. + stride, imap,
  4205. + value)
  4206. if (err .ne. NF_EBADID)
  4207. + call errore('bad ncid: ', err)
  4208. err = nf_get_varm_int(ncid, BAD_VARID, start,
  4209. + edge, stride,
  4210. + imap, value)
  4211. if (err .ne. NF_ENOTVAR)
  4212. + call errore('bad var id: ', err)
  4213. do 3, j = 1, var_rank(i)
  4214. start(j) = var_shape(j,i) + 1
  4215. err = nf_get_varm_int(ncid, i, start,
  4216. + edge, stride,
  4217. + imap, value)
  4218. if (.not. canConvert) then
  4219. if (err .ne. NF_ECHAR)
  4220. + call errore('conversion: ', err)
  4221. else
  4222. if (err .ne. NF_EINVALCOORDS)
  4223. + call errore('bad index: ', err)
  4224. endif
  4225. start(j) = 1
  4226. edge(j) = var_shape(j,i) + 1
  4227. err = nf_get_varm_int(ncid, i, start,
  4228. + edge, stride,
  4229. + imap, value)
  4230. if (.not. canConvert) then
  4231. if (err .ne. NF_ECHAR)
  4232. + call errore('conversion: ', err)
  4233. else
  4234. if (err .ne. NF_EEDGE)
  4235. + call errore('bad edge: ', err)
  4236. endif
  4237. edge(j) = 1
  4238. stride(j) = 0
  4239. err = nf_get_varm_int(ncid, i, start,
  4240. + edge, stride,
  4241. + imap, value)
  4242. if (.not. canConvert) then
  4243. if (err .ne. NF_ECHAR)
  4244. + call errore('conversion: ', err)
  4245. else
  4246. if (err .ne. NF_ESTRIDE)
  4247. + call errore('bad stride: ', err)
  4248. endif
  4249. stride(j) = 1
  4250. 3 continue
  4251. C Choose a random point dividing each dim into 2 parts
  4252. C get 2^rank (nslabs) slabs so defined
  4253. nslabs = 1
  4254. do 4, j = 1, var_rank(i)
  4255. mid(j) = roll( var_shape(j,i) )
  4256. nslabs = nslabs * 2
  4257. 4 continue
  4258. C /* bits of k determine whether to get lower or upper part
  4259. C * of dim
  4260. C * choose random stride from 1 to edge */
  4261. do 5, k = 1, nslabs
  4262. nstarts = 1
  4263. do 6, j = 1, var_rank(i)
  4264. if (mod(udshift((k-1), -(j-1)), 2) .ne. 0) then
  4265. start(j) = 1
  4266. edge(j) = mid(j)
  4267. else
  4268. start(j) = 1 + mid(j)
  4269. edge(j) = var_shape(j,i) - mid(j)
  4270. end if
  4271. if (edge(j) .gt. 0) then
  4272. stride(j) = 1+roll(edge(j))
  4273. else
  4274. stride(j) = 1
  4275. end if
  4276. sstride(j) = stride(j)
  4277. nstarts = nstarts * stride(j)
  4278. 6 continue
  4279. do 7, m = 1, nstarts
  4280. err = index2indexes(m, var_rank(i), sstride, index)
  4281. if (err .ne. 0)
  4282. + call error('error in index2indexes')
  4283. nels = 1
  4284. do 8, j = 1, var_rank(i)
  4285. count(j) = 1 + (edge(j) - index(j)) /
  4286. + stride(j)
  4287. nels = nels * count(j)
  4288. index(j) = index(j) + start(j) - 1
  4289. 8 continue
  4290. C Random choice of forward or backward
  4291. C /* TODO
  4292. C if ( roll(2) ) then
  4293. C for (j = 0 j < var_rank(i) j++) {
  4294. C index(j) += (count(j) - 1) * stride(j)
  4295. C stride(j) = -stride(j)
  4296. C }
  4297. C end if
  4298. C */
  4299. if (var_rank(i) .gt. 0) then
  4300. imap(1) = 1
  4301. do 9, j = 2, var_rank(i)
  4302. imap(j) = imap(j-1) * count(j-1)
  4303. 9 continue
  4304. end if
  4305. allInIntRange = .true.
  4306. allInExtRange = .true.
  4307. do 10, j = 1, nels
  4308. err = index2indexes(j, var_rank(i), count,
  4309. + index2)
  4310. if (err .ne. 0)
  4311. + call error('error in index2indexes 1')
  4312. do 11, d = 1, var_rank(i)
  4313. index2(d) = index(d) + (index2(d)-1) *
  4314. + stride(d)
  4315. 11 continue
  4316. expect(j) = hash4(var_type(i), var_rank(i),
  4317. + index2, NFT_INT)
  4318. if (inRange3(expect(j),var_type(i),
  4319. + NFT_INT)) then
  4320. allInIntRange =
  4321. + allInIntRange .and.
  4322. + in_internal_range(NFT_INT,
  4323. + expect(j))
  4324. else
  4325. allInExtRange = .false.
  4326. end if
  4327. 10 continue
  4328. err = nf_get_varm_int(ncid,i,index,count,
  4329. + stride,imap,
  4330. + value)
  4331. if (canConvert) then
  4332. if (allInExtRange) then
  4333. if (allInIntRange) then
  4334. if (err .ne. 0)
  4335. + call error(nf_strerror(err))
  4336. else
  4337. if (err .ne. NF_ERANGE)
  4338. + call errore('Range error: ', err)
  4339. end if
  4340. else
  4341. if (err .ne. 0 .and. err .ne. NF_ERANGE)
  4342. + call errore('OK or Range error: ', err)
  4343. end if
  4344. do 12, j = 1, nels
  4345. if (inRange3(expect(j),var_type(i),
  4346. + NFT_INT) .and.
  4347. + in_internal_range(NFT_INT,
  4348. + expect(j))) then
  4349. val = value(j)
  4350. if (.not.equal(val, expect(j),
  4351. + var_type(i),
  4352. + NFT_INT)) then
  4353. call error(
  4354. + 'value read not that expected')
  4355. if (verbose) then
  4356. call error(' ')
  4357. call errori('varid: ', i)
  4358. call errorc('var_name: ',
  4359. + var_name(i))
  4360. call errori('element number: ',
  4361. + j)
  4362. call errord('expect: ',
  4363. + expect(j))
  4364. call errord('got: ', val)
  4365. end if
  4366. else
  4367. nok = nok + 1
  4368. end if
  4369. end if
  4370. 12 continue
  4371. else
  4372. if (nels .gt. 0 .and. err .ne. NF_ECHAR)
  4373. + call errore('wrong type: ', err)
  4374. end if
  4375. 7 continue
  4376. 5 continue
  4377. 1 continue
  4378. err = nf_close(ncid)
  4379. if (err .ne. 0)
  4380. + call errore('nf_close: ', err)
  4381. call print_nok(nok)
  4382. end
  4383. subroutine test_nf_get_varm_real()
  4384. implicit none
  4385. #include "tests.inc"
  4386. integer ncid
  4387. integer d
  4388. integer i
  4389. integer j
  4390. integer k
  4391. integer m
  4392. integer err
  4393. logical allInExtRange
  4394. logical allInIntRange
  4395. integer nels
  4396. integer nslabs
  4397. integer nstarts
  4398. integer nok
  4399. integer start(MAX_RANK)
  4400. integer edge(MAX_RANK)
  4401. integer index(MAX_RANK)
  4402. integer index2(MAX_RANK)
  4403. integer mid(MAX_RANK)
  4404. integer count(MAX_RANK)
  4405. integer sstride(MAX_RANK)
  4406. integer stride(MAX_RANK)
  4407. integer imap(MAX_RANK)
  4408. logical canConvert
  4409. real value(MAX_NELS)
  4410. doubleprecision expect(MAX_NELS)
  4411. doubleprecision val
  4412. integer udshift
  4413. nok = 0
  4414. err = nf_open(testfile, NF_NOWRITE, ncid)
  4415. if (err .ne. 0)
  4416. + call errore('nf_open: ', err)
  4417. do 1, i = 1, NVARS
  4418. canConvert = (var_type(i) .eq. NF_CHAR) .eqv.
  4419. + (NFT_REAL .eq. NFT_TEXT)
  4420. if (.not.(var_rank(i) .le. MAX_RANK)) stop 'assertion'
  4421. if (.not.(var_nels(i) .le. MAX_NELS)) stop 'assertion'
  4422. do 2, j = 1, var_rank(i)
  4423. start(j) = 1
  4424. edge(j) = 1
  4425. stride(j) = 1
  4426. imap(j) = 1
  4427. 2 continue
  4428. err = nf_get_varm_real(BAD_ID, i, start, edge,
  4429. + stride, imap,
  4430. + value)
  4431. if (err .ne. NF_EBADID)
  4432. + call errore('bad ncid: ', err)
  4433. err = nf_get_varm_real(ncid, BAD_VARID, start,
  4434. + edge, stride,
  4435. + imap, value)
  4436. if (err .ne. NF_ENOTVAR)
  4437. + call errore('bad var id: ', err)
  4438. do 3, j = 1, var_rank(i)
  4439. start(j) = var_shape(j,i) + 1
  4440. err = nf_get_varm_real(ncid, i, start,
  4441. + edge, stride,
  4442. + imap, value)
  4443. if (.not. canConvert) then
  4444. if (err .ne. NF_ECHAR)
  4445. + call errore('conversion: ', err)
  4446. else
  4447. if (err .ne. NF_EINVALCOORDS)
  4448. + call errore('bad index: ', err)
  4449. endif
  4450. start(j) = 1
  4451. edge(j) = var_shape(j,i) + 1
  4452. err = nf_get_varm_real(ncid, i, start,
  4453. + edge, stride,
  4454. + imap, value)
  4455. if (.not. canConvert) then
  4456. if (err .ne. NF_ECHAR)
  4457. + call errore('conversion: ', err)
  4458. else
  4459. if (err .ne. NF_EEDGE)
  4460. + call errore('bad edge: ', err)
  4461. endif
  4462. edge(j) = 1
  4463. stride(j) = 0
  4464. err = nf_get_varm_real(ncid, i, start,
  4465. + edge, stride,
  4466. + imap, value)
  4467. if (.not. canConvert) then
  4468. if (err .ne. NF_ECHAR)
  4469. + call errore('conversion: ', err)
  4470. else
  4471. if (err .ne. NF_ESTRIDE)
  4472. + call errore('bad stride: ', err)
  4473. endif
  4474. stride(j) = 1
  4475. 3 continue
  4476. C Choose a random point dividing each dim into 2 parts
  4477. C get 2^rank (nslabs) slabs so defined
  4478. nslabs = 1
  4479. do 4, j = 1, var_rank(i)
  4480. mid(j) = roll( var_shape(j,i) )
  4481. nslabs = nslabs * 2
  4482. 4 continue
  4483. C /* bits of k determine whether to get lower or upper part
  4484. C * of dim
  4485. C * choose random stride from 1 to edge */
  4486. do 5, k = 1, nslabs
  4487. nstarts = 1
  4488. do 6, j = 1, var_rank(i)
  4489. if (mod(udshift((k-1), -(j-1)), 2) .ne. 0) then
  4490. start(j) = 1
  4491. edge(j) = mid(j)
  4492. else
  4493. start(j) = 1 + mid(j)
  4494. edge(j) = var_shape(j,i) - mid(j)
  4495. end if
  4496. if (edge(j) .gt. 0) then
  4497. stride(j) = 1+roll(edge(j))
  4498. else
  4499. stride(j) = 1
  4500. end if
  4501. sstride(j) = stride(j)
  4502. nstarts = nstarts * stride(j)
  4503. 6 continue
  4504. do 7, m = 1, nstarts
  4505. err = index2indexes(m, var_rank(i), sstride, index)
  4506. if (err .ne. 0)
  4507. + call error('error in index2indexes')
  4508. nels = 1
  4509. do 8, j = 1, var_rank(i)
  4510. count(j) = 1 + (edge(j) - index(j)) /
  4511. + stride(j)
  4512. nels = nels * count(j)
  4513. index(j) = index(j) + start(j) - 1
  4514. 8 continue
  4515. C Random choice of forward or backward
  4516. C /* TODO
  4517. C if ( roll(2) ) then
  4518. C for (j = 0 j < var_rank(i) j++) {
  4519. C index(j) += (count(j) - 1) * stride(j)
  4520. C stride(j) = -stride(j)
  4521. C }
  4522. C end if
  4523. C */
  4524. if (var_rank(i) .gt. 0) then
  4525. imap(1) = 1
  4526. do 9, j = 2, var_rank(i)
  4527. imap(j) = imap(j-1) * count(j-1)
  4528. 9 continue
  4529. end if
  4530. allInIntRange = .true.
  4531. allInExtRange = .true.
  4532. do 10, j = 1, nels
  4533. err = index2indexes(j, var_rank(i), count,
  4534. + index2)
  4535. if (err .ne. 0)
  4536. + call error('error in index2indexes 1')
  4537. do 11, d = 1, var_rank(i)
  4538. index2(d) = index(d) + (index2(d)-1) *
  4539. + stride(d)
  4540. 11 continue
  4541. expect(j) = hash4(var_type(i), var_rank(i),
  4542. + index2, NFT_REAL)
  4543. if (inRange3(expect(j),var_type(i),
  4544. + NFT_REAL)) then
  4545. allInIntRange =
  4546. + allInIntRange .and.
  4547. + in_internal_range(NFT_REAL,
  4548. + expect(j))
  4549. else
  4550. allInExtRange = .false.
  4551. end if
  4552. 10 continue
  4553. err = nf_get_varm_real(ncid,i,index,count,
  4554. + stride,imap,
  4555. + value)
  4556. if (canConvert) then
  4557. if (allInExtRange) then
  4558. if (allInIntRange) then
  4559. if (err .ne. 0)
  4560. + call error(nf_strerror(err))
  4561. else
  4562. if (err .ne. NF_ERANGE)
  4563. + call errore('Range error: ', err)
  4564. end if
  4565. else
  4566. if (err .ne. 0 .and. err .ne. NF_ERANGE)
  4567. + call errore('OK or Range error: ', err)
  4568. end if
  4569. do 12, j = 1, nels
  4570. if (inRange3(expect(j),var_type(i),
  4571. + NFT_REAL) .and.
  4572. + in_internal_range(NFT_REAL,
  4573. + expect(j))) then
  4574. val = value(j)
  4575. if (.not.equal(val, expect(j),
  4576. + var_type(i),
  4577. + NFT_REAL)) then
  4578. call error(
  4579. + 'value read not that expected')
  4580. if (verbose) then
  4581. call error(' ')
  4582. call errori('varid: ', i)
  4583. call errorc('var_name: ',
  4584. + var_name(i))
  4585. call errori('element number: ',
  4586. + j)
  4587. call errord('expect: ',
  4588. + expect(j))
  4589. call errord('got: ', val)
  4590. end if
  4591. else
  4592. nok = nok + 1
  4593. end if
  4594. end if
  4595. 12 continue
  4596. else
  4597. if (nels .gt. 0 .and. err .ne. NF_ECHAR)
  4598. + call errore('wrong type: ', err)
  4599. end if
  4600. 7 continue
  4601. 5 continue
  4602. 1 continue
  4603. err = nf_close(ncid)
  4604. if (err .ne. 0)
  4605. + call errore('nf_close: ', err)
  4606. call print_nok(nok)
  4607. end
  4608. subroutine test_nf_get_varm_double()
  4609. implicit none
  4610. #include "tests.inc"
  4611. integer ncid
  4612. integer d
  4613. integer i
  4614. integer j
  4615. integer k
  4616. integer m
  4617. integer err
  4618. logical allInExtRange
  4619. logical allInIntRange
  4620. integer nels
  4621. integer nslabs
  4622. integer nstarts
  4623. integer nok
  4624. integer start(MAX_RANK)
  4625. integer edge(MAX_RANK)
  4626. integer index(MAX_RANK)
  4627. integer index2(MAX_RANK)
  4628. integer mid(MAX_RANK)
  4629. integer count(MAX_RANK)
  4630. integer sstride(MAX_RANK)
  4631. integer stride(MAX_RANK)
  4632. integer imap(MAX_RANK)
  4633. logical canConvert
  4634. doubleprecision value(MAX_NELS)
  4635. doubleprecision expect(MAX_NELS)
  4636. doubleprecision val
  4637. integer udshift
  4638. nok = 0
  4639. err = nf_open(testfile, NF_NOWRITE, ncid)
  4640. if (err .ne. 0)
  4641. + call errore('nf_open: ', err)
  4642. do 1, i = 1, NVARS
  4643. canConvert = (var_type(i) .eq. NF_CHAR) .eqv.
  4644. + (NFT_DOUBLE .eq. NFT_TEXT)
  4645. if (.not.(var_rank(i) .le. MAX_RANK)) stop 'assertion'
  4646. if (.not.(var_nels(i) .le. MAX_NELS)) stop 'assertion'
  4647. do 2, j = 1, var_rank(i)
  4648. start(j) = 1
  4649. edge(j) = 1
  4650. stride(j) = 1
  4651. imap(j) = 1
  4652. 2 continue
  4653. err = nf_get_varm_double(BAD_ID, i, start, edge,
  4654. + stride, imap,
  4655. + value)
  4656. if (err .ne. NF_EBADID)
  4657. + call errore('bad ncid: ', err)
  4658. err = nf_get_varm_double(ncid, BAD_VARID, start,
  4659. + edge, stride,
  4660. + imap, value)
  4661. if (err .ne. NF_ENOTVAR)
  4662. + call errore('bad var id: ', err)
  4663. do 3, j = 1, var_rank(i)
  4664. start(j) = var_shape(j,i) + 1
  4665. err = nf_get_varm_double(ncid, i, start,
  4666. + edge, stride,
  4667. + imap, value)
  4668. if (.not. canConvert) then
  4669. if (err .ne. NF_ECHAR)
  4670. + call errore('conversion: ', err)
  4671. else
  4672. if (err .ne. NF_EINVALCOORDS)
  4673. + call errore('bad index: ', err)
  4674. endif
  4675. start(j) = 1
  4676. edge(j) = var_shape(j,i) + 1
  4677. err = nf_get_varm_double(ncid, i, start,
  4678. + edge, stride,
  4679. + imap, value)
  4680. if (.not. canConvert) then
  4681. if (err .ne. NF_ECHAR)
  4682. + call errore('conversion: ', err)
  4683. else
  4684. if (err .ne. NF_EEDGE)
  4685. + call errore('bad edge: ', err)
  4686. endif
  4687. edge(j) = 1
  4688. stride(j) = 0
  4689. err = nf_get_varm_double(ncid, i, start,
  4690. + edge, stride,
  4691. + imap, value)
  4692. if (.not. canConvert) then
  4693. if (err .ne. NF_ECHAR)
  4694. + call errore('conversion: ', err)
  4695. else
  4696. if (err .ne. NF_ESTRIDE)
  4697. + call errore('bad stride: ', err)
  4698. endif
  4699. stride(j) = 1
  4700. 3 continue
  4701. C Choose a random point dividing each dim into 2 parts
  4702. C get 2^rank (nslabs) slabs so defined
  4703. nslabs = 1
  4704. do 4, j = 1, var_rank(i)
  4705. mid(j) = roll( var_shape(j,i) )
  4706. nslabs = nslabs * 2
  4707. 4 continue
  4708. C /* bits of k determine whether to get lower or upper part
  4709. C * of dim
  4710. C * choose random stride from 1 to edge */
  4711. do 5, k = 1, nslabs
  4712. nstarts = 1
  4713. do 6, j = 1, var_rank(i)
  4714. if (mod(udshift((k-1), -(j-1)), 2) .ne. 0) then
  4715. start(j) = 1
  4716. edge(j) = mid(j)
  4717. else
  4718. start(j) = 1 + mid(j)
  4719. edge(j) = var_shape(j,i) - mid(j)
  4720. end if
  4721. if (edge(j) .gt. 0) then
  4722. stride(j) = 1+roll(edge(j))
  4723. else
  4724. stride(j) = 1
  4725. end if
  4726. sstride(j) = stride(j)
  4727. nstarts = nstarts * stride(j)
  4728. 6 continue
  4729. do 7, m = 1, nstarts
  4730. err = index2indexes(m, var_rank(i), sstride, index)
  4731. if (err .ne. 0)
  4732. + call error('error in index2indexes')
  4733. nels = 1
  4734. do 8, j = 1, var_rank(i)
  4735. count(j) = 1 + (edge(j) - index(j)) /
  4736. + stride(j)
  4737. nels = nels * count(j)
  4738. index(j) = index(j) + start(j) - 1
  4739. 8 continue
  4740. C Random choice of forward or backward
  4741. C /* TODO
  4742. C if ( roll(2) ) then
  4743. C for (j = 0 j < var_rank(i) j++) {
  4744. C index(j) += (count(j) - 1) * stride(j)
  4745. C stride(j) = -stride(j)
  4746. C }
  4747. C end if
  4748. C */
  4749. if (var_rank(i) .gt. 0) then
  4750. imap(1) = 1
  4751. do 9, j = 2, var_rank(i)
  4752. imap(j) = imap(j-1) * count(j-1)
  4753. 9 continue
  4754. end if
  4755. allInIntRange = .true.
  4756. allInExtRange = .true.
  4757. do 10, j = 1, nels
  4758. err = index2indexes(j, var_rank(i), count,
  4759. + index2)
  4760. if (err .ne. 0)
  4761. + call error('error in index2indexes 1')
  4762. do 11, d = 1, var_rank(i)
  4763. index2(d) = index(d) + (index2(d)-1) *
  4764. + stride(d)
  4765. 11 continue
  4766. expect(j) = hash4(var_type(i), var_rank(i),
  4767. + index2, NFT_DOUBLE)
  4768. if (inRange3(expect(j),var_type(i),
  4769. + NFT_DOUBLE)) then
  4770. allInIntRange =
  4771. + allInIntRange .and.
  4772. + in_internal_range(NFT_DOUBLE,
  4773. + expect(j))
  4774. else
  4775. allInExtRange = .false.
  4776. end if
  4777. 10 continue
  4778. err = nf_get_varm_double(ncid,i,index,count,
  4779. + stride,imap,
  4780. + value)
  4781. if (canConvert) then
  4782. if (allInExtRange) then
  4783. if (allInIntRange) then
  4784. if (err .ne. 0)
  4785. + call error(nf_strerror(err))
  4786. else
  4787. if (err .ne. NF_ERANGE)
  4788. + call errore('Range error: ', err)
  4789. end if
  4790. else
  4791. if (err .ne. 0 .and. err .ne. NF_ERANGE)
  4792. + call errore('OK or Range error: ', err)
  4793. end if
  4794. do 12, j = 1, nels
  4795. if (inRange3(expect(j),var_type(i),
  4796. + NFT_DOUBLE) .and.
  4797. + in_internal_range(NFT_DOUBLE,
  4798. + expect(j))) then
  4799. val = value(j)
  4800. if (.not.equal(val, expect(j),
  4801. + var_type(i),
  4802. + NFT_DOUBLE)) then
  4803. call error(
  4804. + 'value read not that expected')
  4805. if (verbose) then
  4806. call error(' ')
  4807. call errori('varid: ', i)
  4808. call errorc('var_name: ',
  4809. + var_name(i))
  4810. call errori('element number: ',
  4811. + j)
  4812. call errord('expect: ',
  4813. + expect(j))
  4814. call errord('got: ', val)
  4815. end if
  4816. else
  4817. nok = nok + 1
  4818. end if
  4819. end if
  4820. 12 continue
  4821. else
  4822. if (nels .gt. 0 .and. err .ne. NF_ECHAR)
  4823. + call errore('wrong type: ', err)
  4824. end if
  4825. 7 continue
  4826. 5 continue
  4827. 1 continue
  4828. err = nf_close(ncid)
  4829. if (err .ne. 0)
  4830. + call errore('nf_close: ', err)
  4831. call print_nok(nok)
  4832. end
  4833. subroutine test_nf_get_att_text()
  4834. implicit none
  4835. #include "tests.inc"
  4836. integer ncid
  4837. integer i
  4838. integer j
  4839. integer k
  4840. integer err
  4841. integer ndx(1)
  4842. logical allInExtRange
  4843. logical allInIntRange
  4844. logical canConvert
  4845. character value(MAX_NELS)
  4846. doubleprecision expect(MAX_NELS)
  4847. integer nok
  4848. doubleprecision val
  4849. nok = 0
  4850. err = nf_open(testfile, NF_NOWRITE, ncid)
  4851. if (err .ne. 0)
  4852. + call errore('nf_open: ', err)
  4853. do 1, i = 0, NVARS
  4854. do 2, j = 1, NATTS(i)
  4855. canConvert = (ATT_TYPE(j,i) .eq. NF_CHAR) .eqv.
  4856. + (NFT_TEXT .eq. NFT_TEXT)
  4857. err = nf_get_att_text(BAD_ID, i,
  4858. + ATT_NAME(j,i),
  4859. + value)
  4860. if (err .ne. NF_EBADID)
  4861. + call errore('bad ncid: ', err)
  4862. err = nf_get_att_text(ncid, BAD_VARID,
  4863. + ATT_NAME(j,i),
  4864. + value)
  4865. if (err .ne. NF_ENOTVAR)
  4866. + call errore('bad var id: ', err)
  4867. err = nf_get_att_text(ncid, i, 'noSuch', value)
  4868. if (err .ne. NF_ENOTATT)
  4869. + call errore('Bad attribute name: ', err)
  4870. allInIntRange = .true.
  4871. allInExtRange = .true.
  4872. do 3, k = 1, ATT_LEN(j,i)
  4873. ndx(1) = k
  4874. expect(k) = hash4(ATT_TYPE(j,i), -1, ndx,
  4875. + NFT_TEXT)
  4876. if (inRange3(expect(k),ATT_TYPE(j,i),
  4877. + NFT_TEXT)) then
  4878. allInIntRange =
  4879. + allInIntRange .and.
  4880. + in_internal_range(NFT_TEXT, expect(k))
  4881. else
  4882. allInExtRange = .false.
  4883. end if
  4884. 3 continue
  4885. err = nf_get_att_text(ncid, i, ATT_NAME(j,i), value)
  4886. if (canConvert .or. ATT_LEN(j,i) .eq. 0) then
  4887. if (allInExtRange) then
  4888. if (allInIntRange) then
  4889. if (err .ne. 0)
  4890. + call errore('nf_get_att_text: ', err)
  4891. else
  4892. if (err .ne. NF_ERANGE)
  4893. + call errore('Range error: ', err)
  4894. end if
  4895. else
  4896. if (err .ne. 0 .and. err .ne. NF_ERANGE)
  4897. + call errore('OK or Range error: ',
  4898. + err)
  4899. end if
  4900. do 4, k = 1, ATT_LEN(j,i)
  4901. if (inRange3(expect(k),ATT_TYPE(j,i),
  4902. + NFT_TEXT) .and.
  4903. + in_internal_range(NFT_TEXT,
  4904. + expect(k))) then
  4905. val = ichar(value(k))
  4906. if (.not.equal(val, expect(k),
  4907. + ATT_TYPE(j,i),
  4908. + NFT_TEXT))then
  4909. call error(
  4910. + 'value read not that expected')
  4911. if (verbose) then
  4912. call error(' ')
  4913. call errori('varid: ', i)
  4914. call errorc('att_name: ',
  4915. + ATT_NAME(j,i))
  4916. call errori('element number: ', k)
  4917. call errord('expect: ', expect(k))
  4918. call errord('got: ', val)
  4919. end if
  4920. else
  4921. nok = nok + 1
  4922. end if
  4923. end if
  4924. 4 continue
  4925. else
  4926. if (err .ne. NF_ECHAR)
  4927. + call errore('wrong type: ', err)
  4928. end if
  4929. 2 continue
  4930. 1 continue
  4931. err = nf_close(ncid)
  4932. if (err .ne. 0)
  4933. + call errore('nf_close: ', err)
  4934. call print_nok(nok)
  4935. end
  4936. #ifdef NF_INT1_T
  4937. subroutine test_nf_get_att_int1()
  4938. implicit none
  4939. #include "tests.inc"
  4940. integer ncid
  4941. integer i
  4942. integer j
  4943. integer k
  4944. integer err
  4945. integer ndx(1)
  4946. logical allInExtRange
  4947. logical allInIntRange
  4948. logical canConvert
  4949. NF_INT1_T value(MAX_NELS)
  4950. doubleprecision expect(MAX_NELS)
  4951. integer nok
  4952. doubleprecision val
  4953. nok = 0
  4954. err = nf_open(testfile, NF_NOWRITE, ncid)
  4955. if (err .ne. 0)
  4956. + call errore('nf_open: ', err)
  4957. do 1, i = 0, NVARS
  4958. do 2, j = 1, NATTS(i)
  4959. canConvert = (ATT_TYPE(j,i) .eq. NF_CHAR) .eqv.
  4960. + (NFT_INT1 .eq. NFT_TEXT)
  4961. err = nf_get_att_int1(BAD_ID, i,
  4962. + ATT_NAME(j,i),
  4963. + value)
  4964. if (err .ne. NF_EBADID)
  4965. + call errore('bad ncid: ', err)
  4966. err = nf_get_att_int1(ncid, BAD_VARID,
  4967. + ATT_NAME(j,i),
  4968. + value)
  4969. if (err .ne. NF_ENOTVAR)
  4970. + call errore('bad var id: ', err)
  4971. err = nf_get_att_int1(ncid, i, 'noSuch', value)
  4972. if (err .ne. NF_ENOTATT)
  4973. + call errore('Bad attribute name: ', err)
  4974. allInIntRange = .true.
  4975. allInExtRange = .true.
  4976. do 3, k = 1, ATT_LEN(j,i)
  4977. ndx(1) = k
  4978. expect(k) = hash4(ATT_TYPE(j,i), -1, ndx,
  4979. + NFT_INT1)
  4980. if (inRange3(expect(k),ATT_TYPE(j,i),
  4981. + NFT_INT1)) then
  4982. allInIntRange =
  4983. + allInIntRange .and.
  4984. + in_internal_range(NFT_INT1, expect(k))
  4985. else
  4986. allInExtRange = .false.
  4987. end if
  4988. 3 continue
  4989. err = nf_get_att_int1(ncid, i, ATT_NAME(j,i), value)
  4990. if (canConvert .or. ATT_LEN(j,i) .eq. 0) then
  4991. if (allInExtRange) then
  4992. if (allInIntRange) then
  4993. if (err .ne. 0)
  4994. + call errore('nf_get_att_int1: ', err)
  4995. else
  4996. if (err .ne. NF_ERANGE)
  4997. + call errore('Range error: ', err)
  4998. end if
  4999. else
  5000. if (err .ne. 0 .and. err .ne. NF_ERANGE)
  5001. + call errore('OK or Range error: ',
  5002. + err)
  5003. end if
  5004. do 4, k = 1, ATT_LEN(j,i)
  5005. if (inRange3(expect(k),ATT_TYPE(j,i),
  5006. + NFT_INT1) .and.
  5007. + in_internal_range(NFT_INT1,
  5008. + expect(k))) then
  5009. val = value(k)
  5010. if (.not.equal(val, expect(k),
  5011. + ATT_TYPE(j,i),
  5012. + NFT_INT1))then
  5013. call error(
  5014. + 'value read not that expected')
  5015. if (verbose) then
  5016. call error(' ')
  5017. call errori('varid: ', i)
  5018. call errorc('att_name: ',
  5019. + ATT_NAME(j,i))
  5020. call errori('element number: ', k)
  5021. call errord('expect: ', expect(k))
  5022. call errord('got: ', val)
  5023. end if
  5024. else
  5025. nok = nok + 1
  5026. end if
  5027. end if
  5028. 4 continue
  5029. else
  5030. if (err .ne. NF_ECHAR)
  5031. + call errore('wrong type: ', err)
  5032. end if
  5033. 2 continue
  5034. 1 continue
  5035. err = nf_close(ncid)
  5036. if (err .ne. 0)
  5037. + call errore('nf_close: ', err)
  5038. call print_nok(nok)
  5039. end
  5040. #endif
  5041. #ifdef NF_INT2_T
  5042. subroutine test_nf_get_att_int2()
  5043. implicit none
  5044. #include "tests.inc"
  5045. integer ncid
  5046. integer i
  5047. integer j
  5048. integer k
  5049. integer err
  5050. integer ndx(1)
  5051. logical allInExtRange
  5052. logical allInIntRange
  5053. logical canConvert
  5054. NF_INT2_T value(MAX_NELS)
  5055. doubleprecision expect(MAX_NELS)
  5056. integer nok
  5057. doubleprecision val
  5058. nok = 0
  5059. err = nf_open(testfile, NF_NOWRITE, ncid)
  5060. if (err .ne. 0)
  5061. + call errore('nf_open: ', err)
  5062. do 1, i = 0, NVARS
  5063. do 2, j = 1, NATTS(i)
  5064. canConvert = (ATT_TYPE(j,i) .eq. NF_CHAR) .eqv.
  5065. + (NFT_INT2 .eq. NFT_TEXT)
  5066. err = nf_get_att_int2(BAD_ID, i,
  5067. + ATT_NAME(j,i),
  5068. + value)
  5069. if (err .ne. NF_EBADID)
  5070. + call errore('bad ncid: ', err)
  5071. err = nf_get_att_int2(ncid, BAD_VARID,
  5072. + ATT_NAME(j,i),
  5073. + value)
  5074. if (err .ne. NF_ENOTVAR)
  5075. + call errore('bad var id: ', err)
  5076. err = nf_get_att_int2(ncid, i, 'noSuch', value)
  5077. if (err .ne. NF_ENOTATT)
  5078. + call errore('Bad attribute name: ', err)
  5079. allInIntRange = .true.
  5080. allInExtRange = .true.
  5081. do 3, k = 1, ATT_LEN(j,i)
  5082. ndx(1) = k
  5083. expect(k) = hash4(ATT_TYPE(j,i), -1, ndx,
  5084. + NFT_INT2)
  5085. if (inRange3(expect(k),ATT_TYPE(j,i),
  5086. + NFT_INT2)) then
  5087. allInIntRange =
  5088. + allInIntRange .and.
  5089. + in_internal_range(NFT_INT2, expect(k))
  5090. else
  5091. allInExtRange = .false.
  5092. end if
  5093. 3 continue
  5094. err = nf_get_att_int2(ncid, i, ATT_NAME(j,i), value)
  5095. if (canConvert .or. ATT_LEN(j,i) .eq. 0) then
  5096. if (allInExtRange) then
  5097. if (allInIntRange) then
  5098. if (err .ne. 0)
  5099. + call errore('nf_get_att_int2: ', err)
  5100. else
  5101. if (err .ne. NF_ERANGE)
  5102. + call errore('Range error: ', err)
  5103. end if
  5104. else
  5105. if (err .ne. 0 .and. err .ne. NF_ERANGE)
  5106. + call errore('OK or Range error: ',
  5107. + err)
  5108. end if
  5109. do 4, k = 1, ATT_LEN(j,i)
  5110. if (inRange3(expect(k),ATT_TYPE(j,i),
  5111. + NFT_INT2) .and.
  5112. + in_internal_range(NFT_INT2,
  5113. + expect(k))) then
  5114. val = value(k)
  5115. if (.not.equal(val, expect(k),
  5116. + ATT_TYPE(j,i),
  5117. + NFT_INT2))then
  5118. call error(
  5119. + 'value read not that expected')
  5120. if (verbose) then
  5121. call error(' ')
  5122. call errori('varid: ', i)
  5123. call errorc('att_name: ',
  5124. + ATT_NAME(j,i))
  5125. call errori('element number: ', k)
  5126. call errord('expect: ', expect(k))
  5127. call errord('got: ', val)
  5128. end if
  5129. else
  5130. nok = nok + 1
  5131. end if
  5132. end if
  5133. 4 continue
  5134. else
  5135. if (err .ne. NF_ECHAR)
  5136. + call errore('wrong type: ', err)
  5137. end if
  5138. 2 continue
  5139. 1 continue
  5140. err = nf_close(ncid)
  5141. if (err .ne. 0)
  5142. + call errore('nf_close: ', err)
  5143. call print_nok(nok)
  5144. end
  5145. #endif
  5146. subroutine test_nf_get_att_int()
  5147. implicit none
  5148. #include "tests.inc"
  5149. integer ncid
  5150. integer i
  5151. integer j
  5152. integer k
  5153. integer err
  5154. integer ndx(1)
  5155. logical allInExtRange
  5156. logical allInIntRange
  5157. logical canConvert
  5158. integer value(MAX_NELS)
  5159. doubleprecision expect(MAX_NELS)
  5160. integer nok
  5161. doubleprecision val
  5162. nok = 0
  5163. err = nf_open(testfile, NF_NOWRITE, ncid)
  5164. if (err .ne. 0)
  5165. + call errore('nf_open: ', err)
  5166. do 1, i = 0, NVARS
  5167. do 2, j = 1, NATTS(i)
  5168. canConvert = (ATT_TYPE(j,i) .eq. NF_CHAR) .eqv.
  5169. + (NFT_INT .eq. NFT_TEXT)
  5170. err = nf_get_att_int(BAD_ID, i,
  5171. + ATT_NAME(j,i),
  5172. + value)
  5173. if (err .ne. NF_EBADID)
  5174. + call errore('bad ncid: ', err)
  5175. err = nf_get_att_int(ncid, BAD_VARID,
  5176. + ATT_NAME(j,i),
  5177. + value)
  5178. if (err .ne. NF_ENOTVAR)
  5179. + call errore('bad var id: ', err)
  5180. err = nf_get_att_int(ncid, i, 'noSuch', value)
  5181. if (err .ne. NF_ENOTATT)
  5182. + call errore('Bad attribute name: ', err)
  5183. allInIntRange = .true.
  5184. allInExtRange = .true.
  5185. do 3, k = 1, ATT_LEN(j,i)
  5186. ndx(1) = k
  5187. expect(k) = hash4(ATT_TYPE(j,i), -1, ndx,
  5188. + NFT_INT)
  5189. if (inRange3(expect(k),ATT_TYPE(j,i),
  5190. + NFT_INT)) then
  5191. allInIntRange =
  5192. + allInIntRange .and.
  5193. + in_internal_range(NFT_INT, expect(k))
  5194. else
  5195. allInExtRange = .false.
  5196. end if
  5197. 3 continue
  5198. err = nf_get_att_int(ncid, i, ATT_NAME(j,i), value)
  5199. if (canConvert .or. ATT_LEN(j,i) .eq. 0) then
  5200. if (allInExtRange) then
  5201. if (allInIntRange) then
  5202. if (err .ne. 0)
  5203. + call errore('nf_get_att_int: ', err)
  5204. else
  5205. if (err .ne. NF_ERANGE)
  5206. + call errore('Range error: ', err)
  5207. end if
  5208. else
  5209. if (err .ne. 0 .and. err .ne. NF_ERANGE)
  5210. + call errore('OK or Range error: ',
  5211. + err)
  5212. end if
  5213. do 4, k = 1, ATT_LEN(j,i)
  5214. if (inRange3(expect(k),ATT_TYPE(j,i),
  5215. + NFT_INT) .and.
  5216. + in_internal_range(NFT_INT,
  5217. + expect(k))) then
  5218. val = value(k)
  5219. if (.not.equal(val, expect(k),
  5220. + ATT_TYPE(j,i),
  5221. + NFT_INT))then
  5222. call error(
  5223. + 'value read not that expected')
  5224. if (verbose) then
  5225. call error(' ')
  5226. call errori('varid: ', i)
  5227. call errorc('att_name: ',
  5228. + ATT_NAME(j,i))
  5229. call errori('element number: ', k)
  5230. call errord('expect: ', expect(k))
  5231. call errord('got: ', val)
  5232. end if
  5233. else
  5234. nok = nok + 1
  5235. end if
  5236. end if
  5237. 4 continue
  5238. else
  5239. if (err .ne. NF_ECHAR)
  5240. + call errore('wrong type: ', err)
  5241. end if
  5242. 2 continue
  5243. 1 continue
  5244. err = nf_close(ncid)
  5245. if (err .ne. 0)
  5246. + call errore('nf_close: ', err)
  5247. call print_nok(nok)
  5248. end
  5249. subroutine test_nf_get_att_real()
  5250. implicit none
  5251. #include "tests.inc"
  5252. integer ncid
  5253. integer i
  5254. integer j
  5255. integer k
  5256. integer err
  5257. integer ndx(1)
  5258. logical allInExtRange
  5259. logical allInIntRange
  5260. logical canConvert
  5261. real value(MAX_NELS)
  5262. doubleprecision expect(MAX_NELS)
  5263. integer nok
  5264. doubleprecision val
  5265. nok = 0
  5266. err = nf_open(testfile, NF_NOWRITE, ncid)
  5267. if (err .ne. 0)
  5268. + call errore('nf_open: ', err)
  5269. do 1, i = 0, NVARS
  5270. do 2, j = 1, NATTS(i)
  5271. canConvert = (ATT_TYPE(j,i) .eq. NF_CHAR) .eqv.
  5272. + (NFT_REAL .eq. NFT_TEXT)
  5273. err = nf_get_att_real(BAD_ID, i,
  5274. + ATT_NAME(j,i),
  5275. + value)
  5276. if (err .ne. NF_EBADID)
  5277. + call errore('bad ncid: ', err)
  5278. err = nf_get_att_real(ncid, BAD_VARID,
  5279. + ATT_NAME(j,i),
  5280. + value)
  5281. if (err .ne. NF_ENOTVAR)
  5282. + call errore('bad var id: ', err)
  5283. err = nf_get_att_real(ncid, i, 'noSuch', value)
  5284. if (err .ne. NF_ENOTATT)
  5285. + call errore('Bad attribute name: ', err)
  5286. allInIntRange = .true.
  5287. allInExtRange = .true.
  5288. do 3, k = 1, ATT_LEN(j,i)
  5289. ndx(1) = k
  5290. expect(k) = hash4(ATT_TYPE(j,i), -1, ndx,
  5291. + NFT_REAL)
  5292. if (inRange3(expect(k),ATT_TYPE(j,i),
  5293. + NFT_REAL)) then
  5294. allInIntRange =
  5295. + allInIntRange .and.
  5296. + in_internal_range(NFT_REAL, expect(k))
  5297. else
  5298. allInExtRange = .false.
  5299. end if
  5300. 3 continue
  5301. err = nf_get_att_real(ncid, i, ATT_NAME(j,i), value)
  5302. if (canConvert .or. ATT_LEN(j,i) .eq. 0) then
  5303. if (allInExtRange) then
  5304. if (allInIntRange) then
  5305. if (err .ne. 0)
  5306. + call errore('nf_get_att_real: ', err)
  5307. else
  5308. if (err .ne. NF_ERANGE)
  5309. + call errore('Range error: ', err)
  5310. end if
  5311. else
  5312. if (err .ne. 0 .and. err .ne. NF_ERANGE)
  5313. + call errore('OK or Range error: ',
  5314. + err)
  5315. end if
  5316. do 4, k = 1, ATT_LEN(j,i)
  5317. if (inRange3(expect(k),ATT_TYPE(j,i),
  5318. + NFT_REAL) .and.
  5319. + in_internal_range(NFT_REAL,
  5320. + expect(k))) then
  5321. val = value(k)
  5322. if (.not.equal(val, expect(k),
  5323. + ATT_TYPE(j,i),
  5324. + NFT_REAL))then
  5325. call error(
  5326. + 'value read not that expected')
  5327. if (verbose) then
  5328. call error(' ')
  5329. call errori('varid: ', i)
  5330. call errorc('att_name: ',
  5331. + ATT_NAME(j,i))
  5332. call errori('element number: ', k)
  5333. call errord('expect: ', expect(k))
  5334. call errord('got: ', val)
  5335. end if
  5336. else
  5337. nok = nok + 1
  5338. end if
  5339. end if
  5340. 4 continue
  5341. else
  5342. if (err .ne. NF_ECHAR)
  5343. + call errore('wrong type: ', err)
  5344. end if
  5345. 2 continue
  5346. 1 continue
  5347. err = nf_close(ncid)
  5348. if (err .ne. 0)
  5349. + call errore('nf_close: ', err)
  5350. call print_nok(nok)
  5351. end
  5352. subroutine test_nf_get_att_double()
  5353. implicit none
  5354. #include "tests.inc"
  5355. integer ncid
  5356. integer i
  5357. integer j
  5358. integer k
  5359. integer err
  5360. integer ndx(1)
  5361. logical allInExtRange
  5362. logical allInIntRange
  5363. logical canConvert
  5364. doubleprecision value(MAX_NELS)
  5365. doubleprecision expect(MAX_NELS)
  5366. integer nok
  5367. doubleprecision val
  5368. nok = 0
  5369. err = nf_open(testfile, NF_NOWRITE, ncid)
  5370. if (err .ne. 0)
  5371. + call errore('nf_open: ', err)
  5372. do 1, i = 0, NVARS
  5373. do 2, j = 1, NATTS(i)
  5374. canConvert = (ATT_TYPE(j,i) .eq. NF_CHAR) .eqv.
  5375. + (NFT_DOUBLE .eq. NFT_TEXT)
  5376. err = nf_get_att_double(BAD_ID, i,
  5377. + ATT_NAME(j,i),
  5378. + value)
  5379. if (err .ne. NF_EBADID)
  5380. + call errore('bad ncid: ', err)
  5381. err = nf_get_att_double(ncid, BAD_VARID,
  5382. + ATT_NAME(j,i),
  5383. + value)
  5384. if (err .ne. NF_ENOTVAR)
  5385. + call errore('bad var id: ', err)
  5386. err = nf_get_att_double(ncid, i, 'noSuch', value)
  5387. if (err .ne. NF_ENOTATT)
  5388. + call errore('Bad attribute name: ', err)
  5389. allInIntRange = .true.
  5390. allInExtRange = .true.
  5391. do 3, k = 1, ATT_LEN(j,i)
  5392. ndx(1) = k
  5393. expect(k) = hash4(ATT_TYPE(j,i), -1, ndx,
  5394. + NFT_DOUBLE)
  5395. if (inRange3(expect(k),ATT_TYPE(j,i),
  5396. + NFT_DOUBLE)) then
  5397. allInIntRange =
  5398. + allInIntRange .and.
  5399. + in_internal_range(NFT_DOUBLE, expect(k))
  5400. else
  5401. allInExtRange = .false.
  5402. end if
  5403. 3 continue
  5404. err = nf_get_att_double(ncid, i, ATT_NAME(j,i), value)
  5405. if (canConvert .or. ATT_LEN(j,i) .eq. 0) then
  5406. if (allInExtRange) then
  5407. if (allInIntRange) then
  5408. if (err .ne. 0)
  5409. + call errore('nf_get_att_double: ', err)
  5410. else
  5411. if (err .ne. NF_ERANGE)
  5412. + call errore('Range error: ', err)
  5413. end if
  5414. else
  5415. if (err .ne. 0 .and. err .ne. NF_ERANGE)
  5416. + call errore('OK or Range error: ',
  5417. + err)
  5418. end if
  5419. do 4, k = 1, ATT_LEN(j,i)
  5420. if (inRange3(expect(k),ATT_TYPE(j,i),
  5421. + NFT_DOUBLE) .and.
  5422. + in_internal_range(NFT_DOUBLE,
  5423. + expect(k))) then
  5424. val = value(k)
  5425. if (.not.equal(val, expect(k),
  5426. + ATT_TYPE(j,i),
  5427. + NFT_DOUBLE))then
  5428. call error(
  5429. + 'value read not that expected')
  5430. if (verbose) then
  5431. call error(' ')
  5432. call errori('varid: ', i)
  5433. call errorc('att_name: ',
  5434. + ATT_NAME(j,i))
  5435. call errori('element number: ', k)
  5436. call errord('expect: ', expect(k))
  5437. call errord('got: ', val)
  5438. end if
  5439. else
  5440. nok = nok + 1
  5441. end if
  5442. end if
  5443. 4 continue
  5444. else
  5445. if (err .ne. NF_ECHAR)
  5446. + call errore('wrong type: ', err)
  5447. end if
  5448. 2 continue
  5449. 1 continue
  5450. err = nf_close(ncid)
  5451. if (err .ne. 0)
  5452. + call errore('nf_close: ', err)
  5453. call print_nok(nok)
  5454. end