Пример #1
0
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;
}
Пример #2
0
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;
	}
}