File: ops.f90

package info (click to toggle)
auto-07p 0.9.1%2Bdfsg-7
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 16,200 kB
  • sloc: fortran: 22,644; f90: 19,340; python: 19,045; ansic: 11,116; sh: 1,079; makefile: 618; perl: 339
file content (135 lines) | stat: -rw-r--r-- 2,842 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
!---------------------------------------------------------------------- 
!---------------------------------------------------------------------- 
!       ops :    Optimization of periodic solutions 
!---------------------------------------------------------------------- 
!---------------------------------------------------------------------- 

      SUBROUTINE FUNC(NDIM,U,ICP,PAR,IJAC,F,DFDU,DFDP) 
!     ---------- ---- 

      IMPLICIT NONE
      INTEGER, INTENT(IN) :: NDIM, ICP(*), IJAC
      DOUBLE PRECISION, INTENT(IN) :: U(NDIM), PAR(*)
      DOUBLE PRECISION, INTENT(OUT) :: F(NDIM)
      DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,NDIM), DFDP(NDIM,*)

      DOUBLE PRECISION x,y,z,p1,p2,p3,p4
      INTEGER I,J

       x=U(1)
       y=U(2)
       z=U(3)

       p1=PAR(1)
       p2=PAR(2)
       p3=PAR(3)
       p4=PAR(4)

       F(1)=( -p4*(x**3/3-x) + (z-x)/p2 - y ) / p1  
       F(2)=x-p3 
       F(3)=-(z-x)/p2 

      IF(IJAC.EQ.0)RETURN

       DFDU(1,1)=( -p4*(x**2-1) - 1/p2 ) /p1
       DFDU(1,2)=-1/p1
       DFDU(1,3)=1/(p2*p1)

       DFDU(2,1)=1
       DFDU(2,2)=0
       DFDU(2,3)=0

       DFDU(3,1)=1/p2
       DFDU(3,2)=0
       DFDU(3,3)=-1/p2

      IF(IJAC.EQ.1)RETURN

!      *Parameter derivatives
       DO I=1,3
         DO J=1,9
           DFDP(I,J)=0.d0
         ENDDO
       ENDDO

       DFDP(1,1)=-( -p4*(x**3/3-x) + (z-x)/p2 - y )/p1**2
       DFDP(1,2)=-(z-x)/(p2**2*p1)
       DFDP(1,3)=0
       DFDP(1,4)=-(x**3/3-x)/p1

       DFDP(2,1)=0
       DFDP(2,2)=0
       DFDP(2,3)=-1
       DFDP(2,4)=0

       DFDP(3,1)=0
       DFDP(3,2)=(z-x)/p2**2
       DFDP(3,3)=0
       DFDP(3,4)=0

      END SUBROUTINE FUNC

      SUBROUTINE STPNT(NDIM,U,PAR,T)
!     ---------- ----- 

      IMPLICIT NONE
      INTEGER, INTENT(IN) :: NDIM
      DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*)
      DOUBLE PRECISION, INTENT(IN) :: T

      DOUBLE PRECISION p1,p2,p3,p4

      p1=0.5
      p2=4
      p3=0.9
      p4=2.

      U(1)=p3 
      U(2)=-p4*(p3**3/3-p3)
      U(3)=p3 

      PAR(1)=p1 
      PAR(2)=p2
      PAR(3)=p3 
      PAR(4)=p4

      END SUBROUTINE STPNT

      SUBROUTINE FOPT(NDIM,U,ICP,PAR,IJAC,FS,DFDU,DFDP)
!     ---------- ----

      IMPLICIT NONE
      INTEGER, INTENT(IN) :: NDIM, ICP(*), IJAC
      DOUBLE PRECISION, INTENT(IN) :: U(NDIM), PAR(*)
      DOUBLE PRECISION, INTENT(OUT) :: FS
      DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM),DFDP(*)

      INTEGER I

       FS=PAR(3)

      IF(IJAC.EQ.0)RETURN

       DO I=1,NDIM
         DFDU(I)=0.d0
       ENDDO

      IF(IJAC.EQ.1)RETURN

!      *Parameter derivatives
       DO I=1,9
         DFDP(I)=0.d0
       ENDDO

       DFDP(3)=1.d0

      END SUBROUTINE FOPT

      SUBROUTINE BCND 
      END SUBROUTINE BCND

      SUBROUTINE ICND 
      END SUBROUTINE ICND

      SUBROUTINE PVLS
      END SUBROUTINE PVLS