1,907,109 research outputs found
BC Studies 2017 conference poster
Poster for (Un)setting British Columbia - BC Studies 2017 conference. Conference date: May 4 - 6, 2017. Location: Vancouver Island University, Snuneymuxw First Nation Territory / Nanaimo, B.C
BC Studies 2017: Call for proposals
Call for proposals for (Un)settling British Columbia - 2017 BC Studies Conference. Conference date: May 4 - 6, 2017. Location: Vancouver Island University, Snuneymuxw First Nation Territory / Nanaimo, B.C.https://viuspace.viu.ca/bitstream/handle/10613/3252/BC Studies 2017 CFP.pdf?sequence=
Data Sets for a Fractional Moisture-Dependent Viscoelasticity Model for Thermoplastic Polymers
This dataset contains Dynamical Mechanical Thermal Analysis (DMTA) results, including the determination of the complex Young’s modulus and complex shear modulus from torsion and tension measurements. The dataset is associated with the publication Fauser et al. (2025) and complements the dataset “A Modular Framework for Non-Linear Optimization of Linear Viscoelastic Model Parameters Using a Second-Order Fractional Approach”.
Frequency-dependent measurements were performed using a rheometer (MCR 702, linear motor, Anton Paar, Graz, Austria) over a frequency range of 0.1 s⁻¹ to 10 s⁻¹. The applied strain amplitudes were ε = 0.01 % (axial) and γ = 0.01 % (shear). Measurements were conducted at constant temperatures within the glass transition range of the respective polymers.
Master curves were generated from frequency sweeps of the complex Young’s and shear moduli for cylindrical samples (BASF, Ludwigshafen, Germany) of:
Poly-l-actic acid (PLA)
Poly-ethylene terephthalate (PET)
Poly-amid (PA)
and for rectangular samples of:
Thermoplastic poly-urethane (TPU, SMP Technologies Inc., Tokyo, Japan)
TPU samples were analyzed at varying moisture contents (in 10 % RH increments). The corresponding state-dependent shift factors used for master curve generation are also provided in the dataset.</p
Die Churfürstliche Haupt- / und Residenz-Stadt. / Mayntz : Gabriel Bodenehr
Ansicht der Stadt MainzBegleittext und Bildlegende linksVorliegende/r Kupferstich/Radierung wohl um 1861 von Fauser herausgegebe
Jörg Fauser
Jörg Fauser was the enfant terrible of the German literary scene. Born in the
Taunus town of Bad Schwalbach in 1944, he worked a number of different jobs
(temporary worker, airport worker, night guard, journalist, author and rock
songwriter). The night after his forty-third birthday, he died tragically and
under mysterious circumstances when walking on the A94 highway between
Feldkirchen and Riehm near Munich, where he was hit by a truck. It was only
after his death that he became an iconic figure. In 1988, Das Syndikat, a group
of German crime writers, awarded him the prestigious Ehrenglauser prize for
crime fiction, named after the Swiss author Friedrich Glauser
A Modular Framework for Non-Linear Optimization of Linear Viscoelastic Model Parameters using a Second-Order Fractional Approach
This repository presents a reproducible workflow for fitting the Linear Second-order Fractional (LSF) model to mastercurves of thermoplastic polymers.
The dataset is associated with the publication Fauser et al. (2025) and complements the dataset Data Sets for a Fractional Moisture-Dependent Viscoelasticity Model for Thermoplastic Polymers.
The LSF model effectively captures the broad relaxation spectra typical of polymers, but its interdependent parameters require robust non-linear optimization. To ensure clarity and maintainability, the fitting workflow is organized into three modular components: Viscoelastic Models Class (models.py) Configuration File (configuration_file.py) Model Fitting Notebook (main.ipynb)
1. Viscoelastic Models Class (models.py) This module serves as the core library of constitutive models. Each model is implemented as a self-contained, object-oriented class. Purpose Encapsulate mathematical definitions of viscoelastic models, enabling modular extensions and reuse. Key Component: The LSF Model The Second-Order Fractional (LSF) model is defined by its complex modulus:
E*(ω) = (Ξ₀ + (iω)^α₁ Ξ₁ + (iω)^α₂ Ξ₂) / (Λ₀ + (iω)^α₁ Λ₁ + (iω)^α₂ Λ₂)
Parameters:
Ξ₀, Ξ₁, Ξ₂ → strain-related coefficients
Λ₀, Λ₁, Λ₂ → stress-related coefficients
α₁, α₂ → fractional exponents
Parent Class: ViscoelasticityModel
Defines methods for computing the real/imaginary parts of the complex modulus, as well as the storage modulus, loss modulus, and loss factor:
class ViscoelasticityModel(torch.nn.Module):
"""
Parent class for viscoelasticity models
"""
def __init__(self):
super().__init__()
def complexModulus(self, w):
raise Exception
def forward(self, w):
comp = self.complexModulus(w)
return comp.imag / comp.real
def storageModulus(self,w):
comp = self.complexModulus(w)
return comp.real
def lossModulus(self,w):
comp = self.complexModulus(w)
return comp.imag
Subclass: SecondOrderFractionalDerivativeModel Implements the LSF model, with parameters represented as torch.nn.Parameter for optimization. A scaling factor normalizes experimental and model data for stability.
class SecondOrderFractionalDerivativeModel(ViscoelasticityModel):
"""
Class for a second order derivative model
(G0 + d/dt^alpha G1 + d/dt^beta G2) stress
= (E0 + d/dt^alpha E1 + d/dt^beta E2) strain
"""
def __init__(self,E0,E1,E2,G0,G1,G2,alpha,beta):
super().__init__()
self.E0 = torch.nn.Parameter(E0 * torch.ones(1, dtype=torch.float64))
self.E1 = torch.nn.Parameter(E1 * torch.ones(1, dtype=torch.float64))
self.E2 = torch.nn.Parameter(E2 * torch.ones(1, dtype=torch.float64))
# normalize G0 to 1, G0 is not fitted
self.G0 = 1 * torch.ones(1, dtype=torch.float64)
self.G1 = torch.nn.Parameter(G1 * torch.ones(1, dtype=torch.float64))
self.G2 = torch.nn.Parameter(G2 * torch.ones(1, dtype=torch.float64))
self.alpha1 = torch.nn.Parameter(alpha * torch.ones(1, dtype=torch.float64))
self.alpha2 = torch.nn.Parameter(beta * torch.ones(1, dtype=torch.float64))
def complexModulus(self, w):
w = w[:,None]
iw = torch.view_as_complex(torch.cat((torch.zeros(w.size()),w),1))
iw_alpha1 = iw ** self.alpha1
iw_alpha2 = iw ** self.alpha2
comp = ((self.E0 + self.E1 * iw_alpha1 + self.E2 * iw_alpha2)
/ (self.G0 + self.G1 * self.E1 * iw_alpha1 + self.G2 * self.E2 * iw_alpha2))
return comp
2. Configuration File (configuration_file.py)
This module centralizes all hyperparameters for non-linear optimization. Separating configuration ensures reproducibility, readability, and simplified parameter tuning.
Example
def get_diaplex_50_optimization_params():
dict = {}
dict["lr"] = 1e-3
dict["n_iter"] = 40000
dict["data_range"] = [5e-6,1e4]
dict["w_threshold"] = 0.0032
dict["w_left"] = 1
dict["w_right"] = 2
dict["criterion"] = torch.nn.MSELoss(reduction="sum")
return dict
Key Parameters lr → learning rate for Adam optimizer n_iter → number of optimization iterations data_range → frequency range for fitting w_threshold → frequency of peak loss factor w_left, w_right → weighting around w_threshold criterion → loss function (L2 norm)
3. Model Fitting (main.ipynb)
The Jupyter notebook orchestrates the full workflow for fitting fractional viscoelastic models to experimental mechanical data.
It performs data loading, preprocessing, model definition, and optimization of material parameters using Adam optimizer.
Workflow Overview
Load configuration and utilities
Imports helper functions and parameters from configuration_file.py:
get_diaplex_filenames() — returns paths to experimental CSV data.
get_diaplex_50_optimization_params() — provides hyperparameters (learning rate, iteration count, weighting, etc.).
Initializes the fractional viscoelastic model SecondOrderFractionalDerivativeModel for each dataset.
Load and preprocess experimental data
Reads CSV files, extracts and sorts:
Extensional Reduced Frequency
Extensional Storage Modulus (E′)
Extensional Loss Modulus (E″)
Data are converted to PyTorch tensors for GPU-based optimization.
Define training configuration
For each dataset:
Finds the frequency corresponding to the loss peak (tan δ = E″/E′).
Loads optimization settings: criterion, lr, n_iter, w_left, w_right, and data_range.
Computes data_scaling to weight frequency ranges differently around the loss peak.
Optimization Loop
for t in tqdm(range(n_iter)):
pred = models[key](angfreq[key][indices[key]])
meas = ((lossmod[key])/(stormod[key]))[indices[key]]
loss = criterion(meas/meas * data_scaling, pred/meas * data_scaling)
optimizer.zero_grad()
loss.backward()
optimizer.step()
The optimization minimizes the difference between measured and predicted loss factor (tan δ).
Weighting (w_left, w_right) emphasizes frequencies below or above the loss peak for improved robustness.
Convergence depends strongly on initial guesses, data range, and learning rate.
Visualization and Output
After convergence, the notebook produces log–log plots comparing model predictions and measurements:
Loss factor (tan δ)
Storage modulus (E′)
Figures are saved as *_fig_loss_factor.pdf and *_fig_storage_modulus.pdf, ready for publication.
Key Notes
Convergence sensitivity: Good initial parameter guesses and suitable step sizes are essential.
Weighting strategy: Improves robustness near the loss peak, particularly for noisy data.
Modular design: New datasets or model variants can be added easily through configuration files.
4. Fitted Parameters
In addition to the Python scripts for non-linear optimization, this repository also provides the fitted parameters of each master curve. These parameters, published in the related dataset
(Data Sets for a Fractional Moisture-Dependent Viscoelasticity Model for Thermoplastic Polymers), are available for both the LSF model and the Generalized Maxwell model.
</p
- …
