inline bool Upwind_ZCoDiS<Tprec, Dim>::calcCoefficients3D () { prec_t dyz = dy * dz, dyz_dx = Gamma * dyz / dx; prec_t dxz = dx * dz, dxz_dy = Gamma * dxz / dy; prec_t dxy = dx * dy, dxy_dz = Gamma * dxy / dz; prec_t dxyz_dt = dx * dy * dz / dt; prec_t ce, cw; prec_t cn, cs; prec_t cf, cb; aE = 0.0; aW = 0.0; aN = 0.0; aS = 0.0; aF = 0.0; aB = 0.0; aP = 0.0; sp = 0.0; for (int k = bk; k <= ek; ++k) for (int i = bi; i <= ei; ++i) for (int j = bj; j <= ej; ++j) { ce = ( u(i,j,k) + u(i,j+1,k) ) * 0.5 * dyz; cw = ( u(i-1,j,k) + u(i-1,j+1,k) ) * 0.5 * dyz; cn = ( v(i,j,k) + v(i+1,j,k) ) * 0.5 * dxz; cs = ( v(i,j-1,k) + v(i+1,j-1,k) ) * 0.5 * dxz; cf = ( w(i,j,k) + w(i,j,k+1) ) * 0.5 * dxy; cb = ( w(i,j,k) + w(i,j,k-1) ) * 0.5 * dxy; if ( ce > 0 ) ce = 0.0; else ce = -ce; // // This statement: if ( cw <= 0 ) cw = 0.0; // // is more efficient than the next similar one: // if ( cw > 0 ) cw = cw; // else cw = 0.0; if ( cn > 0 ) cn = 0.0; else cn = -cn; if ( cs <= 0 ) cs = 0.0; if ( cf > 0 ) cf = 0.0; else cf = -cf; if ( cb <= 0 ) cb = 0.0; aE (i,j,k) = (dyz_dx + ce); aW (i,j,k) = (dyz_dx + cw); aN (i,j,k) = (dxz_dy + cn); aS (i,j,k) = (dxz_dy + cs); aF (i,j,k) = (dxy_dz + cf); aB (i,j,k) = (dxy_dz + cb); aP (i,j,k) = aE (i,j,k) + aW (i,j,k) + aN (i,j,k) + aS (i,j,k) + aF (i,j,k) + aB (i,j,k) + dxyz_dt; // + (ce - cw); // Term (ce - cw) is part of discretizated continuity equation, and // must be equal to zero when that equation is valid, so I can avoid // this term for efficiency. sp(i,j,k) = w(i,j,k) * dxyz_dt - ( p(i,j,k+1)- p(i,j,k) ) * dxy; } calc_dw_3D(); applyBoundaryConditions3D(); return 0; }
inline bool CDS_YLES<T_number, Dim>::calcCoefficients(const ScalarField &nut) { T_number dyz = dy * dz, dxz = dx * dz, dxy = dx * dy; T_number dyz_dx = dyz / dx, dxz_dy = dxz / dy, dxy_dz = dxy / dz; T_number ce, cw, cn, cs, cf, cb; T_number nutinter; T_number dxyz_dt = dx * dy * dz / dt; T_number RaGaVol = Rayleigh * Gamma * 0.5 * dx * dy * dz; for (int i = bi; i <= ei; ++i) for (int j = bj; j <= ej; ++j) for (int k = bk; k <= ek; ++k) { ce = ( u(i,j,k) + u(i,j+1,k) ) * 0.5 * dyz; cw = ( u(i-1,j,k) + u(i-1,j+1,k) ) * 0.5 * dyz; cn = ( v(i,j,k) + v(i,j+1,k) ) * 0.5 * dxz; cs = ( v(i,j,k) + v(i,j-1,k) ) * 0.5 * dxz; cf = ( w(i,j,k) + w(i,j,k+1) ) * 0.5 * dxy; cb = ( w(i-1,j,k) + w(i-1,j,k+1) ) * 0.5 * dxy; // // nut is calculated on center of volumes, therefore, nut // must be staggered in y direction: nutinter = 0.5 * ( nut(i,j,k) + nut(i,j+1,k) ); aE (i,j,k) = (Gamma + nutinter) * dyz_dx - ce * 0.5; aW (i,j,k) = (Gamma + nutinter) * dyz_dx + cw * 0.5; aN (i,j,k) = 2 * (Gamma + nutinter) * dxz_dy - cn * 0.5; aS (i,j,k) = 2 * (Gamma + nutinter) * dxz_dy + cs * 0.5; aF (i,j,k) = (Gamma + nutinter) * dxy_dz - cf * 0.5; aB (i,j,k) = (Gamma + nutinter) * dxy_dz + cb * 0.5; aP (i,j,k) = aE (i,j,k) + aW (i,j,k) + aN (i,j,k) + aS (i,j,k) + aF (i,j,k) + aB (i,j,k) + dxyz_dt; // aP (i,j,k) /= alpha; // under-relaxation // + (ce - cw) + (cn - cs) + (cf - cb); // Term (ce - cw) is part of discretizated continuity equation, and // must be equal to zero when that equation is valid, so I can avoid // this term for efficiency. sp (i,j,k) = v(i,j,k) * dxyz_dt - ( p(i,j+1,k) - p(i,j,k) ) * dxz + RaGaVol * ( T(i,j,k) + T(i,j+1,k) ) + nutinter * ( (u(i,j+1,k) - u(i,j,k) - u(i-1,j+1,k) + u(i-1,j,k)) * dz + (w(i,j+1,k) - w(i,j,k) - w(i,j+1,k-1) + w(i,j,k-1)) * dx ); // v(i,j,k) * (1-alpha) * aP(i,j,k)/alpha; // under-relaxation } calc_dv_3D(); applyBoundaryConditions3D(); return 1; }
bu(gs): co(mpilers): */ #include "initsupl.loc" #ifndef _MICROC_ #include <dos.h> #endif #include <portable.h> #include "mcb.h" #include "suppldbg.h" #ifdef RCS_Version static char const rcsid[] = "$Id: mcb_env.c,v 1.1 2006/06/17 03:25:05 blairdude Exp $"; #endif static int isEnvcomp(void *arg, word mcb) { return (isPSP(mcb) && mcb_env(mcb) == (unsigned)arg) ? mcb : 0; } int isEnv(const word mcb) { DBG_ENTER("isEnv", Suppl_mcb) DBG_ARGUMENTS( ("mcb=%u", mcb) ) DBG_RETURN_BI( mcb_walk(0, aF(isEnvcomp), (void*)MCB2SEG(mcb))) }
int main(int theArgCount, char ** theArgs) { if (theArgCount == 1) { cout << "File name must be specified\n"; return 1; } ifstream aF( theArgs[1], ios::in ); if ( !aF.is_open() ) { cout << "File not found\n"; return 1; } LineList aVect; while (true) { char aData[500]; aF.getline(aData, sizeof aData); ProcessLine(aVect, aData); if ( aF.bad() || aF.eof() ) break; } aF.close(); if (BuildNumber == 0) { cout << "#define BUILDNUMBER string not found\n"; return 1; } ofstream aFO(theArgs[1], ios::out|ios::trunc); if ( !aFO.is_open() ) { cout << "Could not write data back to file\n"; return 1; } bool aNewLine = false; for (LineIter aIt = aVect.begin(); aIt != aVect.end(); aIt++) { if (aNewLine) aFO << endl; aFO << *aIt; aNewLine = true; } aFO.close(); cout << "Success\n"; return 0; }
void BenchcSysQuadCreuse ( INT aNbVar, INT aNbEq, cNameSpaceEqF::eTypeSysResol aType ) { bool isFixe = NRrandom3() < 0.5; //cFormQuadCreuse aSCr(aNbVar,isFixe); cFormQuadCreuse aSCr( aNbVar, cElMatCreuseGen::StdNewOne( aNbVar, aNbVar, isFixe ) ); // __NEW //aSCr.SetEpsB(1e-10); cGenSysSurResol & aS1 = aSCr; L2SysSurResol aSPl(aNbVar); cGenSysSurResol & aS2 = aSPl; bool SysFix = (aType == cNameSpaceEqF::eSysCreuxFixe); cSetEqFormelles aSet2(aType); // ,1e-10); cEqFormelleLineaire * anEq2_1 = aSet2.NewEqLin(1,aNbVar); cEqFormelleLineaire * anEq2_3 = aSet2.NewEqLin(3,aNbVar); Im1D_REAL8 aIm2(aNbVar,0.0); for (INT aK=0; aK<aNbVar; aK++) aSet2.Alloc().NewInc(aIm2.data()+aK); aSet2.SetClosed(); //if (aType != cNameSpaceEqF::eSysPlein) // aSet2.FQC()->SetEpsB(1e-10); Im1D_REAL8 aF(aNbVar,0.0); for (INT aNbTest=0 ; aNbTest<3 ; aNbTest++) { for (INT aX =0 ; aX<aNbVar; aX++) { std::vector<INT> V; V.push_back(aX); REAL aPds = 0.5; double C1 = 1; aF.data()[aX] = C1; REAL aCste = NRrandom3(); if (isFixe) { if (aX==0) aSCr.SetOffsets(V); //aS1.GSSR_AddNewEquation_Indexe(V,aPds,&C1,aCste); aS1.GSSR_AddNewEquation_Indexe(V,aPds,&C1,aCste); } else aS1.GSSR_AddNewEquation(aPds,aF.data(),aCste); aS2.GSSR_AddNewEquation(aPds,aF.data(),aCste); if ((NRrandom3() < 0.5) && (! SysFix)) anEq2_1->AddEqNonIndexee(aCste,&C1,aPds,V); else { if (SysFix) aSet2.FQC()->SetOffsets(V); anEq2_1->AddEqIndexee(aCste,&C1,aPds,V); } aF.data()[aX] = 0; } for (INT aK =0 ; aK<aNbEq; aK++) { std::vector<INT> aVInd; REAL aV3[3]; static INT I1=0; static INT I2=0; static INT I3=0; bool TransI = (NRrandom3() <0.5) && (aK != 0) && (I1 < aNbVar-1) && (I2 < aNbVar-1) && (I3 < aNbVar-1); if (TransI) { I1++; I2++; I3++; } else { I1 = std::min(aNbVar-1,INT(NRrandom3()*aNbVar)); I2 = std::min(aNbVar-1,INT(NRrandom3()*aNbVar)); I3 = std::min(aNbVar-1,INT(NRrandom3()*aNbVar)); } REAL aCste = NRrandom3(); aV3[0] = NRrandom3(); aV3[1] = NRrandom3(); aV3[2] = NRrandom3(); aF.data()[I1] += aV3[0]; aF.data()[I2] += aV3[1]; aF.data()[I3] += aV3[2]; aVInd.push_back(I1); aVInd.push_back(I2); aVInd.push_back(I3); if ((NRrandom3() < 0.5) && (! SysFix)) anEq2_3->AddEqNonIndexee(aCste,aV3,1,aVInd); else { if (SysFix) { if (! TransI) aSet2.FQC()->SetOffsets(aVInd); } anEq2_3->AddEqIndexee(aCste,aV3,1,aVInd); } if ((NRrandom3()<0.5) || isFixe) { if (isFixe) { if (! TransI) aSCr.SetOffsets(aVInd); } aS1.GSSR_AddNewEquation_Indexe(aVInd,1,aV3,aCste); } else aS1.GSSR_AddNewEquation(1,aF.data(),aCste); if (NRrandom3()<0.5) aS2.GSSR_AddNewEquation_Indexe(aVInd,1,aV3,aCste); else aS2.GSSR_AddNewEquation(1,aF.data(),aCste); aF.data()[I1] = 0; aF.data()[I2] = 0; aF.data()[I3] = 0; } bool OK; Im1D_REAL8 Sol1 = aS1.GSSR_Solve(&OK); Im1D_REAL8 Sol2 = aS2.GSSR_Solve(&OK); REAL aDif; ELISE_COPY(Sol1.all_pts(),Abs(Sol1.in()-Sol2.in()),VMax(aDif)); cout << "a Dif " << aDif << "\n"; BENCH_ASSERT(aDif<1e-4); aSet2.SolveResetUpdate(); ELISE_COPY(Sol1.all_pts(),Abs(aIm2.in()-Sol2.in()),VMax(aDif)); cout << "a Dif " << aDif << "\n"; BENCH_ASSERT(aDif<1e-4); aS1.GSSR_Reset(); aS2.GSSR_Reset(); } }
inline bool Quick_ZHay<Tprec, Dim>::calcCoefficients3D () { prec_t dyz = dy * dz, dyz_dx = Gamma * dyz / dx; prec_t dxz = dx * dz, dxz_dy = Gamma * dxz / dy; prec_t dxy = dx * dy, dxy_dz = Gamma * dxy / dz; prec_t dxyz_dt = dx * dy * dz / dt; prec_t ce, cem, cep, cw, cwm, cwp, CE, CW; prec_t cn, cnm, cnp, cs, csm, csp, CN, CS; prec_t cf, cfm, cfp, cb, cbm, cbp, CF, CB; aE = 0.0; aW = 0.0; aN = 0.0; aS = 0.0; aF = 0.0; aB = 0.0; aP = 0.0; sp = 0.0; for (int k = bk; k <= ek; ++k) for (int i = bi; i <= ei; ++i) for (int j = bj; j <= ej; ++j) { CE = ce = ( u(i ,j ,k) + u(i ,j+1,k ) ) * 0.5 * dyz; CW = cw = ( u(i-1,j ,k) + u(i-1,j+1,k ) ) * 0.5 * dyz; CN = cn = ( v(i ,j ,k) + v(i+1,j ,k ) ) * 0.5 * dxz; CS = cs = ( v(i ,j-1,k) + v(i+1,j-1,k ) ) * 0.5 * dxz; CF = cf = ( w(i ,j ,k) + w(i ,j ,k+1) ) * 0.5 * dxy; CB = cb = ( w(i ,j ,k) + w(i ,j ,k-1) ) * 0.5 * dxy; cem = cep = 0.0; cwm = cwp = 0.0; cnm = cnp = 0.0; csm = csp = 0.0; cfm = cfp = 0.0; cbm = cbp = 0.0; // QUICK as presented in Hayase et al. // ---- X if ( ce > 0 ) { CE = 0; if (i == bi) { cep = ce * (phi_0(i+1,j,k) - phi_0(i-1,j,k)) / 3.0; } else { cep = ce * 0.125 * (-phi_0(i-1,j,k) - 2*phi_0(i,j,k) + 3*phi_0(i+1,j,k)); } } else { // The case i == ei is taken in to account in applyBoundaryConditions3D. if (i == ei-1) { cem = ce * (phi_0(i+2,j,k) - phi_0(i,j,k)) / 3.0; } else if (i < ei-1) { cem = ce * 0.125 * (-phi_0(i+2,j,k) - 2*phi_0(i+1,j,k) + 3*phi_0(i,j,k)); } } if ( cw > 0 ) { // The case i == bi is taken in to account in applyBoundaryConditions3D. if (i == bi+1) { cwp = cw * (phi_0(i,j,k) - phi_0(i-2,j,k)) / 3.0; } else if (i > bi+1) { cwp = cw * 0.125 * (-phi_0(i-2,j,k) - 2*phi_0(i-1,j,k) + 3*phi_0(i,j,k)); } } else { CW = 0; if (i == ei) { cwm = cw * (phi_0(i-1,j,k) - phi_0(i+1,j,k)) / 3.0; } else { cwm = cw * 0.125 * (-phi_0(i+1,j,k) - 2*phi_0(i,j,k) + 3*phi_0(i-1,j,k)); } } // ---- Y if ( cn > 0 ) { CN = 0; if (j == bj) { cnp = cn * (phi_0(i,j+1,k) - phi_0(i,j-1,k)) / 3.0; } else { cnp = cn * 0.125 * (-phi_0(i,j-1,k) - 2*phi_0(i,j,k) + 3*phi_0(i,j+1,k)); } } else { if (j == ej-1) { cnm = cn * (phi_0(i,j+2,k) - phi_0(i,j,k)) / 3.0; } else if (i < ei-1) { cnm = cn * 0.125 * (-phi_0(i,j+2,k) - 2*phi_0(i,j+1,k) + 3*phi_0(i,j,k)); } } if ( cs > 0 ) { if (j == bj+1) { csp = cs * (phi_0(i,j,k) - phi_0(i,j-2,k)) / 3.0; } else if (j > bj+1) { csp = cs * 0.125 * (-phi_0(i,j-2,k) - 2*phi_0(i,j-1,k) + 3*phi_0(i,j,k)); } } else { CS = 0; if (j == ej) { csm = cs * (phi_0(i,j-1,k) - phi_0(i,j+1,k)) / 3.0; } else { csm = cs * 0.125 * (-phi_0(i,j+1,k) - 2*phi_0(i,j,k) + 3*phi_0(i,j-1,k)); } } // ---- Z if ( cf > 0 ) { CF = 0; cfp = cf * 0.125 * (-phi_0(i,j,k-1) - 2*phi_0(i,j,k) + 3*phi_0(i,j,k+1)); } else { if (k == ek) { cfm = cf * 0.125 * (-5*phi_0(i,j,k+1) + 6*phi_0(i,j,k) - phi_0(i,j,k-1)); } else { cfm = cf * 0.125 * (-phi_0(i,j,k+2) - 2*phi_0(i,j,k+1) + 3*phi_0(i,j,k)); } } if ( cb > 0 ) { if (k == bk) { cbp = cb * 0.125 * (-5*phi_0(i,j,k-1) + 6*phi_0(i,j,k) - phi_0(i,j,k+1)); } else { cbp = cb * 0.125 * (-phi_0(i,j,k-2) - 2*phi_0(i,j,k-1) + 3*phi_0(i,j,k)); } } else { CB = 0; cbm = cb * 0.125 * (-phi_0(i,j,k+1) - 2*phi_0(i,j,k) + 3*phi_0(i,k,k-1)); } aE (i,j,k) = dyz_dx - CE; aW (i,j,k) = dyz_dx + CW; aN (i,j,k) = dxz_dy - CN; aS (i,j,k) = dxz_dy + CS; aF (i,j,k) = dxy_dz - CF; aB (i,j,k) = dxy_dz + CB; aP (i,j,k) = aE (i,j,k) + aW (i,j,k) + aN (i,j,k) + aS (i,j,k) + aF (i,j,k) + aB (i,j,k) + dxyz_dt + (ce - cw) + (cn - cs) + (cf - cb); sp(i,j,k) = w(i,j,k) * dxyz_dt - ( p(i,j,k+1)- p(i,j,k) ) * dxy - (cep + cem - cwp - cwm + cnp + cnm - csp - csm + cfp + cfm - cbp - cbm); } calc_dw_3D(); applyBoundaryConditions3D(); return 0; }
inline bool CDS_YHay<Tprec, Dim>::calcCoefficients3D () { prec_t dyz = dy * dz, dyz_dx = Gamma * dyz / dx; prec_t dxz = dx * dz, dxz_dy = Gamma * dxz / dy; prec_t dxy = dx * dy, dxy_dz = Gamma * dxy / dz; prec_t dxyz_dt = dx * dy * dz / dt; prec_t ce, cep, cem, cw, cwp, cwm, CE, CW; prec_t cn, cnp, cnm, cs, csp, csm, CN, CS; prec_t cf, cfp, cfm, cb, cbp, cbm, CF, CB; prec_t RaGaVol = Rayleigh * Gamma * 0.5 * dx * dy * dz; aE = 0.0; aW = 0.0; aN = 0.0; aS = 0.0; aF = 0.0; aB = 0.0; aP = 0.0; sp = 0.0; for (int k = bk; k <= ek; ++k) for (int i = bi; i <= ei; ++i) for (int j = bj; j <= ej; ++j) { CE = ce = ( u(i ,j,k) + u(i ,j+1,k ) ) * 0.5 * dyz; CW = cw = ( u(i-1,j,k) + u(i-1,j+1,k ) ) * 0.5 * dyz; CN = cn = ( v(i ,j,k) + v(i ,j+1,k ) ) * 0.5 * dxz; CS = cs = ( v(i ,j,k) + v(i ,j-1,k ) ) * 0.5 * dxz; CF = cf = ( w(i ,j,k) + w(i ,j ,k+1) ) * 0.5 * dxy; CB = cb = ( w(i-1,j,k) + w(i-1,j ,k+1) ) * 0.5 * dxy; cem = cep = 0; cwm = cwp = 0; cnm = cnp = 0; csm = csp = 0; cfm = cfp = 0; cbm = cbp = 0; if ( ce > 0 ){ CE = 0; cep = ce * 0.5 * (-phi_0(i,j,k) + phi_0(i+1,j,k)); } else { cem = ce * 0.5 * (phi_0(i,j,k) - phi_0(i+1,j,k)); } if ( cw > 0 ){ cwp = cw * 0.5 * (-phi_0(i-1,j,k) + phi_0(i,j,k)); } else { CW = 0.0; cwm = cw * 0.5 * (phi_0(i-1,j,k) - phi_0(i,j,k)); } if ( cn > 0 ){ CN = 0; cnp = cn * 0.5 * (-phi_0(i,j,k) + phi_0(i,j+1,k)); } else { cnm = cn * 0.5 * (phi_0(i,j,k) - phi_0(i,j+1,k)); } if ( cs > 0 ){ csp = cs * 0.5 * (-phi_0(i,j-1,k) + phi_0(i,j,k)); } else { CS = 0.0; csm = cs * 0.5 * (phi_0(i,j-1,k) - phi_0(i,j,k)); } if ( cf > 0 ){ CF = 0; cfp = cf * 0.5 * (-phi_0(i,j,k) + phi_0(i,j,k+1)); } else { cfm = cf * 0.5 * (phi_0(i,j,k) - phi_0(i,j,k+1)); } if ( cb > 0 ){ cbp = cb * 0.5 * (-phi_0(i,j,k-1) + phi_0(i,j,k)); } else { CB = 0.0; cbm = cb * 0.5 * (phi_0(i,j,k-1) - phi_0(i,j,k)); } aE (i,j,k) = dyz_dx - CE; aW (i,j,k) = dyz_dx + CW; aN (i,j,k) = dxz_dy - CN; aS (i,j,k) = dxz_dy + CS; aF (i,j,k) = dxy_dz - CF; aB (i,j,k) = dxy_dz + CB; aP (i,j,k) = aE (i,j,k) + aW (i,j,k) + aN (i,j,k) + aS (i,j,k) + aF (i,j,k) + aB (i,j,k) + dxyz_dt + (ce - cw) + (cn - cs) + (cn - cs); sp (i,j,k) += v(i,j,k) * dxyz_dt - ( p(i,j+1,k) - p(i,j,k) ) * dxz + RaGaVol * ( T(i,j,k) + T(i,j+1,k) ) - (cep + cem - cwp - cwm + cnp + cnm - csp - csm + cfp + cfm - cbp - cbm); } calc_dv_3D(); applyBoundaryConditions3D(); return 0; }
pr(erequistes): va(lue): 0: is no MCB\item else: is a MCB re(lated to): isPSP isEnv mcb_walk se(condary subsystems): bu(gs): co(mpilers): */ #include "initsupl.loc" #include <portable.h> #include "mcb.h" #include "suppldbg.h" #ifdef RCS_Version static char const rcsid[] = "$Id: mcb_is.c,v 1.1 2006/06/17 03:25:05 blairdude Exp $"; #endif static isMCBcomp(void *arg, word mcb) { return mcb == (unsigned)arg; } int isMCB(const word mcb) { DBG_ENTER("isMCB", Suppl_mcb) DBG_ARGUMENTS( ("mcb=%u", mcb) ) DBG_RETURN_BI( mcb_walk(0, aF(isMCBcomp), (void*)mcb)) }
cFoncCarBool (bool (*aF)(int)) { for (int aC=0 ; aC<256 ; aC++) mLut[aC] = aF(aC); }