problems.h

Go to the documentation of this file.
00001 /* -----------------------------------------------------------------------------------------
00002   $Id: problems.h 645 2007-05-11 13:44:31Z svacek $
00003   $Author: svacek $
00004    ----------------------------------------------------------------------------------------- */
00005 #include "math.h"
00006 #include "umfpack/umfpack.h"
00007 #include "fluidf.h"
00008 #include "vector.h"
00009 #include "matrix.h"
00010 #include "sparse.h"
00011 #include "datastr.h"
00012 #ifndef __PROBLEMS_SVH
00013 #define __PROBLEMS_SVH
00014 #define PAR_BNORM 0
00015 #define PAR_H 1
00016 #define PAR_REYNOLDS 2
00017 #define PAR_XI 3
00018 #define PAR_DELTA 4
00019 /* --------------------------------------------------------------------------- */
00020 double TimeDifference(double U1,double U2,double U3,double U4);
00021 /* --------------------------------------------------------------------------- */
00022 void INSEVelocitiesPreparation(long idx,const matrix M,motion U1,const vector u1,motion U0,const vector u0,motion W,const vector w);
00023 void RANSVelocitiesPreparation(long idx,const matrix M,motion U1,const vector u1,motion U0,const vector u0,motion W,const vector w,basefunction NU_TURBULENT,const vector nu_turbulent);
00024 void VariablesPreparation(long idx,const matrix M,motion W,const vector w,basefunction VARIABLE1,const vector variable1);
00025 void VariablesPreparation2(long idx,const matrix M,motion W,const vector w,basefunction VAR1,const vector var1,basefunction VAR2,const vector var2);
00026 void VariablesPreparation4(long idx,const matrix M,motion W,const vector w,basefunction VAR1,const vector var1,basefunction VAR2,const vector var2,basefunction VAR3,const vector var3,basefunction VAR4,const vector var4);
00027 /* --------------------------------------------------------------------------- */
00028 void   ConstructWind(vector *wind,double xwind(double,double),double ywind(double,double));
00029 double ComputeQComponent(long idx,const matrix M,basefunction U,const vector _w);
00030 double ComputeQLinComponent(long idx,const matrix M,basefunction U,const vector _w);
00031 void   PrepareLinearFunctionValues(long _iELE,const matrix M,const double *GlobalNodeValues,double *LinearFunctionQValues);
00032 void   ComputeQMotionNoP(long idx,const matrix M,motion U,const vector _w);
00033 void   ComputeQMotion(long idx,const matrix M,motion U,const vector _w);
00034 void   PrepareBFValues(long _bfn_no,const matrix M,basefunction H);
00035 double ComputeDomain();
00036 /* --------------------------------------------------------------------------- */
00037 void ConstructMatrices(sparse *A,sparse *B,sparse *BT);
00038 void PrepareProblem(sparse *A,vector b);
00039 void PrepareProblemStable(sparse *A,vector b,const vector wind,double _fce(double,double));
00040 void StokesProblem(sparse *S,vector b,double visc);
00041 void OseenProblemStable(sparse *S,vector b,const vector wind,double _fce(double,double));
00042 void NS_SemiImplicit(sparse *S,vector b,double visc,double tau,const vector u1,const vector u0,const vector w);
00043 void NS_CrankNicholson(sparse *S,vector b,double visc,double tau,const vector u,const vector sol);
00044 void ConvectionDiffusionReactionProblem(sparse *A,vector b,double _visc,double _react,const vector SOLaprox,const vector wind,double _fce(double,double));
00045 void ConvectionDiffusionReactionArtificialDiffusion(sparse *A,vector b,double _visc,double _react,const vector wind,double _fce(double,double),int TYP);
00046 /* --------------------------------------------------------------------------- */
00047 /* Drag & lift evaluation                                                      */
00048 /* --------------------------------------------------------------------------- */
00049 void AerodynamicalHistoryExtrapolation();
00050 void InviscidForcesEval();
00051 void AerodynamicalForcesEval();
00052 void AerodynamicalForces();
00053 /* ------------------------------------------------------------------------------------- */
00054 /* stabilizace */
00055 double  StabFunctionXi(double _PecletNumber);
00056 double  StabParameterH(long iELE,const matrix M,double _b1,double _b2,double _bnorm);
00057 double StabParameterH_min(long iELE);
00058 double StabParameterH_max(long iELE);
00059 double StabParameterH_mean(long iELE);
00060 int IsIsotropicElement(long iELE);
00061 double  ComputeLocalStreamNorm(const double *_u,const double *_v,double *_b1,double *_b2);
00062 double  ComputeStabParam(long iELE,double visc,double tau,const matrix M,const double *_u,const double *_v);
00063 double  ComputeStabParamDiv(long iELE,double visc,double tau,const matrix M,const double *_u,const double *_v,double *TAU_K);
00064 double ComputeStabParamTwoPhase(long iELE,double visc,double rho,double tau,const matrix M,const double *_u,const double *_v,double *TAU_K);
00065 double  ComputeStabParamTurbulence(long iELE,double visc,double tau,double _react,const matrix M,const double *_u,const double *_v);
00066 void ComputeStabParamADC(long iELE,double _visc,double _react,double _rez,double _grad,const matrix M,const double *_u,const double *_v, const double GRADX, const double GRADY,double *OUT_DELTA_K, double *OUT_DELTA_ADC);
00067 /* ------------------------------------------------------------------------------------ */
00068 /* ALE - method (vynucene kmitani)                                                      */
00069 /* ------------------------------------------------------------------------------------ */
00070 double DivOfGridVelocity(const long i);
00071 double DivOfGridVelocity0(const long i);
00072 double DivOfGridVelocity1(const long i);
00073 double DivOfGridVelocity2(const long i);
00074 double DivOfGridVelocity3(const long i);
00075 double DivOfGridVelocity4(const long i);
00076 void   ReinitPosition();
00077 double VibrationsIn_ALPHA_H(double _t);
00078 double VibrationsIn_ALPHA_H_BETA(double _t);
00079 void UpdateGridAnalytical();
00080 void MoveInitialGrid();
00081 void MoveGrid_AlphaH(double _Alpha,double _hh);
00082 void UpdateGrid_AlphaH(double _Alpha,double _hh);
00083 void UpdateGridVelocity(vector unew);
00084 void SubtractLocalDomainVelocity(long iELE,motion W);
00085 void InitGridElasticExtension();
00086 void MoveGridElasticExtension();
00087 void UpdateGridElasticExtension();
00088 void MoveAirfoilBoundaryWithFlap(const double WingAngle,const double Vertical,const double TailRelAngle);
00089 void MoveAirfoilBoundary(const double WingAngle,const double Vertical);
00090 /* ------------------------------------------------------------------------------------ */
00091 /** @brief
00092  * NS_NONNEWTONIAN: 
00093  * Discretization of Non-Newtonian NS equations with 3-point 2nd order time difference. Stabilization with SUPG method.
00094  * @param[out] S    linear system of eqs.
00095  * @param[out] b    right hand side of the system.
00096  * @param[in] visc  nondimensional viscosity.
00097  * @param[in] tau   time step.
00098  * @param[in] u2    vector with UVP at T - approximation.
00099  * @param[in] u1    vector with UVP at T-  tau.
00100  * @param[in] u0    vector with UVP at T-2 tau.
00101  * @param[in] ww    convective velocity.
00102 */
00103 void NS_NONNEWTONIAN(sparse *S,vector b,double visc,double tau,const vector u2,const vector u1,const vector u0,const vector ww);
00104 void NS_SUPG1(sparse *S,vector b,double visc,double tau,const vector u1,const vector ww);
00105 /* ------------------------------------------------------------------------------------ */
00106 /** @brief
00107  * NS_SUPG: 
00108  * Discretization of NS equations with 3-point 2nd order time difference. Stabilization with SUPG method.
00109  * @param[out] S    linear system of eqs.
00110  * @param[out] b    right hand side of the system.
00111  * @param[in] visc  nondimensional viscosity.
00112  * @param[in] tau   time step.
00113  * @param[in] u1    unknowns vector with UVP at T-  tau.
00114  * @param[in] u0    unknowns vector with UVP at T-2 tau.
00115  * @param[in] ww    convective velocity.
00116 */
00117 void NS_SUPG(sparse *S,vector b,double visc,double tau,const vector u1,const vector u0,const vector ww);
00118 /* ------------------------------------------------------------------------------------ */
00119 /** @brief
00120  * NS_GALS:
00121  * Discretization of NS equations with 3-point 2nd order time difference. Stabilization with GaLS method.
00122  * @param[out] S    linear system of eqs.
00123  * @param[out] b    right hand side of the system.
00124  * @param[in] visc  nondimensional viscosity.
00125  * @param[in] tau   time step.
00126  * @param[in] u1    unknowns vector with UVP at T-  tau.
00127  * @param[in] u0    unknowns vector with UVP at T-2 tau.
00128  * @param[in] ww    convective velocity.
00129 */
00130 void NS_GALS(sparse *S,vector b,double visc,double tau,const vector u1,const vector u0,const vector ww);
00131 /* ------------------------------------------------------------------------------------ */
00132 /** @brief
00133  * NS_SUBGRID:
00134  * Discretization of NS equations with 3-point 2nd order time difference. Stabilization with SUBGRID-SCALE method.
00135  * @param[out] S    linear system of eqs.
00136  * @param[out] b    right hand side of the system.
00137  * @param[in] visc  nondimensional viscosity.
00138  * @param[in] tau   time step.
00139  * @param[in] u1    unknowns vector with UVP at T-  tau.
00140  * @param[in] u0    unknowns vector with UVP at T-2 tau.
00141  * @param[in] ww    convective velocity.
00142 */
00143 void NS_SUBGRID(sparse *S,vector b,double visc,double tau,const vector u1,const vector u0,const vector ww);
00144 /* ------------------------------------------------------------------------------------ */
00145 /** @brief
00146  * NS_MODGLS: 
00147  * Discretization of NS equations with 3-point 2nd order time difference. Stabilization with Wang GLS method.
00148  * @param[out] S    linear system of eqs.
00149  * @param[out] b    right hand side of the system.
00150  * @param[in] visc  nondimensional viscosity.
00151  * @param[in] tau   time step.
00152  * @param[in] u1    unknowns vector with UVP at T-  tau.
00153  * @param[in] u0    unknowns vector with UVP at T-2 tau.
00154  * @param[in] ww    convective velocity.
00155 */
00156 void NS_MODGLS(sparse *S,vector b,double visc,double tau,const vector u1,const vector u0,const vector ww);
00157 void NS_PMGRID_Coarse(sparse *S,vector b,double visc,double tau,const vector u1,const vector u0,const vector ww,const vector uLES);
00158 void NS_PMGRID_Fine(sparse *S,vector b,double visc,double tau,const vector u1,const vector u0,const vector ww,const vector uLES);
00159 void DiscretizeNSSystem(sparse *S,vector b,double visc,double tau,const vector u1,const vector u0,const vector ww);
00160 /* ------------------------------------------------------------------------------------ */
00161 double ConservativityTest(double FluidModel(const long,const long,const double),void FunctionGridMotion());
00162 double AbstractFluidModel(const long iFSI,const long _MaxOfIter,const double _eps);
00163 double AbstractStructureModel(const long iFSI);
00164 double NonNewtonianFluidModel(const long iFSI,const long _NumberOfIter,const double _eps);
00165 double LaminarFluidModel(const long iFSI,const long _NumberOfIter,const double _eps);
00166 double SolveFSI_TimeStep(double FluidModel(const long,const long,const double),double StructuralModel(const long));
00167 double SolveLaminar(const long _NumberOfIter,const double _eps);
00168 double SolveNonNewtonian(const long _NumberOfIter,const double _eps);
00169 double SolvePMGRID(const long _NumberOfIter,const double _eps);
00170 double SolveInviscid(const long _NumberOfIter,const double _eps);
00171 double InviscidFluidModel(const long iFSI,const long _NumberOfIter,const double _eps);
00172 /* ------------------------------------------------------------------------------------- */
00173 double UpdateLastStepODE(double *_x,const int _NN);
00174 void   ShiftLastStepsODE(double *_x,const int _NN);
00175 void ODE_RHS_Nonlinear(double _t,double *_f,const double *_x,double CL,double CM);
00176 void ODE_RHS_Linear(double _t,double *_f,const double *_x,double CL,double CM);
00177 void ODE_RHS2(double _t,double *_f,const double *_x,double CL,double CM);
00178 double ODEPredictorRK4(double _t);
00179 double ODECorrectorRK4(double _t);
00180 double ODE3_PredictorRK4(double _t);
00181 double ODE3_CorrectorRK4(double _t);
00182 void   ODE3_RHS_NonlinearForces(double _t,double *_f,const double *_x,double CL,double CM,double CFlap);
00183 void   ODE3_RHS_LinearForces(double _t,double *_f,const double *_x,double CL,double CM,double CFlap);
00184 void   ODE3_RHS(double _t,double *_f,const double *_x,double CL,double CM,double CFlap);
00185 void   AerodynCoeficients(double *MLift,double *MTMoment,double *MLiftSlope,double *MTMomentSlope);
00186 void   AerodynCoeficients3(double *MLift,double *MTMoment,double *MLiftSlope,double *MTMomentSlope,double *FlapM,double *FlapMSlope);
00187 double StructureModel_Fixed(const long ifsi);
00188 double StructureModel_Prescribed2DOF(const long ifsi);
00189 double StructureModel_Prescribed3DOF(const long ifsi);
00190 double StructureModel_Aeroelastic2DOF(const long ifsi);
00191 double StructureModel_Aeroelastic3DOF(const long ifsi);
00192 /* ------------------------------------------------------------------------------------ */
00193 void MultiplyDD(vector out,const vector x);
00194 void PrecondDD(vector out);
00195 void ConstructPC(const sparse S);
00196 void DestructPC(); 
00197 /* ------------------------------------------------------------------------------------ */
00198 void Project2HDIV(vector ww);
00199 void HDivProjection(sparse *S,vector b,const vector ww);
00200 /* ------------------------------------------------------------------------------------ */
00201 void AddDoNothingBC(const vector ww);
00202 void AddDonothingBCWithPressure(const vector ww,vector rhs);
00203 void AddDonothingBCWithPressureCoarse(const vector ww,vector rhs);
00204 void AddDonothingBCWithPressureFine(const vector ww,vector rhs);
00205 void AddInviscidPressure();
00206 void AddDonothingBCDensity(const vector ww,vector rhs);
00207 void NormalVelocityZero();
00208 /* ------------------------------------------------------------------------------------ */
00209 void Project2HDIV(vector ww);
00210 void HDivProjection(sparse *S,vector b,const vector ww);
00211 void ComputeLinearProduction(const vector ww);
00212 void ComputeLinearProductionPatches(const vector ww);
00213 void ComputeLinearProductionPatches1(const vector ww);
00214 void ComputeLinearProductionPatchesTURB(const vector ww,const vector varA, const vector varB);
00215 void UpdateDensityViscosity();
00216 void UpdateDensity();
00217 void MeanValueReconstruction(vector _FEfunction,const vector _FVfunction);
00218 /* ------------------------------------------------------------------------------------ */
00219 double ComputeStabParamTurbulence(long iELE,double visc,double tau,double _react,const matrix M,const double *_u,const double *_v);
00220 double ComputeStabParamTurbulenceSST_OMG(long iELE,double _visc,double _tau,double _react,const matrix M,const double *_u,const double *_v);
00221 double ComputeStabParamTurbulenceSST_K(long iELE,double _visc,double _tau,double _react,const matrix M,const double *_u,const double *_v);
00222 void   ComputeStabParamADC(long iELE,double _visc,double _react,double _rez,double _grad,const matrix M,const double *_u,const double *_v,const double GRADX, const double GRADY,double *OUT_DELTA_K, double *OUT_DELTA_ADC);
00223 /* ------------------------------------------------------------------------------------ */
00224 void DynamicElasticityFillLinearEqs(double Lame_Mu_Const,double Lame_Lambda_Const,long idxELE,double _volume,long idxJ,short sign_j,vector b);
00225 void DynamicElasticityFillBodyForces(long _iELE,double _volume,long idxJ,short sign_j,double *_QVAL1,double *_QVAL2);
00226 void DynamicLinearElasticity(sparse *S,vector b,double YOUNGS_MODULE,double POISSONS_RATIO);
00227 void DynamicMassMatrix(sparse *M,const double _density);
00228 void NewmarkMethodStiffnessMatrix(sparse *S,const double YOUNGS_MODULE,const double POISSONS_RATIO, const double density, double tau);
00229 void NewmarkMethodDynamicLoads(vector b,const double YOUNGS_MODULE,const double POISSONS_RATIO, const double density,const double tau,const vector XVELOCITY,const vector XACCELERATION);
00230 /* ------------------------------------------------------------------------------------ */
00231 void StaticElasticityFillLinearEqs(double Lame_Mu_Const,double Lame_Lambda_Const,long idxELE,double _volume,long idxJ,short sign_j,vector b);
00232 void StaticElasticityFillBodyForces(long _iELE,double _volume,long idxJ,short sign_j,double *_QVAL1,double *_QVAL2);
00233 void StaticLinearElasticity(sparse *S,vector b,double YOUNGS_MODULE,double POISSONS_RATIO);
00234 void StaticMassMatrix(sparse *M,const double _density);
00235 /* ------------------------------------------------------------------------------------ */
00236 void MeshMotionFillLinearEqs(double Lame_Mu_Const,double Lame_Lambda_Const,long idxELE,double _volume,long idxJ,short sign_j);
00237 void ExtendALEVelocityFillStiffnessMatrix(sparse *S);
00238 void ExtendALEVelocityFillTension(vector b);
00239 /* ------------------------------------------------------------------------------------ */
00240 void InitGridElasticExtension();
00241 void MoveGridElasticExtension();
00242 void UpdateGridElasticExtension();
00243 void NS_SUPG_reziduum(vector rez,double visc,double tau,const vector u1,const vector u0,const vector ww);
00244 void NS_GLS_reziduum(vector rez,const vector u2,const vector u1,const vector u0,const vector ww);
00245 void NS_GLS_matrixmultiplication(vector mult,const vector u2,const vector u1,const vector u0,const vector ww);
00246 void NS_EULER(sparse *S,vector b,double tau,const vector u1,const vector u0,const vector ww);
00247 /* ------------------------------------------------------------------------------------ */
00248 void SolveTwoPhaseFlow();
00249 void InitTwoPhase();
00250 void StepTwoPhaseFlow();
00251 void LevelSetReinitializationA();
00252 void LevelSetReinitialization();
00253 void SurfaceIntersection(long iELE,double *xSEG,double *ySEG);
00254 void LevelSetReconstruction(const vector _LevelSetFunction);
00255 void LevelSetReconstructionA(const vector _LevelSetFunction);
00256 void Density_ViscosityReconstruction(vector _P1Density,vector _P1Viscosity,const vector _P1LevelSetFunction);
00257 double TWOPHASE_TransportExplicit(double deltatau,const vector ww);
00258 void NS_TWOPHASE(sparse *S,vector b,double tau,const vector u1,const vector u0,const vector ww);
00259 double LevelSetFunctionEvaluate(long iELE,int mQuad);
00260 double LevelSetFunctionEvaluate1(long iELE,int mQuad);
00261 void TWOPHASE_RHSVelocityNS(long iELE,double tau,double _rhoA,const double DELTA_K,double *QVAL_U,double *QVAL_V);
00262 void TWOPHASE_FillMomentumEqs(long idxELE,double tau,double _rhoA,double _volume,long idxJ,short sign_j,double DELTA_K,double TAU_K);
00263 void TWOPHASE_FillPressureGradNS(long idxELE,double _rhoA,double _volume,long idxJ,short sign_j,const double DELTA_K);
00264 void TWOPHASE_FillContinuityPressureStabilization(long idxELE,double _volume,long idxJ,short sign_j,const double DELTA_K);
00265 double TWOPHASE_RHSPressureNS(long iELE,double tau);
00266 double TWOPHASE_TransportFEMImplicit(double deltatau,const vector u2,const vector u1);
00267 
00268 void ComputeSurfaceHeight(double *AverageHeight,double *LowestHeight,double *HighestHeight,double *LeftSrf,double *RightSrf);
00269 void ComputeEnergies();
00270 
00271 
00272 
00273 
00274 
00275 #endif
00276 
00277 
00278 

Generated on Sun May 27 11:59:43 2007 for FEMFLUID by  doxygen 1.4.6