+ return 0;
+}
+
+int set_cutoff(t_moldyn *moldyn,double cutoff) {
+
+ moldyn->cutoff=cutoff;
+
+ printf("[moldyn] cutoff [A]: %f\n",moldyn->cutoff);
+
+ return 0;
+}
+
+int set_bondlen(t_moldyn *moldyn,double b0,double b1,double bm) {
+
+ moldyn->bondlen[0]=b0*b0;
+ moldyn->bondlen[1]=b1*b1;
+ if(bm<0)
+ moldyn->bondlen[2]=b0*b1;
+ else
+ moldyn->bondlen[2]=bm*bm;
+
+ return 0;
+}
+
+int set_temperature(t_moldyn *moldyn,double t_ref) {
+
+ moldyn->t_ref=t_ref;
+
+ printf("[moldyn] temperature [K]: %f\n",moldyn->t_ref);
+
+ return 0;
+}
+
+int set_pressure(t_moldyn *moldyn,double p_ref) {
+
+ moldyn->p_ref=p_ref;
+
+ printf("[moldyn] pressure [bar]: %f\n",moldyn->p_ref/BAR);
+
+ return 0;
+}
+
+int set_pt_scale(t_moldyn *moldyn,u8 ptype,double ptc,u8 ttype,double ttc) {
+
+ moldyn->pt_scale=(ptype|ttype);
+ moldyn->t_tc=ttc;
+ moldyn->p_tc=ptc;
+
+ printf("[moldyn] p/t scaling:\n");
+
+ printf(" p: %s",ptype?"yes":"no ");
+ if(ptype)
+ printf(" | type: %02x | factor: %f",ptype,ptc);
+ printf("\n");
+
+ printf(" t: %s",ttype?"yes":"no ");
+ if(ttype)
+ printf(" | type: %02x | factor: %f",ttype,ttc);
+ printf("\n");
+
+ return 0;
+}
+
+int set_dim(t_moldyn *moldyn,double x,double y,double z,u8 visualize) {
+
+ moldyn->dim.x=x;
+ moldyn->dim.y=y;
+ moldyn->dim.z=z;
+
+ moldyn->volume=x*y*z;
+
+ if(visualize) {
+ moldyn->vis.dim.x=x;
+ moldyn->vis.dim.y=y;
+ moldyn->vis.dim.z=z;
+ }
+
+ moldyn->dv=0.000001*moldyn->volume;
+
+ printf("[moldyn] dimensions in A and A^3 respectively:\n");
+ printf(" x: %f\n",moldyn->dim.x);
+ printf(" y: %f\n",moldyn->dim.y);
+ printf(" z: %f\n",moldyn->dim.z);
+ printf(" volume: %f\n",moldyn->volume);
+ printf(" visualize simulation box: %s\n",visualize?"yes":"no");
+ printf(" delta volume (pressure calc): %f\n",moldyn->dv);
+
+ return 0;
+}
+
+int set_nn_dist(t_moldyn *moldyn,double dist) {
+
+ moldyn->nnd=dist;
+
+ return 0;
+}
+
+int set_pbc(t_moldyn *moldyn,u8 x,u8 y,u8 z) {
+
+ printf("[moldyn] periodic boundary conditions:\n");
+
+ if(x)
+ moldyn->status|=MOLDYN_STAT_PBX;
+
+ if(y)
+ moldyn->status|=MOLDYN_STAT_PBY;
+
+ if(z)
+ moldyn->status|=MOLDYN_STAT_PBZ;
+
+ printf(" x: %s\n",x?"yes":"no");
+ printf(" y: %s\n",y?"yes":"no");
+ printf(" z: %s\n",z?"yes":"no");
+
+ return 0;
+}
+
+int set_potential1b(t_moldyn *moldyn,pf_func1b func) {
+
+ 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 set_avg_skip(t_moldyn *moldyn,int skip) {
+
+ printf("[moldyn] skip %d steps before starting average calc\n",skip);
+ moldyn->avg_skip=skip;
+
+ 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);