- Timestamp:
- 2018-10-29T15:20:26+01:00 (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/UKMO/dev_r5518_AMM15_package/NEMOGCM/TOOLS/SIREN/src/iom_cdf.f90
r10248 r10251 144 144 !> 145 145 !> @author J.Paul 146 !> @date November, 2013 - Initial Version 147 !> @date May, 2015 - add optional message to netcdf error message 148 !> 146 !> - November, 2013- Initial Version 147 ! 149 148 !> @param[in] id_status error status 150 !> @param[in] cd_msg message 151 !------------------------------------------------------------------- 152 SUBROUTINE iom_cdf__check(id_status, cd_msg) 153 IMPLICIT NONE 154 ! Argument 155 INTEGER(i4) , INTENT(IN) :: id_status 156 CHARACTER(LEN=*), INTENT(IN), OPTIONAL :: cd_msg 157 ! local variable 158 CHARACTER(LEN=lc) :: cl_msg 159 !---------------------------------------------------------------- 160 161 cl_msg="" 162 IF( PRESENT(cd_msg) ) cl_msg=cd_msg 149 !------------------------------------------------------------------- 150 SUBROUTINE iom_cdf__check(id_status) 151 IMPLICIT NONE 152 ! Argument 153 INTEGER(i4), INTENT(IN) :: id_status 154 !---------------------------------------------------------------- 163 155 164 156 IF( id_status /= NF90_NOERR )THEN 165 CALL logger_error(TRIM( cl_msg)//TRIM(NF90_STRERROR(id_status)))157 CALL logger_error(TRIM(NF90_STRERROR(id_status))) 166 158 ENDIF 167 159 … … 181 173 !> 182 174 !> @author J.Paul 183 !> @date November, 2013- Initial Version175 !> - November, 2013- Initial Version 184 176 ! 185 177 !> @param[inout] td_file file structure … … 211 203 CALL logger_info( " IOM CDF CREATE: file "//TRIM(td_file%c_name) ) 212 204 213 il_status = NF90_CREATE(TRIM(td_file%c_name),& 214 & cmode=NF90_64BIT_OFFSET,& 215 & ncid=td_file%i_id) 216 !NF90_WRITE, & 217 CALL iom_cdf__check(il_status," IOM CDF CREATE: ") 205 il_status = NF90_CREATE( TRIM(td_file%c_name),& 206 & NF90_WRITE, & 207 & td_file%i_id) 208 CALL iom_cdf__check(il_status) 218 209 219 210 td_file%l_def=.TRUE. … … 237 228 & NF90_NOWRITE, & 238 229 & td_file%i_id) 239 CALL iom_cdf__check(il_status," IOM CDF OPEN: ") 240 241 CALL logger_trace("IOM CDF OPEN "//TRIM(td_file%c_name)//" "//& 242 & TRIM(fct_str(td_file%i_id))) 230 CALL iom_cdf__check(il_status) 231 232 CALL logger_trace("IOM CDF OPEN "//TRIM(td_file%c_name)//" "//TRIM(fct_str(td_file%i_id))) 243 233 ELSE 244 234 … … 249 239 & NF90_WRITE, & 250 240 & td_file%i_id) 251 CALL iom_cdf__check(il_status ,"IOM CDF OPEN: ")241 CALL iom_cdf__check(il_status) 252 242 253 243 ENDIF … … 277 267 !> 278 268 !> @author J.Paul 279 !> @date November, 2013- Initial Version269 !> - November, 2013- Initial Version 280 270 ! 281 271 !> @param[inout] td_file file structure … … 301 291 302 292 il_status = NF90_CLOSE(td_file%i_id) 303 CALL iom_cdf__check(il_status ,"IOM CDF CLOSE: ")293 CALL iom_cdf__check(il_status) 304 294 305 295 td_file%i_id = 0 … … 317 307 !> 318 308 !> @author J.Paul 319 !> @date November, 2013- Initial Version309 !> - November, 2013- Initial Version 320 310 ! 321 311 !> @param[inout] td_file file structure … … 336 326 il_status=NF90_INQUIRE(td_file%i_id, td_file%i_ndim, & 337 327 & td_file%i_nvar, td_file%i_natt, td_file%i_uldid, il_fmt) 338 CALL iom_cdf__check(il_status ,"IOM CDF GET INFO: ")328 CALL iom_cdf__check(il_status) 339 329 340 330 SELECT CASE(il_fmt) … … 355 345 ! 356 346 !> @author J.Paul 357 !> @date November, 2013- Initial Version347 !> - November, 2013- Initial Version 358 348 ! 359 349 !> @param[inout] td_file file structure … … 406 396 ! 407 397 !> @author J.Paul 408 !> @date November, 2013- Initial Version398 !> - November, 2013- Initial Version 409 399 !> @date September, 2014 410 400 !> - use attribute periodicity read from the file if present. … … 449 439 ! 450 440 !> @author J.Paul 451 !> @date November, 2013- Initial Version441 !> - November, 2013- Initial Version 452 442 ! 453 443 !> @param[inout] td_file file structure … … 490 480 491 481 ! look for depth id 492 IF( INDEX(TRIM( fct_lower(td_file%t_var(ji)%c_name)),'depth')/=0 )THEN482 IF( INDEX(TRIM(td_file%t_var(ji)%c_name),'depth') /= 0 )THEN 493 483 IF( td_file%i_depthid == 0 )THEN 494 484 td_file%i_depthid=ji 495 485 ELSE 496 486 IF( td_file%i_depthid /= ji )THEN 497 CALL logger_error("IOM CDF GET FILE VAR: find more "//&498 & " than onedepth variable in file "//&499 &TRIM(td_file%c_name) )487 CALL logger_error("IOM CDF GET FILE VAR: find more than one "//& 488 & "depth variable in file "//& 489 & TRIM(td_file%c_name) ) 500 490 ENDIF 501 491 ENDIF … … 503 493 504 494 ! look for time id 505 IF( INDEX(TRIM( fct_lower(td_file%t_var(ji)%c_name)),'time')/=0 )THEN495 IF( INDEX(TRIM(td_file%t_var(ji)%c_name),'time') /= 0 )THEN 506 496 IF( td_file%i_timeid == 0 )THEN 507 497 td_file%i_timeid=ji … … 514 504 td_file%i_timeid=ji 515 505 !ELSE 516 ! CALL logger_error("IOM CDF GET FILE VAR: find more "//& 517 ! & "than one time variable in file "//& 506 ! print *,'error' 507 ! CALL logger_error("IOM OPEN: find more than one "//& 508 ! & "time variable in file "//& 518 509 ! & TRIM(td_file%c_name) ) 519 510 ENDIF … … 535 526 ! 536 527 !> @author J.Paul 537 !> @date November, 2013- Initial Version528 !> - November, 2013- Initial Version 538 529 ! 539 530 !> @param[inout] td_file file structure … … 576 567 ! 577 568 !> @author J.Paul 578 !> @date November, 2013 - Initial Version 579 !> @date February, 2015 - create unused dimension, when reading dimension 580 !> of length less or equal to zero 569 !> - November, 2013- Initial Version 581 570 ! 582 571 !> @param[in] td_file file structure … … 594 583 INTEGER(i4) :: il_len 595 584 CHARACTER(LEN=lc) :: cl_name 596 LOGICAL :: ll_use597 585 !---------------------------------------------------------------- 598 586 … … 613 601 il_status=NF90_INQUIRE_DIMENSION(td_file%i_id, id_dimid, & 614 602 & cl_name, il_len ) 615 CALL iom_cdf__check(il_status,"IOM CDF READ DIM: ") 616 617 ll_use=.TRUE. 618 IF( il_len <= 0 )THEN 619 CALL logger_warn( & 620 & " IOM CDF READ DIM: dimension "//TRIM(fct_str(id_dimid))//& 621 & " in file "//TRIM(td_file%c_name)//" is less or equel to zero") 622 il_len=1 623 ll_use=.FALSE. 624 ENDIF 625 iom_cdf__read_dim_id=dim_init(cl_name, il_len, ld_use=ll_use) 603 CALL iom_cdf__check(il_status) 604 605 iom_cdf__read_dim_id=dim_init(cl_name, il_len) 626 606 627 607 ENDIF … … 633 613 ! 634 614 !> @author J.Paul 635 !> @date November, 2013- Initial Version615 !> - November, 2013- Initial Version 636 616 ! 637 617 !> @param[in] td_file file structure … … 654 634 655 635 CALL logger_error( & 656 & " IOM CDF READ DIM: no id associated to file "//& 657 & TRIM(td_file%c_name)) 636 & " IOM CDF READ DIM: no id associated to file "//TRIM(td_file%c_name)) 658 637 659 638 ELSE … … 661 640 il_status=NF90_INQ_DIMID( td_file%i_id, TRIM(ADJUSTL(cd_name)), & 662 641 & il_dimid) 663 CALL iom_cdf__check(il_status ,"IOM CDF READ DIM: ")642 CALL iom_cdf__check(il_status) 664 643 665 644 iom_cdf__read_dim_name=iom_cdf_read_dim(td_file, il_dimid) … … 673 652 ! 674 653 !> @author J.Paul 675 !> @date November, 2013- Initial Version654 !> - November, 2013- Initial Version 676 655 ! 677 656 !> @param[in] td_file file structure … … 735 714 & il_len, & 736 715 & il_attid ) 737 CALL iom_cdf__check(il_status ,"IOM CDF READ ATT: ")716 CALL iom_cdf__check(il_status) 738 717 739 718 !! get attribute value 740 CALL logger_debug( " IOM CDF READ ATT: get attribute "// &741 & TRIM(cl_name)//" in file "//TRIM(td_file%c_name))719 CALL logger_debug( " IOM CDF READ ATT: get attribute "//TRIM(cl_name)//& 720 & " in file "//TRIM(td_file%c_name)) 742 721 743 722 SELECT CASE( il_type ) … … 749 728 750 729 CALL logger_error( & 751 & " IOM CDF READ ATT: not enough space to put "//&752 & "attribute "//TRIM(cl_name) )730 & " IOM CDF READ ATT: not enough space to put attribute "//& 731 & TRIM(cl_name) ) 753 732 754 733 ELSE … … 758 737 & cl_name, & 759 738 & cl_value ) 760 CALL iom_cdf__check(il_status ,"IOM CDF READ ATT: ")739 CALL iom_cdf__check(il_status) 761 740 762 741 iom_cdf__read_att_name=att_init(cl_name, cl_value) … … 779 758 & cl_name, & 780 759 & bl_value(:)) 781 CALL iom_cdf__check(il_status ,"IOM CDF READ ATT: ")760 CALL iom_cdf__check(il_status) 782 761 783 762 iom_cdf__read_att_name=att_init(cl_name, bl_value(:)) … … 794 773 795 774 CALL logger_error( & 796 & " IOM CDF READ ATT: not enough space to put "//&797 & "attribute "//TRIM(cl_name) )775 & " IOM CDF READ ATT: not enough space to put attribute "//& 776 & TRIM(cl_name) ) 798 777 799 778 ELSE … … 803 782 & cl_name, & 804 783 & sl_value(:)) 805 CALL iom_cdf__check(il_status ,"IOM CDF READ ATT: ")784 CALL iom_cdf__check(il_status) 806 785 807 786 iom_cdf__read_att_name=att_init(cl_name, sl_value(:)) … … 818 797 819 798 CALL logger_error( & 820 & " IOM CDF READ ATT: not enough space to put "//&821 & "attribute "//TRIM(cl_name) )799 & " IOM CDF READ ATT: not enough space to put attribute "//& 800 & TRIM(cl_name) ) 822 801 823 802 ELSE … … 827 806 & cl_name, & 828 807 & il_value(:)) 829 CALL iom_cdf__check(il_status ,"IOM CDF READ ATT: ")808 CALL iom_cdf__check(il_status) 830 809 831 810 iom_cdf__read_att_name=att_init(cl_name, il_value(:)) … … 841 820 842 821 CALL logger_error( & 843 & " IOM CDF READ ATT: not enough space to put "//&844 & "attribute "//TRIM(cl_name) )822 & " IOM CDF READ ATT: not enough space to put attribute "//& 823 & TRIM(cl_name) ) 845 824 846 825 ELSE … … 850 829 & cl_name, & 851 830 & fl_value(:)) 852 CALL iom_cdf__check(il_status ,"IOM CDF READ ATT: ")831 CALL iom_cdf__check(il_status) 853 832 854 833 iom_cdf__read_att_name=att_init(cl_name, fl_value(:)) … … 865 844 866 845 CALL logger_error( & 867 & " IOM CDF READ ATT: not enough space to put "//&868 & "attribute "//TRIM(cl_name) )846 & " IOM CDF READ ATT: not enough space to put attribute "//& 847 & TRIM(cl_name) ) 869 848 870 849 ELSE … … 874 853 & cl_name, & 875 854 & dl_value(:)) 876 CALL iom_cdf__check(il_status ,"IOM CDF READ ATT: ")855 CALL iom_cdf__check(il_status) 877 856 878 857 iom_cdf__read_att_name=att_init(cl_name, dl_value(:)) … … 894 873 ! 895 874 !> @author J.Paul 896 !> @date November, 2013- Initial Version875 !> - November, 2013- Initial Version 897 876 ! 898 877 !> @param[in] td_file file structure … … 923 902 ! get attribute name 924 903 il_status=NF90_INQ_ATTNAME(td_file%i_id, id_varid, id_attid, cl_name) 925 CALL iom_cdf__check(il_status ,"IOM CDF READ ATT: ")904 CALL iom_cdf__check(il_status) 926 905 927 906 ! read attribute … … 939 918 ! 940 919 !> @author J.Paul 941 !> @date November, 2013- Initial Version920 !> - November, 2013- Initial Version 942 921 ! 943 922 !> @param[in] td_file file structure … … 997 976 ! 998 977 !> @author J.Paul 999 !> @date November, 2013- Initial Version978 !> - November, 2013- Initial Version 1000 979 ! 1001 980 !> @param[in] td_file file structure … … 1064 1043 ! 1065 1044 !> @author J.Paul 1066 !> @date November, 2013- Initial Version1045 !> - November, 2013- Initial Version 1067 1046 ! 1068 1047 !> @param[inout] td_file file structure … … 1106 1085 ! 1107 1086 !> @author J.Paul 1108 !> @date November, 2013- Initial Version1087 !> - November, 2013- Initial Version 1109 1088 ! 1110 1089 !> @param[inout] td_file file structure … … 1169 1148 ! 1170 1149 !> @author J.Paul 1171 !> @date November, 2013- Initial Version1150 !> - November, 2013- Initial Version 1172 1151 ! 1173 1152 !> @param[inout] td_file file structure … … 1220 1199 ! 1221 1200 !> @author J.Paul 1222 !> @date November, 2013- Initial Version1201 !> - November, 2013- Initial Version 1223 1202 !> @date September, 2014 1224 1203 !> - force to use FillValue=1.e20 if no FillValue for coordinate variable. … … 1261 1240 1262 1241 ! inquire variable 1263 CALL logger_ debug( &1242 CALL logger_trace( & 1264 1243 & " IOM CDF READ VAR META: inquire variable "//& 1265 1244 & TRIM(fct_str(id_varid))//& … … 1274 1253 & il_dimid(:),& 1275 1254 & il_natt ) 1276 CALL iom_cdf__check(il_status ,"IOM CDF READ VAR META: ")1255 CALL iom_cdf__check(il_status) 1277 1256 !!! fill variable dimension structure 1278 1257 tl_dim(:)=iom_cdf__read_var_dim( td_file, il_ndim, il_dimid(:) ) 1279 1280 1258 IF( il_natt /= 0 )THEN 1281 1259 ALLOCATE( tl_att(il_natt) ) … … 1298 1276 ELSE 1299 1277 ! create attribute _FillValue 1300 SELECT CASE(TRIM( fct_lower(cl_name)))1278 SELECT CASE(TRIM(cl_name)) 1301 1279 CASE DEFAULT 1302 1280 CALL logger_info("IOM CDF READ VAR META: assume _FillValue is equal to "//& 1303 1281 & "zero for variable "//TRIM(cl_name) ) 1304 1282 tl_fill=att_init('_FillValue',0.) 1305 CASE('nav_lon','nav_lat', 'nav_lev',&1283 CASE('nav_lon','nav_lat', & 1306 1284 & 'glamt','glamu','glamv','glamf', & 1307 1285 & 'gphit','gphiu','gphiv','gphif') … … 1333 1311 ALLOCATE(tl_att(il_natt+1) ) 1334 1312 ! create attribute _FillValue 1335 SELECT CASE(TRIM( fct_lower(cl_name)))1313 SELECT CASE(TRIM(cl_name)) 1336 1314 CASE DEFAULT 1337 1315 CALL logger_info("IOM CDF READ VAR META: assume _FillValue is equal to "//& … … 1375 1353 ! 1376 1354 !> @author J.Paul 1377 !> @date November, 2013 - Initial Version 1378 !> @date July, 2015 1379 !> - Bug fix: use order to disorder table (see dim_init) 1380 !> 1355 !> - November, 2013- Initial Version 1356 ! 1381 1357 !> @param[in] td_file file structure 1382 1358 !> @param[in] id_ndim number of dimension … … 1395 1371 1396 1372 ! local variable 1397 INTEGER(i4), DIMENSION(ip_maxdim) :: il_ xyzt21373 INTEGER(i4), DIMENSION(ip_maxdim) :: il_2xyzt 1398 1374 1399 1375 TYPE(TDIM) , DIMENSION(ip_maxdim) :: tl_dim … … 1419 1395 1420 1396 DO ji = 1, id_ndim 1421 CALL logger_ debug( " IOM CDF READ VAR DIM: get variable"//&1422 & "dimension "//TRIM(fct_str(ji)) )1423 1424 il_ xyzt2(ji)=td_file%t_dim(id_dimid(ji))%i_xyzt21397 CALL logger_trace( " IOM CDF READ VAR DIM: get variable dimension "//& 1398 & TRIM(fct_str(ji)) ) 1399 1400 il_2xyzt(ji)=td_file%t_dim(id_dimid(ji))%i_2xyzt 1425 1401 1426 1402 ! read dimension information 1427 tl_dim(ji) = dim_init( td_file%t_dim(il_ xyzt2(ji))%c_name, &1428 & td_file%t_dim(il_ xyzt2(ji))%i_len )1403 tl_dim(ji) = dim_init( td_file%t_dim(il_2xyzt(ji))%c_name, & 1404 & td_file%t_dim(il_2xyzt(ji))%i_len ) 1429 1405 ENDDO 1430 1406 1431 1407 ! reorder dimension to ('x','y','z','t') 1432 1408 CALL dim_reorder(tl_dim(:)) 1433 1409 1434 1410 iom_cdf__read_var_dim(:)=dim_copy(tl_dim(:)) 1435 1411 … … 1450 1426 ! 1451 1427 !> @author J.Paul 1452 !> @date November, 2013- Initial Version1428 !> - November, 2013- Initial Version 1453 1429 ! 1454 1430 !> @param[in] td_file file structure … … 1499 1475 ! 1500 1476 !> @author J.Paul 1501 !> @date November, 2013 - Initial Version 1502 !> @date June, 2015 1503 !> - use scale factor and offset, as soon as read variable value 1477 !> - November, 2013- Initial Version 1504 1478 ! 1505 1479 !> @param[in] td_file file structure … … 1508 1482 !> @param[in] id_count number of indices selected along each dimension 1509 1483 !> @return variable structure completed 1484 ! 1485 !> @todo 1486 !> - warning do not change fill value when use scale factor.. 1510 1487 !------------------------------------------------------------------- 1511 1488 SUBROUTINE iom_cdf__read_var_value(td_file, td_var, & … … 1519 1496 1520 1497 ! local variable 1521 INTEGER(i4) :: il_status 1522 INTEGER(i4) :: il_tmp1 1523 INTEGER(i4) :: il_tmp2 1524 INTEGER(i4) :: il_varid 1525 INTEGER(i4), DIMENSION(ip_maxdim) :: il_start 1526 INTEGER(i4), DIMENSION(ip_maxdim) :: il_count 1527 INTEGER(i4), DIMENSION(ip_maxdim) :: il_start_ord 1528 INTEGER(i4), DIMENSION(ip_maxdim) :: il_count_ord 1529 1498 INTEGER(i4) :: il_status 1499 INTEGER(i4) :: il_tmp1 1500 INTEGER(i4) :: il_tmp2 1501 INTEGER(i4) :: il_varid 1502 INTEGER(i4), DIMENSION(ip_maxdim) :: il_start 1503 INTEGER(i4), DIMENSION(ip_maxdim) :: il_count 1504 INTEGER(i4), DIMENSION(ip_maxdim) :: il_start_ord 1505 INTEGER(i4), DIMENSION(ip_maxdim) :: il_count_ord 1530 1506 REAL(dp) , DIMENSION(:,:,:,:) , ALLOCATABLE :: dl_value 1531 1507 REAL(dp) , DIMENSION(:,:,:,:) , ALLOCATABLE :: dl_tmp … … 1542 1518 IF( ( PRESENT(id_start) .AND. (.NOT. PRESENT(id_count))) .OR. & 1543 1519 ((.NOT. PRESENT(id_start)) .AND. PRESENT(id_count) ) )THEN 1544 CALL logger_warn( "IOM CDF READ VAR VALUE: id_start and id_count"//&1545 & "should be both specify")1520 CALL logger_warn( & 1521 & "IOM CDF READ VAR VALUE: id_start and id_count should be both specify") 1546 1522 ENDIF 1547 1523 IF( PRESENT(id_start).AND.PRESENT(id_count) )THEN … … 1549 1525 IF( SIZE(id_start(:)) /= ip_maxdim .OR. & 1550 1526 & SIZE(id_count(:)) /= ip_maxdim )THEN 1551 CALL logger_error("IOM CDF READ VAR: dimension of array start "//&1552 & " or count are invalid to read variable "//&1553 & TRIM(td_var%c_name)//" in file "//TRIM(td_file%c_name) )1527 CALL logger_error("IOM CDF READ VAR: dimension of array start or count "//& 1528 & " are invalid to read variable "//TRIM(td_var%c_name)//& 1529 & " in file "//TRIM(td_file%c_name) ) 1554 1530 ENDIF 1555 1531 … … 1588 1564 & td_var%t_dim( 4 )%i_len & 1589 1565 & /)) )THEN 1566 1567 CALL logger_error( "IOM CDF READ VAR VALUE: start + count exceed "//& 1568 & "variable dimension for "//TRIM(td_var%c_name) ) 1590 1569 1591 1570 DO ji = 1, ip_maxdim … … 1596 1575 & TRIM(fct_str(il_tmp2))) 1597 1576 ENDDO 1598 CALL logger_error( "IOM CDF READ VAR VALUE: start + count exceed "//&1599 & "variable dimension for "//TRIM(td_var%c_name) )1600 1577 1601 1578 ELSE 1602 1579 1603 ! Allocate space to hold variable value ( disorder)1580 ! Allocate space to hold variable value (unorder) 1604 1581 ALLOCATE(dl_value( il_count(1), & 1605 1582 & il_count(2), & … … 1624 1601 & start = il_start(:),& 1625 1602 & count = il_count(:) ) 1626 CALL iom_cdf__check(il_status ,"IOM CDF READ VAR VALUE: ")1603 CALL iom_cdf__check(il_status) 1627 1604 1628 1605 ! Allocate space to hold variable value in structure … … 1686 1663 CALL var_chg_FillValue(td_var) 1687 1664 ENDIF 1688 1689 ! use scale factor and offset1690 WHERE( td_var%d_value(:,:,:,:) /= td_var%d_fill )1691 td_var%d_value(:,:,:,:) = &1692 & td_var%d_value(:,:,:,:)*td_var%d_scf + td_var%d_ofs1693 END WHERE1694 1695 1665 ENDIF 1696 1666 ELSE … … 1703 1673 !------------------------------------------------------------------- 1704 1674 !> @brief This subroutine write file structure in an opened netcdf file. 1705 !> 1706 !> @details 1707 !> optionally, you could specify dimension order (default 'xyzt') 1708 !> 1709 !> @author J.Paul 1710 !> @date November, 2013 - Initial Version 1711 !> @date July, 2015 1712 !> - add dimension order option 1675 ! 1676 !> @author J.Paul 1677 !> - November, 2013- Initial Version 1713 1678 ! 1714 1679 !> @param[inout] td_file file structure 1715 1680 !------------------------------------------------------------------- 1716 SUBROUTINE iom_cdf_write_file(td_file, cd_dimorder) 1717 IMPLICIT NONE 1718 ! Argument 1719 TYPE(TFILE) , INTENT(INOUT) :: td_file 1720 CHARACTER(LEN=*), INTENT(IN ), OPTIONAL :: cd_dimorder 1681 SUBROUTINE iom_cdf_write_file(td_file) 1682 IMPLICIT NONE 1683 ! Argument 1684 TYPE(TFILE), INTENT(INOUT) :: td_file 1721 1685 1722 1686 ! local variable 1723 1687 INTEGER(i4), DIMENSION(:), ALLOCATABLE :: il_value 1724 1725 CHARACTER(LEN=lc) :: cl_dimorder1726 1688 1727 1689 TYPE(TVAR) :: tl_var … … 1732 1694 INTEGER(i4) :: ji 1733 1695 INTEGER(i4) :: jj 1734 INTEGER(i4) :: jvar 1735 !---------------------------------------------------------------- 1736 1737 cl_dimorder='xyzt' 1738 IF( PRESENT(cd_dimorder) ) cl_dimorder=TRIM(cd_dimorder) 1696 !---------------------------------------------------------------- 1739 1697 1740 1698 ! check if file opened … … 1768 1726 ENDIF 1769 1727 1770 ! change dimension order1771 IF( TRIM(cl_dimorder) /= 'xyzt' )THEN1772 CALL dim_reorder(td_file%t_dim(:),TRIM(cl_dimorder))1773 DO jvar=1,td_file%i_nvar1774 CALL logger_debug("VAR REORDER: "//TRIM(td_file%t_var(jvar)%c_name))1775 CALL var_reorder(td_file%t_var(jvar),TRIM(cl_dimorder))1776 ENDDO1777 ENDIF1778 1779 1728 ! write dimension in file 1780 1729 DO ji = 1, ip_maxdim … … 1827 1776 ! 1828 1777 !> @author J.Paul 1829 !> @date November, 2013- Initial Version1778 !> - November, 2013- Initial Version 1830 1779 ! 1831 1780 !> @param[inout] td_file file structure … … 1849 1798 ! Enter define mode 1850 1799 il_status=NF90_REDEF(td_file%i_id) 1851 CALL iom_cdf__check(il_status ,"IOM CDF WRITE FILE DIM: ")1800 CALL iom_cdf__check(il_status) 1852 1801 1853 1802 td_file%l_def=.TRUE. … … 1864 1813 il_status=NF90_DEF_DIM(td_file%i_id, fct_upper(td_dim%c_sname), & 1865 1814 & NF90_UNLIMITED, td_dim%i_id) 1866 CALL iom_cdf__check(il_status ,"IOM CDF WRITE FILE DIM: ")1815 CALL iom_cdf__check(il_status) 1867 1816 1868 1817 ELSE 1869 1818 ! write not unlimited dimension 1870 CALL logger_ debug( &1819 CALL logger_trace( & 1871 1820 & "IOM CDF WRITE FILE DIM: write dimension "//TRIM(td_dim%c_name)//& 1872 1821 & " in file "//TRIM(td_file%c_name)) … … 1874 1823 il_status=NF90_DEF_DIM(td_file%i_id, fct_upper(td_dim%c_sname), & 1875 1824 & td_dim%i_len, td_dim%i_id) 1876 CALL iom_cdf__check(il_status ,"IOM CDF WRITE FILE DIM: ")1825 CALL iom_cdf__check(il_status) 1877 1826 1878 1827 ENDIF … … 1885 1834 ! 1886 1835 !> @author J.Paul 1887 !> @date November, 2013- Initial Version1836 !> - November, 2013- Initial Version 1888 1837 ! 1889 1838 !> @param[inout] td_file file structure … … 1910 1859 ! Enter define mode 1911 1860 il_status=NF90_REDEF(td_file%i_id) 1912 CALL iom_cdf__check(il_status ,"IOM CDF WRITE FILE ATT: ")1861 CALL iom_cdf__check(il_status) 1913 1862 1914 1863 td_file%l_def=.TRUE. … … 1927 1876 il_status = NF90_PUT_ATT(td_file%i_id, id_varid, & 1928 1877 & td_att%c_name, td_att%c_value ) 1929 CALL iom_cdf__check(il_status ,"IOM CDF WRITE FILE ATT: ")1878 CALL iom_cdf__check(il_status) 1930 1879 1931 1880 CASE(NF90_BYTE, NF90_SHORT, NF90_INT, NF90_FLOAT, NF90_DOUBLE) … … 1933 1882 il_status = NF90_PUT_ATT(td_file%i_id, id_varid, & 1934 1883 & td_att%c_name, td_att%d_value ) 1935 CALL iom_cdf__check(il_status ,"IOM CDF WRITE FILE ATT: ")1884 CALL iom_cdf__check(il_status) 1936 1885 1937 1886 END SELECT … … 1942 1891 ! 1943 1892 !> @author J.Paul 1944 !> @date November, 2013- Initial Version1893 !> - November, 2013- Initial Version 1945 1894 ! 1946 1895 !> @param[inout] td_file file structure … … 1968 1917 ! Enter define mode 1969 1918 il_status=NF90_REDEF(td_file%i_id) 1970 CALL iom_cdf__check(il_status ,"IOM CDF WRITE VAR: ")1919 CALL iom_cdf__check(il_status) 1971 1920 1972 1921 td_file%l_def=.TRUE. 1973 1922 1974 1923 ENDIF 1975 1924 1976 1925 ! check if file and variable dimension conform 1977 1926 IF( file_check_var_dim(td_file, td_var) )THEN … … 1989 1938 ENDIF 1990 1939 ENDDO 1991 ! ugly patch until NEMO do not force to use 0. as FillValue1992 1940 IF( ll_chg )THEN 1993 1941 ! not a dimension variable 1994 1942 ! change FillValue 1995 SELECT CASE( TRIM(fct_lower(td_var%c_name)) ) 1996 CASE DEFAULT 1997 CALL var_chg_FillValue(td_var,0._dp) 1998 CASE('nav_lon','nav_lat', & 1999 & 'glamt','glamu','glamv','glamf', & 2000 & 'gphit','gphiu','gphiv','gphif') 2001 END SELECT 1943 1944 ! ugly patch until NEMO do not force to use 0. as FillValue 1945 CALL var_chg_FillValue(td_var,0._dp) 2002 1946 ENDIF 2003 1947 … … 2013 1957 ! Leave define mode 2014 1958 il_status=NF90_ENDDEF(td_file%i_id) 2015 CALL iom_cdf__check(il_status ,"IOM CDF WRITE VAR: ")1959 CALL iom_cdf__check(il_status) 2016 1960 2017 1961 td_file%l_def=.FALSE. … … 2031 1975 ! 2032 1976 !> @author J.Paul 2033 !> @date November, 2013- Initial Version1977 !> - November, 2013- Initial Version 2034 1978 ! 2035 1979 !> @param[in] td_file file structure … … 2058 2002 tl_var=var_copy(td_var) 2059 2003 2060 ! forced to use float type2061 IF( tl_var%d_unf /= 1. .AND. tl_var%i_type==NF90_SHORT )THEN2062 tl_var%i_type=NF90_FLOAT2063 ENDIF2064 2065 2004 IF( ALL( .NOT. tl_var%t_dim(:)%l_use ) )THEN 2066 CALL logger_debug( &2067 & "IOM CDF WRITE VAR DEF scalar: define variable "//&2068 & TRIM(tl_var%c_name)//" in file "//TRIM(td_file%c_name))2069 2005 ! scalar value 2070 2006 il_status = NF90_DEF_VAR(td_file%i_id, TRIM(tl_var%c_name), & 2071 2007 & tl_var%i_type, varid=iom_cdf__write_var_def) 2072 CALL iom_cdf__check(il_status ,"IOM CDF WRITE VAR DEF: ")2008 CALL iom_cdf__check(il_status) 2073 2009 ELSE 2074 2010 … … 2084 2020 ENDDO 2085 2021 2086 CALL logger_ debug( &2022 CALL logger_trace( & 2087 2023 & "IOM CDF WRITE VAR DEF: define dimension to be used for variable "//& 2088 2024 & TRIM(tl_var%c_name)//" in file "//TRIM(td_file%c_name)) 2089 2025 2090 2026 DO ji=1,jj 2091 CALL logger_ debug("IOM CDF WRITE VAR DEF: dimid "//TRIM(fct_str(il_dimid(ji))) )2027 CALL logger_trace("IOM CDF WRITE VAR DEF: dimid "//TRIM(fct_str(il_dimid(ji))) ) 2092 2028 ENDDO 2093 2094 2029 il_status = NF90_DEF_VAR(td_file%i_id, TRIM(tl_var%c_name), & 2095 2030 & tl_var%i_type, & 2096 2031 & il_dimid(1:jj), & 2097 2032 & varid=iom_cdf__write_var_def ) 2098 CALL iom_cdf__check(il_status ,"IOM CDF WRITE VAR DEF: ")2033 CALL iom_cdf__check(il_status) 2099 2034 ENDIF 2100 2035 … … 2108 2043 2109 2044 DO ji = 1, tl_var%i_natt 2110 CALL logger_ debug( &2045 CALL logger_trace( & 2111 2046 & " IOM CDF WRITE VAR DEF: put attribute "//TRIM(tl_var%t_att(ji)%c_name)//& 2112 2047 & " for variable "//TRIM(tl_var%c_name)//& 2113 2048 & " in file "//TRIM(td_file%c_name) ) 2114 2115 ! forced FillValue to have same type than variable2116 IF( TRIM(tl_var%t_att(ji)%c_name) == '_FillValue' )THEN2117 tl_var%t_att(ji)%i_type=tl_var%i_type2118 ENDIF2119 2049 2120 2050 IF( tl_var%t_att(ji)%i_type == NF90_CHAR )THEN … … 2123 2053 & TRIM(tl_var%t_att(ji)%c_name), & 2124 2054 & TRIM(tl_var%t_att(ji)%c_value) ) 2125 CALL iom_cdf__check(il_status ,"IOM CDF WRITE VAR DEF: ")2055 CALL iom_cdf__check(il_status) 2126 2056 ENDIF 2127 2057 ELSE … … 2152 2082 & TRIM(tl_var%t_att(ji)%c_name), & 2153 2083 & REAL(tl_var%t_att(ji)%d_value(:),dp)) 2154 END SELECT2155 CALL iom_cdf__check(il_status ,"IOM CDF WRITE VAR DEF: ")2084 END SELECT 2085 CALL iom_cdf__check(il_status) 2156 2086 ENDIF 2157 2087 ENDDO … … 2167 2097 ! 2168 2098 !> @author J.Paul 2169 !> @date November, 2013 - Initial Version 2170 !> @date June, 2015 2171 !> - reuse scale factor and offset, before writing variable 2099 !> - November, 2013- Initial Version 2172 2100 ! 2173 2101 !> @param[in] td_file file structure … … 2194 2122 & "IOM CDF WRITE VAR VALUE: get dimension to be used for variable "//& 2195 2123 & TRIM(td_var%c_name)//" in file "//TRIM(td_file%c_name)) 2196 2197 ! use scale factor and offset 2198 WHERE( td_var%d_value(:,:,:,:) /= td_var%d_fill ) 2199 td_var%d_value(:,:,:,:) = & 2200 & (td_var%d_value(:,:,:,:)-td_var%d_ofs)/td_var%d_scf 2201 END WHERE 2202 2124 2203 2125 jj=0 2204 2126 DO ji = 1, ip_maxdim … … 2231 2153 2232 2154 il_status = NF90_PUT_VAR( td_file%i_id, td_var%i_id, dl_value(:,:,:,:)) 2233 CALL iom_cdf__check(il_status ,"IOM CDF WRITE VAR VALUE: ")2155 CALL iom_cdf__check(il_status) 2234 2156 2235 2157 DEALLOCATE( dl_value )
Note: See TracChangeset
for help on using the changeset viewer.