19 integer(kind=kint) :: ctrl
20 integer(kind=kint) :: type
24 integer(kind=kint) :: ipt
25 character(len=80) :: s
29 s =
'ELEMCHECK,STATIC,EIGEN,HEAT,DYNAMIC,NLSTATIC,STATICEIGEN,NZPROF '
48 integer(kind=kint) :: ctrl
49 integer(kind=kint) :: method
52 character(len=80) :: s
56 s =
'NEWTON,QUASINEWTON '
63 iterpremax, nrest, nBFGS, scaling, &
64 dumptype, dumpexit, usejad, ncolor_in, mpc_method, estcond, method2, recyclepre, &
65 solver_opt, contact_elim, &
66 resid, sigma_diag, omega, thresh, filter, solver_ropt, loglevel, &
67 matvec_impl, precond_impl, recompute_residual )
68 integer(kind=kint) :: ctrl
69 integer(kind=kint) :: method
70 integer(kind=kint) :: precond
71 integer(kind=kint) :: nset
72 integer(kind=kint) :: iterlog
73 integer(kind=kint) :: timelog
74 integer(kind=kint) :: steplog
75 integer(kind=kint) :: nier
76 integer(kind=kint) :: iterpremax
77 integer(kind=kint) :: nrest
78 integer(kind=kint) :: nbfgs
79 integer(kind=kint) :: scaling
80 integer(kind=kint) :: dumptype
81 integer(kind=kint) :: dumpexit
82 integer(kind=kint) :: usejad
83 integer(kind=kint) :: ncolor_in
84 integer(kind=kint) :: mpc_method
85 integer(kind=kint) :: estcond
86 integer(kind=kint) :: method2
87 integer(kind=kint) :: recyclepre
88 integer(kind=kint) :: solver_opt(10)
89 integer(kind=kint) :: contact_elim
90 real(kind=kreal) :: resid
91 real(kind=kreal) :: sigma_diag
92 real(kind=kreal) :: omega
93 real(kind=kreal) :: thresh
94 real(kind=kreal) :: filter
95 real(kind=kreal) :: solver_ropt(10)
96 integer(kind=kint) :: loglevel
97 integer(kind=kint) :: matvec_impl
98 integer(kind=kint) :: precond_impl
99 integer(kind=kint) :: recompute_residual
102 character(120) :: mlist = &
103 '1,2,3,4,101,CG,BiCGSTAB,GMRES,GPBiCG,GMRESR,GMRESREN,CR,PipeCG,GroppCG,DIRECT,DIRECTmkl,DIRECTlag,MUMPS,MKL,DIRECTmf '
105 character(24) :: dlist =
'0,1,2,3,NONE,MM,CSR,BSR '
107 integer(kind=kint) :: number_number = 5
108 integer(kind=kint) :: indirect_number = 9
109 integer(kind=kint) :: iter, time, sclg, dmpt, dmpx, usjd, step, mtxfmt
126 if(
fstr_ctrl_get_param_ex( ctrl,
'PRECOND ',
'1,2,3,4,5,6,7,8,9,10,11,12,20,21,22,30,31,32 ' ,0,
'I', precond ) /= 0)
return
147 if( method > number_number )
then
148 method = method - number_number
149 if( method > indirect_number )
then
151 method = method - indirect_number + 100
152 if( method == 103 ) method = 101
153 if( method == 105 ) method = 102
156 if( method2 > number_number )
then
157 method2 = method2 - number_number
158 if( method2 > indirect_number )
then
160 method2 = method2 - indirect_number + 100
165 if( dumptype >= 4 )
then
166 dumptype = dumptype - 4
171 if(
fstr_ctrl_get_data_ex( ctrl, 1,
'iiiiii ', nier, iterpremax, nrest, ncolor_in, recyclepre, nbfgs )/= 0)
return
177 if( method == 101 )
then
179 else if( method == 106 )
then
192 solver_ropt(1:10) = 0.0d0
194 solver_opt(1), solver_opt(2), solver_opt(3), solver_opt(4), solver_opt(5), &
195 solver_opt(6), solver_opt(7), solver_opt(8), solver_opt(9), solver_opt(10) )/= 0) solver_opt(1:10) = 0
197 solver_ropt(1), solver_ropt(2), solver_ropt(3), solver_ropt(4), solver_ropt(5), &
198 solver_ropt(6), solver_ropt(7), solver_ropt(8) )/= 0) solver_ropt(1:10) = 0.0d0
199 else if( precond == 20 .or. precond == 21)
then
201 else if( precond == 5 )
then
203 solver_opt(1), solver_opt(2), solver_opt(3), solver_opt(4), solver_opt(5), &
204 solver_opt(6), solver_opt(7), solver_opt(8), solver_opt(9), solver_opt(10) )/= 0)
return
205 else if( precond == 22 )
then
224 solver_ropt(1:10) = 0.0d0
226 solver_opt(1), solver_opt(2), solver_opt(3), solver_opt(4), solver_opt(5), &
227 solver_opt(6), solver_opt(7), solver_opt(8), solver_opt(9), solver_opt(10) )/= 0) solver_opt(1:10) = 0
229 solver_ropt(1), solver_ropt(2), solver_ropt(3), solver_ropt(4), solver_ropt(5), &
230 solver_ropt(6), solver_ropt(7), solver_ropt(8) )/= 0) solver_ropt(1:10) = 0.0d0
247 matvec_impl = hecmw_matvec_impl_bsr
248 precond_impl = hecmw_precond_impl_bsr
251 matvec_impl = hecmw_matvec_impl_bsr
252 precond_impl = hecmw_precond_impl_bsr
255 matvec_impl = hecmw_matvec_impl_csr
256 precond_impl = hecmw_precond_impl_csr
259 matvec_impl = hecmw_matvec_impl_sblas
260 precond_impl = hecmw_precond_impl_sblas
270 integer(kind=kint) :: ctrl
271 character(len=HECMW_NAME_LEN) :: amp
272 integer(kind=kint) :: iproc
275 integer(kind=kint) :: ipt = 0
276 integer(kind=kint) :: ip = 0
284 if( ipt == 2 .or. ip == 1 ) iproc = 1
294 integer(kind=kint),
intent(in) :: ctrl
295 type (hecmwst_local_mesh),
intent(in) :: hecmesh
297 character(len=*),
intent(out) :: tpname
298 character(len=*),
intent(out) :: apname
299 character(len=*),
intent(out) :: cpname
301 character(len=HECMW_NAME_LEN) :: data_fmt,ss, data_fmt1
302 character(len=HECMW_NAME_LEN) :: amp
303 character(len=HECMW_NAME_LEN) :: header_name
304 integer(kind=kint) :: bcid
305 integer(kind=kint) :: i, n, sn, ierr
306 integer(kind=kint) :: bc_n, load_n, contact_n, elemact_n
307 real(kind=kreal) :: fn, f1, f2, f3
311 write(ss,*) hecmw_name_len
312 write( data_fmt,
'(a,a,a)')
'S', trim(adjustl(ss)),
'I '
313 write( data_fmt1,
'(a,a,a)')
'S', trim(adjustl(ss)),
'rrr '
320 steps%initdt = 1.d0/steps%num_substep
330 if( len( trim(amp) )>0 )
then
337 if(
fstr_ctrl_get_param_ex( ctrl,
'AMPLITUDE ',
'RAMP,STEP ', 0,
'P', steps%amp_default_type )/= 0)
return
353 read( ss, * , iostat=ierr ) fn
357 steps%elapsetime = f1
359 steps%mindt = min(f2,steps%initdt)
362 steps%num_substep = max(int((f1+0.999999999d0*fn)/fn),steps%num_substep)
373 if( trim(header_name) ==
'BOUNDARY' )
then
375 else if( trim(header_name) ==
'LOAD' )
then
377 else if( trim(header_name) ==
'CONTACT' )
then
378 contact_n = contact_n+1
379 else if( trim(header_name) ==
'ELEMACT' )
then
380 elemact_n = elemact_n+1
381 else if( trim(header_name) ==
'TEMPERATURE' )
then
386 if( bc_n>0 )
allocate( steps%Boundary(bc_n) )
387 if( load_n>0 )
allocate( steps%Load(load_n) )
388 if( contact_n>0 )
allocate( steps%Contact(contact_n) )
389 if( elemact_n>0 )
allocate( steps%ElemActivation(elemact_n) )
397 if( trim(header_name) ==
'BOUNDARY' )
then
399 steps%Boundary(bc_n) = bcid
400 else if( trim(header_name) ==
'LOAD' )
then
402 steps%Load(load_n) = bcid
403 else if( trim(header_name) ==
'CONTACT' )
then
404 contact_n = contact_n+1
405 steps%Contact(contact_n) = bcid
406 else if( trim(header_name) ==
'ELEMACT' )
then
407 elemact_n = elemact_n+1
408 steps%ElemActivation(elemact_n) = bcid
418 integer(kind=kint),
intent(in) :: ctrl
419 type (hecmwst_local_mesh),
intent(inout) :: hecmesh
420 type (
tsection),
pointer,
intent(inout) :: sections(:)
422 integer(kind=kint) :: j, k, sect_id, elemopt
423 integer(kind=kint),
save :: cache = 1
424 character(len=HECMW_NAME_LEN) :: sect_orien
425 character(19) :: form341list =
'FI,SELECTIVE_ESNS '
426 character(19) :: form361list =
'FI,BBAR,IC,FBAR,UP '
427 character(19) :: form611list =
'EULER,TIMOSHENKO '
432 if( sect_id > hecmesh%section%n_sect )
return
436 if( elemopt > 0 ) sections(sect_id)%elemopt341 = elemopt
440 if( elemopt > 0 ) sections(sect_id)%elemopt361 = elemopt
444 if( elemopt > 0 ) sections(sect_id)%elemopt611 = elemopt
447 hecmesh%section%sect_orien_ID(sect_id) = -1
450 if(
associated(g_localcoordsys) )
then
451 k =
size(g_localcoordsys)
454 if( sect_orien == g_localcoordsys(cache)%sys_name )
then
455 hecmesh%section%sect_orien_ID(sect_id) = cache
463 if( sect_orien == g_localcoordsys(j)%sys_name )
then
464 hecmesh%section%sect_orien_ID(sect_id) = j
478 integer(kind=kint) :: ctrl
479 integer(kind=kint) :: res
480 integer(kind=kint) :: visual
481 integer(kind=kint) :: femap
497 integer(kind=kint) :: ctrl
498 integer(kind=kint) :: echo
509 integer(kind=kint) :: ctrl
510 integer(kind=kint) :: fg_type
511 integer(kind=kint) :: fg_first
512 integer(kind=kint) :: fg_window
513 character(len=HECMW_NAME_LEN) :: surf_id(:)
514 integer(kind=kint) :: surf_id_len
517 character(len=HECMW_NAME_LEN) :: data_fmt,ss
518 write(ss,*) surf_id_len
519 write(data_fmt,
'(a,a,a)')
'S',trim(adjustl(ss)),
' '
522 if(
fstr_ctrl_get_param_ex( ctrl,
'TYPE ',
'1,2,3,4,5,6 ', 0,
'I', fg_type )/= 0)
return
533 integer(kind=kint),
intent(in) :: ctrl
534 real(kind=kreal),
intent(inout) :: penalty
538 if( penalty <= 1.0 )
then
540 write(
imsg,*)
"Warging : !MPC : too small penalty: ", penalty
541 write(*,*)
"Warging : !MPC : too small penalty: ", penalty
552 integer(kind=kint),
intent(in) :: ctrl
553 type (hecmwst_local_mesh),
intent(in) :: hecmesh
556 integer(kind=kint) :: rcode, ipos
557 integer(kind=kint) :: n, i, j
558 character(len=HECMW_NAME_LEN) :: data_fmt, ss
559 character(len=HECMW_NAME_LEN),
allocatable :: header_name(:), onoff(:), vtype(:)
561 write( ss, * ) hecmw_name_len
562 write( data_fmt,
'(a,a,a,a,a)')
'S', trim(adjustl(ss)),
'S', trim(adjustl(ss)),
' '
567 outinfo%grp_id_name =
"ALL"
575 allocate( header_name(n), onoff(n), vtype(n) )
576 header_name(:) =
""; vtype(:) =
""; onoff(:) =
""
581 do j = 1, outinfo%num_items
582 if( trim(header_name(i)) == outinfo%keyWord(j) )
then
583 outinfo%on(j) = .true.
584 if( trim(onoff(i)) ==
'OFF' ) outinfo%on(j) = .false.
585 if( len( trim(vtype(i)) )>0 )
then
587 outinfo%vtype(j) = ipos
588 else if( trim(vtype(i)) ==
"SCALER" )
then
589 outinfo%vtype(j) = -1
590 else if( trim(vtype(i)) ==
"VECTOR" )
then
591 outinfo%vtype(j) = -2
592 else if( trim(vtype(i)) ==
"SYMTENSOR" )
then
593 outinfo%vtype(j) = -3
594 else if( trim(vtype(i)) ==
"TENSOR" )
then
595 outinfo%vtype(j) = -4
602 deallocate( header_name, onoff, vtype )
609 integer(kind=kint) :: ctrl
610 integer(kind=kint) :: algo
611 integer(kind=kint) :: augiter
612 logical :: conefollow
613 real(kind=kreal) :: eps_fric_band
616 integer(kind=kint) :: rcode, icone
617 character(len=80) :: s
618 s =
'SLAGRANGE,ALAGRANGE '
620 if( rcode /= 0 )
then
629 if( rcode /= 0 )
then
633 conefollow = ( icone == 2 )
639 if( eps_fric_band<0.d0 .or. 1.d0<=eps_fric_band )
then
640 write(*,*)
'fstr control file error : !CONTACT_ALGO : EPS_FRIC_BAND must be 0 <= EPS_FRIC_BAND < 1.'
641 write(
ilog,*)
'fstr control file error : !CONTACT_ALGO : EPS_FRIC_BAND must be 0 <= EPS_FRIC_BAND < 1.'
651 integer(kind=kint),
intent(in) :: ctrl
652 integer(kind=kint),
intent(in) :: n
653 integer(kind=kint),
intent(in) :: ctalgo
654 type(tcontact),
intent(out) :: contact(n)
655 real(kind=kreal),
intent(out) :: np
656 real(kind=kreal),
intent(out) :: tp
657 real(kind=kreal),
intent(out) :: ntol
658 real(kind=kreal),
intent(out) :: ttol
659 character(len=*),
intent(out) :: cpname
660 integer(kind=kint),
intent(out) :: smoothing
662 integer :: rcode, mortar, expansion
663 character(len=30) :: s1 =
'TIED,GLUED,SSLID,FSLID '
664 character(len=HECMW_NAME_LEN) :: data_fmt,ss
665 character(len=HECMW_NAME_LEN) :: cp_name(n)
666 real(kind=kreal) :: fcoeff(n),tpenalty(n)
667 real(kind=kreal) :: damp_alpha, damp_gact
669 write(ss,*) hecmw_name_len
673 contact(1)%algtype = contactsslid
675 if( contact(1)%algtype==contactglued ) contact(1)%algtype=contactfslid
677 smoothing = kcsnone + 1
679 smoothing = smoothing - 1
681 contact(rcode)%ctype = contact(1)%ctype
682 contact(rcode)%group = contact(1)%group
683 contact(rcode)%algtype = contact(1)%algtype
688 if( contact(1)%algtype==contactsslid .or. contact(1)%algtype==contactfslid )
then
689 write( data_fmt,
'(a,a,a)')
'S', trim(adjustl(ss)),
'Rr '
692 contact(rcode)%pair_name = cp_name(rcode)
693 contact(rcode)%fcoeff = fcoeff(rcode)
694 contact(rcode)%nPenalty = 5.0d0
695 contact(rcode)%tPenalty = tpenalty(rcode)
696 contact(rcode)%refStiff = 1.d0
697 contact(rcode)%damp_alpha = 0.0d0
698 contact(rcode)%damp_gact = 0.0d0
700 else if( contact(1)%algtype==contacttied )
then
701 write( data_fmt,
'(a,a)')
'S', trim(adjustl(ss))
704 contact(rcode)%pair_name = cp_name(rcode)
705 contact(rcode)%nPenalty = 5.0d0
706 contact(rcode)%fcoeff = 0.d0
707 contact(rcode)%tPenalty = 1.d0
708 contact(rcode)%damp_alpha = 0.0d0
709 contact(rcode)%damp_gact = 0.0d0
714 ntol = 0.d0; ttol=0.d0
715 damp_alpha = 0.0d0; damp_gact = 0.0d0
728 contact%method = mortar
733 contact%sparsity_expansion = expansion - 1
738 contact(rcode)%nPenalty = np
743 contact(rcode)%tPenalty = tp
746 if( damp_alpha > 0.0d0 )
then
748 contact(rcode)%damp_alpha = damp_alpha
751 if( damp_gact > 0.0d0 )
then
753 contact(rcode)%damp_gact = damp_gact
763 integer(kind=kint),
intent(in) :: ctrl
764 integer(kind=kint),
intent(in) :: n
765 type(tcontact),
intent(out) :: embed(n)
766 character(len=*),
intent(out) :: cpname
767 integer(kind=kint),
intent(out) :: smoothing
770 character(len=HECMW_NAME_LEN) :: data_fmt,ss
771 character(len=HECMW_NAME_LEN) :: cp_name(n)
772 real(kind=kreal) :: tpenalty(n)
776 write(ss,*) hecmw_name_len
780 embed(1)%algtype = contacttied
782 smoothing = kcsnone + 1
784 smoothing = smoothing - 1
786 embed(rcode)%ctype = embed(1)%ctype
787 embed(rcode)%group = embed(1)%group
788 embed(rcode)%algtype = embed(1)%algtype
791 write( data_fmt,
'(a,a)')
'S', trim(adjustl(ss))
794 embed(rcode)%pair_name = cp_name(rcode)
805 integer(kind=kint) :: ctrl
806 type( tcontactparam ) :: contactparam
809 integer(kind=kint) :: rcode, nline
810 character(len=HECMW_NAME_LEN) :: data_fmt
811 character(len=128) :: msg
812 real(kind=kreal) :: clearance, clr_same_elem, clr_difflpos, clr_cal_norm
813 real(kind=kreal) :: distclr_init, distclr_free, distclr_nocheck, tensile_force
814 real(kind=kreal) :: distclr_c2f
815 real(kind=kreal) :: penclr_free, penclr_nocheck
820 contactparam%name =
''
826 & clearance, clr_same_elem, clr_difflpos, clr_cal_norm )
827 if( rcode /= 0 )
return
828 contactparam%CLEARANCE = clearance
829 contactparam%CLR_SAME_ELEM = clr_same_elem
830 contactparam%CLR_DIFFLPOS = clr_difflpos
831 contactparam%CLR_CAL_NORM = clr_cal_norm
836 & distclr_init, distclr_free, distclr_nocheck, tensile_force )
837 if( rcode /= 0 )
return
838 contactparam%DISTCLR_INIT = distclr_init
839 contactparam%DISTCLR_FREE = distclr_free
840 contactparam%DISTCLR_NOCHECK = distclr_nocheck
841 contactparam%TENSILE_FORCE = tensile_force
845 distclr_c2f = contactparam%DISTCLR_C2F
847 if( nline >= 3 )
then
850 if( rcode /= 0 )
return
851 contactparam%DISTCLR_C2F = distclr_c2f
855 penclr_free = contactparam%PENCLR_FREE
856 penclr_nocheck = contactparam%PENCLR_NOCHECK
857 if( nline >= 4 )
then
860 if( rcode /= 0 )
return
861 contactparam%PENCLR_FREE = penclr_free
862 contactparam%PENCLR_NOCHECK = penclr_nocheck
867 if( clearance<0.d0 .OR. 1.d0<clearance )
THEN
868 write(msg,*)
'fstr control file error : !CONTACT_PARAM : CLEARANCE must be 0 < CLEARANCE < 1.'
869 else if( clr_same_elem<0.d0 .or. 1.d0<clr_same_elem )
then
870 write(msg,*)
'fstr control file error : !CONTACT_PARAM : CLR_SAME_ELEM must be 0 < CLR_SAME_ELEM < 1.'
871 else if( clr_difflpos<0.d0 .or. 1.d0<clr_difflpos )
then
872 write(msg,*)
'fstr control file error : !CONTACT_PARAM : CLR_DIFFLPOS must be 0 < CLR_DIFFLPOS < 1.'
873 else if( clr_cal_norm<0.d0 .or. 1.d0<clr_cal_norm )
then
874 write(msg,*)
'fstr control file error : !CONTACT_PARAM : CLR_CAL_NORM must be 0 < CLR_CAL_NORM < 1.'
875 else if( distclr_init<0.d0 .or. 1.d0<distclr_init )
then
876 write(msg,*)
'fstr control file error : !CONTACT_PARAM : DISTCLR_INIT must be 0 < DISTCLR_INIT < 1.'
877 else if( distclr_free<-1.d0 .or. 1.d0<distclr_free )
then
878 write(msg,*)
'fstr control file error : !CONTACT_PARAM : DISTCLR_FREE must be -1 < DISTCLR_FREE < 1.'
879 else if( distclr_nocheck<0.5d0 )
then
880 write(msg,*)
'fstr control file error : !CONTACT_PARAM : DISTCLR_NOCHECK must be >= 0.5.'
881 else if( tensile_force>=0.d0 )
then
882 write(msg,*)
'fstr control file error : !CONTACT_PARAM : TENSILE_FORCE must be < 0.'
883 else if( contactparam%DISTCLR_C2F<=0.d0 .or. 1.d0<=contactparam%DISTCLR_C2F )
then
884 write(msg,*)
'fstr control file error : !CONTACT_PARAM : DISTCLR_C2F must be 0 < DISTCLR_C2F < 1.'
885 else if( penclr_free<=0.d0 )
then
886 write(msg,*)
'fstr control file error : !CONTACT_PARAM : PENCLR_FREE must be > 0.'
887 else if( penclr_nocheck<penclr_free )
then
888 write(msg,*)
'fstr control file error : !CONTACT_PARAM : PENCLR_NOCHECK must be >= PENCLR_FREE.'
892 if( rcode /= 0 )
then
894 write(
ilog,*) trim(msg)
904 integer(kind=kint),
intent(in) :: ctrl
905 integer(kind=kint),
intent(in) :: n
907 type(tcontactinterference),
intent(inout) :: contact_if(n)
910 character(len=30) :: s1 =
'SLAVE,MASTER '
911 character(len=HECMW_NAME_LEN) :: data_fmt,ss
912 character(len=HECMW_NAME_LEN) :: cp_name(n)
913 real(kind=kreal) :: init_pos(n), end_pos(n)
917 write(ss,*) hecmw_name_len
920 write( data_fmt,
'(a,a,a)')
'S', trim(adjustl(ss)),
'rr '
921 init_pos = 0.d0; end_pos = 0.d0
924 contact_if(i)%if_type = contact_if(1)%if_type
925 contact_if(i)%etime = contact_if(1)%etime
927 contact_if(i)%cp_name = cp_name(i)
928 contact_if(i)%initial_pos = - init_pos(i)
929 contact_if(i)%end_pos = - end_pos(i)
930 if(contact_if(i)%if_type == c_if_slave .and. init_pos(i) /= 0.d0) contact_if(i)%initial_pos = 0.d0
938 integer(kind=kint) :: ctrl
939 integer(kind=kint) :: elemopt361
942 character(72) :: o361list =
'IC,Bbar '
944 integer(kind=kint) :: o361
948 o361 = elemopt361 + 1
953 elemopt361 = o361 - 1
963 integer(kind=kint) :: ctrl
964 type( tparamautoinc ) :: aincparam
967 integer(kind=kint) :: rcode
968 character(len=HECMW_NAME_LEN) :: data_fmt
969 character(len=128) :: msg
970 integer(kind=kint) :: bound_s(10), bound_l(10)
971 real(kind=kreal) :: rs, rl
985 & bound_s(1), bound_s(2), bound_s(3), aincparam%NRtimes_s )
986 if( rcode /= 0 )
return
987 aincparam%ainc_Rs = rs
988 aincparam%NRbound_s(knstmaxit) = bound_s(1)
989 aincparam%NRbound_s(knstsumit) = bound_s(2)
990 aincparam%NRbound_s(knstciter) = bound_s(3)
995 & bound_l(1), bound_l(2), bound_l(3), aincparam%NRtimes_l )
996 if( rcode /= 0 )
return
997 aincparam%ainc_Rl = rl
998 aincparam%NRbound_l(knstmaxit) = bound_l(1)
999 aincparam%NRbound_l(knstsumit) = bound_l(2)
1000 aincparam%NRbound_l(knstciter) = bound_l(3)
1005 & aincparam%ainc_Rc, aincparam%CBbound )
1006 if( rcode /= 0 )
return
1010 if( rs<0.d0 .or. rs>1.d0 )
then
1011 write(msg,*)
'fstr control file error : !AUTOINC_PARAM : decrease ratio Rs must 0 < Rs < 1.'
1012 else if( any(bound_s<0) )
then
1013 write(msg,*)
'fstr control file error : !AUTOINC_PARAM : decrease NR bound must >= 0.'
1014 else if( aincparam%NRtimes_s < 1 )
then
1015 write(msg,*)
'fstr control file error : !AUTOINC_PARAM : # of times to decrease must > 0.'
1016 else if( rl<1.d0 )
then
1017 write(msg,*)
'fstr control file error : !AUTOINC_PARAM : increase ratio Rl must > 1.'
1018 else if( any(bound_l<0) )
then
1019 write(msg,*)
'fstr control file error : !AUTOINC_PARAM : increase NR bound must >= 0.'
1020 else if( aincparam%NRtimes_l < 1 )
then
1021 write(msg,*)
'fstr control file error : !AUTOINC_PARAM : # of times to increase must > 0.'
1022 elseif( aincparam%ainc_Rc<0.d0 .or. aincparam%ainc_Rc>1.d0 )
then
1023 write(msg,*)
'fstr control file error : !AUTOINC_PARAM : cutback decrease ratio Rc must 0 < Rc < 1.'
1024 else if( aincparam%CBbound < 1 )
then
1025 write(msg,*)
'fstr control file error : !AUTOINC_PARAM : maximum # of cutback times must > 0.'
1029 if( rcode /= 0 )
then
1030 write(*,*) trim(msg)
1031 write(
ilog,*) trim(msg)
1041 integer(kind=kint) :: ctrl
1042 type( tparamconverg ) :: cnvparam
1045 integer(kind=kint) :: rcode, i, n, iq, ig1, ig2, inorm
1046 character(len=HECMW_NAME_LEN) :: data_fmt, data_fmt_tol, ss
1047 character(len=HECMW_NAME_LEN) :: quantity, norm, action
1048 character(len=256) :: msg
1049 real(kind=kreal) :: tol
1057 write( ss, * ) hecmw_name_len
1058 write( data_fmt,
'(a,a,a,a,a,a,a)' )
'S', trim(adjustl(ss)),
'S', trim(adjustl(ss)),
'S', trim(adjustl(ss)),
' '
1059 write( data_fmt_tol,
'(a,a)' ) trim(data_fmt),
'R '
1066 if( action ==
'CHECK' )
then
1068 write(msg,*)
'fstr control file error : !CONVERG_PARAM : threshold of CHECK must be given : ', &
1069 & trim(quantity),
', ', trim(norm)
1070 write(*,*) trim(msg)
1071 write(
ilog,*) trim(msg)
1080 if( quantity ==
'RESIDUAL' )
then
1082 ig1 = kcnvtranslation
1084 else if( quantity ==
'CORRECTION' )
then
1086 ig1 = kcnvtranslation
1088 else if( quantity ==
'LAGRANGE' )
then
1094 if( norm ==
'L2' )
then
1096 else if( norm ==
'MAX' )
then
1103 write(msg,*)
'fstr control file error : !CONVERG_PARAM : quantity must be RESIDUAL, CORRECTION or LAGRANGE : ', &
1105 else if( inorm == 0 )
then
1106 write(msg,*)
'fstr control file error : !CONVERG_PARAM : norm must be L2 or MAX : ', trim(norm)
1107 else if( action /=
'CHECK' .and. action /=
'SKIP' )
then
1108 write(msg,*)
'fstr control file error : !CONVERG_PARAM : CHECK or SKIP must be given : ', trim(action)
1109 else if( cnvparam%given(iq,ig1,inorm) )
then
1110 write(msg,*)
'fstr control file error : !CONVERG_PARAM : ', trim(quantity),
', ', trim(norm), &
1111 &
' is given more than once.'
1112 else if( action ==
'CHECK' .and. tol <= 0.d0 )
then
1113 write(msg,*)
'fstr control file error : !CONVERG_PARAM : threshold of CHECK must be > 0 : ', &
1114 & trim(quantity),
', ', trim(norm)
1118 if( rcode /= 0 )
then
1119 write(*,*) trim(msg)
1120 write(
ilog,*) trim(msg)
1124 cnvparam%given(iq,ig1:ig2,inorm) = .true.
1125 cnvparam%check(iq,ig1:ig2,inorm) = ( action ==
'CHECK' )
1126 if( action ==
'CHECK' ) cnvparam%tol(iq,ig1:ig2,inorm) = tol
1134 integer(kind=kint) :: ctrl
1138 integer(kind=kint) :: i, n
1140 real(kind=kreal) :: stime,
etime, interval
1152 stime = 0.d0;
etime = 0.d0; interval = 1.d0
1154 tp%n_points = int((
etime-stime)/interval)+1
1155 allocate(tp%points(tp%n_points))
1157 tp%points(i) = stime + dble(i-1)*interval
1163 allocate(tp%points(tp%n_points))
1165 do i=1,tp%n_points-1
1166 if( tp%points(i) < tp%points(i+1) ) cycle
1167 write(*,*)
'Error in reading !TIME_POINT: time points must be given in ascending order.'
1178 integer(kind=kint),
intent(in) :: ctrl
1179 integer(kind=kint),
intent(in) :: nline
1180 character(len=HECMW_NAME_LEN),
intent(out) :: name
1181 integer(kind=kint),
intent(out) :: type_def
1182 integer(kind=kint),
intent(out) :: type_time
1183 integer(kind=kint),
intent(out) :: type_val
1184 integer(kind=kint),
intent(out) :: n
1185 real(kind=kreal),
pointer :: val(:)
1186 real(kind=kreal),
pointer :: table(:)
1189 integer(kind=kint) :: t_def, t_time, t_val
1190 integer(kind=kint) :: i, j
1191 real(kind=kreal) :: r(4), t(4)
1206 type_def = hecmw_amp_typedef_tabular
1208 write(*,*)
'Error in reading !AMPLITUDE: invalid value for parameter DEFINITION.'
1210 if( t_time==1 )
then
1211 type_time = hecmw_amp_typetime_step
1213 write(*,*)
'Error in reading !AMPLITUDE: invalid value for parameter TIME.'
1216 type_val = hecmw_amp_typeval_relative
1217 elseif( t_val==2 )
then
1218 type_val = hecmw_amp_typeval_absolute
1220 write(*,*)
'Error in reading !AMPLITUDE: invalid value for parameter VALUE.'
1225 r(:)=huge(0.0d0); t(:)=huge(0.0d0)
1226 if(
fstr_ctrl_get_data_ex( ctrl, i,
'RRrrrrrr ', r(1), t(1), r(2), t(2), r(3), t(3), r(4), t(4) ) /= 0)
return
1231 if (r(j) < huge(0.0d0) .and. t(j) < huge(0.0d0))
then
1247 integer(kind=kint) :: ctrl
1248 character(len=HECMW_NAME_LEN) :: amp
1249 real(kind=kreal) ::
eps
1250 character(len=HECMW_NAME_LEN),
target :: grp_id_name(:)
1251 integer(kind=kint) :: mode
1252 integer(kind=kint) :: measure
1253 integer(kind=kint) :: state
1254 real(kind=kreal),
target :: thlow(:), thup(:)
1257 character(len=HECMW_NAME_LEN),
pointer :: element_id_p
1258 real(kind=kreal),
pointer :: thlow_p(:), thup_p(:)
1259 integer(kind=kint) :: rcode, n
1260 character(len=HECMW_NAME_LEN) :: data_fmt, s1
1268 if( mode == 1 )
then
1274 elseif( mode == 2 )
then
1279 elseif( mode == 3 )
then
1282 measure = measure + 1
1291 write(s1,*) hecmw_name_len
1293 element_id_p => grp_id_name(1)
1297 if( mode == 3 )
then
1298 write( data_fmt,
'(a,a,a)')
'S', trim(adjustl(s1)),
'RR'
1301 write( data_fmt,
'(a,a)')
'S', trim(adjustl(s1))
int fstr_ctrl_get_param_ex(int *ctrl, const char *param_name, const char *value_list, int *necessity, char *type, void *val)
int fstr_ctrl_get_data_array_ex(int *ctrl, const char *format,...)
int fstr_ctrl_get_data_ex(int *ctrl, int *line_no, const char *format,...)
This module contains fstr control file data obtaining functions.
integer(kind=kint) function fstr_ctrl_get_element_activation(ctrl, amp, eps, grp_id_name, mode, measure, state, thlow, thup)
Read in !ELEMENT_ACTIVATION.
integer(kind=kint) function fstr_ctrl_get_contactparam(ctrl, contactparam)
Read in !CONTACT_PARAM !
integer(kind=kint) function fstr_ctrl_get_solution(ctrl, type, nlgeom)
Read in !SOLUTION.
integer(kind=kint) function fstr_ctrl_get_contact_if(ctrl, n, contact_if)
Read in contact interference.
integer(kind=kint) function fstr_ctrl_get_couple(ctrl, fg_type, fg_first, fg_window, surf_id, surf_id_len)
Read in !COUPLE.
integer(kind=kint) function fstr_get_autoinc(ctrl, aincparam)
Read in !AUTOINC_PARAM !
integer(kind=kint) function fstr_ctrl_get_amplitude(ctrl, nline, name, type_def, type_time, type_val, n, val, table)
Read in !AMPLITUDE.
logical function fstr_ctrl_get_outitem(ctrl, hecMESH, outinfo)
Read in !OUTPUT_RES & !OUTPUT_VIS.
integer(kind=kint) function fstr_ctrl_get_elemopt(ctrl, elemopt361)
Read in !ELEMOPT.
integer(kind=kint) function fstr_ctrl_get_timepoints(ctrl, tp)
Read in !TIME_POINTS.
integer(kind=kint) function fstr_ctrl_get_solver(ctrl, method, precond, nset, iterlog, timelog, steplog, nier, iterpremax, nrest, nBFGS, scaling, dumptype, dumpexit, usejad, ncolor_in, mpc_method, estcond, method2, recyclepre, solver_opt, contact_elim, resid, sigma_diag, omega, thresh, filter, solver_ropt, loglevel, matvec_impl, precond_impl, recompute_residual)
Read in !SOLVER.
integer(kind=kint) function fstr_ctrl_get_echo(ctrl, echo)
Read in !ECHO.
logical function fstr_ctrl_get_contact(ctrl, n, contact, np, tp, ntol, ttol, ctAlgo, cpname, smoothing)
Read in contact definition.
integer(kind=kint) function fstr_ctrl_get_nonlinear_solver(ctrl, method)
Read in !NONLINEAR_SOLVER.
logical function fstr_ctrl_get_istep(ctrl, hecMESH, steps, tpname, apname, cpname)
Read in !STEP and !ISTEP.
integer(kind=kint) function fstr_ctrl_get_convergparam(ctrl, cnvparam)
Read in !CONVERG_PARAM.
integer(kind=kint) function fstr_ctrl_get_contactalgo(ctrl, algo, augiter, conefollow, eps_fric_band)
Read in !CONTACT.
integer(kind=kint) function fstr_ctrl_get_mpc(ctrl, penalty)
Read in !MPC.
integer function fstr_ctrl_get_section(ctrl, hecMESH, sections)
Read in !SECTION.
integer(kind=kint) function fstr_ctrl_get_write(ctrl, res, visual, femap)
Read in !WRITE.
integer(kind=kint) function fstr_ctrl_get_step(ctrl, amp, iproc)
Read in !STEP.
logical function fstr_ctrl_get_embed(ctrl, n, embed, cpname, smoothing)
Read in contact definition.
This module contains auxiliary functions in calculation setup.
subroutine amp_name_to_id(hecMESH, header_name, aname, id)
This module contains auxiliary functions in calculation setup.
logical function hecmw_str2index(s, x)
This module defines common data and basic structures for analysis.
integer(kind=kint) myrank
PARALLEL EXECUTION.
integer(kind=kint), parameter imsg
integer(kind=kint), parameter kstdynamic
integer(kind=kint), parameter kon
integer(kind=kint), parameter kyes
CONSTANTS general.
integer(kind=kint), parameter ilog
FILE HANDLER.
integer(kind=kint), parameter kststatic
integer(kind=kint), parameter kststaticeigen
integer(kind=kint), parameter kno
This module manages step information.
This module manages step information.
integer, parameter stepampstep
integer, parameter stepvisco
integer, parameter stepfixedinc
integer, parameter stepampramp
integer, parameter stepautoinc
integer, parameter stepstatic
This module manages timepoint information.
Data for section control.
Step control such as active boundary condition, convergent condition etc.
Time points storage for output etc.