diff --git a/Common/include/CConfig.hpp b/Common/include/CConfig.hpp index d91a6011611..b5407e71eeb 100644 --- a/Common/include/CConfig.hpp +++ b/Common/include/CConfig.hpp @@ -1004,7 +1004,7 @@ class CConfig { bool ExtraOutput; /*!< \brief Check if extra output need. */ bool Wall_Functions; /*!< \brief Use wall functions with the turbulence model */ long ExtraHeatOutputZone; /*!< \brief Heat solver zone with extra screen output */ - bool DeadLoad; /*!< \brief Application of dead loads to the FE analysis */ + bool CentrifugalForce; /*!< \brief Application of centrifugal forces to the FE analysis */ bool PseudoStatic; /*!< \brief Application of dead loads to the FE analysis */ bool SteadyRestart; /*!< \brief Restart from a steady state for FSI problems. */ su2double Newmark_beta, /*!< \brief Parameter alpha for Newmark method. */ @@ -8942,10 +8942,9 @@ class CConfig { su2double GetAitkenDynMinInit(void) const { return AitkenDynMinInit; } /*! - * \brief Decide whether to apply dead loads to the model. - * \return TRUE if the dead loads are to be applied, FALSE otherwise. + * \brief Decide whether to apply centrifugal forces to the model. */ - bool GetDeadLoad(void) const { return DeadLoad; } + bool GetCentrifugalForce(void) const { return CentrifugalForce; } /*! * \brief Identifies if the mesh is matching or not (temporary, while implementing interpolation procedures). diff --git a/Common/src/CConfig.cpp b/Common/src/CConfig.cpp index ba2f975c699..757388c9cc8 100644 --- a/Common/src/CConfig.cpp +++ b/Common/src/CConfig.cpp @@ -2507,11 +2507,11 @@ void CConfig::SetConfig_Options() { addEnumOption("NONLINEAR_FEM_SOLUTION_METHOD", Kind_SpaceIteScheme_FEA, Space_Ite_Map_FEA, STRUCT_SPACE_ITE::NEWTON); /* DESCRIPTION: Formulation for bidimensional elasticity solver */ addEnumOption("FORMULATION_ELASTICITY_2D", Kind_2DElasForm, ElasForm_2D, STRUCT_2DFORM::PLANE_STRAIN); - /* DESCRIPTION: Apply dead loads - * Options: NO, YES \ingroup Config */ - addBoolOption("DEAD_LOAD", DeadLoad, false); + /* DESCRIPTION: Apply centrifugal forces + * Options: NO, YES \ingroup Config */ + addBoolOption("CENTRIFUGAL_FORCE", CentrifugalForce, false); /* DESCRIPTION: Temporary: pseudo static analysis (no density in dynamic analysis) - * Options: NO, YES \ingroup Config */ + * Options: NO, YES \ingroup Config */ addBoolOption("PSEUDO_STATIC", PseudoStatic, false); /* DESCRIPTION: Parameter alpha for Newmark scheme (s) */ addDoubleOption("NEWMARK_BETA", Newmark_beta, 0.25); @@ -3070,6 +3070,8 @@ void CConfig::SetConfig_Parsing(istream& config_buffer){ newString.append("DYNAMIC_ANALYSIS is deprecated. Use TIME_DOMAIN instead.\n\n"); else if (!option_name.compare("SPECIES_USE_STRONG_BC")) newString.append("SPECIES_USE_STRONG_BC is deprecated. Use MARKER_SPECIES_STRONG_BC= (marker1, ...) instead.\n\n"); + else if (!option_name.compare("DEAD_LOAD")) + newString.append("DEAD_LOAD is deprecated. Use GRAVITY_FORCE or BODY_FORCE instead.\n\n"); else { /*--- Find the most likely candidate for the unrecognized option, based on the length of start and end character sequences shared by candidates and the option. ---*/ diff --git a/SU2_CFD/include/numerics/CNumerics.hpp b/SU2_CFD/include/numerics/CNumerics.hpp index 535335947ca..2e45916edb1 100644 --- a/SU2_CFD/include/numerics/CNumerics.hpp +++ b/SU2_CFD/include/numerics/CNumerics.hpp @@ -1483,10 +1483,10 @@ class CNumerics { inline virtual void Compute_Mass_Matrix(CElement *element_container, const CConfig* config) { } /*! - * \brief A virtual member to compute the residual component due to dead loads + * \brief A virtual member to compute the residual component due to body forces. * \param[in] element_container - Element structure for the particular element integrated. */ - inline virtual void Compute_Dead_Load(CElement *element_container, const CConfig* config) { } + inline virtual void Compute_Body_Forces(CElement *element_container, const CConfig* config) { } /*! * \brief A virtual member to compute the averaged nodal stresses diff --git a/SU2_CFD/include/numerics/elasticity/CFEAElasticity.hpp b/SU2_CFD/include/numerics/elasticity/CFEAElasticity.hpp index bbaa805e046..a1395fdf130 100644 --- a/SU2_CFD/include/numerics/elasticity/CFEAElasticity.hpp +++ b/SU2_CFD/include/numerics/elasticity/CFEAElasticity.hpp @@ -159,11 +159,11 @@ class CFEAElasticity : public CNumerics { void Compute_Mass_Matrix(CElement *element_container, const CConfig *config) final; /*! - * \brief Compute the nodal gravity loads for an element. - * \param[in,out] element_container - The element for which the dead loads are computed. + * \brief Compute the nodal inertial loads for an element. + * \param[in,out] element_container - The element for which the inertial loads are computed. * \param[in] config - Definition of the problem. */ - void Compute_Dead_Load(CElement *element_container, const CConfig *config) final; + void Compute_Body_Forces(CElement *element_container, const CConfig *config) final; /*! * \brief Build the tangent stiffness matrix of an element. diff --git a/SU2_CFD/include/solvers/CFEASolver.hpp b/SU2_CFD/include/solvers/CFEASolver.hpp index 4d8bf74be8e..9442fa190d7 100644 --- a/SU2_CFD/include/solvers/CFEASolver.hpp +++ b/SU2_CFD/include/solvers/CFEASolver.hpp @@ -98,6 +98,7 @@ class CFEASolver : public CFEASolverBase { bool element_based; /*!< \brief Bool to determine if an element-based file is used. */ bool topol_filter_applied; /*!< \brief True if density filtering has been performed. */ bool initial_calc = true; /*!< \brief Becomes false after first call to Preprocessing. */ + bool body_forces = false; /*!< \brief Whether any body force is active. */ /*! * \brief The highest level in the variable hierarchy this solver can safely use, @@ -335,14 +336,14 @@ class CFEASolver : public CFEASolverBase { const CConfig *config); /*! - * \brief Compute the dead loads. + * \brief Compute the inertial loads. * \param[in] geometry - Geometrical definition of the problem. * \param[in] numerics - Description of the numerical method. * \param[in] config - Definition of the particular problem. */ - void Compute_DeadLoad(CGeometry *geometry, - CNumerics **numerics, - const CConfig *config) final; + void Compute_BodyForces(CGeometry *geometry, + CNumerics **numerics, + const CConfig *config) final; /*! * \brief Clamped boundary conditions. diff --git a/SU2_CFD/include/solvers/CSolver.hpp b/SU2_CFD/include/solvers/CSolver.hpp index b6c0d45d219..2ed78a78a9b 100644 --- a/SU2_CFD/include/solvers/CSolver.hpp +++ b/SU2_CFD/include/solvers/CSolver.hpp @@ -3645,9 +3645,9 @@ class CSolver { * \param[in] numerics - Description of the numerical method. * \param[in] config - Definition of the particular problem. */ - inline virtual void Compute_DeadLoad(CGeometry *geometry, - CNumerics **numerics, - const CConfig *config) { } + inline virtual void Compute_BodyForces(CGeometry *geometry, + CNumerics **numerics, + const CConfig *config) { } /*! * \brief A virtual member. Set the volumetric heat source diff --git a/SU2_CFD/src/numerics/elasticity/CFEAElasticity.cpp b/SU2_CFD/src/numerics/elasticity/CFEAElasticity.cpp index 73df569ff26..efe0e19a0b2 100644 --- a/SU2_CFD/src/numerics/elasticity/CFEAElasticity.cpp +++ b/SU2_CFD/src/numerics/elasticity/CFEAElasticity.cpp @@ -27,6 +27,7 @@ #include "../../../include/numerics/elasticity/CFEAElasticity.hpp" #include "../../../../Common/include/parallelization/omp_structure.hpp" +#include "../../../../Common/include/toolboxes/geometry_toolbox.hpp" CFEAElasticity::CFEAElasticity(unsigned short val_nDim, unsigned short val_nVar, @@ -226,7 +227,11 @@ void CFEAElasticity::Compute_Mass_Matrix(CElement *element, const CConfig *confi } -void CFEAElasticity::Compute_Dead_Load(CElement *element, const CConfig *config) { +void CFEAElasticity::Compute_Body_Forces(CElement *element, const CConfig *config) { + + const bool gravity = config->GetGravityForce(); + const bool body_force = config->GetBody_Force(); + const bool centrifugal = config->GetCentrifugalForce(); /*--- Initialize values for the material model considered ---*/ SetElement_Properties(element, config); @@ -237,13 +242,24 @@ void CFEAElasticity::Compute_Dead_Load(CElement *element, const CConfig *config) AD::SetPreaccIn(Rho_s_DL); element->SetPreaccIn_Coords(false); - /* -- Gravity directionality: - * -- For 2D problems, we assume the direction for gravity is -y - * -- For 3D problems, we assume the direction for gravity is -z - */ - su2double g_force[3] = {0.0,0.0,0.0}; - g_force[nDim - 1] = -STANDARD_GRAVITY; + std::array acceleration{}; + if (gravity) { + /*--- For 2D problems, we assume gravity is in the -y direction, + * and for 3D problems in the -z direction. ---*/ + acceleration[nDim - 1] = -STANDARD_GRAVITY; + } else if (body_force) { + for (auto iDim = 0u; iDim < nDim; iDim++) { + acceleration[iDim] = config->GetBody_Force_Vector()[iDim]; + } + } + std::array center{}, omega{}; + if (centrifugal) { + for (auto iDim = 0u; iDim < nDim; iDim++) { + center[iDim] = config->GetMotion_Origin(iDim); + omega[iDim] = config->GetRotation_Rate(iDim); + } + } element->ClearElement(); /*--- Restart the element to avoid adding over previous results. --*/ element->ComputeGrad_Linear(); /*--- Need to compute the gradients to obtain the Jacobian. ---*/ @@ -256,15 +272,26 @@ void CFEAElasticity::Compute_Dead_Load(CElement *element, const CConfig *config) /*--- The dead load is computed in the reference configuration ---*/ const auto Jac_X = element->GetJ_X(iGauss); - for (auto iNode = 0; iNode < nNode; iNode++) { + for (auto iNode = 0u; iNode < nNode; iNode++) { const auto Ni = element->GetNi(iNode,iGauss); - su2double FAux_Dead_Load[3] = {0.0,0.0,0.0}; + auto total_accel = acceleration; + if (centrifugal) { + /*--- For nonlinear this should probably use the current (deformed) + * coordinates, but it should not make a big difference. ---*/ + std::array r{}, wr{}, w2r{}; + for (auto iDim = 0u; iDim < nDim; iDim++) { + r[iDim] = element->GetRef_Coord(iNode, iDim) - center[iDim]; + } + GeometryToolbox::CrossProduct(omega.data(), r.data(), wr.data()); + GeometryToolbox::CrossProduct(omega.data(), wr.data(), w2r.data()); + for (auto iDim = 0; iDim < 3; ++iDim) total_accel[iDim] -= w2r[iDim]; + } + std::array force{}; for (auto iDim = 0u; iDim < nDim; iDim++) { - FAux_Dead_Load[iDim] = Weight * Ni * Jac_X * Rho_s_DL * g_force[iDim]; + force[iDim] = Weight * Ni * Jac_X * Rho_s_DL * total_accel[iDim]; } - element->Add_FDL_a(iNode, FAux_Dead_Load); - + element->Add_FDL_a(iNode, force.data()); } } diff --git a/SU2_CFD/src/output/CAdjElasticityOutput.cpp b/SU2_CFD/src/output/CAdjElasticityOutput.cpp index 7466b506d60..add084006ea 100644 --- a/SU2_CFD/src/output/CAdjElasticityOutput.cpp +++ b/SU2_CFD/src/output/CAdjElasticityOutput.cpp @@ -113,7 +113,7 @@ void CAdjElasticityOutput::SetHistoryOutputFields(CConfig *config){ if (config->GetTime_Domain() && !config->GetPseudoStatic()) { AddHistoryOutput("SENS_RHO_" + iVarS, "Sens[Rho" + iVarS + ']', ScreenOutputFormat::SCIENTIFIC, "SENSITIVITY", "d Objective / d Material density"); } - if (config->GetDeadLoad()) { + if (config->GetGravityForce() || config->GetBody_Force() || config->GetCentrifugalForce()) { AddHistoryOutput("SENS_RHO_DL_" + iVarS, "Sens[RhoDL" + iVarS + ']', ScreenOutputFormat::SCIENTIFIC, "SENSITIVITY", "d Objective / d Dead load density"); } } @@ -151,7 +151,7 @@ inline void CAdjElasticityOutput::LoadHistoryData(CConfig *config, CGeometry *ge if (config->GetTime_Domain() && !config->GetPseudoStatic()) { SetHistoryOutputValue("SENS_RHO_" + iVarS, solver[ADJFEA_SOL]->GetTotal_Sens_Rho(iVar)); } - if (config->GetDeadLoad()) { + if (config->GetGravityForce() || config->GetBody_Force() || config->GetCentrifugalForce()) { SetHistoryOutputValue("SENS_RHO_DL_" + iVarS, solver[ADJFEA_SOL]->GetTotal_Sens_Rho_DL(iVar)); } } diff --git a/SU2_CFD/src/solvers/CFEASolver.cpp b/SU2_CFD/src/solvers/CFEASolver.cpp index 44a19e1421a..23bad36a8a4 100644 --- a/SU2_CFD/src/solvers/CFEASolver.cpp +++ b/SU2_CFD/src/solvers/CFEASolver.cpp @@ -49,7 +49,7 @@ CFEASolver::CFEASolver(LINEAR_SOLVER_MODE mesh_deform_mode) : CFEASolverBase(mes CFEASolver::CFEASolver(CGeometry *geometry, CConfig *config) : CFEASolverBase(geometry, config) { - bool dynamic = (config->GetTime_Domain()); + bool dynamic = config->GetTime_Domain(); config->SetDelta_UnstTimeND(config->GetDelta_UnstTime()); /*--- Test whether we consider dielectric elastomers ---*/ @@ -59,6 +59,7 @@ CFEASolver::CFEASolver(CGeometry *geometry, CConfig *config) : CFEASolverBase(ge element_based = false; topol_filter_applied = false; initial_calc = true; + body_forces = config->GetGravityForce() || config->GetBody_Force() || config->GetCentrifugalForce(); /*--- Here is where we assign the kind of each element ---*/ @@ -121,22 +122,15 @@ CFEASolver::CFEASolver(CGeometry *geometry, CConfig *config) : CFEASolverBase(ge /*--- The length of the solution vector depends on whether the problem is static or dynamic ---*/ - unsigned short nSolVar; string text_line, filename; ifstream restart_file; - if (dynamic) nSolVar = 3 * nVar; - else nSolVar = nVar; - - auto* SolInit = new su2double[nSolVar](); - /*--- Initialize from zero everywhere ---*/ - nodes = new CFEABoundVariable(SolInit, nPoint, nDim, nVar, config); + std::array zeros{}; + nodes = new CFEABoundVariable(zeros.data(), nPoint, nDim, nVar, config); SetBaseClassPointerToNodes(); - delete [] SolInit; - /*--- Set which points are vertices and allocate boundary data. ---*/ for (unsigned long iPoint = 0; iPoint < nPoint; iPoint++) @@ -567,7 +561,6 @@ void CFEASolver::Preprocessing(CGeometry *geometry, CSolver **solver_container, const bool dynamic = config->GetTime_Domain(); const bool disc_adj_fem = (config->GetKind_Solver() == MAIN_SOLVER::DISC_ADJ_FEM); - const bool body_forces = config->GetDeadLoad(); const bool topology_mode = config->GetTopology_Optimization(); /* @@ -602,7 +595,7 @@ void CFEASolver::Preprocessing(CGeometry *geometry, CSolver **solver_container, * Only initialized once, at the first iteration of the first time step. */ if (body_forces && (initial_calc || disc_adj_fem)) - Compute_DeadLoad(geometry, numerics, config); + Compute_BodyForces(geometry, numerics, config); /*--- Clear the linear system solution. ---*/ SU2_OMP_PARALLEL @@ -1415,7 +1408,7 @@ void CFEASolver::Compute_NodalStress(CGeometry *geometry, CNumerics **numerics, } -void CFEASolver::Compute_DeadLoad(CGeometry *geometry, CNumerics **numerics, const CConfig *config) { +void CFEASolver::Compute_BodyForces(CGeometry *geometry, CNumerics **numerics, const CConfig *config) { /*--- Start OpenMP parallel region. ---*/ @@ -1465,7 +1458,7 @@ void CFEASolver::Compute_DeadLoad(CGeometry *geometry, CNumerics **numerics, con /*--- Set the properties of the element and compute its mass matrix. ---*/ element->Set_ElProperties(element_properties[iElem]); - numerics[FEA_TERM + thread*MAX_TERMS]->Compute_Dead_Load(element, config); + numerics[FEA_TERM + thread*MAX_TERMS]->Compute_Body_Forces(element, config); /*--- Add contributions of this element to the mass matrix. ---*/ for (iNode = 0; iNode < nNodes; iNode++) { @@ -2113,7 +2106,6 @@ void CFEASolver::ImplicitNewmark_Iteration(const CGeometry *geometry, CNumerics const bool linear_analysis = (config->GetGeometricConditions() == STRUCT_DEFORMATION::SMALL); const bool nonlinear_analysis = (config->GetGeometricConditions() == STRUCT_DEFORMATION::LARGE); const bool newton_raphson = (config->GetKind_SpaceIteScheme_FEA() == STRUCT_SPACE_ITE::NEWTON); - const bool body_forces = config->GetDeadLoad(); /*--- For simplicity, no incremental loading is handled with increment of 1. ---*/ const su2double loadIncr = config->GetIncrementalLoad()? loadIncrement : su2double(1.0); @@ -2301,7 +2293,6 @@ void CFEASolver::GeneralizedAlpha_Iteration(const CGeometry *geometry, CNumerics const bool linear_analysis = (config->GetGeometricConditions() == STRUCT_DEFORMATION::SMALL); const bool nonlinear_analysis = (config->GetGeometricConditions() == STRUCT_DEFORMATION::LARGE); const bool newton_raphson = (config->GetKind_SpaceIteScheme_FEA() == STRUCT_SPACE_ITE::NEWTON); - const bool body_forces = config->GetDeadLoad(); /*--- Blend between previous and current timestep. ---*/ const su2double alpha_f = config->Get_Int_Coeffs(2); @@ -2925,9 +2916,6 @@ void CFEASolver::Compute_OFVolFrac(CGeometry *geometry, const CConfig *config) void CFEASolver::Compute_OFCompliance(CGeometry *geometry, const CConfig *config) { - /*--- Types of loads to consider ---*/ - const bool body_forces = config->GetDeadLoad(); - /*--- If the loads are being applied incrementaly ---*/ const bool incremental_load = config->GetIncrementalLoad(); diff --git a/SU2_CFD/src/variables/CFEAVariable.cpp b/SU2_CFD/src/variables/CFEAVariable.cpp index 7e486af3a21..4760706a814 100644 --- a/SU2_CFD/src/variables/CFEAVariable.cpp +++ b/SU2_CFD/src/variables/CFEAVariable.cpp @@ -46,7 +46,7 @@ CFEAVariable::CFEAVariable(const su2double *val_fea, unsigned long npoint, unsig * still work as expected for the primal solver). ---*/ const bool dynamic_analysis = config->GetTime_Domain(); - const bool body_forces = config->GetDeadLoad(); + const bool body_forces = config->GetGravityForce() || config->GetBody_Force() || config->GetCentrifugalForce(); const bool prestretch_fem = config->GetPrestretch(); // Structure is prestretched const bool discrete_adjoint = config->GetDiscrete_Adjoint(); const bool refgeom = config->GetRefGeom(); // Reference geometry needs to be stored diff --git a/TestCases/disc_adj_fea/configAD_fem.cfg b/TestCases/disc_adj_fea/configAD_fem.cfg index 188c7e451bf..fe1d2c6c5b7 100644 --- a/TestCases/disc_adj_fea/configAD_fem.cfg +++ b/TestCases/disc_adj_fea/configAD_fem.cfg @@ -16,7 +16,7 @@ RESTART_SOL= NO ITER = 10 -OBJECTIVE_FUNCTION = REFERENCE_GEOMETRY +OBJECTIVE_FUNCTION = REFERENCE_GEOMETRY REFERENCE_GEOMETRY = YES REFERENCE_GEOMETRY_FILENAME = reference_geometry.dat @@ -39,7 +39,6 @@ MATERIAL_COMPRESSIBILITY= COMPRESSIBLE ELASTICITY_MODULUS=21000 POISSON_RATIO=0.4 MATERIAL_DENSITY=100 -DEAD_LOAD=NO FORMULATION_ELASTICITY_2D = PLANE_STRAIN NONLINEAR_FEM_SOLUTION_METHOD = NEWTON_RAPHSON diff --git a/TestCases/fea_fsi/rotating_cylinder/config.cfg b/TestCases/fea_fsi/rotating_cylinder/config.cfg new file mode 100644 index 00000000000..7a9d124da76 --- /dev/null +++ b/TestCases/fea_fsi/rotating_cylinder/config.cfg @@ -0,0 +1,34 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% SU2 configuration file % +% Case description: Spinning Cylinder % +% Author: Pedro Gomes % +% Institution: SU2 Foundation % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +SOLVER= ELASTICITY +MATH_PROBLEM= DIRECT +GEOMETRIC_CONDITIONS= SMALL_DEFORMATIONS +MATERIAL_MODEL= LINEAR_ELASTIC + +ELASTICITY_MODULUS= 2E11 +POISSON_RATIO= 0.3 +MATERIAL_DENSITY= 7854 + +MARKER_SYM= ( x_minus, per_1, per_2 ) +MARKER_PRESSURE= ( inner, 0, outer, 0, x_plus, 0 ) + +CENTRIFUGAL_FORCE= YES +ROTATION_RATE= ( 1500, 0, 0 ) +MOTION_ORIGIN= ( 0, 0, 0 ) + +LINEAR_SOLVER= CONJUGATE_GRADIENT +LINEAR_SOLVER_PREC= ILU +LINEAR_SOLVER_ERROR= 1E-8 +LINEAR_SOLVER_ITER= 1000 + +SCREEN_OUTPUT= INNER_ITER, RMS_RES, LINSOL, VMS +OUTPUT_WRT_FREQ= 1 +INNER_ITER= 1 + +MESH_FILENAME= cylinder.su2 + diff --git a/TestCases/parallel_regression.py b/TestCases/parallel_regression.py index d60bd28e07e..8bc45cb6a8b 100644 --- a/TestCases/parallel_regression.py +++ b/TestCases/parallel_regression.py @@ -1225,6 +1225,17 @@ def main(): statbeam3d.command = TestCase.Command(exec = "parallel_computation_fsi.py", param = "-f") test_list.append(statbeam3d) + # Rotating cylinder, 3d + rotating_cylinder_fea = TestCase('rotating_cylinder_fea') + rotating_cylinder_fea.cfg_dir = "fea_fsi/rotating_cylinder" + rotating_cylinder_fea.cfg_file = "config.cfg" + rotating_cylinder_fea.test_iter = 0 + # For a thin disk with the inner and outer radius of this geometry, from + # "Formulas for Stress, Strain, and Structural Matrices", 2nd Edition, figure 19-4, + # the maximum stress is 165.6MPa, we get a Von Misses stress very close to that. + rotating_cylinder_fea.test_vals = [-6.005467, -5.615543, -5.615527, 38, -8.126591, 1.6457e8] + test_list.append(rotating_cylinder_fea) + # Dynamic beam, 2d dynbeam2d = TestCase('dynbeam2d') dynbeam2d.cfg_dir = "fea_fsi/DynBeam_2d" diff --git a/TestCases/py_wrapper/disc_adj_fea/flow_load_sens/configAD_fem.cfg b/TestCases/py_wrapper/disc_adj_fea/flow_load_sens/configAD_fem.cfg index 63edf6869cf..b5d0f15d944 100644 --- a/TestCases/py_wrapper/disc_adj_fea/flow_load_sens/configAD_fem.cfg +++ b/TestCases/py_wrapper/disc_adj_fea/flow_load_sens/configAD_fem.cfg @@ -35,7 +35,6 @@ MATERIAL_COMPRESSIBILITY= COMPRESSIBLE ELASTICITY_MODULUS=21000 POISSON_RATIO=0.4 MATERIAL_DENSITY=100 -DEAD_LOAD=NO FORMULATION_ELASTICITY_2D = PLANE_STRAIN NONLINEAR_FEM_SOLUTION_METHOD = NEWTON_RAPHSON diff --git a/config_template.cfg b/config_template.cfg index 2ecb8ca03b2..49cca43332b 100644 --- a/config_template.cfg +++ b/config_template.cfg @@ -1742,12 +1742,17 @@ KNOWLES_N= 1.0 % ID of the region we want to compute the sensitivities using direct differentiation FEA_ID_DIRECTDIFF= 0 % -% RESTART_STEADY_STATE= NO % % Time discretization TIME_DISCRE_FEA= NEWMARK_IMPLICIT % +% Iterative method for non-linear structural analysis +NONLINEAR_FEM_SOLUTION_METHOD= NEWTON_RAPHSON +% +% Pseudo static analysis (no density in dynamic analysis) +PSEUDO_STATIC= NO +% % Parameter alpha for Newmark scheme (s) NEWMARK_BETA= 0.25 % @@ -1781,6 +1786,9 @@ MATERIAL_MODEL= LINEAR_ELASTIC % Compressibility of the material MATERIAL_COMPRESSIBILITY= COMPRESSIBLE % +% Formulation for 2-dimensional elasticity solver +FORMULATION_ELASTICITY_2D= PLANE_STRAIN +% % -------------------- Dielectric effects ------------------% % % Include DE effects @@ -1794,6 +1802,20 @@ ELECTRIC_FIELD_MOD= 20e5 % % Direction of the Electic Fields ELECTRIC_FIELD_DIR= (0.0, 1.0) +% +% ------------------------ Prestretch -----------------------% +% +% Consider a prestretch in the structural domain +PRESTRETCH= NO +% +% Filename to input for prestretching membranes +PRESTRETCH_FILENAME= prestretch_file.dat +% +% ----------------------- Body Forces -----------------------% +% +% Centrifugal forces due to ROTATION_RATE around MOTION_ORIGIN. +% GRAVITY_FORCE and BODY_FORCE can also be used with the FEA solver. +CENTRIFUGAL_FORCE= NO % -------------------- Weakly Coupled Heat ------------------% % @@ -2010,34 +2032,6 @@ STRESS_PENALTY_PARAM= (1.0, 10.0) % Preaccumulation in the AD mode. PREACC= YES -% ---------------- PRESTRETCH FOR STRUCTURES -------------------% -% Consider a prestretch in the structural domain -PRESTRETCH= NO -% -% Filename to input for prestretching membranes -PRESTRETCH_FILENAME= prestretch_file.dat -% -% Iterative method for non-linear structural analysis -NONLINEAR_FEM_SOLUTION_METHOD= NEWTON_RAPHSON -% -% Formulation for bidimensional elasticity solver -FORMULATION_ELASTICITY_2D= PLANE_STRAIN -% -% Apply dead loads -DEAD_LOAD= NO -% -% pseudo static analysis (no density in dynamic analysis) -PSEUDO_STATIC= NO -% -% Dynamic or static structural analysis (deprecated -> use TIME_DOMAIN) -DYNAMIC_ANALYSIS= NO -% -% Time Step for dynamic analysis (s) (deprecated -> use TIME_STEP) -DYN_TIMESTEP= 0.0 -% -% Total Physical Time for dual time stepping simulations (s) (deprecated -> use MAX_TIME) -DYN_TIME= 1.0 - % ---------------- MESH DEFORMATION PARAMETERS (NEW SOLVER) -------------------% % % Use the reformatted pseudo-elastic solver for grid deformation