new structure (skipped 2 inlines) same code!
authorhackbard <hackbard>
Mon, 5 Mar 2007 10:05:23 +0000 (10:05 +0000)
committerhackbard <hackbard>
Mon, 5 Mar 2007 10:05:23 +0000 (10:05 +0000)
Makefile
moldyn.c
moldyn.h
potentials/harmonic_oscillator.c
potentials/lennard_jones.c
potentials/tersoff.c
sic.c

index 37fafcc..3e31459 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -16,7 +16,7 @@ POT_SRC+= potentials/harmonic_oscillator.c
 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:
index 1ab88eb..dae975c 100644 (file)
--- a/moldyn.c
+++ b/moldyn.c
@@ -165,7 +165,6 @@ int set_pbc(t_moldyn *moldyn,u8 x,u8 y,u8 z) {
 int set_potential1b(t_moldyn *moldyn,pf_func1b func,void *params) {
 
        moldyn->func1b=func;
-       moldyn->pot1b_params=params;
 
        return 0;
 }
@@ -173,7 +172,6 @@ int set_potential1b(t_moldyn *moldyn,pf_func1b func,void *params) {
 int set_potential2b(t_moldyn *moldyn,pf_func2b func,void *params) {
 
        moldyn->func2b=func;
-       moldyn->pot2b_params=params;
 
        return 0;
 }
@@ -181,7 +179,6 @@ int set_potential2b(t_moldyn *moldyn,pf_func2b func,void *params) {
 int set_potential2b_post(t_moldyn *moldyn,pf_func2b_post func,void *params) {
 
        moldyn->func2b_post=func;
-       moldyn->pot2b_params=params;
 
        return 0;
 }
@@ -189,7 +186,13 @@ int set_potential2b_post(t_moldyn *moldyn,pf_func2b_post func,void *params) {
 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;
 }
@@ -1449,7 +1452,8 @@ printf("\n\n");
  * 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;
@@ -1465,7 +1469,8 @@ inline int virial_calc(t_atom *a,t_3dvec *f,t_3dvec *d) {
  * 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;
@@ -1492,45 +1497,6 @@ inline int check_per_bound(t_moldyn *moldyn,t_3dvec *a) {
        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
  */
index 3c53a86..1300998 100644 (file)
--- a/moldyn.h
+++ b/moldyn.h
@@ -84,13 +84,11 @@ typedef struct s_moldyn {
 
        /* 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 */
@@ -149,6 +147,12 @@ typedef struct s_moldyn {
        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 */
@@ -164,115 +168,6 @@ typedef struct s_moldyn {
 #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
  *
@@ -323,6 +218,8 @@ typedef struct s_tersoff_mult_params {
  *
  */
 
+#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 */
 
@@ -446,17 +343,12 @@ int moldyn_integrate(t_moldyn *moldyn);
 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);
 
index 0d933b6..e2a80e4 100644 (file)
@@ -17,7 +17,7 @@
 
 #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) {
 
@@ -26,7 +26,7 @@ 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;
 
index 7d45a17..1738ea5 100644 (file)
@@ -16,8 +16,8 @@
 #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) {
 
@@ -26,7 +26,7 @@ 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;
index 87bb187..972075d 100644 (file)
@@ -17,7 +17,7 @@
 
 #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) {
@@ -59,7 +59,7 @@ int tersoff_mult_1bp(t_moldyn *moldyn,t_atom *ai) {
        t_tersoff_exchange *exchange;
        
        brand=ai->brand;
-       params=moldyn->pot1b_params;
+       params=moldyn->pot_params;
        exchange=&(params->exchange);
 
        /*
@@ -95,7 +95,7 @@ int tersoff_mult_2bp(t_moldyn *moldyn,t_atom *ai,t_atom *aj,u8 bc) {
        double s_r;
        double arg;
 
-       params=moldyn->pot2b_params;
+       params=moldyn->pot_params;
        brand=aj->brand;
        exchange=&(params->exchange);
 
@@ -281,7 +281,7 @@ int tersoff_mult_post_2bp(t_moldyn *moldyn,t_atom *ai,t_atom *aj,u8 bc) {
        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! */
@@ -430,7 +430,7 @@ int tersoff_mult_3bp(t_moldyn *moldyn,t_atom *ai,t_atom *aj,t_atom *ak,u8 bc) {
        double tmp;
        int brand;
 
-       params=moldyn->pot3b_params;
+       params=moldyn->pot_params;
        exchange=&(params->exchange);
 
        if(!(exchange->run3bp))
diff --git a/sic.c b/sic.c
index f97ffe8..e148709 100644 (file)
--- a/sic.c
+++ b/sic.c
@@ -8,9 +8,13 @@
 #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;