/[escript]/branches/diaplayground/ripley/src/Brick.cpp
ViewVC logotype

Diff of /branches/diaplayground/ripley/src/Brick.cpp

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 4495 by caltinay, Fri Jul 5 02:19:47 2013 UTC revision 4529 by caltinay, Fri Oct 25 01:23:27 2013 UTC
# Line 408  void Brick::readBinaryGridImpl(escript:: Line 408  void Brick::readBinaryGridImpl(escript::
408                                 const vector<int>& multiplier,                                 const vector<int>& multiplier,
409                                 int byteOrder) const                                 int byteOrder) const
410  {  {
     if (byteOrder != BYTEORDER_NATIVE)  
         throw RipleyException("readBinaryGrid(): only native byte order supported at the moment.");  
   
411      // check destination function space      // check destination function space
412      int myN0, myN1, myN2;      int myN0, myN1, myN2;
413      if (out.getFunctionSpace().getTypeCode() == Nodes) {      if (out.getFunctionSpace().getTypeCode() == Nodes) {
# Line 478  void Brick::readBinaryGridImpl(escript:: Line 475  void Brick::readBinaryGridImpl(escript::
475      vector<ValueType> values(num0*numComp);      vector<ValueType> values(num0*numComp);
476      const int dpp = out.getNumDataPointsPerSample();      const int dpp = out.getNumDataPointsPerSample();
477    
478      for (index_t z=0; z<num2; z++) {      for (int z=0; z<num2; z++) {
479          for (index_t y=0; y<num1; y++) {          for (int y=0; y<num1; y++) {
480              const int fileofs = numComp*(idx0+(idx1+y)*numValues[0]+(idx2+z)*numValues[0]*numValues[1]);              const int fileofs = numComp*(idx0+(idx1+y)*numValues[0]+(idx2+z)*numValues[0]*numValues[1]);
481              f.seekg(fileofs*sizeof(ValueType));              f.seekg(fileofs*sizeof(ValueType));
482              f.read((char*)&values[0], num0*numComp*sizeof(ValueType));              f.read((char*)&values[0], num0*numComp*sizeof(ValueType));
483    
484              for (index_t x=0; x<num0; x++) {              for (int x=0; x<num0; x++) {
485                  const int baseIndex = first0+x*multiplier[0]                  const int baseIndex = first0+x*multiplier[0]
486                                          +(first1+y*multiplier[1])*myN0                                          +(first1+y*multiplier[1])*myN0
487                                          +(first2+z*multiplier[2])*myN0*myN1;                                          +(first2+z*multiplier[2])*myN0*myN1;
488                  for (index_t m2=0; m2<multiplier[2]; m2++) {                  for (int m2=0; m2<multiplier[2]; m2++) {
489                      for (index_t m1=0; m1<multiplier[1]; m1++) {                      for (int m1=0; m1<multiplier[1]; m1++) {
490                          for (index_t m0=0; m0<multiplier[0]; m0++) {                          for (int m0=0; m0<multiplier[0]; m0++) {
491                              const int dataIndex = baseIndex+m0                              const int dataIndex = baseIndex+m0
492                                             +m1*myN0                                             +m1*myN0
493                                             +m2*myN0*myN1;                                             +m2*myN0*myN1;
494                              double* dest = out.getSampleDataRW(dataIndex);                              double* dest = out.getSampleDataRW(dataIndex);
495                              for (index_t c=0; c<numComp; c++) {                              for (int c=0; c<numComp; c++) {
496                                  if (!std::isnan(values[x*numComp+c])) {                                  ValueType val = values[x*numComp+c];
497                                      for (index_t q=0; q<dpp; q++) {  
498                                          *dest++ = static_cast<double>(values[x*numComp+c]);                                  if (byteOrder != BYTEORDER_NATIVE) {
499                                        char* cval = reinterpret_cast<char*>(&val);
500                                        // this will alter val!!
501                                        byte_swap32(cval);
502                                    }
503                                    if (!std::isnan(val)) {
504                                        for (int q=0; q<dpp; q++) {
505                                            *dest++ = static_cast<double>(val);
506                                      }                                      }
507                                  }                                  }
508                              }                              }

Legend:
Removed from v.4495  
changed lines
  Added in v.4529

  ViewVC Help
Powered by ViewVC 1.1.26