Base class for all materials in BELFEM. More...
#include <cl_Material.hpp>
Public Member Functions | |
| Material (const MaterialType aType, const bool aIsIsotropic=true) | |
| Constructor. | |
| virtual | ~Material () |
| Destructor - deletes owned B-H curves and Jc/n functions. | |
| Material (const Material &)=delete | |
| Material & | operator= (const Material &)=delete |
| Material (Material &&)=delete | |
| Material & | operator= (Material &&)=delete |
| bool | have (const MaterialProperty aProperty) const |
| Check if a material property is available. | |
| bool | have_defect () const |
| Check if the material has a defect. | |
| bool | have_heating () const |
| Check if the material has a heating function. | |
| bool | use_piecewise () const |
| Check if we use piecewise instead of power-law. | |
| bool | depends (const MaterialProperty aProperty, const MaterialDependency aDependency) const |
| Check if a property depends on a specific variable. | |
| const MaterialDependencyBitset * | dependencies (const MaterialProperty aProperty) const |
| Get all dependencies for a property. | |
| bool | is_isotropic () const |
| Check if material is isotropic. | |
| MaterialType | type () const |
| Get the material type. | |
| const string & | label () const |
| Get material label. | |
| const string & | number () const |
| Get material number/identifier. | |
| void | load_bh_curve (const material::BhCurve *aCurve) |
| Activate a B-H curve as the permeability source (ferromagnets). | |
| void | flag (const uint8_t aIndex=0) |
| Set flag (multi-purpose flag used by Kernel). | |
| void | unflag (const uint8_t aIndex=0) |
| Clear flag. | |
| bool | is_flagged (const uint8_t aIndex=0) const |
| Check if material is flagged. | |
| bool | is_constant (const MaterialProperty aProperty) const |
| Check if a property is constant (temperature-independent). | |
| virtual void | set_RRR (const real RRR) |
| Set the residual resistivity ratio (for noble metals). | |
| virtual real | density (const real T=gTroom) const |
| Density as a function of temperature. | |
| real | ref_density () const |
| Reference density at reference temperature. | |
| real | M () const |
| Molar mass. | |
| virtual real | cp (const real T=gTroom) const |
| Specific heat capacity. | |
| virtual real | dcpdT (const real T=gTroom) const |
| virtual real | d2cpdT2 (const real T=gTroom) const |
| virtual real | lambda (const real T=gTroom) const |
| Thermal conductivity (isotropic). | |
| virtual real | dlambdadT (const real T=gTroom) const |
| virtual real | lambda (const real T, const real B, const real beta) const |
| Thermal conductivity for noble metals with magnetoresistance. | |
| virtual real | dlambdadT (const real T, const real B, const real beta) const |
| virtual real | dlambdadB (const real T, const real B, const real beta) const |
| virtual real | dlambdadbeta (const real T, const real B, const real beta) const |
| virtual real | lambda (const real T, const real B_par, const real B_perp, const real J) const |
| Thermal conductivity for HTS materials. | |
| virtual real | dlambdadT (const real T, const real B_par, const real B_perp, const real J) const |
| virtual real | rho (const real T) const |
| Electrical resistivity (isotropic). | |
| virtual real | drhodT (const real T) const |
| virtual real | rho (const real T, const real B, const real beta) const |
| Electrical resistivity for noble metals with magnetoresistance. | |
| virtual real | drhodT (const real T, const real B, const real beta) const |
| virtual real | drhodB (const real T, const real B, const real beta) const |
| virtual real | drhodbeta (const real T, const real B, const real beta) const |
| real | rho_powerlaw (const real normJ) const |
| Power law resistivity for HTS (constant jc and n). | |
| real | rho_powerlaw (const real normJ, const real x, const real y, const real z, const real t) const |
| This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. Constant \(J_c\) / \(n\) with spatially-dependent defect modulation \(J_c \rightarrow J_c \cdot d(x,y,z,t)\). | |
| real | rho_powerlaw (const real normJ, real normB, const real angleNxB) const |
| Power law resistivity for HTS (field-dependent jc, constant n). | |
| real | rho_powerlaw (const real normJ, real normB, const real angleNxB, const real x, const real y, const real z, const real t) const |
| This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. Field-dependent \(J_c(|B|, \angle)\) with spatial defect modulation. | |
| real | rho_powerlaw (const real normJ, const real T, real normB, const real angleNxB) const |
| Power law resistivity for HTS (full temperature and field dependence). | |
| real | 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 |
| This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. Fully \((|B|, \angle, T)\)-dependent variant with spatial defect modulation applied to \(J_c\). | |
| real | rho_powerlaw (const real normJ, const real T) const |
| This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. Temperature-only variant. | |
| real | rho_powerlaw (const real normJ, const real T, const real x, const real y, const real z, const real t) const |
| This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. Temperature-only custom-callback variant with spatial defect modulation. | |
| real | rho_piecewise (const real normJ) const |
| Piecewise resistivity for HTS (constant jc and n). | |
| real | rho_piecewise (const real normJ, const real x, const real y, const real z, const real t) const |
| This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. Constant \(J_c\) / \(n\) with spatially-dependent defect modulation \(J_c \rightarrow J_c \cdot d(x,y,z,t)\). | |
| real | rho_piecewise (const real normJ, real normB, const real angleNxB) const |
| Piecewise resistivity for HTS (field-dependent jc, constant n). | |
| real | rho_piecewise (const real normJ, real normB, const real angleNxB, const real x, const real y, const real z, const real t) const |
| This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. Field-dependent \(J_c(|B|, \angle)\) with spatial defect modulation. | |
| real | rho_piecewise (const real normJ, const real T, real normB, const real angleNxB) const |
| Piecewise resistivity for HTS (full temperature and field dependence). | |
| real | 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 |
| This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. Fully \((|B|, \angle, T)\)-dependent variant with spatial defect modulation applied to \(J_c\). | |
| real | rho_piecewise (const real normJ, const real T) const |
| This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. Temperature-only variant: \(J_c(T)\) and \(n(T)\) from the user-supplied callbacks Material::jc_custom() / Material::n_custom(). | |
| real | rho_piecewise (const real normJ, const real T, const real x, const real y, const real z, const real t) const |
| This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. Temperature-only custom-callback variant with spatial defect modulation. | |
| 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. | |
| real | 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 |
| defect overload: jc_eff = D(x,y,z,t)·jc throughout | |
| 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) | |
| real | 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 |
| 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 ) | |
| real | 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 |
| 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 | |
| real | 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 |
| real | n (const real normB, const real angleNxB, const real T) const |
| Direct evaluation of the n-value as a function of \(|B|\), \(\angle(n,B)\) and \(T\). | |
| real | n (const real normB, const real angleNxB) const |
| This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. Field-dependent \(n(|B|, \angle(n,B))\) without temperature dependence. | |
| real | jc (const real normB, const real angleNxB, const real T) const |
| Direct evaluation of the critical current density \(J_c(|B|, \angle(n,B), T)\). | |
| real | jc (const real normB, const real angleNxB) const |
| This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. Field-dependent \(J_c(|B|, \angle(n,B))\) without temperature dependence. | |
| real | jc (const real normB, const real angleNxB, const real T, const real x, const real y, const real z, const real t) const |
| This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. Variant with spatial defect modulation \(J_c \rightarrow J_c \cdot d(x,y,z,t)\). | |
| real | jc (const real normB, const real angleNxB, const real x, const real y, const real z, const real t) const |
| This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. Field-dependent \(J_c(|B|, \angle(n,B))\) with spatial defect modulation \(J_c \rightarrow J_c \cdot d(x,y,z,t)\). | |
| 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. | |
| real | 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 |
| This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. Fully \((|B|, \angle, T)\)-dependent variant with spatial defect modulation applied to \(J_c\). | |
| real | drho_powerlaw_dJ (const real normJ) const |
| Analytic Jacobian \(d\rho_{eff}/dJ\) of the power-law model. | |
| real | drho_powerlaw_dJ (const real normJ, const real x, const real y, const real z, const real t) const |
| This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. Constant \(J_c\) / \(n\) with spatial defect modulation applied to \(J_c\). | |
| real | drho_powerlaw_dJ (const real normJ, const real T) const |
| This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. Temperature-only variant: \(J_c(T)\) and \(n(T)\) from Material::jc_custom() / Material::n_custom(). | |
| real | drho_powerlaw_dJ (const real normJ, const real T, const real x, const real y, const real z, const real t) const |
| This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. Temperature-only custom-callback variant with spatial defect modulation. | |
| real | drho_powerlaw_dJ (const real normJ, const real normB, const real angleNxB) const |
| This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. Field-dependent \(J_c(|B|, \angle)\) via mJcFunction; \(n\) remains constant. | |
| real | 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 |
| This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. Field-dependent \(J_c(|B|, \angle)\) with spatial defect modulation; \(n\) remains constant. | |
| 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. | |
| real | 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 |
| This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. Fully \((|B|, \angle, T)\)-dependent variant with spatial defect modulation applied to \(J_c\). | |
| 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,|B|,θ), n = n(T,|B|,θ) ). | |
| real | 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 |
| defect overload: jc_eff = D(x)·jc throughout, djc_eff = D·djc | |
| 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), n(T) AND ρ_n(T) all move — the quench-feedback tangent ). | |
| real | 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 |
| defect overload: jc_eff = D(x)·jc throughout, djc_eff = D·djc | |
| 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, θ | |
| real | 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 |
| defect overload: jc_eff = D(x)·jc throughout, djc_eff = D·djc | |
| 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 ). | |
| real | 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 |
| defect overload: jc_eff = D(x)·jc throughout, djc_eff = D·djc | |
| real | drho_piecewise_dJ (const real normJ) const |
| Branch-aware Jacobian \(d\rho/dJ\) of the three-regime piecewise model. | |
| real | drho_piecewise_dJ (const real normJ, const real x, const real y, const real z, const real t) const |
| This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. Constant \(J_c\) / \(n\) with spatial defect modulation applied to \(J_c\). | |
| real | drho_piecewise_dJ (const real normJ, const real T) const |
| This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. Temperature-only variant: \(J_c(T)\) and \(n(T)\) from Material::jc_custom() / Material::n_custom(). | |
| real | drho_piecewise_dJ (const real normJ, const real T, const real x, const real y, const real z, const real t) const |
| This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. Temperature-only custom-callback variant with spatial defect modulation. | |
| real | drho_piecewise_dJ (const real normJ, const real normB, const real angleNxB) const |
| This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. Field-dependent \(J_c(|B|, \angle)\) via mJcFunction; \(n\) remains constant. | |
| real | 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 |
| This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. Field-dependent \(J_c(|B|, \angle)\) with spatial defect modulation; \(n\) remains constant. | |
| virtual real | rho_i (const real T) const |
| Intrinsic (phonon) electrical resistivity of a metal, ρ = ρ_i(T) + ρ_0. | |
| virtual real | H (const real B) const |
| Magnetic field strength from flux density. | |
| virtual real | mu (const real H, const real T=BELFEM_QUIET_NAN) const |
| Magnetic permeability. | |
| virtual void | dmudH (const real H, real &mu, real &dmudH) const |
| Magnetic permeability and its derivative. | |
| virtual real | E (real T=gTroom) const |
| Young's modulus. | |
| virtual real | nu (real T=gTroom) const |
| Poisson's ratio. | |
| virtual real | G (real T=gTroom) const |
| Shear modulus. | |
| virtual real | K (real T=gTroom) const |
| Bulk modulus. | |
| virtual real | alpha (real T=gTroom) const |
| Thermal expansion coefficient. | |
| virtual real | l (real T) const |
| Relative length after thermal expansion. | |
| virtual real | Rp02 (real T=gTroom) const |
| Yield stress (0.2% offset). | |
| virtual real | debye (const real T) const |
| Debye temperature. | |
| virtual void | set_bh_curve (const material::BhCurve *aCurve) |
| Assign a B-H curve to this material. | |
| void | set_jc_function (const material::JcFunction *aFunction) |
| Assign a critical current density function. | |
| void | set_n_function (const material::JcFunction *aFunction) |
| Assign a power law exponent function. | |
| void | set_piecewise (const bool aUsePiecewise) |
| void | set_resistivity_law (const ResistivityLaw aLaw) |
| ResistivityLaw | resistivity_law () const |
| bool | use_riva () const |
| virtual void | set_user_defined_function (const MaterialProperty Property, const MaterialDependency Dependency, MatFunc1 *Function) |
| Set a user-defined function with one dependency (for UserDefinedMaterial). | |
| virtual void | set_user_defined_function (const MaterialProperty Property, const MaterialDependency Dependency1, const MaterialDependency Dependency2, MatFunc2 *Function) |
| Set a user-defined function with two dependencies (for UserDefinedMaterial). | |
| virtual void | set_user_defined_function (const MaterialProperty Property, const MaterialDependency Dependency1, const MaterialDependency Dependency2, const MaterialDependency Dependency3, MatFunc3 *Function) |
| Set a user-defined function with three dependencies (for UserDefinedMaterial). | |
| void | set_user_defined_defect (DefectFunc *Function) |
| Set a user-defined defect function with x, y, z, t dependencies. | |
| void | read_defect (const string &aLibraryPath, const string &aLabel) |
| Read a defect from the library. | |
| 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 ]. | |
| void | read_heating (const string &aLibraryPath, const string &aLabel) |
| Read a heating function from a plugin library. | |
| virtual real | evaluate_polynomial (const MaterialProperty Property, const real T) const |
| Evaluate a polynomial for a given property (for UserDefinedMaterial). | |
| virtual real | evaluate_derivative_of_polynomial (const MaterialProperty Property, const real T) const |
| virtual void | set_user_defined_polynomial (const MaterialProperty Property, const std::vector< real > &Coefficients) |
| Set a polynomial function for a property (for UserDefinedMaterial). | |
| virtual void | set_user_defined_polynomial (const MaterialProperty Property, const Cell< real > &Coefficients) |
| void | set_label (const string &aLabel) |
| PROTECTED INTERFACE FOR DERIVED MATERIALS. | |
| void | set_number (const string &aNumber) |
| Set material number/identifier (for derived classes). | |
| void | set_have (const MaterialProperty aProperty, const bool aHave=true) |
| Mark a property as available. | |
| void | reset_dependencies (const MaterialProperty aProperty) |
| Reset all dependencies for a property. | |
| void | set_dependency (const MaterialProperty aProperty, const MaterialDependency aDependency) |
| Add a dependency to a property. | |
| void | set_constant (const MaterialProperty aProperty, const real aValue) |
| Define a property as constant. | |
| void | set_custom (const MaterialProperty aProperty) |
| Mark property as using custom evaluation function. | |
| real | constant_property (const MaterialProperty aProperty) const |
| Get constant property value. | |
| virtual real | spline_property (const MaterialProperty aProperty, const real aX) const |
| Evaluate property using spline interpolation. | |
| virtual real | dspline_property (const MaterialProperty aProperty, const real aX) const |
| virtual real | ddspline_property (const MaterialProperty aProperty, const real aX) const |
| virtual void | set_table_flags (const bool aFlag) |
| virtual real | jc_custom (const real T) const |
| virtual real | n_custom (const real T) const |
| 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. | |
Protected Member Functions | |
| 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, angleNxB ) set; the material consumes what its Jc / n functions depend on and ignores the rest. | |
| real | djc_eval_dB (const real T, const real normB, const real angleNxB) const |
| real | dn_eval_dB (const real T, const real normB, const real angleNxB) const |
| d(n)/d|B|, same routing as djc_eval_dB | |
| real | djc_eval_dT (const real T, const real normB, const real angleNxB) const |
| real | dn_eval_dT (const real T, const real normB, const real angleNxB) const |
| d(n)/dT, same routing as djc_eval_dT | |
| real | n_eval (const real T, const real normB, const real angleNxB) const |
| void | check_riva_n_source () const |
| real | n_eval_raw (const real T, const real normB, const real angleNxB) const |
| bool | riva_rho_pl (const real normJ, const real jc, const real n, const real ec, real &rhoPL) const |
| void | create_spline (const MaterialProperty aProperty, const real adYdX0=BELFEM_QUIET_NAN, const real adXdX1=BELFEM_QUIET_NAN) |
| PROPERTY EVALUATION FUNCTIONS. | |
| real | alpha_switch_temperature () const |
| Temperature below which alpha is taken from the Grueneisen branch. | |
| real | density_const (const real T) const |
| virtual real | density_custom (const real T) const |
| real | return_zero (const real T) const |
| Shared binding for derivative channels that are identically zero. | |
| real | cp_const (const real T) const |
| real | dcpdT_finite_difference (const real T) const |
| real | d2cpdT2_finite_difference (const real T) const |
| real | cp_spline (const real T) const |
| real | dcpdT_spline (const real T) const |
| real | d2cpdT2_spline (const real T) const |
| virtual real | cp_custom (const real T) const |
| virtual real | dcpdT_custom (const real T) const |
| virtual real | d2cpdT2_custom (const real T) const |
| real | lambda_const (const real T) const |
| real | dlambdadT_finite_difference (const real T) const |
| real | lambda_spline (const real T) const |
| real | dlambdadT_spline (const real T) const |
| virtual real | lambda_custom (const real T) const |
| virtual real | dlambdadT_custom (const real T) const |
| real | drhodT_finite_difference (const real T) const |
| real | rho_const (const real T) const |
| virtual real | rho_custom (const real T) const |
| virtual real | drhodT_custom (const real T) const |
| virtual real | rho_spline (const real T) const |
| virtual real | drhodT_spline (const real T) const |
| virtual real | rho_kohler (const real T, const real normB, const real angleJxB) const |
| virtual real | drhodT_kohler (const real T, const real normB, const real angleJxB) const |
| virtual real | drhodB_kohler (const real T, const real normB, const real angleJxB) const |
| virtual real | drhodbeta_kohler (const real T, const real normB, const real angleJxB) const |
| virtual real | rho_table (const real T, const real normB, const real angleJxB) const |
| virtual real | drhodT_table (const real T, const real normB, const real angleJxB) const |
| virtual real | drhodB_table (const real T, const real normB, const real angleJxB) const |
| virtual real | drhodbeta_table (const real T, const real normB, const real angleJxB) const |
| virtual real | lambda_custom (const real T, const real normB, const real angle) const |
| virtual real | lambda_table (const real T, const real normB, const real angle) const |
| real | H_const (const real B) const |
| virtual real | H_bhcurve (const real B) const |
| real | mu_const (const real H, const real T) const |
| virtual real | mu_bhcurve (const real H, const real T) const |
| virtual real | mu_custom (const real H, const real T) const |
| void | dmudH_const (const real H, real &mu, real &dmudH) const |
| virtual void | dmudH_bhcurve (const real H, real &mu, real &dmudH) const |
| real | E_const (const real T) const |
| real | E_spline (const real T) const |
| virtual real | E_custom (const real T) const |
| virtual real | dEdT_custom (const real T) const |
| real | nu_const (const real T) const |
| real | nu_spline (const real T) const |
| virtual real | nu_custom (const real T) const |
| real | alpha_const (const real T) const |
| real | alpha_spline (const real T) const |
| virtual real | alpha_custom (const real T) const |
| real | Rp02_const (const real T) const |
| real | Rp02_spline (const real T) const |
| virtual real | Rp02_custom (const real T) const |
| real | debye_const (const real T) const |
| real | debye_spline (const real T) const |
| virtual real | debye_custom (const real T) const |
| virtual real | rho_i_custom (const real T) const |
| real | rho_i_spline (const real T) const |
| virtual void | reset_spline (const MaterialProperty aProperty) |
| virtual void | create_spline (real(Material::*aFunction)(const real aT) const, const MaterialProperty aProperty, const uint aStartBC, const uint aEndBC, const real adYdX0=BELFEM_QUIET_NAN, const real adYdX1=BELFEM_QUIET_NAN) |
Protected Attributes | |
| real(Material::*) | mFunctionRhoKohler (const real T, const real normB, const real angle) const = nullptr |
| real(Material::*) | mFunctiondRhoKohlerdT (const real T, const real normB, const real angle) const = nullptr |
| real(Material::*) | mFunctiondRhoKohlerdB (const real T, const real normB, const real angle) const = nullptr |
| real(Material::*) | mFunctiondRhoKohlerdbeta (const real T, const real normB, const real angle) const = nullptr |
| real(Material::*) | mFunctionH (const real B) const = nullptr |
| real(Material::*) | mFunctionMu (const real H, const real T) const = nullptr |
| void(Material::*) | mFunctionDMuDH (double, double &, double &) const = nullptr |
| const material::JcFunction * | mJcFunction = nullptr |
| const material::JcFunction * | mNFunction = nullptr |
Base class for all materials in BELFEM.
The Material class provides a unified interface for accessing physical properties of materials. Properties can be constant, temperature-dependent, or depend on multiple variables (field, current, etc.) depending on the material type.
Key features:
Usage:
IMPORTANT NOTES:
| belfem::Material::Material | ( | const MaterialType | aType, |
| const bool | aIsIsotropic = true ) |
Constructor.
| aType | Material type (Ferro, HTS, PureMetal, etc.) |
| aIsIsotropic | True if material properties are isotropic (default) |
|
virtual |
Destructor - deletes owned B-H curves and Jc/n functions.
|
delete |
|
delete |
Thermal expansion coefficient.
| T | Temperature [K] (default: room temperature) |
Defined as α = (1/l)·∂l/∂T, NOT (1/l)·Δl/ΔT!
Reimplemented in belfem::material::Aluminum, belfem::material::Chromium, belfem::material::Copper, belfem::material::HastelloyC276, belfem::material::Indium, belfem::material::Iron, belfem::material::Lead, belfem::material::Magnesia, belfem::material::Nickel, belfem::material::Silver, belfem::material::UserDefinedMaterial, belfem::material::WhiteTin, and belfem::material::YBCO.
|
inlineprotected |
Temperature below which alpha is taken from the Grueneisen branch.
min( 0.618 * theta_Debye, gTAlphaSwitchMax ). The Debye factor is a convention, not a derivation - it sits comfortably above the temperature at which dln(C)/dT changes sign, which is where the fitted expansion curve stops being consistent with the heat capacity.
|
protected |
setup gate for the riva law: refuses a PROVABLY bad n source ( table bound or constant at or below 1 ). Called from set_resistivity_law and set_n_function, so the outcome does not depend on which of the two is called first.
|
inline |
Get constant property value.
Specific heat capacity.
| T | Temperature [K] (default: room temperature) |
|
protected |
PROPERTY EVALUATION FUNCTIONS.
These functions are called via function pointers for property evaluation. Each property has up to four variants:
The appropriate function is selected during material initialization based on how the property is defined.
Create spline for a property with optional boundary derivatives
|
protectedvirtual |
Reimplemented in belfem::material::SplineLookupTable.
Reimplemented in belfem::material::Metal.
Reimplemented in belfem::material::Metal.
|
virtual |
Reimplemented in belfem::material::SplineLookupTable.
Debye temperature.
| T | Temperature [K] |
Reimplemented in belfem::material::Metal, and belfem::material::Nickel.
Density as a function of temperature.
| T | Temperature [K] (default: room temperature) |
IMPORTANT: For thermal M-matrix, use ref_density() or density(gTroom), not density(T), because BELFEM computes on the undeformed mesh.
|
inline |
Get all dependencies for a property.
| aProperty | The material property |
|
inline |
Check if a property depends on a specific variable.
| aProperty | The material property |
| aDependency | The dependency to check (T, B, angle, etc.) |
|
inlineprotected |
d(jc)/d|B| routed like jc_eval: JcFunction::deval_dB when a function is attached, 0 for the constants fallback ( the exact derivative of a constant ) — so constant-jc decks are bit-identical
|
inlineprotected |
d(jc)/dT, T-leg twin of djc_eval_dB: JcFunction::deval_dT when a function is attached, 0 for the constants fallback. For a T-dependent UserDefined without a deval_dT override the base-class 0 is a conservative fallback, not an exact derivative
|
inlinevirtual |
Reimplemented in belfem::material::Metal.
|
inlinevirtual |
Reimplemented in belfem::material::Metal.
|
inlinevirtual |
Reimplemented in belfem::material::Alloy, and belfem::material::Metal.
|
inlinevirtual |
Reimplemented in belfem::material::Alloy, and belfem::material::Metal.
Reimplemented in belfem::material::Alloy, and belfem::material::Metal.
Magnetic permeability and its derivative.
| H | Magnetic field strength [A/m] |
| mu | Output: magnetic permeability [H/m] |
| dmudH | Output: derivative dμ/dH [H/m²] |
|
protectedvirtual |
Reimplemented in belfem::material::Metal.
|
inlineprotected |
d(n)/d|B|, same routing as djc_eval_dB
|
inlineprotected |
d(n)/dT, same routing as djc_eval_dT
|
inline |
Derivative of piecewise resistivity with respect to |B| at fixed J, T, θ
Exact per regime where the regime's law permits, staged where it does not ( 2026-08-13 audit, C5 accepted by both voices ):
|
inline |
defect overload: jc_eff = D(x)·jc throughout, djc_eff = D·djc
Branch-aware Jacobian \(d\rho/dJ\) of the three-regime piecewise model.
Branches mirror those of rho_piecewise():
\[ \frac{d\rho}{dJ} \;=\; \rho\,\ln 10\, \frac{dL_\rho}{dt}\, \frac{dt}{dJ}, \]
where the parametric derivatives follow from the implicit relation \(a t^2 - 2bt - c(J) = 0\) defined in rho_piecewise(). Above \(T_{crit}\) the derivative is taken as zero (only \(\rho_n\) is returned by rho_piecewise()), and for \(|J| < \)BELFEM_EPSILON the derivative is zero to avoid the singular \(\log J\) term.Required by the nonlinear iteration in the HTS solver (Messe et al. 2023, Sec. 2.7) so that Newton-Raphson can drive the residual through the curved transition without losing quadratic convergence.
This overload assumes constant \(J_c\) and \(n\).
| normJ | current-density magnitude \(|J|\) [A/m²] |
|
inline |
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. Field-dependent \(J_c(|B|, \angle)\) via mJcFunction; \(n\) remains constant.
|
inline |
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. Field-dependent \(J_c(|B|, \angle)\) with spatial defect modulation; \(n\) remains constant.
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. Temperature-only variant: \(J_c(T)\) and \(n(T)\) from Material::jc_custom() / Material::n_custom().
|
inline |
Derivative of piecewise resistivity with respect to current density magnitude.
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. Fully \((|B|, \angle, T)\)-dependent variant: both \(J_c\) and \(n\) come from JcFunction objects.
| normJ | Current density magnitude [A/m²] |
| normB | Magnetic field magnitude [T] |
| angleNxB | Angle between surface normal and B [rad] |
| T | Temperature [K] |
For Newton-Raphson: computes dρ/d||J|| for the piecewise model
|
inline |
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. Fully \((|B|, \angle, T)\)-dependent variant with spatial defect modulation applied to \(J_c\).
|
inline |
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. Temperature-only custom-callback variant with spatial defect modulation.
|
inline |
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. Constant \(J_c\) / \(n\) with spatial defect modulation applied to \(J_c\).
|
inline |
Derivative of piecewise resistivity with respect to T at fixed J, |B|, θ ( T-leg ).
Follows rho_piecewise's OWN residual branch by branch:
|
inline |
defect overload: jc_eff = D(x)·jc throughout, djc_eff = D·djc
|
inline |
Derivative of power-law resistivity with respect to |B| at fixed J, T, θ ( jc = jc(T,|B|,θ), n = n(T,|B|,θ) ).
Chain: dρ/d|B| = (r/p)² · [ ∂p/∂jc·djc/d|B| + ∂p/∂n·dn/d|B| ] with p the power-law resistivity, r the parallel combination with ρ_n, ∂p/∂jc = −n·p/jc and ∂p/∂n = p·ln(J/jc). Parallel factor and floor convention mirror drho_powerlaw_dJ exactly ( floored p in the factor, unfloored law differentiated ).
|
inline |
defect overload: jc_eff = D(x)·jc throughout, djc_eff = D·djc
Analytic Jacobian \(d\rho_{eff}/dJ\) of the power-law model.
For the parallel-combined model \(\rho_{eff} = (1/\rho_n + 1/\rho_{PL})^{-1}\) the chain rule gives
\[ \frac{d\rho_{eff}}{dJ} \;=\; \frac{d\rho_{PL}/dJ}{(1 + \rho_{PL}/\rho_n)^2}, \qquad \frac{d\rho_{PL}}{dJ} \;=\; \frac{E_c}{J_c^{2}}\,(n-1)\,\left(\frac{|J|}{J_c}\right)^{n-2}. \]
Required by the nonlinear (Newton-Raphson) iteration in the HTS solver to drive the residual below \(10^{-11}\) as recommended in Messe et al. 2023, Sec. 2.7. For \(|J| < \)BELFEM_EPSILON the derivative is taken as zero to avoid the \(0^{n-2}\) singularity when \(n < 2\).
This overload assumes constant \(J_c\) and \(n\).
| normJ | current-density magnitude \(|J|\) [A/m²] |
|
inline |
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. Field-dependent \(J_c(|B|, \angle)\) via mJcFunction; \(n\) remains constant.
|
inline |
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. Field-dependent \(J_c(|B|, \angle)\) with spatial defect modulation; \(n\) remains constant.
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. Temperature-only variant: \(J_c(T)\) and \(n(T)\) from Material::jc_custom() / Material::n_custom().
|
inline |
Derivative of power-law resistivity with respect to current density magnitude.
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. Fully \((|B|, \angle, T)\)-dependent variant: both \(J_c\) and \(n\) come from JcFunction objects.
| normJ | Current density magnitude [A/m²] |
| normB | Magnetic field magnitude [T] |
| angleNxB | Angle between surface normal and B [rad] |
| T | Temperature [K] |
For Newton-Raphson: computes dρ/d||J|| where ρ = ρ(||J||, B, θ, T)
|
inline |
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. Fully \((|B|, \angle, T)\)-dependent variant with spatial defect modulation applied to \(J_c\).
|
inline |
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. Temperature-only custom-callback variant with spatial defect modulation.
|
inline |
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. Constant \(J_c\) / \(n\) with spatial defect modulation applied to \(J_c\).
|
inline |
Derivative of power-law resistivity with respect to T at fixed J, |B|, θ ( T-leg: jc(T), n(T) AND ρ_n(T) all move — the quench-feedback tangent ).
Chain: dρ/dT = dp₀/dT / (1+ρ_PL/ρ_n)² + dρ_n/dT · (ρ_PL/(ρ_n+ρ_PL))² with dp₀/dT = p₀·( −(n/jc)·djc/dT + ln(J/jc)·dn/dT ). Floor convention mirrors drho_powerlaw_dB ( floored ρ_PL in the parallel factors, unfloored law differentiated ). No (djc==0 && dn==0) early-out: the ρ_n term is the only correct T-dependence of a constant-jc material and must survive.
|
inline |
defect overload: jc_eff = D(x)·jc throughout, djc_eff = D·djc
|
inline |
dρ/d|B| of rho_riva: w²·dρ_PL/dB ( dρ_n/dB = 0 on this path )
|
inline |
|
inline |
dρ/d|J| of rho_riva: w²·dρ_PL/dJ with w = ρ_n/(ρ_PL+ρ_n)
|
inline |
|
inline |
dρ/dT of rho_riva: w²·dρ_PL/dT + (1−w)²·dρ_n/dT
|
inline |
Reimplemented in belfem::material::Alloy, and belfem::material::Metal.
|
protectedvirtual |
Reimplemented in belfem::material::Metal.
|
protectedvirtual |
Reimplemented in belfem::material::Metal.
|
inlinevirtual |
Reimplemented in belfem::material::Alloy, and belfem::material::Metal.
|
protectedvirtual |
Reimplemented in belfem::material::Metal.
|
protectedvirtual |
Reimplemented in belfem::material::Metal.
Reimplemented in belfem::material::Alloy, and belfem::material::Metal.
Reimplemented in belfem::material::Alloy, and belfem::material::Metal.
|
protectedvirtual |
Reimplemented in belfem::material::Metal.
|
protectedvirtual |
Reimplemented in belfem::material::Metal.
|
virtual |
Reimplemented in belfem::material::SplineLookupTable.
Young's modulus.
| T | Temperature [K] (default: room temperature) |
|
virtual |
Reimplemented in belfem::material::UserDefinedMaterial.
|
virtual |
Evaluate a polynomial for a given property (for UserDefinedMaterial).
Internal method used by UserDefinedMaterial to evaluate polynomial-based property functions. Uses Horner's method for efficient evaluation.
| Property | The material property |
| T | Temperature [K] |
Reimplemented in belfem::material::UserDefinedMaterial.
|
inline |
Set flag (multi-purpose flag used by Kernel).
Shear modulus.
| T | Temperature [K] (default: room temperature) |
Magnetic field strength from flux density.
| B | Magnetic flux density [T] |
Reimplemented in belfem::material::Metal.
|
inline |
Check if a material property is available.
| aProperty | The property to check |
|
inline |
Check if the material has a defect.
|
inline |
Check if the material has a heating function.
|
inline |
Check if a property is constant (temperature-independent).
| aProperty | The property to check |
|
inline |
Check if material is flagged.
|
inline |
Check if material is isotropic.
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. Field-dependent \(J_c(|B|, \angle(n,B))\) without temperature dependence.
Direct evaluation of the critical current density \(J_c(|B|, \angle(n,B), T)\).
Used by post-processing and by overloads of rho_powerlaw() / rho_piecewise() that take a JcFunction-supplied \(J_c(B,\angle,T)\). For materials with a constant \(J_c\), use Material::constant_property(MaterialProperty::jc) instead.
|
inline |
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. Variant with spatial defect modulation \(J_c \rightarrow J_c \cdot d(x,y,z,t)\).
|
inline |
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. Field-dependent \(J_c(|B|, \angle(n,B))\) with spatial defect modulation \(J_c \rightarrow J_c \cdot d(x,y,z,t)\).
Reimplemented in belfem::material::UserDefinedMaterial.
|
inlineprotected |
O1 "full-signature policy" helpers: the assembly path always passes the full ( T, normB, angleNxB ) set; the material consumes what its Jc / n functions depend on and ignores the rest.
JcFunction subclasses override either eval( B, angle ) or eval( B, angle, T ) — the respective other default throws — so we route on the declared T-dependence. Falls back to the plain constants when no function is attached.
Bulk modulus.
| T | Temperature [K] (default: room temperature) |
Relative length after thermal expansion.
| T | Temperature [K] |
Reimplemented in belfem::material::Metal, and belfem::material::SplineLookupTable.
|
inline |
Get material label.
Thermal conductivity for noble metals with magnetoresistance.
| T | Temperature [K] |
| B | Magnetic field magnitude [T] |
| beta | Angle between field and current [rad] |
NOTE: metals evaluate Kohler's rule directly; when a metal was constructed with tables enabled, set_RRR() builds <label>_RRR<n>.hdf5 and the field-dependent evaluation reads it instead. Alloys require the table.
Reimplemented in belfem::material::Alloy, and belfem::material::Metal.
|
inlinevirtual |
Thermal conductivity for HTS materials.
| T | Temperature [K] |
| B_par | Parallel magnetic field component [T] |
| B_perp | Perpendicular magnetic field component [T] |
| J | Current density magnitude [A/m²] |
Reimplemented in belfem::material::Alloy, and belfem::material::Metal.
Thermal conductivity (isotropic).
| T | Temperature [K] (default: room temperature) |
Reimplemented in belfem::material::Alloy, and belfem::material::Metal.
|
protectedvirtual |
Reimplemented in belfem::material::UserDefinedMaterial.
|
protectedvirtual |
| void belfem::Material::load_bh_curve | ( | const material::BhCurve * | aCurve | ) |
Activate a B-H curve as the permeability source (ferromagnets).
| aCurve | Concrete B-H curve; the material takes ownership. |
Kept free of the concrete curve type: the caller (MaterialFactory) builds the linalg-backed BhSplineCurve, so base Material never depends on Spline/linalg. Stores the curve via set_bh_curve() and routes mu/H/dmudH through it.
|
inline |
Molar mass.
|
inlinevirtual |
Magnetic permeability.
| H | Magnetic field strength [A/m] |
| T | Temperature [K] (used by user-defined / polynomial mu(H,T); ignored by the constant and B-H-curve bindings) |
Reimplemented in belfem::material::Metal.
Reimplemented in belfem::material::HastelloyC276, and belfem::material::UserDefinedMaterial.
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. Field-dependent \(n(|B|, \angle(n,B))\) without temperature dependence.
Direct evaluation of the n-value as a function of \(|B|\), \(\angle(n,B)\) and \(T\).
Used by post-processing and by overloads of rho_powerlaw() / rho_piecewise() that take a JcFunction-supplied \(n(B,\angle,T)\). For materials with a constant \(n\), use Material::constant_property(MaterialProperty::n) instead.
Reimplemented in belfem::material::UserDefinedMaterial.
|
inlineprotected |
|
inlineprotected |
unfloored n as routed from table / custom / constant — n_eval clamps this at 1, and the dn_eval_* derivatives return 0 while the clamp binds
Poisson's ratio.
| T | Temperature [K] (default: room temperature) |
|
inline |
Get material number/identifier.
Read a defect from the library.
| aLibraryPath | path to the shared library holding the defect, resolved through material::data_file(): the run directory first, then $BELFEM_DATA/material, and otherwise handed to dlopen unchanged |
| aLabel | name of the defect to read |
Read a heating function from a plugin library.
| aLibraryPath | path to the shared library holding the heating function, resolved through material::data_file(): the run directory first, then $BELFEM_DATA/material, and otherwise handed to dlopen unchanged |
| aLabel | name of the heating function; the library must export <label>_init( Material * ) |
|
inline |
Reference density at reference temperature.
Use this for thermal M-matrix calculations.
| void belfem::Material::reset_dependencies | ( | const MaterialProperty | aProperty | ) |
Reset all dependencies for a property.
|
protectedvirtual |
Reimplemented in belfem::material::SplineLookupTable.
|
inline |
Shared binding for derivative channels that are identically zero.
Bound wherever a property is held constant, so that its first and higher derivatives vanish. One function rather than one clone per property and per derivative order.
Electrical resistivity (isotropic).
| T | Temperature [K] |
For HTS materials, use rho_powerlaw() instead.
Reimplemented in belfem::material::Alloy, and belfem::material::Metal.
Electrical resistivity for noble metals with magnetoresistance.
| T | Temperature [K] |
| B | Magnetic field magnitude [T] |
| beta | Angle between field and current [rad] |
NOTE: metals evaluate Kohler's rule directly; when a metal was constructed with tables enabled, set_RRR() builds <label>_RRR<n>.hdf5 and the field-dependent evaluation reads it instead. Alloys require the table.
Reimplemented in belfem::material::Alloy, and belfem::material::Metal.
Intrinsic (phonon) electrical resistivity of a metal, ρ = ρ_i(T) + ρ_0.
| T | Temperature [K] |
Reimplemented in belfem::material::Metal.
|
protectedvirtual |
Reimplemented in belfem::material::Metal, and belfem::material::UserDefinedMaterial.
Piecewise resistivity for HTS (constant jc and n).
Three-regime resistivity (power law / flux-flow / normal) with a smooth Bezier transition in log–log space.
Parameters and return value are documented on the definition in powerlaws.hpp, together with the derivation and its references.
Use this for HTS materials instead of rho(T).
The pure power law diverges as \(J \rightarrow \infty\), which is unphysical above the critical regime: an HTS conductor saturates at the resistivity of its normal-state matrix once the superconductor is fully driven. This model splits the \(J\)-axis into three regimes connected smoothly in \((\log_{10} J,\,\log_{10}\rho)\) space:
The transition currents are
\[ J_1 \;=\; J_c \cdot 10^{D/n}, \qquad J_2 \;=\; J_1 \cdot \left(\rho_n / \rho_1\right)^{1/(n-1)}, \qquad J_3 \;=\; J_1 \cdot \left(\rho_n / \rho_1\right)^{1/N_{ff}}, \]
where the knee is placed a fixed \(D = 2.5\) decades above \(J_c\) ( hardcoded; the member mD is not consulted ) and mNff (default 3) controls the slope of the flux-flow regime. Above the assumed critical temperature \(T_{crit}\), only \(\rho_n\) is returned.
The Bezier parameter \(t \in [0,1]\) for a queried \(J\) is the positive root of \(a\,t^2 - 2\,b\,t - c = 0\) with \(a = \log J_1 - 2\log J_2 + \log J_3\), \(b = \log J_1 - \log J_2\), and \(c = \log J - \log J_1\). The actual resistivity is then
\[ \log_{10}\rho_{FF}(J) = (1-t)^2 \log\rho_1 + 2(1-t)\,t \log\rho_n + t^2 \log\rho_n . \]
This three-regime extension is BELFEM-specific; it complements the pure Rhyner power law (Messe et al. 2023, Sec. 2.6) so that the same material can be evaluated above the critical regime in quench simulations without numerical blow-up.
| normJ | current-density magnitude \(|J|\) [A/m²] |
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. Temperature-only variant: \(J_c(T)\) and \(n(T)\) from the user-supplied callbacks Material::jc_custom() / Material::n_custom().
|
inline |
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. Temperature-only custom-callback variant with spatial defect modulation.
|
inline |
Piecewise resistivity for HTS (full temperature and field dependence).
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. Fully \((|B|, \angle, T)\)-dependent variant: both \(J_c\) and \(n\) come from JcFunction objects, and \(\rho_n\) is evaluated at the local temperature T.
| normJ | Current density magnitude [A/m²] |
| normB | Magnetic field magnitude [T] |
| angleNxB | Angle between surface normal and B [rad] |
| T | Temperature [K] |
|
inline |
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. Fully \((|B|, \angle, T)\)-dependent variant with spatial defect modulation applied to \(J_c\).
|
inline |
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. Constant \(J_c\) / \(n\) with spatially-dependent defect modulation \(J_c \rightarrow J_c \cdot d(x,y,z,t)\).
|
inline |
Piecewise resistivity for HTS (field-dependent jc, constant n).
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. Field-dependent \(J_c(|B|, \angle)\) via mJcFunction; \(n\) remains constant.
| normJ | Current density magnitude [A/m²] |
| normB | Magnetic field magnitude [T] |
| angleNxB | Angle between surface normal and B [rad] |
|
inline |
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. Field-dependent \(J_c(|B|, \angle)\) with spatial defect modulation.
Power law resistivity for HTS (constant jc and n).
Effective resistivity from the E–J power law (Rhyner 1993), parallel-combined with the normal-state resistivity.
Parameters and return value are documented on the definition in powerlaws.hpp, together with the derivation and its references.
Computes ρ = ( 1/ρ_n + 1/ρ_PL )^-1 with ρ_PL = (Ec/jc)·(J/jc)^(n-1) for constant jc and n ( parallel combination with the normal-state resistivity ρ_n, see powerlaws.hpp ). Use this for HTS materials instead of rho(T).
The intrinsic HTS power law is
\[ \rho_{PL}(J) \;=\; \frac{E_c}{J_c}\left(\frac{|J|}{J_c}\right)^{n-1}, \]
where \(E_c\) is the critical-field criterion (typically \(10^{-4}\) V/m), \(J_c\) is the critical current density and \(n\) is the resistive-transition exponent ( \(n \rightarrow 1\) → linear, \(n \rightarrow \infty\) → ideal critical-state).
To bound \(\rho\) from above as \(J \gg J_c\) and from below as \(J \rightarrow 0\), the effective resistivity is the parallel combination of \(\rho_{PL}\) with the normal-state resistivity \(\rho_n(T)\):
\[ \rho_{eff}(J) \;=\; \left(\frac{1}{\rho_n} + \frac{1}{\rho_{PL}}\right)^{-1}. \]
\(\rho_{PL}\) is floored at mRhoMin, which is ZERO by default (2026-08-10): a positive floor desynchronizes the value from drho_powerlaw_dJ, which differentiates the unfloored law — with the old 1e-16 the Newton tangent was wrong for all \(J \lesssim 0.87\,J_c\) on typical tape constants. Anyone raising mRhoMin again must also zero the derivative while the floor binds.
In this overload \(J_c\) and \(n\) are read as plain constants (configured via Material::set_constant) and \(\rho_n\) is evaluated at the global bulk temperature gTbulk.
| normJ | current-density magnitude \(|J|\) [A/m²] |
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. Temperature-only variant.
\(J_c(T)\) and \(n(T)\) are obtained from the user-supplied callbacks Material::jc_custom() and Material::n_custom(), allowing materials with bespoke analytic \(T\)-laws (e.g. Kim-style fits) without going through a JcFunction.
|
inline |
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. Temperature-only custom-callback variant with spatial defect modulation.
|
inline |
Power law resistivity for HTS (full temperature and field dependence).
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. Fully field- and temperature-dependent variant: \(J_c = J_c(|B|, \angle, T)\) and \(n = n(|B|, \angle, T)\), both supplied via mJcFunction / mNFunction.
| normJ | Current density magnitude [A/m²] |
| normB | Magnetic field magnitude [T] |
| angleNxB | Angle between surface normal and B [rad] |
| T | Temperature [K] |
Computes ρ = ( 1/ρ_n + 1/ρ_PL )^-1 with ρ_PL = (Ec/jc)·(J/jc)^(n-1) where jc = jc(B, angle, T) and n = n(B, angle, T).
\(\rho_n\) is evaluated at the local temperature T (not gTbulk).
|
inline |
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. Fully \((|B|, \angle, T)\)-dependent variant with spatial defect modulation applied to \(J_c\).
|
inline |
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. Constant \(J_c\) / \(n\) with spatially-dependent defect modulation \(J_c \rightarrow J_c \cdot d(x,y,z,t)\).
|
inline |
Power law resistivity for HTS (field-dependent jc, constant n).
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. Field-dependent critical current: \(J_c = J_c(|B|, \angle(n,B))\) supplied via mJcFunction.
| normJ | Current density magnitude [A/m²] |
| normB | Magnetic field magnitude [T] |
| angleNxB | Angle between surface normal and B [rad] |
Computes ρ = ( 1/ρ_n + 1/ρ_PL )^-1 with ρ_PL = (Ec/jc)·(J/jc)^(n-1) where jc = jc(B, angle).
\(n\) remains a constant.
|
inline |
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. Field-dependent \(J_c(|B|, \angle)\) with spatial defect modulation.
|
inline |
Riva-law resistivity: the superconducting power-law channel in parallel with the normal-state channel.
The parallel combination of Duron et al. 2004, used by Riva 2021 (EPFL thesis 8754, Eq. 5.4). Same model core as rho_powerlaw, but total over the full table range: jc_eff ≤ 0 or nonfinite (dead defect, underflow) falls back to the fully normal branch, the power-law channel is evaluated in log10 space with an overflow early-out, and n arrives pre-floored at 1 from n_eval (ohmic limit ρ_PL = ec/jc, J-independent). Only the assembly-path signatures (J,T,|B|,θ) ± defect exist; jc and n arrive through the usual dependency routing ( table or constants ).
|
inline |
defect overload: jc_eff = D(x,y,z,t)·jc throughout
|
protectedvirtual |
Reimplemented in belfem::material::Metal.
|
inlineprotected |
shared riva kernel: power-law channel resistivity in log10 space. Returns false when the channel has overflowed past the normal state ( caller takes the fully-normal branch: ρ = ρn )
Yield stress (0.2% offset).
| T | Temperature [K] (default: room temperature) |
Reimplemented in belfem::material::UserDefinedMaterial.
|
virtual |
Assign a B-H curve to this material.
| aCurve | Pointer to B-H curve (material takes ownership) |
IMPORTANT: Material takes ownership and will delete the curve.
Virtual so that load_bh_curve() (defined on the base) dispatches to the B-H-capable override in Metal; the base implementation errors.
Reimplemented in belfem::material::Metal.
| void belfem::Material::set_constant | ( | const MaterialProperty | aProperty, |
| const real | aValue ) |
Define a property as constant.
| void belfem::Material::set_custom | ( | const MaterialProperty | aProperty | ) |
Mark property as using custom evaluation function.
| void belfem::Material::set_dependency | ( | const MaterialProperty | aProperty, |
| const MaterialDependency | aDependency ) |
Add a dependency to a property.
| void belfem::Material::set_have | ( | const MaterialProperty | aProperty, |
| const bool | aHave = true ) |
Mark a property as available.
| void belfem::Material::set_jc_function | ( | const material::JcFunction * | aFunction | ) |
Assign a critical current density function.
| aFunction | Pointer to Jc function (material takes ownership) |
IMPORTANT: Material takes ownership and will delete the function.
| void belfem::Material::set_label | ( | const string & | aLabel | ) |
PROTECTED INTERFACE FOR DERIVED MATERIALS.
This section contains utility functions for derived material classes to set up their properties. The Material class uses a strategy pattern where properties can be:
When a property is set up, the appropriate function pointer is assigned (e.g., mFunctionRho points to rho_const, rho_spline, or rho_custom).
Set material label (for derived classes)
| void belfem::Material::set_n_function | ( | const material::JcFunction * | aFunction | ) |
Assign a power law exponent function.
| aFunction | Pointer to n function (material takes ownership) |
IMPORTANT: Material takes ownership and will delete the function.
| void belfem::Material::set_number | ( | const string & | aNumber | ) |
Set material number/identifier (for derived classes).
| void belfem::Material::set_piecewise | ( | const bool | aUsePiecewise | ) |
| void belfem::Material::set_resistivity_law | ( | const ResistivityLaw | aLaw | ) |
|
virtual |
Set the residual resistivity ratio (for noble metals).
| RRR | Residual resistivity ratio (ρ(273K)/ρ(0K)) |
Reimplemented in belfem::material::Metal.
|
virtual |
Reimplemented in belfem::material::Metal.
| void belfem::Material::set_user_defined_defect | ( | DefectFunc * | Function | ) |
Set a user-defined defect function with x, y, z, t dependencies.
| Function | Pointer to user function with signature: real(real, real, real, real) |
|
virtual |
Set a user-defined function with one dependency (for UserDefinedMaterial).
This method is primarily used by UserDefinedMaterial to assign custom property evaluation functions. Most users should not call this directly; instead, use MaterialFactory::create_material() with a user library.
| Property | The material property to define |
| Dependency | The dependency type (typically MaterialDependency::T) |
| Function | Pointer to user function with signature: real(const Material*, real) |
Reimplemented in belfem::material::UserDefinedMaterial.
|
virtual |
Set a user-defined function with three dependencies (for UserDefinedMaterial).
This method is primarily used by UserDefinedMaterial to assign custom property evaluation functions for three-parameter properties like rho(T,B,angle).
| Property | The material property to define |
| Dependency1 | First dependency |
| Dependency2 | Second dependency |
| Dependency3 | Third dependency |
| Function | Pointer to user function with signature: real(const Material*, real, real, real) |
Reimplemented in belfem::material::UserDefinedMaterial.
|
virtual |
Set a user-defined function with two dependencies (for UserDefinedMaterial).
This method is primarily used by UserDefinedMaterial to assign custom property evaluation functions for two-parameter properties like mu(H,T) or jc(B,angle).
| Property | The material property to define |
| Dependency1 | First dependency |
| Dependency2 | Second dependency |
| Function | Pointer to user function with signature: real(const Material*, real, real) |
Reimplemented in belfem::material::UserDefinedMaterial.
| void belfem::Material::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 ].
| Function | Pointer to user function with signature: real(real, real, real, real) |
|
virtual |
Reimplemented in belfem::material::UserDefinedMaterial.
|
virtual |
Set a polynomial function for a property (for UserDefinedMaterial).
Defines a property as a polynomial in temperature: f(T) = c₀T^n + c₁T^(n-1) + ... + c_n This is a convenience function for user-defined materials.
IMPORTANT: Coefficients are in DESCENDING order (MATLAB style), highest degree first.
| Property | The material property to define |
| Coefficients | Polynomial coefficients [c₀, c₁, c₂, ...] in DESCENDING order (highest degree first) |
Reimplemented in belfem::material::UserDefinedMaterial.
|
virtual |
Evaluate property using spline interpolation.
Reimplemented in belfem::material::Metal, and belfem::material::SplineLookupTable.
|
inline |
Get the material type.
|
inline |
Clear flag.
|
inline |
Check if we use piecewise instead of power-law.
|
inline |
|
inline |
Artificial volumetric heat load [ W/m³ ] from the heating plugin.
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |