diff --git a/src/3rdParty/OndselSolver b/src/3rdParty/OndselSolver index 3952f45945..fe99ad2593 160000 --- a/src/3rdParty/OndselSolver +++ b/src/3rdParty/OndselSolver @@ -1 +1 @@ -Subproject commit 3952f459457e339a0987ad2b271f3823b67323e7 +Subproject commit fe99ad259391b8fd9390f919926aa3c8b6cde787 diff --git a/src/Mod/Material/App/Model.cpp b/src/Mod/Material/App/Model.cpp index 19a4ebb832..fddc67b9d2 100644 --- a/src/Mod/Material/App/Model.cpp +++ b/src/Mod/Material/App/Model.cpp @@ -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); } diff --git a/src/Mod/Material/App/Model.h b/src/Mod/Material/App/Model.h index fcf83efd47..5fe5888de0 100644 --- a/src/Mod/Material/App/Model.h +++ b/src/Mod/Material/App/Model.h @@ -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; diff --git a/src/Mod/Material/App/ModelLoader.cpp b/src/Mod/Material/App/ModelLoader.cpp index a24bea113a..595c3f0d85 100644 --- a/src/Mod/Material/App/ModelLoader.cpp +++ b/src/Mod/Material/App/ModelLoader.cpp @@ -254,6 +254,7 @@ void ModelLoader::addToTree(std::shared_ptr 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 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 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, diff --git a/src/Mod/Material/CMakeLists.txt b/src/Mod/Material/CMakeLists.txt index 58422a436a..4b53cdac99 100644 --- a/src/Mod/Material/CMakeLists.txt +++ b/src/Mod/Material/CMakeLists.txt @@ -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" diff --git a/src/Mod/Material/Gui/Array2D.cpp b/src/Mod/Material/Gui/Array2D.cpp index e2fc7d40f9..fd383ecf44 100644 --- a/src/Mod/Material/Gui/Array2D.cpp +++ b/src/Mod/Material/Gui/Array2D.cpp @@ -62,6 +62,7 @@ Array2D::Array2D(const QString& propertyName, if (_property) { _value = std::static_pointer_cast(_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(); diff --git a/src/Mod/Material/Gui/Array2D.h b/src/Mod/Material/Gui/Array2D.h index 0829a9565e..3372d85c56 100644 --- a/src/Mod/Material/Gui/Array2D.h +++ b/src/Mod/Material/Gui/Array2D.h @@ -68,7 +68,6 @@ private: QAction _deleteAction; - void setHeaders(QStandardItemModel* model); void setColumnWidths(QTableView* table); void setColumnDelegates(QTableView* table); void setupArray(); diff --git a/src/Mod/Material/Gui/ArrayModel.cpp b/src/Mod/Material/Gui/ArrayModel.cpp index 5d1dbdd57d..a6b7bac366 100644 --- a/src/Mod/Material/Gui/ArrayModel.cpp +++ b/src/Mod/Material/Gui/ArrayModel.cpp @@ -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 diff --git a/src/Mod/Material/Resources/Models/Mechanical/ArrudaBoyce.yml b/src/Mod/Material/Resources/Models/Mechanical/ArrudaBoyce.yml new file mode 100644 index 0000000000..1579bcec97 --- /dev/null +++ b/src/Mod/Material/Resources/Models/Mechanical/ArrudaBoyce.yml @@ -0,0 +1,60 @@ +--- +# *************************************************************************** +# * * +# * Copyright (c) 2023 David Carter * +# * * +# * 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 diff --git a/src/Mod/Material/Resources/Models/Mechanical/MooneyRivlin.yml b/src/Mod/Material/Resources/Models/Mechanical/MooneyRivlin.yml new file mode 100644 index 0000000000..461325f2f9 --- /dev/null +++ b/src/Mod/Material/Resources/Models/Mechanical/MooneyRivlin.yml @@ -0,0 +1,59 @@ +--- +# *************************************************************************** +# * * +# * Copyright (c) 2023 David Carter * +# * * +# * 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 Cauchy–Green + 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 diff --git a/src/Mod/Material/Resources/Models/Mechanical/NeoHooke.yml b/src/Mod/Material/Resources/Models/Mechanical/NeoHooke.yml new file mode 100644 index 0000000000..73a6f7f5eb --- /dev/null +++ b/src/Mod/Material/Resources/Models/Mechanical/NeoHooke.yml @@ -0,0 +1,54 @@ +--- +# *************************************************************************** +# * * +# * Copyright (c) 2023 David Carter * +# * * +# * 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 diff --git a/src/Mod/Material/Resources/Models/Mechanical/OgdenN1.yml b/src/Mod/Material/Resources/Models/Mechanical/OgdenN1.yml new file mode 100644 index 0000000000..a4ffd8b4fb --- /dev/null +++ b/src/Mod/Material/Resources/Models/Mechanical/OgdenN1.yml @@ -0,0 +1,61 @@ +--- +# *************************************************************************** +# * * +# * Copyright (c) 2023 David Carter * +# * * +# * 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 stress–strain 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 diff --git a/src/Mod/Material/Resources/Models/Mechanical/OgdenN2.yml b/src/Mod/Material/Resources/Models/Mechanical/OgdenN2.yml new file mode 100644 index 0000000000..de7a7b71fb --- /dev/null +++ b/src/Mod/Material/Resources/Models/Mechanical/OgdenN2.yml @@ -0,0 +1,78 @@ +--- +# *************************************************************************** +# * * +# * Copyright (c) 2023 David Carter * +# * * +# * 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 stress–strain 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 diff --git a/src/Mod/Material/Resources/Models/Mechanical/OgdenN3.yml b/src/Mod/Material/Resources/Models/Mechanical/OgdenN3.yml new file mode 100644 index 0000000000..da98a9763a --- /dev/null +++ b/src/Mod/Material/Resources/Models/Mechanical/OgdenN3.yml @@ -0,0 +1,95 @@ +--- +# *************************************************************************** +# * * +# * Copyright (c) 2023 David Carter * +# * * +# * 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 stress–strain 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 diff --git a/src/Mod/Material/Resources/Models/Mechanical/PolynomialN1.yml b/src/Mod/Material/Resources/Models/Mechanical/PolynomialN1.yml new file mode 100644 index 0000000000..8f4195636f --- /dev/null +++ b/src/Mod/Material/Resources/Models/Mechanical/PolynomialN1.yml @@ -0,0 +1,58 @@ +--- +# *************************************************************************** +# * * +# * Copyright (c) 2023 David Carter * +# * * +# * 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 diff --git a/src/Mod/Material/Resources/Models/Mechanical/PolynomialN2.yml b/src/Mod/Material/Resources/Models/Mechanical/PolynomialN2.yml new file mode 100644 index 0000000000..cd0fc72df0 --- /dev/null +++ b/src/Mod/Material/Resources/Models/Mechanical/PolynomialN2.yml @@ -0,0 +1,78 @@ +--- +# *************************************************************************** +# * * +# * Copyright (c) 2023 David Carter * +# * * +# * 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 diff --git a/src/Mod/Material/Resources/Models/Mechanical/PolynomialN3.yml b/src/Mod/Material/Resources/Models/Mechanical/PolynomialN3.yml new file mode 100644 index 0000000000..daa41b364a --- /dev/null +++ b/src/Mod/Material/Resources/Models/Mechanical/PolynomialN3.yml @@ -0,0 +1,103 @@ +--- +# *************************************************************************** +# * * +# * Copyright (c) 2023 David Carter * +# * * +# * 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 diff --git a/src/Mod/Material/Resources/Models/Mechanical/ReducedPolynomialN1.yml b/src/Mod/Material/Resources/Models/Mechanical/ReducedPolynomialN1.yml new file mode 100644 index 0000000000..d2e70cf1c5 --- /dev/null +++ b/src/Mod/Material/Resources/Models/Mechanical/ReducedPolynomialN1.yml @@ -0,0 +1,53 @@ +--- +# *************************************************************************** +# * * +# * Copyright (c) 2023 David Carter * +# * * +# * 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 diff --git a/src/Mod/Material/Resources/Models/Mechanical/ReducedPolynomialN2.yml b/src/Mod/Material/Resources/Models/Mechanical/ReducedPolynomialN2.yml new file mode 100644 index 0000000000..e98cdd6545 --- /dev/null +++ b/src/Mod/Material/Resources/Models/Mechanical/ReducedPolynomialN2.yml @@ -0,0 +1,63 @@ +--- +# *************************************************************************** +# * * +# * Copyright (c) 2023 David Carter * +# * * +# * 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 diff --git a/src/Mod/Material/Resources/Models/Mechanical/ReducedPolynomialN3.yml b/src/Mod/Material/Resources/Models/Mechanical/ReducedPolynomialN3.yml new file mode 100644 index 0000000000..85f9b34dc6 --- /dev/null +++ b/src/Mod/Material/Resources/Models/Mechanical/ReducedPolynomialN3.yml @@ -0,0 +1,73 @@ +--- +# *************************************************************************** +# * * +# * Copyright (c) 2023 David Carter * +# * * +# * 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 diff --git a/src/Mod/Material/Resources/Models/Mechanical/Yeoh.yml b/src/Mod/Material/Resources/Models/Mechanical/Yeoh.yml new file mode 100644 index 0000000000..803e97d4c2 --- /dev/null +++ b/src/Mod/Material/Resources/Models/Mechanical/Yeoh.yml @@ -0,0 +1,73 @@ +--- +# *************************************************************************** +# * * +# * Copyright (c) 2023 David Carter * +# * * +# * 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 diff --git a/tests/src/Mod/Material/App/TestMaterialProperties.cpp b/tests/src/Mod/Material/App/TestMaterialProperties.cpp index 804cc227fa..3dfac60b49 100644 --- a/tests/src/Mod/Material/App/TestMaterialProperties.cpp +++ b/tests/src/Mod/Material/App/TestMaterialProperties.cpp @@ -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(""), diff --git a/tests/src/Mod/Material/App/TestModelProperties.cpp b/tests/src/Mod/Material/App/TestModelProperties.cpp index c018608034..ab8190e1aa 100644 --- a/tests/src/Mod/Material/App/TestModelProperties.cpp +++ b/tests/src/Mod/Material/App/TestModelProperties.cpp @@ -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);