MAST
Multidisciplinary-design Adaptation and Sensitivity Toolkit (MAST)
isotropic_material_property_card.cpp
Go to the documentation of this file.
1 /*
2  * MAST: Multidisciplinary-design Adaptation and Sensitivity Toolkit
3  * Copyright (C) 2013-2020 Manav Bhatia and MAST authors
4  *
5  * This library is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU Lesser General Public
7  * License as published by the Free Software Foundation; either
8  * version 2.1 of the License, or (at your option) any later version.
9  *
10  * This library is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13  * Lesser General Public License for more details.
14  *
15  * You should have received a copy of the GNU Lesser General Public
16  * License along with this library; if not, write to the Free Software
17  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18  */
19 
20 
21 // MAST includes
24 
25 
26 namespace MAST {
27  namespace IsotropicMaterialProperty {
28 
29 
31  public MAST::FieldFunction<RealMatrixX> {
32  public:
33 
35  const MAST::FieldFunction<Real>& nu);
36 
37  virtual ~StiffnessMatrix1D() { }
38 
39  virtual void operator() (const libMesh::Point& p,
40  const Real t,
41  RealMatrixX& m) const;
42 
43  virtual void derivative( const MAST::FunctionBase& f,
44  const libMesh::Point& p,
45  const Real t,
46  RealMatrixX& m) const;
47 
48  protected:
49 
52  };
53 
54 
55 
57  public:
59  const MAST::FieldFunction<Real>& nu);
60 
61 
63 
64  virtual void operator() (const libMesh::Point& p,
65  const Real t,
66  RealMatrixX& m) const;
67 
68  virtual void derivative( const MAST::FunctionBase& f,
69  const libMesh::Point& p,
70  const Real t,
71  RealMatrixX& m) const;
72 
73  protected:
74 
77  };
78 
79 
80  class StiffnessMatrix2D: public MAST::FieldFunction<RealMatrixX> {
81  public:
83  const MAST::FieldFunction<Real>& nu,
84  bool plane_stress);
85 
86 
87  virtual ~StiffnessMatrix2D() { }
88 
89 
90  virtual void operator() (const libMesh::Point& p,
91  const Real t,
92  RealMatrixX& m) const;
93 
94  virtual void derivative( const MAST::FunctionBase& f,
95  const libMesh::Point& p,
96  const Real t,
97  RealMatrixX& m) const;
98 
99  protected:
100 
104  };
105 
106 
107 
108  class StiffnessMatrix3D: public MAST::FieldFunction<RealMatrixX> {
109  public:
111  const MAST::FieldFunction<Real>& nu);
112 
113  virtual ~StiffnessMatrix3D() { }
114 
115  virtual void operator() (const libMesh::Point& p,
116  const Real t,
117  RealMatrixX& m) const;
118 
119  virtual void derivative( const MAST::FunctionBase& f,
120  const libMesh::Point& p,
121  const Real t,
122  RealMatrixX& m) const;
123 
124  protected:
125 
128  };
129 
130 
131 
132  class InertiaMatrix3D: public MAST::FieldFunction<RealMatrixX> {
133  public:
135 
136 
137  virtual ~InertiaMatrix3D() { }
138 
139  virtual void operator() (const libMesh::Point& p,
140  const Real t,
141  RealMatrixX& m) const;
142 
143  virtual void derivative( const MAST::FunctionBase& f,
144  const libMesh::Point& p,
145  const Real t,
146  RealMatrixX& m) const;
147 
148  protected:
149 
151 
152  };
153 
154 
155 
156  class ThermalExpansionMatrix: public MAST::FieldFunction<RealMatrixX> {
157  public:
158 
159  ThermalExpansionMatrix(unsigned int dim,
160  const MAST::FieldFunction<Real>& alpha):
161  MAST::FieldFunction<RealMatrixX>("ThermalExpansionMatrix"),
162  _dim(dim),
163  _alpha(alpha) {
164  _functions.insert(&_alpha);
165  }
166 
167 
169 
170  virtual void operator() (const libMesh::Point& p,
171  const Real t,
172  RealMatrixX& m) const;
173 
174  virtual void derivative( const MAST::FunctionBase& f,
175  const libMesh::Point& p,
176  const Real t,
177  RealMatrixX& m) const;
178 
179  protected:
180 
181  const unsigned int _dim;
182 
184  };
185 
186 
187 
188 
190  public MAST::FieldFunction<RealMatrixX> {
191  public:
192 
193  ThermalConductanceMatrix(unsigned int dim,
195  MAST::FieldFunction<RealMatrixX>("ThermalConductanceMatrix"),
196  _dim(dim),
197  _k(k) {
198  _functions.insert(&_k);
199  }
200 
201 
203 
204  virtual void operator() (const libMesh::Point& p,
205  const Real t,
206  RealMatrixX& m) const;
207 
208  virtual void derivative( const MAST::FunctionBase& f,
209  const libMesh::Point& p,
210  const Real t,
211  RealMatrixX& m) const;
212 
213  protected:
214 
215  const unsigned int _dim;
216 
218  };
219 
220 
221 
223  public MAST::FieldFunction<RealMatrixX> {
224  public:
225 
226  ThermalCapacitanceMatrix(unsigned int dim,
227  const MAST::FieldFunction<Real>& rho,
228  const MAST::FieldFunction<Real>& cp):
229  MAST::FieldFunction<RealMatrixX>("ThermalCapacitanceMatrix"),
230  _dim(dim),
231  _rho(rho),
232  _cp(cp) {
233 
234  _functions.insert(&_rho);
235  _functions.insert(&_cp);
236  }
237 
238 
240 
241  virtual void operator() (const libMesh::Point& p,
242  const Real t,
243  RealMatrixX& m) const;
244 
245  virtual void derivative( const MAST::FunctionBase& f,
246  const libMesh::Point& p,
247  const Real t,
248  RealMatrixX& m) const;
249 
250  protected:
251 
252  const unsigned int _dim;
253 
255 
257  };
258 
259 
260  }
261 }
262 
263 
264 
267  const MAST::FieldFunction<Real>& nu ):
268 MAST::FieldFunction<RealMatrixX>("StiffnessMatrix1D"),
269 _E(E),
270 _nu(nu)
271 {
272  _functions.insert(&E);
273  _functions.insert(&nu);
274 }
275 
276 
277 
278 
279 void
281 StiffnessMatrix1D::operator() (const libMesh::Point& p,
282  const Real t,
283  RealMatrixX& m) const {
284  m = RealMatrixX::Zero(2,2);
285  Real E, nu, G;
286  _E(p, t, E); _nu(p, t, nu);
287  G = E/2./(1.+nu);
288  m(0,0) = E;
289  m(1,1) = G;
290 }
291 
292 
293 void
296  const libMesh::Point &p,
297  const Real t,
298  RealMatrixX &m) const {
299 
300 
301  RealMatrixX dm;
302  m = RealMatrixX::Zero(2,2); dm = RealMatrixX::Zero(2,2);
303  Real E, nu, dEdf, dnudf;
304  _E(p, t, E); _E.derivative( f, p, t, dEdf);
305  _nu(p, t, nu); _nu.derivative( f, p, t, dnudf);
306 
307  // parM/parE * parE/parf
308  dm(0,0) = 1.;
309  dm(1,1) = 1./2./(1.+nu);
310  m += dEdf * dm;
311 
312 
313  // parM/parnu * parnu/parf
314  dm(0,0) = 0.;
315  dm(1,1) = -E/2./pow(1.+nu,2);
316  m+= dnudf*dm;
317 }
318 
319 
323  const MAST::FieldFunction<Real>& nu):
324 MAST::FieldFunction<RealMatrixX>("TransverseShearStiffnessMatrix"),
325 _E(E),
326 _nu(nu)
327 {
328  _functions.insert(&E);
329  _functions.insert(&nu);
330 }
331 
332 
333 
334 void
337  const Real t,
338  RealMatrixX& m) const {
339  m = RealMatrixX::Zero(2,2);
340  Real E, nu, G;
341  _E(p, t, E); _nu(p, t, nu);
342  G = E/2./(1.+nu);
343  m(0,0) = G;
344  m(1,1) = m(0,0);
345 }
346 
347 
348 
349 void
352  const libMesh::Point& p,
353  const Real t,
354  RealMatrixX& m) const {
355  RealMatrixX dm;
356  m = RealMatrixX::Zero(2,2); dm = RealMatrixX::Zero(2, 2);
357  Real E, nu, dEdf, dnudf, G, dG;
358  _E (p, t, E); _E.derivative( f, p, t, dEdf);
359  _nu (p, t, nu); _nu.derivative( f, p, t, dnudf);
360  G = E/2./(1.+nu);
361  dG = (1./2./(1.+nu) * dEdf) + (-E/2./pow(1.+nu,2) * dnudf);
362 
363  dm(0,0) = dm(1,1) = dG;
364 
365 // // parM/parE * parE/parf
366 // dm(0,0) = 1./2./(1.+nu);
367 // dm(1,1) = dm(0,0);
368 // m += dEdf * dm;
369 //
370 // // parM/parnu * parnu/parf
371 // dm(0,0) = -E/2./pow(1.+nu,2);
372 // dm(1,1) = dm(0,0);
373 // m += dnudf*dm;
374 }
375 
376 
377 
378 
381  const MAST::FieldFunction<Real>& nu ,
382  bool plane_stress ):
383 MAST::FieldFunction<RealMatrixX>("StiffnessMatrix2D"),
384 _E(E),
385 _nu(nu),
386 _plane_stress(plane_stress) {
387 
388  _functions.insert(&E);
389  _functions.insert(&nu);
390 }
391 
392 
393 
394 
395 void
397 StiffnessMatrix2D::operator() (const libMesh::Point& p,
398  const Real t,
399  RealMatrixX& m) const {
400  // libmesh_assert(_plane_stress); // currently only implemented for plane stress
401  m = RealMatrixX::Zero(3,3);
402  Real E, nu;
403  _E(p, t, E); _nu(p, t, nu);
404  if (_plane_stress)
405  {
406  for (unsigned int i=0; i<2; i++) {
407  for (unsigned int j=0; j<2; j++)
408  if (i == j) // diagonal: direct stress
409  m(i,i) = E/(1.-nu*nu);
410  else // offdiagonal: direct stress
411  m(i,j) = E*nu/(1.-nu*nu);
412  }
413  m(2,2) = E/2./(1.+nu); // diagonal: shear stress
414  }
415  else // plane_strain
416  {
417  for (unsigned int i=0; i<2; i++) {
418  for (unsigned int j=0; j<2; j++)
419  if (i == j) // diagonal: direct stress
420  m(i,i) = E*(1.-nu)/((1.+nu)*(1.-2.*nu));
421  else // offdiagonal: direct stress
422  m(i,j) = E*nu/((1.+nu)*(1.-2.*nu));
423  }
424  m(2,2) = E/2./(1.+nu); // diagonal: shear stress
425  }
426 }
427 
428 
429 
430 
431 void
434  const libMesh::Point& p,
435  const Real t,
436  RealMatrixX& m) const {
437  // libmesh_assert(_plane_stress); // currently only implemented for plane stress
438  RealMatrixX dm;
439  m = RealMatrixX::Zero(3,3); dm = RealMatrixX::Zero(3, 3);
440  Real E, nu, dEdf, dnudf;
441  _E (p, t, E); _E.derivative( f, p, t, dEdf);
442  _nu (p, t, nu); _nu.derivative( f, p, t, dnudf);
443 
444  if (_plane_stress)
445  {
446  // parM/parE * parE/parf
447  for (unsigned int i=0; i<2; i++) {
448  for (unsigned int j=0; j<2; j++)
449  if (i == j) // diagonal: direct stress
450  dm(i,i) = 1./(1.-nu*nu);
451  else // offdiagonal: direct stress
452  dm(i,j) = 1.*nu/(1.-nu*nu);
453  }
454  dm(2,2) = 1./2./(1.+nu); // diagonal: shear stress
455  m += dEdf * dm;
456 
457  // parM/parnu * parnu/parf
458  for (unsigned int i=0; i<2; i++) {
459  for (unsigned int j=0; j<2; j++)
460  if (i == j) // diagonal: direct stress
461  dm(i,i) = E/pow(1.-nu*nu, 2)*2.*nu;
462  else // offdiagonal: direct stress
463  dm(i,j) = E/(1.-nu*nu) + E*nu/pow(1.-nu*nu,2)*2.*nu;
464  }
465  dm(2,2) = -E/2./pow(1.+nu,2); // diagonal: shear stress
466  m+= dnudf*dm;
467  }
468  else // plane_strain
469  {
470  // parM/parE * parE/parf
471  for (unsigned int i=0; i<2; i++) {
472  for (unsigned int j=0; j<2; j++)
473  if (i == j) // diagonal: direct stress
474  dm(i,i) = 1.*(1.-nu)/((1.+nu)*(1.-2.*nu));
475  else // offdiagonal: direct stress
476  dm(i,j) = 1.*nu/((1.+nu)*(1.-2.*nu));
477  }
478  dm(2,2) = 1./2./(1.+nu); // diagonal: shear stress
479  m += dEdf*dm;
480 
481 
482  // parM/parnu * parnu/parf
483  for (unsigned int i=0; i<2; i++) {
484  for (unsigned int j=0; j<2; j++)
485  if (i == j) // diagonal: direct stress
486  dm(i,i) = E*2.*nu*(2.-nu)/pow(2.*nu*nu+nu-1., 2);
487  else // offdiagonal: direct stress
488  dm(i,j) = (2.*nu*nu*E+E)/pow(2*nu*nu+nu-1., 2);
489  }
490  dm(2,2) = -E/2./pow(1.+nu, 2); // diagonal: shear stress
491  m += dnudf*dm;
492  }
493 }
494 
495 
496 
499  const MAST::FieldFunction<Real>& nu):
500 MAST::FieldFunction<RealMatrixX>("StiffnessMatrix3D"),
501 _E(E),
502 _nu(nu) {
503 
504  _functions.insert(&E);
505  _functions.insert(&nu);
506 }
507 
508 
509 
510 
511 
512 void
514 StiffnessMatrix3D::operator() (const libMesh::Point& p,
515  const Real t,
516  RealMatrixX& m) const {
517  m = RealMatrixX::Zero(6,6);
518  Real E, nu;
519  _E(p, t, E); _nu(p, t, nu);
520  for (unsigned int i=0; i<3; i++) {
521  for (unsigned int j=0; j<3; j++)
522  if (i == j) // diagonal: direct stress
523  m(i,i) = E*(1.-nu)/(1.-nu-2.*nu*nu);
524  else // offdiagonal: direct stress
525  m(i,j) = E*nu/(1.-nu-2.*nu*nu);
526  m(i+3,i+3) = E/2./(1.+nu); // diagonal: shear stress
527  }
528 }
529 
530 
531 
532 
533 void
536  const libMesh::Point& p,
537  const Real t,
538  RealMatrixX& m) const {
539  RealMatrixX dm;
540  m = RealMatrixX::Zero(6,6); dm = RealMatrixX::Zero(6,6);
541  Real E, nu, dEdf, dnudf;
542  _E (p, t, E); _E.derivative( f, p, t, dEdf);
543  _nu (p, t, nu); _nu.derivative( f, p, t, dnudf);
544 
545  // parM/parE * parE/parf
546  for (unsigned int i=0; i<3; i++) {
547  for (unsigned int j=0; j<3; j++)
548  if (i == j) // diagonal: direct stress
549  dm(i,i) = (1.-nu)/(1.-nu-2.*nu*nu);
550  else // offdiagonal: direct stress
551  dm(i,j) = nu/(1.-nu-2.*nu*nu);
552  dm(i+3,i+3) = 1./2./(1.+nu); // diagonal: shear stress
553  }
554  m += dEdf * dm;
555 
556 
557  // parM/parnu * parnu/parf
558  for (unsigned int i=0; i<3; i++) {
559  for (unsigned int j=0; j<3; j++)
560  if (i == j) // diagonal: direct stress
561  dm(i,i) = -E/(1.-nu-2.*nu*nu) + E*(1.-nu)/pow(1.-nu-2.*nu*nu,2)*(1.+4.*nu);
562  else // offdiagonal: direct stress
563  dm(i,j) = E/(1.-nu-2.*nu*nu) + E*nu/pow(1.-nu-2.*nu*nu,2)*(1.+4.*nu);
564  dm(i+3,i+3) = -E/2./pow(1.+nu,2); // diagonal: shear stress
565  }
566  m+= dnudf*dm;
567 }
568 
569 
570 
573 MAST::FieldFunction<RealMatrixX>("InertiaMatrix3D"),
574 _rho(rho) {
575 
576  _functions.insert(&rho);
577 }
578 
579 
580 void
582 InertiaMatrix3D::operator() (const libMesh::Point& p,
583  const Real t,
584  RealMatrixX& m) const {
585  m = RealMatrixX::Zero(3,3);
586  Real rho;
587  _rho(p, t, rho);
588  m(0,0) = rho;
589  m(1,1) = rho;
590  m(2,2) = rho;
591 }
592 
593 
594 void
597  const MAST::FunctionBase &f,
598  const libMesh::Point &p,
599  const Real t,
600  RealMatrixX &m) const {
601 
602 
603  m = RealMatrixX::Zero(3,3);
604  Real rho;
605  _rho.derivative( f, p, t, rho);
606  m(0,0) = rho;
607  m(1,1) = rho;
608  m(2,2) = rho;
609 }
610 
611 
612 
613 void
615 operator() (const libMesh::Point& p,
616  const Real t,
617  RealMatrixX& m) const {
618 
619  Real alpha;
620  _alpha(p, t, alpha);
621  switch (_dim) {
622  case 1:
623  m = RealMatrixX::Zero(2,1);
624  break;
625 
626  case 2:
627  m = RealMatrixX::Zero(3,1);
628  break;
629 
630  case 3:
631  m = RealMatrixX::Zero(6,1);
632  break;
633  }
634 
635  for (unsigned int i=0; i<_dim; i++)
636  m(i,0) = alpha;
637 }
638 
639 
640 
641 
642 
643 void
646  const libMesh::Point& p,
647  const Real t,
648  RealMatrixX& m) const {
649 
650 
651  Real alpha;
652  _alpha.derivative( f, p, t, alpha);
653  switch (_dim) {
654  case 1:
655  m = RealMatrixX::Zero(2,1);
656  break;
657 
658  case 2:
659  m = RealMatrixX::Zero(3,1);
660  break;
661 
662  case 3:
663  m = RealMatrixX::Zero(6,1);
664  break;
665  }
666 
667  for (unsigned int i=0; i<_dim; i++)
668  m(i,0) = alpha;
669 
670 }
671 
672 
673 
674 
675 
676 void
678 operator() (const libMesh::Point& p,
679  const Real t,
680  RealMatrixX& m) const {
681 
682  Real cp, rho;
683  _cp (p, t, cp);
684  _rho (p, t, rho);
685 
686  m.setZero(1,1);
687 
688  m(0,0) = cp*rho;
689 }
690 
691 
692 
693 
694 
695 void
698  const libMesh::Point& p,
699  const Real t,
700  RealMatrixX& m) const {
701 
702 
703  Real cp, dcp, rho, drho;
704  _cp (p, t, cp); _cp.derivative( f, p, t, dcp);
705  _rho (p, t, rho); _rho.derivative( f, p, t, drho);
706 
707  m.setZero(1,1);
708 
709  m(0,0) = dcp*rho + cp*drho;
710 }
711 
712 
713 
714 
715 void
717 operator() (const libMesh::Point& p,
718  const Real t,
719  RealMatrixX& m) const {
720 
721  Real k;
722  _k (p, t, k);
723 
724  m.setIdentity(_dim, _dim);
725 
726  m *= k;
727 }
728 
729 
730 
731 
732 
733 void
736  const libMesh::Point& p,
737  const Real t,
738  RealMatrixX& m) const {
739 
740 
741  Real k;
742  _k.derivative( f, p, t, k);
743 
744  m.setIdentity(_dim, _dim);
745 
746  m *= k;
747 }
748 
749 
750 
751 
752 
755 _stiff_mat_1d (nullptr),
756 _stiff_mat_2d (nullptr),
757 _stiff_mat_3d (nullptr),
758 _damp_mat (nullptr),
759 _inertia_mat_3d (nullptr),
760 _thermal_exp_mat_1d (nullptr),
761 _thermal_exp_mat_2d (nullptr),
762 _thermal_exp_mat_3d (nullptr),
763 _transverse_shear_mat (nullptr),
764 _thermal_capacitance_mat_1d (nullptr),
765 _thermal_capacitance_mat_2d (nullptr),
766 _thermal_capacitance_mat_3d (nullptr),
767 _thermal_conductance_mat_1d (nullptr),
768 _thermal_conductance_mat_2d (nullptr),
769 _thermal_conductance_mat_3d (nullptr)
770 { }
771 
772 
773 
775 
776  if (_stiff_mat_1d) delete _stiff_mat_1d;
777  if (_stiff_mat_2d) delete _stiff_mat_2d;
778  if (_stiff_mat_3d) delete _stiff_mat_3d;
779 
780  if (_damp_mat) delete _damp_mat;
781  if (_inertia_mat_3d) delete _inertia_mat_3d;
786 
790 
794 }
795 
796 
799  const bool plane_stress) {
800 
801  MAST::FieldFunction<RealMatrixX> *rval = nullptr;
802 
803  switch (dim) {
804  case 1: {
805 
806  if (!_stiff_mat_1d)
808  (this->get<MAST::FieldFunction<Real> >("E"),
809  this->get<MAST::FieldFunction<Real> >("nu"));
810  return *_stiff_mat_1d;
811  }
812  break;
813 
814  case 2: {
815 
816  if (!_stiff_mat_2d)
818  (this->get<MAST::FieldFunction<Real> >("E"),
819  this->get<MAST::FieldFunction<Real> >("nu"),
820  plane_stress);
821 
822  return *_stiff_mat_2d;
823  }
824  break;
825 
826  case 3: {
827 
828  if (!_stiff_mat_3d)
830  (this->get<MAST::FieldFunction<Real> >("E"),
831  this->get<MAST::FieldFunction<Real> >("nu"));
832 
833  return *_stiff_mat_3d;
834  }
835  break;
836 
837  default:
838  // should not get here
839  libmesh_error_msg("Should not get here; " << __PRETTY_FUNCTION__ << " in " << __FILE__ << " at line number " << __LINE__);
840  }
841 }
842 
843 
844 
845 
848 
849  // make sure that this is not null
850  libmesh_assert(false);
851 
852  return *_damp_mat;
853 }
854 
855 
856 
857 
860 
861  switch (dim) {
862  case 3: {
863 
864  if (!_inertia_mat_3d)
866  (this->get<MAST::FieldFunction<Real> >("rho"));
867 
868  return *_inertia_mat_3d;
869  }
870  break;
871 
872  case 1:
873  case 2:
874  default:
875  // implemented only for 3D since the 2D and 1D elements
876  // calculate it themselves
877  libmesh_error_msg("Implemented only for 3D since the 2D and 1D elements calculate it themselves; " << __PRETTY_FUNCTION__ << " in " << __FILE__ << " at line number " << __LINE__);
878  }
879 }
880 
881 
882 
883 
886 
887  switch (dim) {
888  case 3: {
889 
890  if (!_thermal_exp_mat_3d)
893  (dim,
894  this->get<MAST::FieldFunction<Real> >("alpha_expansion"));
895 
896  return *_thermal_exp_mat_3d;
897  }
898  break;
899 
900 
901  case 2: {
902 
903  if (!_thermal_exp_mat_2d)
906  (dim,
907  this->get<MAST::FieldFunction<Real> >("alpha_expansion"));
908 
909  return *_thermal_exp_mat_2d;
910  }
911  break;
912 
913 
914  case 1: {
915 
916  if (!_thermal_exp_mat_1d)
919  (dim,
920  this->get<MAST::FieldFunction<Real> >("alpha_expansion"));
921 
922  return *_thermal_exp_mat_1d;
923  }
924  break;
925 
926 
927  default:
928  libmesh_error_msg("Should not get here; " << __PRETTY_FUNCTION__ << " in " << __FILE__ << " at line number " << __LINE__);
929  }
930 
931 
932 }
933 
934 
935 
936 
939 
943  (this->get<MAST::FieldFunction<Real> >("E"),
944  this->get<MAST::FieldFunction<Real> >("nu"));
945 
946  return *_transverse_shear_mat;
947 }
948 
949 
950 
953 
954  switch (dim) {
955 
956  case 1: {
957 
961  (dim,
962  this->get<MAST::FieldFunction<Real> >("rho"),
963  this->get<MAST::FieldFunction<Real> >("cp"));
964 
966  }
967  break;
968 
969 
970  case 2: {
971 
975  (dim,
976  this->get<MAST::FieldFunction<Real> >("rho"),
977  this->get<MAST::FieldFunction<Real> >("cp"));
978 
980  }
981  break;
982 
983 
984  case 3: {
985 
989  (dim,
990  this->get<MAST::FieldFunction<Real> >("rho"),
991  this->get<MAST::FieldFunction<Real> >("cp"));
992 
994  }
995  break;
996 
997 
998  default:
999  // should not get here
1000  libmesh_error_msg("Should not get here; " << __PRETTY_FUNCTION__ << " in " << __FILE__ << " at line number " << __LINE__);
1001  }
1002 }
1003 
1004 
1005 
1006 
1007 
1010 
1011  switch (dim) {
1012 
1013  case 1: {
1014 
1018  (dim, this->get<MAST::FieldFunction<Real> >("k_th"));
1019 
1021  }
1022  break;
1023 
1024 
1025  case 2: {
1026 
1030  (dim, this->get<MAST::FieldFunction<Real> >("k_th"));
1031 
1033  }
1034  break;
1035 
1036 
1037  case 3: {
1038 
1042  (dim, this->get<MAST::FieldFunction<Real> >("k_th"));
1043 
1045  }
1046  break;
1047 
1048 
1049  default:
1050  // should not get here
1051  libmesh_error_msg("Should not get here; " << __PRETTY_FUNCTION__ << " in " << __FILE__ << " at line number " << __LINE__);
1052  }
1053 }
1054 
1055 
1056 
MAST::FieldFunction< RealMatrixX > * _thermal_conductance_mat_3d
virtual void operator()(const libMesh::Point &p, const Real t, RealMatrixX &m) const
calculates the value of the function at the specified point, p, and time, t, and returns it in v...
virtual void derivative(const MAST::FunctionBase &f, const libMesh::Point &p, const Real t, RealMatrixX &m) const
calculates the value of the derivative of function with respect to the function f at the specified po...
virtual void derivative(const MAST::FunctionBase &f, const libMesh::Point &p, const Real t, RealMatrixX &m) const
calculates the value of the derivative of function with respect to the function f at the specified po...
virtual void operator()(const libMesh::Point &p, const Real t, RealMatrixX &m) const
calculates the value of the function at the specified point, p, and time, t, and returns it in v...
virtual const MAST::FieldFunction< RealMatrixX > & inertia_matrix(const unsigned int dim)
StiffnessMatrix3D(const MAST::FieldFunction< Real > &E, const MAST::FieldFunction< Real > &nu)
virtual void operator()(const libMesh::Point &p, const Real t, RealMatrixX &m) const
calculates the value of the function at the specified point, p, and time, t, and returns it in v...
MAST::FieldFunction< RealMatrixX > * _thermal_exp_mat_3d
virtual const MAST::FieldFunction< RealMatrixX > & thermal_expansion_matrix(const unsigned int dim)
ThermalCapacitanceMatrix(unsigned int dim, const MAST::FieldFunction< Real > &rho, const MAST::FieldFunction< Real > &cp)
std::set< const MAST::FunctionBase * > _functions
set of functions that this function depends on
StiffnessMatrix1D(const MAST::FieldFunction< Real > &E, const MAST::FieldFunction< Real > &nu)
virtual void derivative(const MAST::FunctionBase &f, ValType &v) const
calculates the value of the function derivative and returns it in v.
libMesh::Real Real
ThermalConductanceMatrix(unsigned int dim, MAST::FieldFunction< Real > &k)
TransverseShearStiffnessMatrix(const MAST::FieldFunction< Real > &E, const MAST::FieldFunction< Real > &nu)
MAST::FieldFunction< RealMatrixX > * _inertia_mat_3d
virtual void operator()(const libMesh::Point &p, const Real t, RealMatrixX &m) const
calculates the value of the function at the specified point, p, and time, t, and returns it in v...
MAST::FieldFunction< RealMatrixX > * _damp_mat
Matrix< Real, Dynamic, Dynamic > RealMatrixX
virtual void derivative(const MAST::FunctionBase &f, const libMesh::Point &p, const Real t, RealMatrixX &m) const
calculates the value of the derivative of function with respect to the function f at the specified po...
MAST::FieldFunction< RealMatrixX > * _transverse_shear_mat
This creates the base class for functions that have a saptial and temporal dependence, and provide sensitivity operations with respect to the functions and parameters.
StiffnessMatrix2D(const MAST::FieldFunction< Real > &E, const MAST::FieldFunction< Real > &nu, bool plane_stress)
virtual const MAST::FieldFunction< RealMatrixX > & damping_matrix(const unsigned int dim)
virtual const MAST::FieldFunction< RealMatrixX > & conductance_matrix(const unsigned int dim)
virtual void operator()(const libMesh::Point &p, const Real t, RealMatrixX &m) const
calculates the value of the function at the specified point, p, and time, t, and returns it in v...
virtual const MAST::FieldFunction< RealMatrixX > & capacitance_matrix(const unsigned int dim)
virtual void derivative(const MAST::FunctionBase &f, const libMesh::Point &p, const Real t, RealMatrixX &m) const
calculates the value of the derivative of function with respect to the function f at the specified po...
MAST::FieldFunction< RealMatrixX > * _thermal_exp_mat_1d
virtual const MAST::FieldFunction< RealMatrixX > & stiffness_matrix(const unsigned int dim, const bool plane_stress=true)
MAST::FieldFunction< RealMatrixX > * _stiff_mat_2d
virtual void derivative(const MAST::FunctionBase &f, const libMesh::Point &p, const Real t, RealMatrixX &m) const
calculates the value of the derivative of function with respect to the function f at the specified po...
virtual void operator()(const libMesh::Point &p, const Real t, RealMatrixX &m) const
calculates the value of the function at the specified point, p, and time, t, and returns it in v...
MAST::FieldFunction< RealMatrixX > * _thermal_capacitance_mat_3d
MAST::FieldFunction< RealMatrixX > * _stiff_mat_3d
MAST::FieldFunction< RealMatrixX > * _thermal_conductance_mat_1d
ThermalExpansionMatrix(unsigned int dim, const MAST::FieldFunction< Real > &alpha)
virtual void derivative(const MAST::FunctionBase &f, const libMesh::Point &p, const Real t, RealMatrixX &m) const
calculates the value of the derivative of function with respect to the function f at the specified po...
virtual const MAST::FieldFunction< RealMatrixX > & transverse_shear_stiffness_matrix()
MAST::FieldFunction< RealMatrixX > * _thermal_exp_mat_2d
MAST::FieldFunction< RealMatrixX > * _thermal_capacitance_mat_1d
MAST::FieldFunction< RealMatrixX > * _thermal_capacitance_mat_2d
virtual void derivative(const MAST::FunctionBase &f, const libMesh::Point &p, const Real t, RealMatrixX &m) const
calculates the value of the derivative of function with respect to the function f at the specified po...
virtual void derivative(const MAST::FunctionBase &f, const libMesh::Point &p, const Real t, RealMatrixX &m) const
calculates the value of the derivative of function with respect to the function f at the specified po...
virtual void operator()(const libMesh::Point &p, const Real t, RealMatrixX &m) const
calculates the value of the function at the specified point, p, and time, t, and returns it in v...
MAST::FieldFunction< RealMatrixX > * _thermal_conductance_mat_2d
MAST::FieldFunction< RealMatrixX > * _stiff_mat_1d
virtual void operator()(const libMesh::Point &p, const Real t, RealMatrixX &m) const
calculates the value of the function at the specified point, p, and time, t, and returns it in v...