- Timestamp:
- 2016-04-07T16:32:24+02:00 (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/UKMO/dev_r5518_GC3p0_package/NEMOGCM/TOOLS/SIREN/src/iom_cdf.f90
r5037 r6440 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( 206 & NF90_WRITE,&207 & 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 CALL iom_cdf__check(il_status," IOM CDF CREATE: ") 209 217 210 218 td_file%l_def=.TRUE. … … 213 221 214 222 ELSE 223 215 224 IF( td_file%i_id /= 0 )THEN 216 225 … … 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 233 241 ELSE 234 242 … … 239 247 & NF90_WRITE, & 240 248 & td_file%i_id) 241 CALL iom_cdf__check(il_status )249 CALL iom_cdf__check(il_status,"IOM CDF OPEN: ") 242 250 243 251 ENDIF … … 267 275 !> 268 276 !> @author J.Paul 269 !> - November, 2013- Initial Version277 !> @date November, 2013 - Initial Version 270 278 ! 271 279 !> @param[inout] td_file file structure … … 291 299 292 300 il_status = NF90_CLOSE(td_file%i_id) 293 CALL iom_cdf__check(il_status )301 CALL iom_cdf__check(il_status,"IOM CDF CLOSE: ") 294 302 295 303 td_file%i_id = 0 … … 307 315 !> 308 316 !> @author J.Paul 309 !> - November, 2013- Initial Version317 !> @date November, 2013 - Initial Version 310 318 ! 311 319 !> @param[inout] td_file file structure … … 326 334 il_status=NF90_INQUIRE(td_file%i_id, td_file%i_ndim, & 327 335 & td_file%i_nvar, td_file%i_natt, td_file%i_uldid, il_fmt) 328 CALL iom_cdf__check(il_status )336 CALL iom_cdf__check(il_status,"IOM CDF GET INFO: ") 329 337 330 338 SELECT CASE(il_fmt) … … 345 353 ! 346 354 !> @author J.Paul 347 !> - November, 2013- Initial Version355 !> @date November, 2013 - Initial Version 348 356 ! 349 357 !> @param[inout] td_file file structure … … 353 361 ! Argument 354 362 TYPE(TFILE), INTENT(INOUT) :: td_file 363 ! local variable 364 TYPE(TDIM) :: tl_dim 355 365 356 366 ! loop indices 357 367 INTEGER(i4) :: ji 368 INTEGER(i4) :: ii 358 369 !---------------------------------------------------------------- 359 370 … … 364 375 365 376 IF( td_file%i_ndim > 0 )THEN 377 ii=1 366 378 DO ji = 1, td_file%i_ndim 367 379 ! read dimension information 368 td_file%t_dim(ji)=iom_cdf_read_dim( td_file, ji) 380 tl_dim=iom_cdf_read_dim( td_file, ji) 381 IF( .NOT. dim_is_dummy(tl_dim) )THEN 382 IF( ii > ip_maxdim )THEN 383 CALL logger_fatal("IOM CDF OPEN: too much dimension "//& 384 & "to be read. you should remove dummy dimension using "//& 385 & " configuration file") 386 ENDIF 387 td_file%t_dim(ii)=dim_copy(tl_dim) 388 ii=ii+1 389 ENDIF 369 390 ENDDO 370 391 … … 396 417 ! 397 418 !> @author J.Paul 398 !> - November, 2013- Initial Version419 !> @date November, 2013 - Initial Version 399 420 !> @date September, 2014 400 421 !> - use attribute periodicity read from the file if present. … … 408 429 409 430 ! local variable 431 TYPE(TATT) :: tl_att 432 410 433 ! loop indices 411 434 INTEGER(i4) :: ji 435 INTEGER(i4) :: ii 412 436 !---------------------------------------------------------------- 413 437 … … 419 443 ALLOCATE(td_file%t_att(td_file%i_natt)) 420 444 445 ii=1 421 446 DO ji = 1, td_file%i_natt 422 447 ! read global attribute 423 td_file%t_att(ji)=iom_cdf_read_att( td_file, NF90_GLOBAL, ji) 448 tl_att=iom_cdf_read_att( td_file, NF90_GLOBAL, ji) 449 IF( .NOT. att_is_dummy(tl_att) )THEN 450 td_file%t_att(ii)=att_copy(tl_att) 451 ii=ii+1 452 ENDIF 424 453 425 454 ENDDO … … 439 468 ! 440 469 !> @author J.Paul 441 !> - November, 2013- Initial Version 470 !> @date November, 2013 - Initial Version 471 !> @date September, 2015 472 !> - manage useless (dummy) variable 473 !> @date January, 2016 474 !> - increment n3d for 4D variable 442 475 ! 443 476 !> @param[inout] td_file file structure … … 450 483 ! local variable 451 484 INTEGER(i4) :: il_attid 485 INTEGER(i4) :: il_nvar 486 487 TYPE(TVAR), DIMENSION(:), ALLOCATABLE :: tl_var 452 488 453 489 ! loop indices 454 490 INTEGER(i4) :: ji 491 INTEGER(i4) :: ii 455 492 !---------------------------------------------------------------- 456 493 457 494 IF( td_file%i_nvar > 0 )THEN 495 458 496 IF(ASSOCIATED(td_file%t_var))THEN 459 497 CALL var_clean(td_file%t_var(:)) 460 498 DEALLOCATE(td_file%t_var) 461 499 ENDIF 500 501 il_nvar=td_file%i_nvar 502 ALLOCATE(tl_var(il_nvar)) 503 ii=0 504 DO ji = 1, il_nvar 505 ! read variable information 506 tl_var(ji)=iom_cdf__read_var_meta( td_file, ji) 507 IF( .NOT. var_is_dummy(tl_var(ji)) )THEN 508 ii=ii+1 509 ENDIF 510 ENDDO 511 512 ! update number of variable used 513 td_file%i_nvar=ii 514 462 515 ALLOCATE(td_file%t_var(td_file%i_nvar)) 463 516 464 DO ji = 1, td_file%i_nvar 465 ! read dimension information 466 td_file%t_var(ji)=iom_cdf__read_var_meta( td_file, ji) 467 SELECT CASE(td_file%t_var(ji)%i_ndim) 468 CASE(0) 469 td_file%i_n0d=td_file%i_n0d+1 470 CASE(1) 471 td_file%i_n1d=td_file%i_n1d+1 472 td_file%i_rhd=td_file%i_rhd+1 473 CASE(2) 474 td_file%i_n2d=td_file%i_n2d+1 475 td_file%i_rhd=td_file%i_rhd+1 476 CASE(3) 477 td_file%i_n3d=td_file%i_n3d+1 478 td_file%i_rhd=td_file%i_rhd+td_file%t_dim(3)%i_len 479 END SELECT 480 481 ! look for depth id 482 IF( INDEX(TRIM(td_file%t_var(ji)%c_name),'depth') /= 0 )THEN 483 IF( td_file%i_depthid == 0 )THEN 484 td_file%i_depthid=ji 485 ELSE 486 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) ) 517 ii=0 518 DO ji = 1, il_nvar 519 IF( .NOT. var_is_dummy(tl_var(ji)) )THEN 520 ii=ii+1 521 td_file%t_var(ii)=var_copy(tl_var(ji)) 522 SELECT CASE(td_file%t_var(ii)%i_ndim) 523 CASE(0) 524 td_file%i_n0d=td_file%i_n0d+1 525 CASE(1) 526 td_file%i_n1d=td_file%i_n1d+1 527 td_file%i_rhd=td_file%i_rhd+1 528 CASE(2) 529 td_file%i_n2d=td_file%i_n2d+1 530 td_file%i_rhd=td_file%i_rhd+1 531 CASE(3,4) 532 td_file%i_n3d=td_file%i_n3d+1 533 td_file%i_rhd=td_file%i_rhd+td_file%t_dim(3)%i_len 534 END SELECT 535 536 ! look for depth id 537 IF( INDEX(TRIM(fct_lower(td_file%t_var(ii)%c_name)),'depth')/=0 )THEN 538 IF( td_file%i_depthid == 0 )THEN 539 td_file%i_depthid=ji 540 ELSE 541 IF( td_file%i_depthid /= ji )THEN 542 CALL logger_error("IOM CDF GET FILE VAR: find more"//& 543 & " than one depth variable in file "//& 544 & TRIM(td_file%c_name) ) 545 ENDIF 490 546 ENDIF 491 547 ENDIF 492 ENDIF 493 494 ! look for time id 495 IF( INDEX(TRIM(td_file%t_var(ji)%c_name),'time') /= 0 )THEN 496 IF( td_file%i_timeid == 0 )THEN 497 td_file%i_timeid=ji 498 ELSE 499 il_attid=0 500 IF( ASSOCIATED(td_file%t_var(ji)%t_att) )THEN 501 il_attid=att_get_id(td_file%t_var(ji)%t_att(:),'calendar') 502 ENDIF 503 IF( il_attid /= 0 )THEN 548 549 ! look for time id 550 IF( INDEX(TRIM(fct_lower(td_file%t_var(ii)%c_name)),'time')/=0 )THEN 551 IF( td_file%i_timeid == 0 )THEN 504 552 td_file%i_timeid=ji 505 !ELSE 506 ! print *,'error' 507 ! CALL logger_error("IOM OPEN: find more than one "//& 508 ! & "time variable in file "//& 509 ! & TRIM(td_file%c_name) ) 553 ELSE 554 il_attid=0 555 IF( ASSOCIATED(td_file%t_var(ii)%t_att) )THEN 556 il_attid=att_get_id(td_file%t_var(ii)%t_att(:),'calendar') 557 ENDIF 558 IF( il_attid /= 0 )THEN 559 td_file%i_timeid=ji 560 !ELSE 561 ! CALL logger_error("IOM CDF GET FILE VAR: find more "//& 562 ! & "than one time variable in file "//& 563 ! & TRIM(td_file%c_name) ) 564 ENDIF 510 565 ENDIF 511 566 ENDIF 567 512 568 ENDIF 513 514 569 ENDDO 570 571 CALL var_clean(tl_var(:)) 572 DEALLOCATE(tl_var) 515 573 516 574 ELSE … … 526 584 ! 527 585 !> @author J.Paul 528 !> - November, 2013- Initial Version586 !> @date November, 2013 - Initial Version 529 587 ! 530 588 !> @param[inout] td_file file structure … … 567 625 ! 568 626 !> @author J.Paul 569 !> - November, 2013- Initial Version 627 !> @date November, 2013 - Initial Version 628 !> @date February, 2015 - create unused dimension, when reading dimension 629 !> of length less or equal to zero 570 630 ! 571 631 !> @param[in] td_file file structure … … 583 643 INTEGER(i4) :: il_len 584 644 CHARACTER(LEN=lc) :: cl_name 645 LOGICAL :: ll_use 585 646 !---------------------------------------------------------------- 586 647 … … 592 653 593 654 ELSE 594 595 iom_cdf__read_dim_id%i_id=id_dimid596 655 597 656 CALL logger_trace( & … … 601 660 il_status=NF90_INQUIRE_DIMENSION(td_file%i_id, id_dimid, & 602 661 & cl_name, il_len ) 603 CALL iom_cdf__check(il_status) 604 605 iom_cdf__read_dim_id=dim_init(cl_name, il_len) 606 607 ENDIF 662 CALL iom_cdf__check(il_status,"IOM CDF READ DIM: ") 663 664 ll_use=.TRUE. 665 IF( il_len <= 0 )THEN 666 CALL logger_warn( & 667 & " IOM CDF READ DIM: dimension "//TRIM(fct_str(id_dimid))//& 668 & " in file "//TRIM(td_file%c_name)//" is less or equel to zero") 669 il_len=1 670 ll_use=.FALSE. 671 ENDIF 672 iom_cdf__read_dim_id=dim_init(cl_name, il_len, ld_use=ll_use) 673 674 ENDIF 675 676 iom_cdf__read_dim_id%i_id=id_dimid 608 677 609 678 END FUNCTION iom_cdf__read_dim_id … … 613 682 ! 614 683 !> @author J.Paul 615 !> - November, 2013- Initial Version684 !> @date November, 2013 - Initial Version 616 685 ! 617 686 !> @param[in] td_file file structure … … 634 703 635 704 CALL logger_error( & 636 & " IOM CDF READ DIM: no id associated to file "//TRIM(td_file%c_name)) 705 & " IOM CDF READ DIM: no id associated to file "//& 706 & TRIM(td_file%c_name)) 637 707 638 708 ELSE … … 640 710 il_status=NF90_INQ_DIMID( td_file%i_id, TRIM(ADJUSTL(cd_name)), & 641 711 & il_dimid) 642 CALL iom_cdf__check(il_status )712 CALL iom_cdf__check(il_status,"IOM CDF READ DIM: ") 643 713 644 714 iom_cdf__read_dim_name=iom_cdf_read_dim(td_file, il_dimid) … … 652 722 ! 653 723 !> @author J.Paul 654 !> - November, 2013- Initial Version724 !> @date November, 2013 - Initial Version 655 725 ! 656 726 !> @param[in] td_file file structure … … 714 784 & il_len, & 715 785 & il_attid ) 716 CALL iom_cdf__check(il_status )786 CALL iom_cdf__check(il_status,"IOM CDF READ ATT: ") 717 787 718 788 !! get attribute value 719 CALL logger_debug( " IOM CDF READ ATT: get attribute "// TRIM(cl_name)//&720 &" in file "//TRIM(td_file%c_name))789 CALL logger_debug( " IOM CDF READ ATT: get attribute "//& 790 & TRIM(cl_name)//" in file "//TRIM(td_file%c_name)) 721 791 722 792 SELECT CASE( il_type ) … … 727 797 IF( LEN(cl_value) < il_len )THEN 728 798 729 CALL logger_ error( &730 & " IOM CDF READ ATT: not enough space to put attribute"//&731 & TRIM(cl_name) )799 CALL logger_warn( & 800 & " IOM CDF READ ATT: not enough space to put "//& 801 & "attribute "//TRIM(cl_name) ) 732 802 733 803 ELSE … … 737 807 & cl_name, & 738 808 & cl_value ) 739 CALL iom_cdf__check(il_status )809 CALL iom_cdf__check(il_status,"IOM CDF READ ATT: ") 740 810 741 811 iom_cdf__read_att_name=att_init(cl_name, cl_value) … … 758 828 & cl_name, & 759 829 & bl_value(:)) 760 CALL iom_cdf__check(il_status )830 CALL iom_cdf__check(il_status,"IOM CDF READ ATT: ") 761 831 762 832 iom_cdf__read_att_name=att_init(cl_name, bl_value(:)) … … 773 843 774 844 CALL logger_error( & 775 & " IOM CDF READ ATT: not enough space to put attribute"//&776 & TRIM(cl_name) )845 & " IOM CDF READ ATT: not enough space to put "//& 846 & "attribute "//TRIM(cl_name) ) 777 847 778 848 ELSE … … 782 852 & cl_name, & 783 853 & sl_value(:)) 784 CALL iom_cdf__check(il_status )854 CALL iom_cdf__check(il_status,"IOM CDF READ ATT: ") 785 855 786 856 iom_cdf__read_att_name=att_init(cl_name, sl_value(:)) … … 797 867 798 868 CALL logger_error( & 799 & " IOM CDF READ ATT: not enough space to put attribute"//&800 & TRIM(cl_name) )869 & " IOM CDF READ ATT: not enough space to put "//& 870 & "attribute "//TRIM(cl_name) ) 801 871 802 872 ELSE … … 806 876 & cl_name, & 807 877 & il_value(:)) 808 CALL iom_cdf__check(il_status )878 CALL iom_cdf__check(il_status,"IOM CDF READ ATT: ") 809 879 810 880 iom_cdf__read_att_name=att_init(cl_name, il_value(:)) … … 820 890 821 891 CALL logger_error( & 822 & " IOM CDF READ ATT: not enough space to put attribute"//&823 & TRIM(cl_name) )892 & " IOM CDF READ ATT: not enough space to put "//& 893 & "attribute "//TRIM(cl_name) ) 824 894 825 895 ELSE … … 829 899 & cl_name, & 830 900 & fl_value(:)) 831 CALL iom_cdf__check(il_status )901 CALL iom_cdf__check(il_status,"IOM CDF READ ATT: ") 832 902 833 903 iom_cdf__read_att_name=att_init(cl_name, fl_value(:)) … … 844 914 845 915 CALL logger_error( & 846 & " IOM CDF READ ATT: not enough space to put attribute"//&847 & TRIM(cl_name) )916 & " IOM CDF READ ATT: not enough space to put "//& 917 & "attribute "//TRIM(cl_name) ) 848 918 849 919 ELSE … … 853 923 & cl_name, & 854 924 & dl_value(:)) 855 CALL iom_cdf__check(il_status )925 CALL iom_cdf__check(il_status,"IOM CDF READ ATT: ") 856 926 857 927 iom_cdf__read_att_name=att_init(cl_name, dl_value(:)) … … 873 943 ! 874 944 !> @author J.Paul 875 !> - November, 2013- Initial Version945 !> @date November, 2013 - Initial Version 876 946 ! 877 947 !> @param[in] td_file file structure … … 902 972 ! get attribute name 903 973 il_status=NF90_INQ_ATTNAME(td_file%i_id, id_varid, id_attid, cl_name) 904 CALL iom_cdf__check(il_status )974 CALL iom_cdf__check(il_status,"IOM CDF READ ATT: ") 905 975 906 976 ! read attribute … … 918 988 ! 919 989 !> @author J.Paul 920 !> - November, 2013- Initial Version990 !> @date November, 2013 - Initial Version 921 991 ! 922 992 !> @param[in] td_file file structure … … 976 1046 ! 977 1047 !> @author J.Paul 978 !> - November, 2013- Initial Version1048 !> @date November, 2013 - Initial Version 979 1049 ! 980 1050 !> @param[in] td_file file structure … … 1043 1113 ! 1044 1114 !> @author J.Paul 1045 !> - November, 2013- Initial Version1115 !> @date November, 2013 - Initial Version 1046 1116 ! 1047 1117 !> @param[inout] td_file file structure … … 1085 1155 ! 1086 1156 !> @author J.Paul 1087 !> - November, 2013- Initial Version1157 !> @date November, 2013 - Initial Version 1088 1158 ! 1089 1159 !> @param[inout] td_file file structure … … 1148 1218 ! 1149 1219 !> @author J.Paul 1150 !> - November, 2013- Initial Version1220 !> @date November, 2013 - Initial Version 1151 1221 ! 1152 1222 !> @param[inout] td_file file structure … … 1199 1269 ! 1200 1270 !> @author J.Paul 1201 !> - November, 2013- Initial Version1271 !> @date November, 2013 - Initial Version 1202 1272 !> @date September, 2014 1203 1273 !> - force to use FillValue=1.e20 if no FillValue for coordinate variable. 1274 !> @date September, 2015 1275 !> - manage useless (dummy) attribute 1204 1276 ! 1205 1277 !> @param[in] td_file file structure … … 1229 1301 1230 1302 ! loop indices 1303 INTEGER(i4) :: ji 1231 1304 !---------------------------------------------------------------- 1232 1305 ! check if file opened … … 1240 1313 1241 1314 ! inquire variable 1242 CALL logger_ trace( &1315 CALL logger_debug( & 1243 1316 & " IOM CDF READ VAR META: inquire variable "//& 1244 1317 & TRIM(fct_str(id_varid))//& … … 1253 1326 & il_dimid(:),& 1254 1327 & il_natt ) 1255 CALL iom_cdf__check(il_status) 1328 CALL iom_cdf__check(il_status,"IOM CDF READ VAR META: ") 1329 1256 1330 !!! fill variable dimension structure 1257 tl_dim(:)=iom_cdf__read_var_dim( td_file, il_ndim, il_dimid(:) ) 1331 tl_dim(:)=iom_cdf__read_var_dim( td_file, il_ndim, cl_name, il_dimid(:) ) 1332 1258 1333 IF( il_natt /= 0 )THEN 1259 1334 ALLOCATE( tl_att(il_natt) ) … … 1276 1351 ELSE 1277 1352 ! create attribute _FillValue 1278 SELECT CASE(TRIM( cl_name))1353 SELECT CASE(TRIM(fct_lower(cl_name))) 1279 1354 CASE DEFAULT 1280 1355 CALL logger_info("IOM CDF READ VAR META: assume _FillValue is equal to "//& 1281 1356 & "zero for variable "//TRIM(cl_name) ) 1282 1357 tl_fill=att_init('_FillValue',0.) 1283 CASE('nav_lon','nav_lat', &1358 CASE('nav_lon','nav_lat', 'nav_lev', & 1284 1359 & 'glamt','glamu','glamv','glamf', & 1285 1360 & 'gphit','gphiu','gphiv','gphif') … … 1311 1386 ALLOCATE(tl_att(il_natt+1) ) 1312 1387 ! create attribute _FillValue 1313 SELECT CASE(TRIM( cl_name))1388 SELECT CASE(TRIM(fct_lower(cl_name))) 1314 1389 CASE DEFAULT 1315 1390 CALL logger_info("IOM CDF READ VAR META: assume _FillValue is equal to "//& … … 1331 1406 & tl_att(:), id_id=id_varid ) 1332 1407 1408 !! look for dummy attribute 1409 DO ji=il_natt,1,-1 1410 IF( att_is_dummy(tl_att(ji)) )THEN 1411 CALL var_del_att(iom_cdf__read_var_meta, tl_att(ji)) 1412 ENDIF 1413 ENDDO 1414 1333 1415 ! clean 1334 1416 CALL dim_clean(tl_dim(:)) … … 1351 1433 !> So the array of dimension structure of a variable is always compose of 4 1352 1434 !> dimension (use or not). 1353 ! 1354 !> @author J.Paul 1355 !> - November, 2013- Initial Version 1356 ! 1435 !> 1436 !> @warn dummy dimension are not used. 1437 !> 1438 !> @author J.Paul 1439 !> @date November, 2013 - Initial Version 1440 !> @date July, 2015 1441 !> - Bug fix: use order to disorder table (see dim_init) 1442 !> @date September, 2015 1443 !> - check dummy dimension 1444 !> 1357 1445 !> @param[in] td_file file structure 1358 1446 !> @param[in] id_ndim number of dimension 1447 !> @param[in] cd_name variable name 1359 1448 !> @param[in] id_dimid array of dimension id 1360 1449 !> @return array dimension structure 1361 1450 !------------------------------------------------------------------- 1362 FUNCTION iom_cdf__read_var_dim(td_file, id_ndim, id_dimid)1451 FUNCTION iom_cdf__read_var_dim(td_file, id_ndim, cd_name, id_dimid) 1363 1452 IMPLICIT NONE 1364 1453 ! Argument 1365 1454 TYPE(TFILE), INTENT(IN) :: td_file 1366 1455 INTEGER(i4), INTENT(IN) :: id_ndim 1456 CHARACTER(LEN=*) , INTENT(IN) :: cd_name 1367 1457 INTEGER(i4), DIMENSION(:), INTENT(IN) :: id_dimid 1368 1458 … … 1371 1461 1372 1462 ! local variable 1373 INTEGER(i4), DIMENSION(ip_maxdim) :: il_ 2xyzt1463 INTEGER(i4), DIMENSION(ip_maxdim) :: il_xyzt2 1374 1464 1375 1465 TYPE(TDIM) , DIMENSION(ip_maxdim) :: tl_dim … … 1377 1467 ! loop indices 1378 1468 INTEGER(i4) :: ji 1469 INTEGER(i4) :: ii 1379 1470 !---------------------------------------------------------------- 1380 1471 … … 1391 1482 CALL dim_clean(tl_dim(:)) 1392 1483 1393 ELSE IF( id_ndim > 0 .AND. id_ndim <= 4 )THEN 1394 1395 1484 ELSE IF( id_ndim > 0 )THEN 1485 1486 1487 ii=1 1396 1488 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_2xyzt 1401 1402 ! 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 ) 1489 1490 !!! check no dummy dimension to be used 1491 IF( ANY(td_file%t_dim(:)%i_id == id_dimid(ji)) )THEN 1492 IF( ii > ip_maxdim )THEN 1493 CALL logger_error(" IOM CDF READ VAR DIM: "//& 1494 & "too much dimensions for variable "//& 1495 & TRIM(cd_name)//". check dummy configuration file.") 1496 ENDIF 1497 1498 CALL logger_debug( " IOM CDF READ VAR DIM: get variable "//& 1499 & "dimension "//TRIM(fct_str(ji)) ) 1500 1501 il_xyzt2(ii)=td_file%t_dim(id_dimid(ji))%i_xyzt2 1502 1503 ! read dimension information 1504 tl_dim(ii) = dim_init( td_file%t_dim(il_xyzt2(ii))%c_name, & 1505 & td_file%t_dim(il_xyzt2(ii))%i_len ) 1506 1507 ii=ii+1 1508 ELSE 1509 CALL logger_debug( " IOM CDF READ VAR DIM: dummy variable "//& 1510 & "dimension "//TRIM(fct_str(ji))//" not used." ) 1511 ENDIF 1405 1512 ENDDO 1406 1513 1407 1514 ! reorder dimension to ('x','y','z','t') 1408 1515 CALL dim_reorder(tl_dim(:)) 1409 1516 1410 1517 iom_cdf__read_var_dim(:)=dim_copy(tl_dim(:)) 1411 1518 … … 1413 1520 CALL dim_clean(tl_dim(:)) 1414 1521 1415 ELSE1416 1417 CALL logger_error(" IOM CDF READ VAR DIM: can't manage "//&1418 & TRIM(fct_str(id_ndim))//" dimension(s)" )1419 1420 1522 ENDIF 1421 1523 … … 1426 1528 ! 1427 1529 !> @author J.Paul 1428 !> - November, 2013- Initial Version1530 !> @date November, 2013 - Initial Version 1429 1531 ! 1430 1532 !> @param[in] td_file file structure … … 1475 1577 ! 1476 1578 !> @author J.Paul 1477 !> - November, 2013- Initial Version 1579 !> @date November, 2013 - Initial Version 1580 !> @date June, 2015 1581 !> - use scale factor and offset, as soon as read variable value 1478 1582 ! 1479 1583 !> @param[in] td_file file structure … … 1482 1586 !> @param[in] id_count number of indices selected along each dimension 1483 1587 !> @return variable structure completed 1484 !1485 !> @todo1486 !> - warning do not change fill value when use scale factor..1487 1588 !------------------------------------------------------------------- 1488 1589 SUBROUTINE iom_cdf__read_var_value(td_file, td_var, & … … 1496 1597 1497 1598 ! 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 1599 INTEGER(i4) :: il_status 1600 INTEGER(i4) :: il_tmp1 1601 INTEGER(i4) :: il_tmp2 1602 INTEGER(i4) :: il_varid 1603 INTEGER(i4), DIMENSION(ip_maxdim) :: il_start 1604 INTEGER(i4), DIMENSION(ip_maxdim) :: il_count 1605 INTEGER(i4), DIMENSION(ip_maxdim) :: il_start_ord 1606 INTEGER(i4), DIMENSION(ip_maxdim) :: il_count_ord 1607 1506 1608 REAL(dp) , DIMENSION(:,:,:,:) , ALLOCATABLE :: dl_value 1507 1609 REAL(dp) , DIMENSION(:,:,:,:) , ALLOCATABLE :: dl_tmp … … 1518 1620 IF( ( PRESENT(id_start) .AND. (.NOT. PRESENT(id_count))) .OR. & 1519 1621 ((.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")1622 CALL logger_warn( "IOM CDF READ VAR VALUE: id_start and id_count"//& 1623 & " should be both specify") 1522 1624 ENDIF 1523 1625 IF( PRESENT(id_start).AND.PRESENT(id_count) )THEN … … 1525 1627 IF( SIZE(id_start(:)) /= ip_maxdim .OR. & 1526 1628 & 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) )1629 CALL logger_error("IOM CDF READ VAR: dimension of array start"//& 1630 & " or count are invalid to read variable "//& 1631 & TRIM(td_var%c_name)//" in file "//TRIM(td_file%c_name) ) 1530 1632 ENDIF 1531 1633 … … 1564 1666 & td_var%t_dim( 4 )%i_len & 1565 1667 & /)) )THEN 1566 1567 CALL logger_error( "IOM CDF READ VAR VALUE: start + count exceed "//&1568 & "variable dimension for "//TRIM(td_var%c_name) )1569 1668 1570 1669 DO ji = 1, ip_maxdim … … 1575 1674 & TRIM(fct_str(il_tmp2))) 1576 1675 ENDDO 1676 CALL logger_error( "IOM CDF READ VAR VALUE: start + count exceed "//& 1677 & "variable dimension for "//TRIM(td_var%c_name) ) 1577 1678 1578 1679 ELSE 1579 1680 1580 ! Allocate space to hold variable value ( unorder)1681 ! Allocate space to hold variable value (disorder) 1581 1682 ALLOCATE(dl_value( il_count(1), & 1582 1683 & il_count(2), & … … 1601 1702 & start = il_start(:),& 1602 1703 & count = il_count(:) ) 1603 CALL iom_cdf__check(il_status )1704 CALL iom_cdf__check(il_status,"IOM CDF READ VAR VALUE: ") 1604 1705 1605 1706 ! Allocate space to hold variable value in structure … … 1663 1764 CALL var_chg_FillValue(td_var) 1664 1765 ENDIF 1766 1767 ! use scale factor and offset 1768 WHERE( td_var%d_value(:,:,:,:) /= td_var%d_fill ) 1769 td_var%d_value(:,:,:,:) = & 1770 & td_var%d_value(:,:,:,:)*td_var%d_scf + td_var%d_ofs 1771 END WHERE 1772 1665 1773 ENDIF 1666 1774 ELSE … … 1673 1781 !------------------------------------------------------------------- 1674 1782 !> @brief This subroutine write file structure in an opened netcdf file. 1675 ! 1676 !> @author J.Paul 1677 !> - November, 2013- Initial Version 1783 !> 1784 !> @details 1785 !> optionally, you could specify dimension order (default 'xyzt') 1786 !> 1787 !> @author J.Paul 1788 !> @date November, 2013 - Initial Version 1789 !> @date July, 2015 1790 !> - add dimension order option 1678 1791 ! 1679 1792 !> @param[inout] td_file file structure 1680 1793 !------------------------------------------------------------------- 1681 SUBROUTINE iom_cdf_write_file(td_file) 1682 IMPLICIT NONE 1683 ! Argument 1684 TYPE(TFILE), INTENT(INOUT) :: td_file 1794 SUBROUTINE iom_cdf_write_file(td_file, cd_dimorder) 1795 IMPLICIT NONE 1796 ! Argument 1797 TYPE(TFILE) , INTENT(INOUT) :: td_file 1798 CHARACTER(LEN=*), INTENT(IN ), OPTIONAL :: cd_dimorder 1685 1799 1686 1800 ! local variable 1687 1801 INTEGER(i4), DIMENSION(:), ALLOCATABLE :: il_value 1802 1803 CHARACTER(LEN=lc) :: cl_dimorder 1688 1804 1689 1805 TYPE(TVAR) :: tl_var … … 1694 1810 INTEGER(i4) :: ji 1695 1811 INTEGER(i4) :: jj 1696 !---------------------------------------------------------------- 1812 INTEGER(i4) :: jvar 1813 !---------------------------------------------------------------- 1814 1815 cl_dimorder='xyzt' 1816 IF( PRESENT(cd_dimorder) ) cl_dimorder=TRIM(cd_dimorder) 1697 1817 1698 1818 ! check if file opened … … 1726 1846 ENDIF 1727 1847 1848 ! change dimension order 1849 IF( TRIM(cl_dimorder) /= 'xyzt' )THEN 1850 CALL dim_reorder(td_file%t_dim(:),TRIM(cl_dimorder)) 1851 DO jvar=1,td_file%i_nvar 1852 CALL logger_debug("VAR REORDER: "//TRIM(td_file%t_var(jvar)%c_name)) 1853 CALL var_reorder(td_file%t_var(jvar),TRIM(cl_dimorder)) 1854 ENDDO 1855 ENDIF 1856 1728 1857 ! write dimension in file 1729 1858 DO ji = 1, ip_maxdim … … 1776 1905 ! 1777 1906 !> @author J.Paul 1778 !> - November, 2013- Initial Version1907 !> @date November, 2013 - Initial Version 1779 1908 ! 1780 1909 !> @param[inout] td_file file structure … … 1798 1927 ! Enter define mode 1799 1928 il_status=NF90_REDEF(td_file%i_id) 1800 CALL iom_cdf__check(il_status )1929 CALL iom_cdf__check(il_status,"IOM CDF WRITE FILE DIM: ") 1801 1930 1802 1931 td_file%l_def=.TRUE. … … 1813 1942 il_status=NF90_DEF_DIM(td_file%i_id, fct_upper(td_dim%c_sname), & 1814 1943 & NF90_UNLIMITED, td_dim%i_id) 1815 CALL iom_cdf__check(il_status )1944 CALL iom_cdf__check(il_status,"IOM CDF WRITE FILE DIM: ") 1816 1945 1817 1946 ELSE 1818 1947 ! write not unlimited dimension 1819 CALL logger_ trace( &1948 CALL logger_debug( & 1820 1949 & "IOM CDF WRITE FILE DIM: write dimension "//TRIM(td_dim%c_name)//& 1821 1950 & " in file "//TRIM(td_file%c_name)) … … 1823 1952 il_status=NF90_DEF_DIM(td_file%i_id, fct_upper(td_dim%c_sname), & 1824 1953 & td_dim%i_len, td_dim%i_id) 1825 CALL iom_cdf__check(il_status )1954 CALL iom_cdf__check(il_status,"IOM CDF WRITE FILE DIM: ") 1826 1955 1827 1956 ENDIF … … 1834 1963 ! 1835 1964 !> @author J.Paul 1836 !> - November, 2013- Initial Version1965 !> @date November, 2013 - Initial Version 1837 1966 ! 1838 1967 !> @param[inout] td_file file structure … … 1859 1988 ! Enter define mode 1860 1989 il_status=NF90_REDEF(td_file%i_id) 1861 CALL iom_cdf__check(il_status )1990 CALL iom_cdf__check(il_status,"IOM CDF WRITE FILE ATT: ") 1862 1991 1863 1992 td_file%l_def=.TRUE. … … 1876 2005 il_status = NF90_PUT_ATT(td_file%i_id, id_varid, & 1877 2006 & td_att%c_name, td_att%c_value ) 1878 CALL iom_cdf__check(il_status )2007 CALL iom_cdf__check(il_status,"IOM CDF WRITE FILE ATT: ") 1879 2008 1880 2009 CASE(NF90_BYTE, NF90_SHORT, NF90_INT, NF90_FLOAT, NF90_DOUBLE) … … 1882 2011 il_status = NF90_PUT_ATT(td_file%i_id, id_varid, & 1883 2012 & td_att%c_name, td_att%d_value ) 1884 CALL iom_cdf__check(il_status )2013 CALL iom_cdf__check(il_status,"IOM CDF WRITE FILE ATT: ") 1885 2014 1886 2015 END SELECT … … 1891 2020 ! 1892 2021 !> @author J.Paul 1893 !> - November, 2013- Initial Version 2022 !> @date November, 2013 - Initial Version 2023 !> @date September, 2015 2024 !> - do not force to use zero as FillValue for any meshmask variable 1894 2025 ! 1895 2026 !> @param[inout] td_file file structure … … 1917 2048 ! Enter define mode 1918 2049 il_status=NF90_REDEF(td_file%i_id) 1919 CALL iom_cdf__check(il_status )2050 CALL iom_cdf__check(il_status,"IOM CDF WRITE VAR: ") 1920 2051 1921 2052 td_file%l_def=.TRUE. 1922 2053 1923 2054 ENDIF 1924 2055 1925 2056 ! check if file and variable dimension conform 1926 2057 IF( file_check_var_dim(td_file, td_var) )THEN 1927 1928 ! check variable dimension expected1929 CALL var_check_dim(td_var)1930 2058 1931 2059 ll_chg=.TRUE. … … 1938 2066 ENDIF 1939 2067 ENDDO 2068 ! ugly patch until NEMO do not force to use 0. as FillValue 1940 2069 IF( ll_chg )THEN 1941 2070 ! not a dimension variable 1942 2071 ! 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) 2072 SELECT CASE( TRIM(fct_lower(td_var%c_name)) ) 2073 CASE DEFAULT 2074 CALL var_chg_FillValue(td_var,0._dp) 2075 CASE('nav_lon','nav_lat', & 2076 & 'glamt','glamu','glamv','glamf', & 2077 & 'gphit','gphiu','gphiv','gphif', & 2078 & 'e1t','e1u','e1v','e1f', & 2079 & 'e2t','e2u','e2v','e2f','ff', & 2080 & 'gcost','gcosu','gcosv','gcosf', & 2081 & 'gsint','gsinu','gsinv','gsinf', & 2082 & 'mbathy','misf','isf_draft', & 2083 & 'hbatt','hbatu','hbatv','hbatf', & 2084 & 'gsigt','gsigu','gsigv','gsigf', & 2085 & 'e3t_0','e3u_0','e3v_0','e3w_0', & 2086 & 'e3f_0','gdepw_1d','gdept_1d', & 2087 & 'e3tp','e3wp','gdepw_0','rx1', & 2088 & 'gdept_0','gdepu','gdepv', & 2089 & 'hdept','hdepw','e3w_1d','e3t_1d',& 2090 & 'tmask','umask','vmask','fmask' ) 2091 ! do not change for coordinates and meshmask variables 2092 END SELECT 1946 2093 ENDIF 1947 2094 … … 1957 2104 ! Leave define mode 1958 2105 il_status=NF90_ENDDEF(td_file%i_id) 1959 CALL iom_cdf__check(il_status )2106 CALL iom_cdf__check(il_status,"IOM CDF WRITE VAR: ") 1960 2107 1961 2108 td_file%l_def=.FALSE. … … 1975 2122 ! 1976 2123 !> @author J.Paul 1977 !> - November, 2013- Initial Version2124 !> @date November, 2013 - Initial Version 1978 2125 ! 1979 2126 !> @param[in] td_file file structure … … 2002 2149 tl_var=var_copy(td_var) 2003 2150 2151 ! forced to use float type 2152 IF( tl_var%d_unf /= 1. .AND. tl_var%i_type==NF90_SHORT )THEN 2153 tl_var%i_type=NF90_FLOAT 2154 ENDIF 2155 2004 2156 IF( ALL( .NOT. tl_var%t_dim(:)%l_use ) )THEN 2157 CALL logger_debug( & 2158 & "IOM CDF WRITE VAR DEF scalar: define variable "//& 2159 & TRIM(tl_var%c_name)//" in file "//TRIM(td_file%c_name)) 2005 2160 ! scalar value 2006 2161 il_status = NF90_DEF_VAR(td_file%i_id, TRIM(tl_var%c_name), & 2007 2162 & tl_var%i_type, varid=iom_cdf__write_var_def) 2008 CALL iom_cdf__check(il_status )2163 CALL iom_cdf__check(il_status,"IOM CDF WRITE VAR DEF: ") 2009 2164 ELSE 2010 2165 … … 2020 2175 ENDDO 2021 2176 2022 CALL logger_ trace( &2177 CALL logger_debug( & 2023 2178 & "IOM CDF WRITE VAR DEF: define dimension to be used for variable "//& 2024 2179 & TRIM(tl_var%c_name)//" in file "//TRIM(td_file%c_name)) 2025 2180 2026 2181 DO ji=1,jj 2027 CALL logger_ trace("IOM CDF WRITE VAR DEF: dimid "//TRIM(fct_str(il_dimid(ji))) )2182 CALL logger_debug("IOM CDF WRITE VAR DEF: dimid "//TRIM(fct_str(il_dimid(ji))) ) 2028 2183 ENDDO 2184 2029 2185 il_status = NF90_DEF_VAR(td_file%i_id, TRIM(tl_var%c_name), & 2030 2186 & tl_var%i_type, & 2031 2187 & il_dimid(1:jj), & 2032 2188 & varid=iom_cdf__write_var_def ) 2033 CALL iom_cdf__check(il_status )2189 CALL iom_cdf__check(il_status,"IOM CDF WRITE VAR DEF: ") 2034 2190 ENDIF 2035 2191 … … 2043 2199 2044 2200 DO ji = 1, tl_var%i_natt 2045 CALL logger_ trace( &2201 CALL logger_debug( & 2046 2202 & " IOM CDF WRITE VAR DEF: put attribute "//TRIM(tl_var%t_att(ji)%c_name)//& 2047 2203 & " for variable "//TRIM(tl_var%c_name)//& 2048 2204 & " in file "//TRIM(td_file%c_name) ) 2049 2205 2050 IF( tl_var%t_att(ji)%i_type == NF90_CHAR )THEN 2051 IF( TRIM(tl_var%t_att(ji)%c_value) /= '' )THEN 2052 il_status = NF90_PUT_ATT(td_file%i_id, iom_cdf__write_var_def, & 2053 & TRIM(tl_var%t_att(ji)%c_name), & 2054 & TRIM(tl_var%t_att(ji)%c_value) ) 2055 CALL iom_cdf__check(il_status) 2056 ENDIF 2057 ELSE 2058 SELECT CASE(tl_var%t_att(ji)%i_type) 2059 CASE(NF90_BYTE) 2060 il_status = NF90_PUT_ATT(td_file%i_id, & 2061 & iom_cdf__write_var_def, & 2062 & TRIM(tl_var%t_att(ji)%c_name), & 2063 & INT(tl_var%t_att(ji)%d_value(:),i1)) 2064 CASE(NF90_SHORT) 2065 il_status = NF90_PUT_ATT(td_file%i_id, & 2066 & iom_cdf__write_var_def, & 2067 & TRIM(tl_var%t_att(ji)%c_name), & 2068 & INT(tl_var%t_att(ji)%d_value(:),i2)) 2069 CASE(NF90_INT) 2070 il_status = NF90_PUT_ATT(td_file%i_id, & 2071 & iom_cdf__write_var_def, & 2072 & TRIM(tl_var%t_att(ji)%c_name), & 2073 & INT(tl_var%t_att(ji)%d_value(:),i4)) 2074 CASE(NF90_FLOAT) 2075 il_status = NF90_PUT_ATT(td_file%i_id, & 2076 & iom_cdf__write_var_def, & 2077 & TRIM(tl_var%t_att(ji)%c_name), & 2078 & REAL(tl_var%t_att(ji)%d_value(:),sp)) 2079 CASE(NF90_DOUBLE) 2080 il_status = NF90_PUT_ATT(td_file%i_id, & 2081 & iom_cdf__write_var_def, & 2082 & TRIM(tl_var%t_att(ji)%c_name), & 2083 & REAL(tl_var%t_att(ji)%d_value(:),dp)) 2084 END SELECT 2085 CALL iom_cdf__check(il_status) 2206 ! forced FillValue to have same type than variable 2207 IF( TRIM(tl_var%t_att(ji)%c_name) == '_FillValue' )THEN 2208 tl_var%t_att(ji)%i_type=tl_var%i_type 2086 2209 ENDIF 2210 2211 SELECT CASE(tl_var%t_att(ji)%i_type) 2212 CASE(NF90_CHAR) 2213 IF( TRIM(tl_var%t_att(ji)%c_value) /= '' )THEN 2214 il_status = NF90_PUT_ATT(td_file%i_id, iom_cdf__write_var_def, & 2215 & TRIM(tl_var%t_att(ji)%c_name), & 2216 & TRIM(tl_var%t_att(ji)%c_value) ) 2217 ENDIF 2218 CASE(NF90_BYTE) 2219 il_status = NF90_PUT_ATT(td_file%i_id, & 2220 & iom_cdf__write_var_def, & 2221 & TRIM(tl_var%t_att(ji)%c_name), & 2222 & INT(tl_var%t_att(ji)%d_value(:),i1)) 2223 CASE(NF90_SHORT) 2224 il_status = NF90_PUT_ATT(td_file%i_id, & 2225 & iom_cdf__write_var_def, & 2226 & TRIM(tl_var%t_att(ji)%c_name), & 2227 & INT(tl_var%t_att(ji)%d_value(:),i2)) 2228 CASE(NF90_INT) 2229 il_status = NF90_PUT_ATT(td_file%i_id, & 2230 & iom_cdf__write_var_def, & 2231 & TRIM(tl_var%t_att(ji)%c_name), & 2232 & INT(tl_var%t_att(ji)%d_value(:),i4)) 2233 CASE(NF90_FLOAT) 2234 il_status = NF90_PUT_ATT(td_file%i_id, & 2235 & iom_cdf__write_var_def, & 2236 & TRIM(tl_var%t_att(ji)%c_name), & 2237 & REAL(tl_var%t_att(ji)%d_value(:),sp)) 2238 CASE(NF90_DOUBLE) 2239 il_status = NF90_PUT_ATT(td_file%i_id, & 2240 & iom_cdf__write_var_def, & 2241 & TRIM(tl_var%t_att(ji)%c_name), & 2242 & REAL(tl_var%t_att(ji)%d_value(:),dp)) 2243 END SELECT 2244 CALL iom_cdf__check(il_status,"IOM CDF WRITE VAR DEF: ") 2245 2087 2246 ENDDO 2088 2247 … … 2097 2256 ! 2098 2257 !> @author J.Paul 2099 !> - November, 2013- Initial Version 2258 !> @date November, 2013 - Initial Version 2259 !> @date June, 2015 2260 !> - reuse scale factor and offset, before writing variable 2100 2261 ! 2101 2262 !> @param[in] td_file file structure … … 2122 2283 & "IOM CDF WRITE VAR VALUE: get dimension to be used for variable "//& 2123 2284 & TRIM(td_var%c_name)//" in file "//TRIM(td_file%c_name)) 2285 2286 ! use scale factor and offset 2287 WHERE( td_var%d_value(:,:,:,:) /= td_var%d_fill ) 2288 td_var%d_value(:,:,:,:) = & 2289 & (td_var%d_value(:,:,:,:)-td_var%d_ofs)/td_var%d_scf 2290 END WHERE 2124 2291 2125 2292 jj=0 … … 2148 2315 2149 2316 ! put value 2150 CALL logger_ trace( &2317 CALL logger_debug( & 2151 2318 & "IOM CDF WRITE VAR VALUE: put "//TRIM(td_var%c_name)//" value "//& 2152 2319 & "in file "//TRIM(td_file%c_name)) 2153 2320 2154 2321 il_status = NF90_PUT_VAR( td_file%i_id, td_var%i_id, dl_value(:,:,:,:)) 2155 CALL iom_cdf__check(il_status) 2322 CALL iom_cdf__check(il_status,"IOM CDF WRITE VAR VALUE ("//& 2323 & TRIM(td_var%c_name)//") :" ) 2156 2324 2157 2325 DEALLOCATE( dl_value )
Note: See TracChangeset
for help on using the changeset viewer.