Put T0 and p in Gas class. Updated Globalconf
This commit is contained in:
parent
6ce400c7e2
commit
ca73a502f6
@ -29,7 +29,7 @@ add_subdirectory(material)
|
|||||||
# add_subdirectory(mech)
|
# add_subdirectory(mech)
|
||||||
# add_subdirectory(seg)
|
# add_subdirectory(seg)
|
||||||
# add_subdirectory(sol)
|
# add_subdirectory(sol)
|
||||||
# add_subdirectory(sys)
|
add_subdirectory(sys)
|
||||||
# add_subdirectory(var)
|
# add_subdirectory(var)
|
||||||
|
|
||||||
add_library(tasmet_src tasmet_tracer.cpp tasmet_exception.cpp tasmet_assert.cpp)
|
add_library(tasmet_src tasmet_tracer.cpp tasmet_exception.cpp tasmet_assert.cpp)
|
||||||
|
@ -15,7 +15,7 @@ class Air : public PerfectGas {
|
|||||||
protected:
|
protected:
|
||||||
d Rs() const {return 287;}
|
d Rs() const {return 287;}
|
||||||
public:
|
public:
|
||||||
Air():PerfectGas(air){}
|
Air(d T0,d p0):PerfectGas(air,T0,p0){}
|
||||||
d cp(d T,d p) const;
|
d cp(d T,d p) const;
|
||||||
vd cp(const vd& T,const vd& p) const;
|
vd cp(const vd& T,const vd& p) const;
|
||||||
d h(d T,d p) const;
|
d h(d T,d p) const;
|
||||||
|
@ -12,16 +12,24 @@
|
|||||||
#include "air.h"
|
#include "air.h"
|
||||||
#include "nitrogen.h"
|
#include "nitrogen.h"
|
||||||
|
|
||||||
Gas* Gas::newGas(const GasType gastype) {
|
#include "tasmet_constants.h"
|
||||||
|
|
||||||
|
Gas* Gas::newGas(const GasType gastype,d T0,d p0) {
|
||||||
|
|
||||||
|
if(T0>constants::maxT || T0< constants::minT)
|
||||||
|
throw TaSMETError("Illegal reference temperature given");
|
||||||
|
if(p0>constants::maxp || p0< constants::minp)
|
||||||
|
throw TaSMETError("Illegal reference pressure given");
|
||||||
|
// End sanity checks
|
||||||
|
|
||||||
switch (gastype) {
|
switch (gastype) {
|
||||||
case helium:
|
case helium:
|
||||||
return new Helium();
|
return new Helium(T0,p0);
|
||||||
break;
|
break;
|
||||||
case air:
|
case air:
|
||||||
return new Air();
|
return new Air(T0,p0);
|
||||||
case nitrogen:
|
case nitrogen:
|
||||||
return new Nitrogen();
|
return new Nitrogen(T0,p0);
|
||||||
default:
|
default:
|
||||||
FATAL("Gas type not known");
|
FATAL("Gas type not known");
|
||||||
break;
|
break;
|
||||||
|
@ -12,7 +12,7 @@
|
|||||||
#include <armadillo>
|
#include <armadillo>
|
||||||
#include "tasmet_enum.h"
|
#include "tasmet_enum.h"
|
||||||
#include "tasmet_types.h"
|
#include "tasmet_types.h"
|
||||||
|
#include "tasmet_constants.h"
|
||||||
|
|
||||||
|
|
||||||
class Gas{
|
class Gas{
|
||||||
@ -21,19 +21,31 @@ public:
|
|||||||
private:
|
private:
|
||||||
GasType _gastype;
|
GasType _gastype;
|
||||||
protected:
|
protected:
|
||||||
Gas(GasType gastype):_gastype(gastype){}
|
d _T0,_p0; /* Reference temperature and pressure */
|
||||||
|
|
||||||
|
Gas(GasType gastype,d T0,d p0):_gastype(gastype),_T0(T0),_p0(p0){}
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Gas(const Gas& other) =delete;
|
Gas(const Gas& other) =delete;
|
||||||
Gas& operator=(const Gas&)=delete;
|
Gas& operator=(const Gas&)=delete;
|
||||||
virtual ~Gas(){}
|
virtual ~Gas(){}
|
||||||
|
|
||||||
// Static method to generate a Gas
|
// Static method to generate a Gas
|
||||||
static Gas* newGas(const GasType gastype);
|
|
||||||
|
|
||||||
|
static Gas* newGas(const GasType gastype,d T0=constants::T0,
|
||||||
|
d p0=constants::p0);
|
||||||
|
|
||||||
operator GasType() { return _gastype;}
|
operator GasType() { return _gastype;}
|
||||||
|
|
||||||
|
d T0() const {return _T0;}
|
||||||
|
d p0() const {return _p0;}
|
||||||
|
|
||||||
|
// Speed of sound at the reference temperature and pressure
|
||||||
|
d c0() const {return cm(_T0,_p0);}
|
||||||
|
d rho0() const {return rho(_T0,_p0);}
|
||||||
|
d deltanu0(d freq) const{ return sqrt(2*mu(_T0,_p0)/(rho0()*2*number_pi*freq));}
|
||||||
|
d deltanu(d freq,d T,d p) const { return sqrt(2*mu(T,p)/(rho(T,p)*2*number_pi*freq)); }
|
||||||
|
|
||||||
// Dimensionless numbers:
|
// Dimensionless numbers:
|
||||||
|
|
||||||
// Specific heat ratio
|
// Specific heat ratio
|
||||||
@ -49,6 +61,10 @@ public:
|
|||||||
virtual d rho(d T,d p) const=0;
|
virtual d rho(d T,d p) const=0;
|
||||||
virtual vd rho(const vd& T,const vd& p) const=0;
|
virtual vd rho(const vd& T,const vd& p) const=0;
|
||||||
|
|
||||||
|
// Adiabatic speed of sound
|
||||||
|
virtual d cm(d T,d p) const=0;
|
||||||
|
virtual vd cm(const vd& T,const vd& p) const=0;
|
||||||
|
|
||||||
// Internal energy [J/kg]
|
// Internal energy [J/kg]
|
||||||
virtual d e(d T,d p) const=0;
|
virtual d e(d T,d p) const=0;
|
||||||
virtual vd e(const vd& T,const vd& p) const=0;
|
virtual vd e(const vd& T,const vd& p) const=0;
|
||||||
@ -68,10 +84,6 @@ public:
|
|||||||
virtual d beta(d T,d p) const=0;
|
virtual d beta(d T,d p) const=0;
|
||||||
virtual vd beta(const vd& T,const vd& p) const=0;
|
virtual vd beta(const vd& T,const vd& p) const=0;
|
||||||
|
|
||||||
// Adiabatic speed of sound [m/s]
|
|
||||||
virtual d cm(d T,d p) const=0;
|
|
||||||
virtual vd cm(const vd& T,const vd& p) const=0;
|
|
||||||
|
|
||||||
// Dynamic viscosity [Pa*s]
|
// Dynamic viscosity [Pa*s]
|
||||||
virtual d mu(d T,d p) const=0;
|
virtual d mu(d T,d p) const=0;
|
||||||
virtual vd mu(const vd& T,const vd& p) const=0;
|
virtual vd mu(const vd& T,const vd& p) const=0;
|
||||||
|
@ -14,7 +14,7 @@ class Helium :public PerfectGas {
|
|||||||
protected:
|
protected:
|
||||||
d Rs() const {return 2070;}
|
d Rs() const {return 2070;}
|
||||||
public:
|
public:
|
||||||
Helium():PerfectGas(helium){}
|
Helium(d T0,d p0):PerfectGas(helium,T0,p0){}
|
||||||
|
|
||||||
d cp(d T,d p) const { return 5195;}
|
d cp(d T,d p) const { return 5195;}
|
||||||
vd cp(const vd& T,const vd& p) const;
|
vd cp(const vd& T,const vd& p) const;
|
||||||
|
@ -16,7 +16,7 @@ class Nitrogen : public PerfectGas {
|
|||||||
protected:
|
protected:
|
||||||
d Rs() const {return 297;}
|
d Rs() const {return 297;}
|
||||||
public:
|
public:
|
||||||
Nitrogen():PerfectGas(nitrogen){}
|
Nitrogen(d T0,d p0):PerfectGas(nitrogen,T0,p0){}
|
||||||
|
|
||||||
d cp(d T,d p) const;
|
d cp(d T,d p) const;
|
||||||
vd cp(const vd& T,const vd& p) const;
|
vd cp(const vd& T,const vd& p) const;
|
||||||
|
@ -23,7 +23,7 @@
|
|||||||
|
|
||||||
class PerfectGas: public Gas {
|
class PerfectGas: public Gas {
|
||||||
protected:
|
protected:
|
||||||
PerfectGas(GasType gastype): Gas(gastype){}
|
PerfectGas(GasType gastype,d T0,d p0): Gas(gastype,T0,p0){}
|
||||||
|
|
||||||
// Not implemented for a perfect gas:
|
// Not implemented for a perfect gas:
|
||||||
// mu, kappa, h, cp, Rs
|
// mu, kappa, h, cp, Rs
|
||||||
|
63
src/sys/globalconf.cpp
Normal file
63
src/sys/globalconf.cpp
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
#include "globalconf.h"
|
||||||
|
#include "tasmet_constants.h"
|
||||||
|
#include "tasmet_exception.h"
|
||||||
|
#include "tasmet_io.h"
|
||||||
|
|
||||||
|
Globalconf::Globalconf(us Nf,d freq)
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
set(Nf,freq);
|
||||||
|
TRACE(10,"Globalconf constructor done");
|
||||||
|
}
|
||||||
|
void Globalconf::show() const {
|
||||||
|
cout << "------- Global configuration ------ \n";
|
||||||
|
cout << "------- Number of harmonics to solve for: "<< _Nf <<"\n";
|
||||||
|
cout << "------- Fundamental frequency : " << _omg/2/number_pi << " Hz\n";
|
||||||
|
}
|
||||||
|
void Globalconf::set(us Nf,d freq){
|
||||||
|
TRACE(15,"Globalconf::set(_Nf,freq)");
|
||||||
|
d omg = 2*number_pi*freq;
|
||||||
|
//ctor
|
||||||
|
// Sanity checks
|
||||||
|
if(omg<constants::minomg && omg>constants::maxomg)
|
||||||
|
throw TaSMETError("Illegal frequency given");
|
||||||
|
if(Nf>=constants::maxNf)
|
||||||
|
throw TaSMETError("Too large number of frequencies given");
|
||||||
|
|
||||||
|
this->_Nf=Nf;
|
||||||
|
this->_omg=omg;
|
||||||
|
|
||||||
|
us Ns=this->Ns();
|
||||||
|
// Reinitialize all operators
|
||||||
|
iDFT_=zeros<dmat>(Ns,Ns);
|
||||||
|
fDFT_=zeros<dmat>(Ns,Ns);
|
||||||
|
|
||||||
|
DDTfd_=zeros<dmat>(Ns,Ns);
|
||||||
|
fDFT_.row(0).fill(1.0/double(Ns));
|
||||||
|
|
||||||
|
for(us i=1;i<=_Nf;i++){
|
||||||
|
for(us j=0; j<Ns;j++){
|
||||||
|
//Row i+1 (cosine components)
|
||||||
|
fDFT_(2*i-1,j)=2.0*cos(2.0*number_pi*double(i)*double(j)/double(Ns))/double(Ns);
|
||||||
|
//Row i (sine components)
|
||||||
|
fDFT_(2*i,j)=-2.0*sin(2.0*number_pi*double(i)*double(j)/double(Ns))/double(Ns);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
iDFT_.col(0).fill(1.0); // Steady part
|
||||||
|
for(us k=0;k<Ns;k++){
|
||||||
|
for (us n=1;n<=_Nf;n++){
|
||||||
|
iDFT_(k,2*n-1)=cos(2.0*number_pi*double(n)*double(k)/Ns);
|
||||||
|
iDFT_(k,2*n)=-sin(2.0*number_pi*double(n)*double(k)/Ns);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for(us i=1;i<=_Nf;i++){
|
||||||
|
DDTfd_(2*i-1,2*i )=-double(i)*_omg;
|
||||||
|
DDTfd_(2*i ,2*i-1)=double(i)*_omg;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
54
src/sys/globalconf.h
Normal file
54
src/sys/globalconf.h
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
// globalconf.h
|
||||||
|
//
|
||||||
|
// Author: J.A. de Jong
|
||||||
|
//
|
||||||
|
// Description:
|
||||||
|
// Global configuration options
|
||||||
|
//////////////////////////////////////////////////////////////////////
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#ifndef _GLOBALCONF_H_
|
||||||
|
#define _GLOBALCONF_H_
|
||||||
|
|
||||||
|
#include "tasmet_types.h"
|
||||||
|
#include "tasmet_tracer.h"
|
||||||
|
|
||||||
|
class Globalconf{
|
||||||
|
d _omg; // The "base" frequency in rad/s
|
||||||
|
us _Nf; // Number of frequencies to solve for
|
||||||
|
|
||||||
|
dmat fDFT_,iDFT_,DDTfd_;
|
||||||
|
// d Wfo_=0; // First order 'upwind' factor. If
|
||||||
|
// Wfo=-1, interpolation is done from
|
||||||
|
// the left side. If Wfo=0,
|
||||||
|
// interpolation is second order. If
|
||||||
|
// Wfo=1, interpolation is done from
|
||||||
|
// the right side
|
||||||
|
public:
|
||||||
|
Globalconf(us Nf,d freq);
|
||||||
|
|
||||||
|
us Nf() const {return _Nf;}
|
||||||
|
us Ns() const {return 2*_Nf+1;}
|
||||||
|
|
||||||
|
~Globalconf(){TRACE(-5,"~Globalconf()");}
|
||||||
|
d getomg() const {return _omg;}
|
||||||
|
d getfreq() const {return _omg/2/number_pi;}
|
||||||
|
// d meshPeclet(const Gas& gas,d dx,d u) const {return u*dx*gas.rho0()*gas().cp(T0())/gas().kappa(T0());}
|
||||||
|
|
||||||
|
void set(us Nf,d freq); // Set data for new frequency and
|
||||||
|
// number of samples
|
||||||
|
|
||||||
|
void setNf(us Nf){set(Nf,getfreq());}
|
||||||
|
void setfreq(d freq){set(Nf(),freq);}
|
||||||
|
void setomg(d omg) {set(Nf(),omg/(2*number_pi));}
|
||||||
|
|
||||||
|
const dmat& iDFT() const {return iDFT_;} //inverse discrete Fourier transform matrix
|
||||||
|
const dmat& fDFT() const {return fDFT_;} //forward discrete Fourier transform matrix
|
||||||
|
const dmat& DDTfd() const {return DDTfd_;}//Derivative in frequency domain
|
||||||
|
|
||||||
|
void show() const;
|
||||||
|
|
||||||
|
}; /* Class Globalconf */
|
||||||
|
|
||||||
|
#endif /* _GLOBALCONF_H_ */
|
||||||
|
//////////////////////////////////////////////////////////////////////
|
Loading…
Reference in New Issue
Block a user