SU2
solver_structure.hpp
Go to the documentation of this file.
1 
37 #pragma once
38 
39 #include "../../Common/include/mpi_structure.hpp"
40 
41 #include <cmath>
42 #include <string>
43 #include <fstream>
44 #include <sstream>
45 #include <algorithm>
46 #include <iostream>
47 #include <stdlib.h>
48 #include <stdio.h>
49 
50 #include "fluid_model.hpp"
51 #include "numerics_structure.hpp"
52 #include "variable_structure.hpp"
53 #include "../../Common/include/gauss_structure.hpp"
54 #include "../../Common/include/element_structure.hpp"
55 #include "../../Common/include/geometry_structure.hpp"
56 #include "../../Common/include/config_structure.hpp"
57 #include "../../Common/include/matrix_structure.hpp"
58 #include "../../Common/include/vector_structure.hpp"
59 #include "../../Common/include/linear_solvers_structure.hpp"
60 #include "../../Common/include/grid_movement_structure.hpp"
61 
62 using namespace std;
63 
71 class CSolver {
72 protected:
73  unsigned short IterLinSolver;
74  unsigned short nVar,
75  nPrimVar,
76  nPrimVarGrad,
77  nSecondaryVar,
78  nSecondaryVarGrad,
79  nVarGrad,
80  nDim;
81  unsigned long nPoint;
82  unsigned long nPointDomain;
83  su2double Max_Delta_Time,
85  su2double *Residual_RMS,
86  *Residual_Max,
87  *Residual,
88  *Residual_i,
89  *Residual_j;
90  unsigned long *Point_Max;
91  su2double **Point_Max_Coord;
92  su2double *Solution,
93  *Solution_i,
94  *Solution_j;
95  su2double *Vector,
96  *Vector_i,
97  *Vector_j;
98  su2double *Res_Conv,
99  *Res_Visc,
100  *Res_Sour,
101  *Res_Conv_i,
102  *Res_Visc_i,
103  *Res_Conv_j,
104  *Res_Visc_j;
105  su2double **Jacobian_i,
106  **Jacobian_j;
107  su2double **Jacobian_ii,
108  **Jacobian_ij,
109  **Jacobian_ji,
110  **Jacobian_jj;
112  su2double **Smatrix,
113  **Cvector;
115  unsigned short nOutputVariables;
117 public:
118 
127  string* OutputHeadingNames; /*< \brief vector of strings to store the headings for the exra variables */
128 
135  CSolver(void);
136 
140  virtual ~CSolver(void);
141 
146  void SetIterLinSolver(unsigned short val_iterlinsolver);
147 
152  virtual void Set_MPI_Solution(CGeometry *geometry, CConfig *config);
153 
158  virtual void Set_MPI_Primitive(CGeometry *geometry, CConfig *config);
159 
160  // /*!
161  // * \brief Set number of linear solver iterations.
162  // * \param[in] val_iterlinsolver - Number of linear iterations.
163  // */
164  // virtual void Set_MPI_Secondary(CGeometry *geometry, CConfig *config);
165 
170  void SetResidual_RMS(CGeometry *geometry, CConfig *config);
171 
176  virtual void Set_MPI_Solution_Old(CGeometry *geometry, CConfig *config);
177 
183  virtual void Set_MPI_Solution_DispOnly(CGeometry *geometry, CConfig *config);
184 
190  virtual void Set_MPI_Solution_Pred(CGeometry *geometry, CConfig *config);
191 
197  virtual void Set_MPI_Solution_Pred_Old(CGeometry *geometry, CConfig *config);
198 
204  virtual void Set_MPI_Solution_Limiter(CGeometry *geometry, CConfig *config);
205 
211  virtual void Set_MPI_Primitive_Limiter(CGeometry *geometry, CConfig *config);
212 
213  // /*!
214  // * \brief Impose the send-receive boundary condition.
215  // * \param[in] geometry - Geometrical definition of the problem.
216  // * \param[in] config - Definition of the particular problem.
217  // */
218  // virtual void Set_MPI_Secondary_Limiter(CGeometry *geometry, CConfig *config);
219 
225  virtual void SetNondimensionalization(CGeometry *geometry, CConfig *config, unsigned short iMesh);
226 
231  virtual CFluidModel* GetFluidModel(void);
232 
237  unsigned short GetIterLinSolver(void);
238 
243  su2double GetMax_Delta_Time(void);
244 
249  su2double GetMin_Delta_Time(void);
250 
255  virtual su2double GetMax_Delta_Time(unsigned short val_Species);
256 
261  virtual su2double GetMin_Delta_Time(unsigned short val_Species);
262 
266  unsigned short GetnVar(void);
267 
271  unsigned short GetnPrimVar(void);
272 
276  unsigned short GetnPrimVarGrad(void);
277 
281  unsigned short GetnSecondaryVar(void);
282 
286  unsigned short GetnSecondaryVarGrad(void);
287 
291  unsigned short GetnOutputVariables(void);
292 
302  virtual void SetResidual_DualTime(CGeometry *geometry, CSolver **solver_container, CConfig *config,
303  unsigned short iRKStep, unsigned short iMesh, unsigned short RunTime_EqSystem);
304 
310  void SetRes_RMS(unsigned short val_var, su2double val_residual);
311 
317  void AddRes_RMS(unsigned short val_var, su2double val_residual);
318 
324  su2double GetRes_RMS(unsigned short val_var);
325 
331  void SetRes_Max(unsigned short val_var, su2double val_residual, unsigned long val_point);
332 
340  void AddRes_Max(unsigned short val_var, su2double val_residual, unsigned long val_point, su2double* val_coord);
341 
347  su2double GetRes_Max(unsigned short val_var);
348 
354  virtual su2double GetRes_FEM(unsigned short val_var);
355 
361  unsigned long GetPoint_Max(unsigned short val_var);
362 
368  su2double* GetPoint_Max_Coord(unsigned short val_var);
369 
375  void SetGrid_Movement_Residual(CGeometry *geometry, CConfig *config);
376 
381  void SetAuxVar_Gradient_GG(CGeometry *geometry, CConfig *config);
382 
388  void SetAuxVar_Gradient_LS(CGeometry *geometry, CConfig *config);
389 
395  void SetAuxVar_Surface_Gradient(CGeometry *geometry, CConfig *config);
396 
401  void SetSolution_Gradient_GG(CGeometry *geometry, CConfig *config);
402 
408  void SetSolution_Gradient_LS(CGeometry *geometry, CConfig *config);
409 
415  virtual void Set_MPI_Solution_Gradient(CGeometry *geometry, CConfig *config);
416 
422  void SetGridVel_Gradient(CGeometry *geometry, CConfig *config);
423 
429  void SetSolution_Limiter(CGeometry *geometry, CConfig *config);
430 
436  virtual void SetPrimitive_Limiter(CGeometry *geometry, CConfig *config);
437 
438  // /*!
439  // * \brief A virtual member.
440  // * \param[in] geometry - Geometrical definition of the problem.
441  // * \param[in] config - Definition of the particular problem.
442  // */
443  // virtual void SetSecondary_Limiter(CGeometry *geometry, CConfig *config);
444 
450  void SetPressureLaplacian(CGeometry *geometry, CConfig *config, su2double *PressureLaplacian);
451 
456  void Set_OldSolution(CGeometry *geometry);
457 
462  void Restart_OldGeometry(CGeometry *geometry, CConfig *config);
463 
472  virtual void SetTime_Step(CGeometry *geometry, CSolver **solver_container, CConfig *config,
473  unsigned short iMesh, unsigned long Iteration);
474 
482  virtual void Postprocessing(CGeometry *geometry, CSolver **solver_container, CConfig *config,
483  unsigned short iMesh);
484 
493  virtual void Postprocessing(CGeometry *geometry, CSolver **solver_container, CConfig *config, CNumerics **numerics,
494  unsigned short iMesh);
504  virtual void Centered_Residual(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics,
505  CConfig *config, unsigned short iMesh, unsigned short iRKStep);
506 
515  virtual void Upwind_Residual(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics,
516  CConfig *config, unsigned short iMesh);
517 
527  virtual void Preprocessing(CGeometry *geometry, CSolver **solver_container, CConfig *config, unsigned short iMesh, unsigned short iRKStep, unsigned short RunTime_EqSystem, bool Output);
528 
539  virtual void Preprocessing(CGeometry *geometry, CSolver **solver_container, CConfig *config, CNumerics **numerics, unsigned short iMesh, unsigned long Iteration, unsigned short RunTime_EqSystem, bool Output);
540 
546  virtual void SetUndivided_Laplacian(CGeometry *geometry, CConfig *config);
547 
553  virtual void Set_MPI_ActDisk(CSolver **solver_container, CGeometry *geometry, CConfig *config);
554 
560  virtual void Set_MPI_Nearfield(CGeometry *geometry, CConfig *config);
561 
567  virtual void Set_MPI_Interface(CGeometry *geometry, CConfig *config);
568 
574  virtual void Set_MPI_Undivided_Laplacian(CGeometry *geometry, CConfig *config);
575 
581  virtual void SetMax_Eigenvalue(CGeometry *geometry, CConfig *config);
582 
588  virtual void Set_MPI_MaxEigenvalue(CGeometry *geometry, CConfig *config);
589 
596  virtual void SetDissipation_Switch(CGeometry *geometry, CConfig *config);
597 
604  virtual void Set_MPI_Dissipation_Switch(CGeometry *geometry, CConfig *config);
605 
606 
612  virtual void Compute_ComboObj(CConfig *config);
613 
622  virtual void BC_Euler_Wall(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics, CConfig *config,
623  unsigned short val_marker);
624 
635  virtual void BC_Clamped(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics, CConfig *config,
636  unsigned short val_marker);
637 
648  virtual void BC_Clamped_Post(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics, CConfig *config,
649  unsigned short val_marker);
650 
661  virtual void BC_Normal_Displacement(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics, CConfig *config,
662  unsigned short val_marker);
663 
664 
673  virtual void BC_Normal_Load(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics, CConfig *config,
674  unsigned short val_marker);
675 
685  virtual void BC_Dir_Load(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics, CConfig *config,
686  unsigned short val_marker);
687 
697  virtual void BC_Sine_Load(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics, CConfig *config,
698  unsigned short val_marker);
699 
708  virtual void BC_Pressure(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics, CConfig *config,
709  unsigned short val_marker);
710 
719  virtual void BC_Interface_Boundary(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics, CConfig *config, unsigned short val_marker);
720 
729  virtual void BC_NearField_Boundary(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics, CConfig *config, unsigned short val_marker);
730 
738  virtual void BC_Fluid_Interface(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics, CConfig *config);
739 
748  virtual void BC_ActDisk_Inlet(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics,
749  CConfig *config, unsigned short val_marker);
750 
759  virtual void BC_ActDisk_Outlet(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics,
760  CConfig *config, unsigned short val_marker);
761 
770  virtual void BC_ActDisk(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics,
771  CConfig *config, unsigned short val_marker, bool inlet_surface);
772 
782  virtual void BC_Isothermal_Wall(CGeometry *geometry,
783  CSolver **solver_container,
784  CNumerics *conv_numerics,
785  CNumerics *visc_numerics,
786  CConfig *config,
787  unsigned short val_marker);
788 
798  virtual void BC_HeatFlux_Wall(CGeometry *geometry, CSolver **solver_container,
799  CNumerics *conv_numerics,
800  CNumerics *visc_numerics, CConfig *config,
801  unsigned short val_marker);
802 
810  virtual void BC_Dirichlet(CGeometry *geometry, CSolver **solver_container, CConfig *config,
811  unsigned short val_marker);
812 
821  virtual void BC_Neumann(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics, CConfig *config,
822  unsigned short val_marker);
823 
833  virtual void BC_Far_Field(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config,
834  unsigned short val_marker);
835 
845  virtual void BC_Sym_Plane(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker);
846 
847 
857  virtual void BC_Riemann(CGeometry *geometry, CSolver **solver_container,
858  CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker);
859 
869  virtual void BC_NonReflecting(CGeometry *geometry, CSolver **solver_container,
870  CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker);
871 
881  virtual void BC_Inlet(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics,
882  CConfig *config, unsigned short val_marker);
883 
893  virtual void BC_Supersonic_Inlet(CGeometry *geometry, CSolver **solver_container,
894  CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker);
895 
905  virtual void BC_Supersonic_Outlet(CGeometry *geometry, CSolver **solver_container,
906  CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker);
907 
916  virtual void BC_Custom(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics,
917  CConfig *config, unsigned short val_marker);
918 
928  virtual void BC_Outlet(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics,
929  CConfig *config, unsigned short val_marker);
930 
940  virtual void BC_Engine_Inflow(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker);
941 
951  virtual void BC_Engine_Exhaust(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker);
952 
961  virtual void BC_Dielec(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics,
962  CConfig *config, unsigned short val_marker);
963 
972  virtual void BC_Electrode(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics,
973  CConfig *config, unsigned short val_marker);
981  virtual void Mixing_Process(CGeometry *geometry, CSolver **solver_container, CConfig *config, unsigned short val_Marker);
982 
991  virtual void MixedOut_Average (su2double val_init_pressure, su2double *val_Averaged_Flux, su2double *val_normal, su2double *pressure_mix, su2double *density_mix);
992 
1001  virtual void MixedOut_Root_Function(su2double *pressure, su2double *val_Averaged_Flux, su2double *val_normal, su2double *valfunc, su2double *density);
1002 
1012  virtual void Boundary_Fourier(CGeometry *geometry, CSolver **solver_container, CConfig *config, unsigned short val_Marker, vector<std::complex<su2double> > &c4k,signed long &nboundaryvertex);
1013 
1024  virtual void Boundary_Fourier(CGeometry *geometry, CSolver **solver_container, CConfig *config, unsigned short val_Marker, vector<std::complex<su2double> >& c2k,vector<std::complex<su2double> >& c3k,signed long& nboundaryvertex);
1025 
1032  virtual void SetExtAveragedValue(CSolver *solver_container, unsigned short intMarker, unsigned short extMarker);
1033 
1039  virtual su2double GetAveragedDensity(unsigned short valMarker);
1040 
1046  virtual su2double GetAveragedPressure(unsigned short valMarker);
1047 
1053  virtual su2double GetAveragedEnthalpy(unsigned short valMarker);
1054 
1060  virtual su2double* GetAveragedVelocity(unsigned short valMarker);
1061 
1067  virtual su2double* GetAveragedGridVelocity(unsigned short valMarker);
1068 
1074  virtual su2double GetAveragedEntropy(unsigned short valMarker);
1075 
1081  virtual su2double GetAveragedTotTemperature(unsigned short valMarker);
1082 
1088  virtual su2double GetAveragedTotPressure(unsigned short valMarker);
1089 
1095  virtual su2double GetFlowAngle(unsigned short valMarker);
1096 
1102  virtual su2double GetAveragedMach(unsigned short valMarker);
1103 
1109  virtual su2double GetAveragedNormalMach(unsigned short valMarker);
1110 
1116  virtual su2double GetMassFlow(unsigned short valMarker);
1117 
1123  virtual su2double GetTotalPressureLoss(unsigned short inMarkerTP);
1124 
1130  virtual su2double GetKineticEnergyLoss(unsigned short inMarkerTP);
1131 
1137  virtual su2double GetTotalTotalEfficiency(unsigned short inMarkerTP);
1138 
1144  virtual su2double GetTotalStaticEfficiency(unsigned short inMarkerTP);
1145 
1151  virtual su2double GetEulerianWork(unsigned short inMarkerTP);
1152 
1158  virtual su2double GetTotalEnthalpyIn(unsigned short inMarkerTP);
1159 
1165  virtual su2double GetFlowAngleIn(unsigned short inMarkerTP);
1166 
1172  virtual su2double GetFlowAngleOut(unsigned short inMarkerTP);
1173 
1179  virtual su2double GetMassFlowIn(unsigned short inMarkerTP);
1180 
1186  virtual su2double GetMassFlowOut(unsigned short inMarkerTP);
1187 
1193  virtual su2double GetMachIn(unsigned short inMarkerTP);
1194 
1200  virtual su2double GetMachOut(unsigned short inMarkerTP);
1201 
1207  virtual su2double GetNormalMachIn(unsigned short inMarkerTP);
1208 
1214  virtual su2double GetNormalMachOut(unsigned short inMarkerTP);
1215 
1221  virtual su2double GetEnthalpyOut(unsigned short inMarkerTP);
1222 
1228  virtual su2double GetVelocityOutIs(unsigned short inMarkerTP);
1229 
1235  virtual su2double GetPressureOut(unsigned short inMarkerTP);
1236 
1242  virtual su2double GetPressureRatio(unsigned short inMarkerTP);
1243 
1249  virtual su2double GetAveragedNormalVelocity(unsigned short valMarker);
1250 
1256  virtual su2double GetAveragedTangVelocity(unsigned short valMarker);
1257 
1264  virtual su2double GetSlidingState(unsigned short val_marker, unsigned long val_vertex, unsigned short val_state);
1265 
1273  virtual void SetSlidingState(unsigned short val_marker, unsigned long val_vertex, unsigned short val_state, su2double component);
1274 
1275 
1283  virtual void ExplicitRK_Iteration(CGeometry *geometry, CSolver **solver_container, CConfig *config,
1284  unsigned short iRKStep);
1285 
1292  virtual void ExplicitEuler_Iteration(CGeometry *geometry, CSolver **solver_container, CConfig *config);
1293 
1300  virtual void ImplicitEuler_Iteration(CGeometry *geometry, CSolver **solver_container, CConfig *config);
1301 
1308  virtual void ImplicitNewmark_Iteration(CGeometry *geometry, CSolver **solver_container, CConfig *config);
1309 
1316  virtual void ImplicitNewmark_Update(CGeometry *geometry, CSolver **solver_container, CConfig *config);
1317 
1318 
1325  virtual void ImplicitNewmark_Relaxation(CGeometry *geometry, CSolver **solver_container, CConfig *config);
1326 
1333  virtual void GeneralizedAlpha_Iteration(CGeometry *geometry, CSolver **solver_container, CConfig *config);
1334 
1341  virtual void GeneralizedAlpha_UpdateDisp(CGeometry *geometry, CSolver **solver_container, CConfig *config);
1342 
1349  virtual void GeneralizedAlpha_UpdateSolution(CGeometry *geometry, CSolver **solver_container, CConfig *config);
1350 
1357  virtual void GeneralizedAlpha_UpdateLoads(CGeometry *geometry, CSolver **solver_container, CConfig *config);
1358 
1366  virtual void Compute_Residual(CGeometry *geometry, CSolver **solver_container, CConfig *config,
1367  unsigned short iMesh);
1368 
1374  virtual void Pressure_Forces(CGeometry *geometry, CConfig *config);
1375 
1382  virtual void TurboPerformance(CSolver *solver, CConfig *config, unsigned short inMarker, unsigned short outMarker, unsigned short Kind_TurboPerf, unsigned short inMarkerTP);
1383 
1390  virtual void StoreTurboPerformance(CSolver *solver, unsigned short inMarkerTP);
1391 
1397  virtual void Momentum_Forces(CGeometry *geometry, CConfig *config);
1398 
1405  virtual void Inviscid_DeltaForces(CGeometry *geometry, CSolver **solver_container, CConfig *config);
1406 
1412  virtual void Friction_Forces(CGeometry *geometry, CConfig *config);
1413 
1419  virtual void Viscous_DeltaForces(CGeometry *geometry, CConfig *config);
1420 
1426  virtual void Wave_Strength(CGeometry *geometry, CConfig *config);
1427 
1433  virtual void SetPrimitive_Gradient_GG(CGeometry *geometry, CConfig *config);
1434 
1440  virtual void SetPrimitive_Gradient_LS(CGeometry *geometry, CConfig *config);
1441 
1442  // /*!
1443  // * \brief A virtual member.
1444  // * \param[in] geometry - Geometrical definition of the problem.
1445  // * \param[in] config - Definition of the particular problem.
1446  // */
1447  // virtual void SetSecondary_Gradient_GG(CGeometry *geometry, CConfig *config);
1448 
1449  // /*!
1450  // * \brief A virtual member.
1451  // * \param[in] geometry - Geometrical definition of the problem.
1452  // * \param[in] config - Definition of the particular problem.
1453  // */
1454  // virtual void SetSecondary_Gradient_LS(CGeometry *geometry, CConfig *config);
1455 
1461  virtual void Set_MPI_Primitive_Gradient(CGeometry *geometry, CConfig *config);
1462 
1463  // /*!
1464  // * \brief A virtual member.
1465  // * \param[in] geometry - Geometrical definition of the problem.
1466  // * \param[in] config - Definition of the particular problem.
1467  // */
1468  // virtual void Set_MPI_Secondary_Gradient(CGeometry *geometry, CConfig *config);
1469 
1475  virtual void SetPrimitive_Limiter_MPI(CGeometry *geometry, CConfig *config);
1476 
1477  // /*!
1478  // * \brief A virtual member.
1479  // * \param[in] geometry - Geometrical definition of the problem.
1480  // * \param[in] config - Definition of the particular problem.
1481  // */
1482  // virtual void SetSecondary_Limiter_MPI(CGeometry *geometry, CConfig *config);
1483 
1489  virtual void SetPreconditioner(CConfig *config, unsigned long iPoint);
1490 
1500  virtual void Viscous_Residual(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics,
1501  CConfig *config, unsigned short iMesh, unsigned short iRKStep);
1502 
1507  virtual void AddStiffMatrix(su2double **StiffMatrix_Elem, unsigned long Point_0, unsigned long Point_1, unsigned long Point_2, unsigned long Point_3 );
1508 
1518  virtual void Source_Residual(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics, CNumerics *second_numerics,
1519  CConfig *config, unsigned short iMesh);
1520 
1529  virtual void Source_Template(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics,
1530  CConfig *config, unsigned short iMesh);
1531 
1538  virtual void SetCSensitivity(unsigned short val_marker, unsigned long val_vertex, su2double val_sensitivity);
1539 
1546  virtual void SetForceProj_Vector(CGeometry *geometry, CSolver **solver_container, CConfig *config);
1547 
1554  virtual void SetIntBoundary_Jump(CGeometry *geometry, CSolver **solver_container, CConfig *config);
1555 
1560  virtual void SetTotal_CD(su2double val_Total_CD);
1561 
1566  virtual void SetTotal_CL(su2double val_Total_CL);
1567 
1572  virtual void SetTotal_NetCThrust(su2double val_Total_NetCThrust);
1573 
1578  virtual void SetTotal_Power(su2double val_Total_Power);
1579 
1584  virtual void SetTotal_CD_SolidSurf(su2double val_Total_CD_SolidSurf);
1585 
1590  virtual void SetTotal_ReverseFlow(su2double val_ReverseFlow);
1591 
1596  virtual void SetTotal_MFR(su2double val_Total_MFR);
1597 
1602  virtual void SetTotal_Prop_Eff(su2double val_Total_Prop_Eff);
1603 
1608  virtual void SetTotal_ByPassProp_Eff(su2double val_Total_ByPassProp_Eff);
1609 
1614  virtual void SetTotal_Adiab_Eff(su2double val_Total_Adiab_Eff);
1615 
1620  virtual void SetTotal_Poly_Eff(su2double val_Total_Poly_Eff);
1621 
1626  virtual void SetTotal_IDC(su2double val_Total_IDC);
1627 
1632  virtual void SetTotal_IDC_Mach(su2double val_Total_IDC_Mach);
1633 
1638  virtual void SetTotal_IDR(su2double val_Total_IDR);
1639 
1644  virtual void SetTotal_DC60(su2double val_Total_DC60);
1645 
1650  virtual void SetTotal_Custom(su2double val_Total_Custom, su2double val_coeff);
1651 
1656  virtual void AddTotal_Custom(su2double val_Total_Custom, su2double val_coeff);
1657 
1662  virtual void SetTotal_CT(su2double val_Total_CT);
1663 
1668  virtual void SetTotal_CQ(su2double val_Total_CQ);
1669 
1674  virtual void SetTotal_HeatFlux(su2double val_Total_Heat);
1675 
1680  virtual void SetTotal_MaxHeatFlux(su2double val_Total_MaxHeat);
1681 
1687  virtual void SetDistance(CGeometry *geometry, CConfig *config);
1688 
1696  virtual void Inviscid_Sensitivity(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics, CConfig *config);
1697 
1705  virtual void Smooth_Sensitivity(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics, CConfig *config);
1706 
1714  virtual void Viscous_Sensitivity(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics, CConfig *config);
1715 
1721  virtual su2double GetCL_Inv(unsigned short val_marker);
1722 
1728  virtual su2double GetCL_Visc(unsigned short val_marker);
1729 
1735  virtual su2double GetCMz_Inv(unsigned short val_marker);
1736 
1742  virtual su2double GetCMz_Visc(unsigned short val_marker);
1743 
1749  virtual su2double GetSurface_CL(unsigned short val_marker);
1750 
1756  virtual su2double GetSurface_CD(unsigned short val_marker);
1757 
1763  virtual su2double GetSurface_CSF(unsigned short val_marker);
1764 
1770  virtual su2double GetSurface_CEff(unsigned short val_marker);
1771 
1777  virtual su2double GetSurface_CFx(unsigned short val_marker);
1778 
1784  virtual su2double GetSurface_CFy(unsigned short val_marker);
1785 
1791  virtual su2double GetSurface_CFz(unsigned short val_marker);
1792 
1798  virtual su2double GetSurface_CMx(unsigned short val_marker);
1799 
1805  virtual su2double GetSurface_CMy(unsigned short val_marker);
1806 
1812  virtual su2double GetSurface_CMz(unsigned short val_marker);
1813 
1819  virtual su2double GetSurface_CL_Inv(unsigned short val_marker);
1820 
1826  virtual su2double GetSurface_CD_Inv(unsigned short val_marker);
1827 
1833  virtual su2double GetSurface_CSF_Inv(unsigned short val_marker);
1834 
1840  virtual su2double GetSurface_CEff_Inv(unsigned short val_marker);
1841 
1847  virtual su2double GetSurface_CFx_Inv(unsigned short val_marker);
1848 
1854  virtual su2double GetSurface_CFy_Inv(unsigned short val_marker);
1855 
1861  virtual su2double GetSurface_CFz_Inv(unsigned short val_marker);
1862 
1868  virtual su2double GetSurface_CMx_Inv(unsigned short val_marker);
1869 
1875  virtual su2double GetSurface_CMy_Inv(unsigned short val_marker);
1876 
1882  virtual su2double GetSurface_CMz_Inv(unsigned short val_marker);
1883 
1889  virtual su2double GetSurface_CL_Visc(unsigned short val_marker);
1890 
1896  virtual su2double GetSurface_CD_Visc(unsigned short val_marker);
1897 
1903  virtual su2double GetSurface_CSF_Visc(unsigned short val_marker);
1904 
1910  virtual su2double GetSurface_CEff_Visc(unsigned short val_marker);
1911 
1917  virtual su2double GetSurface_CFx_Visc(unsigned short val_marker);
1918 
1924  virtual su2double GetSurface_CFy_Visc(unsigned short val_marker);
1925 
1931  virtual su2double GetSurface_CFz_Visc(unsigned short val_marker);
1932 
1938  virtual su2double GetSurface_CMx_Visc(unsigned short val_marker);
1939 
1945  virtual su2double GetSurface_CMy_Visc(unsigned short val_marker);
1946 
1952  virtual su2double GetSurface_CMz_Visc(unsigned short val_marker);
1953 
1959  virtual su2double GetSurface_CL_Mnt(unsigned short val_marker);
1960 
1966  virtual su2double GetSurface_CD_Mnt(unsigned short val_marker);
1967 
1973  virtual su2double GetSurface_CSF_Mnt(unsigned short val_marker);
1974 
1980  virtual su2double GetSurface_CEff_Mnt(unsigned short val_marker);
1981 
1987  virtual su2double GetSurface_CFx_Mnt(unsigned short val_marker);
1988 
1994  virtual su2double GetSurface_CFy_Mnt(unsigned short val_marker);
1995 
2001  virtual su2double GetSurface_CFz_Mnt(unsigned short val_marker);
2002 
2008  virtual su2double GetSurface_CMx_Mnt(unsigned short val_marker);
2009 
2015  virtual su2double GetSurface_CMy_Mnt(unsigned short val_marker);
2016 
2022  virtual su2double GetSurface_CMz_Mnt(unsigned short val_marker);
2023 
2029  virtual su2double GetCSF_Visc(unsigned short val_marker);
2030 
2036  virtual su2double GetCD_Inv(unsigned short val_marker);
2037 
2043  virtual su2double GetInflow_MassFlow(unsigned short val_marker);
2044 
2051  virtual void GetSurface_Properties(CGeometry *geometry, CNumerics *conv_numerics,
2052  CNumerics *visc_numerics, CConfig *config, unsigned short iMesh, bool Output);
2053 
2059  virtual void GetPower_Properties(CGeometry *geometry, CConfig *config, unsigned short iMesh, bool Output);
2060 
2066  virtual void GetSurface_Distortion(CGeometry *geometry, CConfig *config, unsigned short iMesh, bool Output);
2067 
2076  virtual void SetFarfield_AoA(CGeometry *geometry, CSolver **solver_container,
2077  CConfig *config, unsigned short iMesh, bool Output);
2078 
2087  virtual void SetActDisk_BCThrust(CGeometry *geometry, CSolver **solver_container,
2088  CConfig *config, unsigned short iMesh, bool Output);
2089 
2095  virtual su2double GetExhaust_MassFlow(unsigned short val_marker);
2096 
2102  virtual su2double GetInflow_Pressure(unsigned short val_marker);
2103 
2109  virtual su2double GetInflow_Mach(unsigned short val_marker);
2110 
2116  virtual su2double GetCSF_Inv(unsigned short val_marker);
2117 
2123  virtual su2double GetCEff_Inv(unsigned short val_marker);
2124 
2130  virtual su2double GetSurface_HF_Visc(unsigned short val_marker);
2131 
2137  virtual su2double GetSurface_MaxHF_Visc(unsigned short val_marker);
2138 
2144  virtual su2double GetCD_Visc(unsigned short val_marker);
2145 
2151  virtual void SetTotal_ComboObj(su2double ComboObj);
2152 
2158  virtual su2double GetTotal_ComboObj(void);
2159 
2164  virtual su2double GetTotal_CSF(void);
2165 
2170  virtual su2double GetTotal_CEff(void);
2171 
2176  virtual su2double GetTotal_CT(void);
2177 
2182  virtual su2double GetTotal_CQ(void);
2183 
2188  virtual su2double GetTotal_HeatFlux(void);
2189 
2194  virtual su2double GetTotal_MaxHeatFlux(void);
2195 
2200  virtual su2double Get_PressureDrag(void);
2201 
2206  virtual su2double Get_ViscDrag(void);
2207 
2212  virtual su2double GetTotal_CMerit(void);
2213 
2218  virtual su2double GetTotal_CEquivArea(void);
2219 
2224  virtual su2double GetTotal_AeroCD(void);
2225 
2230  virtual su2double GetTotal_RadialDistortion(void);
2231 
2236  virtual su2double GetTotal_CircumferentialDistortion(void);
2237 
2242  virtual su2double GetTotal_CpDiff(void);
2243 
2248  virtual su2double GetTotal_HeatFluxDiff(void);
2249 
2254  virtual su2double GetTotal_CFEA(void);
2255 
2260  virtual su2double GetTotal_CNearFieldOF(void);
2261 
2267  virtual void AddTotal_ComboObj(su2double val_obj);
2268 
2273  virtual void SetTotal_CEquivArea(su2double val_cequivarea);
2274 
2279  virtual void SetTotal_AeroCD(su2double val_aerocd);
2280 
2285  virtual void SetTotal_RadialDistortion(su2double val_distortion);
2286 
2291  virtual void SetTotal_CircumferentialDistortion(su2double val_distortion);
2292 
2297  virtual void SetTotal_CpDiff(su2double val_pressure);
2298 
2303  virtual void SetTotal_HeatFluxDiff(su2double val_heat);
2304 
2309  virtual void SetTotal_CFEA(su2double val_cfea);
2310 
2315  virtual void SetTotal_CNearFieldOF(su2double val_cnearfieldpress);
2316 
2321  virtual su2double GetTotal_CL(void);
2322 
2327  virtual su2double GetTotal_CD(void);
2328 
2333  virtual su2double GetTotal_NetCThrust(void);
2334 
2339  virtual su2double GetTotal_Power(void);
2340 
2345  virtual su2double GetTotal_CD_SolidSurf(void);
2346 
2351  virtual su2double GetTotal_ReverseFlow(void);
2352 
2357  virtual su2double GetTotal_MFR(void);
2358 
2363  virtual su2double GetTotal_Prop_Eff(void);
2364 
2369  virtual su2double GetTotal_ByPassProp_Eff(void);
2370 
2375  virtual su2double GetTotal_Adiab_Eff(void);
2376 
2381  virtual su2double GetTotal_Poly_Eff(void);
2382 
2387  virtual su2double GetTotal_IDC(void);
2388 
2393  virtual su2double GetTotal_IDC_Mach(void);
2394 
2399  virtual su2double GetTotal_IDR(void);
2400 
2405  virtual su2double GetTotal_DC60(void);
2406 
2411  virtual su2double GetTotal_Custom(void);
2412 
2417  virtual su2double GetTotal_CMx(void);
2418 
2423  virtual su2double GetTotal_CMy(void);
2424 
2429  virtual su2double GetTotal_CMz(void);
2430 
2435  virtual su2double GetTotal_CFx(void);
2436 
2441  virtual su2double GetTotal_CFy(void);
2442 
2447  virtual su2double GetTotal_CFz(void);
2448 
2453  virtual su2double GetTotal_CWave(void);
2454 
2459  virtual su2double GetTotal_CHeat(void);
2460 
2465  virtual su2double GetAllBound_CL_Inv(void);
2466 
2471  virtual su2double GetAllBound_CD_Inv(void);
2472 
2477  virtual su2double GetAllBound_CSF_Inv(void);
2478 
2483  virtual su2double GetAllBound_CEff_Inv(void);
2484 
2489  virtual su2double GetAllBound_CMx_Inv(void);
2494  virtual su2double GetAllBound_CMy_Inv(void);
2495 
2500  virtual su2double GetAllBound_CMz_Inv(void);
2501 
2506  virtual su2double GetAllBound_CFx_Inv(void);
2507 
2512  virtual su2double GetAllBound_CFy_Inv(void);
2513 
2518  virtual su2double GetAllBound_CFz_Inv(void);
2519 
2524  virtual su2double GetAllBound_CL_Visc(void);
2525 
2530  virtual su2double GetAllBound_CD_Visc(void);
2531 
2536  virtual su2double GetAllBound_CSF_Visc(void);
2537 
2542  virtual su2double GetAllBound_CEff_Visc(void);
2543 
2548  virtual su2double GetAllBound_CMx_Visc(void);
2549 
2554  virtual su2double GetAllBound_CMy_Visc(void);
2555 
2560  virtual su2double GetAllBound_CMz_Visc(void);
2561 
2566  virtual su2double GetAllBound_CFx_Visc(void);
2567 
2572  virtual su2double GetAllBound_CFy_Visc(void);
2573 
2578  virtual su2double GetAllBound_CFz_Visc(void);
2579 
2584  virtual su2double GetAllBound_CL_Mnt(void);
2585 
2590  virtual su2double GetAllBound_CD_Mnt(void);
2591 
2596  virtual su2double GetAllBound_CSF_Mnt(void);
2597 
2602  virtual su2double GetAllBound_CEff_Mnt(void);
2603 
2608  virtual su2double GetAllBound_CMx_Mnt(void);
2613  virtual su2double GetAllBound_CMy_Mnt(void);
2614 
2619  virtual su2double GetAllBound_CMz_Mnt(void);
2620 
2625  virtual su2double GetAllBound_CFx_Mnt(void);
2626 
2631  virtual su2double GetAllBound_CFy_Mnt(void);
2632 
2637  virtual su2double GetAllBound_CFz_Mnt(void);
2638 
2645  virtual su2double GetCPressure(unsigned short val_marker, unsigned long val_vertex);
2646 
2653  virtual su2double GetCPressureTarget(unsigned short val_marker, unsigned long val_vertex);
2654 
2661  virtual void SetCPressureTarget(unsigned short val_marker, unsigned long val_vertex, su2double val_pressure);
2662 
2670  virtual void SetCharacPrimVar(unsigned short val_marker, unsigned long val_vertex, unsigned short val_var, su2double val_value);
2671 
2679  virtual su2double *GetDonorPrimVar(unsigned short val_marker, unsigned long val_vertex);
2680 
2687  virtual void SetDonorPrimVar(unsigned short val_marker, unsigned long val_vertex, unsigned short val_var, su2double val_value);
2688 
2696  virtual void SetDonorAdjVar(unsigned short val_marker, unsigned long val_vertex, unsigned short val_var, su2double val_value);
2697 
2704  virtual su2double GetDonorPrimVar(unsigned short val_marker, unsigned long val_vertex, unsigned short val_var);
2705 
2713  virtual su2double *GetDonorAdjVar(unsigned short val_marker, unsigned long val_vertex);
2714 
2722  virtual su2double GetDonorAdjVar(unsigned short val_marker, unsigned long val_vertex, unsigned short val_var);
2723 
2730  virtual unsigned long GetDonorGlobalIndex(unsigned short val_marker, unsigned long val_vertex);
2731 
2738  virtual void SetDonorGlobalIndex(unsigned short val_marker, unsigned long val_vertex, unsigned long val_index);
2739 
2746  virtual su2double *GetCharacPrimVar(unsigned short val_marker, unsigned long val_vertex);
2747 
2754  virtual su2double GetActDisk_DeltaP(unsigned short val_marker, unsigned long val_vertex);
2755 
2762  virtual void SetActDisk_DeltaP(unsigned short val_marker, unsigned long val_vertex, su2double val_deltap);
2763 
2770  virtual su2double GetActDisk_DeltaT(unsigned short val_marker, unsigned long val_vertex);
2771 
2778  virtual void SetActDisk_DeltaT(unsigned short val_marker, unsigned long val_vertex, su2double val_deltat);
2779 
2786  virtual su2double GetInlet_Ttotal(unsigned short val_marker, unsigned long val_vertex);
2787 
2794  virtual su2double GetInlet_Ptotal(unsigned short val_marker, unsigned long val_vertex);
2795 
2802  virtual su2double GetInlet_FlowDir(unsigned short val_marker, unsigned long val_vertex, unsigned short val_dim);
2803 
2810  virtual void SetInlet_Ttotal(unsigned short val_marker, unsigned long val_vertex, su2double val_ttotal);
2811 
2818  virtual void SetInlet_Ptotal(unsigned short val_marker, unsigned long val_vertex, su2double val_ptotal);
2819 
2826  virtual void SetInlet_FlowDir(unsigned short val_marker, unsigned long val_vertex, unsigned short val_dim, su2double val_flowdir);
2827 
2834  virtual su2double GetCSkinFriction(unsigned short val_marker, unsigned long val_vertex, unsigned short val_dim);
2835 
2842  virtual su2double GetHeatFlux(unsigned short val_marker, unsigned long val_vertex);
2843 
2850  virtual su2double GetHeatFluxTarget(unsigned short val_marker, unsigned long val_vertex);
2851 
2858  virtual void SetHeatFluxTarget(unsigned short val_marker, unsigned long val_vertex, su2double val_heat);
2859 
2866  virtual su2double GetYPlus(unsigned short val_marker, unsigned long val_vertex);
2867 
2872  virtual su2double GetStrainMag_Max(void);
2873 
2878  virtual su2double GetOmega_Max(void);
2879 
2884  virtual void SetStrainMag_Max(su2double val_strainmag_max);
2885 
2890  virtual void SetOmega_Max(su2double val_omega_max);
2891 
2896  virtual su2double GetPsiRho_Inf(void);
2897 
2902  virtual su2double* GetPsiRhos_Inf(void);
2903 
2908  virtual su2double GetPsiE_Inf(void);
2909 
2915  virtual su2double GetPhi_Inf(unsigned short val_dim);
2916 
2922  virtual su2double GetTotal_Sens_Geo(void);
2923 
2929  virtual su2double GetTotal_Sens_Mach(void);
2930 
2936  virtual su2double GetTotal_Sens_AoA(void);
2937 
2943  virtual su2double GetTotal_Sens_Press(void);
2944 
2950  virtual su2double GetTotal_Sens_Temp(void);
2951 
2958  virtual su2double GetTotal_Sens_BPress(void);
2959 
2964  virtual su2double GetDensity_Inf(void);
2965 
2971  virtual su2double GetDensity_Inf(unsigned short val_var);
2972 
2977  virtual su2double GetModVelocity_Inf(void);
2978 
2983  virtual su2double GetDensity_Energy_Inf(void);
2984 
2989  virtual su2double GetPressure_Inf(void);
2990 
2996  virtual su2double GetDensity_Velocity_Inf(unsigned short val_dim);
2997 
3004  virtual su2double GetDensity_Velocity_Inf(unsigned short val_dim, unsigned short val_var);
3005 
3011  virtual su2double GetVelocity_Inf(unsigned short val_dim);
3012 
3017  virtual su2double *GetVelocity_Inf(void);
3018 
3023  virtual su2double GetViscosity_Inf(void);
3024 
3029  virtual su2double GetTke_Inf(void);
3030 
3037  virtual su2double GetCSensitivity(unsigned short val_marker, unsigned long val_vertex);
3038 
3043  virtual su2double* GetConstants();
3044 
3049  virtual su2double GetOneD_TotalPress(void);
3050 
3055  virtual void SetOneD_TotalPress(su2double AveragePressure);
3056 
3061  virtual su2double GetOneD_Mach(void);
3062 
3067  virtual void SetOneD_Mach(su2double AverageMach);
3068 
3073  virtual su2double GetOneD_Temp(void);
3074 
3079  virtual void SetOneD_Temp(su2double AverageTemperature);
3080 
3085  virtual su2double GetOneD_MassFlowRate(void);
3086 
3091  virtual void SetOneD_MassFlowRate(su2double MassFlowRate);
3092 
3097  virtual su2double GetOneD_FluxAvgPress(void);
3098 
3103  virtual void SetOneD_FluxAvgPress(su2double PressureRef);
3108  virtual su2double GetOneD_FluxAvgDensity(void);
3109 
3114  virtual void SetOneD_FluxAvgDensity(su2double DensityRef);
3115 
3120  virtual su2double GetOneD_FluxAvgVelocity(void);
3121 
3126  virtual void SetOneD_FluxAvgVelocity(su2double VelocityRef);
3127 
3132  virtual su2double GetOneD_FluxAvgEntalpy(void);
3137  virtual void SetOneD_FluxAvgEntalpy(su2double EnthalpyRef);
3138 
3145  virtual void SetFEA_Load(CSolver ***flow_solution, CGeometry **fea_geometry,
3146  CGeometry **flow_geometry, CConfig *fea_config,
3147  CConfig *flow_config, CNumerics *fea_numerics);
3148 
3155  virtual void SetFEA_Load_Int(CSolver ***flow_solution, CGeometry **fea_geometry,
3156  CGeometry **flow_geometry, CConfig *fea_config,
3157  CConfig *flow_config, CNumerics *fea_numerics);
3158 
3168  virtual void Copy_Zone_Solution(CSolver ***solver1_solution,
3169  CGeometry **solver1_geometry,
3170  CConfig *solver1_config,
3171  CSolver ***solver2_solution,
3172  CGeometry **solver2_geometry,
3173  CConfig *solver2_config);
3174 
3182  virtual void SetInitialCondition(CGeometry **geometry,
3183  CSolver ***solver_container,
3184  CConfig *config, unsigned long ExtIter);
3185 
3193  virtual void ResetInitialCondition(CGeometry **geometry,
3194  CSolver ***solver_container,
3195  CConfig *config, unsigned long ExtIter);
3196 
3204  virtual void SetFlow_Displacement(CGeometry **flow_geometry,
3205  CVolumetricMovement *flow_grid_movement,
3206  CConfig *flow_config, CConfig *fea_config,
3207  CGeometry **fea_geometry,
3208  CSolver ***fea_solution);
3209 
3217  virtual void SetFlow_Displacement_Int(CGeometry **flow_geometry,
3218  CVolumetricMovement *flow_grid_movement,
3219  CConfig *flow_config, CConfig *fea_config,
3220  CGeometry **fea_geometry,
3221  CSolver ***fea_solution);
3222 
3229  virtual void PredictStruct_Displacement(CGeometry **fea_geometry,
3230  CConfig *fea_config,
3231  CSolver ***fea_solution);
3232 
3239  virtual void ComputeAitken_Coefficient(CGeometry **fea_geometry,
3240  CConfig *fea_config,
3241  CSolver ***fea_solution,
3242  unsigned long iFSIIter);
3243 
3244 
3251  virtual void SetAitken_Relaxation(CGeometry **fea_geometry,
3252  CConfig *fea_config,
3253  CSolver ***fea_solution);
3254 
3261  virtual void Update_StructSolution(CGeometry **fea_geometry,
3262  CConfig *fea_config,
3263  CSolver ***fea_solution);
3264 
3272  virtual void LoadRestart(CGeometry **geometry, CSolver ***solver,
3273  CConfig *config, int val_iter);
3274 
3282  virtual void LoadRestart_FSI(CGeometry *geometry, CSolver ***solver,
3283  CConfig *config, int val_iter);
3284 
3291  void Gauss_Elimination(su2double** A, su2double* rhs, unsigned short nVar);
3292 
3300  void Aeroelastic(CSurfaceMovement *surface_movement, CGeometry *geometry, CConfig *config, unsigned long ExtIter);
3301 
3308  void SetUpTypicalSectionWingModel(vector<vector<su2double> >& PHI, vector<su2double>& w, CConfig *config);
3309 
3320  void SolveTypicalSectionWingModel(CGeometry *geometry, su2double Cl, su2double Cm, CConfig *config, unsigned short val_Marker, vector<su2double>& displacements);
3321 
3327  virtual void RegisterSolution(CGeometry *geometry, CConfig *config);
3328 
3334  virtual void RegisterOutput(CGeometry *geometry, CConfig *config);
3335 
3341  virtual void SetAdjoint_Output(CGeometry *geometry, CConfig *config);
3342 
3349  virtual void ExtractAdjoint_Solution(CGeometry *geometry, CConfig *config);
3350 
3355  virtual void RegisterObj_Func(CConfig *config);
3356 
3362  virtual void SetSurface_Sensitivity(CGeometry *geometry, CConfig* config);
3363 
3369  virtual void SetSensitivity(CGeometry *geometry, CConfig *config);
3370 
3371  virtual void SetAdj_ObjFunc(CGeometry *geometry, CConfig* config);
3372 
3377  virtual void SetFSI_ConvValue(unsigned short val_index, su2double val_criteria);
3378 
3384  virtual su2double GetFSI_ConvValue(unsigned short val_index);
3385 
3391  virtual void Set_Prestretch(CGeometry *geometry, CConfig *config);
3392 
3400  virtual void Compute_StiffMatrix(CGeometry *geometry, CSolver **solver_container, CNumerics **numerics, CConfig *config);
3401 
3409  virtual void Compute_StiffMatrix_NodalStressRes(CGeometry *geometry, CSolver **solver_container, CNumerics **numerics, CConfig *config);
3410 
3411 
3419  virtual void Compute_MassMatrix(CGeometry *geometry, CSolver **solver_container, CNumerics **numerics, CConfig *config);
3420 
3428  virtual void Compute_NodalStressRes(CGeometry *geometry, CSolver **solver_container, CNumerics **numerics, CConfig *config);
3429 
3438  virtual void Compute_NodalStress(CGeometry *geometry, CSolver **solver_container, CNumerics **numerics, CConfig *config);
3439 
3448  virtual void Compute_DeadLoad(CGeometry *geometry, CSolver **solver_container, CNumerics **numerics, CConfig *config);
3449 
3456  virtual void Solve_System(CGeometry *geometry, CSolver **solver_container, CConfig *config);
3457 
3458 
3466  virtual void Initialize_SystemMatrix(CGeometry *geometry, CSolver **solver_container, CConfig *config);
3467 
3472  virtual void Compute_IntegrationConstants(CConfig *config);
3473 
3478  virtual su2double GetWAitken_Dyn(void);
3479 
3484  virtual su2double GetWAitken_Dyn_tn1(void);
3485 
3490  virtual void SetWAitken_Dyn(su2double waitk);
3491 
3496  virtual void SetWAitken_Dyn_tn1(su2double waitk_tn1);
3497 
3502  virtual void SetLoad_Increment(su2double val_loadIncrement);
3503 
3510  virtual unsigned long SetPrimitive_Variables(CSolver **solver_container, CConfig *config, bool Output);
3511 
3516  virtual void SetPressure_Inf(su2double p_inf);
3517 
3522  virtual void SetTemperature_Inf(su2double t_inf);
3523 
3528  virtual void SetRecording(CGeometry *geometry, CConfig *config, unsigned short kind_recording);
3529 
3535  virtual void RegisterVariables(CGeometry *geometry, CConfig *config, bool reset = false);
3536 
3542  virtual void ExtractAdjoint_Variables(CGeometry *geometry, CConfig *config);
3543 
3548  virtual void SetFreeStream_Solution(CConfig *config);
3549 };
3550 
3557 class CBaselineSolver : public CSolver {
3558 public:
3559 
3563  CBaselineSolver(void);
3564 
3572  CBaselineSolver(CGeometry *geometry, CConfig *config, unsigned short nVar, vector<string> field_names);
3573 
3579  CBaselineSolver(CGeometry *geometry, CConfig *config, unsigned short iMesh);
3580 
3586  void Set_MPI_Solution(CGeometry *geometry, CConfig *config);
3587 
3595  void LoadRestart(CGeometry **geometry, CSolver ***solver, CConfig *config, int val_iter);
3596 
3604  void LoadRestart_FSI(CGeometry *geometry, CSolver ***solver, CConfig *config, int val_iter);
3605 
3609  virtual ~CBaselineSolver(void);
3610 
3611 };
3612 
3620 class CEulerSolver : public CSolver {
3621 protected:
3622 
3623  su2double
3624  Mach_Inf,
3625  Density_Inf,
3626  Energy_Inf,
3627  Temperature_Inf,
3628  Pressure_Inf,
3629  *Velocity_Inf;
3631  su2double
3632  *CD_Inv,
3633  *CL_Inv,
3634  *CSF_Inv,
3635  *CMx_Inv,
3636  *CMy_Inv,
3637  *CMz_Inv,
3638  *CFx_Inv,
3639  *CFy_Inv,
3640  *CFz_Inv,
3641  *Surface_CL_Inv,
3642  *Surface_CD_Inv,
3643  *Surface_CSF_Inv,
3644  *Surface_CEff_Inv,
3645  *Surface_CFx_Inv,
3646  *Surface_CFy_Inv,
3647  *Surface_CFz_Inv,
3648  *Surface_CMx_Inv,
3649  *Surface_CMy_Inv,
3650  *Surface_CMz_Inv,
3651  *CEff_Inv,
3652  *CMerit_Inv,
3653  *CT_Inv,
3654  *CQ_Inv,
3655  *CEquivArea_Inv,
3656  *CNearFieldOF_Inv,
3657  *CD_Mnt,
3658  *CL_Mnt,
3659  *CSF_Mnt,
3660  *CMx_Mnt,
3661  *CMy_Mnt,
3662  *CMz_Mnt,
3663  *CFx_Mnt,
3664  *CFy_Mnt,
3665  *CFz_Mnt,
3666  *Surface_CL_Mnt,
3667  *Surface_CD_Mnt,
3668  *Surface_CSF_Mnt,
3669  *Surface_CEff_Mnt,
3670  *Surface_CFx_Mnt,
3671  *Surface_CFy_Mnt,
3672  *Surface_CFz_Mnt,
3673  *Surface_CMx_Mnt,
3674  *Surface_CMy_Mnt,
3675  *Surface_CMz_Mnt,
3676  *CEff_Mnt,
3677  *CMerit_Mnt,
3678  *CT_Mnt,
3679  *CQ_Mnt,
3680  *CEquivArea_Mnt,
3681  **CPressure,
3682  **CPressureTarget,
3683  **HeatFlux,
3684  **HeatFluxTarget,
3685  **YPlus,
3686  ***CharacPrimVar,
3687  ***DonorPrimVar,
3688  *ForceInviscid,
3689  *MomentInviscid,
3690  *ForceMomentum,
3691  *MomentMomentum;
3692  su2double *Inflow_MassFlow,
3693  *Exhaust_MassFlow,
3694  *Inflow_Pressure,
3695  *Inflow_Mach,
3696  *Inflow_Area,
3697  *Exhaust_Area,
3698  *Exhaust_Pressure,
3699  *Exhaust_Temperature,
3700  Inflow_MassFlow_Total,
3701  Exhaust_MassFlow_Total,
3702  Inflow_Pressure_Total,
3703  Inflow_Mach_Total,
3704  InverseDesign;
3705  unsigned long **DonorGlobalIndex;
3706  su2double **ActDisk_DeltaP,
3707  **ActDisk_DeltaT;
3708  su2double **Inlet_Ptotal,
3709  **Inlet_Ttotal,
3710  ***Inlet_FlowDir;
3712  su2double
3713  AllBound_CD_Inv,
3714  AllBound_CL_Inv,
3715  AllBound_CSF_Inv,
3716  AllBound_CMx_Inv,
3717  AllBound_CMy_Inv,
3718  AllBound_CMz_Inv,
3719  AllBound_CFx_Inv,
3720  AllBound_CFy_Inv,
3721  AllBound_CFz_Inv,
3722  AllBound_CEff_Inv,
3723  AllBound_CMerit_Inv,
3724  AllBound_CT_Inv,
3725  AllBound_CQ_Inv,
3726  AllBound_CEquivArea_Inv,
3727  AllBound_CNearFieldOF_Inv;
3729  su2double
3730  AllBound_CD_Mnt,
3731  AllBound_CL_Mnt,
3732  AllBound_CSF_Mnt,
3733  AllBound_CMx_Mnt,
3734  AllBound_CMy_Mnt,
3735  AllBound_CMz_Mnt,
3736  AllBound_CFx_Mnt,
3737  AllBound_CFy_Mnt,
3738  AllBound_CFz_Mnt,
3739  AllBound_CEff_Mnt,
3740  AllBound_CMerit_Mnt,
3741  AllBound_CT_Mnt,
3742  AllBound_CQ_Mnt;
3744  su2double
3745  OneD_TotalPress,
3746  OneD_Mach,
3747  OneD_Temp,
3748  OneD_PressureRef,
3749  OneD_MassFlowRate,
3750  OneD_DensityRef,
3751  OneD_EnthalpyRef,
3752  OneD_VelocityRef,
3753  Total_ComboObj,
3754  AoA_Prev,
3755  Total_CD,
3756  Total_CL,
3757  Total_CL_Prev,
3758  Total_CD_SolidSurf,
3759  Total_CD_Prev,
3760  Total_NetCThrust,
3761  Total_Power,
3763  Total_IDC,
3764  Total_IDC_Mach,
3765  Total_IDR,
3766  Total_DC60,
3767  Total_MFR,
3768  Total_Prop_Eff,
3769  Total_ByPassProp_Eff,
3770  Total_Adiab_Eff,
3771  Total_Poly_Eff,
3772  Total_NetCThrust_Prev,
3773  Total_BCThrust_Prev,
3774  Total_Custom,
3775  Total_CSF,
3776  Total_CMx,
3777  Total_CMy,
3778  Total_CMz,
3779  Total_CFx,
3780  Total_CFy,
3781  Total_CFz,
3782  Total_CEff,
3783  Total_CMerit,
3784  Total_CT,
3785  Total_CQ,
3786  Total_Heat,
3787  Total_MaxHeat,
3788  Total_AeroCD,
3789  Total_RadialDistortion,
3790  Total_CircumferentialDistortion,
3791  Total_CEquivArea,
3792  Total_CNearFieldOF,
3793  Total_CpDiff,
3794  Total_HeatFluxDiff,
3795  Total_MassFlowRate;
3796  su2double *Surface_CL,
3797  *Surface_CD,
3798  *Surface_CSF,
3799  *Surface_CEff,
3800  *Surface_CFx,
3801  *Surface_CFy,
3802  *Surface_CFz,
3803  *Surface_CMx,
3804  *Surface_CMy,
3805  *Surface_CMz,
3806  *Surface_HF_Visc,
3808  su2double *iPoint_UndLapl,
3809  *jPoint_UndLapl;
3810  su2double *SecondaryVar_i,
3811  *SecondaryVar_j;
3812  su2double *PrimVar_i,
3813  *PrimVar_j;
3814  su2double **LowMach_Precontioner;
3815  unsigned long nMarker,
3816  *nVertex;
3818  euler_implicit,
3819  least_squares;
3820  su2double Gamma;
3821  su2double Gamma_Minus_One;
3823  su2double *Primitive,
3824  *Primitive_i,
3825  *Primitive_j;
3827  su2double *Secondary,
3828  *Secondary_i,
3829  *Secondary_j;
3831  su2double Cauchy_Value,
3832  Cauchy_Func;
3833  unsigned short Cauchy_Counter;
3834  su2double *Cauchy_Serie;
3835  su2double Old_Func,
3836  New_Func;
3837  su2double AoA_old;
3838  unsigned long AoA_Counter;
3839  unsigned long BCThrust_Counter;
3840 
3843  su2double **AveragedVelocity,
3844  **AveragedNormal,
3845  **AveragedGridVel,
3846  **AveragedFlux,
3847  **TotalFlux,
3848  *TotalArea,
3849  *AveragedNormalVelocity,
3850  *ExtAveragedNormalVelocity,
3851  *AveragedTangVelocity,
3852  *ExtAveragedTangVelocity,
3853  *AveragedTangGridVelocity,
3854  *AveragedMach,
3855  *AveragedNormalMach,
3856  *AveragedTangMach,
3857  *AveragedEnthalpy,
3858  *AveragedPressure,
3859  *AveragedTotTemperature,
3860  *AveragedTotPressure,
3861  *ExtAveragedPressure,
3862  *ExtAveragedTotTemperature,
3863  *ExtAveragedTotPressure,
3864  *AveragedDensity,
3865  *ExtAveragedDensity,
3866  *AveragedSoundSpeed,
3867  *AveragedEntropy,
3868  *MassFlow,
3869  *FlowAngle;
3870 
3871  su2double *TotalStaticEfficiency,
3872  *TotalTotalEfficiency,
3873  *KineticEnergyLoss,
3874  *TotalPressureLoss,
3875  *MassFlowIn,
3876  *MassFlowOut,
3877  *FlowAngleIn,
3878  *FlowAngleOut,
3879  *EulerianWork,
3880  *TotalEnthalpyIn,
3881  *PressureRatio,
3882  *PressureOut,
3883  *EnthalpyOut,
3884  *MachIn,
3885  *MachOut,
3886  *NormalMachIn,
3887  *NormalMachOut,
3888  *VelocityOutIs;
3889 
3890  /* Sliding meshes variables */
3891 
3892  su2double ***SlidingState;
3893 
3894 public:
3895 
3896 
3900  CEulerSolver(void);
3901 
3907  CEulerSolver(CGeometry *geometry, CConfig *config, unsigned short iMesh);
3908 
3912  virtual ~CEulerSolver(void);
3913 
3919  void Set_MPI_Solution(CGeometry *geometry, CConfig *config);
3920 
3926  void Set_MPI_Solution_Gradient(CGeometry *geometry, CConfig *config);
3927 
3933  void Set_MPI_Solution_Old(CGeometry *geometry, CConfig *config);
3934 
3940  void Set_MPI_Solution_Limiter(CGeometry *geometry, CConfig *config);
3941 
3947  void Set_MPI_Primitive_Limiter(CGeometry *geometry, CConfig *config);
3948 
3949  // /*!
3950  // * \brief Impose the send-receive boundary condition.
3951  // * \param[in] geometry - Geometrical definition of the problem.
3952  // * \param[in] config - Definition of the particular problem.
3953  // */
3954  // void Set_MPI_Secondary_Limiter(CGeometry *geometry, CConfig *config);
3955 
3961  void SetNondimensionalization(CGeometry *geometry, CConfig *config, unsigned short iMesh);
3962 
3967  CFluidModel* GetFluidModel(void);
3968 
3969 
3974  su2double GetDensity_Inf(void);
3975 
3980  su2double GetModVelocity_Inf(void);
3981 
3986  su2double GetDensity_Energy_Inf(void);
3987 
3992  su2double GetPressure_Inf(void);
3993 
3999  su2double GetDensity_Velocity_Inf(unsigned short val_dim);
4000 
4006  su2double GetVelocity_Inf(unsigned short val_dim);
4007 
4012  su2double *GetVelocity_Inf(void);
4013 
4022  void SetTime_Step(CGeometry *geometry, CSolver **solver_container, CConfig *config,
4023  unsigned short iMesh, unsigned long Iteration);
4024 
4034  void Centered_Residual(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics,
4035  CConfig *config, unsigned short iMesh, unsigned short iRKStep);
4036 
4045  void Upwind_Residual(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics,
4046  CConfig *config, unsigned short iMesh);
4047 
4053  void ComputeConsExtrapolation(CConfig *config);
4063  void Source_Residual(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics, CNumerics *second_numerics,
4064  CConfig *config, unsigned short iMesh);
4065 
4074  void Source_Template(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics,
4075  CConfig *config, unsigned short iMesh);
4076 
4086  void Preprocessing(CGeometry *geometry, CSolver **solver_container, CConfig *config, unsigned short iMesh, unsigned short iRKStep, unsigned short RunTime_EqSystem, bool Output);
4087 
4095  void Postprocessing(CGeometry *geometry, CSolver **solver_container, CConfig *config, unsigned short iMesh);
4096 
4104  unsigned long SetPrimitive_Variables(CSolver **solver_container, CConfig *config, bool Output);
4105 
4112  void SetDissipation_Switch(CGeometry *geometry, CConfig *config);
4113 
4120  void Set_MPI_Dissipation_Switch(CGeometry *geometry, CConfig *config);
4121 
4128  void SetPrimitive_Gradient_GG(CGeometry *geometry, CConfig *config);
4129 
4136  void SetPrimitive_Gradient_LS(CGeometry *geometry, CConfig *config);
4137 
4138  // /*!
4139  // * \brief Compute the gradient of the primitive variables using Green-Gauss method,
4140  // * and stores the result in the <i>Gradient_Primitive</i> variable.
4141  // * \param[in] geometry - Geometrical definition of the problem.
4142  // * \param[in] config - Definition of the particular problem.
4143  // */
4144  // void SetSecondary_Gradient_GG(CGeometry *geometry, CConfig *config);
4145 
4146  // /*!
4147  // * \brief Compute the gradient of the primitive variables using a Least-Squares method,
4148  // * and stores the result in the <i>Gradient_Primitive</i> variable.
4149  // * \param[in] geometry - Geometrical definition of the problem.
4150  // * \param[in] config - Definition of the particular problem.
4151  // */
4152  // void SetSecondary_Gradient_LS(CGeometry *geometry, CConfig *config);
4153 
4160  void Set_MPI_Primitive_Gradient(CGeometry *geometry, CConfig *config);
4161 
4167  void SetPrimitive_Limiter(CGeometry *geometry, CConfig *config);
4168 
4169  // /*!
4170  // * \brief Compute the gradient of the primitive variables using a Least-Squares method,
4171  // * and stores the result in the <i>Gradient_Primitive</i> variable.
4172  // * \param[in] geometry - Geometrical definition of the problem.
4173  // * \param[in] config - Definition of the particular problem.
4174  // */
4175  // void Set_MPI_Secondary_Gradient(CGeometry *geometry, CConfig *config);
4176 
4177  // /*!
4178  // * \brief Compute the limiter of the primitive variables.
4179  // * \param[in] geometry - Geometrical definition of the problem.
4180  // * \param[in] config - Definition of the particular problem.
4181  // */
4182  // void SetSecondary_Limiter(CGeometry *geometry, CConfig *config);
4183 
4189  void SetPreconditioner(CConfig *config, unsigned long iPoint);
4190 
4196  void SetUndivided_Laplacian(CGeometry *geometry, CConfig *config);
4197 
4203  void Set_MPI_Undivided_Laplacian(CGeometry *geometry, CConfig *config);
4204 
4210  void SetMax_Eigenvalue(CGeometry *geometry, CConfig *config);
4211 
4217  void Set_MPI_MaxEigenvalue(CGeometry *geometry, CConfig *config);
4218 
4224  void Set_MPI_ActDisk(CSolver **solver_container, CGeometry *geometry, CConfig *config);
4225 
4231  void Set_MPI_Nearfield(CGeometry *geometry, CConfig *config);
4232 
4238  void Set_MPI_Interface(CGeometry *geometry, CConfig *config);
4239 
4245  void Compute_ComboObj(CConfig *config);
4246 
4257  void BC_Euler_Wall(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics, CConfig *config,
4258  unsigned short val_marker);
4259 
4269  void BC_Far_Field(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics,
4270  CConfig *config, unsigned short val_marker);
4271 
4281  void BC_Sym_Plane(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker);
4282 
4290  void BC_Fluid_Interface(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics, CConfig *config);
4291 
4301  void BC_ActDisk_Inlet(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics,
4302  CConfig *config, unsigned short val_marker);
4303 
4313  void BC_ActDisk_Outlet(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics,
4314  CConfig *config, unsigned short val_marker);
4315 
4325  void BC_ActDisk(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics,
4326  CConfig *config, unsigned short val_marker, bool inlet_surface);
4327 
4335  void BC_Interface_Boundary(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics,
4336  CConfig *config, unsigned short val_marker);
4337 
4344  void BC_NearField_Boundary(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics,
4345  CConfig *config, unsigned short val_marker);
4346 
4354  void BC_Dirichlet(CGeometry *geometry, CSolver **solver_container, CConfig *config,
4355  unsigned short val_marker);
4356 
4368  void BC_Riemann(CGeometry *geometry, CSolver **solver_container,
4369  CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker);
4370 
4382  void BC_NonReflecting(CGeometry *geometry, CSolver **solver_container,
4383  CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker);
4384 
4385 
4395  void BC_Inlet(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics,
4396  CConfig *config, unsigned short val_marker);
4397 
4407  void BC_Supersonic_Inlet(CGeometry *geometry, CSolver **solver_container,
4408  CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker);
4409 
4419  void BC_Supersonic_Outlet(CGeometry *geometry, CSolver **solver_container,
4420  CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker);
4421 
4430  void BC_Custom(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics,
4431  CConfig *config, unsigned short val_marker);
4432 
4442  void BC_Outlet(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics,
4443  CConfig *config, unsigned short val_marker);
4444 
4454  void BC_Engine_Inflow(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics,
4455  CConfig *config, unsigned short val_marker);
4456 
4466  void BC_Engine_Exhaust(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics,
4467  CConfig *config, unsigned short val_marker);
4468 
4476  void Mixing_Process(CGeometry *geometry, CSolver **solver_container, CConfig *config, unsigned short val_Marker);
4477 
4486  void MixedOut_Average (su2double val_init_pressure, su2double *val_Averaged_Flux, su2double *val_normal, su2double *pressure_mix, su2double *density_mix);
4487 
4496  void MixedOut_Root_Function(su2double *pressure, su2double *val_Averaged_Flux, su2double *val_normal, su2double *valfunc, su2double *density);
4497 
4507  void Boundary_Fourier(CGeometry *geometry, CSolver **solver_container, CConfig *config, unsigned short val_Marker, vector<std::complex<su2double> > &c4k,signed long &nboundaryvertex);
4508 
4519  void Boundary_Fourier(CGeometry *geometry, CSolver **solver_container, CConfig *config, unsigned short val_Marker, vector<std::complex<su2double> >& c2k,vector<std::complex<su2double> >& c3k,signed long& nboundaryvertex);
4520 
4527  void SetExtAveragedValue(CSolver *solver_container, unsigned short intMarker, unsigned short extMarker);
4528 
4534  su2double GetAveragedDensity(unsigned short valMarker);
4535 
4541  su2double GetAveragedTotPressure(unsigned short valMarker);
4542 
4548  su2double GetTotalPressureLoss(unsigned short inMarkerTP);
4549 
4555  su2double GetKineticEnergyLoss(unsigned short inMarkerTP);
4556 
4562  su2double GetTotalTotalEfficiency(unsigned short inMarkerTP);
4563 
4569  su2double GetTotalStaticEfficiency(unsigned short inMarkerTP);
4570 
4576  su2double GetEulerianWork(unsigned short inMarkerTP);
4577 
4583  su2double GetTotalEnthalpyIn(unsigned short inMarkerTP);
4584 
4590  su2double GetFlowAngleIn(unsigned short inMarkerTP);
4591 
4597  su2double GetFlowAngleOut(unsigned short inMarkerTP);
4598 
4604  su2double GetMassFlowIn(unsigned short inMarkerTP);
4605 
4611  su2double GetMassFlowOut(unsigned short inMarkerTP);
4612 
4618  su2double GetMachIn(unsigned short inMarkerTP);
4619 
4625  su2double GetMachOut(unsigned short inMarkerTP);
4626 
4632  su2double GetNormalMachIn(unsigned short inMarkerTP);
4633 
4639  su2double GetNormalMachOut(unsigned short inMarkerTP);
4640 
4646  su2double GetEnthalpyOut(unsigned short inMarkerTP);
4647 
4653  su2double GetVelocityOutIs(unsigned short inMarkerTP);
4654 
4660  su2double GetPressureOut(unsigned short inMarkerTP);
4661 
4667  su2double GetPressureRatio(unsigned short inMarkerTP);
4668 
4674  su2double GetAveragedTotTemperature(unsigned short valMarker);
4675 
4681  su2double GetAveragedPressure(unsigned short valMarker);
4682 
4688  su2double GetMassFlow(unsigned short valMarker);
4689 
4695  su2double GetFlowAngle(unsigned short valMarker);
4696 
4702  su2double GetAveragedMach(unsigned short valMarker);
4703 
4709  su2double GetAveragedNormalMach(unsigned short valMarker);
4710 
4716  su2double GetAveragedEnthalpy(unsigned short valMarker);
4717 
4723  su2double GetAveragedEntropy(unsigned short valMarker);
4724 
4730  su2double* GetAveragedVelocity(unsigned short valMarker);
4731 
4737  su2double* GetAveragedGridVelocity(unsigned short valMarker);
4738 
4744  su2double GetAveragedNormalVelocity(unsigned short valMarker);
4745 
4751  su2double GetAveragedTangVelocity(unsigned short valMarker);
4752 
4758  static bool Compareval(std::vector<su2double> a,std::vector<su2double> b);
4759 
4767  void ExplicitRK_Iteration(CGeometry *geometry, CSolver **solver_container, CConfig *config,
4768  unsigned short iRKStep);
4769 
4776  void GetSurface_Properties(CGeometry *geometry, CNumerics *conv_numerics,
4777  CNumerics *visc_numerics, CConfig *config, unsigned short iMesh, bool Output);
4778 
4784  void GetPower_Properties(CGeometry *geometry, CConfig *config, unsigned short iMesh, bool Output);
4785 
4791  void GetSurface_Distortion(CGeometry *geometry, CConfig *config, unsigned short iMesh, bool Output);
4792 
4801  void SetActDisk_BCThrust(CGeometry *geometry, CSolver **solver_container,
4802  CConfig *config, unsigned short iMesh, bool Output);
4803 
4812  void SetFarfield_AoA(CGeometry *geometry, CSolver **solver_container,
4813  CConfig *config, unsigned short iMesh, bool Output);
4814 
4821  void ExplicitEuler_Iteration(CGeometry *geometry, CSolver **solver_container, CConfig *config);
4822 
4829  void ImplicitEuler_Iteration(CGeometry *geometry, CSolver **solver_container, CConfig *config);
4830 
4836  void Pressure_Forces(CGeometry *geometry, CConfig *config);
4837 
4843  void Momentum_Forces(CGeometry *geometry, CConfig *config);
4844 
4851  void TurboPerformance(CSolver *solver, CConfig *config, unsigned short inMarker, unsigned short outMarker, unsigned short Kind_TurboPerf , unsigned short inMarkerTP );
4852 
4859  void StoreTurboPerformance(CSolver *solver, unsigned short inMarkerTP );
4860 
4867  su2double GetSlidingState(unsigned short val_marker, unsigned long val_vertex, unsigned short val_state);
4868 
4874  su2double GetCL_Inv(unsigned short val_marker);
4875 
4881  su2double GetCMz_Inv(unsigned short val_marker);
4882 
4888  su2double GetSurface_CL(unsigned short val_marker);
4889 
4895  su2double GetSurface_CD(unsigned short val_marker);
4896 
4902  su2double GetSurface_CSF(unsigned short val_marker);
4903 
4909  su2double GetSurface_CEff(unsigned short val_marker);
4910 
4916  su2double GetSurface_CFx(unsigned short val_marker);
4917 
4923  su2double GetSurface_CFy(unsigned short val_marker);
4924 
4930  su2double GetSurface_CFz(unsigned short val_marker);
4931 
4937  su2double GetSurface_CMx(unsigned short val_marker);
4938 
4944  su2double GetSurface_CMy(unsigned short val_marker);
4945 
4951  su2double GetSurface_CMz(unsigned short val_marker);
4952 
4958  su2double GetSurface_CL_Inv(unsigned short val_marker);
4959 
4965  su2double GetSurface_CD_Inv(unsigned short val_marker);
4966 
4972  su2double GetSurface_CSF_Inv(unsigned short val_marker);
4973 
4979  su2double GetSurface_CEff_Inv(unsigned short val_marker);
4980 
4986  su2double GetSurface_CFx_Inv(unsigned short val_marker);
4987 
4993  su2double GetSurface_CFy_Inv(unsigned short val_marker);
4994 
5000  su2double GetSurface_CFz_Inv(unsigned short val_marker);
5001 
5007  su2double GetSurface_CMx_Inv(unsigned short val_marker);
5008 
5014  su2double GetSurface_CMy_Inv(unsigned short val_marker);
5015 
5021  su2double GetSurface_CMz_Inv(unsigned short val_marker);
5022 
5028  su2double GetSurface_CL_Mnt(unsigned short val_marker);
5029 
5035  su2double GetSurface_CD_Mnt(unsigned short val_marker);
5036 
5042  su2double GetSurface_CSF_Mnt(unsigned short val_marker);
5043 
5049  su2double GetSurface_CEff_Mnt(unsigned short val_marker);
5050 
5056  su2double GetSurface_CFx_Mnt(unsigned short val_marker);
5057 
5063  su2double GetSurface_CFy_Mnt(unsigned short val_marker);
5064 
5070  su2double GetSurface_CFz_Mnt(unsigned short val_marker);
5071 
5077  su2double GetSurface_CMx_Mnt(unsigned short val_marker);
5078 
5084  su2double GetSurface_CMy_Mnt(unsigned short val_marker);
5085 
5091  su2double GetSurface_CMz_Mnt(unsigned short val_marker);
5092 
5098  su2double GetCD_Inv(unsigned short val_marker);
5099 
5105  su2double GetInflow_MassFlow(unsigned short val_marker);
5106 
5112  su2double GetExhaust_MassFlow(unsigned short val_marker);
5113 
5119  su2double GetInflow_Pressure(unsigned short val_marker);
5120 
5126  su2double GetInflow_Mach(unsigned short val_marker);
5127 
5133  su2double GetCSF_Inv(unsigned short val_marker);
5134 
5140  su2double GetCEff_Inv(unsigned short val_marker);
5141 
5146  su2double GetTotal_CSF(void);
5147 
5152  su2double GetTotal_CEff(void);
5153 
5158  su2double GetTotal_CEquivArea(void);
5159 
5164  su2double GetTotal_AeroCD(void);
5165 
5170  su2double GetTotal_RadialDistortion(void);
5171 
5176  su2double GetTotal_CircumferentialDistortion(void);
5177 
5182  su2double GetTotal_CpDiff(void);
5183 
5188  su2double GetTotal_HeatFluxDiff(void);
5189 
5194  su2double GetTotal_CNearFieldOF(void);
5195 
5201  void AddTotal_ComboObj(su2double val_obj);
5202 
5207  void SetTotal_CEquivArea(su2double val_cequivarea);
5208 
5213  void SetTotal_AeroCD(su2double val_aerocd);
5214 
5219  void SetTotal_RadialDistortion(su2double val_distortion);
5220 
5225  void SetTotal_CircumferentialDistortion(su2double val_distortion);
5226 
5231  void SetTotal_CpDiff(su2double val_pressure);
5232 
5237  void SetTotal_HeatFluxDiff(su2double val_heat);
5238 
5243  void SetTotal_CNearFieldOF(su2double val_cnearfieldpress);
5244 
5250  void SetTotal_ComboObj(su2double ComboObj);
5251 
5257  su2double GetTotal_ComboObj(void);
5258 
5263  su2double GetTotal_CL(void);
5264 
5269  su2double GetTotal_CD(void);
5270 
5275  su2double GetTotal_NetCThrust(void);
5276 
5281  su2double GetTotal_Power(void);
5282 
5287  su2double GetTotal_CD_SolidSurf(void);
5288 
5293  su2double GetTotal_ReverseFlow(void);
5294 
5299  su2double GetTotal_MFR(void);
5300 
5305  su2double GetTotal_Prop_Eff(void);
5306 
5311  su2double GetTotal_ByPassProp_Eff(void);
5312 
5317  su2double GetTotal_Adiab_Eff(void);
5318 
5323  su2double GetTotal_Poly_Eff(void);
5324 
5329  su2double GetTotal_IDC(void);
5330 
5335  su2double GetTotal_IDC_Mach(void);
5336 
5341  su2double GetTotal_IDR(void);
5342 
5347  su2double GetTotal_DC60(void);
5348 
5353  su2double GetTotal_Custom(void);
5354 
5359  su2double GetTotal_CMx(void);
5360 
5365  su2double GetTotal_CMy(void);
5366 
5371  su2double GetTotal_CMz(void);
5372 
5377  su2double GetTotal_CFx(void);
5378 
5383  su2double GetTotal_CFy(void);
5384 
5389  su2double GetTotal_CFz(void);
5390 
5395  su2double GetTotal_CT(void);
5396 
5401  void SetTotal_CT(su2double val_Total_CT);
5402 
5407  su2double GetTotal_CQ(void);
5408 
5413  su2double GetTotal_HeatFlux(void);
5414 
5419  su2double GetTotal_MaxHeatFlux(void);
5420 
5425  void SetTotal_CQ(su2double val_Total_CQ);
5426 
5431  void SetTotal_HeatFlux(su2double val_Total_Heat);
5432 
5437  void SetTotal_MaxHeatFlux(su2double val_Total_MaxHeat);
5438 
5443  su2double GetTotal_CMerit(void);
5444 
5449  void SetTotal_CD(su2double val_Total_CD);
5450 
5455  void SetTotal_CL(su2double val_Total_CL);
5456 
5461  void SetTotal_NetCThrust(su2double val_Total_NetCThrust);
5462 
5467  void SetTotal_Power(su2double val_Total_Power);
5468 
5473  void SetTotal_CD_SolidSurf(su2double val_Total_CD_SolidSurf);
5474 
5479  void SetTotal_ReverseFlow(su2double val_ReverseFlow);
5480 
5485  void SetTotal_MFR(su2double val_Total_MFR);
5486 
5491  void SetTotal_Prop_Eff(su2double val_Total_Prop_Eff);
5492 
5497  void SetTotal_ByPassProp_Eff(su2double val_Total_ByPassProp_Eff);
5498 
5503  void SetTotal_Adiab_Eff(su2double val_Total_Adiab_Eff);
5504 
5509  void SetTotal_Poly_Eff(su2double val_Total_Poly_Eff);
5510 
5515  void SetTotal_IDC(su2double val_Total_IDC);
5516 
5521  void SetTotal_IDC_Mach(su2double val_Total_IDC_Mach);
5522 
5527  void SetTotal_IDR(su2double val_Total_IDR);
5528 
5533  void SetTotal_DC60(su2double val_Total_DC60);
5534 
5539  void SetTotal_Custom(su2double val_Total_Custom, su2double val_coeff);
5540 
5545  void AddTotal_Custom(su2double val_Total_Custom, su2double val_coeff);
5546 
5551  su2double GetAllBound_CL_Inv(void);
5552 
5557  su2double GetAllBound_CD_Inv(void);
5558 
5563  su2double GetAllBound_CSF_Inv(void);
5564 
5569  su2double GetAllBound_CEff_Inv(void);
5570 
5575  su2double GetAllBound_CMx_Inv(void);
5576 
5581  su2double GetAllBound_CMy_Inv(void);
5582 
5587  su2double GetAllBound_CMz_Inv(void);
5588 
5593  su2double GetAllBound_CFx_Inv(void);
5594 
5599  su2double GetAllBound_CFy_Inv(void);
5600 
5605  su2double GetAllBound_CFz_Inv(void);
5606 
5611  su2double GetAllBound_CL_Mnt(void);
5612 
5617  su2double GetAllBound_CD_Mnt(void);
5618 
5623  su2double GetAllBound_CSF_Mnt(void);
5624 
5629  su2double GetAllBound_CEff_Mnt(void);
5630 
5635  su2double GetAllBound_CMx_Mnt(void);
5636 
5641  su2double GetAllBound_CMy_Mnt(void);
5642 
5647  su2double GetAllBound_CMz_Mnt(void);
5648 
5653  su2double GetAllBound_CFx_Mnt(void);
5654 
5659  su2double GetAllBound_CFy_Mnt(void);
5660 
5665  su2double GetAllBound_CFz_Mnt(void);
5666 
5673  su2double GetCPressure(unsigned short val_marker, unsigned long val_vertex);
5674 
5681  su2double GetCPressureTarget(unsigned short val_marker, unsigned long val_vertex);
5682 
5689  void SetCPressureTarget(unsigned short val_marker, unsigned long val_vertex, su2double val_pressure);
5690 
5697  su2double *GetCharacPrimVar(unsigned short val_marker, unsigned long val_vertex);
5698 
5705  void SetCharacPrimVar(unsigned short val_marker, unsigned long val_vertex, unsigned short val_var, su2double val_value);
5706 
5713  su2double *GetDonorPrimVar(unsigned short val_marker, unsigned long val_vertex);
5714 
5721  void SetDonorPrimVar(unsigned short val_marker, unsigned long val_vertex, unsigned short val_var, su2double val_value);
5722 
5729  su2double GetDonorPrimVar(unsigned short val_marker, unsigned long val_vertex, unsigned short val_var);
5730 
5737  unsigned long GetDonorGlobalIndex(unsigned short val_marker, unsigned long val_vertex);
5738 
5745  void SetDonorGlobalIndex(unsigned short val_marker, unsigned long val_vertex, unsigned long val_index);
5746 
5753  su2double GetActDisk_DeltaP(unsigned short val_marker, unsigned long val_vertex);
5754 
5761  void SetActDisk_DeltaP(unsigned short val_marker, unsigned long val_vertex, su2double val_deltap);
5762 
5769  su2double GetActDisk_DeltaT(unsigned short val_marker, unsigned long val_vertex);
5770 
5777  void SetActDisk_DeltaT(unsigned short val_marker, unsigned long val_vertex, su2double val_deltat);
5778 
5785  su2double GetInlet_Ttotal(unsigned short val_marker, unsigned long val_vertex);
5786 
5793  su2double GetInlet_Ptotal(unsigned short val_marker, unsigned long val_vertex);
5794 
5801  su2double GetInlet_FlowDir(unsigned short val_marker, unsigned long val_vertex, unsigned short val_dim);
5802 
5809  void SetInlet_Ttotal(unsigned short val_marker, unsigned long val_vertex, su2double val_ttotal);
5810 
5817  void SetInlet_Ptotal(unsigned short val_marker, unsigned long val_vertex, su2double val_ptotal);
5818 
5825  void SetInlet_FlowDir(unsigned short val_marker, unsigned long val_vertex, unsigned short val_dim, su2double val_flowdir);
5826 
5830  su2double GetOneD_TotalPress(void);
5831 
5836  void SetOneD_TotalPress(su2double AveragePressure);
5837 
5841  su2double GetOneD_Mach(void);
5842 
5846  void SetOneD_Mach(su2double AverageMach);
5847 
5851  su2double GetOneD_Temp(void);
5852 
5856  void SetOneD_Temp(su2double AverageTemperature);
5857 
5861  su2double GetOneD_MassFlowRate(void);
5862 
5866  void SetOneD_MassFlowRate(su2double MassFlowRate);
5867 
5871  su2double GetOneD_FluxAvgPress(void);
5872 
5876  void SetOneD_FluxAvgPress(su2double PressureRef);
5877 
5881  su2double GetOneD_FluxAvgDensity(void);
5882 
5886  void SetOneD_FluxAvgDensity(su2double DensityRef);
5887 
5891  su2double GetOneD_FluxAvgVelocity(void);
5892 
5896  void SetOneD_FluxAvgVelocity(su2double VelocityRef);
5897 
5901  su2double GetOneD_FluxAvgEntalpy(void);
5902 
5906  void SetOneD_FluxAvgEntalpy(su2double EnthalpyRef);
5907 
5917  void SetResidual_DualTime(CGeometry *geometry, CSolver **solver_container, CConfig *config,
5918  unsigned short iRKStep, unsigned short iMesh, unsigned short RunTime_EqSystem);
5919 
5927  void SetFlow_Displacement(CGeometry **flow_geometry, CVolumetricMovement *flow_grid_movement, CConfig *flow_config, CConfig *fea_config,
5928  CGeometry **fea_geometry, CSolver ***fea_solution);
5929 
5937  void SetFlow_Displacement_Int(CGeometry **flow_geometry, CVolumetricMovement *flow_grid_movement, CConfig *flow_config, CConfig *fea_config,
5938  CGeometry **fea_geometry, CSolver ***fea_solution);
5939 
5947  void LoadRestart(CGeometry **geometry, CSolver ***solver, CConfig *config, int val_iter);
5948 
5956  void SetSlidingState(unsigned short val_marker, unsigned long val_vertex, unsigned short val_state, su2double component);
5957 
5965  void SetInitialCondition(CGeometry **geometry, CSolver ***solver_container, CConfig *config, unsigned long ExtIter);
5966 
5971  void SetPressure_Inf(su2double p_inf);
5972 
5977  void SetTemperature_Inf(su2double t_inf);
5978 
5983  void SetFreeStream_Solution(CConfig *config);
5984 };
5985 
5986 
5987 
5995 class CIncEulerSolver : public CSolver {
5996 protected:
5997 
5998  su2double
5999  Density_Inf,
6000  Temperature_Inf,
6001  Pressure_Inf,
6002  *Velocity_Inf;
6004  su2double
6005  *CD_Inv,
6006  *CL_Inv,
6007  *CSF_Inv,
6008  *CMx_Inv,
6009  *CMy_Inv,
6010  *CMz_Inv,
6011  *CFx_Inv,
6012  *CFy_Inv,
6013  *CFz_Inv,
6014  *Surface_CL_Inv,
6015  *Surface_CD_Inv,
6016  *Surface_CSF_Inv,
6017  *Surface_CEff_Inv,
6018  *Surface_CFx_Inv,
6019  *Surface_CFy_Inv,
6020  *Surface_CFz_Inv,
6021  *Surface_CMx_Inv,
6022  *Surface_CMy_Inv,
6023  *Surface_CMz_Inv,
6024  *CEff_Inv,
6025  *CMerit_Inv,
6026  *CT_Inv,
6027  *CQ_Inv,
6028  *CD_Mnt,
6029  *CL_Mnt,
6030  *CSF_Mnt,
6031  *CMx_Mnt,
6032  *CMy_Mnt,
6033  *CMz_Mnt,
6034  *CFx_Mnt,
6035  *CFy_Mnt,
6036  *CFz_Mnt,
6037  *Surface_CL_Mnt,
6038  *Surface_CD_Mnt,
6039  *Surface_CSF_Mnt,
6040  *Surface_CEff_Mnt,
6041  *Surface_CFx_Mnt,
6042  *Surface_CFy_Mnt,
6043  *Surface_CFz_Mnt,
6044  *Surface_CMx_Mnt,
6045  *Surface_CMy_Mnt,
6046  *Surface_CMz_Mnt,
6047  *CEff_Mnt,
6048  *CMerit_Mnt,
6049  *CT_Mnt,
6050  *CQ_Mnt,
6051  **CPressure,
6052  **CPressureTarget,
6053  **HeatFlux,
6054  **HeatFluxTarget,
6055  **YPlus,
6056  ***CharacPrimVar,
6057  *ForceInviscid,
6058  *MomentInviscid,
6059  *ForceMomentum,
6060  *MomentMomentum,
6061  InverseDesign;
6063  su2double
6064  AllBound_CD_Inv,
6065  AllBound_CL_Inv,
6066  AllBound_CSF_Inv,
6067  AllBound_CMx_Inv,
6068  AllBound_CMy_Inv,
6069  AllBound_CMz_Inv,
6070  AllBound_CFx_Inv,
6071  AllBound_CFy_Inv,
6072  AllBound_CFz_Inv,
6073  AllBound_CEff_Inv,
6074  AllBound_CMerit_Inv,
6075  AllBound_CT_Inv,
6076  AllBound_CQ_Inv;
6079  su2double
6080  AllBound_CD_Mnt,
6081  AllBound_CL_Mnt,
6082  AllBound_CSF_Mnt,
6083  AllBound_CMx_Mnt,
6084  AllBound_CMy_Mnt,
6085  AllBound_CMz_Mnt,
6086  AllBound_CFx_Mnt,
6087  AllBound_CFy_Mnt,
6088  AllBound_CFz_Mnt,
6089  AllBound_CEff_Mnt,
6090  AllBound_CMerit_Mnt,
6091  AllBound_CT_Mnt,
6092  AllBound_CQ_Mnt;
6094  su2double
6095  OneD_TotalPress,
6096  OneD_Mach,
6097  OneD_Temp,
6098  OneD_PressureRef,
6099  OneD_MassFlowRate,
6100  OneD_DensityRef,
6101  OneD_EnthalpyRef,
6102  OneD_VelocityRef,
6103  AoA_Prev,
6104  Total_CL_Prev,
6105  Total_CD_Prev,
6106  Total_ComboObj,
6107  Total_CD,
6108  Total_CL,
6109  Total_CSF,
6110  Total_CMx,
6111  Total_CMy,
6112  Total_CMz,
6113  Total_CFx,
6114  Total_CFy,
6115  Total_CFz,
6116  Total_CEff,
6117  Total_CMerit,
6118  Total_CT,
6119  Total_CQ,
6120  Total_Heat,
6121  Total_MaxHeat,
6122  Total_CpDiff,
6123  Total_HeatFluxDiff,
6124  Total_MassFlowRate;
6125  su2double *Surface_CL,
6126  *Surface_CD,
6127  *Surface_CSF,
6128  *Surface_CEff,
6129  *Surface_CFx,
6130  *Surface_CFy,
6131  *Surface_CFz,
6132  *Surface_CMx,
6133  *Surface_CMy,
6134  *Surface_CMz;
6135  su2double *iPoint_UndLapl,
6136  *jPoint_UndLapl;
6137  su2double *SecondaryVar_i,
6138  *SecondaryVar_j;
6139  su2double *PrimVar_i,
6140  *PrimVar_j;
6141  unsigned long nMarker,
6142  *nVertex;
6144  euler_implicit,
6145  least_squares;
6146  su2double Gamma;
6147  su2double Gamma_Minus_One;
6149  su2double *Primitive,
6150  *Primitive_i,
6151  *Primitive_j;
6153  su2double Cauchy_Value,
6154  Cauchy_Func;
6155  unsigned short Cauchy_Counter;
6156  su2double *Cauchy_Serie;
6157  su2double Old_Func,
6158  New_Func;
6159  su2double AoA_old;
6160  unsigned long AoA_Counter;
6161 
6164 public:
6165 
6169  CIncEulerSolver(void);
6170 
6176  CIncEulerSolver(CGeometry *geometry, CConfig *config, unsigned short iMesh);
6177 
6181  virtual ~CIncEulerSolver(void);
6182 
6188  void Set_MPI_Solution(CGeometry *geometry, CConfig *config);
6189 
6195  void Set_MPI_Solution_Gradient(CGeometry *geometry, CConfig *config);
6196 
6202  void Set_MPI_Solution_Old(CGeometry *geometry, CConfig *config);
6203 
6209  void Set_MPI_Solution_Limiter(CGeometry *geometry, CConfig *config);
6210 
6216  void Set_MPI_Primitive_Limiter(CGeometry *geometry, CConfig *config);
6217 
6218  // /*!
6219  // * \brief Impose the send-receive boundary condition.
6220  // * \param[in] geometry - Geometrical definition of the problem.
6221  // * \param[in] config - Definition of the particular problem.
6222  // */
6223  // void Set_MPI_Secondary_Limiter(CGeometry *geometry, CConfig *config);
6224 
6230  void SetNondimensionalization(CGeometry *geometry, CConfig *config, unsigned short iMesh);
6231 
6236  CFluidModel* GetFluidModel(void);
6237 
6238 
6243  su2double GetDensity_Inf(void);
6244 
6249  su2double GetModVelocity_Inf(void);
6250 
6255  su2double GetPressure_Inf(void);
6256 
6262  su2double GetDensity_Velocity_Inf(unsigned short val_dim);
6263 
6269  su2double GetVelocity_Inf(unsigned short val_dim);
6270 
6275  su2double *GetVelocity_Inf(void);
6276 
6285  void SetTime_Step(CGeometry *geometry, CSolver **solver_container, CConfig *config,
6286  unsigned short iMesh, unsigned long Iteration);
6287 
6297  void Centered_Residual(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics,
6298  CConfig *config, unsigned short iMesh, unsigned short iRKStep);
6299 
6308  void Upwind_Residual(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics,
6309  CConfig *config, unsigned short iMesh);
6310 
6320  void Source_Residual(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics, CNumerics *second_numerics,
6321  CConfig *config, unsigned short iMesh);
6322 
6331  void Source_Template(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics,
6332  CConfig *config, unsigned short iMesh);
6333 
6343  void Preprocessing(CGeometry *geometry, CSolver **solver_container, CConfig *config, unsigned short iMesh, unsigned short iRKStep, unsigned short RunTime_EqSystem, bool Output);
6344 
6352  void Postprocessing(CGeometry *geometry, CSolver **solver_container, CConfig *config, unsigned short iMesh);
6353 
6361  unsigned long SetPrimitive_Variables(CSolver **solver_container, CConfig *config, bool Output);
6362 
6369  void SetDissipation_Switch(CGeometry *geometry, CConfig *config);
6370 
6377  void Set_MPI_Dissipation_Switch(CGeometry *geometry, CConfig *config);
6378 
6385  void SetPrimitive_Gradient_GG(CGeometry *geometry, CConfig *config);
6386 
6393  void SetPrimitive_Gradient_LS(CGeometry *geometry, CConfig *config);
6394 
6395  // /*!
6396  // * \brief Compute the gradient of the primitive variables using Green-Gauss method,
6397  // * and stores the result in the <i>Gradient_Primitive</i> variable.
6398  // * \param[in] geometry - Geometrical definition of the problem.
6399  // * \param[in] config - Definition of the particular problem.
6400  // */
6401  // void SetSecondary_Gradient_GG(CGeometry *geometry, CConfig *config);
6402 
6403  // /*!
6404  // * \brief Compute the gradient of the primitive variables using a Least-Squares method,
6405  // * and stores the result in the <i>Gradient_Primitive</i> variable.
6406  // * \param[in] geometry - Geometrical definition of the problem.
6407  // * \param[in] config - Definition of the particular problem.
6408  // */
6409  // void SetSecondary_Gradient_LS(CGeometry *geometry, CConfig *config);
6410 
6417  void Set_MPI_Primitive_Gradient(CGeometry *geometry, CConfig *config);
6418 
6424  void SetPrimitive_Limiter(CGeometry *geometry, CConfig *config);
6425 
6426  // /*!
6427  // * \brief Compute the gradient of the primitive variables using a Least-Squares method,
6428  // * and stores the result in the <i>Gradient_Primitive</i> variable.
6429  // * \param[in] geometry - Geometrical definition of the problem.
6430  // * \param[in] config - Definition of the particular problem.
6431  // */
6432  // void Set_MPI_Secondary_Gradient(CGeometry *geometry, CConfig *config);
6433 
6434  // /*!
6435  // * \brief Compute the limiter of the primitive variables.
6436  // * \param[in] geometry - Geometrical definition of the problem.
6437  // * \param[in] config - Definition of the particular problem.
6438  // */
6439  // void SetSecondary_Limiter(CGeometry *geometry, CConfig *config);
6440 
6446  void SetUndivided_Laplacian(CGeometry *geometry, CConfig *config);
6447 
6453  void Set_MPI_Undivided_Laplacian(CGeometry *geometry, CConfig *config);
6454 
6460  void SetMax_Eigenvalue(CGeometry *geometry, CConfig *config);
6461 
6467  void Set_MPI_MaxEigenvalue(CGeometry *geometry, CConfig *config);
6468 
6479  void BC_Euler_Wall(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics, CConfig *config,
6480  unsigned short val_marker);
6481 
6491  void BC_Far_Field(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics,
6492  CConfig *config, unsigned short val_marker);
6493 
6503  void BC_Sym_Plane(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker);
6504 
6514  void BC_Inlet(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics,
6515  CConfig *config, unsigned short val_marker);
6516 
6525  void BC_Custom(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics,
6526  CConfig *config, unsigned short val_marker);
6527 
6537  void BC_Outlet(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics,
6538  CConfig *config, unsigned short val_marker);
6539 
6545  static bool Compareval(std::vector<su2double> a,std::vector<su2double> b);
6546 
6554  void ExplicitRK_Iteration(CGeometry *geometry, CSolver **solver_container, CConfig *config,
6555  unsigned short iRKStep);
6556 
6565  void SetFarfield_AoA(CGeometry *geometry, CSolver **solver_container,
6566  CConfig *config, unsigned short iMesh, bool Output);
6567 
6574  void ExplicitEuler_Iteration(CGeometry *geometry, CSolver **solver_container, CConfig *config);
6575 
6581  void Pressure_Forces(CGeometry *geometry, CConfig *config);
6582 
6588  void Momentum_Forces(CGeometry *geometry, CConfig *config);
6589 
6596  void ImplicitEuler_Iteration(CGeometry *geometry, CSolver **solver_container, CConfig *config);
6597 
6603  su2double GetCLift_Inv(unsigned short val_marker);
6604 
6610  su2double GetCMz_Inv(unsigned short val_marker);
6611 
6617  su2double GetSurface_CL(unsigned short val_marker);
6618 
6624  su2double GetSurface_CD(unsigned short val_marker);
6625 
6631  su2double GetSurface_CSF(unsigned short val_marker);
6632 
6638  su2double GetSurface_CEff(unsigned short val_marker);
6639 
6645  su2double GetSurface_CFx(unsigned short val_marker);
6646 
6652  su2double GetSurface_CFy(unsigned short val_marker);
6653 
6659  su2double GetSurface_CFz(unsigned short val_marker);
6660 
6666  su2double GetSurface_CMx(unsigned short val_marker);
6667 
6673  su2double GetSurface_CMy(unsigned short val_marker);
6674 
6680  su2double GetSurface_CMz(unsigned short val_marker);
6681 
6687  su2double GetSurface_CL_Inv(unsigned short val_marker);
6688 
6694  su2double GetSurface_CD_Inv(unsigned short val_marker);
6695 
6701  su2double GetSurface_CSF_Inv(unsigned short val_marker);
6702 
6708  su2double GetSurface_CEff_Inv(unsigned short val_marker);
6709 
6715  su2double GetSurface_CFx_Inv(unsigned short val_marker);
6716 
6722  su2double GetSurface_CFy_Inv(unsigned short val_marker);
6723 
6729  su2double GetSurface_CFz_Inv(unsigned short val_marker);
6730 
6736  su2double GetSurface_CMx_Inv(unsigned short val_marker);
6737 
6743  su2double GetSurface_CMy_Inv(unsigned short val_marker);
6744 
6750  su2double GetSurface_CMz_Inv(unsigned short val_marker);
6751 
6757  su2double GetSurface_CL_Mnt(unsigned short val_marker);
6758 
6764  su2double GetSurface_CD_Mnt(unsigned short val_marker);
6765 
6771  su2double GetSurface_CSF_Mnt(unsigned short val_marker);
6772 
6778  su2double GetSurface_CEff_Mnt(unsigned short val_marker);
6779 
6785  su2double GetSurface_CFx_Mnt(unsigned short val_marker);
6786 
6792  su2double GetSurface_CFy_Mnt(unsigned short val_marker);
6793 
6799  su2double GetSurface_CFz_Mnt(unsigned short val_marker);
6800 
6806  su2double GetSurface_CMx_Mnt(unsigned short val_marker);
6807 
6813  su2double GetSurface_CMy_Mnt(unsigned short val_marker);
6814 
6820  su2double GetSurface_CMz_Mnt(unsigned short val_marker);
6826  su2double GetCD_Inv(unsigned short val_marker);
6827 
6833  su2double GetCSF_Inv(unsigned short val_marker);
6834 
6840  su2double GetCEff_Inv(unsigned short val_marker);
6841 
6846  su2double GetTotal_CSF(void);
6847 
6852  su2double GetTotal_CEff(void);
6853 
6858  su2double GetTotal_CpDiff(void);
6859 
6864  su2double GetTotal_HeatFluxDiff(void);
6865 
6870  void SetTotal_CpDiff(su2double val_pressure);
6871 
6876  void SetTotal_HeatFluxDiff(su2double val_heat);
6877 
6882  void SetTotal_CLift(su2double val_Total_CLift);
6883 
6888  su2double GetTotal_CL(void);
6889 
6895  void SetTotal_ComboObj(su2double ComboObj);
6896 
6902  su2double GetTotal_ComboObj(void);
6903 
6908  su2double GetTotal_CD(void);
6909 
6914  su2double GetTotal_CMx(void);
6915 
6920  su2double GetTotal_CMy(void);
6921 
6926  su2double GetTotal_CMz(void);
6927 
6932  su2double GetTotal_CFx(void);
6933 
6938  su2double GetTotal_CFy(void);
6939 
6944  su2double GetTotal_CFz(void);
6945 
6950  su2double GetTotal_CT(void);
6951 
6956  void SetTotal_CT(su2double val_Total_CT);
6957 
6962  su2double GetTotal_CQ(void);
6963 
6968  su2double GetTotal_HeatFlux(void);
6969 
6974  su2double GetTotal_MaxHeatFlux(void);
6975 
6980  void SetTotal_CQ(su2double val_Total_CQ);
6981 
6986  void SetTotal_HeatFlux(su2double val_Total_Heat);
6987 
6992  void SetTotal_MaxHeatFlux(su2double val_Total_MaxHeat);
6993 
6998  su2double GetTotal_CMerit(void);
6999 
7004  void SetTotal_CD(su2double val_Total_CDrag);
7005 
7010  su2double GetAllBound_CL_Inv(void);
7011 
7016  su2double GetAllBound_CD_Inv(void);
7017 
7022  su2double GetAllBound_CSF_Inv(void);
7023 
7028  su2double GetAllBound_CEff_Inv(void);
7029 
7034  su2double GetAllBound_CMx_Inv(void);
7035 
7040  su2double GetAllBound_CMy_Inv(void);
7041 
7046  su2double GetAllBound_CMz_Inv(void);
7047 
7052  su2double GetAllBound_CFx_Inv(void);
7053 
7058  su2double GetAllBound_CFy_Inv(void);
7059 
7064  su2double GetAllBound_CFz_Inv(void);
7065 
7070  su2double GetAllBound_CL_Mnt(void);
7071 
7076  su2double GetAllBound_CD_Mnt(void);
7077 
7082  su2double GetAllBound_CSF_Mnt(void);
7083 
7088  su2double GetAllBound_CEff_Mnt(void);
7089 
7094  su2double GetAllBound_CMx_Mnt(void);
7095 
7100  su2double GetAllBound_CMy_Mnt(void);
7101 
7106  su2double GetAllBound_CMz_Mnt(void);
7107 
7112  su2double GetAllBound_CFx_Mnt(void);
7113 
7118  su2double GetAllBound_CFy_Mnt(void);
7119 
7124  su2double GetAllBound_CFz_Mnt(void);
7125 
7132  su2double GetCPressure(unsigned short val_marker, unsigned long val_vertex);
7133 
7140  su2double GetCPressureTarget(unsigned short val_marker, unsigned long val_vertex);
7141 
7148  void SetCPressureTarget(unsigned short val_marker, unsigned long val_vertex, su2double val_pressure);
7149 
7156  su2double *GetCharacPrimVar(unsigned short val_marker, unsigned long val_vertex);
7157 
7161  su2double GetOneD_TotalPress(void);
7162 
7167  void SetOneD_TotalPress(su2double AveragePressure);
7168 
7172  su2double GetOneD_Mach(void);
7173 
7177  void SetOneD_Mach(su2double AverageMach);
7178 
7182  su2double GetOneD_Temp(void);
7183 
7187  void SetOneD_Temp(su2double AverageTemperature);
7188 
7192  su2double GetOneD_MassFlowRate(void);
7193 
7197  void SetOneD_MassFlowRate(su2double MassFlowRate);
7198 
7202  su2double GetOneD_FluxAvgPress(void);
7203 
7207  void SetOneD_FluxAvgPress(su2double PressureRef);
7208 
7212  su2double GetOneD_FluxAvgDensity(void);
7213 
7217  void SetOneD_FluxAvgDensity(su2double DensityRef);
7218 
7222  su2double GetOneD_FluxAvgVelocity(void);
7223 
7227  void SetOneD_FluxAvgVelocity(su2double VelocityRef);
7228 
7232  su2double GetOneD_FluxAvgEntalpy(void);
7233 
7237  void SetOneD_FluxAvgEntalpy(su2double EnthalpyRef);
7238 
7248  void SetResidual_DualTime(CGeometry *geometry, CSolver **solver_container, CConfig *config,
7249  unsigned short iRKStep, unsigned short iMesh, unsigned short RunTime_EqSystem);
7250 
7258  void SetFlow_Displacement(CGeometry **flow_geometry, CVolumetricMovement *flow_grid_movement, CConfig *flow_config, CConfig *fea_config,
7259  CGeometry **fea_geometry, CSolver ***fea_solution);
7260 
7268  void SetFlow_Displacement_Int(CGeometry **flow_geometry, CVolumetricMovement *flow_grid_movement, CConfig *flow_config, CConfig *fea_config,
7269  CGeometry **fea_geometry, CSolver ***fea_solution);
7270 
7278  void LoadRestart(CGeometry **geometry, CSolver ***solver, CConfig *config, int val_iter);
7279 
7287  void SetInitialCondition(CGeometry **geometry, CSolver ***solver_container, CConfig *config, unsigned long ExtIter);
7288 
7293  void SetPressure_Inf(su2double p_inf);
7294 
7299  void SetTemperature_Inf(su2double t_inf);
7300 
7305  void SetFreeStream_Solution(CConfig *config);
7306 };
7307 
7315 class CNSSolver : public CEulerSolver {
7316 private:
7317  su2double Viscosity_Inf;
7318  su2double Tke_Inf;
7319  su2double Prandtl_Lam,
7320  Prandtl_Turb;
7321  su2double *CD_Visc,
7322  *CL_Visc,
7323  *CSF_Visc,
7324  *CMx_Visc,
7325  *CMy_Visc,
7326  *CMz_Visc,
7327  *CFx_Visc,
7328  *CFy_Visc,
7329  *CFz_Visc,
7330  *Surface_CL_Visc,
7331  *Surface_CD_Visc,
7332  *Surface_CSF_Visc,
7333  *Surface_CEff_Visc,
7334  *Surface_CFx_Visc,
7335  *Surface_CFy_Visc,
7336  *Surface_CFz_Visc,
7337  *Surface_CMx_Visc,
7338  *Surface_CMy_Visc,
7339  *Surface_CMz_Visc,
7340  *CEff_Visc,
7341  *CMerit_Visc,
7342  *CT_Visc,
7343  *CQ_Visc,
7344  *HF_Visc,
7345  *MaxHF_Visc,
7346  ***CSkinFriction;
7347  su2double *ForceViscous,
7348  *MomentViscous;
7349  su2double AllBound_CD_Visc,
7350  AllBound_CL_Visc,
7351  AllBound_CSF_Visc,
7352  AllBound_CMx_Visc,
7353  AllBound_CMy_Visc,
7354  AllBound_CMz_Visc,
7355  AllBound_CEff_Visc,
7356  AllBound_CFx_Visc,
7357  AllBound_CFy_Visc,
7358  AllBound_CFz_Visc,
7359  AllBound_CMerit_Visc,
7360  AllBound_CT_Visc,
7361  AllBound_CQ_Visc,
7362  AllBound_HF_Visc,
7363  AllBound_MaxHF_Visc;
7364  su2double StrainMag_Max, Omega_Max;
7366 public:
7367 
7371  CNSSolver(void);
7372 
7378  CNSSolver(CGeometry *geometry, CConfig *config, unsigned short iMesh);
7379 
7383  ~CNSSolver(void);
7384 
7390  su2double GetSurface_CL_Visc(unsigned short val_marker);
7391 
7397  su2double GetSurface_CD_Visc(unsigned short val_marker);
7398 
7404  su2double GetSurface_CSF_Visc(unsigned short val_marker);
7405 
7411  su2double GetSurface_CEff_Visc(unsigned short val_marker);
7412 
7418  su2double GetSurface_CFx_Visc(unsigned short val_marker);
7419 
7425  su2double GetSurface_CFy_Visc(unsigned short val_marker);
7426 
7432  su2double GetSurface_CFz_Visc(unsigned short val_marker);
7433 
7439  su2double GetSurface_CMx_Visc(unsigned short val_marker);
7440 
7446  su2double GetSurface_CMy_Visc(unsigned short val_marker);
7447 
7453  su2double GetSurface_CMz_Visc(unsigned short val_marker);
7454 
7459  su2double GetAllBound_CL_Visc(void);
7460 
7465  su2double GetAllBound_CD_Visc(void);
7466 
7471  su2double GetAllBound_CSF_Visc(void);
7472 
7477  su2double GetAllBound_CEff_Visc(void);
7478 
7483  su2double GetAllBound_CMx_Visc(void);
7484 
7489  su2double GetAllBound_CMy_Visc(void);
7490 
7495  su2double GetAllBound_CMz_Visc(void);
7496 
7501  su2double GetAllBound_CFx_Visc(void);
7502 
7507  su2double GetAllBound_CFy_Visc(void);
7508 
7513  su2double GetAllBound_CFz_Visc(void);
7514 
7519  su2double GetViscosity_Inf(void);
7520 
7525  su2double GetTke_Inf(void);
7526 
7535  void SetTime_Step(CGeometry *geometry, CSolver **solver_container, CConfig *config,
7536  unsigned short iMesh, unsigned long Iteration);
7537 
7547  void Preprocessing(CGeometry *geometry, CSolver **solver_container, CConfig *config, unsigned short iMesh, unsigned short iRKStep, unsigned short RunTime_EqSystem, bool Output);
7548 
7556  unsigned long SetPrimitive_Variables(CSolver **solver_container, CConfig *config, bool Output);
7557 
7567  void BC_HeatFlux_Wall(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker);
7568 
7578  void BC_Isothermal_Wall(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config,
7579  unsigned short val_marker);
7580 
7586  void Friction_Forces(CGeometry *geometry, CConfig *config);
7587 
7593  su2double GetSurface_HF_Visc(unsigned short val_marker);
7594 
7600  su2double GetSurface_MaxHF_Visc(unsigned short val_marker);
7601 
7607  su2double GetCL_Visc(unsigned short val_marker);
7608 
7614  su2double GetCMz_Visc(unsigned short val_marker);
7615 
7621  su2double GetCSF_Visc(unsigned short val_marker);
7622 
7628  su2double GetCD_Visc(unsigned short val_marker);
7629 
7639  void Viscous_Residual(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics,
7640  CConfig *config, unsigned short iMesh, unsigned short iRKStep);
7641 
7648  su2double GetCSkinFriction(unsigned short val_marker, unsigned long val_vertex, unsigned short val_dim);
7649 
7656  su2double GetHeatFlux(unsigned short val_marker, unsigned long val_vertex);
7657 
7664  su2double GetHeatFluxTarget(unsigned short val_marker, unsigned long val_vertex);
7665 
7672  void SetHeatFluxTarget(unsigned short val_marker, unsigned long val_vertex, su2double val_heat);
7673 
7680  su2double GetYPlus(unsigned short val_marker, unsigned long val_vertex);
7681 
7686  su2double GetOmega_Max(void);
7687 
7692  su2double GetStrainMag_Max(void);
7693 
7698  void SetStrainMag_Max(su2double val_strainmag_max);
7699 
7704  void SetOmega_Max(su2double val_omega_max);
7705 
7706 };
7707 
7716 private:
7717  su2double Viscosity_Inf;
7718  su2double Tke_Inf;
7719  su2double Prandtl_Lam,
7720  Prandtl_Turb;
7721  su2double *CD_Visc,
7722  *CL_Visc,
7723  *CSF_Visc,
7724  *CMx_Visc,
7725  *CMy_Visc,
7726  *CMz_Visc,
7727  *CFx_Visc,
7728  *CFy_Visc,
7729  *CFz_Visc,
7730  *Surface_CL_Visc,
7731  *Surface_CD_Visc,
7732  *Surface_CSF_Visc,
7733  *Surface_CEff_Visc,
7734  *Surface_CFx_Visc,
7735  *Surface_CFy_Visc,
7736  *Surface_CFz_Visc,
7737  *Surface_CMx_Visc,
7738  *Surface_CMy_Visc,
7739  *Surface_CMz_Visc,
7740  *CEff_Visc,
7741  *CMerit_Visc,
7742  *CT_Visc,
7743  *CQ_Visc,
7744  *HF,
7745  *MaxHF_Visc,
7746  ***CSkinFriction;
7747  su2double *ForceViscous,
7748  *MomentViscous;
7749  su2double AllBound_CD_Visc,
7750  AllBound_CL_Visc,
7751  AllBound_CSF_Visc,
7752  AllBound_CMx_Visc,
7753  AllBound_CMy_Visc,
7754  AllBound_CMz_Visc,
7755  AllBound_CEff_Visc,
7756  AllBound_CFx_Visc,
7757  AllBound_CFy_Visc,
7758  AllBound_CFz_Visc,
7759  AllBound_CMerit_Visc,
7760  AllBound_CT_Visc,
7761  AllBound_CQ_Visc,
7762  AllBound_HF_Visc,
7763  AllBound_MaxHF_Visc;
7764  su2double StrainMag_Max, Omega_Max;
7766 public:
7767 
7771  CIncNSSolver(void);
7772 
7778  CIncNSSolver(CGeometry *geometry, CConfig *config, unsigned short iMesh);
7779 
7783  ~CIncNSSolver(void);
7784 
7790  su2double GetSurface_CL_Visc(unsigned short val_marker);
7791 
7797  su2double GetSurface_CD_Visc(unsigned short val_marker);
7798 
7804  su2double GetSurface_CSF_Visc(unsigned short val_marker);
7805 
7811  su2double GetSurface_CEff_Visc(unsigned short val_marker);
7812 
7818  su2double GetSurface_CFx_Visc(unsigned short val_marker);
7819 
7825  su2double GetSurface_CFy_Visc(unsigned short val_marker);
7826 
7832  su2double GetSurface_CFz_Visc(unsigned short val_marker);
7833 
7839  su2double GetSurface_CMx_Visc(unsigned short val_marker);
7840 
7846  su2double GetSurface_CMy_Visc(unsigned short val_marker);
7847 
7853  su2double GetSurface_CMz_Visc(unsigned short val_marker);
7854 
7859  su2double GetAllBound_CL_Visc(void);
7860 
7865  su2double GetAllBound_CD_Visc(void);
7866 
7871  su2double GetAllBound_CSF_Visc(void);
7872 
7877  su2double GetAllBound_CEff_Visc(void);
7878 
7883  su2double GetAllBound_CMx_Visc(void);
7884 
7889  su2double GetAllBound_CMy_Visc(void);
7890 
7895  su2double GetAllBound_CMz_Visc(void);
7896 
7901  su2double GetAllBound_CFx_Visc(void);
7902 
7907  su2double GetAllBound_CFy_Visc(void);
7908 
7913  su2double GetAllBound_CFz_Visc(void);
7914 
7919  su2double GetViscosity_Inf(void);
7920 
7925  su2double GetTke_Inf(void);
7926 
7935  void SetTime_Step(CGeometry *geometry, CSolver **solver_container, CConfig *config,
7936  unsigned short iMesh, unsigned long Iteration);
7937 
7947  void Preprocessing(CGeometry *geometry, CSolver **solver_container, CConfig *config, unsigned short iMesh, unsigned short iRKStep, unsigned short RunTime_EqSystem, bool Output);
7948 
7956  unsigned long SetPrimitive_Variables(CSolver **solver_container, CConfig *config, bool Output);
7957 
7967  void BC_HeatFlux_Wall(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker);
7968 
7974  void Friction_Forces(CGeometry *geometry, CConfig *config);
7975 
7981  su2double GetCL_Visc(unsigned short val_marker);
7982 
7988  su2double GetCMz_Visc(unsigned short val_marker);
7989 
7995  su2double GetCSF_Visc(unsigned short val_marker);
7996 
8002  su2double GetCD_Visc(unsigned short val_marker);
8003 
8013  void Viscous_Residual(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics,
8014  CConfig *config, unsigned short iMesh, unsigned short iRKStep);
8015 
8022  su2double GetCSkinFriction(unsigned short val_marker, unsigned long val_vertex, unsigned short val_dim);
8023 
8030  su2double GetHeatFlux(unsigned short val_marker, unsigned long val_vertex);
8031 
8038  su2double GetHeatFluxTarget(unsigned short val_marker, unsigned long val_vertex);
8039 
8046  void SetHeatFluxTarget(unsigned short val_marker, unsigned long val_vertex, su2double val_heat);
8047 
8054  su2double GetYPlus(unsigned short val_marker, unsigned long val_vertex);
8055 
8060  su2double GetOmega_Max(void);
8061 
8066  su2double GetStrainMag_Max(void);
8067 
8072  void SetStrainMag_Max(su2double val_strainmag_max);
8073 
8078  void SetOmega_Max(su2double val_omega_max);
8079 
8080 };
8081 
8089 class CTurbSolver : public CSolver {
8090 protected:
8091  su2double *FlowPrimVar_i,
8092  *FlowPrimVar_j,
8093  *lowerlimit,
8094  *upperlimit;
8095  su2double Gamma;
8096  su2double Gamma_Minus_One;
8098 public:
8099 
8103  CTurbSolver(void);
8104 
8108  virtual ~CTurbSolver(void);
8109 
8113  CTurbSolver(CConfig *config);
8114 
8120  void Set_MPI_Solution(CGeometry *geometry, CConfig *config);
8121 
8127  void Set_MPI_Solution_Old(CGeometry *geometry, CConfig *config);
8128 
8134  void Set_MPI_Solution_Gradient(CGeometry *geometry, CConfig *config);
8135 
8141  void Set_MPI_Solution_Limiter(CGeometry *geometry, CConfig *config);
8142 
8152  void Upwind_Residual(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics, CConfig *config,
8153  unsigned short iMesh);
8154 
8164  void Viscous_Residual(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics,
8165  CConfig *config, unsigned short iMesh, unsigned short iRKStep);
8166 
8176  void BC_Sym_Plane(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker);
8177 
8186  void BC_Euler_Wall(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics, CConfig *config,
8187  unsigned short val_marker);
8188 
8195  void ImplicitEuler_Iteration(CGeometry *geometry, CSolver **solver_container, CConfig *config);
8196 
8206  void SetResidual_DualTime(CGeometry *geometry, CSolver **solver_container, CConfig *config,
8207  unsigned short iRKStep, unsigned short iMesh, unsigned short RunTime_EqSystem);
8208 
8216  void LoadRestart(CGeometry **geometry, CSolver ***solver, CConfig *config, int val_iter);
8217 
8218 };
8219 
8229 private:
8230  su2double nu_tilde_Inf, nu_tilde_Engine, nu_tilde_ActDisk;
8231 
8232 public:
8236  CTurbSASolver(void);
8237 
8245  CTurbSASolver(CGeometry *geometry, CConfig *config, unsigned short iMesh, CFluidModel* FluidModel);
8246 
8250  ~CTurbSASolver(void);
8251 
8262  void Preprocessing(CGeometry *geometry, CSolver **solver_container, CConfig *config, unsigned short iMesh, unsigned short iRKStep, unsigned short RunTime_EqSystem, bool Output);
8263 
8271  void Postprocessing(CGeometry *geometry, CSolver **solver_container, CConfig *config,
8272  unsigned short iMesh);
8273 
8283  void Source_Residual(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics, CNumerics *second_numerics,
8284  CConfig *config, unsigned short iMesh);
8285 
8294  void Source_Template(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics,
8295  CConfig *config, unsigned short iMesh);
8296 
8306  void BC_HeatFlux_Wall(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config,
8307  unsigned short val_marker);
8308 
8318  void BC_Isothermal_Wall(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config,
8319  unsigned short val_marker);
8320 
8330  void BC_Far_Field(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config,
8331  unsigned short val_marker);
8332 
8342  void BC_Inlet(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config,
8343  unsigned short val_marker);
8344 
8354  void BC_Outlet(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config,
8355  unsigned short val_marker);
8356 
8366  void BC_Engine_Inflow(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics,
8367  CConfig *config, unsigned short val_marker);
8368 
8378  void BC_Engine_Exhaust(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics,
8379  CConfig *config, unsigned short val_marker);
8380 
8389  void BC_Interface_Boundary(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics,
8390  CConfig *config, unsigned short val_marker);
8391 
8400  void BC_NearField_Boundary(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics,
8401  CConfig *config, unsigned short val_marker);
8402 
8412  void BC_ActDisk_Inlet(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics,
8413  CConfig *config, unsigned short val_marker);
8414 
8424  void BC_ActDisk_Outlet(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics,
8425  CConfig *config, unsigned short val_marker);
8426 
8436  void BC_ActDisk(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics,
8437  CConfig *config, unsigned short val_marker, bool inlet_surface);
8438 
8443  void SetFreeStream_Solution(CConfig *config);
8444 
8445 };
8446 
8456 private:
8457  su2double *constants,
8458  kine_Inf,
8459  omega_Inf;
8461 public:
8465  CTurbSSTSolver(void);
8466 
8473  CTurbSSTSolver(CGeometry *geometry, CConfig *config, unsigned short iMesh);
8474 
8478  ~CTurbSSTSolver(void);
8479 
8490  void Preprocessing(CGeometry *geometry, CSolver **solver_container, CConfig *config, unsigned short iMesh, unsigned short iRKStep, unsigned short RunTime_EqSystem, bool Output);
8491 
8499  void Postprocessing(CGeometry *geometry, CSolver **solver_container, CConfig *config,
8500  unsigned short iMesh);
8501 
8511  void Source_Residual(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics, CNumerics *second_numerics,
8512  CConfig *config, unsigned short iMesh);
8513 
8522  void Source_Template(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics,
8523  CConfig *config, unsigned short iMesh);
8524 
8534  void BC_HeatFlux_Wall(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config,
8535  unsigned short val_marker);
8536 
8546  void BC_Isothermal_Wall(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config,
8547  unsigned short val_marker);
8548 
8558  void BC_Far_Field(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config,
8559  unsigned short val_marker);
8560 
8570  void BC_Inlet(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config,
8571  unsigned short val_marker);
8572 
8582  void BC_Outlet(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config,
8583  unsigned short val_marker);
8584 
8589  su2double* GetConstants();
8590 
8595  void SetFreeStream_Solution(CConfig *config);
8596 
8597 };
8598 
8608 private:
8609  su2double Intermittency_Inf, REth_Inf;
8610 public:
8614  CTransLMSolver(void);
8615 
8622  CTransLMSolver(CGeometry *geometry, CConfig *config, unsigned short iMesh);
8623 
8627  ~CTransLMSolver(void);
8628 
8639  void Preprocessing(CGeometry *geometry, CSolver **solver_container, CConfig *config, unsigned short iMesh, unsigned short iRKStep, unsigned short RunTime_EqSystem, bool Output);
8640 
8648  void Postprocessing(CGeometry *geometry, CSolver **solver_container, CConfig *config,
8649  unsigned short iMesh);
8650 
8659  void Upwind_Residual(CGeometry *geometry, CSolver **solver_container,
8660  CNumerics *numerics, CConfig *config, unsigned short iMesh);
8661 
8671  void Viscous_Residual(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics,
8672  CConfig *config, unsigned short iMesh, unsigned short iRKStep);
8673 
8683  void Source_Residual(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics, CNumerics *second_numerics,
8684  CConfig *config, unsigned short iMesh);
8685 
8694  void Source_Template(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics,
8695  CConfig *config, unsigned short iMesh);
8696 
8706  void BC_HeatFlux_Wall(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config,
8707  unsigned short val_marker);
8708 
8718  void BC_Far_Field(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config,
8719  unsigned short val_marker);
8720 
8730  void BC_Inlet(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config,
8731  unsigned short val_marker);
8732 
8742  void BC_Outlet(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config,
8743  unsigned short val_marker);
8744 
8754  void BC_Sym_Plane(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config,
8755  unsigned short val_marker);
8762  void ImplicitEuler_Iteration(CGeometry *geometry, CSolver **solver_container, CConfig *config);
8763 
8764  // Another set of matrix structures for the Lm equations
8766  su2double *LinSysSolItmc;
8767  su2double *LinSysResItmc;
8768  su2double *rhsItmc;
8770  su2double *LinSysSolReth;
8771  su2double *LinSysResReth;
8772  su2double *rhsReth;
8773 };
8774 
8782 class CAdjEulerSolver : public CSolver {
8783 protected:
8784  su2double PsiRho_Inf,
8785  PsiE_Inf,
8786  *Phi_Inf;
8787  su2double *Sens_Mach,
8788  *Sens_AoA,
8789  *Sens_Geo,
8790  *Sens_Press,
8791  *Sens_Temp,
8792  *Sens_BPress,
8793  **CSensitivity,
8794  ***DonorAdjVar;
8795  su2double Total_Sens_Mach;
8796  su2double Total_Sens_AoA;
8797  su2double Total_Sens_Geo;
8798  su2double Total_Sens_Press;
8799  su2double Total_Sens_Temp;
8800  su2double Total_Sens_BPress;
8801  su2double *iPoint_UndLapl,
8802  *jPoint_UndLapl;
8805  unsigned long nMarker;
8806  su2double Gamma;
8807  su2double Gamma_Minus_One;
8808  su2double *FlowPrimVar_i,
8809  *FlowPrimVar_j;
8810  unsigned long **DonorGlobalIndex;
8812  su2double pnorm,
8813  Area_Monitored;
8815  unsigned long AoA_Counter;
8816  su2double ACoeff, ACoeff_inc, ACoeff_old;
8817  bool Update_ACoeff;
8818 
8819 public:
8820 
8824  CAdjEulerSolver(void);
8825 
8832  CAdjEulerSolver(CGeometry *geometry, CConfig *config, unsigned short iMesh);
8833 
8837  virtual ~CAdjEulerSolver(void);
8838 
8847  void SetTime_Step(CGeometry *geometry, CSolver **solver_container, CConfig *config,
8848  unsigned short iMesh, unsigned long Iteration);
8849 
8855  void Set_MPI_Solution(CGeometry *geometry, CConfig *config);
8856 
8862  void Set_MPI_Solution_Gradient(CGeometry *geometry, CConfig *config);
8863 
8869  void Set_MPI_Solution_Limiter(CGeometry *geometry, CConfig *config);
8870 
8876  void Set_MPI_Solution_Old(CGeometry *geometry, CConfig *config);
8877 
8883  void Set_MPI_Nearfield(CGeometry *geometry, CConfig *config);
8884 
8890  void Set_MPI_Interface(CGeometry *geometry, CConfig *config);
8891 
8897  void Set_MPI_ActDisk(CSolver **solver_container, CGeometry *geometry, CConfig *config);
8898 
8905  void SetForceProj_Vector(CGeometry *geometry, CSolver **solver_container, CConfig *config);
8906 
8913  void SetIntBoundary_Jump(CGeometry *geometry, CSolver **solver_container, CConfig *config);
8914 
8919  su2double GetPsiRho_Inf(void);
8920 
8925  su2double GetPsiE_Inf(void);
8926 
8932  su2double GetPhi_Inf(unsigned short val_dim);
8933 
8943  void Centered_Residual(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics, CConfig *config,
8944  unsigned short iMesh, unsigned short iRKStep);
8945 
8954  void Upwind_Residual(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics, CConfig *config,
8955  unsigned short iMesh);
8956 
8966  void Source_Residual(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics, CNumerics *second_numerics,
8967  CConfig *config, unsigned short iMesh);
8968 
8977  void Source_Template(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics,
8978  CConfig *config, unsigned short iMesh);
8979 
8985  void SetUndivided_Laplacian(CGeometry *geometry, CConfig *config);
8986 
8993  su2double *GetDonorAdjVar(unsigned short val_marker, unsigned long val_vertex);
8994 
9001  void SetDonorAdjVar(unsigned short val_marker, unsigned long val_vertex, unsigned short val_var, su2double val_value);
9002 
9009  su2double GetDonorAdjVar(unsigned short val_marker, unsigned long val_vertex, unsigned short val_var);
9010 
9017  unsigned long GetDonorGlobalIndex(unsigned short val_marker, unsigned long val_vertex);
9018 
9025  void SetDonorGlobalIndex(unsigned short val_marker, unsigned long val_vertex, unsigned long val_index);
9026 
9032  void Set_MPI_Undivided_Laplacian(CGeometry *geometry, CConfig *config);
9033 
9040  void SetDissipation_Switch(CGeometry *geometry, CConfig *config);
9041 
9050  void SetFarfield_AoA(CGeometry *geometry, CSolver **solver_container,
9051  CConfig *config, unsigned short iMesh, bool Output);
9052 
9059  void Set_MPI_Dissipation_Switch(CGeometry *geometry, CConfig *config);
9060 
9069  void BC_Euler_Wall(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics, CConfig *config,
9070  unsigned short val_marker);
9071 
9080  void BC_Interface_Boundary(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics,
9081  CConfig *config, unsigned short val_marker);
9082 
9091  void BC_NearField_Boundary(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics,
9092  CConfig *config, unsigned short val_marker);
9093 
9103  void BC_ActDisk_Inlet(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics,
9104  CConfig *config, unsigned short val_marker);
9105 
9115  void BC_ActDisk_Outlet(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics,
9116  CConfig *config, unsigned short val_marker);
9117 
9127  void BC_ActDisk(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics,
9128  CConfig *config, unsigned short val_marker, bool inlet_surface);
9129 
9139  void BC_Sym_Plane(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config,
9140  unsigned short val_marker);
9141 
9151  void BC_Far_Field(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config,
9152  unsigned short val_marker);
9153 
9163  void BC_Inlet(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config,
9164  unsigned short val_marker);
9165 
9166 
9175  void BC_Supersonic_Inlet(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config,
9176  unsigned short val_marker);
9177 
9186  void BC_Supersonic_Outlet(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config,
9187  unsigned short val_marker);
9188 
9198  void BC_Outlet(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config,
9199  unsigned short val_marker);
9200 
9210  void BC_Engine_Inflow(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics,
9211  CConfig *config, unsigned short val_marker);
9212 
9222  void BC_Engine_Exhaust(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics,
9223  CConfig *config, unsigned short val_marker);
9224 
9232  void ExplicitRK_Iteration(CGeometry *geometry, CSolver **solver_container, CConfig *config,
9233  unsigned short iRKStep);
9234 
9241  void ExplicitEuler_Iteration(CGeometry *geometry, CSolver **solver_container, CConfig *config);
9242 
9249  void ImplicitEuler_Iteration(CGeometry *geometry, CSolver **solver_container, CConfig *config);
9250 
9260  void Preprocessing(CGeometry *geometry, CSolver **solver_container, CConfig *config, unsigned short iMesh, unsigned short iRKStep, unsigned short RunTime_EqSystem, bool Output);
9261 
9269  void Inviscid_Sensitivity(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics, CConfig *config);
9270 
9278  void Smooth_Sensitivity(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics, CConfig *config);
9279 
9286  su2double GetCSensitivity(unsigned short val_marker, unsigned long val_vertex);
9287 
9294  void SetCSensitivity(unsigned short val_marker, unsigned long val_vertex, su2double val_sensitivity);
9295 
9301  su2double GetTotal_Sens_Geo(void);
9302 
9308  su2double GetTotal_Sens_Mach(void);
9309 
9315  su2double GetTotal_Sens_AoA(void);
9316 
9322  su2double GetTotal_Sens_Press(void);
9323 
9329  su2double GetTotal_Sens_Temp(void);
9330 
9337  su2double GetTotal_Sens_BPress(void);
9338 
9348  void SetResidual_DualTime(CGeometry *geometry, CSolver **solver_container, CConfig *config,
9349  unsigned short iRKStep, unsigned short iMesh, unsigned short RunTime_EqSystem);
9350 
9358  void SetInitialCondition(CGeometry **geometry, CSolver ***solver_container, CConfig *config, unsigned long ExtIter);
9359 
9360 
9361 };
9362 
9370 class CAdjIncEulerSolver : public CSolver {
9371 protected:
9372  su2double PsiRho_Inf,
9373  PsiE_Inf,
9374  *Phi_Inf;
9375  su2double *Sens_Mach,
9376  *Sens_AoA,
9377  *Sens_Geo,
9378  *Sens_Press,
9379  *Sens_Temp,
9380  *Sens_BPress,
9381  **CSensitivity;
9382  su2double Total_Sens_Mach;
9383  su2double Total_Sens_AoA;
9384  su2double Total_Sens_Geo;
9385  su2double Total_Sens_Press;
9386  su2double Total_Sens_Temp;
9387  su2double Total_Sens_BPress;
9388  su2double *iPoint_UndLapl,
9389  *jPoint_UndLapl;
9392  unsigned long nMarker;
9393  su2double Gamma;
9394  su2double Gamma_Minus_One;
9395  su2double *FlowPrimVar_i,
9396  *FlowPrimVar_j;
9398  su2double pnorm,
9399  Area_Monitored;
9401  unsigned long AoA_Counter;
9402  su2double ACoeff, ACoeff_inc, ACoeff_old;
9403  bool Update_ACoeff;
9404 
9405 public:
9406 
9410  CAdjIncEulerSolver(void);
9411 
9418  CAdjIncEulerSolver(CGeometry *geometry, CConfig *config, unsigned short iMesh);
9419 
9423  virtual ~CAdjIncEulerSolver(void);
9424 
9433  void SetTime_Step(CGeometry *geometry, CSolver **solver_container, CConfig *config,
9434  unsigned short iMesh, unsigned long Iteration);
9435 
9441  void Set_MPI_Solution(CGeometry *geometry, CConfig *config);
9442 
9448  void Set_MPI_Solution_Gradient(CGeometry *geometry, CConfig *config);
9449 
9455  void Set_MPI_Solution_Limiter(CGeometry *geometry, CConfig *config);
9456 
9462  void Set_MPI_Solution_Old(CGeometry *geometry, CConfig *config);
9463 
9470  void SetForceProj_Vector(CGeometry *geometry, CSolver **solver_container, CConfig *config);
9471 
9478  void SetIntBoundary_Jump(CGeometry *geometry, CSolver **solver_container, CConfig *config);
9479 
9484  su2double GetPsiRho_Inf(void);
9485 
9490  su2double GetPsiE_Inf(void);
9491 
9497  su2double GetPhi_Inf(unsigned short val_dim);
9498 
9508  void Centered_Residual(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics, CConfig *config,
9509  unsigned short iMesh, unsigned short iRKStep);
9510 
9519  void Upwind_Residual(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics, CConfig *config,
9520  unsigned short iMesh);
9521 
9531  void Source_Residual(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics, CNumerics *second_numerics,
9532  CConfig *config, unsigned short iMesh);
9533 
9542  void Source_Template(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics,
9543  CConfig *config, unsigned short iMesh);
9544 
9550  void SetUndivided_Laplacian(CGeometry *geometry, CConfig *config);
9551 
9557  void Set_MPI_Undivided_Laplacian(CGeometry *geometry, CConfig *config);
9558 
9565  void SetDissipation_Switch(CGeometry *geometry, CConfig *config);
9566 
9573  void Set_MPI_Dissipation_Switch(CGeometry *geometry, CConfig *config);
9574 
9583  void BC_Euler_Wall(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics, CConfig *config,
9584  unsigned short val_marker);
9585 
9594  void BC_Interface_Boundary(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics, CConfig *config);
9596 
9605  void BC_NearField_Boundary(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics, CConfig *config);
9607 
9617  void BC_Sym_Plane(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config,
9618  unsigned short val_marker);
9619 
9629  void BC_Far_Field(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config,
9630  unsigned short val_marker);
9631 
9641  void BC_Inlet(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config,
9642  unsigned short val_marker);
9643 
9653  void BC_Outlet(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config,
9654  unsigned short val_marker);
9655 
9663  void ExplicitRK_Iteration(CGeometry *geometry, CSolver **solver_container, CConfig *config,
9664  unsigned short iRKStep);
9665 
9672  void ExplicitEuler_Iteration(CGeometry *geometry, CSolver **solver_container, CConfig *config);
9673 
9680  void ImplicitEuler_Iteration(CGeometry *geometry, CSolver **solver_container, CConfig *config);
9681 
9691  void Preprocessing(CGeometry *geometry, CSolver **solver_container, CConfig *config, unsigned short iMesh, unsigned short iRKStep, unsigned short RunTime_EqSystem, bool Output);
9692 
9700  void Inviscid_Sensitivity(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics, CConfig *config);
9701 
9709  void Smooth_Sensitivity(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics, CConfig *config);
9710 
9717  su2double GetCSensitivity(unsigned short val_marker, unsigned long val_vertex);
9718 
9725  void SetCSensitivity(unsigned short val_marker, unsigned long val_vertex, su2double val_sensitivity);
9726 
9732  su2double GetTotal_Sens_Geo(void);
9733 
9739  su2double GetTotal_Sens_Mach(void);
9740 
9746  su2double GetTotal_Sens_AoA(void);
9747 
9753  su2double GetTotal_Sens_Press(void);
9754 
9760  su2double GetTotal_Sens_Temp(void);
9761 
9768  su2double GetTotal_Sens_BPress(void);
9769 
9779  void SetResidual_DualTime(CGeometry *geometry, CSolver **solver_container, CConfig *config,
9780  unsigned short iRKStep, unsigned short iMesh, unsigned short RunTime_EqSystem);
9781 
9789  void SetInitialCondition(CGeometry **geometry, CSolver ***solver_container, CConfig *config, unsigned long ExtIter);
9790 
9791 
9792 };
9793 
9802 public:
9803 
9807  CAdjNSSolver(void);
9808 
9815  CAdjNSSolver(CGeometry *geometry, CConfig *config, unsigned short iMesh);
9816 
9820  ~CAdjNSSolver(void);
9821 
9830  void SetTime_Step(CGeometry *geometry, CSolver **solver_container, CConfig *config,
9831  unsigned short iMesh, unsigned long Iteration);
9832 
9833 
9843  void BC_HeatFlux_Wall(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config,
9844  unsigned short val_marker);
9845 
9855  void BC_Isothermal_Wall(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker);
9856 
9866  void Preprocessing(CGeometry *geometry, CSolver **solver_container, CConfig *config, unsigned short iMesh, unsigned short iRKStep, unsigned short RunTime_EqSystem, bool Output);
9867 
9875  void Viscous_Sensitivity(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics, CConfig *config);
9876 
9886  void Viscous_Residual(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics,
9887  CConfig *config, unsigned short iMesh, unsigned short iRKStep);
9888 
9898  void Source_Residual(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics, CNumerics *second_numerics,
9899  CConfig *config, unsigned short iMesh);
9900 
9901 };
9902 
9911 public:
9912 
9916  CAdjIncNSSolver(void);
9917 
9924  CAdjIncNSSolver(CGeometry *geometry, CConfig *config, unsigned short iMesh);
9925 
9929  ~CAdjIncNSSolver(void);
9930 
9939  void SetTime_Step(CGeometry *geometry, CSolver **solver_container, CConfig *config,
9940  unsigned short iMesh, unsigned long Iteration);
9941 
9942 
9952  void BC_HeatFlux_Wall(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config,
9953  unsigned short val_marker);
9954 
9964  void BC_Isothermal_Wall(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker);
9965 
9975  void Preprocessing(CGeometry *geometry, CSolver **solver_container, CConfig *config, unsigned short iMesh, unsigned short iRKStep, unsigned short RunTime_EqSystem, bool Output);
9976 
9984  void Viscous_Sensitivity(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics, CConfig *config);
9985 
9995  void Viscous_Residual(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics,
9996  CConfig *config, unsigned short iMesh, unsigned short iRKStep);
9997 
10007  void Source_Residual(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics, CNumerics *second_numerics,
10008  CConfig *config, unsigned short iMesh);
10009 
10010 };
10011 
10019 class CAdjTurbSolver : public CSolver {
10020 private:
10021  su2double PsiNu_Inf,
10022  *FlowSolution_i,
10023  *FlowSolution_j;
10025  su2double Gamma;
10026  su2double Gamma_Minus_One;
10028 public:
10029 
10033  CAdjTurbSolver(void);
10034 
10040  CAdjTurbSolver(CGeometry *geometry, CConfig *config, unsigned short iMesh);
10041 
10047  void Set_MPI_Solution(CGeometry *geometry, CConfig *config);
10048 
10054  void Set_MPI_Solution_Old(CGeometry *geometry, CConfig *config);
10055 
10061  void Set_MPI_Solution_Gradient(CGeometry *geometry, CConfig *config);
10062 
10066  virtual ~CAdjTurbSolver(void);
10067 
10077  void BC_HeatFlux_Wall(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config,
10078  unsigned short val_marker);
10079 
10089  void BC_Isothermal_Wall(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config,
10090  unsigned short val_marker);
10091 
10101  void BC_Far_Field(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config,
10102  unsigned short val_marker);
10103 
10113  void Preprocessing(CGeometry *geometry, CSolver **solver_container, CConfig *config, unsigned short iMesh, unsigned short iRKStep, unsigned short RunTime_EqSystem, bool Output);
10114 
10123  void Upwind_Residual(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics, CConfig *config,
10124  unsigned short iMesh);
10125 
10135  void Viscous_Residual(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics, CConfig *config,
10136  unsigned short iMesh, unsigned short iRKStep);
10137 
10147  void Source_Residual(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics, CNumerics *second_numerics,
10148  CConfig *config, unsigned short iMesh);
10149 
10156  void ImplicitEuler_Iteration(CGeometry *geometry, CSolver **solver_container, CConfig *config);
10157 
10158 };
10159 
10166 class CPoissonSolver : public CSolver {
10167 private:
10168  su2double *Source_Vector;
10169  su2double **StiffMatrix_Elem;
10170  su2double **StiffMatrix_Node;
10172 public:
10173 
10177  CPoissonSolver(void);
10178 
10184  CPoissonSolver(CGeometry *geometry, CConfig *config);
10185 
10195  void Copy_Zone_Solution(CSolver ***solver1_solution, CGeometry **solver1_geometry, CConfig *solver1_config, CSolver ***solver2_solution, CGeometry **solver2_geometry, CConfig *solver2_config);
10196 
10200  ~CPoissonSolver(void);
10201 
10210  void Viscous_Residual(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics, CConfig *config,
10211  unsigned short iMesh, unsigned short iRKStep);
10212 
10217  void AddStiffMatrix(su2double **StiffMatrix_Elem, unsigned long Point_0, unsigned long Point_1, unsigned long Point_2, unsigned long Point_3);
10218 
10226  void Compute_Residual(CGeometry *geometry, CSolver **solver_container, CConfig *config,
10227  unsigned short iMesh);
10228 
10236  void BC_Dirichlet(CGeometry *geometry, CSolver **solver_container, CConfig *config, unsigned short val_marker);
10237 
10246  void BC_Neumann(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics, CConfig *config, unsigned short val_marker);
10247 
10257  void Preprocessing(CGeometry *geometry, CSolver **solver_container, CConfig *config, unsigned short iMesh, unsigned short iRKStep, unsigned short RunTime_EqSystem, bool Output);
10258 
10268  void Source_Residual(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics, CNumerics *second_numerics,
10269  CConfig *config, unsigned short iMesh);
10270 
10279  void Source_Template(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics,
10280  CConfig *config, unsigned short iMesh);
10281 
10288  void ImplicitEuler_Iteration(CGeometry *geometry, CSolver **solver_container, CConfig *config);
10289 
10290 };
10291 
10298 class CWaveSolver : public CSolver {
10299 private:
10300  su2double *CWave;
10301  su2double AllBound_CWave;
10302  su2double Total_CWave;
10304  CSysMatrix StiffMatrixSpace;
10305  CSysMatrix StiffMatrixTime;
10307  su2double **StiffMatrix_Elem,
10308  **StiffMatrix_Node;
10310 public:
10311 
10315  CWaveSolver(void);
10316 
10322  CWaveSolver(CGeometry *geometry, CConfig *config);
10323 
10327  ~CWaveSolver(void);
10328 
10338  void Viscous_Residual(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics, CConfig *config,
10339  unsigned short iMesh, unsigned short iRKStep);
10340 
10349  void BC_Euler_Wall(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics, CConfig *config,
10350  unsigned short val_marker);
10351 
10361  void BC_Far_Field(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config,
10362  unsigned short val_marker);
10363 
10374  void Preprocessing(CGeometry *geometry, CSolver **solver_container, CConfig *config, unsigned short iMesh, unsigned short iRKStep, unsigned short RunTime_EqSystem, bool Output);
10375 
10385  void Source_Residual(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics, CNumerics *second_numerics,
10386  CConfig *config, unsigned short iMesh);
10387 
10396  void Source_Template(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics,
10397  CConfig *config, unsigned short iMesh);
10398 
10405  void ImplicitEuler_Iteration(CGeometry *geometry, CSolver **solver_container, CConfig *config);
10406 
10416  void SetResidual_DualTime(CGeometry *geometry, CSolver **solver_container, CConfig *config,
10417  unsigned short iRKStep, unsigned short iMesh, unsigned short RunTime_EqSystem);
10418 
10426  void LoadRestart(CGeometry **geometry, CSolver ***solver, CConfig *config, int val_iter);
10427 
10433  void Wave_Strength(CGeometry *geometry, CConfig *config);
10434 
10440  void SetSpace_Matrix(CGeometry *geometry,
10441  CConfig *config);
10442 
10447  su2double GetTotal_CWave(void);
10448 
10449 };
10450 
10457 class CHeatSolver : public CSolver {
10458 private:
10459  su2double *CHeat;
10460  su2double Total_CHeat;
10462  CSysMatrix StiffMatrixSpace;
10463  CSysMatrix StiffMatrixTime;
10465  su2double **StiffMatrix_Elem;
10466  su2double **StiffMatrix_Node;
10468 public:
10469 
10473  CHeatSolver(void);
10474 
10480  CHeatSolver(CGeometry *geometry, CConfig *config);
10481 
10485  ~CHeatSolver(void);
10486 
10495  void Viscous_Residual(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics, CConfig *config,
10496  unsigned short iMesh, unsigned short iRKStep);
10497 
10507  void BC_HeatFlux_Wall(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config,
10508  unsigned short val_marker);
10509 
10519  void BC_Isothermal_Wall(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker);
10520 
10530  void Preprocessing(CGeometry *geometry, CSolver **solver_container, CConfig *config, unsigned short iMesh, unsigned short iRKStep, unsigned short RunTime_EqSystem, bool Output);
10531 
10541  void Source_Residual(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics, CNumerics *second_numerics,
10542  CConfig *config, unsigned short iMesh);
10543 
10550  void ImplicitEuler_Iteration(CGeometry *geometry, CSolver **solver_container, CConfig *config);
10551 
10561  void SetResidual_DualTime(CGeometry *geometry, CSolver **solver_container, CConfig *config,
10562  unsigned short iRKStep, unsigned short iMesh, unsigned short RunTime_EqSystem);
10563 
10568  su2double GetTotal_CHeat(void);
10569 
10570 };
10571 
10579 private:
10580 
10581  su2double Total_CFEA;
10584  unsigned long nElement;
10585  unsigned short nMarker;
10586 
10587  su2double *GradN_X,
10588  *GradN_x;
10589 
10590  su2double **Jacobian_c_ij;
10591  su2double **Jacobian_s_ij;
10592  su2double **Jacobian_k_ij;
10593  su2double **MassMatrix_ij;
10594  su2double *Res_Stress_i;
10596  su2double *Res_Ext_Surf;
10597  su2double *Res_Time_Cont;
10598  su2double *Res_FSI_Cont;
10600  su2double *Res_Dead_Load;
10602  su2double *solutionPredictor;
10604  su2double *Solution_Interm;
10606  su2double *SolRest;
10608  su2double *nodeReactions;
10610  su2double *normalVertex;
10611  su2double **stressTensor;
10613  su2double **mZeros_Aux;
10614  su2double **mId_Aux;
10616  su2double a_dt[9];
10618  su2double Conv_Ref[3];
10619  su2double Conv_Check[3];
10620  su2double FSI_Conv[2];
10622  su2double loadIncrement;
10624  su2double WAitken_Dyn;
10625  su2double WAitken_Dyn_tn1;
10627  CSysMatrix MassMatrix;
10628  CSysVector TimeRes_Aux;
10629  CSysVector TimeRes;
10630  CSysVector LinSysReact;
10633 public:
10634 
10640  CFEM_ElasticitySolver(void);
10641 
10647  CFEM_ElasticitySolver(CGeometry *geometry, CConfig *config);
10648 
10652  virtual ~CFEM_ElasticitySolver(void);
10653 
10659  void Set_MPI_Solution(CGeometry *geometry, CConfig *config);
10660 
10666  void Set_MPI_Solution_Old(CGeometry *geometry, CConfig *config);
10667 
10673  void Set_MPI_Solution_DispOnly(CGeometry *geometry, CConfig *config);
10674 
10680  void Set_MPI_Solution_Pred(CGeometry *geometry, CConfig *config);
10681 
10687  void Set_MPI_Solution_Pred_Old(CGeometry *geometry, CConfig *config);
10688 
10697  void Preprocessing(CGeometry *geometry, CSolver **solver_container, CConfig *config, CNumerics **numerics, unsigned short iMesh, unsigned long Iteration, unsigned short RunTime_EqSystem, bool Output);
10698 
10699 
10707  void SetInitialCondition(CGeometry **geometry, CSolver ***solver_container, CConfig *config, unsigned long ExtIter);
10708 
10716  void ResetInitialCondition(CGeometry **geometry, CSolver ***solver_container, CConfig *config, unsigned long ExtIter);
10717 
10726  void SetTime_Step(CGeometry *geometry, CSolver **solver_container, CConfig *config,
10727  unsigned short iMesh, unsigned long Iteration);
10728 
10736  void Compute_StiffMatrix(CGeometry *geometry, CSolver **solver_container, CNumerics **numerics, CConfig *config);
10737 
10745  void Compute_StiffMatrix_NodalStressRes(CGeometry *geometry, CSolver **solver_container, CNumerics **numerics, CConfig *config);
10746 
10754  void Compute_MassMatrix(CGeometry *geometry, CSolver **solver_container, CNumerics **numerics, CConfig *config);
10755 
10763  void Compute_NodalStressRes(CGeometry *geometry, CSolver **solver_container, CNumerics **numerics, CConfig *config);
10764 
10773  void Compute_NodalStress(CGeometry *geometry, CSolver **solver_container, CNumerics **numerics, CConfig *config);
10774 
10782  void Compute_DeadLoad(CGeometry *geometry, CSolver **solver_container, CNumerics **numerics, CConfig *config);
10783 
10791  void Initialize_SystemMatrix(CGeometry *geometry, CSolver **solver_container, CConfig *config);
10792 
10797  void Compute_IntegrationConstants(CConfig *config);
10798 
10806  void BC_Clamped(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics, CConfig *config, unsigned short val_marker);
10807 
10816  void BC_Clamped_Post(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics, CConfig *config,
10817  unsigned short val_marker);
10818 
10827  void BC_Normal_Displacement(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics, CConfig *config,
10828  unsigned short val_marker);
10829 
10830 
10839  void BC_Normal_Load(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics, CConfig *config,
10840  unsigned short val_marker);
10841 
10850  void BC_Dir_Load(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics, CConfig *config,
10851  unsigned short val_marker);
10852 
10861  void BC_Sine_Load(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics, CConfig *config,
10862  unsigned short val_marker);
10863 
10864 
10873  void BC_Pressure(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics, CConfig *config,
10874  unsigned short val_marker);
10875 
10882  void ImplicitEuler_Iteration(CGeometry *geometry, CSolver **solver_container, CConfig *config);
10883 
10890  void ImplicitNewmark_Iteration(CGeometry *geometry, CSolver **solver_container, CConfig *config);
10891 
10898  void ImplicitNewmark_Update(CGeometry *geometry, CSolver **solver_container, CConfig *config);
10899 
10906  void ImplicitNewmark_Relaxation(CGeometry *geometry, CSolver **solver_container, CConfig *config);
10907 
10914  void GeneralizedAlpha_Iteration(CGeometry *geometry, CSolver **solver_container, CConfig *config);
10915 
10922  void GeneralizedAlpha_UpdateDisp(CGeometry *geometry, CSolver **solver_container, CConfig *config);
10923 
10930  void GeneralizedAlpha_UpdateSolution(CGeometry *geometry, CSolver **solver_container, CConfig *config);
10931 
10938  void GeneralizedAlpha_UpdateLoads(CGeometry *geometry, CSolver **solver_container, CConfig *config);
10939 
10947  void Postprocessing(CGeometry *geometry, CSolver **solver_container, CConfig *config, CNumerics **numerics,
10948  unsigned short iMesh);
10949 
10956  void Solve_System(CGeometry *geometry, CSolver **solver_container, CConfig *config);
10957 
10963  su2double GetRes_FEM(unsigned short val_var);
10964 
10969  su2double GetTotal_CFEA(void);
10970 
10975  void SetTotal_CFEA(su2double val_cfea);
10976 
10983  void SetFEA_Load(CSolver ***flow_solution, CGeometry **fea_geometry, CGeometry **flow_geometry, CConfig *fea_config, CConfig *flow_config, CNumerics *fea_numerics);
10984 
10991  void SetFEA_Load_Int(CSolver ***flow_solution, CGeometry **fea_geometry, CGeometry **flow_geometry, CConfig *fea_config, CConfig *flow_config, CNumerics *fea_numerics);
10992 
11000  void PredictStruct_Displacement(CGeometry **fea_geometry,
11001  CConfig *fea_config,
11002  CSolver ***fea_solution);
11003 
11010  void ComputeAitken_Coefficient(CGeometry **fea_geometry,
11011  CConfig *fea_config,
11012  CSolver ***fea_solution,
11013  unsigned long iFSIIter);
11014 
11021  void SetAitken_Relaxation(CGeometry **fea_geometry,
11022  CConfig *fea_config,
11023  CSolver ***fea_solution);
11024 
11031  void Update_StructSolution(CGeometry **fea_geometry,
11032  CConfig *fea_config,
11033  CSolver ***fea_solution);
11034 
11039  void SetFSI_ConvValue(unsigned short val_index, su2double val_criteria);
11040 
11046  su2double GetFSI_ConvValue(unsigned short val_index);
11047 
11052  su2double GetWAitken_Dyn(void);
11053 
11058  su2double GetWAitken_Dyn_tn1(void);
11059 
11064  void SetWAitken_Dyn(su2double waitk);
11065 
11070  void SetWAitken_Dyn_tn1(su2double waitk_tn1);
11071 
11076  void SetLoad_Increment(su2double val_loadIncrement);
11077 
11083  void Set_Prestretch(CGeometry *geometry, CConfig *config);
11084 };
11085 
11093 class CTemplateSolver : public CSolver {
11094 private:
11095 
11096 public:
11097 
11101  CTemplateSolver(void);
11102 
11108  CTemplateSolver(CGeometry *geometry, CConfig *config);
11109 
11113  ~CTemplateSolver(void);
11114 
11125  void Preprocessing(CGeometry *geometry, CSolver **solver_container, CConfig *config, unsigned short iMesh, unsigned short iRKStep, unsigned short RunTime_EqSystem, bool Output);
11126 
11135  void SetTime_Step(CGeometry *geometry, CSolver **solver_container, CConfig *config,
11136  unsigned short iMesh, unsigned long Iteration);
11137 
11147  void Centered_Residual(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics,
11148  CConfig *config, unsigned short iMesh, unsigned short iRKStep);
11149 
11158  void Upwind_Residual(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics,
11159  CConfig *config, unsigned short iMesh);
11160 
11170  void Source_Residual(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics, CNumerics *second_numerics,
11171  CConfig *config, unsigned short iMesh);
11172 
11181  void Source_Template(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics,
11182  CConfig *config, unsigned short iMesh);
11183 
11192  void BC_Euler_Wall(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics, CConfig *config,
11193  unsigned short val_marker);
11194 
11204  void BC_HeatFlux_Wall(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config,
11205  unsigned short val_marker);
11206 
11216  void BC_Far_Field(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config,
11217  unsigned short val_marker);
11218 
11228  void BC_Inlet(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config,
11229  unsigned short val_marker);
11230 
11240  void BC_Outlet(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config,
11241  unsigned short val_marker);
11242 
11252  void BC_Sym_Plane(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config,
11253  unsigned short val_marker);
11254 
11263  void BC_Custom(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics,
11264  CConfig *config, unsigned short val_marker);
11265 
11273  void ExplicitRK_Iteration(CGeometry *geometry, CSolver **solver_container, CConfig *config,
11274  unsigned short iRKStep);
11275 
11282  void ExplicitEuler_Iteration(CGeometry *geometry, CSolver **solver_container, CConfig *config);
11283 
11290  void ImplicitEuler_Iteration(CGeometry *geometry, CSolver **solver_container, CConfig *config);
11291 
11292 };
11293 
11301 class CDiscAdjSolver : public CSolver {
11302 private:
11303  unsigned short KindDirect_Solver;
11304  CSolver *direct_solver;
11305  su2double *Sens_Mach,
11306  *Sens_AoA,
11307  *Sens_Geo,
11308  *Sens_Press,
11309  *Sens_Temp,
11310  **CSensitivity;
11311  su2double Total_Sens_Mach;
11312  su2double Total_Sens_AoA;
11313  su2double Total_Sens_Geo;
11314  su2double Total_Sens_Press;
11315  su2double Total_Sens_Temp;
11316  su2double Total_Sens_BPress;
11317  su2double ObjFunc_Value;
11318  su2double Mach, Alpha, Beta, Pressure, Temperature;
11319  unsigned long nMarker;
11321 public:
11322 
11326  CDiscAdjSolver(void);
11327 
11334  CDiscAdjSolver(CGeometry *geometry, CConfig *config);
11335 
11343  CDiscAdjSolver(CGeometry *geometry, CConfig *config, CSolver* solver, unsigned short Kind_Solver, unsigned short iMesh);
11344 
11348  ~CDiscAdjSolver(void);
11349 
11356  void RegisterSolution(CGeometry *geometry, CConfig *config);
11357 
11365  void RegisterOutput(CGeometry *geometry, CConfig *config);
11366 
11373  void SetAdjoint_Output(CGeometry *geometry, CConfig *config);
11374 
11381  void ExtractAdjoint_Solution(CGeometry *geometry, CConfig *config);
11382 
11387  void RegisterObj_Func(CConfig *config);
11388 
11394  void SetSurface_Sensitivity(CGeometry *geometry, CConfig* config);
11395 
11401  void SetSensitivity(CGeometry *geometry, CConfig *config);
11402 
11408  void SetAdj_ObjFunc(CGeometry *geometry, CConfig* config);
11409 
11410 
11416  su2double GetTotal_Sens_Geo(void);
11417 
11423  su2double GetTotal_Sens_Mach(void);
11424 
11430  su2double GetTotal_Sens_AoA(void);
11431 
11437  su2double GetTotal_Sens_Press(void);
11438 
11444  su2double GetTotal_Sens_Temp(void);
11445 
11452  su2double GetTotal_Sens_BPress(void);
11453 
11460  su2double GetCSensitivity(unsigned short val_marker, unsigned long val_vertex);
11461 
11466  void SetRecording(CGeometry *geometry, CConfig *config, unsigned short kind_recording);
11467 
11473  void RegisterVariables(CGeometry *geometry, CConfig *config, bool reset = false);
11474 
11480  void ExtractAdjoint_Variables(CGeometry *geometry, CConfig *config);
11481 
11492  void Preprocessing(CGeometry *geometry, CSolver **solver_container, CConfig *config, unsigned short iMesh, unsigned short iRKStep, unsigned short RunTime_EqSystem, bool Output);
11493 };
11494 #include "solver_structure.inl"
unsigned long nMarker
Total number of markers using the grid information.
Definition: solver_structure.hpp:8805
Main class for defining the template model solver.
Definition: solver_structure.hpp:11093
unsigned long nMarker
Total number of markers using the grid information.
Definition: solver_structure.hpp:9392
su2double ** Point_Max_Coord
Vector with pointers to the coords of the maximal residual for each variable.
Definition: solver_structure.hpp:91
su2double ** Jacobian_j
Auxiliary matrices for storing point to point Jacobians at point j.
Definition: solver_structure.hpp:105
su2double * Res_Visc_j
Auxiliary vector for storing the viscous residual at point j.
Definition: solver_structure.hpp:98
unsigned short Cauchy_Counter
Number of elements of the Cauchy serial.
Definition: solver_structure.hpp:6155
unsigned long ** DonorGlobalIndex
Value of the donor global index.
Definition: solver_structure.hpp:8810
su2double * upperlimit
contains upper limits for turbulence variables.
Definition: solver_structure.hpp:8091
su2double * Secondary_j
Auxiliary nPrimVar vector for storing the primitive at point j.
Definition: solver_structure.hpp:3827
su2double Cauchy_Value
Summed value of the convergence indicator.
Definition: solver_structure.hpp:3831
su2double * LinSysResReth
vector to store iterative residual of implicit linear system.
Definition: solver_structure.hpp:8771
su2double Gamma
Fluid&#39;s Gamma constant (ratio of specific heats).
Definition: solver_structure.hpp:8095
su2double ** Jacobian_Axisymmetric
Storage for axisymmetric Jacobian.
Definition: solver_structure.hpp:9391
su2double * Velocity_Inf
Flow Velocity vector at the infinity.
Definition: solver_structure.hpp:5999
su2double AoA_old
Old value of the angle of attack (monitored).
Definition: solver_structure.hpp:3837
su2double Total_Sens_AoA
Total angle of attack sensitivity coefficient for all the boundaries.
Definition: solver_structure.hpp:8796
Main class for defining the variables.
Definition: variable_structure.hpp:56
su2double ** Smatrix
Auxiliary structure for computing gradients by least-squares.
Definition: solver_structure.hpp:112
Main class for defining the Thermo-Physical Model a child class for each particular Model (Ideal-Gas...
Definition: fluid_model.hpp:62
Main class for defining the incompressible Navier-Stokes adjoint flow solver.
Definition: solver_structure.hpp:9910
su2double Min_Delta_Time
Minimum value of the delta time for all the control volumes.
Definition: solver_structure.hpp:83
su2double Area_Monitored
Store the total area of the monitored outflow surface (used for normalization in continuous adjoint o...
Definition: solver_structure.hpp:9398
Main class for defining the turbulence model solver.
Definition: solver_structure.hpp:8089
Parent class for defining the geometry of the problem (complete geometry, multigrid agglomerated geom...
Definition: geometry_structure.hpp:72
su2double PsiRho_Inf
PsiRho variable at the infinity.
Definition: solver_structure.hpp:9372
CSysMatrix StiffMatrix
Sparse structure for storing the stiffness matrix in Galerkin computations, and grid movement...
Definition: solver_structure.hpp:124
Main class for defining the turbulence model solver.
Definition: solver_structure.hpp:8228
su2double Total_Sens_Mach
Total mach sensitivity coefficient for all the boundaries.
Definition: solver_structure.hpp:8795
su2double Gamma
Fluid&#39;s Gamma constant (ratio of specific heats).
Definition: solver_structure.hpp:9393
CSysVector LinSysRes
vector to store iterative residual of implicit linear system.
Definition: solver_structure.hpp:120
su2double * rhsReth
right hand side of implicit linear system.
Definition: solver_structure.hpp:8772
unsigned long * nVertex
Store nVertex at each marker for deallocation.
Definition: solver_structure.hpp:6141
su2double Old_Func
Old value of the objective function (the function which is monitored).
Definition: solver_structure.hpp:6157
virtual void BC_Interface_Boundary(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics, CConfig *config, unsigned short val_marker)
A virtual member.
Definition: solver_structure.inl:713
CSysMatrix JacobianItmc
Complete sparse Jacobian structure for implicit computations.
Definition: solver_structure.hpp:8765
su2double * jPoint_UndLapl
Auxiliary variable for the undivided Laplacians.
Definition: solver_structure.hpp:3808
su2double Gamma_Minus_One
Fluids&#39;s Gamma - 1.0 .
Definition: solver_structure.hpp:9394
Main class for defining the incompressible Navier-Stokes flow solver.
Definition: solver_structure.hpp:7715
virtual void BC_NearField_Boundary(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics, CConfig *config, unsigned short val_marker)
A virtual member.
Definition: solver_structure.inl:716
su2double Total_Sens_AoA
Total angle of attack sensitivity coefficient for all the boundaries.
Definition: solver_structure.hpp:9383
CVariable ** node
Vector which the define the variables for each problem.
Definition: solver_structure.hpp:129
su2double AllBound_CT_Inv
Total thrust coefficient (inviscid contribution) for all the boundaries.
Definition: solver_structure.hpp:6064
su2double Area_Monitored
Store the total area of the monitored outflow surface (used for normalization in continuous adjoint o...
Definition: solver_structure.hpp:8812
CFluidModel * FluidModel
fluid model used in the solver
Definition: solver_structure.hpp:3841
Main class for defining the Euler&#39;s adjoint flow solver.
Definition: solver_structure.hpp:8782
su2double * PrimVar_j
Auxiliary vector for storing the solution at point j.
Definition: solver_structure.hpp:6139
Main class for defining the PDE solution, it requires a child class for each particular solver (Euler...
Definition: solver_structure.hpp:71
su2double * jPoint_UndLapl
Auxiliary variable for the undivided Laplacians.
Definition: solver_structure.hpp:6135
Main class for defining the poisson potential solver.
Definition: solver_structure.hpp:10166
su2double AllBound_CT_Mnt
Total thrust coefficient (inviscid contribution) for all the boundaries.
Definition: solver_structure.hpp:3730
su2double InverseDesign
Inverse design functional for each boundary.
Definition: solver_structure.hpp:3692
su2double Old_Func
Old value of the objective function (the function which is monitored).
Definition: solver_structure.hpp:3835
su2double Gamma_Minus_One
Fluids&#39;s Gamma - 1.0 .
Definition: solver_structure.hpp:6147
Main class for defining a FEM solver for elastic structural problems.
Definition: solver_structure.hpp:10578
su2double Total_Sens_Press
Total farfield sensitivity to pressure.
Definition: solver_structure.hpp:8798
CFluidModel * FluidModel
fluid model used in the solver
Definition: solver_structure.hpp:6162
Class for moving the surface numerical grid.
Definition: grid_movement_structure.hpp:1287
unsigned short Cauchy_Counter
Number of elements of the Cauchy serial.
Definition: solver_structure.hpp:3833
su2double ** YPlus
Yplus for each boundary and vertex.
Definition: solver_structure.hpp:6005
Main class for defining the heat solver.
Definition: solver_structure.hpp:10457
su2double ** Jacobian_Axisymmetric
Storage for axisymmetric Jacobian.
Definition: solver_structure.hpp:8804
su2double Gamma_Minus_One
Fluids&#39;s Gamma - 1.0 .
Definition: solver_structure.hpp:3821
su2double * Cauchy_Serie
Complete Cauchy serial.
Definition: solver_structure.hpp:6156
Class for moving the volumetric numerical grid.
Definition: grid_movement_structure.hpp:955
Headers of the main thermodynamic subroutines of the SU2 solvers.
su2double PsiRho_Inf
PsiRho variable at the infinity.
Definition: solver_structure.hpp:8784
su2double Total_Sens_Geo
Total shape sensitivity coefficient for all the boundaries.
Definition: solver_structure.hpp:9384
su2double * Surface_MaxHF_Visc
Maximum heat flux for each monitored surface.
Definition: solver_structure.hpp:3796
CSysMatrix JacobianReth
Complete sparse Jacobian structure for implicit computations.
Definition: solver_structure.hpp:8769
su2double * PrimVar_j
Auxiliary vector for storing the solution at point j.
Definition: solver_structure.hpp:3812
CSysVector LinSysSol
vector to store iterative solution of implicit linear system.
Definition: solver_structure.hpp:119
unsigned long * Point_Max
Vector with the maximal residual for each variable.
Definition: solver_structure.hpp:90
bool space_centered
True if space centered scheeme used.
Definition: solver_structure.hpp:9390
Headers of the main subroutines for the dumerical definition of the problem. The subroutines and func...
su2double ** ActDisk_DeltaT
Value of the Delta T.
Definition: solver_structure.hpp:3706
su2double * FlowPrimVar_j
Store the flow solution at point j.
Definition: solver_structure.hpp:9395
Main class for defining the incompressible Euler flow solver.
Definition: solver_structure.hpp:5995
su2double * Cauchy_Serie
Complete Cauchy serial.
Definition: solver_structure.hpp:3834
su2double Gamma_Minus_One
Fluids&#39;s Gamma - 1.0 .
Definition: solver_structure.hpp:8807
Main class for defining a baseline solution from a restart file (for output).
Definition: solver_structure.hpp:3557
su2double Total_ReverseFlow
Total drag coefficient for all the boundaries.
Definition: solver_structure.hpp:3745
su2double * Velocity_Inf
Flow Velocity vector at the infinity.
Definition: solver_structure.hpp:3624
Main class for defining the Navier-Stokes flow solver.
Definition: solver_structure.hpp:7315
bool space_centered
True if space centered scheeme used.
Definition: solver_structure.hpp:3817
su2double AoA_old
Old value of the angle of attack (monitored).
Definition: solver_structure.hpp:6159
su2double * Solution_j
Auxiliary nVar vector for storing the solution at point j.
Definition: solver_structure.hpp:92
su2double ** Inlet_Ttotal
Value of the Total T.
Definition: solver_structure.hpp:3708
bool space_centered
True if space centered scheeme used.
Definition: solver_structure.hpp:8803
su2double * jPoint_UndLapl
Auxiliary variable for the undivided Laplacians.
Definition: solver_structure.hpp:9388
su2double ** LowMach_Precontioner
Auxiliary vector for storing the inverse of Roe-turkel preconditioner.
Definition: solver_structure.hpp:3814
su2double Total_Sens_Press
Total farfield sensitivity to pressure.
Definition: solver_structure.hpp:9385
su2double * rhsItmc
right hand side of implicit linear system.
Definition: solver_structure.hpp:8768
Headers of the main subroutines for storing all the variables for each kind of governing equation (di...
Main class for defining sparse matrices-by-blocks with compressed row format.
Definition: matrix_structure.hpp:59
su2double Gamma_Minus_One
Fluids&#39;s Gamma - 1.0 .
Definition: solver_structure.hpp:8096
Class for defining the numerical methods.
Definition: numerics_structure.hpp:59
void RegisterOutput(su2double &data)
Registers the variable as an output. I.e. as the root of the computational graph. ...
Definition: ad_structure.inl:166
su2double AllBound_CT_Mnt
Total thrust coefficient (inviscid contribution) for all the boundaries.
Definition: solver_structure.hpp:6080
su2double * SecondaryVar_j
Auxiliary vector for storing the solution at point j.
Definition: solver_structure.hpp:3810
su2double * Sens_Temp
Temperature sensitivity coefficient for each boundary.
Definition: solver_structure.hpp:9375
unsigned short IterLinSolver
Linear solver iterations.
Definition: solver_structure.hpp:73
su2double * LinSysSolReth
vector to store iterative solution of implicit linear system.
Definition: solver_structure.hpp:8770
su2double Total_Sens_Temp
Total farfield sensitivity to temperature.
Definition: solver_structure.hpp:9386
su2double * SecondaryVar_j
Auxiliary vector for storing the solution at point j.
Definition: solver_structure.hpp:6137
unsigned long ** DonorGlobalIndex
Value of the donor global index.
Definition: solver_structure.hpp:3705
su2double Gamma
Fluid&#39;s Gamma constant (ratio of specific heats).
Definition: solver_structure.hpp:3820
Main class for defining the adjoint turbulence model solver.
Definition: solver_structure.hpp:10019
su2double * Sens_Temp
Temperature sensitivity coefficient for each boundary.
Definition: solver_structure.hpp:8787
su2double * Vector_j
Auxiliary nDim vector to do the reconstruction of the variables at point j.
Definition: solver_structure.hpp:95
CSysMatrix Jacobian
Complete sparse Jacobian structure for implicit computations.
Definition: solver_structure.hpp:122
Main class for defining the turbulence model solver.
Definition: solver_structure.hpp:8607
Class for holding and manipulating vectors needed by linear solvers.
Definition: vector_structure.hpp:60
su2double Total_Sens_Mach
Total mach sensitivity coefficient for all the boundaries.
Definition: solver_structure.hpp:9382
Main class for defining the wave solver.
Definition: solver_structure.hpp:10298
su2double * Residual_RMS
Vector with the mean residual for each variable.
Definition: solver_structure.hpp:85
su2double * Primitive_j
Auxiliary nPrimVar vector for storing the primitive at point j.
Definition: solver_structure.hpp:3823
su2double Total_Sens_Geo
Total shape sensitivity coefficient for all the boundaries.
Definition: solver_structure.hpp:8797
su2double * LinSysResItmc
vector to store iterative residual of implicit linear system.
Definition: solver_structure.hpp:8767
su2double Total_Sens_Temp
Total farfield sensitivity to temperature.
Definition: solver_structure.hpp:8799
unsigned short nOutputVariables
Number of variables to write.
Definition: solver_structure.hpp:115
unsigned long nPointDomain
Number of points of the computational grid.
Definition: solver_structure.hpp:82
su2double * Surface_CSF
Side-force coefficient for each monitoring surface.
Definition: solver_structure.hpp:6125
CElement *** element_container
Vector which the define the finite element structure for each problem.
Definition: solver_structure.hpp:10635
su2double * FlowPrimVar_j
Store the flow solution at point j.
Definition: solver_structure.hpp:8808
su2double ** Jacobian_jj
Auxiliary matrices for storing point to point Jacobians.
Definition: solver_structure.hpp:107
unsigned short nVarGrad
Number of variables for deallocating the LS Cvector.
Definition: solver_structure.hpp:74
CSysVector LinSysAux
vector to store iterative residual of implicit linear system.
Definition: solver_structure.hpp:121
bool space_centered
True if space centered scheeme used.
Definition: solver_structure.hpp:6143
su2double * Primitive_j
Auxiliary nPrimVar vector for storing the primitive at point j.
Definition: solver_structure.hpp:6149
su2double Total_Sens_BPress
Total sensitivity to back pressure.
Definition: solver_structure.hpp:8800
CSysVector OutputVariables
vector to store the extra variables to be written.
Definition: solver_structure.hpp:126
Main class for defining the incompressible Euler adjoint flow solver.
Definition: solver_structure.hpp:9370
su2double AllBound_CT_Inv
Total thrust coefficient (inviscid contribution) for all the boundaries.
Definition: solver_structure.hpp:3713
Main class for defining the discrete adjoint solver.
Definition: solver_structure.hpp:11301
su2double * LinSysSolItmc
vector to store iterative solution of implicit linear system.
Definition: solver_structure.hpp:8766
In-Line subroutines of the solver_structure.hpp file.
su2double Total_Sens_BPress
Total sensitivity to back pressure.
Definition: solver_structure.hpp:9387
su2double Total_MaxHeat
Maximum heat flux on all boundaries.
Definition: solver_structure.hpp:6095
Main class for defining the Navier-Stokes&#39; adjoint flow solver.
Definition: solver_structure.hpp:9801
unsigned long * nVertex
Store nVertex at each marker for deallocation.
Definition: solver_structure.hpp:3815
su2double Cauchy_Value
Summed value of the convergence indicator.
Definition: solver_structure.hpp:6153
unsigned long nPoint
Number of points of the computational grid.
Definition: solver_structure.hpp:81
CVariable * node_infty
CVariable storing the free stream conditions.
Definition: solver_structure.hpp:130
su2double ** YPlus
Yplus for each boundary and vertex.
Definition: solver_structure.hpp:3632
Main class for defining the Euler&#39;s flow solver.
Definition: solver_structure.hpp:3620
su2double * jPoint_UndLapl
Auxiliary variable for the undivided Laplacians.
Definition: solver_structure.hpp:8801
Main class for defining the problem; basically this class reads the configuration file...
Definition: config_structure.hpp:68
su2double Gamma
Fluid&#39;s Gamma constant (ratio of specific heats).
Definition: solver_structure.hpp:8806
su2double Gamma
Fluid&#39;s Gamma constant (ratio of specific heats).
Definition: solver_structure.hpp:6146
Main class for defining the element structure.
Definition: element_structure.hpp:57
Main class for defining the turbulence model solver.
Definition: solver_structure.hpp:8455