#define MAX_PERIODS 20 typedef struct { Vec *up; PetscTruth firstTime; PetscInt numPeriods; } PeriodicVec; typedef struct { Mat Ap[MAX_PERIODS]; PetscTruth firstTime; PetscInt numPeriods; } PeriodicMat; typedef struct { PetscScalar *up[MAX_PERIODS]; PetscInt arrayLength; PetscTruth firstTime; PetscInt numPeriods; } PeriodicArray; extern PetscErrorCode calcInterpFactor(PetscInt nmax,PetscScalar t,PetscScalar tarray[],PetscInt *itf,PetscScalar *alpha); extern PetscErrorCode calcPeriodicInterpFactor(PetscInt n,PetscScalar t,PetscScalar tparr[],PetscInt *itf1,PetscInt *itf2,PetscScalar *al1,PetscScalar *al2); extern PetscInt findindex(PetscScalar tarr[],PetscInt nmax,PetscScalar t); extern PetscErrorCode interpPeriodicMatrix(PetscScalar tc, Mat *A, PetscScalar cyclePeriod, PetscInt numPeriods, PetscScalar *tdp, PeriodicMat *user, char *filename); extern PetscErrorCode interpPeriodicVector(PetscScalar tc, Vec *u, PetscScalar cyclePeriod, PetscInt numPeriods, PetscScalar *tdp, PeriodicVec *user, char *filename); extern PetscErrorCode destroyPeriodicVec(PeriodicVec *user); extern PetscErrorCode destroyPeriodicMat(PeriodicMat *user); extern PetscErrorCode destroyPeriodicArray(PeriodicArray *user); // extern PetscErrorCode interpPeriodicMatrix(PetscScalar tc, Mat *A, PetscScalar cyclePeriod, PetscInt numPeriods, // PetscScalar *tdp, Mat A0, Mat A1, char *filename, MatLayout *layout); // extern PetscErrorCode interpPeriodicVector(PetscScalar tc, Vec *u, PetscScalar cyclePeriod, PetscInt numPeriods, // PetscScalar *tdp, PeriodicVec *user, char *filename);