all: sic
sic:
- $(CC) $(CFLAGS) $(LDFLAGS) $(SOURCE) $(POT_SRC) sic.c -o sic
+ $(CC) $(CFLAGS) $(LDFLAGS) $(POT_SRC) $(SOURCE) sic.c -o sic
.PHONY:clean
clean:
int set_potential1b(t_moldyn *moldyn,pf_func1b func,void *params) {
moldyn->func1b=func;
- moldyn->pot1b_params=params;
return 0;
}
int set_potential2b(t_moldyn *moldyn,pf_func2b func,void *params) {
moldyn->func2b=func;
- moldyn->pot2b_params=params;
return 0;
}
int set_potential2b_post(t_moldyn *moldyn,pf_func2b_post func,void *params) {
moldyn->func2b_post=func;
- moldyn->pot2b_params=params;
return 0;
}
int set_potential3b(t_moldyn *moldyn,pf_func3b func,void *params) {
moldyn->func3b=func;
- moldyn->pot3b_params=params;
+
+ return 0;
+}
+
+int set_potential_params(t_moldyn *moldyn,void *params) {
+
+ moldyn->pot_params=params;
return 0;
}
* virial calculation
*/
-inline int virial_calc(t_atom *a,t_3dvec *f,t_3dvec *d) {
+//inline int virial_calc(t_atom *a,t_3dvec *f,t_3dvec *d) {
+int virial_calc(t_atom *a,t_3dvec *f,t_3dvec *d) {
a->virial.xx+=f->x*d->x;
a->virial.yy+=f->y*d->y;
* periodic boundayr checking
*/
-inline int check_per_bound(t_moldyn *moldyn,t_3dvec *a) {
+//inline int check_per_bound(t_moldyn *moldyn,t_3dvec *a) {
+int check_per_bound(t_moldyn *moldyn,t_3dvec *a) {
double x,y,z;
t_3dvec *dim;
return 0;
}
-
-/*
- * example potentials
- */
-
-/* harmonic oscillator potential and force */
-
-int harmonic_oscillator(t_moldyn *moldyn,t_atom *ai,t_atom *aj,u8 bc) {
-
- t_ho_params *params;
- t_3dvec force,distance;
- double d,f;
- double sc,equi_dist;
-
- params=moldyn->pot2b_params;
- sc=params->spring_constant;
- equi_dist=params->equilibrium_distance;
-
- if(ai<aj) return 0;
-
- v3_sub(&distance,&(aj->r),&(ai->r));
-
- if(bc) check_per_bound(moldyn,&distance);
- d=v3_norm(&distance);
- if(d<=moldyn->cutoff) {
- moldyn->energy+=(0.5*sc*(d-equi_dist)*(d-equi_dist));
- /* f = -grad E; grad r_ij = -1 1/r_ij distance */
- f=sc*(1.0-equi_dist/d);
- v3_scale(&force,&distance,f);
- v3_add(&(ai->f),&(ai->f),&force);
- virial_calc(ai,&force,&distance);
- virial_calc(aj,&force,&distance); /* f and d signe switched */
- v3_scale(&force,&distance,-f);
- v3_add(&(aj->f),&(aj->f),&force);
- }
-
- return 0;
-}
-
/*
* debugging / critical check functions
*/
/* potential force function and parameter pointers */
int (*func1b)(struct s_moldyn *moldyn,t_atom *ai);
- void *pot1b_params;
int (*func2b)(struct s_moldyn *moldyn,t_atom *ai,t_atom *aj,u8 bc);
int (*func2b_post)(struct s_moldyn *moldyn,t_atom *ai,t_atom *aj,u8 bc);
- void *pot2b_params;
int (*func3b)(struct s_moldyn *moldyn,t_atom *ai,t_atom *aj,t_atom *ak,
u8 bck);
- void *pot3b_params;
+ void *pot_params;
//int (*potential_force_function)(struct s_moldyn *moldyn);
double cutoff; /* cutoff radius */
double debug; /* debugging stuff, ignore */
} t_moldyn;
+/*
+ *
+ * defines
+ *
+ */
+
#define MOLDYN_STAT_PBX 0x01 /* periodic boudaries in x */
#define MOLDYN_STAT_PBY 0x02 /* y */
#define MOLDYN_STAT_PBZ 0x04 /* and z direction */
#define P_SCALE_BERENDSEN 0x04 /* berendsen p control */
#define P_SCALE_DIRECT 0x08 /* direct p control */
-/*
- *
- * potential parameter structures
- *
- */
-
-/*
- * harmonic oscillator potential parameter structure
- */
-
-typedef struct s_ho_params {
- double spring_constant;
- double equilibrium_distance;
-} t_ho_params;
-
-/*
- * lennard jones potential parameter structure
- */
-
-typedef struct s_lj_params {
- double sigma6;
- double sigma12;
- double epsilon4;
- double uc;
-} t_lj_params;
-
-/*
- * tersoff
- */
-
-/* tersoff exchange structure to exchange 2bp and 3bp calculated values */
-typedef struct s_tersoff_exchange {
- double f_c,df_c;
- double f_a,df_a;
-
- t_3dvec dist_ij;
- double d_ij2;
- double d_ij;
-
- double chi;
-
- double *beta_i;
- double *beta_j;
- double *n_i;
- double *n_j;
- double *c_i;
- double *c_j;
- double *d_i;
- double *d_j;
- double *h_i;
- double *h_j;
-
- double ci2;
- double cj2;
- double di2;
- double dj2;
- double ci2di2;
- double cj2dj2;
- double betaini;
- double betajnj;
-
- u8 run3bp;
- u8 run2bp_post;
- u8 d_ij_between_rs;
-
- double zeta_ij;
- double zeta_ji;
- t_3dvec dzeta_ij;
- t_3dvec dzeta_ji;
-} t_tersoff_exchange;
-
-/* tersoff mult (2!) potential parameters */
-typedef struct s_tersoff_mult_params {
- double S[2]; /* tersoff cutoff radii */
- double S2[2]; /* tersoff cutoff radii squared */
- double R[2]; /* tersoff cutoff radii */
- double Smixed; /* mixed S radius */
- double S2mixed; /* mixed S radius squared */
- double Rmixed; /* mixed R radius */
- double A[2]; /* factor of tersoff attractive part */
- double B[2]; /* factor of tersoff repulsive part */
- double Amixed; /* mixed A factor */
- double Bmixed; /* mixed B factor */
- double lambda[2]; /* tersoff lambda */
- double lambda_m; /* mixed lambda */
- double mu[2]; /* tersoff mu */
- double mu_m; /* mixed mu */
-
- double chi;
-
- double beta[2];
- double n[2];
- double c[2];
- double d[2];
- double h[2];
-
- t_tersoff_exchange exchange; /* exchange between 2bp and 3bp calc */
-} t_tersoff_mult_params;
-
-
-
-/*
- *
- * defines
- *
- */
-
-#define ONE_THIRD (1.0/3.0)
-
/*
* default values
*
*
*/
+#define ONE_THIRD (1.0/3.0)
+
#define K_BOLTZMANN (1.380650524e-23*METER*NEWTON) /* NA/K */
#define EV (1.6021765314e-19*METER*NEWTON) /* NA */
int velocity_verlet(t_moldyn *moldyn);
int potential_force_calc(t_moldyn *moldyn);
-inline int virial_calc(t_atom *a,t_3dvec *f,t_3dvec *d)
- __attribute__((always_inline));
-inline int check_per_bound(t_moldyn *moldyn,t_3dvec *a)
- __attribute__((always_inline));
-int harmonic_oscillator(t_moldyn *moldyn,t_atom *ai,t_atom *aj,u8 bc);
-int lennard_jones(t_moldyn *moldyn,t_atom *ai,t_atom *aj,u8 bc);
-int tersoff_mult_complete_params(t_tersoff_mult_params *p);
-int tersoff_mult_1bp(t_moldyn *moldyn,t_atom *ai);
-int tersoff_mult_2bp(t_moldyn *moldyn,t_atom *ai,t_atom *aj,u8 bc);
-int tersoff_mult_post_2bp(t_moldyn *moldyn,t_atom *ai,t_atom *aj,u8 bc);
-int tersoff_mult_3bp(t_moldyn *moldyn,t_atom *ai,t_atom *aj,t_atom *ak,u8 bc);
+int virial_calc(t_atom *a,t_3dvec *f,t_3dvec *d);
+//inline int virial_calc(t_atom *a,t_3dvec *f,t_3dvec *d)
+// __attribute__((always_inline));
+int check_per_bound(t_moldyn *moldyn,t_3dvec *a);
+//inline int check_per_bound(t_moldyn *moldyn,t_3dvec *a)
+// __attribute__((always_inline));
int moldyn_bc_check(t_moldyn *moldyn);
#include "../moldyn.h"
#include "../math/math.h"
-//#include "harmonic_oscillator.h"
+#include "harmonic_oscillator.h"
int harmonic_oscillator(t_moldyn *moldyn,t_atom *ai,t_atom *aj,u8 bc) {
double d,f;
double sc,equi_dist;
- params=moldyn->pot2b_params;
+ params=moldyn->pot_params;
sc=params->spring_constant;
equi_dist=params->equilibrium_distance;
#include <math.h>
#include "../moldyn.h"
-#inlcude "../math/math.h"
-//#include "lennard_jones.h"
+#include "../math/math.h"
+#include "lennard_jones.h"
int lennard_jones(t_moldyn *moldyn,t_atom *ai,t_atom *aj,u8 bc) {
double d,h1,h2;
double eps,sig6,sig12;
- params=moldyn->pot2b_params;
+ params=moldyn->pot_params;
eps=params->epsilon4;
sig6=params->sigma6;
sig12=params->sigma12;
#include "../moldyn.h"
#include "../math/math.h"
-//#include "tersoff.h"
+#include "tersoff.h"
/* create mixed terms from parameters and set them */
int tersoff_mult_complete_params(t_tersoff_mult_params *p) {
t_tersoff_exchange *exchange;
brand=ai->brand;
- params=moldyn->pot1b_params;
+ params=moldyn->pot_params;
exchange=&(params->exchange);
/*
double s_r;
double arg;
- params=moldyn->pot2b_params;
+ params=moldyn->pot_params;
brand=aj->brand;
exchange=&(params->exchange);
double chi,ni,betaini,nj,betajnj;
double zeta;
- params=moldyn->pot2b_params;
+ params=moldyn->pot_params;
exchange=&(params->exchange);
/* we do not run if f_c_ij was detected to be 0! */
double tmp;
int brand;
- params=moldyn->pot3b_params;
+ params=moldyn->pot_params;
exchange=&(params->exchange);
if(!(exchange->run3bp))
#include <math.h>
#include "moldyn.h"
-
#include "posic.h"
+/* potential */
+#include "potentials/harmonic_oscillator.h"
+#include "potentials/lennard_jones.h"
+#include "potentials/tersoff.h"
+
int hook(void *moldyn,void *hook_params) {
t_moldyn *md;