PageRenderTime 76ms CodeModel.GetById 34ms RepoModel.GetById 0ms app.codeStats 2ms

/other/netcdf_write_matrix/src/nf_test/test_put.F

https://github.com/jbeezley/wrf-fire
FORTRAN Legacy | 6641 lines | 5687 code | 340 blank | 614 comment | 987 complexity | 2de8200fc76adb62ac8910218694729c MD5 | raw file
Possible License(s): AGPL-1.0

Large files files are truncated, but you can click here to view the full file

  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_put.m4,v 1.15 2005/01/12 19:52:13 ed Exp $
  6. C********************************************************************
  7. C
  8. C ensure hash value within range for internal TYPE
  9. C
  10. function hash_text(type, rank, index, itype)
  11. implicit none
  12. #include "tests.inc"
  13. integer type
  14. integer rank
  15. integer index(1)
  16. integer itype
  17. doubleprecision minimum
  18. doubleprecision maximum
  19. minimum = internal_min(itype)
  20. maximum = internal_max(itype)
  21. hash_text = max(minimum, min(maximum, hash4( type, rank,
  22. + index, itype)))
  23. end
  24. #ifdef NF_INT1_T
  25. C
  26. C ensure hash value within range for internal TYPE
  27. C
  28. function hash_int1(type, rank, index, itype)
  29. implicit none
  30. #include "tests.inc"
  31. integer type
  32. integer rank
  33. integer index(1)
  34. integer itype
  35. doubleprecision minimum
  36. doubleprecision maximum
  37. minimum = internal_min(itype)
  38. maximum = internal_max(itype)
  39. hash_int1 = max(minimum, min(maximum, hash4( type, rank,
  40. + index, itype)))
  41. end
  42. #endif
  43. #ifdef NF_INT2_T
  44. C
  45. C ensure hash value within range for internal TYPE
  46. C
  47. function hash_int2(type, rank, index, itype)
  48. implicit none
  49. #include "tests.inc"
  50. integer type
  51. integer rank
  52. integer index(1)
  53. integer itype
  54. doubleprecision minimum
  55. doubleprecision maximum
  56. minimum = internal_min(itype)
  57. maximum = internal_max(itype)
  58. hash_int2 = max(minimum, min(maximum, hash4( type, rank,
  59. + index, itype)))
  60. end
  61. #endif
  62. C
  63. C ensure hash value within range for internal TYPE
  64. C
  65. function hash_int(type, rank, index, itype)
  66. implicit none
  67. #include "tests.inc"
  68. integer type
  69. integer rank
  70. integer index(1)
  71. integer itype
  72. doubleprecision minimum
  73. doubleprecision maximum
  74. minimum = internal_min(itype)
  75. maximum = internal_max(itype)
  76. hash_int = max(minimum, min(maximum, hash4( type, rank,
  77. + index, itype)))
  78. end
  79. C
  80. C ensure hash value within range for internal TYPE
  81. C
  82. function hash_real(type, rank, index, itype)
  83. implicit none
  84. #include "tests.inc"
  85. integer type
  86. integer rank
  87. integer index(1)
  88. integer itype
  89. doubleprecision minimum
  90. doubleprecision maximum
  91. minimum = internal_min(itype)
  92. maximum = internal_max(itype)
  93. hash_real = max(minimum, min(maximum, hash4( type, rank,
  94. + index, itype)))
  95. end
  96. C
  97. C ensure hash value within range for internal TYPE
  98. C
  99. function hash_double(type, rank, index, itype)
  100. implicit none
  101. #include "tests.inc"
  102. integer type
  103. integer rank
  104. integer index(1)
  105. integer itype
  106. doubleprecision minimum
  107. doubleprecision maximum
  108. minimum = internal_min(itype)
  109. maximum = internal_max(itype)
  110. hash_double = max(minimum, min(maximum, hash4( type, rank,
  111. + index, itype)))
  112. end
  113. C
  114. C check all vars in file which are (text/numeric) compatible with TYPE
  115. C
  116. subroutine check_vars_text(filename)
  117. implicit none
  118. #include "tests.inc"
  119. character*(*) filename
  120. integer ncid !/* netCDF id */
  121. integer index(MAX_RANK)
  122. integer err !/* status */
  123. integer d
  124. integer i
  125. integer j
  126. character value
  127. integer datatype
  128. integer ndims
  129. integer dimids(MAX_RANK)
  130. integer ngatts
  131. doubleprecision expect
  132. character*(NF_MAX_NAME) name
  133. integer length
  134. logical canConvert !/* Both text or both numeric */
  135. integer nok !/* count of valid comparisons */
  136. doubleprecision val
  137. nok = 0
  138. err = nf_open(filename, NF_NOWRITE, ncid)
  139. if (err .ne. 0)
  140. + call errore('nf_open: ', err)
  141. do 1, i = 1, NVARS
  142. canConvert = (var_type(i) .eq. NF_CHAR) .eqv.
  143. + (NFT_TEXT .eq. NFT_TEXT)
  144. if (canConvert) then
  145. err = nf_inq_var(ncid, i, name, datatype, ndims, dimids,
  146. + ngatts)
  147. if (err .ne. 0)
  148. + call errore('nf_inq_var: ', err)
  149. if (name .ne. var_name(i))
  150. + call error('Unexpected var_name')
  151. if (datatype .ne. var_type(i))
  152. + call error('Unexpected type')
  153. if (ndims .ne. var_rank(i))
  154. + call error('Unexpected rank')
  155. do 2, j = 1, ndims
  156. err = nf_inq_dim(ncid, dimids(j), name, length)
  157. if (err .ne. 0)
  158. + call errore('nf_inq_dim: ', err)
  159. if (length .ne. var_shape(j,i))
  160. + call error('Unexpected shape')
  161. 2 continue
  162. do 3, j = 1, var_nels(i)
  163. err = index2indexes(j, var_rank(i), var_shape(1,i),
  164. + index)
  165. if (err .ne. 0)
  166. + call error('error in index2indexes()')
  167. expect = hash4( var_type(i), var_rank(i), index,
  168. + NFT_TEXT)
  169. err = nf_get_var1_text(ncid, i, index, value)
  170. if (inRange3(expect,datatype,NFT_TEXT)) then
  171. if (in_internal_range(NFT_TEXT,
  172. + expect)) then
  173. if (err .ne. 0) then
  174. call errore('nf_get_var1_text: ', err)
  175. else
  176. val = ichar(value)
  177. if (.not.equal(
  178. + val,
  179. + expect,var_type(i),
  180. + NFT_TEXT)) then
  181. call error(
  182. + 'Var value read not that expected')
  183. if (verbose) then
  184. call error(' ')
  185. call errori('varid: %d', i)
  186. call errorc('var_name: ',
  187. + var_name(i))
  188. call error('index:')
  189. do 4, d = 1, var_rank(i)
  190. call errori(' ', index(d))
  191. 4 continue
  192. call errord('expect: ', expect)
  193. call errord('got: ', val)
  194. end if
  195. else
  196. nok = nok + 1
  197. end if
  198. end if
  199. end if
  200. end if
  201. 3 continue
  202. end if
  203. 1 continue
  204. err = nf_close (ncid)
  205. if (err .ne. 0)
  206. + call errore('nf_close: ', err)
  207. call print_nok(nok)
  208. end
  209. #ifdef NF_INT1_T
  210. C
  211. C check all vars in file which are (text/numeric) compatible with TYPE
  212. C
  213. subroutine check_vars_int1(filename)
  214. implicit none
  215. #include "tests.inc"
  216. character*(*) filename
  217. integer ncid !/* netCDF id */
  218. integer index(MAX_RANK)
  219. integer err !/* status */
  220. integer d
  221. integer i
  222. integer j
  223. NF_INT1_T value
  224. integer datatype
  225. integer ndims
  226. integer dimids(MAX_RANK)
  227. integer ngatts
  228. doubleprecision expect
  229. character*(NF_MAX_NAME) name
  230. integer length
  231. logical canConvert !/* Both text or both numeric */
  232. integer nok !/* count of valid comparisons */
  233. doubleprecision val
  234. nok = 0
  235. err = nf_open(filename, NF_NOWRITE, ncid)
  236. if (err .ne. 0)
  237. + call errore('nf_open: ', err)
  238. do 1, i = 1, NVARS
  239. canConvert = (var_type(i) .eq. NF_CHAR) .eqv.
  240. + (NFT_INT1 .eq. NFT_TEXT)
  241. if (canConvert) then
  242. err = nf_inq_var(ncid, i, name, datatype, ndims, dimids,
  243. + ngatts)
  244. if (err .ne. 0)
  245. + call errore('nf_inq_var: ', err)
  246. if (name .ne. var_name(i))
  247. + call error('Unexpected var_name')
  248. if (datatype .ne. var_type(i))
  249. + call error('Unexpected type')
  250. if (ndims .ne. var_rank(i))
  251. + call error('Unexpected rank')
  252. do 2, j = 1, ndims
  253. err = nf_inq_dim(ncid, dimids(j), name, length)
  254. if (err .ne. 0)
  255. + call errore('nf_inq_dim: ', err)
  256. if (length .ne. var_shape(j,i))
  257. + call error('Unexpected shape')
  258. 2 continue
  259. do 3, j = 1, var_nels(i)
  260. err = index2indexes(j, var_rank(i), var_shape(1,i),
  261. + index)
  262. if (err .ne. 0)
  263. + call error('error in index2indexes()')
  264. expect = hash4( var_type(i), var_rank(i), index,
  265. + NFT_INT1)
  266. err = nf_get_var1_int1(ncid, i, index, value)
  267. if (inRange3(expect,datatype,NFT_INT1)) then
  268. if (in_internal_range(NFT_INT1,
  269. + expect)) then
  270. if (err .ne. 0) then
  271. call errore('nf_get_var1_int1: ', err)
  272. else
  273. val = value
  274. if (.not.equal(
  275. + val,
  276. + expect,var_type(i),
  277. + NFT_INT1)) then
  278. call error(
  279. + 'Var value read not that expected')
  280. if (verbose) then
  281. call error(' ')
  282. call errori('varid: %d', i)
  283. call errorc('var_name: ',
  284. + var_name(i))
  285. call error('index:')
  286. do 4, d = 1, var_rank(i)
  287. call errori(' ', index(d))
  288. 4 continue
  289. call errord('expect: ', expect)
  290. call errord('got: ', val)
  291. end if
  292. else
  293. nok = nok + 1
  294. end if
  295. end if
  296. end if
  297. end if
  298. 3 continue
  299. end if
  300. 1 continue
  301. err = nf_close (ncid)
  302. if (err .ne. 0)
  303. + call errore('nf_close: ', err)
  304. call print_nok(nok)
  305. end
  306. #endif
  307. #ifdef NF_INT2_T
  308. C
  309. C check all vars in file which are (text/numeric) compatible with TYPE
  310. C
  311. subroutine check_vars_int2(filename)
  312. implicit none
  313. #include "tests.inc"
  314. character*(*) filename
  315. integer ncid !/* netCDF id */
  316. integer index(MAX_RANK)
  317. integer err !/* status */
  318. integer d
  319. integer i
  320. integer j
  321. NF_INT2_T value
  322. integer datatype
  323. integer ndims
  324. integer dimids(MAX_RANK)
  325. integer ngatts
  326. doubleprecision expect
  327. character*(NF_MAX_NAME) name
  328. integer length
  329. logical canConvert !/* Both text or both numeric */
  330. integer nok !/* count of valid comparisons */
  331. doubleprecision val
  332. nok = 0
  333. err = nf_open(filename, NF_NOWRITE, ncid)
  334. if (err .ne. 0)
  335. + call errore('nf_open: ', err)
  336. do 1, i = 1, NVARS
  337. canConvert = (var_type(i) .eq. NF_CHAR) .eqv.
  338. + (NFT_INT2 .eq. NFT_TEXT)
  339. if (canConvert) then
  340. err = nf_inq_var(ncid, i, name, datatype, ndims, dimids,
  341. + ngatts)
  342. if (err .ne. 0)
  343. + call errore('nf_inq_var: ', err)
  344. if (name .ne. var_name(i))
  345. + call error('Unexpected var_name')
  346. if (datatype .ne. var_type(i))
  347. + call error('Unexpected type')
  348. if (ndims .ne. var_rank(i))
  349. + call error('Unexpected rank')
  350. do 2, j = 1, ndims
  351. err = nf_inq_dim(ncid, dimids(j), name, length)
  352. if (err .ne. 0)
  353. + call errore('nf_inq_dim: ', err)
  354. if (length .ne. var_shape(j,i))
  355. + call error('Unexpected shape')
  356. 2 continue
  357. do 3, j = 1, var_nels(i)
  358. err = index2indexes(j, var_rank(i), var_shape(1,i),
  359. + index)
  360. if (err .ne. 0)
  361. + call error('error in index2indexes()')
  362. expect = hash4( var_type(i), var_rank(i), index,
  363. + NFT_INT2)
  364. err = nf_get_var1_int2(ncid, i, index, value)
  365. if (inRange3(expect,datatype,NFT_INT2)) then
  366. if (in_internal_range(NFT_INT2,
  367. + expect)) then
  368. if (err .ne. 0) then
  369. call errore('nf_get_var1_int2: ', err)
  370. else
  371. val = value
  372. if (.not.equal(
  373. + val,
  374. + expect,var_type(i),
  375. + NFT_INT2)) then
  376. call error(
  377. + 'Var value read not that expected')
  378. if (verbose) then
  379. call error(' ')
  380. call errori('varid: %d', i)
  381. call errorc('var_name: ',
  382. + var_name(i))
  383. call error('index:')
  384. do 4, d = 1, var_rank(i)
  385. call errori(' ', index(d))
  386. 4 continue
  387. call errord('expect: ', expect)
  388. call errord('got: ', val)
  389. end if
  390. else
  391. nok = nok + 1
  392. end if
  393. end if
  394. end if
  395. end if
  396. 3 continue
  397. end if
  398. 1 continue
  399. err = nf_close (ncid)
  400. if (err .ne. 0)
  401. + call errore('nf_close: ', err)
  402. call print_nok(nok)
  403. end
  404. #endif
  405. C
  406. C check all vars in file which are (text/numeric) compatible with TYPE
  407. C
  408. subroutine check_vars_int(filename)
  409. implicit none
  410. #include "tests.inc"
  411. character*(*) filename
  412. integer ncid !/* netCDF id */
  413. integer index(MAX_RANK)
  414. integer err !/* status */
  415. integer d
  416. integer i
  417. integer j
  418. integer value
  419. integer datatype
  420. integer ndims
  421. integer dimids(MAX_RANK)
  422. integer ngatts
  423. doubleprecision expect
  424. character*(NF_MAX_NAME) name
  425. integer length
  426. logical canConvert !/* Both text or both numeric */
  427. integer nok !/* count of valid comparisons */
  428. doubleprecision val
  429. nok = 0
  430. err = nf_open(filename, NF_NOWRITE, ncid)
  431. if (err .ne. 0)
  432. + call errore('nf_open: ', err)
  433. do 1, i = 1, NVARS
  434. canConvert = (var_type(i) .eq. NF_CHAR) .eqv.
  435. + (NFT_INT .eq. NFT_TEXT)
  436. if (canConvert) then
  437. err = nf_inq_var(ncid, i, name, datatype, ndims, dimids,
  438. + ngatts)
  439. if (err .ne. 0)
  440. + call errore('nf_inq_var: ', err)
  441. if (name .ne. var_name(i))
  442. + call error('Unexpected var_name')
  443. if (datatype .ne. var_type(i))
  444. + call error('Unexpected type')
  445. if (ndims .ne. var_rank(i))
  446. + call error('Unexpected rank')
  447. do 2, j = 1, ndims
  448. err = nf_inq_dim(ncid, dimids(j), name, length)
  449. if (err .ne. 0)
  450. + call errore('nf_inq_dim: ', err)
  451. if (length .ne. var_shape(j,i))
  452. + call error('Unexpected shape')
  453. 2 continue
  454. do 3, j = 1, var_nels(i)
  455. err = index2indexes(j, var_rank(i), var_shape(1,i),
  456. + index)
  457. if (err .ne. 0)
  458. + call error('error in index2indexes()')
  459. expect = hash4( var_type(i), var_rank(i), index,
  460. + NFT_INT)
  461. err = nf_get_var1_int(ncid, i, index, value)
  462. if (inRange3(expect,datatype,NFT_INT)) then
  463. if (in_internal_range(NFT_INT,
  464. + expect)) then
  465. if (err .ne. 0) then
  466. call errore('nf_get_var1_int: ', err)
  467. else
  468. val = value
  469. if (.not.equal(
  470. + val,
  471. + expect,var_type(i),
  472. + NFT_INT)) then
  473. call error(
  474. + 'Var value read not that expected')
  475. if (verbose) then
  476. call error(' ')
  477. call errori('varid: %d', i)
  478. call errorc('var_name: ',
  479. + var_name(i))
  480. call error('index:')
  481. do 4, d = 1, var_rank(i)
  482. call errori(' ', index(d))
  483. 4 continue
  484. call errord('expect: ', expect)
  485. call errord('got: ', val)
  486. end if
  487. else
  488. nok = nok + 1
  489. end if
  490. end if
  491. end if
  492. end if
  493. 3 continue
  494. end if
  495. 1 continue
  496. err = nf_close (ncid)
  497. if (err .ne. 0)
  498. + call errore('nf_close: ', err)
  499. call print_nok(nok)
  500. end
  501. C
  502. C check all vars in file which are (text/numeric) compatible with TYPE
  503. C
  504. subroutine check_vars_real(filename)
  505. implicit none
  506. #include "tests.inc"
  507. character*(*) filename
  508. integer ncid !/* netCDF id */
  509. integer index(MAX_RANK)
  510. integer err !/* status */
  511. integer d
  512. integer i
  513. integer j
  514. real value
  515. integer datatype
  516. integer ndims
  517. integer dimids(MAX_RANK)
  518. integer ngatts
  519. doubleprecision expect
  520. character*(NF_MAX_NAME) name
  521. integer length
  522. logical canConvert !/* Both text or both numeric */
  523. integer nok !/* count of valid comparisons */
  524. doubleprecision val
  525. nok = 0
  526. err = nf_open(filename, NF_NOWRITE, ncid)
  527. if (err .ne. 0)
  528. + call errore('nf_open: ', err)
  529. do 1, i = 1, NVARS
  530. canConvert = (var_type(i) .eq. NF_CHAR) .eqv.
  531. + (NFT_REAL .eq. NFT_TEXT)
  532. if (canConvert) then
  533. err = nf_inq_var(ncid, i, name, datatype, ndims, dimids,
  534. + ngatts)
  535. if (err .ne. 0)
  536. + call errore('nf_inq_var: ', err)
  537. if (name .ne. var_name(i))
  538. + call error('Unexpected var_name')
  539. if (datatype .ne. var_type(i))
  540. + call error('Unexpected type')
  541. if (ndims .ne. var_rank(i))
  542. + call error('Unexpected rank')
  543. do 2, j = 1, ndims
  544. err = nf_inq_dim(ncid, dimids(j), name, length)
  545. if (err .ne. 0)
  546. + call errore('nf_inq_dim: ', err)
  547. if (length .ne. var_shape(j,i))
  548. + call error('Unexpected shape')
  549. 2 continue
  550. do 3, j = 1, var_nels(i)
  551. err = index2indexes(j, var_rank(i), var_shape(1,i),
  552. + index)
  553. if (err .ne. 0)
  554. + call error('error in index2indexes()')
  555. expect = hash4( var_type(i), var_rank(i), index,
  556. + NFT_REAL)
  557. err = nf_get_var1_real(ncid, i, index, value)
  558. if (inRange3(expect,datatype,NFT_REAL)) then
  559. if (in_internal_range(NFT_REAL,
  560. + expect)) then
  561. if (err .ne. 0) then
  562. call errore('nf_get_var1_real: ', err)
  563. else
  564. val = value
  565. if (.not.equal(
  566. + val,
  567. + expect,var_type(i),
  568. + NFT_REAL)) then
  569. call error(
  570. + 'Var value read not that expected')
  571. if (verbose) then
  572. call error(' ')
  573. call errori('varid: %d', i)
  574. call errorc('var_name: ',
  575. + var_name(i))
  576. call error('index:')
  577. do 4, d = 1, var_rank(i)
  578. call errori(' ', index(d))
  579. 4 continue
  580. call errord('expect: ', expect)
  581. call errord('got: ', val)
  582. end if
  583. else
  584. nok = nok + 1
  585. end if
  586. end if
  587. end if
  588. end if
  589. 3 continue
  590. end if
  591. 1 continue
  592. err = nf_close (ncid)
  593. if (err .ne. 0)
  594. + call errore('nf_close: ', err)
  595. call print_nok(nok)
  596. end
  597. C
  598. C check all vars in file which are (text/numeric) compatible with TYPE
  599. C
  600. subroutine check_vars_double(filename)
  601. implicit none
  602. #include "tests.inc"
  603. character*(*) filename
  604. integer ncid !/* netCDF id */
  605. integer index(MAX_RANK)
  606. integer err !/* status */
  607. integer d
  608. integer i
  609. integer j
  610. doubleprecision value
  611. integer datatype
  612. integer ndims
  613. integer dimids(MAX_RANK)
  614. integer ngatts
  615. doubleprecision expect
  616. character*(NF_MAX_NAME) name
  617. integer length
  618. logical canConvert !/* Both text or both numeric */
  619. integer nok !/* count of valid comparisons */
  620. doubleprecision val
  621. nok = 0
  622. err = nf_open(filename, NF_NOWRITE, ncid)
  623. if (err .ne. 0)
  624. + call errore('nf_open: ', err)
  625. do 1, i = 1, NVARS
  626. canConvert = (var_type(i) .eq. NF_CHAR) .eqv.
  627. + (NFT_DOUBLE .eq. NFT_TEXT)
  628. if (canConvert) then
  629. err = nf_inq_var(ncid, i, name, datatype, ndims, dimids,
  630. + ngatts)
  631. if (err .ne. 0)
  632. + call errore('nf_inq_var: ', err)
  633. if (name .ne. var_name(i))
  634. + call error('Unexpected var_name')
  635. if (datatype .ne. var_type(i))
  636. + call error('Unexpected type')
  637. if (ndims .ne. var_rank(i))
  638. + call error('Unexpected rank')
  639. do 2, j = 1, ndims
  640. err = nf_inq_dim(ncid, dimids(j), name, length)
  641. if (err .ne. 0)
  642. + call errore('nf_inq_dim: ', err)
  643. if (length .ne. var_shape(j,i))
  644. + call error('Unexpected shape')
  645. 2 continue
  646. do 3, j = 1, var_nels(i)
  647. err = index2indexes(j, var_rank(i), var_shape(1,i),
  648. + index)
  649. if (err .ne. 0)
  650. + call error('error in index2indexes()')
  651. expect = hash4( var_type(i), var_rank(i), index,
  652. + NFT_DOUBLE)
  653. err = nf_get_var1_double(ncid, i, index, value)
  654. if (inRange3(expect,datatype,NFT_DOUBLE)) then
  655. if (in_internal_range(NFT_DOUBLE,
  656. + expect)) then
  657. if (err .ne. 0) then
  658. call errore('nf_get_var1_double: ', err)
  659. else
  660. val = value
  661. if (.not.equal(
  662. + val,
  663. + expect,var_type(i),
  664. + NFT_DOUBLE)) then
  665. call error(
  666. + 'Var value read not that expected')
  667. if (verbose) then
  668. call error(' ')
  669. call errori('varid: %d', i)
  670. call errorc('var_name: ',
  671. + var_name(i))
  672. call error('index:')
  673. do 4, d = 1, var_rank(i)
  674. call errori(' ', index(d))
  675. 4 continue
  676. call errord('expect: ', expect)
  677. call errord('got: ', val)
  678. end if
  679. else
  680. nok = nok + 1
  681. end if
  682. end if
  683. end if
  684. end if
  685. 3 continue
  686. end if
  687. 1 continue
  688. err = nf_close (ncid)
  689. if (err .ne. 0)
  690. + call errore('nf_close: ', err)
  691. call print_nok(nok)
  692. end
  693. C/*
  694. C * check all attributes in file which are (text/numeric) compatible with TYPE
  695. C * ignore any attributes containing values outside range of TYPE
  696. C */
  697. subroutine check_atts_text(ncid)
  698. implicit none
  699. #include "tests.inc"
  700. integer ncid
  701. integer err !/* status */
  702. integer i
  703. integer j
  704. integer k
  705. integer ndx(1)
  706. character value(MAX_NELS)
  707. integer datatype
  708. doubleprecision expect(MAX_NELS)
  709. integer length
  710. integer nInExtRange !/* number values within external range */
  711. integer nInIntRange !/* number values within internal range */
  712. logical canConvert !/* Both text or both numeric */
  713. integer nok !/* count of valid comparisons */
  714. doubleprecision val
  715. nok = 0
  716. do 1, i = 0, NVARS
  717. do 2, j = 1, NATTS(i)
  718. canConvert = (ATT_TYPE(j,i) .eq. NF_CHAR) .eqv.
  719. + (NFT_TEXT .eq. NFT_TEXT)
  720. if (canConvert) then
  721. err = nf_inq_att(ncid, i, ATT_NAME(j,i), datatype,
  722. + length)
  723. if (err .ne. 0)
  724. + call errore('nf_inq_att: ', err)
  725. if (datatype .ne. ATT_TYPE(j,i))
  726. + call error('nf_inq_att: unexpected type')
  727. if (length .ne. ATT_LEN(j,i))
  728. + call error('nf_inq_att: unexpected length')
  729. if (.not.(length .le. MAX_NELS))
  730. + stop 'assert(length .le. MAX_NELS)'
  731. nInIntRange = 0
  732. nInExtRange = 0
  733. do 4, k = 1, length
  734. ndx(1) = k
  735. expect(k) = hash4( datatype, -1, ndx,
  736. + NFT_TEXT)
  737. if (inRange3(expect(k), datatype,
  738. + NFT_TEXT)) then
  739. nInExtRange = nInExtRange + 1
  740. if (in_internal_range(NFT_TEXT,
  741. + expect(k)))
  742. + nInIntRange = nInIntRange + 1
  743. end if
  744. 4 continue
  745. err = nf_get_att_text(ncid, i,
  746. + ATT_NAME(j,i), value)
  747. if (nInExtRange .eq. length .and.
  748. + nInIntRange .eq. length) then
  749. if (err .ne. 0)
  750. + call error(nf_strerror(err))
  751. else
  752. if (err .ne. 0 .and. err .ne. NF_ERANGE)
  753. + call errore('OK or Range error: ', err)
  754. end if
  755. do 3, k = 1, length
  756. if (inRange3(expect(k),datatype,NFT_TEXT)
  757. + .and.
  758. + in_internal_range(NFT_TEXT,
  759. + expect(k))) then
  760. val = ichar(value(k))
  761. if (.not.equal(
  762. + val,
  763. + expect(k),datatype,
  764. + NFT_TEXT)) then
  765. call error(
  766. + 'att. value read not that expected')
  767. if (verbose) then
  768. call error(' ')
  769. call errori('varid: ', i)
  770. call errorc('att_name: ',
  771. + ATT_NAME(j,i))
  772. call errori('element number: ', k)
  773. call errord('expect: ', expect(k))
  774. call errord('got: ', val)
  775. end if
  776. else
  777. nok = nok + 1
  778. end if
  779. end if
  780. 3 continue
  781. end if
  782. 2 continue
  783. 1 continue
  784. call print_nok(nok)
  785. end
  786. #ifdef NF_INT1_T
  787. C/*
  788. C * check all attributes in file which are (text/numeric) compatible with TYPE
  789. C * ignore any attributes containing values outside range of TYPE
  790. C */
  791. subroutine check_atts_int1(ncid)
  792. implicit none
  793. #include "tests.inc"
  794. integer ncid
  795. integer err !/* status */
  796. integer i
  797. integer j
  798. integer k
  799. integer ndx(1)
  800. NF_INT1_T value(MAX_NELS)
  801. integer datatype
  802. doubleprecision expect(MAX_NELS)
  803. integer length
  804. integer nInExtRange !/* number values within external range */
  805. integer nInIntRange !/* number values within internal range */
  806. logical canConvert !/* Both text or both numeric */
  807. integer nok !/* count of valid comparisons */
  808. doubleprecision val
  809. nok = 0
  810. do 1, i = 0, NVARS
  811. do 2, j = 1, NATTS(i)
  812. canConvert = (ATT_TYPE(j,i) .eq. NF_CHAR) .eqv.
  813. + (NFT_INT1 .eq. NFT_TEXT)
  814. if (canConvert) then
  815. err = nf_inq_att(ncid, i, ATT_NAME(j,i), datatype,
  816. + length)
  817. if (err .ne. 0)
  818. + call errore('nf_inq_att: ', err)
  819. if (datatype .ne. ATT_TYPE(j,i))
  820. + call error('nf_inq_att: unexpected type')
  821. if (length .ne. ATT_LEN(j,i))
  822. + call error('nf_inq_att: unexpected length')
  823. if (.not.(length .le. MAX_NELS))
  824. + stop 'assert(length .le. MAX_NELS)'
  825. nInIntRange = 0
  826. nInExtRange = 0
  827. do 4, k = 1, length
  828. ndx(1) = k
  829. expect(k) = hash4( datatype, -1, ndx,
  830. + NFT_INT1)
  831. if (inRange3(expect(k), datatype,
  832. + NFT_INT1)) then
  833. nInExtRange = nInExtRange + 1
  834. if (in_internal_range(NFT_INT1,
  835. + expect(k)))
  836. + nInIntRange = nInIntRange + 1
  837. end if
  838. 4 continue
  839. err = nf_get_att_int1(ncid, i,
  840. + ATT_NAME(j,i), value)
  841. if (nInExtRange .eq. length .and.
  842. + nInIntRange .eq. length) then
  843. if (err .ne. 0)
  844. + call error(nf_strerror(err))
  845. else
  846. if (err .ne. 0 .and. err .ne. NF_ERANGE)
  847. + call errore('OK or Range error: ', err)
  848. end if
  849. do 3, k = 1, length
  850. if (inRange3(expect(k),datatype,NFT_INT1)
  851. + .and.
  852. + in_internal_range(NFT_INT1,
  853. + expect(k))) then
  854. val = value(k)
  855. if (.not.equal(
  856. + val,
  857. + expect(k),datatype,
  858. + NFT_INT1)) then
  859. call error(
  860. + 'att. value read not that expected')
  861. if (verbose) then
  862. call error(' ')
  863. call errori('varid: ', i)
  864. call errorc('att_name: ',
  865. + ATT_NAME(j,i))
  866. call errori('element number: ', k)
  867. call errord('expect: ', expect(k))
  868. call errord('got: ', val)
  869. end if
  870. else
  871. nok = nok + 1
  872. end if
  873. end if
  874. 3 continue
  875. end if
  876. 2 continue
  877. 1 continue
  878. call print_nok(nok)
  879. end
  880. #endif
  881. #ifdef NF_INT2_T
  882. C/*
  883. C * check all attributes in file which are (text/numeric) compatible with TYPE
  884. C * ignore any attributes containing values outside range of TYPE
  885. C */
  886. subroutine check_atts_int2(ncid)
  887. implicit none
  888. #include "tests.inc"
  889. integer ncid
  890. integer err !/* status */
  891. integer i
  892. integer j
  893. integer k
  894. integer ndx(1)
  895. NF_INT2_T value(MAX_NELS)
  896. integer datatype
  897. doubleprecision expect(MAX_NELS)
  898. integer length
  899. integer nInExtRange !/* number values within external range */
  900. integer nInIntRange !/* number values within internal range */
  901. logical canConvert !/* Both text or both numeric */
  902. integer nok !/* count of valid comparisons */
  903. doubleprecision val
  904. nok = 0
  905. do 1, i = 0, NVARS
  906. do 2, j = 1, NATTS(i)
  907. canConvert = (ATT_TYPE(j,i) .eq. NF_CHAR) .eqv.
  908. + (NFT_INT2 .eq. NFT_TEXT)
  909. if (canConvert) then
  910. err = nf_inq_att(ncid, i, ATT_NAME(j,i), datatype,
  911. + length)
  912. if (err .ne. 0)
  913. + call errore('nf_inq_att: ', err)
  914. if (datatype .ne. ATT_TYPE(j,i))
  915. + call error('nf_inq_att: unexpected type')
  916. if (length .ne. ATT_LEN(j,i))
  917. + call error('nf_inq_att: unexpected length')
  918. if (.not.(length .le. MAX_NELS))
  919. + stop 'assert(length .le. MAX_NELS)'
  920. nInIntRange = 0
  921. nInExtRange = 0
  922. do 4, k = 1, length
  923. ndx(1) = k
  924. expect(k) = hash4( datatype, -1, ndx,
  925. + NFT_INT2)
  926. if (inRange3(expect(k), datatype,
  927. + NFT_INT2)) then
  928. nInExtRange = nInExtRange + 1
  929. if (in_internal_range(NFT_INT2,
  930. + expect(k)))
  931. + nInIntRange = nInIntRange + 1
  932. end if
  933. 4 continue
  934. err = nf_get_att_int2(ncid, i,
  935. + ATT_NAME(j,i), value)
  936. if (nInExtRange .eq. length .and.
  937. + nInIntRange .eq. length) then
  938. if (err .ne. 0)
  939. + call error(nf_strerror(err))
  940. else
  941. if (err .ne. 0 .and. err .ne. NF_ERANGE)
  942. + call errore('OK or Range error: ', err)
  943. end if
  944. do 3, k = 1, length
  945. if (inRange3(expect(k),datatype,NFT_INT2)
  946. + .and.
  947. + in_internal_range(NFT_INT2,
  948. + expect(k))) then
  949. val = value(k)
  950. if (.not.equal(
  951. + val,
  952. + expect(k),datatype,
  953. + NFT_INT2)) then
  954. call error(
  955. + 'att. value read not that expected')
  956. if (verbose) then
  957. call error(' ')
  958. call errori('varid: ', i)
  959. call errorc('att_name: ',
  960. + ATT_NAME(j,i))
  961. call errori('element number: ', k)
  962. call errord('expect: ', expect(k))
  963. call errord('got: ', val)
  964. end if
  965. else
  966. nok = nok + 1
  967. end if
  968. end if
  969. 3 continue
  970. end if
  971. 2 continue
  972. 1 continue
  973. call print_nok(nok)
  974. end
  975. #endif
  976. C/*
  977. C * check all attributes in file which are (text/numeric) compatible with TYPE
  978. C * ignore any attributes containing values outside range of TYPE
  979. C */
  980. subroutine check_atts_int(ncid)
  981. implicit none
  982. #include "tests.inc"
  983. integer ncid
  984. integer err !/* status */
  985. integer i
  986. integer j
  987. integer k
  988. integer ndx(1)
  989. integer value(MAX_NELS)
  990. integer datatype
  991. doubleprecision expect(MAX_NELS)
  992. integer length
  993. integer nInExtRange !/* number values within external range */
  994. integer nInIntRange !/* number values within internal range */
  995. logical canConvert !/* Both text or both numeric */
  996. integer nok !/* count of valid comparisons */
  997. doubleprecision val
  998. nok = 0
  999. do 1, i = 0, NVARS
  1000. do 2, j = 1, NATTS(i)
  1001. canConvert = (ATT_TYPE(j,i) .eq. NF_CHAR) .eqv.
  1002. + (NFT_INT .eq. NFT_TEXT)
  1003. if (canConvert) then
  1004. err = nf_inq_att(ncid, i, ATT_NAME(j,i), datatype,
  1005. + length)
  1006. if (err .ne. 0)
  1007. + call errore('nf_inq_att: ', err)
  1008. if (datatype .ne. ATT_TYPE(j,i))
  1009. + call error('nf_inq_att: unexpected type')
  1010. if (length .ne. ATT_LEN(j,i))
  1011. + call error('nf_inq_att: unexpected length')
  1012. if (.not.(length .le. MAX_NELS))
  1013. + stop 'assert(length .le. MAX_NELS)'
  1014. nInIntRange = 0
  1015. nInExtRange = 0
  1016. do 4, k = 1, length
  1017. ndx(1) = k
  1018. expect(k) = hash4( datatype, -1, ndx,
  1019. + NFT_INT)
  1020. if (inRange3(expect(k), datatype,
  1021. + NFT_INT)) then
  1022. nInExtRange = nInExtRange + 1
  1023. if (in_internal_range(NFT_INT,
  1024. + expect(k)))
  1025. + nInIntRange = nInIntRange + 1
  1026. end if
  1027. 4 continue
  1028. err = nf_get_att_int(ncid, i,
  1029. + ATT_NAME(j,i), value)
  1030. if (nInExtRange .eq. length .and.
  1031. + nInIntRange .eq. length) then
  1032. if (err .ne. 0)
  1033. + call error(nf_strerror(err))
  1034. else
  1035. if (err .ne. 0 .and. err .ne. NF_ERANGE)
  1036. + call errore('OK or Range error: ', err)
  1037. end if
  1038. do 3, k = 1, length
  1039. if (inRange3(expect(k),datatype,NFT_INT)
  1040. + .and.
  1041. + in_internal_range(NFT_INT,
  1042. + expect(k))) then
  1043. val = value(k)
  1044. if (.not.equal(
  1045. + val,
  1046. + expect(k),datatype,
  1047. + NFT_INT)) then
  1048. call error(
  1049. + 'att. value read not that expected')
  1050. if (verbose) then
  1051. call error(' ')
  1052. call errori('varid: ', i)
  1053. call errorc('att_name: ',
  1054. + ATT_NAME(j,i))
  1055. call errori('element number: ', k)
  1056. call errord('expect: ', expect(k))
  1057. call errord('got: ', val)
  1058. end if
  1059. else
  1060. nok = nok + 1
  1061. end if
  1062. end if
  1063. 3 continue
  1064. end if
  1065. 2 continue
  1066. 1 continue
  1067. call print_nok(nok)
  1068. end
  1069. C/*
  1070. C * check all attributes in file which are (text/numeric) compatible with TYPE
  1071. C * ignore any attributes containing values outside range of TYPE
  1072. C */
  1073. subroutine check_atts_real(ncid)
  1074. implicit none
  1075. #include "tests.inc"
  1076. integer ncid
  1077. integer err !/* status */
  1078. integer i
  1079. integer j
  1080. integer k
  1081. integer ndx(1)
  1082. real value(MAX_NELS)
  1083. integer datatype
  1084. doubleprecision expect(MAX_NELS)
  1085. integer length
  1086. integer nInExtRange !/* number values within external range */
  1087. integer nInIntRange !/* number values within internal range */
  1088. logical canConvert !/* Both text or both numeric */
  1089. integer nok !/* count of valid comparisons */
  1090. doubleprecision val
  1091. nok = 0
  1092. do 1, i = 0, NVARS
  1093. do 2, j = 1, NATTS(i)
  1094. canConvert = (ATT_TYPE(j,i) .eq. NF_CHAR) .eqv.
  1095. + (NFT_REAL .eq. NFT_TEXT)
  1096. if (canConvert) then
  1097. err = nf_inq_att(ncid, i, ATT_NAME(j,i), datatype,
  1098. + length)
  1099. if (err .ne. 0)
  1100. + call errore('nf_inq_att: ', err)
  1101. if (datatype .ne. ATT_TYPE(j,i))
  1102. + call error('nf_inq_att: unexpected type')
  1103. if (length .ne. ATT_LEN(j,i))
  1104. + call error('nf_inq_att: unexpected length')
  1105. if (.not.(length .le. MAX_NELS))
  1106. + stop 'assert(length .le. MAX_NELS)'
  1107. nInIntRange = 0
  1108. nInExtRange = 0
  1109. do 4, k = 1, length
  1110. ndx(1) = k
  1111. expect(k) = hash4( datatype, -1, ndx,
  1112. + NFT_REAL)
  1113. if (inRange3(expect(k), datatype,
  1114. + NFT_REAL)) then
  1115. nInExtRange = nInExtRange + 1
  1116. if (in_internal_range(NFT_REAL,
  1117. + expect(k)))
  1118. + nInIntRange = nInIntRange + 1
  1119. end if
  1120. 4 continue
  1121. err = nf_get_att_real(ncid, i,
  1122. + ATT_NAME(j,i), value)
  1123. if (nInExtRange .eq. length .and.
  1124. + nInIntRange .eq. length) then
  1125. if (err .ne. 0)
  1126. + call error(nf_strerror(err))
  1127. else
  1128. if (err .ne. 0 .and. err .ne. NF_ERANGE)
  1129. + call errore('OK or Range error: ', err)
  1130. end if
  1131. do 3, k = 1, length
  1132. if (inRange3(expect(k),datatype,NFT_REAL)
  1133. + .and.
  1134. + in_internal_range(NFT_REAL,
  1135. + expect(k))) then
  1136. val = value(k)
  1137. if (.not.equal(
  1138. + val,
  1139. + expect(k),datatype,
  1140. + NFT_REAL)) then
  1141. call error(
  1142. + 'att. value read not that expected')
  1143. if (verbose) then
  1144. call error(' ')
  1145. call errori('varid: ', i)
  1146. call errorc('att_name: ',
  1147. + ATT_NAME(j,i))
  1148. call errori('element number: ', k)
  1149. call errord('expect: ', expect(k))
  1150. call errord('got: ', val)
  1151. end if
  1152. else
  1153. nok = nok + 1
  1154. end if
  1155. end if
  1156. 3 continue
  1157. end if
  1158. 2 continue
  1159. 1 continue
  1160. call print_nok(nok)
  1161. end
  1162. C/*
  1163. C * check all attributes in file which are (text/numeric) compatible with TYPE
  1164. C * ignore any attributes conta…

Large files files are truncated, but you can click here to view the full file