1 #pragma once 2 3 #include <../src/ksp/ksp/utils/lmvm/lmvm.h> 4 #include <../src/ksp/ksp/utils/lmvm/rescale/symbrdnrescale.h> 5 6 /* 7 dense representation for the limited-memory BFGS/DFP method. 8 */ 9 10 typedef struct { 11 PetscInt num_updates; 12 PetscInt num_mult_updates; 13 Mat HY, BS; // Stored in recycled order 14 Vec StFprev; 15 Mat StY_triu; // triu(StY) is the R matrix 16 Mat StY_triu_strict; // strict_triu(YtS) is the R matrix 17 Mat YtS_triu_strict; // strict_triu(YtS) is the L^T matrix 18 Mat YtS_triu; // triu(YtS) is the L matrix 19 Mat YtHY; 20 Mat StBS; 21 Mat J; 22 Mat temp_mat; 23 Vec *PQ; /* P for BFGS, Q for DFP */ 24 Vec diag_vec; 25 Vec diag_vec_recycle_order; 26 Vec inv_diag_vec; 27 Vec column_work, column_work2, rwork1, rwork2, rwork3; 28 Vec rwork2_local, rwork3_local; 29 Vec local_work_vec, local_work_vec_copy; 30 Vec cyclic_work_vec; 31 MatType dense_type; 32 MatLMVMDenseType strategy; 33 SymBroydenRescale rescale; /* context for diagonal or scalar rescaling */ 34 35 PetscReal *ytq, *stp, *yts; 36 PetscScalar *workscalar; 37 PetscInt S_count, St_count, Y_count, Yt_count; 38 PetscInt watchdog, max_seq_rejects; /* tracker to reset after a certain # of consecutive rejects */ 39 PetscBool allocated, use_recursive, needPQ; /* P for BFGS, Q for DFP */ 40 Vec Fprev_ref; 41 PetscObjectState Fprev_state; 42 } Mat_DQN; 43 44 PETSC_INTERN PetscErrorCode MatView_LMVMDDFP(Mat, PetscViewer); 45 PETSC_INTERN PetscErrorCode MatView_LMVMDBFGS(Mat, PetscViewer); 46 47 PETSC_INTERN PetscErrorCode MatUpperTriangularSolveInPlace_CUPM(PetscBool, PetscInt, const PetscScalar[], PetscInt, PetscScalar[], PetscInt); 48 PETSC_INTERN PetscErrorCode MatUpperTriangularSolveInPlaceCyclic_CUPM(PetscBool, PetscInt, PetscInt, PetscInt, const PetscScalar[], PetscInt, PetscScalar[], PetscInt); 49 50 PETSC_INTERN PetscErrorCode VecCyclicShift(Mat, Vec, PetscInt, Vec); 51 PETSC_INTERN PetscErrorCode VecRecycleOrderToHistoryOrder(Mat, Vec, PetscInt, Vec); 52 PETSC_INTERN PetscErrorCode VecHistoryOrderToRecycleOrder(Mat, Vec, PetscInt, Vec); 53 PETSC_INTERN PetscErrorCode MatUpperTriangularSolveInPlace(Mat, Mat, Vec, PetscBool, PetscInt, MatLMVMDenseType); 54 PETSC_INTERN PetscErrorCode MatMove_LR3(Mat, Mat, PetscInt); 55