deriv.c

Go to the documentation of this file.
00001 
00002 #include "scicos_block.h"
00003 #include <math.h>
00004 
00005 void deriv(scicos_block *block,int flag)
00006 { 
00007   double* rw;
00008   double t,dt;
00009   int i;
00010   if (flag == 4){/* the workspace is used to store previous values */
00011     if ((*block->work=
00012          scicos_malloc(sizeof(double)*2*(1+block->insz[0])))== NULL ) {
00013       set_block_error(-16);
00014       return;
00015     }
00016     rw=*block->work; 
00017     t=get_scicos_time();
00018     rw[0]=t;
00019     rw[1]=t;
00020     for(i=0;i<block->insz[0];++i){
00021       rw[2+2*i]=0;
00022       rw[3+2*i]=0;
00023     }
00024   }else  if (flag == 5){
00025     scicos_free(*block->work);
00026   }else  if (flag == 1) {
00027     rw=*block->work;
00028     t=get_scicos_time();
00029     if(t>rw[1]) {
00030       rw[0]=rw[1];
00031       for(i=0;i<block->insz[0];++i)  {rw[2+2*i]=rw[3+2*i];}
00032     }
00033     rw[1]=t;
00034     for(i=0;i<block->insz[0];++i) {
00035       rw[3+2*i]=block->inptr[0][i];
00036     }
00037     dt=rw[1]-rw[0];
00038 
00039     if(dt!=0.0) {
00040       for(i=0;i<block->insz[0];++i)
00041         block->outptr[0][i]=(rw[3+2*i]-rw[2+2*i])/dt;
00042     }
00043   }
00044 }
00045   

Generated on Sun Mar 4 15:03:59 2007 for Scilab [trunk] by  doxygen 1.5.1