/[escript]/trunk/escript/src/DataArrayView.h
ViewVC logotype

Diff of /trunk/escript/src/DataArrayView.h

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

revision 800 by gross, Tue Aug 8 11:23:18 2006 UTC revision 804 by gross, Thu Aug 10 01:12:16 2006 UTC
# Line 1182  class DataArrayView { Line 1182  class DataArrayView {
1182    
1183    /**    /**
1184       \brief       \brief
1185       swaps the components axis_offset and axis_offset+1       swaps the components axis0 and axis1.
1186    
1187       \param in - Input - matrix       \param in - Input - matrix
1188       \param inOffset - Input - offset into in       \param inOffset - Input - offset into in
1189       \param ev - Output - The nonsymmetric matrix       \param ev - Output - The nonsymmetric matrix
1190       \param inOffset - Input - offset into ev       \param inOffset - Input - offset into ev
1191         \param axis0 - axis index
1192         \param axis1 - axis index
1193    */    */
1194    ESCRIPT_DLL_API    ESCRIPT_DLL_API
1195    static    static
1196    inline    inline
1197    void    void
1198    swap(DataArrayView& in,    swapaxes(DataArrayView& in,
1199         ValueType::size_type inOffset,             ValueType::size_type inOffset,
1200         DataArrayView& ev,             DataArrayView& ev,
1201         ValueType::size_type evOffset,             ValueType::size_type evOffset,
1202         int axis_offset)             int axis0, int axis1)
1203    {    {
1204     if (in.getRank() == 4) {     if (in.getRank() == 4) {
1205       int s0=ev.getShape()[0];       int s0=ev.getShape()[0];
# Line 1205  class DataArrayView { Line 1207  class DataArrayView {
1207       int s2=ev.getShape()[2];       int s2=ev.getShape()[2];
1208       int s3=ev.getShape()[3];       int s3=ev.getShape()[3];
1209       int i0, i1, i2, i3;       int i0, i1, i2, i3;
1210       if (axis_offset==0) {       if (axis0==0) {
1211         for (i0=0; i0<s0; i0++) {          if (axis1==1) {
1212           for (i1=0; i1<s1; i1++) {              for (i0=0; i0<s0; i0++) {
1213             for (i2=0; i2<s2; i2++) {                for (i1=0; i1<s1; i1++) {
1214               for (i3=0; i3<s3; i3++) {                  for (i2=0; i2<s2; i2++) {
1215                 (*(ev.m_data))[evOffset+ev.index(i0,i1,i2,i3)] = (*(in.m_data))[inOffset+in.index(i1,i0,i2,i3)];                    for (i3=0; i3<s3; i3++) {
1216                        (*(ev.m_data))[evOffset+ev.index(i0,i1,i2,i3)] = (*(in.m_data))[inOffset+in.index(i1,i0,i2,i3)];
1217                      }
1218                    }
1219                  }
1220                }
1221            } else if (axis1==2) {
1222                for (i0=0; i0<s0; i0++) {
1223                  for (i1=0; i1<s1; i1++) {
1224                    for (i2=0; i2<s2; i2++) {
1225                      for (i3=0; i3<s3; i3++) {
1226                        (*(ev.m_data))[evOffset+ev.index(i0,i1,i2,i3)] = (*(in.m_data))[inOffset+in.index(i2,i1,i0,i3)];
1227                      }
1228                    }
1229                  }
1230                }
1231    
1232            } else if (axis1==3) {
1233                for (i0=0; i0<s0; i0++) {
1234                  for (i1=0; i1<s1; i1++) {
1235                    for (i2=0; i2<s2; i2++) {
1236                      for (i3=0; i3<s3; i3++) {
1237                        (*(ev.m_data))[evOffset+ev.index(i0,i1,i2,i3)] = (*(in.m_data))[inOffset+in.index(i3,i1,i2,i0)];
1238                      }
1239                    }
1240                  }
1241                }
1242            }
1243         } else if (axis0==1) {
1244            if (axis1==2) {
1245                for (i0=0; i0<s0; i0++) {
1246                  for (i1=0; i1<s1; i1++) {
1247                    for (i2=0; i2<s2; i2++) {
1248                      for (i3=0; i3<s3; i3++) {
1249                        (*(ev.m_data))[evOffset+ev.index(i0,i1,i2,i3)] = (*(in.m_data))[inOffset+in.index(i0,i2,i1,i3)];
1250                      }
1251                    }
1252                  }
1253                }
1254            } else if (axis1==3) {
1255                for (i0=0; i0<s0; i0++) {
1256                  for (i1=0; i1<s1; i1++) {
1257                    for (i2=0; i2<s2; i2++) {
1258                      for (i3=0; i3<s3; i3++) {
1259                        (*(ev.m_data))[evOffset+ev.index(i0,i1,i2,i3)] = (*(in.m_data))[inOffset+in.index(i0,i3,i2,i1)];
1260                      }
1261                    }
1262                  }
1263                }
1264            }
1265         } else if (axis0==2) {
1266            if (axis1==3) {
1267                for (i0=0; i0<s0; i0++) {
1268                  for (i1=0; i1<s1; i1++) {
1269                    for (i2=0; i2<s2; i2++) {
1270                      for (i3=0; i3<s3; i3++) {
1271                        (*(ev.m_data))[evOffset+ev.index(i0,i1,i2,i3)] = (*(in.m_data))[inOffset+in.index(i0,i1,i3,i2)];
1272                      }
1273                    }
1274                  }
1275                }
1276            }
1277         }
1278    
1279       } else if ( in.getRank() == 3) {
1280         int s0=ev.getShape()[0];
1281         int s1=ev.getShape()[1];
1282         int s2=ev.getShape()[2];
1283         int i0, i1, i2;
1284         if (axis0==0) {
1285            if (axis1==1) {
1286               for (i0=0; i0<s0; i0++) {
1287                 for (i1=0; i1<s1; i1++) {
1288                   for (i2=0; i2<s2; i2++) {
1289                     (*(ev.m_data))[evOffset+ev.index(i0,i1,i2)] = (*(in.m_data))[inOffset+in.index(i1,i0,i2)];
1290                   }
1291               }               }
1292             }             }
1293           }          } else if (axis1==2) {
1294         }             for (i0=0; i0<s0; i0++) {
1295       }               for (i1=0; i1<s1; i1++) {
1296       else if (axis_offset==1) {                 for (i2=0; i2<s2; i2++) {
1297         for (i0=0; i0<s0; i0++) {                   (*(ev.m_data))[evOffset+ev.index(i0,i1,i2)] = (*(in.m_data))[inOffset+in.index(i2,i1,i0)];
1298           for (i1=0; i1<s1; i1++) {                 }
            for (i2=0; i2<s2; i2++) {  
              for (i3=0; i3<s3; i3++) {  
                (*(ev.m_data))[evOffset+ev.index(i0,i1,i2,i3)] = (*(in.m_data))[inOffset+in.index(i0,i2,i1,i3)];  
1299               }               }
1300             }             }
          }  
1301         }         }
1302       }       } else if (axis0==1) {
1303       else {          if (axis1==2) {
1304         for (i0=0; i0<s0; i0++) {             for (i0=0; i0<s0; i0++) {
1305           for (i1=0; i1<s1; i1++) {               for (i1=0; i1<s1; i1++) {
1306             for (i2=0; i2<s2; i2++) {                 for (i2=0; i2<s2; i2++) {
1307               for (i3=0; i3<s3; i3++) {                   (*(ev.m_data))[evOffset+ev.index(i0,i1,i2)] = (*(in.m_data))[inOffset+in.index(i0,i2,i1)];
1308                 (*(ev.m_data))[evOffset+ev.index(i0,i1,i2,i3)] = (*(in.m_data))[inOffset+in.index(i0,i1,i3,i2)];                 }
1309               }               }
1310             }             }
1311           }          }
        }  
1312       }       }
1313     }     } else if ( in.getRank() == 2) {
    else if (in.getRank() == 3) {  
1314       int s0=ev.getShape()[0];       int s0=ev.getShape()[0];
1315       int s1=ev.getShape()[1];       int s1=ev.getShape()[1];
      int s2=ev.getShape()[2];  
1316       int i0, i1, i2;       int i0, i1, i2;
1317       if (axis_offset==0) {       if (axis0==0) {
1318         for (i0=0; i0<s0; i0++) {          if (axis1==1) {
1319           for (i1=0; i1<s1; i1++) {             for (i0=0; i0<s0; i0++) {
1320             for (i2=0; i2<s2; i2++) {               for (i1=0; i1<s1; i1++) {
1321               (*(ev.m_data))[evOffset+ev.index(i0,i1,i2)] = (*(in.m_data))[inOffset+in.index(i1,i0,i2)];                   (*(ev.m_data))[evOffset+ev.index(i0,i1)] = (*(in.m_data))[inOffset+in.index(i1,i0)];
1322             }               }
          }  
        }  
      }  
      else {  
        for (i0=0; i0<s0; i0++) {  
          for (i1=0; i1<s1; i1++) {  
            for (i2=0; i2<s2; i2++) {  
              (*(ev.m_data))[evOffset+ev.index(i0,i1,i2)] = (*(in.m_data))[inOffset+in.index(i0,i2,i1)];  
1323             }             }
1324           }          }
1325         }      }
1326       }    } else {
1327     }        throw DataException("Error - DataArrayView::swapaxes can only be calculated for rank 2, 3 or 4 objects.");
    else if (in.getRank() == 2) {  
      int s0=ev.getShape()[0];  
      int s1=ev.getShape()[1];  
      int i0, i1;  
      for (i0=0; i0<s0; i0++) {  
          for (i1=0; i1<s1; i1++) {  
            (*(ev.m_data))[evOffset+ev.index(i0,i1)] = (*(in.m_data))[inOffset+in.index(i1,i0)];  
          }  
       }  
    }  
    else if (in.getRank() == 1) {  
      int s0=ev.getShape()[0];  
      int i0;  
      for (i0=0; i0<s0; i0++) {  
        (*(ev.m_data))[evOffset+ev.index(i0)] = (*(in.m_data))[inOffset+in.index(i0)];  
      }  
    }  
    else if (in.getRank() == 0) {  
      (*(ev.m_data))[evOffset+ev.index()] = (*(in.m_data))[inOffset+in.index()];  
    }  
    else {  
       throw DataException("Error - DataArrayView::transpose can only be calculated for rank 0, 1, 2, 3 or 4 objects.");  
    }  
1328    }    }
1329     }
1330    
1331    /**    /**
1332       \brief       \brief

Legend:
Removed from v.800  
changed lines
  Added in v.804

  ViewVC Help
Powered by ViewVC 1.1.26