def _get_bnl(self, C_AMP, vs30):
        """
        Gets the nonlinear term, given by equation 8 of Atkinson & Boore 2006
        """
        # Default case 8d
        bnl = np.zeros_like(vs30)
        if np.all(vs30 >= self.CONSTS["Vref"]):
            return bnl
        # Case 8a
        bnl[vs30 < self.CONSTS["v1"]] = C_AMP["b1sa"]
        # Cade 8b
        idx = np.logical_and(vs30 > self.CONSTS["v1"],
                             vs30 <= self.CONSTS["v2"])

        if np.any(idx):
            bnl[idx] = (C_AMP["b1sa"] - C_AMP["b2sa"]) *\
                (np.log(vs30[idx] / self.CONSTS["v2"]) /
                 np.log(self.CONSTS["v1"] / self.CONSTS["v2"])) + C_AMP["b2sa"]
        # Case 8c
        idx = np.logical_and(vs30 > self.CONSTS["v2"],
                             vs30 < self.CONSTS["Vref"])
        if np.any(idx):
            bnl[idx] = C_AMP["b2sa"] *\
                np.log(vs30[idx] / self.CONSTS["Vref"]) /\
                np.log(self.CONSTS["v2"] / self.CONSTS["Vref"])
        return bnl
Gets the nonlinear term, given by equation 8 of Atkinson & Boore 2006