示例#1
0
void RHSStencil::apply(FlowField& flowField, int i, int j) {
  //  loadLocalNu2D(_parameters, flowField, _localNu, i, j);
  loadLocalVelocity2D(flowField, _localVelocity, i, j);
  loadLocalMeshsize2D(_parameters, _localMeshsize, i, j);

  // load TKE
  loadLocal2D([&flowField](FLOAT* local, int ii, int jj) mutable {
    *(local + 0) = flowField.getTke(ii, jj);
  }, _localTKE, i, j);

  // load epsilon
  loadLocal2D([&flowField](FLOAT* local, int ii, int jj) mutable {
    *(local + 0) = flowField.getEpsilon(ii, jj);
  }, _localEpsilon, i, j);

  // load Fmu*Nut
  loadLocal2D([&flowField](FLOAT* local, int ii, int jj) mutable {
    *(local + 0) = flowField.getFmu(ii, jj) * flowField.getNu(ii, jj);
    //    *(local+0) = 0;
  }, _localFmuNut, i, j);

  const FLOAT sijsij = computeSijSij2D(_localVelocity, _localMeshsize);
  const FLOAT f1 = flowField.getF1(i, j);
  const FLOAT f2 = flowField.getF2(i, j);
  const FLOAT f3 = flowField.getF3(i, j);
  const FLOAT D = flowField.getD(i, j);
  const FLOAT E = flowField.getE(i, j);
  const FLOAT nut = flowField.getNu(i, j);

  flowField.getsijsij(i, j) = sijsij;

  // load nu + nut/sigmaK
  loadLocal2D([&flowField, this](FLOAT* local, int ii, int jj) mutable {
    *(local + 0) = this->_parameters.flow.visc +
                   flowField.getNu(ii, jj) / this->_parameters.kEpsilon.sigmaK;
  }, _localNu, i, j);

  flowField.getRHSTke(i, j) =
      computeRHStke(_parameters, _localVelocity, _localMeshsize, _localNu,
                    _localTKE, _localEpsilon, nut, sijsij, f3, D);

  // load nu + nut/sigmaE
  loadLocal2D([&flowField, this](FLOAT* local, int ii, int jj) mutable {
    *(local + 0) = this->_parameters.flow.visc +
                   flowField.getNu(ii, jj) / this->_parameters.kEpsilon.sigmaE;
  }, _localNu, i, j);

  flowField.getRHSEpsilon(i, j) =
      computeRHSepsilon(_parameters, _localVelocity, _localMeshsize, _localNu,
                        _localTKE, _localEpsilon, nut, sijsij, f1, f2, E);
}
void TurbulentViscosityStencil::apply ( TurbulentFlowField & flowField, int i, int j ) {
	
//	FLOAT _localVelocity [ 27 * 3 ];
        // local meshsize
//      FLOAT _localMeshsize [ 27 * 3 ];
//      MixingLengthModel * _mixingLength;

	FLOAT lm = _mixingLength->at(flowField, i, j);
	loadLocalVelocity2D(  flowField, _localVelocity, i, j);
	loadLocalMeshsize2D(_parameters, _localMeshsize, i, j);
	FLOAT SdotS = computeSdotS2D(_localVelocity, _localMeshsize);

	flowField.getTurbulentViscosity().getScalar(i, j) = lm * lm * sqrt(2 * SdotS);

}