27 type(hecmwst_local_mesh),
pointer :: mesh
42 subroutine fstr_setup( cntl_filename, hecMESH, fstrPARAM, &
43 fstrSOLID, fstrEIG, fstrHEAT, fstrDYNAMIC, fstrCPL, fstrFREQ )
45 character(len=HECMW_FILENAME_LEN) :: cntl_filename, input_filename
46 type(hecmwst_local_mesh),
target :: hecMESH
55 integer(kind=kint) :: ctrl, ctrl_list(20), ictrl
58 integer,
parameter :: MAXOUTFILE = 10
59 double precision,
parameter :: dpi = 3.14159265358979323846d0
61 integer(kind=kint) :: version, result, visual, femap, n_totlyr
62 integer(kind=kint) :: rcode, n, i, j, cid, nout, nin, ierror, cparam_id
63 character(len=HECMW_NAME_LEN) :: header_name, fname(MAXOUTFILE)
64 real(kind=kreal) :: ee, pp, rho, alpha, thick, alpha_over_mu
65 real(kind=kreal) :: beam_radius, &
66 beam_angle1, beam_angle2, beam_angle3,&
67 beam_angle4, beam_angle5, beam_angle6
71 character(len=HECMW_FILENAME_LEN) :: logfileNAME, mName, mName2
74 integer(kind=kint) :: c_solution, c_solver, c_nlsolver, c_step, c_write, c_echo, c_amplitude
75 integer(kind=kint) :: c_static, c_boundary, c_cload, c_dload, c_temperature, c_reftemp, c_spring, c_elemact
76 integer(kind=kint) :: c_heat, c_fixtemp, c_cflux, c_dflux, c_sflux, c_film, c_sfilm, c_radiate, c_sradiate
77 integer(kind=kint) :: c_eigen, c_contact, c_contactparam, c_embed, c_contact_if
78 integer(kind=kint) :: c_dynamic, c_velocity, c_acceleration
79 integer(kind=kint) :: c_fload, c_eigenread
80 integer(kind=kint) :: c_couple, c_material
81 integer(kind=kint) :: c_mpc, c_weldline, c_initial
82 integer(kind=kint) :: c_istep, c_localcoord, c_section
83 integer(kind=kint) :: c_elemopt, c_aincparam, c_timepoints
84 integer(kind=kint) :: c_output, islog
85 integer(kind=kint) :: k
86 integer(kind=kint) :: cache = 1
88 write( logfilename,
'(i5,''.log'')' )
myrank
102 c_solution = 0; c_solver = 0; c_nlsolver = 0; c_step = 0; c_output = 0; c_echo = 0; c_amplitude = 0
103 c_static = 0; c_boundary = 0; c_cload = 0; c_dload = 0; c_temperature = 0; c_reftemp = 0; c_spring = 0;
105 c_heat = 0; c_fixtemp = 0; c_cflux = 0; c_dflux = 0; c_sflux = 0
106 c_film = 0; c_sfilm = 0; c_radiate= 0; c_sradiate = 0
107 c_eigen = 0; c_contact = 0; c_contactparam = 0; c_embed = 0; c_contact_if = 0
108 c_dynamic = 0; c_velocity = 0; c_acceleration = 0
109 c_couple = 0; c_material = 0; c_section =0
110 c_mpc = 0; c_weldline = 0; c_initial = 0
111 c_istep = 0; c_localcoord = 0
112 c_fload = 0; c_eigenread = 0
114 c_aincparam= 0; c_timepoints = 0
120 write(*,*)
'### Error: Cannot open FSTR control file : ', cntl_filename
121 write(
ilog,*)
'### Error: Cannot open FSTR control file : ', cntl_filename
128 if( header_name ==
'!VERSION' )
then
130 else if( header_name ==
'!SOLUTION' )
then
131 c_solution = c_solution + 1
133 else if( header_name ==
'!NONLINEAR_SOLVER' )
then
134 c_nlsolver = c_nlsolver + 1
136 else if( header_name ==
'!SOLVER' )
then
137 c_solver = c_solver + 1
139 else if( header_name ==
'!ISTEP' )
then
140 c_istep = c_istep + 1
141 else if( header_name ==
'!STEP' )
then
142 if( version==0 )
then
146 c_istep = c_istep + 1
148 else if( header_name ==
'!WRITE' )
then
150 if( visual==1 ) p%PARAM%fg_visual= 1
151 if( result==1 ) p%PARAM%fg_result = 1
152 c_output = c_output+1
153 else if( header_name ==
'!ECHO' )
then
156 else if( header_name ==
'!RESTART' )
then
158 fstrsolid%restart_nout= nout
159 fstrdynamic%restart_nout= nout
160 fstrheat%restart_nout= nout
161 else if( header_name ==
'!ORIENTATION' )
then
162 c_localcoord = c_localcoord + 1
163 else if( header_name ==
'!AUTOINC_PARAM' )
then
164 c_aincparam = c_aincparam + 1
165 else if( header_name ==
'!TIME_POINTS' )
then
166 c_timepoints = c_timepoints + 1
167 else if( header_name ==
'!OUTPUT_SSTYPE' )
then
169 else if( header_name ==
'!INITIAL_CONDITION' )
then
170 c_initial = c_initial + 1
171 else if( header_name ==
'!AMPLITUDE' )
then
172 c_amplitude = c_amplitude + 1
174 else if( header_name ==
'!ELEMENT_ACTIVATION' )
then
175 c_elemact = c_elemact + 1
180 else if( header_name ==
'!STATIC' )
then
181 c_static = c_static + 1
183 else if( header_name ==
'!BOUNDARY' )
then
184 c_boundary = c_boundary + 1
186 else if( header_name ==
'!CLOAD' )
then
187 c_cload = c_cload + 1
190 else if( header_name ==
'!DLOAD' )
then
191 c_dload = c_dload + 1
193 else if( header_name ==
'!CONTACT_ALGO' )
then
195 else if( header_name ==
'!CONTACT' )
then
197 c_contact = c_contact + n
198 else if( header_name ==
'!EMBED' )
then
200 c_embed = c_embed + n
201 else if( header_name ==
'!CONTACT_PARAM' )
then
202 c_contactparam = c_contactparam + 1
203 else if( header_name ==
'!CONTACT_INTERFERENCE' )
then
205 c_contact_if = c_contact_if + n
206 else if( header_name ==
'!MATERIAL' )
then
207 c_material = c_material + 1
208 else if( header_name ==
'!TEMPERATURE' )
then
209 c_temperature = c_temperature + 1
211 else if( header_name ==
'!SPRING' )
then
212 c_spring = c_spring + 1
214 else if( header_name ==
'!REFTEMP' )
then
215 c_reftemp = c_reftemp + 1
220 else if( header_name ==
'!HEAT' )
then
222 else if( header_name ==
'!FIXTEMP' )
then
223 c_fixtemp = c_fixtemp + 1
225 else if( header_name ==
'!CFLUX' )
then
226 c_cflux = c_cflux + 1
228 else if( header_name ==
'!DFLUX' )
then
229 c_dflux = c_dflux + 1
231 else if( header_name ==
'!SFLUX' )
then
232 c_sflux = c_sflux + 1
234 else if( header_name ==
'!FILM' )
then
237 else if( header_name ==
'!SFILM' )
then
238 c_sfilm = c_sfilm + 1
240 else if( header_name ==
'!RADIATE' )
then
241 c_radiate = c_radiate + 1
243 else if( header_name ==
'!SRADIATE' )
then
244 c_sradiate = c_sradiate + 1
246 else if( header_name ==
'!WELD_LINE' )
then
247 c_weldline = c_weldline + 1
251 else if( header_name ==
'!EIGEN' )
then
252 c_eigen = c_eigen + 1
257 else if( header_name ==
'!DYNAMIC' )
then
258 c_dynamic = c_dynamic + 1
260 else if( header_name ==
'!VELOCITY' )
then
261 c_velocity = c_velocity + 1
263 else if( header_name ==
'!ACCELERATION' )
then
264 c_acceleration = c_acceleration + 1
266 else if( header_name ==
'!FLOAD' )
then
267 c_fload = c_fload + 1
269 else if( header_name ==
'!EIGENREAD' )
then
270 c_eigenread = c_eigenread + 1
275 else if( header_name ==
'!COUPLE' )
then
276 c_couple = c_couple + 1
281 else if( header_name ==
'!MPC' )
then
287 else if( header_name ==
'!INCLUDE' )
then
288 ctrl_list(ictrl) = ctrl
293 write(*,*)
'### Error: Cannot open FSTR control file : ', input_filename
294 write(
ilog,*)
'### Error: Cannot open FSTR control file : ', input_filename
302 else if( header_name ==
'!END' )
then
313 ctrl = ctrl_list(ictrl)
320 fstrsolid%n_contacts = c_contact
321 if( c_contact>0 )
then
322 allocate( fstrsolid%contacts( c_contact ) )
326 fstrsolid%n_embeds = c_embed
327 if( c_embed>0 )
allocate( fstrsolid%embeds( c_embed ) )
328 if( c_weldline>0 )
allocate( fstrheat%weldline( c_weldline ) )
331 allocate( fstrsolid%step_ctrl( c_istep ) )
335 fstrsolid%step_ctrl(i)%num_substep = fstrdynamic%n_step
336 fstrsolid%step_ctrl(i)%initdt = fstrdynamic%t_delta
337 fstrsolid%step_ctrl(i)%elapsetime = dble(fstrdynamic%n_step) * fstrdynamic%t_delta
338 fstrsolid%step_ctrl(i)%mindt = fstrdynamic%t_delta
339 fstrsolid%step_ctrl(i)%maxdt = fstrdynamic%t_delta
343 if( c_localcoord>0 )
allocate( g_localcoordsys(c_localcoord) )
344 allocate( fstrparam%ainc(0:c_aincparam) )
348 if( c_timepoints>0 )
allocate( fstrparam%timepoints(c_timepoints) )
349 allocate( fstrparam%contactparam(0:c_contactparam) )
350 do i=0,c_contactparam
353 if( c_contact_if>0 )
then
354 allocate( fstrparam%contact_if( c_contact_if ) )
360 p%SOLID%is_33shell = 0
361 p%SOLID%is_33beam = 0
363 do i=1,hecmesh%n_elem_type
364 n = hecmesh%elem_type_item(i)
365 if (n == 781 .or. n == 761)
then
366 p%SOLID%is_33shell = 1
367 elseif (n == 641)
then
368 p%SOLID%is_33beam = 1
373 if( hecmesh%material%n_mat>n ) n= hecmesh%material%n_mat
374 if( n==0 ) stop
"material property not defined!"
375 allocate( fstrsolid%materials( n ) )
379 if( hecmesh%section%n_sect >0 )
then
380 do i=1,hecmesh%section%n_sect
381 if( hecmesh%section%sect_type(i) == 4 ) cycle
382 cid = hecmesh%section%sect_mat_ID_item(i)
383 if( cid>n ) stop
"Error in material property definition!"
384 if( fstrparam%nlgeom .or. fstrparam%solution_type==
kststaticeigen ) &
385 fstrsolid%materials(cid)%nlgeom_flag = 1
388 n_totlyr,alpha_over_mu, &
389 beam_radius,beam_angle1,beam_angle2,beam_angle3, &
390 beam_angle4,beam_angle5,beam_angle6)
391 fstrsolid%materials(cid)%name = hecmesh%material%mat_name(cid)
392 fstrsolid%materials(cid)%variables(
m_youngs)=ee
393 fstrsolid%materials(cid)%variables(
m_poisson)=pp
394 fstrsolid%materials(cid)%variables(
m_density)=rho
395 fstrsolid%materials(cid)%variables(
m_exapnsion)=alpha
396 fstrsolid%materials(cid)%variables(
m_thick)=thick
398 fstrsolid%materials(cid)%variables(
m_beam_radius)=beam_radius
399 fstrsolid%materials(cid)%variables(
m_beam_angle1)=beam_angle1
400 fstrsolid%materials(cid)%variables(
m_beam_angle2)=beam_angle2
401 fstrsolid%materials(cid)%variables(
m_beam_angle3)=beam_angle3
402 fstrsolid%materials(cid)%variables(
m_beam_angle4)=beam_angle4
403 fstrsolid%materials(cid)%variables(
m_beam_angle5)=beam_angle5
404 fstrsolid%materials(cid)%variables(
m_beam_angle6)=beam_angle6
405 fstrsolid%materials(cid)%mtype =
elastic
406 if( hecmesh%section%sect_type(i) == 2 )
then
407 fstrsolid%materials(cid)%totallyr = n_totlyr
408 fstrsolid%materials(cid)%shell_var => shmat
414 allocate( fstrsolid%sections(hecmesh%section%n_sect) )
415 do i=1,hecmesh%section%n_sect
418 if( p%PARAM%nlgeom )
then
421 fstrsolid%sections(i)%elemopt361 =
kel361ic
423 else if( p%PARAM%solution_type==
ksteigen )
then
424 fstrsolid%sections(i)%elemopt361 =
kel361ic
428 fstrsolid%sections(i)%elemopt361 =
kel361fi
430 fstrsolid%sections(i)%elemopt341 =
kel341fi
433 allocate( fstrsolid%output_ctrl( 4 ) )
435 fstrsolid%output_ctrl( 1 )%filename = trim(logfilename)
436 fstrsolid%output_ctrl( 1 )%filenum =
ilog
459 fstrsolid%elemopt361 = 0
460 fstrsolid%AutoINC_stat = 0
461 fstrsolid%CutBack_stat = 0
462 fstrsolid%NRstat_i(:) = 0
463 fstrsolid%NRstat_r(:) = 0.d0
468 if( header_name ==
'!ORIENTATION' )
then
469 c_localcoord = c_localcoord + 1
471 write(*,*)
'### Error: Fail in read in ORIENTATION definition : ', c_localcoord
472 write(
ilog,*)
'### Error: Fail in read in ORIENTATION definition : ', c_localcoord
477 elseif( header_name ==
'!CONTACT' )
then
480 ,ee, pp, rho, alpha, p%PARAM%contact_algo, mname, k ) )
then
481 write(*,*)
'### Error: Fail in read in contact condition : ', c_contact
482 write(
ilog,*)
'### Error: Fail in read in contact condition : ', c_contact
486 do i=1,
size(fstrparam%contactparam)-1
487 if(
fstr_streqr( fstrparam%contactparam(i)%name, mname ) )
then
492 if( rho>0.d0 ) cgn = rho
493 if( alpha>0.d0 ) cgt = alpha
495 fstrsolid%contacts(c_contact+i)%smoothing = k
496 if( .not. fstr_contact_check( fstrsolid%contacts(c_contact+i), p%MESH ) )
then
497 write(*,*)
'### Error: Inconsistence in contact and surface definition : ' , i+c_contact
498 write(
ilog,*)
'### Error: Inconsistence in contact and surface definition : ', i+c_contact
502 isok = fstr_contact_init( fstrsolid%contacts(c_contact+i), p%MESH, fstrparam%contactparam(cparam_id),
myrank)
504 isok = fstr_contact_init( fstrsolid%contacts(c_contact+i), p%MESH, fstrparam%contactparam(cparam_id))
509 c_contact = c_contact+n
512 elseif( header_name ==
'!EMBED' )
then
514 if( .not.
fstr_ctrl_get_embed( ctrl, n, fstrsolid%embeds(c_embed+1:c_embed+n), mname, k ) )
then
515 write(*,*)
'### Error: Fail in read in embed condition : ', c_embed
516 write(
ilog,*)
'### Error: Fail in read in embed condition : ', c_embed
520 do i=1,
size(fstrparam%contactparam)-1
521 if(
fstr_streqr( fstrparam%contactparam(i)%name, mname ) )
then
526 fstrsolid%embeds(c_embed+i)%smoothing = k
527 if( .not. fstr_contact_check( fstrsolid%embeds(c_embed+i), p%MESH ) )
then
528 write(*,*)
'### Error: Inconsistence in contact and surface definition : ' , i+c_embed
529 write(
ilog,*)
'### Error: Inconsistence in contact and surface definition : ', i+c_embed
533 isok = fstr_embed_init( fstrsolid%embeds(c_embed+i), p%MESH, fstrparam%contactparam(cparam_id),
myrank)
535 isok = fstr_embed_init( fstrsolid%embeds(c_embed+i), p%MESH, fstrparam%contactparam(cparam_id))
541 else if( header_name ==
'!ISTEP' )
then
543 if( .not.
fstr_ctrl_get_istep( ctrl, hecmesh, fstrsolid%step_ctrl(c_istep), mname, mname2 ) )
then
544 write(*,*)
'### Error: Fail in read in step definition : ' , c_istep
545 write(
ilog,*)
'### Error: Fail in read in step definition : ', c_istep
548 if(
associated(fstrparam%timepoints) )
then
549 do i=1,
size(fstrparam%timepoints)
550 if(
fstr_streqr( fstrparam%timepoints(i)%name, mname ) )
then
551 fstrsolid%step_ctrl(c_istep)%timepoint_id = i;
exit
555 if(
associated(fstrparam%ainc) )
then
556 do i=1,
size(fstrparam%ainc)
557 if(
fstr_streqr( fstrparam%ainc(i)%name, mname2 ) )
then
558 fstrsolid%step_ctrl(c_istep)%AincParam_id = i;
exit
562 else if( header_name ==
'!STEP' .and. version>=1 )
then
564 if( .not.
fstr_ctrl_get_istep( ctrl, hecmesh, fstrsolid%step_ctrl(c_istep), mname, mname2 ) )
then
565 write(*,*)
'### Error: Fail in read in step definition : ' , c_istep
566 write(
ilog,*)
'### Error: Fail in read in step definition : ', c_istep
573 & fstrsolid%step_ctrl(c_istep)%inc_type ==
stepfixedinc )
then
574 fstrsolid%step_ctrl(c_istep)%initdt = fstrdynamic%t_delta
575 fstrsolid%step_ctrl(c_istep)%mindt = fstrdynamic%t_delta
576 fstrsolid%step_ctrl(c_istep)%maxdt = fstrdynamic%t_delta
578 if(
associated(fstrparam%timepoints) )
then
579 do i=1,
size(fstrparam%timepoints)
580 if(
fstr_streqr( fstrparam%timepoints(i)%name, mname ) )
then
581 fstrsolid%step_ctrl(c_istep)%timepoint_id = i;
exit
585 if(
associated(fstrparam%ainc) )
then
586 do i=1,
size(fstrparam%ainc)-1
587 if(
fstr_streqr( fstrparam%ainc(i)%name, mname2 ) )
then
588 fstrsolid%step_ctrl(c_istep)%AincParam_id = i;
exit
593 else if( header_name ==
'!HEAT' )
then
597 else if( header_name ==
'!WELD_LINE' )
then
598 fstrheat%WL_tot = fstrheat%WL_tot+1
600 write(*,*)
'### Error: Fail in read in Weld Line definition : ' , fstrheat%WL_tot
601 write(
ilog,*)
'### Error: Fail in read in Weld Line definition : ', fstrheat%WL_tot
605 else if( header_name ==
'!INITIAL_CONDITION' .or. header_name ==
'!INITIAL CONDITION' )
then
606 c_initial = c_initial+1
608 write(*,*)
'### Error: Fail in read in INITIAL CONDITION definition : ' ,c_initial
609 write(
ilog,*)
'### Error: Fail in read in INITIAL CONDITION definition : ', c_initial
613 else if( header_name ==
'!SECTION' )
then
614 c_section = c_section+1
616 write(*,*)
'### Error: Fail in read in SECTION definition : ' , c_section
617 write(
ilog,*)
'### Error: Fail in read in SECTION definition : ', c_section
621 else if( header_name ==
'!ELEMOPT' )
then
622 c_elemopt = c_elemopt+1
624 write(*,*)
'### Error: Fail in read in ELEMOPT definition : ' , c_elemopt
625 write(
ilog,*)
'### Error: Fail in read in ELEMOPT definition : ', c_elemopt
630 else if( header_name ==
'!MATERIAL' )
then
631 c_material = c_material+1
633 write(*,*)
'### Error: Fail in read in material definition : ' , c_material
634 write(
ilog,*)
'### Error: Fail in read in material definition : ', c_material
638 if(cache < hecmesh%material%n_mat)
then
639 if(
fstr_streqr( hecmesh%material%mat_name(cache), mname ))
then
645 do i=1,hecmesh%material%n_mat
646 if(
fstr_streqr( hecmesh%material%mat_name(i), mname ) )
then
654 write(*,*)
'### Error: Fail in read in material definition : ' , c_material
655 write(
ilog,*)
'### Error: Fail in read in material definition : ', c_material
658 fstrsolid%materials(cid)%name = mname
659 if(c_material>hecmesh%material%n_mat)
call initmaterial( fstrsolid%materials(cid) )
661 else if( header_name ==
'!ELASTIC' )
then
662 if( c_material >0 )
then
664 fstrsolid%materials(cid)%mtype, &
665 fstrsolid%materials(cid)%nlgeom_flag, &
666 fstrsolid%materials(cid)%variables, &
667 fstrsolid%materials(cid)%dict)/=0 )
then
668 write(*,*)
'### Error: Fail in read in elasticity definition : ' , cid
669 write(
ilog,*)
'### Error: Fail in read in elasticity definition : ', cid
673 else if( header_name ==
'!PLASTIC' )
then
676 fstrsolid%materials(cid)%mtype, &
677 fstrsolid%materials(cid)%nlgeom_flag, &
678 fstrsolid%materials(cid)%variables, &
679 fstrsolid%materials(cid)%table, &
680 fstrsolid%materials(cid)%dict)/=0 )
then
681 write(*,*)
'### Error: Fail in read in plasticity definition : ' , cid
682 write(
ilog,*)
'### Error: Fail in read in plasticity definition : ', cid
686 else if( header_name ==
'!HYPERELASTIC' )
then
689 fstrsolid%materials(cid)%mtype, &
690 fstrsolid%materials(cid)%nlgeom_flag, &
691 fstrsolid%materials(cid)%variables )/=0 )
then
692 write(*,*)
'### Error: Fail in read in elasticity definition : ' , cid
693 write(
ilog,*)
'### Error: Fail in read in elasticity definition : ', cid
697 else if( header_name ==
'!VISCOELASTIC' )
then
700 fstrsolid%materials(cid)%mtype, &
701 fstrsolid%materials(cid)%nlgeom_flag, &
702 fstrsolid%materials(cid)%dict)/=0 )
then
703 write(*,*)
'### Error: Fail in read in plasticity definition : ' , cid
704 write(
ilog,*)
'### Error: Fail in read in plasticity definition : ', cid
708 else if( header_name ==
'!TRS' )
then
711 write(*,*)
'### WARNING: TRS can only be defined for viscoelastic material! It is ignored! '
712 write(
ilog,*)
'### WARNING: TRS can only be defined for viscoelastic material! It is ignored! '
714 if(
fstr_ctrl_get_trs( ctrl, fstrsolid%materials(cid)%mtype, fstrsolid%materials(cid)%variables)/=0 )
then
715 write(*,*)
'### Error: Fail in read in TRS definition : ' , cid
716 write(
ilog,*)
'### Error: Fail in read in TRS definition : ', cid
721 else if( header_name ==
'!CREEP' )
then
724 fstrsolid%materials(cid)%mtype, &
725 fstrsolid%materials(cid)%nlgeom_flag, &
726 fstrsolid%materials(cid)%dict)/=0 )
then
727 write(*,*)
'### Error: Fail in read in plasticity definition : ' , cid
728 write(
ilog,*)
'### Error: Fail in read in plasticity definition : ', cid
732 else if( header_name ==
'!DENSITY' )
then
735 write(*,*)
'### Error: Fail in read in density definition : ' , cid
736 write(
ilog,*)
'### Error: Fail in read in density definition : ', cid
740 else if( header_name ==
'!EXPANSION_COEF' .or. header_name ==
'!EXPANSION_COEFF' .or. &
741 header_name ==
'!EXPANSION')
then
744 fstrsolid%materials(cid)%dict)/=0 )
then
745 write(*,*)
'### Error: Fail in read in expansion coefficient definition : ' , cid
746 write(
ilog,*)
'### Error: Fail in read in expansion coefficient definition : ', cid
750 else if( header_name ==
'!DAMPING')
then
753 fstrsolid%materials(cid)%is_elem_Rayleigh_damping)/=0 )
then
754 write(*,*)
'### Error: Fail in read in damping definition : ' , cid
755 write(
ilog,*)
'### Error: Fail in read in damping definition : ', cid
759 else if( header_name ==
'!FLUID' )
then
760 if( c_material >0 )
then
762 fstrsolid%materials(cid)%mtype, &
763 fstrsolid%materials(cid)%nlgeom_flag, &
764 fstrsolid%materials(cid)%variables, &
765 fstrsolid%materials(cid)%dict)/=0 )
then
766 write(*,*)
'### Error: Fail in read in fluid definition : ' , cid
767 write(
ilog,*)
'### Error: Fail in read in fluid definition : ', cid
771 else if( header_name ==
'!SPRING_D' )
then
772 if( c_material >0 )
then
774 fstrsolid%materials(cid)%mtype, &
775 fstrsolid%materials(cid)%nlgeom_flag, &
776 fstrsolid%materials(cid)%variables_i, &
777 fstrsolid%materials(cid)%dict)/=0 )
then
778 write(*,*)
'### Error: Fail in read in spring_d definition : ' , cid
779 write(
ilog,*)
'### Error: Fail in read in spring_d definition : ', cid
783 else if( header_name ==
'!SPRING_A' )
then
784 if( c_material >0 )
then
786 fstrsolid%materials(cid)%mtype, &
787 fstrsolid%materials(cid)%nlgeom_flag, &
788 fstrsolid%materials(cid)%variables_i, &
789 fstrsolid%materials(cid)%dict)/=0 )
then
790 write(*,*)
'### Error: Fail in read in spring_a definition : ' , cid
791 write(
ilog,*)
'### Error: Fail in read in spring_a definition : ', cid
795 else if( header_name ==
'!DASHPOT_D' )
then
796 if( c_material >0 )
then
798 fstrsolid%materials(cid)%mtype, &
799 fstrsolid%materials(cid)%nlgeom_flag, &
800 fstrsolid%materials(cid)%variables_i, &
801 fstrsolid%materials(cid)%dict)/=0 )
then
802 write(*,*)
'### Error: Fail in read in spring_d definition : ' , cid
803 write(
ilog,*)
'### Error: Fail in read in spring_d definition : ', cid
807 else if( header_name ==
'!DASHPOT_A' )
then
808 if( c_material >0 )
then
810 fstrsolid%materials(cid)%mtype, &
811 fstrsolid%materials(cid)%nlgeom_flag, &
812 fstrsolid%materials(cid)%variables_i, &
813 fstrsolid%materials(cid)%dict)/=0 )
then
814 write(*,*)
'### Error: Fail in read in spring_a definition : ' , cid
815 write(
ilog,*)
'### Error: Fail in read in spring_a definition : ', cid
819 else if( header_name ==
'!USER_MATERIAL' )
then
822 fstrsolid%materials(cid)%nlgeom_flag, fstrsolid%materials(cid)%nfstatus, &
823 fstrsolid%materials(cid)%variables(101:) )/=0 )
then
824 write(*,*)
'### Error: Fail in read in user defined material : ' , cid
825 write(
ilog,*)
'### Error: Fail in read in user defined material : ', cid
832 else if( header_name ==
'!WRITE' )
then
834 if( islog == 1 )
then
836 outctrl%filename = trim(logfilename)
837 outctrl%filenum =
ilog
840 if( femap == 1 )
then
842 write( outctrl%filename,
'(a,i0,a)')
'utable.',
myrank,
'.dat'
843 outctrl%filenum =
iutb
845 open( unit=outctrl%filenum, file=outctrl%filename, status=
'REPLACE', iostat=ierror )
846 if( ierror /= 0 )
then
847 write(*,*)
'Warning: cannot open output file: ', trim(outctrl%filename)
849 fstrsolid%output_ctrl(c_output)%outinfo%grp_id = 1
851 if( result == 1 )
then
855 if( visual == 1 )
then
860 else if( header_name ==
'!OUTPUT_RES' )
then
863 write(*,*)
'### Error: Fail in read in node output definition : ' , c_output
864 write(
ilog,*)
'### Error: Fail in read in node output definition : ', c_output
867 if( fstrsolid%output_ctrl(c_output)%outinfo%grp_id_name /=
'ALL' )
then
869 do i=1,hecmesh%node_group%n_grp
870 if( fstrsolid%output_ctrl(c_output)%outinfo%grp_id_name == hecmesh%node_group%grp_name(i) )
then
871 fstrsolid%output_ctrl(c_output)%outinfo%grp_id = i;
exit
875 else if( header_name ==
'!OUTPUT_VIS' )
then
878 write(*,*)
'### Error: Fail in read in element output definition : ' , c_output
879 write(
ilog,*)
'### Error: Fail in read in element output definition : ', c_output
882 if( fstrsolid%output_ctrl(c_output)%outinfo%grp_id_name /=
'ALL' )
then
884 do i=1,hecmesh%node_group%n_grp
885 if( fstrsolid%output_ctrl(c_output)%outinfo%grp_id_name == hecmesh%node_group%grp_name(i) )
then
886 fstrsolid%output_ctrl(c_output)%outinfo%grp_id = i;
exit
890 else if( header_name ==
'!AUTOINC_PARAM' )
then
891 c_aincparam = c_aincparam + 1
893 write(*,*)
'### Error: Fail in read in AUTOINC_PARAM definition : ' , c_aincparam
894 write(
ilog,*)
'### Error: Fail in read in AUTOINC_PARAM definition : ', c_aincparam
897 else if( header_name ==
'!TIME_POINTS' )
then
898 c_timepoints = c_timepoints + 1
900 write(*,*)
'### Error: Fail in read in TIME_POINTS definition : ' , c_timepoints
901 write(
ilog,*)
'### Error: Fail in read in TIME_POINTS definition : ', c_timepoints
904 else if( header_name ==
'!CONTACT_PARAM' )
then
905 c_contactparam = c_contactparam + 1
907 write(*,*)
'### Error: Fail in read in CONTACT_PARAM definition : ' , c_contactparam
908 write(
ilog,*)
'### Error: Fail in read in CONTACT_PARAM definition : ', c_contactparam
911 else if( header_name ==
'!CONTACT_INTERFERENCE' )
then
914 write(*,*)
'### Error: Fail in read in CONTACT_INTERFERENCE definition : ' , c_contact_if
915 write(
ilog,*)
'### Error: Fail in read in CONTACT_INTERFERENCE definition : ', c_contact_if
919 if( check_apply_contact_if(fstrparam%contact_if(c_contact_if+i), fstrsolid%contacts) /= 0)
then
920 write(*,*)
'### Error:(INTERFERENCE) Inconsistence of contact_pair in CONTACTS: ' , i+c_contact_if
921 write(
ilog,*)
'### Error:(INTERFERENCE) Inconsistence of contact_pair in CONTACTS: ', i+c_contact_if
925 c_contact_if = c_contact_if + n
926 else if( header_name ==
'!ULOAD' )
then
928 write(*,*)
'### Error: Fail in read in ULOAD definition : '
929 write(
ilog,*)
'### Error: Fail in read in ULOAD definition : '
933 else if( header_name ==
'!INCLUDE' )
then
934 ctrl_list(ictrl) = ctrl
939 write(*,*)
'### Error: Cannot open FSTR control file : ', input_filename
940 write(
ilog,*)
'### Error: Cannot open FSTR control file : ', input_filename
946 else if( header_name ==
'!END' )
then
957 ctrl = ctrl_list(ictrl)
965 if( .not. p%PARAM%nlgeom )
then
967 fstrsolid%materials(i)%nlgeom_flag = 0
971 if( fstrsolid%TEMP_ngrp_tot > 0 .or. fstrsolid%TEMP_irres > 0 )
then
972 allocate ( fstrsolid%temperature( hecmesh%n_node ) ,stat=ierror )
973 if( ierror /= 0 )
then
974 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, TEMPERATURE>'
975 write(
idbg,*)
' rank = ',
myrank,
' ierror = ',ierror
977 call hecmw_abort( hecmw_comm_get_comm())
980 allocate ( fstrsolid%last_temp( hecmesh%n_node ) ,stat=ierror )
981 if( ierror /= 0 )
then
982 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, LAST_TEMP>'
983 write(
idbg,*)
' rank = ',
myrank,
' ierror = ',ierror
985 call hecmw_abort( hecmw_comm_get_comm())
987 fstrsolid%last_temp = 0.d0
988 allocate ( fstrsolid%temp_bak( hecmesh%n_node ) ,stat=ierror )
989 if( ierror /= 0 )
then
990 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, TEMP_BAK>'
991 write(
idbg,*)
' rank = ',
myrank,
' ierror = ',ierror
993 call hecmw_abort( hecmw_comm_get_comm())
995 fstrsolid%temp_bak = 0.d0
998 if(
associated(fstrsolid%step_ctrl) )
then
999 fstrsolid%nstep_tot =
size(fstrsolid%step_ctrl)
1003 if( p%PARAM%solution_type==
kststatic .and. p%PARAM%nlgeom )
then
1004 write( *,* )
" ERROR: STEP not defined!"
1005 write(
idbg,* )
"ERROR: STEP not defined!"
1007 call hecmw_abort( hecmw_comm_get_comm())
1010 if(
myrank==0 )
write(*,*)
"Step control not defined! Using default step=1"
1011 fstrsolid%nstep_tot = 1
1012 allocate( fstrsolid%step_ctrl(1) )
1015 fstrsolid%step_ctrl(1)%num_substep = fstrdynamic%n_step
1016 fstrsolid%step_ctrl(1)%initdt = fstrdynamic%t_delta
1017 fstrsolid%step_ctrl(1)%elapsetime = dble(fstrdynamic%n_step) * fstrdynamic%t_delta
1018 fstrsolid%step_ctrl(1)%mindt = fstrdynamic%t_delta
1019 fstrsolid%step_ctrl(1)%maxdt = fstrdynamic%t_delta
1021 n = fstrsolid%BOUNDARY_ngrp_tot
1022 if( n>0 )
allocate( fstrsolid%step_ctrl(1)%Boundary(n) )
1024 fstrsolid%step_ctrl(1)%Boundary(i) = fstrsolid%BOUNDARY_ngrp_GRPID(i)
1026 n = fstrsolid%CLOAD_ngrp_tot + fstrsolid%DLOAD_ngrp_tot + fstrsolid%TEMP_ngrp_tot + fstrsolid%SPRING_ngrp_tot
1027 if( n>0 )
allocate( fstrsolid%step_ctrl(1)%Load(n) )
1029 do i = 1, fstrsolid%CLOAD_ngrp_tot
1031 fstrsolid%step_ctrl(1)%Load(n) = fstrsolid%CLOAD_ngrp_GRPID(i)
1033 do i = 1, fstrsolid%DLOAD_ngrp_tot
1035 fstrsolid%step_ctrl(1)%Load(n) = fstrsolid%DLOAD_ngrp_GRPID(i)
1037 do i = 1, fstrsolid%TEMP_ngrp_tot
1039 fstrsolid%step_ctrl(1)%Load(n) = fstrsolid%TEMP_ngrp_GRPID(i)
1041 do i = 1, fstrsolid%SPRING_ngrp_tot
1043 fstrsolid%step_ctrl(1)%Load(n) = fstrsolid%SPRING_ngrp_GRPID(i)
1045 n = fstrsolid%elemact%ELEMACT_egrp_tot
1046 if( n>0 )
allocate( fstrsolid%step_ctrl(1)%ElemActivation(n) )
1048 fstrsolid%step_ctrl(1)%ElemActivation(i) = fstrsolid%elemact%ELEMACT_egrp_GRPID(i)
1057 if( p%PARAM%solution_type ==
kstheat)
then
1058 p%PARAM%fg_irres = fstrsolid%output_ctrl(3)%frequency
1059 p%PARAM%fg_iwres = fstrsolid%output_ctrl(4)%frequency
1060 p%HEAT%elemact = p%SOLID%elemact
1064 do i=1,hecmesh%section%n_sect
1065 cid = hecmesh%section%sect_mat_ID_item(i)
1066 n = fstrsolid%materials(cid)%totallyr
1067 if (n > n_totlyr)
then
1071 p%SOLID%max_lyr = n_totlyr
1082 type(hecmwst_local_mesh),
target :: hecMESH
1085 integer :: ndof, ntotal, ierror, ic_type
1089 fstrsolid%BOUNDARY_ngrp_tot = 0
1090 fstrsolid%BOUNDARY_ngrp_rot = 0
1091 fstrsolid%CLOAD_ngrp_tot = 0
1092 fstrsolid%CLOAD_ngrp_rot = 0
1093 fstrsolid%DLOAD_ngrp_tot = 0
1094 fstrsolid%DLOAD_follow = 1
1095 fstrsolid%TEMP_ngrp_tot = 0
1096 fstrsolid%SPRING_ngrp_tot = 0
1097 fstrsolid%TEMP_irres = 0
1098 fstrsolid%TEMP_tstep = 1
1099 fstrsolid%TEMP_interval = 1
1100 fstrsolid%TEMP_rtype = 1
1101 fstrsolid%TEMP_factor = 1.d0
1102 fstrsolid%VELOCITY_ngrp_tot = 0
1103 fstrsolid%ACCELERATION_ngrp_tot = 0
1104 fstrsolid%COUPLE_ngrp_tot = 0
1106 fstrsolid%restart_nout= 0
1107 fstrsolid%is_smoothing_active = .false.
1108 fstrsolid%has_finite_rotation_kinematics = .false.
1109 fstrsolid%finite_rotation_state_ready = .false.
1118 type(hecmwst_local_mesh),
target :: hecMESH
1121 integer :: ndof, ntotal, ierror, ic_type
1124 ntotal=ndof*hecmesh%n_node
1125 fstrsolid%has_finite_rotation_kinematics = &
1127 fstrsolid%finite_rotation_state_ready = .false.
1129 allocate ( fstrsolid%GL( ntotal ) ,stat=ierror )
1130 if( ierror /= 0 )
then
1131 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, GL>'
1132 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1134 call hecmw_abort( hecmw_comm_get_comm())
1136 allocate ( fstrsolid%GL0( ntotal ) ,stat=ierror )
1137 if( ierror /= 0 )
then
1138 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, GL0>'
1139 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1141 call hecmw_abort( hecmw_comm_get_comm())
1143 allocate ( fstrsolid%EFORCE( ntotal ) ,stat=ierror )
1144 if( ierror /= 0 )
then
1145 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, EFORCE>'
1146 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1148 call hecmw_abort( hecmw_comm_get_comm())
1157 allocate ( fstrsolid%unode( ntotal ) ,stat=ierror )
1158 if( ierror /= 0 )
then
1159 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, unode>'
1160 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1162 call hecmw_abort( hecmw_comm_get_comm())
1164 allocate ( fstrsolid%unode_bak( ntotal ) ,stat=ierror )
1165 if( ierror /= 0 )
then
1166 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, unode>'
1167 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1169 call hecmw_abort( hecmw_comm_get_comm())
1171 allocate ( fstrsolid%dunode( ntotal ) ,stat=ierror )
1172 if( ierror /= 0 )
then
1173 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, dunode>'
1174 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1176 call hecmw_abort( hecmw_comm_get_comm())
1178 allocate ( fstrsolid%ddunode( ntotal ) ,stat=ierror )
1179 if( ierror /= 0 )
then
1180 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, ddunode>'
1181 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1183 call hecmw_abort( hecmw_comm_get_comm())
1185 if( fstrsolid%has_finite_rotation_kinematics )
then
1186 allocate ( fstrsolid%shell_node_mode( hecmesh%n_node ) ,stat=ierror )
1187 if( ierror /= 0 )
then
1188 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, shell_node_mode>'
1189 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1191 call hecmw_abort( hecmw_comm_get_comm())
1194 allocate ( fstrsolid%shell_rot_state( hecmesh%n_node ) ,stat=ierror )
1195 if( ierror /= 0 )
then
1196 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, shell_rot_state>'
1197 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1199 call hecmw_abort( hecmw_comm_get_comm())
1201 allocate ( fstrsolid%shell_ref_triad( 9*hecmesh%n_node ) ,stat=ierror )
1202 if( ierror /= 0 )
then
1203 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, shell_ref_triad>'
1204 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1206 call hecmw_abort( hecmw_comm_get_comm())
1208 allocate ( fstrsolid%shell_triad( 9*hecmesh%n_node ) ,stat=ierror )
1209 if( ierror /= 0 )
then
1210 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, shell_triad>'
1211 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1213 call hecmw_abort( hecmw_comm_get_comm())
1215 allocate ( fstrsolid%shell_triad_bak( 9*hecmesh%n_node ) ,stat=ierror )
1216 if( ierror /= 0 )
then
1217 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, shell_triad_bak>'
1218 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1220 call hecmw_abort( hecmw_comm_get_comm())
1222 allocate ( fstrsolid%shell_dtriad( 9*hecmesh%n_node ) ,stat=ierror )
1223 if( ierror /= 0 )
then
1224 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, shell_dtriad>'
1225 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1227 call hecmw_abort( hecmw_comm_get_comm())
1229 allocate ( fstrsolid%shell_drill( hecmesh%n_node ) ,stat=ierror )
1230 if( ierror /= 0 )
then
1231 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, shell_drill>'
1232 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1234 call hecmw_abort( hecmw_comm_get_comm())
1236 allocate ( fstrsolid%shell_drill_bak( hecmesh%n_node ) ,stat=ierror )
1237 if( ierror /= 0 )
then
1238 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, shell_drill_bak>'
1239 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1241 call hecmw_abort( hecmw_comm_get_comm())
1243 allocate ( fstrsolid%shell_ddrill( hecmesh%n_node ) ,stat=ierror )
1244 if( ierror /= 0 )
then
1245 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, shell_ddrill>'
1246 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1248 call hecmw_abort( hecmw_comm_get_comm())
1251 allocate ( fstrsolid%QFORCE( ntotal ) ,stat=ierror )
1252 if( ierror /= 0 )
then
1253 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, QFORCE>'
1254 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1256 call hecmw_abort( hecmw_comm_get_comm())
1258 allocate ( fstrsolid%DFORCE( ntotal ) ,stat=ierror )
1259 if( ierror /= 0 )
then
1260 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, DFORCE>'
1261 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1263 call hecmw_abort( hecmw_comm_get_comm())
1265 allocate ( fstrsolid%QFORCE_bak( ntotal ) ,stat=ierror )
1266 if( ierror /= 0 )
then
1267 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, QFORCE_bak>'
1268 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1270 call hecmw_abort( hecmw_comm_get_comm())
1273 fstrsolid%GL(:)=0.d0
1274 fstrsolid%GL0(:)=0.d0
1276 fstrsolid%unode(:) = 0.d0
1277 fstrsolid%unode_bak(:) = 0.d0
1278 fstrsolid%dunode(:) = 0.d0
1279 fstrsolid%ddunode(:) = 0.d0
1280 if(
associated(fstrsolid%shell_rot_state) ) fstrsolid%shell_rot_state(:) = 0
1281 if(
associated(fstrsolid%shell_ref_triad) ) fstrsolid%shell_ref_triad(:) = 0.d0
1282 if(
associated(fstrsolid%shell_triad) ) fstrsolid%shell_triad(:) = 0.d0
1283 if(
associated(fstrsolid%shell_triad_bak) ) fstrsolid%shell_triad_bak(:) = 0.d0
1284 if(
associated(fstrsolid%shell_dtriad) ) fstrsolid%shell_dtriad(:) = 0.d0
1285 if(
associated(fstrsolid%shell_drill) ) fstrsolid%shell_drill(:) = 0.d0
1286 if(
associated(fstrsolid%shell_drill_bak) ) fstrsolid%shell_drill_bak(:) = 0.d0
1287 if(
associated(fstrsolid%shell_ddrill) ) fstrsolid%shell_ddrill(:) = 0.d0
1288 fstrsolid%QFORCE(:) = 0.d0
1289 fstrsolid%QFORCE_bak(:) = 0.d0
1290 fstrsolid%FACTOR( 1:2 ) = 0.d0
1293 fstrsolid%n_fix_mpc = hecmesh%mpc%n_mpc
1294 if( fstrsolid%n_fix_mpc>0 )
then
1295 allocate( fstrsolid%mpc_const( fstrsolid%n_fix_mpc ) )
1296 fstrsolid%mpc_const(:) = hecmesh%mpc%mpc_const(:)
1300 fstrsolid%FACTOR(2)=1.d0
1301 fstrsolid%FACTOR(1)=0.d0
1305 type(hecmwst_local_mesh),
target :: hecMESH
1308 logical,
allocatable :: is_selem_list(:)
1311 do isect=1,hecmesh%section%n_sect
1312 if( fstrsolid%sections(isect)%elemopt341 ==
kel341sesns ) fstrsolid%is_smoothing_active = .true.
1314 if( .not. fstrsolid%is_smoothing_active )
return
1316 allocate(is_selem_list(hecmesh%n_elem), stat=i)
1318 write(*,*)
'Allocation error: is_selem_list'
1321 is_selem_list(:) = .false.
1323 do i=1,hecmesh%n_elem
1324 isect= hecmesh%section_ID(i)
1325 if( hecmesh%elem_type(i) /= fe_tet4n ) cycle
1326 if( fstrsolid%sections(isect)%elemopt341 ==
kel341sesns ) is_selem_list(i) = .true.
1329 call hecmw_create_smoothing_element_connectivity(hecmesh,is_selem_list)
1331 deallocate(is_selem_list)
1337 type(hecmwst_local_mesh),
target :: hecMESH
1340 integer :: i, isect, nodlocal(fstrSOLID%max_ncon), iiS, nn, con_stf
1342 if( fstrsolid%max_ncon_stf > 20 ) fstrsolid%max_ncon_stf = 20
1344 do i=1,hecmesh%n_elem
1345 isect= hecmesh%section_ID(i)
1346 if( hecmesh%elem_type(i) /= fe_tet4n ) cycle
1347 if( fstrsolid%sections(isect)%elemopt341 /=
kel341sesns ) cycle
1348 iis = hecmesh%elem_node_index(i-1)
1349 nn = hecmesh%elem_node_index(i-1) - iis
1350 nodlocal(1:nn) = hecmesh%elem_node_item(iis+1:iis+nn)
1352 if( con_stf > fstrsolid%max_ncon_stf ) fstrsolid%max_ncon_stf = con_stf
1362 type(hecmwst_local_mesh),
target :: hecMESH
1364 integer(kind=kint),
intent(in) :: solution_type
1366 integer :: i, j, ng, isect, ndof, id, nn, n_elem, nthick
1369 if( hecmesh%n_elem <=0 )
then
1370 stop
"no element defined!"
1373 fstrsolid%maxn_gauss = 0
1374 fstrsolid%max_ncon = 0
1380 n_elem = hecmesh%elem_type_index(hecmesh%n_elem_type)
1381 allocate( fstrsolid%elements(n_elem) )
1384 fstrsolid%elements(i)%elemact_flag = kelact_undefined
1385 if( solution_type ==
kstheat) cycle
1387 fstrsolid%elements(i)%etype = hecmesh%elem_type(i)
1388 if( hecmesh%elem_type(i)==301 ) fstrsolid%elements(i)%etype=111
1389 if (hecmw_is_etype_link(fstrsolid%elements(i)%etype)) cycle
1390 if (hecmw_is_etype_patch(fstrsolid%elements(i)%etype)) cycle
1392 if( ng > fstrsolid%maxn_gauss ) fstrsolid%maxn_gauss = ng
1393 if(ng>0)
allocate( fstrsolid%elements(i)%gausses( ng ) )
1395 isect= hecmesh%section_ID(i)
1398 id=hecmesh%section%sect_opt(isect)
1400 fstrsolid%elements(i)%iset=1
1401 else if( id==1)
then
1402 fstrsolid%elements(i)%iset=0
1403 else if( id==2)
then
1404 fstrsolid%elements(i)%iset=2
1408 if( isect<0 .or. isect>hecmesh%section%n_sect ) &
1409 stop
"Error in element's section definition"
1410 id = hecmesh%section%sect_mat_ID_item(isect)
1411 fstrsolid%materials(id)%cdsys_ID = hecmesh%section%sect_orien_ID(isect)
1412 nn = hecmesh%elem_node_index(i)-hecmesh%elem_node_index(i-1)
1414 fstrsolid%elements(i)%gausses(j)%pMaterial => fstrsolid%materials(id)
1419 fstrsolid%materials(id) ) ) &
1422 fstrsolid%materials(id)%totallyr, nthick )
1424 allocate(fstrsolid%elements(i)%equiForces(nn*ndof))
1425 fstrsolid%elements(i)%equiForces = 0.0d0
1426 if( nn > fstrsolid%max_ncon ) fstrsolid%max_ncon = nn
1428 if( hecmesh%elem_type(i)==361 )
then
1429 if( fstrsolid%sections(isect)%elemopt361==
kel361ic )
then
1430 allocate( fstrsolid%elements(i)%aux(3,3) )
1431 fstrsolid%elements(i)%aux = 0.0d0
1433 fstrsolid%elements(i)%p(1) = 0.0d0
1438 fstrsolid%max_ncon_stf = fstrsolid%max_ncon
1441 call hecmw_allreduce_i1(hecmesh,fstrsolid%maxn_gauss,hecmw_max)
1448 integer :: i, j, ierror
1449 if(
associated(fstrsolid%materials) )
then
1450 do j=1,
size(fstrsolid%materials)
1451 call finalizematerial(fstrsolid%materials(j))
1453 deallocate( fstrsolid%materials )
1455 if( .not.
associated(fstrsolid%elements ) )
return
1456 do i=1,
size(fstrsolid%elements)
1457 if(
associated(fstrsolid%elements(i)%gausses) )
then
1458 do j=1,
size(fstrsolid%elements(i)%gausses)
1459 call fstr_finalize_gauss(fstrsolid%elements(i)%gausses(j))
1461 deallocate( fstrsolid%elements(i)%gausses )
1464 if(
associated(fstrsolid%elements(i)%equiForces) )
then
1465 deallocate(fstrsolid%elements(i)%equiForces)
1467 if(
associated(fstrsolid%elements(i)%aux) )
then
1468 deallocate(fstrsolid%elements(i)%aux)
1472 deallocate( fstrsolid%elements )
1473 if(
associated( fstrsolid%mpc_const ) )
then
1474 deallocate( fstrsolid%mpc_const )
1477 if(
associated(fstrsolid%step_ctrl) )
then
1478 do i=1,
size(fstrsolid%step_ctrl)
1481 deallocate( fstrsolid%step_ctrl )
1483 if(
associated(fstrsolid%output_ctrl) )
then
1484 do i=1,
size(fstrsolid%output_ctrl)
1485 if( fstrsolid%output_ctrl(i)%filenum==
iutb ) &
1486 close(fstrsolid%output_ctrl(i)%filenum)
1488 deallocate(fstrsolid%output_ctrl)
1490 if(
associated( fstrsolid%sections ) )
then
1491 deallocate( fstrsolid%sections )
1494 if(
associated(fstrsolid%GL) )
then
1495 deallocate(fstrsolid%GL ,stat=ierror)
1496 if( ierror /= 0 )
then
1497 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, GL>'
1499 call hecmw_abort( hecmw_comm_get_comm())
1502 if(
associated(fstrsolid%EFORCE) )
then
1503 deallocate(fstrsolid%EFORCE ,stat=ierror)
1504 if( ierror /= 0 )
then
1505 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, EFORCE>'
1507 call hecmw_abort( hecmw_comm_get_comm())
1510 if(
associated(fstrsolid%unode) )
then
1511 deallocate(fstrsolid%unode ,stat=ierror)
1512 if( ierror /= 0 )
then
1513 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, unode>'
1515 call hecmw_abort( hecmw_comm_get_comm())
1518 if(
associated(fstrsolid%unode_bak) )
then
1519 deallocate(fstrsolid%unode_bak ,stat=ierror)
1520 if( ierror /= 0 )
then
1521 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, unode_bak>'
1523 call hecmw_abort( hecmw_comm_get_comm())
1526 if(
associated(fstrsolid%dunode) )
then
1527 deallocate(fstrsolid%dunode ,stat=ierror)
1528 if( ierror /= 0 )
then
1529 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, dunode>'
1531 call hecmw_abort( hecmw_comm_get_comm())
1534 if(
associated(fstrsolid%ddunode) )
then
1535 deallocate(fstrsolid%ddunode ,stat=ierror)
1536 if( ierror /= 0 )
then
1537 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, ddunode>'
1539 call hecmw_abort( hecmw_comm_get_comm())
1542 if(
associated(fstrsolid%shell_node_mode) )
then
1543 deallocate(fstrsolid%shell_node_mode ,stat=ierror)
1544 if( ierror /= 0 )
then
1545 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, shell_node_mode>'
1547 call hecmw_abort( hecmw_comm_get_comm())
1550 if(
associated(fstrsolid%shell_rot_state) )
then
1551 deallocate(fstrsolid%shell_rot_state ,stat=ierror)
1552 if( ierror /= 0 )
then
1553 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, shell_rot_state>'
1555 call hecmw_abort( hecmw_comm_get_comm())
1558 if(
associated(fstrsolid%shell_ref_triad) )
then
1559 deallocate(fstrsolid%shell_ref_triad ,stat=ierror)
1560 if( ierror /= 0 )
then
1561 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, shell_ref_triad>'
1563 call hecmw_abort( hecmw_comm_get_comm())
1566 if(
associated(fstrsolid%shell_triad) )
then
1567 deallocate(fstrsolid%shell_triad ,stat=ierror)
1568 if( ierror /= 0 )
then
1569 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, shell_triad>'
1571 call hecmw_abort( hecmw_comm_get_comm())
1574 if(
associated(fstrsolid%shell_triad_bak) )
then
1575 deallocate(fstrsolid%shell_triad_bak ,stat=ierror)
1576 if( ierror /= 0 )
then
1577 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, shell_triad_bak>'
1579 call hecmw_abort( hecmw_comm_get_comm())
1582 if(
associated(fstrsolid%shell_dtriad) )
then
1583 deallocate(fstrsolid%shell_dtriad ,stat=ierror)
1584 if( ierror /= 0 )
then
1585 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, shell_dtriad>'
1587 call hecmw_abort( hecmw_comm_get_comm())
1590 if(
associated(fstrsolid%shell_drill) )
then
1591 deallocate(fstrsolid%shell_drill ,stat=ierror)
1592 if( ierror /= 0 )
then
1593 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, shell_drill>'
1595 call hecmw_abort( hecmw_comm_get_comm())
1598 if(
associated(fstrsolid%shell_drill_bak) )
then
1599 deallocate(fstrsolid%shell_drill_bak ,stat=ierror)
1600 if( ierror /= 0 )
then
1601 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, shell_drill_bak>'
1603 call hecmw_abort( hecmw_comm_get_comm())
1606 if(
associated(fstrsolid%shell_ddrill) )
then
1607 deallocate(fstrsolid%shell_ddrill ,stat=ierror)
1608 if( ierror /= 0 )
then
1609 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, shell_ddrill>'
1611 call hecmw_abort( hecmw_comm_get_comm())
1614 if(
associated(fstrsolid%QFORCE) )
then
1615 deallocate(fstrsolid%QFORCE ,stat=ierror)
1616 if( ierror /= 0 )
then
1617 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, QFORCE>'
1619 call hecmw_abort( hecmw_comm_get_comm())
1622 if(
associated(fstrsolid%DFORCE) )
then
1623 deallocate(fstrsolid%DFORCE ,stat=ierror)
1624 if( ierror /= 0 )
then
1625 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, DFORCE>'
1627 call hecmw_abort( hecmw_comm_get_comm())
1630 if(
associated(fstrsolid%temperature) )
then
1631 deallocate(fstrsolid%temperature ,stat=ierror)
1632 if( ierror /= 0 )
then
1633 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, temperature>'
1635 call hecmw_abort( hecmw_comm_get_comm())
1638 if(
associated(fstrsolid%last_temp) )
then
1639 deallocate(fstrsolid%last_temp ,stat=ierror)
1640 if( ierror /= 0 )
then
1641 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, reftemp>'
1643 call hecmw_abort( hecmw_comm_get_comm())
1646 if(
associated(fstrsolid%temp_bak) )
then
1647 deallocate(fstrsolid%temp_bak ,stat=ierror)
1648 if( ierror /= 0 )
then
1649 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, reftemp>'
1651 call hecmw_abort( hecmw_comm_get_comm())
1656 if(
associated(fstrsolid%BOUNDARY_ngrp_GRPID) )
then
1657 deallocate(fstrsolid%BOUNDARY_ngrp_GRPID, stat=ierror)
1658 if( ierror /= 0 )
then
1659 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, BOUNDARY_ngrp_GRPID>'
1661 call hecmw_abort( hecmw_comm_get_comm())
1664 if(
associated(fstrsolid%BOUNDARY_ngrp_ID) )
then
1665 deallocate(fstrsolid%BOUNDARY_ngrp_ID, stat=ierror)
1666 if( ierror /= 0 )
then
1667 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, BOUNDARY_ngrp_ID>'
1669 call hecmw_abort( hecmw_comm_get_comm())
1672 if(
associated(fstrsolid%BOUNDARY_ngrp_type) )
then
1673 deallocate(fstrsolid%BOUNDARY_ngrp_type, stat=ierror)
1674 if( ierror /= 0 )
then
1675 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, BOUNDARY_ngrp_type>'
1677 call hecmw_abort( hecmw_comm_get_comm())
1680 if(
associated(fstrsolid%BOUNDARY_ngrp_val) )
then
1681 deallocate(fstrsolid%BOUNDARY_ngrp_val, stat=ierror)
1682 if( ierror /= 0 )
then
1683 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, BOUNDARY_ngrp_val>'
1685 call hecmw_abort( hecmw_comm_get_comm())
1688 if(
associated(fstrsolid%BOUNDARY_ngrp_amp) )
then
1689 deallocate(fstrsolid%BOUNDARY_ngrp_amp, stat=ierror)
1690 if( ierror /= 0 )
then
1691 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, BOUNDARY_ngrp_amp>'
1693 call hecmw_abort( hecmw_comm_get_comm())
1696 if(
associated(fstrsolid%BOUNDARY_ngrp_istot) )
then
1697 deallocate(fstrsolid%BOUNDARY_ngrp_istot, stat=ierror)
1698 if( ierror /= 0 )
then
1699 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, BOUNDARY_ngrp_istot>'
1701 call hecmw_abort( hecmw_comm_get_comm())
1704 if(
associated(fstrsolid%BOUNDARY_ngrp_rotID) )
then
1705 deallocate(fstrsolid%BOUNDARY_ngrp_rotID, stat=ierror)
1706 if( ierror /= 0 )
then
1707 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, BOUNDARY_ngrp_rotID>'
1709 call hecmw_abort( hecmw_comm_get_comm())
1712 if(
associated(fstrsolid%BOUNDARY_ngrp_centerID) )
then
1713 deallocate(fstrsolid%BOUNDARY_ngrp_centerID, stat=ierror)
1714 if( ierror /= 0 )
then
1715 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, BOUNDARY_ngrp_centerID>'
1717 call hecmw_abort( hecmw_comm_get_comm())
1722 if(
associated(fstrsolid%CLOAD_ngrp_GRPID) )
then
1723 deallocate(fstrsolid%CLOAD_ngrp_GRPID, stat=ierror)
1724 if( ierror /= 0 )
then
1725 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, CLOAD_ngrp_GRPID>'
1727 call hecmw_abort( hecmw_comm_get_comm())
1730 if(
associated(fstrsolid%CLOAD_ngrp_ID) )
then
1731 deallocate(fstrsolid%CLOAD_ngrp_ID, stat=ierror)
1732 if( ierror /= 0 )
then
1733 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, CLOAD_ngrp_ID>'
1735 call hecmw_abort( hecmw_comm_get_comm())
1738 if(
associated(fstrsolid%CLOAD_ngrp_DOF) )
then
1739 deallocate(fstrsolid%CLOAD_ngrp_DOF, stat=ierror)
1740 if( ierror /= 0 )
then
1741 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, CLOAD_ngrp_DOF>'
1743 call hecmw_abort( hecmw_comm_get_comm())
1746 if(
associated(fstrsolid%CLOAD_ngrp_val) )
then
1747 deallocate(fstrsolid%CLOAD_ngrp_val, stat=ierror)
1748 if( ierror /= 0 )
then
1749 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, CLOAD_ngrp_val>'
1751 call hecmw_abort( hecmw_comm_get_comm())
1754 if(
associated(fstrsolid%CLOAD_ngrp_amp) )
then
1755 deallocate(fstrsolid%CLOAD_ngrp_amp, stat=ierror)
1756 if( ierror /= 0 )
then
1757 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, CLOAD_ngrp_amp>'
1759 call hecmw_abort( hecmw_comm_get_comm())
1762 if(
associated(fstrsolid%CLOAD_ngrp_rotID) )
then
1763 deallocate(fstrsolid%CLOAD_ngrp_rotID, stat=ierror)
1764 if( ierror /= 0 )
then
1765 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, CLOAD_ngrp_rotID>'
1767 call hecmw_abort( hecmw_comm_get_comm())
1770 if(
associated(fstrsolid%CLOAD_ngrp_centerID) )
then
1771 deallocate(fstrsolid%CLOAD_ngrp_centerID, stat=ierror)
1772 if( ierror /= 0 )
then
1773 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, CLOAD_ngrp_centerID>'
1775 call hecmw_abort( hecmw_comm_get_comm())
1786 fstrheat%STEPtot = 0
1787 fstrheat%MATERIALtot = 0
1788 fstrheat%AMPLITUDEtot= 0
1789 fstrheat%T_FIX_tot = 0
1790 fstrheat%Q_NOD_tot = 0
1791 fstrheat%Q_VOL_tot = 0
1792 fstrheat%Q_SUF_tot = 0
1793 fstrheat%R_SUF_tot = 0
1794 fstrheat%H_SUF_tot = 0
1796 fstrheat%beta = -1.0d0
1805 fstreig%maxiter = 60
1808 fstreig%sigma = 0.01d0
1809 fstreig%tolerance = 1.0d-6
1810 fstreig%totalmass = 0.0d0
1817 fstrdynamic%idx_eqa = 1
1818 fstrdynamic%idx_resp = 1
1819 fstrdynamic%n_step = 1
1820 fstrdynamic%t_start = 0.0
1821 fstrdynamic%t_curr = 0.0d0
1822 fstrdynamic%t_end = 1.0
1823 fstrdynamic%t_delta = 1.0
1824 fstrdynamic%gamma = 0.5
1825 fstrdynamic%beta = 0.25
1826 fstrdynamic%idx_mas = 1
1827 fstrdynamic%idx_dmp = 1
1828 fstrdynamic%ray_m = 0.0
1829 fstrdynamic%ray_k = 0.0
1830 fstrdynamic%restart_nout = 0
1831 fstrdynamic%nout = 100
1832 fstrdynamic%ngrp_monit = 0
1833 fstrdynamic%nout_monit = 1
1834 fstrdynamic%iout_list(1) = 0
1835 fstrdynamic%iout_list(2) = 0
1836 fstrdynamic%iout_list(3) = 0
1837 fstrdynamic%iout_list(4) = 0
1838 fstrdynamic%iout_list(5) = 0
1839 fstrdynamic%iout_list(6) = 0
1847 type(hecmwst_local_mesh),
target :: hecMESH
1850 integer :: ierror, ndof,nnod
1854 if(fstrdynamic%idx_eqa == 11)
then
1855 allocate( fstrdynamic%DISP(ndof*nnod,3) ,stat=ierror )
1856 if( ierror /= 0 )
then
1857 write(
idbg,*)
'stop due to allocation error <fstr_solve_LINEAR_DYNAMIC, DISP>'
1858 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1860 call hecmw_abort( hecmw_comm_get_comm())
1862 allocate( fstrdynamic%VEL (ndof*nnod,1) ,stat=ierror )
1863 if( ierror /= 0 )
then
1864 write(
idbg,*)
'stop due to allocation error <fstr_solve_LINEAR_DYNAMIC, VEL>'
1865 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1867 call hecmw_abort( hecmw_comm_get_comm())
1869 allocate( fstrdynamic%ACC (ndof*nnod,1) ,stat=ierror )
1870 if( ierror /= 0 )
then
1871 write(
idbg,*)
'stop due to allocation error <fstr_solve_LINEAR_DYNAMIC, ACC>'
1872 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1874 call hecmw_abort( hecmw_comm_get_comm())
1877 allocate( fstrdynamic%DISP(ndof*nnod,2) ,stat=ierror )
1878 if( ierror /= 0 )
then
1879 write(
idbg,*)
'stop due to allocation error <fstr_solve_LINEAR_DYNAMIC, DISP>'
1880 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1882 call hecmw_abort( hecmw_comm_get_comm())
1884 allocate( fstrdynamic%VEL (ndof*nnod,2) ,stat=ierror )
1885 if( ierror /= 0 )
then
1886 write(
idbg,*)
'stop due to allocation error <fstr_solve_LINEAR_DYNAMIC, VEL>'
1887 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1889 call hecmw_abort( hecmw_comm_get_comm())
1891 allocate( fstrdynamic%ACC (ndof*nnod,2) ,stat=ierror )
1892 if( ierror /= 0 )
then
1893 write(
idbg,*)
'stop due to allocation error <fstr_solve_LINEAR_DYNAMIC, ACC>'
1894 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1896 call hecmw_abort( hecmw_comm_get_comm())
1901 allocate( fstrdynamic%VEC1(ndof*nnod) ,stat=ierror )
1902 if( ierror /= 0 )
then
1903 write(
idbg,*)
'stop due to allocation error <fstr_solve_LINEAR_DYNAMIC, VEC1>'
1904 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1906 call hecmw_abort( hecmw_comm_get_comm())
1908 allocate( fstrdynamic%VEC2(ndof*nnod) ,stat=ierror )
1909 if( ierror /= 0 )
then
1910 write(
idbg,*)
'stop due to allocation error <fstr_solve_LINEAR_DYNAMIC, VEC2>'
1911 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1913 call hecmw_abort( hecmw_comm_get_comm())
1915 allocate( fstrdynamic%VEC3(ndof*nnod) ,stat=ierror )
1916 if( ierror /= 0 )
then
1917 write(
idbg,*)
'stop due to allocation error <fstr_solve_LINEAR_DYNAMIC, VEC3>'
1918 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1920 call hecmw_abort( hecmw_comm_get_comm())
1930 if(
associated(fstrdynamic%DISP) ) &
1931 deallocate( fstrdynamic%DISP ,stat=ierror )
1932 if( ierror /= 0 )
then
1933 write(
idbg,*)
'stop due to deallocation error <fstr_solve_LINEAR_DYNAMIC, DISP>'
1935 call hecmw_abort( hecmw_comm_get_comm())
1937 if(
associated(fstrdynamic%VEL) ) &
1938 deallocate( fstrdynamic%VEL ,stat=ierror )
1939 if( ierror /= 0 )
then
1940 write(
idbg,*)
'stop due to deallocation error <fstr_solve_LINEAR_DYNAMIC, VEL>'
1942 call hecmw_abort( hecmw_comm_get_comm())
1944 if(
associated(fstrdynamic%ACC) ) &
1945 deallocate( fstrdynamic%ACC ,stat=ierror )
1946 if( ierror /= 0 )
then
1947 write(
idbg,*)
'stop due to deallocation error <fstr_solve_LINEAR_DYNAMIC, ACC>'
1949 call hecmw_abort( hecmw_comm_get_comm())
1951 if(
associated(fstrdynamic%VEC1) ) &
1952 deallocate( fstrdynamic%VEC1 ,stat=ierror )
1953 if( ierror /= 0 )
then
1954 write(
idbg,*)
'stop due to deallocation error <fstr_solve_LINEAR_DYNAMIC, VEC1>'
1956 call hecmw_abort( hecmw_comm_get_comm())
1958 if(
associated(fstrdynamic%VEC2) ) &
1959 deallocate( fstrdynamic%VEC2 ,stat=ierror )
1960 if( ierror /= 0 )
then
1961 write(
idbg,*)
'stop due to deallocation error <fstr_solve_LINEAR_DYNAMIC, VEC2>'
1963 call hecmw_abort( hecmw_comm_get_comm())
1965 if(
associated(fstrdynamic%VEC3) ) &
1966 deallocate( fstrdynamic%VEC3 ,stat=ierror )
1967 if( ierror /= 0 )
then
1968 write(
idbg,*)
'stop due to deallocation error <fstr_solve_LINEAR_DYNAMIC, VEC3>'
1970 call hecmw_abort( hecmw_comm_get_comm())
1982 integer(kind=kint) :: NDOF, n_node, n_elem, mdof, istat
1983 mdof = (ndof*ndof+ndof)/2;
1984 allocate ( phys%STRAIN (mdof*n_node), stat=istat)
1985 if( istat /= 0 ) stop
"Allocation error: phys%STRAIN"
1986 allocate ( phys%STRESS (mdof*n_node), stat=istat)
1987 if( istat /= 0 ) stop
"Allocation error: phys%STRESS"
1988 allocate ( phys%MISES ( n_node), stat=istat)
1989 if( istat /= 0 ) stop
"Allocation error: phys%MISES"
1990 allocate ( phys%ESTRAIN (mdof*n_elem), stat=istat)
1991 if( istat /= 0 ) stop
"Allocation error: phys%ESTRAIN"
1992 allocate ( phys%ESTRESS (mdof*n_elem), stat=istat)
1993 if( istat /= 0 ) stop
"Allocation error: phys%ESTRESS"
1994 allocate ( phys%EMISES ( n_elem), stat=istat)
1995 if( istat /= 0 ) stop
"Allocation error: phys%EMISES"
1996 allocate ( phys%EPLSTRAIN ( n_elem), stat=istat)
1997 if( istat /= 0 ) stop
"Allocation error: phys%EPLSTRAIN"
1998 allocate ( phys%ENQM (12*n_elem), stat=istat)
1999 if( istat /= 0 ) stop
"Allocation error: phys%ENQM"
2004 integer(kind=kint) :: ctrl, i
2008 if( p%PARAM%solution_type ==
kststatic &
2009 .or. p%PARAM%solution_type ==
ksteigen &
2013 if( p%MESH%n_dof == 6 .or. p%SOLID%is_33shell == 1 )
then
2014 allocate ( p%SOLID%SHELL )
2016 allocate ( p%SOLID%SHELL%LAYER(p%SOLID%max_lyr) )
2017 do i=1,p%SOLID%max_lyr
2018 allocate ( p%SOLID%SHELL%LAYER(i)%PLUS )
2019 allocate ( p%SOLID%SHELL%LAYER(i)%MINUS )
2023 phys => p%SOLID%SHELL
2025 allocate ( p%SOLID%SOLID )
2026 phys => p%SOLID%SOLID
2029 p%SOLID%STRAIN => phys%STRAIN
2030 p%SOLID%STRESS => phys%STRESS
2031 p%SOLID%MISES => phys%MISES
2032 p%SOLID%ESTRAIN => phys%ESTRAIN
2033 p%SOLID%ESTRESS => phys%ESTRESS
2034 p%SOLID%EMISES => phys%EMISES
2035 p%SOLID%EPLSTRAIN => phys%EPLSTRAIN
2036 p%SOLID%ENQM => phys%ENQM
2037 allocate( p%SOLID%REACTION( p%MESH%n_dof*p%MESH%n_node ), stat=i )
2038 if( i /= 0 ) stop
"Allocation error: REACTION"
2041 if( p%PARAM%fg_visual ==
kon )
then
2045 call hecmw_barrier( p%MESH )
2047 if( p%HEAT%STEPtot == 0 )
then
2048 if( p%PARAM%analysis_n == 0 )
then
2055 p%PARAM%analysis_n = 1
2061 p%PARAM%eps = 1.0e-6
2068 p%HEAT%STEP_DLTIME = 0
2069 p%HEAT%STEP_EETIME = 0
2070 p%HEAT%STEP_DELMIN = 0
2071 p%HEAT%STEP_DELMAX = 0
2085 integer(kind=kint) :: ctrl
2086 integer(kind=kint) :: counter
2089 integer(kind=kint) :: rcode
2102 integer(kind=kint) :: ctrl
2103 integer(kind=kint) :: counter
2106 integer(kind=kint) :: rcode
2119 integer(kind=kint) :: ctrl
2120 integer(kind=kint) :: counter
2123 integer(kind=kint) :: rcode
2125 if( counter >= 2 )
then
2126 write(
ilog,*)
'### Error : !SOLVER exists twice in FSTR control file.'
2181 integer(kind=kint) :: ctrl
2182 type( hecmwst_local_mesh ) :: hecmesh
2184 type( tlocalcoordsys ) :: coordsys
2186 integer :: j, is, ie, grp_id(1)
2187 character(len=HECMW_NAME_LEN) :: grp_id_name(1)
2189 integer :: nid, dtype
2190 character(len=HECMW_NAME_LEN) :: data_fmt
2191 real(kind=kreal) :: fdum, xyza(3), xyzb(3), xyzc(3), ff1(3), ff2(3), ff3(3)
2196 coordsys%sys_type = 10
2199 data_fmt =
'COORDINATES,NODES '
2202 coordsys%sys_type = coordsys%sys_type + dtype
2205 coordsys%sys_name = grp_id_name(1)
2209 data_fmt =
"RRRRRRrrr "
2212 xyza(3), xyzb(1), xyzb(2), xyzb(3), xyzc(1), xyzc(2), xyzc(3) )/=0 )
return
2213 if( coordsys%sys_type==10 )
then
2215 fdum = dsqrt( dot_product(ff1, ff1) )
2216 if( fdum==0.d0 )
return
2220 coordsys%CoordSys(1,:) = ff1
2222 fdum = dsqrt( dot_product(ff3, ff3) )
2223 if( fdum==0.d0 )
return
2224 coordsys%CoordSys(3,:) = ff3/fdum
2226 call cross_product(coordsys%CoordSys(3,:), coordsys%CoordSys(1,:), coordsys%CoordSys(2,:) )
2228 coordsys%CoordSys(1,:) = xyza
2229 coordsys%CoordSys(2,:) = xyzb
2233 coordsys%node_ID(3) = 0
2236 coordsys%node_ID(2), coordsys%node_ID(3) )/=0 )
return
2237 if( coordsys%node_ID(3) == 0 )
then
2239 if( nid/=0 .and. nid/=2 )
then
2240 write(*,*)
"We cannot define coordinate system using nodes in other CPU!"
2241 write(
idbg,*)
"We cannot define coordinate system using nodes in other CPU!"
2246 if( nid/=0 .and. nid/=3 )
then
2247 write(*,*)
"We cannot define coordinate system using nodes in other CPU!"
2248 write(
idbg,*)
"We cannot define coordinate system using nodes in other CPU!"
2264 integer(kind=kint) :: ctrl
2265 integer(kind=kint) :: counter
2267 character(HECMW_NAME_LEN) :: amp
2268 integer(kind=kint) :: amp_id
2270 integer(kind=kint) :: rcode, iproc
2282 integer(kind=kint) :: ctrl
2284 type(hecmwst_local_mesh) :: hecmesh
2285 integer,
pointer :: grp_id(:), dof(:)
2286 real(kind=kreal),
pointer :: temp(:)
2287 character(len=HECMW_NAME_LEN),
pointer :: grp_id_name(:)
2288 character(len=HECMW_NAME_LEN) :: data_fmt, ss
2289 integer :: i,j,n, is, ie, gid, nid, rcode
2293 ss =
'TEMPERATURE,VELOCITY,ACCELERATION '
2296 cond%cond_name =
"temperature"
2297 allocate( cond%intval(hecmesh%n_node) )
2298 allocate( cond%realval(hecmesh%n_node) )
2299 elseif( nid==2 )
then
2300 cond%cond_name =
"velocity"
2301 allocate( cond%intval(hecmesh%n_node) )
2302 allocate( cond%realval(hecmesh%n_node) )
2303 elseif( nid==3 )
then
2304 cond%cond_name =
"acceleration"
2305 allocate( cond%intval(hecmesh%n_node) )
2306 allocate( cond%realval(hecmesh%n_node) )
2316 allocate( temp(n), grp_id_name(n), grp_id(n), dof(n) )
2318 write(ss,*) hecmw_name_len
2320 write(data_fmt,
'(a,a,a)')
'S',trim(adjustl(ss)),
'R '
2324 write(data_fmt,
'(a,a,a)')
'S',trim(adjustl(ss)),
'IR '
2330 if(
associated(grp_id) )
deallocate( grp_id )
2331 if(
associated(temp) )
deallocate( temp )
2332 if(
associated(dof) )
deallocate( dof )
2333 if(
associated(grp_id_name) )
deallocate( grp_id_name )
2340 is = hecmesh%node_group%grp_index(gid-1) + 1
2341 ie = hecmesh%node_group%grp_index(gid )
2343 nid = hecmesh%node_group%grp_item(j)
2344 cond%realval(nid) = temp(i)
2345 cond%intval(nid) = dof(i)
2349 if(
associated(grp_id) )
deallocate( grp_id )
2350 if(
associated(temp) )
deallocate( temp )
2351 if(
associated(dof) )
deallocate( dof )
2352 if(
associated(grp_id_name) )
deallocate( grp_id_name )
2361 integer(kind=kint) :: ctrl
2362 integer(kind=kint) :: counter
2364 integer(kind=kint) :: res, visual, neutral
2366 integer(kind=kint) :: rcode
2370 if( res == 1 ) p%PARAM%fg_result = 1
2371 if( visual == 1 ) p%PARAM%fg_visual = 1
2372 if( neutral == 1 ) p%PARAM%fg_neutral = 1
2382 integer(kind=kint) :: ctrl
2383 integer(kind=kint) :: counter
2386 integer(kind=kint) :: rcode
2400 integer(kind=kint) :: ctrl
2401 integer(kind=kint) :: nout
2402 integer(kind=kint) :: version
2404 integer(kind=kint) :: rcode
2420 integer(kind=kint) :: ctrl
2421 integer(kind=kint) :: counter
2423 integer(kind=kint) :: rcode
2424 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
2425 integer(kind=kint) :: i, n, old_size, new_size
2427 if( p%SOLID%file_type /=
kbcffstr )
return
2431 old_size = p%SOLID%COUPLE_ngrp_tot
2432 new_size = old_size + n
2433 p%SOLID%COUPLE_ngrp_tot = new_size
2437 allocate( grp_id_name(n))
2439 p%PARAM%fg_couple_type, &
2440 p%PARAM%fg_couple_first, &
2441 p%PARAM%fg_couple_window, &
2442 grp_id_name, hecmw_name_len )
2446 n, grp_id_name, p%SOLID%COUPLE_ngrp_ID(old_size+1:))
2448 deallocate( grp_id_name )
2449 p%PARAM%fg_couple = 1
2459 integer(kind=kint) :: ctrl
2461 real(kind=kreal),
pointer :: val(:), table(:)
2462 character(len=HECMW_NAME_LEN) :: name
2463 integer :: nline, n, type_def, type_time, type_val, rcode
2466 if( nline<=0 )
return
2467 allocate( val(nline*4) )
2468 allocate( table(nline*4) )
2475 if(
associated(val) )
deallocate( val )
2476 if(
associated(table) )
deallocate( table )
2483 integer(kind=kint) :: ctrl
2484 integer(kind=kint) :: counter
2487 integer(kind=kint) :: rcode
2488 character(HECMW_NAME_LEN) :: amp
2489 integer(kind=kint) :: amp_id
2490 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
2491 integer(kind=kint) :: i, n, old_size, new_size
2492 integer(kind=kint) :: gid, mode, measure, state
2493 real(kind=kreal) ::
eps
2494 real(kind=kreal),
pointer :: thlow(:), thup(:)
2501 old_size = p%SOLID%elemact%ELEMACT_egrp_tot
2502 new_size = old_size + n
2503 p%SOLID%elemact%ELEMACT_egrp_tot = new_size
2514 allocate( grp_id_name(n), thlow(n), thup(n) )
2520 call amp_name_to_id( p%MESH,
'!ELEMENT_ACTIVATION', amp, amp_id )
2522 p%SOLID%elemact%ELEMACT_egrp_amp(old_size+i) = amp_id
2523 p%SOLID%elemact%ELEMACT_egrp_eps(old_size+i) =
eps
2525 p%SOLID%elemact%ELEMACT_egrp_GRPID(old_size+1:new_size) = gid
2526 p%SOLID%elemact%ELEMACT_egrp_depends(old_size+1:new_size) = measure
2527 p%SOLID%elemact%ELEMACT_egrp_ts_lower(old_size+1:new_size) = thlow(1:n)
2528 p%SOLID%elemact%ELEMACT_egrp_ts_upper(old_size+1:new_size) = thup(1:n)
2529 p%SOLID%elemact%ELEMACT_egrp_state(old_size+1:new_size) = state
2531 call elem_grp_name_to_id_ex( p%MESH,
'!ELEMENT_ACTIVATION', n, grp_id_name, p%SOLID%elemact%ELEMACT_egrp_ID(old_size+1:))
2533 deallocate( grp_id_name )
2547 integer(kind=kint) :: ctrl
2548 integer(kind=kint) :: counter
2550 integer(kind=kint) :: rcode
2552 integer :: nout, nout_monit,node_monit_1 ,elem_monit_1 ,intg_monit_1
2553 integer :: ipt, idx_elpl, iout_list(6)
2554 real(kind=kreal) :: sig_y0, h_dash
2556 if( counter > 1 )
then
2563 if( ipt == 2 ) p%PARAM%nlgeom = .true.
2567 write(*,*)
"Warning : !STATIC : parameter 'TYPE=INFINITE' is deprecated." &
2568 & //
" Please use the replacement parameter 'TYPE=INFINITESIMAL'"
2576 nout, nout_monit, node_monit_1, &
2577 elem_monit_1, intg_monit_1 )
2590 integer(kind=kint) :: ctrl
2591 integer(kind=kint) :: counter
2594 integer(kind=kint) :: rcode
2595 integer(kind=kint) ::
type = 0
2596 character(HECMW_NAME_LEN) :: amp, rotc_name(1)
2597 integer(kind=kint) :: amp_id, rotc_id(1), n_rotc
2598 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
2599 integer(kind=kint),
pointer :: dof_ids (:)
2600 integer(kind=kint),
pointer :: dof_ide (:)
2601 real(kind=kreal),
pointer :: val_ptr(:)
2602 integer(kind=kint) :: i, n, old_size, new_size
2604 integer(kind=kint) :: gid, istot
2624 if( rotc_name(1) /=
' ' )
then
2625 if( istot /= 0 )
then
2626 write(*,*)
'fstr control file error : !BOUNDARY : rotational boundary cannot be specified with total value'
2627 write(
ilog,*)
'fstr control file error : !BOUNDARY : rotational boundary cannot be specified with total value'
2630 p%SOLID%BOUNDARY_ngrp_rot = p%SOLID%BOUNDARY_ngrp_rot + 1
2631 n_rotc = p%SOLID%BOUNDARY_ngrp_rot
2641 old_size = p%SOLID%BOUNDARY_ngrp_tot
2642 new_size = old_size + n
2643 p%SOLID%BOUNDARY_ngrp_tot = new_size
2653 allocate( grp_id_name(n) )
2654 allocate( dof_ids(n) )
2655 allocate( dof_ide(n) )
2656 allocate( val_ptr(n) )
2663 p%SOLID%BOUNDARY_ngrp_GRPID(old_size+1:new_size) = gid
2665 p%SOLID%BOUNDARY_ngrp_istot(old_size+1:new_size) = istot
2668 p%SOLID%BOUNDARY_ngrp_rotID(old_size+1:) = n_rotc
2669 p%SOLID%BOUNDARY_ngrp_centerID(old_size+1:) = rotc_id(1)
2672 if( (dof_ids(i) < 1).or.(6 < dof_ids(i)).or.(dof_ide(i) < 1).or.(6 < dof_ide(i)) )
then
2673 write(*,*)
'fstr control file error : !BOUNDARY : range of dof_ids and dof_ide is from 1 to 6'
2674 write(
ilog,*)
'fstr control file error : !BOUNDARY : range of dof_ids and dof_ide is from 1 to 6'
2677 p%SOLID%BOUNDARY_ngrp_val(old_size+i) = val_ptr(i)
2678 p%SOLID%BOUNDARY_ngrp_type(old_size+i) = 10 * dof_ids(i) + dof_ide(i)
2679 p%SOLID%BOUNDARY_ngrp_amp(old_size+i) = amp_id
2682 deallocate( grp_id_name )
2683 deallocate( dof_ids )
2684 deallocate( dof_ide )
2685 deallocate( val_ptr )
2686 nullify( grp_id_name )
2706 integer(kind=kint) :: ctrl
2707 integer(kind=kint) :: counter
2710 integer(kind=kint) :: rcode
2711 character(HECMW_NAME_LEN) :: amp, rotc_name(1)
2712 integer(kind=kint) :: amp_id, rotc_id(1), n_rotc
2713 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
2714 real(kind=kreal),
pointer :: val_ptr(:)
2715 integer(kind=kint),
pointer :: id_ptr(:)
2716 integer(kind=kint) :: i, n, old_size, new_size
2717 integer(kind=kint) :: gid
2719 if( p%SOLID%file_type /=
kbcffstr )
return
2730 if( rotc_name(1) /=
' ' )
then
2731 p%SOLID%CLOAD_ngrp_rot = p%SOLID%CLOAD_ngrp_rot + 1
2732 n_rotc = p%SOLID%CLOAD_ngrp_rot
2738 old_size = p%SOLID%CLOAD_ngrp_tot
2739 new_size = old_size + n
2740 p%SOLID%CLOAD_ngrp_tot = new_size
2751 allocate( grp_id_name(n))
2752 allocate( id_ptr(n) )
2753 allocate( val_ptr(n) )
2761 p%SOLID%CLOAD_ngrp_rotID(old_size+1:) = n_rotc
2762 p%SOLID%CLOAD_ngrp_centerID(old_size+1:) = rotc_id(1)
2766 p%SOLID%CLOAD_ngrp_amp(old_size+i) = amp_id
2767 p%SOLID%CLOAD_ngrp_DOF(old_size+i) = id_ptr(i)
2768 p%SOLID%CLOAD_ngrp_val(old_size+i) = val_ptr(i)
2770 p%SOLID%CLOAD_ngrp_GRPID(old_size+1:new_size) = gid
2773 deallocate( grp_id_name )
2774 deallocate( id_ptr )
2775 deallocate( val_ptr )
2776 nullify( grp_id_name )
2780 if( p%MESH%n_refine > 0 )
then
2782 if( hecmw_ngrp_get_number(p%MESH, p%SOLID%CLOAD_NGRP_ID(old_size+i)) > 1 )
then
2783 write(*,*)
'fstr control file error : !CLOAD : cannot be used with NGRP when mesh is refined'
2784 write(
ilog,*)
'fstr control file error : !CLOAD : cannot be used with NGRP when mesh is refined'
2797 integer(kind=kint) :: ctrl
2798 integer(kind=kint) :: counter
2801 integer(kind=kint) :: rcode
2802 character(HECMW_NAME_LEN) :: amp
2803 integer(kind=kint) :: amp_id
2804 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
2805 real(kind=kreal),
pointer :: val_ptr(:)
2806 integer(kind=kint),
pointer :: id_ptr(:)
2807 integer(kind=kint) :: i, n, old_size, new_size
2808 integer(kind=kint) :: gid, loadcase
2811 if( p%SOLID%file_type /=
kbcffstr)
return
2825 old_size = p%FREQ%FLOAD_ngrp_tot
2826 new_size = old_size + n
2829 p%FREQ%FLOAD_ngrp_tot = new_size
2838 allocate( grp_id_name(n) )
2839 allocate( id_ptr(n) )
2840 allocate( val_ptr(n) )
2847 p%FREQ%FLOAD_ngrp_DOF(old_size+i) = id_ptr(i)
2848 p%FREQ%FLOAD_ngrp_valre(old_size+i) = val_ptr(i)
2852 p%FREQ%FLOAD_ngrp_DOF(old_size+i) = id_ptr(i)
2853 p%FREQ%FLOAD_ngrp_valim(old_size+i) = val_ptr(i)
2857 write(*,*)
"Error this load set is not defined!"
2858 write(
ilog,*)
"Error this load set is not defined!"
2861 p%FREQ%FLOAD_ngrp_GRPID(old_size+1:new_size) = gid
2863 p%FREQ%FLOAD_ngrp_ID(old_size+1:), p%FREQ%FLOAD_ngrp_TYPE(old_size+1:))
2865 deallocate( grp_id_name )
2866 deallocate( id_ptr )
2867 deallocate( val_ptr )
2868 nullify( grp_id_name )
2876 integer(kind=kint) :: ctrl
2877 character(len=HECMW_NAME_LEN) :: node_id(:)
2878 integer(kind=kint),
pointer :: dof_id(:)
2879 integer(kind=kint) :: node_id_len
2880 real(kind=kreal),
pointer :: value(:)
2882 character(len=HECMW_NAME_LEN) :: data_fmt, ss
2884 write(ss,*) node_id_len
2885 write(data_fmt,
'(a,a,a)')
'S', trim(adjustl(ss)),
'IR '
2897 integer(kind=kint) :: ctrl
2898 integer(kind=kint) :: counter
2901 integer(kind=kint) :: filename_len
2902 character(len=HECMW_NAME_LEN) :: datafmt, ss
2905 filename_len = hecmw_filename_len
2906 write(ss,*) filename_len
2907 write(datafmt,
'(a,a,a)')
'S', trim(adjustl(ss)),
' '
2922 real(kind=kreal),
pointer :: array(:,:)
2923 integer(kind=kint) :: old_size, new_size, i, j
2924 real(kind=kreal),
pointer :: temp(:,:)
2926 if( old_size >= new_size )
then
2930 if(
associated( array ) )
then
2931 allocate(temp(0:6, old_size))
2934 allocate(array(0:6, new_size))
2938 array(j,i) = temp(j,i)
2943 allocate(array(0:6, new_size))
2951 integer(kind=kint) :: ctrl
2952 integer(kind=kint) :: counter
2955 integer(kind=kint) :: rcode
2956 character(HECMW_NAME_LEN) :: amp
2957 integer(kind=kint) :: amp_id
2958 integer(kind=kint) :: follow
2959 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
2960 real(kind=kreal),
pointer :: new_params(:,:)
2961 logical,
pointer :: fg_surface(:)
2962 integer(kind=kint),
pointer :: lid_ptr(:)
2963 integer(kind=kint) :: i, j, n, old_size, new_size
2964 integer(kind=kint) :: gid
2966 if( p%SOLID%file_type /=
kbcffstr )
return
2973 old_size = p%SOLID%DLOAD_ngrp_tot
2974 new_size = old_size + n
2975 p%SOLID%DLOAD_ngrp_tot = new_size
2984 allocate( grp_id_name(n))
2985 allocate( lid_ptr(n) )
2986 allocate( new_params(0:6,n))
2987 allocate( fg_surface(n))
2990 follow = p%SOLID%DLOAD_follow
2991 if( .not. p%PARAM%nlgeom ) follow = 0
2993 grp_id_name, hecmw_name_len, &
2994 lid_ptr, new_params )
2997 p%SOLID%DLOAD_follow = follow
2999 p%SOLID%DLOAD_ngrp_amp(old_size+i) = amp_id
3000 p%SOLID%DLOAD_ngrp_LID(old_size+i) = lid_ptr(i)
3002 p%SOLID%DLOAD_ngrp_params(j,old_size+i) = new_params(j,i)
3004 fg_surface(i) = ( lid_ptr(i) == 100 )
3006 p%SOLID%DLOAD_ngrp_GRPID(old_size+1:new_size) = gid
3008 deallocate( grp_id_name )
3009 deallocate( lid_ptr )
3010 deallocate( new_params )
3011 deallocate( fg_surface )
3012 nullify( grp_id_name )
3014 nullify( new_params )
3015 nullify( fg_surface )
3025 integer(kind=kint) :: ctrl
3026 integer(kind=kint) :: counter
3029 integer(kind=kint) :: rcode, gid
3030 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
3031 real(kind=kreal),
pointer :: val_ptr(:)
3032 integer(kind=kint) :: i, n, old_size, new_size
3034 if( p%SOLID%file_type /=
kbcffstr )
return
3040 old_size = p%SOLID%TEMP_ngrp_tot
3042 new_size = old_size + n
3044 new_size = old_size + 1
3050 allocate( grp_id_name(n))
3051 allocate( val_ptr(n) )
3055 p%SOLID%TEMP_irres, &
3056 p%SOLID%TEMP_tstep, &
3057 p%SOLID%TEMP_interval, &
3058 p%SOLID%TEMP_rtype, &
3059 grp_id_name, hecmw_name_len, &
3063 p%SOLID%TEMP_ngrp_val(old_size+i) = val_ptr(i)
3065 deallocate( val_ptr )
3068 p%SOLID%TEMP_ngrp_GRPID(old_size+1:new_size) = gid
3070 if( p%SOLID%TEMP_irres == 0 )
then
3071 p%SOLID%TEMP_ngrp_tot = new_size
3073 n, grp_id_name, p%SOLID%TEMP_ngrp_ID(old_size+1:))
3075 deallocate( grp_id_name )
3087 integer(kind=kint) :: ctrl
3088 integer(kind=kint) :: counter
3091 integer(kind=kint) :: rcode
3092 character(HECMW_NAME_LEN) :: amp
3093 integer(kind=kint) :: amp_id
3094 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
3095 real(kind=kreal),
pointer :: val_ptr(:)
3096 integer(kind=kint),
pointer :: id_ptr(:)
3097 integer(kind=kint) :: i, n, old_size, new_size
3098 integer(kind=kint) :: gid
3100 if( p%SOLID%file_type /=
kbcffstr )
return
3105 old_size = p%SOLID%SPRING_ngrp_tot
3106 new_size = old_size + n
3107 p%SOLID%SPRING_ngrp_tot = new_size
3114 allocate( grp_id_name(n))
3115 allocate( id_ptr(n) )
3116 allocate( val_ptr(n) )
3125 p%SOLID%SPRING_ngrp_amp(old_size+i) = amp_id
3126 p%SOLID%SPRING_ngrp_DOF(old_size+i) = id_ptr(i)
3127 p%SOLID%SPRING_ngrp_val(old_size+i) = val_ptr(i)
3129 p%SOLID%SPRING_ngrp_GRPID(old_size+1:new_size) = gid
3132 deallocate( grp_id_name )
3133 deallocate( id_ptr )
3134 deallocate( val_ptr )
3135 nullify( grp_id_name )
3148 integer(kind=kint) :: ctrl
3149 integer(kind=kint) :: counter
3152 integer(kind=kint) :: rcode
3170 integer(kind=kint) :: ctrl
3171 integer(kind=kint) :: counter
3174 integer(kind=kint) :: rcode
3175 integer(kind=kint) :: n
3176 character(len=HECMW_NAME_LEN) :: mName
3177 integer(kind=kint) :: i
3189 p%PARAM%analysis_n = n
3196 p%PARAM%eps = 1.0e-6
3197 p%PARAM%timepoint_id = 0
3208 if( rcode /= 0 )
then
3212 if(
associated(p%PARAM%timepoints) )
then
3213 do i=1,
size(p%PARAM%timepoints)
3214 if(
fstr_streqr( p%PARAM%timepoints(i)%name, mname ) )
then
3215 p%PARAM%timepoint_id = i;
exit
3226 p%HEAT%STEP_DLTIME = p%PARAM%dtime
3227 p%HEAT%STEP_EETIME = p%PARAM%etime
3228 p%HEAT%STEP_DELMIN = p%PARAM%dtmin
3229 p%HEAT%STEP_DELMAX = p%PARAM%delmax
3230 p%HEAT%timepoint_id = p%PARAM%timepoint_id
3240 integer(kind=kint) :: ctrl
3241 integer(kind=kint) :: counter
3244 integer(kind=kint) :: rcode
3245 character(HECMW_NAME_LEN) :: amp
3246 integer(kind=kint) :: amp_id
3247 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
3248 real(kind=kreal),
pointer :: value(:)
3249 integer(kind=kint) :: i, j, n, m, head, id, member_n, old_size, new_size
3250 integer(kind=kint),
pointer :: member(:)
3251 integer(kind=kint) :: local_id, rtc
3257 allocate( grp_id_name(n))
3262 grp_id_name, hecmw_name_len,
value )
3273 else if( rtc < 0 )
then
3279 deallocate( grp_id_name )
3285 old_size = p%HEAT%T_FIX_tot
3286 new_size = old_size + m
3290 p%HEAT%T_FIX_tot = new_size
3293 member => p%HEAT%T_FIX_node(head:)
3299 member(1) = local_id
3301 else if( rtc < 0 )
then
3302 member_n =
get_grp_member( p%MESH,
'node_grp', grp_id_name(i), member )
3307 member => member( member_n+1 : )
3310 p%HEAT%T_FIX_val (id) = value(i)
3311 p%HEAT%T_FIX_ampl (id) = amp_id
3316 deallocate( grp_id_name )
3327 integer(kind=kint) :: ctrl
3328 integer(kind=kint) :: counter
3331 integer(kind=kint) :: rcode
3332 character(HECMW_NAME_LEN) :: amp
3333 integer(kind=kint) :: amp_id
3334 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
3335 real(kind=kreal),
pointer :: value(:)
3336 integer(kind=kint) :: i, j, n, m, head, id, member_n, old_size, new_size
3337 integer(kind=kint),
pointer :: member(:)
3338 integer(kind=kint) :: local_id, rtc
3344 allocate( grp_id_name(n))
3349 grp_id_name, hecmw_name_len,
value )
3360 else if( rtc < 0 )
then
3366 deallocate( grp_id_name )
3372 old_size = p%HEAT%Q_NOD_tot
3373 new_size = old_size + m
3377 p%HEAT%Q_NOD_tot = new_size
3380 member => p%HEAT%Q_NOD_node(head:)
3385 member(1) = local_id
3387 else if( rtc < 0 )
then
3388 member_n =
get_grp_member( p%MESH,
'node_grp', grp_id_name(i), member )
3392 if( i<n ) member => member( member_n+1 : )
3394 p%HEAT%Q_NOD_val (id) = value(i)
3395 p%HEAT%Q_NOD_ampl (id) = amp_id
3400 deallocate( grp_id_name )
3412 integer(kind=kint) :: ctrl
3413 integer(kind=kint) :: counter
3416 integer(kind=kint) :: rcode
3417 character(HECMW_NAME_LEN) :: amp
3418 integer(kind=kint) :: amp_id
3419 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
3420 integer(kind=kint),
pointer :: load_type(:)
3421 real(kind=kreal),
pointer :: value(:)
3422 integer(kind=kint) :: i, j, n, m, head, id, member_n, old_size, new_size
3423 integer(kind=kint),
pointer :: member(:)
3424 integer(kind=kint) :: local_id, rtc
3430 allocate( grp_id_name(n))
3431 allocate( load_type(n))
3436 grp_id_name, hecmw_name_len, load_type,
value )
3446 else if( rtc < 0 )
then
3452 deallocate( grp_id_name )
3453 deallocate( load_type )
3459 old_size = p%HEAT%Q_SUF_tot
3460 new_size = old_size + m
3465 p%HEAT%Q_SUF_tot = new_size
3468 member => p%HEAT%Q_SUF_elem(head:)
3473 member(1) = local_id
3475 else if( rtc < 0 )
then
3476 member_n =
get_grp_member( p%MESH,
'elem_grp', grp_id_name(i), member )
3480 if( i<n ) member => member( member_n+1 : )
3482 p%HEAT%Q_SUF_surf (id) = load_type(i)
3483 p%HEAT%Q_SUF_val (id) = value(i)
3484 p%HEAT%Q_SUF_ampl (id) = amp_id
3489 deallocate( grp_id_name )
3490 deallocate( load_type )
3502 integer(kind=kint) :: ctrl
3503 integer(kind=kint) :: counter
3506 integer(kind=kint) :: rcode
3507 character(HECMW_NAME_LEN) :: amp
3508 integer(kind=kint) :: amp_id
3509 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
3510 real(kind=kreal),
pointer :: value(:)
3511 integer(kind=kint) :: i, j, n, m, head, id, member_n, old_size, new_size
3512 integer(kind=kint),
pointer :: member1(:), member2(:)
3518 allocate( grp_id_name(n))
3523 grp_id_name, hecmw_name_len,
value )
3534 deallocate( grp_id_name )
3540 old_size = p%HEAT%Q_SUF_tot
3541 new_size = old_size + m
3546 p%HEAT%Q_SUF_tot = new_size
3549 member1 => p%HEAT%Q_SUF_elem(head:)
3550 member2 => p%HEAT%Q_SUF_surf(head:)
3553 member_n =
get_grp_member( p%MESH,
'surf_grp', grp_id_name(i), member1, member2 )
3555 member1 => member1( member_n+1 : )
3556 member2 => member2( member_n+1 : )
3559 p%HEAT%Q_SUF_val (id) = value(i)
3560 p%HEAT%Q_SUF_ampl (id) = amp_id
3565 deallocate( grp_id_name )
3577 integer(kind=kint) :: ctrl
3578 integer(kind=kint) :: counter
3581 integer(kind=kint) :: rcode
3582 character(HECMW_NAME_LEN) :: amp1, amp2
3583 integer(kind=kint) :: amp_id1, amp_id2
3584 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
3585 integer(kind=kint),
pointer :: load_type(:)
3586 real(kind=kreal),
pointer :: value(:)
3587 real(kind=kreal),
pointer :: shink(:)
3588 integer(kind=kint) :: i, j, n, m, head, id, member_n, old_size, new_size
3589 integer(kind=kint),
pointer :: member(:)
3590 integer(kind=kint) :: local_id, rtc
3596 allocate( grp_id_name(n))
3597 allocate( load_type(n))
3605 grp_id_name, hecmw_name_len, load_type,
value, shink )
3616 else if( rtc < 0 )
then
3622 deallocate( grp_id_name )
3623 deallocate( load_type )
3630 old_size = p%HEAT%H_SUF_tot
3631 new_size = old_size + m
3636 p%HEAT%H_SUF_tot = new_size
3639 member => p%HEAT%H_SUF_elem(head:)
3644 member(1) = local_id
3646 else if( rtc < 0 )
then
3647 member_n =
get_grp_member( p%MESH,
'elem_grp', grp_id_name(i), member )
3651 if( i<n ) member => member( member_n+1 : )
3653 p%HEAT%H_SUF_surf (id) = load_type(i)
3654 p%HEAT%H_SUF_val (id,1) = value(i)
3655 p%HEAT%H_SUF_val (id,2) = shink(i)
3656 p%HEAT%H_SUF_ampl (id,1) = amp_id1
3657 p%HEAT%H_SUF_ampl (id,2) = amp_id2
3662 deallocate( grp_id_name )
3663 deallocate( load_type )
3676 integer(kind=kint) :: ctrl
3677 integer(kind=kint) :: counter
3680 integer(kind=kint) :: rcode
3681 character(HECMW_NAME_LEN) :: amp1, amp2
3682 integer(kind=kint) :: amp_id1, amp_id2
3683 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
3684 real(kind=kreal),
pointer :: value(:)
3685 real(kind=kreal),
pointer :: shink(:)
3686 integer(kind=kint) :: i, j, n, m, head, id, member_n, old_size, new_size
3687 integer(kind=kint),
pointer :: member1(:), member2(:)
3693 allocate( grp_id_name(n))
3700 grp_id_name, hecmw_name_len,
value, shink )
3712 deallocate( grp_id_name )
3719 old_size = p%HEAT%H_SUF_tot
3720 new_size = old_size + m
3725 p%HEAT%H_SUF_tot = new_size
3728 member1 => p%HEAT%H_SUF_elem(head:)
3729 member2 => p%HEAT%H_SUF_surf(head:)
3732 member_n =
get_grp_member( p%MESH,
'surf_grp', grp_id_name(i), member1, member2 )
3734 member1 => member1( member_n+1 : )
3735 member2 => member2( member_n+1 : )
3738 p%HEAT%H_SUF_val (id,1) = value(i)
3739 p%HEAT%H_SUF_val (id,2) = shink(i)
3740 p%HEAT%H_SUF_ampl (id,1) = amp_id1
3741 p%HEAT%H_SUF_ampl (id,2) = amp_id2
3746 deallocate( grp_id_name )
3759 integer(kind=kint) :: ctrl
3760 integer(kind=kint) :: counter
3763 integer(kind=kint) :: rcode
3764 character(HECMW_NAME_LEN) :: amp1, amp2
3765 integer(kind=kint) :: amp_id1, amp_id2
3766 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
3767 integer(kind=kint),
pointer :: load_type(:)
3768 real(kind=kreal),
pointer :: value(:)
3769 real(kind=kreal),
pointer :: shink(:)
3770 integer(kind=kint) :: i, j, n, m, head, id, member_n, old_size, new_size
3771 integer(kind=kint),
pointer :: member(:)
3772 integer(kind=kint) :: local_id, rtc
3778 allocate( grp_id_name(n))
3779 allocate( load_type(n))
3786 grp_id_name, hecmw_name_len, load_type,
value, shink )
3797 else if( rtc < 0 )
then
3803 deallocate( grp_id_name )
3804 deallocate( load_type )
3811 old_size = p%HEAT%R_SUF_tot
3812 new_size = old_size + m
3817 p%HEAT%R_SUF_tot = new_size
3820 member => p%HEAT%R_SUF_elem(head:)
3825 member(1) = local_id
3827 else if( rtc < 0 )
then
3828 member_n =
get_grp_member( p%MESH,
'elem_grp', grp_id_name(i), member )
3832 if( i<n ) member => member( member_n+1 : )
3834 p%HEAT%R_SUF_surf (id) = load_type(i)
3835 p%HEAT%R_SUF_val (id,1) = value(i)
3836 p%HEAT%R_SUF_val (id,2) = shink(i)
3837 p%HEAT%R_SUF_ampl (id,1) = amp_id1
3838 p%HEAT%R_SUF_ampl (id,2) = amp_id2
3843 deallocate( grp_id_name )
3844 deallocate( load_type )
3857 integer(kind=kint) :: ctrl
3858 integer(kind=kint) :: counter
3861 integer(kind=kint) :: rcode
3862 character(HECMW_NAME_LEN) :: amp1, amp2
3863 integer(kind=kint) :: amp_id1, amp_id2
3864 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
3865 real(kind=kreal),
pointer :: value(:)
3866 real(kind=kreal),
pointer :: shink(:)
3867 integer(kind=kint) :: i, j, n, m, head, id, member_n, old_size, new_size
3868 integer(kind=kint),
pointer :: member1(:), member2(:)
3874 allocate( grp_id_name(n))
3892 deallocate( grp_id_name )
3899 old_size = p%HEAT%R_SUF_tot
3900 new_size = old_size + m
3905 p%HEAT%R_SUF_tot = new_size
3908 member1 => p%HEAT%R_SUF_elem(head:)
3909 member2 => p%HEAT%R_SUF_surf(head:)
3912 member_n =
get_grp_member( p%MESH,
'surf_grp', grp_id_name(i), member1, member2 )
3914 member1 => member1( member_n+1 : )
3915 member2 => member2( member_n+1 : )
3918 p%HEAT%R_SUF_val (id,1) = value(i)
3919 p%HEAT%R_SUF_val (id,2) = shink(i)
3920 p%HEAT%R_SUF_ampl (id,1) = amp_id1
3921 p%HEAT%R_SUF_ampl (id,2) = amp_id2
3926 deallocate( grp_id_name )
3942 integer(kind=kint) :: ctrl
3943 integer(kind=kint) :: counter
3946 integer(kind=kint) :: rcode
3948 rcode =
fstr_ctrl_get_eigen( ctrl, p%EIGEN%nget, p%EIGEN%tolerance, p%EIGEN%maxiter, p%EIGEN%sigma)
3964 integer(kind=kint) :: ctrl
3965 integer(kind=kint) :: counter
3967 integer(kind=kint) :: rcode
3968 character(HECMW_NAME_LEN) :: grp_id_name(1)
3969 integer(kind=kint) :: grp_id(1)
3986 grp_id_name(1), hecmw_name_len, &
3992 if (p%DYN%idx_resp == 1)
then
3994 p%DYN%ngrp_monit = grp_id(1)
3996 read(grp_id_name,*) p%DYN%ngrp_monit
4008 integer(kind=kint) :: ctrl
4009 integer(kind=kint) :: counter
4012 integer(kind=kint) :: rcode
4013 integer(kind=kint) :: vType
4014 character(HECMW_NAME_LEN) :: amp
4015 integer(kind=kint) :: amp_id
4016 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
4017 integer(kind=kint),
pointer :: dof_ids (:)
4018 integer(kind=kint),
pointer :: dof_ide (:)
4019 real(kind=kreal),
pointer :: val_ptr(:)
4020 integer(kind=kint) :: i, j, n, old_size, new_size
4021 integer(kind=kint) :: gid
4028 old_size = p%SOLID%VELOCITY_ngrp_tot
4029 new_size = old_size + n
4030 p%SOLID%VELOCITY_ngrp_tot = new_size
4038 allocate( grp_id_name(n))
4039 allocate( dof_ids(n))
4040 allocate( dof_ide(n))
4041 allocate( val_ptr(n) )
4046 grp_id_name, hecmw_name_len, &
4047 dof_ids, dof_ide, val_ptr )
4049 p%SOLID%VELOCITY_type = vtype
4050 if( vtype ==
kbcinitial ) p%DYN%VarInitialize = .true.
4053 n, grp_id_name, p%SOLID%VELOCITY_ngrp_ID(old_size+1:))
4054 p%SOLID%VELOCITY_ngrp_GRPID(old_size+1:new_size) = gid
4058 if( (dof_ids(i) < 1).or.(6 < dof_ids(i)).or.(dof_ide(i) < 1).or.(6 < dof_ide(i)) )
then
4059 write(
ilog,*)
'fstr control file error : !VELOCITY : range of dof_ids and dof_ide is from 1 to 6'
4062 p%SOLID%VELOCITY_ngrp_type(j) = 10 * dof_ids(i) + dof_ide(i)
4063 p%SOLID%VELOCITY_ngrp_amp(j) = amp_id
4064 p%SOLID%VELOCITY_ngrp_val(old_size+i) = val_ptr(i)
4068 deallocate( grp_id_name )
4069 deallocate( dof_ids )
4070 deallocate( dof_ide )
4071 deallocate( val_ptr )
4072 nullify( grp_id_name )
4086 integer(kind=kint) :: ctrl
4087 integer(kind=kint) :: counter
4090 integer(kind=kint) :: rcode
4091 integer(kind=kint) :: aType
4092 character(HECMW_NAME_LEN) :: amp
4093 integer(kind=kint) :: amp_id
4094 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
4095 integer(kind=kint),
pointer :: dof_ids (:)
4096 integer(kind=kint),
pointer :: dof_ide (:)
4097 real(kind=kreal),
pointer :: val_ptr(:)
4098 integer(kind=kint) :: i, j, n, old_size, new_size
4099 integer(kind=kint) :: gid
4106 old_size = p%SOLID%ACCELERATION_ngrp_tot
4107 new_size = old_size + n
4108 p%SOLID%ACCELERATION_ngrp_tot = new_size
4116 allocate( grp_id_name(n))
4117 allocate( dof_ids(n))
4118 allocate( dof_ide(n))
4119 allocate( val_ptr(n))
4124 grp_id_name, hecmw_name_len, &
4125 dof_ids, dof_ide, val_ptr)
4127 p%SOLID%ACCELERATION_type = atype
4128 if( atype ==
kbcinitial )p%DYN%VarInitialize = .true.
4131 n, grp_id_name, p%SOLID%ACCELERATION_ngrp_ID(old_size+1:))
4132 p%SOLID%ACCELERATION_ngrp_GRPID(old_size+1:new_size) = gid
4136 if( (dof_ids(i) < 1).or.(6 < dof_ids(i)).or.(dof_ide(i) < 1).or.(6 < dof_ide(i)) )
then
4137 write(
ilog,*)
'fstr control file error : !ACCELERATION : range of dof_ids and dof_ide is from 1 to 6'
4140 p%SOLID%ACCELERATION_ngrp_type(j) = 10 * dof_ids(i) + dof_ide(i)
4141 p%SOLID%ACCELERATION_ngrp_amp(j) = amp_id
4142 p%SOLID%ACCELERATION_ngrp_val(old_size+i) = val_ptr(i)
4146 deallocate( grp_id_name )
4147 deallocate( dof_ids )
4148 deallocate( dof_ide )
4149 deallocate( val_ptr )
4150 nullify( grp_id_name )
4167 integer(kind=kint) :: ctrl
4168 integer(kind=kint) :: counter
4171 integer(kind=kint) :: rcode
4217 integer(kind=kint) :: ctrl
4218 type (hecmwST_local_mesh) :: hecMESH
4219 type (fstr_solid ) :: fstrSOLID
4220 write(
ilog,*)
'### Error : In !BOUNDARY, TYPE=NASTRAN is not supported.'
4221 call hecmw_abort( hecmw_comm_get_comm())
4230 integer(kind=kint) :: ctrl
4234 integer(kind=kint) :: rcode
4248 integer(kind=kint) :: ctrl
4251 integer(kind=kint) :: rcode, nid
4252 character(len=HECMW_NAME_LEN) :: data_fmt
4254 data_fmt =
'SOLUTION,MATERIAL '
4267 type(hecmwst_local_mesh),
pointer :: hecMESH
4268 integer(kind=kint) :: n, i, sgrp_id, ngrp_id, ngrp_id2
4270 n = hecmesh%contact_pair%n_pair
4272 if( hecmesh%contact_pair%type(i) /= hecmw_contact_type_surf_surf ) cycle
4273 sgrp_id = hecmesh%contact_pair%slave_grp_id(i)
4276 hecmesh%contact_pair%type(i) = hecmw_contact_type_node_surf
4277 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_element_activation(ctrl, amp, eps, grp_id_name, mode, measure, state, thlow, thup)
Read in !ELEMENT_ACTIVATION.
integer(kind=kint) function fstr_ctrl_get_contactparam(ctrl, contactparam)
Read in !CONTACT_PARAM !
integer(kind=kint) function fstr_ctrl_get_solution(ctrl, type, nlgeom)
Read in !SOLUTION.
integer(kind=kint) function fstr_ctrl_get_contactalgo(ctrl, algo, augiter)
Read in !CONTACT.
integer(kind=kint) function fstr_ctrl_get_contact_if(ctrl, n, contact_if)
Read in contact interference.
integer(kind=kint) function fstr_ctrl_get_couple(ctrl, fg_type, fg_first, fg_window, surf_id, surf_id_len)
Read in !COUPLE.
integer(kind=kint) function fstr_get_autoinc(ctrl, aincparam)
Read in !AUTOINC_PARAM !
integer(kind=kint) function fstr_ctrl_get_amplitude(ctrl, nline, name, type_def, type_time, type_val, n, val, table)
Read in !AMPLITUDE.
logical function fstr_ctrl_get_outitem(ctrl, hecMESH, outinfo)
Read in !OUTPUT_RES & !OUTPUT_VIS.
integer(kind=kint) function fstr_ctrl_get_elemopt(ctrl, elemopt361)
Read in !ELEMOPT.
integer(kind=kint) function fstr_ctrl_get_timepoints(ctrl, tp)
Read in !TIME_POINTS.
integer(kind=kint) function fstr_ctrl_get_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)
Read in !SOLVER.
integer(kind=kint) function fstr_ctrl_get_echo(ctrl, echo)
Read in !ECHO.
logical function fstr_ctrl_get_contact(ctrl, n, contact, np, tp, ntol, ttol, ctAlgo, cpname, smoothing)
Read in contact definition.
integer(kind=kint) function fstr_ctrl_get_nonlinear_solver(ctrl, method)
Read in !NONLINEAR_SOLVER.
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 !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_spring(ctrl, amp, node_id, node_id_len, dof_id, value)
Read in !SPRING.
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_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.
integer(kind=kint) function get_grp_member_n(hecMESH, grp_type_name, name)
subroutine fstr_ctrl_err_stop
subroutine node_grp_name_to_id_ex(hecMESH, header_name, n, grp_id_name, grp_ID)
subroutine surf_grp_name_to_id_ex(hecMESH, header_name, n, grp_id_name, grp_ID)
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 fstr_expand_real_array2(array, column, old_size, new_size)
integer(kind=kint) function get_grp_member(hecMESH, grp_type_name, name, member1, member2)
subroutine fstr_expand_integer_array(array, old_size, new_size)
subroutine fstr_expand_real_array(array, old_size, new_size)
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)
integer(kind=kint) function node_global_to_local(hecMESH, list, n)
subroutine elem_grp_name_to_id_ex(hecMESH, header_name, n, grp_id_name, grp_ID)
subroutine fstr_strupr(s)
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)
subroutine fstr_expand_integer_array2(array, column, old_size, new_size)
logical function fstr_streqr(s1, s2)
Shared predicates for finite-rotation nodal kinematics.
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
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
logical paracontactflag
PARALLEL CONTACT FLAG.
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_thick
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)
Number of through-thickness quadrature points used by shell stiffness.
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.