sfepy.homogenization.coefs_phononic module

class sfepy.homogenization.coefs_phononic.AcousticMassLiquidTensor(name, problem, kwargs)[source]
get_coefs(freq)[source]

Get frequency-dependent coefficients.

class sfepy.homogenization.coefs_phononic.AcousticMassTensor(name, problem, kwargs)[source]

The acoustic mass tensor for a given frequency.

Returns:
selfAcousticMassTensor instance

This class instance whose evaluate() method computes for a given frequency the required tensor.

Notes

eigenmomenta, eigs should contain only valid resonances.

evaluate(freq)[source]
get_coefs(freq)[source]

Get frequency-dependent coefficients.

to_file_txt = None
class sfepy.homogenization.coefs_phononic.AppliedLoadTensor(name, problem, kwargs)[source]

The applied load tensor for a given frequency.

Returns:
selfAppliedLoadTensor instance

This class instance whose evaluate() method computes for a given frequency the required tensor.

Notes

eigenmomenta, ueigenmomenta, eigs should contain only valid resonances.

evaluate(freq)[source]
to_file_txt = None
class sfepy.homogenization.coefs_phononic.BandGaps(name, problem, kwargs)[source]

Band gaps detection.

Parameters:
eigensolverstr

The name of the eigensolver for mass matrix eigenvalues.

eig_range(int, int)

The eigenvalues range (squared frequency) to consider.

freq_margins(float, float)

Margins in percents of initial frequency range given by eig_range by which the range is increased.

fixed_freq_range(float, float)

The frequency range to consider. Has precedence over eig_range and freq_margins.

freq_stepfloat

The frequency step for tracing, in percent of the frequency range.

freq_epsfloat

The frequency difference smaller than freq_eps is considered zero.

zero_epsfloat

The tolerance for finding zeros of mass matrix eigenvalues.

detect_funcallable

The function for detecting the band gaps. Default is detect_band_gaps().

log_save_namestr

If not None, the band gaps log is to be saved under the given name.

raw_log_save_namestr

If not None, the raw band gaps log is to be saved under the given name.

fix_eig_range(n_eigs)[source]
process_options()[source]

Setup application-specific options.

Subclasses should implement this method as needed.

Returns:
app_optionsStruct instance

The application options.

static save_log(filename, float_format, bg)[source]

Save band gaps, valid flags and eigenfrequencies.

static to_file_txt(fd, float_format, bg)[source]
class sfepy.homogenization.coefs_phononic.ChristoffelAcousticTensor(name, problem, kwargs)[source]
process_options()[source]

Setup application-specific options.

Subclasses should implement this method as needed.

Returns:
app_optionsStruct instance

The application options.

class sfepy.homogenization.coefs_phononic.DensityVolumeInfo(name, problem, kwargs)[source]

Determine densities of regions specified in region_to_material, and compute average density based on region volumes.

static to_file_txt(fd, float_format, dv_info)[source]
class sfepy.homogenization.coefs_phononic.Eigenmomenta(name, problem, kwargs)[source]

Eigenmomenta corresponding to eigenvectors.

Parameters:
var_namestr

The name of the variable used in the integral.

thresholdfloat

The threshold under which an eigenmomentum is considered zero.

threshold_is_relativebool

If True, the threshold is relative w.r.t. max. norm of eigenmomenta.

transformcallable, optional

Optional function for transforming the eigenvectors before computing the eigenmomenta.

Returns:
eigenmomentaStruct

The resulting eigenmomenta. An eigenmomentum above threshold is marked by the attribute ‘valid’ set to True.

process_options()[source]

Setup application-specific options.

Subclasses should implement this method as needed.

Returns:
app_optionsStruct instance

The application options.

class sfepy.homogenization.coefs_phononic.PhaseVelocity(name, problem, kwargs)[source]

Compute phase velocity.

process_options()[source]

Setup application-specific options.

Subclasses should implement this method as needed.

Returns:
app_optionsStruct instance

The application options.

class sfepy.homogenization.coefs_phononic.PolarizationAngles(name, problem, kwargs)[source]

Compute polarization angles, i.e., angles between incident wave direction and wave vectors. Vector length does not matter - eigenvectors are used directly.

process_options()[source]

Setup application-specific options.

Subclasses should implement this method as needed.

Returns:
app_optionsStruct instance

The application options.

class sfepy.homogenization.coefs_phononic.SchurEVP(name, problem, kwargs)[source]

Schur complement eigenvalue problem.

post_process(eigs, mtx_s_phi, mtx_dib, problem)[source]
prepare_matrices(problem)[source]

A = K + B^T D^{-1} B

class sfepy.homogenization.coefs_phononic.SimpleEVP(name, problem, kwargs)[source]

Simple eigenvalue problem.

post_process(eigs, mtx_s_phi, data, problem)[source]
prepare_matrices(problem)[source]
process_options()[source]

Setup application-specific options.

Subclasses should implement this method as needed.

Returns:
app_optionsStruct instance

The application options.

save(eigs, mtx_phi, problem)[source]
sfepy.homogenization.coefs_phononic.compute_cat_dim_dim(coef, iw_dir)[source]

Christoffel acoustic tensor part of dielectric tensor dimension.

sfepy.homogenization.coefs_phononic.compute_cat_dim_sym(coef, iw_dir)[source]

Christoffel acoustic tensor part of piezo-coupling tensor dimension.

sfepy.homogenization.coefs_phononic.compute_cat_sym_sym(coef, iw_dir)[source]

Christoffel acoustic tensor (part) of elasticity tensor dimension.

sfepy.homogenization.coefs_phononic.compute_eigenmomenta(em_equation, var_name, problem, eig_vectors, transform=None)[source]

Compute the eigenmomenta corresponding to given eigenvectors.

sfepy.homogenization.coefs_phononic.cut_freq_range(freq_range, eigs, valid, freq_margins, eig_range, fixed_freq_range, freq_eps)[source]

Cut off masked resonance frequencies. Margins are preserved, like no resonances were cut.

Returns:
freq_rangearray

The new range of frequencies.

freq_range_marginsarray

The range of frequencies with prepended/appended margins equal to fixed_freq_range if it is not None.

sfepy.homogenization.coefs_phononic.describe_gaps(gaps)[source]
sfepy.homogenization.coefs_phononic.detect_band_gaps(mass, freq_info, opts, gap_kind='normal', mtx_b=None)[source]

Detect band gaps given solution to eigenproblem (eigs, eig_vectors). Only valid resonance frequencies (e.i. those for which corresponding eigenmomenta are above a given threshold) are taken into account.

Notes

  • make freq_eps relative to ]f0, f1[ size?

sfepy.homogenization.coefs_phononic.find_zero(f0, f1, callback, freq_eps, zero_eps, mode)[source]

For f in ]f0, f1[ find frequency f for which either the smallest (mode = 0) or the largest (mode = 1) eigenvalue of problem P given by callback is zero.

Returns:
flag0, 1, or 2

The flag, see Notes below.

frequencyfloat

The found frequency.

eigenvaluefloat

The eigenvalue corresponding to the found frequency.

Notes

Meaning of the return value combinations:

mode

flag

meaning

0, 1

0

eigenvalue -> 0 for f in ]f0, f1[

0

1

f -> f1, smallest eigenvalue < 0

0

2

f -> f0, smallest eigenvalue > 0 and -> -infty

1

1

f -> f1, largest eigenvalue < 0 and -> +infty

1

2

f -> f0, largest eigenvalue > 0

sfepy.homogenization.coefs_phononic.get_callback(mass, solver_kind, mtx_b=None, mode='trace')[source]

Return callback to solve band gaps or dispersion eigenproblem P.

Notes

Find zero callbacks return:

eigenvalues

Trace callbacks return:

(eigenvalues,)

or

(eigenvalues, eigenvectors) (in full (dispoersion) mode)

If mtx_b is None, the problem P is

M w = lambda w,

otherwise it is

omega^2 M w = eta B w

sfepy.homogenization.coefs_phononic.get_gap_ranges(freq_range, gaps, kinds)[source]

For each (potential) band gap in gaps, return the frequency ranges of its parts according to kinds.

sfepy.homogenization.coefs_phononic.get_log_freqs(f0, f1, df, freq_eps, n_point_min, n_point_max)[source]

Get logging frequencies.

The frequencies get denser towards the interval boundaries.

sfepy.homogenization.coefs_phononic.get_ranges(freq_range, eigs)[source]

Get an eigenvalue range slice and a corresponding initial frequency range within a given frequency range.

sfepy.homogenization.coefs_phononic.split_chunks(indx)[source]

Split index vector to chunks of consecutive numbers.