Introduce fatal error for GB with FE
authorMark Abraham <mark.j.abraham@gmail.com>
Wed, 1 May 2013 15:06:56 +0000 (17:06 +0200)
committerGerrit Code Review <gerrit@gerrit.gromacs.org>
Fri, 17 May 2013 09:00:01 +0000 (11:00 +0200)
Old code silently computed zeroes for Coulomb(SR) when using
Generalized Born and the free energy kernel, because of the
inappropriate use of a default branch of a switch statement.

Fixed the default branch for icoul and ivdw switch statements to issue
gmx_incons (similar to usage in the Verlet kernel code). Now we invoke
explicit code paths for all legal values of icoul and ivdw. Added
gmx_fatal for un-implemented GB case (similar to the gmx_fatal for
Buckingham with this free energy kernel).

Partial fix for #1237

Change-Id: I30684aed9fba9beac9b1b87eb99e2cbc7e7e374d

src/gmxlib/nonbonded/nb_free_energy.c

index 61277a40d769ca8ef5865fa117464a5e2440eab1..082fd28d43815a4fc40838acca1e8f8dd39f0ee6 100644 (file)
@@ -414,10 +414,18 @@ gmx_nb_free_energy_kernel(t_nblist *                nlist,
                                 FscalC[i]  = -qq[i]*tabscale*FF*rC*rpinvC;
                                 break;
 
-                            default:
+                            case GMX_NBKERNEL_ELEC_GENERALIZEDBORN:
+                                gmx_fatal(FARGS, "Free energy and GB not implemented.\n");
+                                break;
+
+                            case GMX_NBKERNEL_ELEC_NONE:
                                 FscalC[i]  = 0.0;
                                 Vcoul[i]   = 0.0;
                                 break;
+
+                            default:
+                                gmx_incons("Invalid icoul in free energy kernel");
+                                break;
                         }
 
                         if (fr->coulomb_modifier == eintmodPOTSWITCH)
@@ -492,10 +500,14 @@ gmx_nb_free_energy_kernel(t_nblist *                nlist,
                                 FscalV[i] -= c12[i]*tabscale*FF*rV*rpinvV;
                                 break;
 
-                            default:
+                            case GMX_NBKERNEL_VDW_NONE:
                                 Vvdw[i]    = 0.0;
                                 FscalV[i]  = 0.0;
                                 break;
+
+                            default:
+                                gmx_incons("Invalid ivdw in free energy kernel");
+                                break;
                         }
 
                         if (fr->vdw_modifier == eintmodPOTSWITCH)