Changeset 567 for XIOS/trunk/src/output
- Timestamp:
- 03/10/15 10:49:02 (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/trunk/src/output/nc4_data_output.cpp
r544 r567 483 483 if (axis->IsWritten(this->filename)) return; 484 484 axis->checkAttributes(); 485 StdSize zoom_size =axis->zoom_size.getValue();486 StdSize zoom_begin =axis->zoom_begin.getValue()-1;485 StdSize zoom_size_srv=axis->zoom_size_srv; 486 StdSize zoom_begin_srv=axis->zoom_begin_srv; 487 487 488 488 … … 492 492 try 493 493 { 494 SuperClassWriter::addDimension(axisid, zoom_size );494 SuperClassWriter::addDimension(axisid, zoom_size_srv); 495 495 dims.push_back(axisid); 496 496 … … 527 527 SuperClassWriter::definition_end(); 528 528 529 CArray<double,1> axis_value(zoom_size ) ;530 for(StdSize i = 0 ; i < zoom_size ; i++) axis_value(i)=axis->value(i+zoom_begin) ;529 CArray<double,1> axis_value(zoom_size_srv) ; 530 for(StdSize i = 0 ; i < zoom_size_srv ; i++) axis_value(i)=axis->value(i+zoom_begin_srv) ; 531 531 SuperClassWriter::writeData(axis_value, axisid, isCollective, 0); 532 532 … … 580 580 std::vector<StdString> dims, coodinates; 581 581 CGrid* grid = field->grid; 582 CDomain* domain = grid->domain; 583 584 if (domain->isEmpty()) 585 if (SuperClass::type==MULTI_FILE) return ; 586 587 StdString timeid = StdString("time_counter"); 588 StdString domid = (!domain->name.isEmpty()) 589 ? domain->name.getValue() : domain->getId(); 590 StdString appendDomid = (singleDomain) ? "" : "_"+domid ; 591 592 // bool isCurvilinear = domain->isCurvilinear ; 593 // bool isCurvilinear = (domain->type == CDomain::type_attr::curvilinear) ; 594 595 StdString dimXid,dimYid ; 596 597 switch (domain->type) 598 { 599 case CDomain::type_attr::curvilinear : 600 dimXid = StdString("x").append(appendDomid); 601 dimYid = StdString("y").append(appendDomid); 602 break ; 603 case CDomain::type_attr::regular : 604 dimXid = StdString("lon").append(appendDomid); 605 dimYid = StdString("lat").append(appendDomid); 606 break ; 607 case CDomain::type_attr::unstructured : 608 dimXid = StdString("cell").append(appendDomid); 609 break ; 610 } 582 if (!grid->doGridHaveDataToWrite()) 583 if (SuperClass::type==MULTI_FILE) return ; 584 585 CArray<bool,1> axisDomainOrder = grid->axisDomainOrder; 586 int numElement = axisDomainOrder.numElements(), idxDomain = 0, idxAxis = 0; 587 std::vector<StdString> domainList = grid->getDomainList(); 588 std::vector<StdString> axisList = grid->getAxisList(); 589 590 StdString timeid = StdString("time_counter"); 591 StdString dimXid,dimYid; 592 std::deque<StdString> dimIdList, dimCoordList; 593 594 for (int i = 0; i < numElement; ++i) 595 { 596 if (axisDomainOrder(i)) 597 { 598 CDomain* domain = CDomain::get(domainList[idxDomain]); 599 StdString domid = (!domain->name.isEmpty()) 600 ? domain->name.getValue() : domain->getId(); 601 StdString appendDomid = (singleDomain) ? "" : "_"+domid ; 602 switch (domain->type) 603 { 604 case CDomain::type_attr::curvilinear : 605 dimXid = StdString("x").append(appendDomid); 606 dimIdList.push_back(dimXid); 607 dimYid = StdString("y").append(appendDomid); 608 dimIdList.push_back(dimYid); 609 dimCoordList.push_back(StdString("nav_lon").append(appendDomid)); 610 dimCoordList.push_back(StdString("nav_lat").append(appendDomid)); 611 break ; 612 case CDomain::type_attr::regular : 613 dimXid = StdString("lon").append(appendDomid); 614 dimIdList.push_back(dimXid); 615 dimYid = StdString("lat").append(appendDomid); 616 dimIdList.push_back(dimYid); 617 break ; 618 case CDomain::type_attr::unstructured : 619 dimXid = StdString("cell").append(appendDomid); 620 dimIdList.push_back(dimXid); 621 dimCoordList.push_back(StdString("lon").append(appendDomid)); 622 dimCoordList.push_back(StdString("lat").append(appendDomid)); 623 break ; 624 } 625 ++idxDomain; 626 } 627 else 628 { 629 CAxis* axis = CAxis::get(axisList[idxAxis]); 630 StdString axisid = (!axis->name.isEmpty()) 631 ? axis->name.getValue() : axis->getId(); 632 dimIdList.push_back(axisid); 633 dimCoordList.push_back(axisid); 634 ++idxAxis; 635 } 636 } 611 637 612 638 /* … … 648 674 } 649 675 650 std::vector<StdString> axisList = grid->getAxisList(); 651 if (!axisList.empty()) 652 { 653 std::vector<StdString>::const_iterator itAxis = axisList.begin(), iteAxis = axisList.end(); 654 for (; itAxis != iteAxis; ++itAxis) 655 { 656 CAxis* axis = CAxis::get(*itAxis); 657 StdString axisid = (!axis->name.isEmpty()) 658 ? axis->name.getValue() : axis->getId(); 659 660 dims.push_back(axisid); 661 coodinates.push_back(axisid); 662 } 663 } 664 665 switch (domain->type) 666 { 667 case CDomain::type_attr::curvilinear : 668 coodinates.push_back(StdString("nav_lon").append(appendDomid)); 669 coodinates.push_back(StdString("nav_lat").append(appendDomid)); 670 break; 671 case CDomain::type_attr::regular : 672 case CDomain::type_attr::unstructured : 673 coodinates.push_back(StdString("lon").append(appendDomid)); 674 coodinates.push_back(StdString("lat").append(appendDomid)); 675 break; 676 } 677 678 if ( domain->type == CDomain::type_attr::curvilinear || domain->type == CDomain::type_attr::regular)dims.push_back(dimYid); 679 dims.push_back(dimXid); 676 while (!dimIdList.empty()) 677 { 678 dims.push_back(dimIdList.back()); 679 dimIdList.pop_back(); 680 } 681 682 while (!dimCoordList.empty()) 683 { 684 coodinates.push_back(dimCoordList.back()); 685 dimCoordList.pop_back(); 686 } 680 687 681 688 try … … 772 779 } 773 780 } 781 782 783 // void CNc4DataOutput::writeField_(CField* field) 784 // { 785 // CContext* context = CContext::getCurrent() ; 786 // CContextServer* server=context->server ; 787 // 788 // std::vector<StdString> dims, coodinates; 789 // CGrid* grid = field->grid; 790 // CDomain* domain = grid->domain; 791 // 792 // if (domain->isEmpty()) 793 // if (SuperClass::type==MULTI_FILE) return ; 794 // 795 // StdString timeid = StdString("time_counter"); 796 // StdString domid = (!domain->name.isEmpty()) 797 // ? domain->name.getValue() : domain->getId(); 798 // StdString appendDomid = (singleDomain) ? "" : "_"+domid ; 799 // 800 //// bool isCurvilinear = domain->isCurvilinear ; 801 //// bool isCurvilinear = (domain->type == CDomain::type_attr::curvilinear) ; 802 // 803 // StdString dimXid,dimYid ; 804 // 805 // switch (domain->type) 806 // { 807 // case CDomain::type_attr::curvilinear : 808 // dimXid = StdString("x").append(appendDomid); 809 // dimYid = StdString("y").append(appendDomid); 810 // break ; 811 // case CDomain::type_attr::regular : 812 // dimXid = StdString("lon").append(appendDomid); 813 // dimYid = StdString("lat").append(appendDomid); 814 // break ; 815 // case CDomain::type_attr::unstructured : 816 // dimXid = StdString("cell").append(appendDomid); 817 // break ; 818 // } 819 // 820 ///* 821 // StdString lonid_loc = (server->intraCommSize > 1) 822 // ? StdString("lon").append(appendDomid).append("_local") 823 // : lonid; 824 // StdString latid_loc = (server->intraCommSize > 1) 825 // ? StdString("lat").append(appendDomid).append("_local") 826 // : latid; 827 //*/ 828 // StdString fieldid = (!field->name.isEmpty()) 829 // ? field->name.getValue() : field->getBaseFieldReference()->getId(); 830 // 831 //// unsigned int ssize = domain->zoom_ni_loc.getValue() * domain->zoom_nj_loc.getValue(); 832 //// bool isCurvilinear = (domain->lonvalue.getValue()->size() == ssize); 833 //// bool isCurvilinear = domain->isCurvilinear ; 834 // 835 // nc_type type ; 836 // if (field->prec.isEmpty()) type = NC_FLOAT ; 837 // else 838 // { 839 // if (field->prec==2) type = NC_SHORT ; 840 // else if (field->prec==4) type = NC_FLOAT ; 841 // else if (field->prec==8) type = NC_DOUBLE ; 842 // } 843 // 844 // bool wtime = !(!field->operation.isEmpty() && field->foperation->timeType() == func::CFunctor::once); 845 // 846 // if (wtime) 847 // { 848 // 849 // //StdOStringStream oss; 850 // // oss << "time_" << field->operation.getValue() 851 // // << "_" << field->getRelFile()->output_freq.getValue(); 852 // //oss 853 // if (field->foperation->timeType() == func::CFunctor::instant) coodinates.push_back(string("time_instant")); 854 // else if (field->foperation->timeType() == func::CFunctor::centered) coodinates.push_back(string("time_centered")); 855 // dims.push_back(timeid); 856 // } 857 // 858 // std::vector<StdString> axisList = grid->getAxisList(); 859 // if (!axisList.empty()) 860 // { 861 // std::vector<StdString>::const_iterator itAxis = axisList.begin(), iteAxis = axisList.end(); 862 // for (; itAxis != iteAxis; ++itAxis) 863 // { 864 // CAxis* axis = CAxis::get(*itAxis); 865 // StdString axisid = (!axis->name.isEmpty()) 866 // ? axis->name.getValue() : axis->getId(); 867 // 868 // dims.push_back(axisid); 869 // coodinates.push_back(axisid); 870 // } 871 // } 872 // 873 // switch (domain->type) 874 // { 875 // case CDomain::type_attr::curvilinear : 876 // coodinates.push_back(StdString("nav_lon").append(appendDomid)); 877 // coodinates.push_back(StdString("nav_lat").append(appendDomid)); 878 // break; 879 // case CDomain::type_attr::regular : 880 // case CDomain::type_attr::unstructured : 881 // coodinates.push_back(StdString("lon").append(appendDomid)); 882 // coodinates.push_back(StdString("lat").append(appendDomid)); 883 // break; 884 // } 885 // 886 // if ( domain->type == CDomain::type_attr::curvilinear || domain->type == CDomain::type_attr::regular)dims.push_back(dimYid); 887 // dims.push_back(dimXid); 888 // 889 // try 890 // { 891 // SuperClassWriter::addVariable(fieldid, type, dims); 892 // 893 // if (!field->standard_name.isEmpty()) 894 // SuperClassWriter::addAttribute 895 // ("standard_name", field->standard_name.getValue(), &fieldid); 896 // 897 // if (!field->long_name.isEmpty()) 898 // SuperClassWriter::addAttribute 899 // ("long_name", field->long_name.getValue(), &fieldid); 900 // 901 // if (!field->unit.isEmpty()) 902 // SuperClassWriter::addAttribute 903 // ("units", field->unit.getValue(), &fieldid); 904 // 905 // if (!field->valid_min.isEmpty()) 906 // SuperClassWriter::addAttribute 907 // ("valid_min", field->valid_min.getValue(), &fieldid); 908 // 909 // if (!field->valid_max.isEmpty()) 910 // SuperClassWriter::addAttribute 911 // ("valid_max", field->valid_max.getValue(), &fieldid); 912 // 913 // if (!field->scale_factor.isEmpty()) 914 // SuperClassWriter::addAttribute 915 // ("scale_factor", field->scale_factor.getValue(), &fieldid); 916 // 917 // if (!field->add_offset.isEmpty()) 918 // SuperClassWriter::addAttribute 919 // ("add_offset", field->add_offset.getValue(), &fieldid); 920 // 921 // SuperClassWriter::addAttribute 922 // ("online_operation", field->operation.getValue(), &fieldid); 923 // 924 // // write child variables as attributes 925 // 926 // 927 // vector<CVariable*> listVars = field->getAllVariables() ; 928 // for (vector<CVariable*>::iterator it = listVars.begin() ;it != listVars.end(); it++) writeAttribute_(*it, fieldid) ; 929 // 930 // 931 // if (wtime) 932 // { 933 // CDuration duration = field->freq_op.getValue(); 934 // duration.solveTimeStep(*(context->calendar)); 935 // SuperClassWriter::addAttribute("interval_operation", duration.toString(), &fieldid); 936 // 937 // duration = field->getRelFile()->output_freq.getValue(); 938 // duration.solveTimeStep(*(context->calendar)); 939 // SuperClassWriter::addAttribute("interval_write", duration.toString(), &fieldid); 940 // } 941 // 942 // if (!field->default_value.isEmpty()) 943 // { 944 // double default_value = field->default_value.getValue(); 945 // float fdefault_value = (float)default_value; 946 // if (type == NC_DOUBLE) 947 // SuperClassWriter::setDefaultValue(fieldid, &default_value); 948 // else 949 // SuperClassWriter::setDefaultValue(fieldid, &fdefault_value); 950 // } 951 // else 952 // SuperClassWriter::setDefaultValue(fieldid, (double*)NULL); 953 // 954 // { // Ecriture des coordonnées 955 // 956 // StdString coordstr; //boost::algorithm::join(coodinates, " ") 957 // std::vector<StdString>::iterator 958 // itc = coodinates.begin(), endc = coodinates.end(); 959 // 960 // for (; itc!= endc; itc++) 961 // { 962 // StdString & coord = *itc; 963 // if (itc+1 != endc) 964 // coordstr.append(coord).append(" "); 965 // else coordstr.append(coord); 966 // } 967 // 968 // SuperClassWriter::addAttribute("coordinates", coordstr, &fieldid); 969 // 970 // } 971 // } 972 // catch (CNetCdfException& e) 973 // { 974 // StdString msg("On writing field : "); 975 // msg.append(fieldid); msg.append("\n"); 976 // msg.append("In the context : "); 977 // msg.append(context->getId()); msg.append("\n"); 978 // msg.append(e.what()); 979 // ERROR("CNc4DataOutput::writeField_(CField* field)", << msg); 980 // } 981 // } 774 982 775 983 //-------------------------------------------------------------- … … 932 1140 933 1141 CGrid* grid = field->grid ; 934 CDomain* domain = grid->domain ; 935 936 if(SuperClass::type==MULTI_FILE || !isCollective) if (domain->isEmpty()) return; 937 1142 1143 if (!grid->doGridHaveDataToWrite()) 1144 if (SuperClass::type==MULTI_FILE || !isCollective) return ; 938 1145 939 1146 StdString fieldid = (!field->name.isEmpty()) … … 992 1199 try 993 1200 { 994 if (grid->hasAxis()) // 3D 1201 CArray<double,1> fieldData(grid->getWrittenDataSize()); 1202 if (!field->default_value.isEmpty()) fieldData = field->default_value; 1203 field->outputField(fieldData); 1204 if (!field->prec.isEmpty() && field->prec==2) fieldData=round(fieldData) ; 1205 1206 switch (SuperClass::type) 995 1207 { 996 CAxis* axis = grid->axis ; 997 CArray<double,3> field_data3D(domain->zoom_ni_srv,domain->zoom_nj_srv,axis->zoom_size) ; 998 if (!field->default_value.isEmpty()) field_data3D = field->default_value ; 999 1000 field->outputField(field_data3D); 1001 1002 if (!field->prec.isEmpty() && field->prec==2) field_data3D=round(field_data3D) ; 1003 1004 switch (SuperClass::type) 1005 { 1006 case (MULTI_FILE) : 1208 case (MULTI_FILE) : 1209 { 1210 SuperClassWriter::writeData(fieldData, fieldid, isCollective, field->getNStep()-1); 1211 if (wtime) 1212 { 1213 SuperClassWriter::writeData(time_data, timeAxisId, isCollective, field->getNStep()-1); 1214 SuperClassWriter::writeData(time_counter, string("time_counter"), isCollective, field->getNStep()-1); 1215 SuperClassWriter::writeData(time_counter_bound, timeBoundId, isCollective, field->getNStep()-1); 1216 SuperClassWriter::writeData(time_data_bound, timeAxisBoundId, isCollective, field->getNStep()-1); 1217 } 1218 break ; 1219 } 1220 case (ONE_FILE) : 1221 { 1222 std::vector<int> nZoomBeginGlobal = grid->getDistributionServer()->getZoomBeginGlobal(); 1223 std::vector<int> nZoomBeginServer = grid->getDistributionServer()->getZoomBeginServer(); 1224 std::vector<int> nZoomSizeServer = grid->getDistributionServer()->getZoomSizeServer(); 1225 1226 int ssize = nZoomBeginGlobal.size(); 1227 1228 std::vector<StdSize> start(ssize) ; 1229 std::vector<StdSize> count(ssize) ; 1230 1231 for (int i = 0; i < ssize; ++i) 1007 1232 { 1008 SuperClassWriter::writeData(field_data3D, fieldid, isCollective, field->getNStep()-1); 1009 if (wtime) 1010 { 1011 SuperClassWriter::writeData(time_data, timeAxisId, isCollective, field->getNStep()-1); 1012 SuperClassWriter::writeData(time_counter, string("time_counter"), isCollective, field->getNStep()-1); 1013 SuperClassWriter::writeData(time_counter_bound, timeBoundId, isCollective, field->getNStep()-1); 1014 SuperClassWriter::writeData(time_data_bound, timeAxisBoundId, isCollective, field->getNStep()-1); 1015 } 1016 break ; 1233 start[i] = nZoomBeginServer[ssize-i-1] - nZoomBeginGlobal[ssize-i-1]; 1234 count[i] = nZoomSizeServer[ssize-i-1]; 1017 1235 } 1018 case (ONE_FILE) : 1019 { 1020 std::vector<StdSize> start(3) ; 1021 std::vector<StdSize> count(3) ; 1022 if (domain->isEmpty()) 1023 { 1024 start[0]=0 ; start[1]=0 ; start[2]=0 ; 1025 count[0]=0 ; count[1]=0 ; start[2]=0 ; 1026 } 1027 else 1028 { 1029 // start[2]=domain->zoom_ibegin_loc.getValue()-domain->zoom_ibegin.getValue() ; start [1]=domain->zoom_jbegin_loc.getValue()-domain->zoom_jbegin.getValue() ; start[0]=0 ; 1030 start[2]=domain->zoom_ibegin_srv-domain->zoom_ibegin.getValue() ; start [1]=domain->zoom_jbegin_srv-domain->zoom_jbegin.getValue() ; start[0]=0 ; 1031 count[2]=domain->zoom_ni_srv ; count[1]=domain->zoom_nj_srv ; count[0] = axis->zoom_size.getValue(); 1032 } 1033 SuperClassWriter::writeData(field_data3D, fieldid, isCollective, field->getNStep()-1,&start,&count ); 1034 if (wtime) 1035 { 1036 SuperClassWriter::writeTimeAxisData(time_data, timeAxisId, isCollective, field->getNStep()-1,isRoot ); 1037 SuperClassWriter::writeTimeAxisData(time_counter, string("time_counter"), isCollective, field->getNStep()-1,isRoot ); 1038 SuperClassWriter::writeTimeAxisData(time_counter_bound, timeBoundId, isCollective, field->getNStep()-1, isRoot ); 1039 SuperClassWriter::writeTimeAxisData(time_data_bound, timeAxisBoundId, isCollective, field->getNStep()-1, isRoot); 1040 } 1041 break; 1042 } 1236 1237 SuperClassWriter::writeData(fieldData, fieldid, isCollective, field->getNStep()-1,&start,&count ); 1238 if (wtime) 1239 { 1240 SuperClassWriter::writeTimeAxisData(time_data, timeAxisId, isCollective, field->getNStep()-1,isRoot ); 1241 SuperClassWriter::writeTimeAxisData(time_counter, string("time_counter"), isCollective, field->getNStep()-1,isRoot ); 1242 SuperClassWriter::writeTimeAxisData(time_counter_bound, timeBoundId, isCollective, field->getNStep()-1, isRoot ); 1243 SuperClassWriter::writeTimeAxisData(time_data_bound, timeAxisBoundId, isCollective, field->getNStep()-1, isRoot); 1244 } 1245 break; 1043 1246 } 1044 1045 } 1046 else // 2D 1047 { 1048 CArray<double,2> field_data2D(domain->zoom_ni_srv,domain->zoom_nj_srv) ; 1049 if (!field->default_value.isEmpty()) field_data2D = field->default_value ; 1050 field->outputField(field_data2D); 1051 if (!field->prec.isEmpty() && field->prec==2) field_data2D=round(field_data2D) ; 1052 switch (SuperClass::type) 1053 { 1054 case (MULTI_FILE) : 1055 { 1056 SuperClassWriter::writeData(field_data2D, fieldid, isCollective, field->getNStep()-1); 1057 if (wtime) 1058 { 1059 SuperClassWriter::writeData(time_data, timeAxisId, isCollective, field->getNStep()-1); 1060 SuperClassWriter::writeData(time_counter, string("time_counter"), isCollective, field->getNStep()-1); 1061 SuperClassWriter::writeData(time_counter_bound, timeBoundId, isCollective, field->getNStep()-1); 1062 SuperClassWriter::writeData(time_data_bound, timeAxisBoundId, isCollective, field->getNStep()-1); 1063 } 1064 break; 1065 } 1066 case (ONE_FILE) : 1067 { 1068 std::vector<StdSize> start(2) ; 1069 std::vector<StdSize> count(2) ; 1070 if (domain->isEmpty()) 1071 { 1072 start[0]=0 ; start[1]=0 ; 1073 count[0]=0 ; count[1]=0 ; 1074 } 1075 else 1076 { 1077 start[1]=domain->zoom_ibegin_srv-domain->zoom_ibegin.getValue() ; start[0]=domain->zoom_jbegin_srv-domain->zoom_jbegin.getValue() ; 1078 count[1]=domain->zoom_ni_srv ; count[0]=domain->zoom_nj_srv ; 1079 } 1080 1081 SuperClassWriter::writeData(field_data2D, fieldid, isCollective, field->getNStep()-1,&start,&count); 1082 if (wtime) 1083 { 1084 SuperClassWriter::writeTimeAxisData(time_data, timeAxisId, isCollective, field->getNStep()-1,isRoot); 1085 SuperClassWriter::writeTimeAxisData(time_counter, string("time_counter"), isCollective, field->getNStep()-1,isRoot); 1086 SuperClassWriter::writeTimeAxisData(time_counter_bound, timeBoundId, isCollective, field->getNStep()-1, isRoot); 1087 SuperClassWriter::writeTimeAxisData(time_data_bound, timeAxisBoundId, isCollective, field->getNStep()-1, isRoot); 1088 } 1089 break; 1090 1091 } 1092 } 1093 } 1247 } 1094 1248 } 1095 1249 catch (CNetCdfException& e) … … 1103 1257 } 1104 1258 } 1259 1260 // //--------------------------------------------------------------- 1261 // 1262 // void CNc4DataOutput::writeFieldData_ (CField* field) 1263 // { 1264 // CContext* context = CContext::getCurrent() ; 1265 //// if (field->getRelFile()->isSyncTime()) SuperClassWriter::sync() ; 1266 // CContextServer* server=context->server ; 1267 // 1268 // CGrid* grid = field->grid ; 1269 // CDomain* domain = grid->domain ; 1270 // 1271 // if(SuperClass::type==MULTI_FILE || !isCollective) if (domain->isEmpty()) return; 1272 // 1273 // 1274 // StdString fieldid = (!field->name.isEmpty()) 1275 // ? field->name.getValue() 1276 // : field->getBaseFieldReference()->getId(); 1277 // 1278 // StdOStringStream oss; 1279 // string timeAxisId ; 1280 // if (field->foperation->timeType() == func::CFunctor::instant) timeAxisId="time_instant" ; 1281 // else if (field->foperation->timeType() == func::CFunctor::centered) timeAxisId="time_centered" ; 1282 // 1283 // StdString timeBoundId("time_counter_bounds"); 1284 // 1285 // StdString timeAxisBoundId; 1286 // if (field->foperation->timeType() == func::CFunctor::instant) timeAxisBoundId="time_instant_bounds" ; 1287 // else if (field->foperation->timeType() == func::CFunctor::centered) timeAxisBoundId="time_centered_bounds" ; 1288 // 1289 // CArray<double,1> time_data(1) ; 1290 // CArray<double,1> time_counter(1) ; 1291 // CArray<double,1> time_counter_bound(2); 1292 // CArray<double,1> time_data_bound(2); 1293 // 1294 // bool wtime = !(!field->operation.isEmpty() && (field->foperation->timeType() == func::CFunctor::once)); 1295 // 1296 // if (wtime) 1297 // { 1298 // time_counter(0)= (Time(*field->last_Write_srv) + Time(*field->lastlast_Write_srv)) / 2; 1299 // if (field->foperation->timeType() == func::CFunctor::instant) 1300 // time_data(0) = Time(*field->last_Write_srv); 1301 // else if (field->foperation->timeType() == func::CFunctor::centered) time_data(0) = time_counter(0); 1302 // 1303 // time_counter_bound(0) = Time(*field->lastlast_Write_srv); 1304 // time_counter_bound(1) = Time(*field->last_Write_srv); 1305 // if (field->foperation->timeType() == func::CFunctor::instant) 1306 // time_data_bound(0) = time_data_bound(1) = Time(*field->last_Write_srv); 1307 // else if (field->foperation->timeType() == func::CFunctor::centered) 1308 // { 1309 // time_data_bound(0) = time_counter_bound(0); 1310 // time_data_bound(1) = time_counter_bound(1); 1311 // } 1312 // } 1313 // 1314 // bool isRoot ; 1315 // if (server->intraCommRank==0) isRoot=true ; 1316 // else isRoot=false ; 1317 // 1318 // if (!field->scale_factor.isEmpty() || !field->add_offset.isEmpty()) 1319 // { 1320 // double scaleFactor=1. ; 1321 // double addOffset=0. ; 1322 // if (!field->scale_factor.isEmpty()) scaleFactor=field->scale_factor ; 1323 // if (!field->add_offset.isEmpty()) addOffset=field->add_offset ; 1324 // field->scaleFactorAddOffset(scaleFactor,addOffset) ; 1325 // } 1326 // 1327 // try 1328 // { 1329 // if (grid->hasAxis()) // 3D 1330 // { 1331 // CAxis* axis = grid->axis ; 1332 // CArray<double,3> field_data3D(domain->zoom_ni_srv,domain->zoom_nj_srv,axis->zoom_size) ; 1333 // if (!field->default_value.isEmpty()) field_data3D = field->default_value ; 1334 // 1335 // field->outputField(field_data3D); 1336 // 1337 // if (!field->prec.isEmpty() && field->prec==2) field_data3D=round(field_data3D) ; 1338 // 1339 // switch (SuperClass::type) 1340 // { 1341 // case (MULTI_FILE) : 1342 // { 1343 // SuperClassWriter::writeData(field_data3D, fieldid, isCollective, field->getNStep()-1); 1344 // if (wtime) 1345 // { 1346 // SuperClassWriter::writeData(time_data, timeAxisId, isCollective, field->getNStep()-1); 1347 // SuperClassWriter::writeData(time_counter, string("time_counter"), isCollective, field->getNStep()-1); 1348 // SuperClassWriter::writeData(time_counter_bound, timeBoundId, isCollective, field->getNStep()-1); 1349 // SuperClassWriter::writeData(time_data_bound, timeAxisBoundId, isCollective, field->getNStep()-1); 1350 // } 1351 // break ; 1352 // } 1353 // case (ONE_FILE) : 1354 // { 1355 // std::vector<StdSize> start(3) ; 1356 // std::vector<StdSize> count(3) ; 1357 // if (domain->isEmpty()) 1358 // { 1359 // start[0]=0 ; start[1]=0 ; start[2]=0 ; 1360 // count[0]=0 ; count[1]=0 ; start[2]=0 ; 1361 // } 1362 // else 1363 // { 1364 // // start[2]=domain->zoom_ibegin_loc.getValue()-domain->zoom_ibegin.getValue() ; start [1]=domain->zoom_jbegin_loc.getValue()-domain->zoom_jbegin.getValue() ; start[0]=0 ; 1365 // start[2]=domain->zoom_ibegin_srv-domain->zoom_ibegin.getValue() ; start [1]=domain->zoom_jbegin_srv-domain->zoom_jbegin.getValue() ; start[0]=0 ; 1366 // count[2]=domain->zoom_ni_srv ; count[1]=domain->zoom_nj_srv ; count[0] = axis->zoom_size.getValue(); 1367 // } 1368 // SuperClassWriter::writeData(field_data3D, fieldid, isCollective, field->getNStep()-1,&start,&count ); 1369 // if (wtime) 1370 // { 1371 // SuperClassWriter::writeTimeAxisData(time_data, timeAxisId, isCollective, field->getNStep()-1,isRoot ); 1372 // SuperClassWriter::writeTimeAxisData(time_counter, string("time_counter"), isCollective, field->getNStep()-1,isRoot ); 1373 // SuperClassWriter::writeTimeAxisData(time_counter_bound, timeBoundId, isCollective, field->getNStep()-1, isRoot ); 1374 // SuperClassWriter::writeTimeAxisData(time_data_bound, timeAxisBoundId, isCollective, field->getNStep()-1, isRoot); 1375 // } 1376 // break; 1377 // } 1378 // } 1379 // 1380 // } 1381 // else // 2D 1382 // { 1383 // CArray<double,2> field_data2D(domain->zoom_ni_srv,domain->zoom_nj_srv) ; 1384 // if (!field->default_value.isEmpty()) field_data2D = field->default_value ; 1385 // field->outputField(field_data2D); 1386 // if (!field->prec.isEmpty() && field->prec==2) field_data2D=round(field_data2D) ; 1387 // switch (SuperClass::type) 1388 // { 1389 // case (MULTI_FILE) : 1390 // { 1391 // SuperClassWriter::writeData(field_data2D, fieldid, isCollective, field->getNStep()-1); 1392 // if (wtime) 1393 // { 1394 // SuperClassWriter::writeData(time_data, timeAxisId, isCollective, field->getNStep()-1); 1395 // SuperClassWriter::writeData(time_counter, string("time_counter"), isCollective, field->getNStep()-1); 1396 // SuperClassWriter::writeData(time_counter_bound, timeBoundId, isCollective, field->getNStep()-1); 1397 // SuperClassWriter::writeData(time_data_bound, timeAxisBoundId, isCollective, field->getNStep()-1); 1398 // } 1399 // break; 1400 // } 1401 // case (ONE_FILE) : 1402 // { 1403 // std::vector<StdSize> start(2) ; 1404 // std::vector<StdSize> count(2) ; 1405 // if (domain->isEmpty()) 1406 // { 1407 // start[0]=0 ; start[1]=0 ; 1408 // count[0]=0 ; count[1]=0 ; 1409 // } 1410 // else 1411 // { 1412 // start[1]=domain->zoom_ibegin_srv-domain->zoom_ibegin.getValue() ; start[0]=domain->zoom_jbegin_srv-domain->zoom_jbegin.getValue() ; 1413 // count[1]=domain->zoom_ni_srv ; count[0]=domain->zoom_nj_srv ; 1414 // } 1415 // 1416 // SuperClassWriter::writeData(field_data2D, fieldid, isCollective, field->getNStep()-1,&start,&count); 1417 // if (wtime) 1418 // { 1419 // SuperClassWriter::writeTimeAxisData(time_data, timeAxisId, isCollective, field->getNStep()-1,isRoot); 1420 // SuperClassWriter::writeTimeAxisData(time_counter, string("time_counter"), isCollective, field->getNStep()-1,isRoot); 1421 // SuperClassWriter::writeTimeAxisData(time_counter_bound, timeBoundId, isCollective, field->getNStep()-1, isRoot); 1422 // SuperClassWriter::writeTimeAxisData(time_data_bound, timeAxisBoundId, isCollective, field->getNStep()-1, isRoot); 1423 // } 1424 // break; 1425 // 1426 // } 1427 // } 1428 // } 1429 // } 1430 // catch (CNetCdfException& e) 1431 // { 1432 // StdString msg("On writing field data: "); 1433 // msg.append(fieldid); msg.append("\n"); 1434 // msg.append("In the context : "); 1435 // msg.append(context->getId()); msg.append("\n"); 1436 // msg.append(e.what()); 1437 // ERROR("CNc4DataOutput::writeFieldData_ (CField* field)", << msg); 1438 // } 1439 // } 1105 1440 1106 1441 //---------------------------------------------------------------
Note: See TracChangeset
for help on using the changeset viewer.