first attempts: parallel, albe_fast. fpu_ctrl. cleaned first j loop.
[physik/posic.git] / potentials / albe.c
index ddfb3c6..02c254f 100644 (file)
@@ -24,6 +24,12 @@ int albe_mult_set_params(t_moldyn *moldyn,int element1,int element2) {
 
        t_albe_mult_params *p;
 
+       // set cutoff before parameters (actually only necessary for some pots)
+       if(moldyn->cutoff==0.0) {
+               printf("[albe] WARNING: no cutoff!\n");
+               return -1;
+       }
+
        /* alloc mem for potential parameters */
        moldyn->pot_params=malloc(sizeof(t_albe_mult_params));
        if(moldyn->pot_params==NULL) {
@@ -349,7 +355,7 @@ int albe_mult_3bp_j2(t_moldyn *moldyn,t_atom *ai,t_atom *aj,u8 bc) {
        v3_add(&(aj->f),&(aj->f),&force);
 
        /* virial */
-       virial_calc(aj,&force,&(exchange->dist_ij));
+       virial_calc(ai,&force,&(exchange->dist_ij));
 
 #ifdef DEBUG
 if(moldyn->time>DSTART&&moldyn->time<DEND) {
@@ -473,13 +479,13 @@ if(moldyn->time>DSTART&&moldyn->time<DEND) {
 }
 #endif
 
+       /* virial */
+       virial_calc(ai,&force,&dist_ij);
+
        /* force contribution to atom i */
        v3_scale(&force,&force,-1.0);
        v3_add(&(ai->f),&(ai->f),&force);
 
-       /* virial */
-       virial_calc(ai,&force,&dist_ij);
-
        /* derivative wrt k */
        v3_scale(&force,&dist_ik,-1.0*dfcg); // dri rik = - drk rik
        v3_scale(&tmp,&dcosdrk,fcdg);
@@ -501,13 +507,13 @@ if(moldyn->time>DSTART&&moldyn->time<DEND) {
 }
 #endif
 
+       /* virial */
+       virial_calc(ai,&force,&dist_ik);
+       
        /* force contribution to atom i */
        v3_scale(&force,&force,-1.0);
        v3_add(&(ai->f),&(ai->f),&force);
 
-       /* virial */
-       virial_calc(ai,&force,&dist_ik);
-       
        /* increase k counter */
        exchange->kcount++;