MFNVector MFCloneLOCANVector(void *data, MFErrorHandler err) { LOCANVectorData *vec_data = (LOCANVectorData*) data; Teuchos::RCP<LMCEV> u2 = Teuchos::rcp_dynamic_cast<LMCEV>(vec_data->u_ptr->clone(),true); return MFCreateLOCANVectorWithData(u2, err); }
int MFTangentLOCA(int n,int k,MFNVector vu,MFNKMatrix mPhi,void *d, MFErrorHandler err) { LOCAData* data = (LOCAData *)d; LOCANVectorData* u0_data = (LOCANVectorData *) MFNVectorGetData(vu, err); data->grp->setX(*(u0_data->u_ptr)); data->grp->computePredictor(); const LOCA::MultiContinuation::ExtendedMultiVector& pred = data->grp->getPredictorTangent(); for (int i=0; i<k; i++) { Teuchos::RCP<LMCEV> t = Teuchos::rcp_dynamic_cast<LMCEV>(pred[i].clone()); MFNVector tmp = MFCreateLOCANVectorWithData(t,err); MFMSetColumn(mPhi, i, tmp, err); MFFreeNVector(tmp, err); } MFGramSchmidt(data->space,mPhi, err); return 1; }