void OdeImplicitEuler<Real>::Update (Real fTIn, Real* afXIn, Real& rfTOut, Real* afXOut) { m_oFunction(fTIn,afXIn,m_pvData,m_kF); m_oDFunction(fTIn,afXIn,m_pvData,m_kDF); GMatrix<Real> kDG = m_kIdentity - m_fStep*m_kDF; GMatrix<Real> kDGInverse(m_iDim,m_iDim); bool bInvertible = kDG.GetInverse(kDGInverse); if (bInvertible) { m_kF = kDGInverse*m_kF; for (int i = 0; i < m_iDim; i++) { afXOut[i] = afXIn[i] + m_fStep*m_kF[i]; } } else { size_t uiSize = m_iDim*sizeof(Real); System::Memcpy(afXOut,uiSize,afXIn,uiSize); } rfTOut = fTIn + m_fStep; }