=================================================================== RCS file: /home/cvs/OpenXM/src/ox_gsl/ox_gsl.c,v retrieving revision 1.10 retrieving revision 1.13 diff -u -p -r1.10 -r1.13 --- OpenXM/src/ox_gsl/ox_gsl.c 2018/06/04 06:39:26 1.10 +++ OpenXM/src/ox_gsl/ox_gsl.c 2018/06/07 11:13:05 1.13 @@ -1,4 +1,4 @@ -/* $OpenXM: OpenXM/src/ox_gsl/ox_gsl.c,v 1.9 2018/04/18 02:20:51 takayama Exp $ +/* $OpenXM: OpenXM/src/ox_gsl/ox_gsl.c,v 1.12 2018/06/07 01:53:33 takayama Exp $ */ #include @@ -332,6 +332,12 @@ int sm_executeFunction() call_gsl_sf_lngamma_complex_e(); }else if (strcmp(func->s,"gsl_integration_qags")==0) { call_gsl_integration_qags(); + }else if (strcmp(func->s,"gsl_monte_plain_integrate")==0) { + call_gsl_monte_plain_miser_vegas_integrate(0); + }else if (strcmp(func->s,"gsl_monte_miser_integrate")==0) { + call_gsl_monte_plain_miser_vegas_integrate(1); + }else if (strcmp(func->s,"gsl_monte_vegas_integrate")==0) { + call_gsl_monte_plain_miser_vegas_integrate(2); }else { push(make_error2("sm_executeFunction, unknown function",NULL,0,-1)); return -1; @@ -466,4 +472,35 @@ int main() receive(); } return(0); +} + +cmo *element_of_at(cmo *list,int k) { + int length; + static cmo * saved_list = NULL; + static cmo **dic; + int i; + cell *cellp; + if (list == NULL) { + ox_printf("element_of_at: list is NULL.\n"); + return( (cmo *)NULL); + } + if (list->tag != CMO_LIST) { + ox_printf("element_of_at: list is not list.\n"); + return((cmo *)NULL); + } + length = list_length((cmo_list *)list); + if ((k < 0) || (k >= length)) { + ox_printf("element_of_at: out of bound length=%d, k=%d.\n",length,k); + return((cmo *)NULL); + } + if (list == saved_list) return(dic[k]); + saved_list = list; + dic = (cmo **)GC_malloc(sizeof(cmo *)*(length+1)); + if (dic == NULL) return((cmo *)NULL); // no more memory. + cellp = list_first((cmo_list *)list); + for (i=0; icmo; + cellp = list_next(cellp); + } + return(dic[k]); }