tcslti4.c

Go to the documentation of this file.
00001 
00002 #include <math.h>
00003 #include <memory.h>
00004 
00005 #include "scicos_block.h"
00006 #include "machine.h"
00007 
00008 extern int C2F(dmmul)();
00009 extern int C2F(dmmul1)();
00010 
00011 
00012 void tcslti4(scicos_block *block,int flag)
00013 {
00014   /* Copyright INRIA
00015    
00016      Scicos block simulator
00017      continuous state space linear system simulator
00018      rpar(1:nx*nx)=A
00019      rpar(nx*nx+1:nx*nx+nx*nu)=B
00020      rpar(nx*nx+nx*nu+1:nx*nx+nx*nu+nx*ny)=C
00021      rpar(nx*nx+nx*nu+nx*ny+1:nx*nx+nx*nu+nx*ny+ny*nu)=D */
00022 
00023   int un=1,lb,lc,ld;
00024   int nx=block->nx;
00025   double* x=block->x;
00026   double* xd=block->xd;
00027   double* rpar=block->rpar;
00028   double* y=block->outptr[0];
00029   double* u1=block->inptr[0];
00030   double* u2=block->inptr[1];
00031   int* outsz=block->outsz;
00032   int* insz=block->insz;
00033     
00034   lb=nx*nx;
00035   lc=lb+nx*insz[0];
00036   
00037   if (flag ==1 || flag ==6){
00038     /* y=c*x+d*u1 */  
00039     ld=lc+nx*outsz[0];
00040 
00041     C2F(dmmul)(&rpar[lc],outsz,x,&nx,y,outsz,outsz,&nx,&un);
00042     C2F(dmmul1)(&rpar[ld],outsz,u1,&insz[0],y,outsz,outsz,&insz[0],&un);
00043 
00044   }else if (flag == 2 && block->nevprt == 1){
00045     /* x+=u2 */
00046     memcpy(x,u2 ,nx*sizeof(double));
00047   }else if (flag ==0 && block->nevprt == 0){
00048     /* xd=a*x+b*u1 */
00049     C2F(dmmul)(&rpar[0],&nx,x,&nx,xd,&nx,&nx,&nx,&un);
00050     C2F(dmmul1)(&rpar[lb],&nx,u1,&insz[0],xd,&nx,&nx,&insz[0],&un);
00051   }
00052 }
00053 

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