From 296a35b943e922173ce648ec76a4472e287af108 Mon Sep 17 00:00:00 2001 From: hackbard Date: Mon, 5 Mar 2007 10:05:23 +0000 Subject: [PATCH] new structure (skipped 2 inlines) same code! --- Makefile | 2 +- moldyn.c | 56 +++---------- moldyn.h | 138 ++++--------------------------- potentials/harmonic_oscillator.c | 4 +- potentials/lennard_jones.c | 6 +- potentials/tersoff.c | 10 +-- sic.c | 6 +- 7 files changed, 42 insertions(+), 180 deletions(-) diff --git a/Makefile b/Makefile index 37fafcc..3e31459 100644 --- 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: diff --git a/moldyn.c b/moldyn.c index 1ab88eb..dae975c 100644 --- 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(air),&(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 */ diff --git a/moldyn.h b/moldyn.h index 3c53a86..1300998 100644 --- 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); diff --git a/potentials/harmonic_oscillator.c b/potentials/harmonic_oscillator.c index 0d933b6..e2a80e4 100644 --- a/potentials/harmonic_oscillator.c +++ b/potentials/harmonic_oscillator.c @@ -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; diff --git a/potentials/lennard_jones.c b/potentials/lennard_jones.c index 7d45a17..1738ea5 100644 --- a/potentials/lennard_jones.c +++ b/potentials/lennard_jones.c @@ -16,8 +16,8 @@ #include #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; diff --git a/potentials/tersoff.c b/potentials/tersoff.c index 87bb187..972075d 100644 --- a/potentials/tersoff.c +++ b/potentials/tersoff.c @@ -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 --- a/sic.c +++ b/sic.c @@ -8,9 +8,13 @@ #include #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; -- 2.20.1