Actual source code: denseqn.h
1: #pragma once
3: #include <../src/ksp/ksp/utils/lmvm/lmvm.h>
4: #include <../src/ksp/ksp/utils/lmvm/rescale/symbrdnrescale.h>
6: /*
7: dense representation for the limited-memory BFGS/DFP method.
8: */
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 */
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;
44: PETSC_INTERN PetscErrorCode MatView_LMVMDDFP(Mat, PetscViewer);
45: PETSC_INTERN PetscErrorCode MatView_LMVMDBFGS(Mat, PetscViewer);
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);
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);