Statistiques
| Révision :

root / src / Hupdate_all.f90 @ 2

Historique | Voir | Annoter | Télécharger (2,24 ko)

1 1 equemene
 subroutine hupdate_all(n, ds, dgrad, Hess)
2 1 equemene
3 1 equemene
  use Path_module, only :  hesupd,Hinv
4 1 equemene
  use Io_module, only : IoOut
5 1 equemene
6 1 equemene
  IMPLICIT NONE
7 1 equemene
8 1 equemene
  INTEGER, PARAMETER :: KINT=KIND(1)
9 1 equemene
  INTEGER, PARAMETER :: KREAL=KIND(1.0D0)
10 1 equemene
11 1 equemene
  INTEGER(KINT), INTENT(IN) :: n
12 1 equemene
  real(KREAL), INTENT(IN) :: ds(n), dgrad(n)
13 1 equemene
  REAL(KREAL),INTENT(INOUT) :: Hess(n:n)
14 1 equemene
15 1 equemene
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
16 1 equemene
!
17 1 equemene
! This subroutine is a drive for the update of the Hessian
18 1 equemene
! in the Quasi-Newton optimization step.
19 1 equemene
! We propose mostly update of the inverse Hessian.
20 1 equemene
!
21 1 equemene
! input:
22 1 equemene
!  - n: number of coordinates
23 1 equemene
!  - ds: GeomOld-Geom (expressed in the optimization coord.)
24 1 equemene
!  - dgrad: GradOld-Grad  (expressed in the optimization coord.)
25 1 equemene
!
26 1 equemene
!  input/output:
27 1 equemene
!  - Hess: old Hessian in input, replaced by updated Hessian on output
28 1 equemene
!
29 1 equemene
!!!!!!!!!!!!!!!!
30 1 equemene
!
31 1 equemene
! For now, we propose :
32 1 equemene
! - For update of inverser Hessian:
33 1 equemene
!      - BFGS
34 1 equemene
!
35 1 equemene
! - For update of hessian:
36 1 equemene
!      - Bofill (combination of Murtagh-Sargent and Powell-symmetric-Broyden
37 1 equemene
!      - Murtagh-Sargent
38 1 equemene
!
39 1 equemene
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
40 1 equemene
41 1 equemene
42 1 equemene
43 1 equemene
  interface
44 1 equemene
     function valid(string) result (isValid)
45 1 equemene
       logical                  :: isValid
46 1 equemene
       character(*), intent(in) :: string
47 1 equemene
     end function valid
48 1 equemene
49 1 equemene
  end interface
50 1 equemene
51 1 equemene
  ! ======================================================================
52 1 equemene
  LOGICAL :: Debug
53 1 equemene
54 1 equemene
  ! ======================================================================
55 1 equemene
56 1 equemene
  debug = valid ('DEBUG HESS') .OR. Valid('DEBUG HUPDATE')
57 1 equemene
58 1 equemene
  if (debug) WRITE(*,*) "================================= Entering Hupdate_all ==============="
59 1 equemene
60 1 equemene
  SELECT CASE (Hinv)
61 1 equemene
     CASE (.TRUE.)
62 1 equemene
        SELECT CASE (HesUpd)
63 1 equemene
           CASE ("BFGS")
64 1 equemene
              Call Hinvup_BFGS(n,ds,dgrad,hess)
65 1 equemene
           CASE DEFAULT
66 1 equemene
              WRITE(*,*) Trim(HesUpd) // " not known: using BFGS"
67 1 equemene
              Call Hinvup_BFGS(n,ds,dgrad,hess)
68 1 equemene
         END SELECT
69 1 equemene
     CASE (.FALSE.)
70 1 equemene
        SELECT CASE (HesUpd)
71 1 equemene
           CASE ("BOFILL")
72 1 equemene
              Call Hupdate_Bofill(n,ds,dgrad,hess)
73 1 equemene
           CASE ("MS")
74 1 equemene
              Call Hupdate_MS(n,ds,dgrad,hess)
75 1 equemene
           CASE DEFAULT
76 1 equemene
              WRITE(*,*) Trim(HesUpd) // " not known: using Bofill"
77 1 equemene
              Call Hupdate_Bofill(n,ds,dgrad,hess)
78 1 equemene
           END SELECT
79 1 equemene
    END SELECT
80 1 equemene
81 1 equemene
end subroutine hupdate_all