- /* default values */
- moldyn->t=MOLDYN_TEMP;
- moldyn->tau=MOLDYN_TAU;
- moldyn->time_steps=MOLDYN_RUNS;
-
- /* parse argv */
- for(i=1;i<argc;i++) {
- if(argv[i][0]=='-') {
- switch(argv[i][1]){
- case 'E':
- moldyn->ewrite=atoi(argv[++i]);
- strncpy(moldyn->efb,argv[++i],64);
- break;
- case 'M':
- moldyn->mwrite=atoi(argv[++i]);
- strncpy(moldyn->mfb,argv[++i],64);
- break;
- case 'D':
- moldyn->dwrite=atoi(argv[++i]);
- strncpy(moldyn->dfb,argv[++i],64);
- break;
- case 'S':
- moldyn->swrite=atoi(argv[++i]);
- strncpy(moldyn->sfb,argv[++i],64);
- break;
- case 'V':
- moldyn->vwrite=atoi(argv[++i]);
- strncpy(moldyn->vfb,argv[++i],64);
- break;
- case 'T':
- moldyn->t=atof(argv[++i]);
- break;
- case 't':
- moldyn->tau=atof(argv[++i]);
- break;
- case 'R':
- moldyn->time_steps=atoi(argv[++i]);
- break;
- default:
- printf("unknown option %s\n",argv[i]);
- moldyn_usage(argv);
- return -1;
+ moldyn->func1b=func;
+
+ return 0;
+}
+
+int set_potential2b(t_moldyn *moldyn,pf_func2b func) {
+
+ moldyn->func2b=func;
+
+ return 0;
+}
+
+int set_potential3b_j1(t_moldyn *moldyn,pf_func2b func) {
+
+ moldyn->func3b_j1=func;
+
+ return 0;
+}
+
+int set_potential3b_j2(t_moldyn *moldyn,pf_func2b func) {
+
+ moldyn->func3b_j2=func;
+
+ return 0;
+}
+
+int set_potential3b_j3(t_moldyn *moldyn,pf_func2b func) {
+
+ moldyn->func3b_j3=func;
+
+ return 0;
+}
+
+int set_potential3b_k1(t_moldyn *moldyn,pf_func3b func) {
+
+ moldyn->func3b_k1=func;
+
+ return 0;
+}
+
+int set_potential3b_k2(t_moldyn *moldyn,pf_func3b func) {
+
+ moldyn->func3b_k2=func;
+
+ return 0;
+}
+
+int set_potential_params(t_moldyn *moldyn,void *params) {
+
+ moldyn->pot_params=params;
+
+ return 0;
+}
+
+int moldyn_set_log_dir(t_moldyn *moldyn,char *dir) {
+
+ strncpy(moldyn->vlsdir,dir,127);
+
+ return 0;
+}
+
+int moldyn_set_report(t_moldyn *moldyn,char *author,char *title) {
+
+ strncpy(moldyn->rauthor,author,63);
+ strncpy(moldyn->rtitle,title,63);
+
+ return 0;
+}
+
+int moldyn_set_log(t_moldyn *moldyn,u8 type,int timer) {
+
+ char filename[128];
+ int ret;
+
+ printf("[moldyn] set log: ");
+
+ switch(type) {
+ case LOG_TOTAL_ENERGY:
+ moldyn->ewrite=timer;
+ snprintf(filename,127,"%s/energy",moldyn->vlsdir);
+ moldyn->efd=open(filename,
+ O_WRONLY|O_CREAT|O_EXCL,
+ S_IRUSR|S_IWUSR);
+ if(moldyn->efd<0) {
+ perror("[moldyn] energy log fd open");
+ return moldyn->efd;
+ }
+ dprintf(moldyn->efd,"# total energy log file\n");
+ printf("total energy (%d)\n",timer);
+ break;
+ case LOG_TOTAL_MOMENTUM:
+ moldyn->mwrite=timer;
+ snprintf(filename,127,"%s/momentum",moldyn->vlsdir);
+ moldyn->mfd=open(filename,
+ O_WRONLY|O_CREAT|O_EXCL,
+ S_IRUSR|S_IWUSR);
+ if(moldyn->mfd<0) {
+ perror("[moldyn] momentum log fd open");
+ return moldyn->mfd;
+ }
+ dprintf(moldyn->efd,"# total momentum log file\n");
+ printf("total momentum (%d)\n",timer);
+ break;
+ case LOG_PRESSURE:
+ moldyn->pwrite=timer;
+ snprintf(filename,127,"%s/pressure",moldyn->vlsdir);
+ moldyn->pfd=open(filename,
+ O_WRONLY|O_CREAT|O_EXCL,
+ S_IRUSR|S_IWUSR);
+ if(moldyn->pfd<0) {
+ perror("[moldyn] pressure log file\n");
+ return moldyn->pfd;
+ }
+ dprintf(moldyn->pfd,"# pressure log file\n");
+ printf("pressure (%d)\n",timer);
+ break;
+ case LOG_TEMPERATURE:
+ moldyn->twrite=timer;
+ snprintf(filename,127,"%s/temperature",moldyn->vlsdir);
+ moldyn->tfd=open(filename,
+ O_WRONLY|O_CREAT|O_EXCL,
+ S_IRUSR|S_IWUSR);
+ if(moldyn->tfd<0) {
+ perror("[moldyn] temperature log file\n");
+ return moldyn->tfd;
+ }
+ dprintf(moldyn->tfd,"# temperature log file\n");
+ printf("temperature (%d)\n",timer);
+ break;
+ case SAVE_STEP:
+ moldyn->swrite=timer;
+ printf("save file (%d)\n",timer);
+ break;
+ case VISUAL_STEP:
+ moldyn->vwrite=timer;
+ ret=visual_init(&(moldyn->vis),moldyn->vlsdir);
+ if(ret<0) {
+ printf("[moldyn] visual init failure\n");
+ return ret;
+ }
+ printf("visual file (%d)\n",timer);
+ break;
+ case CREATE_REPORT:
+ snprintf(filename,127,"%s/report.tex",moldyn->vlsdir);
+ moldyn->rfd=open(filename,
+ O_WRONLY|O_CREAT|O_EXCL,
+ S_IRUSR|S_IWUSR);
+ if(moldyn->rfd<0) {
+ perror("[moldyn] report fd open");
+ return moldyn->rfd;
+ }
+ printf("report -> ");
+ if(moldyn->efd) {
+ snprintf(filename,127,"%s/e_plot.scr",
+ moldyn->vlsdir);
+ moldyn->epfd=open(filename,
+ O_WRONLY|O_CREAT|O_EXCL,
+ S_IRUSR|S_IWUSR);
+ if(moldyn->epfd<0) {
+ perror("[moldyn] energy plot fd open");
+ return moldyn->epfd;
+ }
+ dprintf(moldyn->epfd,e_plot_script);
+ close(moldyn->epfd);
+ printf("energy ");
+ }
+ if(moldyn->pfd) {
+ snprintf(filename,127,"%s/pressure_plot.scr",
+ moldyn->vlsdir);
+ moldyn->ppfd=open(filename,
+ O_WRONLY|O_CREAT|O_EXCL,
+ S_IRUSR|S_IWUSR);
+ if(moldyn->ppfd<0) {
+ perror("[moldyn] p plot fd open");
+ return moldyn->ppfd;
+ }
+ dprintf(moldyn->ppfd,pressure_plot_script);
+ close(moldyn->ppfd);
+ printf("pressure ");
+ }
+ if(moldyn->tfd) {
+ snprintf(filename,127,"%s/temperature_plot.scr",
+ moldyn->vlsdir);
+ moldyn->tpfd=open(filename,
+ O_WRONLY|O_CREAT|O_EXCL,
+ S_IRUSR|S_IWUSR);
+ if(moldyn->tpfd<0) {
+ perror("[moldyn] t plot fd open");
+ return moldyn->tpfd;
+ }
+ dprintf(moldyn->tpfd,temperature_plot_script);
+ close(moldyn->tpfd);
+ printf("temperature ");