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%EPLSTRAIN => phys%EPLSTRAIN
1802 p%SOLID%ENQM => phys%ENQM
1803 allocate( p%SOLID%REACTION( p%MESH%n_dof*p%MESH%n_node ) )
1806 if( p%PARAM%fg_visual ==
kon )
then
1810 call hecmw_barrier( p%MESH )
1812 if( p%HEAT%STEPtot == 0 )
then
1813 if( p%PARAM%analysis_n == 0 )
then
1820 p%PARAM%analysis_n = 1
1826 p%PARAM%eps = 1.0e-6
1833 p%HEAT%STEP_DLTIME = 0
1834 p%HEAT%STEP_EETIME = 0
1835 p%HEAT%STEP_DELMIN = 0
1836 p%HEAT%STEP_DELMAX = 0
1850 integer(kind=kint) :: ctrl
1851 integer(kind=kint) :: counter
1854 integer(kind=kint) :: rcode
1867 integer(kind=kint) :: ctrl
1868 integer(kind=kint) :: counter
1871 integer(kind=kint) :: rcode
1884 integer(kind=kint) :: ctrl
1885 integer(kind=kint) :: counter
1888 integer(kind=kint) :: rcode
1890 if( counter >= 2 )
then
1891 write(
ilog,*)
'### Error : !SOLVER exists twice in FSTR control file.'
1946 integer(kind=kint) :: ctrl
1947 type( hecmwst_local_mesh ) :: hecmesh
1949 type( tlocalcoordsys ) :: coordsys
1951 integer :: j, is, ie, grp_id(1)
1952 character(len=HECMW_NAME_LEN) :: grp_id_name(1)
1954 integer :: nid, dtype
1955 character(len=HECMW_NAME_LEN) :: data_fmt
1956 real(kind=kreal) :: fdum, xyza(3), xyzb(3), xyzc(3), ff1(3), ff2(3), ff3(3)
1961 coordsys%sys_type = 10
1964 data_fmt =
'COORDINATES,NODES '
1967 coordsys%sys_type = coordsys%sys_type + dtype
1970 coordsys%sys_name = grp_id_name(1)
1974 data_fmt =
"RRRRRRrrr "
1977 xyza(3), xyzb(1), xyzb(2), xyzb(3), xyzc(1), xyzc(2), xyzc(3) )/=0 )
return
1978 if( coordsys%sys_type==10 )
then
1980 fdum = dsqrt( dot_product(ff1, ff1) )
1981 if( fdum==0.d0 )
return
1985 coordsys%CoordSys(1,:) = ff1
1987 fdum = dsqrt( dot_product(ff3, ff3) )
1988 if( fdum==0.d0 )
return
1989 coordsys%CoordSys(3,:) = ff3/fdum
1991 call cross_product(coordsys%CoordSys(3,:), coordsys%CoordSys(1,:), coordsys%CoordSys(2,:) )
1993 coordsys%CoordSys(1,:) = xyza
1994 coordsys%CoordSys(2,:) = xyzb
1998 coordsys%node_ID(3) = 0
2001 coordsys%node_ID(2), coordsys%node_ID(3) )/=0 )
return
2002 if( coordsys%node_ID(3) == 0 )
then
2004 if( nid/=0 .and. nid/=2 )
then
2005 write(*,*)
"We cannot define coordinate system using nodes in other CPU!"
2006 write(
idbg,*)
"We cannot define coordinate system using nodes in other CPU!"
2011 if( nid/=0 .and. nid/=3 )
then
2012 write(*,*)
"We cannot define coordinate system using nodes in other CPU!"
2013 write(
idbg,*)
"We cannot define coordinate system using nodes in other CPU!"
2029 integer(kind=kint) :: ctrl
2030 integer(kind=kint) :: counter
2032 character(HECMW_NAME_LEN) :: amp
2033 integer(kind=kint) :: amp_id
2035 integer(kind=kint) :: rcode, iproc
2047 integer(kind=kint) :: ctrl
2049 type(hecmwst_local_mesh) :: hecmesh
2050 integer,
pointer :: grp_id(:), dof(:)
2051 real(kind=kreal),
pointer :: temp(:)
2052 character(len=HECMW_NAME_LEN),
pointer :: grp_id_name(:)
2053 character(len=HECMW_NAME_LEN) :: data_fmt, ss
2054 integer :: i,j,n, is, ie, gid, nid, rcode
2058 ss =
'TEMPERATURE,VELOCITY,ACCELERATION '
2061 cond%cond_name =
"temperature"
2062 allocate( cond%intval(hecmesh%n_node) )
2063 allocate( cond%realval(hecmesh%n_node) )
2064 elseif( nid==2 )
then
2065 cond%cond_name =
"velocity"
2066 allocate( cond%intval(hecmesh%n_node) )
2067 allocate( cond%realval(hecmesh%n_node) )
2068 elseif( nid==3 )
then
2069 cond%cond_name =
"acceleration"
2070 allocate( cond%intval(hecmesh%n_node) )
2071 allocate( cond%realval(hecmesh%n_node) )
2081 allocate( temp(n), grp_id_name(n), grp_id(n), dof(n) )
2083 write(ss,*) hecmw_name_len
2085 write(data_fmt,
'(a,a,a)')
'S',trim(adjustl(ss)),
'R '
2089 write(data_fmt,
'(a,a,a)')
'S',trim(adjustl(ss)),
'IR '
2095 if(
associated(grp_id) )
deallocate( grp_id )
2096 if(
associated(temp) )
deallocate( temp )
2097 if(
associated(dof) )
deallocate( dof )
2098 if(
associated(grp_id_name) )
deallocate( grp_id_name )
2105 is = hecmesh%node_group%grp_index(gid-1) + 1
2106 ie = hecmesh%node_group%grp_index(gid )
2108 nid = hecmesh%node_group%grp_item(j)
2109 cond%realval(nid) = temp(i)
2110 cond%intval(nid) = dof(i)
2114 if(
associated(grp_id) )
deallocate( grp_id )
2115 if(
associated(temp) )
deallocate( temp )
2116 if(
associated(dof) )
deallocate( dof )
2117 if(
associated(grp_id_name) )
deallocate( grp_id_name )
2126 integer(kind=kint) :: ctrl
2127 integer(kind=kint) :: counter
2129 integer(kind=kint) :: res, visual, neutral
2131 integer(kind=kint) :: rcode
2135 if( res == 1 ) p%PARAM%fg_result = 1
2136 if( visual == 1 ) p%PARAM%fg_visual = 1
2137 if( neutral == 1 ) p%PARAM%fg_neutral = 1
2147 integer(kind=kint) :: ctrl
2148 integer(kind=kint) :: counter
2151 integer(kind=kint) :: rcode
2165 integer(kind=kint) :: ctrl
2166 integer(kind=kint) :: nout
2167 integer(kind=kint) :: version
2169 integer(kind=kint) :: rcode
2185 integer(kind=kint) :: ctrl
2186 integer(kind=kint) :: counter
2188 integer(kind=kint) :: rcode
2189 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
2190 integer(kind=kint) :: i, n, old_size, new_size
2192 if( p%SOLID%file_type /=
kbcffstr )
return
2196 old_size = p%SOLID%COUPLE_ngrp_tot
2197 new_size = old_size + n
2198 p%SOLID%COUPLE_ngrp_tot = new_size
2202 allocate( grp_id_name(n))
2204 p%PARAM%fg_couple_type, &
2205 p%PARAM%fg_couple_first, &
2206 p%PARAM%fg_couple_window, &
2207 grp_id_name, hecmw_name_len )
2211 n, grp_id_name, p%SOLID%COUPLE_ngrp_ID(old_size+1:))
2213 deallocate( grp_id_name )
2214 p%PARAM%fg_couple = 1
2224 integer(kind=kint) :: ctrl
2226 real(kind=kreal),
pointer :: val(:), table(:)
2227 character(len=HECMW_NAME_LEN) :: name
2228 integer :: nline, n, type_def, type_time, type_val, rcode
2231 if( nline<=0 )
return
2232 allocate( val(nline*4) )
2233 allocate( table(nline*4) )
2240 if(
associated(val) )
deallocate( val )
2241 if(
associated(table) )
deallocate( table )
2248 integer(kind=kint) :: ctrl
2249 integer(kind=kint) :: counter
2252 integer(kind=kint) :: rcode
2253 character(HECMW_NAME_LEN) :: amp
2254 integer(kind=kint) :: amp_id
2255 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
2256 integer(kind=kint) :: i, n, old_size, new_size
2257 integer(kind=kint) :: gid, dtype, state
2258 real(kind=kreal) ::
eps
2259 real(kind=kreal),
pointer :: thlow(:), thup(:)
2266 old_size = p%SOLID%elemact%ELEMACT_egrp_tot
2267 new_size = old_size + n
2268 p%SOLID%elemact%ELEMACT_egrp_tot = new_size
2279 allocate( grp_id_name(n), thlow(n), thup(n) )
2285 call amp_name_to_id( p%MESH,
'!ELEMENT_ACTIVATION', amp, amp_id )
2287 p%SOLID%elemact%ELEMACT_egrp_amp(old_size+i) = amp_id
2288 p%SOLID%elemact%ELEMACT_egrp_eps(old_size+i) =
eps
2290 p%SOLID%elemact%ELEMACT_egrp_GRPID(old_size+1:new_size) = gid
2291 p%SOLID%elemact%ELEMACT_egrp_depends(old_size+1:new_size) = dtype
2292 p%SOLID%elemact%ELEMACT_egrp_ts_lower(old_size+1:new_size) = thlow(1:n)
2293 p%SOLID%elemact%ELEMACT_egrp_ts_upper(old_size+1:new_size) = thup(1:n)
2294 p%SOLID%elemact%ELEMACT_egrp_state(old_size+1:new_size) = state
2296 call elem_grp_name_to_id_ex( p%MESH,
'!ELEMENT_ACTIVATION', n, grp_id_name, p%SOLID%elemact%ELEMACT_egrp_ID(old_size+1:))
2298 deallocate( grp_id_name )
2312 integer(kind=kint) :: ctrl
2313 integer(kind=kint) :: counter
2315 integer(kind=kint) :: rcode
2317 integer :: nout, nout_monit,node_monit_1 ,elem_monit_1 ,intg_monit_1
2318 integer :: ipt, idx_elpl, iout_list(6)
2319 real(kind=kreal) :: sig_y0, h_dash
2321 if( counter > 1 )
then
2328 if( ipt == 2 ) p%PARAM%nlgeom = .true.
2332 write(*,*)
"Warning : !STATIC : parameter 'TYPE=INFINITE' is deprecated." &
2333 & //
" Please use the replacement parameter 'TYPE=INFINITESIMAL'"
2341 nout, nout_monit, node_monit_1, &
2342 elem_monit_1, intg_monit_1 )
2355 integer(kind=kint) :: ctrl
2356 integer(kind=kint) :: counter
2359 integer(kind=kint) :: rcode
2360 integer(kind=kint) ::
type = 0
2361 character(HECMW_NAME_LEN) :: amp, rotc_name(1)
2362 integer(kind=kint) :: amp_id, rotc_id(1), n_rotc
2363 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
2364 integer(kind=kint),
pointer :: dof_ids (:)
2365 integer(kind=kint),
pointer :: dof_ide (:)
2366 real(kind=kreal),
pointer :: val_ptr(:)
2367 integer(kind=kint) :: i, n, old_size, new_size
2369 integer(kind=kint) :: gid, istot
2389 if( rotc_name(1) /=
' ' )
then
2390 if( istot /= 0 )
then
2391 write(*,*)
'fstr control file error : !BOUNDARY : rotational boundary cannot be specified with total value'
2392 write(
ilog,*)
'fstr control file error : !BOUNDARY : rotational boundary cannot be specified with total value'
2395 p%SOLID%BOUNDARY_ngrp_rot = p%SOLID%BOUNDARY_ngrp_rot + 1
2396 n_rotc = p%SOLID%BOUNDARY_ngrp_rot
2406 old_size = p%SOLID%BOUNDARY_ngrp_tot
2407 new_size = old_size + n
2408 p%SOLID%BOUNDARY_ngrp_tot = new_size
2418 allocate( grp_id_name(n) )
2419 allocate( dof_ids(n) )
2420 allocate( dof_ide(n) )
2421 allocate( val_ptr(n) )
2428 p%SOLID%BOUNDARY_ngrp_GRPID(old_size+1:new_size) = gid
2430 p%SOLID%BOUNDARY_ngrp_istot(old_size+1:new_size) = istot
2433 p%SOLID%BOUNDARY_ngrp_rotID(old_size+1:) = n_rotc
2434 p%SOLID%BOUNDARY_ngrp_centerID(old_size+1:) = rotc_id(1)
2437 if( (dof_ids(i) < 1).or.(6 < dof_ids(i)).or.(dof_ide(i) < 1).or.(6 < dof_ide(i)) )
then
2438 write(*,*)
'fstr control file error : !BOUNDARY : range of dof_ids and dof_ide is from 1 to 6'
2439 write(
ilog,*)
'fstr control file error : !BOUNDARY : range of dof_ids and dof_ide is from 1 to 6'
2442 p%SOLID%BOUNDARY_ngrp_val(old_size+i) = val_ptr(i)
2443 p%SOLID%BOUNDARY_ngrp_type(old_size+i) = 10 * dof_ids(i) + dof_ide(i)
2444 p%SOLID%BOUNDARY_ngrp_amp(old_size+i) = amp_id
2447 deallocate( grp_id_name )
2448 deallocate( dof_ids )
2449 deallocate( dof_ide )
2450 deallocate( val_ptr )
2451 nullify( grp_id_name )
2471 integer(kind=kint) :: ctrl
2472 integer(kind=kint) :: counter
2475 integer(kind=kint) :: rcode
2476 character(HECMW_NAME_LEN) :: amp, rotc_name(1)
2477 integer(kind=kint) :: amp_id, rotc_id(1), n_rotc
2478 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
2479 real(kind=kreal),
pointer :: val_ptr(:)
2480 integer(kind=kint),
pointer :: id_ptr(:)
2481 integer(kind=kint) :: i, n, old_size, new_size
2482 integer(kind=kint) :: gid
2484 if( p%SOLID%file_type /=
kbcffstr )
return
2495 if( rotc_name(1) /=
' ' )
then
2496 p%SOLID%CLOAD_ngrp_rot = p%SOLID%CLOAD_ngrp_rot + 1
2497 n_rotc = p%SOLID%CLOAD_ngrp_rot
2503 old_size = p%SOLID%CLOAD_ngrp_tot
2504 new_size = old_size + n
2505 p%SOLID%CLOAD_ngrp_tot = new_size
2516 allocate( grp_id_name(n))
2517 allocate( id_ptr(n) )
2518 allocate( val_ptr(n) )
2526 p%SOLID%CLOAD_ngrp_rotID(old_size+1:) = n_rotc
2527 p%SOLID%CLOAD_ngrp_centerID(old_size+1:) = rotc_id(1)
2531 p%SOLID%CLOAD_ngrp_amp(old_size+i) = amp_id
2532 p%SOLID%CLOAD_ngrp_DOF(old_size+i) = id_ptr(i)
2533 p%SOLID%CLOAD_ngrp_val(old_size+i) = val_ptr(i)
2535 p%SOLID%CLOAD_ngrp_GRPID(old_size+1:new_size) = gid
2538 deallocate( grp_id_name )
2539 deallocate( id_ptr )
2540 deallocate( val_ptr )
2541 nullify( grp_id_name )
2545 if( p%MESH%n_refine > 0 )
then
2547 if( hecmw_ngrp_get_number(p%MESH, p%SOLID%CLOAD_NGRP_ID(old_size+i)) > 1 )
then
2548 write(*,*)
'fstr control file error : !CLOAD : cannot be used with NGRP when mesh is refined'
2549 write(
ilog,*)
'fstr control file error : !CLOAD : cannot be used with NGRP when mesh is refined'
2562 integer(kind=kint) :: ctrl
2563 integer(kind=kint) :: counter
2566 integer(kind=kint) :: rcode
2567 character(HECMW_NAME_LEN) :: amp
2568 integer(kind=kint) :: amp_id
2569 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
2570 real(kind=kreal),
pointer :: val_ptr(:)
2571 integer(kind=kint),
pointer :: id_ptr(:)
2572 integer(kind=kint) :: i, n, old_size, new_size
2573 integer(kind=kint) :: gid, loadcase
2576 if( p%SOLID%file_type /=
kbcffstr)
return
2590 old_size = p%FREQ%FLOAD_ngrp_tot
2591 new_size = old_size + n
2594 p%FREQ%FLOAD_ngrp_tot = new_size
2603 allocate( grp_id_name(n) )
2604 allocate( id_ptr(n) )
2605 allocate( val_ptr(n) )
2612 p%FREQ%FLOAD_ngrp_DOF(old_size+i) = id_ptr(i)
2613 p%FREQ%FLOAD_ngrp_valre(old_size+i) = val_ptr(i)
2617 p%FREQ%FLOAD_ngrp_DOF(old_size+i) = id_ptr(i)
2618 p%FREQ%FLOAD_ngrp_valim(old_size+i) = val_ptr(i)
2622 write(*,*)
"Error this load set is not defined!"
2623 write(
ilog,*)
"Error this load set is not defined!"
2626 p%FREQ%FLOAD_ngrp_GRPID(old_size+1:new_size) = gid
2628 p%FREQ%FLOAD_ngrp_ID(old_size+1:), p%FREQ%FLOAD_ngrp_TYPE(old_size+1:))
2630 deallocate( grp_id_name )
2631 deallocate( id_ptr )
2632 deallocate( val_ptr )
2633 nullify( grp_id_name )
2641 integer(kind=kint) :: ctrl
2642 character(len=HECMW_NAME_LEN) :: node_id(:)
2643 integer(kind=kint),
pointer :: dof_id(:)
2644 integer(kind=kint) :: node_id_len
2645 real(kind=kreal),
pointer :: value(:)
2647 character(len=HECMW_NAME_LEN) :: data_fmt, ss
2649 write(ss,*) node_id_len
2650 write(data_fmt,
'(a,a,a)')
'S', trim(adjustl(ss)),
'IR '
2662 integer(kind=kint) :: ctrl
2663 integer(kind=kint) :: counter
2666 integer(kind=kint) :: filename_len
2667 character(len=HECMW_NAME_LEN) :: datafmt, ss
2670 filename_len = hecmw_filename_len
2671 write(ss,*) filename_len
2672 write(datafmt,
'(a,a,a)')
'S', trim(adjustl(ss)),
' '
2687 real(kind=kreal),
pointer :: array(:,:)
2688 integer(kind=kint) :: old_size, new_size, i, j
2689 real(kind=kreal),
pointer :: temp(:,:)
2691 if( old_size >= new_size )
then
2695 if(
associated( array ) )
then
2696 allocate(temp(0:6, old_size))
2699 allocate(array(0:6, new_size))
2703 array(j,i) = temp(j,i)
2708 allocate(array(0:6, new_size))
2716 integer(kind=kint) :: ctrl
2717 integer(kind=kint) :: counter
2720 integer(kind=kint) :: rcode
2721 character(HECMW_NAME_LEN) :: amp
2722 integer(kind=kint) :: amp_id
2723 integer(kind=kint) :: follow
2724 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
2725 real(kind=kreal),
pointer :: new_params(:,:)
2726 logical,
pointer :: fg_surface(:)
2727 integer(kind=kint),
pointer :: lid_ptr(:)
2728 integer(kind=kint) :: i, j, n, old_size, new_size
2729 integer(kind=kint) :: gid
2731 if( p%SOLID%file_type /=
kbcffstr )
return
2738 old_size = p%SOLID%DLOAD_ngrp_tot
2739 new_size = old_size + n
2740 p%SOLID%DLOAD_ngrp_tot = new_size
2749 allocate( grp_id_name(n))
2750 allocate( lid_ptr(n) )
2751 allocate( new_params(0:6,n))
2752 allocate( fg_surface(n))
2755 follow = p%SOLID%DLOAD_follow
2756 if( .not. p%PARAM%nlgeom ) follow = 0
2758 grp_id_name, hecmw_name_len, &
2759 lid_ptr, new_params )
2762 p%SOLID%DLOAD_follow = follow
2764 p%SOLID%DLOAD_ngrp_amp(old_size+i) = amp_id
2765 p%SOLID%DLOAD_ngrp_LID(old_size+i) = lid_ptr(i)
2767 p%SOLID%DLOAD_ngrp_params(j,old_size+i) = new_params(j,i)
2769 fg_surface(i) = ( lid_ptr(i) == 100 )
2771 p%SOLID%DLOAD_ngrp_GRPID(old_size+1:new_size) = gid
2773 deallocate( grp_id_name )
2774 deallocate( lid_ptr )
2775 deallocate( new_params )
2776 deallocate( fg_surface )
2777 nullify( grp_id_name )
2779 nullify( new_params )
2780 nullify( fg_surface )
2790 integer(kind=kint) :: ctrl
2791 integer(kind=kint) :: counter
2794 integer(kind=kint) :: rcode, gid
2795 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
2796 real(kind=kreal),
pointer :: val_ptr(:)
2797 integer(kind=kint) :: i, n, old_size, new_size
2799 if( p%SOLID%file_type /=
kbcffstr )
return
2805 old_size = p%SOLID%TEMP_ngrp_tot
2807 new_size = old_size + n
2809 new_size = old_size + 1
2815 allocate( grp_id_name(n))
2816 allocate( val_ptr(n) )
2820 p%SOLID%TEMP_irres, &
2821 p%SOLID%TEMP_tstep, &
2822 p%SOLID%TEMP_interval, &
2823 p%SOLID%TEMP_rtype, &
2824 grp_id_name, hecmw_name_len, &
2828 p%SOLID%TEMP_ngrp_val(old_size+i) = val_ptr(i)
2830 deallocate( val_ptr )
2833 p%SOLID%TEMP_ngrp_GRPID(old_size+1:new_size) = gid
2835 if( p%SOLID%TEMP_irres == 0 )
then
2836 p%SOLID%TEMP_ngrp_tot = new_size
2838 n, grp_id_name, p%SOLID%TEMP_ngrp_ID(old_size+1:))
2840 deallocate( grp_id_name )
2852 integer(kind=kint) :: ctrl
2853 integer(kind=kint) :: counter
2856 integer(kind=kint) :: rcode
2857 character(HECMW_NAME_LEN) :: amp
2858 integer(kind=kint) :: amp_id
2859 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
2860 real(kind=kreal),
pointer :: val_ptr(:)
2861 integer(kind=kint),
pointer :: id_ptr(:)
2862 integer(kind=kint) :: i, n, old_size, new_size
2863 integer(kind=kint) :: gid
2865 if( p%SOLID%file_type /=
kbcffstr )
return
2870 old_size = p%SOLID%SPRING_ngrp_tot
2871 new_size = old_size + n
2872 p%SOLID%SPRING_ngrp_tot = new_size
2879 allocate( grp_id_name(n))
2880 allocate( id_ptr(n) )
2881 allocate( val_ptr(n) )
2890 p%SOLID%SPRING_ngrp_amp(old_size+i) = amp_id
2891 p%SOLID%SPRING_ngrp_DOF(old_size+i) = id_ptr(i)
2892 p%SOLID%SPRING_ngrp_val(old_size+i) = val_ptr(i)
2894 p%SOLID%SPRING_ngrp_GRPID(old_size+1:new_size) = gid
2897 deallocate( grp_id_name )
2898 deallocate( id_ptr )
2899 deallocate( val_ptr )
2900 nullify( grp_id_name )
2913 integer(kind=kint) :: ctrl
2914 integer(kind=kint) :: counter
2917 integer(kind=kint) :: rcode
2935 integer(kind=kint) :: ctrl
2936 integer(kind=kint) :: counter
2939 integer(kind=kint) :: rcode
2940 integer(kind=kint) :: n
2941 character(len=HECMW_NAME_LEN) :: mName
2942 integer(kind=kint) :: i
2954 p%PARAM%analysis_n = n
2961 p%PARAM%eps = 1.0e-6
2962 p%PARAM%timepoint_id = 0
2973 if( rcode /= 0 )
then
2977 if(
associated(p%PARAM%timepoints) )
then
2978 do i=1,
size(p%PARAM%timepoints)
2979 if(
fstr_streqr( p%PARAM%timepoints(i)%name, mname ) )
then
2980 p%PARAM%timepoint_id = i;
exit
2991 p%HEAT%STEP_DLTIME = p%PARAM%dtime
2992 p%HEAT%STEP_EETIME = p%PARAM%etime
2993 p%HEAT%STEP_DELMIN = p%PARAM%dtmin
2994 p%HEAT%STEP_DELMAX = p%PARAM%delmax
2995 p%HEAT%timepoint_id = p%PARAM%timepoint_id
3005 integer(kind=kint) :: ctrl
3006 integer(kind=kint) :: counter
3009 integer(kind=kint) :: rcode
3010 character(HECMW_NAME_LEN) :: amp
3011 integer(kind=kint) :: amp_id
3012 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
3013 real(kind=kreal),
pointer :: value(:)
3014 integer(kind=kint) :: i, j, n, m, head, id, member_n, old_size, new_size
3015 integer(kind=kint),
pointer :: member(:)
3016 integer(kind=kint) :: local_id, rtc
3022 allocate( grp_id_name(n))
3027 grp_id_name, hecmw_name_len,
value )
3038 else if( rtc < 0 )
then
3044 deallocate( grp_id_name )
3050 old_size = p%HEAT%T_FIX_tot
3051 new_size = old_size + m
3055 p%HEAT%T_FIX_tot = new_size
3058 member => p%HEAT%T_FIX_node(head:)
3064 member(1) = local_id
3066 else if( rtc < 0 )
then
3067 member_n =
get_grp_member( p%MESH,
'node_grp', grp_id_name(i), member )
3072 member => member( member_n+1 : )
3075 p%HEAT%T_FIX_val (id) = value(i)
3076 p%HEAT%T_FIX_ampl (id) = amp_id
3081 deallocate( grp_id_name )
3092 integer(kind=kint) :: ctrl
3093 integer(kind=kint) :: counter
3096 integer(kind=kint) :: rcode
3097 character(HECMW_NAME_LEN) :: amp
3098 integer(kind=kint) :: amp_id
3099 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
3100 real(kind=kreal),
pointer :: value(:)
3101 integer(kind=kint) :: i, j, n, m, head, id, member_n, old_size, new_size
3102 integer(kind=kint),
pointer :: member(:)
3103 integer(kind=kint) :: local_id, rtc
3109 allocate( grp_id_name(n))
3114 grp_id_name, hecmw_name_len,
value )
3125 else if( rtc < 0 )
then
3131 deallocate( grp_id_name )
3137 old_size = p%HEAT%Q_NOD_tot
3138 new_size = old_size + m
3142 p%HEAT%Q_NOD_tot = new_size
3145 member => p%HEAT%Q_NOD_node(head:)
3150 member(1) = local_id
3152 else if( rtc < 0 )
then
3153 member_n =
get_grp_member( p%MESH,
'node_grp', grp_id_name(i), member )
3157 if( i<n ) member => member( member_n+1 : )
3159 p%HEAT%Q_NOD_val (id) = value(i)
3160 p%HEAT%Q_NOD_ampl (id) = amp_id
3165 deallocate( grp_id_name )
3177 integer(kind=kint) :: ctrl
3178 integer(kind=kint) :: counter
3181 integer(kind=kint) :: rcode
3182 character(HECMW_NAME_LEN) :: amp
3183 integer(kind=kint) :: amp_id
3184 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
3185 integer(kind=kint),
pointer :: load_type(:)
3186 real(kind=kreal),
pointer :: value(:)
3187 integer(kind=kint) :: i, j, n, m, head, id, member_n, old_size, new_size
3188 integer(kind=kint),
pointer :: member(:)
3189 integer(kind=kint) :: local_id, rtc
3195 allocate( grp_id_name(n))
3196 allocate( load_type(n))
3201 grp_id_name, hecmw_name_len, load_type,
value )
3211 else if( rtc < 0 )
then
3217 deallocate( grp_id_name )
3218 deallocate( load_type )
3224 old_size = p%HEAT%Q_SUF_tot
3225 new_size = old_size + m
3230 p%HEAT%Q_SUF_tot = new_size
3233 member => p%HEAT%Q_SUF_elem(head:)
3238 member(1) = local_id
3240 else if( rtc < 0 )
then
3241 member_n =
get_grp_member( p%MESH,
'elem_grp', grp_id_name(i), member )
3245 if( i<n ) member => member( member_n+1 : )
3247 p%HEAT%Q_SUF_surf (id) = load_type(i)
3248 p%HEAT%Q_SUF_val (id) = value(i)
3249 p%HEAT%Q_SUF_ampl (id) = amp_id
3254 deallocate( grp_id_name )
3255 deallocate( load_type )
3267 integer(kind=kint) :: ctrl
3268 integer(kind=kint) :: counter
3271 integer(kind=kint) :: rcode
3272 character(HECMW_NAME_LEN) :: amp
3273 integer(kind=kint) :: amp_id
3274 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
3275 real(kind=kreal),
pointer :: value(:)
3276 integer(kind=kint) :: i, j, n, m, head, id, member_n, old_size, new_size
3277 integer(kind=kint),
pointer :: member1(:), member2(:)
3283 allocate( grp_id_name(n))
3288 grp_id_name, hecmw_name_len,
value )
3299 deallocate( grp_id_name )
3305 old_size = p%HEAT%Q_SUF_tot
3306 new_size = old_size + m
3311 p%HEAT%Q_SUF_tot = new_size
3314 member1 => p%HEAT%Q_SUF_elem(head:)
3315 member2 => p%HEAT%Q_SUF_surf(head:)
3318 member_n =
get_grp_member( p%MESH,
'surf_grp', grp_id_name(i), member1, member2 )
3320 member1 => member1( member_n+1 : )
3321 member2 => member2( member_n+1 : )
3324 p%HEAT%Q_SUF_val (id) = value(i)
3325 p%HEAT%Q_SUF_ampl (id) = amp_id
3330 deallocate( grp_id_name )
3342 integer(kind=kint) :: ctrl
3343 integer(kind=kint) :: counter
3346 integer(kind=kint) :: rcode
3347 character(HECMW_NAME_LEN) :: amp1, amp2
3348 integer(kind=kint) :: amp_id1, amp_id2
3349 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
3350 integer(kind=kint),
pointer :: load_type(:)
3351 real(kind=kreal),
pointer :: value(:)
3352 real(kind=kreal),
pointer :: shink(:)
3353 integer(kind=kint) :: i, j, n, m, head, id, member_n, old_size, new_size
3354 integer(kind=kint),
pointer :: member(:)
3355 integer(kind=kint) :: local_id, rtc
3361 allocate( grp_id_name(n))
3362 allocate( load_type(n))
3370 grp_id_name, hecmw_name_len, load_type,
value, shink )
3381 else if( rtc < 0 )
then
3387 deallocate( grp_id_name )
3388 deallocate( load_type )
3395 old_size = p%HEAT%H_SUF_tot
3396 new_size = old_size + m
3401 p%HEAT%H_SUF_tot = new_size
3404 member => p%HEAT%H_SUF_elem(head:)
3409 member(1) = local_id
3411 else if( rtc < 0 )
then
3412 member_n =
get_grp_member( p%MESH,
'elem_grp', grp_id_name(i), member )
3416 if( i<n ) member => member( member_n+1 : )
3418 p%HEAT%H_SUF_surf (id) = load_type(i)
3419 p%HEAT%H_SUF_val (id,1) = value(i)
3420 p%HEAT%H_SUF_val (id,2) = shink(i)
3421 p%HEAT%H_SUF_ampl (id,1) = amp_id1
3422 p%HEAT%H_SUF_ampl (id,2) = amp_id2
3427 deallocate( grp_id_name )
3428 deallocate( load_type )
3441 integer(kind=kint) :: ctrl
3442 integer(kind=kint) :: counter
3445 integer(kind=kint) :: rcode
3446 character(HECMW_NAME_LEN) :: amp1, amp2
3447 integer(kind=kint) :: amp_id1, amp_id2
3448 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
3449 real(kind=kreal),
pointer :: value(:)
3450 real(kind=kreal),
pointer :: shink(:)
3451 integer(kind=kint) :: i, j, n, m, head, id, member_n, old_size, new_size
3452 integer(kind=kint),
pointer :: member1(:), member2(:)
3458 allocate( grp_id_name(n))
3465 grp_id_name, hecmw_name_len,
value, shink )
3477 deallocate( grp_id_name )
3484 old_size = p%HEAT%H_SUF_tot
3485 new_size = old_size + m
3490 p%HEAT%H_SUF_tot = new_size
3493 member1 => p%HEAT%H_SUF_elem(head:)
3494 member2 => p%HEAT%H_SUF_surf(head:)
3497 member_n =
get_grp_member( p%MESH,
'surf_grp', grp_id_name(i), member1, member2 )
3499 member1 => member1( member_n+1 : )
3500 member2 => member2( member_n+1 : )
3503 p%HEAT%H_SUF_val (id,1) = value(i)
3504 p%HEAT%H_SUF_val (id,2) = shink(i)
3505 p%HEAT%H_SUF_ampl (id,1) = amp_id1
3506 p%HEAT%H_SUF_ampl (id,2) = amp_id2
3511 deallocate( grp_id_name )
3524 integer(kind=kint) :: ctrl
3525 integer(kind=kint) :: counter
3528 integer(kind=kint) :: rcode
3529 character(HECMW_NAME_LEN) :: amp1, amp2
3530 integer(kind=kint) :: amp_id1, amp_id2
3531 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
3532 integer(kind=kint),
pointer :: load_type(:)
3533 real(kind=kreal),
pointer :: value(:)
3534 real(kind=kreal),
pointer :: shink(:)
3535 integer(kind=kint) :: i, j, n, m, head, id, member_n, old_size, new_size
3536 integer(kind=kint),
pointer :: member(:)
3537 integer(kind=kint) :: local_id, rtc
3543 allocate( grp_id_name(n))
3544 allocate( load_type(n))
3551 grp_id_name, hecmw_name_len, load_type,
value, shink )
3562 else if( rtc < 0 )
then
3568 deallocate( grp_id_name )
3569 deallocate( load_type )
3576 old_size = p%HEAT%R_SUF_tot
3577 new_size = old_size + m
3582 p%HEAT%R_SUF_tot = new_size
3585 member => p%HEAT%R_SUF_elem(head:)
3590 member(1) = local_id
3592 else if( rtc < 0 )
then
3593 member_n =
get_grp_member( p%MESH,
'elem_grp', grp_id_name(i), member )
3597 if( i<n ) member => member( member_n+1 : )
3599 p%HEAT%R_SUF_surf (id) = load_type(i)
3600 p%HEAT%R_SUF_val (id,1) = value(i)
3601 p%HEAT%R_SUF_val (id,2) = shink(i)
3602 p%HEAT%R_SUF_ampl (id,1) = amp_id1
3603 p%HEAT%R_SUF_ampl (id,2) = amp_id2
3608 deallocate( grp_id_name )
3609 deallocate( load_type )
3622 integer(kind=kint) :: ctrl
3623 integer(kind=kint) :: counter
3626 integer(kind=kint) :: rcode
3627 character(HECMW_NAME_LEN) :: amp1, amp2
3628 integer(kind=kint) :: amp_id1, amp_id2
3629 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
3630 real(kind=kreal),
pointer :: value(:)
3631 real(kind=kreal),
pointer :: shink(:)
3632 integer(kind=kint) :: i, j, n, m, head, id, member_n, old_size, new_size
3633 integer(kind=kint),
pointer :: member1(:), member2(:)
3639 allocate( grp_id_name(n))
3657 deallocate( grp_id_name )
3664 old_size = p%HEAT%R_SUF_tot
3665 new_size = old_size + m
3670 p%HEAT%R_SUF_tot = new_size
3673 member1 => p%HEAT%R_SUF_elem(head:)
3674 member2 => p%HEAT%R_SUF_surf(head:)
3677 member_n =
get_grp_member( p%MESH,
'surf_grp', grp_id_name(i), member1, member2 )
3679 member1 => member1( member_n+1 : )
3680 member2 => member2( member_n+1 : )
3683 p%HEAT%R_SUF_val (id,1) = value(i)
3684 p%HEAT%R_SUF_val (id,2) = shink(i)
3685 p%HEAT%R_SUF_ampl (id,1) = amp_id1
3686 p%HEAT%R_SUF_ampl (id,2) = amp_id2
3691 deallocate( grp_id_name )
3707 integer(kind=kint) :: ctrl
3708 integer(kind=kint) :: counter
3711 integer(kind=kint) :: rcode
3729 integer(kind=kint) :: ctrl
3730 integer(kind=kint) :: counter
3732 integer(kind=kint) :: rcode
3733 character(HECMW_NAME_LEN) :: grp_id_name(1)
3734 integer(kind=kint) :: grp_id(1)
3751 grp_id_name(1), hecmw_name_len, &
3757 if (p%DYN%idx_resp == 1)
then
3759 p%DYN%ngrp_monit = grp_id(1)
3761 read(grp_id_name,*) p%DYN%ngrp_monit
3773 integer(kind=kint) :: ctrl
3774 integer(kind=kint) :: counter
3777 integer(kind=kint) :: rcode
3778 integer(kind=kint) :: vType
3779 character(HECMW_NAME_LEN) :: amp
3780 integer(kind=kint) :: amp_id
3781 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
3782 integer(kind=kint),
pointer :: dof_ids (:)
3783 integer(kind=kint),
pointer :: dof_ide (:)
3784 real(kind=kreal),
pointer :: val_ptr(:)
3785 integer(kind=kint) :: i, j, n, old_size, new_size
3789 old_size = p%SOLID%VELOCITY_ngrp_tot
3790 new_size = old_size + n
3791 p%SOLID%VELOCITY_ngrp_tot = new_size
3798 allocate( grp_id_name(n))
3799 allocate( dof_ids(n))
3800 allocate( dof_ide(n))
3801 allocate( val_ptr(n) )
3806 grp_id_name, hecmw_name_len, &
3807 dof_ids, dof_ide, val_ptr )
3809 p%SOLID%VELOCITY_type = vtype
3810 if( vtype ==
kbcinitial ) p%DYN%VarInitialize = .true.
3813 n, grp_id_name, p%SOLID%VELOCITY_ngrp_ID(old_size+1:))
3817 if( (dof_ids(i) < 1).or.(6 < dof_ids(i)).or.(dof_ide(i) < 1).or.(6 < dof_ide(i)) )
then
3818 write(
ilog,*)
'fstr control file error : !VELOCITY : range of dof_ids and dof_ide is from 1 to 6'
3821 p%SOLID%VELOCITY_ngrp_type(j) = 10 * dof_ids(i) + dof_ide(i)
3822 p%SOLID%VELOCITY_ngrp_amp(j) = amp_id
3823 p%SOLID%VELOCITY_ngrp_val(old_size+i) = val_ptr(i)
3827 deallocate( grp_id_name )
3828 deallocate( dof_ids )
3829 deallocate( dof_ide )
3830 deallocate( val_ptr )
3831 nullify( grp_id_name )
3845 integer(kind=kint) :: ctrl
3846 integer(kind=kint) :: counter
3849 integer(kind=kint) :: rcode
3850 integer(kind=kint) :: aType
3851 character(HECMW_NAME_LEN) :: amp
3852 integer(kind=kint) :: amp_id
3853 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
3854 integer(kind=kint),
pointer :: dof_ids (:)
3855 integer(kind=kint),
pointer :: dof_ide (:)
3856 real(kind=kreal),
pointer :: val_ptr(:)
3857 integer(kind=kint) :: i, j, n, old_size, new_size
3862 old_size = p%SOLID%ACCELERATION_ngrp_tot
3863 new_size = old_size + n
3864 p%SOLID%ACCELERATION_ngrp_tot = new_size
3871 allocate( grp_id_name(n))
3872 allocate( dof_ids(n))
3873 allocate( dof_ide(n))
3874 allocate( val_ptr(n))
3879 grp_id_name, hecmw_name_len, &
3880 dof_ids, dof_ide, val_ptr)
3882 p%SOLID%ACCELERATION_type = atype
3883 if( atype ==
kbcinitial )p%DYN%VarInitialize = .true.
3886 n, grp_id_name, p%SOLID%ACCELERATION_ngrp_ID(old_size+1:))
3890 if( (dof_ids(i) < 1).or.(6 < dof_ids(i)).or.(dof_ide(i) < 1).or.(6 < dof_ide(i)) )
then
3891 write(
ilog,*)
'fstr control file error : !ACCELERATION : range of dof_ids and dof_ide is from 1 to 6'
3894 p%SOLID%ACCELERATION_ngrp_type(j) = 10 * dof_ids(i) + dof_ide(i)
3895 p%SOLID%ACCELERATION_ngrp_amp(j) = amp_id
3896 p%SOLID%ACCELERATION_ngrp_val(old_size+i) = val_ptr(i)
3900 deallocate( grp_id_name )
3901 deallocate( dof_ids )
3902 deallocate( dof_ide )
3903 deallocate( val_ptr )
3904 nullify( grp_id_name )
3921 integer(kind=kint) :: ctrl
3922 integer(kind=kint) :: counter
3925 integer(kind=kint) :: rcode
3971 integer(kind=kint) :: ctrl
3972 type (hecmwST_local_mesh) :: hecMESH
3973 type (fstr_solid ) :: fstrSOLID
3974 write(
ilog,*)
'### Error : In !BOUNDARY, TYPE=NASTRAN is not supported.'
3975 call hecmw_abort( hecmw_comm_get_comm())
3984 integer(kind=kint) :: ctrl
3988 integer(kind=kint) :: rcode
4002 integer(kind=kint) :: ctrl
4005 integer(kind=kint) :: rcode, nid
4006 character(len=HECMW_NAME_LEN) :: data_fmt
4008 data_fmt =
'SOLUTION,MATERIAL '
4021 type(hecmwst_local_mesh),
pointer :: hecMESH
4022 integer(kind=kint) :: n, i, sgrp_id, ngrp_id, ngrp_id2
4024 n = hecmesh%contact_pair%n_pair
4026 if( hecmesh%contact_pair%type(i) /= hecmw_contact_type_surf_surf ) cycle
4027 sgrp_id = hecmesh%contact_pair%slave_grp_id(i)
4030 hecmesh%contact_pair%type(i) = hecmw_contact_type_node_surf
4031 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.