text: // ---------------------------------------------------------------------
  //
  // Copyright (c) 2019 - 2020 by the IBAMR developers
  // All rights reserved.
  //
  // This file is part of IBAMR.
  //
  // IBAMR is free software and is distributed under the 3-clause BSD
  // license. The full text of the license can be found in the file
  // COPYRIGHT at the top level directory of IBAMR.
  //
  // ---------------------------------------------------------------------
  
  /////////////////////////////// INCLUDE GUARD ////////////////////////////////
  
  #ifndef included_CFGiesekusRelaxation
  #define included_CFGiesekusRelaxation
  
  /////////////////////////////// INCLUDES /////////////////////////////////////
  
  #include <ibamr/config.h>
  
  #include "ibamr/CFRelaxationOperator.h"
  #include "ibamr/ibamr_enums.h"
  
  #include "Box.h"
  #include "CartesianPatchGeometry.h"
  #include "CellData.h"
  #include "CellIndex.h"
  #include "CellVariable.h"
  #include "Index.h"
  #include "IntVector.h"
  #include "Patch.h"
  #include "PatchGeometry.h"
  #include "PatchHierarchy.h"
  #include "PatchLevel.h"
  #include "Variable.h"
  #include "tbox/Database.h"
  #include "tbox/Pointer.h"
  #include "tbox/Utilities.h"
  
  #include <string>
  
  /////////////////////////////// CLASS DEFINITION /////////////////////////////
  
  namespace IBAMR
  {
  /*!
   * \brief Class CFGiesekusRelaxation is a concrete CFRelaxationOperator that computes the relaxation function for the
   * Giesekus fluid model.
   */
  class CFGiesekusRelaxation : public CFRelaxationOperator
  {
  public:
      /*!
       * \brief This constructor reads in the parameters for the model from the input database.
       */
      CFGiesekusRelaxation(const std::string& object_name, SAMRAI::tbox::Pointer<SAMRAI::tbox::Database> input_db);
  
      /*!
       * \brief Default constructor.
       *
       * \note This constructor is not implemented and should not be used.
       */
      CFGiesekusRelaxation() = delete;
  
      /*!
       * \brief Copy constructor.
       *
       * \note This constructor is not implemented and should not be used.
       */
      CFGiesekusRelaxation(const CFGiesekusRelaxation& from) = delete;
  
      /*!
       * \brief Assignment operator.
       *
       * \note This operator is not implemented and should not be used.
       */
      CFGiesekusRelaxation& operator=(const CFGiesekusRelaxation& that) = delete;
  
      /*!
       * \brief Empty destructor.
       */
      ~CFGiesekusRelaxation() = default;
  
      /*!
       * \name Methods to set patch data.
       */
      //\{
  
      /*!
       * \brief Evaluate the function on the patch interior.
       */
      void setDataOnPatch(const int data_idx,
                          SAMRAI::tbox::Pointer<SAMRAI::hier::Variable<NDIM> > var,
                          SAMRAI::tbox::Pointer<SAMRAI::hier::Patch<NDIM> > patch,
                          const double data_time,
                          const bool initial_time = false,
                          SAMRAI::tbox::Pointer<SAMRAI::hier::PatchLevel<NDIM> > patch_level =
                              SAMRAI::tbox::Pointer<SAMRAI::hier::PatchLevel<NDIM> >(NULL)) override;
  
      //\}
  
  private:
      double d_alpha, d_lambda;
  };
  
  } // Namespace IBAMR
  #endif
  