Hi all,
I have been doing some DLM programming, and I get the error message "%
Temporary variables are still checked out - cleaning up..." whenever I use
the functions IDL_CvtDbl or IDL_BasicTypeConversion in my C routine below.
While the error does not seem to affect execution of the routines, the
message tells me that the programming is not clean. The question is whether
I am doing something wrong or whether this is a bug in IDL? The error only
occurs if the type is actually converted. If input array is double, the
message does not show. Your input is appreciated.
Thanks,
Haje
void IDL_CDECL geopack_igrf_geo(int argc, IDL_VPTR argv[], char *argk)
{
int iyear, iday;
double *pr, *pt, *pp, *pbr, *pbt, *pbp;
IDL_VPTR r, t, p, br, bt, bp;
IDL_MEMINT r_nEl, t_nEl, p_nEl;
IDL_ARRAY_DIM dim;
IDL_ENSURE_SCALAR(argv[0]);
IDL_ENSURE_SCALAR(argv[1]);
IDL_EXCLUDE_EXPR(argv[5]);
IDL_EXCLUDE_EXPR(argv[6]);
IDL_EXCLUDE_EXPR(argv[7]);
iyear=IDL_LongScalar(argv[0]);
iday=IDL_LongScalar(argv[1]);
r=IDL_BasicTypeConversion(1,&argv[2],IDL_TYP_DOUBLE);
IDL_VarGetData(r,&r_nEl,(char **) &pr, FALSE);
t=IDL_BasicTypeConversion(1,&argv[3],IDL_TYP_DOUBLE);
IDL_VarGetData(t,&t_nEl,(char **) &pt, TRUE);
p=IDL_BasicTypeConversion(1,&argv[4],IDL_TYP_DOUBLE);
IDL_VarGetData(p,&p_nEl,(char **) &pp, TRUE);
IDL_StoreScalarZero(argv[5], IDL_TYP_DOUBLE);
IDL_StoreScalarZero(argv[6], IDL_TYP_DOUBLE);
IDL_StoreScalarZero(argv[7], IDL_TYP_DOUBLE);
dim[0]=r_nEl;
pbr=(double *) IDL_MakeTempArray(IDL_TYP_DOUBLE,
1, dim, IDL_ARR_INI_ZERO, &br);
pbt=(double *) IDL_MakeTempArray(IDL_TYP_DOUBLE,
1, dim, IDL_ARR_INI_ZERO, &bt);
pbp=(double *) IDL_MakeTempArray(IDL_TYP_DOUBLE,
1, dim, IDL_ARR_INI_ZERO, &bp);
IGRF_GEO_F(&iyear, &iday, &r_nEl, pr, pt, pp, pbr, pbt, pbp);
IDL_VarCopy(br,argv[5]);
IDL_VarCopy(bt,argv[6]);
IDL_VarCopy(bp,argv[7]);
}
|