Skip to content

Commit 46249b6

Browse files
committed
Merge branch 'coupled_thermoelasticity' of github.com:Vaish-W/SU2 into coupled_thermoelasticity
Add nodal temperature integration in Compute_StiffMatrix
2 parents 323c27b + 9daea2e commit 46249b6

File tree

15 files changed

+140
-86
lines changed

15 files changed

+140
-86
lines changed

Common/include/CConfig.hpp

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1004,7 +1004,7 @@ class CConfig {
10041004
bool ExtraOutput; /*!< \brief Check if extra output need. */
10051005
bool Wall_Functions; /*!< \brief Use wall functions with the turbulence model */
10061006
long ExtraHeatOutputZone; /*!< \brief Heat solver zone with extra screen output */
1007-
bool DeadLoad; /*!< \brief Application of dead loads to the FE analysis */
1007+
bool CentrifugalForce; /*!< \brief Application of centrifugal forces to the FE analysis */
10081008
bool PseudoStatic; /*!< \brief Application of dead loads to the FE analysis */
10091009
bool SteadyRestart; /*!< \brief Restart from a steady state for FSI problems. */
10101010
su2double Newmark_beta, /*!< \brief Parameter alpha for Newmark method. */
@@ -8942,10 +8942,9 @@ class CConfig {
89428942
su2double GetAitkenDynMinInit(void) const { return AitkenDynMinInit; }
89438943

89448944
/*!
8945-
* \brief Decide whether to apply dead loads to the model.
8946-
* \return <code>TRUE</code> if the dead loads are to be applied, <code>FALSE</code> otherwise.
8945+
* \brief Decide whether to apply centrifugal forces to the model.
89478946
*/
8948-
bool GetDeadLoad(void) const { return DeadLoad; }
8947+
bool GetCentrifugalForce(void) const { return CentrifugalForce; }
89498948

89508949
/*!
89518950
* \brief Identifies if the mesh is matching or not (temporary, while implementing interpolation procedures).

Common/src/CConfig.cpp

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2507,11 +2507,11 @@ void CConfig::SetConfig_Options() {
25072507
addEnumOption("NONLINEAR_FEM_SOLUTION_METHOD", Kind_SpaceIteScheme_FEA, Space_Ite_Map_FEA, STRUCT_SPACE_ITE::NEWTON);
25082508
/* DESCRIPTION: Formulation for bidimensional elasticity solver */
25092509
addEnumOption("FORMULATION_ELASTICITY_2D", Kind_2DElasForm, ElasForm_2D, STRUCT_2DFORM::PLANE_STRAIN);
2510-
/* DESCRIPTION: Apply dead loads
2511-
* Options: NO, YES \ingroup Config */
2512-
addBoolOption("DEAD_LOAD", DeadLoad, false);
2510+
/* DESCRIPTION: Apply centrifugal forces
2511+
* Options: NO, YES \ingroup Config */
2512+
addBoolOption("CENTRIFUGAL_FORCE", CentrifugalForce, false);
25132513
/* DESCRIPTION: Temporary: pseudo static analysis (no density in dynamic analysis)
2514-
* Options: NO, YES \ingroup Config */
2514+
* Options: NO, YES \ingroup Config */
25152515
addBoolOption("PSEUDO_STATIC", PseudoStatic, false);
25162516
/* DESCRIPTION: Parameter alpha for Newmark scheme (s) */
25172517
addDoubleOption("NEWMARK_BETA", Newmark_beta, 0.25);
@@ -3070,6 +3070,8 @@ void CConfig::SetConfig_Parsing(istream& config_buffer){
30703070
newString.append("DYNAMIC_ANALYSIS is deprecated. Use TIME_DOMAIN instead.\n\n");
30713071
else if (!option_name.compare("SPECIES_USE_STRONG_BC"))
30723072
newString.append("SPECIES_USE_STRONG_BC is deprecated. Use MARKER_SPECIES_STRONG_BC= (marker1, ...) instead.\n\n");
3073+
else if (!option_name.compare("DEAD_LOAD"))
3074+
newString.append("DEAD_LOAD is deprecated. Use GRAVITY_FORCE or BODY_FORCE instead.\n\n");
30733075
else {
30743076
/*--- Find the most likely candidate for the unrecognized option, based on the length
30753077
of start and end character sequences shared by candidates and the option. ---*/

SU2_CFD/include/numerics/CNumerics.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1483,10 +1483,10 @@ class CNumerics {
14831483
inline virtual void Compute_Mass_Matrix(CElement *element_container, const CConfig* config) { }
14841484

14851485
/*!
1486-
* \brief A virtual member to compute the residual component due to dead loads
1486+
* \brief A virtual member to compute the residual component due to body forces.
14871487
* \param[in] element_container - Element structure for the particular element integrated.
14881488
*/
1489-
inline virtual void Compute_Dead_Load(CElement *element_container, const CConfig* config) { }
1489+
inline virtual void Compute_Body_Forces(CElement *element_container, const CConfig* config) { }
14901490

14911491
/*!
14921492
* \brief A virtual member to compute the averaged nodal stresses

SU2_CFD/include/numerics/elasticity/CFEAElasticity.hpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -159,11 +159,11 @@ class CFEAElasticity : public CNumerics {
159159
void Compute_Mass_Matrix(CElement *element_container, const CConfig *config) final;
160160

161161
/*!
162-
* \brief Compute the nodal gravity loads for an element.
163-
* \param[in,out] element_container - The element for which the dead loads are computed.
162+
* \brief Compute the nodal inertial loads for an element.
163+
* \param[in,out] element_container - The element for which the inertial loads are computed.
164164
* \param[in] config - Definition of the problem.
165165
*/
166-
void Compute_Dead_Load(CElement *element_container, const CConfig *config) final;
166+
void Compute_Body_Forces(CElement *element_container, const CConfig *config) final;
167167

168168
/*!
169169
* \brief Build the tangent stiffness matrix of an element.

SU2_CFD/include/solvers/CFEASolver.hpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,7 @@ class CFEASolver : public CFEASolverBase {
9999
bool element_based; /*!< \brief Bool to determine if an element-based file is used. */
100100
bool topol_filter_applied; /*!< \brief True if density filtering has been performed. */
101101
bool initial_calc = true; /*!< \brief Becomes false after first call to Preprocessing. */
102+
bool body_forces = false; /*!< \brief Whether any body force is active. */
102103

103104
/*!
104105
* \brief Pointer to the heat solver for coupled simulations.
@@ -352,14 +353,14 @@ class CFEASolver : public CFEASolverBase {
352353
const CConfig *config);
353354

354355
/*!
355-
* \brief Compute the dead loads.
356+
* \brief Compute the inertial loads.
356357
* \param[in] geometry - Geometrical definition of the problem.
357358
* \param[in] numerics - Description of the numerical method.
358359
* \param[in] config - Definition of the particular problem.
359360
*/
360-
void Compute_DeadLoad(CGeometry *geometry,
361-
CNumerics **numerics,
362-
const CConfig *config) final;
361+
void Compute_BodyForces(CGeometry *geometry,
362+
CNumerics **numerics,
363+
const CConfig *config) final;
363364

364365
/*!
365366
* \brief Clamped boundary conditions.

SU2_CFD/include/solvers/CSolver.hpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3645,9 +3645,9 @@ class CSolver {
36453645
* \param[in] numerics - Description of the numerical method.
36463646
* \param[in] config - Definition of the particular problem.
36473647
*/
3648-
inline virtual void Compute_DeadLoad(CGeometry *geometry,
3649-
CNumerics **numerics,
3650-
const CConfig *config) { }
3648+
inline virtual void Compute_BodyForces(CGeometry *geometry,
3649+
CNumerics **numerics,
3650+
const CConfig *config) { }
36513651

36523652
/*!
36533653
* \brief A virtual member. Set the volumetric heat source

SU2_CFD/src/numerics/elasticity/CFEAElasticity.cpp

Lines changed: 39 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727

2828
#include "../../../include/numerics/elasticity/CFEAElasticity.hpp"
2929
#include "../../../../Common/include/parallelization/omp_structure.hpp"
30+
#include "../../../../Common/include/toolboxes/geometry_toolbox.hpp"
3031

3132

3233
CFEAElasticity::CFEAElasticity(unsigned short val_nDim, unsigned short val_nVar,
@@ -226,7 +227,11 @@ void CFEAElasticity::Compute_Mass_Matrix(CElement *element, const CConfig *confi
226227
}
227228

228229

229-
void CFEAElasticity::Compute_Dead_Load(CElement *element, const CConfig *config) {
230+
void CFEAElasticity::Compute_Body_Forces(CElement *element, const CConfig *config) {
231+
232+
const bool gravity = config->GetGravityForce();
233+
const bool body_force = config->GetBody_Force();
234+
const bool centrifugal = config->GetCentrifugalForce();
230235

231236
/*--- Initialize values for the material model considered ---*/
232237
SetElement_Properties(element, config);
@@ -237,13 +242,24 @@ void CFEAElasticity::Compute_Dead_Load(CElement *element, const CConfig *config)
237242
AD::SetPreaccIn(Rho_s_DL);
238243
element->SetPreaccIn_Coords(false);
239244

240-
/* -- Gravity directionality:
241-
* -- For 2D problems, we assume the direction for gravity is -y
242-
* -- For 3D problems, we assume the direction for gravity is -z
243-
*/
244-
su2double g_force[3] = {0.0,0.0,0.0};
245-
g_force[nDim - 1] = -STANDARD_GRAVITY;
245+
std::array<su2double, 3> acceleration{};
246+
if (gravity) {
247+
/*--- For 2D problems, we assume gravity is in the -y direction,
248+
* and for 3D problems in the -z direction. ---*/
249+
acceleration[nDim - 1] = -STANDARD_GRAVITY;
250+
} else if (body_force) {
251+
for (auto iDim = 0u; iDim < nDim; iDim++) {
252+
acceleration[iDim] = config->GetBody_Force_Vector()[iDim];
253+
}
254+
}
246255

256+
std::array<su2double, 3> center{}, omega{};
257+
if (centrifugal) {
258+
for (auto iDim = 0u; iDim < nDim; iDim++) {
259+
center[iDim] = config->GetMotion_Origin(iDim);
260+
omega[iDim] = config->GetRotation_Rate(iDim);
261+
}
262+
}
247263
element->ClearElement(); /*--- Restart the element to avoid adding over previous results. --*/
248264
element->ComputeGrad_Linear(); /*--- Need to compute the gradients to obtain the Jacobian. ---*/
249265

@@ -256,15 +272,26 @@ void CFEAElasticity::Compute_Dead_Load(CElement *element, const CConfig *config)
256272
/*--- The dead load is computed in the reference configuration ---*/
257273
const auto Jac_X = element->GetJ_X(iGauss);
258274

259-
for (auto iNode = 0; iNode < nNode; iNode++) {
275+
for (auto iNode = 0u; iNode < nNode; iNode++) {
260276
const auto Ni = element->GetNi(iNode,iGauss);
261277

262-
su2double FAux_Dead_Load[3] = {0.0,0.0,0.0};
278+
auto total_accel = acceleration;
279+
if (centrifugal) {
280+
/*--- For nonlinear this should probably use the current (deformed)
281+
* coordinates, but it should not make a big difference. ---*/
282+
std::array<su2double, 3> r{}, wr{}, w2r{};
283+
for (auto iDim = 0u; iDim < nDim; iDim++) {
284+
r[iDim] = element->GetRef_Coord(iNode, iDim) - center[iDim];
285+
}
286+
GeometryToolbox::CrossProduct(omega.data(), r.data(), wr.data());
287+
GeometryToolbox::CrossProduct(omega.data(), wr.data(), w2r.data());
288+
for (auto iDim = 0; iDim < 3; ++iDim) total_accel[iDim] -= w2r[iDim];
289+
}
290+
std::array<su2double, 3> force{};
263291
for (auto iDim = 0u; iDim < nDim; iDim++) {
264-
FAux_Dead_Load[iDim] = Weight * Ni * Jac_X * Rho_s_DL * g_force[iDim];
292+
force[iDim] = Weight * Ni * Jac_X * Rho_s_DL * total_accel[iDim];
265293
}
266-
element->Add_FDL_a(iNode, FAux_Dead_Load);
267-
294+
element->Add_FDL_a(iNode, force.data());
268295
}
269296

270297
}

SU2_CFD/src/output/CAdjElasticityOutput.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ void CAdjElasticityOutput::SetHistoryOutputFields(CConfig *config){
113113
if (config->GetTime_Domain() && !config->GetPseudoStatic()) {
114114
AddHistoryOutput("SENS_RHO_" + iVarS, "Sens[Rho" + iVarS + ']', ScreenOutputFormat::SCIENTIFIC, "SENSITIVITY", "d Objective / d Material density");
115115
}
116-
if (config->GetDeadLoad()) {
116+
if (config->GetGravityForce() || config->GetBody_Force() || config->GetCentrifugalForce()) {
117117
AddHistoryOutput("SENS_RHO_DL_" + iVarS, "Sens[RhoDL" + iVarS + ']', ScreenOutputFormat::SCIENTIFIC, "SENSITIVITY", "d Objective / d Dead load density");
118118
}
119119
}
@@ -151,7 +151,7 @@ inline void CAdjElasticityOutput::LoadHistoryData(CConfig *config, CGeometry *ge
151151
if (config->GetTime_Domain() && !config->GetPseudoStatic()) {
152152
SetHistoryOutputValue("SENS_RHO_" + iVarS, solver[ADJFEA_SOL]->GetTotal_Sens_Rho(iVar));
153153
}
154-
if (config->GetDeadLoad()) {
154+
if (config->GetGravityForce() || config->GetBody_Force() || config->GetCentrifugalForce()) {
155155
SetHistoryOutputValue("SENS_RHO_DL_" + iVarS, solver[ADJFEA_SOL]->GetTotal_Sens_Rho_DL(iVar));
156156
}
157157
}

SU2_CFD/src/solvers/CFEASolver.cpp

Lines changed: 7 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ CFEASolver::CFEASolver(LINEAR_SOLVER_MODE mesh_deform_mode) : CFEASolverBase(mes
5050

5151
CFEASolver::CFEASolver(CGeometry *geometry, CConfig *config) : CFEASolverBase(geometry, config) {
5252

53-
bool dynamic = (config->GetTime_Domain());
53+
bool dynamic = config->GetTime_Domain();
5454
config->SetDelta_UnstTimeND(config->GetDelta_UnstTime());
5555

5656
/*--- Test whether we consider dielectric elastomers ---*/
@@ -60,6 +60,7 @@ CFEASolver::CFEASolver(CGeometry *geometry, CConfig *config) : CFEASolverBase(ge
6060
element_based = false;
6161
topol_filter_applied = false;
6262
initial_calc = true;
63+
body_forces = config->GetGravityForce() || config->GetBody_Force() || config->GetCentrifugalForce();
6364

6465
/*--- Here is where we assign the kind of each element ---*/
6566

@@ -122,22 +123,15 @@ CFEASolver::CFEASolver(CGeometry *geometry, CConfig *config) : CFEASolverBase(ge
122123

123124
/*--- The length of the solution vector depends on whether the problem is static or dynamic ---*/
124125

125-
unsigned short nSolVar;
126126
string text_line, filename;
127127
ifstream restart_file;
128128

129-
if (dynamic) nSolVar = 3 * nVar;
130-
else nSolVar = nVar;
131-
132-
auto* SolInit = new su2double[nSolVar]();
133-
134129
/*--- Initialize from zero everywhere ---*/
135130

136-
nodes = new CFEABoundVariable(SolInit, nPoint, nDim, nVar, config);
131+
std::array<su2double, 3 * MAXNVAR> zeros{};
132+
nodes = new CFEABoundVariable(zeros.data(), nPoint, nDim, nVar, config);
137133
SetBaseClassPointerToNodes();
138134

139-
delete [] SolInit;
140-
141135
/*--- Set which points are vertices and allocate boundary data. ---*/
142136

143137
for (unsigned long iPoint = 0; iPoint < nPoint; iPoint++)
@@ -568,7 +562,6 @@ void CFEASolver::Preprocessing(CGeometry *geometry, CSolver **solver_container,
568562

569563
const bool dynamic = config->GetTime_Domain();
570564
const bool disc_adj_fem = (config->GetKind_Solver() == MAIN_SOLVER::DISC_ADJ_FEM);
571-
const bool body_forces = config->GetDeadLoad();
572565
const bool topology_mode = config->GetTopology_Optimization();
573566

574567
if (config->GetWeakly_Coupled_Heat()) {
@@ -607,7 +600,7 @@ void CFEASolver::Preprocessing(CGeometry *geometry, CSolver **solver_container,
607600
* Only initialized once, at the first iteration of the first time step.
608601
*/
609602
if (body_forces && (initial_calc || disc_adj_fem))
610-
Compute_DeadLoad(geometry, numerics, config);
603+
Compute_BodyForces(geometry, numerics, config);
611604

612605
/*--- Clear the linear system solution. ---*/
613606
SU2_OMP_PARALLEL
@@ -1424,7 +1417,7 @@ void CFEASolver::Compute_NodalStress(CGeometry *geometry, CNumerics **numerics,
14241417

14251418
}
14261419

1427-
void CFEASolver::Compute_DeadLoad(CGeometry *geometry, CNumerics **numerics, const CConfig *config) {
1420+
void CFEASolver::Compute_BodyForces(CGeometry *geometry, CNumerics **numerics, const CConfig *config) {
14281421

14291422
/*--- Start OpenMP parallel region. ---*/
14301423

@@ -1474,7 +1467,7 @@ void CFEASolver::Compute_DeadLoad(CGeometry *geometry, CNumerics **numerics, con
14741467
/*--- Set the properties of the element and compute its mass matrix. ---*/
14751468
element->Set_ElProperties(element_properties[iElem]);
14761469

1477-
numerics[FEA_TERM + thread*MAX_TERMS]->Compute_Dead_Load(element, config);
1470+
numerics[FEA_TERM + thread*MAX_TERMS]->Compute_Body_Forces(element, config);
14781471

14791472
/*--- Add contributions of this element to the mass matrix. ---*/
14801473
for (iNode = 0; iNode < nNodes; iNode++) {
@@ -2122,7 +2115,6 @@ void CFEASolver::ImplicitNewmark_Iteration(const CGeometry *geometry, CNumerics
21222115
const bool linear_analysis = (config->GetGeometricConditions() == STRUCT_DEFORMATION::SMALL);
21232116
const bool nonlinear_analysis = (config->GetGeometricConditions() == STRUCT_DEFORMATION::LARGE);
21242117
const bool newton_raphson = (config->GetKind_SpaceIteScheme_FEA() == STRUCT_SPACE_ITE::NEWTON);
2125-
const bool body_forces = config->GetDeadLoad();
21262118

21272119
/*--- For simplicity, no incremental loading is handled with increment of 1. ---*/
21282120
const su2double loadIncr = config->GetIncrementalLoad()? loadIncrement : su2double(1.0);
@@ -2310,7 +2302,6 @@ void CFEASolver::GeneralizedAlpha_Iteration(const CGeometry *geometry, CNumerics
23102302
const bool linear_analysis = (config->GetGeometricConditions() == STRUCT_DEFORMATION::SMALL);
23112303
const bool nonlinear_analysis = (config->GetGeometricConditions() == STRUCT_DEFORMATION::LARGE);
23122304
const bool newton_raphson = (config->GetKind_SpaceIteScheme_FEA() == STRUCT_SPACE_ITE::NEWTON);
2313-
const bool body_forces = config->GetDeadLoad();
23142305

23152306
/*--- Blend between previous and current timestep. ---*/
23162307
const su2double alpha_f = config->Get_Int_Coeffs(2);
@@ -2934,9 +2925,6 @@ void CFEASolver::Compute_OFVolFrac(CGeometry *geometry, const CConfig *config)
29342925

29352926
void CFEASolver::Compute_OFCompliance(CGeometry *geometry, const CConfig *config)
29362927
{
2937-
/*--- Types of loads to consider ---*/
2938-
const bool body_forces = config->GetDeadLoad();
2939-
29402928
/*--- If the loads are being applied incrementaly ---*/
29412929
const bool incremental_load = config->GetIncrementalLoad();
29422930

SU2_CFD/src/variables/CFEAVariable.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ CFEAVariable::CFEAVariable(const su2double *val_fea, unsigned long npoint, unsig
4646
* still work as expected for the primal solver). ---*/
4747

4848
const bool dynamic_analysis = config->GetTime_Domain();
49-
const bool body_forces = config->GetDeadLoad();
49+
const bool body_forces = config->GetGravityForce() || config->GetBody_Force() || config->GetCentrifugalForce();
5050
const bool prestretch_fem = config->GetPrestretch(); // Structure is prestretched
5151
const bool discrete_adjoint = config->GetDiscrete_Adjoint();
5252
const bool refgeom = config->GetRefGeom(); // Reference geometry needs to be stored

TestCases/disc_adj_fea/configAD_fem.cfg

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ RESTART_SOL= NO
1616

1717
ITER = 10
1818

19-
OBJECTIVE_FUNCTION = REFERENCE_GEOMETRY
19+
OBJECTIVE_FUNCTION = REFERENCE_GEOMETRY
2020
REFERENCE_GEOMETRY = YES
2121

2222
REFERENCE_GEOMETRY_FILENAME = reference_geometry.dat
@@ -39,7 +39,6 @@ MATERIAL_COMPRESSIBILITY= COMPRESSIBLE
3939
ELASTICITY_MODULUS=21000
4040
POISSON_RATIO=0.4
4141
MATERIAL_DENSITY=100
42-
DEAD_LOAD=NO
4342
FORMULATION_ELASTICITY_2D = PLANE_STRAIN
4443

4544
NONLINEAR_FEM_SOLUTION_METHOD = NEWTON_RAPHSON
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2+
% SU2 configuration file %
3+
% Case description: Spinning Cylinder %
4+
% Author: Pedro Gomes %
5+
% Institution: SU2 Foundation %
6+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7+
8+
SOLVER= ELASTICITY
9+
MATH_PROBLEM= DIRECT
10+
GEOMETRIC_CONDITIONS= SMALL_DEFORMATIONS
11+
MATERIAL_MODEL= LINEAR_ELASTIC
12+
13+
ELASTICITY_MODULUS= 2E11
14+
POISSON_RATIO= 0.3
15+
MATERIAL_DENSITY= 7854
16+
17+
MARKER_SYM= ( x_minus, per_1, per_2 )
18+
MARKER_PRESSURE= ( inner, 0, outer, 0, x_plus, 0 )
19+
20+
CENTRIFUGAL_FORCE= YES
21+
ROTATION_RATE= ( 1500, 0, 0 )
22+
MOTION_ORIGIN= ( 0, 0, 0 )
23+
24+
LINEAR_SOLVER= CONJUGATE_GRADIENT
25+
LINEAR_SOLVER_PREC= ILU
26+
LINEAR_SOLVER_ERROR= 1E-8
27+
LINEAR_SOLVER_ITER= 1000
28+
29+
SCREEN_OUTPUT= INNER_ITER, RMS_RES, LINSOL, VMS
30+
OUTPUT_WRT_FREQ= 1
31+
INNER_ITER= 1
32+
33+
MESH_FILENAME= cylinder.su2
34+

TestCases/parallel_regression.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1225,6 +1225,17 @@ def main():
12251225
statbeam3d.command = TestCase.Command(exec = "parallel_computation_fsi.py", param = "-f")
12261226
test_list.append(statbeam3d)
12271227

1228+
# Rotating cylinder, 3d
1229+
rotating_cylinder_fea = TestCase('rotating_cylinder_fea')
1230+
rotating_cylinder_fea.cfg_dir = "fea_fsi/rotating_cylinder"
1231+
rotating_cylinder_fea.cfg_file = "config.cfg"
1232+
rotating_cylinder_fea.test_iter = 0
1233+
# For a thin disk with the inner and outer radius of this geometry, from
1234+
# "Formulas for Stress, Strain, and Structural Matrices", 2nd Edition, figure 19-4,
1235+
# the maximum stress is 165.6MPa, we get a Von Misses stress very close to that.
1236+
rotating_cylinder_fea.test_vals = [-6.005467, -5.615543, -5.615527, 38, -8.126591, 1.6457e8]
1237+
test_list.append(rotating_cylinder_fea)
1238+
12281239
# Dynamic beam, 2d
12291240
dynbeam2d = TestCase('dynbeam2d')
12301241
dynbeam2d.cfg_dir = "fea_fsi/DynBeam_2d"

0 commit comments

Comments
 (0)