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, j, cid, nout, nin, ierror, cparam_id
67 character(len=HECMW_NAME_LEN) :: header_name, fname(MAXOUTFILE)
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
78 integer(kind=kint) :: c_solution, c_solver, c_nlsolver, c_step, c_write, 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_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
88 integer(kind=kint) :: c_output, islog
89 integer(kind=kint) :: k
90 integer(kind=kint) :: cache = 1
92 write( logfilename,
'(i5,''.log'')' )
myrank
106 c_solution = 0; c_solver = 0; c_nlsolver = 0; c_step = 0; c_output = 0; c_echo = 0; c_amplitude = 0
107 c_static = 0; c_boundary = 0; c_cload = 0; c_dload = 0; c_temperature = 0; c_reftemp = 0; c_spring = 0;
109 c_heat = 0; c_fixtemp = 0; c_cflux = 0; c_dflux = 0; c_sflux = 0
110 c_film = 0; c_sfilm = 0; c_radiate= 0; c_sradiate = 0
111 c_eigen = 0; c_contact = 0; c_contactparam = 0; c_embed = 0; c_contact_if = 0
112 c_dynamic = 0; c_velocity = 0; c_acceleration = 0
113 c_couple = 0; c_material = 0; c_section =0
114 c_mpc = 0; c_weldline = 0; c_initial = 0
115 c_istep = 0; c_localcoord = 0
116 c_fload = 0; c_eigenread = 0
118 c_aincparam= 0; c_timepoints = 0
124 write(*,*)
'### Error: Cannot open FSTR control file : ', cntl_filename
125 write(
ilog,*)
'### Error: Cannot open FSTR control file : ', cntl_filename
126 stop hecmw_exit_input
132 if( header_name ==
'!VERSION' )
then
134 else if( header_name ==
'!SOLUTION' )
then
135 c_solution = c_solution + 1
137 else if( header_name ==
'!NONLINEAR_SOLVER' )
then
138 c_nlsolver = c_nlsolver + 1
140 else if( header_name ==
'!SOLVER' )
then
141 c_solver = c_solver + 1
143 else if( header_name ==
'!ISTEP' )
then
144 c_istep = c_istep + 1
145 else if( header_name ==
'!STEP' )
then
146 if( version==0 )
then
150 c_istep = c_istep + 1
152 else if( header_name ==
'!WRITE' )
then
154 if( visual==1 ) p%PARAM%fg_visual= 1
155 if( result==1 ) p%PARAM%fg_result = 1
156 c_output = c_output+1
157 else if( header_name ==
'!ECHO' )
then
160 else if( header_name ==
'!RESTART' )
then
162 fstrsolid%restart_nout= nout
163 fstrdynamic%restart_nout= nout
164 fstrheat%restart_nout= nout
165 else if( header_name ==
'!ORIENTATION' )
then
166 c_localcoord = c_localcoord + 1
167 else if( header_name ==
'!AUTOINC_PARAM' )
then
168 c_aincparam = c_aincparam + 1
169 else if( header_name ==
'!TIME_POINTS' )
then
170 c_timepoints = c_timepoints + 1
171 else if( header_name ==
'!OUTPUT_SSTYPE' )
then
173 else if( header_name ==
'!INITIAL_CONDITION' )
then
174 c_initial = c_initial + 1
175 else if( header_name ==
'!AMPLITUDE' )
then
176 c_amplitude = c_amplitude + 1
178 else if( header_name ==
'!ELEMENT_ACTIVATION' )
then
179 c_elemact = c_elemact + 1
184 else if( header_name ==
'!STATIC' )
then
185 c_static = c_static + 1
187 else if( header_name ==
'!BOUNDARY' )
then
188 c_boundary = c_boundary + 1
190 else if( header_name ==
'!CLOAD' )
then
191 c_cload = c_cload + 1
194 else if( header_name ==
'!DLOAD' )
then
195 c_dload = c_dload + 1
197 else if( header_name ==
'!CONTACT_ALGO' )
then
199 else if( header_name ==
'!CONTACT' )
then
201 c_contact = c_contact + n
202 else if( header_name ==
'!EMBED' )
then
204 c_embed = c_embed + n
205 else if( header_name ==
'!CONTACT_PARAM' )
then
206 c_contactparam = c_contactparam + 1
207 else if( header_name ==
'!CONTACT_INTERFERENCE' )
then
209 c_contact_if = c_contact_if + n
210 else if( header_name ==
'!MATERIAL' )
then
211 c_material = c_material + 1
212 else if( header_name ==
'!TEMPERATURE' )
then
213 c_temperature = c_temperature + 1
215 else if( header_name ==
'!SPRING' )
then
216 c_spring = c_spring + 1
218 else if( header_name ==
'!REFTEMP' )
then
219 c_reftemp = c_reftemp + 1
224 else if( header_name ==
'!HEAT' )
then
226 else if( header_name ==
'!FIXTEMP' )
then
227 c_fixtemp = c_fixtemp + 1
229 else if( header_name ==
'!CFLUX' )
then
230 c_cflux = c_cflux + 1
232 else if( header_name ==
'!DFLUX' )
then
233 c_dflux = c_dflux + 1
235 else if( header_name ==
'!SFLUX' )
then
236 c_sflux = c_sflux + 1
238 else if( header_name ==
'!FILM' )
then
241 else if( header_name ==
'!SFILM' )
then
242 c_sfilm = c_sfilm + 1
244 else if( header_name ==
'!RADIATE' )
then
245 c_radiate = c_radiate + 1
247 else if( header_name ==
'!SRADIATE' )
then
248 c_sradiate = c_sradiate + 1
250 else if( header_name ==
'!WELD_LINE' )
then
251 c_weldline = c_weldline + 1
255 else if( header_name ==
'!EIGEN' )
then
256 c_eigen = c_eigen + 1
261 else if( header_name ==
'!DYNAMIC' )
then
262 c_dynamic = c_dynamic + 1
264 else if( header_name ==
'!VELOCITY' )
then
265 c_velocity = c_velocity + 1
267 else if( header_name ==
'!ACCELERATION' )
then
268 c_acceleration = c_acceleration + 1
270 else if( header_name ==
'!FLOAD' )
then
271 c_fload = c_fload + 1
273 else if( header_name ==
'!EIGENREAD' )
then
274 c_eigenread = c_eigenread + 1
279 else if( header_name ==
'!COUPLE' )
then
280 c_couple = c_couple + 1
285 else if( header_name ==
'!MPC' )
then
291 else if( header_name ==
'!INCLUDE' )
then
292 ctrl_list(ictrl) = ctrl
297 write(*,*)
'### Error: Cannot open FSTR control file : ', input_filename
298 write(
ilog,*)
'### Error: Cannot open FSTR control file : ', input_filename
299 stop hecmw_exit_input
306 else if( header_name ==
'!END' )
then
317 ctrl = ctrl_list(ictrl)
324 fstrsolid%n_contacts = c_contact
325 if( c_contact>0 )
then
326 allocate( fstrsolid%contacts( c_contact ) )
330 fstrsolid%n_embeds = c_embed
331 if( c_embed>0 )
allocate( fstrsolid%embeds( c_embed ) )
332 if( c_weldline>0 )
allocate( fstrheat%weldline( c_weldline ) )
335 allocate( fstrsolid%step_ctrl( c_istep ) )
339 fstrsolid%step_ctrl(i)%num_substep = fstrdynamic%n_step
340 fstrsolid%step_ctrl(i)%initdt = fstrdynamic%t_delta
341 fstrsolid%step_ctrl(i)%elapsetime = dble(fstrdynamic%n_step) * fstrdynamic%t_delta
342 fstrsolid%step_ctrl(i)%mindt = fstrdynamic%t_delta
343 fstrsolid%step_ctrl(i)%maxdt = fstrdynamic%t_delta
347 if( c_localcoord>0 )
allocate( g_localcoordsys(c_localcoord) )
348 allocate( fstrparam%ainc(0:c_aincparam) )
352 if( c_timepoints>0 )
allocate( fstrparam%timepoints(c_timepoints) )
353 allocate( fstrparam%contactparam(0:c_contactparam) )
354 do i=0,c_contactparam
357 if( c_contact_if>0 )
then
358 allocate( fstrparam%contact_if( c_contact_if ) )
364 p%SOLID%is_33shell = 0
365 p%SOLID%is_33beam = 0
367 do i=1,hecmesh%n_elem_type
368 n = hecmesh%elem_type_item(i)
369 if (n == 781 .or. n == 761)
then
370 p%SOLID%is_33shell = 1
371 elseif (n == 641)
then
372 p%SOLID%is_33beam = 1
377 if( hecmesh%material%n_mat>n ) n= hecmesh%material%n_mat
378 if( n==0 ) stop
"material property not defined!"
379 allocate( fstrsolid%materials( n ) )
385 allocate( fstrsolid%sections(hecmesh%section%n_sect) )
386 do i=1,hecmesh%section%n_sect
389 if( p%PARAM%nlgeom )
then
392 fstrsolid%sections(i)%elemopt361 =
kel361ic
394 else if( p%PARAM%solution_type==
ksteigen )
then
395 fstrsolid%sections(i)%elemopt361 =
kel361ic
399 fstrsolid%sections(i)%elemopt361 =
kel361fi
401 fstrsolid%sections(i)%elemopt341 =
kel341fi
404 fstrsolid%sections(i)%thickness = 1.0d0
407 if( hecmesh%section%n_sect >0 )
then
408 do i=1,hecmesh%section%n_sect
409 if( hecmesh%section%sect_type(i) == 4 ) cycle
410 cid = hecmesh%section%sect_mat_ID_item(i)
411 if( cid>n ) stop
"Error in material property definition!"
412 if( fstrparam%nlgeom .or. fstrparam%solution_type==
kststaticeigen ) &
413 fstrsolid%materials(cid)%nlgeom_flag = 1
416 n_totlyr,alpha_over_mu, &
417 beam_radius,beam_angle1,beam_angle2,beam_angle3, &
418 beam_angle4,beam_angle5,beam_angle6)
419 fstrsolid%sections(i)%thickness = thick
420 fstrsolid%materials(cid)%name = hecmesh%material%mat_name(cid)
421 fstrsolid%materials(cid)%variables(
m_youngs)=ee
422 fstrsolid%materials(cid)%variables(
m_poisson)=pp
423 fstrsolid%materials(cid)%variables(
m_density)=rho
424 fstrsolid%materials(cid)%variables(
m_exapnsion)=alpha
426 fstrsolid%materials(cid)%variables(
m_beam_radius)=beam_radius
427 fstrsolid%materials(cid)%variables(
m_beam_angle1)=beam_angle1
428 fstrsolid%materials(cid)%variables(
m_beam_angle2)=beam_angle2
429 fstrsolid%materials(cid)%variables(
m_beam_angle3)=beam_angle3
430 fstrsolid%materials(cid)%variables(
m_beam_angle4)=beam_angle4
431 fstrsolid%materials(cid)%variables(
m_beam_angle5)=beam_angle5
432 fstrsolid%materials(cid)%variables(
m_beam_angle6)=beam_angle6
433 fstrsolid%materials(cid)%mtype =
elastic
434 if( hecmesh%section%sect_type(i) == 2 )
then
435 fstrsolid%materials(cid)%totallyr = n_totlyr
436 fstrsolid%materials(cid)%shell_var => shmat
441 allocate( fstrsolid%output_ctrl( 4 ) )
443 fstrsolid%output_ctrl( 1 )%filename = trim(logfilename)
444 fstrsolid%output_ctrl( 1 )%filenum =
ilog
467 fstrsolid%elemopt361 = 0
468 fstrsolid%AutoINC_stat = 0
469 fstrsolid%CutBack_stat = 0
470 fstrsolid%NRstat_i(:) = 0
471 fstrsolid%NRstat_r(:) = 0.d0
476 if( header_name ==
'!ORIENTATION' )
then
477 c_localcoord = c_localcoord + 1
479 write(*,*)
'### Error: Fail in read in ORIENTATION definition : ', c_localcoord
480 write(
ilog,*)
'### Error: Fail in read in ORIENTATION definition : ', c_localcoord
481 stop hecmw_exit_input
485 elseif( header_name ==
'!CONTACT' )
then
488 ,ee, pp, rho, alpha, p%PARAM%contact_algo, mname, k ) )
then
489 write(*,*)
'### Error: Fail in read in contact condition : ', c_contact
490 write(
ilog,*)
'### Error: Fail in read in contact condition : ', c_contact
491 stop hecmw_exit_input
494 do i=1,
size(fstrparam%contactparam)-1
495 if(
hecmw_streqr( fstrparam%contactparam(i)%name, mname ) )
then
500 if( rho>0.d0 ) cgn = rho
501 if( alpha>0.d0 ) cgt = alpha
503 fstrsolid%contacts(c_contact+i)%smoothing = k
504 if( .not. fstr_contact_check( fstrsolid%contacts(c_contact+i), p%MESH ) )
then
505 write(*,*)
'### Error: Inconsistence in contact and surface definition : ' , i+c_contact
506 write(
ilog,*)
'### Error: Inconsistence in contact and surface definition : ', i+c_contact
507 stop hecmw_exit_model
509 isok = fstr_contact_init( fstrsolid%contacts(c_contact+i), p%MESH, fstrparam%contactparam(cparam_id))
512 fstrsolid%contacts(c_contact+i)%symmetric = .not. p%PARAM%fric_cone_follow
515 c_contact = c_contact+n
518 elseif( header_name ==
'!EMBED' )
then
520 if( .not.
fstr_ctrl_get_embed( ctrl, n, fstrsolid%embeds(c_embed+1:c_embed+n), mname, k ) )
then
521 write(*,*)
'### Error: Fail in read in embed condition : ', c_embed
522 write(
ilog,*)
'### Error: Fail in read in embed condition : ', c_embed
523 stop hecmw_exit_input
526 do i=1,
size(fstrparam%contactparam)-1
527 if(
hecmw_streqr( fstrparam%contactparam(i)%name, mname ) )
then
532 fstrsolid%embeds(c_embed+i)%smoothing = k
533 if( .not. fstr_contact_check( fstrsolid%embeds(c_embed+i), p%MESH ) )
then
534 write(*,*)
'### Error: Inconsistence in contact and surface definition : ' , i+c_embed
535 write(
ilog,*)
'### Error: Inconsistence in contact and surface definition : ', i+c_embed
536 stop hecmw_exit_model
538 isok = fstr_embed_init( fstrsolid%embeds(c_embed+i), p%MESH, fstrparam%contactparam(cparam_id))
543 else if( header_name ==
'!ISTEP' )
then
545 if( .not.
fstr_ctrl_get_istep( ctrl, hecmesh, fstrsolid%step_ctrl(c_istep), mname, mname2 ) )
then
546 write(*,*)
'### Error: Fail in read in step definition : ' , c_istep
547 write(
ilog,*)
'### Error: Fail in read in step definition : ', c_istep
548 stop hecmw_exit_input
550 if(
associated(fstrparam%timepoints) )
then
551 do i=1,
size(fstrparam%timepoints)
552 if(
hecmw_streqr( fstrparam%timepoints(i)%name, mname ) )
then
553 fstrsolid%step_ctrl(c_istep)%timepoint_id = i;
exit
557 if(
associated(fstrparam%ainc) )
then
558 do i=1,
size(fstrparam%ainc)
559 if(
hecmw_streqr( fstrparam%ainc(i)%name, mname2 ) )
then
560 fstrsolid%step_ctrl(c_istep)%AincParam_id = i;
exit
564 else if( header_name ==
'!STEP' .and. version>=1 )
then
566 if( .not.
fstr_ctrl_get_istep( ctrl, hecmesh, fstrsolid%step_ctrl(c_istep), mname, mname2 ) )
then
567 write(*,*)
'### Error: Fail in read in step definition : ' , c_istep
568 write(
ilog,*)
'### Error: Fail in read in step definition : ', c_istep
569 stop hecmw_exit_input
575 & fstrsolid%step_ctrl(c_istep)%inc_type ==
stepfixedinc )
then
576 fstrsolid%step_ctrl(c_istep)%initdt = fstrdynamic%t_delta
577 fstrsolid%step_ctrl(c_istep)%mindt = fstrdynamic%t_delta
578 fstrsolid%step_ctrl(c_istep)%maxdt = fstrdynamic%t_delta
580 if(
associated(fstrparam%timepoints) )
then
581 do i=1,
size(fstrparam%timepoints)
582 if(
hecmw_streqr( fstrparam%timepoints(i)%name, mname ) )
then
583 fstrsolid%step_ctrl(c_istep)%timepoint_id = i;
exit
587 if(
associated(fstrparam%ainc) )
then
588 do i=1,
size(fstrparam%ainc)-1
589 if(
hecmw_streqr( fstrparam%ainc(i)%name, mname2 ) )
then
590 fstrsolid%step_ctrl(c_istep)%AincParam_id = i;
exit
595 else if( header_name ==
'!HEAT' )
then
599 else if( header_name ==
'!WELD_LINE' )
then
600 fstrheat%WL_tot = fstrheat%WL_tot+1
602 write(*,*)
'### Error: Fail in read in Weld Line definition : ' , fstrheat%WL_tot
603 write(
ilog,*)
'### Error: Fail in read in Weld Line definition : ', fstrheat%WL_tot
604 stop hecmw_exit_input
607 else if( header_name ==
'!INITIAL_CONDITION' .or. header_name ==
'!INITIAL CONDITION' )
then
608 c_initial = c_initial+1
610 write(*,*)
'### Error: Fail in read in INITIAL CONDITION definition : ' ,c_initial
611 write(
ilog,*)
'### Error: Fail in read in INITIAL CONDITION definition : ', c_initial
612 stop hecmw_exit_input
615 else if( header_name ==
'!SECTION' )
then
616 c_section = c_section+1
618 write(*,*)
'### Error: Fail in read in SECTION definition : ' , c_section
619 write(
ilog,*)
'### Error: Fail in read in SECTION definition : ', c_section
620 stop hecmw_exit_input
623 else if( header_name ==
'!ELEMOPT' )
then
624 c_elemopt = c_elemopt+1
626 write(*,*)
'### Error: Fail in read in ELEMOPT definition : ' , c_elemopt
627 write(
ilog,*)
'### Error: Fail in read in ELEMOPT definition : ', c_elemopt
628 stop hecmw_exit_input
632 else if( header_name ==
'!MATERIAL' )
then
633 c_material = c_material+1
635 write(*,*)
'### Error: Fail in read in material definition : ' , c_material
636 write(
ilog,*)
'### Error: Fail in read in material definition : ', c_material
637 stop hecmw_exit_input
640 if(cache < hecmesh%material%n_mat)
then
641 if(
hecmw_streqr( hecmesh%material%mat_name(cache), mname ))
then
647 do i=1,hecmesh%material%n_mat
648 if(
hecmw_streqr( hecmesh%material%mat_name(i), mname ) )
then
656 write(*,*)
'### Error: Fail in read in material definition : ' , c_material
657 write(
ilog,*)
'### Error: Fail in read in material definition : ', c_material
658 stop hecmw_exit_input
660 fstrsolid%materials(cid)%name = hecmesh%material%mat_name(cid)
661 if(c_material>hecmesh%material%n_mat)
call initmaterial( fstrsolid%materials(cid) )
663 else if( header_name ==
'!ELASTIC' )
then
664 if( c_material >0 )
then
666 fstrsolid%materials(cid)%mtype, &
667 fstrsolid%materials(cid)%nlgeom_flag, &
668 fstrsolid%materials(cid)%variables, &
669 fstrsolid%materials(cid)%dict)/=0 )
then
670 write(*,*)
'### Error: Fail in read in elasticity definition : ' , cid
671 write(
ilog,*)
'### Error: Fail in read in elasticity definition : ', cid
672 stop hecmw_exit_input
675 else if( header_name ==
'!PLASTIC' )
then
678 fstrsolid%materials(cid)%mtype, &
679 fstrsolid%materials(cid)%nlgeom_flag, &
680 fstrsolid%materials(cid)%variables, &
681 fstrsolid%materials(cid)%table, &
682 fstrsolid%materials(cid)%dict)/=0 )
then
683 write(*,*)
'### Error: Fail in read in plasticity definition : ' , cid
684 write(
ilog,*)
'### Error: Fail in read in plasticity definition : ', cid
685 stop hecmw_exit_input
688 else if( header_name ==
'!HYPERELASTIC' )
then
691 fstrsolid%materials(cid)%mtype, &
692 fstrsolid%materials(cid)%nlgeom_flag, &
693 fstrsolid%materials(cid)%variables )/=0 )
then
694 write(*,*)
'### Error: Fail in read in elasticity definition : ' , cid
695 write(
ilog,*)
'### Error: Fail in read in elasticity definition : ', cid
696 stop hecmw_exit_input
699 else if( header_name ==
'!VISCOELASTIC' )
then
702 fstrsolid%materials(cid)%mtype, &
703 fstrsolid%materials(cid)%nlgeom_flag, &
704 fstrsolid%materials(cid)%dict)/=0 )
then
705 write(*,*)
'### Error: Fail in read in plasticity definition : ' , cid
706 write(
ilog,*)
'### Error: Fail in read in plasticity definition : ', cid
707 stop hecmw_exit_input
710 else if( header_name ==
'!TRS' )
then
713 write(*,*)
'### WARNING: TRS can only be defined for viscoelastic material! It is ignored! '
714 write(
ilog,*)
'### WARNING: TRS can only be defined for viscoelastic material! It is ignored! '
716 if(
fstr_ctrl_get_trs( ctrl, fstrsolid%materials(cid)%mtype, fstrsolid%materials(cid)%variables)/=0 )
then
717 write(*,*)
'### Error: Fail in read in TRS definition : ' , cid
718 write(
ilog,*)
'### Error: Fail in read in TRS definition : ', cid
719 stop hecmw_exit_input
723 else if( header_name ==
'!CREEP' )
then
726 fstrsolid%materials(cid)%mtype, &
727 fstrsolid%materials(cid)%nlgeom_flag, &
728 fstrsolid%materials(cid)%dict)/=0 )
then
729 write(*,*)
'### Error: Fail in read in plasticity definition : ' , cid
730 write(
ilog,*)
'### Error: Fail in read in plasticity definition : ', cid
731 stop hecmw_exit_input
734 else if( header_name ==
'!DENSITY' )
then
737 write(*,*)
'### Error: Fail in read in density definition : ' , cid
738 write(
ilog,*)
'### Error: Fail in read in density definition : ', cid
739 stop hecmw_exit_input
742 else if( header_name ==
'!EXPANSION_COEF' .or. header_name ==
'!EXPANSION_COEFF' .or. &
743 header_name ==
'!EXPANSION')
then
746 fstrsolid%materials(cid)%dict)/=0 )
then
747 write(*,*)
'### Error: Fail in read in expansion coefficient definition : ' , cid
748 write(
ilog,*)
'### Error: Fail in read in expansion coefficient definition : ', cid
749 stop hecmw_exit_input
752 else if( header_name ==
'!DAMPING')
then
755 fstrsolid%materials(cid)%is_elem_Rayleigh_damping)/=0 )
then
756 write(*,*)
'### Error: Fail in read in damping definition : ' , cid
757 write(
ilog,*)
'### Error: Fail in read in damping definition : ', cid
758 stop hecmw_exit_input
761 else if( header_name ==
'!FLUID' )
then
762 if( c_material >0 )
then
764 fstrsolid%materials(cid)%mtype, &
765 fstrsolid%materials(cid)%nlgeom_flag, &
766 fstrsolid%materials(cid)%variables, &
767 fstrsolid%materials(cid)%dict)/=0 )
then
768 write(*,*)
'### Error: Fail in read in fluid definition : ' , cid
769 write(
ilog,*)
'### Error: Fail in read in fluid definition : ', cid
770 stop hecmw_exit_input
773 else if( header_name ==
'!SPRING_D' )
then
774 if( c_material >0 )
then
776 fstrsolid%materials(cid)%mtype, &
777 fstrsolid%materials(cid)%nlgeom_flag, &
778 fstrsolid%materials(cid)%variables_i, &
779 fstrsolid%materials(cid)%dict)/=0 )
then
780 write(*,*)
'### Error: Fail in read in spring_d definition : ' , cid
781 write(
ilog,*)
'### Error: Fail in read in spring_d definition : ', cid
782 stop hecmw_exit_input
785 else if( header_name ==
'!SPRING_A' )
then
786 if( c_material >0 )
then
788 fstrsolid%materials(cid)%mtype, &
789 fstrsolid%materials(cid)%nlgeom_flag, &
790 fstrsolid%materials(cid)%variables_i, &
791 fstrsolid%materials(cid)%dict)/=0 )
then
792 write(*,*)
'### Error: Fail in read in spring_a definition : ' , cid
793 write(
ilog,*)
'### Error: Fail in read in spring_a definition : ', cid
794 stop hecmw_exit_input
797 else if( header_name ==
'!DASHPOT_D' )
then
798 if( c_material >0 )
then
800 fstrsolid%materials(cid)%mtype, &
801 fstrsolid%materials(cid)%nlgeom_flag, &
802 fstrsolid%materials(cid)%variables_i, &
803 fstrsolid%materials(cid)%dict)/=0 )
then
804 write(*,*)
'### Error: Fail in read in spring_d definition : ' , cid
805 write(
ilog,*)
'### Error: Fail in read in spring_d definition : ', cid
806 stop hecmw_exit_input
809 else if( header_name ==
'!DASHPOT_A' )
then
810 if( c_material >0 )
then
812 fstrsolid%materials(cid)%mtype, &
813 fstrsolid%materials(cid)%nlgeom_flag, &
814 fstrsolid%materials(cid)%variables_i, &
815 fstrsolid%materials(cid)%dict)/=0 )
then
816 write(*,*)
'### Error: Fail in read in spring_a definition : ' , cid
817 write(
ilog,*)
'### Error: Fail in read in spring_a definition : ', cid
818 stop hecmw_exit_input
821 else if( header_name ==
'!USER_MATERIAL' )
then
824 fstrsolid%materials(cid)%nlgeom_flag, fstrsolid%materials(cid)%nfstatus, &
825 fstrsolid%materials(cid)%variables(101:) )/=0 )
then
826 write(*,*)
'### Error: Fail in read in user defined material : ' , cid
827 write(
ilog,*)
'### Error: Fail in read in user defined material : ', cid
828 stop hecmw_exit_input
834 else if( header_name ==
'!WRITE' )
then
836 if( islog == 1 )
then
838 outctrl%filename = trim(logfilename)
839 outctrl%filenum =
ilog
842 if( femap == 1 )
then
844 write( outctrl%filename,
'(a,i0,a)')
'utable.',
myrank,
'.dat'
845 outctrl%filenum =
iutb
847 open( unit=outctrl%filenum, file=outctrl%filename, status=
'REPLACE', iostat=ierror )
848 if( ierror /= 0 )
then
849 write(*,*)
'Warning: cannot open output file: ', trim(outctrl%filename)
851 fstrsolid%output_ctrl(c_output)%outinfo%grp_id = 1
853 if( result == 1 )
then
857 if( visual == 1 )
then
862 else if( header_name ==
'!OUTPUT_RES' )
then
865 write(*,*)
'### Error: Fail in read in node output definition : ' , c_output
866 write(
ilog,*)
'### Error: Fail in read in node output definition : ', c_output
867 stop hecmw_exit_input
869 if( fstrsolid%output_ctrl(c_output)%outinfo%grp_id_name /=
'ALL' )
then
871 do i=1,hecmesh%node_group%n_grp
872 if( fstrsolid%output_ctrl(c_output)%outinfo%grp_id_name == hecmesh%node_group%grp_name(i) )
then
873 fstrsolid%output_ctrl(c_output)%outinfo%grp_id = i;
exit
877 else if( header_name ==
'!OUTPUT_VIS' )
then
880 write(*,*)
'### Error: Fail in read in element output definition : ' , c_output
881 write(
ilog,*)
'### Error: Fail in read in element output definition : ', c_output
882 stop hecmw_exit_input
884 if( fstrsolid%output_ctrl(c_output)%outinfo%grp_id_name /=
'ALL' )
then
886 do i=1,hecmesh%node_group%n_grp
887 if( fstrsolid%output_ctrl(c_output)%outinfo%grp_id_name == hecmesh%node_group%grp_name(i) )
then
888 fstrsolid%output_ctrl(c_output)%outinfo%grp_id = i;
exit
892 else if( header_name ==
'!AUTOINC_PARAM' )
then
893 c_aincparam = c_aincparam + 1
895 write(*,*)
'### Error: Fail in read in AUTOINC_PARAM definition : ' , c_aincparam
896 write(
ilog,*)
'### Error: Fail in read in AUTOINC_PARAM definition : ', c_aincparam
897 stop hecmw_exit_input
899 else if( header_name ==
'!TIME_POINTS' )
then
900 c_timepoints = c_timepoints + 1
902 write(*,*)
'### Error: Fail in read in TIME_POINTS definition : ' , c_timepoints
903 write(
ilog,*)
'### Error: Fail in read in TIME_POINTS definition : ', c_timepoints
904 stop hecmw_exit_input
906 else if( header_name ==
'!CONTACT_PARAM' )
then
907 c_contactparam = c_contactparam + 1
909 write(*,*)
'### Error: Fail in read in CONTACT_PARAM definition : ' , c_contactparam
910 write(
ilog,*)
'### Error: Fail in read in CONTACT_PARAM definition : ', c_contactparam
911 stop hecmw_exit_input
913 else if( header_name ==
'!CONTACT_INTERFERENCE' )
then
916 write(*,*)
'### Error: Fail in read in CONTACT_INTERFERENCE definition : ' , c_contact_if
917 write(
ilog,*)
'### Error: Fail in read in CONTACT_INTERFERENCE definition : ', c_contact_if
918 stop hecmw_exit_input
921 if( check_apply_contact_if(fstrparam%contact_if(c_contact_if+i), fstrsolid%contacts) /= 0)
then
922 write(*,*)
'### Error:(INTERFERENCE) Inconsistence of contact_pair in CONTACTS: ' , i+c_contact_if
923 write(
ilog,*)
'### Error:(INTERFERENCE) Inconsistence of contact_pair in CONTACTS: ', i+c_contact_if
924 stop hecmw_exit_model
927 c_contact_if = c_contact_if + n
928 else if( header_name ==
'!ULOAD' )
then
930 write(*,*)
'### Error: Fail in read in ULOAD definition : '
931 write(
ilog,*)
'### Error: Fail in read in ULOAD definition : '
932 stop hecmw_exit_input
935 else if( header_name ==
'!INCLUDE' )
then
936 ctrl_list(ictrl) = ctrl
941 write(*,*)
'### Error: Cannot open FSTR control file : ', input_filename
942 write(
ilog,*)
'### Error: Cannot open FSTR control file : ', input_filename
943 stop hecmw_exit_input
948 else if( header_name ==
'!END' )
then
959 ctrl = ctrl_list(ictrl)
967 if( .not. p%PARAM%nlgeom )
then
969 fstrsolid%materials(i)%nlgeom_flag = 0
973 if( fstrsolid%TEMP_ngrp_tot > 0 .or. fstrsolid%TEMP_irres > 0 )
then
974 allocate ( fstrsolid%temperature( hecmesh%n_node ) ,stat=ierror )
975 if( ierror /= 0 )
then
976 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, TEMPERATURE>'
977 write(
idbg,*)
' rank = ',
myrank,
' ierror = ',ierror
979 call hecmw_abort( hecmw_comm_get_comm())
982 allocate ( fstrsolid%last_temp( hecmesh%n_node ) ,stat=ierror )
983 if( ierror /= 0 )
then
984 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, LAST_TEMP>'
985 write(
idbg,*)
' rank = ',
myrank,
' ierror = ',ierror
987 call hecmw_abort( hecmw_comm_get_comm())
989 fstrsolid%last_temp = 0.d0
990 allocate ( fstrsolid%temp_bak( hecmesh%n_node ) ,stat=ierror )
991 if( ierror /= 0 )
then
992 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, TEMP_BAK>'
993 write(
idbg,*)
' rank = ',
myrank,
' ierror = ',ierror
995 call hecmw_abort( hecmw_comm_get_comm())
997 fstrsolid%temp_bak = 0.d0
1000 if(
associated(fstrsolid%step_ctrl) )
then
1001 fstrsolid%nstep_tot =
size(fstrsolid%step_ctrl)
1004 if( p%PARAM%solution_type==
kststatic .and. p%PARAM%nlgeom )
then
1005 write( *,* )
" ERROR: STEP not defined!"
1006 write(
idbg,* )
"ERROR: STEP not defined!"
1011 if(
myrank==0 )
write(*,*)
"Step control not defined! Using default step=1"
1012 fstrsolid%nstep_tot = 1
1013 allocate( fstrsolid%step_ctrl(1) )
1016 fstrsolid%step_ctrl(1)%num_substep = fstrdynamic%n_step
1017 fstrsolid%step_ctrl(1)%initdt = fstrdynamic%t_delta
1018 fstrsolid%step_ctrl(1)%elapsetime = dble(fstrdynamic%n_step) * fstrdynamic%t_delta
1019 fstrsolid%step_ctrl(1)%mindt = fstrdynamic%t_delta
1020 fstrsolid%step_ctrl(1)%maxdt = fstrdynamic%t_delta
1022 n = fstrsolid%BOUNDARY_ngrp_tot
1023 if( n>0 )
allocate( fstrsolid%step_ctrl(1)%Boundary(n) )
1025 fstrsolid%step_ctrl(1)%Boundary(i) = fstrsolid%BOUNDARY_ngrp_GRPID(i)
1027 n = fstrsolid%CLOAD_ngrp_tot + fstrsolid%DLOAD_ngrp_tot + fstrsolid%TEMP_ngrp_tot + fstrsolid%SPRING_ngrp_tot
1028 if( n>0 )
allocate( fstrsolid%step_ctrl(1)%Load(n) )
1030 do i = 1, fstrsolid%CLOAD_ngrp_tot
1032 fstrsolid%step_ctrl(1)%Load(n) = fstrsolid%CLOAD_ngrp_GRPID(i)
1034 do i = 1, fstrsolid%DLOAD_ngrp_tot
1036 fstrsolid%step_ctrl(1)%Load(n) = fstrsolid%DLOAD_ngrp_GRPID(i)
1038 do i = 1, fstrsolid%TEMP_ngrp_tot
1040 fstrsolid%step_ctrl(1)%Load(n) = fstrsolid%TEMP_ngrp_GRPID(i)
1042 do i = 1, fstrsolid%SPRING_ngrp_tot
1044 fstrsolid%step_ctrl(1)%Load(n) = fstrsolid%SPRING_ngrp_GRPID(i)
1046 n = fstrsolid%elemact%ELEMACT_egrp_tot
1047 if( n>0 )
allocate( fstrsolid%step_ctrl(1)%ElemActivation(n) )
1049 fstrsolid%step_ctrl(1)%ElemActivation(i) = fstrsolid%elemact%ELEMACT_egrp_GRPID(i)
1058 if( p%PARAM%solution_type ==
kstheat)
then
1059 p%PARAM%fg_irres = fstrsolid%output_ctrl(3)%frequency
1060 p%PARAM%fg_iwres = fstrsolid%output_ctrl(4)%frequency
1061 p%HEAT%elemact = p%SOLID%elemact
1065 do i=1,hecmesh%section%n_sect
1066 cid = hecmesh%section%sect_mat_ID_item(i)
1067 n = fstrsolid%materials(cid)%totallyr
1068 if (n > n_totlyr)
then
1072 p%SOLID%max_lyr = n_totlyr
1083 type(hecmwst_local_mesh),
target :: hecMESH
1086 integer :: ndof, ntotal, ierror, ic_type
1090 fstrsolid%BOUNDARY_ngrp_tot = 0
1091 fstrsolid%BOUNDARY_ngrp_rot = 0
1092 fstrsolid%CLOAD_ngrp_tot = 0
1093 fstrsolid%CLOAD_ngrp_rot = 0
1094 fstrsolid%DLOAD_ngrp_tot = 0
1095 fstrsolid%DLOAD_follow = 1
1096 fstrsolid%TEMP_ngrp_tot = 0
1097 fstrsolid%SPRING_ngrp_tot = 0
1098 fstrsolid%TEMP_irres = 0
1099 fstrsolid%TEMP_tstep = 1
1100 fstrsolid%TEMP_interval = 1
1101 fstrsolid%TEMP_rtype = 1
1102 fstrsolid%TEMP_factor = 1.d0
1103 fstrsolid%VELOCITY_ngrp_tot = 0
1104 fstrsolid%VELOCITY_ngrp_rot = 0
1105 fstrsolid%ACCELERATION_ngrp_tot = 0
1106 fstrsolid%COUPLE_ngrp_tot = 0
1108 fstrsolid%restart_nout= 0
1109 fstrsolid%is_smoothing_active = .false.
1110 fstrsolid%has_finite_rotation_kinematics = .false.
1111 fstrsolid%finite_rotation_state_ready = .false.
1120 type(hecmwst_local_mesh),
target :: hecMESH
1123 integer :: ndof, ntotal, ierror, ic_type
1126 ntotal=ndof*hecmesh%n_node
1127 fstrsolid%has_finite_rotation_kinematics = &
1129 fstrsolid%finite_rotation_state_ready = .false.
1131 allocate ( fstrsolid%GL( ntotal ) ,stat=ierror )
1132 if( ierror /= 0 )
then
1133 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, GL>'
1134 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1136 call hecmw_abort( hecmw_comm_get_comm())
1138 allocate ( fstrsolid%GL0( ntotal ) ,stat=ierror )
1139 if( ierror /= 0 )
then
1140 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, GL0>'
1141 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1143 call hecmw_abort( hecmw_comm_get_comm())
1145 allocate ( fstrsolid%EFORCE( ntotal ) ,stat=ierror )
1146 if( ierror /= 0 )
then
1147 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, EFORCE>'
1148 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1150 call hecmw_abort( hecmw_comm_get_comm())
1159 allocate ( fstrsolid%unode( ntotal ) ,stat=ierror )
1160 if( ierror /= 0 )
then
1161 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, unode>'
1162 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1164 call hecmw_abort( hecmw_comm_get_comm())
1166 allocate ( fstrsolid%unode_bak( ntotal ) ,stat=ierror )
1167 if( ierror /= 0 )
then
1168 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, unode>'
1169 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1171 call hecmw_abort( hecmw_comm_get_comm())
1173 allocate ( fstrsolid%dunode( ntotal ) ,stat=ierror )
1174 if( ierror /= 0 )
then
1175 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, dunode>'
1176 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1178 call hecmw_abort( hecmw_comm_get_comm())
1180 allocate ( fstrsolid%ddunode( ntotal ) ,stat=ierror )
1181 if( ierror /= 0 )
then
1182 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, ddunode>'
1183 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1185 call hecmw_abort( hecmw_comm_get_comm())
1187 if( fstrsolid%has_finite_rotation_kinematics )
then
1188 allocate ( fstrsolid%shell_node_mode( hecmesh%n_node ) ,stat=ierror )
1189 if( ierror /= 0 )
then
1190 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, shell_node_mode>'
1191 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1193 call hecmw_abort( hecmw_comm_get_comm())
1196 allocate ( fstrsolid%shell_rot_state( hecmesh%n_node ) ,stat=ierror )
1197 if( ierror /= 0 )
then
1198 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, shell_rot_state>'
1199 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1201 call hecmw_abort( hecmw_comm_get_comm())
1203 allocate ( fstrsolid%shell_ref_triad( 9*hecmesh%n_node ) ,stat=ierror )
1204 if( ierror /= 0 )
then
1205 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, shell_ref_triad>'
1206 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1208 call hecmw_abort( hecmw_comm_get_comm())
1210 allocate ( fstrsolid%shell_triad( 9*hecmesh%n_node ) ,stat=ierror )
1211 if( ierror /= 0 )
then
1212 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, shell_triad>'
1213 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1215 call hecmw_abort( hecmw_comm_get_comm())
1217 allocate ( fstrsolid%shell_triad_bak( 9*hecmesh%n_node ) ,stat=ierror )
1218 if( ierror /= 0 )
then
1219 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, shell_triad_bak>'
1220 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1222 call hecmw_abort( hecmw_comm_get_comm())
1224 allocate ( fstrsolid%shell_dtriad( 9*hecmesh%n_node ) ,stat=ierror )
1225 if( ierror /= 0 )
then
1226 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, shell_dtriad>'
1227 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1229 call hecmw_abort( hecmw_comm_get_comm())
1231 allocate ( fstrsolid%shell_drill( hecmesh%n_node ) ,stat=ierror )
1232 if( ierror /= 0 )
then
1233 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, shell_drill>'
1234 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1236 call hecmw_abort( hecmw_comm_get_comm())
1238 allocate ( fstrsolid%shell_drill_bak( hecmesh%n_node ) ,stat=ierror )
1239 if( ierror /= 0 )
then
1240 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, shell_drill_bak>'
1241 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1243 call hecmw_abort( hecmw_comm_get_comm())
1245 allocate ( fstrsolid%shell_ddrill( hecmesh%n_node ) ,stat=ierror )
1246 if( ierror /= 0 )
then
1247 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, shell_ddrill>'
1248 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1250 call hecmw_abort( hecmw_comm_get_comm())
1253 allocate ( fstrsolid%QFORCE( ntotal ) ,stat=ierror )
1254 if( ierror /= 0 )
then
1255 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, QFORCE>'
1256 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1258 call hecmw_abort( hecmw_comm_get_comm())
1260 allocate ( fstrsolid%DFORCE( ntotal ) ,stat=ierror )
1261 if( ierror /= 0 )
then
1262 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, DFORCE>'
1263 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1265 call hecmw_abort( hecmw_comm_get_comm())
1267 allocate ( fstrsolid%QFORCE_bak( ntotal ) ,stat=ierror )
1268 if( ierror /= 0 )
then
1269 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, QFORCE_bak>'
1270 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1272 call hecmw_abort( hecmw_comm_get_comm())
1275 fstrsolid%GL(:)=0.d0
1276 fstrsolid%GL0(:)=0.d0
1278 fstrsolid%unode(:) = 0.d0
1279 fstrsolid%unode_bak(:) = 0.d0
1280 fstrsolid%dunode(:) = 0.d0
1281 fstrsolid%ddunode(:) = 0.d0
1282 if(
associated(fstrsolid%shell_rot_state) ) fstrsolid%shell_rot_state(:) = 0
1283 if(
associated(fstrsolid%shell_ref_triad) ) fstrsolid%shell_ref_triad(:) = 0.d0
1284 if(
associated(fstrsolid%shell_triad) ) fstrsolid%shell_triad(:) = 0.d0
1285 if(
associated(fstrsolid%shell_triad_bak) ) fstrsolid%shell_triad_bak(:) = 0.d0
1286 if(
associated(fstrsolid%shell_dtriad) ) fstrsolid%shell_dtriad(:) = 0.d0
1287 if(
associated(fstrsolid%shell_drill) ) fstrsolid%shell_drill(:) = 0.d0
1288 if(
associated(fstrsolid%shell_drill_bak) ) fstrsolid%shell_drill_bak(:) = 0.d0
1289 if(
associated(fstrsolid%shell_ddrill) ) fstrsolid%shell_ddrill(:) = 0.d0
1290 fstrsolid%QFORCE(:) = 0.d0
1291 fstrsolid%QFORCE_bak(:) = 0.d0
1292 fstrsolid%FACTOR( 1:2 ) = 0.d0
1295 fstrsolid%n_fix_mpc = hecmesh%mpc%n_mpc
1296 if( fstrsolid%n_fix_mpc>0 )
then
1297 allocate( fstrsolid%mpc_const( fstrsolid%n_fix_mpc ) )
1298 fstrsolid%mpc_const(:) = hecmesh%mpc%mpc_const(:)
1302 fstrsolid%FACTOR(2)=1.d0
1303 fstrsolid%FACTOR(1)=0.d0
1307 type(hecmwst_local_mesh),
target :: hecMESH
1310 logical,
allocatable :: is_selem_list(:)
1313 do isect=1,hecmesh%section%n_sect
1314 if( fstrsolid%sections(isect)%elemopt341 ==
kel341sesns ) fstrsolid%is_smoothing_active = .true.
1316 if( .not. fstrsolid%is_smoothing_active )
return
1318 allocate(is_selem_list(hecmesh%n_elem), stat=i)
1320 write(*,*)
'Allocation error: is_selem_list'
1323 is_selem_list(:) = .false.
1325 do i=1,hecmesh%n_elem
1326 isect= hecmesh%section_ID(i)
1327 if( hecmesh%elem_type(i) /= fe_tet4n ) cycle
1328 if( fstrsolid%sections(isect)%elemopt341 ==
kel341sesns ) is_selem_list(i) = .true.
1331 call hecmw_create_smoothing_element_connectivity(hecmesh,is_selem_list)
1333 deallocate(is_selem_list)
1339 type(hecmwst_local_mesh),
target :: hecMESH
1342 integer :: i, isect, nodlocal(fstrSOLID%max_ncon), iiS, nn, con_stf
1344 if( fstrsolid%max_ncon_stf > 20 ) fstrsolid%max_ncon_stf = 20
1346 do i=1,hecmesh%n_elem
1347 isect= hecmesh%section_ID(i)
1348 if( hecmesh%elem_type(i) /= fe_tet4n ) cycle
1349 if( fstrsolid%sections(isect)%elemopt341 /=
kel341sesns ) cycle
1350 iis = hecmesh%elem_node_index(i-1)
1351 nn = hecmesh%elem_node_index(i-1) - iis
1352 nodlocal(1:nn) = hecmesh%elem_node_item(iis+1:iis+nn)
1354 if( con_stf > fstrsolid%max_ncon_stf ) fstrsolid%max_ncon_stf = con_stf
1364 type(hecmwst_local_mesh),
target :: hecMESH
1366 integer(kind=kint),
intent(in) :: solution_type
1368 integer :: i, j, ng, isect, ndof, id, nn, n_elem, nthick
1371 if( hecmesh%n_elem <=0 )
then
1372 stop
"no element defined!"
1375 fstrsolid%maxn_gauss = 0
1376 fstrsolid%max_ncon = 0
1382 n_elem = hecmesh%elem_type_index(hecmesh%n_elem_type)
1383 allocate( fstrsolid%elements(n_elem) )
1386 fstrsolid%elements(i)%elemact_flag = kelact_undefined
1387 if( solution_type ==
kstheat) cycle
1389 fstrsolid%elements(i)%etype = hecmesh%elem_type(i)
1390 if( hecmesh%elem_type(i)==301 ) fstrsolid%elements(i)%etype=111
1391 if (hecmw_is_etype_link(fstrsolid%elements(i)%etype)) cycle
1392 if (hecmw_is_etype_patch(fstrsolid%elements(i)%etype)) cycle
1394 if( ng > fstrsolid%maxn_gauss ) fstrsolid%maxn_gauss = ng
1395 if(ng>0)
allocate( fstrsolid%elements(i)%gausses( ng ) )
1397 isect= hecmesh%section_ID(i)
1400 id=hecmesh%section%sect_opt(isect)
1402 fstrsolid%elements(i)%iset=1
1403 else if( id==1)
then
1404 fstrsolid%elements(i)%iset=0
1405 else if( id==2)
then
1406 fstrsolid%elements(i)%iset=2
1410 if( isect<0 .or. isect>hecmesh%section%n_sect ) &
1411 stop
"Error in element's section definition"
1412 id = hecmesh%section%sect_mat_ID_item(isect)
1413 fstrsolid%materials(id)%cdsys_ID = hecmesh%section%sect_orien_ID(isect)
1414 nn = hecmesh%elem_node_index(i)-hecmesh%elem_node_index(i-1)
1416 fstrsolid%elements(i)%gausses(j)%pMaterial => fstrsolid%materials(id)
1421 fstrsolid%materials(id) ) ) &
1424 fstrsolid%materials(id)%totallyr, nthick )
1426 allocate(fstrsolid%elements(i)%equiForces(nn*ndof))
1427 fstrsolid%elements(i)%equiForces = 0.0d0
1428 if( nn > fstrsolid%max_ncon ) fstrsolid%max_ncon = nn
1430 if( hecmesh%elem_type(i)==361 )
then
1431 if( fstrsolid%sections(isect)%elemopt361==
kel361ic )
then
1432 allocate( fstrsolid%elements(i)%aux(3,3) )
1433 fstrsolid%elements(i)%aux = 0.0d0
1435 fstrsolid%elements(i)%p(1) = 0.0d0
1440 fstrsolid%max_ncon_stf = fstrsolid%max_ncon
1443 call hecmw_allreduce_i1(hecmesh,fstrsolid%maxn_gauss,hecmw_max)
1450 integer :: i, j, ierror
1451 if(
associated(fstrsolid%materials) )
then
1452 do j=1,
size(fstrsolid%materials)
1453 call finalizematerial(fstrsolid%materials(j))
1455 deallocate( fstrsolid%materials )
1457 if( .not.
associated(fstrsolid%elements ) )
return
1458 do i=1,
size(fstrsolid%elements)
1459 if(
associated(fstrsolid%elements(i)%gausses) )
then
1460 do j=1,
size(fstrsolid%elements(i)%gausses)
1461 call fstr_finalize_gauss(fstrsolid%elements(i)%gausses(j))
1463 deallocate( fstrsolid%elements(i)%gausses )
1466 if(
associated(fstrsolid%elements(i)%equiForces) )
then
1467 deallocate(fstrsolid%elements(i)%equiForces)
1469 if(
associated(fstrsolid%elements(i)%aux) )
then
1470 deallocate(fstrsolid%elements(i)%aux)
1474 deallocate( fstrsolid%elements )
1475 if(
associated( fstrsolid%mpc_const ) )
then
1476 deallocate( fstrsolid%mpc_const )
1479 if(
associated(fstrsolid%step_ctrl) )
then
1480 do i=1,
size(fstrsolid%step_ctrl)
1483 deallocate( fstrsolid%step_ctrl )
1485 if(
associated(fstrsolid%output_ctrl) )
then
1486 do i=1,
size(fstrsolid%output_ctrl)
1487 if( fstrsolid%output_ctrl(i)%filenum==
iutb ) &
1488 close(fstrsolid%output_ctrl(i)%filenum)
1490 deallocate(fstrsolid%output_ctrl)
1492 if(
associated( fstrsolid%sections ) )
then
1493 deallocate( fstrsolid%sections )
1496 if(
associated(fstrsolid%GL) )
then
1497 deallocate(fstrsolid%GL ,stat=ierror)
1498 if( ierror /= 0 )
then
1499 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, GL>'
1501 call hecmw_abort( hecmw_comm_get_comm())
1504 if(
associated(fstrsolid%EFORCE) )
then
1505 deallocate(fstrsolid%EFORCE ,stat=ierror)
1506 if( ierror /= 0 )
then
1507 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, EFORCE>'
1509 call hecmw_abort( hecmw_comm_get_comm())
1512 if(
associated(fstrsolid%unode) )
then
1513 deallocate(fstrsolid%unode ,stat=ierror)
1514 if( ierror /= 0 )
then
1515 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, unode>'
1517 call hecmw_abort( hecmw_comm_get_comm())
1520 if(
associated(fstrsolid%unode_bak) )
then
1521 deallocate(fstrsolid%unode_bak ,stat=ierror)
1522 if( ierror /= 0 )
then
1523 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, unode_bak>'
1525 call hecmw_abort( hecmw_comm_get_comm())
1528 if(
associated(fstrsolid%dunode) )
then
1529 deallocate(fstrsolid%dunode ,stat=ierror)
1530 if( ierror /= 0 )
then
1531 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, dunode>'
1533 call hecmw_abort( hecmw_comm_get_comm())
1536 if(
associated(fstrsolid%ddunode) )
then
1537 deallocate(fstrsolid%ddunode ,stat=ierror)
1538 if( ierror /= 0 )
then
1539 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, ddunode>'
1541 call hecmw_abort( hecmw_comm_get_comm())
1544 if(
associated(fstrsolid%shell_node_mode) )
then
1545 deallocate(fstrsolid%shell_node_mode ,stat=ierror)
1546 if( ierror /= 0 )
then
1547 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, shell_node_mode>'
1549 call hecmw_abort( hecmw_comm_get_comm())
1552 if(
associated(fstrsolid%shell_rot_state) )
then
1553 deallocate(fstrsolid%shell_rot_state ,stat=ierror)
1554 if( ierror /= 0 )
then
1555 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, shell_rot_state>'
1557 call hecmw_abort( hecmw_comm_get_comm())
1560 if(
associated(fstrsolid%shell_ref_triad) )
then
1561 deallocate(fstrsolid%shell_ref_triad ,stat=ierror)
1562 if( ierror /= 0 )
then
1563 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, shell_ref_triad>'
1565 call hecmw_abort( hecmw_comm_get_comm())
1568 if(
associated(fstrsolid%shell_triad) )
then
1569 deallocate(fstrsolid%shell_triad ,stat=ierror)
1570 if( ierror /= 0 )
then
1571 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, shell_triad>'
1573 call hecmw_abort( hecmw_comm_get_comm())
1576 if(
associated(fstrsolid%shell_triad_bak) )
then
1577 deallocate(fstrsolid%shell_triad_bak ,stat=ierror)
1578 if( ierror /= 0 )
then
1579 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, shell_triad_bak>'
1581 call hecmw_abort( hecmw_comm_get_comm())
1584 if(
associated(fstrsolid%shell_dtriad) )
then
1585 deallocate(fstrsolid%shell_dtriad ,stat=ierror)
1586 if( ierror /= 0 )
then
1587 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, shell_dtriad>'
1589 call hecmw_abort( hecmw_comm_get_comm())
1592 if(
associated(fstrsolid%shell_drill) )
then
1593 deallocate(fstrsolid%shell_drill ,stat=ierror)
1594 if( ierror /= 0 )
then
1595 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, shell_drill>'
1597 call hecmw_abort( hecmw_comm_get_comm())
1600 if(
associated(fstrsolid%shell_drill_bak) )
then
1601 deallocate(fstrsolid%shell_drill_bak ,stat=ierror)
1602 if( ierror /= 0 )
then
1603 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, shell_drill_bak>'
1605 call hecmw_abort( hecmw_comm_get_comm())
1608 if(
associated(fstrsolid%shell_ddrill) )
then
1609 deallocate(fstrsolid%shell_ddrill ,stat=ierror)
1610 if( ierror /= 0 )
then
1611 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, shell_ddrill>'
1613 call hecmw_abort( hecmw_comm_get_comm())
1616 if(
associated(fstrsolid%QFORCE) )
then
1617 deallocate(fstrsolid%QFORCE ,stat=ierror)
1618 if( ierror /= 0 )
then
1619 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, QFORCE>'
1621 call hecmw_abort( hecmw_comm_get_comm())
1624 if(
associated(fstrsolid%DFORCE) )
then
1625 deallocate(fstrsolid%DFORCE ,stat=ierror)
1626 if( ierror /= 0 )
then
1627 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, DFORCE>'
1629 call hecmw_abort( hecmw_comm_get_comm())
1632 if(
associated(fstrsolid%temperature) )
then
1633 deallocate(fstrsolid%temperature ,stat=ierror)
1634 if( ierror /= 0 )
then
1635 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, temperature>'
1637 call hecmw_abort( hecmw_comm_get_comm())
1640 if(
associated(fstrsolid%last_temp) )
then
1641 deallocate(fstrsolid%last_temp ,stat=ierror)
1642 if( ierror /= 0 )
then
1643 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, reftemp>'
1645 call hecmw_abort( hecmw_comm_get_comm())
1648 if(
associated(fstrsolid%temp_bak) )
then
1649 deallocate(fstrsolid%temp_bak ,stat=ierror)
1650 if( ierror /= 0 )
then
1651 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, reftemp>'
1653 call hecmw_abort( hecmw_comm_get_comm())
1658 if(
associated(fstrsolid%BOUNDARY_ngrp_GRPID) )
then
1659 deallocate(fstrsolid%BOUNDARY_ngrp_GRPID, stat=ierror)
1660 if( ierror /= 0 )
then
1661 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, BOUNDARY_ngrp_GRPID>'
1663 call hecmw_abort( hecmw_comm_get_comm())
1666 if(
associated(fstrsolid%BOUNDARY_ngrp_ID) )
then
1667 deallocate(fstrsolid%BOUNDARY_ngrp_ID, stat=ierror)
1668 if( ierror /= 0 )
then
1669 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, BOUNDARY_ngrp_ID>'
1671 call hecmw_abort( hecmw_comm_get_comm())
1674 if(
associated(fstrsolid%BOUNDARY_ngrp_type) )
then
1675 deallocate(fstrsolid%BOUNDARY_ngrp_type, stat=ierror)
1676 if( ierror /= 0 )
then
1677 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, BOUNDARY_ngrp_type>'
1679 call hecmw_abort( hecmw_comm_get_comm())
1682 if(
associated(fstrsolid%BOUNDARY_ngrp_val) )
then
1683 deallocate(fstrsolid%BOUNDARY_ngrp_val, stat=ierror)
1684 if( ierror /= 0 )
then
1685 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, BOUNDARY_ngrp_val>'
1687 call hecmw_abort( hecmw_comm_get_comm())
1690 if(
associated(fstrsolid%BOUNDARY_ngrp_amp) )
then
1691 deallocate(fstrsolid%BOUNDARY_ngrp_amp, stat=ierror)
1692 if( ierror /= 0 )
then
1693 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, BOUNDARY_ngrp_amp>'
1695 call hecmw_abort( hecmw_comm_get_comm())
1698 if(
associated(fstrsolid%BOUNDARY_ngrp_istot) )
then
1699 deallocate(fstrsolid%BOUNDARY_ngrp_istot, stat=ierror)
1700 if( ierror /= 0 )
then
1701 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, BOUNDARY_ngrp_istot>'
1703 call hecmw_abort( hecmw_comm_get_comm())
1706 if(
associated(fstrsolid%BOUNDARY_ngrp_rotID) )
then
1707 deallocate(fstrsolid%BOUNDARY_ngrp_rotID, stat=ierror)
1708 if( ierror /= 0 )
then
1709 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, BOUNDARY_ngrp_rotID>'
1711 call hecmw_abort( hecmw_comm_get_comm())
1714 if(
associated(fstrsolid%BOUNDARY_ngrp_centerID) )
then
1715 deallocate(fstrsolid%BOUNDARY_ngrp_centerID, stat=ierror)
1716 if( ierror /= 0 )
then
1717 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, BOUNDARY_ngrp_centerID>'
1719 call hecmw_abort( hecmw_comm_get_comm())
1724 if(
associated(fstrsolid%CLOAD_ngrp_GRPID) )
then
1725 deallocate(fstrsolid%CLOAD_ngrp_GRPID, stat=ierror)
1726 if( ierror /= 0 )
then
1727 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, CLOAD_ngrp_GRPID>'
1729 call hecmw_abort( hecmw_comm_get_comm())
1732 if(
associated(fstrsolid%CLOAD_ngrp_ID) )
then
1733 deallocate(fstrsolid%CLOAD_ngrp_ID, stat=ierror)
1734 if( ierror /= 0 )
then
1735 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, CLOAD_ngrp_ID>'
1737 call hecmw_abort( hecmw_comm_get_comm())
1740 if(
associated(fstrsolid%CLOAD_ngrp_DOF) )
then
1741 deallocate(fstrsolid%CLOAD_ngrp_DOF, stat=ierror)
1742 if( ierror /= 0 )
then
1743 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, CLOAD_ngrp_DOF>'
1745 call hecmw_abort( hecmw_comm_get_comm())
1748 if(
associated(fstrsolid%CLOAD_ngrp_val) )
then
1749 deallocate(fstrsolid%CLOAD_ngrp_val, stat=ierror)
1750 if( ierror /= 0 )
then
1751 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, CLOAD_ngrp_val>'
1753 call hecmw_abort( hecmw_comm_get_comm())
1756 if(
associated(fstrsolid%CLOAD_ngrp_amp) )
then
1757 deallocate(fstrsolid%CLOAD_ngrp_amp, stat=ierror)
1758 if( ierror /= 0 )
then
1759 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, CLOAD_ngrp_amp>'
1761 call hecmw_abort( hecmw_comm_get_comm())
1764 if(
associated(fstrsolid%CLOAD_ngrp_rotID) )
then
1765 deallocate(fstrsolid%CLOAD_ngrp_rotID, stat=ierror)
1766 if( ierror /= 0 )
then
1767 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, CLOAD_ngrp_rotID>'
1769 call hecmw_abort( hecmw_comm_get_comm())
1772 if(
associated(fstrsolid%CLOAD_ngrp_centerID) )
then
1773 deallocate(fstrsolid%CLOAD_ngrp_centerID, stat=ierror)
1774 if( ierror /= 0 )
then
1775 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, CLOAD_ngrp_centerID>'
1777 call hecmw_abort( hecmw_comm_get_comm())
1788 fstrheat%STEPtot = 0
1789 fstrheat%MATERIALtot = 0
1790 fstrheat%AMPLITUDEtot= 0
1791 fstrheat%T_FIX_tot = 0
1792 fstrheat%Q_NOD_tot = 0
1793 fstrheat%Q_VOL_tot = 0
1794 fstrheat%Q_SUF_tot = 0
1795 fstrheat%R_SUF_tot = 0
1796 fstrheat%H_SUF_tot = 0
1798 fstrheat%beta = -1.0d0
1807 fstreig%maxiter = 60
1810 fstreig%sigma = 0.01d0
1811 fstreig%tolerance = 1.0d-6
1812 fstreig%totalmass = 0.0d0
1819 fstrdynamic%idx_eqa = 1
1820 fstrdynamic%idx_resp = 1
1821 fstrdynamic%n_step = 1
1822 fstrdynamic%t_start = 0.0
1823 fstrdynamic%t_curr = 0.0d0
1824 fstrdynamic%t_end = 1.0
1825 fstrdynamic%t_delta = 1.0
1826 fstrdynamic%gamma = 0.5
1827 fstrdynamic%beta = 0.25
1828 fstrdynamic%idx_mas = 1
1829 fstrdynamic%idx_dmp = 1
1830 fstrdynamic%ray_m = 0.0
1831 fstrdynamic%ray_k = 0.0
1832 fstrdynamic%restart_nout = 0
1833 fstrdynamic%nout = 100
1834 fstrdynamic%ngrp_monit = 0
1835 fstrdynamic%nout_monit = 1
1836 fstrdynamic%iout_list(1) = 0
1837 fstrdynamic%iout_list(2) = 0
1838 fstrdynamic%iout_list(3) = 0
1839 fstrdynamic%iout_list(4) = 0
1840 fstrdynamic%iout_list(5) = 0
1841 fstrdynamic%iout_list(6) = 0
1849 type(hecmwst_local_mesh),
target :: hecMESH
1852 integer :: ierror, ndof,nnod
1856 if(fstrdynamic%idx_eqa == 11)
then
1857 allocate( fstrdynamic%DISP(ndof*nnod,3) ,stat=ierror )
1858 if( ierror /= 0 )
then
1859 write(
idbg,*)
'stop due to allocation error <fstr_solve_LINEAR_DYNAMIC, DISP>'
1860 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1862 call hecmw_abort( hecmw_comm_get_comm())
1864 allocate( fstrdynamic%VEL (ndof*nnod,1) ,stat=ierror )
1865 if( ierror /= 0 )
then
1866 write(
idbg,*)
'stop due to allocation error <fstr_solve_LINEAR_DYNAMIC, VEL>'
1867 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1869 call hecmw_abort( hecmw_comm_get_comm())
1871 allocate( fstrdynamic%ACC (ndof*nnod,1) ,stat=ierror )
1872 if( ierror /= 0 )
then
1873 write(
idbg,*)
'stop due to allocation error <fstr_solve_LINEAR_DYNAMIC, ACC>'
1874 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1876 call hecmw_abort( hecmw_comm_get_comm())
1879 allocate( fstrdynamic%DISP(ndof*nnod,2) ,stat=ierror )
1880 if( ierror /= 0 )
then
1881 write(
idbg,*)
'stop due to allocation error <fstr_solve_LINEAR_DYNAMIC, DISP>'
1882 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1884 call hecmw_abort( hecmw_comm_get_comm())
1886 allocate( fstrdynamic%VEL (ndof*nnod,2) ,stat=ierror )
1887 if( ierror /= 0 )
then
1888 write(
idbg,*)
'stop due to allocation error <fstr_solve_LINEAR_DYNAMIC, VEL>'
1889 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1891 call hecmw_abort( hecmw_comm_get_comm())
1893 allocate( fstrdynamic%ACC (ndof*nnod,2) ,stat=ierror )
1894 if( ierror /= 0 )
then
1895 write(
idbg,*)
'stop due to allocation error <fstr_solve_LINEAR_DYNAMIC, ACC>'
1896 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1898 call hecmw_abort( hecmw_comm_get_comm())
1903 allocate( fstrdynamic%VEC1(ndof*nnod) ,stat=ierror )
1904 if( ierror /= 0 )
then
1905 write(
idbg,*)
'stop due to allocation error <fstr_solve_LINEAR_DYNAMIC, VEC1>'
1906 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1908 call hecmw_abort( hecmw_comm_get_comm())
1910 allocate( fstrdynamic%VEC2(ndof*nnod) ,stat=ierror )
1911 if( ierror /= 0 )
then
1912 write(
idbg,*)
'stop due to allocation error <fstr_solve_LINEAR_DYNAMIC, VEC2>'
1913 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1915 call hecmw_abort( hecmw_comm_get_comm())
1917 allocate( fstrdynamic%VEC3(ndof*nnod) ,stat=ierror )
1918 if( ierror /= 0 )
then
1919 write(
idbg,*)
'stop due to allocation error <fstr_solve_LINEAR_DYNAMIC, VEC3>'
1920 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1922 call hecmw_abort( hecmw_comm_get_comm())
1932 if(
associated(fstrdynamic%DISP) ) &
1933 deallocate( fstrdynamic%DISP ,stat=ierror )
1934 if( ierror /= 0 )
then
1935 write(
idbg,*)
'stop due to deallocation error <fstr_solve_LINEAR_DYNAMIC, DISP>'
1937 call hecmw_abort( hecmw_comm_get_comm())
1939 if(
associated(fstrdynamic%VEL) ) &
1940 deallocate( fstrdynamic%VEL ,stat=ierror )
1941 if( ierror /= 0 )
then
1942 write(
idbg,*)
'stop due to deallocation error <fstr_solve_LINEAR_DYNAMIC, VEL>'
1944 call hecmw_abort( hecmw_comm_get_comm())
1946 if(
associated(fstrdynamic%ACC) ) &
1947 deallocate( fstrdynamic%ACC ,stat=ierror )
1948 if( ierror /= 0 )
then
1949 write(
idbg,*)
'stop due to deallocation error <fstr_solve_LINEAR_DYNAMIC, ACC>'
1951 call hecmw_abort( hecmw_comm_get_comm())
1953 if(
associated(fstrdynamic%VEC1) ) &
1954 deallocate( fstrdynamic%VEC1 ,stat=ierror )
1955 if( ierror /= 0 )
then
1956 write(
idbg,*)
'stop due to deallocation error <fstr_solve_LINEAR_DYNAMIC, VEC1>'
1958 call hecmw_abort( hecmw_comm_get_comm())
1960 if(
associated(fstrdynamic%VEC2) ) &
1961 deallocate( fstrdynamic%VEC2 ,stat=ierror )
1962 if( ierror /= 0 )
then
1963 write(
idbg,*)
'stop due to deallocation error <fstr_solve_LINEAR_DYNAMIC, VEC2>'
1965 call hecmw_abort( hecmw_comm_get_comm())
1967 if(
associated(fstrdynamic%VEC3) ) &
1968 deallocate( fstrdynamic%VEC3 ,stat=ierror )
1969 if( ierror /= 0 )
then
1970 write(
idbg,*)
'stop due to deallocation error <fstr_solve_LINEAR_DYNAMIC, VEC3>'
1972 call hecmw_abort( hecmw_comm_get_comm())
1984 integer(kind=kint) :: NDOF, n_node, n_elem, mdof, istat
1985 mdof = (ndof*ndof+ndof)/2;
1986 allocate ( phys%STRAIN (mdof*n_node), stat=istat)
1987 if( istat /= 0 ) stop
"Allocation error: phys%STRAIN"
1988 allocate ( phys%STRESS (mdof*n_node), stat=istat)
1989 if( istat /= 0 ) stop
"Allocation error: phys%STRESS"
1990 allocate ( phys%MISES ( n_node), stat=istat)
1991 if( istat /= 0 ) stop
"Allocation error: phys%MISES"
1992 allocate ( phys%ESTRAIN (mdof*n_elem), stat=istat)
1993 if( istat /= 0 ) stop
"Allocation error: phys%ESTRAIN"
1994 allocate ( phys%ESTRESS (mdof*n_elem), stat=istat)
1995 if( istat /= 0 ) stop
"Allocation error: phys%ESTRESS"
1996 allocate ( phys%EMISES ( n_elem), stat=istat)
1997 if( istat /= 0 ) stop
"Allocation error: phys%EMISES"
1998 allocate ( phys%EPLSTRAIN ( n_elem), stat=istat)
1999 if( istat /= 0 ) stop
"Allocation error: phys%EPLSTRAIN"
2000 allocate ( phys%ENQM (12*n_elem), stat=istat)
2001 if( istat /= 0 ) stop
"Allocation error: phys%ENQM"
2006 integer(kind=kint) :: ctrl, i
2010 if( p%PARAM%solution_type ==
kststatic &
2011 .or. p%PARAM%solution_type ==
ksteigen &
2015 if( p%MESH%n_dof == 6 .or. p%SOLID%is_33shell == 1 )
then
2016 allocate ( p%SOLID%SHELL )
2018 allocate ( p%SOLID%SHELL%LAYER(p%SOLID%max_lyr) )
2019 do i=1,p%SOLID%max_lyr
2020 allocate ( p%SOLID%SHELL%LAYER(i)%PLUS )
2021 allocate ( p%SOLID%SHELL%LAYER(i)%MINUS )
2025 phys => p%SOLID%SHELL
2027 allocate ( p%SOLID%SOLID )
2028 phys => p%SOLID%SOLID
2031 p%SOLID%STRAIN => phys%STRAIN
2032 p%SOLID%STRESS => phys%STRESS
2033 p%SOLID%MISES => phys%MISES
2034 p%SOLID%ESTRAIN => phys%ESTRAIN
2035 p%SOLID%ESTRESS => phys%ESTRESS
2036 p%SOLID%EMISES => phys%EMISES
2037 p%SOLID%EPLSTRAIN => phys%EPLSTRAIN
2038 p%SOLID%ENQM => phys%ENQM
2039 allocate( p%SOLID%REACTION( p%MESH%n_dof*p%MESH%n_node ), stat=i )
2040 if( i /= 0 ) stop
"Allocation error: REACTION"
2043 if( p%PARAM%fg_visual ==
kon )
then
2047 call hecmw_barrier( p%MESH )
2049 if( p%HEAT%STEPtot == 0 )
then
2050 if( p%PARAM%analysis_n == 0 )
then
2057 p%PARAM%analysis_n = 1
2063 p%PARAM%eps = 1.0e-6
2070 p%HEAT%STEP_DLTIME = 0
2071 p%HEAT%STEP_EETIME = 0
2072 p%HEAT%STEP_DELMIN = 0
2073 p%HEAT%STEP_DELMAX = 0
2087 integer(kind=kint) :: ctrl
2088 integer(kind=kint) :: counter
2091 integer(kind=kint) :: rcode
2104 integer(kind=kint) :: ctrl
2105 integer(kind=kint) :: counter
2108 integer(kind=kint) :: rcode
2121 integer(kind=kint) :: ctrl
2122 integer(kind=kint) :: counter
2125 integer(kind=kint) :: rcode
2127 if( counter >= 2 )
then
2128 write(
ilog,*)
'### Error : !SOLVER exists twice in FSTR control file.'
2129 stop hecmw_exit_input
2190 integer(kind=kint) :: ctrl
2191 type( hecmwst_local_mesh ) :: hecmesh
2193 type( tlocalcoordsys ) :: coordsys
2195 integer :: j, is, ie, grp_id(1)
2196 character(len=HECMW_NAME_LEN) :: grp_id_name(1)
2198 integer :: nid, dtype
2199 character(len=HECMW_NAME_LEN) :: data_fmt
2200 real(kind=kreal) :: fdum, xyza(3), xyzb(3), xyzc(3), ff1(3), ff2(3), ff3(3)
2205 coordsys%sys_type = 10
2208 data_fmt =
'COORDINATES,NODES,LOCAL_NODES '
2211 coordsys%sys_type = coordsys%sys_type + dtype
2214 coordsys%sys_name = grp_id_name(1)
2217 data_fmt =
"RRRRRRrrr "
2220 xyza(3), xyzb(1), xyzb(2), xyzb(3), xyzc(1), xyzc(2), xyzc(3) )/=0 )
return
2221 if( coordsys%sys_type==10 )
then
2223 fdum = dsqrt( dot_product(ff1, ff1) )
2224 if( fdum==0.d0 )
return
2228 coordsys%CoordSys(1,:) = ff1
2230 fdum = dsqrt( dot_product(ff3, ff3) )
2231 if( fdum==0.d0 )
return
2232 coordsys%CoordSys(3,:) = ff3/fdum
2234 call cross_product(coordsys%CoordSys(3,:), coordsys%CoordSys(1,:), coordsys%CoordSys(2,:) )
2236 coordsys%CoordSys(1,:) = xyza
2237 coordsys%CoordSys(2,:) = xyzb
2241 coordsys%node_ID(3) = 0
2244 coordsys%node_ID(2), coordsys%node_ID(3) )/=0 )
return
2249 if( maxval(coordsys%node_ID(1:3)) > 10 .or. minval(coordsys%node_ID(1:3)) < 1 )
then
2250 write(*,*)
"!ORIENTATION, DEFINITION=LOCAL_NODES needs three local node numbers (1-10)!"
2251 write(
idbg,*)
"!ORIENTATION, DEFINITION=LOCAL_NODES needs three local node numbers (1-10)!"
2257 if( coordsys%node_ID(3) == 0 )
then
2259 if( nid/=0 .and. nid/=2 )
then
2260 write(*,*)
"We cannot define coordinate system using nodes in other CPU!"
2261 write(
idbg,*)
"We cannot define coordinate system using nodes in other CPU!"
2266 if( nid/=0 .and. nid/=3 )
then
2267 write(*,*)
"We cannot define coordinate system using nodes in other CPU!"
2268 write(
idbg,*)
"We cannot define coordinate system using nodes in other CPU!"
2284 integer(kind=kint) :: ctrl
2285 integer(kind=kint) :: counter
2287 character(HECMW_NAME_LEN) :: amp
2288 integer(kind=kint) :: amp_id
2290 integer(kind=kint) :: rcode, iproc
2302 integer(kind=kint) :: ctrl
2304 type(hecmwst_local_mesh) :: hecmesh
2305 integer,
pointer :: grp_id(:), dof(:)
2306 real(kind=kreal),
pointer :: temp(:)
2307 character(len=HECMW_NAME_LEN),
pointer :: grp_id_name(:)
2308 character(len=HECMW_NAME_LEN) :: data_fmt, ss
2309 integer :: i,j,n, is, ie, gid, nid, rcode
2313 ss =
'TEMPERATURE,VELOCITY,ACCELERATION '
2316 cond%cond_name =
"temperature"
2317 allocate( cond%intval(hecmesh%n_node) )
2318 allocate( cond%realval(hecmesh%n_node) )
2319 elseif( nid==2 )
then
2320 cond%cond_name =
"velocity"
2321 allocate( cond%intval(hecmesh%n_node) )
2322 allocate( cond%realval(hecmesh%n_node) )
2323 elseif( nid==3 )
then
2324 cond%cond_name =
"acceleration"
2325 allocate( cond%intval(hecmesh%n_node) )
2326 allocate( cond%realval(hecmesh%n_node) )
2336 allocate( temp(n), grp_id_name(n), grp_id(n), dof(n) )
2338 write(ss,*) hecmw_name_len
2340 write(data_fmt,
'(a,a,a)')
'S',trim(adjustl(ss)),
'R '
2344 write(data_fmt,
'(a,a,a)')
'S',trim(adjustl(ss)),
'IR '
2350 if(
associated(grp_id) )
deallocate( grp_id )
2351 if(
associated(temp) )
deallocate( temp )
2352 if(
associated(dof) )
deallocate( dof )
2353 if(
associated(grp_id_name) )
deallocate( grp_id_name )
2360 is = hecmesh%node_group%grp_index(gid-1) + 1
2361 ie = hecmesh%node_group%grp_index(gid )
2363 nid = hecmesh%node_group%grp_item(j)
2364 cond%realval(nid) = temp(i)
2365 cond%intval(nid) = dof(i)
2369 if(
associated(grp_id) )
deallocate( grp_id )
2370 if(
associated(temp) )
deallocate( temp )
2371 if(
associated(dof) )
deallocate( dof )
2372 if(
associated(grp_id_name) )
deallocate( grp_id_name )
2381 integer(kind=kint) :: ctrl
2382 integer(kind=kint) :: counter
2384 integer(kind=kint) :: res, visual, neutral
2386 integer(kind=kint) :: rcode
2390 if( res == 1 ) p%PARAM%fg_result = 1
2391 if( visual == 1 ) p%PARAM%fg_visual = 1
2392 if( neutral == 1 ) p%PARAM%fg_neutral = 1
2402 integer(kind=kint) :: ctrl
2403 integer(kind=kint) :: counter
2406 integer(kind=kint) :: rcode
2420 integer(kind=kint) :: ctrl
2421 integer(kind=kint) :: nout
2422 integer(kind=kint) :: version
2424 integer(kind=kint) :: rcode
2442 integer(kind=kint) :: ctrl
2443 integer(kind=kint) :: counter
2445 integer(kind=kint) :: rcode
2446 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
2447 integer(kind=kint) :: i, n, old_size, new_size
2449 if( p%SOLID%file_type /=
kbcffstr )
return
2453 old_size = p%SOLID%COUPLE_ngrp_tot
2454 new_size = old_size + n
2455 p%SOLID%COUPLE_ngrp_tot = new_size
2459 allocate( grp_id_name(n))
2461 p%PARAM%fg_couple_type, &
2462 p%PARAM%fg_couple_first, &
2463 p%PARAM%fg_couple_window, &
2464 grp_id_name, hecmw_name_len )
2467 call surf_grp_name_to_id_ex( p%MESH,
'!COUPLE', &
2468 n, grp_id_name, p%SOLID%COUPLE_ngrp_ID(old_size+1:))
2470 deallocate( grp_id_name )
2471 p%PARAM%fg_couple = 1
2481 integer(kind=kint) :: ctrl
2483 real(kind=kreal),
pointer :: val(:), table(:)
2484 character(len=HECMW_NAME_LEN) :: name
2485 integer :: nline, n, type_def, type_time, type_val, rcode
2488 if( nline<=0 )
return
2489 allocate( val(nline*4) )
2490 allocate( table(nline*4) )
2497 if(
associated(val) )
deallocate( val )
2498 if(
associated(table) )
deallocate( table )
2508 integer(kind=kint) :: ctrl
2509 integer(kind=kint) :: counter
2512 integer(kind=kint) :: rcode
2513 character(HECMW_NAME_LEN) :: amp
2514 integer(kind=kint) :: amp_id
2515 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
2516 integer(kind=kint) :: i, n, old_size, new_size
2517 integer(kind=kint) :: gid, mode, measure, state
2518 real(kind=kreal) ::
eps
2519 real(kind=kreal),
pointer :: thlow(:), thup(:)
2526 old_size = p%SOLID%elemact%ELEMACT_egrp_tot
2527 new_size = old_size + n
2528 p%SOLID%elemact%ELEMACT_egrp_tot = new_size
2539 allocate( grp_id_name(n), thlow(n), thup(n) )
2545 call amp_name_to_id( p%MESH,
'!ELEMENT_ACTIVATION', amp, amp_id )
2547 p%SOLID%elemact%ELEMACT_egrp_amp(old_size+i) = amp_id
2548 p%SOLID%elemact%ELEMACT_egrp_eps(old_size+i) =
eps
2550 p%SOLID%elemact%ELEMACT_egrp_GRPID(old_size+1:new_size) = gid
2551 p%SOLID%elemact%ELEMACT_egrp_depends(old_size+1:new_size) = measure
2552 p%SOLID%elemact%ELEMACT_egrp_ts_lower(old_size+1:new_size) = thlow(1:n)
2553 p%SOLID%elemact%ELEMACT_egrp_ts_upper(old_size+1:new_size) = thup(1:n)
2554 p%SOLID%elemact%ELEMACT_egrp_state(old_size+1:new_size) = state
2556 call elem_grp_name_to_id_ex( p%MESH,
'!ELEMENT_ACTIVATION', n, grp_id_name, p%SOLID%elemact%ELEMACT_egrp_ID(old_size+1:))
2558 deallocate( grp_id_name )
2572 integer(kind=kint) :: ctrl
2573 integer(kind=kint) :: counter
2575 integer(kind=kint) :: rcode
2577 integer :: nout, nout_monit,node_monit_1 ,elem_monit_1 ,intg_monit_1
2578 integer :: ipt, idx_elpl, iout_list(6)
2579 real(kind=kreal) :: sig_y0, h_dash
2581 if( counter > 1 )
then
2588 if( ipt == 2 ) p%PARAM%nlgeom = .true.
2592 write(*,*)
"Warning : !STATIC : parameter 'TYPE=INFINITE' is deprecated." &
2593 & //
" Please use the replacement parameter 'TYPE=INFINITESIMAL'"
2601 nout, nout_monit, node_monit_1, &
2602 elem_monit_1, intg_monit_1 )
2618 integer(kind=kint) :: ctrl
2619 integer(kind=kint) :: counter
2622 integer(kind=kint) :: rcode
2623 integer(kind=kint) ::
type = 0
2624 character(HECMW_NAME_LEN) :: amp, rotc_name(1)
2625 integer(kind=kint) :: amp_id, rotc_id(1), n_rotc
2626 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
2627 integer(kind=kint),
pointer :: dof_ids (:)
2628 integer(kind=kint),
pointer :: dof_ide (:)
2629 real(kind=kreal),
pointer :: val_ptr(:)
2630 integer(kind=kint) :: i, n, old_size, new_size
2632 integer(kind=kint) :: gid, istot
2652 if( rotc_name(1) /=
' ' )
then
2653 if( istot /= 0 )
then
2654 write(*,*)
'fstr control file error : !BOUNDARY : rotational boundary cannot be specified with total value'
2655 write(
ilog,*)
'fstr control file error : !BOUNDARY : rotational boundary cannot be specified with total value'
2658 p%SOLID%BOUNDARY_ngrp_rot = p%SOLID%BOUNDARY_ngrp_rot + 1
2659 n_rotc = p%SOLID%BOUNDARY_ngrp_rot
2660 call node_grp_name_to_id_ex( p%MESH,
'!BOUNDARY,ROT_CENTER=', 1, rotc_name, rotc_id)
2669 old_size = p%SOLID%BOUNDARY_ngrp_tot
2670 new_size = old_size + n
2671 p%SOLID%BOUNDARY_ngrp_tot = new_size
2681 allocate( grp_id_name(n) )
2682 allocate( dof_ids(n) )
2683 allocate( dof_ide(n) )
2684 allocate( val_ptr(n) )
2691 p%SOLID%BOUNDARY_ngrp_GRPID(old_size+1:new_size) = gid
2692 call node_grp_name_to_id_ex( p%MESH,
'!BOUNDARY', n, grp_id_name, p%SOLID%BOUNDARY_ngrp_ID(old_size+1:))
2693 p%SOLID%BOUNDARY_ngrp_istot(old_size+1:new_size) = istot
2696 p%SOLID%BOUNDARY_ngrp_rotID(old_size+1:) = n_rotc
2697 p%SOLID%BOUNDARY_ngrp_centerID(old_size+1:) = rotc_id(1)
2700 if( (dof_ids(i) < 1).or.(6 < dof_ids(i)).or.(dof_ide(i) < 1).or.(6 < dof_ide(i)) )
then
2701 write(*,*)
'fstr control file error : !BOUNDARY : range of dof_ids and dof_ide is from 1 to 6'
2702 write(
ilog,*)
'fstr control file error : !BOUNDARY : range of dof_ids and dof_ide is from 1 to 6'
2705 p%SOLID%BOUNDARY_ngrp_val(old_size+i) = val_ptr(i)
2706 p%SOLID%BOUNDARY_ngrp_type(old_size+i) = 10 * dof_ids(i) + dof_ide(i)
2707 p%SOLID%BOUNDARY_ngrp_amp(old_size+i) = amp_id
2710 deallocate( grp_id_name )
2711 deallocate( dof_ids )
2712 deallocate( dof_ide )
2713 deallocate( val_ptr )
2714 nullify( grp_id_name )
2737 integer(kind=kint) :: ctrl
2738 integer(kind=kint) :: counter
2741 integer(kind=kint) :: rcode
2742 character(HECMW_NAME_LEN) :: amp, rotc_name(1)
2743 integer(kind=kint) :: amp_id, rotc_id(1), n_rotc
2744 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
2745 real(kind=kreal),
pointer :: val_ptr(:)
2746 integer(kind=kint),
pointer :: id_ptr(:)
2747 integer(kind=kint) :: i, n, old_size, new_size
2748 integer(kind=kint) :: gid
2750 if( p%SOLID%file_type /=
kbcffstr )
return
2761 if( rotc_name(1) /=
' ' )
then
2762 p%SOLID%CLOAD_ngrp_rot = p%SOLID%CLOAD_ngrp_rot + 1
2763 n_rotc = p%SOLID%CLOAD_ngrp_rot
2764 call node_grp_name_to_id_ex( p%MESH,
'!CLOAD,ROT_CENTER=', 1, rotc_name, rotc_id)
2769 old_size = p%SOLID%CLOAD_ngrp_tot
2770 new_size = old_size + n
2771 p%SOLID%CLOAD_ngrp_tot = new_size
2782 allocate( grp_id_name(n))
2783 allocate( id_ptr(n) )
2784 allocate( val_ptr(n) )
2792 p%SOLID%CLOAD_ngrp_rotID(old_size+1:) = n_rotc
2793 p%SOLID%CLOAD_ngrp_centerID(old_size+1:) = rotc_id(1)
2797 p%SOLID%CLOAD_ngrp_amp(old_size+i) = amp_id
2798 p%SOLID%CLOAD_ngrp_DOF(old_size+i) = id_ptr(i)
2799 p%SOLID%CLOAD_ngrp_val(old_size+i) = val_ptr(i)
2801 p%SOLID%CLOAD_ngrp_GRPID(old_size+1:new_size) = gid
2802 call node_grp_name_to_id_ex( p%MESH,
'!CLOAD', n, grp_id_name, p%SOLID%CLOAD_ngrp_ID(old_size+1:))
2804 deallocate( grp_id_name )
2805 deallocate( id_ptr )
2806 deallocate( val_ptr )
2807 nullify( grp_id_name )
2811 if( p%MESH%n_refine > 0 )
then
2813 if( hecmw_ngrp_get_number(p%MESH, p%SOLID%CLOAD_NGRP_ID(old_size+i)) > 1 )
then
2814 write(*,*)
'fstr control file error : !CLOAD : cannot be used with NGRP when mesh is refined'
2815 write(
ilog,*)
'fstr control file error : !CLOAD : cannot be used with NGRP when mesh is refined'
2832 integer(kind=kint) :: ctrl
2833 integer(kind=kint) :: counter
2836 integer(kind=kint) :: rcode
2837 character(HECMW_NAME_LEN) :: amp
2838 integer(kind=kint) :: amp_id
2839 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
2840 real(kind=kreal),
pointer :: val_ptr(:)
2841 integer(kind=kint),
pointer :: id_ptr(:)
2842 integer(kind=kint) :: i, n, old_size, new_size
2843 integer(kind=kint) :: gid, loadcase
2846 if( p%SOLID%file_type /=
kbcffstr)
return
2860 old_size = p%FREQ%FLOAD_ngrp_tot
2861 new_size = old_size + n
2864 p%FREQ%FLOAD_ngrp_tot = new_size
2873 allocate( grp_id_name(n) )
2874 allocate( id_ptr(n) )
2875 allocate( val_ptr(n) )
2882 p%FREQ%FLOAD_ngrp_DOF(old_size+i) = id_ptr(i)
2883 p%FREQ%FLOAD_ngrp_valre(old_size+i) = val_ptr(i)
2887 p%FREQ%FLOAD_ngrp_DOF(old_size+i) = id_ptr(i)
2888 p%FREQ%FLOAD_ngrp_valim(old_size+i) = val_ptr(i)
2892 write(*,*)
"Error this load set is not defined!"
2893 write(
ilog,*)
"Error this load set is not defined!"
2894 stop hecmw_exit_model
2896 p%FREQ%FLOAD_ngrp_GRPID(old_size+1:new_size) = gid
2898 p%FREQ%FLOAD_ngrp_ID(old_size+1:), p%FREQ%FLOAD_ngrp_TYPE(old_size+1:))
2900 deallocate( grp_id_name )
2901 deallocate( id_ptr )
2902 deallocate( val_ptr )
2903 nullify( grp_id_name )
2911 integer(kind=kint) :: ctrl
2912 character(len=HECMW_NAME_LEN) :: node_id(:)
2913 integer(kind=kint),
pointer :: dof_id(:)
2914 integer(kind=kint) :: node_id_len
2915 real(kind=kreal),
pointer :: value(:)
2917 character(len=HECMW_NAME_LEN) :: data_fmt, ss
2919 write(ss,*) node_id_len
2920 write(data_fmt,
'(a,a,a)')
'S', trim(adjustl(ss)),
'IR '
2932 integer(kind=kint) :: ctrl
2933 integer(kind=kint) :: counter
2936 integer(kind=kint) :: filename_len
2937 character(len=HECMW_NAME_LEN) :: datafmt, ss
2940 filename_len = hecmw_filename_len
2941 write(ss,*) filename_len
2942 write(datafmt,
'(a,a,a)')
'F', trim(adjustl(ss)),
' '
2957 real(kind=kreal),
pointer :: array(:,:)
2958 integer(kind=kint) :: old_size, new_size, i, j
2959 real(kind=kreal),
pointer :: temp(:,:)
2961 if( old_size >= new_size )
then
2965 if(
associated( array ) )
then
2966 allocate(temp(0:6, old_size))
2969 allocate(array(0:6, new_size))
2973 array(j,i) = temp(j,i)
2978 allocate(array(0:6, new_size))
2988 integer(kind=kint) :: ctrl
2989 integer(kind=kint) :: counter
2992 integer(kind=kint) :: rcode
2993 character(HECMW_NAME_LEN) :: amp
2994 integer(kind=kint) :: amp_id
2995 integer(kind=kint) :: follow
2996 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
2997 real(kind=kreal),
pointer :: new_params(:,:)
2998 logical,
pointer :: fg_surface(:)
2999 integer(kind=kint),
pointer :: lid_ptr(:)
3000 integer(kind=kint) :: i, j, n, old_size, new_size
3001 integer(kind=kint) :: gid
3003 if( p%SOLID%file_type /=
kbcffstr )
return
3010 old_size = p%SOLID%DLOAD_ngrp_tot
3011 new_size = old_size + n
3012 p%SOLID%DLOAD_ngrp_tot = new_size
3021 allocate( grp_id_name(n))
3022 allocate( lid_ptr(n) )
3023 allocate( new_params(0:6,n))
3024 allocate( fg_surface(n))
3027 follow = p%SOLID%DLOAD_follow
3028 if( .not. p%PARAM%nlgeom ) follow = 0
3030 grp_id_name, hecmw_name_len, &
3031 lid_ptr, new_params )
3034 p%SOLID%DLOAD_follow = follow
3036 p%SOLID%DLOAD_ngrp_amp(old_size+i) = amp_id
3037 p%SOLID%DLOAD_ngrp_LID(old_size+i) = lid_ptr(i)
3039 p%SOLID%DLOAD_ngrp_params(j,old_size+i) = new_params(j,i)
3041 fg_surface(i) = ( lid_ptr(i) == 100 )
3043 p%SOLID%DLOAD_ngrp_GRPID(old_size+1:new_size) = gid
3045 deallocate( grp_id_name )
3046 deallocate( lid_ptr )
3047 deallocate( new_params )
3048 deallocate( fg_surface )
3049 nullify( grp_id_name )
3051 nullify( new_params )
3052 nullify( fg_surface )
3065 integer(kind=kint) :: ctrl
3066 integer(kind=kint) :: counter
3069 integer(kind=kint) :: rcode, gid
3070 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
3071 real(kind=kreal),
pointer :: val_ptr(:)
3072 integer(kind=kint) :: i, n, old_size, new_size
3074 if( p%SOLID%file_type /=
kbcffstr )
return
3080 old_size = p%SOLID%TEMP_ngrp_tot
3082 new_size = old_size + n
3084 new_size = old_size + 1
3090 allocate( grp_id_name(n))
3091 allocate( val_ptr(n) )
3095 p%SOLID%TEMP_irres, &
3096 p%SOLID%TEMP_tstep, &
3097 p%SOLID%TEMP_interval, &
3098 p%SOLID%TEMP_rtype, &
3099 grp_id_name, hecmw_name_len, &
3103 p%SOLID%TEMP_ngrp_val(old_size+i) = val_ptr(i)
3105 deallocate( val_ptr )
3108 p%SOLID%TEMP_ngrp_GRPID(old_size+1:new_size) = gid
3110 if( p%SOLID%TEMP_irres == 0 )
then
3111 p%SOLID%TEMP_ngrp_tot = new_size
3112 call node_grp_name_to_id_ex( p%MESH,
'!TEMPERATURE', &
3113 n, grp_id_name, p%SOLID%TEMP_ngrp_ID(old_size+1:))
3115 deallocate( grp_id_name )
3130 integer(kind=kint) :: ctrl
3131 integer(kind=kint) :: counter
3134 integer(kind=kint) :: rcode, incremental
3135 character(HECMW_NAME_LEN) :: amp
3136 integer(kind=kint) :: amp_id
3137 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
3138 real(kind=kreal),
pointer :: val_ptr(:)
3139 integer(kind=kint),
pointer :: id_ptr(:)
3140 integer(kind=kint) :: i, n, old_size, new_size
3141 integer(kind=kint) :: gid
3143 if( p%SOLID%file_type /=
kbcffstr )
return
3148 old_size = p%SOLID%SPRING_ngrp_tot
3149 new_size = old_size + n
3150 p%SOLID%SPRING_ngrp_tot = new_size
3158 allocate( grp_id_name(n))
3159 allocate( id_ptr(n) )
3160 allocate( val_ptr(n) )
3165 rcode =
fstr_ctrl_get_spring( ctrl, amp, grp_id_name, hecmw_name_len, id_ptr, val_ptr, incremental )
3170 p%SOLID%SPRING_ngrp_amp(old_size+i) = amp_id
3171 p%SOLID%SPRING_ngrp_DOF(old_size+i) = id_ptr(i)
3172 p%SOLID%SPRING_ngrp_val(old_size+i) = val_ptr(i)
3174 p%SOLID%SPRING_ngrp_GRPID(old_size+1:new_size) = gid
3175 call node_grp_name_to_id_ex( p%MESH,
'!SPRING', n, grp_id_name, p%SOLID%SPRING_ngrp_ID(old_size+1:))
3176 p%SOLID%SPRING_incremental(old_size+1:new_size) = incremental
3178 deallocate( grp_id_name )
3179 deallocate( id_ptr )
3180 deallocate( val_ptr )
3181 nullify( grp_id_name )
3194 integer(kind=kint) :: ctrl
3195 integer(kind=kint) :: counter
3198 integer(kind=kint) :: rcode
3216 integer(kind=kint) :: ctrl
3217 integer(kind=kint) :: counter
3220 integer(kind=kint) :: rcode
3221 integer(kind=kint) :: n
3222 character(len=HECMW_NAME_LEN) :: mName
3223 integer(kind=kint) :: i
3235 p%PARAM%analysis_n = n
3242 p%PARAM%eps = 1.0e-6
3243 p%PARAM%timepoint_id = 0
3254 if( rcode /= 0 )
then
3258 if(
associated(p%PARAM%timepoints) )
then
3259 do i=1,
size(p%PARAM%timepoints)
3260 if(
hecmw_streqr( p%PARAM%timepoints(i)%name, mname ) )
then
3261 p%PARAM%timepoint_id = i;
exit
3272 p%HEAT%STEP_DLTIME = p%PARAM%dtime
3273 p%HEAT%STEP_EETIME = p%PARAM%etime
3274 p%HEAT%STEP_DELMIN = p%PARAM%dtmin
3275 p%HEAT%STEP_DELMAX = p%PARAM%delmax
3276 p%HEAT%timepoint_id = p%PARAM%timepoint_id
3291 integer(kind=kint) :: ctrl
3292 integer(kind=kint) :: counter
3295 integer(kind=kint) :: rcode
3296 character(HECMW_NAME_LEN) :: amp
3297 integer(kind=kint) :: amp_id
3298 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
3299 real(kind=kreal),
pointer :: value(:)
3300 integer(kind=kint) :: i, j, n, m, head, id, member_n, old_size, new_size
3301 integer(kind=kint),
pointer :: member(:)
3302 integer(kind=kint) :: local_id, rtc
3308 allocate( grp_id_name(n))
3313 grp_id_name, hecmw_name_len,
value )
3324 else if( rtc < 0 )
then
3330 deallocate( grp_id_name )
3336 old_size = p%HEAT%T_FIX_tot
3337 new_size = old_size + m
3341 p%HEAT%T_FIX_tot = new_size
3344 member => p%HEAT%T_FIX_node(head:)
3350 member(1) = local_id
3352 else if( rtc < 0 )
then
3353 member_n =
get_grp_member( p%MESH,
'node_grp', grp_id_name(i), member )
3358 member => member( member_n+1 : )
3361 p%HEAT%T_FIX_val (id) = value(i)
3362 p%HEAT%T_FIX_ampl (id) = amp_id
3367 deallocate( grp_id_name )
3383 integer(kind=kint) :: ctrl
3384 integer(kind=kint) :: counter
3387 integer(kind=kint) :: rcode
3388 character(HECMW_NAME_LEN) :: amp
3389 integer(kind=kint) :: amp_id
3390 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
3391 real(kind=kreal),
pointer :: value(:)
3392 integer(kind=kint) :: i, j, n, m, head, id, member_n, old_size, new_size
3393 integer(kind=kint),
pointer :: member(:)
3394 integer(kind=kint) :: local_id, rtc
3400 allocate( grp_id_name(n))
3405 grp_id_name, hecmw_name_len,
value )
3416 else if( rtc < 0 )
then
3422 deallocate( grp_id_name )
3428 old_size = p%HEAT%Q_NOD_tot
3429 new_size = old_size + m
3433 p%HEAT%Q_NOD_tot = new_size
3436 member => p%HEAT%Q_NOD_node(head:)
3441 member(1) = local_id
3443 else if( rtc < 0 )
then
3444 member_n =
get_grp_member( p%MESH,
'node_grp', grp_id_name(i), member )
3448 if( i<n ) member => member( member_n+1 : )
3450 p%HEAT%Q_NOD_val (id) = value(i)
3451 p%HEAT%Q_NOD_ampl (id) = amp_id
3456 deallocate( grp_id_name )
3473 integer(kind=kint) :: ctrl
3474 integer(kind=kint) :: counter
3477 integer(kind=kint) :: rcode
3478 character(HECMW_NAME_LEN) :: amp
3479 integer(kind=kint) :: amp_id
3480 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
3481 integer(kind=kint),
pointer :: load_type(:)
3482 real(kind=kreal),
pointer :: value(:)
3483 integer(kind=kint) :: i, j, n, m, head, id, member_n, old_size, new_size
3484 integer(kind=kint),
pointer :: member(:)
3485 integer(kind=kint) :: local_id, rtc
3491 allocate( grp_id_name(n))
3492 allocate( load_type(n))
3497 grp_id_name, hecmw_name_len, load_type,
value )
3507 else if( rtc < 0 )
then
3513 deallocate( grp_id_name )
3514 deallocate( load_type )
3520 old_size = p%HEAT%Q_SUF_tot
3521 new_size = old_size + m
3526 p%HEAT%Q_SUF_tot = new_size
3529 member => p%HEAT%Q_SUF_elem(head:)
3534 member(1) = local_id
3536 else if( rtc < 0 )
then
3537 member_n =
get_grp_member( p%MESH,
'elem_grp', grp_id_name(i), member )
3541 if( i<n ) member => member( member_n+1 : )
3543 p%HEAT%Q_SUF_surf (id) = load_type(i)
3544 p%HEAT%Q_SUF_val (id) = value(i)
3545 p%HEAT%Q_SUF_ampl (id) = amp_id
3550 deallocate( grp_id_name )
3551 deallocate( load_type )
3568 integer(kind=kint) :: ctrl
3569 integer(kind=kint) :: counter
3572 integer(kind=kint) :: rcode
3573 character(HECMW_NAME_LEN) :: amp
3574 integer(kind=kint) :: amp_id
3575 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
3576 real(kind=kreal),
pointer :: value(:)
3577 integer(kind=kint) :: i, j, n, m, head, id, member_n, old_size, new_size
3578 integer(kind=kint),
pointer :: member1(:), member2(:)
3584 allocate( grp_id_name(n))
3589 grp_id_name, hecmw_name_len,
value )
3600 deallocate( grp_id_name )
3606 old_size = p%HEAT%Q_SUF_tot
3607 new_size = old_size + m
3612 p%HEAT%Q_SUF_tot = new_size
3615 member1 => p%HEAT%Q_SUF_elem(head:)
3616 member2 => p%HEAT%Q_SUF_surf(head:)
3619 member_n =
get_grp_member( p%MESH,
'surf_grp', grp_id_name(i), member1, member2 )
3621 member1 => member1( member_n+1 : )
3622 member2 => member2( member_n+1 : )
3625 p%HEAT%Q_SUF_val (id) = value(i)
3626 p%HEAT%Q_SUF_ampl (id) = amp_id
3631 deallocate( grp_id_name )
3649 integer(kind=kint) :: ctrl
3650 integer(kind=kint) :: counter
3653 integer(kind=kint) :: rcode
3654 character(HECMW_NAME_LEN) :: amp1, amp2
3655 integer(kind=kint) :: amp_id1, amp_id2
3656 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
3657 integer(kind=kint),
pointer :: load_type(:)
3658 real(kind=kreal),
pointer :: value(:)
3659 real(kind=kreal),
pointer :: shink(:)
3660 integer(kind=kint) :: i, j, n, m, head, id, member_n, old_size, new_size
3661 integer(kind=kint),
pointer :: member(:)
3662 integer(kind=kint) :: local_id, rtc
3668 allocate( grp_id_name(n))
3669 allocate( load_type(n))
3677 grp_id_name, hecmw_name_len, load_type,
value, shink )
3688 else if( rtc < 0 )
then
3694 deallocate( grp_id_name )
3695 deallocate( load_type )
3702 old_size = p%HEAT%H_SUF_tot
3703 new_size = old_size + m
3708 p%HEAT%H_SUF_tot = new_size
3711 member => p%HEAT%H_SUF_elem(head:)
3716 member(1) = local_id
3718 else if( rtc < 0 )
then
3719 member_n =
get_grp_member( p%MESH,
'elem_grp', grp_id_name(i), member )
3723 if( i<n ) member => member( member_n+1 : )
3725 p%HEAT%H_SUF_surf (id) = load_type(i)
3726 p%HEAT%H_SUF_val (id,1) = value(i)
3727 p%HEAT%H_SUF_val (id,2) = shink(i)
3728 p%HEAT%H_SUF_ampl (id,1) = amp_id1
3729 p%HEAT%H_SUF_ampl (id,2) = amp_id2
3734 deallocate( grp_id_name )
3735 deallocate( load_type )
3754 integer(kind=kint) :: ctrl
3755 integer(kind=kint) :: counter
3758 integer(kind=kint) :: rcode
3759 character(HECMW_NAME_LEN) :: amp1, amp2
3760 integer(kind=kint) :: amp_id1, amp_id2
3761 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
3762 real(kind=kreal),
pointer :: value(:)
3763 real(kind=kreal),
pointer :: shink(:)
3764 integer(kind=kint) :: i, j, n, m, head, id, member_n, old_size, new_size
3765 integer(kind=kint),
pointer :: member1(:), member2(:)
3771 allocate( grp_id_name(n))
3778 grp_id_name, hecmw_name_len,
value, shink )
3790 deallocate( grp_id_name )
3797 old_size = p%HEAT%H_SUF_tot
3798 new_size = old_size + m
3803 p%HEAT%H_SUF_tot = new_size
3806 member1 => p%HEAT%H_SUF_elem(head:)
3807 member2 => p%HEAT%H_SUF_surf(head:)
3810 member_n =
get_grp_member( p%MESH,
'surf_grp', grp_id_name(i), member1, member2 )
3812 member1 => member1( member_n+1 : )
3813 member2 => member2( member_n+1 : )
3816 p%HEAT%H_SUF_val (id,1) = value(i)
3817 p%HEAT%H_SUF_val (id,2) = shink(i)
3818 p%HEAT%H_SUF_ampl (id,1) = amp_id1
3819 p%HEAT%H_SUF_ampl (id,2) = amp_id2
3824 deallocate( grp_id_name )
3843 integer(kind=kint) :: ctrl
3844 integer(kind=kint) :: counter
3847 integer(kind=kint) :: rcode
3848 character(HECMW_NAME_LEN) :: amp1, amp2
3849 integer(kind=kint) :: amp_id1, amp_id2
3850 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
3851 integer(kind=kint),
pointer :: load_type(:)
3852 real(kind=kreal),
pointer :: value(:)
3853 real(kind=kreal),
pointer :: shink(:)
3854 integer(kind=kint) :: i, j, n, m, head, id, member_n, old_size, new_size
3855 integer(kind=kint),
pointer :: member(:)
3856 integer(kind=kint) :: local_id, rtc
3862 allocate( grp_id_name(n))
3863 allocate( load_type(n))
3870 grp_id_name, hecmw_name_len, load_type,
value, shink )
3881 else if( rtc < 0 )
then
3887 deallocate( grp_id_name )
3888 deallocate( load_type )
3895 old_size = p%HEAT%R_SUF_tot
3896 new_size = old_size + m
3901 p%HEAT%R_SUF_tot = new_size
3904 member => p%HEAT%R_SUF_elem(head:)
3909 member(1) = local_id
3911 else if( rtc < 0 )
then
3912 member_n =
get_grp_member( p%MESH,
'elem_grp', grp_id_name(i), member )
3916 if( i<n ) member => member( member_n+1 : )
3918 p%HEAT%R_SUF_surf (id) = load_type(i)
3919 p%HEAT%R_SUF_val (id,1) = value(i)
3920 p%HEAT%R_SUF_val (id,2) = shink(i)
3921 p%HEAT%R_SUF_ampl (id,1) = amp_id1
3922 p%HEAT%R_SUF_ampl (id,2) = amp_id2
3927 deallocate( grp_id_name )
3928 deallocate( load_type )
3947 integer(kind=kint) :: ctrl
3948 integer(kind=kint) :: counter
3951 integer(kind=kint) :: rcode
3952 character(HECMW_NAME_LEN) :: amp1, amp2
3953 integer(kind=kint) :: amp_id1, amp_id2
3954 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
3955 real(kind=kreal),
pointer :: value(:)
3956 real(kind=kreal),
pointer :: shink(:)
3957 integer(kind=kint) :: i, j, n, m, head, id, member_n, old_size, new_size
3958 integer(kind=kint),
pointer :: member1(:), member2(:)
3964 allocate( grp_id_name(n))
3982 deallocate( grp_id_name )
3989 old_size = p%HEAT%R_SUF_tot
3990 new_size = old_size + m
3995 p%HEAT%R_SUF_tot = new_size
3998 member1 => p%HEAT%R_SUF_elem(head:)
3999 member2 => p%HEAT%R_SUF_surf(head:)
4002 member_n =
get_grp_member( p%MESH,
'surf_grp', grp_id_name(i), member1, member2 )
4004 member1 => member1( member_n+1 : )
4005 member2 => member2( member_n+1 : )
4008 p%HEAT%R_SUF_val (id,1) = value(i)
4009 p%HEAT%R_SUF_val (id,2) = shink(i)
4010 p%HEAT%R_SUF_ampl (id,1) = amp_id1
4011 p%HEAT%R_SUF_ampl (id,2) = amp_id2
4016 deallocate( grp_id_name )
4032 integer(kind=kint) :: ctrl
4033 integer(kind=kint) :: counter
4036 integer(kind=kint) :: rcode
4038 rcode =
fstr_ctrl_get_eigen( ctrl, p%EIGEN%nget, p%EIGEN%tolerance, p%EIGEN%maxiter, p%EIGEN%sigma)
4054 integer(kind=kint) :: ctrl
4055 integer(kind=kint) :: counter
4057 integer(kind=kint) :: rcode
4058 character(HECMW_NAME_LEN) :: grp_id_name(1)
4059 integer(kind=kint) :: grp_id(1)
4076 grp_id_name(1), hecmw_name_len, &
4082 if (p%DYN%idx_resp == 1)
then
4084 p%DYN%ngrp_monit = grp_id(1)
4086 read(grp_id_name,*) p%DYN%ngrp_monit
4099 integer(kind=kint) :: ctrl
4100 integer(kind=kint) :: counter
4103 integer(kind=kint) :: rcode
4104 integer(kind=kint) :: vType
4105 character(HECMW_NAME_LEN) :: amp, rotc_name(1)
4106 integer(kind=kint) :: amp_id, rotc_id(1), n_rotc
4107 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
4108 integer(kind=kint),
pointer :: dof_ids (:)
4109 integer(kind=kint),
pointer :: dof_ide (:)
4110 real(kind=kreal),
pointer :: val_ptr(:)
4111 integer(kind=kint) :: i, j, n, old_size, new_size
4112 integer(kind=kint) :: gid
4123 if( rotc_name(1) /=
' ' )
then
4124 p%SOLID%VELOCITY_ngrp_rot = p%SOLID%VELOCITY_ngrp_rot + 1
4125 n_rotc = p%SOLID%VELOCITY_ngrp_rot
4126 call node_grp_name_to_id_ex( p%MESH,
'!VELOCITY,ROT_CENTER=', 1, rotc_name, rotc_id)
4131 old_size = p%SOLID%VELOCITY_ngrp_tot
4132 new_size = old_size + n
4133 p%SOLID%VELOCITY_ngrp_tot = new_size
4143 allocate( grp_id_name(n))
4144 allocate( dof_ids(n))
4145 allocate( dof_ide(n))
4146 allocate( val_ptr(n) )
4151 grp_id_name, hecmw_name_len, &
4152 dof_ids, dof_ide, val_ptr )
4154 p%SOLID%VELOCITY_type = vtype
4155 if( vtype ==
kbcinitial ) p%DYN%VarInitialize = .true.
4157 call node_grp_name_to_id_ex( p%MESH,
'!VELOCITY', &
4158 n, grp_id_name, p%SOLID%VELOCITY_ngrp_ID(old_size+1:))
4159 p%SOLID%VELOCITY_ngrp_GRPID(old_size+1:new_size) = gid
4162 p%SOLID%VELOCITY_ngrp_rotID(old_size+1:) = n_rotc
4163 p%SOLID%VELOCITY_ngrp_centerID(old_size+1:) = rotc_id(1)
4167 if( (dof_ids(i) < 1).or.(6 < dof_ids(i)).or.(dof_ide(i) < 1).or.(6 < dof_ide(i)) )
then
4168 write(
ilog,*)
'fstr control file error : !VELOCITY : range of dof_ids and dof_ide is from 1 to 6'
4169 stop hecmw_exit_input
4171 p%SOLID%VELOCITY_ngrp_type(j) = 10 * dof_ids(i) + dof_ide(i)
4172 p%SOLID%VELOCITY_ngrp_amp(j) = amp_id
4173 p%SOLID%VELOCITY_ngrp_val(old_size+i) = val_ptr(i)
4177 deallocate( grp_id_name )
4178 deallocate( dof_ids )
4179 deallocate( dof_ide )
4180 deallocate( val_ptr )
4181 nullify( grp_id_name )
4196 integer(kind=kint) :: ctrl
4197 integer(kind=kint) :: counter
4200 integer(kind=kint) :: rcode
4201 integer(kind=kint) :: aType
4202 character(HECMW_NAME_LEN) :: amp
4203 integer(kind=kint) :: amp_id
4204 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
4205 integer(kind=kint),
pointer :: dof_ids (:)
4206 integer(kind=kint),
pointer :: dof_ide (:)
4207 real(kind=kreal),
pointer :: val_ptr(:)
4208 integer(kind=kint) :: i, j, n, old_size, new_size
4209 integer(kind=kint) :: gid
4216 old_size = p%SOLID%ACCELERATION_ngrp_tot
4217 new_size = old_size + n
4218 p%SOLID%ACCELERATION_ngrp_tot = new_size
4226 allocate( grp_id_name(n))
4227 allocate( dof_ids(n))
4228 allocate( dof_ide(n))
4229 allocate( val_ptr(n))
4234 grp_id_name, hecmw_name_len, &
4235 dof_ids, dof_ide, val_ptr)
4237 p%SOLID%ACCELERATION_type = atype
4238 if( atype ==
kbcinitial )p%DYN%VarInitialize = .true.
4240 call node_grp_name_to_id_ex( p%MESH,
'!ACCELERATION', &
4241 n, grp_id_name, p%SOLID%ACCELERATION_ngrp_ID(old_size+1:))
4242 p%SOLID%ACCELERATION_ngrp_GRPID(old_size+1:new_size) = gid
4246 if( (dof_ids(i) < 1).or.(6 < dof_ids(i)).or.(dof_ide(i) < 1).or.(6 < dof_ide(i)) )
then
4247 write(
ilog,*)
'fstr control file error : !ACCELERATION : range of dof_ids and dof_ide is from 1 to 6'
4248 stop hecmw_exit_input
4250 p%SOLID%ACCELERATION_ngrp_type(j) = 10 * dof_ids(i) + dof_ide(i)
4251 p%SOLID%ACCELERATION_ngrp_amp(j) = amp_id
4252 p%SOLID%ACCELERATION_ngrp_val(old_size+i) = val_ptr(i)
4256 deallocate( grp_id_name )
4257 deallocate( dof_ids )
4258 deallocate( dof_ide )
4259 deallocate( val_ptr )
4260 nullify( grp_id_name )
4277 integer(kind=kint) :: ctrl
4278 integer(kind=kint) :: counter
4281 integer(kind=kint) :: rcode
4327 integer(kind=kint) :: ctrl
4328 type (hecmwST_local_mesh) :: hecMESH
4329 type (fstr_solid ) :: fstrSOLID
4330 write(
ilog,*)
'### Error : In !BOUNDARY, TYPE=NASTRAN is not supported.'
4340 integer(kind=kint) :: ctrl
4344 integer(kind=kint) :: rcode
4358 integer(kind=kint) :: ctrl
4361 integer(kind=kint) :: rcode, nid
4362 character(len=HECMW_NAME_LEN) :: data_fmt
4364 data_fmt =
'SOLUTION,MATERIAL '
4377 type(hecmwst_local_mesh),
pointer :: hecMESH
4378 integer(kind=kint) :: n, i, sgrp_id, ngrp_id, ngrp_id2
4380 n = hecmesh%contact_pair%n_pair
4382 if( hecmesh%contact_pair%type(i) /= hecmw_contact_type_surf_surf ) cycle
4383 sgrp_id = hecmesh%contact_pair%slave_grp_id(i)
4386 hecmesh%contact_pair%type(i) = hecmw_contact_type_node_surf
4387 hecmesh%contact_pair%slave_grp_id(i) = ngrp_id
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)
This module encapsulate the basic functions of all elements provide by this software.
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_solver(ctrl, method, precond, nset, iterlog, timelog, steplog, nier, iterpremax, nrest, nBFGS, scaling, dumptype, dumpexit, usejad, ncolor_in, mpc_method, estcond, method2, recyclepre, solver_opt, contact_elim, resid, singma_diag, sigma, thresh, filter, solver_ropt, loglevel, matvec_impl, precond_impl, recompute_residual)
Read in !SOLVER.
integer(kind=kint) function fstr_ctrl_get_element_activation(ctrl, amp, eps, grp_id_name, mode, measure, state, thlow, thup)
Read in !ELEMENT_ACTIVATION.
integer(kind=kint) function fstr_ctrl_get_contactparam(ctrl, contactparam)
Read in !CONTACT_PARAM !
integer(kind=kint) function fstr_ctrl_get_solution(ctrl, type, nlgeom)
Read in !SOLUTION.
integer(kind=kint) function fstr_ctrl_get_contactalgo(ctrl, algo, augiter, conefollow)
Read in !CONTACT.
integer(kind=kint) function fstr_ctrl_get_contact_if(ctrl, n, contact_if)
Read in contact interference.
integer(kind=kint) function fstr_ctrl_get_couple(ctrl, fg_type, fg_first, fg_window, surf_id, surf_id_len)
Read in !COUPLE.
integer(kind=kint) function fstr_get_autoinc(ctrl, aincparam)
Read in !AUTOINC_PARAM !
integer(kind=kint) function fstr_ctrl_get_amplitude(ctrl, nline, name, type_def, type_time, type_val, n, val, table)
Read in !AMPLITUDE.
logical function fstr_ctrl_get_outitem(ctrl, hecMESH, outinfo)
Read in !OUTPUT_RES & !OUTPUT_VIS.
integer(kind=kint) function fstr_ctrl_get_elemopt(ctrl, elemopt361)
Read in !ELEMOPT.
integer(kind=kint) function fstr_ctrl_get_timepoints(ctrl, tp)
Read in !TIME_POINTS.
integer(kind=kint) function fstr_ctrl_get_echo(ctrl, echo)
Read in !ECHO.
logical function fstr_ctrl_get_contact(ctrl, n, contact, np, tp, ntol, ttol, ctAlgo, cpname, smoothing)
Read in contact definition.
integer(kind=kint) function fstr_ctrl_get_nonlinear_solver(ctrl, method)
Read in !NONLINEAR_SOLVER.
integer(kind=kint) function fstr_ctrl_get_mpc(ctrl, penalty)
Read in !MPC.
integer function fstr_ctrl_get_section(ctrl, hecMESH, sections)
Read in !SECTION.
logical function fstr_ctrl_get_istep(ctrl, hecMESH, steps, tpname, apname)
Read in !STEP and !ISTEP.
integer(kind=kint) function fstr_ctrl_get_write(ctrl, res, visual, femap)
Read in !WRITE.
integer(kind=kint) function fstr_ctrl_get_step(ctrl, amp, iproc)
Read in !STEP.
logical function fstr_ctrl_get_embed(ctrl, n, embed, cpname, smoothing)
Read in contact definition.
This module contains 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 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 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_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)
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_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_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 fstr_convert_contact_type(hecMESH)
Convert SURF-SURF contact to NODE-SURF contact !
subroutine fstr_setup_couple(ctrl, counter, P)
Read in !COUPLE !
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 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 !
subroutine fstr_setup_dynamic(ctrl, counter, P)
Read in !DYNAMIC !
subroutine fstr_setup_nonlinear_solver(ctrl, counter, P)
Read in !NONLINEAR_SOLVER !
subroutine fstr_setup(cntl_filename, hecMESH, fstrPARAM, fstrSOLID, fstrEIG, fstrHEAT, fstrDYNAMIC, fstrCPL, fstrFREQ)
Read in and initialize control data !
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 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 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 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 kcaalagrange
integer(kind=kint), parameter kststaticeigen
integer(kind=kint), parameter kstheat
real(kind=kreal), pointer ref_temp
REFTEMP.
integer(kind=kint), parameter kel361fbar
integer(kind=kint), parameter ksteigen
type(tinitialcondition), dimension(:), pointer, save g_initialcnd
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)
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, parameter stepfixedinc
subroutine init_aincparam(aincparam)
Initializer.
subroutine setup_stepinfo_starttime(stepinfos)
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_beam_radius
integer(kind=kint), parameter viscoelastic
integer(kind=kint), parameter m_exapnsion
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.
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.