Exemplo n.º 1
0
volScalarField dynamicKEqn<BasicTurbulenceModel>::Ck
(
    const volSymmTensorField& D,
    const volScalarField& KK
) const
{
    const volSymmTensorField LL
    (
        simpleFilter_(dev(filter_(sqr(this->U_)) - (sqr(filter_(this->U_)))))
    );

    const volSymmTensorField MM
    (
        simpleFilter_(-2.0*this->delta()*sqrt(KK)*filter_(D))
    );

    const volScalarField Ck
    (
        simpleFilter_(0.5*(LL && MM))
       /(
            simpleFilter_(magSqr(MM))
          + dimensionedScalar("small", sqr(MM.dimensions()), VSMALL)
        )
    );

    tmp<volScalarField> tfld = 0.5*(mag(Ck) + Ck);
    return tfld();
}
locDynOneEqEddy::locDynOneEqEddy
(
    const volVectorField& U,
    const surfaceScalarField& phi,
    transportModel& transport
)
:
    LESModel(typeName, U, phi, transport),
    GenEddyVisc(U, phi, transport),

    k_
    (
        IOobject
        (
            "k",
            runTime_.timeName(),
            U_.db(),
            IOobject::MUST_READ,
            IOobject::AUTO_WRITE
        ),
        mesh_
    ),

    simpleFilter_(U.mesh()),
    filterPtr_(LESfilter::New(U.mesh(), coeffDict())),
    filter_(filterPtr_())
{
    volScalarField KK = 0.5*(filter_(magSqr(U)) - magSqr(filter_(U)));
    updateSubGridScaleFields(symm(fvc::grad(U)), KK);

    printCoeffs();
}
Exemplo n.º 3
0
volScalarField dynOneEqEddy::ck
(
    const volSymmTensorField& D,
    const volScalarField& KK
) const
{
    const volSymmTensorField LL
    (
        simpleFilter_(dev(filter_(sqr(U())) - (sqr(filter_(U())))))
    );

    const volSymmTensorField MM
    (
        simpleFilter_(-2.0*delta()*sqrt(KK)*filter_(D))
    );

    const volScalarField ck
    (
        simpleFilter_(0.5*(LL && MM))
       /(
            simpleFilter_(magSqr(MM))
          + dimensionedScalar("small", sqr(MM.dimensions()), VSMALL)
        )
    );

    tmp<volScalarField> tfld = 0.5*(mag(ck) + ck);
    return tfld();
}
void locDynOneEqEddy::correct(const tmp<volTensorField>& gradU)
{
    LESModel::correct(gradU);

    volSymmTensorField D = symm(gradU);

    volScalarField KK = 0.5*(filter_(magSqr(U())) - magSqr(filter_(U())));
    KK.max(dimensionedScalar("small", KK.dimensions(), SMALL));

    volScalarField P = 2.0*nuSgs_*magSqr(D);

    fvScalarMatrix kEqn
    (
       fvm::ddt(k_)
     + fvm::div(phi(), k_)
     - fvm::laplacian(DkEff(), k_)
    ==
       P
     - fvm::Sp(ce(D, KK)*sqrt(k_)/delta(), k_)
    );

    kEqn.relax();
    kEqn.solve();

    bound(k_, k0());

    updateSubGridScaleFields(D, KK);
}
Exemplo n.º 5
0
void dynamicKEqn<BasicTurbulenceModel>::correctNut()
{
    const volScalarField KK
    (
        0.5*(filter_(magSqr(this->U_)) - magSqr(filter_(this->U_)))
    );

    correctNut(symm(fvc::grad(this->U_)), KK);
}
Exemplo n.º 6
0
void dynLagrangianCsBound::correct(const tmp<volTensorField>& gradU)
{
    LESModel::correct(gradU);

    volSymmTensorField S(dev(symm(gradU())));

    volScalarField magS(mag(S));

    volVectorField Uf(filter_(U()));

    volSymmTensorField Sf(dev(symm(fvc::grad(Uf))));

    volScalarField magSf(mag(Sf));

    volSymmTensorField L(dev(filter_(sqr(U())) - (sqr(filter_(U())))));

    volSymmTensorField M(2.0*sqr(delta())*(filter_(magS*S) - 4.0*magSf*Sf));

    volScalarField invT
    (
        (1.0/(theta_.value()*delta()))*pow(flm_*fmm_, 1.0/8.0)
    );

    volScalarField LM(L && M);

    fvScalarMatrix flmEqn
    (
        fvm::ddt(flm_)
      + fvm::div(phi(), flm_)
     ==
        invT*LM
      - fvm::Sp(invT, flm_)
    );

    flmEqn.relax();
    flmEqn.solve();

    bound(flm_, flm0_);

    volScalarField MM(M && M);

    fvScalarMatrix fmmEqn
    (
        fvm::ddt(fmm_)
      + fvm::div(phi(), fmm_)
     ==
        invT*MM
      - fvm::Sp(invT, fmm_)
    );

    fmmEqn.relax();
    fmmEqn.solve();

    bound(fmm_, fmm0_);

    updateSubGridScaleFields(gradU);
}
volScalarField locDynOneEqEddy::ce
(
    const volSymmTensorField& D,
    const volScalarField& KK
) const
{
    volScalarField ce =
        simpleFilter_(nuEff()*(filter_(magSqr(D)) - magSqr(filter_(D))))
       /simpleFilter_(pow(KK, 1.5)/(2.0*delta()));

    return 0.5*(mag(ce) + ce);
}
Exemplo n.º 8
0
volScalarField dynamicKEqn<BasicTurbulenceModel>::Ce() const
{
    const volSymmTensorField D(dev(symm(fvc::grad(this->U_))));

    volScalarField KK
    (
        0.5*(filter_(magSqr(this->U_)) - magSqr(filter_(this->U_)))
    );
    KK.max(dimensionedScalar("small", KK.dimensions(), SMALL));

    return Ce(D, KK);
}
Exemplo n.º 9
0
volScalarField dynOneEqEddy::ce
(
    const volSymmTensorField& D,
    const volScalarField& KK
) const
{
    const volScalarField ce
    (
        simpleFilter_(nuEff()*(filter_(magSqr(D)) - magSqr(filter_(D))))
       /simpleFilter_(pow(KK, 1.5)/(2.0*delta()))
    );

    tmp<volScalarField> tfld = 0.5*(mag(ce) + ce);
    return tfld();
}
Exemplo n.º 10
0
volScalarField dynamicKEqn<BasicTurbulenceModel>::Ce
(
    const volSymmTensorField& D,
    const volScalarField& KK
) const
{
    const volScalarField Ce
    (
        simpleFilter_(this->nuEff()*(filter_(magSqr(D)) - magSqr(filter_(D))))
       /simpleFilter_(pow(KK, 1.5)/(2.0*this->delta()))
    );

    tmp<volScalarField> tfld = 0.5*(mag(Ce) + Ce);
    return tfld();
}
Exemplo n.º 11
0
void dynamicKEqn<BasicTurbulenceModel>::correct()
{
    if (!this->turbulence_)
    {
        return;
    }

    // Local references
    const alphaField& alpha = this->alpha_;
    const rhoField& rho = this->rho_;
    const surfaceScalarField& alphaRhoPhi = this->alphaRhoPhi_;
    const volVectorField& U = this->U_;
    volScalarField& nut = this->nut_;
    fv::options& fvOptions(fv::options::New(this->mesh_));

    LESeddyViscosity<BasicTurbulenceModel>::correct();

    volScalarField divU(fvc::div(fvc::absolute(this->phi(), U)));

    tmp<volTensorField> tgradU(fvc::grad(U));
    const volSymmTensorField D(dev(symm(tgradU())));
    const volScalarField G(this->GName(), 2.0*nut*(tgradU() && D));
    tgradU.clear();

    volScalarField KK(0.5*(filter_(magSqr(U)) - magSqr(filter_(U))));
    KK.max(dimensionedScalar("small", KK.dimensions(), SMALL));

    tmp<fvScalarMatrix> kEqn
    (
        fvm::ddt(alpha, rho, k_)
      + fvm::div(alphaRhoPhi, k_)
      - fvm::laplacian(alpha*rho*DkEff(), k_)
    ==
        alpha*rho*G
      - fvm::SuSp((2.0/3.0)*alpha*rho*divU, k_)
      - fvm::Sp(Ce(D, KK)*alpha*rho*sqrt(k_)/this->delta(), k_)
      + kSource()
      + fvOptions(alpha, rho, k_)
    );

    kEqn.ref().relax();
    fvOptions.constrain(kEqn.ref());
    solve(kEqn);
    fvOptions.correct(k_);
    bound(k_, this->kMin_);

    correctNut(D, KK);
}
volScalarField locDynOneEqEddy::ck
(
    const volSymmTensorField& D,
    const volScalarField& KK
) const
{
    volSymmTensorField LL =
        simpleFilter_(dev(filter_(sqr(U())) - (sqr(filter_(U())))));

    volSymmTensorField MM = simpleFilter_(-2.0*delta()*pow(KK, 0.5)*filter_(D));

    volScalarField ck =
        simpleFilter_(0.5*(LL && MM))
       /(
            simpleFilter_(magSqr(MM))
          + dimensionedScalar("small", sqr(MM.dimensions()), VSMALL)
        );

    return 0.5*(mag(ck) + ck);
}
dimensionedScalar dynOneEqEddy::ck_(const volSymmTensorField& D) const
{
    volScalarField KK = 0.5*(filter_(magSqr(U())) - magSqr(filter_(U())));

    volSymmTensorField LL = dev(filter_(sqr(U())) - (sqr(filter_(U()))));

    volSymmTensorField MM =
        delta()*(filter_(sqrt(k_)*D) - 2*sqrt(KK + filter_(k_))*filter_(D));

    return average(LL && MM)/average(magSqr(MM));
}
Exemplo n.º 14
0
dynOneEqEddy::dynOneEqEddy
(
    const volVectorField& U,
    const surfaceScalarField& phi,
    transportModel& transport,
    const word& turbulenceModelName,
    const word& modelName
)
:
    LESModel(modelName, U, phi, transport, turbulenceModelName),
    GenEddyVisc(U, phi, transport),

    k_
    (
        IOobject
        (
            "k",
            runTime_.timeName(),
            mesh_,
            IOobject::MUST_READ,
            IOobject::AUTO_WRITE
        ),
        mesh_
    ),

    simpleFilter_(U.mesh()),
    filterPtr_(LESfilter::New(U.mesh(), coeffDict())),
    filter_(filterPtr_())
{
    bound(k_, kMin_);

    const volScalarField KK(0.5*(filter_(magSqr(U)) - magSqr(filter_(U))));
    updateSubGridScaleFields(symm(fvc::grad(U)), KK);

    printCoeffs();
}
dimensionedScalar dynOneEqEddy::ce_(const volSymmTensorField& D) const
{
    volScalarField KK = 0.5*(filter_(magSqr(U())) - magSqr(filter_(U())));

    volScalarField mm =
        pow(KK + filter_(k_), 1.5)/(2*delta()) - filter_(pow(k_, 1.5))/delta();

    volScalarField ee =
        2*delta()*ck_(D)*
        (
            filter_(sqrt(k_)*magSqr(D))
            - 2*sqrt(KK + filter_(k_))*magSqr(filter_(D))
        );

    return average(ee*mm)/average(mm*mm);
}
Exemplo n.º 16
0
/*---------------------------------------------*/
void Filter(csr_t *A, csr_t *B, double drptol) {
    /*---------------------------------------------*/
    int n,nnz,job,err;
    /*---------------------------------------------*/
    n = A->n;
    nnz = A->nnz;
    malloc_csr(n, nnz, B);
    job = 2;
    filter_(&n, &job, &drptol, A->a, A->ja, A->ia,
            B->a, B->ja, B->ia, &nnz, &err);
    if (err != 0) {
        printf("SPARSKIT filter error![%d]\n", err);
        exit(-1);
    }
    nnz = B->ia[n]-1;
    /*------ resize B*/
    realloc_csr(B, nnz);
}
Exemplo n.º 17
0
void dynamicLagrangian<BasicTurbulenceModel>::correct()
{
    if (!this->turbulence_)
    {
        return;
    }

    // Local references
    const surfaceScalarField& phi = this->phi_;
    const volVectorField& U = this->U_;

    LESeddyViscosity<BasicTurbulenceModel>::correct();

    tmp<volTensorField> tgradU(fvc::grad(U));
    const volTensorField& gradU = tgradU();

    volSymmTensorField S(dev(symm(gradU)));
    volScalarField magS(mag(S));

    volVectorField Uf(filter_(U));
    volSymmTensorField Sf(dev(symm(fvc::grad(Uf))));
    volScalarField magSf(mag(Sf));

    volSymmTensorField L(dev(filter_(sqr(U)) - (sqr(filter_(U)))));
    volSymmTensorField M
    (
        2.0*sqr(this->delta())*(filter_(magS*S) - 4.0*magSf*Sf)
    );

    volScalarField invT
    (
        (1.0/(theta_.value()*this->delta()))*pow(flm_*fmm_, 1.0/8.0)
    );

    volScalarField LM(L && M);

    fvScalarMatrix flmEqn
    (
        fvm::ddt(flm_)
      + fvm::div(phi, flm_)
     ==
        invT*LM
      - fvm::Sp(invT, flm_)
    );

    flmEqn.relax();
    flmEqn.solve();

    bound(flm_, flm0_);

    volScalarField MM(M && M);

    fvScalarMatrix fmmEqn
    (
        fvm::ddt(fmm_)
      + fvm::div(phi, fmm_)
     ==
        invT*MM
      - fvm::Sp(invT, fmm_)
    );

    fmmEqn.relax();
    fmmEqn.solve();

    bound(fmm_, fmm0_);

    correctNut(gradU);
}
Exemplo n.º 18
0
void intps(float *xi, float *yi, float *xo, float *yo, int nxi, int nxo,
		int nt, float dt, int np, float fmin, float fmax, int ntfft, 
		int niter, float tol, 
		float *xipre, int nxipre, complex *ccexp, int iccexp,
		complex *ccexpo, int iccexpo) {

	int it,ix,lftwk;
        float df,dxmin;
        float *dxi, *dp, *wp;
        float *wk, *ftwk;
        complex *sig, *b, *d, *r, *wk1, *wk2, *wk3, *wk4, *wk5;
        complex *swk, *fyi, *si, *so;
        complex ctemp;
        int ifmin, nph, nf, inifft, iniwp;

	float *xip, *yip, dxp;
	int nxip, npp;
	int icexp, icexpo;

	/* check to see if the input xi is changed or not */
	if(iccexp == -1) {
		icexp = -1;
	} else {
		icexp = 0;
		icexpo = 0;
		if(nxi == nxipre) {
			icexp = 1;
			icexpo = 1;
			for(ix=0;ix<nxi;ix++) {
				if(xi[ix]!=xipre[ix]) {
					icexp = 0;
					icexpo = 0;
					break;
				}
			}
		}
	}
	if(iccexpo == -1) {
		icexpo = -1;
	}

	/* pad input data 5 traces on each side */
	nxip = nxi + 10;
	npp = np + 10;

    	dxi = (float*)malloc(nxip*sizeof(float));
    	xip = (float*)malloc(nxip*sizeof(float));
    	yip = (float*)malloc(nxip*nt*sizeof(float));

	if(nxi>1) {
		dxp = xi[1] - xi[0];
	} else {
		dxp = 1;
	}
	for(ix=0;ix<5;ix++) {
		xip[ix] = xi[0] + (ix-5)*dxp;
		/* taper first trace and put at padded trace location */
		for(it=0;it<nt;it++) {
			yip[it+ix*nt]=yi[it]*(ix+1.)/5.;
		}
	}
	for(ix=0;ix<nxi;ix++) {
		xip[ix+5] = xi[ix]; 
		for(it=0;it<nt;it++) yip[it+(ix+5)*nt] = yi[it+ix*nt];
	}
	if(nxi>1) {
		dxp = xi[nxi-1] - xi[nxi-2];
	} else {
		dxp = 1;
	}
	for(ix=0;ix<5;ix++) {
		xip[nxi+5+ix] = xi[nxi-1] + (ix+1)*dxp;
		/* taper last trace and put at padded trace location  */
		for(it=0;it<nt;it++) {
			yip[it+(ix+nxi+5)*nt]=yi[it+(nxi-1)*nt]*(5.-ix)/5.;
		}
	}

	/* initialize tau-p interpolation */
    	initpf_(&ntfft,&dt,&fmin,&fmax,&nxip,&ifmin,&df,
		&nf,&lftwk,&npp,&nph);

	/* design inverse filter */
    	d = (complex*)malloc(npp*sizeof(complex));
    	sig = (complex*)malloc(npp*sizeof(complex));
    	r = (complex*)malloc(npp*npp*sizeof(complex));
    	b = (complex*)malloc(npp*sizeof(complex));
    	wk1 = (complex*)malloc(npp*sizeof(complex));
    	wk2 = (complex*)malloc(npp*sizeof(complex));
    	wk3 = (complex*)malloc(npp*sizeof(complex));
    	wk4 = (complex*)malloc(npp*sizeof(complex));
    	wk5 = (complex*)malloc(npp*sizeof(complex));


    	filter_(xip,&nxip,&nph,dxi,&dxmin,
		d,sig,r,b,wk1,wk2,wk3,wk4,wk5,&tol,&niter);

    	free(sig);
    	free(r);
    	free(b);
    	free(wk1);
    	free(wk2);
   	free(wk3);
    	free(wk4);
    	free(wk5);

    	/* trace fft */
    	fyi = (complex*)malloc(nf*nxip*sizeof(complex));
    	ftwk = (float*)malloc(lftwk*sizeof(float));
    	wk = (float*)malloc(ntfft*sizeof(float));
    	inifft = 0;
    	trafft_(yip,fyi,wk,ftwk,&nt,&ntfft,&nxip,
		&ifmin,&nf,&lftwk,&inifft);

	/* forward tau-p in frequency domain */
    	iniwp = 0;
    	si = (complex*)malloc(nf*npp*sizeof(complex));
    	wp = (float*)malloc(nf*npp*sizeof(float));
    	dp = (float*)malloc(nf*sizeof(float));
    	fwdtp_(fyi,si,wp,dp,&nf,&ifmin,&df,
		&nph,xip,dxi,&nxip,&dxmin,&iniwp,ccexp,&icexp);
    	free(fyi);
    	free(dxi);

    	/* apply the filter  */
    	so = (complex*) malloc(nf*npp*sizeof(complex));
    	filtp_(si,so,d,&nf,&nph);
    	free(si);
    	free(d);

    	/* inverse tau-p transform */

    	swk = (complex*)malloc(nf*sizeof(complex));
    	invtp_(so,yo,dp,swk,wp,xo,wk,ftwk,
			&nf,&nt,&ntfft,&nxo,&nph,&ifmin,&lftwk,
			ccexpo,&icexpo); 

    	free(so);
    	free(swk);
    	free(wp);
    	free(wk);
    	free(ftwk);
    	free(dp);
	free(xip);
	free(yip);

	np = npp;
}
Exemplo n.º 19
0
void Fsystem::walkdir(const char * pathname) {
	int32_t max_path_size = 1024;
	char absolute_path[1024] = {'\0'};
	DIR* dirp = opendir(pathname);
	struct dirent* p_dirent;
	struct dirent dirent;
	if (NULL == dirp) {
		char* err_msg = NULL;
		if (errno == EACCES) {
			err_msg = "no permission";
		} else if (errno == ENFILE) {
			err_msg = "too many files open";
		} else if (errno == EMFILE) {
			err_msg = "too many fd open";
		} else if (errno == ENOMEM) {
			err_msg = "too many dirs open";
		} else {
			err_msg = "Unknown";
		}
		exit(-1);
	}

	int ret = chdir(pathname);
	if (ret != 0) {
		exit(-1);
	}

	while (0 == readdir_r(dirp, &dirent, &p_dirent)) {
		if (NULL == p_dirent) {
			break;
		}
		char * d_name = dirent.d_name;
		if (!strcmp(d_name, "..") || !strcmp(d_name, ".")) {
			continue;
		}

		struct stat * st = (struct stat *)malloc(sizeof(struct stat));;
		// todo: check malloc
		int status = lstat(d_name, st);
		if (status == -1){
			exit(-1);
		}else{
			int path_len = snprintf(absolute_path, max_path_size, "%s/%s", pathname, d_name);
			absolute_path[path_len] = '\0';

			// implantation by function objection
			if (filter_ && filter_(absolute_path))
				continue;

			if(S_ISDIR(st->st_mode)){
				this->walkdir(absolute_path);
			}else
			if (S_ISREG(st->st_mode)) {
				travel_cb_.file_handler(absolute_path, st);
			}else
			if (S_ISLNK(st->st_mode)) {
			//	check_queue_->insert(absolute_path, st);
				travel_cb_.symlink_handler(absolute_path, st);
			}else{
			}
		}
		absolute_path[0] = '\0';
	}
	closedir(dirp);
	ret	= chdir("../");
	if(ret != 0){
		exit(-1);
	}
}
Exemplo n.º 20
0
tmp<volScalarField> scaleSimilarity::k() const
{
    return(0.5*(filter_(magSqr(U())) - magSqr(filter_(U()))));
}
Exemplo n.º 21
0
tmp<volScalarField> scaleSimilarity::epsilon() const
{
    volSymmTensorField D = symm(fvc::grad(U()));

    return((filter_(sqr(U())) - sqr(filter_(U()))) && D);
}
Exemplo n.º 22
0
tmp<volSymmTensorField> scaleSimilarity::B() const
{
    return(filter_(sqr(U())) - sqr(filter_(U())));
}
Exemplo n.º 23
0
 void logImpl(Backend::FieldInfo const& fi) override
 {
   if( filter_(fi) )
     sink_->log(fi);
 }