支持a
W
wangzhixiong08
@wangzhixiong08
帖子
-
李老师要不要开设一个FLUENT版块下的UDF子版块呀? -
多孔介质-UDF讨论/************************************************** **********************/ /* Porous Media Source Code */ /* */ /* By Greg Perkins */ /* CANCES, Australian Technology Park */ /* Ph: 02 9318 0004, Fax: 02 9319 2328 */ /* Email: perkinsg@cances.atp.com.au */ /* */ /* Started: 10-11-99 */ /* */ /* Revised: 22-11-99 */ /************************************************** **********************/ /* ---- These routines implement a porous media model (same as standard Fluent model) that can vary spatially and temporily. To use in Fluent compile and link source library as described in the Fluent UDF manual. Then use the udf in the source terms for momentum equations */ #include "udf.h" #include "sg.h" /* ---- use a user defined scalar to track material properties of the domain */ enum { PERM, N_REQUIRED_UDS }; /* --- misc defines */ #define PERM_EXP_VOID 35.0 #define PERM_EXP_MATERIAL -20.0 #define PERM_ADJ_FALSE 0 #define PERM_ADJ_TRUE 1 #define UDS_PERM(alpha) log10(alpha) /* --- permeability function for scalar-0 */ #define WEIGHT 1.0e20 /* --- weighting co-eff in linearized eqn */ #define WEIGHT2 1.0e20 #define INLET_VELOCITY 10.0 /* --- inlet velocity in m/s */ /* ---- define criteria for various possible configurations */ #define MAT_CHANNEL(x,y,z) ((y<=0.25) || (y>=0.75)) #define MAT_STEP(x,y,z) ( ((x<=1.0)&&(y<=0.5)) || ((x>1.0)&&(y<=0.25)) ) #define MAT_ONECHANNEL(x,y,z) (y<=0.5) #define MAT_CHANNEL2(x,y,z) ( ((x<=1.0)&&(y<=0.5)) || ((x>1.0)&&(y<=0.25)) || (y>=0.95) ) /* ------------------------------------------------------------------------ Material Properties This routine returns the local properties of the material (alpha,C2) for a given location in the domain (x,y,z). ------------------------------------------------------------------------ */ void Material_Properties(real x, real y, real z, real *alpha, real *C2) { /* --- use this routine to return the permeability, alpha and the co-efficient C2, for each location x,y,z in the domain. No Modifications needed for 2D. For time dependent porous media use the RP_Get_Real("flow time") function to find out t (secs) */ if MAT_STEP(x,y,z) { *alpha = pow(10.0,PERM_EXP_MATERIAL); *C2 = 0.0; } else { *alpha = pow(10.0,PERM_EXP_VOID); *C2 = 0.0; } } /* ------------------------------------------------------------------------ X_Momentum_Source This routine returns the source term for the X-momentum term for each control volume in the domain. The local properties are obtained by calling Material_Properties ------------------------------------------------------------------------ */ DEFINE_SOURCE(SRCE_Xmom,cell,thread,dS,eqn) { real x[ND_ND]; real alpha, C2, constant1, constant2, Ux, source; /* --- determine x,y,z co-ordinates of cell */ C_CENTROID(x,cell,thread); /* --- determine local properties */ Material_Properties(x[0], x[1], x[2], &alpha, &C2); /* --- determine constants 1,2 */ constant1 = C_MU_L(cell,thread)/alpha; constant2 = 0.5 * C_R(cell,thread) * C2; /* --- determine x-velocity */ Ux = C_U(cell,thread); source = -(constant1*Ux + constant2 * fabs(Ux) * Ux); dS[eqn] = -(constant1 + 2 * constant2 * fabs(Ux)); /* XXX CHECK */ return source; } /* ------------------------------------------------------------------------ Y_Momentum_Source This routine returns the source term for the Y-momentum term for each control volume in the domain. The local properties are obtained by calling Material_Properties ------------------------------------------------------------------------ */ DEFINE_SOURCE(SRCE_Ymom, cell, thread, dS, eqn) { real x[ND_ND]; real alpha, C2, constant1, constant2, Uy, source; /* --- determine x,y,z co-ordinates of cell */ C_CENTROID(x,cell,thread); /* --- determine local properties */ Material_Properties(x[0], x[1], x[2], &alpha, &C2); /* --- determine constants 1,2 */ constant1 = C_MU_L(cell,thread)/alpha; constant2 = 0.5 * C_R(cell,thread) * C2; /* --- determine y-velocity */ Uy = C_V(cell,thread); source = -(constant1*Uy + constant2 * fabs(Uy) * Uy); dS[eqn] = -(constant1 + 2 * constant2 * fabs(Uy)); /* XXX CHECK */ return source; } /* ------------------------------------------------------------------------ Z_Momentum_Source This routine returns the source term for the Z-momentum term for each control volume in the domain. The local properties are obtained by calling Material_Properties ------------------------------------------------------------------------ */ DEFINE_SOURCE(SRCE_Zmom, cell, thread, dS, eqn) { real x[ND_ND]; real alpha, C2, constant1, constant2, Uz, source; /* --- determine x,y,z co-ordinates of cell */ C_CENTROID(x,cell,thread); /* --- determine local properties */ Material_Properties(x[0], x[1], x[2], &alpha, &C2); /* --- determine constants 1,2 */ constant1 = C_MU_L(cell,thread)/alpha; constant2 = 0.5 * C_R(cell,thread) * C2; /* --- determine z-velocity */ Uz = C_W(cell,thread); source = -(constant1*Uz + constant2 * fabs(Uz) * Uz); dS[eqn] = -(constant1 + 2 * constant2 * fabs(Uz)); /* XXX CHECK */ return source; }