Purpose
- The package "Jade" minimizes energy functionals with the space-time spectral approximation (Gauss quadratures based on Legendre Lobatto points). The underline optimization tool is the L-BFGS package.
Specifications
- Name: Jade.
- Author: Feng Chen.
- Finishing date: 01/08/2009.
- Language: Fortran 90, Fortran 77.
- Required libraries: BLAS, L-BFGS.
Simple Example
- Energy functional: \begin{equation} \min_{u(x) \in C[-1,1]} \mathcal E [u(x)] = \int_{-1}^1 [\frac{|u'|^2}{2} + \frac{(u^2-1)^2}{4\epsilon^2}] \text{d} x, \end{equation} subjected to \begin{equation} u(-1) = 1, \quad u(1) = -1. \end{equation}
- Parameter: \begin{equation} \epsilon=0.03. \end{equation}
- Initial guess: \begin{equation} u_N(x_0) = 1, \quad u_N(x_N) = -1, \quad u_N(x_i)=0, \quad 1\leqslant i \leqslant N-1. \end{equation}
Quick Start
- Compiling and running:
cd ./Jade make library ifort tst_Jade.f90 -llibrary -lblas ./a.out
- Output:
************************************************* N= 31 NUMBER OF CORRECTIONS= 7 INITIAL VALUES F= 2.51833D+03 GNORM= 2.22146D+03 ************************************************* I NFN FUNC GNORM STEPLENGTH 1 2 1.58380D+03 9.04231D+02 4.50155D-04 2 3 1.41239D+03 4.71418D+02 1.00000D+00 3 4 1.28633D+03 2.94799D+02 1.00000D+00 ... 58 64 1.27280D+02 1.15318D-04 1.00000D+00 59 65 1.27280D+02 1.69359D-04 1.00000D+00 60 66 1.27280D+02 2.82277D-05 1.00000D+00 THE MINIMIZATION TERMINATED WITHOUT DETECTING ERRORS. IFLAG = 3 IFLAG = 3 Without error LBFGS done
- CPU: Intel(R) Xeon(R) CPU X5550 @2.67GHz.
- OS: CentOS release 6.4 (Final).
- Compiler: ifort 12.1.5.
References
- Jinhae Park, Feng Chen, and Jie Shen. Modeling and simulation of switchings in ferroelectric liquid crystals, Discrete and Continuous Dynamical Systems (Series A), Volume 26, Issue 4, 1419-1440, (2010).
- Jorge Nocedal. Software for large-scale unconstrained optimization: L-BFGS in Fortran 77.
Code Highlights
!< !! Evaluate the objective functional and its derivative. !! These are required in the L-BFGS algorithm. !! Global: epsinv = 1/(epsilon*epsilon) !! Input: n - number of Legendre collocation points !! nn = n + 1 !! ua - function values !! Output: f - functional value !! g - partial derivatives of f w.r.t. ua !< SUBROUTINE OBJ_GRAD_VALUE(n,nn,ua,f,G) INTEGER, INTENT(IN) :: N,NN DOUBLE PRECISION,INTENT(IN) :: ua(0:NN) DOUBLE PRECISION,INTENT(OUT) :: F,G(1:N) DOUBLE PRECISION :: du(0:NN),uf(0:NN) ! gradient of u du = MATMUL(D,ua) ! objective functional DO i=0,NN ! integrant values uf(i)=4.d0*du(i)*du(i)+epsinv*(ua(i)*ua(i)-1.d0)**2 ENDDO ! quadrature f=DOT_PRODUCT(weight,uf) ! derivative of the functional DO j=1,NN-1 G(j)=0.D0 DO i=0,NN G(j)=G(j)+weight(i)*du(i)*D(i,j) ENDDO G(j)=8.D0*G(j)+4.D0*epsinv*weight(j)*(ua(j)**3-ua(j)) ENDDO RETURN END SUBROUTINE OBJ_GRAD_VALUE
No comments:
Post a Comment