00001
00002
00003
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
00048
00049 void AerodynamicalHistoryExtrapolation();
00050 void InviscidForcesEval();
00051 void AerodynamicalForcesEval();
00052 void AerodynamicalForces();
00053
00054
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
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
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
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
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117 void NS_SUPG(sparse *S,vector b,double visc,double tau,const vector u1,const vector u0,const vector ww);
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130 void NS_GALS(sparse *S,vector b,double visc,double tau,const vector u1,const vector u0,const vector ww);
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142
00143 void NS_SUBGRID(sparse *S,vector b,double visc,double tau,const vector u1,const vector u0,const vector ww);
00144
00145
00146
00147
00148
00149
00150
00151
00152
00153
00154
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