Fem: Add radiation heat transfer (#13466)
* FEM: Add radiation heat transfer * FEM: Add radiation heat transfer to CalculiX writer * FEM: Update .inp files * Fem: Rename heat flux ui members --------- Co-authored-by: FEA-eng <59876896+FEA-eng@users.noreply.github.com>
This commit is contained in:
@@ -62,13 +62,14 @@ TaskFemConstraintHeatflux::TaskFemConstraintHeatflux(
|
||||
&TaskFemConstraintHeatflux::onReferenceDeleted);
|
||||
|
||||
connect(ui->rb_convection, &QRadioButton::clicked, this, &TaskFemConstraintHeatflux::Conv);
|
||||
connect(ui->rb_radiation, &QRadioButton::clicked, this, &TaskFemConstraintHeatflux::Rad);
|
||||
connect(ui->rb_dflux, &QRadioButton::clicked, this, &TaskFemConstraintHeatflux::Flux);
|
||||
|
||||
connect(ui->if_heatflux,
|
||||
qOverload<double>(&InputField::valueChanged),
|
||||
this,
|
||||
&TaskFemConstraintHeatflux::onHeatFluxChanged);
|
||||
connect(ui->if_ambienttemp,
|
||||
connect(ui->if_ambienttemp_conv,
|
||||
qOverload<double>(&InputField::valueChanged),
|
||||
this,
|
||||
&TaskFemConstraintHeatflux::onAmbientTempChanged);
|
||||
@@ -76,6 +77,14 @@ TaskFemConstraintHeatflux::TaskFemConstraintHeatflux(
|
||||
qOverload<double>(&InputField::valueChanged),
|
||||
this,
|
||||
&TaskFemConstraintHeatflux::onFilmCoefChanged);
|
||||
connect(ui->if_emissivity,
|
||||
qOverload<double>(&InputField::valueChanged),
|
||||
this,
|
||||
&TaskFemConstraintHeatflux::onEmissivityChanged);
|
||||
connect(ui->if_ambienttemp_rad,
|
||||
qOverload<double>(&InputField::valueChanged),
|
||||
this,
|
||||
&TaskFemConstraintHeatflux::onAmbientTempChanged);
|
||||
connect(ui->lw_references,
|
||||
&QListWidget::itemClicked,
|
||||
this,
|
||||
@@ -84,9 +93,11 @@ TaskFemConstraintHeatflux::TaskFemConstraintHeatflux(
|
||||
this->groupLayout()->addWidget(proxy);
|
||||
|
||||
// Temporarily prevent unnecessary feature recomputes
|
||||
ui->if_ambienttemp->blockSignals(true);
|
||||
ui->if_ambienttemp_conv->blockSignals(true);
|
||||
// ui->if_facetemp->blockSignals(true);
|
||||
ui->if_filmcoef->blockSignals(true);
|
||||
ui->if_emissivity->blockSignals(true);
|
||||
ui->if_ambienttemp_rad->blockSignals(true);
|
||||
ui->lw_references->blockSignals(true);
|
||||
ui->btnAdd->blockSignals(true);
|
||||
ui->btnRemove->blockSignals(true);
|
||||
@@ -98,26 +109,41 @@ TaskFemConstraintHeatflux::TaskFemConstraintHeatflux(
|
||||
std::vector<std::string> SubElements = pcConstraint->References.getSubValues();
|
||||
|
||||
// Fill data into dialog elements
|
||||
ui->if_ambienttemp->setMinimum(0);
|
||||
ui->if_ambienttemp->setMaximum(FLOAT_MAX);
|
||||
ui->if_ambienttemp_conv->setMinimum(0);
|
||||
ui->if_ambienttemp_conv->setMaximum(FLOAT_MAX);
|
||||
|
||||
ui->if_filmcoef->setMinimum(0);
|
||||
ui->if_filmcoef->setMaximum(FLOAT_MAX);
|
||||
|
||||
ui->if_emissivity->setMinimum(0);
|
||||
ui->if_emissivity->setMaximum(FLOAT_MAX);
|
||||
|
||||
ui->if_ambienttemp_rad->setMinimum(0);
|
||||
ui->if_ambienttemp_rad->setMaximum(FLOAT_MAX);
|
||||
|
||||
std::string constraint_type = pcConstraint->ConstraintType.getValueAsString();
|
||||
if (constraint_type == "Convection") {
|
||||
ui->rb_convection->setChecked(true);
|
||||
ui->sw_heatflux->setCurrentIndex(0);
|
||||
Base::Quantity t =
|
||||
Base::Quantity(pcConstraint->AmbientTemp.getValue(), Base::Unit::Temperature);
|
||||
ui->if_ambienttemp->setValue(t);
|
||||
ui->if_ambienttemp_conv->setValue(t);
|
||||
Base::Quantity f = Base::Quantity(pcConstraint->FilmCoef.getValue(),
|
||||
Base::Unit::ThermalTransferCoefficient);
|
||||
ui->if_filmcoef->setValue(f);
|
||||
}
|
||||
else if (constraint_type == "Radiation") {
|
||||
ui->rb_radiation->setChecked(true);
|
||||
ui->sw_heatflux->setCurrentIndex(1);
|
||||
Base::Quantity t =
|
||||
Base::Quantity(pcConstraint->AmbientTemp.getValue(), Base::Unit::Temperature);
|
||||
ui->if_ambienttemp_rad->setValue(t);
|
||||
Base::Quantity e = Base::Quantity(pcConstraint->Emissivity.getValue(), Base::Unit());
|
||||
ui->if_emissivity->setValue(e);
|
||||
}
|
||||
else if (constraint_type == "DFlux") {
|
||||
ui->rb_dflux->setChecked(true);
|
||||
ui->sw_heatflux->setCurrentIndex(1);
|
||||
ui->sw_heatflux->setCurrentIndex(2);
|
||||
Base::Quantity c = Base::Quantity(pcConstraint->DFlux.getValue(), Base::Unit::HeatFlux);
|
||||
ui->if_heatflux->setValue(c);
|
||||
}
|
||||
@@ -134,9 +160,11 @@ TaskFemConstraintHeatflux::TaskFemConstraintHeatflux(
|
||||
buttonGroup->addButton(ui->btnAdd, (int)SelectionChangeModes::refAdd);
|
||||
buttonGroup->addButton(ui->btnRemove, (int)SelectionChangeModes::refRemove);
|
||||
|
||||
ui->if_ambienttemp->blockSignals(false);
|
||||
ui->if_ambienttemp_conv->blockSignals(false);
|
||||
// ui->if_facetemp->blockSignals(false);
|
||||
ui->if_filmcoef->blockSignals(false);
|
||||
ui->if_emissivity->blockSignals(false);
|
||||
ui->if_ambienttemp_rad->blockSignals(false);
|
||||
ui->lw_references->blockSignals(false);
|
||||
ui->btnAdd->blockSignals(false);
|
||||
ui->btnRemove->blockSignals(false);
|
||||
@@ -169,6 +197,13 @@ void TaskFemConstraintHeatflux::onFilmCoefChanged(double val)
|
||||
pcConstraint->FilmCoef.setValue(val); // [W]/[[m^2]/[K]]
|
||||
}
|
||||
|
||||
void TaskFemConstraintHeatflux::onEmissivityChanged(double val)
|
||||
{
|
||||
Fem::ConstraintHeatflux* pcConstraint =
|
||||
static_cast<Fem::ConstraintHeatflux*>(ConstraintView->getObject());
|
||||
pcConstraint->Emissivity.setValue(val); // [-]
|
||||
}
|
||||
|
||||
void TaskFemConstraintHeatflux::onHeatFluxChanged(double val)
|
||||
{
|
||||
Fem::ConstraintHeatflux* pcConstraint =
|
||||
@@ -186,7 +221,7 @@ void TaskFemConstraintHeatflux::Conv()
|
||||
name.c_str(),
|
||||
get_constraint_type().c_str());
|
||||
Base::Quantity t = Base::Quantity(300, Base::Unit::Temperature);
|
||||
ui->if_ambienttemp->setValue(t);
|
||||
ui->if_ambienttemp_conv->setValue(t);
|
||||
pcConstraint->AmbientTemp.setValue(300);
|
||||
Base::Quantity f = Base::Quantity(10, Base::Unit::ThermalTransferCoefficient);
|
||||
ui->if_filmcoef->setValue(f);
|
||||
@@ -194,6 +229,24 @@ void TaskFemConstraintHeatflux::Conv()
|
||||
ui->sw_heatflux->setCurrentIndex(0);
|
||||
}
|
||||
|
||||
void TaskFemConstraintHeatflux::Rad()
|
||||
{
|
||||
Fem::ConstraintHeatflux* pcConstraint =
|
||||
static_cast<Fem::ConstraintHeatflux*>(ConstraintView->getObject());
|
||||
std::string name = ConstraintView->getObject()->getNameInDocument();
|
||||
Gui::Command::doCommand(Gui::Command::Doc,
|
||||
"App.ActiveDocument.%s.ConstraintType = %s",
|
||||
name.c_str(),
|
||||
get_constraint_type().c_str());
|
||||
Base::Quantity t = Base::Quantity(300, Base::Unit::Temperature);
|
||||
ui->if_ambienttemp_rad->setValue(t);
|
||||
pcConstraint->AmbientTemp.setValue(300);
|
||||
Base::Quantity e = Base::Quantity(1, Base::Unit());
|
||||
ui->if_emissivity->setValue(e);
|
||||
pcConstraint->Emissivity.setValue(1);
|
||||
ui->sw_heatflux->setCurrentIndex(1);
|
||||
}
|
||||
|
||||
void TaskFemConstraintHeatflux::Flux()
|
||||
{
|
||||
Fem::ConstraintHeatflux* pcConstraint =
|
||||
@@ -206,7 +259,7 @@ void TaskFemConstraintHeatflux::Flux()
|
||||
Base::Quantity c = Base::Quantity(0, Base::Unit::HeatFlux);
|
||||
ui->if_heatflux->setValue(c);
|
||||
pcConstraint->DFlux.setValue(0);
|
||||
ui->sw_heatflux->setCurrentIndex(1);
|
||||
ui->sw_heatflux->setCurrentIndex(2);
|
||||
}
|
||||
|
||||
void TaskFemConstraintHeatflux::addToSelection()
|
||||
@@ -363,7 +416,13 @@ const std::string TaskFemConstraintHeatflux::getReferences() const
|
||||
|
||||
double TaskFemConstraintHeatflux::getAmbientTemp() const
|
||||
{
|
||||
Base::Quantity temperature = ui->if_ambienttemp->getQuantity();
|
||||
Base::Quantity temperature;
|
||||
if (ui->rb_convection->isChecked()) {
|
||||
temperature = ui->if_ambienttemp_conv->getQuantity();
|
||||
}
|
||||
else if (ui->rb_radiation->isChecked()) {
|
||||
temperature = ui->if_ambienttemp_rad->getQuantity();
|
||||
}
|
||||
double temperature_in_kelvin = temperature.getValueAs(Base::Quantity::Kelvin);
|
||||
return temperature_in_kelvin;
|
||||
}
|
||||
@@ -376,12 +435,22 @@ double TaskFemConstraintHeatflux::getFilmCoef() const
|
||||
return filmcoef_in_units;
|
||||
}
|
||||
|
||||
double TaskFemConstraintHeatflux::getEmissivity() const
|
||||
{
|
||||
Base::Quantity emissivity = ui->if_emissivity->getQuantity();
|
||||
double emissivity_in_units = emissivity.getValueAs(Base::Quantity(1.0, Base::Unit()));
|
||||
return emissivity_in_units;
|
||||
}
|
||||
|
||||
std::string TaskFemConstraintHeatflux::get_constraint_type() const
|
||||
{
|
||||
std::string type;
|
||||
if (ui->rb_convection->isChecked()) {
|
||||
type = "\"Convection\"";
|
||||
}
|
||||
else if (ui->rb_radiation->isChecked()) {
|
||||
type = "\"Radiation\"";
|
||||
}
|
||||
else if (ui->rb_dflux->isChecked()) {
|
||||
type = "\"DFlux\"";
|
||||
}
|
||||
@@ -397,11 +466,15 @@ void TaskFemConstraintHeatflux::changeEvent(QEvent* e)
|
||||
{
|
||||
TaskBox::changeEvent(e);
|
||||
if (e->type() == QEvent::LanguageChange) {
|
||||
ui->if_ambienttemp->blockSignals(true);
|
||||
ui->if_ambienttemp_conv->blockSignals(true);
|
||||
ui->if_filmcoef->blockSignals(true);
|
||||
ui->if_emissivity->blockSignals(true);
|
||||
ui->if_ambienttemp_rad->blockSignals(true);
|
||||
ui->retranslateUi(proxy);
|
||||
ui->if_ambienttemp->blockSignals(false);
|
||||
ui->if_ambienttemp_conv->blockSignals(false);
|
||||
ui->if_filmcoef->blockSignals(false);
|
||||
ui->if_emissivity->blockSignals(true);
|
||||
ui->if_ambienttemp_rad->blockSignals(false);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -465,6 +538,11 @@ bool TaskDlgFemConstraintHeatflux::accept()
|
||||
name.c_str(),
|
||||
parameterHeatflux->getFilmCoef());
|
||||
|
||||
Gui::Command::doCommand(Gui::Command::Doc,
|
||||
"App.ActiveDocument.%s.Emissivity = %f",
|
||||
name.c_str(),
|
||||
parameterHeatflux->getEmissivity());
|
||||
|
||||
scale = parameterHeatflux->getScale(); // OvG: determine modified scale
|
||||
Gui::Command::doCommand(Gui::Command::Doc,
|
||||
"App.ActiveDocument.%s.Scale = %s",
|
||||
|
||||
Reference in New Issue
Block a user