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

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