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){
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