20 subroutine pc_strupr( s )
23 integer :: i, n, a, da
26 da = iachar(
'a') - iachar(
'A')
29 if( a > iachar(
'Z'))
then
34 end subroutine pc_strupr
39 integer(kind=kint) :: ctrl
40 integer(kind=kint) :: type
44 integer(kind=kint) :: ipt
45 character(len=80) :: s
49 s =
'ELEMCHECK,STATIC,EIGEN,HEAT,DYNAMIC,NLSTATIC,STATICEIGEN,NZPROF '
68 integer(kind=kint) :: ctrl
69 integer(kind=kint) :: method
72 integer(kind=kint) :: ipt
73 character(len=80) :: s
77 s =
'NEWTON,QUASINEWTON '
84 iterpremax, nrest, nBFGS, scaling, &
85 dumptype, dumpexit, usejad, ncolor_in, mpc_method, estcond, method2, recyclepre, &
86 solver_opt, contact_elim, &
87 resid, singma_diag, sigma, thresh, filter, solver_ropt, loglevel )
88 integer(kind=kint) :: ctrl
89 integer(kind=kint) :: method
90 integer(kind=kint) :: precond
91 integer(kind=kint) :: nset
92 integer(kind=kint) :: iterlog
93 integer(kind=kint) :: timelog
94 integer(kind=kint) :: steplog
95 integer(kind=kint) :: nier
96 integer(kind=kint) :: iterpremax
97 integer(kind=kint) :: nrest
98 integer(kind=kint) :: nbfgs
99 integer(kind=kint) :: scaling
100 integer(kind=kint) :: dumptype
101 integer(kind=kint) :: dumpexit
102 integer(kind=kint) :: usejad
103 integer(kind=kint) :: ncolor_in
104 integer(kind=kint) :: mpc_method
105 integer(kind=kint) :: estcond
106 integer(kind=kint) :: method2
107 integer(kind=kint) :: recyclepre
108 integer(kind=kint) :: solver_opt(10)
109 integer(kind=kint) :: contact_elim
110 real(kind=kreal) :: resid
111 real(kind=kreal) :: singma_diag
112 real(kind=kreal) :: sigma
113 real(kind=kreal) :: thresh
114 real(kind=kreal) :: filter
115 real(kind=kreal) :: solver_ropt(10)
116 integer(kind=kint) :: loglevel
119 character(100) :: mlist =
'1,2,3,4,101,CG,BiCGSTAB,GMRES,GPBiCG,GMRESR,GMRESREN,CR,DIRECT,DIRECTmkl,DIRECTlag,MUMPS,MKL '
121 character(24) :: dlist =
'0,1,2,3,NONE,MM,CSR,BSR '
123 integer(kind=kint) :: number_number = 5
124 integer(kind=kint) :: indirect_number = 7
125 integer(kind=kint) :: iter, time, sclg, dmpt, dmpx, usjd, step
140 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
159 if( method > number_number )
then
160 method = method - number_number
161 if( method > indirect_number )
then
163 method = method - indirect_number + 100
164 if( method == 103 ) method = 101
165 if( method == 105 ) method = 102
168 if( method2 > number_number )
then
169 method2 = method2 - number_number
170 if( method2 > indirect_number )
then
172 method2 = method2 - indirect_number + 100
177 if( dumptype >= 4 )
then
178 dumptype = dumptype - 4
183 if(
fstr_ctrl_get_data_ex( ctrl, 1,
'iiiiii ', nier, iterpremax, nrest, ncolor_in, recyclepre, nbfgs )/= 0)
return
186 if( precond == 20 .or. precond == 21)
then
188 else if( precond == 5 )
then
190 solver_opt(1), solver_opt(2), solver_opt(3), solver_opt(4), solver_opt(5), &
191 solver_opt(6), solver_opt(7), solver_opt(8), solver_opt(9), solver_opt(10) )/= 0)
return
192 else if( precond == 22 )
then
211 solver_ropt(1:10) = 0.0d0
213 solver_opt(1), solver_opt(2), solver_opt(3), solver_opt(4), solver_opt(5), &
214 solver_opt(6), solver_opt(7), solver_opt(8), solver_opt(9), solver_opt(10) )/= 0) solver_opt(1:10) = 0
216 solver_ropt(1), solver_ropt(2), solver_ropt(3), solver_ropt(4), solver_ropt(5), &
217 solver_ropt(6), solver_ropt(7), solver_ropt(8) )/= 0) solver_ropt(1:10) = 0.0d0
218 else if( method == 101 )
then
236 integer(kind=kint) :: ctrl
237 character(len=HECMW_NAME_LEN) :: amp
238 integer(kind=kint) :: iproc
241 integer(kind=kint) :: ipt = 0
242 integer(kind=kint) :: ip = 0
250 if( ipt == 2 .or. ip == 1 ) iproc = 1
260 integer(kind=kint),
intent(in) :: ctrl
261 type (hecmwst_local_mesh),
intent(in) :: hecmesh
263 character(len=*),
intent(out) :: tpname
264 character(len=*),
intent(out) :: apname
266 character(len=HECMW_NAME_LEN) :: data_fmt,ss, data_fmt1
267 character(len=HECMW_NAME_LEN) :: amp
268 character(len=HECMW_NAME_LEN) :: header_name
269 integer(kind=kint) :: bcid
270 integer(kind=kint) :: i, n, sn, ierr
271 integer(kind=kint) :: bc_n, load_n, contact_n, elemact_n
272 real(kind=kreal) :: fn, f1, f2, f3
276 write(ss,*) hecmw_name_len
277 write( data_fmt,
'(a,a,a)')
'S', trim(adjustl(ss)),
'I '
278 write( data_fmt1,
'(a,a,a)')
'S', trim(adjustl(ss)),
'rrr '
285 steps%initdt = 1.d0/steps%num_substep
295 if( len( trim(amp) )>0 )
then
302 if(
fstr_ctrl_get_param_ex( ctrl,
'AMPLITUDE ',
'RAMP,STEP ', 0,
'P', steps%amp_default_type )/= 0)
return
316 read( ss, * , iostat=ierr ) fn
320 steps%elapsetime = f1
322 steps%mindt = min(f2,steps%initdt)
325 steps%num_substep = max(int((f1+0.999999999d0*fn)/fn),steps%num_substep)
336 if( trim(header_name) ==
'BOUNDARY' )
then
338 else if( trim(header_name) ==
'LOAD' )
then
340 else if( trim(header_name) ==
'CONTACT' )
then
341 contact_n = contact_n+1
342 else if( trim(header_name) ==
'ELEMACT' )
then
343 elemact_n = elemact_n+1
344 else if( trim(header_name) ==
'TEMPERATURE' )
then
349 if( bc_n>0 )
allocate( steps%Boundary(bc_n) )
350 if( load_n>0 )
allocate( steps%Load(load_n) )
351 if( contact_n>0 )
allocate( steps%Contact(contact_n) )
352 if( elemact_n>0 )
allocate( steps%ElemActivation(elemact_n) )
360 if( trim(header_name) ==
'BOUNDARY' )
then
362 steps%Boundary(bc_n) = bcid
363 else if( trim(header_name) ==
'LOAD' )
then
365 steps%Load(load_n) = bcid
366 else if( trim(header_name) ==
'CONTACT' )
then
367 contact_n = contact_n+1
368 steps%Contact(contact_n) = bcid
369 else if( trim(header_name) ==
'ELEMACT' )
then
370 elemact_n = elemact_n+1
371 steps%ElemActivation(elemact_n) = bcid
381 integer(kind=kint),
intent(in) :: ctrl
382 type (hecmwst_local_mesh),
intent(inout) :: hecmesh
383 type (
tsection),
pointer,
intent(inout) :: sections(:)
385 integer(kind=kint) :: j, k, sect_id, ori_id, elemopt
386 integer(kind=kint),
save :: cache = 1
387 character(len=HECMW_NAME_LEN) :: sect_orien
388 character(19) :: form341list =
'FI,SELECTIVE_ESNS '
389 character(19) :: form361list =
'FI,BBAR,IC,FBAR,UP '
394 if( sect_id > hecmesh%section%n_sect )
return
398 if( elemopt > 0 ) sections(sect_id)%elemopt341 = elemopt
402 if( elemopt > 0 ) sections(sect_id)%elemopt361 = elemopt
405 hecmesh%section%sect_orien_ID(sect_id) = -1
408 if(
associated(g_localcoordsys) )
then
410 k =
size(g_localcoordsys)
413 if( sect_orien == g_localcoordsys(cache)%sys_name )
then
414 hecmesh%section%sect_orien_ID(sect_id) = cache
422 if( sect_orien == g_localcoordsys(j)%sys_name )
then
423 hecmesh%section%sect_orien_ID(sect_id) = j
437 integer(kind=kint) :: ctrl
438 integer(kind=kint) :: res
439 integer(kind=kint) :: visual
440 integer(kind=kint) :: femap
456 integer(kind=kint) :: ctrl
457 integer(kind=kint) :: echo
468 integer(kind=kint) :: ctrl
469 integer(kind=kint) :: fg_type
470 integer(kind=kint) :: fg_first
471 integer(kind=kint) :: fg_window
472 character(len=HECMW_NAME_LEN) :: surf_id(:)
473 integer(kind=kint) :: surf_id_len
476 character(len=HECMW_NAME_LEN) :: data_fmt,ss
477 write(ss,*) surf_id_len
478 write(data_fmt,
'(a,a,a)')
'S',trim(adjustl(ss)),
' '
481 if(
fstr_ctrl_get_param_ex( ctrl,
'TYPE ',
'1,2,3,4,5,6 ', 0,
'I', fg_type )/= 0)
return
492 integer(kind=kint),
intent(in) :: ctrl
493 real(kind=kreal),
intent(out) :: penalty
497 if( penalty <= 1.0 )
then
499 write(
imsg,*)
"Warging : !MPC : too small penalty: ", penalty
500 write(*,*)
"Warging : !MPC : too small penalty: ", penalty
510 integer(kind=kint),
intent(in) :: ctrl
511 type (hecmwst_local_mesh),
intent(in) :: hecmesh
514 integer(kind=kint) :: rcode, ipos
515 integer(kind=kint) :: n, i, j
516 character(len=HECMW_NAME_LEN) :: data_fmt, ss
517 character(len=HECMW_NAME_LEN),
allocatable :: header_name(:), onoff(:), vtype(:)
519 write( ss, * ) hecmw_name_len
520 write( data_fmt,
'(a,a,a,a,a)')
'S', trim(adjustl(ss)),
'S', trim(adjustl(ss)),
' '
525 outinfo%grp_id_name =
"ALL"
533 allocate( header_name(n), onoff(n), vtype(n) )
534 header_name(:) =
""; vtype(:) =
""; onoff(:) =
""
539 do j = 1, outinfo%num_items
540 if( trim(header_name(i)) == outinfo%keyWord(j) )
then
541 outinfo%on(j) = .true.
542 if( trim(onoff(i)) ==
'OFF' ) outinfo%on(j) = .false.
543 if( len( trim(vtype(i)) )>0 )
then
545 outinfo%vtype(j) = ipos
546 else if( trim(vtype(i)) ==
"SCALER" )
then
547 outinfo%vtype(j) = -1
548 else if( trim(vtype(i)) ==
"VECTOR" )
then
549 outinfo%vtype(j) = -2
550 else if( trim(vtype(i)) ==
"SYMTENSOR" )
then
551 outinfo%vtype(j) = -3
552 else if( trim(vtype(i)) ==
"TENSOR" )
then
553 outinfo%vtype(j) = -4
560 deallocate( header_name, onoff, vtype )
567 integer(kind=kint) :: ctrl
568 integer(kind=kint) :: algo
569 integer(kind=kint) :: augiter
572 integer(kind=kint) :: rcode
573 character(len=80) :: s
574 s =
'SLAGRANGE,ALAGRANGE '
576 if( rcode /= 0 )
then
587 integer(kind=kint),
intent(in) :: ctrl
588 integer(kind=kint),
intent(in) :: n
589 integer(kind=kint),
intent(in) :: ctalgo
590 type(tcontact),
intent(out) :: contact(n)
591 real(kind=kreal),
intent(out) :: np
592 real(kind=kreal),
intent(out) :: tp
593 real(kind=kreal),
intent(out) :: ntol
594 real(kind=kreal),
intent(out) :: ttol
595 character(len=*),
intent(out) :: cpname
596 integer(kind=kint),
intent(out) :: smoothing
598 integer :: rcode, ipt
599 character(len=30) :: s1 =
'TIED,GLUED,SSLID,FSLID '
600 character(len=HECMW_NAME_LEN) :: data_fmt,ss
601 character(len=HECMW_NAME_LEN) :: cp_name(n)
602 real(kind=kreal) :: fcoeff(n),tpenalty(n)
603 real(kind=kreal) :: damp_alpha, damp_gact
605 write(ss,*) hecmw_name_len
609 contact(1)%algtype = contactsslid
611 if( contact(1)%algtype==contactglued ) contact(1)%algtype=contactfslid
613 smoothing = kcsnone + 1
615 smoothing = smoothing - 1
617 contact(rcode)%ctype = contact(1)%ctype
618 contact(rcode)%group = contact(1)%group
619 contact(rcode)%algtype = contact(1)%algtype
624 if( contact(1)%algtype==contactsslid .or. contact(1)%algtype==contactfslid )
then
625 write( data_fmt,
'(a,a,a)')
'S', trim(adjustl(ss)),
'Rr '
629 contact(rcode)%pair_name = cp_name(rcode)
630 contact(rcode)%fcoeff = fcoeff(rcode)
631 contact(rcode)%nPenalty = 5.0d0
632 contact(rcode)%tPenalty = tpenalty(rcode)
633 contact(rcode)%refStiff = 1.d0
634 contact(rcode)%damp_alpha = 0.0d0
635 contact(rcode)%damp_gact = 0.0d0
637 else if( contact(1)%algtype==contacttied )
then
638 write( data_fmt,
'(a,a)')
'S', trim(adjustl(ss))
642 contact(rcode)%pair_name = cp_name(rcode)
643 contact(rcode)%nPenalty = 5.0d0
644 contact(rcode)%fcoeff = 0.d0
645 contact(rcode)%tPenalty = 1.d0
646 contact(rcode)%damp_alpha = 0.0d0
647 contact(rcode)%damp_gact = 0.0d0
652 ntol = 0.d0; ttol=0.d0
653 damp_alpha = 0.0d0; damp_gact = 0.0d0
666 contact(rcode)%nPenalty = np
671 contact(rcode)%tPenalty = tp
674 if( damp_alpha > 0.0d0 )
then
676 contact(rcode)%damp_alpha = damp_alpha
679 if( damp_gact > 0.0d0 )
then
681 contact(rcode)%damp_gact = damp_gact
691 integer(kind=kint),
intent(in) :: ctrl
692 integer(kind=kint),
intent(in) :: n
693 type(tcontact),
intent(out) :: embed(n)
694 character(len=*),
intent(out) :: cpname
695 integer(kind=kint),
intent(out) :: smoothing
697 integer :: rcode, ipt
698 character(len=30) :: s1 =
'TIED,GLUED,SSLID,FSLID '
699 character(len=HECMW_NAME_LEN) :: data_fmt,ss
700 character(len=HECMW_NAME_LEN) :: cp_name(n)
701 real(kind=kreal) :: fcoeff(n),tpenalty(n)
705 write(ss,*) hecmw_name_len
709 embed(1)%algtype = contacttied
711 smoothing = kcsnone + 1
713 smoothing = smoothing - 1
715 embed(rcode)%ctype = embed(1)%ctype
716 embed(rcode)%group = embed(1)%group
717 embed(rcode)%algtype = embed(1)%algtype
720 write( data_fmt,
'(a,a)')
'S', trim(adjustl(ss))
724 embed(rcode)%pair_name = cp_name(rcode)
735 integer(kind=kint) :: ctrl
736 type( tcontactparam ) :: contactparam
739 integer(kind=kint) :: rcode
740 character(len=HECMW_NAME_LEN) :: data_fmt
741 character(len=128) :: msg
742 real(kind=kreal) :: clearance, clr_same_elem, clr_difflpos, clr_cal_norm
743 real(kind=kreal) :: distclr_init, distclr_free, distclr_nocheck, tensile_force
744 real(kind=kreal) :: box_exp_rate
749 contactparam%name =
''
755 & clearance, clr_same_elem, clr_difflpos, clr_cal_norm )
756 if( rcode /= 0 )
return
757 contactparam%CLEARANCE = clearance
758 contactparam%CLR_SAME_ELEM = clr_same_elem
759 contactparam%CLR_DIFFLPOS = clr_difflpos
760 contactparam%CLR_CAL_NORM = clr_cal_norm
765 & distclr_init, distclr_free, distclr_nocheck, tensile_force, box_exp_rate )
766 if( rcode /= 0 )
return
767 contactparam%DISTCLR_INIT = distclr_init
768 contactparam%DISTCLR_FREE = distclr_free
769 contactparam%DISTCLR_NOCHECK = distclr_nocheck
770 contactparam%TENSILE_FORCE = tensile_force
771 contactparam%BOX_EXP_RATE = box_exp_rate
775 if( clearance<0.d0 .OR. 1.d0<clearance )
THEN
776 write(msg,*)
'fstr control file error : !CONTACT_PARAM : CLEARANCE must be 0 < CLEARANCE < 1.'
777 else if( clr_same_elem<0.d0 .or. 1.d0<clr_same_elem )
then
778 write(msg,*)
'fstr control file error : !CONTACT_PARAM : CLR_SAME_ELEM must be 0 < CLR_SAME_ELEM < 1.'
779 else if( clr_difflpos<0.d0 .or. 1.d0<clr_difflpos )
then
780 write(msg,*)
'fstr control file error : !CONTACT_PARAM : CLR_DIFFLPOS must be 0 < CLR_DIFFLPOS < 1.'
781 else if( clr_cal_norm<0.d0 .or. 1.d0<clr_cal_norm )
then
782 write(msg,*)
'fstr control file error : !CONTACT_PARAM : CLR_CAL_NORM must be 0 < CLR_CAL_NORM < 1.'
783 else if( distclr_init<0.d0 .or. 1.d0<distclr_init )
then
784 write(msg,*)
'fstr control file error : !CONTACT_PARAM : DISTCLR_INIT must be 0 < DISTCLR_INIT < 1.'
785 else if( distclr_free<-1.d0 .or. 1.d0<distclr_free )
then
786 write(msg,*)
'fstr control file error : !CONTACT_PARAM : DISTCLR_FREE must be -1 < DISTCLR_FREE < 1.'
787 else if( distclr_nocheck<0.5d0 )
then
788 write(msg,*)
'fstr control file error : !CONTACT_PARAM : DISTCLR_NOCHECK must be >= 0.5.'
789 else if( tensile_force>=0.d0 )
then
790 write(msg,*)
'fstr control file error : !CONTACT_PARAM : TENSILE_FORCE must be < 0.'
791 else if( box_exp_rate<=1.d0 .or. 2.0<box_exp_rate )
then
792 write(msg,*)
'fstr control file error : !CONTACT_PARAM : BOX_EXP_RATE must be 1 < BOX_EXP_RATE <= 2.'
796 if( rcode /= 0 )
then
798 write(
ilog,*) trim(msg)
808 integer(kind=kint),
intent(in) :: ctrl
809 integer(kind=kint),
intent(in) :: n
811 type(tcontactinterference),
intent(out) :: contact_if(n)
814 character(len=30) :: s1 =
'SLAVE,MASTER '
815 character(len=HECMW_NAME_LEN) :: data_fmt,ss
816 character(len=HECMW_NAME_LEN) :: cp_name(n)
817 real(kind=kreal) :: init_pos(n), end_pos(n)
821 write(ss,*) hecmw_name_len
824 write( data_fmt,
'(a,a,a)')
'S', trim(adjustl(ss)),
'rr '
825 init_pos = 0.d0; end_pos = 0.d0
828 contact_if(i)%if_type = contact_if(1)%if_type
829 contact_if(i)%etime = contact_if(1)%etime
831 contact_if(i)%cp_name = cp_name(i)
832 contact_if(i)%initial_pos = - init_pos(i)
833 contact_if(i)%end_pos = - end_pos(i)
834 if(contact_if(i)%if_type == c_if_slave .and. init_pos(i) /= 0.d0) contact_if(i)%initial_pos = 0.d0
842 integer(kind=kint) :: ctrl
843 integer(kind=kint) :: elemopt361
846 character(72) :: o361list =
'IC,Bbar '
848 integer(kind=kint) :: o361
852 o361 = elemopt361 + 1
857 elemopt361 = o361 - 1
867 integer(kind=kint) :: ctrl
868 type( tparamautoinc ) :: aincparam
871 integer(kind=kint) :: rcode
872 character(len=HECMW_NAME_LEN) :: data_fmt
873 character(len=128) :: msg
874 integer(kind=kint) :: bound_s(10), bound_l(10)
875 real(kind=kreal) :: rs, rl
889 & bound_s(1), bound_s(2), bound_s(3), aincparam%NRtimes_s )
890 if( rcode /= 0 )
return
891 aincparam%ainc_Rs = rs
892 aincparam%NRbound_s(knstmaxit) = bound_s(1)
893 aincparam%NRbound_s(knstsumit) = bound_s(2)
894 aincparam%NRbound_s(knstciter) = bound_s(3)
899 & bound_l(1), bound_l(2), bound_l(3), aincparam%NRtimes_l )
900 if( rcode /= 0 )
return
901 aincparam%ainc_Rl = rl
902 aincparam%NRbound_l(knstmaxit) = bound_l(1)
903 aincparam%NRbound_l(knstsumit) = bound_l(2)
904 aincparam%NRbound_l(knstciter) = bound_l(3)
909 & aincparam%ainc_Rc, aincparam%CBbound )
910 if( rcode /= 0 )
return
914 if( rs<0.d0 .or. rs>1.d0 )
then
915 write(msg,*)
'fstr control file error : !AUTOINC_PARAM : decrease ratio Rs must 0 < Rs < 1.'
916 else if( any(bound_s<0) )
then
917 write(msg,*)
'fstr control file error : !AUTOINC_PARAM : decrease NR bound must >= 0.'
918 else if( aincparam%NRtimes_s < 1 )
then
919 write(msg,*)
'fstr control file error : !AUTOINC_PARAM : # of times to decrease must > 0.'
920 else if( rl<1.d0 )
then
921 write(msg,*)
'fstr control file error : !AUTOINC_PARAM : increase ratio Rl must > 1.'
922 else if( any(bound_l<0) )
then
923 write(msg,*)
'fstr control file error : !AUTOINC_PARAM : increase NR bound must >= 0.'
924 else if( aincparam%NRtimes_l < 1 )
then
925 write(msg,*)
'fstr control file error : !AUTOINC_PARAM : # of times to increase must > 0.'
926 elseif( aincparam%ainc_Rc<0.d0 .or. aincparam%ainc_Rc>1.d0 )
then
927 write(msg,*)
'fstr control file error : !AUTOINC_PARAM : cutback decrease ratio Rc must 0 < Rc < 1.'
928 else if( aincparam%CBbound < 1 )
then
929 write(msg,*)
'fstr control file error : !AUTOINC_PARAM : maximum # of cutback times must > 0.'
933 if( rcode /= 0 )
then
935 write(
ilog,*) trim(msg)
944 integer(kind=kint) :: ctrl
948 integer(kind=kint) :: i, n, rcode
950 real(kind=kreal) :: stime,
etime, interval
962 stime = 0.d0;
etime = 0.d0; interval = 1.d0
964 tp%n_points = int((
etime-stime)/interval)+1
965 allocate(tp%points(tp%n_points))
967 tp%points(i) = stime + dble(i-1)*interval
973 allocate(tp%points(tp%n_points))
976 if( tp%points(i) < tp%points(i+1) ) cycle
977 write(*,*)
'Error in reading !TIME_POINT: time points must be given in ascending order.'
988 integer(kind=kint),
intent(in) :: ctrl
989 integer(kind=kint),
intent(in) :: nline
990 character(len=HECMW_NAME_LEN),
intent(out) :: name
991 integer(kind=kint),
intent(out) :: type_def
992 integer(kind=kint),
intent(out) :: type_time
993 integer(kind=kint),
intent(out) :: type_val
994 integer(kind=kint),
intent(out) :: n
995 real(kind=kreal),
pointer :: val(:)
996 real(kind=kreal),
pointer :: table(:)
999 integer(kind=kint) :: t_def, t_time, t_val
1000 integer(kind=kint) :: i, j
1001 real(kind=kreal) :: r(4), t(4)
1016 type_def = hecmw_amp_typedef_tabular
1018 write(*,*)
'Error in reading !AMPLITUDE: invalid value for parameter DEFINITION.'
1020 if( t_time==1 )
then
1021 type_time = hecmw_amp_typetime_step
1023 write(*,*)
'Error in reading !AMPLITUDE: invalid value for parameter TIME.'
1026 type_val = hecmw_amp_typeval_relative
1027 elseif( t_val==2 )
then
1028 type_val = hecmw_amp_typeval_absolute
1030 write(*,*)
'Error in reading !AMPLITUDE: invalid value for parameter VALUE.'
1035 r(:)=huge(0.0d0); t(:)=huge(0.0d0)
1036 if(
fstr_ctrl_get_data_ex( ctrl, 1,
'RRrrrrrr ', r(1), t(1), r(2), t(2), r(3), t(3), r(4), t(4) ) /= 0)
return
1041 if (r(j) < huge(0.0d0) .and. t(j) < huge(0.0d0))
then
1057 integer(kind=kint) :: ctrl
1058 character(len=HECMW_NAME_LEN) :: amp
1059 real(kind=kreal) ::
eps
1060 character(len=HECMW_NAME_LEN),
target :: grp_id_name(:)
1061 integer(kind=kint) :: mode
1062 integer(kind=kint) :: measure
1063 integer(kind=kint) :: state
1064 real(kind=kreal),
target :: thlow(:), thup(:)
1067 character(len=HECMW_NAME_LEN),
pointer :: element_id_p
1068 real(kind=kreal),
pointer :: thlow_p(:), thup_p(:)
1069 integer(kind=kint) :: rcode, n
1070 character(len=HECMW_NAME_LEN) :: data_fmt, s1
1078 if( mode == 1 )
then
1084 elseif( mode == 2 )
then
1089 elseif( mode == 3 )
then
1092 measure = measure + 1
1101 write(s1,*) hecmw_name_len
1103 element_id_p => grp_id_name(1)
1107 if( mode == 3 )
then
1108 write( data_fmt,
'(a,a,a)')
'S', trim(adjustl(s1)),
'RR'
1111 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_contactalgo(ctrl, algo, augiter)
Read in !CONTACT.
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_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_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, singma_diag, sigma, thresh, filter, solver_ropt, loglevel)
Read in !SOLVER.
integer(kind=kint) function fstr_ctrl_get_nonlinear_solver(ctrl, method)
Read in !NONLINEAR_SOLVER.
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.
logical function fstr_ctrl_get_istep(ctrl, hecMESH, steps, tpname, apname)
Read in !STEP and !ISTEP.
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.
logical function fstr_str2index(s, x)
subroutine amp_name_to_id(hecMESH, header_name, aname, id)
subroutine fstr_strupr(s)
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 ilog
FILE HANDLER.
integer(kind=kint), parameter kststatic
integer(kind=kint), parameter kststaticeigen
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.