MOAB: Mesh Oriented datABase
(version 5.4.1)
|
00001 /* ***************************************************************** 00002 MESQUITE -- The Mesh Quality Improvement Toolkit 00003 00004 Copyright 2004 Sandia Corporation and Argonne National 00005 Laboratory. Under the terms of Contract DE-AC04-94AL85000 00006 with Sandia Corporation, the U.S. Government retains certain 00007 rights in this software. 00008 00009 This library is free software; you can redistribute it and/or 00010 modify it under the terms of the GNU Lesser General Public 00011 License as published by the Free Software Foundation; either 00012 version 2.1 of the License, or (at your option) any later version. 00013 00014 This library is distributed in the hope that it will be useful, 00015 but WITHOUT ANY WARRANTY; without even the implied warranty of 00016 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00017 Lesser General Public License for more details. 00018 00019 You should have received a copy of the GNU Lesser General Public License 00020 (lgpl.txt) along with this library; if not, write to the Free Software 00021 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 00022 00023 [email protected], [email protected], [email protected], 00024 [email protected], [email protected], [email protected] 00025 00026 ***************************************************************** */ 00027 // -*- Mode : c++; tab-width: 3; c-tab-always-indent: t; indent-tabs-mode: nil; c-basic-offset: 3 00028 // -*- 00029 00030 /*! \file CompositeOFScalarMultiply.hpp 00031 00032 Header file for the MBMesquite:: CompositeOFScalarMultiply class 00033 00034 \author Michael Brewer 00035 \date 2002-06-24 00036 */ 00037 00038 #ifndef CompositeOFScalarMultiply_hpp 00039 #define CompositeOFScalarMultiply_hpp 00040 00041 #include "Mesquite.hpp" 00042 #include "ObjectiveFunction.hpp" 00043 00044 namespace MBMesquite 00045 { 00046 /*! \class CompositeOFScalarMultiply 00047 \brief Scales a given an ObjectiveFunction. 00048 */ 00049 class MsqMeshEntity; 00050 class PatchData; 00051 class MsqError; 00052 class MeshDomainAssoc; 00053 00054 class MESQUITE_EXPORT CompositeOFScalarMultiply : public ObjectiveFunction 00055 { 00056 public: 00057 CompositeOFScalarMultiply( double, ObjectiveFunction*, bool delete_OF = false ); 00058 virtual ~CompositeOFScalarMultiply(); 00059 00060 //!\brief Called at start of instruction queue processing 00061 //! 00062 //! Do any preliminary global initialization, consistency checking, 00063 //! etc. 00064 virtual void initialize_queue( MeshDomainAssoc* mesh_and_domain, const Settings* settings, MsqError& err ); 00065 00066 virtual bool initialize_block_coordinate_descent( MeshDomainAssoc* mesh_and_domain, 00067 const Settings* settings, 00068 PatchSet* user_set, 00069 MsqError& err ); 00070 00071 virtual bool evaluate( EvalType type, PatchData& pd, double& value_out, bool free, MsqError& err ); 00072 00073 virtual bool evaluate_with_gradient( EvalType type, 00074 PatchData& pd, 00075 double& value_out, 00076 std::vector< Vector3D >& grad_out, 00077 MsqError& err ); 00078 00079 virtual bool evaluate_with_Hessian_diagonal( EvalType type, 00080 PatchData& pd, 00081 double& value_out, 00082 std::vector< Vector3D >& grad_out, 00083 std::vector< SymMatrix3D >& hess_diag_out, 00084 MsqError& err ); 00085 00086 virtual bool evaluate_with_Hessian( EvalType type, 00087 PatchData& pd, 00088 double& value_out, 00089 std::vector< Vector3D >& grad_out, 00090 MsqHessian& Hessian_out, 00091 MsqError& err ); 00092 00093 virtual ObjectiveFunction* clone() const; 00094 00095 virtual void clear(); 00096 00097 virtual int min_patch_layers() const; 00098 00099 private: 00100 ObjectiveFunction* objFunc; 00101 double mAlpha; 00102 bool deleteObjFunc; 00103 }; 00104 } // namespace MBMesquite 00105 #endif // CompositeOFScalarMultiply_hpp