This boundary condition is esentially a Neumann 0-gradient boundary 
    condition with that 0-gradient state extended over a longer part of 
    the grid such that the third derivative also equals 0.
    
    This boundary condition has more of a geometric meaning than a physical 
    meaning. It produces a state in which the boundaries have to have all 
    gradients in deflection go to 0 (i.e. approach constant values) while 
    not specifying what those values must be.
    
    This uses a 0-curvature boundary condition for elastic thickness 
    that extends outside of the computational domain.

def BC_0Slope0Shear(self):
    i=0
    """
    This boundary condition is esentially a Neumann 0-gradient boundary 
    condition with that 0-gradient state extended over a longer part of 
    the grid such that the third derivative also equals 0.
    
    This boundary condition has more of a geometric meaning than a physical 
    meaning. It produces a state in which the boundaries have to have all 
    gradients in deflection go to 0 (i.e. approach constant values) while 
    not specifying what those values must be.
    
    This uses a 0-curvature boundary condition for elastic thickness 
    that extends outside of the computational domain.
    """
    
    if self.BC_W == '0Slope0Shear':
      i=0
      self.l2[i] = np.nan
      self.l1[i] = np.nan
      self.c0[i] += 0
      self.r1[i] += self.l1_coeff_i[i]
      self.r2[i] += self.l2_coeff_i[i]
      i=1
      self.l2[i] = np.nan
      self.l1[i] += 0
      self.c0[i] += 0
      self.r1[i] += 0
      self.r2[i] += self.l2_coeff_i[i]
    if self.BC_E == '0Slope0Shear':
      i=-2
      self.l2[i] += self.r2_coeff_i[i]
      self.l1[i] += 0
      self.c0[i] += 0
      self.r1[i] += 0
      self.r2[i] = np.nan
      i=-1
      self.l2[i] += self.r2_coeff_i[i]
      self.l1[i] += self.r1_coeff_i[i]
      self.c0[i] += 0
      self.r1[i] = np.nan
      self.r2[i] = np.nan