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
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;
104 c_heat = 0; c_fixtemp = 0; c_cflux = 0; c_dflux = 0; c_sflux = 0
105 c_film = 0; c_sfilm = 0; c_radiate= 0; c_sradiate = 0
106 c_eigen = 0; c_contact = 0; c_contactparam = 0; c_embed = 0; c_contact_if = 0
107 c_dynamic = 0; c_velocity = 0; c_acceleration = 0
108 c_couple = 0; c_material = 0; c_section =0
109 c_mpc = 0; c_weldline = 0; c_initial = 0
110 c_istep = 0; c_localcoord = 0
111 c_fload = 0; c_eigenread = 0
113 c_aincparam= 0; c_timepoints = 0
119 write(*,*)
'### Error: Cannot open FSTR control file : ', cntl_filename
120 write(
ilog,*)
'### Error: Cannot open FSTR control file : ', cntl_filename
127 if( header_name ==
'!VERSION' )
then
129 else if( header_name ==
'!SOLUTION' )
then
130 c_solution = c_solution + 1
132 else if( header_name ==
'!NONLINEAR_SOLVER' )
then
133 c_nlsolver = c_nlsolver + 1
135 else if( header_name ==
'!SOLVER' )
then
136 c_solver = c_solver + 1
138 else if( header_name ==
'!ISTEP' )
then
139 c_istep = c_istep + 1
140 else if( header_name ==
'!STEP' )
then
141 if( version==0 )
then
145 c_istep = c_istep + 1
147 else if( header_name ==
'!WRITE' )
then
149 if( visual==1 ) p%PARAM%fg_visual= 1
150 if( result==1 ) p%PARAM%fg_result = 1
151 c_output = c_output+1
152 else if( header_name ==
'!ECHO' )
then
155 else if( header_name ==
'!RESTART' )
then
157 fstrsolid%restart_nout= nout
158 fstrdynamic%restart_nout= nout
159 fstrheat%restart_nout= nout
160 else if( header_name ==
'!ORIENTATION' )
then
161 c_localcoord = c_localcoord + 1
162 else if( header_name ==
'!AUTOINC_PARAM' )
then
163 c_aincparam = c_aincparam + 1
164 else if( header_name ==
'!TIME_POINTS' )
then
165 c_timepoints = c_timepoints + 1
166 else if( header_name ==
'!OUTPUT_SSTYPE' )
then
168 else if( header_name ==
'!INITIAL_CONDITION' )
then
169 c_initial = c_initial + 1
170 else if( header_name ==
'!AMPLITUDE' )
then
171 c_amplitude = c_amplitude + 1
176 else if( header_name ==
'!STATIC' )
then
177 c_static = c_static + 1
179 else if( header_name ==
'!BOUNDARY' )
then
180 c_boundary = c_boundary + 1
182 else if( header_name ==
'!CLOAD' )
then
183 c_cload = c_cload + 1
186 else if( header_name ==
'!DLOAD' )
then
187 c_dload = c_dload + 1
189 else if( header_name ==
'!CONTACT_ALGO' )
then
191 else if( header_name ==
'!CONTACT' )
then
193 c_contact = c_contact + n
194 else if( header_name ==
'!EMBED' )
then
196 c_embed = c_embed + n
197 else if( header_name ==
'!CONTACT_PARAM' )
then
198 c_contactparam = c_contactparam + 1
199 else if( header_name ==
'!CONTACT_INTERFERENCE' )
then
201 c_contact_if = c_contact_if + n
202 else if( header_name ==
'!MATERIAL' )
then
203 c_material = c_material + 1
204 else if( header_name ==
'!TEMPERATURE' )
then
205 c_temperature = c_temperature + 1
207 else if( header_name ==
'!SPRING' )
then
208 c_spring = c_spring + 1
210 else if( header_name ==
'!REFTEMP' )
then
211 c_reftemp = c_reftemp + 1
216 else if( header_name ==
'!HEAT' )
then
218 else if( header_name ==
'!FIXTEMP' )
then
219 c_fixtemp = c_fixtemp + 1
221 else if( header_name ==
'!CFLUX' )
then
222 c_cflux = c_cflux + 1
224 else if( header_name ==
'!DFLUX' )
then
225 c_dflux = c_dflux + 1
227 else if( header_name ==
'!SFLUX' )
then
228 c_sflux = c_sflux + 1
230 else if( header_name ==
'!FILM' )
then
233 else if( header_name ==
'!SFILM' )
then
234 c_sfilm = c_sfilm + 1
236 else if( header_name ==
'!RADIATE' )
then
237 c_radiate = c_radiate + 1
239 else if( header_name ==
'!SRADIATE' )
then
240 c_sradiate = c_sradiate + 1
242 else if( header_name ==
'!WELD_LINE' )
then
243 c_weldline = c_weldline + 1
247 else if( header_name ==
'!EIGEN' )
then
248 c_eigen = c_eigen + 1
253 else if( header_name ==
'!DYNAMIC' )
then
254 c_dynamic = c_dynamic + 1
256 else if( header_name ==
'!VELOCITY' )
then
257 c_velocity = c_velocity + 1
259 else if( header_name ==
'!ACCELERATION' )
then
260 c_acceleration = c_acceleration + 1
262 else if( header_name ==
'!FLOAD' )
then
263 c_fload = c_fload + 1
265 else if( header_name ==
'!EIGENREAD' )
then
266 c_eigenread = c_eigenread + 1
271 else if( header_name ==
'!COUPLE' )
then
272 c_couple = c_couple + 1
277 else if( header_name ==
'!MPC' )
then
283 else if( header_name ==
'!INCLUDE' )
then
284 ctrl_list(ictrl) = ctrl
289 write(*,*)
'### Error: Cannot open FSTR control file : ', input_filename
290 write(
ilog,*)
'### Error: Cannot open FSTR control file : ', input_filename
298 else if( header_name ==
'!END' )
then
309 ctrl = ctrl_list(ictrl)
316 fstrsolid%n_contacts = c_contact
317 if( c_contact>0 )
then
318 allocate( fstrsolid%contacts( c_contact ) )
322 fstrsolid%n_embeds = c_embed
323 if( c_embed>0 )
allocate( fstrsolid%embeds( c_embed ) )
324 if( c_weldline>0 )
allocate( fstrheat%weldline( c_weldline ) )
326 if( c_istep>0 )
allocate( fstrsolid%step_ctrl( c_istep ) )
327 if( c_localcoord>0 )
allocate( g_localcoordsys(c_localcoord) )
328 allocate( fstrparam%ainc(0:c_aincparam) )
332 if( c_timepoints>0 )
allocate( fstrparam%timepoints(c_timepoints) )
333 allocate( fstrparam%contactparam(0:c_contactparam) )
334 do i=0,c_contactparam
337 if( c_contact_if>0 )
then
338 allocate( fstrparam%contact_if( c_contact_if ) )
344 p%SOLID%is_33shell = 0
345 p%SOLID%is_33beam = 0
347 do i=1,hecmesh%n_elem_type
348 n = hecmesh%elem_type_item(i)
349 if (n == 781 .or. n == 761)
then
350 p%SOLID%is_33shell = 1
351 elseif (n == 641)
then
352 p%SOLID%is_33beam = 1
357 if( hecmesh%material%n_mat>n ) n= hecmesh%material%n_mat
358 if( n==0 ) stop
"material property not defined!"
359 allocate( fstrsolid%materials( n ) )
363 if( hecmesh%section%n_sect >0 )
then
364 do i=1,hecmesh%section%n_sect
365 if( hecmesh%section%sect_type(i) == 4 ) cycle
366 cid = hecmesh%section%sect_mat_ID_item(i)
367 if( cid>n ) stop
"Error in material property definition!"
368 if( fstrparam%nlgeom .or. fstrparam%solution_type==
kststaticeigen ) &
369 fstrsolid%materials(cid)%nlgeom_flag = 1
372 n_totlyr,alpha_over_mu, &
373 beam_radius,beam_angle1,beam_angle2,beam_angle3, &
374 beam_angle4,beam_angle5,beam_angle6)
375 fstrsolid%materials(cid)%name = hecmesh%material%mat_name(cid)
376 fstrsolid%materials(cid)%variables(
m_youngs)=ee
377 fstrsolid%materials(cid)%variables(
m_poisson)=pp
378 fstrsolid%materials(cid)%variables(
m_density)=rho
379 fstrsolid%materials(cid)%variables(
m_exapnsion)=alpha
380 fstrsolid%materials(cid)%variables(
m_thick)=thick
382 fstrsolid%materials(cid)%variables(
m_beam_radius)=beam_radius
383 fstrsolid%materials(cid)%variables(
m_beam_angle1)=beam_angle1
384 fstrsolid%materials(cid)%variables(
m_beam_angle2)=beam_angle2
385 fstrsolid%materials(cid)%variables(
m_beam_angle3)=beam_angle3
386 fstrsolid%materials(cid)%variables(
m_beam_angle4)=beam_angle4
387 fstrsolid%materials(cid)%variables(
m_beam_angle5)=beam_angle5
388 fstrsolid%materials(cid)%variables(
m_beam_angle6)=beam_angle6
389 fstrsolid%materials(cid)%mtype =
elastic
390 fstrsolid%materials(cid)%totallyr = n_totlyr
391 fstrsolid%materials(cid)%shell_var => shmat
396 allocate( fstrsolid%sections(hecmesh%section%n_sect) )
397 do i=1,hecmesh%section%n_sect
400 if( p%PARAM%nlgeom )
then
403 fstrsolid%sections(i)%elemopt361 =
kel361ic
405 else if( p%PARAM%solution_type==
ksteigen )
then
406 fstrsolid%sections(i)%elemopt361 =
kel361ic
410 fstrsolid%sections(i)%elemopt361 =
kel361fi
412 fstrsolid%sections(i)%elemopt341 =
kel341fi
415 allocate( fstrsolid%output_ctrl( 4 ) )
417 fstrsolid%output_ctrl( 1 )%filename = trim(logfilename)
418 fstrsolid%output_ctrl( 1 )%filenum =
ilog
441 fstrsolid%elemopt361 = 0
442 fstrsolid%AutoINC_stat = 0
443 fstrsolid%CutBack_stat = 0
444 fstrsolid%NRstat_i(:) = 0
445 fstrsolid%NRstat_r(:) = 0.d0
450 if( header_name ==
'!ORIENTATION' )
then
451 c_localcoord = c_localcoord + 1
453 write(*,*)
'### Error: Fail in read in ORIENTATION definition : ', c_localcoord
454 write(
ilog,*)
'### Error: Fail in read in ORIENTATION definition : ', c_localcoord
459 elseif( header_name ==
'!CONTACT' )
then
462 ,ee, pp, rho, alpha, p%PARAM%contact_algo, mname ) )
then
463 write(*,*)
'### Error: Fail in read in contact condition : ', c_contact
464 write(
ilog,*)
'### Error: Fail in read in contact condition : ', c_contact
468 do i=1,
size(fstrparam%contactparam)-1
469 if(
fstr_streqr( fstrparam%contactparam(i)%name, mname ) )
then
474 if( ee>0.d0 )
cdotp = ee
475 if( pp>0.d0 )
mut = pp
476 if( rho>0.d0 )
cgn = rho
477 if( alpha>0.d0 )
cgt = alpha
479 if( .not. fstr_contact_check( fstrsolid%contacts(c_contact+i), p%MESH ) )
then
480 write(*,*)
'### Error: Inconsistence in contact and surface definition : ' , i+c_contact
481 write(
ilog,*)
'### Error: Inconsistence in contact and surface definition : ', i+c_contact
485 isok = fstr_contact_init( fstrsolid%contacts(c_contact+i), p%MESH, fstrparam%contactparam(cparam_id),
myrank)
487 isok = fstr_contact_init( fstrsolid%contacts(c_contact+i), p%MESH, fstrparam%contactparam(cparam_id))
492 c_contact = c_contact+n
495 elseif( header_name ==
'!EMBED' )
then
497 if( .not.
fstr_ctrl_get_embed( ctrl, n, fstrsolid%embeds(c_embed+1:c_embed+n), mname ) )
then
498 write(*,*)
'### Error: Fail in read in embed condition : ', c_embed
499 write(
ilog,*)
'### Error: Fail in read in embed condition : ', c_embed
503 do i=1,
size(fstrparam%contactparam)-1
504 if(
fstr_streqr( fstrparam%contactparam(i)%name, mname ) )
then
509 if( .not. fstr_contact_check( fstrsolid%embeds(c_embed+i), p%MESH ) )
then
510 write(*,*)
'### Error: Inconsistence in contact and surface definition : ' , i+c_embed
511 write(
ilog,*)
'### Error: Inconsistence in contact and surface definition : ', i+c_embed
515 isok = fstr_embed_init( fstrsolid%embeds(c_embed+i), p%MESH, fstrparam%contactparam(cparam_id),
myrank)
517 isok = fstr_embed_init( fstrsolid%embeds(c_embed+i), p%MESH, fstrparam%contactparam(cparam_id))
523 else if( header_name ==
'!ISTEP' )
then
525 if( .not.
fstr_ctrl_get_istep( ctrl, hecmesh, fstrsolid%step_ctrl(c_istep), mname, mname2 ) )
then
526 write(*,*)
'### Error: Fail in read in step definition : ' , c_istep
527 write(
ilog,*)
'### Error: Fail in read in step definition : ', c_istep
530 if(
associated(fstrparam%timepoints) )
then
531 do i=1,
size(fstrparam%timepoints)
532 if(
fstr_streqr( fstrparam%timepoints(i)%name, mname ) )
then
533 fstrsolid%step_ctrl(c_istep)%timepoint_id = i;
exit
537 if(
associated(fstrparam%ainc) )
then
538 do i=1,
size(fstrparam%ainc)
539 if(
fstr_streqr( fstrparam%ainc(i)%name, mname2 ) )
then
540 fstrsolid%step_ctrl(c_istep)%AincParam_id = i;
exit
544 else if( header_name ==
'!STEP' .and. version>=1 )
then
546 if( .not.
fstr_ctrl_get_istep( ctrl, hecmesh, fstrsolid%step_ctrl(c_istep), mname, mname2 ) )
then
547 write(*,*)
'### Error: Fail in read in step definition : ' , c_istep
548 write(
ilog,*)
'### Error: Fail in read in step definition : ', c_istep
551 if(
associated(fstrparam%timepoints) )
then
552 do i=1,
size(fstrparam%timepoints)
553 if(
fstr_streqr( fstrparam%timepoints(i)%name, mname ) )
then
554 fstrsolid%step_ctrl(c_istep)%timepoint_id = i;
exit
558 if(
associated(fstrparam%ainc) )
then
559 do i=1,
size(fstrparam%ainc)-1
560 if(
fstr_streqr( fstrparam%ainc(i)%name, mname2 ) )
then
561 fstrsolid%step_ctrl(c_istep)%AincParam_id = i;
exit
566 else if( header_name ==
'!HEAT' )
then
570 else if( header_name ==
'!WELD_LINE' )
then
571 fstrheat%WL_tot = fstrheat%WL_tot+1
573 write(*,*)
'### Error: Fail in read in Weld Line definition : ' , fstrheat%WL_tot
574 write(
ilog,*)
'### Error: Fail in read in Weld Line definition : ', fstrheat%WL_tot
578 else if( header_name ==
'!INITIAL_CONDITION' .or. header_name ==
'!INITIAL CONDITION' )
then
579 c_initial = c_initial+1
581 write(*,*)
'### Error: Fail in read in INITIAL CONDITION definition : ' ,c_initial
582 write(
ilog,*)
'### Error: Fail in read in INITIAL CONDITION definition : ', c_initial
586 else if( header_name ==
'!SECTION' )
then
587 c_section = c_section+1
589 write(*,*)
'### Error: Fail in read in SECTION definition : ' , c_section
590 write(
ilog,*)
'### Error: Fail in read in SECTION definition : ', c_section
594 else if( header_name ==
'!ELEMOPT' )
then
595 c_elemopt = c_elemopt+1
597 write(*,*)
'### Error: Fail in read in ELEMOPT definition : ' , c_elemopt
598 write(
ilog,*)
'### Error: Fail in read in ELEMOPT definition : ', c_elemopt
603 else if( header_name ==
'!MATERIAL' )
then
604 c_material = c_material+1
606 write(*,*)
'### Error: Fail in read in material definition : ' , c_material
607 write(
ilog,*)
'### Error: Fail in read in material definition : ', c_material
611 if(cache < hecmesh%material%n_mat)
then
612 if(
fstr_streqr( hecmesh%material%mat_name(cache), mname ))
then
618 do i=1,hecmesh%material%n_mat
619 if(
fstr_streqr( hecmesh%material%mat_name(i), mname ) )
then
627 write(*,*)
'### Error: Fail in read in material definition : ' , c_material
628 write(
ilog,*)
'### Error: Fail in read in material definition : ', c_material
631 fstrsolid%materials(cid)%name = mname
632 if(c_material>hecmesh%material%n_mat)
call initmaterial( fstrsolid%materials(cid) )
634 else if( header_name ==
'!ELASTIC' )
then
635 if( c_material >0 )
then
637 fstrsolid%materials(cid)%mtype, &
638 fstrsolid%materials(cid)%nlgeom_flag, &
639 fstrsolid%materials(cid)%variables, &
640 fstrsolid%materials(cid)%dict)/=0 )
then
641 write(*,*)
'### Error: Fail in read in elasticity definition : ' , cid
642 write(
ilog,*)
'### Error: Fail in read in elasticity definition : ', cid
646 else if( header_name ==
'!PLASTIC' )
then
649 fstrsolid%materials(cid)%mtype, &
650 fstrsolid%materials(cid)%nlgeom_flag, &
651 fstrsolid%materials(cid)%variables, &
652 fstrsolid%materials(cid)%table, &
653 fstrsolid%materials(cid)%dict)/=0 )
then
654 write(*,*)
'### Error: Fail in read in plasticity definition : ' , cid
655 write(
ilog,*)
'### Error: Fail in read in plasticity definition : ', cid
659 else if( header_name ==
'!HYPERELASTIC' )
then
662 fstrsolid%materials(cid)%mtype, &
663 fstrsolid%materials(cid)%nlgeom_flag, &
664 fstrsolid%materials(cid)%variables )/=0 )
then
665 write(*,*)
'### Error: Fail in read in elasticity definition : ' , cid
666 write(
ilog,*)
'### Error: Fail in read in elasticity definition : ', cid
670 else if( header_name ==
'!VISCOELASTIC' )
then
673 fstrsolid%materials(cid)%mtype, &
674 fstrsolid%materials(cid)%nlgeom_flag, &
675 fstrsolid%materials(cid)%dict)/=0 )
then
676 write(*,*)
'### Error: Fail in read in plasticity definition : ' , cid
677 write(
ilog,*)
'### Error: Fail in read in plasticity definition : ', cid
681 else if( header_name ==
'!TRS' )
then
684 write(*,*)
'### WARNING: TRS can only be defined for viscoelastic material! It is ignored! '
685 write(
ilog,*)
'### WARNING: TRS can only be defined for viscoelastic material! It is ignored! '
687 if(
fstr_ctrl_get_trs( ctrl, fstrsolid%materials(cid)%mtype, fstrsolid%materials(cid)%variables)/=0 )
then
688 write(*,*)
'### Error: Fail in read in TRS definition : ' , cid
689 write(
ilog,*)
'### Error: Fail in read in TRS definition : ', cid
694 else if( header_name ==
'!CREEP' )
then
697 fstrsolid%materials(cid)%mtype, &
698 fstrsolid%materials(cid)%nlgeom_flag, &
699 fstrsolid%materials(cid)%dict)/=0 )
then
700 write(*,*)
'### Error: Fail in read in plasticity definition : ' , cid
701 write(
ilog,*)
'### Error: Fail in read in plasticity definition : ', cid
705 else if( header_name ==
'!DENSITY' )
then
708 write(*,*)
'### Error: Fail in read in density definition : ' , cid
709 write(
ilog,*)
'### Error: Fail in read in density definition : ', cid
713 else if( header_name ==
'!EXPANSION_COEF' .or. header_name ==
'!EXPANSION_COEFF' .or. &
714 header_name ==
'!EXPANSION')
then
717 fstrsolid%materials(cid)%dict)/=0 )
then
718 write(*,*)
'### Error: Fail in read in expansion coefficient definition : ' , cid
719 write(
ilog,*)
'### Error: Fail in read in expansion coefficient definition : ', cid
723 else if( header_name ==
'!FLUID' )
then
724 if( c_material >0 )
then
726 fstrsolid%materials(cid)%mtype, &
727 fstrsolid%materials(cid)%nlgeom_flag, &
728 fstrsolid%materials(cid)%variables, &
729 fstrsolid%materials(cid)%dict)/=0 )
then
730 write(*,*)
'### Error: Fail in read in fluid definition : ' , cid
731 write(
ilog,*)
'### Error: Fail in read in fluid definition : ', cid
735 else if( header_name ==
'!SPRING_D' )
then
736 if( c_material >0 )
then
738 fstrsolid%materials(cid)%mtype, &
739 fstrsolid%materials(cid)%nlgeom_flag, &
740 fstrsolid%materials(cid)%variables_i, &
741 fstrsolid%materials(cid)%dict)/=0 )
then
742 write(*,*)
'### Error: Fail in read in spring_d definition : ' , cid
743 write(
ilog,*)
'### Error: Fail in read in spring_d definition : ', cid
747 else if( header_name ==
'!SPRING_A' )
then
748 if( c_material >0 )
then
750 fstrsolid%materials(cid)%mtype, &
751 fstrsolid%materials(cid)%nlgeom_flag, &
752 fstrsolid%materials(cid)%variables_i, &
753 fstrsolid%materials(cid)%dict)/=0 )
then
754 write(*,*)
'### Error: Fail in read in spring_a definition : ' , cid
755 write(
ilog,*)
'### Error: Fail in read in spring_a definition : ', cid
759 else if( header_name ==
'!DASHPOT_D' )
then
760 if( c_material >0 )
then
762 fstrsolid%materials(cid)%mtype, &
763 fstrsolid%materials(cid)%nlgeom_flag, &
764 fstrsolid%materials(cid)%variables_i, &
765 fstrsolid%materials(cid)%dict)/=0 )
then
766 write(*,*)
'### Error: Fail in read in spring_d definition : ' , cid
767 write(
ilog,*)
'### Error: Fail in read in spring_d definition : ', cid
771 else if( header_name ==
'!DASHPOT_A' )
then
772 if( c_material >0 )
then
774 fstrsolid%materials(cid)%mtype, &
775 fstrsolid%materials(cid)%nlgeom_flag, &
776 fstrsolid%materials(cid)%variables_i, &
777 fstrsolid%materials(cid)%dict)/=0 )
then
778 write(*,*)
'### Error: Fail in read in spring_a definition : ' , cid
779 write(
ilog,*)
'### Error: Fail in read in spring_a definition : ', cid
783 else if( header_name ==
'!USER_MATERIAL' )
then
786 fstrsolid%materials(cid)%nlgeom_flag, fstrsolid%materials(cid)%nfstatus, &
787 fstrsolid%materials(cid)%variables(101:) )/=0 )
then
788 write(*,*)
'### Error: Fail in read in user defined material : ' , cid
789 write(
ilog,*)
'### Error: Fail in read in user defined material : ', cid
796 else if( header_name ==
'!WRITE' )
then
798 if( islog == 1 )
then
800 outctrl%filename = trim(logfilename)
801 outctrl%filenum =
ilog
804 if( femap == 1 )
then
806 write( outctrl%filename, *)
'utable.',
myrank,
".dat"
807 outctrl%filenum =
iutb
809 open( unit=outctrl%filenum, file=outctrl%filename, status=
'REPLACE' )
811 if( result == 1 )
then
815 if( visual == 1 )
then
820 else if( header_name ==
'!OUTPUT_RES' )
then
823 write(*,*)
'### Error: Fail in read in node output definition : ' , c_output
824 write(
ilog,*)
'### Error: Fail in read in node output definition : ', c_output
827 if( fstrsolid%output_ctrl(c_output)%outinfo%grp_id_name /=
'ALL' )
then
829 do i=1,hecmesh%node_group%n_grp
830 if( fstrsolid%output_ctrl(c_output)%outinfo%grp_id_name == hecmesh%node_group%grp_name(i) )
then
831 fstrsolid%output_ctrl(c_output)%outinfo%grp_id = i;
exit
835 else if( header_name ==
'!OUTPUT_VIS' )
then
838 write(*,*)
'### Error: Fail in read in element output definition : ' , c_output
839 write(
ilog,*)
'### Error: Fail in read in element output definition : ', c_output
842 if( fstrsolid%output_ctrl(c_output)%outinfo%grp_id_name /=
'ALL' )
then
844 do i=1,hecmesh%node_group%n_grp
845 if( fstrsolid%output_ctrl(c_output)%outinfo%grp_id_name == hecmesh%node_group%grp_name(i) )
then
846 fstrsolid%output_ctrl(c_output)%outinfo%grp_id = i;
exit
850 else if( header_name ==
'!AUTOINC_PARAM' )
then
851 c_aincparam = c_aincparam + 1
853 write(*,*)
'### Error: Fail in read in AUTOINC_PARAM definition : ' , c_aincparam
854 write(
ilog,*)
'### Error: Fail in read in AUTOINC_PARAM definition : ', c_aincparam
857 else if( header_name ==
'!TIME_POINTS' )
then
858 c_timepoints = c_timepoints + 1
860 write(*,*)
'### Error: Fail in read in TIME_POINTS definition : ' , c_timepoints
861 write(
ilog,*)
'### Error: Fail in read in TIME_POINTS definition : ', c_timepoints
864 else if( header_name ==
'!CONTACT_PARAM' )
then
865 c_contactparam = c_contactparam + 1
867 write(*,*)
'### Error: Fail in read in CONTACT_PARAM definition : ' , c_contactparam
868 write(
ilog,*)
'### Error: Fail in read in CONTACT_PARAM definition : ', c_contactparam
871 else if( header_name ==
'!CONTACT_INTERFERENCE' )
then
874 write(*,*)
'### Error: Fail in read in CONTACT_INTERFERENCE definition : ' , c_contact_if
875 write(
ilog,*)
'### Error: Fail in read in CONTACT_INTERFERENCE definition : ', c_contact_if
879 if( check_apply_contact_if(fstrparam%contact_if(c_contact_if+i), fstrsolid%contacts) /= 0)
then
880 write(*,*)
'### Error:(INTERFERENCE) Inconsistence of contact_pair in CONTACTS: ' , i+c_contact_if
881 write(
ilog,*)
'### Error:(INTERFERENCE) Inconsistence of contact_pair in CONTACTS: ', i+c_contact_if
885 c_contact_if = c_contact_if + n
886 else if( header_name ==
'!ULOAD' )
then
888 write(*,*)
'### Error: Fail in read in ULOAD definition : '
889 write(
ilog,*)
'### Error: Fail in read in ULOAD definition : '
893 else if( header_name ==
'!INCLUDE' )
then
894 ctrl_list(ictrl) = ctrl
899 write(*,*)
'### Error: Cannot open FSTR control file : ', input_filename
900 write(
ilog,*)
'### Error: Cannot open FSTR control file : ', input_filename
906 else if( header_name ==
'!END' )
then
917 ctrl = ctrl_list(ictrl)
925 if( .not. p%PARAM%nlgeom )
then
927 fstrsolid%materials(i)%nlgeom_flag = 0
931 if( fstrsolid%TEMP_ngrp_tot > 0 .or. fstrsolid%TEMP_irres > 0 )
then
932 allocate ( fstrsolid%temperature( hecmesh%n_node ) ,stat=ierror )
933 if( ierror /= 0 )
then
934 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, TEMPERATURE>'
935 write(
idbg,*)
' rank = ',
myrank,
' ierror = ',ierror
937 call hecmw_abort( hecmw_comm_get_comm())
940 allocate ( fstrsolid%last_temp( hecmesh%n_node ) ,stat=ierror )
941 if( ierror /= 0 )
then
942 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, LAST_TEMP>'
943 write(
idbg,*)
' rank = ',
myrank,
' ierror = ',ierror
945 call hecmw_abort( hecmw_comm_get_comm())
947 fstrsolid%last_temp = 0.d0
948 allocate ( fstrsolid%temp_bak( hecmesh%n_node ) ,stat=ierror )
949 if( ierror /= 0 )
then
950 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, TEMP_BAK>'
951 write(
idbg,*)
' rank = ',
myrank,
' ierror = ',ierror
953 call hecmw_abort( hecmw_comm_get_comm())
955 fstrsolid%temp_bak = 0.d0
958 if(
associated(fstrsolid%step_ctrl) )
then
959 fstrsolid%nstep_tot =
size(fstrsolid%step_ctrl)
963 if( p%PARAM%solution_type==
kststatic .and. p%PARAM%nlgeom )
then
964 write( *,* )
" ERROR: STEP not defined!"
965 write(
idbg,* )
"ERROR: STEP not defined!"
967 call hecmw_abort( hecmw_comm_get_comm())
970 if(
myrank==0 )
write(*,*)
"Step control not defined! Using default step=1"
971 fstrsolid%nstep_tot = 1
972 allocate( fstrsolid%step_ctrl(1) )
974 n = fstrsolid%BOUNDARY_ngrp_tot
975 if( n>0 )
allocate( fstrsolid%step_ctrl(1)%Boundary(n) )
977 fstrsolid%step_ctrl(1)%Boundary(i) = fstrsolid%BOUNDARY_ngrp_GRPID(i)
979 n = fstrsolid%CLOAD_ngrp_tot + fstrsolid%DLOAD_ngrp_tot + fstrsolid%TEMP_ngrp_tot + fstrsolid%SPRING_ngrp_tot
980 if( n>0 )
allocate( fstrsolid%step_ctrl(1)%Load(n) )
982 do i = 1, fstrsolid%CLOAD_ngrp_tot
984 fstrsolid%step_ctrl(1)%Load(n) = fstrsolid%CLOAD_ngrp_GRPID(i)
986 do i = 1, fstrsolid%DLOAD_ngrp_tot
988 fstrsolid%step_ctrl(1)%Load(n) = fstrsolid%DLOAD_ngrp_GRPID(i)
990 do i = 1, fstrsolid%TEMP_ngrp_tot
992 fstrsolid%step_ctrl(1)%Load(n) = fstrsolid%TEMP_ngrp_GRPID(i)
994 do i = 1, fstrsolid%SPRING_ngrp_tot
996 fstrsolid%step_ctrl(1)%Load(n) = fstrsolid%SPRING_ngrp_GRPID(i)
1005 if( p%PARAM%solution_type ==
kstheat)
then
1006 p%PARAM%fg_irres = fstrsolid%output_ctrl(3)%frequency
1007 p%PARAM%fg_iwres = fstrsolid%output_ctrl(4)%frequency
1011 do i=1,hecmesh%section%n_sect
1012 cid = hecmesh%section%sect_mat_ID_item(i)
1013 n = fstrsolid%materials(cid)%totallyr
1014 if (n > n_totlyr)
then
1018 p%SOLID%max_lyr = n_totlyr
1029 type(hecmwst_local_mesh),
target :: hecMESH
1032 integer :: ndof, ntotal, ierror, ic_type
1036 fstrsolid%BOUNDARY_ngrp_tot = 0
1037 fstrsolid%BOUNDARY_ngrp_rot = 0
1038 fstrsolid%CLOAD_ngrp_tot = 0
1039 fstrsolid%CLOAD_ngrp_rot = 0
1040 fstrsolid%DLOAD_ngrp_tot = 0
1041 fstrsolid%DLOAD_follow = 1
1042 fstrsolid%TEMP_ngrp_tot = 0
1043 fstrsolid%SPRING_ngrp_tot = 0
1044 fstrsolid%TEMP_irres = 0
1045 fstrsolid%TEMP_tstep = 1
1046 fstrsolid%TEMP_interval = 1
1047 fstrsolid%TEMP_rtype = 1
1048 fstrsolid%TEMP_factor = 1.d0
1049 fstrsolid%VELOCITY_ngrp_tot = 0
1050 fstrsolid%ACCELERATION_ngrp_tot = 0
1051 fstrsolid%COUPLE_ngrp_tot = 0
1053 fstrsolid%restart_nout= 0
1054 fstrsolid%is_smoothing_active = .false.
1061 type(hecmwst_local_mesh),
target :: hecMESH
1064 integer :: ndof, ntotal, ierror, ic_type
1067 ntotal=ndof*hecmesh%n_node
1069 allocate ( fstrsolid%GL( ntotal ) ,stat=ierror )
1070 if( ierror /= 0 )
then
1071 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, GL>'
1072 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1074 call hecmw_abort( hecmw_comm_get_comm())
1076 allocate ( fstrsolid%GL0( ntotal ) ,stat=ierror )
1077 if( ierror /= 0 )
then
1078 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, GL0>'
1079 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1081 call hecmw_abort( hecmw_comm_get_comm())
1083 allocate ( fstrsolid%EFORCE( ntotal ) ,stat=ierror )
1084 if( ierror /= 0 )
then
1085 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, EFORCE>'
1086 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1088 call hecmw_abort( hecmw_comm_get_comm())
1097 allocate ( fstrsolid%unode( ntotal ) ,stat=ierror )
1098 if( ierror /= 0 )
then
1099 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, unode>'
1100 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1102 call hecmw_abort( hecmw_comm_get_comm())
1104 allocate ( fstrsolid%unode_bak( ntotal ) ,stat=ierror )
1105 if( ierror /= 0 )
then
1106 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, unode>'
1107 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1109 call hecmw_abort( hecmw_comm_get_comm())
1111 allocate ( fstrsolid%dunode( ntotal ) ,stat=ierror )
1112 if( ierror /= 0 )
then
1113 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, dunode>'
1114 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1116 call hecmw_abort( hecmw_comm_get_comm())
1118 allocate ( fstrsolid%ddunode( ntotal ) ,stat=ierror )
1119 if( ierror /= 0 )
then
1120 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, ddunode>'
1121 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1123 call hecmw_abort( hecmw_comm_get_comm())
1125 allocate ( fstrsolid%QFORCE( ntotal ) ,stat=ierror )
1126 if( ierror /= 0 )
then
1127 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, QFORCE>'
1128 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1130 call hecmw_abort( hecmw_comm_get_comm())
1132 allocate ( fstrsolid%QFORCE_bak( ntotal ) ,stat=ierror )
1133 if( ierror /= 0 )
then
1134 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, QFORCE_bak>'
1135 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1137 call hecmw_abort( hecmw_comm_get_comm())
1140 fstrsolid%GL(:)=0.d0
1141 fstrsolid%GL0(:)=0.d0
1143 fstrsolid%unode(:) = 0.d0
1144 fstrsolid%unode_bak(:) = 0.d0
1145 fstrsolid%dunode(:) = 0.d0
1146 fstrsolid%ddunode(:) = 0.d0
1147 fstrsolid%QFORCE(:) = 0.d0
1148 fstrsolid%QFORCE_bak(:) = 0.d0
1149 fstrsolid%FACTOR( 1:2 ) = 0.d0
1152 fstrsolid%n_fix_mpc = hecmesh%mpc%n_mpc
1153 if( fstrsolid%n_fix_mpc>0 )
then
1154 allocate( fstrsolid%mpc_const( fstrsolid%n_fix_mpc ) )
1155 fstrsolid%mpc_const(:) = hecmesh%mpc%mpc_const(:)
1159 fstrsolid%FACTOR(2)=1.d0
1160 fstrsolid%FACTOR(1)=0.d0
1164 type(hecmwst_local_mesh),
target :: hecMESH
1167 logical,
allocatable :: is_selem_list(:)
1170 do isect=1,hecmesh%section%n_sect
1171 if( fstrsolid%sections(isect)%elemopt341 ==
kel341sesns ) fstrsolid%is_smoothing_active = .true.
1173 if( .not. fstrsolid%is_smoothing_active )
return
1175 allocate(is_selem_list(hecmesh%n_elem))
1176 is_selem_list(:) = .false.
1178 do i=1,hecmesh%n_elem
1179 isect= hecmesh%section_ID(i)
1180 if( hecmesh%elem_type(i) /= fe_tet4n ) cycle
1181 if( fstrsolid%sections(isect)%elemopt341 ==
kel341sesns ) is_selem_list(i) = .true.
1184 call hecmw_create_smoothing_element_connectivity(hecmesh,is_selem_list)
1186 deallocate(is_selem_list)
1192 type(hecmwst_local_mesh),
target :: hecMESH
1195 integer :: i, isect, nodlocal(fstrSOLID%max_ncon), iiS, nn, con_stf
1197 if( fstrsolid%max_ncon_stf > 20 ) fstrsolid%max_ncon_stf = 20
1199 do i=1,hecmesh%n_elem
1200 isect= hecmesh%section_ID(i)
1201 if( hecmesh%elem_type(i) /= fe_tet4n ) cycle
1202 if( fstrsolid%sections(isect)%elemopt341 /=
kel341sesns ) cycle
1203 iis = hecmesh%elem_node_index(i-1)
1204 nn = hecmesh%elem_node_index(i-1) - iis
1205 nodlocal(1:nn) = hecmesh%elem_node_item(iis+1:iis+nn)
1207 if( con_stf > fstrsolid%max_ncon_stf ) fstrsolid%max_ncon_stf = con_stf
1216 type(hecmwst_local_mesh),
target :: hecMESH
1219 integer :: i, j, ng, isect, ndof, id, nn, n_elem
1222 if( hecmesh%n_elem <=0 )
then
1223 stop
"no element defined!"
1226 fstrsolid%maxn_gauss = 0
1227 fstrsolid%max_ncon = 0
1233 n_elem = hecmesh%elem_type_index(hecmesh%n_elem_type)
1234 allocate( fstrsolid%elements(n_elem) )
1237 fstrsolid%elements(i)%etype = hecmesh%elem_type(i)
1238 if( hecmesh%elem_type(i)==301 ) fstrsolid%elements(i)%etype=111
1239 if (hecmw_is_etype_link(fstrsolid%elements(i)%etype)) cycle
1240 if (hecmw_is_etype_patch(fstrsolid%elements(i)%etype)) cycle
1242 if( ng > fstrsolid%maxn_gauss ) fstrsolid%maxn_gauss = ng
1243 if( ng > 0 )
allocate( fstrsolid%elements(i)%gausses( ng ) )
1245 isect= hecmesh%section_ID(i)
1248 id=hecmesh%section%sect_opt(isect)
1250 fstrsolid%elements(i)%iset=1
1251 else if( id==1)
then
1252 fstrsolid%elements(i)%iset=0
1253 else if( id==2)
then
1254 fstrsolid%elements(i)%iset=2
1258 if( isect<0 .or. isect>hecmesh%section%n_sect ) &
1259 stop
"Error in element's section definition"
1260 id = hecmesh%section%sect_mat_ID_item(isect)
1261 fstrsolid%materials(id)%cdsys_ID = hecmesh%section%sect_orien_ID(isect)
1263 fstrsolid%elements(i)%gausses(j)%pMaterial => fstrsolid%materials(id)
1267 nn = hecmesh%elem_node_index(i)-hecmesh%elem_node_index(i-1)
1268 allocate(fstrsolid%elements(i)%equiForces(nn*ndof))
1269 fstrsolid%elements(i)%equiForces = 0.0d0
1270 if( nn > fstrsolid%max_ncon ) fstrsolid%max_ncon = nn
1272 if( hecmesh%elem_type(i)==361 )
then
1273 if( fstrsolid%sections(isect)%elemopt361==
kel361ic )
then
1274 allocate( fstrsolid%elements(i)%aux(3,3) )
1275 fstrsolid%elements(i)%aux = 0.0d0
1281 fstrsolid%max_ncon_stf = fstrsolid%max_ncon
1284 call hecmw_allreduce_i1(hecmesh,fstrsolid%maxn_gauss,hecmw_max)
1290 integer :: i, j, ierror
1291 if(
associated(fstrsolid%materials) )
then
1292 do j=1,
size(fstrsolid%materials)
1293 call finalizematerial(fstrsolid%materials(j))
1295 deallocate( fstrsolid%materials )
1297 if( .not.
associated(fstrsolid%elements ) )
return
1298 do i=1,
size(fstrsolid%elements)
1299 if(
associated(fstrsolid%elements(i)%gausses) )
then
1300 do j=1,
size(fstrsolid%elements(i)%gausses)
1301 call fstr_finalize_gauss(fstrsolid%elements(i)%gausses(j))
1303 deallocate( fstrsolid%elements(i)%gausses )
1305 if(
associated(fstrsolid%elements(i)%equiForces) )
then
1306 deallocate(fstrsolid%elements(i)%equiForces)
1308 if(
associated(fstrsolid%elements(i)%aux) )
then
1309 deallocate(fstrsolid%elements(i)%aux)
1313 deallocate( fstrsolid%elements )
1314 if(
associated( fstrsolid%mpc_const ) )
then
1315 deallocate( fstrsolid%mpc_const )
1318 if(
associated(fstrsolid%step_ctrl) )
then
1319 do i=1,
size(fstrsolid%step_ctrl)
1322 deallocate( fstrsolid%step_ctrl )
1324 if(
associated(fstrsolid%output_ctrl) )
then
1325 do i=1,
size(fstrsolid%output_ctrl)
1326 if( fstrsolid%output_ctrl(i)%filenum==
iutb ) &
1327 close(fstrsolid%output_ctrl(i)%filenum)
1329 deallocate(fstrsolid%output_ctrl)
1331 if(
associated( fstrsolid%sections ) )
then
1332 deallocate( fstrsolid%sections )
1335 if(
associated(fstrsolid%GL) )
then
1336 deallocate(fstrsolid%GL ,stat=ierror)
1337 if( ierror /= 0 )
then
1338 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, GL>'
1340 call hecmw_abort( hecmw_comm_get_comm())
1343 if(
associated(fstrsolid%EFORCE) )
then
1344 deallocate(fstrsolid%EFORCE ,stat=ierror)
1345 if( ierror /= 0 )
then
1346 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, EFORCE>'
1348 call hecmw_abort( hecmw_comm_get_comm())
1351 if(
associated(fstrsolid%unode) )
then
1352 deallocate(fstrsolid%unode ,stat=ierror)
1353 if( ierror /= 0 )
then
1354 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, unode>'
1356 call hecmw_abort( hecmw_comm_get_comm())
1359 if(
associated(fstrsolid%unode_bak) )
then
1360 deallocate(fstrsolid%unode_bak ,stat=ierror)
1361 if( ierror /= 0 )
then
1362 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, unode_bak>'
1364 call hecmw_abort( hecmw_comm_get_comm())
1367 if(
associated(fstrsolid%dunode) )
then
1368 deallocate(fstrsolid%dunode ,stat=ierror)
1369 if( ierror /= 0 )
then
1370 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, dunode>'
1372 call hecmw_abort( hecmw_comm_get_comm())
1375 if(
associated(fstrsolid%ddunode) )
then
1376 deallocate(fstrsolid%ddunode ,stat=ierror)
1377 if( ierror /= 0 )
then
1378 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, ddunode>'
1380 call hecmw_abort( hecmw_comm_get_comm())
1383 if(
associated(fstrsolid%QFORCE) )
then
1384 deallocate(fstrsolid%QFORCE ,stat=ierror)
1385 if( ierror /= 0 )
then
1386 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, QFORCE>'
1388 call hecmw_abort( hecmw_comm_get_comm())
1391 if(
associated(fstrsolid%temperature) )
then
1392 deallocate(fstrsolid%temperature ,stat=ierror)
1393 if( ierror /= 0 )
then
1394 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, temperature>'
1396 call hecmw_abort( hecmw_comm_get_comm())
1399 if(
associated(fstrsolid%last_temp) )
then
1400 deallocate(fstrsolid%last_temp ,stat=ierror)
1401 if( ierror /= 0 )
then
1402 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, reftemp>'
1404 call hecmw_abort( hecmw_comm_get_comm())
1407 if(
associated(fstrsolid%temp_bak) )
then
1408 deallocate(fstrsolid%temp_bak ,stat=ierror)
1409 if( ierror /= 0 )
then
1410 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, reftemp>'
1412 call hecmw_abort( hecmw_comm_get_comm())
1417 if(
associated(fstrsolid%BOUNDARY_ngrp_GRPID) )
then
1418 deallocate(fstrsolid%BOUNDARY_ngrp_GRPID, stat=ierror)
1419 if( ierror /= 0 )
then
1420 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, BOUNDARY_ngrp_GRPID>'
1422 call hecmw_abort( hecmw_comm_get_comm())
1425 if(
associated(fstrsolid%BOUNDARY_ngrp_ID) )
then
1426 deallocate(fstrsolid%BOUNDARY_ngrp_ID, stat=ierror)
1427 if( ierror /= 0 )
then
1428 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, BOUNDARY_ngrp_ID>'
1430 call hecmw_abort( hecmw_comm_get_comm())
1433 if(
associated(fstrsolid%BOUNDARY_ngrp_type) )
then
1434 deallocate(fstrsolid%BOUNDARY_ngrp_type, stat=ierror)
1435 if( ierror /= 0 )
then
1436 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, BOUNDARY_ngrp_type>'
1438 call hecmw_abort( hecmw_comm_get_comm())
1441 if(
associated(fstrsolid%BOUNDARY_ngrp_val) )
then
1442 deallocate(fstrsolid%BOUNDARY_ngrp_val, stat=ierror)
1443 if( ierror /= 0 )
then
1444 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, BOUNDARY_ngrp_val>'
1446 call hecmw_abort( hecmw_comm_get_comm())
1449 if(
associated(fstrsolid%BOUNDARY_ngrp_amp) )
then
1450 deallocate(fstrsolid%BOUNDARY_ngrp_amp, stat=ierror)
1451 if( ierror /= 0 )
then
1452 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, BOUNDARY_ngrp_amp>'
1454 call hecmw_abort( hecmw_comm_get_comm())
1457 if(
associated(fstrsolid%BOUNDARY_ngrp_istot) )
then
1458 deallocate(fstrsolid%BOUNDARY_ngrp_istot, stat=ierror)
1459 if( ierror /= 0 )
then
1460 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, BOUNDARY_ngrp_istot>'
1462 call hecmw_abort( hecmw_comm_get_comm())
1465 if(
associated(fstrsolid%BOUNDARY_ngrp_rotID) )
then
1466 deallocate(fstrsolid%BOUNDARY_ngrp_rotID, stat=ierror)
1467 if( ierror /= 0 )
then
1468 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, BOUNDARY_ngrp_rotID>'
1470 call hecmw_abort( hecmw_comm_get_comm())
1473 if(
associated(fstrsolid%BOUNDARY_ngrp_centerID) )
then
1474 deallocate(fstrsolid%BOUNDARY_ngrp_centerID, stat=ierror)
1475 if( ierror /= 0 )
then
1476 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, BOUNDARY_ngrp_centerID>'
1478 call hecmw_abort( hecmw_comm_get_comm())
1483 if(
associated(fstrsolid%CLOAD_ngrp_GRPID) )
then
1484 deallocate(fstrsolid%CLOAD_ngrp_GRPID, stat=ierror)
1485 if( ierror /= 0 )
then
1486 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, CLOAD_ngrp_GRPID>'
1488 call hecmw_abort( hecmw_comm_get_comm())
1491 if(
associated(fstrsolid%CLOAD_ngrp_ID) )
then
1492 deallocate(fstrsolid%CLOAD_ngrp_ID, stat=ierror)
1493 if( ierror /= 0 )
then
1494 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, CLOAD_ngrp_ID>'
1496 call hecmw_abort( hecmw_comm_get_comm())
1499 if(
associated(fstrsolid%CLOAD_ngrp_DOF) )
then
1500 deallocate(fstrsolid%CLOAD_ngrp_DOF, stat=ierror)
1501 if( ierror /= 0 )
then
1502 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, CLOAD_ngrp_DOF>'
1504 call hecmw_abort( hecmw_comm_get_comm())
1507 if(
associated(fstrsolid%CLOAD_ngrp_val) )
then
1508 deallocate(fstrsolid%CLOAD_ngrp_val, stat=ierror)
1509 if( ierror /= 0 )
then
1510 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, CLOAD_ngrp_val>'
1512 call hecmw_abort( hecmw_comm_get_comm())
1515 if(
associated(fstrsolid%CLOAD_ngrp_amp) )
then
1516 deallocate(fstrsolid%CLOAD_ngrp_amp, stat=ierror)
1517 if( ierror /= 0 )
then
1518 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, CLOAD_ngrp_amp>'
1520 call hecmw_abort( hecmw_comm_get_comm())
1523 if(
associated(fstrsolid%CLOAD_ngrp_rotID) )
then
1524 deallocate(fstrsolid%CLOAD_ngrp_rotID, stat=ierror)
1525 if( ierror /= 0 )
then
1526 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, CLOAD_ngrp_rotID>'
1528 call hecmw_abort( hecmw_comm_get_comm())
1531 if(
associated(fstrsolid%CLOAD_ngrp_centerID) )
then
1532 deallocate(fstrsolid%CLOAD_ngrp_centerID, stat=ierror)
1533 if( ierror /= 0 )
then
1534 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, CLOAD_ngrp_centerID>'
1536 call hecmw_abort( hecmw_comm_get_comm())
1547 fstrheat%STEPtot = 0
1548 fstrheat%MATERIALtot = 0
1549 fstrheat%AMPLITUDEtot= 0
1550 fstrheat%T_FIX_tot = 0
1551 fstrheat%Q_NOD_tot = 0
1552 fstrheat%Q_VOL_tot = 0
1553 fstrheat%Q_SUF_tot = 0
1554 fstrheat%R_SUF_tot = 0
1555 fstrheat%H_SUF_tot = 0
1557 fstrheat%beta = -1.0d0
1566 fstreig%maxiter = 60
1568 fstreig%sigma = 0.0d0
1569 fstreig%tolerance = 1.0d-6
1570 fstreig%totalmass = 0.0d0
1577 fstrdynamic%idx_eqa = 1
1578 fstrdynamic%idx_resp = 1
1579 fstrdynamic%n_step = 1
1580 fstrdynamic%t_start = 0.0
1581 fstrdynamic%t_curr = 0.0d0
1582 fstrdynamic%t_end = 1.0
1583 fstrdynamic%t_delta = 1.0
1584 fstrdynamic%gamma = 0.5
1585 fstrdynamic%beta = 0.25
1586 fstrdynamic%idx_mas = 1
1587 fstrdynamic%idx_dmp = 1
1588 fstrdynamic%ray_m = 0.0
1589 fstrdynamic%ray_k = 0.0
1590 fstrdynamic%restart_nout = 0
1591 fstrdynamic%nout = 100
1592 fstrdynamic%ngrp_monit = 0
1593 fstrdynamic%nout_monit = 1
1594 fstrdynamic%iout_list(1) = 0
1595 fstrdynamic%iout_list(2) = 0
1596 fstrdynamic%iout_list(3) = 0
1597 fstrdynamic%iout_list(4) = 0
1598 fstrdynamic%iout_list(5) = 0
1599 fstrdynamic%iout_list(6) = 0
1607 type(hecmwst_local_mesh),
target :: hecMESH
1610 integer :: ierror, ndof,nnod
1614 if(fstrdynamic%idx_eqa == 11)
then
1615 allocate( fstrdynamic%DISP(ndof*nnod,3) ,stat=ierror )
1616 if( ierror /= 0 )
then
1617 write(
idbg,*)
'stop due to allocation error <fstr_solve_LINEAR_DYNAMIC, DISP>'
1618 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1620 call hecmw_abort( hecmw_comm_get_comm())
1622 allocate( fstrdynamic%VEL (ndof*nnod,1) ,stat=ierror )
1623 if( ierror /= 0 )
then
1624 write(
idbg,*)
'stop due to allocation error <fstr_solve_LINEAR_DYNAMIC, VEL>'
1625 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1627 call hecmw_abort( hecmw_comm_get_comm())
1629 allocate( fstrdynamic%ACC (ndof*nnod,1) ,stat=ierror )
1630 if( ierror /= 0 )
then
1631 write(
idbg,*)
'stop due to allocation error <fstr_solve_LINEAR_DYNAMIC, ACC>'
1632 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1634 call hecmw_abort( hecmw_comm_get_comm())
1637 allocate( fstrdynamic%DISP(ndof*nnod,2) ,stat=ierror )
1638 if( ierror /= 0 )
then
1639 write(
idbg,*)
'stop due to allocation error <fstr_solve_LINEAR_DYNAMIC, DISP>'
1640 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1642 call hecmw_abort( hecmw_comm_get_comm())
1644 allocate( fstrdynamic%VEL (ndof*nnod,2) ,stat=ierror )
1645 if( ierror /= 0 )
then
1646 write(
idbg,*)
'stop due to allocation error <fstr_solve_LINEAR_DYNAMIC, VEL>'
1647 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1649 call hecmw_abort( hecmw_comm_get_comm())
1651 allocate( fstrdynamic%ACC (ndof*nnod,2) ,stat=ierror )
1652 if( ierror /= 0 )
then
1653 write(
idbg,*)
'stop due to allocation error <fstr_solve_LINEAR_DYNAMIC, ACC>'
1654 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1656 call hecmw_abort( hecmw_comm_get_comm())
1661 allocate( fstrdynamic%VEC1(ndof*nnod) ,stat=ierror )
1662 if( ierror /= 0 )
then
1663 write(
idbg,*)
'stop due to allocation error <fstr_solve_LINEAR_DYNAMIC, VEC1>'
1664 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1666 call hecmw_abort( hecmw_comm_get_comm())
1668 allocate( fstrdynamic%VEC2(ndof*nnod) ,stat=ierror )
1669 if( ierror /= 0 )
then
1670 write(
idbg,*)
'stop due to allocation error <fstr_solve_LINEAR_DYNAMIC, VEC2>'
1671 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1673 call hecmw_abort( hecmw_comm_get_comm())
1675 allocate( fstrdynamic%VEC3(ndof*nnod) ,stat=ierror )
1676 if( ierror /= 0 )
then
1677 write(
idbg,*)
'stop due to allocation error <fstr_solve_LINEAR_DYNAMIC, VEC3>'
1678 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1680 call hecmw_abort( hecmw_comm_get_comm())
1690 if(
associated(fstrdynamic%DISP) ) &
1691 deallocate( fstrdynamic%DISP ,stat=ierror )
1692 if( ierror /= 0 )
then
1693 write(
idbg,*)
'stop due to deallocation error <fstr_solve_LINEAR_DYNAMIC, DISP>'
1695 call hecmw_abort( hecmw_comm_get_comm())
1697 if(
associated(fstrdynamic%VEL) ) &
1698 deallocate( fstrdynamic%VEL ,stat=ierror )
1699 if( ierror /= 0 )
then
1700 write(
idbg,*)
'stop due to deallocation error <fstr_solve_LINEAR_DYNAMIC, VEL>'
1702 call hecmw_abort( hecmw_comm_get_comm())
1704 if(
associated(fstrdynamic%ACC) ) &
1705 deallocate( fstrdynamic%ACC ,stat=ierror )
1706 if( ierror /= 0 )
then
1707 write(
idbg,*)
'stop due to deallocation error <fstr_solve_LINEAR_DYNAMIC, ACC>'
1709 call hecmw_abort( hecmw_comm_get_comm())
1711 if(
associated(fstrdynamic%VEC1) ) &
1712 deallocate( fstrdynamic%VEC1 ,stat=ierror )
1713 if( ierror /= 0 )
then
1714 write(
idbg,*)
'stop due to deallocation error <fstr_solve_LINEAR_DYNAMIC, VEC1>'
1716 call hecmw_abort( hecmw_comm_get_comm())
1718 if(
associated(fstrdynamic%VEC2) ) &
1719 deallocate( fstrdynamic%VEC2 ,stat=ierror )
1720 if( ierror /= 0 )
then
1721 write(
idbg,*)
'stop due to deallocation error <fstr_solve_LINEAR_DYNAMIC, VEC2>'
1723 call hecmw_abort( hecmw_comm_get_comm())
1725 if(
associated(fstrdynamic%VEC3) ) &
1726 deallocate( fstrdynamic%VEC3 ,stat=ierror )
1727 if( ierror /= 0 )
then
1728 write(
idbg,*)
'stop due to deallocation error <fstr_solve_LINEAR_DYNAMIC, VEC3>'
1730 call hecmw_abort( hecmw_comm_get_comm())
1742 integer(kind=kint) :: NDOF, n_node, n_elem, mdof
1743 mdof = (ndof*ndof+ndof)/2;
1744 allocate ( phys%STRAIN (mdof*n_node))
1745 allocate ( phys%STRESS (mdof*n_node))
1746 allocate ( phys%MISES ( n_node))
1747 allocate ( phys%ESTRAIN (mdof*n_elem))
1748 allocate ( phys%ESTRESS (mdof*n_elem))
1749 allocate ( phys%EMISES ( n_elem))
1750 allocate ( phys%EPLSTRAIN ( n_elem))
1751 allocate ( phys%ENQM (12*n_elem))
1756 integer(kind=kint) :: ctrl, i
1760 if( p%PARAM%solution_type ==
kststatic &
1761 .or. p%PARAM%solution_type ==
ksteigen &
1765 if( p%MESH%n_dof == 6 .or. p%SOLID%is_33shell == 1 )
then
1766 allocate ( p%SOLID%SHELL )
1768 allocate ( p%SOLID%SHELL%LAYER(p%SOLID%max_lyr) )
1769 do i=1,p%SOLID%max_lyr
1770 allocate ( p%SOLID%SHELL%LAYER(i)%PLUS )
1771 allocate ( p%SOLID%SHELL%LAYER(i)%MINUS )
1775 phys => p%SOLID%SHELL
1777 allocate ( p%SOLID%SOLID )
1778 phys => p%SOLID%SOLID
1781 p%SOLID%STRAIN => phys%STRAIN
1782 p%SOLID%STRESS => phys%STRESS
1783 p%SOLID%MISES => phys%MISES
1784 p%SOLID%ESTRAIN => phys%ESTRAIN
1785 p%SOLID%ESTRESS => phys%ESTRESS
1786 p%SOLID%EMISES => phys%EMISES
1787 p%SOLID%ENQM => phys%ENQM
1788 allocate( p%SOLID%REACTION( p%MESH%n_dof*p%MESH%n_node ) )
1791 if( p%PARAM%fg_visual ==
kon )
then
1795 call hecmw_barrier( p%MESH )
1797 if( p%HEAT%STEPtot == 0 )
then
1798 if( p%PARAM%analysis_n == 0 )
then
1805 p%PARAM%analysis_n = 1
1811 p%PARAM%eps = 1.0e-6
1818 p%HEAT%STEP_DLTIME = 0
1819 p%HEAT%STEP_EETIME = 0
1820 p%HEAT%STEP_DELMIN = 0
1821 p%HEAT%STEP_DELMAX = 0
1835 integer(kind=kint) :: ctrl
1836 integer(kind=kint) :: counter
1839 integer(kind=kint) :: rcode
1852 integer(kind=kint) :: ctrl
1853 integer(kind=kint) :: counter
1856 integer(kind=kint) :: rcode
1869 integer(kind=kint) :: ctrl
1870 integer(kind=kint) :: counter
1873 integer(kind=kint) :: rcode
1875 if( counter >= 2 )
then
1876 write(
ilog,*)
'### Error : !SOLVER exists twice in FSTR control file.'
1931 integer(kind=kint) :: ctrl
1932 type( hecmwst_local_mesh ) :: hecmesh
1934 type( tlocalcoordsys ) :: coordsys
1936 integer :: j, is, ie, grp_id(1)
1937 character(len=HECMW_NAME_LEN) :: grp_id_name(1)
1939 integer :: nid, dtype
1940 character(len=HECMW_NAME_LEN) :: data_fmt
1941 real(kind=kreal) :: fdum, xyza(3), xyzb(3), xyzc(3), ff1(3), ff2(3), ff3(3)
1946 coordsys%sys_type = 10
1949 data_fmt =
'COORDINATES,NODES '
1952 coordsys%sys_type = coordsys%sys_type + dtype
1955 coordsys%sys_name = grp_id_name(1)
1959 data_fmt =
"RRRRRRrrr "
1962 xyza(3), xyzb(1), xyzb(2), xyzb(3), xyzc(1), xyzc(2), xyzc(3) )/=0 )
return
1963 if( coordsys%sys_type==10 )
then
1965 fdum = dsqrt( dot_product(ff1, ff1) )
1966 if( fdum==0.d0 )
return
1970 coordsys%CoordSys(1,:) = ff1
1972 fdum = dsqrt( dot_product(ff3, ff3) )
1973 if( fdum==0.d0 )
return
1974 coordsys%CoordSys(3,:) = ff3/fdum
1976 call cross_product(coordsys%CoordSys(3,:), coordsys%CoordSys(1,:), coordsys%CoordSys(2,:) )
1978 coordsys%CoordSys(1,:) = xyza
1979 coordsys%CoordSys(2,:) = xyzb
1983 coordsys%node_ID(3) = 0
1986 coordsys%node_ID(2), coordsys%node_ID(3) )/=0 )
return
1987 if( coordsys%node_ID(3) == 0 )
then
1989 if( nid/=0 .and. nid/=2 )
then
1990 write(*,*)
"We cannot define coordinate system using nodes in other CPU!"
1991 write(
idbg,*)
"We cannot define coordinate system using nodes in other CPU!"
1996 if( nid/=0 .and. nid/=3 )
then
1997 write(*,*)
"We cannot define coordinate system using nodes in other CPU!"
1998 write(
idbg,*)
"We cannot define coordinate system using nodes in other CPU!"
2014 integer(kind=kint) :: ctrl
2015 integer(kind=kint) :: counter
2017 character(HECMW_NAME_LEN) :: amp
2018 integer(kind=kint) :: amp_id
2020 integer(kind=kint) :: rcode, iproc
2032 integer(kind=kint) :: ctrl
2034 type(hecmwst_local_mesh) :: hecmesh
2035 integer,
pointer :: grp_id(:), dof(:)
2036 real(kind=kreal),
pointer :: temp(:)
2037 character(len=HECMW_NAME_LEN),
pointer :: grp_id_name(:)
2038 character(len=HECMW_NAME_LEN) :: data_fmt, ss
2039 integer :: i,j,n, is, ie, gid, nid, rcode
2043 ss =
'TEMPERATURE,VELOCITY,ACCELERATION '
2046 cond%cond_name =
"temperature"
2047 allocate( cond%intval(hecmesh%n_node) )
2048 allocate( cond%realval(hecmesh%n_node) )
2049 elseif( nid==2 )
then
2050 cond%cond_name =
"velocity"
2051 allocate( cond%intval(hecmesh%n_node) )
2052 allocate( cond%realval(hecmesh%n_node) )
2053 elseif( nid==3 )
then
2054 cond%cond_name =
"acceleration"
2055 allocate( cond%intval(hecmesh%n_node) )
2056 allocate( cond%realval(hecmesh%n_node) )
2066 allocate( temp(n), grp_id_name(n), grp_id(n), dof(n) )
2068 write(ss,*) hecmw_name_len
2070 write(data_fmt,
'(a,a,a)')
'S',trim(adjustl(ss)),
'R '
2074 write(data_fmt,
'(a,a,a)')
'S',trim(adjustl(ss)),
'IR '
2080 if(
associated(grp_id) )
deallocate( grp_id )
2081 if(
associated(temp) )
deallocate( temp )
2082 if(
associated(dof) )
deallocate( dof )
2083 if(
associated(grp_id_name) )
deallocate( grp_id_name )
2090 is = hecmesh%node_group%grp_index(gid-1) + 1
2091 ie = hecmesh%node_group%grp_index(gid )
2093 nid = hecmesh%node_group%grp_item(j)
2094 cond%realval(nid) = temp(i)
2095 cond%intval(nid) = dof(i)
2099 if(
associated(grp_id) )
deallocate( grp_id )
2100 if(
associated(temp) )
deallocate( temp )
2101 if(
associated(dof) )
deallocate( dof )
2102 if(
associated(grp_id_name) )
deallocate( grp_id_name )
2111 integer(kind=kint) :: ctrl
2112 integer(kind=kint) :: counter
2114 integer(kind=kint) :: res, visual, neutral
2116 integer(kind=kint) :: rcode
2120 if( res == 1 ) p%PARAM%fg_result = 1
2121 if( visual == 1 ) p%PARAM%fg_visual = 1
2122 if( neutral == 1 ) p%PARAM%fg_neutral = 1
2132 integer(kind=kint) :: ctrl
2133 integer(kind=kint) :: counter
2136 integer(kind=kint) :: rcode
2150 integer(kind=kint) :: ctrl
2151 integer(kind=kint) :: nout
2152 integer(kind=kint) :: version
2154 integer(kind=kint) :: rcode
2170 integer(kind=kint) :: ctrl
2171 integer(kind=kint) :: counter
2173 integer(kind=kint) :: rcode
2174 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
2175 integer(kind=kint) :: i, n, old_size, new_size
2177 if( p%SOLID%file_type /=
kbcffstr )
return
2181 old_size = p%SOLID%COUPLE_ngrp_tot
2182 new_size = old_size + n
2183 p%SOLID%COUPLE_ngrp_tot = new_size
2187 allocate( grp_id_name(n))
2189 p%PARAM%fg_couple_type, &
2190 p%PARAM%fg_couple_first, &
2191 p%PARAM%fg_couple_window, &
2192 grp_id_name, hecmw_name_len )
2196 n, grp_id_name, p%SOLID%COUPLE_ngrp_ID(old_size+1:))
2198 deallocate( grp_id_name )
2199 p%PARAM%fg_couple = 1
2209 integer(kind=kint) :: ctrl
2211 real(kind=kreal),
pointer :: val(:), table(:)
2212 character(len=HECMW_NAME_LEN) :: name
2213 integer :: nline, n, type_def, type_time, type_val, rcode
2216 if( nline<=0 )
return
2217 allocate( val(nline*4) )
2218 allocate( table(nline*4) )
2225 if(
associated(val) )
deallocate( val )
2226 if(
associated(table) )
deallocate( table )
2240 integer(kind=kint) :: ctrl
2241 integer(kind=kint) :: counter
2243 integer(kind=kint) :: rcode
2245 integer :: nout, nout_monit,node_monit_1 ,elem_monit_1 ,intg_monit_1
2246 integer :: ipt, idx_elpl, iout_list(6)
2247 real(kind=kreal) :: sig_y0, h_dash
2249 if( counter > 1 )
then
2256 if( ipt == 2 ) p%PARAM%nlgeom = .true.
2260 write(*,*)
"Warning : !STATIC : parameter 'TYPE=INFINITE' is deprecated." &
2261 & //
" Please use the replacement parameter 'TYPE=INFINITESIMAL'"
2269 nout, nout_monit, node_monit_1, &
2270 elem_monit_1, intg_monit_1 )
2283 integer(kind=kint) :: ctrl
2284 integer(kind=kint) :: counter
2287 integer(kind=kint) :: rcode
2288 integer(kind=kint) ::
type = 0
2289 character(HECMW_NAME_LEN) :: amp, rotc_name(1)
2290 integer(kind=kint) :: amp_id, rotc_id(1), n_rotc
2291 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
2292 integer(kind=kint),
pointer :: dof_ids (:)
2293 integer(kind=kint),
pointer :: dof_ide (:)
2294 real(kind=kreal),
pointer :: val_ptr(:)
2295 integer(kind=kint) :: i, n, old_size, new_size
2297 integer(kind=kint) :: gid, istot
2317 if( rotc_name(1) /=
' ' )
then
2318 if( istot /= 0 )
then
2319 write(*,*)
'fstr control file error : !BOUNDARY : rotational boundary cannot be specified with total value'
2320 write(
ilog,*)
'fstr control file error : !BOUNDARY : rotational boundary cannot be specified with total value'
2323 p%SOLID%BOUNDARY_ngrp_rot = p%SOLID%BOUNDARY_ngrp_rot + 1
2324 n_rotc = p%SOLID%BOUNDARY_ngrp_rot
2334 old_size = p%SOLID%BOUNDARY_ngrp_tot
2335 new_size = old_size + n
2336 p%SOLID%BOUNDARY_ngrp_tot = new_size
2346 allocate( grp_id_name(n) )
2347 allocate( dof_ids(n) )
2348 allocate( dof_ide(n) )
2351 val_ptr => p%SOLID%BOUNDARY_ngrp_val(old_size+1:)
2356 p%SOLID%BOUNDARY_ngrp_GRPID(old_size+1:new_size) = gid
2358 p%SOLID%BOUNDARY_ngrp_istot(old_size+1:new_size) = istot
2361 p%SOLID%BOUNDARY_ngrp_rotID(old_size+1:) = n_rotc
2362 p%SOLID%BOUNDARY_ngrp_centerID(old_size+1:) = rotc_id(1)
2365 if( (dof_ids(i) < 1).or.(6 < dof_ids(i)).or.(dof_ide(i) < 1).or.(6 < dof_ide(i)) )
then
2366 write(*,*)
'fstr control file error : !BOUNDARY : range of dof_ids and dof_ide is from 1 to 6'
2367 write(
ilog,*)
'fstr control file error : !BOUNDARY : range of dof_ids and dof_ide is from 1 to 6'
2370 p%SOLID%BOUNDARY_ngrp_type(old_size+i) = 10 * dof_ids(i) + dof_ide(i)
2371 p%SOLID%BOUNDARY_ngrp_amp(old_size+i) = amp_id
2374 deallocate( grp_id_name )
2375 deallocate( dof_ids )
2376 deallocate( dof_ide )
2393 integer(kind=kint) :: ctrl
2394 integer(kind=kint) :: counter
2397 integer(kind=kint) :: rcode
2398 character(HECMW_NAME_LEN) :: amp, rotc_name(1)
2399 integer(kind=kint) :: amp_id, rotc_id(1), n_rotc
2400 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
2401 real(kind=kreal),
pointer :: val_ptr(:)
2402 integer(kind=kint),
pointer :: id_ptr(:)
2403 integer(kind=kint) :: i, n, old_size, new_size
2404 integer(kind=kint) :: gid
2406 if( p%SOLID%file_type /=
kbcffstr )
return
2417 if( rotc_name(1) /=
' ' )
then
2418 p%SOLID%CLOAD_ngrp_rot = p%SOLID%CLOAD_ngrp_rot + 1
2419 n_rotc = p%SOLID%CLOAD_ngrp_rot
2425 old_size = p%SOLID%CLOAD_ngrp_tot
2426 new_size = old_size + n
2427 p%SOLID%CLOAD_ngrp_tot = new_size
2438 allocate( grp_id_name(n))
2440 val_ptr => p%SOLID%CLOAD_ngrp_val(old_size+1:)
2441 id_ptr =>p%SOLID%CLOAD_ngrp_DOF(old_size+1:)
2447 p%SOLID%CLOAD_ngrp_rotID(old_size+1:) = n_rotc
2448 p%SOLID%CLOAD_ngrp_centerID(old_size+1:) = rotc_id(1)
2452 p%SOLID%CLOAD_ngrp_amp(old_size+i) = amp_id
2454 p%SOLID%CLOAD_ngrp_GRPID(old_size+1:new_size) = gid
2457 deallocate( grp_id_name )
2466 integer(kind=kint) :: ctrl
2467 integer(kind=kint) :: counter
2470 integer(kind=kint) :: rcode
2471 character(HECMW_NAME_LEN) :: amp
2472 integer(kind=kint) :: amp_id
2473 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
2474 real(kind=kreal),
pointer :: val_ptr(:)
2475 integer(kind=kint),
pointer :: id_ptr(:), type_ptr(:)
2476 integer(kind=kint) :: i, n, old_size, new_size
2477 integer(kind=kint) :: gid, loadcase
2480 if( p%SOLID%file_type /=
kbcffstr)
return
2494 old_size = p%FREQ%FLOAD_ngrp_tot
2495 new_size = old_size + n
2498 p%FREQ%FLOAD_ngrp_tot = new_size
2507 allocate( grp_id_name(n) )
2509 val_ptr => p%FREQ%FLOAD_ngrp_valre(old_size+1:)
2511 val_ptr => p%FREQ%FLOAD_ngrp_valim(old_size+1:)
2514 write(*,*)
"Error this load set is not defined!"
2515 write(
ilog,*)
"Error this load set is not defined!"
2518 id_ptr => p%FREQ%FLOAD_ngrp_DOF(old_size+1:)
2519 type_ptr => p%FREQ%FLOAD_ngrp_TYPE(old_size+1:)
2523 p%FREQ%FLOAD_ngrp_GRPID(old_size+1:new_size) = gid
2525 p%FREQ%FLOAD_ngrp_ID(old_size+1:), p%FREQ%FLOAD_ngrp_TYPE(old_size+1:))
2527 deallocate( grp_id_name )
2533 integer(kind=kint) :: ctrl
2534 character(len=HECMW_NAME_LEN) :: node_id(:)
2535 integer(kind=kint),
pointer :: dof_id(:)
2536 integer(kind=kint) :: node_id_len
2537 real(kind=kreal),
pointer :: value(:)
2539 character(len=HECMW_NAME_LEN) :: data_fmt, ss
2541 write(ss,*) node_id_len
2542 write(data_fmt,
'(a,a,a)')
'S', trim(adjustl(ss)),
'IR '
2554 integer(kind=kint) :: ctrl
2555 integer(kind=kint) :: counter
2558 integer(kind=kint) :: filename_len
2559 character(len=HECMW_NAME_LEN) :: datafmt, ss
2562 filename_len = hecmw_filename_len
2563 write(ss,*) filename_len
2564 write(datafmt,
'(a,a,a)')
'S', trim(adjustl(ss)),
' '
2579 real(kind=kreal),
pointer :: array(:,:)
2580 integer(kind=kint) :: old_size, new_size, i, j
2581 real(kind=kreal),
pointer :: temp(:,:)
2583 if( old_size >= new_size )
then
2587 if(
associated( array ) )
then
2588 allocate(temp(0:6, old_size))
2591 allocate(array(0:6, new_size))
2595 array(j,i) = temp(j,i)
2600 allocate(array(0:6, new_size))
2608 integer(kind=kint) :: ctrl
2609 integer(kind=kint) :: counter
2612 integer(kind=kint) :: rcode
2613 character(HECMW_NAME_LEN) :: amp
2614 integer(kind=kint) :: amp_id
2615 integer(kind=kint) :: follow
2616 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
2617 real(kind=kreal),
pointer :: new_params(:,:)
2618 logical,
pointer :: fg_surface(:)
2619 integer(kind=kint),
pointer :: lid_ptr(:)
2620 integer(kind=kint) :: i, j, n, old_size, new_size
2621 integer(kind=kint) :: gid
2623 if( p%SOLID%file_type /=
kbcffstr )
return
2630 old_size = p%SOLID%DLOAD_ngrp_tot
2631 new_size = old_size + n
2632 p%SOLID%DLOAD_ngrp_tot = new_size
2641 allocate( grp_id_name(n))
2642 allocate( new_params(0:6,n))
2643 allocate( fg_surface(n))
2646 follow = p%SOLID%DLOAD_follow
2647 if( .not. p%PARAM%nlgeom ) follow = 0
2648 lid_ptr => p%SOLID%DLOAD_ngrp_LID(old_size+1:)
2650 grp_id_name, hecmw_name_len, &
2651 lid_ptr, new_params )
2654 p%SOLID%DLOAD_follow = follow
2656 p%SOLID%DLOAD_ngrp_amp(old_size+i) = amp_id
2658 p%SOLID%DLOAD_ngrp_params(j,old_size+i) = new_params(j,i)
2660 fg_surface(i) = ( lid_ptr(i) == 100 )
2662 p%SOLID%DLOAD_ngrp_GRPID(old_size+1:new_size) = gid
2664 deallocate( grp_id_name )
2665 deallocate( new_params )
2666 deallocate( fg_surface )
2676 integer(kind=kint) :: ctrl
2677 integer(kind=kint) :: counter
2680 integer(kind=kint) :: rcode, gid
2681 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
2682 real(kind=kreal),
pointer :: val_ptr(:)
2683 integer(kind=kint) :: n, old_size, new_size
2685 if( p%SOLID%file_type /=
kbcffstr )
return
2691 old_size = p%SOLID%TEMP_ngrp_tot
2693 new_size = old_size + n
2695 new_size = old_size + 1
2701 allocate( grp_id_name(n))
2702 val_ptr => p%SOLID%TEMP_ngrp_val( old_size+1: )
2705 p%SOLID%TEMP_irres, &
2706 p%SOLID%TEMP_tstep, &
2707 p%SOLID%TEMP_interval, &
2708 p%SOLID%TEMP_rtype, &
2709 grp_id_name, hecmw_name_len, &
2713 p%SOLID%TEMP_ngrp_GRPID(old_size+1:new_size) = gid
2715 if( p%SOLID%TEMP_irres == 0 )
then
2716 p%SOLID%TEMP_ngrp_tot = new_size
2718 n, grp_id_name, p%SOLID%TEMP_ngrp_ID(old_size+1:))
2720 deallocate( grp_id_name )
2732 integer(kind=kint) :: ctrl
2733 integer(kind=kint) :: counter
2736 integer(kind=kint) :: rcode
2737 character(HECMW_NAME_LEN) :: amp
2738 integer(kind=kint) :: amp_id
2739 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
2740 real(kind=kreal),
pointer :: val_ptr(:)
2741 integer(kind=kint),
pointer :: id_ptr(:)
2742 integer(kind=kint) :: i, n, old_size, new_size
2743 integer(kind=kint) :: gid
2745 if( p%SOLID%file_type /=
kbcffstr )
return
2750 old_size = p%SOLID%SPRING_ngrp_tot
2751 new_size = old_size + n
2752 p%SOLID%SPRING_ngrp_tot = new_size
2759 allocate( grp_id_name(n))
2761 val_ptr => p%SOLID%SPRING_ngrp_val(old_size+1:)
2762 id_ptr =>p%SOLID%SPRING_ngrp_DOF(old_size+1:)
2769 p%SOLID%SPRING_ngrp_amp(old_size+i) = amp_id
2771 p%SOLID%SPRING_ngrp_GRPID(old_size+1:new_size) = gid
2774 deallocate( grp_id_name )
2785 integer(kind=kint) :: ctrl
2786 integer(kind=kint) :: counter
2789 integer(kind=kint) :: rcode
2807 integer(kind=kint) :: ctrl
2808 integer(kind=kint) :: counter
2811 integer(kind=kint) :: rcode
2812 integer(kind=kint) :: n
2813 character(len=HECMW_NAME_LEN) :: mName
2814 integer(kind=kint) :: i
2826 p%PARAM%analysis_n = n
2833 p%PARAM%eps = 1.0e-6
2834 p%PARAM%timepoint_id = 0
2845 if( rcode /= 0 )
then
2849 if(
associated(p%PARAM%timepoints) )
then
2850 do i=1,
size(p%PARAM%timepoints)
2851 if(
fstr_streqr( p%PARAM%timepoints(i)%name, mname ) )
then
2852 p%PARAM%timepoint_id = i;
exit
2863 p%HEAT%STEP_DLTIME = p%PARAM%dtime
2864 p%HEAT%STEP_EETIME = p%PARAM%etime
2865 p%HEAT%STEP_DELMIN = p%PARAM%dtmin
2866 p%HEAT%STEP_DELMAX = p%PARAM%delmax
2867 p%HEAT%timepoint_id = p%PARAM%timepoint_id
2877 integer(kind=kint) :: ctrl
2878 integer(kind=kint) :: counter
2881 integer(kind=kint) :: rcode
2882 character(HECMW_NAME_LEN) :: amp
2883 integer(kind=kint) :: amp_id
2884 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
2885 real(kind=kreal),
pointer :: value(:)
2886 integer(kind=kint) :: i, j, n, m, head, id, member_n, old_size, new_size
2887 integer(kind=kint),
pointer :: member(:)
2888 integer(kind=kint) :: local_id, rtc
2894 allocate( grp_id_name(n))
2899 grp_id_name, hecmw_name_len,
value )
2910 else if( rtc < 0 )
then
2916 deallocate( grp_id_name )
2922 old_size = p%HEAT%T_FIX_tot
2923 new_size = old_size + m
2927 p%HEAT%T_FIX_tot = new_size
2930 member => p%HEAT%T_FIX_node(head:)
2936 member(1) = local_id
2938 else if( rtc < 0 )
then
2939 member_n =
get_grp_member( p%MESH,
'node_grp', grp_id_name(i), member )
2944 member => member( member_n+1 : )
2947 p%HEAT%T_FIX_val (id) = value(i)
2948 p%HEAT%T_FIX_ampl (id) = amp_id
2953 deallocate( grp_id_name )
2964 integer(kind=kint) :: ctrl
2965 integer(kind=kint) :: counter
2968 integer(kind=kint) :: rcode
2969 character(HECMW_NAME_LEN) :: amp
2970 integer(kind=kint) :: amp_id
2971 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
2972 real(kind=kreal),
pointer :: value(:)
2973 integer(kind=kint) :: i, j, n, m, head, id, member_n, old_size, new_size
2974 integer(kind=kint),
pointer :: member(:)
2975 integer(kind=kint) :: local_id, rtc
2981 allocate( grp_id_name(n))
2986 grp_id_name, hecmw_name_len,
value )
2997 else if( rtc < 0 )
then
3003 deallocate( grp_id_name )
3009 old_size = p%HEAT%Q_NOD_tot
3010 new_size = old_size + m
3014 p%HEAT%Q_NOD_tot = new_size
3017 member => p%HEAT%Q_NOD_node(head:)
3022 member(1) = local_id
3024 else if( rtc < 0 )
then
3025 member_n =
get_grp_member( p%MESH,
'node_grp', grp_id_name(i), member )
3029 if( i<n ) member => member( member_n+1 : )
3031 p%HEAT%Q_NOD_val (id) = value(i)
3032 p%HEAT%Q_NOD_ampl (id) = amp_id
3037 deallocate( grp_id_name )
3049 integer(kind=kint) :: ctrl
3050 integer(kind=kint) :: counter
3053 integer(kind=kint) :: rcode
3054 character(HECMW_NAME_LEN) :: amp
3055 integer(kind=kint) :: amp_id
3056 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
3057 integer(kind=kint),
pointer :: load_type(:)
3058 real(kind=kreal),
pointer :: value(:)
3059 integer(kind=kint) :: i, j, n, m, head, id, member_n, old_size, new_size
3060 integer(kind=kint),
pointer :: member(:)
3061 integer(kind=kint) :: local_id, rtc
3067 allocate( grp_id_name(n))
3068 allocate( load_type(n))
3073 grp_id_name, hecmw_name_len, load_type,
value )
3083 else if( rtc < 0 )
then
3089 deallocate( grp_id_name )
3090 deallocate( load_type )
3096 old_size = p%HEAT%Q_SUF_tot
3097 new_size = old_size + m
3102 p%HEAT%Q_SUF_tot = new_size
3105 member => p%HEAT%Q_SUF_elem(head:)
3110 member(1) = local_id
3112 else if( rtc < 0 )
then
3113 member_n =
get_grp_member( p%MESH,
'elem_grp', grp_id_name(i), member )
3117 if( i<n ) member => member( member_n+1 : )
3119 p%HEAT%Q_SUF_surf (id) = load_type(i)
3120 p%HEAT%Q_SUF_val (id) = value(i)
3121 p%HEAT%Q_SUF_ampl (id) = amp_id
3126 deallocate( grp_id_name )
3127 deallocate( load_type )
3139 integer(kind=kint) :: ctrl
3140 integer(kind=kint) :: counter
3143 integer(kind=kint) :: rcode
3144 character(HECMW_NAME_LEN) :: amp
3145 integer(kind=kint) :: amp_id
3146 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
3147 real(kind=kreal),
pointer :: value(:)
3148 integer(kind=kint) :: i, j, n, m, head, id, member_n, old_size, new_size
3149 integer(kind=kint),
pointer :: member1(:), member2(:)
3155 allocate( grp_id_name(n))
3160 grp_id_name, hecmw_name_len,
value )
3171 deallocate( grp_id_name )
3177 old_size = p%HEAT%Q_SUF_tot
3178 new_size = old_size + m
3183 p%HEAT%Q_SUF_tot = new_size
3186 member1 => p%HEAT%Q_SUF_elem(head:)
3187 member2 => p%HEAT%Q_SUF_surf(head:)
3190 member_n =
get_grp_member( p%MESH,
'surf_grp', grp_id_name(i), member1, member2 )
3192 member1 => member1( member_n+1 : )
3193 member2 => member2( member_n+1 : )
3196 p%HEAT%Q_SUF_val (id) = value(i)
3197 p%HEAT%Q_SUF_ampl (id) = amp_id
3202 deallocate( grp_id_name )
3214 integer(kind=kint) :: ctrl
3215 integer(kind=kint) :: counter
3218 integer(kind=kint) :: rcode
3219 character(HECMW_NAME_LEN) :: amp1, amp2
3220 integer(kind=kint) :: amp_id1, amp_id2
3221 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
3222 integer(kind=kint),
pointer :: load_type(:)
3223 real(kind=kreal),
pointer :: value(:)
3224 real(kind=kreal),
pointer :: shink(:)
3225 integer(kind=kint) :: i, j, n, m, head, id, member_n, old_size, new_size
3226 integer(kind=kint),
pointer :: member(:)
3227 integer(kind=kint) :: local_id, rtc
3233 allocate( grp_id_name(n))
3234 allocate( load_type(n))
3242 grp_id_name, hecmw_name_len, load_type,
value, shink )
3253 else if( rtc < 0 )
then
3259 deallocate( grp_id_name )
3260 deallocate( load_type )
3267 old_size = p%HEAT%H_SUF_tot
3268 new_size = old_size + m
3273 p%HEAT%H_SUF_tot = new_size
3276 member => p%HEAT%H_SUF_elem(head:)
3281 member(1) = local_id
3283 else if( rtc < 0 )
then
3284 member_n =
get_grp_member( p%MESH,
'elem_grp', grp_id_name(i), member )
3288 if( i<n ) member => member( member_n+1 : )
3290 p%HEAT%H_SUF_surf (id) = load_type(i)
3291 p%HEAT%H_SUF_val (id,1) = value(i)
3292 p%HEAT%H_SUF_val (id,2) = shink(i)
3293 p%HEAT%H_SUF_ampl (id,1) = amp_id1
3294 p%HEAT%H_SUF_ampl (id,2) = amp_id2
3299 deallocate( grp_id_name )
3300 deallocate( load_type )
3313 integer(kind=kint) :: ctrl
3314 integer(kind=kint) :: counter
3317 integer(kind=kint) :: rcode
3318 character(HECMW_NAME_LEN) :: amp1, amp2
3319 integer(kind=kint) :: amp_id1, amp_id2
3320 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
3321 real(kind=kreal),
pointer :: value(:)
3322 real(kind=kreal),
pointer :: shink(:)
3323 integer(kind=kint) :: i, j, n, m, head, id, member_n, old_size, new_size
3324 integer(kind=kint),
pointer :: member1(:), member2(:)
3330 allocate( grp_id_name(n))
3337 grp_id_name, hecmw_name_len,
value, shink )
3349 deallocate( grp_id_name )
3356 old_size = p%HEAT%H_SUF_tot
3357 new_size = old_size + m
3362 p%HEAT%H_SUF_tot = new_size
3365 member1 => p%HEAT%H_SUF_elem(head:)
3366 member2 => p%HEAT%H_SUF_surf(head:)
3369 member_n =
get_grp_member( p%MESH,
'surf_grp', grp_id_name(i), member1, member2 )
3371 member1 => member1( member_n+1 : )
3372 member2 => member2( member_n+1 : )
3375 p%HEAT%H_SUF_val (id,1) = value(i)
3376 p%HEAT%H_SUF_val (id,2) = shink(i)
3377 p%HEAT%H_SUF_ampl (id,1) = amp_id1
3378 p%HEAT%H_SUF_ampl (id,2) = amp_id2
3383 deallocate( grp_id_name )
3396 integer(kind=kint) :: ctrl
3397 integer(kind=kint) :: counter
3400 integer(kind=kint) :: rcode
3401 character(HECMW_NAME_LEN) :: amp1, amp2
3402 integer(kind=kint) :: amp_id1, amp_id2
3403 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
3404 integer(kind=kint),
pointer :: load_type(:)
3405 real(kind=kreal),
pointer :: value(:)
3406 real(kind=kreal),
pointer :: shink(:)
3407 integer(kind=kint) :: i, j, n, m, head, id, member_n, old_size, new_size
3408 integer(kind=kint),
pointer :: member(:)
3409 integer(kind=kint) :: local_id, rtc
3415 allocate( grp_id_name(n))
3416 allocate( load_type(n))
3423 grp_id_name, hecmw_name_len, load_type,
value, shink )
3434 else if( rtc < 0 )
then
3440 deallocate( grp_id_name )
3441 deallocate( load_type )
3448 old_size = p%HEAT%R_SUF_tot
3449 new_size = old_size + m
3454 p%HEAT%R_SUF_tot = new_size
3457 member => p%HEAT%R_SUF_elem(head:)
3462 member(1) = local_id
3464 else if( rtc < 0 )
then
3465 member_n =
get_grp_member( p%MESH,
'elem_grp', grp_id_name(i), member )
3469 if( i<n ) member => member( member_n+1 : )
3471 p%HEAT%R_SUF_surf (id) = load_type(i)
3472 p%HEAT%R_SUF_val (id,1) = value(i)
3473 p%HEAT%R_SUF_val (id,2) = shink(i)
3474 p%HEAT%R_SUF_ampl (id,1) = amp_id1
3475 p%HEAT%R_SUF_ampl (id,2) = amp_id2
3480 deallocate( grp_id_name )
3481 deallocate( load_type )
3494 integer(kind=kint) :: ctrl
3495 integer(kind=kint) :: counter
3498 integer(kind=kint) :: rcode
3499 character(HECMW_NAME_LEN) :: amp1, amp2
3500 integer(kind=kint) :: amp_id1, amp_id2
3501 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
3502 real(kind=kreal),
pointer :: value(:)
3503 real(kind=kreal),
pointer :: shink(:)
3504 integer(kind=kint) :: i, j, n, m, head, id, member_n, old_size, new_size
3505 integer(kind=kint),
pointer :: member1(:), member2(:)
3511 allocate( grp_id_name(n))
3529 deallocate( grp_id_name )
3536 old_size = p%HEAT%R_SUF_tot
3537 new_size = old_size + m
3542 p%HEAT%R_SUF_tot = new_size
3545 member1 => p%HEAT%R_SUF_elem(head:)
3546 member2 => p%HEAT%R_SUF_surf(head:)
3549 member_n =
get_grp_member( p%MESH,
'surf_grp', grp_id_name(i), member1, member2 )
3551 member1 => member1( member_n+1 : )
3552 member2 => member2( member_n+1 : )
3555 p%HEAT%R_SUF_val (id,1) = value(i)
3556 p%HEAT%R_SUF_val (id,2) = shink(i)
3557 p%HEAT%R_SUF_ampl (id,1) = amp_id1
3558 p%HEAT%R_SUF_ampl (id,2) = amp_id2
3563 deallocate( grp_id_name )
3579 integer(kind=kint) :: ctrl
3580 integer(kind=kint) :: counter
3583 integer(kind=kint) :: rcode
3601 integer(kind=kint) :: ctrl
3602 integer(kind=kint) :: counter
3604 integer(kind=kint) :: rcode
3605 character(HECMW_NAME_LEN) :: grp_id_name(1)
3606 integer(kind=kint) :: grp_id(1)
3623 grp_id_name(1), hecmw_name_len, &
3629 if (p%DYN%idx_resp == 1)
then
3631 p%DYN%ngrp_monit = grp_id(1)
3633 read(grp_id_name,*) p%DYN%ngrp_monit
3645 integer(kind=kint) :: ctrl
3646 integer(kind=kint) :: counter
3649 integer(kind=kint) :: rcode
3650 integer(kind=kint) :: vType
3651 character(HECMW_NAME_LEN) :: amp
3652 integer(kind=kint) :: amp_id
3653 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
3654 integer(kind=kint),
pointer :: dof_ids (:)
3655 integer(kind=kint),
pointer :: dof_ide (:)
3656 real(kind=kreal),
pointer :: val_ptr(:)
3657 integer(kind=kint) :: i, j, n, old_size, new_size
3661 old_size = p%SOLID%VELOCITY_ngrp_tot
3662 new_size = old_size + n
3663 p%SOLID%VELOCITY_ngrp_tot = new_size
3670 allocate( grp_id_name(n))
3671 allocate( dof_ids(n))
3672 allocate( dof_ide(n))
3675 val_ptr => p%SOLID%VELOCITY_ngrp_val(old_size+1:)
3678 grp_id_name, hecmw_name_len, &
3679 dof_ids, dof_ide, val_ptr )
3681 p%SOLID%VELOCITY_type = vtype
3682 if( vtype ==
kbcinitial ) p%DYN%VarInitialize = .true.
3685 n, grp_id_name, p%SOLID%VELOCITY_ngrp_ID(old_size+1:))
3689 if( (dof_ids(i) < 1).or.(6 < dof_ids(i)).or.(dof_ide(i) < 1).or.(6 < dof_ide(i)) )
then
3690 write(
ilog,*)
'fstr control file error : !VELOCITY : range of dof_ids and dof_ide is from 1 to 6'
3693 p%SOLID%VELOCITY_ngrp_type(j) = 10 * dof_ids(i) + dof_ide(i)
3694 p%SOLID%VELOCITY_ngrp_amp(j) = amp_id
3698 deallocate( grp_id_name )
3699 deallocate( dof_ids )
3700 deallocate( dof_ide )
3711 integer(kind=kint) :: ctrl
3712 integer(kind=kint) :: counter
3715 integer(kind=kint) :: rcode
3716 integer(kind=kint) :: aType
3717 character(HECMW_NAME_LEN) :: amp
3718 integer(kind=kint) :: amp_id
3719 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
3720 integer(kind=kint),
pointer :: dof_ids (:)
3721 integer(kind=kint),
pointer :: dof_ide (:)
3722 real(kind=kreal),
pointer :: val_ptr(:)
3723 integer(kind=kint) :: i, j, n, old_size, new_size
3728 old_size = p%SOLID%ACCELERATION_ngrp_tot
3729 new_size = old_size + n
3730 p%SOLID%ACCELERATION_ngrp_tot = new_size
3737 allocate( grp_id_name(n))
3738 allocate( dof_ids(n))
3739 allocate( dof_ide(n))
3742 val_ptr => p%SOLID%ACCELERATION_ngrp_val(old_size+1:)
3745 grp_id_name, hecmw_name_len, &
3746 dof_ids, dof_ide, val_ptr)
3748 p%SOLID%ACCELERATION_type = atype
3749 if( atype ==
kbcinitial )p%DYN%VarInitialize = .true.
3752 n, grp_id_name, p%SOLID%ACCELERATION_ngrp_ID(old_size+1:))
3756 if( (dof_ids(i) < 1).or.(6 < dof_ids(i)).or.(dof_ide(i) < 1).or.(6 < dof_ide(i)) )
then
3757 write(
ilog,*)
'fstr control file error : !ACCELERATION : range of dof_ids and dof_ide is from 1 to 6'
3760 p%SOLID%ACCELERATION_ngrp_type(j) = 10 * dof_ids(i) + dof_ide(i)
3761 p%SOLID%ACCELERATION_ngrp_amp(j) = amp_id
3765 deallocate( grp_id_name )
3766 deallocate( dof_ids )
3767 deallocate( dof_ide )
3781 integer(kind=kint) :: ctrl
3782 integer(kind=kint) :: counter
3785 integer(kind=kint) :: rcode
3831 integer(kind=kint) :: ctrl
3832 type (hecmwST_local_mesh) :: hecMESH
3833 type (fstr_solid ) :: fstrSOLID
3834 write(
ilog,*)
'### Error : In !BOUNDARY, TYPE=NASTRAN is not supported.'
3835 call hecmw_abort( hecmw_comm_get_comm())
3844 integer(kind=kint) :: ctrl
3848 integer(kind=kint) :: rcode
3862 integer(kind=kint) :: ctrl
3865 integer(kind=kint) :: rcode, nid
3866 character(len=HECMW_NAME_LEN) :: data_fmt
3868 data_fmt =
'SOLUTION,MATERIAL '
3881 type(hecmwst_local_mesh),
pointer :: hecMESH
3882 integer(kind=kint) :: n, i, sgrp_id, ngrp_id, ngrp_id2
3884 n = hecmesh%contact_pair%n_pair
3886 if( hecmesh%contact_pair%type(i) /= hecmw_contact_type_surf_surf ) cycle
3887 sgrp_id = hecmesh%contact_pair%slave_grp_id(i)
3890 hecmesh%contact_pair%type(i) = hecmw_contact_type_node_surf
3891 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.
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 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_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_element_init(hecMESH, fstrSOLID)
Initialize elements info in static calculation.
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_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.