Changeset 1158


Ignore:
Timestamp:
06/06/17 17:58:16 (3 years ago)
Author:
oabramkina
Message:

Two server levels: merging with trunk r1137.
There are bugs.

Location:
XIOS/dev/dev_olga
Files:
202 edited

Legend:

Unmodified
Added
Removed
  • XIOS/dev/dev_olga/extern/remap/src/elt.hpp

    r923 r1158  
    105105        } 
    106106 
     107  void insert_vertex(int i, const Coord& v) 
     108  { 
     109    for(int j=n; j > i ; j--) 
     110    { 
     111      vertex[j]=vertex[j-1] ; 
     112      edge[j]=edge[j-1] ; 
     113      d[j]=d[j-1] ; 
     114      neighbour[j]=neighbour[j-1] ; 
     115    } 
     116    vertex[i+1]=v ; 
     117    n++ ; 
     118  } 
     119   
    107120        int neighbour[NMAX]; 
    108121        double d[NMAX]; /**< distance of centre of small circle to origin, zero if great circle */ 
  • XIOS/dev/dev_olga/extern/remap/src/intersect.cpp

    r688 r1158  
    3737} 
    3838 
     39/** New methods to find an insert a neighbour in a cell of the source mesh. 
     40 *  return true/false if cell b is a neighbour of a. if "insert" is true, then b will be inserted as a neighbour 
     41 * in cell a . This is needed for 2 order interpolation that need neighboround for gradient computing. 
     42 * A cell is a neighbour if : 
     43 *  - it shares 2 countiguous vertex (ie an edge) with a 
     44 *  - A vertex of b is located on one of an edge of a. 
     45 **/ 
     46bool insertNeighbour( Elt& a, const Elt& b, bool insert ) 
     47{ 
     48  // for now suppose pole -> Oz 
     49  Coord pole(0,0,1) ; 
     50  Coord O, Oa1, Oa2,Ob1,Ob2,V1,V2 ; 
     51  double da,db,alpha,alpha1,alpha2,delta ; 
     52   
     53     
     54  for (int i = 0; i < a.n; i++) 
     55  { 
     56    for (int j = 0; j < b.n; j++) 
     57    { 
     58// share a full edge ? be carefull at the orientation 
     59      assert(squaredist(a.vertex[ i       ], b.vertex[ j       ]) > 1e-10*1e-10 || 
     60             squaredist(a.vertex[(i+1)%a.n], b.vertex[(j+1)%b.n]) > 1e-10*1e-10); 
     61      if (   squaredist(a.vertex[ i       ], b.vertex[ j           ]) < 1e-10*1e-10 && 
     62             squaredist(a.vertex[(i+1)%a.n], b.vertex[(j+b.n-1)%b.n]) < 1e-10*1e-10) 
     63      { 
     64        if (insert) a.neighbour[i] = b.id.ind ; 
     65        return true; 
     66      } 
     67       
     68 
     69// 1 or 2 vertices of b is located on an edge of a 
     70       da=a.d[i] ; 
     71       if (scalarprod(a.edge[i], pole) < 0) da=-da ; 
     72       db=b.d[(j+b.n-1)%b.n] ; 
     73       if (scalarprod(b.edge[(j+b.n-1)%b.n], pole) < 0) db=-db ; 
     74       
     75      if ( fabs(da-db)<1e-10 )  
     76      { 
     77        O=pole*da ; 
     78        Oa1=a.vertex[i]-O ; 
     79        Oa2=a.vertex[(i+1)%a.n]-O ;  
     80        Ob1=b.vertex[j]-O ; 
     81        Ob2=b.vertex[(j+b.n-1)%b.n]-O ; 
     82        V1=crossprod(Oa1,Oa2) ; 
     83        V2=crossprod(Ob1,Ob2) ; 
     84        if (norm(crossprod(V1,V2))/(norm(V1)*norm(V2)) < 1e-10) 
     85        { 
     86          alpha = vectAngle(Oa1,Oa2,V1) ; 
     87          alpha1= vectAngle(Oa1,Ob1,V1) ; 
     88          alpha2= vectAngle(Oa1,Ob2,V1) ; 
     89          delta= alpha2-alpha1 ; 
     90          if (delta >= M_PI) delta=2*M_PI-delta ; 
     91          else if (delta <= -M_PI) delta=2*M_PI+delta ; 
     92           
     93          if (alpha >= 0) 
     94          { 
     95            if (alpha1 > 1e-10 && alpha1 < alpha-1e-10) 
     96            { 
     97              if (alpha2 > 1e-10 && alpha2 < alpha-1e-10) 
     98              { 
     99                assert(delta > 0) ; 
     100                if (insert) 
     101                { 
     102                // insert both 
     103                  a.insert_vertex(i,b.vertex[(j+b.n-1)%b.n]); 
     104                  a.insert_vertex(i,b.vertex[j]); 
     105                  a.neighbour[i+1] = b.id.ind ; 
     106                } 
     107                return true ; 
     108              } 
     109              else 
     110              { 
     111                assert( delta > 0 ) ; 
     112                if (insert) 
     113                { 
     114                //insert alpha1 
     115                  a.insert_vertex(i,b.vertex[j]); 
     116                  a.neighbour[i+1] = b.id.ind ; 
     117                } 
     118                return true ; 
     119              } 
     120            } 
     121            else if (alpha2 > 1e-10 && alpha2 < alpha-1e-10) 
     122            { 
     123              assert( delta > 0 ) ; 
     124              if (insert) 
     125              { 
     126              // insert alpha2 
     127                a.insert_vertex(i,b.vertex[(j+b.n-1)%b.n]); 
     128                a.neighbour[i] = b.id.ind ; 
     129              } 
     130              return true ; 
     131            } 
     132            else 
     133            { 
     134              // nothing to do 
     135            }  
     136 
     137          } 
     138          else  // alpha < 0 
     139          { 
     140            if (alpha1 < -1e-10 && alpha1 > alpha+1e-10) 
     141            { 
     142              if (alpha2 < -1e-10 && alpha2 > alpha+1e-10) 
     143              { 
     144                assert(delta < 0) ; 
     145                if (insert) 
     146                { 
     147                // insert both 
     148                  a.insert_vertex(i,b.vertex[(j+b.n-1)%b.n]); 
     149                  a.insert_vertex(i,b.vertex[j]); 
     150                  a.neighbour[i+1] = b.id.ind ; 
     151                } 
     152                return true ; 
     153              } 
     154              else 
     155              { 
     156                assert(delta < 0) ; 
     157                if (insert) 
     158                { 
     159                //insert alpha1 
     160                  a.insert_vertex(i,b.vertex[j]); 
     161                  a.neighbour[i+1] = b.id.ind ; 
     162                } 
     163                return true ; 
     164              } 
     165            } 
     166            else if (alpha2 < -1e-10 && alpha2 > alpha+1e-10) 
     167            { 
     168              assert(delta < 0) ; 
     169              if (insert) 
     170              { 
     171              // insert alpha2 
     172                a.insert_vertex(i,b.vertex[(j+b.n-1)%b.n]); 
     173                a.neighbour[i] = b.id.ind ; 
     174              } 
     175              return true ; 
     176            } 
     177            else 
     178            { 
     179               // nothing to do 
     180            } 
     181          } 
     182        } 
     183      } 
     184    } 
     185  } 
     186  return false; 
     187} 
    39188 
    40189/** 
     
    44193void set_neighbour(Elt& a, const Elt& b) 
    45194{ 
    46         if (b.id.ind == a.id.ind) return; 
    47         int idx = neighbour_idx(a, b); 
    48         if (idx != NOT_FOUND) 
    49                 a.neighbour[idx] = b.id.ind; 
     195  if (b.id.ind == a.id.ind) return; 
     196/* 
     197  int idx = neighbour_idx(a, b); 
     198  if (idx != NOT_FOUND) 
     199  a.neighbour[idx] = b.id.ind; 
     200*/ 
     201  insertNeighbour(a,b,true) ;  
    50202} 
    51203 
    52204/** return true if `a` and `b` share an edge */ 
    53 bool isNeighbour(const Elt& a, const Elt& b) 
    54 { 
    55         return neighbour_idx(a, b) != NOT_FOUND; 
     205bool isNeighbour(Elt& a, const Elt& b) 
     206{ 
     207        // return neighbour_idx(a, b) != NOT_FOUND; 
     208  return insertNeighbour(a,b,false) ; 
    56209} 
    57210 
  • XIOS/dev/dev_olga/extern/remap/src/intersect.hpp

    r688 r1158  
    22 
    33void set_neighbour(Elt& elt, const Elt& elt2); 
    4 bool isNeighbour(const Elt& elt, const Elt& elt2); 
     4bool isNeighbour(Elt& elt, const Elt& elt2); 
    55 
    66void intersect(Elt *a, Elt *b); 
  • XIOS/dev/dev_olga/extern/remap/src/mapper.cpp

    r923 r1158  
    109109} 
    110110 
    111 vector<double> Mapper::computeWeights(int interpOrder, bool renormalize) 
     111vector<double> Mapper::computeWeights(int interpOrder, bool renormalize, bool quantity) 
    112112{ 
    113113        vector<double> timings; 
     
    152152        if (mpiRank == 0 && verbose) cout << "Remapping..." << endl; 
    153153        tic = cputime(); 
    154         nWeights = remap(&targetElements[0], targetElements.size(), interpOrder, renormalize); 
     154        nWeights = remap(&targetElements[0], targetElements.size(), interpOrder, renormalize, quantity); 
    155155        timings.push_back(cputime() - tic); 
    156156 
     
    166166   @param order is the order of interpolaton (must be 1 or 2). 
    167167*/ 
    168 int Mapper::remap(Elt *elements, int nbElements, int order, bool renormalize) 
     168int Mapper::remap(Elt *elements, int nbElements, int order, bool renormalize, bool quantity) 
    169169{ 
    170170        int mpiSize, mpiRank; 
     
    184184        int **sendElement = new int*[mpiSize]; /* indices of elements required from other rank */ 
    185185        double **recvValue = new double*[mpiSize]; 
     186        double **recvArea = new double*[mpiSize]; 
    186187        Coord **recvGrad = new Coord*[mpiSize]; 
    187188        GloId **recvNeighIds = new GloId*[mpiSize]; /* ids of the of the source neighbours which also contribute through gradient */ 
     
    205206                        sendElement[rank] = new int[nbSendElement[rank]]; 
    206207                        recvValue[rank]   = new double[nbSendElement[rank]]; 
     208                        recvArea[rank]    = new double[nbSendElement[rank]]; 
    207209                        if (order == 2) 
    208210                        { 
     
    234236        int **recvElement = new int*[mpiSize]; 
    235237        double **sendValue = new double*[mpiSize]; 
     238        double **sendArea = new double*[mpiSize]; 
    236239        Coord **sendGrad = new Coord*[mpiSize]; 
    237240        GloId **sendNeighIds = new GloId*[mpiSize]; 
    238         MPI_Request *sendRequest = new MPI_Request[3*mpiSize]; 
    239         MPI_Request *recvRequest = new MPI_Request[3*mpiSize]; 
     241        MPI_Request *sendRequest = new MPI_Request[4*mpiSize]; 
     242        MPI_Request *recvRequest = new MPI_Request[4*mpiSize]; 
    240243        for (int rank = 0; rank < mpiSize; rank++) 
    241244        { 
     
    250253                        recvElement[rank] = new int[nbRecvElement[rank]]; 
    251254                        sendValue[rank]   = new double[nbRecvElement[rank]]; 
     255                        sendArea[rank]   = new double[nbRecvElement[rank]]; 
    252256                        if (order == 2) 
    253257                        { 
     
    263267                } 
    264268        } 
    265         MPI_Status *status = new MPI_Status[3*mpiSize]; 
    266         MPI_Waitall(nbRecvRequest, recvRequest, status); 
     269        MPI_Status *status = new MPI_Status[4*mpiSize]; 
     270         
    267271        MPI_Waitall(nbSendRequest, sendRequest, status); 
     272        MPI_Waitall(nbRecvRequest, recvRequest, status); 
    268273 
    269274        /* for all indices that have been received from requesting ranks: pack values and gradients, then send */ 
     
    278283                        { 
    279284                                sendValue[rank][j] = sstree.localElements[recvElement[rank][j]].val; 
     285                                sendArea[rank][j] = sstree.localElements[recvElement[rank][j]].area; 
    280286                                if (order == 2) 
    281287                                { 
     
    297303                        MPI_Issend(sendValue[rank],  nbRecvElement[rank], MPI_DOUBLE, rank, 0, communicator, &sendRequest[nbSendRequest]); 
    298304                        nbSendRequest++; 
     305                        MPI_Issend(sendArea[rank],  nbRecvElement[rank], MPI_DOUBLE, rank, 0, communicator, &sendRequest[nbSendRequest]); 
     306                        nbSendRequest++; 
    299307                        if (order == 2) 
    300308                        { 
     
    317325                        MPI_Irecv(recvValue[rank],  nbSendElement[rank], MPI_DOUBLE, rank, 0, communicator, &recvRequest[nbRecvRequest]); 
    318326                        nbRecvRequest++; 
     327                        MPI_Irecv(recvArea[rank],  nbSendElement[rank], MPI_DOUBLE, rank, 0, communicator, &recvRequest[nbRecvRequest]); 
     328                        nbRecvRequest++; 
    319329                        if (order == 2) 
    320330                        { 
     
    334344                } 
    335345        } 
     346         
     347        MPI_Waitall(nbSendRequest, sendRequest, status); 
    336348        MPI_Waitall(nbRecvRequest, recvRequest, status); 
    337         MPI_Waitall(nbSendRequest, sendRequest, status); 
     349         
    338350 
    339351        /* now that all values and gradients are available use them to computed interpolated values on target 
     
    357369                        int rank = (*it)->id.rank; 
    358370                        double fk = recvValue[rank][n1]; 
     371                        double srcArea = recvArea[rank][n1]; 
    359372                        double w = (*it)->area; 
     373      if (quantity) w/=srcArea ; 
    360374 
    361375                        /* first order: src value times weight (weight = supermesh area), later divide by target area */ 
    362376                        int kk = (order == 2) ? n1 * (NMAX + 1) : n1; 
    363377                        GloId neighID = recvNeighIds[rank][kk]; 
    364                         wgt_map[neighID] += (*it)->area; 
     378                        wgt_map[neighID] += w; 
    365379 
    366380                        if (order == 2) 
     
    383397    for (map<GloId,double>::iterator it = wgt_map.begin(); it != wgt_map.end(); it++) 
    384398                { 
    385                         this->remapMatrix[i] = (it->second / e.area) / renorm; 
     399      if (quantity)  this->remapMatrix[i] = (it->second ) / renorm; 
     400                        else this->remapMatrix[i] = (it->second / e.area) / renorm; 
    386401                        this->srcAddress[i] = it->first.ind; 
    387402                        this->srcRank[i] = it->first.rank; 
     
    400415                        delete[] sendElement[rank]; 
    401416                        delete[] recvValue[rank]; 
     417                        delete[] recvArea[rank]; 
    402418                        if (order == 2) 
    403419                        { 
     
    410426                        delete[] recvElement[rank]; 
    411427                        delete[] sendValue[rank]; 
     428                        delete[] sendArea[rank]; 
    412429                        if (order == 2) 
    413430                                delete[] sendGrad[rank]; 
  • XIOS/dev/dev_olga/extern/remap/src/mapper.hpp

    r844 r1158  
    3434       /** @param trgElts are the elements of the unstructured target grid 
    3535           Returns the timings for substeps: */ 
    36        vector<double> computeWeights(int interpOrder, bool renormalize=false); 
     36       vector<double> computeWeights(int interpOrder, bool renormalize=false, bool quantity=false); 
    3737       int getNbWeights(void) { return nWeights ; } 
    3838/* 
     
    5151private: 
    5252       /** @return number of weights (local to cpu) */ 
    53        int remap(Elt* elements, int nbElements, int order, bool renormalize=false); 
     53       int remap(Elt* elements, int nbElements, int order, bool renormalize=false, bool quantity=false); 
    5454 
    5555       void buildMeshTopology(); 
  • XIOS/dev/dev_olga/extern/remap/src/tree.cpp

    r951 r1158  
    142142        root->parent = 0; 
    143143        root->leafCount = 0; 
    144         root->centre = ORIGIN; 
     144// initialize root node on the sphere 
     145  root->centre.x=1 ; root->centre.y=0 ; root->centre.z=0 ;  
    145146        root->radius = 0.; 
    146147        root->reinserted = false; 
  • XIOS/dev/dev_olga/extern/remap/src/triple.cpp

    r849 r1158  
    124124} 
    125125 
     126// return oriented vector angle in range [-pi..pi], pole must be orthogonal to a and b 
     127double vectAngle(const Coord &a, const Coord &b, const Coord &pole) 
     128{  
     129  double nab = 1./(norm(a)*norm(b)) ; 
     130   
     131  Coord a_cross_b=crossprod(a, b)*nab ; 
     132  double sinVect ; 
     133  if (scalarprod(a_cross_b, pole) >= 0) sinVect=norm(a_cross_b) ; 
     134  else sinVect=-norm(a_cross_b) ; 
     135  double cosVect=scalarprod(a,b)*nab ; 
     136 
     137  return atan2(sinVect,cosVect) ; 
    126138} 
     139 
     140} 
  • XIOS/dev/dev_olga/extern/remap/src/triple.hpp

    r688 r1158  
    121121 
    122122double angle(const Coord &a, const Coord &b, const Coord &pole); 
     123 
     124// return oriented vector angle in range [-pi..pi], pole must be orthogonal to a and b 
     125double vectAngle(const Coord &a, const Coord &b, const Coord &pole) ; 
     126 
    123127void print_Coord(Coord &p); 
    124128 
  • XIOS/dev/dev_olga/src/array_new.hpp

    r731 r1158  
    302302      } 
    303303 
     304      bool operator== (const CArray<T_numtype,N_rank>& array) 
     305      { 
     306        size_t nbThis = this->numElements(); 
     307        size_t nbArr  = array.numElements(); 
     308        if (nbThis != nbArr) return false; 
     309        typename Array<T_numtype,N_rank>::const_iterator itx=array.begin(), itxe=array.end(), ity=this->begin() ; 
     310        for(;itx!=itxe;++itx,++ity) if (*itx!=*ity) return false ; 
     311        return true; 
     312      } 
     313 
     314      bool operator== (const Array<T_numtype,N_rank>& array) 
     315      { 
     316        return ((*this) == (dynamic_cast<const CArray<T_numtype,N_rank>& >(array))); 
     317      } 
     318 
    304319      void resize(int extent) 
    305320      { 
     
    552567  }; 
    553568 
     569 
     570#define macro(NRANK)\ 
     571\ 
     572  template <>\ 
     573  inline size_t CArray<StdString,NRANK>::size(void) const\ 
     574  {\ 
     575    size_t size=(1 + NRANK) * sizeof(int) ;\ 
     576    Array<StdString,NRANK>::const_iterator it, itb=this->begin(), ite=this->end() ;\ 
     577\ 
     578    for(it=itb;it!=ite;++it)\ 
     579    {\ 
     580      size+= sizeof(size_t) ;\ 
     581      size+= (*it).size();\ 
     582    } \ 
     583    return size ;\ 
     584  }\ 
     585\ 
     586/* for array string this function is an evaluation of maximum size of the array, considering stringArrayLen is the maximum size of the strings*/ \ 
     587  template <>\ 
     588  inline size_t CArray<StdString,NRANK>::size(sizeType numElements)\ 
     589  {\ 
     590    return (NRANK + 1) * sizeof(int) + numElements * stringArrayLen;\ 
     591  }\ 
     592  \ 
     593  template <>\ 
     594  inline bool CArray<StdString,NRANK>::toBuffer(CBufferOut& buffer) const\ 
     595  {\ 
     596    bool ret;\ 
     597    ret =  buffer.put(this->dimensions());\ 
     598    ret &= buffer.put(this->shape().data(), this->dimensions());\ 
     599\ 
     600    Array<StdString,NRANK>::const_iterator it, itb=this->begin(), ite=this->end() ;\ 
     601\ 
     602    for(it=itb;it!=ite;++it)\ 
     603    {\ 
     604      ret &= buffer.put((*it).size()) ;\ 
     605      ret &= buffer.put((*it).data(),(*it).size());\ 
     606    } \ 
     607    return ret;\ 
     608  }\ 
     609\ 
     610  template <>\ 
     611  inline bool CArray<StdString,NRANK>::fromBuffer(CBufferIn& buffer)\ 
     612  {\ 
     613     bool ret;\ 
     614     int numDim;\ 
     615     TinyVector<int,NRANK> vect;\ 
     616     size_t ne;\ 
     617\ 
     618     ret =  buffer.get(numDim);\ 
     619     ret &= buffer.get(vect.data(), NRANK);\ 
     620     this->resize(vect);\ 
     621\ 
     622     Array<StdString,NRANK>::iterator it, itb=this->begin(), ite=this->end() ;\ 
     623     for(it=itb;it!=ite;++it)\ 
     624     {\ 
     625       ret &= buffer.get(ne) ;\ 
     626       char* str = new char[ne] ;\ 
     627       ret &= buffer.get(str, ne);\ 
     628       *it = string(str,ne) ;\ 
     629       delete [] str ;\ 
     630     }\ 
     631     initialized = true;\ 
     632     return ret;\ 
     633  } 
     634macro(1) 
     635macro(2) 
     636macro(3) 
     637macro(4) 
     638macro(5) 
     639macro(6) 
     640macro(7) 
     641 
     642#undef macro 
     643 
    554644  template <typename T_numtype,int N_rank> inline CBufferOut& operator<<(CBufferOut& buffer, const CArray<T_numtype,N_rank>& array) 
    555645  { 
  • XIOS/dev/dev_olga/src/attribute.cpp

    r680 r1158  
    66namespace xios 
    77{ 
     8 
     9      const StdString CAttribute::resetInheritanceStr("_reset_") ; 
     10 
    811      /// ////////////////////// Définitions ////////////////////// /// 
    912      CAttribute::CAttribute(const StdString & id) 
    10          : CObject(id), CBaseType() 
     13         : CObject(id), CBaseType(), _canInherite(true) 
    1114//         , value() 
    1215      { /* Ne rien faire de plus */ } 
    1316/* 
    14       CAttribute::CAttribute(const CAttribute & attribut) 
    15          : CObject(attribut.getId()),CBaseType() 
    16       {  
    17  //        this->value = attribut.getAnyValue();  
    18       } 
    1917*/       
    2018      CAttribute::~CAttribute(void) 
     
    2220       
    2321      ///-------------------------------------------------------------- 
    24 /* 
    25       const boost::any & CAttribute::getAnyValue(void) const 
    26       {  
    27          return (this->value);  
    28       } 
    2922 
    30  
    31       void CAttribute::setAnyValue(const boost::any & value) 
    32       {  
    33          this->value = value;  
    34       } 
    35        
    36       void CAttribute::clear(void) 
    37       { 
    38          this->value = boost::any();  
    39       } 
    40  
    41       //--------------------------------------------------------------- 
    42  
    43       bool CAttribute::isEmpty(void) const 
    44       {  
    45          return (this->value.empty());  
    46       } 
    47 */ 
    4823      const StdString & CAttribute::getName(void) const 
    4924      {  
     
    7954      ///-------------------------------------------------------------- 
    8055 
    81  
    8256      CMessage& operator<<(CMessage& msg,CAttribute& type) 
    8357      { 
  • XIOS/dev/dev_olga/src/attribute.hpp

    r1025 r1158  
    1616{ 
    1717      /// ////////////////////// Déclarations ////////////////////// /// 
     18   /*! 
     19   \class CAttribute 
     20      The fundamental class which describes the attributes of other different class in XIOS. 
     21      This class only plays a role of interface, its class child will have specific implelemtation corresponding to type of attribute 
     22   */ 
    1823      class CAttribute : public CObject, public virtual CBaseType 
    1924      { 
     
    2429            /// Constructeurs /// 
    2530            explicit CAttribute(const StdString & id); 
    26 //            CAttribute(const CAttribute & attribut); 
    27 //            CAttribute(const CAttribute * const attribut); // Not implemented. 
    2831 
    2932            /// Accesseurs /// 
    3033            const StdString & getName(void) const; 
    31 //            const boost::any & getAnyValue(void) const; 
    32 //            template <typename T> inline T getValue(void) const; 
    33 //            template <typename T> inline T* getRef(void); 
    3434 
    35 //            /// Mutateurs /// 
    36 //            template <typename T> inline void setValue(const T & value); 
    37 //            void setAnyValue(const boost::any & value); 
    38 //            void clear(void); 
    39  
    40             /// Test /// 
    41 //            bool isEmpty(void) const; 
    42 //            template <typename T> inline bool isType(void) const; 
    4335            virtual void set(const CAttribute& ) =0 ; 
    4436            virtual void reset(void ) =0 ; 
     
    4941            virtual StdString toString(void) const = 0; 
    5042            virtual void fromString(const StdString & str) = 0; 
    51  
    52 //            virtual void toBinary  (StdOStream & os) const = 0; 
    53 //            virtual void fromBinary(StdIStream & is) = 0; 
     43            virtual bool isEqual(const CAttribute& ) = 0; 
    5444 
    5545            //! Returns true if and only if the attribute should be publicly exposed in the API 
     
    5949            virtual bool doSend() const { return true; } 
    6050 
     51            /* 
     52              Groupd of functions to generate C and Fortran interface  
     53            */ 
    6154            virtual void generateCInterface(ostream& oss, const string& className) = 0 ; 
    6255            virtual void generateCInterfaceIsDefined(ostream& oss, const string& className) ; 
     
    7568            virtual void setInheritedValue(const CAttribute& ) = 0 ; 
    7669            virtual bool hasInheritedValue(void) const = 0; 
    77              
    78          protected : 
    7970 
    80             /// Constructeurs /// 
    81 //            CAttribute(void);  // Not implemented. 
    82  
    83             /// Propriété /// 
    84 //            boost::any value; 
     71            bool canInherite(void) {return _canInherite ;} 
     72         protected :  
     73            bool _canInherite ; 
     74            static const StdString resetInheritanceStr ;  
    8575 
    8676      }; // class CAttribute 
    8777 
    88       /// ////////////////////// Définitions ////////////////////// /// 
    89 /* 
    90       template <typename T> 
    91          T CAttribute::getValue(void) const 
    92       {  
    93          return (boost::any_cast<T>(this->value));  
    94       } 
    95  
    96       template <typename T> 
    97          T* CAttribute::getRef(void) 
    98       {  
    99          return (boost::any_cast<T>(&value));  
    100       } 
    101  
    102       template <typename T> 
    103          void CAttribute::setValue(const T & value) 
    104       {  
    105          this->value = value;  
    106       } 
    107  
    108       template<typename T> 
    109          bool CAttribute::isType(void) const 
    110       {  
    111          return (this->value.type() == typeid(T));  
    112       } 
    113 */ 
    114   
    11578   CMessage& operator<<(CMessage& msg,CAttribute& type) ; 
    11679   CMessage& operator<<(CMessage& msg, const CAttribute&  type) ; 
  • XIOS/dev/dev_olga/src/attribute_array.hpp

    r780 r1158  
    1313{ 
    1414      /// ////////////////////// Déclarations ////////////////////// /// 
     15      /*! 
     16        \class CAttributeArray 
     17        This class implements the attribute representing array of value 
     18      */ 
    1519      template <typename T_numtype, int N_rank> 
    1620         class CAttributeArray : public CAttribute, public CArray<T_numtype, N_rank> 
     
    1923 
    2024           using CArray<T_numtype,N_rank>::operator = ; 
    21 //           using Array<T_numtype,N_rank>::operator = ; 
    2225 
    2326            /// Constructeurs /// 
     
    4043            CArray<T_numtype, N_rank> getInheritedValue(void) const ; 
    4144            bool hasInheritedValue(void) const; 
     45             
     46            bool isEqual(const CAttributeArray& attr); 
     47            bool isEqual(const CAttribute& attr); 
    4248 
    4349            /// Destructeur /// 
     
    4753            /// Autre /// 
    4854            virtual string toString(void) const { return _toString();} 
    49             virtual void fromString(const StdString & str) { _fromString(str);} 
     55            virtual void fromString(const StdString & str) { if (str==resetInheritanceStr) { reset(); _canInherite=false ;}  else _fromString(str);} 
    5056            virtual bool toBuffer  (CBufferOut& buffer) const { return _toBuffer(buffer);} 
    5157            virtual bool fromBuffer(CBufferIn& buffer) { return _fromBuffer(buffer); } 
     
    6066            virtual void generateFortranInterfaceGetDeclaration(ostream& oss,const string& className) ; 
    6167 
    62  
    63          protected : 
    64  
    65             /// Constructeurs /// 
    66  
    6768         private : 
    6869          CArray<T_numtype, N_rank> inheritedValue ; 
  • XIOS/dev/dev_olga/src/attribute_array_decl.cpp

    r932 r1158  
    1717  template class CAttributeArray<bool,6> ; 
    1818  template class CAttributeArray<bool,7> ; 
     19  template class CAttributeArray<StdString,1> ; 
     20  template class CAttributeArray<StdString,2> ; 
    1921} 
  • XIOS/dev/dev_olga/src/attribute_array_impl.hpp

    r778 r1158  
    8383    void CAttributeArray<T_numtype,N_rank>::setInheritedValue(const CAttributeArray& attr) 
    8484    { 
    85       if (this->isEmpty() && attr.hasInheritedValue()) 
     85      if (this->isEmpty() && _canInherite && attr.hasInheritedValue()) 
    8686      { 
    8787        inheritedValue.resize(attr.shape()) ; 
     
    103103    } 
    104104 
     105    template <typename T_numtype, int N_rank> 
     106    bool CAttributeArray<T_numtype,N_rank>::isEqual(const CAttributeArray& attr) 
     107    { 
     108      return ((dynamic_cast<CArray<T_numtype,N_rank>& >(*this)) == (dynamic_cast<const CArray<T_numtype,N_rank>& >(attr)));       
     109    } 
     110 
     111    template <typename T_numtype, int N_rank> 
     112    bool CAttributeArray<T_numtype,N_rank>::isEqual(const CAttribute& attr) 
     113    { 
     114      return ((*this) == (dynamic_cast<const CAttributeArray<T_numtype,N_rank>& >(attr)));       
     115    } 
    105116 
    106117    template <typename T_numtype, int N_rank> 
  • XIOS/dev/dev_olga/src/attribute_enum.hpp

    r591 r1158  
    1515{ 
    1616      /// ////////////////////// Déclarations ////////////////////// /// 
     17        /*! 
     18        \class CAttributeEnum 
     19        This class implements the attribute representing enumeration 
     20      */ 
    1721      template <class T> 
    1822         class CAttributeEnum : public CAttribute, public CEnum<T> 
     
    4751            bool hasInheritedValue(void) const;           
    4852           
     53            bool isEqual(const CAttributeEnum& attr ); 
     54            bool isEqual(const CAttribute& attr ); 
     55 
    4956            /// Destructeur /// 
    5057            virtual ~CAttributeEnum(void) { } 
     
    5562            /// Autre /// 
    5663            virtual StdString toString(void) const { return _toString();} 
    57             virtual void fromString(const StdString & str) { _fromString(str);} 
     64            virtual void fromString(const StdString & str) { if (str==resetInheritanceStr) { reset(); _canInherite=false ;}  else _fromString(str);} 
    5865 
    5966            virtual bool toBuffer  (CBufferOut& buffer) const { return _toBuffer(buffer);}  
     
    6976            virtual void generateFortranInterfaceGetDeclaration(ostream& oss,const string& className) ; 
    7077 
    71        
    72          protected : 
    73  
    74             /// Constructeurs /// 
    75 //            CAttributeTemplate(void); // Not implemented. 
    7678         private : 
    7779          StdString _toString(void) const; 
  • XIOS/dev/dev_olga/src/attribute_enum_impl.hpp

    r580 r1158  
    8888  void CAttributeEnum<T>::setInheritedValue(const CAttributeEnum& attr) 
    8989  { 
    90     if (this->isEmpty() && attr.hasInheritedValue()) inheritedValue.set(attr.getInheritedValue()); 
     90    if (this->isEmpty() && _canInherite && attr.hasInheritedValue()) inheritedValue.set(attr.getInheritedValue()); 
    9191  } 
    9292 
     
    109109  { 
    110110    return !this->isEmpty() || !inheritedValue.isEmpty(); 
     111  } 
     112 
     113  template <class T> 
     114  bool CAttributeEnum<T>::isEqual(const CAttribute& attr) 
     115  { 
     116    return (this->isEqual(dynamic_cast<const CAttributeEnum<T>& >(attr))); 
     117  } 
     118 
     119  template <class T> 
     120  bool CAttributeEnum<T>::isEqual(const CAttributeEnum& attr) 
     121  { 
     122    return ((dynamic_cast<const CEnum<T>& >(*this)) == (dynamic_cast<const CEnum<T>& >(attr))); 
    111123  } 
    112124 
  • XIOS/dev/dev_olga/src/attribute_map.cpp

    r1009 r1158  
    1616      ///-------------------------------------------------------------- 
    1717 
     18      /*! 
     19         Clear all attributes of an object and reset them to empty state 
     20      */ 
    1821      void CAttributeMap::clearAllAttributes(void) 
    1922      { 
     
    2932      //--------------------------------------------------------------- 
    3033 
     34      /* 
     35        Clear an attribute and reset its value 
     36        \param[in] key id of attribute 
     37      */ 
    3138      void CAttributeMap::clearAttribute(const StdString& key) 
    3239      { 
     
    3643      //--------------------------------------------------------------- 
    3744 
     45      /*! 
     46        Set an attribute of certain id with a value 
     47        \param[in] key id of the attribute 
     48        \param[in] attr value of attribute 
     49      */ 
    3850      void CAttributeMap::setAttribute(const StdString& key, CAttribute* const attr) 
    3951      { 
     
    5062      //--------------------------------------------------------------- 
    5163 
     64      /*! 
     65        Subscript operator. Return attribute with a specific id 
     66      */ 
    5267      CAttribute* CAttributeMap::operator[](const StdString& key) 
    5368      { 
     
    103118         } 
    104119      } 
     120 
     121      /*! 
     122         Compare two attribute maps 
     123         \param [in] another attribute map to compare 
     124         \param [in] excludedAttrs attribute to be excluded from comparasion 
     125         \return true if these two maps have same attributes whose value are identical 
     126      */ 
     127      bool CAttributeMap::isEqual(const CAttributeMap& another, const vector<StdString>& excludedAttrs) 
     128      { 
     129         SuperClassMap::const_iterator itb = another.begin(), ite = another.end(), it; 
     130         for (it = itb; it !=ite; ++it) 
     131         { 
     132            bool excluded = false; 
     133            for (int idx = 0; idx < excludedAttrs.size(); ++idx) 
     134            { 
     135               if (0 == (*it).first.compare(excludedAttrs[idx])) 
     136               { 
     137                 excluded = true; 
     138                 break; 
     139               }  
     140            } 
     141 
     142            if (!excluded) 
     143            { 
     144              if ((*it).first.compare(StdString("id")) != 0 && (*it).first.compare(StdString("src")) != 0) 
     145              { 
     146                if (this->hasAttribute(it->first)) 
     147                {  
     148                  if (!((*it).second->isEqual(*(*this)[it->first]))) 
     149                  { 
     150                    return false; 
     151                  } 
     152                } 
     153                else 
     154                  return false; 
     155              } 
     156            } 
     157         } 
     158 
     159         return true; 
     160      } 
     161 
    105162 
    106163      //--------------------------------------------------------------- 
     
    129186               if (apply) 
    130187               { 
    131                  if (currentAtt->isEmpty() && !el.second->isEmpty()) 
     188                 if (currentAtt->isEmpty() && currentAtt->canInherite() && !el.second->isEmpty()) 
    132189                 { 
    133190                    this->setAttribute(el.first, el.second); 
     
    139196      } 
    140197 
     198      /*! 
     199        Duplicate attribute map with a specific attribute map. 
     200        Copy all non-empty attribute of the current attribute map 
     201        \param [in] srcAttr attribute map which is copied from. 
     202      */ 
    141203      void CAttributeMap::duplicateAttributes(const CAttributeMap* const srcAttr) 
    142204      { 
     
    216278      } 
    217279 */ 
     280       
    218281      void CAttributeMap::generateCInterface(ostream& oss, const string& className) 
    219282      { 
  • XIOS/dev/dev_olga/src/attribute_map.hpp

    r1009 r1158  
    1212{ 
    1313      /// ////////////////////// Déclarations ////////////////////// /// 
     14      /*! 
     15        \class CAttributeMap 
     16        This class represents the set of attributes which an object can have. 
     17        Each attribute in the set is represented by an unique id. 
     18      */ 
     19 
    1420      class CAttributeMap 
    1521         : public xios_map<StdString, CAttribute*> 
     
    3440 
    3541            void clearAttribute(const StdString& key); 
     42            bool isEqual(const CAttributeMap& another, const vector<StdString>& excludedAttrs); 
    3643 
    3744            /// Destructeur /// 
     
    7481      inline bool CAttributeMap::hasAttribute(const StdString& key) const 
    7582      { 
    76         return (this->find(key) != this->end()); 
     83         return (this->find(key) != this->end()); 
    7784      } 
    7885 
  • XIOS/dev/dev_olga/src/attribute_template.hpp

    r780 r1158  
    1616{ 
    1717      /// ////////////////////// Déclarations ////////////////////// /// 
     18  /*! 
     19    \class CAttributeTemplate 
     20    The class implements attribute of some basic types 
     21  */ 
    1822      template <class T> 
    1923         class CAttributeTemplate : public CAttribute, public CType<T> 
     
    5458            bool hasInheritedValue(void) const; 
    5559 
     60            bool isEqual_(const CAttributeTemplate& attr ); 
     61            bool isEqual(const CAttribute& attr ); 
     62 
    5663            /// Destructeur /// 
    5764            virtual ~CAttributeTemplate(void) { } 
     
    6269            /// Autre /// 
    6370            virtual StdString toString(void) const { return _toString();} 
    64             virtual void fromString(const StdString & str) { _fromString(str);} 
     71            virtual void fromString(const StdString & str) { if (str==resetInheritanceStr) { reset(); _canInherite=false ;}  else _fromString(str);} 
    6572//            virtual CAttributeTemplate* clone() const {} 
    6673//            virtual void toBinary  (StdOStream & os) const; 
  • XIOS/dev/dev_olga/src/attribute_template_impl.hpp

    r778 r1158  
    7171         T CAttributeTemplate<T>::getValue(void) const 
    7272      { 
    73          return CType<T>::get() ; 
    74 /* 
    75          if (SuperClass::isEmpty()) 
    76          { 
    77             ERROR("T CAttributeTemplate<T>::getValue(void) const", 
    78                   << "[ id = " << this->getId() << "]" 
    79                   << " L'attribut est requis mais n'est pas défini !"); 
    80           } 
    81          return (SuperClass::getValue<T>()); 
     73        return CType<T>::get() ; 
     74/* 
     75        if (SuperClass::isEmpty()) 
     76        { 
     77           ERROR("T CAttributeTemplate<T>::getValue(void) const", 
     78                 << "[ id = " << this->getId() << "]" 
     79                 << " L'attribut est requis mais n'est pas défini !"); 
     80         } 
     81        return (SuperClass::getValue<T>()); 
    8282*/ 
    8383      } 
     
    125125    void CAttributeTemplate<T>::setInheritedValue(const CAttributeTemplate& attr) 
    126126    { 
    127       if (this->isEmpty() && attr.hasInheritedValue()) inheritedValue.set(attr.getInheritedValue()) ; 
     127      if (this->isEmpty() && _canInherite && attr.hasInheritedValue()) inheritedValue.set(attr.getInheritedValue()) ; 
    128128    } 
    129129 
     
    139139    { 
    140140      return !this->isEmpty() || !inheritedValue.isEmpty() ; 
     141    } 
     142 
     143    template <class T> 
     144    bool CAttributeTemplate<T>::isEqual(const CAttribute& attr) 
     145    { 
     146      const CAttributeTemplate<T>& tmp = dynamic_cast<const CAttributeTemplate<T>& >(attr); 
     147      return this->isEqual_(tmp); 
     148    } 
     149 
     150    template <class T> 
     151    bool CAttributeTemplate<T>::isEqual_(const CAttributeTemplate& attr) 
     152    { 
     153      if ((!this->hasInheritedValue() && !attr.hasInheritedValue())) 
     154          return true; 
     155      if (this->hasInheritedValue() && attr.hasInheritedValue()) 
     156          return (this->getInheritedValue() == attr.getInheritedValue()); 
     157      else  
     158        return false; 
    141159    } 
    142160 
  • XIOS/dev/dev_olga/src/client.cpp

    r1152 r1158  
    1818    MPI_Comm CClient::interComm ; 
    1919    std::list<MPI_Comm> CClient::contextInterComms; 
    20     int CClient::serverLeader; 
     20    int CClient::serverLeader ; 
    2121    bool CClient::is_MPI_Initialized ; 
    2222    int CClient::rank_ = INVALID_RANK; 
     
    5454          } 
    5555          CTimer::get("XIOS").resume() ; 
    56           CTimer::get("XIOS init").resume() ; 
     56          CTimer::get("XIOS init/finalize").resume() ; 
    5757          boost::hash<string> hashString ; 
    5858 
    59           unsigned long hashClient = hashString(codeId) ; 
    60           unsigned long hashServer = hashString(CXios::xiosCodeId); 
    61 //          unsigned long hashServer = hashString(CXios::xiosCodeIdPrm); 
     59          unsigned long hashClient=hashString(codeId) ; 
     60          unsigned long hashServer=hashString(CXios::xiosCodeId) ; 
    6261          unsigned long* hashAll ; 
    6362          int size ; 
     
    7170          hashAll=new unsigned long[size] ; 
    7271 
    73           MPI_Allgather(&hashClient, 1, MPI_LONG, hashAll, 1, MPI_LONG, CXios::globalComm) ; 
     72          MPI_Allgather(&hashClient,1,MPI_LONG,hashAll,1,MPI_LONG,CXios::globalComm) ; 
    7473 
    7574          map<unsigned long, int> colors ; 
     
    9089          for (i=0; i < size; ++i) 
    9190          { 
    92             if (hashAll[i] == hashString(CXios::xiosCodeId)) 
     91            if (hashServer == hashAll[i]) 
    9392            { 
    9493              CXios::setUsingServer(); 
     
    148147 
    149148        CTimer::get("XIOS").resume() ; 
    150         CTimer::get("XIOS init").resume() ; 
     149        CTimer::get("XIOS init/finalize").resume() ; 
    151150 
    152151        if (CXios::usingServer) 
     
    216215 
    217216        int messageSize=msg.size() ; 
    218         void * buff = new char[messageSize] ; 
    219         CBufferOut buffer(buff,messageSize) ; 
     217        char * buff = new char[messageSize] ; 
     218        CBufferOut buffer((void*)buff,messageSize) ; 
    220219        buffer<<msg ; 
    221220 
    222         MPI_Send(buff, buffer.count(), MPI_CHAR, serverLeader, 1, CXios::globalComm) ; 
    223         MPI_Intercomm_create(contextComm, 0, CXios::globalComm, serverLeader, 10+globalRank, &contextInterComm) ; 
     221        MPI_Send((void*)buff,buffer.count(),MPI_CHAR,serverLeader,1,CXios::globalComm) ; 
     222 
     223        MPI_Intercomm_create(contextComm,0,CXios::globalComm,serverLeader,10+globalRank,&contextInterComm) ; 
    224224        info(10)<<"Register new Context : "<<id<<endl ; 
    225225        MPI_Comm inter ; 
     
    257257      MPI_Comm_free(&intraComm); 
    258258 
    259       CTimer::get("XIOS finalize").suspend() ; 
     259      CTimer::get("XIOS init/finalize").suspend() ; 
    260260      CTimer::get("XIOS").suspend() ; 
    261261 
     
    267267       
    268268      info(20) << "Client side context is finalized"<<endl ; 
     269      report(0) <<" Performance report : Whole time from XIOS init and finalize: "<< CTimer::get("XIOS init/finalize").getCumulatedTime()<<" s"<<endl ; 
    269270      report(0) <<" Performance report : total time spent for XIOS : "<< CTimer::get("XIOS").getCumulatedTime()<<" s"<<endl ; 
    270271      report(0)<< " Performance report : time spent for waiting free buffer : "<< CTimer::get("Blocking time").getCumulatedTime()<<" s"<<endl ; 
    271       report(0)<< " Performance report : Ratio : "<< CTimer::get("Blocking time").getCumulatedTime()/CTimer::get("XIOS").getCumulatedTime()*100.<<" %"<<endl ; 
     272      report(0)<< " Performance report : Ratio : "<< CTimer::get("Blocking time").getCumulatedTime()/CTimer::get("XIOS init/finalize").getCumulatedTime()*100.<<" %"<<endl ; 
    272273      report(0)<< " Performance report : This ratio must be close to zero. Otherwise it may be usefull to increase buffer size or numbers of server"<<endl ; 
    273274//      report(0)<< " Memory report : Current buffer_size : "<<CXios::bufferSize<<endl ; 
    274275      report(0)<< " Memory report : Minimum buffer size required : " << CClientBuffer::maxRequestSize << " bytes" << endl ; 
    275276      report(0)<< " Memory report : increasing it by a factor will increase performance, depending of the volume of data wrote in file at each time step of the file"<<endl ; 
    276  
     277      report(100)<<CTimer::getAllCumulatedTime()<<endl ; 
    277278   } 
    278279 
  • XIOS/dev/dev_olga/src/client.hpp

    r1148 r1158  
    1111      public: 
    1212        static void initialize(const string& codeId, MPI_Comm& localComm, MPI_Comm& returnComm); 
    13  
    1413        static void finalize(void); 
    1514        static void registerContext(const string& id, MPI_Comm contextComm); 
  • XIOS/dev/dev_olga/src/client_client_dht_template_impl.hpp

    r1030 r1158  
    307307 
    308308  indexToInfoMappingLevel_.swap(indexToInfoMapping); 
    309  
    310309  if (0 != recvNbIndexCount) delete [] recvIndexBuff; 
    311310  for (boost::unordered_map<int,size_t*>::const_iterator it = client2ClientIndex.begin(); 
  • XIOS/dev/dev_olga/src/client_server_mapping.hpp

    r1030 r1158  
    2626public: 
    2727  typedef boost::unordered_map<int, std::vector<size_t> > GlobalIndexMap; 
    28 //  typedef boost::map<int, std::vector<size_t> > GlobalIndexMap; 
    2928  public: 
    3029    /** Default constructor */ 
  • XIOS/dev/dev_olga/src/config/axis_attribute.conf

    r1025 r1158  
    66 
    77DECLARE_ATTRIBUTE(int,       n_glo) 
    8 DECLARE_ENUM2(positive, up, down)                
     8DECLARE_ENUM2(positive, up, down) 
    99 
    1010/* GLOBAL */ 
     
    2929DECLARE_ARRAY(bool, 1 , mask) 
    3030DECLARE_ARRAY(double, 2 , bounds) 
     31DECLARE_ATTRIBUTE(int,       prec) 
     32DECLARE_ARRAY(StdString    ,1    , label) 
  • XIOS/dev/dev_olga/src/config/domain_attribute.conf

    r1025 r1158  
    5353DECLARE_ENUM4(type,rectilinear,curvilinear,unstructured, gaussian) 
    5454DECLARE_ATTRIBUTE(StdString, domain_ref) 
     55DECLARE_ATTRIBUTE(int,       prec) 
  • XIOS/dev/dev_olga/src/config/domain_attribute_private.conf

    r1099 r1158  
    1414DECLARE_ARRAY_PRIVATE(double, 1, latvalue_rectilinear_read_from_file) 
    1515 
     16// Array contain whole value (non distributed) of longitude and latitude of curvilinear read from a file 
     17DECLARE_ARRAY_PRIVATE(double, 2, lonvalue_curvilinear_read_from_file) 
     18DECLARE_ARRAY_PRIVATE(double, 2, latvalue_curvilinear_read_from_file) 
     19DECLARE_ARRAY_PRIVATE(double, 3, bounds_lonvalue_curvilinear_read_from_file) 
     20DECLARE_ARRAY_PRIVATE(double, 3, bounds_latvalue_curvilinear_read_from_file) 
     21 
     22// Array contain whole value (non distributed) of longitude and latitude of unstructured read from a file 
     23DECLARE_ARRAY_PRIVATE(double, 1, lonvalue_unstructured_read_from_file) 
     24DECLARE_ARRAY_PRIVATE(double, 1, latvalue_unstructured_read_from_file) 
     25DECLARE_ARRAY_PRIVATE(double, 2, bounds_lonvalue_unstructured_read_from_file) 
     26DECLARE_ARRAY_PRIVATE(double, 2, bounds_latvalue_unstructured_read_from_file) 
     27 
    1628DECLARE_ATTRIBUTE_PRIVATE(int,  global_zoom_ibegin) 
    1729DECLARE_ATTRIBUTE_PRIVATE(int,  global_zoom_ni) 
  • XIOS/dev/dev_olga/src/config/expand_domain_attribute.conf

    r941 r1158  
    22 
    33DECLARE_ENUM2(type,node,edge) 
     4 
     5// Flag to determine if domain expension should be periodic (and in which direction) 
     6DECLARE_ATTRIBUTE(bool,      i_periodic) 
     7DECLARE_ATTRIBUTE(bool,      j_periodic) 
  • XIOS/dev/dev_olga/src/config/file_attribute.conf

    r983 r1158  
    1414DECLARE_ENUM2(format,        netcdf4, netcdf4_classic) 
    1515DECLARE_ENUM2(convention,    CF, UGRID) 
     16DECLARE_ATTRIBUTE(StdString, convention_str) 
    1617DECLARE_ENUM2(par_access,    collective, independent) 
    1718DECLARE_ATTRIBUTE(bool,      append) 
    1819DECLARE_ENUM2(mode,          read, write) 
    19 DECLARE_ENUM4(time_counter,  centered, instant, record, none) 
     20DECLARE_ENUM7(time_counter,  centered, instant, record, exclusive, centered_exclusive, instant_exclusive, none) 
    2021DECLARE_ATTRIBUTE(StdString, time_counter_name) 
     22DECLARE_ENUM2(time_units, seconds, days) 
    2123DECLARE_ATTRIBUTE(int,       record_offset) 
    2224DECLARE_ATTRIBUTE(bool,      cyclic) 
    2325 
    2426DECLARE_ATTRIBUTE(int,       compression_level) 
    25 DECLARE_ATTRIBUTE(bool,      coupler) 
    2627 
    2728DECLARE_ENUM4(timeseries,    none, only, both, exclusive) 
    2829DECLARE_ATTRIBUTE(StdString, ts_prefix) 
    29  
     30DECLARE_ATTRIBUTE(StdString, time_stamp_name) 
     31DECLARE_ATTRIBUTE(StdString, time_stamp_format) 
     32DECLARE_ATTRIBUTE(StdString, uuid_name) 
     33DECLARE_ATTRIBUTE(StdString, uuid_format) 
  • XIOS/dev/dev_olga/src/config/interpolate_domain_attribute.conf

    r1021 r1158  
    11/* GLOBAL */ 
    2 DECLARE_ATTRIBUTE(StdString, file) 
    32DECLARE_ATTRIBUTE(int, order) 
    43DECLARE_ATTRIBUTE(bool, renormalize) 
     4DECLARE_ATTRIBUTE(bool, quantity) 
    55 
    66/* Write interpolation weights into file */ 
  • XIOS/dev/dev_olga/src/config/scalar_attribute.conf

    r887 r1158  
    99 
    1010DECLARE_ATTRIBUTE(StdString, scalar_ref) 
     11DECLARE_ATTRIBUTE(int, prec) 
  • XIOS/dev/dev_olga/src/config/var_attribute.conf

    r527 r1158  
    11DECLARE_TYPE(type) 
    22DECLARE_ATTRIBUTE(StdString, name) 
     3DECLARE_ENUM4(ts_target, file, field, both, none) 
  • XIOS/dev/dev_olga/src/context_client.cpp

    r1139 r1158  
    5252          ranksServerLeader.push_back(rankStart + i); 
    5353 
    54         ranksServerNotLeader.resize(0);      } 
     54        ranksServerNotLeader.resize(0); 
     55      } 
    5556      else 
    5657      { 
     
    125126     * Send the temporarily buffered event (if any). 
    126127     * 
    127      * \return true if a temporarily buffered event could be sent, false otherwise 
     128     * \return true if a temporarily buffered event could be sent, false otherwise  
    128129     */ 
    129130    bool CContextClient::sendTemporarilyBufferedEvent() 
     
    171172      } 
    172173    } 
    173  
    174174 
    175175    /*! 
     
    323323   } 
    324324 
    325    /*! 
    326     Get leading server in the group of connected server 
    327     \return ranks of leading servers 
    328     */ 
    329     const std::list<int>& CContextClient::getRanksServerNotLeader(void) const 
    330     { 
    331       return ranksServerNotLeader; 
    332     } 
    333  
    334     /*! 
    335     Check if client connects to leading server 
    336     \return connected(true), not connected (false) 
    337     */ 
    338     bool CContextClient::isServerNotLeader(void) const 
    339     { 
    340       return !ranksServerNotLeader.empty(); 
    341     } 
     325  /*! 
     326  Get leading server in the group of connected server 
     327  \return ranks of leading servers 
     328  */ 
     329  const std::list<int>& CContextClient::getRanksServerNotLeader(void) const 
     330  { 
     331    return ranksServerNotLeader; 
     332  } 
     333 
     334  /*! 
     335  Check if client connects to leading server 
     336  \return connected(true), not connected (false) 
     337  */ 
     338  bool CContextClient::isServerNotLeader(void) const 
     339  { 
     340    return !ranksServerNotLeader.empty(); 
     341  } 
    342342 
    343343  /*! 
  • XIOS/dev/dev_olga/src/context_client.hpp

    r1148 r1158  
    7272      MPI_Comm intraComm; //!< Communicator of client group 
    7373 
    74       map<int,CClientBuffer*> buffers;         //!< Buffers for connection to servers 
     74      map<int,CClientBuffer*> buffers; //!< Buffers for connection to servers 
    7575 
    7676    private: 
  • XIOS/dev/dev_olga/src/context_server.cpp

    r1139 r1158  
    2323{ 
    2424 
    25   CContextServer::CContextServer(CContext* parent, MPI_Comm intraComm_,MPI_Comm interComm_) 
     25  CContextServer::CContextServer(CContext* parent,MPI_Comm intraComm_,MPI_Comm interComm_) 
    2626  { 
    2727    context=parent; 
     
    5050    pendingEvent=true; 
    5151  } 
    52  
    5352 
    5453  bool CContextServer::hasPendingEvent(void) 
     
    207206  { 
    208207    map<int,CServerBuffer*>::iterator it; 
    209     for(it=buffers.begin();it!=buffers.end();++it) 
    210       delete it->second; 
     208    for(it=buffers.begin();it!=buffers.end();++it) delete it->second; 
    211209  } 
    212210 
     
    263261    } 
    264262  } 
    265  
    266263} 
  • XIOS/dev/dev_olga/src/context_server.hpp

    r1130 r1158  
    1414    public: 
    1515 
    16     CContextServer(CContext* parent, MPI_Comm intraComm, MPI_Comm interComm) ; 
    17  
     16    CContextServer(CContext* parent,MPI_Comm intraComm,MPI_Comm interComm) ; 
    1817    bool eventLoop(bool enableEventsProcessing = true); 
    1918    void listen(void) ; 
    2019    void checkPendingRequest(void) ; 
     20    void processRequest(int rank, char* buff,int count) ; 
    2121    void processEvents(void) ; 
    2222    bool hasFinished(void); 
     
    2424    void setPendingEvent(void) ; 
    2525    bool hasPendingEvent(void) ; 
    26  
    27     void processRequest(int rank, char* buff,int count) ; 
    2826 
    2927    MPI_Comm intraComm ; 
     
    5048 
    5149    private: 
    52     std::map<int, StdSize> mapBufferSize_; 
    53  
     50      std::map<int, StdSize> mapBufferSize_; 
    5451  } ; 
    5552 
  • XIOS/dev/dev_olga/src/cxios.cpp

    r1130 r1158  
    1616  string CXios::rootFile="./iodef.xml" ; 
    1717  string CXios::xiosCodeId="xios.x" ; 
    18 //  string CXios::xiosCodeIdPrm="xios.x.1" ; 
    19 //  string CXios::xiosCodeIdSnd="xios.x.2" ; 
    2018  string CXios::clientFile="./xios_client"; 
    2119  string CXios::serverFile="./xios_server"; 
     
    3634  bool CXios::isOptPerformance = true; 
    3735  CRegistry* CXios::globalRegistry = 0; 
     36  double CXios::recvFieldTimeout = 10.0; 
    3837 
    3938  //! Parse configuration file and create some objects from it 
     
    7170    bufferSizeFactor = getin<double>("buffer_size_factor", defaultBufferSizeFactor); 
    7271    minBufferSize = getin<int>("min_buffer_size", 1024 * sizeof(double)); 
     72    recvFieldTimeout = getin<double>("recv_field_timeout", 10.0); 
     73    if (recvFieldTimeout < 0.0) 
     74      ERROR("CXios::parseXiosConfig()", "recv_field_timeout cannot be negative."); 
    7375 
    7476    globalComm=MPI_COMM_WORLD ; 
     
    115117       delete globalRegistry ; 
    116118     } 
    117      CClient::closeInfoStream(); 
    118    
    119119 
    120120#ifdef XIOS_MEMTRACK 
     121 
     122#ifdef XIOS_MEMTRACK_LIGHT 
     123       report(10) << " Memory report : current memory used by XIOS : "<<  MemTrack::getCurrentMemorySize()*1.0/(1024*1024)<<" Mbyte" << endl ; 
     124       report(10) << " Memory report : maximum memory used by XIOS : "<<  MemTrack::getMaxMemorySize()*1.0/(1024*1024)<<" Mbyte" << endl ; 
     125#endif 
     126 
     127#ifdef XIOS_MEMTRACK_FULL 
    121128     MemTrack::TrackListMemoryUsage() ; 
    122129     MemTrack::TrackDumpBlocks(); 
     130#endif 
     131 
     132     CClient::closeInfoStream(); 
     133 
    123134#endif 
    124135  } 
     
    138149  { 
    139150    initServer(); 
     151    isClient = false; 
     152    isServer = true; 
    140153 
    141154    // Initialize all aspects MPI 
    142155    CServer::initialize(); 
    143     isServer = true; 
    144     isClient = false; 
    145  
    146156    if (CServer::getRank()==0) globalRegistry = new CRegistry(CServer::intraComm) ; 
    147157     
     
    181191     } 
    182192    CServer::finalize(); 
     193 
     194#ifdef XIOS_MEMTRACK 
     195 
     196#ifdef XIOS_MEMTRACK_LIGHT 
     197       report(10) << " Memory report : current memory used by XIOS : "<<  MemTrack::getCurrentMemorySize()*1.0/(1024*1024)<<" Mbyte" << endl ; 
     198       report(10) << " Memory report : maximum memory used by XIOS : "<<  MemTrack::getMaxMemorySize()*1.0/(1024*1024)<<" Mbyte" << endl ; 
     199#endif 
     200 
     201#ifdef XIOS_MEMTRACK_FULL 
     202     MemTrack::TrackListMemoryUsage() ; 
     203     MemTrack::TrackDumpBlocks(); 
     204#endif 
     205#endif 
    183206    CServer::closeInfoStream(); 
    184207  } 
  • XIOS/dev/dev_olga/src/cxios.hpp

    r1077 r1158  
    3737     static bool isServer ; //!< Check if xios is server 
    3838 
    39 //     static int serverLevel ; 
    40  
    4139     static MPI_Comm globalComm ; //!< Global communicator 
    4240 
     
    5149     static bool isOptPerformance; //!< Check if buffer size is for performance (as large as possible) 
    5250     static CRegistry* globalRegistry ; //!< global registry which is wrote by the root process of the servers 
     51     static double recvFieldTimeout; //!< Time to wait for data before issuing an error when receiving a field 
    5352 
    5453    public: 
  • XIOS/dev/dev_olga/src/data_output.cpp

    r887 r1158  
    8484      //---------------------------------------------------------------- 
    8585 
    86       void CDataOutput::writeField(CField* field) 
     86      void CDataOutput::writeFieldTimeAxis(CField* field) 
    8787      { 
    8888         CContext* context = CContext::getCurrent() ; 
    8989         boost::shared_ptr<CCalendar> calendar = context->getCalendar(); 
    9090 
     91         this->writeTimeAxis_(field, calendar); 
     92      } 
     93       
     94      void CDataOutput::writeField(CField* field) 
     95      { 
    9196         this->writeField_(field); 
    92          this->writeTimeAxis_(field, calendar); 
    9397      } 
    9498 
  • XIOS/dev/dev_olga/src/data_output.hpp

    r887 r1158  
    2525            void closeFile     (void); 
    2626            void writeField    (CField* field); 
     27            void writeFieldTimeAxis(CField* field) ; 
    2728            void writeFieldGrid(CField* field); 
    2829            void writeTimeDimension(void); 
  • XIOS/dev/dev_olga/src/date.cpp

    r647 r1158  
    6262         hour = date.hour; minute = date.minute; second = date.second; 
    6363         return (*this); 
     64      } 
     65 
     66      bool CDate::operator==(const CDate& date) 
     67      {          
     68         return (&(*relCalendar) == &(*date.relCalendar) && 
     69                 year == date.year && month  == date.month  && day == date.day && 
     70                 hour == date.hour && minute == date.minute && second == date.second); 
     71          
    6472      } 
    6573 
  • XIOS/dev/dev_olga/src/date.hpp

    r591 r1158  
    3232            /// Opérateurs /// 
    3333            CDate& operator=(const CDate& date); 
     34            bool operator==(const CDate& date); 
    3435            friend StdOStream& operator<<(StdOStream& out, const CDate& date); 
    3536            friend StdIStream& operator>>(StdIStream& in, CDate& date); 
  • XIOS/dev/dev_olga/src/declare_ref_func.hpp

    r1099 r1158  
    107107      if (refer_ptr->hasAutoGeneratedId() &&                           \ 
    108108          refer_ptr->hasDirect##type##Reference())                     \ 
    109           nameRef = refer_ptr->name_##_ref;                            \ 
     109        nameRef = refer_ptr->name_##_ref;                              \ 
    110110      else {                                                           \ 
    111          nameRef = refer_ptr->getId(); break;                           \ 
    112        }                                                                \ 
    113        if (tmpRefObjects.end() != tmpRefObjects.find(refer_ptr))        \ 
    114        {                                                                \ 
     111        nameRef = refer_ptr->getId(); break;                           \ 
     112      }                                                                \ 
     113      if (tmpRefObjects.end() != tmpRefObjects.find(refer_ptr))        \ 
     114      {                                                                \ 
    115115        ERROR("const StdString& C" #type "::get" #type "OutputName(void) const ",      \ 
    116                << "Circular dependency stopped for " #name_ " object "  \ 
    117                << "with id = \"" << refer_ptr->getId() << "\".");       \ 
    118        }                                                               \ 
     116              << "Circular dependency stopped for " #name_ " object "  \ 
     117              << "with id = \"" << refer_ptr->getId() << "\".");       \ 
     118      }                                                                \ 
    119119    }                                                                  \ 
    120120    return nameRef;                                                    \ 
  • XIOS/dev/dev_olga/src/dht_auto_indexing.cpp

    r924 r1158  
    7979    for (itIdx = itbIdx; itIdx != iteIdx; ++itIdx) 
    8080    { 
    81       (itIdx->second)[0] = beginIndexOnProc_ + idx; 
     81//      (itIdx->second)[0] = beginIndexOnProc_ + idx; 
     82      (itIdx->second)[1] = beginIndexOnProc_ + idx; 
    8283      globalIndex_[idx] = beginIndexOnProc_ + idx; 
    8384      ++idx ; 
  • XIOS/dev/dev_olga/src/distribution_client.cpp

    r1144 r1158  
    152152  infoIndex_.resize(this->dims_); 
    153153 
     154  // A trick to determine position of each domain in domainList 
     155  int domIndex = 0, axisIndex = 0, scalarIndex = 0; 
     156  idx = 0; 
     157 
    154158  elementLocalIndex_.resize(numElement_); 
    155159  elementGlobalIndex_.resize(numElement_); 
     
    158162  elementNLocal_.resize(numElement_); 
    159163  elementNGlobal_.resize(numElement_); 
    160  
    161164  elementNLocal_[0] = 1; 
    162165  elementNGlobal_[0] = 1; 
     166  size_t localSize = 1, globalSize = 1; 
     167 
    163168  isDataDistributed_ = false; 
    164  
    165   size_t localSize = 1, globalSize = 1; 
    166  
    167   // A trick to determine position of each domain in domainList 
    168   int domIndex = 0, axisIndex = 0, scalarIndex = 0; 
    169   idx = 0; 
    170  
    171    
    172169  // Update all the vectors above 
    173170  for (idx = 0; idx < numElement_; ++idx) 
  • XIOS/dev/dev_olga/src/distribution_server.hpp

    r1144 r1158  
    4343    virtual void createGlobalIndex(); 
    4444 
    45     void createGlobalIndexFromIndex(const std::vector<CArray<int,1> >& globalIndexOnEachDimension, 
    46                                     const std::vector<int>& nbGlobal); 
    47  
    4845  protected: 
    4946    GlobalLocalMap globalLocalIndexMap_; 
  • XIOS/dev/dev_olga/src/duration.cpp

    r612 r1158  
    2626      } 
    2727 
     28      /*! 
     29        This operation may not serve much, it's here because of the need of operator== from generic class CType<T> 
     30      */ 
     31      bool CDuration::operator==(const CDuration& duration) 
     32      { 
     33        return (year == duration.year && month  == duration.month  && day == duration.day && 
     34                hour == duration.hour && minute == duration.minute && second == duration.second && timestep == duration.timestep);         
     35      } 
     36 
    2837      StdOStream& operator<<(StdOStream& out, const CDuration& duration) 
    2938      { 
     
    3847        char   c = '/'; 
    3948        bool   invalidUnit = false; 
     49        CDuration sentinel = NoneDu; 
     50 
     51#define setDuration(unit, value)                                                  \ 
     52        {                                                                         \ 
     53          if (sentinel.unit)                                                      \ 
     54            ERROR("StdIStream& operator>>(StdIStream& in , CDuration& duration)", \ 
     55                  << "Bad duration format: " #unit " has already been set.");      \ 
     56                                                                                  \ 
     57          duration.unit = value;                                                  \ 
     58          sentinel.unit = 1.0;                                                    \ 
     59        } 
    4060 
    4161        do 
     
    4868          switch (c) 
    4969          { 
    50             case 'y': duration.year   = v; break; 
    51             case 'd': duration.day    = v; break; 
    52             case 'h': duration.hour   = v; break; 
    53             case 's': duration.second = v; break; 
     70            case 'y': setDuration(year, v) break; 
     71            case 'd': setDuration(day, v) break; 
     72            case 'h': setDuration(hour, v) break; 
     73            case 's': setDuration(second, v) break; 
    5474            case 'm': 
    5575            { 
    5676              in >> c; 
    57               if      (c == 'i') duration.minute = v; 
    58               else if (c == 'o') duration.month  = v; 
     77              if      (c == 'i') setDuration(minute, v) 
     78              else if (c == 'o') setDuration(month, v) 
    5979              else invalidUnit = true; 
    6080              break; 
     
    6383            { 
    6484              in >> c; 
    65               if (c == 's') duration.timestep = v; 
     85              if (c == 's') setDuration(timestep, v) 
    6686              else invalidUnit = true; 
    6787              break; 
     
    7696                  << "Bad duration format: invalid unit, unexpected '" << c << "' character."); 
    7797        } while (in.peek() != EOF); // check whether there is a next character to read 
     98 
     99#undef setDuration 
    78100 
    79101        return in; 
  • XIOS/dev/dev_olga/src/duration.hpp

    r612 r1158  
    2222            /// Opérateurs /// 
    2323            CDuration& operator=(const CDuration& duration); 
     24            bool operator==(const CDuration& duration); 
    2425 
    2526            friend StdOStream& operator<<(StdOStream& out, const CDuration& duration); 
  • XIOS/dev/dev_olga/src/event_scheduler.cpp

    r992 r1158  
    150150        size_t hashId=recvRequest->buffer[1] ; 
    151151        size_t lev=recvRequest->buffer[2] ; 
    152 //        delete recvRequest ; 
     152        delete recvRequest ; 
    153153        pendingRecvParentRequest.pop() ;        
    154154  
    155155        if (lev==level) eventStack.push(pair<size_t,size_t>(timeLine,hashId)) ; 
    156156        else  bcastEvent(timeLine, hashId, lev) ; 
    157         delete recvRequest ; 
    158157      } 
    159158    }    
  • XIOS/dev/dev_olga/src/filter/file_server_writer_filter.cpp

    r1026 r1158  
    1818    field->writeUpdateData(data[0]->data); 
    1919  } 
     20 
     21  bool CFileServerWriterFilter::isDataExpected(const CDate& date) const 
     22  { 
     23    return true; 
     24  } 
    2025} // namespace xios 
  • XIOS/dev/dev_olga/src/filter/file_server_writer_filter.hpp

    r1026 r1158  
    2323      CFileServerWriterFilter(CGarbageCollector& gc, CField* field); 
    2424 
     25      bool virtual isDataExpected(const CDate& date) const; 
    2526    protected: 
    2627      /*! 
  • XIOS/dev/dev_olga/src/filter/file_writer_filter.cpp

    r639 r1158  
    22#include "exception.hpp" 
    33#include "field.hpp" 
     4#include "utils.hpp" 
    45 
    56namespace xios 
     
    1617  void CFileWriterFilter::onInputReady(std::vector<CDataPacketPtr> data) 
    1718  { 
     19    bool ignoreMissingValue = (!field->detect_missing_value.isEmpty() &&  
     20                               !field->default_value.isEmpty() &&  
     21                               field->detect_missing_value == true); 
     22    if (ignoreMissingValue) 
     23    { 
     24      double missingValue = field->default_value; 
     25      size_t nbData = data[0]->data.numElements(); 
     26      for (size_t idx = 0; idx < nbData; ++idx) 
     27      { 
     28        if (NumTraits<double>::isnan(data[0]->data(idx))) 
     29          data[0]->data(idx) = missingValue; 
     30      } 
     31    }     
     32 
    1833    field->sendUpdateData(data[0]->data); 
    1934  } 
     35 
     36  bool CFileWriterFilter::isDataExpected(const CDate& date) const 
     37  { 
     38    return true; 
     39  } 
    2040} // namespace xios 
  • XIOS/dev/dev_olga/src/filter/file_writer_filter.hpp

    r639 r1158  
    2323      CFileWriterFilter(CGarbageCollector& gc, CField* field); 
    2424 
     25      /*! 
     26       * Tests whether data is expected for the specified date. 
     27       * 
     28       * \param date the date associated to the data 
     29       */ 
     30      bool virtual isDataExpected(const CDate& date) const; 
     31 
    2532    protected: 
    2633      /*! 
  • XIOS/dev/dev_olga/src/filter/filter.cpp

    r1021 r1158  
    4040    return (CInputPin::canBeTriggered() || COutputPin::canBeTriggered()); 
    4141  } 
     42 
     43  bool CFilter::isDataExpected(const CDate& date) const 
     44  { 
     45    return COutputPin::isDataExpected(date); 
     46  } 
    4247} // namespace xios 
  • XIOS/dev/dev_olga/src/filter/filter.hpp

    r1021 r1158  
    4848      bool virtual canBeTriggered() const; 
    4949 
     50      /*! 
     51       * Tests whether data is expected for the specified date. 
     52       * 
     53       * \param date the date associated to the data 
     54       */ 
     55      bool virtual isDataExpected(const CDate& date) const; 
     56 
    5057    protected: 
    5158      IFilterEngine* engine; //!< The filter engine, might be the filter itself 
  • XIOS/dev/dev_olga/src/filter/input_pin.hpp

    r1021 r1158  
    6060 
    6161      /*! 
     62       * Tests whether data is expected for the specified date. 
     63       * 
     64       * \param date the date associated to the data 
     65       */ 
     66      bool virtual isDataExpected(const CDate& date) const = 0; 
     67 
     68      /*! 
    6269       * Removes all pending packets which are older than the specified timestamp. 
    6370       * 
  • XIOS/dev/dev_olga/src/filter/output_pin.cpp

    r1021 r1158  
    7373  } 
    7474 
     75  bool COutputPin::isDataExpected(const CDate& date) const 
     76  { 
     77    std::vector<std::pair<boost::shared_ptr<CInputPin>, size_t> >::const_iterator it, itEnd; 
     78    for (it = outputs.begin(), itEnd = outputs.end(); it != itEnd; ++it) 
     79    { 
     80      if (it->first->isDataExpected(date)) 
     81        return true; 
     82    } 
     83 
     84    return false; 
     85  } 
     86 
    7587  void COutputPin::invalidate(Time timestamp) 
    7688  { 
  • XIOS/dev/dev_olga/src/filter/output_pin.hpp

    r1021 r1158  
    4646 
    4747      /*! 
     48       * Tests whether data is expected for the specified date. 
     49       * 
     50       * \param date the date associated to the data 
     51       */ 
     52      bool virtual isDataExpected(const CDate& date) const; 
     53 
     54      /*! 
    4855       * Removes all pending packets which are older than the specified timestamp. 
    4956       * 
  • XIOS/dev/dev_olga/src/filter/source_filter.cpp

    r1021 r1158  
    33#include "exception.hpp" 
    44#include "calendar_util.hpp" 
     5#include <limits>  
    56 
    67namespace xios 
    78{ 
    89  CSourceFilter::CSourceFilter(CGarbageCollector& gc, CGrid* grid, 
    9                                const CDuration offset /*= NoneDu*/, bool manualTrigger /*= false*/) 
     10                               const CDuration offset /*= NoneDu*/, bool manualTrigger /*= false*/, 
     11                               bool hasMissingValue /*= false*/, 
     12                               double defaultValue /*= 0.0*/) 
    1013    : COutputPin(gc, manualTrigger) 
    1114    , grid(grid) 
    1215    , offset(offset) 
     16    , hasMissingValue(hasMissingValue), defaultValue(defaultValue) 
    1317  { 
    1418    if (!grid) 
     
    2933    packet->data.resize(grid->storeIndex_client.numElements()); 
    3034    grid->inputField(data, packet->data); 
     35 
     36    // Convert missing values to NaN 
     37    if (hasMissingValue) 
     38    { 
     39      double nanValue = std::numeric_limits<double>::quiet_NaN(); 
     40      size_t nbData = packet->data.numElements(); 
     41      for (size_t idx = 0; idx < nbData; ++idx) 
     42      { 
     43        if (defaultValue == packet->data(idx)) 
     44          packet->data(idx) = nanValue; 
     45      } 
     46    } 
    3147 
    3248    onOutputReady(packet); 
  • XIOS/dev/dev_olga/src/filter/source_filter.hpp

    r1021 r1158  
    2323       * \param offset the offset applied to the timestamp of all packets 
    2424       * \param manualTrigger whether the output should be triggered manually 
     25       * \param hasMissingValue whether data has missing value 
     26       * \param defaultValue missing value to detect 
    2527       */ 
    2628      CSourceFilter(CGarbageCollector& gc, CGrid* grid, 
    27                     const CDuration offset = NoneDu, bool manualTrigger = false); 
     29                    const CDuration offset = NoneDu, bool manualTrigger = false, 
     30                    bool hasMissingValue = false, 
     31                    double defaultValue = 0.0); 
    2832 
    2933      /*! 
     
    5862      CGrid* grid; //!< The grid attached to the data the filter can accept 
    5963      const CDuration offset; //!< The offset applied to the timestamp of all packets 
     64      bool hasMissingValue; 
     65      double defaultValue; 
    6066  }; // class CSourceFilter 
    6167} // namespace xios 
  • XIOS/dev/dev_olga/src/filter/spatial_transform_filter.cpp

    r1021 r1158  
    1111 
    1212  std::pair<boost::shared_ptr<CSpatialTransformFilter>, boost::shared_ptr<CSpatialTransformFilter> > 
    13   CSpatialTransformFilter::buildFilterGraph(CGarbageCollector& gc, CGrid* srcGrid, CGrid* destGrid, double defaultValue) 
     13  CSpatialTransformFilter::buildFilterGraph(CGarbageCollector& gc, CGrid* srcGrid, CGrid* destGrid, bool hasMissingValue, double missingValue) 
    1414  { 
    1515    if (!srcGrid || !destGrid) 
     
    2626      const std::vector<StdString>& auxInputs = gridTransformation->getAuxInputs(); 
    2727      size_t inputCount = 1 + (auxInputs.empty() ? 0 : auxInputs.size()); 
     28      double defaultValue  = (hasMissingValue) ? std::numeric_limits<double>::quiet_NaN() : 0.0; 
    2829      boost::shared_ptr<CSpatialTransformFilter> filter(new CSpatialTransformFilter(gc, engine, defaultValue, inputCount)); 
    2930 
     
    103104      } 
    104105      packet->data.resize(gridTransformation->getGridDestination()->storeIndex_client.numElements()); 
    105       packet->data = defaultValue; 
     106      if (0 != packet->data.numElements()) 
     107        (packet->data)(0) = defaultValue; 
    106108      apply(data[0]->data, packet->data); 
    107109    } 
     
    115117 
    116118    // Get default value for output data 
    117     double defaultValue = 0.0; 
    118     if (0 != dataDest.numElements()) defaultValue = dataDest(0); 
     119    bool ignoreMissingValue = false;  
     120    double defaultValue = std::numeric_limits<double>::quiet_NaN(); 
     121    if (0 != dataDest.numElements()) ignoreMissingValue = NumTraits<double>::isnan(dataDest(0)); 
    119122 
    120123    const std::list<CGridTransformation::SendingIndexGridSourceMap>& listLocalIndexSend = gridTransformation->getLocalIndexToSendFromGridSource(); 
     
    191194        else dataCurrentDest(i) = defaultValue; 
    192195 
    193       std::vector<bool> localInitFlag(dataCurrentDest.size(), true); 
     196      std::vector<bool> localInitFlag(dataCurrentDest.numElements(), true); 
    194197      currentBuff = 0; 
    195198      for (itRecv = itbRecv; itRecv != iteRecv; ++itRecv) 
     
    201204                         dataCurrentDest, 
    202205                         localInitFlag, 
    203                          defaultValue); 
     206                         ignoreMissingValue); 
    204207 
    205208        currentBuff += countSize; 
  • XIOS/dev/dev_olga/src/filter/spatial_transform_filter.hpp

    r873 r1158  
    3232       * \param srcGrid the source grid 
    3333       * \param destGrid the destination grid 
     34       * \param hasMissingValue whether field source has missing value 
     35       * \param defaultValue default value 
    3436       * \return the first and the last filters of the filter graph 
    3537       */ 
    3638      static std::pair<boost::shared_ptr<CSpatialTransformFilter>, boost::shared_ptr<CSpatialTransformFilter> > 
    37       buildFilterGraph(CGarbageCollector& gc, CGrid* srcGrid, CGrid* destGrid, double defaultValue); 
     39      buildFilterGraph(CGarbageCollector& gc, CGrid* srcGrid, CGrid* destGrid, bool hasMissingValue, double defaultValue); 
    3840 
    3941    protected: 
  • XIOS/dev/dev_olga/src/filter/store_filter.cpp

    r1021 r1158  
    2424    CTimer timer("CStoreFilter::getPacket"); 
    2525    CConstDataPacketPtr packet; 
    26     const double timeout = 10 ; // 10 seconds timeout 
     26    const double timeout = CXios::recvFieldTimeout; 
    2727 
    2828    do 
     
    8181  } 
    8282 
     83  bool CStoreFilter::isDataExpected(const CDate& date) const 
     84  { 
     85    return true; 
     86  } 
     87 
    8388  void CStoreFilter::invalidate(Time timestamp) 
    8489  { 
  • XIOS/dev/dev_olga/src/filter/store_filter.hpp

    r1021 r1158  
    5050 
    5151      /*! 
     52       * Tests whether data is expected for the specified date. 
     53       * 
     54       * \param date the date associated to the data 
     55       */ 
     56      bool virtual isDataExpected(const CDate& date) const; 
     57 
     58      /*! 
    5259       * Removes all pending packets which are older than the specified timestamp. 
    5360       * 
  • XIOS/dev/dev_olga/src/filter/temporal_filter.cpp

    r854 r1158  
    55namespace xios 
    66{ 
     7  static func::CFunctor* createFunctor(const std::string& opId, bool ignoreMissingValue, double missingValue, CArray<double, 1>& tmpData); 
     8 
    79  CTemporalFilter::CTemporalFilter(CGarbageCollector& gc, const std::string& opId, 
    810                                   const CDate& initDate, const CDuration samplingFreq, const CDuration samplingOffset, const CDuration opFreq, 
    911                                   bool ignoreMissingValue /*= false*/, double missingValue /*= 0.0*/) 
    1012    : CFilter(gc, 1, this) 
    11     , samplingFreq(samplingFreq) 
     13    , functor(createFunctor(opId, ignoreMissingValue, missingValue, tmpData)) 
     14    , isOnceOperation(functor->timeType() == func::CFunctor::once) 
     15    , isInstantOperation(functor->timeType() == func::CFunctor::instant) 
     16    // If we can optimize the sampling when dealing with an instant functor we do it 
     17    , samplingFreq((isInstantOperation && samplingFreq == TimeStep && samplingOffset == NoneDu) ? opFreq : samplingFreq) 
     18    , samplingOffset((isInstantOperation && samplingFreq == TimeStep && samplingOffset == NoneDu) ? opFreq - initDate.getRelCalendar().getTimeStep() : samplingOffset) 
    1219    , opFreq(opFreq) 
    13     , nextSamplingDate(initDate + samplingOffset + initDate.getRelCalendar().getTimeStep()) 
    14     , nextOperationDate(initDate + opFreq) 
     20    , nextSamplingDate(initDate + this->samplingOffset + initDate.getRelCalendar().getTimeStep()) 
     21    , nextOperationDate(initDate + this->samplingOffset + opFreq) 
    1522    , isFirstOperation(true) 
    1623  { 
    17 #define DECLARE_FUNCTOR(MType, mtype) \ 
    18     if (opId.compare(#mtype) == 0) \ 
    19     { \ 
    20       if (ignoreMissingValue) \ 
    21       { \ 
    22         functor.reset(new func::C##MType(tmpData, missingValue)); \ 
    23       } \ 
    24       else \ 
    25       { \ 
    26         functor.reset(new func::C##MType(tmpData)); \ 
    27       } \ 
    28     } 
    29  
    30 #include "functor_type.conf" 
    31  
    32     if (!functor) 
    33       ERROR("CTemporalFilter::CTemporalFilter(CGarbageCollector& gc, const std::string& opId, ...)", 
    34             << "\"" << opId << "\" is not a valid operation."); 
    35  
    36     isOnceOperation = (functor->timeType() == func::CFunctor::once); 
    3724  } 
    3825 
     
    4330    if (data[0]->status != CDataPacket::END_OF_STREAM) 
    4431    { 
    45       const bool usePacket = isOnceOperation ? isFirstOperation : (data[0]->date >= nextSamplingDate); 
     32      bool usePacket, outputResult, copyLess; 
     33      if (isOnceOperation) 
     34        usePacket = outputResult = copyLess = isFirstOperation; 
     35      else 
     36      { 
     37        usePacket = (data[0]->date >= nextSamplingDate); 
     38        outputResult = (data[0]->date + samplingFreq > nextOperationDate); 
     39        copyLess = (isInstantOperation && usePacket && outputResult); 
     40      } 
     41 
    4642      if (usePacket) 
    4743      { 
    48         if (!tmpData.numElements()) 
    49           tmpData.resize(data[0]->data.numElements()); 
     44        if (!copyLess) 
     45        { 
     46          if (!tmpData.numElements()) 
     47            tmpData.resize(data[0]->data.numElements()); 
    5048 
    51         (*functor)(data[0]->data); 
     49          (*functor)(data[0]->data); 
     50        } 
    5251 
    5352        nextSamplingDate = nextSamplingDate + samplingFreq; 
    5453      } 
    5554 
    56       const bool outputResult = isOnceOperation ? isFirstOperation : (data[0]->date + samplingFreq > nextOperationDate); 
    5755      if (outputResult) 
    5856      { 
    59         functor->final(); 
     57        if (!copyLess) 
     58        { 
     59          functor->final(); 
    6060 
    61         packet = CDataPacketPtr(new CDataPacket); 
    62         packet->date = data[0]->date; 
    63         packet->timestamp = data[0]->timestamp; 
    64         packet->status = data[0]->status; 
    65         packet->data.resize(tmpData.numElements()); 
    66         packet->data = tmpData; 
     61          packet = CDataPacketPtr(new CDataPacket); 
     62          packet->date = data[0]->date; 
     63          packet->timestamp = data[0]->timestamp; 
     64          packet->status = data[0]->status; 
     65          packet->data.resize(tmpData.numElements()); 
     66          packet->data = tmpData; 
     67        } 
     68        else 
     69          packet = data[0]; 
    6770 
    6871        isFirstOperation = false; 
     
    7376    return packet; 
    7477  } 
     78 
     79  bool CTemporalFilter::isDataExpected(const CDate& date) const 
     80  { 
     81    return isOnceOperation ? isFirstOperation : (date >= nextSamplingDate || date + samplingFreq > nextOperationDate); 
     82  } 
     83 
     84  static func::CFunctor* createFunctor(const std::string& opId, bool ignoreMissingValue, double missingValue, CArray<double, 1>& tmpData) 
     85  { 
     86    func::CFunctor* functor = NULL; 
     87 
     88    double defaultValue = ignoreMissingValue ? std::numeric_limits<double>::quiet_NaN() : missingValue; 
     89 
     90#define DECLARE_FUNCTOR(MType, mtype) \ 
     91    if (opId.compare(#mtype) == 0) \ 
     92    { \ 
     93      if (ignoreMissingValue) \ 
     94      { \ 
     95        functor = new func::C##MType(tmpData, defaultValue); \ 
     96      } \ 
     97      else \ 
     98      { \ 
     99        functor = new func::C##MType(tmpData); \ 
     100      } \ 
     101    } 
     102 
     103#include "functor_type.conf" 
     104 
     105    if (!functor) 
     106      ERROR("createFunctor(const std::string& opId, ...)", 
     107            << "\"" << opId << "\" is not a valid operation."); 
     108 
     109    return functor; 
     110  } 
    75111} // namespace xios 
  • XIOS/dev/dev_olga/src/filter/temporal_filter.hpp

    r643 r1158  
    4040      CDataPacketPtr virtual apply(std::vector<CDataPacketPtr> data); 
    4141 
     42      /*! 
     43       * Tests whether data is expected for the specified date. 
     44       * 
     45       * \param date the date associated to the data 
     46       */ 
     47      bool virtual isDataExpected(const CDate& date) const; 
     48 
    4249    private: 
    43       boost::scoped_ptr<func::CFunctor> functor; //!< The functor corresponding to the temporal operation 
     50      const boost::scoped_ptr<func::CFunctor> functor; //!< The functor corresponding to the temporal operation 
    4451      CArray<double, 1> tmpData; //!< The array of data used for temporary storage 
    4552      const CDuration samplingFreq; //!< The sampling frequency, i.e. the frequency at which the input data will be used 
     53      const CDuration samplingOffset; //!< The sampling offset, i.e. the offset after which the input data will be used 
    4654      const CDuration opFreq; //!< The operation frequency, i.e. the frequency at which the output data will be computed 
    4755      CDate nextSamplingDate; //!< The date of the next sampling 
    4856      CDate nextOperationDate; //!< The date of the next operation 
    4957      bool isFirstOperation; //!< True before the first operation was been computed 
    50       bool isOnceOperation; //!< True if the operation should be computed just once 
     58      const bool isOnceOperation; //!< True if the operation should be computed just once 
     59      const bool isInstantOperation; //!< True if the operation is instant 
    5160  }; // class CTemporalFilter 
    5261} // namespace xios 
  • XIOS/dev/dev_olga/src/functor/accumulate.cpp

    r591 r1158  
    11#include "accumulate.hpp" 
    22#include "array_new.hpp" 
     3#include "utils.hpp" 
    34 
    45namespace xios 
     
    3334            double* out=_doutput.dataFirst(); 
    3435            for (i=0; i<n; ++i,++in,++out)  
    35               if (*in!=missingValue) 
     36              if (!NumTraits<double>::isnan(*in)) 
    3637              { 
    37                 if(*out!=missingValue) *out  += *in; 
     38                if(!NumTraits<double>::isnan(*out)) *out  += *in; 
    3839                else *out=*in ; 
    3940              } 
  • XIOS/dev/dev_olga/src/functor/average.cpp

    r591 r1158  
    11#include "average.hpp" 
    22#include "array_new.hpp" 
     3#include "utils.hpp" 
    34 
    45namespace xios 
     
    4243            int* nc=nbcalls.dataFirst() ; 
    4344            for (i=0; i<n; ++i,++nc,++in)  
    44               if (*in!=missingValue) (*nc) ++; 
     45              if (!NumTraits<double>::isnan(*in)) (*nc) ++; 
    4546          } 
    4647        } 
     
    5455            int* nc=nbcalls.dataFirst() ; 
    5556            for (i=0; i<n; ++i,++in,++out,++nc)  
    56               if (*in!=missingValue)  
     57              if (!NumTraits<double>::isnan(*in))  
    5758              { 
    5859                if (*nc != 0) (*out)  += *in; 
  • XIOS/dev/dev_olga/src/functor/maximum.cpp

    r591 r1158  
    11#include "maximum.hpp" 
    22#include "array_new.hpp" 
    3  
    4  
     3#include "utils.hpp" 
    54 
    65namespace xios 
     
    3534           {  
    3635             for (; it1 != end1; it1++, it++)  
    37                if (*it1 != missingValue) 
     36               if (!NumTraits<double>::isnan(*it1)) 
    3837               { 
    39                  if ( *it != missingValue) *it = std::max(*it1, *it); 
     38                 if (!NumTraits<double>::isnan(*it)) *it = std::max(*it1, *it); 
    4039                 else *it=*it1 ;   
    4140               } 
  • XIOS/dev/dev_olga/src/functor/minimum.cpp

    r591 r1158  
    22#include "array_new.hpp" 
    33#include <algorithm> 
     4#include "utils.hpp" 
    45 
    56namespace xios 
     
    2627      { 
    2728        const double * it1  = _dinput.dataFirst(), 
    28                       * end1 = _dinput.dataFirst() + _dinput.numElements(); 
     29                      *end1 = _dinput.dataFirst() + _dinput.numElements(); 
    2930        double * it   = _doutput.dataFirst(); 
    3031         
     
    3536          {  
    3637            for (; it1 != end1; it1++, it++)  
    37               if (*it1!=missingValue) 
     38              if (!NumTraits<double>::isnan(*it1)) 
    3839              { 
    39                 if (*it != missingValue) *it = std::min(*it1, *it); 
     40                if (!NumTraits<double>::isnan(*it)) *it = std::min(*it1, *it); 
    4041                else *it=*it1 ; 
    4142              } 
  • XIOS/dev/dev_olga/src/generate_interface_impl.hpp

    r966 r1158  
    547547#undef macro 
    548548 
     549#define macro(N,EXTENT)\ 
     550  template <>\ 
     551  void CInterface::AttributeCInterface<CArray<StdString,N> >(ostream& oss, const string& className, const string& name)\ 
     552  { \ 
     553    oss << "void cxios_set_" << className << "_" << name << "(" << className << "_Ptr " << className << "_hdl, " << "char* " << name <<", int str_len, int* str_size, int* extent)" << iendl; \ 
     554    oss << "{" << iendl; \ 
     555    oss << "  CTimer::get(\"XIOS\").resume();" << iendl; \ 
     556    oss << "  "<<className<<"_hdl->"<<name<<".resize(shape("<<EXTENT<<"));"<<iendl;\ 
     557    oss << "  Array<StdString,"<<#N<<">::iterator it, itb="<<className<<"_hdl->"<<name<<".begin(), ite="<<className<<"_hdl->"<<name<<".end() ;"<<iendl ;\ 
     558    oss << "  int i, n ;"<< iendl; \ 
     559    oss << "  for(it=itb, i=0, n=0 ; it!=ite ; ++it,n+=str_len,++i) *it=StdString(&"<<name<<"[n],str_size[i]) ;"<<iendl ;\ 
     560    oss << "  CTimer::get(\"XIOS\").suspend();" << iendl; \ 
     561    oss << "}" << std::endl; \ 
     562    oss << iendl; \ 
     563    oss << "void cxios_get_" << className << "_" << name << "(" << className << "_Ptr " << className << "_hdl, " << "char* " << name << ", int str_size, int* extent)" << iendl; \ 
     564    oss << "{" << iendl; \ 
     565    oss << "  CTimer::get(\"XIOS\").resume();" << iendl; \ 
     566    oss << "  Array<StdString,"<<#N<<">::const_iterator it, itb="<<className<<"_hdl->"<<name<<".getInheritedValue().begin(), ite="<<className<<"_hdl->"<<name<<".getInheritedValue().end() ;" << iendl; \ 
     567    oss << "  int n ;"<< iendl; \ 
     568    oss << "  for(it=itb, n=0 ; it!=ite ; ++it, n+=str_size) it->copy(&"<<name<<"[n],it->size()) ; "<< iendl; \ 
     569    oss << "  CTimer::get(\"XIOS\").suspend();" << iendl; \ 
     570    oss << "}" << std::endl; \ 
     571  } 
     572 
     573macro(1,"extent[0]") 
     574macro(2,"extent[0],extent[1]") 
     575macro(3,"extent[0],extent[1],extent[2]") 
     576macro(4,"extent[0],extent[1],extent[2],extent[3]") 
     577macro(5,"extent[0],extent[1],extent[2],extent[3],extent[4]") 
     578macro(6,"extent[0],extent[1],extent[2],extent[3],extent[4],extent[5]") 
     579macro(7,"extent[0],extent[1],extent[2],extent[3],extent[4],extent[5],extent[6]") 
     580#undef macro 
    549581// ///////////////////////////////////////////////// 
    550582// //          Fortran 2003 Interface             // 
     
    705737  #undef macro 
    706738 
     739#define macro(T)\ 
     740  template <>\ 
     741  void CInterface::AttributeFortran2003Interface<CArray<StdString,T> >(ostream& oss, const string& className, const string& name)\ 
     742  {\ 
     743    oss << "SUBROUTINE cxios_set_" << className << "_" << name << "(" << className << "_hdl, " << name << ", str_len, str_size, extent) BIND(C)" << iendl; \ 
     744    oss << "  USE ISO_C_BINDING" << iendl; \ 
     745    oss << "  INTEGER (kind = C_INTPTR_T), VALUE       :: " << className << "_hdl" << iendl; \ 
     746    oss << "  CHARACTER (KIND=C_CHAR), DIMENSION(*)    :: " << name << iendl; \ 
     747    oss << "  INTEGER (kind = C_INT), VALUE            :: str_len" << iendl; \ 
     748    oss << "  INTEGER (kind = C_INT), DIMENSION(*)     :: str_size" << iendl; \ 
     749    oss << "  INTEGER (kind = C_INT), DIMENSION(*)     :: extent" << iendl; \ 
     750    oss << "END SUBROUTINE cxios_set_" << className << "_" << name << std::endl; \ 
     751    oss << iendl; \ 
     752    oss << "SUBROUTINE cxios_get_" << className << "_" << name << "(" << className << "_hdl, " << name << ", str_size, extent) BIND(C)" << iendl; \ 
     753    oss << "  USE ISO_C_BINDING" << iendl; \ 
     754    oss << "  INTEGER (kind = C_INTPTR_T), VALUE       :: " << className << "_hdl" << iendl; \ 
     755    oss << "  CHARACTER (KIND=C_CHAR), DIMENSION(*)    :: " << name << iendl; \ 
     756    oss << "  INTEGER (kind = C_INT), VALUE            :: str_size" << iendl; \ 
     757    oss << "  INTEGER (kind = C_INT), DIMENSION(*)     :: extent" << iendl; \ 
     758    oss << "END SUBROUTINE cxios_get_" << className << "_" << name << std::endl; \ 
     759  } 
     760  macro(1) 
     761  macro(2) 
     762  macro(3) 
     763  macro(4) 
     764  macro(5) 
     765  macro(6) 
     766  macro(7) 
     767 
     768#undef macro 
     769 
    707770#define macro(T) \ 
    708771  template <> \ 
     
    808871 
    809872#undef macro 
     873 
     874#define macro(T,EXTENT)\ 
     875  template <> \ 
     876  void CInterface::AttributeFortranInterfaceDeclaration<CArray<StdString,T> >(ostream& oss, const string& className, const string& name)\ 
     877  {\ 
     878    oss << "CHARACTER(len=*) , OPTIONAL, INTENT(IN) :: " << name << "("<<EXTENT<<")"; \ 
     879  }\ 
     880\ 
     881  template <>\  
     882  void CInterface::AttributeFortranInterfaceGetDeclaration<CArray<StdString,T> >(ostream& oss, const string& className, const string& name)\ 
     883  {\ 
     884    oss << "CHARACTER(len=*) , OPTIONAL, INTENT(OUT) :: " << name << "("<<EXTENT<<")"; \ 
     885  } 
     886  macro(1,":") 
     887  macro(2,":,:") 
     888  macro(3,":,:,:") 
     889  macro(4,":,:,:,:") 
     890  macro(5,":,:,:,:,:") 
     891  macro(6,":,:,:,:,:,:") 
     892  macro(7,":,:,:,:,:,:,:") 
     893 
     894#undef macro 
     895 
     896 
     897 
     898 
     899   
    810900 
    811901#define macro(T) \ 
     
    9471037#undef macro 
    9481038 
     1039#define macro(T)\ 
     1040  template <>\ 
     1041  void CInterface::AttributeFortranInterfaceBody< CArray<StdString,T> >(ostream& oss, const string& className, const string& name)\ 
     1042  {\ 
     1043     oss << "IF (PRESENT(" << name << "_)) THEN" << iendl; \ 
     1044     oss << "  CALL cxios_set_" << className << "_" << name << " &" << iendl; \ 
     1045     oss << "(" << className << "_hdl%daddr, " << name <<"_, LEN("<<name<<"_), LEN_TRIM("<<name<< "_), SHAPE(" << name << "_))" << iendl; \ 
     1046     oss << "ENDIF"; \ 
     1047  } 
     1048 
     1049  macro(1) 
     1050  macro(2) 
     1051#undef macro 
     1052 
    9491053#define macro(T) \ 
    9501054  template <>  \ 
     
    10841188 
    10851189#undef macro 
     1190 
     1191#define macro(T)\ 
     1192  template <> \ 
     1193  void CInterface::AttributeFortranInterfaceGetBody< CArray<StdString,T> >(ostream& oss, const string& className, const string& name)\ 
     1194  {\ 
     1195    oss << "IF (PRESENT(" << name << "_)) THEN" << iendl; \ 
     1196    oss << "  CALL cxios_get_" << className << "_" << name << " &" << iendl; \ 
     1197    oss << "(" << className << "_hdl%daddr, " << name << "_, LEN("<<name<<"_), SHAPE(" << name << "_))" << iendl; \ 
     1198    oss << "ENDIF"; \ 
     1199  } 
     1200  macro(1) 
     1201  macro(2) 
     1202  macro(3) 
     1203  macro(4) 
     1204  macro(5) 
     1205  macro(6) 
     1206  macro(7) 
     1207 
     1208#undef macro 
     1209   
    10861210} 
    10871211#endif 
  • XIOS/dev/dev_olga/src/group_template_impl.hpp

    r1030 r1158  
    88#include "context.hpp" 
    99#include "event_client.hpp" 
     10#include "context_client.hpp" 
    1011#include "message.hpp" 
    1112#include "type.hpp" 
     
    398399      } 
    399400    } 
    400  
    401     // if (! context->hasServer ) 
    402     // { 
    403     //    CContextClient* client=context->client ; 
    404  
    405     //    CEventClient event(this->getType(),EVENT_ID_CREATE_CHILD) ;    
    406     //    if (client->isServerLeader()) 
    407     //    { 
    408     //      CMessage msg ; 
    409     //      msg<<this->getId() ; 
    410     //      msg<<id ; 
    411     //      const std::list<int>& ranks = client->getRanksServerLeader(); 
    412     //      for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) 
    413     //        event.push(*itRank,1,msg) ; 
    414     //      client->sendEvent(event) ; 
    415     //    } 
    416     //    else client->sendEvent(event) ; 
    417     // } 
    418401       
    419402   } 
     
    464447      } 
    465448    } 
    466  
    467     // if (! context->hasServer ) 
    468     // { 
    469     //    CContextClient* client=context->client ; 
    470  
    471     //    CEventClient event(this->getType(),EVENT_ID_CREATE_CHILD_GROUP) ;    
    472     //    if (client->isServerLeader()) 
    473     //    { 
    474     //      CMessage msg ; 
    475     //      msg<<this->getId() ; 
    476     //      msg<<id ; 
    477     //      const std::list<int>& ranks = client->getRanksServerLeader(); 
    478     //      for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) 
    479     //        event.push(*itRank,1,msg) ; 
    480     //      client->sendEvent(event) ; 
    481     //    } 
    482     //    else client->sendEvent(event) ; 
    483     // } 
    484        
    485449   } 
    486450    
     
    488452   void CGroupTemplate<U, V, W>::recvCreateChild(CEventServer& event) 
    489453   { 
    490        
    491454      CBufferIn* buffer=event.subEvents.begin()->buffer; 
    492455      string id; 
  • XIOS/dev/dev_olga/src/interface/c/icfield.cpp

    r943 r1158  
    7676// -----------------------------------------------------------------------------------------------------    
    7777 
    78   void cxios_field_is_active (XFieldPtr field_hdl, bool* ret) 
     78  void cxios_field_is_active (XFieldPtr field_hdl, bool at_current_timestep, bool* ret) 
    7979  { 
    8080    CTimer::get("XIOS").resume() ; 
    81     *ret = field_hdl->isActive(); 
     81    *ret = field_hdl->isActive(at_current_timestep); 
    8282    CTimer::get("XIOS").suspend() ; 
    8383  } 
  • XIOS/dev/dev_olga/src/interface/c_attr/icaxis_attr.cpp

    r817 r1158  
    188188 
    189189 
     190  void cxios_set_axis_label(axis_Ptr axis_hdl, char* label, int str_len, int* str_size, int* extent) 
     191  { 
     192    CTimer::get("XIOS").resume(); 
     193    axis_hdl->label.resize(shape(extent[0])); 
     194    Array<StdString,1>::iterator it, itb=axis_hdl->label.begin(), ite=axis_hdl->label.end() ; 
     195    int i, n ; 
     196    for(it=itb, i=0, n=0 ; it!=ite ; ++it,n+=str_len,++i) *it=StdString(&label[n],str_size[i]) ; 
     197    CTimer::get("XIOS").suspend(); 
     198  } 
     199 
     200  void cxios_get_axis_label(axis_Ptr axis_hdl, char* label, int str_size, int* extent) 
     201  { 
     202    CTimer::get("XIOS").resume(); 
     203    Array<StdString,1>::const_iterator it, itb=axis_hdl->label.getInheritedValue().begin(), ite=axis_hdl->label.getInheritedValue().end() ; 
     204    int n ; 
     205    for(it=itb, n=0 ; it!=ite ; ++it, n+=str_size) it->copy(&label[n],it->size()) ;  
     206    CTimer::get("XIOS").suspend(); 
     207  } 
     208 
     209  bool cxios_is_defined_axis_label(axis_Ptr axis_hdl) 
     210  { 
     211     CTimer::get("XIOS").resume(); 
     212     bool isDefined = axis_hdl->label.hasInheritedValue(); 
     213     CTimer::get("XIOS").suspend(); 
     214     return isDefined; 
     215  } 
     216 
     217 
    190218  void cxios_set_axis_long_name(axis_Ptr axis_hdl, const char * long_name, int long_name_size) 
    191219  { 
     
    360388 
    361389 
     390  void cxios_set_axis_prec(axis_Ptr axis_hdl, int prec) 
     391  { 
     392    CTimer::get("XIOS").resume(); 
     393    axis_hdl->prec.setValue(prec); 
     394    CTimer::get("XIOS").suspend(); 
     395  } 
     396 
     397  void cxios_get_axis_prec(axis_Ptr axis_hdl, int* prec) 
     398  { 
     399    CTimer::get("XIOS").resume(); 
     400    *prec = axis_hdl->prec.getInheritedValue(); 
     401    CTimer::get("XIOS").suspend(); 
     402  } 
     403 
     404  bool cxios_is_defined_axis_prec(axis_Ptr axis_hdl) 
     405  { 
     406     CTimer::get("XIOS").resume(); 
     407     bool isDefined = axis_hdl->prec.hasInheritedValue(); 
     408     CTimer::get("XIOS").suspend(); 
     409     return isDefined; 
     410  } 
     411 
     412 
    362413  void cxios_set_axis_standard_name(axis_Ptr axis_hdl, const char * standard_name, int standard_name_size) 
    363414  { 
  • XIOS/dev/dev_olga/src/interface/c_attr/icaxisgroup_attr.cpp

    r817 r1158  
    214214 
    215215 
     216  void cxios_set_axisgroup_label(axisgroup_Ptr axisgroup_hdl, char* label, int str_len, int* str_size, int* extent) 
     217  { 
     218    CTimer::get("XIOS").resume(); 
     219    axisgroup_hdl->label.resize(shape(extent[0])); 
     220    Array<StdString,1>::iterator it, itb=axisgroup_hdl->label.begin(), ite=axisgroup_hdl->label.end() ; 
     221    int i, n ; 
     222    for(it=itb, i=0, n=0 ; it!=ite ; ++it,n+=str_len,++i) *it=StdString(&label[n],str_size[i]) ; 
     223    CTimer::get("XIOS").suspend(); 
     224  } 
     225 
     226  void cxios_get_axisgroup_label(axisgroup_Ptr axisgroup_hdl, char* label, int str_size, int* extent) 
     227  { 
     228    CTimer::get("XIOS").resume(); 
     229    Array<StdString,1>::const_iterator it, itb=axisgroup_hdl->label.getInheritedValue().begin(), ite=axisgroup_hdl->label.getInheritedValue().end() ; 
     230    int n ; 
     231    for(it=itb, n=0 ; it!=ite ; ++it, n+=str_size) it->copy(&label[n],it->size()) ;  
     232    CTimer::get("XIOS").suspend(); 
     233  } 
     234 
     235  bool cxios_is_defined_axisgroup_label(axisgroup_Ptr axisgroup_hdl) 
     236  { 
     237     CTimer::get("XIOS").resume(); 
     238     bool isDefined = axisgroup_hdl->label.hasInheritedValue(); 
     239     CTimer::get("XIOS").suspend(); 
     240     return isDefined; 
     241  } 
     242 
     243 
    216244  void cxios_set_axisgroup_long_name(axisgroup_Ptr axisgroup_hdl, const char * long_name, int long_name_size) 
    217245  { 
     
    386414 
    387415 
     416  void cxios_set_axisgroup_prec(axisgroup_Ptr axisgroup_hdl, int prec) 
     417  { 
     418    CTimer::get("XIOS").resume(); 
     419    axisgroup_hdl->prec.setValue(prec); 
     420    CTimer::get("XIOS").suspend(); 
     421  } 
     422 
     423  void cxios_get_axisgroup_prec(axisgroup_Ptr axisgroup_hdl, int* prec) 
     424  { 
     425    CTimer::get("XIOS").resume(); 
     426    *prec = axisgroup_hdl->prec.getInheritedValue(); 
     427    CTimer::get("XIOS").suspend(); 
     428  } 
     429 
     430  bool cxios_is_defined_axisgroup_prec(axisgroup_Ptr axisgroup_hdl) 
     431  { 
     432     CTimer::get("XIOS").resume(); 
     433     bool isDefined = axisgroup_hdl->prec.hasInheritedValue(); 
     434     CTimer::get("XIOS").suspend(); 
     435     return isDefined; 
     436  } 
     437 
     438 
    388439  void cxios_set_axisgroup_standard_name(axisgroup_Ptr axisgroup_hdl, const char * standard_name, int standard_name_size) 
    389440  { 
  • XIOS/dev/dev_olga/src/interface/c_attr/icdomain_attr.cpp

    r789 r1158  
    747747 
    748748 
     749  void cxios_set_domain_prec(domain_Ptr domain_hdl, int prec) 
     750  { 
     751    CTimer::get("XIOS").resume(); 
     752    domain_hdl->prec.setValue(prec); 
     753    CTimer::get("XIOS").suspend(); 
     754  } 
     755 
     756  void cxios_get_domain_prec(domain_Ptr domain_hdl, int* prec) 
     757  { 
     758    CTimer::get("XIOS").resume(); 
     759    *prec = domain_hdl->prec.getInheritedValue(); 
     760    CTimer::get("XIOS").suspend(); 
     761  } 
     762 
     763  bool cxios_is_defined_domain_prec(domain_Ptr domain_hdl) 
     764  { 
     765     CTimer::get("XIOS").resume(); 
     766     bool isDefined = domain_hdl->prec.hasInheritedValue(); 
     767     CTimer::get("XIOS").suspend(); 
     768     return isDefined; 
     769  } 
     770 
     771 
    749772  void cxios_set_domain_standard_name(domain_Ptr domain_hdl, const char * standard_name, int standard_name_size) 
    750773  { 
  • XIOS/dev/dev_olga/src/interface/c_attr/icdomaingroup_attr.cpp

    r789 r1158  
    773773 
    774774 
     775  void cxios_set_domaingroup_prec(domaingroup_Ptr domaingroup_hdl, int prec) 
     776  { 
     777    CTimer::get("XIOS").resume(); 
     778    domaingroup_hdl->prec.setValue(prec); 
     779    CTimer::get("XIOS").suspend(); 
     780  } 
     781 
     782  void cxios_get_domaingroup_prec(domaingroup_Ptr domaingroup_hdl, int* prec) 
     783  { 
     784    CTimer::get("XIOS").resume(); 
     785    *prec = domaingroup_hdl->prec.getInheritedValue(); 
     786    CTimer::get("XIOS").suspend(); 
     787  } 
     788 
     789  bool cxios_is_defined_domaingroup_prec(domaingroup_Ptr domaingroup_hdl) 
     790  { 
     791     CTimer::get("XIOS").resume(); 
     792     bool isDefined = domaingroup_hdl->prec.hasInheritedValue(); 
     793     CTimer::get("XIOS").suspend(); 
     794     return isDefined; 
     795  } 
     796 
     797 
    775798  void cxios_set_domaingroup_standard_name(domaingroup_Ptr domaingroup_hdl, const char * standard_name, int standard_name_size) 
    776799  { 
  • XIOS/dev/dev_olga/src/interface/c_attr/icexpand_domain_attr.cpp

    r981 r1158  
    1717{ 
    1818  typedef xios::CExpandDomain* expand_domain_Ptr; 
     19 
     20  void cxios_set_expand_domain_i_periodic(expand_domain_Ptr expand_domain_hdl, bool i_periodic) 
     21  { 
     22    CTimer::get("XIOS").resume(); 
     23    expand_domain_hdl->i_periodic.setValue(i_periodic); 
     24    CTimer::get("XIOS").suspend(); 
     25  } 
     26 
     27  void cxios_get_expand_domain_i_periodic(expand_domain_Ptr expand_domain_hdl, bool* i_periodic) 
     28  { 
     29    CTimer::get("XIOS").resume(); 
     30    *i_periodic = expand_domain_hdl->i_periodic.getInheritedValue(); 
     31    CTimer::get("XIOS").suspend(); 
     32  } 
     33 
     34  bool cxios_is_defined_expand_domain_i_periodic(expand_domain_Ptr expand_domain_hdl) 
     35  { 
     36     CTimer::get("XIOS").resume(); 
     37     bool isDefined = expand_domain_hdl->i_periodic.hasInheritedValue(); 
     38     CTimer::get("XIOS").suspend(); 
     39     return isDefined; 
     40  } 
     41 
     42 
     43  void cxios_set_expand_domain_j_periodic(expand_domain_Ptr expand_domain_hdl, bool j_periodic) 
     44  { 
     45    CTimer::get("XIOS").resume(); 
     46    expand_domain_hdl->j_periodic.setValue(j_periodic); 
     47    CTimer::get("XIOS").suspend(); 
     48  } 
     49 
     50  void cxios_get_expand_domain_j_periodic(expand_domain_Ptr expand_domain_hdl, bool* j_periodic) 
     51  { 
     52    CTimer::get("XIOS").resume(); 
     53    *j_periodic = expand_domain_hdl->j_periodic.getInheritedValue(); 
     54    CTimer::get("XIOS").suspend(); 
     55  } 
     56 
     57  bool cxios_is_defined_expand_domain_j_periodic(expand_domain_Ptr expand_domain_hdl) 
     58  { 
     59     CTimer::get("XIOS").resume(); 
     60     bool isDefined = expand_domain_hdl->j_periodic.hasInheritedValue(); 
     61     CTimer::get("XIOS").suspend(); 
     62     return isDefined; 
     63  } 
     64 
    1965 
    2066  void cxios_set_expand_domain_order(expand_domain_Ptr expand_domain_hdl, int order) 
  • XIOS/dev/dev_olga/src/interface/c_attr/icfile_attr.cpp

    r932 r1158  
    553553 
    554554 
     555  void cxios_set_file_time_stamp_format(file_Ptr file_hdl, const char * time_stamp_format, int time_stamp_format_size) 
     556  { 
     557    std::string time_stamp_format_str; 
     558    if (!cstr2string(time_stamp_format, time_stamp_format_size, time_stamp_format_str)) return; 
     559    CTimer::get("XIOS").resume(); 
     560    file_hdl->time_stamp_format.setValue(time_stamp_format_str); 
     561    CTimer::get("XIOS").suspend(); 
     562  } 
     563 
     564  void cxios_get_file_time_stamp_format(file_Ptr file_hdl, char * time_stamp_format, int time_stamp_format_size) 
     565  { 
     566    CTimer::get("XIOS").resume(); 
     567    if (!string_copy(file_hdl->time_stamp_format.getInheritedValue(), time_stamp_format, time_stamp_format_size)) 
     568      ERROR("void cxios_get_file_time_stamp_format(file_Ptr file_hdl, char * time_stamp_format, int time_stamp_format_size)", << "Input string is too short"); 
     569    CTimer::get("XIOS").suspend(); 
     570  } 
     571 
     572  bool cxios_is_defined_file_time_stamp_format(file_Ptr file_hdl) 
     573  { 
     574     CTimer::get("XIOS").resume(); 
     575     bool isDefined = file_hdl->time_stamp_format.hasInheritedValue(); 
     576     CTimer::get("XIOS").suspend(); 
     577     return isDefined; 
     578  } 
     579 
     580 
     581  void cxios_set_file_time_stamp_name(file_Ptr file_hdl, const char * time_stamp_name, int time_stamp_name_size) 
     582  { 
     583    std::string time_stamp_name_str; 
     584    if (!cstr2string(time_stamp_name, time_stamp_name_size, time_stamp_name_str)) return; 
     585    CTimer::get("XIOS").resume(); 
     586    file_hdl->time_stamp_name.setValue(time_stamp_name_str); 
     587    CTimer::get("XIOS").suspend(); 
     588  } 
     589 
     590  void cxios_get_file_time_stamp_name(file_Ptr file_hdl, char * time_stamp_name, int time_stamp_name_size) 
     591  { 
     592    CTimer::get("XIOS").resume(); 
     593    if (!string_copy(file_hdl->time_stamp_name.getInheritedValue(), time_stamp_name, time_stamp_name_size)) 
     594      ERROR("void cxios_get_file_time_stamp_name(file_Ptr file_hdl, char * time_stamp_name, int time_stamp_name_size)", << "Input string is too short"); 
     595    CTimer::get("XIOS").suspend(); 
     596  } 
     597 
     598  bool cxios_is_defined_file_time_stamp_name(file_Ptr file_hdl) 
     599  { 
     600     CTimer::get("XIOS").resume(); 
     601     bool isDefined = file_hdl->time_stamp_name.hasInheritedValue(); 
     602     CTimer::get("XIOS").suspend(); 
     603     return isDefined; 
     604  } 
     605 
     606 
     607  void cxios_set_file_time_units(file_Ptr file_hdl, const char * time_units, int time_units_size) 
     608  { 
     609    std::string time_units_str; 
     610    if (!cstr2string(time_units, time_units_size, time_units_str)) return; 
     611    CTimer::get("XIOS").resume(); 
     612    file_hdl->time_units.fromString(time_units_str); 
     613    CTimer::get("XIOS").suspend(); 
     614  } 
     615 
     616  void cxios_get_file_time_units(file_Ptr file_hdl, char * time_units, int time_units_size) 
     617  { 
     618    CTimer::get("XIOS").resume(); 
     619    if (!string_copy(file_hdl->time_units.getInheritedStringValue(), time_units, time_units_size)) 
     620      ERROR("void cxios_get_file_time_units(file_Ptr file_hdl, char * time_units, int time_units_size)", << "Input string is too short"); 
     621    CTimer::get("XIOS").suspend(); 
     622  } 
     623 
     624  bool cxios_is_defined_file_time_units(file_Ptr file_hdl) 
     625  { 
     626     CTimer::get("XIOS").resume(); 
     627     bool isDefined = file_hdl->time_units.hasInheritedValue(); 
     628     CTimer::get("XIOS").suspend(); 
     629     return isDefined; 
     630  } 
     631 
     632 
    555633  void cxios_set_file_timeseries(file_Ptr file_hdl, const char * timeseries, int timeseries_size) 
    556634  { 
     
    629707     return isDefined; 
    630708  } 
     709 
     710 
     711  void cxios_set_file_uuid_format(file_Ptr file_hdl, const char * uuid_format, int uuid_format_size) 
     712  { 
     713    std::string uuid_format_str; 
     714    if (!cstr2string(uuid_format, uuid_format_size, uuid_format_str)) return; 
     715    CTimer::get("XIOS").resume(); 
     716    file_hdl->uuid_format.setValue(uuid_format_str); 
     717    CTimer::get("XIOS").suspend(); 
     718  } 
     719 
     720  void cxios_get_file_uuid_format(file_Ptr file_hdl, char * uuid_format, int uuid_format_size) 
     721  { 
     722    CTimer::get("XIOS").resume(); 
     723    if (!string_copy(file_hdl->uuid_format.getInheritedValue(), uuid_format, uuid_format_size)) 
     724      ERROR("void cxios_get_file_uuid_format(file_Ptr file_hdl, char * uuid_format, int uuid_format_size)", << "Input string is too short"); 
     725    CTimer::get("XIOS").suspend(); 
     726  } 
     727 
     728  bool cxios_is_defined_file_uuid_format(file_Ptr file_hdl) 
     729  { 
     730     CTimer::get("XIOS").resume(); 
     731     bool isDefined = file_hdl->uuid_format.hasInheritedValue(); 
     732     CTimer::get("XIOS").suspend(); 
     733     return isDefined; 
     734  } 
     735 
     736 
     737  void cxios_set_file_uuid_name(file_Ptr file_hdl, const char * uuid_name, int uuid_name_size) 
     738  { 
     739    std::string uuid_name_str; 
     740    if (!cstr2string(uuid_name, uuid_name_size, uuid_name_str)) return; 
     741    CTimer::get("XIOS").resume(); 
     742    file_hdl->uuid_name.setValue(uuid_name_str); 
     743    CTimer::get("XIOS").suspend(); 
     744  } 
     745 
     746  void cxios_get_file_uuid_name(file_Ptr file_hdl, char * uuid_name, int uuid_name_size) 
     747  { 
     748    CTimer::get("XIOS").resume(); 
     749    if (!string_copy(file_hdl->uuid_name.getInheritedValue(), uuid_name, uuid_name_size)) 
     750      ERROR("void cxios_get_file_uuid_name(file_Ptr file_hdl, char * uuid_name, int uuid_name_size)", << "Input string is too short"); 
     751    CTimer::get("XIOS").suspend(); 
     752  } 
     753 
     754  bool cxios_is_defined_file_uuid_name(file_Ptr file_hdl) 
     755  { 
     756     CTimer::get("XIOS").resume(); 
     757     bool isDefined = file_hdl->uuid_name.hasInheritedValue(); 
     758     CTimer::get("XIOS").suspend(); 
     759     return isDefined; 
     760  } 
    631761} 
  • XIOS/dev/dev_olga/src/interface/c_attr/icfilegroup_attr.cpp

    r932 r1158  
    579579 
    580580 
     581  void cxios_set_filegroup_time_stamp_format(filegroup_Ptr filegroup_hdl, const char * time_stamp_format, int time_stamp_format_size) 
     582  { 
     583    std::string time_stamp_format_str; 
     584    if (!cstr2string(time_stamp_format, time_stamp_format_size, time_stamp_format_str)) return; 
     585    CTimer::get("XIOS").resume(); 
     586    filegroup_hdl->time_stamp_format.setValue(time_stamp_format_str); 
     587    CTimer::get("XIOS").suspend(); 
     588  } 
     589 
     590  void cxios_get_filegroup_time_stamp_format(filegroup_Ptr filegroup_hdl, char * time_stamp_format, int time_stamp_format_size) 
     591  { 
     592    CTimer::get("XIOS").resume(); 
     593    if (!string_copy(filegroup_hdl->time_stamp_format.getInheritedValue(), time_stamp_format, time_stamp_format_size)) 
     594      ERROR("void cxios_get_filegroup_time_stamp_format(filegroup_Ptr filegroup_hdl, char * time_stamp_format, int time_stamp_format_size)", << "Input string is too short"); 
     595    CTimer::get("XIOS").suspend(); 
     596  } 
     597 
     598  bool cxios_is_defined_filegroup_time_stamp_format(filegroup_Ptr filegroup_hdl) 
     599  { 
     600     CTimer::get("XIOS").resume(); 
     601     bool isDefined = filegroup_hdl->time_stamp_format.hasInheritedValue(); 
     602     CTimer::get("XIOS").suspend(); 
     603     return isDefined; 
     604  } 
     605 
     606 
     607  void cxios_set_filegroup_time_stamp_name(filegroup_Ptr filegroup_hdl, const char * time_stamp_name, int time_stamp_name_size) 
     608  { 
     609    std::string time_stamp_name_str; 
     610    if (!cstr2string(time_stamp_name, time_stamp_name_size, time_stamp_name_str)) return; 
     611    CTimer::get("XIOS").resume(); 
     612    filegroup_hdl->time_stamp_name.setValue(time_stamp_name_str); 
     613    CTimer::get("XIOS").suspend(); 
     614  } 
     615 
     616  void cxios_get_filegroup_time_stamp_name(filegroup_Ptr filegroup_hdl, char * time_stamp_name, int time_stamp_name_size) 
     617  { 
     618    CTimer::get("XIOS").resume(); 
     619    if (!string_copy(filegroup_hdl->time_stamp_name.getInheritedValue(), time_stamp_name, time_stamp_name_size)) 
     620      ERROR("void cxios_get_filegroup_time_stamp_name(filegroup_Ptr filegroup_hdl, char * time_stamp_name, int time_stamp_name_size)", << "Input string is too short"); 
     621    CTimer::get("XIOS").suspend(); 
     622  } 
     623 
     624  bool cxios_is_defined_filegroup_time_stamp_name(filegroup_Ptr filegroup_hdl) 
     625  { 
     626     CTimer::get("XIOS").resume(); 
     627     bool isDefined = filegroup_hdl->time_stamp_name.hasInheritedValue(); 
     628     CTimer::get("XIOS").suspend(); 
     629     return isDefined; 
     630  } 
     631 
     632 
     633  void cxios_set_filegroup_time_units(filegroup_Ptr filegroup_hdl, const char * time_units, int time_units_size) 
     634  { 
     635    std::string time_units_str; 
     636    if (!cstr2string(time_units, time_units_size, time_units_str)) return; 
     637    CTimer::get("XIOS").resume(); 
     638    filegroup_hdl->time_units.fromString(time_units_str); 
     639    CTimer::get("XIOS").suspend(); 
     640  } 
     641 
     642  void cxios_get_filegroup_time_units(filegroup_Ptr filegroup_hdl, char * time_units, int time_units_size) 
     643  { 
     644    CTimer::get("XIOS").resume(); 
     645    if (!string_copy(filegroup_hdl->time_units.getInheritedStringValue(), time_units, time_units_size)) 
     646      ERROR("void cxios_get_filegroup_time_units(filegroup_Ptr filegroup_hdl, char * time_units, int time_units_size)", << "Input string is too short"); 
     647    CTimer::get("XIOS").suspend(); 
     648  } 
     649 
     650  bool cxios_is_defined_filegroup_time_units(filegroup_Ptr filegroup_hdl) 
     651  { 
     652     CTimer::get("XIOS").resume(); 
     653     bool isDefined = filegroup_hdl->time_units.hasInheritedValue(); 
     654     CTimer::get("XIOS").suspend(); 
     655     return isDefined; 
     656  } 
     657 
     658 
    581659  void cxios_set_filegroup_timeseries(filegroup_Ptr filegroup_hdl, const char * timeseries, int timeseries_size) 
    582660  { 
     
    655733     return isDefined; 
    656734  } 
     735 
     736 
     737  void cxios_set_filegroup_uuid_format(filegroup_Ptr filegroup_hdl, const char * uuid_format, int uuid_format_size) 
     738  { 
     739    std::string uuid_format_str; 
     740    if (!cstr2string(uuid_format, uuid_format_size, uuid_format_str)) return; 
     741    CTimer::get("XIOS").resume(); 
     742    filegroup_hdl->uuid_format.setValue(uuid_format_str); 
     743    CTimer::get("XIOS").suspend(); 
     744  } 
     745 
     746  void cxios_get_filegroup_uuid_format(filegroup_Ptr filegroup_hdl, char * uuid_format, int uuid_format_size) 
     747  { 
     748    CTimer::get("XIOS").resume(); 
     749    if (!string_copy(filegroup_hdl->uuid_format.getInheritedValue(), uuid_format, uuid_format_size)) 
     750      ERROR("void cxios_get_filegroup_uuid_format(filegroup_Ptr filegroup_hdl, char * uuid_format, int uuid_format_size)", << "Input string is too short"); 
     751    CTimer::get("XIOS").suspend(); 
     752  } 
     753 
     754  bool cxios_is_defined_filegroup_uuid_format(filegroup_Ptr filegroup_hdl) 
     755  { 
     756     CTimer::get("XIOS").resume(); 
     757     bool isDefined = filegroup_hdl->uuid_format.hasInheritedValue(); 
     758     CTimer::get("XIOS").suspend(); 
     759     return isDefined; 
     760  } 
     761 
     762 
     763  void cxios_set_filegroup_uuid_name(filegroup_Ptr filegroup_hdl, const char * uuid_name, int uuid_name_size) 
     764  { 
     765    std::string uuid_name_str; 
     766    if (!cstr2string(uuid_name, uuid_name_size, uuid_name_str)) return; 
     767    CTimer::get("XIOS").resume(); 
     768    filegroup_hdl->uuid_name.setValue(uuid_name_str); 
     769    CTimer::get("XIOS").suspend(); 
     770  } 
     771 
     772  void cxios_get_filegroup_uuid_name(filegroup_Ptr filegroup_hdl, char * uuid_name, int uuid_name_size) 
     773  { 
     774    CTimer::get("XIOS").resume(); 
     775    if (!string_copy(filegroup_hdl->uuid_name.getInheritedValue(), uuid_name, uuid_name_size)) 
     776      ERROR("void cxios_get_filegroup_uuid_name(filegroup_Ptr filegroup_hdl, char * uuid_name, int uuid_name_size)", << "Input string is too short"); 
     777    CTimer::get("XIOS").suspend(); 
     778  } 
     779 
     780  bool cxios_is_defined_filegroup_uuid_name(filegroup_Ptr filegroup_hdl) 
     781  { 
     782     CTimer::get("XIOS").resume(); 
     783     bool isDefined = filegroup_hdl->uuid_name.hasInheritedValue(); 
     784     CTimer::get("XIOS").suspend(); 
     785     return isDefined; 
     786  } 
    657787} 
  • XIOS/dev/dev_olga/src/interface/c_attr/icinterpolate_domain_attr.cpp

    r1021 r1158  
    1717{ 
    1818  typedef xios::CInterpolateDomain* interpolate_domain_Ptr; 
    19  
    20   void cxios_set_interpolate_domain_file(interpolate_domain_Ptr interpolate_domain_hdl, const char * file, int file_size) 
    21   { 
    22     std::string file_str; 
    23     if (!cstr2string(file, file_size, file_str)) return; 
    24     CTimer::get("XIOS").resume(); 
    25     interpolate_domain_hdl->file.setValue(file_str); 
    26     CTimer::get("XIOS").suspend(); 
    27   } 
    28  
    29   void cxios_get_interpolate_domain_file(interpolate_domain_Ptr interpolate_domain_hdl, char * file, int file_size) 
    30   { 
    31     CTimer::get("XIOS").resume(); 
    32     if (!string_copy(interpolate_domain_hdl->file.getInheritedValue(), file, file_size)) 
    33       ERROR("void cxios_get_interpolate_domain_file(interpolate_domain_Ptr interpolate_domain_hdl, char * file, int file_size)", << "Input string is too short"); 
    34     CTimer::get("XIOS").suspend(); 
    35   } 
    36  
    37   bool cxios_is_defined_interpolate_domain_file(interpolate_domain_Ptr interpolate_domain_hdl) 
    38   { 
    39      CTimer::get("XIOS").resume(); 
    40      bool isDefined = interpolate_domain_hdl->file.hasInheritedValue(); 
    41      CTimer::get("XIOS").suspend(); 
    42      return isDefined; 
    43   } 
    44  
    4519 
    4620  void cxios_set_interpolate_domain_mode(interpolate_domain_Ptr interpolate_domain_hdl, const char * mode, int mode_size) 
  • XIOS/dev/dev_olga/src/interface/c_attr/icscalar_attr.cpp

    r891 r1158  
    6565     CTimer::get("XIOS").resume(); 
    6666     bool isDefined = scalar_hdl->name.hasInheritedValue(); 
     67     CTimer::get("XIOS").suspend(); 
     68     return isDefined; 
     69  } 
     70 
     71 
     72  void cxios_set_scalar_prec(scalar_Ptr scalar_hdl, int prec) 
     73  { 
     74    CTimer::get("XIOS").resume(); 
     75    scalar_hdl->prec.setValue(prec); 
     76    CTimer::get("XIOS").suspend(); 
     77  } 
     78 
     79  void cxios_get_scalar_prec(scalar_Ptr scalar_hdl, int* prec) 
     80  { 
     81    CTimer::get("XIOS").resume(); 
     82    *prec = scalar_hdl->prec.getInheritedValue(); 
     83    CTimer::get("XIOS").suspend(); 
     84  } 
     85 
     86  bool cxios_is_defined_scalar_prec(scalar_Ptr scalar_hdl) 
     87  { 
     88     CTimer::get("XIOS").resume(); 
     89     bool isDefined = scalar_hdl->prec.hasInheritedValue(); 
    6790     CTimer::get("XIOS").suspend(); 
    6891     return isDefined; 
  • XIOS/dev/dev_olga/src/interface/c_attr/icscalargroup_attr.cpp

    r891 r1158  
    9696 
    9797 
     98  void cxios_set_scalargroup_prec(scalargroup_Ptr scalargroup_hdl, int prec) 
     99  { 
     100    CTimer::get("XIOS").resume(); 
     101    scalargroup_hdl->prec.setValue(prec); 
     102    CTimer::get("XIOS").suspend(); 
     103  } 
     104 
     105  void cxios_get_scalargroup_prec(scalargroup_Ptr scalargroup_hdl, int* prec) 
     106  { 
     107    CTimer::get("XIOS").resume(); 
     108    *prec = scalargroup_hdl->prec.getInheritedValue(); 
     109    CTimer::get("XIOS").suspend(); 
     110  } 
     111 
     112  bool cxios_is_defined_scalargroup_prec(scalargroup_Ptr scalargroup_hdl) 
     113  { 
     114     CTimer::get("XIOS").resume(); 
     115     bool isDefined = scalargroup_hdl->prec.hasInheritedValue(); 
     116     CTimer::get("XIOS").suspend(); 
     117     return isDefined; 
     118  } 
     119 
     120 
    98121  void cxios_set_scalargroup_scalar_ref(scalargroup_Ptr scalargroup_hdl, const char * scalar_ref, int scalar_ref_size) 
    99122  { 
  • XIOS/dev/dev_olga/src/interface/c_attr/icvariable_attr.cpp

    r591 r1158  
    4444 
    4545 
     46  void cxios_set_variable_ts_target(variable_Ptr variable_hdl, const char * ts_target, int ts_target_size) 
     47  { 
     48    std::string ts_target_str; 
     49    if (!cstr2string(ts_target, ts_target_size, ts_target_str)) return; 
     50    CTimer::get("XIOS").resume(); 
     51    variable_hdl->ts_target.fromString(ts_target_str); 
     52    CTimer::get("XIOS").suspend(); 
     53  } 
     54 
     55  void cxios_get_variable_ts_target(variable_Ptr variable_hdl, char * ts_target, int ts_target_size) 
     56  { 
     57    CTimer::get("XIOS").resume(); 
     58    if (!string_copy(variable_hdl->ts_target.getInheritedStringValue(), ts_target, ts_target_size)) 
     59      ERROR("void cxios_get_variable_ts_target(variable_Ptr variable_hdl, char * ts_target, int ts_target_size)", << "Input string is too short"); 
     60    CTimer::get("XIOS").suspend(); 
     61  } 
     62 
     63  bool cxios_is_defined_variable_ts_target(variable_Ptr variable_hdl) 
     64  { 
     65     CTimer::get("XIOS").resume(); 
     66     bool isDefined = variable_hdl->ts_target.hasInheritedValue(); 
     67     CTimer::get("XIOS").suspend(); 
     68     return isDefined; 
     69  } 
     70 
     71 
    4672  void cxios_set_variable_type(variable_Ptr variable_hdl, const char * type, int type_size) 
    4773  { 
  • XIOS/dev/dev_olga/src/interface/c_attr/icvariablegroup_attr.cpp

    r591 r1158  
    7070 
    7171 
     72  void cxios_set_variablegroup_ts_target(variablegroup_Ptr variablegroup_hdl, const char * ts_target, int ts_target_size) 
     73  { 
     74    std::string ts_target_str; 
     75    if (!cstr2string(ts_target, ts_target_size, ts_target_str)) return; 
     76    CTimer::get("XIOS").resume(); 
     77    variablegroup_hdl->ts_target.fromString(ts_target_str); 
     78    CTimer::get("XIOS").suspend(); 
     79  } 
     80 
     81  void cxios_get_variablegroup_ts_target(variablegroup_Ptr variablegroup_hdl, char * ts_target, int ts_target_size) 
     82  { 
     83    CTimer::get("XIOS").resume(); 
     84    if (!string_copy(variablegroup_hdl->ts_target.getInheritedStringValue(), ts_target, ts_target_size)) 
     85      ERROR("void cxios_get_variablegroup_ts_target(variablegroup_Ptr variablegroup_hdl, char * ts_target, int ts_target_size)", << "Input string is too short"); 
     86    CTimer::get("XIOS").suspend(); 
     87  } 
     88 
     89  bool cxios_is_defined_variablegroup_ts_target(variablegroup_Ptr variablegroup_hdl) 
     90  { 
     91     CTimer::get("XIOS").resume(); 
     92     bool isDefined = variablegroup_hdl->ts_target.hasInheritedValue(); 
     93     CTimer::get("XIOS").suspend(); 
     94     return isDefined; 
     95  } 
     96 
     97 
    7298  void cxios_set_variablegroup_type(variablegroup_Ptr variablegroup_hdl, const char * type, int type_size) 
    7399  { 
  • XIOS/dev/dev_olga/src/interface/fortran/field_interface.f90

    r943 r1158  
    1818      END SUBROUTINE cxios_field_valid_id 
    1919 
    20       SUBROUTINE cxios_field_is_active(field_hdl, ret) BIND(C) 
     20      SUBROUTINE cxios_field_is_active(field_hdl, at_current_timestep, ret) BIND(C) 
    2121         USE ISO_C_BINDING 
    2222         INTEGER  (kind = C_INTPTR_T), VALUE        :: field_hdl 
     23         LOGICAL  (kind = C_BOOL), VALUE            :: at_current_timestep 
    2324         LOGICAL  (kind = C_BOOL)                   :: ret 
    2425      END SUBROUTINE cxios_field_is_active 
  • XIOS/dev/dev_olga/src/interface/fortran/idata.F90

    r1054 r1158  
    88 
    99      SUBROUTINE  cxios_init_server() BIND(C) 
    10          USE ISO_C_BINDING 
    1110      END SUBROUTINE cxios_init_server 
    1211 
     
    454453   SUBROUTINE  xios(init_server)() 
    455454   IMPLICIT NONE 
    456        CALL cxios_init_server() 
     455     CALL cxios_init_server() 
    457456   END SUBROUTINE xios(init_server) 
    458457 
  • XIOS/dev/dev_olga/src/interface/fortran/ifield.F90

    r943 r1158  
    142142   END FUNCTION  xios(is_valid_fieldgroup) 
    143143    
    144   LOGICAL FUNCTION xios(field_is_active_id(field_id)) 
     144  LOGICAL FUNCTION xios(field_is_active_id)(field_id, at_current_timestep_arg) 
    145145      IMPLICIT NONE 
    146       CHARACTER(len  = *)    , INTENT(IN) :: field_id 
    147       LOGICAL  (kind = 1)                 :: val 
    148       TYPE(txios(field))                 :: field_hdl 
    149        
     146      CHARACTER(len  = *) , INTENT(IN) :: field_id 
     147      LOGICAL, OPTIONAL   , INTENT(IN) :: at_current_timestep_arg 
     148      TYPE(txios(field))               :: field_hdl 
     149 
    150150      CALL xios(get_field_handle)(field_id,field_hdl) 
    151       xios(field_is_active_id)=xios(field_is_active_hdl(field_hdl)) 
     151      xios(field_is_active_id) = xios(field_is_active_hdl)(field_hdl, at_current_timestep_arg) 
    152152 
    153    END FUNCTION  xios(field_is_active_id) 
    154     
    155     
    156    LOGICAL FUNCTION xios(field_is_active_hdl(field_hdl)) 
     153   END FUNCTION xios(field_is_active_id) 
     154 
     155   LOGICAL FUNCTION xios(field_is_active_hdl)(field_hdl, at_current_timestep_arg) 
    157156      IMPLICIT NONE 
    158       TYPE(txios(field)),INTENT(IN)       :: field_hdl 
    159       LOGICAL  (kind = 1)                 :: ret 
    160        
    161       CALL cxios_field_is_active(field_hdl%daddr, ret); 
     157      TYPE(txios(field)) , INTENT(IN) :: field_hdl 
     158      LOGICAL, OPTIONAL  , INTENT(IN) :: at_current_timestep_arg 
     159      LOGICAL(kind = C_BOOL)          :: at_current_timestep 
     160      LOGICAL(kind = C_BOOL)          :: ret 
     161 
     162      IF (PRESENT(at_current_timestep_arg)) THEN 
     163         at_current_timestep = at_current_timestep_arg 
     164      ELSE 
     165         at_current_timestep = .FALSE. 
     166      ENDIF 
     167 
     168      CALL cxios_field_is_active(field_hdl%daddr, at_current_timestep, ret); 
    162169      xios(field_is_active_hdl) = ret 
    163170       
    164    END FUNCTION  xios(field_is_active_hdl)  
     171   END FUNCTION xios(field_is_active_hdl) 
    165172  
    166  
    167173END MODULE IFIELD 
  • XIOS/dev/dev_olga/src/interface/fortran_attr/axis_interface_attr.F90

    r817 r1158  
    151151 
    152152 
     153    SUBROUTINE cxios_set_axis_label(axis_hdl, label, str_len, str_size, extent) BIND(C) 
     154      USE ISO_C_BINDING 
     155      INTEGER (kind = C_INTPTR_T), VALUE       :: axis_hdl 
     156      CHARACTER (KIND=C_CHAR), DIMENSION(*)    :: label 
     157      INTEGER (kind = C_INT), VALUE            :: str_len 
     158      INTEGER (kind = C_INT), DIMENSION(*)     :: str_size 
     159      INTEGER (kind = C_INT), DIMENSION(*)     :: extent 
     160    END SUBROUTINE cxios_set_axis_label 
     161 
     162    SUBROUTINE cxios_get_axis_label(axis_hdl, label, str_size, extent) BIND(C) 
     163      USE ISO_C_BINDING 
     164      INTEGER (kind = C_INTPTR_T), VALUE       :: axis_hdl 
     165      CHARACTER (KIND=C_CHAR), DIMENSION(*)    :: label 
     166      INTEGER (kind = C_INT), VALUE            :: str_size 
     167      INTEGER (kind = C_INT), DIMENSION(*)     :: extent 
     168    END SUBROUTINE cxios_get_axis_label 
     169 
     170    FUNCTION cxios_is_defined_axis_label(axis_hdl) BIND(C) 
     171      USE ISO_C_BINDING 
     172      LOGICAL(kind=C_BOOL) :: cxios_is_defined_axis_label 
     173      INTEGER (kind = C_INTPTR_T), VALUE :: axis_hdl 
     174    END FUNCTION cxios_is_defined_axis_label 
     175 
     176 
    153177    SUBROUTINE cxios_set_axis_long_name(axis_hdl, long_name, long_name_size) BIND(C) 
    154178      USE ISO_C_BINDING 
     
    292316 
    293317 
     318    SUBROUTINE cxios_set_axis_prec(axis_hdl, prec) BIND(C) 
     319      USE ISO_C_BINDING 
     320      INTEGER (kind = C_INTPTR_T), VALUE :: axis_hdl 
     321      INTEGER (KIND=C_INT)      , VALUE :: prec 
     322    END SUBROUTINE cxios_set_axis_prec 
     323 
     324    SUBROUTINE cxios_get_axis_prec(axis_hdl, prec) BIND(C) 
     325      USE ISO_C_BINDING 
     326      INTEGER (kind = C_INTPTR_T), VALUE :: axis_hdl 
     327      INTEGER (KIND=C_INT)             :: prec 
     328    END SUBROUTINE cxios_get_axis_prec 
     329 
     330    FUNCTION cxios_is_defined_axis_prec(axis_hdl) BIND(C) 
     331      USE ISO_C_BINDING 
     332      LOGICAL(kind=C_BOOL) :: cxios_is_defined_axis_prec 
     333      INTEGER (kind = C_INTPTR_T), VALUE :: axis_hdl 
     334    END FUNCTION cxios_is_defined_axis_prec 
     335 
     336 
    294337    SUBROUTINE cxios_set_axis_standard_name(axis_hdl, standard_name, standard_name_size) BIND(C) 
    295338      USE ISO_C_BINDING 
  • XIOS/dev/dev_olga/src/interface/fortran_attr/axisgroup_interface_attr.F90

    r817 r1158  
    172172 
    173173 
     174    SUBROUTINE cxios_set_axisgroup_label(axisgroup_hdl, label, str_len, str_size, extent) BIND(C) 
     175      USE ISO_C_BINDING 
     176      INTEGER (kind = C_INTPTR_T), VALUE       :: axisgroup_hdl 
     177      CHARACTER (KIND=C_CHAR), DIMENSION(*)    :: label 
     178      INTEGER (kind = C_INT), VALUE            :: str_len 
     179      INTEGER (kind = C_INT), DIMENSION(*)     :: str_size 
     180      INTEGER (kind = C_INT), DIMENSION(*)     :: extent 
     181    END SUBROUTINE cxios_set_axisgroup_label 
     182 
     183    SUBROUTINE cxios_get_axisgroup_label(axisgroup_hdl, label, str_size, extent) BIND(C) 
     184      USE ISO_C_BINDING 
     185      INTEGER (kind = C_INTPTR_T), VALUE       :: axisgroup_hdl 
     186      CHARACTER (KIND=C_CHAR), DIMENSION(*)    :: label 
     187      INTEGER (kind = C_INT), VALUE            :: str_size 
     188      INTEGER (kind = C_INT), DIMENSION(*)     :: extent 
     189    END SUBROUTINE cxios_get_axisgroup_label 
     190 
     191    FUNCTION cxios_is_defined_axisgroup_label(axisgroup_hdl) BIND(C) 
     192      USE ISO_C_BINDING 
     193      LOGICAL(kind=C_BOOL) :: cxios_is_defined_axisgroup_label 
     194      INTEGER (kind = C_INTPTR_T), VALUE :: axisgroup_hdl 
     195    END FUNCTION cxios_is_defined_axisgroup_label 
     196 
     197 
    174198    SUBROUTINE cxios_set_axisgroup_long_name(axisgroup_hdl, long_name, long_name_size) BIND(C) 
    175199      USE ISO_C_BINDING 
     
    313337 
    314338 
     339    SUBROUTINE cxios_set_axisgroup_prec(axisgroup_hdl, prec) BIND(C) 
     340      USE ISO_C_BINDING 
     341      INTEGER (kind = C_INTPTR_T), VALUE :: axisgroup_hdl 
     342      INTEGER (KIND=C_INT)      , VALUE :: prec 
     343    END SUBROUTINE cxios_set_axisgroup_prec 
     344 
     345    SUBROUTINE cxios_get_axisgroup_prec(axisgroup_hdl, prec) BIND(C) 
     346      USE ISO_C_BINDING 
     347      INTEGER (kind = C_INTPTR_T), VALUE :: axisgroup_hdl 
     348      INTEGER (KIND=C_INT)             :: prec 
     349    END SUBROUTINE cxios_get_axisgroup_prec 
     350 
     351    FUNCTION cxios_is_defined_axisgroup_prec(axisgroup_hdl) BIND(C) 
     352      USE ISO_C_BINDING 
     353      LOGICAL(kind=C_BOOL) :: cxios_is_defined_axisgroup_prec 
     354      INTEGER (kind = C_INTPTR_T), VALUE :: axisgroup_hdl 
     355    END FUNCTION cxios_is_defined_axisgroup_prec 
     356 
     357 
    315358    SUBROUTINE cxios_set_axisgroup_standard_name(axisgroup_hdl, standard_name, standard_name_size) BIND(C) 
    316359      USE ISO_C_BINDING 
  • XIOS/dev/dev_olga/src/interface/fortran_attr/domain_interface_attr.F90

    r789 r1158  
    616616 
    617617 
     618    SUBROUTINE cxios_set_domain_prec(domain_hdl, prec) BIND(C) 
     619      USE ISO_C_BINDING 
     620      INTEGER (kind = C_INTPTR_T), VALUE :: domain_hdl 
     621      INTEGER (KIND=C_INT)      , VALUE :: prec 
     622    END SUBROUTINE cxios_set_domain_prec 
     623 
     624    SUBROUTINE cxios_get_domain_prec(domain_hdl, prec) BIND(C) 
     625      USE ISO_C_BINDING 
     626      INTEGER (kind = C_INTPTR_T), VALUE :: domain_hdl 
     627      INTEGER (KIND=C_INT)             :: prec 
     628    END SUBROUTINE cxios_get_domain_prec 
     629 
     630    FUNCTION cxios_is_defined_domain_prec(domain_hdl) BIND(C) 
     631      USE ISO_C_BINDING 
     632      LOGICAL(kind=C_BOOL) :: cxios_is_defined_domain_prec 
     633      INTEGER (kind = C_INTPTR_T), VALUE :: domain_hdl 
     634    END FUNCTION cxios_is_defined_domain_prec 
     635 
     636 
    618637    SUBROUTINE cxios_set_domain_standard_name(domain_hdl, standard_name, standard_name_size) BIND(C) 
    619638      USE ISO_C_BINDING 
  • XIOS/dev/dev_olga/src/interface/fortran_attr/domaingroup_interface_attr.F90

    r789 r1158  
    637637 
    638638 
     639    SUBROUTINE cxios_set_domaingroup_prec(domaingroup_hdl, prec) BIND(C) 
     640      USE ISO_C_BINDING 
     641      INTEGER (kind = C_INTPTR_T), VALUE :: domaingroup_hdl 
     642      INTEGER (KIND=C_INT)      , VALUE :: prec 
     643    END SUBROUTINE cxios_set_domaingroup_prec 
     644 
     645    SUBROUTINE cxios_get_domaingroup_prec(domaingroup_hdl, prec) BIND(C) 
     646      USE ISO_C_BINDING 
     647      INTEGER (kind = C_INTPTR_T), VALUE :: domaingroup_hdl 
     648      INTEGER (KIND=C_INT)             :: prec 
     649    END SUBROUTINE cxios_get_domaingroup_prec 
     650 
     651    FUNCTION cxios_is_defined_domaingroup_prec(domaingroup_hdl) BIND(C) 
     652      USE ISO_C_BINDING 
     653      LOGICAL(kind=C_BOOL) :: cxios_is_defined_domaingroup_prec 
     654      INTEGER (kind = C_INTPTR_T), VALUE :: domaingroup_hdl 
     655    END FUNCTION cxios_is_defined_domaingroup_prec 
     656 
     657 
    639658    SUBROUTINE cxios_set_domaingroup_standard_name(domaingroup_hdl, standard_name, standard_name_size) BIND(C) 
    640659      USE ISO_C_BINDING 
  • XIOS/dev/dev_olga/src/interface/fortran_attr/expand_domain_interface_attr.F90

    r981 r1158  
    99  INTERFACE 
    1010    ! Do not call directly / interface FORTRAN 2003 <-> C99 
     11 
     12    SUBROUTINE cxios_set_expand_domain_i_periodic(expand_domain_hdl, i_periodic) BIND(C) 
     13      USE ISO_C_BINDING 
     14      INTEGER (kind = C_INTPTR_T), VALUE :: expand_domain_hdl 
     15      LOGICAL (KIND=C_BOOL)      , VALUE :: i_periodic 
     16    END SUBROUTINE cxios_set_expand_domain_i_periodic 
     17 
     18    SUBROUTINE cxios_get_expand_domain_i_periodic(expand_domain_hdl, i_periodic) BIND(C) 
     19      USE ISO_C_BINDING 
     20      INTEGER (kind = C_INTPTR_T), VALUE :: expand_domain_hdl 
     21      LOGICAL (KIND=C_BOOL)             :: i_periodic 
     22    END SUBROUTINE cxios_get_expand_domain_i_periodic 
     23 
     24    FUNCTION cxios_is_defined_expand_domain_i_periodic(expand_domain_hdl) BIND(C) 
     25      USE ISO_C_BINDING 
     26      LOGICAL(kind=C_BOOL) :: cxios_is_defined_expand_domain_i_periodic 
     27      INTEGER (kind = C_INTPTR_T), VALUE :: expand_domain_hdl 
     28    END FUNCTION cxios_is_defined_expand_domain_i_periodic 
     29 
     30 
     31    SUBROUTINE cxios_set_expand_domain_j_periodic(expand_domain_hdl, j_periodic) BIND(C) 
     32      USE ISO_C_BINDING 
     33      INTEGER (kind = C_INTPTR_T), VALUE :: expand_domain_hdl 
     34      LOGICAL (KIND=C_BOOL)      , VALUE :: j_periodic 
     35    END SUBROUTINE cxios_set_expand_domain_j_periodic 
     36 
     37    SUBROUTINE cxios_get_expand_domain_j_periodic(expand_domain_hdl, j_periodic) BIND(C) 
     38      USE ISO_C_BINDING 
     39      INTEGER (kind = C_INTPTR_T), VALUE :: expand_domain_hdl 
     40      LOGICAL (KIND=C_BOOL)             :: j_periodic 
     41    END SUBROUTINE cxios_get_expand_domain_j_periodic 
     42 
     43    FUNCTION cxios_is_defined_expand_domain_j_periodic(expand_domain_hdl) BIND(C) 
     44      USE ISO_C_BINDING 
     45      LOGICAL(kind=C_BOOL) :: cxios_is_defined_expand_domain_j_periodic 
     46      INTEGER (kind = C_INTPTR_T), VALUE :: expand_domain_hdl 
     47    END FUNCTION cxios_is_defined_expand_domain_j_periodic 
     48 
    1149 
    1250    SUBROUTINE cxios_set_expand_domain_order(expand_domain_hdl, order) BIND(C) 
  • XIOS/dev/dev_olga/src/interface/fortran_attr/file_interface_attr.F90

    r932 r1158  
    416416 
    417417 
     418    SUBROUTINE cxios_set_file_time_stamp_format(file_hdl, time_stamp_format, time_stamp_format_size) BIND(C) 
     419      USE ISO_C_BINDING 
     420      INTEGER (kind = C_INTPTR_T), VALUE :: file_hdl 
     421      CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: time_stamp_format 
     422      INTEGER  (kind = C_INT)     , VALUE        :: time_stamp_format_size 
     423    END SUBROUTINE cxios_set_file_time_stamp_format 
     424 
     425    SUBROUTINE cxios_get_file_time_stamp_format(file_hdl, time_stamp_format, time_stamp_format_size) BIND(C) 
     426      USE ISO_C_BINDING 
     427      INTEGER (kind = C_INTPTR_T), VALUE :: file_hdl 
     428      CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: time_stamp_format 
     429      INTEGER  (kind = C_INT)     , VALUE        :: time_stamp_format_size 
     430    END SUBROUTINE cxios_get_file_time_stamp_format 
     431 
     432    FUNCTION cxios_is_defined_file_time_stamp_format(file_hdl) BIND(C) 
     433      USE ISO_C_BINDING 
     434      LOGICAL(kind=C_BOOL) :: cxios_is_defined_file_time_stamp_format 
     435      INTEGER (kind = C_INTPTR_T), VALUE :: file_hdl 
     436    END FUNCTION cxios_is_defined_file_time_stamp_format 
     437 
     438 
     439    SUBROUTINE cxios_set_file_time_stamp_name(file_hdl, time_stamp_name, time_stamp_name_size) BIND(C) 
     440      USE ISO_C_BINDING 
     441      INTEGER (kind = C_INTPTR_T), VALUE :: file_hdl 
     442      CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: time_stamp_name 
     443      INTEGER  (kind = C_INT)     , VALUE        :: time_stamp_name_size 
     444    END SUBROUTINE cxios_set_file_time_stamp_name 
     445 
     446    SUBROUTINE cxios_get_file_time_stamp_name(file_hdl, time_stamp_name, time_stamp_name_size) BIND(C) 
     447      USE ISO_C_BINDING 
     448      INTEGER (kind = C_INTPTR_T), VALUE :: file_hdl 
     449      CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: time_stamp_name 
     450      INTEGER  (kind = C_INT)     , VALUE        :: time_stamp_name_size 
     451    END SUBROUTINE cxios_get_file_time_stamp_name 
     452 
     453    FUNCTION cxios_is_defined_file_time_stamp_name(file_hdl) BIND(C) 
     454      USE ISO_C_BINDING 
     455      LOGICAL(kind=C_BOOL) :: cxios_is_defined_file_time_stamp_name 
     456      INTEGER (kind = C_INTPTR_T), VALUE :: file_hdl 
     457    END FUNCTION cxios_is_defined_file_time_stamp_name 
     458 
     459 
     460    SUBROUTINE cxios_set_file_time_units(file_hdl, time_units, time_units_size) BIND(C) 
     461      USE ISO_C_BINDING 
     462      INTEGER (kind = C_INTPTR_T), VALUE :: file_hdl 
     463      CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: time_units 
     464      INTEGER  (kind = C_INT)     , VALUE        :: time_units_size 
     465    END SUBROUTINE cxios_set_file_time_units 
     466 
     467    SUBROUTINE cxios_get_file_time_units(file_hdl, time_units, time_units_size) BIND(C) 
     468      USE ISO_C_BINDING 
     469      INTEGER (kind = C_INTPTR_T), VALUE :: file_hdl 
     470      CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: time_units 
     471      INTEGER  (kind = C_INT)     , VALUE        :: time_units_size 
     472    END SUBROUTINE cxios_get_file_time_units 
     473 
     474    FUNCTION cxios_is_defined_file_time_units(file_hdl) BIND(C) 
     475      USE ISO_C_BINDING 
     476      LOGICAL(kind=C_BOOL) :: cxios_is_defined_file_time_units 
     477      INTEGER (kind = C_INTPTR_T), VALUE :: file_hdl 
     478    END FUNCTION cxios_is_defined_file_time_units 
     479 
     480 
    418481    SUBROUTINE cxios_set_file_timeseries(file_hdl, timeseries, timeseries_size) BIND(C) 
    419482      USE ISO_C_BINDING 
     
    478541    END FUNCTION cxios_is_defined_file_type 
    479542 
     543 
     544    SUBROUTINE cxios_set_file_uuid_format(file_hdl, uuid_format, uuid_format_size) BIND(C) 
     545      USE ISO_C_BINDING 
     546      INTEGER (kind = C_INTPTR_T), VALUE :: file_hdl 
     547      CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: uuid_format 
     548      INTEGER  (kind = C_INT)     , VALUE        :: uuid_format_size 
     549    END SUBROUTINE cxios_set_file_uuid_format 
     550 
     551    SUBROUTINE cxios_get_file_uuid_format(file_hdl, uuid_format, uuid_format_size) BIND(C) 
     552      USE ISO_C_BINDING 
     553      INTEGER (kind = C_INTPTR_T), VALUE :: file_hdl 
     554      CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: uuid_format 
     555      INTEGER  (kind = C_INT)     , VALUE        :: uuid_format_size 
     556    END SUBROUTINE cxios_get_file_uuid_format 
     557 
     558    FUNCTION cxios_is_defined_file_uuid_format(file_hdl) BIND(C) 
     559      USE ISO_C_BINDING 
     560      LOGICAL(kind=C_BOOL) :: cxios_is_defined_file_uuid_format 
     561      INTEGER (kind = C_INTPTR_T), VALUE :: file_hdl 
     562    END FUNCTION cxios_is_defined_file_uuid_format 
     563 
     564 
     565    SUBROUTINE cxios_set_file_uuid_name(file_hdl, uuid_name, uuid_name_size) BIND(C) 
     566      USE ISO_C_BINDING 
     567      INTEGER (kind = C_INTPTR_T), VALUE :: file_hdl 
     568      CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: uuid_name 
     569      INTEGER  (kind = C_INT)     , VALUE        :: uuid_name_size 
     570    END SUBROUTINE cxios_set_file_uuid_name 
     571 
     572    SUBROUTINE cxios_get_file_uuid_name(file_hdl, uuid_name, uuid_name_size) BIND(C) 
     573      USE ISO_C_BINDING 
     574      INTEGER (kind = C_INTPTR_T), VALUE :: file_hdl 
     575      CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: uuid_name 
     576      INTEGER  (kind = C_INT)     , VALUE        :: uuid_name_size 
     577    END SUBROUTINE cxios_get_file_uuid_name 
     578 
     579    FUNCTION cxios_is_defined_file_uuid_name(file_hdl) BIND(C) 
     580      USE ISO_C_BINDING 
     581      LOGICAL(kind=C_BOOL) :: cxios_is_defined_file_uuid_name 
     582      INTEGER (kind = C_INTPTR_T), VALUE :: file_hdl 
     583    END FUNCTION cxios_is_defined_file_uuid_name 
     584 
    480585  END INTERFACE 
    481586 
  • XIOS/dev/dev_olga/src/interface/fortran_attr/filegroup_interface_attr.F90

    r932 r1158  
    437437 
    438438 
     439    SUBROUTINE cxios_set_filegroup_time_stamp_format(filegroup_hdl, time_stamp_format, time_stamp_format_size) BIND(C) 
     440      USE ISO_C_BINDING 
     441      INTEGER (kind = C_INTPTR_T), VALUE :: filegroup_hdl 
     442      CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: time_stamp_format 
     443      INTEGER  (kind = C_INT)     , VALUE        :: time_stamp_format_size 
     444    END SUBROUTINE cxios_set_filegroup_time_stamp_format 
     445 
     446    SUBROUTINE cxios_get_filegroup_time_stamp_format(filegroup_hdl, time_stamp_format, time_stamp_format_size) BIND(C) 
     447      USE ISO_C_BINDING 
     448      INTEGER (kind = C_INTPTR_T), VALUE :: filegroup_hdl 
     449      CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: time_stamp_format 
     450      INTEGER  (kind = C_INT)     , VALUE        :: time_stamp_format_size 
     451    END SUBROUTINE cxios_get_filegroup_time_stamp_format 
     452 
     453    FUNCTION cxios_is_defined_filegroup_time_stamp_format(filegroup_hdl) BIND(C) 
     454      USE ISO_C_BINDING 
     455      LOGICAL(kind=C_BOOL) :: cxios_is_defined_filegroup_time_stamp_format 
     456      INTEGER (kind = C_INTPTR_T), VALUE :: filegroup_hdl 
     457    END FUNCTION cxios_is_defined_filegroup_time_stamp_format 
     458 
     459 
     460    SUBROUTINE cxios_set_filegroup_time_stamp_name(filegroup_hdl, time_stamp_name, time_stamp_name_size) BIND(C) 
     461      USE ISO_C_BINDING 
     462      INTEGER (kind = C_INTPTR_T), VALUE :: filegroup_hdl 
     463      CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: time_stamp_name 
     464      INTEGER  (kind = C_INT)     , VALUE        :: time_stamp_name_size 
     465    END SUBROUTINE cxios_set_filegroup_time_stamp_name 
     466 
     467    SUBROUTINE cxios_get_filegroup_time_stamp_name(filegroup_hdl, time_stamp_name, time_stamp_name_size) BIND(C) 
     468      USE ISO_C_BINDING 
     469      INTEGER (kind = C_INTPTR_T), VALUE :: filegroup_hdl 
     470      CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: time_stamp_name 
     471      INTEGER  (kind = C_INT)     , VALUE        :: time_stamp_name_size 
     472    END SUBROUTINE cxios_get_filegroup_time_stamp_name 
     473 
     474    FUNCTION cxios_is_defined_filegroup_time_stamp_name(filegroup_hdl) BIND(C) 
     475      USE ISO_C_BINDING 
     476      LOGICAL(kind=C_BOOL) :: cxios_is_defined_filegroup_time_stamp_name 
     477      INTEGER (kind = C_INTPTR_T), VALUE :: filegroup_hdl 
     478    END FUNCTION cxios_is_defined_filegroup_time_stamp_name 
     479 
     480 
     481    SUBROUTINE cxios_set_filegroup_time_units(filegroup_hdl, time_units, time_units_size) BIND(C) 
     482      USE ISO_C_BINDING 
     483      INTEGER (kind = C_INTPTR_T), VALUE :: filegroup_hdl 
     484      CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: time_units 
     485      INTEGER  (kind = C_INT)     , VALUE        :: time_units_size 
     486    END SUBROUTINE cxios_set_filegroup_time_units 
     487 
     488    SUBROUTINE cxios_get_filegroup_time_units(filegroup_hdl, time_units, time_units_size) BIND(C) 
     489      USE ISO_C_BINDING 
     490      INTEGER (kind = C_INTPTR_T), VALUE :: filegroup_hdl 
     491      CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: time_units 
     492      INTEGER  (kind = C_INT)     , VALUE        :: time_units_size 
     493    END SUBROUTINE cxios_get_filegroup_time_units 
     494 
     495    FUNCTION cxios_is_defined_filegroup_time_units(filegroup_hdl) BIND(C) 
     496      USE ISO_C_BINDING 
     497      LOGICAL(kind=C_BOOL) :: cxios_is_defined_filegroup_time_units 
     498      INTEGER (kind = C_INTPTR_T), VALUE :: filegroup_hdl 
     499    END FUNCTION cxios_is_defined_filegroup_time_units 
     500 
     501 
    439502    SUBROUTINE cxios_set_filegroup_timeseries(filegroup_hdl, timeseries, timeseries_size) BIND(C) 
    440503      USE ISO_C_BINDING 
     
    499562    END FUNCTION cxios_is_defined_filegroup_type 
    500563 
     564 
     565    SUBROUTINE cxios_set_filegroup_uuid_format(filegroup_hdl, uuid_format, uuid_format_size) BIND(C) 
     566      USE ISO_C_BINDING 
     567      INTEGER (kind = C_INTPTR_T), VALUE :: filegroup_hdl 
     568      CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: uuid_format 
     569      INTEGER  (kind = C_INT)     , VALUE        :: uuid_format_size 
     570    END SUBROUTINE cxios_set_filegroup_uuid_format 
     571 
     572    SUBROUTINE cxios_get_filegroup_uuid_format(filegroup_hdl, uuid_format, uuid_format_size) BIND(C) 
     573      USE ISO_C_BINDING 
     574      INTEGER (kind = C_INTPTR_T), VALUE :: filegroup_hdl 
     575      CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: uuid_format 
     576      INTEGER  (kind = C_INT)     , VALUE        :: uuid_format_size 
     577    END SUBROUTINE cxios_get_filegroup_uuid_format 
     578 
     579    FUNCTION cxios_is_defined_filegroup_uuid_format(filegroup_hdl) BIND(C) 
     580      USE ISO_C_BINDING 
     581      LOGICAL(kind=C_BOOL) :: cxios_is_defined_filegroup_uuid_format 
     582      INTEGER (kind = C_INTPTR_T), VALUE :: filegroup_hdl 
     583    END FUNCTION cxios_is_defined_filegroup_uuid_format 
     584 
     585 
     586    SUBROUTINE cxios_set_filegroup_uuid_name(filegroup_hdl, uuid_name, uuid_name_size) BIND(C) 
     587      USE ISO_C_BINDING 
     588      INTEGER (kind = C_INTPTR_T), VALUE :: filegroup_hdl 
     589      CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: uuid_name 
     590      INTEGER  (kind = C_INT)     , VALUE        :: uuid_name_size 
     591    END SUBROUTINE cxios_set_filegroup_uuid_name 
     592 
     593    SUBROUTINE cxios_get_filegroup_uuid_name(filegroup_hdl, uuid_name, uuid_name_size) BIND(C) 
     594      USE ISO_C_BINDING 
     595      INTEGER (kind = C_INTPTR_T), VALUE :: filegroup_hdl 
     596      CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: uuid_name 
     597      INTEGER  (kind = C_INT)     , VALUE        :: uuid_name_size 
     598    END SUBROUTINE cxios_get_filegroup_uuid_name 
     599 
     600    FUNCTION cxios_is_defined_filegroup_uuid_name(filegroup_hdl) BIND(C) 
     601      USE ISO_C_BINDING 
     602      LOGICAL(kind=C_BOOL) :: cxios_is_defined_filegroup_uuid_name 
     603      INTEGER (kind = C_INTPTR_T), VALUE :: filegroup_hdl 
     604    END FUNCTION cxios_is_defined_filegroup_uuid_name 
     605 
    501606  END INTERFACE 
    502607 
  • XIOS/dev/dev_olga/src/interface/fortran_attr/iaxis_attr.F90

    r966 r1158  
    1212 
    1313  SUBROUTINE xios(set_axis_attr)  & 
    14     ( axis_id, axis_ref, begin, bounds, data_begin, data_index, data_n, index, long_name, mask, n  & 
    15     , n_distributed_partition, n_glo, name, positive, standard_name, unit, value ) 
     14    ( axis_id, axis_ref, begin, bounds, data_begin, data_index, data_n, index, label, long_name  & 
     15    , mask, n, n_distributed_partition, n_glo, name, positive, prec, standard_name, unit, value  & 
     16     ) 
    1617 
    1718    IMPLICIT NONE 
     
    2526      INTEGER  , OPTIONAL, INTENT(IN) :: data_n 
    2627      INTEGER  , OPTIONAL, INTENT(IN) :: index(:) 
     28      CHARACTER(len=*) , OPTIONAL, INTENT(IN) :: label(:) 
    2729      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: long_name 
    2830      LOGICAL  , OPTIONAL, INTENT(IN) :: mask(:) 
     
    3335      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: name 
    3436      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: positive 
     37      INTEGER  , OPTIONAL, INTENT(IN) :: prec 
    3538      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: standard_name 
    3639      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: unit 
     
    4043      (axis_id,axis_hdl) 
    4144      CALL xios(set_axis_attr_hdl_)   & 
    42       ( axis_hdl, axis_ref, begin, bounds, data_begin, data_index, data_n, index, long_name, mask  & 
    43       , n, n_distributed_partition, n_glo, name, positive, standard_name, unit, value ) 
     45      ( axis_hdl, axis_ref, begin, bounds, data_begin, data_index, data_n, index, label, long_name  & 
     46      , mask, n, n_distributed_partition, n_glo, name, positive, prec, standard_name, unit, value  & 
     47       ) 
    4448 
    4549  END SUBROUTINE xios(set_axis_attr) 
    4650 
    4751  SUBROUTINE xios(set_axis_attr_hdl)  & 
    48     ( axis_hdl, axis_ref, begin, bounds, data_begin, data_index, data_n, index, long_name, mask  & 
    49     , n, n_distributed_partition, n_glo, name, positive, standard_name, unit, value ) 
     52    ( axis_hdl, axis_ref, begin, bounds, data_begin, data_index, data_n, index, label, long_name  & 
     53    , mask, n, n_distributed_partition, n_glo, name, positive, prec, standard_name, unit, value  & 
     54     ) 
    5055 
    5156    IMPLICIT NONE 
     
    5863      INTEGER  , OPTIONAL, INTENT(IN) :: data_n 
    5964      INTEGER  , OPTIONAL, INTENT(IN) :: index(:) 
     65      CHARACTER(len=*) , OPTIONAL, INTENT(IN) :: label(:) 
    6066      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: long_name 
    6167      LOGICAL  , OPTIONAL, INTENT(IN) :: mask(:) 
     
    6672      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: name 
    6773      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: positive 
     74      INTEGER  , OPTIONAL, INTENT(IN) :: prec 
    6875      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: standard_name 
    6976      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: unit 
     
    7178 
    7279      CALL xios(set_axis_attr_hdl_)  & 
    73       ( axis_hdl, axis_ref, begin, bounds, data_begin, data_index, data_n, index, long_name, mask  & 
    74       , n, n_distributed_partition, n_glo, name, positive, standard_name, unit, value ) 
     80      ( axis_hdl, axis_ref, begin, bounds, data_begin, data_index, data_n, index, label, long_name  & 
     81      , mask, n, n_distributed_partition, n_glo, name, positive, prec, standard_name, unit, value  & 
     82       ) 
    7583 
    7684  END SUBROUTINE xios(set_axis_attr_hdl) 
    7785 
    7886  SUBROUTINE xios(set_axis_attr_hdl_)   & 
    79     ( axis_hdl, axis_ref_, begin_, bounds_, data_begin_, data_index_, data_n_, index_, long_name_  & 
    80     , mask_, n_, n_distributed_partition_, n_glo_, name_, positive_, standard_name_, unit_, value_  & 
    81     ) 
     87    ( axis_hdl, axis_ref_, begin_, bounds_, data_begin_, data_index_, data_n_, index_, label_, long_name_  & 
     88    , mask_, n_, n_distributed_partition_, n_glo_, name_, positive_, prec_, standard_name_, unit_  & 
     89    , value_ ) 
    8290 
    8391    IMPLICIT NONE 
     
    9098      INTEGER  , OPTIONAL, INTENT(IN) :: data_n_ 
    9199      INTEGER  , OPTIONAL, INTENT(IN) :: index_(:) 
     100      CHARACTER(len=*) , OPTIONAL, INTENT(IN) :: label_(:) 
    92101      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: long_name_ 
    93102      LOGICAL  , OPTIONAL, INTENT(IN) :: mask_(:) 
     
    98107      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: name_ 
    99108      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: positive_ 
     109      INTEGER  , OPTIONAL, INTENT(IN) :: prec_ 
    100110      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: standard_name_ 
    101111      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: unit_ 
     
    135145        CALL cxios_set_axis_index & 
    136146      (axis_hdl%daddr, index_, SHAPE(index_)) 
     147      ENDIF 
     148 
     149      IF (PRESENT(label_)) THEN 
     150        CALL cxios_set_axis_label & 
     151      (axis_hdl%daddr, label_, LEN(label_), LEN_TRIM(label_), SHAPE(label_)) 
    137152      ENDIF 
    138153 
     
    174189      ENDIF 
    175190 
     191      IF (PRESENT(prec_)) THEN 
     192        CALL cxios_set_axis_prec & 
     193      (axis_hdl%daddr, prec_) 
     194      ENDIF 
     195 
    176196      IF (PRESENT(standard_name_)) THEN 
    177197        CALL cxios_set_axis_standard_name & 
     
    192212 
    193213  SUBROUTINE xios(get_axis_attr)  & 
    194     ( axis_id, axis_ref, begin, bounds, data_begin, data_index, data_n, index, long_name, mask, n  & 
    195     , n_distributed_partition, n_glo, name, positive, standard_name, unit, value ) 
     214    ( axis_id, axis_ref, begin, bounds, data_begin, data_index, data_n, index, label, long_name  & 
     215    , mask, n, n_distributed_partition, n_glo, name, positive, prec, standard_name, unit, value  & 
     216     ) 
    196217 
    197218    IMPLICIT NONE 
     
    205226      INTEGER  , OPTIONAL, INTENT(OUT) :: data_n 
    206227      INTEGER  , OPTIONAL, INTENT(OUT) :: index(:) 
     228      CHARACTER(len=*) , OPTIONAL, INTENT(OUT) :: label(:) 
    207229      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: long_name 
    208230      LOGICAL  , OPTIONAL, INTENT(OUT) :: mask(:) 
     
    213235      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: name 
    214236      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: positive 
     237      INTEGER  , OPTIONAL, INTENT(OUT) :: prec 
    215238      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: standard_name 
    216239      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: unit 
     
    220243      (axis_id,axis_hdl) 
    221244      CALL xios(get_axis_attr_hdl_)   & 
    222       ( axis_hdl, axis_ref, begin, bounds, data_begin, data_index, data_n, index, long_name, mask  & 
    223       , n, n_distributed_partition, n_glo, name, positive, standard_name, unit, value ) 
     245      ( axis_hdl, axis_ref, begin, bounds, data_begin, data_index, data_n, index, label, long_name  & 
     246      , mask, n, n_distributed_partition, n_glo, name, positive, prec, standard_name, unit, value  & 
     247       ) 
    224248 
    225249  END SUBROUTINE xios(get_axis_attr) 
    226250 
    227251  SUBROUTINE xios(get_axis_attr_hdl)  & 
    228     ( axis_hdl, axis_ref, begin, bounds, data_begin, data_index, data_n, index, long_name, mask  & 
    229     , n, n_distributed_partition, n_glo, name, positive, standard_name, unit, value ) 
     252    ( axis_hdl, axis_ref, begin, bounds, data_begin, data_index, data_n, index, label, long_name  & 
     253    , mask, n, n_distributed_partition, n_glo, name, positive, prec, standard_name, unit, value  & 
     254     ) 
    230255 
    231256    IMPLICIT NONE 
     
    238263      INTEGER  , OPTIONAL, INTENT(OUT) :: data_n 
    239264      INTEGER  , OPTIONAL, INTENT(OUT) :: index(:) 
     265      CHARACTER(len=*) , OPTIONAL, INTENT(OUT) :: label(:) 
    240266      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: long_name 
    241267      LOGICAL  , OPTIONAL, INTENT(OUT) :: mask(:) 
     
    246272      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: name 
    247273      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: positive 
     274      INTEGER  , OPTIONAL, INTENT(OUT) :: prec 
    248275      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: standard_name 
    249276      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: unit 
     
    251278 
    252279      CALL xios(get_axis_attr_hdl_)  & 
    253       ( axis_hdl, axis_ref, begin, bounds, data_begin, data_index, data_n, index, long_name, mask  & 
    254       , n, n_distributed_partition, n_glo, name, positive, standard_name, unit, value ) 
     280      ( axis_hdl, axis_ref, begin, bounds, data_begin, data_index, data_n, index, label, long_name  & 
     281      , mask, n, n_distributed_partition, n_glo, name, positive, prec, standard_name, unit, value  & 
     282       ) 
    255283 
    256284  END SUBROUTINE xios(get_axis_attr_hdl) 
    257285 
    258286  SUBROUTINE xios(get_axis_attr_hdl_)   & 
    259     ( axis_hdl, axis_ref_, begin_, bounds_, data_begin_, data_index_, data_n_, index_, long_name_  & 
    260     , mask_, n_, n_distributed_partition_, n_glo_, name_, positive_, standard_name_, unit_, value_  & 
    261     ) 
     287    ( axis_hdl, axis_ref_, begin_, bounds_, data_begin_, data_index_, data_n_, index_, label_, long_name_  & 
     288    , mask_, n_, n_distributed_partition_, n_glo_, name_, positive_, prec_, standard_name_, unit_  & 
     289    , value_ ) 
    262290 
    263291    IMPLICIT NONE 
     
    270298      INTEGER  , OPTIONAL, INTENT(OUT) :: data_n_ 
    271299      INTEGER  , OPTIONAL, INTENT(OUT) :: index_(:) 
     300      CHARACTER(len=*) , OPTIONAL, INTENT(OUT) :: label_(:) 
    272301      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: long_name_ 
    273302      LOGICAL  , OPTIONAL, INTENT(OUT) :: mask_(:) 
     
    278307      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: name_ 
    279308      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: positive_ 
     309      INTEGER  , OPTIONAL, INTENT(OUT) :: prec_ 
    280310      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: standard_name_ 
    281311      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: unit_ 
     
    315345        CALL cxios_get_axis_index & 
    316346      (axis_hdl%daddr, index_, SHAPE(index_)) 
     347      ENDIF 
     348 
     349      IF (PRESENT(label_)) THEN 
     350        CALL cxios_get_axis_label & 
     351      (axis_hdl%daddr, label_, LEN(label_), SHAPE(label_)) 
    317352      ENDIF 
    318353 
     
    354389      ENDIF 
    355390 
     391      IF (PRESENT(prec_)) THEN 
     392        CALL cxios_get_axis_prec & 
     393      (axis_hdl%daddr, prec_) 
     394      ENDIF 
     395 
    356396      IF (PRESENT(standard_name_)) THEN 
    357397        CALL cxios_get_axis_standard_name & 
     
    372412 
    373413  SUBROUTINE xios(is_defined_axis_attr)  & 
    374     ( axis_id, axis_ref, begin, bounds, data_begin, data_index, data_n, index, long_name, mask, n  & 
    375     , n_distributed_partition, n_glo, name, positive, standard_name, unit, value ) 
     414    ( axis_id, axis_ref, begin, bounds, data_begin, data_index, data_n, index, label, long_name  & 
     415    , mask, n, n_distributed_partition, n_glo, name, positive, prec, standard_name, unit, value  & 
     416     ) 
    376417 
    377418    IMPLICIT NONE 
     
    392433      LOGICAL, OPTIONAL, INTENT(OUT) :: index 
    393434      LOGICAL(KIND=C_BOOL) :: index_tmp 
     435      LOGICAL, OPTIONAL, INTENT(OUT) :: label 
     436      LOGICAL(KIND=C_BOOL) :: label_tmp 
    394437      LOGICAL, OPTIONAL, INTENT(OUT) :: long_name 
    395438      LOGICAL(KIND=C_BOOL) :: long_name_tmp 
     
    406449      LOGICAL, OPTIONAL, INTENT(OUT) :: positive 
    407450      LOGICAL(KIND=C_BOOL) :: positive_tmp 
     451      LOGICAL, OPTIONAL, INTENT(OUT) :: prec 
     452      LOGICAL(KIND=C_BOOL) :: prec_tmp 
    408453      LOGICAL, OPTIONAL, INTENT(OUT) :: standard_name 
    409454      LOGICAL(KIND=C_BOOL) :: standard_name_tmp 
     
    416461      (axis_id,axis_hdl) 
    417462      CALL xios(is_defined_axis_attr_hdl_)   & 
    418       ( axis_hdl, axis_ref, begin, bounds, data_begin, data_index, data_n, index, long_name, mask  & 
    419       , n, n_distributed_partition, n_glo, name, positive, standard_name, unit, value ) 
     463      ( axis_hdl, axis_ref, begin, bounds, data_begin, data_index, data_n, index, label, long_name  & 
     464      , mask, n, n_distributed_partition, n_glo, name, positive, prec, standard_name, unit, value  & 
     465       ) 
    420466 
    421467  END SUBROUTINE xios(is_defined_axis_attr) 
    422468 
    423469  SUBROUTINE xios(is_defined_axis_attr_hdl)  & 
    424     ( axis_hdl, axis_ref, begin, bounds, data_begin, data_index, data_n, index, long_name, mask  & 
    425     , n, n_distributed_partition, n_glo, name, positive, standard_name, unit, value ) 
     470    ( axis_hdl, axis_ref, begin, bounds, data_begin, data_index, data_n, index, label, long_name  & 
     471    , mask, n, n_distributed_partition, n_glo, name, positive, prec, standard_name, unit, value  & 
     472     ) 
    426473 
    427474    IMPLICIT NONE 
     
    441488      LOGICAL, OPTIONAL, INTENT(OUT) :: index 
    442489      LOGICAL(KIND=C_BOOL) :: index_tmp 
     490      LOGICAL, OPTIONAL, INTENT(OUT) :: label 
     491      LOGICAL(KIND=C_BOOL) :: label_tmp 
    443492      LOGICAL, OPTIONAL, INTENT(OUT) :: long_name 
    444493      LOGICAL(KIND=C_BOOL) :: long_name_tmp 
     
    455504      LOGICAL, OPTIONAL, INTENT(OUT) :: positive 
    456505      LOGICAL(KIND=C_BOOL) :: positive_tmp 
     506      LOGICAL, OPTIONAL, INTENT(OUT) :: prec 
     507      LOGICAL(KIND=C_BOOL) :: prec_tmp 
    457508      LOGICAL, OPTIONAL, INTENT(OUT) :: standard_name 
    458509      LOGICAL(KIND=C_BOOL) :: standard_name_tmp 
     
    463514 
    464515      CALL xios(is_defined_axis_attr_hdl_)  & 
    465       ( axis_hdl, axis_ref, begin, bounds, data_begin, data_index, data_n, index, long_name, mask  & 
    466       , n, n_distributed_partition, n_glo, name, positive, standard_name, unit, value ) 
     516      ( axis_hdl, axis_ref, begin, bounds, data_begin, data_index, data_n, index, label, long_name  & 
     517      , mask, n, n_distributed_partition, n_glo, name, positive, prec, standard_name, unit, value  & 
     518       ) 
    467519 
    468520  END SUBROUTINE xios(is_defined_axis_attr_hdl) 
    469521 
    470522  SUBROUTINE xios(is_defined_axis_attr_hdl_)   & 
    471     ( axis_hdl, axis_ref_, begin_, bounds_, data_begin_, data_index_, data_n_, index_, long_name_  & 
    472     , mask_, n_, n_distributed_partition_, n_glo_, name_, positive_, standard_name_, unit_, value_  & 
    473     ) 
     523    ( axis_hdl, axis_ref_, begin_, bounds_, data_begin_, data_index_, data_n_, index_, label_, long_name_  & 
     524    , mask_, n_, n_distributed_partition_, n_glo_, name_, positive_, prec_, standard_name_, unit_  & 
     525    , value_ ) 
    474526 
    475527    IMPLICIT NONE 
     
    489541      LOGICAL, OPTIONAL, INTENT(OUT) :: index_ 
    490542      LOGICAL(KIND=C_BOOL) :: index__tmp 
     543      LOGICAL, OPTIONAL, INTENT(OUT) :: label_ 
     544      LOGICAL(KIND=C_BOOL) :: label__tmp 
    491545      LOGICAL, OPTIONAL, INTENT(OUT) :: long_name_ 
    492546      LOGICAL(KIND=C_BOOL) :: long_name__tmp 
     
    503557      LOGICAL, OPTIONAL, INTENT(OUT) :: positive_ 
    504558      LOGICAL(KIND=C_BOOL) :: positive__tmp 
     559      LOGICAL, OPTIONAL, INTENT(OUT) :: prec_ 
     560      LOGICAL(KIND=C_BOOL) :: prec__tmp 
    505561      LOGICAL, OPTIONAL, INTENT(OUT) :: standard_name_ 
    506562      LOGICAL(KIND=C_BOOL) :: standard_name__tmp 
     
    552608      ENDIF 
    553609 
     610      IF (PRESENT(label_)) THEN 
     611        label__tmp = cxios_is_defined_axis_label & 
     612      (axis_hdl%daddr) 
     613        label_ = label__tmp 
     614      ENDIF 
     615 
    554616      IF (PRESENT(long_name_)) THEN 
    555617        long_name__tmp = cxios_is_defined_axis_long_name & 
     
    594656      ENDIF 
    595657 
     658      IF (PRESENT(prec_)) THEN 
     659        prec__tmp = cxios_is_defined_axis_prec & 
     660      (axis_hdl%daddr) 
     661        prec_ = prec__tmp 
     662      ENDIF 
     663 
    596664      IF (PRESENT(standard_name_)) THEN 
    597665        standard_name__tmp = cxios_is_defined_axis_standard_name & 
  • XIOS/dev/dev_olga/src/interface/fortran_attr/iaxisgroup_attr.F90

    r966 r1158  
    1212 
    1313  SUBROUTINE xios(set_axisgroup_attr)  & 
    14     ( axisgroup_id, axis_ref, begin, bounds, data_begin, data_index, data_n, group_ref, index, long_name  & 
    15     , mask, n, n_distributed_partition, n_glo, name, positive, standard_name, unit, value ) 
     14    ( axisgroup_id, axis_ref, begin, bounds, data_begin, data_index, data_n, group_ref, index, label  & 
     15    , long_name, mask, n, n_distributed_partition, n_glo, name, positive, prec, standard_name, unit  & 
     16    , value ) 
    1617 
    1718    IMPLICIT NONE 
     
    2627      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: group_ref 
    2728      INTEGER  , OPTIONAL, INTENT(IN) :: index(:) 
     29      CHARACTER(len=*) , OPTIONAL, INTENT(IN) :: label(:) 
    2830      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: long_name 
    2931      LOGICAL  , OPTIONAL, INTENT(IN) :: mask(:) 
     
    3436      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: name 
    3537      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: positive 
     38      INTEGER  , OPTIONAL, INTENT(IN) :: prec 
    3639      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: standard_name 
    3740      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: unit 
     
    4144      (axisgroup_id,axisgroup_hdl) 
    4245      CALL xios(set_axisgroup_attr_hdl_)   & 
    43       ( axisgroup_hdl, axis_ref, begin, bounds, data_begin, data_index, data_n, group_ref, index, long_name  & 
    44       , mask, n, n_distributed_partition, n_glo, name, positive, standard_name, unit, value ) 
     46      ( axisgroup_hdl, axis_ref, begin, bounds, data_begin, data_index, data_n, group_ref, index, label  & 
     47      , long_name, mask, n, n_distributed_partition, n_glo, name, positive, prec, standard_name, unit  & 
     48      , value ) 
    4549 
    4650  END SUBROUTINE xios(set_axisgroup_attr) 
    4751 
    4852  SUBROUTINE xios(set_axisgroup_attr_hdl)  & 
    49     ( axisgroup_hdl, axis_ref, begin, bounds, data_begin, data_index, data_n, group_ref, index, long_name  & 
    50     , mask, n, n_distributed_partition, n_glo, name, positive, standard_name, unit, value ) 
     53    ( axisgroup_hdl, axis_ref, begin, bounds, data_begin, data_index, data_n, group_ref, index, label  & 
     54    , long_name, mask, n, n_distributed_partition, n_glo, name, positive, prec, standard_name, unit  & 
     55    , value ) 
    5156 
    5257    IMPLICIT NONE 
     
    6065      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: group_ref 
    6166      INTEGER  , OPTIONAL, INTENT(IN) :: index(:) 
     67      CHARACTER(len=*) , OPTIONAL, INTENT(IN) :: label(:) 
    6268      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: long_name 
    6369      LOGICAL  , OPTIONAL, INTENT(IN) :: mask(:) 
     
    6874      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: name 
    6975      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: positive 
     76      INTEGER  , OPTIONAL, INTENT(IN) :: prec 
    7077      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: standard_name 
    7178      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: unit 
     
    7380 
    7481      CALL xios(set_axisgroup_attr_hdl_)  & 
    75       ( axisgroup_hdl, axis_ref, begin, bounds, data_begin, data_index, data_n, group_ref, index, long_name  & 
    76       , mask, n, n_distributed_partition, n_glo, name, positive, standard_name, unit, value ) 
     82      ( axisgroup_hdl, axis_ref, begin, bounds, data_begin, data_index, data_n, group_ref, index, label  & 
     83      , long_name, mask, n, n_distributed_partition, n_glo, name, positive, prec, standard_name, unit  & 
     84      , value ) 
    7785 
    7886  END SUBROUTINE xios(set_axisgroup_attr_hdl) 
     
    8088  SUBROUTINE xios(set_axisgroup_attr_hdl_)   & 
    8189    ( axisgroup_hdl, axis_ref_, begin_, bounds_, data_begin_, data_index_, data_n_, group_ref_, index_  & 
    82     , long_name_, mask_, n_, n_distributed_partition_, n_glo_, name_, positive_, standard_name_  & 
     90    , label_, long_name_, mask_, n_, n_distributed_partition_, n_glo_, name_, positive_, prec_, standard_name_  & 
    8391    , unit_, value_ ) 
    8492 
     
    93101      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: group_ref_ 
    94102      INTEGER  , OPTIONAL, INTENT(IN) :: index_(:) 
     103      CHARACTER(len=*) , OPTIONAL, INTENT(IN) :: label_(:) 
    95104      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: long_name_ 
    96105      LOGICAL  , OPTIONAL, INTENT(IN) :: mask_(:) 
     
    101110      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: name_ 
    102111      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: positive_ 
     112      INTEGER  , OPTIONAL, INTENT(IN) :: prec_ 
    103113      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: standard_name_ 
    104114      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: unit_ 
     
    143153        CALL cxios_set_axisgroup_index & 
    144154      (axisgroup_hdl%daddr, index_, SHAPE(index_)) 
     155      ENDIF 
     156 
     157      IF (PRESENT(label_)) THEN 
     158        CALL cxios_set_axisgroup_label & 
     159      (axisgroup_hdl%daddr, label_, LEN(label_), LEN_TRIM(label_), SHAPE(label_)) 
    145160      ENDIF 
    146161 
     
    182197      ENDIF 
    183198 
     199      IF (PRESENT(prec_)) THEN 
     200        CALL cxios_set_axisgroup_prec & 
     201      (axisgroup_hdl%daddr, prec_) 
     202      ENDIF 
     203 
    184204      IF (PRESENT(standard_name_)) THEN 
    185205        CALL cxios_set_axisgroup_standard_name & 
     
    200220 
    201221  SUBROUTINE xios(get_axisgroup_attr)  & 
    202     ( axisgroup_id, axis_ref, begin, bounds, data_begin, data_index, data_n, group_ref, index, long_name  & 
    203     , mask, n, n_distributed_partition, n_glo, name, positive, standard_name, unit, value ) 
     222    ( axisgroup_id, axis_ref, begin, bounds, data_begin, data_index, data_n, group_ref, index, label  & 
     223    , long_name, mask, n, n_distributed_partition, n_glo, name, positive, prec, standard_name, unit  & 
     224    , value ) 
    204225 
    205226    IMPLICIT NONE 
     
    214235      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: group_ref 
    215236      INTEGER  , OPTIONAL, INTENT(OUT) :: index(:) 
     237      CHARACTER(len=*) , OPTIONAL, INTENT(OUT) :: label(:) 
    216238      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: long_name 
    217239      LOGICAL  , OPTIONAL, INTENT(OUT) :: mask(:) 
     
    222244      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: name 
    223245      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: positive 
     246      INTEGER  , OPTIONAL, INTENT(OUT) :: prec 
    224247      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: standard_name 
    225248      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: unit 
     
    229252      (axisgroup_id,axisgroup_hdl) 
    230253      CALL xios(get_axisgroup_attr_hdl_)   & 
    231       ( axisgroup_hdl, axis_ref, begin, bounds, data_begin, data_index, data_n, group_ref, index, long_name  & 
    232       , mask, n, n_distributed_partition, n_glo, name, positive, standard_name, unit, value ) 
     254      ( axisgroup_hdl, axis_ref, begin, bounds, data_begin, data_index, data_n, group_ref, index, label  & 
     255      , long_name, mask, n, n_distributed_partition, n_glo, name, positive, prec, standard_name, unit  & 
     256      , value ) 
    233257 
    234258  END SUBROUTINE xios(get_axisgroup_attr) 
    235259 
    236260  SUBROUTINE xios(get_axisgroup_attr_hdl)  & 
    237     ( axisgroup_hdl, axis_ref, begin, bounds, data_begin, data_index, data_n, group_ref, index, long_name  & 
    238     , mask, n, n_distributed_partition, n_glo, name, positive, standard_name, unit, value ) 
     261    ( axisgroup_hdl, axis_ref, begin, bounds, data_begin, data_index, data_n, group_ref, index, label  & 
     262    , long_name, mask, n, n_distributed_partition, n_glo, name, positive, prec, standard_name, unit  & 
     263    , value ) 
    239264 
    240265    IMPLICIT NONE 
     
    248273      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: group_ref 
    249274      INTEGER  , OPTIONAL, INTENT(OUT) :: index(:) 
     275      CHARACTER(len=*) , OPTIONAL, INTENT(OUT) :: label(:) 
    250276      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: long_name 
    251277      LOGICAL  , OPTIONAL, INTENT(OUT) :: mask(:) 
     
    256282      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: name 
    257283      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: positive 
     284      INTEGER  , OPTIONAL, INTENT(OUT) :: prec 
    258285      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: standard_name 
    259286      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: unit 
     
    261288 
    262289      CALL xios(get_axisgroup_attr_hdl_)  & 
    263       ( axisgroup_hdl, axis_ref, begin, bounds, data_begin, data_index, data_n, group_ref, index, long_name  & 
    264       , mask, n, n_distributed_partition, n_glo, name, positive, standard_name, unit, value ) 
     290      ( axisgroup_hdl, axis_ref, begin, bounds, data_begin, data_index, data_n, group_ref, index, label  & 
     291      , long_name, mask, n, n_distributed_partition, n_glo, name, positive, prec, standard_name, unit  & 
     292      , value ) 
    265293 
    266294  END SUBROUTINE xios(get_axisgroup_attr_hdl) 
     
    268296  SUBROUTINE xios(get_axisgroup_attr_hdl_)   & 
    269297    ( axisgroup_hdl, axis_ref_, begin_, bounds_, data_begin_, data_index_, data_n_, group_ref_, index_  & 
    270     , long_name_, mask_, n_, n_distributed_partition_, n_glo_, name_, positive_, standard_name_  & 
     298    , label_, long_name_, mask_, n_, n_distributed_partition_, n_glo_, name_, positive_, prec_, standard_name_  & 
    271299    , unit_, value_ ) 
    272300 
     
    281309      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: group_ref_ 
    282310      INTEGER  , OPTIONAL, INTENT(OUT) :: index_(:) 
     311      CHARACTER(len=*) , OPTIONAL, INTENT(OUT) :: label_(:) 
    283312      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: long_name_ 
    284313      LOGICAL  , OPTIONAL, INTENT(OUT) :: mask_(:) 
     
    289318      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: name_ 
    290319      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: positive_ 
     320      INTEGER  , OPTIONAL, INTENT(OUT) :: prec_ 
    291321      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: standard_name_ 
    292322      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: unit_ 
     
    331361        CALL cxios_get_axisgroup_index & 
    332362      (axisgroup_hdl%daddr, index_, SHAPE(index_)) 
     363      ENDIF 
     364 
     365      IF (PRESENT(label_)) THEN 
     366        CALL cxios_get_axisgroup_label & 
     367      (axisgroup_hdl%daddr, label_, LEN(label_), SHAPE(label_)) 
    333368      ENDIF 
    334369 
     
    370405      ENDIF 
    371406 
     407      IF (PRESENT(prec_)) THEN 
     408        CALL cxios_get_axisgroup_prec & 
     409      (axisgroup_hdl%daddr, prec_) 
     410      ENDIF 
     411 
    372412      IF (PRESENT(standard_name_)) THEN 
    373413        CALL cxios_get_axisgroup_standard_name & 
     
    388428 
    389429  SUBROUTINE xios(is_defined_axisgroup_attr)  & 
    390     ( axisgroup_id, axis_ref, begin, bounds, data_begin, data_index, data_n, group_ref, index, long_name  & 
    391     , mask, n, n_distributed_partition, n_glo, name, positive, standard_name, unit, value ) 
     430    ( axisgroup_id, axis_ref, begin, bounds, data_begin, data_index, data_n, group_ref, index, label  & 
     431    , long_name, mask, n, n_distributed_partition, n_glo, name, positive, prec, standard_name, unit  & 
     432    , value ) 
    392433 
    393434    IMPLICIT NONE 
     
    410451      LOGICAL, OPTIONAL, INTENT(OUT) :: index 
    411452      LOGICAL(KIND=C_BOOL) :: index_tmp 
     453      LOGICAL, OPTIONAL, INTENT(OUT) :: label 
     454      LOGICAL(KIND=C_BOOL) :: label_tmp 
    412455      LOGICAL, OPTIONAL, INTENT(OUT) :: long_name 
    413456      LOGICAL(KIND=C_BOOL) :: long_name_tmp 
     
    424467      LOGICAL, OPTIONAL, INTENT(OUT) :: positive 
    425468      LOGICAL(KIND=C_BOOL) :: positive_tmp 
     469      LOGICAL, OPTIONAL, INTENT(OUT) :: prec 
     470      LOGICAL(KIND=C_BOOL) :: prec_tmp 
    426471      LOGICAL, OPTIONAL, INTENT(OUT) :: standard_name 
    427472      LOGICAL(KIND=C_BOOL) :: standard_name_tmp 
     
    434479      (axisgroup_id,axisgroup_hdl) 
    435480      CALL xios(is_defined_axisgroup_attr_hdl_)   & 
    436       ( axisgroup_hdl, axis_ref, begin, bounds, data_begin, data_index, data_n, group_ref, index, long_name  & 
    437       , mask, n, n_distributed_partition, n_glo, name, positive, standard_name, unit, value ) 
     481      ( axisgroup_hdl, axis_ref, begin, bounds, data_begin, data_index, data_n, group_ref, index, label  & 
     482      , long_name, mask, n, n_distributed_partition, n_glo, name, positive, prec, standard_name, unit  & 
     483      , value ) 
    438484 
    439485  END SUBROUTINE xios(is_defined_axisgroup_attr) 
    440486 
    441487  SUBROUTINE xios(is_defined_axisgroup_attr_hdl)  & 
    442     ( axisgroup_hdl, axis_ref, begin, bounds, data_begin, data_index, data_n, group_ref, index, long_name  & 
    443     , mask, n, n_distributed_partition, n_glo, name, positive, standard_name, unit, value ) 
     488    ( axisgroup_hdl, axis_ref, begin, bounds, data_begin, data_index, data_n, group_ref, index, label  & 
     489    , long_name, mask, n, n_distributed_partition, n_glo, name, positive, prec, standard_name, unit  & 
     490    , value ) 
    444491 
    445492    IMPLICIT NONE 
     
    461508      LOGICAL, OPTIONAL, INTENT(OUT) :: index 
    462509      LOGICAL(KIND=C_BOOL) :: index_tmp 
     510      LOGICAL, OPTIONAL, INTENT(OUT) :: label 
     511      LOGICAL(KIND=C_BOOL) :: label_tmp 
    463512      LOGICAL, OPTIONAL, INTENT(OUT) :: long_name 
    464513      LOGICAL(KIND=C_BOOL) :: long_name_tmp 
     
    475524      LOGICAL, OPTIONAL, INTENT(OUT) :: positive 
    476525      LOGICAL(KIND=C_BOOL) :: positive_tmp 
     526      LOGICAL, OPTIONAL, INTENT(OUT) :: prec 
     527      LOGICAL(KIND=C_BOOL) :: prec_tmp 
    477528      LOGICAL, OPTIONAL, INTENT(OUT) :: standard_name 
    478529      LOGICAL(KIND=C_BOOL) :: standard_name_tmp 
     
    483534 
    484535      CALL xios(is_defined_axisgroup_attr_hdl_)  & 
    485       ( axisgroup_hdl, axis_ref, begin, bounds, data_begin, data_index, data_n, group_ref, index, long_name  & 
    486       , mask, n, n_distributed_partition, n_glo, name, positive, standard_name, unit, value ) 
     536      ( axisgroup_hdl, axis_ref, begin, bounds, data_begin, data_index, data_n, group_ref, index, label  & 
     537      , long_name, mask, n, n_distributed_partition, n_glo, name, positive, prec, standard_name, unit  & 
     538      , value ) 
    487539 
    488540  END SUBROUTINE xios(is_defined_axisgroup_attr_hdl) 
     
    490542  SUBROUTINE xios(is_defined_axisgroup_attr_hdl_)   & 
    491543    ( axisgroup_hdl, axis_ref_, begin_, bounds_, data_begin_, data_index_, data_n_, group_ref_, index_  & 
    492     , long_name_, mask_, n_, n_distributed_partition_, n_glo_, name_, positive_, standard_name_  & 
     544    , label_, long_name_, mask_, n_, n_distributed_partition_, n_glo_, name_, positive_, prec_, standard_name_  & 
    493545    , unit_, value_ ) 
    494546 
     
    511563      LOGICAL, OPTIONAL, INTENT(OUT) :: index_ 
    512564      LOGICAL(KIND=C_BOOL) :: index__tmp 
     565      LOGICAL, OPTIONAL, INTENT(OUT) :: label_ 
     566      LOGICAL(KIND=C_BOOL) :: label__tmp 
    513567      LOGICAL, OPTIONAL, INTENT(OUT) :: long_name_ 
    514568      LOGICAL(KIND=C_BOOL) :: long_name__tmp 
     
    525579      LOGICAL, OPTIONAL, INTENT(OUT) :: positive_ 
    526580      LOGICAL(KIND=C_BOOL) :: positive__tmp 
     581      LOGICAL, OPTIONAL, INTENT(OUT) :: prec_ 
     582      LOGICAL(KIND=C_BOOL) :: prec__tmp 
    527583      LOGICAL, OPTIONAL, INTENT(OUT) :: standard_name_ 
    528584      LOGICAL(KIND=C_BOOL) :: standard_name__tmp 
     
    580636      ENDIF 
    581637 
     638      IF (PRESENT(label_)) THEN 
     639        label__tmp = cxios_is_defined_axisgroup_label & 
     640      (axisgroup_hdl%daddr) 
     641        label_ = label__tmp 
     642      ENDIF 
     643 
    582644      IF (PRESENT(long_name_)) THEN 
    583645        long_name__tmp = cxios_is_defined_axisgroup_long_name & 
     
    622684      ENDIF 
    623685 
     686      IF (PRESENT(prec_)) THEN 
     687        prec__tmp = cxios_is_defined_axisgroup_prec & 
     688      (axisgroup_hdl%daddr) 
     689        prec_ = prec__tmp 
     690      ENDIF 
     691 
    624692      IF (PRESENT(standard_name_)) THEN 
    625693        standard_name__tmp = cxios_is_defined_axisgroup_standard_name & 
  • XIOS/dev/dev_olga/src/interface/fortran_attr/idomain_attr.F90

    r966 r1158  
    1515    , data_ibegin, data_j_index, data_jbegin, data_ni, data_nj, domain_ref, i_index, ibegin, j_index  & 
    1616    , jbegin, latvalue_1d, latvalue_2d, long_name, lonvalue_1d, lonvalue_2d, mask_1d, mask_2d, name  & 
    17     , ni, ni_glo, nj, nj_glo, nvertex, standard_name, type ) 
     17    , ni, ni_glo, nj, nj_glo, nvertex, prec, standard_name, type ) 
    1818 
    1919    IMPLICIT NONE 
     
    5252      INTEGER  , OPTIONAL, INTENT(IN) :: nj_glo 
    5353      INTEGER  , OPTIONAL, INTENT(IN) :: nvertex 
     54      INTEGER  , OPTIONAL, INTENT(IN) :: prec 
    5455      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: standard_name 
    5556      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: type 
     
    6162      , data_ibegin, data_j_index, data_jbegin, data_ni, data_nj, domain_ref, i_index, ibegin, j_index  & 
    6263      , jbegin, latvalue_1d, latvalue_2d, long_name, lonvalue_1d, lonvalue_2d, mask_1d, mask_2d, name  & 
    63       , ni, ni_glo, nj, nj_glo, nvertex, standard_name, type ) 
     64      , ni, ni_glo, nj, nj_glo, nvertex, prec, standard_name, type ) 
    6465 
    6566  END SUBROUTINE xios(set_domain_attr) 
     
    6970    , data_ibegin, data_j_index, data_jbegin, data_ni, data_nj, domain_ref, i_index, ibegin, j_index  & 
    7071    , jbegin, latvalue_1d, latvalue_2d, long_name, lonvalue_1d, lonvalue_2d, mask_1d, mask_2d, name  & 
    71     , ni, ni_glo, nj, nj_glo, nvertex, standard_name, type ) 
     72    , ni, ni_glo, nj, nj_glo, nvertex, prec, standard_name, type ) 
    7273 
    7374    IMPLICIT NONE 
     
    105106      INTEGER  , OPTIONAL, INTENT(IN) :: nj_glo 
    106107      INTEGER  , OPTIONAL, INTENT(IN) :: nvertex 
     108      INTEGER  , OPTIONAL, INTENT(IN) :: prec 
    107109      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: standard_name 
    108110      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: type 
     
    112114      , data_ibegin, data_j_index, data_jbegin, data_ni, data_nj, domain_ref, i_index, ibegin, j_index  & 
    113115      , jbegin, latvalue_1d, latvalue_2d, long_name, lonvalue_1d, lonvalue_2d, mask_1d, mask_2d, name  & 
    114       , ni, ni_glo, nj, nj_glo, nvertex, standard_name, type ) 
     116      , ni, ni_glo, nj, nj_glo, nvertex, prec, standard_name, type ) 
    115117 
    116118  END SUBROUTINE xios(set_domain_attr_hdl) 
     
    120122    , data_i_index_, data_ibegin_, data_j_index_, data_jbegin_, data_ni_, data_nj_, domain_ref_  & 
    121123    , i_index_, ibegin_, j_index_, jbegin_, latvalue_1d_, latvalue_2d_, long_name_, lonvalue_1d_  & 
    122     , lonvalue_2d_, mask_1d_, mask_2d_, name_, ni_, ni_glo_, nj_, nj_glo_, nvertex_, standard_name_  & 
     124    , lonvalue_2d_, mask_1d_, mask_2d_, name_, ni_, ni_glo_, nj_, nj_glo_, nvertex_, prec_, standard_name_  & 
    123125    , type_ ) 
    124126 
     
    157159      INTEGER  , OPTIONAL, INTENT(IN) :: nj_glo_ 
    158160      INTEGER  , OPTIONAL, INTENT(IN) :: nvertex_ 
     161      INTEGER  , OPTIONAL, INTENT(IN) :: prec_ 
    159162      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: standard_name_ 
    160163      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: type_ 
     
    314317      ENDIF 
    315318 
     319      IF (PRESENT(prec_)) THEN 
     320        CALL cxios_set_domain_prec & 
     321      (domain_hdl%daddr, prec_) 
     322      ENDIF 
     323 
    316324      IF (PRESENT(standard_name_)) THEN 
    317325        CALL cxios_set_domain_standard_name & 
     
    330338    , data_ibegin, data_j_index, data_jbegin, data_ni, data_nj, domain_ref, i_index, ibegin, j_index  & 
    331339    , jbegin, latvalue_1d, latvalue_2d, long_name, lonvalue_1d, lonvalue_2d, mask_1d, mask_2d, name  & 
    332     , ni, ni_glo, nj, nj_glo, nvertex, standard_name, type ) 
     340    , ni, ni_glo, nj, nj_glo, nvertex, prec, standard_name, type ) 
    333341 
    334342    IMPLICIT NONE 
     
    367375      INTEGER  , OPTIONAL, INTENT(OUT) :: nj_glo 
    368376      INTEGER  , OPTIONAL, INTENT(OUT) :: nvertex 
     377      INTEGER  , OPTIONAL, INTENT(OUT) :: prec 
    369378      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: standard_name 
    370379      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: type 
     
    376385      , data_ibegin, data_j_index, data_jbegin, data_ni, data_nj, domain_ref, i_index, ibegin, j_index  & 
    377386      , jbegin, latvalue_1d, latvalue_2d, long_name, lonvalue_1d, lonvalue_2d, mask_1d, mask_2d, name  & 
    378       , ni, ni_glo, nj, nj_glo, nvertex, standard_name, type ) 
     387      , ni, ni_glo, nj, nj_glo, nvertex, prec, standard_name, type ) 
    379388 
    380389  END SUBROUTINE xios(get_domain_attr) 
     
    384393    , data_ibegin, data_j_index, data_jbegin, data_ni, data_nj, domain_ref, i_index, ibegin, j_index  & 
    385394    , jbegin, latvalue_1d, latvalue_2d, long_name, lonvalue_1d, lonvalue_2d, mask_1d, mask_2d, name  & 
    386     , ni, ni_glo, nj, nj_glo, nvertex, standard_name, type ) 
     395    , ni, ni_glo, nj, nj_glo, nvertex, prec, standard_name, type ) 
    387396 
    388397    IMPLICIT NONE 
     
    420429      INTEGER  , OPTIONAL, INTENT(OUT) :: nj_glo 
    421430      INTEGER  , OPTIONAL, INTENT(OUT) :: nvertex 
     431      INTEGER  , OPTIONAL, INTENT(OUT) :: prec 
    422432      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: standard_name 
    423433      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: type 
     
    427437      , data_ibegin, data_j_index, data_jbegin, data_ni, data_nj, domain_ref, i_index, ibegin, j_index  & 
    428438      , jbegin, latvalue_1d, latvalue_2d, long_name, lonvalue_1d, lonvalue_2d, mask_1d, mask_2d, name  & 
    429       , ni, ni_glo, nj, nj_glo, nvertex, standard_name, type ) 
     439      , ni, ni_glo, nj, nj_glo, nvertex, prec, standard_name, type ) 
    430440 
    431441  END SUBROUTINE xios(get_domain_attr_hdl) 
     
    435445    , data_i_index_, data_ibegin_, data_j_index_, data_jbegin_, data_ni_, data_nj_, domain_ref_  & 
    436446    , i_index_, ibegin_, j_index_, jbegin_, latvalue_1d_, latvalue_2d_, long_name_, lonvalue_1d_  & 
    437     , lonvalue_2d_, mask_1d_, mask_2d_, name_, ni_, ni_glo_, nj_, nj_glo_, nvertex_, standard_name_  & 
     447    , lonvalue_2d_, mask_1d_, mask_2d_, name_, ni_, ni_glo_, nj_, nj_glo_, nvertex_, prec_, standard_name_  & 
    438448    , type_ ) 
    439449 
     
    472482      INTEGER  , OPTIONAL, INTENT(OUT) :: nj_glo_ 
    473483      INTEGER  , OPTIONAL, INTENT(OUT) :: nvertex_ 
     484      INTEGER  , OPTIONAL, INTENT(OUT) :: prec_ 
    474485      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: standard_name_ 
    475486      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: type_ 
     
    629640      ENDIF 
    630641 
     642      IF (PRESENT(prec_)) THEN 
     643        CALL cxios_get_domain_prec & 
     644      (domain_hdl%daddr, prec_) 
     645      ENDIF 
     646 
    631647      IF (PRESENT(standard_name_)) THEN 
    632648        CALL cxios_get_domain_standard_name & 
     
    645661    , data_ibegin, data_j_index, data_jbegin, data_ni, data_nj, domain_ref, i_index, ibegin, j_index  & 
    646662    , jbegin, latvalue_1d, latvalue_2d, long_name, lonvalue_1d, lonvalue_2d, mask_1d, mask_2d, name  & 
    647     , ni, ni_glo, nj, nj_glo, nvertex, standard_name, type ) 
     663    , ni, ni_glo, nj, nj_glo, nvertex, prec, standard_name, type ) 
    648664 
    649665    IMPLICIT NONE 
     
    710726      LOGICAL, OPTIONAL, INTENT(OUT) :: nvertex 
    711727      LOGICAL(KIND=C_BOOL) :: nvertex_tmp 
     728      LOGICAL, OPTIONAL, INTENT(OUT) :: prec 
     729      LOGICAL(KIND=C_BOOL) :: prec_tmp 
    712730      LOGICAL, OPTIONAL, INTENT(OUT) :: standard_name 
    713731      LOGICAL(KIND=C_BOOL) :: standard_name_tmp 
     
    721739      , data_ibegin, data_j_index, data_jbegin, data_ni, data_nj, domain_ref, i_index, ibegin, j_index  & 
    722740      , jbegin, latvalue_1d, latvalue_2d, long_name, lonvalue_1d, lonvalue_2d, mask_1d, mask_2d, name  & 
    723       , ni, ni_glo, nj, nj_glo, nvertex, standard_name, type ) 
     741      , ni, ni_glo, nj, nj_glo, nvertex, prec, standard_name, type ) 
    724742 
    725743  END SUBROUTINE xios(is_defined_domain_attr) 
     
    729747    , data_ibegin, data_j_index, data_jbegin, data_ni, data_nj, domain_ref, i_index, ibegin, j_index  & 
    730748    , jbegin, latvalue_1d, latvalue_2d, long_name, lonvalue_1d, lonvalue_2d, mask_1d, mask_2d, name  & 
    731     , ni, ni_glo, nj, nj_glo, nvertex, standard_name, type ) 
     749    , ni, ni_glo, nj, nj_glo, nvertex, prec, standard_name, type ) 
    732750 
    733751    IMPLICIT NONE 
     
    793811      LOGICAL, OPTIONAL, INTENT(OUT) :: nvertex 
    794812      LOGICAL(KIND=C_BOOL) :: nvertex_tmp 
     813      LOGICAL, OPTIONAL, INTENT(OUT) :: prec 
     814      LOGICAL(KIND=C_BOOL) :: prec_tmp 
    795815      LOGICAL, OPTIONAL, INTENT(OUT) :: standard_name 
    796816      LOGICAL(KIND=C_BOOL) :: standard_name_tmp 
     
    802822      , data_ibegin, data_j_index, data_jbegin, data_ni, data_nj, domain_ref, i_index, ibegin, j_index  & 
    803823      , jbegin, latvalue_1d, latvalue_2d, long_name, lonvalue_1d, lonvalue_2d, mask_1d, mask_2d, name  & 
    804       , ni, ni_glo, nj, nj_glo, nvertex, standard_name, type ) 
     824      , ni, ni_glo, nj, nj_glo, nvertex, prec, standard_name, type ) 
    805825 
    806826  END SUBROUTINE xios(is_defined_domain_attr_hdl) 
     
    810830    , data_i_index_, data_ibegin_, data_j_index_, data_jbegin_, data_ni_, data_nj_, domain_ref_  & 
    811831    , i_index_, ibegin_, j_index_, jbegin_, latvalue_1d_, latvalue_2d_, long_name_, lonvalue_1d_  & 
    812     , lonvalue_2d_, mask_1d_, mask_2d_, name_, ni_, ni_glo_, nj_, nj_glo_, nvertex_, standard_name_  & 
     832    , lonvalue_2d_, mask_1d_, mask_2d_, name_, ni_, ni_glo_, nj_, nj_glo_, nvertex_, prec_, standard_name_  & 
    813833    , type_ ) 
    814834 
     
    875895      LOGICAL, OPTIONAL, INTENT(OUT) :: nvertex_ 
    876896      LOGICAL(KIND=C_BOOL) :: nvertex__tmp 
     897      LOGICAL, OPTIONAL, INTENT(OUT) :: prec_ 
     898      LOGICAL(KIND=C_BOOL) :: prec__tmp 
    877899      LOGICAL, OPTIONAL, INTENT(OUT) :: standard_name_ 
    878900      LOGICAL(KIND=C_BOOL) :: standard_name__tmp 
     
    10601082      ENDIF 
    10611083 
     1084      IF (PRESENT(prec_)) THEN 
     1085        prec__tmp = cxios_is_defined_domain_prec & 
     1086      (domain_hdl%daddr) 
     1087        prec_ = prec__tmp 
     1088      ENDIF 
     1089 
    10621090      IF (PRESENT(standard_name_)) THEN 
    10631091        standard_name__tmp = cxios_is_defined_domain_standard_name & 
  • XIOS/dev/dev_olga/src/interface/fortran_attr/idomaingroup_attr.F90

    r966 r1158  
    1515    , data_i_index, data_ibegin, data_j_index, data_jbegin, data_ni, data_nj, domain_ref, group_ref  & 
    1616    , i_index, ibegin, j_index, jbegin, latvalue_1d, latvalue_2d, long_name, lonvalue_1d, lonvalue_2d  & 
    17     , mask_1d, mask_2d, name, ni, ni_glo, nj, nj_glo, nvertex, standard_name, type ) 
     17    , mask_1d, mask_2d, name, ni, ni_glo, nj, nj_glo, nvertex, prec, standard_name, type ) 
    1818 
    1919    IMPLICIT NONE 
     
    5353      INTEGER  , OPTIONAL, INTENT(IN) :: nj_glo 
    5454      INTEGER  , OPTIONAL, INTENT(IN) :: nvertex 
     55      INTEGER  , OPTIONAL, INTENT(IN) :: prec 
    5556      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: standard_name 
    5657      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: type 
     
    6263      , data_i_index, data_ibegin, data_j_index, data_jbegin, data_ni, data_nj, domain_ref, group_ref  & 
    6364      , i_index, ibegin, j_index, jbegin, latvalue_1d, latvalue_2d, long_name, lonvalue_1d, lonvalue_2d  & 
    64       , mask_1d, mask_2d, name, ni, ni_glo, nj, nj_glo, nvertex, standard_name, type ) 
     65      , mask_1d, mask_2d, name, ni, ni_glo, nj, nj_glo, nvertex, prec, standard_name, type ) 
    6566 
    6667  END SUBROUTINE xios(set_domaingroup_attr) 
     
    7071    , data_i_index, data_ibegin, data_j_index, data_jbegin, data_ni, data_nj, domain_ref, group_ref  & 
    7172    , i_index, ibegin, j_index, jbegin, latvalue_1d, latvalue_2d, long_name, lonvalue_1d, lonvalue_2d  & 
    72     , mask_1d, mask_2d, name, ni, ni_glo, nj, nj_glo, nvertex, standard_name, type ) 
     73    , mask_1d, mask_2d, name, ni, ni_glo, nj, nj_glo, nvertex, prec, standard_name, type ) 
    7374 
    7475    IMPLICIT NONE 
     
    107108      INTEGER  , OPTIONAL, INTENT(IN) :: nj_glo 
    108109      INTEGER  , OPTIONAL, INTENT(IN) :: nvertex 
     110      INTEGER  , OPTIONAL, INTENT(IN) :: prec 
    109111      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: standard_name 
    110112      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: type 
     
    114116      , data_i_index, data_ibegin, data_j_index, data_jbegin, data_ni, data_nj, domain_ref, group_ref  & 
    115117      , i_index, ibegin, j_index, jbegin, latvalue_1d, latvalue_2d, long_name, lonvalue_1d, lonvalue_2d  & 
    116       , mask_1d, mask_2d, name, ni, ni_glo, nj, nj_glo, nvertex, standard_name, type ) 
     118      , mask_1d, mask_2d, name, ni, ni_glo, nj, nj_glo, nvertex, prec, standard_name, type ) 
    117119 
    118120  END SUBROUTINE xios(set_domaingroup_attr_hdl) 
     
    122124    , data_i_index_, data_ibegin_, data_j_index_, data_jbegin_, data_ni_, data_nj_, domain_ref_  & 
    123125    , group_ref_, i_index_, ibegin_, j_index_, jbegin_, latvalue_1d_, latvalue_2d_, long_name_, lonvalue_1d_  & 
    124     , lonvalue_2d_, mask_1d_, mask_2d_, name_, ni_, ni_glo_, nj_, nj_glo_, nvertex_, standard_name_  & 
     126    , lonvalue_2d_, mask_1d_, mask_2d_, name_, ni_, ni_glo_, nj_, nj_glo_, nvertex_, prec_, standard_name_  & 
    125127    , type_ ) 
    126128 
     
    160162      INTEGER  , OPTIONAL, INTENT(IN) :: nj_glo_ 
    161163      INTEGER  , OPTIONAL, INTENT(IN) :: nvertex_ 
     164      INTEGER  , OPTIONAL, INTENT(IN) :: prec_ 
    162165      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: standard_name_ 
    163166      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: type_ 
     
    322325      ENDIF 
    323326 
     327      IF (PRESENT(prec_)) THEN 
     328        CALL cxios_set_domaingroup_prec & 
     329      (domaingroup_hdl%daddr, prec_) 
     330      ENDIF 
     331 
    324332      IF (PRESENT(standard_name_)) THEN 
    325333        CALL cxios_set_domaingroup_standard_name & 
     
    338346    , data_i_index, data_ibegin, data_j_index, data_jbegin, data_ni, data_nj, domain_ref, group_ref  & 
    339347    , i_index, ibegin, j_index, jbegin, latvalue_1d, latvalue_2d, long_name, lonvalue_1d, lonvalue_2d  & 
    340     , mask_1d, mask_2d, name, ni, ni_glo, nj, nj_glo, nvertex, standard_name, type ) 
     348    , mask_1d, mask_2d, name, ni, ni_glo, nj, nj_glo, nvertex, prec, standard_name, type ) 
    341349 
    342350    IMPLICIT NONE 
     
    376384      INTEGER  , OPTIONAL, INTENT(OUT) :: nj_glo 
    377385      INTEGER  , OPTIONAL, INTENT(OUT) :: nvertex 
     386      INTEGER  , OPTIONAL, INTENT(OUT) :: prec 
    378387      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: standard_name 
    379388      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: type 
     
    385394      , data_i_index, data_ibegin, data_j_index, data_jbegin, data_ni, data_nj, domain_ref, group_ref  & 
    386395      , i_index, ibegin, j_index, jbegin, latvalue_1d, latvalue_2d, long_name, lonvalue_1d, lonvalue_2d  & 
    387       , mask_1d, mask_2d, name, ni, ni_glo, nj, nj_glo, nvertex, standard_name, type ) 
     396      , mask_1d, mask_2d, name, ni, ni_glo, nj, nj_glo, nvertex, prec, standard_name, type ) 
    388397 
    389398  END SUBROUTINE xios(get_domaingroup_attr) 
     
    393402    , data_i_index, data_ibegin, data_j_index, data_jbegin, data_ni, data_nj, domain_ref, group_ref  & 
    394403    , i_index, ibegin, j_index, jbegin, latvalue_1d, latvalue_2d, long_name, lonvalue_1d, lonvalue_2d  & 
    395     , mask_1d, mask_2d, name, ni, ni_glo, nj, nj_glo, nvertex, standard_name, type ) 
     404    , mask_1d, mask_2d, name, ni, ni_glo, nj, nj_glo, nvertex, prec, standard_name, type ) 
    396405 
    397406    IMPLICIT NONE 
     
    430439      INTEGER  , OPTIONAL, INTENT(OUT) :: nj_glo 
    431440      INTEGER  , OPTIONAL, INTENT(OUT) :: nvertex 
     441      INTEGER  , OPTIONAL, INTENT(OUT) :: prec 
    432442      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: standard_name 
    433443      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: type 
     
    437447      , data_i_index, data_ibegin, data_j_index, data_jbegin, data_ni, data_nj, domain_ref, group_ref  & 
    438448      , i_index, ibegin, j_index, jbegin, latvalue_1d, latvalue_2d, long_name, lonvalue_1d, lonvalue_2d  & 
    439       , mask_1d, mask_2d, name, ni, ni_glo, nj, nj_glo, nvertex, standard_name, type ) 
     449      , mask_1d, mask_2d, name, ni, ni_glo, nj, nj_glo, nvertex, prec, standard_name, type ) 
    440450 
    441451  END SUBROUTINE xios(get_domaingroup_attr_hdl) 
     
    445455    , data_i_index_, data_ibegin_, data_j_index_, data_jbegin_, data_ni_, data_nj_, domain_ref_  & 
    446456    , group_ref_, i_index_, ibegin_, j_index_, jbegin_, latvalue_1d_, latvalue_2d_, long_name_, lonvalue_1d_  & 
    447     , lonvalue_2d_, mask_1d_, mask_2d_, name_, ni_, ni_glo_, nj_, nj_glo_, nvertex_, standard_name_  & 
     457    , lonvalue_2d_, mask_1d_, mask_2d_, name_, ni_, ni_glo_, nj_, nj_glo_, nvertex_, prec_, standard_name_  & 
    448458    , type_ ) 
    449459 
     
    483493      INTEGER  , OPTIONAL, INTENT(OUT) :: nj_glo_ 
    484494      INTEGER  , OPTIONAL, INTENT(OUT) :: nvertex_ 
     495      INTEGER  , OPTIONAL, INTENT(OUT) :: prec_ 
    485496      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: standard_name_ 
    486497      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: type_ 
     
    645656      ENDIF 
    646657 
     658      IF (PRESENT(prec_)) THEN 
     659        CALL cxios_get_domaingroup_prec & 
     660      (domaingroup_hdl%daddr, prec_) 
     661      ENDIF 
     662 
    647663      IF (PRESENT(standard_name_)) THEN 
    648664        CALL cxios_get_domaingroup_standard_name & 
     
    661677    , data_i_index, data_ibegin, data_j_index, data_jbegin, data_ni, data_nj, domain_ref, group_ref  & 
    662678    , i_index, ibegin, j_index, jbegin, latvalue_1d, latvalue_2d, long_name, lonvalue_1d, lonvalue_2d  & 
    663     , mask_1d, mask_2d, name, ni, ni_glo, nj, nj_glo, nvertex, standard_name, type ) 
     679    , mask_1d, mask_2d, name, ni, ni_glo, nj, nj_glo, nvertex, prec, standard_name, type ) 
    664680 
    665681    IMPLICIT NONE 
     
    728744      LOGICAL, OPTIONAL, INTENT(OUT) :: nvertex 
    729745      LOGICAL(KIND=C_BOOL) :: nvertex_tmp 
     746      LOGICAL, OPTIONAL, INTENT(OUT) :: prec 
     747      LOGICAL(KIND=C_BOOL) :: prec_tmp 
    730748      LOGICAL, OPTIONAL, INTENT(OUT) :: standard_name 
    731749      LOGICAL(KIND=C_BOOL) :: standard_name_tmp 
     
    739757      , data_i_index, data_ibegin, data_j_index, data_jbegin, data_ni, data_nj, domain_ref, group_ref  & 
    740758      , i_index, ibegin, j_index, jbegin, latvalue_1d, latvalue_2d, long_name, lonvalue_1d, lonvalue_2d  & 
    741       , mask_1d, mask_2d, name, ni, ni_glo, nj, nj_glo, nvertex, standard_name, type ) 
     759      , mask_1d, mask_2d, name, ni, ni_glo, nj, nj_glo, nvertex, prec, standard_name, type ) 
    742760 
    743761  END SUBROUTINE xios(is_defined_domaingroup_attr)