Add property models for FEM

This commit is contained in:
David Carter
2024-03-04 00:50:32 -05:00
parent 6db79f02c4
commit de168aae27
23 changed files with 984 additions and 36 deletions

View File

@@ -39,11 +39,13 @@ ModelProperty::ModelProperty()
{}
ModelProperty::ModelProperty(const QString& name,
const QString& header,
const QString& type,
const QString& units,
const QString& url,
const QString& description)
: _name(name)
, _displayName(header)
, _propertyType(type)
, _units(units)
, _url(url)
@@ -52,6 +54,7 @@ ModelProperty::ModelProperty(const QString& name,
ModelProperty::ModelProperty(const ModelProperty& other)
: _name(other._name)
, _displayName(other._displayName)
, _propertyType(other._propertyType)
, _units(other._units)
, _url(other._url)
@@ -63,6 +66,14 @@ ModelProperty::ModelProperty(const ModelProperty& other)
}
}
const QString ModelProperty::getDisplayName() const
{
if (_displayName.isEmpty()) {
return getName();
}
return _displayName;
}
ModelProperty& ModelProperty::operator=(const ModelProperty& other)
{
if (this == &other) {
@@ -70,6 +81,7 @@ ModelProperty& ModelProperty::operator=(const ModelProperty& other)
}
_name = other._name;
_displayName = other._displayName;
_propertyType = other._propertyType;
_units = other._units;
_url = other._url;
@@ -89,7 +101,7 @@ bool ModelProperty::operator==(const ModelProperty& other) const
return true;
}
return (_name == other._name) && (_propertyType == other._propertyType)
return (_name == other._name) && (_displayName == other._displayName) && (_propertyType == other._propertyType)
&& (_units == other._units) && (_url == other._url) && (_description == other._description)
&& (_inheritance == other._inheritance);
}

View File

@@ -56,6 +56,7 @@ class MaterialsExport ModelProperty: public Base::BaseClass
public:
ModelProperty();
ModelProperty(const QString& name,
const QString& header,
const QString& type,
const QString& units,
const QString& url,
@@ -67,6 +68,7 @@ public:
{
return _name;
}
const QString getDisplayName() const;
const QString getPropertyType() const
{
return _propertyType;
@@ -96,6 +98,10 @@ public:
{
_name = name;
}
void setColumnHeader(const QString& header)
{
_displayName = header;
}
virtual void setPropertyType(const QString& type)
{
_propertyType = type;
@@ -139,6 +145,7 @@ public:
private:
QString _name;
QString _displayName;
QString _propertyType;
QString _units;
QString _url;

View File

@@ -254,6 +254,7 @@ void ModelLoader::addToTree(std::shared_ptr<ModelEntry> model,
if (exclude.count(QString::fromStdString(propName)) == 0) {
// showYaml(it->second);
auto yamlProp = yamlProperties[propName];
auto propDisplayName = yamlValue(yamlProp, "DisplayName", "");
auto propType = yamlValue(yamlProp, "Type", "");
auto propUnits = yamlValue(yamlProp, "Units", "");
auto propURL = yamlValue(yamlProp, "URL", "");
@@ -261,6 +262,7 @@ void ModelLoader::addToTree(std::shared_ptr<ModelEntry> model,
// auto inherits = yamlValue(yamlProp, "Inherits", "");
ModelProperty property(QString::fromStdString(propName),
propDisplayName,
propType,
propUnits,
propURL,
@@ -276,11 +278,13 @@ void ModelLoader::addToTree(std::shared_ptr<ModelEntry> model,
// Base::Console().Log("\tColumns '%s'\n", colName.c_str());
auto colProp = cols[colName];
auto colPropDisplayName = yamlValue(colProp, "DisplayName", "");
auto colPropType = yamlValue(colProp, "Type", "");
auto colPropUnits = yamlValue(colProp, "Units", "");
auto colPropURL = yamlValue(colProp, "URL", "");
auto colPropDescription = yamlValue(colProp, "Description", "");
ModelProperty colProperty(QString::fromStdString(colName),
colPropDisplayName,
colPropType,
colPropUnits,
colPropURL,

View File

@@ -232,11 +232,24 @@ SET(MaterialModel_Files
Resources/Models/Fluid/Fluid.yml
Resources/Models/Legacy/Father.yml
Resources/Models/Legacy/MaterialStandard.yml
Resources/Models/Mechanical/ArrudaBoyce.yml
Resources/Models/Mechanical/Density.yml
Resources/Models/Mechanical/IsotropicLinearElastic.yml
Resources/Models/Mechanical/LinearElastic.yml
Resources/Models/Mechanical/MooneyRivlin.yml
Resources/Models/Mechanical/NeoHooke.yml
Resources/Models/Mechanical/OgdenN1.yml
Resources/Models/Mechanical/OgdenN2.yml
Resources/Models/Mechanical/OgdenN3.yml
Resources/Models/Mechanical/OgdenYld2004p18.yml
Resources/Models/Mechanical/OrthotropicLinearElastic.yml
Resources/Models/Mechanical/PolynomialN1.yml
Resources/Models/Mechanical/PolynomialN2.yml
Resources/Models/Mechanical/PolynomialN3.yml
Resources/Models/Mechanical/ReducedPolynomialN1.yml
Resources/Models/Mechanical/ReducedPolynomialN2.yml
Resources/Models/Mechanical/ReducedPolynomialN3.yml
Resources/Models/Mechanical/Yeoh.yml
Resources/Models/Patterns/PAT.yml
"Resources/Models/Patterns/Pattern File.yml"
"Resources/Models/Render Workbench/RenderAppleseed.yml"

View File

@@ -62,6 +62,7 @@ Array2D::Array2D(const QString& propertyName,
if (_property) {
_value =
std::static_pointer_cast<Materials::Material2DArray>(_property->getMaterialValue());
setWindowTitle(_property->getDisplayName());
}
else {
_value = nullptr;
@@ -81,16 +82,6 @@ Array2D::Array2D(const QString& propertyName,
connect(ui->standardButtons, &QDialogButtonBox::rejected, this, &Array2D::reject);
}
void Array2D::setHeaders(QStandardItemModel* model)
{
QStringList headers;
auto columns = _property->getColumns();
for (auto column = columns.begin(); column != columns.end(); column++) {
headers.append(column->getName());
}
model->setHorizontalHeaderLabels(headers);
}
void Array2D::setColumnWidths(QTableView* table)
{
int length = _property->columns();

View File

@@ -68,7 +68,6 @@ private:
QAction _deleteAction;
void setHeaders(QStandardItemModel* model);
void setColumnWidths(QTableView* table);
void setColumnDelegates(QTableView* table);
void setupArray();

View File

@@ -111,7 +111,7 @@ QVariant Array2DModel::headerData(int section, Qt::Orientation orientation, int
if (role == Qt::DisplayRole) {
if (orientation == Qt::Horizontal) {
const Materials::MaterialProperty& column = _property->getColumn(section);
return column.getName();
return column.getDisplayName();
}
else if (orientation == Qt::Vertical) {
// Vertical header
@@ -251,7 +251,7 @@ QVariant Array3DDepthModel::headerData(int section, Qt::Orientation orientation,
if (role == Qt::DisplayRole) {
if (orientation == Qt::Horizontal) {
const Materials::MaterialProperty& column = _property->getColumn(section);
return column.getName();
return column.getDisplayName();
}
if (orientation == Qt::Vertical) {
// Vertical header
@@ -406,7 +406,7 @@ QVariant Array3DModel::headerData(int section, Qt::Orientation orientation, int
if (role == Qt::DisplayRole) {
if (orientation == Qt::Horizontal) {
const Materials::MaterialProperty& column = _property->getColumn(section + 1);
return column.getName();
return column.getDisplayName();
}
if (orientation == Qt::Vertical) {
// Vertical header

View File

@@ -0,0 +1,60 @@
---
# ***************************************************************************
# * *
# * Copyright (c) 2023 David Carter <dcarter@davidcarter.ca> *
# * *
# * This program is free software; you can redistribute it and/or modify *
# * it under the terms of the GNU Lesser General Public License (LGPL) *
# * as published by the Free Software Foundation; either version 2 of *
# * the License, or (at your option) any later version. *
# * for detail see the LICENCE text file. *
# * *
# * This program is distributed in the hope that it will be useful, *
# * but WITHOUT ANY WARRANTY; without even the implied warranty of *
# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
# * GNU Library General Public License for more details. *
# * *
# * You should have received a copy of the GNU Library General Public *
# * License along with this program; if not, write to the Free Software *
# * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
# * USA *
# * *
# ***************************************************************************
Model:
Name: 'ArrudaBoyce'
UUID: 'e10d00de-c7de-4e59-bcdd-058c2ea19ec6'
URL: 'http://www.dhondt.de/ccx_2.21.pdf'
Description: >
A hyperelastic constitutive model used to describe the mechanical
behavior of rubber and other polymeric substances
ArrudaBoyce:
DisplayName: "Arruda-Boyce"
Type: '2DArray'
Columns:
Temperature:
Type: 'Quantity'
Units: 'C'
URL: ''
Description: "Temperature"
Mu:
DisplayName: 'μ'
Type: 'Quantity'
Units: 'Pa'
URL: ''
Description: "μ [FreeCAD Pressure unit]"
LambdaM:
DisplayName: 'λm'
Type: 'Float'
Units: ''
URL: ''
Description: "λm"
D:
Type: 'Quantity'
Units: '1/Pa'
URL: ''
Description: "D [1/FreeCAD Pressure unit]"
URL: ''
Description: >
2 Dimensional array showing Arruda-Boyce properties as
a function of temperature

View File

@@ -0,0 +1,59 @@
---
# ***************************************************************************
# * *
# * Copyright (c) 2023 David Carter <dcarter@davidcarter.ca> *
# * *
# * This program is free software; you can redistribute it and/or modify *
# * it under the terms of the GNU Lesser General Public License (LGPL) *
# * as published by the Free Software Foundation; either version 2 of *
# * the License, or (at your option) any later version. *
# * for detail see the LICENCE text file. *
# * *
# * This program is distributed in the hope that it will be useful, *
# * but WITHOUT ANY WARRANTY; without even the implied warranty of *
# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
# * GNU Library General Public License for more details. *
# * *
# * You should have received a copy of the GNU Library General Public *
# * License along with this program; if not, write to the Free Software *
# * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
# * USA *
# * *
# ***************************************************************************
Model:
Name: 'MooneyRivlin'
UUID: 'beeed169-7770-4da0-ab67-c9172cf7d23d'
URL: 'http://www.dhondt.de/ccx_2.21.pdf'
Description: >
A hyperelastic material model where the strain energy density function
W is a linear combination of two invariants of the left CauchyGreen
deformation tensor B
MooneyRivlin:
DisplayName: "Mooney-Rivlin"
Type: '2DArray'
Columns:
Temperature:
Type: 'Quantity'
Units: 'C'
URL: ''
Description: ""
C10:
Type: 'Quantity'
Units: 'Pa'
URL: ''
Description: ""
C01:
Type: 'Quantity'
Units: 'Pa'
URL: ''
Description: ""
D1:
Type: 'Quantity'
Units: '1/Pa'
URL: ''
Description: "D [1/FreeCAD Pressure unit]"
URL: ''
Description: >
2 Dimensional array showing Mooney-Rivlin properties as
a function of temperature

View File

@@ -0,0 +1,54 @@
---
# ***************************************************************************
# * *
# * Copyright (c) 2023 David Carter <dcarter@davidcarter.ca> *
# * *
# * This program is free software; you can redistribute it and/or modify *
# * it under the terms of the GNU Lesser General Public License (LGPL) *
# * as published by the Free Software Foundation; either version 2 of *
# * the License, or (at your option) any later version. *
# * for detail see the LICENCE text file. *
# * *
# * This program is distributed in the hope that it will be useful, *
# * but WITHOUT ANY WARRANTY; without even the implied warranty of *
# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
# * GNU Library General Public License for more details. *
# * *
# * You should have received a copy of the GNU Library General Public *
# * License along with this program; if not, write to the Free Software *
# * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
# * USA *
# * *
# ***************************************************************************
Model:
Name: 'NeoHooke'
UUID: '569ebc58-ef29-434a-83be-555a0980d505'
URL: 'http://www.dhondt.de/ccx_2.21.pdf'
Description: >
A neo-Hookean solid is a hyperelastic material model, similar to
Hooke's law, that can be used for predicting the nonlinear stress-strain
behavior of materials undergoing large deformations.
NeoHooke:
DisplayName: "neo-Hooke"
Type: '2DArray'
Columns:
Temperature:
Type: 'Quantity'
Units: 'C'
URL: ''
Description: ""
C10:
Type: 'Quantity'
Units: 'Pa'
URL: ''
Description: ""
D1:
Type: 'Quantity'
Units: '1/Pa'
URL: ''
Description: "D [1/FreeCAD Pressure unit]"
URL: ''
Description: >
2 Dimensional array showing neo-Hooke properties as
a function of temperature

View File

@@ -0,0 +1,61 @@
---
# ***************************************************************************
# * *
# * Copyright (c) 2023 David Carter <dcarter@davidcarter.ca> *
# * *
# * This program is free software; you can redistribute it and/or modify *
# * it under the terms of the GNU Lesser General Public License (LGPL) *
# * as published by the Free Software Foundation; either version 2 of *
# * the License, or (at your option) any later version. *
# * for detail see the LICENCE text file. *
# * *
# * This program is distributed in the hope that it will be useful, *
# * but WITHOUT ANY WARRANTY; without even the implied warranty of *
# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
# * GNU Library General Public License for more details. *
# * *
# * You should have received a copy of the GNU Library General Public *
# * License along with this program; if not, write to the Free Software *
# * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
# * USA *
# * *
# ***************************************************************************
Model:
Name: 'OgdenN1'
UUID: 'a2634a2c-412f-468d-9bec-74ae5d87a9c0'
URL: 'http://www.dhondt.de/ccx_2.21.pdf'
Description: >
The Ogden material model is a hyperelastic material model used to
describe the non-linear stressstrain behaviour of complex materials
such as rubbers, polymers, and biological tissue.
OgdenN1:
DisplayName: "Ogden N=1"
Type: '2DArray'
Columns:
Temperature:
Type: 'Quantity'
Units: 'C'
URL: ''
Description: "Temperature"
Mu1:
DisplayName: 'μ1'
Type: 'Quantity'
Units: 'Pa'
URL: ''
Description: "μ1 [FreeCAD Pressure unit]"
Alpha1:
DisplayName: 'α1'
Type: 'Float'
Units: ''
URL: ''
Description: "α1"
D1:
Type: 'Quantity'
Units: '1/Pa'
URL: ''
Description: "D1 [1/FreeCAD Pressure unit]"
URL: ''
Description: >
2 Dimensional array showing Ogden N=1 properties as
a function of temperature

View File

@@ -0,0 +1,78 @@
---
# ***************************************************************************
# * *
# * Copyright (c) 2023 David Carter <dcarter@davidcarter.ca> *
# * *
# * This program is free software; you can redistribute it and/or modify *
# * it under the terms of the GNU Lesser General Public License (LGPL) *
# * as published by the Free Software Foundation; either version 2 of *
# * the License, or (at your option) any later version. *
# * for detail see the LICENCE text file. *
# * *
# * This program is distributed in the hope that it will be useful, *
# * but WITHOUT ANY WARRANTY; without even the implied warranty of *
# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
# * GNU Library General Public License for more details. *
# * *
# * You should have received a copy of the GNU Library General Public *
# * License along with this program; if not, write to the Free Software *
# * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
# * USA *
# * *
# ***************************************************************************
Model:
Name: 'OgdenN2'
UUID: '233540bb-7b13-4f49-ac12-126a5c82cedf'
URL: 'http://www.dhondt.de/ccx_2.21.pdf'
Description: >
The Ogden material model is a hyperelastic material model used to
describe the non-linear stressstrain behaviour of complex materials
such as rubbers, polymers, and biological tissue.
OgdenN2:
DisplayName: "Ogden N=2"
Type: '2DArray'
Columns:
Temperature:
Type: 'Quantity'
Units: 'C'
URL: ''
Description: "Temperature"
Mu1:
DisplayName: 'μ1'
Type: 'Quantity'
Units: 'Pa'
URL: ''
Description: "μ1 [FreeCAD Pressure unit]"
Mu2:
DisplayName: 'μ2'
Type: 'Quantity'
Units: 'Pa'
URL: ''
Description: "μ2 [FreeCAD Pressure unit]"
Alpha1:
DisplayName: 'α1'
Type: 'Float'
Units: ''
URL: ''
Description: "α1"
Alpha2:
DisplayName: 'α2'
Type: 'Float'
Units: ''
URL: ''
Description: "α2"
D1:
Type: 'Quantity'
Units: '1/Pa'
URL: ''
Description: "D1 [1/FreeCAD Pressure unit]"
D2:
Type: 'Quantity'
Units: '1/Pa'
URL: ''
Description: "D2 [1/FreeCAD Pressure unit]"
URL: ''
Description: >
2 Dimensional array showing Ogden N=2 properties as
a function of temperature

View File

@@ -0,0 +1,95 @@
---
# ***************************************************************************
# * *
# * Copyright (c) 2023 David Carter <dcarter@davidcarter.ca> *
# * *
# * This program is free software; you can redistribute it and/or modify *
# * it under the terms of the GNU Lesser General Public License (LGPL) *
# * as published by the Free Software Foundation; either version 2 of *
# * the License, or (at your option) any later version. *
# * for detail see the LICENCE text file. *
# * *
# * This program is distributed in the hope that it will be useful, *
# * but WITHOUT ANY WARRANTY; without even the implied warranty of *
# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
# * GNU Library General Public License for more details. *
# * *
# * You should have received a copy of the GNU Library General Public *
# * License along with this program; if not, write to the Free Software *
# * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
# * USA *
# * *
# ***************************************************************************
Model:
Name: 'OgdenN3'
UUID: 'a917d6b8-209f-429e-9972-fe4bbb97af3f'
URL: 'http://www.dhondt.de/ccx_2.21.pdf'
Description: >
The Ogden material model is a hyperelastic material model used to
describe the non-linear stressstrain behaviour of complex materials
such as rubbers, polymers, and biological tissue.
OgdenN3:
DisplayName: "Ogden N=3"
Type: '2DArray'
Columns:
Temperature:
Type: 'Quantity'
Units: 'C'
URL: ''
Description: "Temperature"
Mu1:
DisplayName: 'μ1'
Type: 'Quantity'
Units: 'Pa'
URL: ''
Description: "μ1 [FreeCAD Pressure unit]"
Mu2:
DisplayName: 'μ2'
Type: 'Quantity'
Units: 'Pa'
URL: ''
Description: "μ2 [FreeCAD Pressure unit]"
Mu3:
DisplayName: 'μ3'
Type: 'Quantity'
Units: 'Pa'
URL: ''
Description: "μ1 [FreeCAD Pressure unit]"
Alpha1:
DisplayName: 'α1'
Type: 'Float'
Units: ''
URL: ''
Description: "α1"
Alpha2:
DisplayName: 'α2'
Type: 'Float'
Units: ''
URL: ''
Description: "α2"
Alpha3:
DisplayName: 'α3'
Type: 'Float'
Units: ''
URL: ''
Description: "α3"
D1:
Type: 'Quantity'
Units: '1/Pa'
URL: ''
Description: "D1 [1/FreeCAD Pressure unit]"
D2:
Type: 'Quantity'
Units: '1/Pa'
URL: ''
Description: "D2 [1/FreeCAD Pressure unit]"
D3:
Type: 'Quantity'
Units: '1/Pa'
URL: ''
Description: "D3 [1/FreeCAD Pressure unit]"
URL: ''
Description: >
2 Dimensional array showing Ogden N=3 properties as
a function of temperature

View File

@@ -0,0 +1,58 @@
---
# ***************************************************************************
# * *
# * Copyright (c) 2023 David Carter <dcarter@davidcarter.ca> *
# * *
# * This program is free software; you can redistribute it and/or modify *
# * it under the terms of the GNU Lesser General Public License (LGPL) *
# * as published by the Free Software Foundation; either version 2 of *
# * the License, or (at your option) any later version. *
# * for detail see the LICENCE text file. *
# * *
# * This program is distributed in the hope that it will be useful, *
# * but WITHOUT ANY WARRANTY; without even the implied warranty of *
# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
# * GNU Library General Public License for more details. *
# * *
# * You should have received a copy of the GNU Library General Public *
# * License along with this program; if not, write to the Free Software *
# * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
# * USA *
# * *
# ***************************************************************************
Model:
Name: 'PolynomialN1'
UUID: '285a6042-0f0c-4a36-a898-4afadd6408ce'
URL: 'http://www.dhondt.de/ccx_2.21.pdf'
Description: >
The polynomial hyperelastic material model is a phenomenological model
of rubber elasticity.
PolynomialN1:
DisplayName: "Polynomial N=1"
Type: '2DArray'
Columns:
Temperature:
Type: 'Quantity'
Units: 'C'
URL: ''
Description: ""
C10:
Type: 'Quantity'
Units: 'Pa'
URL: ''
Description: ""
C01:
Type: 'Quantity'
Units: 'Pa'
URL: ''
Description: ""
D1:
Type: 'Quantity'
Units: '1/Pa'
URL: ''
Description: "D [1/FreeCAD Pressure unit]"
URL: ''
Description: >
2 Dimensional array showing Polynomial N=1 properties as
a function of temperature

View File

@@ -0,0 +1,78 @@
---
# ***************************************************************************
# * *
# * Copyright (c) 2023 David Carter <dcarter@davidcarter.ca> *
# * *
# * This program is free software; you can redistribute it and/or modify *
# * it under the terms of the GNU Lesser General Public License (LGPL) *
# * as published by the Free Software Foundation; either version 2 of *
# * the License, or (at your option) any later version. *
# * for detail see the LICENCE text file. *
# * *
# * This program is distributed in the hope that it will be useful, *
# * but WITHOUT ANY WARRANTY; without even the implied warranty of *
# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
# * GNU Library General Public License for more details. *
# * *
# * You should have received a copy of the GNU Library General Public *
# * License along with this program; if not, write to the Free Software *
# * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
# * USA *
# * *
# ***************************************************************************
Model:
Name: 'PolynomialN2'
UUID: '4c2fb7b2-5121-4d6f-be0d-8c5970c9e682'
URL: 'http://www.dhondt.de/ccx_2.21.pdf'
Description: >
The polynomial hyperelastic material model is a phenomenological model
of rubber elasticity.
PolynomialN2:
DisplayName: "Polynomial N=2"
Type: '2DArray'
Columns:
Temperature:
Type: 'Quantity'
Units: 'C'
URL: ''
Description: ""
C10:
Type: 'Quantity'
Units: 'Pa'
URL: ''
Description: ""
C01:
Type: 'Quantity'
Units: 'Pa'
URL: ''
Description: ""
C20:
Type: 'Quantity'
Units: 'Pa'
URL: ''
Description: ""
C11:
Type: 'Quantity'
Units: 'Pa'
URL: ''
Description: ""
C02:
Type: 'Quantity'
Units: 'Pa'
URL: ''
Description: ""
D1:
Type: 'Quantity'
Units: '1/Pa'
URL: ''
Description: "D1 [1/FreeCAD Pressure unit]"
D2:
Type: 'Quantity'
Units: '1/Pa'
URL: ''
Description: "D2 [1/FreeCAD Pressure unit]"
URL: ''
Description: >
2 Dimensional array showing Polynomial N=2 properties as
a function of temperature

View File

@@ -0,0 +1,103 @@
---
# ***************************************************************************
# * *
# * Copyright (c) 2023 David Carter <dcarter@davidcarter.ca> *
# * *
# * This program is free software; you can redistribute it and/or modify *
# * it under the terms of the GNU Lesser General Public License (LGPL) *
# * as published by the Free Software Foundation; either version 2 of *
# * the License, or (at your option) any later version. *
# * for detail see the LICENCE text file. *
# * *
# * This program is distributed in the hope that it will be useful, *
# * but WITHOUT ANY WARRANTY; without even the implied warranty of *
# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
# * GNU Library General Public License for more details. *
# * *
# * You should have received a copy of the GNU Library General Public *
# * License along with this program; if not, write to the Free Software *
# * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
# * USA *
# * *
# ***************************************************************************
Model:
Name: 'PolynomialN3'
UUID: 'e83ada22-947e-4beb-91e7-482a16f5ba77'
URL: 'http://www.dhondt.de/ccx_2.21.pdf'
Description: >
The polynomial hyperelastic material model is a phenomenological model
of rubber elasticity.
PolynomialN3:
DisplayName: "Polynomial N=3"
Type: '2DArray'
Columns:
Temperature:
Type: 'Quantity'
Units: 'C'
URL: ''
Description: ""
C10:
Type: 'Quantity'
Units: 'Pa'
URL: ''
Description: ""
C01:
Type: 'Quantity'
Units: 'Pa'
URL: ''
Description: ""
C20:
Type: 'Quantity'
Units: 'Pa'
URL: ''
Description: ""
C11:
Type: 'Quantity'
Units: 'Pa'
URL: ''
Description: ""
C02:
Type: 'Quantity'
Units: 'Pa'
URL: ''
Description: ""
C30:
Type: 'Quantity'
Units: 'Pa'
URL: ''
Description: ""
C21:
Type: 'Quantity'
Units: 'Pa'
URL: ''
Description: ""
C12:
Type: 'Quantity'
Units: 'Pa'
URL: ''
Description: ""
C03:
Type: 'Quantity'
Units: 'Pa'
URL: ''
Description: ""
D1:
Type: 'Quantity'
Units: '1/Pa'
URL: ''
Description: "D1 [1/FreeCAD Pressure unit]"
D2:
Type: 'Quantity'
Units: '1/Pa'
URL: ''
Description: "D2 [1/FreeCAD Pressure unit]"
D3:
Type: 'Quantity'
Units: '1/Pa'
URL: ''
Description: "D3 [1/FreeCAD Pressure unit]"
URL: ''
Description: >
2 Dimensional array showing Polynomial N=3 properties as
a function of temperature

View File

@@ -0,0 +1,53 @@
---
# ***************************************************************************
# * *
# * Copyright (c) 2023 David Carter <dcarter@davidcarter.ca> *
# * *
# * This program is free software; you can redistribute it and/or modify *
# * it under the terms of the GNU Lesser General Public License (LGPL) *
# * as published by the Free Software Foundation; either version 2 of *
# * the License, or (at your option) any later version. *
# * for detail see the LICENCE text file. *
# * *
# * This program is distributed in the hope that it will be useful, *
# * but WITHOUT ANY WARRANTY; without even the implied warranty of *
# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
# * GNU Library General Public License for more details. *
# * *
# * You should have received a copy of the GNU Library General Public *
# * License along with this program; if not, write to the Free Software *
# * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
# * USA *
# * *
# ***************************************************************************
Model:
Name: 'ReducdedPolynomialN1'
UUID: 'f8052a3c-db17-42ea-b2be-13aa5ef30730'
URL: 'http://www.dhondt.de/ccx_2.21.pdf'
Description: >
The polynomial hyperelastic material model is a phenomenological model
of rubber elasticity.
ReducdedPolynomialN1:
DisplayName: "Reduced Polynomial N=1"
Type: '2DArray'
Columns:
Temperature:
Type: 'Quantity'
Units: 'C'
URL: ''
Description: ""
C10:
Type: 'Quantity'
Units: 'Pa'
URL: ''
Description: ""
D1:
Type: 'Quantity'
Units: '1/Pa'
URL: ''
Description: "D1 [1/FreeCAD Pressure unit]"
URL: ''
Description: >
2 Dimensional array showing Reduced Polynomial N=1 properties as
a function of temperature

View File

@@ -0,0 +1,63 @@
---
# ***************************************************************************
# * *
# * Copyright (c) 2023 David Carter <dcarter@davidcarter.ca> *
# * *
# * This program is free software; you can redistribute it and/or modify *
# * it under the terms of the GNU Lesser General Public License (LGPL) *
# * as published by the Free Software Foundation; either version 2 of *
# * the License, or (at your option) any later version. *
# * for detail see the LICENCE text file. *
# * *
# * This program is distributed in the hope that it will be useful, *
# * but WITHOUT ANY WARRANTY; without even the implied warranty of *
# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
# * GNU Library General Public License for more details. *
# * *
# * You should have received a copy of the GNU Library General Public *
# * License along with this program; if not, write to the Free Software *
# * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
# * USA *
# * *
# ***************************************************************************
Model:
Name: 'ReducdedPolynomialN2'
UUID: 'c52b5021-4bb8-441c-80d4-855fce9de15e'
URL: 'http://www.dhondt.de/ccx_2.21.pdf'
Description: >
The polynomial hyperelastic material model is a phenomenological model
of rubber elasticity.
ReducdedPolynomialN2:
DisplayName: "Reduced Polynomial N=2"
Type: '2DArray'
Columns:
Temperature:
Type: 'Quantity'
Units: 'C'
URL: ''
Description: ""
C10:
Type: 'Quantity'
Units: 'Pa'
URL: ''
Description: ""
C20:
Type: 'Quantity'
Units: 'Pa'
URL: ''
Description: ""
D1:
Type: 'Quantity'
Units: '1/Pa'
URL: ''
Description: "D1 [1/FreeCAD Pressure unit]"
D2:
Type: 'Quantity'
Units: '1/Pa'
URL: ''
Description: "D2 [1/FreeCAD Pressure unit]"
URL: ''
Description: >
2 Dimensional array showing Reduced Polynomial N=2 properties as
a function of temperature

View File

@@ -0,0 +1,73 @@
---
# ***************************************************************************
# * *
# * Copyright (c) 2023 David Carter <dcarter@davidcarter.ca> *
# * *
# * This program is free software; you can redistribute it and/or modify *
# * it under the terms of the GNU Lesser General Public License (LGPL) *
# * as published by the Free Software Foundation; either version 2 of *
# * the License, or (at your option) any later version. *
# * for detail see the LICENCE text file. *
# * *
# * This program is distributed in the hope that it will be useful, *
# * but WITHOUT ANY WARRANTY; without even the implied warranty of *
# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
# * GNU Library General Public License for more details. *
# * *
# * You should have received a copy of the GNU Library General Public *
# * License along with this program; if not, write to the Free Software *
# * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
# * USA *
# * *
# ***************************************************************************
Model:
Name: 'ReducdedPolynomialN3'
UUID: 'fa4e58b4-74c7-4292-8e79-7d5fd232fb55'
URL: 'http://www.dhondt.de/ccx_2.21.pdf'
Description: >
The polynomial hyperelastic material model is a phenomenological model
of rubber elasticity.
ReducdedPolynomialN3:
DisplayName: "Reduced Polynomial N=3"
Type: '2DArray'
Columns:
Temperature:
Type: 'Quantity'
Units: 'C'
URL: ''
Description: ""
C10:
Type: 'Quantity'
Units: 'Pa'
URL: ''
Description: ""
C20:
Type: 'Quantity'
Units: 'Pa'
URL: ''
Description: ""
C30:
Type: 'Quantity'
Units: 'Pa'
URL: ''
Description: ""
D1:
Type: 'Quantity'
Units: '1/Pa'
URL: ''
Description: "D1 [1/FreeCAD Pressure unit]"
D2:
Type: 'Quantity'
Units: '1/Pa'
URL: ''
Description: "D2 [1/FreeCAD Pressure unit]"
D3:
Type: 'Quantity'
Units: '1/Pa'
URL: ''
Description: "D3 [1/FreeCAD Pressure unit]"
URL: ''
Description: >
2 Dimensional array showing Reduced Polynomial N=3 properties as
a function of temperature

View File

@@ -0,0 +1,73 @@
---
# ***************************************************************************
# * *
# * Copyright (c) 2023 David Carter <dcarter@davidcarter.ca> *
# * *
# * This program is free software; you can redistribute it and/or modify *
# * it under the terms of the GNU Lesser General Public License (LGPL) *
# * as published by the Free Software Foundation; either version 2 of *
# * the License, or (at your option) any later version. *
# * for detail see the LICENCE text file. *
# * *
# * This program is distributed in the hope that it will be useful, *
# * but WITHOUT ANY WARRANTY; without even the implied warranty of *
# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
# * GNU Library General Public License for more details. *
# * *
# * You should have received a copy of the GNU Library General Public *
# * License along with this program; if not, write to the Free Software *
# * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
# * USA *
# * *
# ***************************************************************************
Model:
Name: 'Yeoh'
UUID: 'cd13c492-21a9-4578-8191-deec003e4c01'
URL: 'http://www.dhondt.de/ccx_2.21.pdf'
Description: >
The Yeoh hyperelastic material model is a phenomenological model for
the deformation of nearly incompressible, nonlinear elastic materials
such as rubber.
Yeoh:
Type: '2DArray'
Columns:
Temperature:
Type: 'Quantity'
Units: 'C'
URL: ''
Description: ""
C10:
Type: 'Quantity'
Units: 'Pa'
URL: ''
Description: ""
C20:
Type: 'Quantity'
Units: 'Pa'
URL: ''
Description: ""
C30:
Type: 'Quantity'
Units: 'Pa'
URL: ''
Description: ""
D1:
Type: 'Quantity'
Units: '1/Pa'
URL: ''
Description: "D1 [1/FreeCAD Pressure unit]"
D2:
Type: 'Quantity'
Units: '1/Pa'
URL: ''
Description: "D2 [1/FreeCAD Pressure unit]"
D3:
Type: 'Quantity'
Units: '1/Pa'
URL: ''
Description: "D3 [1/FreeCAD Pressure unit]"
URL: ''
Description: >
2 Dimensional array showing Yeoh properties as
a function of temperature

View File

@@ -49,17 +49,20 @@ protected:
{
// 2D Properties
modelProp = Materials::ModelProperty(QString::fromStdString("Density"), // Name
QString::fromStdString("D"), // Header
QString::fromStdString("2DArray"), // Type
QString::fromStdString(""), // Units
QString::fromStdString(""), // URL
QString::fromStdString("desc")); // Description
modelProp1 = Materials::ModelProperty(QString::fromStdString("Temperature"),
QString::fromStdString("T"),
QString::fromStdString("Quantity"),
QString::fromStdString("C"),
QString::fromStdString(""),
QString::fromStdString("desc1"));
modelProp2 = Materials::ModelProperty(
QString::fromStdString("Density"),
QString::fromStdString("D"),
QString::fromStdString("Quantity"),
QString::fromStdString("kg/m^3"),
QString::fromStdString("https://en.wikipedia.org/wiki/Density"),
@@ -70,23 +73,27 @@ protected:
// 3D properties
model3DProp = Materials::ModelProperty(
QString::fromStdString("StressStrain"), // Name
QString::fromStdString("3DArray"), // Type
QString::fromStdString(""), // Units
QString::fromStdString(""), // URL
QString::fromStdString("StressStrain"), // Name
QString::fromStdString("Stress / Strain"), // Header
QString::fromStdString("3DArray"), // Type
QString::fromStdString(""), // Units
QString::fromStdString(""), // URL
QString::fromStdString("3 Dimensional array showing stress and strain as a function of "
"temperature")); // Description
model3DProp1 = Materials::ModelProperty(QString::fromStdString("Temperature"),
QString::fromStdString("T"),
QString::fromStdString("Quantity"),
QString::fromStdString("C"),
QString::fromStdString(""),
QString::fromStdString("desc1"));
model3DProp2 = Materials::ModelProperty(QString::fromStdString("Stress"),
QString::fromStdString("Stress"),
QString::fromStdString("Quantity"),
QString::fromStdString("MPa"),
QString::fromStdString(""),
QString::fromStdString("desc2"));
model3DProp3 = Materials::ModelProperty(QString::fromStdString("Strain"),
QString::fromStdString("Strain"),
QString::fromStdString("Quantity"),
QString::fromStdString("MPa"),
QString::fromStdString(""),

View File

@@ -64,12 +64,14 @@ TEST_F(TestModelProperties, TestBasic)
QString::fromStdString("2"),
QString::fromStdString("3"),
QString::fromStdString("4"),
QString::fromStdString("5"));
QString::fromStdString("5"),
QString::fromStdString("6"));
EXPECT_EQ(prop.getName(), QString::fromStdString("1"));
EXPECT_EQ(prop.getPropertyType(), QString::fromStdString("2"));
EXPECT_EQ(prop.getUnits(), QString::fromStdString("3"));
EXPECT_EQ(prop.getURL(), QString::fromStdString("4"));
EXPECT_EQ(prop.getDescription(), QString::fromStdString("5"));
EXPECT_EQ(prop.getDisplayName(), QString::fromStdString("2"));
EXPECT_EQ(prop.getPropertyType(), QString::fromStdString("3"));
EXPECT_EQ(prop.getUnits(), QString::fromStdString("4"));
EXPECT_EQ(prop.getURL(), QString::fromStdString("5"));
EXPECT_EQ(prop.getDescription(), QString::fromStdString("6"));
EXPECT_TRUE(prop.getInheritance().isNull());
EXPECT_FALSE(prop.isInherited());
EXPECT_EQ(prop.columns(), 0);
@@ -85,17 +87,20 @@ TEST_F(TestModelProperties, TestAddColumns)
QString::fromStdString("2"),
QString::fromStdString("3"),
QString::fromStdString("4"),
QString::fromStdString("5"));
QString::fromStdString("5"),
QString::fromStdString("6"));
auto prop1 = Materials::ModelProperty(QString::fromStdString("10"),
QString::fromStdString("9"),
QString::fromStdString("8"),
QString::fromStdString("7"),
QString::fromStdString("6"));
QString::fromStdString("6"),
QString::fromStdString("5"));
auto prop2 = Materials::ModelProperty(QString::fromStdString("a"),
QString::fromStdString("b"),
QString::fromStdString("c"),
QString::fromStdString("d"),
QString::fromStdString("e"));
QString::fromStdString("e"),
QString::fromStdString("f"));
EXPECT_EQ(prop.columns(), 0);
prop.addColumn(prop1);
@@ -106,20 +111,22 @@ TEST_F(TestModelProperties, TestAddColumns)
auto columns = prop.getColumns();
auto entry1 = columns.at(0);
EXPECT_EQ(entry1.getName(), QString::fromStdString("10"));
EXPECT_EQ(entry1.getPropertyType(), QString::fromStdString("9"));
EXPECT_EQ(entry1.getUnits(), QString::fromStdString("8"));
EXPECT_EQ(entry1.getURL(), QString::fromStdString("7"));
EXPECT_EQ(entry1.getDescription(), QString::fromStdString("6"));
EXPECT_EQ(entry1.getDisplayName(), QString::fromStdString("9"));
EXPECT_EQ(entry1.getPropertyType(), QString::fromStdString("8"));
EXPECT_EQ(entry1.getUnits(), QString::fromStdString("7"));
EXPECT_EQ(entry1.getURL(), QString::fromStdString("6"));
EXPECT_EQ(entry1.getDescription(), QString::fromStdString("5"));
EXPECT_TRUE(entry1.getInheritance().isNull());
EXPECT_FALSE(entry1.isInherited());
EXPECT_EQ(entry1.columns(), 0);
auto entry2 = columns.at(1);
EXPECT_EQ(entry2.getName(), QString::fromStdString("a"));
EXPECT_EQ(entry2.getPropertyType(), QString::fromStdString("b"));
EXPECT_EQ(entry2.getUnits(), QString::fromStdString("c"));
EXPECT_EQ(entry2.getURL(), QString::fromStdString("d"));
EXPECT_EQ(entry2.getDescription(), QString::fromStdString("e"));
EXPECT_EQ(entry2.getDisplayName(), QString::fromStdString("b"));
EXPECT_EQ(entry2.getPropertyType(), QString::fromStdString("c"));
EXPECT_EQ(entry2.getUnits(), QString::fromStdString("d"));
EXPECT_EQ(entry2.getURL(), QString::fromStdString("e"));
EXPECT_EQ(entry2.getDescription(), QString::fromStdString("f"));
EXPECT_TRUE(entry2.getInheritance().isNull());
EXPECT_FALSE(entry2.isInherited());
EXPECT_EQ(entry2.columns(), 0);