Index: ../trunk-jpl/src/c/toolkits/mumps/MumpsSolve.cpp =================================================================== --- ../trunk-jpl/src/c/toolkits/mumps/MumpsSolve.cpp (revision 23265) +++ ../trunk-jpl/src/c/toolkits/mumps/MumpsSolve.cpp (revision 23266) @@ -479,9 +479,14 @@ #endif #ifdef _HAVE_CODIPACK_ -void MumpsSolve_codi_b(codi::DataStore* data) {/*{{{*/ +void MumpsSolve_codi_b(void* tape_in,void* data_in,void* ra) {/*{{{*/ + + /*recast data_in and tape*/ + codi::DataStore* data = (codi::DataStore*)data_in; + //IssmDouble::TapeType& tape = (IssmDouble::TapeType&)tape_in; IssmDouble::TapeType& tape = IssmDouble::getGlobalTape(); + IssmDouble::Real* valueATrans; IssmDouble::GradientData* indexATrans; int* irnATrans; @@ -523,7 +528,11 @@ xDelete(adjX); } /*}}}*/ -void MumpsSolve_codi_delete(codi::DataStore* data) {/*{{{*/ +void MumpsSolve_codi_delete(void* tape_in,void* data_in) {/*{{{*/ + + /*recast data_in*/ + codi::DataStore* data = (codi::DataStore*)data_in; + IssmDouble::Real* valueATrans; IssmDouble::GradientData* indexATrans; int* irnATrans; @@ -615,8 +624,8 @@ dataHandler->addData(local_nnz); dataHandler->addData(parameters); // we assume here that parameters is still intact when the reverse run is called - tape.pushExternalFunction(&MumpsSolve_codi_b, dataHandler, &MumpsSolve_codi_delete); - //tape.pushExternalFunctionHandle(&MumpsSolve_codi_b, dataHandler, &MumpsSolve_codi_delete); + //tape.pushExternalFunction(&MumpsSolve_codi_b, dataHandler, &MumpsSolve_codi_delete); + tape.pushExternalFunctionHandle(&MumpsSolve_codi_b,(void*)dataHandler, &MumpsSolve_codi_delete); } else { // if the tape is active valueB is stored in the dataHandler and deleted in the reverse sweep xDelete(valueB); Index: ../trunk-jpl/src/c/toolkits/gsl/DenseGslSolve.cpp =================================================================== --- ../trunk-jpl/src/c/toolkits/gsl/DenseGslSolve.cpp (revision 23265) +++ ../trunk-jpl/src/c/toolkits/gsl/DenseGslSolve.cpp (revision 23266) @@ -253,9 +253,13 @@ #endif #ifdef _HAVE_CODIPACK_ -void SolverxSeq_codi_b(codi::DataStore* data) {/*{{{*/ - IssmDouble::TapeType& tape = IssmDouble::getGlobalTape(); +void SolverxSeq_codi_b(void* tape_in,void* data_in,void* ra) {/*{{{*/ + /*recast data_in and tape*/ + codi::DataStore* data = (codi::DataStore*)data_in; + //IssmDouble::TapeType& tape = (IssmDouble::TapeType&)tape_in; + IssmDouble::TapeType& tape = IssmDouble::getGlobalTape(); + IssmDouble::Real* valueATrans; IssmDouble::GradientData* indexATrans; IssmDouble::GradientData* indexB; @@ -290,7 +294,11 @@ xDelete(adjX); } /*}}}*/ -void SolverxSeq_codi_delete(codi::DataStore* data) {/*{{{*/ +void SolverxSeq_codi_delete(void* tape_in,void* data_in) {/*{{{*/ + + /*recast data_in*/ + codi::DataStore* data = (codi::DataStore*)data_in; + IssmDouble::Real* valueATrans; IssmDouble::GradientData* indexATrans; IssmDouble::GradientData* indexB; @@ -364,7 +372,7 @@ // store other arguments dataHandler->addData(n); - tape.pushExternalFunction(&SolverxSeq_codi_b, dataHandler, &SolverxSeq_codi_delete); + tape.pushExternalFunctionHandle(&SolverxSeq_codi_b, dataHandler, &SolverxSeq_codi_delete); } else { // if the tape is active valueX is stored in the dataHandler and deleted in the reverse sweep xDelete(valueX);