Changeset 2366 in Sophya for trunk/Eval


Ignore:
Timestamp:
Apr 18, 2003, 5:48:16 PM (22 years ago)
Author:
ansari
Message:

Ajout fonctions Sin/Cos/... ds jet.h + prog en f90 - Reza 18/4/2003

Location:
trunk/Eval/JET
Files:
1 added
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/Eval/JET/cmds.list

    r2363 r2366  
    44f90 -o fmtx -fast -arch host fmtx.f ftim.o -lcxml -lm
    55
     6
     7#  Commande pour reconstruction du programme, avec differentes options
     8f90 -O -o cool_fmtx fmtx.f ftim.o -lcxml
     9f90 -o f90mtx f90mtx.f90 ftim.o
     10
  • trunk/Eval/JET/fmtx.f

    r2363 r2366  
    4747      CALL FPrtTim(4)
    4848
     49      DO K=1,NTIME
     50        C1 = K*0.135
     51        C2 = COS(6.*C1)+0.04
     52        C3 = SIN(C1*8.5)
     53        CALL OPEFMTX(K, MX1, MX2, MX5, C1, C2, C3)
     54      ENDDO
     55      PRINT *, 'FIN  MX5 = C1*MX1 + MX3 + COS(C2*MX2*MX1) '
     56      CALL FPrtTim(5)
     57
    4958      PRINT *, ' ------ FIN programme ---------- '
    5059      END
     
    8291      END
    8392
     93      SUBROUTINE OPEFMTX(K, MX1, MX2, MX5, C1, C2, C3)
     94      INTEGER I,J,K
     95      DOUBLE PRECISION MX1(1000,500), MX2(1000,500)
     96      DOUBLE PRECISION MX5(1000,500)
     97      DOUBLE PRECISION C1,C2,C3
     98      DO I=1,1000
     99         DO J=1,500
     100            MX5(I,J) = C1*MX1(I,J)+MX2(I,J)+
     101     +                 C3*COS(C2*MX2(I,J)*MX1(I,J))
     102         ENDDO
     103      ENDDO
     104      IF (K.EQ.5) PRINT *, 'OPEFMTX/COS - 5 -> ', MX5(20,5)
     105      IF (K.EQ.15) PRINT *, 'OPEFMTX/COS - 15 -> ', MX5(20,15)
     106      RETURN
     107      END
     108
    84109      SUBROUTINE OPADDMTX(K, MX1, MX2, MX3, MX5, C1, C2, C3)
    85110      INTEGER I,J,K
     
    104129      DOUBLE PRECISION C1,C2,C3
    105130      NTOT = 1000*500
    106       CALL DVCAL(NTOT, C1, MX1, 1, MX5, 1)
    107       CALL DZAXPY(NTOT, C2, MX2, 1, MX5, 1, MX4, 1)
    108       CALL DZAXPY(NTOT, C3, MX3, 1, MX4, 1, MX5, 1)
     131C  Sur OSF :
     132C      CALL DVCAL(NTOT, C1, MX1, 1, MX5, 1)
     133C      CALL DZAXPY(NTOT, C2, MX2, 1, MX5, 1, MX4, 1)
     134C      CALL DZAXPY(NTOT, C3, MX3, 1, MX4, 1, MX5, 1)
     135C  Sinon
     136      CALL DCOPY(NTOT, MX1, 1, MX5, 1)
     137      CALL DSCAL(NTOT, C1, MX5, 1)
     138      CALL DAXPY(NTOT, C2, MX2, 1, MX5, 1)
     139      CALL DAXPY(NTOT, C3, MX3, 1, MX3, 1)
    109140      IF (K.EQ.5) PRINT *, 'MTXBLAS - 5 -> ', MX5(20,5),
    110141     + ' NTot=' , NTOT
  • trunk/Eval/JET/jet.h

    r2363 r2366  
    132132};
    133133
     134// -------- Classe Fonc(Expression)  --------------
     135template <class T>
     136class FSin {
     137public:
     138  FSin() { }
     139  FSin(FSin<T> const &) { }
     140  inline T FuncVal(T x) const { return sin(x); }
     141};
     142template <class T>
     143class FCos {
     144public:
     145  FCos() { }
     146  FCos(FCos<T> const &) { }
     147  inline T FuncVal(T x) const { return cos(x); }
     148};
     149template <class T>
     150class FTan {
     151public:
     152  FTan() { }
     153  FTan(FTan<T> const &) { }
     154  inline T FuncVal(T x) const { return tan(x); }
     155};
     156template <class T>
     157class FLog {
     158public:
     159  FLog() { }
     160  FLog(FLog<T> const &) { }
     161  inline T FuncVal(T x) const { return log(x); }
     162};
     163template <class T>
     164class FExp {
     165public:
     166  FExp() { }
     167  FExp(FExp<T> const &) { }
     168  inline T FuncVal(T x) const { return exp(x); }
     169};
     170
     171template <class T, class E, class F>
     172class JETExprFunc {
     173public:
     174  JETExprFunc(E e, F f) : e_(e), f_(f) { }
     175  JETExprFunc( JETExprFunc<T, E, F> const & a) : e_(a.e_), f_(a.f_) { }
     176  inline T EvaluateAndStep() const { return f_.FuncVal(e_.EvaluateAndStep()); }
     177  virtual MtxSize const & RefSize() const { return e_.RefSize() ; }
     178  inline void Reset() const { e_.Reset(); }
     179protected:
     180  E e_;
     181  F f_;
     182};
    134183
    135184
     
    174223  (JETExprMult<T,E1,E2>(e1.Expression(), e2.Expression()) ); }
    175224
     225//---- Definition Sin/Cos/Tan/Log/Exp
     226template <class T, class E>
     227JETExpression< T, JETExprFunc<T,E,FSin<T> > > Sin ( JETExpression<T,E> e)
     228{ return JETExpression< T, JETExprFunc<T,E,FSin<T> > > (JETExprFunc<T,E,FSin<T> >(e.Expression(), FSin<T>() ) ); }
    176229#endif
    177230
  • trunk/Eval/JET/tjet.cc

    r2365 r2366  
    9090        }
    9191    }
     92
    9293    cout << " (1) Element access done ---" << endl;
    9394    PrtTim(" (1) -- ");
     
    137138    cout << " (5) JET: m5 = m1*c1 + m1*(m2+c2) + m2*c3 ---" << endl;
    138139    PrtTim(" (5) -- ");
    139     }
     140
     141    for(k=0; k<N; k++) {
     142      double c1 = frand01() + 1.2;
     143      double c2 = frand01() + 3.5;
     144      double c3 = frand01() + 6.7;
     145    // Calcul m1*c1 + m1*(m2+c2) + m2*c3;
     146      m5 = m1*c1 + m2 + c2*Sin(c3*m3+m1);
     147    }
     148    cout << " (6) JET: m5 = m1*c1 + m2 + c2*Sin(c3*m3+m1) ---" << endl;
     149    PrtTim(" (6) -- ");
     150
     151    }
     152
     153   
    140154    // Test avec les TArray / TMatrix
    141155    {
     
    156170        }
    157171    }
    158     cout << " (6) Element access done ---" << endl;
    159     PrtTim(" (6) -- ");
     172    cout << " (21) Element access done ---" << endl;
     173    PrtTim(" (21) -- ");
    160174    // Calcul m1*c1 + m2*c2 + m3*c3;
    161175    for(k=0; k<N; k++) {
     
    169183      m5.AddElt(m4);
    170184    }
    171     cout << " (7) Add/MulElt/Cst m1*c1 + m2*c2 + m3*c3 done ---" << endl;
    172     PrtTim(" (7) -- ");
     185    cout << " (22) Add/MulElt/Cst m1*c1 + m2*c2 + m3*c3 done ---" << endl;
     186    PrtTim(" (22) -- ");
    173187
    174188    for(k=0; k<N; k++) {
     
    178192      m5 = m1*c1+m2*c2+m3*c3;
    179193    }
    180     cout << " (8) m1*c1 + m2*c2 + m3*c3 done ---" << endl;
    181     PrtTim(" (8) -- ");
     194    cout << " (23) m1*c1 + m2*c2 + m3*c3 done ---" << endl;
     195    PrtTim(" (23) -- ");
     196
     197    for(k=0; k<N; k++) {
     198      double c1 = frand01() + 1.2;
     199      double c2 = frand01() + 3.5;
     200      double c3 = frand01() + 6.7;
     201      m5 = m1*c1 + m2 + c2*Sin(c3*m3+m1);
     202    }
     203    cout << " (26) m5 = m1*c1 + m2 + c2*Sin(c3*m3+m1) ---" << endl;
     204    PrtTim(" (26) -- ");
     205
    182206    }
    183207  }
Note: See TracChangeset for help on using the changeset viewer.