/******************************************************************************/ /* LYNX, a MOOSE-based application */ /* */ /* Copyright (C) 2017 by Antoine B. Jacquey and Mauro Cacace */ /* GFZ Potsdam, German Research Centre for Geosciences */ /* */ /* This program is free software: you can redistribute it and/or modify */ /* it under the terms of the GNU General Public License as published by */ /* the Free Software Foundation, either version 3 of the License, or */ /* (at your option) any later version. */ /* */ /* This program is distributed in the hope that it will be useful, */ /* but WITHOUT ANY WARRANTY; without even the implied warranty of */ /* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */ /* GNU General Public License for more details. */ /* */ /* You should have received a copy of the GNU General Public License */ /* along with this program. If not, see */ /******************************************************************************/ #ifndef LYNXSOLIDMOMENTUM_H #define LYNXSOLIDMOMENTUM_H #include "Kernel.h" #include "DerivativeMaterialInterface.h" #include "RankTwoTensor.h" #include "RankFourTensor.h" class LynxSolidMomentum; template <> InputParameters validParams(); class LynxSolidMomentum : public DerivativeMaterialInterface { public: LynxSolidMomentum(const InputParameters & parameters); virtual void computeResidual() override; virtual void computeJacobian() override; virtual void computeOffDiagJacobian(MooseVariableFEBase & jvar) override; using Kernel::computeOffDiagJacobian; protected: virtual Real computeQpResidual() override; virtual Real computeQpJacobian() override; virtual Real computeQpOffDiagJacobian(unsigned int jvar) override; virtual Real elasticJacobian(const RankFourTensor & jacobian_r4t, unsigned int i, unsigned int k, const RealGradient & grad_test, const RealGradient & grad_phi); virtual void computeAverageGradientTest(); virtual void computeAverageGradientPhi(); unsigned int _ndisp; bool _coupled_temp; bool _coupled_pf; const VariableValue & _pf; bool _coupled_plith; bool _coupled_pdyn; bool _coupled_dam; const unsigned int _component; bool _vol_locking_correction; const MaterialProperty & _stress; const MaterialProperty & _biot; const MaterialProperty & _tangent_modulus; const MaterialProperty & _dthermal_strain_dtemp; const MaterialProperty & _gravity; const MaterialProperty & _rho_b; const MaterialProperty & _drho_dtemp; const MaterialProperty & _drho_dev; const MaterialProperty & _dstress_ddamage; // Gradient of test function averaged over the element. Used in volumetric locking correction // calculation. std::vector> _avg_grad_test; // Gradient of phi function averaged over the element. Used in volumetric locking correction // calculation. std::vector> _avg_grad_phi; std::vector _disp_var; unsigned int _temp_var; unsigned int _pf_var; unsigned int _plith_var; unsigned int _pdyn_var; unsigned int _damage_var; }; #endif // LYNXSOLIDMOMENTUM_H