00001 module myFunctions
00002
00003 implicit none
00004
00005
00006
00007 contains
00008
00009
00010
00011 function cubic(df0,f0,fprev1,fprev2,lambdaprev1,lambdaprev2) !<cubic backtracking
00012 implicit none
00013 real(8) df0,f0,fprev1,fprev2,lambdaprev1,lambdaprev2
00014 real(8) cubic,lambda
00015 real(8) constant,BS(2,2),C(2,1),D(2,1)
00016 real(8) a,b
00017 cubic=0.d0
00018 lambda=0.d0
00019 constant=1.d0/(lambdaprev1-lambdaprev2)
00020 BS(1,1)= 1.d0/lambdaprev1**2.d0
00021 BS(1,2)=-1.d0/lambdaprev2**2.d0
00022 BS(2,1)=-lambdaprev2/lambdaprev1**2.d0
00023 BS(2,2)= lambdaprev1/lambdaprev2**2.d0
00024 C(1,1)=fprev1-f0-df0*lambdaprev1
00025 C(2,1)=fprev2-f0-df0*lambdaprev2
00026 D=constant*matmul(BS,C)
00027 a=D(1,1)
00028 b=D(2,1)
00029 lambda=(-b+dsqrt(b**2.d0-3.d0*a*df0))/(3.d0*a)
00030 cubic=lambda
00031 end function
00032
00033 function machineps()
00034
00035 implicit none
00036 real(8) machineps
00037 machineps=1.d0
00038 do
00039 machineps=machineps/2.d0
00040 if ((1.d0+machineps).EQ.1.d0) exit
00041 end do
00042 machineps=machineps*2.d0
00043 end function machineps
00044
00045 function quadratic(df0,f0,f1) !<quadratic backtracking
00046 implicit none
00047 real(8) df0,f0,f1
00048 real(8) quadratic,lambda
00049 quadratic=0.d0
00050 lambda=0.d0
00051 lambda=-0.5d0*df0/(f1-f0-df0)
00052 quadratic=lambda
00053 end function
00054
00055
00056
00057
00058
00059
00060
00061
00062 end module myFunctions