Changeset 449


Ignore:
Timestamp:
09/19/13 17:05:07 (11 years ago)
Author:
ymipsl
Message:

Add unstructured grid management.

YM

Location:
XIOS/trunk/src
Files:
1 added
20 edited

Legend:

Unmodified
Added
Removed
  • XIOS/trunk/src/attribute_array_decl.cpp

    r415 r449  
    66{ 
    77  template class CAttributeArray<double,1> ; 
     8  template class CAttributeArray<double,2> ; 
    89  template class CAttributeArray<int,1> ; 
    910  template class CAttributeArray<bool,2> ; 
  • XIOS/trunk/src/config/domain_attribute.conf

    r369 r449  
    5353DECLARE_ARRAY(double, 1, lonvalue) 
    5454DECLARE_ARRAY(double, 1, latvalue) 
     55DECLARE_ATTRIBUTE(int, nvertex) 
     56DECLARE_ARRAY(double, 2, bounds_lon) 
     57DECLARE_ARRAY(double, 2, bounds_lat) 
    5558 
     59DECLARE_ENUM3(type,regular,curvilinear,unstructured) 
     60 
  • XIOS/trunk/src/functor.hpp

    r369 r449  
    1616         /// Définition de type /// 
    1717         typedef CObject SuperClass; 
    18  
    1918         public : 
     19         enum ETimeType { once, instant, centered } ; 
    2020 
    2121            /// Accesseurs /// 
     
    2323            /// Opérateur /// 
    2424            CArray<double,1> operator ()(const CArray<double,1>& dinput); 
     25            virtual ETimeType timeType(void) = 0 ; 
    2526 
    2627            /// Destructeur /// 
     
    4445            CFunctor(const CFunctor & functor);         // Not implemented. 
    4546            CFunctor(const CFunctor * const functor);   // Not implemented. 
    46  
    4747         protected : 
    4848            /// Propriétés privées /// 
  • XIOS/trunk/src/functor/accumulate.hpp

    r443 r449  
    2828            virtual void apply(const CArray<double,1>& dinput, CArray<double,1>& doutput); 
    2929            virtual void final(void) ; 
     30            virtual ETimeType timeType(void) { return centered ; } 
    3031             
    3132            /// Destructeur /// 
  • XIOS/trunk/src/functor/average.hpp

    r369 r449  
    2828            virtual void apply(const CArray<double,1>& dinput, CArray<double,1>& doutput); 
    2929            virtual void final(void) ; 
    30              
     30            virtual ETimeType timeType(void) { return centered ; } 
     31 
    3132            /// Destructeur /// 
    3233            virtual ~CAverage(void); 
  • XIOS/trunk/src/functor/instant.hpp

    r369 r449  
    2727            /// Traitement /// 
    2828            virtual void apply(const CArray<double,1>& dinput, CArray<double,1>& doutput); 
     29            virtual ETimeType timeType(void) { return instant ; } 
    2930 
    3031            /// Destructeur /// 
  • XIOS/trunk/src/functor/maximum.hpp

    r369 r449  
    2727            /// Traitement /// 
    2828            virtual void apply(const CArray<double,1>& dinput, CArray<double,1>& doutput); 
     29            virtual ETimeType timeType(void) { return centered ; } 
    2930 
    3031            /// Destructeur /// 
  • XIOS/trunk/src/functor/minimum.hpp

    r369 r449  
    2727            /// Traitement /// 
    2828            virtual void apply(const CArray<double,1>& dinput, CArray<double,1>& doutput); 
     29            virtual ETimeType timeType(void) { return centered ; } 
    2930 
    3031            /// Destructeur /// 
  • XIOS/trunk/src/functor/once.hpp

    r369 r449  
    2626            /// Traitement /// 
    2727            virtual void apply(const CArray<double,1>& dinput, CArray<double,1>& doutput); 
     28            virtual ETimeType timeType(void) { return once ; } 
    2829 
    2930            /// Destructeur /// 
  • XIOS/trunk/src/interface/c_attr/icdomain_attr.cpp

    r445 r449  
    1717  typedef xios::CDomain*  domain_Ptr; 
    1818   
     19  void cxios_set_domain_bounds_lat(domain_Ptr domain_hdl, double* bounds_lat, int extent1, int extent2) 
     20  { 
     21    CTimer::get("XIOS").resume(); 
     22    CArray<double,2> tmp(bounds_lat,shape(extent1,extent2),neverDeleteData) ; 
     23    domain_hdl->bounds_lat.reference(tmp.copy()); 
     24    domain_hdl->sendAttributToServer(domain_hdl->bounds_lat); 
     25     CTimer::get("XIOS").suspend(); 
     26  } 
     27   
     28  void cxios_get_domain_bounds_lat(domain_Ptr domain_hdl, double* bounds_lat, int extent1, int extent2) 
     29  { 
     30    CTimer::get("XIOS").resume(); 
     31    CArray<double,2> tmp(bounds_lat,shape(extent1,extent2),neverDeleteData) ; 
     32    tmp=domain_hdl->bounds_lat.getInheritedValue() ; 
     33     CTimer::get("XIOS").suspend(); 
     34  } 
     35   
     36  bool cxios_is_defined_domain_bounds_lat(domain_Ptr domain_hdl ) 
     37  { 
     38     CTimer::get("XIOS").resume(); 
     39    return domain_hdl->bounds_lat.hasInheritedValue(); 
     40     CTimer::get("XIOS").suspend(); 
     41  } 
     42   
     43   
     44   
     45  void cxios_set_domain_bounds_lon(domain_Ptr domain_hdl, double* bounds_lon, int extent1, int extent2) 
     46  { 
     47    CTimer::get("XIOS").resume(); 
     48    CArray<double,2> tmp(bounds_lon,shape(extent1,extent2),neverDeleteData) ; 
     49    domain_hdl->bounds_lon.reference(tmp.copy()); 
     50    domain_hdl->sendAttributToServer(domain_hdl->bounds_lon); 
     51     CTimer::get("XIOS").suspend(); 
     52  } 
     53   
     54  void cxios_get_domain_bounds_lon(domain_Ptr domain_hdl, double* bounds_lon, int extent1, int extent2) 
     55  { 
     56    CTimer::get("XIOS").resume(); 
     57    CArray<double,2> tmp(bounds_lon,shape(extent1,extent2),neverDeleteData) ; 
     58    tmp=domain_hdl->bounds_lon.getInheritedValue() ; 
     59     CTimer::get("XIOS").suspend(); 
     60  } 
     61   
     62  bool cxios_is_defined_domain_bounds_lon(domain_Ptr domain_hdl ) 
     63  { 
     64     CTimer::get("XIOS").resume(); 
     65    return domain_hdl->bounds_lon.hasInheritedValue(); 
     66     CTimer::get("XIOS").suspend(); 
     67  } 
     68   
     69   
     70   
    1971  void cxios_set_domain_data_dim(domain_Ptr domain_hdl, int data_dim) 
    2072  { 
     
    536588   
    537589   
     590  void cxios_set_domain_nvertex(domain_Ptr domain_hdl, int nvertex) 
     591  { 
     592     CTimer::get("XIOS").resume(); 
     593    domain_hdl->nvertex.setValue(nvertex); 
     594    domain_hdl->sendAttributToServer(domain_hdl->nvertex); 
     595     CTimer::get("XIOS").suspend(); 
     596  } 
     597   
     598  void cxios_get_domain_nvertex(domain_Ptr domain_hdl, int* nvertex) 
     599  { 
     600    *nvertex = domain_hdl->nvertex.getInheritedValue(); 
     601  } 
     602   
     603  bool cxios_is_defined_domain_nvertex(domain_Ptr domain_hdl ) 
     604  { 
     605     CTimer::get("XIOS").resume(); 
     606    return domain_hdl->nvertex.hasInheritedValue(); 
     607     CTimer::get("XIOS").suspend(); 
     608  } 
     609   
     610   
     611   
    538612  void cxios_set_domain_standard_name(domain_Ptr domain_hdl, const char * standard_name, int standard_name_size) 
    539613  { 
     
    563637   
    564638   
     639  void cxios_set_domain_type(domain_Ptr domain_hdl, const char * type, int type_size) 
     640  { 
     641    std::string type_str; 
     642    if(!cstr2string(type, type_size, type_str)) return; 
     643     CTimer::get("XIOS").resume(); 
     644    domain_hdl->type.fromString(type_str); 
     645    domain_hdl->sendAttributToServer(domain_hdl->type); 
     646     CTimer::get("XIOS").suspend(); 
     647  } 
     648   
     649  void cxios_get_domain_type(domain_Ptr domain_hdl, char * type, int type_size) 
     650  { 
     651     CTimer::get("XIOS").resume(); 
     652    if(!string_copy(domain_hdl->type.getInheritedStringValue(),type , type_size)) 
     653      ERROR("void cxios_get_domain_type(domain_Ptr domain_hdl, char * type, int type_size)", <<"Input string is to short"); 
     654     CTimer::get("XIOS").suspend(); 
     655  } 
     656   
     657  bool cxios_is_defined_domain_type(domain_Ptr domain_hdl ) 
     658  { 
     659     CTimer::get("XIOS").resume(); 
     660    return domain_hdl->type.hasInheritedValue(); 
     661     CTimer::get("XIOS").suspend(); 
     662  } 
     663   
     664   
     665   
    565666  void cxios_set_domain_zoom_ibegin(domain_Ptr domain_hdl, int zoom_ibegin) 
    566667  { 
  • XIOS/trunk/src/interface/c_attr/icdomaingroup_attr.cpp

    r445 r449  
    1717  typedef xios::CDomainGroup*  domaingroup_Ptr; 
    1818   
     19  void cxios_set_domaingroup_bounds_lat(domaingroup_Ptr domaingroup_hdl, double* bounds_lat, int extent1, int extent2) 
     20  { 
     21    CTimer::get("XIOS").resume(); 
     22    CArray<double,2> tmp(bounds_lat,shape(extent1,extent2),neverDeleteData) ; 
     23    domaingroup_hdl->bounds_lat.reference(tmp.copy()); 
     24    domaingroup_hdl->sendAttributToServer(domaingroup_hdl->bounds_lat); 
     25     CTimer::get("XIOS").suspend(); 
     26  } 
     27   
     28  void cxios_get_domaingroup_bounds_lat(domaingroup_Ptr domaingroup_hdl, double* bounds_lat, int extent1, int extent2) 
     29  { 
     30    CTimer::get("XIOS").resume(); 
     31    CArray<double,2> tmp(bounds_lat,shape(extent1,extent2),neverDeleteData) ; 
     32    tmp=domaingroup_hdl->bounds_lat.getInheritedValue() ; 
     33     CTimer::get("XIOS").suspend(); 
     34  } 
     35   
     36  bool cxios_is_defined_domaingroup_bounds_lat(domaingroup_Ptr domaingroup_hdl ) 
     37  { 
     38     CTimer::get("XIOS").resume(); 
     39    return domaingroup_hdl->bounds_lat.hasInheritedValue(); 
     40     CTimer::get("XIOS").suspend(); 
     41  } 
     42   
     43   
     44   
     45  void cxios_set_domaingroup_bounds_lon(domaingroup_Ptr domaingroup_hdl, double* bounds_lon, int extent1, int extent2) 
     46  { 
     47    CTimer::get("XIOS").resume(); 
     48    CArray<double,2> tmp(bounds_lon,shape(extent1,extent2),neverDeleteData) ; 
     49    domaingroup_hdl->bounds_lon.reference(tmp.copy()); 
     50    domaingroup_hdl->sendAttributToServer(domaingroup_hdl->bounds_lon); 
     51     CTimer::get("XIOS").suspend(); 
     52  } 
     53   
     54  void cxios_get_domaingroup_bounds_lon(domaingroup_Ptr domaingroup_hdl, double* bounds_lon, int extent1, int extent2) 
     55  { 
     56    CTimer::get("XIOS").resume(); 
     57    CArray<double,2> tmp(bounds_lon,shape(extent1,extent2),neverDeleteData) ; 
     58    tmp=domaingroup_hdl->bounds_lon.getInheritedValue() ; 
     59     CTimer::get("XIOS").suspend(); 
     60  } 
     61   
     62  bool cxios_is_defined_domaingroup_bounds_lon(domaingroup_Ptr domaingroup_hdl ) 
     63  { 
     64     CTimer::get("XIOS").resume(); 
     65    return domaingroup_hdl->bounds_lon.hasInheritedValue(); 
     66     CTimer::get("XIOS").suspend(); 
     67  } 
     68   
     69   
     70   
    1971  void cxios_set_domaingroup_data_dim(domaingroup_Ptr domaingroup_hdl, int data_dim) 
    2072  { 
     
    563615   
    564616   
     617  void cxios_set_domaingroup_nvertex(domaingroup_Ptr domaingroup_hdl, int nvertex) 
     618  { 
     619     CTimer::get("XIOS").resume(); 
     620    domaingroup_hdl->nvertex.setValue(nvertex); 
     621    domaingroup_hdl->sendAttributToServer(domaingroup_hdl->nvertex); 
     622     CTimer::get("XIOS").suspend(); 
     623  } 
     624   
     625  void cxios_get_domaingroup_nvertex(domaingroup_Ptr domaingroup_hdl, int* nvertex) 
     626  { 
     627    *nvertex = domaingroup_hdl->nvertex.getInheritedValue(); 
     628  } 
     629   
     630  bool cxios_is_defined_domaingroup_nvertex(domaingroup_Ptr domaingroup_hdl ) 
     631  { 
     632     CTimer::get("XIOS").resume(); 
     633    return domaingroup_hdl->nvertex.hasInheritedValue(); 
     634     CTimer::get("XIOS").suspend(); 
     635  } 
     636   
     637   
     638   
    565639  void cxios_set_domaingroup_standard_name(domaingroup_Ptr domaingroup_hdl, const char * standard_name, int standard_name_size) 
    566640  { 
     
    590664   
    591665   
     666  void cxios_set_domaingroup_type(domaingroup_Ptr domaingroup_hdl, const char * type, int type_size) 
     667  { 
     668    std::string type_str; 
     669    if(!cstr2string(type, type_size, type_str)) return; 
     670     CTimer::get("XIOS").resume(); 
     671    domaingroup_hdl->type.fromString(type_str); 
     672    domaingroup_hdl->sendAttributToServer(domaingroup_hdl->type); 
     673     CTimer::get("XIOS").suspend(); 
     674  } 
     675   
     676  void cxios_get_domaingroup_type(domaingroup_Ptr domaingroup_hdl, char * type, int type_size) 
     677  { 
     678     CTimer::get("XIOS").resume(); 
     679    if(!string_copy(domaingroup_hdl->type.getInheritedStringValue(),type , type_size)) 
     680      ERROR("void cxios_get_domaingroup_type(domaingroup_Ptr domaingroup_hdl, char * type, int type_size)", <<"Input string is to short"); 
     681     CTimer::get("XIOS").suspend(); 
     682  } 
     683   
     684  bool cxios_is_defined_domaingroup_type(domaingroup_Ptr domaingroup_hdl ) 
     685  { 
     686     CTimer::get("XIOS").resume(); 
     687    return domaingroup_hdl->type.hasInheritedValue(); 
     688     CTimer::get("XIOS").suspend(); 
     689  } 
     690   
     691   
     692   
    592693  void cxios_set_domaingroup_zoom_ibegin(domaingroup_Ptr domaingroup_hdl, int zoom_ibegin) 
    593694  { 
  • XIOS/trunk/src/interface/fortran_attr/domain_interface_attr.f90

    r432 r449  
    99     
    1010     
     11    SUBROUTINE cxios_set_domain_bounds_lat(domain_hdl, bounds_lat, extent1, extent2) BIND(C) 
     12      USE ISO_C_BINDING 
     13      INTEGER (kind = C_INTPTR_T), VALUE       :: domain_hdl 
     14      REAL (KIND=C_DOUBLE)     , DIMENSION(*) :: bounds_lat 
     15      INTEGER (kind = C_INT), VALUE  :: extent1 
     16      INTEGER (kind = C_INT), VALUE  :: extent2 
     17    END SUBROUTINE cxios_set_domain_bounds_lat 
     18     
     19    SUBROUTINE cxios_get_domain_bounds_lat(domain_hdl, bounds_lat, extent1, extent2) BIND(C) 
     20      USE ISO_C_BINDING 
     21      INTEGER (kind = C_INTPTR_T), VALUE       :: domain_hdl 
     22      REAL (KIND=C_DOUBLE)     , DIMENSION(*) :: bounds_lat 
     23      INTEGER (kind = C_INT), VALUE  :: extent1 
     24      INTEGER (kind = C_INT), VALUE  :: extent2 
     25    END SUBROUTINE cxios_get_domain_bounds_lat 
     26     
     27    FUNCTION cxios_is_defined_domain_bounds_lat(domain_hdl ) BIND(C) 
     28      USE ISO_C_BINDING 
     29      LOGICAL(kind=C_BOOL) :: cxios_is_defined_domain_bounds_lat 
     30      INTEGER (kind = C_INTPTR_T), VALUE :: domain_hdl 
     31    END FUNCTION cxios_is_defined_domain_bounds_lat 
     32     
     33     
     34    SUBROUTINE cxios_set_domain_bounds_lon(domain_hdl, bounds_lon, extent1, extent2) BIND(C) 
     35      USE ISO_C_BINDING 
     36      INTEGER (kind = C_INTPTR_T), VALUE       :: domain_hdl 
     37      REAL (KIND=C_DOUBLE)     , DIMENSION(*) :: bounds_lon 
     38      INTEGER (kind = C_INT), VALUE  :: extent1 
     39      INTEGER (kind = C_INT), VALUE  :: extent2 
     40    END SUBROUTINE cxios_set_domain_bounds_lon 
     41     
     42    SUBROUTINE cxios_get_domain_bounds_lon(domain_hdl, bounds_lon, extent1, extent2) BIND(C) 
     43      USE ISO_C_BINDING 
     44      INTEGER (kind = C_INTPTR_T), VALUE       :: domain_hdl 
     45      REAL (KIND=C_DOUBLE)     , DIMENSION(*) :: bounds_lon 
     46      INTEGER (kind = C_INT), VALUE  :: extent1 
     47      INTEGER (kind = C_INT), VALUE  :: extent2 
     48    END SUBROUTINE cxios_get_domain_bounds_lon 
     49     
     50    FUNCTION cxios_is_defined_domain_bounds_lon(domain_hdl ) BIND(C) 
     51      USE ISO_C_BINDING 
     52      LOGICAL(kind=C_BOOL) :: cxios_is_defined_domain_bounds_lon 
     53      INTEGER (kind = C_INTPTR_T), VALUE :: domain_hdl 
     54    END FUNCTION cxios_is_defined_domain_bounds_lon 
     55     
     56     
    1157    SUBROUTINE cxios_set_domain_data_dim(domain_hdl, data_dim) BIND(C) 
    1258      USE ISO_C_BINDING 
     
    445491     
    446492     
     493    SUBROUTINE cxios_set_domain_nvertex(domain_hdl, nvertex) BIND(C) 
     494      USE ISO_C_BINDING 
     495      INTEGER (kind = C_INTPTR_T), VALUE :: domain_hdl 
     496      INTEGER (KIND=C_INT)      , VALUE :: nvertex 
     497    END SUBROUTINE cxios_set_domain_nvertex 
     498     
     499    SUBROUTINE cxios_get_domain_nvertex(domain_hdl, nvertex) BIND(C) 
     500      USE ISO_C_BINDING 
     501      INTEGER (kind = C_INTPTR_T), VALUE :: domain_hdl 
     502      INTEGER (KIND=C_INT)             :: nvertex 
     503    END SUBROUTINE cxios_get_domain_nvertex 
     504     
     505    FUNCTION cxios_is_defined_domain_nvertex(domain_hdl ) BIND(C) 
     506      USE ISO_C_BINDING 
     507      LOGICAL(kind=C_BOOL) :: cxios_is_defined_domain_nvertex 
     508      INTEGER (kind = C_INTPTR_T), VALUE :: domain_hdl 
     509    END FUNCTION cxios_is_defined_domain_nvertex 
     510     
     511     
    447512    SUBROUTINE cxios_set_domain_standard_name(domain_hdl, standard_name, standard_name_size) BIND(C) 
    448513      USE ISO_C_BINDING 
     
    466531     
    467532     
     533    SUBROUTINE cxios_set_domain_type(domain_hdl, type, type_size) BIND(C) 
     534      USE ISO_C_BINDING 
     535      INTEGER (kind = C_INTPTR_T), VALUE :: domain_hdl 
     536      CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: type 
     537      INTEGER  (kind = C_INT)     , VALUE        :: type_size 
     538    END SUBROUTINE cxios_set_domain_type 
     539     
     540    SUBROUTINE cxios_get_domain_type(domain_hdl, type, type_size) BIND(C) 
     541      USE ISO_C_BINDING 
     542      INTEGER (kind = C_INTPTR_T), VALUE :: domain_hdl 
     543      CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: type 
     544      INTEGER  (kind = C_INT)     , VALUE        :: type_size 
     545    END SUBROUTINE cxios_get_domain_type 
     546     
     547    FUNCTION cxios_is_defined_domain_type(domain_hdl ) BIND(C) 
     548      USE ISO_C_BINDING 
     549      LOGICAL(kind=C_BOOL) :: cxios_is_defined_domain_type 
     550      INTEGER (kind = C_INTPTR_T), VALUE :: domain_hdl 
     551    END FUNCTION cxios_is_defined_domain_type 
     552     
     553     
    468554    SUBROUTINE cxios_set_domain_zoom_ibegin(domain_hdl, zoom_ibegin) BIND(C) 
    469555      USE ISO_C_BINDING 
  • XIOS/trunk/src/interface/fortran_attr/domaingroup_interface_attr.f90

    r432 r449  
    99     
    1010     
     11    SUBROUTINE cxios_set_domaingroup_bounds_lat(domaingroup_hdl, bounds_lat, extent1, extent2) BIND(C) 
     12      USE ISO_C_BINDING 
     13      INTEGER (kind = C_INTPTR_T), VALUE       :: domaingroup_hdl 
     14      REAL (KIND=C_DOUBLE)     , DIMENSION(*) :: bounds_lat 
     15      INTEGER (kind = C_INT), VALUE  :: extent1 
     16      INTEGER (kind = C_INT), VALUE  :: extent2 
     17    END SUBROUTINE cxios_set_domaingroup_bounds_lat 
     18     
     19    SUBROUTINE cxios_get_domaingroup_bounds_lat(domaingroup_hdl, bounds_lat, extent1, extent2) BIND(C) 
     20      USE ISO_C_BINDING 
     21      INTEGER (kind = C_INTPTR_T), VALUE       :: domaingroup_hdl 
     22      REAL (KIND=C_DOUBLE)     , DIMENSION(*) :: bounds_lat 
     23      INTEGER (kind = C_INT), VALUE  :: extent1 
     24      INTEGER (kind = C_INT), VALUE  :: extent2 
     25    END SUBROUTINE cxios_get_domaingroup_bounds_lat 
     26     
     27    FUNCTION cxios_is_defined_domaingroup_bounds_lat(domaingroup_hdl ) BIND(C) 
     28      USE ISO_C_BINDING 
     29      LOGICAL(kind=C_BOOL) :: cxios_is_defined_domaingroup_bounds_lat 
     30      INTEGER (kind = C_INTPTR_T), VALUE :: domaingroup_hdl 
     31    END FUNCTION cxios_is_defined_domaingroup_bounds_lat 
     32     
     33     
     34    SUBROUTINE cxios_set_domaingroup_bounds_lon(domaingroup_hdl, bounds_lon, extent1, extent2) BIND(C) 
     35      USE ISO_C_BINDING 
     36      INTEGER (kind = C_INTPTR_T), VALUE       :: domaingroup_hdl 
     37      REAL (KIND=C_DOUBLE)     , DIMENSION(*) :: bounds_lon 
     38      INTEGER (kind = C_INT), VALUE  :: extent1 
     39      INTEGER (kind = C_INT), VALUE  :: extent2 
     40    END SUBROUTINE cxios_set_domaingroup_bounds_lon 
     41     
     42    SUBROUTINE cxios_get_domaingroup_bounds_lon(domaingroup_hdl, bounds_lon, extent1, extent2) BIND(C) 
     43      USE ISO_C_BINDING 
     44      INTEGER (kind = C_INTPTR_T), VALUE       :: domaingroup_hdl 
     45      REAL (KIND=C_DOUBLE)     , DIMENSION(*) :: bounds_lon 
     46      INTEGER (kind = C_INT), VALUE  :: extent1 
     47      INTEGER (kind = C_INT), VALUE  :: extent2 
     48    END SUBROUTINE cxios_get_domaingroup_bounds_lon 
     49     
     50    FUNCTION cxios_is_defined_domaingroup_bounds_lon(domaingroup_hdl ) BIND(C) 
     51      USE ISO_C_BINDING 
     52      LOGICAL(kind=C_BOOL) :: cxios_is_defined_domaingroup_bounds_lon 
     53      INTEGER (kind = C_INTPTR_T), VALUE :: domaingroup_hdl 
     54    END FUNCTION cxios_is_defined_domaingroup_bounds_lon 
     55     
     56     
    1157    SUBROUTINE cxios_set_domaingroup_data_dim(domaingroup_hdl, data_dim) BIND(C) 
    1258      USE ISO_C_BINDING 
     
    466512     
    467513     
     514    SUBROUTINE cxios_set_domaingroup_nvertex(domaingroup_hdl, nvertex) BIND(C) 
     515      USE ISO_C_BINDING 
     516      INTEGER (kind = C_INTPTR_T), VALUE :: domaingroup_hdl 
     517      INTEGER (KIND=C_INT)      , VALUE :: nvertex 
     518    END SUBROUTINE cxios_set_domaingroup_nvertex 
     519     
     520    SUBROUTINE cxios_get_domaingroup_nvertex(domaingroup_hdl, nvertex) BIND(C) 
     521      USE ISO_C_BINDING 
     522      INTEGER (kind = C_INTPTR_T), VALUE :: domaingroup_hdl 
     523      INTEGER (KIND=C_INT)             :: nvertex 
     524    END SUBROUTINE cxios_get_domaingroup_nvertex 
     525     
     526    FUNCTION cxios_is_defined_domaingroup_nvertex(domaingroup_hdl ) BIND(C) 
     527      USE ISO_C_BINDING 
     528      LOGICAL(kind=C_BOOL) :: cxios_is_defined_domaingroup_nvertex 
     529      INTEGER (kind = C_INTPTR_T), VALUE :: domaingroup_hdl 
     530    END FUNCTION cxios_is_defined_domaingroup_nvertex 
     531     
     532     
    468533    SUBROUTINE cxios_set_domaingroup_standard_name(domaingroup_hdl, standard_name, standard_name_size) BIND(C) 
    469534      USE ISO_C_BINDING 
     
    487552     
    488553     
     554    SUBROUTINE cxios_set_domaingroup_type(domaingroup_hdl, type, type_size) BIND(C) 
     555      USE ISO_C_BINDING 
     556      INTEGER (kind = C_INTPTR_T), VALUE :: domaingroup_hdl 
     557      CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: type 
     558      INTEGER  (kind = C_INT)     , VALUE        :: type_size 
     559    END SUBROUTINE cxios_set_domaingroup_type 
     560     
     561    SUBROUTINE cxios_get_domaingroup_type(domaingroup_hdl, type, type_size) BIND(C) 
     562      USE ISO_C_BINDING 
     563      INTEGER (kind = C_INTPTR_T), VALUE :: domaingroup_hdl 
     564      CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: type 
     565      INTEGER  (kind = C_INT)     , VALUE        :: type_size 
     566    END SUBROUTINE cxios_get_domaingroup_type 
     567     
     568    FUNCTION cxios_is_defined_domaingroup_type(domaingroup_hdl ) BIND(C) 
     569      USE ISO_C_BINDING 
     570      LOGICAL(kind=C_BOOL) :: cxios_is_defined_domaingroup_type 
     571      INTEGER (kind = C_INTPTR_T), VALUE :: domaingroup_hdl 
     572    END FUNCTION cxios_is_defined_domaingroup_type 
     573     
     574     
    489575    SUBROUTINE cxios_set_domaingroup_zoom_ibegin(domaingroup_hdl, zoom_ibegin) BIND(C) 
    490576      USE ISO_C_BINDING 
  • XIOS/trunk/src/interface/fortran_attr/idomain_attr.F90

    r432 r449  
    1212   
    1313  SUBROUTINE xios(set_domain_attr)  & 
    14     ( domain_id, data_dim, data_i_index, data_ibegin, data_j_index, data_jbegin, data_n_index, data_ni  & 
    15     , data_nj, domain_group_ref, ibegin, iend, jbegin, jend, latvalue, long_name, lonvalue, mask  & 
    16     , name, ni, ni_glo, nj, nj_glo, standard_name, zoom_ibegin, zoom_ibegin_loc, zoom_jbegin, zoom_jbegin_loc  & 
    17     , zoom_ni, zoom_ni_loc, zoom_nj, zoom_nj_loc ) 
     14    ( domain_id, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index, data_jbegin  & 
     15    , data_n_index, data_ni, data_nj, domain_group_ref, ibegin, iend, jbegin, jend, latvalue, long_name  & 
     16    , lonvalue, mask, name, ni, ni_glo, nj, nj_glo, nvertex, standard_name, type, zoom_ibegin, zoom_ibegin_loc  & 
     17    , zoom_jbegin, zoom_jbegin_loc, zoom_ni, zoom_ni_loc, zoom_nj, zoom_nj_loc ) 
    1818     
    1919    IMPLICIT NONE 
    2020      TYPE(txios(domain))  :: domain_hdl 
    2121      CHARACTER(LEN=*), INTENT(IN) ::domain_id 
     22      REAL (KIND=8) , OPTIONAL, INTENT(IN) :: bounds_lat(:,:) 
     23      REAL (KIND=8) , OPTIONAL, INTENT(IN) :: bounds_lon(:,:) 
    2224      INTEGER  , OPTIONAL, INTENT(IN) :: data_dim 
    2325      INTEGER  , OPTIONAL, INTENT(IN) :: data_i_index(:) 
     
    4345      INTEGER  , OPTIONAL, INTENT(IN) :: nj 
    4446      INTEGER  , OPTIONAL, INTENT(IN) :: nj_glo 
     47      INTEGER  , OPTIONAL, INTENT(IN) :: nvertex 
    4548      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: standard_name 
     49      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: type 
    4650      INTEGER  , OPTIONAL, INTENT(IN) :: zoom_ibegin 
    4751      INTEGER  , OPTIONAL, INTENT(IN) :: zoom_ibegin_loc 
     
    5559      CALL xios(get_domain_handle)(domain_id,domain_hdl) 
    5660      CALL xios(set_domain_attr_hdl_)   & 
    57       ( domain_hdl, data_dim, data_i_index, data_ibegin, data_j_index, data_jbegin, data_n_index, data_ni  & 
    58       , data_nj, domain_group_ref, ibegin, iend, jbegin, jend, latvalue, long_name, lonvalue, mask  & 
    59       , name, ni, ni_glo, nj, nj_glo, standard_name, zoom_ibegin, zoom_ibegin_loc, zoom_jbegin, zoom_jbegin_loc  & 
    60       , zoom_ni, zoom_ni_loc, zoom_nj, zoom_nj_loc ) 
     61      ( domain_hdl, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index, data_jbegin  & 
     62      , data_n_index, data_ni, data_nj, domain_group_ref, ibegin, iend, jbegin, jend, latvalue, long_name  & 
     63      , lonvalue, mask, name, ni, ni_glo, nj, nj_glo, nvertex, standard_name, type, zoom_ibegin, zoom_ibegin_loc  & 
     64      , zoom_jbegin, zoom_jbegin_loc, zoom_ni, zoom_ni_loc, zoom_nj, zoom_nj_loc ) 
    6165     
    6266  END SUBROUTINE xios(set_domain_attr) 
    6367   
    6468  SUBROUTINE xios(set_domain_attr_hdl)  & 
    65     ( domain_hdl, data_dim, data_i_index, data_ibegin, data_j_index, data_jbegin, data_n_index, data_ni  & 
    66     , data_nj, domain_group_ref, ibegin, iend, jbegin, jend, latvalue, long_name, lonvalue, mask  & 
    67     , name, ni, ni_glo, nj, nj_glo, standard_name, zoom_ibegin, zoom_ibegin_loc, zoom_jbegin, zoom_jbegin_loc  & 
    68     , zoom_ni, zoom_ni_loc, zoom_nj, zoom_nj_loc ) 
     69    ( domain_hdl, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index, data_jbegin  & 
     70    , data_n_index, data_ni, data_nj, domain_group_ref, ibegin, iend, jbegin, jend, latvalue, long_name  & 
     71    , lonvalue, mask, name, ni, ni_glo, nj, nj_glo, nvertex, standard_name, type, zoom_ibegin, zoom_ibegin_loc  & 
     72    , zoom_jbegin, zoom_jbegin_loc, zoom_ni, zoom_ni_loc, zoom_nj, zoom_nj_loc ) 
    6973     
    7074    IMPLICIT NONE 
    7175      TYPE(txios(domain)) , INTENT(IN) :: domain_hdl 
     76      REAL (KIND=8) , OPTIONAL, INTENT(IN) :: bounds_lat(:,:) 
     77      REAL (KIND=8) , OPTIONAL, INTENT(IN) :: bounds_lon(:,:) 
    7278      INTEGER  , OPTIONAL, INTENT(IN) :: data_dim 
    7379      INTEGER  , OPTIONAL, INTENT(IN) :: data_i_index(:) 
     
    9399      INTEGER  , OPTIONAL, INTENT(IN) :: nj 
    94100      INTEGER  , OPTIONAL, INTENT(IN) :: nj_glo 
     101      INTEGER  , OPTIONAL, INTENT(IN) :: nvertex 
    95102      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: standard_name 
     103      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: type 
    96104      INTEGER  , OPTIONAL, INTENT(IN) :: zoom_ibegin 
    97105      INTEGER  , OPTIONAL, INTENT(IN) :: zoom_ibegin_loc 
     
    104112       
    105113      CALL xios(set_domain_attr_hdl_)  & 
    106       ( domain_hdl, data_dim, data_i_index, data_ibegin, data_j_index, data_jbegin, data_n_index, data_ni  & 
    107       , data_nj, domain_group_ref, ibegin, iend, jbegin, jend, latvalue, long_name, lonvalue, mask  & 
    108       , name, ni, ni_glo, nj, nj_glo, standard_name, zoom_ibegin, zoom_ibegin_loc, zoom_jbegin, zoom_jbegin_loc  & 
    109       , zoom_ni, zoom_ni_loc, zoom_nj, zoom_nj_loc ) 
     114      ( domain_hdl, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index, data_jbegin  & 
     115      , data_n_index, data_ni, data_nj, domain_group_ref, ibegin, iend, jbegin, jend, latvalue, long_name  & 
     116      , lonvalue, mask, name, ni, ni_glo, nj, nj_glo, nvertex, standard_name, type, zoom_ibegin, zoom_ibegin_loc  & 
     117      , zoom_jbegin, zoom_jbegin_loc, zoom_ni, zoom_ni_loc, zoom_nj, zoom_nj_loc ) 
    110118     
    111119  END SUBROUTINE xios(set_domain_attr_hdl) 
    112120   
    113121  SUBROUTINE xios(set_domain_attr_hdl_)   & 
    114     ( domain_hdl, data_dim_, data_i_index_, data_ibegin_, data_j_index_, data_jbegin_, data_n_index_  & 
    115     , data_ni_, data_nj_, domain_group_ref_, ibegin_, iend_, jbegin_, jend_, latvalue_, long_name_  & 
    116     , lonvalue_, mask_, name_, ni_, ni_glo_, nj_, nj_glo_, standard_name_, zoom_ibegin_, zoom_ibegin_loc_  & 
    117     , zoom_jbegin_, zoom_jbegin_loc_, zoom_ni_, zoom_ni_loc_, zoom_nj_, zoom_nj_loc_ ) 
     122    ( domain_hdl, bounds_lat_, bounds_lon_, data_dim_, data_i_index_, data_ibegin_, data_j_index_  & 
     123    , data_jbegin_, data_n_index_, data_ni_, data_nj_, domain_group_ref_, ibegin_, iend_, jbegin_  & 
     124    , jend_, latvalue_, long_name_, lonvalue_, mask_, name_, ni_, ni_glo_, nj_, nj_glo_, nvertex_  & 
     125    , standard_name_, type_, zoom_ibegin_, zoom_ibegin_loc_, zoom_jbegin_, zoom_jbegin_loc_, zoom_ni_  & 
     126    , zoom_ni_loc_, zoom_nj_, zoom_nj_loc_ ) 
    118127     
    119128    IMPLICIT NONE 
    120129      TYPE(txios(domain)) , INTENT(IN) :: domain_hdl 
     130      REAL (KIND=8) , OPTIONAL, INTENT(IN) :: bounds_lat_(:,:) 
     131      REAL (KIND=8) , OPTIONAL, INTENT(IN) :: bounds_lon_(:,:) 
    121132      INTEGER  , OPTIONAL, INTENT(IN) :: data_dim_ 
    122133      INTEGER  , OPTIONAL, INTENT(IN) :: data_i_index_(:) 
     
    142153      INTEGER  , OPTIONAL, INTENT(IN) :: nj_ 
    143154      INTEGER  , OPTIONAL, INTENT(IN) :: nj_glo_ 
     155      INTEGER  , OPTIONAL, INTENT(IN) :: nvertex_ 
    144156      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: standard_name_ 
     157      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: type_ 
    145158      INTEGER  , OPTIONAL, INTENT(IN) :: zoom_ibegin_ 
    146159      INTEGER  , OPTIONAL, INTENT(IN) :: zoom_ibegin_loc_ 
     
    152165      INTEGER  , OPTIONAL, INTENT(IN) :: zoom_nj_loc_ 
    153166       
     167      IF (PRESENT(bounds_lat_)) THEN 
     168        CALL cxios_set_domain_bounds_lat(domain_hdl%daddr, bounds_lat_,size(bounds_lat_,1),size(bounds_lat_,2)) 
     169      ENDIF 
     170       
     171      IF (PRESENT(bounds_lon_)) THEN 
     172        CALL cxios_set_domain_bounds_lon(domain_hdl%daddr, bounds_lon_,size(bounds_lon_,1),size(bounds_lon_,2)) 
     173      ENDIF 
     174       
    154175      IF (PRESENT(data_dim_)) THEN 
    155176        CALL cxios_set_domain_data_dim(domain_hdl%daddr, data_dim_) 
     
    242263      ENDIF 
    243264       
     265      IF (PRESENT(nvertex_)) THEN 
     266        CALL cxios_set_domain_nvertex(domain_hdl%daddr, nvertex_) 
     267      ENDIF 
     268       
    244269      IF (PRESENT(standard_name_)) THEN 
    245270        CALL cxios_set_domain_standard_name(domain_hdl%daddr, standard_name_, len(standard_name_)) 
     271      ENDIF 
     272       
     273      IF (PRESENT(type_)) THEN 
     274        CALL cxios_set_domain_type(domain_hdl%daddr, type_, len(type_)) 
    246275      ENDIF 
    247276       
     
    283312   
    284313  SUBROUTINE xios(get_domain_attr)  & 
    285     ( domain_id, data_dim, data_i_index, data_ibegin, data_j_index, data_jbegin, data_n_index, data_ni  & 
    286     , data_nj, domain_group_ref, ibegin, iend, jbegin, jend, latvalue, long_name, lonvalue, mask  & 
    287     , name, ni, ni_glo, nj, nj_glo, standard_name, zoom_ibegin, zoom_ibegin_loc, zoom_jbegin, zoom_jbegin_loc  & 
    288     , zoom_ni, zoom_ni_loc, zoom_nj, zoom_nj_loc ) 
     314    ( domain_id, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index, data_jbegin  & 
     315    , data_n_index, data_ni, data_nj, domain_group_ref, ibegin, iend, jbegin, jend, latvalue, long_name  & 
     316    , lonvalue, mask, name, ni, ni_glo, nj, nj_glo, nvertex, standard_name, type, zoom_ibegin, zoom_ibegin_loc  & 
     317    , zoom_jbegin, zoom_jbegin_loc, zoom_ni, zoom_ni_loc, zoom_nj, zoom_nj_loc ) 
    289318     
    290319    IMPLICIT NONE 
    291320      TYPE(txios(domain))  :: domain_hdl 
    292321      CHARACTER(LEN=*), INTENT(IN) ::domain_id 
     322      REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: bounds_lat(:,:) 
     323      REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: bounds_lon(:,:) 
    293324      INTEGER  , OPTIONAL, INTENT(OUT) :: data_dim 
    294325      INTEGER  , OPTIONAL, INTENT(OUT) :: data_i_index(:) 
     
    314345      INTEGER  , OPTIONAL, INTENT(OUT) :: nj 
    315346      INTEGER  , OPTIONAL, INTENT(OUT) :: nj_glo 
     347      INTEGER  , OPTIONAL, INTENT(OUT) :: nvertex 
    316348      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: standard_name 
     349      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: type 
    317350      INTEGER  , OPTIONAL, INTENT(OUT) :: zoom_ibegin 
    318351      INTEGER  , OPTIONAL, INTENT(OUT) :: zoom_ibegin_loc 
     
    326359      CALL xios(get_domain_handle)(domain_id,domain_hdl) 
    327360      CALL xios(get_domain_attr_hdl_)   & 
    328       ( domain_hdl, data_dim, data_i_index, data_ibegin, data_j_index, data_jbegin, data_n_index, data_ni  & 
    329       , data_nj, domain_group_ref, ibegin, iend, jbegin, jend, latvalue, long_name, lonvalue, mask  & 
    330       , name, ni, ni_glo, nj, nj_glo, standard_name, zoom_ibegin, zoom_ibegin_loc, zoom_jbegin, zoom_jbegin_loc  & 
    331       , zoom_ni, zoom_ni_loc, zoom_nj, zoom_nj_loc ) 
     361      ( domain_hdl, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index, data_jbegin  & 
     362      , data_n_index, data_ni, data_nj, domain_group_ref, ibegin, iend, jbegin, jend, latvalue, long_name  & 
     363      , lonvalue, mask, name, ni, ni_glo, nj, nj_glo, nvertex, standard_name, type, zoom_ibegin, zoom_ibegin_loc  & 
     364      , zoom_jbegin, zoom_jbegin_loc, zoom_ni, zoom_ni_loc, zoom_nj, zoom_nj_loc ) 
    332365     
    333366  END SUBROUTINE xios(get_domain_attr) 
    334367   
    335368  SUBROUTINE xios(get_domain_attr_hdl)  & 
    336     ( domain_hdl, data_dim, data_i_index, data_ibegin, data_j_index, data_jbegin, data_n_index, data_ni  & 
    337     , data_nj, domain_group_ref, ibegin, iend, jbegin, jend, latvalue, long_name, lonvalue, mask  & 
    338     , name, ni, ni_glo, nj, nj_glo, standard_name, zoom_ibegin, zoom_ibegin_loc, zoom_jbegin, zoom_jbegin_loc  & 
    339     , zoom_ni, zoom_ni_loc, zoom_nj, zoom_nj_loc ) 
     369    ( domain_hdl, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index, data_jbegin  & 
     370    , data_n_index, data_ni, data_nj, domain_group_ref, ibegin, iend, jbegin, jend, latvalue, long_name  & 
     371    , lonvalue, mask, name, ni, ni_glo, nj, nj_glo, nvertex, standard_name, type, zoom_ibegin, zoom_ibegin_loc  & 
     372    , zoom_jbegin, zoom_jbegin_loc, zoom_ni, zoom_ni_loc, zoom_nj, zoom_nj_loc ) 
    340373     
    341374    IMPLICIT NONE 
    342375      TYPE(txios(domain)) , INTENT(IN) :: domain_hdl 
     376      REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: bounds_lat(:,:) 
     377      REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: bounds_lon(:,:) 
    343378      INTEGER  , OPTIONAL, INTENT(OUT) :: data_dim 
    344379      INTEGER  , OPTIONAL, INTENT(OUT) :: data_i_index(:) 
     
    364399      INTEGER  , OPTIONAL, INTENT(OUT) :: nj 
    365400      INTEGER  , OPTIONAL, INTENT(OUT) :: nj_glo 
     401      INTEGER  , OPTIONAL, INTENT(OUT) :: nvertex 
    366402      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: standard_name 
     403      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: type 
    367404      INTEGER  , OPTIONAL, INTENT(OUT) :: zoom_ibegin 
    368405      INTEGER  , OPTIONAL, INTENT(OUT) :: zoom_ibegin_loc 
     
    375412       
    376413      CALL xios(get_domain_attr_hdl_)  & 
    377       ( domain_hdl, data_dim, data_i_index, data_ibegin, data_j_index, data_jbegin, data_n_index, data_ni  & 
    378       , data_nj, domain_group_ref, ibegin, iend, jbegin, jend, latvalue, long_name, lonvalue, mask  & 
    379       , name, ni, ni_glo, nj, nj_glo, standard_name, zoom_ibegin, zoom_ibegin_loc, zoom_jbegin, zoom_jbegin_loc  & 
    380       , zoom_ni, zoom_ni_loc, zoom_nj, zoom_nj_loc ) 
     414      ( domain_hdl, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index, data_jbegin  & 
     415      , data_n_index, data_ni, data_nj, domain_group_ref, ibegin, iend, jbegin, jend, latvalue, long_name  & 
     416      , lonvalue, mask, name, ni, ni_glo, nj, nj_glo, nvertex, standard_name, type, zoom_ibegin, zoom_ibegin_loc  & 
     417      , zoom_jbegin, zoom_jbegin_loc, zoom_ni, zoom_ni_loc, zoom_nj, zoom_nj_loc ) 
    381418     
    382419  END SUBROUTINE xios(get_domain_attr_hdl) 
    383420   
    384421  SUBROUTINE xios(get_domain_attr_hdl_)   & 
    385     ( domain_hdl, data_dim_, data_i_index_, data_ibegin_, data_j_index_, data_jbegin_, data_n_index_  & 
    386     , data_ni_, data_nj_, domain_group_ref_, ibegin_, iend_, jbegin_, jend_, latvalue_, long_name_  & 
    387     , lonvalue_, mask_, name_, ni_, ni_glo_, nj_, nj_glo_, standard_name_, zoom_ibegin_, zoom_ibegin_loc_  & 
    388     , zoom_jbegin_, zoom_jbegin_loc_, zoom_ni_, zoom_ni_loc_, zoom_nj_, zoom_nj_loc_ ) 
     422    ( domain_hdl, bounds_lat_, bounds_lon_, data_dim_, data_i_index_, data_ibegin_, data_j_index_  & 
     423    , data_jbegin_, data_n_index_, data_ni_, data_nj_, domain_group_ref_, ibegin_, iend_, jbegin_  & 
     424    , jend_, latvalue_, long_name_, lonvalue_, mask_, name_, ni_, ni_glo_, nj_, nj_glo_, nvertex_  & 
     425    , standard_name_, type_, zoom_ibegin_, zoom_ibegin_loc_, zoom_jbegin_, zoom_jbegin_loc_, zoom_ni_  & 
     426    , zoom_ni_loc_, zoom_nj_, zoom_nj_loc_ ) 
    389427     
    390428    IMPLICIT NONE 
    391429      TYPE(txios(domain)) , INTENT(IN) :: domain_hdl 
     430      REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: bounds_lat_(:,:) 
     431      REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: bounds_lon_(:,:) 
    392432      INTEGER  , OPTIONAL, INTENT(OUT) :: data_dim_ 
    393433      INTEGER  , OPTIONAL, INTENT(OUT) :: data_i_index_(:) 
     
    413453      INTEGER  , OPTIONAL, INTENT(OUT) :: nj_ 
    414454      INTEGER  , OPTIONAL, INTENT(OUT) :: nj_glo_ 
     455      INTEGER  , OPTIONAL, INTENT(OUT) :: nvertex_ 
    415456      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: standard_name_ 
     457      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: type_ 
    416458      INTEGER  , OPTIONAL, INTENT(OUT) :: zoom_ibegin_ 
    417459      INTEGER  , OPTIONAL, INTENT(OUT) :: zoom_ibegin_loc_ 
     
    423465      INTEGER  , OPTIONAL, INTENT(OUT) :: zoom_nj_loc_ 
    424466       
     467      IF (PRESENT(bounds_lat_)) THEN 
     468        CALL cxios_get_domain_bounds_lat(domain_hdl%daddr, bounds_lat_,size(bounds_lat_,1),size(bounds_lat_,2)) 
     469      ENDIF 
     470       
     471      IF (PRESENT(bounds_lon_)) THEN 
     472        CALL cxios_get_domain_bounds_lon(domain_hdl%daddr, bounds_lon_,size(bounds_lon_,1),size(bounds_lon_,2)) 
     473      ENDIF 
     474       
    425475      IF (PRESENT(data_dim_)) THEN 
    426476        CALL cxios_get_domain_data_dim(domain_hdl%daddr, data_dim_) 
     
    513563      ENDIF 
    514564       
     565      IF (PRESENT(nvertex_)) THEN 
     566        CALL cxios_get_domain_nvertex(domain_hdl%daddr, nvertex_) 
     567      ENDIF 
     568       
    515569      IF (PRESENT(standard_name_)) THEN 
    516570        CALL cxios_get_domain_standard_name(domain_hdl%daddr, standard_name_, len(standard_name_)) 
     571      ENDIF 
     572       
     573      IF (PRESENT(type_)) THEN 
     574        CALL cxios_get_domain_type(domain_hdl%daddr, type_, len(type_)) 
    517575      ENDIF 
    518576       
     
    554612   
    555613  SUBROUTINE xios(is_defined_domain_attr)  & 
    556     ( domain_id, data_dim, data_i_index, data_ibegin, data_j_index, data_jbegin, data_n_index, data_ni  & 
    557     , data_nj, domain_group_ref, ibegin, iend, jbegin, jend, latvalue, long_name, lonvalue, mask  & 
    558     , name, ni, ni_glo, nj, nj_glo, standard_name, zoom_ibegin, zoom_ibegin_loc, zoom_jbegin, zoom_jbegin_loc  & 
    559     , zoom_ni, zoom_ni_loc, zoom_nj, zoom_nj_loc ) 
     614    ( domain_id, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index, data_jbegin  & 
     615    , data_n_index, data_ni, data_nj, domain_group_ref, ibegin, iend, jbegin, jend, latvalue, long_name  & 
     616    , lonvalue, mask, name, ni, ni_glo, nj, nj_glo, nvertex, standard_name, type, zoom_ibegin, zoom_ibegin_loc  & 
     617    , zoom_jbegin, zoom_jbegin_loc, zoom_ni, zoom_ni_loc, zoom_nj, zoom_nj_loc ) 
    560618     
    561619    IMPLICIT NONE 
    562620      TYPE(txios(domain))  :: domain_hdl 
    563621      CHARACTER(LEN=*), INTENT(IN) ::domain_id 
     622      LOGICAL, OPTIONAL, INTENT(OUT) :: bounds_lat 
     623      LOGICAL(KIND=C_BOOL) :: bounds_lat_tmp 
     624      LOGICAL, OPTIONAL, INTENT(OUT) :: bounds_lon 
     625      LOGICAL(KIND=C_BOOL) :: bounds_lon_tmp 
    564626      LOGICAL, OPTIONAL, INTENT(OUT) :: data_dim 
    565627      LOGICAL(KIND=C_BOOL) :: data_dim_tmp 
     
    606668      LOGICAL, OPTIONAL, INTENT(OUT) :: nj_glo 
    607669      LOGICAL(KIND=C_BOOL) :: nj_glo_tmp 
     670      LOGICAL, OPTIONAL, INTENT(OUT) :: nvertex 
     671      LOGICAL(KIND=C_BOOL) :: nvertex_tmp 
    608672      LOGICAL, OPTIONAL, INTENT(OUT) :: standard_name 
    609673      LOGICAL(KIND=C_BOOL) :: standard_name_tmp 
     674      LOGICAL, OPTIONAL, INTENT(OUT) :: type 
     675      LOGICAL(KIND=C_BOOL) :: type_tmp 
    610676      LOGICAL, OPTIONAL, INTENT(OUT) :: zoom_ibegin 
    611677      LOGICAL(KIND=C_BOOL) :: zoom_ibegin_tmp 
     
    627693      CALL xios(get_domain_handle)(domain_id,domain_hdl) 
    628694      CALL xios(is_defined_domain_attr_hdl_)   & 
    629       ( domain_hdl, data_dim, data_i_index, data_ibegin, data_j_index, data_jbegin, data_n_index, data_ni  & 
    630       , data_nj, domain_group_ref, ibegin, iend, jbegin, jend, latvalue, long_name, lonvalue, mask  & 
    631       , name, ni, ni_glo, nj, nj_glo, standard_name, zoom_ibegin, zoom_ibegin_loc, zoom_jbegin, zoom_jbegin_loc  & 
    632       , zoom_ni, zoom_ni_loc, zoom_nj, zoom_nj_loc ) 
     695      ( domain_hdl, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index, data_jbegin  & 
     696      , data_n_index, data_ni, data_nj, domain_group_ref, ibegin, iend, jbegin, jend, latvalue, long_name  & 
     697      , lonvalue, mask, name, ni, ni_glo, nj, nj_glo, nvertex, standard_name, type, zoom_ibegin, zoom_ibegin_loc  & 
     698      , zoom_jbegin, zoom_jbegin_loc, zoom_ni, zoom_ni_loc, zoom_nj, zoom_nj_loc ) 
    633699     
    634700  END SUBROUTINE xios(is_defined_domain_attr) 
    635701   
    636702  SUBROUTINE xios(is_defined_domain_attr_hdl)  & 
    637     ( domain_hdl, data_dim, data_i_index, data_ibegin, data_j_index, data_jbegin, data_n_index, data_ni  & 
    638     , data_nj, domain_group_ref, ibegin, iend, jbegin, jend, latvalue, long_name, lonvalue, mask  & 
    639     , name, ni, ni_glo, nj, nj_glo, standard_name, zoom_ibegin, zoom_ibegin_loc, zoom_jbegin, zoom_jbegin_loc  & 
    640     , zoom_ni, zoom_ni_loc, zoom_nj, zoom_nj_loc ) 
     703    ( domain_hdl, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index, data_jbegin  & 
     704    , data_n_index, data_ni, data_nj, domain_group_ref, ibegin, iend, jbegin, jend, latvalue, long_name  & 
     705    , lonvalue, mask, name, ni, ni_glo, nj, nj_glo, nvertex, standard_name, type, zoom_ibegin, zoom_ibegin_loc  & 
     706    , zoom_jbegin, zoom_jbegin_loc, zoom_ni, zoom_ni_loc, zoom_nj, zoom_nj_loc ) 
    641707     
    642708    IMPLICIT NONE 
    643709      TYPE(txios(domain)) , INTENT(IN) :: domain_hdl 
     710      LOGICAL, OPTIONAL, INTENT(OUT) :: bounds_lat 
     711      LOGICAL(KIND=C_BOOL) :: bounds_lat_tmp 
     712      LOGICAL, OPTIONAL, INTENT(OUT) :: bounds_lon 
     713      LOGICAL(KIND=C_BOOL) :: bounds_lon_tmp 
    644714      LOGICAL, OPTIONAL, INTENT(OUT) :: data_dim 
    645715      LOGICAL(KIND=C_BOOL) :: data_dim_tmp 
     
    686756      LOGICAL, OPTIONAL, INTENT(OUT) :: nj_glo 
    687757      LOGICAL(KIND=C_BOOL) :: nj_glo_tmp 
     758      LOGICAL, OPTIONAL, INTENT(OUT) :: nvertex 
     759      LOGICAL(KIND=C_BOOL) :: nvertex_tmp 
    688760      LOGICAL, OPTIONAL, INTENT(OUT) :: standard_name 
    689761      LOGICAL(KIND=C_BOOL) :: standard_name_tmp 
     762      LOGICAL, OPTIONAL, INTENT(OUT) :: type 
     763      LOGICAL(KIND=C_BOOL) :: type_tmp 
    690764      LOGICAL, OPTIONAL, INTENT(OUT) :: zoom_ibegin 
    691765      LOGICAL(KIND=C_BOOL) :: zoom_ibegin_tmp 
     
    706780       
    707781      CALL xios(is_defined_domain_attr_hdl_)  & 
    708       ( domain_hdl, data_dim, data_i_index, data_ibegin, data_j_index, data_jbegin, data_n_index, data_ni  & 
    709       , data_nj, domain_group_ref, ibegin, iend, jbegin, jend, latvalue, long_name, lonvalue, mask  & 
    710       , name, ni, ni_glo, nj, nj_glo, standard_name, zoom_ibegin, zoom_ibegin_loc, zoom_jbegin, zoom_jbegin_loc  & 
    711       , zoom_ni, zoom_ni_loc, zoom_nj, zoom_nj_loc ) 
     782      ( domain_hdl, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index, data_jbegin  & 
     783      , data_n_index, data_ni, data_nj, domain_group_ref, ibegin, iend, jbegin, jend, latvalue, long_name  & 
     784      , lonvalue, mask, name, ni, ni_glo, nj, nj_glo, nvertex, standard_name, type, zoom_ibegin, zoom_ibegin_loc  & 
     785      , zoom_jbegin, zoom_jbegin_loc, zoom_ni, zoom_ni_loc, zoom_nj, zoom_nj_loc ) 
    712786     
    713787  END SUBROUTINE xios(is_defined_domain_attr_hdl) 
    714788   
    715789  SUBROUTINE xios(is_defined_domain_attr_hdl_)   & 
    716     ( domain_hdl, data_dim_, data_i_index_, data_ibegin_, data_j_index_, data_jbegin_, data_n_index_  & 
    717     , data_ni_, data_nj_, domain_group_ref_, ibegin_, iend_, jbegin_, jend_, latvalue_, long_name_  & 
    718     , lonvalue_, mask_, name_, ni_, ni_glo_, nj_, nj_glo_, standard_name_, zoom_ibegin_, zoom_ibegin_loc_  & 
    719     , zoom_jbegin_, zoom_jbegin_loc_, zoom_ni_, zoom_ni_loc_, zoom_nj_, zoom_nj_loc_ ) 
     790    ( domain_hdl, bounds_lat_, bounds_lon_, data_dim_, data_i_index_, data_ibegin_, data_j_index_  & 
     791    , data_jbegin_, data_n_index_, data_ni_, data_nj_, domain_group_ref_, ibegin_, iend_, jbegin_  & 
     792    , jend_, latvalue_, long_name_, lonvalue_, mask_, name_, ni_, ni_glo_, nj_, nj_glo_, nvertex_  & 
     793    , standard_name_, type_, zoom_ibegin_, zoom_ibegin_loc_, zoom_jbegin_, zoom_jbegin_loc_, zoom_ni_  & 
     794    , zoom_ni_loc_, zoom_nj_, zoom_nj_loc_ ) 
    720795     
    721796    IMPLICIT NONE 
    722797      TYPE(txios(domain)) , INTENT(IN) :: domain_hdl 
     798      LOGICAL, OPTIONAL, INTENT(OUT) :: bounds_lat_ 
     799      LOGICAL(KIND=C_BOOL) :: bounds_lat__tmp 
     800      LOGICAL, OPTIONAL, INTENT(OUT) :: bounds_lon_ 
     801      LOGICAL(KIND=C_BOOL) :: bounds_lon__tmp 
    723802      LOGICAL, OPTIONAL, INTENT(OUT) :: data_dim_ 
    724803      LOGICAL(KIND=C_BOOL) :: data_dim__tmp 
     
    765844      LOGICAL, OPTIONAL, INTENT(OUT) :: nj_glo_ 
    766845      LOGICAL(KIND=C_BOOL) :: nj_glo__tmp 
     846      LOGICAL, OPTIONAL, INTENT(OUT) :: nvertex_ 
     847      LOGICAL(KIND=C_BOOL) :: nvertex__tmp 
    767848      LOGICAL, OPTIONAL, INTENT(OUT) :: standard_name_ 
    768849      LOGICAL(KIND=C_BOOL) :: standard_name__tmp 
     850      LOGICAL, OPTIONAL, INTENT(OUT) :: type_ 
     851      LOGICAL(KIND=C_BOOL) :: type__tmp 
    769852      LOGICAL, OPTIONAL, INTENT(OUT) :: zoom_ibegin_ 
    770853      LOGICAL(KIND=C_BOOL) :: zoom_ibegin__tmp 
     
    784867      LOGICAL(KIND=C_BOOL) :: zoom_nj_loc__tmp 
    785868       
     869      IF (PRESENT(bounds_lat_)) THEN 
     870        bounds_lat__tmp=cxios_is_defined_domain_bounds_lat(domain_hdl%daddr) 
     871        bounds_lat_=bounds_lat__tmp 
     872      ENDIF 
     873       
     874      IF (PRESENT(bounds_lon_)) THEN 
     875        bounds_lon__tmp=cxios_is_defined_domain_bounds_lon(domain_hdl%daddr) 
     876        bounds_lon_=bounds_lon__tmp 
     877      ENDIF 
     878       
    786879      IF (PRESENT(data_dim_)) THEN 
    787880        data_dim__tmp=cxios_is_defined_domain_data_dim(domain_hdl%daddr) 
     
    894987      ENDIF 
    895988       
     989      IF (PRESENT(nvertex_)) THEN 
     990        nvertex__tmp=cxios_is_defined_domain_nvertex(domain_hdl%daddr) 
     991        nvertex_=nvertex__tmp 
     992      ENDIF 
     993       
    896994      IF (PRESENT(standard_name_)) THEN 
    897995        standard_name__tmp=cxios_is_defined_domain_standard_name(domain_hdl%daddr) 
     
    899997      ENDIF 
    900998       
     999      IF (PRESENT(type_)) THEN 
     1000        type__tmp=cxios_is_defined_domain_type(domain_hdl%daddr) 
     1001        type_=type__tmp 
     1002      ENDIF 
     1003       
    9011004      IF (PRESENT(zoom_ibegin_)) THEN 
    9021005        zoom_ibegin__tmp=cxios_is_defined_domain_zoom_ibegin(domain_hdl%daddr) 
  • XIOS/trunk/src/interface/fortran_attr/idomaingroup_attr.F90

    r432 r449  
    1212   
    1313  SUBROUTINE xios(set_domaingroup_attr)  & 
    14     ( domaingroup_id, data_dim, data_i_index, data_ibegin, data_j_index, data_jbegin, data_n_index  & 
    15     , data_ni, data_nj, domain_group_ref, group_ref, ibegin, iend, jbegin, jend, latvalue, long_name  & 
    16     , lonvalue, mask, name, ni, ni_glo, nj, nj_glo, standard_name, zoom_ibegin, zoom_ibegin_loc  & 
    17     , zoom_jbegin, zoom_jbegin_loc, zoom_ni, zoom_ni_loc, zoom_nj, zoom_nj_loc ) 
     14    ( domaingroup_id, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  & 
     15    , data_jbegin, data_n_index, data_ni, data_nj, domain_group_ref, group_ref, ibegin, iend, jbegin  & 
     16    , jend, latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo, nvertex, standard_name  & 
     17    , type, zoom_ibegin, zoom_ibegin_loc, zoom_jbegin, zoom_jbegin_loc, zoom_ni, zoom_ni_loc, zoom_nj  & 
     18    , zoom_nj_loc ) 
    1819     
    1920    IMPLICIT NONE 
    2021      TYPE(txios(domaingroup))  :: domaingroup_hdl 
    2122      CHARACTER(LEN=*), INTENT(IN) ::domaingroup_id 
     23      REAL (KIND=8) , OPTIONAL, INTENT(IN) :: bounds_lat(:,:) 
     24      REAL (KIND=8) , OPTIONAL, INTENT(IN) :: bounds_lon(:,:) 
    2225      INTEGER  , OPTIONAL, INTENT(IN) :: data_dim 
    2326      INTEGER  , OPTIONAL, INTENT(IN) :: data_i_index(:) 
     
    4447      INTEGER  , OPTIONAL, INTENT(IN) :: nj 
    4548      INTEGER  , OPTIONAL, INTENT(IN) :: nj_glo 
     49      INTEGER  , OPTIONAL, INTENT(IN) :: nvertex 
    4650      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: standard_name 
     51      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: type 
    4752      INTEGER  , OPTIONAL, INTENT(IN) :: zoom_ibegin 
    4853      INTEGER  , OPTIONAL, INTENT(IN) :: zoom_ibegin_loc 
     
    5661      CALL xios(get_domaingroup_handle)(domaingroup_id,domaingroup_hdl) 
    5762      CALL xios(set_domaingroup_attr_hdl_)   & 
    58       ( domaingroup_hdl, data_dim, data_i_index, data_ibegin, data_j_index, data_jbegin, data_n_index  & 
    59       , data_ni, data_nj, domain_group_ref, group_ref, ibegin, iend, jbegin, jend, latvalue, long_name  & 
    60       , lonvalue, mask, name, ni, ni_glo, nj, nj_glo, standard_name, zoom_ibegin, zoom_ibegin_loc  & 
    61       , zoom_jbegin, zoom_jbegin_loc, zoom_ni, zoom_ni_loc, zoom_nj, zoom_nj_loc ) 
     63      ( domaingroup_hdl, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  & 
     64      , data_jbegin, data_n_index, data_ni, data_nj, domain_group_ref, group_ref, ibegin, iend, jbegin  & 
     65      , jend, latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo, nvertex, standard_name  & 
     66      , type, zoom_ibegin, zoom_ibegin_loc, zoom_jbegin, zoom_jbegin_loc, zoom_ni, zoom_ni_loc, zoom_nj  & 
     67      , zoom_nj_loc ) 
    6268     
    6369  END SUBROUTINE xios(set_domaingroup_attr) 
    6470   
    6571  SUBROUTINE xios(set_domaingroup_attr_hdl)  & 
    66     ( domaingroup_hdl, data_dim, data_i_index, data_ibegin, data_j_index, data_jbegin, data_n_index  & 
    67     , data_ni, data_nj, domain_group_ref, group_ref, ibegin, iend, jbegin, jend, latvalue, long_name  & 
    68     , lonvalue, mask, name, ni, ni_glo, nj, nj_glo, standard_name, zoom_ibegin, zoom_ibegin_loc  & 
    69     , zoom_jbegin, zoom_jbegin_loc, zoom_ni, zoom_ni_loc, zoom_nj, zoom_nj_loc ) 
     72    ( domaingroup_hdl, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  & 
     73    , data_jbegin, data_n_index, data_ni, data_nj, domain_group_ref, group_ref, ibegin, iend, jbegin  & 
     74    , jend, latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo, nvertex, standard_name  & 
     75    , type, zoom_ibegin, zoom_ibegin_loc, zoom_jbegin, zoom_jbegin_loc, zoom_ni, zoom_ni_loc, zoom_nj  & 
     76    , zoom_nj_loc ) 
    7077     
    7178    IMPLICIT NONE 
    7279      TYPE(txios(domaingroup)) , INTENT(IN) :: domaingroup_hdl 
     80      REAL (KIND=8) , OPTIONAL, INTENT(IN) :: bounds_lat(:,:) 
     81      REAL (KIND=8) , OPTIONAL, INTENT(IN) :: bounds_lon(:,:) 
    7382      INTEGER  , OPTIONAL, INTENT(IN) :: data_dim 
    7483      INTEGER  , OPTIONAL, INTENT(IN) :: data_i_index(:) 
     
    95104      INTEGER  , OPTIONAL, INTENT(IN) :: nj 
    96105      INTEGER  , OPTIONAL, INTENT(IN) :: nj_glo 
     106      INTEGER  , OPTIONAL, INTENT(IN) :: nvertex 
    97107      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: standard_name 
     108      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: type 
    98109      INTEGER  , OPTIONAL, INTENT(IN) :: zoom_ibegin 
    99110      INTEGER  , OPTIONAL, INTENT(IN) :: zoom_ibegin_loc 
     
    106117       
    107118      CALL xios(set_domaingroup_attr_hdl_)  & 
    108       ( domaingroup_hdl, data_dim, data_i_index, data_ibegin, data_j_index, data_jbegin, data_n_index  & 
    109       , data_ni, data_nj, domain_group_ref, group_ref, ibegin, iend, jbegin, jend, latvalue, long_name  & 
    110       , lonvalue, mask, name, ni, ni_glo, nj, nj_glo, standard_name, zoom_ibegin, zoom_ibegin_loc  & 
    111       , zoom_jbegin, zoom_jbegin_loc, zoom_ni, zoom_ni_loc, zoom_nj, zoom_nj_loc ) 
     119      ( domaingroup_hdl, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  & 
     120      , data_jbegin, data_n_index, data_ni, data_nj, domain_group_ref, group_ref, ibegin, iend, jbegin  & 
     121      , jend, latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo, nvertex, standard_name  & 
     122      , type, zoom_ibegin, zoom_ibegin_loc, zoom_jbegin, zoom_jbegin_loc, zoom_ni, zoom_ni_loc, zoom_nj  & 
     123      , zoom_nj_loc ) 
    112124     
    113125  END SUBROUTINE xios(set_domaingroup_attr_hdl) 
    114126   
    115127  SUBROUTINE xios(set_domaingroup_attr_hdl_)   & 
    116     ( domaingroup_hdl, data_dim_, data_i_index_, data_ibegin_, data_j_index_, data_jbegin_, data_n_index_  & 
    117     , data_ni_, data_nj_, domain_group_ref_, group_ref_, ibegin_, iend_, jbegin_, jend_, latvalue_  & 
    118     , long_name_, lonvalue_, mask_, name_, ni_, ni_glo_, nj_, nj_glo_, standard_name_, zoom_ibegin_  & 
    119     , zoom_ibegin_loc_, zoom_jbegin_, zoom_jbegin_loc_, zoom_ni_, zoom_ni_loc_, zoom_nj_, zoom_nj_loc_  & 
    120     ) 
     128    ( domaingroup_hdl, bounds_lat_, bounds_lon_, data_dim_, data_i_index_, data_ibegin_, data_j_index_  & 
     129    , data_jbegin_, data_n_index_, data_ni_, data_nj_, domain_group_ref_, group_ref_, ibegin_, iend_  & 
     130    , jbegin_, jend_, latvalue_, long_name_, lonvalue_, mask_, name_, ni_, ni_glo_, nj_, nj_glo_  & 
     131    , nvertex_, standard_name_, type_, zoom_ibegin_, zoom_ibegin_loc_, zoom_jbegin_, zoom_jbegin_loc_  & 
     132    , zoom_ni_, zoom_ni_loc_, zoom_nj_, zoom_nj_loc_ ) 
    121133     
    122134    IMPLICIT NONE 
    123135      TYPE(txios(domaingroup)) , INTENT(IN) :: domaingroup_hdl 
     136      REAL (KIND=8) , OPTIONAL, INTENT(IN) :: bounds_lat_(:,:) 
     137      REAL (KIND=8) , OPTIONAL, INTENT(IN) :: bounds_lon_(:,:) 
    124138      INTEGER  , OPTIONAL, INTENT(IN) :: data_dim_ 
    125139      INTEGER  , OPTIONAL, INTENT(IN) :: data_i_index_(:) 
     
    146160      INTEGER  , OPTIONAL, INTENT(IN) :: nj_ 
    147161      INTEGER  , OPTIONAL, INTENT(IN) :: nj_glo_ 
     162      INTEGER  , OPTIONAL, INTENT(IN) :: nvertex_ 
    148163      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: standard_name_ 
     164      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: type_ 
    149165      INTEGER  , OPTIONAL, INTENT(IN) :: zoom_ibegin_ 
    150166      INTEGER  , OPTIONAL, INTENT(IN) :: zoom_ibegin_loc_ 
     
    156172      INTEGER  , OPTIONAL, INTENT(IN) :: zoom_nj_loc_ 
    157173       
     174      IF (PRESENT(bounds_lat_)) THEN 
     175        CALL cxios_set_domaingroup_bounds_lat(domaingroup_hdl%daddr, bounds_lat_,size(bounds_lat_,1),size(bounds_lat_,2)) 
     176      ENDIF 
     177       
     178      IF (PRESENT(bounds_lon_)) THEN 
     179        CALL cxios_set_domaingroup_bounds_lon(domaingroup_hdl%daddr, bounds_lon_,size(bounds_lon_,1),size(bounds_lon_,2)) 
     180      ENDIF 
     181       
    158182      IF (PRESENT(data_dim_)) THEN 
    159183        CALL cxios_set_domaingroup_data_dim(domaingroup_hdl%daddr, data_dim_) 
     
    250274      ENDIF 
    251275       
     276      IF (PRESENT(nvertex_)) THEN 
     277        CALL cxios_set_domaingroup_nvertex(domaingroup_hdl%daddr, nvertex_) 
     278      ENDIF 
     279       
    252280      IF (PRESENT(standard_name_)) THEN 
    253281        CALL cxios_set_domaingroup_standard_name(domaingroup_hdl%daddr, standard_name_, len(standard_name_)) 
     282      ENDIF 
     283       
     284      IF (PRESENT(type_)) THEN 
     285        CALL cxios_set_domaingroup_type(domaingroup_hdl%daddr, type_, len(type_)) 
    254286      ENDIF 
    255287       
     
    291323   
    292324  SUBROUTINE xios(get_domaingroup_attr)  & 
    293     ( domaingroup_id, data_dim, data_i_index, data_ibegin, data_j_index, data_jbegin, data_n_index  & 
    294     , data_ni, data_nj, domain_group_ref, group_ref, ibegin, iend, jbegin, jend, latvalue, long_name  & 
    295     , lonvalue, mask, name, ni, ni_glo, nj, nj_glo, standard_name, zoom_ibegin, zoom_ibegin_loc  & 
    296     , zoom_jbegin, zoom_jbegin_loc, zoom_ni, zoom_ni_loc, zoom_nj, zoom_nj_loc ) 
     325    ( domaingroup_id, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  & 
     326    , data_jbegin, data_n_index, data_ni, data_nj, domain_group_ref, group_ref, ibegin, iend, jbegin  & 
     327    , jend, latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo, nvertex, standard_name  & 
     328    , type, zoom_ibegin, zoom_ibegin_loc, zoom_jbegin, zoom_jbegin_loc, zoom_ni, zoom_ni_loc, zoom_nj  & 
     329    , zoom_nj_loc ) 
    297330     
    298331    IMPLICIT NONE 
    299332      TYPE(txios(domaingroup))  :: domaingroup_hdl 
    300333      CHARACTER(LEN=*), INTENT(IN) ::domaingroup_id 
     334      REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: bounds_lat(:,:) 
     335      REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: bounds_lon(:,:) 
    301336      INTEGER  , OPTIONAL, INTENT(OUT) :: data_dim 
    302337      INTEGER  , OPTIONAL, INTENT(OUT) :: data_i_index(:) 
     
    323358      INTEGER  , OPTIONAL, INTENT(OUT) :: nj 
    324359      INTEGER  , OPTIONAL, INTENT(OUT) :: nj_glo 
     360      INTEGER  , OPTIONAL, INTENT(OUT) :: nvertex 
    325361      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: standard_name 
     362      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: type 
    326363      INTEGER  , OPTIONAL, INTENT(OUT) :: zoom_ibegin 
    327364      INTEGER  , OPTIONAL, INTENT(OUT) :: zoom_ibegin_loc 
     
    335372      CALL xios(get_domaingroup_handle)(domaingroup_id,domaingroup_hdl) 
    336373      CALL xios(get_domaingroup_attr_hdl_)   & 
    337       ( domaingroup_hdl, data_dim, data_i_index, data_ibegin, data_j_index, data_jbegin, data_n_index  & 
    338       , data_ni, data_nj, domain_group_ref, group_ref, ibegin, iend, jbegin, jend, latvalue, long_name  & 
    339       , lonvalue, mask, name, ni, ni_glo, nj, nj_glo, standard_name, zoom_ibegin, zoom_ibegin_loc  & 
    340       , zoom_jbegin, zoom_jbegin_loc, zoom_ni, zoom_ni_loc, zoom_nj, zoom_nj_loc ) 
     374      ( domaingroup_hdl, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  & 
     375      , data_jbegin, data_n_index, data_ni, data_nj, domain_group_ref, group_ref, ibegin, iend, jbegin  & 
     376      , jend, latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo, nvertex, standard_name  & 
     377      , type, zoom_ibegin, zoom_ibegin_loc, zoom_jbegin, zoom_jbegin_loc, zoom_ni, zoom_ni_loc, zoom_nj  & 
     378      , zoom_nj_loc ) 
    341379     
    342380  END SUBROUTINE xios(get_domaingroup_attr) 
    343381   
    344382  SUBROUTINE xios(get_domaingroup_attr_hdl)  & 
    345     ( domaingroup_hdl, data_dim, data_i_index, data_ibegin, data_j_index, data_jbegin, data_n_index  & 
    346     , data_ni, data_nj, domain_group_ref, group_ref, ibegin, iend, jbegin, jend, latvalue, long_name  & 
    347     , lonvalue, mask, name, ni, ni_glo, nj, nj_glo, standard_name, zoom_ibegin, zoom_ibegin_loc  & 
    348     , zoom_jbegin, zoom_jbegin_loc, zoom_ni, zoom_ni_loc, zoom_nj, zoom_nj_loc ) 
     383    ( domaingroup_hdl, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  & 
     384    , data_jbegin, data_n_index, data_ni, data_nj, domain_group_ref, group_ref, ibegin, iend, jbegin  & 
     385    , jend, latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo, nvertex, standard_name  & 
     386    , type, zoom_ibegin, zoom_ibegin_loc, zoom_jbegin, zoom_jbegin_loc, zoom_ni, zoom_ni_loc, zoom_nj  & 
     387    , zoom_nj_loc ) 
    349388     
    350389    IMPLICIT NONE 
    351390      TYPE(txios(domaingroup)) , INTENT(IN) :: domaingroup_hdl 
     391      REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: bounds_lat(:,:) 
     392      REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: bounds_lon(:,:) 
    352393      INTEGER  , OPTIONAL, INTENT(OUT) :: data_dim 
    353394      INTEGER  , OPTIONAL, INTENT(OUT) :: data_i_index(:) 
     
    374415      INTEGER  , OPTIONAL, INTENT(OUT) :: nj 
    375416      INTEGER  , OPTIONAL, INTENT(OUT) :: nj_glo 
     417      INTEGER  , OPTIONAL, INTENT(OUT) :: nvertex 
    376418      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: standard_name 
     419      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: type 
    377420      INTEGER  , OPTIONAL, INTENT(OUT) :: zoom_ibegin 
    378421      INTEGER  , OPTIONAL, INTENT(OUT) :: zoom_ibegin_loc 
     
    385428       
    386429      CALL xios(get_domaingroup_attr_hdl_)  & 
    387       ( domaingroup_hdl, data_dim, data_i_index, data_ibegin, data_j_index, data_jbegin, data_n_index  & 
    388       , data_ni, data_nj, domain_group_ref, group_ref, ibegin, iend, jbegin, jend, latvalue, long_name  & 
    389       , lonvalue, mask, name, ni, ni_glo, nj, nj_glo, standard_name, zoom_ibegin, zoom_ibegin_loc  & 
    390       , zoom_jbegin, zoom_jbegin_loc, zoom_ni, zoom_ni_loc, zoom_nj, zoom_nj_loc ) 
     430      ( domaingroup_hdl, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  & 
     431      , data_jbegin, data_n_index, data_ni, data_nj, domain_group_ref, group_ref, ibegin, iend, jbegin  & 
     432      , jend, latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo, nvertex, standard_name  & 
     433      , type, zoom_ibegin, zoom_ibegin_loc, zoom_jbegin, zoom_jbegin_loc, zoom_ni, zoom_ni_loc, zoom_nj  & 
     434      , zoom_nj_loc ) 
    391435     
    392436  END SUBROUTINE xios(get_domaingroup_attr_hdl) 
    393437   
    394438  SUBROUTINE xios(get_domaingroup_attr_hdl_)   & 
    395     ( domaingroup_hdl, data_dim_, data_i_index_, data_ibegin_, data_j_index_, data_jbegin_, data_n_index_  & 
    396     , data_ni_, data_nj_, domain_group_ref_, group_ref_, ibegin_, iend_, jbegin_, jend_, latvalue_  & 
    397     , long_name_, lonvalue_, mask_, name_, ni_, ni_glo_, nj_, nj_glo_, standard_name_, zoom_ibegin_  & 
    398     , zoom_ibegin_loc_, zoom_jbegin_, zoom_jbegin_loc_, zoom_ni_, zoom_ni_loc_, zoom_nj_, zoom_nj_loc_  & 
    399     ) 
     439    ( domaingroup_hdl, bounds_lat_, bounds_lon_, data_dim_, data_i_index_, data_ibegin_, data_j_index_  & 
     440    , data_jbegin_, data_n_index_, data_ni_, data_nj_, domain_group_ref_, group_ref_, ibegin_, iend_  & 
     441    , jbegin_, jend_, latvalue_, long_name_, lonvalue_, mask_, name_, ni_, ni_glo_, nj_, nj_glo_  & 
     442    , nvertex_, standard_name_, type_, zoom_ibegin_, zoom_ibegin_loc_, zoom_jbegin_, zoom_jbegin_loc_  & 
     443    , zoom_ni_, zoom_ni_loc_, zoom_nj_, zoom_nj_loc_ ) 
    400444     
    401445    IMPLICIT NONE 
    402446      TYPE(txios(domaingroup)) , INTENT(IN) :: domaingroup_hdl 
     447      REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: bounds_lat_(:,:) 
     448      REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: bounds_lon_(:,:) 
    403449      INTEGER  , OPTIONAL, INTENT(OUT) :: data_dim_ 
    404450      INTEGER  , OPTIONAL, INTENT(OUT) :: data_i_index_(:) 
     
    425471      INTEGER  , OPTIONAL, INTENT(OUT) :: nj_ 
    426472      INTEGER  , OPTIONAL, INTENT(OUT) :: nj_glo_ 
     473      INTEGER  , OPTIONAL, INTENT(OUT) :: nvertex_ 
    427474      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: standard_name_ 
     475      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: type_ 
    428476      INTEGER  , OPTIONAL, INTENT(OUT) :: zoom_ibegin_ 
    429477      INTEGER  , OPTIONAL, INTENT(OUT) :: zoom_ibegin_loc_ 
     
    435483      INTEGER  , OPTIONAL, INTENT(OUT) :: zoom_nj_loc_ 
    436484       
     485      IF (PRESENT(bounds_lat_)) THEN 
     486        CALL cxios_get_domaingroup_bounds_lat(domaingroup_hdl%daddr, bounds_lat_,size(bounds_lat_,1),size(bounds_lat_,2)) 
     487      ENDIF 
     488       
     489      IF (PRESENT(bounds_lon_)) THEN 
     490        CALL cxios_get_domaingroup_bounds_lon(domaingroup_hdl%daddr, bounds_lon_,size(bounds_lon_,1),size(bounds_lon_,2)) 
     491      ENDIF 
     492       
    437493      IF (PRESENT(data_dim_)) THEN 
    438494        CALL cxios_get_domaingroup_data_dim(domaingroup_hdl%daddr, data_dim_) 
     
    529585      ENDIF 
    530586       
     587      IF (PRESENT(nvertex_)) THEN 
     588        CALL cxios_get_domaingroup_nvertex(domaingroup_hdl%daddr, nvertex_) 
     589      ENDIF 
     590       
    531591      IF (PRESENT(standard_name_)) THEN 
    532592        CALL cxios_get_domaingroup_standard_name(domaingroup_hdl%daddr, standard_name_, len(standard_name_)) 
     593      ENDIF 
     594       
     595      IF (PRESENT(type_)) THEN 
     596        CALL cxios_get_domaingroup_type(domaingroup_hdl%daddr, type_, len(type_)) 
    533597      ENDIF 
    534598       
     
    570634   
    571635  SUBROUTINE xios(is_defined_domaingroup_attr)  & 
    572     ( domaingroup_id, data_dim, data_i_index, data_ibegin, data_j_index, data_jbegin, data_n_index  & 
    573     , data_ni, data_nj, domain_group_ref, group_ref, ibegin, iend, jbegin, jend, latvalue, long_name  & 
    574     , lonvalue, mask, name, ni, ni_glo, nj, nj_glo, standard_name, zoom_ibegin, zoom_ibegin_loc  & 
    575     , zoom_jbegin, zoom_jbegin_loc, zoom_ni, zoom_ni_loc, zoom_nj, zoom_nj_loc ) 
     636    ( domaingroup_id, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  & 
     637    , data_jbegin, data_n_index, data_ni, data_nj, domain_group_ref, group_ref, ibegin, iend, jbegin  & 
     638    , jend, latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo, nvertex, standard_name  & 
     639    , type, zoom_ibegin, zoom_ibegin_loc, zoom_jbegin, zoom_jbegin_loc, zoom_ni, zoom_ni_loc, zoom_nj  & 
     640    , zoom_nj_loc ) 
    576641     
    577642    IMPLICIT NONE 
    578643      TYPE(txios(domaingroup))  :: domaingroup_hdl 
    579644      CHARACTER(LEN=*), INTENT(IN) ::domaingroup_id 
     645      LOGICAL, OPTIONAL, INTENT(OUT) :: bounds_lat 
     646      LOGICAL(KIND=C_BOOL) :: bounds_lat_tmp 
     647      LOGICAL, OPTIONAL, INTENT(OUT) :: bounds_lon 
     648      LOGICAL(KIND=C_BOOL) :: bounds_lon_tmp 
    580649      LOGICAL, OPTIONAL, INTENT(OUT) :: data_dim 
    581650      LOGICAL(KIND=C_BOOL) :: data_dim_tmp 
     
    624693      LOGICAL, OPTIONAL, INTENT(OUT) :: nj_glo 
    625694      LOGICAL(KIND=C_BOOL) :: nj_glo_tmp 
     695      LOGICAL, OPTIONAL, INTENT(OUT) :: nvertex 
     696      LOGICAL(KIND=C_BOOL) :: nvertex_tmp 
    626697      LOGICAL, OPTIONAL, INTENT(OUT) :: standard_name 
    627698      LOGICAL(KIND=C_BOOL) :: standard_name_tmp 
     699      LOGICAL, OPTIONAL, INTENT(OUT) :: type 
     700      LOGICAL(KIND=C_BOOL) :: type_tmp 
    628701      LOGICAL, OPTIONAL, INTENT(OUT) :: zoom_ibegin 
    629702      LOGICAL(KIND=C_BOOL) :: zoom_ibegin_tmp 
     
    645718      CALL xios(get_domaingroup_handle)(domaingroup_id,domaingroup_hdl) 
    646719      CALL xios(is_defined_domaingroup_attr_hdl_)   & 
    647       ( domaingroup_hdl, data_dim, data_i_index, data_ibegin, data_j_index, data_jbegin, data_n_index  & 
    648       , data_ni, data_nj, domain_group_ref, group_ref, ibegin, iend, jbegin, jend, latvalue, long_name  & 
    649       , lonvalue, mask, name, ni, ni_glo, nj, nj_glo, standard_name, zoom_ibegin, zoom_ibegin_loc  & 
    650       , zoom_jbegin, zoom_jbegin_loc, zoom_ni, zoom_ni_loc, zoom_nj, zoom_nj_loc ) 
     720      ( domaingroup_hdl, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  & 
     721      , data_jbegin, data_n_index, data_ni, data_nj, domain_group_ref, group_ref, ibegin, iend, jbegin  & 
     722      , jend, latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo, nvertex, standard_name  & 
     723      , type, zoom_ibegin, zoom_ibegin_loc, zoom_jbegin, zoom_jbegin_loc, zoom_ni, zoom_ni_loc, zoom_nj  & 
     724      , zoom_nj_loc ) 
    651725     
    652726  END SUBROUTINE xios(is_defined_domaingroup_attr) 
    653727   
    654728  SUBROUTINE xios(is_defined_domaingroup_attr_hdl)  & 
    655     ( domaingroup_hdl, data_dim, data_i_index, data_ibegin, data_j_index, data_jbegin, data_n_index  & 
    656     , data_ni, data_nj, domain_group_ref, group_ref, ibegin, iend, jbegin, jend, latvalue, long_name  & 
    657     , lonvalue, mask, name, ni, ni_glo, nj, nj_glo, standard_name, zoom_ibegin, zoom_ibegin_loc  & 
    658     , zoom_jbegin, zoom_jbegin_loc, zoom_ni, zoom_ni_loc, zoom_nj, zoom_nj_loc ) 
     729    ( domaingroup_hdl, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  & 
     730    , data_jbegin, data_n_index, data_ni, data_nj, domain_group_ref, group_ref, ibegin, iend, jbegin  & 
     731    , jend, latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo, nvertex, standard_name  & 
     732    , type, zoom_ibegin, zoom_ibegin_loc, zoom_jbegin, zoom_jbegin_loc, zoom_ni, zoom_ni_loc, zoom_nj  & 
     733    , zoom_nj_loc ) 
    659734     
    660735    IMPLICIT NONE 
    661736      TYPE(txios(domaingroup)) , INTENT(IN) :: domaingroup_hdl 
     737      LOGICAL, OPTIONAL, INTENT(OUT) :: bounds_lat 
     738      LOGICAL(KIND=C_BOOL) :: bounds_lat_tmp 
     739      LOGICAL, OPTIONAL, INTENT(OUT) :: bounds_lon 
     740      LOGICAL(KIND=C_BOOL) :: bounds_lon_tmp 
    662741      LOGICAL, OPTIONAL, INTENT(OUT) :: data_dim 
    663742      LOGICAL(KIND=C_BOOL) :: data_dim_tmp 
     
    706785      LOGICAL, OPTIONAL, INTENT(OUT) :: nj_glo 
    707786      LOGICAL(KIND=C_BOOL) :: nj_glo_tmp 
     787      LOGICAL, OPTIONAL, INTENT(OUT) :: nvertex 
     788      LOGICAL(KIND=C_BOOL) :: nvertex_tmp 
    708789      LOGICAL, OPTIONAL, INTENT(OUT) :: standard_name 
    709790      LOGICAL(KIND=C_BOOL) :: standard_name_tmp 
     791      LOGICAL, OPTIONAL, INTENT(OUT) :: type 
     792      LOGICAL(KIND=C_BOOL) :: type_tmp 
    710793      LOGICAL, OPTIONAL, INTENT(OUT) :: zoom_ibegin 
    711794      LOGICAL(KIND=C_BOOL) :: zoom_ibegin_tmp 
     
    726809       
    727810      CALL xios(is_defined_domaingroup_attr_hdl_)  & 
    728       ( domaingroup_hdl, data_dim, data_i_index, data_ibegin, data_j_index, data_jbegin, data_n_index  & 
    729       , data_ni, data_nj, domain_group_ref, group_ref, ibegin, iend, jbegin, jend, latvalue, long_name  & 
    730       , lonvalue, mask, name, ni, ni_glo, nj, nj_glo, standard_name, zoom_ibegin, zoom_ibegin_loc  & 
    731       , zoom_jbegin, zoom_jbegin_loc, zoom_ni, zoom_ni_loc, zoom_nj, zoom_nj_loc ) 
     811      ( domaingroup_hdl, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  & 
     812      , data_jbegin, data_n_index, data_ni, data_nj, domain_group_ref, group_ref, ibegin, iend, jbegin  & 
     813      , jend, latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo, nvertex, standard_name  & 
     814      , type, zoom_ibegin, zoom_ibegin_loc, zoom_jbegin, zoom_jbegin_loc, zoom_ni, zoom_ni_loc, zoom_nj  & 
     815      , zoom_nj_loc ) 
    732816     
    733817  END SUBROUTINE xios(is_defined_domaingroup_attr_hdl) 
    734818   
    735819  SUBROUTINE xios(is_defined_domaingroup_attr_hdl_)   & 
    736     ( domaingroup_hdl, data_dim_, data_i_index_, data_ibegin_, data_j_index_, data_jbegin_, data_n_index_  & 
    737     , data_ni_, data_nj_, domain_group_ref_, group_ref_, ibegin_, iend_, jbegin_, jend_, latvalue_  & 
    738     , long_name_, lonvalue_, mask_, name_, ni_, ni_glo_, nj_, nj_glo_, standard_name_, zoom_ibegin_  & 
    739     , zoom_ibegin_loc_, zoom_jbegin_, zoom_jbegin_loc_, zoom_ni_, zoom_ni_loc_, zoom_nj_, zoom_nj_loc_  & 
    740     ) 
     820    ( domaingroup_hdl, bounds_lat_, bounds_lon_, data_dim_, data_i_index_, data_ibegin_, data_j_index_  & 
     821    , data_jbegin_, data_n_index_, data_ni_, data_nj_, domain_group_ref_, group_ref_, ibegin_, iend_  & 
     822    , jbegin_, jend_, latvalue_, long_name_, lonvalue_, mask_, name_, ni_, ni_glo_, nj_, nj_glo_  & 
     823    , nvertex_, standard_name_, type_, zoom_ibegin_, zoom_ibegin_loc_, zoom_jbegin_, zoom_jbegin_loc_  & 
     824    , zoom_ni_, zoom_ni_loc_, zoom_nj_, zoom_nj_loc_ ) 
    741825     
    742826    IMPLICIT NONE 
    743827      TYPE(txios(domaingroup)) , INTENT(IN) :: domaingroup_hdl 
     828      LOGICAL, OPTIONAL, INTENT(OUT) :: bounds_lat_ 
     829      LOGICAL(KIND=C_BOOL) :: bounds_lat__tmp 
     830      LOGICAL, OPTIONAL, INTENT(OUT) :: bounds_lon_ 
     831      LOGICAL(KIND=C_BOOL) :: bounds_lon__tmp 
    744832      LOGICAL, OPTIONAL, INTENT(OUT) :: data_dim_ 
    745833      LOGICAL(KIND=C_BOOL) :: data_dim__tmp 
     
    788876      LOGICAL, OPTIONAL, INTENT(OUT) :: nj_glo_ 
    789877      LOGICAL(KIND=C_BOOL) :: nj_glo__tmp 
     878      LOGICAL, OPTIONAL, INTENT(OUT) :: nvertex_ 
     879      LOGICAL(KIND=C_BOOL) :: nvertex__tmp 
    790880      LOGICAL, OPTIONAL, INTENT(OUT) :: standard_name_ 
    791881      LOGICAL(KIND=C_BOOL) :: standard_name__tmp 
     882      LOGICAL, OPTIONAL, INTENT(OUT) :: type_ 
     883      LOGICAL(KIND=C_BOOL) :: type__tmp 
    792884      LOGICAL, OPTIONAL, INTENT(OUT) :: zoom_ibegin_ 
    793885      LOGICAL(KIND=C_BOOL) :: zoom_ibegin__tmp 
     
    807899      LOGICAL(KIND=C_BOOL) :: zoom_nj_loc__tmp 
    808900       
     901      IF (PRESENT(bounds_lat_)) THEN 
     902        bounds_lat__tmp=cxios_is_defined_domaingroup_bounds_lat(domaingroup_hdl%daddr) 
     903        bounds_lat_=bounds_lat__tmp 
     904      ENDIF 
     905       
     906      IF (PRESENT(bounds_lon_)) THEN 
     907        bounds_lon__tmp=cxios_is_defined_domaingroup_bounds_lon(domaingroup_hdl%daddr) 
     908        bounds_lon_=bounds_lon__tmp 
     909      ENDIF 
     910       
    809911      IF (PRESENT(data_dim_)) THEN 
    810912        data_dim__tmp=cxios_is_defined_domaingroup_data_dim(domaingroup_hdl%daddr) 
     
    9221024      ENDIF 
    9231025       
     1026      IF (PRESENT(nvertex_)) THEN 
     1027        nvertex__tmp=cxios_is_defined_domaingroup_nvertex(domaingroup_hdl%daddr) 
     1028        nvertex_=nvertex__tmp 
     1029      ENDIF 
     1030       
    9241031      IF (PRESENT(standard_name_)) THEN 
    9251032        standard_name__tmp=cxios_is_defined_domaingroup_standard_name(domaingroup_hdl%daddr) 
     
    9271034      ENDIF 
    9281035       
     1036      IF (PRESENT(type_)) THEN 
     1037        type__tmp=cxios_is_defined_domaingroup_type(domaingroup_hdl%daddr) 
     1038        type_=type__tmp 
     1039      ENDIF 
     1040       
    9291041      IF (PRESENT(zoom_ibegin_)) THEN 
    9301042        zoom_ibegin__tmp=cxios_is_defined_domaingroup_zoom_ibegin(domaingroup_hdl%daddr) 
  • XIOS/trunk/src/node/domain.cpp

    r435 r449  
    2222      : CObjectTemplate<CDomain>(), CDomainAttributes() 
    2323      , isChecked(false),  relFiles() 
    24       , ibegin_sub(), iend_sub(), jbegin_sub(), jend_sub() 
    25       , ibegin_zoom_sub(), jbegin_zoom_sub(), ni_zoom_sub(), nj_zoom_sub() 
    26       , lonvalue_sub(), latvalue_sub() 
    2724   { /* Ne rien faire de plus */ } 
    2825 
     
    3027      : CObjectTemplate<CDomain>(id), CDomainAttributes() 
    3128      , isChecked(false), relFiles() 
    32       , ibegin_sub(), iend_sub(), jbegin_sub(), jend_sub() 
    33       , ibegin_zoom_sub(), jbegin_zoom_sub(),ni_zoom_sub(), nj_zoom_sub() 
    34       , lonvalue_sub(), latvalue_sub() 
    35    { /* Ne rien faire de plus */ } 
     29         { /* Ne rien faire de plus */ } 
    3630 
    3731   CDomain::~CDomain(void) 
    3832   {  
    39      vector<CArray<double,1>* >::iterator it; 
    40      for(it=lonvalue_sub.begin();it<lonvalue_sub.end();it++) delete *it; 
    41      for(it=latvalue_sub.begin();it<latvalue_sub.end();it++) delete *it; 
    4233   } 
    4334 
     
    4637   const std::set<StdString> & CDomain::getRelFiles(void) const 
    4738   { 
    48       return (this->relFiles); 
     39      return (this->relFiles);  
    4940   } 
    5041 
     
    7970   } 
    8071 
    81    //---------------------------------------------------------------- 
    82 /* 
    83    void CDomain::fromBinary(StdIStream & is) 
    84    { 
    85       SuperClass::fromBinary(is); 
    86        
    87       if ( !this->ibegin.isEmpty()   && 
    88            !this->jbegin.isEmpty()   && 
    89            !this->iend.isEmpty()     && 
    90            !this->jend.isEmpty()     && 
    91            !this->latvalue.isEmpty() && 
    92            !this->lonvalue.isEmpty()) 
    93       { 
    94        
    95          this->ibegin_sub.push_back(this->ibegin.getValue()); 
    96          this->jbegin_sub.push_back(this->jbegin.getValue()); 
    97          this->iend_sub.push_back(this->iend.getValue()); 
    98          this->jend_sub.push_back(this->jend.getValue());  
    99           
    100          this->ibegin_zoom_sub.push_back(this->zoom_ibegin_loc.getValue()); 
    101          this->jbegin_zoom_sub.push_back(this->zoom_jbegin_loc.getValue()); 
    102          this->ni_zoom_sub.push_back(this->zoom_ni_loc.getValue()); 
    103          this->nj_zoom_sub.push_back(this->zoom_nj_loc.getValue()); 
    104        
    105          this->latvalue_sub.push_back(this->latvalue.getValue()); 
    106          this->lonvalue_sub.push_back(this->lonvalue.getValue()); 
    107       } 
    108        
    109 #define CLEAR_ATT(name_)\ 
    110       SuperClassAttribute::operator[](#name_)->reset() 
    111  
    112          CLEAR_ATT(mask); 
    113          CLEAR_ATT(data_n_index); 
    114          CLEAR_ATT(data_i_index); 
    115          CLEAR_ATT(data_j_index); 
    116           
    117          CLEAR_ATT(data_ni); 
    118          CLEAR_ATT(data_nj); 
    119          CLEAR_ATT(data_ibegin); 
    120          CLEAR_ATT(data_jbegin); 
    121           
    122          CLEAR_ATT(ni); 
    123          CLEAR_ATT(nj); 
    124           
    125 #undef CLEAR_ATT 
    126  
    127       if ( !this->ibegin.isEmpty()   && 
    128            !this->jbegin.isEmpty()   && 
    129            !this->iend.isEmpty()     && 
    130            !this->jend.isEmpty()     && 
    131            !this->latvalue.isEmpty() && 
    132            !this->lonvalue.isEmpty()) 
    133       { 
    134  
    135          this->ibegin.setValue(*std::min_element(this->ibegin_sub.begin(),this->ibegin_sub.end())); 
    136          this->jbegin.setValue(*std::min_element(this->jbegin_sub.begin(),this->jbegin_sub.end())); 
    137          this->iend.setValue(*std::max_element(this->iend_sub.begin(),this->iend_sub.end())); 
    138          this->jend.setValue(*std::max_element(this->jend_sub.begin(),this->jend_sub.end())); 
    139       } 
    140    } 
    141 */ 
    14272   //---------------------------------------------------------------- 
    14373 
     
    15080   void CDomain::checkGlobalDomain(void) 
    15181   { 
    152       if ((ni_glo.isEmpty() || ni_glo.getValue() <= 0 ) || 
     82      if (!type.isEmpty() && type==type_attr::unstructured) 
     83      { 
     84         if (ni_glo.isEmpty() || ni_glo <= 0 ) 
     85         { 
     86            ERROR("CDomain::checkAttributes(void)", 
     87               << "[ Id = " << this->getId() << " ] " 
     88               << "The global domain is badly defined," 
     89               << " check the \'ni_glo\'  value !")  
     90         } 
     91         nj_glo=ni_glo ; 
     92         ni_glo=1 ; 
     93         if (!ni.isEmpty()) nj=ni ; 
     94         if (!ibegin.isEmpty()) jbegin=ibegin ; 
     95         if (!iend.isEmpty()) jend=iend ; 
     96         ni=1 ; 
     97         ibegin=1 ; 
     98         iend=1 ; 
     99      } 
     100      else if ((ni_glo.isEmpty() || ni_glo.getValue() <= 0 ) || 
    153101          (nj_glo.isEmpty() || nj_glo.getValue() <= 0 )) 
    154102      { 
     
    173121         ni.setValue(iend.getValue() - ibegin.getValue() + 1) ; 
    174122 
    175       else if (!ibegin.isEmpty() && !iend.isEmpty() && 
    176                !ni.isEmpty() && (iend.getValue() != ibegin.getValue() + ni.getValue() - 1)) 
    177       { 
    178          ERROR("CDomain::checkAttributes(void)", 
    179                << "The domain si wrong defined," 
    180                << " iend is different of (ibegin + ni - 1) !") ; 
     123      else if (!ibegin.isEmpty() && !iend.isEmpty() && !ni.isEmpty() ) 
     124      { 
     125         if (iend.getValue() != ibegin.getValue() + ni.getValue() - 1) 
     126           ERROR("CDomain::checkAttributes(void)", 
     127                 << "The domain si wrong defined," 
     128                 << " iend is different of (ibegin + ni - 1) !") ; 
    181129      } 
    182130      else 
     
    190138      if (ni.getValue() < 0 || ibegin.getValue() > iend.getValue() || 
    191139          ibegin.getValue() < 1 || iend.getValue() > ni_glo.getValue()) 
     140          { 
     141                  cout<<ni_glo<<"  "<<ni<<"  "<<ibegin<<"  "<<iend<<endl; 
     142 
    192143         ERROR("CDomain::checkAttributes(void)", 
    193144               << "[ Id = " << this->getId() << " ] " 
    194145               << "Local domain is wrong defined," 
    195146               << " Check the value : ni, ni_glo, ibegin, iend") ; 
    196  
     147        } 
    197148   } 
    198149 
     
    210161         nj.setValue(jend.getValue() - jbegin.getValue() + 1) ; 
    211162 
    212       else if (!jbegin.isEmpty() && !jend.isEmpty() && !nj.isEmpty() && 
    213                (jend.getValue() != jbegin.getValue() + nj.getValue() - 1)) 
    214       { 
    215          ERROR("CDomain::checkAttributes(void)", 
    216                << "The domain is wrong defined," 
    217                << " iend is different of (jbegin + nj - 1) !") ; 
     163      else if (!jbegin.isEmpty() && !jend.isEmpty() && !nj.isEmpty() ) 
     164      { 
     165          if  (jend.getValue() != jbegin.getValue() + nj.getValue() - 1) 
     166             ERROR("CDomain::checkAttributes(void)", 
     167                 << "The domain is wrong defined," 
     168                 << " iend is different of (jbegin + nj - 1) !") ; 
    218169      } 
    219170      else 
     
    229180               << "Domain is wrong defined," 
    230181               << " Check the values : nj, nj_glo, jbegin, jend") ; 
     182                
     183     ibegin_client=ibegin ; iend_client=iend ; ni_client=ni ; 
     184     jbegin_client=jbegin ; jend_client=jend ; nj_client=nj ; 
    231185   } 
    232186 
     
    416370      CArray<double,1> lonvalue_temp(ni*nj) ; 
    417371      CArray<double,1> latvalue_temp(ni*nj) ; 
    418        
    419       if ( lonvalue.numElements() == ni*nj && latvalue.numElements() == ni*nj ) isCurvilinear=true ; 
    420       else if ( lonvalue.numElements() == ni && latvalue.numElements() == nj ) isCurvilinear=false ; 
    421       else ERROR("void CDomain::completeLonLatClient(void)",<<"the grid is nor curvilinear, nor cartesian, because the size of longitude and latitude array is not coherent with the domain size"<<endl 
    422                                                             <<"lonvalue size = " << lonvalue.numElements() << "different of ni or ni*nj"<<endl 
    423                                                             <<"latvalue size = " << latvalue.numElements() << "different of nj or ni*nj" ) ; 
    424       if (isCurvilinear) 
     372      CArray<double,2> bounds_lon_temp(nvertex,ni*nj) ; 
     373      CArray<double,2> bounds_lat_temp(nvertex,ni*nj) ; 
     374       
     375      if (type.isEmpty()) 
     376      { 
     377        if ( lonvalue.numElements() == ni*nj && latvalue.numElements() == ni*nj )  
     378        { 
     379          type.setValue(type_attr::curvilinear) ; 
     380          isCurvilinear=true ; 
     381        } 
     382        else if ( lonvalue.numElements() == ni && latvalue.numElements() == nj )  
     383        { 
     384          type.setValue(type_attr::regular) ; 
     385          isCurvilinear=false ; 
     386        } 
     387        else ERROR("void CDomain::completeLonLatClient(void)",<<"the grid is nor curvilinear, nor cartesian, because the size of longitude and latitude array is not coherent with the domain size"<<endl 
     388                                                              <<"lonvalue size = " << lonvalue.numElements() << "different of ni or ni*nj"<<endl 
     389                                                              <<"latvalue size = " << latvalue.numElements() << "different of nj or ni*nj" ) ; 
     390      } 
     391      if (type==type_attr::curvilinear || type==type_attr::unstructured) 
    425392      { 
    426393        lonvalue_temp=lonvalue ; 
    427394        latvalue_temp=latvalue ; 
     395        if (hasBounds) bounds_lon_temp=bounds_lon ; 
     396        if (hasBounds) bounds_lat_temp=bounds_lat ; 
    428397      } 
    429398      else 
     
    435404            lonvalue_temp(k)=lonvalue(i) ; 
    436405            latvalue_temp(k)=latvalue(j) ; 
     406            if (hasBounds) 
     407            { 
     408              for(int n=0;n<nvertex;n++)  
     409              { 
     410                bounds_lon_temp(n,k)=bounds_lon(n,i) ; 
     411                bounds_lat_temp(n,k)=bounds_lat(n,j) ; 
     412              } 
     413            } 
    437414          } 
    438415      } 
    439416          
    440          
    441       const int zoom_ibegin_client  = zoom_ibegin_loc.getValue(), 
    442                 zoom_jbegin_client  = zoom_jbegin_loc.getValue(), 
    443                 zoom_ni_client      = zoom_ni_loc.getValue(), 
    444                 zoom_nj_client      = zoom_nj_loc.getValue(); 
    445                  
    446417      StdSize dm = zoom_ni_client * zoom_nj_client; 
    447418 
     
    453424        for (int j = 0; j < zoom_nj_client; j++) 
    454425        { 
    455           lonvalue(i + j * zoom_ni_client) = lonvalue_temp( (i + zoom_ibegin_client -1) + (j + zoom_jbegin_client -1)*ni.getValue() );  
    456           latvalue(i + j * zoom_ni_client) = latvalue_temp( (i + zoom_ibegin_client -1)+(j + zoom_jbegin_client -1)*ni.getValue() ); 
     426//          lonvalue(i + j * zoom_ni_client) = lonvalue_temp( (i + zoom_ibegin_client -1) + (j + zoom_jbegin_client -1)*ni );  
     427//          latvalue(i + j * zoom_ni_client) = latvalue_temp( (i + zoom_ibegin_client -1)+(j + zoom_jbegin_client -1)*ni ); 
     428          lonvalue(i + j * zoom_ni_client) = lonvalue_temp( (i + zoom_ibegin_client-ibegin) + (j + zoom_jbegin_client -jbegin)*ni );  
     429          latvalue(i + j * zoom_ni_client) = latvalue_temp( (i + zoom_ibegin_client - ibegin)+(j + zoom_jbegin_client - jbegin)*ni ); 
     430          if (hasBounds) 
     431          { 
     432            for(int n=0;n<nvertex;n++)  
     433            { 
     434//              bounds_lon(n,i + j * zoom_ni_client) = bounds_lon_temp( n, (i + zoom_ibegin_client -1) + (j + zoom_jbegin_client -1)*ni );  
     435//              bounds_lat(n,i + j * zoom_ni_client) = bounds_lat_temp( n, (i + zoom_ibegin_client -1)+(j + zoom_jbegin_client -1)*ni ); 
     436              bounds_lon(n,i + j * zoom_ni_client) = bounds_lon_temp( n, (i + zoom_ibegin_client - ibegin) + (j + zoom_jbegin_client -jbegin)*ni );  
     437              bounds_lat(n,i + j * zoom_ni_client) = bounds_lat_temp( n, (i + zoom_ibegin_client - ibegin)+(j + zoom_jbegin_client -jbegin)*ni ); 
     438            } 
     439          } 
    457440        } 
    458441      } 
    459    } 
     442    } 
    460443  
    461    //---------------------------------------------------------------- 
    462        
    463    void CDomain::completeLonLatServer(void) 
    464    { 
    465       CArray<double,1> lonvalue_temp ; 
    466       CArray<double,1> latvalue_temp ; 
    467        
    468       const int ibegin_serv     = ibegin.getValue(), 
    469                 jbegin_serv     = jbegin.getValue(), 
    470                 zoom_ni_serv    = zoom_ni_loc.getValue(), 
    471                 zoom_nj_serv    = zoom_nj_loc.getValue(), 
    472                 ibegin_zoom_srv = zoom_ibegin_loc.getValue(), 
    473                 jbegin_zoom_srv = zoom_jbegin_loc.getValue(); 
    474                        
    475                         
    476       if (this->data_dim.getValue() == 2) 
    477       { 
    478          StdSize dm = zoom_ni_serv * zoom_nj_serv;       
    479           
    480          lonvalue_temp.resize(dm); 
    481          latvalue_temp.resize(dm); 
    482           
    483          for (StdSize k = 0; k < lonvalue_sub.size(); k++) 
    484          { 
    485             CArray<double,1> lonvalue_loc(*(lonvalue_sub[k])) ; 
    486             CArray<double,1> latvalue_loc (*(latvalue_sub[k])); 
    487              
    488             const int zoom_ibegin_cl = ibegin_zoom_sub[k], zoom_ni_cl = ni_zoom_sub[k], 
    489                       zoom_jbegin_cl = jbegin_zoom_sub[k], zoom_nj_cl = nj_zoom_sub[k], 
    490                       ibegin_cl = ibegin_sub[k] , 
    491                       jbegin_cl = jbegin_sub[k] , 
    492                       ni_cl = iend_sub[k] - ibegin_sub[k] + 1; 
    493                        
    494             for (int i = 0; i < zoom_ni_cl; i++) 
    495             { 
    496                for (int j = 0; j < zoom_nj_cl; j++) 
    497                { 
    498                   int ii = i + (ibegin_cl-1) - (ibegin_serv - 1) + (zoom_ibegin_cl - 1) - (ibegin_zoom_srv - 1); 
    499                   int jj = j + (jbegin_cl-1) - (jbegin_serv - 1) + (zoom_jbegin_cl - 1) - (jbegin_zoom_srv - 1); 
    500                   lonvalue_temp(ii + jj * zoom_ni_serv) = lonvalue_loc(i + j * zoom_ni_cl); 
    501                   latvalue_temp(ii + jj * zoom_ni_serv) = latvalue_loc(i + j * zoom_ni_cl); 
    502                } 
    503             } 
    504          } 
    505           
    506          lonvalue.reference(lonvalue_temp.copy()) ; 
    507          latvalue.reference(latvalue_temp.copy()) ; 
    508       } 
    509       else 
    510       { 
    511          lonvalue_temp.resize(zoom_ni_serv); 
    512          latvalue_temp.resize(zoom_nj_serv); 
    513           
    514          for (StdSize k = 0; k < lonvalue_sub.size(); k++) 
    515          { 
    516             CArray<double,1> lonvalue_loc(*(lonvalue_sub[k])); 
    517             CArray<double,1> latvalue_loc(*(latvalue_sub[k])); 
    518              
    519             const int zoom_ibegin_cl = ibegin_zoom_sub[k], zoom_ni_cl = ni_zoom_sub[k], 
    520                       zoom_jbegin_cl = jbegin_zoom_sub[k], zoom_nj_cl = nj_zoom_sub[k]; 
    521                        
    522             for (int i = 0; i < zoom_ni_cl; i++) 
    523               lonvalue_temp(i /*- (ibegin_serv - 1)*/ + (zoom_ibegin_cl - 1) - (ibegin_zoom_srv - 1)) = lonvalue_loc(i); 
    524                 
    525             for (int j = 0; j < zoom_nj_cl; j++) 
    526               latvalue_temp(j /*- (jbegin_serv - 1)*/ + (zoom_jbegin_cl - 1) - (jbegin_zoom_srv - 1)) = latvalue_loc(j); 
    527          }        
    528          lonvalue.reference(lonvalue_temp.copy()) ; 
    529          latvalue.reference(latvalue_temp.copy()) ; 
    530       } 
    531    } 
    532444 
    533445   //---------------------------------------------------------------- 
     
    547459         else 
    548460         { 
    549             int zoom_iend = zoom_ibegin.getValue() + zoom_ni.getValue() - 1; 
    550             int zoom_jend = zoom_jbegin.getValue() + zoom_nj.getValue() - 1; 
     461            int zoom_iend = zoom_ibegin + zoom_ni - 1; 
     462            int zoom_jend = zoom_jbegin + zoom_nj - 1; 
    551463                 
    552             if (zoom_ibegin.getValue() < 1  || zoom_jbegin.getValue() < 1 || 
    553                 zoom_iend > ni_glo.getValue() || zoom_jend > nj_glo.getValue()) 
     464            if (zoom_ibegin < 1  || zoom_jbegin < 1 || zoom_iend > ni_glo || zoom_jend > nj_glo) 
    554465               ERROR("CDomain::checkZoom(void)", 
    555466                     << "Zoom is wrong defined," 
     
    559470      else 
    560471      { 
    561          this->zoom_ni.setValue(this->ni_glo.getValue());  
    562          this->zoom_nj.setValue(this->nj_glo.getValue()); 
    563          this->zoom_ibegin.setValue(1); 
    564          this->zoom_jbegin.setValue(1); 
    565       } 
    566       // Résolution des données locales de zoom. 
    567       { 
    568          int zoom_iend = zoom_ibegin.getValue() + zoom_ni.getValue() - 1; 
    569          int zoom_jend = zoom_jbegin.getValue() + zoom_nj.getValue() - 1; 
     472         zoom_ni = ni_glo;  
     473         zoom_nj = nj_glo; 
     474         zoom_ibegin = 1; 
     475         zoom_jbegin = 1; 
     476      } 
     477       
     478      // compute client zoom indices 
     479 
     480      int zoom_iend=zoom_ibegin+zoom_ni-1 ; 
     481      zoom_ibegin_client = ibegin_client > zoom_ibegin ? ibegin_client : zoom_ibegin ; 
     482      zoom_iend_client = iend_client < zoom_iend ? iend_client : zoom_iend ; 
     483      zoom_ni_client=zoom_iend_client-zoom_ibegin_client+1 ; 
     484      if (zoom_ni_client<0) zoom_ni_client=0 ; 
     485 
     486     
     487      int zoom_jend=zoom_jbegin+zoom_nj-1 ; 
     488      zoom_jbegin_client = jbegin_client > zoom_jbegin ? jbegin_client : zoom_jbegin ; 
     489      zoom_jend_client = jend_client < zoom_jend ? jend_client : zoom_jend ; 
     490      zoom_nj_client=zoom_jend_client-zoom_jbegin_client+1 ; 
     491      if (zoom_nj_client<0) zoom_nj_client=0 ; 
     492       
     493      cout << zoom_ibegin<<"  "<<zoom_ni <<"  "<< zoom_jbegin<<"  "<<zoom_nj<<endl ; 
     494      cout << zoom_ibegin_client<<"  "<<zoom_ni_client <<"  "<< zoom_jbegin_client<<"  "<<zoom_nj_client<<endl ; 
     495      cout << ibegin_client<<"  "<<iend_client <<"  "<< jbegin_client<<"  "<<jend_client<<endl ; 
     496/*     
     497      { 
     498         int zoom_iend = zoom_ibegin + zoom_ni - 1; 
     499         int zoom_jend = zoom_jbegin + zoom_nj - 1; 
    570500          
    571          if ((zoom_ibegin.getValue() > iend.getValue()) ||  
    572              (zoom_iend < ibegin.getValue())) 
    573          { 
    574             zoom_ni_loc.setValue(0); 
    575             zoom_ibegin_loc.setValue(zoom_ibegin.getValue()); 
     501         if ( zoom_ibegin > iend || zoom_iend < ibegin ) 
     502         { 
     503            zoom_ni_loc = 0 ; 
     504            zoom_ibegin_loc = zoom_ibegin ; 
    576505         } 
    577506         else 
    578507         { 
    579             int zoom_ibegin_loc_ = (zoom_ibegin.getValue() > ibegin.getValue())  
    580                                  ? zoom_ibegin.getValue() 
    581                                  : ibegin.getValue(); 
    582             int zoom_iend_loc_  = (zoom_iend < iend.getValue())  
    583                                  ? zoom_iend 
    584                                  : iend.getValue(); 
     508            int zoom_ibegin_loc_ = (zoom_ibegin > ibegin) ? zoom_ibegin : ibegin ; 
     509            int zoom_iend_loc_  = (zoom_iend < iend) ? zoom_iend : iend ; 
    585510            int zoom_ni_loc_ = zoom_iend_loc_ - zoom_ibegin_loc_ + 1; 
    586511             
    587             zoom_ni_loc.setValue(zoom_ni_loc_); 
    588             zoom_ibegin_loc.setValue(zoom_ibegin_loc_-ibegin.getValue()+1); 
     512            zoom_ni_loc = zoom_ni_loc_; 
     513            zoom_ibegin_loc = zoom_ibegin_loc_-ibegin.getValue()+1; 
    589514         } 
    590515          
    591          if ((zoom_jbegin.getValue() > jend.getValue()) ||  
    592              (zoom_jend < jbegin.getValue())) 
    593          { 
    594             zoom_nj_loc.setValue(0); 
    595             zoom_jbegin_loc.setValue(zoom_jbegin.getValue()); 
     516         if ( zoom_jbegin > jend || zoom_jend < jbegin ) 
     517         { 
     518            zoom_nj_loc = 0 ; 
     519            zoom_jbegin_loc = zoom_jbegin ; 
    596520         } 
    597521         else 
    598522         { 
    599             int zoom_jbegin_loc_ = (zoom_jbegin.getValue() > jbegin.getValue())  
    600                                  ? zoom_jbegin.getValue() 
    601                                  : jbegin.getValue(); 
    602             int zoom_jend_loc_  = (zoom_jend < jend.getValue())  
    603                                  ? zoom_jend 
    604                                  : jend.getValue(); 
     523            int zoom_jbegin_loc_ = ( zoom_jbegin > jbegin ) ? zoom_jbegin : jbegin ; 
     524            int zoom_jend_loc_  = (zoom_jend < jend) ? zoom_jend : jend ; 
    605525            int zoom_nj_loc_ = zoom_jend_loc_ - zoom_jbegin_loc_ + 1; 
    606526             
    607             zoom_nj_loc.setValue(zoom_nj_loc_); 
    608             zoom_jbegin_loc.setValue(zoom_jbegin_loc_-jbegin.getValue()+1); 
    609          } 
    610       } 
    611    } 
    612  
     527            zoom_nj_loc = zoom_nj_loc_; 
     528            zoom_jbegin_loc = zoom_jbegin_loc_-jbegin.getValue()+1; 
     529         } 
     530      } 
     531*/ 
     532   } 
     533    
     534   void CDomain::checkBounds(void) 
     535   { 
     536     if (!nvertex.isEmpty() && !bounds_lon.isEmpty() && !bounds_lat.isEmpty()) 
     537     { 
     538       hasBounds=true ; 
     539        
     540     } 
     541     else  
     542     { 
     543       hasBounds=false; 
     544       nvertex=0 ; 
     545     } 
     546   } 
     547             
    613548   //---------------------------------------------------------------- 
    614549 
     
    623558       
    624559      this->checkZoom(); 
     560      this->checkBounds(); 
    625561       
    626562      if (context->hasClient) 
     
    629565         this->checkDomainData(); 
    630566         this->checkCompression(); 
    631           
    632          this->ibegin_sub.push_back(this->ibegin.getValue()); 
    633          this->jbegin_sub.push_back(this->jbegin.getValue()); 
    634          this->iend_sub.push_back(this->iend.getValue()); 
    635          this->jend_sub.push_back(this->jend.getValue());  
    636  
    637          this->ibegin_zoom_sub.push_back(this->zoom_ibegin_loc.getValue()); 
    638          this->jbegin_zoom_sub.push_back(this->zoom_jbegin_loc.getValue()); 
    639          this->ni_zoom_sub.push_back(this->zoom_ni_loc.getValue()); 
    640          this->nj_zoom_sub.push_back(this->zoom_nj_loc.getValue()); 
    641        
    642          this->latvalue_sub.push_back(new CArray<double,1>(latvalue.copy())); 
    643          this->lonvalue_sub.push_back(new CArray<double,1>(lonvalue.copy()));   
    644  
    645  
    646 //         if (!this->isEmpty()) 
    647 //         { 
    648             this->completeLonLatClient(); 
    649 //         } 
    650          this->completeMask(); 
    651  
     567         this->completeLonLatClient(); 
    652568      } 
    653569      else 
     
    722638    CContextClient* client=context->client ; 
    723639    int nbServer=client->serverSize ; 
    724      
     640 
     641/*     
    725642    // compute client zoom indices 
    726643    int zoom_iend=zoom_ibegin.getValue()+zoom_ni.getValue()-1 ; 
     
    735652    zoom_nj_client=zoom_jend_client-zoom_jbegin_client+1 ; 
    736653    if (zoom_nj_client<0) zoom_nj_client=0 ; 
    737   
     654*/  
    738655    // find how much client are connected to a server 
     656    int zoom_iend=zoom_ibegin+zoom_ni-1 ; 
     657    int zoom_jend=zoom_jbegin+zoom_nj-1 ; 
     658     
    739659    jend_srv=0 ; 
    740660    for(int ns=0;ns<nbServer;ns++) 
     
    747667      ib = ibegin_client>ibegin_srv ? ibegin_client : ibegin_srv ; 
    748668      ie=  iend_client< iend_srv? iend_client : iend_srv ; 
    749       in=ie-ib+1 ; 
     669      in=ie-ib+1 ;  
    750670      if (in<0) in=0 ; 
    751671       
     
    837757   
    838758    list<shared_ptr<CMessage> > list_msg ;     
    839     list<CArray<double,1>* > list_indi,list_indj,list_lon,list_lat ; 
     759    list< CArray<int,1>* > list_indi,list_indj ; 
     760    list< CArray<double,1>* >list_lon,list_lat ; 
     761    list< CArray<double,2>* >list_boundslon,list_boundslat ; 
    840762 
    841763    for(int ns=0;ns<connectedServer.size();ns++) 
     
    844766      jb=jb_srv[ns] ; je=je_srv[ns] ; jn=jn_srv[ns] ; 
    845767       
    846       CArray<double,1> indi(in*jn) ; 
    847       CArray<double,1> indj(in*jn) ; 
     768      CArray<int,1> indi(in*jn) ; 
     769      CArray<int,1> indj(in*jn) ; 
    848770      CArray<double,1> lon(in*jn) ; 
    849771      CArray<double,1> lat(in*jn) ; 
     772      CArray<double,2> boundslon(nvertex,in*jn) ; 
     773      CArray<double,2> boundslat(nvertex,in*jn) ; 
    850774 
    851775           
     
    859783          lon(ind_loc)=lonvalue(ind_client) ; 
    860784          lat(ind_loc)=latvalue(ind_client) ; 
     785          if (hasBounds) 
     786          { 
     787            for(int n=0;n<nvertex;n++) 
     788            { 
     789              boundslon(n,ind_loc)=bounds_lon(n,ind_client); 
     790              boundslat(n,ind_loc)=bounds_lat(n,ind_client); 
     791            } 
     792          } 
    861793          indi(ind_loc)=i ; 
    862794          indj(ind_loc)=j ; 
    863795        } 
    864796       
    865       list_indi.push_back(new CArray<double,1>(indi.copy())) ; 
    866       list_indj.push_back(new CArray<double,1>(indj.copy())) ; 
     797      list_indi.push_back(new CArray<int,1>(indi.copy())) ; 
     798      list_indj.push_back(new CArray<int,1>(indj.copy())) ; 
    867799      list_lon.push_back(new CArray<double,1>(lon.copy())) ; 
    868800      list_lat.push_back(new CArray<double,1>(lat.copy())) ; 
     801      if (hasBounds) list_boundslon.push_back(new CArray<double,2>(boundslon.copy())) ; 
     802      if (hasBounds) list_boundslat.push_back(new CArray<double,2>(boundslat.copy())) ; 
    869803 
    870804      list_msg.push_back(shared_ptr<CMessage>(new CMessage)) ; 
    871805 
    872       *list_msg.back()<<this->getId()<<isCurvilinear ; 
     806      *list_msg.back()<<this->getId()<<(int)type ; // enum ne fonctionne pour les message => ToFix 
     807      *list_msg.back()<<isCurvilinear ; 
    873808      *list_msg.back()<<*list_indi.back()<<*list_indj.back()<<*list_lon.back()<<*list_lat.back() ; 
     809      if (hasBounds) *list_msg.back()<<*list_boundslon.back()<<*list_boundslat.back(); 
    874810      event.push(connectedServer[ns],nbSenders[ns],*list_msg.back()) ; 
    875811    } 
     
    877813    client->sendEvent(event) ; 
    878814     
    879     list<CArray<double,1>* >::iterator it; 
    880     for(it=list_indi.begin();it!=list_indi.end();it++) delete *it; 
    881     for(it=list_indj.begin();it!=list_indj.end();it++) delete *it; 
    882     for(it=list_lon.begin();it!=list_lon.end();it++)   delete *it; 
    883     for(it=list_lat.begin();it!=list_lat.end();it++)   delete *it; 
     815     
     816    for(list<CArray<int,1>* >::iterator it=list_indi.begin();it!=list_indi.end();it++) delete *it; 
     817    for(list<CArray<int,1>* >::iterator it=list_indj.begin();it!=list_indj.end();it++) delete *it; 
     818    for(list<CArray<double,1>* >::iterator it=list_lon.begin();it!=list_lon.end();it++)   delete *it; 
     819    for(list<CArray<double,1>* >::iterator it=list_lat.begin();it!=list_lat.end();it++)   delete *it; 
     820    if (hasBounds) for(list<CArray<double,2>* >::iterator it=list_boundslon.begin();it!=list_boundslon.end();it++)   delete *it; 
     821    if (hasBounds) for(list<CArray<double,2>* >::iterator it=list_boundslat.begin();it!=list_boundslat.end();it++)   delete *it; 
    884822     
    885823  } 
     
    940878    lonvalue_srv.resize(zoom_ni_srv*zoom_nj_srv) ; 
    941879    latvalue_srv.resize(zoom_ni_srv*zoom_nj_srv) ; 
     880    if (hasBounds) bounds_lon_srv.resize(nvertex,zoom_ni_srv*zoom_nj_srv) ; 
     881    if (hasBounds) bounds_lat_srv.resize(nvertex,zoom_ni_srv*zoom_nj_srv) ; 
    942882  } 
    943883     
     
    956896  void CDomain::recvLonLat(CBufferIn& buffer) 
    957897  { 
    958     CArray<double,1> indi ; 
    959     CArray<double,1> indj ; 
     898    CArray<int,1> indi ; 
     899    CArray<int,1> indj ; 
    960900    CArray<double,1> lon ; 
    961901    CArray<double,1> lat ; 
    962       
    963     buffer>>isCurvilinear>>indi>>indj>>lon>>lat ; 
     902    CArray<double,2> boundslon ; 
     903    CArray<double,2> boundslat ; 
     904 
     905    int type_int ; 
     906    buffer>>type_int>>isCurvilinear>>indi>>indj>>lon>>lat ; 
     907    if (hasBounds) buffer>>boundslon>>boundslat ; 
     908    type.setValue((type_attr::t_enum)type_int) ; // probleme des type enum avec les buffers : ToFix 
    964909 
    965910    int i,j,ind_srv ; 
     
    971916      lonvalue_srv(ind_srv)=lon(ind) ; 
    972917      latvalue_srv(ind_srv)=lat(ind) ; 
     918      if (hasBounds)  
     919      { 
     920        for(int n=0;n<nvertex;n++)  
     921        { 
     922          bounds_lon_srv(n,ind_srv)=boundslon(n,ind) ; 
     923          bounds_lat_srv(n,ind_srv)=boundslat(n,ind) ; 
     924        } 
     925      } 
    973926    } 
    974927  } 
    975928   //---------------------------------------------------------------- 
    976929    
    977    void CDomain::completeMask(void) 
    978    { 
    979       this->local_mask.resize(zoom_ni_loc,zoom_nj_loc); 
    980    } 
    981  
    982    //---------------------------------------------------------------- 
    983  
    984    CArray<int,2> CDomain::getLocalMask(void) const 
    985    { 
    986       return (this->local_mask); 
    987    } 
    988     
    989    //---------------------------------------------------------------- 
    990     
    991    const std::vector<int> & CDomain::getIBeginSub(void) const 
    992    { 
    993       return (this->ibegin_sub); 
    994    } 
    995     
    996    //---------------------------------------------------------------- 
    997     
    998    const std::vector<int> & CDomain::getIBeginZoomSub(void) const 
    999    { 
    1000       return (this->ibegin_zoom_sub); 
    1001    } 
    1002  
    1003    const std::vector<int> & CDomain::getNiZoomSub(void) const 
    1004    { 
    1005       return (this->ni_zoom_sub); 
    1006    } 
    1007                 
    1008    //---------------------------------------------------------------- 
    1009                       
    1010    const std::vector<int> & CDomain::getIEndSub(void) const 
    1011    { 
    1012       return (this->iend_sub); 
    1013    } 
    1014     
    1015    //---------------------------------------------------------------- 
    1016     
    1017    const std::vector<int> & CDomain::getJBeginSub(void) const 
    1018    { 
    1019       return (this->jbegin_sub); 
    1020    } 
    1021     
    1022    //---------------------------------------------------------------- 
    1023        
    1024    const std::vector<int> & CDomain::getJBeginZoomSub(void) const 
    1025    { 
    1026       return (this->jbegin_zoom_sub); 
    1027    } 
    1028  
    1029    const std::vector<int> & CDomain::getNjZoomSub(void) const 
    1030    { 
    1031       return (this->nj_zoom_sub); 
    1032    } 
    1033                    
    1034     
    1035    //---------------------------------------------------------------- 
    1036     
    1037    const std::vector<int> & CDomain::getJEndSub(void) const 
    1038    { 
    1039       return (this->jend_sub); 
    1040    } 
    1041     
    1042    //---------------------------------------------------------------- 
    1043     
    1044    const std::vector<CArray<double, 1>* > & CDomain::getLonValueSub(void) const 
    1045    { 
    1046       return (this->lonvalue_sub); 
    1047    } 
    1048     
    1049    //---------------------------------------------------------------- 
    1050     
    1051    const std::vector<CArray<double,1>*> & CDomain::getLatValueSub(void) const 
    1052    { 
    1053       return (this->latvalue_sub); 
    1054    }    
     930    
    1055931    
    1056932   ///--------------------------------------------------------------- 
  • XIOS/trunk/src/node/domain.hpp

    r384 r449  
    1212#include "array_new.hpp" 
    1313#include "attribute_array.hpp" 
     14#include "attribute_enum.hpp" 
    1415 
    1516namespace xios { 
     
    6970          
    7071         void checkZoom(void); 
     72         void checkBounds(void); 
    7173 
    72          void completeMask(void); 
    7374 
    7475      public : 
    7576       
    7677         /// Autres /// 
    77 //         virtual void fromBinary(StdIStream & is); 
    7878 
    79          /// Accesseurs /// 
    80          CArray<int, 2> getLocalMask(void) const; 
    81           
    8279         const std::set<StdString> & getRelFiles(void) const; 
    8380 
    84          const std::vector<int> & getIBeginSub(void) const; 
    85          const std::vector<int> & getIEndSub(void) const; 
    86          const std::vector<int> & getJBeginSub(void) const; 
    87          const std::vector<int> & getJEndSub(void) const; 
    88  
    89          const std::vector<int> & getIBeginZoomSub(void) const; 
    90          const std::vector<int> & getJBeginZoomSub(void) const; 
    91          const std::vector<int> & getNiZoomSub(void) const; 
    92          const std::vector<int> & getNjZoomSub(void) const; 
    93           
    94          const std::vector<CArray<double,1>* > & getLonValueSub(void) const; 
    95          const std::vector<CArray<double,1>* > & getLatValueSub(void) const; 
    9681 
    9782         /// Test /// 
     
    11499 
    115100         CArray<double, 1> lonvalue_srv, latvalue_srv ; 
     101         CArray<double, 2> bounds_lon_srv, bounds_lat_srv ; 
    116102          
    117103          
     
    124110         /// Mutateur /// 
    125111         void addRelFile(const StdString & filename); 
    126          void completeLonLatServer(void); 
    127112         void completeLonLatClient(void); 
    128113         void sendServerAttribut(void) ; 
     
    146131         CArray<int, 2> local_mask; 
    147132         bool isCurvilinear ; 
     133         bool hasBounds ; 
    148134       private : 
    149135 
     
    151137         bool isChecked; 
    152138         std::set<StdString> relFiles; 
    153  
    154          std::vector<int> ibegin_sub, iend_sub, jbegin_sub, jend_sub; 
    155          std::vector<int> ibegin_zoom_sub, jbegin_zoom_sub, ni_zoom_sub, nj_zoom_sub; 
    156          std::vector<CArray<double,1>* > lonvalue_sub, latvalue_sub; 
    157           
    158139 
    159140   }; // class CDomain 
  • XIOS/trunk/src/node/field.cpp

    r445 r449  
    402402      } 
    403403       
    404       if (context->hasClient) 
    405       {                   
     404//      if (context->hasClient) 
     405//      {                   
    406406         this->freq_operation = CDuration::FromString(freq_op.getValue()); 
    407407         this->freq_write     = CDuration::FromString(this->file->output_freq.getValue()); 
     
    432432               << "[ operation = " << operation.getValue() << "]" 
    433433               << "The operation is not defined !"); 
    434       } 
     434//      } 
    435435       
    436436 
  • XIOS/trunk/src/output/nc4_data_output.cpp

    r448 r449  
    5757      void CNc4DataOutput::writeDomain_(CDomain* domain) 
    5858      { 
     59         if (domain->type == CDomain::type_attr::unstructured) 
     60         { 
     61           writeUnstructuredDomain(domain) ; 
     62           return ; 
     63         } 
     64          
    5965         CContext* context = CContext::getCurrent() ; 
    6066         CContextServer* server=context->server ; 
     
    7076                             ? domain->name.getValue() : domain->getId(); 
    7177         StdString appendDomid  = (singleDomain) ? "" : "_"+domid ; 
    72           
    73          bool isCurvilinear = domain->isCurvilinear ; 
     78 
     79 
    7480         StdString dimXid, dimYid ; 
    75          if (isCurvilinear) 
    76          { 
    77            dimXid     = StdString("x").append(appendDomid); 
    78            dimYid     = StdString("y").append(appendDomid); 
    79          } 
    80          else 
    81          { 
    82            dimXid     = StdString("lon").append(appendDomid); 
    83            dimYid     = StdString("lat").append(appendDomid); 
     81          
     82         switch (domain->type) 
     83         { 
     84           case CDomain::type_attr::curvilinear : 
     85             dimXid     = StdString("x").append(appendDomid); 
     86             dimYid     = StdString("y").append(appendDomid); 
     87             break ; 
     88           case CDomain::type_attr::regular : 
     89             dimXid     = StdString("lon").append(appendDomid); 
     90             dimYid     = StdString("lat").append(appendDomid); 
     91             break; 
     92           case CDomain::type_attr::unstructured : 
     93             dimXid     = StdString("cell").append(appendDomid); 
     94             break; 
    8495         }             
    8596          
    86          string lonid,latid ; 
     97         string lonid,latid,bounds_lonid,bounds_latid ; 
    8798/* 
    8899         StdString lonid_loc = (server->intraCommSize > 1) 
     
    106117               } 
    107118 
    108                if (isCurvilinear) 
    109                { 
    110                  dim0.push_back(dimYid); dim0.push_back(dimXid); 
    111                  lonid = StdString("nav_lon").append(appendDomid); 
    112                  latid = StdString("nav_lat").append(appendDomid); 
     119               switch (domain->type) 
     120               { 
     121                 case CDomain::type_attr::curvilinear : 
     122                   dim0.push_back(dimYid); dim0.push_back(dimXid); 
     123                   lonid = StdString("nav_lon").append(appendDomid); 
     124                   latid = StdString("nav_lat").append(appendDomid); 
     125                   break ; 
     126                 case CDomain::type_attr::regular : 
     127                   lonid = StdString("lon").append(appendDomid); 
     128                   latid = StdString("lat").append(appendDomid); 
     129                   dim0.push_back(dimYid); 
     130                   dim1.push_back(dimXid); 
     131                   break; 
     132                 case CDomain::type_attr::unstructured : 
     133                   lonid = StdString("lon").append(appendDomid); 
     134                   latid = StdString("lat").append(appendDomid); 
     135                   bounds_lonid=string("bounds_lon").append(appendDomid); 
     136                   bounds_latid=string("bounds_lat").append(appendDomid); 
     137                   dim0.push_back(dimXid); 
     138                   break; 
     139               } 
     140                 
     141               if (domain->type == CDomain::type_attr::unstructured) 
     142               { 
     143                 SuperClassWriter::addDimension(dimXid, domain->nj_glo); 
    113144               } 
    114145               else 
    115146               { 
    116                  lonid = StdString("lon").append(appendDomid); 
    117                  latid = StdString("lat").append(appendDomid); 
    118                  dim0.push_back(dimYid); 
    119                  dim1.push_back(dimXid); 
    120                } 
    121  
    122                SuperClassWriter::addDimension(dimXid, domain->zoom_ni_srv); 
    123                SuperClassWriter::addDimension(dimYid, domain->zoom_nj_srv); 
     147                 SuperClassWriter::addDimension(dimXid, domain->zoom_ni_srv); 
     148                 SuperClassWriter::addDimension(dimYid, domain->zoom_nj_srv); 
     149               } 
     150                
    124151               if (server->intraCommSize > 1) 
    125152               { 
    126                   this->writeLocalAttributes(domain->zoom_ibegin_srv, 
    127                                              domain->zoom_ni_srv, 
    128                                              domain->zoom_jbegin_srv, 
    129                                              domain->zoom_nj_srv, 
    130                                              appendDomid); 
     153                  if (domain->type != CDomain::type_attr::unstructured) 
     154                  { 
     155                    this->writeLocalAttributes(domain->zoom_ibegin_srv, 
     156                                               domain->zoom_ni_srv, 
     157                                               domain->zoom_jbegin_srv, 
     158                                               domain->zoom_nj_srv, 
     159                                               appendDomid); 
    131160                   
    132                   if (singleDomain) this->writeLocalAttributes_IOIPSL(domain->zoom_ibegin_srv, 
    133                                              domain->zoom_ni_srv, 
    134                                              domain->zoom_jbegin_srv, 
    135                                              domain->zoom_nj_srv, 
    136                                              domain->ni_glo,domain->nj_glo, 
    137                                              server->intraCommRank,server->intraCommSize); 
    138                } 
    139                 
    140                if (isCurvilinear) 
    141                { 
    142                   SuperClassWriter::addVariable(latid, NC_FLOAT, dim0); 
    143                   SuperClassWriter::addVariable(lonid, NC_FLOAT, dim0); 
    144                } 
    145                else 
    146                { 
    147                   SuperClassWriter::addVariable(latid, NC_FLOAT, dim0); 
    148                   SuperClassWriter::addVariable(lonid, NC_FLOAT, dim1); 
    149                } 
    150                this->writeAxisAttributes 
    151                   (lonid, "X", "longitude", "Longitude", "degrees_east", domid); 
    152                this->writeAxisAttributes 
    153                   (latid, "Y", "latitude", "Latitude", "degrees_north", domid); 
     161                    if (singleDomain) this->writeLocalAttributes_IOIPSL(domain->zoom_ibegin_srv, 
     162                                               domain->zoom_ni_srv, 
     163                                               domain->zoom_jbegin_srv, 
     164                                               domain->zoom_nj_srv, 
     165                                               domain->ni_glo,domain->nj_glo, 
     166                                               server->intraCommRank,server->intraCommSize); 
     167                 } 
     168               } 
     169                
     170               switch (domain->type) 
     171               { 
     172                 case CDomain::type_attr::curvilinear : 
     173                   SuperClassWriter::addVariable(latid, NC_FLOAT, dim0); 
     174                   SuperClassWriter::addVariable(lonid, NC_FLOAT, dim0); 
     175                   break ; 
     176                  case CDomain::type_attr::regular : 
     177                    SuperClassWriter::addVariable(latid, NC_FLOAT, dim0); 
     178                    SuperClassWriter::addVariable(lonid, NC_FLOAT, dim1); 
     179                    break ; 
     180                  case CDomain::type_attr::unstructured : 
     181                    SuperClassWriter::addVariable(latid, NC_FLOAT, dim0); 
     182                    SuperClassWriter::addVariable(lonid, NC_FLOAT, dim0); 
     183               } 
     184                
     185               this->writeAxisAttributes(lonid, "X", "longitude", "Longitude", "degrees_east", domid); 
     186               this->writeAxisAttributes(latid, "Y", "latitude", "Latitude", "degrees_north", domid); 
    154187 
    155188               dim0.clear(); 
    156                dim0.push_back(dimYid); 
     189               if (domain->type != CDomain::type_attr::unstructured) dim0.push_back(dimYid); 
    157190               dim0.push_back(dimXid); 
    158191 
     
    173206 
    174207               SuperClassWriter::definition_end(); 
    175                if (isCurvilinear) 
    176                { 
    177   
    178                  SuperClassWriter::writeData(domain->latvalue_srv, latid, isCollective, 0); 
    179                  SuperClassWriter::writeData(domain->lonvalue_srv, lonid, isCollective, 0); 
    180 // supress mask               if (server->intraCommSize > 1) SuperClassWriter::writeData(mask, maskid); 
    181                } 
    182                else 
    183                { 
    184                   CArray<double,1> lat = domain->latvalue_srv(Range(fromStart,toEnd,domain->zoom_ni_srv)) ; 
    185                   SuperClassWriter::writeData(CArray<double,1>(lat.copy()), latid, isCollective, 0); 
    186                   CArray<double,1> lon=domain->lonvalue_srv(Range(0,domain->zoom_ni_srv-1)) ; 
    187                   SuperClassWriter::writeData(CArray<double,1>(lon.copy()), lonid, isCollective, 0); 
     208 
     209               switch (domain->type) 
     210               { 
     211                 case CDomain::type_attr::curvilinear : 
     212                   SuperClassWriter::writeData(domain->latvalue_srv, latid, isCollective, 0); 
     213                   SuperClassWriter::writeData(domain->lonvalue_srv, lonid, isCollective, 0); 
     214                   break;  
     215                 case CDomain::type_attr::regular : 
     216                   CArray<double,1> lat = domain->latvalue_srv(Range(fromStart,toEnd,domain->zoom_ni_srv)) ; 
     217                   SuperClassWriter::writeData(CArray<double,1>(lat.copy()), latid, isCollective, 0); 
     218                   CArray<double,1> lon=domain->lonvalue_srv(Range(0,domain->zoom_ni_srv-1)) ; 
     219                   SuperClassWriter::writeData(CArray<double,1>(lon.copy()), lonid, isCollective, 0); 
     220                   break; 
    188221               } 
    189222               SuperClassWriter::definition_start(); 
     
    197230 
    198231                
    199                if (isCurvilinear) 
    200                { 
    201                   dim0.push_back(dimYid); dim0.push_back(dimXid); 
    202                   lonid = StdString("nav_lon").append(appendDomid); 
    203                   latid = StdString("nav_lat").append(appendDomid); 
    204                   SuperClassWriter::addVariable(latid, NC_FLOAT, dim0); 
    205                   SuperClassWriter::addVariable(lonid, NC_FLOAT, dim0); 
    206                } 
    207                else 
    208                { 
    209                   dim0.push_back(dimYid); 
    210                   dim1.push_back(dimXid); 
    211                   lonid = StdString("lon").append(appendDomid); 
    212                   latid = StdString("lat").append(appendDomid); 
    213                   SuperClassWriter::addVariable(latid, NC_FLOAT, dim0); 
    214                   SuperClassWriter::addVariable(lonid, NC_FLOAT, dim1); 
     232               switch (domain->type) 
     233               { 
     234                 case CDomain::type_attr::curvilinear : 
     235                   dim0.push_back(dimYid); dim0.push_back(dimXid); 
     236                   lonid = StdString("nav_lon").append(appendDomid); 
     237                   latid = StdString("nav_lat").append(appendDomid); 
     238                   SuperClassWriter::addVariable(latid, NC_FLOAT, dim0); 
     239                   SuperClassWriter::addVariable(lonid, NC_FLOAT, dim0); 
     240                   break; 
     241 
     242                 case CDomain::type_attr::regular : 
     243                   dim0.push_back(dimYid); 
     244                   dim1.push_back(dimXid); 
     245                   lonid = StdString("lon").append(appendDomid); 
     246                   latid = StdString("lat").append(appendDomid); 
     247                   SuperClassWriter::addVariable(latid, NC_FLOAT, dim0); 
     248                   SuperClassWriter::addVariable(lonid, NC_FLOAT, dim1); 
     249                   break; 
    215250               } 
    216251               this->writeAxisAttributes 
     
    221256 
    222257               SuperClassWriter::definition_end(); 
    223                if (isCurvilinear) 
    224                { 
    225                  std::vector<StdSize> start(2) ;  
    226                  std::vector<StdSize> count(2) ; 
    227                  if (domain->isEmpty()) 
     258               switch (domain->type) 
     259               { 
     260                 case CDomain::type_attr::curvilinear : 
    228261                 { 
    229                    start[0]=0 ; start [1]=0 ;  
    230                    count[0]=0 ; count[1]=0 ;  
     262                   std::vector<StdSize> start(2) ;  
     263                   std::vector<StdSize> count(2) ; 
     264                   if (domain->isEmpty()) 
     265                   { 
     266                     start[0]=0 ; start [1]=0 ;  
     267                     count[0]=0 ; count[1]=0 ;  
     268                   } 
     269                   else 
     270                   { 
     271                     start[1]=domain->zoom_ibegin_srv-domain->zoom_ibegin.getValue() ; start [0]=domain->zoom_jbegin_srv-domain->zoom_jbegin.getValue() ;  
     272                     count[1]=domain->zoom_ni_srv ; count[0]=domain->zoom_nj_srv ;  
     273                   } 
     274                  
     275                   SuperClassWriter::writeData(domain->latvalue_srv, latid, isCollective, 0,&start,&count); 
     276                   SuperClassWriter::writeData(domain->lonvalue_srv, lonid, isCollective, 0,&start,&count); 
     277                   break; 
    231278                 } 
    232                  else 
     279                 case CDomain::type_attr::regular : 
    233280                 { 
    234                    start[1]=domain->zoom_ibegin_srv-domain->zoom_ibegin.getValue() ; start [0]=domain->zoom_jbegin_srv-domain->zoom_jbegin.getValue() ;  
    235                    count[1]=domain->zoom_ni_srv ; count[0]=domain->zoom_nj_srv ;  
    236                  } 
    237                   
    238                  SuperClassWriter::writeData(domain->latvalue_srv, latid, isCollective, 0,&start,&count); 
    239                  SuperClassWriter::writeData(domain->lonvalue_srv, lonid, isCollective, 0,&start,&count); 
    240                } 
    241                else 
    242                { 
    243                  std::vector<StdSize> start(1) ;  
    244                  std::vector<StdSize> count(1) ; 
    245                  if (domain->isEmpty()) 
    246                  { 
    247                    start[0]=0 ;   
    248                    count[0]=0 ;   
    249                    SuperClassWriter::writeData(domain->latvalue_srv, latid, isCollective, 0,&start,&count); 
    250                    SuperClassWriter::writeData(domain->lonvalue_srv, lonid, isCollective, 0,&start,&count);                 } 
    251                  else 
    252                  { 
    253                    start[0]=domain->zoom_jbegin_srv-domain->zoom_jbegin.getValue() ;  
    254                    count[0]=domain->zoom_nj_srv ;  
    255                    CArray<double,1> lat = domain->latvalue_srv(Range(fromStart,toEnd,domain->zoom_ni_srv)) ; 
    256                    SuperClassWriter::writeData(CArray<double,1>(lat.copy()), latid, isCollective, 0,&start,&count); 
    257  
    258                    start[0]=domain->zoom_ibegin_srv-domain->zoom_ibegin.getValue() ;  
    259                    count[0]=domain->zoom_ni_srv ;  
    260                    CArray<double,1> lon=domain->lonvalue_srv(Range(0,domain->zoom_ni_srv-1)) ; 
    261                    SuperClassWriter::writeData(CArray<double,1>(lon.copy()), lonid, isCollective, 0,&start,&count); 
     281                   std::vector<StdSize> start(1) ;  
     282                   std::vector<StdSize> count(1) ; 
     283                   if (domain->isEmpty()) 
     284                   { 
     285                     start[0]=0 ;   
     286                     count[0]=0 ;   
     287                     SuperClassWriter::writeData(domain->latvalue_srv, latid, isCollective, 0,&start,&count); 
     288                     SuperClassWriter::writeData(domain->lonvalue_srv, lonid, isCollective, 0,&start,&count);                 } 
     289                   else 
     290                   { 
     291                     start[0]=domain->zoom_jbegin_srv-domain->zoom_jbegin.getValue() ;  
     292                     count[0]=domain->zoom_nj_srv ;  
     293                     CArray<double,1> lat = domain->latvalue_srv(Range(fromStart,toEnd,domain->zoom_ni_srv)) ; 
     294                     SuperClassWriter::writeData(CArray<double,1>(lat.copy()), latid, isCollective, 0,&start,&count); 
     295 
     296                     start[0]=domain->zoom_ibegin_srv-domain->zoom_ibegin.getValue() ;  
     297                     count[0]=domain->zoom_ni_srv ;  
     298                     CArray<double,1> lon=domain->lonvalue_srv(Range(0,domain->zoom_ni_srv-1)) ; 
     299                     SuperClassWriter::writeData(CArray<double,1>(lon.copy()), lonid, isCollective, 0,&start,&count); 
     300                   } 
     301                   break; 
    262302                 } 
    263303               } 
     
    273313      } 
    274314 
     315      void CNc4DataOutput::writeUnstructuredDomain(CDomain* domain) 
     316      { 
     317         CContext* context = CContext::getCurrent() ; 
     318         CContextServer* server=context->server ; 
     319          
     320         if (domain->IsWritten(this->filename)) return; 
     321         domain->checkAttributes(); 
     322          
     323         if (domain->isEmpty())  
     324           if (SuperClass::type==MULTI_FILE) return ; 
     325 
     326         std::vector<StdString> dim0, dim1; 
     327         StdString domid     = (!domain->name.isEmpty()) 
     328                             ? domain->name.getValue() : domain->getId(); 
     329         StdString appendDomid  = (singleDomain) ? "" : "_"+domid ; 
     330 
     331 
     332         StdString dimXid = StdString("cell").append(appendDomid); 
     333         StdString dimVertId = StdString("nvertex").append(appendDomid); 
     334         
     335         string lonid,latid,bounds_lonid,bounds_latid ; 
     336 
     337         switch (SuperClass::type) 
     338         { 
     339            case (MULTI_FILE) : 
     340            { 
     341               lonid = StdString("lon").append(appendDomid); 
     342               latid = StdString("lat").append(appendDomid); 
     343               dim0.push_back(dimXid); 
     344 
     345               SuperClassWriter::addDimension(dimXid, domain->zoom_nj_srv); 
     346               SuperClassWriter::addVariable(latid, NC_FLOAT, dim0); 
     347               SuperClassWriter::addVariable(lonid, NC_FLOAT, dim0); 
     348                
     349               bounds_lonid = StdString("bounds_lon").append(appendDomid); 
     350               bounds_latid = StdString("bounds_lat").append(appendDomid); 
     351               
     352                
     353               this->writeAxisAttributes(lonid, "X", "longitude", "Longitude", "degrees_east", domid); 
     354               if (domain->hasBounds) SuperClassWriter::addAttribute("bounds",bounds_lonid, &lonid); 
     355               this->writeAxisAttributes(latid, "Y", "latitude", "Latitude", "degrees_north", domid); 
     356               if (domain->hasBounds) SuperClassWriter::addAttribute("bounds",bounds_latid, &latid); 
     357               if (domain->hasBounds) SuperClassWriter::addDimension(dimVertId, domain->nvertex); 
     358               dim0.clear(); 
     359               if (domain->hasBounds) 
     360               {  
     361                 dim0.push_back(dimXid); 
     362                 dim0.push_back(dimVertId); 
     363                 SuperClassWriter::addVariable(bounds_lonid, NC_FLOAT, dim0); 
     364                 SuperClassWriter::addVariable(bounds_latid, NC_FLOAT, dim0); 
     365               } 
     366                
     367               dim0.clear(); 
     368               dim0.push_back(dimXid); 
     369 
     370               SuperClassWriter::definition_end(); 
     371 
     372               SuperClassWriter::writeData(domain->latvalue_srv, latid, isCollective, 0); 
     373               SuperClassWriter::writeData(domain->lonvalue_srv, lonid, isCollective, 0); 
     374                
     375               if (domain->hasBounds) 
     376               {  
     377                 SuperClassWriter::writeData(domain->bounds_lon_srv, bounds_lonid, isCollective, 0); 
     378                 SuperClassWriter::writeData(domain->bounds_lat_srv, bounds_latid, isCollective, 0); 
     379               } 
     380               SuperClassWriter::definition_start(); 
     381               break ; 
     382            } 
     383 
     384            case (ONE_FILE) : 
     385            { 
     386               lonid = StdString("lon").append(appendDomid); 
     387               latid = StdString("lat").append(appendDomid); 
     388               bounds_lonid = StdString("bounds_lon").append(appendDomid); 
     389               bounds_latid = StdString("bounds_lat").append(appendDomid); 
     390               dim0.push_back(dimXid); 
     391               SuperClassWriter::addDimension(dimXid, domain->nj_glo); 
     392               SuperClassWriter::addVariable(latid, NC_FLOAT, dim0); 
     393               SuperClassWriter::addVariable(lonid, NC_FLOAT, dim0); 
     394               this->writeAxisAttributes(lonid, "X", "longitude", "Longitude", "degrees_east", domid); 
     395               if (domain->hasBounds) SuperClassWriter::addAttribute("bounds",bounds_lonid, &lonid); 
     396               this->writeAxisAttributes(latid, "Y", "latitude", "Latitude", "degrees_north", domid);                                            
     397               if (domain->hasBounds) SuperClassWriter::addAttribute("bounds",bounds_latid, &latid); 
     398               if (domain->hasBounds) SuperClassWriter::addDimension(dimVertId, domain->nvertex); 
     399               dim0.clear(); 
     400                
     401               if (domain->hasBounds)  
     402               { 
     403                 dim0.push_back(dimXid); 
     404                 dim0.push_back(dimVertId); 
     405                 SuperClassWriter::addVariable(bounds_lonid, NC_FLOAT, dim0); 
     406                 SuperClassWriter::addVariable(bounds_latid, NC_FLOAT, dim0); 
     407               } 
     408                
     409               SuperClassWriter::definition_end(); 
     410                
     411               std::vector<StdSize> start(1), startBounds(2) ;  
     412               std::vector<StdSize> count(1), countBounds(2) ; 
     413               if (domain->isEmpty()) 
     414               { 
     415                 start[0]=0 ;   
     416                 count[0]=0 ;   
     417                 startBounds[0]=0 ;   
     418                 countBounds[0]=domain->nvertex ; 
     419                 startBounds[1]=0 ;   
     420                 countBounds[1]=0 ;   
     421               } 
     422               else 
     423               { 
     424                 start[0]=domain->zoom_jbegin_srv-domain->zoom_jbegin ;  
     425                 count[0]=domain->zoom_nj_srv ;  
     426                 startBounds[0]=0 ;   
     427                 countBounds[0]=domain->nvertex ; 
     428                 startBounds[1]=domain->zoom_jbegin_srv-domain->zoom_jbegin ;  
     429                 countBounds[1]=domain->zoom_nj_srv ;    
     430               } 
     431               SuperClassWriter::writeData(domain->latvalue_srv, latid, isCollective, 0,&start,&count); 
     432               SuperClassWriter::writeData(domain->lonvalue_srv, lonid, isCollective, 0,&start,&count); 
     433               if (domain->hasBounds)  
     434               { 
     435                 SuperClassWriter::writeData(domain->bounds_lon_srv, bounds_lonid, isCollective, 0,&start,&count); 
     436                 SuperClassWriter::writeData(domain->bounds_lat_srv, bounds_latid, isCollective, 0,&startBounds,&countBounds); 
     437               } 
     438  
     439                
     440               SuperClassWriter::definition_start(); 
     441 
     442               break; 
     443            }            
     444            default : 
     445               ERROR("CNc4DataOutput::writeDomain(domain)", 
     446                     << "[ type = " << SuperClass::type << "]" 
     447                     << " not implemented yet !"); 
     448         } 
     449         domain->addRelFile(this->filename); 
     450      } 
    275451      //-------------------------------------------------------------- 
    276452 
     
    334510     void CNc4DataOutput::writeTimeDimension_(void) 
    335511     { 
    336        SuperClassWriter::addDimension(string("time_counter")); 
     512       SuperClassWriter::addDimension("time_counter"); 
    337513     } 
    338514      //-------------------------------------------------------------- 
     
    355531         StdString appendDomid  = (singleDomain) ? "" : "_"+domid ; 
    356532  
    357          bool isCurvilinear = domain->isCurvilinear ;  
     533//         bool isCurvilinear = domain->isCurvilinear ;  
     534//         bool isCurvilinear = (domain->type == CDomain::type_attr::curvilinear) ; 
    358535          
    359536         StdString dimXid,dimYid ; 
    360537         
    361          if (isCurvilinear) 
    362          { 
    363            dimXid     = StdString("x").append(appendDomid); 
    364            dimYid     = StdString("y").append(appendDomid); 
    365          } 
    366          else 
    367          { 
    368            dimXid     = StdString("lon").append(appendDomid); 
    369            dimYid     = StdString("lat").append(appendDomid); 
    370          } 
     538         switch (domain->type) 
     539         { 
     540           case CDomain::type_attr::curvilinear : 
     541             dimXid     = StdString("x").append(appendDomid); 
     542             dimYid     = StdString("y").append(appendDomid); 
     543             break ; 
     544           case CDomain::type_attr::regular : 
     545             dimXid     = StdString("lon").append(appendDomid); 
     546             dimYid     = StdString("lat").append(appendDomid); 
     547             break ; 
     548           case CDomain::type_attr::unstructured : 
     549             dimXid     = StdString("cell").append(appendDomid); 
     550             break ; 
     551        } 
    371552          
    372553/*  
     
    388569                        ( field->prec.getValue() == 4)) 
    389570                        ? NC_FLOAT : NC_DOUBLE; 
    390          bool wtime   = !(!field->operation.isEmpty() && 
    391                          ( field->operation.getValue().compare("once") == 0)); 
     571         bool wtime   = !(!field->operation.isEmpty() && field->foperation->timeType() == func::CFunctor::once); 
    392572                          
    393573         if (wtime) 
    394574         { 
    395             StdOStringStream oss; 
    396             oss << "time_" << field->operation.getValue() 
    397                 << "_" << field->getRelFile()->output_freq.getValue(); 
    398  
    399             coodinates.push_back(oss.str()); 
     575             
     576            //StdOStringStream oss; 
     577           // oss << "time_" << field->operation.getValue() 
     578           //     << "_" << field->getRelFile()->output_freq.getValue(); 
     579          //oss  
     580            if (field->foperation->timeType() == func::CFunctor::instant) coodinates.push_back(string("time_instant")); 
     581            else if (field->foperation->timeType() == func::CFunctor::centered) coodinates.push_back(string("time_centered")); 
    400582            dims.push_back(timeid); 
    401583         } 
     
    409591         } 
    410592 
    411          if (isCurvilinear) 
    412          { 
    413             coodinates.push_back(StdString("nav_lat").append(appendDomid)); 
    414             coodinates.push_back(StdString("nav_lon").append(appendDomid)); 
    415          } 
    416          else 
    417          { 
     593         switch (domain->type) 
     594         { 
     595           case CDomain::type_attr::curvilinear : 
     596             coodinates.push_back(StdString("nav_lon").append(appendDomid)); 
     597             coodinates.push_back(StdString("nav_lat").append(appendDomid)); 
     598             break; 
     599           case CDomain::type_attr::regular :              
     600           case CDomain::type_attr::unstructured :    
     601            coodinates.push_back(StdString("lon").append(appendDomid)); 
    418602            coodinates.push_back(StdString("lat").append(appendDomid)); 
    419             coodinates.push_back(StdString("lon").append(appendDomid)); 
    420          } 
    421  
    422          switch (SuperClass::type) 
    423          { 
    424             case (MULTI_FILE) : 
    425             { 
    426                dims.push_back(dimYid); 
    427                dims.push_back(dimXid); 
    428                break ; 
    429             } 
    430             case (ONE_FILE) : 
    431             { 
    432                dims.push_back(dimYid); 
    433                dims.push_back(dimXid); 
    434                break; 
    435             } 
    436             default : 
    437                ERROR("CNc4DataOutput::writeDomain(domain)", 
    438                      << "[ type = " << SuperClass::type << "]" 
    439                      << " not implemented yet !"); 
    440          } 
     603             break; 
     604         } 
     605 
     606         if ( domain->type == CDomain::type_attr::curvilinear || type == CDomain::type_attr::regular)dims.push_back(dimYid); 
     607         dims.push_back(dimXid); 
    441608           
    442609         SuperClassWriter::addVariable(fieldid, type, dims); 
     
    567734                              
    568735         StdOStringStream oss; 
    569          oss << "time_" << field->operation.getValue() 
    570              << "_" << field->getRelFile()->output_freq.getValue(); 
     736         string timeAxisId ; 
     737         if (field->foperation->timeType() == func::CFunctor::instant)  timeAxisId="time_instant" ; 
     738         else if (field->foperation->timeType() == func::CFunctor::centered)  timeAxisId="time_centered" ; 
     739 
    571740              
    572741         CArray<double,1> time_data(1) ; 
    573          
    574         bool wtime   = !(!field->operation.isEmpty() && 
    575                          ( field->operation.getValue().compare("once") == 0)); 
     742         CArray<double,1> time_counter(1) ; 
     743                 
     744        bool wtime   = !(!field->operation.isEmpty() && (field->foperation->timeType() == func::CFunctor::once)); 
    576745                                  
    577746        if (wtime) 
    578747        { 
    579           if (field->operation.getValue()=="instant") time_data(0) = Time(*field->last_Write_srv) 
    580                                                                       -Time(context->calendar->getTimeOrigin()); 
    581           else time_data(0) = (Time(*field->last_Write_srv)+Time(*field->lastlast_Write_srv))/2 
    582                                 -Time(context->calendar->getTimeOrigin()); 
     748          time_counter(0)= (Time(*field->last_Write_srv)+Time(*field->lastlast_Write_srv))/2 -Time(context->calendar->getTimeOrigin()); 
     749          if (field->foperation->timeType() == func::CFunctor::instant)  
     750            time_data(0) = Time(*field->last_Write_srv)-Time(context->calendar->getTimeOrigin()); 
     751          else if (field->foperation->timeType() == func::CFunctor::centered) time_data(0) = time_counter(0); 
     752           
    583753         } 
    584754          
     
    599769              { 
    600770                 SuperClassWriter::writeData(field_data3D, fieldid, isCollective, field->getNStep()-1); 
    601                  if (wtime) SuperClassWriter::writeData(time_data, oss.str(), isCollective, field->getNStep()-1); 
     771                 if (wtime)  
     772                 { 
     773                   SuperClassWriter::writeData(time_data, timeAxisId, isCollective, field->getNStep()-1); 
     774                   SuperClassWriter::writeData(time_counter, string("time_counter"), isCollective, field->getNStep()-1); 
     775                 } 
    602776                 break ; 
    603777              } 
     
    618792                 } 
    619793                 SuperClassWriter::writeData(field_data3D, fieldid, isCollective, field->getNStep()-1,&start,&count ); 
    620                  if (wtime) SuperClassWriter::writeTimeAxisData(time_data, oss.str(), isCollective, field->getNStep()-1,isRoot ); 
     794                 if (wtime)  
     795                 { 
     796                   SuperClassWriter::writeTimeAxisData(time_data, timeAxisId, isCollective, field->getNStep()-1,isRoot ); 
     797                   SuperClassWriter::writeTimeAxisData(time_counter, string("time_counter"), isCollective, field->getNStep()-1,isRoot ); 
     798                 } 
    621799                 break; 
    622800              } 
     
    634812              { 
    635813                SuperClassWriter::writeData(field_data2D, fieldid, isCollective, field->getNStep()-1); 
    636                 if (wtime) SuperClassWriter::writeData(time_data, oss.str(), isCollective, field->getNStep()-1); 
     814                if (wtime)  
     815                { 
     816                  SuperClassWriter::writeData(time_data, timeAxisId, isCollective, field->getNStep()-1); 
     817                  SuperClassWriter::writeData(time_counter, string("time_counter"), isCollective, field->getNStep()-1); 
     818                } 
    637819                break; 
    638820              } 
     
    653835 
    654836                 SuperClassWriter::writeData(field_data2D, fieldid, isCollective, field->getNStep()-1,&start,&count); 
    655                  if (wtime) SuperClassWriter::writeTimeAxisData(time_data, oss.str(), isCollective, field->getNStep()-1,isRoot); 
     837                 if (wtime)  
     838                 { 
     839                   SuperClassWriter::writeTimeAxisData(time_data, timeAxisId, isCollective, field->getNStep()-1,isRoot); 
     840                   SuperClassWriter::writeTimeAxisData(time_counter, string("time_counter"), isCollective, field->getNStep()-1,isRoot); 
     841                 }                    
    656842                 break;  
    657843               
     
    669855         StdOStringStream oss; 
    670856          
    671          if (field->operation.getValue().compare("once") == 0) return ; 
    672                           
    673          oss << "time_" << field->operation.getValue() 
    674              << "_" << field->getRelFile()->output_freq.getValue(); 
    675  
     857//         if (field->operation.getValue().compare("once") == 0) return ; 
     858         if (field->foperation->timeType() == func::CFunctor::once) return ; 
     859                                 
     860//         oss << "time_" << field->operation.getValue() 
     861//             << "_" << field->getRelFile()->output_freq.getValue(); 
     862          
     863         string  axisid ;    
     864         if (field->foperation->timeType() == func::CFunctor::centered) axisid="time_centered" ; 
     865         else if (field->foperation->timeType() == func::CFunctor::instant) axisid="time_instant" ; 
     866          
    676867         std::vector<StdString> dims; 
    677          StdString axisid = oss.str(); 
     868//         StdString axisid = oss.str(); 
    678869         StdString timeid = StdString("time_counter"); 
    679870 
     
    682873         { 
    683874            SuperClassWriter::addVariable(axisid, NC_DOUBLE, dims); 
     875             
    684876            CDate timeOrigin=cal->getTimeOrigin() ; 
    685877//            StdOStringStream oss2; 
     
    693885                strTimeOrigin); 
    694886         } 
     887 
     888         dims.clear() ; 
     889         axisid = "time_counter" ; 
     890         timeid = "time_counter" ; 
     891 
     892         dims.push_back(timeid); 
     893         if (!SuperClassWriter::varExist(axisid)) 
     894         { 
     895            SuperClassWriter::addVariable(axisid, NC_DOUBLE, dims); 
     896            SuperClassWriter::addAttribute("axis", string("T"), &axisid); 
     897            CDate timeOrigin=cal->getTimeOrigin() ; 
     898            StdString strTimeOrigin=timeOrigin.toString() ; 
     899            this->writeTimeAxisAttributes 
     900               (axisid, cal->getType(), 
     901                StdString("seconds since ").append(strTimeOrigin), 
     902                strTimeOrigin); 
     903         }          
     904          
    695905 
    696906      } 
  • XIOS/trunk/src/output/nc4_data_output.hpp

    r391 r449  
    5252 
    5353         protected : 
    54           
     54            void writeUnstructuredDomain (CDomain* domain);          
    5555            void writeLocalAttributes(int ibegin, int ni, int jbegin, int nj, StdString domid); 
    5656            void writeLocalAttributes_IOIPSL(int ibegin, int ni, int jbegin, int nj, int ni_glo, int nj_glo, int rank, int size) ; 
Note: See TracChangeset for help on using the changeset viewer.