void Clmbr::SET_rWy( NumericVector rWy ) { const int yn =rWy.size(); if(yn!=n) stop( _("'rWy' vector has wrong dimension") ); double* Ytmp= Calloc( n, double ); for (int i=0;i<n;i++) Ytmp[i] = rWy[i]; set_sy( Ytmp, GEO2 ); Free( Ytmp ); sety_called = true; return; }
void State::enforce_outflow(const OctFace& f, const _3Vec& X) { switch (f) { #ifdef USE_LZ case XU: if (vx(X) > 0.0) { (*this)[sy_index] = X[0] * vy(X) * rho(); (*this)[sx_index] = X[1] * vy(X) * rho() / sqrt(X[0] * X[0] + X[1] * X[1]); } break; case XL: if (vx(X) < 0.0) { (*this)[sy_index] = X[0] * vy(X) * rho(); (*this)[sx_index] = X[1] * vy(X) * rho() / sqrt(X[0] * X[0] + X[1] * X[1]); } break; case YU: if (vy(X) > 0.0) { (*this)[sy_index] = -X[1] * vx(X) * rho(); (*this)[sx_index] = X[0] * vx(X) * rho() / sqrt(X[0] * X[0] + X[1] * X[1]); } break; case YL: if (vy(X) < 0.0) { (*this)[sy_index] = -X[1] * vx(X) * rho(); (*this)[sx_index] = X[0] * vx(X) * rho() / sqrt(X[0] * X[0] + X[1] * X[1]); } break; #else case XU: if (vx() > 0.0) { set_et(et() - 0.5 * sx() * sx() / rho()); set_sx(0.0); } break; case XL: if (vx() < 0.0) { set_et(et() - 0.5 * sx() * sx() / rho()); set_sx(0.0); } break; case YU: if (vy() > 0.0) { set_et(et() - 0.5 * sy() * sy() / rho()); set_sy(0.0); } break; case YL: if (vy() < 0.0) { set_et(et() - 0.5 * sy() * sy() / rho()); set_sy(0.0); } break; #endif case ZU: if (sz() > 0.0) { set_et(et() - 0.5 * sz() * sz() / rho()); set_sz(0.0); } break; case ZL: if (sz() < 0.0) { set_et(et() - 0.5 * sz() * sz() / rho()); set_sz(0.0); } break; } }