MFEM  v3.2
Finite element discretization library
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Pages
bilininteg.hpp
Go to the documentation of this file.
1 // Copyright (c) 2010, Lawrence Livermore National Security, LLC. Produced at
2 // the Lawrence Livermore National Laboratory. LLNL-CODE-443211. All Rights
3 // reserved. See file COPYRIGHT for details.
4 //
5 // This file is part of the MFEM library. For more information and source code
6 // availability see http://mfem.org.
7 //
8 // MFEM is free software; you can redistribute it and/or modify it under the
9 // terms of the GNU Lesser General Public License (as published by the Free
10 // Software Foundation) version 2.1 dated February 1999.
11 
12 #ifndef MFEM_BILININTEG
13 #define MFEM_BILININTEG
14 
15 #include "../config/config.hpp"
16 #include "nonlininteg.hpp"
17 
18 namespace mfem
19 {
20 
23 {
24 protected:
26 
28  { IntRule = ir; }
29 
30 public:
32  virtual void AssembleElementMatrix(const FiniteElement &el,
34  DenseMatrix &elmat);
35 
40  virtual void AssembleElementMatrix2(const FiniteElement &trial_fe,
41  const FiniteElement &test_fe,
43  DenseMatrix &elmat);
44 
45  virtual void AssembleFaceMatrix(const FiniteElement &el1,
46  const FiniteElement &el2,
48  DenseMatrix &elmat);
49 
52  virtual void AssembleFaceMatrix(const FiniteElement &trial_face_fe,
53  const FiniteElement &test_fe1,
54  const FiniteElement &test_fe2,
56  DenseMatrix &elmat);
57 
59  virtual void AssembleElementVector(const FiniteElement &el,
61  const Vector &elfun, Vector &elvect);
62 
63  virtual void AssembleElementGrad(const FiniteElement &el,
65  const Vector &elfun, DenseMatrix &elmat)
66  { AssembleElementMatrix(el, Tr, elmat); }
67 
68  virtual void ComputeElementFlux(const FiniteElement &el,
70  Vector &u,
71  const FiniteElement &fluxelem,
72  Vector &flux, int with_coef = 1) { }
73 
74  virtual double ComputeFluxEnergy(const FiniteElement &fluxelem,
76  Vector &flux, Vector *d_energy = NULL)
77  { return 0.0; }
78 
79  void SetIntRule(const IntegrationRule *ir) { IntRule = ir; }
80 
82 };
83 
85 {
86 private:
87  int own_bfi;
89 
90  DenseMatrix bfi_elmat;
91 
92 public:
93  TransposeIntegrator (BilinearFormIntegrator *_bfi, int _own_bfi = 1)
94  { bfi = _bfi; own_bfi = _own_bfi; }
95 
96  virtual void AssembleElementMatrix(const FiniteElement &el,
98  DenseMatrix &elmat);
99 
100  virtual void AssembleElementMatrix2(const FiniteElement &trial_fe,
101  const FiniteElement &test_fe,
103  DenseMatrix &elmat);
104 
106  virtual void AssembleFaceMatrix(const FiniteElement &el1,
107  const FiniteElement &el2,
109  DenseMatrix &elmat);
110 
111  virtual ~TransposeIntegrator() { if (own_bfi) { delete bfi; } }
112 };
113 
115 {
116 private:
117  int own_bfi;
119 
120 public:
121  LumpedIntegrator (BilinearFormIntegrator *_bfi, int _own_bfi = 1)
122  { bfi = _bfi; own_bfi = _own_bfi; }
123 
124  virtual void AssembleElementMatrix(const FiniteElement &el,
126  DenseMatrix &elmat);
127 
128  virtual ~LumpedIntegrator() { if (own_bfi) { delete bfi; } }
129 };
130 
133 {
134 private:
135  int own_integrator;
136  BilinearFormIntegrator *integrator;
137 
138 public:
139  InverseIntegrator(BilinearFormIntegrator *integ, int own_integ = 1)
140  { integrator = integ; own_integrator = own_integ; }
141 
142  virtual void AssembleElementMatrix(const FiniteElement &el,
144  DenseMatrix &elmat);
145 
146  virtual ~InverseIntegrator() { if (own_integrator) { delete integrator; } }
147 };
148 
151 {
152 private:
153  int own_integrators;
154  DenseMatrix elem_mat;
155  Array<BilinearFormIntegrator*> integrators;
156 
157 public:
158  SumIntegrator(int own_integs = 1) { own_integrators = own_integs; }
159 
161  { integrators.Append(integ); }
162 
163  virtual void AssembleElementMatrix(const FiniteElement &el,
165  DenseMatrix &elmat);
166 
167  virtual ~SumIntegrator();
168 };
169 
173 {
174 private:
175  Vector vec, pointflux, shape;
176 #ifndef MFEM_THREAD_SAFE
177  DenseMatrix dshape, dshapedxt, invdfdx, mq;
178  DenseMatrix te_dshape, te_dshapedxt;
179 #endif
180  Coefficient *Q;
181  MatrixCoefficient *MQ;
182 
183 public:
185  DiffusionIntegrator() { Q = NULL; MQ = NULL; }
186 
188  DiffusionIntegrator (Coefficient &q) : Q(&q) { MQ = NULL; }
189 
191  DiffusionIntegrator (MatrixCoefficient &q) : MQ(&q) { Q = NULL; }
192 
195  virtual void AssembleElementMatrix(const FiniteElement &el,
197  DenseMatrix &elmat);
200  virtual void AssembleElementMatrix2(const FiniteElement &trial_fe,
201  const FiniteElement &test_fe,
203  DenseMatrix &elmat);
204 
206  virtual void AssembleElementVector(const FiniteElement &el,
208  const Vector &elfun, Vector &elvect);
209 
210  virtual void ComputeElementFlux(const FiniteElement &el,
212  Vector &u, const FiniteElement &fluxelem,
213  Vector &flux, int with_coef = 1);
214 
215  virtual double ComputeFluxEnergy(const FiniteElement &fluxelem,
217  Vector &flux, Vector *d_energy = NULL);
218 };
219 
222 {
223 protected:
226 
227 public:
228  MassIntegrator(const IntegrationRule *ir = NULL)
229  : BilinearFormIntegrator(ir) { Q = NULL; }
232  : BilinearFormIntegrator(ir), Q(&q) { }
233 
236  virtual void AssembleElementMatrix(const FiniteElement &el,
238  DenseMatrix &elmat);
239  virtual void AssembleElementMatrix2(const FiniteElement &trial_fe,
240  const FiniteElement &test_fe,
242  DenseMatrix &elmat);
243 };
244 
246 {
247 public:
249 
251 
252  virtual void AssembleFaceMatrix(const FiniteElement &el1,
253  const FiniteElement &el2,
255  DenseMatrix &elmat);
256 };
257 
260 {
261 private:
262  DenseMatrix dshape, adjJ, Q_ir;
263  Vector shape, vec2, BdFidxT;
265  double alpha;
266 
267 public:
269  : Q(q) { alpha = a; }
270  virtual void AssembleElementMatrix(const FiniteElement &,
272  DenseMatrix &);
273 };
274 
277 {
278 private:
279  DenseMatrix dshape, adjJ, Q_nodal, grad;
280  Vector shape;
282  double alpha;
283 
284 public:
286  : Q(q) { alpha = a; }
287  virtual void AssembleElementMatrix(const FiniteElement &,
289  DenseMatrix &);
290 };
291 
296 {
297 private:
298  Vector shape, te_shape, vec;
299  DenseMatrix partelmat;
300  DenseMatrix mcoeff;
301  Coefficient *Q;
302  VectorCoefficient *VQ;
303  MatrixCoefficient *MQ;
304 
305  int Q_order;
306 
307 public:
310  { Q = NULL; VQ = NULL; MQ = NULL; Q_order = 0; }
316  : Q(&q) { VQ = NULL; MQ = NULL; Q_order = qo; }
318  : BilinearFormIntegrator(ir), Q(&q)
319  { VQ = NULL; MQ = NULL; Q_order = 0; }
322  : VQ(&q) { Q = NULL; MQ = NULL; Q_order = qo; }
325  : MQ(&q) { Q = NULL; VQ = NULL; Q_order = qo; }
326 
327  virtual void AssembleElementMatrix(const FiniteElement &el,
329  DenseMatrix &elmat);
330  virtual void AssembleElementMatrix2(const FiniteElement &trial_fe,
331  const FiniteElement &test_fe,
333  DenseMatrix &elmat);
334 };
335 
336 
345 {
346 private:
347  Coefficient *Q;
348 #ifndef MFEM_THREAD_SAFE
349  Vector divshape, shape;
350 #endif
351 public:
354  virtual void AssembleElementMatrix(const FiniteElement &el,
356  DenseMatrix &elmat) { }
357  virtual void AssembleElementMatrix2(const FiniteElement &trial_fe,
358  const FiniteElement &test_fe,
360  DenseMatrix &elmat);
361 };
362 
363 
366 {
367 private:
368  Coefficient *Q;
369 #ifndef MFEM_THREAD_SAFE
370  DenseMatrix curlshapeTrial;
371  DenseMatrix vshapeTest;
372  DenseMatrix curlshapeTrial_dFT;
373 #endif
374 public:
375  VectorFECurlIntegrator() { Q = NULL; }
377  virtual void AssembleElementMatrix(const FiniteElement &el,
379  DenseMatrix &elmat) { }
380  virtual void AssembleElementMatrix2(const FiniteElement &trial_fe,
381  const FiniteElement &test_fe,
383  DenseMatrix &elmat);
384 };
385 
386 
389 {
390 private:
391  Coefficient & Q;
392  int xi;
393  DenseMatrix dshape, dshapedxt, invdfdx;
394  Vector shape, dshapedxi;
395 public:
396  DerivativeIntegrator(Coefficient &q, int i) : Q(q), xi(i) { }
397  virtual void AssembleElementMatrix(const FiniteElement &el,
399  DenseMatrix &elmat)
400  { AssembleElementMatrix2(el,el,Trans,elmat); }
401  virtual void AssembleElementMatrix2(const FiniteElement &trial_fe,
402  const FiniteElement &test_fe,
404  DenseMatrix &elmat);
405 };
406 
409 {
410 private:
411  Vector vec, pointflux;
412 #ifndef MFEM_THREAD_SAFE
413  DenseMatrix curlshape, curlshape_dFt;
414  DenseMatrix vshape, projcurl;
415 #endif
416  Coefficient *Q;
417 
418 public:
419  CurlCurlIntegrator() { Q = NULL; }
422 
423  /* Given a particular Finite Element, compute the
424  element curl-curl matrix elmat */
425  virtual void AssembleElementMatrix(const FiniteElement &el,
427  DenseMatrix &elmat);
428 
429  virtual void ComputeElementFlux(const FiniteElement &el,
431  Vector &u, const FiniteElement &fluxelem,
432  Vector &flux, int with_coef);
433 
434  virtual double ComputeFluxEnergy(const FiniteElement &fluxelem,
436  Vector &flux, Vector *d_energy = NULL);
437 };
438 
442 {
443 private:
444 #ifndef MFEM_THREAD_SAFE
445  DenseMatrix dshape_hat, dshape, curlshape, Jadj, grad_hat, grad;
446 #endif
447  Coefficient *Q;
448 
449 public:
450  VectorCurlCurlIntegrator() { Q = NULL; }
451 
453 
455  virtual void AssembleElementMatrix(const FiniteElement &el,
457  DenseMatrix &elmat);
459  virtual double GetElementEnergy(const FiniteElement &el,
461  const Vector &elfun);
462 };
463 
466 {
467 private:
468  Coefficient *Q;
469  VectorCoefficient *VQ;
470  MatrixCoefficient *MQ;
471  void Init(Coefficient *q, VectorCoefficient *vq, MatrixCoefficient *mq)
472  { Q = q; VQ = vq; MQ = mq; }
473 
474 #ifndef MFEM_THREAD_SAFE
475  Vector shape;
476  Vector D;
477  DenseMatrix K;
478  DenseMatrix test_vshape;
479  DenseMatrix trial_vshape;
480 #endif
481 
482 public:
483  VectorFEMassIntegrator() { Init(NULL, NULL, NULL); }
484  VectorFEMassIntegrator(Coefficient *_q) { Init(_q, NULL, NULL); }
485  VectorFEMassIntegrator(Coefficient &q) { Init(&q, NULL, NULL); }
486  VectorFEMassIntegrator(VectorCoefficient *_vq) { Init(NULL, _vq, NULL); }
487  VectorFEMassIntegrator(VectorCoefficient &vq) { Init(NULL, &vq, NULL); }
488  VectorFEMassIntegrator(MatrixCoefficient *_mq) { Init(NULL, NULL, _mq); }
489  VectorFEMassIntegrator(MatrixCoefficient &mq) { Init(NULL, NULL, &mq); }
490 
491  virtual void AssembleElementMatrix(const FiniteElement &el,
493  DenseMatrix &elmat);
494  virtual void AssembleElementMatrix2(const FiniteElement &trial_fe,
495  const FiniteElement &test_fe,
497  DenseMatrix &elmat);
498 };
499 
504 {
505 private:
506  Coefficient *Q;
507 
508  Vector shape;
509  Vector divshape;
510  DenseMatrix dshape;
511  DenseMatrix gshape;
512  DenseMatrix Jadj;
513 
514 public:
518 
519  virtual void AssembleElementMatrix2(const FiniteElement &trial_fe,
520  const FiniteElement &test_fe,
522  DenseMatrix &elmat);
523 };
524 
527 {
528 private:
529  Coefficient *Q;
530 
531 #ifndef MFEM_THREAD_SAFE
532  Vector divshape;
533 #endif
534 
535 public:
536  DivDivIntegrator() { Q = NULL; }
538 
539  virtual void AssembleElementMatrix(const FiniteElement &el,
541  DenseMatrix &elmat);
542 };
543 
547 {
548 private:
549  Coefficient *Q;
550 
551  DenseMatrix Jinv;
552  DenseMatrix dshape;
553  DenseMatrix gshape;
554  DenseMatrix pelmat;
555 
556 public:
559 
560  virtual void AssembleElementMatrix(const FiniteElement &el,
562  DenseMatrix &elmat);
563 };
564 
571 {
572 private:
573  double q_lambda, q_mu;
574  Coefficient *lambda, *mu;
575 
576 #ifndef MFEM_THREAD_SAFE
577  DenseMatrix dshape, Jinv, gshape, pelmat;
578  Vector divshape;
579 #endif
580 
581 public:
583  { lambda = &l; mu = &m; }
586  ElasticityIntegrator(Coefficient &m, double q_l, double q_m)
587  { lambda = NULL; mu = &m; q_lambda = q_l; q_mu = q_m; }
588 
589  virtual void AssembleElementMatrix(const FiniteElement &,
591  DenseMatrix &);
592 };
593 
603 {
604 private:
605  Coefficient *rho;
607  double alpha, beta;
608 
609  Vector shape1, shape2;
610 
611 public:
613  DGTraceIntegrator(VectorCoefficient &_u, double a, double b)
614  { rho = NULL; u = &_u; alpha = a; beta = b; }
615 
617  double a, double b)
618  { rho = &_rho; u = &_u; alpha = a; beta = b; }
619 
621  virtual void AssembleFaceMatrix(const FiniteElement &el1,
622  const FiniteElement &el2,
624  DenseMatrix &elmat);
625 };
626 
640 {
641 protected:
644  double sigma, kappa;
645 
646  // these are not thread-safe!
649 
650 public:
651  DGDiffusionIntegrator(const double s, const double k)
652  : Q(NULL), MQ(NULL), sigma(s), kappa(k) { }
653  DGDiffusionIntegrator(Coefficient &q, const double s, const double k)
654  : Q(&q), MQ(NULL), sigma(s), kappa(k) { }
655  DGDiffusionIntegrator(MatrixCoefficient &q, const double s, const double k)
656  : Q(NULL), MQ(&q), sigma(s), kappa(k) { }
658  virtual void AssembleFaceMatrix(const FiniteElement &el1,
659  const FiniteElement &el2,
661  DenseMatrix &elmat);
662 };
663 
668 {
669 private:
670  Vector face_shape, shape1, shape2;
671 
672 public:
675  virtual void AssembleFaceMatrix(const FiniteElement &trial_face_fe,
676  const FiniteElement &test_fe1,
677  const FiniteElement &test_fe2,
679  DenseMatrix &elmat);
680 };
681 
686 {
687 private:
688  Vector face_shape, normal, shape1_n, shape2_n;
689  DenseMatrix shape1, shape2;
690 
691 public:
694  virtual void AssembleFaceMatrix(const FiniteElement &trial_face_fe,
695  const FiniteElement &test_fe1,
696  const FiniteElement &test_fe2,
698  DenseMatrix &elmat);
699 };
700 
704 
705 
710 {
711 public:
712  virtual void AssembleElementMatrix2(const FiniteElement &h1_fe,
713  const FiniteElement &nd_fe,
715  DenseMatrix &elmat)
716  { nd_fe.ProjectGrad(h1_fe, Trans, elmat); }
717 };
718 
719 
724 {
725 public:
726  virtual void AssembleElementMatrix2(const FiniteElement &dom_fe,
727  const FiniteElement &ran_fe,
729  DenseMatrix &elmat)
730  { ran_fe.Project(dom_fe, Trans, elmat); }
731 };
732 
733 
738 {
739 public:
740  virtual void AssembleElementMatrix2(const FiniteElement &dom_fe,
741  const FiniteElement &ran_fe,
743  DenseMatrix &elmat)
744  { ran_fe.ProjectCurl(dom_fe, Trans, elmat); }
745 };
746 
747 
757 {
758 public:
759  virtual void AssembleElementMatrix2(const FiniteElement &dom_fe,
760  const FiniteElement &ran_fe,
762  DenseMatrix &elmat)
763  { ran_fe.ProjectDiv(dom_fe, Trans, elmat); }
764 };
765 
766 
771 {
772 public:
773  virtual void AssembleElementMatrix2(const FiniteElement &dom_fe,
774  const FiniteElement &ran_fe,
776  DenseMatrix &elmat);
777 };
778 
779 }
780 
781 #endif
Abstract class for Finite Elements.
Definition: fe.hpp:44
virtual void AssembleElementMatrix(const FiniteElement &el, ElementTransformation &Trans, DenseMatrix &elmat)
Given a particular Finite Element computes the element matrix elmat.
Definition: bilininteg.hpp:377
VectorFEMassIntegrator(Coefficient &q)
Definition: bilininteg.hpp:485
virtual void AssembleElementMatrix(const FiniteElement &el, ElementTransformation &Trans, DenseMatrix &elmat)
Given a particular Finite Element computes the element matrix elmat.
Definition: bilininteg.cpp:65
virtual void AssembleElementMatrix(const FiniteElement &el, ElementTransformation &Trans, DenseMatrix &elmat)
Given a particular Finite Element computes the element matrix elmat.
Definition: bilininteg.hpp:397
Class for integration rule.
Definition: intrules.hpp:83
DGTraceIntegrator(VectorCoefficient &_u, double a, double b)
Construct integrator with rho = 1.
Definition: bilininteg.hpp:613
DGDiffusionIntegrator(Coefficient &q, const double s, const double k)
Definition: bilininteg.hpp:653
Integrator defining a sum of multiple Integrators.
Definition: bilininteg.hpp:150
SumIntegrator(int own_integs=1)
Definition: bilininteg.hpp:158
virtual void AssembleElementMatrix(const FiniteElement &el, ElementTransformation &Trans, DenseMatrix &elmat)
Given a particular Finite Element computes the element matrix elmat.
DiffusionIntegrator(Coefficient &q)
Construct a diffusion integrator with a scalar coefficient q.
Definition: bilininteg.hpp:188
virtual void ProjectDiv(const FiniteElement &fe, ElementTransformation &Trans, DenseMatrix &div) const
Definition: fe.cpp:116
virtual void AssembleElementMatrix2(const FiniteElement &trial_fe, const FiniteElement &test_fe, ElementTransformation &Trans, DenseMatrix &elmat)
Definition: bilininteg.cpp:879
virtual void AssembleElementMatrix(const FiniteElement &el, ElementTransformation &Trans, DenseMatrix &elmat)
Given a particular Finite Element computes the element matrix elmat.
virtual void Project(Coefficient &coeff, ElementTransformation &Trans, Vector &dofs) const
Definition: fe.cpp:75
virtual double ComputeFluxEnergy(const FiniteElement &fluxelem, ElementTransformation &Trans, Vector &flux, Vector *d_energy=NULL)
ElasticityIntegrator(Coefficient &l, Coefficient &m)
Definition: bilininteg.hpp:582
VectorFEMassIntegrator(VectorCoefficient *_vq)
Definition: bilininteg.hpp:486
VectorDiffusionIntegrator(Coefficient &q)
Definition: bilininteg.hpp:558
Integrator for (curl u, curl v) for Nedelec elements.
Definition: bilininteg.hpp:408
virtual void AssembleElementMatrix2(const FiniteElement &trial_fe, const FiniteElement &test_fe, ElementTransformation &Trans, DenseMatrix &elmat)
VectorCurlCurlIntegrator(Coefficient &q)
Definition: bilininteg.hpp:452
VectorMassIntegrator(Coefficient &q, const IntegrationRule *ir)
Definition: bilininteg.hpp:317
alpha (q . grad u, v) using the &quot;group&quot; FE discretization
Definition: bilininteg.hpp:276
virtual void AssembleElementMatrix(const FiniteElement &el, ElementTransformation &Trans, DenseMatrix &elmat)
Given a particular Finite Element computes the element matrix elmat.
Definition: bilininteg.cpp:711
virtual void AssembleElementMatrix2(const FiniteElement &trial_fe, const FiniteElement &test_fe, ElementTransformation &Trans, DenseMatrix &elmat)
Data type dense matrix using column-major storage.
Definition: densemat.hpp:22
DivDivIntegrator(Coefficient &q)
Definition: bilininteg.hpp:537
virtual void AssembleFaceMatrix(const FiniteElement &el1, const FiniteElement &el2, FaceElementTransformations &Trans, DenseMatrix &elmat)
Definition: bilininteg.cpp:82
virtual void AssembleElementMatrix(const FiniteElement &el, ElementTransformation &Trans, DenseMatrix &elmat)
Given a particular Finite Element computes the element matrix elmat.
Definition: bilininteg.cpp:91
BilinearFormIntegrator(const IntegrationRule *ir=NULL)
Definition: bilininteg.hpp:27
void AddIntegrator(BilinearFormIntegrator *integ)
Definition: bilininteg.hpp:160
virtual double ComputeFluxEnergy(const FiniteElement &fluxelem, ElementTransformation &Trans, Vector &flux, Vector *d_energy=NULL)
Definition: bilininteg.hpp:74
virtual void AssembleElementMatrix(const FiniteElement &el, ElementTransformation &Trans, DenseMatrix &elmat)
Given a particular Finite Element computes the element matrix elmat.
Definition: bilininteg.hpp:354
virtual void ProjectGrad(const FiniteElement &fe, ElementTransformation &Trans, DenseMatrix &grad) const
Definition: fe.cpp:100
(Q div u, div v) for RT elements
Definition: bilininteg.hpp:526
virtual void ComputeElementFlux(const FiniteElement &el, ElementTransformation &Trans, Vector &u, const FiniteElement &fluxelem, Vector &flux, int with_coef=1)
Definition: bilininteg.cpp:362
virtual void AssembleFaceMatrix(const FiniteElement &el1, const FiniteElement &el2, FaceElementTransformations &Trans, DenseMatrix &elmat)
Definition: bilininteg.cpp:572
MatrixCoefficient * MQ
Definition: bilininteg.hpp:643
VectorFEMassIntegrator(VectorCoefficient &vq)
Definition: bilininteg.hpp:487
VectorMassIntegrator()
Construct an integrator with coefficient 1.0.
Definition: bilininteg.hpp:309
VectorMassIntegrator(VectorCoefficient &q, int qo=0)
Construct an integrator with diagonal coefficient q.
Definition: bilininteg.hpp:321
virtual void AssembleElementMatrix2(const FiniteElement &dom_fe, const FiniteElement &ran_fe, ElementTransformation &Trans, DenseMatrix &elmat)
Definition: bilininteg.hpp:726
virtual void AssembleElementMatrix2(const FiniteElement &trial_fe, const FiniteElement &test_fe, ElementTransformation &Trans, DenseMatrix &elmat)
Definition: bilininteg.cpp:73
Integrator that inverts the matrix assembled by another integrator.
Definition: bilininteg.hpp:132
virtual void ProjectCurl(const FiniteElement &fe, ElementTransformation &Trans, DenseMatrix &curl) const
Definition: fe.cpp:108
ElasticityIntegrator(Coefficient &m, double q_l, double q_m)
Definition: bilininteg.hpp:586
virtual void AssembleFaceMatrix(const FiniteElement &trial_face_fe, const FiniteElement &test_fe1, const FiniteElement &test_fe2, FaceElementTransformations &Trans, DenseMatrix &elmat)
virtual void AssembleElementMatrix(const FiniteElement &el, ElementTransformation &Trans, DenseMatrix &elmat)
Given a particular Finite Element computes the element matrix elmat.
virtual void AssembleElementMatrix(const FiniteElement &el, ElementTransformation &Trans, DenseMatrix &elmat)
Definition: bilininteg.cpp:488
VectorDivergenceIntegrator(Coefficient &q)
Definition: bilininteg.hpp:517
virtual void AssembleElementMatrix(const FiniteElement &el, ElementTransformation &Trans, DenseMatrix &elmat)
Given a particular Finite Element computes the element matrix elmat.
Definition: bilininteg.cpp:98
Integrator for (curl u, v) for Nedelec and RT elements.
Definition: bilininteg.hpp:365
virtual void AssembleElementMatrix(const FiniteElement &el, ElementTransformation &Trans, DenseMatrix &elmat)
Given a particular Finite Element computes the element matrix elmat.
Definition: bilininteg.cpp:105
virtual void AssembleElementGrad(const FiniteElement &el, ElementTransformation &Tr, const Vector &elfun, DenseMatrix &elmat)
Assemble the local gradient matrix.
Definition: bilininteg.hpp:63
VectorFEDivergenceIntegrator(Coefficient &q)
Definition: bilininteg.hpp:353
void SetIntRule(const IntegrationRule *ir)
Definition: bilininteg.hpp:79
VectorFECurlIntegrator(Coefficient &q)
Definition: bilininteg.hpp:376
virtual void AssembleElementMatrix2(const FiniteElement &h1_fe, const FiniteElement &nd_fe, ElementTransformation &Trans, DenseMatrix &elmat)
Definition: bilininteg.hpp:712
virtual void ComputeElementFlux(const FiniteElement &el, ElementTransformation &Trans, Vector &u, const FiniteElement &fluxelem, Vector &flux, int with_coef=1)
Definition: bilininteg.hpp:68
DiffusionIntegrator()
Construct a diffusion integrator with coefficient Q = 1.
Definition: bilininteg.hpp:185
virtual void AssembleElementMatrix(const FiniteElement &el, ElementTransformation &Trans, DenseMatrix &elmat)
Given a particular Finite Element computes the element matrix elmat.
virtual void AssembleElementMatrix2(const FiniteElement &trial_fe, const FiniteElement &test_fe, ElementTransformation &Trans, DenseMatrix &elmat)
Definition: bilininteg.cpp:792
BoundaryMassIntegrator(Coefficient &q)
Definition: bilininteg.hpp:248
virtual void AssembleElementMatrix(const FiniteElement &, ElementTransformation &, DenseMatrix &)
Given a particular Finite Element computes the element matrix elmat.
Definition: bilininteg.cpp:657
virtual void AssembleElementVector(const FiniteElement &el, ElementTransformation &Tr, const Vector &elfun, Vector &elvect)
Perform the local action of the BilinearFormIntegrator.
Definition: bilininteg.cpp:56
virtual void AssembleElementVector(const FiniteElement &el, ElementTransformation &Tr, const Vector &elfun, Vector &elvect)
Perform the local action of the BilinearFormIntegrator.
Definition: bilininteg.cpp:284
Abstract base class BilinearFormIntegrator.
Definition: bilininteg.hpp:22
virtual void AssembleElementMatrix2(const FiniteElement &dom_fe, const FiniteElement &ran_fe, ElementTransformation &Trans, DenseMatrix &elmat)
VectorDivergenceIntegrator(Coefficient *_q)
Definition: bilininteg.hpp:516
DiffusionIntegrator(MatrixCoefficient &q)
Construct a diffusion integrator with a matrix coefficient q.
Definition: bilininteg.hpp:191
virtual void AssembleElementMatrix(const FiniteElement &, ElementTransformation &, DenseMatrix &)
Given a particular Finite Element computes the element matrix elmat.
Definition: bilininteg.cpp:613
VectorFEMassIntegrator(MatrixCoefficient &mq)
Definition: bilininteg.hpp:489
Base class Coefficient that may optionally depend on time.
Definition: coefficient.hpp:31
virtual void AssembleElementMatrix(const FiniteElement &el, ElementTransformation &Trans, DenseMatrix &elmat)
Given a particular Finite Element computes the element matrix elmat.
Definition: bilininteg.cpp:23
virtual void AssembleElementMatrix2(const FiniteElement &trial_fe, const FiniteElement &test_fe, ElementTransformation &Trans, DenseMatrix &elmat)
Definition: bilininteg.cpp:918
virtual void AssembleElementMatrix2(const FiniteElement &trial_fe, const FiniteElement &test_fe, ElementTransformation &Trans, DenseMatrix &elmat)
Definition: bilininteg.cpp:204
DGDiffusionIntegrator(const double s, const double k)
Definition: bilininteg.hpp:651
LumpedIntegrator(BilinearFormIntegrator *_bfi, int _own_bfi=1)
Definition: bilininteg.hpp:121
MassIntegrator(Coefficient &q, const IntegrationRule *ir=NULL)
Construct a mass integrator with coefficient q.
Definition: bilininteg.hpp:231
virtual void AssembleFaceMatrix(const FiniteElement &el1, const FiniteElement &el2, FaceElementTransformations &Trans, DenseMatrix &elmat)
virtual void AssembleElementMatrix2(const FiniteElement &trial_fe, const FiniteElement &test_fe, ElementTransformation &Trans, DenseMatrix &elmat)
Definition: bilininteg.cpp:964
virtual void AssembleElementMatrix(const FiniteElement &el, ElementTransformation &Trans, DenseMatrix &elmat)
Assemble an element matrix.
virtual void AssembleFaceMatrix(const FiniteElement &el1, const FiniteElement &el2, FaceElementTransformations &Trans, DenseMatrix &elmat)
Definition: bilininteg.cpp:39
VectorMassIntegrator(Coefficient &q, int qo=0)
Definition: bilininteg.hpp:315
VectorFEMassIntegrator(Coefficient *_q)
Definition: bilininteg.hpp:484
virtual void AssembleElementMatrix2(const FiniteElement &dom_fe, const FiniteElement &ran_fe, ElementTransformation &Trans, DenseMatrix &elmat)
Definition: bilininteg.hpp:740
VectorFEMassIntegrator(MatrixCoefficient *_mq)
Definition: bilininteg.hpp:488
virtual void AssembleElementMatrix2(const FiniteElement &trial_fe, const FiniteElement &test_fe, ElementTransformation &Trans, DenseMatrix &elmat)
Definition: bilininteg.cpp:531
VectorMassIntegrator(MatrixCoefficient &q, int qo=0)
Construct an integrator with matrix coefficient q.
Definition: bilininteg.hpp:324
virtual void AssembleElementMatrix(const FiniteElement &, ElementTransformation &, DenseMatrix &)
Given a particular Finite Element computes the element matrix elmat.
GroupConvectionIntegrator(VectorCoefficient &q, double a=1.0)
Definition: bilininteg.hpp:285
virtual ~SumIntegrator()
Definition: bilininteg.cpp:118
DGDiffusionIntegrator(MatrixCoefficient &q, const double s, const double k)
Definition: bilininteg.hpp:655
virtual double GetElementEnergy(const FiniteElement &el, ElementTransformation &Tr, const Vector &elfun)
Compute element energy: (1/2) (curl u, curl u)_E.
Vector data type.
Definition: vector.hpp:33
ConvectionIntegrator(VectorCoefficient &q, double a=1.0)
Definition: bilininteg.hpp:268
virtual void AssembleFaceMatrix(const FiniteElement &el1, const FiniteElement &el2, FaceElementTransformations &Trans, DenseMatrix &elmat)
virtual void AssembleElementMatrix2(const FiniteElement &trial_fe, const FiniteElement &test_fe, ElementTransformation &Trans, DenseMatrix &elmat)
Definition: bilininteg.cpp:31
DerivativeIntegrator(Coefficient &q, int i)
Definition: bilininteg.hpp:396
DGTraceIntegrator(Coefficient &_rho, VectorCoefficient &_u, double a, double b)
Definition: bilininteg.hpp:616
CurlCurlIntegrator(Coefficient &q)
Construct a bilinear form integrator for Nedelec elements.
Definition: bilininteg.hpp:421
const IntegrationRule * IntRule
Definition: bilininteg.hpp:25
virtual void AssembleFaceMatrix(const FiniteElement &trial_face_fe, const FiniteElement &test_fe1, const FiniteElement &test_fe2, FaceElementTransformations &Trans, DenseMatrix &elmat)
virtual void AssembleElementMatrix2(const FiniteElement &dom_fe, const FiniteElement &ran_fe, ElementTransformation &Trans, DenseMatrix &elmat)
Definition: bilininteg.hpp:759
virtual void AssembleElementMatrix(const FiniteElement &el, ElementTransformation &Trans, DenseMatrix &elmat)
Definition: bilininteg.cpp:131
MassIntegrator(const IntegrationRule *ir=NULL)
Definition: bilininteg.hpp:228
virtual void ComputeElementFlux(const FiniteElement &el, ElementTransformation &Trans, Vector &u, const FiniteElement &fluxelem, Vector &flux, int with_coef)
virtual double ComputeFluxEnergy(const FiniteElement &fluxelem, ElementTransformation &Trans, Vector &flux, Vector *d_energy=NULL)
Definition: bilininteg.cpp:420
Integrator for (Q u, v) for VectorFiniteElements.
Definition: bilininteg.hpp:465
TransposeIntegrator(BilinearFormIntegrator *_bfi, int _own_bfi=1)
Definition: bilininteg.hpp:93
Class for integrating (Q D_i(u), v); u and v are scalars.
Definition: bilininteg.hpp:388
InverseIntegrator(BilinearFormIntegrator *integ, int own_integ=1)
Definition: bilininteg.hpp:139
alpha (q . grad u, v)
Definition: bilininteg.hpp:259