static void error (int code, ...) { /* --- print error message */ va_list args; /* list of variable arguments */ const char *msg; /* error message */ assert(prgname); /* check the program name */ if (code < E_UNKNOWN) code = E_UNKNOWN; if (code < 0) { /* if to report an error, */ msg = errmsgs[-code]; /* get error message */ if (!msg) msg = errmsgs[-E_UNKNOWN]; fprintf(stderr, "\n%s: ", prgname); va_start(args, code); /* get variable arguments */ vfprintf(stderr, msg, args);/* print error message */ va_end(args); /* end argument evaluation */ } #ifndef NDEBUG if (nbc) nbc_delete(nbc, 0); if (fbc) fbc_delete(fbc, 0); if (attset) as_delete(attset); /* clean up memory */ if (scan) sc_delete(scan); /* and close files */ if (out && (out != stdout)) fclose(out); #endif #ifdef STORAGE showmem("at end of program"); /* check memory usage */ #endif exit(code); /* abort programm */ } /* error() */
void curvelinear_circle(void) { int data[] = { PJ_DIRECT, PJ_ELLIPTIC_PROBLEM, 3, 3, FUNCTIONAL_SQUARE, DELTA_INV_ALL, 2, 2, 1, 0, 30, 15, 0, /* Уравнение переноса */ 30, 5, 0, /* Граница */ NORMALIZED | RADIAL | GAUSSIAN, 2, 2, 0, 2, 0,}; double bounds[] = { GP_UNIFORM_COIL_SECTOR, 0, 0, 0, C_R, 0, 2*M_PI, GP_UNIFORM_ARC, 0, 0, C_R, 0, 2*M_PI, }; // GP_UNIFORM_SOLID_CUBOID, 0, M_PI, 0, M_PI, // GP_UNIFORM_SOLID_CUBOID, 0, M_PI, M_PI, M_PI, // GP_UNIFORM_SOLID_CUBOID, 0, 0, 0, M_PI, // GP_UNIFORM_SOLID_CUBOID, M_PI, M_PI, 0, M_PI, // GP_UNIFORM_SOLID_CUBOID, 0, M_PI, 0, 0}; fbvp_t cond[] = {A, G, }; gbvp_t cond_a[] = {A_a, G_a, }; double delta[] = {1./30, 1./10, 1./10, 1./10, 1./10}; anns_methoddata_t *as = am_new2(ai_init, ai_newpoints, ai_initann, ai_mse, NULL, data, bounds, cond, cond_a, NULL); //anns_methoddata_t *am_new2(void (*ai_init)(anns_instance_t *, fbvp_t *, gbvp_t *, double *), // void (*ai_newpoints)(anns_instance_t *, double *), // void (*ai_initann)(anns_instance_t *, double *), // double (*ai_mse)(anns_instance_t *, double *), // void (*ai_update)(anns_instance_t *, double *, int , double), // int *data, double *bounds, fbvp_t *cond, gbvp_t *cond_a, double *delta) { as->randomseed = 0; as->seed = 123L; as->Nopt = 5; as->gtol = 1e-5; as->tol = 1e-5; as->n0 = 16; // anns_solve_growreduce(as); // anns_solve_restarts(as); method_restarts(as); as_delete(as); }
void poisson_3d_sines(void) { int data[] = { PJ_DIRECT, PJ_ELLIPTIC_PROBLEM, 1, 0, FUNCTIONAL_SQUARE, DELTA_INV_ALL, 2, 5, 1, 0, 30, 15, 1, /* Уравнение переноса */ 10, 5, 0, /* Верхняя граница */ 10, 5, 0, /* Левая граница */ 10, 5, 0, /* Правая граница */ 10, 5, 0, /* Нижняя граница */ CLASSIC | RADIAL | GAUSSIAN, 8, 2, 0, 2, 0, 0, 0, 0,}; double bounds[] = { GP_UNIFORM_SOLID_CUBOID, 0, M_PI, 0, M_PI, GP_UNIFORM_SOLID_CUBOID, 0, M_PI, M_PI, M_PI, GP_UNIFORM_SOLID_CUBOID, 0, 0, 0, M_PI, GP_UNIFORM_SOLID_CUBOID, M_PI, M_PI, 0, M_PI, GP_UNIFORM_SOLID_CUBOID, 0, M_PI, 0, 0}; fbvp_t cond[] = {A, B, B, B, B}; gbvp_t cond_a[] = {A_a, B_a, B_a, B_a, B_a}; double delta[] = {1./30, 1./10, 1./10, 1./10, 1./10}; anns_solverdata_t *as = as_new2(ai_init, ai_newpoints, ai_initann, ai_mse, data, bounds, cond, cond_a, NULL); as->randomseed = 0; as->seed = 123L; as->Nopt = 5; as->gtol = 1e-4; as->tol = 1e-4; as->n0 = 8; // anns_solve_growreduce(as); anns_solve_restarts(as); as_delete(as); }
int main (int argc, char *argv[]) { /* --- main function */ int i, k = 0; /* loop variables, counter */ char *s; /* to traverse the options */ char **optarg = NULL; /* option argument */ char *fn_hdr = NULL; /* name of table header file */ char *fn_tab = NULL; /* name of table file */ char *fn_dom = NULL; /* name of domains file */ char *blanks = NULL; /* blanks */ char *fldseps = NULL; /* field separators */ char *recseps = NULL; /* record separators */ char *nullchs = NULL; /* null value characters */ char *comment = NULL; /* comment characters */ int flags = 0; /* table file read flags */ int sort = 0; /* flag for domain sorting */ int atdet = 0; /* flag for automatic type determ. */ int ivals = AS_IVALS; /* flag for numeric intervals */ int maxlen = 0; /* maximal output line length */ int attid; /* loop variable for attributes */ ATT *att; /* to traverse attributes */ clock_t t; /* timer for measurement */ prgname = argv[0]; /* get program name for error msgs. */ /* --- print startup/usage message --- */ if (argc > 1) { /* if arguments are given */ fprintf(stderr, "%s - %s\n", argv[0], DESCRIPTION); fprintf(stderr, VERSION); } /* print a startup message */ else { /* if no argument is given */ printf("usage: %s [options] " "[-d|-h hdrfile] tabfile domfile\n", argv[0]); printf("%s\n", DESCRIPTION); printf("%s\n", VERSION); printf("-s sort domains alphabetically " "(default: order of appearance)\n"); printf("-S sort domains numerically/alphabetically\n"); printf("-a automatic type determination " "(default: all nominal)\n"); printf("-i do not print intervals for numeric attributes\n"); printf("-l# output line length (default: no limit)\n"); printf("-b# blank characters (default: \" \\t\\r\")\n"); printf("-f# field separators (default: \" \\t\")\n"); printf("-r# record separators (default: \"\\n\")\n"); printf("-C# comment characters (default: \"#\")\n"); printf("-u# null value characters (default: \"?*\")\n"); printf("-n number of tuple occurrences in last field\n"); printf("-d use default header " "(field names = field numbers)\n"); printf("-h read table header (field names) from hdrfile\n"); printf("hdrfile file containing table header (field names)\n"); printf("tabfile table file to read " "(field names in first record)\n"); printf("domfile file to write domain descriptions to\n"); return 0; /* print a usage message */ } /* and abort the program */ /* --- evaluate arguments --- */ for (i = 1; i < argc; i++) { /* traverse the arguments */ s = argv[i]; /* get option argument */ if (optarg) { *optarg = s; optarg = NULL; continue; } if ((*s == '-') && *++s) { /* -- if argument is an option */ while (1) { /* traverse characters */ switch (*s++) { /* evaluate option */ case 's': sort = 1; break; case 'S': sort = 2; break; case 'a': atdet = 1; break; case 'i': ivals = 0; break; case 'l': maxlen = (int)strtol(s, &s, 0); break; case 'b': optarg = &blanks; break; case 'f': optarg = &fldseps; break; case 'r': optarg = &recseps; break; case 'u': optarg = &nullchs; break; case 'C': optarg = &comment; break; case 'n': flags |= AS_WEIGHT; break; case 'd': flags |= AS_DFLT; break; case 'h': optarg = &fn_hdr; break; default : error(E_OPTION, *--s); break; } /* set option variables */ if (!*s) break; /* if at end of string, abort loop */ if (optarg) { *optarg = s; optarg = NULL; break; } } } /* get option argument */ else { /* -- if argument is no option */ switch (k++) { /* evaluate non-option */ case 0: fn_tab = s; break; case 1: fn_dom = s; break; default: error(E_ARGCNT); break; } /* note filenames */ } } if (optarg) error(E_OPTARG); /* check option argument */ if (k != 2) error(E_ARGCNT); /* check number of arguments */ if (fn_hdr && (strcmp(fn_hdr, "-") == 0)) fn_hdr = ""; /* convert "-" to "" */ if (fn_hdr) /* set header flags */ flags = AS_ATT | (flags & ~AS_DFLT); /* --- determine attributes and domains --- */ attset = as_create("domains", att_delete); if (!attset) error(E_NOMEM); /* create an attribute set */ as_chars(attset, recseps, fldseps, blanks, nullchs, comment); fprintf(stderr, "\n"); /* set delimiter characters */ i = io_tab(attset, fn_hdr, fn_tab, flags, 1); if (i != 0) error(-i); /* read the table */ /* --- convert/sort domains --- */ if (atdet) { /* if automatic type determination */ for (attid = as_attcnt(attset); --attid >= 0; ) att_conv(as_att(attset, attid), AT_AUTO, NULL); } /* try to convert attributes */ if (sort) { /* if to sort domains (values) */ for (attid = as_attcnt(attset); --attid >= 0; ) { att = as_att(attset, attid); if (att_type(att) != AT_NOM) continue; att_valsort(att, (sort > 1) ? numcmp : strcmp, NULL, 0); } /* traverse nominal attributes */ } /* and sort their domains */ /* --- write output file --- */ t = clock(); /* start the timer */ if (fn_dom && *fn_dom) /* if a domain file name is given, */ out = fopen(fn_dom, "w"); /* open domain file for writing */ else { /* if no domain file name is given, */ out = stdout; fn_dom = "<stdout>"; } /* write to stdout */ fprintf(stderr, "writing %s ... ", fn_dom); if (!out) error(E_FOPEN, fn_dom); if (as_desc(attset, out, AS_TITLE|ivals, maxlen) != 0) error(E_FWRITE, fn_dom); /* write domain descriptions */ if (out != stdout) { /* if not written to stdout, */ i = fclose(out); out = NULL;/* close the output file */ if (i != 0) error(E_FWRITE, fn_dom); } /* print a success message */ fprintf(stderr, "[%d attribute(s)] done", as_attcnt(attset)); fprintf(stderr, " [%.2fs].\n", SEC_SINCE(t)); /* --- clean up --- */ #ifndef NDEBUG as_delete(attset); /* delete attribute set */ #endif #ifdef STORAGE showmem("at end of program"); /* check memory usage */ #endif return 0; /* return 'ok' */ } /* main() */