/** @defgroup APOLparm APOLparm class * @brief Parameter structure for APOL-specific variables from input files */ /** * @file femparm.h * @ingroup APOLparm * @brief Contains declarations for class APOLparm * @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 */ #ifndef _APOLPARM_H_ #define _APOLPARM_H_ /* Generic header files */ #include "apbscfg.h" #include "maloc/maloc.h" #include "generic/vhal.h" #include "generic/vstring.h" #include "generic/vparam.h" /** * @ingroup APOLparm * @brief Define energy calculation enumeration */ enum eAPOLparm_calcEnergy { ACE_NO=0, /**< Do not perform energy calculation */ ACE_TOTAL=1, /**< Calculate total energy only */ ACE_COMPS=2 /**< Calculate per-atom energy components */ }; /** * @ingroup APOLparm * @brief Define eAPOLparm_calcEnergy enumeration as APOLparm_calcEnergy */ typedef enum eAPOLparm_calcEnergy APOLparm_calcEnergy; /** * @ingroup APOLparm * @brief Define force calculation enumeration */ enum eAPOLparm_calcForce { ACF_NO=0, /**< Do not perform force calculation */ ACF_TOTAL=1, /**< Calculate total force only */ ACF_COMPS=2 /**< Calculate per-atom force components */ }; /** * @ingroup APOLparm * @brief Define eAPOLparm_calcForce enumeration as APOLparm_calcForce */ typedef enum eAPOLparm_calcForce APOLparm_calcForce; /** * @ingroup APOLparm * @brief Define force calculation enumeration */ enum eAPOLparm_doCalc { ACD_NO=0, /**< Do not perform calculation */ ACD_YES=1, /**< Perform calculations */ ACD_ERROR=2 /**< Error setting up calculation */ }; /** * @ingroup APOLparm * @brief Define eAPOLparm_calcForce enumeration as APOLparm_calcForce */ typedef enum eAPOLparm_doCalc APOLparm_doCalc; /** * @ingroup APOLparm * @author David Gohara * @brief Parameter structure for APOL-specific variables from input files */ struct sAPOLparm { int parsed; /**< Flag: Has this structure been filled with anything other than the default values? (0 = no, 1 = yes) */ double grid[3]; /**< Grid spacing */ int setgrid; /**< Flag, @see grid */ int molid; /**< Molecule ID to perform calculation on */ int setmolid; /**< Flag, @see molid */ double bconc; /**< Vacc sphere density */ int setbconc; /**< Flag, @see bconc */ double sdens; /**< Vacc sphere density */ int setsdens; /**< Flag, @see sdens */ double dpos; /**< Atom position offset */ int setdpos; /**< Flag, @see dpos */ double press; /**< Solvent pressure */ int setpress; /**< Flag, @see press */ Vsurf_Meth srfm; /**< Surface calculation method */ int setsrfm; /**< Flag, @see srfm */ double srad; /**< Solvent radius */ int setsrad; /**< Flag, @see srad */ double swin; /**< Cubic spline window */ int setswin; /**< Flag, @see swin */ double temp; /**< Temperature (in K) */ int settemp; /**< Flag, @see temp */ double gamma; /**< Surface tension for apolar energies/forces * (in kJ/mol/A^2) */ int setgamma; /**< Flag, @see gamma */ APOLparm_calcEnergy calcenergy; /**< Energy calculation flag */ int setcalcenergy; /**< Flag, @see calcenergy */ APOLparm_calcForce calcforce; /**< Atomic forces calculation */ int setcalcforce; /**< Flag, @see calcforce */ double watsigma; /**< Water oxygen Lennard-Jones radius (A) */ double watepsilon; /**< Water oxygen Lennard-Jones well depth (kJ/mol) */ double sasa; /**< Solvent accessible surface area for this calculation */ double sav; /**< Solvent accessible volume for this calculation */ double wcaEnergy; /**< wcaEnergy */ double totForce[3]; /**< Total forces on x, y, z */ int setwat; /**< Boolean for determining if a water parameter * is supplied. Yes = 1, No = 0 */ }; /** @typedef APOLparm * @ingroup APOLparm * @brief Declaration of the APOLparm class as the APOLparm structure */ typedef struct sAPOLparm APOLparm; /* /////////////////////////////////////////////////////////////////////////// // Class NOsh: Non-inlineable methods (nosh.c) /////////////////////////////////////////////////////////////////////////// */ /** @brief Construct APOLparm * @ingroup APOLparm * @author David Gohara * @returns Newly allocated and initialized Vpmgp object */ VEXTERNC APOLparm* APOLparm_ctor(); /** @brief FORTRAN stub to construct APOLparm * @ingroup APOLparm * @author David Gohara, Yong Huang * @param thee Pointer to allocated APOLparm object * @returns Success enumeration */ VEXTERNC Vrc_Codes APOLparm_ctor2(APOLparm *thee); /** @brief Object destructor * @ingroup APOLparm * @author David Gohara * @param thee Pointer to memory location of APOLparm object */ VEXTERNC void APOLparm_dtor(APOLparm **thee); /** @brief FORTRAN stub for object destructor * @ingroup APOLparm * @author David Gohara * @param thee Pointer to APOLparm object */ VEXTERNC void APOLparm_dtor2(APOLparm *thee); /** * @brief Consistency check for parameter values stored in object * @ingroup APOLparm * @author David Gohara, Yong Huang * @param thee APOLparm object * @returns Success enumeration */ VEXTERNC Vrc_Codes APOLparm_check(APOLparm *thee); /** @brief Copy target object into thee @ingroup APOLparm @author Nathan Baker @param thee Destination object @param source Source object */ VEXTERNC void APOLparm_copy(APOLparm *thee, APOLparm *source); /** * @brief Parse an MG keyword from an input file * @ingroup MGparm * @author David Gohara * @param thee MGparm object * @param tok Token to parse * @param sock Stream for more tokens * @returns Success enumeration (1 if matched and assigned; -1 if matched, but there's * some sort of error (i.e., too few args); 0 if not matched) */ VEXTERNC Vrc_Codes APOLparm_parseToken(APOLparm *thee, char tok[VMAX_BUFSIZE], Vio *sock); #endif