Changeset 2137 for XIOS/dev/dev_trunk_graph
- Timestamp:
- 05/30/21 23:30:01 (3 years ago)
- Location:
- XIOS/dev/dev_trunk_graph/src
- Files:
-
- 1 added
- 68 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/dev/dev_trunk_graph/src/array_new.hpp
r2019 r2137 7 7 #include "buffer_out.hpp" 8 8 #include "message.hpp" 9 #include "tv_data_display.h"10 #ifdef __GNUC__11 #include <typeinfo>12 #include <cxxabi.h>13 #endif14 9 #include <cmath> 15 10 … … 22 17 class CArray ; 23 18 24 template <typename T_numtype,int N_rank>25 int TV_ttf_display_type ( const CArray<T_numtype, N_rank>* array ) ;26 19 } 27 28 template <typename T_numtype,int N_rank>29 int TV_ttf_display_type ( const xios::CArray<T_numtype, N_rank>* array ) ;30 20 31 21 namespace xios … … 36 26 private: 37 27 bool initialized; 38 void inc_symbol(void) 39 { 40 TV_ttf_display_type(this); 41 } 28 42 29 public: 43 30 typedef typename Array<T_numtype,N_rank>::T_default_storage T_default_storage; … … 46 33 template<typename T_expr> explicit CArray(_bz_ArrayExpr<T_expr> expr) 47 34 : Array<T_numtype,N_rank>(expr) 48 , initialized(true) 49 { bool neverTrue ; neverTrue=false ; if(neverTrue) inc_symbol(); } 35 , initialized(true) { } 50 36 51 37 CArray(GeneralArrayStorage<N_rank> storage = T_default_storage()) 52 38 : Array<T_numtype,N_rank>(storage) 53 , initialized(false) 54 { bool neverTrue ; neverTrue=false ; if(neverTrue) inc_symbol();} 39 , initialized(false) { } 55 40 56 41 explicit CArray(int length0, GeneralArrayStorage<N_rank> storage = T_default_storage()) 57 42 : Array<T_numtype,N_rank>(length0, storage) 58 , initialized(true) 59 {bool neverTrue ; neverTrue=false ; if(neverTrue) inc_symbol();} 43 , initialized(true) { } 60 44 61 45 CArray(int length0, int length1, GeneralArrayStorage<N_rank> storage = T_default_storage()) 62 46 : Array<T_numtype,N_rank>(length0, length1, storage) 63 , initialized(true) 64 { bool neverTrue ; neverTrue=false ; if(neverTrue) inc_symbol();} 47 , initialized(true) { } 65 48 66 49 CArray(int length0, int length1, int length2, GeneralArrayStorage<N_rank> storage = T_default_storage()) 67 50 : Array<T_numtype,N_rank>(length0, length1, length2, storage) 68 , initialized(true) 69 {bool neverTrue ; neverTrue=false ; if(neverTrue) inc_symbol();} 51 , initialized(true) { } 70 52 71 53 CArray(int length0, int length1, int length2, int length3, GeneralArrayStorage<N_rank> storage = T_default_storage()) 72 54 : Array<T_numtype,N_rank>(length0, length1, length2, length3, storage) 73 , initialized(true) 74 {bool neverTrue ; neverTrue=false ; if(neverTrue) inc_symbol();} 55 , initialized(true) { } 75 56 76 57 CArray(int length0, int length1, int length2, int length3, int length4, GeneralArrayStorage<N_rank> storage = T_default_storage()) 77 58 : Array<T_numtype,N_rank>(length0,length1, length2, length3, length4, storage) 78 , initialized(true) 79 {bool neverTrue ; neverTrue=false ; if(neverTrue) inc_symbol();} 59 , initialized(true) { } 80 60 81 61 CArray(int length0, int length1, int length2, int length3, int length4, int length5, GeneralArrayStorage<N_rank> storage = T_default_storage()) 82 62 : Array<T_numtype,N_rank>(length0, length1, length2, length3, length4, length5, storage) 83 , initialized(true) 84 {bool neverTrue ; neverTrue=false ; if(neverTrue) inc_symbol();} 63 , initialized(true) { } 85 64 86 65 CArray(int length0, int length1, int length2, int length3, int length4, int length5, int length6, GeneralArrayStorage<N_rank> storage = T_default_storage()) 87 66 : Array<T_numtype,N_rank>(length0, length1, length2, length3, length4, length5, length6, storage) 88 , initialized(true) 89 {bool neverTrue ; neverTrue=false ; if(neverTrue) inc_symbol();} 67 , initialized(true) { } 90 68 91 69 CArray(int length0, int length1, int length2, int length3, int length4, int length5, int length6, int length7, 92 70 GeneralArrayStorage<N_rank> storage = T_default_storage()) 93 71 : Array<T_numtype,N_rank>(length0, length1, length2, length3, length4, length5, length6, length7, storage) 94 , initialized(true) 95 {bool neverTrue ; neverTrue=false ; if(neverTrue) inc_symbol();} 72 , initialized(true) { } 96 73 97 74 CArray(int length0, int length1, int length2, int length3, int length4, int length5, int length6, 98 75 int length7, int length8, GeneralArrayStorage<N_rank> storage = T_default_storage()) 99 76 : Array<T_numtype,N_rank>(length0, length1, length2, length3, length4, length5, length6, length7, length8, storage) 100 , initialized(true) 101 {bool neverTrue ; neverTrue=false ; if(neverTrue) inc_symbol();} 77 , initialized(true) { } 102 78 103 79 CArray(int length0, int length1, int length2, int length3, int length4, 104 80 int length5, int length6, int length7, int length8, int length9, GeneralArrayStorage<N_rank> storage = T_default_storage()) 105 81 : Array<T_numtype,N_rank>(length0, length1, length2, length3, length4, length5, length6, length7, length8, length9, storage) 106 , initialized(true) 107 {bool neverTrue ; neverTrue=false ; if(neverTrue) inc_symbol();} 82 , initialized(true) { } 108 83 109 84 CArray(int length0, int length1, int length2, int length3, int length4, int length5, int length6, 110 85 int length7, int length8, int length9, int length10, GeneralArrayStorage<N_rank> storage = T_default_storage()) 111 86 : Array<T_numtype,N_rank>(length0, length1, length2, length3, length4, length5, length6, length7, length8, length9, length10, storage) 112 , initialized(true) 113 {bool neverTrue ; neverTrue=false ; if(neverTrue) inc_symbol();} 87 , initialized(true) { } 114 88 115 89 CArray(T_numtype* restrict dataFirst, TinyVector<int, N_rank> shape, GeneralArrayStorage<N_rank> storage = T_default_storage()) 116 90 : Array<T_numtype,N_rank>(dataFirst, shape, storage) 117 , initialized(true) 118 {bool neverTrue ; neverTrue=false ; if(neverTrue) inc_symbol();} 91 , initialized(true) { } 119 92 120 93 CArray(T_numtype* restrict dataFirst, TinyVector<int, N_rank> shape, TinyVector<diffType, N_rank> stride, 121 94 GeneralArrayStorage<N_rank> storage = T_default_storage()) 122 95 : Array<T_numtype,N_rank>(dataFirst, shape, stride, storage) 123 , initialized(true) 124 {bool neverTrue ; neverTrue=false ; if(neverTrue) inc_symbol();} 96 , initialized(true) { } 125 97 126 98 CArray(T_numtype* restrict dataFirst, TinyVector<int, N_rank> shape, preexistingMemoryPolicy deletionPolicy, 127 99 GeneralArrayStorage<N_rank> storage = T_default_storage()) 128 100 : Array<T_numtype,N_rank>(dataFirst, shape, deletionPolicy, storage) 129 , initialized(true) 130 {bool neverTrue ; neverTrue=false ; if(neverTrue) inc_symbol();} 101 , initialized(true) { } 131 102 132 103 CArray(T_numtype* restrict dataFirst, TinyVector<int, N_rank> shape, TinyVector<diffType, N_rank> stride, 133 104 preexistingMemoryPolicy deletionPolicy, GeneralArrayStorage<N_rank> storage = T_default_storage()) 134 105 : Array<T_numtype,N_rank>(dataFirst, shape, stride, deletionPolicy, storage) 135 , initialized(true) 136 {bool neverTrue ; neverTrue=false ; if(neverTrue) inc_symbol();} 106 , initialized(true) { } 137 107 138 108 CArray(const TinyVector<int, N_rank>& extent, GeneralArrayStorage<N_rank> storage = T_default_storage()) 139 109 : Array<T_numtype,N_rank>(extent, storage) 140 , initialized(true) 141 {bool neverTrue ; neverTrue=false ; if(neverTrue) inc_symbol();} 110 , initialized(true) { } 142 111 143 112 CArray(const TinyVector<int, N_rank>& lbounds, const TinyVector<int, N_rank>& extent, 144 113 const GeneralArrayStorage<N_rank>& storage) 145 114 : Array<T_numtype,N_rank>(lbounds, extent, storage) 146 , initialized(true) 147 {bool neverTrue ; neverTrue=false ; if(neverTrue) inc_symbol();} 115 , initialized(true) { } 148 116 149 117 CArray(Range r0, GeneralArrayStorage<N_rank> storage = T_default_storage()) 150 118 : Array<T_numtype,N_rank>(r0, storage) 151 , initialized(true) 152 {bool neverTrue ; neverTrue=false ; if(neverTrue) inc_symbol();} 119 , initialized(true) { } 153 120 154 121 CArray(Range r0, Range r1, GeneralArrayStorage<N_rank> storage = T_default_storage()) 155 122 : Array<T_numtype,N_rank>(r0, r1, storage) 156 , initialized(true) 157 {bool neverTrue ; neverTrue=false ; if(neverTrue) inc_symbol();} 123 , initialized(true) { } 158 124 159 125 CArray(Range r0, Range r1, Range r2, GeneralArrayStorage<N_rank> storage = T_default_storage()) 160 126 : Array<T_numtype,N_rank>(r0, r1, r2, storage) 161 , initialized(true) 162 {bool neverTrue ; neverTrue=false ; if(neverTrue) inc_symbol();} 127 , initialized(true) { } 163 128 164 129 CArray(Range r0, Range r1, Range r2, Range r3, GeneralArrayStorage<N_rank> storage = T_default_storage()) 165 130 : Array<T_numtype,N_rank>(r0, r1, r2, r3, storage) 166 , initialized(true) 167 {bool neverTrue ; neverTrue=false ; if(neverTrue) inc_symbol();} 131 , initialized(true) { } 168 132 169 133 CArray(Range r0, Range r1, Range r2, Range r3, Range r4, GeneralArrayStorage<N_rank> storage = T_default_storage()) 170 134 : Array<T_numtype,N_rank>(r0, r1, r2, r3, r4, storage) 171 , initialized(true) 172 {bool neverTrue ; neverTrue=false ; if(neverTrue) inc_symbol();} 135 , initialized(true) { } 173 136 174 137 CArray(Range r0, Range r1, Range r2, Range r3, Range r4, Range r5, GeneralArrayStorage<N_rank> storage = T_default_storage()) 175 138 : Array<T_numtype,N_rank>(r0, r1, r2, r3, r4, r5, storage) 176 , initialized(true) 177 {bool neverTrue ; neverTrue=false ; if(neverTrue) inc_symbol();} 139 , initialized(true) { } 178 140 179 141 CArray(Range r0, Range r1, Range r2, Range r3, Range r4, Range r5, Range r6, 180 142 GeneralArrayStorage<N_rank> storage = T_default_storage()) 181 143 : Array<T_numtype,N_rank>(r0, r1, r2, r3, r4, r5, r6, storage) 182 , initialized(true) 183 {bool neverTrue ; neverTrue=false ; if(neverTrue) inc_symbol();} 144 , initialized(true) { } 184 145 185 146 CArray(Range r0, Range r1, Range r2, Range r3, Range r4, Range r5, Range r6, Range r7, 186 147 GeneralArrayStorage<N_rank> storage = T_default_storage()) 187 148 : Array<T_numtype,N_rank>(r0, r1, r2, r3, r4, r5, r6, r7, storage) 188 , initialized(true) 189 {bool neverTrue ; neverTrue=false ; if(neverTrue) inc_symbol();} 149 , initialized(true) { } 190 150 191 151 CArray(Range r0, Range r1, Range r2, Range r3, Range r4, Range r5, 192 152 Range r6, Range r7, Range r8, GeneralArrayStorage<N_rank> storage = T_default_storage()) 193 153 : Array<T_numtype,N_rank>(r0, r1, r2, r3, r4, r5, r6, r7, r8, storage) 194 , initialized(true) 195 {bool neverTrue ; neverTrue=false ; if(neverTrue) inc_symbol();} 154 , initialized(true) { } 196 155 197 156 CArray(Range r0, Range r1, Range r2, Range r3, Range r4, Range r5, 198 157 Range r6, Range r7, Range r8, Range r9, GeneralArrayStorage<N_rank> storage = T_default_storage()) 199 158 : Array<T_numtype,N_rank>(r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, storage) 200 , initialized(true) 201 {bool neverTrue ; neverTrue=false ; if(neverTrue) inc_symbol();} 159 , initialized(true) { } 202 160 203 161 CArray(Range r0, Range r1, Range r2, Range r3, Range r4, Range r5, Range r6, Range r7, 204 162 Range r8, Range r9, Range r10, GeneralArrayStorage<N_rank> storage = T_default_storage()) 205 163 : Array<T_numtype,N_rank>(r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, storage) 206 , initialized(true) 207 {bool neverTrue ; neverTrue=false ; if(neverTrue) inc_symbol();} 164 , initialized(true) { } 208 165 209 166 CArray(const CArray<T_numtype, N_rank>& array) 210 167 : Array<T_numtype,N_rank>(array) 211 , initialized(array.initialized) 212 {bool neverTrue ; neverTrue=false ; if(neverTrue) inc_symbol();} 168 , initialized(array.initialized) { } 213 169 214 170 CArray(const Array<T_numtype, N_rank>& array) 215 171 : Array<T_numtype,N_rank>(array) 216 , initialized(true) 217 {bool neverTrue ; neverTrue=false ; if(neverTrue) inc_symbol();} 172 , initialized(true) { } 218 173 219 174 CArray(const TinyVector<int,N_rank-1>& shape, int lastExtent, const GeneralArrayStorage<N_rank>& storage) 220 175 : Array<T_numtype,N_rank>(shape, lastExtent, storage) 221 , initialized(true) 222 {bool neverTrue ; neverTrue=false ; if(neverTrue) inc_symbol();} 176 , initialized(true) { } 223 177 224 178 CArray(Array<T_numtype, N_rank>& array, Range r0) 225 179 : Array<T_numtype,N_rank>(array, r0) 226 , initialized(true) 227 {bool neverTrue ; neverTrue=false ; if(neverTrue) inc_symbol();} 180 , initialized(true) { } 228 181 229 182 CArray(Array<T_numtype, N_rank>& array, Range r0, Range r1) 230 183 : Array<T_numtype,N_rank>(array, r0, r1) 231 , initialized(true) 232 {bool neverTrue ; neverTrue=false ; if(neverTrue) inc_symbol();} 184 , initialized(true) { } 233 185 234 186 CArray(Array<T_numtype, N_rank>& array, Range r0, Range r1, Range r2) 235 187 : Array<T_numtype,N_rank>( array, r0, r1, r2) 236 , initialized(true) 237 {bool neverTrue ; neverTrue=false ; if(neverTrue) inc_symbol();} 188 , initialized(true) { } 238 189 239 190 CArray(Array<T_numtype, N_rank>& array, Range r0, Range r1, Range r2, Range r3) 240 191 : Array<T_numtype,N_rank>(array, r0, r1, r2, r3) 241 , initialized(true) 242 {bool neverTrue ; neverTrue=false ; if(neverTrue) inc_symbol();} 192 , initialized(true) { } 243 193 244 194 CArray(Array<T_numtype, N_rank>& array, Range r0, Range r1, Range r2, 245 195 Range r3, Range r4) 246 196 : Array<T_numtype,N_rank>(array, r0, r1, r2, r3, r4) 247 , initialized(true) 248 {bool neverTrue ; neverTrue=false ; if(neverTrue) inc_symbol();} 197 , initialized(true) { } 249 198 250 199 CArray(Array<T_numtype, N_rank>& array, Range r0, Range r1, Range r2, 251 200 Range r3, Range r4, Range r5) 252 201 : Array<T_numtype,N_rank>( array, r0, r1, r2, r3, r4, r5) 253 , initialized(true) 254 {bool neverTrue ; neverTrue=false ; if(neverTrue) inc_symbol();} 202 , initialized(true) { } 255 203 256 204 CArray(Array<T_numtype, N_rank>& array, Range r0, Range r1, Range r2, Range r3, 257 205 Range r4, Range r5, Range r6) 258 206 : Array<T_numtype,N_rank>( array, r0, r1, r2, r3, r4, r5, r6) 259 , initialized(true) 260 {bool neverTrue ; neverTrue=false ; if(neverTrue) inc_symbol();} 207 , initialized(true) { } 261 208 262 209 CArray(Array<T_numtype, N_rank>& array, Range r0, Range r1, Range r2, Range r3, Range r4, 263 210 Range r5, Range r6, Range r7) 264 211 : Array<T_numtype,N_rank>(array, r0, r1, r2, r3, r4, r5, r6, r7) 265 , initialized(true) 266 {bool neverTrue ; neverTrue=false ; if(neverTrue) inc_symbol();} 212 , initialized(true) { } 267 213 268 214 CArray(Array<T_numtype, N_rank>& array, Range r0, Range r1, Range r2, Range r3, Range r4, Range r5, 269 215 Range r6, Range r7, Range r8) 270 216 : Array<T_numtype,N_rank>(array, r0, r1, r2, r3, r4, r5, r6, r7, r8) 271 , initialized(true) 272 {bool neverTrue ; neverTrue=false ; if(neverTrue) inc_symbol();} 217 , initialized(true) { } 273 218 274 219 CArray(Array<T_numtype, N_rank>& array, Range r0, Range r1, Range r2, Range r3, Range r4, Range r5, 275 220 Range r6, Range r7, Range r8, Range r9) 276 221 : Array<T_numtype,N_rank>(array, r0, r1, r2, r3, r4, r5, r6, r7, r8, r9) 277 , initialized(true) 278 {bool neverTrue ; neverTrue=false ; if(neverTrue) inc_symbol();} 222 , initialized(true) { } 279 223 280 224 CArray(Array<T_numtype, N_rank>& array, Range r0, Range r1, Range r2, Range r3, Range r4, Range r5, Range r6, 281 225 Range r7, Range r8, Range r9, Range r10) 282 226 : Array<T_numtype,N_rank>(array, r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10) 283 , initialized(true) 284 {bool neverTrue ; neverTrue=false ; if(neverTrue) inc_symbol();} 227 , initialized(true) { } 285 228 286 229 CArray(Array<T_numtype, N_rank>& array, const RectDomain<N_rank>& subdomain) 287 230 : Array<T_numtype,N_rank>(array, subdomain) 288 , initialized(true) 289 {bool neverTrue ; neverTrue=false ; if(neverTrue) inc_symbol();} 231 , initialized(true) { } 290 232 291 233 CArray(Array<T_numtype, N_rank>& array, const StridedDomain<N_rank>& subdomain) 292 234 : Array<T_numtype,N_rank>(array, subdomain) 293 , initialized(true) 294 {bool neverTrue ; neverTrue=false ; if(neverTrue) inc_symbol();} 235 , initialized(true) { } 295 236 296 237 template<int N_rank2, typename R0, typename R1, typename R2, typename R3, typename R4, typename R5, … … 299 240 : Array<T_numtype,N_rank>(array, r0,r1, r2, r3, r4, r5, r6, r7, r8, r9, r10) 300 241 , initialized(true) 301 { bool neverTrue ; neverTrue=false ; bool neverTrue ; neverTrue=false ; if(neverTrue) inc_symbol();}242 { } 302 243 303 244 virtual ~CArray() {} … … 569 510 virtual std::vector<T_numtype> getVector(void) { return vector<T_numtype>(this->dataFirst(),this->dataFirst()+this->numElements()) ;} 570 511 static size_t size(sizeType numElements) { return (N_rank + 1) * sizeof(int) + sizeof(size_t) + numElements * sizeof(T_numtype); } 571 572 static int show_TV_ttf_display_type ( const CArray<T_numtype,N_rank>* array ) 573 { 574 int status ; 575 if (array->isEmpty()) 576 { 577 status = TV_ttf_add_row("State", TV_ttf_type_ascii_string,"(empty)") ; 578 if (status != TV_ttf_ec_ok) return TV_ttf_format_raw ; 579 else return TV_ttf_format_ok_elide ; 580 } 581 else 582 { 583 char tname[128] ; 584 char bname[128] = "value_type" ; 585 #ifdef __GNUC__ 586 size_t size = sizeof(bname) ; 587 abi::__cxa_demangle(typeid(T_numtype).name(), bname, &size, &status) ; 588 if (status !=0) return TV_ttf_format_raw ; 589 #endif 590 int dim = array->dimensions() ; 591 if (dim==1) snprintf (tname, sizeof(tname), "%s[%d]", bname, array->extent(0)); 592 if (dim==2) snprintf (tname, sizeof(tname), "%s[%d][%d]", bname, array->extent(1), array->extent(0)); 593 if (dim==3) snprintf (tname, sizeof(tname), "%s[%d][%d][%d]", bname, array->extent(2), array->extent(1), array->extent(3)); 594 if (dim==4) snprintf (tname, sizeof(tname), "%s[%d][%d][%d][%d]", bname, array->extent(0), array->extent(1), array->extent(2), array->extent(3)); 595 if (dim==5) snprintf (tname, sizeof(tname), "%s[%d][%d][%d][%d][%d]", bname, array->extent(4), array->extent(3), array->extent(2), array->extent(1) 596 ,array->extent(0)); 597 if (dim==6) snprintf (tname, sizeof(tname), "%s[%d][%d][%d][%d][%d][%d]", bname, array->extent(5), array->extent(4), array->extent(3), array->extent(2) 598 ,array->extent(1),array->extent(0)); 599 if (dim==7) snprintf (tname, sizeof(tname), "%s[%d][%d][%d][%d][%d][%d][%d]", bname, array->extent(6), array->extent(5), array->extent(4), array->extent(3) 600 ,array->extent(2),array->extent(1),array->extent(0)); 601 status = TV_ttf_add_row("array_values", tname, array->dataFirst()) ; 602 if (status != TV_ttf_ec_ok) return TV_ttf_format_raw ; 603 else return TV_ttf_format_ok ; 604 } 605 } 606 607 608 static int TV_ttf_display_type ( const CArray<T_numtype,N_rank>* array ) 609 { 610 return show_TV_ttf_display_type (array) ; 611 } 612 512 613 513 virtual CBaseType* clone(void) const { return new CArray(*this); } 614 514 … … 642 542 643 543 }; 644 645 646 #define macrotyperank(_TYPE_,_RANK_)\647 template<> int CArray<_TYPE_,_RANK_>::TV_ttf_display_type( const CArray<_TYPE_,_RANK_>* array ) \648 {\649 return show_TV_ttf_display_type (array) ;\650 }651 652 #define macrotype(_TYPE_)\653 macrotyperank(_TYPE_,1)\654 macrotyperank(_TYPE_,2)\655 macrotyperank(_TYPE_,3)\656 macrotyperank(_TYPE_,4)\657 macrotyperank(_TYPE_,5)\658 macrotyperank(_TYPE_,6)\659 macrotyperank(_TYPE_,7)660 661 macrotype(double)662 macrotype(int)663 macrotype(bool)664 macrotype(size_t)665 macrotype(float)666 macrotype(string)667 668 #undef macrotyperank669 #undef macrotype670 544 671 545 -
XIOS/dev/dev_trunk_graph/src/attribute_array.hpp
r2019 r2137 66 66 virtual void generateFortranInterfaceGetDeclaration(ostream& oss,const string& className) ; 67 67 68 static int show_TV_ttf_display_type ( const CAttributeArray<T_numtype,N_rank>* array )69 {70 int status ;71 if (array->isEmpty())72 {73 status = TV_ttf_add_row("State", TV_ttf_type_ascii_string,"(empty)") ;74 if (status != TV_ttf_ec_ok) return TV_ttf_format_raw ;75 else return TV_ttf_format_ok_elide ;76 }77 else78 {79 char tname[128] ;80 char bname[128] = "value_type" ;81 #ifdef __GNUC__82 size_t size = sizeof(bname) ;83 abi::__cxa_demangle(typeid(T_numtype).name(), bname, &size, &status) ;84 if (status !=0) return TV_ttf_format_raw ;85 #endif86 int dim = array->dimensions() ;87 if (dim==1) snprintf (tname, sizeof(tname), "%s[%d]", bname, array->extent(0));88 if (dim==2) snprintf (tname, sizeof(tname), "%s[%d][%d]", bname, array->extent(1), array->extent(0));89 if (dim==3) snprintf (tname, sizeof(tname), "%s[%d][%d][%d]", bname, array->extent(2), array->extent(1), array->extent(3));90 if (dim==4) snprintf (tname, sizeof(tname), "%s[%d][%d][%d][%d]", bname, array->extent(0), array->extent(1), array->extent(2), array->extent(3));91 if (dim==5) snprintf (tname, sizeof(tname), "%s[%d][%d][%d][%d][%d]", bname, array->extent(4), array->extent(3), array->extent(2), array->extent(1)92 ,array->extent(0));93 if (dim==6) snprintf (tname, sizeof(tname), "%s[%d][%d][%d][%d][%d][%d]", bname, array->extent(5), array->extent(4), array->extent(3), array->extent(2)94 ,array->extent(1),array->extent(0));95 if (dim==7) snprintf (tname, sizeof(tname), "%s[%d][%d][%d][%d][%d][%d][%d]", bname, array->extent(6), array->extent(5), array->extent(4), array->extent(3)96 ,array->extent(2),array->extent(1),array->extent(0));97 status = TV_ttf_add_row("array_values", tname, array->dataFirst()) ;98 if (status != TV_ttf_ec_ok) return TV_ttf_format_raw ;99 else return TV_ttf_format_ok ;100 }101 }102 103 104 static int TV_ttf_display_type ( const CAttributeArray<T_numtype,N_rank>* array )105 {106 return CAttributeArray<T_numtype,N_rank>::show_TV_ttf_display_type (array) ;107 }108 109 68 private : 110 69 bool isEqual_(const CAttributeArray& attr); … … 119 78 120 79 121 #define macrotyperank(_TYPE_,_RANK_)\122 template<> int CAttributeArray<_TYPE_,_RANK_>::TV_ttf_display_type(const CAttributeArray<_TYPE_,_RANK_>* array ) \123 {\124 return CAttributeArray<_TYPE_,_RANK_>::show_TV_ttf_display_type (array) ;\125 }126 127 #define macrotype(_TYPE_)\128 macrotyperank(_TYPE_,1)\129 macrotyperank(_TYPE_,2)\130 macrotyperank(_TYPE_,3)\131 macrotyperank(_TYPE_,4)\132 macrotyperank(_TYPE_,5)\133 macrotyperank(_TYPE_,6)\134 macrotyperank(_TYPE_,7)135 136 macrotype(double)137 macrotype(int)138 macrotype(bool)139 macrotype(size_t)140 macrotype(float)141 macrotype(string)142 143 #undef macrotyperank144 #undef macrotype145 80 } // namespace xios 146 81 -
XIOS/dev/dev_trunk_graph/src/attribute_array_decl.cpp
r1158 r2137 19 19 template class CAttributeArray<StdString,1> ; 20 20 template class CAttributeArray<StdString,2> ; 21 21 22 } -
XIOS/dev/dev_trunk_graph/src/attribute_array_impl.hpp
r2019 r2137 14 14 CAttributeArray<T_numtype, N_rank>::CAttributeArray(const StdString & id) 15 15 : CAttribute(id) 16 { bool alwaysFalse ; alwaysFalse=false ; if (alwaysFalse) TV_ttf_display_type(this);}16 { } 17 17 18 18 template <typename T_numtype, int N_rank> … … 20 20 : CAttribute(id) 21 21 { 22 bool alwaysFalse ; alwaysFalse=false ; if (alwaysFalse) TV_ttf_display_type(this);23 22 this->setValue(value); 24 23 } … … 28 27 : CAttribute(id) 29 28 { 30 bool alwaysFalse ; alwaysFalse=false ; if (alwaysFalse) TV_ttf_display_type(this);31 29 umap.insert(umap.end(), std::make_pair(id, this)); 32 30 } … … 37 35 : CAttribute(id) 38 36 { 39 bool alwaysFalse ; alwaysFalse=false ; if (alwaysFalse) TV_ttf_display_type(this);40 37 this->setValue(value); 41 38 umap.insert(umap.end(), std::make_pair(id, this)); -
XIOS/dev/dev_trunk_graph/src/attribute_enum_impl.hpp
r2026 r2137 10 10 namespace xios 11 11 { 12 /// ////////////////////// D efinitions ////////////////////// ///12 /// ////////////////////// Définitions ////////////////////// /// 13 13 template <class T> 14 14 CAttributeEnum<T>::CAttributeEnum(const StdString & id) -
XIOS/dev/dev_trunk_graph/src/attribute_template.hpp
r2019 r2137 12 12 #include "buffer_out.hpp" 13 13 #include "type.hpp" 14 #include "tv_data_display.h"15 16 #ifdef __GNUC__17 #include <typeinfo>18 #include <cxxabi.h>19 #endif20 14 21 15 namespace xios … … 43 37 CAttributeTemplate(const StdString & id, const ValueType & value, 44 38 xios_map<StdString, CAttribute*> & umap); 39 // CAttributeTemplate(const CAttribute & attribut) throw (CException); 40 // CAttributeTemplate(const CAttribute * const attribut); // Not implemented. 45 41 46 42 public : … … 48 44 /// Accesseur /// 49 45 ValueType getValue(void) const; 46 // ValueType* getRef(void) ; 50 47 51 48 /// Mutateurs /// … … 74 71 virtual StdString toString(void) const { return _toString();} 75 72 virtual void fromString(const StdString & str) { if (str==resetInheritanceStr) { reset(); _canInherite=false ;} else _fromString(str);} 76 73 // virtual CAttributeTemplate* clone() const {} 74 // virtual void toBinary (StdOStream & os) const; 75 // virtual void fromBinary(StdIStream & is); 77 76 virtual StdString dump(void) const { return _dump();} 78 77 virtual StdString dumpGraph(void) const { return _dumpGraph();} … … 80 79 virtual bool toBuffer (CBufferOut& buffer) const { return _toBuffer(buffer);} 81 80 virtual bool fromBuffer(CBufferIn& buffer) { return _fromBuffer(buffer); } 81 // virtual size_t size(void) const; 82 82 virtual void generateCInterface(ostream& oss,const string& className) ; 83 83 virtual void generateFortran2003Interface(ostream& oss,const string& className) ; … … 88 88 virtual void generateFortranInterfaceGetBody_(ostream& oss,const string& className) ; 89 89 virtual void generateFortranInterfaceGetDeclaration(ostream& oss,const string& className) ; 90 91 static int show_TV_ttf_display_type ( const CAttributeTemplate<T>* attr) 92 { 93 int status ; 94 if (attr->isEmpty()) 95 { 96 status = TV_ttf_add_row("State", TV_ttf_type_ascii_string,"(empty)") ; 97 if (status != TV_ttf_ec_ok) return TV_ttf_format_raw ; 98 else return TV_ttf_format_ok_elide ; 99 } 100 else 101 { 102 char tname[128] ; 103 char bname[128] = "ValueType" ; 104 #ifdef __GNUC__ 105 size_t size = sizeof(bname) ; 106 abi::__cxa_demangle(typeid(T).name(), bname, &size, &status) ; 107 if (status !=0) return TV_ttf_format_raw ; 108 #endif 109 snprintf (tname, sizeof(tname), "%s", bname); 110 if (typeid(T)==typeid(string)) 111 status = TV_ttf_add_row("values", TV_ttf_type_ascii_string, ((string*)(attr->ptrValue))->c_str() ); 112 else status = TV_ttf_add_row("values", tname, attr->ptrValue) ; 113 if (status != TV_ttf_ec_ok) return TV_ttf_format_raw ; 114 else return TV_ttf_format_ok_elide ; 115 } 116 } 117 118 static int TV_ttf_display_type ( const CAttributeTemplate<T>* attr ) 119 { 120 return show_TV_ttf_display_type (attr) ; 121 } 90 // virtual void generateFortranInterfaceIsDefinedDeclaration_(ostream& oss,const string& className) ; 91 // virtual void generateFortranInterfaceIsDefinedBody_(ostream& oss,const string& className) ; 92 // virtual void generateFortranInterfaceIsDefinedDeclaration(ostream& oss,const string& className) ; 122 93 123 94 … … 138 109 }; // class CAttribute 139 110 140 #define macrotype(_TYPE_)\141 template<> int CAttributeTemplate<_TYPE_>::TV_ttf_display_type( const CAttributeTemplate<_TYPE_>* attr ) \142 {\143 return show_TV_ttf_display_type (attr) ;\144 }145 146 macrotype(double)147 macrotype(int)148 macrotype(bool)149 macrotype(string)150 //macrotype(CDate)151 //macrotype(CDuration)152 #undef macrotype153 111 154 112 template <class T> void FromBinary(StdIStream & is, T & obj); -
XIOS/dev/dev_trunk_graph/src/attribute_template_decl.cpp
r537 r2137 12 12 template class CAttributeTemplate<CDate> ; 13 13 template class CAttributeTemplate<CDuration> ; 14 14 15 } -
XIOS/dev/dev_trunk_graph/src/attribute_template_impl.hpp
r2019 r2137 24 24 this->setValue(value); 25 25 } 26 26 /* 27 template <class T> 28 CAttributeTemplate<T>::CAttributeTemplate(const CAttribute & attribut) 29 throw (CException) 30 : CAttribute(attribut) 31 { 32 if (!attribut.isEmpty() && !attribut.isType<T>()) 33 ERROR("CAttributeTemplate", << "Invalid instantiation !"); 34 } 35 */ 27 36 template <class T> 28 37 CAttributeTemplate<T>::CAttributeTemplate(const StdString & id, … … 42 51 umap.insert(umap.end(), std::make_pair(id, this)); 43 52 } 44 53 /* 54 template <class T> 55 CAttributeTemplate<T>::~CAttributeTemplate(void) 56 { 57 // this->CType<T>::reset() ; 58 // this->clear(); 59 } 60 */ 45 61 ///-------------------------------------------------------------- 46 62 template <class T> … … 69 85 { 70 86 return CType<T>::get() ; 71 } 72 73 87 88 /* 89 if (SuperClass::isEmpty()) 90 { 91 ERROR("T CAttributeTemplate<T>::getValue(void) const", 92 << "[ id = " << this->getId() << "]" 93 << " L'attribut est requis mais n'est pas défini !"); 94 } 95 return (SuperClass::getValue<T>()); 96 */ 97 } 98 99 /* 100 template <class T> 101 T* CAttributeTemplate<T>::getRef(void) 102 { 103 if (SuperClass::isEmpty()) 104 { 105 ERROR("T CAttributeTemplate<T>::getValue(void) const", 106 << "[ id = " << this->getId() << "]" 107 << " L'attribut est requis mais n'est pas défini !"); 108 } 109 return (SuperClass::getRef<T>()); 110 } 111 */ 74 112 75 113 template <class T> … … 77 115 { 78 116 CType<T>::set(value) ; 117 // SuperClass::setValue<T>(value); 79 118 } 80 119 … … 140 179 { 141 180 this->setValue(value); 181 // return (this->getValue()); 142 182 return *this; 143 183 } -
XIOS/dev/dev_trunk_graph/src/buffer_client.cpp
r2019 r2137 7 7 #include "mpi.hpp" 8 8 #include "tracer.hpp" 9 #include "timeline_events.hpp" 9 10 10 11 namespace xios … … 200 201 201 202 lockBuffer(); 203 count=*bufferCount[current] ; 204 205 if (resizingBufferStep_ > 0 ) return false ; 206 202 207 if (size > bufferSize) 203 ERROR("bool CClientBuffer::isBufferFree(StdSize size)", 204 << "The requested size (" << size << " bytes) is too big to fit the buffer (" << bufferSize << " bytes), please increase the client buffer size." << endl); 208 { 209 // ERROR("bool CClientBuffer::isBufferFree(StdSize size)", 210 // << "The requested size (" << size << " bytes) is too big to fit the buffer (" << bufferSize << " bytes), please increase the client buffer size." << endl); 211 resizingBufferStep_=1 ; 212 newBufferSize_=size ; 213 return false ; 214 } 205 215 206 216 if (size > maxEventSize) … … 214 224 if (size > maxRequestSize) maxRequestSize = size; 215 225 } 216 217 count=*bufferCount[current] ; 218 return (size <= remain()); 226 227 if (size > remain()) 228 { 229 if (isGrowableBuffer_) 230 { 231 resizingBufferStep_ = 1 ; 232 newBufferSize_ = (count+size)*growFactor_ ; 233 } 234 return false ; 235 } 236 else return true ; 219 237 } 220 238 … … 276 294 if (!pending) 277 295 { 278 if (!send) return false ; 296 if (!send && resizingBufferStep_==0 ) return false ; 297 279 298 if (count > 0) 280 299 { … … 284 303 { 285 304 MPI_Issend(buffer[current], count, MPI_CHAR, serverRank, 20, interComm, &request); 305 if (resizingBufferStep_==3) resizingBufferStep_=0 ; 286 306 pending = true; 287 307 // *control[current]=0 ; … … 295 315 count = 0; 296 316 } 297 else unlockBuffer() ; 317 else 318 { 319 unlockBuffer() ; 320 } 298 321 } 322 else 323 { 324 if (resizingBufferStep_==2) resizeBuffer(newBufferSize_) ; 325 if (resizingBufferStep_==1) resizeBufferNotify() ; 326 } 299 327 } 300 328 301 329 return pending; 330 } 331 332 void CClientBuffer::resizeBufferNotify(void) 333 { 334 // notify server of changing buffers size 335 lockBuffer() ; 336 int size=sizeof(int)+sizeof(size_t) ; 337 CBufferOut* bufOut = this->getBuffer(timelineEventNotifyChangeBufferSize, size); 338 bufOut->put(size); 339 bufOut->put(timelineEventNotifyChangeBufferSize); 340 resizingBufferStep_ = 2 ; 341 unlockBuffer() ; 342 } 343 344 void CClientBuffer::resizeBuffer(size_t newSize) 345 { 346 if (hasWindows) 347 { 348 MPI_Win_detach(windows_[0], bufferHeader[0]) ; 349 MPI_Win_detach(windows_[1], bufferHeader[1]) ; 350 } 351 MPI_Free_mem(bufferHeader[0]) ; 352 MPI_Free_mem(bufferHeader[1]) ; 353 354 bufferSize=newSize ; 355 MPI_Alloc_mem(bufferSize+headerSize, MPI_INFO_NULL, &bufferHeader[0]) ; 356 MPI_Alloc_mem(bufferSize+headerSize, MPI_INFO_NULL, &bufferHeader[1]) ; 357 buffer[0] = bufferHeader[0]+headerSize ; 358 buffer[1] = bufferHeader[1]+headerSize ; 359 firstTimeLine[0]=(size_t*)bufferHeader[0] ; 360 firstTimeLine[1]=(size_t*)bufferHeader[1] ; 361 bufferCount[0]=(size_t*)bufferHeader[0] +1 ; 362 bufferCount[1]=(size_t*)bufferHeader[1] +1 ; 363 control[0]=(size_t*)bufferHeader[0] +2 ; 364 control[1]=(size_t*)bufferHeader[1] +2 ; 365 finalize[0]=(size_t*)bufferHeader[0] +3 ; 366 finalize[1]=(size_t*)bufferHeader[1] +3 ; 367 368 *firstTimeLine[0]=0 ; 369 *firstTimeLine[1]=0 ; 370 *bufferCount[0]=0 ; 371 *bufferCount[1]=0 ; 372 *control[0]=0 ; 373 *control[1]=0 ; 374 *finalize[0]=0 ; 375 *finalize[1]=0 ; 376 winState[0]=false ; 377 winState[1]=false ; 378 current=0 ; 379 380 if (hasWindows) 381 { 382 383 MPI_Win_attach(windows_[0], bufferHeader[0], bufferSize+headerSize) ; 384 MPI_Win_attach(windows_[1], bufferHeader[1], bufferSize+headerSize) ; 385 386 MPI_Win_lock(MPI_LOCK_EXCLUSIVE, clientRank_, 0, windows_[0]) ; 387 MPI_Win_lock(MPI_LOCK_EXCLUSIVE, clientRank_, 0, windows_[1]) ; 388 389 MPI_Win_unlock(clientRank_, windows_[1]) ; 390 MPI_Win_unlock(clientRank_, windows_[0]) ; 391 } 392 393 lockBuffer() ; 394 395 int size=sizeof(int)+2*sizeof(size_t)+2*sizeof(MPI_AINT) ; 396 CBufferOut* bufOut = this->getBuffer(timelineEventChangeBufferSize, size); 397 bufOut->put(size); 398 bufOut->put(timelineEventChangeBufferSize); 399 bufOut->put(newBufferSize_); 400 bufOut->put(this->getWinAddress(0)); 401 bufOut->put(this->getWinAddress(1)); 402 403 resizingBufferStep_=3; 404 unlockBuffer() ; 302 405 } 303 406 -
XIOS/dev/dev_trunk_graph/src/buffer_client.hpp
r2019 r2137 29 29 void infoBuffer(void) ; 30 30 bool isNotifiedFinalized(void) ; 31 void setGrowableBuffer(double growFactor) { growFactor_=growFactor ; isGrowableBuffer_=true ;} 32 void fixBufferSize(size_t bufferSize) { newBufferSize_=bufferSize ; isGrowableBuffer_=false ; resizingBufferStep_=1 ;} 33 void fixBuffer(void) { isGrowableBuffer_=false ;} 31 34 private: 35 void resizeBuffer(size_t newSize) ; 36 void resizeBufferNotify(void) ; 37 38 32 39 char* buffer[2]; 33 40 char* bufferHeader[2]; … … 38 45 bool winState[2] ; 39 46 int current; 47 48 double growFactor_=1.2 ; 49 bool isGrowableBuffer_=true ; 40 50 51 int resizingBufferStep_ = 0 ; 52 size_t newBufferSize_ ; 41 53 StdSize count; 42 54 StdSize maxEventSize; 43 constStdSize bufferSize;55 StdSize bufferSize; 44 56 const StdSize estimatedMaxEventSize; 45 57 -
XIOS/dev/dev_trunk_graph/src/buffer_server.cpp
r2019 r2137 15 15 end = size; 16 16 used=0 ; 17 buffer = new char[size]; // use MPI_ALLOC_MEM later?17 MPI_Alloc_mem(size, MPI_INFO_NULL, &buffer) ; 18 18 currentWindows=1 ; 19 19 if (windows[0]==MPI_WIN_NULL && windows[1]==MPI_WIN_NULL) hasWindows=false ; … … 22 22 CServerBuffer::~CServerBuffer() 23 23 { 24 delete [] buffer;24 MPI_Free_mem(buffer) ; 25 25 } 26 26 … … 222 222 bool CServerBuffer::getBufferFromClient(size_t timeLine, char*& buffer, size_t& count) 223 223 { 224 if (!hasWindows ) return false ;224 if (!hasWindows || resizingBuffer_) return false ; 225 225 226 226 -
XIOS/dev/dev_trunk_graph/src/buffer_server.hpp
r2019 r2137 26 26 void unlockBuffer(void) ; 27 27 void notifyClientFinalize(void) ; 28 void notifyBufferResizing(void) { resizingBuffer_=true ;} 28 29 private: 29 30 char* buffer; … … 35 36 std::vector<MPI_Win> windows_ ; 36 37 std::vector<MPI_Aint> winAddress_ ; 37 38 bool resizingBuffer_ = false ; 38 39 int currentWindows ; 39 40 bool hasWindows ; -
XIOS/dev/dev_trunk_graph/src/config/field_attribute.conf
r2019 r2137 42 42 43 43 DECLARE_ATTRIBUTE(bool, build_workflow_graph) 44 DECLARE_ATTRIBUTE(StdString, build_workflow_graph_start) 45 DECLARE_ATTRIBUTE(StdString, build_workflow_graph_end) -
XIOS/dev/dev_trunk_graph/src/config/interpolate_axis_attribute.conf
r827 r2137 3 3 DECLARE_ATTRIBUTE(int, order) 4 4 DECLARE_ATTRIBUTE(StdString, coordinate) 5 DECLARE_ATTRIBUTE(StdString, coordinate_src) 6 DECLARE_ATTRIBUTE(StdString, coordinate_dst) -
XIOS/dev/dev_trunk_graph/src/context_client.cpp
r2019 r2137 12 12 #include "cxios.hpp" 13 13 #include "server.hpp" 14 #include "services.hpp" 15 #include <boost/functional/hash.hpp> 16 #include <random> 17 #include <chrono> 14 18 15 19 namespace xios … … 25 29 { 26 30 27 context = parent;31 context_ = parent; 28 32 intraComm = intraComm_; 29 33 interComm = interComm_; … … 66 70 MPI_Comm_split(intraComm_,clientRank,clientRank, &commSelf) ; 67 71 72 auto time=chrono::system_clock::now().time_since_epoch().count() ; 73 std::default_random_engine rd(time); // not reproducible from a run to another 74 std::uniform_int_distribution<size_t> dist; 75 hashId_=dist(rd) ; 76 MPI_Bcast(&hashId_,1,MPI_SIZE_T,0,intraComm) ; // Bcast to all server of the context 77 68 78 timeLine = 1; 69 79 } … … 124 134 { 125 135 list<int> ranks = event.getRanks(); 126 info(100)<<"Event "<<timeLine<<" of context "<<context ->getId()<<endl ;136 info(100)<<"Event "<<timeLine<<" of context "<<context_->getId()<<endl ; 127 137 if (CXios::checkEventSync) 128 138 { … … 154 164 155 165 unlockBuffers(ranks) ; 156 info(100)<<"Event "<<timeLine<<" of context "<<context ->getId()<<" sent"<<endl ;166 info(100)<<"Event "<<timeLine<<" of context "<<context_->getId()<<" sent"<<endl ; 157 167 158 168 checkBuffers(ranks); … … 161 171 if (isAttachedModeEnabled()) // couldBuffer is always true in attached mode 162 172 { 163 waitEvent(ranks); 164 CContext::setCurrent(context->getId()); 173 while (checkBuffers(ranks)) context_->globalEventLoop() ; 174 175 CXios::getDaemonsManager()->scheduleContext(hashId_) ; 176 while (CXios::getDaemonsManager()->isScheduledContext(hashId_)) context_->globalEventLoop() ; 165 177 } 166 178 … … 177 189 while (checkBuffers(ranks)) 178 190 { 179 CXios::getDaemonsManager()->eventLoop() ;191 context_->eventLoop() ; 180 192 } 181 193 … … 256 268 for (itBuffer = bufferList.begin(); itBuffer != bufferList.end(); itBuffer++) (*itBuffer)->unlockBuffer(); 257 269 checkBuffers(); 258 270 /* 259 271 context->server->listen(); 260 272 … … 265 277 context->globalEventLoop() ; 266 278 } 267 268 } 279 */ 280 context_->globalEventLoop() ; 281 } 282 269 283 } while (!areBuffersFree && !nonBlocking); 270 284 CTimer::get("Blocking time").suspend(); … … 295 309 296 310 CClientBuffer* buffer = buffers[rank] = new CClientBuffer(interComm, Wins, clientRank, rank, mapBufferSize_[rank], maxEventSizes[rank]); 311 if (isGrowableBuffer_) buffer->setGrowableBuffer(1.2) ; 312 else buffer->fixBuffer() ; 297 313 // Notify the server 298 CBufferOut* bufOut = buffer->getBuffer(0, 3*sizeof(MPI_Aint)); 299 MPI_Aint sendBuff[3] ; 300 sendBuff[0]=mapBufferSize_[rank]; // Stupid C++ 301 sendBuff[1]=buffers[rank]->getWinAddress(0); 302 sendBuff[2]=buffers[rank]->getWinAddress(1); 314 CBufferOut* bufOut = buffer->getBuffer(0, 4*sizeof(MPI_Aint)); 315 MPI_Aint sendBuff[4] ; 316 sendBuff[0]=hashId_; 317 sendBuff[1]=mapBufferSize_[rank]; 318 sendBuff[2]=buffers[rank]->getWinAddress(0); 319 sendBuff[3]=buffers[rank]->getWinAddress(1); 303 320 info(100)<<"CContextClient::newBuffer : rank "<<rank<<" winAdress[0] "<<buffers[rank]->getWinAddress(0)<<" winAdress[1] "<<buffers[rank]->getWinAddress(1)<<endl; 304 bufOut->put(sendBuff, 3); // Stupid C++321 bufOut->put(sendBuff, 4); 305 322 buffer->checkBuffer(true); 306 323 … … 383 400 * \param [in] maxEventSize maps the rank of the connected servers to the size of the biggest event 384 401 */ 385 void CContextClient::setBufferSize(const std::map<int,StdSize>& mapSize, const std::map<int,StdSize>& maxEventSize) 386 { 387 mapBufferSize_ = mapSize; 388 maxEventSizes = maxEventSize; 402 void CContextClient::setBufferSize(const std::map<int,StdSize>& mapSize) 403 { 404 for(auto& it : mapSize) {buffers[it.first]->fixBufferSize(std::min(it.second*CXios::bufferSizeFactor*1.01,CXios::maxBufferSize*1.0));} 389 405 } 390 406 … … 463 479 for (itMap = itbMap; itMap != iteMap; ++itMap) 464 480 { 465 report(10) << " Memory report : Context <" << context ->getId() << "> : client side : memory used for buffer of each connection to server" << endl481 report(10) << " Memory report : Context <" << context_->getId() << "> : client side : memory used for buffer of each connection to server" << endl 466 482 << " +) To server with rank " << itMap->first << " : " << itMap->second << " bytes " << endl; 467 483 totalBuf += itMap->second; 468 484 } 469 report(0) << " Memory report : Context <" << context ->getId() << "> : client side : total memory used for buffer " << totalBuf << " bytes" << endl;485 report(0) << " Memory report : Context <" << context_->getId() << "> : client side : total memory used for buffer " << totalBuf << " bytes" << endl; 470 486 471 487 } -
XIOS/dev/dev_trunk_graph/src/context_client.hpp
r2019 r2137 63 63 void finalize(void); 64 64 65 void setBufferSize(const std::map<int,StdSize>& mapSize , const std::map<int,StdSize>& maxEventSize);65 void setBufferSize(const std::map<int,StdSize>& mapSize); 66 66 67 67 int getRemoteSize(void) {return serverSize;} … … 75 75 /*! get the associated server (dual chanel client/server) */ 76 76 CContextServer* getAssociatedServer(void) { return associatedServer_;} 77 77 void setGrowableBuffer(void) { isGrowableBuffer_=true;} 78 void setFixedBuffer(void) { isGrowableBuffer_=false;} 78 79 public: 79 CContext* context ; //!< Context for client80 CContext* context_; //!< Context for client 80 81 81 82 size_t timeLine; //!< Timeline of each event … … 98 99 99 100 bool pureOneSided ; //!< if true, client will communicated with servers only trough one sided communication. Otherwise the hybrid mode P2P /One sided is used. 101 102 size_t hashId_ ; //!< hash id on the context client that will be used for context server to identify the remote calling context client. 100 103 101 104 private: … … 122 125 bool isAttached_ ; 123 126 CContextServer* associatedServer_ ; //!< The server associated to the pair client/server 124 127 bool isGrowableBuffer_ = true ; 125 128 }; 126 129 } -
XIOS/dev/dev_trunk_graph/src/context_server.cpp
r2027 r2137 20 20 #include "services.hpp" 21 21 #include "contexts_manager.hpp" 22 #include "timeline_events.hpp" 22 23 23 24 #include <boost/functional/hash.hpp> … … 52 53 CXios::getContextsManager()->getContextInfo(context->getId(), contextInfo, intraComm) ; 53 54 54 //if (contextInfo.serviceType != CServicesManager::CLIENT) // we must have an event scheduler => to be retrieve from the associated services 55 //{ 56 if (!isAttachedModeEnabled()) eventScheduler_=CXios::getPoolRessource()->getService(contextInfo.serviceId,contextInfo.partitionId)->getEventScheduler() ; 57 //} 55 // if (contextInfo.serviceType != CServicesManager::CLIENT) // we must have an event scheduler => to be retrieve from the associated services 56 // { 57 //if (!isAttachedModeEnabled()) eventScheduler_=CXios::getPoolRessource()->getService(contextInfo.serviceId,contextInfo.partitionId)->getEventScheduler() ; 58 eventScheduler_=CXios::getPoolRessource()->getService(contextInfo.serviceId,contextInfo.partitionId)->getEventScheduler() ; 59 60 // } 58 61 59 62 … … 186 189 if (it==buffers.end()) // Receive the buffer size and allocate the buffer 187 190 { 188 MPI_Aint recvBuff[3] ; 189 MPI_Recv(recvBuff, 3, MPI_AINT, rank, 20, interComm, &status); 190 StdSize buffSize = recvBuff[0]; 191 MPI_Aint recvBuff[4] ; 192 MPI_Recv(recvBuff, 4, MPI_AINT, rank, 20, interComm, &status); 193 remoteHashId_ = recvBuff[0] ; 194 StdSize buffSize = recvBuff[1]; 191 195 vector<MPI_Aint> winAdress(2) ; 192 winAdress[0]=recvBuff[ 1] ; winAdress[1]=recvBuff[2] ;196 winAdress[0]=recvBuff[2] ; winAdress[1]=recvBuff[3] ; 193 197 mapBufferSize_.insert(std::make_pair(rank, buffSize)); 194 198 it=(buffers.insert(pair<int,CServerBuffer*>(rank,new CServerBuffer(windows, winAdress, rank, buffSize)))).first; … … 288 292 CBufferIn newBuffer(startBuffer,buffer.remain()); 289 293 newBuffer>>size>>timeLine; 290 it=events.find(timeLine); 291 if (it==events.end()) it=events.insert(pair<int,CEventServer*>(timeLine,new CEventServer(this))).first; 292 it->second->push(rank,buffers[rank],startBuffer,size); 293 294 295 if (timeLine==timelineEventNotifyChangeBufferSize) 296 { 297 buffers[rank]->notifyBufferResizing() ; 298 buffers[rank]->updateCurrentWindows() ; 299 } 300 else if (timeLine==timelineEventChangeBufferSize) 301 { 302 size_t newSize ; 303 vector<MPI_Aint> winAdress(2) ; 304 newBuffer>>newSize>>winAdress[0]>>winAdress[1] ; 305 buffers.erase(rank) ; 306 buffers.insert(pair<int,CServerBuffer*>(rank,new CServerBuffer(windows, winAdress, rank, newSize))); 307 } 308 else 309 { 310 it=events.find(timeLine); 311 if (it==events.end()) it=events.insert(pair<int,CEventServer*>(timeLine,new CEventServer(this))).first; 312 it->second->push(rank,buffers[rank],startBuffer,size); 313 if (timeLine>0) lastTimeLine[rank]=timeLine ; 314 } 294 315 buffer.advance(size); 295 316 count=buffer.remain(); 296 317 } 297 298 if (timeLine>0) lastTimeLine[rank]=timeLine ;299 318 300 319 CTimer::get("Process request").suspend(); … … 308 327 // if (context->isProcessingEvent()) return ; 309 328 if (isProcessingEvent_) return ; 329 if (isAttachedModeEnabled()) 330 if (!CXios::getDaemonsManager()->isScheduledContext(remoteHashId_)) return ; 310 331 311 332 it=events.find(currentTimeLine); … … 316 337 if (event->isFull()) 317 338 { 318 if (!scheduled && eventScheduler_) // Skip event scheduling for attached mode and reception on client side339 if (!scheduled && !isAttachedModeEnabled()) // Skip event scheduling for attached mode and reception on client side 319 340 { 320 341 eventScheduler_->registerEvent(currentTimeLine,hashId); 321 342 scheduled=true; 322 343 } 323 else if ( !eventScheduler_|| eventScheduler_->queryEvent(currentTimeLine,hashId) )344 else if (isAttachedModeEnabled() || eventScheduler_->queryEvent(currentTimeLine,hashId) ) 324 345 { 325 MPI_Barrier(intraComm) ; 346 MPI_Request req ; 347 MPI_Status status ; 348 349 MPI_Ibarrier(intraComm,&req) ; 350 int flag=false ; 351 do 352 { 353 eventScheduler_->checkEvent() ; 354 MPI_Test(&req,&flag,&status) ; 355 } while (!flag) ; 356 357 //MPI_Barrier(intraComm) ; 326 358 // When using attached mode, synchronise the processes to avoid that differents event be scheduled by differents processes 327 359 // The best way to properly solve this problem will be to use the event scheduler also in attached mode … … 343 375 currentTimeLine++; 344 376 scheduled = false; 377 if (isAttachedModeEnabled()) CXios::getDaemonsManager()->unscheduleContext() ; 345 378 } 346 379 } -
XIOS/dev/dev_trunk_graph/src/context_server.hpp
r2019 r2137 72 72 bool isProcessingEvent_ ; 73 73 CContextClient* associatedClient_ ; 74 size_t remoteHashId_; //!< the hash is of the calling context client 74 75 } ; 75 76 -
XIOS/dev/dev_trunk_graph/src/declare_attribute.hpp
r2019 r2137 43 43 using CAttributeArray<T_num, T_rank>::operator = ; \ 44 44 bool alwaysFalse=false;\ 45 name##_attr(void) : CAttributeArray<T_num, T_rank> (#name, *CAttributeMap::Current) { if (alwaysFalse) TV_ttf_display_type(this);} \45 name##_attr(void) : CAttributeArray<T_num, T_rank> (#name, *CAttributeMap::Current) {} \ 46 46 virtual bool doSend() const { return helper(__VA_ARGS__); } \ 47 47 bool helper(bool returnTrue=true) const { return returnTrue; } \ 48 static int TV_ttf_display_type ( const name##_attr* array )\49 {\50 cout<<"TV_ttf_display_type"<<endl ;\51 return CArray<T_num,T_rank>::TV_ttf_display_type((const CArray<T_num,T_rank>*)array) ;\52 }\53 48 virtual ~name##_attr(void) {} \ 54 49 } name; -
XIOS/dev/dev_trunk_graph/src/distribution/gatherer_connector.hpp
r2019 r2137 151 151 void transfer(map<int, CArray<T,1>>& dataIn, CArray<T,1>& dataOut, T missingValue) 152 152 { 153 transfer(1, 1, dataIn, data out, missingValue)153 transfer(1, 1, dataIn, dataOut, missingValue); 154 154 } 155 155 -
XIOS/dev/dev_trunk_graph/src/distribution/grid_scatterer_connector.hpp
r2019 r2137 42 42 } 43 43 44 44 const map<int,int>& getTransferedDataSize(void) {return dstSize_;} 45 45 46 template<typename T, int N> 46 47 void transfer(const CArray<T,N>& input, map<int, CArray<T,1>>& output) -
XIOS/dev/dev_trunk_graph/src/distribution/grid_transform_connector.cpp
r2030 r2137 59 59 vector<size_t> recvBuff(size) ; 60 60 MPI_Recv(recvBuff.data(), size, MPI_SIZE_T, status.MPI_SOURCE,0, localComm_,&status) ; 61 if(size) 62 { 63 CArray<size_t,1> arrayTmp(recvBuff.data(), shape(recvBuff.size()), duplicateData) ; 64 recvIndex[status.MPI_SOURCE].reference(arrayTmp) ; 65 } 61 CArray<size_t,1> arrayTmp(recvBuff.data(), shape(recvBuff.size()), duplicateData) ; 62 recvIndex[status.MPI_SOURCE].reference(arrayTmp) ; 66 63 if (recvRankSize_.count(status.MPI_SOURCE)==0) recvRankSize_[status.MPI_SOURCE] = size ; 67 64 else recvRankSize_[status.MPI_SOURCE] *= size ; -
XIOS/dev/dev_trunk_graph/src/distribution/scatterer_connector.hpp
r2019 r2137 50 50 void transfer(int sizeT, const CArray<T,n>& dataIn, map<int, CArray<T,1>>& dataOut) 51 51 { 52 transfer(1, sizeT, dataIn, dataOut) 52 transfer(1, sizeT, dataIn, dataOut); 53 53 } 54 54 -
XIOS/dev/dev_trunk_graph/src/filter/client_from_client_source_filter.cpp
r2027 r2137 38 38 for (auto& subEvent : event.subEvents) (*subEvent.buffer) >> packet->timestamp ; // better management of time lien later... 39 39 packet->timestamp = date; 40 40 41 41 grid_->getClientFromClientConnector()->transfer(event,packet->data) ; 42 42 … … 55 55 if (wasDataAlreadyReceived_) isDataLate = lastDateReceived_ + offset_ + freqOp_ <= currentDate ; 56 56 else isDataLate = CContext::getCurrent()->getCalendar()->getInitDate()+ offset_ <= currentDate ; 57 return isDataLate ; 57 58 } 58 59 -
XIOS/dev/dev_trunk_graph/src/filter/client_to_model_store_filter.cpp
r2019 r2137 19 19 if (hasMissingValue_) missingValue_ = field->default_value ; 20 20 detectMissingValues_ = (!field->detect_missing_value.isEmpty() && hasMissingValue_); 21 22 21 } 23 22 -
XIOS/dev/dev_trunk_graph/src/filter/client_to_server_store_filter.cpp
r2027 r2137 30 30 field_->getSentGrid()->getClientToServerConnector(client_)->transfer(data[0]->data, client_, event, message) ; 31 31 CTimer::get("Field : send data").suspend(); 32 33 32 } 33 34 34 void CClientToServerStoreFilter::buildWorkflowGraph(std::vector<CDataPacketPtr> data) 35 35 { … … 48 48 } 49 49 } 50 51 CContextClient* CClientToServerStoreFilter::getTransferedDataSize(map<int,int>& size) 52 { 53 size = field_->getSentGrid()->getClientToServerConnector(client_)->getTransferedDataSize() ; 54 return client_ ; 55 } 50 56 51 57 bool CClientToServerStoreFilter::mustAutoTrigger() const -
XIOS/dev/dev_trunk_graph/src/filter/client_to_server_store_filter.hpp
r2019 r2137 24 24 */ 25 25 CClientToServerStoreFilter(CGarbageCollector& gc, CField* field, CContextClient* client); 26 /*! 27 * Get the size of data transfered by call. Needed for context client buffer size evaluation 28 * 29 * \param size : map returning the size for each server rank 30 * \return the associated context client 31 */ 32 CContextClient* getTransferedDataSize(map<int,int>& size) ; 26 33 27 34 /*! -
XIOS/dev/dev_trunk_graph/src/filter/pass_through_filter.cpp
r2028 r2137 60 60 61 61 } // namespace xios 62 -
XIOS/dev/dev_trunk_graph/src/filter/server_to_client_store_filter.cpp
r2019 r2137 50 50 } 51 51 52 CContextClient* CServerToClientStoreFilter::getTransferedDataSize(map<int,int>& size) 53 { 54 size = grid_->getServerToClientConnector()->getTransferedDataSize() ; 55 return client_ ; 56 } 52 57 53 58 bool CServerToClientStoreFilter::mustAutoTrigger() const -
XIOS/dev/dev_trunk_graph/src/filter/server_to_client_store_filter.hpp
r2019 r2137 25 25 */ 26 26 CServerToClientStoreFilter(CGarbageCollector& gc, CField* field, CContextClient* client); 27 28 /*! 29 * Get the size of data transfered by call. Needed for context client buffer size evaluation 30 * 31 * \param size : map returning the size for each server rank 32 * \return the associated context client 33 */ 34 CContextClient* getTransferedDataSize(map<int,int>& size) ; 27 35 28 36 /*! -
XIOS/dev/dev_trunk_graph/src/filter/temporal_filter.cpp
r2028 r2137 23 23 this->samplingOffset.second, this->samplingOffset.timestep) 24 24 , initDate(initDate) 25 // , nextSamplingDate(initDate + (this->samplingOffset + initDate.getRelCalendar().getTimeStep())) 25 26 , nextSamplingDate(initDate + offsetMonth + ( offsetAllButMonth + initDate.getRelCalendar().getTimeStep())) 26 27 , nbOperationDates(1) 27 28 , nbSamplingDates(0) 29 // , nextOperationDate(initDate + opFreq + this->samplingOffset) 28 30 , isFirstOperation(true) 29 31 , graphCycleCompleted(true) … … 73 75 { 74 76 usePacket = (data[0]->date >= nextSamplingDate); 77 // outputResult = (data[0]->date + samplingFreq > nextOperationDate); 75 78 outputResult = (data[0]->date > initDate + nbOperationDates*opFreq - samplingFreq + offsetMonth + offsetAllButMonth); 76 79 copyLess = (isInstantOperation && usePacket && outputResult); … … 110 113 111 114 isFirstOperation = false; 112 115 // nextOperationDate = initDate + samplingFreq + nbOperationDates*opFreq - samplingFreq + offsetMonth + offsetAllButMonth; 113 116 graphCycleCompleted = true; 114 117 } 115 118 } 116 119 … … 125 128 bool CTemporalFilter::isDataExpected(const CDate& date) const 126 129 { 130 // return isOnceOperation ? isFirstOperation : (date >= nextSamplingDate || date + samplingFreq > nextOperationDate); 127 131 return isOnceOperation ? isFirstOperation : (date >= nextSamplingDate || date > initDate + nbOperationDates*opFreq - samplingFreq + offsetMonth + offsetAllButMonth); 128 132 } -
XIOS/dev/dev_trunk_graph/src/filter/transform_filter.cpp
r2028 r2137 19 19 packet->timestamp = data[0]->timestamp; 20 20 packet->status = data[0]->status; 21 21 22 22 if (packet->status == CDataPacket::NO_ERROR) 23 23 { -
XIOS/dev/dev_trunk_graph/src/interface/c/iccontext.cpp
r1612 r2137 68 68 CATCH_DUMP_STACK 69 69 70 void cxios_context_get_id(XContextPtr context, char * _id, int _id_len) 71 TRY 72 { 73 string_copy(context->getId(),_id,_id_len); 74 } 75 CATCH_DUMP_STACK 76 70 77 void cxios_context_set_current(XContextPtr context, bool withswap) 71 78 TRY -
XIOS/dev/dev_trunk_graph/src/interface/c/icdata.cpp
r2019 r2137 412 412 413 413 // ---------------------- Ecriture des données ------------------------------ 414 415 void cxios_write_data_k80_hdl(CField* field, double* data_k8, int data_Xsize) 416 TRY 417 { 418 CTimer::get("XIOS").resume(); 419 CTimer::get("XIOS send field").resume(); 420 CContext* context = CContext::getCurrent(); 421 if (!context->hasServer && !context->client->isAttachedModeEnabled()) 422 context->eventLoop(); 423 CArray<double, 1> data(data_k8, shape(data_Xsize), neverDeleteData); 424 field->setData(data); 425 CTimer::get("XIOS send field").suspend(); 426 CTimer::get("XIOS").suspend(); 427 } 428 CATCH_DUMP_STACK 414 429 415 430 void cxios_write_data_k80(const char* fieldid, int fieldid_size, double* data_k8, int data_Xsize) … … 418 433 std::string fieldid_str; 419 434 if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return; 420 421 CTimer::get("XIOS").resume(); 422 CTimer::get("XIOS send field").resume(); 423 CContext* context = CContext::getCurrent(); 424 if (!context->hasServer && !context->client->isAttachedModeEnabled()) 425 context->eventLoop(); 426 //ym context->checkBuffersAndListen(); 435 cxios_write_data_k80_hdl(CField::get(fieldid_str), data_k8, data_Xsize) ; 436 } 437 CATCH_DUMP_STACK 438 439 440 441 442 void cxios_write_data_k81_hdl(CField* field, double* data_k8, int data_Xsize) 443 TRY 444 { 445 CTimer::get("XIOS").resume(); 446 CTimer::get("XIOS send field").resume(); 447 448 CContext* context = CContext::getCurrent(); 449 if (!context->hasServer && !context->client->isAttachedModeEnabled()) 450 context->eventLoop(); 451 427 452 CArray<double, 1> data(data_k8, shape(data_Xsize), neverDeleteData); 428 CField::get(fieldid_str)->setData(data); 429 CTimer::get("XIOS send field").suspend(); 430 CTimer::get("XIOS").suspend(); 431 } 432 CATCH_DUMP_STACK 433 453 field->setData(data); 454 455 CTimer::get("XIOS send field").suspend(); 456 CTimer::get("XIOS").suspend(); 457 } 458 CATCH_DUMP_STACK 459 434 460 void cxios_write_data_k81(const char* fieldid, int fieldid_size, double* data_k8, int data_Xsize) 435 461 TRY … … 437 463 std::string fieldid_str; 438 464 if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return; 439 440 CTimer::get("XIOS").resume(); 441 CTimer::get("XIOS send field").resume(); 442 443 CContext* context = CContext::getCurrent(); 444 if (!context->hasServer && !context->client->isAttachedModeEnabled()) 445 context->eventLoop(); 446 //ym context->checkBuffersAndListen(); 447 448 CArray<double, 1> data(data_k8, shape(data_Xsize), neverDeleteData); 449 CField::get(fieldid_str)->setData(data); 465 cxios_write_data_k81_hdl(CField::get(fieldid_str), data_k8, data_Xsize) ; 466 467 } 468 CATCH_DUMP_STACK 469 470 471 472 void cxios_write_data_k82_hdl(CField* field, double* data_k8, int data_Xsize, int data_Ysize) 473 TRY 474 { 475 CTimer::get("XIOS").resume(); 476 CTimer::get("XIOS send field").resume(); 477 478 CContext* context = CContext::getCurrent(); 479 if (!context->hasServer && !context->client->isAttachedModeEnabled()) 480 context->eventLoop(); 481 482 CArray<double, 2>data(data_k8, shape(data_Xsize, data_Ysize), neverDeleteData); 483 field->setData(data); 450 484 451 485 CTimer::get("XIOS send field").suspend(); … … 459 493 std::string fieldid_str; 460 494 if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return; 461 462 CTimer::get("XIOS").resume(); 463 CTimer::get("XIOS send field").resume(); 464 465 CContext* context = CContext::getCurrent(); 466 if (!context->hasServer && !context->client->isAttachedModeEnabled()) 467 context->eventLoop(); 468 //ym context->checkBuffersAndListen(); 469 470 CArray<double, 2>data(data_k8, shape(data_Xsize, data_Ysize), neverDeleteData); 471 CField::get(fieldid_str)->setData(data); 472 473 CTimer::get("XIOS send field").suspend(); 474 CTimer::get("XIOS").suspend(); 475 } 476 CATCH_DUMP_STACK 477 495 cxios_write_data_k82_hdl(CField::get(fieldid_str), data_k8, data_Xsize, data_Ysize) ; 496 } 497 CATCH_DUMP_STACK 498 499 500 501 502 503 504 void cxios_write_data_k83_hdl(CField* field, double* data_k8, int data_Xsize, int data_Ysize, int data_Zsize) 505 TRY 506 { 507 CTimer::get("XIOS").resume(); 508 CTimer::get("XIOS send field").resume(); 509 510 CContext* context = CContext::getCurrent(); 511 if (!context->hasServer && !context->client->isAttachedModeEnabled()) 512 context->eventLoop(); 513 514 CArray<double, 3>data(data_k8, shape(data_Xsize, data_Ysize, data_Zsize), neverDeleteData); 515 field->setData(data); 516 517 CTimer::get("XIOS send field").suspend(); 518 CTimer::get("XIOS").suspend(); 519 } 520 CATCH_DUMP_STACK 521 478 522 void cxios_write_data_k83(const char* fieldid, int fieldid_size, double* data_k8, int data_Xsize, int data_Ysize, int data_Zsize) 479 523 TRY … … 481 525 std::string fieldid_str; 482 526 if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return; 483 484 CTimer::get("XIOS").resume(); 485 CTimer::get("XIOS send field").resume(); 486 487 CContext* context = CContext::getCurrent(); 488 if (!context->hasServer && !context->client->isAttachedModeEnabled()) 489 context->eventLoop(); 490 //ym context->checkBuffersAndListen(); 491 492 CArray<double, 3>data(data_k8, shape(data_Xsize, data_Ysize, data_Zsize), neverDeleteData); 493 CField::get(fieldid_str)->setData(data); 527 cxios_write_data_k83_hdl(CField::get(fieldid_str), data_k8, data_Xsize, data_Ysize, data_Zsize) ; 528 529 530 } 531 CATCH_DUMP_STACK 532 533 534 535 536 537 538 void cxios_write_data_k84_hdl(CField* field, double* data_k8, int data_0size, int data_1size, int data_2size, int data_3size) 539 TRY 540 { 541 CTimer::get("XIOS").resume(); 542 CTimer::get("XIOS send field").resume(); 543 544 CContext* context = CContext::getCurrent(); 545 if (!context->hasServer && !context->client->isAttachedModeEnabled()) 546 context->eventLoop(); 547 548 CArray<double, 4>data(data_k8, shape(data_0size, data_1size, data_2size, data_3size), neverDeleteData); 549 field->setData(data); 494 550 495 551 CTimer::get("XIOS send field").suspend(); … … 506 562 CTimer::get("XIOS").resume(); 507 563 CTimer::get("XIOS send field").resume(); 508 509 CContext* context = CContext::getCurrent(); 510 if (!context->hasServer && !context->client->isAttachedModeEnabled()) 511 context->eventLoop(); 512 //ym context->checkBuffersAndListen(); 513 514 CArray<double, 4>data(data_k8, shape(data_0size, data_1size, data_2size, data_3size), neverDeleteData); 515 CField::get(fieldid_str)->setData(data); 564 cxios_write_data_k84_hdl(CField::get(fieldid_str), data_k8, data_0size, data_1size, data_2size, data_3size) ; 565 } 566 CATCH_DUMP_STACK 567 568 569 570 571 572 void cxios_write_data_k85_hdl(CField* field, double* data_k8, 573 int data_0size, int data_1size, int data_2size, 574 int data_3size, int data_4size) 575 TRY 576 { 577 CTimer::get("XIOS").resume(); 578 CTimer::get("XIOS send field").resume(); 579 580 CContext* context = CContext::getCurrent(); 581 if (!context->hasServer && !context->client->isAttachedModeEnabled()) 582 context->eventLoop(); 583 584 CArray<double, 5>data(data_k8, shape(data_0size, data_1size, data_2size, data_3size, data_4size), neverDeleteData); 585 field->setData(data); 516 586 517 587 CTimer::get("XIOS send field").suspend(); … … 527 597 std::string fieldid_str; 528 598 if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return; 529 530 CTimer::get("XIOS").resume(); 531 CTimer::get("XIOS send field").resume(); 532 533 CContext* context = CContext::getCurrent(); 534 context->eventLoop(); 535 //ym context->checkBuffersAndListen(); 536 537 CArray<double, 5>data(data_k8, shape(data_0size, data_1size, data_2size, data_3size, data_4size), neverDeleteData); 538 CField::get(fieldid_str)->setData(data); 539 540 CTimer::get("XIOS send field").suspend(); 541 CTimer::get("XIOS").suspend(); 542 } 543 CATCH_DUMP_STACK 544 599 cxios_write_data_k85_hdl(CField::get(fieldid_str), data_k8, data_0size, data_1size, data_2size, data_3size, data_4size) ; 600 601 } 602 CATCH_DUMP_STACK 603 604 605 606 void cxios_write_data_k86_hdl(CField* field, double* data_k8, 607 int data_0size, int data_1size, int data_2size, 608 int data_3size, int data_4size, int data_5size) 609 TRY 610 { 611 612 CTimer::get("XIOS").resume(); 613 CTimer::get("XIOS send field").resume(); 614 615 CContext* context = CContext::getCurrent(); 616 if (!context->hasServer && !context->client->isAttachedModeEnabled()) 617 context->eventLoop(); 618 619 CArray<double, 6>data(data_k8, shape(data_0size, data_1size, data_2size, data_3size, data_4size, data_5size), neverDeleteData); 620 field->setData(data); 621 622 CTimer::get("XIOS send field").suspend(); 623 CTimer::get("XIOS").suspend(); 624 } 625 CATCH_DUMP_STACK 626 545 627 void cxios_write_data_k86(const char* fieldid, int fieldid_size, double* data_k8, 546 628 int data_0size, int data_1size, int data_2size, … … 550 632 std::string fieldid_str; 551 633 if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return; 552 553 CTimer::get("XIOS").resume(); 554 CTimer::get("XIOS send field").resume(); 555 556 CContext* context = CContext::getCurrent(); 557 if (!context->hasServer && !context->client->isAttachedModeEnabled()) 558 context->eventLoop(); 559 // context->checkBuffersAndListen(); 560 561 CArray<double, 6>data(data_k8, shape(data_0size, data_1size, data_2size, data_3size, data_4size, data_5size), neverDeleteData); 562 CField::get(fieldid_str)->setData(data); 563 564 CTimer::get("XIOS send field").suspend(); 565 CTimer::get("XIOS").suspend(); 566 } 567 CATCH_DUMP_STACK 568 634 cxios_write_data_k86_hdl(CField::get(fieldid_str), data_k8, data_0size, data_1size, data_2size, data_3size, data_4size, data_5size) ; 635 636 } 637 CATCH_DUMP_STACK 638 639 640 641 642 void cxios_write_data_k87_hdl(CField* field, double* data_k8, 643 int data_0size, int data_1size, int data_2size, 644 int data_3size, int data_4size, int data_5size, 645 int data_6size) 646 TRY 647 { 648 CTimer::get("XIOS").resume(); 649 CTimer::get("XIOS send field").resume(); 650 651 CContext* context = CContext::getCurrent(); 652 if (!context->hasServer && !context->client->isAttachedModeEnabled()) 653 context->eventLoop(); 654 655 CArray<double, 7>data(data_k8, shape(data_0size, data_1size, data_2size, data_3size, data_4size, data_5size, data_6size), neverDeleteData); 656 field->setData(data); 657 658 CTimer::get("XIOS send field").suspend(); 659 CTimer::get("XIOS").suspend(); 660 } 661 CATCH_DUMP_STACK 662 569 663 void cxios_write_data_k87(const char* fieldid, int fieldid_size, double* data_k8, 570 664 int data_0size, int data_1size, int data_2size, … … 575 669 std::string fieldid_str; 576 670 if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return; 577 578 CTimer::get("XIOS").resume(); 579 CTimer::get("XIOS send field").resume(); 580 581 CContext* context = CContext::getCurrent(); 582 if (!context->hasServer && !context->client->isAttachedModeEnabled()) 583 context->eventLoop(); 584 // context->checkBuffersAndListen(); 585 586 CArray<double, 7>data(data_k8, shape(data_0size, data_1size, data_2size, data_3size, data_4size, data_5size, data_6size), neverDeleteData); 587 CField::get(fieldid_str)->setData(data); 588 589 CTimer::get("XIOS send field").suspend(); 590 CTimer::get("XIOS").suspend(); 591 } 592 CATCH_DUMP_STACK 593 594 void cxios_write_data_k40(const char* fieldid, int fieldid_size, float* data_k4, int data_Xsize) 595 TRY 596 { 597 std::string fieldid_str; 598 if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return; 599 600 CTimer::get("XIOS").resume(); 601 CTimer::get("XIOS send field").resume(); 602 CContext* context = CContext::getCurrent(); 603 if (!context->hasServer && !context->client->isAttachedModeEnabled()) 604 context->eventLoop(); 605 //ym context->checkBuffersAndListen(); 671 cxios_write_data_k87_hdl(CField::get(fieldid_str), data_k8, data_0size, data_1size, data_2size, data_3size, data_4size, data_5size, data_6size) ; 672 } 673 CATCH_DUMP_STACK 674 675 676 677 678 679 void cxios_write_data_k40_hdl(CField* field, float* data_k4, int data_Xsize) 680 TRY 681 { 682 CTimer::get("XIOS").resume(); 683 CTimer::get("XIOS send field").resume(); 684 CContext* context = CContext::getCurrent(); 685 if (!context->hasServer && !context->client->isAttachedModeEnabled()) 686 context->eventLoop(); 606 687 607 688 CArray<float, 1> data_tmp(data_k4, shape(data_Xsize), neverDeleteData); 608 689 CArray<double, 1> data(data_Xsize) ; 609 690 data = data_tmp; 610 CField::get(fieldid_str)->setData(data); 611 CTimer::get("XIOS send field").suspend(); 612 CTimer::get("XIOS").suspend(); 613 } 614 CATCH_DUMP_STACK 615 616 void cxios_write_data_k41(const char* fieldid, int fieldid_size, float* data_k4, int data_Xsize) 617 TRY 618 { 619 std::string fieldid_str; 620 if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return; 621 622 CTimer::get("XIOS").resume(); 623 CTimer::get("XIOS send field").resume(); 624 625 CContext* context = CContext::getCurrent(); 626 if (!context->hasServer && !context->client->isAttachedModeEnabled()) 627 context->eventLoop(); 628 //ym context->checkBuffersAndListen(); 691 field->setData(data); 692 CTimer::get("XIOS send field").suspend(); 693 CTimer::get("XIOS").suspend(); 694 } 695 CATCH_DUMP_STACK 696 697 void cxios_write_data_k40(const char* fieldid, int fieldid_size, float* data_k4, int data_Xsize) 698 TRY 699 { 700 std::string fieldid_str; 701 if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return; 702 cxios_write_data_k40_hdl(CField::get(fieldid_str), data_k4, data_Xsize); 703 704 } 705 CATCH_DUMP_STACK 706 707 708 void cxios_write_data_k41_hdl(CField* field, float* data_k4, int data_Xsize) 709 TRY 710 { 711 CTimer::get("XIOS").resume(); 712 CTimer::get("XIOS send field").resume(); 713 714 CContext* context = CContext::getCurrent(); 715 if (!context->hasServer && !context->client->isAttachedModeEnabled()) 716 context->eventLoop(); 629 717 630 718 CArray<float, 1> data_tmp(data_k4, shape(data_Xsize), neverDeleteData); 631 719 CArray<double, 1> data(data_Xsize); 632 720 data = data_tmp; 633 CField::get(fieldid_str)->setData(data); 634 635 CTimer::get("XIOS send field").suspend(); 636 CTimer::get("XIOS").suspend(); 637 } 638 CATCH_DUMP_STACK 639 640 void cxios_write_data_k42(const char* fieldid, int fieldid_size, float* data_k4, int data_Xsize, int data_Ysize) 641 TRY 642 { 643 std::string fieldid_str; 644 if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return; 645 646 CTimer::get("XIOS").resume(); 647 CTimer::get("XIOS send field").resume(); 648 649 CContext* context = CContext::getCurrent(); 650 if (!context->hasServer && !context->client->isAttachedModeEnabled()) 651 context->eventLoop(); 652 //ym context->checkBuffersAndListen(); 721 field->setData(data); 722 723 CTimer::get("XIOS send field").suspend(); 724 CTimer::get("XIOS").suspend(); 725 } 726 CATCH_DUMP_STACK 727 728 void cxios_write_data_k41(const char* fieldid, int fieldid_size, float* data_k4, int data_Xsize) 729 TRY 730 { 731 std::string fieldid_str; 732 if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return; 733 cxios_write_data_k41_hdl(CField::get(fieldid_str), data_k4, data_Xsize); 734 } 735 CATCH_DUMP_STACK 736 737 738 void cxios_write_data_k42_hdl(CField* field, float* data_k4, int data_Xsize, int data_Ysize) 739 TRY 740 { 741 CTimer::get("XIOS").resume(); 742 CTimer::get("XIOS send field").resume(); 743 744 CContext* context = CContext::getCurrent(); 745 if (!context->hasServer && !context->client->isAttachedModeEnabled()) 746 context->eventLoop(); 653 747 654 748 CArray<float, 2> data_tmp(data_k4, shape(data_Xsize, data_Ysize), neverDeleteData); 655 749 CArray<double, 2> data(data_Xsize, data_Ysize); 656 750 data = data_tmp; 657 CField::get(fieldid_str)->setData(data); 658 659 CTimer::get("XIOS send field").suspend(); 660 CTimer::get("XIOS").suspend(); 661 } 662 CATCH_DUMP_STACK 663 664 void cxios_write_data_k43(const char* fieldid, int fieldid_size, float* data_k4, int data_Xsize, int data_Ysize, int data_Zsize) 665 TRY 666 { 667 std::string fieldid_str; 668 if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return; 669 670 CTimer::get("XIOS").resume(); 671 CTimer::get("XIOS send field").resume(); 672 673 CContext* context = CContext::getCurrent(); 674 if (!context->hasServer && !context->client->isAttachedModeEnabled()) 675 context->eventLoop(); 676 //ym context->checkBuffersAndListen(); 751 field->setData(data); 752 753 CTimer::get("XIOS send field").suspend(); 754 CTimer::get("XIOS").suspend(); 755 } 756 CATCH_DUMP_STACK 757 758 void cxios_write_data_k42(const char* fieldid, int fieldid_size, float* data_k4, int data_Xsize, int data_Ysize) 759 TRY 760 { 761 std::string fieldid_str; 762 if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return; 763 cxios_write_data_k42_hdl(CField::get(fieldid_str), data_k4, data_Xsize,data_Ysize); 764 } 765 CATCH_DUMP_STACK 766 767 768 769 770 void cxios_write_data_k43_hdl(CField* field, float* data_k4, int data_Xsize, int data_Ysize, int data_Zsize) 771 TRY 772 { 773 CTimer::get("XIOS").resume(); 774 CTimer::get("XIOS send field").resume(); 775 776 CContext* context = CContext::getCurrent(); 777 if (!context->hasServer && !context->client->isAttachedModeEnabled()) 778 context->eventLoop(); 677 779 678 780 CArray<float, 3> data_tmp(data_k4, shape(data_Xsize, data_Ysize, data_Zsize), neverDeleteData); 679 781 CArray<double, 3> data(data_Xsize, data_Ysize, data_Zsize); 680 782 data = data_tmp; 681 CField::get(fieldid_str)->setData(data); 783 field->setData(data); 784 785 CTimer::get("XIOS send field").suspend(); 786 CTimer::get("XIOS").suspend(); 787 } 788 CATCH_DUMP_STACK 789 790 void cxios_write_data_k43(const char* fieldid, int fieldid_size, float* data_k4, int data_Xsize, int data_Ysize, int data_Zsize) 791 TRY 792 { 793 std::string fieldid_str; 794 if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return; 795 cxios_write_data_k43_hdl(CField::get(fieldid_str), data_k4, data_Xsize,data_Ysize, data_Zsize); 796 } 797 CATCH_DUMP_STACK 798 799 800 801 void cxios_write_data_k44_hdl(CField* field, float* data_k4, 802 int data_0size, int data_1size, int data_2size, 803 int data_3size) 804 TRY 805 { 806 CTimer::get("XIOS").resume(); 807 CTimer::get("XIOS send field").resume(); 808 809 CContext* context = CContext::getCurrent(); 810 if (!context->hasServer && !context->client->isAttachedModeEnabled()) 811 context->eventLoop(); 812 813 CArray<float, 4> data_tmp(data_k4, shape(data_0size, data_1size, data_2size, data_3size), neverDeleteData); 814 CArray<double, 4> data(data_0size, data_1size, data_2size, data_3size); 815 data = data_tmp; 816 field->setData(data); 682 817 683 818 CTimer::get("XIOS send field").suspend(); … … 693 828 std::string fieldid_str; 694 829 if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return; 695 696 CTimer::get("XIOS").resume(); 697 CTimer::get("XIOS send field").resume(); 698 699 CContext* context = CContext::getCurrent(); 700 if (!context->hasServer && !context->client->isAttachedModeEnabled()) 701 context->eventLoop(); 702 //ym context->checkBuffersAndListen(); 703 704 CArray<float, 4> data_tmp(data_k4, shape(data_0size, data_1size, data_2size, data_3size), neverDeleteData); 705 CArray<double, 4> data(data_0size, data_1size, data_2size, data_3size); 830 cxios_write_data_k44_hdl(CField::get(fieldid_str), data_k4, data_0size, data_1size, data_2size, data_3size) ; 831 } 832 CATCH_DUMP_STACK 833 834 835 836 837 void cxios_write_data_k45_hdl(CField* field, float* data_k4, 838 int data_0size, int data_1size, int data_2size, 839 int data_3size, int data_4size) 840 TRY 841 { 842 CTimer::get("XIOS").resume(); 843 CTimer::get("XIOS send field").resume(); 844 845 CContext* context = CContext::getCurrent(); 846 if (!context->hasServer && !context->client->isAttachedModeEnabled()) 847 context->eventLoop(); 848 849 CArray<float, 5> data_tmp(data_k4, shape(data_0size, data_1size, data_2size, data_3size, data_4size), neverDeleteData); 850 CArray<double, 5> data(data_0size, data_1size, data_2size, data_3size, data_4size); 706 851 data = data_tmp; 707 CField::get(fieldid_str)->setData(data);852 field->setData(data); 708 853 709 854 CTimer::get("XIOS send field").suspend(); … … 719 864 std::string fieldid_str; 720 865 if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return; 721 722 CTimer::get("XIOS").resume(); 723 CTimer::get("XIOS send field").resume(); 724 725 CContext* context = CContext::getCurrent(); 726 if (!context->hasServer && !context->client->isAttachedModeEnabled()) 727 context->eventLoop(); 728 //ym context->checkBuffersAndListen(); 729 730 CArray<float, 5> data_tmp(data_k4, shape(data_0size, data_1size, data_2size, data_3size, data_4size), neverDeleteData); 731 CArray<double, 5> data(data_0size, data_1size, data_2size, data_3size, data_4size); 866 cxios_write_data_k45_hdl(CField::get(fieldid_str), data_k4, data_0size, data_1size, data_2size, data_3size, data_4size) ; 867 } 868 CATCH_DUMP_STACK 869 870 871 872 void cxios_write_data_k46_hdl(CField* field, float* data_k4, 873 int data_0size, int data_1size, int data_2size, 874 int data_3size, int data_4size, int data_5size) 875 TRY 876 { 877 CTimer::get("XIOS").resume(); 878 CTimer::get("XIOS send field").resume(); 879 880 CContext* context = CContext::getCurrent(); 881 if (!context->hasServer && !context->client->isAttachedModeEnabled()) 882 context->eventLoop(); 883 884 CArray<float, 6> data_tmp(data_k4, shape(data_0size, data_1size, data_2size, data_3size, data_4size, data_5size), neverDeleteData); 885 CArray<double, 6> data(data_0size, data_1size, data_2size, data_3size, data_4size, data_5size); 732 886 data = data_tmp; 733 CField::get(fieldid_str)->setData(data);887 field->setData(data); 734 888 735 889 CTimer::get("XIOS send field").suspend(); … … 745 899 std::string fieldid_str; 746 900 if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return; 747 748 CTimer::get("XIOS").resume(); 749 CTimer::get("XIOS send field").resume(); 750 751 CContext* context = CContext::getCurrent(); 752 if (!context->hasServer && !context->client->isAttachedModeEnabled()) 753 context->eventLoop(); 754 //ym context->checkBuffersAndListen(); 755 756 CArray<float, 6> data_tmp(data_k4, shape(data_0size, data_1size, data_2size, data_3size, data_4size, data_5size), neverDeleteData); 757 CArray<double, 6> data(data_0size, data_1size, data_2size, data_3size, data_4size, data_5size); 758 data = data_tmp; 759 CField::get(fieldid_str)->setData(data); 760 761 CTimer::get("XIOS send field").suspend(); 762 CTimer::get("XIOS").suspend(); 763 } 764 CATCH_DUMP_STACK 765 766 void cxios_write_data_k47(const char* fieldid, int fieldid_size, float* data_k4, 901 cxios_write_data_k46_hdl(CField::get(fieldid_str), data_k4, data_0size, data_1size, data_2size, data_3size, data_4size, data_5size) ; 902 } 903 CATCH_DUMP_STACK 904 905 906 void cxios_write_data_k47_hdl(CField* field, float* data_k4, 767 907 int data_0size, int data_1size, int data_2size, 768 908 int data_3size, int data_4size, int data_5size, … … 770 910 TRY 771 911 { 772 std::string fieldid_str; 773 if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return; 774 775 CTimer::get("XIOS").resume(); 776 CTimer::get("XIOS send field").resume(); 777 778 CContext* context = CContext::getCurrent(); 779 if (!context->hasServer && !context->client->isAttachedModeEnabled()) 780 context->eventLoop(); 781 //ym context->checkBuffersAndListen(); 912 CTimer::get("XIOS").resume(); 913 CTimer::get("XIOS send field").resume(); 914 915 CContext* context = CContext::getCurrent(); 916 if (!context->hasServer && !context->client->isAttachedModeEnabled()) 917 context->eventLoop(); 782 918 783 919 CArray<float, 7> data_tmp(data_k4, shape(data_0size, data_1size, data_2size, data_3size, data_4size, data_5size, data_6size), neverDeleteData); 784 920 CArray<double, 7> data(data_0size, data_1size, data_2size, data_3size, data_4size, data_5size, data_6size); 785 921 data = data_tmp; 786 CField::get(fieldid_str)->setData(data); 787 788 CTimer::get("XIOS send field").suspend(); 789 CTimer::get("XIOS").suspend(); 790 } 791 CATCH_DUMP_STACK 922 field->setData(data); 923 924 CTimer::get("XIOS send field").suspend(); 925 CTimer::get("XIOS").suspend(); 926 } 927 CATCH_DUMP_STACK 928 929 void cxios_write_data_k47(const char* fieldid, int fieldid_size, float* data_k4, 930 int data_0size, int data_1size, int data_2size, 931 int data_3size, int data_4size, int data_5size, 932 int data_6size) 933 TRY 934 { 935 std::string fieldid_str; 936 if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return; 937 cxios_write_data_k47_hdl(CField::get(fieldid_str), data_k4, data_0size, data_1size, data_2size, data_3size, data_4size, data_5size, data_6size) ; 938 } 939 CATCH_DUMP_STACK 940 792 941 793 942 // ---------------------- Lecture des données ------------------------------ 794 943 944 void cxios_read_data_k80_hdl(CField* field, double* data_k8, int data_Xsize) 945 TRY 946 { 947 CTimer::get("XIOS").resume(); 948 CTimer::get("XIOS recv field").resume(); 949 950 CContext* context = CContext::getCurrent(); 951 if (!context->hasServer && !context->client->isAttachedModeEnabled()) 952 context->eventLoop(); 953 954 CArray<double, 1> data(data_k8, shape(data_Xsize), neverDeleteData); 955 field->getData(data); 956 957 CTimer::get("XIOS recv field").suspend(); 958 CTimer::get("XIOS").suspend(); 959 } 960 CATCH_DUMP_STACK 961 795 962 void cxios_read_data_k80(const char* fieldid, int fieldid_size, double* data_k8, int data_Xsize) 796 963 TRY … … 798 965 std::string fieldid_str; 799 966 if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return; 800 801 CTimer::get("XIOS").resume(); 802 CTimer::get("XIOS recv field").resume(); 803 804 CContext* context = CContext::getCurrent(); 805 if (!context->hasServer && !context->client->isAttachedModeEnabled()) 806 context->eventLoop(); 807 //ym context->checkBuffersAndListen(); 967 cxios_read_data_k80_hdl(CField::get(fieldid_str), data_k8, data_Xsize) ; 968 } 969 CATCH_DUMP_STACK 970 971 972 void cxios_read_data_k81_hdl(CField* field, double* data_k8, int data_Xsize) 973 TRY 974 { 975 CTimer::get("XIOS").resume(); 976 CTimer::get("XIOS recv field").resume(); 977 978 CContext* context = CContext::getCurrent(); 979 if (!context->hasServer && !context->client->isAttachedModeEnabled()) 980 context->eventLoop(); 808 981 809 982 CArray<double, 1> data(data_k8, shape(data_Xsize), neverDeleteData); 810 CField::get(fieldid_str)->getData(data);983 field->getData(data); 811 984 812 985 CTimer::get("XIOS recv field").suspend(); … … 820 993 std::string fieldid_str; 821 994 if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return; 822 823 CTimer::get("XIOS").resume(); 824 CTimer::get("XIOS recv field").resume(); 825 826 CContext* context = CContext::getCurrent(); 827 if (!context->hasServer && !context->client->isAttachedModeEnabled()) 828 context->eventLoop(); 829 //ym context->checkBuffersAndListen(); 830 831 CArray<double, 1> data(data_k8, shape(data_Xsize), neverDeleteData); 832 CField::get(fieldid_str)->getData(data); 995 cxios_read_data_k81_hdl(CField::get(fieldid_str), data_k8, data_Xsize) ; 996 } 997 CATCH_DUMP_STACK 998 999 void cxios_read_data_k82_hdl(CField* field, double* data_k8, int data_Xsize, int data_Ysize) 1000 TRY 1001 { 1002 CTimer::get("XIOS").resume(); 1003 CTimer::get("XIOS recv field").resume(); 1004 1005 CContext* context = CContext::getCurrent(); 1006 if (!context->hasServer && !context->client->isAttachedModeEnabled()) 1007 context->eventLoop(); 1008 1009 CArray<double, 2>data(data_k8, shape(data_Xsize, data_Ysize), neverDeleteData); 1010 field->getData(data); 833 1011 834 1012 CTimer::get("XIOS recv field").suspend(); … … 842 1020 std::string fieldid_str; 843 1021 if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return; 844 845 CTimer::get("XIOS").resume(); 846 CTimer::get("XIOS recv field").resume(); 847 848 CContext* context = CContext::getCurrent(); 849 if (!context->hasServer && !context->client->isAttachedModeEnabled()) 850 context->eventLoop(); 851 //ym context->checkBuffersAndListen(); 852 853 CArray<double, 2>data(data_k8, shape(data_Xsize, data_Ysize), neverDeleteData); 854 CField::get(fieldid_str)->getData(data); 855 856 CTimer::get("XIOS recv field").suspend(); 857 CTimer::get("XIOS").suspend(); 858 } 859 CATCH_DUMP_STACK 1022 cxios_read_data_k82_hdl(CField::get(fieldid_str), data_k8, data_Xsize, data_Ysize) ; 1023 } 1024 CATCH_DUMP_STACK 1025 1026 1027 void cxios_read_data_k83_hdl(CField* field, double* data_k8, int data_Xsize, int data_Ysize, int data_Zsize) 1028 TRY 1029 { 1030 CTimer::get("XIOS").resume(); 1031 CTimer::get("XIOS recv field").resume(); 1032 1033 CContext* context = CContext::getCurrent(); 1034 if (!context->hasServer && !context->client->isAttachedModeEnabled()) 1035 context->eventLoop(); 1036 1037 CArray<double, 3>data(data_k8, shape(data_Xsize, data_Ysize, data_Zsize), neverDeleteData); 1038 field->getData(data); 1039 1040 CTimer::get("XIOS recv field").suspend(); 1041 CTimer::get("XIOS").suspend(); 1042 } 1043 CATCH_DUMP_STACK 1044 860 1045 861 1046 void cxios_read_data_k83(const char* fieldid, int fieldid_size, double* data_k8, int data_Xsize, int data_Ysize, int data_Zsize) … … 864 1049 std::string fieldid_str; 865 1050 if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return; 866 867 CTimer::get("XIOS").resume(); 868 CTimer::get("XIOS recv field").resume(); 869 870 CContext* context = CContext::getCurrent(); 871 if (!context->hasServer && !context->client->isAttachedModeEnabled()) 872 context->eventLoop(); 873 //ym context->checkBuffersAndListen(); 874 875 CArray<double, 3>data(data_k8, shape(data_Xsize, data_Ysize, data_Zsize), neverDeleteData); 876 CField::get(fieldid_str)->getData(data); 1051 cxios_read_data_k83_hdl(CField::get(fieldid_str), data_k8, data_Xsize, data_Ysize, data_Zsize) ; 1052 } 1053 CATCH_DUMP_STACK 1054 1055 void cxios_read_data_k84_hdl(CField* field, double* data_k8, 1056 int data_0size, int data_1size, int data_2size, 1057 int data_3size) 1058 TRY 1059 { 1060 CTimer::get("XIOS").resume(); 1061 CTimer::get("XIOS recv field").resume(); 1062 1063 CContext* context = CContext::getCurrent(); 1064 if (!context->hasServer && !context->client->isAttachedModeEnabled()) 1065 context->eventLoop(); 1066 1067 CArray<double, 4>data(data_k8, shape(data_0size, data_1size, data_2size, data_3size), neverDeleteData); 1068 field->getData(data); 877 1069 878 1070 CTimer::get("XIOS recv field").suspend(); … … 888 1080 std::string fieldid_str; 889 1081 if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return; 890 891 CTimer::get("XIOS").resume(); 892 CTimer::get("XIOS recv field").resume(); 893 894 CContext* context = CContext::getCurrent(); 895 if (!context->hasServer && !context->client->isAttachedModeEnabled()) 896 context->eventLoop(); 897 //ym context->checkBuffersAndListen(); 898 899 CArray<double, 4>data(data_k8, shape(data_0size, data_1size, data_2size, data_3size), neverDeleteData); 900 CField::get(fieldid_str)->getData(data); 1082 cxios_read_data_k84_hdl(CField::get(fieldid_str), data_k8, data_0size, data_1size, data_2size, data_3size) ; 1083 } 1084 CATCH_DUMP_STACK 1085 1086 void cxios_read_data_k85_hdl(CField* field, double* data_k8, 1087 int data_0size, int data_1size, int data_2size, 1088 int data_3size, int data_4size) 1089 TRY 1090 { 1091 CTimer::get("XIOS").resume(); 1092 CTimer::get("XIOS recv field").resume(); 1093 1094 CContext* context = CContext::getCurrent(); 1095 if (!context->hasServer && !context->client->isAttachedModeEnabled()) 1096 context->eventLoop(); 1097 1098 CArray<double, 5>data(data_k8, shape(data_0size, data_1size, data_2size, data_3size, data_4size), neverDeleteData); 1099 field->getData(data); 901 1100 902 1101 CTimer::get("XIOS recv field").suspend(); … … 912 1111 std::string fieldid_str; 913 1112 if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return; 914 915 CTimer::get("XIOS").resume(); 916 CTimer::get("XIOS recv field").resume(); 917 918 CContext* context = CContext::getCurrent(); 919 if (!context->hasServer && !context->client->isAttachedModeEnabled()) 920 context->eventLoop(); 921 //ym context->checkBuffersAndListen(); 922 923 CArray<double, 5>data(data_k8, shape(data_0size, data_1size, data_2size, data_3size, data_4size), neverDeleteData); 924 CField::get(fieldid_str)->getData(data); 1113 cxios_read_data_k85_hdl(CField::get(fieldid_str), data_k8, data_0size, data_1size, data_2size, data_3size, data_4size) ; 1114 } 1115 CATCH_DUMP_STACK 1116 1117 void cxios_read_data_k86_hdl(CField* field, double* data_k8, 1118 int data_0size, int data_1size, int data_2size, 1119 int data_3size, int data_4size, int data_5size) 1120 TRY 1121 { 1122 CTimer::get("XIOS").resume(); 1123 CTimer::get("XIOS recv field").resume(); 1124 1125 CContext* context = CContext::getCurrent(); 1126 if (!context->hasServer && !context->client->isAttachedModeEnabled()) 1127 context->eventLoop(); 1128 1129 CArray<double, 6>data(data_k8, shape(data_0size, data_1size, data_2size, data_3size, data_4size, data_5size), neverDeleteData); 1130 field->getData(data); 925 1131 926 1132 CTimer::get("XIOS recv field").suspend(); … … 936 1142 std::string fieldid_str; 937 1143 if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return; 938 939 CTimer::get("XIOS").resume(); 940 CTimer::get("XIOS recv field").resume(); 941 942 CContext* context = CContext::getCurrent(); 943 if (!context->hasServer && !context->client->isAttachedModeEnabled()) 944 context->eventLoop(); 945 //ym context->checkBuffersAndListen(); 946 947 CArray<double, 6>data(data_k8, shape(data_0size, data_1size, data_2size, data_3size, data_4size, data_5size), neverDeleteData); 948 CField::get(fieldid_str)->getData(data); 949 950 CTimer::get("XIOS recv field").suspend(); 951 CTimer::get("XIOS").suspend(); 952 } 953 CATCH_DUMP_STACK 954 955 void cxios_read_data_k87(const char* fieldid, int fieldid_size, double* data_k8, 1144 cxios_read_data_k86_hdl(CField::get(fieldid_str), data_k8, data_0size, data_1size, data_2size, data_3size, data_4size, data_5size) ; 1145 } 1146 CATCH_DUMP_STACK 1147 1148 void cxios_read_data_k87_hdl(CField* field, double* data_k8, 956 1149 int data_0size, int data_1size, int data_2size, 957 1150 int data_3size, int data_4size, int data_5size, … … 959 1152 TRY 960 1153 { 961 std::string fieldid_str; 962 if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return; 963 964 CTimer::get("XIOS").resume(); 965 CTimer::get("XIOS recv field").resume(); 966 967 CContext* context = CContext::getCurrent(); 968 if (!context->hasServer && !context->client->isAttachedModeEnabled()) 969 context->eventLoop(); 970 //ym context->checkBuffersAndListen(); 1154 CTimer::get("XIOS").resume(); 1155 CTimer::get("XIOS recv field").resume(); 1156 1157 CContext* context = CContext::getCurrent(); 1158 if (!context->hasServer && !context->client->isAttachedModeEnabled()) 1159 context->eventLoop(); 971 1160 972 1161 CArray<double, 7>data(data_k8, shape(data_0size, data_1size, data_2size, data_3size, data_4size, data_5size, data_6size), neverDeleteData); 973 CField::get(fieldid_str)->getData(data); 974 975 CTimer::get("XIOS recv field").suspend(); 976 CTimer::get("XIOS").suspend(); 977 } 978 CATCH_DUMP_STACK 979 980 void cxios_read_data_k40(const char* fieldid, int fieldid_size, float* data_k4, int data_Xsize) 981 TRY 982 { 983 std::string fieldid_str; 984 if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return; 985 986 CTimer::get("XIOS").resume(); 987 CTimer::get("XIOS recv field").resume(); 988 989 CContext* context = CContext::getCurrent(); 990 if (!context->hasServer && !context->client->isAttachedModeEnabled()) 991 context->eventLoop(); 992 //ym context->checkBuffersAndListen(); 1162 field->getData(data); 1163 1164 CTimer::get("XIOS recv field").suspend(); 1165 CTimer::get("XIOS").suspend(); 1166 } 1167 CATCH_DUMP_STACK 1168 1169 void cxios_read_data_k87(const char* fieldid, int fieldid_size, double* data_k8, 1170 int data_0size, int data_1size, int data_2size, 1171 int data_3size, int data_4size, int data_5size, 1172 int data_6size) 1173 TRY 1174 { 1175 std::string fieldid_str; 1176 if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return; 1177 cxios_read_data_k87_hdl(CField::get(fieldid_str), data_k8, data_0size, data_1size, data_2size, data_3size, data_4size, data_5size, data_6size) ; 1178 } 1179 CATCH_DUMP_STACK 1180 1181 1182 1183 1184 1185 1186 void cxios_read_data_k40_hdl(CField* field, float* data_k4, int data_Xsize) 1187 TRY 1188 { 1189 CTimer::get("XIOS").resume(); 1190 CTimer::get("XIOS recv field").resume(); 1191 1192 CContext* context = CContext::getCurrent(); 1193 if (!context->hasServer && !context->client->isAttachedModeEnabled()) 1194 context->eventLoop(); 993 1195 994 1196 CArray<double, 1> data(data_Xsize); 995 CField::get(fieldid_str)->getData(data);1197 field->getData(data); 996 1198 CArray<float, 1> data_tmp(data_k4, shape(data_Xsize), neverDeleteData); 997 1199 data_tmp = data; … … 1002 1204 CATCH_DUMP_STACK 1003 1205 1004 void cxios_read_data_k41(const char* fieldid, int fieldid_size, float* data_k4, int data_Xsize) 1005 TRY 1006 { 1007 std::string fieldid_str; 1008 if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return; 1009 1010 CTimer::get("XIOS").resume(); 1011 CTimer::get("XIOS recv field").resume(); 1012 1013 CContext* context = CContext::getCurrent(); 1014 if (!context->hasServer && !context->client->isAttachedModeEnabled()) 1015 context->eventLoop(); 1016 //ym context->checkBuffersAndListen(); 1206 void cxios_read_data_k40(const char* fieldid, int fieldid_size, float* data_k4, int data_Xsize) 1207 TRY 1208 { 1209 std::string fieldid_str; 1210 if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return; 1211 cxios_read_data_k40_hdl(CField::get(fieldid_str), data_k4, data_Xsize) ; 1212 } 1213 CATCH_DUMP_STACK 1214 1215 1216 1217 void cxios_read_data_k41_hdl(CField* field, float* data_k4, int data_Xsize) 1218 TRY 1219 { 1220 CTimer::get("XIOS").resume(); 1221 CTimer::get("XIOS recv field").resume(); 1222 1223 CContext* context = CContext::getCurrent(); 1224 if (!context->hasServer && !context->client->isAttachedModeEnabled()) 1225 context->eventLoop(); 1017 1226 1018 1227 CArray<double, 1> data(data_Xsize); 1019 CField::get(fieldid_str)->getData(data);1228 field->getData(data); 1020 1229 CArray<float, 1> data_tmp(data_k4, shape(data_Xsize), neverDeleteData); 1021 1230 data_tmp = data; … … 1026 1235 CATCH_DUMP_STACK 1027 1236 1028 void cxios_read_data_k42(const char* fieldid, int fieldid_size, float* data_k4, int data_Xsize, int data_Ysize) 1029 TRY 1030 { 1031 std::string fieldid_str; 1032 if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return; 1033 1034 CTimer::get("XIOS").resume(); 1035 CTimer::get("XIOS recv field").resume(); 1036 1037 CContext* context = CContext::getCurrent(); 1038 if (!context->hasServer && !context->client->isAttachedModeEnabled()) 1039 context->eventLoop(); 1040 //ym context->checkBuffersAndListen(); 1237 void cxios_read_data_k41(const char* fieldid, int fieldid_size, float* data_k4, int data_Xsize) 1238 TRY 1239 { 1240 std::string fieldid_str; 1241 if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return; 1242 cxios_read_data_k41_hdl(CField::get(fieldid_str), data_k4, data_Xsize) ; 1243 } 1244 CATCH_DUMP_STACK 1245 1246 1247 1248 1249 void cxios_read_data_k42_hdl(CField* field, float* data_k4, int data_Xsize, int data_Ysize) 1250 TRY 1251 { 1252 CTimer::get("XIOS").resume(); 1253 CTimer::get("XIOS recv field").resume(); 1254 1255 CContext* context = CContext::getCurrent(); 1256 if (!context->hasServer && !context->client->isAttachedModeEnabled()) 1257 context->eventLoop(); 1041 1258 1042 1259 CArray<double, 2> data(data_Xsize, data_Ysize); 1043 CField::get(fieldid_str)->getData(data);1260 field->getData(data); 1044 1261 CArray<float, 2> data_tmp(data_k4, shape(data_Xsize, data_Ysize), neverDeleteData); 1045 1262 data_tmp = data; … … 1050 1267 CATCH_DUMP_STACK 1051 1268 1052 void cxios_read_data_k43(const char* fieldid, int fieldid_size, float* data_k4, int data_Xsize, int data_Ysize, int data_Zsize) 1053 TRY 1054 { 1055 std::string fieldid_str; 1056 if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return; 1057 1058 CTimer::get("XIOS").resume(); 1059 CTimer::get("XIOS recv field").resume(); 1060 1061 CContext* context = CContext::getCurrent(); 1062 if (!context->hasServer && !context->client->isAttachedModeEnabled()) 1063 context->eventLoop(); 1064 //ym context->checkBuffersAndListen(); 1269 void cxios_read_data_k42(const char* fieldid, int fieldid_size, float* data_k4, int data_Xsize, int data_Ysize) 1270 TRY 1271 { 1272 std::string fieldid_str; 1273 if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return; 1274 cxios_read_data_k42_hdl(CField::get(fieldid_str), data_k4, data_Xsize, data_Ysize) ; 1275 } 1276 CATCH_DUMP_STACK 1277 1278 1279 1280 void cxios_read_data_k43_hdl(CField* field, float* data_k4, int data_Xsize, int data_Ysize, int data_Zsize) 1281 TRY 1282 { 1283 CTimer::get("XIOS").resume(); 1284 CTimer::get("XIOS recv field").resume(); 1285 1286 CContext* context = CContext::getCurrent(); 1287 if (!context->hasServer && !context->client->isAttachedModeEnabled()) 1288 context->eventLoop(); 1065 1289 1066 1290 CArray<double, 3> data(data_Xsize, data_Ysize, data_Zsize); 1067 CField::get(fieldid_str)->getData(data);1291 field->getData(data); 1068 1292 CArray<float, 3> data_tmp(data_k4, shape(data_Xsize, data_Ysize, data_Zsize), neverDeleteData); 1069 1293 data_tmp = data; … … 1074 1298 CATCH_DUMP_STACK 1075 1299 1076 void cxios_read_data_k44(const char* fieldid, int fieldid_size, float* data_k4, 1300 void cxios_read_data_k43(const char* fieldid, int fieldid_size, float* data_k4, int data_Xsize, int data_Ysize, int data_Zsize) 1301 TRY 1302 { 1303 std::string fieldid_str; 1304 if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return; 1305 cxios_read_data_k43_hdl(CField::get(fieldid_str), data_k4,data_Xsize, data_Ysize, data_Zsize) ; 1306 } 1307 CATCH_DUMP_STACK 1308 1309 1310 void cxios_read_data_k44_hdl(CField* field, float* data_k4, 1077 1311 int data_0size, int data_1size, int data_2size, 1078 1312 int data_3size) 1079 1313 TRY 1080 1314 { 1081 std::string fieldid_str; 1082 if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return; 1083 1084 CTimer::get("XIOS").resume(); 1085 CTimer::get("XIOS recv field").resume(); 1086 1087 CContext* context = CContext::getCurrent(); 1088 if (!context->hasServer && !context->client->isAttachedModeEnabled()) 1089 context->eventLoop(); 1090 //ym context->checkBuffersAndListen(); 1315 CTimer::get("XIOS").resume(); 1316 CTimer::get("XIOS recv field").resume(); 1317 1318 CContext* context = CContext::getCurrent(); 1319 if (!context->hasServer && !context->client->isAttachedModeEnabled()) 1320 context->eventLoop(); 1091 1321 1092 1322 CArray<double, 4> data(data_0size, data_1size, data_2size, data_3size); 1093 CField::get(fieldid_str)->getData(data);1323 field->getData(data); 1094 1324 CArray<float, 4> data_tmp(data_k4, shape(data_0size, data_1size, data_2size, data_3size), neverDeleteData); 1095 1325 data_tmp = data; … … 1100 1330 CATCH_DUMP_STACK 1101 1331 1102 void cxios_read_data_k45(const char* fieldid, int fieldid_size, float* data_k4, 1332 void cxios_read_data_k44(const char* fieldid, int fieldid_size, float* data_k4, 1333 int data_0size, int data_1size, int data_2size, 1334 int data_3size) 1335 TRY 1336 { 1337 std::string fieldid_str; 1338 if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return; 1339 cxios_read_data_k44_hdl(CField::get(fieldid_str), data_k4, data_0size, data_1size, data_2size, data_3size) ; 1340 } 1341 CATCH_DUMP_STACK 1342 1343 1344 1345 void cxios_read_data_k45_hdl(CField* field, float* data_k4, 1103 1346 int data_0size, int data_1size, int data_2size, 1104 1347 int data_3size, int data_4size) 1105 1348 TRY 1106 1349 { 1107 std::string fieldid_str; 1108 if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return; 1109 1110 CTimer::get("XIOS").resume(); 1111 CTimer::get("XIOS recv field").resume(); 1112 1113 CContext* context = CContext::getCurrent(); 1114 if (!context->hasServer && !context->client->isAttachedModeEnabled()) 1115 context->eventLoop(); 1116 //ym context->checkBuffersAndListen(); 1350 CTimer::get("XIOS").resume(); 1351 CTimer::get("XIOS recv field").resume(); 1352 1353 CContext* context = CContext::getCurrent(); 1354 if (!context->hasServer && !context->client->isAttachedModeEnabled()) 1355 context->eventLoop(); 1117 1356 1118 1357 CArray<double, 5> data(data_0size, data_1size, data_2size, data_3size, data_4size); 1119 CField::get(fieldid_str)->getData(data);1358 field->getData(data); 1120 1359 CArray<float, 5> data_tmp(data_k4, shape(data_0size, data_1size, data_2size, data_3size, data_4size), neverDeleteData); 1121 1360 data_tmp = data; … … 1126 1365 CATCH_DUMP_STACK 1127 1366 1128 void cxios_read_data_k46(const char* fieldid, int fieldid_size, float* data_k4, 1367 void cxios_read_data_k45(const char* fieldid, int fieldid_size, float* data_k4, 1368 int data_0size, int data_1size, int data_2size, 1369 int data_3size, int data_4size) 1370 TRY 1371 { 1372 std::string fieldid_str; 1373 if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return; 1374 cxios_read_data_k45_hdl(CField::get(fieldid_str), data_k4, data_0size, data_1size, data_2size, data_3size, data_4size) ; 1375 } 1376 CATCH_DUMP_STACK 1377 1378 1379 void cxios_read_data_k46_hdl(CField* field, float* data_k4, 1129 1380 int data_0size, int data_1size, int data_2size, 1130 1381 int data_3size, int data_4size, int data_5size) 1131 1382 TRY 1132 1383 { 1133 std::string fieldid_str; 1134 if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return; 1135 1136 CTimer::get("XIOS").resume(); 1137 CTimer::get("XIOS recv field").resume(); 1138 1139 CContext* context = CContext::getCurrent(); 1140 if (!context->hasServer && !context->client->isAttachedModeEnabled()) 1141 context->eventLoop(); 1142 //ym context->checkBuffersAndListen(); 1384 CTimer::get("XIOS").resume(); 1385 CTimer::get("XIOS recv field").resume(); 1386 1387 CContext* context = CContext::getCurrent(); 1388 if (!context->hasServer && !context->client->isAttachedModeEnabled()) 1389 context->eventLoop(); 1143 1390 1144 1391 CArray<double, 6> data(data_0size, data_1size, data_2size, data_3size, data_4size, data_5size); 1145 CField::get(fieldid_str)->getData(data);1392 field->getData(data); 1146 1393 CArray<float, 6> data_tmp(data_k4, shape(data_0size, data_1size, data_2size, data_3size, data_4size, data_5size), neverDeleteData); 1147 1394 data_tmp = data; … … 1152 1399 CATCH_DUMP_STACK 1153 1400 1154 void cxios_read_data_k47(const char* fieldid, int fieldid_size, float* data_k4, 1401 void cxios_read_data_k46(const char* fieldid, int fieldid_size, float* data_k4, 1402 int data_0size, int data_1size, int data_2size, 1403 int data_3size, int data_4size, int data_5size) 1404 TRY 1405 { 1406 std::string fieldid_str; 1407 if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return; 1408 cxios_read_data_k46_hdl(CField::get(fieldid_str), data_k4, data_0size, data_1size, data_2size, data_3size, data_4size, data_5size) ; 1409 } 1410 CATCH_DUMP_STACK 1411 1412 1413 1414 void cxios_read_data_k47_hdl(CField* field, float* data_k4, 1155 1415 int data_0size, int data_1size, int data_2size, 1156 1416 int data_3size, int data_4size, int data_5size, … … 1158 1418 TRY 1159 1419 { 1160 std::string fieldid_str; 1161 if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return; 1162 1163 CTimer::get("XIOS").resume(); 1164 CTimer::get("XIOS recv field").resume(); 1165 1166 CContext* context = CContext::getCurrent(); 1167 if (!context->hasServer && !context->client->isAttachedModeEnabled()) 1168 context->eventLoop(); 1169 //ym context->checkBuffersAndListen(); 1420 CTimer::get("XIOS").resume(); 1421 CTimer::get("XIOS recv field").resume(); 1422 1423 CContext* context = CContext::getCurrent(); 1424 if (!context->hasServer && !context->client->isAttachedModeEnabled()) 1425 context->eventLoop(); 1170 1426 1171 1427 CArray<double, 7> data(data_0size, data_1size, data_2size, data_3size, data_4size, data_5size, data_6size); 1172 CField::get(fieldid_str)->getData(data);1428 field->getData(data); 1173 1429 CArray<float, 7> data_tmp(data_k4, shape(data_0size, data_1size, data_2size, data_3size, data_4size, data_5size, data_6size), neverDeleteData); 1174 1430 data_tmp = data; … … 1178 1434 } 1179 1435 CATCH_DUMP_STACK 1436 1437 void cxios_read_data_k47(const char* fieldid, int fieldid_size, float* data_k4, 1438 int data_0size, int data_1size, int data_2size, 1439 int data_3size, int data_4size, int data_5size, 1440 int data_6size) 1441 TRY 1442 { 1443 std::string fieldid_str; 1444 if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return; 1445 cxios_read_data_k47_hdl(CField::get(fieldid_str), data_k4, data_0size, data_1size, data_2size, data_3size, data_4size, data_5size, data_6size) ; 1446 } 1447 CATCH_DUMP_STACK 1180 1448 } // extern "C" -
XIOS/dev/dev_trunk_graph/src/interface/fortran/context_interface.f90
r545 r2137 16 16 END SUBROUTINE cxios_context_get_current 17 17 18 SUBROUTINE cxios_context_get_id(context, idt, idt_size) BIND(C) 19 import C_CHAR, C_INTPTR_T, C_INT 20 INTEGER (kind = C_INTPTR_T) :: context 21 CHARACTER(kind = C_CHAR) , DIMENSION(*) :: idt 22 INTEGER (kind = C_INT) , VALUE :: idt_size 23 END SUBROUTINE cxios_context_get_id 24 18 25 SUBROUTINE cxios_context_set_current(context, withswap) BIND(C) 19 26 import C_BOOL, C_INT, C_INTPTR_T -
XIOS/dev/dev_trunk_graph/src/interface/fortran/icontext.F90
r947 r2137 17 17 END INTERFACE xios(set_current_context) 18 18 19 INTERFACE xios(get_current_context) 20 MODULE PROCEDURE xios(get_current_context_hdl), xios(get_current_context_id) 21 END INTERFACE xios(get_current_context) 22 19 23 CONTAINS ! Fonctions disponibles pour les utilisateurs. 20 24 … … 27 31 END SUBROUTINE xios(get_context_handle) 28 32 29 SUBROUTINE xios(get_current_context )(context)33 SUBROUTINE xios(get_current_context_hdl)(context) 30 34 IMPLICIT NONE 31 35 32 TYPE(txios(context)), INTENT( IN) :: context36 TYPE(txios(context)), INTENT(OUT) :: context 33 37 34 38 CALL cxios_context_get_current(context%daddr) 35 39 36 END SUBROUTINE xios(get_current_context )40 END SUBROUTINE xios(get_current_context_hdl) 37 41 42 SUBROUTINE xios(get_current_context_id)(idt) 43 IMPLICIT NONE 44 CHARACTER(len = *) , INTENT(OUT) :: idt 45 TYPE(txios(context)) :: context 46 47 CALL cxios_context_get_current(context%daddr) 48 CALL cxios_context_get_id(context%daddr, idt, len(idt)) 49 50 END SUBROUTINE xios(get_current_context_id) 51 38 52 SUBROUTINE xios(set_current_context_hdl)(context, withswap) 39 53 IMPLICIT NONE -
XIOS/dev/dev_trunk_graph/src/interface/fortran/idata.F90
r1590 r2137 4 4 USE, INTRINSIC :: ISO_C_BINDING 5 5 USE ICONTEXT 6 USE IFIELD 6 7 7 8 INTERFACE ! Ne pas appeler directement/Interface FORTRAN 2003 <-> C99 … … 52 53 END SUBROUTINE cxios_solve_inheritance 53 54 55 SUBROUTINE cxios_write_data_k80_hdl(field_hdl, data_k8, data_Xsize) BIND(C) 56 USE ISO_C_BINDING 57 INTEGER (kind = C_INTPTR_T), VALUE :: field_hdl 58 REAL (kind = C_DOUBLE) :: data_k8 59 INTEGER (kind = C_INT) , VALUE :: data_Xsize 60 END SUBROUTINE cxios_write_data_k80_hdl 61 54 62 SUBROUTINE cxios_write_data_k80(fieldid, fieldid_size, data_k8, data_Xsize) BIND(C) 55 63 USE ISO_C_BINDING … … 60 68 END SUBROUTINE cxios_write_data_k80 61 69 70 SUBROUTINE cxios_write_data_k81_hdl(field_hdl, data_k8, data_Xsize) BIND(C) 71 USE ISO_C_BINDING 72 INTEGER (kind = C_INTPTR_T), VALUE :: field_hdl 73 REAL (kind = C_DOUBLE), DIMENSION(*) :: data_k8 74 INTEGER (kind = C_INT) , VALUE :: data_Xsize 75 END SUBROUTINE cxios_write_data_k81_hdl 76 62 77 SUBROUTINE cxios_write_data_k81(fieldid, fieldid_size, data_k8, data_Xsize) BIND(C) 63 78 USE ISO_C_BINDING … … 67 82 INTEGER (kind = C_INT) , VALUE :: data_Xsize 68 83 END SUBROUTINE cxios_write_data_k81 84 85 SUBROUTINE cxios_write_data_k82_hdl(field_hdl, data_k8, data_Xsize, data_Ysize) BIND(C) 86 USE ISO_C_BINDING 87 INTEGER (kind = C_INTPTR_T), VALUE :: field_hdl 88 REAL (kind = C_DOUBLE), DIMENSION(*) :: data_k8 89 INTEGER (kind = C_INT) , VALUE :: data_Xsize, data_Ysize 90 END SUBROUTINE cxios_write_data_k82_hdl 69 91 70 92 SUBROUTINE cxios_write_data_k82(fieldid, fieldid_size, data_k8, data_Xsize, data_Ysize) BIND(C) … … 76 98 END SUBROUTINE cxios_write_data_k82 77 99 100 SUBROUTINE cxios_write_data_k83_hdl(field_hdl, data_k8, data_Xsize, data_Ysize, data_Zsize) BIND(C) 101 USE ISO_C_BINDING 102 INTEGER (kind = C_INTPTR_T), VALUE :: field_hdl 103 REAL (kind = C_DOUBLE), DIMENSION(*) :: data_k8 104 INTEGER (kind = C_INT) , VALUE :: data_Xsize, data_Ysize, data_Zsize 105 END SUBROUTINE cxios_write_data_k83_hdl 106 78 107 SUBROUTINE cxios_write_data_k83(fieldid, fieldid_size, data_k8, data_Xsize, data_Ysize, data_Zsize) BIND(C) 79 108 USE ISO_C_BINDING … … 84 113 END SUBROUTINE cxios_write_data_k83 85 114 115 SUBROUTINE cxios_write_data_k84_hdl(field_hdl, data_k8, & 116 data_0size, data_1size, data_2size, & 117 data_3size) BIND(C) 118 USE ISO_C_BINDING 119 INTEGER (kind = C_INTPTR_T), VALUE :: field_hdl 120 REAL (kind = C_DOUBLE), DIMENSION(*) :: data_k8 121 INTEGER (kind = C_INT) , VALUE :: data_0size, data_1size, data_2size 122 INTEGER (kind = C_INT) , VALUE :: data_3size 123 END SUBROUTINE cxios_write_data_k84_hdl 124 86 125 SUBROUTINE cxios_write_data_k84(fieldid, fieldid_size, data_k8, & 87 126 data_0size, data_1size, data_2size, & … … 95 134 END SUBROUTINE cxios_write_data_k84 96 135 136 SUBROUTINE cxios_write_data_k85_hdl(field_hdl, data_k8, & 137 data_0size, data_1size, data_2size, & 138 data_3size, data_4size) BIND(C) 139 USE ISO_C_BINDING 140 INTEGER (kind = C_INTPTR_T), VALUE :: field_hdl 141 REAL (kind = C_DOUBLE), DIMENSION(*) :: data_k8 142 INTEGER (kind = C_INT) , VALUE :: data_0size, data_1size, data_2size 143 INTEGER (kind = C_INT) , VALUE :: data_3size, data_4size 144 END SUBROUTINE cxios_write_data_k85_hdl 145 97 146 SUBROUTINE cxios_write_data_k85(fieldid, fieldid_size, data_k8, & 98 147 data_0size, data_1size, data_2size, & … … 106 155 END SUBROUTINE cxios_write_data_k85 107 156 157 SUBROUTINE cxios_write_data_k86_hdl(field_hdl, data_k8, & 158 data_0size, data_1size, data_2size, & 159 data_3size, data_4size, data_5size) BIND(C) 160 USE ISO_C_BINDING 161 INTEGER (kind = C_INTPTR_T), VALUE :: field_hdl 162 REAL (kind = C_DOUBLE), DIMENSION(*) :: data_k8 163 INTEGER (kind = C_INT) , VALUE :: data_0size, data_1size, data_2size 164 INTEGER (kind = C_INT) , VALUE :: data_3size, data_4size, data_5size 165 END SUBROUTINE cxios_write_data_k86_hdl 166 108 167 SUBROUTINE cxios_write_data_k86(fieldid, fieldid_size, data_k8, & 109 168 data_0size, data_1size, data_2size, & … … 117 176 END SUBROUTINE cxios_write_data_k86 118 177 119 SUBROUTINE cxios_write_data_k87 (fieldid, fieldid_size, data_k8, &178 SUBROUTINE cxios_write_data_k87_hdl(field_hdl, data_k8, & 120 179 data_0size, data_1size, data_2size, & 121 180 data_3size, data_4size, data_5size, & 122 181 data_6size) BIND(C) 123 182 USE ISO_C_BINDING 183 INTEGER (kind = C_INTPTR_T), VALUE :: field_hdl 184 REAL (kind = C_DOUBLE), DIMENSION(*) :: data_k8 185 INTEGER (kind = C_INT) , VALUE :: data_0size, data_1size, data_2size 186 INTEGER (kind = C_INT) , VALUE :: data_3size, data_4size, data_5size 187 INTEGER (kind = C_INT) , VALUE :: data_6size 188 END SUBROUTINE cxios_write_data_k87_hdl 189 190 SUBROUTINE cxios_write_data_k87(fieldid, fieldid_size, data_k8, & 191 data_0size, data_1size, data_2size, & 192 data_3size, data_4size, data_5size, & 193 data_6size) BIND(C) 194 USE ISO_C_BINDING 124 195 CHARACTER(kind = C_CHAR) , DIMENSION(*) :: fieldid 125 196 REAL (kind = C_DOUBLE), DIMENSION(*) :: data_k8 … … 130 201 END SUBROUTINE cxios_write_data_k87 131 202 203 SUBROUTINE cxios_write_data_k40_hdl(field_hdl, data_k4, data_Xsize) BIND(C) 204 USE ISO_C_BINDING 205 INTEGER (kind = C_INTPTR_T), VALUE :: field_hdl 206 REAL (kind = C_FLOAT) :: data_k4 207 INTEGER (kind = C_INT) , VALUE :: data_Xsize 208 END SUBROUTINE cxios_write_data_k40_hdl 209 132 210 SUBROUTINE cxios_write_data_k40(fieldid, fieldid_size, data_k4, data_Xsize) BIND(C) 133 211 USE ISO_C_BINDING … … 138 216 END SUBROUTINE cxios_write_data_k40 139 217 218 SUBROUTINE cxios_write_data_k41_hdl(field_hdl, data_k4, data_Xsize) BIND(C) 219 USE ISO_C_BINDING 220 INTEGER (kind = C_INTPTR_T), VALUE :: field_hdl 221 REAL (kind = C_FLOAT) , DIMENSION(*) :: data_k4 222 INTEGER (kind = C_INT) , VALUE :: data_Xsize 223 END SUBROUTINE cxios_write_data_k41_hdl 224 140 225 SUBROUTINE cxios_write_data_k41(fieldid, fieldid_size, data_k4, data_Xsize) BIND(C) 141 226 USE ISO_C_BINDING … … 146 231 END SUBROUTINE cxios_write_data_k41 147 232 233 SUBROUTINE cxios_write_data_k42_hdl(field_hdl, data_k4, data_Xsize, data_Ysize) BIND(C) 234 USE ISO_C_BINDING 235 INTEGER (kind = C_INTPTR_T), VALUE :: field_hdl 236 REAL (kind = C_FLOAT) , DIMENSION(*) :: data_k4 237 INTEGER (kind = C_INT) , VALUE :: data_Xsize, data_Ysize 238 END SUBROUTINE cxios_write_data_k42_hdl 239 148 240 SUBROUTINE cxios_write_data_k42(fieldid, fieldid_size, data_k4, data_Xsize, data_Ysize) BIND(C) 149 241 USE ISO_C_BINDING … … 154 246 END SUBROUTINE cxios_write_data_k42 155 247 248 SUBROUTINE cxios_write_data_k43_hdl(field_hdl, data_k4, data_Xsize, data_Ysize, data_Zsize) BIND(C) 249 USE ISO_C_BINDING 250 INTEGER (kind = C_INTPTR_T), VALUE :: field_hdl 251 REAL (kind = C_FLOAT) , DIMENSION(*) :: data_k4 252 INTEGER (kind = C_INT) , VALUE :: data_Xsize, data_Ysize, data_Zsize 253 END SUBROUTINE cxios_write_data_k43_hdl 254 156 255 SUBROUTINE cxios_write_data_k43(fieldid, fieldid_size, data_k4, data_Xsize, data_Ysize, data_Zsize) BIND(C) 157 256 USE ISO_C_BINDING … … 162 261 END SUBROUTINE cxios_write_data_k43 163 262 263 SUBROUTINE cxios_write_data_k44_hdl(field_hdl, data_k4, & 264 data_0size, data_1size, data_2size, & 265 data_3size) BIND(C) 266 USE ISO_C_BINDING 267 INTEGER (kind = C_INTPTR_T), VALUE :: field_hdl 268 REAL (kind = C_FLOAT) , DIMENSION(*) :: data_k4 269 INTEGER (kind = C_INT) , VALUE :: data_0size, data_1size, data_2size 270 INTEGER (kind = C_INT) , VALUE :: data_3size 271 END SUBROUTINE cxios_write_data_k44_hdl 272 164 273 SUBROUTINE cxios_write_data_k44(fieldid, fieldid_size, data_k4, & 165 274 data_0size, data_1size, data_2size, & … … 173 282 END SUBROUTINE cxios_write_data_k44 174 283 284 SUBROUTINE cxios_write_data_k45_hdl(field_hdl, data_k4, & 285 data_0size, data_1size, data_2size, & 286 data_3size, data_4size) BIND(C) 287 USE ISO_C_BINDING 288 INTEGER (kind = C_INTPTR_T), VALUE :: field_hdl 289 REAL (kind = C_FLOAT) , DIMENSION(*) :: data_k4 290 INTEGER (kind = C_INT) , VALUE :: data_0size, data_1size, data_2size 291 INTEGER (kind = C_INT) , VALUE :: data_3size, data_4size 292 END SUBROUTINE cxios_write_data_k45_hdl 293 175 294 SUBROUTINE cxios_write_data_k45(fieldid, fieldid_size, data_k4, & 176 295 data_0size, data_1size, data_2size, & … … 184 303 END SUBROUTINE cxios_write_data_k45 185 304 305 SUBROUTINE cxios_write_data_k46_hdl(field_hdl, data_k4, & 306 data_0size, data_1size, data_2size, & 307 data_3size, data_4size, data_5size) BIND(C) 308 USE ISO_C_BINDING 309 INTEGER (kind = C_INTPTR_T), VALUE :: field_hdl 310 REAL (kind = C_FLOAT) , DIMENSION(*) :: data_k4 311 INTEGER (kind = C_INT) , VALUE :: data_0size, data_1size, data_2size 312 INTEGER (kind = C_INT) , VALUE :: data_3size, data_4size, data_5size 313 END SUBROUTINE cxios_write_data_k46_hdl 314 186 315 SUBROUTINE cxios_write_data_k46(fieldid, fieldid_size, data_k4, & 187 316 data_0size, data_1size, data_2size, & … … 195 324 END SUBROUTINE cxios_write_data_k46 196 325 197 SUBROUTINE cxios_write_data_k47 (fieldid, fieldid_size, data_k4, &326 SUBROUTINE cxios_write_data_k47_hdl(field_hdl, data_k4, & 198 327 data_0size, data_1size, data_2size, & 199 328 data_3size, data_4size, data_5size, & 200 329 data_6size) BIND(C) 201 330 USE ISO_C_BINDING 331 INTEGER (kind = C_INTPTR_T), VALUE :: field_hdl 332 REAL (kind = C_FLOAT) , DIMENSION(*) :: data_k4 333 INTEGER (kind = C_INT) , VALUE :: data_0size, data_1size, data_2size 334 INTEGER (kind = C_INT) , VALUE :: data_3size, data_4size, data_5size 335 INTEGER (kind = C_INT) , VALUE :: data_6size 336 END SUBROUTINE cxios_write_data_k47_hdl 337 338 SUBROUTINE cxios_write_data_k47(fieldid, fieldid_size, data_k4, & 339 data_0size, data_1size, data_2size, & 340 data_3size, data_4size, data_5size, & 341 data_6size) BIND(C) 342 USE ISO_C_BINDING 202 343 CHARACTER(kind = C_CHAR) , DIMENSION(*) :: fieldid 203 344 REAL (kind = C_FLOAT) , DIMENSION(*) :: data_k4 … … 208 349 END SUBROUTINE cxios_write_data_k47 209 350 351 210 352 ! Read data 353 SUBROUTINE cxios_read_data_k80_hdl(field_hdl, data_k8, data_Xsize) BIND(C) 354 USE ISO_C_BINDING 355 INTEGER (kind = C_INTPTR_T), VALUE :: field_hdl 356 REAL (kind = C_DOUBLE) :: data_k8 357 INTEGER (kind = C_INT) , VALUE :: data_Xsize 358 END SUBROUTINE cxios_read_data_k80_hdl 359 211 360 SUBROUTINE cxios_read_data_k80(fieldid, fieldid_size, data_k8, data_Xsize) BIND(C) 212 361 USE ISO_C_BINDING … … 217 366 END SUBROUTINE cxios_read_data_k80 218 367 368 SUBROUTINE cxios_read_data_k81_hdl(field_hdl, data_k8, data_Xsize) BIND(C) 369 USE ISO_C_BINDING 370 INTEGER (kind = C_INTPTR_T), VALUE :: field_hdl 371 REAL (kind = C_DOUBLE), DIMENSION(*) :: data_k8 372 INTEGER (kind = C_INT) , VALUE :: data_Xsize 373 END SUBROUTINE cxios_read_data_k81_hdl 374 219 375 SUBROUTINE cxios_read_data_k81(fieldid, fieldid_size, data_k8, data_Xsize) BIND(C) 220 376 USE ISO_C_BINDING … … 224 380 INTEGER (kind = C_INT) , VALUE :: data_Xsize 225 381 END SUBROUTINE cxios_read_data_k81 382 383 SUBROUTINE cxios_read_data_k82_hdl(field_hdl, data_k8, data_Xsize, data_Ysize) BIND(C) 384 USE ISO_C_BINDING 385 INTEGER (kind = C_INTPTR_T), VALUE :: field_hdl 386 REAL (kind = C_DOUBLE), DIMENSION(*) :: data_k8 387 INTEGER (kind = C_INT) , VALUE :: data_Xsize, data_Ysize 388 END SUBROUTINE cxios_read_data_k82_hdl 226 389 227 390 SUBROUTINE cxios_read_data_k82(fieldid, fieldid_size, data_k8, data_Xsize, data_Ysize) BIND(C) … … 233 396 END SUBROUTINE cxios_read_data_k82 234 397 235 SUBROUTINE cxios_read_data_k83(fieldid, fieldid_size, data_k8, data_Xsize, data_Ysize, data_Zsize) BIND(C) 398 SUBROUTINE cxios_read_data_k83_hdl(field_hdl, data_k8, data_Xsize, data_Ysize, data_Zsize) BIND(C) 399 USE ISO_C_BINDING 400 INTEGER (kind = C_INTPTR_T), VALUE :: field_hdl 401 REAL (kind = C_DOUBLE), DIMENSION(*) :: data_k8 402 INTEGER (kind = C_INT) , VALUE :: data_Xsize, data_Ysize, data_Zsize 403 END SUBROUTINE cxios_read_data_k83_hdl 404 405 SUBROUTINE cxios_read_data_k83(fieldid, fieldid_size, data_k8, data_Xsize, data_Ysize, data_Zsize) BIND(C) 236 406 USE ISO_C_BINDING 237 407 CHARACTER(kind = C_CHAR) , DIMENSION(*) :: fieldid … … 241 411 END SUBROUTINE cxios_read_data_k83 242 412 243 SUBROUTINE cxios_read_data_k84(fieldid, fieldid_size, data_k8, & 413 SUBROUTINE cxios_read_data_k84_hdl(field_hdl, data_k8, & 414 data_0size, data_1size, data_2size, & 415 data_3size) BIND(C) 416 USE ISO_C_BINDING 417 INTEGER (kind = C_INTPTR_T), VALUE :: field_hdl 418 REAL (kind = C_DOUBLE), DIMENSION(*) :: data_k8 419 INTEGER (kind = C_INT) , VALUE :: data_0size, data_1size, data_2size 420 INTEGER (kind = C_INT) , VALUE :: data_3size 421 END SUBROUTINE cxios_read_data_k84_hdl 422 423 SUBROUTINE cxios_read_data_k84(fieldid, fieldid_size, data_k8, & 244 424 data_0size, data_1size, data_2size, & 245 425 data_3size) BIND(C) … … 252 432 END SUBROUTINE cxios_read_data_k84 253 433 434 SUBROUTINE cxios_read_data_k85_hdl(field_hdl, data_k8, & 435 data_0size, data_1size, data_2size, & 436 data_3size, data_4size) BIND(C) 437 USE ISO_C_BINDING 438 INTEGER (kind = C_INTPTR_T), VALUE :: field_hdl 439 REAL (kind = C_DOUBLE), DIMENSION(*) :: data_k8 440 INTEGER (kind = C_INT) , VALUE :: data_0size, data_1size, data_2size 441 INTEGER (kind = C_INT) , VALUE :: data_3size, data_4size 442 END SUBROUTINE cxios_read_data_k85_hdl 443 254 444 SUBROUTINE cxios_read_data_k85(fieldid, fieldid_size, data_k8, & 255 445 data_0size, data_1size, data_2size, & … … 263 453 END SUBROUTINE cxios_read_data_k85 264 454 455 SUBROUTINE cxios_read_data_k86_hdl(field_hdl, data_k8, & 456 data_0size, data_1size, data_2size, & 457 data_3size, data_4size, data_5size) BIND(C) 458 USE ISO_C_BINDING 459 INTEGER (kind = C_INTPTR_T), VALUE :: field_hdl 460 REAL (kind = C_DOUBLE), DIMENSION(*) :: data_k8 461 INTEGER (kind = C_INT) , VALUE :: data_0size, data_1size, data_2size 462 INTEGER (kind = C_INT) , VALUE :: data_3size, data_4size, data_5size 463 END SUBROUTINE cxios_read_data_k86_hdl 464 265 465 SUBROUTINE cxios_read_data_k86(fieldid, fieldid_size, data_k8, & 266 466 data_0size, data_1size, data_2size, & … … 274 474 END SUBROUTINE cxios_read_data_k86 275 475 276 SUBROUTINE cxios_read_data_k87 (fieldid, fieldid_size, data_k8, &476 SUBROUTINE cxios_read_data_k87_hdl(field_hdl, data_k8, & 277 477 data_0size, data_1size, data_2size, & 278 478 data_3size, data_4size, data_5size, & 279 479 data_6size) BIND(C) 280 480 USE ISO_C_BINDING 481 INTEGER (kind = C_INTPTR_T), VALUE :: field_hdl 482 REAL (kind = C_DOUBLE), DIMENSION(*) :: data_k8 483 INTEGER (kind = C_INT) , VALUE :: data_0size, data_1size, data_2size 484 INTEGER (kind = C_INT) , VALUE :: data_3size, data_4size, data_5size 485 INTEGER (kind = C_INT) , VALUE :: data_6size 486 END SUBROUTINE cxios_read_data_k87_hdl 487 488 SUBROUTINE cxios_read_data_k87(fieldid, fieldid_size, data_k8, & 489 data_0size, data_1size, data_2size, & 490 data_3size, data_4size, data_5size, & 491 data_6size) BIND(C) 492 USE ISO_C_BINDING 281 493 CHARACTER(kind = C_CHAR) , DIMENSION(*) :: fieldid 282 494 REAL (kind = C_DOUBLE), DIMENSION(*) :: data_k8 … … 287 499 END SUBROUTINE cxios_read_data_k87 288 500 501 SUBROUTINE cxios_read_data_k40_hdl(field_hdl, data_k4, data_Xsize) BIND(C) 502 USE ISO_C_BINDING 503 INTEGER (kind = C_INTPTR_T), VALUE :: field_hdl 504 REAL (kind = C_FLOAT) :: data_k4 505 INTEGER (kind = C_INT) , VALUE :: data_Xsize 506 END SUBROUTINE cxios_read_data_k40_hdl 507 289 508 SUBROUTINE cxios_read_data_k40(fieldid, fieldid_size, data_k4, data_Xsize) BIND(C) 290 509 USE ISO_C_BINDING … … 295 514 END SUBROUTINE cxios_read_data_k40 296 515 516 SUBROUTINE cxios_read_data_k41_hdl(field_hdl, data_k4, data_Xsize) BIND(C) 517 USE ISO_C_BINDING 518 INTEGER (kind = C_INTPTR_T), VALUE :: field_hdl 519 REAL (kind = C_FLOAT) , DIMENSION(*) :: data_k4 520 INTEGER (kind = C_INT) , VALUE :: data_Xsize 521 END SUBROUTINE cxios_read_data_k41_hdl 522 297 523 SUBROUTINE cxios_read_data_k41(fieldid, fieldid_size, data_k4, data_Xsize) BIND(C) 298 524 USE ISO_C_BINDING … … 302 528 INTEGER (kind = C_INT) , VALUE :: data_Xsize 303 529 END SUBROUTINE cxios_read_data_k41 530 531 SUBROUTINE cxios_read_data_k42_hdl(field_hdl, data_k4, data_Xsize, data_Ysize) BIND(C) 532 USE ISO_C_BINDING 533 INTEGER (kind = C_INTPTR_T), VALUE :: field_hdl 534 REAL (kind = C_FLOAT) , DIMENSION(*) :: data_k4 535 INTEGER (kind = C_INT) , VALUE :: data_Xsize, data_Ysize 536 END SUBROUTINE cxios_read_data_k42_hdl 304 537 305 538 SUBROUTINE cxios_read_data_k42(fieldid, fieldid_size, data_k4, data_Xsize, data_Ysize) BIND(C) … … 311 544 END SUBROUTINE cxios_read_data_k42 312 545 546 SUBROUTINE cxios_read_data_k43_hdl(field_hdl, data_k4, data_Xsize, data_Ysize, data_Zsize) BIND(C) 547 USE ISO_C_BINDING 548 INTEGER (kind = C_INTPTR_T), VALUE :: field_hdl 549 REAL (kind = C_FLOAT) , DIMENSION(*) :: data_k4 550 INTEGER (kind = C_INT) , VALUE :: data_Xsize, data_Ysize, data_Zsize 551 END SUBROUTINE cxios_read_data_k43_hdl 552 313 553 SUBROUTINE cxios_read_data_k43(fieldid, fieldid_size, data_k4, data_Xsize, data_Ysize, data_Zsize) BIND(C) 314 554 USE ISO_C_BINDING … … 319 559 END SUBROUTINE cxios_read_data_k43 320 560 561 SUBROUTINE cxios_read_data_k44_hdl(field_hdl, data_k4, & 562 data_0size, data_1size, data_2size, & 563 data_3size) BIND(C) 564 USE ISO_C_BINDING 565 INTEGER (kind = C_INTPTR_T), VALUE :: field_hdl 566 REAL (kind = C_FLOAT) , DIMENSION(*) :: data_k4 567 INTEGER (kind = C_INT) , VALUE :: data_0size, data_1size, data_2size 568 INTEGER (kind = C_INT) , VALUE :: data_3size 569 END SUBROUTINE cxios_read_data_k44_hdl 570 321 571 SUBROUTINE cxios_read_data_k44(fieldid, fieldid_size, data_k4, & 322 572 data_0size, data_1size, data_2size, & … … 330 580 END SUBROUTINE cxios_read_data_k44 331 581 582 SUBROUTINE cxios_read_data_k45_hdl(field_hdl, data_k4, & 583 data_0size, data_1size, data_2size, & 584 data_3size, data_4size) BIND(C) 585 USE ISO_C_BINDING 586 INTEGER (kind = C_INTPTR_T), VALUE :: field_hdl 587 REAL (kind = C_FLOAT) , DIMENSION(*) :: data_k4 588 INTEGER (kind = C_INT) , VALUE :: data_0size, data_1size, data_2size 589 INTEGER (kind = C_INT) , VALUE :: data_3size, data_4size 590 END SUBROUTINE cxios_read_data_k45_hdl 591 332 592 SUBROUTINE cxios_read_data_k45(fieldid, fieldid_size, data_k4, & 333 593 data_0size, data_1size, data_2size, & … … 341 601 END SUBROUTINE cxios_read_data_k45 342 602 603 SUBROUTINE cxios_read_data_k46_hdl(field_hdl, data_k4, & 604 data_0size, data_1size, data_2size, & 605 data_3size, data_4size, data_5size) BIND(C) 606 USE ISO_C_BINDING 607 INTEGER (kind = C_INTPTR_T), VALUE :: field_hdl 608 REAL (kind = C_FLOAT) , DIMENSION(*) :: data_k4 609 INTEGER (kind = C_INT) , VALUE :: data_0size, data_1size, data_2size 610 INTEGER (kind = C_INT) , VALUE :: data_3size, data_4size, data_5size 611 END SUBROUTINE cxios_read_data_k46_hdl 612 343 613 SUBROUTINE cxios_read_data_k46(fieldid, fieldid_size, data_k4, & 344 614 data_0size, data_1size, data_2size, & … … 351 621 INTEGER (kind = C_INT) , VALUE :: data_3size, data_4size, data_5size 352 622 END SUBROUTINE cxios_read_data_k46 623 624 SUBROUTINE cxios_read_data_k47_hdl(field_hdl, data_k4, & 625 data_0size, data_1size, data_2size, & 626 data_3size, data_4size, data_5size, & 627 data_6size) BIND(C) 628 USE ISO_C_BINDING 629 INTEGER (kind = C_INTPTR_T), VALUE :: field_hdl 630 REAL (kind = C_FLOAT) , DIMENSION(*) :: data_k4 631 INTEGER (kind = C_INT) , VALUE :: data_0size, data_1size, data_2size 632 INTEGER (kind = C_INT) , VALUE :: data_3size, data_4size, data_5size 633 INTEGER (kind = C_INT) , VALUE :: data_6size 634 END SUBROUTINE cxios_read_data_k47_hdl 353 635 354 636 SUBROUTINE cxios_read_data_k47(fieldid, fieldid_size, data_k4, & … … 394 676 CHARACTER(kind = C_CHAR) , DIMENSION(*) :: vardid 395 677 INTEGER (kind = C_INT) , VALUE :: varid_size 396 LOGICAL (kind = 4):: data_logic678 LOGICAL (kind = C_BOOL) :: data_logic 397 679 LOGICAL (kind = C_BOOL) :: is_var_existed 398 680 END SUBROUTINE cxios_get_variable_data_logic … … 436 718 CHARACTER(kind = C_CHAR) , DIMENSION(*) :: vardid 437 719 INTEGER (kind = C_INT) , VALUE :: varid_size 438 LOGICAL (kind = 4) , VALUE:: data_logic720 LOGICAL (kind = C_BOOL) , VALUE :: data_logic 439 721 LOGICAL (kind = C_BOOL) :: is_var_existed 440 722 END SUBROUTINE cxios_set_variable_data_logic … … 534 816 535 817 ! Send field functions 818 SUBROUTINE xios(send_field_r8_0d_hdl)(field_hdl, data_k8) 819 IMPLICIT NONE 820 TYPE(txios(field)) :: field_hdl 821 REAL (kind = 8), INTENT(IN) :: data_k8 822 CALL cxios_write_data_k80_hdl(field_hdl%daddr, data_k8, 1) 823 END SUBROUTINE xios(send_field_r8_0d_hdl) 824 536 825 SUBROUTINE xios(send_field_r8_0d)(fieldid, data_k8) 537 826 IMPLICIT NONE … … 541 830 END SUBROUTINE xios(send_field_r8_0d) 542 831 832 SUBROUTINE xios(send_field_r8_1d_hdl)(field_hdl, data1d_k8) 833 IMPLICIT NONE 834 TYPE(txios(field)) :: field_hdl 835 REAL (kind = 8), DIMENSION(*), INTENT(IN) :: data1d_k8(:) 836 CALL cxios_write_data_k81_hdl(field_hdl%daddr, data1d_k8, size(data1d_k8, 1)) 837 END SUBROUTINE xios(send_field_r8_1d_hdl) 838 543 839 SUBROUTINE xios(send_field_r8_1d)(fieldid, data1d_k8) 544 840 IMPLICIT NONE … … 548 844 END SUBROUTINE xios(send_field_r8_1d) 549 845 846 SUBROUTINE xios(send_field_r8_2d_hdl)(field_hdl, data2d_k8) 847 IMPLICIT NONE 848 TYPE(txios(field)) :: field_hdl 849 REAL (kind = 8), DIMENSION(*), INTENT(IN) :: data2d_k8(:,:) 850 CALL cxios_write_data_k82_hdl(field_hdl%daddr, data2d_k8, size(data2d_k8, 1), size(data2d_k8, 2)) 851 END SUBROUTINE xios(send_field_r8_2d_hdl) 852 550 853 SUBROUTINE xios(send_field_r8_2d)(fieldid, data2d_k8) 551 854 IMPLICIT NONE … … 555 858 END SUBROUTINE xios(send_field_r8_2d) 556 859 860 SUBROUTINE xios(send_field_r8_3d_hdl)(field_hdl, data3d_k8) 861 IMPLICIT NONE 862 TYPE(txios(field)) :: field_hdl 863 REAL (kind = 8), DIMENSION(*), INTENT(IN) :: data3d_k8(:,:,:) 864 CALL cxios_write_data_k83_hdl(field_hdl%daddr, data3d_k8, size(data3d_k8, 1), size(data3d_k8, 2), size(data3d_k8, 3)) 865 END SUBROUTINE xios(send_field_r8_3d_hdl) 866 557 867 SUBROUTINE xios(send_field_r8_3d)(fieldid, data3d_k8) 558 868 IMPLICIT NONE … … 561 871 CALL cxios_write_data_k83(fieldid, len(fieldid), data3d_k8, size(data3d_k8, 1), size(data3d_k8, 2), size(data3d_k8, 3)) 562 872 END SUBROUTINE xios(send_field_r8_3d) 873 874 SUBROUTINE xios(send_field_r8_4d_hdl)(field_hdl, data4d_k8) 875 IMPLICIT NONE 876 TYPE(txios(field)) :: field_hdl 877 REAL (kind = 8), DIMENSION(*), INTENT(IN) :: data4d_k8(:,:,:,:) 878 CALL cxios_write_data_k84_hdl(field_hdl%daddr, data4d_k8, & 879 size(data4d_k8, 1), size(data4d_k8, 2), size(data4d_k8, 3), & 880 size(data4d_k8, 4)) 881 END SUBROUTINE xios(send_field_r8_4d_hdl) 563 882 564 883 SUBROUTINE xios(send_field_r8_4d)(fieldid, data4d_k8) … … 571 890 END SUBROUTINE xios(send_field_r8_4d) 572 891 892 SUBROUTINE xios(send_field_r8_5d_hdl)(field_hdl, data5d_k8) 893 IMPLICIT NONE 894 TYPE(txios(field)) :: field_hdl 895 REAL (kind = 8), DIMENSION(*), INTENT(IN) :: data5d_k8(:,:,:,:,:) 896 CALL cxios_write_data_k85_hdl(field_hdl%daddr, data5d_k8, & 897 size(data5d_k8, 1), size(data5d_k8, 2), size(data5d_k8, 3), & 898 size(data5d_k8, 4), size(data5d_k8, 5)) 899 END SUBROUTINE xios(send_field_r8_5d_hdl) 900 573 901 SUBROUTINE xios(send_field_r8_5d)(fieldid, data5d_k8) 574 902 IMPLICIT NONE … … 580 908 END SUBROUTINE xios(send_field_r8_5d) 581 909 910 SUBROUTINE xios(send_field_r8_6d_hdl)(field_hdl, data6d_k8) 911 IMPLICIT NONE 912 TYPE(txios(field)) :: field_hdl 913 REAL (kind = 8), DIMENSION(*), INTENT(IN) :: data6d_k8(:,:,:,:,:,:) 914 CALL cxios_write_data_k86_hdl(field_hdl%daddr, data6d_k8, & 915 size(data6d_k8, 1), size(data6d_k8, 2), size(data6d_k8, 3), & 916 size(data6d_k8, 4), size(data6d_k8, 5), size(data6d_k8, 6)) 917 END SUBROUTINE xios(send_field_r8_6d_hdl) 918 582 919 SUBROUTINE xios(send_field_r8_6d)(fieldid, data6d_k8) 583 920 IMPLICIT NONE … … 588 925 size(data6d_k8, 4), size(data6d_k8, 5), size(data6d_k8, 6)) 589 926 END SUBROUTINE xios(send_field_r8_6d) 927 928 SUBROUTINE xios(send_field_r8_7d_hdl)(field_hdl, data7d_k8) 929 IMPLICIT NONE 930 TYPE(txios(field)) :: field_hdl 931 REAL (kind = 8), DIMENSION(*), INTENT(IN) :: data7d_k8(:,:,:,:,:,:,:) 932 CALL cxios_write_data_k87_hdl(field_hdl%daddr, data7d_k8, & 933 size(data7d_k8, 1), size(data7d_k8, 2), size(data7d_k8, 3), & 934 size(data7d_k8, 4), size(data7d_k8, 5), size(data7d_k8, 6), & 935 size(data7d_k8, 7)) 936 END SUBROUTINE xios(send_field_r8_7d_hdl) 590 937 591 938 SUBROUTINE xios(send_field_r8_7d)(fieldid, data7d_k8) … … 599 946 END SUBROUTINE xios(send_field_r8_7d) 600 947 948 SUBROUTINE xios(send_field_r4_0d_hdl)(field_hdl, data_k4) 949 IMPLICIT NONE 950 TYPE(txios(field)) :: field_hdl 951 REAL (kind = 4), INTENT(IN) :: data_k4 952 CALL cxios_write_data_k40_hdl(field_hdl%daddr, data_k4, 1) 953 END SUBROUTINE xios(send_field_r4_0d_hdl) 954 601 955 SUBROUTINE xios(send_field_r4_0d)(fieldid, data_k4) 602 956 IMPLICIT NONE … … 606 960 END SUBROUTINE xios(send_field_r4_0d) 607 961 962 SUBROUTINE xios(send_field_r4_1d_hdl)(field_hdl, data1d_k4) 963 IMPLICIT NONE 964 TYPE(txios(field)) :: field_hdl 965 REAL (kind = 4), DIMENSION(*), INTENT(IN) :: data1d_k4(:) 966 CALL cxios_write_data_k41_hdl(field_hdl%daddr, data1d_k4, size(data1d_k4, 1)) 967 END SUBROUTINE xios(send_field_r4_1d_hdl) 968 608 969 SUBROUTINE xios(send_field_r4_1d)(fieldid, data1d_k4) 609 970 IMPLICIT NONE … … 613 974 END SUBROUTINE xios(send_field_r4_1d) 614 975 976 SUBROUTINE xios(send_field_r4_2d_hdl)(field_hdl, data2d_k4) 977 IMPLICIT NONE 978 TYPE(txios(field)) :: field_hdl 979 REAL (kind = 4), DIMENSION(*), INTENT(IN) :: data2d_k4(:,:) 980 CALL cxios_write_data_k42_hdl(field_hdl%daddr, data2d_k4, size(data2d_k4, 1), size(data2d_k4, 2)) 981 END SUBROUTINE xios(send_field_r4_2d_hdl) 982 615 983 SUBROUTINE xios(send_field_r4_2d)(fieldid, data2d_k4) 616 984 IMPLICIT NONE … … 620 988 END SUBROUTINE xios(send_field_r4_2d) 621 989 990 SUBROUTINE xios(send_field_r4_3d_hdl)(field_hdl, data3d_k4) 991 IMPLICIT NONE 992 TYPE(txios(field)) :: field_hdl 993 REAL (kind = 4), DIMENSION(*), INTENT(IN) :: data3d_k4(:,:,:) 994 CALL cxios_write_data_k43_hdl(field_hdl%daddr, data3d_k4, size(data3d_k4, 1), size(data3d_k4, 2), size(data3d_k4, 3)) 995 END SUBROUTINE xios(send_field_r4_3d_hdl) 996 622 997 SUBROUTINE xios(send_field_r4_3d)(fieldid, data3d_k4) 623 998 IMPLICIT NONE … … 627 1002 END SUBROUTINE xios(send_field_r4_3d) 628 1003 1004 SUBROUTINE xios(send_field_r4_4d_hdl)(field_hdl, data4d_k4) 1005 IMPLICIT NONE 1006 TYPE(txios(field)) :: field_hdl 1007 REAL (kind = 4), DIMENSION(*), INTENT(IN) :: data4d_k4(:,:,:,:) 1008 CALL cxios_write_data_k44_hdl(field_hdl%daddr, data4d_k4, & 1009 size(data4d_k4, 1), size(data4d_k4, 2), size(data4d_k4, 3), & 1010 size(data4d_k4, 4)) 1011 END SUBROUTINE xios(send_field_r4_4d_hdl) 1012 629 1013 SUBROUTINE xios(send_field_r4_4d)(fieldid, data4d_k4) 630 1014 IMPLICIT NONE … … 636 1020 END SUBROUTINE xios(send_field_r4_4d) 637 1021 1022 SUBROUTINE xios(send_field_r4_5d_hdl)(field_hdl, data5d_k4) 1023 IMPLICIT NONE 1024 TYPE(txios(field)) :: field_hdl 1025 REAL (kind = 4), DIMENSION(*), INTENT(IN) :: data5d_k4(:,:,:,:,:) 1026 CALL cxios_write_data_k45_hdl(field_hdl%daddr, data5d_k4, & 1027 size(data5d_k4, 1), size(data5d_k4, 2), size(data5d_k4, 3), & 1028 size(data5d_k4, 4), size(data5d_k4, 5)) 1029 END SUBROUTINE xios(send_field_r4_5d_hdl) 1030 638 1031 SUBROUTINE xios(send_field_r4_5d)(fieldid, data5d_k4) 639 1032 IMPLICIT NONE … … 645 1038 END SUBROUTINE xios(send_field_r4_5d) 646 1039 1040 SUBROUTINE xios(send_field_r4_6d_hdl)(field_hdl, data6d_k4) 1041 IMPLICIT NONE 1042 TYPE(txios(field)) :: field_hdl 1043 REAL (kind = 4), DIMENSION(*), INTENT(IN) :: data6d_k4(:,:,:,:,:,:) 1044 CALL cxios_write_data_k46_hdl(field_hdl%daddr, data6d_k4, & 1045 size(data6d_k4, 1), size(data6d_k4, 2), size(data6d_k4, 3), & 1046 size(data6d_k4, 4), size(data6d_k4, 5), size(data6d_k4, 6)) 1047 END SUBROUTINE xios(send_field_r4_6d_hdl) 1048 647 1049 SUBROUTINE xios(send_field_r4_6d)(fieldid, data6d_k4) 648 1050 IMPLICIT NONE … … 654 1056 END SUBROUTINE xios(send_field_r4_6d) 655 1057 1058 SUBROUTINE xios(send_field_r4_7d_hdl)(field_hdl, data7d_k4) 1059 IMPLICIT NONE 1060 TYPE(txios(field)) :: field_hdl 1061 REAL (kind = 4), DIMENSION(*), INTENT(IN) :: data7d_k4(:,:,:,:,:,:,:) 1062 CALL cxios_write_data_k47_hdl(field_hdl%daddr, data7d_k4, & 1063 size(data7d_k4, 1), size(data7d_k4, 2), size(data7d_k4, 3), & 1064 size(data7d_k4, 4), size(data7d_k4, 5), size(data7d_k4, 6), & 1065 size(data7d_k4, 7)) 1066 END SUBROUTINE xios(send_field_r4_7d_hdl) 1067 656 1068 SUBROUTINE xios(send_field_r4_7d)(fieldid, data7d_k4) 657 1069 IMPLICIT NONE … … 665 1077 666 1078 ! Receive field functions 1079 SUBROUTINE xios(recv_field_r8_0d_hdl)(field_hdl, data0d_k8) 1080 IMPLICIT NONE 1081 TYPE(txios(field)) :: field_hdl 1082 REAL (kind = 8) , INTENT(OUT):: data0d_k8 1083 CALL cxios_read_data_k80_hdl(field_hdl%daddr, data0d_k8, 1) 1084 END SUBROUTINE xios(recv_field_r8_0d_hdl) 1085 667 1086 SUBROUTINE xios(recv_field_r8_0d)(fieldid, data0d_k8) 668 1087 IMPLICIT NONE … … 672 1091 END SUBROUTINE xios(recv_field_r8_0d) 673 1092 1093 SUBROUTINE xios(recv_field_r8_1d_hdl)(field_hdl, data1d_k8) 1094 IMPLICIT NONE 1095 TYPE(txios(field)) :: field_hdl 1096 REAL (kind = 8), DIMENSION(*), INTENT(OUT) :: data1d_k8(:) 1097 CALL cxios_read_data_k81_hdl(field_hdl%daddr, data1d_k8, size(data1d_k8, 1)) 1098 END SUBROUTINE xios(recv_field_r8_1d_hdl) 1099 674 1100 SUBROUTINE xios(recv_field_r8_1d)(fieldid, data1d_k8) 675 1101 IMPLICIT NONE … … 679 1105 END SUBROUTINE xios(recv_field_r8_1d) 680 1106 1107 SUBROUTINE xios(recv_field_r8_2d_hdl)(field_hdl, data2d_k8) 1108 IMPLICIT NONE 1109 TYPE(txios(field)) :: field_hdl 1110 REAL (kind = 8), DIMENSION(*), INTENT(OUT) :: data2d_k8(:,:) 1111 CALL cxios_read_data_k82_hdl(field_hdl%daddr, data2d_k8, size(data2d_k8, 1), size(data2d_k8, 2)) 1112 END SUBROUTINE xios(recv_field_r8_2d_hdl) 1113 681 1114 SUBROUTINE xios(recv_field_r8_2d)(fieldid, data2d_k8) 682 1115 IMPLICIT NONE … … 686 1119 END SUBROUTINE xios(recv_field_r8_2d) 687 1120 1121 SUBROUTINE xios(recv_field_r8_3d_hdl)(field_hdl, data3d_k8) 1122 IMPLICIT NONE 1123 TYPE(txios(field)) :: field_hdl 1124 REAL (kind = 8), DIMENSION(*), INTENT(OUT) :: data3d_k8(:,:,:) 1125 CALL cxios_read_data_k83_hdl(field_hdl%daddr, data3d_k8, size(data3d_k8, 1), size(data3d_k8, 2), size(data3d_k8, 3)) 1126 END SUBROUTINE xios(recv_field_r8_3d_hdl) 1127 688 1128 SUBROUTINE xios(recv_field_r8_3d)(fieldid, data3d_k8) 689 1129 IMPLICIT NONE … … 692 1132 CALL cxios_read_data_k83(fieldid, len(fieldid), data3d_k8, size(data3d_k8, 1), size(data3d_k8, 2), size(data3d_k8, 3)) 693 1133 END SUBROUTINE xios(recv_field_r8_3d) 1134 1135 SUBROUTINE xios(recv_field_r8_4d_hdl)(field_hdl, data4d_k8) 1136 IMPLICIT NONE 1137 TYPE(txios(field)) :: field_hdl 1138 REAL (kind = 8), DIMENSION(*), INTENT(OUT) :: data4d_k8(:,:,:,:) 1139 CALL cxios_read_data_k84_hdl(field_hdl%daddr, data4d_k8, & 1140 size(data4d_k8, 1), size(data4d_k8, 2), size(data4d_k8, 3), & 1141 size(data4d_k8, 4)) 1142 END SUBROUTINE xios(recv_field_r8_4d_hdl) 694 1143 695 1144 SUBROUTINE xios(recv_field_r8_4d)(fieldid, data4d_k8) … … 702 1151 END SUBROUTINE xios(recv_field_r8_4d) 703 1152 1153 SUBROUTINE xios(recv_field_r8_5d_hdl)(field_hdl, data5d_k8) 1154 IMPLICIT NONE 1155 TYPE(txios(field)) :: field_hdl 1156 REAL (kind = 8), DIMENSION(*), INTENT(OUT) :: data5d_k8(:,:,:,:,:) 1157 CALL cxios_read_data_k85_hdl(field_hdl%daddr, data5d_k8, & 1158 size(data5d_k8, 1), size(data5d_k8, 2), size(data5d_k8, 3), & 1159 size(data5d_k8, 4), size(data5d_k8, 5)) 1160 END SUBROUTINE xios(recv_field_r8_5d_hdl) 1161 704 1162 SUBROUTINE xios(recv_field_r8_5d)(fieldid, data5d_k8) 705 1163 IMPLICIT NONE … … 711 1169 END SUBROUTINE xios(recv_field_r8_5d) 712 1170 1171 SUBROUTINE xios(recv_field_r8_6d_hdl)(field_hdl, data6d_k8) 1172 IMPLICIT NONE 1173 TYPE(txios(field)) :: field_hdl 1174 REAL (kind = 8), DIMENSION(*), INTENT(OUT) :: data6d_k8(:,:,:,:,:,:) 1175 CALL cxios_read_data_k86_hdl(field_hdl%daddr, data6d_k8, & 1176 size(data6d_k8, 1), size(data6d_k8, 2), size(data6d_k8, 3), & 1177 size(data6d_k8, 4), size(data6d_k8, 5), size(data6d_k8, 6)) 1178 END SUBROUTINE xios(recv_field_r8_6d_hdl) 1179 713 1180 SUBROUTINE xios(recv_field_r8_6d)(fieldid, data6d_k8) 714 1181 IMPLICIT NONE … … 720 1187 END SUBROUTINE xios(recv_field_r8_6d) 721 1188 722 SUBROUTINE xios(recv_field_r8_7d)(fieldid, data7d_k8) 1189 SUBROUTINE xios(recv_field_r8_7d_hdl)(field_hdl, data7d_k8) 1190 IMPLICIT NONE 1191 TYPE(txios(field)) :: field_hdl 1192 REAL (kind = 8), DIMENSION(*), INTENT(OUT) :: data7d_k8(:,:,:,:,:,:,:) 1193 CALL cxios_read_data_k87_hdl(field_hdl%daddr, data7d_k8, & 1194 size(data7d_k8, 1), size(data7d_k8, 2), size(data7d_k8, 3), & 1195 size(data7d_k8, 4), size(data7d_k8, 5), size(data7d_k8, 6), & 1196 size(data7d_k8, 7)) 1197 END SUBROUTINE xios(recv_field_r8_7d_hdl) 1198 1199 SUBROUTINE xios(recv_field_r8_7d)(fieldid, data7d_k8) 723 1200 IMPLICIT NONE 724 1201 CHARACTER(len = *) , INTENT(IN) :: fieldid … … 730 1207 END SUBROUTINE xios(recv_field_r8_7d) 731 1208 1209 SUBROUTINE xios(recv_field_r4_0d_hdl)(field_hdl, data0d_k4) 1210 IMPLICIT NONE 1211 TYPE(txios(field)) :: field_hdl 1212 REAL (kind = 4) , INTENT(OUT):: data0d_k4 1213 CALL cxios_read_data_k40_hdl(field_hdl%daddr, data0d_k4, 1) 1214 END SUBROUTINE xios(recv_field_r4_0d_hdl) 1215 732 1216 SUBROUTINE xios(recv_field_r4_0d)(fieldid, data0d_k4) 733 1217 IMPLICIT NONE … … 737 1221 END SUBROUTINE xios(recv_field_r4_0d) 738 1222 1223 SUBROUTINE xios(recv_field_r4_1d_hdl)(field_hdl, data1d_k4) 1224 IMPLICIT NONE 1225 TYPE(txios(field)) :: field_hdl 1226 REAL (kind = 4), DIMENSION(*), INTENT(OUT) :: data1d_k4(:) 1227 CALL cxios_read_data_k41_hdl(field_hdl%daddr, data1d_k4, size(data1d_k4, 1)) 1228 END SUBROUTINE xios(recv_field_r4_1d_hdl) 1229 739 1230 SUBROUTINE xios(recv_field_r4_1d)(fieldid, data1d_k4) 740 1231 IMPLICIT NONE … … 744 1235 END SUBROUTINE xios(recv_field_r4_1d) 745 1236 1237 SUBROUTINE xios(recv_field_r4_2d_hdl)(field_hdl, data2d_k4) 1238 IMPLICIT NONE 1239 TYPE(txios(field)) :: field_hdl 1240 REAL (kind = 4), DIMENSION(*), INTENT(OUT) :: data2d_k4(:,:) 1241 CALL cxios_read_data_k42_hdl(field_hdl%daddr, data2d_k4, size(data2d_k4, 1), size(data2d_k4, 2)) 1242 END SUBROUTINE xios(recv_field_r4_2d_hdl) 1243 746 1244 SUBROUTINE xios(recv_field_r4_2d)(fieldid, data2d_k4) 747 1245 IMPLICIT NONE … … 751 1249 END SUBROUTINE xios(recv_field_r4_2d) 752 1250 1251 SUBROUTINE xios(recv_field_r4_3d_hdl)(field_hdl, data3d_k4) 1252 IMPLICIT NONE 1253 TYPE(txios(field)) :: field_hdl 1254 REAL (kind = 4), DIMENSION(*), INTENT(OUT) :: data3d_k4(:,:,:) 1255 CALL cxios_read_data_k43_hdl(field_hdl%daddr, data3d_k4, size(data3d_k4, 1), size(data3d_k4, 2), size(data3d_k4, 3)) 1256 END SUBROUTINE xios(recv_field_r4_3d_hdl) 1257 753 1258 SUBROUTINE xios(recv_field_r4_3d)(fieldid, data3d_k4) 754 1259 IMPLICIT NONE … … 757 1262 CALL cxios_read_data_k43(fieldid, len(fieldid), data3d_k4, size(data3d_k4, 1), size(data3d_k4, 2), size(data3d_k4, 3)) 758 1263 END SUBROUTINE xios(recv_field_r4_3d) 1264 1265 SUBROUTINE xios(recv_field_r4_4d_hdl)(field_hdl, data4d_k4) 1266 IMPLICIT NONE 1267 TYPE(txios(field)) :: field_hdl 1268 REAL (kind = 4), DIMENSION(*), INTENT(OUT) :: data4d_k4(:,:,:,:) 1269 CALL cxios_read_data_k44_hdl(field_hdl%daddr, data4d_k4, & 1270 size(data4d_k4, 1), size(data4d_k4, 2), size(data4d_k4, 3), & 1271 size(data4d_k4, 4)) 1272 END SUBROUTINE xios(recv_field_r4_4d_hdl) 759 1273 760 1274 SUBROUTINE xios(recv_field_r4_4d)(fieldid, data4d_k4) … … 767 1281 END SUBROUTINE xios(recv_field_r4_4d) 768 1282 1283 SUBROUTINE xios(recv_field_r4_5d_hdl)(field_hdl, data5d_k4) 1284 IMPLICIT NONE 1285 TYPE(txios(field)) :: field_hdl 1286 REAL (kind = 4), DIMENSION(*), INTENT(OUT) :: data5d_k4(:,:,:,:,:) 1287 CALL cxios_read_data_k45_hdl(field_hdl%daddr, data5d_k4, & 1288 size(data5d_k4, 1), size(data5d_k4, 2), size(data5d_k4, 3), & 1289 size(data5d_k4, 4), size(data5d_k4, 5)) 1290 END SUBROUTINE xios(recv_field_r4_5d_hdl) 1291 769 1292 SUBROUTINE xios(recv_field_r4_5d)(fieldid, data5d_k4) 770 1293 IMPLICIT NONE … … 776 1299 END SUBROUTINE xios(recv_field_r4_5d) 777 1300 1301 SUBROUTINE xios(recv_field_r4_6d_hdl)(field_hdl, data6d_k4) 1302 IMPLICIT NONE 1303 TYPE(txios(field)) :: field_hdl 1304 REAL (kind = 4), DIMENSION(*), INTENT(OUT) :: data6d_k4(:,:,:,:,:,:) 1305 CALL cxios_read_data_k46_hdl(field_hdl%daddr, data6d_k4, & 1306 size(data6d_k4, 1), size(data6d_k4, 2), size(data6d_k4, 3), & 1307 size(data6d_k4, 4), size(data6d_k4, 5), size(data6d_k4, 6)) 1308 END SUBROUTINE xios(recv_field_r4_6d_hdl) 1309 778 1310 SUBROUTINE xios(recv_field_r4_6d)(fieldid, data6d_k4) 779 1311 IMPLICIT NONE … … 784 1316 size(data6d_k4, 4), size(data6d_k4, 5), size(data6d_k4, 6)) 785 1317 END SUBROUTINE xios(recv_field_r4_6d) 1318 1319 SUBROUTINE xios(recv_field_r4_7d_hdl)(field_hdl, data7d_k4) 1320 IMPLICIT NONE 1321 TYPE(txios(field)) :: field_hdl 1322 REAL (kind = 4), DIMENSION(*), INTENT(OUT) :: data7d_k4(:,:,:,:,:,:,:) 1323 CALL cxios_read_data_k47_hdl(field_hdl%daddr, data7d_k4, & 1324 size(data7d_k4, 1), size(data7d_k4, 2), size(data7d_k4, 3), & 1325 size(data7d_k4, 4), size(data7d_k4, 5), size(data7d_k4, 6), & 1326 size(data7d_k4, 7)) 1327 END SUBROUTINE xios(recv_field_r4_7d_hdl) 786 1328 787 1329 SUBROUTINE xios(recv_field_r4_7d)(fieldid, data7d_k4) … … 797 1339 ! Get variable functions 798 1340 LOGICAL FUNCTION xios(getVar_k8)(varId, data_k8) 799 IMPLICIT NONE 800 LOGICAL (kind = 1) :: val 1341 USE ISO_C_BINDING 1342 IMPLICIT NONE 1343 LOGICAL (kind = C_BOOL) :: val 801 1344 CHARACTER(len = *) , INTENT(IN) :: varId 802 1345 REAL (kind = 8) , INTENT(OUT):: data_k8 … … 808 1351 809 1352 LOGICAL FUNCTION xios(getVar_k4)(varId, data_k4) 810 IMPLICIT NONE 811 LOGICAL (kind = 1) :: val 1353 USE ISO_C_BINDING 1354 IMPLICIT NONE 1355 LOGICAL (kind = C_BOOL) :: val 812 1356 CHARACTER(len = *) , INTENT(IN) :: varId 813 1357 REAL (kind = 4) , INTENT(OUT):: data_k4 … … 819 1363 820 1364 LOGICAL FUNCTION xios(getVar_int)(varId, data_int) 821 IMPLICIT NONE 822 LOGICAL (kind = 1) :: val 1365 USE ISO_C_BINDING 1366 IMPLICIT NONE 1367 LOGICAL (kind = C_BOOL) :: val 823 1368 CHARACTER(len = *) , INTENT(IN) :: varId 824 1369 INTEGER , INTENT(OUT):: data_int … … 830 1375 831 1376 LOGICAL FUNCTION xios(getVar_logic)(varId, data_logic) 832 IMPLICIT NONE 833 LOGICAL (kind = 1) :: val 1377 USE ISO_C_BINDING 1378 IMPLICIT NONE 1379 LOGICAL (kind = C_BOOL) :: val 834 1380 CHARACTER(len = *) , INTENT(IN) :: varId 835 LOGICAL (kind = 4) , INTENT(OUT):: data_logic836 837 CALL cxios_get_variable_data_logic(varId, len(varId), data_logic, val) 838 1381 LOGICAL ,INTENT(OUT) :: data_logic 1382 LOGICAL (C_BOOL) :: data_tmp 1383 1384 CALL cxios_get_variable_data_logic(varId, len(varId), data_tmp, val) 839 1385 xios(getVar_logic) = val 1386 IF (val) data_logic = data_tmp 840 1387 END FUNCTION xios(getVar_logic) 841 1388 842 1389 LOGICAL FUNCTION xios(getVar_char)(varId, data_char) 843 IMPLICIT NONE 844 LOGICAL (kind = 1) :: val 1390 USE ISO_C_BINDING 1391 IMPLICIT NONE 1392 LOGICAL (kind = C_BOOL) :: val 845 1393 CHARACTER(len = *) , INTENT(IN) :: varId 846 1394 CHARACTER(len = *) , INTENT(OUT):: data_char … … 853 1401 ! Set variable functions 854 1402 LOGICAL FUNCTION xios(setVar_k8)(varId, data_k8) 855 IMPLICIT NONE 856 LOGICAL (kind = 1) :: val 1403 USE ISO_C_BINDING 1404 IMPLICIT NONE 1405 LOGICAL (kind = C_BOOL) :: val 857 1406 CHARACTER(len = *) , INTENT(IN) :: varId 858 1407 REAL (kind = 8) , INTENT(IN) :: data_k8 … … 864 1413 865 1414 LOGICAL FUNCTION xios(setVar_k4)(varId, data_k4) 866 IMPLICIT NONE 867 LOGICAL (kind = 1) :: val 1415 USE ISO_C_BINDING 1416 IMPLICIT NONE 1417 LOGICAL (kind = C_BOOL) :: val 868 1418 CHARACTER(len = *) , INTENT(IN) :: varId 869 1419 REAL (kind = 4) , INTENT(IN) :: data_k4 … … 875 1425 876 1426 LOGICAL FUNCTION xios(setVar_int)(varId, data_int) 877 IMPLICIT NONE 878 LOGICAL (kind = 1) :: val 1427 USE ISO_C_BINDING 1428 IMPLICIT NONE 1429 LOGICAL (kind = C_BOOL) :: val 879 1430 CHARACTER(len = *) , INTENT(IN) :: varId 880 1431 INTEGER , INTENT(IN) :: data_int … … 886 1437 887 1438 LOGICAL FUNCTION xios(setVar_logic)(varId, data_logic) 888 IMPLICIT NONE 889 LOGICAL (kind = 1) :: val 1439 USE ISO_C_BINDING 1440 IMPLICIT NONE 1441 LOGICAL(kind = C_BOOL) :: val 890 1442 CHARACTER(len = *) , INTENT(IN) :: varId 891 LOGICAL (kind = 4) , INTENT(IN) :: data_logic 892 893 CALL cxios_set_variable_data_logic(varId, len(varId), data_logic, val) 1443 LOGICAL , INTENT(IN) :: data_logic 1444 LOGICAL (kind = C_BOOL) :: data_tmp 1445 1446 data_tmp = data_logic 1447 CALL cxios_set_variable_data_logic(varId, len(varId), data_tmp, val) 894 1448 895 1449 xios(setVar_logic) = val … … 897 1451 898 1452 LOGICAL FUNCTION xios(setVar_char)(varId, data_char) 899 IMPLICIT NONE 900 LOGICAL (kind = 1) :: val 1453 USE ISO_C_BINDING 1454 IMPLICIT NONE 1455 LOGICAL (kind = C_BOOL) :: val 901 1456 CHARACTER(len = *) , INTENT(IN) :: varId 902 1457 CHARACTER(len = *) , INTENT(IN) :: data_char -
XIOS/dev/dev_trunk_graph/src/interface/fortran/ixios_interfaces.F90
r981 r2137 11 11 xios(send_field_r4_0d), xios(send_field_r4_1d), xios(send_field_r4_2d), xios(send_field_r4_3d), & 12 12 xios(send_field_r4_4d), xios(send_field_r4_5d), xios(send_field_r4_6d), xios(send_field_r4_7d), & 13 xios(send_field_r8_0d_hdl), xios(send_field_r8_1d_hdl), xios(send_field_r8_2d_hdl), xios(send_field_r8_3d_hdl), & 14 xios(send_field_r8_4d_hdl), xios(send_field_r8_5d_hdl), xios(send_field_r8_6d_hdl), xios(send_field_r8_7d_hdl), & 15 xios(send_field_r4_0d_hdl), xios(send_field_r4_1d_hdl), xios(send_field_r4_2d_hdl), xios(send_field_r4_3d_hdl), & 16 xios(send_field_r4_4d_hdl), xios(send_field_r4_5d_hdl), xios(send_field_r4_6d_hdl), xios(send_field_r4_7d_hdl), & 13 17 xios(recv_field_r8_0d), xios(recv_field_r8_1d), xios(recv_field_r8_2d), xios(recv_field_r8_3d), & 14 18 xios(recv_field_r8_4d), xios(recv_field_r8_5d), xios(recv_field_r8_6d), xios(recv_field_r8_7d), & 15 19 xios(recv_field_r4_0d), xios(recv_field_r4_1d), xios(recv_field_r4_2d), xios(recv_field_r4_3d), & 16 20 xios(recv_field_r4_4d), xios(recv_field_r4_5d), xios(recv_field_r4_6d), xios(recv_field_r4_7d), & 21 xios(recv_field_r8_0d_hdl), xios(recv_field_r8_1d_hdl), xios(recv_field_r8_2d_hdl), xios(recv_field_r8_3d_hdl), & 22 xios(recv_field_r8_4d_hdl), xios(recv_field_r8_5d_hdl), xios(recv_field_r8_6d_hdl), xios(recv_field_r8_7d_hdl), & 23 xios(recv_field_r4_0d_hdl), xios(recv_field_r4_1d_hdl), xios(recv_field_r4_2d_hdl), xios(recv_field_r4_3d_hdl), & 24 xios(recv_field_r4_4d_hdl), xios(recv_field_r4_5d_hdl), xios(recv_field_r4_6d_hdl), xios(recv_field_r4_7d_hdl), & 17 25 xios(getVar_k8), xios(getVar_k4), xios(getVar_int), xios(getVar_logic), xios(getVar_char), & 18 26 xios(setVar_k8), xios(setVar_k4), xios(setVar_int), xios(setVar_logic), xios(setVar_char) … … 239 247 xios(send_field_r8_4d), xios(send_field_r8_5d), xios(send_field_r8_6d), xios(send_field_r8_7d), & 240 248 xios(send_field_r4_0d), xios(send_field_r4_1d), xios(send_field_r4_2d), xios(send_field_r4_3d), & 241 xios(send_field_r4_4d), xios(send_field_r4_5d), xios(send_field_r4_6d), xios(send_field_r4_7d) 249 xios(send_field_r4_4d), xios(send_field_r4_5d), xios(send_field_r4_6d), xios(send_field_r4_7d), & 250 xios(send_field_r8_0d_hdl), xios(send_field_r8_1d_hdl), xios(send_field_r8_2d_hdl), xios(send_field_r8_3d_hdl), & 251 xios(send_field_r8_4d_hdl), xios(send_field_r8_5d_hdl), xios(send_field_r8_6d_hdl), xios(send_field_r8_7d_hdl), & 252 xios(send_field_r4_0d_hdl), xios(send_field_r4_1d_hdl), xios(send_field_r4_2d_hdl), xios(send_field_r4_3d_hdl), & 253 xios(send_field_r4_4d_hdl), xios(send_field_r4_5d_hdl), xios(send_field_r4_6d_hdl), xios(send_field_r4_7d_hdl) 242 254 END INTERFACE xios(send_field) 243 255 … … 246 258 xios(recv_field_r8_4d), xios(recv_field_r8_5d), xios(recv_field_r8_6d), xios(recv_field_r8_7d), & 247 259 xios(recv_field_r4_0d), xios(recv_field_r4_1d), xios(recv_field_r4_2d), xios(recv_field_r4_3d), & 248 xios(recv_field_r4_4d), xios(recv_field_r4_5d), xios(recv_field_r4_6d), xios(recv_field_r4_7d) 260 xios(recv_field_r4_4d), xios(recv_field_r4_5d), xios(recv_field_r4_6d), xios(recv_field_r4_7d), & 261 xios(recv_field_r8_0d_hdl), xios(recv_field_r8_1d_hdl), xios(recv_field_r8_2d_hdl), xios(recv_field_r8_3d_hdl), & 262 xios(recv_field_r8_4d_hdl), xios(recv_field_r8_5d_hdl), xios(recv_field_r8_6d_hdl), xios(recv_field_r8_7d_hdl), & 263 xios(recv_field_r4_0d_hdl), xios(recv_field_r4_1d_hdl), xios(recv_field_r4_2d_hdl), xios(recv_field_r4_3d_hdl), & 264 xios(recv_field_r4_4d_hdl), xios(recv_field_r4_5d_hdl), xios(recv_field_r4_6d_hdl), xios(recv_field_r4_7d_hdl) 249 265 END INTERFACE xios(recv_field) 250 266 -
XIOS/dev/dev_trunk_graph/src/manager/daemons_manager.hpp
r2019 r2137 1 1 #ifndef __DAEMONS_MANAGER_HPP__ 2 2 #define __DAEMONS_MANAGER_HPP__ 3 #include <cstddef> 3 4 4 5 namespace xios … … 16 17 bool servicesEventLoop(void) ; 17 18 19 void scheduleContext(size_t hashId) { scheduledContext_=hashId ;} //!< for attached mode, give the hand to the associated context server 20 bool isScheduledContext(size_t hashId) { return scheduledContext_==hashId ;} //!< for attached mode, return true if context server is sceduled 21 void unscheduleContext(void) { scheduledContext_=0 ;} //!< for attached mode : unschedule context 22 18 23 private: 19 24 bool isServer_ ; 25 size_t scheduledContext_ = 0 ; //!< Hash id of the next scehduled context for attached mode 20 26 } ; 21 27 } -
XIOS/dev/dev_trunk_graph/src/manager/server_context.hpp
r2019 r2137 33 33 void freeComm(void) ; 34 34 bool isAttachedMode(void) { return isAttachedMode_ ;} 35 CService* getParentService(void) {return parentService_ ; } 36 35 37 private: 36 38 void createIntercomm(void) ; -
XIOS/dev/dev_trunk_graph/src/manager/services.hpp
r2019 r2137 37 37 int getType(void) {return type_;} 38 38 int getNbPartitions(void) {return nbPartitions_;} 39 39 40 40 private: 41 41 void sendNotification(int rank) ; -
XIOS/dev/dev_trunk_graph/src/mpi_tools.cpp
r2019 r2137 27 27 } 28 28 29 template<> 30 MPI_Datatype MPI_GetType<char>(void) { return MPI_CHAR ;} 31 32 template<> 33 MPI_Datatype MPI_GetType<short int>(void) { return MPI_SHORT ;} 34 35 template<> 36 MPI_Datatype MPI_GetType<int>(void) { return MPI_INT ;} 37 38 template<> 39 MPI_Datatype MPI_GetType<size_t>(void) { return MPI_SIZE_T ;} 40 41 template<> 42 MPI_Datatype MPI_GetType<float>(void) { return MPI_FLOAT ;} 43 44 template<> 45 MPI_Datatype MPI_GetType<double>(void) { return MPI_DOUBLE ;} 46 47 template<> 48 MPI_Datatype MPI_GetType<long double>(void) { return MPI_LONG_DOUBLE ;} 49 29 50 } -
XIOS/dev/dev_trunk_graph/src/mpi_tools.hpp
r2019 r2137 13 13 14 14 template<> 15 MPI_Datatype MPI_GetType<char>(void) { return MPI_CHAR ;}15 MPI_Datatype MPI_GetType<char>(void); 16 16 17 17 template<> 18 MPI_Datatype MPI_GetType<short int>(void) { return MPI_SHORT ;}18 MPI_Datatype MPI_GetType<short int>(void); 19 19 20 20 template<> 21 MPI_Datatype MPI_GetType<int>(void) { return MPI_INT ;}21 MPI_Datatype MPI_GetType<int>(void); 22 22 23 23 template<> 24 MPI_Datatype MPI_GetType<size_t>(void) { return MPI_SIZE_T ;}24 MPI_Datatype MPI_GetType<size_t>(void); 25 25 26 26 template<> 27 MPI_Datatype MPI_GetType<float>(void) { return MPI_FLOAT ;}27 MPI_Datatype MPI_GetType<float>(void); 28 28 29 29 template<> 30 MPI_Datatype MPI_GetType<double>(void) { return MPI_DOUBLE ;}30 MPI_Datatype MPI_GetType<double>(void); 31 31 32 32 template<> 33 MPI_Datatype MPI_GetType<long double>(void) { return MPI_LONG_DOUBLE ;}33 MPI_Datatype MPI_GetType<long double>(void); 34 34 35 35 -
XIOS/dev/dev_trunk_graph/src/node/axis.cpp
r2027 r2137 451 451 452 452 } 453 453 454 454 string CAxis::getCouplingAlias(const string& fieldId, int posInGrid) 455 455 { -
XIOS/dev/dev_trunk_graph/src/node/axis.hpp
r2027 r2137 176 176 void makeAliasForCoupling(const string& fieldId, int posInGrid) ; 177 177 string getCouplingAlias(const string& fieldId, int posInGrid) ; 178 179 178 180 179 private: -
XIOS/dev/dev_trunk_graph/src/node/context.cpp
r2027 r2137 73 73 74 74 //---------------------------------------------------------------- 75 void CContext::initEventScheduler(void) 76 { 77 SRegisterContextInfo contextInfo ; 78 CXios::getContextsManager()->getContextInfo(this->getId(), contextInfo, getIntraComm()) ; 79 80 eventScheduler_=CXios::getPoolRessource()->getService(contextInfo.serviceId,contextInfo.partitionId)->getEventScheduler() ; 75 76 void CContext::initEventScheduler(void) 77 { 78 SRegisterContextInfo contextInfo ; 79 CXios::getContextsManager()->getContextInfo(this->getId(), contextInfo, getIntraComm()) ; 80 81 eventScheduler_=CXios::getPoolRessource()->getService(contextInfo.serviceId,contextInfo.partitionId)->getEventScheduler() ; 81 82 82 // generate unique hash for server 83 auto time=chrono::system_clock::now().time_since_epoch().count() ; 84 std::default_random_engine rd(time); // not reproducible from a run to another 85 std::uniform_int_distribution<size_t> dist; 86 hashId_=dist(rd) ; 87 MPI_Bcast(&hashId_,1,MPI_SIZE_T,0,getIntraComm()) ; // Bcast to all server of the context 88 } 89 83 // generate unique hash for server 84 auto time=chrono::system_clock::now().time_since_epoch().count() ; 85 std::default_random_engine rd(time); // not reproducible from a run to another 86 std::uniform_int_distribution<size_t> dist; 87 hashId_=dist(rd) ; 88 MPI_Bcast(&hashId_,1,MPI_SIZE_T,0,getIntraComm()) ; // Bcast to all server of the context 89 } 90 90 /*! 91 91 \brief Get context group (context root) … … 291 291 ///--------------------------------------------------------------- 292 292 293 294 void CContext::setClientServerBuffer(vector<CField*>& fields, bool bufferForWriting)295 TRY296 {297 // Estimated minimum event size for small events (20 is an arbitrary constant just for safety)298 const size_t minEventSize = CEventClient::headerSize + 20 * sizeof(int);299 // Ensure there is at least some room for 20 of such events in the buffers300 size_t minBufferSize = std::max(CXios::minBufferSize, 20 * minEventSize);301 302 #define DECLARE_NODE(Name_, name_) \303 if (minBufferSize < sizeof(C##Name_##Definition)) minBufferSize = sizeof(C##Name_##Definition);304 #define DECLARE_NODE_PAR(Name_, name_)305 #include "node_type.conf"306 #undef DECLARE_NODE307 #undef DECLARE_NODE_PAR308 309 310 map<CContextClient*,map<int,size_t>> dataSize ;311 map<CContextClient*,map<int,size_t>> maxEventSize ;312 map<CContextClient*,map<int,size_t>> attributesSize ;313 314 for(auto field : fields)315 {316 field->setContextClientDataBufferSize(dataSize, maxEventSize, bufferForWriting) ;317 field->setContextClientAttributesBufferSize(attributesSize, maxEventSize, bufferForWriting) ;318 }319 320 321 for(auto& it : attributesSize)322 {323 auto contextClient = it.first ;324 auto& contextDataSize = dataSize[contextClient] ;325 auto& contextAttributesSize = attributesSize[contextClient] ;326 auto& contextMaxEventSize = maxEventSize[contextClient] ;327 328 for (auto& it : contextAttributesSize)329 {330 auto serverRank=it.first ;331 auto& buffer = contextAttributesSize[serverRank] ;332 if (contextDataSize[serverRank] > buffer) buffer=contextDataSize[serverRank] ;333 buffer *= CXios::bufferSizeFactor;334 if (buffer < minBufferSize) buffer = minBufferSize;335 if (buffer > CXios::maxBufferSize ) buffer = CXios::maxBufferSize;336 }337 338 // Leaders will have to send some control events so ensure there is some room for those in the buffers339 if (contextClient->isServerLeader())340 for(auto& rank : contextClient->getRanksServerLeader())341 if (!contextAttributesSize.count(rank))342 {343 contextAttributesSize[rank] = minBufferSize;344 contextMaxEventSize[rank] = minEventSize;345 }346 347 contextClient->setBufferSize(contextAttributesSize, contextMaxEventSize);348 }349 }350 CATCH_DUMP_ATTR351 352 353 /*!354 Sets client buffers.355 \param [in] contextClient356 \param [in] bufferForWriting True if buffers are used for sending data for writing357 This flag is only true for client and server-1 for communication with server-2358 */359 // ym obsolete to be removed360 void CContext::setClientServerBuffer(CContextClient* contextClient, bool bufferForWriting)361 TRY362 {363 // Estimated minimum event size for small events (20 is an arbitrary constant just for safety)364 const size_t minEventSize = CEventClient::headerSize + 20 * sizeof(int);365 366 // Ensure there is at least some room for 20 of such events in the buffers367 size_t minBufferSize = std::max(CXios::minBufferSize, 20 * minEventSize);368 369 #define DECLARE_NODE(Name_, name_) \370 if (minBufferSize < sizeof(C##Name_##Definition)) minBufferSize = sizeof(C##Name_##Definition);371 #define DECLARE_NODE_PAR(Name_, name_)372 #include "node_type.conf"373 #undef DECLARE_NODE374 #undef DECLARE_NODE_PAR375 376 // Compute the buffer sizes needed to send the attributes and data corresponding to fields377 std::map<int, StdSize> maxEventSize;378 std::map<int, StdSize> bufferSize = getAttributesBufferSize(maxEventSize, contextClient, bufferForWriting);379 std::map<int, StdSize> dataBufferSize = getDataBufferSize(maxEventSize, contextClient, bufferForWriting);380 381 std::map<int, StdSize>::iterator it, ite = dataBufferSize.end();382 for (it = dataBufferSize.begin(); it != ite; ++it)383 if (it->second > bufferSize[it->first]) bufferSize[it->first] = it->second;384 385 // Apply the buffer size factor, check that we are above the minimum buffer size and below the maximum size386 ite = bufferSize.end();387 for (it = bufferSize.begin(); it != ite; ++it)388 {389 it->second *= CXios::bufferSizeFactor;390 if (it->second < minBufferSize) it->second = minBufferSize;391 if (it->second > CXios::maxBufferSize) it->second = CXios::maxBufferSize;392 }393 394 // Leaders will have to send some control events so ensure there is some room for those in the buffers395 if (contextClient->isServerLeader())396 {397 const std::list<int>& ranks = contextClient->getRanksServerLeader();398 for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank)399 {400 if (!bufferSize.count(*itRank))401 {402 bufferSize[*itRank] = minBufferSize;403 maxEventSize[*itRank] = minEventSize;404 }405 }406 }407 contextClient->setBufferSize(bufferSize, maxEventSize);408 }409 CATCH_DUMP_ATTR410 293 411 294 /*! … … 716 599 CATCH_DUMP_ATTR 717 600 718 719 bool CContext::eventLoop(bool enableEventsProcessing) 601 void CContext::globalEventLoop(void) 720 602 { 721 bool finished=true; 722 bool out; 603 lockContext() ; 604 CXios::getDaemonsManager()->eventLoop() ; 605 unlockContext() ; 606 setCurrent(getId()) ; 607 } 608 609 bool CContext::scheduledEventLoop(bool enableEventsProcessing) 610 { 611 bool out, finished; 723 612 size_t timeLine=timeLine_ ; 724 613 if (serviceType_==CServicesManager::CLIENT) … … 730 619 do 731 620 { 732 if (client!=nullptr && !finalized) client->checkBuffers(); 733 734 for (int i = 0; i < clientPrimServer.size(); ++i) 735 { 736 if (!finalized) clientPrimServer[i]->checkBuffers(); 737 if (!finalized) finished &= serverPrimServer[i]->eventLoop(enableEventsProcessing); 738 } 739 740 for (auto couplerOut : couplerOutClient_) 741 if (!finalized) couplerOut.second->checkBuffers(); 742 743 for (auto couplerIn : couplerInClient_) 744 if (!finalized) couplerIn.second->checkBuffers(); 745 746 for (auto couplerOut : couplerOutServer_) 747 if (!finalized) couplerOut.second->eventLoop(enableEventsProcessing); 748 749 for (auto couplerIn : couplerInServer_) 750 if (!finalized) couplerIn.second->eventLoop(enableEventsProcessing); 751 752 if (server!=nullptr) if (!finalized) finished &= server->eventLoop(enableEventsProcessing); 753 621 finished=eventLoop(enableEventsProcessing) ; 754 622 if (serviceType_==CServicesManager::CLIENT) out = eventScheduler_->queryEvent(timeLine,hashId_) ; 755 623 else out=true ; 756 624 } while(!out) ; 625 626 return finished ; 627 } 628 629 bool CContext::eventLoop(bool enableEventsProcessing) 630 { 631 bool finished; 632 if (isLockedContext()) return ; 633 634 setCurrent(getId()) ; 635 636 if (client!=nullptr && !finalized) client->checkBuffers(); 637 638 for (int i = 0; i < clientPrimServer.size(); ++i) 639 { 640 if (!finalized) clientPrimServer[i]->checkBuffers(); 641 if (!finalized) finished &= serverPrimServer[i]->eventLoop(enableEventsProcessing); 642 } 643 644 for (auto couplerOut : couplerOutClient_) 645 if (!finalized) couplerOut.second->checkBuffers(); 646 647 for (auto couplerIn : couplerInClient_) 648 if (!finalized) couplerIn.second->checkBuffers(); 649 650 for (auto couplerOut : couplerOutServer_) 651 if (!finalized) couplerOut.second->eventLoop(enableEventsProcessing); 652 653 for (auto couplerIn : couplerInServer_) 654 if (!finalized) couplerIn.second->eventLoop(enableEventsProcessing); 655 656 if (server!=nullptr) if (!finalized) finished &= server->eventLoop(enableEventsProcessing); 657 setCurrent(getId()) ; 757 658 return finalized && finished ; 758 659 } … … 784 685 couplerOutClient_[fullContextId] = client ; 785 686 couplerOutServer_[fullContextId] = server ; 786 787 /*788 // for now, we don't now which beffer size must be used for client coupler789 // It will be evaluated later. Fix a constant size for now...790 // set to 10Mb for development791 map<int,size_t> bufferSize, maxEventSize ;792 for(int i=0;i<client->getRemoteSize();i++)793 {794 bufferSize[i]=10000000 ;795 maxEventSize[i]=10000000 ;796 }797 798 client->setBufferSize(bufferSize, maxEventSize);799 */800 687 } 801 688 } … … 819 706 MPI_Comm_free(&interComm) ; 820 707 821 map<int,size_t> bufferSize, maxEventSize ;822 for(int i=0;i<client->getRemoteSize();i++)823 {824 bufferSize[i]=10000000 ;825 maxEventSize[i]=10000000 ;826 }827 828 client->setBufferSize(bufferSize, maxEventSize);829 708 couplerInClient_[fullContextId] = client ; 830 709 couplerInServer_[fullContextId] = server ; … … 832 711 } 833 712 834 void CContext::globalEventLoop(void)835 {836 CXios::getDaemonsManager()->eventLoop() ;837 setCurrent(getId()) ;838 }839 840 841 713 void CContext::finalize(void) 842 714 TRY … … 1023 895 1024 896 bool workflowGraphIsCompleted ; 1025 897 1026 898 bool first=true ; 899 1027 900 do 1028 901 { … … 1032 905 workflowGraphIsCompleted &= endWorkflowField->buildWorkflowGraph(garbageCollector) ; 1033 906 } 1034 907 1035 908 for(auto couplerIn : enabledCouplerIn) couplerIn->assignContext() ; 1036 909 for(auto field : couplerInField) field->makeGridAliasForCoupling(); … … 1045 918 // connect to couplerOut -> to do 1046 919 } 1047 if (first) setClientServerBuffer(couplerOutField, true) ; // set buffer context --> to check 1048 920 1049 921 bool couplersReady ; 1050 922 do … … 1057 929 couplersReady &= ready ; 1058 930 } 1059 this->eventLoop() ; 931 this->scheduledEventLoop() ; 932 1060 933 } while (!couplersReady) ; 1061 934 1062 935 first=false ; 1063 this->eventLoop() ; 936 this->scheduledEventLoop() ; 937 1064 938 } while (!workflowGraphIsCompleted) ; 939 1065 940 1066 941 for( auto field : couplerInField) couplerInFields_.push_back(field) ; … … 1087 962 field->connectToFileServer(garbageCollector) ; // connect the field to server filter 1088 963 } 1089 setClientServerBuffer(fileOutField, true) ; // set buffer context --> to review1090 964 for(auto field : fileOutField) field->sendFieldToFileServer() ; 1091 965 } … … 1193 1067 ok = true ; 1194 1068 for(auto& couplerOutClient : couplerOutClient_) ok &= isCouplerInCloseDefinition(couplerOutClient.second) ; 1195 this-> eventLoop() ;1069 this->scheduledEventLoop() ; 1196 1070 } while (!ok) ; 1071 1072 // Now evaluate the size of the context client buffers 1073 map<CContextClient*,map<int,size_t>> fieldBufferEvaluation ; 1074 for(auto field : fileOutField) field->evaluateBufferSize(fieldBufferEvaluation, CXios::isOptPerformance) ; // output to server 1075 for(auto field : couplerOutField) field->evaluateBufferSize(fieldBufferEvaluation, CXios::isOptPerformance) ; // output to coupler 1076 for(auto field : fieldModelIn) field->evaluateBufferSize(fieldBufferEvaluation, CXios::isOptPerformance) ; // server to client (for io servers) 1077 1078 // fix size for each context client 1079 for(auto& it : fieldBufferEvaluation) it.first->setBufferSize(it.second) ; 1080 1197 1081 1198 1082 CTimer::get("Context : close definition").suspend() ; -
XIOS/dev/dev_trunk_graph/src/node/context.hpp
r2027 r2137 15 15 #include "server_context.hpp" 16 16 #include "event_scheduler.hpp" 17 17 18 18 19 namespace xios … … 108 109 // Put sever or client into loop state 109 110 bool eventLoop(bool enableEventsProcessing=true); 111 bool scheduledEventLoop(bool enableEventsProcessing=true) ; 110 112 void globalEventLoop(void); 111 113 … … 148 150 std::map<int, StdSize> getAttributesBufferSize(std::map<int, StdSize>& maxEventSize, CContextClient* contextClient, bool bufferForWriting = false); 149 151 std::map<int, StdSize> getDataBufferSize(std::map<int, StdSize>& maxEventSize, CContextClient* contextClient, bool bufferForWriting = false); 150 void setClientServerBuffer(CContextClient* contextClient, bool bufferForWriting = false); // old interface to be removed151 void setClientServerBuffer(vector<CField*>& fields, bool bufferForWriting) ;152 152 153 153 // Distribute files (in write mode) among secondary-server pools according to the estimated data flux … … 355 355 string contextId_ ; //!< context client id for the servers. For clients this is same as getId() 356 356 bool isProcessingEvent_ ; 357 private: 357 358 CServerContext* parentServerContext_ ; 358 359 public: 360 CServerContext* getParentServerContext(void) { return parentServerContext_; } 361 private: 362 bool lockedContext_=false; 363 public: 364 void lockContext(void) {lockedContext_=true; } 365 void unlockContext(void) {lockedContext_=true; } 366 bool isLockedContext(void) { return lockedContext_;} 359 367 public: // Some function maybe removed in the near future 360 368 // virtual void toBinary (StdOStream & os) const; -
XIOS/dev/dev_trunk_graph/src/node/domain.cpp
r2027 r2137 805 805 nj = 1; 806 806 jbegin = 0; 807 if (!i_index.isEmpty()) ni = i_index.numElements(); 808 j_index.resize(ni); 809 for(int i=0;i<ni;++i) j_index(i)=0; 810 811 if (!area.isEmpty()) 812 area.transposeSelf(1, 0); 807 if (!i_index.isEmpty()) 808 { 809 ni = i_index.numElements(); 810 j_index.resize(ni); 811 for(int i=0;i<ni;++i) j_index(i)=0; 812 } 813 814 815 if (!area.isEmpty()) area.transposeSelf(1, 0); // => to be checked why is it transposed 813 816 } 814 817 … … 1780 1783 } 1781 1784 1785 1782 1786 string CDomain::getCouplingAlias(const string& fieldId, int posInGrid) 1783 1787 { … … 1808 1812 void CDomain::makeAliasForCoupling(const string& fieldId, int posInGrid) 1809 1813 { 1810 1814 const string domainId = getCouplingAlias(fieldId, posInGrid); 1811 1815 this->createAlias(domainId) ; 1812 1816 } -
XIOS/dev/dev_trunk_graph/src/node/domain.hpp
r2027 r2137 241 241 void makeAliasForCoupling(const string& fieldId, int posInGrid) ; 242 242 string getCouplingAlias(const string& fieldId, int posInGrid) ; 243 244 243 private: 245 244 -
XIOS/dev/dev_trunk_graph/src/node/extract_domain_to_axis.cpp
r2019 r2137 67 67 { 68 68 case direction_attr::jDir: 69 if (axis_n_glo != domain_n i_glo)69 if (axis_n_glo != domain_nj_glo) 70 70 ERROR("CExtractDomainToAxis::checkValid(CAxis* axisDst, CDomain* domainSrc)", 71 << "Extract domain along j, axis destination should have n_glo equal to n i_glo of domain source"72 << "Domain source " <<domainSrc->getId() << " has nj_glo " << domain_n i_glo << std::endl71 << "Extract domain along j, axis destination should have n_glo equal to nj_glo of domain source" 72 << "Domain source " <<domainSrc->getId() << " has nj_glo " << domain_nj_glo << std::endl 73 73 << "Axis destination " << axisDst->getId() << " has n_glo " << axis_n_glo); 74 if ((position < 0) || (position > domain_ni_glo))74 if ((position < 0) || (position >= domain_ni_glo)) 75 75 ERROR("CExtractDomainToAxis::checkValid(CAxis* axisDst, CDomain* domainSrc)", 76 << "Extract domain along j, position should be inside 0 and ni_glo of domain source"77 << "Domain source " <<domainSrc->getId() << " has n j_glo " << domain_ni_glo << std::endl76 << "Extract domain along j, position should be inside 0 and ni_glo-1 of domain source" 77 << "Domain source " <<domainSrc->getId() << " has ni_glo " << domain_ni_glo << std::endl 78 78 << "Axis destination " << axisDst->getId() << std::endl 79 79 << "Position " << position); … … 81 81 82 82 case direction_attr::iDir: 83 if (axis_n_glo != domain_n j_glo)83 if (axis_n_glo != domain_ni_glo) 84 84 ERROR("CExtractDomainToAxis::checkValid(CAxis* axisDst, CDomain* domainSrc)", 85 << "Extract domain along i, axis destination should have n_glo equal to n j_glo of domain source"86 << "Domain source " <<domainSrc->getId() << " has n j_glo " << domain_nj_glo << std::endl85 << "Extract domain along i, axis destination should have n_glo equal to ni_glo of domain source" 86 << "Domain source " <<domainSrc->getId() << " has ni_glo " << domain_ni_glo << std::endl 87 87 << "Axis destination " << axisDst->getId() << " has n_glo " << axis_n_glo); 88 if ((position < 0) || (position > domain_nj_glo))88 if ((position < 0) || (position >= domain_nj_glo)) 89 89 ERROR("CExtractDomainToAxis::checkValid(CAxis* axisDst, CDomain* domainSrc)", 90 << "Extract domain along i, position should be inside 0 and nj_glo of domain source"91 << "Domain source " <<domainSrc->getId() << " has nj_glo " << domain_n i_glo << std::endl90 << "Extract domain along i, position should be inside 0 and nj_glo-1 of domain source" 91 << "Domain source " <<domainSrc->getId() << " has nj_glo " << domain_nj_glo << std::endl 92 92 << "Axis destination " << axisDst->getId() << std::endl 93 93 << "Position " << position); -
XIOS/dev/dev_trunk_graph/src/node/field.cpp
r2027 r2137 383 383 CATCH_DUMP_ATTR 384 384 385 385 386 //---------------------------------------------------------------- 386 387 … … 497 498 CATCH_DUMP_ATTR 498 499 500 bool CField::evaluateBufferSize(map<CContextClient*,map<int,size_t>>& evaluateBuffer, bool isOptPerformance) 501 { 502 CContextClient* client=nullptr ; 503 504 for(int i=0;i<2;i++) 505 { 506 map<int,int> dataSize ; 507 if (i==0 && clientToServerStoreFilter_) client = clientToServerStoreFilter_-> getTransferedDataSize(dataSize) ; 508 if (i==1 && serverToClientStoreFilter_) client = serverToClientStoreFilter_-> getTransferedDataSize(dataSize) ; 509 510 if (client!=nullptr) 511 { 512 map<int,size_t> bufferSize ; 513 514 if (evaluateBuffer.count(client)!=0) bufferSize = evaluateBuffer[client] ; 515 if (isOptPerformance) 516 { 517 for(auto& it : dataSize) 518 { 519 if (bufferSize.count(it.first)==0) bufferSize[it.first]=it.second ; 520 else bufferSize[it.first]+=it.second ; 521 } 522 } 523 else 524 { 525 for(auto& it : dataSize) 526 { 527 if (bufferSize.count(it.first)==0) bufferSize[it.first]=it.second ; 528 else bufferSize[it.first]=std::max(bufferSize[it.first],(size_t)it.second) ; 529 } 530 } 531 evaluateBuffer[client] = bufferSize ; 532 client=nullptr ; 533 } 534 } 535 if (client==nullptr) return false ; 536 else return true; 537 } 499 538 500 539 … … 550 589 bool buildGraph_ = !build_workflow_graph.isEmpty() && build_workflow_graph == true ; 551 590 std::cout<<"field id="<<this->getId()<<" build_workflow_graph="<<buildGraph_<<std::endl; 552 553 if (!inputFilter) 554 { 555 inputFilter = std::shared_ptr<CPassThroughFilter>(new CPassThroughFilter(gc)); 556 /*if(buildGraph_) 557 { 558 std::cout<<"============== field "<<this->getId()<<" calls a pass through filter ============== "<<inputFilter<<" ***** "<<CXios::isClient<<std::endl; 559 inputFilter->graphEnabled = true; 560 inputFilter->graphPackage = new CGraphPackage; 561 inputFilter->graphPackage->inFields.push_back(this); 562 }*/ 563 } 591 if (!inputFilter) inputFilter = std::shared_ptr<CPassThroughFilter>(new CPassThroughFilter(gc)); 564 592 565 593 if (hasDirectFieldReference()) 566 594 { 567 568 595 CField* fieldRef = getDirectFieldReference(); 596 597 //------ build_workflow_graph start 569 598 if(buildGraph_) 570 599 { … … 580 609 581 610 if(buildGraph_) this->build_workflow_graph.set(build_workflow_graph); 611 //------ build_workflow_graph end 612 582 613 bool ret=fieldRef->buildWorkflowGraph(gc); 583 614 if (!ret) return false ; // workflow graph cannot be built at this stage … … 612 643 { 613 644 grid->solveElementsRefInheritance() ; 614 615 // new616 617 645 std::pair<std::shared_ptr<CFilter>, std::shared_ptr<CFilter> > filters = grid->buildTransformationGraph(gc, false, gridSrc, detectMissingValues, defaultValue, newGrid, buildGraph_, this) ; 618 646 lastFilter->connectOutput(filters.first, 0); 619 /*if(buildGraph_)620 {621 std::cout<<"============== field "<<this->getId()<<" calls a transformation filter 1 ============== "<<lastFilter<<" _ "<<filters.first<<" ***** "<<CXios::isClient<<std::endl;622 filters.first->graphEnabled=true;623 filters.first->graphPackage = new CGraphPackage;624 filters.first->graphPackage->inFields.push_back(this);625 }*/626 647 lastFilter = filters.second; 627 648 gridSrc = newGrid ; 628 629 // end new630 649 } 631 650 … … 658 677 grid_ = newGrid ; 659 678 grid_ref=grid_->getId() ; // for server 679 //grid_->completeGrid(); // grid generation, to be checked 660 680 if (fileIn_->isClientSide()) fileIn_->readFieldAttributesValues(this); 661 681 grid_->checkElementsAttributes() ; 682 // grid_->solveDomainAxisBaseRef(); 662 683 // probably in future tag grid incomplete if coming from a reading 663 684 instantDataFilter=inputFilter ; … … 927 948 * \return the output pin corresponding to a self reference 928 949 */ 950 951 /* old version 952 std::shared_ptr<COutputPin> CField::getSelfReference(CGarbageCollector& gc) 953 TRY 954 { 955 if (instantDataFilter || !hasExpression()) 956 ERROR("COutputPin* CField::getSelfReference(CGarbageCollector& gc)", 957 "Impossible to add a self reference to a field which has already been parsed or which does not have an expression."); 958 959 if (!selfReferenceFilter) 960 { 961 const bool detectMissingValues = (!detect_missing_value.isEmpty() && !default_value.isEmpty() && detect_missing_value == true); 962 const double defaultValue = detectMissingValues ? default_value : (!default_value.isEmpty() ? default_value : 0.0); 963 964 if (file && !file->mode.isEmpty() && file->mode == CFile::mode_attr::read) 965 { 966 if (!serverSourceFilter) 967 { 968 checkTimeAttributes(); 969 serverSourceFilter = std::shared_ptr<CSourceFilter>(new CSourceFilter(gc, grid_, true, false, freq_offset, true, 970 detectMissingValues, defaultValue)); 971 } 972 973 selfReferenceFilter = serverSourceFilter; 974 } 975 else if (!field_ref.isEmpty()) 976 { 977 CField* fieldRef = CField::get(field_ref); 978 fieldRef->buildFilterGraph(gc, false); 979 selfReferenceFilter = fieldRef->getInstantDataFilter(); 980 } 981 else 982 { 983 if (!clientSourceFilter) 984 { 985 if (check_if_active.isEmpty()) check_if_active = false; 986 clientSourceFilter = std::shared_ptr<CSourceFilter>(new CSourceFilter(gc, grid_, true, true, NoneDu, false, 987 detectMissingValues, defaultValue)); 988 } 989 990 selfReferenceFilter = clientSourceFilter; 991 } 992 } 993 994 return selfReferenceFilter; 995 } 996 CATCH_DUMP_ATTR 997 */ 929 998 std::shared_ptr<COutputPin> CField::getSelfReference(CGarbageCollector& gc) 930 999 TRY … … 1030 1099 CATCH_DUMP_ATTR 1031 1100 1101 /* old version 1102 std::shared_ptr<COutputPin> CField::getSelfTemporalDataFilter(CGarbageCollector& gc, CDuration outFreq) 1103 TRY 1104 { 1105 if (instantDataFilter || !hasExpression()) 1106 ERROR("COutputPin* CField::getSelfTemporalDataFilter(CGarbageCollector& gc)", 1107 "Impossible to add a self reference to a field which has already been parsed or which does not have an expression."); 1108 1109 if (!selfReferenceFilter) getSelfReference(gc) ; 1110 1111 if (serverSourceFilter || clientSourceFilter) 1112 { 1113 if (operation.isEmpty()) 1114 ERROR("void CField::getSelfTemporalDataFilter(CGarbageCollector& gc, CDuration outFreq)", 1115 << "An operation must be defined for field \"" << getId() << "\"."); 1116 1117 checkTimeAttributes(&outFreq); 1118 1119 const bool detectMissingValues = (!detect_missing_value.isEmpty() && detect_missing_value == true); 1120 std::shared_ptr<CTemporalFilter> temporalFilter(new CTemporalFilter(gc, operation, 1121 CContext::getCurrent()->getCalendar()->getInitDate(), 1122 freq_op, freq_offset, outFreq, detectMissingValues)); 1123 1124 selfReferenceFilter->connectOutput(temporalFilter, 0); 1125 return temporalFilter ; 1126 } 1127 else if (!field_ref.isEmpty()) 1128 { 1129 CField* fieldRef = CField::get(field_ref); 1130 fieldRef->buildFilterGraph(gc, false); 1131 return fieldRef->getTemporalDataFilter(gc, outFreq) ; 1132 } 1133 } 1134 CATCH_DUMP_ATTR 1135 */ 1032 1136 1033 1137 //---------------------------------------------------------------- … … 1355 1459 CATCH_DUMP_ATTR 1356 1460 1357 1358 bool CField::isGridCompleted(void) 1359 TRY 1360 { 1361 bool isFullCompleted ; 1362 MPI_Allreduce(&isGridCompleted_,&isFullCompleted,1,MPI_C_BOOL, MPI_LAND, CContext::getCurrent()->getIntraComm() ) ; 1363 if ( (isGridCompleted_==false && isFullCompleted==true) ) ERROR("bool CField::isGridCompleted(void)",<< "incoherecy in MPI_AllReduce") ; 1364 return isFullCompleted ; 1365 } 1366 CATCH_DUMP_ATTR 1367 1461 bool CField::isGridCompleted(void) 1462 TRY 1463 { 1464 bool isFullCompleted ; 1465 MPI_Allreduce(&isGridCompleted_,&isFullCompleted,1,MPI_C_BOOL, MPI_LAND, CContext::getCurrent()->getIntraComm() ) ; 1466 if ( (isGridCompleted_==false && isFullCompleted==true) ) ERROR("bool CField::isGridCompleted(void)",<< "incoherecy in MPI_AllReduce") ; 1467 return isFullCompleted ; 1468 } 1469 CATCH_DUMP_ATTR 1368 1470 1369 1471 void CField::sendAddAllVariables(CContextClient* client) -
XIOS/dev/dev_trunk_graph/src/node/field.hpp
r2028 r2137 110 110 // Grid data buffer size for each connection of contextclient 111 111 std::map<int, StdSize> getGridDataBufferSize(CContextClient* client, bool bufferForWriting = false); 112 112 113 // evaluation the size of the buffer for the field 114 bool evaluateBufferSize(map<CContextClient*,map<int,size_t>>& evaluateBuffer, bool isOptPerformance) ; 113 115 public: 114 116 void makeGridAliasForCoupling(void) ; … … 236 238 bool isGridCompleted_ = true ; 237 239 public: 238 bool isGridCompleted() ;240 bool isGridCompleted() ; 239 241 void setGridCompleted(void) { isGridCompleted_= true; } 240 242 void unsetGridCompleted(void) { isGridCompleted_ = false ;} -
XIOS/dev/dev_trunk_graph/src/node/grid.cpp
r2027 r2137 1210 1210 } 1211 1211 1212 1212 1213 void CGrid::sendGridToCouplerOut(CContextClient* client, const string& fieldId) 1213 1214 { … … 1217 1218 distributeGridToServer(client,fieldId) ; 1218 1219 } 1220 1219 1221 1220 1222 void CGrid::distributeGridToServer(CContextClient* client, const string& fieldId) … … 1312 1314 CMessage message ; 1313 1315 if (isCoupling) message<<getCouplingAlias(fieldId) ; 1314 else message<<getId() ; 1316 else message<<getId() ; 1315 1317 gridScattererConnector.transfer(maskOut, client, event, message) ; 1316 1318 for(auto& it : scattererConnectors) delete it ; … … 1342 1344 clientFromServerConnector_[client] = new CGridGathererConnector(clientFromServerConnectors) ; 1343 1345 1344 1345 } 1346 } 1347 1346 1348 1347 1349 void CGrid::recvMask(CEventServer& event) … … 1394 1396 } 1395 1397 1396 1397 1398 string CGrid::getCouplingAlias(const string& fieldId) 1398 1399 { 1399 1400 return "_grid_of_"+fieldId; 1400 1401 } 1401 1402 1402 1403 1403 void CGrid::makeAliasForCoupling(const string& fieldId) … … 1650 1650 std::shared_ptr<CFilter> inputFilter = std::shared_ptr<CPassThroughFilter>(new CPassThroughFilter(gc)); 1651 1651 std::shared_ptr<CFilter> outputFilter = inputFilter ; 1652 cout<<"***************CGrid::buildTransformationGraph Pass through filter ***************"<<transformationGoing<<field->getId()<<endl; 1653 /*inputFilter->graphEnabled = true; 1654 inputFilter->graphPackage = new CGraphPackage; 1655 inputFilter->graphPackage->inFields.push_back(field); 1656 */ 1652 1653 1657 1654 string newId ; 1658 1655 if (gridSrc!=nullptr) newId = gridSrc->getId() + " --> " + this->getId() ; … … 1667 1664 else 1668 1665 { 1669 StdString role = CXios::isClient? "Client ": "Server "; 1670 cout<<role<<"Create new grid : "<<newId<<endl ; 1666 cout<<"Create new grid : "<<newId<<endl ; 1671 1667 newGrid = CGrid::create(newId) ; 1672 1668 isNewGrid = true ; … … 1715 1711 else if (srcElement.type==TYPE_AXIS) tmpGridSrc->addAxis(srcElement.axis->getId()) ; 1716 1712 else if (srcElement.type==TYPE_SCALAR) tmpGridSrc->addScalar(srcElement.scalar->getId()) ; 1717 tmpGridSrc->checkElementsAttributes() ; 1713 // WARNING -> suppress checkElement attribute ? What append ? 1714 // tmpGridSrc->checkElementsAttributes() ; 1718 1715 CGrid* tmpGridDst=CGrid::create(); // destination Grid 1719 1716 map<int,int> posInGrid={{0,0}} ; … … 1956 1953 auxField->getInstantDataFilter()->connectOutput(transformFilter,i) ; 1957 1954 i++ ; 1958 1959 1955 } 1960 1956 outputFilter = transformFilter ; -
XIOS/dev/dev_trunk_graph/src/node/grid.hpp
r2027 r2137 336 336 337 337 private: 338 CGridLocalConnector* workflowToModelConnector_ ;338 CGridLocalConnector* workflowToModelConnector_ = nullptr; 339 339 public: 340 340 void computeWorkflowToModelConnector(void) ; -
XIOS/dev/dev_trunk_graph/src/node/interpolate_axis.cpp
r2019 r2137 60 60 } 61 61 62 if (!this->coordinate.isEmpty() && (!this->coordinate_src.isEmpty() || !this->coordinate_dst.isEmpty())) 63 { 64 ERROR("CInterpolateAxis::checkValid(CAxis* axisSrc)", 65 << "<coordinate> is incompatible with <coordinate_src> or <coordinate_dst> attributes. <coordinate> attribute is present only for backward" 66 << "compatibility and is now declared obsolete") ; 67 } 62 68 63 69 if (!this->coordinate.isEmpty()) 64 70 { 65 StdString coordinate = this->coordinate.getValue();66 71 if (!CField::has(coordinate)) 67 72 ERROR("CInterpolateAxis::checkValid(CAxis* axisSrc)", 68 73 << "Coordinate field whose id " << coordinate << "does not exist " 74 << "Please define one"); 75 } 76 77 if (!this->coordinate_src.isEmpty()) 78 { 79 if (!CField::has(coordinate_src)) 80 ERROR("CInterpolateAxis::checkValid(CAxis* axisSrc)", 81 << "Coordinate field whose id " << coordinate_src << "does not exist " 82 << "Please define one"); 83 } 84 85 if (!this->coordinate_dst.isEmpty()) 86 { 87 if (!CField::has(coordinate_dst)) 88 ERROR("CInterpolateAxis::checkValid(CAxis* axisSrc)", 89 << "Coordinate field whose id " << coordinate_dst << "does not exist " 69 90 << "Please define one"); 70 91 } … … 74 95 { 75 96 std::vector<StdString> auxInputs; 97 98 if (!this->coordinate.isEmpty() && (!this->coordinate_src.isEmpty() || !this->coordinate_dst.isEmpty())) 99 { 100 ERROR("std::vector<StdString> CInterpolateAxis::checkAuxInputs_()", 101 << "<coordinate> is incompatible with <coordinate_src> or <coordinate_dst> attributes. <coordinate> attribute is present only for backward" 102 << "compatibility and is now declared obsolete") ; 103 } 104 76 105 if (!this->coordinate.isEmpty()) 77 106 { 78 107 StdString coordinate = this->coordinate.getValue(); 79 108 if (!CField::has(coordinate)) 80 ERROR("CInterpolateAxis::checkValid(CAxis* axisSrc)", 109 ERROR("std::vector<StdString> CInterpolateAxis::checkAuxInputs_()", 110 << "Coordinate field whose id " << coordinate << "does not exist " 111 << "Please define one"); 112 auxInputs.push_back(coordinate); 113 } 114 115 if (!this->coordinate_src.isEmpty()) 116 { 117 StdString coordinate = this->coordinate_src.getValue(); 118 if (!CField::has(coordinate)) 119 ERROR("std::vector<StdString> CInterpolateAxis::checkAuxInputs_()", 120 << "Coordinate field whose id " << coordinate << "does not exist " 121 << "Please define one"); 122 auxInputs.push_back(coordinate); 123 } 124 125 if (!this->coordinate_dst.isEmpty()) 126 { 127 StdString coordinate = this->coordinate_dst.getValue(); 128 if (!CField::has(coordinate)) 129 ERROR("std::vector<StdString> CInterpolateAxis::checkAuxInputs_()", 81 130 << "Coordinate field whose id " << coordinate << "does not exist " 82 131 << "Please define one"); … … 97 146 std::map<int, int>& elementPositionInGridDst2DomainPosition) 98 147 { 99 if (!coordinate.isEmpty()) return CAxisAlgorithmInterpolateCoordinate::create(isSource, gridDst, gridSrc, this, elementPositionInGrid, 100 elementPositionInGridSrc2ScalarPosition, elementPositionInGridSrc2AxisPosition, elementPositionInGridSrc2DomainPosition, 101 elementPositionInGridDst2ScalarPosition, elementPositionInGridDst2AxisPosition, elementPositionInGridDst2DomainPosition); 148 if (!coordinate.isEmpty() || !coordinate_src.isEmpty() || !coordinate_dst.isEmpty()) 149 return CAxisAlgorithmInterpolateCoordinate::create(isSource, gridDst, gridSrc, this, elementPositionInGrid, 150 elementPositionInGridSrc2ScalarPosition, elementPositionInGridSrc2AxisPosition, elementPositionInGridSrc2DomainPosition, 151 elementPositionInGridDst2ScalarPosition, elementPositionInGridDst2AxisPosition, elementPositionInGridDst2DomainPosition); 152 102 153 else return CAxisAlgorithmInterpolate::create(isSource, gridDst, gridSrc, this, elementPositionInGrid, 103 154 elementPositionInGridSrc2ScalarPosition, elementPositionInGridSrc2AxisPosition, elementPositionInGridSrc2DomainPosition, -
XIOS/dev/dev_trunk_graph/src/node/scalar.cpp
r2027 r2137 201 201 this->sendAllAttributesToServer(client, scalarId); 202 202 } 203 203 204 204 string CScalar::getCouplingAlias(const string& fieldId, int posInGrid) 205 205 { -
XIOS/dev/dev_trunk_graph/src/object_factory_decl_macro.hpp
r2019 r2137 19 19 20 20 21 -
XIOS/dev/dev_trunk_graph/src/object_factory_impl.hpp
r2019 r2137 149 149 const StdString& CObjectFactory::GetUIdBase(void) 150 150 { 151 static const StdString base = "__"+CObjectFactory::CurrContext + "::" + U::GetName() + "_undef_id_"; 151 static StdString base ; 152 base = "__"+CObjectFactory::CurrContext + "::" + U::GetName() + "_undef_id_"; 152 153 return base; 153 154 } -
XIOS/dev/dev_trunk_graph/src/test/generic_testcase.f90
r2027 r2137 113 113 CALL MPI_FINALIZE(ierr) 114 114 115 if(i_am_server) then116 print*, "server ",rank, " finished"117 else118 print*, "client ",rank, " finished"119 endif120 121 115 CONTAINS 122 116 … … 368 362 pressure=1e20 369 363 DO j=0,z-1 370 pressure(:,j)=axis_value(j)*100000 ; ! Pa 364 pressure(:,j)=axis_value(j)*100000 ; ! Pa 371 365 DO i=0,xy-1 372 366 IF (domain_index(i)/=-1) THEN -
XIOS/dev/dev_trunk_graph/src/transformation/axis_algorithm/axis_algorithm_extract_domain.cpp
r2019 r2137 51 51 TRY 52 52 { 53 axisDestination->checkAttributes() ; 53 54 algo->checkValid(axisDestination, domainSource); 54 55 StdString op = "extract"; -
XIOS/dev/dev_trunk_graph/src/transformation/axis_algorithm/axis_algorithm_interpolate_coordinate.cpp
r2019 r2137 55 55 vector<string> CAxisAlgorithmInterpolateCoordinate::getAuxFieldId(void) 56 56 { 57 if (hasCoordinate_) return vector<string>(1,coordinate_) ; 57 if (hasCoordinateSrc_ && hasCoordinateDest_) return {coordinateSrc_,coordinateDest_} ; 58 else if (hasCoordinateSrc_) return {coordinateSrc_} ; 59 else if (hasCoordinateDest_) return {coordinateDest_} ; 58 60 else return vector<string>() ; 61 } 62 63 bool CAxisAlgorithmInterpolateCoordinate::transformAuxField(int pos) 64 { 65 if (pos==0) 66 { 67 if (hasCoordinateSrc_) return true ; 68 else if(hasCoordinateDest_) return false ; 69 } 70 if (pos==1) return false ; 59 71 } 60 72 … … 69 81 if (!interpAxis->coordinate.isEmpty()) 70 82 { 71 coordinate _ = interpAxis->coordinate.getValue();83 coordinateSrc_ = interpAxis->coordinate.getValue(); 72 84 hasCoordinate_=true ; 73 } 74 75 ngloSrc_=axisSource->n_glo ; 85 hasCoordinateSrc_=true ; 86 } 87 88 if (!interpAxis->coordinate_src.isEmpty()) 89 { 90 coordinateSrc_ = interpAxis->coordinate_src.getValue(); 91 hasCoordinate_=true ; 92 hasCoordinateSrc_=true ; 93 } 94 95 if (!interpAxis->coordinate_dst.isEmpty()) 96 { 97 coordinateDest_ = interpAxis->coordinate_dst.getValue(); 98 hasCoordinate_=true ; 99 hasCoordinateDest_=true ; 100 } 101 102 ngloSrc_=axisSource->n_glo ; 76 103 nDest_ = axisDest_-> getLocalView(CElementView::WORKFLOW)->getSize() ; 77 CArray<double,1> coord ;78 CLocalConnector destConnector(axisDest_->getLocalView(CElementView::FULL), axisDest_->getLocalView(CElementView::WORKFLOW)) ;79 destConnector.computeConnector() ;80 destConnector.transfer(axisDest_->value, coord) ;81 destCoordinate_ = vector<double>(coord.dataFirst(), coord.dataFirst()+nDest_) ;82 104 105 if (!hasCoordinateDest_) 106 { 107 CArray<double,1> coord ; 108 CLocalConnector destConnector(axisDest_->getLocalView(CElementView::FULL), axisDest_->getLocalView(CElementView::WORKFLOW)) ; 109 destConnector.computeConnector() ; 110 destConnector.transfer(axisDest_->value, coord) ; 111 destCoordinate_ = vector<double>(coord.dataFirst(), coord.dataFirst()+nDest_) ; 112 } 113 83 114 CArray<size_t,1> globalIndex(ngloSrc_) ; 84 115 for(int i=0;i<ngloSrc_;i++) … … 93 124 94 125 this->computeAlgorithm(axisSource->getLocalView(CElementView::WORKFLOW), axisSourceGlo.getView(CElementView::FULL)) ; 126 127 if (!hasCoordinateSrc_) 128 { 129 CArray<double,1> coord ; 130 CArray<double,1> coordGlo ; 131 CLocalConnector srcConnector(axisSrc_->getLocalView(CElementView::FULL), axisSrc_->getLocalView(CElementView::WORKFLOW)) ; 132 srcConnector.computeConnector() ; 133 srcConnector.transfer(axisSrc_->value, coord) ; // full view value -> workflow value 134 transferTransformConnector_ -> transfer(coord, coordGlo) ; // workflow view -> full global view 135 srcCoordinate_ = vector<double>(coordGlo.dataFirst(), coordGlo.dataFirst()+ngloSrc_) ; 136 } 95 137 } 96 138 CATCH … … 98 140 CTransformFilter* CAxisAlgorithmInterpolateCoordinate::createTransformFilter(CGarbageCollector& gc, CGridAlgorithm* algo, bool detectMissingValues, double defaultValue) 99 141 { 100 return new CTransformFilter(gc, 2, algo, detectMissingValues, defaultValue) ; 142 if (hasCoordinateSrc_ && hasCoordinateDest_) return new CTransformFilter(gc, 3, algo, detectMissingValues, defaultValue) ; 143 else return new CTransformFilter(gc, 2, algo, detectMissingValues, defaultValue) ; 101 144 } 102 145 … … 105 148 { 106 149 CArray<double,1> dataInTmp; 107 CArray<double,1> auxDataIn Tmp;150 CArray<double,1> auxDataInSrc ; 108 151 transferTransformConnector_ -> transfer(dimBefore, dimAfter, dataIn, dataInTmp) ; 109 transferTransformConnector_ -> transfer(dimBefore, dimAfter, auxDataIn[0], auxDataInTmp) ; 110 152 if (hasCoordinateSrc_) transferTransformConnector_ -> transfer(dimBefore, dimAfter, auxDataIn[0], auxDataInSrc) ; 153 154 111 155 dataOut.resize(dimBefore*dimAfter*nDest_) ; 112 const double* pressure = auxDataInTmp.dataFirst() ; 156 const double* pressureSrc ; 157 const double* pressureDest ; 158 if (hasCoordinateSrc_) pressureSrc = auxDataInSrc.dataFirst() ; 159 if (hasCoordinateDest_ && hasCoordinateSrc_) pressureDest = auxDataIn[1].dataFirst() ; 160 else if (hasCoordinateDest_ && !hasCoordinateSrc_ ) pressureDest = auxDataIn[0].dataFirst() ; 161 113 162 const double* in = dataInTmp.dataFirst() ; 114 163 double* out = dataOut.dataFirst() ; 115 164 116 size_t sliceSrc = dimAfter*ngloSrc_ ;165 size_t sliceSrc = dimAfter*ngloSrc_ ; 117 166 size_t sliceDest = dimAfter*nDest_ ; 118 167 vector<double> srcCoordinate(ngloSrc_) ; … … 123 172 std::vector<int> destIndex(nDest_); 124 173 125 size_t nsrc ; 174 size_t nsrc, nDest ; 175 126 176 for(size_t j=0, posJsrc=0, posJdest=0 ; j<dimBefore ; j++, posJsrc+=sliceSrc, posJdest+=sliceDest ) 127 177 for(size_t k=0, posKsrc=posJsrc, posKdest=posJdest ; k<dimAfter ; k++, posKsrc++,posKdest++) 128 178 { 129 nsrc=0 ; 130 for(size_t i=0, posIsrc=posKsrc, posIdest=posKdest ; i<ngloSrc_ ; i++, posIsrc+=dimAfter, posIdest+=dimAfter) 131 { 132 if ( !( std::isnan(pressure[posIsrc]) || std::isnan(in[posIsrc]) ) ) 133 { 134 srcCoordinate[nsrc]=pressure[posIsrc] ; 135 srcValue[nsrc] = in[posIsrc] ; 136 nsrc++ ; 137 } 138 } 139 destCoordinate = destCoordinate_ ; 140 computeInterp(nsrc, srcCoordinate, srcValue, srcIndex, nDest_, destCoordinate, destValue, destIndex) ; 141 142 for(size_t i=0, posIdest=posKdest ; i<nDest_ ; i++, posIdest+=dimAfter) out[posIdest] = destValue[i] ; 179 if (hasCoordinateSrc_) 180 { 181 nsrc=0 ; 182 for(size_t i=0, posIsrc=posKsrc, posIdest=posKdest ; i<ngloSrc_ ; i++, posIsrc+=dimAfter, posIdest+=dimAfter) 183 { 184 if ( !( std::isnan(pressureSrc[posIsrc]) || std::isnan(in[posIsrc]) ) ) 185 { 186 srcCoordinate[nsrc]=pressureSrc[posIsrc] ; 187 srcValue[nsrc] = in[posIsrc] ; 188 nsrc++ ; 189 } 190 } 191 } 192 else 193 { 194 nsrc=0 ; 195 for(size_t i=0, posIsrc=posKsrc ; i<ngloSrc_ ; i++, posIsrc+=dimAfter) 196 { 197 if ( !( std::isnan(srcCoordinate_[i]) || std::isnan(in[posIsrc]) ) ) 198 { 199 srcCoordinate[nsrc]=srcCoordinate_[i] ; 200 srcValue[nsrc] = in[posIsrc] ; 201 nsrc++ ; 202 } 203 } 204 } 205 206 if (hasCoordinateDest_) 207 { 208 nDest=0 ; 209 for(size_t i=0, posIdest=posKdest ; i<nDest_ ; i++, posIdest+=dimAfter) 210 { 211 if ( !( std::isnan(pressureDest[posIdest]) ) ) 212 { 213 destCoordinate[nDest]=pressureDest[posIdest] ; 214 nDest++ ; 215 } 216 } 217 } 218 else 219 { 220 nDest=0 ; 221 for(size_t i=0, posIdest=posKdest ; i<nDest_ ; i++, posIdest+=dimAfter) 222 { 223 if ( !( std::isnan(destCoordinate[i]) ) ) 224 { 225 destCoordinate[nDest]=destCoordinate_[i] ; 226 nDest++ ; 227 } 228 } 229 } 230 231 computeInterp(nsrc, srcCoordinate, srcValue, srcIndex, nDest, destCoordinate, destValue, destIndex) ; 232 233 if (hasCoordinateDest_) 234 { 235 nDest=0 ; 236 for(size_t i=0, posIdest=posKdest ; i<nDest_ ; i++, posIdest+=dimAfter) 237 { 238 if ( !( std::isnan(pressureDest[posIdest]) ) ) 239 { 240 out[posIdest] = destValue[nDest] ; 241 nDest++ ; 242 } 243 else out[posIdest] = std::numeric_limits<double>::quiet_NaN() ; 244 } 245 } 246 else 247 { 248 nDest=0 ; 249 for(size_t i=0, posIdest=posKdest ; i<nDest_ ; i++, posIdest+=dimAfter) 250 { 251 if ( !( std::isnan(destCoordinate[i]) ) ) 252 { 253 out[posIdest] = destValue[nDest] ; 254 nDest++ ; 255 } 256 else out[posIdest] = std::numeric_limits<double>::quiet_NaN() ; 257 } 258 } 143 259 } 144 145 260 } 146 261 … … 176 291 for(int j=lastj; j<nsrc; j++) 177 292 { 178 if (x >= srcCoordinate[srcIndex[j]] && x<srcCoordinate[srcIndex[j+1]]) ;179 293 lastj=j ; 180 break ;294 if (x >= srcCoordinate[srcIndex[j]] && x<srcCoordinate[srcIndex[j+1]]) break ; 181 295 } 182 296 } … … 205 319 for(int j=lastj; j<nsrc; j++) 206 320 { 207 if (x >= srcCoordinate[srcIndex[j]] && x<srcCoordinate[srcIndex[j+1]]) ;208 209 321 lastj=j ; 210 break ;322 if (x >= srcCoordinate[srcIndex[j]] && x<srcCoordinate[srcIndex[j+1]]) break ; 211 323 } 212 324 } -
XIOS/dev/dev_trunk_graph/src/transformation/axis_algorithm/axis_algorithm_interpolate_coordinate.hpp
r2030 r2137 32 32 virtual ~CAxisAlgorithmInterpolateCoordinate() {} 33 33 virtual vector<string> getAuxFieldId(void) ; 34 virtual bool transformAuxField(int pos) ; 34 35 virtual void apply(int dimBefore, int dimAfter, const CArray<double,1>& dataIn, 35 36 const vector<CArray<double,1>>& auxDataIn, CArray<double,1>& dataOut) ; … … 44 45 // Interpolation order 45 46 int order_; 46 StdString coordinate_; 47 StdString coordinateSrc_; // pressure src 48 StdString coordinateDest_; // pressure dst 47 49 bool hasCoordinate_=false ; 50 bool hasCoordinateSrc_=false ; 51 bool hasCoordinateDest_=false ; 48 52 49 53 CAxis* axisSrc_=nullptr ; … … 51 55 size_t ngloSrc_ ; 52 56 size_t nDest_ ; 53 vector<double> destCoordinate_ ; 57 vector<double> srcCoordinate_ ; // src axis value 58 vector<double> destCoordinate_ ; // dst axis value 54 59 55 60 public: -
XIOS/dev/dev_trunk_graph/src/transformation/axis_algorithm/axis_algorithm_inverse.cpp
r2030 r2137 52 52 TRY 53 53 { 54 axisDestination->checkAttributes() ; 54 55 if (axisDestination->n_glo.getValue() != axisSource->n_glo.getValue()) 55 56 { … … 62 63 auto& transMap = this->transformationMapping_; 63 64 64 int globalIndexSize = axisSource->index.numElements(); 65 for (int idx = 0; idx < globalIndexSize; ++idx) 66 { 67 //transMap[axisDestination->index(idx)] = globalIndexSize-axisDestination->index(idx)-1; 68 transMap[axisSource->index(idx)] = globalIndexSize-axisSource->index(idx)-1; 65 int globalIndexSize = axisDestination->n_glo.getValue(); 66 for (int idx = 0; idx < axisDestination->index.numElements(); ++idx) 67 { 68 transMap[axisDestination->index(idx)] = globalIndexSize-axisDestination->index(idx)-1; 69 69 } 70 70 -
XIOS/dev/dev_trunk_graph/src/transformation/domain_algorithm/domain_algorithm_reorder.cpp
r2030 r2137 44 44 TRY 45 45 { 46 domainDestination->type.setValue( CDomain::type_attr::rectilinear ); 47 domainDestination->ni_glo = domainSource->ni_glo; 48 domainDestination->nj_glo = domainSource->nj_glo; 49 domainDestination->ni = domainSource->ni; 50 domainDestination->nj = domainSource->nj; 51 domainDestination->ibegin = domainSource->ibegin; 52 domainDestination->jbegin = domainSource->jbegin; 53 46 54 reorderDomain->checkValid(domainSource); 47 domainDestination->type = domainSource->type;48 domainDestination->ni_glo.setValue(domainSource->ni_glo.getValue());49 domainDestination->nj_glo.setValue(domainSource->nj_glo.getValue());50 55 domainDestination->checkAttributes() ; // for now but maybe use domainSource as template for domain destination 51 56 52 if (domain Destination->type != CDomain::type_attr::rectilinear)57 if (domainSource->type != CDomain::type_attr::rectilinear) 53 58 { 54 59 ERROR("CDomainAlgorithmReorder::CDomainAlgorithmReorder(CDomain* domainDestination, CDomain* domainSource, CReorderDomain* reorderDomain)", … … 65 70 } 66 71 67 if (!reorderDomain->invert_lat.isEmpty() )72 if (!reorderDomain->invert_lat.isEmpty() && reorderDomain->invert_lat.getValue() ) 68 73 { 69 74 CArray<int,1>& j_index=domainDestination->j_index ; 70 75 int nglo = j_index.numElements() ; 71 76 int nj_glo =domainDestination->nj_glo ; 72 73 77 for (size_t i = 0; i < nglo ; ++i) 74 78 { … … 83 87 CArray<int,1>& i_index=domainDestination->i_index ; 84 88 int nglo = i_index.numElements() ; 85 86 89 for (size_t i = 0; i < nglo ; ++i) 87 90 { -
XIOS/dev/dev_trunk_graph/src/transformation/domain_algorithm/domain_algorithm_zoom.cpp
r2030 r2137 95 95 ibeginDest = destIBegin + domainSrc_->ibegin - zoomIBegin_; 96 96 jbeginDest = destJBegin + domainSrc_->jbegin - zoomJBegin_; 97 98 if (niDest==0) ibeginDest=0 ;99 if (njDest==0) jbeginDest=0 ;100 101 domainDest_->type = domainSrc_ -> type ;102 domainDest_->data_dim = domainSrc_->data_dim ;103 104 97 domainDest_->ni_glo.setValue(zoomNi_); 105 98 domainDest_->nj_glo.setValue(zoomNj_); -
XIOS/dev/dev_trunk_graph/src/transformation/generic_algorithm_transformation.hpp
r2027 r2137 42 42 virtual bool isGenerateTransformation(void) { return false ;} 43 43 virtual StdString getAlgoName() { return "\\nGeneric algorithm transformation";} 44 44 virtual bool transformAuxField(int pos) { return true ;} 45 45 virtual vector<string> getAuxFieldId(void) ; 46 46 protected : -
XIOS/dev/dev_trunk_graph/src/transformation/grid_algorithm_generic.cpp
r2019 r2137 64 64 65 65 gridTransformConnector_->transfer(dataIn, dataOutTmp) ; 66 for (int i=0; i<auxData.size();i++) gridTransformConnector_->transfer(auxData[i], auxDataOutTmp[i]) ; 66 for (int i=0; i<auxData.size();i++) 67 { 68 if (algorithm_->transformAuxField(i)) gridTransformConnector_->transfer(auxData[i], auxDataOutTmp[i]) ; 69 else auxDataOutTmp[i].reference(auxData[i]) ; 70 } 67 71 68 72 algorithm_->apply(dimBefore_, dimAfter_, dataOutTmp, auxDataOutTmp, dataOut) ; -
XIOS/dev/dev_trunk_graph/src/transformation/transformation.hpp
r2019 r2137 5 5 #include "xml_node.hpp" 6 6 #include "transformation_enum.hpp" 7 #include "exception.hpp" 7 8 8 9 namespace xios {
Note: See TracChangeset
for help on using the changeset viewer.