void SchatzmanPaoliOSI::initializeWorkVectorsForDS( double t, SP::DynamicalSystem ds) { DEBUG_BEGIN("SchatzmanPaoliOSI::initializeWorkVectorsForDS( double t, SP::DynamicalSystem ds)\n"); // Get work buffers from the graph VectorOfVectors& ds_work_vectors = *_initializeDSWorkVectors(ds); // Check dynamical system type Type::Siconos dsType = Type::value(*ds); assert(dsType == Type::LagrangianLinearTIDS); if(dsType == Type::LagrangianLinearTIDS) { SP::LagrangianLinearTIDS lltids = std11::static_pointer_cast<LagrangianLinearTIDS> (ds); // buffers allocation (inside the graph) ds_work_vectors.resize(SchatzmanPaoliOSI::WORK_LENGTH); ds_work_vectors[SchatzmanPaoliOSI::RESIDU_FREE].reset(new SiconosVector(lltids->dimension())); ds_work_vectors[SchatzmanPaoliOSI::FREE].reset(new SiconosVector(lltids->dimension())); ds_work_vectors[SchatzmanPaoliOSI::LOCAL_BUFFER].reset(new SiconosVector(lltids->dimension())); SP::SiconosVector q0 = lltids->q0(); SP::SiconosVector q = lltids->q(); SP::SiconosVector v0 = lltids->velocity0(); SP::SiconosVector velocity = lltids->velocity(); // We first swap the initial value contained in q and v after initialization. lltids->swapInMemory(); // we compute the new state values double h = _simulation->timeStep(); *q = *q0 + h* * v0; //*velocity=*velocity; we do nothing for the velocity lltids->swapInMemory(); } // W initialization initializeIterationMatrixW(t, ds); for (unsigned int k = _levelMinForInput ; k < _levelMaxForInput + 1; k++) { ds->initializeNonSmoothInput(k); } // if ((*itDS)->getType() == Type::LagrangianDS || (*itDS)->getType() == Type::FirstOrderNonLinearDS) DEBUG_EXPR(ds->display()); DEBUG_END("SchatzmanPaoliOSI::initializeWorkVectorsForDS( double t, SP::DynamicalSystem ds)\n"); }