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( rho>0.d0 ) cgn = rho
479 if( alpha>0.d0 ) cgt = alpha
481 if( .not. fstr_contact_check( fstrsolid%contacts(c_contact+i), p%MESH ) )
then
482 write(*,*)
'### Error: Inconsistence in contact and surface definition : ' , i+c_contact
483 write(
ilog,*)
'### Error: Inconsistence in contact and surface definition : ', i+c_contact
487 isok = fstr_contact_init( fstrsolid%contacts(c_contact+i), p%MESH, fstrparam%contactparam(cparam_id),
myrank)
489 isok = fstr_contact_init( fstrsolid%contacts(c_contact+i), p%MESH, fstrparam%contactparam(cparam_id))
494 c_contact = c_contact+n
497 elseif( header_name ==
'!EMBED' )
then
499 if( .not.
fstr_ctrl_get_embed( ctrl, n, fstrsolid%embeds(c_embed+1:c_embed+n), mname ) )
then
500 write(*,*)
'### Error: Fail in read in embed condition : ', c_embed
501 write(
ilog,*)
'### Error: Fail in read in embed condition : ', c_embed
505 do i=1,
size(fstrparam%contactparam)-1
506 if(
fstr_streqr( fstrparam%contactparam(i)%name, mname ) )
then
511 if( .not. fstr_contact_check( fstrsolid%embeds(c_embed+i), p%MESH ) )
then
512 write(*,*)
'### Error: Inconsistence in contact and surface definition : ' , i+c_embed
513 write(
ilog,*)
'### Error: Inconsistence in contact and surface definition : ', i+c_embed
517 isok = fstr_embed_init( fstrsolid%embeds(c_embed+i), p%MESH, fstrparam%contactparam(cparam_id),
myrank)
519 isok = fstr_embed_init( fstrsolid%embeds(c_embed+i), p%MESH, fstrparam%contactparam(cparam_id))
525 else if( header_name ==
'!ISTEP' )
then
527 if( .not.
fstr_ctrl_get_istep( ctrl, hecmesh, fstrsolid%step_ctrl(c_istep), mname, mname2 ) )
then
528 write(*,*)
'### Error: Fail in read in step definition : ' , c_istep
529 write(
ilog,*)
'### Error: Fail in read in step definition : ', c_istep
532 if(
associated(fstrparam%timepoints) )
then
533 do i=1,
size(fstrparam%timepoints)
534 if(
fstr_streqr( fstrparam%timepoints(i)%name, mname ) )
then
535 fstrsolid%step_ctrl(c_istep)%timepoint_id = i;
exit
539 if(
associated(fstrparam%ainc) )
then
540 do i=1,
size(fstrparam%ainc)
541 if(
fstr_streqr( fstrparam%ainc(i)%name, mname2 ) )
then
542 fstrsolid%step_ctrl(c_istep)%AincParam_id = i;
exit
546 else if( header_name ==
'!STEP' .and. version>=1 )
then
548 if( .not.
fstr_ctrl_get_istep( ctrl, hecmesh, fstrsolid%step_ctrl(c_istep), mname, mname2 ) )
then
549 write(*,*)
'### Error: Fail in read in step definition : ' , c_istep
550 write(
ilog,*)
'### Error: Fail in read in step definition : ', c_istep
553 if(
associated(fstrparam%timepoints) )
then
554 do i=1,
size(fstrparam%timepoints)
555 if(
fstr_streqr( fstrparam%timepoints(i)%name, mname ) )
then
556 fstrsolid%step_ctrl(c_istep)%timepoint_id = i;
exit
560 if(
associated(fstrparam%ainc) )
then
561 do i=1,
size(fstrparam%ainc)-1
562 if(
fstr_streqr( fstrparam%ainc(i)%name, mname2 ) )
then
563 fstrsolid%step_ctrl(c_istep)%AincParam_id = i;
exit
568 else if( header_name ==
'!HEAT' )
then
572 else if( header_name ==
'!WELD_LINE' )
then
573 fstrheat%WL_tot = fstrheat%WL_tot+1
575 write(*,*)
'### Error: Fail in read in Weld Line definition : ' , fstrheat%WL_tot
576 write(
ilog,*)
'### Error: Fail in read in Weld Line definition : ', fstrheat%WL_tot
580 else if( header_name ==
'!INITIAL_CONDITION' .or. header_name ==
'!INITIAL CONDITION' )
then
581 c_initial = c_initial+1
583 write(*,*)
'### Error: Fail in read in INITIAL CONDITION definition : ' ,c_initial
584 write(
ilog,*)
'### Error: Fail in read in INITIAL CONDITION definition : ', c_initial
588 else if( header_name ==
'!SECTION' )
then
589 c_section = c_section+1
591 write(*,*)
'### Error: Fail in read in SECTION definition : ' , c_section
592 write(
ilog,*)
'### Error: Fail in read in SECTION definition : ', c_section
596 else if( header_name ==
'!ELEMOPT' )
then
597 c_elemopt = c_elemopt+1
599 write(*,*)
'### Error: Fail in read in ELEMOPT definition : ' , c_elemopt
600 write(
ilog,*)
'### Error: Fail in read in ELEMOPT definition : ', c_elemopt
605 else if( header_name ==
'!MATERIAL' )
then
606 c_material = c_material+1
608 write(*,*)
'### Error: Fail in read in material definition : ' , c_material
609 write(
ilog,*)
'### Error: Fail in read in material definition : ', c_material
613 if(cache < hecmesh%material%n_mat)
then
614 if(
fstr_streqr( hecmesh%material%mat_name(cache), mname ))
then
620 do i=1,hecmesh%material%n_mat
621 if(
fstr_streqr( hecmesh%material%mat_name(i), mname ) )
then
629 write(*,*)
'### Error: Fail in read in material definition : ' , c_material
630 write(
ilog,*)
'### Error: Fail in read in material definition : ', c_material
633 fstrsolid%materials(cid)%name = mname
634 if(c_material>hecmesh%material%n_mat)
call initmaterial( fstrsolid%materials(cid) )
636 else if( header_name ==
'!ELASTIC' )
then
637 if( c_material >0 )
then
639 fstrsolid%materials(cid)%mtype, &
640 fstrsolid%materials(cid)%nlgeom_flag, &
641 fstrsolid%materials(cid)%variables, &
642 fstrsolid%materials(cid)%dict)/=0 )
then
643 write(*,*)
'### Error: Fail in read in elasticity definition : ' , cid
644 write(
ilog,*)
'### Error: Fail in read in elasticity definition : ', cid
648 else if( header_name ==
'!PLASTIC' )
then
651 fstrsolid%materials(cid)%mtype, &
652 fstrsolid%materials(cid)%nlgeom_flag, &
653 fstrsolid%materials(cid)%variables, &
654 fstrsolid%materials(cid)%table, &
655 fstrsolid%materials(cid)%dict)/=0 )
then
656 write(*,*)
'### Error: Fail in read in plasticity definition : ' , cid
657 write(
ilog,*)
'### Error: Fail in read in plasticity definition : ', cid
661 else if( header_name ==
'!HYPERELASTIC' )
then
664 fstrsolid%materials(cid)%mtype, &
665 fstrsolid%materials(cid)%nlgeom_flag, &
666 fstrsolid%materials(cid)%variables )/=0 )
then
667 write(*,*)
'### Error: Fail in read in elasticity definition : ' , cid
668 write(
ilog,*)
'### Error: Fail in read in elasticity definition : ', cid
672 else if( header_name ==
'!VISCOELASTIC' )
then
675 fstrsolid%materials(cid)%mtype, &
676 fstrsolid%materials(cid)%nlgeom_flag, &
677 fstrsolid%materials(cid)%dict)/=0 )
then
678 write(*,*)
'### Error: Fail in read in plasticity definition : ' , cid
679 write(
ilog,*)
'### Error: Fail in read in plasticity definition : ', cid
683 else if( header_name ==
'!TRS' )
then
686 write(*,*)
'### WARNING: TRS can only be defined for viscoelastic material! It is ignored! '
687 write(
ilog,*)
'### WARNING: TRS can only be defined for viscoelastic material! It is ignored! '
689 if(
fstr_ctrl_get_trs( ctrl, fstrsolid%materials(cid)%mtype, fstrsolid%materials(cid)%variables)/=0 )
then
690 write(*,*)
'### Error: Fail in read in TRS definition : ' , cid
691 write(
ilog,*)
'### Error: Fail in read in TRS definition : ', cid
696 else if( header_name ==
'!CREEP' )
then
699 fstrsolid%materials(cid)%mtype, &
700 fstrsolid%materials(cid)%nlgeom_flag, &
701 fstrsolid%materials(cid)%dict)/=0 )
then
702 write(*,*)
'### Error: Fail in read in plasticity definition : ' , cid
703 write(
ilog,*)
'### Error: Fail in read in plasticity definition : ', cid
707 else if( header_name ==
'!DENSITY' )
then
710 write(*,*)
'### Error: Fail in read in density definition : ' , cid
711 write(
ilog,*)
'### Error: Fail in read in density definition : ', cid
715 else if( header_name ==
'!EXPANSION_COEF' .or. header_name ==
'!EXPANSION_COEFF' .or. &
716 header_name ==
'!EXPANSION')
then
719 fstrsolid%materials(cid)%dict)/=0 )
then
720 write(*,*)
'### Error: Fail in read in expansion coefficient definition : ' , cid
721 write(
ilog,*)
'### Error: Fail in read in expansion coefficient definition : ', cid
725 else if( header_name ==
'!FLUID' )
then
726 if( c_material >0 )
then
728 fstrsolid%materials(cid)%mtype, &
729 fstrsolid%materials(cid)%nlgeom_flag, &
730 fstrsolid%materials(cid)%variables, &
731 fstrsolid%materials(cid)%dict)/=0 )
then
732 write(*,*)
'### Error: Fail in read in fluid definition : ' , cid
733 write(
ilog,*)
'### Error: Fail in read in fluid definition : ', cid
737 else if( header_name ==
'!SPRING_D' )
then
738 if( c_material >0 )
then
740 fstrsolid%materials(cid)%mtype, &
741 fstrsolid%materials(cid)%nlgeom_flag, &
742 fstrsolid%materials(cid)%variables_i, &
743 fstrsolid%materials(cid)%dict)/=0 )
then
744 write(*,*)
'### Error: Fail in read in spring_d definition : ' , cid
745 write(
ilog,*)
'### Error: Fail in read in spring_d definition : ', cid
749 else if( header_name ==
'!SPRING_A' )
then
750 if( c_material >0 )
then
752 fstrsolid%materials(cid)%mtype, &
753 fstrsolid%materials(cid)%nlgeom_flag, &
754 fstrsolid%materials(cid)%variables_i, &
755 fstrsolid%materials(cid)%dict)/=0 )
then
756 write(*,*)
'### Error: Fail in read in spring_a definition : ' , cid
757 write(
ilog,*)
'### Error: Fail in read in spring_a definition : ', cid
761 else if( header_name ==
'!DASHPOT_D' )
then
762 if( c_material >0 )
then
764 fstrsolid%materials(cid)%mtype, &
765 fstrsolid%materials(cid)%nlgeom_flag, &
766 fstrsolid%materials(cid)%variables_i, &
767 fstrsolid%materials(cid)%dict)/=0 )
then
768 write(*,*)
'### Error: Fail in read in spring_d definition : ' , cid
769 write(
ilog,*)
'### Error: Fail in read in spring_d definition : ', cid
773 else if( header_name ==
'!DASHPOT_A' )
then
774 if( c_material >0 )
then
776 fstrsolid%materials(cid)%mtype, &
777 fstrsolid%materials(cid)%nlgeom_flag, &
778 fstrsolid%materials(cid)%variables_i, &
779 fstrsolid%materials(cid)%dict)/=0 )
then
780 write(*,*)
'### Error: Fail in read in spring_a definition : ' , cid
781 write(
ilog,*)
'### Error: Fail in read in spring_a definition : ', cid
785 else if( header_name ==
'!USER_MATERIAL' )
then
788 fstrsolid%materials(cid)%nlgeom_flag, fstrsolid%materials(cid)%nfstatus, &
789 fstrsolid%materials(cid)%variables(101:) )/=0 )
then
790 write(*,*)
'### Error: Fail in read in user defined material : ' , cid
791 write(
ilog,*)
'### Error: Fail in read in user defined material : ', cid
798 else if( header_name ==
'!WRITE' )
then
800 if( islog == 1 )
then
802 outctrl%filename = trim(logfilename)
803 outctrl%filenum =
ilog
806 if( femap == 1 )
then
808 write( outctrl%filename, *)
'utable.',
myrank,
".dat"
809 outctrl%filenum =
iutb
811 open( unit=outctrl%filenum, file=outctrl%filename, status=
'REPLACE', iostat=ierror )
812 if( ierror /= 0 )
then
813 write(*,*)
'Warning: cannot open output file: ', trim(outctrl%filename)
816 if( result == 1 )
then
820 if( visual == 1 )
then
825 else if( header_name ==
'!OUTPUT_RES' )
then
828 write(*,*)
'### Error: Fail in read in node output definition : ' , c_output
829 write(
ilog,*)
'### Error: Fail in read in node output definition : ', c_output
832 if( fstrsolid%output_ctrl(c_output)%outinfo%grp_id_name /=
'ALL' )
then
834 do i=1,hecmesh%node_group%n_grp
835 if( fstrsolid%output_ctrl(c_output)%outinfo%grp_id_name == hecmesh%node_group%grp_name(i) )
then
836 fstrsolid%output_ctrl(c_output)%outinfo%grp_id = i;
exit
840 else if( header_name ==
'!OUTPUT_VIS' )
then
843 write(*,*)
'### Error: Fail in read in element output definition : ' , c_output
844 write(
ilog,*)
'### Error: Fail in read in element output definition : ', c_output
847 if( fstrsolid%output_ctrl(c_output)%outinfo%grp_id_name /=
'ALL' )
then
849 do i=1,hecmesh%node_group%n_grp
850 if( fstrsolid%output_ctrl(c_output)%outinfo%grp_id_name == hecmesh%node_group%grp_name(i) )
then
851 fstrsolid%output_ctrl(c_output)%outinfo%grp_id = i;
exit
855 else if( header_name ==
'!AUTOINC_PARAM' )
then
856 c_aincparam = c_aincparam + 1
858 write(*,*)
'### Error: Fail in read in AUTOINC_PARAM definition : ' , c_aincparam
859 write(
ilog,*)
'### Error: Fail in read in AUTOINC_PARAM definition : ', c_aincparam
862 else if( header_name ==
'!TIME_POINTS' )
then
863 c_timepoints = c_timepoints + 1
865 write(*,*)
'### Error: Fail in read in TIME_POINTS definition : ' , c_timepoints
866 write(
ilog,*)
'### Error: Fail in read in TIME_POINTS definition : ', c_timepoints
869 else if( header_name ==
'!CONTACT_PARAM' )
then
870 c_contactparam = c_contactparam + 1
872 write(*,*)
'### Error: Fail in read in CONTACT_PARAM definition : ' , c_contactparam
873 write(
ilog,*)
'### Error: Fail in read in CONTACT_PARAM definition : ', c_contactparam
876 else if( header_name ==
'!CONTACT_INTERFERENCE' )
then
879 write(*,*)
'### Error: Fail in read in CONTACT_INTERFERENCE definition : ' , c_contact_if
880 write(
ilog,*)
'### Error: Fail in read in CONTACT_INTERFERENCE definition : ', c_contact_if
884 if( check_apply_contact_if(fstrparam%contact_if(c_contact_if+i), fstrsolid%contacts) /= 0)
then
885 write(*,*)
'### Error:(INTERFERENCE) Inconsistence of contact_pair in CONTACTS: ' , i+c_contact_if
886 write(
ilog,*)
'### Error:(INTERFERENCE) Inconsistence of contact_pair in CONTACTS: ', i+c_contact_if
890 c_contact_if = c_contact_if + n
891 else if( header_name ==
'!ULOAD' )
then
893 write(*,*)
'### Error: Fail in read in ULOAD definition : '
894 write(
ilog,*)
'### Error: Fail in read in ULOAD definition : '
898 else if( header_name ==
'!INCLUDE' )
then
899 ctrl_list(ictrl) = ctrl
904 write(*,*)
'### Error: Cannot open FSTR control file : ', input_filename
905 write(
ilog,*)
'### Error: Cannot open FSTR control file : ', input_filename
911 else if( header_name ==
'!END' )
then
922 ctrl = ctrl_list(ictrl)
930 if( .not. p%PARAM%nlgeom )
then
932 fstrsolid%materials(i)%nlgeom_flag = 0
936 if( fstrsolid%TEMP_ngrp_tot > 0 .or. fstrsolid%TEMP_irres > 0 )
then
937 allocate ( fstrsolid%temperature( hecmesh%n_node ) ,stat=ierror )
938 if( ierror /= 0 )
then
939 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, TEMPERATURE>'
940 write(
idbg,*)
' rank = ',
myrank,
' ierror = ',ierror
942 call hecmw_abort( hecmw_comm_get_comm())
945 allocate ( fstrsolid%last_temp( hecmesh%n_node ) ,stat=ierror )
946 if( ierror /= 0 )
then
947 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, LAST_TEMP>'
948 write(
idbg,*)
' rank = ',
myrank,
' ierror = ',ierror
950 call hecmw_abort( hecmw_comm_get_comm())
952 fstrsolid%last_temp = 0.d0
953 allocate ( fstrsolid%temp_bak( hecmesh%n_node ) ,stat=ierror )
954 if( ierror /= 0 )
then
955 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, TEMP_BAK>'
956 write(
idbg,*)
' rank = ',
myrank,
' ierror = ',ierror
958 call hecmw_abort( hecmw_comm_get_comm())
960 fstrsolid%temp_bak = 0.d0
963 if(
associated(fstrsolid%step_ctrl) )
then
964 fstrsolid%nstep_tot =
size(fstrsolid%step_ctrl)
968 if( p%PARAM%solution_type==
kststatic .and. p%PARAM%nlgeom )
then
969 write( *,* )
" ERROR: STEP not defined!"
970 write(
idbg,* )
"ERROR: STEP not defined!"
972 call hecmw_abort( hecmw_comm_get_comm())
975 if(
myrank==0 )
write(*,*)
"Step control not defined! Using default step=1"
976 fstrsolid%nstep_tot = 1
977 allocate( fstrsolid%step_ctrl(1) )
979 n = fstrsolid%BOUNDARY_ngrp_tot
980 if( n>0 )
allocate( fstrsolid%step_ctrl(1)%Boundary(n) )
982 fstrsolid%step_ctrl(1)%Boundary(i) = fstrsolid%BOUNDARY_ngrp_GRPID(i)
984 n = fstrsolid%CLOAD_ngrp_tot + fstrsolid%DLOAD_ngrp_tot + fstrsolid%TEMP_ngrp_tot + fstrsolid%SPRING_ngrp_tot
985 if( n>0 )
allocate( fstrsolid%step_ctrl(1)%Load(n) )
987 do i = 1, fstrsolid%CLOAD_ngrp_tot
989 fstrsolid%step_ctrl(1)%Load(n) = fstrsolid%CLOAD_ngrp_GRPID(i)
991 do i = 1, fstrsolid%DLOAD_ngrp_tot
993 fstrsolid%step_ctrl(1)%Load(n) = fstrsolid%DLOAD_ngrp_GRPID(i)
995 do i = 1, fstrsolid%TEMP_ngrp_tot
997 fstrsolid%step_ctrl(1)%Load(n) = fstrsolid%TEMP_ngrp_GRPID(i)
999 do i = 1, fstrsolid%SPRING_ngrp_tot
1001 fstrsolid%step_ctrl(1)%Load(n) = fstrsolid%SPRING_ngrp_GRPID(i)
1003 n = fstrsolid%elemact%ELEMACT_egrp_tot
1004 if( n>0 )
allocate( fstrsolid%step_ctrl(1)%ElemActivation(n) )
1006 fstrsolid%step_ctrl(1)%ElemActivation(i) = fstrsolid%elemact%ELEMACT_egrp_GRPID(i)
1015 if( p%PARAM%solution_type ==
kstheat)
then
1016 p%PARAM%fg_irres = fstrsolid%output_ctrl(3)%frequency
1017 p%PARAM%fg_iwres = fstrsolid%output_ctrl(4)%frequency
1018 p%HEAT%elemact = p%SOLID%elemact
1022 do i=1,hecmesh%section%n_sect
1023 cid = hecmesh%section%sect_mat_ID_item(i)
1024 n = fstrsolid%materials(cid)%totallyr
1025 if (n > n_totlyr)
then
1029 p%SOLID%max_lyr = n_totlyr
1040 type(hecmwst_local_mesh),
target :: hecMESH
1043 integer :: ndof, ntotal, ierror, ic_type
1047 fstrsolid%BOUNDARY_ngrp_tot = 0
1048 fstrsolid%BOUNDARY_ngrp_rot = 0
1049 fstrsolid%CLOAD_ngrp_tot = 0
1050 fstrsolid%CLOAD_ngrp_rot = 0
1051 fstrsolid%DLOAD_ngrp_tot = 0
1052 fstrsolid%DLOAD_follow = 1
1053 fstrsolid%TEMP_ngrp_tot = 0
1054 fstrsolid%SPRING_ngrp_tot = 0
1055 fstrsolid%TEMP_irres = 0
1056 fstrsolid%TEMP_tstep = 1
1057 fstrsolid%TEMP_interval = 1
1058 fstrsolid%TEMP_rtype = 1
1059 fstrsolid%TEMP_factor = 1.d0
1060 fstrsolid%VELOCITY_ngrp_tot = 0
1061 fstrsolid%ACCELERATION_ngrp_tot = 0
1062 fstrsolid%COUPLE_ngrp_tot = 0
1064 fstrsolid%restart_nout= 0
1065 fstrsolid%is_smoothing_active = .false.
1072 type(hecmwst_local_mesh),
target :: hecMESH
1075 integer :: ndof, ntotal, ierror, ic_type
1078 ntotal=ndof*hecmesh%n_node
1080 allocate ( fstrsolid%GL( ntotal ) ,stat=ierror )
1081 if( ierror /= 0 )
then
1082 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, GL>'
1083 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1085 call hecmw_abort( hecmw_comm_get_comm())
1087 allocate ( fstrsolid%GL0( ntotal ) ,stat=ierror )
1088 if( ierror /= 0 )
then
1089 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, GL0>'
1090 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1092 call hecmw_abort( hecmw_comm_get_comm())
1094 allocate ( fstrsolid%EFORCE( ntotal ) ,stat=ierror )
1095 if( ierror /= 0 )
then
1096 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, EFORCE>'
1097 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1099 call hecmw_abort( hecmw_comm_get_comm())
1108 allocate ( fstrsolid%unode( ntotal ) ,stat=ierror )
1109 if( ierror /= 0 )
then
1110 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, unode>'
1111 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1113 call hecmw_abort( hecmw_comm_get_comm())
1115 allocate ( fstrsolid%unode_bak( ntotal ) ,stat=ierror )
1116 if( ierror /= 0 )
then
1117 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, unode>'
1118 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1120 call hecmw_abort( hecmw_comm_get_comm())
1122 allocate ( fstrsolid%dunode( ntotal ) ,stat=ierror )
1123 if( ierror /= 0 )
then
1124 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, dunode>'
1125 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1127 call hecmw_abort( hecmw_comm_get_comm())
1129 allocate ( fstrsolid%ddunode( ntotal ) ,stat=ierror )
1130 if( ierror /= 0 )
then
1131 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, ddunode>'
1132 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1134 call hecmw_abort( hecmw_comm_get_comm())
1136 allocate ( fstrsolid%QFORCE( ntotal ) ,stat=ierror )
1137 if( ierror /= 0 )
then
1138 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, QFORCE>'
1139 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1141 call hecmw_abort( hecmw_comm_get_comm())
1143 allocate ( fstrsolid%QFORCE_bak( ntotal ) ,stat=ierror )
1144 if( ierror /= 0 )
then
1145 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, QFORCE_bak>'
1146 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1148 call hecmw_abort( hecmw_comm_get_comm())
1151 fstrsolid%GL(:)=0.d0
1152 fstrsolid%GL0(:)=0.d0
1154 fstrsolid%unode(:) = 0.d0
1155 fstrsolid%unode_bak(:) = 0.d0
1156 fstrsolid%dunode(:) = 0.d0
1157 fstrsolid%ddunode(:) = 0.d0
1158 fstrsolid%QFORCE(:) = 0.d0
1159 fstrsolid%QFORCE_bak(:) = 0.d0
1160 fstrsolid%FACTOR( 1:2 ) = 0.d0
1163 fstrsolid%n_fix_mpc = hecmesh%mpc%n_mpc
1164 if( fstrsolid%n_fix_mpc>0 )
then
1165 allocate( fstrsolid%mpc_const( fstrsolid%n_fix_mpc ) )
1166 fstrsolid%mpc_const(:) = hecmesh%mpc%mpc_const(:)
1170 fstrsolid%FACTOR(2)=1.d0
1171 fstrsolid%FACTOR(1)=0.d0
1175 type(hecmwst_local_mesh),
target :: hecMESH
1178 logical,
allocatable :: is_selem_list(:)
1181 do isect=1,hecmesh%section%n_sect
1182 if( fstrsolid%sections(isect)%elemopt341 ==
kel341sesns ) fstrsolid%is_smoothing_active = .true.
1184 if( .not. fstrsolid%is_smoothing_active )
return
1186 allocate(is_selem_list(hecmesh%n_elem), stat=i)
1188 write(*,*)
'Allocation error: is_selem_list'
1191 is_selem_list(:) = .false.
1193 do i=1,hecmesh%n_elem
1194 isect= hecmesh%section_ID(i)
1195 if( hecmesh%elem_type(i) /= fe_tet4n ) cycle
1196 if( fstrsolid%sections(isect)%elemopt341 ==
kel341sesns ) is_selem_list(i) = .true.
1199 call hecmw_create_smoothing_element_connectivity(hecmesh,is_selem_list)
1201 deallocate(is_selem_list)
1207 type(hecmwst_local_mesh),
target :: hecMESH
1210 integer :: i, isect, nodlocal(fstrSOLID%max_ncon), iiS, nn, con_stf
1212 if( fstrsolid%max_ncon_stf > 20 ) fstrsolid%max_ncon_stf = 20
1214 do i=1,hecmesh%n_elem
1215 isect= hecmesh%section_ID(i)
1216 if( hecmesh%elem_type(i) /= fe_tet4n ) cycle
1217 if( fstrsolid%sections(isect)%elemopt341 /=
kel341sesns ) cycle
1218 iis = hecmesh%elem_node_index(i-1)
1219 nn = hecmesh%elem_node_index(i-1) - iis
1220 nodlocal(1:nn) = hecmesh%elem_node_item(iis+1:iis+nn)
1222 if( con_stf > fstrsolid%max_ncon_stf ) fstrsolid%max_ncon_stf = con_stf
1231 type(hecmwst_local_mesh),
target :: hecMESH
1233 integer(kind=kint),
intent(in) :: solution_type
1235 integer :: i, j, ng, isect, ndof, id, nn, n_elem
1238 if( hecmesh%n_elem <=0 )
then
1239 stop
"no element defined!"
1242 fstrsolid%maxn_gauss = 0
1243 fstrsolid%max_ncon = 0
1249 n_elem = hecmesh%elem_type_index(hecmesh%n_elem_type)
1250 allocate( fstrsolid%elements(n_elem) )
1253 fstrsolid%elements(i)%elemact_flag = kelact_undefined
1254 if( solution_type ==
kstheat) cycle
1256 fstrsolid%elements(i)%etype = hecmesh%elem_type(i)
1257 if( hecmesh%elem_type(i)==301 ) fstrsolid%elements(i)%etype=111
1258 if (hecmw_is_etype_link(fstrsolid%elements(i)%etype)) cycle
1259 if (hecmw_is_etype_patch(fstrsolid%elements(i)%etype)) cycle
1261 if( ng > fstrsolid%maxn_gauss ) fstrsolid%maxn_gauss = ng
1262 if(ng>0)
allocate( fstrsolid%elements(i)%gausses( ng ) )
1264 isect= hecmesh%section_ID(i)
1267 id=hecmesh%section%sect_opt(isect)
1269 fstrsolid%elements(i)%iset=1
1270 else if( id==1)
then
1271 fstrsolid%elements(i)%iset=0
1272 else if( id==2)
then
1273 fstrsolid%elements(i)%iset=2
1277 if( isect<0 .or. isect>hecmesh%section%n_sect ) &
1278 stop
"Error in element's section definition"
1279 id = hecmesh%section%sect_mat_ID_item(isect)
1280 fstrsolid%materials(id)%cdsys_ID = hecmesh%section%sect_orien_ID(isect)
1282 fstrsolid%elements(i)%gausses(j)%pMaterial => fstrsolid%materials(id)
1286 nn = hecmesh%elem_node_index(i)-hecmesh%elem_node_index(i-1)
1287 allocate(fstrsolid%elements(i)%equiForces(nn*ndof))
1288 fstrsolid%elements(i)%equiForces = 0.0d0
1289 if( nn > fstrsolid%max_ncon ) fstrsolid%max_ncon = nn
1291 if( hecmesh%elem_type(i)==361 )
then
1292 if( fstrsolid%sections(isect)%elemopt361==
kel361ic )
then
1293 allocate( fstrsolid%elements(i)%aux(3,3) )
1294 fstrsolid%elements(i)%aux = 0.0d0
1300 fstrsolid%max_ncon_stf = fstrsolid%max_ncon
1303 call hecmw_allreduce_i1(hecmesh,fstrsolid%maxn_gauss,hecmw_max)
1309 integer :: i, j, ierror
1310 if(
associated(fstrsolid%materials) )
then
1311 do j=1,
size(fstrsolid%materials)
1312 call finalizematerial(fstrsolid%materials(j))
1314 deallocate( fstrsolid%materials )
1316 if( .not.
associated(fstrsolid%elements ) )
return
1317 do i=1,
size(fstrsolid%elements)
1318 if(
associated(fstrsolid%elements(i)%gausses) )
then
1319 do j=1,
size(fstrsolid%elements(i)%gausses)
1320 call fstr_finalize_gauss(fstrsolid%elements(i)%gausses(j))
1322 deallocate( fstrsolid%elements(i)%gausses )
1324 if(
associated(fstrsolid%elements(i)%equiForces) )
then
1325 deallocate(fstrsolid%elements(i)%equiForces)
1327 if(
associated(fstrsolid%elements(i)%aux) )
then
1328 deallocate(fstrsolid%elements(i)%aux)
1332 deallocate( fstrsolid%elements )
1333 if(
associated( fstrsolid%mpc_const ) )
then
1334 deallocate( fstrsolid%mpc_const )
1337 if(
associated(fstrsolid%step_ctrl) )
then
1338 do i=1,
size(fstrsolid%step_ctrl)
1341 deallocate( fstrsolid%step_ctrl )
1343 if(
associated(fstrsolid%output_ctrl) )
then
1344 do i=1,
size(fstrsolid%output_ctrl)
1345 if( fstrsolid%output_ctrl(i)%filenum==
iutb ) &
1346 close(fstrsolid%output_ctrl(i)%filenum)
1348 deallocate(fstrsolid%output_ctrl)
1350 if(
associated( fstrsolid%sections ) )
then
1351 deallocate( fstrsolid%sections )
1354 if(
associated(fstrsolid%GL) )
then
1355 deallocate(fstrsolid%GL ,stat=ierror)
1356 if( ierror /= 0 )
then
1357 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, GL>'
1359 call hecmw_abort( hecmw_comm_get_comm())
1362 if(
associated(fstrsolid%EFORCE) )
then
1363 deallocate(fstrsolid%EFORCE ,stat=ierror)
1364 if( ierror /= 0 )
then
1365 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, EFORCE>'
1367 call hecmw_abort( hecmw_comm_get_comm())
1370 if(
associated(fstrsolid%unode) )
then
1371 deallocate(fstrsolid%unode ,stat=ierror)
1372 if( ierror /= 0 )
then
1373 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, unode>'
1375 call hecmw_abort( hecmw_comm_get_comm())
1378 if(
associated(fstrsolid%unode_bak) )
then
1379 deallocate(fstrsolid%unode_bak ,stat=ierror)
1380 if( ierror /= 0 )
then
1381 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, unode_bak>'
1383 call hecmw_abort( hecmw_comm_get_comm())
1386 if(
associated(fstrsolid%dunode) )
then
1387 deallocate(fstrsolid%dunode ,stat=ierror)
1388 if( ierror /= 0 )
then
1389 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, dunode>'
1391 call hecmw_abort( hecmw_comm_get_comm())
1394 if(
associated(fstrsolid%ddunode) )
then
1395 deallocate(fstrsolid%ddunode ,stat=ierror)
1396 if( ierror /= 0 )
then
1397 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, ddunode>'
1399 call hecmw_abort( hecmw_comm_get_comm())
1402 if(
associated(fstrsolid%QFORCE) )
then
1403 deallocate(fstrsolid%QFORCE ,stat=ierror)
1404 if( ierror /= 0 )
then
1405 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, QFORCE>'
1407 call hecmw_abort( hecmw_comm_get_comm())
1410 if(
associated(fstrsolid%temperature) )
then
1411 deallocate(fstrsolid%temperature ,stat=ierror)
1412 if( ierror /= 0 )
then
1413 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, temperature>'
1415 call hecmw_abort( hecmw_comm_get_comm())
1418 if(
associated(fstrsolid%last_temp) )
then
1419 deallocate(fstrsolid%last_temp ,stat=ierror)
1420 if( ierror /= 0 )
then
1421 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, reftemp>'
1423 call hecmw_abort( hecmw_comm_get_comm())
1426 if(
associated(fstrsolid%temp_bak) )
then
1427 deallocate(fstrsolid%temp_bak ,stat=ierror)
1428 if( ierror /= 0 )
then
1429 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, reftemp>'
1431 call hecmw_abort( hecmw_comm_get_comm())
1436 if(
associated(fstrsolid%BOUNDARY_ngrp_GRPID) )
then
1437 deallocate(fstrsolid%BOUNDARY_ngrp_GRPID, stat=ierror)
1438 if( ierror /= 0 )
then
1439 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, BOUNDARY_ngrp_GRPID>'
1441 call hecmw_abort( hecmw_comm_get_comm())
1444 if(
associated(fstrsolid%BOUNDARY_ngrp_ID) )
then
1445 deallocate(fstrsolid%BOUNDARY_ngrp_ID, stat=ierror)
1446 if( ierror /= 0 )
then
1447 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, BOUNDARY_ngrp_ID>'
1449 call hecmw_abort( hecmw_comm_get_comm())
1452 if(
associated(fstrsolid%BOUNDARY_ngrp_type) )
then
1453 deallocate(fstrsolid%BOUNDARY_ngrp_type, stat=ierror)
1454 if( ierror /= 0 )
then
1455 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, BOUNDARY_ngrp_type>'
1457 call hecmw_abort( hecmw_comm_get_comm())
1460 if(
associated(fstrsolid%BOUNDARY_ngrp_val) )
then
1461 deallocate(fstrsolid%BOUNDARY_ngrp_val, stat=ierror)
1462 if( ierror /= 0 )
then
1463 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, BOUNDARY_ngrp_val>'
1465 call hecmw_abort( hecmw_comm_get_comm())
1468 if(
associated(fstrsolid%BOUNDARY_ngrp_amp) )
then
1469 deallocate(fstrsolid%BOUNDARY_ngrp_amp, stat=ierror)
1470 if( ierror /= 0 )
then
1471 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, BOUNDARY_ngrp_amp>'
1473 call hecmw_abort( hecmw_comm_get_comm())
1476 if(
associated(fstrsolid%BOUNDARY_ngrp_istot) )
then
1477 deallocate(fstrsolid%BOUNDARY_ngrp_istot, stat=ierror)
1478 if( ierror /= 0 )
then
1479 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, BOUNDARY_ngrp_istot>'
1481 call hecmw_abort( hecmw_comm_get_comm())
1484 if(
associated(fstrsolid%BOUNDARY_ngrp_rotID) )
then
1485 deallocate(fstrsolid%BOUNDARY_ngrp_rotID, stat=ierror)
1486 if( ierror /= 0 )
then
1487 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, BOUNDARY_ngrp_rotID>'
1489 call hecmw_abort( hecmw_comm_get_comm())
1492 if(
associated(fstrsolid%BOUNDARY_ngrp_centerID) )
then
1493 deallocate(fstrsolid%BOUNDARY_ngrp_centerID, stat=ierror)
1494 if( ierror /= 0 )
then
1495 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, BOUNDARY_ngrp_centerID>'
1497 call hecmw_abort( hecmw_comm_get_comm())
1502 if(
associated(fstrsolid%CLOAD_ngrp_GRPID) )
then
1503 deallocate(fstrsolid%CLOAD_ngrp_GRPID, stat=ierror)
1504 if( ierror /= 0 )
then
1505 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, CLOAD_ngrp_GRPID>'
1507 call hecmw_abort( hecmw_comm_get_comm())
1510 if(
associated(fstrsolid%CLOAD_ngrp_ID) )
then
1511 deallocate(fstrsolid%CLOAD_ngrp_ID, stat=ierror)
1512 if( ierror /= 0 )
then
1513 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, CLOAD_ngrp_ID>'
1515 call hecmw_abort( hecmw_comm_get_comm())
1518 if(
associated(fstrsolid%CLOAD_ngrp_DOF) )
then
1519 deallocate(fstrsolid%CLOAD_ngrp_DOF, stat=ierror)
1520 if( ierror /= 0 )
then
1521 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, CLOAD_ngrp_DOF>'
1523 call hecmw_abort( hecmw_comm_get_comm())
1526 if(
associated(fstrsolid%CLOAD_ngrp_val) )
then
1527 deallocate(fstrsolid%CLOAD_ngrp_val, stat=ierror)
1528 if( ierror /= 0 )
then
1529 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, CLOAD_ngrp_val>'
1531 call hecmw_abort( hecmw_comm_get_comm())
1534 if(
associated(fstrsolid%CLOAD_ngrp_amp) )
then
1535 deallocate(fstrsolid%CLOAD_ngrp_amp, stat=ierror)
1536 if( ierror /= 0 )
then
1537 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, CLOAD_ngrp_amp>'
1539 call hecmw_abort( hecmw_comm_get_comm())
1542 if(
associated(fstrsolid%CLOAD_ngrp_rotID) )
then
1543 deallocate(fstrsolid%CLOAD_ngrp_rotID, stat=ierror)
1544 if( ierror /= 0 )
then
1545 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, CLOAD_ngrp_rotID>'
1547 call hecmw_abort( hecmw_comm_get_comm())
1550 if(
associated(fstrsolid%CLOAD_ngrp_centerID) )
then
1551 deallocate(fstrsolid%CLOAD_ngrp_centerID, stat=ierror)
1552 if( ierror /= 0 )
then
1553 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, CLOAD_ngrp_centerID>'
1555 call hecmw_abort( hecmw_comm_get_comm())
1566 fstrheat%STEPtot = 0
1567 fstrheat%MATERIALtot = 0
1568 fstrheat%AMPLITUDEtot= 0
1569 fstrheat%T_FIX_tot = 0
1570 fstrheat%Q_NOD_tot = 0
1571 fstrheat%Q_VOL_tot = 0
1572 fstrheat%Q_SUF_tot = 0
1573 fstrheat%R_SUF_tot = 0
1574 fstrheat%H_SUF_tot = 0
1576 fstrheat%beta = -1.0d0
1585 fstreig%maxiter = 60
1587 fstreig%sigma = 0.0d0
1588 fstreig%tolerance = 1.0d-6
1589 fstreig%totalmass = 0.0d0
1596 fstrdynamic%idx_eqa = 1
1597 fstrdynamic%idx_resp = 1
1598 fstrdynamic%n_step = 1
1599 fstrdynamic%t_start = 0.0
1600 fstrdynamic%t_curr = 0.0d0
1601 fstrdynamic%t_end = 1.0
1602 fstrdynamic%t_delta = 1.0
1603 fstrdynamic%gamma = 0.5
1604 fstrdynamic%beta = 0.25
1605 fstrdynamic%idx_mas = 1
1606 fstrdynamic%idx_dmp = 1
1607 fstrdynamic%ray_m = 0.0
1608 fstrdynamic%ray_k = 0.0
1609 fstrdynamic%restart_nout = 0
1610 fstrdynamic%nout = 100
1611 fstrdynamic%ngrp_monit = 0
1612 fstrdynamic%nout_monit = 1
1613 fstrdynamic%iout_list(1) = 0
1614 fstrdynamic%iout_list(2) = 0
1615 fstrdynamic%iout_list(3) = 0
1616 fstrdynamic%iout_list(4) = 0
1617 fstrdynamic%iout_list(5) = 0
1618 fstrdynamic%iout_list(6) = 0
1626 type(hecmwst_local_mesh),
target :: hecMESH
1629 integer :: ierror, ndof,nnod
1633 if(fstrdynamic%idx_eqa == 11)
then
1634 allocate( fstrdynamic%DISP(ndof*nnod,3) ,stat=ierror )
1635 if( ierror /= 0 )
then
1636 write(
idbg,*)
'stop due to allocation error <fstr_solve_LINEAR_DYNAMIC, DISP>'
1637 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1639 call hecmw_abort( hecmw_comm_get_comm())
1641 allocate( fstrdynamic%VEL (ndof*nnod,1) ,stat=ierror )
1642 if( ierror /= 0 )
then
1643 write(
idbg,*)
'stop due to allocation error <fstr_solve_LINEAR_DYNAMIC, VEL>'
1644 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1646 call hecmw_abort( hecmw_comm_get_comm())
1648 allocate( fstrdynamic%ACC (ndof*nnod,1) ,stat=ierror )
1649 if( ierror /= 0 )
then
1650 write(
idbg,*)
'stop due to allocation error <fstr_solve_LINEAR_DYNAMIC, ACC>'
1651 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1653 call hecmw_abort( hecmw_comm_get_comm())
1656 allocate( fstrdynamic%DISP(ndof*nnod,2) ,stat=ierror )
1657 if( ierror /= 0 )
then
1658 write(
idbg,*)
'stop due to allocation error <fstr_solve_LINEAR_DYNAMIC, DISP>'
1659 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1661 call hecmw_abort( hecmw_comm_get_comm())
1663 allocate( fstrdynamic%VEL (ndof*nnod,2) ,stat=ierror )
1664 if( ierror /= 0 )
then
1665 write(
idbg,*)
'stop due to allocation error <fstr_solve_LINEAR_DYNAMIC, VEL>'
1666 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1668 call hecmw_abort( hecmw_comm_get_comm())
1670 allocate( fstrdynamic%ACC (ndof*nnod,2) ,stat=ierror )
1671 if( ierror /= 0 )
then
1672 write(
idbg,*)
'stop due to allocation error <fstr_solve_LINEAR_DYNAMIC, ACC>'
1673 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1675 call hecmw_abort( hecmw_comm_get_comm())
1680 allocate( fstrdynamic%VEC1(ndof*nnod) ,stat=ierror )
1681 if( ierror /= 0 )
then
1682 write(
idbg,*)
'stop due to allocation error <fstr_solve_LINEAR_DYNAMIC, VEC1>'
1683 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1685 call hecmw_abort( hecmw_comm_get_comm())
1687 allocate( fstrdynamic%VEC2(ndof*nnod) ,stat=ierror )
1688 if( ierror /= 0 )
then
1689 write(
idbg,*)
'stop due to allocation error <fstr_solve_LINEAR_DYNAMIC, VEC2>'
1690 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1692 call hecmw_abort( hecmw_comm_get_comm())
1694 allocate( fstrdynamic%VEC3(ndof*nnod) ,stat=ierror )
1695 if( ierror /= 0 )
then
1696 write(
idbg,*)
'stop due to allocation error <fstr_solve_LINEAR_DYNAMIC, VEC3>'
1697 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1699 call hecmw_abort( hecmw_comm_get_comm())
1709 if(
associated(fstrdynamic%DISP) ) &
1710 deallocate( fstrdynamic%DISP ,stat=ierror )
1711 if( ierror /= 0 )
then
1712 write(
idbg,*)
'stop due to deallocation error <fstr_solve_LINEAR_DYNAMIC, DISP>'
1714 call hecmw_abort( hecmw_comm_get_comm())
1716 if(
associated(fstrdynamic%VEL) ) &
1717 deallocate( fstrdynamic%VEL ,stat=ierror )
1718 if( ierror /= 0 )
then
1719 write(
idbg,*)
'stop due to deallocation error <fstr_solve_LINEAR_DYNAMIC, VEL>'
1721 call hecmw_abort( hecmw_comm_get_comm())
1723 if(
associated(fstrdynamic%ACC) ) &
1724 deallocate( fstrdynamic%ACC ,stat=ierror )
1725 if( ierror /= 0 )
then
1726 write(
idbg,*)
'stop due to deallocation error <fstr_solve_LINEAR_DYNAMIC, ACC>'
1728 call hecmw_abort( hecmw_comm_get_comm())
1730 if(
associated(fstrdynamic%VEC1) ) &
1731 deallocate( fstrdynamic%VEC1 ,stat=ierror )
1732 if( ierror /= 0 )
then
1733 write(
idbg,*)
'stop due to deallocation error <fstr_solve_LINEAR_DYNAMIC, VEC1>'
1735 call hecmw_abort( hecmw_comm_get_comm())
1737 if(
associated(fstrdynamic%VEC2) ) &
1738 deallocate( fstrdynamic%VEC2 ,stat=ierror )
1739 if( ierror /= 0 )
then
1740 write(
idbg,*)
'stop due to deallocation error <fstr_solve_LINEAR_DYNAMIC, VEC2>'
1742 call hecmw_abort( hecmw_comm_get_comm())
1744 if(
associated(fstrdynamic%VEC3) ) &
1745 deallocate( fstrdynamic%VEC3 ,stat=ierror )
1746 if( ierror /= 0 )
then
1747 write(
idbg,*)
'stop due to deallocation error <fstr_solve_LINEAR_DYNAMIC, VEC3>'
1749 call hecmw_abort( hecmw_comm_get_comm())
1761 integer(kind=kint) :: NDOF, n_node, n_elem, mdof, istat
1762 mdof = (ndof*ndof+ndof)/2;
1763 allocate ( phys%STRAIN (mdof*n_node), stat=istat)
1764 if( istat /= 0 ) stop
"Allocation error: phys%STRAIN"
1765 allocate ( phys%STRESS (mdof*n_node), stat=istat)
1766 if( istat /= 0 ) stop
"Allocation error: phys%STRESS"
1767 allocate ( phys%MISES ( n_node), stat=istat)
1768 if( istat /= 0 ) stop
"Allocation error: phys%MISES"
1769 allocate ( phys%ESTRAIN (mdof*n_elem), stat=istat)
1770 if( istat /= 0 ) stop
"Allocation error: phys%ESTRAIN"
1771 allocate ( phys%ESTRESS (mdof*n_elem), stat=istat)
1772 if( istat /= 0 ) stop
"Allocation error: phys%ESTRESS"
1773 allocate ( phys%EMISES ( n_elem), stat=istat)
1774 if( istat /= 0 ) stop
"Allocation error: phys%EMISES"
1775 allocate ( phys%EPLSTRAIN ( n_elem), stat=istat)
1776 if( istat /= 0 ) stop
"Allocation error: phys%EPLSTRAIN"
1777 allocate ( phys%ENQM (12*n_elem), stat=istat)
1778 if( istat /= 0 ) stop
"Allocation error: phys%ENQM"
1783 integer(kind=kint) :: ctrl, i
1787 if( p%PARAM%solution_type ==
kststatic &
1788 .or. p%PARAM%solution_type ==
ksteigen &
1792 if( p%MESH%n_dof == 6 .or. p%SOLID%is_33shell == 1 )
then
1793 allocate ( p%SOLID%SHELL )
1795 allocate ( p%SOLID%SHELL%LAYER(p%SOLID%max_lyr) )
1796 do i=1,p%SOLID%max_lyr
1797 allocate ( p%SOLID%SHELL%LAYER(i)%PLUS )
1798 allocate ( p%SOLID%SHELL%LAYER(i)%MINUS )
1802 phys => p%SOLID%SHELL
1804 allocate ( p%SOLID%SOLID )
1805 phys => p%SOLID%SOLID
1808 p%SOLID%STRAIN => phys%STRAIN
1809 p%SOLID%STRESS => phys%STRESS
1810 p%SOLID%MISES => phys%MISES
1811 p%SOLID%ESTRAIN => phys%ESTRAIN
1812 p%SOLID%ESTRESS => phys%ESTRESS
1813 p%SOLID%EMISES => phys%EMISES
1814 p%SOLID%EPLSTRAIN => phys%EPLSTRAIN
1815 p%SOLID%ENQM => phys%ENQM
1816 allocate( p%SOLID%REACTION( p%MESH%n_dof*p%MESH%n_node ), stat=i )
1817 if( i /= 0 ) stop
"Allocation error: REACTION"
1820 if( p%PARAM%fg_visual ==
kon )
then
1824 call hecmw_barrier( p%MESH )
1826 if( p%HEAT%STEPtot == 0 )
then
1827 if( p%PARAM%analysis_n == 0 )
then
1834 p%PARAM%analysis_n = 1
1840 p%PARAM%eps = 1.0e-6
1847 p%HEAT%STEP_DLTIME = 0
1848 p%HEAT%STEP_EETIME = 0
1849 p%HEAT%STEP_DELMIN = 0
1850 p%HEAT%STEP_DELMAX = 0
1864 integer(kind=kint) :: ctrl
1865 integer(kind=kint) :: counter
1868 integer(kind=kint) :: rcode
1881 integer(kind=kint) :: ctrl
1882 integer(kind=kint) :: counter
1885 integer(kind=kint) :: rcode
1898 integer(kind=kint) :: ctrl
1899 integer(kind=kint) :: counter
1902 integer(kind=kint) :: rcode
1904 if( counter >= 2 )
then
1905 write(
ilog,*)
'### Error : !SOLVER exists twice in FSTR control file.'
1960 integer(kind=kint) :: ctrl
1961 type( hecmwst_local_mesh ) :: hecmesh
1963 type( tlocalcoordsys ) :: coordsys
1965 integer :: j, is, ie, grp_id(1)
1966 character(len=HECMW_NAME_LEN) :: grp_id_name(1)
1968 integer :: nid, dtype
1969 character(len=HECMW_NAME_LEN) :: data_fmt
1970 real(kind=kreal) :: fdum, xyza(3), xyzb(3), xyzc(3), ff1(3), ff2(3), ff3(3)
1975 coordsys%sys_type = 10
1978 data_fmt =
'COORDINATES,NODES '
1981 coordsys%sys_type = coordsys%sys_type + dtype
1984 coordsys%sys_name = grp_id_name(1)
1988 data_fmt =
"RRRRRRrrr "
1991 xyza(3), xyzb(1), xyzb(2), xyzb(3), xyzc(1), xyzc(2), xyzc(3) )/=0 )
return
1992 if( coordsys%sys_type==10 )
then
1994 fdum = dsqrt( dot_product(ff1, ff1) )
1995 if( fdum==0.d0 )
return
1999 coordsys%CoordSys(1,:) = ff1
2001 fdum = dsqrt( dot_product(ff3, ff3) )
2002 if( fdum==0.d0 )
return
2003 coordsys%CoordSys(3,:) = ff3/fdum
2005 call cross_product(coordsys%CoordSys(3,:), coordsys%CoordSys(1,:), coordsys%CoordSys(2,:) )
2007 coordsys%CoordSys(1,:) = xyza
2008 coordsys%CoordSys(2,:) = xyzb
2012 coordsys%node_ID(3) = 0
2015 coordsys%node_ID(2), coordsys%node_ID(3) )/=0 )
return
2016 if( coordsys%node_ID(3) == 0 )
then
2018 if( nid/=0 .and. nid/=2 )
then
2019 write(*,*)
"We cannot define coordinate system using nodes in other CPU!"
2020 write(
idbg,*)
"We cannot define coordinate system using nodes in other CPU!"
2025 if( nid/=0 .and. nid/=3 )
then
2026 write(*,*)
"We cannot define coordinate system using nodes in other CPU!"
2027 write(
idbg,*)
"We cannot define coordinate system using nodes in other CPU!"
2043 integer(kind=kint) :: ctrl
2044 integer(kind=kint) :: counter
2046 character(HECMW_NAME_LEN) :: amp
2047 integer(kind=kint) :: amp_id
2049 integer(kind=kint) :: rcode, iproc
2061 integer(kind=kint) :: ctrl
2063 type(hecmwst_local_mesh) :: hecmesh
2064 integer,
pointer :: grp_id(:), dof(:)
2065 real(kind=kreal),
pointer :: temp(:)
2066 character(len=HECMW_NAME_LEN),
pointer :: grp_id_name(:)
2067 character(len=HECMW_NAME_LEN) :: data_fmt, ss
2068 integer :: i,j,n, is, ie, gid, nid, rcode
2072 ss =
'TEMPERATURE,VELOCITY,ACCELERATION '
2075 cond%cond_name =
"temperature"
2076 allocate( cond%intval(hecmesh%n_node) )
2077 allocate( cond%realval(hecmesh%n_node) )
2078 elseif( nid==2 )
then
2079 cond%cond_name =
"velocity"
2080 allocate( cond%intval(hecmesh%n_node) )
2081 allocate( cond%realval(hecmesh%n_node) )
2082 elseif( nid==3 )
then
2083 cond%cond_name =
"acceleration"
2084 allocate( cond%intval(hecmesh%n_node) )
2085 allocate( cond%realval(hecmesh%n_node) )
2095 allocate( temp(n), grp_id_name(n), grp_id(n), dof(n) )
2097 write(ss,*) hecmw_name_len
2099 write(data_fmt,
'(a,a,a)')
'S',trim(adjustl(ss)),
'R '
2103 write(data_fmt,
'(a,a,a)')
'S',trim(adjustl(ss)),
'IR '
2109 if(
associated(grp_id) )
deallocate( grp_id )
2110 if(
associated(temp) )
deallocate( temp )
2111 if(
associated(dof) )
deallocate( dof )
2112 if(
associated(grp_id_name) )
deallocate( grp_id_name )
2119 is = hecmesh%node_group%grp_index(gid-1) + 1
2120 ie = hecmesh%node_group%grp_index(gid )
2122 nid = hecmesh%node_group%grp_item(j)
2123 cond%realval(nid) = temp(i)
2124 cond%intval(nid) = dof(i)
2128 if(
associated(grp_id) )
deallocate( grp_id )
2129 if(
associated(temp) )
deallocate( temp )
2130 if(
associated(dof) )
deallocate( dof )
2131 if(
associated(grp_id_name) )
deallocate( grp_id_name )
2140 integer(kind=kint) :: ctrl
2141 integer(kind=kint) :: counter
2143 integer(kind=kint) :: res, visual, neutral
2145 integer(kind=kint) :: rcode
2149 if( res == 1 ) p%PARAM%fg_result = 1
2150 if( visual == 1 ) p%PARAM%fg_visual = 1
2151 if( neutral == 1 ) p%PARAM%fg_neutral = 1
2161 integer(kind=kint) :: ctrl
2162 integer(kind=kint) :: counter
2165 integer(kind=kint) :: rcode
2179 integer(kind=kint) :: ctrl
2180 integer(kind=kint) :: nout
2181 integer(kind=kint) :: version
2183 integer(kind=kint) :: rcode
2199 integer(kind=kint) :: ctrl
2200 integer(kind=kint) :: counter
2202 integer(kind=kint) :: rcode
2203 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
2204 integer(kind=kint) :: i, n, old_size, new_size
2206 if( p%SOLID%file_type /=
kbcffstr )
return
2210 old_size = p%SOLID%COUPLE_ngrp_tot
2211 new_size = old_size + n
2212 p%SOLID%COUPLE_ngrp_tot = new_size
2216 allocate( grp_id_name(n))
2218 p%PARAM%fg_couple_type, &
2219 p%PARAM%fg_couple_first, &
2220 p%PARAM%fg_couple_window, &
2221 grp_id_name, hecmw_name_len )
2225 n, grp_id_name, p%SOLID%COUPLE_ngrp_ID(old_size+1:))
2227 deallocate( grp_id_name )
2228 p%PARAM%fg_couple = 1
2238 integer(kind=kint) :: ctrl
2240 real(kind=kreal),
pointer :: val(:), table(:)
2241 character(len=HECMW_NAME_LEN) :: name
2242 integer :: nline, n, type_def, type_time, type_val, rcode
2245 if( nline<=0 )
return
2246 allocate( val(nline*4) )
2247 allocate( table(nline*4) )
2254 if(
associated(val) )
deallocate( val )
2255 if(
associated(table) )
deallocate( table )
2262 integer(kind=kint) :: ctrl
2263 integer(kind=kint) :: counter
2266 integer(kind=kint) :: rcode
2267 character(HECMW_NAME_LEN) :: amp
2268 integer(kind=kint) :: amp_id
2269 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
2270 integer(kind=kint) :: i, n, old_size, new_size
2271 integer(kind=kint) :: gid, mode, measure, state
2272 real(kind=kreal) ::
eps
2273 real(kind=kreal),
pointer :: thlow(:), thup(:)
2280 old_size = p%SOLID%elemact%ELEMACT_egrp_tot
2281 new_size = old_size + n
2282 p%SOLID%elemact%ELEMACT_egrp_tot = new_size
2293 allocate( grp_id_name(n), thlow(n), thup(n) )
2299 call amp_name_to_id( p%MESH,
'!ELEMENT_ACTIVATION', amp, amp_id )
2301 p%SOLID%elemact%ELEMACT_egrp_amp(old_size+i) = amp_id
2302 p%SOLID%elemact%ELEMACT_egrp_eps(old_size+i) =
eps
2304 p%SOLID%elemact%ELEMACT_egrp_GRPID(old_size+1:new_size) = gid
2305 p%SOLID%elemact%ELEMACT_egrp_depends(old_size+1:new_size) = measure
2306 p%SOLID%elemact%ELEMACT_egrp_ts_lower(old_size+1:new_size) = thlow(1:n)
2307 p%SOLID%elemact%ELEMACT_egrp_ts_upper(old_size+1:new_size) = thup(1:n)
2308 p%SOLID%elemact%ELEMACT_egrp_state(old_size+1:new_size) = state
2310 call elem_grp_name_to_id_ex( p%MESH,
'!ELEMENT_ACTIVATION', n, grp_id_name, p%SOLID%elemact%ELEMACT_egrp_ID(old_size+1:))
2312 deallocate( grp_id_name )
2326 integer(kind=kint) :: ctrl
2327 integer(kind=kint) :: counter
2329 integer(kind=kint) :: rcode
2331 integer :: nout, nout_monit,node_monit_1 ,elem_monit_1 ,intg_monit_1
2332 integer :: ipt, idx_elpl, iout_list(6)
2333 real(kind=kreal) :: sig_y0, h_dash
2335 if( counter > 1 )
then
2342 if( ipt == 2 ) p%PARAM%nlgeom = .true.
2346 write(*,*)
"Warning : !STATIC : parameter 'TYPE=INFINITE' is deprecated." &
2347 & //
" Please use the replacement parameter 'TYPE=INFINITESIMAL'"
2355 nout, nout_monit, node_monit_1, &
2356 elem_monit_1, intg_monit_1 )
2369 integer(kind=kint) :: ctrl
2370 integer(kind=kint) :: counter
2373 integer(kind=kint) :: rcode
2374 integer(kind=kint) ::
type = 0
2375 character(HECMW_NAME_LEN) :: amp, rotc_name(1)
2376 integer(kind=kint) :: amp_id, rotc_id(1), n_rotc
2377 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
2378 integer(kind=kint),
pointer :: dof_ids (:)
2379 integer(kind=kint),
pointer :: dof_ide (:)
2380 real(kind=kreal),
pointer :: val_ptr(:)
2381 integer(kind=kint) :: i, n, old_size, new_size
2383 integer(kind=kint) :: gid, istot
2403 if( rotc_name(1) /=
' ' )
then
2404 if( istot /= 0 )
then
2405 write(*,*)
'fstr control file error : !BOUNDARY : rotational boundary cannot be specified with total value'
2406 write(
ilog,*)
'fstr control file error : !BOUNDARY : rotational boundary cannot be specified with total value'
2409 p%SOLID%BOUNDARY_ngrp_rot = p%SOLID%BOUNDARY_ngrp_rot + 1
2410 n_rotc = p%SOLID%BOUNDARY_ngrp_rot
2420 old_size = p%SOLID%BOUNDARY_ngrp_tot
2421 new_size = old_size + n
2422 p%SOLID%BOUNDARY_ngrp_tot = new_size
2432 allocate( grp_id_name(n) )
2433 allocate( dof_ids(n) )
2434 allocate( dof_ide(n) )
2435 allocate( val_ptr(n) )
2442 p%SOLID%BOUNDARY_ngrp_GRPID(old_size+1:new_size) = gid
2444 p%SOLID%BOUNDARY_ngrp_istot(old_size+1:new_size) = istot
2447 p%SOLID%BOUNDARY_ngrp_rotID(old_size+1:) = n_rotc
2448 p%SOLID%BOUNDARY_ngrp_centerID(old_size+1:) = rotc_id(1)
2451 if( (dof_ids(i) < 1).or.(6 < dof_ids(i)).or.(dof_ide(i) < 1).or.(6 < dof_ide(i)) )
then
2452 write(*,*)
'fstr control file error : !BOUNDARY : range of dof_ids and dof_ide is from 1 to 6'
2453 write(
ilog,*)
'fstr control file error : !BOUNDARY : range of dof_ids and dof_ide is from 1 to 6'
2456 p%SOLID%BOUNDARY_ngrp_val(old_size+i) = val_ptr(i)
2457 p%SOLID%BOUNDARY_ngrp_type(old_size+i) = 10 * dof_ids(i) + dof_ide(i)
2458 p%SOLID%BOUNDARY_ngrp_amp(old_size+i) = amp_id
2461 deallocate( grp_id_name )
2462 deallocate( dof_ids )
2463 deallocate( dof_ide )
2464 deallocate( val_ptr )
2465 nullify( grp_id_name )
2485 integer(kind=kint) :: ctrl
2486 integer(kind=kint) :: counter
2489 integer(kind=kint) :: rcode
2490 character(HECMW_NAME_LEN) :: amp, rotc_name(1)
2491 integer(kind=kint) :: amp_id, rotc_id(1), n_rotc
2492 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
2493 real(kind=kreal),
pointer :: val_ptr(:)
2494 integer(kind=kint),
pointer :: id_ptr(:)
2495 integer(kind=kint) :: i, n, old_size, new_size
2496 integer(kind=kint) :: gid
2498 if( p%SOLID%file_type /=
kbcffstr )
return
2509 if( rotc_name(1) /=
' ' )
then
2510 p%SOLID%CLOAD_ngrp_rot = p%SOLID%CLOAD_ngrp_rot + 1
2511 n_rotc = p%SOLID%CLOAD_ngrp_rot
2517 old_size = p%SOLID%CLOAD_ngrp_tot
2518 new_size = old_size + n
2519 p%SOLID%CLOAD_ngrp_tot = new_size
2530 allocate( grp_id_name(n))
2531 allocate( id_ptr(n) )
2532 allocate( val_ptr(n) )
2540 p%SOLID%CLOAD_ngrp_rotID(old_size+1:) = n_rotc
2541 p%SOLID%CLOAD_ngrp_centerID(old_size+1:) = rotc_id(1)
2545 p%SOLID%CLOAD_ngrp_amp(old_size+i) = amp_id
2546 p%SOLID%CLOAD_ngrp_DOF(old_size+i) = id_ptr(i)
2547 p%SOLID%CLOAD_ngrp_val(old_size+i) = val_ptr(i)
2549 p%SOLID%CLOAD_ngrp_GRPID(old_size+1:new_size) = gid
2552 deallocate( grp_id_name )
2553 deallocate( id_ptr )
2554 deallocate( val_ptr )
2555 nullify( grp_id_name )
2559 if( p%MESH%n_refine > 0 )
then
2561 if( hecmw_ngrp_get_number(p%MESH, p%SOLID%CLOAD_NGRP_ID(old_size+i)) > 1 )
then
2562 write(*,*)
'fstr control file error : !CLOAD : cannot be used with NGRP when mesh is refined'
2563 write(
ilog,*)
'fstr control file error : !CLOAD : cannot be used with NGRP when mesh is refined'
2576 integer(kind=kint) :: ctrl
2577 integer(kind=kint) :: counter
2580 integer(kind=kint) :: rcode
2581 character(HECMW_NAME_LEN) :: amp
2582 integer(kind=kint) :: amp_id
2583 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
2584 real(kind=kreal),
pointer :: val_ptr(:)
2585 integer(kind=kint),
pointer :: id_ptr(:)
2586 integer(kind=kint) :: i, n, old_size, new_size
2587 integer(kind=kint) :: gid, loadcase
2590 if( p%SOLID%file_type /=
kbcffstr)
return
2604 old_size = p%FREQ%FLOAD_ngrp_tot
2605 new_size = old_size + n
2608 p%FREQ%FLOAD_ngrp_tot = new_size
2617 allocate( grp_id_name(n) )
2618 allocate( id_ptr(n) )
2619 allocate( val_ptr(n) )
2626 p%FREQ%FLOAD_ngrp_DOF(old_size+i) = id_ptr(i)
2627 p%FREQ%FLOAD_ngrp_valre(old_size+i) = val_ptr(i)
2631 p%FREQ%FLOAD_ngrp_DOF(old_size+i) = id_ptr(i)
2632 p%FREQ%FLOAD_ngrp_valim(old_size+i) = val_ptr(i)
2636 write(*,*)
"Error this load set is not defined!"
2637 write(
ilog,*)
"Error this load set is not defined!"
2640 p%FREQ%FLOAD_ngrp_GRPID(old_size+1:new_size) = gid
2642 p%FREQ%FLOAD_ngrp_ID(old_size+1:), p%FREQ%FLOAD_ngrp_TYPE(old_size+1:))
2644 deallocate( grp_id_name )
2645 deallocate( id_ptr )
2646 deallocate( val_ptr )
2647 nullify( grp_id_name )
2655 integer(kind=kint) :: ctrl
2656 character(len=HECMW_NAME_LEN) :: node_id(:)
2657 integer(kind=kint),
pointer :: dof_id(:)
2658 integer(kind=kint) :: node_id_len
2659 real(kind=kreal),
pointer :: value(:)
2661 character(len=HECMW_NAME_LEN) :: data_fmt, ss
2663 write(ss,*) node_id_len
2664 write(data_fmt,
'(a,a,a)')
'S', trim(adjustl(ss)),
'IR '
2676 integer(kind=kint) :: ctrl
2677 integer(kind=kint) :: counter
2680 integer(kind=kint) :: filename_len
2681 character(len=HECMW_NAME_LEN) :: datafmt, ss
2684 filename_len = hecmw_filename_len
2685 write(ss,*) filename_len
2686 write(datafmt,
'(a,a,a)')
'S', trim(adjustl(ss)),
' '
2701 real(kind=kreal),
pointer :: array(:,:)
2702 integer(kind=kint) :: old_size, new_size, i, j
2703 real(kind=kreal),
pointer :: temp(:,:)
2705 if( old_size >= new_size )
then
2709 if(
associated( array ) )
then
2710 allocate(temp(0:6, old_size))
2713 allocate(array(0:6, new_size))
2717 array(j,i) = temp(j,i)
2722 allocate(array(0:6, new_size))
2730 integer(kind=kint) :: ctrl
2731 integer(kind=kint) :: counter
2734 integer(kind=kint) :: rcode
2735 character(HECMW_NAME_LEN) :: amp
2736 integer(kind=kint) :: amp_id
2737 integer(kind=kint) :: follow
2738 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
2739 real(kind=kreal),
pointer :: new_params(:,:)
2740 logical,
pointer :: fg_surface(:)
2741 integer(kind=kint),
pointer :: lid_ptr(:)
2742 integer(kind=kint) :: i, j, n, old_size, new_size
2743 integer(kind=kint) :: gid
2745 if( p%SOLID%file_type /=
kbcffstr )
return
2752 old_size = p%SOLID%DLOAD_ngrp_tot
2753 new_size = old_size + n
2754 p%SOLID%DLOAD_ngrp_tot = new_size
2763 allocate( grp_id_name(n))
2764 allocate( lid_ptr(n) )
2765 allocate( new_params(0:6,n))
2766 allocate( fg_surface(n))
2769 follow = p%SOLID%DLOAD_follow
2770 if( .not. p%PARAM%nlgeom ) follow = 0
2772 grp_id_name, hecmw_name_len, &
2773 lid_ptr, new_params )
2776 p%SOLID%DLOAD_follow = follow
2778 p%SOLID%DLOAD_ngrp_amp(old_size+i) = amp_id
2779 p%SOLID%DLOAD_ngrp_LID(old_size+i) = lid_ptr(i)
2781 p%SOLID%DLOAD_ngrp_params(j,old_size+i) = new_params(j,i)
2783 fg_surface(i) = ( lid_ptr(i) == 100 )
2785 p%SOLID%DLOAD_ngrp_GRPID(old_size+1:new_size) = gid
2787 deallocate( grp_id_name )
2788 deallocate( lid_ptr )
2789 deallocate( new_params )
2790 deallocate( fg_surface )
2791 nullify( grp_id_name )
2793 nullify( new_params )
2794 nullify( fg_surface )
2804 integer(kind=kint) :: ctrl
2805 integer(kind=kint) :: counter
2808 integer(kind=kint) :: rcode, gid
2809 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
2810 real(kind=kreal),
pointer :: val_ptr(:)
2811 integer(kind=kint) :: i, n, old_size, new_size
2813 if( p%SOLID%file_type /=
kbcffstr )
return
2819 old_size = p%SOLID%TEMP_ngrp_tot
2821 new_size = old_size + n
2823 new_size = old_size + 1
2829 allocate( grp_id_name(n))
2830 allocate( val_ptr(n) )
2834 p%SOLID%TEMP_irres, &
2835 p%SOLID%TEMP_tstep, &
2836 p%SOLID%TEMP_interval, &
2837 p%SOLID%TEMP_rtype, &
2838 grp_id_name, hecmw_name_len, &
2842 p%SOLID%TEMP_ngrp_val(old_size+i) = val_ptr(i)
2844 deallocate( val_ptr )
2847 p%SOLID%TEMP_ngrp_GRPID(old_size+1:new_size) = gid
2849 if( p%SOLID%TEMP_irres == 0 )
then
2850 p%SOLID%TEMP_ngrp_tot = new_size
2852 n, grp_id_name, p%SOLID%TEMP_ngrp_ID(old_size+1:))
2854 deallocate( grp_id_name )
2866 integer(kind=kint) :: ctrl
2867 integer(kind=kint) :: counter
2870 integer(kind=kint) :: rcode
2871 character(HECMW_NAME_LEN) :: amp
2872 integer(kind=kint) :: amp_id
2873 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
2874 real(kind=kreal),
pointer :: val_ptr(:)
2875 integer(kind=kint),
pointer :: id_ptr(:)
2876 integer(kind=kint) :: i, n, old_size, new_size
2877 integer(kind=kint) :: gid
2879 if( p%SOLID%file_type /=
kbcffstr )
return
2884 old_size = p%SOLID%SPRING_ngrp_tot
2885 new_size = old_size + n
2886 p%SOLID%SPRING_ngrp_tot = new_size
2893 allocate( grp_id_name(n))
2894 allocate( id_ptr(n) )
2895 allocate( val_ptr(n) )
2904 p%SOLID%SPRING_ngrp_amp(old_size+i) = amp_id
2905 p%SOLID%SPRING_ngrp_DOF(old_size+i) = id_ptr(i)
2906 p%SOLID%SPRING_ngrp_val(old_size+i) = val_ptr(i)
2908 p%SOLID%SPRING_ngrp_GRPID(old_size+1:new_size) = gid
2911 deallocate( grp_id_name )
2912 deallocate( id_ptr )
2913 deallocate( val_ptr )
2914 nullify( grp_id_name )
2927 integer(kind=kint) :: ctrl
2928 integer(kind=kint) :: counter
2931 integer(kind=kint) :: rcode
2949 integer(kind=kint) :: ctrl
2950 integer(kind=kint) :: counter
2953 integer(kind=kint) :: rcode
2954 integer(kind=kint) :: n
2955 character(len=HECMW_NAME_LEN) :: mName
2956 integer(kind=kint) :: i
2968 p%PARAM%analysis_n = n
2975 p%PARAM%eps = 1.0e-6
2976 p%PARAM%timepoint_id = 0
2987 if( rcode /= 0 )
then
2991 if(
associated(p%PARAM%timepoints) )
then
2992 do i=1,
size(p%PARAM%timepoints)
2993 if(
fstr_streqr( p%PARAM%timepoints(i)%name, mname ) )
then
2994 p%PARAM%timepoint_id = i;
exit
3005 p%HEAT%STEP_DLTIME = p%PARAM%dtime
3006 p%HEAT%STEP_EETIME = p%PARAM%etime
3007 p%HEAT%STEP_DELMIN = p%PARAM%dtmin
3008 p%HEAT%STEP_DELMAX = p%PARAM%delmax
3009 p%HEAT%timepoint_id = p%PARAM%timepoint_id
3019 integer(kind=kint) :: ctrl
3020 integer(kind=kint) :: counter
3023 integer(kind=kint) :: rcode
3024 character(HECMW_NAME_LEN) :: amp
3025 integer(kind=kint) :: amp_id
3026 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
3027 real(kind=kreal),
pointer :: value(:)
3028 integer(kind=kint) :: i, j, n, m, head, id, member_n, old_size, new_size
3029 integer(kind=kint),
pointer :: member(:)
3030 integer(kind=kint) :: local_id, rtc
3036 allocate( grp_id_name(n))
3041 grp_id_name, hecmw_name_len,
value )
3052 else if( rtc < 0 )
then
3058 deallocate( grp_id_name )
3064 old_size = p%HEAT%T_FIX_tot
3065 new_size = old_size + m
3069 p%HEAT%T_FIX_tot = new_size
3072 member => p%HEAT%T_FIX_node(head:)
3078 member(1) = local_id
3080 else if( rtc < 0 )
then
3081 member_n =
get_grp_member( p%MESH,
'node_grp', grp_id_name(i), member )
3086 member => member( member_n+1 : )
3089 p%HEAT%T_FIX_val (id) = value(i)
3090 p%HEAT%T_FIX_ampl (id) = amp_id
3095 deallocate( grp_id_name )
3106 integer(kind=kint) :: ctrl
3107 integer(kind=kint) :: counter
3110 integer(kind=kint) :: rcode
3111 character(HECMW_NAME_LEN) :: amp
3112 integer(kind=kint) :: amp_id
3113 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
3114 real(kind=kreal),
pointer :: value(:)
3115 integer(kind=kint) :: i, j, n, m, head, id, member_n, old_size, new_size
3116 integer(kind=kint),
pointer :: member(:)
3117 integer(kind=kint) :: local_id, rtc
3123 allocate( grp_id_name(n))
3128 grp_id_name, hecmw_name_len,
value )
3139 else if( rtc < 0 )
then
3145 deallocate( grp_id_name )
3151 old_size = p%HEAT%Q_NOD_tot
3152 new_size = old_size + m
3156 p%HEAT%Q_NOD_tot = new_size
3159 member => p%HEAT%Q_NOD_node(head:)
3164 member(1) = local_id
3166 else if( rtc < 0 )
then
3167 member_n =
get_grp_member( p%MESH,
'node_grp', grp_id_name(i), member )
3171 if( i<n ) member => member( member_n+1 : )
3173 p%HEAT%Q_NOD_val (id) = value(i)
3174 p%HEAT%Q_NOD_ampl (id) = amp_id
3179 deallocate( grp_id_name )
3191 integer(kind=kint) :: ctrl
3192 integer(kind=kint) :: counter
3195 integer(kind=kint) :: rcode
3196 character(HECMW_NAME_LEN) :: amp
3197 integer(kind=kint) :: amp_id
3198 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
3199 integer(kind=kint),
pointer :: load_type(:)
3200 real(kind=kreal),
pointer :: value(:)
3201 integer(kind=kint) :: i, j, n, m, head, id, member_n, old_size, new_size
3202 integer(kind=kint),
pointer :: member(:)
3203 integer(kind=kint) :: local_id, rtc
3209 allocate( grp_id_name(n))
3210 allocate( load_type(n))
3215 grp_id_name, hecmw_name_len, load_type,
value )
3225 else if( rtc < 0 )
then
3231 deallocate( grp_id_name )
3232 deallocate( load_type )
3238 old_size = p%HEAT%Q_SUF_tot
3239 new_size = old_size + m
3244 p%HEAT%Q_SUF_tot = new_size
3247 member => p%HEAT%Q_SUF_elem(head:)
3252 member(1) = local_id
3254 else if( rtc < 0 )
then
3255 member_n =
get_grp_member( p%MESH,
'elem_grp', grp_id_name(i), member )
3259 if( i<n ) member => member( member_n+1 : )
3261 p%HEAT%Q_SUF_surf (id) = load_type(i)
3262 p%HEAT%Q_SUF_val (id) = value(i)
3263 p%HEAT%Q_SUF_ampl (id) = amp_id
3268 deallocate( grp_id_name )
3269 deallocate( load_type )
3281 integer(kind=kint) :: ctrl
3282 integer(kind=kint) :: counter
3285 integer(kind=kint) :: rcode
3286 character(HECMW_NAME_LEN) :: amp
3287 integer(kind=kint) :: amp_id
3288 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
3289 real(kind=kreal),
pointer :: value(:)
3290 integer(kind=kint) :: i, j, n, m, head, id, member_n, old_size, new_size
3291 integer(kind=kint),
pointer :: member1(:), member2(:)
3297 allocate( grp_id_name(n))
3302 grp_id_name, hecmw_name_len,
value )
3313 deallocate( grp_id_name )
3319 old_size = p%HEAT%Q_SUF_tot
3320 new_size = old_size + m
3325 p%HEAT%Q_SUF_tot = new_size
3328 member1 => p%HEAT%Q_SUF_elem(head:)
3329 member2 => p%HEAT%Q_SUF_surf(head:)
3332 member_n =
get_grp_member( p%MESH,
'surf_grp', grp_id_name(i), member1, member2 )
3334 member1 => member1( member_n+1 : )
3335 member2 => member2( member_n+1 : )
3338 p%HEAT%Q_SUF_val (id) = value(i)
3339 p%HEAT%Q_SUF_ampl (id) = amp_id
3344 deallocate( grp_id_name )
3356 integer(kind=kint) :: ctrl
3357 integer(kind=kint) :: counter
3360 integer(kind=kint) :: rcode
3361 character(HECMW_NAME_LEN) :: amp1, amp2
3362 integer(kind=kint) :: amp_id1, amp_id2
3363 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
3364 integer(kind=kint),
pointer :: load_type(:)
3365 real(kind=kreal),
pointer :: value(:)
3366 real(kind=kreal),
pointer :: shink(:)
3367 integer(kind=kint) :: i, j, n, m, head, id, member_n, old_size, new_size
3368 integer(kind=kint),
pointer :: member(:)
3369 integer(kind=kint) :: local_id, rtc
3375 allocate( grp_id_name(n))
3376 allocate( load_type(n))
3384 grp_id_name, hecmw_name_len, load_type,
value, shink )
3395 else if( rtc < 0 )
then
3401 deallocate( grp_id_name )
3402 deallocate( load_type )
3409 old_size = p%HEAT%H_SUF_tot
3410 new_size = old_size + m
3415 p%HEAT%H_SUF_tot = new_size
3418 member => p%HEAT%H_SUF_elem(head:)
3423 member(1) = local_id
3425 else if( rtc < 0 )
then
3426 member_n =
get_grp_member( p%MESH,
'elem_grp', grp_id_name(i), member )
3430 if( i<n ) member => member( member_n+1 : )
3432 p%HEAT%H_SUF_surf (id) = load_type(i)
3433 p%HEAT%H_SUF_val (id,1) = value(i)
3434 p%HEAT%H_SUF_val (id,2) = shink(i)
3435 p%HEAT%H_SUF_ampl (id,1) = amp_id1
3436 p%HEAT%H_SUF_ampl (id,2) = amp_id2
3441 deallocate( grp_id_name )
3442 deallocate( load_type )
3455 integer(kind=kint) :: ctrl
3456 integer(kind=kint) :: counter
3459 integer(kind=kint) :: rcode
3460 character(HECMW_NAME_LEN) :: amp1, amp2
3461 integer(kind=kint) :: amp_id1, amp_id2
3462 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
3463 real(kind=kreal),
pointer :: value(:)
3464 real(kind=kreal),
pointer :: shink(:)
3465 integer(kind=kint) :: i, j, n, m, head, id, member_n, old_size, new_size
3466 integer(kind=kint),
pointer :: member1(:), member2(:)
3472 allocate( grp_id_name(n))
3479 grp_id_name, hecmw_name_len,
value, shink )
3491 deallocate( grp_id_name )
3498 old_size = p%HEAT%H_SUF_tot
3499 new_size = old_size + m
3504 p%HEAT%H_SUF_tot = new_size
3507 member1 => p%HEAT%H_SUF_elem(head:)
3508 member2 => p%HEAT%H_SUF_surf(head:)
3511 member_n =
get_grp_member( p%MESH,
'surf_grp', grp_id_name(i), member1, member2 )
3513 member1 => member1( member_n+1 : )
3514 member2 => member2( member_n+1 : )
3517 p%HEAT%H_SUF_val (id,1) = value(i)
3518 p%HEAT%H_SUF_val (id,2) = shink(i)
3519 p%HEAT%H_SUF_ampl (id,1) = amp_id1
3520 p%HEAT%H_SUF_ampl (id,2) = amp_id2
3525 deallocate( grp_id_name )
3538 integer(kind=kint) :: ctrl
3539 integer(kind=kint) :: counter
3542 integer(kind=kint) :: rcode
3543 character(HECMW_NAME_LEN) :: amp1, amp2
3544 integer(kind=kint) :: amp_id1, amp_id2
3545 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
3546 integer(kind=kint),
pointer :: load_type(:)
3547 real(kind=kreal),
pointer :: value(:)
3548 real(kind=kreal),
pointer :: shink(:)
3549 integer(kind=kint) :: i, j, n, m, head, id, member_n, old_size, new_size
3550 integer(kind=kint),
pointer :: member(:)
3551 integer(kind=kint) :: local_id, rtc
3557 allocate( grp_id_name(n))
3558 allocate( load_type(n))
3565 grp_id_name, hecmw_name_len, load_type,
value, shink )
3576 else if( rtc < 0 )
then
3582 deallocate( grp_id_name )
3583 deallocate( load_type )
3590 old_size = p%HEAT%R_SUF_tot
3591 new_size = old_size + m
3596 p%HEAT%R_SUF_tot = new_size
3599 member => p%HEAT%R_SUF_elem(head:)
3604 member(1) = local_id
3606 else if( rtc < 0 )
then
3607 member_n =
get_grp_member( p%MESH,
'elem_grp', grp_id_name(i), member )
3611 if( i<n ) member => member( member_n+1 : )
3613 p%HEAT%R_SUF_surf (id) = load_type(i)
3614 p%HEAT%R_SUF_val (id,1) = value(i)
3615 p%HEAT%R_SUF_val (id,2) = shink(i)
3616 p%HEAT%R_SUF_ampl (id,1) = amp_id1
3617 p%HEAT%R_SUF_ampl (id,2) = amp_id2
3622 deallocate( grp_id_name )
3623 deallocate( load_type )
3636 integer(kind=kint) :: ctrl
3637 integer(kind=kint) :: counter
3640 integer(kind=kint) :: rcode
3641 character(HECMW_NAME_LEN) :: amp1, amp2
3642 integer(kind=kint) :: amp_id1, amp_id2
3643 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
3644 real(kind=kreal),
pointer :: value(:)
3645 real(kind=kreal),
pointer :: shink(:)
3646 integer(kind=kint) :: i, j, n, m, head, id, member_n, old_size, new_size
3647 integer(kind=kint),
pointer :: member1(:), member2(:)
3653 allocate( grp_id_name(n))
3671 deallocate( grp_id_name )
3678 old_size = p%HEAT%R_SUF_tot
3679 new_size = old_size + m
3684 p%HEAT%R_SUF_tot = new_size
3687 member1 => p%HEAT%R_SUF_elem(head:)
3688 member2 => p%HEAT%R_SUF_surf(head:)
3691 member_n =
get_grp_member( p%MESH,
'surf_grp', grp_id_name(i), member1, member2 )
3693 member1 => member1( member_n+1 : )
3694 member2 => member2( member_n+1 : )
3697 p%HEAT%R_SUF_val (id,1) = value(i)
3698 p%HEAT%R_SUF_val (id,2) = shink(i)
3699 p%HEAT%R_SUF_ampl (id,1) = amp_id1
3700 p%HEAT%R_SUF_ampl (id,2) = amp_id2
3705 deallocate( grp_id_name )
3721 integer(kind=kint) :: ctrl
3722 integer(kind=kint) :: counter
3725 integer(kind=kint) :: rcode
3743 integer(kind=kint) :: ctrl
3744 integer(kind=kint) :: counter
3746 integer(kind=kint) :: rcode
3747 character(HECMW_NAME_LEN) :: grp_id_name(1)
3748 integer(kind=kint) :: grp_id(1)
3765 grp_id_name(1), hecmw_name_len, &
3771 if (p%DYN%idx_resp == 1)
then
3773 p%DYN%ngrp_monit = grp_id(1)
3775 read(grp_id_name,*) p%DYN%ngrp_monit
3787 integer(kind=kint) :: ctrl
3788 integer(kind=kint) :: counter
3791 integer(kind=kint) :: rcode
3792 integer(kind=kint) :: vType
3793 character(HECMW_NAME_LEN) :: amp
3794 integer(kind=kint) :: amp_id
3795 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
3796 integer(kind=kint),
pointer :: dof_ids (:)
3797 integer(kind=kint),
pointer :: dof_ide (:)
3798 real(kind=kreal),
pointer :: val_ptr(:)
3799 integer(kind=kint) :: i, j, n, old_size, new_size
3803 old_size = p%SOLID%VELOCITY_ngrp_tot
3804 new_size = old_size + n
3805 p%SOLID%VELOCITY_ngrp_tot = new_size
3812 allocate( grp_id_name(n))
3813 allocate( dof_ids(n))
3814 allocate( dof_ide(n))
3815 allocate( val_ptr(n) )
3820 grp_id_name, hecmw_name_len, &
3821 dof_ids, dof_ide, val_ptr )
3823 p%SOLID%VELOCITY_type = vtype
3824 if( vtype ==
kbcinitial ) p%DYN%VarInitialize = .true.
3827 n, grp_id_name, p%SOLID%VELOCITY_ngrp_ID(old_size+1:))
3831 if( (dof_ids(i) < 1).or.(6 < dof_ids(i)).or.(dof_ide(i) < 1).or.(6 < dof_ide(i)) )
then
3832 write(
ilog,*)
'fstr control file error : !VELOCITY : range of dof_ids and dof_ide is from 1 to 6'
3835 p%SOLID%VELOCITY_ngrp_type(j) = 10 * dof_ids(i) + dof_ide(i)
3836 p%SOLID%VELOCITY_ngrp_amp(j) = amp_id
3837 p%SOLID%VELOCITY_ngrp_val(old_size+i) = val_ptr(i)
3841 deallocate( grp_id_name )
3842 deallocate( dof_ids )
3843 deallocate( dof_ide )
3844 deallocate( val_ptr )
3845 nullify( grp_id_name )
3859 integer(kind=kint) :: ctrl
3860 integer(kind=kint) :: counter
3863 integer(kind=kint) :: rcode
3864 integer(kind=kint) :: aType
3865 character(HECMW_NAME_LEN) :: amp
3866 integer(kind=kint) :: amp_id
3867 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
3868 integer(kind=kint),
pointer :: dof_ids (:)
3869 integer(kind=kint),
pointer :: dof_ide (:)
3870 real(kind=kreal),
pointer :: val_ptr(:)
3871 integer(kind=kint) :: i, j, n, old_size, new_size
3876 old_size = p%SOLID%ACCELERATION_ngrp_tot
3877 new_size = old_size + n
3878 p%SOLID%ACCELERATION_ngrp_tot = new_size
3885 allocate( grp_id_name(n))
3886 allocate( dof_ids(n))
3887 allocate( dof_ide(n))
3888 allocate( val_ptr(n))
3893 grp_id_name, hecmw_name_len, &
3894 dof_ids, dof_ide, val_ptr)
3896 p%SOLID%ACCELERATION_type = atype
3897 if( atype ==
kbcinitial )p%DYN%VarInitialize = .true.
3900 n, grp_id_name, p%SOLID%ACCELERATION_ngrp_ID(old_size+1:))
3904 if( (dof_ids(i) < 1).or.(6 < dof_ids(i)).or.(dof_ide(i) < 1).or.(6 < dof_ide(i)) )
then
3905 write(
ilog,*)
'fstr control file error : !ACCELERATION : range of dof_ids and dof_ide is from 1 to 6'
3908 p%SOLID%ACCELERATION_ngrp_type(j) = 10 * dof_ids(i) + dof_ide(i)
3909 p%SOLID%ACCELERATION_ngrp_amp(j) = amp_id
3910 p%SOLID%ACCELERATION_ngrp_val(old_size+i) = val_ptr(i)
3914 deallocate( grp_id_name )
3915 deallocate( dof_ids )
3916 deallocate( dof_ide )
3917 deallocate( val_ptr )
3918 nullify( grp_id_name )
3935 integer(kind=kint) :: ctrl
3936 integer(kind=kint) :: counter
3939 integer(kind=kint) :: rcode
3985 integer(kind=kint) :: ctrl
3986 type (hecmwST_local_mesh) :: hecMESH
3987 type (fstr_solid ) :: fstrSOLID
3988 write(
ilog,*)
'### Error : In !BOUNDARY, TYPE=NASTRAN is not supported.'
3989 call hecmw_abort( hecmw_comm_get_comm())
3998 integer(kind=kint) :: ctrl
4002 integer(kind=kint) :: rcode
4016 integer(kind=kint) :: ctrl
4019 integer(kind=kint) :: rcode, nid
4020 character(len=HECMW_NAME_LEN) :: data_fmt
4022 data_fmt =
'SOLUTION,MATERIAL '
4035 type(hecmwst_local_mesh),
pointer :: hecMESH
4036 integer(kind=kint) :: n, i, sgrp_id, ngrp_id, ngrp_id2
4038 n = hecmesh%contact_pair%n_pair
4040 if( hecmesh%contact_pair%type(i) /= hecmw_contact_type_surf_surf ) cycle
4041 sgrp_id = hecmesh%contact_pair%slave_grp_id(i)
4044 hecmesh%contact_pair%type(i) = hecmw_contact_type_node_surf
4045 hecmesh%contact_pair%slave_grp_id(i) = ngrp_id
int fstr_ctrl_get_param_ex(int *ctrl, const char *param_name, const char *value_list, int *necessity, char *type, void *val)
int fstr_ctrl_get_data_array_ex(int *ctrl, const char *format,...)
int fstr_ctrl_open(char *filename)
int fstr_ctrl_get_c_h_name(int *ctrl, char *header_name, int *buff_size)
int fstr_ctrl_get_data_ex(int *ctrl, int *line_no, const char *format,...)
integer(kind=kint) function fstr_ctrl_get_fload(ctrl, node_id, node_id_len, dof_id, value)
This module encapsulate the basic functions of all elements provide by this software.
integer function numofquadpoints(fetype)
Obtains the number of quadrature points of the element.
integer(kind=kind(2)) function getspacedimension(etype)
Obtain the space dimension of the element.
This module contains fstr control file data obtaining functions.
integer(kind=kint) function fstr_ctrl_get_element_activation(ctrl, amp, eps, grp_id_name, mode, measure, state, thlow, thup)
Read in !ELEMENT_ACTIVATION.
integer(kind=kint) function fstr_ctrl_get_contactparam(ctrl, contactparam)
Read in !CONTACT_PARAM !
integer(kind=kint) function fstr_ctrl_get_solution(ctrl, type, nlgeom)
Read in !SOLUTION.
integer(kind=kint) function fstr_ctrl_get_contactalgo(ctrl, algo, augiter)
Read in !CONTACT.
integer(kind=kint) function fstr_ctrl_get_contact_if(ctrl, n, contact_if)
Read in contact interference.
integer(kind=kint) function fstr_ctrl_get_couple(ctrl, fg_type, fg_first, fg_window, surf_id, surf_id_len)
Read in !COUPLE.
integer(kind=kint) function fstr_get_autoinc(ctrl, aincparam)
Read in !AUTOINC_PARAM !
integer(kind=kint) function fstr_ctrl_get_amplitude(ctrl, nline, name, type_def, type_time, type_val, n, val, table)
Read in !AMPLITUDE.
logical function fstr_ctrl_get_outitem(ctrl, hecMESH, outinfo)
Read in !OUTPUT_RES & !OUTPUT_VIS.
integer(kind=kint) function fstr_ctrl_get_elemopt(ctrl, elemopt361)
Read in !ELEMOPT.
integer(kind=kint) function fstr_ctrl_get_timepoints(ctrl, tp)
Read in !TIME_POINTS.
integer(kind=kint) function fstr_ctrl_get_solver(ctrl, method, precond, nset, iterlog, timelog, steplog, nier, iterpremax, nrest, nBFGS, scaling, dumptype, dumpexit, usejad, ncolor_in, mpc_method, estcond, method2, recyclepre, solver_opt, contact_elim, resid, singma_diag, sigma, thresh, filter)
Read in !SOLVER.
integer(kind=kint) function fstr_ctrl_get_echo(ctrl, echo)
Read in !ECHO.
integer(kind=kint) function fstr_ctrl_get_nonlinear_solver(ctrl, method)
Read in !NONLINEAR_SOLVER.
integer(kind=kint) function fstr_ctrl_get_mpc(ctrl, penalty)
Read in !MPC.
integer function fstr_ctrl_get_section(ctrl, hecMESH, sections)
Read in !SECTION.
logical function fstr_ctrl_get_contact(ctrl, n, contact, np, tp, ntol, ttol, ctAlgo, cpname)
Read in contact definition.
logical function fstr_ctrl_get_istep(ctrl, hecMESH, steps, tpname, apname)
Read in !STEP and !ISTEP.
integer(kind=kint) function fstr_ctrl_get_write(ctrl, res, visual, femap)
Read in !WRITE.
integer(kind=kint) function fstr_ctrl_get_step(ctrl, amp, iproc)
Read in !STEP.
logical function fstr_ctrl_get_embed(ctrl, n, embed, cpname)
Read in contact definition.
This module contains control file data obtaining functions for dynamic analysis.
integer(kind=kint) function fstr_ctrl_get_dynamic(ctrl, nlgeom, idx_eqa, idx_resp, n_step, t_start, t_end, t_delta, gamma, beta, idx_mas, idx_dmp, ray_m, ray_k, nout, node_id, node_id_len, nout_monit, iout_list)
Read in !DYNAMIC.
integer(kind=kint) function fstr_ctrl_get_velocity(ctrl, vType, amp, node_id, node_id_len, dof_ids, dof_ide, value)
Read in !VELOCITY.
integer(kind=kint) function fstr_ctrl_get_acceleration(ctrl, aType, amp, node_id, node_id_len, dof_ids, dof_ide, value)
Read in !ACCELERATION.
This module contains control file data obtaining functions for dynamic analysis.
integer(kind=kint) function fstr_ctrl_get_eigen(ctrl, nget, tolerance, maxiter)
Read in !EIGEN (struct)
This module contains control file data obtaining functions for heat conductive analysis.
integer(kind=kint) function fstr_ctrl_get_dflux(ctrl, amp, elem_grp_name, elem_grp_name_len, load_type, value)
Read in !DFLUX (heat)
integer(kind=kint) function fstr_ctrl_get_sflux(ctrl, amp, surface_grp_name, surface_grp_name_len, value)
Read in !SFLUX (heat)
integer(kind=kint) function fstr_ctrl_get_weldline(ctrl, hecMESH, grp_name_len, weldline)
Read in !WELD_LINE (heat)
integer(kind=kint) function fstr_ctrl_get_heat(ctrl, dt, etime, dtmin, deltmx, itmax, eps, tpname, beta)
Read in !HEAT.
integer(kind=kint) function fstr_ctrl_get_film(ctrl, amp1, amp2, elem_grp_name, elem_grp_name_len, load_type, value, sink)
Read in !FILM (heat)
integer(kind=kint) function fstr_ctrl_get_radiate(ctrl, amp1, amp2, elem_grp_name, elem_grp_name_len, load_type, value, sink)
Read in !RADIATE (heat)
integer(kind=kint) function fstr_ctrl_get_cflux(ctrl, amp, node_grp_name, node_grp_name_len, value)
Read in !CFLUX (heat)
integer(kind=kint) function fstr_ctrl_get_fixtemp(ctrl, amp, node_grp_name, node_grp_name_len, value)
Read in !FIXTEMP.
integer(kind=kint) function fstr_ctrl_get_sfilm(ctrl, amp1, amp2, surface_grp_name, surface_grp_name_len, value, sink)
Read in !SFILM (heat)
integer(kind=kint) function fstr_ctrl_get_sradiate(ctrl, amp1, amp2, surface_grp_name, surface_grp_name_len, value, sink)
Read in !SRADIATE (heat)
This module manages read in of various material properties.
integer function fstr_ctrl_get_dashpot_d(ctrl, mattype, nlgeom, matval_i, dict)
Read in !DASHPOT_D.
integer function fstr_ctrl_get_hyperelastic(ctrl, mattype, nlgeom, matval)
Read in !HYPERELASTIC.
integer function fstr_ctrl_get_viscoelasticity(ctrl, mattype, nlgeom, dict)
Read in !VISCOELASTIC.
integer function fstr_ctrl_get_viscoplasticity(ctrl, mattype, nlgeom, dict)
Read in !CREEP.
integer function fstr_ctrl_get_usermaterial(ctrl, mattype, nlgeom, nstatus, matval)
Read in !USER_MATERIAL.
integer function fstr_ctrl_get_expansion_coeff(ctrl, matval, dict)
Read in !EXPANSION_COEFF.
integer function fstr_ctrl_get_trs(ctrl, mattype, matval)
Read in !TRS.
integer function fstr_ctrl_get_elasticity(ctrl, mattype, nlgeom, matval, dict)
Read in !ELASTIC.
integer function fstr_ctrl_get_plasticity(ctrl, mattype, nlgeom, matval, mattable, dict)
Read in !PLASTIC.
integer function fstr_ctrl_get_dashpot_a(ctrl, mattype, nlgeom, matval_i, dict)
Read in !DASHPOT_A.
integer function fstr_ctrl_get_material(ctrl, matname)
Read in !MATERIAL.
integer function fstr_ctrl_get_density(ctrl, matval)
Read in !DENSITY.
integer function fstr_ctrl_get_spring_a(ctrl, mattype, nlgeom, matval_i, dict)
Read in !SPRING_A.
integer function fstr_ctrl_get_fluid(ctrl, mattype, nlgeom, matval, dict)
Read in !FLUID.
integer function fstr_ctrl_get_spring_d(ctrl, mattype, nlgeom, matval_i, dict)
Read in !SPRING_D.
This module contains control file data obtaining functions for static analysis.
integer(kind=kint) function fstr_ctrl_get_spring(ctrl, amp, node_id, node_id_len, dof_id, value)
Read in !SPRING.
integer(kind=kint) function fstr_ctrl_get_static(ctrl, dtime, etime, itime, eps, restart_nout, idx_elpl, iout_list, sig_y0, h_dash, nout, nout_monit, node_monit_1, elem_monit_1, intg_monit_1)
Read in !STATIC.
integer(kind=kint) function fstr_ctrl_get_boundary(ctrl, amp, node_id, node_id_len, dof_ids, dof_ide, value)
Read in !BOUNDARY.
integer(kind=kint) function fstr_ctrl_get_reftemp(ctrl, value)
Read in !REFTEMP.
integer(kind=kint) function fstr_ctrl_get_dload(ctrl, amp, follow, element_id, element_id_len, load_type, params)
Read in !DLOAD.
integer(kind=kint) function fstr_ctrl_get_temperature(ctrl, irres, tstep, tintl, rtype, node_id, node_id_len, value)
Read in !TEMPERATURE.
integer(kind=kint) function fstr_ctrl_get_cload(ctrl, amp, node_id, node_id_len, dof_id, value)
Read in !CLOAD.
integer function fstr_ctrl_get_userload(ctrl)
Read in !ULOAD.
This module contains auxiliary functions in calculation setup.
integer(kind=kint) function get_grp_member_n(hecMESH, grp_type_name, name)
subroutine fstr_ctrl_err_stop
subroutine node_grp_name_to_id_ex(hecMESH, header_name, n, grp_id_name, grp_ID)
subroutine surf_grp_name_to_id_ex(hecMESH, header_name, n, grp_id_name, grp_ID)
subroutine dload_grp_name_to_id_ex(hecMESH, n, grp_id_name, fg_surface, grp_ID)
subroutine fstr_setup_visualize(ctrl, hecMESH)
subroutine nodesurf_grp_name_to_id_ex(hecMESH, header_name, n, grp_id_name, grp_ID, grp_TYPE)
integer(kind=kint) function get_local_member_index(hecMESH, type_name, name, local_id)
subroutine fstr_expand_real_array2(array, column, old_size, new_size)
integer(kind=kint) function get_grp_member(hecMESH, grp_type_name, name, member1, member2)
subroutine fstr_expand_integer_array(array, old_size, new_size)
subroutine fstr_expand_real_array(array, old_size, new_size)
subroutine amp_name_to_id(hecMESH, header_name, aname, id)
subroutine append_new_amplitude(amp, name, type_def, type_time, type_val, np, val, table)
Append new amplitude table at the end of existing amplitude tables.
subroutine append_node_grp_from_surf_grp(hecMESH, sgrp_id, ngrp_id)
integer(kind=kint) function node_global_to_local(hecMESH, list, n)
subroutine 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.