00001 /************************************************************************************* 00002 * MechSys - A C++ library to simulate (Continuum) Mechanical Systems * 00003 * Copyright (C) 2005 Dorival de Moraes Pedroso <dorival.pedroso at gmail.com> * 00004 * Copyright (C) 2005 Raul Dario Durand Farfan <raul.durand at gmail.com> * 00005 * * 00006 * This file is part of MechSys. * 00007 * * 00008 * MechSys is free software; you can redistribute it and/or modify it under the * 00009 * terms of the GNU General Public License as published by the Free Software * 00010 * Foundation; either version 2 of the License, or (at your option) any later * 00011 * version. * 00012 * * 00013 * MechSys is distributed in the hope that it will be useful, but WITHOUT ANY * 00014 * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A * 00015 * PARTICULAR PURPOSE. See the GNU General Public License for more details. * 00016 * * 00017 * You should have received a copy of the GNU General Public License along with * 00018 * MechSys; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, * 00019 * Fifth Floor, Boston, MA 02110-1301, USA * 00020 *************************************************************************************/ 00021 00022 #include <iostream> 00023 #include <cmath> 00024 00025 #include "tensors/tensors.h" 00026 #include "tensors/operators.h" 00027 00028 using namespace std; 00029 using namespace Tensors; 00030 using blitz::dot; 00031 00032 int main(int argc, char **argv) 00033 { 00034 cout << "new_mechsys\n\n"; 00035 00036 Tensor2 x; x(0)=.4; x(1)=.5; x(2)=.6; x(3)=1*sqrt(2.0); x(4)=2*sqrt(2.0); x(5)=3*sqrt(2.0); 00037 Tensor2 y; y(0)= 3; y(1)= 2; y(2)= 1; y(3)=3*sqrt(2.0); y(4)=2*sqrt(2.0); y(5)=1*sqrt(2.0); 00038 Tensor2 z; 00039 Tensor2 w; 00040 Tensor4 A; 00041 Tensor4 B; 00042 Tensor4 C; 00043 Tensor4 D; 00044 Tensor4 W; 00045 00046 cout << "x =\n" << x << endl; 00047 cout << "y =\n" << y << endl; 00048 00049 // 1) ---------------------------------- sc = a * b 00050 cout << "x * y =\n" << dot(x,y) << endl; 00051 // 5) ------------------------------ A = x dyadic y 00052 Dyad(x,y,A); 00053 cout << "A = x dyadic y =\n" << A << endl; 00054 // 2) ----------------------------------- y = x * A 00055 Dot(x,A,y); 00056 cout << "y = x * A =\n" << y << endl; 00057 // 3) ----------------------------------- y = A * x 00058 Dot(A,x,y); 00059 cout << "y = A * x =\n" << y << endl; 00060 // 5) ------------------------------ B = x dyadic y 00061 Dyad(x,y,B); 00062 cout << "B = x dyadic y =\n" << B << endl; 00063 // 4) ----------------------------------- C = A * B 00064 Dot(A,B,C); 00065 cout << "C = A * B =\n" << C << endl; 00066 // --------------------------------- y = a*x + y 00067 y = 0.1*x + y; //Axpy(0.1,x,y); 00068 cout << "y = 0.1*x + y =\n" << y << endl; 00069 // 7) ------------------------ A = a*(x dyad y) + A 00070 Ger(0.01,x,y,A); 00071 cout << "A = 0.5*(x dyad y) + A =\n" << A << endl; 00072 // 8) ------------------ C = a*(A*x) dyad (y*B) + C 00073 GerX(1e-7,A,x,y,B,C,D); 00074 cout << "D = 1e-6*(A*x) dyad (y*B) + C =\n" << D << endl; 00075 00076 // --------------------------------- y = a*x 00077 y = 0.1*x; //CopyScale(0.1,x,y); 00078 cout << "y = 0.1*x =\n" << y << endl; 00079 // --------------------------------- z = x + y 00080 z = x + y; //Add(x,y, z); 00081 cout << "z = x + y =\n" << z << endl; 00082 // --------------------------------- w = x + y + z 00083 w = x + y + z; //Add(x,y,z, w); 00084 cout << "w = x + y + z =\n" << w << endl; 00085 // --------------------------------- w = a*x + b*y + c*z 00086 w = x + 2.0*y + 3.0*z; //AddScaled(1.0,x, 2.0,y, 3.0,z, w); 00087 cout << "w = 1*x + 2*y + 3*z =\n" << w << endl; 00088 // 6) --------------------------------- Z = a*X + b*Y 00089 AddScaled(1.0,A, 2.0,B, W); 00090 cout << "W = 1*A + 2*B =\n" << W << endl; 00091 00092 // 9) --------------------------------- B = a * B 00093 Scale(2.0,B); 00094 cout << " B = 2.0*B =\n" << B << endl; 00095 // 10) -------------------------------- B = a * A 00096 CopyScale(2.0,A,B); 00097 cout << " B = 2.0*A =\n" << B << endl; 00098 // 11) -------------------------------- s = xt * A * y 00099 cout << " xt * A * y = " << Reduce(x,A,y) << endl; 00100 00101 return 0; 00102 }
1.4.7