31 type(hecmwst_local_mesh),
pointer :: mesh
46 subroutine fstr_setup( cntl_filename, hecMESH, fstrPARAM, &
47 fstrSOLID, fstrEIG, fstrHEAT, fstrDYNAMIC, fstrCPL, fstrFREQ )
49 character(len=HECMW_FILENAME_LEN) :: cntl_filename, input_filename
50 type(hecmwst_local_mesh),
target :: hecMESH
59 integer(kind=kint) :: ctrl, ctrl_list(20), ictrl
62 integer,
parameter :: MAXOUTFILE = 10
63 double precision,
parameter :: dpi = 3.14159265358979323846d0
65 integer(kind=kint) :: version, result, visual, femap, n_totlyr
66 integer(kind=kint) :: rcode, n, i, cid, nout, ierror, cparam_id
67 character(len=HECMW_NAME_LEN) :: header_name
68 real(kind=kreal) :: ee, pp, rho, alpha, thick, alpha_over_mu
69 real(kind=kreal) :: beam_radius, &
70 beam_angle1, beam_angle2, beam_angle3,&
71 beam_angle4, beam_angle5, beam_angle6
75 character(len=HECMW_FILENAME_LEN) :: logfileNAME, mName, mName2, mName3
78 integer(kind=kint) :: c_solution, c_solver, c_nlsolver, c_step, c_echo, c_amplitude
79 integer(kind=kint) :: c_static, c_boundary, c_cload, c_dload, c_temperature, c_reftemp, c_spring, c_elemact
80 integer(kind=kint) :: c_heat, c_fixtemp, c_cflux, c_dflux, c_sflux, c_film, c_sfilm, c_radiate, c_sradiate
81 integer(kind=kint) :: c_eigen, c_contact, c_contactparam, c_embed, c_contact_if
82 integer(kind=kint) :: c_dynamic, c_velocity, c_acceleration
83 integer(kind=kint) :: c_fload, c_facc, c_eigenread
84 integer(kind=kint) :: c_couple, c_material
85 integer(kind=kint) :: c_mpc, c_weldline, c_initial
86 integer(kind=kint) :: c_istep, c_localcoord, c_section
87 integer(kind=kint) :: c_elemopt, c_aincparam, c_timepoints, c_cnvparam
88 integer(kind=kint) :: c_output, islog
89 integer(kind=kint) :: k
90 integer(kind=kint) :: ss_nslav, ss_nmas_vis, ss_nmas_glob, ss_bad
91 integer(kind=kint) :: cache = 1
93 write( logfilename,
'(i5,''.log'')' )
myrank
107 c_solution = 0; c_solver = 0; c_nlsolver = 0; c_step = 0; c_output = 0; c_echo = 0; c_amplitude = 0
108 c_static = 0; c_boundary = 0; c_cload = 0; c_dload = 0; c_temperature = 0; c_reftemp = 0; c_spring = 0;
110 c_heat = 0; c_fixtemp = 0; c_cflux = 0; c_dflux = 0; c_sflux = 0
111 c_film = 0; c_sfilm = 0; c_radiate= 0; c_sradiate = 0
112 c_eigen = 0; c_contact = 0; c_contactparam = 0; c_embed = 0; c_contact_if = 0
113 c_dynamic = 0; c_velocity = 0; c_acceleration = 0
114 c_couple = 0; c_material = 0; c_section =0
115 c_mpc = 0; c_weldline = 0; c_initial = 0
116 c_istep = 0; c_localcoord = 0
117 c_fload = 0; c_facc = 0; c_eigenread = 0
119 c_aincparam= 0; c_timepoints = 0; c_cnvparam = 0
125 write(*,*)
'### Error: Cannot open FSTR control file : ', cntl_filename
126 write(
ilog,*)
'### Error: Cannot open FSTR control file : ', cntl_filename
127 stop hecmw_exit_input
133 if( header_name ==
'!VERSION' )
then
135 else if( header_name ==
'!SOLUTION' )
then
136 c_solution = c_solution + 1
138 else if( header_name ==
'!NONLINEAR_SOLVER' )
then
139 c_nlsolver = c_nlsolver + 1
141 else if( header_name ==
'!SOLVER' )
then
142 c_solver = c_solver + 1
144 else if( header_name ==
'!ISTEP' )
then
145 c_istep = c_istep + 1
146 else if( header_name ==
'!STEP' )
then
147 if( version==0 )
then
151 c_istep = c_istep + 1
153 else if( header_name ==
'!WRITE' )
then
155 if( visual==1 ) p%PARAM%fg_visual= 1
156 if( result==1 ) p%PARAM%fg_result = 1
157 c_output = c_output+1
158 else if( header_name ==
'!ECHO' )
then
161 else if( header_name ==
'!RESTART' )
then
163 fstrsolid%restart_nout= nout
164 fstrdynamic%restart_nout= nout
165 fstrheat%restart_nout= nout
166 else if( header_name ==
'!ORIENTATION' )
then
167 c_localcoord = c_localcoord + 1
168 else if( header_name ==
'!AUTOINC_PARAM' )
then
169 c_aincparam = c_aincparam + 1
170 else if( header_name ==
'!CONVERG_PARAM' )
then
171 c_cnvparam = c_cnvparam + 1
172 else if( header_name ==
'!TIME_POINTS' )
then
173 c_timepoints = c_timepoints + 1
174 else if( header_name ==
'!OUTPUT_SSTYPE' )
then
176 else if( header_name ==
'!INITIAL_CONDITION' )
then
177 c_initial = c_initial + 1
178 else if( header_name ==
'!AMPLITUDE' )
then
179 c_amplitude = c_amplitude + 1
181 else if( header_name ==
'!ELEMENT_ACTIVATION' )
then
182 c_elemact = c_elemact + 1
187 else if( header_name ==
'!STATIC' )
then
188 c_static = c_static + 1
190 else if( header_name ==
'!BOUNDARY' )
then
191 c_boundary = c_boundary + 1
193 else if( header_name ==
'!CLOAD' )
then
194 c_cload = c_cload + 1
197 else if( header_name ==
'!DLOAD' )
then
198 c_dload = c_dload + 1
200 else if( header_name ==
'!CONTACT_ALGO' )
then
202 else if( header_name ==
'!CONTACT' )
then
204 c_contact = c_contact + n
205 else if( header_name ==
'!EMBED' )
then
207 c_embed = c_embed + n
208 else if( header_name ==
'!CONTACT_PARAM' )
then
209 c_contactparam = c_contactparam + 1
210 else if( header_name ==
'!CONTACT_INTERFERENCE' )
then
212 c_contact_if = c_contact_if + n
213 else if( header_name ==
'!MATERIAL' )
then
214 c_material = c_material + 1
215 else if( header_name ==
'!TEMPERATURE' )
then
216 c_temperature = c_temperature + 1
218 else if( header_name ==
'!SPRING' )
then
219 c_spring = c_spring + 1
221 else if( header_name ==
'!REFTEMP' )
then
222 c_reftemp = c_reftemp + 1
227 else if( header_name ==
'!HEAT' )
then
229 else if( header_name ==
'!FIXTEMP' )
then
230 c_fixtemp = c_fixtemp + 1
232 else if( header_name ==
'!CFLUX' )
then
233 c_cflux = c_cflux + 1
235 else if( header_name ==
'!DFLUX' )
then
236 c_dflux = c_dflux + 1
238 else if( header_name ==
'!SFLUX' )
then
239 c_sflux = c_sflux + 1
241 else if( header_name ==
'!FILM' )
then
244 else if( header_name ==
'!SFILM' )
then
245 c_sfilm = c_sfilm + 1
247 else if( header_name ==
'!RADIATE' )
then
248 c_radiate = c_radiate + 1
250 else if( header_name ==
'!SRADIATE' )
then
251 c_sradiate = c_sradiate + 1
253 else if( header_name ==
'!WELD_LINE' )
then
254 c_weldline = c_weldline + 1
258 else if( header_name ==
'!EIGEN' )
then
259 c_eigen = c_eigen + 1
264 else if( header_name ==
'!DYNAMIC' )
then
265 c_dynamic = c_dynamic + 1
267 else if( header_name ==
'!VELOCITY' )
then
268 c_velocity = c_velocity + 1
270 else if( header_name ==
'!ACCELERATION' )
then
271 c_acceleration = c_acceleration + 1
273 else if( header_name ==
'!FLOAD' )
then
274 c_fload = c_fload + 1
276 else if( header_name ==
'!FACCELERATION' )
then
280 else if( header_name ==
'!EIGENREAD' )
then
281 c_eigenread = c_eigenread + 1
286 else if( header_name ==
'!COUPLE' )
then
287 c_couple = c_couple + 1
292 else if( header_name ==
'!MPC' )
then
298 else if( header_name ==
'!INCLUDE' )
then
299 ctrl_list(ictrl) = ctrl
304 write(*,*)
'### Error: Cannot open FSTR control file : ', input_filename
305 write(
ilog,*)
'### Error: Cannot open FSTR control file : ', input_filename
306 stop hecmw_exit_input
313 else if( header_name ==
'!END' )
then
324 ctrl = ctrl_list(ictrl)
331 fstrsolid%n_contacts = c_contact
332 if( c_contact>0 )
then
333 allocate( fstrsolid%contacts( c_contact ) )
338 fstrsolid%n_embeds = c_embed
339 if( c_embed>0 )
allocate( fstrsolid%embeds( c_embed ) )
340 if( c_weldline>0 )
allocate( fstrheat%weldline( c_weldline ) )
343 allocate( fstrsolid%step_ctrl( c_istep ) )
347 fstrsolid%step_ctrl(i)%num_substep = fstrdynamic%n_step
348 fstrsolid%step_ctrl(i)%initdt = fstrdynamic%t_delta
349 fstrsolid%step_ctrl(i)%elapsetime = dble(fstrdynamic%n_step) * fstrdynamic%t_delta
350 fstrsolid%step_ctrl(i)%mindt = fstrdynamic%t_delta
351 fstrsolid%step_ctrl(i)%maxdt = fstrdynamic%t_delta
355 if( c_localcoord>0 )
allocate( g_localcoordsys(c_localcoord) )
356 allocate( fstrparam%ainc(0:c_aincparam) )
360 allocate( fstrparam%cnvparam(0:c_cnvparam) )
364 if( c_timepoints>0 )
allocate( fstrparam%timepoints(c_timepoints) )
365 allocate( fstrparam%contactparam(0:c_contactparam) )
366 do i=0,c_contactparam
369 if( c_contact_if>0 )
then
370 allocate( fstrparam%contact_if( c_contact_if ) )
376 p%SOLID%is_33shell = 0
377 p%SOLID%is_33beam = 0
379 do i=1,hecmesh%n_elem_type
380 n = hecmesh%elem_type_item(i)
381 if (n == 781 .or. n == 761)
then
382 p%SOLID%is_33shell = 1
383 elseif (n == 641)
then
384 p%SOLID%is_33beam = 1
389 if( hecmesh%material%n_mat>n ) n= hecmesh%material%n_mat
390 if( n==0 ) stop
"material property not defined!"
391 allocate( fstrsolid%materials( n ) )
397 allocate( fstrsolid%sections(hecmesh%section%n_sect) )
398 do i=1,hecmesh%section%n_sect
401 if( p%PARAM%nlgeom )
then
404 fstrsolid%sections(i)%elemopt361 =
kel361ic
406 else if( p%PARAM%solution_type==
ksteigen )
then
407 fstrsolid%sections(i)%elemopt361 =
kel361ic
411 fstrsolid%sections(i)%elemopt361 =
kel361fi
413 fstrsolid%sections(i)%elemopt341 =
kel341fi
416 fstrsolid%sections(i)%thickness = 1.0d0
419 if( hecmesh%section%n_sect >0 )
then
420 do i=1,hecmesh%section%n_sect
421 if( hecmesh%section%sect_type(i) == 4 ) cycle
422 cid = hecmesh%section%sect_mat_ID_item(i)
423 if( cid>n ) stop
"Error in material property definition!"
424 if( fstrparam%nlgeom .or. fstrparam%solution_type==
kststaticeigen ) &
425 fstrsolid%materials(cid)%nlgeom_flag = 1
428 n_totlyr,alpha_over_mu, &
429 beam_radius,beam_angle1,beam_angle2,beam_angle3, &
430 beam_angle4,beam_angle5,beam_angle6)
431 fstrsolid%sections(i)%thickness = thick
432 fstrsolid%materials(cid)%name = hecmesh%material%mat_name(cid)
433 fstrsolid%materials(cid)%variables(
m_youngs)=ee
434 fstrsolid%materials(cid)%variables(
m_poisson)=pp
435 fstrsolid%materials(cid)%variables(
m_density)=rho
436 fstrsolid%materials(cid)%variables(
m_expansion)=alpha
438 fstrsolid%materials(cid)%variables(
m_beam_radius)=beam_radius
439 fstrsolid%materials(cid)%variables(
m_beam_angle1)=beam_angle1
440 fstrsolid%materials(cid)%variables(
m_beam_angle2)=beam_angle2
441 fstrsolid%materials(cid)%variables(
m_beam_angle3)=beam_angle3
442 fstrsolid%materials(cid)%variables(
m_beam_angle4)=beam_angle4
443 fstrsolid%materials(cid)%variables(
m_beam_angle5)=beam_angle5
444 fstrsolid%materials(cid)%variables(
m_beam_angle6)=beam_angle6
445 fstrsolid%materials(cid)%mtype =
elastic
446 if( hecmesh%section%sect_type(i) == 2 )
then
447 fstrsolid%materials(cid)%totallyr = n_totlyr
448 fstrsolid%materials(cid)%shell_var => shmat
453 allocate( fstrsolid%output_ctrl( 4 ) )
455 fstrsolid%output_ctrl( 1 )%filename = trim(logfilename)
456 fstrsolid%output_ctrl( 1 )%filenum =
ilog
480 fstrsolid%elemopt361 = 0
481 fstrsolid%AutoINC_stat = 0
482 fstrsolid%CutBack_stat = 0
483 fstrsolid%NRstat_i(:) = 0
484 fstrsolid%NRstat_r(:) = 0.d0
489 if( header_name ==
'!ORIENTATION' )
then
490 c_localcoord = c_localcoord + 1
492 write(*,*)
'### Error: Fail in read in ORIENTATION definition : ', c_localcoord
493 write(
ilog,*)
'### Error: Fail in read in ORIENTATION definition : ', c_localcoord
494 stop hecmw_exit_input
498 elseif( header_name ==
'!CONTACT' )
then
501 ,ee, pp, rho, alpha, p%PARAM%contact_algo, mname, k ) )
then
502 write(*,*)
'### Error: Fail in read in contact condition : ', c_contact
503 write(
ilog,*)
'### Error: Fail in read in contact condition : ', c_contact
504 stop hecmw_exit_input
507 do i=1,
size(fstrparam%contactparam)-1
508 if(
hecmw_streqr( fstrparam%contactparam(i)%name, mname ) )
then
513 if( rho>0.d0 ) cgn = rho
514 if( alpha>0.d0 ) cgt = alpha
516 fstrsolid%contacts(c_contact+i)%smoothing = k
517 if( .not. fstr_contact_check( fstrsolid%contacts(c_contact+i), p%MESH ) )
then
518 write(*,*)
'### Error: Inconsistence in contact and surface definition : ' , i+c_contact
519 write(
ilog,*)
'### Error: Inconsistence in contact and surface definition : ', i+c_contact
520 stop hecmw_exit_model
522 isok = fstr_contact_init( fstrsolid%contacts(c_contact+i), p%MESH, fstrparam%contactparam(cparam_id))
525 fstrsolid%contacts(c_contact+i)%symmetric = .not. p%PARAM%fric_cone_follow
526 fstrsolid%contacts(c_contact+i)%eps_fric_band = p%PARAM%eps_fric_band
528 if( fstrsolid%contacts(c_contact+i)%method == contacts2s )
then
537 if( p%PARAM%solution_type /=
kststatic .and. &
539 & p%PARAM%solution_type /=
kstnzprof )
then
540 write(*,*)
'### Error: MORTAR=YES is supported only in static analysis : ', i+c_contact
541 write(
ilog,*)
'### Error: MORTAR=YES is supported only in static analysis : ', i+c_contact
542 write(*,*)
' Specify !SOLUTION, TYPE=STATIC or TYPE=NLSTATIC.'
543 write(
ilog,*)
' Specify !SOLUTION, TYPE=STATIC or TYPE=NLSTATIC.'
544 stop hecmw_exit_model
551 if( fstrsolid%restart_nout < 0 )
then
552 write(*,*)
'### Error: MORTAR=YES does not support restart : ', i+c_contact
553 write(
ilog,*)
'### Error: MORTAR=YES does not support restart : ', i+c_contact
554 write(*,*)
' The contact state of mortar pairs is not saved in the restart file.'
555 write(
ilog,*)
' The contact state of mortar pairs is not saved in the restart file.'
556 stop hecmw_exit_model
559 write(*,*)
'### Error: MORTAR=YES is not supported with !CONTACT_ALGO TYPE=SLAGRANGE : ', i+c_contact
560 write(
ilog,*)
'### Error: MORTAR=YES is not supported with !CONTACT_ALGO TYPE=SLAGRANGE : ', i+c_contact
561 stop hecmw_exit_model
563 if( fstrsolid%contacts(c_contact+i)%surf_id1_sgrp <= 0 )
then
564 write(*,*)
'### Error: MORTAR=YES requires !CONTACT_PAIR TYPE=SURF-SURF : ', i+c_contact
565 write(
ilog,*)
'### Error: MORTAR=YES requires !CONTACT_PAIR TYPE=SURF-SURF : ', i+c_contact
566 stop hecmw_exit_model
572 if( fstrsolid%contacts(c_contact+i)%algtype /= contactfslid )
then
573 write(*,*)
'### Error: MORTAR=YES is supported only with INTERACTION=FSLID : ', i+c_contact
574 write(
ilog,*)
'### Error: MORTAR=YES is supported only with INTERACTION=FSLID : ', i+c_contact
575 write(*,*)
' Specify INTERACTION=FSLID on !CONTACT (the default is SSLID).'
576 write(
ilog,*)
' Specify INTERACTION=FSLID on !CONTACT (the default is SSLID).'
577 stop hecmw_exit_model
579 if( fstrsolid%contacts(c_contact+i)%smoothing /= kcsnone )
then
580 write(*,*)
'### Error: MORTAR=YES is not supported with SMOOTHING= : ', i+c_contact
581 write(
ilog,*)
'### Error: MORTAR=YES is not supported with SMOOTHING= : ', i+c_contact
582 stop hecmw_exit_model
589 if( hecmw_comm_get_size() > 1 )
then
590 ss_nslav =
size( fstrsolid%contacts(c_contact+i)%slave_surf )
591 ss_nmas_vis =
size( fstrsolid%contacts(c_contact+i)%master )
592 ss_nmas_glob = fstrsolid%contacts(c_contact+i)%n_master_owned
593 call hecmw_allreduce_i1( p%MESH, ss_nmas_glob, hecmw_sum )
595 if( ss_nslav > 0 .and. ss_nmas_vis /= ss_nmas_glob )
then
600 call hecmw_allreduce_i1( p%MESH, ss_bad, hecmw_max )
601 if( ss_bad /= 0 )
then
602 write(*,*)
'### Error: MORTAR=YES contact pair has incomplete master ghost : ', i+c_contact
603 write(
ilog,*)
'### Error: MORTAR=YES contact pair has incomplete master ghost : ', i+c_contact
604 write(*,*)
' A rank owning slave faces cannot see the full master surface.'
605 write(
ilog,*)
' A rank owning slave faces cannot see the full master surface.'
606 write(*,*)
' Re-partition the mesh with !PARTITION, CONTACT_OWNER=SLAVE,'
607 write(
ilog,*)
' Re-partition the mesh with !PARTITION, CONTACT_OWNER=SLAVE,'
608 write(*,*)
' or run serial (np=1).'
609 write(
ilog,*)
' or run serial (np=1).'
610 stop hecmw_exit_model
615 c_contact = c_contact+n
618 elseif( header_name ==
'!EMBED' )
then
620 if( .not.
fstr_ctrl_get_embed( ctrl, n, fstrsolid%embeds(c_embed+1:c_embed+n), mname, k ) )
then
621 write(*,*)
'### Error: Fail in read in embed condition : ', c_embed
622 write(
ilog,*)
'### Error: Fail in read in embed condition : ', c_embed
623 stop hecmw_exit_input
626 do i=1,
size(fstrparam%contactparam)-1
627 if(
hecmw_streqr( fstrparam%contactparam(i)%name, mname ) )
then
632 fstrsolid%embeds(c_embed+i)%smoothing = k
633 if( .not. fstr_contact_check( fstrsolid%embeds(c_embed+i), p%MESH ) )
then
634 write(*,*)
'### Error: Inconsistence in contact and surface definition : ' , i+c_embed
635 write(
ilog,*)
'### Error: Inconsistence in contact and surface definition : ', i+c_embed
636 stop hecmw_exit_model
638 isok = fstr_embed_init( fstrsolid%embeds(c_embed+i), p%MESH, fstrparam%contactparam(cparam_id))
643 else if( header_name ==
'!ISTEP' )
then
645 if( .not.
fstr_ctrl_get_istep( ctrl, hecmesh, fstrsolid%step_ctrl(c_istep), mname, mname2, mname3 ) )
then
646 write(*,*)
'### Error: Fail in read in step definition : ' , c_istep
647 write(
ilog,*)
'### Error: Fail in read in step definition : ', c_istep
648 stop hecmw_exit_input
651 if(
associated(fstrparam%timepoints) )
then
652 do i=1,
size(fstrparam%timepoints)
653 if(
hecmw_streqr( fstrparam%timepoints(i)%name, mname ) )
then
654 fstrsolid%step_ctrl(c_istep)%timepoint_id = i;
exit
658 if(
associated(fstrparam%ainc) )
then
659 do i=1,
size(fstrparam%ainc)
660 if(
hecmw_streqr( fstrparam%ainc(i)%name, mname2 ) )
then
661 fstrsolid%step_ctrl(c_istep)%AincParam_id = i;
exit
665 else if( header_name ==
'!STEP' .and. version>=1 )
then
667 if( .not.
fstr_ctrl_get_istep( ctrl, hecmesh, fstrsolid%step_ctrl(c_istep), mname, mname2, mname3 ) )
then
668 write(*,*)
'### Error: Fail in read in step definition : ' , c_istep
669 write(
ilog,*)
'### Error: Fail in read in step definition : ', c_istep
670 stop hecmw_exit_input
677 & fstrsolid%step_ctrl(c_istep)%inc_type ==
stepfixedinc )
then
678 fstrsolid%step_ctrl(c_istep)%initdt = fstrdynamic%t_delta
679 fstrsolid%step_ctrl(c_istep)%mindt = fstrdynamic%t_delta
680 fstrsolid%step_ctrl(c_istep)%maxdt = fstrdynamic%t_delta
682 if(
associated(fstrparam%timepoints) )
then
683 do i=1,
size(fstrparam%timepoints)
684 if(
hecmw_streqr( fstrparam%timepoints(i)%name, mname ) )
then
685 fstrsolid%step_ctrl(c_istep)%timepoint_id = i;
exit
689 if(
associated(fstrparam%ainc) )
then
690 do i=1,
size(fstrparam%ainc)-1
691 if(
hecmw_streqr( fstrparam%ainc(i)%name, mname2 ) )
then
692 fstrsolid%step_ctrl(c_istep)%AincParam_id = i;
exit
697 else if( header_name ==
'!HEAT' )
then
701 else if( header_name ==
'!WELD_LINE' )
then
702 fstrheat%WL_tot = fstrheat%WL_tot+1
704 write(*,*)
'### Error: Fail in read in Weld Line definition : ' , fstrheat%WL_tot
705 write(
ilog,*)
'### Error: Fail in read in Weld Line definition : ', fstrheat%WL_tot
706 stop hecmw_exit_input
709 else if( header_name ==
'!INITIAL_CONDITION' .or. header_name ==
'!INITIAL CONDITION' )
then
710 c_initial = c_initial+1
712 write(*,*)
'### Error: Fail in read in INITIAL CONDITION definition : ' ,c_initial
713 write(
ilog,*)
'### Error: Fail in read in INITIAL CONDITION definition : ', c_initial
714 stop hecmw_exit_input
717 else if( header_name ==
'!SECTION' )
then
718 c_section = c_section+1
720 write(*,*)
'### Error: Fail in read in SECTION definition : ' , c_section
721 write(
ilog,*)
'### Error: Fail in read in SECTION definition : ', c_section
722 stop hecmw_exit_input
725 else if( header_name ==
'!ELEMOPT' )
then
726 c_elemopt = c_elemopt+1
728 write(*,*)
'### Error: Fail in read in ELEMOPT definition : ' , c_elemopt
729 write(
ilog,*)
'### Error: Fail in read in ELEMOPT definition : ', c_elemopt
730 stop hecmw_exit_input
734 else if( header_name ==
'!MATERIAL' )
then
735 c_material = c_material+1
737 write(*,*)
'### Error: Fail in read in material definition : ' , c_material
738 write(
ilog,*)
'### Error: Fail in read in material definition : ', c_material
739 stop hecmw_exit_input
742 if(cache < hecmesh%material%n_mat)
then
743 if(
hecmw_streqr( hecmesh%material%mat_name(cache), mname ))
then
749 do i=1,hecmesh%material%n_mat
750 if(
hecmw_streqr( hecmesh%material%mat_name(i), mname ) )
then
758 write(*,*)
'### Error: Fail in read in material definition : ' , c_material
759 write(
ilog,*)
'### Error: Fail in read in material definition : ', c_material
760 stop hecmw_exit_input
762 fstrsolid%materials(cid)%name = hecmesh%material%mat_name(cid)
763 if(c_material>hecmesh%material%n_mat)
call initmaterial( fstrsolid%materials(cid) )
765 else if( header_name ==
'!ELASTIC' )
then
766 if( c_material >0 )
then
768 fstrsolid%materials(cid)%mtype, &
769 fstrsolid%materials(cid)%nlgeom_flag, &
770 fstrsolid%materials(cid)%variables, &
771 fstrsolid%materials(cid)%dict)/=0 )
then
772 write(*,*)
'### Error: Fail in read in elasticity definition : ' , cid
773 write(
ilog,*)
'### Error: Fail in read in elasticity definition : ', cid
774 stop hecmw_exit_input
777 else if( header_name ==
'!PLASTIC' )
then
780 fstrsolid%materials(cid)%mtype, &
781 fstrsolid%materials(cid)%nlgeom_flag, &
782 fstrsolid%materials(cid)%variables, &
783 fstrsolid%materials(cid)%table, &
784 fstrsolid%materials(cid)%dict)/=0 )
then
785 write(*,*)
'### Error: Fail in read in plasticity definition : ' , cid
786 write(
ilog,*)
'### Error: Fail in read in plasticity definition : ', cid
787 stop hecmw_exit_input
790 else if( header_name ==
'!HYPERELASTIC' )
then
793 fstrsolid%materials(cid)%mtype, &
794 fstrsolid%materials(cid)%nlgeom_flag, &
795 fstrsolid%materials(cid)%variables )/=0 )
then
796 write(*,*)
'### Error: Fail in read in elasticity definition : ' , cid
797 write(
ilog,*)
'### Error: Fail in read in elasticity definition : ', cid
798 stop hecmw_exit_input
801 else if( header_name ==
'!VISCOELASTIC' )
then
804 fstrsolid%materials(cid)%mtype, &
805 fstrsolid%materials(cid)%nlgeom_flag, &
806 fstrsolid%materials(cid)%dict)/=0 )
then
807 write(*,*)
'### Error: Fail in read in plasticity definition : ' , cid
808 write(
ilog,*)
'### Error: Fail in read in plasticity definition : ', cid
809 stop hecmw_exit_input
812 else if( header_name ==
'!TRS' )
then
815 write(*,*)
'### WARNING: TRS can only be defined for viscoelastic material! It is ignored! '
816 write(
ilog,*)
'### WARNING: TRS can only be defined for viscoelastic material! It is ignored! '
818 if(
fstr_ctrl_get_trs( ctrl, fstrsolid%materials(cid)%mtype, fstrsolid%materials(cid)%variables)/=0 )
then
819 write(*,*)
'### Error: Fail in read in TRS definition : ' , cid
820 write(
ilog,*)
'### Error: Fail in read in TRS definition : ', cid
821 stop hecmw_exit_input
825 else if( header_name ==
'!CREEP' )
then
828 fstrsolid%materials(cid)%mtype, &
829 fstrsolid%materials(cid)%nlgeom_flag, &
830 fstrsolid%materials(cid)%dict)/=0 )
then
831 write(*,*)
'### Error: Fail in read in plasticity definition : ' , cid
832 write(
ilog,*)
'### Error: Fail in read in plasticity definition : ', cid
833 stop hecmw_exit_input
836 else if( header_name ==
'!DENSITY' )
then
839 write(*,*)
'### Error: Fail in read in density definition : ' , cid
840 write(
ilog,*)
'### Error: Fail in read in density definition : ', cid
841 stop hecmw_exit_input
844 else if( header_name ==
'!EXPANSION_COEF' .or. header_name ==
'!EXPANSION_COEFF' .or. &
845 header_name ==
'!EXPANSION')
then
848 fstrsolid%materials(cid)%dict)/=0 )
then
849 write(*,*)
'### Error: Fail in read in expansion coefficient definition : ' , cid
850 write(
ilog,*)
'### Error: Fail in read in expansion coefficient definition : ', cid
851 stop hecmw_exit_input
854 else if( header_name ==
'!DAMPING')
then
857 fstrsolid%materials(cid)%is_elem_Rayleigh_damping)/=0 )
then
858 write(*,*)
'### Error: Fail in read in damping definition : ' , cid
859 write(
ilog,*)
'### Error: Fail in read in damping definition : ', cid
860 stop hecmw_exit_input
863 else if( header_name ==
'!FLUID' )
then
864 if( c_material >0 )
then
866 fstrsolid%materials(cid)%mtype, &
867 fstrsolid%materials(cid)%nlgeom_flag, &
868 fstrsolid%materials(cid)%variables, &
869 fstrsolid%materials(cid)%dict)/=0 )
then
870 write(*,*)
'### Error: Fail in read in fluid definition : ' , cid
871 write(
ilog,*)
'### Error: Fail in read in fluid definition : ', cid
872 stop hecmw_exit_input
875 else if( header_name ==
'!SPRING_D' )
then
876 if( c_material >0 )
then
878 fstrsolid%materials(cid)%mtype, &
879 fstrsolid%materials(cid)%nlgeom_flag, &
880 fstrsolid%materials(cid)%variables_i, &
881 fstrsolid%materials(cid)%dict)/=0 )
then
882 write(*,*)
'### Error: Fail in read in spring_d definition : ' , cid
883 write(
ilog,*)
'### Error: Fail in read in spring_d definition : ', cid
884 stop hecmw_exit_input
887 else if( header_name ==
'!SPRING_A' )
then
888 if( c_material >0 )
then
890 fstrsolid%materials(cid)%mtype, &
891 fstrsolid%materials(cid)%nlgeom_flag, &
892 fstrsolid%materials(cid)%variables_i, &
893 fstrsolid%materials(cid)%dict)/=0 )
then
894 write(*,*)
'### Error: Fail in read in spring_a definition : ' , cid
895 write(
ilog,*)
'### Error: Fail in read in spring_a definition : ', cid
896 stop hecmw_exit_input
899 else if( header_name ==
'!DASHPOT_D' )
then
900 if( c_material >0 )
then
902 fstrsolid%materials(cid)%mtype, &
903 fstrsolid%materials(cid)%nlgeom_flag, &
904 fstrsolid%materials(cid)%variables_i, &
905 fstrsolid%materials(cid)%dict)/=0 )
then
906 write(*,*)
'### Error: Fail in read in spring_d definition : ' , cid
907 write(
ilog,*)
'### Error: Fail in read in spring_d definition : ', cid
908 stop hecmw_exit_input
911 else if( header_name ==
'!DASHPOT_A' )
then
912 if( c_material >0 )
then
914 fstrsolid%materials(cid)%mtype, &
915 fstrsolid%materials(cid)%nlgeom_flag, &
916 fstrsolid%materials(cid)%variables_i, &
917 fstrsolid%materials(cid)%dict)/=0 )
then
918 write(*,*)
'### Error: Fail in read in spring_a definition : ' , cid
919 write(
ilog,*)
'### Error: Fail in read in spring_a definition : ', cid
920 stop hecmw_exit_input
923 else if( header_name ==
'!USER_MATERIAL' )
then
926 fstrsolid%materials(cid)%nlgeom_flag, fstrsolid%materials(cid)%nfstatus, &
927 fstrsolid%materials(cid)%variables(101:) )/=0 )
then
928 write(*,*)
'### Error: Fail in read in user defined material : ' , cid
929 write(
ilog,*)
'### Error: Fail in read in user defined material : ', cid
930 stop hecmw_exit_input
936 else if( header_name ==
'!WRITE' )
then
938 if( islog == 1 )
then
940 outctrl%filename = trim(logfilename)
941 outctrl%filenum =
ilog
944 if( femap == 1 )
then
946 write( outctrl%filename,
'(a,i0,a)')
'utable.',
myrank,
'.dat'
947 outctrl%filenum =
iutb
949 open( unit=outctrl%filenum, file=outctrl%filename, status=
'REPLACE', iostat=ierror )
950 if( ierror /= 0 )
then
951 write(*,*)
'Warning: cannot open output file: ', trim(outctrl%filename)
953 fstrsolid%output_ctrl(c_output)%outinfo%grp_id = 1
955 if( result == 1 )
then
959 if( visual == 1 )
then
964 else if( header_name ==
'!OUTPUT_RES' )
then
967 write(*,*)
'### Error: Fail in read in node output definition : ' , c_output
968 write(
ilog,*)
'### Error: Fail in read in node output definition : ', c_output
969 stop hecmw_exit_input
971 if( fstrsolid%output_ctrl(c_output)%outinfo%grp_id_name /=
'ALL' )
then
973 do i=1,hecmesh%node_group%n_grp
974 if( fstrsolid%output_ctrl(c_output)%outinfo%grp_id_name == hecmesh%node_group%grp_name(i) )
then
975 fstrsolid%output_ctrl(c_output)%outinfo%grp_id = i;
exit
979 else if( header_name ==
'!OUTPUT_VIS' )
then
982 write(*,*)
'### Error: Fail in read in element output definition : ' , c_output
983 write(
ilog,*)
'### Error: Fail in read in element output definition : ', c_output
984 stop hecmw_exit_input
986 if( fstrsolid%output_ctrl(c_output)%outinfo%grp_id_name /=
'ALL' )
then
988 do i=1,hecmesh%node_group%n_grp
989 if( fstrsolid%output_ctrl(c_output)%outinfo%grp_id_name == hecmesh%node_group%grp_name(i) )
then
990 fstrsolid%output_ctrl(c_output)%outinfo%grp_id = i;
exit
994 else if( header_name ==
'!AUTOINC_PARAM' )
then
995 c_aincparam = c_aincparam + 1
997 write(*,*)
'### Error: Fail in read in AUTOINC_PARAM definition : ' , c_aincparam
998 write(
ilog,*)
'### Error: Fail in read in AUTOINC_PARAM definition : ', c_aincparam
999 stop hecmw_exit_input
1001 else if( header_name ==
'!CONVERG_PARAM' )
then
1002 c_cnvparam = c_cnvparam + 1
1004 write(*,*)
'### Error: Fail in read in CONVERG_PARAM definition : ' , c_cnvparam
1005 write(
ilog,*)
'### Error: Fail in read in CONVERG_PARAM definition : ', c_cnvparam
1006 stop hecmw_exit_input
1008 else if( header_name ==
'!TIME_POINTS' )
then
1009 c_timepoints = c_timepoints + 1
1011 write(*,*)
'### Error: Fail in read in TIME_POINTS definition : ' , c_timepoints
1012 write(
ilog,*)
'### Error: Fail in read in TIME_POINTS definition : ', c_timepoints
1013 stop hecmw_exit_input
1015 else if( header_name ==
'!CONTACT_PARAM' )
then
1016 c_contactparam = c_contactparam + 1
1018 write(*,*)
'### Error: Fail in read in CONTACT_PARAM definition : ' , c_contactparam
1019 write(
ilog,*)
'### Error: Fail in read in CONTACT_PARAM definition : ', c_contactparam
1020 stop hecmw_exit_input
1022 else if( header_name ==
'!CONTACT_INTERFERENCE' )
then
1025 write(*,*)
'### Error: Fail in read in CONTACT_INTERFERENCE definition : ' , c_contact_if
1026 write(
ilog,*)
'### Error: Fail in read in CONTACT_INTERFERENCE definition : ', c_contact_if
1027 stop hecmw_exit_input
1030 if( check_apply_contact_if(fstrparam%contact_if(c_contact_if+i), fstrsolid%contacts) /= 0)
then
1031 write(*,*)
'### Error:(INTERFERENCE) Inconsistence of contact_pair in CONTACTS: ' , i+c_contact_if
1032 write(
ilog,*)
'### Error:(INTERFERENCE) Inconsistence of contact_pair in CONTACTS: ', i+c_contact_if
1033 stop hecmw_exit_model
1036 c_contact_if = c_contact_if + n
1037 else if( header_name ==
'!ULOAD' )
then
1039 write(*,*)
'### Error: Fail in read in ULOAD definition : '
1040 write(
ilog,*)
'### Error: Fail in read in ULOAD definition : '
1041 stop hecmw_exit_input
1044 else if( header_name ==
'!INCLUDE' )
then
1045 ctrl_list(ictrl) = ctrl
1050 write(*,*)
'### Error: Cannot open FSTR control file : ', input_filename
1051 write(
ilog,*)
'### Error: Cannot open FSTR control file : ', input_filename
1052 stop hecmw_exit_input
1057 else if( header_name ==
'!END' )
then
1063 if( ictrl == 1 )
then
1068 ctrl = ctrl_list(ictrl)
1076 if( .not. p%PARAM%nlgeom )
then
1078 fstrsolid%materials(i)%nlgeom_flag = 0
1082 if( fstrsolid%TEMP_ngrp_tot > 0 .or. fstrsolid%TEMP_irres > 0 )
then
1083 allocate ( fstrsolid%temperature( hecmesh%n_node ) ,stat=ierror )
1084 if( ierror /= 0 )
then
1085 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, TEMPERATURE>'
1086 write(
idbg,*)
' rank = ',
myrank,
' ierror = ',ierror
1088 call hecmw_abort( hecmw_comm_get_comm())
1091 allocate ( fstrsolid%last_temp( hecmesh%n_node ) ,stat=ierror )
1092 if( ierror /= 0 )
then
1093 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, LAST_TEMP>'
1094 write(
idbg,*)
' rank = ',
myrank,
' ierror = ',ierror
1096 call hecmw_abort( hecmw_comm_get_comm())
1098 fstrsolid%last_temp = 0.d0
1099 allocate ( fstrsolid%temp_bak( hecmesh%n_node ) ,stat=ierror )
1100 if( ierror /= 0 )
then
1101 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, TEMP_BAK>'
1102 write(
idbg,*)
' rank = ',
myrank,
' ierror = ',ierror
1104 call hecmw_abort( hecmw_comm_get_comm())
1106 fstrsolid%temp_bak = 0.d0
1109 if(
associated(fstrsolid%step_ctrl) )
then
1110 fstrsolid%nstep_tot =
size(fstrsolid%step_ctrl)
1113 if( p%PARAM%solution_type==
kststatic .and. p%PARAM%nlgeom )
then
1114 write( *,* )
" ERROR: STEP not defined!"
1115 write(
idbg,* )
"ERROR: STEP not defined!"
1120 if(
myrank==0 )
write(*,*)
"Step control not defined! Using default step=1"
1121 fstrsolid%nstep_tot = 1
1122 allocate( fstrsolid%step_ctrl(1) )
1125 fstrsolid%step_ctrl(1)%num_substep = fstrdynamic%n_step
1126 fstrsolid%step_ctrl(1)%initdt = fstrdynamic%t_delta
1127 fstrsolid%step_ctrl(1)%elapsetime = dble(fstrdynamic%n_step) * fstrdynamic%t_delta
1128 fstrsolid%step_ctrl(1)%mindt = fstrdynamic%t_delta
1129 fstrsolid%step_ctrl(1)%maxdt = fstrdynamic%t_delta
1131 n = fstrsolid%BOUNDARY_ngrp_tot
1132 if( n>0 )
allocate( fstrsolid%step_ctrl(1)%Boundary(n) )
1134 fstrsolid%step_ctrl(1)%Boundary(i) = fstrsolid%BOUNDARY_ngrp_GRPID(i)
1136 n = fstrsolid%CLOAD_ngrp_tot + fstrsolid%DLOAD_ngrp_tot + fstrsolid%TEMP_ngrp_tot + fstrsolid%SPRING_ngrp_tot
1137 if( n>0 )
allocate( fstrsolid%step_ctrl(1)%Load(n) )
1139 do i = 1, fstrsolid%CLOAD_ngrp_tot
1141 fstrsolid%step_ctrl(1)%Load(n) = fstrsolid%CLOAD_ngrp_GRPID(i)
1143 do i = 1, fstrsolid%DLOAD_ngrp_tot
1145 fstrsolid%step_ctrl(1)%Load(n) = fstrsolid%DLOAD_ngrp_GRPID(i)
1147 do i = 1, fstrsolid%TEMP_ngrp_tot
1149 fstrsolid%step_ctrl(1)%Load(n) = fstrsolid%TEMP_ngrp_GRPID(i)
1151 do i = 1, fstrsolid%SPRING_ngrp_tot
1153 fstrsolid%step_ctrl(1)%Load(n) = fstrsolid%SPRING_ngrp_GRPID(i)
1155 n = fstrsolid%elemact%ELEMACT_egrp_tot
1156 if( n>0 )
allocate( fstrsolid%step_ctrl(1)%ElemActivation(n) )
1158 fstrsolid%step_ctrl(1)%ElemActivation(i) = fstrsolid%elemact%ELEMACT_egrp_GRPID(i)
1170 if( p%PARAM%solution_type ==
kstheat)
then
1171 p%PARAM%fg_irres = fstrsolid%output_ctrl(3)%frequency
1172 p%PARAM%fg_iwres = fstrsolid%output_ctrl(4)%frequency
1173 p%HEAT%elemact = p%SOLID%elemact
1177 do i=1,hecmesh%section%n_sect
1178 cid = hecmesh%section%sect_mat_ID_item(i)
1179 n = fstrsolid%materials(cid)%totallyr
1180 if (n > n_totlyr)
then
1184 p%SOLID%max_lyr = n_totlyr
1192 type(hecmwst_local_mesh),
intent(in) :: hecMESH
1194 integer(kind=kint) :: i, isect, mtype
1196 do i = 1, hecmesh%n_elem
1197 if( hecmesh%elem_type(i) /= 361 ) cycle
1198 isect = hecmesh%section_ID(i)
1199 if( fstrsolid%sections(isect)%elemopt361 /=
kel361up ) cycle
1200 if( .not.
associated(fstrsolid%elements(i)%gausses) ) cycle
1201 mtype = fstrsolid%elements(i)%gausses(1)%pMaterial%mtype
1202 if( .not.iselastoplastic(mtype) .and. .not.iscreep(mtype) ) cycle
1203 write(*,*)
'###ERROR### : Elastoplastic and creep materials are not supported by FORM361=UP'
1204 write(
ilog,*)
'###ERROR### : Elastoplastic and creep materials are not supported by FORM361=UP'
1205 call hecmw_abort(hecmw_comm_get_comm())
1211 type(hecmwst_local_mesh),
intent(in) :: hecMESH
1213 integer(kind=kint) :: i
1215 if( hecmesh%n_dof /= 6 )
return
1216 if( .not.any(fstrsolid%output_ctrl(3)%outinfo%on(9:10)) )
return
1217 do i=1,hecmesh%n_elem
1219 write(*,*)
'###ERROR### : ISTRAIN/ISTRESS require shell thickness-point output support; element type = ', &
1220 hecmesh%elem_type(i)
1221 call hecmw_abort(hecmw_comm_get_comm())
1228 use,
intrinsic :: ieee_arithmetic, only: ieee_is_finite
1229 type(hecmwst_local_mesh),
intent(in) :: hecMESH
1232 type(tmaterial),
pointer :: material
1233 integer(kind=kint) :: i, nn, ierr, isect, index, ilayer
1234 real(kind=kreal) :: elastic(2)
1236 character(len=160) :: message
1238 do i = 1, hecmesh%n_elem
1239 if( hecmesh%elem_type(i) /= 741 ) cycle
1240 if( .not.
associated(fstrsolid%elements(i)%gausses) ) cycle
1241 material => fstrsolid%elements(i)%gausses(1)%pMaterial
1242 if( .not.iselastoplastic(material%mtype) ) cycle
1243 nn = hecmesh%elem_node_index(i)-hecmesh%elem_node_index(i-1)
1246 if( ierr /= 0 )
then
1248 else if( .not.fstr_uses_plane_stress_j2_shell(741, nn, material) )
then
1249 message =
'Elastoplastic MITC4 shells require INFINITESIMAL material kinematics'
1250 else if( fstrparam%solution_type /=
kststatic .or. .not.fstrparam%nlgeom )
then
1251 message =
'Elastoplastic MITC4 shells require !SOLUTION, TYPE=STATIC, NONLINEAR'
1252 else if( fstrsolid%TEMP_ngrp_tot > 0 .or. fstrsolid%TEMP_irres > 0 )
then
1253 message =
'Temperature loading is not supported in models with elastoplastic MITC4 shells'
1255 if( len_trim(message) == 0 .and.
associated(material%shell_var) )
then
1257 call fetch_tabledata(mc_isoelastic, material%dict, elastic, missing)
1258 do ilayer = 1, material%totallyr
1259 if( .not.ieee_is_finite(material%shell_var(ilayer)%ee) .or. &
1260 .not.ieee_is_finite(material%shell_var(ilayer)%pp) )
then
1261 message =
'Invalid elastic properties in J2 shell layer'
1264 if( abs(material%shell_var(ilayer)%ee-elastic(1)) > 1.0d-12*elastic(1) .or. &
1265 abs(material%shell_var(ilayer)%pp-elastic(2)) > 1.0d-12 )
then
1266 message =
'J2 shell layers must share the !ELASTIC Young modulus and Poisson ratio'
1271 if( len_trim(message) == 0 )
then
1272 isect = hecmesh%section_ID(i)
1273 index = hecmesh%section%sect_I_index(isect-1)
1274 if( hecmesh%section%sect_I_index(isect)-index /= 1 )
then
1275 message =
'Elastoplastic MITC4 shells require a SHELL section with 2 thickness integration points'
1277 message =
'Elastoplastic MITC4 shells require 2 thickness integration points in !SECTION'
1280 if( len_trim(message) == 0 ) cycle
1281 write(*,*)
'###ERROR### : ', trim(message)
1282 write(
ilog,*)
'###ERROR### : ', trim(message)
1283 call hecmw_abort(hecmw_comm_get_comm())
1291 type(hecmwst_local_mesh),
target :: hecMESH
1296 fstrsolid%BOUNDARY_ngrp_tot = 0
1297 fstrsolid%BOUNDARY_ngrp_rot = 0
1298 fstrsolid%CLOAD_ngrp_tot = 0
1299 fstrsolid%CLOAD_ngrp_rot = 0
1300 fstrsolid%DLOAD_ngrp_tot = 0
1301 fstrsolid%DLOAD_follow = 1
1302 fstrsolid%TEMP_ngrp_tot = 0
1303 fstrsolid%SPRING_ngrp_tot = 0
1304 fstrsolid%TEMP_irres = 0
1305 fstrsolid%TEMP_tstep = 1
1306 fstrsolid%TEMP_interval = 1
1307 fstrsolid%TEMP_rtype = 1
1308 fstrsolid%TEMP_factor = 1.d0
1309 fstrsolid%VELOCITY_ngrp_tot = 0
1310 fstrsolid%VELOCITY_ngrp_rot = 0
1311 fstrsolid%ACCELERATION_ngrp_tot = 0
1312 fstrsolid%COUPLE_ngrp_tot = 0
1314 fstrsolid%restart_nout= 0
1315 fstrsolid%is_smoothing_active = .false.
1316 fstrsolid%has_finite_rotation_kinematics = .false.
1317 fstrsolid%finite_rotation_state_ready = .false.
1326 type(hecmwst_local_mesh),
target :: hecMESH
1329 integer :: ndof, ntotal, ierror
1332 ntotal=ndof*hecmesh%n_node
1333 fstrsolid%has_finite_rotation_kinematics = &
1335 fstrsolid%finite_rotation_state_ready = .false.
1337 allocate ( fstrsolid%GL( ntotal ) ,stat=ierror )
1338 if( ierror /= 0 )
then
1339 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, GL>'
1340 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1342 call hecmw_abort( hecmw_comm_get_comm())
1344 allocate ( fstrsolid%GL0( ntotal ) ,stat=ierror )
1345 if( ierror /= 0 )
then
1346 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, GL0>'
1347 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1349 call hecmw_abort( hecmw_comm_get_comm())
1351 allocate ( fstrsolid%EFORCE( ntotal ) ,stat=ierror )
1352 if( ierror /= 0 )
then
1353 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, EFORCE>'
1354 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1356 call hecmw_abort( hecmw_comm_get_comm())
1365 allocate ( fstrsolid%unode( ntotal ) ,stat=ierror )
1366 if( ierror /= 0 )
then
1367 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, unode>'
1368 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1370 call hecmw_abort( hecmw_comm_get_comm())
1372 allocate ( fstrsolid%unode_bak( ntotal ) ,stat=ierror )
1373 if( ierror /= 0 )
then
1374 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, unode>'
1375 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1377 call hecmw_abort( hecmw_comm_get_comm())
1379 allocate ( fstrsolid%dunode( ntotal ) ,stat=ierror )
1380 if( ierror /= 0 )
then
1381 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, dunode>'
1382 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1384 call hecmw_abort( hecmw_comm_get_comm())
1386 allocate ( fstrsolid%ddunode( ntotal ) ,stat=ierror )
1387 if( ierror /= 0 )
then
1388 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, ddunode>'
1389 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1391 call hecmw_abort( hecmw_comm_get_comm())
1393 if( fstrsolid%has_finite_rotation_kinematics )
then
1394 allocate ( fstrsolid%shell_node_mode( hecmesh%n_node ) ,stat=ierror )
1395 if( ierror /= 0 )
then
1396 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, shell_node_mode>'
1397 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1399 call hecmw_abort( hecmw_comm_get_comm())
1402 allocate ( fstrsolid%shell_rot_state( hecmesh%n_node ) ,stat=ierror )
1403 if( ierror /= 0 )
then
1404 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, shell_rot_state>'
1405 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1407 call hecmw_abort( hecmw_comm_get_comm())
1409 allocate ( fstrsolid%shell_ref_triad( 9*hecmesh%n_node ) ,stat=ierror )
1410 if( ierror /= 0 )
then
1411 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, shell_ref_triad>'
1412 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1414 call hecmw_abort( hecmw_comm_get_comm())
1416 allocate ( fstrsolid%shell_triad( 9*hecmesh%n_node ) ,stat=ierror )
1417 if( ierror /= 0 )
then
1418 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, shell_triad>'
1419 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1421 call hecmw_abort( hecmw_comm_get_comm())
1423 allocate ( fstrsolid%shell_triad_bak( 9*hecmesh%n_node ) ,stat=ierror )
1424 if( ierror /= 0 )
then
1425 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, shell_triad_bak>'
1426 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1428 call hecmw_abort( hecmw_comm_get_comm())
1430 allocate ( fstrsolid%shell_dtriad( 9*hecmesh%n_node ) ,stat=ierror )
1431 if( ierror /= 0 )
then
1432 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, shell_dtriad>'
1433 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1435 call hecmw_abort( hecmw_comm_get_comm())
1437 allocate ( fstrsolid%shell_drill( hecmesh%n_node ) ,stat=ierror )
1438 if( ierror /= 0 )
then
1439 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, shell_drill>'
1440 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1442 call hecmw_abort( hecmw_comm_get_comm())
1444 allocate ( fstrsolid%shell_drill_bak( hecmesh%n_node ) ,stat=ierror )
1445 if( ierror /= 0 )
then
1446 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, shell_drill_bak>'
1447 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1449 call hecmw_abort( hecmw_comm_get_comm())
1451 allocate ( fstrsolid%shell_ddrill( hecmesh%n_node ) ,stat=ierror )
1452 if( ierror /= 0 )
then
1453 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, shell_ddrill>'
1454 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1456 call hecmw_abort( hecmw_comm_get_comm())
1459 allocate ( fstrsolid%QFORCE( ntotal ) ,stat=ierror )
1460 if( ierror /= 0 )
then
1461 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, QFORCE>'
1462 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1464 call hecmw_abort( hecmw_comm_get_comm())
1466 allocate ( fstrsolid%DFORCE( ntotal ) ,stat=ierror )
1467 if( ierror /= 0 )
then
1468 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, DFORCE>'
1469 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1471 call hecmw_abort( hecmw_comm_get_comm())
1473 allocate ( fstrsolid%QFORCE_bak( ntotal ) ,stat=ierror )
1474 if( ierror /= 0 )
then
1475 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, QFORCE_bak>'
1476 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1478 call hecmw_abort( hecmw_comm_get_comm())
1481 fstrsolid%GL(:)=0.d0
1482 fstrsolid%GL0(:)=0.d0
1484 fstrsolid%unode(:) = 0.d0
1485 fstrsolid%unode_bak(:) = 0.d0
1486 fstrsolid%dunode(:) = 0.d0
1487 fstrsolid%ddunode(:) = 0.d0
1488 if(
associated(fstrsolid%shell_rot_state) ) fstrsolid%shell_rot_state(:) = 0
1489 if(
associated(fstrsolid%shell_ref_triad) ) fstrsolid%shell_ref_triad(:) = 0.d0
1490 if(
associated(fstrsolid%shell_triad) ) fstrsolid%shell_triad(:) = 0.d0
1491 if(
associated(fstrsolid%shell_triad_bak) ) fstrsolid%shell_triad_bak(:) = 0.d0
1492 if(
associated(fstrsolid%shell_dtriad) ) fstrsolid%shell_dtriad(:) = 0.d0
1493 if(
associated(fstrsolid%shell_drill) ) fstrsolid%shell_drill(:) = 0.d0
1494 if(
associated(fstrsolid%shell_drill_bak) ) fstrsolid%shell_drill_bak(:) = 0.d0
1495 if(
associated(fstrsolid%shell_ddrill) ) fstrsolid%shell_ddrill(:) = 0.d0
1496 fstrsolid%QFORCE(:) = 0.d0
1497 fstrsolid%QFORCE_bak(:) = 0.d0
1500 fstrsolid%DFORCE(:) = 0.d0
1501 fstrsolid%FACTOR( 1:2 ) = 0.d0
1504 fstrsolid%n_fix_mpc = hecmesh%mpc%n_mpc
1505 if( fstrsolid%n_fix_mpc>0 )
then
1506 allocate( fstrsolid%mpc_const( fstrsolid%n_fix_mpc ) )
1507 fstrsolid%mpc_const(:) = hecmesh%mpc%mpc_const(:)
1511 fstrsolid%FACTOR(2)=1.d0
1512 fstrsolid%FACTOR(1)=0.d0
1516 type(hecmwst_local_mesh),
target :: hecMESH
1519 logical,
allocatable :: is_selem_list(:)
1522 do isect=1,hecmesh%section%n_sect
1523 if( fstrsolid%sections(isect)%elemopt341 ==
kel341sesns ) fstrsolid%is_smoothing_active = .true.
1525 if( .not. fstrsolid%is_smoothing_active )
return
1527 allocate(is_selem_list(hecmesh%n_elem), stat=i)
1529 write(*,*)
'Allocation error: is_selem_list'
1532 is_selem_list(:) = .false.
1534 do i=1,hecmesh%n_elem
1535 isect= hecmesh%section_ID(i)
1536 if( hecmesh%elem_type(i) /= fe_tet4n ) cycle
1537 if( fstrsolid%sections(isect)%elemopt341 ==
kel341sesns ) is_selem_list(i) = .true.
1540 call hecmw_create_smoothing_element_connectivity(hecmesh,is_selem_list)
1542 deallocate(is_selem_list)
1548 type(hecmwst_local_mesh),
target :: hecMESH
1551 integer :: i, nodlocal(fstrSOLID%max_ncon), iiS, nn, con_stf
1553 if( fstrsolid%max_ncon_stf > 20 ) fstrsolid%max_ncon_stf = 20
1555 do i=1,hecmesh%elem_type_index(hecmesh%n_elem_type)
1556 if( hecmesh%elem_type(i) /= fe_nodesmooth_tet4n .and. hecmesh%elem_type(i) /= fe_edgesmooth_tet4n ) cycle
1557 iis = hecmesh%elem_node_index(i-1)
1558 nn = hecmesh%elem_node_index(i) - iis
1559 nodlocal(1:nn) = hecmesh%elem_node_item(iis+1:iis+nn)
1561 if( con_stf > fstrsolid%max_ncon_stf ) fstrsolid%max_ncon_stf = con_stf
1571 type(hecmwst_local_mesh),
target :: hecMESH
1573 integer(kind=kint),
intent(in) :: solution_type
1575 integer :: i, j, ng, isect, ndof, id, nn, n_elem, nthick
1577 if( hecmesh%n_elem <=0 )
then
1578 stop
"no element defined!"
1581 fstrsolid%maxn_gauss = 0
1582 fstrsolid%max_ncon = 0
1588 n_elem = hecmesh%elem_type_index(hecmesh%n_elem_type)
1589 allocate( fstrsolid%elements(n_elem) )
1592 fstrsolid%elements(i)%elemact_flag = kelact_undefined
1593 if( solution_type ==
kstheat) cycle
1595 fstrsolid%elements(i)%etype = hecmesh%elem_type(i)
1596 if( hecmesh%elem_type(i)==301 ) fstrsolid%elements(i)%etype=111
1597 if (hecmw_is_etype_link(fstrsolid%elements(i)%etype)) cycle
1598 if (hecmw_is_etype_patch(fstrsolid%elements(i)%etype)) cycle
1600 if( ng > fstrsolid%maxn_gauss ) fstrsolid%maxn_gauss = ng
1601 if(ng>0)
allocate( fstrsolid%elements(i)%gausses( ng ) )
1603 isect= hecmesh%section_ID(i)
1606 id=hecmesh%section%sect_opt(isect)
1608 fstrsolid%elements(i)%iset=1
1609 else if( id==1)
then
1610 fstrsolid%elements(i)%iset=0
1611 else if( id==2)
then
1612 fstrsolid%elements(i)%iset=2
1616 if( isect<0 .or. isect>hecmesh%section%n_sect ) &
1617 stop
"Error in element's section definition"
1618 id = hecmesh%section%sect_mat_ID_item(isect)
1619 fstrsolid%materials(id)%cdsys_ID = hecmesh%section%sect_orien_ID(isect)
1620 nn = hecmesh%elem_node_index(i)-hecmesh%elem_node_index(i-1)
1622 fstrsolid%elements(i)%gausses(j)%pMaterial => fstrsolid%materials(id)
1627 fstrsolid%materials(id) ) .or. &
1629 fstrsolid%materials(id)) )
then
1633 fstrsolid%materials(id)%totallyr, nthick )
1635 allocate(fstrsolid%elements(i)%equiForces(nn*ndof))
1636 fstrsolid%elements(i)%equiForces = 0.0d0
1637 if( nn > fstrsolid%max_ncon ) fstrsolid%max_ncon = nn
1639 if( hecmesh%elem_type(i)==361 )
then
1640 if( fstrsolid%sections(isect)%elemopt361==
kel361ic )
then
1641 allocate( fstrsolid%elements(i)%aux(3,3) )
1642 fstrsolid%elements(i)%aux = 0.0d0
1644 fstrsolid%elements(i)%p(1) = 0.0d0
1649 fstrsolid%max_ncon_stf = fstrsolid%max_ncon
1652 call hecmw_allreduce_i1(hecmesh,fstrsolid%maxn_gauss,hecmw_max)
1661 if(
associated(phys%STRESS))
deallocate(phys%STRESS)
1662 if(
associated(phys%STRAIN))
deallocate(phys%STRAIN)
1663 if(
associated(phys%MISES))
deallocate(phys%MISES)
1665 if(
associated(phys%PSTRESS))
deallocate(phys%PSTRESS)
1666 if(
associated(phys%PSTRAIN))
deallocate(phys%PSTRAIN)
1667 if(
associated(phys%PSTRESS_VECT))
deallocate(phys%PSTRESS_VECT)
1668 if(
associated(phys%PSTRAIN_VECT))
deallocate(phys%PSTRAIN_VECT)
1670 if(
associated(phys%ESTRESS))
deallocate(phys%ESTRESS)
1671 if(
associated(phys%ESTRAIN))
deallocate(phys%ESTRAIN)
1672 if(
associated(phys%EMISES))
deallocate(phys%EMISES)
1673 if(
associated(phys%EPLSTRAIN))
deallocate(phys%EPLSTRAIN)
1675 if(
associated(phys%EPSTRESS))
deallocate(phys%EPSTRESS)
1676 if(
associated(phys%EPSTRAIN))
deallocate(phys%EPSTRAIN)
1677 if(
associated(phys%EPSTRESS_VECT))
deallocate(phys%EPSTRESS_VECT)
1678 if(
associated(phys%EPSTRAIN_VECT))
deallocate(phys%EPSTRAIN_VECT)
1679 if(
associated(phys%ENQM))
deallocate(phys%ENQM)
1681 if(
associated(phys%LAYER))
then
1682 do i=1,
size(phys%LAYER)
1685 deallocate(phys%LAYER)
1687 if(
associated(phys%PLUS))
then
1689 deallocate(phys%PLUS)
1691 if(
associated(phys%MINUS))
then
1693 deallocate(phys%MINUS)
1702 integer :: i, j, ierror
1703 if(
associated(fstrsolid%materials) )
then
1704 do j=1,
size(fstrsolid%materials)
1705 call finalizematerial(fstrsolid%materials(j))
1707 deallocate( fstrsolid%materials )
1709 if( .not.
associated(fstrsolid%elements ) )
return
1710 do i=1,
size(fstrsolid%elements)
1711 if(
associated(fstrsolid%elements(i)%gausses) )
then
1712 do j=1,
size(fstrsolid%elements(i)%gausses)
1713 call fstr_finalize_gauss(fstrsolid%elements(i)%gausses(j))
1715 deallocate( fstrsolid%elements(i)%gausses )
1718 if(
associated(fstrsolid%elements(i)%equiForces) )
then
1719 deallocate(fstrsolid%elements(i)%equiForces)
1721 if(
associated(fstrsolid%elements(i)%aux) )
then
1722 deallocate(fstrsolid%elements(i)%aux)
1726 deallocate( fstrsolid%elements )
1727 if(
associated( fstrsolid%mpc_const ) )
then
1728 deallocate( fstrsolid%mpc_const )
1731 if(
associated(fstrsolid%step_ctrl) )
then
1732 do i=1,
size(fstrsolid%step_ctrl)
1735 deallocate( fstrsolid%step_ctrl )
1737 if(
associated(fstrsolid%output_ctrl) )
then
1738 do i=1,
size(fstrsolid%output_ctrl)
1739 if( fstrsolid%output_ctrl(i)%filenum==
iutb ) &
1740 close(fstrsolid%output_ctrl(i)%filenum)
1742 deallocate(fstrsolid%output_ctrl)
1744 if(
associated( fstrsolid%sections ) )
then
1745 deallocate( fstrsolid%sections )
1748 if(
associated(fstrsolid%GL) )
then
1749 deallocate(fstrsolid%GL ,stat=ierror)
1750 if( ierror /= 0 )
then
1751 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, GL>'
1753 call hecmw_abort( hecmw_comm_get_comm())
1756 if(
associated(fstrsolid%EFORCE) )
then
1757 deallocate(fstrsolid%EFORCE ,stat=ierror)
1758 if( ierror /= 0 )
then
1759 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, EFORCE>'
1761 call hecmw_abort( hecmw_comm_get_comm())
1764 if(
associated(fstrsolid%unode) )
then
1765 deallocate(fstrsolid%unode ,stat=ierror)
1766 if( ierror /= 0 )
then
1767 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, unode>'
1769 call hecmw_abort( hecmw_comm_get_comm())
1772 if(
associated(fstrsolid%unode_bak) )
then
1773 deallocate(fstrsolid%unode_bak ,stat=ierror)
1774 if( ierror /= 0 )
then
1775 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, unode_bak>'
1777 call hecmw_abort( hecmw_comm_get_comm())
1780 if(
associated(fstrsolid%dunode) )
then
1781 deallocate(fstrsolid%dunode ,stat=ierror)
1782 if( ierror /= 0 )
then
1783 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, dunode>'
1785 call hecmw_abort( hecmw_comm_get_comm())
1788 if(
associated(fstrsolid%ddunode) )
then
1789 deallocate(fstrsolid%ddunode ,stat=ierror)
1790 if( ierror /= 0 )
then
1791 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, ddunode>'
1793 call hecmw_abort( hecmw_comm_get_comm())
1796 if(
associated(fstrsolid%shell_node_mode) )
then
1797 deallocate(fstrsolid%shell_node_mode ,stat=ierror)
1798 if( ierror /= 0 )
then
1799 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, shell_node_mode>'
1801 call hecmw_abort( hecmw_comm_get_comm())
1804 if(
associated(fstrsolid%shell_rot_state) )
then
1805 deallocate(fstrsolid%shell_rot_state ,stat=ierror)
1806 if( ierror /= 0 )
then
1807 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, shell_rot_state>'
1809 call hecmw_abort( hecmw_comm_get_comm())
1812 if(
associated(fstrsolid%shell_ref_triad) )
then
1813 deallocate(fstrsolid%shell_ref_triad ,stat=ierror)
1814 if( ierror /= 0 )
then
1815 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, shell_ref_triad>'
1817 call hecmw_abort( hecmw_comm_get_comm())
1820 if(
associated(fstrsolid%shell_triad) )
then
1821 deallocate(fstrsolid%shell_triad ,stat=ierror)
1822 if( ierror /= 0 )
then
1823 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, shell_triad>'
1825 call hecmw_abort( hecmw_comm_get_comm())
1828 if(
associated(fstrsolid%shell_triad_bak) )
then
1829 deallocate(fstrsolid%shell_triad_bak ,stat=ierror)
1830 if( ierror /= 0 )
then
1831 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, shell_triad_bak>'
1833 call hecmw_abort( hecmw_comm_get_comm())
1836 if(
associated(fstrsolid%shell_dtriad) )
then
1837 deallocate(fstrsolid%shell_dtriad ,stat=ierror)
1838 if( ierror /= 0 )
then
1839 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, shell_dtriad>'
1841 call hecmw_abort( hecmw_comm_get_comm())
1844 if(
associated(fstrsolid%shell_drill) )
then
1845 deallocate(fstrsolid%shell_drill ,stat=ierror)
1846 if( ierror /= 0 )
then
1847 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, shell_drill>'
1849 call hecmw_abort( hecmw_comm_get_comm())
1852 if(
associated(fstrsolid%shell_drill_bak) )
then
1853 deallocate(fstrsolid%shell_drill_bak ,stat=ierror)
1854 if( ierror /= 0 )
then
1855 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, shell_drill_bak>'
1857 call hecmw_abort( hecmw_comm_get_comm())
1860 if(
associated(fstrsolid%shell_ddrill) )
then
1861 deallocate(fstrsolid%shell_ddrill ,stat=ierror)
1862 if( ierror /= 0 )
then
1863 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, shell_ddrill>'
1865 call hecmw_abort( hecmw_comm_get_comm())
1868 if(
associated(fstrsolid%QFORCE) )
then
1869 deallocate(fstrsolid%QFORCE ,stat=ierror)
1870 if( ierror /= 0 )
then
1871 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, QFORCE>'
1873 call hecmw_abort( hecmw_comm_get_comm())
1876 if(
associated(fstrsolid%DFORCE) )
then
1877 deallocate(fstrsolid%DFORCE ,stat=ierror)
1878 if( ierror /= 0 )
then
1879 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, DFORCE>'
1881 call hecmw_abort( hecmw_comm_get_comm())
1884 if(
associated(fstrsolid%temperature) )
then
1885 deallocate(fstrsolid%temperature ,stat=ierror)
1886 if( ierror /= 0 )
then
1887 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, temperature>'
1889 call hecmw_abort( hecmw_comm_get_comm())
1892 if(
associated(fstrsolid%last_temp) )
then
1893 deallocate(fstrsolid%last_temp ,stat=ierror)
1894 if( ierror /= 0 )
then
1895 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, reftemp>'
1897 call hecmw_abort( hecmw_comm_get_comm())
1900 if(
associated(fstrsolid%temp_bak) )
then
1901 deallocate(fstrsolid%temp_bak ,stat=ierror)
1902 if( ierror /= 0 )
then
1903 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, reftemp>'
1905 call hecmw_abort( hecmw_comm_get_comm())
1910 if(
associated(fstrsolid%BOUNDARY_ngrp_GRPID) )
then
1911 deallocate(fstrsolid%BOUNDARY_ngrp_GRPID, stat=ierror)
1912 if( ierror /= 0 )
then
1913 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, BOUNDARY_ngrp_GRPID>'
1915 call hecmw_abort( hecmw_comm_get_comm())
1918 if(
associated(fstrsolid%BOUNDARY_ngrp_ID) )
then
1919 deallocate(fstrsolid%BOUNDARY_ngrp_ID, stat=ierror)
1920 if( ierror /= 0 )
then
1921 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, BOUNDARY_ngrp_ID>'
1923 call hecmw_abort( hecmw_comm_get_comm())
1926 if(
associated(fstrsolid%BOUNDARY_ngrp_type) )
then
1927 deallocate(fstrsolid%BOUNDARY_ngrp_type, stat=ierror)
1928 if( ierror /= 0 )
then
1929 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, BOUNDARY_ngrp_type>'
1931 call hecmw_abort( hecmw_comm_get_comm())
1934 if(
associated(fstrsolid%BOUNDARY_ngrp_val) )
then
1935 deallocate(fstrsolid%BOUNDARY_ngrp_val, stat=ierror)
1936 if( ierror /= 0 )
then
1937 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, BOUNDARY_ngrp_val>'
1939 call hecmw_abort( hecmw_comm_get_comm())
1942 if(
associated(fstrsolid%BOUNDARY_ngrp_amp) )
then
1943 deallocate(fstrsolid%BOUNDARY_ngrp_amp, stat=ierror)
1944 if( ierror /= 0 )
then
1945 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, BOUNDARY_ngrp_amp>'
1947 call hecmw_abort( hecmw_comm_get_comm())
1950 if(
associated(fstrsolid%BOUNDARY_ngrp_istot) )
then
1951 deallocate(fstrsolid%BOUNDARY_ngrp_istot, stat=ierror)
1952 if( ierror /= 0 )
then
1953 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, BOUNDARY_ngrp_istot>'
1955 call hecmw_abort( hecmw_comm_get_comm())
1958 if(
associated(fstrsolid%BOUNDARY_ngrp_rotID) )
then
1959 deallocate(fstrsolid%BOUNDARY_ngrp_rotID, stat=ierror)
1960 if( ierror /= 0 )
then
1961 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, BOUNDARY_ngrp_rotID>'
1963 call hecmw_abort( hecmw_comm_get_comm())
1966 if(
associated(fstrsolid%BOUNDARY_ngrp_centerID) )
then
1967 deallocate(fstrsolid%BOUNDARY_ngrp_centerID, stat=ierror)
1968 if( ierror /= 0 )
then
1969 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, BOUNDARY_ngrp_centerID>'
1971 call hecmw_abort( hecmw_comm_get_comm())
1975 if(
associated(fstrsolid%VELOCITY_ngrp_GRPID))
deallocate(fstrsolid%VELOCITY_ngrp_GRPID)
1976 if(
associated(fstrsolid%VELOCITY_ngrp_ID))
deallocate(fstrsolid%VELOCITY_ngrp_ID)
1977 if(
associated(fstrsolid%VELOCITY_ngrp_type))
deallocate(fstrsolid%VELOCITY_ngrp_type)
1978 if(
associated(fstrsolid%VELOCITY_ngrp_amp))
deallocate(fstrsolid%VELOCITY_ngrp_amp)
1979 if(
associated(fstrsolid%VELOCITY_ngrp_val))
deallocate(fstrsolid%VELOCITY_ngrp_val)
1980 if(
associated(fstrsolid%VELOCITY_ngrp_rotID))
deallocate(fstrsolid%VELOCITY_ngrp_rotID)
1981 if(
associated(fstrsolid%VELOCITY_ngrp_centerID))
deallocate(fstrsolid%VELOCITY_ngrp_centerID)
1983 if(
associated(fstrsolid%ACCELERATION_ngrp_GRPID))
deallocate(fstrsolid%ACCELERATION_ngrp_GRPID)
1984 if(
associated(fstrsolid%ACCELERATION_ngrp_ID))
deallocate(fstrsolid%ACCELERATION_ngrp_ID)
1985 if(
associated(fstrsolid%ACCELERATION_ngrp_type))
deallocate(fstrsolid%ACCELERATION_ngrp_type)
1986 if(
associated(fstrsolid%ACCELERATION_ngrp_amp))
deallocate(fstrsolid%ACCELERATION_ngrp_amp)
1987 if(
associated(fstrsolid%ACCELERATION_ngrp_val))
deallocate(fstrsolid%ACCELERATION_ngrp_val)
1990 if(
associated(fstrsolid%CLOAD_ngrp_GRPID) )
then
1991 deallocate(fstrsolid%CLOAD_ngrp_GRPID, stat=ierror)
1992 if( ierror /= 0 )
then
1993 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, CLOAD_ngrp_GRPID>'
1995 call hecmw_abort( hecmw_comm_get_comm())
1998 if(
associated(fstrsolid%CLOAD_ngrp_ID) )
then
1999 deallocate(fstrsolid%CLOAD_ngrp_ID, stat=ierror)
2000 if( ierror /= 0 )
then
2001 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, CLOAD_ngrp_ID>'
2003 call hecmw_abort( hecmw_comm_get_comm())
2006 if(
associated(fstrsolid%CLOAD_ngrp_DOF) )
then
2007 deallocate(fstrsolid%CLOAD_ngrp_DOF, stat=ierror)
2008 if( ierror /= 0 )
then
2009 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, CLOAD_ngrp_DOF>'
2011 call hecmw_abort( hecmw_comm_get_comm())
2014 if(
associated(fstrsolid%CLOAD_ngrp_val) )
then
2015 deallocate(fstrsolid%CLOAD_ngrp_val, stat=ierror)
2016 if( ierror /= 0 )
then
2017 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, CLOAD_ngrp_val>'
2019 call hecmw_abort( hecmw_comm_get_comm())
2022 if(
associated(fstrsolid%CLOAD_ngrp_amp) )
then
2023 deallocate(fstrsolid%CLOAD_ngrp_amp, stat=ierror)
2024 if( ierror /= 0 )
then
2025 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, CLOAD_ngrp_amp>'
2027 call hecmw_abort( hecmw_comm_get_comm())
2030 if(
associated(fstrsolid%CLOAD_ngrp_rotID) )
then
2031 deallocate(fstrsolid%CLOAD_ngrp_rotID, stat=ierror)
2032 if( ierror /= 0 )
then
2033 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, CLOAD_ngrp_rotID>'
2035 call hecmw_abort( hecmw_comm_get_comm())
2038 if(
associated(fstrsolid%CLOAD_ngrp_centerID) )
then
2039 deallocate(fstrsolid%CLOAD_ngrp_centerID, stat=ierror)
2040 if( ierror /= 0 )
then
2041 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, CLOAD_ngrp_centerID>'
2043 call hecmw_abort( hecmw_comm_get_comm())
2047 if(
associated(fstrsolid%DLOAD_ngrp_GRPID))
deallocate(fstrsolid%DLOAD_ngrp_GRPID)
2048 if(
associated(fstrsolid%DLOAD_ngrp_ID))
deallocate(fstrsolid%DLOAD_ngrp_ID)
2049 if(
associated(fstrsolid%DLOAD_ngrp_LID))
deallocate(fstrsolid%DLOAD_ngrp_LID)
2050 if(
associated(fstrsolid%DLOAD_ngrp_amp))
deallocate(fstrsolid%DLOAD_ngrp_amp)
2051 if(
associated(fstrsolid%DLOAD_ngrp_params))
deallocate(fstrsolid%DLOAD_ngrp_params)
2053 if(
associated(fstrsolid%TEMP_ngrp_GRPID))
deallocate(fstrsolid%TEMP_ngrp_GRPID)
2054 if(
associated(fstrsolid%TEMP_ngrp_ID))
deallocate(fstrsolid%TEMP_ngrp_ID)
2055 if(
associated(fstrsolid%TEMP_ngrp_val))
deallocate(fstrsolid%TEMP_ngrp_val)
2057 if(
associated(fstrsolid%SPRING_ngrp_GRPID))
deallocate(fstrsolid%SPRING_ngrp_GRPID)
2058 if(
associated(fstrsolid%SPRING_ngrp_ID))
deallocate(fstrsolid%SPRING_ngrp_ID)
2059 if(
associated(fstrsolid%SPRING_ngrp_DOF))
deallocate(fstrsolid%SPRING_ngrp_DOF)
2060 if(
associated(fstrsolid%SPRING_ngrp_amp))
deallocate(fstrsolid%SPRING_ngrp_amp)
2061 if(
associated(fstrsolid%SPRING_ngrp_val))
deallocate(fstrsolid%SPRING_ngrp_val)
2062 if(
associated(fstrsolid%SPRING_incremental))
deallocate(fstrsolid%SPRING_incremental)
2064 if(
associated(fstrsolid%COUPLE_ngrp_ID))
deallocate(fstrsolid%COUPLE_ngrp_ID)
2084 if(
associated(fstrsolid%TNSTRAIN))
deallocate(fstrsolid%TNSTRAIN)
2085 if(
associated(fstrsolid%TESTRAIN))
deallocate(fstrsolid%TESTRAIN)
2087 if(
associated(fstrsolid%YIELD_RATIO))
deallocate(fstrsolid%YIELD_RATIO)
2090 if(
associated(fstrsolid%REACTION))
deallocate(fstrsolid%REACTION)
2092 if(
associated(fstrsolid%CONT_NFORCE))
deallocate(fstrsolid%CONT_NFORCE)
2093 if(
associated(fstrsolid%CONT_FRIC))
deallocate(fstrsolid%CONT_FRIC)
2094 if(
associated(fstrsolid%CONT_RELVEL))
deallocate(fstrsolid%CONT_RELVEL)
2095 if(
associated(fstrsolid%CONT_STATE))
deallocate(fstrsolid%CONT_STATE)
2096 if(
associated(fstrsolid%CONT_SGRP_ID))
deallocate(fstrsolid%CONT_SGRP_ID)
2097 if(
associated(fstrsolid%CONT_AREA))
deallocate(fstrsolid%CONT_AREA)
2098 if(
associated(fstrsolid%CONT_NTRAC))
deallocate(fstrsolid%CONT_NTRAC)
2099 if(
associated(fstrsolid%CONT_FTRAC))
deallocate(fstrsolid%CONT_FTRAC)
2100 if(
associated(fstrsolid%EMBED_NFORCE))
deallocate(fstrsolid%EMBED_NFORCE)
2106 if(
associated(fstrsolid%is_rot))
deallocate(fstrsolid%is_rot)
2107 if(
associated(fstrsolid%GL0))
deallocate(fstrsolid%GL0)
2108 if(
associated(fstrsolid%QFORCE_bak))
deallocate(fstrsolid%QFORCE_bak)
2110 if(
associated(fstrsolid%contacts))
then
2114 deallocate(fstrsolid%contacts)
2116 if(
associated(fstrsolid%embeds))
then
2120 deallocate(fstrsolid%embeds)
2122 if(
associated(fstrsolid%unode_bkup))
deallocate(fstrsolid%unode_bkup)
2123 if(
associated(fstrsolid%QFORCE_bkup))
deallocate(fstrsolid%QFORCE_bkup)
2124 if(
associated(fstrsolid%DFORCE_bkup))
deallocate(fstrsolid%DFORCE_bkup)
2125 if(
associated(fstrsolid%last_temp_bkup))
deallocate(fstrsolid%last_temp_bkup)
2126 if(
associated(fstrsolid%shell_triad_bkup))
deallocate(fstrsolid%shell_triad_bkup)
2127 if(
associated(fstrsolid%shell_drill_bkup))
deallocate(fstrsolid%shell_drill_bkup)
2128 if(
associated(fstrsolid%elements_bkup))
then
2129 do i=1,
size(fstrsolid%elements_bkup)
2130 if(
associated(fstrsolid%elements_bkup(i)%gausses) )
then
2131 do j=1,
size(fstrsolid%elements_bkup(i)%gausses)
2132 call fstr_finalize_gauss(fstrsolid%elements_bkup(i)%gausses(j))
2134 deallocate( fstrsolid%elements_bkup(i)%gausses )
2137 if(
associated(fstrsolid%elements_bkup(i)%equiForces) )
then
2138 deallocate(fstrsolid%elements_bkup(i)%equiForces)
2140 if(
associated(fstrsolid%elements_bkup(i)%aux) )
then
2141 deallocate(fstrsolid%elements_bkup(i)%aux)
2144 deallocate(fstrsolid%elements_bkup)
2146 if(
associated(fstrsolid%contacts_bkup))
then
2150 deallocate(fstrsolid%contacts_bkup)
2152 if(
associated(fstrsolid%embeds_bkup))
then
2156 deallocate(fstrsolid%embeds_bkup)
2166 fstrheat%STEPtot = 0
2167 fstrheat%MATERIALtot = 0
2168 fstrheat%AMPLITUDEtot= 0
2169 fstrheat%T_FIX_tot = 0
2170 fstrheat%Q_NOD_tot = 0
2171 fstrheat%Q_VOL_tot = 0
2172 fstrheat%Q_SUF_tot = 0
2173 fstrheat%R_SUF_tot = 0
2174 fstrheat%H_SUF_tot = 0
2176 fstrheat%beta = -1.0d0
2185 fstreig%maxiter = 60
2188 fstreig%sigma = 0.01d0
2189 fstreig%tolerance = 1.0d-6
2190 fstreig%totalmass = 0.0d0
2197 fstrdynamic%idx_eqa = 1
2198 fstrdynamic%idx_resp = 1
2199 fstrdynamic%n_step = 1
2200 fstrdynamic%t_start = 0.0
2201 fstrdynamic%t_curr = 0.0d0
2202 fstrdynamic%t_end = 1.0
2203 fstrdynamic%t_delta = 1.0
2204 fstrdynamic%gamma = 0.5
2205 fstrdynamic%beta = 0.25
2207 fstrdynamic%idx_dmp = 1
2208 fstrdynamic%ray_m = 0.0
2209 fstrdynamic%ray_k = 0.0
2210 fstrdynamic%restart_nout = 0
2211 fstrdynamic%nout = 100
2212 fstrdynamic%ngrp_monit = 0
2213 fstrdynamic%nout_monit = 1
2214 fstrdynamic%iout_list(1) = 0
2215 fstrdynamic%iout_list(2) = 0
2216 fstrdynamic%iout_list(3) = 0
2217 fstrdynamic%iout_list(4) = 0
2218 fstrdynamic%iout_list(5) = 0
2219 fstrdynamic%iout_list(6) = 0
2227 type(hecmwst_local_mesh),
target :: hecMESH
2230 integer :: ierror, ndof,nnod
2234 if(fstrdynamic%idx_eqa == 11)
then
2235 allocate( fstrdynamic%DISP(ndof*nnod,3) ,stat=ierror )
2236 if( ierror /= 0 )
then
2237 write(
idbg,*)
'stop due to allocation error <fstr_solve_LINEAR_DYNAMIC, DISP>'
2238 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
2240 call hecmw_abort( hecmw_comm_get_comm())
2242 allocate( fstrdynamic%VEL (ndof*nnod,1) ,stat=ierror )
2243 if( ierror /= 0 )
then
2244 write(
idbg,*)
'stop due to allocation error <fstr_solve_LINEAR_DYNAMIC, VEL>'
2245 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
2247 call hecmw_abort( hecmw_comm_get_comm())
2249 allocate( fstrdynamic%ACC (ndof*nnod,1) ,stat=ierror )
2250 if( ierror /= 0 )
then
2251 write(
idbg,*)
'stop due to allocation error <fstr_solve_LINEAR_DYNAMIC, ACC>'
2252 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
2254 call hecmw_abort( hecmw_comm_get_comm())
2257 allocate( fstrdynamic%DISP(ndof*nnod,2) ,stat=ierror )
2258 if( ierror /= 0 )
then
2259 write(
idbg,*)
'stop due to allocation error <fstr_solve_LINEAR_DYNAMIC, DISP>'
2260 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
2262 call hecmw_abort( hecmw_comm_get_comm())
2264 allocate( fstrdynamic%VEL (ndof*nnod,2) ,stat=ierror )
2265 if( ierror /= 0 )
then
2266 write(
idbg,*)
'stop due to allocation error <fstr_solve_LINEAR_DYNAMIC, VEL>'
2267 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
2269 call hecmw_abort( hecmw_comm_get_comm())
2271 allocate( fstrdynamic%ACC (ndof*nnod,2) ,stat=ierror )
2272 if( ierror /= 0 )
then
2273 write(
idbg,*)
'stop due to allocation error <fstr_solve_LINEAR_DYNAMIC, ACC>'
2274 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
2276 call hecmw_abort( hecmw_comm_get_comm())
2281 allocate( fstrdynamic%VEC1(ndof*nnod) ,stat=ierror )
2282 if( ierror /= 0 )
then
2283 write(
idbg,*)
'stop due to allocation error <fstr_solve_LINEAR_DYNAMIC, VEC1>'
2284 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
2286 call hecmw_abort( hecmw_comm_get_comm())
2288 allocate( fstrdynamic%VEC2(ndof*nnod) ,stat=ierror )
2289 if( ierror /= 0 )
then
2290 write(
idbg,*)
'stop due to allocation error <fstr_solve_LINEAR_DYNAMIC, VEC2>'
2291 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
2293 call hecmw_abort( hecmw_comm_get_comm())
2295 allocate( fstrdynamic%VEC3(ndof*nnod) ,stat=ierror )
2296 if( ierror /= 0 )
then
2297 write(
idbg,*)
'stop due to allocation error <fstr_solve_LINEAR_DYNAMIC, VEC3>'
2298 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
2300 call hecmw_abort( hecmw_comm_get_comm())
2310 if(
associated(fstrdynamic%DISP) ) &
2311 deallocate( fstrdynamic%DISP ,stat=ierror )
2312 if( ierror /= 0 )
then
2313 write(
idbg,*)
'stop due to deallocation error <fstr_solve_LINEAR_DYNAMIC, DISP>'
2315 call hecmw_abort( hecmw_comm_get_comm())
2317 if(
associated(fstrdynamic%VEL) ) &
2318 deallocate( fstrdynamic%VEL ,stat=ierror )
2319 if( ierror /= 0 )
then
2320 write(
idbg,*)
'stop due to deallocation error <fstr_solve_LINEAR_DYNAMIC, VEL>'
2322 call hecmw_abort( hecmw_comm_get_comm())
2324 if(
associated(fstrdynamic%ACC) ) &
2325 deallocate( fstrdynamic%ACC ,stat=ierror )
2326 if( ierror /= 0 )
then
2327 write(
idbg,*)
'stop due to deallocation error <fstr_solve_LINEAR_DYNAMIC, ACC>'
2329 call hecmw_abort( hecmw_comm_get_comm())
2331 if(
associated(fstrdynamic%VEC1) ) &
2332 deallocate( fstrdynamic%VEC1 ,stat=ierror )
2333 if( ierror /= 0 )
then
2334 write(
idbg,*)
'stop due to deallocation error <fstr_solve_LINEAR_DYNAMIC, VEC1>'
2336 call hecmw_abort( hecmw_comm_get_comm())
2338 if(
associated(fstrdynamic%VEC2) ) &
2339 deallocate( fstrdynamic%VEC2 ,stat=ierror )
2340 if( ierror /= 0 )
then
2341 write(
idbg,*)
'stop due to deallocation error <fstr_solve_LINEAR_DYNAMIC, VEC2>'
2343 call hecmw_abort( hecmw_comm_get_comm())
2345 if(
associated(fstrdynamic%VEC3) ) &
2346 deallocate( fstrdynamic%VEC3 ,stat=ierror )
2347 if( ierror /= 0 )
then
2348 write(
idbg,*)
'stop due to deallocation error <fstr_solve_LINEAR_DYNAMIC, VEC3>'
2350 call hecmw_abort( hecmw_comm_get_comm())
2362 integer(kind=kint) :: NDOF, n_node, n_elem, mdof, istat
2363 mdof = (ndof*ndof+ndof)/2;
2364 allocate ( phys%STRAIN (mdof*n_node), stat=istat)
2365 if( istat /= 0 ) stop
"Allocation error: phys%STRAIN"
2366 allocate ( phys%STRESS (mdof*n_node), stat=istat)
2367 if( istat /= 0 ) stop
"Allocation error: phys%STRESS"
2368 allocate ( phys%MISES ( n_node), stat=istat)
2369 if( istat /= 0 ) stop
"Allocation error: phys%MISES"
2370 allocate ( phys%ESTRAIN (mdof*n_elem), stat=istat)
2371 if( istat /= 0 ) stop
"Allocation error: phys%ESTRAIN"
2372 allocate ( phys%ESTRESS (mdof*n_elem), stat=istat)
2373 if( istat /= 0 ) stop
"Allocation error: phys%ESTRESS"
2374 allocate ( phys%EMISES ( n_elem), stat=istat)
2375 if( istat /= 0 ) stop
"Allocation error: phys%EMISES"
2376 allocate ( phys%EPLSTRAIN ( n_elem), stat=istat)
2377 if( istat /= 0 ) stop
"Allocation error: phys%EPLSTRAIN"
2378 allocate ( phys%ENQM (12*n_elem), stat=istat)
2379 if( istat /= 0 ) stop
"Allocation error: phys%ENQM"
2384 integer(kind=kint) :: ctrl, i
2388 if( p%PARAM%solution_type ==
kststatic &
2389 .or. p%PARAM%solution_type ==
ksteigen &
2393 if( p%MESH%n_dof == 6 .or. p%SOLID%is_33shell == 1 )
then
2394 allocate ( p%SOLID%SHELL )
2396 allocate ( p%SOLID%SHELL%LAYER(p%SOLID%max_lyr) )
2397 do i=1,p%SOLID%max_lyr
2398 allocate ( p%SOLID%SHELL%LAYER(i)%PLUS )
2399 allocate ( p%SOLID%SHELL%LAYER(i)%MINUS )
2403 phys => p%SOLID%SHELL
2405 allocate ( p%SOLID%SOLID )
2406 phys => p%SOLID%SOLID
2409 p%SOLID%STRAIN => phys%STRAIN
2410 p%SOLID%STRESS => phys%STRESS
2411 p%SOLID%MISES => phys%MISES
2412 p%SOLID%ESTRAIN => phys%ESTRAIN
2413 p%SOLID%ESTRESS => phys%ESTRESS
2414 p%SOLID%EMISES => phys%EMISES
2415 p%SOLID%EPLSTRAIN => phys%EPLSTRAIN
2416 p%SOLID%ENQM => phys%ENQM
2417 allocate( p%SOLID%REACTION( p%MESH%n_dof*p%MESH%n_node ), stat=i )
2418 if( i /= 0 ) stop
"Allocation error: REACTION"
2419 p%SOLID%REACTION = 0.d0
2422 if( p%PARAM%fg_visual ==
kon )
then
2426 call hecmw_barrier( p%MESH )
2428 if( p%HEAT%STEPtot == 0 )
then
2429 if( p%PARAM%analysis_n == 0 )
then
2436 p%PARAM%analysis_n = 1
2442 p%PARAM%eps = 1.0e-6
2449 p%HEAT%STEP_DLTIME = 0
2450 p%HEAT%STEP_EETIME = 0
2451 p%HEAT%STEP_DELMIN = 0
2452 p%HEAT%STEP_DELMAX = 0
2466 integer(kind=kint) :: ctrl
2467 integer(kind=kint) :: counter
2470 integer(kind=kint) :: rcode
2483 integer(kind=kint) :: ctrl
2484 integer(kind=kint) :: counter
2487 integer(kind=kint) :: rcode
2500 integer(kind=kint) :: ctrl
2501 integer(kind=kint) :: counter
2504 integer(kind=kint) :: rcode
2506 if( counter >= 2 )
then
2507 write(
ilog,*)
'### Error : !SOLVER exists twice in FSTR control file.'
2508 stop hecmw_exit_input
2569 integer(kind=kint) :: ctrl
2570 type( hecmwst_local_mesh ) :: hecmesh
2572 type( tlocalcoordsys ) :: coordsys
2574 character(len=HECMW_NAME_LEN) :: grp_id_name(1)
2576 integer :: nid, dtype
2577 character(len=HECMW_NAME_LEN) :: data_fmt
2578 real(kind=kreal) :: fdum, xyza(3), xyzb(3), xyzc(3), ff1(3), ff2(3), ff3(3)
2583 coordsys%sys_type = 10
2586 data_fmt =
'COORDINATES,NODES,LOCAL_NODES '
2589 coordsys%sys_type = coordsys%sys_type + dtype
2592 coordsys%sys_name = grp_id_name(1)
2595 data_fmt =
"RRRRRRrrr "
2598 xyza(3), xyzb(1), xyzb(2), xyzb(3), xyzc(1), xyzc(2), xyzc(3) )/=0 )
return
2599 if( coordsys%sys_type==10 )
then
2601 fdum = dsqrt( dot_product(ff1, ff1) )
2602 if( fdum==0.d0 )
return
2606 coordsys%CoordSys(1,:) = ff1
2608 fdum = dsqrt( dot_product(ff3, ff3) )
2609 if( fdum==0.d0 )
return
2610 coordsys%CoordSys(3,:) = ff3/fdum
2612 call cross_product(coordsys%CoordSys(3,:), coordsys%CoordSys(1,:), coordsys%CoordSys(2,:) )
2614 coordsys%CoordSys(1,:) = xyza
2615 coordsys%CoordSys(2,:) = xyzb
2619 coordsys%node_ID(3) = 0
2622 coordsys%node_ID(2), coordsys%node_ID(3) )/=0 )
return
2627 if( maxval(coordsys%node_ID(1:3)) > 10 .or. minval(coordsys%node_ID(1:3)) < 1 )
then
2628 write(*,*)
"!ORIENTATION, DEFINITION=LOCAL_NODES needs three local node numbers (1-10)!"
2629 write(
idbg,*)
"!ORIENTATION, DEFINITION=LOCAL_NODES needs three local node numbers (1-10)!"
2635 if( coordsys%node_ID(3) == 0 )
then
2637 if( nid/=0 .and. nid/=2 )
then
2638 write(*,*)
"We cannot define coordinate system using nodes in other CPU!"
2639 write(
idbg,*)
"We cannot define coordinate system using nodes in other CPU!"
2644 if( nid/=0 .and. nid/=3 )
then
2645 write(*,*)
"We cannot define coordinate system using nodes in other CPU!"
2646 write(
idbg,*)
"We cannot define coordinate system using nodes in other CPU!"
2662 integer(kind=kint) :: ctrl
2663 integer(kind=kint) :: counter
2665 character(HECMW_NAME_LEN) :: amp
2666 integer(kind=kint) :: amp_id
2668 integer(kind=kint) :: rcode, iproc
2681 type(
step_info ),
intent(inout) :: stepinfo
2682 character(len=*),
intent(in) :: cpname
2684 integer(kind=kint),
intent(in) :: istep
2686 integer(kind=kint) :: i, id
2689 if( len_trim(cpname) > 0 )
then
2690 do i=1,ubound(cnvparam,1)
2696 write(*,*)
'### Error: CONVERG_PARAM referred to by STEP is not defined before it : ', trim(cpname)
2697 write(
ilog,*)
'### Error: CONVERG_PARAM referred to by STEP is not defined before it : ', trim(cpname)
2698 stop hecmw_exit_input
2705 write(*,*)
'### Error: RESIDUAL and CORRECTION are all SKIP in step : ', istep
2706 write(
ilog,*)
'### Error: RESIDUAL and CORRECTION are all SKIP in step : ', istep
2707 stop hecmw_exit_input
2714 integer(kind=kint) :: ctrl
2716 type(hecmwst_local_mesh) :: hecmesh
2717 integer,
pointer :: grp_id(:), dof(:)
2718 real(kind=kreal),
pointer :: temp(:)
2719 character(len=HECMW_NAME_LEN),
pointer :: grp_id_name(:)
2720 character(len=HECMW_NAME_LEN) :: data_fmt, ss
2721 integer :: i,j,n, is, ie, gid, nid, rcode
2725 ss =
'TEMPERATURE,VELOCITY,ACCELERATION '
2728 cond%cond_name =
"temperature"
2729 allocate( cond%intval(hecmesh%n_node) )
2730 allocate( cond%realval(hecmesh%n_node) )
2731 elseif( nid==2 )
then
2732 cond%cond_name =
"velocity"
2733 allocate( cond%intval(hecmesh%n_node) )
2734 allocate( cond%realval(hecmesh%n_node) )
2735 elseif( nid==3 )
then
2736 cond%cond_name =
"acceleration"
2737 allocate( cond%intval(hecmesh%n_node) )
2738 allocate( cond%realval(hecmesh%n_node) )
2748 allocate( temp(n), grp_id_name(n), grp_id(n), dof(n) )
2750 write(ss,*) hecmw_name_len
2752 write(data_fmt,
'(a,a,a)')
'S',trim(adjustl(ss)),
'R '
2756 write(data_fmt,
'(a,a,a)')
'S',trim(adjustl(ss)),
'IR '
2762 if(
associated(grp_id) )
deallocate( grp_id )
2763 if(
associated(temp) )
deallocate( temp )
2764 if(
associated(dof) )
deallocate( dof )
2765 if(
associated(grp_id_name) )
deallocate( grp_id_name )
2772 is = hecmesh%node_group%grp_index(gid-1) + 1
2773 ie = hecmesh%node_group%grp_index(gid )
2775 nid = hecmesh%node_group%grp_item(j)
2776 cond%realval(nid) = temp(i)
2777 cond%intval(nid) = dof(i)
2781 if(
associated(grp_id) )
deallocate( grp_id )
2782 if(
associated(temp) )
deallocate( temp )
2783 if(
associated(dof) )
deallocate( dof )
2784 if(
associated(grp_id_name) )
deallocate( grp_id_name )
2793 integer(kind=kint) :: ctrl
2794 integer(kind=kint) :: counter
2796 integer(kind=kint) :: res, visual, neutral
2798 integer(kind=kint) :: rcode
2802 if( res == 1 ) p%PARAM%fg_result = 1
2803 if( visual == 1 ) p%PARAM%fg_visual = 1
2804 if( neutral == 1 ) p%PARAM%fg_neutral = 1
2814 integer(kind=kint) :: ctrl
2815 integer(kind=kint) :: counter
2818 integer(kind=kint) :: rcode
2832 integer(kind=kint) :: ctrl
2833 integer(kind=kint) :: nout
2834 integer(kind=kint) :: version
2836 integer(kind=kint) :: rcode
2854 integer(kind=kint) :: ctrl
2855 integer(kind=kint) :: counter
2857 integer(kind=kint) :: rcode
2858 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
2859 integer(kind=kint) :: n, old_size, new_size
2861 if( p%SOLID%file_type /=
kbcffstr )
return
2865 old_size = p%SOLID%COUPLE_ngrp_tot
2866 new_size = old_size + n
2867 p%SOLID%COUPLE_ngrp_tot = new_size
2871 allocate( grp_id_name(n))
2873 p%PARAM%fg_couple_type, &
2874 p%PARAM%fg_couple_first, &
2875 p%PARAM%fg_couple_window, &
2876 grp_id_name, hecmw_name_len )
2879 call surf_grp_name_to_id_ex( p%MESH,
'!COUPLE', &
2880 n, grp_id_name, p%SOLID%COUPLE_ngrp_ID(old_size+1:))
2882 deallocate( grp_id_name )
2883 p%PARAM%fg_couple = 1
2893 integer(kind=kint) :: ctrl
2895 real(kind=kreal),
pointer :: val(:), table(:)
2896 character(len=HECMW_NAME_LEN) :: name
2897 integer :: nline, n, type_def, type_time, type_val, rcode
2900 if( nline<=0 )
return
2901 allocate( val(nline*4) )
2902 allocate( table(nline*4) )
2909 if(
associated(val) )
deallocate( val )
2910 if(
associated(table) )
deallocate( table )
2920 integer(kind=kint) :: ctrl
2921 integer(kind=kint) :: counter
2924 integer(kind=kint) :: rcode
2925 character(HECMW_NAME_LEN) :: amp
2926 integer(kind=kint) :: amp_id
2927 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
2928 integer(kind=kint) :: i, n, old_size, new_size
2929 integer(kind=kint) :: gid, mode, measure, state
2930 real(kind=kreal) ::
eps
2931 real(kind=kreal),
pointer :: thlow(:), thup(:)
2938 old_size = p%SOLID%elemact%ELEMACT_egrp_tot
2939 new_size = old_size + n
2940 p%SOLID%elemact%ELEMACT_egrp_tot = new_size
2951 allocate( grp_id_name(n), thlow(n), thup(n) )
2957 call amp_name_to_id( p%MESH,
'!ELEMENT_ACTIVATION', amp, amp_id )
2959 p%SOLID%elemact%ELEMACT_egrp_amp(old_size+i) = amp_id
2960 p%SOLID%elemact%ELEMACT_egrp_eps(old_size+i) =
eps
2962 p%SOLID%elemact%ELEMACT_egrp_GRPID(old_size+1:new_size) = gid
2963 p%SOLID%elemact%ELEMACT_egrp_depends(old_size+1:new_size) = measure
2964 p%SOLID%elemact%ELEMACT_egrp_ts_lower(old_size+1:new_size) = thlow(1:n)
2965 p%SOLID%elemact%ELEMACT_egrp_ts_upper(old_size+1:new_size) = thup(1:n)
2966 p%SOLID%elemact%ELEMACT_egrp_state(old_size+1:new_size) = state
2968 call elem_grp_name_to_id_ex( p%MESH,
'!ELEMENT_ACTIVATION', n, grp_id_name, p%SOLID%elemact%ELEMACT_egrp_ID(old_size+1:))
2970 deallocate( grp_id_name )
2984 integer(kind=kint) :: ctrl
2985 integer(kind=kint) :: counter
2987 integer(kind=kint) :: rcode
2989 integer :: nout, nout_monit,node_monit_1 ,elem_monit_1 ,intg_monit_1
2990 integer :: ipt, idx_elpl, iout_list(6)
2991 real(kind=kreal) :: sig_y0, h_dash
2993 if( counter > 1 )
then
3000 if( ipt == 2 ) p%PARAM%nlgeom = .true.
3004 write(*,*)
"Warning : !STATIC : parameter 'TYPE=INFINITE' is deprecated." &
3005 & //
" Please use the replacement parameter 'TYPE=INFINITESIMAL'"
3013 nout, nout_monit, node_monit_1, &
3014 elem_monit_1, intg_monit_1 )
3030 integer(kind=kint) :: ctrl
3031 integer(kind=kint) :: counter
3034 integer(kind=kint) :: rcode
3035 character(HECMW_NAME_LEN) :: amp, rotc_name(1)
3036 integer(kind=kint) :: amp_id, rotc_id(1), n_rotc
3037 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
3038 integer(kind=kint),
pointer :: dof_ids (:)
3039 integer(kind=kint),
pointer :: dof_ide (:)
3040 real(kind=kreal),
pointer :: val_ptr(:)
3041 integer(kind=kint) :: i, n, old_size, new_size
3043 integer(kind=kint) :: gid, istot
3058 if( rotc_name(1) /=
' ' )
then
3059 if( istot /= 0 )
then
3060 write(*,*)
'fstr control file error : !BOUNDARY : rotational boundary cannot be specified with total value'
3061 write(
ilog,*)
'fstr control file error : !BOUNDARY : rotational boundary cannot be specified with total value'
3064 p%SOLID%BOUNDARY_ngrp_rot = p%SOLID%BOUNDARY_ngrp_rot + 1
3065 n_rotc = p%SOLID%BOUNDARY_ngrp_rot
3066 call node_grp_name_to_id_ex( p%MESH,
'!BOUNDARY,ROT_CENTER=', 1, rotc_name, rotc_id)
3075 old_size = p%SOLID%BOUNDARY_ngrp_tot
3076 new_size = old_size + n
3077 p%SOLID%BOUNDARY_ngrp_tot = new_size
3087 allocate( grp_id_name(n) )
3088 allocate( dof_ids(n) )
3089 allocate( dof_ide(n) )
3090 allocate( val_ptr(n) )
3097 p%SOLID%BOUNDARY_ngrp_GRPID(old_size+1:new_size) = gid
3098 call node_grp_name_to_id_ex( p%MESH,
'!BOUNDARY', n, grp_id_name, p%SOLID%BOUNDARY_ngrp_ID(old_size+1:))
3099 p%SOLID%BOUNDARY_ngrp_istot(old_size+1:new_size) = istot
3102 p%SOLID%BOUNDARY_ngrp_rotID(old_size+1:) = n_rotc
3103 p%SOLID%BOUNDARY_ngrp_centerID(old_size+1:) = rotc_id(1)
3106 if( (dof_ids(i) < 1).or.(6 < dof_ids(i)).or.(dof_ide(i) < 1).or.(6 < dof_ide(i)) )
then
3107 write(*,*)
'fstr control file error : !BOUNDARY : range of dof_ids and dof_ide is from 1 to 6'
3108 write(
ilog,*)
'fstr control file error : !BOUNDARY : range of dof_ids and dof_ide is from 1 to 6'
3111 p%SOLID%BOUNDARY_ngrp_val(old_size+i) = val_ptr(i)
3112 p%SOLID%BOUNDARY_ngrp_type(old_size+i) = 10 * dof_ids(i) + dof_ide(i)
3113 p%SOLID%BOUNDARY_ngrp_amp(old_size+i) = amp_id
3116 deallocate( grp_id_name )
3117 deallocate( dof_ids )
3118 deallocate( dof_ide )
3119 deallocate( val_ptr )
3120 nullify( grp_id_name )
3137 integer(kind=kint) :: ctrl
3138 integer(kind=kint) :: counter
3141 integer(kind=kint) :: rcode
3142 character(HECMW_NAME_LEN) :: amp, rotc_name(1)
3143 integer(kind=kint) :: amp_id, rotc_id(1), n_rotc
3144 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
3145 real(kind=kreal),
pointer :: val_ptr(:)
3146 integer(kind=kint),
pointer :: id_ptr(:)
3147 integer(kind=kint) :: i, n, old_size, new_size
3148 integer(kind=kint) :: gid, ngrp_id, nnode_grp
3149 character(len=HECMW_MSG_LEN) :: msg(2)
3151 if( p%SOLID%file_type /=
kbcffstr )
return
3162 if( rotc_name(1) /=
' ' )
then
3163 p%SOLID%CLOAD_ngrp_rot = p%SOLID%CLOAD_ngrp_rot + 1
3164 n_rotc = p%SOLID%CLOAD_ngrp_rot
3165 call node_grp_name_to_id_ex( p%MESH,
'!CLOAD,ROT_CENTER=', 1, rotc_name, rotc_id)
3170 old_size = p%SOLID%CLOAD_ngrp_tot
3171 new_size = old_size + n
3172 p%SOLID%CLOAD_ngrp_tot = new_size
3183 allocate( grp_id_name(n))
3184 allocate( id_ptr(n) )
3185 allocate( val_ptr(n) )
3193 p%SOLID%CLOAD_ngrp_rotID(old_size+1:) = n_rotc
3194 p%SOLID%CLOAD_ngrp_centerID(old_size+1:) = rotc_id(1)
3198 p%SOLID%CLOAD_ngrp_amp(old_size+i) = amp_id
3199 p%SOLID%CLOAD_ngrp_DOF(old_size+i) = id_ptr(i)
3200 p%SOLID%CLOAD_ngrp_val(old_size+i) = val_ptr(i)
3202 p%SOLID%CLOAD_ngrp_GRPID(old_size+1:new_size) = gid
3203 call node_grp_name_to_id_ex( p%MESH,
'!CLOAD', n, grp_id_name, p%SOLID%CLOAD_ngrp_ID(old_size+1:))
3205 deallocate( grp_id_name )
3206 deallocate( id_ptr )
3207 deallocate( val_ptr )
3208 nullify( grp_id_name )
3214 if( p%MESH%n_refine > 0 )
then
3216 ngrp_id = p%SOLID%CLOAD_ngrp_ID(old_size+i)
3217 nnode_grp = hecmw_ngrp_get_number(p%MESH, ngrp_id)
3218 if( nnode_grp > 1 .and. p%MESH%my_rank == 0 )
then
3219 msg(1) =
' ### Warning: !CLOAD on a refined mesh'
3220 write(msg(2),
'(a,a,a,i0,a)')
' node group "', trim(p%MESH%node_group%grp_name(ngrp_id)), &
3221 '" now has ', nnode_grp,
' nodes; the same load is applied to each of them'
3222 write(*,
'(/a/a/)') trim(msg(1)), trim(msg(2))
3223 write(
ilog,
'(/a/a/)') trim(msg(1)), trim(msg(2))
3239 integer(kind=kint) :: ctrl
3240 integer(kind=kint) :: counter
3243 integer(kind=kint) :: rcode
3244 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
3245 real(kind=kreal),
pointer :: val_ptr(:)
3246 integer(kind=kint),
pointer :: id_ptr(:)
3247 integer(kind=kint) :: i, n, old_size, new_size
3248 integer(kind=kint) :: gid, loadcase
3251 if( p%SOLID%file_type /=
kbcffstr)
return
3265 old_size = p%FREQ%FLOAD_ngrp_tot
3266 new_size = old_size + n
3269 p%FREQ%FLOAD_ngrp_tot = new_size
3278 allocate( grp_id_name(n) )
3279 allocate( id_ptr(n) )
3280 allocate( val_ptr(n) )
3287 p%FREQ%FLOAD_ngrp_DOF(old_size+i) = id_ptr(i)
3288 p%FREQ%FLOAD_ngrp_valre(old_size+i) = val_ptr(i)
3292 p%FREQ%FLOAD_ngrp_DOF(old_size+i) = id_ptr(i)
3293 p%FREQ%FLOAD_ngrp_valim(old_size+i) = val_ptr(i)
3297 write(*,*)
"Error this load set is not defined!"
3298 write(
ilog,*)
"Error this load set is not defined!"
3299 stop hecmw_exit_model
3301 p%FREQ%FLOAD_ngrp_GRPID(old_size+1:new_size) = gid
3303 p%FREQ%FLOAD_ngrp_ID(old_size+1:), p%FREQ%FLOAD_ngrp_TYPE(old_size+1:))
3305 deallocate( grp_id_name )
3306 deallocate( id_ptr )
3307 deallocate( val_ptr )
3308 nullify( grp_id_name )
3316 integer(kind=kint) :: ctrl
3317 character(len=HECMW_NAME_LEN) :: node_id(:)
3318 integer(kind=kint),
pointer :: dof_id(:)
3319 integer(kind=kint) :: node_id_len
3320 real(kind=kreal),
pointer :: value(:)
3322 character(len=HECMW_NAME_LEN) :: data_fmt, ss
3324 write(ss,*) node_id_len
3325 write(data_fmt,
'(a,a,a)')
'S', trim(adjustl(ss)),
'IR '
3345 integer(kind=kint) :: ctrl
3346 integer(kind=kint) :: counter
3349 integer(kind=kint) :: rcode
3350 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
3351 integer(kind=kint),
pointer :: dof_ids(:)
3352 integer(kind=kint),
pointer :: dof_ide(:)
3353 real(kind=kreal),
pointer :: val_ptr(:)
3354 integer(kind=kint) :: i, n, old_size, new_size
3355 integer(kind=kint) :: loadcase
3359 if( p%SOLID%file_type /=
kbcffstr)
return
3365 write(*,*)
'fstr control file error : !FACCELERATION : LOAD CASE must be 1 or 2'
3366 write(
ilog,*)
'fstr control file error : !FACCELERATION : LOAD CASE must be 1 or 2'
3367 stop hecmw_exit_input
3373 old_size = p%FREQ%FACC_ngrp_tot
3374 new_size = old_size + n
3377 p%FREQ%FACC_ngrp_tot = new_size
3384 allocate( grp_id_name(n) )
3385 allocate( dof_ids(n) )
3386 allocate( dof_ide(n) )
3387 allocate( val_ptr(n) )
3392 call node_grp_name_to_id_ex( p%MESH,
'!FACCELERATION', n, grp_id_name, p%FREQ%FACC_ngrp_ID(old_size+1:) )
3396 if( (dof_ids(i) < 1).or.(6 < dof_ids(i)).or.(dof_ide(i) < dof_ids(i)).or.(6 < dof_ide(i)) )
then
3397 write(*,*)
'fstr control file error : !FACCELERATION : range of dof_ids and dof_ide is from 1 to 6'
3398 write(
ilog,*)
'fstr control file error : !FACCELERATION : range of dof_ids and dof_ide is from 1 to 6'
3399 stop hecmw_exit_input
3402 p%FREQ%FACC_ngrp_type(old_size+i) = 10 * dof_ids(i) + dof_ide(i)
3405 p%FREQ%FACC_ngrp_valre(old_size+i) = val_ptr(i)
3407 p%FREQ%FACC_ngrp_valim(old_size+i) = val_ptr(i)
3411 deallocate( grp_id_name )
3412 deallocate( dof_ids )
3413 deallocate( dof_ide )
3414 deallocate( val_ptr )
3421 integer(kind=kint) :: ctrl
3422 character(len=HECMW_NAME_LEN) :: node_id(:)
3423 integer(kind=kint) :: node_id_len
3424 integer(kind=kint),
pointer :: dof_ids(:)
3425 integer(kind=kint),
pointer :: dof_ide(:)
3426 real(kind=kreal),
pointer :: value(:)
3428 character(len=HECMW_NAME_LEN) :: data_fmt, ss
3431 write(ss,*) node_id_len
3432 write(data_fmt,
'(a,a,a)')
'S', trim(adjustl(ss)),
'IIr '
3444 integer(kind=kint) :: ctrl
3445 integer(kind=kint) :: counter
3448 integer(kind=kint) :: filename_len
3449 character(len=HECMW_NAME_LEN) :: datafmt, ss
3452 filename_len = hecmw_filename_len
3453 write(ss,*) filename_len
3454 write(datafmt,
'(a,a,a)')
'F', trim(adjustl(ss)),
' '
3469 real(kind=kreal),
pointer :: array(:,:)
3470 integer(kind=kint) :: old_size, new_size, i, j
3471 real(kind=kreal),
pointer :: temp(:,:)
3473 if( old_size >= new_size )
then
3477 if(
associated( array ) )
then
3478 allocate(temp(0:6, old_size))
3481 allocate(array(0:6, new_size))
3485 array(j,i) = temp(j,i)
3490 allocate(array(0:6, new_size))
3500 integer(kind=kint) :: ctrl
3501 integer(kind=kint) :: counter
3504 integer(kind=kint) :: rcode
3505 character(HECMW_NAME_LEN) :: amp
3506 integer(kind=kint) :: amp_id
3507 integer(kind=kint) :: follow
3508 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
3509 real(kind=kreal),
pointer :: new_params(:,:)
3510 logical,
pointer :: fg_surface(:)
3511 integer(kind=kint),
pointer :: lid_ptr(:)
3512 integer(kind=kint) :: i, j, n, old_size, new_size
3513 integer(kind=kint) :: gid
3515 if( p%SOLID%file_type /=
kbcffstr )
return
3522 old_size = p%SOLID%DLOAD_ngrp_tot
3523 new_size = old_size + n
3524 p%SOLID%DLOAD_ngrp_tot = new_size
3533 allocate( grp_id_name(n))
3534 allocate( lid_ptr(n) )
3535 allocate( new_params(0:6,n))
3536 allocate( fg_surface(n))
3539 follow = p%SOLID%DLOAD_follow
3540 if( .not. p%PARAM%nlgeom ) follow = 0
3542 grp_id_name, hecmw_name_len, &
3543 lid_ptr, new_params )
3546 p%SOLID%DLOAD_follow = follow
3548 p%SOLID%DLOAD_ngrp_amp(old_size+i) = amp_id
3549 p%SOLID%DLOAD_ngrp_LID(old_size+i) = lid_ptr(i)
3551 p%SOLID%DLOAD_ngrp_params(j,old_size+i) = new_params(j,i)
3553 fg_surface(i) = ( lid_ptr(i) == 100 )
3555 p%SOLID%DLOAD_ngrp_GRPID(old_size+1:new_size) = gid
3557 deallocate( grp_id_name )
3558 deallocate( lid_ptr )
3559 deallocate( new_params )
3560 deallocate( fg_surface )
3561 nullify( grp_id_name )
3563 nullify( new_params )
3564 nullify( fg_surface )
3577 integer(kind=kint) :: ctrl
3578 integer(kind=kint) :: counter
3581 integer(kind=kint) :: rcode, gid
3582 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
3583 real(kind=kreal),
pointer :: val_ptr(:)
3584 integer(kind=kint) :: i, n, old_size, new_size
3586 if( p%SOLID%file_type /=
kbcffstr )
return
3592 old_size = p%SOLID%TEMP_ngrp_tot
3594 new_size = old_size + n
3596 new_size = old_size + 1
3602 allocate( grp_id_name(n))
3603 allocate( val_ptr(n) )
3607 p%SOLID%TEMP_irres, &
3608 p%SOLID%TEMP_tstep, &
3609 p%SOLID%TEMP_interval, &
3610 p%SOLID%TEMP_rtype, &
3611 grp_id_name, hecmw_name_len, &
3615 p%SOLID%TEMP_ngrp_val(old_size+i) = val_ptr(i)
3617 deallocate( val_ptr )
3620 p%SOLID%TEMP_ngrp_GRPID(old_size+1:new_size) = gid
3622 if( p%SOLID%TEMP_irres == 0 )
then
3623 p%SOLID%TEMP_ngrp_tot = new_size
3624 call node_grp_name_to_id_ex( p%MESH,
'!TEMPERATURE', &
3625 n, grp_id_name, p%SOLID%TEMP_ngrp_ID(old_size+1:))
3627 deallocate( grp_id_name )
3642 integer(kind=kint) :: ctrl
3643 integer(kind=kint) :: counter
3646 integer(kind=kint) :: rcode, incremental
3647 character(HECMW_NAME_LEN) :: amp
3648 integer(kind=kint) :: amp_id
3649 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
3650 real(kind=kreal),
pointer :: val_ptr(:)
3651 integer(kind=kint),
pointer :: id_ptr(:)
3652 integer(kind=kint) :: i, n, old_size, new_size
3653 integer(kind=kint) :: gid
3655 if( p%SOLID%file_type /=
kbcffstr )
return
3660 old_size = p%SOLID%SPRING_ngrp_tot
3661 new_size = old_size + n
3662 p%SOLID%SPRING_ngrp_tot = new_size
3670 allocate( grp_id_name(n))
3671 allocate( id_ptr(n) )
3672 allocate( val_ptr(n) )
3677 rcode =
fstr_ctrl_get_spring( ctrl, amp, grp_id_name, hecmw_name_len, id_ptr, val_ptr, incremental )
3682 p%SOLID%SPRING_ngrp_amp(old_size+i) = amp_id
3683 p%SOLID%SPRING_ngrp_DOF(old_size+i) = id_ptr(i)
3684 p%SOLID%SPRING_ngrp_val(old_size+i) = val_ptr(i)
3686 p%SOLID%SPRING_ngrp_GRPID(old_size+1:new_size) = gid
3687 call node_grp_name_to_id_ex( p%MESH,
'!SPRING', n, grp_id_name, p%SOLID%SPRING_ngrp_ID(old_size+1:))
3688 p%SOLID%SPRING_incremental(old_size+1:new_size) = incremental
3690 deallocate( grp_id_name )
3691 deallocate( id_ptr )
3692 deallocate( val_ptr )
3693 nullify( grp_id_name )
3706 integer(kind=kint) :: ctrl
3707 integer(kind=kint) :: counter
3710 integer(kind=kint) :: rcode
3728 integer(kind=kint) :: ctrl
3729 integer(kind=kint) :: counter
3732 integer(kind=kint) :: rcode
3733 integer(kind=kint) :: n
3734 character(len=HECMW_NAME_LEN) :: mName
3735 integer(kind=kint) :: i
3747 p%PARAM%analysis_n = n
3754 p%PARAM%eps = 1.0e-6
3755 p%PARAM%timepoint_id = 0
3766 if( rcode /= 0 )
then
3770 if(
associated(p%PARAM%timepoints) )
then
3771 do i=1,
size(p%PARAM%timepoints)
3772 if(
hecmw_streqr( p%PARAM%timepoints(i)%name, mname ) )
then
3773 p%PARAM%timepoint_id = i;
exit
3784 p%HEAT%STEP_DLTIME = p%PARAM%dtime
3785 p%HEAT%STEP_EETIME = p%PARAM%etime
3786 p%HEAT%STEP_DELMIN = p%PARAM%dtmin
3787 p%HEAT%STEP_DELMAX = p%PARAM%delmax
3788 p%HEAT%timepoint_id = p%PARAM%timepoint_id
3803 integer(kind=kint) :: ctrl
3804 integer(kind=kint) :: counter
3807 integer(kind=kint) :: rcode
3808 character(HECMW_NAME_LEN) :: amp
3809 integer(kind=kint) :: amp_id
3810 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
3811 real(kind=kreal),
pointer :: value(:)
3812 integer(kind=kint) :: i, j, n, m, head, id, member_n, old_size, new_size
3813 integer(kind=kint),
pointer :: member(:)
3814 integer(kind=kint) :: local_id, rtc
3820 allocate( grp_id_name(n))
3825 grp_id_name, hecmw_name_len,
value )
3836 else if( rtc < 0 )
then
3842 deallocate( grp_id_name )
3848 old_size = p%HEAT%T_FIX_tot
3849 new_size = old_size + m
3853 p%HEAT%T_FIX_tot = new_size
3856 member => p%HEAT%T_FIX_node(head:)
3862 member(1) = local_id
3864 else if( rtc < 0 )
then
3865 member_n =
get_grp_member( p%MESH,
'node_grp', grp_id_name(i), member )
3870 member => member( member_n+1 : )
3873 p%HEAT%T_FIX_val (id) = value(i)
3874 p%HEAT%T_FIX_ampl (id) = amp_id
3879 deallocate( grp_id_name )
3895 integer(kind=kint) :: ctrl
3896 integer(kind=kint) :: counter
3899 integer(kind=kint) :: rcode
3900 character(HECMW_NAME_LEN) :: amp
3901 integer(kind=kint) :: amp_id
3902 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
3903 real(kind=kreal),
pointer :: value(:)
3904 integer(kind=kint) :: i, j, n, m, head, id, member_n, old_size, new_size
3905 integer(kind=kint),
pointer :: member(:)
3906 integer(kind=kint) :: local_id, rtc
3912 allocate( grp_id_name(n))
3917 grp_id_name, hecmw_name_len,
value )
3928 else if( rtc < 0 )
then
3934 deallocate( grp_id_name )
3940 old_size = p%HEAT%Q_NOD_tot
3941 new_size = old_size + m
3945 p%HEAT%Q_NOD_tot = new_size
3948 member => p%HEAT%Q_NOD_node(head:)
3953 member(1) = local_id
3955 else if( rtc < 0 )
then
3956 member_n =
get_grp_member( p%MESH,
'node_grp', grp_id_name(i), member )
3960 if( i<n ) member => member( member_n+1 : )
3962 p%HEAT%Q_NOD_val (id) = value(i)
3963 p%HEAT%Q_NOD_ampl (id) = amp_id
3968 deallocate( grp_id_name )
3985 integer(kind=kint) :: ctrl
3986 integer(kind=kint) :: counter
3989 integer(kind=kint) :: rcode
3990 character(HECMW_NAME_LEN) :: amp
3991 integer(kind=kint) :: amp_id
3992 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
3993 integer(kind=kint),
pointer :: load_type(:)
3994 real(kind=kreal),
pointer :: value(:)
3995 integer(kind=kint) :: i, j, n, m, head, id, member_n, old_size, new_size
3996 integer(kind=kint),
pointer :: member(:)
3997 integer(kind=kint) :: local_id, rtc
4003 allocate( grp_id_name(n))
4004 allocate( load_type(n))
4009 grp_id_name, hecmw_name_len, load_type,
value )
4019 else if( rtc < 0 )
then
4025 deallocate( grp_id_name )
4026 deallocate( load_type )
4032 old_size = p%HEAT%Q_SUF_tot
4033 new_size = old_size + m
4038 p%HEAT%Q_SUF_tot = new_size
4041 member => p%HEAT%Q_SUF_elem(head:)
4046 member(1) = local_id
4048 else if( rtc < 0 )
then
4049 member_n =
get_grp_member( p%MESH,
'elem_grp', grp_id_name(i), member )
4053 if( i<n ) member => member( member_n+1 : )
4055 p%HEAT%Q_SUF_surf (id) = load_type(i)
4056 p%HEAT%Q_SUF_val (id) = value(i)
4057 p%HEAT%Q_SUF_ampl (id) = amp_id
4062 deallocate( grp_id_name )
4063 deallocate( load_type )
4080 integer(kind=kint) :: ctrl
4081 integer(kind=kint) :: counter
4084 integer(kind=kint) :: rcode
4085 character(HECMW_NAME_LEN) :: amp
4086 integer(kind=kint) :: amp_id
4087 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
4088 real(kind=kreal),
pointer :: value(:)
4089 integer(kind=kint) :: i, j, n, m, head, id, member_n, old_size, new_size
4090 integer(kind=kint),
pointer :: member1(:), member2(:)
4096 allocate( grp_id_name(n))
4101 grp_id_name, hecmw_name_len,
value )
4112 deallocate( grp_id_name )
4118 old_size = p%HEAT%Q_SUF_tot
4119 new_size = old_size + m
4124 p%HEAT%Q_SUF_tot = new_size
4127 member1 => p%HEAT%Q_SUF_elem(head:)
4128 member2 => p%HEAT%Q_SUF_surf(head:)
4131 member_n =
get_grp_member( p%MESH,
'surf_grp', grp_id_name(i), member1, member2 )
4133 member1 => member1( member_n+1 : )
4134 member2 => member2( member_n+1 : )
4137 p%HEAT%Q_SUF_val (id) = value(i)
4138 p%HEAT%Q_SUF_ampl (id) = amp_id
4143 deallocate( grp_id_name )
4161 integer(kind=kint) :: ctrl
4162 integer(kind=kint) :: counter
4165 integer(kind=kint) :: rcode
4166 character(HECMW_NAME_LEN) :: amp1, amp2
4167 integer(kind=kint) :: amp_id1, amp_id2
4168 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
4169 integer(kind=kint),
pointer :: load_type(:)
4170 real(kind=kreal),
pointer :: value(:)
4171 real(kind=kreal),
pointer :: shink(:)
4172 integer(kind=kint) :: i, j, n, m, head, id, member_n, old_size, new_size
4173 integer(kind=kint),
pointer :: member(:)
4174 integer(kind=kint) :: local_id, rtc
4180 allocate( grp_id_name(n))
4181 allocate( load_type(n))
4189 grp_id_name, hecmw_name_len, load_type,
value, shink )
4200 else if( rtc < 0 )
then
4206 deallocate( grp_id_name )
4207 deallocate( load_type )
4214 old_size = p%HEAT%H_SUF_tot
4215 new_size = old_size + m
4220 p%HEAT%H_SUF_tot = new_size
4223 member => p%HEAT%H_SUF_elem(head:)
4228 member(1) = local_id
4230 else if( rtc < 0 )
then
4231 member_n =
get_grp_member( p%MESH,
'elem_grp', grp_id_name(i), member )
4235 if( i<n ) member => member( member_n+1 : )
4237 p%HEAT%H_SUF_surf (id) = load_type(i)
4238 p%HEAT%H_SUF_val (id,1) = value(i)
4239 p%HEAT%H_SUF_val (id,2) = shink(i)
4240 p%HEAT%H_SUF_ampl (id,1) = amp_id1
4241 p%HEAT%H_SUF_ampl (id,2) = amp_id2
4246 deallocate( grp_id_name )
4247 deallocate( load_type )
4266 integer(kind=kint) :: ctrl
4267 integer(kind=kint) :: counter
4270 integer(kind=kint) :: rcode
4271 character(HECMW_NAME_LEN) :: amp1, amp2
4272 integer(kind=kint) :: amp_id1, amp_id2
4273 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
4274 real(kind=kreal),
pointer :: value(:)
4275 real(kind=kreal),
pointer :: shink(:)
4276 integer(kind=kint) :: i, j, n, m, head, id, member_n, old_size, new_size
4277 integer(kind=kint),
pointer :: member1(:), member2(:)
4283 allocate( grp_id_name(n))
4290 grp_id_name, hecmw_name_len,
value, shink )
4302 deallocate( grp_id_name )
4309 old_size = p%HEAT%H_SUF_tot
4310 new_size = old_size + m
4315 p%HEAT%H_SUF_tot = new_size
4318 member1 => p%HEAT%H_SUF_elem(head:)
4319 member2 => p%HEAT%H_SUF_surf(head:)
4322 member_n =
get_grp_member( p%MESH,
'surf_grp', grp_id_name(i), member1, member2 )
4324 member1 => member1( member_n+1 : )
4325 member2 => member2( member_n+1 : )
4328 p%HEAT%H_SUF_val (id,1) = value(i)
4329 p%HEAT%H_SUF_val (id,2) = shink(i)
4330 p%HEAT%H_SUF_ampl (id,1) = amp_id1
4331 p%HEAT%H_SUF_ampl (id,2) = amp_id2
4336 deallocate( grp_id_name )
4355 integer(kind=kint) :: ctrl
4356 integer(kind=kint) :: counter
4359 integer(kind=kint) :: rcode
4360 character(HECMW_NAME_LEN) :: amp1, amp2
4361 integer(kind=kint) :: amp_id1, amp_id2
4362 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
4363 integer(kind=kint),
pointer :: load_type(:)
4364 real(kind=kreal),
pointer :: value(:)
4365 real(kind=kreal),
pointer :: shink(:)
4366 integer(kind=kint) :: i, j, n, m, head, id, member_n, old_size, new_size
4367 integer(kind=kint),
pointer :: member(:)
4368 integer(kind=kint) :: local_id, rtc
4374 allocate( grp_id_name(n))
4375 allocate( load_type(n))
4382 grp_id_name, hecmw_name_len, load_type,
value, shink )
4393 else if( rtc < 0 )
then
4399 deallocate( grp_id_name )
4400 deallocate( load_type )
4407 old_size = p%HEAT%R_SUF_tot
4408 new_size = old_size + m
4413 p%HEAT%R_SUF_tot = new_size
4416 member => p%HEAT%R_SUF_elem(head:)
4421 member(1) = local_id
4423 else if( rtc < 0 )
then
4424 member_n =
get_grp_member( p%MESH,
'elem_grp', grp_id_name(i), member )
4428 if( i<n ) member => member( member_n+1 : )
4430 p%HEAT%R_SUF_surf (id) = load_type(i)
4431 p%HEAT%R_SUF_val (id,1) = value(i)
4432 p%HEAT%R_SUF_val (id,2) = shink(i)
4433 p%HEAT%R_SUF_ampl (id,1) = amp_id1
4434 p%HEAT%R_SUF_ampl (id,2) = amp_id2
4439 deallocate( grp_id_name )
4440 deallocate( load_type )
4459 integer(kind=kint) :: ctrl
4460 integer(kind=kint) :: counter
4463 integer(kind=kint) :: rcode
4464 character(HECMW_NAME_LEN) :: amp1, amp2
4465 integer(kind=kint) :: amp_id1, amp_id2
4466 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
4467 real(kind=kreal),
pointer :: value(:)
4468 real(kind=kreal),
pointer :: shink(:)
4469 integer(kind=kint) :: i, j, n, m, head, id, member_n, old_size, new_size
4470 integer(kind=kint),
pointer :: member1(:), member2(:)
4476 allocate( grp_id_name(n))
4494 deallocate( grp_id_name )
4501 old_size = p%HEAT%R_SUF_tot
4502 new_size = old_size + m
4507 p%HEAT%R_SUF_tot = new_size
4510 member1 => p%HEAT%R_SUF_elem(head:)
4511 member2 => p%HEAT%R_SUF_surf(head:)
4514 member_n =
get_grp_member( p%MESH,
'surf_grp', grp_id_name(i), member1, member2 )
4516 member1 => member1( member_n+1 : )
4517 member2 => member2( member_n+1 : )
4520 p%HEAT%R_SUF_val (id,1) = value(i)
4521 p%HEAT%R_SUF_val (id,2) = shink(i)
4522 p%HEAT%R_SUF_ampl (id,1) = amp_id1
4523 p%HEAT%R_SUF_ampl (id,2) = amp_id2
4528 deallocate( grp_id_name )
4544 integer(kind=kint) :: ctrl
4545 integer(kind=kint) :: counter
4548 integer(kind=kint) :: rcode
4550 rcode =
fstr_ctrl_get_eigen( ctrl, p%EIGEN%nget, p%EIGEN%tolerance, p%EIGEN%maxiter, p%EIGEN%sigma)
4566 integer(kind=kint) :: ctrl
4567 integer(kind=kint) :: counter
4569 integer(kind=kint) :: rcode
4570 character(HECMW_NAME_LEN) :: grp_id_name(1)
4571 integer(kind=kint) :: grp_id(1)
4588 grp_id_name(1), hecmw_name_len, &
4595 write(*,*)
'### Error: !DYNAMIC mass matrix type must be 1 (lumped) or 2 (consistent)'
4596 write(
ilog,*)
'### Error: !DYNAMIC mass matrix type must be 1 (lumped) or 2 (consistent)'
4602 (p%DYN%idx_eqa /= 1 .or. p%DYN%idx_resp /= 1) )
then
4603 write(*,*)
'### Error: consistent mass matrix is available only for implicit transient analysis'
4604 write(
ilog,*)
'### Error: consistent mass matrix is available only for implicit transient analysis'
4610 if (p%DYN%idx_resp == 1)
then
4612 p%DYN%ngrp_monit = grp_id(1)
4614 read(grp_id_name,*) p%DYN%ngrp_monit
4627 integer(kind=kint) :: ctrl
4628 integer(kind=kint) :: counter
4631 integer(kind=kint) :: rcode
4632 integer(kind=kint) :: vType
4633 character(HECMW_NAME_LEN) :: amp, rotc_name(1)
4634 integer(kind=kint) :: amp_id, rotc_id(1), n_rotc
4635 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
4636 integer(kind=kint),
pointer :: dof_ids (:)
4637 integer(kind=kint),
pointer :: dof_ide (:)
4638 real(kind=kreal),
pointer :: val_ptr(:)
4639 integer(kind=kint) :: i, j, n, old_size, new_size
4640 integer(kind=kint) :: gid
4651 if( rotc_name(1) /=
' ' )
then
4652 p%SOLID%VELOCITY_ngrp_rot = p%SOLID%VELOCITY_ngrp_rot + 1
4653 n_rotc = p%SOLID%VELOCITY_ngrp_rot
4654 call node_grp_name_to_id_ex( p%MESH,
'!VELOCITY,ROT_CENTER=', 1, rotc_name, rotc_id)
4659 old_size = p%SOLID%VELOCITY_ngrp_tot
4660 new_size = old_size + n
4661 p%SOLID%VELOCITY_ngrp_tot = new_size
4671 allocate( grp_id_name(n))
4672 allocate( dof_ids(n))
4673 allocate( dof_ide(n))
4674 allocate( val_ptr(n) )
4679 grp_id_name, hecmw_name_len, &
4680 dof_ids, dof_ide, val_ptr )
4682 p%SOLID%VELOCITY_type = vtype
4683 if( vtype ==
kbcinitial ) p%DYN%VarInitialize = .true.
4685 call node_grp_name_to_id_ex( p%MESH,
'!VELOCITY', &
4686 n, grp_id_name, p%SOLID%VELOCITY_ngrp_ID(old_size+1:))
4687 p%SOLID%VELOCITY_ngrp_GRPID(old_size+1:new_size) = gid
4690 p%SOLID%VELOCITY_ngrp_rotID(old_size+1:) = n_rotc
4691 p%SOLID%VELOCITY_ngrp_centerID(old_size+1:) = rotc_id(1)
4695 if( (dof_ids(i) < 1).or.(6 < dof_ids(i)).or.(dof_ide(i) < 1).or.(6 < dof_ide(i)) )
then
4696 write(
ilog,*)
'fstr control file error : !VELOCITY : range of dof_ids and dof_ide is from 1 to 6'
4697 stop hecmw_exit_input
4699 p%SOLID%VELOCITY_ngrp_type(j) = 10 * dof_ids(i) + dof_ide(i)
4700 p%SOLID%VELOCITY_ngrp_amp(j) = amp_id
4701 p%SOLID%VELOCITY_ngrp_val(old_size+i) = val_ptr(i)
4705 deallocate( grp_id_name )
4706 deallocate( dof_ids )
4707 deallocate( dof_ide )
4708 deallocate( val_ptr )
4709 nullify( grp_id_name )
4724 integer(kind=kint) :: ctrl
4725 integer(kind=kint) :: counter
4728 integer(kind=kint) :: rcode
4729 integer(kind=kint) :: aType
4730 character(HECMW_NAME_LEN) :: amp
4731 integer(kind=kint) :: amp_id
4732 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
4733 integer(kind=kint),
pointer :: dof_ids (:)
4734 integer(kind=kint),
pointer :: dof_ide (:)
4735 real(kind=kreal),
pointer :: val_ptr(:)
4736 integer(kind=kint) :: i, j, n, old_size, new_size
4737 integer(kind=kint) :: gid
4744 old_size = p%SOLID%ACCELERATION_ngrp_tot
4745 new_size = old_size + n
4746 p%SOLID%ACCELERATION_ngrp_tot = new_size
4754 allocate( grp_id_name(n))
4755 allocate( dof_ids(n))
4756 allocate( dof_ide(n))
4757 allocate( val_ptr(n))
4762 grp_id_name, hecmw_name_len, &
4763 dof_ids, dof_ide, val_ptr)
4765 p%SOLID%ACCELERATION_type = atype
4766 if( atype ==
kbcinitial )p%DYN%VarInitialize = .true.
4768 call node_grp_name_to_id_ex( p%MESH,
'!ACCELERATION', &
4769 n, grp_id_name, p%SOLID%ACCELERATION_ngrp_ID(old_size+1:))
4770 p%SOLID%ACCELERATION_ngrp_GRPID(old_size+1:new_size) = gid
4774 if( (dof_ids(i) < 1).or.(6 < dof_ids(i)).or.(dof_ide(i) < 1).or.(6 < dof_ide(i)) )
then
4775 write(
ilog,*)
'fstr control file error : !ACCELERATION : range of dof_ids and dof_ide is from 1 to 6'
4776 stop hecmw_exit_input
4778 p%SOLID%ACCELERATION_ngrp_type(j) = 10 * dof_ids(i) + dof_ide(i)
4779 p%SOLID%ACCELERATION_ngrp_amp(j) = amp_id
4780 p%SOLID%ACCELERATION_ngrp_val(old_size+i) = val_ptr(i)
4784 deallocate( grp_id_name )
4785 deallocate( dof_ids )
4786 deallocate( dof_ide )
4787 deallocate( val_ptr )
4788 nullify( grp_id_name )
4805 integer(kind=kint) :: ctrl
4806 integer(kind=kint) :: counter
4809 integer(kind=kint) :: rcode
4855 integer(kind=kint) :: ctrl
4856 type (hecmwST_local_mesh) :: hecMESH
4857 type (fstr_solid ) :: fstrSOLID
4858 write(
ilog,*)
'### Error : In !BOUNDARY, TYPE=NASTRAN is not supported.'
4868 integer(kind=kint) :: ctrl
4872 integer(kind=kint) :: rcode
4876 p%PARAM%fric_cone_follow, p%PARAM%eps_fric_band )
4887 integer(kind=kint) :: ctrl
4890 integer(kind=kint) :: rcode, nid
4891 character(len=HECMW_NAME_LEN) :: data_fmt
4893 data_fmt =
'SOLUTION,MATERIAL '
4906 type(hecmwst_local_mesh),
pointer :: hecMESH
4907 integer(kind=kint) :: n, i, sgrp_id, ngrp_id
4909 n = hecmesh%contact_pair%n_pair
4911 if( hecmesh%contact_pair%type(i) /= hecmw_contact_type_surf_surf ) cycle
4912 sgrp_id = hecmesh%contact_pair%slave_grp_id(i)
4915 hecmesh%contact_pair%type(i) = hecmw_contact_type_node_surf
4916 hecmesh%contact_pair%slave_grp_id(i) = ngrp_id
4933 type(hecmwst_local_mesh),
pointer :: hecMESH
4934 integer(kind=kint),
allocatable :: rot_node(:), n_rot(:), n_rot_all(:), n_explicit(:), rot_grp(:), src(:)
4935 integer(kind=kint),
allocatable :: new_index(:), new_list(:)
4936 character(len=HECMW_NAME_LEN),
allocatable :: new_name(:)
4937 logical,
allocatable :: is_rot(:), in_all(:), is_explicit(:)
4938 integer(kind=kint) :: icel, is, ie, nn, i, j, k, m, n, ig, n_new, first_id, ids, ide
4941 if( hecmesh%n_dof /= 3 )
return
4944 allocate( in_all(hecmesh%n_node) )
4946 ig =
get_grp_id( hecmesh,
'node_grp',
'ALL' )
4948 is = hecmesh%node_group%grp_index(ig-1)
4949 in_all(hecmesh%node_group%grp_item(is+1:hecmesh%node_group%grp_index(ig))) = .true.
4952 allocate( rot_node(hecmesh%n_node), is_explicit(hecmesh%n_node) )
4954 is_explicit = .false.
4955 do icel = 1, hecmesh%n_elem
4956 if( .not. hecmw_is_etype_33struct(hecmesh%elem_type(icel)) ) cycle
4957 nn = hecmw_get_max_node(hecmesh%elem_type(icel))/2
4958 is = hecmesh%elem_node_index(icel-1)
4960 rot_node(hecmesh%elem_node_item(is+j)) = hecmesh%elem_node_item(is+nn+j)
4961 if( in_all(hecmesh%elem_node_item(is+nn+j)) ) is_explicit(hecmesh%elem_node_item(is+j)) = .true.
4966 n = count( rot_node > 0 )
4967 call hecmw_allreduce_i1( hecmesh, n, hecmw_max )
4970 allocate( n_rot(hecmesh%node_group%n_grp), n_rot_all(hecmesh%node_group%n_grp) )
4971 allocate( n_explicit(hecmesh%node_group%n_grp) )
4972 do ig = 1, hecmesh%node_group%n_grp
4973 is = hecmesh%node_group%grp_index(ig-1)
4974 n_rot(ig) = count( rot_node(hecmesh%node_group%grp_item(is+1:hecmesh%node_group%grp_index(ig))) > 0 )
4975 n_explicit(ig) = count( is_explicit(hecmesh%node_group%grp_item(is+1:hecmesh%node_group%grp_index(ig))) )
4978 call hecmw_allreduce_i( hecmesh, n_rot_all, hecmesh%node_group%n_grp, hecmw_max )
4980 do i = 1, p%SOLID%SPRING_ngrp_tot
4981 if( p%SOLID%SPRING_ngrp_DOF(i) > 3 .and. n_rot_all(p%SOLID%SPRING_ngrp_ID(i)) > 0 ) &
4984 do i = 1, p%SOLID%VELOCITY_ngrp_tot
4985 if( p%SOLID%VELOCITY_ngrp_rotID(i) > 0 ) cycle
4986 if( mod(p%SOLID%VELOCITY_ngrp_type(i), 10) > 3 .and. n_rot_all(p%SOLID%VELOCITY_ngrp_ID(i)) > 0 ) &
4989 do i = 1, p%SOLID%ACCELERATION_ngrp_tot
4990 if( mod(p%SOLID%ACCELERATION_ngrp_type(i), 10) > 3 .and. n_rot_all(p%SOLID%ACCELERATION_ngrp_ID(i)) > 0 ) &
4993 do i = 1, p%FREQ%FLOAD_ngrp_tot
4995 if( p%FREQ%FLOAD_ngrp_DOF(i) > 3 .and. n_rot_all(p%FREQ%FLOAD_ngrp_ID(i)) > 0 ) &
4999 do i = 1, p%FREQ%FACC_ngrp_tot
5000 if( mod(p%FREQ%FACC_ngrp_type(i), 10) > 3 .and. n_rot_all(p%FREQ%FACC_ngrp_ID(i)) > 0 ) &
5003 do i = 1, hecmesh%mpc%n_mpc
5004 do j = hecmesh%mpc%mpc_index(i-1)+1, hecmesh%mpc%mpc_index(i)
5005 if( hecmesh%mpc%mpc_dof(j) > 3 .and. rot_node(hecmesh%mpc%mpc_item(j)) > 0 ) &
5011 allocate( rot_grp(hecmesh%node_group%n_grp) )
5013 do i = 1, p%SOLID%BOUNDARY_ngrp_tot
5014 if( p%SOLID%BOUNDARY_ngrp_rotID(i) > 0 ) cycle
5015 ig = p%SOLID%BOUNDARY_ngrp_ID(i)
5016 if( mod(p%SOLID%BOUNDARY_ngrp_type(i), 10) <= 3 .or. n_rot_all(ig) == 0 ) cycle
5020 do i = 1, p%SOLID%CLOAD_ngrp_tot
5021 if( p%SOLID%CLOAD_ngrp_rotID(i) > 0 .or. p%SOLID%CLOAD_ngrp_DOF(i) <= 3 ) cycle
5022 ig = p%SOLID%CLOAD_ngrp_ID(i)
5023 is = hecmesh%node_group%grp_index(ig-1)
5024 ie = hecmesh%node_group%grp_index(ig)
5025 if( any( rot_node(hecmesh%node_group%grp_item(is+1:ie)) == 0 .and. &
5027 '### Error: !CLOAD : dof 4-6 is given to nodes without rotational dof' )
5032 n_new = count( rot_grp == -1 )
5033 if( n_new == 0 )
return
5034 allocate( new_name(n_new), new_index(0:n_new), new_list(sum(n_rot, mask=rot_grp == -1)) )
5038 do ig = 1, hecmesh%node_group%n_grp
5039 if( rot_grp(ig) /= -1 ) cycle
5041 write( new_name(k),
'(a,i0)' )
'FSTR_ROT_', ig
5042 do j = hecmesh%node_group%grp_index(ig-1)+1, hecmesh%node_group%grp_index(ig)
5043 if( rot_node(hecmesh%node_group%grp_item(j)) == 0 ) cycle
5045 new_list(m) = rot_node(hecmesh%node_group%grp_item(j))
5050 call append_new_groups( hecmesh,
'node_grp', n_new, new_name, new_index, new_list, first_id )
5051 where( rot_grp > 0 ) rot_grp = rot_grp + first_id - 1
5054 n = p%SOLID%BOUNDARY_ngrp_tot
5056 allocate( src(2*n), is_rot(2*n) )
5059 ide = mod(p%SOLID%BOUNDARY_ngrp_type(i), 10)
5060 if( p%SOLID%BOUNDARY_ngrp_rotID(i) <= 0 .and. ide > 3 .and. rot_grp(p%SOLID%BOUNDARY_ngrp_ID(i)) > 0 )
then
5061 if( p%SOLID%BOUNDARY_ngrp_type(i)/10 <= 3 )
then
5083 p%SOLID%BOUNDARY_ngrp_tot = m
5085 if( p%SOLID%BOUNDARY_ngrp_rotID(k) > 0 ) cycle
5086 ig = p%SOLID%BOUNDARY_ngrp_ID(k)
5087 ids = p%SOLID%BOUNDARY_ngrp_type(k)/10
5088 ide = mod(p%SOLID%BOUNDARY_ngrp_type(k), 10)
5089 if( ide <= 3 .or. rot_grp(ig) <= 0 ) cycle
5090 if( is_rot(k) )
then
5091 p%SOLID%BOUNDARY_ngrp_ID(k) = rot_grp(ig)
5092 p%SOLID%BOUNDARY_ngrp_type(k) = 10 * (max(ids, 4) - 3) + (ide - 3)
5094 p%SOLID%BOUNDARY_ngrp_type(k) = 10 * ids + 3
5099 do i = 1, p%SOLID%CLOAD_ngrp_tot
5100 if( p%SOLID%CLOAD_ngrp_rotID(i) > 0 .or. p%SOLID%CLOAD_ngrp_DOF(i) <= 3 ) cycle
5101 p%SOLID%CLOAD_ngrp_ID(i) = rot_grp(p%SOLID%CLOAD_ngrp_ID(i))
5102 p%SOLID%CLOAD_ngrp_DOF(i) = p%SOLID%CLOAD_ngrp_DOF(i) - 3
5108 character(len=*) :: header_name
5111 ' : dof 4-6 of beam/shell nodes in a mesh with solid elements is not supported' )
5116 character(len=*) :: header_name
5119 ' : dof 4-6 is given to beam/shell nodes with explicit dummy nodes; give it as dof 1-3 of the dummy nodes' )
5124 integer(kind=kint),
pointer :: array(:)
5125 integer(kind=kint),
intent(in) :: src(:), n
5126 integer(kind=kint),
pointer :: new_array(:)
5128 allocate( new_array(n) )
5129 new_array(1:n) = array(src(1:n))
5136 real(kind=kreal),
pointer :: array(:)
5137 integer(kind=kint),
intent(in) :: src(:), n
5138 real(kind=kreal),
pointer :: new_array(:)
5140 allocate( new_array(n) )
5141 new_array(1:n) = array(src(1:n))
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_open(char *filename)
int fstr_ctrl_get_c_h_name(int *ctrl, char *header_name, int *buff_size)
int fstr_ctrl_get_data_ex(int *ctrl, int *line_no, const char *format,...)
integer(kind=kint) function fstr_ctrl_get_fload(ctrl, node_id, node_id_len, dof_id, value)
integer(kind=kint) function fstr_ctrl_get_facceleration(ctrl, node_id, node_id_len, dof_ids, dof_ide, value)
This module encapsulate the basic functions of all elements provide by this software.
integer function numofshellthicknessquadpoints(etype)
Obtains the number of through-thickness quadrature points of a shell element.
integer function numofquadpoints(fetype)
Obtains the number of quadrature points of the element.
integer(kind=kind(2)) function getspacedimension(etype)
Obtain the space dimension of the element.
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 control file data obtaining functions for dynamic analysis.
integer(kind=kint) function fstr_ctrl_get_dynamic(ctrl, nlgeom, idx_eqa, idx_resp, n_step, t_start, t_end, t_delta, gamma, beta, idx_mas, idx_dmp, ray_m, ray_k, nout, node_id, node_id_len, nout_monit, iout_list)
Read in !DYNAMIC.
integer(kind=kint) function fstr_ctrl_get_velocity(ctrl, vType, amp, node_id, node_id_len, dof_ids, dof_ide, value)
Read in !VELOCITY.
integer(kind=kint) function fstr_ctrl_get_acceleration(ctrl, aType, amp, node_id, node_id_len, dof_ids, dof_ide, value)
Read in !ACCELERATION.
This module contains control file data obtaining functions for dynamic analysis.
integer(kind=kint) function fstr_ctrl_get_eigen(ctrl, nget, tolerance, maxiter, sigma)
Read in !EIGEN (struct)
This module contains control file data obtaining functions for heat conductive analysis.
integer(kind=kint) function fstr_ctrl_get_dflux(ctrl, amp, elem_grp_name, elem_grp_name_len, load_type, value)
Read in !DFLUX (heat)
integer(kind=kint) function fstr_ctrl_get_sflux(ctrl, amp, surface_grp_name, surface_grp_name_len, value)
Read in !SFLUX (heat)
integer(kind=kint) function fstr_ctrl_get_weldline(ctrl, hecMESH, grp_name_len, weldline)
Read in !WELD_LINE (heat)
integer(kind=kint) function fstr_ctrl_get_heat(ctrl, dt, etime, dtmin, deltmx, itmax, eps, tpname, beta)
Read in !HEAT.
integer(kind=kint) function fstr_ctrl_get_film(ctrl, amp1, amp2, elem_grp_name, elem_grp_name_len, load_type, value, sink)
Read in !FILM (heat)
integer(kind=kint) function fstr_ctrl_get_radiate(ctrl, amp1, amp2, elem_grp_name, elem_grp_name_len, load_type, value, sink)
Read in !RADIATE (heat)
integer(kind=kint) function fstr_ctrl_get_cflux(ctrl, amp, node_grp_name, node_grp_name_len, value)
Read in !CFLUX (heat)
integer(kind=kint) function fstr_ctrl_get_fixtemp(ctrl, amp, node_grp_name, node_grp_name_len, value)
Read in !FIXTEMP.
integer(kind=kint) function fstr_ctrl_get_sfilm(ctrl, amp1, amp2, surface_grp_name, surface_grp_name_len, value, sink)
Read in !SFILM (heat)
integer(kind=kint) function fstr_ctrl_get_sradiate(ctrl, amp1, amp2, surface_grp_name, surface_grp_name_len, value, sink)
Read in !SRADIATE (heat)
This module manages read in of various material properties.
integer function fstr_ctrl_get_dashpot_d(ctrl, mattype, nlgeom, matval_i, dict)
Read in !DASHPOT_D.
integer function fstr_ctrl_get_hyperelastic(ctrl, mattype, nlgeom, matval)
Read in !HYPERELASTIC.
integer function fstr_ctrl_get_viscoelasticity(ctrl, mattype, nlgeom, dict)
Read in !VISCOELASTIC.
integer function fstr_ctrl_get_viscoplasticity(ctrl, mattype, nlgeom, dict)
Read in !CREEP.
integer function fstr_ctrl_get_usermaterial(ctrl, mattype, nlgeom, nstatus, matval)
Read in !USER_MATERIAL.
integer function fstr_ctrl_get_expansion_coeff(ctrl, matval, dict)
Read in !EXPANSION_COEFF.
integer function fstr_ctrl_get_trs(ctrl, mattype, matval)
Read in !TRS.
integer function fstr_ctrl_get_elasticity(ctrl, mattype, nlgeom, matval, dict)
Read in !ELASTIC.
integer function fstr_ctrl_get_plasticity(ctrl, mattype, nlgeom, matval, mattable, dict)
Read in !PLASTIC.
integer function fstr_ctrl_get_dashpot_a(ctrl, mattype, nlgeom, matval_i, dict)
Read in !DASHPOT_A.
integer function fstr_ctrl_get_material(ctrl, matname)
Read in !MATERIAL.
integer function fstr_ctrl_get_density(ctrl, matval)
Read in !DENSITY.
integer function fstr_ctrl_get_spring_a(ctrl, mattype, nlgeom, matval_i, dict)
Read in !SPRING_A.
integer function fstr_ctrl_get_rayleigh_damping(ctrl, matval, is_RD)
Read in !DAMPING (element-wise Rayleigh damping)
integer function fstr_ctrl_get_fluid(ctrl, mattype, nlgeom, matval, dict)
Read in !FLUID.
integer function fstr_ctrl_get_spring_d(ctrl, mattype, nlgeom, matval_i, dict)
Read in !SPRING_D.
This module contains control file data obtaining functions for static analysis.
integer(kind=kint) function fstr_ctrl_get_static(ctrl, dtime, etime, itime, eps, restart_nout, idx_elpl, iout_list, sig_y0, h_dash, nout, nout_monit, node_monit_1, elem_monit_1, intg_monit_1)
Read in !STATIC.
integer(kind=kint) function fstr_ctrl_get_boundary(ctrl, amp, node_id, node_id_len, dof_ids, dof_ide, value)
Read in !BOUNDARY.
integer(kind=kint) function fstr_ctrl_get_reftemp(ctrl, value)
Read in !REFTEMP.
integer(kind=kint) function fstr_ctrl_get_spring(ctrl, amp, node_id, node_id_len, dof_id, value, incremental)
Read in !SPRING.
integer(kind=kint) function fstr_ctrl_get_dload(ctrl, amp, follow, element_id, element_id_len, load_type, params)
Read in !DLOAD.
integer(kind=kint) function fstr_ctrl_get_temperature(ctrl, irres, tstep, tintl, rtype, node_id, node_id_len, value)
Read in !TEMPERATURE.
integer(kind=kint) function fstr_ctrl_get_cload(ctrl, amp, node_id, node_id_len, dof_id, value)
Read in !CLOAD.
integer function fstr_ctrl_get_userload(ctrl)
Read in !ULOAD.
This module contains auxiliary functions in calculation setup.
subroutine fstr_ctrl_err_stop
subroutine dload_grp_name_to_id_ex(hecMESH, n, grp_id_name, fg_surface, grp_ID)
subroutine fstr_setup_visualize(ctrl, hecMESH)
subroutine nodesurf_grp_name_to_id_ex(hecMESH, header_name, n, grp_id_name, grp_ID, grp_TYPE)
integer(kind=kint) function get_local_member_index(hecMESH, type_name, name, local_id)
subroutine amp_name_to_id(hecMESH, header_name, aname, id)
subroutine append_new_amplitude(amp, name, type_def, type_time, type_val, np, val, table)
Append new amplitude table at the end of existing amplitude tables.
subroutine append_node_grp_from_surf_grp(hecMESH, sgrp_id, ngrp_id)
subroutine fstr_setup_util_err_stop(msg)
subroutine reallocate_real(array, n)
subroutine reallocate_integer(array, n)
integer(kind=kint) function get_sorted_local_member_index(hecMESH, hecPARAM, type_name, name, local_id)
This module contains auxiliary functions in calculation setup.
subroutine append_new_groups(hecMESH, grp_type_name, n, names, index, list, first_id)
Append n groups at once; group i holds list(index(i-1)+1:index(i)).
subroutine hecmw_expand_real_array2(array, column, old_size, new_size)
integer(kind=kint) function node_global_to_local(hecMESH, list, n)
subroutine hecmw_expand_integer_array(array, old_size, new_size)
subroutine node_grp_name_to_id_ex(hecMESH, header_name, n, grp_id_name, grp_ID)
subroutine hecmw_expand_real_array(array, old_size, new_size)
integer(kind=kint) function get_grp_member(hecMESH, grp_type_name, name, member1, member2)
subroutine hecmw_expand_integer_array2(array, column, old_size, new_size)
subroutine surf_grp_name_to_id_ex(hecMESH, header_name, n, grp_id_name, grp_ID)
integer(kind=kint) function get_grp_id(hecMESH, grp_type_name, name)
integer(kind=kint) function get_grp_member_n(hecMESH, grp_type_name, name)
logical function hecmw_streqr(s1, s2)
subroutine elem_grp_name_to_id_ex(hecMESH, header_name, n, grp_id_name, grp_ID)
This module provide functions for elastoplastic calculation.
character(len=128) function, public planestressj2errormessage(ierr)
subroutine, public checkplanestressj2material(matl, ierr)
Shared finite-rotation nodal kinematics and rotation algebra.
logical function, public fstr_has_finite_rotation_kinematics(hecMESH, fstrSOLID)
logical function, public fstr_uses_finite_rotation_kinematics(etype, nn, material)
subroutine, public fstr_mark_finite_rotation_nodes(hecMESH, fstrSOLID, ndof, shell_node_mode)
This module provides functions to read in data from control file and do necessary preparation for fol...
subroutine fstr_setup_boundary(ctrl, counter, P)
Read in !BOUNDARY !
subroutine fstr_setup_eigenread(ctrl, counter, P)
Read in !EIGENREAD !
subroutine fstr_setup_static(ctrl, counter, P)
Read in !STATIC(old) !
subroutine fstr_setup_mpc(ctrl, counter, P)
Read in !MPC !
integer(kind=kint) function fstr_setup_initial(ctrl, cond, hecMESH)
subroutine fstr_setup_sradiate(ctrl, counter, P)
Read in !SRADIATE !
subroutine fstr_setup_radiate(ctrl, counter, P)
Read in !RADIATE !
subroutine fstr_setup_element_activation(ctrl, counter, P)
Read in !ELEMENT_ACTIVATION.
subroutine fstr_convert_rotation_dof(P)
Move dof 4-6 of 641/761/781 nodes to their rotational dummy nodes !
subroutine fstr_setup_fload(ctrl, counter, P)
Read in !FLOAD !
subroutine fstr_setup_contactalgo(ctrl, P)
Read in !CONTACT !
subroutine fstr_setup_dload(ctrl, counter, P)
Read in !DLOAD.
subroutine fstr_eigen_init(fstrEIG)
Initial setting of eigen ca;culation.
subroutine fstr_check_shell_j2_inputs(hecMESH, fstrSOLID, fstrPARAM)
subroutine fstr_setup_dflux(ctrl, counter, P)
Read in !DFLUX !
subroutine fstr_setup_post_phys_alloc(phys, NDOF, n_node, n_elem)
Initial setting of postprecessor.
subroutine fstr_solid_finalize(fstrSOLID)
Finalizer of fstr_solid.
subroutine fstr_setup_cflux(ctrl, counter, P)
Read in !CFLUX !
subroutine fstr_smoothed_element_calcmaxcon(hecMESH, fstrSOLID)
subroutine fstr_smoothed_element_init(hecMESH, fstrSOLID)
subroutine fstr_setup_amplitude(ctrl, P)
Read in !AMPLITUDE !
subroutine rotation_dof_err_stop(header_name)
subroutine fstr_check_up_inputs(hecMESH, fstrSOLID)
subroutine fstr_convert_contact_type(hecMESH)
Convert SURF-SURF contact to NODE-SURF contact !
subroutine remap_real_array(array, src, n)
subroutine fstr_setup_couple(ctrl, counter, P)
Read in !COUPLE !
subroutine fstr_check_shell_gauss_output(hecMESH, fstrSOLID)
subroutine fstr_solid_init(hecMESH, fstrSOLID)
Initializer of structure fstr_solid.
subroutine fstr_setup_step(ctrl, counter, P)
Read in !STEP !
subroutine fstr_dynamic_init(fstrDYNAMIC)
Initial setting of dynamic calculation.
subroutine fstr_setup_solid_nastran(ctrl, hecMESH, fstrSOLID)
subroutine fstr_setup_solver(ctrl, counter, P)
Read in !SOLVER !
subroutine remap_integer_array(array, src, n)
subroutine fstr_setup_restart(ctrl, nout, version)
Read in !RESTART !
subroutine fstr_setup_cload(ctrl, counter, P)
Read in !CLOAD !
subroutine fstr_heat_init(fstrHEAT)
Initial setting of heat analysis.
subroutine fstr_setup_output_sstype(ctrl, P)
Read in !OUTPUT_SSTYPE !
subroutine fstr_setup_write(ctrl, counter, P)
Read in !WRITE !
subroutine fstr_setup_eigen(ctrl, counter, P)
Read in !EIGEN !
subroutine fstr_setup_film(ctrl, counter, P)
Read in !FILM !
subroutine fstr_setup_solution(ctrl, counter, P)
Read in !SOLUTION !
subroutine fstr_setup_acceleration(ctrl, counter, P)
Read in !ACCELERATION !
subroutine fstr_setup_velocity(ctrl, counter, P)
Read in !VELOCITY !
subroutine fstr_setup_heat(ctrl, counter, P)
Read in !HEAT !
subroutine fstr_setup_temperature(ctrl, counter, P)
Read in !TEMPERATURE !
recursive subroutine fstr_solid_physic_val_finalize(phys)
subroutine fstr_setup_dynamic(ctrl, counter, P)
Read in !DYNAMIC !
subroutine fstr_setup_facceleration(ctrl, counter, P)
Read in !FACCELERATION !
subroutine fstr_setup_nonlinear_solver(ctrl, counter, P)
Read in !NONLINEAR_SOLVER !
subroutine explicit_dummy_node_err_stop(header_name)
subroutine fstr_setup(cntl_filename, hecMESH, fstrPARAM, fstrSOLID, fstrEIG, fstrHEAT, fstrDYNAMIC, fstrCPL, fstrFREQ)
Read in and initialize control data !
subroutine fstr_setup_step_convergence(stepinfo, cpname, cnvparam, istep)
Fix the convergence criteria of a step from !STEP and the !CONVERG_PARAM it refers to.
integer function fstr_setup_orientation(ctrl, hecMESH, cnt, coordsys)
Read in !ORIENTATION.
subroutine fstr_setup_fixtemp(ctrl, counter, P)
Read in !FIXTEMP !
subroutine fstr_element_init(hecMESH, fstrSOLID, solution_type)
Initialize elements info in static calculation.
subroutine fstr_setup_reftemp(ctrl, counter, P)
Read in !REFTEMP !
subroutine fstr_setup_echo(ctrl, counter, P)
Read in !ECHO !
subroutine fstr_setup_post(ctrl, P)
subroutine fstr_expand_dload_array(array, old_size, new_size)
Reset !DLOAD !
subroutine fstr_setup_sfilm(ctrl, counter, P)
Read in !SFILM !
subroutine fstr_dynamic_alloc(hecMESH, fstrDYNAMIC)
Initial setting of dynamic calculation.
subroutine fstr_setup_spring(ctrl, counter, P)
Read in !SPRING !
subroutine fstr_dynamic_finalize(fstrDYNAMIC)
Finalizer of fstr_solid.
subroutine fstr_setup_sflux(ctrl, counter, P)
Read in !SFLUX !
subroutine fstr_solid_alloc(hecMESH, fstrSOLID)
Initializer of structure fstr_solid.
This module defines common data and basic structures for analysis.
integer(kind=kint), parameter iutb
integer(kind=kint) myrank
PARALLEL EXECUTION.
integer(kind=kint), parameter kel341sesns
integer(kind=kint), parameter kbcffstr
boundary condition file type (bcf)
real(kind=kreal), dimension(100) svrarray
integer(kind=kint), parameter kstdynamic
integer(kind=kint), parameter kel361up
integer(kind=kint), parameter kel341fi
section control
integer(kind=kint), parameter idbg
integer(kind=kint), parameter kel361fi
integer(kind=kint) opsstype
integer(kind=kint), dimension(100) sviarray
SOLVER CONTROL.
integer(kind=kint), parameter kmassconsistent
integer(kind=kint), parameter kon
integer(kind=kint), parameter kfloadcase_im
integer(kind=kint), parameter kel361ic
subroutine fstr_abort(code)
Terminate the analysis with a classified exit status. MPI_ABORT does not perform the Fortran I/O fina...
integer(kind=kint), parameter kcaslagrange
contact analysis algorithm
integer(kind=kint), parameter ilog
FILE HANDLER.
real(kind=kreal) dt
ANALYSIS CONTROL for NLGEOM and HEAT.
integer(kind=kint), parameter kststatic
integer(kind=kint), parameter kbcinitial
integer(kind=kint), parameter kfloadtype_node
integer(kind=kint), parameter kstprecheck
solution type (st)
integer(kind=kint), parameter kcaalagrange
integer(kind=kint), parameter kststaticeigen
integer(kind=kint), parameter kstheat
real(kind=kreal), pointer ref_temp
REFTEMP.
integer(kind=kint), parameter kstnzprof
integer(kind=kint), parameter kel361fbar
integer(kind=kint), parameter ksteigen
type(tinitialcondition), dimension(:), pointer, save g_initialcnd
integer(kind=kint), parameter kmasslumped
mass matrix type
integer(kind=kint), parameter kel611euler
integer(kind=kint), parameter kfloadcase_re
This module manages step information.
subroutine fstr_init_outctrl(outctrl)
subroutine fstr_copy_outctrl(outctrl1, outctrl2)
Copy output control except outinfo, which may already hold !OUTPUT_RES / !OUTPUT_VIS settings.
subroutine fstr_ctrl_get_output(ctrl, outctrl, islog, res, visual, femap)
This module provides a function to fetch material properties from hecmw.
subroutine fstr_get_prop(hecMESH, shell_var, isect, ee, pp, rho, alpha, thick, n_totlyr, alpha_over_mu, beam_radius, beam_angle1, beam_angle2, beam_angle3, beam_angle4, beam_angle5, beam_angle6)
This module contains several strategy to free locking problem in Eight-node hexagonal element.
integer(kind=kint) function, public return_nn_comp_c3d4_sesns(nn, nodlocal)
This module manages step information.
subroutine free_stepinfo(step)
Finalizer.
subroutine init_stepinfo(stepinfo)
Initializer.
integer(kind=kint), parameter kcnvresidual
subroutine init_convergparam(cnvparam)
Initializer.
integer(kind=kint), parameter kcnvtranslation
integer, parameter stepfixedinc
integer(kind=kint), parameter kcnvcorrection
subroutine init_aincparam(aincparam)
Initializer.
subroutine setup_stepinfo_converg(stepinfo, cnvparam)
Fix the convergence criteria of a step. For each criterion the built-in default is overridden by CONV...
subroutine setup_stepinfo_starttime(stepinfos)
integer(kind=kint), parameter kcnvrotation
This module provides aux functions.
subroutine cross_product(v1, v2, vn)
This module summarizes all information of material properties.
integer(kind=kint), parameter m_youngs
integer(kind=kint), parameter m_expansion
integer(kind=kint), parameter m_beam_radius
integer(kind=kint), parameter viscoelastic
integer(kind=kint), parameter m_beam_angle6
integer(kind=kint), parameter elastic
integer(kind=kint), parameter m_beam_angle3
integer(kind=kint), parameter m_density
integer(kind=kint), parameter m_beam_angle4
integer(kind=kint), parameter m_poisson
integer(kind=kint), parameter m_beam_angle1
integer(kind=kint), parameter m_beam_angle5
integer(kind=kint), parameter m_beam_angle2
integer(kind=kint), parameter m_alpha_over_mu
subroutine initmaterial(material)
Initializer.
This modules defines a structure to record history dependent parameter in static analysis.
integer(kind=kint) function fstr_shell_num_thickness_points(etype)
Compatibility accessor for shell history allocation. The quadrature rule itself is defined in element...
subroutine fstr_init_gauss(gauss)
Initializer.
subroutine fstr_init_shell_layer_gausses(element, ng, nlayer, nthick)
Allocate shell history for every surface Gauss point, layer, and thickness point.
subroutine fstr_finalize_shell_layer_gausses(element)
Release shell layer/thickness history.
logical function fstr_uses_plane_stress_j2_shell(etype, nn, material)
Return whether the element and material are supported by the plane-stress J2 shell path.
integer(kind=kint) function fstr_shell_output_point_count(element)
Number of shell thickness-point tensors available for result output.
Data for coupling analysis.
Data for DYNAMIC ANSLYSIS (fstrDYNAMIC)
Package of data used by Lanczos eigenvalue solver.
Data for HEAT ANSLYSIS (fstrHEAT)
FSTR INNER CONTROL PARAMETERS (fstrPARAM)
Data for STATIC ANSLYSIS (fstrSOLID)
Package of all data needs to initialize.
output control such as output filename, output frequency etc.
Step control such as active boundary condition, convergent condition etc.
Convergence criteria of !CONVERG_PARAM, indexed like step_infocnv_check.