Ignore:
Timestamp:
10/06/20 10:19:12 (4 years ago)
Author:
ymipsl
Message:

Xios coupling :

"label" axis attribute is now working again.

YM

File:
1 edited

Legend:

Unmodified
Added
Removed
  • XIOS/dev/dev_ym/XIOS_COUPLING/src/node/axis.cpp

    r1943 r1950  
    18061806    { 
    18071807      { // send label 
     1808        // need to transform array of string (no fixed size for string) into array of array of char 
     1809        // to use connector to transfer 
     1810        // the strings must have fixed size which the maximum lenght over the string label.   
     1811        int maxSize=0 ; 
     1812        for(int i=0; i<label.numElements();i++)  
     1813          if (maxSize < label(i).size()) maxSize=label(i).size() ; 
     1814        MPI_Allreduce(MPI_IN_PLACE, &maxSize,1,MPI_INT,MPI_MAX, context->getIntraComm()) ; 
     1815        maxSize=maxSize+1 ; 
     1816        CArray<char,2> charArray(maxSize,label.numElements()) ; 
     1817        for(int j=0; j<label.numElements();j++)  
     1818        { 
     1819          const char* str = label(j).c_str() ; 
     1820          int strSize=label(j).size()+1 ; 
     1821          for(int i=0; i<strSize; i++) charArray(i,j) = str[i] ; 
     1822        } 
    18081823        CEventClient event(getType(), EVENT_ID_SEND_DISTRIBUTED_ATTRIBUTE); 
    18091824        CMessage message ; 
    1810         message<<serverAxisId<<string("label") ; 
    1811         // something to do ? => convert string label into char ? 
    1812         //clientToServerConnector_[client]->transfer(2, bounds, client, event,message) ; 
     1825        message<<serverAxisId<<string("label")<<maxSize ; 
     1826        scattererConnector.transfer(maxSize, charArray, client, event,message) ; 
    18131827      } 
    18141828    } 
     
    18371851      gathererConnector_->transfer(event, 2, value, 0.);  
    18381852      bounds.resize(2,n) ; 
    1839       if (bounds.numElements() > 0 ) bounds=CArray<double,2>(bounds.dataFirst(),shape(2,n),neverDeleteData) ;  
     1853      if (bounds.numElements() > 0 ) bounds=CArray<double,2>(value.dataFirst(),shape(2,n),neverDeleteData) ;  
    18401854    } 
    18411855    else if (type=="label") 
    18421856    { 
    1843         
     1857      int maxSize ; 
     1858      for (auto& subEvent : event.subEvents) (*subEvent.buffer) >> maxSize ; 
     1859      CArray<char,1> value ; 
     1860      gathererConnector_->transfer(event, maxSize, value, '\0');  
     1861      CArray<char,2> charArray(maxSize,n) ; 
     1862      label.resize(n) ; 
     1863      if (n>0) 
     1864      { 
     1865        charArray=CArray<char,2>(value.dataFirst(),shape(maxSize,n),neverDeleteData) ; 
     1866        for(int j=0;j<n;j++) 
     1867        { 
     1868          int strSize ; 
     1869          for(int i=0;i<maxSize;i++)  
     1870            if (charArray(i,j)=='\0') { strSize=i ; break; } 
     1871          string str(strSize,'\0') ; 
     1872          for(int i=0;i<strSize;i++) str[i]=charArray(i,j) ;  
     1873          label(j)=str ; 
     1874        } 
     1875      }  
    18441876    } 
    18451877  } 
Note: See TracChangeset for help on using the changeset viewer.