Ignore:
Timestamp:
07/09/15 14:05:43 (9 years ago)
Author:
mhnguyen
Message:

Correcting value written on an distributed axis

+) Seperate writing value on axis in multiple file and one file case

Test
+) On curie
+) test_complet and test_client pass

File:
1 edited

Legend:

Unmodified
Added
Removed
  • XIOS/trunk/src/output/nc4_data_output.cpp

    r631 r633  
    603603        int zoom_size_srv  = axis->zoom_size_srv; 
    604604        int zoom_begin_srv = axis->zoom_begin_srv; 
    605         StdSize zoom_size  = (MULTI_FILE == SuperClass::type) ? zoom_size_srv 
     605        int zoom_size  = (MULTI_FILE == SuperClass::type) ? zoom_size_srv 
    606606                                                              : axis->global_zoom_size; 
    607         StdSize zoom_begin = (MULTI_FILE == SuperClass::type) ? zoom_begin_srv 
     607        int zoom_begin = (MULTI_FILE == SuperClass::type) ? zoom_begin_srv 
    608608                                                              : axis->global_zoom_begin; 
    609609 
     610        if ((0 == zoom_size_srv) && (MULTI_FILE == SuperClass::type)) return; 
    610611 
    611612        std::vector<StdString> dims; 
     
    615616          SuperClassWriter::addDimension(axisid, zoom_size); 
    616617          dims.push_back(axisid); 
    617  
     618          SuperClassWriter::addVariable(axisid, NC_FLOAT, dims); 
     619 
     620          if (!axis->name.isEmpty()) 
     621            SuperClassWriter::addAttribute("name", axis->name.getValue(), &axisid); 
     622 
     623          if (!axis->standard_name.isEmpty()) 
     624            SuperClassWriter::addAttribute("standard_name", axis->standard_name.getValue(), &axisid); 
     625 
     626          if (!axis->long_name.isEmpty()) 
     627            SuperClassWriter::addAttribute("long_name", axis->long_name.getValue(), &axisid); 
     628 
     629          if (!axis->unit.isEmpty()) 
     630            SuperClassWriter::addAttribute("units", axis->unit.getValue(), &axisid); 
     631 
     632          if (!axis->positive.isEmpty()) 
     633          { 
     634            SuperClassWriter::addAttribute("axis", string("Z"), &axisid); 
     635            SuperClassWriter::addAttribute("positive", 
     636                                           (axis->positive == CAxis::positive_attr::up) ? string("up") : string("down"), 
     637                                           &axisid); 
     638          } 
     639 
     640          StdString axisBoundsId = axisid + "_bounds"; 
     641          if (!axis->bounds.isEmpty()) 
     642          { 
     643            dims.push_back("axis_nbounds"); 
     644            SuperClassWriter::addVariable(axisBoundsId, NC_FLOAT, dims); 
     645            SuperClassWriter::addAttribute("bounds", axisBoundsId, &axisid); 
     646          } 
     647 
     648          SuperClassWriter::definition_end(); 
    618649          switch (SuperClass::type) 
    619650          { 
    620651            case MULTI_FILE: 
     652            { 
     653              CArray<double,1> axis_value(zoom_size_srv); 
     654              for (int i = 0; i < zoom_size_srv; i++) axis_value(i) = axis->value_srv(i); 
     655              SuperClassWriter::writeData(axis_value, axisid, isCollective, 0); 
     656 
     657              if (!axis->bounds.isEmpty()) 
     658              { 
     659                CArray<double,2> axisBounds(2, zoom_size_srv); 
     660                for (int i = 0; i < zoom_size_srv; i++) 
     661                { 
     662                  axisBounds(0, i) = axis->bound_srv(i, 0); 
     663                  axisBounds(1, i) = axis->bound_srv(i, 1); 
     664                } 
     665                SuperClassWriter::writeData(axisBounds, axisBoundsId, isCollective, 0); 
     666              } 
     667 
     668              SuperClassWriter::definition_start(); 
     669 
     670              break; 
     671            } 
    621672            case ONE_FILE: 
    622673            { 
    623               SuperClassWriter::addVariable(axisid, NC_FLOAT, dims); 
    624  
    625               if (!axis->name.isEmpty()) 
    626                 SuperClassWriter::addAttribute("name", axis->name.getValue(), &axisid); 
    627  
    628               if (!axis->standard_name.isEmpty()) 
    629                 SuperClassWriter::addAttribute("standard_name", axis->standard_name.getValue(), &axisid); 
    630  
    631               if (!axis->long_name.isEmpty()) 
    632                 SuperClassWriter::addAttribute("long_name", axis->long_name.getValue(), &axisid); 
    633  
    634               if (!axis->unit.isEmpty()) 
    635                 SuperClassWriter::addAttribute("units", axis->unit.getValue(), &axisid); 
    636  
    637               if (!axis->positive.isEmpty()) 
    638               { 
    639                 SuperClassWriter::addAttribute("axis", string("Z"), &axisid); 
    640                 SuperClassWriter::addAttribute("positive", 
    641                                                (axis->positive == CAxis::positive_attr::up) ? string("up") : string("down"), 
    642                                                &axisid); 
    643               } 
    644  
    645               StdString axisBoundsId = axisid + "_bounds"; 
     674              CArray<double,1> axis_value(zoom_size_srv); 
     675              axis_value = axis->value_srv; 
     676 
     677              std::vector<StdSize> start(1) ; 
     678              std::vector<StdSize> count(1) ; 
     679              start[0] = zoom_begin_srv-axis->global_zoom_begin; 
     680              count[0] = zoom_size_srv; 
     681              SuperClassWriter::writeData(axis_value, axisid, isCollective, 0, &start, &count); 
     682 
    646683              if (!axis->bounds.isEmpty()) 
    647684              { 
    648                 dims.push_back("axis_nbounds"); 
    649                 SuperClassWriter::addVariable(axisBoundsId, NC_FLOAT, dims); 
    650                 SuperClassWriter::addAttribute("bounds", axisBoundsId, &axisid); 
    651               } 
    652  
    653               SuperClassWriter::definition_end(); 
    654  
    655               CArray<double,1> axis_value(zoom_size); 
    656               for (int i = 0; i < zoom_size_srv; i++) axis_value(i) = axis->value(i + zoom_begin_srv); 
    657               SuperClassWriter::writeData(axis_value, axisid, isCollective, 0); 
    658  
    659               if (!axis->bounds.isEmpty()) 
    660               { 
    661                 CArray<double,2> axisBounds(2, zoom_size); 
    662                 for (int i = 0; i < zoom_size_srv; i++) 
     685                CArray<double,2> axisBounds(2, zoom_size_srv); 
     686                for (int i = 0; i < zoom_size_srv; ++i) 
    663687                { 
    664                   axisBounds(0, i) = axis->bounds(i + zoom_begin_srv, 0); 
    665                   axisBounds(1, i) = axis->bounds(i + zoom_begin_srv, 1); 
     688                  axisBounds(0, i+zoom_begin_srv) = axis->bound_srv(i, 0); 
     689                  axisBounds(1, i+zoom_begin_srv) = axis->bound_srv(i, 1); 
    666690                } 
    667                 SuperClassWriter::writeData(axisBounds, axisBoundsId, isCollective, 0); 
     691                SuperClassWriter::writeData(axisBounds, axisBoundsId, isCollective, 0, &start, &count); 
    668692              } 
    669693 
     
    940964      } 
    941965 
    942  
    943 //      void CNc4DataOutput::writeField_(CField* field) 
    944 //      { 
    945 //         CContext* context = CContext::getCurrent() ; 
    946 //         CContextServer* server=context->server ; 
    947 // 
    948 //         std::vector<StdString> dims, coodinates; 
    949 //         CGrid* grid = field->grid; 
    950 //         CDomain* domain = grid->domain; 
    951 // 
    952 //         if (domain->isEmpty()) 
    953 //           if (SuperClass::type==MULTI_FILE) return ; 
    954 // 
    955 //         StdString timeid    = StdString("time_counter"); 
    956 //         StdString domid     = (!domain->name.isEmpty()) 
    957 //                             ? domain->name.getValue() : domain->getId(); 
    958 //         StdString appendDomid  = (singleDomain) ? "" : "_"+domid ; 
    959 // 
    960 ////         bool isCurvilinear = domain->isCurvilinear ; 
    961 ////         bool isCurvilinear = (domain->type == CDomain::type_attr::curvilinear) ; 
    962 // 
    963 //         StdString dimXid,dimYid ; 
    964 // 
    965 //         switch (domain->type) 
    966 //         { 
    967 //           case CDomain::type_attr::curvilinear : 
    968 //             dimXid     = StdString("x").append(appendDomid); 
    969 //             dimYid     = StdString("y").append(appendDomid); 
    970 //             break ; 
    971 //           case CDomain::type_attr::regular : 
    972 //             dimXid     = StdString("lon").append(appendDomid); 
    973 //             dimYid     = StdString("lat").append(appendDomid); 
    974 //             break ; 
    975 //           case CDomain::type_attr::unstructured : 
    976 //             dimXid     = StdString("cell").append(appendDomid); 
    977 //             break ; 
    978 //        } 
    979 // 
    980 ///* 
    981 //         StdString lonid_loc = (server->intraCommSize > 1) 
    982 //                             ? StdString("lon").append(appendDomid).append("_local") 
    983 //                             : lonid; 
    984 //         StdString latid_loc = (server->intraCommSize > 1) 
    985 //                             ? StdString("lat").append(appendDomid).append("_local") 
    986 //                             : latid; 
    987 //*/ 
    988 //         StdString fieldid   = (!field->name.isEmpty()) 
    989 //                             ? field->name.getValue() : field->getBaseFieldReference()->getId(); 
    990 // 
    991 ////         unsigned int ssize = domain->zoom_ni_loc.getValue() * domain->zoom_nj_loc.getValue(); 
    992 ////         bool isCurvilinear = (domain->lonvalue.getValue()->size() == ssize); 
    993 ////          bool isCurvilinear = domain->isCurvilinear ; 
    994 // 
    995 //         nc_type type ; 
    996 //         if (field->prec.isEmpty()) type =  NC_FLOAT ; 
    997 //         else 
    998 //         { 
    999 //           if (field->prec==2) type = NC_SHORT ; 
    1000 //           else if (field->prec==4)  type =  NC_FLOAT ; 
    1001 //           else if (field->prec==8)   type =  NC_DOUBLE ; 
    1002 //         } 
    1003 // 
    1004 //         bool wtime   = !(!field->operation.isEmpty() && field->foperation->timeType() == func::CFunctor::once); 
    1005 // 
    1006 //         if (wtime) 
    1007 //         { 
    1008 // 
    1009 //            //StdOStringStream oss; 
    1010 //           // oss << "time_" << field->operation.getValue() 
    1011 //           //     << "_" << field->getRelFile()->output_freq.getValue(); 
    1012 //          //oss 
    1013 //            if (field->foperation->timeType() == func::CFunctor::instant) coodinates.push_back(string("time_instant")); 
    1014 //            else if (field->foperation->timeType() == func::CFunctor::centered) coodinates.push_back(string("time_centered")); 
    1015 //            dims.push_back(timeid); 
    1016 //         } 
    1017 // 
    1018 //         std::vector<StdString> axisList = grid->getAxisList(); 
    1019 //         if (!axisList.empty()) 
    1020 //         { 
    1021 //           std::vector<StdString>::const_iterator itAxis = axisList.begin(), iteAxis = axisList.end(); 
    1022 //           for (; itAxis != iteAxis; ++itAxis) 
    1023 //           { 
    1024 //             CAxis* axis = CAxis::get(*itAxis); 
    1025 //             StdString axisid = (!axis->name.isEmpty()) 
    1026 //                                ? axis->name.getValue() : axis->getId(); 
    1027 // 
    1028 //             dims.push_back(axisid); 
    1029 //             coodinates.push_back(axisid); 
    1030 //           } 
    1031 //         } 
    1032 // 
    1033 //         switch (domain->type) 
    1034 //         { 
    1035 //           case CDomain::type_attr::curvilinear : 
    1036 //             coodinates.push_back(StdString("nav_lon").append(appendDomid)); 
    1037 //             coodinates.push_back(StdString("nav_lat").append(appendDomid)); 
    1038 //             break; 
    1039 //           case CDomain::type_attr::regular : 
    1040 //           case CDomain::type_attr::unstructured : 
    1041 //            coodinates.push_back(StdString("lon").append(appendDomid)); 
    1042 //            coodinates.push_back(StdString("lat").append(appendDomid)); 
    1043 //             break; 
    1044 //         } 
    1045 // 
    1046 //         if ( domain->type == CDomain::type_attr::curvilinear || domain->type == CDomain::type_attr::regular)dims.push_back(dimYid); 
    1047 //         dims.push_back(dimXid); 
    1048 // 
    1049 //         try 
    1050 //         { 
    1051 //           SuperClassWriter::addVariable(fieldid, type, dims); 
    1052 // 
    1053 //           if (!field->standard_name.isEmpty()) 
    1054 //              SuperClassWriter::addAttribute 
    1055 //                 ("standard_name",  field->standard_name.getValue(), &fieldid); 
    1056 // 
    1057 //           if (!field->long_name.isEmpty()) 
    1058 //              SuperClassWriter::addAttribute 
    1059 //                 ("long_name", field->long_name.getValue(), &fieldid); 
    1060 // 
    1061 //           if (!field->unit.isEmpty()) 
    1062 //              SuperClassWriter::addAttribute 
    1063 //                 ("units", field->unit.getValue(), &fieldid); 
    1064 // 
    1065 //            if (!field->valid_min.isEmpty()) 
    1066 //              SuperClassWriter::addAttribute 
    1067 //                 ("valid_min", field->valid_min.getValue(), &fieldid); 
    1068 // 
    1069 //           if (!field->valid_max.isEmpty()) 
    1070 //              SuperClassWriter::addAttribute 
    1071 //                 ("valid_max", field->valid_max.getValue(), &fieldid); 
    1072 // 
    1073 //            if (!field->scale_factor.isEmpty()) 
    1074 //              SuperClassWriter::addAttribute 
    1075 //                 ("scale_factor", field->scale_factor.getValue(), &fieldid); 
    1076 // 
    1077 //             if (!field->add_offset.isEmpty()) 
    1078 //              SuperClassWriter::addAttribute 
    1079 //                 ("add_offset", field->add_offset.getValue(), &fieldid); 
    1080 // 
    1081 //           SuperClassWriter::addAttribute 
    1082 //                 ("online_operation", field->operation.getValue(), &fieldid); 
    1083 // 
    1084 //          // write child variables as attributes 
    1085 // 
    1086 // 
    1087 //           vector<CVariable*> listVars = field->getAllVariables() ; 
    1088 //           for (vector<CVariable*>::iterator it = listVars.begin() ;it != listVars.end(); it++) writeAttribute_(*it, fieldid) ; 
    1089 // 
    1090 // 
    1091 //           if (wtime) 
    1092 //           { 
    1093 //              CDuration duration = field->freq_op.getValue(); 
    1094 //              duration.solveTimeStep(*(context->calendar)); 
    1095 //              SuperClassWriter::addAttribute("interval_operation", duration.toStringUDUnits(), &fieldid); 
    1096 // 
    1097 //              duration = field->getRelFile()->output_freq.getValue(); 
    1098 //              duration.solveTimeStep(*(context->calendar)); 
    1099 //              SuperClassWriter::addAttribute("interval_write", duration.toStringUDUnits(), &fieldid); 
    1100 //           } 
    1101 // 
    1102 //           if (!field->default_value.isEmpty()) 
    1103 //           { 
    1104 //              double default_value = field->default_value.getValue(); 
    1105 //              float fdefault_value = (float)default_value; 
    1106 //              if (type == NC_DOUBLE) 
    1107 //                 SuperClassWriter::setDefaultValue(fieldid, &default_value); 
    1108 //              else 
    1109 //                 SuperClassWriter::setDefaultValue(fieldid, &fdefault_value); 
    1110 //           } 
    1111 //           else 
    1112 //              SuperClassWriter::setDefaultValue(fieldid, (double*)NULL); 
    1113 // 
    1114 //           {  // Ecriture des coordonnées 
    1115 // 
    1116 //              StdString coordstr; //boost::algorithm::join(coodinates, " ") 
    1117 //              std::vector<StdString>::iterator 
    1118 //                 itc = coodinates.begin(), endc = coodinates.end(); 
    1119 // 
    1120 //              for (; itc!= endc; itc++) 
    1121 //              { 
    1122 //                 StdString & coord = *itc; 
    1123 //                 if (itc+1 != endc) 
    1124 //                       coordstr.append(coord).append(" "); 
    1125 //                 else  coordstr.append(coord); 
    1126 //              } 
    1127 // 
    1128 //              SuperClassWriter::addAttribute("coordinates", coordstr, &fieldid); 
    1129 // 
    1130 //           } 
    1131 //         } 
    1132 //         catch (CNetCdfException& e) 
    1133 //         { 
    1134 //           StdString msg("On writing field : "); 
    1135 //           msg.append(fieldid); msg.append("\n"); 
    1136 //           msg.append("In the context : "); 
    1137 //           msg.append(context->getId()); msg.append("\n"); 
    1138 //           msg.append(e.what()); 
    1139 //           ERROR("CNc4DataOutput::writeField_(CField* field)", << msg); 
    1140 //         } 
    1141 //      } 
    1142  
    1143966      //-------------------------------------------------------------- 
    1144967 
     
    14221245      } 
    14231246 
    1424 //      //--------------------------------------------------------------- 
    1425 // 
    1426 //      void CNc4DataOutput::writeFieldData_ (CField*  field) 
    1427 //      { 
    1428 //         CContext* context = CContext::getCurrent() ; 
    1429 ////          if (field->getRelFile()->isSyncTime()) SuperClassWriter::sync() ; 
    1430 //         CContextServer* server=context->server ; 
    1431 // 
    1432 //         CGrid* grid = field->grid ; 
    1433 //         CDomain* domain = grid->domain ; 
    1434 // 
    1435 //         if(SuperClass::type==MULTI_FILE || !isCollective) if (domain->isEmpty()) return; 
    1436 // 
    1437 // 
    1438 //         StdString fieldid   = (!field->name.isEmpty()) 
    1439 //                             ? field->name.getValue() 
    1440 //                             : field->getBaseFieldReference()->getId(); 
    1441 // 
    1442 //         StdOStringStream oss; 
    1443 //         string timeAxisId ; 
    1444 //         if (field->foperation->timeType() == func::CFunctor::instant)  timeAxisId="time_instant" ; 
    1445 //         else if (field->foperation->timeType() == func::CFunctor::centered)  timeAxisId="time_centered" ; 
    1446 // 
    1447 //         StdString timeBoundId("time_counter_bounds"); 
    1448 // 
    1449 //         StdString timeAxisBoundId; 
    1450 //         if (field->foperation->timeType() == func::CFunctor::instant)  timeAxisBoundId="time_instant_bounds" ; 
    1451 //         else if (field->foperation->timeType() == func::CFunctor::centered)  timeAxisBoundId="time_centered_bounds" ; 
    1452 // 
    1453 //         CArray<double,1> time_data(1) ; 
    1454 //         CArray<double,1> time_counter(1) ; 
    1455 //         CArray<double,1> time_counter_bound(2); 
    1456 //         CArray<double,1> time_data_bound(2); 
    1457 // 
    1458 //        bool wtime   = !(!field->operation.isEmpty() && (field->foperation->timeType() == func::CFunctor::once)); 
    1459 // 
    1460 //        if (wtime) 
    1461 //        { 
    1462 //          time_counter(0)= (Time(*field->last_Write_srv) + Time(*field->lastlast_Write_srv)) / 2; 
    1463 //          if (field->foperation->timeType() == func::CFunctor::instant) 
    1464 //            time_data(0) = Time(*field->last_Write_srv); 
    1465 //          else if (field->foperation->timeType() == func::CFunctor::centered) time_data(0) = time_counter(0); 
    1466 // 
    1467 //          time_counter_bound(0) = Time(*field->lastlast_Write_srv); 
    1468 //          time_counter_bound(1) = Time(*field->last_Write_srv); 
    1469 //          if (field->foperation->timeType() == func::CFunctor::instant) 
    1470 //            time_data_bound(0) = time_data_bound(1) = Time(*field->last_Write_srv); 
    1471 //          else if (field->foperation->timeType() == func::CFunctor::centered) 
    1472 //          { 
    1473 //            time_data_bound(0) = time_counter_bound(0); 
    1474 //            time_data_bound(1) = time_counter_bound(1); 
    1475 //          } 
    1476 //         } 
    1477 // 
    1478 //         bool isRoot ; 
    1479 //         if (server->intraCommRank==0) isRoot=true ; 
    1480 //         else isRoot=false ; 
    1481 // 
    1482 //         if (!field->scale_factor.isEmpty() || !field->add_offset.isEmpty()) 
    1483 //         { 
    1484 //           double scaleFactor=1. ; 
    1485 //           double addOffset=0. ; 
    1486 //           if (!field->scale_factor.isEmpty()) scaleFactor=field->scale_factor ; 
    1487 //           if (!field->add_offset.isEmpty()) addOffset=field->add_offset ; 
    1488 //           field->scaleFactorAddOffset(scaleFactor,addOffset) ; 
    1489 //         } 
    1490 // 
    1491 //         try 
    1492 //         { 
    1493 //           if (grid->hasAxis()) // 3D 
    1494 //           { 
    1495 //              CAxis* axis = grid->axis ; 
    1496 //              CArray<double,3> field_data3D(domain->zoom_ni_srv,domain->zoom_nj_srv,axis->zoom_size) ; 
    1497 //              if (!field->default_value.isEmpty()) field_data3D = field->default_value ; 
    1498 // 
    1499 //              field->outputField(field_data3D); 
    1500 // 
    1501 //              if (!field->prec.isEmpty() && field->prec==2) field_data3D=round(field_data3D) ; 
    1502 // 
    1503 //              switch (SuperClass::type) 
    1504 //             { 
    1505 //                case (MULTI_FILE) : 
    1506 //                { 
    1507 //                   SuperClassWriter::writeData(field_data3D, fieldid, isCollective, field->getNStep()-1); 
    1508 //                   if (wtime) 
    1509 //                   { 
    1510 //                     SuperClassWriter::writeData(time_data, timeAxisId, isCollective, field->getNStep()-1); 
    1511 //                     SuperClassWriter::writeData(time_counter, string("time_counter"), isCollective, field->getNStep()-1); 
    1512 //                     SuperClassWriter::writeData(time_counter_bound, timeBoundId, isCollective, field->getNStep()-1); 
    1513 //                     SuperClassWriter::writeData(time_data_bound, timeAxisBoundId, isCollective, field->getNStep()-1); 
    1514 //                   } 
    1515 //                   break ; 
    1516 //                } 
    1517 //                case (ONE_FILE) : 
    1518 //                { 
    1519 //                   std::vector<StdSize> start(3) ; 
    1520 //                   std::vector<StdSize> count(3) ; 
    1521 //                   if (domain->isEmpty()) 
    1522 //                   { 
    1523 //                     start[0]=0 ; start[1]=0 ; start[2]=0 ; 
    1524 //                     count[0]=0 ; count[1]=0 ; start[2]=0 ; 
    1525 //                   } 
    1526 //                   else 
    1527 //                   { 
    1528 //  //                 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 ; 
    1529 //                     start[2]=domain->zoom_ibegin_srv-domain->zoom_ibegin.getValue() ; start [1]=domain->zoom_jbegin_srv-domain->zoom_jbegin.getValue() ; start[0]=0 ; 
    1530 //                     count[2]=domain->zoom_ni_srv ; count[1]=domain->zoom_nj_srv ; count[0] = axis->zoom_size.getValue(); 
    1531 //                   } 
    1532 //                   SuperClassWriter::writeData(field_data3D, fieldid, isCollective, field->getNStep()-1,&start,&count ); 
    1533 //                   if (wtime) 
    1534 //                   { 
    1535 //                     SuperClassWriter::writeTimeAxisData(time_data, timeAxisId, isCollective, field->getNStep()-1,isRoot ); 
    1536 //                     SuperClassWriter::writeTimeAxisData(time_counter, string("time_counter"), isCollective, field->getNStep()-1,isRoot ); 
    1537 //                     SuperClassWriter::writeTimeAxisData(time_counter_bound, timeBoundId, isCollective, field->getNStep()-1, isRoot ); 
    1538 //                     SuperClassWriter::writeTimeAxisData(time_data_bound, timeAxisBoundId, isCollective, field->getNStep()-1, isRoot); 
    1539 //                   } 
    1540 //                   break; 
    1541 //                } 
    1542 //              } 
    1543 // 
    1544 //           } 
    1545 //           else // 2D 
    1546 //           { 
    1547 //              CArray<double,2> field_data2D(domain->zoom_ni_srv,domain->zoom_nj_srv) ; 
    1548 //              if (!field->default_value.isEmpty()) field_data2D = field->default_value ; 
    1549 //              field->outputField(field_data2D); 
    1550 //              if (!field->prec.isEmpty() && field->prec==2) field_data2D=round(field_data2D) ; 
    1551 //              switch (SuperClass::type) 
    1552 //              { 
    1553 //                case (MULTI_FILE) : 
    1554 //                { 
    1555 //                  SuperClassWriter::writeData(field_data2D, fieldid, isCollective, field->getNStep()-1); 
    1556 //                  if (wtime) 
    1557 //                  { 
    1558 //                    SuperClassWriter::writeData(time_data, timeAxisId, isCollective, field->getNStep()-1); 
    1559 //                    SuperClassWriter::writeData(time_counter, string("time_counter"), isCollective, field->getNStep()-1); 
    1560 //                    SuperClassWriter::writeData(time_counter_bound, timeBoundId, isCollective, field->getNStep()-1); 
    1561 //                    SuperClassWriter::writeData(time_data_bound, timeAxisBoundId, isCollective, field->getNStep()-1); 
    1562 //                  } 
    1563 //                  break; 
    1564 //                } 
    1565 //                case (ONE_FILE) : 
    1566 //                { 
    1567 //                   std::vector<StdSize> start(2) ; 
    1568 //                   std::vector<StdSize> count(2) ; 
    1569 //                   if (domain->isEmpty()) 
    1570 //                   { 
    1571 //                     start[0]=0 ; start[1]=0 ; 
    1572 //                     count[0]=0 ; count[1]=0 ; 
    1573 //                   } 
    1574 //                   else 
    1575 //                   { 
    1576 //                     start[1]=domain->zoom_ibegin_srv-domain->zoom_ibegin.getValue() ; start[0]=domain->zoom_jbegin_srv-domain->zoom_jbegin.getValue() ; 
    1577 //                     count[1]=domain->zoom_ni_srv ; count[0]=domain->zoom_nj_srv ; 
    1578 //                   } 
    1579 // 
    1580 //                   SuperClassWriter::writeData(field_data2D, fieldid, isCollective, field->getNStep()-1,&start,&count); 
    1581 //                   if (wtime) 
    1582 //                   { 
    1583 //                     SuperClassWriter::writeTimeAxisData(time_data, timeAxisId, isCollective, field->getNStep()-1,isRoot); 
    1584 //                     SuperClassWriter::writeTimeAxisData(time_counter, string("time_counter"), isCollective, field->getNStep()-1,isRoot); 
    1585 //                     SuperClassWriter::writeTimeAxisData(time_counter_bound, timeBoundId, isCollective, field->getNStep()-1, isRoot); 
    1586 //                     SuperClassWriter::writeTimeAxisData(time_data_bound, timeAxisBoundId, isCollective, field->getNStep()-1, isRoot); 
    1587 //                   } 
    1588 //                   break; 
    1589 // 
    1590 //                } 
    1591 //              } 
    1592 //           } 
    1593 //         } 
    1594 //         catch (CNetCdfException& e) 
    1595 //         { 
    1596 //           StdString msg("On writing field data: "); 
    1597 //           msg.append(fieldid); msg.append("\n"); 
    1598 //           msg.append("In the context : "); 
    1599 //           msg.append(context->getId()); msg.append("\n"); 
    1600 //           msg.append(e.what()); 
    1601 //           ERROR("CNc4DataOutput::writeFieldData_ (CField*  field)", << msg); 
    1602 //         } 
    1603 //      } 
    1604  
    16051247      //--------------------------------------------------------------- 
    16061248 
Note: See TracChangeset for help on using the changeset viewer.