00001
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
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
00044 C2F(vvtosci)(z,nz);
00045 if (C2F(scierr)()!=0) goto err;
00046 C2F(vvtosci)(rpar,nrpar);
00047
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
00066 {
00067 skip=2;
00068 C2F(skipvars)(&skip);
00069 C2F(scitovv)(z,nz);
00070
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,<op);
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
00087
00088 C2F(ltopadj)(<op);
00089 }
00090 break;
00091 case 0 :
00092
00093 {
00094
00095
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
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
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
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
00142 C2F(scitod)(x,nx,&one);
00143 if (*nout==0) {
00144 skip=1;
00145 C2F(skipvars)(&skip);
00146 }
00147 else {
00148 C2F(list2vars)(nout,<op);
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
00157
00158 C2F(ltopadj)(<op);
00159 }
00160 break;
00161 }
00162 return;
00163 err:
00164 *flag=-1;
00165 }