Changeset 509


Ignore:
Timestamp:
11/13/14 15:09:14 (7 years ago)
Author:
mhnguyen
Message:

Implementing buffer size auto-detection for mode client -server

+) Process xml tree in client side then send all the information to server
+) Only information enabled fields in enabled files are sent to server
+) Some important change in structure of code which must be refactored

Test
+) On Curie
+) Only mode client-server
+) Passed for all tests

Location:
XIOS/trunk
Files:
43 edited

Legend:

Unmodified
Added
Removed
  • XIOS/trunk/inputs/COMPLETE/context_surface.xml

    r489 r509  
    77    <field id="field_A_srf_K" name="field_A_srf_K" field_ref="field_A_srf" long_name="Champ en degK" unit="degK"> field_A_srf + 273.15 </field> 
    88    <field id="field_A_srf_max" name="field_A_srf_max" field_ref="field_A_srf" long_name="maximum field_A_srf" operation="maximum" /> 
    9     <field id="field_D_srf" name="field_D_srf" long_name="Somme champ A et C" > field_A_srf + field_C_srf </field> 
     9    <field id="field_D_srf" name="field_D_srf" long_name="Somme champ A et C" > field_A_srf + field_A_srf_K </field> 
    1010     
    1111  </field_definition> 
     
    3131        <variable id="my_attribute1" type="string" >surf_att</variable> 
    3232        <variable id="my_attribute2" type="integer" >10</variable> 
    33         <variable id="my_attribute3" type="float" >6.8</variable> 
     33        <variable id="my_attribute3" type="float" >7.8</variable> 
    3434        <variable id="my_attribute4" type="double" >100.201</variable> 
    3535      </field> 
     36      <field field_ref="field_D_srf" /> 
    3637      <field field_ref="field_A_srf_K" /> 
    3738      <field field_ref="field_A_srf" name="field_A_srf_min" operation="minimum" /> 
  • XIOS/trunk/src/attribute_map.cpp

    r501 r509  
    1313      CAttributeMap::~CAttributeMap(void) 
    1414      { /* Ne rien faire de plus */ } 
    15        
     15 
    1616      ///-------------------------------------------------------------- 
    1717 
     
    3030 
    3131      bool CAttributeMap::hasAttribute(const StdString & key) const 
    32       {  
    33          return (this->find(key) != this->end());  
    34       } 
    35        
    36       //--------------------------------------------------------------- 
    37        
     32      { 
     33         return (this->find(key) != this->end()); 
     34      } 
     35 
     36      void CAttributeMap::clearAttribute(const StdString& key) 
     37      { 
     38        if (hasAttribute(key)) this->find(key)->second->reset(); 
     39      } 
     40 
     41      //--------------------------------------------------------------- 
     42 
    3843      void CAttributeMap::setAttribute(const StdString & key, CAttribute * const attr) 
    3944      { 
     
    4752//         this->find(key)->second->setAnyValue(attr->getAnyValue()); 
    4853      } 
    49        
    50       //--------------------------------------------------------------- 
    51        
     54 
     55      //--------------------------------------------------------------- 
     56 
    5257      CAttribute * CAttributeMap::operator[](const StdString & key) 
    5358      { 
     
    5762         return (SuperClassMap::operator[](key)); 
    5863      } 
    59        
    60       //--------------------------------------------------------------- 
    61        
     64 
     65      //--------------------------------------------------------------- 
     66 
    6267      StdString CAttributeMap::toString(void) const 
    6368      { 
    6469         typedef std::pair<StdString, CAttribute*> StdStrAttPair; 
    6570         StdOStringStream oss; 
    66           
     71 
    6772         SuperClassMap::const_iterator it = SuperClassMap::begin(), end = SuperClassMap::end(); 
    6873         for (; it != end; it++) 
     
    7479         return (oss.str()); 
    7580      } 
    76        
    77       //--------------------------------------------------------------- 
    78        
     81 
     82      //--------------------------------------------------------------- 
     83 
    7984      void CAttributeMap::fromString(const StdString & str) 
    80       {  
     85      { 
    8186         ERROR("CAttributeMap::fromString(const StdString & str)", 
    82                << "[ str = " << str << "] Not implemented yet !");  
    83       } 
    84        
     87               << "[ str = " << str << "] Not implemented yet !"); 
     88      } 
     89 
    8590      //--------------------------------------------------------------- 
    8691 
    8792      //StdOStream & operator << (StdOStream & os, const CAttributeMap & attributmap) 
    8893      //{ os << attributmap.toString(); return (os); } 
    89        
    90       //--------------------------------------------------------------- 
    91        
     94 
     95      //--------------------------------------------------------------- 
     96 
    9297      void CAttributeMap::setAttributes(const xml::THashAttributes & attributes) 
    9398      { 
     
    104109         } 
    105110      } 
    106        
    107       //--------------------------------------------------------------- 
    108        
     111 
     112      //--------------------------------------------------------------- 
     113 
     114      /*! 
     115      \brief Set attributes from a specific attributemap, considered parent. 
     116         The child attribute map will insert the attributes of its parent into its current attribute map. 
     117      The existing attributes can be filled with the values of the parent map if they are empty or 
     118      simply replaced by these values depending on choice of user. 
     119      \param [in] _parent Attribute map from which the current map gets attributes. 
     120      \param [in] apply Specify if current attribute map is replaced by the attributes of parent (false) 
     121                    or filled in in case of emptyp (true) 
     122      */ 
    109123      void CAttributeMap::setAttributes(const CAttributeMap * const _parent, bool apply) 
    110124      { 
    111125         typedef std::pair<StdString, CAttribute*> StdStrAttPair; 
    112           
     126 
    113127         SuperClassMap::const_iterator it = _parent->begin(), end = _parent->end(); 
    114128         for (; it != end; it++) 
     
    130144         } 
    131145      } 
    132        
    133       //--------------------------------------------------------------- 
    134 /*       
     146 
     147      //--------------------------------------------------------------- 
     148/* 
    135149      void CAttributeMap::toBinary(StdOStream & os) const 
    136150      { 
    137151         typedef std::pair<StdString, CAttribute*> StdStrAttPair; 
    138152         SuperClassMap::const_iterator it = this->begin(), end = this->end(); 
    139           
     153 
    140154         const StdSize nbatt = SuperClassMap::size(); 
    141155         os.write (reinterpret_cast<const char*>(&nbatt) , sizeof(StdSize)); 
    142           
     156 
    143157         for (; it != end; it++) 
    144158         { 
    145159            const StdString & key   = it->first; 
    146             const CAttribute* value = it->second;             
     160            const CAttribute* value = it->second; 
    147161            const StdSize size = key.size(); 
    148              
     162 
    149163            os.write (reinterpret_cast<const char*>(&size) , sizeof(StdSize)); 
    150164            os.write (key.data(), size * sizeof(char)); 
    151              
     165 
    152166            if (!value->isEmpty()) 
    153167            { 
     
    156170               value->toBinary(os); 
    157171            } 
    158             else  
     172            else 
    159173            { 
    160174               bool b = false; 
     
    163177         } 
    164178      } 
    165        
    166       //--------------------------------------------------------------- 
    167        
     179 
     180      //--------------------------------------------------------------- 
     181 
    168182      void CAttributeMap::fromBinary(StdIStream & is) 
    169183      { 
    170184         StdSize nbatt = 0; 
    171185         is.read (reinterpret_cast<char*>(&nbatt), sizeof(StdSize)); 
    172           
     186 
    173187         for (StdSize i = 0; i < nbatt; i++) 
    174188         { 
     
    178192            StdString key(size, ' '); 
    179193            is.read (const_cast<char *>(key.data()), size * sizeof(char)); 
    180              
     194 
    181195            if (!this->hasAttribute(key)) 
    182196               ERROR("CAttributeMap::fromBinary(StdIStream & is)", 
    183197                     << "[ key = " << key << "] key not found !"); 
    184                                          
     198 
    185199            is.read (reinterpret_cast<char*>(&hasValue), sizeof(bool)); 
    186              
    187             if (hasValue)           
     200 
     201            if (hasValue) 
    188202               this->operator[](key)->fromBinary(is); 
    189203         } 
    190204      } 
    191  */      
     205 */ 
    192206      void CAttributeMap::generateCInterface(ostream& oss, const string& className) 
    193207      { 
     
    208222           it->second->generateFortran2003Interface(oss,className) ; 
    209223           it->second->generateFortran2003InterfaceIsDefined(oss,className) ; 
    210            
     224 
    211225           oss<<iendl<<iendl ; 
    212226         } 
    213       }       
    214   
     227      } 
     228 
    215229      ///-------------------------------------------------------------- 
    216230 
     
    221235         SuperClassMap::const_iterator it ; 
    222236         SuperClassMap::const_iterator begin = SuperClassMap::begin(), end = SuperClassMap::end(); 
    223           
    224          oss2=new ostringstream ; 
    225           
    226          *oss2<<"( "<<className<<"_hdl"  ; 
    227           
    228          for ( it=begin ; it != end; it++)  
     237 
     238         oss2=new ostringstream ; 
     239 
     240         *oss2<<"( "<<className<<"_hdl"  ; 
     241 
     242         for ( it=begin ; it != end; it++) 
    229243         { 
    230244           *oss2<<", "<<it->second->getName()<<"_" ; 
    231            if (oss2->str().size()>90)  
    232            { 
    233              oss<<oss2->str()<<"  &"<<iendl ; 
    234              delete oss2 ; 
    235              oss2=new ostringstream ; 
    236            } 
    237          } 
    238          *oss2<<" )" ; 
    239          oss<<oss2->str()<<iendl ; 
    240          oss<<iendl ; 
    241          delete oss2 ;  
    242           
     245           if (oss2->str().size()>90) 
     246           { 
     247             oss<<oss2->str()<<"  &"<<iendl ; 
     248             delete oss2 ; 
     249             oss2=new ostringstream ; 
     250           } 
     251         } 
     252         *oss2<<" )" ; 
     253         oss<<oss2->str()<<iendl ; 
     254         oss<<iendl ; 
     255         delete oss2 ; 
     256 
    243257         oss<<"IMPLICIT NONE"<<iendl++ ; 
    244258         oss<<"TYPE(txios("<<className<<")) , INTENT(IN) :: "<<className<<"_hdl"<<iendl ; 
    245           
     259 
    246260         for (it=begin; it != end; it++) 
    247261         { 
    248262           it->second->generateFortranInterfaceDeclaration_(oss,className) ; 
    249263         } 
    250           
    251          oss<<iendl ; 
    252           
     264 
     265         oss<<iendl ; 
     266 
    253267         for (it=begin; it != end; it++) 
    254268         { 
     
    256270           oss<<iendl ; 
    257271         } 
    258           
     272 
    259273         oss<<iendl--<<iendl-- ; 
    260274         oss<<"END SUBROUTINE xios(set_"<<className<<"_attr_hdl_)"<<iendl ; 
    261           
    262       }       
     275 
     276      } 
    263277 
    264278      void CAttributeMap::generateFortranInterfaceGet_hdl_(ostream& oss, const string& className) 
     
    268282         SuperClassMap::const_iterator it ; 
    269283         SuperClassMap::const_iterator begin = SuperClassMap::begin(), end = SuperClassMap::end(); 
    270           
    271          oss2=new ostringstream ; 
    272           
    273          *oss2<<"( "<<className<<"_hdl"  ; 
    274           
    275          for ( it=begin ; it != end; it++)  
     284 
     285         oss2=new ostringstream ; 
     286 
     287         *oss2<<"( "<<className<<"_hdl"  ; 
     288 
     289         for ( it=begin ; it != end; it++) 
    276290         { 
    277291           *oss2<<", "<<it->second->getName()<<"_" ; 
    278            if (oss2->str().size()>90)  
    279            { 
    280              oss<<oss2->str()<<"  &"<<iendl ; 
    281              delete oss2 ; 
    282              oss2=new ostringstream ; 
    283            } 
    284          } 
    285          *oss2<<" )" ; 
    286          oss<<oss2->str()<<iendl ; 
    287          oss<<iendl ; 
    288          delete oss2 ;  
    289           
     292           if (oss2->str().size()>90) 
     293           { 
     294             oss<<oss2->str()<<"  &"<<iendl ; 
     295             delete oss2 ; 
     296             oss2=new ostringstream ; 
     297           } 
     298         } 
     299         *oss2<<" )" ; 
     300         oss<<oss2->str()<<iendl ; 
     301         oss<<iendl ; 
     302         delete oss2 ; 
     303 
    290304         oss<<"IMPLICIT NONE"<<iendl++ ; 
    291305         oss<<"TYPE(txios("<<className<<")) , INTENT(IN) :: "<<className<<"_hdl"<<iendl ; 
    292           
     306 
    293307         for (it=begin; it != end; it++) 
    294308         { 
    295309           it->second->generateFortranInterfaceGetDeclaration_(oss,className) ; 
    296310         } 
    297           
    298          oss<<iendl ; 
    299           
     311 
     312         oss<<iendl ; 
     313 
    300314         for (it=begin; it != end; it++) 
    301315         { 
     
    303317           oss<<iendl ; 
    304318         } 
    305           
     319 
    306320         oss<<iendl--<<iendl-- ; 
    307321         oss<<"END SUBROUTINE xios(get_"<<className<<"_attr_hdl_)"<<iendl ; 
    308           
    309       }      
    310        
     322 
     323      } 
     324 
    311325 
    312326      void CAttributeMap::generateFortranInterfaceIsDefined_hdl_(ostream& oss, const string& className) 
     
    316330         SuperClassMap::const_iterator it ; 
    317331         SuperClassMap::const_iterator begin = SuperClassMap::begin(), end = SuperClassMap::end(); 
    318           
    319          oss2=new ostringstream ; 
    320           
    321          *oss2<<"( "<<className<<"_hdl"  ; 
    322           
    323          for ( it=begin ; it != end; it++)  
     332 
     333         oss2=new ostringstream ; 
     334 
     335         *oss2<<"( "<<className<<"_hdl"  ; 
     336 
     337         for ( it=begin ; it != end; it++) 
    324338         { 
    325339           *oss2<<", "<<it->second->getName()<<"_" ; 
    326            if (oss2->str().size()>90)  
    327            { 
    328              oss<<oss2->str()<<"  &"<<iendl ; 
    329              delete oss2 ; 
    330              oss2=new ostringstream ; 
    331            } 
    332          } 
    333          *oss2<<" )" ; 
    334          oss<<oss2->str()<<iendl ; 
    335          oss<<iendl ; 
    336          delete oss2 ;  
    337           
     340           if (oss2->str().size()>90) 
     341           { 
     342             oss<<oss2->str()<<"  &"<<iendl ; 
     343             delete oss2 ; 
     344             oss2=new ostringstream ; 
     345           } 
     346         } 
     347         *oss2<<" )" ; 
     348         oss<<oss2->str()<<iendl ; 
     349         oss<<iendl ; 
     350         delete oss2 ; 
     351 
    338352         oss<<"IMPLICIT NONE"<<iendl++ ; 
    339353         oss<<"TYPE(txios("<<className<<")) , INTENT(IN) :: "<<className<<"_hdl"<<iendl ; 
    340           
     354 
    341355         for (it=begin; it != end; it++) 
    342356         { 
    343357           it->second->generateFortranInterfaceIsDefinedDeclaration_(oss,className) ; 
    344358         } 
    345           
    346          oss<<iendl ; 
    347           
     359 
     360         oss<<iendl ; 
     361 
    348362         for (it=begin; it != end; it++) 
    349363         { 
     
    351365           oss<<iendl ; 
    352366         } 
    353           
     367 
    354368         oss<<iendl--<<iendl-- ; 
    355369         oss<<"END SUBROUTINE xios(is_defined_"<<className<<"_attr_hdl_)"<<iendl ; 
    356           
    357       }       
    358         
     370 
     371      } 
     372 
    359373 
    360374      void CAttributeMap::generateFortranInterface_hdl(ostream& oss, const string& className) 
     
    364378         SuperClassMap::const_iterator it ; 
    365379         SuperClassMap::const_iterator begin = SuperClassMap::begin(), end = SuperClassMap::end(); 
    366           
    367          oss2=new ostringstream ; 
    368          *oss2<<"( "<<className<<"_hdl"  ; 
    369          for ( it=begin ; it != end; it++)  
    370          { 
    371            *oss2<<", "<<it->second->getName() ; 
    372            if (oss2->str().size()>90)  
    373            { 
    374              oss<<oss2->str()<<"  &"<<iendl ; 
    375              delete oss2 ; 
    376              oss2=new ostringstream ; 
    377            } 
    378          } 
    379          *oss2<<" )" ; 
    380          oss<<oss2->str()<<iendl ; 
    381          oss<<iendl ; 
    382          delete oss2 ;  
    383          oss2=new ostringstream ; 
    384           
     380 
     381         oss2=new ostringstream ; 
     382         *oss2<<"( "<<className<<"_hdl"  ; 
     383         for ( it=begin ; it != end; it++) 
     384         { 
     385           *oss2<<", "<<it->second->getName() ; 
     386           if (oss2->str().size()>90) 
     387           { 
     388             oss<<oss2->str()<<"  &"<<iendl ; 
     389             delete oss2 ; 
     390             oss2=new ostringstream ; 
     391           } 
     392         } 
     393         *oss2<<" )" ; 
     394         oss<<oss2->str()<<iendl ; 
     395         oss<<iendl ; 
     396         delete oss2 ; 
     397         oss2=new ostringstream ; 
     398 
    385399         oss<<"IMPLICIT NONE"<<iendl++ ; 
    386400         oss<<"TYPE(txios("<<className<<")) , INTENT(IN) :: "<<className<<"_hdl"<<iendl ; 
    387           
     401 
    388402         for (it=begin; it != end; it++) 
    389403         { 
    390404           it->second->generateFortranInterfaceDeclaration(oss,className) ; 
    391405         } 
    392           
    393          oss<<iendl ; 
    394           
     406 
     407         oss<<iendl ; 
     408 
    395409         oss<<"CALL xios(set_"<<className<<"_attr_hdl_)  &"<<iendl ; 
    396           
    397          *oss2<<"( "<<className<<"_hdl"  ; 
    398          for ( it=begin ; it != end; it++)  
    399          { 
    400            *oss2<<", "<<it->second->getName() ; 
    401            if (oss2->str().size()>90)  
     410 
     411         *oss2<<"( "<<className<<"_hdl"  ; 
     412         for ( it=begin ; it != end; it++) 
     413         { 
     414           *oss2<<", "<<it->second->getName() ; 
     415           if (oss2->str().size()>90) 
    402416           { 
    403417             oss<<oss2->str()<<"  &"<<iendl ; 
     
    408422         *oss2<<" )" ; 
    409423         oss<<oss2->str() ; 
    410          delete oss2 ;  
    411           
     424         delete oss2 ; 
     425 
    412426         oss<<iendl--<<iendl-- ; 
    413427         oss<<"END SUBROUTINE xios(set_"<<className<<"_attr_hdl)"<<iendl ; 
    414       }       
    415        
    416   
     428      } 
     429 
     430 
    417431      void CAttributeMap::generateFortranInterfaceGet_hdl(ostream& oss, const string& className) 
    418432      { 
     
    421435         SuperClassMap::const_iterator it ; 
    422436         SuperClassMap::const_iterator begin = SuperClassMap::begin(), end = SuperClassMap::end(); 
    423           
    424          oss2=new ostringstream ; 
    425          *oss2<<"( "<<className<<"_hdl"  ; 
    426          for ( it=begin ; it != end; it++)  
    427          { 
    428            *oss2<<", "<<it->second->getName() ; 
    429            if (oss2->str().size()>90)  
    430            { 
    431              oss<<oss2->str()<<"  &"<<iendl ; 
    432              delete oss2 ; 
    433              oss2=new ostringstream ; 
    434            } 
    435          } 
    436          *oss2<<" )" ; 
    437          oss<<oss2->str()<<iendl ; 
    438          oss<<iendl ; 
    439          delete oss2 ;  
    440          oss2=new ostringstream ; 
    441           
     437 
     438         oss2=new ostringstream ; 
     439         *oss2<<"( "<<className<<"_hdl"  ; 
     440         for ( it=begin ; it != end; it++) 
     441         { 
     442           *oss2<<", "<<it->second->getName() ; 
     443           if (oss2->str().size()>90) 
     444           { 
     445             oss<<oss2->str()<<"  &"<<iendl ; 
     446             delete oss2 ; 
     447             oss2=new ostringstream ; 
     448           } 
     449         } 
     450         *oss2<<" )" ; 
     451         oss<<oss2->str()<<iendl ; 
     452         oss<<iendl ; 
     453         delete oss2 ; 
     454         oss2=new ostringstream ; 
     455 
    442456         oss<<"IMPLICIT NONE"<<iendl++ ; 
    443457         oss<<"TYPE(txios("<<className<<")) , INTENT(IN) :: "<<className<<"_hdl"<<iendl ; 
    444           
     458 
    445459         for (it=begin; it != end; it++) 
    446460         { 
    447461           it->second->generateFortranInterfaceGetDeclaration(oss,className) ; 
    448462         } 
    449           
    450          oss<<iendl ; 
    451           
     463 
     464         oss<<iendl ; 
     465 
    452466         oss<<"CALL xios(get_"<<className<<"_attr_hdl_)  &"<<iendl ; 
    453           
    454          *oss2<<"( "<<className<<"_hdl"  ; 
    455          for ( it=begin ; it != end; it++)  
    456          { 
    457            *oss2<<", "<<it->second->getName() ; 
    458            if (oss2->str().size()>90)  
     467 
     468         *oss2<<"( "<<className<<"_hdl"  ; 
     469         for ( it=begin ; it != end; it++) 
     470         { 
     471           *oss2<<", "<<it->second->getName() ; 
     472           if (oss2->str().size()>90) 
    459473           { 
    460474             oss<<oss2->str()<<"  &"<<iendl ; 
     
    465479         *oss2<<" )" ; 
    466480         oss<<oss2->str() ; 
    467          delete oss2 ;  
    468           
     481         delete oss2 ; 
     482 
    469483         oss<<iendl--<<iendl-- ; 
    470484         oss<<"END SUBROUTINE xios(get_"<<className<<"_attr_hdl)"<<iendl ; 
    471       }       
     485      } 
    472486 
    473487 
     
    478492         SuperClassMap::const_iterator it ; 
    479493         SuperClassMap::const_iterator begin = SuperClassMap::begin(), end = SuperClassMap::end(); 
    480           
    481          oss2=new ostringstream ; 
    482          *oss2<<"( "<<className<<"_hdl"  ; 
    483          for ( it=begin ; it != end; it++)  
    484          { 
    485            *oss2<<", "<<it->second->getName() ; 
    486            if (oss2->str().size()>90)  
    487            { 
    488              oss<<oss2->str()<<"  &"<<iendl ; 
    489              delete oss2 ; 
    490              oss2=new ostringstream ; 
    491            } 
    492          } 
    493          *oss2<<" )" ; 
    494          oss<<oss2->str()<<iendl ; 
    495          oss<<iendl ; 
    496          delete oss2 ;  
    497          oss2=new ostringstream ; 
    498           
     494 
     495         oss2=new ostringstream ; 
     496         *oss2<<"( "<<className<<"_hdl"  ; 
     497         for ( it=begin ; it != end; it++) 
     498         { 
     499           *oss2<<", "<<it->second->getName() ; 
     500           if (oss2->str().size()>90) 
     501           { 
     502             oss<<oss2->str()<<"  &"<<iendl ; 
     503             delete oss2 ; 
     504             oss2=new ostringstream ; 
     505           } 
     506         } 
     507         *oss2<<" )" ; 
     508         oss<<oss2->str()<<iendl ; 
     509         oss<<iendl ; 
     510         delete oss2 ; 
     511         oss2=new ostringstream ; 
     512 
    499513         oss<<"IMPLICIT NONE"<<iendl++ ; 
    500514         oss<<"TYPE(txios("<<className<<")) , INTENT(IN) :: "<<className<<"_hdl"<<iendl ; 
    501           
     515 
    502516         for (it=begin; it != end; it++) 
    503517         { 
    504518           it->second->generateFortranInterfaceIsDefinedDeclaration(oss,className) ; 
    505519         } 
    506           
    507          oss<<iendl ; 
    508           
     520 
     521         oss<<iendl ; 
     522 
    509523         oss<<"CALL xios(is_defined_"<<className<<"_attr_hdl_)  &"<<iendl ; 
    510           
    511          *oss2<<"( "<<className<<"_hdl"  ; 
    512          for ( it=begin ; it != end; it++)  
    513          { 
    514            *oss2<<", "<<it->second->getName() ; 
    515            if (oss2->str().size()>90)  
     524 
     525         *oss2<<"( "<<className<<"_hdl"  ; 
     526         for ( it=begin ; it != end; it++) 
     527         { 
     528           *oss2<<", "<<it->second->getName() ; 
     529           if (oss2->str().size()>90) 
    516530           { 
    517531             oss<<oss2->str()<<"  &"<<iendl ; 
     
    522536         *oss2<<" )" ; 
    523537         oss<<oss2->str() ; 
    524          delete oss2 ;  
    525           
     538         delete oss2 ; 
     539 
    526540         oss<<iendl--<<iendl-- ; 
    527541         oss<<"END SUBROUTINE xios(is_defined_"<<className<<"_attr_hdl)"<<iendl ; 
    528       }       
    529  
    530        
     542      } 
     543 
     544 
    531545      void CAttributeMap::generateFortranInterface_id(ostream& oss, const string& className) 
    532546      { 
     
    535549         SuperClassMap::const_iterator it ; 
    536550         SuperClassMap::const_iterator begin = SuperClassMap::begin(), end = SuperClassMap::end(); 
    537           
     551 
    538552         oss2=new ostringstream ; 
    539553         *oss2<<"( "<<className<<"_id"  ; 
    540          for ( it=begin ; it != end; it++)  
    541          { 
    542            *oss2<<", "<<it->second->getName() ; 
    543            if (oss2->str().size()>90)  
    544            { 
    545              oss<<oss2->str()<<"  &"<<iendl ; 
    546              delete oss2 ; 
    547              oss2=new ostringstream ; 
    548            } 
    549          } 
    550          *oss2<<" )" ; 
    551          oss<<oss2->str()<<iendl ; 
    552          oss<<iendl ; 
    553          delete oss2 ;  
    554          oss2=new ostringstream ; 
    555           
     554         for ( it=begin ; it != end; it++) 
     555         { 
     556           *oss2<<", "<<it->second->getName() ; 
     557           if (oss2->str().size()>90) 
     558           { 
     559             oss<<oss2->str()<<"  &"<<iendl ; 
     560             delete oss2 ; 
     561             oss2=new ostringstream ; 
     562           } 
     563         } 
     564         *oss2<<" )" ; 
     565         oss<<oss2->str()<<iendl ; 
     566         oss<<iendl ; 
     567         delete oss2 ; 
     568         oss2=new ostringstream ; 
     569 
    556570         oss<<"IMPLICIT NONE"<<iendl++ ; 
    557571 
    558572         oss<<"TYPE(txios("<<className<<"))  :: "<<className<<"_hdl"<<iendl ; 
    559573         oss<<"CHARACTER(LEN=*), INTENT(IN) ::"<<className<<"_id"<<iendl ; 
    560           
     574 
    561575         for (it=begin; it != end; it++) 
    562576         { 
    563577           it->second->generateFortranInterfaceDeclaration(oss,className) ; 
    564578         } 
    565           
    566          oss<<iendl ; 
    567          oss<<"CALL xios(get_"<<className<<"_handle)("<<className<<"_id,"<<className<<"_hdl)"<<iendl ;  
     579 
     580         oss<<iendl ; 
     581         oss<<"CALL xios(get_"<<className<<"_handle)("<<className<<"_id,"<<className<<"_hdl)"<<iendl ; 
    568582         oss<<"CALL xios(set_"<<className<<"_attr_hdl_)   &"<<iendl ; 
    569583         *oss2<<"( "<<className<<"_hdl"  ; 
    570          for ( it=begin ; it != end; it++)  
    571          { 
    572            *oss2<<", "<<it->second->getName() ; 
    573            if (oss2->str().size()>90)  
     584         for ( it=begin ; it != end; it++) 
     585         { 
     586           *oss2<<", "<<it->second->getName() ; 
     587           if (oss2->str().size()>90) 
    574588           { 
    575589             oss<<oss2->str()<<"  &"<<iendl ; 
     
    580594         *oss2<<" )" ; 
    581595         oss<<oss2->str() ; 
    582          delete oss2 ;  
    583           
     596         delete oss2 ; 
     597 
    584598         oss<<iendl--<<iendl-- ; 
    585599         oss<<"END SUBROUTINE xios(set_"<<className<<"_attr)"<<iendl ; 
    586           
    587       }       
    588        
     600 
     601      } 
     602 
    589603      void CAttributeMap::generateFortranInterfaceGet_id(ostream& oss, const string& className) 
    590604      { 
     
    593607         SuperClassMap::const_iterator it ; 
    594608         SuperClassMap::const_iterator begin = SuperClassMap::begin(), end = SuperClassMap::end(); 
    595           
     609 
    596610         oss2=new ostringstream ; 
    597611         *oss2<<"( "<<className<<"_id"  ; 
    598          for ( it=begin ; it != end; it++)  
    599          { 
    600            *oss2<<", "<<it->second->getName() ; 
    601            if (oss2->str().size()>90)  
    602            { 
    603              oss<<oss2->str()<<"  &"<<iendl ; 
    604              delete oss2 ; 
    605              oss2=new ostringstream ; 
    606            } 
    607          } 
    608          *oss2<<" )" ; 
    609          oss<<oss2->str()<<iendl ; 
    610          oss<<iendl ; 
    611          delete oss2 ;  
    612          oss2=new ostringstream ; 
    613           
     612         for ( it=begin ; it != end; it++) 
     613         { 
     614           *oss2<<", "<<it->second->getName() ; 
     615           if (oss2->str().size()>90) 
     616           { 
     617             oss<<oss2->str()<<"  &"<<iendl ; 
     618             delete oss2 ; 
     619             oss2=new ostringstream ; 
     620           } 
     621         } 
     622         *oss2<<" )" ; 
     623         oss<<oss2->str()<<iendl ; 
     624         oss<<iendl ; 
     625         delete oss2 ; 
     626         oss2=new ostringstream ; 
     627 
    614628         oss<<"IMPLICIT NONE"<<iendl++ ; 
    615629 
    616630         oss<<"TYPE(txios("<<className<<"))  :: "<<className<<"_hdl"<<iendl ; 
    617631         oss<<"CHARACTER(LEN=*), INTENT(IN) ::"<<className<<"_id"<<iendl ; 
    618           
     632 
    619633         for (it=begin; it != end; it++) 
    620634         { 
    621635           it->second->generateFortranInterfaceGetDeclaration(oss,className) ; 
    622636         } 
    623           
    624          oss<<iendl ; 
    625          oss<<"CALL xios(get_"<<className<<"_handle)("<<className<<"_id,"<<className<<"_hdl)"<<iendl ;  
     637 
     638         oss<<iendl ; 
     639         oss<<"CALL xios(get_"<<className<<"_handle)("<<className<<"_id,"<<className<<"_hdl)"<<iendl ; 
    626640         oss<<"CALL xios(get_"<<className<<"_attr_hdl_)   &"<<iendl ; 
    627641         *oss2<<"( "<<className<<"_hdl"  ; 
    628          for ( it=begin ; it != end; it++)  
    629          { 
    630            *oss2<<", "<<it->second->getName() ; 
    631            if (oss2->str().size()>90)  
     642         for ( it=begin ; it != end; it++) 
     643         { 
     644           *oss2<<", "<<it->second->getName() ; 
     645           if (oss2->str().size()>90) 
    632646           { 
    633647             oss<<oss2->str()<<"  &"<<iendl ; 
     
    638652         *oss2<<" )" ; 
    639653         oss<<oss2->str() ; 
    640          delete oss2 ;  
    641           
     654         delete oss2 ; 
     655 
    642656         oss<<iendl--<<iendl-- ; 
    643657         oss<<"END SUBROUTINE xios(get_"<<className<<"_attr)"<<iendl ; 
    644           
    645       }       
    646        
     658 
     659      } 
     660 
    647661      void CAttributeMap::generateFortranInterfaceIsDefined_id(ostream& oss, const string& className) 
    648662      { 
     
    651665         SuperClassMap::const_iterator it ; 
    652666         SuperClassMap::const_iterator begin = SuperClassMap::begin(), end = SuperClassMap::end(); 
    653           
     667 
    654668         oss2=new ostringstream ; 
    655669         *oss2<<"( "<<className<<"_id"  ; 
    656          for ( it=begin ; it != end; it++)  
    657          { 
    658            *oss2<<", "<<it->second->getName() ; 
    659            if (oss2->str().size()>90)  
    660            { 
    661              oss<<oss2->str()<<"  &"<<iendl ; 
    662              delete oss2 ; 
    663              oss2=new ostringstream ; 
    664            } 
    665          } 
    666          *oss2<<" )" ; 
    667          oss<<oss2->str()<<iendl ; 
    668          oss<<iendl ; 
    669          delete oss2 ;  
    670          oss2=new ostringstream ; 
    671           
     670         for ( it=begin ; it != end; it++) 
     671         { 
     672           *oss2<<", "<<it->second->getName() ; 
     673           if (oss2->str().size()>90) 
     674           { 
     675             oss<<oss2->str()<<"  &"<<iendl ; 
     676             delete oss2 ; 
     677             oss2=new ostringstream ; 
     678           } 
     679         } 
     680         *oss2<<" )" ; 
     681         oss<<oss2->str()<<iendl ; 
     682         oss<<iendl ; 
     683         delete oss2 ; 
     684         oss2=new ostringstream ; 
     685 
    672686         oss<<"IMPLICIT NONE"<<iendl++ ; 
    673687 
    674688         oss<<"TYPE(txios("<<className<<"))  :: "<<className<<"_hdl"<<iendl ; 
    675689         oss<<"CHARACTER(LEN=*), INTENT(IN) ::"<<className<<"_id"<<iendl ; 
    676           
     690 
    677691         for (it=begin; it != end; it++) 
    678692         { 
    679693           it->second->generateFortranInterfaceIsDefinedDeclaration(oss,className) ; 
    680694         } 
    681           
    682          oss<<iendl ; 
    683          oss<<"CALL xios(get_"<<className<<"_handle)("<<className<<"_id,"<<className<<"_hdl)"<<iendl ;  
     695 
     696         oss<<iendl ; 
     697         oss<<"CALL xios(get_"<<className<<"_handle)("<<className<<"_id,"<<className<<"_hdl)"<<iendl ; 
    684698         oss<<"CALL xios(is_defined_"<<className<<"_attr_hdl_)   &"<<iendl ; 
    685699         *oss2<<"( "<<className<<"_hdl"  ; 
    686          for ( it=begin ; it != end; it++)  
    687          { 
    688            *oss2<<", "<<it->second->getName() ; 
    689            if (oss2->str().size()>90)  
     700         for ( it=begin ; it != end; it++) 
     701         { 
     702           *oss2<<", "<<it->second->getName() ; 
     703           if (oss2->str().size()>90) 
    690704           { 
    691705             oss<<oss2->str()<<"  &"<<iendl ; 
     
    696710         *oss2<<" )" ; 
    697711         oss<<oss2->str() ; 
    698          delete oss2 ;  
    699           
     712         delete oss2 ; 
     713 
    700714         oss<<iendl--<<iendl-- ; 
    701715         oss<<"END SUBROUTINE xios(is_defined_"<<className<<"_attr)"<<iendl ; 
    702           
    703       }       
     716 
     717      } 
    704718      ///-------------------------------------------------------------- 
    705    
     719 
    706720 
    707721} // namespace xmlioser 
  • XIOS/trunk/src/attribute_map.hpp

    r501 r509  
    3333            void clearAllAttributes(void); 
    3434 
     35            void clearAttribute(const StdString& key); 
     36 
    3537            /// Destructeur /// 
    3638            virtual ~CAttributeMap(void); 
     
    4345            virtual StdString toString(void) const; 
    4446            virtual void fromString(const StdString & str); 
    45              
     47 
    4648//            virtual void toBinary  (StdOStream & os) const; 
    4749//            virtual void fromBinary(StdIStream & is); 
  • XIOS/trunk/src/buffer_client.cpp

    r501 r509  
    1010namespace xios 
    1111{ 
    12   
     12 
    1313  size_t maxRequestSize=0 ; 
    14    
    15   CClientBuffer::CClientBuffer(MPI_Comm interComm_,int serverRank_) 
     14 
     15  CClientBuffer::CClientBuffer(MPI_Comm interComm_,int serverRank_, StdSize bfSize) 
    1616  { 
    17     bufferSizeByServer=CXios::bufferSize ; 
     17    bufferSizeByServer=bfSize; //CXios::bufferSize ; 
    1818    info(10)<<"bufferSizeByServer "<<bufferSizeByServer<<endl ; 
    1919    interComm=interComm_ ; 
    2020    serverRank=serverRank_ ; 
    21     bufferSize=bufferSizeByServer/2 ; 
     21    bufferSize=bufferSizeByServer/2; //2 ; 
    2222    buffer[0]=new char[bufferSize] ; // transform it with MPI_ALLOC_MEM later 
    2323    buffer[1]=new char[bufferSize] ; 
     
    2727    retBuffer=new CBufferOut(buffer[current],bufferSize) ; 
    2828  } 
    29    
     29 
    3030  CClientBuffer::~CClientBuffer() 
    3131  { 
     
    3434   delete retBuffer ; 
    3535  } 
    36    
     36 
    3737  int CClientBuffer::remain(void) 
    3838  { 
    3939    return bufferSize-count ; 
    4040  } 
    41    
     41 
    4242  bool CClientBuffer::isBufferFree(int size) 
    4343  { 
    4444    if (size>maxRequestSize) maxRequestSize=size ; 
    45      
     45 
    4646    if (size>bufferSize) ERROR("CClientBuffer::hasSpace(int size)", 
    4747                               <<"request size is too big for buffer, increase buffer client size"<<endl 
    4848                               <<"Current buffer_size : "<<CXios::bufferSize<<endl 
    4949                               <<"buffer_size must be > "<<size*2<<endl) 
    50   
     50 
    5151    if (size<=remain()) return true ; 
    5252    else return false ; 
    5353  } 
    54      
    55    
     54 
     55 
    5656  CBufferOut*  CClientBuffer::getBuffer(int size) 
    5757  { 
     
    6868       return NULL ; 
    6969    } 
    70   
    71   }   
    72    
     70 
     71  } 
     72 
    7373  bool CClientBuffer::checkBuffer(void) 
    7474  { 
    7575    MPI_Status status ; 
    7676    int flag ; 
    77      
     77 
    7878    if (pending) 
    7979    { 
     
    9797    return pending ; 
    9898  } 
    99    
     99 
    100100  bool CClientBuffer::hasPendingRequest(void) 
    101101  { 
     
    104104    else return false ; 
    105105  } 
    106      
    107    
    108    
    109 }     
    110      
     106 
     107 
     108 
     109} 
     110 
  • XIOS/trunk/src/buffer_client.hpp

    r501 r509  
    55#include "buffer_out.hpp" 
    66#include "mpi.hpp" 
     7#include "cxios.hpp" 
    78 
    89namespace xios 
    910{ 
    1011  extern size_t maxRequestSize ; 
    11    
     12 
    1213  class CClientBuffer 
    1314  { 
    14      
     15 
    1516    public: 
    16      
    17     CClientBuffer(MPI_Comm intercomm,int serverRank) ; 
     17 
     18    CClientBuffer(MPI_Comm intercomm,int serverRank, StdSize bfSize = CXios::bufferSize) ; 
    1819    ~CClientBuffer() ; 
    1920    bool isBufferFree(int size) ; 
    20     CBufferOut*  getBuffer(int size) ;     
     21    CBufferOut*  getBuffer(int size) ; 
    2122    bool checkBuffer(void) ; 
    2223    bool hasPendingRequest(void) ; 
    23      
     24 
    2425    char* buffer[2] ; 
    2526    int remain(void) ; 
     
    3031    int serverRank ; 
    3132    bool pending ; 
    32      
     33 
    3334    size_t bufferSizeByServer ; 
    34      
     35 
    3536    MPI_Request request ; 
    36      
    37     CBufferOut* retBuffer;     
     37 
     38    CBufferOut* retBuffer; 
    3839    MPI_Comm interComm ; 
    3940  } ; 
  • XIOS/trunk/src/buffer_server.cpp

    r501 r509  
    22#include "exception.hpp" 
    33#include "buffer_server.hpp" 
    4 #include "cxios.hpp" 
     4 
    55 
    66namespace xios 
    77{ 
    88 
    9   CServerBuffer::CServerBuffer(void) 
     9  CServerBuffer::CServerBuffer(StdSize buffSize) 
    1010  { 
    11     bufferSizeByClient=CXios::bufferSize*CXios::bufferServerFactorSize ; 
     11    bufferSizeByClient= buffSize * CXios::bufferServerFactorSize; //::bufferSize*CXios::bufferServerFactorSize ; 
    1212    size=bufferSizeByClient ; 
    1313    first=0 ; 
     
    2121    delete [] buffer ; 
    2222  } 
    23    
     23 
    2424 
    2525  bool CServerBuffer::isBufferFree(size_t count) 
    2626  { 
    2727    bool ret ; 
    28      
     28 
    2929    if (count==0) return true ; 
    30      
     30 
    3131    if (current>first) 
    3232    { 
     
    7272    return ret ; 
    7373  } 
    74    
     74 
    7575 
    7676  void* CServerBuffer::getBuffer(size_t count) 
    7777  { 
    7878    char* ret ; 
    79      
     79 
    8080    if (count==0) return buffer+current ; 
    81      
     81 
    8282    if (current>first) 
    8383    { 
     
    131131    return ret ; 
    132132  } 
    133    
     133 
    134134  void CServerBuffer::freeBuffer(size_t count) 
    135135  { 
    136136    if (count==0) return ; 
    137137 
    138     if (first==end-1)  
     138    if (first==end-1) 
    139139    { 
    140140      first=0 ; 
     
    145145    if (first<=current) 
    146146    { 
    147       if (first+count <current)  
     147      if (first+count <current) 
    148148      { 
    149149        first+=count ; 
     
    154154                 <<"cannot free required size in buffer") ; 
    155155      } 
    156      
     156 
    157157    } 
    158158    else 
     
    168168      } 
    169169    } 
    170   }       
    171         
     170  } 
     171 
    172172} 
  • XIOS/trunk/src/buffer_server.hpp

    r501 r509  
    55#include "buffer.hpp" 
    66#include "mpi.hpp" 
     7#include "cxios.hpp" 
    78 
    89namespace xios 
     
    1112  class CServerBuffer 
    1213  { 
    13      
     14 
    1415    public: 
    15      
    16     CServerBuffer(void) ; 
     16 
     17    CServerBuffer(StdSize bufSize = CXios::bufferSize) ; 
    1718    ~CServerBuffer() ; 
    1819    char* buffer ; 
    19      
     20 
    2021    bool isBufferFree(size_t count) ; 
    2122    void* getBuffer(size_t count) ; 
    2223    void freeBuffer(size_t count) ; 
    23    
     24 
    2425    size_t first ;   // first occupied element 
    2526    size_t current ; // first free element 
     
    2829    size_t bufferSizeByClient ; 
    2930  } ; 
    30    
     31 
    3132 
    3233} 
  • XIOS/trunk/src/context_client.cpp

    r501 r509  
    1717 
    1818 
    19     CContextClient::CContextClient(CContext* parent,MPI_Comm intraComm_, MPI_Comm interComm_) 
     19    CContextClient::CContextClient(CContext* parent,MPI_Comm intraComm_, MPI_Comm interComm_) : mapBufferSize_() 
    2020    { 
    2121      context=parent ; 
     
    2424      MPI_Comm_rank(intraComm,&clientRank) ; 
    2525      MPI_Comm_size(intraComm,&clientSize) ; 
    26        
     26 
    2727      int flag ; 
    2828      MPI_Comm_test_inter(interComm,&flag) ; 
    2929      if (flag) MPI_Comm_remote_size(interComm,&serverSize); 
    3030      else  MPI_Comm_size(interComm,&serverSize) ; 
    31       
     31 
    3232      timeLine=0 ; 
    3333 
     
    3939      list<int>::iterator itServer ; 
    4040      list<int> ranks ; 
    41       list<int> sizes ;   
     41      list<int> sizes ; 
    4242      list<int>::iterator itSize ; 
    43        
     43 
    4444      ranks=event.getRanks() ; 
    4545      if (! event.isEmpty()) 
     
    5151        for(list<int>::iterator it=sizes.begin();it!=sizes.end();it++) *it+=msg.size() ; 
    5252        list<CBufferOut*> buffList=getBuffers(ranks,sizes) ; 
    53        
    54         list<CBufferOut*>::iterator it ;       
     53 
     54        list<CBufferOut*>::iterator it ; 
    5555        for(it=buffList.begin(),itSize=sizes.begin();it!=buffList.end();++it,++itSize) 
    5656        { 
     
    6464      timeLine++ ; 
    6565    } 
    66        
     66 
     67    void CContextClient::sendBufferSizeEvent() 
     68    { 
     69      std::map<int, CClientBuffer*>::iterator it, itE; 
     70      std::map<int, StdSize>::const_iterator itMap = mapBufferSize_.begin(), iteMap = mapBufferSize_.end(); 
     71 
     72      if (itMap == iteMap) 
     73         ERROR("CBufferOut*  CContextClient::sendBufferSizeEvent() ;", 
     74              <<"No information about server buffer, that should not happen..."); 
     75 
     76      for (; itMap != iteMap; ++iteMap) 
     77      { 
     78        if (buffers.end() == buffers.find(itMap->first)) 
     79          newBuffer(itMap->first); 
     80      } 
     81 
     82      CBufferOut* bufOut(NULL); 
     83      itE = buffers.end(); 
     84      for (it = buffers.begin(); it != itE; ++it) 
     85      { 
     86        bufOut = (it->second)->getBuffer(sizeof(StdSize)); 
     87        bufOut->put(mapBufferSize_[it->first]);  // Stupid C++ 
     88        (it->second)->checkBuffer(); 
     89      } 
     90    } 
     91 
    6792    void CContextClient::waitEvent(list<int>& ranks) 
    6893    { 
     
    78103       context->server->eventLoop() ; 
    79104      } 
    80        
     105 
    81106    } 
    82107 
     
    84109    { 
    85110      list<int>::iterator itServer,itSize ; 
    86       list<CClientBuffer*> bufferList ;  
    87       map<int,CClientBuffer*>::iterator it ;  
    88       list<CClientBuffer*>::iterator itBuffer ;  
     111      list<CClientBuffer*> bufferList ; 
     112      map<int,CClientBuffer*>::iterator it ; 
     113      list<CClientBuffer*>::iterator itBuffer ; 
    89114      list<CBufferOut*>  retBuffer ; 
    90115      bool free ; 
    91116 
    92       for(itServer=serverList.begin();itServer!=serverList.end();itServer++)  
     117      for(itServer=serverList.begin();itServer!=serverList.end();itServer++) 
    93118      { 
    94119        it=buffers.find(*itServer) ; 
    95         if (it==buffers.end())  
     120        if (it==buffers.end()) 
    96121        { 
    97122          newBuffer(*itServer) ; 
    98123          it=buffers.find(*itServer) ; 
    99         }          
     124        } 
    100125        bufferList.push_back(it->second) ; 
    101126      } 
     
    118143        retBuffer.push_back((*itBuffer)->getBuffer(*itSize)) ; 
    119144      } 
    120       return retBuffer ;              
    121     
    122    } 
    123       
     145      return retBuffer ; 
     146 
     147   } 
     148 
    124149   void CContextClient::newBuffer(int rank) 
    125150   { 
    126       buffers[rank]=new CClientBuffer(interComm,rank) ; 
    127    }  
     151//     buffers[rank]=new CClientBuffer(interComm,rank); 
     152      buffers[rank]=new CClientBuffer(interComm,rank, mapBufferSize_[rank]) ; 
     153   } 
    128154 
    129155   bool CContextClient::checkBuffers(void) 
     
    133159      for(itBuff=buffers.begin();itBuff!=buffers.end();itBuff++) pending|=itBuff->second->checkBuffer() ; 
    134160      return pending ; 
    135    }  
     161   } 
    136162 
    137163   void CContextClient::releaseBuffers(void) 
     
    139165      map<int,CClientBuffer*>::iterator itBuff ; 
    140166      for(itBuff=buffers.begin();itBuff!=buffers.end();itBuff++) delete itBuff->second ; 
    141    }  
     167   } 
    142168 
    143169   bool CContextClient::checkBuffers(list<int>& ranks) 
     
    147173      for(it=ranks.begin();it!=ranks.end();it++) pending|=buffers[*it]->checkBuffer() ; 
    148174      return pending ; 
    149    }  
     175   } 
     176 
     177   void CContextClient::setBufferSize(const std::map<int, StdSize>& mapSize) 
     178   { 
     179     mapBufferSize_ = mapSize; 
     180     sendBufferSizeEvent(); 
     181   } 
    150182 
    151183   int CContextClient::getServerLeader(void) 
     
    153185     int clientByServer=clientSize/serverSize ; 
    154186     int remain=clientSize%serverSize ; 
    155       
     187 
    156188     if (clientRank<(clientByServer+1)*remain) 
    157189     { 
     
    164196       return remain+rank/clientByServer ; 
    165197     } 
    166    }       
     198   } 
    167199 
    168200   bool CContextClient::isServerLeader(void) 
     
    170202     int clientByServer=clientSize/serverSize ; 
    171203     int remain=clientSize%serverSize ; 
    172       
     204 
    173205     if (clientRank<(clientByServer+1)*remain) 
    174206     { 
     
    182214       if  (rank%clientByServer==0) return true ; 
    183215       else return false ; 
    184      }  
    185    } 
    186       
     216     } 
     217   } 
     218 
    187219   void CContextClient::finalize(void) 
    188220   { 
    189        
     221 
    190222     map<int,CClientBuffer*>::iterator itBuff ; 
    191223     bool stop=true ; 
    192224 
    193      CEventClient event(CContext::GetType(),CContext::EVENT_ID_CONTEXT_FINALIZE) ;    
     225     CEventClient event(CContext::GetType(),CContext::EVENT_ID_CONTEXT_FINALIZE) ; 
    194226     if (isServerLeader()) 
    195227     { 
     
    199231     } 
    200232     else sendEvent(event) ; 
    201   
     233 
    202234     CTimer::get("Blocking time").resume(); 
    203235     while(stop) 
     
    209241     CTimer::get("Blocking time").suspend(); 
    210242     report(0)<< " Memory report : Context <"<<context->getId()<<"> : client side : total memory used for buffer "<<buffers.size()*CXios::bufferSize<<" bytes"<<endl ; 
    211       
     243 
    212244     releaseBuffers() ; 
    213245   } 
    214 }       
     246} 
  • XIOS/trunk/src/context_client.hpp

    r501 r509  
    1111{ 
    1212  class CContext ; 
    13    
     13 
    1414  class CContextClient 
    1515  { 
    16    
     16 
    1717    public: 
    1818    CContextClient(CContext* parent,MPI_Comm intraComm, MPI_Comm interComm) ; 
    1919//    void registerEvent(CEventClient& event) ; 
    2020 
    21 //    list<CBufferOut*> newEvent(CEventClient& event,list<int>& sizes) ;   
     21//    list<CBufferOut*> newEvent(CEventClient& event,list<int>& sizes) ; 
    2222    void sendEvent(CEventClient& event) ; 
    2323 
     
    4141    void waitEvent(list<int>& ranks) ; 
    4242 
     43    void setBufferSize(const std::map<int, StdSize>& mapSize); 
     44    void sendBufferSizeEvent(); 
     45 
    4346    CContext* context ; 
     47 
     48    private: 
     49    std::map<int, StdSize> mapBufferSize_; 
    4450//    bool locked ; 
    45      
     51 
    4652  } ; 
    4753 
  • XIOS/trunk/src/context_server.cpp

    r501 r509  
    3737    scheduled=false ; 
    3838    finished=false ; 
    39      
     39 
    4040    boost::hash<string> hashString ; 
    4141    hashId=hashString(context->getId()) ; 
     
    8080          it=buffers.find(rank) ; 
    8181          if (it==buffers.end()) 
    82             it=(buffers.insert(pair<int,CServerBuffer*>(rank,new CServerBuffer))).first ; 
    83           MPI_Get_count(&status,MPI_CHAR,&count) ; 
    84           if (it->second->isBufferFree(count)) 
    8582          { 
    86             addr=(char*)it->second->getBuffer(count) ; 
    87             MPI_Irecv(addr,count,MPI_CHAR,rank,20,interComm,&pendingRequest[rank]) ; 
    88             bufferRequest[rank]=addr ; 
     83            StdSize buffSize = 0; 
     84            MPI_Recv(&buffSize, 1, MPI_LONG, rank, 20, interComm, &status); 
     85            it=(buffers.insert(pair<int,CServerBuffer*>(rank,new CServerBuffer(buffSize)))).first ; 
     86          } 
     87          else 
     88          { 
     89            MPI_Get_count(&status,MPI_CHAR,&count) ; 
     90            if (it->second->isBufferFree(count)) 
     91            { 
     92              addr=(char*)it->second->getBuffer(count) ; 
     93              MPI_Irecv(addr,count,MPI_CHAR,rank,20,interComm,&pendingRequest[rank]) ; 
     94              bufferRequest[rank]=addr ; 
     95            } 
    8996          } 
    9097        } 
     
    158165    { 
    159166      event=it->second ; 
    160        
     167 
    161168      if (event->isFull()) 
    162169      { 
    163170        if (!scheduled && !CXios::isServer) 
    164171        { 
    165           CServer::eventScheduler->registerEvent(currentTimeLine,hashId) ;   
     172          CServer::eventScheduler->registerEvent(currentTimeLine,hashId) ; 
    166173          scheduled=true ; 
    167174        } 
    168         else if (CXios::isServer || CServer::eventScheduler->queryEvent(currentTimeLine,hashId) )  
     175        else if (CXios::isServer || CServer::eventScheduler->queryEvent(currentTimeLine,hashId) ) 
    169176        { 
    170177         CTimer::get("Process events").resume() ; 
  • XIOS/trunk/src/cxios.cpp

    r506 r509  
    4747  void CXios::initClientSide(const string& codeId, MPI_Comm& localComm, MPI_Comm& returnComm) 
    4848  { 
    49  
    5049    initialize() ; 
    5150 
     
    7473  } 
    7574 
     75  void CXios::initServer() 
     76  { 
     77    set_new_handler(noMemory); 
     78    std::set<StdString> parseList; 
     79    parseList.insert("xios"); 
     80    xml::CXMLParser::ParseFile(rootFile, parseList); 
     81//    parseFile(rootFile); 
     82    usingOasis=getin<bool>("using_oasis",false) ; 
     83    info.setLevel(getin<int>("info_level",0)) ; 
     84    printInfo2File=getin<bool>("print_file",false); 
     85    bufferSize=getin<size_t>("buffer_size",defaultBufferSize) ; 
     86    bufferServerFactorSize=getin<double>("buffer_server_factor_size",defaultBufferServerFactorSize) ; 
     87    globalComm=MPI_COMM_WORLD ; 
     88 
     89  } 
    7690 
    7791  void CXios::initServerSide(void) 
    7892  { 
    79     initialize(); 
    80  
     93//    initialize(); 
     94    initServer(); 
    8195    isClient=true; 
    8296    isServer=false ; 
  • XIOS/trunk/src/cxios.hpp

    r501 r509  
    5353     static bool isServerSide; 
    5454 
     55     static  void initServer(); 
     56 
    5557  } ; 
    5658 
  • XIOS/trunk/src/generate_interface_impl.hpp

    r501 r509  
    1010 
    1111namespace xios 
    12 {  
     12{ 
    1313  template<> string CInterface::getStrFortranType<int>(void) {return string("INTEGER") ;} 
    1414  template<> string CInterface::getStrFortranType<bool>(void) {return string("LOGICAL") ;} 
    1515  template<> string CInterface::getStrFortranType<double>(void) {return string("REAL") ;} 
    1616  template<> string CInterface::getStrFortranType<float>(void) {return string("REAL") ;} 
    17    
     17 
    1818  template<> string CInterface::getStrFortranKind<int>(void) {return string("") ;} 
    1919  template<> string CInterface::getStrFortranKind<bool>(void) {return string("") ;} 
    2020  template<> string CInterface::getStrFortranKind<double>(void) {return string("(KIND=8)") ;} 
    2121  template<> string CInterface::getStrFortranKind<float>(void) {return string("(KIND=4)") ;} 
    22    
     22 
    2323  template<> string CInterface::getStrFortranKindC<int>(void) {return string("(KIND=C_INT)") ;} 
    2424  template<> string CInterface::getStrFortranKindC<bool>(void) {return string("(KIND=C_BOOL)") ;} 
    2525  template<> string CInterface::getStrFortranKindC<double>(void) {return string("(KIND=C_DOUBLE)") ;} 
    2626  template<> string CInterface::getStrFortranKindC<float>(void) {return string("(KIND=C_FLOAT)") ;} 
    27    
    28   template<> bool CInterface::matchingTypeCFortran<int>(void) { return true ; }  
    29   template<> bool CInterface::matchingTypeCFortran<bool>(void) { return false ;}  
     27 
     28  template<> bool CInterface::matchingTypeCFortran<int>(void) { return true ; } 
     29  template<> bool CInterface::matchingTypeCFortran<bool>(void) { return false ;} 
    3030  template<> bool CInterface::matchingTypeCFortran<double>(void) { return true; } 
    3131  template<> bool CInterface::matchingTypeCFortran<float>(void) { return true; } 
    32    
     32 
    3333 
    3434// ///////////////////////////////////////////////// 
     
    3636// ///////////////////////////////////////////////// 
    3737 
    38    
     38 
    3939  void CInterface::AttributeIsDefinedCInterface(ostream& oss, const string& className,const string& name) 
    4040  { 
     
    4747    oss<<iendl ; 
    4848  } 
    49    
     49 
    5050  template <class T> 
    5151  void CInterface::AttributeCInterface(ostream& oss, const string& className,const string& name) 
    5252  { 
    5353    string typeName=getStrType<T>() ; 
    54   
     54 
    5555    oss<<"void cxios_set_"<<className<<"_"<<name<<"("<<className<<"_Ptr "<<className<<"_hdl, "<< typeName<<" "<<name<<")"<<iendl ; 
    5656    oss<<"{"<<iendl ; 
    5757    oss<<"   CTimer::get(\"XIOS\").resume();"<<iendl ; 
    5858    oss<<"  "<<className<<"_hdl->"<<name<<".setValue("<<name<<");"<<iendl ; 
    59     oss<<"  "<<className<<"_hdl->sendAttributToServer("<<className<<"_hdl->"<<name<<");"<<iendl ; 
     59//    oss<<"  "<<className<<"_hdl->sendAttributToServer("<<className<<"_hdl->"<<name<<");"<<iendl ; 
    6060    oss<<"   CTimer::get(\"XIOS\").suspend();"<<iendl ; 
    6161    oss<<"}"<<iendl ; 
    62      
     62 
    6363    oss<<iendl ; 
    6464    oss<<"void cxios_get_"<<className<<"_"<<name<<"("<<className<<"_Ptr "<<className<<"_hdl, "<< typeName<<"* "<<name<<")"<<iendl ; 
     
    6868    oss<<iendl ; 
    6969  } 
    70      
    71    
     70 
     71 
    7272  template<> 
    73   void CInterface::AttributeCInterface<string>(ostream& oss, const string& className,const string& name)   
     73  void CInterface::AttributeCInterface<string>(ostream& oss, const string& className,const string& name) 
    7474  { 
    7575    oss<<"void cxios_set_"<<className<<"_"<<name<<"("<<className<<"_Ptr "<<className<<"_hdl, const char * "<<name<<", int "<<name<<"_size)"<<iendl ; 
     
    7979    oss<<"   CTimer::get(\"XIOS\").resume();"<<iendl ; 
    8080    oss<<"  "<<className<<"_hdl->"<<name<<".setValue("<<name<<"_str);"<<iendl ; 
    81     oss<<"  "<<className<<"_hdl->sendAttributToServer("<<className<<"_hdl->"<<name<<");"<<iendl ; 
     81//    oss<<"  "<<className<<"_hdl->sendAttributToServer("<<className<<"_hdl->"<<name<<");"<<iendl ; 
    8282    oss<<"   CTimer::get(\"XIOS\").suspend();"<<iendl ; 
    8383    oss<<"}"<<iendl ; 
    84      
     84 
    8585    oss<<iendl ; 
    86      
     86 
    8787    oss<<"void cxios_get_"<<className<<"_"<<name<<"("<<className<<"_Ptr "<<className<<"_hdl, char * "<<name<<", int "<<name<<"_size)"<<iendl ; 
    8888    oss<<"{"<<iendl ; 
     
    9494    oss<<"}"<<iendl ; 
    9595    oss<<iendl ; 
    96     
     96 
    9797  } 
    9898 
    9999  template<> 
    100   void CInterface::AttributeCInterface<CEnumBase>(ostream& oss, const string& className,const string& name)   
     100  void CInterface::AttributeCInterface<CEnumBase>(ostream& oss, const string& className,const string& name) 
    101101  { 
    102102    oss<<"void cxios_set_"<<className<<"_"<<name<<"("<<className<<"_Ptr "<<className<<"_hdl, const char * "<<name<<", int "<<name<<"_size)"<<iendl ; 
     
    106106    oss<<"   CTimer::get(\"XIOS\").resume();"<<iendl ; 
    107107    oss<<"  "<<className<<"_hdl->"<<name<<".fromString("<<name<<"_str);"<<iendl ; 
    108     oss<<"  "<<className<<"_hdl->sendAttributToServer("<<className<<"_hdl->"<<name<<");"<<iendl ; 
     108//    oss<<"  "<<className<<"_hdl->sendAttributToServer("<<className<<"_hdl->"<<name<<");"<<iendl ; 
    109109    oss<<"   CTimer::get(\"XIOS\").suspend();"<<iendl ; 
    110110    oss<<"}"<<iendl ; 
    111      
     111 
    112112    oss<<iendl ; 
    113      
     113 
    114114    oss<<"void cxios_get_"<<className<<"_"<<name<<"("<<className<<"_Ptr "<<className<<"_hdl, char * "<<name<<", int "<<name<<"_size)"<<iendl ; 
    115115    oss<<"{"<<iendl ; 
     
    121121    oss<<"}"<<iendl ; 
    122122    oss<<iendl ; 
    123    
     123 
    124124  } 
    125125//     if (!array_copy(domain_hdl->mask.getValue(), mask, extent1, extent2)) 
     
    139139    oss<<"  std::copy("<<name<<", &("<<name<<"[array_tmp->num_elements()]), array_tmp->data());"<<iendl ;\ 
    140140    oss<<"  "<<className<<"_hdl->"<<name<<".setValue(array_tmp);"<<iendl ;\ 
    141     oss<<"  "<<className<<"_hdl->sendAttributToServer("<<className<<"_hdl->"<<name<<");"<<iendl ;\ 
     141//    oss<<"  "<<className<<"_hdl->sendAttributToServer("<<className<<"_hdl->"<<name<<");"<<iendl ;\ 
    142142    oss<<"}"<<iendl ;\ 
    143143    oss<<iendl; \ 
     
    162162    oss<<"  std::copy("<<name<<", &("<<name<<"[array_tmp->num_elements()]), array_tmp->data());"<<iendl ;\ 
    163163    oss<<"  "<<className<<"_hdl->"<<name<<".setValue(array_tmp);"<<iendl ;\ 
    164     oss<<"  "<<className<<"_hdl->sendAttributToServer("<<className<<"_hdl->"<<name<<");"<<iendl ;\ 
     164//    oss<<"  "<<className<<"_hdl->sendAttributToServer("<<className<<"_hdl->"<<name<<");"<<iendl ;\ 
    165165    oss<<"}"<<iendl ;\ 
    166166    oss<<iendl; \ 
     
    185185    oss<<"  std::copy("<<name<<", &("<<name<<"[array_tmp->num_elements()]), array_tmp->data());"<<iendl ;\ 
    186186    oss<<"  "<<className<<"_hdl->"<<name<<".setValue(array_tmp);"<<iendl ;\ 
    187     oss<<"  "<<className<<"_hdl->sendAttributToServer("<<className<<"_hdl->"<<name<<");"<<iendl ;\ 
     187//    oss<<"  "<<className<<"_hdl->sendAttributToServer("<<className<<"_hdl->"<<name<<");"<<iendl ;\ 
    188188    oss<<"}"<<iendl ;\ 
    189189    oss<<iendl; \ 
     
    202202*/ 
    203203 
    204 #undef macro   
     204#undef macro 
    205205 
    206206// ///////////////////////////////////////////////// 
     
    213213     oss<<"  LOGICAL(kind=C_BOOL) :: cxios_is_defined_"<<className<<"_"<<name<<iendl; 
    214214     oss<<"  INTEGER (kind = C_INTPTR_T), VALUE :: "<<className<<"_hdl"<<iendl ; 
    215      oss<<"END FUNCTION cxios_is_defined_"<<className<<"_"<<name<<iendl ;    
    216    } 
    217     
     215     oss<<"END FUNCTION cxios_is_defined_"<<className<<"_"<<name<<iendl ; 
     216   } 
     217 
    218218   template <class T> 
    219219   void CInterface::AttributeFortran2003Interface(ostream& oss,const string& className,const string& name) 
     
    221221     string fortranType=getStrFortranType<T>() ; 
    222222     string fortranKindC=getStrFortranKindC<T>() ; 
    223       
     223 
    224224     oss<<"SUBROUTINE cxios_set_"<<className<<"_"<<name<<"("<<className<<"_hdl, "<<name<<") BIND(C)"<<iendl ; 
    225225     oss<<"  USE ISO_C_BINDING"<<iendl ; 
     
    227227     oss<<"  "<<fortranType<<" "<<fortranKindC<<"      , VALUE :: "<<name<<iendl ; 
    228228     oss<<"END SUBROUTINE cxios_set_"<<className<<"_"<<name<<iendl ; 
    229      oss<<iendl ;  
     229     oss<<iendl ; 
    230230     oss<<"SUBROUTINE cxios_get_"<<className<<"_"<<name<<"("<<className<<"_hdl, "<<name<<") BIND(C)"<<iendl ; 
    231231     oss<<"  USE ISO_C_BINDING"<<iendl ; 
     
    235235     oss<<iendl ; 
    236236   } 
    237     
    238     
     237 
     238 
    239239   template <> 
    240240   void CInterface::AttributeFortran2003Interface<string>(ostream& oss,const string& className,const string& name) 
    241241   { 
    242            
     242 
    243243     oss<<"SUBROUTINE cxios_set_"<<className<<"_"<<name<<"("<<className<<"_hdl, "<<name<<", "<<name<<"_size) BIND(C)"<<iendl ; 
    244244     oss<<"  USE ISO_C_BINDING"<<iendl ; 
     
    247247     oss<<"  INTEGER  (kind = C_INT)     , VALUE        :: "<<name<<"_size"<<iendl ; 
    248248     oss<<"END SUBROUTINE cxios_set_"<<className<<"_"<<name<<iendl ; 
    249      oss<<iendl ;  
     249     oss<<iendl ; 
    250250     oss<<"SUBROUTINE cxios_get_"<<className<<"_"<<name<<"("<<className<<"_hdl, "<<name<<", "<<name<<"_size) BIND(C)"<<iendl ; 
    251251     oss<<"  USE ISO_C_BINDING"<<iendl ; 
     
    327327     oss<<"END SUBROUTINE cxios_get_"<<className<<"_"<<name<<iendl ; \ 
    328328   } 
    329    
     329 
    330330  macro(bool) 
    331331  macro(double) 
     
    333333 
    334334  #undef macro 
    335 */   
     335*/ 
    336336   template <class T> 
    337337   void CInterface::AttributeFortranInterfaceDeclaration(ostream& oss,const string& className,const string& name) 
     
    347347     if (!matchingTypeCFortran<T>()) oss<<getStrFortranType<T>()<<" "<<getStrFortranKindC<T>()<<" :: "<<name<<"_tmp"<<iendl ; 
    348348   } 
    349     
     349 
    350350   void CInterface::AttributeFortranInterfaceIsDefinedDeclaration(ostream& oss,const string& className,const string& name) 
    351351   { 
     
    353353     oss<<"LOGICAL(KIND=C_BOOL) :: "<<name<<"_tmp"<<iendl ; 
    354354   } 
    355      
     355 
    356356   template <> 
    357357   void CInterface::AttributeFortranInterfaceDeclaration<string>(ostream& oss,const string& className,const string& name) 
     
    359359     oss<<"CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: "<<name<<iendl ; 
    360360   } 
    361     
     361 
    362362   template <> 
    363363   void CInterface::AttributeFortranInterfaceGetDeclaration<string>(ostream& oss,const string& className,const string& name) 
     
    407407     oss<<getStrFortranType<T>()<<" "<<getStrFortranKind<T>() <<" , OPTIONAL, INTENT(OUT) :: "<<name<<"(:,:,:)"<<iendl ; \ 
    408408     if (!matchingTypeCFortran<T>()) oss<<getStrFortranType<T>()<<" "<<getStrFortranKindC<T>() <<" , ALLOCATABLE :: "<<name<<"_tmp(:,:,:)"<<iendl ; \ 
    409    }      
    410     
     409   } 
     410 
    411411  macro(bool) 
    412412  macro(double) 
     
    415415#undef macro 
    416416*/ 
    417     
     417 
    418418   template <class T> 
    419419   void CInterface::AttributeFortranInterfaceBody(ostream& oss,const string& className,const string& name) 
    420420   { 
    421421     string name_tmp=name+"__tmp" ; 
    422       
     422 
    423423     oss<<"IF (PRESENT("<<name<<"_)) THEN"<<iendl ; 
    424      if (!matchingTypeCFortran<T>())  
     424     if (!matchingTypeCFortran<T>()) 
    425425     { 
    426426       oss<<"  "<<name_tmp<<"="<<name<<"_"<<iendl ; 
     
    430430     oss<<"ENDIF"<<iendl ; 
    431431   } 
    432     
     432 
    433433   template <class T> 
    434434   void CInterface::AttributeFortranInterfaceGetBody(ostream& oss,const string& className,const string& name) 
    435435   { 
    436436     string name_tmp=name+"__tmp" ; 
    437       
     437 
    438438     oss<<"IF (PRESENT("<<name<<"_)) THEN"<<iendl ; 
    439      if (!matchingTypeCFortran<T>())  
     439     if (!matchingTypeCFortran<T>()) 
    440440     { 
    441441       oss<<"  CALL cxios_get_"<<className<<"_"<<name<<"("<<className<<"_hdl%daddr, "<<name_tmp<<")"<<iendl ; 
     
    449449   { 
    450450     string name_tmp=name+"__tmp" ; 
    451       
     451 
    452452     oss<<"IF (PRESENT("<<name<<"_)) THEN"<<iendl ; 
    453453     oss<<"  "<<name<<"__tmp=cxios_is_defined_"<<className<<"_"<<name<<"("<<className<<"_hdl%daddr)"<<iendl ; 
     
    455455     oss<<"ENDIF"<<iendl ; 
    456456   } 
    457       
     457 
    458458   template <> 
    459459   void CInterface::AttributeFortranInterfaceBody<string>(ostream& oss,const string& className,const string& name) 
     
    521521     oss<<"ENDIF"<<iendl ; \ 
    522522   } 
    523    
     523 
    524524  macro(bool) 
    525525  macro(double) 
     
    578578     oss<<"ENDIF"<<iendl ; \ 
    579579   } 
    580       
     580 
    581581  macro(bool) 
    582582  macro(double) 
     
    602602    oss<<"  CArray<"<<typeName<<",1> tmp("<<name<<",shape(extent1),neverDeleteData) ;"<<iendl ;\ 
    603603    oss<<"  "<<className<<"_hdl->"<<name<<".reference(tmp.copy());"<<iendl ;\ 
    604     oss<<"  "<<className<<"_hdl->sendAttributToServer("<<className<<"_hdl->"<<name<<");"<<iendl ;\ 
     604/*    oss<<"  "<<className<<"_hdl->sendAttributToServer("<<className<<"_hdl->"<<name<<");"<<iendl ;*/\ 
    605605    oss<<"   CTimer::get(\"XIOS\").suspend();"<<iendl ;\ 
    606606    oss<<"}"<<iendl ;\ 
     
    626626    oss<<"  CArray<"<<typeName<<",2> tmp("<<name<<",shape(extent1,extent2),neverDeleteData) ;"<<iendl ;\ 
    627627    oss<<"  "<<className<<"_hdl->"<<name<<".reference(tmp.copy());"<<iendl ;\ 
    628     oss<<"  "<<className<<"_hdl->sendAttributToServer("<<className<<"_hdl->"<<name<<");"<<iendl ;\ 
     628    /*oss<<"  "<<className<<"_hdl->sendAttributToServer("<<className<<"_hdl->"<<name<<");"<<iendl ;*/\ 
    629629    oss<<"   CTimer::get(\"XIOS\").suspend();"<<iendl ;\ 
    630630    oss<<"}"<<iendl ;\ 
     
    650650    oss<<"  CArray<"<<typeName<<",3> tmp("<<name<<",shape(extent1,extent2,extent3),neverDeleteData) ;"<<iendl ;\ 
    651651    oss<<"  "<<className<<"_hdl->"<<name<<".reference(tmp.copy());"<<iendl ;\ 
    652     oss<<"  "<<className<<"_hdl->sendAttributToServer("<<className<<"_hdl->"<<name<<");"<<iendl ;\ 
     652    /*oss<<"  "<<className<<"_hdl->sendAttributToServer("<<className<<"_hdl->"<<name<<");"<<iendl ;*/\ 
    653653    oss<<"   CTimer::get(\"XIOS\").suspend();"<<iendl ;\ 
    654654    oss<<"}"<<iendl ;\ 
     
    668668macro(int) 
    669669 
    670 #undef macro   
     670#undef macro 
    671671 
    672672// ///////////////////////////////////////////////// 
     
    675675 
    676676 
    677      
     677 
    678678#define macro(T)\ 
    679679   template <>\ 
     
    748748     oss<<iendl ;\ 
    749749   } 
    750    
     750 
    751751  macro(bool) 
    752752  macro(double) 
    753753  macro(int) 
    754    
     754 
    755755  #undef macro 
    756    
     756 
    757757 
    758758#define macro(T)\ 
     
    796796     oss<<getStrFortranType<T>()<<" "<<getStrFortranKind<T>() <<" , OPTIONAL, INTENT(OUT) :: "<<name<<"(:,:,:)"<<iendl ; \ 
    797797     if (!matchingTypeCFortran<T>()) oss<<getStrFortranType<T>()<<" "<<getStrFortranKindC<T>() <<" , ALLOCATABLE :: "<<name<<"_tmp(:,:,:)"<<iendl ; \ 
    798    }      
    799     
     798   } 
     799 
    800800  macro(bool) 
    801801  macro(double) 
     
    804804#undef macro 
    805805 
    806     
     806 
    807807 
    808808#define macro(T) \ 
     
    854854     oss<<"ENDIF"<<iendl ; \ 
    855855   } 
    856    
     856 
    857857  macro(bool) 
    858858  macro(double) 
     
    909909     oss<<"ENDIF"<<iendl ; \ 
    910910   } 
    911       
     911 
    912912  macro(bool) 
    913913  macro(double) 
  • XIOS/trunk/src/interface/c/icdata.cpp

    r501 r509  
    9292     CTimer::get("XIOS close definition").resume() ; 
    9393     CContext* context = CContext::getCurrent() ; 
     94//     context->setClientServerBuffer(); 
    9495     context->closeDefinition() ; 
    9596     CTimer::get("XIOS close definition").suspend() ; 
     
    257258      { 
    258259        CVariable::get(context->getId(),varIdStr)->setData<double>(data); 
    259         CVariable::get(context->getId(),varIdStr)->sendValue(); 
     260        //CVariable::get(context->getId(),varIdStr)->sendValue(); 
    260261      } 
    261262 
     
    278279      { 
    279280        CVariable::get(context->getId(),varIdStr)->setData<float>(data); 
    280         CVariable::get(context->getId(),varIdStr)->sendValue(); 
     281        //CVariable::get(context->getId(),varIdStr)->sendValue(); 
    281282      } 
    282283 
     
    299300      { 
    300301        CVariable::get(context->getId(),varIdStr)->setData<int>(data); 
    301         CVariable::get(context->getId(),varIdStr)->sendValue(); 
     302        //CVariable::get(context->getId(),varIdStr)->sendValue(); 
    302303      } 
    303304 
     
    321322      { 
    322323        CVariable::get(context->getId(),varIdStr)->setData<bool>(data); 
    323         CVariable::get(context->getId(),varIdStr)->sendValue(); 
     324        //CVariable::get(context->getId(),varIdStr)->sendValue(); 
    324325      } 
    325326 
     
    347348      { 
    348349        CVariable::get(context->getId(),varIdStr)->setData<string>(dataStr); 
    349         CVariable::get(context->getId(),varIdStr)->sendValue(); 
     350        //CVariable::get(context->getId(),varIdStr)->sendValue(); 
    350351      } 
    351352 
  • XIOS/trunk/src/interface/c/icdate.cpp

    r501 r509  
    3131         CDuration dur = {ts_year, ts_month, ts_day, ts_hour, ts_minute, ts_second, 0}; 
    3232         xios::CContext* context = CContext::getCurrent() ; 
    33           
    34             context->timestep.setValue(dur.toString()); 
    35             context->sendAttributToServer("timestep") ; 
    36           CTimer::get("XIOS").suspend() ; 
     33         context->timestep.setValue(dur.toString()); 
     34         CTimer::get("XIOS").suspend() ; 
    3735      } 
    3836      catch (xios::CException & exc) 
     
    4240      } 
    4341   } 
    44     
     42 
    4543   void cxios_update_calendar(int step) 
    4644   { 
     
    5149      context->sendUpdateCalendar(step) ; 
    5250      CTimer::get("XIOS").suspend() ; 
    53        
    5451   } 
    5552 
  • XIOS/trunk/src/interface/c/icxml_tree.cpp

    r501 r509  
    4444   typedef xios::CAxis      * XAxisPtr; 
    4545   typedef xios::CAxisGroup * XAxisGroupPtr; 
    46   
     46 
    4747   typedef xios::CVariable      *  XVariablePtr; 
    4848   typedef xios::CVariableGroup *  XVariableGroupPtr; 
    49    
     49 
    5050   // ----------------------- Ajout d'enfant à un parent ----------------------- 
    51     
     51 
    5252   void cxios_xml_tree_add_field 
    5353      (XFieldGroupPtr  parent_, XFieldPtr * child_, const char * child_id, int child_id_size) 
    5454   { 
    55       std::string child_id_str;  
    56       CTimer::get("XIOS").resume() ; 
    57       if (cstr2string(child_id, child_id_size, child_id_str)) 
    58       { 
    59          *child_ = parent_->createChild(child_id_str) ; 
    60          parent_->sendCreateChild(child_id_str) ; 
    61       } 
    62       else 
    63       { 
    64          *child_ = parent_->createChild() ; 
    65          parent_->sendCreateChild() ; 
     55      std::string child_id_str; 
     56      CTimer::get("XIOS").resume() ; 
     57      if (cstr2string(child_id, child_id_size, child_id_str)) 
     58      { 
     59         *child_ = parent_->createChild(child_id_str) ; 
     60      } 
     61      else 
     62      { 
     63         *child_ = parent_->createChild() ; 
    6664      } 
    6765      CTimer::get("XIOS").suspend() ; 
    6866  } 
    69     
     67 
    7068   void cxios_xml_tree_add_grid 
    7169      (XGridGroupPtr   parent_, XGridPtr * child_, const char * child_id, int child_id_size) 
    7270   { 
    73       std::string child_id_str;  
    74       CTimer::get("XIOS").resume() ; 
    75       if (cstr2string(child_id, child_id_size, child_id_str)) 
    76       { 
    77          *child_ = parent_->createChild(child_id_str) ; 
    78          parent_->sendCreateChild(child_id_str) ; 
    79       } 
    80       else 
    81       { 
    82          *child_ = parent_->createChild() ; 
    83          parent_->sendCreateChild() ; 
    84       } 
    85       CTimer::get("XIOS").suspend() ; 
    86    } 
    87     
     71      std::string child_id_str; 
     72      CTimer::get("XIOS").resume() ; 
     73      if (cstr2string(child_id, child_id_size, child_id_str)) 
     74      { 
     75         *child_ = parent_->createChild(child_id_str) ; 
     76      } 
     77      else 
     78      { 
     79         *child_ = parent_->createChild() ; 
     80      } 
     81      CTimer::get("XIOS").suspend() ; 
     82   } 
     83 
    8884   void cxios_xml_tree_add_file 
    8985      (XFileGroupPtr parent_, XFilePtr * child_, const char * child_id, int child_id_size) 
    9086   { 
    91       std::string child_id_str;  
    92       CTimer::get("XIOS").resume() ; 
    93       if (cstr2string(child_id, child_id_size, child_id_str)) 
    94       { 
    95          *child_ = parent_->createChild(child_id_str) ; 
    96          parent_->sendCreateChild(child_id_str) ; 
    97       } 
    98       else 
    99       { 
    100          *child_ = parent_->createChild() ; 
    101          parent_->sendCreateChild() ; 
    102       } 
    103       CTimer::get("XIOS").suspend() ; 
    104    } 
    105     
     87      std::string child_id_str; 
     88      CTimer::get("XIOS").resume() ; 
     89      if (cstr2string(child_id, child_id_size, child_id_str)) 
     90      { 
     91         *child_ = parent_->createChild(child_id_str) ; 
     92      } 
     93      else 
     94      { 
     95         *child_ = parent_->createChild() ; 
     96      } 
     97      CTimer::get("XIOS").suspend() ; 
     98   } 
     99 
    106100   void cxios_xml_tree_add_axis 
    107101      (XAxisGroupPtr parent_, XAxisPtr * child_, const char * child_id, int child_id_size) 
    108102   { 
    109       std::string child_id_str;  
    110       CTimer::get("XIOS").resume() ; 
    111       if (cstr2string(child_id, child_id_size, child_id_str)) 
    112       { 
    113          *child_ = parent_->createChild(child_id_str) ; 
    114          parent_->sendCreateChild(child_id_str) ; 
    115       } 
    116       else 
    117       { 
    118          *child_ = parent_->createChild() ; 
    119          parent_->sendCreateChild() ; 
    120       } 
    121       CTimer::get("XIOS").suspend() ; 
    122    } 
    123     
     103      std::string child_id_str; 
     104      CTimer::get("XIOS").resume() ; 
     105      if (cstr2string(child_id, child_id_size, child_id_str)) 
     106      { 
     107         *child_ = parent_->createChild(child_id_str) ; 
     108      } 
     109      else 
     110      { 
     111         *child_ = parent_->createChild() ; 
     112      } 
     113      CTimer::get("XIOS").suspend() ; 
     114   } 
     115 
    124116   void cxios_xml_tree_add_domain 
    125117      (XDomainGroupPtr parent_, XDomainPtr * child_, const char * child_id, int child_id_size) 
     
    130122      { 
    131123         *child_ = parent_->createChild(child_id_str) ; 
    132          parent_->sendCreateChild(child_id_str) ; 
    133       } 
    134       else 
    135       { 
    136          *child_ = parent_->createChild() ; 
    137          parent_->sendCreateChild() ; 
    138       } 
    139       CTimer::get("XIOS").suspend() ; 
    140    } 
    141     
     124      } 
     125      else 
     126      { 
     127         *child_ = parent_->createChild() ; 
     128      } 
     129      CTimer::get("XIOS").suspend() ; 
     130   } 
     131 
    142132   void cxios_xml_tree_add_fieldtofile 
    143133      (XFilePtr parent_, XFieldPtr * child_, const char * child_id, int child_id_size) 
     
    145135      std::string child_id_str; 
    146136      CTimer::get("XIOS").resume() ; 
    147   
     137 
    148138      if (cstr2string(child_id, child_id_size, child_id_str)) 
    149139      { 
    150140         *child_ = parent_->addField(child_id_str); 
    151          parent_->sendAddField(child_id_str) ; 
    152141      } 
    153142      else 
    154143      { 
    155144         *child_ = parent_->addField(); 
    156          parent_->sendAddField() ; 
    157145      } 
    158146      CTimer::get("XIOS").suspend() ; 
     
    164152      std::string child_id_str; 
    165153      CTimer::get("XIOS").resume() ; 
    166   
     154 
    167155      if (cstr2string(child_id, child_id_size, child_id_str)) 
    168156      { 
    169157         *child_ = parent_->addVariable(child_id_str); 
    170          parent_->sendAddVariable(child_id_str) ; 
    171158      } 
    172159      else 
    173160      { 
    174161         *child_ = parent_->addVariable(); 
    175          parent_->sendAddVariable() ; 
    176       } 
    177       CTimer::get("XIOS").suspend() ; 
    178    } 
    179     
     162      } 
     163      CTimer::get("XIOS").suspend() ; 
     164   } 
     165 
    180166    void cxios_xml_tree_add_variabletofield 
    181167      (XFieldPtr parent_, XVariablePtr * child_, const char * child_id, int child_id_size) 
     
    183169      std::string child_id_str; 
    184170      CTimer::get("XIOS").resume() ; 
    185   
     171 
    186172      if (cstr2string(child_id, child_id_size, child_id_str)) 
    187173      { 
    188174         *child_ = parent_->addVariable(child_id_str); 
    189          parent_->sendAddVariable(child_id_str) ; 
    190175      } 
    191176      else 
    192177      { 
    193178         *child_ = parent_->addVariable(); 
    194          parent_->sendAddVariable() ; 
    195       } 
    196       CTimer::get("XIOS").suspend() ; 
    197    }   
     179      } 
     180      CTimer::get("XIOS").suspend() ; 
     181   } 
    198182   // ----------------------- Ajout de groupe à un parent ---------------------- 
    199183 
     
    201185      (XFieldGroupPtr  parent_, XFieldGroupPtr * child_, const char * child_id, int child_id_size) 
    202186   { 
    203      std::string child_id_str;  
    204       CTimer::get("XIOS").resume() ; 
    205       if (cstr2string(child_id, child_id_size, child_id_str)) 
    206       { 
    207          *child_ = parent_->createChildGroup(child_id_str) ; 
    208          parent_->sendCreateChildGroup(child_id_str) ; 
    209       } 
    210       else 
    211       { 
    212          *child_ = parent_->createChildGroup() ; 
    213          parent_->sendCreateChildGroup(child_id_str) ; 
     187     std::string child_id_str; 
     188      CTimer::get("XIOS").resume() ; 
     189      if (cstr2string(child_id, child_id_size, child_id_str)) 
     190      { 
     191         *child_ = parent_->createChildGroup(child_id_str) ; 
     192      } 
     193      else 
     194      { 
     195         *child_ = parent_->createChildGroup() ; 
    214196      } 
    215197      CTimer::get("XIOS").suspend() ; 
     
    224206      { 
    225207         *child_ = parent_->createChildGroup(child_id_str) ; 
    226          parent_->sendCreateChildGroup(child_id_str) ; 
    227       } 
    228       else 
    229       { 
    230          *child_ = parent_->createChildGroup() ; 
    231          parent_->sendCreateChildGroup(child_id_str) ; 
     208      } 
     209      else 
     210      { 
     211         *child_ = parent_->createChildGroup() ; 
    232212      } 
    233213      CTimer::get("XIOS").suspend() ; 
     
    242222      { 
    243223         *child_ = parent_->createChildGroup(child_id_str) ; 
    244          parent_->sendCreateChildGroup(child_id_str) ; 
    245       } 
    246       else 
    247       { 
    248          *child_ = parent_->createChildGroup() ; 
    249          parent_->sendCreateChildGroup(child_id_str) ; 
     224      } 
     225      else 
     226      { 
     227         *child_ = parent_->createChildGroup() ; 
    250228      } 
    251229      CTimer::get("XIOS").suspend() ; 
     
    260238      { 
    261239         *child_ = parent_->createChildGroup(child_id_str) ; 
    262          parent_->sendCreateChildGroup(child_id_str) ; 
    263       } 
    264       else 
    265       { 
    266          *child_ = parent_->createChildGroup() ; 
    267          parent_->sendCreateChildGroup(child_id_str) ; 
     240      } 
     241      else 
     242      { 
     243         *child_ = parent_->createChildGroup() ; 
    268244      } 
    269245      CTimer::get("XIOS").suspend() ; 
     
    278254      { 
    279255         *child_ = parent_->createChildGroup(child_id_str) ; 
    280          parent_->sendCreateChildGroup(child_id_str) ; 
    281       } 
    282       else 
    283       { 
    284          *child_ = parent_->createChildGroup() ; 
    285          parent_->sendCreateChildGroup(child_id_str) ; 
     256      } 
     257      else 
     258      { 
     259         *child_ = parent_->createChildGroup() ; 
    286260      } 
    287261      CTimer::get("XIOS").suspend() ; 
     
    291265      (XFilePtr parent_, XFieldGroupPtr * child_, const char * child_id, int child_id_size) 
    292266   { 
    293       std::string child_id_str;  
     267      std::string child_id_str; 
    294268      CTimer::get("XIOS").resume() ; 
    295269      if (cstr2string(child_id, child_id_size, child_id_str)) 
    296270      { 
    297271         *child_ = parent_->addFieldGroup(child_id_str); 
    298          parent_->sendAddFieldGroup(child_id_str) ; 
    299272      } 
    300273      else 
    301274      { 
    302275         *child_ = parent_->addFieldGroup(); 
    303          parent_->sendAddFieldGroup() ; 
    304       } 
    305       CTimer::get("XIOS").suspend() ; 
    306    } 
    307     
     276      } 
     277      CTimer::get("XIOS").suspend() ; 
     278   } 
     279 
    308280   void cxios_xml_tree_add_variablegrouptofile 
    309281      (XFilePtr parent_, XVariableGroupPtr * child_, const char * child_id, int child_id_size) 
    310282   { 
    311       std::string child_id_str;  
     283      std::string child_id_str; 
    312284      CTimer::get("XIOS").resume() ; 
    313285      if (cstr2string(child_id, child_id_size, child_id_str)) 
    314286      { 
    315287         *child_ = parent_->addVariableGroup(child_id_str); 
    316          parent_->sendAddVariableGroup(child_id_str) ; 
    317288      } 
    318289      else 
    319290      { 
    320291         *child_ = parent_->addVariableGroup(); 
    321          parent_->sendAddVariableGroup() ; 
    322       } 
    323       CTimer::get("XIOS").suspend() ; 
    324    } 
    325     
     292      } 
     293      CTimer::get("XIOS").suspend() ; 
     294   } 
     295 
    326296   void cxios_xml_tree_add_variablegrouptofield 
    327297      (XFieldPtr parent_, XVariableGroupPtr * child_, const char * child_id, int child_id_size) 
    328298   { 
    329       std::string child_id_str;  
     299      std::string child_id_str; 
    330300      CTimer::get("XIOS").resume() ; 
    331301      if (cstr2string(child_id, child_id_size, child_id_str)) 
    332302      { 
    333303         *child_ = parent_->addVariableGroup(child_id_str); 
    334          parent_->sendAddVariableGroup(child_id_str) ; 
    335304      } 
    336305      else 
    337306      { 
    338307         *child_ = parent_->addVariableGroup(); 
    339          parent_->sendAddVariableGroup() ; 
    340       } 
    341       CTimer::get("XIOS").suspend() ; 
    342    }    
    343     
    344     
     308      } 
     309      CTimer::get("XIOS").suspend() ; 
     310   } 
     311 
     312 
    345313   // ----------------------- Affichage de l'arborescence ---------------------- 
    346     
    347 //   void cxios_xml_tree_show   (const char * filename, int filename_size)  
     314 
     315//   void cxios_xml_tree_show   (const char * filename, int filename_size) 
    348316//   { 
    349317//      std::string filename_str; 
     
    361329//      } 
    362330//  } 
    363       
    364     
     331 
     332 
    365333   // ----------------------- Parsing de document xml -------------------------- 
    366     
     334 
    367335//   void cxios_xml_parse_file  (const char * filename  , int filename_size)// 
    368336//   { 
    369 //      std::string filename_str;  
     337//      std::string filename_str; 
    370338//      if (!cstr2string(filename, filename_size, filename_str)) return; 
    371339// 
     
    380348//      } 
    381349//   } 
    382     
     350 
    383351//   void cxios_xml_parse_string(const char * xmlcontent, int xmlcontent_size) 
    384352//   { 
    385 //      std::string xmlcontent_str;  
     353//      std::string xmlcontent_str; 
    386354//      if (!cstr2string(xmlcontent, xmlcontent_size, xmlcontent_str)) return; 
    387355// 
     
    396364//      } 
    397365//   } 
    398     
     366 
    399367 
    400368 
  • XIOS/trunk/src/interface/c_attr/icaxis_attr.cpp

    r501 r509  
    2323     CTimer::get("XIOS").resume(); 
    2424    axis_hdl->long_name.setValue(long_name_str); 
    25     axis_hdl->sendAttributToServer(axis_hdl->long_name); 
    2625     CTimer::get("XIOS").suspend(); 
    2726  } 
     
    5049     CTimer::get("XIOS").resume(); 
    5150    axis_hdl->name.setValue(name_str); 
    52     axis_hdl->sendAttributToServer(axis_hdl->name); 
    5351     CTimer::get("XIOS").suspend(); 
    5452  } 
     
    7775     CTimer::get("XIOS").resume(); 
    7876    axis_hdl->positive.fromString(positive_str); 
    79     axis_hdl->sendAttributToServer(axis_hdl->positive); 
    8077     CTimer::get("XIOS").suspend(); 
    8178  } 
     
    10299     CTimer::get("XIOS").resume(); 
    103100    axis_hdl->size.setValue(size); 
    104     axis_hdl->sendAttributToServer(axis_hdl->size); 
    105101     CTimer::get("XIOS").suspend(); 
    106102  } 
     
    126122     CTimer::get("XIOS").resume(); 
    127123    axis_hdl->standard_name.setValue(standard_name_str); 
    128     axis_hdl->sendAttributToServer(axis_hdl->standard_name); 
    129124     CTimer::get("XIOS").suspend(); 
    130125  } 
     
    153148     CTimer::get("XIOS").resume(); 
    154149    axis_hdl->unit.setValue(unit_str); 
    155     axis_hdl->sendAttributToServer(axis_hdl->unit); 
    156150     CTimer::get("XIOS").suspend(); 
    157151  } 
     
    179173    CArray<double,1> tmp(value,shape(extent1),neverDeleteData) ; 
    180174    axis_hdl->value.reference(tmp.copy()); 
    181     axis_hdl->sendAttributToServer(axis_hdl->value); 
    182175     CTimer::get("XIOS").suspend(); 
    183176  } 
     
    204197     CTimer::get("XIOS").resume(); 
    205198    axis_hdl->zoom_begin.setValue(zoom_begin); 
    206     axis_hdl->sendAttributToServer(axis_hdl->zoom_begin); 
    207199     CTimer::get("XIOS").suspend(); 
    208200  } 
     
    226218     CTimer::get("XIOS").resume(); 
    227219    axis_hdl->zoom_end.setValue(zoom_end); 
    228     axis_hdl->sendAttributToServer(axis_hdl->zoom_end); 
    229220     CTimer::get("XIOS").suspend(); 
    230221  } 
     
    248239     CTimer::get("XIOS").resume(); 
    249240    axis_hdl->zoom_size.setValue(zoom_size); 
    250     axis_hdl->sendAttributToServer(axis_hdl->zoom_size); 
    251241     CTimer::get("XIOS").suspend(); 
    252242  } 
  • XIOS/trunk/src/interface/c_attr/icaxisgroup_attr.cpp

    r501 r509  
    2323     CTimer::get("XIOS").resume(); 
    2424    axisgroup_hdl->group_ref.setValue(group_ref_str); 
    25     axisgroup_hdl->sendAttributToServer(axisgroup_hdl->group_ref); 
    2625     CTimer::get("XIOS").suspend(); 
    2726  } 
     
    5049     CTimer::get("XIOS").resume(); 
    5150    axisgroup_hdl->long_name.setValue(long_name_str); 
    52     axisgroup_hdl->sendAttributToServer(axisgroup_hdl->long_name); 
    5351     CTimer::get("XIOS").suspend(); 
    5452  } 
     
    7775     CTimer::get("XIOS").resume(); 
    7876    axisgroup_hdl->name.setValue(name_str); 
    79     axisgroup_hdl->sendAttributToServer(axisgroup_hdl->name); 
    8077     CTimer::get("XIOS").suspend(); 
    8178  } 
     
    104101     CTimer::get("XIOS").resume(); 
    105102    axisgroup_hdl->positive.fromString(positive_str); 
    106     axisgroup_hdl->sendAttributToServer(axisgroup_hdl->positive); 
    107103     CTimer::get("XIOS").suspend(); 
    108104  } 
     
    129125     CTimer::get("XIOS").resume(); 
    130126    axisgroup_hdl->size.setValue(size); 
    131     axisgroup_hdl->sendAttributToServer(axisgroup_hdl->size); 
    132127     CTimer::get("XIOS").suspend(); 
    133128  } 
     
    153148     CTimer::get("XIOS").resume(); 
    154149    axisgroup_hdl->standard_name.setValue(standard_name_str); 
    155     axisgroup_hdl->sendAttributToServer(axisgroup_hdl->standard_name); 
    156150     CTimer::get("XIOS").suspend(); 
    157151  } 
     
    180174     CTimer::get("XIOS").resume(); 
    181175    axisgroup_hdl->unit.setValue(unit_str); 
    182     axisgroup_hdl->sendAttributToServer(axisgroup_hdl->unit); 
    183176     CTimer::get("XIOS").suspend(); 
    184177  } 
     
    206199    CArray<double,1> tmp(value,shape(extent1),neverDeleteData) ; 
    207200    axisgroup_hdl->value.reference(tmp.copy()); 
    208     axisgroup_hdl->sendAttributToServer(axisgroup_hdl->value); 
    209201     CTimer::get("XIOS").suspend(); 
    210202  } 
     
    231223     CTimer::get("XIOS").resume(); 
    232224    axisgroup_hdl->zoom_begin.setValue(zoom_begin); 
    233     axisgroup_hdl->sendAttributToServer(axisgroup_hdl->zoom_begin); 
    234225     CTimer::get("XIOS").suspend(); 
    235226  } 
     
    253244     CTimer::get("XIOS").resume(); 
    254245    axisgroup_hdl->zoom_end.setValue(zoom_end); 
    255     axisgroup_hdl->sendAttributToServer(axisgroup_hdl->zoom_end); 
    256246     CTimer::get("XIOS").suspend(); 
    257247  } 
     
    275265     CTimer::get("XIOS").resume(); 
    276266    axisgroup_hdl->zoom_size.setValue(zoom_size); 
    277     axisgroup_hdl->sendAttributToServer(axisgroup_hdl->zoom_size); 
    278267     CTimer::get("XIOS").suspend(); 
    279268  } 
  • XIOS/trunk/src/interface/c_attr/iccontext_attr.cpp

    r501 r509  
    2323     CTimer::get("XIOS").resume(); 
    2424    context_hdl->calendar_type.setValue(calendar_type_str); 
    25     context_hdl->sendAttributToServer(context_hdl->calendar_type); 
    2625     CTimer::get("XIOS").suspend(); 
    2726  } 
     
    5049     CTimer::get("XIOS").resume(); 
    5150    context_hdl->output_dir.setValue(output_dir_str); 
    52     context_hdl->sendAttributToServer(context_hdl->output_dir); 
    5351     CTimer::get("XIOS").suspend(); 
    5452  } 
     
    7775     CTimer::get("XIOS").resume(); 
    7876    context_hdl->start_date.setValue(start_date_str); 
    79     context_hdl->sendAttributToServer(context_hdl->start_date); 
    8077     CTimer::get("XIOS").suspend(); 
    8178  } 
     
    104101     CTimer::get("XIOS").resume(); 
    105102    context_hdl->time_origin.setValue(time_origin_str); 
    106     context_hdl->sendAttributToServer(context_hdl->time_origin); 
    107103     CTimer::get("XIOS").suspend(); 
    108104  } 
     
    131127     CTimer::get("XIOS").resume(); 
    132128    context_hdl->timestep.setValue(timestep_str); 
    133     context_hdl->sendAttributToServer(context_hdl->timestep); 
    134129     CTimer::get("XIOS").suspend(); 
    135130  } 
  • XIOS/trunk/src/interface/c_attr/icdomain_attr.cpp

    r501 r509  
    2222    CArray<double,2> tmp(bounds_lat,shape(extent1,extent2),neverDeleteData) ; 
    2323    domain_hdl->bounds_lat.reference(tmp.copy()); 
    24     domain_hdl->sendAttributToServer(domain_hdl->bounds_lat); 
    2524     CTimer::get("XIOS").suspend(); 
    2625  } 
     
    4847    CArray<double,2> tmp(bounds_lon,shape(extent1,extent2),neverDeleteData) ; 
    4948    domain_hdl->bounds_lon.reference(tmp.copy()); 
    50     domain_hdl->sendAttributToServer(domain_hdl->bounds_lon); 
    5149     CTimer::get("XIOS").suspend(); 
    5250  } 
     
    7371     CTimer::get("XIOS").resume(); 
    7472    domain_hdl->data_dim.setValue(data_dim); 
    75     domain_hdl->sendAttributToServer(domain_hdl->data_dim); 
    7673     CTimer::get("XIOS").suspend(); 
    7774  } 
     
    9693    CArray<int,1> tmp(data_i_index,shape(extent1),neverDeleteData) ; 
    9794    domain_hdl->data_i_index.reference(tmp.copy()); 
    98     domain_hdl->sendAttributToServer(domain_hdl->data_i_index); 
    9995     CTimer::get("XIOS").suspend(); 
    10096  } 
     
    121117     CTimer::get("XIOS").resume(); 
    122118    domain_hdl->data_ibegin.setValue(data_ibegin); 
    123     domain_hdl->sendAttributToServer(domain_hdl->data_ibegin); 
    124119     CTimer::get("XIOS").suspend(); 
    125120  } 
     
    144139    CArray<int,1> tmp(data_j_index,shape(extent1),neverDeleteData) ; 
    145140    domain_hdl->data_j_index.reference(tmp.copy()); 
    146     domain_hdl->sendAttributToServer(domain_hdl->data_j_index); 
    147141     CTimer::get("XIOS").suspend(); 
    148142  } 
     
    169163     CTimer::get("XIOS").resume(); 
    170164    domain_hdl->data_jbegin.setValue(data_jbegin); 
    171     domain_hdl->sendAttributToServer(domain_hdl->data_jbegin); 
    172165     CTimer::get("XIOS").suspend(); 
    173166  } 
     
    191184     CTimer::get("XIOS").resume(); 
    192185    domain_hdl->data_n_index.setValue(data_n_index); 
    193     domain_hdl->sendAttributToServer(domain_hdl->data_n_index); 
    194186     CTimer::get("XIOS").suspend(); 
    195187  } 
     
    213205     CTimer::get("XIOS").resume(); 
    214206    domain_hdl->data_ni.setValue(data_ni); 
    215     domain_hdl->sendAttributToServer(domain_hdl->data_ni); 
    216207     CTimer::get("XIOS").suspend(); 
    217208  } 
     
    235226     CTimer::get("XIOS").resume(); 
    236227    domain_hdl->data_nj.setValue(data_nj); 
    237     domain_hdl->sendAttributToServer(domain_hdl->data_nj); 
    238228     CTimer::get("XIOS").suspend(); 
    239229  } 
     
    259249     CTimer::get("XIOS").resume(); 
    260250    domain_hdl->domain_group_ref.setValue(domain_group_ref_str); 
    261     domain_hdl->sendAttributToServer(domain_hdl->domain_group_ref); 
    262251     CTimer::get("XIOS").suspend(); 
    263252  } 
     
    285274    CArray<int,2> tmp(i_index,shape(extent1,extent2),neverDeleteData) ; 
    286275    domain_hdl->i_index.reference(tmp.copy()); 
    287     domain_hdl->sendAttributToServer(domain_hdl->i_index); 
    288276     CTimer::get("XIOS").suspend(); 
    289277  } 
     
    310298     CTimer::get("XIOS").resume(); 
    311299    domain_hdl->ibegin.setValue(ibegin); 
    312     domain_hdl->sendAttributToServer(domain_hdl->ibegin); 
    313300     CTimer::get("XIOS").suspend(); 
    314301  } 
     
    332319     CTimer::get("XIOS").resume(); 
    333320    domain_hdl->iend.setValue(iend); 
    334     domain_hdl->sendAttributToServer(domain_hdl->iend); 
    335321     CTimer::get("XIOS").suspend(); 
    336322  } 
     
    355341    CArray<int,2> tmp(j_index,shape(extent1,extent2),neverDeleteData) ; 
    356342    domain_hdl->j_index.reference(tmp.copy()); 
    357     domain_hdl->sendAttributToServer(domain_hdl->j_index); 
    358343     CTimer::get("XIOS").suspend(); 
    359344  } 
     
    380365     CTimer::get("XIOS").resume(); 
    381366    domain_hdl->jbegin.setValue(jbegin); 
    382     domain_hdl->sendAttributToServer(domain_hdl->jbegin); 
    383367     CTimer::get("XIOS").suspend(); 
    384368  } 
     
    402386     CTimer::get("XIOS").resume(); 
    403387    domain_hdl->jend.setValue(jend); 
    404     domain_hdl->sendAttributToServer(domain_hdl->jend); 
    405388     CTimer::get("XIOS").suspend(); 
    406389  } 
     
    425408    CArray<double,1> tmp(latvalue,shape(extent1),neverDeleteData) ; 
    426409    domain_hdl->latvalue.reference(tmp.copy()); 
    427     domain_hdl->sendAttributToServer(domain_hdl->latvalue); 
    428410     CTimer::get("XIOS").suspend(); 
    429411  } 
     
    452434     CTimer::get("XIOS").resume(); 
    453435    domain_hdl->long_name.setValue(long_name_str); 
    454     domain_hdl->sendAttributToServer(domain_hdl->long_name); 
    455436     CTimer::get("XIOS").suspend(); 
    456437  } 
     
    478459    CArray<double,1> tmp(lonvalue,shape(extent1),neverDeleteData) ; 
    479460    domain_hdl->lonvalue.reference(tmp.copy()); 
    480     domain_hdl->sendAttributToServer(domain_hdl->lonvalue); 
    481461     CTimer::get("XIOS").suspend(); 
    482462  } 
     
    504484    CArray<bool,2> tmp(mask,shape(extent1,extent2),neverDeleteData) ; 
    505485    domain_hdl->mask.reference(tmp.copy()); 
    506     domain_hdl->sendAttributToServer(domain_hdl->mask); 
    507486     CTimer::get("XIOS").suspend(); 
    508487  } 
     
    531510     CTimer::get("XIOS").resume(); 
    532511    domain_hdl->name.setValue(name_str); 
    533     domain_hdl->sendAttributToServer(domain_hdl->name); 
    534512     CTimer::get("XIOS").suspend(); 
    535513  } 
     
    556534     CTimer::get("XIOS").resume(); 
    557535    domain_hdl->ni.setValue(ni); 
    558     domain_hdl->sendAttributToServer(domain_hdl->ni); 
    559536     CTimer::get("XIOS").suspend(); 
    560537  } 
     
    578555     CTimer::get("XIOS").resume(); 
    579556    domain_hdl->ni_glo.setValue(ni_glo); 
    580     domain_hdl->sendAttributToServer(domain_hdl->ni_glo); 
    581557     CTimer::get("XIOS").suspend(); 
    582558  } 
     
    600576     CTimer::get("XIOS").resume(); 
    601577    domain_hdl->nj.setValue(nj); 
    602     domain_hdl->sendAttributToServer(domain_hdl->nj); 
    603578     CTimer::get("XIOS").suspend(); 
    604579  } 
     
    622597     CTimer::get("XIOS").resume(); 
    623598    domain_hdl->nj_glo.setValue(nj_glo); 
    624     domain_hdl->sendAttributToServer(domain_hdl->nj_glo); 
    625599     CTimer::get("XIOS").suspend(); 
    626600  } 
     
    644618     CTimer::get("XIOS").resume(); 
    645619    domain_hdl->nvertex.setValue(nvertex); 
    646     domain_hdl->sendAttributToServer(domain_hdl->nvertex); 
    647620     CTimer::get("XIOS").suspend(); 
    648621  } 
     
    668641     CTimer::get("XIOS").resume(); 
    669642    domain_hdl->standard_name.setValue(standard_name_str); 
    670     domain_hdl->sendAttributToServer(domain_hdl->standard_name); 
    671643     CTimer::get("XIOS").suspend(); 
    672644  } 
     
    695667     CTimer::get("XIOS").resume(); 
    696668    domain_hdl->type.fromString(type_str); 
    697     domain_hdl->sendAttributToServer(domain_hdl->type); 
    698669     CTimer::get("XIOS").suspend(); 
    699670  } 
     
    720691     CTimer::get("XIOS").resume(); 
    721692    domain_hdl->zoom_ibegin.setValue(zoom_ibegin); 
    722     domain_hdl->sendAttributToServer(domain_hdl->zoom_ibegin); 
    723693     CTimer::get("XIOS").suspend(); 
    724694  } 
     
    742712     CTimer::get("XIOS").resume(); 
    743713    domain_hdl->zoom_ibegin_loc.setValue(zoom_ibegin_loc); 
    744     domain_hdl->sendAttributToServer(domain_hdl->zoom_ibegin_loc); 
    745714     CTimer::get("XIOS").suspend(); 
    746715  } 
     
    764733     CTimer::get("XIOS").resume(); 
    765734    domain_hdl->zoom_jbegin.setValue(zoom_jbegin); 
    766     domain_hdl->sendAttributToServer(domain_hdl->zoom_jbegin); 
    767735     CTimer::get("XIOS").suspend(); 
    768736  } 
     
    786754     CTimer::get("XIOS").resume(); 
    787755    domain_hdl->zoom_jbegin_loc.setValue(zoom_jbegin_loc); 
    788     domain_hdl->sendAttributToServer(domain_hdl->zoom_jbegin_loc); 
    789756     CTimer::get("XIOS").suspend(); 
    790757  } 
     
    808775     CTimer::get("XIOS").resume(); 
    809776    domain_hdl->zoom_ni.setValue(zoom_ni); 
    810     domain_hdl->sendAttributToServer(domain_hdl->zoom_ni); 
    811777     CTimer::get("XIOS").suspend(); 
    812778  } 
     
    830796     CTimer::get("XIOS").resume(); 
    831797    domain_hdl->zoom_ni_loc.setValue(zoom_ni_loc); 
    832     domain_hdl->sendAttributToServer(domain_hdl->zoom_ni_loc); 
    833798     CTimer::get("XIOS").suspend(); 
    834799  } 
     
    852817     CTimer::get("XIOS").resume(); 
    853818    domain_hdl->zoom_nj.setValue(zoom_nj); 
    854     domain_hdl->sendAttributToServer(domain_hdl->zoom_nj); 
    855819     CTimer::get("XIOS").suspend(); 
    856820  } 
     
    874838     CTimer::get("XIOS").resume(); 
    875839    domain_hdl->zoom_nj_loc.setValue(zoom_nj_loc); 
    876     domain_hdl->sendAttributToServer(domain_hdl->zoom_nj_loc); 
    877840     CTimer::get("XIOS").suspend(); 
    878841  } 
  • XIOS/trunk/src/interface/c_attr/icdomaingroup_attr.cpp

    r501 r509  
    2222    CArray<double,2> tmp(bounds_lat,shape(extent1,extent2),neverDeleteData) ; 
    2323    domaingroup_hdl->bounds_lat.reference(tmp.copy()); 
    24     domaingroup_hdl->sendAttributToServer(domaingroup_hdl->bounds_lat); 
    2524     CTimer::get("XIOS").suspend(); 
    2625  } 
     
    4847    CArray<double,2> tmp(bounds_lon,shape(extent1,extent2),neverDeleteData) ; 
    4948    domaingroup_hdl->bounds_lon.reference(tmp.copy()); 
    50     domaingroup_hdl->sendAttributToServer(domaingroup_hdl->bounds_lon); 
    5149     CTimer::get("XIOS").suspend(); 
    5250  } 
     
    7371     CTimer::get("XIOS").resume(); 
    7472    domaingroup_hdl->data_dim.setValue(data_dim); 
    75     domaingroup_hdl->sendAttributToServer(domaingroup_hdl->data_dim); 
    7673     CTimer::get("XIOS").suspend(); 
    7774  } 
     
    9693    CArray<int,1> tmp(data_i_index,shape(extent1),neverDeleteData) ; 
    9794    domaingroup_hdl->data_i_index.reference(tmp.copy()); 
    98     domaingroup_hdl->sendAttributToServer(domaingroup_hdl->data_i_index); 
    9995     CTimer::get("XIOS").suspend(); 
    10096  } 
     
    121117     CTimer::get("XIOS").resume(); 
    122118    domaingroup_hdl->data_ibegin.setValue(data_ibegin); 
    123     domaingroup_hdl->sendAttributToServer(domaingroup_hdl->data_ibegin); 
    124119     CTimer::get("XIOS").suspend(); 
    125120  } 
     
    144139    CArray<int,1> tmp(data_j_index,shape(extent1),neverDeleteData) ; 
    145140    domaingroup_hdl->data_j_index.reference(tmp.copy()); 
    146     domaingroup_hdl->sendAttributToServer(domaingroup_hdl->data_j_index); 
    147141     CTimer::get("XIOS").suspend(); 
    148142  } 
     
    169163     CTimer::get("XIOS").resume(); 
    170164    domaingroup_hdl->data_jbegin.setValue(data_jbegin); 
    171     domaingroup_hdl->sendAttributToServer(domaingroup_hdl->data_jbegin); 
    172165     CTimer::get("XIOS").suspend(); 
    173166  } 
     
    191184     CTimer::get("XIOS").resume(); 
    192185    domaingroup_hdl->data_n_index.setValue(data_n_index); 
    193     domaingroup_hdl->sendAttributToServer(domaingroup_hdl->data_n_index); 
    194186     CTimer::get("XIOS").suspend(); 
    195187  } 
     
    213205     CTimer::get("XIOS").resume(); 
    214206    domaingroup_hdl->data_ni.setValue(data_ni); 
    215     domaingroup_hdl->sendAttributToServer(domaingroup_hdl->data_ni); 
    216207     CTimer::get("XIOS").suspend(); 
    217208  } 
     
    235226     CTimer::get("XIOS").resume(); 
    236227    domaingroup_hdl->data_nj.setValue(data_nj); 
    237     domaingroup_hdl->sendAttributToServer(domaingroup_hdl->data_nj); 
    238228     CTimer::get("XIOS").suspend(); 
    239229  } 
     
    259249     CTimer::get("XIOS").resume(); 
    260250    domaingroup_hdl->domain_group_ref.setValue(domain_group_ref_str); 
    261     domaingroup_hdl->sendAttributToServer(domaingroup_hdl->domain_group_ref); 
    262251     CTimer::get("XIOS").suspend(); 
    263252  } 
     
    286275     CTimer::get("XIOS").resume(); 
    287276    domaingroup_hdl->group_ref.setValue(group_ref_str); 
    288     domaingroup_hdl->sendAttributToServer(domaingroup_hdl->group_ref); 
    289277     CTimer::get("XIOS").suspend(); 
    290278  } 
     
    312300    CArray<int,2> tmp(i_index,shape(extent1,extent2),neverDeleteData) ; 
    313301    domaingroup_hdl->i_index.reference(tmp.copy()); 
    314     domaingroup_hdl->sendAttributToServer(domaingroup_hdl->i_index); 
    315302     CTimer::get("XIOS").suspend(); 
    316303  } 
     
    337324     CTimer::get("XIOS").resume(); 
    338325    domaingroup_hdl->ibegin.setValue(ibegin); 
    339     domaingroup_hdl->sendAttributToServer(domaingroup_hdl->ibegin); 
    340326     CTimer::get("XIOS").suspend(); 
    341327  } 
     
    359345     CTimer::get("XIOS").resume(); 
    360346    domaingroup_hdl->iend.setValue(iend); 
    361     domaingroup_hdl->sendAttributToServer(domaingroup_hdl->iend); 
    362347     CTimer::get("XIOS").suspend(); 
    363348  } 
     
    382367    CArray<int,2> tmp(j_index,shape(extent1,extent2),neverDeleteData) ; 
    383368    domaingroup_hdl->j_index.reference(tmp.copy()); 
    384     domaingroup_hdl->sendAttributToServer(domaingroup_hdl->j_index); 
    385369     CTimer::get("XIOS").suspend(); 
    386370  } 
     
    407391     CTimer::get("XIOS").resume(); 
    408392    domaingroup_hdl->jbegin.setValue(jbegin); 
    409     domaingroup_hdl->sendAttributToServer(domaingroup_hdl->jbegin); 
    410393     CTimer::get("XIOS").suspend(); 
    411394  } 
     
    429412     CTimer::get("XIOS").resume(); 
    430413    domaingroup_hdl->jend.setValue(jend); 
    431     domaingroup_hdl->sendAttributToServer(domaingroup_hdl->jend); 
    432414     CTimer::get("XIOS").suspend(); 
    433415  } 
     
    452434    CArray<double,1> tmp(latvalue,shape(extent1),neverDeleteData) ; 
    453435    domaingroup_hdl->latvalue.reference(tmp.copy()); 
    454     domaingroup_hdl->sendAttributToServer(domaingroup_hdl->latvalue); 
    455436     CTimer::get("XIOS").suspend(); 
    456437  } 
     
    479460     CTimer::get("XIOS").resume(); 
    480461    domaingroup_hdl->long_name.setValue(long_name_str); 
    481     domaingroup_hdl->sendAttributToServer(domaingroup_hdl->long_name); 
    482462     CTimer::get("XIOS").suspend(); 
    483463  } 
     
    505485    CArray<double,1> tmp(lonvalue,shape(extent1),neverDeleteData) ; 
    506486    domaingroup_hdl->lonvalue.reference(tmp.copy()); 
    507     domaingroup_hdl->sendAttributToServer(domaingroup_hdl->lonvalue); 
    508487     CTimer::get("XIOS").suspend(); 
    509488  } 
     
    531510    CArray<bool,2> tmp(mask,shape(extent1,extent2),neverDeleteData) ; 
    532511    domaingroup_hdl->mask.reference(tmp.copy()); 
    533     domaingroup_hdl->sendAttributToServer(domaingroup_hdl->mask); 
    534512     CTimer::get("XIOS").suspend(); 
    535513  } 
     
    558536     CTimer::get("XIOS").resume(); 
    559537    domaingroup_hdl->name.setValue(name_str); 
    560     domaingroup_hdl->sendAttributToServer(domaingroup_hdl->name); 
    561538     CTimer::get("XIOS").suspend(); 
    562539  } 
     
    583560     CTimer::get("XIOS").resume(); 
    584561    domaingroup_hdl->ni.setValue(ni); 
    585     domaingroup_hdl->sendAttributToServer(domaingroup_hdl->ni); 
    586562     CTimer::get("XIOS").suspend(); 
    587563  } 
     
    605581     CTimer::get("XIOS").resume(); 
    606582    domaingroup_hdl->ni_glo.setValue(ni_glo); 
    607     domaingroup_hdl->sendAttributToServer(domaingroup_hdl->ni_glo); 
    608583     CTimer::get("XIOS").suspend(); 
    609584  } 
     
    627602     CTimer::get("XIOS").resume(); 
    628603    domaingroup_hdl->nj.setValue(nj); 
    629     domaingroup_hdl->sendAttributToServer(domaingroup_hdl->nj); 
    630604     CTimer::get("XIOS").suspend(); 
    631605  } 
     
    649623     CTimer::get("XIOS").resume(); 
    650624    domaingroup_hdl->nj_glo.setValue(nj_glo); 
    651     domaingroup_hdl->sendAttributToServer(domaingroup_hdl->nj_glo); 
    652625     CTimer::get("XIOS").suspend(); 
    653626  } 
     
    671644     CTimer::get("XIOS").resume(); 
    672645    domaingroup_hdl->nvertex.setValue(nvertex); 
    673     domaingroup_hdl->sendAttributToServer(domaingroup_hdl->nvertex); 
    674646     CTimer::get("XIOS").suspend(); 
    675647  } 
     
    695667     CTimer::get("XIOS").resume(); 
    696668    domaingroup_hdl->standard_name.setValue(standard_name_str); 
    697     domaingroup_hdl->sendAttributToServer(domaingroup_hdl->standard_name); 
    698669     CTimer::get("XIOS").suspend(); 
    699670  } 
     
    722693     CTimer::get("XIOS").resume(); 
    723694    domaingroup_hdl->type.fromString(type_str); 
    724     domaingroup_hdl->sendAttributToServer(domaingroup_hdl->type); 
    725695     CTimer::get("XIOS").suspend(); 
    726696  } 
     
    747717     CTimer::get("XIOS").resume(); 
    748718    domaingroup_hdl->zoom_ibegin.setValue(zoom_ibegin); 
    749     domaingroup_hdl->sendAttributToServer(domaingroup_hdl->zoom_ibegin); 
    750719     CTimer::get("XIOS").suspend(); 
    751720  } 
     
    769738     CTimer::get("XIOS").resume(); 
    770739    domaingroup_hdl->zoom_ibegin_loc.setValue(zoom_ibegin_loc); 
    771     domaingroup_hdl->sendAttributToServer(domaingroup_hdl->zoom_ibegin_loc); 
    772740     CTimer::get("XIOS").suspend(); 
    773741  } 
     
    791759     CTimer::get("XIOS").resume(); 
    792760    domaingroup_hdl->zoom_jbegin.setValue(zoom_jbegin); 
    793     domaingroup_hdl->sendAttributToServer(domaingroup_hdl->zoom_jbegin); 
    794761     CTimer::get("XIOS").suspend(); 
    795762  } 
     
    813780     CTimer::get("XIOS").resume(); 
    814781    domaingroup_hdl->zoom_jbegin_loc.setValue(zoom_jbegin_loc); 
    815     domaingroup_hdl->sendAttributToServer(domaingroup_hdl->zoom_jbegin_loc); 
    816782     CTimer::get("XIOS").suspend(); 
    817783  } 
     
    835801     CTimer::get("XIOS").resume(); 
    836802    domaingroup_hdl->zoom_ni.setValue(zoom_ni); 
    837     domaingroup_hdl->sendAttributToServer(domaingroup_hdl->zoom_ni); 
    838803     CTimer::get("XIOS").suspend(); 
    839804  } 
     
    857822     CTimer::get("XIOS").resume(); 
    858823    domaingroup_hdl->zoom_ni_loc.setValue(zoom_ni_loc); 
    859     domaingroup_hdl->sendAttributToServer(domaingroup_hdl->zoom_ni_loc); 
    860824     CTimer::get("XIOS").suspend(); 
    861825  } 
     
    879843     CTimer::get("XIOS").resume(); 
    880844    domaingroup_hdl->zoom_nj.setValue(zoom_nj); 
    881     domaingroup_hdl->sendAttributToServer(domaingroup_hdl->zoom_nj); 
    882845     CTimer::get("XIOS").suspend(); 
    883846  } 
     
    901864     CTimer::get("XIOS").resume(); 
    902865    domaingroup_hdl->zoom_nj_loc.setValue(zoom_nj_loc); 
    903     domaingroup_hdl->sendAttributToServer(domaingroup_hdl->zoom_nj_loc); 
    904866     CTimer::get("XIOS").suspend(); 
    905867  } 
  • XIOS/trunk/src/interface/c_attr/icfield_attr.cpp

    r501 r509  
    2121     CTimer::get("XIOS").resume(); 
    2222    field_hdl->add_offset.setValue(add_offset); 
    23     field_hdl->sendAttributToServer(field_hdl->add_offset); 
    2423     CTimer::get("XIOS").suspend(); 
    2524  } 
     
    4544     CTimer::get("XIOS").resume(); 
    4645    field_hdl->axis_ref.setValue(axis_ref_str); 
    47     field_hdl->sendAttributToServer(field_hdl->axis_ref); 
    4846     CTimer::get("XIOS").suspend(); 
    4947  } 
     
    7068     CTimer::get("XIOS").resume(); 
    7169    field_hdl->default_value.setValue(default_value); 
    72     field_hdl->sendAttributToServer(field_hdl->default_value); 
    7370     CTimer::get("XIOS").suspend(); 
    7471  } 
     
    9289     CTimer::get("XIOS").resume(); 
    9390    field_hdl->detect_missing_value.setValue(detect_missing_value); 
    94     field_hdl->sendAttributToServer(field_hdl->detect_missing_value); 
    9591     CTimer::get("XIOS").suspend(); 
    9692  } 
     
    116112     CTimer::get("XIOS").resume(); 
    117113    field_hdl->domain_ref.setValue(domain_ref_str); 
    118     field_hdl->sendAttributToServer(field_hdl->domain_ref); 
    119114     CTimer::get("XIOS").suspend(); 
    120115  } 
     
    141136     CTimer::get("XIOS").resume(); 
    142137    field_hdl->enabled.setValue(enabled); 
    143     field_hdl->sendAttributToServer(field_hdl->enabled); 
    144138     CTimer::get("XIOS").suspend(); 
    145139  } 
     
    165159     CTimer::get("XIOS").resume(); 
    166160    field_hdl->field_ref.setValue(field_ref_str); 
    167     field_hdl->sendAttributToServer(field_hdl->field_ref); 
    168161     CTimer::get("XIOS").suspend(); 
    169162  } 
     
    192185     CTimer::get("XIOS").resume(); 
    193186    field_hdl->freq_offset.setValue(freq_offset_str); 
    194     field_hdl->sendAttributToServer(field_hdl->freq_offset); 
    195187     CTimer::get("XIOS").suspend(); 
    196188  } 
     
    219211     CTimer::get("XIOS").resume(); 
    220212    field_hdl->freq_op.setValue(freq_op_str); 
    221     field_hdl->sendAttributToServer(field_hdl->freq_op); 
    222213     CTimer::get("XIOS").suspend(); 
    223214  } 
     
    246237     CTimer::get("XIOS").resume(); 
    247238    field_hdl->grid_ref.setValue(grid_ref_str); 
    248     field_hdl->sendAttributToServer(field_hdl->grid_ref); 
    249239     CTimer::get("XIOS").suspend(); 
    250240  } 
     
    271261     CTimer::get("XIOS").resume(); 
    272262    field_hdl->level.setValue(level); 
    273     field_hdl->sendAttributToServer(field_hdl->level); 
    274263     CTimer::get("XIOS").suspend(); 
    275264  } 
     
    295284     CTimer::get("XIOS").resume(); 
    296285    field_hdl->long_name.setValue(long_name_str); 
    297     field_hdl->sendAttributToServer(field_hdl->long_name); 
    298286     CTimer::get("XIOS").suspend(); 
    299287  } 
     
    322310     CTimer::get("XIOS").resume(); 
    323311    field_hdl->name.setValue(name_str); 
    324     field_hdl->sendAttributToServer(field_hdl->name); 
    325312     CTimer::get("XIOS").suspend(); 
    326313  } 
     
    349336     CTimer::get("XIOS").resume(); 
    350337    field_hdl->operation.setValue(operation_str); 
    351     field_hdl->sendAttributToServer(field_hdl->operation); 
    352338     CTimer::get("XIOS").suspend(); 
    353339  } 
     
    374360     CTimer::get("XIOS").resume(); 
    375361    field_hdl->prec.setValue(prec); 
    376     field_hdl->sendAttributToServer(field_hdl->prec); 
    377362     CTimer::get("XIOS").suspend(); 
    378363  } 
     
    396381     CTimer::get("XIOS").resume(); 
    397382    field_hdl->scale_factor.setValue(scale_factor); 
    398     field_hdl->sendAttributToServer(field_hdl->scale_factor); 
    399383     CTimer::get("XIOS").suspend(); 
    400384  } 
     
    420404     CTimer::get("XIOS").resume(); 
    421405    field_hdl->standard_name.setValue(standard_name_str); 
    422     field_hdl->sendAttributToServer(field_hdl->standard_name); 
    423406     CTimer::get("XIOS").suspend(); 
    424407  } 
     
    447430     CTimer::get("XIOS").resume(); 
    448431    field_hdl->unit.setValue(unit_str); 
    449     field_hdl->sendAttributToServer(field_hdl->unit); 
    450432     CTimer::get("XIOS").suspend(); 
    451433  } 
     
    472454     CTimer::get("XIOS").resume(); 
    473455    field_hdl->valid_max.setValue(valid_max); 
    474     field_hdl->sendAttributToServer(field_hdl->valid_max); 
    475456     CTimer::get("XIOS").suspend(); 
    476457  } 
     
    494475     CTimer::get("XIOS").resume(); 
    495476    field_hdl->valid_min.setValue(valid_min); 
    496     field_hdl->sendAttributToServer(field_hdl->valid_min); 
    497477     CTimer::get("XIOS").suspend(); 
    498478  } 
  • XIOS/trunk/src/interface/c_attr/icfieldgroup_attr.cpp

    r501 r509  
    2121     CTimer::get("XIOS").resume(); 
    2222    fieldgroup_hdl->add_offset.setValue(add_offset); 
    23     fieldgroup_hdl->sendAttributToServer(fieldgroup_hdl->add_offset); 
    2423     CTimer::get("XIOS").suspend(); 
    2524  } 
     
    4544     CTimer::get("XIOS").resume(); 
    4645    fieldgroup_hdl->axis_ref.setValue(axis_ref_str); 
    47     fieldgroup_hdl->sendAttributToServer(fieldgroup_hdl->axis_ref); 
    4846     CTimer::get("XIOS").suspend(); 
    4947  } 
     
    7068     CTimer::get("XIOS").resume(); 
    7169    fieldgroup_hdl->default_value.setValue(default_value); 
    72     fieldgroup_hdl->sendAttributToServer(fieldgroup_hdl->default_value); 
    7370     CTimer::get("XIOS").suspend(); 
    7471  } 
     
    9289     CTimer::get("XIOS").resume(); 
    9390    fieldgroup_hdl->detect_missing_value.setValue(detect_missing_value); 
    94     fieldgroup_hdl->sendAttributToServer(fieldgroup_hdl->detect_missing_value); 
    9591     CTimer::get("XIOS").suspend(); 
    9692  } 
     
    116112     CTimer::get("XIOS").resume(); 
    117113    fieldgroup_hdl->domain_ref.setValue(domain_ref_str); 
    118     fieldgroup_hdl->sendAttributToServer(fieldgroup_hdl->domain_ref); 
    119114     CTimer::get("XIOS").suspend(); 
    120115  } 
     
    141136     CTimer::get("XIOS").resume(); 
    142137    fieldgroup_hdl->enabled.setValue(enabled); 
    143     fieldgroup_hdl->sendAttributToServer(fieldgroup_hdl->enabled); 
    144138     CTimer::get("XIOS").suspend(); 
    145139  } 
     
    165159     CTimer::get("XIOS").resume(); 
    166160    fieldgroup_hdl->field_ref.setValue(field_ref_str); 
    167     fieldgroup_hdl->sendAttributToServer(fieldgroup_hdl->field_ref); 
    168161     CTimer::get("XIOS").suspend(); 
    169162  } 
     
    192185     CTimer::get("XIOS").resume(); 
    193186    fieldgroup_hdl->freq_offset.setValue(freq_offset_str); 
    194     fieldgroup_hdl->sendAttributToServer(fieldgroup_hdl->freq_offset); 
    195187     CTimer::get("XIOS").suspend(); 
    196188  } 
     
    219211     CTimer::get("XIOS").resume(); 
    220212    fieldgroup_hdl->freq_op.setValue(freq_op_str); 
    221     fieldgroup_hdl->sendAttributToServer(fieldgroup_hdl->freq_op); 
    222213     CTimer::get("XIOS").suspend(); 
    223214  } 
     
    246237     CTimer::get("XIOS").resume(); 
    247238    fieldgroup_hdl->grid_ref.setValue(grid_ref_str); 
    248     fieldgroup_hdl->sendAttributToServer(fieldgroup_hdl->grid_ref); 
    249239     CTimer::get("XIOS").suspend(); 
    250240  } 
     
    273263     CTimer::get("XIOS").resume(); 
    274264    fieldgroup_hdl->group_ref.setValue(group_ref_str); 
    275     fieldgroup_hdl->sendAttributToServer(fieldgroup_hdl->group_ref); 
    276265     CTimer::get("XIOS").suspend(); 
    277266  } 
     
    298287     CTimer::get("XIOS").resume(); 
    299288    fieldgroup_hdl->level.setValue(level); 
    300     fieldgroup_hdl->sendAttributToServer(fieldgroup_hdl->level); 
    301289     CTimer::get("XIOS").suspend(); 
    302290  } 
     
    322310     CTimer::get("XIOS").resume(); 
    323311    fieldgroup_hdl->long_name.setValue(long_name_str); 
    324     fieldgroup_hdl->sendAttributToServer(fieldgroup_hdl->long_name); 
    325312     CTimer::get("XIOS").suspend(); 
    326313  } 
     
    349336     CTimer::get("XIOS").resume(); 
    350337    fieldgroup_hdl->name.setValue(name_str); 
    351     fieldgroup_hdl->sendAttributToServer(fieldgroup_hdl->name); 
    352338     CTimer::get("XIOS").suspend(); 
    353339  } 
     
    376362     CTimer::get("XIOS").resume(); 
    377363    fieldgroup_hdl->operation.setValue(operation_str); 
    378     fieldgroup_hdl->sendAttributToServer(fieldgroup_hdl->operation); 
    379364     CTimer::get("XIOS").suspend(); 
    380365  } 
     
    401386     CTimer::get("XIOS").resume(); 
    402387    fieldgroup_hdl->prec.setValue(prec); 
    403     fieldgroup_hdl->sendAttributToServer(fieldgroup_hdl->prec); 
    404388     CTimer::get("XIOS").suspend(); 
    405389  } 
     
    423407     CTimer::get("XIOS").resume(); 
    424408    fieldgroup_hdl->scale_factor.setValue(scale_factor); 
    425     fieldgroup_hdl->sendAttributToServer(fieldgroup_hdl->scale_factor); 
    426409     CTimer::get("XIOS").suspend(); 
    427410  } 
     
    447430     CTimer::get("XIOS").resume(); 
    448431    fieldgroup_hdl->standard_name.setValue(standard_name_str); 
    449     fieldgroup_hdl->sendAttributToServer(fieldgroup_hdl->standard_name); 
    450432     CTimer::get("XIOS").suspend(); 
    451433  } 
     
    474456     CTimer::get("XIOS").resume(); 
    475457    fieldgroup_hdl->unit.setValue(unit_str); 
    476     fieldgroup_hdl->sendAttributToServer(fieldgroup_hdl->unit); 
    477458     CTimer::get("XIOS").suspend(); 
    478459  } 
     
    499480     CTimer::get("XIOS").resume(); 
    500481    fieldgroup_hdl->valid_max.setValue(valid_max); 
    501     fieldgroup_hdl->sendAttributToServer(fieldgroup_hdl->valid_max); 
    502482     CTimer::get("XIOS").suspend(); 
    503483  } 
     
    521501     CTimer::get("XIOS").resume(); 
    522502    fieldgroup_hdl->valid_min.setValue(valid_min); 
    523     fieldgroup_hdl->sendAttributToServer(fieldgroup_hdl->valid_min); 
    524503     CTimer::get("XIOS").suspend(); 
    525504  } 
  • XIOS/trunk/src/interface/c_attr/icfile_attr.cpp

    r501 r509  
    2323     CTimer::get("XIOS").resume(); 
    2424    file_hdl->description.setValue(description_str); 
    25     file_hdl->sendAttributToServer(file_hdl->description); 
    2625     CTimer::get("XIOS").suspend(); 
    2726  } 
     
    4847     CTimer::get("XIOS").resume(); 
    4948    file_hdl->enabled.setValue(enabled); 
    50     file_hdl->sendAttributToServer(file_hdl->enabled); 
    5149     CTimer::get("XIOS").suspend(); 
    5250  } 
     
    7068     CTimer::get("XIOS").resume(); 
    7169    file_hdl->min_digits.setValue(min_digits); 
    72     file_hdl->sendAttributToServer(file_hdl->min_digits); 
    7370     CTimer::get("XIOS").suspend(); 
    7471  } 
     
    9491     CTimer::get("XIOS").resume(); 
    9592    file_hdl->name.setValue(name_str); 
    96     file_hdl->sendAttributToServer(file_hdl->name); 
    9793     CTimer::get("XIOS").suspend(); 
    9894  } 
     
    121117     CTimer::get("XIOS").resume(); 
    122118    file_hdl->name_suffix.setValue(name_suffix_str); 
    123     file_hdl->sendAttributToServer(file_hdl->name_suffix); 
    124119     CTimer::get("XIOS").suspend(); 
    125120  } 
     
    148143     CTimer::get("XIOS").resume(); 
    149144    file_hdl->output_freq.setValue(output_freq_str); 
    150     file_hdl->sendAttributToServer(file_hdl->output_freq); 
    151145     CTimer::get("XIOS").suspend(); 
    152146  } 
     
    173167     CTimer::get("XIOS").resume(); 
    174168    file_hdl->output_level.setValue(output_level); 
    175     file_hdl->sendAttributToServer(file_hdl->output_level); 
    176169     CTimer::get("XIOS").suspend(); 
    177170  } 
     
    197190     CTimer::get("XIOS").resume(); 
    198191    file_hdl->par_access.setValue(par_access_str); 
    199     file_hdl->sendAttributToServer(file_hdl->par_access); 
    200192     CTimer::get("XIOS").suspend(); 
    201193  } 
     
    224216     CTimer::get("XIOS").resume(); 
    225217    file_hdl->split_freq.setValue(split_freq_str); 
    226     file_hdl->sendAttributToServer(file_hdl->split_freq); 
    227218     CTimer::get("XIOS").suspend(); 
    228219  } 
     
    251242     CTimer::get("XIOS").resume(); 
    252243    file_hdl->split_freq_format.setValue(split_freq_format_str); 
    253     file_hdl->sendAttributToServer(file_hdl->split_freq_format); 
    254244     CTimer::get("XIOS").suspend(); 
    255245  } 
     
    278268     CTimer::get("XIOS").resume(); 
    279269    file_hdl->sync_freq.setValue(sync_freq_str); 
    280     file_hdl->sendAttributToServer(file_hdl->sync_freq); 
    281270     CTimer::get("XIOS").suspend(); 
    282271  } 
     
    305294     CTimer::get("XIOS").resume(); 
    306295    file_hdl->type.fromString(type_str); 
    307     file_hdl->sendAttributToServer(file_hdl->type); 
    308296     CTimer::get("XIOS").suspend(); 
    309297  } 
  • XIOS/trunk/src/interface/c_attr/icfilegroup_attr.cpp

    r501 r509  
    2323     CTimer::get("XIOS").resume(); 
    2424    filegroup_hdl->description.setValue(description_str); 
    25     filegroup_hdl->sendAttributToServer(filegroup_hdl->description); 
    2625     CTimer::get("XIOS").suspend(); 
    2726  } 
     
    4847     CTimer::get("XIOS").resume(); 
    4948    filegroup_hdl->enabled.setValue(enabled); 
    50     filegroup_hdl->sendAttributToServer(filegroup_hdl->enabled); 
    5149     CTimer::get("XIOS").suspend(); 
    5250  } 
     
    7270     CTimer::get("XIOS").resume(); 
    7371    filegroup_hdl->group_ref.setValue(group_ref_str); 
    74     filegroup_hdl->sendAttributToServer(filegroup_hdl->group_ref); 
    7572     CTimer::get("XIOS").suspend(); 
    7673  } 
     
    9794     CTimer::get("XIOS").resume(); 
    9895    filegroup_hdl->min_digits.setValue(min_digits); 
    99     filegroup_hdl->sendAttributToServer(filegroup_hdl->min_digits); 
    10096     CTimer::get("XIOS").suspend(); 
    10197  } 
     
    121117     CTimer::get("XIOS").resume(); 
    122118    filegroup_hdl->name.setValue(name_str); 
    123     filegroup_hdl->sendAttributToServer(filegroup_hdl->name); 
    124119     CTimer::get("XIOS").suspend(); 
    125120  } 
     
    148143     CTimer::get("XIOS").resume(); 
    149144    filegroup_hdl->name_suffix.setValue(name_suffix_str); 
    150     filegroup_hdl->sendAttributToServer(filegroup_hdl->name_suffix); 
    151145     CTimer::get("XIOS").suspend(); 
    152146  } 
     
    175169     CTimer::get("XIOS").resume(); 
    176170    filegroup_hdl->output_freq.setValue(output_freq_str); 
    177     filegroup_hdl->sendAttributToServer(filegroup_hdl->output_freq); 
    178171     CTimer::get("XIOS").suspend(); 
    179172  } 
     
    200193     CTimer::get("XIOS").resume(); 
    201194    filegroup_hdl->output_level.setValue(output_level); 
    202     filegroup_hdl->sendAttributToServer(filegroup_hdl->output_level); 
    203195     CTimer::get("XIOS").suspend(); 
    204196  } 
     
    224216     CTimer::get("XIOS").resume(); 
    225217    filegroup_hdl->par_access.setValue(par_access_str); 
    226     filegroup_hdl->sendAttributToServer(filegroup_hdl->par_access); 
    227218     CTimer::get("XIOS").suspend(); 
    228219  } 
     
    251242     CTimer::get("XIOS").resume(); 
    252243    filegroup_hdl->split_freq.setValue(split_freq_str); 
    253     filegroup_hdl->sendAttributToServer(filegroup_hdl->split_freq); 
    254244     CTimer::get("XIOS").suspend(); 
    255245  } 
     
    278268     CTimer::get("XIOS").resume(); 
    279269    filegroup_hdl->split_freq_format.setValue(split_freq_format_str); 
    280     filegroup_hdl->sendAttributToServer(filegroup_hdl->split_freq_format); 
    281270     CTimer::get("XIOS").suspend(); 
    282271  } 
     
    305294     CTimer::get("XIOS").resume(); 
    306295    filegroup_hdl->sync_freq.setValue(sync_freq_str); 
    307     filegroup_hdl->sendAttributToServer(filegroup_hdl->sync_freq); 
    308296     CTimer::get("XIOS").suspend(); 
    309297  } 
     
    332320     CTimer::get("XIOS").resume(); 
    333321    filegroup_hdl->type.fromString(type_str); 
    334     filegroup_hdl->sendAttributToServer(filegroup_hdl->type); 
    335322     CTimer::get("XIOS").suspend(); 
    336323  } 
  • XIOS/trunk/src/interface/c_attr/icgrid_attr.cpp

    r501 r509  
    2323     CTimer::get("XIOS").resume(); 
    2424    grid_hdl->axis_ref.setValue(axis_ref_str); 
    25     grid_hdl->sendAttributToServer(grid_hdl->axis_ref); 
    2625     CTimer::get("XIOS").suspend(); 
    2726  } 
     
    5049     CTimer::get("XIOS").resume(); 
    5150    grid_hdl->description.setValue(description_str); 
    52     grid_hdl->sendAttributToServer(grid_hdl->description); 
    5351     CTimer::get("XIOS").suspend(); 
    5452  } 
     
    7775     CTimer::get("XIOS").resume(); 
    7876    grid_hdl->domain_ref.setValue(domain_ref_str); 
    79     grid_hdl->sendAttributToServer(grid_hdl->domain_ref); 
    8077     CTimer::get("XIOS").suspend(); 
    8178  } 
     
    103100    CArray<bool,3> tmp(mask,shape(extent1,extent2,extent3),neverDeleteData) ; 
    104101    grid_hdl->mask.reference(tmp.copy()); 
    105     grid_hdl->sendAttributToServer(grid_hdl->mask); 
    106102     CTimer::get("XIOS").suspend(); 
    107103  } 
     
    130126     CTimer::get("XIOS").resume(); 
    131127    grid_hdl->name.setValue(name_str); 
    132     grid_hdl->sendAttributToServer(grid_hdl->name); 
    133128     CTimer::get("XIOS").suspend(); 
    134129  } 
  • XIOS/trunk/src/interface/c_attr/icgridgroup_attr.cpp

    r501 r509  
    2323     CTimer::get("XIOS").resume(); 
    2424    gridgroup_hdl->axis_ref.setValue(axis_ref_str); 
    25     gridgroup_hdl->sendAttributToServer(gridgroup_hdl->axis_ref); 
    2625     CTimer::get("XIOS").suspend(); 
    2726  } 
     
    5049     CTimer::get("XIOS").resume(); 
    5150    gridgroup_hdl->description.setValue(description_str); 
    52     gridgroup_hdl->sendAttributToServer(gridgroup_hdl->description); 
    5351     CTimer::get("XIOS").suspend(); 
    5452  } 
     
    7775     CTimer::get("XIOS").resume(); 
    7876    gridgroup_hdl->domain_ref.setValue(domain_ref_str); 
    79     gridgroup_hdl->sendAttributToServer(gridgroup_hdl->domain_ref); 
    8077     CTimer::get("XIOS").suspend(); 
    8178  } 
     
    104101     CTimer::get("XIOS").resume(); 
    105102    gridgroup_hdl->group_ref.setValue(group_ref_str); 
    106     gridgroup_hdl->sendAttributToServer(gridgroup_hdl->group_ref); 
    107103     CTimer::get("XIOS").suspend(); 
    108104  } 
     
    130126    CArray<bool,3> tmp(mask,shape(extent1,extent2,extent3),neverDeleteData) ; 
    131127    gridgroup_hdl->mask.reference(tmp.copy()); 
    132     gridgroup_hdl->sendAttributToServer(gridgroup_hdl->mask); 
    133128     CTimer::get("XIOS").suspend(); 
    134129  } 
     
    157152     CTimer::get("XIOS").resume(); 
    158153    gridgroup_hdl->name.setValue(name_str); 
    159     gridgroup_hdl->sendAttributToServer(gridgroup_hdl->name); 
    160154     CTimer::get("XIOS").suspend(); 
    161155  } 
  • XIOS/trunk/src/interface/c_attr/icvariable_attr.cpp

    r501 r509  
    2323     CTimer::get("XIOS").resume(); 
    2424    variable_hdl->name.setValue(name_str); 
    25     variable_hdl->sendAttributToServer(variable_hdl->name); 
    2625     CTimer::get("XIOS").suspend(); 
    2726  } 
     
    5049     CTimer::get("XIOS").resume(); 
    5150    variable_hdl->type.setValue(type_str); 
    52     variable_hdl->sendAttributToServer(variable_hdl->type); 
    5351     CTimer::get("XIOS").suspend(); 
    5452  } 
  • XIOS/trunk/src/interface/c_attr/icvariablegroup_attr.cpp

    r501 r509  
    2323     CTimer::get("XIOS").resume(); 
    2424    variablegroup_hdl->group_ref.setValue(group_ref_str); 
    25     variablegroup_hdl->sendAttributToServer(variablegroup_hdl->group_ref); 
    2625     CTimer::get("XIOS").suspend(); 
    2726  } 
     
    5049     CTimer::get("XIOS").resume(); 
    5150    variablegroup_hdl->name.setValue(name_str); 
    52     variablegroup_hdl->sendAttributToServer(variablegroup_hdl->name); 
    5351     CTimer::get("XIOS").suspend(); 
    5452  } 
     
    7775     CTimer::get("XIOS").resume(); 
    7876    variablegroup_hdl->type.setValue(type_str); 
    79     variablegroup_hdl->sendAttributToServer(variablegroup_hdl->type); 
    8077     CTimer::get("XIOS").suspend(); 
    8178  } 
  • XIOS/trunk/src/node/context.cpp

    r501 r509  
    1616 
    1717namespace xios { 
    18    
     18 
    1919  shared_ptr<CContextGroup> CContext::root ; 
    20     
     20 
    2121   /// ////////////////////// Définitions ////////////////////// /// 
    2222 
    2323   CContext::CContext(void) 
    2424      : CObjectTemplate<CContext>(), CContextAttributes() 
    25       , calendar(),hasClient(false),hasServer(false) 
     25      , calendar(),hasClient(false),hasServer(false), isPostProcessed(false), dataSize_() 
    2626   { /* Ne rien faire de plus */ } 
    2727 
    2828   CContext::CContext(const StdString & id) 
    2929      : CObjectTemplate<CContext>(id), CContextAttributes() 
    30       , calendar(),hasClient(false),hasServer(false) 
     30      , calendar(),hasClient(false),hasServer(false), isPostProcessed(false), dataSize_() 
    3131   { /* Ne rien faire de plus */ } 
    3232 
    3333   CContext::~CContext(void) 
    34    {  
     34   { 
    3535     if (hasClient) delete client ; 
    3636     if (hasServer) delete server ; 
     
    3838 
    3939   //---------------------------------------------------------------- 
    40  
     40   //! Get name of context 
    4141   StdString CContext::GetName(void)   { return (StdString("context")); } 
    4242   StdString CContext::GetDefName(void){ return (CContext::GetName()); } 
     
    4444 
    4545   //---------------------------------------------------------------- 
    46  
     46   /*! 
     47   \brief Get context group (context root) 
     48   \return Context root 
     49   */ 
    4750   CContextGroup* CContext::getRoot(void) 
    48    {   
     51   { 
    4952      if (root.get()==NULL) root=shared_ptr<CContextGroup>(new CContextGroup(xml::CXMLNode::GetRootName())) ; 
    50       return root.get();  
    51    } 
    52     
    53  
    54    //---------------------------------------------------------------- 
    55  
     53      return root.get(); 
     54   } 
     55 
     56 
     57   //---------------------------------------------------------------- 
     58   /*! 
     59   \brief Get calendar of a context 
     60   \return Calendar 
     61   */ 
    5662   boost::shared_ptr<CCalendar> CContext::getCalendar(void) const 
    5763   { 
    5864      return (this->calendar); 
    5965   } 
    60     
    61    //---------------------------------------------------------------- 
    62     
     66 
     67   //---------------------------------------------------------------- 
     68   /*! 
     69   \brief Set a context with a calendar 
     70   \param[in] newCalendar new calendar 
     71   */ 
    6372   void CContext::setCalendar(boost::shared_ptr<CCalendar> newCalendar) 
    6473   { 
     
    6776      start_date.setValue(this->calendar->getInitDate().toString()); 
    6877   } 
    69     
    70    //---------------------------------------------------------------- 
    71  
     78 
     79   //---------------------------------------------------------------- 
     80   //! Process all information of calendar 
    7281   void CContext::solveCalendar(void) 
    7382   { 
     
    97106            << "The calendar is not defined !"); 
    98107   } 
    99     
    100    //---------------------------------------------------------------- 
    101  
     108 
     109   //---------------------------------------------------------------- 
     110   /*! 
     111   \brief Parse xml file and write information into context object 
     112   \param [in] node xmld node corresponding in xml file 
     113   */ 
    102114   void CContext::parse(xml::CXMLNode & node) 
    103115   { 
     
    135147 
    136148            if (attributes.end() != attributes.find("id")) 
    137             { DEBUG(<< "Definition node has an id," 
    138                     << "it will not be taking account !"); } 
     149            { 
     150              DEBUG(<< "Definition node has an id," 
     151                    << "it will not be taking account !"); 
     152            } 
    139153 
    140154#define DECLARE_NODE(Name_, name_)    \ 
     
    155169 
    156170   //---------------------------------------------------------------- 
    157  
     171   //! Show tree structure of context 
    158172   void CContext::ShowTree(StdOStream & out) 
    159173   { 
     
    166180      out << "<? xml version=\"1.0\" ?>" << std::endl; 
    167181      out << "<"  << xml::CXMLNode::GetRootName() << " >" << std::endl; 
    168        
     182 
    169183      for (; it != end; it++) 
    170184      { 
    171          CContext* context = *it;          
    172          CContext::setCurrent(context->getId());          
     185         CContext* context = *it; 
     186         CContext::setCurrent(context->getId()); 
    173187         out << *context << std::endl; 
    174188      } 
    175        
     189 
    176190      out << "</" << xml::CXMLNode::GetRootName() << " >" << std::endl; 
    177       CContext::setCurrent(currentContextId);   
    178    } 
    179     
    180  
    181    //---------------------------------------------------------------- 
    182  
     191      CContext::setCurrent(currentContextId); 
     192   } 
     193 
     194 
     195   //---------------------------------------------------------------- 
     196 
     197   //! Convert context object into string (to print) 
    183198   StdString CContext::toString(void) const 
    184199   { 
     
    209224   //---------------------------------------------------------------- 
    210225 
     226   /*! 
     227   \brief Find all inheritace among objects in a context. 
     228   \param [in] apply (true) write attributes of parent into ones of child if they are empty 
     229                     (false) write attributes of parent into a new container of child 
     230   \param [in] parent unused 
     231   */ 
    211232   void CContext::solveDescInheritance(bool apply, const CAttributeMap * const UNUSED(parent)) 
    212233   { 
     
    220241   //---------------------------------------------------------------- 
    221242 
     243   //! Verify if all root definition in the context have child. 
    222244   bool CContext::hasChild(void) const 
    223245   { 
     
    230252} 
    231253 
    232    //---------------------------------------------------------------- 
    233  
    234    void CContext::solveFieldRefInheritance(bool apply) 
    235    { 
    236       if (!this->hasId()) return; 
    237       vector<CField*> allField = CField::getAll() ; 
    238 //              = CObjectTemplate<CField>::GetAllVectobject(this->getId()); 
    239       std::vector<CField*>::iterator  
    240          it = allField.begin(), end = allField.end(); 
    241              
    242       for (; it != end; it++) 
    243       { 
    244          CField* field = *it; 
    245          field->solveRefInheritance(apply); 
    246       } 
    247    } 
     254//   //---------------------------------------------------------------- 
     255// 
     256//   void CContext::solveFieldRefInheritance(bool apply) 
     257//   { 
     258//      if (!this->hasId()) return; 
     259//      vector<CField*> allField = CField::getAll() ; 
     260////              = CObjectTemplate<CField>::GetAllVectobject(this->getId()); 
     261//      std::vector<CField*>::iterator 
     262//         it = allField.begin(), end = allField.end(); 
     263// 
     264//      for (; it != end; it++) 
     265//      { 
     266//         CField* field = *it; 
     267//         field->solveRefInheritance(apply); 
     268//      } 
     269//   } 
    248270 
    249271   //---------------------------------------------------------------- 
     
    256278   } 
    257279   ///--------------------------------------------------------------- 
    258     
     280 
     281   //! Initialize client side 
    259282   void CContext::initClient(MPI_Comm intraComm, MPI_Comm interComm) 
    260283   { 
    261284     hasClient=true ; 
    262285     client = new CContextClient(this,intraComm, interComm) ; 
    263    }  
    264  
     286   } 
     287 
     288   void CContext::setClientServerBuffer() 
     289   { 
     290     if (hasClient) 
     291     { 
     292       client->setBufferSize(getDataSize()); 
     293     } 
     294   } 
     295 
     296   //! Verify whether a context is initialized 
    265297   bool CContext::isInitialized(void) 
    266298   { 
    267299     return hasClient ; 
    268300   } 
    269      
     301 
     302   //! Initialize server 
    270303   void CContext::initServer(MPI_Comm intraComm,MPI_Comm interComm) 
    271304   { 
    272305     hasServer=true ; 
    273306     server = new CContextServer(this,intraComm,interComm) ; 
    274    }  
    275  
     307   } 
     308 
     309   //! Server side: Put server into a loop in order to listen message from client 
    276310   bool CContext::eventLoop(void) 
    277311   { 
    278312     return server->eventLoop() ; 
    279    }  
    280     
     313   } 
     314 
     315   //! Terminate a context 
    281316   void CContext::finalize(void) 
    282317   { 
     
    290325      } 
    291326   } 
    292         
    293         
    294   
    295     
     327 
     328   /*! 
     329   \brief Close all the context defintion and do processing data 
     330      After everything is well defined on client side, they will be processed and sent to server 
     331   From the version 2.0, sever and client work no more on the same database. Moreover, client(s) will send 
     332   all necessary information to server, from which each server can build its own database. 
     333   Because the role of server is to write out field data on a specific netcdf file, 
     334   the only information that it needs is the enabled files 
     335   and the active fields (fields will be written onto active files) 
     336   */ 
    296337   void CContext::closeDefinition(void) 
    297338   { 
    298       if (hasClient && !hasServer) sendCloseDefinition() ; 
    299        
    300       solveCalendar();          
    301           
    302       // Résolution des héritages pour le context actuel. 
    303       this->solveAllInheritance(); 
    304  
    305       //Initialisation du vecteur 'enabledFiles' contenant la liste des fichiers à sortir. 
    306       this->findEnabledFiles(); 
    307  
    308          
    309       this->processEnabledFiles() ; 
    310  
    311 /*         
     339     if (hasClient && !hasServer) 
     340     { 
     341       // After xml is parsed, there are some more works with post processing 
     342       postProcessing(); 
     343 
     344       setClientServerBuffer(); 
     345 
     346      // Send all attributes of current context to server 
     347      this->sendAllAttributesToServer(); 
     348 
     349      // We have enough information to send to server 
     350      // First of all, send all enabled files 
     351       sendEnabledFiles(); 
     352 
     353      // Then, send all enabled fields 
     354       sendEnabledFields(); 
     355 
     356      // After that, send all grid (if any) 
     357       sendRefGrid(); 
     358 
     359      // At last, we have all info of domain and axis, then send them 
     360       sendRefDomainsAxis(); 
     361    } 
     362 
     363    // Now tell server that it can process all messages from client 
     364    if (hasClient && !hasServer) this->sendCloseDefinition(); 
     365 
     366    // We have a xml tree on the server side and now, it should be also processed 
     367    if (hasClient && !hasServer) sendPostProcessing(); 
     368 
     369    // There are some processings that should be done after all of above. For example: check mask or index 
     370    if (hasClient && !hasServer) 
     371    { 
     372      this->solveAllRefOfEnabledFields(true); 
     373      this->buildAllExpressionOfEnabledFields(); 
     374    } 
     375 
     376//      if (hasClient) 
     377//      { 
     378//        //solveCalendar(); 
     379// 
     380//        // Résolution des héritages pour le context actuel. 
     381////        this->solveAllInheritance(); 
     382// 
     383// 
     384////        //Initialisation du vecteur 'enabledFiles' contenant la liste des fichiers à sortir. 
     385////        this->findEnabledFiles(); 
     386// 
     387//        this->processEnabledFiles() ; 
     388// 
     389//        this->solveAllGridRef(); 
     390//      } 
     391 
     392 
     393 
     394 
     395//      solveCalendar(); 
     396// 
     397//      // Résolution des héritages pour le context actuel. 
     398//      this->solveAllInheritance(); 
     399// 
     400//      //Initialisation du vecteur 'enabledFiles' contenant la liste des fichiers à sortir. 
     401//      this->findEnabledFiles(); 
     402// 
     403// 
     404//      this->processEnabledFiles() ; 
     405 
     406/* 
    312407      //Recherche des champs à sortir (enable à true + niveau de sortie correct) 
    313408      // pour chaque fichier précédemment listé. 
     
    324419*/ 
    325420      // Nettoyage de l'arborescence 
    326       CleanTree(); 
     421      if (hasClient && !hasServer) CleanTree(); // Only on client side?? 
     422//      if (hasClient) CleanTree(); 
    327423      if (hasClient) sendCreateFileHeader() ; 
    328424   } 
    329     
     425 
    330426   void CContext::findAllEnabledFields(void) 
    331427   { 
     
    333429     (void)this->enabledFiles[i]->getEnabledFields(); 
    334430   } 
    335     
    336     void CContext::processEnabledFiles(void) 
    337    { 
    338      for (unsigned int i = 0; i < this->enabledFiles.size(); i++) 
    339      this->enabledFiles[i]->processEnabledFile(); 
    340    } 
    341    
    342  
    343    void CContext::solveAllGridRef(void) 
    344    { 
    345      for (unsigned int i = 0; i < this->enabledFiles.size(); i++) 
    346      this->enabledFiles[i]->solveEFGridRef(); 
    347    } 
    348  
    349    void CContext::solveAllOperation(void) 
    350    { 
    351       for (unsigned int i = 0; i < this->enabledFiles.size(); i++) 
    352       this->enabledFiles[i]->solveEFOperation(); 
    353    } 
    354  
    355    void CContext::solveAllExpression(void) 
    356    { 
    357       for (unsigned int i = 0; i < this->enabledFiles.size(); i++) 
    358       this->enabledFiles[i]->solveEFExpression(); 
    359    } 
    360     
     431 
     432//    void CContext::processEnabledFiles(void) 
     433//   { 
     434//     for (unsigned int i = 0; i < this->enabledFiles.size(); i++) 
     435//     this->enabledFiles[i]->processEnabledFile(); 
     436//   } 
     437 
     438 
     439   void CContext::solveAllRefOfEnabledFields(bool sendToServer) 
     440   { 
     441     int size = this->enabledFiles.size(); 
     442     for (int i = 0; i < size; ++i) 
     443     { 
     444       this->enabledFiles[i]->solveAllRefOfEnabledFields(sendToServer); 
     445     } 
     446   } 
     447 
     448   void CContext::buildAllExpressionOfEnabledFields() 
     449   { 
     450     int size = this->enabledFiles.size(); 
     451     for (int i = 0; i < size; ++i) 
     452     { 
     453       this->enabledFiles[i]->buildAllExpressionOfEnabledFields(); 
     454     } 
     455   } 
     456 
     457//   void CContext::solveAllGridRef(void) 
     458//   { 
     459//     for (unsigned int i = 0; i < this->enabledFiles.size(); i++) 
     460//     this->enabledFiles[i]->solveEFGridRef(); 
     461//   } 
     462// 
     463//   void CContext::solveAllOperation(void) 
     464//   { 
     465//      for (unsigned int i = 0; i < this->enabledFiles.size(); i++) 
     466//      this->enabledFiles[i]->solveEFOperation(); 
     467//   } 
     468// 
     469//   void CContext::solveAllExpression(void) 
     470//   { 
     471//      for (unsigned int i = 0; i < this->enabledFiles.size(); i++) 
     472//      this->enabledFiles[i]->solveEFExpression(); 
     473//   } 
     474 
    361475   void CContext::solveAllInheritance(bool apply) 
    362476   { 
     
    368482      const vector<CFile*> allFiles=CFile::getAll() ; 
    369483 
     484     if (hasClient && !hasServer) 
    370485      for (unsigned int i = 0; i < allFiles.size(); i++) 
    371486         allFiles[i]->solveFieldRefInheritance(apply); 
     
    383498         } 
    384499         else enabledFiles.push_back(allFiles[i]); // otherwise true by default 
    385                 
     500 
    386501 
    387502      if (enabledFiles.size() == 0) 
     
    394509     std::vector<CFile*>::const_iterator 
    395510            it = this->enabledFiles.begin(), end = this->enabledFiles.end(); 
    396           
     511 
    397512     for (; it != end; it++) 
    398513     { 
     
    401516     } 
    402517   } 
    403     
     518 
     519   /*! 
     520   \brief Dispatch event received from client 
     521      Whenever a message is received in buffer of server, it will be processed depending on 
     522   its event type. A new event type should be added in the switch list to make sure 
     523   it processed on server side. 
     524   \param [in] event: Received message 
     525   */ 
    404526   bool CContext::dispatchEvent(CEventServer& event) 
    405527   { 
    406        
     528 
    407529      if (SuperClass::dispatchEvent(event)) return true ; 
    408530      else 
     
    422544             return true ; 
    423545             break ; 
     546           case EVENT_ID_POST_PROCESS: 
     547             recvPostProcessing(event) ; 
     548             return true ; 
     549             break ; 
    424550           default : 
    425551             ERROR("bool CContext::dispatchEvent(CEventServer& event)", 
     
    429555      } 
    430556   } 
    431     
     557 
     558   //! Client side: Send a message to server to make it close 
    432559   void CContext::sendCloseDefinition(void) 
    433560   { 
    434  
    435      CEventClient event(getType(),EVENT_ID_CLOSE_DEFINITION) ;    
     561     CEventClient event(getType(),EVENT_ID_CLOSE_DEFINITION) ; 
    436562     if (client->isServerLeader()) 
    437563     { 
     
    443569     else client->sendEvent(event) ; 
    444570   } 
    445     
     571 
     572   //! Server side: Receive a message of client announcing a context close 
    446573   void CContext::recvCloseDefinition(CEventServer& event) 
    447574   { 
    448        
     575 
    449576      CBufferIn* buffer=event.subEvents.begin()->buffer; 
    450577      string id; 
    451578      *buffer>>id ; 
    452       get(id)->closeDefinition() ; 
    453    } 
    454     
     579      get(id)->closeDefinition(); 
     580   } 
     581 
     582   //! Client side: Send a message to update calendar in each time step 
    455583   void CContext::sendUpdateCalendar(int step) 
    456584   { 
    457585     if (!hasServer) 
    458586     { 
    459        CEventClient event(getType(),EVENT_ID_UPDATE_CALENDAR) ;    
     587       CEventClient event(getType(),EVENT_ID_UPDATE_CALENDAR) ; 
    460588       if (client->isServerLeader()) 
    461589       { 
     
    468596     } 
    469597   } 
    470     
     598 
     599   //! Server side: Receive a message of client annoucing calendar update 
    471600   void CContext::recvUpdateCalendar(CEventServer& event) 
    472601   { 
    473        
     602 
    474603      CBufferIn* buffer=event.subEvents.begin()->buffer; 
    475604      string id; 
     
    477606      get(id)->recvUpdateCalendar(*buffer) ; 
    478607   } 
    479     
     608 
     609   //! Server side: Receive a message of client annoucing calendar update 
    480610   void CContext::recvUpdateCalendar(CBufferIn& buffer) 
    481611   { 
     
    484614      updateCalendar(step) ; 
    485615   } 
    486     
     616 
     617   //! Client side: Send a message to create header part of netcdf file 
    487618   void CContext::sendCreateFileHeader(void) 
    488619   { 
    489  
    490      CEventClient event(getType(),EVENT_ID_CREATE_FILE_HEADER) ;    
     620     CEventClient event(getType(),EVENT_ID_CREATE_FILE_HEADER) ; 
    491621     if (client->isServerLeader()) 
    492622     { 
     
    498628     else client->sendEvent(event) ; 
    499629   } 
    500     
     630 
     631   //! Server side: Receive a message of client annoucing the creation of header part of netcdf file 
    501632   void CContext::recvCreateFileHeader(CEventServer& event) 
    502633   { 
    503        
    504634      CBufferIn* buffer=event.subEvents.begin()->buffer; 
    505635      string id; 
     
    507637      get(id)->recvCreateFileHeader(*buffer) ; 
    508638   } 
    509     
     639 
     640   //! Server side: Receive a message of client annoucing the creation of header part of netcdf file 
    510641   void CContext::recvCreateFileHeader(CBufferIn& buffer) 
    511642   { 
    512643      createFileHeader() ; 
    513644   } 
    514     
     645 
     646   //! Client side: Send a message to do some post processing on server 
     647   void CContext::sendPostProcessing() 
     648   { 
     649     if (!hasServer) 
     650     { 
     651       CEventClient event(getType(),EVENT_ID_POST_PROCESS) ; 
     652       if (client->isServerLeader()) 
     653       { 
     654         CMessage msg ; 
     655         msg<<this->getId(); 
     656         event.push(client->getServerLeader(),1,msg) ; 
     657         client->sendEvent(event) ; 
     658       } 
     659       else client->sendEvent(event) ; 
     660     } 
     661   } 
     662 
     663   //! Server side: Receive a message to do some post processing 
     664   void CContext::recvPostProcessing(CEventServer& event) 
     665   { 
     666      CBufferIn* buffer=event.subEvents.begin()->buffer; 
     667      string id; 
     668      *buffer>>id; 
     669      get(id)->recvPostProcessing(*buffer); 
     670   } 
     671 
     672   //! Server side: Receive a message to do some post processing 
     673   void CContext::recvPostProcessing(CBufferIn& buffer) 
     674   { 
     675      postProcessing(); 
     676   } 
     677 
     678   /*! 
     679   \brief Do some simple post processings after parsing xml file 
     680      After the xml file (iodef.xml) is parsed, it is necessary to build all relations among 
     681   created object, e.g: inhertance among fields, domain, axis. After that, all fiels as well as their parents (reference fields), 
     682   which will be written out into netcdf files, are processed 
     683   */ 
     684   void CContext::postProcessing() 
     685   { 
     686     if (isPostProcessed) return; 
     687 
     688     this->solveCalendar(); 
     689 
     690     // Solve calendar for both side: client and server 
     691      this->solveCalendar(); 
     692 
     693      // Find all inheritance in xml structure 
     694      this->solveAllInheritance(); 
     695 
     696      //Initialisation du vecteur 'enabledFiles' contenant la liste des fichiers à sortir. 
     697      this->findEnabledFiles(); 
     698 
     699      // Find all enabled fields of each file 
     700      this->findAllEnabledFields(); 
     701 
     702      // Search and rebuild all reference object of enabled fields 
     703      this->solveAllRefOfEnabledFields(false); 
     704      isPostProcessed = true; 
     705   } 
     706 
     707   std::map<int, StdSize>& CContext::getDataSize() 
     708   { 
     709     std::set<StdString> domainIds; 
     710 
     711     // Find all reference domain and axis of all active fields 
     712     int numEnabledFiles = this->enabledFiles.size(); 
     713     for (int i = 0; i < numEnabledFiles; ++i) 
     714     { 
     715       std::vector<CField*> enabledFields = this->enabledFiles[i]->getEnabledFields(); 
     716       int numEnabledFields = enabledFields.size(); 
     717       for (int j = 0; j < numEnabledFields; ++j) 
     718       { 
     719         const std::pair<StdString, StdString>& prDomAxisId = enabledFields[j]->getDomainAxisIds(); 
     720         const std::map<int, StdSize> mapSize = enabledFields[j]->getGridDataSize(); 
     721         if (dataSize_.empty()) 
     722         { 
     723           dataSize_ = mapSize; 
     724           domainIds.insert(prDomAxisId.first); 
     725         } 
     726         else 
     727         { 
     728           if (domainIds.find(prDomAxisId.first) == domainIds.end()) 
     729           { 
     730             std::map<int, StdSize>::const_iterator it = mapSize.begin(), itE = mapSize.end(); 
     731             for (; it != itE; ++it) 
     732             { 
     733               if (0 < dataSize_.count(it->first)) dataSize_[it->first] += it->second; 
     734               else dataSize_.insert(make_pair(it->first, it->second)); 
     735             } 
     736           } 
     737 
     738         } 
     739 
     740       } 
     741     } 
     742 
     743     return dataSize_; 
     744   } 
     745 
     746   //! Client side: Send infomation of active files (files are enabled to write out) 
     747   void CContext::sendEnabledFiles() 
     748   { 
     749     int size = this->enabledFiles.size(); 
     750 
     751     // In a context, each type has a root definition, e.g: axis, domain, field. 
     752     // Every object must be a child of one of these root definition. In this case 
     753     // all new file objects created on server must be children of the root "file_definition" 
     754     StdString fileDefRoot("file_definition"); 
     755     CFileGroup* cfgrpPtr = CFileGroup::get(fileDefRoot); 
     756 
     757     for (int i = 0; i < size; ++i) 
     758     { 
     759       cfgrpPtr->sendCreateChild(this->enabledFiles[i]->getId()); 
     760       this->enabledFiles[i]->sendAllAttributesToServer(); 
     761       this->enabledFiles[i]->sendAddAllVariables(); 
     762     } 
     763   } 
     764 
     765   //! Client side: Send information of active fields (ones are written onto files) 
     766   void CContext::sendEnabledFields() 
     767   { 
     768     int size = this->enabledFiles.size(); 
     769     for (int i = 0; i < size; ++i) 
     770     { 
     771       this->enabledFiles[i]->sendEnabledFields(); 
     772     } 
     773   } 
     774 
     775   //! Client side: Send information of reference grid of active fields 
     776   void CContext::sendRefGrid() 
     777   { 
     778     std::set<StdString> gridIds; 
     779     int sizeFile = this->enabledFiles.size(); 
     780     CFile* filePtr(NULL); 
     781 
     782     // Firstly, find all reference grids of all active fields 
     783     for (int i = 0; i < sizeFile; ++i) 
     784     { 
     785       filePtr = this->enabledFiles[i]; 
     786       std::vector<CField*> enabledFields = filePtr->getEnabledFields(); 
     787       int sizeField = enabledFields.size(); 
     788       for (int numField = 0; numField < sizeField; ++numField) 
     789       { 
     790         if (0 != enabledFields[numField]->getRelGrid()) 
     791           gridIds.insert(CGrid::get(enabledFields[numField]->getRelGrid())->getId()); 
     792       } 
     793     } 
     794 
     795     // Create all reference grids on server side 
     796     StdString gridDefRoot("grid_definition"); 
     797     CGridGroup* gridPtr = CGridGroup::get(gridDefRoot); 
     798     std::set<StdString>::const_iterator it, itE = gridIds.end(); 
     799     for (it = gridIds.begin(); it != itE; ++it) 
     800     { 
     801       gridPtr->sendCreateChild(*it); 
     802       CGrid::get(*it)->sendAllAttributesToServer(); 
     803     } 
     804   } 
     805 
     806 
     807   //! Client side: Send information of reference domain and axis of active fields 
     808   void CContext::sendRefDomainsAxis() 
     809   { 
     810     std::set<StdString> domainIds; 
     811     std::set<StdString> axisIds; 
     812 
     813     // Find all reference domain and axis of all active fields 
     814     int numEnabledFiles = this->enabledFiles.size(); 
     815     for (int i = 0; i < numEnabledFiles; ++i) 
     816     { 
     817       std::vector<CField*> enabledFields = this->enabledFiles[i]->getEnabledFields(); 
     818       int numEnabledFields = enabledFields.size(); 
     819       for (int j = 0; j < numEnabledFields; ++j) 
     820       { 
     821         const std::pair<StdString, StdString>& prDomAxisId = enabledFields[j]->getDomainAxisIds(); 
     822         domainIds.insert(prDomAxisId.first); 
     823         axisIds.insert(prDomAxisId.second); 
     824       } 
     825     } 
     826 
     827     // Create all reference axis on server side 
     828     std::set<StdString>::iterator itDom, itAxis; 
     829     std::set<StdString>::const_iterator itE; 
     830 
     831     StdString axiDefRoot("axis_definition"); 
     832     CAxisGroup* axisPtr = CAxisGroup::get(axiDefRoot); 
     833     itE = axisIds.end(); 
     834     for (itAxis = axisIds.begin(); itAxis != itE; ++itAxis) 
     835     { 
     836       axisPtr->sendCreateChild(*itAxis); 
     837       CAxis::get(*itAxis)->sendAllAttributesToServer(); 
     838     } 
     839 
     840     // Create all reference domains on server side 
     841     StdString domDefRoot("domain_definition"); 
     842     CDomainGroup* domPtr = CDomainGroup::get(domDefRoot); 
     843     itE = domainIds.end(); 
     844     for (itDom = domainIds.begin(); itDom != itE; ++itDom) 
     845     { 
     846       domPtr->sendCreateChild(*itDom); 
     847       CDomain::get(*itDom)->sendAllAttributesToServer(); 
     848     } 
     849   } 
     850 
     851   //! Update calendar in each time step 
    515852   void CContext::updateCalendar(int step) 
    516853   { 
     
    519856      info(50)<<"updateCalendar : after : "<<calendar->getCurrentDate()<<endl ; 
    520857   } 
    521   
     858 
     859   //! Server side: Create header of netcdf file 
    522860   void CContext::createFileHeader(void ) 
    523861   { 
    524862      vector<CFile*>::const_iterator it ; 
    525           
     863 
    526864      for (it=enabledFiles.begin(); it != enabledFiles.end(); it++) 
    527865      { 
    528866         (*it)->initFile(); 
    529867      } 
    530    }  
    531     
     868   } 
     869 
     870   //! Get current context 
    532871   CContext* CContext::getCurrent(void) 
    533872   { 
    534873     return CObjectFactory::GetObject<CContext>(CObjectFactory::GetCurrentContextId()).get() ; 
    535874   } 
    536     
     875 
     876   /*! 
     877   \brief Set context with an id be the current context 
     878   \param [in] id identity of context to be set to current 
     879   */ 
    537880   void CContext::setCurrent(const string& id) 
    538881   { 
     
    540883     CGroupFactory::SetCurrentContextId(id); 
    541884   } 
    542     
     885 
     886  /*! 
     887  \brief Create a context with specific id 
     888  \param [in] id identity of new context 
     889  \return pointer to the new context or already-existed one with identity id 
     890  */ 
    543891  CContext* CContext::create(const StdString& id) 
    544892  { 
    545893    CContext::setCurrent(id) ; 
    546   
     894 
    547895    bool hasctxt = CContext::has(id); 
    548896    CContext* context = CObjectFactory::CreateObject<CContext>(id).get(); 
  • XIOS/trunk/src/node/context.hpp

    r501 r509  
    1818   class CContextClient ; 
    1919   class CContextServer ; 
    20     
    21     
     20 
     21 
    2222   /// ////////////////////// Déclarations ////////////////////// /// 
    2323   class CContextGroup; 
     
    3333 
    3434   ///-------------------------------------------------------------- 
    35  
     35  /*! 
     36  \class CContext 
     37   This class corresponds to the concrete presentation of context in xml file and in play an essential role in XIOS 
     38   Each object of this class contains all root definition of elements: files, fiels, domains, axis, etc, ... from which 
     39   we can have access to each element. 
     40   In fact, every thing must a be inside a particuliar context. After the xml file (iodef.xml) is parsed, 
     41   object of the class is created and its contains all information of other elements in the xml file. 
     42  */ 
    3643   class CContext 
    3744      : public CObjectTemplate<CContext> 
     
    4249         { 
    4350           EVENT_ID_CLOSE_DEFINITION,EVENT_ID_UPDATE_CALENDAR, 
    44            EVENT_ID_CREATE_FILE_HEADER,EVENT_ID_CONTEXT_FINALIZE 
     51           EVENT_ID_CREATE_FILE_HEADER,EVENT_ID_CONTEXT_FINALIZE, 
     52           EVENT_ID_POST_PROCESS 
    4553         } ; 
    46           
     54 
    4755         /// typedef /// 
    4856         typedef CObjectTemplate<CContext>   SuperClass; 
     
    7078 
    7179      public : 
    72        
     80 
    7381         /// Mutateurs /// 
    7482         void setCalendar(boost::shared_ptr<CCalendar> newCalendar); 
    75        
     83 
    7684         /// Accesseurs /// 
    7785         boost::shared_ptr<CCalendar>      getCalendar(void) const; 
    7886 
    79          /// Accesseurs statiques /// 
    80          static StdString GetName(void); 
    81          static StdString GetDefName(void);          
    82          static ENodeType GetType(void);          
    83  
    84          static CContextGroup* GetContextGroup(void); 
    85  
    86       public : 
    87  
    88          /// Traitements /// 
    89          virtual void solveDescInheritance(bool apply, const CAttributeMap * const parent = 0); 
    90          void solveFieldRefInheritance(bool apply); 
    91          void solveCalendar(void); 
    92  
    93          /// Autres méthodes statiques /// 
    94          static void ShowTree(StdOStream & out = std::clog); 
    95          static void CleanTree(void); 
    96  
    97          /// Test /// 
    98          virtual bool hasChild(void) const; 
    99  
     87      public : 
     88         // Initialize server or client 
     89         void initServer(MPI_Comm intraComm, MPI_Comm interComm) ; 
     90         void initClient(MPI_Comm intraComm, MPI_Comm interComm) ; 
     91         bool isInitialized(void) ; 
     92 
     93         // Put sever or client into loop state 
    10094         bool eventLoop(void) ; 
    10195         bool serverLoop(void) ; 
    10296         void clientLoop(void) ; 
    103          void initServer(MPI_Comm intraComm, MPI_Comm interComm) ; 
    104          void initClient(MPI_Comm intraComm, MPI_Comm interComm) ; 
    105          bool isInitialized(void) ; 
    106          CContextServer* server ; 
    107          CContextClient* client ; 
    108          bool hasClient ; 
    109          bool hasServer ; 
     97 
     98         // Process all information of calendar 
     99         void solveCalendar(void); 
     100 
     101         // Finalize a context 
    110102         void finalize(void) ; 
    111103         void closeDefinition(void) ; 
     104 
     105         // Some functions to process context 
    112106         void findAllEnabledFields(void); 
    113107         void processEnabledFiles(void) ; 
    114          void solveAllGridRef(void); 
    115          void solveAllOperation(void); 
    116          void solveAllExpression(void); 
    117108         void solveAllInheritance(bool apply=true) ; 
    118109         void findEnabledFiles(void); 
     
    120111         void updateCalendar(int step) ; 
    121112         void createFileHeader(void ) ; 
    122       // dispatch event 
    123          static bool dispatchEvent(CEventServer& event) ; 
     113         void solveAllRefOfEnabledFields(bool sendToServer); 
     114         void buildAllExpressionOfEnabledFields(); 
     115         void postProcessing(); 
     116 
     117         std::map<int, StdSize>& getDataSize(); 
     118         void setClientServerBuffer(); 
     119 
     120         // Send context close definition 
    124121         void sendCloseDefinition(void) ; 
     122         // There are something to send on closing context defintion 
    125123         void sendUpdateCalendar(int step) ; 
    126124         void sendCreateFileHeader(void) ; 
     125         void sendEnabledFiles(); 
     126         void sendEnabledFields(); 
     127         void sendRefDomainsAxis(); 
     128         void sendRefGrid(); 
     129         void sendPostProcessing(); 
     130 
     131         // Client side: Receive and process messages 
    127132         static void recvUpdateCalendar(CEventServer& event) ; 
    128133         void recvUpdateCalendar(CBufferIn& buffer) ; 
     
    130135         static void recvCreateFileHeader(CEventServer& event) ; 
    131136         void recvCreateFileHeader(CBufferIn& buffer) ; 
    132          static CContext* getCurrent(void) ; 
    133          static CContextGroup* getRoot(void) ; 
    134          static void setCurrent(const string& id) ; 
    135          static CContext* create(const string& id = "") ; 
    136           
    137       public : 
    138        
    139          /// Autres /// 
     137         static void recvSolveInheritanceContext(CEventServer& event); 
     138         void recvSolveInheritanceContext(CBufferIn& buffer); 
     139         static void recvPostProcessing(CEventServer& event); 
     140         void recvPostProcessing(CBufferIn& buffer); 
     141 
     142         // dispatch event 
     143         static bool dispatchEvent(CEventServer& event) ; 
     144 
     145      public: 
     146        // Get current context 
     147        static CContext* getCurrent(void); 
     148 
     149        // Get context root 
     150        static CContextGroup* getRoot(void); 
     151 
     152        // Set current context 
     153        static void setCurrent(const string& id); 
     154 
     155        // Create new context 
     156        static CContext* create(const string& id = ""); 
     157 
     158        /// Accesseurs statiques /// 
     159        static StdString GetName(void); 
     160        static StdString GetDefName(void); 
     161        static ENodeType GetType(void); 
     162 
     163        static CContextGroup* GetContextGroup(void); 
     164 
     165        // Some functions to visualize structure of current context 
     166        static void ShowTree(StdOStream & out = std::clog); 
     167        static void CleanTree(void); 
     168 
     169      public : 
     170         // Parse xml node and write all info into context 
    140171         virtual void parse(xml::CXMLNode & node); 
    141172 
     173         // Visualize a context 
    142174         virtual StdString toString(void) const; 
    143 //         virtual void toBinary  (StdOStream & os) const; 
    144 //         virtual void fromBinary(StdIStream & is); 
    145           
    146       public : 
    147        
    148          boost::shared_ptr<CCalendar>      calendar; 
    149   
     175 
     176 
     177         // Solve all inheritance relation in current context 
     178         virtual void solveDescInheritance(bool apply, const CAttributeMap * const parent = 0); 
     179 
     180         // Verify if all root definition in a context have children 
     181         virtual bool hasChild(void) const; 
     182 
     183      public : 
     184         // Calendar of context 
     185         boost::shared_ptr<CCalendar>   calendar; 
     186 
     187         // List of all enabled files (files on which fields are written) 
    150188         std::vector<CFile*> enabledFiles; 
     189 
     190         // Context root 
    151191         static shared_ptr<CContextGroup> root ; 
    152192 
     193         // Determine context on client or not 
     194         bool hasClient ; 
     195 
     196         // Determine context on server or not 
     197         bool hasServer ; 
     198 
     199         // Concrete context server 
     200         CContextServer* server ; 
     201 
     202         // Concrete contex client 
     203         CContextClient* client ; 
     204 
     205      private: 
     206         bool isPostProcessed; 
     207         std::map<int, StdSize> dataSize_; 
     208 
     209 
     210      public: // Some function maybe removed in the near future 
     211        // virtual void toBinary  (StdOStream & os) const; 
     212        // virtual void fromBinary(StdIStream & is); 
     213        // void solveAllGridRef(void); 
     214        // void solveAllOperation(void); 
     215        // void solveAllExpression(void); 
     216        // void solveFieldRefInheritance(bool apply); 
    153217 
    154218   }; // class CContext 
  • XIOS/trunk/src/node/domain.cpp

    r501 r509  
    1616 
    1717namespace xios { 
    18     
     18 
    1919   /// ////////////////////// Définitions ////////////////////// /// 
    2020 
    2121   CDomain::CDomain(void) 
    2222      : CObjectTemplate<CDomain>(), CDomainAttributes() 
    23       , isChecked(false),  relFiles() 
     23      , isChecked(false), relFiles(), isClientChecked(false) 
    2424   { /* Ne rien faire de plus */ } 
    2525 
    2626   CDomain::CDomain(const StdString & id) 
    2727      : CObjectTemplate<CDomain>(id), CDomainAttributes() 
    28       , isChecked(false), relFiles() 
     28      , isChecked(false), relFiles(), isClientChecked(false) 
    2929         { /* Ne rien faire de plus */ } 
    3030 
    3131   CDomain::~CDomain(void) 
    32    {  
     32   { 
    3333   } 
    3434 
     
    3737   const std::set<StdString> & CDomain::getRelFiles(void) const 
    3838   { 
    39       return (this->relFiles);  
    40    } 
    41  
    42    //---------------------------------------------------------------- 
    43     
     39      return (this->relFiles); 
     40   } 
     41 
     42   //---------------------------------------------------------------- 
     43 
    4444   bool CDomain::hasZoom(void) const 
    4545   { 
    46       return ((this->zoom_ni.getValue() != this->ni_glo.getValue()) &&  
     46      return ((this->zoom_ni.getValue() != this->ni_glo.getValue()) && 
    4747              (this->zoom_nj.getValue() != this->nj_glo.getValue())); 
    4848   } 
    49     
    50    //---------------------------------------------------------------- 
    51     
     49 
     50   //---------------------------------------------------------------- 
     51 
    5252   bool CDomain::isEmpty(void) const 
    5353   { 
    54       return ((this->zoom_ni_srv == 0) ||  
     54      return ((this->zoom_ni_srv == 0) || 
    5555              (this->zoom_nj_srv == 0)); 
    5656   } 
     
    8686               << "[ Id = " << this->getId() << " ] " 
    8787               << "The global domain is badly defined," 
    88                << " check the \'ni_glo\'  value !")  
     88               << " check the \'ni_glo\'  value !") 
    8989         } 
    9090         nj_glo=ni_glo ; 
     
    111111         ibegin=1 ; 
    112112         iend=1 ; 
    113           
     113 
    114114      } 
    115115      else if ((ni_glo.isEmpty() || ni_glo.getValue() <= 0 ) || 
     
    119119               << "[ Id = " << this->getId() << " ] " 
    120120               << "The global domain is badly defined," 
    121                << " check the \'ni_glo\' et \'nj_glo\' values !")  
     121               << " check the \'ni_glo\' et \'nj_glo\' values !") 
    122122      } 
    123123      checkLocalIDomain() ; 
    124124      checkLocalJDomain() ; 
    125        
     125 
    126126     if (i_index.isEmpty()) 
    127127     { 
    128128       i_index.resize(ni,nj) ; 
    129129       for(int j=0;j<nj;j++) 
    130          for(int i=0;i<ni;i++) i_index(i,j)=i ;    
     130         for(int i=0;i<ni;i++) i_index(i,j)=i ; 
    131131     } 
    132       
     132 
    133133     if (j_index.isEmpty()) 
    134134     { 
    135135        j_index.resize(ni,nj) ; 
    136136        for(int j=0;j<nj;j++) 
    137          for(int i=0;i<ni;i++) j_index(i,j)=j ;    
     137         for(int i=0;i<ni;i++) j_index(i,j)=j ; 
    138138     } 
    139   
     139 
    140140   } 
    141141 
     
    211211               << "Domain is wrong defined," 
    212212               << " Check the values : nj, nj_glo, jbegin, jend") ; 
    213                 
     213 
    214214     ibegin_client=ibegin ; iend_client=iend ; ni_client=ni ; 
    215215     jbegin_client=jbegin ; jend_client=jend ; nj_client=nj ; 
     
    221221   { 
    222222      using namespace std; 
    223        
     223 
    224224      int ibegin_mask = 0, 
    225225          jbegin_mask = 0, 
    226226          iend_mask = iend.getValue() - ibegin.getValue(), 
    227227          jend_mask = jend.getValue() - jbegin.getValue(); 
    228        
     228 
    229229      if (!zoom_ibegin.isEmpty()) 
    230230      { 
    231231         int zoom_iend = zoom_ibegin.getValue() + zoom_ni.getValue() - 1; 
    232232         int zoom_jend = zoom_jbegin.getValue() + zoom_nj.getValue() - 1; 
    233           
     233 
    234234         ibegin_mask = max (ibegin.getValue(), zoom_ibegin.getValue()); 
    235235         jbegin_mask = max (jbegin.getValue(), zoom_jbegin.getValue()); 
    236236         iend_mask   = min (iend.getValue(), zoom_iend); 
    237237         jend_mask   = min (jend.getValue(), zoom_jend); 
    238                   
     238 
    239239         ibegin_mask -= ibegin.getValue(); 
    240240         jbegin_mask -= jbegin.getValue(); 
     
    242242         jend_mask   -= jbegin.getValue(); 
    243243      } 
    244        
     244 
    245245 
    246246      if (!mask.isEmpty()) 
     
    251251                  <<"the mask has not the same size than the local domain"<<endl 
    252252                   <<"Local size is "<<ni<<"x"<<nj<<endl 
    253                   <<"Mask size is "<<mask.extent(0)<<"x"<<mask.extent(1));                  
     253                  <<"Mask size is "<<mask.extent(0)<<"x"<<mask.extent(1)); 
    254254         for (int i = 0; i < ni; i++) 
    255255         { 
     
    283283 
    284284   void CDomain::checkDomainData(void) 
    285    {      
     285   { 
    286286      if (!data_dim.isEmpty() && 
    287287         !(data_dim.getValue() == 1 || data_dim.getValue() == 2)) 
     
    378378            data_i_index.resize(dni) ; 
    379379            data_j_index.resize(dni) ; 
    380              
     380 
    381381            data_n_index.setValue(dni); 
    382              
     382 
    383383            for(int count = 0, j = 0; j  < data_nj.getValue(); j++) 
    384384            { 
     
    394394 
    395395   //---------------------------------------------------------------- 
    396     
     396 
    397397   void CDomain::completeLonLatClient(void) 
    398398   { 
     
    402402      CArray<double,2> bounds_lon_temp(nvertex,ni*nj) ; 
    403403      CArray<double,2> bounds_lat_temp(nvertex,ni*nj) ; 
    404        
     404 
    405405      if (type.isEmpty()) 
    406406      { 
    407         if ( lonvalue.numElements() == ni*nj && latvalue.numElements() == ni*nj )  
     407        if ( lonvalue.numElements() == ni*nj && latvalue.numElements() == ni*nj ) 
    408408        { 
    409409          type.setValue(type_attr::curvilinear) ; 
    410410          isCurvilinear=true ; 
    411411        } 
    412         else if ( lonvalue.numElements() == ni && latvalue.numElements() == nj )  
     412        else if ( lonvalue.numElements() == ni && latvalue.numElements() == nj ) 
    413413        { 
    414414          type.setValue(type_attr::regular) ; 
     
    429429      { 
    430430        for(j=0;j<nj;j++) 
    431           for(i=0;i<ni;i++)  
     431          for(i=0;i<ni;i++) 
    432432          { 
    433433            k=j*ni+i ; 
     
    436436            if (hasBounds) 
    437437            { 
    438               for(int n=0;n<nvertex;n++)  
     438              for(int n=0;n<nvertex;n++) 
    439439              { 
    440440                bounds_lon_temp(n,k)=bounds_lon(n,i) ; 
     
    444444          } 
    445445      } 
    446           
     446 
    447447      StdSize dm = zoom_ni_client * zoom_nj_client; 
    448448 
    449449      lonvalue.resize(dm); 
    450450      latvalue.resize(dm); 
    451           
     451 
    452452      for (int i = 0; i < zoom_ni_client; i++) 
    453453      { 
    454454        for (int j = 0; j < zoom_nj_client; j++) 
    455455        { 
    456           lonvalue(i + j * zoom_ni_client) = lonvalue_temp( (i + zoom_ibegin_client-ibegin) + (j + zoom_jbegin_client -jbegin)*ni );  
     456          lonvalue(i + j * zoom_ni_client) = lonvalue_temp( (i + zoom_ibegin_client-ibegin) + (j + zoom_jbegin_client -jbegin)*ni ); 
    457457          latvalue(i + j * zoom_ni_client) = latvalue_temp( (i + zoom_ibegin_client - ibegin)+(j + zoom_jbegin_client - jbegin)*ni ); 
    458458          if (hasBounds) 
    459459          { 
    460             for(int n=0;n<nvertex;n++)  
     460            for(int n=0;n<nvertex;n++) 
    461461            { 
    462               bounds_lon(n,i + j * zoom_ni_client) = bounds_lon_temp( n, (i + zoom_ibegin_client - ibegin) + (j + zoom_jbegin_client -jbegin)*ni );  
     462              bounds_lon(n,i + j * zoom_ni_client) = bounds_lon_temp( n, (i + zoom_ibegin_client - ibegin) + (j + zoom_jbegin_client -jbegin)*ni ); 
    463463              bounds_lat(n,i + j * zoom_ni_client) = bounds_lat_temp( n, (i + zoom_ibegin_client - ibegin)+(j + zoom_jbegin_client -jbegin)*ni ); 
    464464            } 
     
    467467      } 
    468468    } 
    469   
     469 
    470470 
    471471   //---------------------------------------------------------------- 
     
    487487            int zoom_iend = zoom_ibegin + zoom_ni - 1; 
    488488            int zoom_jend = zoom_jbegin + zoom_nj - 1; 
    489                  
     489 
    490490            if (zoom_ibegin < 1  || zoom_jbegin < 1 || zoom_iend > ni_glo || zoom_jend > nj_glo) 
    491491               ERROR("CDomain::checkZoom(void)", 
     
    496496      else 
    497497      { 
    498          zoom_ni = ni_glo;  
     498         zoom_ni = ni_glo; 
    499499         zoom_nj = nj_glo; 
    500500         zoom_ibegin = 1; 
    501501         zoom_jbegin = 1; 
    502502      } 
    503        
     503 
    504504      // compute client zoom indices 
    505505 
     
    510510      if (zoom_ni_client<0) zoom_ni_client=0 ; 
    511511 
    512      
     512 
    513513      int zoom_jend=zoom_jbegin+zoom_nj-1 ; 
    514514      zoom_jbegin_client = jbegin_client > zoom_jbegin ? jbegin_client : zoom_jbegin ; 
     
    518518 
    519519   } 
    520     
     520 
    521521   void CDomain::checkBounds(void) 
    522522   { 
     
    524524     { 
    525525       hasBounds=true ; 
    526         
     526 
    527527     } 
    528      else  
     528     else 
    529529     { 
    530530       hasBounds=false; 
     
    532532     } 
    533533   } 
    534              
    535    //---------------------------------------------------------------- 
    536  
    537    void CDomain::checkAttributes(void) 
    538    { 
    539       if (this->isChecked) return; 
    540       CContext* context=CContext::getCurrent() ; 
     534 
     535   //---------------------------------------------------------------- 
     536   // Divide function checkAttributes into 2 seperate ones 
     537   // This function only checks all attributes of current domain 
     538   void CDomain::checkAttributesOnClient() 
     539   { 
     540     if (this->isClientChecked) return; 
     541     CContext* context=CContext::getCurrent(); 
    541542 
    542543      this->checkDomain(); 
    543544      this->checkZoom(); 
    544545      this->checkBounds(); 
    545        
     546 
    546547      if (context->hasClient) 
    547548      { // CÃŽté client uniquement 
     
    550551         this->checkCompression(); 
    551552         this->completeLonLatClient(); 
     553         this->computeConnectedServer() ; 
    552554      } 
    553555      else 
     
    556558// ne sert plus //   this->completeLonLatServer(); 
    557559      } 
    558      
     560 
     561      this->isClientChecked = true; 
     562   } 
     563 
     564   // Send all checked attributes to server 
     565   void CDomain::sendCheckedAttributes() 
     566   { 
     567     if (!this->isClientChecked) checkAttributesOnClient(); 
     568     CContext* context=CContext::getCurrent() ; 
     569 
     570     if (this->isChecked) return; 
     571     if (context->hasClient) 
     572     { 
     573       sendServerAttribut() ; 
     574       sendLonLat() ; 
     575     } 
     576 
     577     this->isChecked = true; 
     578   } 
     579 
     580   void CDomain::checkAttributes(void) 
     581   { 
     582      if (this->isChecked) return; 
     583      CContext* context=CContext::getCurrent() ; 
     584 
     585      this->checkDomain(); 
     586      this->checkZoom(); 
     587      this->checkBounds(); 
     588 
     589      if (context->hasClient) 
     590      { // CÃŽté client uniquement 
     591         this->checkMask(); 
     592         this->checkDomainData(); 
     593         this