38#include "implicit_f.inc"
51 INTEGER IER1,IER2,IER3,LV
55 IF(
ALLOCATED(bfgs_v))
DEALLOCATE(bfgs_v)
56 ALLOCATE(bfgs_v(nddl,1),stat=ier2)
64 IF(
ALLOCATED(bfgs_v))
DEALLOCATE(bfgs_v)
65 ALLOCATE(bfgs_v(nddl,lv),stat=ier2)
67 IF(
ALLOCATED(bfgs_w))
DEALLOCATE
68 ALLOCATE(bfgs_w(nddl,lv),stat=ier3)
88#include "implicit_f.inc"
116#include
"implicit_f.inc"
147#include "implicit_f.inc"
151 INTEGER NDDL,W_DDL(*),IT
161 IF (it==0.OR.(
iactb==0.AND.it<2))
RETURN
166 bfgs_v(i,n) = f(i) - bfgs_v(i,n)
168 CALL produt_w(nddl,bfgs_w(1,n),bfgs_v(1,n),w_ddl,a1)
169 IF (abs(a1)>em10)
THEN
171 CALL produt_w(nddl,bfgs_w(1,n),f,w_ddl,a2)
176 bfgs_w(i,n) = b1*bfgs_w(i,n)
181 CALL bfgs_rhd(nddl,w_ddl,bfgs_w(1,i),bfgs_v(1,i),f)
200#include "implicit_f.inc"
205 INTEGER NDDL,W_DDL(*)
218 b(i) = b(i) - a1*bv(i)
230 SUBROUTINE bfgs_2(NDDL,W_DDL,U,F,A2,IT,MAX_BFGS)
238#include "implicit_f.inc"
242#include "impl1_c.inc"
247 INTEGER NDDL,(*),IT,MAX_BFGS
255 IF (
iactb==0.AND.it==0)
RETURN
257 IF (it==0.AND.l_bfgs==0)
n_bfgs = 0
260 CALL bfgs_rhd(nddl,w_ddl,bfgs_v(1,i),bfgs_w(1,i),u)
264 u(i) = u(i) - a2*bfgs_w(i,
n_bfgs)
275 ELSEIF (
n_bfgs==l_bfgs)
THEN
279 bfgs_w(i,n) = bfgs_w(i,n+1)
280 bfgs_v(i,n) = bfgs_v(i,n+1)
316#include "implicit_f.inc"
321 INTEGER NDDL,W_DDL(*),IT
331 IF (it==0.OR.(
iactb==0.AND.it<2))
RETURN
335 bfgs_v(i,n) = f(i) - bfgs_v(i,n)
337 CALL produt_w(nddl,bfgs_w(1,n),bfgs_v(1,n),w_ddl,a1)
338 CALL produt_w(nddl,bfgs_w(1,n),f,w_ddl,a2)
340 IF (abs(a2)>em10)
THEN
342 IF (abs(a1)>em10.AND.b1>zero)
THEN
347 bfgs_w(i,n) = bfgs_w(i,n)/a1
348 bfgs_v(i,n) = bfgs_v(i,n)-b1*f(i)
353 CALL bfgs_rhd(nddl,w_ddl,bfgs_w(1,i),bfgs_v(1,i),f)
365 SUBROUTINE bfgs_2p(NDDL,W_DDL,U,F,A2,IT,MAX_BFGS)
373#include "implicit_f.inc"
377#include "impl1_c.inc"
382 INTEGER ,W_DDL(*),IT,MAX_BFGS
390 IF (
iactb==0.AND.it==0)
RETURN
392 IF (it==0.AND.l_bfgs==0)
n_bfgs = 0
396 CALL bfgs_rhd(nddl,w_ddl,bfgs_v(1,i),bfgs_w(1,i),u)
407 ELSEIF (
n_bfgs==l_bfgs)
THEN
411 bfgs_w(i,n) = bfgs_w(i,n+1)
412 bfgs_v(i,n) = bfgs_v(i,n+1)
445#include "implicit_f.inc"
469 . DD ,DDR ,U ,F ,ICONV )
477#include "implicit_f.inc"
482 INTEGER NDDL,W_DDL(*),IDDL(*) ,NDOF(*) ,IKC(*),ICONV
484 . dd(*) ,ddr(*),u(*),f(*)
494 CALL d_to_u(nddl0 ,nddl ,iddl ,ndof ,ikc ,
496 CALL produt_w(nddl,uold,uold,w_ddl,re)
497 CALL produt_w(nddl,uold,u ,w_ddl,rep)
498 s_lin = s_lin + rep/
max(em20,re)
499 s_lin =
max(s_lin,em10)
501 u(i) = u(i) + uold(i)
525#include "implicit_f.inc"
551 SUBROUTINE bfgs_h1(F_DDL,L_DDL,W_DDL,F,A2,IT,ITASK)
559#include "implicit_f.inc"
563 INTEGER F_DDL,L_DDL,W_DDL(*),IT,ITASK
573 IF (it==0.OR.(
iactb==0.AND.it<2))
RETURN
578 bfgs_v(i,n) = f(i) - bfgs_v(i,n)
580 CALL produt_h(f_ddl,l_ddl,bfgs_w(1,n),bfgs_v(1,n),w_ddl,a1,
583 IF (abs(a1)>em10)
n_bfgs = n
588 IF (abs(a1)>em10)
THEN
589 CALL produt_h(f_ddl,l_ddl,bfgs_w(1,n),f,w_ddl,a2,itask)
590 IF (itask==0) a2 = a2*s_lin
594 bfgs_w(i,n) = b1*bfgs_w(i,n)
599 CALL bfgs_rhdh(f_ddl,l_ddl,w_ddl,bfgs_w(1,i),bfgs_v(1,i),f,
619#include "implicit_f.inc"
624 INTEGER F_DDL,L_DDL,ITASK,W_DDL(*)
634 CALL produt_h(f_ddl,l_ddl,bw,b,w_ddl,a1,itask)
636 b(i) = b(i) - a1*bv(i)
651 SUBROUTINE bfgs_h2(F_DDL,L_DDL,W_DDL,U,F,A2,IT,MAX_BFGS,ITASK)
659#include "implicit_f.inc"
663#include "impl1_c.inc"
668 INTEGER F_DDL,L_DDL,W_DDL(*),IT,MAX_BFGS,ITASK
676 IF (
iactb==0.AND.it==0)
RETURN
682 IF (it==0.AND.l_bfgs==0)
n_bfgs = 0
689 CALL bfgs_rhdh(f_ddl,l_ddl,w_ddl,bfgs_v(1,i),bfgs_w(1,i),u,
694 u(i) = u(i) - a2*bfgs_w(i,
n_bfgs)
706 ELSEIF (
n_bfgs==l_bfgs)
THEN
709 bfgs_w(i,n) = bfgs_w(i,n+1)
710 bfgs_v(i,n) = bfgs_v(i,n+1)
726 ELSEIF (
n_bfgs==max_bfgs)
THEN
729 bfgs_w(i,n) = bfgs_w(i,n+1)
730 bfgs_v(i,n) = bfgs_v(i,n+1)
746 ELSEIF (
n_bfgs==max_bfgs)
THEN
764 SUBROUTINE bfgs_h1p(F_DDL,L_DDL,W_DDL,F,A2,IT,ITASK)
772#include "implicit_f.inc"
777 INTEGER F_DDL,L_DDL,ITASK,W_DDL(*),IT
787 IF (it==0.OR.(
iactb==0.AND.it<2))
RETURN
791 bfgs_v(i,n) = f(i) - bfgs_v(i,n)
793 CALL produt_h(f_ddl,l_ddl,bfgs_w(1,n),bfgs_v(1,n),w_ddl,a0,
795 CALL produt_h(f_ddl,l_ddl,bfgs_w(1,n),f,w_ddl,a2,itask)
799 IF (abs(a2)>em10)
THEN
801 IF (abs(a1)>em10.AND.b1>zero)
n_bfgs = n
807 IF (abs(a2)>em10)
THEN
809 IF (abs(a1)>em10.AND.b1>zero)
THEN
813 bfgs_w(i,n) = bfgs_w(i,n)/a1
814 bfgs_v(i,n) = bfgs_v(i,n)-b1*f(i)
822 CALL bfgs_rhdh(f_ddl,l_ddl,w_ddl,bfgs_w(1,i),bfgs_v(1,i),f,
835!||--- uses -----------------------------------------------------
838 SUBROUTINE bfgs_h2p(F_DDL,L_DDL,W_DDL,U,F,A2,IT,MAX_BFGS,ITASK)
846#include "implicit_f.inc"
850#include "impl1_c.inc"
855 INTEGER F_DDL,L_DDL,ITASK,W_DDL(*),,MAX_BFGS
863 IF (
iactb==0.AND.it==0)
RETURN
869 IF (it==0.AND.l_bfgs==0)
n_bfgs = 0
876 CALL bfgs_rhdh(f_ddl,l_ddl,w_ddl,bfgs_v(1,i),bfgs_w(1,i),u,
888 ELSEIF (
n_bfgs==l_bfgs)
THEN
891 bfgs_w(i,n) = bfgs_w(i,n+1)
892 bfgs_v(i,n) = bfgs_v(i,n+1)
907 ELSEIF (
n_bfgs==max_bfgs)
THEN
910 bfgs_w(i,n) = bfgs_w(i,n+1)
911 bfgs_v(i,n) = bfgs_v(i,n+1)
918 END IF !
IF (
n_bfgs<max_bfgs)
926 ELSEIF (
n_bfgs==max_bfgs)
THEN
subroutine bfgs_h1(f_ddl, l_ddl, w_ddl, f, a2, it, itask)
subroutine bfgs_h2(f_ddl, l_ddl, w_ddl, u, f, a2, it, max_bfgs, itask)
subroutine nsloan_0(nddl0)
subroutine bfgs_2(nddl, w_ddl, u, f, a2, it, max_bfgs)
subroutine bfgs_h2p(f_ddl, l_ddl, w_ddl, u, f, a2, it, max_bfgs, itask)
subroutine bfgs_1p(nddl, w_ddl, f, a2, it)
subroutine bfgs_rhdh(f_ddl, l_ddl, w_ddl, bw, bv, b, itask)
subroutine bfgs_2p(nddl, w_ddl, u, f, a2, it, max_bfgs)
subroutine bfgs_h1p(f_ddl, l_ddl, w_ddl, f, a2, it, itask)
subroutine bfgs_rhd(nddl, w_ddl, bw, bv, b)
subroutine bfgs_1(nddl, w_ddl, f, a2, it)
subroutine bfgs_ini(nddl, max_bfgs)
subroutine nsloan_5(nddl, iddl, ndof, ikc, w_ddl, dd, ddr, u, f, iconv)
subroutine d_to_u(nddl0, nddl, iddl, ndof, ikc, d, dr, u)
subroutine produt_w(nddl, x, y, w, r)
subroutine produt_h(f_ddl, l_ddl, x, y, w, r, itask)