void SDCFsiSolver::getSolution( fsi::vector & solution, fsi::vector & f ) { assert( dofFluid > 0 ); assert( dofSolid >= 0 ); assert( dofFluid + dofSolid == solution.rows() ); assert( solution.rows() == f.rows() ); fsi::vector solFluid( dofFluid ), solSolid( dofSolid ), fFluid( dofFluid ), fSolid( dofSolid ); fluid->getSolution( solFluid, fFluid ); solid->getSolution( solSolid, fSolid ); solution.head( dofFluid ) = solFluid; solution.tail( dofSolid ) = solSolid; f.head( dofFluid ) = fFluid; f.tail( dofSolid ) = fSolid; }
void SDCFsiSolver::evaluateFunction( const int k, const fsi::vector & q, const scalar t, fsi::vector & f ) { fsi::vector fFluid( dofFluid ), fSolid( dofSolid ); Eigen::Map<const fsi::vector> qFluid( q.data(), dofFluid ); Eigen::Map<const fsi::vector> qSolid( q.data() + dofFluid, dofSolid ); fluid->evaluateFunction( k, qFluid, t, fFluid ); solid->evaluateFunction( k, qSolid, t, fSolid ); f.head( dofFluid ) = fFluid; f.tail( dofSolid ) = fSolid; }