text: /*!
   *  \file VariableLaplacian.h
   *	\brief Standard kernel for coupling a variable coefficient to a Laplacian function
   *	\details This file creates a standard MOOSE kernel for the coupling of a non-linear
   *            variable coefficient to a standard Laplacian function (i.e., the 2nd
   *            derivative of a variable). This can be used to represent variable diffusion
   *            or a Laplace's equation for pressure in a Continuous Finite-Element sense.
   *
   *  \author Austin Ladshaw
   *	\date 12/10/2021
   *	\copyright This kernel was designed and built at Oak Ridge National
   *              Laboratory by Austin Ladshaw for research in electrochemical
   *              CO2 conversion.
   *
   *			   Austin Ladshaw does not claim any ownership or copyright to the
   *			   MOOSE framework in which these kernels are constructed, only
   *			   the kernels themselves. The MOOSE framework copyright is held
   *			   by the Battelle Energy Alliance, LLC (c) 2010, all rights reserved.
   */
  
  /****************************************************************/
  /*               DO NOT MODIFY THIS HEADER                      */
  /* MOOSE - Multiphysics Object Oriented Simulation Environment  */
  /*                                                              */
  /*           (c) 2010 Battelle Energy Alliance, LLC             */
  /*                   ALL RIGHTS RESERVED                        */
  /*                                                              */
  /*          Prepared by Battelle Energy Alliance, LLC           */
  /*            Under Contract No. DE-AC07-05ID14517              */
  /*            With the U. S. Department of Energy               */
  /*                                                              */
  /*            See COPYRIGHT for full restrictions               */
  /****************************************************************/
  
  #pragma once
  
  #include "Kernel.h"
  
  /// VariableLaplacian class object inherits from Kernel object
  /** This class object inherits from the Kernel object in the MOOSE framework.
  	All public and protected members of this class are required function overrides.*/
  class VariableLaplacian : public Kernel
  {
  public:
    /// Required new syntax for InputParameters
    static InputParameters validParams();
  
  	/// Required constructor for objects in MOOSE
  	VariableLaplacian(const InputParameters & parameters);
  
  protected:
  	/// Required residual function for standard kernels in MOOSE
  	/** This function returns a residual contribution for this object.*/
  	virtual Real computeQpResidual() override;
  
  	/// Required Jacobian function for standard kernels in MOOSE
  	/** This function returns a Jacobian contribution for this object. The Jacobian being
  		computed is the associated diagonal element in the overall Jacobian matrix for the
  		system and is used in preconditioning of the linear sub-problem. */
  	virtual Real computeQpJacobian() override;
  
    /// Not Required, but aids in the preconditioning step
    /** This function returns the off diagonal Jacobian contribution for this object. By
          returning a non-zero value we will hopefully improve the convergence rate for the
          cross coupling of the variables. */
    virtual Real computeQpOffDiagJacobian(unsigned int jvar) override;
  
    const VariableValue & _coeff;			  ///< Coefficient variable
    const unsigned int _coeff_var;		  ///< Variable identification for coefficient 
  
  private:
  
  };
  