From 535db919315af7aaddd5f9d100364fd3f9ebe585 Mon Sep 17 00:00:00 2001 From: Sebastian Schunert Date: Mon, 11 Feb 2019 10:28:54 -0700 Subject: [PATCH] Add PorosityAux (#367) --- include/auxkernels/MDGranularPorosityAux.h | 39 +++++++++++ src/auxkernels/MDGranularPorosityAux.C | 61 ++++++++++++++++++ src/userobjects/LAMMPSFileRunner.C | 4 +- .../lammps_file/gold/granular_out.e | Bin 37580 -> 41500 bytes 4 files changed, 102 insertions(+), 2 deletions(-) create mode 100644 include/auxkernels/MDGranularPorosityAux.h create mode 100644 src/auxkernels/MDGranularPorosityAux.C diff --git a/include/auxkernels/MDGranularPorosityAux.h b/include/auxkernels/MDGranularPorosityAux.h new file mode 100644 index 00000000..1e282033 --- /dev/null +++ b/include/auxkernels/MDGranularPorosityAux.h @@ -0,0 +1,39 @@ +/**********************************************************************/ +/* DO NOT MODIFY THIS HEADER */ +/* MAGPIE - Mesoscale Atomistic Glue Program for Integrated Execution */ +/* */ +/* Copyright 2017 Battelle Energy Alliance, LLC */ +/* ALL RIGHTS RESERVED */ +/**********************************************************************/ + +#ifndef MDGRANULARPOROSITYAUX_H +#define MDGRANULARPOROSITYAUX_H + +#include "AuxKernel.h" + +// forward declarations +class MDRunBase; +class MDGranularPorosityAux; + +template <> +InputParameters validParams(); + +class MDGranularPorosityAux : public AuxKernel +{ +public: + MDGranularPorosityAux(const InputParameters & params); + virtual ~MDGranularPorosityAux() {} + + virtual Real computeValue(); + +protected: + /// referene to the MDRunBase user object + const MDRunBase & _md_uo; + + const bool _compute_packing; + + /// property value that is computed only on qp = 0 + Real _packing_fraction; +}; + +#endif // MDGRANULARPOROSITYAUXx_H diff --git a/src/auxkernels/MDGranularPorosityAux.C b/src/auxkernels/MDGranularPorosityAux.C new file mode 100644 index 00000000..f866b6cc --- /dev/null +++ b/src/auxkernels/MDGranularPorosityAux.C @@ -0,0 +1,61 @@ +/**********************************************************************/ +/* DO NOT MODIFY THIS HEADER */ +/* MAGPIE - Mesoscale Atomistic Glue Program for Integrated Execution */ +/* */ +/* Copyright 2017 Battelle Energy Alliance, LLC */ +/* ALL RIGHTS RESERVED */ +/**********************************************************************/ + +#include "MDGranularPorosityAux.h" +#include "MDRunBase.h" + +registerMooseObject("MagpieApp", MDGranularPorosityAux); + +template <> +InputParameters +validParams() +{ + InputParameters params = validParams(); + params.addRequiredParam("user_object", "Name of MD runner UserObject"); + params.addParam("compute_packing_fraction", false, "Whether to compute porosity or packing fraction."); + params.addClassDescription( + "Computes porosity or packing fraction (1 - porosity) and injects it into and aux variable."); + return params; +} + +MDGranularPorosityAux::MDGranularPorosityAux(const InputParameters & parameters) + : AuxKernel(parameters), + _md_uo(getUserObject("user_object")), + _compute_packing(getParam("compute_packing_fraction")) +{ + // ensure MD particles are granular + if (!_md_uo.isGranular()) + mooseError("user_object stores non-granular particles."); + + // ensure variable is elemental + if (isNodal()) + mooseError("MDGranularPorosityAux only permits elemental variables."); +} + +Real +MDGranularPorosityAux::computeValue() +{ + if (_qp == 0) + { + _packing_fraction = 0.0; + + // get the overlapping MD particles + std::vector> gran_vol; + _md_uo.granularElementVolumes(_current_elem->unique_id(), gran_vol); + + // add the overlapping volumes + for (auto & p : gran_vol) + _packing_fraction += p.second; + + // divide by element volume + _packing_fraction /= _current_elem->volume(); + } + if (_compute_packing) + return _packing_fraction; + return 1 - _packing_fraction; +} diff --git a/src/userobjects/LAMMPSFileRunner.C b/src/userobjects/LAMMPSFileRunner.C index 09c0c9a6..d709eb4c 100644 --- a/src/userobjects/LAMMPSFileRunner.C +++ b/src/userobjects/LAMMPSFileRunner.C @@ -336,7 +336,7 @@ LAMMPSFileRunner::readLAMMPSFileHistory(std::pair filenames, largest_column = _prop_columns[i]; if (largest_column >= elements.size()) - mooseError("Error reading ", filename, " on line ", line); + mooseError("Error reading ", filenames.first, " on line ", line_before); #endif Point pos_before; @@ -364,7 +364,7 @@ LAMMPSFileRunner::readLAMMPSFileHistory(std::pair filenames, // we have determined largest_column in DEBUG so we can use it in mooseAssert mooseAssert(largest_column < elements.size(), - "Error reading " << filename << " on line " << line); + "Error reading " << filenames.second << " on line " << line_after); Point pos_after; for (unsigned int i = 0; i < _dim; ++i) diff --git a/tests/userobjects/lammps_file/gold/granular_out.e b/tests/userobjects/lammps_file/gold/granular_out.e index 0913564b25dae951e6ebb71bdc5d054bb3b1316e..23d571897e49f07b9431844908cb5702421ae814 100644 GIT binary patch delta 1044 zcmZ{hUuau(6vyxH=BB;*(`HT5wV~MFtQ&;guDLf!lQf98lepFWqZ>gOPQq=Iw9)*j zSz2ZlIzfu!2GehmA*Jise3;~+^!A~Ou$MlJGDgupi1cCNz{=2wOnupd=e8OC0lA#d z?|gsf+;h%7_x@-6!aBd)%OB!7j&qczis|t}IX$gcNOCqZ(Y(u-a%GNVD;VYlwu7qh0`KIoDjepWop>n7>{mFgGP{SkHOQ7Q zL0rdm;uYMphFJKy|Eo6)4nnIYd2iOhVviI4<-CWK~^V(%wUqhXO z(;njYBsLNG9h~6nMhO(qtG$ad74Tb z%Z^H_Dyd2$G>}jtyCrecBcZ#~_uqs_BBC}Dx<19GFJQF!wnh5lvn`VJYJboi_hP>K z7LJZ5pL_ZKIps@e3UKK4ewG@i~? z^s#EbT*6s>5Z8)5i1ln47bFj}GNs+&4FU-}U?**LK2RpI_E~`NQ?-PupFsexTX?#nltI K^6`-P?D8*9fJ9mV delta 692 zcmZ9IPe>F|9LMLqo&7tTySke@hQutJAdWh-f1O<-SBcnDM0qd}WZl_u*Ib3rkldh4 zU?H^i_23~Qv#5iSFnbW{xCgNif`Se~dkGivP|ztn^rj9`hwtb8KEKC%hwp<1efyMd zM`#b>I8K;btV~YN&QD&;UuDXI z6+Ayo)^L_r$QBm(GgN4x&i7H_6PmnC>hRiSvI@#fXihjp= z>TjXy7^LkjY&m4&!be6Cyi+ET{d6&w+Ie8Bs}ZLVwyz`$8sPGXCTbljfNuk zgJCp}Ie1bj>v*T0L?w8D6P*{$z2iG1qz@TJF<(^kX=#2=imB1`fEpc$<9ntPFGF3u znyyb7F-=S63#mj>k7~wLEUx7fh3HVhNF|F&UDJ(pA%$w&SwqI9k}B}qvs8p|Zp z8CAo+*n`Jn*Z+6%Od@6Oi<@rDD4XV~-ZwULMv)@sjY}mJKPR4;x!WNpTyfRBTYKn3 U%PZohvWjN+X^d@*;KRo7FLxNl^#A|>