New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
Changeset 8862 for branches/2015/nemo_v3_6_STABLE/NEMOGCM/TOOLS/SIREN/src/iom_cdf.f90 – NEMO

Ignore:
Timestamp:
2017-11-30T16:58:49+01:00 (6 years ago)
Author:
jpaul
Message:

Bugs fix: see tickets #1989

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2015/nemo_v3_6_STABLE/NEMOGCM/TOOLS/SIREN/src/iom_cdf.f90

    r7372 r8862  
    316316   !> @author J.Paul 
    317317   !> @date November, 2013 - Initial Version 
     318   !> @date October, 2016 
     319   !> - define cdf4 as cdf. 
    318320   ! 
    319321   !> @param[inout] td_file   file structure 
     
    340342            td_file%c_type='cdf' 
    341343         CASE(nf90_format_netcdf4, nf90_format_netcdf4_classic) 
     344            !td_file%c_type='cdf4' 
    342345            td_file%c_type='cdf' 
    343             !td_file%c_type='cdf4' 
    344346      END SELECT 
    345347      CALL logger_debug("IOM CDF GET INFO: type "//TRIM(td_file%c_type))  
     
    353355   !> reorder dimension to ('x', 'y', 'z', 't'). 
    354356   !> The dimension structure inside file structure is then completed. 
    355    ! 
    356    !> @author J.Paul 
    357    !> @date November, 2013 - Initial Version 
    358    ! 
     357   !> 
     358   !> @author J.Paul 
     359   !> @date November, 2013 - Initial Version 
     360   !> @date October, 2016 
     361   !> - check unknown dimension 
     362   !> 
    359363   !> @param[inout] td_file   file structure 
    360364   !------------------------------------------------------------------- 
     
    377381 
    378382      IF( td_file%i_ndim > 0 )THEN 
     383 
    379384         ii=1 
    380385         DO ji = 1, td_file%i_ndim 
    381386            ! read dimension information 
    382387            tl_dim=iom_cdf_read_dim( td_file, ji) 
    383             IF( .NOT. dim_is_dummy(tl_dim) )THEN 
     388            ! sname == 'u' if dimension is unknown (not to be used) 
     389            IF( TRIM(tl_dim%c_sname) /= 'u' )THEN 
    384390               IF( ii > ip_maxdim )THEN 
    385391                  CALL logger_fatal("IOM CDF OPEN: too much dimension "//& 
    386                   & "to be read. you should remove dummy dimension using "//& 
     392                  & "to be read. you could choose dimension to be used. see "//& 
    387393                  & " configuration file") 
    388394               ENDIF 
     
    397403            &  " IOM CDF GET FILE DIM: there is no unlimited dimension in file "//& 
    398404            &  TRIM(td_file%c_name)) 
    399          ELSE 
    400             td_file%t_dim( td_file%i_uldid )%l_uld=.TRUE. 
     405         !ELSE 
     406         !   td_file%t_dim( td_file%i_uldid )%l_uld=.TRUE. 
    401407         ENDIF 
    402408 
     
    468474   !> The variable structure inside file structure is then completed. 
    469475   !> @note variable value are not read ! 
    470    ! 
     476   !> 
    471477   !> @author J.Paul 
    472478   !> @date November, 2013 - Initial Version 
     
    475481   !> @date January, 2016 
    476482   !> - increment n3d for 4D variable 
    477    ! 
     483   !> @date October, 2016 
     484   !> - check variable to be used (variable's dimension allowed and variable 
     485   !> not "dummy") 
     486   !> 
    478487   !> @param[inout] td_file   file structure 
    479488   !------------------------------------------------------------------- 
     
    503512         il_nvar=td_file%i_nvar 
    504513         ALLOCATE(tl_var(il_nvar)) 
    505          ii=0 
    506514         DO ji = 1, il_nvar 
    507515           ! read variable information 
    508516           tl_var(ji)=iom_cdf__read_var_meta( td_file, ji)  
    509            IF( .NOT. var_is_dummy(tl_var(ji)) )THEN 
    510               ii=ii+1 
    511            ENDIF 
    512517         ENDDO 
    513518 
    514519         ! update number of variable used 
    515          td_file%i_nvar=ii 
     520         td_file%i_nvar=COUNT(tl_var(:)%l_use) 
    516521 
    517522         ALLOCATE(td_file%t_var(td_file%i_nvar)) 
     
    519524         ii=0 
    520525         DO ji = 1, il_nvar 
    521             IF( .NOT. var_is_dummy(tl_var(ji)) )THEN 
     526            IF( tl_var(ji)%l_use )THEN 
    522527               ii=ii+1 
    523528               td_file%t_var(ii)=var_copy(tl_var(ji)) 
     
    554559                     td_file%i_timeid=ji 
    555560                  ELSE 
     561                     IF( td_file%i_timeid /= ji )THEN 
     562                        CALL logger_warn("IOM CDF GET FILE VAR: find more "//& 
     563                        &                 "than one time variable in file "//& 
     564                        &                 TRIM(td_file%c_name)//". see "//& 
     565                        &                 "dummy.cfg configuration file to"//& 
     566                        &                 " not used dummy variables.") 
     567                     ENDIF 
    556568                     il_attid=0 
    557569                     IF( ASSOCIATED(td_file%t_var(ii)%t_att) )THEN 
     
    560572                     IF( il_attid /= 0 )THEN 
    561573                        td_file%i_timeid=ji 
    562                      !ELSE 
    563                      !   CALL logger_error("IOM CDF GET FILE VAR: find more "//& 
    564                      !   &                 "than one time variable in file "//& 
    565                      !   &                 TRIM(td_file%c_name) ) 
    566574                     ENDIF 
    567575                  ENDIF 
     
    654662         &  " IOM CDF READ DIM: no id associated to file "//TRIM(td_file%c_name)) 
    655663 
    656       ELSE       
     664      ELSE 
    657665 
    658666         CALL logger_trace( & 
     
    725733   !> @author J.Paul 
    726734   !> @date November, 2013 - Initial Version 
     735   !> @date November 2017 
     736   !> - check if cl_value is not bug  
    727737   ! 
    728738   !> @param[in] td_file   file structure 
     
    795805 
    796806            CASE(NF90_CHAR) 
     807               CALL logger_debug( " IOM CDF READ ATT: get NF90_CHAR ") 
    797808 
    798809               ! check string lengths 
     
    811822                  CALL iom_cdf__check(il_status,"IOM CDF READ ATT: ") 
    812823 
     824                  ! check cl_value 
     825                  IF( LLT(cl_value,'') ) cl_value = '' 
    813826                  iom_cdf__read_att_name=att_init(cl_name, cl_value) 
    814827 
     
    816829          
    817830            CASE(NF90_BYTE) 
     831               CALL logger_debug( " IOM CDF READ ATT: get NF90_BYTE ") 
    818832 
    819833               ALLOCATE( bl_value( il_len), & 
     
    839853 
    840854            CASE(NF90_SHORT) 
     855               CALL logger_debug( " IOM CDF READ ATT: get NF90_SHORT ") 
    841856 
    842857               ALLOCATE( sl_value( il_len), & 
     
    863878 
    864879            CASE(NF90_INT) 
     880               CALL logger_debug( " IOM CDF READ ATT: get NF90_INT ") 
    865881 
    866882               ALLOCATE( il_value( il_len), & 
     
    886902 
    887903            CASE(NF90_FLOAT) 
     904               CALL logger_debug( " IOM CDF READ ATT: get NF90_FLOAT ") 
    888905 
    889906               ALLOCATE( fl_value( il_len), & 
     
    910927 
    911928            CASE(NF90_DOUBLE) 
     929               CALL logger_debug( " IOM CDF READ ATT: get NF90_DOUBLE ") 
    912930 
    913931               ALLOCATE( dl_value( il_len), & 
     
    14151433         ENDDO 
    14161434 
     1435         !! check if variable is dummy 
     1436         IF( var_is_dummy(iom_cdf__read_var_meta) )THEN 
     1437            iom_cdf__read_var_meta%l_use=.FALSE. 
     1438         ENDIF 
     1439 
     1440         !! check if all dimensions are allowed 
     1441         DO ji=1,il_ndim 
     1442            IF( ALL(td_file%t_dim(:)%i_id /= il_dimid(ji)) )THEN 
     1443               iom_cdf__read_var_meta%l_use=.FALSE. 
     1444            ENDIF 
     1445         ENDDO 
     1446 
    14171447         ! clean 
    14181448         CALL dim_clean(tl_dim(:)) 
     
    14861516      ELSE IF( id_ndim > 0 )THEN 
    14871517 
    1488  
    14891518         ii=1 
    14901519         DO ji = 1, id_ndim 
    14911520 
    1492             !!! check no dummy dimension to be used 
     1521            ! check if dimension to be used, is allowed 
    14931522            IF( ANY(td_file%t_dim(:)%i_id == id_dimid(ji)) )THEN 
    14941523               IF( ii > ip_maxdim )THEN 
     
    15061535               tl_dim(ii) = dim_init( td_file%t_dim(il_xyzt2(ii))%c_name, & 
    15071536               &                      td_file%t_dim(il_xyzt2(ii))%i_len ) 
    1508              
     1537 
    15091538               ii=ii+1 
    15101539            ELSE 
     
    20822111                  & 'gcost','gcosu','gcosv','gcosf', & 
    20832112                  & 'gsint','gsinu','gsinv','gsinf', & 
    2084                   & 'mbathy','misf','isf_draft',     & 
     2113                  & 'mbathy','misf','isf_draft','isfdraft',     & 
    20852114                  & 'hbatt','hbatu','hbatv','hbatf', & 
    20862115                  & 'gsigt','gsigu','gsigv','gsigf', & 
     
    21912220         CALL iom_cdf__check(il_status,"IOM CDF WRITE VAR DEF: ") 
    21922221      ENDIF 
     2222      CALL logger_debug("IOM CDF WRITE VAR DEF: type = "//TRIM(fct_str(tl_var%i_type))) 
    21932223 
    21942224      ! remove unuseful attribute 
Note: See TracChangeset for help on using the changeset viewer.