[1D] Make better use of local variables

This commit is contained in:
Ray Speth 2016-06-28 17:35:40 -04:00
parent ce9a17fb76
commit cd958a343b
6 changed files with 145 additions and 193 deletions

View file

@ -62,8 +62,7 @@ std::string Domain1D::componentName(size_t n) const
size_t Domain1D::componentIndex(const std::string& name) const
{
size_t nc = nComponents();
for (size_t n = 0; n < nc; n++) {
for (size_t n = 0; n < nComponents(); n++) {
if (name == componentName(n)) {
return n;
}
@ -127,8 +126,8 @@ void Domain1D::eval(size_t jg, doublereal* xg, doublereal* rg,
doublereal* rsd = rg + loc();
integer* diag = mask + loc();
size_t jmin, jmax, jpt, j, i;
jpt = jg - firstPoint();
size_t jmin, jmax;
size_t jpt = jg - firstPoint();
if (jg == npos) { // evaluate all points
jmin = 0;
@ -138,14 +137,14 @@ void Domain1D::eval(size_t jg, doublereal* xg, doublereal* rg,
jmax = std::min(jpt+1,m_points-1);
}
for (j = jmin; j <= jmax; j++) {
for (size_t j = jmin; j <= jmax; j++) {
if (j == 0 || j == m_points - 1) {
for (i = 0; i < m_nv; i++) {
for (size_t i = 0; i < m_nv; i++) {
rsd[index(i,j)] = residual(x,i,j);
diag[index(i,j)] = 0;
}
} else {
for (i = 0; i < m_nv; i++) {
for (size_t i = 0; i < m_nv; i++) {
rsd[index(i,j)] = residual(x,i,j)
- timeDerivativeFlag(i)*rdt*(value(x,i,j) - prevSoln(i,j));
diag[index(i,j)] = timeDerivativeFlag(i);
@ -241,19 +240,17 @@ void Domain1D::setupGrid(size_t n, const doublereal* z)
void Domain1D::showSolution(const doublereal* x)
{
size_t nn = m_nv/5;
size_t i, j, n;
doublereal v;
for (i = 0; i < nn; i++) {
for (size_t i = 0; i < nn; i++) {
writeline('-', 79, false, true);
writelog("\n z ");
for (n = 0; n < 5; n++) {
for (size_t n = 0; n < 5; n++) {
writelog(" {:>10s} ", componentName(i*5 + n));
}
writeline('-', 79, false, true);
for (j = 0; j < m_points; j++) {
for (size_t j = 0; j < m_points; j++) {
writelog("\n {:10.4g} ", m_z[j]);
for (n = 0; n < 5; n++) {
v = value(x, i*5+n, j);
for (size_t n = 0; n < 5; n++) {
double v = value(x, i*5+n, j);
writelog(" {:10.4g} ", v);
}
}
@ -262,14 +259,14 @@ void Domain1D::showSolution(const doublereal* x)
size_t nrem = m_nv - 5*nn;
writeline('-', 79, false, true);
writelog("\n z ");
for (n = 0; n < nrem; n++) {
for (size_t n = 0; n < nrem; n++) {
writelog(" {:>10s} ", componentName(nn*5 + n));
}
writeline('-', 79, false, true);
for (j = 0; j < m_points; j++) {
for (size_t j = 0; j < m_points; j++) {
writelog("\n {:10.4g} ", m_z[j]);
for (n = 0; n < nrem; n++) {
v = value(x, nn*5+n, j);
for (size_t n = 0; n < nrem; n++) {
double v = value(x, nn*5+n, j);
writelog(" {:10.4g} ", v);
}
}

View file

@ -46,14 +46,14 @@ void MultiJac::eval(doublereal* x0, doublereal* resid0, doublereal rdt)
m_nevals++;
clock_t t0 = clock();
bfill(0.0);
size_t n, m, ipt=0, j, nv, mv, iloc;
doublereal rdx, dx, xsave;
size_t ipt=0;
for (j = 0; j < m_points; j++) {
nv = m_resid->nVars(j);
for (n = 0; n < nv; n++) {
for (size_t j = 0; j < m_points; j++) {
size_t nv = m_resid->nVars(j);
for (size_t n = 0; n < nv; n++) {
// perturb x(n); preserve sign(x(n))
xsave = x0[ipt];
double xsave = x0[ipt];
double dx;
if (xsave >= 0) {
dx = xsave*m_rtol + m_atol;
} else {
@ -61,7 +61,7 @@ void MultiJac::eval(doublereal* x0, doublereal* resid0, doublereal rdt)
}
x0[ipt] = xsave + dx;
dx = x0[ipt] - xsave;
rdx = 1.0/dx;
double rdx = 1.0/dx;
// calculate perturbed residual
m_resid->eval(j, x0, m_r1.data(), rdt, 0);
@ -69,9 +69,9 @@ void MultiJac::eval(doublereal* x0, doublereal* resid0, doublereal rdt)
// compute nth column of Jacobian
for (size_t i = j - 1; i != j+2; i++) {
if (i != npos && i < m_points) {
mv = m_resid->nVars(i);
iloc = m_resid->loc(i);
for (m = 0; m < mv; m++) {
size_t mv = m_resid->nVars(i);
size_t iloc = m_resid->loc(i);
for (size_t m = 0; m < mv; m++) {
value(m+iloc,ipt) = (m_r1[m+iloc] - resid0[m+iloc])*rdx;
}
}
@ -81,7 +81,7 @@ void MultiJac::eval(doublereal* x0, doublereal* resid0, doublereal rdt)
}
}
for (n = 0; n < m_size; n++) {
for (size_t n = 0; n < m_size; n++) {
m_ssdiag[n] = value(n,n);
}

View file

@ -39,23 +39,21 @@ doublereal bound_step(const doublereal* x, const doublereal* step,
size_t np = r.nPoints();
size_t nv = r.nComponents();
Indx index(nv, np);
doublereal above, below, val, newval;
size_t m, j;
doublereal fbound = 1.0;
bool wroteTitle = false;
for (m = 0; m < nv; m++) {
above = r.upperBound(m);
below = r.lowerBound(m);
for (size_t m = 0; m < nv; m++) {
double above = r.upperBound(m);
double below = r.lowerBound(m);
for (j = 0; j < np; j++) {
val = x[index(m,j)];
for (size_t j = 0; j < np; j++) {
double val = x[index(m,j)];
if (loglevel > 0 && (val > above + 1.0e-12 || val < below - 1.0e-12)) {
writelog("\nERROR: solution out of bounds.\n");
writelog("domain {:d}: {:>20s}({:d}) = {:10.3e} ({:10.3e}, {:10.3e})\n",
r.domainIndex(), r.componentName(m), j, val, below, above);
}
newval = val + step[index(m,j)];
double newval = val + step[index(m,j)];
if (newval > above) {
fbound = std::max(0.0, std::min(fbound,
@ -105,20 +103,19 @@ doublereal bound_step(const doublereal* x, const doublereal* step,
doublereal norm_square(const doublereal* x,
const doublereal* step, Domain1D& r)
{
doublereal f, ewt, esum, sum = 0.0;
size_t n, j;
double sum = 0.0;
doublereal f2max = 0.0;
size_t nv = r.nComponents();
size_t np = r.nPoints();
for (n = 0; n < nv; n++) {
esum = 0.0;
for (j = 0; j < np; j++) {
for (size_t n = 0; n < nv; n++) {
double esum = 0.0;
for (size_t j = 0; j < np; j++) {
esum += fabs(x[nv*j + n]);
}
ewt = r.rtol(n)*esum/np + r.atol(n);
for (j = 0; j < np; j++) {
f = step[nv*j + n]/ewt;
double ewt = r.rtol(n)*esum/np + r.atol(n);
for (size_t j = 0; j < np; j++) {
double f = step[nv*j + n]/ewt;
sum += f*f;
f2max = std::max(f*f, f2max);
}
@ -153,11 +150,10 @@ void MultiNewton::resize(size_t sz)
doublereal MultiNewton::norm2(const doublereal* x,
const doublereal* step, OneDim& r) const
{
doublereal f, sum = 0.0;
double sum = 0.0;
size_t nd = r.nDomains();
for (size_t n = 0; n < nd; n++) {
f = norm_square(x + r.start(n), step + r.start(n),
r.domain(n));
double f = norm_square(x + r.start(n), step + r.start(n), r.domain(n));
sum += f;
}
sum /= r.size();
@ -167,14 +163,12 @@ doublereal MultiNewton::norm2(const doublereal* x,
void MultiNewton::step(doublereal* x, doublereal* step,
OneDim& r, MultiJac& jac, int loglevel)
{
size_t iok;
size_t sz = r.size();
r.eval(npos, x, step);
for (size_t n = 0; n < sz; n++) {
for (size_t n = 0; n < r.size(); n++) {
step[n] = -step[n];
}
iok = jac.solve(step, step);
size_t iok = jac.solve(step, step);
// if iok is non-zero, then solve failed
if (iok != 0) {
iok--;
@ -243,10 +237,9 @@ int MultiNewton::dampStep(const doublereal* x0, const doublereal* step0,
// damping coefficient starts at 1.0
doublereal damp = 1.0;
doublereal ff;
size_t m;
for (m = 0; m < NDAMP; m++) {
ff = fbound*damp;
double ff = fbound*damp;
// step the solution by the damped step size
for (size_t j = 0; j < m_n; j++) {

View file

@ -79,11 +79,10 @@ void Sim1D::setProfile(size_t dom, size_t comp,
Domain1D& d = domain(dom);
doublereal z0 = d.zmin();
doublereal z1 = d.zmax();
doublereal zpt, frac, v;
for (size_t n = 0; n < d.nPoints(); n++) {
zpt = d.z(n);
frac = (zpt - z0)/(z1 - z0);
v = linearInterp(frac, pos, values);
double zpt = d.z(n);
double frac = (zpt - z0)/(z1 - z0);
double v = linearInterp(frac, pos, values);
setValue(dom, comp, n, v);
}
}
@ -138,8 +137,7 @@ void Sim1D::restore(const std::string& fname, const std::string& id,
void Sim1D::setFlatProfile(size_t dom, size_t comp, doublereal v)
{
size_t np = domain(dom).nPoints();
size_t n;
for (n = 0; n < np; n++) {
for (size_t n = 0; n < np; n++) {
setValue(dom, comp, n, v);
}
}
@ -226,7 +224,6 @@ int Sim1D::newtonSolve(int loglevel)
void Sim1D::solve(int loglevel, bool refine_grid)
{
int new_points = 1;
int nsteps;
doublereal dt = m_tstep;
m_nsteps = 0;
int soln_number = -1;
@ -234,7 +231,7 @@ void Sim1D::solve(int loglevel, bool refine_grid)
while (new_points > 0) {
size_t istep = 0;
nsteps = m_steps[istep];
size_t nsteps = m_steps[istep];
bool ok = false;
if (loglevel > 0) {
@ -346,7 +343,6 @@ int Sim1D::refine(int loglevel)
{
int ianalyze, np = 0;
vector_fp znew, xnew;
doublereal xmid, zmid;
std::vector<size_t> dsize;
m_xlast_ss = m_x;
@ -390,14 +386,14 @@ int Sim1D::refine(int loglevel)
// for this new point
if (r.newPointNeeded(m) && m + 1 < npnow) {
// add new point at midpoint
zmid = 0.5*(d.grid(m) + d.grid(m+1));
double zmid = 0.5*(d.grid(m) + d.grid(m+1));
znew.push_back(zmid);
np++;
// for each component, linearly interpolate
// the solution to this point
for (size_t i = 0; i < comp; i++) {
xmid = 0.5*(value(n, i, m) + value(n, i, m+1));
double xmid = 0.5*(value(n, i, m) + value(n, i, m+1));
xnew.push_back(xmid);
}
}
@ -433,14 +429,12 @@ int Sim1D::setFixedTemperature(doublereal t)
{
int np = 0;
vector_fp znew, xnew;
doublereal xmid;
doublereal zfixed,interp_factor;
doublereal zfixed;
doublereal z1 = 0.0, z2 = 0.0, t1,t2;
size_t n, m, i;
size_t m1 = 0;
std::vector<size_t> dsize;
for (n = 0; n < nDomains(); n++) {
for (size_t n = 0; n < nDomains(); n++) {
bool addnewpt=false;
Domain1D& d = domain(n);
size_t comp = d.nComponents();
@ -451,7 +445,7 @@ int Sim1D::setFixedTemperature(doublereal t)
size_t npnow = d.nPoints();
size_t nstart = znew.size();
if (d_free) {
for (m = 0; m < npnow-1; m++) {
for (size_t m = 0; m < npnow-1; m++) {
if (value(n,2,m) == t) {
zfixed = d.grid(m);
d_free->m_zfixed = zfixed;
@ -475,23 +469,23 @@ int Sim1D::setFixedTemperature(doublereal t)
}
}
for (m = 0; m < npnow; m++) {
for (size_t m = 0; m < npnow; m++) {
// add the current grid point to the new grid
znew.push_back(d.grid(m));
// do the same for the solution at this point
for (i = 0; i < comp; i++) {
for (size_t i = 0; i < comp; i++) {
xnew.push_back(value(n, i, m));
}
if (m==m1 && addnewpt) {
//add new point at zfixed
znew.push_back(zfixed);
np++;
interp_factor = (zfixed-z2) / (z1-z2);
double interp_factor = (zfixed-z2) / (z1-z2);
// for each component, linearly interpolate
// the solution to this point
for (i = 0; i < comp; i++) {
xmid = interp_factor*(value(n, i, m) - value(n, i, m+1)) + value(n,i,m+1);
for (size_t i = 0; i < comp; i++) {
double xmid = interp_factor*(value(n, i, m) - value(n, i, m+1)) + value(n,i,m+1);
xnew.push_back(xmid);
}
}
@ -502,10 +496,10 @@ int Sim1D::setFixedTemperature(doublereal t)
// At this point, the new grid znew and the new solution vector xnew have
// been constructed, but the domains themselves have not yet been modified.
// Now update each domain with the new grid.
size_t gridstart = 0, gridsize;
for (n = 0; n < nDomains(); n++) {
size_t gridstart = 0;
for (size_t n = 0; n < nDomains(); n++) {
Domain1D& d = domain(n);
gridsize = dsize[n];
size_t gridsize = dsize[n];
d.setupGrid(gridsize, &znew[gridstart]);
gridstart += gridsize;
}

View file

@ -123,10 +123,9 @@ void StFlow::resize(size_t ncomponents, size_t points)
void StFlow::setupGrid(size_t n, const doublereal* z)
{
resize(m_nv, n);
size_t j;
m_z[0] = z[0];
for (j = 1; j < m_points; j++) {
for (size_t j = 1; j < m_points; j++) {
if (z[j] <= z[j-1]) {
throw CanteraError("StFlow::setupGrid",
"grid points must be monotonically increasing");
@ -211,16 +210,14 @@ void StFlow::setGasAtMidpoint(const doublereal* x, size_t j)
void StFlow::_finalize(const doublereal* x)
{
size_t j;
doublereal zz, tt;
size_t nz = m_zfix.size();
bool e = m_do_energy[0];
for (j = 0; j < m_points; j++) {
for (size_t j = 0; j < m_points; j++) {
if (e || nz == 0) {
m_fixedtemp[j] = T(x, j);
} else {
zz = (z(j) - z(0))/(z(m_points - 1) - z(0));
tt = linearInterp(zz, m_zfix, m_tfix);
double zz = (z(j) - z(0))/(z(m_points - 1) - z(0));
double tt = linearInterp(zz, m_zfix, m_tfix);
m_fixedtemp[j] = tt;
}
}
@ -262,8 +259,6 @@ void StFlow::eval(size_t jg, doublereal* xg,
size_t j0 = std::max<size_t>(jmin, 1) - 1;
size_t j1 = std::min(jmax+1,m_points-1);
size_t j, k;
// ------------ update properties ------------
updateThermo(x, j0, j1);
@ -285,7 +280,6 @@ void StFlow::eval(size_t jg, doublereal* xg,
// evaluate the residual equations at all required
// grid points
//----------------------------------------------------
doublereal sum, sum2, dtdzj;
// calculation of qdotRadiation
@ -352,7 +346,7 @@ void StFlow::eval(size_t jg, doublereal* xg,
}
}
for (j = jmin; j <= jmax; j++) {
for (size_t j = jmin; j <= jmax; j++) {
//----------------------------------------------
// left boundary
//----------------------------------------------
@ -377,8 +371,8 @@ void StFlow::eval(size_t jg, doublereal* xg,
// The default boundary condition for species is zero flux. However,
// the boundary object may modify this.
sum = 0.0;
for (k = 0; k < m_nsp; k++) {
double sum = 0.0;
for (size_t k = 0; k < m_nsp; k++) {
sum += Y(x,k,0);
rsd[index(c_offset_Y + k, 0)] =
-(m_flux(k,0) + rho_u(x,0)* Y(x,k,0));
@ -408,11 +402,10 @@ void StFlow::eval(size_t jg, doublereal* xg,
// = M_k\omega_k
//-------------------------------------------------
getWdot(x,j);
doublereal convec, diffus;
for (k = 0; k < m_nsp; k++) {
convec = rho_u(x,j)*dYdz(x,k,j);
diffus = 2.0*(m_flux(k,j) - m_flux(k,j-1))
/(z(j+1) - z(j-1));
for (size_t k = 0; k < m_nsp; k++) {
double convec = rho_u(x,j)*dYdz(x,k,j);
double diffus = 2.0*(m_flux(k,j) - m_flux(k,j-1))
/ (z(j+1) - z(j-1));
rsd[index(c_offset_Y + k, j)]
= (m_wt[k]*(wdot(k,j))
- convec - diffus)/m_rho[j]
@ -434,16 +427,15 @@ void StFlow::eval(size_t jg, doublereal* xg,
// heat release term
const vector_fp& h_RT = m_thermo->enthalpy_RT_ref();
const vector_fp& cp_R = m_thermo->cp_R_ref();
sum = 0.0;
sum2 = 0.0;
doublereal flxk;
for (k = 0; k < m_nsp; k++) {
flxk = 0.5*(m_flux(k,j-1) + m_flux(k,j));
double sum = 0.0;
double sum2 = 0.0;
for (size_t k = 0; k < m_nsp; k++) {
double flxk = 0.5*(m_flux(k,j-1) + m_flux(k,j));
sum += wdot(k,j)*h_RT[k];
sum2 += flxk*cp_R[k]/m_wt[k];
}
sum *= GasConstant * T(x,j);
dtdzj = dTdz(x,j);
double dtdzj = dTdz(x,j);
sum2 *= GasConstant * dtdzj;
rsd[index(c_offset_T, j)] = - m_cp[j]*rho_u(x,j)*dtdzj
@ -513,32 +505,29 @@ void StFlow::showSolution(const doublereal* x)
void StFlow::updateDiffFluxes(const doublereal* x, size_t j0, size_t j1)
{
size_t j, k, m;
doublereal sum, wtm, rho, dz, gradlogT;
switch (m_transport_option) {
case c_Mixav_Transport:
for (j = j0; j < j1; j++) {
sum = 0.0;
wtm = m_wtm[j];
rho = density(j);
dz = z(j+1) - z(j);
for (k = 0; k < m_nsp; k++) {
for (size_t j = j0; j < j1; j++) {
double sum = 0.0;
double wtm = m_wtm[j];
double rho = density(j);
double dz = z(j+1) - z(j);
for (double k = 0; k < m_nsp; k++) {
m_flux(k,j) = m_wt[k]*(rho*m_diff[k+m_nsp*j]/wtm);
m_flux(k,j) *= (X(x,k,j) - X(x,k,j+1))/dz;
sum -= m_flux(k,j);
}
// correction flux to insure that \sum_k Y_k V_k = 0.
for (k = 0; k < m_nsp; k++) {
for (double k = 0; k < m_nsp; k++) {
m_flux(k,j) += sum*Y(x,k,j);
}
}
break;
case c_Multi_Transport:
for (j = j0; j < j1; j++) {
dz = z(j+1) - z(j);
for (k = 0; k < m_nsp; k++) {
for (size_t j = j0; j < j1; j++) {
double dz = z(j+1) - z(j);
for (double k = 0; k < m_nsp; k++) {
doublereal sum = 0.0;
for (size_t m = 0; m < m_nsp; m++) {
sum += m_wt[m] * m_multidiff[mindex(k,m,j)] * (X(x,m,j+1)-X(x,m,j));
@ -553,10 +542,10 @@ void StFlow::updateDiffFluxes(const doublereal* x, size_t j0, size_t j1)
}
if (m_do_soret) {
for (m = j0; m < j1; m++) {
gradlogT = 2.0 * (T(x,m+1) - T(x,m)) /
((T(x,m+1) + T(x,m)) * (z(m+1) - z(m)));
for (k = 0; k < m_nsp; k++) {
for (size_t m = j0; m < j1; m++) {
double gradlogT = 2.0 * (T(x,m+1) - T(x,m)) /
((T(x,m+1) + T(x,m)) * (z(m+1) - z(m)));
for (size_t k = 0; k < m_nsp; k++) {
m_flux(k,m) -= m_dthermal(k,m)*gradlogT;
}
}
@ -616,18 +605,15 @@ void StFlow::restore(const XML_Node& dom, doublereal* soln, int loglevel)
writelog(nd["title"]+": "+nd.value()+"\n");
}
double pp = -1.0;
pp = getFloat(dom, "pressure", "pressure");
double pp = getFloat(dom, "pressure", "pressure");
setPressure(pp);
vector<XML_Node*> d = dom.child("grid_data").getChildren("floatArray");
size_t nd = d.size();
vector_fp x;
size_t n, np = 0, j, ks, k;
string nm;
size_t np = 0;
bool readgrid = false, wrote_header = false;
for (n = 0; n < nd; n++) {
for (size_t n = 0; n < d.size(); n++) {
const XML_Node& fa = *d[n];
nm = fa["title"];
string nm = fa["title"];
if (nm == "z") {
getFloatArray(fa,x,false);
np = x.size();
@ -644,9 +630,9 @@ void StFlow::restore(const XML_Node& dom, doublereal* soln, int loglevel)
}
debuglog("Importing datasets:\n", loglevel >= 2);
for (n = 0; n < nd; n++) {
for (size_t n = 0; n < d.size(); n++) {
const XML_Node& fa = *d[n];
nm = fa["title"];
string nm = fa["title"];
getFloatArray(fa,x,false);
if (nm == "u") {
debuglog("axial velocity ", loglevel >= 2);
@ -654,7 +640,7 @@ void StFlow::restore(const XML_Node& dom, doublereal* soln, int loglevel)
throw CanteraError("StFlow::restore",
"axial velocity array size error");
}
for (j = 0; j < np; j++) {
for (size_t j = 0; j < np; j++) {
soln[index(0,j)] = x[j];
}
} else if (nm == "z") {
@ -665,7 +651,7 @@ void StFlow::restore(const XML_Node& dom, doublereal* soln, int loglevel)
throw CanteraError("StFlow::restore",
"radial velocity array size error");
}
for (j = 0; j < np; j++) {
for (size_t j = 0; j < np; j++) {
soln[index(1,j)] = x[j];
}
} else if (nm == "T") {
@ -674,7 +660,7 @@ void StFlow::restore(const XML_Node& dom, doublereal* soln, int loglevel)
throw CanteraError("StFlow::restore",
"temperature array size error");
}
for (j = 0; j < np; j++) {
for (size_t j = 0; j < np; j++) {
soln[index(2,j)] = x[j];
}
@ -692,15 +678,15 @@ void StFlow::restore(const XML_Node& dom, doublereal* soln, int loglevel)
throw CanteraError("StFlow::restore",
"lambda arary size error");
}
for (j = 0; j < np; j++) {
for (size_t j = 0; j < np; j++) {
soln[index(3,j)] = x[j];
}
} else if (m_thermo->speciesIndex(nm) != npos) {
debuglog(nm+" ", loglevel >= 2);
if (x.size() == np) {
k = m_thermo->speciesIndex(nm);
size_t k = m_thermo->speciesIndex(nm);
did_species[k] = 1;
for (j = 0; j < np; j++) {
for (size_t j = 0; j < np; j++) {
soln[index(k+4,j)] = x[j];
}
}
@ -719,7 +705,7 @@ void StFlow::restore(const XML_Node& dom, doublereal* soln, int loglevel)
}
if (loglevel >= 1) {
for (ks = 0; ks < nsp; ks++) {
for (size_t ks = 0; ks < nsp; ks++) {
if (did_species[ks] == 0) {
if (!wrote_header) {
writelog("Missing data for species:\n");
@ -770,7 +756,6 @@ void StFlow::restore(const XML_Node& dom, doublereal* soln, int loglevel)
XML_Node& StFlow::save(XML_Node& o, const doublereal* const sol)
{
size_t k;
Array2D soln(m_nv, m_points, sol + loc());
XML_Node& flow = Domain1D::save(o, sol);
flow.addAttribute("type",flowType());
@ -797,7 +782,7 @@ XML_Node& StFlow::save(XML_Node& o, const doublereal* const sol)
soln.getRow(3, x.data());
addFloatArray(gv,"L",x.size(),x.data(),"N/m^4");
for (k = 0; k < m_nsp; k++) {
for (size_t k = 0; k < m_nsp; k++) {
soln.getRow(4+k, x.data());
addFloatArray(gv,m_thermo->speciesName(k),
x.size(),x.data(),"","massFraction");

View file

@ -177,7 +177,6 @@ void Inlet1D::eval(size_t jg, doublereal* xg, doublereal* rg,
doublereal* x = xg + loc();
doublereal* r = rg + loc();
integer* diag = diagg + loc();
doublereal* xb, *rb;
// residual equations for the two local variables
r[0] = m_mdot - x[0];
@ -192,8 +191,8 @@ void Inlet1D::eval(size_t jg, doublereal* xg, doublereal* rg,
// if it is a left inlet, then the flow solution vector
// starts 2 to the right in the global solution vector
if (m_ilr == LeftInlet) {
xb = x + 2;
rb = r + 2;
double* xb = x + 2;
double* rb = r + 2;
// The first flow residual is for u. This, however, is not modified by
// the inlet, since this is set within the flow domain from the
@ -228,8 +227,7 @@ void Inlet1D::eval(size_t jg, doublereal* xg, doublereal* rg,
} else {
// right inlet.
size_t boffset = m_flow->nComponents();
xb = x - boffset;
rb = r - boffset;
double* rb = r - boffset;
rb[1] -= m_V0;
rb[2] -= x[1]; // T
rb[0] += x[0]; // u
@ -353,18 +351,15 @@ void Symm1D::eval(size_t jg, doublereal* xg, doublereal* rg, integer* diagg,
doublereal* x = xg + loc();
doublereal* r = rg + loc();
integer* diag = diagg + loc();
doublereal* xb, *rb;
integer* db;
r[0] = x[0];
diag[0] = 0;
size_t nc;
if (m_flow_right) {
nc = m_flow_right->nComponents();
xb = x + 1;
rb = r + 1;
db = diag + 1;
size_t nc = m_flow_right->nComponents();
double* xb = x + 1;
double* rb = r + 1;
int* db = diag + 1;
db[1] = 0;
db[2] = 0;
rb[1] = xb[1] - xb[1 + nc]; // zero dV/dz
@ -372,10 +367,10 @@ void Symm1D::eval(size_t jg, doublereal* xg, doublereal* rg, integer* diagg,
}
if (m_flow_left) {
nc = m_flow_left->nComponents();
xb = x - nc;
rb = r - nc;
db = diag - nc;
size_t nc = m_flow_left->nComponents();
double* xb = x - nc;
double* rb = r - nc;
int* db = diag - nc;
db[1] = 0;
db[2] = 0;
rb[1] = xb[1] - xb[1 - nc]; // zero dV/dz
@ -441,30 +436,26 @@ void Outlet1D::eval(size_t jg, doublereal* xg, doublereal* rg, integer* diagg,
doublereal* x = xg + loc();
doublereal* r = rg + loc();
integer* diag = diagg + loc();
doublereal* xb, *rb;
integer* db;
r[0] = x[0];
diag[0] = 0;
size_t nc, k;
if (m_flow_right) {
nc = m_flow_right->nComponents();
xb = x + 1;
rb = r + 1;
db = diag + 1;
size_t nc = m_flow_right->nComponents();
double* xb = x + 1;
double* rb = r + 1;
rb[0] = xb[3];
rb[2] = xb[2] - xb[2 + nc];
for (k = 4; k < nc; k++) {
for (size_t k = 4; k < nc; k++) {
rb[k] = xb[k] - xb[k + nc];
}
}
if (m_flow_left) {
nc = m_flow_left->nComponents();
xb = x - nc;
rb = r - nc;
db = diag - nc;
size_t nc = m_flow_left->nComponents();
double* xb = x - nc;
double* rb = r - nc;
int* db = diag - nc;
// zero Lambda
if (m_flow_left->fixed_mdot()) {
@ -473,7 +464,7 @@ void Outlet1D::eval(size_t jg, doublereal* xg, doublereal* rg, integer* diagg,
rb[2] = xb[2] - xb[2 - nc]; // zero T gradient
size_t kSkip = 4 + m_flow_left->rightExcessSpecies();
for (k = 4; k < nc; k++) {
for (size_t k = 4; k < nc; k++) {
if (k != kSkip) {
rb[k] = xb[k] - xb[k - nc]; // zero mass fraction gradient
db[k] = 0;
@ -561,19 +552,15 @@ void OutletRes1D::eval(size_t jg, doublereal* xg, doublereal* rg,
doublereal* x = xg + loc();
doublereal* r = rg + loc();
integer* diag = diagg + loc();
doublereal* xb, *rb;
integer* db;
// drive dummy component to zero
r[0] = x[0];
diag[0] = 0;
size_t nc, k;
if (m_flow_right) {
nc = m_flow_right->nComponents();
xb = x + 1;
rb = r + 1;
db = diag + 1;
size_t nc = m_flow_right->nComponents();
double* xb = x + 1;
double* rb = r + 1;
// this seems wrong...
// zero Lambda
@ -583,16 +570,16 @@ void OutletRes1D::eval(size_t jg, doublereal* xg, doublereal* rg,
rb[2] = xb[2] - xb[2 + nc];
// specified mass fractions
for (k = 4; k < nc; k++) {
for (size_t k = 4; k < nc; k++) {
rb[k] = xb[k] - m_yres[k-4];
}
}
if (m_flow_left) {
nc = m_flow_left->nComponents();
xb = x - nc;
rb = r - nc;
db = diag - nc;
size_t nc = m_flow_left->nComponents();
double* xb = x - nc;
double* rb = r - nc;
int* db = diag - nc;
if (!m_flow_left->fixed_mdot()) {
;
@ -601,7 +588,7 @@ void OutletRes1D::eval(size_t jg, doublereal* xg, doublereal* rg,
}
rb[2] = xb[2] - m_temp; // zero dT/dz
size_t kSkip = m_flow_left->rightExcessSpecies();
for (k = 4; k < nc; k++) {
for (size_t k = 4; k < nc; k++) {
if (k != kSkip) {
rb[k] = xb[k] - m_yres[k-4]; // fixed Y
db[k] = 0;
@ -672,22 +659,20 @@ void Surf1D::eval(size_t jg, doublereal* xg, doublereal* rg,
doublereal* x = xg + loc();
doublereal* r = rg + loc();
integer* diag = diagg + loc();
doublereal* xb, *rb;
r[0] = x[0] - m_temp;
diag[0] = 0;
size_t nc;
if (m_flow_right) {
rb = r + 1;
xb = x + 1;
double* rb = r + 1;
double* xb = x + 1;
rb[2] = xb[2] - x[0]; // specified T
}
if (m_flow_left) {
nc = m_flow_left->nComponents();
rb = r - nc;
xb = x - nc;
size_t nc = m_flow_left->nComponents();
double* rb = r - nc;
double* xb = x - nc;
rb[2] = xb[2] - x[0]; // specified T
}
}
@ -777,7 +762,6 @@ void ReactingSurf1D::eval(size_t jg, doublereal* xg, doublereal* rg,
doublereal* x = xg + loc();
doublereal* r = rg + loc();
integer* diag = diagg + loc();
doublereal* xb, *rb;
// specified surface temp
r[0] = x[0] - m_temp;
@ -829,16 +813,15 @@ void ReactingSurf1D::eval(size_t jg, doublereal* xg, doublereal* rg,
}
if (m_flow_right) {
rb = r + 1;
xb = x + 1;
double* rb = r + 1;
double* xb = x + 1;
rb[2] = xb[2] - x[0]; // specified T
}
size_t nc;
if (m_flow_left) {
nc = m_flow_left->nComponents();
size_t nc = m_flow_left->nComponents();
const vector_fp& mwleft = m_phase_left->molecularWeights();
rb =r - nc;
xb = x - nc;
double* rb = r - nc;
double* xb = x - nc;
rb[2] = xb[2] - x[0]; // specified T
size_t nSkip = m_flow_left->rightExcessSpecies();
for (size_t nl = 0; nl < m_left_nsp; nl++) {