Line data Source code
1 : //* This file is part of the MOOSE framework
2 : //* https://mooseframework.inl.gov
3 : //*
4 : //* All rights reserved, see COPYRIGHT for full restrictions
5 : //* https://github.com/idaholab/moose/blob/master/COPYRIGHT
6 : //*
7 : //* Licensed under LGPL 2.1, please see LICENSE for details
8 : //* https://www.gnu.org/licenses/lgpl-2.1.html
9 : //*
10 :
11 : #ifdef MOOSE_MFEM_ENABLED
12 :
13 : #include "NLCurlCurlIntegrator.h"
14 :
15 : namespace Moose::MFEM
16 : {
17 26 : NLCurlCurlJacMatrixCoefficient::NLCurlCurlJacMatrixCoefficient(mfem::Coefficient & k,
18 : mfem::Coefficient & curlu_dk_dcurlu,
19 : mfem::VectorCoefficient & curlu_vec,
20 26 : mfem::real_t curlu_zero_tol)
21 : : mfem::MatrixCoefficient(curlu_vec.GetVDim()),
22 26 : _k_coef(k),
23 26 : _curlu_dk_dcurlu_coef(curlu_dk_dcurlu),
24 26 : _curlu_zero_tol(curlu_zero_tol),
25 26 : _curlu_hat_coef(curlu_vec, _curlu_zero_tol)
26 : {
27 26 : }
28 :
29 : void
30 0 : NLCurlCurlJacMatrixCoefficient::SetTime(mfem::real_t t)
31 : {
32 0 : MatrixCoefficient::SetTime(t);
33 0 : _k_coef.SetTime(t);
34 0 : _curlu_dk_dcurlu_coef.SetTime(t);
35 0 : _curlu_hat_coef.SetTime(t);
36 0 : }
37 :
38 : void
39 3063924 : NLCurlCurlJacMatrixCoefficient::Eval(mfem::DenseMatrix & K,
40 : mfem::ElementTransformation & T,
41 : const mfem::IntegrationPoint & ip)
42 : {
43 3063924 : const int dim = GetHeight();
44 3063924 : mfem::Vector curlu_hat(dim);
45 :
46 3063924 : _curlu_hat_coef.Eval(curlu_hat, T, ip);
47 3063924 : const mfem::real_t k = _k_coef.Eval(T, ip);
48 3063924 : const mfem::real_t curlu_dk_dcurlu = _curlu_dk_dcurlu_coef.Eval(T, ip);
49 :
50 3063924 : K.Diag(k, dim);
51 12255696 : for (int i = 0; i < dim; ++i)
52 36767088 : for (int j = 0; j < dim; ++j)
53 27575316 : K(i, j) += curlu_dk_dcurlu * curlu_hat(i) * curlu_hat(j);
54 3063924 : }
55 :
56 26 : NLCurlCurlIntegrator::NLCurlCurlIntegrator(mfem::Coefficient & k,
57 : mfem::Coefficient & curlu_dk_dcurlu,
58 : mfem::VectorCoefficient & curlu_vec,
59 : mfem::real_t curlu_zero_tol,
60 26 : const mfem::IntegrationRule * ir)
61 26 : : _curlcurl_res_integ(k, ir),
62 26 : _curlcurl_jac_matrix_coef(k, curlu_dk_dcurlu, curlu_vec, curlu_zero_tol),
63 52 : _curlcurl_jac_integ(_curlcurl_jac_matrix_coef, ir)
64 : {
65 26 : }
66 :
67 : void
68 3459260 : NLCurlCurlIntegrator::AssembleElementVector(const mfem::FiniteElement & el,
69 : mfem::ElementTransformation & Tr,
70 : const mfem::Vector & elfun,
71 : mfem::Vector & elvect)
72 : {
73 3459260 : _curlcurl_res_integ.AssembleElementVector(el, Tr, elfun, elvect);
74 3459260 : }
75 :
76 : void
77 3063918 : NLCurlCurlIntegrator::AssembleElementGrad(const mfem::FiniteElement & el,
78 : mfem::ElementTransformation & Tr,
79 : const mfem::Vector & elfun,
80 : mfem::DenseMatrix & elmat)
81 : {
82 3063918 : _curlcurl_jac_integ.AssembleElementGrad(el, Tr, elfun, elmat);
83 3063918 : }
84 : }
85 :
86 : #endif
|