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 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
00030 integer one=1,skip;
00031 integer nu,ny;
00032 integer mlhs=6,mrhs=9;
00033 integer ltop;
00034
00035
00036
00037
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
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,<op);
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
00088
00089 C2F(ltopadj)(<op);
00090 }
00091 break;
00092 case 0 :
00093
00094 {
00095 C2F(scitod)(residual,nx,&one);
00096 skip=4;
00097 C2F(skipvars)(&skip);
00098 break;
00099 }
00100 case 2 :
00101
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
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,<op);
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
00155
00156 C2F(ltopadj)(<op);
00157 }
00158 break;
00159 }
00160 return;
00161 err:
00162 *flag=-1;
00163 }