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 ) )
330 if( c_istep>0 )
allocate( fstrsolid%step_ctrl( c_istep ) )
331 if( c_localcoord>0 )
allocate( g_localcoordsys(c_localcoord) )
332 allocate( fstrparam%ainc(0:c_aincparam) )
336 if( c_timepoints>0 )
allocate( fstrparam%timepoints(c_timepoints) )
337 allocate( fstrparam%contactparam(0:c_contactparam) )
338 do i=0,c_contactparam
341 if( c_contact_if>0 )
then
342 allocate( fstrparam%contact_if( c_contact_if ) )
348 p%SOLID%is_33shell = 0
349 p%SOLID%is_33beam = 0
351 do i=1,hecmesh%n_elem_type
352 n = hecmesh%elem_type_item(i)
353 if (n == 781 .or. n == 761)
then
354 p%SOLID%is_33shell = 1
355 elseif (n == 641)
then
356 p%SOLID%is_33beam = 1
361 if( hecmesh%material%n_mat>n ) n= hecmesh%material%n_mat
362 if( n==0 ) stop
"material property not defined!"
363 allocate( fstrsolid%materials( n ) )
367 if( hecmesh%section%n_sect >0 )
then
368 do i=1,hecmesh%section%n_sect
369 if( hecmesh%section%sect_type(i) == 4 ) cycle
370 cid = hecmesh%section%sect_mat_ID_item(i)
371 if( cid>n ) stop
"Error in material property definition!"
372 if( fstrparam%nlgeom .or. fstrparam%solution_type==
kststaticeigen ) &
373 fstrsolid%materials(cid)%nlgeom_flag = 1
376 n_totlyr,alpha_over_mu, &
377 beam_radius,beam_angle1,beam_angle2,beam_angle3, &
378 beam_angle4,beam_angle5,beam_angle6)
379 fstrsolid%materials(cid)%name = hecmesh%material%mat_name(cid)
380 fstrsolid%materials(cid)%variables(
m_youngs)=ee
381 fstrsolid%materials(cid)%variables(
m_poisson)=pp
382 fstrsolid%materials(cid)%variables(
m_density)=rho
383 fstrsolid%materials(cid)%variables(
m_exapnsion)=alpha
384 fstrsolid%materials(cid)%variables(
m_thick)=thick
386 fstrsolid%materials(cid)%variables(
m_beam_radius)=beam_radius
387 fstrsolid%materials(cid)%variables(
m_beam_angle1)=beam_angle1
388 fstrsolid%materials(cid)%variables(
m_beam_angle2)=beam_angle2
389 fstrsolid%materials(cid)%variables(
m_beam_angle3)=beam_angle3
390 fstrsolid%materials(cid)%variables(
m_beam_angle4)=beam_angle4
391 fstrsolid%materials(cid)%variables(
m_beam_angle5)=beam_angle5
392 fstrsolid%materials(cid)%variables(
m_beam_angle6)=beam_angle6
393 fstrsolid%materials(cid)%mtype =
elastic
394 fstrsolid%materials(cid)%totallyr = n_totlyr
395 fstrsolid%materials(cid)%shell_var => shmat
400 allocate( fstrsolid%sections(hecmesh%section%n_sect) )
401 do i=1,hecmesh%section%n_sect
404 if( p%PARAM%nlgeom )
then
407 fstrsolid%sections(i)%elemopt361 =
kel361ic
409 else if( p%PARAM%solution_type==
ksteigen )
then
410 fstrsolid%sections(i)%elemopt361 =
kel361ic
414 fstrsolid%sections(i)%elemopt361 =
kel361fi
416 fstrsolid%sections(i)%elemopt341 =
kel341fi
419 allocate( fstrsolid%output_ctrl( 4 ) )
421 fstrsolid%output_ctrl( 1 )%filename = trim(logfilename)
422 fstrsolid%output_ctrl( 1 )%filenum =
ilog
445 fstrsolid%elemopt361 = 0
446 fstrsolid%AutoINC_stat = 0
447 fstrsolid%CutBack_stat = 0
448 fstrsolid%NRstat_i(:) = 0
449 fstrsolid%NRstat_r(:) = 0.d0
454 if( header_name ==
'!ORIENTATION' )
then
455 c_localcoord = c_localcoord + 1
457 write(*,*)
'### Error: Fail in read in ORIENTATION definition : ', c_localcoord
458 write(
ilog,*)
'### Error: Fail in read in ORIENTATION definition : ', c_localcoord
463 elseif( header_name ==
'!CONTACT' )
then
466 ,ee, pp, rho, alpha, p%PARAM%contact_algo, mname ) )
then
467 write(*,*)
'### Error: Fail in read in contact condition : ', c_contact
468 write(
ilog,*)
'### Error: Fail in read in contact condition : ', c_contact
472 do i=1,
size(fstrparam%contactparam)-1
473 if(
fstr_streqr( fstrparam%contactparam(i)%name, mname ) )
then
478 if( ee>0.d0 )
cdotp = ee
479 if( pp>0.d0 )
mut = pp
480 if( rho>0.d0 )
cgn = rho
481 if( alpha>0.d0 )
cgt = alpha
483 if( .not. fstr_contact_check( fstrsolid%contacts(c_contact+i), p%MESH ) )
then
484 write(*,*)
'### Error: Inconsistence in contact and surface definition : ' , i+c_contact
485 write(
ilog,*)
'### Error: Inconsistence in contact and surface definition : ', i+c_contact
489 isok = fstr_contact_init( fstrsolid%contacts(c_contact+i), p%MESH, fstrparam%contactparam(cparam_id),
myrank)
491 isok = fstr_contact_init( fstrsolid%contacts(c_contact+i), p%MESH, fstrparam%contactparam(cparam_id))
496 c_contact = c_contact+n
499 elseif( header_name ==
'!EMBED' )
then
501 if( .not.
fstr_ctrl_get_embed( ctrl, n, fstrsolid%embeds(c_embed+1:c_embed+n), mname ) )
then
502 write(*,*)
'### Error: Fail in read in embed condition : ', c_embed
503 write(
ilog,*)
'### Error: Fail in read in embed condition : ', c_embed
507 do i=1,
size(fstrparam%contactparam)-1
508 if(
fstr_streqr( fstrparam%contactparam(i)%name, mname ) )
then
513 if( .not. fstr_contact_check( fstrsolid%embeds(c_embed+i), p%MESH ) )
then
514 write(*,*)
'### Error: Inconsistence in contact and surface definition : ' , i+c_embed
515 write(
ilog,*)
'### Error: Inconsistence in contact and surface definition : ', i+c_embed
519 isok = fstr_embed_init( fstrsolid%embeds(c_embed+i), p%MESH, fstrparam%contactparam(cparam_id),
myrank)
521 isok = fstr_embed_init( fstrsolid%embeds(c_embed+i), p%MESH, fstrparam%contactparam(cparam_id))
527 else if( header_name ==
'!ISTEP' )
then
529 if( .not.
fstr_ctrl_get_istep( ctrl, hecmesh, fstrsolid%step_ctrl(c_istep), mname, mname2 ) )
then
530 write(*,*)
'### Error: Fail in read in step definition : ' , c_istep
531 write(
ilog,*)
'### Error: Fail in read in step definition : ', c_istep
534 if(
associated(fstrparam%timepoints) )
then
535 do i=1,
size(fstrparam%timepoints)
536 if(
fstr_streqr( fstrparam%timepoints(i)%name, mname ) )
then
537 fstrsolid%step_ctrl(c_istep)%timepoint_id = i;
exit
541 if(
associated(fstrparam%ainc) )
then
542 do i=1,
size(fstrparam%ainc)
543 if(
fstr_streqr( fstrparam%ainc(i)%name, mname2 ) )
then
544 fstrsolid%step_ctrl(c_istep)%AincParam_id = i;
exit
548 else if( header_name ==
'!STEP' .and. version>=1 )
then
550 if( .not.
fstr_ctrl_get_istep( ctrl, hecmesh, fstrsolid%step_ctrl(c_istep), mname, mname2 ) )
then
551 write(*,*)
'### Error: Fail in read in step definition : ' , c_istep
552 write(
ilog,*)
'### Error: Fail in read in step definition : ', c_istep
555 if(
associated(fstrparam%timepoints) )
then
556 do i=1,
size(fstrparam%timepoints)
557 if(
fstr_streqr( fstrparam%timepoints(i)%name, mname ) )
then
558 fstrsolid%step_ctrl(c_istep)%timepoint_id = i;
exit
562 if(
associated(fstrparam%ainc) )
then
563 do i=1,
size(fstrparam%ainc)-1
564 if(
fstr_streqr( fstrparam%ainc(i)%name, mname2 ) )
then
565 fstrsolid%step_ctrl(c_istep)%AincParam_id = i;
exit
570 else if( header_name ==
'!HEAT' )
then
574 else if( header_name ==
'!WELD_LINE' )
then
575 fstrheat%WL_tot = fstrheat%WL_tot+1
577 write(*,*)
'### Error: Fail in read in Weld Line definition : ' , fstrheat%WL_tot
578 write(
ilog,*)
'### Error: Fail in read in Weld Line definition : ', fstrheat%WL_tot
582 else if( header_name ==
'!INITIAL_CONDITION' .or. header_name ==
'!INITIAL CONDITION' )
then
583 c_initial = c_initial+1
585 write(*,*)
'### Error: Fail in read in INITIAL CONDITION definition : ' ,c_initial
586 write(
ilog,*)
'### Error: Fail in read in INITIAL CONDITION definition : ', c_initial
590 else if( header_name ==
'!SECTION' )
then
591 c_section = c_section+1
593 write(*,*)
'### Error: Fail in read in SECTION definition : ' , c_section
594 write(
ilog,*)
'### Error: Fail in read in SECTION definition : ', c_section
598 else if( header_name ==
'!ELEMOPT' )
then
599 c_elemopt = c_elemopt+1
601 write(*,*)
'### Error: Fail in read in ELEMOPT definition : ' , c_elemopt
602 write(
ilog,*)
'### Error: Fail in read in ELEMOPT definition : ', c_elemopt
607 else if( header_name ==
'!MATERIAL' )
then
608 c_material = c_material+1
610 write(*,*)
'### Error: Fail in read in material definition : ' , c_material
611 write(
ilog,*)
'### Error: Fail in read in material definition : ', c_material
615 if(cache < hecmesh%material%n_mat)
then
616 if(
fstr_streqr( hecmesh%material%mat_name(cache), mname ))
then
622 do i=1,hecmesh%material%n_mat
623 if(
fstr_streqr( hecmesh%material%mat_name(i), mname ) )
then
631 write(*,*)
'### Error: Fail in read in material definition : ' , c_material
632 write(
ilog,*)
'### Error: Fail in read in material definition : ', c_material
635 fstrsolid%materials(cid)%name = mname
636 if(c_material>hecmesh%material%n_mat)
call initmaterial( fstrsolid%materials(cid) )
638 else if( header_name ==
'!ELASTIC' )
then
639 if( c_material >0 )
then
641 fstrsolid%materials(cid)%mtype, &
642 fstrsolid%materials(cid)%nlgeom_flag, &
643 fstrsolid%materials(cid)%variables, &
644 fstrsolid%materials(cid)%dict)/=0 )
then
645 write(*,*)
'### Error: Fail in read in elasticity definition : ' , cid
646 write(
ilog,*)
'### Error: Fail in read in elasticity definition : ', cid
650 else if( header_name ==
'!PLASTIC' )
then
653 fstrsolid%materials(cid)%mtype, &
654 fstrsolid%materials(cid)%nlgeom_flag, &
655 fstrsolid%materials(cid)%variables, &
656 fstrsolid%materials(cid)%table, &
657 fstrsolid%materials(cid)%dict)/=0 )
then
658 write(*,*)
'### Error: Fail in read in plasticity definition : ' , cid
659 write(
ilog,*)
'### Error: Fail in read in plasticity definition : ', cid
663 else if( header_name ==
'!HYPERELASTIC' )
then
666 fstrsolid%materials(cid)%mtype, &
667 fstrsolid%materials(cid)%nlgeom_flag, &
668 fstrsolid%materials(cid)%variables )/=0 )
then
669 write(*,*)
'### Error: Fail in read in elasticity definition : ' , cid
670 write(
ilog,*)
'### Error: Fail in read in elasticity definition : ', cid
674 else if( header_name ==
'!VISCOELASTIC' )
then
677 fstrsolid%materials(cid)%mtype, &
678 fstrsolid%materials(cid)%nlgeom_flag, &
679 fstrsolid%materials(cid)%dict)/=0 )
then
680 write(*,*)
'### Error: Fail in read in plasticity definition : ' , cid
681 write(
ilog,*)
'### Error: Fail in read in plasticity definition : ', cid
685 else if( header_name ==
'!TRS' )
then
688 write(*,*)
'### WARNING: TRS can only be defined for viscoelastic material! It is ignored! '
689 write(
ilog,*)
'### WARNING: TRS can only be defined for viscoelastic material! It is ignored! '
691 if(
fstr_ctrl_get_trs( ctrl, fstrsolid%materials(cid)%mtype, fstrsolid%materials(cid)%variables)/=0 )
then
692 write(*,*)
'### Error: Fail in read in TRS definition : ' , cid
693 write(
ilog,*)
'### Error: Fail in read in TRS definition : ', cid
698 else if( header_name ==
'!CREEP' )
then
701 fstrsolid%materials(cid)%mtype, &
702 fstrsolid%materials(cid)%nlgeom_flag, &
703 fstrsolid%materials(cid)%dict)/=0 )
then
704 write(*,*)
'### Error: Fail in read in plasticity definition : ' , cid
705 write(
ilog,*)
'### Error: Fail in read in plasticity definition : ', cid
709 else if( header_name ==
'!DENSITY' )
then
712 write(*,*)
'### Error: Fail in read in density definition : ' , cid
713 write(
ilog,*)
'### Error: Fail in read in density definition : ', cid
717 else if( header_name ==
'!EXPANSION_COEF' .or. header_name ==
'!EXPANSION_COEFF' .or. &
718 header_name ==
'!EXPANSION')
then
721 fstrsolid%materials(cid)%dict)/=0 )
then
722 write(*,*)
'### Error: Fail in read in expansion coefficient definition : ' , cid
723 write(
ilog,*)
'### Error: Fail in read in expansion coefficient definition : ', cid
727 else if( header_name ==
'!FLUID' )
then
728 if( c_material >0 )
then
730 fstrsolid%materials(cid)%mtype, &
731 fstrsolid%materials(cid)%nlgeom_flag, &
732 fstrsolid%materials(cid)%variables, &
733 fstrsolid%materials(cid)%dict)/=0 )
then
734 write(*,*)
'### Error: Fail in read in fluid definition : ' , cid
735 write(
ilog,*)
'### Error: Fail in read in fluid definition : ', cid
739 else if( header_name ==
'!SPRING_D' )
then
740 if( c_material >0 )
then
742 fstrsolid%materials(cid)%mtype, &
743 fstrsolid%materials(cid)%nlgeom_flag, &
744 fstrsolid%materials(cid)%variables_i, &
745 fstrsolid%materials(cid)%dict)/=0 )
then
746 write(*,*)
'### Error: Fail in read in spring_d definition : ' , cid
747 write(
ilog,*)
'### Error: Fail in read in spring_d definition : ', cid
751 else if( header_name ==
'!SPRING_A' )
then
752 if( c_material >0 )
then
754 fstrsolid%materials(cid)%mtype, &
755 fstrsolid%materials(cid)%nlgeom_flag, &
756 fstrsolid%materials(cid)%variables_i, &
757 fstrsolid%materials(cid)%dict)/=0 )
then
758 write(*,*)
'### Error: Fail in read in spring_a definition : ' , cid
759 write(
ilog,*)
'### Error: Fail in read in spring_a definition : ', cid
763 else if( header_name ==
'!DASHPOT_D' )
then
764 if( c_material >0 )
then
766 fstrsolid%materials(cid)%mtype, &
767 fstrsolid%materials(cid)%nlgeom_flag, &
768 fstrsolid%materials(cid)%variables_i, &
769 fstrsolid%materials(cid)%dict)/=0 )
then
770 write(*,*)
'### Error: Fail in read in spring_d definition : ' , cid
771 write(
ilog,*)
'### Error: Fail in read in spring_d definition : ', cid
775 else if( header_name ==
'!DASHPOT_A' )
then
776 if( c_material >0 )
then
778 fstrsolid%materials(cid)%mtype, &
779 fstrsolid%materials(cid)%nlgeom_flag, &
780 fstrsolid%materials(cid)%variables_i, &
781 fstrsolid%materials(cid)%dict)/=0 )
then
782 write(*,*)
'### Error: Fail in read in spring_a definition : ' , cid
783 write(
ilog,*)
'### Error: Fail in read in spring_a definition : ', cid
787 else if( header_name ==
'!USER_MATERIAL' )
then
790 fstrsolid%materials(cid)%nlgeom_flag, fstrsolid%materials(cid)%nfstatus, &
791 fstrsolid%materials(cid)%variables(101:) )/=0 )
then
792 write(*,*)
'### Error: Fail in read in user defined material : ' , cid
793 write(
ilog,*)
'### Error: Fail in read in user defined material : ', cid
800 else if( header_name ==
'!WRITE' )
then
802 if( islog == 1 )
then
804 outctrl%filename = trim(logfilename)
805 outctrl%filenum =
ilog
808 if( femap == 1 )
then
810 write( outctrl%filename, *)
'utable.',
myrank,
".dat"
811 outctrl%filenum =
iutb
813 open( unit=outctrl%filenum, file=outctrl%filename, status=
'REPLACE' )
815 if( result == 1 )
then
819 if( visual == 1 )
then
824 else if( header_name ==
'!OUTPUT_RES' )
then
827 write(*,*)
'### Error: Fail in read in node output definition : ' , c_output
828 write(
ilog,*)
'### Error: Fail in read in node output definition : ', c_output
831 if( fstrsolid%output_ctrl(c_output)%outinfo%grp_id_name /=
'ALL' )
then
833 do i=1,hecmesh%node_group%n_grp
834 if( fstrsolid%output_ctrl(c_output)%outinfo%grp_id_name == hecmesh%node_group%grp_name(i) )
then
835 fstrsolid%output_ctrl(c_output)%outinfo%grp_id = i;
exit
839 else if( header_name ==
'!OUTPUT_VIS' )
then
842 write(*,*)
'### Error: Fail in read in element output definition : ' , c_output
843 write(
ilog,*)
'### Error: Fail in read in element output definition : ', c_output
846 if( fstrsolid%output_ctrl(c_output)%outinfo%grp_id_name /=
'ALL' )
then
848 do i=1,hecmesh%node_group%n_grp
849 if( fstrsolid%output_ctrl(c_output)%outinfo%grp_id_name == hecmesh%node_group%grp_name(i) )
then
850 fstrsolid%output_ctrl(c_output)%outinfo%grp_id = i;
exit
854 else if( header_name ==
'!AUTOINC_PARAM' )
then
855 c_aincparam = c_aincparam + 1
857 write(*,*)
'### Error: Fail in read in AUTOINC_PARAM definition : ' , c_aincparam
858 write(
ilog,*)
'### Error: Fail in read in AUTOINC_PARAM definition : ', c_aincparam
861 else if( header_name ==
'!TIME_POINTS' )
then
862 c_timepoints = c_timepoints + 1
864 write(*,*)
'### Error: Fail in read in TIME_POINTS definition : ' , c_timepoints
865 write(
ilog,*)
'### Error: Fail in read in TIME_POINTS definition : ', c_timepoints
868 else if( header_name ==
'!CONTACT_PARAM' )
then
869 c_contactparam = c_contactparam + 1
871 write(*,*)
'### Error: Fail in read in CONTACT_PARAM definition : ' , c_contactparam
872 write(
ilog,*)
'### Error: Fail in read in CONTACT_PARAM definition : ', c_contactparam
875 else if( header_name ==
'!CONTACT_INTERFERENCE' )
then
878 write(*,*)
'### Error: Fail in read in CONTACT_INTERFERENCE definition : ' , c_contact_if
879 write(
ilog,*)
'### Error: Fail in read in CONTACT_INTERFERENCE definition : ', c_contact_if
883 if( check_apply_contact_if(fstrparam%contact_if(c_contact_if+i), fstrsolid%contacts) /= 0)
then
884 write(*,*)
'### Error:(INTERFERENCE) Inconsistence of contact_pair in CONTACTS: ' , i+c_contact_if
885 write(
ilog,*)
'### Error:(INTERFERENCE) Inconsistence of contact_pair in CONTACTS: ', i+c_contact_if
889 c_contact_if = c_contact_if + n
890 else if( header_name ==
'!ULOAD' )
then
892 write(*,*)
'### Error: Fail in read in ULOAD definition : '
893 write(
ilog,*)
'### Error: Fail in read in ULOAD definition : '
897 else if( header_name ==
'!INCLUDE' )
then
898 ctrl_list(ictrl) = ctrl
903 write(*,*)
'### Error: Cannot open FSTR control file : ', input_filename
904 write(
ilog,*)
'### Error: Cannot open FSTR control file : ', input_filename
910 else if( header_name ==
'!END' )
then
921 ctrl = ctrl_list(ictrl)
929 if( .not. p%PARAM%nlgeom )
then
931 fstrsolid%materials(i)%nlgeom_flag = 0
935 if( fstrsolid%TEMP_ngrp_tot > 0 .or. fstrsolid%TEMP_irres > 0 )
then
936 allocate ( fstrsolid%temperature( hecmesh%n_node ) ,stat=ierror )
937 if( ierror /= 0 )
then
938 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, TEMPERATURE>'
939 write(
idbg,*)
' rank = ',
myrank,
' ierror = ',ierror
941 call hecmw_abort( hecmw_comm_get_comm())
944 allocate ( fstrsolid%last_temp( hecmesh%n_node ) ,stat=ierror )
945 if( ierror /= 0 )
then
946 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, LAST_TEMP>'
947 write(
idbg,*)
' rank = ',
myrank,
' ierror = ',ierror
949 call hecmw_abort( hecmw_comm_get_comm())
951 fstrsolid%last_temp = 0.d0
952 allocate ( fstrsolid%temp_bak( hecmesh%n_node ) ,stat=ierror )
953 if( ierror /= 0 )
then
954 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, TEMP_BAK>'
955 write(
idbg,*)
' rank = ',
myrank,
' ierror = ',ierror
957 call hecmw_abort( hecmw_comm_get_comm())
959 fstrsolid%temp_bak = 0.d0
962 if(
associated(fstrsolid%step_ctrl) )
then
963 fstrsolid%nstep_tot =
size(fstrsolid%step_ctrl)
967 if( p%PARAM%solution_type==
kststatic .and. p%PARAM%nlgeom )
then
968 write( *,* )
" ERROR: STEP not defined!"
969 write(
idbg,* )
"ERROR: STEP not defined!"
971 call hecmw_abort( hecmw_comm_get_comm())
974 if(
myrank==0 )
write(*,*)
"Step control not defined! Using default step=1"
975 fstrsolid%nstep_tot = 1
976 allocate( fstrsolid%step_ctrl(1) )
978 n = fstrsolid%BOUNDARY_ngrp_tot
979 if( n>0 )
allocate( fstrsolid%step_ctrl(1)%Boundary(n) )
981 fstrsolid%step_ctrl(1)%Boundary(i) = fstrsolid%BOUNDARY_ngrp_GRPID(i)
983 n = fstrsolid%CLOAD_ngrp_tot + fstrsolid%DLOAD_ngrp_tot + fstrsolid%TEMP_ngrp_tot + fstrsolid%SPRING_ngrp_tot
984 if( n>0 )
allocate( fstrsolid%step_ctrl(1)%Load(n) )
986 do i = 1, fstrsolid%CLOAD_ngrp_tot
988 fstrsolid%step_ctrl(1)%Load(n) = fstrsolid%CLOAD_ngrp_GRPID(i)
990 do i = 1, fstrsolid%DLOAD_ngrp_tot
992 fstrsolid%step_ctrl(1)%Load(n) = fstrsolid%DLOAD_ngrp_GRPID(i)
994 do i = 1, fstrsolid%TEMP_ngrp_tot
996 fstrsolid%step_ctrl(1)%Load(n) = fstrsolid%TEMP_ngrp_GRPID(i)
998 do i = 1, fstrsolid%SPRING_ngrp_tot
1000 fstrsolid%step_ctrl(1)%Load(n) = fstrsolid%SPRING_ngrp_GRPID(i)
1002 n = fstrsolid%elemact%ELEMACT_egrp_tot
1003 if( n>0 )
allocate( fstrsolid%step_ctrl(1)%ElemActivation(n) )
1005 fstrsolid%step_ctrl(1)%ElemActivation(i) = fstrsolid%elemact%ELEMACT_egrp_GRPID(i)
1014 if( p%PARAM%solution_type ==
kstheat)
then
1015 p%PARAM%fg_irres = fstrsolid%output_ctrl(3)%frequency
1016 p%PARAM%fg_iwres = fstrsolid%output_ctrl(4)%frequency
1017 p%HEAT%elemact = p%SOLID%elemact
1021 do i=1,hecmesh%section%n_sect
1022 cid = hecmesh%section%sect_mat_ID_item(i)
1023 n = fstrsolid%materials(cid)%totallyr
1024 if (n > n_totlyr)
then
1028 p%SOLID%max_lyr = n_totlyr
1039 type(hecmwst_local_mesh),
target :: hecMESH
1042 integer :: ndof, ntotal, ierror, ic_type
1046 fstrsolid%BOUNDARY_ngrp_tot = 0
1047 fstrsolid%BOUNDARY_ngrp_rot = 0
1048 fstrsolid%CLOAD_ngrp_tot = 0
1049 fstrsolid%CLOAD_ngrp_rot = 0
1050 fstrsolid%DLOAD_ngrp_tot = 0
1051 fstrsolid%DLOAD_follow = 1
1052 fstrsolid%TEMP_ngrp_tot = 0
1053 fstrsolid%SPRING_ngrp_tot = 0
1054 fstrsolid%TEMP_irres = 0
1055 fstrsolid%TEMP_tstep = 1
1056 fstrsolid%TEMP_interval = 1
1057 fstrsolid%TEMP_rtype = 1
1058 fstrsolid%TEMP_factor = 1.d0
1059 fstrsolid%VELOCITY_ngrp_tot = 0
1060 fstrsolid%ACCELERATION_ngrp_tot = 0
1061 fstrsolid%COUPLE_ngrp_tot = 0
1063 fstrsolid%restart_nout= 0
1064 fstrsolid%is_smoothing_active = .false.
1071 type(hecmwst_local_mesh),
target :: hecMESH
1074 integer :: ndof, ntotal, ierror, ic_type
1077 ntotal=ndof*hecmesh%n_node
1079 allocate ( fstrsolid%GL( ntotal ) ,stat=ierror )
1080 if( ierror /= 0 )
then
1081 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, GL>'
1082 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1084 call hecmw_abort( hecmw_comm_get_comm())
1086 allocate ( fstrsolid%GL0( ntotal ) ,stat=ierror )
1087 if( ierror /= 0 )
then
1088 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, GL0>'
1089 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1091 call hecmw_abort( hecmw_comm_get_comm())
1093 allocate ( fstrsolid%EFORCE( ntotal ) ,stat=ierror )
1094 if( ierror /= 0 )
then
1095 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, EFORCE>'
1096 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1098 call hecmw_abort( hecmw_comm_get_comm())
1107 allocate ( fstrsolid%unode( ntotal ) ,stat=ierror )
1108 if( ierror /= 0 )
then
1109 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, unode>'
1110 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1112 call hecmw_abort( hecmw_comm_get_comm())
1114 allocate ( fstrsolid%unode_bak( ntotal ) ,stat=ierror )
1115 if( ierror /= 0 )
then
1116 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, unode>'
1117 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1119 call hecmw_abort( hecmw_comm_get_comm())
1121 allocate ( fstrsolid%dunode( ntotal ) ,stat=ierror )
1122 if( ierror /= 0 )
then
1123 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, dunode>'
1124 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1126 call hecmw_abort( hecmw_comm_get_comm())
1128 allocate ( fstrsolid%ddunode( ntotal ) ,stat=ierror )
1129 if( ierror /= 0 )
then
1130 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, ddunode>'
1131 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1133 call hecmw_abort( hecmw_comm_get_comm())
1135 allocate ( fstrsolid%QFORCE( ntotal ) ,stat=ierror )
1136 if( ierror /= 0 )
then
1137 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, QFORCE>'
1138 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1140 call hecmw_abort( hecmw_comm_get_comm())
1142 allocate ( fstrsolid%QFORCE_bak( ntotal ) ,stat=ierror )
1143 if( ierror /= 0 )
then
1144 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, QFORCE_bak>'
1145 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1147 call hecmw_abort( hecmw_comm_get_comm())
1150 fstrsolid%GL(:)=0.d0
1151 fstrsolid%GL0(:)=0.d0
1153 fstrsolid%unode(:) = 0.d0
1154 fstrsolid%unode_bak(:) = 0.d0
1155 fstrsolid%dunode(:) = 0.d0
1156 fstrsolid%ddunode(:) = 0.d0
1157 fstrsolid%QFORCE(:) = 0.d0
1158 fstrsolid%QFORCE_bak(:) = 0.d0
1159 fstrsolid%FACTOR( 1:2 ) = 0.d0
1162 fstrsolid%n_fix_mpc = hecmesh%mpc%n_mpc
1163 if( fstrsolid%n_fix_mpc>0 )
then
1164 allocate( fstrsolid%mpc_const( fstrsolid%n_fix_mpc ) )
1165 fstrsolid%mpc_const(:) = hecmesh%mpc%mpc_const(:)
1169 fstrsolid%FACTOR(2)=1.d0
1170 fstrsolid%FACTOR(1)=0.d0
1174 type(hecmwst_local_mesh),
target :: hecMESH
1177 logical,
allocatable :: is_selem_list(:)
1180 do isect=1,hecmesh%section%n_sect
1181 if( fstrsolid%sections(isect)%elemopt341 ==
kel341sesns ) fstrsolid%is_smoothing_active = .true.
1183 if( .not. fstrsolid%is_smoothing_active )
return
1185 allocate(is_selem_list(hecmesh%n_elem))
1186 is_selem_list(:) = .false.
1188 do i=1,hecmesh%n_elem
1189 isect= hecmesh%section_ID(i)
1190 if( hecmesh%elem_type(i) /= fe_tet4n ) cycle
1191 if( fstrsolid%sections(isect)%elemopt341 ==
kel341sesns ) is_selem_list(i) = .true.
1194 call hecmw_create_smoothing_element_connectivity(hecmesh,is_selem_list)
1196 deallocate(is_selem_list)
1202 type(hecmwst_local_mesh),
target :: hecMESH
1205 integer :: i, isect, nodlocal(fstrSOLID%max_ncon), iiS, nn, con_stf
1207 if( fstrsolid%max_ncon_stf > 20 ) fstrsolid%max_ncon_stf = 20
1209 do i=1,hecmesh%n_elem
1210 isect= hecmesh%section_ID(i)
1211 if( hecmesh%elem_type(i) /= fe_tet4n ) cycle
1212 if( fstrsolid%sections(isect)%elemopt341 /=
kel341sesns ) cycle
1213 iis = hecmesh%elem_node_index(i-1)
1214 nn = hecmesh%elem_node_index(i-1) - iis
1215 nodlocal(1:nn) = hecmesh%elem_node_item(iis+1:iis+nn)
1217 if( con_stf > fstrsolid%max_ncon_stf ) fstrsolid%max_ncon_stf = con_stf
1226 type(hecmwst_local_mesh),
target :: hecMESH
1228 integer(kind=kint),
intent(in) :: solution_type
1230 integer :: i, j, ng, isect, ndof, id, nn, n_elem
1233 if( hecmesh%n_elem <=0 )
then
1234 stop
"no element defined!"
1237 fstrsolid%maxn_gauss = 0
1238 fstrsolid%max_ncon = 0
1244 n_elem = hecmesh%elem_type_index(hecmesh%n_elem_type)
1245 allocate( fstrsolid%elements(n_elem) )
1248 fstrsolid%elements(i)%elemact_flag = kelact_undefined
1249 if( solution_type ==
kstheat) cycle
1251 fstrsolid%elements(i)%etype = hecmesh%elem_type(i)
1252 if( hecmesh%elem_type(i)==301 ) fstrsolid%elements(i)%etype=111
1253 if (hecmw_is_etype_link(fstrsolid%elements(i)%etype)) cycle
1254 if (hecmw_is_etype_patch(fstrsolid%elements(i)%etype)) cycle
1256 if( ng > fstrsolid%maxn_gauss ) fstrsolid%maxn_gauss = ng
1257 if(ng>0)
allocate( fstrsolid%elements(i)%gausses( ng ) )
1259 isect= hecmesh%section_ID(i)
1262 id=hecmesh%section%sect_opt(isect)
1264 fstrsolid%elements(i)%iset=1
1265 else if( id==1)
then
1266 fstrsolid%elements(i)%iset=0
1267 else if( id==2)
then
1268 fstrsolid%elements(i)%iset=2
1272 if( isect<0 .or. isect>hecmesh%section%n_sect ) &
1273 stop
"Error in element's section definition"
1274 id = hecmesh%section%sect_mat_ID_item(isect)
1275 fstrsolid%materials(id)%cdsys_ID = hecmesh%section%sect_orien_ID(isect)
1277 fstrsolid%elements(i)%gausses(j)%pMaterial => fstrsolid%materials(id)
1281 nn = hecmesh%elem_node_index(i)-hecmesh%elem_node_index(i-1)
1282 allocate(fstrsolid%elements(i)%equiForces(nn*ndof))
1283 fstrsolid%elements(i)%equiForces = 0.0d0
1284 if( nn > fstrsolid%max_ncon ) fstrsolid%max_ncon = nn
1286 if( hecmesh%elem_type(i)==361 )
then
1287 if( fstrsolid%sections(isect)%elemopt361==
kel361ic )
then
1288 allocate( fstrsolid%elements(i)%aux(3,3) )
1289 fstrsolid%elements(i)%aux = 0.0d0
1295 fstrsolid%max_ncon_stf = fstrsolid%max_ncon
1298 call hecmw_allreduce_i1(hecmesh,fstrsolid%maxn_gauss,hecmw_max)
1304 integer :: i, j, ierror
1305 if(
associated(fstrsolid%materials) )
then
1306 do j=1,
size(fstrsolid%materials)
1307 call finalizematerial(fstrsolid%materials(j))
1309 deallocate( fstrsolid%materials )
1311 if( .not.
associated(fstrsolid%elements ) )
return
1312 do i=1,
size(fstrsolid%elements)
1313 if(
associated(fstrsolid%elements(i)%gausses) )
then
1314 do j=1,
size(fstrsolid%elements(i)%gausses)
1315 call fstr_finalize_gauss(fstrsolid%elements(i)%gausses(j))
1317 deallocate( fstrsolid%elements(i)%gausses )
1319 if(
associated(fstrsolid%elements(i)%equiForces) )
then
1320 deallocate(fstrsolid%elements(i)%equiForces)
1322 if(
associated(fstrsolid%elements(i)%aux) )
then
1323 deallocate(fstrsolid%elements(i)%aux)
1327 deallocate( fstrsolid%elements )
1328 if(
associated( fstrsolid%mpc_const ) )
then
1329 deallocate( fstrsolid%mpc_const )
1332 if(
associated(fstrsolid%step_ctrl) )
then
1333 do i=1,
size(fstrsolid%step_ctrl)
1336 deallocate( fstrsolid%step_ctrl )
1338 if(
associated(fstrsolid%output_ctrl) )
then
1339 do i=1,
size(fstrsolid%output_ctrl)
1340 if( fstrsolid%output_ctrl(i)%filenum==
iutb ) &
1341 close(fstrsolid%output_ctrl(i)%filenum)
1343 deallocate(fstrsolid%output_ctrl)
1345 if(
associated( fstrsolid%sections ) )
then
1346 deallocate( fstrsolid%sections )
1349 if(
associated(fstrsolid%GL) )
then
1350 deallocate(fstrsolid%GL ,stat=ierror)
1351 if( ierror /= 0 )
then
1352 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, GL>'
1354 call hecmw_abort( hecmw_comm_get_comm())
1357 if(
associated(fstrsolid%EFORCE) )
then
1358 deallocate(fstrsolid%EFORCE ,stat=ierror)
1359 if( ierror /= 0 )
then
1360 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, EFORCE>'
1362 call hecmw_abort( hecmw_comm_get_comm())
1365 if(
associated(fstrsolid%unode) )
then
1366 deallocate(fstrsolid%unode ,stat=ierror)
1367 if( ierror /= 0 )
then
1368 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, unode>'
1370 call hecmw_abort( hecmw_comm_get_comm())
1373 if(
associated(fstrsolid%unode_bak) )
then
1374 deallocate(fstrsolid%unode_bak ,stat=ierror)
1375 if( ierror /= 0 )
then
1376 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, unode_bak>'
1378 call hecmw_abort( hecmw_comm_get_comm())
1381 if(
associated(fstrsolid%dunode) )
then
1382 deallocate(fstrsolid%dunode ,stat=ierror)
1383 if( ierror /= 0 )
then
1384 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, dunode>'
1386 call hecmw_abort( hecmw_comm_get_comm())
1389 if(
associated(fstrsolid%ddunode) )
then
1390 deallocate(fstrsolid%ddunode ,stat=ierror)
1391 if( ierror /= 0 )
then
1392 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, ddunode>'
1394 call hecmw_abort( hecmw_comm_get_comm())
1397 if(
associated(fstrsolid%QFORCE) )
then
1398 deallocate(fstrsolid%QFORCE ,stat=ierror)
1399 if( ierror /= 0 )
then
1400 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, QFORCE>'
1402 call hecmw_abort( hecmw_comm_get_comm())
1405 if(
associated(fstrsolid%temperature) )
then
1406 deallocate(fstrsolid%temperature ,stat=ierror)
1407 if( ierror /= 0 )
then
1408 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, temperature>'
1410 call hecmw_abort( hecmw_comm_get_comm())
1413 if(
associated(fstrsolid%last_temp) )
then
1414 deallocate(fstrsolid%last_temp ,stat=ierror)
1415 if( ierror /= 0 )
then
1416 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, reftemp>'
1418 call hecmw_abort( hecmw_comm_get_comm())
1421 if(
associated(fstrsolid%temp_bak) )
then
1422 deallocate(fstrsolid%temp_bak ,stat=ierror)
1423 if( ierror /= 0 )
then
1424 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, reftemp>'
1426 call hecmw_abort( hecmw_comm_get_comm())
1431 if(
associated(fstrsolid%BOUNDARY_ngrp_GRPID) )
then
1432 deallocate(fstrsolid%BOUNDARY_ngrp_GRPID, stat=ierror)
1433 if( ierror /= 0 )
then
1434 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, BOUNDARY_ngrp_GRPID>'
1436 call hecmw_abort( hecmw_comm_get_comm())
1439 if(
associated(fstrsolid%BOUNDARY_ngrp_ID) )
then
1440 deallocate(fstrsolid%BOUNDARY_ngrp_ID, stat=ierror)
1441 if( ierror /= 0 )
then
1442 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, BOUNDARY_ngrp_ID>'
1444 call hecmw_abort( hecmw_comm_get_comm())
1447 if(
associated(fstrsolid%BOUNDARY_ngrp_type) )
then
1448 deallocate(fstrsolid%BOUNDARY_ngrp_type, stat=ierror)
1449 if( ierror /= 0 )
then
1450 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, BOUNDARY_ngrp_type>'
1452 call hecmw_abort( hecmw_comm_get_comm())
1455 if(
associated(fstrsolid%BOUNDARY_ngrp_val) )
then
1456 deallocate(fstrsolid%BOUNDARY_ngrp_val, stat=ierror)
1457 if( ierror /= 0 )
then
1458 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, BOUNDARY_ngrp_val>'
1460 call hecmw_abort( hecmw_comm_get_comm())
1463 if(
associated(fstrsolid%BOUNDARY_ngrp_amp) )
then
1464 deallocate(fstrsolid%BOUNDARY_ngrp_amp, stat=ierror)
1465 if( ierror /= 0 )
then
1466 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, BOUNDARY_ngrp_amp>'
1468 call hecmw_abort( hecmw_comm_get_comm())
1471 if(
associated(fstrsolid%BOUNDARY_ngrp_istot) )
then
1472 deallocate(fstrsolid%BOUNDARY_ngrp_istot, stat=ierror)
1473 if( ierror /= 0 )
then
1474 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, BOUNDARY_ngrp_istot>'
1476 call hecmw_abort( hecmw_comm_get_comm())
1479 if(
associated(fstrsolid%BOUNDARY_ngrp_rotID) )
then
1480 deallocate(fstrsolid%BOUNDARY_ngrp_rotID, stat=ierror)
1481 if( ierror /= 0 )
then
1482 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, BOUNDARY_ngrp_rotID>'
1484 call hecmw_abort( hecmw_comm_get_comm())
1487 if(
associated(fstrsolid%BOUNDARY_ngrp_centerID) )
then
1488 deallocate(fstrsolid%BOUNDARY_ngrp_centerID, stat=ierror)
1489 if( ierror /= 0 )
then
1490 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, BOUNDARY_ngrp_centerID>'
1492 call hecmw_abort( hecmw_comm_get_comm())
1497 if(
associated(fstrsolid%CLOAD_ngrp_GRPID) )
then
1498 deallocate(fstrsolid%CLOAD_ngrp_GRPID, stat=ierror)
1499 if( ierror /= 0 )
then
1500 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, CLOAD_ngrp_GRPID>'
1502 call hecmw_abort( hecmw_comm_get_comm())
1505 if(
associated(fstrsolid%CLOAD_ngrp_ID) )
then
1506 deallocate(fstrsolid%CLOAD_ngrp_ID, stat=ierror)
1507 if( ierror /= 0 )
then
1508 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, CLOAD_ngrp_ID>'
1510 call hecmw_abort( hecmw_comm_get_comm())
1513 if(
associated(fstrsolid%CLOAD_ngrp_DOF) )
then
1514 deallocate(fstrsolid%CLOAD_ngrp_DOF, stat=ierror)
1515 if( ierror /= 0 )
then
1516 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, CLOAD_ngrp_DOF>'
1518 call hecmw_abort( hecmw_comm_get_comm())
1521 if(
associated(fstrsolid%CLOAD_ngrp_val) )
then
1522 deallocate(fstrsolid%CLOAD_ngrp_val, stat=ierror)
1523 if( ierror /= 0 )
then
1524 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, CLOAD_ngrp_val>'
1526 call hecmw_abort( hecmw_comm_get_comm())
1529 if(
associated(fstrsolid%CLOAD_ngrp_amp) )
then
1530 deallocate(fstrsolid%CLOAD_ngrp_amp, stat=ierror)
1531 if( ierror /= 0 )
then
1532 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, CLOAD_ngrp_amp>'
1534 call hecmw_abort( hecmw_comm_get_comm())
1537 if(
associated(fstrsolid%CLOAD_ngrp_rotID) )
then
1538 deallocate(fstrsolid%CLOAD_ngrp_rotID, stat=ierror)
1539 if( ierror /= 0 )
then
1540 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, CLOAD_ngrp_rotID>'
1542 call hecmw_abort( hecmw_comm_get_comm())
1545 if(
associated(fstrsolid%CLOAD_ngrp_centerID) )
then
1546 deallocate(fstrsolid%CLOAD_ngrp_centerID, stat=ierror)
1547 if( ierror /= 0 )
then
1548 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, CLOAD_ngrp_centerID>'
1550 call hecmw_abort( hecmw_comm_get_comm())
1561 fstrheat%STEPtot = 0
1562 fstrheat%MATERIALtot = 0
1563 fstrheat%AMPLITUDEtot= 0
1564 fstrheat%T_FIX_tot = 0
1565 fstrheat%Q_NOD_tot = 0
1566 fstrheat%Q_VOL_tot = 0
1567 fstrheat%Q_SUF_tot = 0
1568 fstrheat%R_SUF_tot = 0
1569 fstrheat%H_SUF_tot = 0
1571 fstrheat%beta = -1.0d0
1580 fstreig%maxiter = 60
1582 fstreig%sigma = 0.0d0
1583 fstreig%tolerance = 1.0d-6
1584 fstreig%totalmass = 0.0d0
1591 fstrdynamic%idx_eqa = 1
1592 fstrdynamic%idx_resp = 1
1593 fstrdynamic%n_step = 1
1594 fstrdynamic%t_start = 0.0
1595 fstrdynamic%t_curr = 0.0d0
1596 fstrdynamic%t_end = 1.0
1597 fstrdynamic%t_delta = 1.0
1598 fstrdynamic%gamma = 0.5
1599 fstrdynamic%beta = 0.25
1600 fstrdynamic%idx_mas = 1
1601 fstrdynamic%idx_dmp = 1
1602 fstrdynamic%ray_m = 0.0
1603 fstrdynamic%ray_k = 0.0
1604 fstrdynamic%restart_nout = 0
1605 fstrdynamic%nout = 100
1606 fstrdynamic%ngrp_monit = 0
1607 fstrdynamic%nout_monit = 1
1608 fstrdynamic%iout_list(1) = 0
1609 fstrdynamic%iout_list(2) = 0
1610 fstrdynamic%iout_list(3) = 0
1611 fstrdynamic%iout_list(4) = 0
1612 fstrdynamic%iout_list(5) = 0
1613 fstrdynamic%iout_list(6) = 0
1621 type(hecmwst_local_mesh),
target :: hecMESH
1624 integer :: ierror, ndof,nnod
1628 if(fstrdynamic%idx_eqa == 11)
then
1629 allocate( fstrdynamic%DISP(ndof*nnod,3) ,stat=ierror )
1630 if( ierror /= 0 )
then
1631 write(
idbg,*)
'stop due to allocation error <fstr_solve_LINEAR_DYNAMIC, DISP>'
1632 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1634 call hecmw_abort( hecmw_comm_get_comm())
1636 allocate( fstrdynamic%VEL (ndof*nnod,1) ,stat=ierror )
1637 if( ierror /= 0 )
then
1638 write(
idbg,*)
'stop due to allocation error <fstr_solve_LINEAR_DYNAMIC, VEL>'
1639 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1641 call hecmw_abort( hecmw_comm_get_comm())
1643 allocate( fstrdynamic%ACC (ndof*nnod,1) ,stat=ierror )
1644 if( ierror /= 0 )
then
1645 write(
idbg,*)
'stop due to allocation error <fstr_solve_LINEAR_DYNAMIC, ACC>'
1646 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1648 call hecmw_abort( hecmw_comm_get_comm())
1651 allocate( fstrdynamic%DISP(ndof*nnod,2) ,stat=ierror )
1652 if( ierror /= 0 )
then
1653 write(
idbg,*)
'stop due to allocation error <fstr_solve_LINEAR_DYNAMIC, DISP>'
1654 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1656 call hecmw_abort( hecmw_comm_get_comm())
1658 allocate( fstrdynamic%VEL (ndof*nnod,2) ,stat=ierror )
1659 if( ierror /= 0 )
then
1660 write(
idbg,*)
'stop due to allocation error <fstr_solve_LINEAR_DYNAMIC, VEL>'
1661 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1663 call hecmw_abort( hecmw_comm_get_comm())
1665 allocate( fstrdynamic%ACC (ndof*nnod,2) ,stat=ierror )
1666 if( ierror /= 0 )
then
1667 write(
idbg,*)
'stop due to allocation error <fstr_solve_LINEAR_DYNAMIC, ACC>'
1668 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1670 call hecmw_abort( hecmw_comm_get_comm())
1675 allocate( fstrdynamic%VEC1(ndof*nnod) ,stat=ierror )
1676 if( ierror /= 0 )
then
1677 write(
idbg,*)
'stop due to allocation error <fstr_solve_LINEAR_DYNAMIC, VEC1>'
1678 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1680 call hecmw_abort( hecmw_comm_get_comm())
1682 allocate( fstrdynamic%VEC2(ndof*nnod) ,stat=ierror )
1683 if( ierror /= 0 )
then
1684 write(
idbg,*)
'stop due to allocation error <fstr_solve_LINEAR_DYNAMIC, VEC2>'
1685 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1687 call hecmw_abort( hecmw_comm_get_comm())
1689 allocate( fstrdynamic%VEC3(ndof*nnod) ,stat=ierror )
1690 if( ierror /= 0 )
then
1691 write(
idbg,*)
'stop due to allocation error <fstr_solve_LINEAR_DYNAMIC, VEC3>'
1692 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1694 call hecmw_abort( hecmw_comm_get_comm())
1704 if(
associated(fstrdynamic%DISP) ) &
1705 deallocate( fstrdynamic%DISP ,stat=ierror )
1706 if( ierror /= 0 )
then
1707 write(
idbg,*)
'stop due to deallocation error <fstr_solve_LINEAR_DYNAMIC, DISP>'
1709 call hecmw_abort( hecmw_comm_get_comm())
1711 if(
associated(fstrdynamic%VEL) ) &
1712 deallocate( fstrdynamic%VEL ,stat=ierror )
1713 if( ierror /= 0 )
then
1714 write(
idbg,*)
'stop due to deallocation error <fstr_solve_LINEAR_DYNAMIC, VEL>'
1716 call hecmw_abort( hecmw_comm_get_comm())
1718 if(
associated(fstrdynamic%ACC) ) &
1719 deallocate( fstrdynamic%ACC ,stat=ierror )
1720 if( ierror /= 0 )
then
1721 write(
idbg,*)
'stop due to deallocation error <fstr_solve_LINEAR_DYNAMIC, ACC>'
1723 call hecmw_abort( hecmw_comm_get_comm())
1725 if(
associated(fstrdynamic%VEC1) ) &
1726 deallocate( fstrdynamic%VEC1 ,stat=ierror )
1727 if( ierror /= 0 )
then
1728 write(
idbg,*)
'stop due to deallocation error <fstr_solve_LINEAR_DYNAMIC, VEC1>'
1730 call hecmw_abort( hecmw_comm_get_comm())
1732 if(
associated(fstrdynamic%VEC2) ) &
1733 deallocate( fstrdynamic%VEC2 ,stat=ierror )
1734 if( ierror /= 0 )
then
1735 write(
idbg,*)
'stop due to deallocation error <fstr_solve_LINEAR_DYNAMIC, VEC2>'
1737 call hecmw_abort( hecmw_comm_get_comm())
1739 if(
associated(fstrdynamic%VEC3) ) &
1740 deallocate( fstrdynamic%VEC3 ,stat=ierror )
1741 if( ierror /= 0 )
then
1742 write(
idbg,*)
'stop due to deallocation error <fstr_solve_LINEAR_DYNAMIC, VEC3>'
1744 call hecmw_abort( hecmw_comm_get_comm())
1756 integer(kind=kint) :: NDOF, n_node, n_elem, mdof
1757 mdof = (ndof*ndof+ndof)/2;
1758 allocate ( phys%STRAIN (mdof*n_node))
1759 allocate ( phys%STRESS (mdof*n_node))
1760 allocate ( phys%MISES ( n_node))
1761 allocate ( phys%ESTRAIN (mdof*n_elem))
1762 allocate ( phys%ESTRESS (mdof*n_elem))
1763 allocate ( phys%EMISES ( n_elem))
1764 allocate ( phys%EPLSTRAIN ( n_elem))
1765 allocate ( phys%ENQM (12*n_elem))
1770 integer(kind=kint) :: ctrl, i
1774 if( p%PARAM%solution_type ==
kststatic &
1775 .or. p%PARAM%solution_type ==
ksteigen &
1779 if( p%MESH%n_dof == 6 .or. p%SOLID%is_33shell == 1 )
then
1780 allocate ( p%SOLID%SHELL )
1782 allocate ( p%SOLID%SHELL%LAYER(p%SOLID%max_lyr) )
1783 do i=1,p%SOLID%max_lyr
1784 allocate ( p%SOLID%SHELL%LAYER(i)%PLUS )
1785 allocate ( p%SOLID%SHELL%LAYER(i)%MINUS )
1789 phys => p%SOLID%SHELL
1791 allocate ( p%SOLID%SOLID )
1792 phys => p%SOLID%SOLID
1795 p%SOLID%STRAIN => phys%STRAIN
1796 p%SOLID%STRESS => phys%STRESS
1797 p%SOLID%MISES => phys%MISES
1798 p%SOLID%ESTRAIN => phys%ESTRAIN
1799 p%SOLID%ESTRESS => phys%ESTRESS
1800 p%SOLID%EMISES => phys%EMISES
1801 p%SOLID%ENQM => phys%ENQM
1802 allocate( p%SOLID%REACTION( p%MESH%n_dof*p%MESH%n_node ) )
1805 if( p%PARAM%fg_visual ==
kon )
then
1809 call hecmw_barrier( p%MESH )
1811 if( p%HEAT%STEPtot == 0 )
then
1812 if( p%PARAM%analysis_n == 0 )
then
1819 p%PARAM%analysis_n = 1
1825 p%PARAM%eps = 1.0e-6
1832 p%HEAT%STEP_DLTIME = 0
1833 p%HEAT%STEP_EETIME = 0
1834 p%HEAT%STEP_DELMIN = 0
1835 p%HEAT%STEP_DELMAX = 0
1849 integer(kind=kint) :: ctrl
1850 integer(kind=kint) :: counter
1853 integer(kind=kint) :: rcode
1866 integer(kind=kint) :: ctrl
1867 integer(kind=kint) :: counter
1870 integer(kind=kint) :: rcode
1883 integer(kind=kint) :: ctrl
1884 integer(kind=kint) :: counter
1887 integer(kind=kint) :: rcode
1889 if( counter >= 2 )
then
1890 write(
ilog,*)
'### Error : !SOLVER exists twice in FSTR control file.'
1945 integer(kind=kint) :: ctrl
1946 type( hecmwst_local_mesh ) :: hecmesh
1948 type( tlocalcoordsys ) :: coordsys
1950 integer :: j, is, ie, grp_id(1)
1951 character(len=HECMW_NAME_LEN) :: grp_id_name(1)
1953 integer :: nid, dtype
1954 character(len=HECMW_NAME_LEN) :: data_fmt
1955 real(kind=kreal) :: fdum, xyza(3), xyzb(3), xyzc(3), ff1(3), ff2(3), ff3(3)
1960 coordsys%sys_type = 10
1963 data_fmt =
'COORDINATES,NODES '
1966 coordsys%sys_type = coordsys%sys_type + dtype
1969 coordsys%sys_name = grp_id_name(1)
1973 data_fmt =
"RRRRRRrrr "
1976 xyza(3), xyzb(1), xyzb(2), xyzb(3), xyzc(1), xyzc(2), xyzc(3) )/=0 )
return
1977 if( coordsys%sys_type==10 )
then
1979 fdum = dsqrt( dot_product(ff1, ff1) )
1980 if( fdum==0.d0 )
return
1984 coordsys%CoordSys(1,:) = ff1
1986 fdum = dsqrt( dot_product(ff3, ff3) )
1987 if( fdum==0.d0 )
return
1988 coordsys%CoordSys(3,:) = ff3/fdum
1990 call cross_product(coordsys%CoordSys(3,:), coordsys%CoordSys(1,:), coordsys%CoordSys(2,:) )
1992 coordsys%CoordSys(1,:) = xyza
1993 coordsys%CoordSys(2,:) = xyzb
1997 coordsys%node_ID(3) = 0
2000 coordsys%node_ID(2), coordsys%node_ID(3) )/=0 )
return
2001 if( coordsys%node_ID(3) == 0 )
then
2003 if( nid/=0 .and. nid/=2 )
then
2004 write(*,*)
"We cannot define coordinate system using nodes in other CPU!"
2005 write(
idbg,*)
"We cannot define coordinate system using nodes in other CPU!"
2010 if( nid/=0 .and. nid/=3 )
then
2011 write(*,*)
"We cannot define coordinate system using nodes in other CPU!"
2012 write(
idbg,*)
"We cannot define coordinate system using nodes in other CPU!"
2028 integer(kind=kint) :: ctrl
2029 integer(kind=kint) :: counter
2031 character(HECMW_NAME_LEN) :: amp
2032 integer(kind=kint) :: amp_id
2034 integer(kind=kint) :: rcode, iproc
2046 integer(kind=kint) :: ctrl
2048 type(hecmwst_local_mesh) :: hecmesh
2049 integer,
pointer :: grp_id(:), dof(:)
2050 real(kind=kreal),
pointer :: temp(:)
2051 character(len=HECMW_NAME_LEN),
pointer :: grp_id_name(:)
2052 character(len=HECMW_NAME_LEN) :: data_fmt, ss
2053 integer :: i,j,n, is, ie, gid, nid, rcode
2057 ss =
'TEMPERATURE,VELOCITY,ACCELERATION '
2060 cond%cond_name =
"temperature"
2061 allocate( cond%intval(hecmesh%n_node) )
2062 allocate( cond%realval(hecmesh%n_node) )
2063 elseif( nid==2 )
then
2064 cond%cond_name =
"velocity"
2065 allocate( cond%intval(hecmesh%n_node) )
2066 allocate( cond%realval(hecmesh%n_node) )
2067 elseif( nid==3 )
then
2068 cond%cond_name =
"acceleration"
2069 allocate( cond%intval(hecmesh%n_node) )
2070 allocate( cond%realval(hecmesh%n_node) )
2080 allocate( temp(n), grp_id_name(n), grp_id(n), dof(n) )
2082 write(ss,*) hecmw_name_len
2084 write(data_fmt,
'(a,a,a)')
'S',trim(adjustl(ss)),
'R '
2088 write(data_fmt,
'(a,a,a)')
'S',trim(adjustl(ss)),
'IR '
2094 if(
associated(grp_id) )
deallocate( grp_id )
2095 if(
associated(temp) )
deallocate( temp )
2096 if(
associated(dof) )
deallocate( dof )
2097 if(
associated(grp_id_name) )
deallocate( grp_id_name )
2104 is = hecmesh%node_group%grp_index(gid-1) + 1
2105 ie = hecmesh%node_group%grp_index(gid )
2107 nid = hecmesh%node_group%grp_item(j)
2108 cond%realval(nid) = temp(i)
2109 cond%intval(nid) = dof(i)
2113 if(
associated(grp_id) )
deallocate( grp_id )
2114 if(
associated(temp) )
deallocate( temp )
2115 if(
associated(dof) )
deallocate( dof )
2116 if(
associated(grp_id_name) )
deallocate( grp_id_name )
2125 integer(kind=kint) :: ctrl
2126 integer(kind=kint) :: counter
2128 integer(kind=kint) :: res, visual, neutral
2130 integer(kind=kint) :: rcode
2134 if( res == 1 ) p%PARAM%fg_result = 1
2135 if( visual == 1 ) p%PARAM%fg_visual = 1
2136 if( neutral == 1 ) p%PARAM%fg_neutral = 1
2146 integer(kind=kint) :: ctrl
2147 integer(kind=kint) :: counter
2150 integer(kind=kint) :: rcode
2164 integer(kind=kint) :: ctrl
2165 integer(kind=kint) :: nout
2166 integer(kind=kint) :: version
2168 integer(kind=kint) :: rcode
2184 integer(kind=kint) :: ctrl
2185 integer(kind=kint) :: counter
2187 integer(kind=kint) :: rcode
2188 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
2189 integer(kind=kint) :: i, n, old_size, new_size
2191 if( p%SOLID%file_type /=
kbcffstr )
return
2195 old_size = p%SOLID%COUPLE_ngrp_tot
2196 new_size = old_size + n
2197 p%SOLID%COUPLE_ngrp_tot = new_size
2201 allocate( grp_id_name(n))
2203 p%PARAM%fg_couple_type, &
2204 p%PARAM%fg_couple_first, &
2205 p%PARAM%fg_couple_window, &
2206 grp_id_name, hecmw_name_len )
2210 n, grp_id_name, p%SOLID%COUPLE_ngrp_ID(old_size+1:))
2212 deallocate( grp_id_name )
2213 p%PARAM%fg_couple = 1
2223 integer(kind=kint) :: ctrl
2225 real(kind=kreal),
pointer :: val(:), table(:)
2226 character(len=HECMW_NAME_LEN) :: name
2227 integer :: nline, n, type_def, type_time, type_val, rcode
2230 if( nline<=0 )
return
2231 allocate( val(nline*4) )
2232 allocate( table(nline*4) )
2239 if(
associated(val) )
deallocate( val )
2240 if(
associated(table) )
deallocate( table )
2247 integer(kind=kint) :: ctrl
2248 integer(kind=kint) :: counter
2251 integer(kind=kint) :: rcode
2252 character(HECMW_NAME_LEN) :: amp
2253 integer(kind=kint) :: amp_id
2254 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
2255 integer(kind=kint) :: i, n, old_size, new_size
2256 integer(kind=kint) :: gid, dtype, state
2257 real(kind=kreal) ::
eps
2258 real(kind=kreal),
pointer :: thlow(:), thup(:)
2265 old_size = p%SOLID%elemact%ELEMACT_egrp_tot
2266 new_size = old_size + n
2267 p%SOLID%elemact%ELEMACT_egrp_tot = new_size
2278 allocate( grp_id_name(n), thlow(n), thup(n) )
2284 call amp_name_to_id( p%MESH,
'!ELEMENT_ACTIVATION', amp, amp_id )
2286 p%SOLID%elemact%ELEMACT_egrp_amp(old_size+i) = amp_id
2287 p%SOLID%elemact%ELEMACT_egrp_eps(old_size+i) =
eps
2289 p%SOLID%elemact%ELEMACT_egrp_GRPID(old_size+1:new_size) = gid
2290 p%SOLID%elemact%ELEMACT_egrp_depends(old_size+1:new_size) = dtype
2291 p%SOLID%elemact%ELEMACT_egrp_ts_lower(old_size+1:new_size) = thlow(1:n)
2292 p%SOLID%elemact%ELEMACT_egrp_ts_upper(old_size+1:new_size) = thup(1:n)
2293 p%SOLID%elemact%ELEMACT_egrp_state(old_size+1:new_size) = state
2295 call elem_grp_name_to_id_ex( p%MESH,
'!ELEMENT_ACTIVATION', n, grp_id_name, p%SOLID%elemact%ELEMACT_egrp_ID(old_size+1:))
2297 deallocate( grp_id_name )
2311 integer(kind=kint) :: ctrl
2312 integer(kind=kint) :: counter
2314 integer(kind=kint) :: rcode
2316 integer :: nout, nout_monit,node_monit_1 ,elem_monit_1 ,intg_monit_1
2317 integer :: ipt, idx_elpl, iout_list(6)
2318 real(kind=kreal) :: sig_y0, h_dash
2320 if( counter > 1 )
then
2327 if( ipt == 2 ) p%PARAM%nlgeom = .true.
2331 write(*,*)
"Warning : !STATIC : parameter 'TYPE=INFINITE' is deprecated." &
2332 & //
" Please use the replacement parameter 'TYPE=INFINITESIMAL'"
2340 nout, nout_monit, node_monit_1, &
2341 elem_monit_1, intg_monit_1 )
2354 integer(kind=kint) :: ctrl
2355 integer(kind=kint) :: counter
2358 integer(kind=kint) :: rcode
2359 integer(kind=kint) ::
type = 0
2360 character(HECMW_NAME_LEN) :: amp, rotc_name(1)
2361 integer(kind=kint) :: amp_id, rotc_id(1), n_rotc
2362 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
2363 integer(kind=kint),
pointer :: dof_ids (:)
2364 integer(kind=kint),
pointer :: dof_ide (:)
2365 real(kind=kreal),
pointer :: val_ptr(:)
2366 integer(kind=kint) :: i, n, old_size, new_size
2368 integer(kind=kint) :: gid, istot
2388 if( rotc_name(1) /=
' ' )
then
2389 if( istot /= 0 )
then
2390 write(*,*)
'fstr control file error : !BOUNDARY : rotational boundary cannot be specified with total value'
2391 write(
ilog,*)
'fstr control file error : !BOUNDARY : rotational boundary cannot be specified with total value'
2394 p%SOLID%BOUNDARY_ngrp_rot = p%SOLID%BOUNDARY_ngrp_rot + 1
2395 n_rotc = p%SOLID%BOUNDARY_ngrp_rot
2405 old_size = p%SOLID%BOUNDARY_ngrp_tot
2406 new_size = old_size + n
2407 p%SOLID%BOUNDARY_ngrp_tot = new_size
2417 allocate( grp_id_name(n) )
2418 allocate( dof_ids(n) )
2419 allocate( dof_ide(n) )
2422 val_ptr => p%SOLID%BOUNDARY_ngrp_val(old_size+1:)
2427 p%SOLID%BOUNDARY_ngrp_GRPID(old_size+1:new_size) = gid
2429 p%SOLID%BOUNDARY_ngrp_istot(old_size+1:new_size) = istot
2432 p%SOLID%BOUNDARY_ngrp_rotID(old_size+1:) = n_rotc
2433 p%SOLID%BOUNDARY_ngrp_centerID(old_size+1:) = rotc_id(1)
2436 if( (dof_ids(i) < 1).or.(6 < dof_ids(i)).or.(dof_ide(i) < 1).or.(6 < dof_ide(i)) )
then
2437 write(*,*)
'fstr control file error : !BOUNDARY : range of dof_ids and dof_ide is from 1 to 6'
2438 write(
ilog,*)
'fstr control file error : !BOUNDARY : range of dof_ids and dof_ide is from 1 to 6'
2441 p%SOLID%BOUNDARY_ngrp_type(old_size+i) = 10 * dof_ids(i) + dof_ide(i)
2442 p%SOLID%BOUNDARY_ngrp_amp(old_size+i) = amp_id
2445 deallocate( grp_id_name )
2446 deallocate( dof_ids )
2447 deallocate( dof_ide )
2464 integer(kind=kint) :: ctrl
2465 integer(kind=kint) :: counter
2468 integer(kind=kint) :: rcode
2469 character(HECMW_NAME_LEN) :: amp, rotc_name(1)
2470 integer(kind=kint) :: amp_id, rotc_id(1), n_rotc
2471 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
2472 real(kind=kreal),
pointer :: val_ptr(:)
2473 integer(kind=kint),
pointer :: id_ptr(:)
2474 integer(kind=kint) :: i, n, old_size, new_size
2475 integer(kind=kint) :: gid
2477 if( p%SOLID%file_type /=
kbcffstr )
return
2488 if( rotc_name(1) /=
' ' )
then
2489 p%SOLID%CLOAD_ngrp_rot = p%SOLID%CLOAD_ngrp_rot + 1
2490 n_rotc = p%SOLID%CLOAD_ngrp_rot
2496 old_size = p%SOLID%CLOAD_ngrp_tot
2497 new_size = old_size + n
2498 p%SOLID%CLOAD_ngrp_tot = new_size
2509 allocate( grp_id_name(n))
2511 val_ptr => p%SOLID%CLOAD_ngrp_val(old_size+1:)
2512 id_ptr =>p%SOLID%CLOAD_ngrp_DOF(old_size+1:)
2518 p%SOLID%CLOAD_ngrp_rotID(old_size+1:) = n_rotc
2519 p%SOLID%CLOAD_ngrp_centerID(old_size+1:) = rotc_id(1)
2523 p%SOLID%CLOAD_ngrp_amp(old_size+i) = amp_id
2525 p%SOLID%CLOAD_ngrp_GRPID(old_size+1:new_size) = gid
2528 deallocate( grp_id_name )
2530 if( p%MESH%n_refine > 0 )
then
2532 if( hecmw_ngrp_get_number(p%MESH, p%SOLID%CLOAD_NGRP_ID(old_size+i)) > 1 )
then
2533 write(*,*)
'fstr control file error : !CLOAD : cannot be used with NGRP when mesh is refined'
2534 write(
ilog,*)
'fstr control file error : !CLOAD : cannot be used with NGRP when mesh is refined'
2547 integer(kind=kint) :: ctrl
2548 integer(kind=kint) :: counter
2551 integer(kind=kint) :: rcode
2552 character(HECMW_NAME_LEN) :: amp
2553 integer(kind=kint) :: amp_id
2554 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
2555 real(kind=kreal),
pointer :: val_ptr(:)
2556 integer(kind=kint),
pointer :: id_ptr(:), type_ptr(:)
2557 integer(kind=kint) :: i, n, old_size, new_size
2558 integer(kind=kint) :: gid, loadcase
2561 if( p%SOLID%file_type /=
kbcffstr)
return
2575 old_size = p%FREQ%FLOAD_ngrp_tot
2576 new_size = old_size + n
2579 p%FREQ%FLOAD_ngrp_tot = new_size
2588 allocate( grp_id_name(n) )
2590 val_ptr => p%FREQ%FLOAD_ngrp_valre(old_size+1:)
2592 val_ptr => p%FREQ%FLOAD_ngrp_valim(old_size+1:)
2595 write(*,*)
"Error this load set is not defined!"
2596 write(
ilog,*)
"Error this load set is not defined!"
2599 id_ptr => p%FREQ%FLOAD_ngrp_DOF(old_size+1:)
2600 type_ptr => p%FREQ%FLOAD_ngrp_TYPE(old_size+1:)
2604 p%FREQ%FLOAD_ngrp_GRPID(old_size+1:new_size) = gid
2606 p%FREQ%FLOAD_ngrp_ID(old_size+1:), p%FREQ%FLOAD_ngrp_TYPE(old_size+1:))
2608 deallocate( grp_id_name )
2614 integer(kind=kint) :: ctrl
2615 character(len=HECMW_NAME_LEN) :: node_id(:)
2616 integer(kind=kint),
pointer :: dof_id(:)
2617 integer(kind=kint) :: node_id_len
2618 real(kind=kreal),
pointer :: value(:)
2620 character(len=HECMW_NAME_LEN) :: data_fmt, ss
2622 write(ss,*) node_id_len
2623 write(data_fmt,
'(a,a,a)')
'S', trim(adjustl(ss)),
'IR '
2635 integer(kind=kint) :: ctrl
2636 integer(kind=kint) :: counter
2639 integer(kind=kint) :: filename_len
2640 character(len=HECMW_NAME_LEN) :: datafmt, ss
2643 filename_len = hecmw_filename_len
2644 write(ss,*) filename_len
2645 write(datafmt,
'(a,a,a)')
'S', trim(adjustl(ss)),
' '
2660 real(kind=kreal),
pointer :: array(:,:)
2661 integer(kind=kint) :: old_size, new_size, i, j
2662 real(kind=kreal),
pointer :: temp(:,:)
2664 if( old_size >= new_size )
then
2668 if(
associated( array ) )
then
2669 allocate(temp(0:6, old_size))
2672 allocate(array(0:6, new_size))
2676 array(j,i) = temp(j,i)
2681 allocate(array(0:6, new_size))
2689 integer(kind=kint) :: ctrl
2690 integer(kind=kint) :: counter
2693 integer(kind=kint) :: rcode
2694 character(HECMW_NAME_LEN) :: amp
2695 integer(kind=kint) :: amp_id
2696 integer(kind=kint) :: follow
2697 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
2698 real(kind=kreal),
pointer :: new_params(:,:)
2699 logical,
pointer :: fg_surface(:)
2700 integer(kind=kint),
pointer :: lid_ptr(:)
2701 integer(kind=kint) :: i, j, n, old_size, new_size
2702 integer(kind=kint) :: gid
2704 if( p%SOLID%file_type /=
kbcffstr )
return
2711 old_size = p%SOLID%DLOAD_ngrp_tot
2712 new_size = old_size + n
2713 p%SOLID%DLOAD_ngrp_tot = new_size
2722 allocate( grp_id_name(n))
2723 allocate( new_params(0:6,n))
2724 allocate( fg_surface(n))
2727 follow = p%SOLID%DLOAD_follow
2728 if( .not. p%PARAM%nlgeom ) follow = 0
2729 lid_ptr => p%SOLID%DLOAD_ngrp_LID(old_size+1:)
2731 grp_id_name, hecmw_name_len, &
2732 lid_ptr, new_params )
2735 p%SOLID%DLOAD_follow = follow
2737 p%SOLID%DLOAD_ngrp_amp(old_size+i) = amp_id
2739 p%SOLID%DLOAD_ngrp_params(j,old_size+i) = new_params(j,i)
2741 fg_surface(i) = ( lid_ptr(i) == 100 )
2743 p%SOLID%DLOAD_ngrp_GRPID(old_size+1:new_size) = gid
2745 deallocate( grp_id_name )
2746 deallocate( new_params )
2747 deallocate( fg_surface )
2757 integer(kind=kint) :: ctrl
2758 integer(kind=kint) :: counter
2761 integer(kind=kint) :: rcode, gid
2762 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
2763 real(kind=kreal),
pointer :: val_ptr(:)
2764 integer(kind=kint) :: n, old_size, new_size
2766 if( p%SOLID%file_type /=
kbcffstr )
return
2772 old_size = p%SOLID%TEMP_ngrp_tot
2774 new_size = old_size + n
2776 new_size = old_size + 1
2782 allocate( grp_id_name(n))
2783 val_ptr => p%SOLID%TEMP_ngrp_val( old_size+1: )
2786 p%SOLID%TEMP_irres, &
2787 p%SOLID%TEMP_tstep, &
2788 p%SOLID%TEMP_interval, &
2789 p%SOLID%TEMP_rtype, &
2790 grp_id_name, hecmw_name_len, &
2794 p%SOLID%TEMP_ngrp_GRPID(old_size+1:new_size) = gid
2796 if( p%SOLID%TEMP_irres == 0 )
then
2797 p%SOLID%TEMP_ngrp_tot = new_size
2799 n, grp_id_name, p%SOLID%TEMP_ngrp_ID(old_size+1:))
2801 deallocate( grp_id_name )
2813 integer(kind=kint) :: ctrl
2814 integer(kind=kint) :: counter
2817 integer(kind=kint) :: rcode
2818 character(HECMW_NAME_LEN) :: amp
2819 integer(kind=kint) :: amp_id
2820 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
2821 real(kind=kreal),
pointer :: val_ptr(:)
2822 integer(kind=kint),
pointer :: id_ptr(:)
2823 integer(kind=kint) :: i, n, old_size, new_size
2824 integer(kind=kint) :: gid
2826 if( p%SOLID%file_type /=
kbcffstr )
return
2831 old_size = p%SOLID%SPRING_ngrp_tot
2832 new_size = old_size + n
2833 p%SOLID%SPRING_ngrp_tot = new_size
2840 allocate( grp_id_name(n))
2842 val_ptr => p%SOLID%SPRING_ngrp_val(old_size+1:)
2843 id_ptr =>p%SOLID%SPRING_ngrp_DOF(old_size+1:)
2850 p%SOLID%SPRING_ngrp_amp(old_size+i) = amp_id
2852 p%SOLID%SPRING_ngrp_GRPID(old_size+1:new_size) = gid
2855 deallocate( grp_id_name )
2866 integer(kind=kint) :: ctrl
2867 integer(kind=kint) :: counter
2870 integer(kind=kint) :: rcode
2888 integer(kind=kint) :: ctrl
2889 integer(kind=kint) :: counter
2892 integer(kind=kint) :: rcode
2893 integer(kind=kint) :: n
2894 character(len=HECMW_NAME_LEN) :: mName
2895 integer(kind=kint) :: i
2907 p%PARAM%analysis_n = n
2914 p%PARAM%eps = 1.0e-6
2915 p%PARAM%timepoint_id = 0
2926 if( rcode /= 0 )
then
2930 if(
associated(p%PARAM%timepoints) )
then
2931 do i=1,
size(p%PARAM%timepoints)
2932 if(
fstr_streqr( p%PARAM%timepoints(i)%name, mname ) )
then
2933 p%PARAM%timepoint_id = i;
exit
2944 p%HEAT%STEP_DLTIME = p%PARAM%dtime
2945 p%HEAT%STEP_EETIME = p%PARAM%etime
2946 p%HEAT%STEP_DELMIN = p%PARAM%dtmin
2947 p%HEAT%STEP_DELMAX = p%PARAM%delmax
2948 p%HEAT%timepoint_id = p%PARAM%timepoint_id
2958 integer(kind=kint) :: ctrl
2959 integer(kind=kint) :: counter
2962 integer(kind=kint) :: rcode
2963 character(HECMW_NAME_LEN) :: amp
2964 integer(kind=kint) :: amp_id
2965 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
2966 real(kind=kreal),
pointer :: value(:)
2967 integer(kind=kint) :: i, j, n, m, head, id, member_n, old_size, new_size
2968 integer(kind=kint),
pointer :: member(:)
2969 integer(kind=kint) :: local_id, rtc
2975 allocate( grp_id_name(n))
2980 grp_id_name, hecmw_name_len,
value )
2991 else if( rtc < 0 )
then
2997 deallocate( grp_id_name )
3003 old_size = p%HEAT%T_FIX_tot
3004 new_size = old_size + m
3008 p%HEAT%T_FIX_tot = new_size
3011 member => p%HEAT%T_FIX_node(head:)
3017 member(1) = local_id
3019 else if( rtc < 0 )
then
3020 member_n =
get_grp_member( p%MESH,
'node_grp', grp_id_name(i), member )
3025 member => member( member_n+1 : )
3028 p%HEAT%T_FIX_val (id) = value(i)
3029 p%HEAT%T_FIX_ampl (id) = amp_id
3034 deallocate( grp_id_name )
3045 integer(kind=kint) :: ctrl
3046 integer(kind=kint) :: counter
3049 integer(kind=kint) :: rcode
3050 character(HECMW_NAME_LEN) :: amp
3051 integer(kind=kint) :: amp_id
3052 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
3053 real(kind=kreal),
pointer :: value(:)
3054 integer(kind=kint) :: i, j, n, m, head, id, member_n, old_size, new_size
3055 integer(kind=kint),
pointer :: member(:)
3056 integer(kind=kint) :: local_id, rtc
3062 allocate( grp_id_name(n))
3067 grp_id_name, hecmw_name_len,
value )
3078 else if( rtc < 0 )
then
3084 deallocate( grp_id_name )
3090 old_size = p%HEAT%Q_NOD_tot
3091 new_size = old_size + m
3095 p%HEAT%Q_NOD_tot = new_size
3098 member => p%HEAT%Q_NOD_node(head:)
3103 member(1) = local_id
3105 else if( rtc < 0 )
then
3106 member_n =
get_grp_member( p%MESH,
'node_grp', grp_id_name(i), member )
3110 if( i<n ) member => member( member_n+1 : )
3112 p%HEAT%Q_NOD_val (id) = value(i)
3113 p%HEAT%Q_NOD_ampl (id) = amp_id
3118 deallocate( grp_id_name )
3130 integer(kind=kint) :: ctrl
3131 integer(kind=kint) :: counter
3134 integer(kind=kint) :: rcode
3135 character(HECMW_NAME_LEN) :: amp
3136 integer(kind=kint) :: amp_id
3137 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
3138 integer(kind=kint),
pointer :: load_type(:)
3139 real(kind=kreal),
pointer :: value(:)
3140 integer(kind=kint) :: i, j, n, m, head, id, member_n, old_size, new_size
3141 integer(kind=kint),
pointer :: member(:)
3142 integer(kind=kint) :: local_id, rtc
3148 allocate( grp_id_name(n))
3149 allocate( load_type(n))
3154 grp_id_name, hecmw_name_len, load_type,
value )
3164 else if( rtc < 0 )
then
3170 deallocate( grp_id_name )
3171 deallocate( load_type )
3177 old_size = p%HEAT%Q_SUF_tot
3178 new_size = old_size + m
3183 p%HEAT%Q_SUF_tot = new_size
3186 member => p%HEAT%Q_SUF_elem(head:)
3191 member(1) = local_id
3193 else if( rtc < 0 )
then
3194 member_n =
get_grp_member( p%MESH,
'elem_grp', grp_id_name(i), member )
3198 if( i<n ) member => member( member_n+1 : )
3200 p%HEAT%Q_SUF_surf (id) = load_type(i)
3201 p%HEAT%Q_SUF_val (id) = value(i)
3202 p%HEAT%Q_SUF_ampl (id) = amp_id
3207 deallocate( grp_id_name )
3208 deallocate( load_type )
3220 integer(kind=kint) :: ctrl
3221 integer(kind=kint) :: counter
3224 integer(kind=kint) :: rcode
3225 character(HECMW_NAME_LEN) :: amp
3226 integer(kind=kint) :: amp_id
3227 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
3228 real(kind=kreal),
pointer :: value(:)
3229 integer(kind=kint) :: i, j, n, m, head, id, member_n, old_size, new_size
3230 integer(kind=kint),
pointer :: member1(:), member2(:)
3236 allocate( grp_id_name(n))
3241 grp_id_name, hecmw_name_len,
value )
3252 deallocate( grp_id_name )
3258 old_size = p%HEAT%Q_SUF_tot
3259 new_size = old_size + m
3264 p%HEAT%Q_SUF_tot = new_size
3267 member1 => p%HEAT%Q_SUF_elem(head:)
3268 member2 => p%HEAT%Q_SUF_surf(head:)
3271 member_n =
get_grp_member( p%MESH,
'surf_grp', grp_id_name(i), member1, member2 )
3273 member1 => member1( member_n+1 : )
3274 member2 => member2( member_n+1 : )
3277 p%HEAT%Q_SUF_val (id) = value(i)
3278 p%HEAT%Q_SUF_ampl (id) = amp_id
3283 deallocate( grp_id_name )
3295 integer(kind=kint) :: ctrl
3296 integer(kind=kint) :: counter
3299 integer(kind=kint) :: rcode
3300 character(HECMW_NAME_LEN) :: amp1, amp2
3301 integer(kind=kint) :: amp_id1, amp_id2
3302 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
3303 integer(kind=kint),
pointer :: load_type(:)
3304 real(kind=kreal),
pointer :: value(:)
3305 real(kind=kreal),
pointer :: shink(:)
3306 integer(kind=kint) :: i, j, n, m, head, id, member_n, old_size, new_size
3307 integer(kind=kint),
pointer :: member(:)
3308 integer(kind=kint) :: local_id, rtc
3314 allocate( grp_id_name(n))
3315 allocate( load_type(n))
3323 grp_id_name, hecmw_name_len, load_type,
value, shink )
3334 else if( rtc < 0 )
then
3340 deallocate( grp_id_name )
3341 deallocate( load_type )
3348 old_size = p%HEAT%H_SUF_tot
3349 new_size = old_size + m
3354 p%HEAT%H_SUF_tot = new_size
3357 member => p%HEAT%H_SUF_elem(head:)
3362 member(1) = local_id
3364 else if( rtc < 0 )
then
3365 member_n =
get_grp_member( p%MESH,
'elem_grp', grp_id_name(i), member )
3369 if( i<n ) member => member( member_n+1 : )
3371 p%HEAT%H_SUF_surf (id) = load_type(i)
3372 p%HEAT%H_SUF_val (id,1) = value(i)
3373 p%HEAT%H_SUF_val (id,2) = shink(i)
3374 p%HEAT%H_SUF_ampl (id,1) = amp_id1
3375 p%HEAT%H_SUF_ampl (id,2) = amp_id2
3380 deallocate( grp_id_name )
3381 deallocate( load_type )
3394 integer(kind=kint) :: ctrl
3395 integer(kind=kint) :: counter
3398 integer(kind=kint) :: rcode
3399 character(HECMW_NAME_LEN) :: amp1, amp2
3400 integer(kind=kint) :: amp_id1, amp_id2
3401 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
3402 real(kind=kreal),
pointer :: value(:)
3403 real(kind=kreal),
pointer :: shink(:)
3404 integer(kind=kint) :: i, j, n, m, head, id, member_n, old_size, new_size
3405 integer(kind=kint),
pointer :: member1(:), member2(:)
3411 allocate( grp_id_name(n))
3418 grp_id_name, hecmw_name_len,
value, shink )
3430 deallocate( grp_id_name )
3437 old_size = p%HEAT%H_SUF_tot
3438 new_size = old_size + m
3443 p%HEAT%H_SUF_tot = new_size
3446 member1 => p%HEAT%H_SUF_elem(head:)
3447 member2 => p%HEAT%H_SUF_surf(head:)
3450 member_n =
get_grp_member( p%MESH,
'surf_grp', grp_id_name(i), member1, member2 )
3452 member1 => member1( member_n+1 : )
3453 member2 => member2( member_n+1 : )
3456 p%HEAT%H_SUF_val (id,1) = value(i)
3457 p%HEAT%H_SUF_val (id,2) = shink(i)
3458 p%HEAT%H_SUF_ampl (id,1) = amp_id1
3459 p%HEAT%H_SUF_ampl (id,2) = amp_id2
3464 deallocate( grp_id_name )
3477 integer(kind=kint) :: ctrl
3478 integer(kind=kint) :: counter
3481 integer(kind=kint) :: rcode
3482 character(HECMW_NAME_LEN) :: amp1, amp2
3483 integer(kind=kint) :: amp_id1, amp_id2
3484 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
3485 integer(kind=kint),
pointer :: load_type(:)
3486 real(kind=kreal),
pointer :: value(:)
3487 real(kind=kreal),
pointer :: shink(:)
3488 integer(kind=kint) :: i, j, n, m, head, id, member_n, old_size, new_size
3489 integer(kind=kint),
pointer :: member(:)
3490 integer(kind=kint) :: local_id, rtc
3496 allocate( grp_id_name(n))
3497 allocate( load_type(n))
3504 grp_id_name, hecmw_name_len, load_type,
value, shink )
3515 else if( rtc < 0 )
then
3521 deallocate( grp_id_name )
3522 deallocate( load_type )
3529 old_size = p%HEAT%R_SUF_tot
3530 new_size = old_size + m
3535 p%HEAT%R_SUF_tot = new_size
3538 member => p%HEAT%R_SUF_elem(head:)
3543 member(1) = local_id
3545 else if( rtc < 0 )
then
3546 member_n =
get_grp_member( p%MESH,
'elem_grp', grp_id_name(i), member )
3550 if( i<n ) member => member( member_n+1 : )
3552 p%HEAT%R_SUF_surf (id) = load_type(i)
3553 p%HEAT%R_SUF_val (id,1) = value(i)
3554 p%HEAT%R_SUF_val (id,2) = shink(i)
3555 p%HEAT%R_SUF_ampl (id,1) = amp_id1
3556 p%HEAT%R_SUF_ampl (id,2) = amp_id2
3561 deallocate( grp_id_name )
3562 deallocate( load_type )
3575 integer(kind=kint) :: ctrl
3576 integer(kind=kint) :: counter
3579 integer(kind=kint) :: rcode
3580 character(HECMW_NAME_LEN) :: amp1, amp2
3581 integer(kind=kint) :: amp_id1, amp_id2
3582 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
3583 real(kind=kreal),
pointer :: value(:)
3584 real(kind=kreal),
pointer :: shink(:)
3585 integer(kind=kint) :: i, j, n, m, head, id, member_n, old_size, new_size
3586 integer(kind=kint),
pointer :: member1(:), member2(:)
3592 allocate( grp_id_name(n))
3610 deallocate( grp_id_name )
3617 old_size = p%HEAT%R_SUF_tot
3618 new_size = old_size + m
3623 p%HEAT%R_SUF_tot = new_size
3626 member1 => p%HEAT%R_SUF_elem(head:)
3627 member2 => p%HEAT%R_SUF_surf(head:)
3630 member_n =
get_grp_member( p%MESH,
'surf_grp', grp_id_name(i), member1, member2 )
3632 member1 => member1( member_n+1 : )
3633 member2 => member2( member_n+1 : )
3636 p%HEAT%R_SUF_val (id,1) = value(i)
3637 p%HEAT%R_SUF_val (id,2) = shink(i)
3638 p%HEAT%R_SUF_ampl (id,1) = amp_id1
3639 p%HEAT%R_SUF_ampl (id,2) = amp_id2
3644 deallocate( grp_id_name )
3660 integer(kind=kint) :: ctrl
3661 integer(kind=kint) :: counter
3664 integer(kind=kint) :: rcode
3682 integer(kind=kint) :: ctrl
3683 integer(kind=kint) :: counter
3685 integer(kind=kint) :: rcode
3686 character(HECMW_NAME_LEN) :: grp_id_name(1)
3687 integer(kind=kint) :: grp_id(1)
3704 grp_id_name(1), hecmw_name_len, &
3710 if (p%DYN%idx_resp == 1)
then
3712 p%DYN%ngrp_monit = grp_id(1)
3714 read(grp_id_name,*) p%DYN%ngrp_monit
3726 integer(kind=kint) :: ctrl
3727 integer(kind=kint) :: counter
3730 integer(kind=kint) :: rcode
3731 integer(kind=kint) :: vType
3732 character(HECMW_NAME_LEN) :: amp
3733 integer(kind=kint) :: amp_id
3734 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
3735 integer(kind=kint),
pointer :: dof_ids (:)
3736 integer(kind=kint),
pointer :: dof_ide (:)
3737 real(kind=kreal),
pointer :: val_ptr(:)
3738 integer(kind=kint) :: i, j, n, old_size, new_size
3742 old_size = p%SOLID%VELOCITY_ngrp_tot
3743 new_size = old_size + n
3744 p%SOLID%VELOCITY_ngrp_tot = new_size
3751 allocate( grp_id_name(n))
3752 allocate( dof_ids(n))
3753 allocate( dof_ide(n))
3756 val_ptr => p%SOLID%VELOCITY_ngrp_val(old_size+1:)
3759 grp_id_name, hecmw_name_len, &
3760 dof_ids, dof_ide, val_ptr )
3762 p%SOLID%VELOCITY_type = vtype
3763 if( vtype ==
kbcinitial ) p%DYN%VarInitialize = .true.
3766 n, grp_id_name, p%SOLID%VELOCITY_ngrp_ID(old_size+1:))
3770 if( (dof_ids(i) < 1).or.(6 < dof_ids(i)).or.(dof_ide(i) < 1).or.(6 < dof_ide(i)) )
then
3771 write(
ilog,*)
'fstr control file error : !VELOCITY : range of dof_ids and dof_ide is from 1 to 6'
3774 p%SOLID%VELOCITY_ngrp_type(j) = 10 * dof_ids(i) + dof_ide(i)
3775 p%SOLID%VELOCITY_ngrp_amp(j) = amp_id
3779 deallocate( grp_id_name )
3780 deallocate( dof_ids )
3781 deallocate( dof_ide )
3792 integer(kind=kint) :: ctrl
3793 integer(kind=kint) :: counter
3796 integer(kind=kint) :: rcode
3797 integer(kind=kint) :: aType
3798 character(HECMW_NAME_LEN) :: amp
3799 integer(kind=kint) :: amp_id
3800 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
3801 integer(kind=kint),
pointer :: dof_ids (:)
3802 integer(kind=kint),
pointer :: dof_ide (:)
3803 real(kind=kreal),
pointer :: val_ptr(:)
3804 integer(kind=kint) :: i, j, n, old_size, new_size
3809 old_size = p%SOLID%ACCELERATION_ngrp_tot
3810 new_size = old_size + n
3811 p%SOLID%ACCELERATION_ngrp_tot = new_size
3818 allocate( grp_id_name(n))
3819 allocate( dof_ids(n))
3820 allocate( dof_ide(n))
3823 val_ptr => p%SOLID%ACCELERATION_ngrp_val(old_size+1:)
3826 grp_id_name, hecmw_name_len, &
3827 dof_ids, dof_ide, val_ptr)
3829 p%SOLID%ACCELERATION_type = atype
3830 if( atype ==
kbcinitial )p%DYN%VarInitialize = .true.
3833 n, grp_id_name, p%SOLID%ACCELERATION_ngrp_ID(old_size+1:))
3837 if( (dof_ids(i) < 1).or.(6 < dof_ids(i)).or.(dof_ide(i) < 1).or.(6 < dof_ide(i)) )
then
3838 write(
ilog,*)
'fstr control file error : !ACCELERATION : range of dof_ids and dof_ide is from 1 to 6'
3841 p%SOLID%ACCELERATION_ngrp_type(j) = 10 * dof_ids(i) + dof_ide(i)
3842 p%SOLID%ACCELERATION_ngrp_amp(j) = amp_id
3846 deallocate( grp_id_name )
3847 deallocate( dof_ids )
3848 deallocate( dof_ide )
3862 integer(kind=kint) :: ctrl
3863 integer(kind=kint) :: counter
3866 integer(kind=kint) :: rcode
3912 integer(kind=kint) :: ctrl
3913 type (hecmwST_local_mesh) :: hecMESH
3914 type (fstr_solid ) :: fstrSOLID
3915 write(
ilog,*)
'### Error : In !BOUNDARY, TYPE=NASTRAN is not supported.'
3916 call hecmw_abort( hecmw_comm_get_comm())
3925 integer(kind=kint) :: ctrl
3929 integer(kind=kint) :: rcode
3943 integer(kind=kint) :: ctrl
3946 integer(kind=kint) :: rcode, nid
3947 character(len=HECMW_NAME_LEN) :: data_fmt
3949 data_fmt =
'SOLUTION,MATERIAL '
3962 type(hecmwst_local_mesh),
pointer :: hecMESH
3963 integer(kind=kint) :: n, i, sgrp_id, ngrp_id, ngrp_id2
3965 n = hecmesh%contact_pair%n_pair
3967 if( hecmesh%contact_pair%type(i) /= hecmw_contact_type_surf_surf ) cycle
3968 sgrp_id = hecmesh%contact_pair%slave_grp_id(i)
3971 hecmesh%contact_pair%type(i) = hecmw_contact_type_node_surf
3972 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_contactalgo(ctrl, algo)
Read in !CONTACT.
integer(kind=kint) function fstr_ctrl_get_contactparam(ctrl, contactparam)
Read in !CONTACT_PARAM !
integer(kind=kint) function fstr_ctrl_get_solution(ctrl, type, nlgeom)
Read in !SOLUTION.
integer(kind=kint) function fstr_ctrl_get_contact_if(ctrl, n, contact_if)
Read in contact interference.
integer(kind=kint) function fstr_ctrl_get_couple(ctrl, fg_type, fg_first, fg_window, surf_id, surf_id_len)
Read in !COUPLE.
integer(kind=kint) function fstr_get_autoinc(ctrl, aincparam)
Read in !AUTOINC_PARAM !
integer(kind=kint) function fstr_ctrl_get_amplitude(ctrl, nline, name, type_def, type_time, type_val, n, val, table)
Read in !AMPLITUDE.
logical function fstr_ctrl_get_outitem(ctrl, hecMESH, outinfo)
Read in !OUTPUT_RES & !OUTPUT_VIS.
integer(kind=kint) function fstr_ctrl_get_elemopt(ctrl, elemopt361)
Read in !ELEMOPT.
integer(kind=kint) function fstr_ctrl_get_timepoints(ctrl, tp)
Read in !TIME_POINTS.
integer(kind=kint) function fstr_ctrl_get_solver(ctrl, method, precond, nset, iterlog, timelog, steplog, nier, iterpremax, nrest, nBFGS, scaling, dumptype, dumpexit, usejad, ncolor_in, mpc_method, estcond, method2, recyclepre, solver_opt, contact_elim, resid, singma_diag, sigma, thresh, filter)
Read in !SOLVER.
integer(kind=kint) function fstr_ctrl_get_echo(ctrl, echo)
Read in !ECHO.
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_contact(ctrl, n, contact, np, tp, ntol, ttol, ctAlgo, cpname)
Read in contact definition.
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.
integer(kind=kint) function fstr_ctrl_get_element_activation(ctrl, amp, eps, grp_id_name, dtype, state, thlow, thup)
Read in !ELEMENT_ACTIVATION.
logical function fstr_ctrl_get_embed(ctrl, n, embed, cpname)
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)
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_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)
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.
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.
subroutine fstr_init_gauss(gauss)
Initializer.
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.