/[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 799 by ksteube, Mon Jul 10 04:00:08 2006 UTC revision 800 by gross, Tue Aug 8 11:23:18 2006 UTC
# Line 869  class DataArrayView { Line 869  class DataArrayView {
869       \param ev - Output - The symmetric matrix       \param ev - Output - The symmetric matrix
870       \param inOffset - Input - offset into ev       \param inOffset - Input - offset into ev
871    */    */
872      ESCRIPT_DLL_API
873    static    static
874    inline    inline
875    void    void
# Line 914  class DataArrayView { Line 915  class DataArrayView {
915       \param ev - Output - The nonsymmetric matrix       \param ev - Output - The nonsymmetric matrix
916       \param inOffset - Input - offset into ev       \param inOffset - Input - offset into ev
917    */    */
918      ESCRIPT_DLL_API
919    static    static
920    inline    inline
921    void    void
# Line 962  class DataArrayView { Line 964  class DataArrayView {
964    static    static
965    inline    inline
966    void    void
967    matrixtrace(DataArrayView& in,    trace(DataArrayView& in,
968              ValueType::size_type inOffset,              ValueType::size_type inOffset,
969              DataArrayView& ev,              DataArrayView& ev,
970              ValueType::size_type evOffset,              ValueType::size_type evOffset,
# Line 1049  class DataArrayView { Line 1051  class DataArrayView {
1051       \param ev - Output - The nonsymmetric matrix       \param ev - Output - The nonsymmetric matrix
1052       \param inOffset - Input - offset into ev       \param inOffset - Input - offset into ev
1053    */    */
1054      ESCRIPT_DLL_API
1055    static    static
1056    inline    inline
1057    void    void
# Line 1164  class DataArrayView { Line 1167  class DataArrayView {
1167     }     }
1168     else if (in.getRank() == 1) {     else if (in.getRank() == 1) {
1169       int s0=ev.getShape()[0];       int s0=ev.getShape()[0];
1170         int i0;
1171         for (i0=0; i0<s0; i0++) {
1172           (*(ev.m_data))[evOffset+ev.index(i0)] = (*(in.m_data))[inOffset+in.index(i0)];
1173         }
1174       }
1175       else if (in.getRank() == 0) {
1176         (*(ev.m_data))[evOffset+ev.index()] = (*(in.m_data))[inOffset+in.index()];
1177       }
1178       else {
1179          throw DataException("Error - DataArrayView::transpose can only be calculated for rank 0, 1, 2, 3 or 4 objects.");
1180       }
1181      }
1182    
1183      /**
1184         \brief
1185         swaps the components axis_offset and axis_offset+1
1186    
1187         \param in - Input - matrix
1188         \param inOffset - Input - offset into in
1189         \param ev - Output - The nonsymmetric matrix
1190         \param inOffset - Input - offset into ev
1191      */
1192      ESCRIPT_DLL_API
1193      static
1194      inline
1195      void
1196      swap(DataArrayView& in,
1197           ValueType::size_type inOffset,
1198           DataArrayView& ev,
1199           ValueType::size_type evOffset,
1200           int axis_offset)
1201      {
1202       if (in.getRank() == 4) {
1203         int s0=ev.getShape()[0];
1204         int s1=ev.getShape()[1];
1205         int s2=ev.getShape()[2];
1206         int s3=ev.getShape()[3];
1207         int i0, i1, i2, i3;
1208         if (axis_offset==0) {
1209           for (i0=0; i0<s0; i0++) {
1210             for (i1=0; i1<s1; i1++) {
1211               for (i2=0; i2<s2; i2++) {
1212                 for (i3=0; i3<s3; i3++) {
1213                   (*(ev.m_data))[evOffset+ev.index(i0,i1,i2,i3)] = (*(in.m_data))[inOffset+in.index(i1,i0,i2,i3)];
1214                 }
1215               }
1216             }
1217           }
1218         }
1219         else if (axis_offset==1) {
1220           for (i0=0; i0<s0; i0++) {
1221             for (i1=0; i1<s1; i1++) {
1222               for (i2=0; i2<s2; i2++) {
1223                 for (i3=0; i3<s3; i3++) {
1224                   (*(ev.m_data))[evOffset+ev.index(i0,i1,i2,i3)] = (*(in.m_data))[inOffset+in.index(i0,i2,i1,i3)];
1225                 }
1226               }
1227             }
1228           }
1229         }
1230         else {
1231           for (i0=0; i0<s0; i0++) {
1232             for (i1=0; i1<s1; i1++) {
1233               for (i2=0; i2<s2; i2++) {
1234                 for (i3=0; i3<s3; i3++) {
1235                   (*(ev.m_data))[evOffset+ev.index(i0,i1,i2,i3)] = (*(in.m_data))[inOffset+in.index(i0,i1,i3,i2)];
1236                 }
1237               }
1238             }
1239           }
1240         }
1241       }
1242       else if (in.getRank() == 3) {
1243         int s0=ev.getShape()[0];
1244         int s1=ev.getShape()[1];
1245         int s2=ev.getShape()[2];
1246         int i0, i1, i2;
1247         if (axis_offset==0) {
1248           for (i0=0; i0<s0; i0++) {
1249             for (i1=0; i1<s1; i1++) {
1250               for (i2=0; i2<s2; i2++) {
1251                 (*(ev.m_data))[evOffset+ev.index(i0,i1,i2)] = (*(in.m_data))[inOffset+in.index(i1,i0,i2)];
1252               }
1253             }
1254           }
1255         }
1256         else {
1257           for (i0=0; i0<s0; i0++) {
1258             for (i1=0; i1<s1; i1++) {
1259               for (i2=0; i2<s2; i2++) {
1260                 (*(ev.m_data))[evOffset+ev.index(i0,i1,i2)] = (*(in.m_data))[inOffset+in.index(i0,i2,i1)];
1261               }
1262             }
1263           }
1264         }
1265       }
1266       else if (in.getRank() == 2) {
1267         int s0=ev.getShape()[0];
1268         int s1=ev.getShape()[1];
1269         int i0, i1;
1270         for (i0=0; i0<s0; i0++) {
1271             for (i1=0; i1<s1; i1++) {
1272               (*(ev.m_data))[evOffset+ev.index(i0,i1)] = (*(in.m_data))[inOffset+in.index(i1,i0)];
1273             }
1274          }
1275       }
1276       else if (in.getRank() == 1) {
1277         int s0=ev.getShape()[0];
1278       int i0;       int i0;
1279       for (i0=0; i0<s0; i0++) {       for (i0=0; i0<s0; i0++) {
1280         (*(ev.m_data))[evOffset+ev.index(i0)] = (*(in.m_data))[inOffset+in.index(i0)];         (*(ev.m_data))[evOffset+ev.index(i0)] = (*(in.m_data))[inOffset+in.index(i0)];

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

  ViewVC Help
Powered by ViewVC 1.1.26