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