BELFEM 0.9.0
Berkeley Lab Finite Element Framework
Loading...
Searching...
No Matches
cl_Material.hpp
Go to the documentation of this file.
1/*
2 * BELFEM -- The Berkeley Lab Finite Element Framework
3 * Copyright (c) 2026, The Regents of the University of California,
4 * through Lawrence Berkeley National Laboratory (subject to receipt of any required
5 * approvals from the U.S. Dept. of Energy). All rights reserved.
6 *
7 * Developers: Christian Messe, Gregory Giard
8 *
9 * See the top-level LICENSE file for the complete license and disclaimer.
10 */
11
12#ifndef BELFEM_CL_MATERIAL_HPP
13#define BELFEM_CL_MATERIAL_HPP
14#include "globals.hpp"
15
16#include <cmath>
17
18#include "typedefs.hpp"
19#include "constants.hpp"
20#include "assert.hpp"
21#include "cl_Bitset.hpp"
22#include "cl_Cell.hpp"
23
24// note: NEVER include cl_Vector.hpp or cl_Matrix.hpp here, or any class that uses it.
25// Doing so would break the API for the user defined materials.
26
27namespace belfem
28{
47 constexpr real gTAlphaSwitchMax = 273.15 ;
48}
49
50//#include "cl_Mesh.hpp"
51
52#if defined(__clang__)
53#pragma clang diagnostic push
54#pragma clang diagnostic ignored "-Wformat-security"
55#pragma clang diagnostic ignored "-Wformat"
56#pragma clang diagnostic ignored "-Wunused-variable"
57#pragma clang diagnostic ignored "-Wunused-parameter"
58
59#elif defined(__GNUC__) || defined(__GNUG__)
60#pragma GCC diagnostic push
61#pragma GCC diagnostic ignored "-Wformat"
62#pragma GCC diagnostic ignored "-Wunused-variable"
63#pragma GCC diagnostic ignored "-Wunused-parameter"
64
65#elif defined(BELFEM_INTEL)
66 // Intel compiler diagnostics
67#pragma warning(push)
68 // disable format warnings
69#pragma warning(disable: 1011)
70 // disable unused variable warnings
71#pragma warning(disable: 177)
72 // keep your original one
73#pragma warning(disable: 1595)
74
75#endif
76
77
78
79// Forward declaration (full definition only needed in implementation files)
80
81#include "cl_JcFunction.hpp"
82
83namespace belfem
84{
85//------------------------------------------------------------------------------
86 namespace material
87 {
88 class BhCurve ;
89 class SplineLookupTable ;
90 }
91
92//------------------------------------------------------------------------------
93
116
121 {
122 T = 0, // temperature [K]
123 normB = 1, // magnitude of in-plane magnetic field [T] (HTS, for lambda and rho)
124 angleBxJ = 2, // angle between B and j [rad]
125 angleNxB = 3, // angle between surface normal and B [rad]
126 normH = 4, // magnetic field strength [A/m] (for mu in ferromagnetic materials)
127 normJ = 5,
128 Jc = 6,
129 rho = 7,
130 UNDEFINED = 8
131 };
132
137
153 {
154 density = 0, // density [kg/m³]
155 E = 1, // Young's modulus [Pa]
156 nu = 2, // Poisson's ratio [-]
157 cp = 3, // specific heat capacity [J/(kg·K)]
158 lambda = 4, // thermal conductivity [W/(m·K)]
159 mu = 5, // magnetic permeability [H/m], defined as ∂B/∂H
160 rho = 6, // electric resistivity [Ω·m]
161 alpha = 7, // thermal expansion coefficient [1/K], defined as (1/l)·∂l/∂T, not (1/l)·Δl/ΔT!
162 Rp02 = 8, // yield stress [Pa]
163 debye = 9, // Debye temperature [K]
164 rho_i = 10, // inner resistivity of noble metal [Ω·m]
165 kohler_trans = 11, // Kohler parameter for transverse magnetoresistance [-]
166 kohler_long = 12, // Kohler parameter for longitudinal magnetoresistance [-]
167 T_crit = 13, // critical temperature [K]
168 M = 14, // molar mass [kg/mol]
169 Gamma = 15, // impurity parameter [-]
170 R = 16, // specific gas constant [J/(kg·K)]
171 T_max = 17, // maximum temperature [K]
172 ref_density = 18, // reference density [kg/m³]
173 T_ref_density = 19, // temperature at reference density [K]
174 gamma = 20, // linear Debye parameter [J/(kg·K²)], cv = γ·T + β·T³ = ∂cp/∂T at T=0
175 beta = 21, // cubic Debye parameter [J/(kg·K⁴)], cv = γ·T + β·T³
176 q = 22, // number of atoms per molecule [-] (default: 1)
177 debye0K = 23, // Debye temperature at 0 K [K]
178 rho_i_ref = 24, // reference inner resistivity [Ω·m]
179 T_ref_rho_i = 25, // temperature at reference inner resistivity [K]
180 A_bloch_gruen = 26, // A-parameter for Bloch-Grüneisen law [-]
181 n_bloch_gruen = 27, // n-parameter for Bloch-Grüneisen law [-]
182 RRR = 28, // residual resistivity ratio [-]
183 rho_0 = 29, // residual resistivity [Ω·m]
184 layer_thickness = 30, // characteristic length, e.g., layer thickness [m]
185 ec = 31, // critical electric field [V/m]
186 jc = 32, // critical current density [A/m²]
187 n = 33, // exponent for power law [-]
188 Tcurie = 34, // Curie temperature [K]
189 A_electron_magnon = 35, // electron-magnon scattering parameter [ Ω · m / K² ]
190 A_spin_disorder = 36, // spin disorder amplitude [ Ω · m ]
191 grueneisen = 37, // Grüneisen parameter
192 density_correction = 38, // density scaling factor, to correct solder thickness [-]
193 rho0_pure = 39, // resistivity from TPCR for pure metals
194 UNDEFINED = 40
195 };
196
202 constexpr size_t gNumNonConstantMaterialProperties = static_cast< size_t >( MaterialProperty::T_crit ) ;
203
207 constexpr size_t gNumMaterialProperties = static_cast< size_t >( MaterialProperty::UNDEFINED ) ;
208
212 string
213 to_string( const MaterialProperty aProperty ) ;
214
218 unit
219 get_unit( const MaterialProperty aProperty ) ;
220
232 enum class ResistivityLaw
233 {
237 };
238
239 class Material ;
240
241 typedef real ( MatFunc1 )( const Material * , const real ) ; // T
242 typedef real ( MatFunc2 )( const Material *, const real, const real ) ;
243 typedef real ( MatFunc3 )( const Material *, const real, const real, const real ) ;
244 typedef real ( DefectFunc )( const real, const real, const real, const real ) ;
245 typedef real ( HeatFunc )( const real, const real, const real, const real ) ;
246
279 {
280 const proc_t mCommRank ;
281
282 const MaterialType mType ;
283
284 const bool mIsIsotropic ; // Flag for isotropic properties (default: true)
285
286 string mLabel ; // Material label (e.g., "Copper", "YBCO")
287
288 string mNumber = "" ; // Material number/identifier if it exists
289
290 // bitwise flags for this vertex
291 // 1: used by kernel
292 // 7: reserved for factory
293 uint8_t mFlags = 0;
294
295 Bitset< gNumMaterialProperties > mHaveProperty ; // Flags which properties are implemented
296
297 Cell< real > mConstantProperties ; // Storage for constant property values
298
299 Cell< MaterialDependencyBitset * > mPropertyDependencies ; // Tracks dependencies for each property
300
301
302 //Piecewise resistivity parameters
303 real mNff = 3.0 ;
304 real mD = 2.5 ;
305
307 real mRhoMin = 0.0 ;
308
313 real mTAlphaSwitch = BELFEM_QUIET_NAN ;
314
318 ResistivityLaw mResistivityLaw = ResistivityLaw::PowerLaw ;
319
320 // Function pointers for property evaluation (dispatched based on dependencies)
321 real ( Material::*mFunctionDensity ) ( const real T ) const = nullptr ;
322
323 real ( Material::*mFunctionCp ) ( const real T ) const = nullptr ;
324 real ( Material::*mFunctionLambda ) ( const real T ) const = nullptr ;
325
326 real ( Material::*mFunctiondCpdT ) ( const real T ) const = nullptr ;
327 real ( Material::*mFunctiondLambdadT ) ( const real T ) const = nullptr ;
328
329 real ( Material::*mFunctiond2CpdT2 ) ( const real T ) const = nullptr ;
330
331 real ( Material::*mFunctionRho ) ( const real T ) const = nullptr ;
332 real ( Material::*mFunctionRhoI ) ( const real T ) const = nullptr ;
333 real ( Material::*mFunctiondRhodT ) ( const real T ) const = nullptr ;
334
335 real ( Material::*mFunctionE ) ( const real T ) const = nullptr ;
336 real ( Material::*mFunctionNu ) ( const real T ) const = nullptr ;
337
338 real ( Material::*mFunctionAlpha ) ( const real T ) const = nullptr ;
339
340 real ( Material::*mFunctionRp02 ) ( const real T ) const = nullptr ;
341 real ( Material::*mFunctionDebye ) ( const real T ) const = nullptr ;
342
343 DefectFunc * mDefectFunction = nullptr ;
344 HeatFunc * mHeatFunction = nullptr ;
345
349 void * mDefectHandle = nullptr ;
350
352 void * mHeatHandle = nullptr ;
353
354 // we don't want all materials to access private functions
355 // but for this one, it's OK
357
358 protected:
359
369 real
370 jc_eval( const real T, const real normB, const real angleNxB ) const ;
371
375 real
376 djc_eval_dB( const real T, const real normB, const real angleNxB ) const ;
377
379 real
380 dn_eval_dB( const real T, const real normB, const real angleNxB ) const ;
381
386 real
387 djc_eval_dT( const real T, const real normB, const real angleNxB ) const ;
388
390 real
391 dn_eval_dT( const real T, const real normB, const real angleNxB ) const ;
392
393 real
394 n_eval( const real T, const real normB, const real angleNxB ) const ;
395
400 void
401 check_riva_n_source() const ;
402
403 real ( Material::*mFunctionRhoKohler ) ( const real T, const real normB, const real angle ) const = nullptr ;
404 real ( Material::*mFunctiondRhoKohlerdT ) ( const real T, const real normB, const real angle ) const = nullptr ;
405 real ( Material::*mFunctiondRhoKohlerdB ) ( const real T, const real normB, const real angle ) const = nullptr ;
406 real ( Material::*mFunctiondRhoKohlerdbeta ) ( const real T, const real normB, const real angle ) const = nullptr ;
407
408 real ( Material::*mFunctionH ) ( const real B ) const = nullptr ;
409 real ( Material::*mFunctionMu ) ( const real H, const real T ) const = nullptr ;
410 void ( Material::*mFunctionDMuDH )( double, double&, double& ) const = nullptr ;
411
412 // Function objects (material owns and deletes these)
413
416
417//------------------------------------------------------------------------------
418 public:
419//------------------------------------------------------------------------------
420
426 Material( const MaterialType aType, const bool aIsIsotropic=true ) ;
427
431 virtual ~Material() ;
432
433 // Non-copyable and non-movable (Rule of Five)
434 Material( const Material & ) = delete ;
435 Material & operator=( const Material & ) = delete ;
436 Material( Material && ) = delete ;
437 Material & operator=( Material && ) = delete ;
438
439//------------------------------------------------------------------------------
440// Property Checks
441//------------------------------------------------------------------------------
442
448 bool
449 have( const MaterialProperty aProperty ) const ;
450
455 bool
456 have_defect() const ;
457
462 bool
463 have_heating() const ;
464
465
470 bool
471 use_piecewise() const ;
472
479 bool
480 depends( const MaterialProperty aProperty, const MaterialDependency aDependency ) const ;
481
488 dependencies( const MaterialProperty aProperty ) const ;
489
494 bool
495 is_isotropic() const ;
496
502 type() const ;
503
504//------------------------------------------------------------------------------
505// Parameters and Tools
506//------------------------------------------------------------------------------
507
512 const string &
513 label() const ;
514
519 const string &
520 number() const ;
521
531 void
532 load_bh_curve( const material::BhCurve * aCurve );
533
537 void
538 flag( const uint8_t aIndex = 0 );
539
543 void
544 unflag( const uint8_t aIndex = 0 );
545
550 bool
551 is_flagged( const uint8_t aIndex = 0 ) const ;
552
558 bool
559 is_constant( const MaterialProperty aProperty ) const ;
560
565 virtual void
566 set_RRR( const real RRR ) ;
567
568//------------------------------------------------------------------------------
569// Mass and Weight
570//------------------------------------------------------------------------------
571
580 virtual real
581 density( const real T=gTroom ) const ;
582
589 real
590 ref_density() const ;
591
596 real
597 M() const ;
598
599//------------------------------------------------------------------------------
600// Thermal Properties
601//------------------------------------------------------------------------------
602
608 virtual real
609 cp( const real T=gTroom ) const ;
610
611 virtual real
612 dcpdT( const real T=gTroom ) const ;
613
614 virtual real
615 d2cpdT2( const real T=gTroom ) const ;
616
622 virtual real
623 lambda( const real T=gTroom ) const ;
624
625 virtual real
626 dlambdadT( const real T=gTroom ) const ;
627
628
641 virtual real
642 lambda( const real T, const real B, const real beta ) const ;
643
644 virtual real
645 dlambdadT( const real T, const real B, const real beta ) const ;
646
647 virtual real
648 dlambdadB( const real T, const real B, const real beta ) const ;
649
650 virtual real
651 dlambdadbeta( const real T, const real B, const real beta ) const ;
652
661 virtual real
662 lambda( const real T, const real B_par, const real B_perp, const real J ) const ;
663
664 virtual real
665 dlambdadT( const real T, const real B_par, const real B_perp, const real J ) const ;
666
667
668//------------------------------------------------------------------------------
669// Electric Properties
670//------------------------------------------------------------------------------
671
679 virtual real
680 rho( const real T ) const ;
681
682 virtual real
683 drhodT( const real T ) const ;
684
697 virtual real
698 rho( const real T, const real B, const real beta ) const ;
699
700 virtual real
701 drhodT( const real T, const real B, const real beta ) const ;
702
703 virtual real
704 drhodB( const real T, const real B, const real beta ) const ;
705
706 virtual real
707 drhodbeta( const real T, const real B, const real beta ) const ;
708
720 real
721 rho_powerlaw( const real normJ ) const ;
722
723 real
724 rho_powerlaw( const real normJ, const real x, const real y, const real z, const real t ) const ;
725
736 real
737 rho_powerlaw( const real normJ, real normB, const real angleNxB ) const ;
738
739 real
740 rho_powerlaw( const real normJ, real normB, const real angleNxB, const real x, const real y, const real z, const real t ) const ;
741
753 real
754 rho_powerlaw( const real normJ, const real T, real normB, const real angleNxB ) const ;
755
756 real
757 rho_powerlaw( const real normJ, const real T, real normB, const real angleNxB, const real x, const real y, const real z, const real t ) const ;
758
759 //Temperature dependent only cases (custom)
760 real
761 rho_powerlaw( const real normJ, const real T ) const ;
762
763 real
764 rho_powerlaw( const real normJ, const real T, const real x, const real y, const real z, const real t ) const ;
765
774 real
775 rho_piecewise( const real normJ ) const ;
776
777 real
778 rho_piecewise( const real normJ, const real x, const real y, const real z, const real t ) const ;
779
788 real
789 rho_piecewise( const real normJ, real normB, const real angleNxB ) const ;
790
791 real
792 rho_piecewise( const real normJ, real normB, const real angleNxB, const real x, const real y, const real z, const real t ) const ;
793
803 real
804 rho_piecewise( const real normJ, const real T, real normB, const real angleNxB ) const ;
805
806 real
807 rho_piecewise( const real normJ, const real T, real normB, const real angleNxB, const real x, const real y, const real z, const real t ) const ;
808
809 //Temperature dependent only cases (custom)
810 real
811 rho_piecewise( const real normJ, const real T ) const ;
812
813 real
814 rho_piecewise( const real normJ, const real T, const real x, const real y, const real z, const real t ) const ;
815
831 real
832 rho_riva( const real normJ, const real T, const real normB, const real angleNxB ) const ;
833
835 real
836 rho_riva( const real normJ, const real T, const real normB, const real angleNxB, const real x, const real y, const real z, const real t ) const ;
837
839 real
840 drho_riva_dJ( const real normJ, const real T, const real normB, const real angleNxB ) const ;
841
842 real
843 drho_riva_dJ( const real normJ, const real T, const real normB, const real angleNxB, const real x, const real y, const real z, const real t ) const ;
844
846 real
847 drho_riva_dB( const real normJ, const real T, const real normB, const real angleNxB ) const ;
848
849 real
850 drho_riva_dB( const real normJ, const real T, const real normB, const real angleNxB, const real x, const real y, const real z, const real t ) const ;
851
853 real
854 drho_riva_dT( const real normJ, const real T, const real normB, const real angleNxB ) const ;
855
856 real
857 drho_riva_dT( const real normJ, const real T, const real normB, const real angleNxB, const real x, const real y, const real z, const real t ) const ;
858
859 real
860 n( const real normB, const real angleNxB, const real T ) const ;
861
862 real
863 n( const real normB, const real angleNxB ) const ;
864
865 real
866 jc( const real normB, const real angleNxB, const real T ) const ;
867
868 real
869 jc( const real normB, const real angleNxB ) const ;
870
871 //Case of jc with user-defined defect
872 real
873 jc( const real normB, const real angleNxB, const real T, const real x, const real y, const real z, const real t ) const ;
874
875 real
876 jc( const real normB, const real angleNxB, const real x, const real y, const real z, const real t ) const ;
877
888 real
889 drho_powerlaw_dJ( const real normJ, const real T, const real normB, const real angleNxB ) const ;
890
891 real
892 drho_powerlaw_dJ( const real normJ, const real T, const real normB, const real angleNxB, const real x, const real y, const real z, const real t ) const ;
893
894 // Overloads matching rho_powerlaw signatures
895 real
896 drho_powerlaw_dJ( const real normJ ) const ;
897
898 real
899 drho_powerlaw_dJ( const real normJ, const real x, const real y, const real z, const real t ) const ;
900
901 real
902 drho_powerlaw_dJ( const real normJ, const real T ) const ;
903
904 real
905 drho_powerlaw_dJ( const real normJ, const real T, const real x, const real y, const real z, const real t ) const ;
906
907 real
908 drho_powerlaw_dJ( const real normJ, const real normB, const real angleNxB ) const ;
909
910 real
911 drho_powerlaw_dJ( const real normJ, const real normB, const real angleNxB, const real x, const real y, const real z, const real t ) const ;
912
923 real
924 drho_piecewise_dJ( const real normJ, const real T, const real normB, const real angleNxB ) const ;
925
926 real
927 drho_piecewise_dJ( const real normJ, const real T, const real normB, const real angleNxB, const real x, const real y, const real z, const real t ) const ;
928
940 real
941 drho_powerlaw_dB( const real normJ, const real T, const real normB, const real angleNxB ) const ;
942
944 real
945 drho_powerlaw_dB( const real normJ, const real T, const real normB, const real angleNxB, const real x, const real y, const real z, const real t ) const ;
946
960 real
961 drho_powerlaw_dT( const real normJ, const real T, const real normB, const real angleNxB ) const ;
962
964 real
965 drho_powerlaw_dT( const real normJ, const real T, const real normB, const real angleNxB, const real x, const real y, const real z, const real t ) const ;
966
984 real
985 drho_piecewise_dB( const real normJ, const real T, const real normB, const real angleNxB ) const ;
986
988 real
989 drho_piecewise_dB( const real normJ, const real T, const real normB, const real angleNxB, const real x, const real y, const real z, const real t ) const ;
990
1006 real
1007 drho_piecewise_dT( const real normJ, const real T, const real normB, const real angleNxB ) const ;
1008
1010 real
1011 drho_piecewise_dT( const real normJ, const real T, const real normB, const real angleNxB, const real x, const real y, const real z, const real t ) const ;
1012
1013 // Overloads matching rho_piecewise signatures
1014 real
1015 drho_piecewise_dJ( const real normJ ) const ;
1016
1017 real
1018 drho_piecewise_dJ( const real normJ, const real x, const real y, const real z, const real t ) const ;
1019
1020 real
1021 drho_piecewise_dJ( const real normJ, const real T ) const ;
1022
1023 real
1024 drho_piecewise_dJ( const real normJ, const real T, const real x, const real y, const real z, const real t ) const ;
1025
1026 real
1027 drho_piecewise_dJ( const real normJ, const real normB, const real angleNxB ) const ;
1028
1029 real
1030 drho_piecewise_dJ( const real normJ, const real normB, const real angleNxB, const real x, const real y, const real z, const real t ) const ;
1031
1037 virtual real
1038 rho_i( const real T ) const ;
1039
1040//------------------------------------------------------------------------------
1041// Magnetic Properties
1042//------------------------------------------------------------------------------
1043
1049 virtual real
1050 H( const real B ) const ;
1051
1058 virtual real
1059 mu( const real H, const real T=BELFEM_QUIET_NAN ) const ;
1060
1067 virtual void
1068 dmudH( const real H, real & mu, real & dmudH ) const ;
1069
1070//------------------------------------------------------------------------------
1071// Mechanical Properties
1072//------------------------------------------------------------------------------
1073
1079 virtual real
1080 E( real T=gTroom ) const ;
1081
1087 virtual real
1088 nu( real T=gTroom ) const ;
1089
1095 virtual real
1096 G( real T=gTroom ) const ;
1097
1103 virtual real
1104 K( real T=gTroom ) const ;
1105
1113 virtual real
1114 alpha( real T=gTroom ) const ;
1115
1121 virtual real
1122 l( real T ) const ;
1123
1129 virtual real
1130 Rp02( real T=gTroom ) const ;
1131
1132//------------------------------------------------------------------------------
1133// Other Properties
1134//------------------------------------------------------------------------------
1135
1141 virtual real
1142 debye( const real T ) const ;
1143
1153 virtual void
1154 set_bh_curve( const material::BhCurve * aCurve );
1155
1162 void
1163 set_jc_function( const material::JcFunction * aFunction );
1164
1171 void
1172 set_n_function( const material::JcFunction * aFunction );
1173
1174 void
1175 set_piecewise( const bool aUsePiecewise );
1176
1177 void
1178 set_resistivity_law( const ResistivityLaw aLaw );
1179
1181 resistivity_law() const ;
1182
1183 bool
1184 use_riva() const ;
1185//------------------------------------------------------------------------------
1186// API for user defined functions
1187//------------------------------------------------------------------------------
1188
1202 virtual void
1204 const MaterialProperty Property,
1205 const MaterialDependency Dependency,
1206 MatFunc1 * Function ) ;
1207
1221 virtual void
1223 const MaterialProperty Property,
1224 const MaterialDependency Dependency1,
1225 const MaterialDependency Dependency2,
1226 MatFunc2 * Function ) ;
1227
1242 virtual void
1244 const MaterialProperty Property,
1245 const MaterialDependency Dependency1,
1246 const MaterialDependency Dependency2,
1247 const MaterialDependency Dependency3,
1248 MatFunc3 * Function ) ;
1249
1257 void
1258 set_user_defined_defect( DefectFunc * Function ) ;
1259
1269 void
1270 read_defect( const string & aLibraryPath,
1271 const string & aLabel ) ;
1272
1279 void
1280 set_user_defined_heating( HeatFunc * Function ) ;
1281
1292 void
1293 read_heating( const string & aLibraryPath,
1294 const string & aLabel ) ;
1295
1296
1309 virtual real
1311 const MaterialProperty Property,
1312 const real T ) const ;
1313
1314 virtual real
1316 const MaterialProperty Property,
1317 const real T ) const ;
1318
1319
1333 virtual void
1335 const MaterialProperty Property,
1336 const std::vector< real > & Coefficients ) ;
1337
1338 virtual void
1340 const MaterialProperty Property,
1341 const Cell< real > & Coefficients ) ;
1342
1356
1360 void
1361 set_label( const string & aLabel ) ;
1362
1366 void
1367 set_number( const string & aNumber ) ;
1368
1372 void
1373 set_have( const MaterialProperty aProperty, const bool aHave=true ) ;
1374
1378 void
1379 reset_dependencies( const MaterialProperty aProperty );
1380
1384 void
1385 set_dependency( const MaterialProperty aProperty, const MaterialDependency aDependency ) ;
1386
1390 void
1391 set_constant( const MaterialProperty aProperty, const real aValue ) ;
1392
1396 void
1397 set_custom( const MaterialProperty aProperty ) ;
1398
1402 real
1403 constant_property( const MaterialProperty aProperty ) const ;
1404
1408 virtual real
1409 spline_property( const MaterialProperty aProperty, const real aX ) const ;
1410
1411 virtual real
1412 dspline_property( const MaterialProperty aProperty, const real aX ) const ;
1413
1414 virtual real
1415 ddspline_property( const MaterialProperty aProperty, const real aX ) const ;
1416
1417 virtual void
1418 set_table_flags( const bool aFlag );
1419
1420 virtual real
1421 jc_custom( const real T ) const ;
1422
1423 virtual real
1424 n_custom( const real T ) const ;
1425
1429 real
1430 volumetric_heatload( const real x, const real y, const real z, const real time ) const ;
1431
1432//------------------------------------------------------------------------------
1433 protected:
1434//------------------------------------------------------------------------------
1435
1439 real
1440 n_eval_raw( const real T, const real normB, const real angleNxB ) const ;
1441
1445 bool
1446 riva_rho_pl( const real normJ, const real jc, const real n, const real ec, real & rhoPL ) const ;
1447
1448//------------------------------------------------------------------------------
1462
1463
1467 void
1468 create_spline( const MaterialProperty aProperty,
1469 const real adYdX0=BELFEM_QUIET_NAN,
1470 const real adXdX1=BELFEM_QUIET_NAN ) ;
1471
1472
1481 real
1482 alpha_switch_temperature() const ;
1483
1484 real
1485 density_const( const real T ) const ;
1486
1487 virtual real
1488 density_custom( const real T ) const ;
1489
1497 real
1498 return_zero( const real T ) const ;
1499
1500 real
1501 cp_const( const real T ) const ;
1502
1503 real
1504 dcpdT_finite_difference( const real T ) const ;
1505
1506 real
1507 d2cpdT2_finite_difference( const real T ) const ;
1508
1509 real
1510 cp_spline( const real T ) const ;
1511
1512 real
1513 dcpdT_spline( const real T ) const ;
1514
1515 real
1516 d2cpdT2_spline( const real T ) const ;
1517
1518
1519 virtual real
1520 cp_custom( const real T ) const ;
1521
1522 virtual real
1523 dcpdT_custom( const real T ) const ;
1524
1525 virtual real
1526 d2cpdT2_custom( const real T ) const ;
1527
1528 real
1529 lambda_const( const real T ) const ;
1530
1531 real
1532 dlambdadT_finite_difference( const real T ) const ;
1533
1534 real
1535 lambda_spline( const real T ) const ;
1536
1537 real
1538 dlambdadT_spline( const real T ) const ;
1539
1540 virtual real
1541 lambda_custom( const real T ) const ;
1542
1543 virtual real
1544 dlambdadT_custom( const real T ) const ;
1545
1546 real
1547 drhodT_finite_difference( const real T ) const ;
1548
1549 real
1550 rho_const( const real T ) const ;
1551
1552 virtual real
1553 rho_custom( const real T ) const ;
1554
1555 virtual real
1556 drhodT_custom( const real T ) const ;
1557
1558 virtual real
1559 rho_spline( const real T ) const ;
1560
1561 virtual real
1562 drhodT_spline( const real T ) const ;
1563
1564 virtual real
1565 rho_kohler( const real T, const real normB, const real angleJxB ) const ;
1566
1567 virtual real
1568 drhodT_kohler( const real T, const real normB, const real angleJxB ) const ;
1569
1570 virtual real
1571 drhodB_kohler( const real T, const real normB, const real angleJxB ) const ;
1572
1573 virtual real
1574 drhodbeta_kohler( const real T, const real normB, const real angleJxB ) const ;
1575
1576 virtual real
1577 rho_table( const real T, const real normB, const real angleJxB ) const ;
1578
1579 virtual real
1580 drhodT_table( const real T, const real normB, const real angleJxB ) const ;
1581
1582 virtual real
1583 drhodB_table( const real T, const real normB, const real angleJxB ) const ;
1584
1585 virtual real
1586 drhodbeta_table( const real T, const real normB, const real angleJxB ) const ;
1587
1588 virtual real
1589 lambda_custom( const real T, const real normB, const real angle ) const ;
1590
1591 virtual real
1592 lambda_table( const real T, const real normB, const real angle ) const ;
1593
1594 real
1595 H_const( const real B ) const ;
1596
1597 virtual real
1598 H_bhcurve( const real B ) const ;
1599
1600 real
1601 mu_const( const real H, const real T ) const ;
1602
1603 virtual real
1604 mu_bhcurve( const real H, const real T ) const ;
1605
1606 virtual real
1607 mu_custom( const real H, const real T ) const ;
1608
1609 void
1610 dmudH_const( const real H, real & mu, real & dmudH ) const ;
1611
1612 virtual void
1613 dmudH_bhcurve( const real H, real & mu, real & dmudH ) const ;
1614
1615 real
1616 E_const( const real T ) const ;
1617
1618 real
1619 E_spline( const real T) const ;
1620
1621 virtual real
1622 E_custom( const real T ) const ;
1623
1624 virtual real
1625 dEdT_custom( const real T ) const ;
1626
1627 real
1628 nu_const( const real T ) const ;
1629
1630 real
1631 nu_spline( const real T ) const ;
1632
1633 virtual real
1634 nu_custom( const real T ) const ;
1635
1636 real
1637 alpha_const( const real T ) const ;
1638
1639 real
1640 alpha_spline( const real T ) const ;
1641
1642 virtual real
1643 alpha_custom( const real T ) const ;
1644
1645 real
1646 Rp02_const( const real T ) const ;
1647
1648 real
1649 Rp02_spline( const real T ) const ;
1650
1651 virtual real
1652 Rp02_custom( const real T ) const ;
1653
1654 real
1655 debye_const( const real T ) const ;
1656
1657 real
1658 debye_spline( const real T ) const ;
1659
1660 virtual real
1661 debye_custom( const real T ) const ;
1662
1663 virtual real
1664 rho_i_custom( const real T ) const ;
1665
1666 real
1667 rho_i_spline( const real T ) const ;
1668
1669 virtual void
1670 reset_spline( const MaterialProperty aProperty ) ;
1671
1672 virtual void
1673 create_spline( real (Material::*aFunction)(const real aT) const,
1674 const MaterialProperty aProperty,
1675 const uint aStartBC,
1676 const uint aEndBC,
1677 const real adYdX0=BELFEM_QUIET_NAN,
1678 const real adYdX1=BELFEM_QUIET_NAN ) ;
1679
1680 };
1681
1682 inline const string &
1684 {
1685 return mLabel ;
1686 }
1687
1688 inline const string &
1690 {
1691 return mNumber ;
1692 }
1693
1694 inline MaterialType
1696 {
1697 return mType ;
1698 }
1699
1700
1701 inline void
1702 Material::flag( const uint8_t aIndex )
1703 {
1704 BELFEM_ASSERT( aIndex < 8, "Flag index %u out of bounds (must be < 8)",
1705 ( unsigned int ) aIndex );
1706 mFlags |= ( 1 << aIndex );
1707 }
1708
1709
1710 inline void
1711 Material::unflag( const uint8_t aIndex )
1712 {
1713 BELFEM_ASSERT( aIndex < 8, "Flag index %u out of bounds (must be < 8)",
1714 ( unsigned int ) aIndex );
1715 mFlags &= ~( 1 << aIndex );
1716 }
1717
1718 inline bool
1719 Material::is_flagged( const uint8_t aIndex ) const
1720 {
1721 BELFEM_ASSERT( aIndex < 8, "Flag index %u out of bounds (must be < 8)",
1722 ( unsigned int ) aIndex );
1723 return mFlags & ( 1 << aIndex );
1724 }
1725
1726 inline bool
1727 Material::have( const MaterialProperty aProperty ) const
1728 {
1729 return mHaveProperty.test( static_cast< size_t >( aProperty ) ) ;
1730 }
1731
1732 inline bool
1734 {
1735 return mDefectFunction != nullptr ;
1736 }
1737
1738 inline bool
1740 {
1741 return mHeatFunction != nullptr ;
1742 }
1743
1744 inline bool
1746 {
1747 return mResistivityLaw == ResistivityLaw::Piecewise ;
1748 }
1749
1750 inline bool
1752 {
1753 return mResistivityLaw == ResistivityLaw::Riva ;
1754 }
1755
1756 inline ResistivityLaw
1758 {
1759 return mResistivityLaw ;
1760 }
1761
1762 inline bool
1763 Material::depends( const MaterialProperty aProperty, const MaterialDependency aDependency ) const
1764 {
1765 return mPropertyDependencies( static_cast< size_t >( aProperty ) )->test( static_cast< uint >( aDependency ));
1766 }
1767
1768 inline const MaterialDependencyBitset *
1770 {
1771 return mPropertyDependencies( static_cast< size_t >( aProperty ) ) ;
1772 }
1773
1774 inline bool
1776 {
1777 return mIsIsotropic ;
1778 }
1779
1780 inline bool
1782 {
1783 return ! std::isnan( mConstantProperties( static_cast< index_t >( aProperty ) ) ) ;
1784 }
1785
1786 inline real
1788 {
1789 BELFEM_ASSERT( this->is_constant( aProperty ), "Property is not constant" ) ;
1790 return mConstantProperties( static_cast< size_t >( aProperty ) ) ;
1791 }
1792
1793//------------------------------------------------------------------------------
1794
1795 inline real
1797 {
1799 "Material '%s' does not have density assigned", this->label().c_str() ) ;
1800
1801 return ( this->*mFunctionDensity )( T );
1802 }
1803
1804 inline real
1806 {
1808 "Wrong function call for Material::density");
1810 }
1811
1812 inline real
1814 {
1816 "Material %s does not have a reference density set", mLabel.c_str() );
1818 "Material %s does not have a temperature for the reference density set", mLabel.c_str() );
1819
1820 if ( T == mConstantProperties( static_cast< index_t >( MaterialProperty::T_ref_density ) ) )
1821 {
1822 return mConstantProperties( static_cast< index_t >( MaterialProperty::ref_density ) ) ;
1823 }
1824
1825 return mConstantProperties( static_cast< index_t >( MaterialProperty::ref_density ) ) / std::pow( this->l( T ), 3.0 ) ;
1826 }
1827
1828 inline real
1830 {
1832 "Material %s does not have a reference density set", mLabel.c_str() );
1834 }
1835
1836 inline real Material::M() const
1837 {
1838 return this->constant_property( MaterialProperty::M );
1839 }
1840
1841 inline real
1843 {
1844 BELFEM_ASSERT( this->have( MaterialProperty::cp ), "Material does not have specific heat capacity" ) ;
1845
1846 return ( this->*mFunctionCp )( T );
1847 }
1848
1849
1850 inline real
1852 {
1854 }
1855
1856 inline real Material::dcpdT( const real T ) const
1857 {
1858 BELFEM_ASSERT( this->have( MaterialProperty::cp ), "Material does not have specific heat capacity" ) ;
1859
1860 return (this->*mFunctiondCpdT )( T ) ;
1861 }
1862
1863 inline real Material::d2cpdT2( const real T ) const
1864 {
1865 BELFEM_ASSERT( this->have( MaterialProperty::cp ), "Material does not have specific heat capacity" ) ;
1866
1867 return (this->*mFunctiond2CpdT2 )( T ) ;
1868 }
1869
1870 inline real
1872 {
1873 return 0. ;
1874 }
1875
1876 inline real
1878 {
1879 return 0.5 * ( this->cp( T + gFinDiffDeltaT )
1880 - this->cp( T - gFinDiffDeltaT ) ) /gFinDiffDeltaT ;
1881 }
1882
1883 inline real
1885 {
1886 return ( this->cp( T + gFinDiffDeltaT ) - 2. * this->cp( T )
1887 + this->cp( T - gFinDiffDeltaT ) ) / ( gFinDiffDeltaT * gFinDiffDeltaT );
1888 }
1889
1890 inline real
1892 {
1893 return this->spline_property( MaterialProperty::cp, T );
1894 }
1895
1896 inline real
1898 {
1899 return this->dspline_property( MaterialProperty::cp, T );
1900 }
1901
1902 inline real
1904 {
1905 return this->ddspline_property( MaterialProperty::cp, T );
1906 }
1907
1908
1909//------------------------------------------------------------------------------
1910
1911 inline real
1912 Material::lambda( const real T ) const
1913 {
1914 BELFEM_ASSERT( this->is_isotropic(), "Material %s is not isotropic", mLabel.c_str() ) ;
1916 "Material does not have thermal conductivity" ) ;
1917 return (this->*mFunctionLambda )( T ) ;
1918 }
1919
1920 inline real
1922 {
1924 }
1925
1926 inline real
1927 Material::dlambdadT( const real T ) const
1928 {
1929 BELFEM_ASSERT( this->is_isotropic(), "Material %s is not isotropic", mLabel.c_str() ) ;
1931 "Material does not have thermal conductivity" ) ;
1932
1933 return (this->*mFunctiondLambdadT )( T ) ;
1934 }
1935
1936 inline real
1938 {
1939 return 0.5 * ( this->lambda( T + gFinDiffDeltaT )
1940 - this->lambda( T - gFinDiffDeltaT ) ) /gFinDiffDeltaT ;
1941 }
1942
1943 inline real
1945 {
1946 return this->spline_property( MaterialProperty::lambda, T );
1947 }
1948
1949 inline real
1951 {
1952 return this->dspline_property( MaterialProperty::lambda, T );
1953 }
1954
1955 inline real
1956 Material::lambda( const real T, const real B, const real beta ) const
1957 {
1958 BELFEM_ASSERT( this->is_isotropic(), "Material %s is not isotropic", mLabel.c_str() ) ;
1960 "Material %s does not have thermal conductivity", mLabel.c_str() ) ;
1961
1963 "wrong function call for Material::lambda in material %s", mLabel.c_str() ) ;
1964
1965 return this->lambda( T );
1966 }
1967
1968 inline real
1969 Material::dlambdadT( const real T, const real B, const real beta ) const
1970 {
1971 BELFEM_ASSERT( this->is_isotropic(), "Material %s is not isotropic", mLabel.c_str() ) ;
1973 "Material %s does not have thermal conductivity", mLabel.c_str() ) ;
1974
1976 "wrong function call for Material::dlambdadT in material %s", mLabel.c_str() ) ;
1977
1978 return this->dlambdadT( T );
1979 }
1980
1981 inline real
1982 Material::dlambdadB( const real T, const real B, const real beta ) const
1983 {
1984 BELFEM_ASSERT( this->is_isotropic(), "Material %s is not isotropic", mLabel.c_str() ) ;
1986 "Material %s does not have thermal conductivity", mLabel.c_str() ) ;
1987
1989 "wrong function call for Material::dlambdadB in material %s", mLabel.c_str() ) ;
1990
1991 return 0.;
1992 }
1993
1994 inline real
1995 Material::dlambdadbeta( const real T, const real B, const real beta ) const
1996 {
1997 BELFEM_ASSERT( this->is_isotropic(), "Material %s is not isotropic", mLabel.c_str() ) ;
1999 "Material %s does not have thermal conductivity", mLabel.c_str() ) ;
2000
2002 "wrong function call for Material::dlambdadbeta in material %s", mLabel.c_str() ) ;
2003
2004 return 0.;
2005 }
2006
2007
2008//------------------------------------------------------------------------------
2009
2010 inline real
2011 Material::lambda( const real T, const real B_par, const real B_perp, const real J ) const
2012 {
2013 BELFEM_ASSERT( this->is_isotropic(), "Material %s is not isotropic", mLabel.c_str() ) ;
2015 "Material %s does not have thermal conductivity", mLabel.c_str() ) ;
2016
2017 BELFEM_ASSERT( mType == MaterialType::HTS, "wrong function call for Material::lambda" ) ;
2018
2019 return this->lambda( T );
2020 }
2021
2022 inline real
2023 Material::dlambdadT( const real T, const real B_par, const real B_perp, const real J )const
2024 {
2025 BELFEM_ASSERT( this->is_isotropic(), "Material %s is not isotropic", mLabel.c_str() ) ;
2027 "Material %s does not have thermal conductivity", mLabel.c_str() ) ;
2028
2030 "wrong function call for Material::dlambdadT in material %s", mLabel.c_str() ) ;
2031
2032 return this->dlambdadT( T );
2033 }
2034
2035//------------------------------------------------------------------------------
2036
2037 inline real
2038 Material::rho( const real T ) const
2039 {
2040 BELFEM_ASSERT( this->is_isotropic(), "Material %s is not isotropic", mLabel.c_str() ) ;
2042 "Material %s does not have electric resistivity", mLabel.c_str() ) ;
2043
2044 return ( this->*mFunctionRho )( T ) ;
2045 }
2046
2047
2048 inline real
2049 Material::drhodT( const real T ) const
2050 {
2051 BELFEM_ASSERT( this->is_isotropic(), "Material %s is not isotropic", mLabel.c_str() ) ;
2053 "Material %s does not have electric resistivity", mLabel.c_str() ) ;
2054
2055 return ( this->*mFunctiondRhodT )( T ) ;
2056 }
2057
2058 inline real
2060 {
2061 return 0.5 * ( this->rho( T + gFinDiffDeltaT )
2062 - this->rho( T - gFinDiffDeltaT ) ) / gFinDiffDeltaT ;
2063 }
2064
2065 inline real
2066 Material::rho_const( const real T ) const
2067 {
2069 }
2070
2071 inline real
2073 {
2074 return this->drhodT_finite_difference( T );
2075 }
2076
2077 inline real
2079 {
2080 return this->spline_property( MaterialProperty::rho, T );
2081 }
2082
2083 inline real
2085 {
2086 return this->dspline_property( MaterialProperty::rho, T );
2087 }
2088
2089 inline real
2090 Material::rho( const real T, const real B, const real beta ) const
2091 {
2092
2093 BELFEM_ASSERT( mFunctionRhoKohler != nullptr, "Material %s does not have a Kohler function", mLabel.c_str() ) ;
2094
2096 "wrong function call for Material::rho in %s", mLabel.c_str() ) ;
2097
2098 return this->rho( T );
2099 }
2100
2101 inline real
2102 Material::drhodT( const real T, const real B, const real beta ) const
2103 {
2104
2105 BELFEM_ASSERT( mFunctionRhoKohler != nullptr, "Material %s does not have a Kohler function", mLabel.c_str() ) ;
2106
2108 "wrong function call for Material::drhodT in %s", mLabel.c_str() ) ;
2109
2110 return this->drhodT( T );
2111 }
2112
2113 // base fallback: a metal without field-dependent resistivity has no
2114 // B or beta sensitivity — no Kohler function required here, the
2115 // Metal override handles the field-dependent case
2116 inline real
2117 Material::drhodB( const real T, const real B, const real beta ) const
2118 {
2120 "wrong function call for Material::drhodB in %s", mLabel.c_str() ) ;
2121
2122 return 0. ;
2123 }
2124
2125 inline real
2126 Material::drhodbeta( const real T, const real B, const real beta ) const
2127 {
2129 "wrong function call for Material::drhodbeta in %s", mLabel.c_str() ) ;
2130
2131 return 0. ;
2132 }
2133
2134//------------------------------------------------------------------------------
2135
2136 inline real
2137 Material::H( const real B ) const
2138 {
2139 return (this->*mFunctionH ) ( B );
2140 }
2141
2142 inline real
2143 Material::H_const( const real B ) const
2144 {
2145 return B * constant::nu0 ;
2146 }
2147
2148//------------------------------------------------------------------------------
2149
2150 inline real
2151 Material::mu( real H, const real T ) const
2152 {
2153 return ( this->*mFunctionMu )( H, T );
2154 }
2155
2156 inline real
2157 Material::mu_const( real H, const real T ) const
2158 {
2160 }
2161
2162//------------------------------------------------------------------------------
2163
2164 inline void
2165 Material::dmudH( const real H, real & mu, real & dmudH ) const
2166 {
2167 ( this->*mFunctionDMuDH )( H, mu, dmudH );
2168 }
2169
2170 inline void
2172 {
2174 dmudH = 0.0 ;
2175 }
2176
2177//------------------------------------------------------------------------------
2178
2179 inline real
2181 {
2182 BELFEM_ASSERT( this->is_isotropic(), "Material %s is not isotropic", mLabel.c_str() ) ;
2184 "Material %s does not have Youngs Modulus", mLabel.c_str() ) ;
2185 return ( this->*mFunctionE )( T );
2186 }
2187
2188 inline real
2189 Material::E_const( const real T ) const
2190 {
2191 return this->constant_property( MaterialProperty::E );
2192 }
2193
2194 inline real
2195 Material::E_spline( const real T ) const
2196 {
2197 return this->spline_property( MaterialProperty::E, T );
2198 }
2199
2200//------------------------------------------------------------------------------
2201
2202 inline real
2204 {
2205 BELFEM_ASSERT( this->is_isotropic(),
2206 "Material %s is not isotropic", mLabel.c_str() ) ;
2208 "Material does not have Poisson Ratio" ) ;
2209
2210 return ( this->*mFunctionNu )( T );
2211 }
2212
2213 inline real
2214 Material::nu_const( const real T ) const
2215 {
2217 }
2218
2219 inline real
2220 Material::nu_spline( const real T ) const
2221 {
2222 return this->spline_property( MaterialProperty::nu, T );
2223 }
2224
2225//------------------------------------------------------------------------------
2226
2227 inline real
2229 {
2230 return this->E( T ) / ( 2.0 * ( 1.0 + this->nu( T ) ) ) ;
2231 }
2232
2233//------------------------------------------------------------------------------
2234
2235 inline real
2237 {
2238 return this->E( T ) / ( 3.0 * ( 1.0 - 2.0 * this->nu( T ) ) ) ;
2239 }
2240
2241//------------------------------------------------------------------------------
2242
2243 inline real
2245 {
2246 BELFEM_ASSERT( this->is_isotropic(), "Material %s is not isotropic", mLabel.c_str() ) ;
2248 "Material %s does not have thermal expansion", mLabel.c_str() ) ;
2249
2250 return ( this->*mFunctionAlpha )( T );
2251 }
2252
2253 inline real
2255 {
2257 }
2258
2259 inline real
2261 {
2262 return this->spline_property( MaterialProperty::alpha, T );
2263 }
2264
2265//------------------------------------------------------------------------------
2266
2267
2268
2269//------------------------------------------------------------------------------
2270
2271 inline real
2273 {
2274 BELFEM_ASSERT( this->is_isotropic(), "Material %s is not isotropic", mLabel.c_str() ) ;
2276 "Material %s does not have yield stress", mLabel.c_str() ) ;
2277
2278 return ( this->*mFunctionRp02 )( T );
2279 }
2280
2281 inline real
2283 {
2285 }
2286
2287 inline real
2289 {
2290 return this->spline_property( MaterialProperty::Rp02, T );
2291 }
2292
2293//------------------------------------------------------------------------------
2294
2295 inline real
2297 {
2298 BELFEM_ASSERT( this->is_isotropic(), "Material %s is not isotropic", mLabel.c_str() ) ;
2300 "Material %s does not have Debye temperature", mLabel.c_str() ) ;
2301
2302 return ( this->*mFunctionDebye )( T );
2303 }
2304
2305 inline real
2307 {
2309 }
2310
2311 inline real
2313 {
2314 return this->spline_property( MaterialProperty::debye, T );
2315 }
2316
2317 inline real
2318 Material::rho_i( const real T ) const
2319 {
2320 return ( this->*mFunctionRhoI )( T );
2321 }
2322
2323 inline real
2325 {
2326 return this->spline_property( MaterialProperty::rho_i, T );
2327 }
2328
2329//------------------------------------------------------------------------------
2330
2331
2332 inline real
2334 {
2335 BELFEM_ASSERT( ! std::isnan( mTAlphaSwitch ),
2336 "%s: alpha split temperature is not set, create_low_temperature_alpha() "
2337 "must run before alpha is evaluated", mLabel.c_str() );
2338 return mTAlphaSwitch ;
2339 }
2340
2341//------------------------------------------------------------------------------
2342
2343 inline real
2344 Material::volumetric_heatload( const real x, const real y, const real z, const real time ) const
2345 {
2346 BELFEM_ASSERT( mHeatFunction != nullptr , "No heat function set for material %s", mLabel.c_str() ) ;
2347 return this->mHeatFunction( x, y, z, time ) ;
2348 }
2349
2350}
2351
2352#include "powerlaws.hpp"
2353
2354// The pop MUST mirror the push at the top of this header condition for
2355// condition. It used to test BELFEM_CLANG / BELFEM_GCC / BELFEM_INTEL, which
2356// are BELFEM build defines, while the push tests compiler builtins. A
2357// translation unit that includes this header without those defines -- every
2358// user-material plugin built from UserMaterialTemplate.cmake -- therefore
2359// pushed and never popped, silently disabling -Wformat, -Wunused-variable and
2360// -Wunused-parameter for the rest of the file.
2361#if defined(__clang__)
2362#pragma clang diagnostic pop
2363
2364#elif defined(__GNUC__) || defined(__GNUG__)
2365#pragma GCC diagnostic pop
2366
2367#elif defined(BELFEM_INTEL)
2368#pragma warning(pop)
2369
2370#endif
2371
2372#endif //BELFEM_CL_MATERIAL_HPP
#define BELFEM_ASSERT(aCheck,...)
Definition assert.hpp:244
Base class hierarchy for critical current density (Jc) and n-value functions.
Bitset()=default
trivial constructor
Base class for all materials in BELFEM.
Definition cl_Material.hpp:279
void reset_dependencies(const MaterialProperty aProperty)
Reset all dependencies for a property.
Definition cl_Material.cpp:237
virtual real drhodB_kohler(const real T, const real normB, const real angleJxB) const
Definition cl_Material.cpp:608
virtual void dmudH_bhcurve(const real H, real &mu, real &dmudH) const
Definition cl_Material.cpp:981
virtual real dEdT_custom(const real T) const
Definition cl_Material.cpp:525
real dcpdT_spline(const real T) const
Definition cl_Material.hpp:1897
void set_user_defined_heating(HeatFunc *Function)
Set a user-defined volumetric heat load [ W/m³ ] as a function of x, y, z [ m ] and t [ s ].
Definition cl_Material.cpp:787
virtual real d2cpdT2(const real T=gTroom) const
Definition cl_Material.hpp:1863
virtual real H(const real B) const
Magnetic field strength from flux density.
Definition cl_Material.hpp:2137
real Rp02_spline(const real T) const
Definition cl_Material.hpp:2288
const MaterialDependencyBitset * dependencies(const MaterialProperty aProperty) const
Get all dependencies for a property.
Definition cl_Material.hpp:1769
void set_label(const string &aLabel)
PROTECTED INTERFACE FOR DERIVED MATERIALS.
Definition cl_Material.cpp:205
bool have(const MaterialProperty aProperty) const
Check if a material property is available.
Definition cl_Material.hpp:1727
void dmudH_const(const real H, real &mu, real &dmudH) const
Definition cl_Material.hpp:2171
Material(const MaterialType aType, const bool aIsIsotropic=true)
Constructor.
Definition cl_Material.cpp:149
void set_constant(const MaterialProperty aProperty, const real aValue)
Define a property as constant.
Definition cl_Material.cpp:257
bool is_constant(const MaterialProperty aProperty) const
Check if a property is constant (temperature-independent).
Definition cl_Material.hpp:1781
real rho_powerlaw(const real normJ) const
Power law resistivity for HTS (constant jc and n).
Definition powerlaws.hpp:184
virtual real K(real T=gTroom) const
Bulk modulus.
Definition cl_Material.hpp:2236
virtual real rho(const real T) const
Electrical resistivity (isotropic).
Definition cl_Material.hpp:2038
virtual real jc_custom(const real T) const
Definition cl_Material.cpp:574
virtual real drhodT_kohler(const real T, const real normB, const real angleJxB) const
Definition cl_Material.cpp:601
real lambda_const(const real T) const
Definition cl_Material.hpp:1921
real n(const real normB, const real angleNxB, const real T) const
Direct evaluation of the n-value as a function of , and .
Definition powerlaws.hpp:976
void set_resistivity_law(const ResistivityLaw aLaw)
Definition cl_Material.cpp:801
virtual real E(real T=gTroom) const
Young's modulus.
Definition cl_Material.hpp:2180
real cp_const(const real T) const
Definition cl_Material.hpp:1851
MaterialType type() const
Get the material type.
Definition cl_Material.hpp:1695
virtual void dmudH(const real H, real &mu, real &dmudH) const
Magnetic permeability and its derivative.
Definition cl_Material.hpp:2165
virtual real drhodbeta_table(const real T, const real normB, const real angleJxB) const
Definition cl_Material.cpp:643
real rho_const(const real T) const
Definition cl_Material.hpp:2066
virtual real lambda(const real T=gTroom) const
Thermal conductivity (isotropic).
Definition cl_Material.hpp:1912
real n_eval_raw(const real T, const real normB, const real angleNxB) const
Definition powerlaws.hpp:76
real drho_riva_dB(const real normJ, const real T, const real normB, const real angleNxB) const
dρ/d|B| of rho_riva: w²·dρ_PL/dB ( dρ_n/dB = 0 on this path )
Definition powerlaws.hpp:2585
virtual real alpha_custom(const real T) const
Definition cl_Material.cpp:546
virtual real lambda_custom(const real T) const
Definition cl_Material.cpp:505
virtual real evaluate_polynomial(const MaterialProperty Property, const real T) const
Evaluate a polynomial for a given property (for UserDefinedMaterial).
Definition cl_Material.cpp:918
Material(Material &&)=delete
virtual real rho_spline(const real T) const
Definition cl_Material.hpp:2078
const material::JcFunction * mJcFunction
Definition cl_Material.hpp:414
virtual real cp(const real T=gTroom) const
Specific heat capacity.
Definition cl_Material.hpp:1842
bool depends(const MaterialProperty aProperty, const MaterialDependency aDependency) const
Check if a property depends on a specific variable.
Definition cl_Material.hpp:1763
real dcpdT_finite_difference(const real T) const
Definition cl_Material.hpp:1877
virtual real drhodT(const real T) const
Definition cl_Material.hpp:2049
bool is_isotropic() const
Check if material is isotropic.
Definition cl_Material.hpp:1775
bool use_piecewise() const
Check if we use piecewise instead of power-law.
Definition cl_Material.hpp:1745
void load_bh_curve(const material::BhCurve *aCurve)
Activate a B-H curve as the permeability source (ferromagnets).
Definition cl_Material.cpp:951
void set_number(const string &aNumber)
Set material number/identifier (for derived classes).
Definition cl_Material.cpp:211
virtual real drhodbeta_kohler(const real T, const real normB, const real angleJxB) const
Definition cl_Material.cpp:615
virtual real spline_property(const MaterialProperty aProperty, const real aX) const
Evaluate property using spline interpolation.
Definition cl_Material.cpp:993
void set_user_defined_defect(DefectFunc *Function)
Set a user-defined defect function with x, y, z, t dependencies.
Definition cl_Material.cpp:779
real drho_piecewise_dT(const real normJ, const real T, const real normB, const real angleNxB) const
Derivative of piecewise resistivity with respect to T at fixed J, |B|, θ ( T-leg ).
Definition powerlaws.hpp:2171
real jc_eval(const real T, const real normB, const real angleNxB) const
O1 "full-signature policy" helpers: the assembly path always passes the full ( T, normB,...
Definition powerlaws.hpp:66
real dlambdadT_spline(const real T) const
Definition cl_Material.hpp:1950
void set_custom(const MaterialProperty aProperty)
Mark property as using custom evaluation function.
Definition cl_Material.cpp:389
virtual real drhodT_custom(const real T) const
Definition cl_Material.hpp:2072
real drho_piecewise_dB(const real normJ, const real T, const real normB, const real angleNxB) const
Derivative of piecewise resistivity with respect to |B| at fixed J, T, θ
Definition powerlaws.hpp:2020
void read_heating(const string &aLibraryPath, const string &aLabel)
Read a heating function from a plugin library.
Definition cl_Material.cpp:888
real H_const(const real B) const
Definition cl_Material.hpp:2143
real drho_piecewise_dJ(const real normJ, const real T, const real normB, const real angleNxB) const
Derivative of piecewise resistivity with respect to current density magnitude.
Definition powerlaws.hpp:1788
real(Material::*) mFunctiondRhoKohlerdB(const real T, const real normB, const real angle) const
Definition cl_Material.hpp:405
real debye_const(const real T) const
Definition cl_Material.hpp:2306
real cp_spline(const real T) const
Definition cl_Material.hpp:1891
real drho_riva_dJ(const real normJ, const real T, const real normB, const real angleNxB) const
dρ/d|J| of rho_riva: w²·dρ_PL/dJ with w = ρ_n/(ρ_PL+ρ_n)
Definition powerlaws.hpp:2554
virtual real dlambdadB(const real T, const real B, const real beta) const
Definition cl_Material.hpp:1982
real density_const(const real T) const
Definition cl_Material.hpp:1805
real drhodT_finite_difference(const real T) const
Definition cl_Material.hpp:2059
real(Material::*) mFunctiondRhoKohlerdT(const real T, const real normB, const real angle) const
Definition cl_Material.hpp:404
virtual real rho_i(const real T) const
Intrinsic (phonon) electrical resistivity of a metal, ρ = ρ_i(T) + ρ_0.
Definition cl_Material.hpp:2318
real return_zero(const real T) const
Shared binding for derivative channels that are identically zero.
Definition cl_Material.hpp:1871
real dn_eval_dB(const real T, const real normB, const real angleNxB) const
d(n)/d|B|, same routing as djc_eval_dB
Definition powerlaws.hpp:110
virtual void set_bh_curve(const material::BhCurve *aCurve)
Assign a B-H curve to this material.
Definition cl_Material.cpp:664
void(Material::*) mFunctionDMuDH(double, double &, double &) const
Definition cl_Material.hpp:410
void set_dependency(const MaterialProperty aProperty, const MaterialDependency aDependency)
Add a dependency to a property.
Definition cl_Material.cpp:246
void set_jc_function(const material::JcFunction *aFunction)
Assign a critical current density function.
Definition cl_Material.cpp:670
virtual void set_user_defined_polynomial(const MaterialProperty Property, const std::vector< real > &Coefficients)
Set a polynomial function for a property (for UserDefinedMaterial).
Definition cl_Material.cpp:943
bool have_defect() const
Check if the material has a defect.
Definition cl_Material.hpp:1733
virtual real rho_custom(const real T) const
Definition cl_Material.cpp:567
real volumetric_heatload(const real x, const real y, const real z, const real time) const
Artificial volumetric heat load [ W/m³ ] from the heating plugin.
Definition cl_Material.hpp:2344
virtual real dlambdadT_custom(const real T) const
Definition cl_Material.cpp:512
void set_have(const MaterialProperty aProperty, const bool aHave=true)
Mark a property as available.
Definition cl_Material.cpp:224
virtual real drhodB(const real T, const real B, const real beta) const
Definition cl_Material.hpp:2117
virtual real mu_bhcurve(const real H, const real T) const
Definition cl_Material.cpp:973
real drho_powerlaw_dB(const real normJ, const real T, const real normB, const real angleNxB) const
Derivative of power-law resistivity with respect to |B| at fixed J, T, θ ( jc = jc(T,...
Definition powerlaws.hpp:1964
virtual real density_custom(const real T) const
Definition cl_Material.hpp:1813
virtual real evaluate_derivative_of_polynomial(const MaterialProperty Property, const real T) const
Definition cl_Material.cpp:926
virtual real drhodT_table(const real T, const real normB, const real angleJxB) const
Definition cl_Material.cpp:629
real rho_piecewise(const real normJ) const
Piecewise resistivity for HTS (constant jc and n).
Definition powerlaws.hpp:412
const string & number() const
Get material number/identifier.
Definition cl_Material.hpp:1689
real(Material::*) mFunctionMu(const real H, const real T) const
Definition cl_Material.hpp:409
virtual real lambda_table(const real T, const real normB, const real angle) const
Definition cl_Material.cpp:657
real djc_eval_dB(const real T, const real normB, const real angleNxB) const
Definition powerlaws.hpp:102
bool riva_rho_pl(const real normJ, const real jc, const real n, const real ec, real &rhoPL) const
Definition powerlaws.hpp:2489
real n_eval(const real T, const real normB, const real angleNxB) const
Definition powerlaws.hpp:86
real jc(const real normB, const real angleNxB, const real T) const
Direct evaluation of the critical current density .
Definition powerlaws.hpp:1012
virtual real rho_i_custom(const real T) const
Definition cl_Material.cpp:587
void set_piecewise(const bool aUsePiecewise)
Definition cl_Material.cpp:794
real djc_eval_dT(const real T, const real normB, const real angleNxB) const
Definition powerlaws.hpp:126
real dn_eval_dT(const real T, const real normB, const real angleNxB) const
d(n)/dT, same routing as djc_eval_dT
Definition powerlaws.hpp:134
real M() const
Molar mass.
Definition cl_Material.hpp:1836
virtual real H_bhcurve(const real B) const
Definition cl_Material.cpp:966
const string & label() const
Get material label.
Definition cl_Material.hpp:1683
void flag(const uint8_t aIndex=0)
Set flag (multi-purpose flag used by Kernel).
Definition cl_Material.hpp:1702
virtual real drhodT_spline(const real T) const
Definition cl_Material.hpp:2084
real Rp02_const(const real T) const
Definition cl_Material.hpp:2282
virtual real drhodbeta(const real T, const real B, const real beta) const
Definition cl_Material.hpp:2126
bool have_heating() const
Check if the material has a heating function.
Definition cl_Material.hpp:1739
virtual void set_user_defined_function(const MaterialProperty Property, const MaterialDependency Dependency, MatFunc1 *Function)
Set a user-defined function with one dependency (for UserDefinedMaterial).
Definition cl_Material.cpp:749
real drho_powerlaw_dT(const real normJ, const real T, const real normB, const real angleNxB) const
Derivative of power-law resistivity with respect to T at fixed J, |B|, θ ( T-leg: jc(T),...
Definition powerlaws.hpp:2113
ResistivityLaw resistivity_law() const
Definition cl_Material.hpp:1757
virtual real rho_table(const real T, const real normB, const real angleJxB) const
Definition cl_Material.cpp:622
virtual real dspline_property(const MaterialProperty aProperty, const real aX) const
Definition cl_Material.cpp:1000
real nu_spline(const real T) const
Definition cl_Material.hpp:2220
void check_riva_n_source() const
Definition cl_Material.cpp:812
virtual real density(const real T=gTroom) const
Density as a function of temperature.
Definition cl_Material.hpp:1796
virtual real drhodB_table(const real T, const real normB, const real angleJxB) const
Definition cl_Material.cpp:636
void unflag(const uint8_t aIndex=0)
Clear flag.
Definition cl_Material.hpp:1711
Material & operator=(const Material &)=delete
real debye_spline(const real T) const
Definition cl_Material.hpp:2312
virtual real G(real T=gTroom) const
Shear modulus.
Definition cl_Material.hpp:2228
real dlambdadT_finite_difference(const real T) const
Definition cl_Material.hpp:1937
real constant_property(const MaterialProperty aProperty) const
Get constant property value.
Definition cl_Material.hpp:1787
virtual real nu_custom(const real T) const
Definition cl_Material.cpp:532
virtual real l(real T) const
Relative length after thermal expansion.
Definition cl_Material.cpp:1031
virtual real dlambdadbeta(const real T, const real B, const real beta) const
Definition cl_Material.hpp:1995
Material & operator=(Material &&)=delete
virtual real rho_kohler(const real T, const real normB, const real angleJxB) const
Definition cl_Material.cpp:594
real(Material::*) mFunctionRhoKohler(const real T, const real normB, const real angle) const
Definition cl_Material.hpp:403
virtual real ddspline_property(const MaterialProperty aProperty, const real aX) const
Definition cl_Material.cpp:1007
real E_const(const real T) const
Definition cl_Material.hpp:2189
virtual void set_table_flags(const bool aFlag)
Definition cl_Material.cpp:987
virtual real dcpdT_custom(const real T) const
Definition cl_Material.cpp:492
real alpha_spline(const real T) const
Definition cl_Material.hpp:2260
Material(const Material &)=delete
virtual real Rp02(real T=gTroom) const
Yield stress (0.2% offset).
Definition cl_Material.hpp:2272
real nu_const(const real T) const
Definition cl_Material.hpp:2214
real d2cpdT2_spline(const real T) const
Definition cl_Material.hpp:1903
virtual void set_RRR(const real RRR)
Set the residual resistivity ratio (for noble metals).
Definition cl_Material.cpp:217
real E_spline(const real T) const
Definition cl_Material.hpp:2195
const material::JcFunction * mNFunction
Definition cl_Material.hpp:415
real drho_riva_dT(const real normJ, const real T, const real normB, const real angleNxB) const
dρ/dT of rho_riva: w²·dρ_PL/dT + (1−w)²·dρ_n/dT
Definition powerlaws.hpp:2628
real(Material::*) mFunctiondRhoKohlerdbeta(const real T, const real normB, const real angle) const
Definition cl_Material.hpp:406
real lambda_spline(const real T) const
Definition cl_Material.hpp:1944
virtual real debye_custom(const real T) const
Definition cl_Material.cpp:560
real d2cpdT2_finite_difference(const real T) const
Definition cl_Material.hpp:1884
virtual real E_custom(const real T) const
Definition cl_Material.cpp:518
virtual real mu_custom(const real H, const real T) const
Definition cl_Material.cpp:539
real drho_powerlaw_dJ(const real normJ, const real T, const real normB, const real angleNxB) const
Derivative of power-law resistivity with respect to current density magnitude.
Definition powerlaws.hpp:1240
virtual real cp_custom(const real T) const
Definition cl_Material.cpp:485
real mu_const(const real H, const real T) const
Definition cl_Material.hpp:2157
real(Material::*) mFunctionH(const real B) const
Definition cl_Material.hpp:408
virtual real d2cpdT2_custom(const real T) const
Definition cl_Material.cpp:499
real alpha_const(const real T) const
Definition cl_Material.hpp:2254
virtual real debye(const real T) const
Debye temperature.
Definition cl_Material.hpp:2296
void read_defect(const string &aLibraryPath, const string &aLabel)
Read a defect from the library.
Definition cl_Material.cpp:858
virtual real dlambdadT(const real T=gTroom) const
Definition cl_Material.hpp:1927
void set_n_function(const material::JcFunction *aFunction)
Assign a power law exponent function.
Definition cl_Material.cpp:699
virtual real dcpdT(const real T=gTroom) const
Definition cl_Material.hpp:1856
real alpha_switch_temperature() const
Temperature below which alpha is taken from the Grueneisen branch.
Definition cl_Material.hpp:2333
real ref_density() const
Reference density at reference temperature.
Definition cl_Material.hpp:1829
virtual real mu(const real H, const real T=BELFEM_QUIET_NAN) const
Magnetic permeability.
Definition cl_Material.hpp:2151
virtual real nu(real T=gTroom) const
Poisson's ratio.
Definition cl_Material.hpp:2203
bool use_riva() const
Definition cl_Material.hpp:1751
bool is_flagged(const uint8_t aIndex=0) const
Check if material is flagged.
Definition cl_Material.hpp:1719
virtual real alpha(real T=gTroom) const
Thermal expansion coefficient.
Definition cl_Material.hpp:2244
real rho_i_spline(const real T) const
Definition cl_Material.hpp:2324
real rho_riva(const real normJ, const real T, const real normB, const real angleNxB) const
Riva-law resistivity: the superconducting power-law channel in parallel with the normal-state channel...
Definition powerlaws.hpp:2524
virtual real n_custom(const real T) const
Definition cl_Material.cpp:581
virtual real Rp02_custom(const real T) const
Definition cl_Material.cpp:553
real drhodB(const real T, const real B, const real beta) const override
Definition cl_Material_Alloy.hpp:173
real dlambdadT(const real T, const real B, const real beta) const override
Definition cl_Material_Alloy.hpp:213
real lambda(const real T, const real B, const real beta) const override
Thermal conductivity with magnetoresistance.
Definition cl_Material_Alloy.hpp:207
real drhodT(const real T, const real B, const real beta) const override
Definition cl_Material_Alloy.hpp:157
real drhodbeta(const real T, const real B, const real beta) const override
Definition cl_Material_Alloy.hpp:190
real rho(const real T, const real B, const real beta) const override
Electrical resistivity with magnetoresistance (Kohler's rule).
Definition cl_Material_Alloy.hpp:145
B-H curve for ferromagnetic materials.
Definition cl_BhCurve.hpp:61
Base class for critical current density (Jc) and n-value functions.
Definition cl_JcFunction.hpp:138
Definition cl_Material_SplineLookupTable.hpp:25
real l(real T) const override
Relative length after thermal expansion, from integrated alpha spline.
Definition cl_Material_SplineLookupTable.hpp:184
real ddspline_property(const MaterialProperty aProperty, const real aX) const override
Definition cl_Material_SplineLookupTable.hpp:176
void reset_spline(const MaterialProperty aProperty) override
Definition cl_Material_SplineLookupTable.cpp:115
real dspline_property(const MaterialProperty aProperty, const real aX) const override
Definition cl_Material_SplineLookupTable.hpp:168
void create_spline(real(Material::*aFunction)(const real aT) const, const MaterialProperty aProperty, const uint aStartBC, const uint aEndBC, const real adYdX0, const real adYdX1) override
Definition cl_Material_SplineLookupTable.cpp:123
real spline_property(const MaterialProperty aProperty, const real aX) const override
Evaluate property using spline interpolation.
Definition cl_Material_SplineLookupTable.hpp:160
const real nu0
inverse of magnetic constant in (A*m)/(V*s)
Definition constants.hpp:80
USER GUIDES:
Definition cl_Capacitor.cpp:16
constexpr size_t gNumNonConstantMaterialProperties
Number of non-constant material properties.
Definition cl_Material.hpp:202
ResistivityLaw
E-J law used for a superconductor's resistivity.
Definition cl_Material.hpp:233
@ PowerLaw
Definition cl_Material.hpp:234
@ Riva
Definition cl_Material.hpp:236
@ Piecewise
Definition cl_Material.hpp:235
unit get_unit(const MaterialProperty aProperty)
Get the SI unit for a material property.
Definition cl_Material.cpp:57
std::array< real, 7 > unit
Definition typedefs.hpp:72
MaterialDependency
Dependencies that material properties can have.
Definition cl_Material.hpp:121
@ UNDEFINED
Definition cl_Material.hpp:130
@ angleBxJ
Definition cl_Material.hpp:124
@ Jc
Definition cl_Material.hpp:128
@ UserDefined
Definition cl_SourceFunction.hpp:66
constexpr real gTroom
Definition typedefs.hpp:64
unsigned int uint
Definition typedefs.hpp:30
constexpr real gTAlphaSwitchMax
Upper bound for the thermal expansion split temperature [K].
Definition cl_Material.hpp:47
real MatFunc1(const Material *, const real)
Definition cl_Material.hpp:241
int proc_t
Definition commtypes.hpp:29
real MatFunc3(const Material *, const real, const real, const real)
Definition cl_Material.hpp:243
MaterialProperty
All material properties that can be defined.
Definition cl_Material.hpp:153
@ nu
Definition cl_Material.hpp:156
@ gamma
Definition cl_Material.hpp:174
@ A_electron_magnon
Definition cl_Material.hpp:189
@ T_max
Definition cl_Material.hpp:171
@ UNDEFINED
Definition cl_Material.hpp:194
@ rho_0
Definition cl_Material.hpp:183
@ ref_density
Definition cl_Material.hpp:172
@ kohler_trans
Definition cl_Material.hpp:165
@ alpha
Definition cl_Material.hpp:161
@ ec
Definition cl_Material.hpp:185
@ A_bloch_gruen
Definition cl_Material.hpp:180
@ density
Definition cl_Material.hpp:154
@ E
Definition cl_Material.hpp:155
@ debye0K
Definition cl_Material.hpp:177
@ density_correction
Definition cl_Material.hpp:192
@ Tcurie
Definition cl_Material.hpp:188
@ M
Definition cl_Material.hpp:168
@ q
Definition cl_Material.hpp:176
@ A_spin_disorder
Definition cl_Material.hpp:190
@ rho
Definition cl_Material.hpp:160
@ mu
Definition cl_Material.hpp:159
@ lambda
Definition cl_Material.hpp:158
@ rho0_pure
Definition cl_Material.hpp:193
@ debye
Definition cl_Material.hpp:163
@ cp
Definition cl_Material.hpp:157
@ rho_i
Definition cl_Material.hpp:164
@ rho_i_ref
Definition cl_Material.hpp:178
@ Rp02
Definition cl_Material.hpp:162
@ jc
Definition cl_Material.hpp:186
@ layer_thickness
Definition cl_Material.hpp:184
@ kohler_long
Definition cl_Material.hpp:166
@ T_ref_rho_i
Definition cl_Material.hpp:179
@ Gamma
Definition cl_Material.hpp:169
@ T_ref_density
Definition cl_Material.hpp:173
@ n_bloch_gruen
Definition cl_Material.hpp:181
@ RRR
Definition cl_Material.hpp:182
@ grueneisen
Definition cl_Material.hpp:191
@ T_crit
Definition cl_Material.hpp:167
real HeatFunc(const real, const real, const real, const real)
Definition cl_Material.hpp:245
uint32_t index_t
Definition typedefs.hpp:52
real MatFunc2(const Material *, const real, const real)
Definition cl_Material.hpp:242
constexpr size_t gNumMaterialProperties
Total number of material properties.
Definition cl_Material.hpp:207
constexpr real gFinDiffDeltaT
Definition typedefs.hpp:67
real DefectFunc(const real, const real, const real, const real)
Definition cl_Material.hpp:244
double real
Definition typedefs.hpp:36
Bitset< static_cast< size_t >(MaterialDependency::UNDEFINED) > MaterialDependencyBitset
Bitset for tracking material property dependencies.
Definition cl_Material.hpp:136
MaterialType
Material classification based on physical behavior.
Definition cl_Material.hpp:107
@ HTS
Definition cl_Material.hpp:110
@ LookupAlloy
Definition cl_Material.hpp:112
@ PureMetal
Definition cl_Material.hpp:111
@ NonMetal
Definition cl_Material.hpp:114
@ CompositeAlloy
Definition cl_Material.hpp:113
string to_string(const DomainType aDomainType)
Definition en_DomainType.cpp:21
Definition debye.f90:11
Inline E–J resistivity models for HTS materials and their Jacobians.
#define BELFEM_QUIET_NAN
Definition typedefs.hpp:87