Changeset 369 for XIOS/trunk/src/node/domain.cpp
- Timestamp:
- 10/16/12 13:04:44 (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/trunk/src/node/domain.cpp
r352 r369 13 13 #include "context.hpp" 14 14 #include "context_client.hpp" 15 #include "array_new.hpp" 15 16 16 17 namespace xios { … … 20 21 CDomain::CDomain(void) 21 22 : CObjectTemplate<CDomain>(), CDomainAttributes() 22 , isChecked(false), local_mask(new CArray<int, 2>(boost::extents[0][0])),relFiles()23 , isChecked(false), relFiles() 23 24 , ibegin_sub(), iend_sub(), jbegin_sub(), jend_sub() 24 25 , ibegin_zoom_sub(), jbegin_zoom_sub(), ni_zoom_sub(), nj_zoom_sub() 25 , lonvalue_sub(), latvalue_sub(),lonvalue_srv(new CArray<double,1>()) 26 , latvalue_srv(new CArray<double,1>()) 26 , lonvalue_sub(), latvalue_sub() 27 27 { /* Ne rien faire de plus */ } 28 28 29 29 CDomain::CDomain(const StdString & id) 30 30 : CObjectTemplate<CDomain>(id), CDomainAttributes() 31 , isChecked(false), local_mask(new CArray<int, 2>(boost::extents[0][0])),relFiles()31 , isChecked(false), relFiles() 32 32 , ibegin_sub(), iend_sub(), jbegin_sub(), jend_sub() 33 33 , ibegin_zoom_sub(), jbegin_zoom_sub(),ni_zoom_sub(), nj_zoom_sub() 34 , lonvalue_sub(), latvalue_sub(),lonvalue_srv(new CArray<double,1>()) 35 , latvalue_srv(new CArray<double,1>()) 34 , lonvalue_sub(), latvalue_sub() 36 35 { /* Ne rien faire de plus */ } 37 36 38 37 CDomain::~CDomain(void) 39 38 { 40 this->local_mask.reset(); 41 for (StdSize i = 0; i < this->lonvalue_sub.size(); i++) 42 { 43 this->lonvalue_sub[i].reset(); 44 this->latvalue_sub[i].reset(); 45 } 39 vector<CArray<double,1>* >::iterator it; 40 for(it=lonvalue_sub.begin();it<lonvalue_sub.end();it++) delete *it; 41 for(it=latvalue_sub.begin();it<latvalue_sub.end();it++) delete *it; 46 42 } 47 43 … … 84 80 85 81 //---------------------------------------------------------------- 86 82 /* 87 83 void CDomain::fromBinary(StdIStream & is) 88 84 { … … 112 108 113 109 #define CLEAR_ATT(name_)\ 114 SuperClassAttribute::operator[](#name_)-> clear()110 SuperClassAttribute::operator[](#name_)->reset() 115 111 116 112 CLEAR_ATT(mask); … … 143 139 } 144 140 } 145 141 */ 146 142 //---------------------------------------------------------------- 147 143 … … 265 261 if (!mask.isEmpty()) 266 262 { 267 ARRAY(bool, 2) mask_ = mask.getValue();268 263 unsigned int niu = ni.getValue(), nju = nj.getValue(); 269 if ((mask _->shape()[0]!= niu) ||270 (mask _->shape()[1]!= nju))264 if ((mask.extent(0) != niu) || 265 (mask.extent(1) != nju)) 271 266 ERROR("CDomain::checkAttributes(void)", 272 267 <<"Le masque n'a pas la même taille que le domaine local") ; … … 278 273 if (i < ibegin_mask && i > iend_mask && 279 274 j < jbegin_mask && j > jend_mask ) 280 (*mask_)[i][j]= false;275 mask(i,j) = false; 281 276 } 282 277 } … … 285 280 { // Si aucun masque n'est défini, 286 281 // on en crée un nouveau qui valide l'intégralité du domaine. 287 ARRAY_CREATE(__arr, bool, 2, [ni.getValue()][nj.getValue()]);282 mask.resize(ni,nj) ; 288 283 for (int i = 0; i < ni.getValue(); i++) 289 284 { … … 292 287 if (i >= ibegin_mask && i <= iend_mask && 293 288 j >= jbegin_mask && j <= jend_mask ) 294 (*__arr)[i][j]= true;295 else (*__arr)[i][j]= false;289 mask(i,j) = true; 290 else mask(i,j) = false; 296 291 } 297 292 } 298 299 mask.setValue(__arr);300 __arr.reset();301 293 } 302 294 } … … 355 347 if (!data_i_index.isEmpty()) 356 348 { 357 int ssize = data_i_index. getValue()->size();349 int ssize = data_i_index.numElements(); 358 350 if (!data_n_index.isEmpty() && 359 351 (data_n_index.getValue() != ssize)) … … 368 360 { 369 361 if (!data_j_index.isEmpty() && 370 (data_j_index. getValue()->size() != data_i_index.getValue()->size()))362 (data_j_index.numElements() != data_i_index.numElements())) 371 363 { 372 364 ERROR("CDomain::checkAttributes(void)", … … 392 384 { 393 385 const int dni = data_ni.getValue(); 394 ARRAY_CREATE(__arri, int, 1, [dni]);386 data_i_index.resize(dni) ; 395 387 data_n_index.setValue(dni); 396 for (int i = 0; i < dni; i++) 397 (*__arri)[i] = i+1 ; 398 data_i_index.setValue(__arri) ; 388 for (int i = 0; i < dni; i++) data_i_index(i) = i+1 ; 399 389 } 400 390 else // (data_dim == 2) 401 391 { 402 392 const int dni = data_ni.getValue() * data_nj.getValue(); 393 data_i_index.resize(dni) ; 394 data_j_index.resize(dni) ; 403 395 404 ARRAY_CREATE(__arri, int, 1, [dni]);405 ARRAY_CREATE(__arrj, int, 1, [dni]);406 396 data_n_index.setValue(dni); 407 408 //for(int count = 0, i = 0; i < data_ni.getValue(); i++)409 //for(int j = 0; j < data_nj.getValue(); j++, count++)410 397 411 398 for(int count = 0, j = 0; j < data_nj.getValue(); j++) … … 413 400 for(int i = 0; i < data_ni.getValue(); i++, count++) 414 401 { 415 (*__arri)[count]= i+1 ;416 (*__arrj)[count]= j+1 ;402 data_i_index(count) = i+1 ; 403 data_j_index(count) = j+1 ; 417 404 } 418 405 } 419 data_i_index.setValue(__arri) ;420 data_j_index.setValue(__arrj) ;421 __arri.reset();422 __arrj.reset();423 406 } 424 407 } … … 429 412 void CDomain::completeLonLatClient(void) 430 413 { 431 ARRAY_CREATE(lonvalue_temp, double, 1, [0]);432 ARRAY_CREATE(latvalue_temp, double, 1, [0]);414 CArray<double,1> lonvalue_temp ; 415 CArray<double,1> latvalue_temp ; 433 416 434 417 const int zoom_ibegin_client = zoom_ibegin_loc.getValue(), … … 437 420 zoom_nj_client = zoom_nj_loc.getValue(); 438 421 439 ARRAY(double, 1) lonvalue_ = this->lonvalue.getValue(),440 latvalue_ = this->latvalue.getValue();441 442 422 if (this->data_dim.getValue() == 2) 443 423 { 444 424 StdSize dm = zoom_ni_client * zoom_nj_client; 445 425 446 lonvalue_temp ->resize(boost::extents[dm]);447 latvalue_temp ->resize(boost::extents[dm]);426 lonvalue_temp.resize(dm); 427 latvalue_temp.resize(dm); 448 428 449 429 for (int i = 0; i < zoom_ni_client; i++) … … 451 431 for (int j = 0; j < zoom_nj_client; j++) 452 432 { 453 (*lonvalue_temp)[i + j * zoom_ni_client] = 454 (*lonvalue_)[(i + zoom_ibegin_client -1)+(j + zoom_jbegin_client -1)*ni.getValue()]; 455 (*latvalue_temp)[i + j * zoom_ni_client] = 456 (*latvalue_)[(i + zoom_ibegin_client -1)+(j + zoom_jbegin_client -1)*ni.getValue()]; 433 lonvalue_temp(i + j * zoom_ni_client) = lonvalue( (i + zoom_ibegin_client -1) + (j + zoom_jbegin_client -1)*ni.getValue() ); 434 latvalue_temp(i + j * zoom_ni_client) = latvalue( (i + zoom_ibegin_client -1)+(j + zoom_jbegin_client -1)*ni.getValue() ); 457 435 } 458 436 } 459 this->lonvalue.setValue(lonvalue_temp); 460 this->latvalue.setValue(latvalue_temp); 437 lonvalue.reference(lonvalue_temp.copy()) ; 438 latvalue.reference(latvalue_temp.copy()) ; 439 cout<<lonvalue<<endl ; 440 cout<<latvalue<<endl ; 461 441 } 462 442 else 463 443 { 464 lonvalue_temp->resize(boost::extents[zoom_ni_client]); 465 latvalue_temp->resize(boost::extents[zoom_nj_client]); 466 444 lonvalue_temp.resize(zoom_ni_client); 445 latvalue_temp.resize(zoom_nj_client); 446 447 // Attention ici à revoir, probablement faux 467 448 for (int i = zoom_ibegin_client - 1; i < (zoom_ni_client - zoom_ibegin_client + 1); i++) 468 449 { 469 (*lonvalue_temp)[i] = (*lonvalue_)[i];470 } 471 472 for (int j = zoom_ ibegin_client - 1; j < (zoom_nj_client - zoom_jbegin_client + 1); j++)473 { 474 (*latvalue_temp)[j] = (*latvalue_)[j];475 } 476 477 this->lonvalue.setValue(lonvalue_temp);478 this->latvalue.setValue(latvalue_temp);450 lonvalue_temp(i) = lonvalue(i); 451 } 452 453 for (int j = zoom_jbegin_client - 1; j < (zoom_nj_client - zoom_jbegin_client + 1); j++) 454 { 455 latvalue_temp(j) = latvalue(j); 456 } 457 458 lonvalue.reference(lonvalue_temp.copy()) ; 459 latvalue.reference(latvalue_temp.copy()) ; 479 460 } 480 461 } … … 484 465 void CDomain::completeLonLatServer(void) 485 466 { 486 ARRAY_CREATE(lonvalue_temp, double, 1, [0]);487 ARRAY_CREATE(latvalue_temp, double, 1, [0]);467 CArray<double,1> lonvalue_temp ; 468 CArray<double,1> latvalue_temp ; 488 469 489 470 const int ibegin_serv = ibegin.getValue(), … … 499 480 StdSize dm = zoom_ni_serv * zoom_nj_serv; 500 481 501 lonvalue_temp ->resize(boost::extents[dm]);502 latvalue_temp ->resize(boost::extents[dm]);482 lonvalue_temp.resize(dm); 483 latvalue_temp.resize(dm); 503 484 504 485 for (StdSize k = 0; k < lonvalue_sub.size(); k++) 505 486 { 506 ARRAY(double, 1) lonvalue_loc = this->lonvalue_sub[k], 507 latvalue_loc = this->latvalue_sub[k]; 487 CArray<double,1> lonvalue_loc(*(lonvalue_sub[k])) ; 488 CArray<double,1> latvalue_loc (*(latvalue_sub[k])); 489 508 490 const int zoom_ibegin_cl = ibegin_zoom_sub[k], zoom_ni_cl = ni_zoom_sub[k], 509 491 zoom_jbegin_cl = jbegin_zoom_sub[k], zoom_nj_cl = nj_zoom_sub[k], … … 518 500 int ii = i + (ibegin_cl-1) - (ibegin_serv - 1) + (zoom_ibegin_cl - 1) - (ibegin_zoom_srv - 1); 519 501 int jj = j + (jbegin_cl-1) - (jbegin_serv - 1) + (zoom_jbegin_cl - 1) - (jbegin_zoom_srv - 1); 520 (*lonvalue_temp)[ii + jj * zoom_ni_serv] = 521 (*lonvalue_loc)[i + j * zoom_ni_cl]; 522 (*latvalue_temp)[ii + jj * zoom_ni_serv] = 523 (*latvalue_loc)[i + j * zoom_ni_cl]; 502 lonvalue_temp(ii + jj * zoom_ni_serv) = lonvalue_loc(i + j * zoom_ni_cl); 503 latvalue_temp(ii + jj * zoom_ni_serv) = latvalue_loc(i + j * zoom_ni_cl); 524 504 } 525 505 } 526 506 } 527 this->lonvalue.setValue(lonvalue_temp); 528 this->latvalue.setValue(latvalue_temp); 507 508 lonvalue.reference(lonvalue_temp.copy()) ; 509 latvalue.reference(latvalue_temp.copy()) ; 529 510 } 530 511 else 531 512 { 532 lonvalue_temp ->resize(boost::extents[zoom_ni_serv]);533 latvalue_temp ->resize(boost::extents[zoom_nj_serv]);513 lonvalue_temp.resize(zoom_ni_serv); 514 latvalue_temp.resize(zoom_nj_serv); 534 515 535 516 for (StdSize k = 0; k < lonvalue_sub.size(); k++) 536 517 { 537 ARRAY(double, 1) lonvalue_loc = this->lonvalue_sub[k], 538 latvalue_loc = this->latvalue_sub[k]; 518 CArray<double,1> lonvalue_loc(*(lonvalue_sub[k])); 519 CArray<double,1> latvalue_loc(*(latvalue_sub[k])); 520 539 521 const int zoom_ibegin_cl = ibegin_zoom_sub[k], zoom_ni_cl = ni_zoom_sub[k], 540 522 zoom_jbegin_cl = jbegin_zoom_sub[k], zoom_nj_cl = nj_zoom_sub[k]; 541 523 542 524 for (int i = 0; i < zoom_ni_cl; i++) 543 (*lonvalue_temp)[i /*- (ibegin_serv - 1)*/ + (zoom_ibegin_cl - 1) - (ibegin_zoom_srv - 1)] = 544 (*lonvalue_loc)[i]; 525 lonvalue_temp(i /*- (ibegin_serv - 1)*/ + (zoom_ibegin_cl - 1) - (ibegin_zoom_srv - 1)) = lonvalue_loc(i); 545 526 546 527 for (int j = 0; j < zoom_nj_cl; j++) 547 (*latvalue_temp)[j /*- (jbegin_serv - 1)*/ + (zoom_jbegin_cl - 1) - (jbegin_zoom_srv - 1)] = 548 (*latvalue_loc)[j]; 528 latvalue_temp(j /*- (jbegin_serv - 1)*/ + (zoom_jbegin_cl - 1) - (jbegin_zoom_srv - 1)) = latvalue_loc(j); 549 529 } 550 this->lonvalue.setValue(lonvalue_temp);551 this->latvalue.setValue(latvalue_temp);530 lonvalue.reference(lonvalue_temp.copy()) ; 531 latvalue.reference(latvalue_temp.copy()) ; 552 532 } 553 533 } … … 662 642 this->nj_zoom_sub.push_back(this->zoom_nj_loc.getValue()); 663 643 664 this->latvalue_sub.push_back( this->latvalue.getValue());665 this->lonvalue_sub.push_back( this->lonvalue.getValue());644 this->latvalue_sub.push_back(new CArray<double,1>(latvalue.copy())); 645 this->lonvalue_sub.push_back(new CArray<double,1>(lonvalue.copy())); 666 646 667 647 … … 855 835 CEventClient event(getType(),EVENT_ID_LON_LAT) ; 856 836 857 ARRAY(double, 1) lonvalue_client = lonvalue.getValue(),858 latvalue_client = latvalue.getValue();859 860 837 int ib,ie,in ; 861 838 int jb,je,jn ; 862 839 863 840 list<shared_ptr<CMessage> > list_msg ; 864 list< ARRAY(double,1)> list_indi,list_indj,list_lon,list_lat ;841 list<CArray<double,1>* > list_indi,list_indj,list_lon,list_lat ; 865 842 866 843 for(int ns=0;ns<connectedServer.size();ns++) … … 869 846 jb=jb_srv[ns] ; je=je_srv[ns] ; jn=jn_srv[ns] ; 870 847 871 ARRAY_CREATE(indi,double,1,[in*jn]) ;872 ARRAY_CREATE(indj,double,1,[in*jn]) ;873 ARRAY_CREATE(lon,double,1,[in*jn]) ;874 ARRAY_CREATE(lat,double,1,[in*jn]) ;848 CArray<double,1> indi(in*jn) ; 849 CArray<double,1> indj(in*jn) ; 850 CArray<double,1> lon(in*jn) ; 851 CArray<double,1> lat(in*jn) ; 875 852 876 853 … … 882 859 ind_client=(i-zoom_ibegin_client)+(j-zoom_jbegin_client)*zoom_ni_client ; 883 860 ind_loc=(i-ib)+(j-jb)*in ; 884 (*lon)[ind_loc]=(*lonvalue_client)[ind_client];885 (*lat)[ind_loc]=(*latvalue_client)[ind_client];886 (*indi)[ind_loc]=i ;887 (*indj)[ind_loc]=j ;861 lon(ind_loc)=lonvalue(ind_client) ; 862 lat(ind_loc)=latvalue(ind_client) ; 863 indi(ind_loc)=i ; 864 indj(ind_loc)=j ; 888 865 } 889 866 890 list_indi.push_back(indi) ; list_indj.push_back(indj) ; 891 list_lon.push_back(lon) ; list_lat.push_back(lat) ; 867 list_indi.push_back(new CArray<double,1>(indi.copy())) ; 868 list_indj.push_back(new CArray<double,1>(indj.copy())) ; 869 list_lon.push_back(new CArray<double,1>(lon.copy())) ; 870 list_lat.push_back(new CArray<double,1>(lat.copy())) ; 871 892 872 list_msg.push_back(shared_ptr<CMessage>(new CMessage)) ; 893 873 894 874 *list_msg.back()<<this->getId() ; 895 *list_msg.back()<< list_indi.back()<<list_indj.back()<<list_lon.back()<<list_lat.back() ;875 *list_msg.back()<<*list_indi.back()<<*list_indj.back()<<*list_lon.back()<<*list_lat.back() ; 896 876 event.push(connectedServer[ns],nbSenders[ns],*list_msg.back()) ; 897 877 } 898 878 899 879 client->sendEvent(event) ; 880 881 list<CArray<double,1>* >::iterator it; 882 for(it=list_indi.begin();it!=list_indi.end();it++) delete *it; 883 for(it=list_indj.begin();it!=list_indj.end();it++) delete *it; 884 for(it=list_lon.begin();it!=list_lon.end();it++) delete *it; 885 for(it=list_lat.begin();it!=list_lat.end();it++) delete *it; 886 900 887 } 901 888 … … 953 940 } 954 941 955 lonvalue_srv ->resize(extents[zoom_ni_srv*zoom_nj_srv]) ;956 latvalue_srv ->resize(extents[zoom_ni_srv*zoom_nj_srv]) ;942 lonvalue_srv.resize(zoom_ni_srv*zoom_nj_srv) ; 943 latvalue_srv.resize(zoom_ni_srv*zoom_nj_srv) ; 957 944 } 958 945 … … 971 958 void CDomain::recvLonLat(CBufferIn& buffer) 972 959 { 973 ARRAY_CREATE(indi,double,1,[0]);974 ARRAY_CREATE(indj,double,1,[0]);975 ARRAY_CREATE(lon,double,1,[0]);976 ARRAY_CREATE(lat,double,1,[0]);977 960 CArray<double,1> indi ; 961 CArray<double,1> indj ; 962 CArray<double,1> lon ; 963 CArray<double,1> lat ; 964 978 965 buffer>>indi>>indj>>lon>>lat ; 979 966 int i,j,ind_srv ; 980 967 981 for(int ind=0;ind<indi ->num_elements();ind++)968 for(int ind=0;ind<indi.numElements();ind++) 982 969 { 983 i= (*indi)[ind] ; j=(*indj)[ind];970 i=indi(ind) ; j=indj(ind) ; 984 971 ind_srv=(i-zoom_ibegin_srv)+(j-zoom_jbegin_srv)*zoom_ni_srv ; 985 (*lonvalue_srv)[ind_srv]=(*lon)[ind];986 (*latvalue_srv)[ind_srv]=(*lat)[ind];972 lonvalue_srv(ind_srv)=lon(ind) ; 973 latvalue_srv(ind_srv)=lat(ind) ; 987 974 } 988 975 } … … 991 978 void CDomain::completeMask(void) 992 979 { 993 this->local_mask ->resize(boost::extents[zoom_ni_loc.getValue()][zoom_nj_loc.getValue()]);994 } 995 996 //---------------------------------------------------------------- 997 998 ARRAY(int, 2)CDomain::getLocalMask(void) const980 this->local_mask.resize(zoom_ni_loc,zoom_nj_loc); 981 } 982 983 //---------------------------------------------------------------- 984 985 CArray<int,2> CDomain::getLocalMask(void) const 999 986 { 1000 987 return (this->local_mask); … … 1056 1043 //---------------------------------------------------------------- 1057 1044 1058 const std::vector< ARRAY(double, 1)> & CDomain::getLonValueSub(void) const1045 const std::vector<CArray<double, 1>* > & CDomain::getLonValueSub(void) const 1059 1046 { 1060 1047 return (this->lonvalue_sub); … … 1063 1050 //---------------------------------------------------------------- 1064 1051 1065 const std::vector< ARRAY(double, 1)> & CDomain::getLatValueSub(void) const1052 const std::vector<CArray<double,1>*> & CDomain::getLatValueSub(void) const 1066 1053 { 1067 1054 return (this->latvalue_sub);
Note: See TracChangeset
for help on using the changeset viewer.