| /** @defgroup FEMparm FEMparm class | |
| * @brief Parameter structure for FEM-specific variables from input files | |
| */ | |
| /** | |
| * @file femparm.h | |
| * @ingroup FEMparm | |
| * @brief Contains declarations for class FEMparm | |
| * @version $Id$ | |
| * @author Nathan A. Baker | |
| * | |
| * @attention | |
| * @verbatim | |
| * | |
| * APBS -- Adaptive Poisson-Boltzmann Solver | |
| * | |
| * Nathan A. Baker (nathan.baker@pnnl.gov) | |
| * Pacific Northwest National Laboratory | |
| * | |
| * Additional contributing authors listed in the code documentation. | |
| * | |
| * Copyright (c) 2010-2020 Battelle Memorial Institute. Developed at the | |
| * Pacific Northwest National Laboratory, operated by Battelle Memorial | |
| * Institute, Pacific Northwest Division for the U.S. Department of Energy. | |
| * | |
| * Portions Copyright (c) 2002-2010, Washington University in St. Louis. | |
| * Portions Copyright (c) 2002-2010, Nathan A. Baker. | |
| * Portions Copyright (c) 1999-2002, The Regents of the University of | |
| * California. | |
| * Portions Copyright (c) 1995, Michael Holst. | |
| * All rights reserved. | |
| * | |
| * Redistribution and use in source and binary forms, with or without | |
| * modification, are permitted provided that the following conditions are met: | |
| * | |
| * Redistributions of source code must retain the above copyright notice, this | |
| * list of conditions and the following disclaimer. | |
| * | |
| * Redistributions in binary form must reproduce the above copyright notice, | |
| * this list of conditions and the following disclaimer in the documentation | |
| * and/or other materials provided with the distribution. | |
| * | |
| * Neither the name of the developer nor the names of its contributors may be | |
| * used to endorse or promote products derived from this software without | |
| * specific prior written permission. | |
| * | |
| * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | |
| * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |
| * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |
| * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE | |
| * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR | |
| * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF | |
| * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | |
| * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | |
| * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |
| * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF | |
| * THE POSSIBILITY OF SUCH DAMAGE. | |
| * | |
| * @endverbatim | |
| */ | |
| /* Generic header files */ | |
| /** | |
| * @brief Adaptive refinment error estimate tolerance key | |
| * @ingroup FEMparm | |
| * @author Nathan Baker | |
| */ | |
| enum eFEMparm_EtolType { | |
| FET_SIMP=0, /**< per-simplex error tolerance */ | |
| FET_GLOB=1, /**< global error tolerance */ | |
| FET_FRAC=2 /**< fraction of simplices we want to have refined */ | |
| }; | |
| /** | |
| * @brief Declare FEparm_EtolType type | |
| * @ingroup FEMparm | |
| * @author Nathan Baker | |
| */ | |
| typedef enum eFEMparm_EtolType FEMparm_EtolType; | |
| /** | |
| * @brief Adaptive refinment error estimator method | |
| * @ingroup FEMparm | |
| * @note Do not change these values; they correspond to settings in FEtk | |
| * @author Nathan Baker | |
| */ | |
| enum eFEMparm_EstType { | |
| FRT_UNIF=0, /**< Uniform refinement */ | |
| FRT_GEOM=1, /**< Geometry-based (i.e. surfaces and charges) refinement */ | |
| FRT_RESI=2, /**< Nonlinear residual estimate-based refinement */ | |
| FRT_DUAL=3, /**< Dual-solution weight nonlinear residual estimate-based | |
| * refinement */ | |
| FRT_LOCA=4 /**< Local problem error estimate-based refinement */ | |
| }; | |
| /** | |
| * @brief Declare FEMparm_EstType type | |
| * @ingroup FEMparm | |
| */ | |
| typedef enum eFEMparm_EstType FEMparm_EstType; | |
| /** | |
| * @brief Calculation type | |
| * @ingroup FEMparm | |
| */ | |
| enum eFEMparm_CalcType { | |
| FCT_MANUAL, /**< fe-manual */ | |
| FCT_NONE /**< unspecified */ | |
| }; | |
| /** | |
| * @brief Declare FEMparm_CalcType type | |
| * @ingroup FEMparm | |
| */ | |
| typedef enum eFEMparm_CalcType FEMparm_CalcType; | |
| /** | |
| * @ingroup FEMparm | |
| * @author Nathan Baker | |
| * @brief Parameter structure for FEM-specific variables from input files | |
| */ | |
| struct sFEMparm { | |
| int parsed; /**< Flag: Has this structure been filled with | |
| * anything other than * the default values? (0 = no, | |
| * 1 = yes) */ | |
| FEMparm_CalcType type; /**< Calculation type */ | |
| int settype; /**< Boolean */ | |
| double glen[3]; /**< Domain side lengths (in Å) */ | |
| int setglen; /**< Boolean */ | |
| double etol; /**< Error tolerance for refinement; interpretation depends | |
| * on the adaptive refinement method chosen */ | |
| int setetol; /**< Boolean */ | |
| FEMparm_EtolType ekey; /**< Adaptive refinment interpretation of error | |
| * tolerance */ | |
| int setekey; /**< Boolean */ | |
| FEMparm_EstType akeyPRE; /**< Adaptive refinment error estimator method | |
| * for pre-solution refine. Note, this should | |
| * either be FRT_UNIF or FRT_GEOM. */ | |
| int setakeyPRE; /**< Boolean */ | |
| FEMparm_EstType akeySOLVE; /**< Adaptive refinment error estimator method | |
| * for a posteriori solution-based refinement. */ | |
| int setakeySOLVE; /**< Boolean */ | |
| int targetNum; /**< Initial mesh will continue to be marked and refined | |
| * with the method specified by akeyPRE until the mesh | |
| * contains this many vertices or until targetRes is | |
| * reached. */ | |
| int settargetNum; /**< Boolean */ | |
| double targetRes; /**< Initial mesh will continue to be marked and refined | |
| * with the method specified by akeyPRE until the mesh | |
| * contains no markable simplices with longest edges | |
| * above this size or until targetNum is reached. */ | |
| int settargetRes; /**< Boolean */ | |
| int maxsolve; /**< Maximum number of solve-estimate-refine cycles */ | |
| int setmaxsolve; /**< Boolean */ | |
| int maxvert; /**< Maximum number of vertices in mesh (ignored if less | |
| * than zero) */ | |
| int setmaxvert; /**< Boolean */ | |
| int pkey; /**< Boolean sets the pkey type for going into AM_Refine | |
| * pkey = 0 for non-HB based methods | |
| * pkey = 1 for HB based methods */ | |
| int useMesh; /**< Indicates whether we use external finite element mesh */ | |
| int meshID; /**< External finite element mesh ID (if used) */ | |
| }; | |
| /** @typedef FEMparm | |
| * @ingroup FEMparm | |
| * @brief Declaration of the FEMparm class as the FEMparm structure | |
| */ | |
| typedef struct sFEMparm FEMparm; | |
| /* /////////////////////////////////////////////////////////////////////////// | |
| // Class NOsh: Non-inlineable methods (nosh.c) | |
| /////////////////////////////////////////////////////////////////////////// */ | |
| /** @brief Construct FEMparm | |
| * @ingroup FEMparm | |
| * @author Nathan Baker | |
| * @param type FEM calculation type | |
| * @returns Newly allocated and initialized Vpmgp object | |
| */ | |
| VEXTERNC FEMparm* FEMparm_ctor(FEMparm_CalcType type); | |
| /** @brief FORTRAN stub to construct FEMparm | |
| * @ingroup FEMparm | |
| * @author Nathan Baker | |
| * @param thee Pointer to allocated FEMparm object | |
| * @param type FEM calculation type | |
| * @returns 1 if successful, 0 otherwise | |
| */ | |
| VEXTERNC int FEMparm_ctor2(FEMparm *thee, FEMparm_CalcType type); | |
| /** @brief Object destructor | |
| * @ingroup FEMparm | |
| * @author Nathan Baker | |
| * @param thee Pointer to memory location of FEMparm object | |
| */ | |
| VEXTERNC void FEMparm_dtor(FEMparm **thee); | |
| /** @brief FORTRAN stub for object destructor | |
| * @ingroup FEMparm | |
| * @author Nathan Baker | |
| * @param thee Pointer to FEMparm object | |
| */ | |
| VEXTERNC void FEMparm_dtor2(FEMparm *thee); | |
| /** | |
| * @brief Consistency check for parameter values stored in object | |
| * @ingroup FEMparm | |
| * @author Nathan Baker | |
| * @param thee FEMparm object | |
| * @returns 1 if OK, 0 otherwise | |
| */ | |
| VEXTERNC int FEMparm_check(FEMparm *thee); | |
| /** @brief Copy target object into thee | |
| @ingroup FEMparm | |
| @author Nathan Baker | |
| @param thee Destination object | |
| @param source Source object | |
| */ | |
| VEXTERNC void FEMparm_copy(FEMparm *thee, FEMparm *source); | |
| /** | |
| * @brief Parse an MG keyword from an input file | |
| * @ingroup MGparm | |
| * @author Nathan Baker | |
| * @param thee MGparm object | |
| * @param tok Token to parse | |
| * @param sock Stream for more tokens | |
| * @return VRC_SUCCESS if matched and assigned; VRC_FAILURE if matched, but there's | |
| * some sort of error (i.e., too few args); VRC_WARNING if not matched | |
| */ | |
| VEXTERNC Vrc_Codes FEMparm_parseToken(FEMparm *thee, char tok[VMAX_BUFSIZE], | |
| Vio *sock); | |