Changeset 881 for IOIPSL


Ignore:
Timestamp:
02/03/10 16:54:51 (14 years ago)
Author:
bellier
Message:
  • Changed ALLOCATABLE attribute to POINTER for a structure element
  • Modified Netcdf external type for _FillValue, valid_min and valid_max
Location:
IOIPSL/trunk/src
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • IOIPSL/trunk/src/fliocom.f90

    r760 r881  
    13801380!--- 
    13811381    IF (PRESENT(v_t)) THEN 
    1382       IF      (v_t == flio_i) THEN 
     1382      SELECT CASE (v_t) 
     1383      CASE(flio_i) 
    13831384        IF (i_std == i_8) THEN 
    1384 !-------- Not yet supported by NETCDF 
     1385!-------- I8 not yet supported by NETCDF 
    13851386!-------- m_k = flio_i8 
    13861387          m_k = flio_i4 
     
    13881389          m_k = flio_i4 
    13891390        ENDIF 
    1390       ELSE IF (v_t == flio_r) THEN 
     1391      CASE(flio_r) 
    13911392        IF (r_std == r_8) THEN 
    13921393          m_k = flio_r8 
     
    13941395          m_k = flio_r4 
    13951396        ENDIF 
    1396       ELSE 
     1397      CASE(flio_c,flio_i1,flio_i2,flio_i4,flio_r4,flio_r8) 
    13971398        m_k = v_t 
    1398       ENDIF 
     1399      CASE DEFAULT 
     1400        CALL ipslerr (3,'fliodefv', & 
     1401 &        'Variable '//TRIM(v_n),'External type','not supported') 
     1402      END SELECT 
    13991403    ELSE IF (r_std == r_8) THEN 
    14001404      m_k = flio_r8 
     
    14021406      m_k = flio_r4 
    14031407    ENDIF 
     1408!--- 
    14041409    IF (n_d > 0) THEN 
    14051410      i_rc = NF90_DEF_VAR(f_e,v_n,m_k,a_i(1:n_d),i_v) 
     
    14271432    ENDIF 
    14281433    IF (PRESENT(valid_min)) THEN 
    1429       i_rc = NF90_PUT_ATT(f_e,i_v,'valid_min',valid_min) 
     1434      SELECT CASE (m_k) 
     1435      CASE(flio_i1,flio_i2) 
     1436        i_rc = NF90_PUT_ATT(f_e,i_v,'valid_min',NINT(valid_min,KIND=i_2)) 
     1437      CASE(flio_i4) 
     1438        i_rc = NF90_PUT_ATT(f_e,i_v,'valid_min',NINT(valid_min,KIND=i_4)) 
     1439      CASE(flio_r4) 
     1440        i_rc = NF90_PUT_ATT(f_e,i_v,'valid_min',REAL(valid_min,KIND=r_4)) 
     1441      CASE(flio_r8) 
     1442        i_rc = NF90_PUT_ATT(f_e,i_v,'valid_min',REAL(valid_min,KIND=r_8)) 
     1443      CASE DEFAULT 
     1444        CALL ipslerr (2,'fliodefv', & 
     1445   &      'Variable '//TRIM(v_n),'attribute valid_min', & 
     1446   &      'not supported for this external type') 
     1447      END SELECT 
    14301448    ENDIF 
    14311449    IF (PRESENT(valid_max)) THEN 
    1432       i_rc = NF90_PUT_ATT(f_e,i_v,'valid_max',valid_max) 
     1450      SELECT CASE (m_k) 
     1451      CASE(flio_i1,flio_i2) 
     1452        i_rc = NF90_PUT_ATT(f_e,i_v,'valid_max',NINT(valid_max,KIND=i_2)) 
     1453      CASE(flio_i4) 
     1454        i_rc = NF90_PUT_ATT(f_e,i_v,'valid_max',NINT(valid_max,KIND=i_4)) 
     1455      CASE(flio_r4) 
     1456        i_rc = NF90_PUT_ATT(f_e,i_v,'valid_max',REAL(valid_max,KIND=r_4)) 
     1457      CASE(flio_r8) 
     1458        i_rc = NF90_PUT_ATT(f_e,i_v,'valid_max',REAL(valid_max,KIND=r_8)) 
     1459      CASE DEFAULT 
     1460        CALL ipslerr (2,'fliodefv', & 
     1461   &      'Variable '//TRIM(v_n),'attribute valid_max', & 
     1462   &      'not supported for this external type') 
     1463      END SELECT 
    14331464    ENDIF 
    14341465!--- 
  • IOIPSL/trunk/src/histcom.f90

    r879 r881  
    110110 &  last_opp,last_wrt,last_opp_chk,last_wrt_chk,nb_opp,nb_wrt 
    111111!- For future optimization 
    112   REAL,ALLOCATABLE,DIMENSION(:) :: t_bf 
     112  REAL,POINTER,DIMENSION(:) :: t_bf 
    113113!#  REAL,ALLOCATABLE,DIMENSION(:) :: V_1_D 
    114114!#  REAL,ALLOCATABLE,DIMENSION(:,:) :: V_2_D 
     
    692692    dims(1:1) = (/ W_F(idf)%xid /) 
    693693  ENDIF 
    694   iret = NF90_DEF_VAR (nfid,lon_name,NF90_FLOAT,dims(1:ndim),nlonid) 
     694  iret = NF90_DEF_VAR (nfid,lon_name,NF90_REAL4,dims(1:ndim),nlonid) 
    695695  IF (rectilinear) THEN 
    696696    iret = NF90_PUT_ATT (nfid,nlonid,'axis',"X") 
     
    713713    dims(1:1) = (/ W_F(idf)%yid /) 
    714714  ENDIF 
    715   iret = NF90_DEF_VAR (nfid,lat_name,NF90_FLOAT,dims(1:ndim),nlatid) 
     715  iret = NF90_DEF_VAR (nfid,lat_name,NF90_REAL4,dims(1:ndim),nlatid) 
    716716  IF (rectilinear) THEN 
    717717    iret = NF90_PUT_ATT (nfid,nlatid,'axis',"Y") 
     
    867867  IF (l_dbg) WRITE(*,*) "histhori_irregular 2.0" 
    868868!- 
    869   iret = NF90_DEF_VAR (nfid,lon_name,NF90_FLOAT,dims(1:ndim),nlonid) 
     869  iret = NF90_DEF_VAR (nfid,lon_name,NF90_REAL4,dims(1:ndim),nlonid) 
    870870  iret = NF90_PUT_ATT (nfid,nlonid,'standard_name',"longitude") 
    871871  iret = NF90_PUT_ATT (nfid,nlonid,'units',"degrees_east") 
     
    880880!- 
    881881  iret = NF90_PUT_ATT (nfid,nlonid,'bounds',TRIM(lonbound_name)) 
    882   iret = NF90_DEF_VAR (nfid,lonbound_name,NF90_FLOAT, & 
     882  iret = NF90_DEF_VAR (nfid,lonbound_name,NF90_REAL4, & 
    883883 &                     dimsb(1:ndimb),nlonidb) 
    884884  longname = 'Boundaries for coordinate variable '//TRIM(lon_name) 
     
    889889  IF (l_dbg) WRITE(*,*) "histhori_irregular 3.0" 
    890890!- 
    891   iret = NF90_DEF_VAR (nfid,lat_name,NF90_FLOAT,dims(1:ndim),nlatid) 
     891  iret = NF90_DEF_VAR (nfid,lat_name,NF90_REAL4,dims(1:ndim),nlatid) 
    892892  iret = NF90_PUT_ATT (nfid,nlatid,'standard_name',"latitude") 
    893893  iret = NF90_PUT_ATT (nfid,nlatid,'units',"degrees_north") 
     
    902902!- 
    903903  iret = NF90_PUT_ATT (nfid,nlatid,'bounds',TRIM(latbound_name)) 
    904   iret = NF90_DEF_VAR (nfid,latbound_name,NF90_FLOAT, & 
     904  iret = NF90_DEF_VAR (nfid,latbound_name,NF90_REAL4, & 
    905905 &                     dimsb(1:ndimb),nlatidb) 
    906906  longname = 'Boundaries for coordinate variable '//TRIM(lat_name) 
     
    10511051  leng = MIN(LEN_TRIM(pzaxname),20) 
    10521052  iret = NF90_DEF_DIM (nfid,pzaxname(1:leng),pzsize,zaxid_tmp) 
    1053   iret = NF90_DEF_VAR (nfid,pzaxname(1:leng),NF90_FLOAT, & 
     1053  iret = NF90_DEF_VAR (nfid,pzaxname(1:leng),NF90_REAL4, & 
    10541054 &                     zaxid_tmp,zdimid) 
    10551055  iret = NF90_PUT_ATT (nfid,zdimid,'axis',"Z") 
     
    15511551      str30 = "time_counter" 
    15521552    ENDIF 
    1553     iret = NF90_DEF_VAR (nfid,str30,NF90_DOUBLE, & 
     1553    iret = NF90_DEF_VAR (nfid,str30,NF90_REAL8, & 
    15541554 &           dims(1),W_F(idf)%W_V(itx)%tdimid) 
    15551555    IF (W_F(idf)%n_tax <= 1) THEN 
     
    16641664      ENDIF 
    16651665      IF (W_F(idf)%W_V(iv)%hist_wrt_rng) THEN 
    1666         iret = NF90_PUT_ATT (nfid,nvid,'valid_min', & 
    1667  &               REAL(W_F(idf)%W_V(iv)%hist_minmax(1),KIND=4)) 
    1668         iret = NF90_PUT_ATT (nfid,nvid,'valid_max', & 
    1669  &               REAL(W_F(idf)%W_V(iv)%hist_minmax(2),KIND=4)) 
     1666        IF (W_F(idf)%W_V(iv)%v_typ == hist_r8) THEN 
     1667          iret = NF90_PUT_ATT (nfid,nvid,'valid_min', & 
     1668 &                 REAL(W_F(idf)%W_V(iv)%hist_minmax(1),KIND=8)) 
     1669          iret = NF90_PUT_ATT (nfid,nvid,'valid_max', & 
     1670 &                 REAL(W_F(idf)%W_V(iv)%hist_minmax(2),KIND=8)) 
     1671        ELSE 
     1672          iret = NF90_PUT_ATT (nfid,nvid,'valid_min', & 
     1673 &                 REAL(W_F(idf)%W_V(iv)%hist_minmax(1),KIND=4)) 
     1674          iret = NF90_PUT_ATT (nfid,nvid,'valid_max', & 
     1675 &                 REAL(W_F(idf)%W_V(iv)%hist_minmax(2),KIND=4)) 
     1676        ENDIF 
    16701677      ENDIF 
    16711678      iret = NF90_PUT_ATT (nfid,nvid,'long_name', & 
     
    24822489!-------- Put the min and max values on the file 
    24832490          nvid = W_F(ifile)%W_V(iv)%ncvid 
    2484           iret = NF90_PUT_ATT (nfid,nvid,'valid_min', & 
    2485  &                 REAL(W_F(ifile)%W_V(iv)%hist_minmax(1),KIND=4)) 
    2486           iret = NF90_PUT_ATT (nfid,nvid,'valid_max', & 
    2487  &                 REAL(W_F(ifile)%W_V(iv)%hist_minmax(2),KIND=4)) 
     2491          IF (W_F(ifile)%W_V(iv)%v_typ == hist_r8) THEN 
     2492            iret = NF90_PUT_ATT (nfid,nvid,'valid_min', & 
     2493 &                   REAL(W_F(ifile)%W_V(iv)%hist_minmax(1),KIND=8)) 
     2494            iret = NF90_PUT_ATT (nfid,nvid,'valid_max', & 
     2495 &                   REAL(W_F(ifile)%W_V(iv)%hist_minmax(2),KIND=8)) 
     2496          ELSE 
     2497            iret = NF90_PUT_ATT (nfid,nvid,'valid_min', & 
     2498 &                   REAL(W_F(ifile)%W_V(iv)%hist_minmax(1),KIND=4)) 
     2499            iret = NF90_PUT_ATT (nfid,nvid,'valid_max', & 
     2500 &                   REAL(W_F(ifile)%W_V(iv)%hist_minmax(2),KIND=4)) 
     2501          ENDIF 
    24882502        ENDIF 
    24892503      ENDIF 
    24902504!---- Time-Buffers 
    2491       IF (ALLOCATED(W_F(ifile)%W_V(iv)%t_bf)) THEN 
     2505      IF (ASSOCIATED(W_F(ifile)%W_V(iv)%t_bf)) THEN 
    24922506        DEALLOCATE(W_F(ifile)%W_V(iv)%t_bf) 
    24932507      ENDIF 
Note: See TracChangeset for help on using the changeset viewer.