38 $ ICHECK, NSTART, ERRTOL,ID,TITR , IS_ENCRYPTED)
47#include "implicit_f.inc"
55 INTEGER ,
INTENT(INOUT) :: LAWID, NMUAL, MA,ICHECK
56 INTEGER ,
INTENT(IN) :: NPT, NSTART,ID,IS_ENCRYPTED
58 my_real ,
DIMENSION(NPT) ,
INTENT(IN) :: y,stretch
59 my_real ,
DIMENSION(10),
INTENT(INOUT) :: mual
60 CHARACTER(LEN=NCHARTITLE),
INTENT(IN) :: TITR
67 INTEGER I,IDUM,ITER,ICOUNT,J,K,IRET ,ISTART, NPSAVED,
68 . ivalid,icomp, mmax,miniter_lm, maxiter_lm,
69 . cnt_hit_eps_lm,lmt_hit_eps_lm, lmstop,ifuncs,
70 . nguess,nmuals,loop_istart ,icheck_guess,
71 . jcheck, ifit_success,iend_finding,iend_iter,
72 . mu_incr_guess,irnd1,iswitch
74 my_real gamma,errnow,gasdev,errpre,errmin, errmax,
75 . errave, errave_min,yogd,xogd,eps_lm,max_abs_yi,
76 . small_fac_abs_yi, small_abs_yi,spready,gamma_stop,
79 . mcof_min(maxa), mcof_max(maxa),as(10),a0(maxa),
82 my_real,
DIMENSION(:),
ALLOCATABLE :: sig
101 ALLOCATE (sig(1:npt))
103 IF(icheck < 0) icomp= 1
109 max_abs_yi =
max( max_abs_yi, abs(y(i)) )
112 small_fac_abs_yi = em3
113 small_abs_yi = max_abs_yi * small_fac_abs_yi
117 sig(j)=spready*
max(small_abs_yi, abs(y(j)) )
122 IF(sig(j) == zero) sig(j) = em15
134 errave_min = huge(errave_min)
135 DO WHILE(ifit_success == 0 )
136 IF(iend_iter <= 1)
THEN
145 ELSEIF (lawid == 2)
then
160 . nmual, mcof_min, mcof_max,icomp)
166 DO WHILE ( istart < nstart )
169 $ lawid, nmual, icheck_guess, mu_incr_guess,irnd1,
170 $ a0, nonzero, mcof_min, mcof_max, nguess)
172 IF (nguess /= 0)
THEN
178 err = abs(y(i) - yogd) /
max(small_abs_yi, abs(y(i)))
179 errave = errave + err
183 CALL ogden0(stretch(i), a0, yogd, nmual)
184 err = abs(y(i) - yogd) /
max(em15,abs(y(i)))
185 errave = errave + err
189 errave = errave / (one * npt)
197 CALL mrqmin(stretch,y,sig,npt,a0,nonzero,
198 . nmual,covar,
alpha,ma,errnow,
199 . ifuncs,gamma,iret,icomp,mmax,atry)
203 DO WHILE (lmstop == 0 )
206 CALL mrqmin(stretch,y,sig,npt,a0,nonzero,
207 . ma,covar,
alpha, ma, errnow,
208 . ifuncs,gamma,iret,icomp,mmax,atry)
215 IF ( abs( a0(j) ) < 1e-20 )
THEN
220 IF(loop_istart == 1)
EXIT
222 IF ( iter > miniter_lm )
THEN
223 IF (errnow < errpre)
THEN
224 IF ( abs(errpre) > zero)
THEN
225 IF ( abs( (errnow-errpre)/ errpre ) < eps_lm)
THEN
226 cnt_hit_eps_lm = cnt_hit_eps_lm + 1
227 IF ( cnt_hit_eps_lm >= lmt_hit_eps_lm )
THEN
232 ELSEIF (iter >= maxiter_lm .OR. gamma >= gamma_stop)
THEN
237 IF(loop_istart == 1) cycle
242 CALL ogden0(stretch(i), a0, yogd, nmual)
243 err = abs(y(i) - yogd) /
max(small_abs_yi, abs(y(i)))
244 errave = errave + err
248 CALL ogden0(stretch(i), a0, yogd, nmual)
249 err = abs(y(i) - yogd) /
max(em15,abs(y(i)))
250 errave = errave + err
253 errave = errave / (one * npt)
254 CALL law69_check(lawid, a0, nmual, jcheck, 0, ivalid)
257 $ ( npsaved > 0 .AND. errave < errave_min) )
THEN
258 npsaved = npsaved + 1
268 IF (npsaved > 0 .AND. errave_min < errtol )
THEN
274 IF(ifit_success == 0 .AND. istart < nstart )
THEN
276 ELSEIF(ifit_success == 0 .OR. (nguess == 0 .AND. ifit_success ==0))
THEN
278 IF (jcheck == 2)
THEN
281 ELSEIF(jcheck == 1)
THEN
286 ELSEIF(nmual < 10)
THEN
287 nmual =
min(10, nmual + 2)
290 ELSEIF(icomp == 0)
THEN
300 IF(iswitch == 0 .AND. ifit_success == 0 )
THEN
301 IF (jcheck == 2)
THEN
304 ELSEIF(jcheck == 1)
THEN
309 ELSEIF(nmual < 10)
THEN
310 nmual =
min(10, nmual + 2)
313 ELSEIF(icomp == 0)
THEN
321 IF(ifit_success == 1 .OR. iend_finding == 1)
EXIT
325 IF (ifit_success == 0)
THEN
326 IF (npsaved == 0)
THEN
345 IF(is_encrypted == 0)
THEN
346 WRITE(iout,
'(//6X,A,/)')
'FITTING RESULT COMPARISON:'
347 WRITE(iout,
'(6X,A,/)')'uniaxial test data
'
348 WRITE(IOUT,'(a20,5x,a20,a30)
') 'nominal strain
',
349 * 'nominal stress(test)
', 'nominal stress(
radioss)
'
351 CALL OGDEN0(STRETCH(I), AS, YOGD, NMUALS)
352 WRITE(IOUT, '(1f18.6, 3x,1f20.13, 6x, 1f20.13)
')
353 * STRETCH(I)-ONE,Y(I),YOGD
357 WRITE(IOUT, '(a)
') '-------------------------------------------
'
358 WRITE(IOUT, '(a,f10.2,a)
') 'averaged error of fitting :
',
359 . ERRAVE_MIN*100.0, '%
'
subroutine ancmsg(msgid, msgtype, anmode, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, r1, r2, r3, r4, r5, r6, r7, r8, r9, c1, c2, c3, c4, c5, c6, c7, c8, c9, prmode)