sciblk2i.c

Go to the documentation of this file.
00001 /* Copyright INRIA */
00002 #include "machine.h"
00003 
00004 extern integer C2F(scierr)();
00005 extern void C2F(itosci)();
00006 extern void C2F(dtosci)();
00007 extern void C2F(vvtosci)();
00008 extern void C2F(scitovv)();
00009 extern void C2F(skipvars)();
00010 extern void C2F(scitod)();
00011 extern void C2F(list2vars)();
00012 extern void C2F(ltopadj)();
00013 extern void C2F(scifunc)();
00014 extern int C2F(mklist)();
00015 
00016 
00017 void 
00018 sciblk2i(flag,nevprt,t,residual,xd,x,nx,z,nz,tvec,ntvec,rpar,nrpar,
00019                ipar,nipar,inptr,insz,nin,outptr,outsz,nout)
00020 
00021 integer *flag,*nevprt,*nx,*nz,*ntvec,*nrpar,ipar[],*nipar,insz[],*nin,outsz[],*nout;
00022 double residual[],x[],xd[],z[],tvec[],rpar[];
00023 double *inptr[],*outptr[],*t;
00024 
00025 {
00026     int k;
00027     double *y;
00028     double *u;
00029 /*    int nev,ic;*/
00030     integer one=1,skip;
00031     integer nu,ny;
00032     integer mlhs=6,mrhs=9;
00033     integer ltop;
00034     /*
00035  
00036     [y,  x,  z,  tvec,xd]=func(flag,nevprt,t,xd,x,z,rpar,ipar,u)
00037     [y,  x,  z,  tvec,res]=func(flag,nevprt,t,xd,x,z,rpar,ipar,u)
00038     */
00039     C2F(itosci)(flag,&one,&one);
00040     if (C2F(scierr)()!=0) goto err;
00041     C2F(itosci)(nevprt,&one,&one);
00042     if (C2F(scierr)()!=0) goto err;  
00043     C2F(dtosci)(t,&one,&one);
00044     if (C2F(scierr)()!=0) goto err;  
00045     C2F(dtosci)(xd,nx,&one);
00046     if (C2F(scierr)()!=0) goto err;  
00047     C2F(dtosci)(x,nx,&one);
00048     if (C2F(scierr)()!=0) goto err;  
00049     C2F(vvtosci)(z,nz);
00050     if (C2F(scierr)()!=0) goto err; 
00051     C2F(vvtosci)(rpar,nrpar); 
00052     if (C2F(scierr)()!=0) goto err;  
00053     C2F(itosci)(ipar,nipar,&one);
00054     if (C2F(scierr)()!=0) goto err;
00055     for (k=0;k<*nin;k++) {
00056         u=(double *)inptr[k];
00057         nu=insz[k];
00058         C2F(dtosci)(u,&nu,&one);
00059         if (C2F(scierr)()!=0) goto err;
00060     }
00061     C2F(mklist)(nin);
00062 
00063 
00064     C2F(scifunc)(&mlhs,&mrhs);
00065     if (C2F(scierr)()!=0) goto err;
00066     
00067     switch (*flag) {
00068     case 1 :
00069         /* y  computation */
00070       {
00071         skip=4;
00072         C2F(skipvars)(&skip);
00073       }
00074       if (*nout==0) {
00075         skip=1;
00076         C2F(skipvars)(&skip);
00077       }
00078       else {
00079         C2F(list2vars)(nout,&ltop);
00080         if (C2F(scierr)()!=0) goto err; 
00081         for (k=*nout-1;k>=0;k--) {
00082           y=(double *)outptr[k];
00083           ny=outsz[k];
00084           C2F(scitod)(y,&ny,&one);
00085           if (C2F(scierr)()!=0) goto err;
00086         }
00087         /* list2vars has changed the Lstk(top+1) value. 
00088            reset the correct value */
00089         C2F(ltopadj)(&ltop);  
00090       }
00091       break;
00092     case 0 :
00093         /*  residual  computation */
00094       {
00095         C2F(scitod)(residual,nx,&one);
00096         skip=4;
00097         C2F(skipvars)(&skip);
00098         break;
00099       }
00100     case 2 : 
00101       /* continuous and discrete state jump */
00102       {
00103         C2F(scitod)(xd,nx,&one);
00104         skip=1;
00105         C2F(skipvars)(&skip);
00106         C2F(scitovv)(z,nz);
00107         C2F(scitod)(x,nx,&one);
00108         skip=1;
00109         C2F(skipvars)(&skip);
00110       }
00111       break;
00112     case 3 :
00113       /* output event */
00114         skip=1;
00115         C2F(skipvars)(&skip);
00116         C2F(scitod)(tvec,ntvec,&one);
00117         skip=3;
00118         C2F(skipvars)(&skip);
00119         break;
00120     case 4 :
00121         C2F(scitod)(xd,nx,&one);
00122         skip=1;C2F(skipvars)(&skip);
00123         C2F(scitovv)(z,nz);
00124         C2F(scitod)(x,nx,&one);
00125         skip=1;C2F(skipvars)(&skip);
00126         break;
00127     case 5 :
00128         C2F(scitod)(xd,nx,&one);
00129         skip=1;C2F(skipvars)(&skip);
00130         C2F(scitovv)(z,nz);
00131         C2F(scitod)(x,nx,&one);
00132         skip=1;
00133         C2F(skipvars)(&skip);
00134         break;
00135     case 6 :
00136         C2F(scitod)(xd,nx,&one);
00137         skip=1;
00138         C2F(skipvars)(&skip);
00139         C2F(scitovv)(z,nz);
00140         C2F(scitod)(x,nx,&one);
00141         if (*nout==0) {
00142             skip=1;
00143             C2F(skipvars)(&skip);
00144         }
00145         else {
00146             C2F(list2vars)(nout,&ltop); 
00147             if (C2F(scierr)()!=0) goto err;
00148             for (k=*nout-1;k>=0;k--) {
00149                 y=(double *)outptr[k];
00150                 ny=outsz[k];
00151                 C2F(scitod)(y,&ny,&one);
00152                 if (C2F(scierr)()!=0) goto err;
00153             }
00154             /* list2vars has changed the Lstk(top+1) value. 
00155                reset the correct value */
00156            C2F(ltopadj)(&ltop);  
00157         }
00158         break;
00159     }
00160     return;
00161  err: 
00162     *flag=-1;
00163 }

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