void frictionContact2D_enum(FrictionContactProblem* problem, double *reaction, double *velocity, int *info, SolverOptions* options, NumericsOptions* global_options) { int i; // conversion into LCP LinearComplementarityProblem* lcp_problem = (LinearComplementarityProblem*)malloc(sizeof(LinearComplementarityProblem)); FrictionContact2D_tolcp(problem, lcp_problem); /* frictionContact_display(problem); */ /* linearComplementarity_display(lcp_problem); */ double *zlcp = (double*)malloc(lcp_problem->size * sizeof(double)); double *wlcp = (double*)malloc(lcp_problem->size * sizeof(double)); for (i = 0; i < lcp_problem->size; i++) { zlcp[i] = 0.0; wlcp[i] = 0.0; } /* FILE * fcheck = fopen("lcp_relay.dat","w"); */ /* info = linearComplementarity_printInFile(lcp_problem,fcheck); */ // Call the lcp_solver SolverOptions * lcp_options = options->internalSolvers; lcp_enum_init(lcp_problem, lcp_options, 1); //} * info = linearComplementarity_driver(lcp_problem, zlcp , wlcp, lcp_options, global_options); if (options->filterOn > 0) lcp_compute_error(lcp_problem, zlcp, wlcp, lcp_options->dparam[0], &(lcp_options->dparam[1])); lcp_enum_reset(lcp_problem, lcp_options, 1); /* printf("\n"); */ int nc = problem->numberOfContacts; // Conversion of result for (i = 0; i < nc; i++) { /* printf("Contact number = %i\n",i); */ reaction[2 * i] = zlcp[3 * i]; reaction[2 * i + 1] = 1.0 / 2.0 * (zlcp[3 * i + 1] - wlcp[3 * i + 2]); /* printf("reaction[ %i]=%12.10e\n", 2*i, reaction[2*i]); */ /* printf("reaction[ %i]=%12.10e\n", 2*i+1, reaction[2*i+1]); */ velocity[2 * i] = wlcp[3 * i]; velocity[2 * i + 1] = wlcp[3 * i + 1] - zlcp[3 * i + 2]; /* printf("velocity[ %i]=%12.10e\n", 2*i, velocity[2*i]); */ /* printf("velocity[ %i]=%12.10e\n", 2*i+1, velocity[2*i+1]); */ } /* for (i=0; i< lcp_problem->size; i++){ */ /* printf("zlcp[ %i]=%12.10e,\t wlcp[ %i]=%12.10e \n", i, zlcp[i],i, wlcp[i]); */ /* } */ /* printf("\n"); */ /* for (i=0; i< problem->size; i++){ */ /* printf("z[ %i]=%12.10e,\t w[ %i]=%12.10e\n", i, z[i],i, w[i]); */ /* } */ /* printf("\n"); */ double error; *info = FrictionContact2D_compute_error(problem, reaction , velocity, options->dparam[0], &error); free(zlcp); free(wlcp); freeLinearComplementarityProblem(lcp_problem); }
int lcp_test_function_SBM(FILE * f, int solverId) { int i, info = 0 ; LinearComplementarityProblem* problem = (LinearComplementarityProblem *)malloc(sizeof(LinearComplementarityProblem)); info = linearComplementarity_newFromFile(problem, f); FILE * foutput = fopen("./lcp_mmc.verif", "w"); info = linearComplementarity_printInFile(problem, foutput); NumericsOptions global_options; setDefaultNumericsOptions(&global_options); global_options.verboseMode = 1; SolverOptions * options = (SolverOptions *)malloc(sizeof(SolverOptions)); info = linearComplementarity_setDefaultSolverOptions(problem, options, SICONOS_LCP_NSGS_SBM); set_SolverOptions(options->internalSolvers, solverId); #ifdef HAVE_GAMS_C_API if (solverId == SICONOS_LCP_GAMS) { // no testing for now deleteSolverOptions(options); free(options); freeLinearComplementarityProblem(problem); fclose(foutput); return 0; /* SN_GAMSparams* GP = (SN_GAMSparams*)options->internalSolvers->solverParameters; assert(GP); GP->model_dir = GAMS_MODELS_SOURCE_DIR;*/ } #endif double * z = (double *)calloc(problem->size, sizeof(double)); double * w = (double *)calloc(problem->size, sizeof(double)); info = linearComplementarity_driver(problem, z , w, options, &global_options); for (i = 0 ; i < problem->size ; i++) { printf("z[%i] = %12.8e\t,w[%i] = %12.8e\n", i, z[i], i, w[i]); } if (!info) { printf("test succeeded err=%e \n", options->dparam[1]); } else { printf("test unsuccessful err =%e \n", options->dparam[1]); } free(z); free(w); // info = linearComplementarity_deleteDefaultSolverOptions(&options,solvername); deleteSolverOptions(options); free(options); freeLinearComplementarityProblem(problem); fclose(foutput); return info; }
int main(void) { printf("\n Start of test on Default SolverOptions\n"); int info = 0 ; SolverOptions * options = (SolverOptions *)malloc(sizeof(SolverOptions)); FILE * finput = fopen("./data/lcp_mmc.dat", "r"); LinearComplementarityProblem* problem = (LinearComplementarityProblem *)malloc(sizeof(LinearComplementarityProblem)); info = linearComplementarity_newFromFile(problem, finput); fclose(finput); info = linearComplementarity_setDefaultSolverOptions(problem, options, SICONOS_LCP_NSGS_SBM); assert(options->internalSolvers); solver_options_set(options->internalSolvers, SICONOS_LCP_LEMKE); solver_options_print(options); solver_options_delete(options); info = linearComplementarity_setDefaultSolverOptions(problem, options, SICONOS_LCP_PGS); solver_options_print(options); solver_options_delete(options); info = linearComplementarity_setDefaultSolverOptions(problem, options, SICONOS_LCP_RPGS); solver_options_print(options); solver_options_delete(options); info = linearComplementarity_setDefaultSolverOptions(problem, options, SICONOS_LCP_QP); solver_options_print(options); solver_options_delete(options); info = linearComplementarity_setDefaultSolverOptions(problem, options, SICONOS_LCP_NSQP); solver_options_print(options); solver_options_delete(options); info = linearComplementarity_setDefaultSolverOptions(problem, options, SICONOS_LCP_CPG); solver_options_print(options); solver_options_delete(options); info = linearComplementarity_setDefaultSolverOptions(problem, options, SICONOS_LCP_PSOR); solver_options_print(options); solver_options_delete(options); info = linearComplementarity_setDefaultSolverOptions(problem, options, SICONOS_LCP_LATIN); solver_options_print(options); solver_options_delete(options); info = linearComplementarity_setDefaultSolverOptions(problem, options, SICONOS_LCP_LATIN_W); solver_options_print(options); solver_options_delete(options); info = linearComplementarity_setDefaultSolverOptions(problem, options, SICONOS_LCP_LEMKE); solver_options_print(options); solver_options_delete(options); info = linearComplementarity_setDefaultSolverOptions(problem, options, SICONOS_LCP_PATH); solver_options_print(options); solver_options_delete(options); info = linearComplementarity_setDefaultSolverOptions(problem, options, SICONOS_LCP_ENUM); solver_options_print(options); solver_options_delete(options); info = linearComplementarity_setDefaultSolverOptions(problem, options, SICONOS_LCP_NEWTONMIN); solver_options_print(options); solver_options_delete(options); info = linearComplementarity_setDefaultSolverOptions(problem, options, SICONOS_LCP_AVI_CAOFERRIS); solver_options_print(options); solver_options_delete(options); info = linearComplementarity_setDefaultSolverOptions(problem, options, SICONOS_LCP_PIVOT); solver_options_print(options); solver_options_delete(options); freeLinearComplementarityProblem(problem); free(options); printf("\n End of test on Default SolverOptions\n"); return info; }
int lcp_test_function(FILE * f, int solverId, char* filename) { int i, info = 0 ; LinearComplementarityProblem* problem = (LinearComplementarityProblem *)malloc(sizeof(LinearComplementarityProblem)); info = linearComplementarity_newFromFile(problem, f); FILE * foutput = fopen("./lcp_mmc.verif", "w"); info = linearComplementarity_printInFile(problem, foutput); fclose(foutput); NumericsOptions global_options; setDefaultNumericsOptions(&global_options); global_options.verboseMode = 1; SolverOptions options; set_SolverOptions(&options, solverId); #ifdef HAVE_GAMS_C_API if (solverId == SICONOS_LCP_GAMS) { SN_GAMSparams* GP = (SN_GAMSparams*)options.solverParameters; assert(GP); GP->model_dir = GAMS_MODELS_SOURCE_DIR; assert(filename); GP->filename = filename; } #endif double * z = (double *)calloc(problem->size, sizeof(double)); double * w = (double *)calloc(problem->size, sizeof(double)); info = linearComplementarity_driver(problem, z , w, &options, &global_options); for (i = 0 ; i < problem->size ; i++) { printf("z[%i] = %12.8e\t,w[%i] = %12.8e\n", i, z[i], i, w[i]); } if (!info) { printf("test succeeded err = %e \n", options.dparam[1]); } else { printf("test unsuccessful err =%e \n", options.dparam[1]); } free(z); free(w); deleteSolverOptions(&options); if (solverId == SICONOS_LCP_GAMS) { free(options.solverParameters); options.solverParameters = NULL; } freeLinearComplementarityProblem(problem); printf("End of test.\n"); return info; }