27 type(hecmwst_local_mesh),
pointer :: mesh
42 subroutine fstr_setup( cntl_filename, hecMESH, fstrPARAM, &
43 fstrSOLID, fstrEIG, fstrHEAT, fstrDYNAMIC, fstrCPL, fstrFREQ )
45 character(len=HECMW_FILENAME_LEN) :: cntl_filename, input_filename
46 type(hecmwst_local_mesh),
target :: hecMESH
55 integer(kind=kint) :: ctrl, ctrl_list(20), ictrl
58 integer,
parameter :: MAXOUTFILE = 10
59 double precision,
parameter :: dpi = 3.14159265358979323846d0
61 integer(kind=kint) :: version, result, visual, femap, n_totlyr
62 integer(kind=kint) :: rcode, n, i, j, cid, nout, nin, ierror, cparam_id
63 character(len=HECMW_NAME_LEN) :: header_name, fname(MAXOUTFILE)
64 real(kind=kreal) :: ee, pp, rho, alpha, thick, alpha_over_mu
65 real(kind=kreal) :: beam_radius, &
66 beam_angle1, beam_angle2, beam_angle3,&
67 beam_angle4, beam_angle5, beam_angle6
71 character(len=HECMW_FILENAME_LEN) :: logfileNAME, mName, mName2
74 integer(kind=kint) :: c_solution, c_solver, c_nlsolver, c_step, c_write, c_echo, c_amplitude
75 integer(kind=kint) :: c_static, c_boundary, c_cload, c_dload, c_temperature, c_reftemp, c_spring, c_elemact
76 integer(kind=kint) :: c_heat, c_fixtemp, c_cflux, c_dflux, c_sflux, c_film, c_sfilm, c_radiate, c_sradiate
77 integer(kind=kint) :: c_eigen, c_contact, c_contactparam, c_embed, c_contact_if
78 integer(kind=kint) :: c_dynamic, c_velocity, c_acceleration
79 integer(kind=kint) :: c_fload, c_eigenread
80 integer(kind=kint) :: c_couple, c_material
81 integer(kind=kint) :: c_mpc, c_weldline, c_initial
82 integer(kind=kint) :: c_istep, c_localcoord, c_section
83 integer(kind=kint) :: c_elemopt, c_aincparam, c_timepoints
84 integer(kind=kint) :: c_output, islog
85 integer(kind=kint) :: k
86 integer(kind=kint) :: cache = 1
88 write( logfilename,
'(i5,''.log'')' )
myrank
102 c_solution = 0; c_solver = 0; c_nlsolver = 0; c_step = 0; c_output = 0; c_echo = 0; c_amplitude = 0
103 c_static = 0; c_boundary = 0; c_cload = 0; c_dload = 0; c_temperature = 0; c_reftemp = 0; c_spring = 0;
105 c_heat = 0; c_fixtemp = 0; c_cflux = 0; c_dflux = 0; c_sflux = 0
106 c_film = 0; c_sfilm = 0; c_radiate= 0; c_sradiate = 0
107 c_eigen = 0; c_contact = 0; c_contactparam = 0; c_embed = 0; c_contact_if = 0
108 c_dynamic = 0; c_velocity = 0; c_acceleration = 0
109 c_couple = 0; c_material = 0; c_section =0
110 c_mpc = 0; c_weldline = 0; c_initial = 0
111 c_istep = 0; c_localcoord = 0
112 c_fload = 0; c_eigenread = 0
114 c_aincparam= 0; c_timepoints = 0
120 write(*,*)
'### Error: Cannot open FSTR control file : ', cntl_filename
121 write(
ilog,*)
'### Error: Cannot open FSTR control file : ', cntl_filename
128 if( header_name ==
'!VERSION' )
then
130 else if( header_name ==
'!SOLUTION' )
then
131 c_solution = c_solution + 1
133 else if( header_name ==
'!NONLINEAR_SOLVER' )
then
134 c_nlsolver = c_nlsolver + 1
136 else if( header_name ==
'!SOLVER' )
then
137 c_solver = c_solver + 1
139 else if( header_name ==
'!ISTEP' )
then
140 c_istep = c_istep + 1
141 else if( header_name ==
'!STEP' )
then
142 if( version==0 )
then
146 c_istep = c_istep + 1
148 else if( header_name ==
'!WRITE' )
then
150 if( visual==1 ) p%PARAM%fg_visual= 1
151 if( result==1 ) p%PARAM%fg_result = 1
152 c_output = c_output+1
153 else if( header_name ==
'!ECHO' )
then
156 else if( header_name ==
'!RESTART' )
then
158 fstrsolid%restart_nout= nout
159 fstrdynamic%restart_nout= nout
160 fstrheat%restart_nout= nout
161 else if( header_name ==
'!ORIENTATION' )
then
162 c_localcoord = c_localcoord + 1
163 else if( header_name ==
'!AUTOINC_PARAM' )
then
164 c_aincparam = c_aincparam + 1
165 else if( header_name ==
'!TIME_POINTS' )
then
166 c_timepoints = c_timepoints + 1
167 else if( header_name ==
'!OUTPUT_SSTYPE' )
then
169 else if( header_name ==
'!INITIAL_CONDITION' )
then
170 c_initial = c_initial + 1
171 else if( header_name ==
'!AMPLITUDE' )
then
172 c_amplitude = c_amplitude + 1
174 else if( header_name ==
'!ELEMENT_ACTIVATION' )
then
175 c_elemact = c_elemact + 1
180 else if( header_name ==
'!STATIC' )
then
181 c_static = c_static + 1
183 else if( header_name ==
'!BOUNDARY' )
then
184 c_boundary = c_boundary + 1
186 else if( header_name ==
'!CLOAD' )
then
187 c_cload = c_cload + 1
190 else if( header_name ==
'!DLOAD' )
then
191 c_dload = c_dload + 1
193 else if( header_name ==
'!CONTACT_ALGO' )
then
195 else if( header_name ==
'!CONTACT' )
then
197 c_contact = c_contact + n
198 else if( header_name ==
'!EMBED' )
then
200 c_embed = c_embed + n
201 else if( header_name ==
'!CONTACT_PARAM' )
then
202 c_contactparam = c_contactparam + 1
203 else if( header_name ==
'!CONTACT_INTERFERENCE' )
then
205 c_contact_if = c_contact_if + n
206 else if( header_name ==
'!MATERIAL' )
then
207 c_material = c_material + 1
208 else if( header_name ==
'!TEMPERATURE' )
then
209 c_temperature = c_temperature + 1
211 else if( header_name ==
'!SPRING' )
then
212 c_spring = c_spring + 1
214 else if( header_name ==
'!REFTEMP' )
then
215 c_reftemp = c_reftemp + 1
220 else if( header_name ==
'!HEAT' )
then
222 else if( header_name ==
'!FIXTEMP' )
then
223 c_fixtemp = c_fixtemp + 1
225 else if( header_name ==
'!CFLUX' )
then
226 c_cflux = c_cflux + 1
228 else if( header_name ==
'!DFLUX' )
then
229 c_dflux = c_dflux + 1
231 else if( header_name ==
'!SFLUX' )
then
232 c_sflux = c_sflux + 1
234 else if( header_name ==
'!FILM' )
then
237 else if( header_name ==
'!SFILM' )
then
238 c_sfilm = c_sfilm + 1
240 else if( header_name ==
'!RADIATE' )
then
241 c_radiate = c_radiate + 1
243 else if( header_name ==
'!SRADIATE' )
then
244 c_sradiate = c_sradiate + 1
246 else if( header_name ==
'!WELD_LINE' )
then
247 c_weldline = c_weldline + 1
251 else if( header_name ==
'!EIGEN' )
then
252 c_eigen = c_eigen + 1
257 else if( header_name ==
'!DYNAMIC' )
then
258 c_dynamic = c_dynamic + 1
260 else if( header_name ==
'!VELOCITY' )
then
261 c_velocity = c_velocity + 1
263 else if( header_name ==
'!ACCELERATION' )
then
264 c_acceleration = c_acceleration + 1
266 else if( header_name ==
'!FLOAD' )
then
267 c_fload = c_fload + 1
269 else if( header_name ==
'!EIGENREAD' )
then
270 c_eigenread = c_eigenread + 1
275 else if( header_name ==
'!COUPLE' )
then
276 c_couple = c_couple + 1
281 else if( header_name ==
'!MPC' )
then
287 else if( header_name ==
'!INCLUDE' )
then
288 ctrl_list(ictrl) = ctrl
293 write(*,*)
'### Error: Cannot open FSTR control file : ', input_filename
294 write(
ilog,*)
'### Error: Cannot open FSTR control file : ', input_filename
302 else if( header_name ==
'!END' )
then
313 ctrl = ctrl_list(ictrl)
320 fstrsolid%n_contacts = c_contact
321 if( c_contact>0 )
then
322 allocate( fstrsolid%contacts( c_contact ) )
326 fstrsolid%n_embeds = c_embed
327 if( c_embed>0 )
allocate( fstrsolid%embeds( c_embed ) )
328 if( c_weldline>0 )
allocate( fstrheat%weldline( c_weldline ) )
331 allocate( fstrsolid%step_ctrl( c_istep ) )
335 fstrsolid%step_ctrl(i)%num_substep = fstrdynamic%n_step
336 fstrsolid%step_ctrl(i)%initdt = fstrdynamic%t_delta
337 fstrsolid%step_ctrl(i)%elapsetime = dble(fstrdynamic%n_step) * fstrdynamic%t_delta
338 fstrsolid%step_ctrl(i)%mindt = fstrdynamic%t_delta
339 fstrsolid%step_ctrl(i)%maxdt = fstrdynamic%t_delta
343 if( c_localcoord>0 )
allocate( g_localcoordsys(c_localcoord) )
344 allocate( fstrparam%ainc(0:c_aincparam) )
348 if( c_timepoints>0 )
allocate( fstrparam%timepoints(c_timepoints) )
349 allocate( fstrparam%contactparam(0:c_contactparam) )
350 do i=0,c_contactparam
353 if( c_contact_if>0 )
then
354 allocate( fstrparam%contact_if( c_contact_if ) )
360 p%SOLID%is_33shell = 0
361 p%SOLID%is_33beam = 0
363 do i=1,hecmesh%n_elem_type
364 n = hecmesh%elem_type_item(i)
365 if (n == 781 .or. n == 761)
then
366 p%SOLID%is_33shell = 1
367 elseif (n == 641)
then
368 p%SOLID%is_33beam = 1
373 if( hecmesh%material%n_mat>n ) n= hecmesh%material%n_mat
374 if( n==0 ) stop
"material property not defined!"
375 allocate( fstrsolid%materials( n ) )
379 if( hecmesh%section%n_sect >0 )
then
380 do i=1,hecmesh%section%n_sect
381 if( hecmesh%section%sect_type(i) == 4 ) cycle
382 cid = hecmesh%section%sect_mat_ID_item(i)
383 if( cid>n ) stop
"Error in material property definition!"
384 if( fstrparam%nlgeom .or. fstrparam%solution_type==
kststaticeigen ) &
385 fstrsolid%materials(cid)%nlgeom_flag = 1
388 n_totlyr,alpha_over_mu, &
389 beam_radius,beam_angle1,beam_angle2,beam_angle3, &
390 beam_angle4,beam_angle5,beam_angle6)
391 fstrsolid%materials(cid)%name = hecmesh%material%mat_name(cid)
392 fstrsolid%materials(cid)%variables(
m_youngs)=ee
393 fstrsolid%materials(cid)%variables(
m_poisson)=pp
394 fstrsolid%materials(cid)%variables(
m_density)=rho
395 fstrsolid%materials(cid)%variables(
m_exapnsion)=alpha
396 fstrsolid%materials(cid)%variables(
m_thick)=thick
398 fstrsolid%materials(cid)%variables(
m_beam_radius)=beam_radius
399 fstrsolid%materials(cid)%variables(
m_beam_angle1)=beam_angle1
400 fstrsolid%materials(cid)%variables(
m_beam_angle2)=beam_angle2
401 fstrsolid%materials(cid)%variables(
m_beam_angle3)=beam_angle3
402 fstrsolid%materials(cid)%variables(
m_beam_angle4)=beam_angle4
403 fstrsolid%materials(cid)%variables(
m_beam_angle5)=beam_angle5
404 fstrsolid%materials(cid)%variables(
m_beam_angle6)=beam_angle6
405 fstrsolid%materials(cid)%mtype =
elastic
406 if( hecmesh%section%sect_type(i) == 2 )
then
407 fstrsolid%materials(cid)%totallyr = n_totlyr
408 fstrsolid%materials(cid)%shell_var => shmat
414 allocate( fstrsolid%sections(hecmesh%section%n_sect) )
415 do i=1,hecmesh%section%n_sect
418 if( p%PARAM%nlgeom )
then
421 fstrsolid%sections(i)%elemopt361 =
kel361ic
423 else if( p%PARAM%solution_type==
ksteigen )
then
424 fstrsolid%sections(i)%elemopt361 =
kel361ic
428 fstrsolid%sections(i)%elemopt361 =
kel361fi
430 fstrsolid%sections(i)%elemopt341 =
kel341fi
433 allocate( fstrsolid%output_ctrl( 4 ) )
435 fstrsolid%output_ctrl( 1 )%filename = trim(logfilename)
436 fstrsolid%output_ctrl( 1 )%filenum =
ilog
459 fstrsolid%elemopt361 = 0
460 fstrsolid%AutoINC_stat = 0
461 fstrsolid%CutBack_stat = 0
462 fstrsolid%NRstat_i(:) = 0
463 fstrsolid%NRstat_r(:) = 0.d0
468 if( header_name ==
'!ORIENTATION' )
then
469 c_localcoord = c_localcoord + 1
471 write(*,*)
'### Error: Fail in read in ORIENTATION definition : ', c_localcoord
472 write(
ilog,*)
'### Error: Fail in read in ORIENTATION definition : ', c_localcoord
477 elseif( header_name ==
'!CONTACT' )
then
480 ,ee, pp, rho, alpha, p%PARAM%contact_algo, mname, k ) )
then
481 write(*,*)
'### Error: Fail in read in contact condition : ', c_contact
482 write(
ilog,*)
'### Error: Fail in read in contact condition : ', c_contact
486 do i=1,
size(fstrparam%contactparam)-1
487 if(
fstr_streqr( fstrparam%contactparam(i)%name, mname ) )
then
492 if( rho>0.d0 ) cgn = rho
493 if( alpha>0.d0 ) cgt = alpha
495 fstrsolid%contacts(c_contact+i)%smoothing = k
496 if( .not. fstr_contact_check( fstrsolid%contacts(c_contact+i), p%MESH ) )
then
497 write(*,*)
'### Error: Inconsistence in contact and surface definition : ' , i+c_contact
498 write(
ilog,*)
'### Error: Inconsistence in contact and surface definition : ', i+c_contact
502 isok = fstr_contact_init( fstrsolid%contacts(c_contact+i), p%MESH, fstrparam%contactparam(cparam_id),
myrank)
504 isok = fstr_contact_init( fstrsolid%contacts(c_contact+i), p%MESH, fstrparam%contactparam(cparam_id))
509 c_contact = c_contact+n
512 elseif( header_name ==
'!EMBED' )
then
514 if( .not.
fstr_ctrl_get_embed( ctrl, n, fstrsolid%embeds(c_embed+1:c_embed+n), mname, k ) )
then
515 write(*,*)
'### Error: Fail in read in embed condition : ', c_embed
516 write(
ilog,*)
'### Error: Fail in read in embed condition : ', c_embed
520 do i=1,
size(fstrparam%contactparam)-1
521 if(
fstr_streqr( fstrparam%contactparam(i)%name, mname ) )
then
526 fstrsolid%embeds(c_embed+i)%smoothing = k
527 if( .not. fstr_contact_check( fstrsolid%embeds(c_embed+i), p%MESH ) )
then
528 write(*,*)
'### Error: Inconsistence in contact and surface definition : ' , i+c_embed
529 write(
ilog,*)
'### Error: Inconsistence in contact and surface definition : ', i+c_embed
533 isok = fstr_embed_init( fstrsolid%embeds(c_embed+i), p%MESH, fstrparam%contactparam(cparam_id),
myrank)
535 isok = fstr_embed_init( fstrsolid%embeds(c_embed+i), p%MESH, fstrparam%contactparam(cparam_id))
541 else if( header_name ==
'!ISTEP' )
then
543 if( .not.
fstr_ctrl_get_istep( ctrl, hecmesh, fstrsolid%step_ctrl(c_istep), mname, mname2 ) )
then
544 write(*,*)
'### Error: Fail in read in step definition : ' , c_istep
545 write(
ilog,*)
'### Error: Fail in read in step definition : ', c_istep
548 if(
associated(fstrparam%timepoints) )
then
549 do i=1,
size(fstrparam%timepoints)
550 if(
fstr_streqr( fstrparam%timepoints(i)%name, mname ) )
then
551 fstrsolid%step_ctrl(c_istep)%timepoint_id = i;
exit
555 if(
associated(fstrparam%ainc) )
then
556 do i=1,
size(fstrparam%ainc)
557 if(
fstr_streqr( fstrparam%ainc(i)%name, mname2 ) )
then
558 fstrsolid%step_ctrl(c_istep)%AincParam_id = i;
exit
562 else if( header_name ==
'!STEP' .and. version>=1 )
then
564 if( .not.
fstr_ctrl_get_istep( ctrl, hecmesh, fstrsolid%step_ctrl(c_istep), mname, mname2 ) )
then
565 write(*,*)
'### Error: Fail in read in step definition : ' , c_istep
566 write(
ilog,*)
'### Error: Fail in read in step definition : ', c_istep
573 & fstrsolid%step_ctrl(c_istep)%inc_type ==
stepfixedinc )
then
574 fstrsolid%step_ctrl(c_istep)%initdt = fstrdynamic%t_delta
575 fstrsolid%step_ctrl(c_istep)%mindt = fstrdynamic%t_delta
576 fstrsolid%step_ctrl(c_istep)%maxdt = fstrdynamic%t_delta
578 if(
associated(fstrparam%timepoints) )
then
579 do i=1,
size(fstrparam%timepoints)
580 if(
fstr_streqr( fstrparam%timepoints(i)%name, mname ) )
then
581 fstrsolid%step_ctrl(c_istep)%timepoint_id = i;
exit
585 if(
associated(fstrparam%ainc) )
then
586 do i=1,
size(fstrparam%ainc)-1
587 if(
fstr_streqr( fstrparam%ainc(i)%name, mname2 ) )
then
588 fstrsolid%step_ctrl(c_istep)%AincParam_id = i;
exit
593 else if( header_name ==
'!HEAT' )
then
597 else if( header_name ==
'!WELD_LINE' )
then
598 fstrheat%WL_tot = fstrheat%WL_tot+1
600 write(*,*)
'### Error: Fail in read in Weld Line definition : ' , fstrheat%WL_tot
601 write(
ilog,*)
'### Error: Fail in read in Weld Line definition : ', fstrheat%WL_tot
605 else if( header_name ==
'!INITIAL_CONDITION' .or. header_name ==
'!INITIAL CONDITION' )
then
606 c_initial = c_initial+1
608 write(*,*)
'### Error: Fail in read in INITIAL CONDITION definition : ' ,c_initial
609 write(
ilog,*)
'### Error: Fail in read in INITIAL CONDITION definition : ', c_initial
613 else if( header_name ==
'!SECTION' )
then
614 c_section = c_section+1
616 write(*,*)
'### Error: Fail in read in SECTION definition : ' , c_section
617 write(
ilog,*)
'### Error: Fail in read in SECTION definition : ', c_section
621 else if( header_name ==
'!ELEMOPT' )
then
622 c_elemopt = c_elemopt+1
624 write(*,*)
'### Error: Fail in read in ELEMOPT definition : ' , c_elemopt
625 write(
ilog,*)
'### Error: Fail in read in ELEMOPT definition : ', c_elemopt
630 else if( header_name ==
'!MATERIAL' )
then
631 c_material = c_material+1
633 write(*,*)
'### Error: Fail in read in material definition : ' , c_material
634 write(
ilog,*)
'### Error: Fail in read in material definition : ', c_material
638 if(cache < hecmesh%material%n_mat)
then
639 if(
fstr_streqr( hecmesh%material%mat_name(cache), mname ))
then
645 do i=1,hecmesh%material%n_mat
646 if(
fstr_streqr( hecmesh%material%mat_name(i), mname ) )
then
654 write(*,*)
'### Error: Fail in read in material definition : ' , c_material
655 write(
ilog,*)
'### Error: Fail in read in material definition : ', c_material
658 fstrsolid%materials(cid)%name = mname
659 if(c_material>hecmesh%material%n_mat)
call initmaterial( fstrsolid%materials(cid) )
661 else if( header_name ==
'!ELASTIC' )
then
662 if( c_material >0 )
then
664 fstrsolid%materials(cid)%mtype, &
665 fstrsolid%materials(cid)%nlgeom_flag, &
666 fstrsolid%materials(cid)%variables, &
667 fstrsolid%materials(cid)%dict)/=0 )
then
668 write(*,*)
'### Error: Fail in read in elasticity definition : ' , cid
669 write(
ilog,*)
'### Error: Fail in read in elasticity definition : ', cid
673 else if( header_name ==
'!PLASTIC' )
then
676 fstrsolid%materials(cid)%mtype, &
677 fstrsolid%materials(cid)%nlgeom_flag, &
678 fstrsolid%materials(cid)%variables, &
679 fstrsolid%materials(cid)%table, &
680 fstrsolid%materials(cid)%dict)/=0 )
then
681 write(*,*)
'### Error: Fail in read in plasticity definition : ' , cid
682 write(
ilog,*)
'### Error: Fail in read in plasticity definition : ', cid
686 else if( header_name ==
'!HYPERELASTIC' )
then
689 fstrsolid%materials(cid)%mtype, &
690 fstrsolid%materials(cid)%nlgeom_flag, &
691 fstrsolid%materials(cid)%variables )/=0 )
then
692 write(*,*)
'### Error: Fail in read in elasticity definition : ' , cid
693 write(
ilog,*)
'### Error: Fail in read in elasticity definition : ', cid
697 else if( header_name ==
'!VISCOELASTIC' )
then
700 fstrsolid%materials(cid)%mtype, &
701 fstrsolid%materials(cid)%nlgeom_flag, &
702 fstrsolid%materials(cid)%dict)/=0 )
then
703 write(*,*)
'### Error: Fail in read in plasticity definition : ' , cid
704 write(
ilog,*)
'### Error: Fail in read in plasticity definition : ', cid
708 else if( header_name ==
'!TRS' )
then
711 write(*,*)
'### WARNING: TRS can only be defined for viscoelastic material! It is ignored! '
712 write(
ilog,*)
'### WARNING: TRS can only be defined for viscoelastic material! It is ignored! '
714 if(
fstr_ctrl_get_trs( ctrl, fstrsolid%materials(cid)%mtype, fstrsolid%materials(cid)%variables)/=0 )
then
715 write(*,*)
'### Error: Fail in read in TRS definition : ' , cid
716 write(
ilog,*)
'### Error: Fail in read in TRS definition : ', cid
721 else if( header_name ==
'!CREEP' )
then
724 fstrsolid%materials(cid)%mtype, &
725 fstrsolid%materials(cid)%nlgeom_flag, &
726 fstrsolid%materials(cid)%dict)/=0 )
then
727 write(*,*)
'### Error: Fail in read in plasticity definition : ' , cid
728 write(
ilog,*)
'### Error: Fail in read in plasticity definition : ', cid
732 else if( header_name ==
'!DENSITY' )
then
735 write(*,*)
'### Error: Fail in read in density definition : ' , cid
736 write(
ilog,*)
'### Error: Fail in read in density definition : ', cid
740 else if( header_name ==
'!EXPANSION_COEF' .or. header_name ==
'!EXPANSION_COEFF' .or. &
741 header_name ==
'!EXPANSION')
then
744 fstrsolid%materials(cid)%dict)/=0 )
then
745 write(*,*)
'### Error: Fail in read in expansion coefficient definition : ' , cid
746 write(
ilog,*)
'### Error: Fail in read in expansion coefficient definition : ', cid
750 else if( header_name ==
'!DAMPING')
then
753 fstrsolid%materials(cid)%is_elem_Rayleigh_damping)/=0 )
then
754 write(*,*)
'### Error: Fail in read in damping definition : ' , cid
755 write(
ilog,*)
'### Error: Fail in read in damping definition : ', cid
759 else if( header_name ==
'!FLUID' )
then
760 if( c_material >0 )
then
762 fstrsolid%materials(cid)%mtype, &
763 fstrsolid%materials(cid)%nlgeom_flag, &
764 fstrsolid%materials(cid)%variables, &
765 fstrsolid%materials(cid)%dict)/=0 )
then
766 write(*,*)
'### Error: Fail in read in fluid definition : ' , cid
767 write(
ilog,*)
'### Error: Fail in read in fluid definition : ', cid
771 else if( header_name ==
'!SPRING_D' )
then
772 if( c_material >0 )
then
774 fstrsolid%materials(cid)%mtype, &
775 fstrsolid%materials(cid)%nlgeom_flag, &
776 fstrsolid%materials(cid)%variables_i, &
777 fstrsolid%materials(cid)%dict)/=0 )
then
778 write(*,*)
'### Error: Fail in read in spring_d definition : ' , cid
779 write(
ilog,*)
'### Error: Fail in read in spring_d definition : ', cid
783 else if( header_name ==
'!SPRING_A' )
then
784 if( c_material >0 )
then
786 fstrsolid%materials(cid)%mtype, &
787 fstrsolid%materials(cid)%nlgeom_flag, &
788 fstrsolid%materials(cid)%variables_i, &
789 fstrsolid%materials(cid)%dict)/=0 )
then
790 write(*,*)
'### Error: Fail in read in spring_a definition : ' , cid
791 write(
ilog,*)
'### Error: Fail in read in spring_a definition : ', cid
795 else if( header_name ==
'!DASHPOT_D' )
then
796 if( c_material >0 )
then
798 fstrsolid%materials(cid)%mtype, &
799 fstrsolid%materials(cid)%nlgeom_flag, &
800 fstrsolid%materials(cid)%variables_i, &
801 fstrsolid%materials(cid)%dict)/=0 )
then
802 write(*,*)
'### Error: Fail in read in spring_d definition : ' , cid
803 write(
ilog,*)
'### Error: Fail in read in spring_d definition : ', cid
807 else if( header_name ==
'!DASHPOT_A' )
then
808 if( c_material >0 )
then
810 fstrsolid%materials(cid)%mtype, &
811 fstrsolid%materials(cid)%nlgeom_flag, &
812 fstrsolid%materials(cid)%variables_i, &
813 fstrsolid%materials(cid)%dict)/=0 )
then
814 write(*,*)
'### Error: Fail in read in spring_a definition : ' , cid
815 write(
ilog,*)
'### Error: Fail in read in spring_a definition : ', cid
819 else if( header_name ==
'!USER_MATERIAL' )
then
822 fstrsolid%materials(cid)%nlgeom_flag, fstrsolid%materials(cid)%nfstatus, &
823 fstrsolid%materials(cid)%variables(101:) )/=0 )
then
824 write(*,*)
'### Error: Fail in read in user defined material : ' , cid
825 write(
ilog,*)
'### Error: Fail in read in user defined material : ', cid
832 else if( header_name ==
'!WRITE' )
then
834 if( islog == 1 )
then
836 outctrl%filename = trim(logfilename)
837 outctrl%filenum =
ilog
840 if( femap == 1 )
then
842 write( outctrl%filename,
'(a,i0,a)')
'utable.',
myrank,
'.dat'
843 outctrl%filenum =
iutb
845 open( unit=outctrl%filenum, file=outctrl%filename, status=
'REPLACE', iostat=ierror )
846 if( ierror /= 0 )
then
847 write(*,*)
'Warning: cannot open output file: ', trim(outctrl%filename)
849 fstrsolid%output_ctrl(c_output)%outinfo%grp_id = 1
851 if( result == 1 )
then
855 if( visual == 1 )
then
860 else if( header_name ==
'!OUTPUT_RES' )
then
863 write(*,*)
'### Error: Fail in read in node output definition : ' , c_output
864 write(
ilog,*)
'### Error: Fail in read in node output definition : ', c_output
867 if( fstrsolid%output_ctrl(c_output)%outinfo%grp_id_name /=
'ALL' )
then
869 do i=1,hecmesh%node_group%n_grp
870 if( fstrsolid%output_ctrl(c_output)%outinfo%grp_id_name == hecmesh%node_group%grp_name(i) )
then
871 fstrsolid%output_ctrl(c_output)%outinfo%grp_id = i;
exit
875 else if( header_name ==
'!OUTPUT_VIS' )
then
878 write(*,*)
'### Error: Fail in read in element output definition : ' , c_output
879 write(
ilog,*)
'### Error: Fail in read in element output definition : ', c_output
882 if( fstrsolid%output_ctrl(c_output)%outinfo%grp_id_name /=
'ALL' )
then
884 do i=1,hecmesh%node_group%n_grp
885 if( fstrsolid%output_ctrl(c_output)%outinfo%grp_id_name == hecmesh%node_group%grp_name(i) )
then
886 fstrsolid%output_ctrl(c_output)%outinfo%grp_id = i;
exit
890 else if( header_name ==
'!AUTOINC_PARAM' )
then
891 c_aincparam = c_aincparam + 1
893 write(*,*)
'### Error: Fail in read in AUTOINC_PARAM definition : ' , c_aincparam
894 write(
ilog,*)
'### Error: Fail in read in AUTOINC_PARAM definition : ', c_aincparam
897 else if( header_name ==
'!TIME_POINTS' )
then
898 c_timepoints = c_timepoints + 1
900 write(*,*)
'### Error: Fail in read in TIME_POINTS definition : ' , c_timepoints
901 write(
ilog,*)
'### Error: Fail in read in TIME_POINTS definition : ', c_timepoints
904 else if( header_name ==
'!CONTACT_PARAM' )
then
905 c_contactparam = c_contactparam + 1
907 write(*,*)
'### Error: Fail in read in CONTACT_PARAM definition : ' , c_contactparam
908 write(
ilog,*)
'### Error: Fail in read in CONTACT_PARAM definition : ', c_contactparam
911 else if( header_name ==
'!CONTACT_INTERFERENCE' )
then
914 write(*,*)
'### Error: Fail in read in CONTACT_INTERFERENCE definition : ' , c_contact_if
915 write(
ilog,*)
'### Error: Fail in read in CONTACT_INTERFERENCE definition : ', c_contact_if
919 if( check_apply_contact_if(fstrparam%contact_if(c_contact_if+i), fstrsolid%contacts) /= 0)
then
920 write(*,*)
'### Error:(INTERFERENCE) Inconsistence of contact_pair in CONTACTS: ' , i+c_contact_if
921 write(
ilog,*)
'### Error:(INTERFERENCE) Inconsistence of contact_pair in CONTACTS: ', i+c_contact_if
925 c_contact_if = c_contact_if + n
926 else if( header_name ==
'!ULOAD' )
then
928 write(*,*)
'### Error: Fail in read in ULOAD definition : '
929 write(
ilog,*)
'### Error: Fail in read in ULOAD definition : '
933 else if( header_name ==
'!INCLUDE' )
then
934 ctrl_list(ictrl) = ctrl
939 write(*,*)
'### Error: Cannot open FSTR control file : ', input_filename
940 write(
ilog,*)
'### Error: Cannot open FSTR control file : ', input_filename
946 else if( header_name ==
'!END' )
then
957 ctrl = ctrl_list(ictrl)
965 if( .not. p%PARAM%nlgeom )
then
967 fstrsolid%materials(i)%nlgeom_flag = 0
971 if( fstrsolid%TEMP_ngrp_tot > 0 .or. fstrsolid%TEMP_irres > 0 )
then
972 allocate ( fstrsolid%temperature( hecmesh%n_node ) ,stat=ierror )
973 if( ierror /= 0 )
then
974 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, TEMPERATURE>'
975 write(
idbg,*)
' rank = ',
myrank,
' ierror = ',ierror
977 call hecmw_abort( hecmw_comm_get_comm())
980 allocate ( fstrsolid%last_temp( hecmesh%n_node ) ,stat=ierror )
981 if( ierror /= 0 )
then
982 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, LAST_TEMP>'
983 write(
idbg,*)
' rank = ',
myrank,
' ierror = ',ierror
985 call hecmw_abort( hecmw_comm_get_comm())
987 fstrsolid%last_temp = 0.d0
988 allocate ( fstrsolid%temp_bak( hecmesh%n_node ) ,stat=ierror )
989 if( ierror /= 0 )
then
990 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, TEMP_BAK>'
991 write(
idbg,*)
' rank = ',
myrank,
' ierror = ',ierror
993 call hecmw_abort( hecmw_comm_get_comm())
995 fstrsolid%temp_bak = 0.d0
998 if(
associated(fstrsolid%step_ctrl) )
then
999 fstrsolid%nstep_tot =
size(fstrsolid%step_ctrl)
1003 if( p%PARAM%solution_type==
kststatic .and. p%PARAM%nlgeom )
then
1004 write( *,* )
" ERROR: STEP not defined!"
1005 write(
idbg,* )
"ERROR: STEP not defined!"
1007 call hecmw_abort( hecmw_comm_get_comm())
1010 if(
myrank==0 )
write(*,*)
"Step control not defined! Using default step=1"
1011 fstrsolid%nstep_tot = 1
1012 allocate( fstrsolid%step_ctrl(1) )
1015 fstrsolid%step_ctrl(1)%num_substep = fstrdynamic%n_step
1016 fstrsolid%step_ctrl(1)%initdt = fstrdynamic%t_delta
1017 fstrsolid%step_ctrl(1)%elapsetime = dble(fstrdynamic%n_step) * fstrdynamic%t_delta
1018 fstrsolid%step_ctrl(1)%mindt = fstrdynamic%t_delta
1019 fstrsolid%step_ctrl(1)%maxdt = fstrdynamic%t_delta
1021 n = fstrsolid%BOUNDARY_ngrp_tot
1022 if( n>0 )
allocate( fstrsolid%step_ctrl(1)%Boundary(n) )
1024 fstrsolid%step_ctrl(1)%Boundary(i) = fstrsolid%BOUNDARY_ngrp_GRPID(i)
1026 n = fstrsolid%CLOAD_ngrp_tot + fstrsolid%DLOAD_ngrp_tot + fstrsolid%TEMP_ngrp_tot + fstrsolid%SPRING_ngrp_tot
1027 if( n>0 )
allocate( fstrsolid%step_ctrl(1)%Load(n) )
1029 do i = 1, fstrsolid%CLOAD_ngrp_tot
1031 fstrsolid%step_ctrl(1)%Load(n) = fstrsolid%CLOAD_ngrp_GRPID(i)
1033 do i = 1, fstrsolid%DLOAD_ngrp_tot
1035 fstrsolid%step_ctrl(1)%Load(n) = fstrsolid%DLOAD_ngrp_GRPID(i)
1037 do i = 1, fstrsolid%TEMP_ngrp_tot
1039 fstrsolid%step_ctrl(1)%Load(n) = fstrsolid%TEMP_ngrp_GRPID(i)
1041 do i = 1, fstrsolid%SPRING_ngrp_tot
1043 fstrsolid%step_ctrl(1)%Load(n) = fstrsolid%SPRING_ngrp_GRPID(i)
1045 n = fstrsolid%elemact%ELEMACT_egrp_tot
1046 if( n>0 )
allocate( fstrsolid%step_ctrl(1)%ElemActivation(n) )
1048 fstrsolid%step_ctrl(1)%ElemActivation(i) = fstrsolid%elemact%ELEMACT_egrp_GRPID(i)
1057 if( p%PARAM%solution_type ==
kstheat)
then
1058 p%PARAM%fg_irres = fstrsolid%output_ctrl(3)%frequency
1059 p%PARAM%fg_iwres = fstrsolid%output_ctrl(4)%frequency
1060 p%HEAT%elemact = p%SOLID%elemact
1064 do i=1,hecmesh%section%n_sect
1065 cid = hecmesh%section%sect_mat_ID_item(i)
1066 n = fstrsolid%materials(cid)%totallyr
1067 if (n > n_totlyr)
then
1071 p%SOLID%max_lyr = n_totlyr
1082 type(hecmwst_local_mesh),
target :: hecMESH
1085 integer :: ndof, ntotal, ierror, ic_type
1089 fstrsolid%BOUNDARY_ngrp_tot = 0
1090 fstrsolid%BOUNDARY_ngrp_rot = 0
1091 fstrsolid%CLOAD_ngrp_tot = 0
1092 fstrsolid%CLOAD_ngrp_rot = 0
1093 fstrsolid%DLOAD_ngrp_tot = 0
1094 fstrsolid%DLOAD_follow = 1
1095 fstrsolid%TEMP_ngrp_tot = 0
1096 fstrsolid%SPRING_ngrp_tot = 0
1097 fstrsolid%TEMP_irres = 0
1098 fstrsolid%TEMP_tstep = 1
1099 fstrsolid%TEMP_interval = 1
1100 fstrsolid%TEMP_rtype = 1
1101 fstrsolid%TEMP_factor = 1.d0
1102 fstrsolid%VELOCITY_ngrp_tot = 0
1103 fstrsolid%ACCELERATION_ngrp_tot = 0
1104 fstrsolid%COUPLE_ngrp_tot = 0
1106 fstrsolid%restart_nout= 0
1107 fstrsolid%is_smoothing_active = .false.
1114 type(hecmwst_local_mesh),
target :: hecMESH
1117 integer :: ndof, ntotal, ierror, ic_type
1120 ntotal=ndof*hecmesh%n_node
1122 allocate ( fstrsolid%GL( ntotal ) ,stat=ierror )
1123 if( ierror /= 0 )
then
1124 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, GL>'
1125 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1127 call hecmw_abort( hecmw_comm_get_comm())
1129 allocate ( fstrsolid%GL0( ntotal ) ,stat=ierror )
1130 if( ierror /= 0 )
then
1131 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, GL0>'
1132 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1134 call hecmw_abort( hecmw_comm_get_comm())
1136 allocate ( fstrsolid%EFORCE( ntotal ) ,stat=ierror )
1137 if( ierror /= 0 )
then
1138 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, EFORCE>'
1139 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1141 call hecmw_abort( hecmw_comm_get_comm())
1150 allocate ( fstrsolid%unode( ntotal ) ,stat=ierror )
1151 if( ierror /= 0 )
then
1152 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, unode>'
1153 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1155 call hecmw_abort( hecmw_comm_get_comm())
1157 allocate ( fstrsolid%unode_bak( ntotal ) ,stat=ierror )
1158 if( ierror /= 0 )
then
1159 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, unode>'
1160 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1162 call hecmw_abort( hecmw_comm_get_comm())
1164 allocate ( fstrsolid%dunode( ntotal ) ,stat=ierror )
1165 if( ierror /= 0 )
then
1166 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, dunode>'
1167 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1169 call hecmw_abort( hecmw_comm_get_comm())
1171 allocate ( fstrsolid%ddunode( ntotal ) ,stat=ierror )
1172 if( ierror /= 0 )
then
1173 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, ddunode>'
1174 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1176 call hecmw_abort( hecmw_comm_get_comm())
1178 allocate ( fstrsolid%QFORCE( ntotal ) ,stat=ierror )
1179 if( ierror /= 0 )
then
1180 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, QFORCE>'
1181 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1183 call hecmw_abort( hecmw_comm_get_comm())
1185 allocate ( fstrsolid%DFORCE( ntotal ) ,stat=ierror )
1186 if( ierror /= 0 )
then
1187 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, DFORCE>'
1188 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1190 call hecmw_abort( hecmw_comm_get_comm())
1192 allocate ( fstrsolid%QFORCE_bak( ntotal ) ,stat=ierror )
1193 if( ierror /= 0 )
then
1194 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, QFORCE_bak>'
1195 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1197 call hecmw_abort( hecmw_comm_get_comm())
1200 fstrsolid%GL(:)=0.d0
1201 fstrsolid%GL0(:)=0.d0
1203 fstrsolid%unode(:) = 0.d0
1204 fstrsolid%unode_bak(:) = 0.d0
1205 fstrsolid%dunode(:) = 0.d0
1206 fstrsolid%ddunode(:) = 0.d0
1207 fstrsolid%QFORCE(:) = 0.d0
1208 fstrsolid%QFORCE_bak(:) = 0.d0
1209 fstrsolid%FACTOR( 1:2 ) = 0.d0
1212 fstrsolid%n_fix_mpc = hecmesh%mpc%n_mpc
1213 if( fstrsolid%n_fix_mpc>0 )
then
1214 allocate( fstrsolid%mpc_const( fstrsolid%n_fix_mpc ) )
1215 fstrsolid%mpc_const(:) = hecmesh%mpc%mpc_const(:)
1219 fstrsolid%FACTOR(2)=1.d0
1220 fstrsolid%FACTOR(1)=0.d0
1224 type(hecmwst_local_mesh),
target :: hecMESH
1227 logical,
allocatable :: is_selem_list(:)
1230 do isect=1,hecmesh%section%n_sect
1231 if( fstrsolid%sections(isect)%elemopt341 ==
kel341sesns ) fstrsolid%is_smoothing_active = .true.
1233 if( .not. fstrsolid%is_smoothing_active )
return
1235 allocate(is_selem_list(hecmesh%n_elem), stat=i)
1237 write(*,*)
'Allocation error: is_selem_list'
1240 is_selem_list(:) = .false.
1242 do i=1,hecmesh%n_elem
1243 isect= hecmesh%section_ID(i)
1244 if( hecmesh%elem_type(i) /= fe_tet4n ) cycle
1245 if( fstrsolid%sections(isect)%elemopt341 ==
kel341sesns ) is_selem_list(i) = .true.
1248 call hecmw_create_smoothing_element_connectivity(hecmesh,is_selem_list)
1250 deallocate(is_selem_list)
1256 type(hecmwst_local_mesh),
target :: hecMESH
1259 integer :: i, isect, nodlocal(fstrSOLID%max_ncon), iiS, nn, con_stf
1261 if( fstrsolid%max_ncon_stf > 20 ) fstrsolid%max_ncon_stf = 20
1263 do i=1,hecmesh%n_elem
1264 isect= hecmesh%section_ID(i)
1265 if( hecmesh%elem_type(i) /= fe_tet4n ) cycle
1266 if( fstrsolid%sections(isect)%elemopt341 /=
kel341sesns ) cycle
1267 iis = hecmesh%elem_node_index(i-1)
1268 nn = hecmesh%elem_node_index(i-1) - iis
1269 nodlocal(1:nn) = hecmesh%elem_node_item(iis+1:iis+nn)
1271 if( con_stf > fstrsolid%max_ncon_stf ) fstrsolid%max_ncon_stf = con_stf
1280 type(hecmwst_local_mesh),
target :: hecMESH
1282 integer(kind=kint),
intent(in) :: solution_type
1284 integer :: i, j, ng, isect, ndof, id, nn, n_elem
1287 if( hecmesh%n_elem <=0 )
then
1288 stop
"no element defined!"
1291 fstrsolid%maxn_gauss = 0
1292 fstrsolid%max_ncon = 0
1298 n_elem = hecmesh%elem_type_index(hecmesh%n_elem_type)
1299 allocate( fstrsolid%elements(n_elem) )
1302 fstrsolid%elements(i)%elemact_flag = kelact_undefined
1303 if( solution_type ==
kstheat) cycle
1305 fstrsolid%elements(i)%etype = hecmesh%elem_type(i)
1306 if( hecmesh%elem_type(i)==301 ) fstrsolid%elements(i)%etype=111
1307 if (hecmw_is_etype_link(fstrsolid%elements(i)%etype)) cycle
1308 if (hecmw_is_etype_patch(fstrsolid%elements(i)%etype)) cycle
1310 if( ng > fstrsolid%maxn_gauss ) fstrsolid%maxn_gauss = ng
1311 if(ng>0)
allocate( fstrsolid%elements(i)%gausses( ng ) )
1313 isect= hecmesh%section_ID(i)
1316 id=hecmesh%section%sect_opt(isect)
1318 fstrsolid%elements(i)%iset=1
1319 else if( id==1)
then
1320 fstrsolid%elements(i)%iset=0
1321 else if( id==2)
then
1322 fstrsolid%elements(i)%iset=2
1326 if( isect<0 .or. isect>hecmesh%section%n_sect ) &
1327 stop
"Error in element's section definition"
1328 id = hecmesh%section%sect_mat_ID_item(isect)
1329 fstrsolid%materials(id)%cdsys_ID = hecmesh%section%sect_orien_ID(isect)
1331 fstrsolid%elements(i)%gausses(j)%pMaterial => fstrsolid%materials(id)
1335 nn = hecmesh%elem_node_index(i)-hecmesh%elem_node_index(i-1)
1336 allocate(fstrsolid%elements(i)%equiForces(nn*ndof))
1337 fstrsolid%elements(i)%equiForces = 0.0d0
1338 if( nn > fstrsolid%max_ncon ) fstrsolid%max_ncon = nn
1340 if( hecmesh%elem_type(i)==361 )
then
1341 if( fstrsolid%sections(isect)%elemopt361==
kel361ic )
then
1342 allocate( fstrsolid%elements(i)%aux(3,3) )
1343 fstrsolid%elements(i)%aux = 0.0d0
1349 fstrsolid%max_ncon_stf = fstrsolid%max_ncon
1352 call hecmw_allreduce_i1(hecmesh,fstrsolid%maxn_gauss,hecmw_max)
1358 integer :: i, j, ierror
1359 if(
associated(fstrsolid%materials) )
then
1360 do j=1,
size(fstrsolid%materials)
1361 call finalizematerial(fstrsolid%materials(j))
1363 deallocate( fstrsolid%materials )
1365 if( .not.
associated(fstrsolid%elements ) )
return
1366 do i=1,
size(fstrsolid%elements)
1367 if(
associated(fstrsolid%elements(i)%gausses) )
then
1368 do j=1,
size(fstrsolid%elements(i)%gausses)
1369 call fstr_finalize_gauss(fstrsolid%elements(i)%gausses(j))
1371 deallocate( fstrsolid%elements(i)%gausses )
1373 if(
associated(fstrsolid%elements(i)%equiForces) )
then
1374 deallocate(fstrsolid%elements(i)%equiForces)
1376 if(
associated(fstrsolid%elements(i)%aux) )
then
1377 deallocate(fstrsolid%elements(i)%aux)
1381 deallocate( fstrsolid%elements )
1382 if(
associated( fstrsolid%mpc_const ) )
then
1383 deallocate( fstrsolid%mpc_const )
1386 if(
associated(fstrsolid%step_ctrl) )
then
1387 do i=1,
size(fstrsolid%step_ctrl)
1390 deallocate( fstrsolid%step_ctrl )
1392 if(
associated(fstrsolid%output_ctrl) )
then
1393 do i=1,
size(fstrsolid%output_ctrl)
1394 if( fstrsolid%output_ctrl(i)%filenum==
iutb ) &
1395 close(fstrsolid%output_ctrl(i)%filenum)
1397 deallocate(fstrsolid%output_ctrl)
1399 if(
associated( fstrsolid%sections ) )
then
1400 deallocate( fstrsolid%sections )
1403 if(
associated(fstrsolid%GL) )
then
1404 deallocate(fstrsolid%GL ,stat=ierror)
1405 if( ierror /= 0 )
then
1406 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, GL>'
1408 call hecmw_abort( hecmw_comm_get_comm())
1411 if(
associated(fstrsolid%EFORCE) )
then
1412 deallocate(fstrsolid%EFORCE ,stat=ierror)
1413 if( ierror /= 0 )
then
1414 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, EFORCE>'
1416 call hecmw_abort( hecmw_comm_get_comm())
1419 if(
associated(fstrsolid%unode) )
then
1420 deallocate(fstrsolid%unode ,stat=ierror)
1421 if( ierror /= 0 )
then
1422 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, unode>'
1424 call hecmw_abort( hecmw_comm_get_comm())
1427 if(
associated(fstrsolid%unode_bak) )
then
1428 deallocate(fstrsolid%unode_bak ,stat=ierror)
1429 if( ierror /= 0 )
then
1430 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, unode_bak>'
1432 call hecmw_abort( hecmw_comm_get_comm())
1435 if(
associated(fstrsolid%dunode) )
then
1436 deallocate(fstrsolid%dunode ,stat=ierror)
1437 if( ierror /= 0 )
then
1438 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, dunode>'
1440 call hecmw_abort( hecmw_comm_get_comm())
1443 if(
associated(fstrsolid%ddunode) )
then
1444 deallocate(fstrsolid%ddunode ,stat=ierror)
1445 if( ierror /= 0 )
then
1446 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, ddunode>'
1448 call hecmw_abort( hecmw_comm_get_comm())
1451 if(
associated(fstrsolid%QFORCE) )
then
1452 deallocate(fstrsolid%QFORCE ,stat=ierror)
1453 if( ierror /= 0 )
then
1454 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, QFORCE>'
1456 call hecmw_abort( hecmw_comm_get_comm())
1459 if(
associated(fstrsolid%DFORCE) )
then
1460 deallocate(fstrsolid%DFORCE ,stat=ierror)
1461 if( ierror /= 0 )
then
1462 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, DFORCE>'
1464 call hecmw_abort( hecmw_comm_get_comm())
1467 if(
associated(fstrsolid%temperature) )
then
1468 deallocate(fstrsolid%temperature ,stat=ierror)
1469 if( ierror /= 0 )
then
1470 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, temperature>'
1472 call hecmw_abort( hecmw_comm_get_comm())
1475 if(
associated(fstrsolid%last_temp) )
then
1476 deallocate(fstrsolid%last_temp ,stat=ierror)
1477 if( ierror /= 0 )
then
1478 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, reftemp>'
1480 call hecmw_abort( hecmw_comm_get_comm())
1483 if(
associated(fstrsolid%temp_bak) )
then
1484 deallocate(fstrsolid%temp_bak ,stat=ierror)
1485 if( ierror /= 0 )
then
1486 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, reftemp>'
1488 call hecmw_abort( hecmw_comm_get_comm())
1493 if(
associated(fstrsolid%BOUNDARY_ngrp_GRPID) )
then
1494 deallocate(fstrsolid%BOUNDARY_ngrp_GRPID, stat=ierror)
1495 if( ierror /= 0 )
then
1496 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, BOUNDARY_ngrp_GRPID>'
1498 call hecmw_abort( hecmw_comm_get_comm())
1501 if(
associated(fstrsolid%BOUNDARY_ngrp_ID) )
then
1502 deallocate(fstrsolid%BOUNDARY_ngrp_ID, stat=ierror)
1503 if( ierror /= 0 )
then
1504 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, BOUNDARY_ngrp_ID>'
1506 call hecmw_abort( hecmw_comm_get_comm())
1509 if(
associated(fstrsolid%BOUNDARY_ngrp_type) )
then
1510 deallocate(fstrsolid%BOUNDARY_ngrp_type, stat=ierror)
1511 if( ierror /= 0 )
then
1512 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, BOUNDARY_ngrp_type>'
1514 call hecmw_abort( hecmw_comm_get_comm())
1517 if(
associated(fstrsolid%BOUNDARY_ngrp_val) )
then
1518 deallocate(fstrsolid%BOUNDARY_ngrp_val, stat=ierror)
1519 if( ierror /= 0 )
then
1520 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, BOUNDARY_ngrp_val>'
1522 call hecmw_abort( hecmw_comm_get_comm())
1525 if(
associated(fstrsolid%BOUNDARY_ngrp_amp) )
then
1526 deallocate(fstrsolid%BOUNDARY_ngrp_amp, stat=ierror)
1527 if( ierror /= 0 )
then
1528 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, BOUNDARY_ngrp_amp>'
1530 call hecmw_abort( hecmw_comm_get_comm())
1533 if(
associated(fstrsolid%BOUNDARY_ngrp_istot) )
then
1534 deallocate(fstrsolid%BOUNDARY_ngrp_istot, stat=ierror)
1535 if( ierror /= 0 )
then
1536 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, BOUNDARY_ngrp_istot>'
1538 call hecmw_abort( hecmw_comm_get_comm())
1541 if(
associated(fstrsolid%BOUNDARY_ngrp_rotID) )
then
1542 deallocate(fstrsolid%BOUNDARY_ngrp_rotID, stat=ierror)
1543 if( ierror /= 0 )
then
1544 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, BOUNDARY_ngrp_rotID>'
1546 call hecmw_abort( hecmw_comm_get_comm())
1549 if(
associated(fstrsolid%BOUNDARY_ngrp_centerID) )
then
1550 deallocate(fstrsolid%BOUNDARY_ngrp_centerID, stat=ierror)
1551 if( ierror /= 0 )
then
1552 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, BOUNDARY_ngrp_centerID>'
1554 call hecmw_abort( hecmw_comm_get_comm())
1559 if(
associated(fstrsolid%CLOAD_ngrp_GRPID) )
then
1560 deallocate(fstrsolid%CLOAD_ngrp_GRPID, stat=ierror)
1561 if( ierror /= 0 )
then
1562 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, CLOAD_ngrp_GRPID>'
1564 call hecmw_abort( hecmw_comm_get_comm())
1567 if(
associated(fstrsolid%CLOAD_ngrp_ID) )
then
1568 deallocate(fstrsolid%CLOAD_ngrp_ID, stat=ierror)
1569 if( ierror /= 0 )
then
1570 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, CLOAD_ngrp_ID>'
1572 call hecmw_abort( hecmw_comm_get_comm())
1575 if(
associated(fstrsolid%CLOAD_ngrp_DOF) )
then
1576 deallocate(fstrsolid%CLOAD_ngrp_DOF, stat=ierror)
1577 if( ierror /= 0 )
then
1578 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, CLOAD_ngrp_DOF>'
1580 call hecmw_abort( hecmw_comm_get_comm())
1583 if(
associated(fstrsolid%CLOAD_ngrp_val) )
then
1584 deallocate(fstrsolid%CLOAD_ngrp_val, stat=ierror)
1585 if( ierror /= 0 )
then
1586 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, CLOAD_ngrp_val>'
1588 call hecmw_abort( hecmw_comm_get_comm())
1591 if(
associated(fstrsolid%CLOAD_ngrp_amp) )
then
1592 deallocate(fstrsolid%CLOAD_ngrp_amp, stat=ierror)
1593 if( ierror /= 0 )
then
1594 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, CLOAD_ngrp_amp>'
1596 call hecmw_abort( hecmw_comm_get_comm())
1599 if(
associated(fstrsolid%CLOAD_ngrp_rotID) )
then
1600 deallocate(fstrsolid%CLOAD_ngrp_rotID, stat=ierror)
1601 if( ierror /= 0 )
then
1602 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, CLOAD_ngrp_rotID>'
1604 call hecmw_abort( hecmw_comm_get_comm())
1607 if(
associated(fstrsolid%CLOAD_ngrp_centerID) )
then
1608 deallocate(fstrsolid%CLOAD_ngrp_centerID, stat=ierror)
1609 if( ierror /= 0 )
then
1610 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, CLOAD_ngrp_centerID>'
1612 call hecmw_abort( hecmw_comm_get_comm())
1623 fstrheat%STEPtot = 0
1624 fstrheat%MATERIALtot = 0
1625 fstrheat%AMPLITUDEtot= 0
1626 fstrheat%T_FIX_tot = 0
1627 fstrheat%Q_NOD_tot = 0
1628 fstrheat%Q_VOL_tot = 0
1629 fstrheat%Q_SUF_tot = 0
1630 fstrheat%R_SUF_tot = 0
1631 fstrheat%H_SUF_tot = 0
1633 fstrheat%beta = -1.0d0
1642 fstreig%maxiter = 60
1644 fstreig%sigma = 0.0d0
1645 fstreig%tolerance = 1.0d-6
1646 fstreig%totalmass = 0.0d0
1653 fstrdynamic%idx_eqa = 1
1654 fstrdynamic%idx_resp = 1
1655 fstrdynamic%n_step = 1
1656 fstrdynamic%t_start = 0.0
1657 fstrdynamic%t_curr = 0.0d0
1658 fstrdynamic%t_end = 1.0
1659 fstrdynamic%t_delta = 1.0
1660 fstrdynamic%gamma = 0.5
1661 fstrdynamic%beta = 0.25
1662 fstrdynamic%idx_mas = 1
1663 fstrdynamic%idx_dmp = 1
1664 fstrdynamic%ray_m = 0.0
1665 fstrdynamic%ray_k = 0.0
1666 fstrdynamic%restart_nout = 0
1667 fstrdynamic%nout = 100
1668 fstrdynamic%ngrp_monit = 0
1669 fstrdynamic%nout_monit = 1
1670 fstrdynamic%iout_list(1) = 0
1671 fstrdynamic%iout_list(2) = 0
1672 fstrdynamic%iout_list(3) = 0
1673 fstrdynamic%iout_list(4) = 0
1674 fstrdynamic%iout_list(5) = 0
1675 fstrdynamic%iout_list(6) = 0
1683 type(hecmwst_local_mesh),
target :: hecMESH
1686 integer :: ierror, ndof,nnod
1690 if(fstrdynamic%idx_eqa == 11)
then
1691 allocate( fstrdynamic%DISP(ndof*nnod,3) ,stat=ierror )
1692 if( ierror /= 0 )
then
1693 write(
idbg,*)
'stop due to allocation error <fstr_solve_LINEAR_DYNAMIC, DISP>'
1694 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1696 call hecmw_abort( hecmw_comm_get_comm())
1698 allocate( fstrdynamic%VEL (ndof*nnod,1) ,stat=ierror )
1699 if( ierror /= 0 )
then
1700 write(
idbg,*)
'stop due to allocation error <fstr_solve_LINEAR_DYNAMIC, VEL>'
1701 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1703 call hecmw_abort( hecmw_comm_get_comm())
1705 allocate( fstrdynamic%ACC (ndof*nnod,1) ,stat=ierror )
1706 if( ierror /= 0 )
then
1707 write(
idbg,*)
'stop due to allocation error <fstr_solve_LINEAR_DYNAMIC, ACC>'
1708 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1710 call hecmw_abort( hecmw_comm_get_comm())
1713 allocate( fstrdynamic%DISP(ndof*nnod,2) ,stat=ierror )
1714 if( ierror /= 0 )
then
1715 write(
idbg,*)
'stop due to allocation error <fstr_solve_LINEAR_DYNAMIC, DISP>'
1716 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1718 call hecmw_abort( hecmw_comm_get_comm())
1720 allocate( fstrdynamic%VEL (ndof*nnod,2) ,stat=ierror )
1721 if( ierror /= 0 )
then
1722 write(
idbg,*)
'stop due to allocation error <fstr_solve_LINEAR_DYNAMIC, VEL>'
1723 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1725 call hecmw_abort( hecmw_comm_get_comm())
1727 allocate( fstrdynamic%ACC (ndof*nnod,2) ,stat=ierror )
1728 if( ierror /= 0 )
then
1729 write(
idbg,*)
'stop due to allocation error <fstr_solve_LINEAR_DYNAMIC, ACC>'
1730 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1732 call hecmw_abort( hecmw_comm_get_comm())
1737 allocate( fstrdynamic%VEC1(ndof*nnod) ,stat=ierror )
1738 if( ierror /= 0 )
then
1739 write(
idbg,*)
'stop due to allocation error <fstr_solve_LINEAR_DYNAMIC, VEC1>'
1740 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1742 call hecmw_abort( hecmw_comm_get_comm())
1744 allocate( fstrdynamic%VEC2(ndof*nnod) ,stat=ierror )
1745 if( ierror /= 0 )
then
1746 write(
idbg,*)
'stop due to allocation error <fstr_solve_LINEAR_DYNAMIC, VEC2>'
1747 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1749 call hecmw_abort( hecmw_comm_get_comm())
1751 allocate( fstrdynamic%VEC3(ndof*nnod) ,stat=ierror )
1752 if( ierror /= 0 )
then
1753 write(
idbg,*)
'stop due to allocation error <fstr_solve_LINEAR_DYNAMIC, VEC3>'
1754 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1756 call hecmw_abort( hecmw_comm_get_comm())
1766 if(
associated(fstrdynamic%DISP) ) &
1767 deallocate( fstrdynamic%DISP ,stat=ierror )
1768 if( ierror /= 0 )
then
1769 write(
idbg,*)
'stop due to deallocation error <fstr_solve_LINEAR_DYNAMIC, DISP>'
1771 call hecmw_abort( hecmw_comm_get_comm())
1773 if(
associated(fstrdynamic%VEL) ) &
1774 deallocate( fstrdynamic%VEL ,stat=ierror )
1775 if( ierror /= 0 )
then
1776 write(
idbg,*)
'stop due to deallocation error <fstr_solve_LINEAR_DYNAMIC, VEL>'
1778 call hecmw_abort( hecmw_comm_get_comm())
1780 if(
associated(fstrdynamic%ACC) ) &
1781 deallocate( fstrdynamic%ACC ,stat=ierror )
1782 if( ierror /= 0 )
then
1783 write(
idbg,*)
'stop due to deallocation error <fstr_solve_LINEAR_DYNAMIC, ACC>'
1785 call hecmw_abort( hecmw_comm_get_comm())
1787 if(
associated(fstrdynamic%VEC1) ) &
1788 deallocate( fstrdynamic%VEC1 ,stat=ierror )
1789 if( ierror /= 0 )
then
1790 write(
idbg,*)
'stop due to deallocation error <fstr_solve_LINEAR_DYNAMIC, VEC1>'
1792 call hecmw_abort( hecmw_comm_get_comm())
1794 if(
associated(fstrdynamic%VEC2) ) &
1795 deallocate( fstrdynamic%VEC2 ,stat=ierror )
1796 if( ierror /= 0 )
then
1797 write(
idbg,*)
'stop due to deallocation error <fstr_solve_LINEAR_DYNAMIC, VEC2>'
1799 call hecmw_abort( hecmw_comm_get_comm())
1801 if(
associated(fstrdynamic%VEC3) ) &
1802 deallocate( fstrdynamic%VEC3 ,stat=ierror )
1803 if( ierror /= 0 )
then
1804 write(
idbg,*)
'stop due to deallocation error <fstr_solve_LINEAR_DYNAMIC, VEC3>'
1806 call hecmw_abort( hecmw_comm_get_comm())
1818 integer(kind=kint) :: NDOF, n_node, n_elem, mdof, istat
1819 mdof = (ndof*ndof+ndof)/2;
1820 allocate ( phys%STRAIN (mdof*n_node), stat=istat)
1821 if( istat /= 0 ) stop
"Allocation error: phys%STRAIN"
1822 allocate ( phys%STRESS (mdof*n_node), stat=istat)
1823 if( istat /= 0 ) stop
"Allocation error: phys%STRESS"
1824 allocate ( phys%MISES ( n_node), stat=istat)
1825 if( istat /= 0 ) stop
"Allocation error: phys%MISES"
1826 allocate ( phys%ESTRAIN (mdof*n_elem), stat=istat)
1827 if( istat /= 0 ) stop
"Allocation error: phys%ESTRAIN"
1828 allocate ( phys%ESTRESS (mdof*n_elem), stat=istat)
1829 if( istat /= 0 ) stop
"Allocation error: phys%ESTRESS"
1830 allocate ( phys%EMISES ( n_elem), stat=istat)
1831 if( istat /= 0 ) stop
"Allocation error: phys%EMISES"
1832 allocate ( phys%EPLSTRAIN ( n_elem), stat=istat)
1833 if( istat /= 0 ) stop
"Allocation error: phys%EPLSTRAIN"
1834 allocate ( phys%ENQM (12*n_elem), stat=istat)
1835 if( istat /= 0 ) stop
"Allocation error: phys%ENQM"
1840 integer(kind=kint) :: ctrl, i
1844 if( p%PARAM%solution_type ==
kststatic &
1845 .or. p%PARAM%solution_type ==
ksteigen &
1849 if( p%MESH%n_dof == 6 .or. p%SOLID%is_33shell == 1 )
then
1850 allocate ( p%SOLID%SHELL )
1852 allocate ( p%SOLID%SHELL%LAYER(p%SOLID%max_lyr) )
1853 do i=1,p%SOLID%max_lyr
1854 allocate ( p%SOLID%SHELL%LAYER(i)%PLUS )
1855 allocate ( p%SOLID%SHELL%LAYER(i)%MINUS )
1859 phys => p%SOLID%SHELL
1861 allocate ( p%SOLID%SOLID )
1862 phys => p%SOLID%SOLID
1865 p%SOLID%STRAIN => phys%STRAIN
1866 p%SOLID%STRESS => phys%STRESS
1867 p%SOLID%MISES => phys%MISES
1868 p%SOLID%ESTRAIN => phys%ESTRAIN
1869 p%SOLID%ESTRESS => phys%ESTRESS
1870 p%SOLID%EMISES => phys%EMISES
1871 p%SOLID%EPLSTRAIN => phys%EPLSTRAIN
1872 p%SOLID%ENQM => phys%ENQM
1873 allocate( p%SOLID%REACTION( p%MESH%n_dof*p%MESH%n_node ), stat=i )
1874 if( i /= 0 ) stop
"Allocation error: REACTION"
1877 if( p%PARAM%fg_visual ==
kon )
then
1881 call hecmw_barrier( p%MESH )
1883 if( p%HEAT%STEPtot == 0 )
then
1884 if( p%PARAM%analysis_n == 0 )
then
1891 p%PARAM%analysis_n = 1
1897 p%PARAM%eps = 1.0e-6
1904 p%HEAT%STEP_DLTIME = 0
1905 p%HEAT%STEP_EETIME = 0
1906 p%HEAT%STEP_DELMIN = 0
1907 p%HEAT%STEP_DELMAX = 0
1921 integer(kind=kint) :: ctrl
1922 integer(kind=kint) :: counter
1925 integer(kind=kint) :: rcode
1938 integer(kind=kint) :: ctrl
1939 integer(kind=kint) :: counter
1942 integer(kind=kint) :: rcode
1955 integer(kind=kint) :: ctrl
1956 integer(kind=kint) :: counter
1959 integer(kind=kint) :: rcode
1961 if( counter >= 2 )
then
1962 write(
ilog,*)
'### Error : !SOLVER exists twice in FSTR control file.'
2017 integer(kind=kint) :: ctrl
2018 type( hecmwst_local_mesh ) :: hecmesh
2020 type( tlocalcoordsys ) :: coordsys
2022 integer :: j, is, ie, grp_id(1)
2023 character(len=HECMW_NAME_LEN) :: grp_id_name(1)
2025 integer :: nid, dtype
2026 character(len=HECMW_NAME_LEN) :: data_fmt
2027 real(kind=kreal) :: fdum, xyza(3), xyzb(3), xyzc(3), ff1(3), ff2(3), ff3(3)
2032 coordsys%sys_type = 10
2035 data_fmt =
'COORDINATES,NODES '
2038 coordsys%sys_type = coordsys%sys_type + dtype
2041 coordsys%sys_name = grp_id_name(1)
2045 data_fmt =
"RRRRRRrrr "
2048 xyza(3), xyzb(1), xyzb(2), xyzb(3), xyzc(1), xyzc(2), xyzc(3) )/=0 )
return
2049 if( coordsys%sys_type==10 )
then
2051 fdum = dsqrt( dot_product(ff1, ff1) )
2052 if( fdum==0.d0 )
return
2056 coordsys%CoordSys(1,:) = ff1
2058 fdum = dsqrt( dot_product(ff3, ff3) )
2059 if( fdum==0.d0 )
return
2060 coordsys%CoordSys(3,:) = ff3/fdum
2062 call cross_product(coordsys%CoordSys(3,:), coordsys%CoordSys(1,:), coordsys%CoordSys(2,:) )
2064 coordsys%CoordSys(1,:) = xyza
2065 coordsys%CoordSys(2,:) = xyzb
2069 coordsys%node_ID(3) = 0
2072 coordsys%node_ID(2), coordsys%node_ID(3) )/=0 )
return
2073 if( coordsys%node_ID(3) == 0 )
then
2075 if( nid/=0 .and. nid/=2 )
then
2076 write(*,*)
"We cannot define coordinate system using nodes in other CPU!"
2077 write(
idbg,*)
"We cannot define coordinate system using nodes in other CPU!"
2082 if( nid/=0 .and. nid/=3 )
then
2083 write(*,*)
"We cannot define coordinate system using nodes in other CPU!"
2084 write(
idbg,*)
"We cannot define coordinate system using nodes in other CPU!"
2100 integer(kind=kint) :: ctrl
2101 integer(kind=kint) :: counter
2103 character(HECMW_NAME_LEN) :: amp
2104 integer(kind=kint) :: amp_id
2106 integer(kind=kint) :: rcode, iproc
2118 integer(kind=kint) :: ctrl
2120 type(hecmwst_local_mesh) :: hecmesh
2121 integer,
pointer :: grp_id(:), dof(:)
2122 real(kind=kreal),
pointer :: temp(:)
2123 character(len=HECMW_NAME_LEN),
pointer :: grp_id_name(:)
2124 character(len=HECMW_NAME_LEN) :: data_fmt, ss
2125 integer :: i,j,n, is, ie, gid, nid, rcode
2129 ss =
'TEMPERATURE,VELOCITY,ACCELERATION '
2132 cond%cond_name =
"temperature"
2133 allocate( cond%intval(hecmesh%n_node) )
2134 allocate( cond%realval(hecmesh%n_node) )
2135 elseif( nid==2 )
then
2136 cond%cond_name =
"velocity"
2137 allocate( cond%intval(hecmesh%n_node) )
2138 allocate( cond%realval(hecmesh%n_node) )
2139 elseif( nid==3 )
then
2140 cond%cond_name =
"acceleration"
2141 allocate( cond%intval(hecmesh%n_node) )
2142 allocate( cond%realval(hecmesh%n_node) )
2152 allocate( temp(n), grp_id_name(n), grp_id(n), dof(n) )
2154 write(ss,*) hecmw_name_len
2156 write(data_fmt,
'(a,a,a)')
'S',trim(adjustl(ss)),
'R '
2160 write(data_fmt,
'(a,a,a)')
'S',trim(adjustl(ss)),
'IR '
2166 if(
associated(grp_id) )
deallocate( grp_id )
2167 if(
associated(temp) )
deallocate( temp )
2168 if(
associated(dof) )
deallocate( dof )
2169 if(
associated(grp_id_name) )
deallocate( grp_id_name )
2176 is = hecmesh%node_group%grp_index(gid-1) + 1
2177 ie = hecmesh%node_group%grp_index(gid )
2179 nid = hecmesh%node_group%grp_item(j)
2180 cond%realval(nid) = temp(i)
2181 cond%intval(nid) = dof(i)
2185 if(
associated(grp_id) )
deallocate( grp_id )
2186 if(
associated(temp) )
deallocate( temp )
2187 if(
associated(dof) )
deallocate( dof )
2188 if(
associated(grp_id_name) )
deallocate( grp_id_name )
2197 integer(kind=kint) :: ctrl
2198 integer(kind=kint) :: counter
2200 integer(kind=kint) :: res, visual, neutral
2202 integer(kind=kint) :: rcode
2206 if( res == 1 ) p%PARAM%fg_result = 1
2207 if( visual == 1 ) p%PARAM%fg_visual = 1
2208 if( neutral == 1 ) p%PARAM%fg_neutral = 1
2218 integer(kind=kint) :: ctrl
2219 integer(kind=kint) :: counter
2222 integer(kind=kint) :: rcode
2236 integer(kind=kint) :: ctrl
2237 integer(kind=kint) :: nout
2238 integer(kind=kint) :: version
2240 integer(kind=kint) :: rcode
2256 integer(kind=kint) :: ctrl
2257 integer(kind=kint) :: counter
2259 integer(kind=kint) :: rcode
2260 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
2261 integer(kind=kint) :: i, n, old_size, new_size
2263 if( p%SOLID%file_type /=
kbcffstr )
return
2267 old_size = p%SOLID%COUPLE_ngrp_tot
2268 new_size = old_size + n
2269 p%SOLID%COUPLE_ngrp_tot = new_size
2273 allocate( grp_id_name(n))
2275 p%PARAM%fg_couple_type, &
2276 p%PARAM%fg_couple_first, &
2277 p%PARAM%fg_couple_window, &
2278 grp_id_name, hecmw_name_len )
2282 n, grp_id_name, p%SOLID%COUPLE_ngrp_ID(old_size+1:))
2284 deallocate( grp_id_name )
2285 p%PARAM%fg_couple = 1
2295 integer(kind=kint) :: ctrl
2297 real(kind=kreal),
pointer :: val(:), table(:)
2298 character(len=HECMW_NAME_LEN) :: name
2299 integer :: nline, n, type_def, type_time, type_val, rcode
2302 if( nline<=0 )
return
2303 allocate( val(nline*4) )
2304 allocate( table(nline*4) )
2311 if(
associated(val) )
deallocate( val )
2312 if(
associated(table) )
deallocate( table )
2319 integer(kind=kint) :: ctrl
2320 integer(kind=kint) :: counter
2323 integer(kind=kint) :: rcode
2324 character(HECMW_NAME_LEN) :: amp
2325 integer(kind=kint) :: amp_id
2326 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
2327 integer(kind=kint) :: i, n, old_size, new_size
2328 integer(kind=kint) :: gid, mode, measure, state
2329 real(kind=kreal) ::
eps
2330 real(kind=kreal),
pointer :: thlow(:), thup(:)
2337 old_size = p%SOLID%elemact%ELEMACT_egrp_tot
2338 new_size = old_size + n
2339 p%SOLID%elemact%ELEMACT_egrp_tot = new_size
2350 allocate( grp_id_name(n), thlow(n), thup(n) )
2356 call amp_name_to_id( p%MESH,
'!ELEMENT_ACTIVATION', amp, amp_id )
2358 p%SOLID%elemact%ELEMACT_egrp_amp(old_size+i) = amp_id
2359 p%SOLID%elemact%ELEMACT_egrp_eps(old_size+i) =
eps
2361 p%SOLID%elemact%ELEMACT_egrp_GRPID(old_size+1:new_size) = gid
2362 p%SOLID%elemact%ELEMACT_egrp_depends(old_size+1:new_size) = measure
2363 p%SOLID%elemact%ELEMACT_egrp_ts_lower(old_size+1:new_size) = thlow(1:n)
2364 p%SOLID%elemact%ELEMACT_egrp_ts_upper(old_size+1:new_size) = thup(1:n)
2365 p%SOLID%elemact%ELEMACT_egrp_state(old_size+1:new_size) = state
2367 call elem_grp_name_to_id_ex( p%MESH,
'!ELEMENT_ACTIVATION', n, grp_id_name, p%SOLID%elemact%ELEMACT_egrp_ID(old_size+1:))
2369 deallocate( grp_id_name )
2383 integer(kind=kint) :: ctrl
2384 integer(kind=kint) :: counter
2386 integer(kind=kint) :: rcode
2388 integer :: nout, nout_monit,node_monit_1 ,elem_monit_1 ,intg_monit_1
2389 integer :: ipt, idx_elpl, iout_list(6)
2390 real(kind=kreal) :: sig_y0, h_dash
2392 if( counter > 1 )
then
2399 if( ipt == 2 ) p%PARAM%nlgeom = .true.
2403 write(*,*)
"Warning : !STATIC : parameter 'TYPE=INFINITE' is deprecated." &
2404 & //
" Please use the replacement parameter 'TYPE=INFINITESIMAL'"
2412 nout, nout_monit, node_monit_1, &
2413 elem_monit_1, intg_monit_1 )
2426 integer(kind=kint) :: ctrl
2427 integer(kind=kint) :: counter
2430 integer(kind=kint) :: rcode
2431 integer(kind=kint) ::
type = 0
2432 character(HECMW_NAME_LEN) :: amp, rotc_name(1)
2433 integer(kind=kint) :: amp_id, rotc_id(1), n_rotc
2434 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
2435 integer(kind=kint),
pointer :: dof_ids (:)
2436 integer(kind=kint),
pointer :: dof_ide (:)
2437 real(kind=kreal),
pointer :: val_ptr(:)
2438 integer(kind=kint) :: i, n, old_size, new_size
2440 integer(kind=kint) :: gid, istot
2460 if( rotc_name(1) /=
' ' )
then
2461 if( istot /= 0 )
then
2462 write(*,*)
'fstr control file error : !BOUNDARY : rotational boundary cannot be specified with total value'
2463 write(
ilog,*)
'fstr control file error : !BOUNDARY : rotational boundary cannot be specified with total value'
2466 p%SOLID%BOUNDARY_ngrp_rot = p%SOLID%BOUNDARY_ngrp_rot + 1
2467 n_rotc = p%SOLID%BOUNDARY_ngrp_rot
2477 old_size = p%SOLID%BOUNDARY_ngrp_tot
2478 new_size = old_size + n
2479 p%SOLID%BOUNDARY_ngrp_tot = new_size
2489 allocate( grp_id_name(n) )
2490 allocate( dof_ids(n) )
2491 allocate( dof_ide(n) )
2492 allocate( val_ptr(n) )
2499 p%SOLID%BOUNDARY_ngrp_GRPID(old_size+1:new_size) = gid
2501 p%SOLID%BOUNDARY_ngrp_istot(old_size+1:new_size) = istot
2504 p%SOLID%BOUNDARY_ngrp_rotID(old_size+1:) = n_rotc
2505 p%SOLID%BOUNDARY_ngrp_centerID(old_size+1:) = rotc_id(1)
2508 if( (dof_ids(i) < 1).or.(6 < dof_ids(i)).or.(dof_ide(i) < 1).or.(6 < dof_ide(i)) )
then
2509 write(*,*)
'fstr control file error : !BOUNDARY : range of dof_ids and dof_ide is from 1 to 6'
2510 write(
ilog,*)
'fstr control file error : !BOUNDARY : range of dof_ids and dof_ide is from 1 to 6'
2513 p%SOLID%BOUNDARY_ngrp_val(old_size+i) = val_ptr(i)
2514 p%SOLID%BOUNDARY_ngrp_type(old_size+i) = 10 * dof_ids(i) + dof_ide(i)
2515 p%SOLID%BOUNDARY_ngrp_amp(old_size+i) = amp_id
2518 deallocate( grp_id_name )
2519 deallocate( dof_ids )
2520 deallocate( dof_ide )
2521 deallocate( val_ptr )
2522 nullify( grp_id_name )
2542 integer(kind=kint) :: ctrl
2543 integer(kind=kint) :: counter
2546 integer(kind=kint) :: rcode
2547 character(HECMW_NAME_LEN) :: amp, rotc_name(1)
2548 integer(kind=kint) :: amp_id, rotc_id(1), n_rotc
2549 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
2550 real(kind=kreal),
pointer :: val_ptr(:)
2551 integer(kind=kint),
pointer :: id_ptr(:)
2552 integer(kind=kint) :: i, n, old_size, new_size
2553 integer(kind=kint) :: gid
2555 if( p%SOLID%file_type /=
kbcffstr )
return
2566 if( rotc_name(1) /=
' ' )
then
2567 p%SOLID%CLOAD_ngrp_rot = p%SOLID%CLOAD_ngrp_rot + 1
2568 n_rotc = p%SOLID%CLOAD_ngrp_rot
2574 old_size = p%SOLID%CLOAD_ngrp_tot
2575 new_size = old_size + n
2576 p%SOLID%CLOAD_ngrp_tot = new_size
2587 allocate( grp_id_name(n))
2588 allocate( id_ptr(n) )
2589 allocate( val_ptr(n) )
2597 p%SOLID%CLOAD_ngrp_rotID(old_size+1:) = n_rotc
2598 p%SOLID%CLOAD_ngrp_centerID(old_size+1:) = rotc_id(1)
2602 p%SOLID%CLOAD_ngrp_amp(old_size+i) = amp_id
2603 p%SOLID%CLOAD_ngrp_DOF(old_size+i) = id_ptr(i)
2604 p%SOLID%CLOAD_ngrp_val(old_size+i) = val_ptr(i)
2606 p%SOLID%CLOAD_ngrp_GRPID(old_size+1:new_size) = gid
2609 deallocate( grp_id_name )
2610 deallocate( id_ptr )
2611 deallocate( val_ptr )
2612 nullify( grp_id_name )
2616 if( p%MESH%n_refine > 0 )
then
2618 if( hecmw_ngrp_get_number(p%MESH, p%SOLID%CLOAD_NGRP_ID(old_size+i)) > 1 )
then
2619 write(*,*)
'fstr control file error : !CLOAD : cannot be used with NGRP when mesh is refined'
2620 write(
ilog,*)
'fstr control file error : !CLOAD : cannot be used with NGRP when mesh is refined'
2633 integer(kind=kint) :: ctrl
2634 integer(kind=kint) :: counter
2637 integer(kind=kint) :: rcode
2638 character(HECMW_NAME_LEN) :: amp
2639 integer(kind=kint) :: amp_id
2640 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
2641 real(kind=kreal),
pointer :: val_ptr(:)
2642 integer(kind=kint),
pointer :: id_ptr(:)
2643 integer(kind=kint) :: i, n, old_size, new_size
2644 integer(kind=kint) :: gid, loadcase
2647 if( p%SOLID%file_type /=
kbcffstr)
return
2661 old_size = p%FREQ%FLOAD_ngrp_tot
2662 new_size = old_size + n
2665 p%FREQ%FLOAD_ngrp_tot = new_size
2674 allocate( grp_id_name(n) )
2675 allocate( id_ptr(n) )
2676 allocate( val_ptr(n) )
2683 p%FREQ%FLOAD_ngrp_DOF(old_size+i) = id_ptr(i)
2684 p%FREQ%FLOAD_ngrp_valre(old_size+i) = val_ptr(i)
2688 p%FREQ%FLOAD_ngrp_DOF(old_size+i) = id_ptr(i)
2689 p%FREQ%FLOAD_ngrp_valim(old_size+i) = val_ptr(i)
2693 write(*,*)
"Error this load set is not defined!"
2694 write(
ilog,*)
"Error this load set is not defined!"
2697 p%FREQ%FLOAD_ngrp_GRPID(old_size+1:new_size) = gid
2699 p%FREQ%FLOAD_ngrp_ID(old_size+1:), p%FREQ%FLOAD_ngrp_TYPE(old_size+1:))
2701 deallocate( grp_id_name )
2702 deallocate( id_ptr )
2703 deallocate( val_ptr )
2704 nullify( grp_id_name )
2712 integer(kind=kint) :: ctrl
2713 character(len=HECMW_NAME_LEN) :: node_id(:)
2714 integer(kind=kint),
pointer :: dof_id(:)
2715 integer(kind=kint) :: node_id_len
2716 real(kind=kreal),
pointer :: value(:)
2718 character(len=HECMW_NAME_LEN) :: data_fmt, ss
2720 write(ss,*) node_id_len
2721 write(data_fmt,
'(a,a,a)')
'S', trim(adjustl(ss)),
'IR '
2733 integer(kind=kint) :: ctrl
2734 integer(kind=kint) :: counter
2737 integer(kind=kint) :: filename_len
2738 character(len=HECMW_NAME_LEN) :: datafmt, ss
2741 filename_len = hecmw_filename_len
2742 write(ss,*) filename_len
2743 write(datafmt,
'(a,a,a)')
'S', trim(adjustl(ss)),
' '
2758 real(kind=kreal),
pointer :: array(:,:)
2759 integer(kind=kint) :: old_size, new_size, i, j
2760 real(kind=kreal),
pointer :: temp(:,:)
2762 if( old_size >= new_size )
then
2766 if(
associated( array ) )
then
2767 allocate(temp(0:6, old_size))
2770 allocate(array(0:6, new_size))
2774 array(j,i) = temp(j,i)
2779 allocate(array(0:6, new_size))
2787 integer(kind=kint) :: ctrl
2788 integer(kind=kint) :: counter
2791 integer(kind=kint) :: rcode
2792 character(HECMW_NAME_LEN) :: amp
2793 integer(kind=kint) :: amp_id
2794 integer(kind=kint) :: follow
2795 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
2796 real(kind=kreal),
pointer :: new_params(:,:)
2797 logical,
pointer :: fg_surface(:)
2798 integer(kind=kint),
pointer :: lid_ptr(:)
2799 integer(kind=kint) :: i, j, n, old_size, new_size
2800 integer(kind=kint) :: gid
2802 if( p%SOLID%file_type /=
kbcffstr )
return
2809 old_size = p%SOLID%DLOAD_ngrp_tot
2810 new_size = old_size + n
2811 p%SOLID%DLOAD_ngrp_tot = new_size
2820 allocate( grp_id_name(n))
2821 allocate( lid_ptr(n) )
2822 allocate( new_params(0:6,n))
2823 allocate( fg_surface(n))
2826 follow = p%SOLID%DLOAD_follow
2827 if( .not. p%PARAM%nlgeom ) follow = 0
2829 grp_id_name, hecmw_name_len, &
2830 lid_ptr, new_params )
2833 p%SOLID%DLOAD_follow = follow
2835 p%SOLID%DLOAD_ngrp_amp(old_size+i) = amp_id
2836 p%SOLID%DLOAD_ngrp_LID(old_size+i) = lid_ptr(i)
2838 p%SOLID%DLOAD_ngrp_params(j,old_size+i) = new_params(j,i)
2840 fg_surface(i) = ( lid_ptr(i) == 100 )
2842 p%SOLID%DLOAD_ngrp_GRPID(old_size+1:new_size) = gid
2844 deallocate( grp_id_name )
2845 deallocate( lid_ptr )
2846 deallocate( new_params )
2847 deallocate( fg_surface )
2848 nullify( grp_id_name )
2850 nullify( new_params )
2851 nullify( fg_surface )
2861 integer(kind=kint) :: ctrl
2862 integer(kind=kint) :: counter
2865 integer(kind=kint) :: rcode, gid
2866 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
2867 real(kind=kreal),
pointer :: val_ptr(:)
2868 integer(kind=kint) :: i, n, old_size, new_size
2870 if( p%SOLID%file_type /=
kbcffstr )
return
2876 old_size = p%SOLID%TEMP_ngrp_tot
2878 new_size = old_size + n
2880 new_size = old_size + 1
2886 allocate( grp_id_name(n))
2887 allocate( val_ptr(n) )
2891 p%SOLID%TEMP_irres, &
2892 p%SOLID%TEMP_tstep, &
2893 p%SOLID%TEMP_interval, &
2894 p%SOLID%TEMP_rtype, &
2895 grp_id_name, hecmw_name_len, &
2899 p%SOLID%TEMP_ngrp_val(old_size+i) = val_ptr(i)
2901 deallocate( val_ptr )
2904 p%SOLID%TEMP_ngrp_GRPID(old_size+1:new_size) = gid
2906 if( p%SOLID%TEMP_irres == 0 )
then
2907 p%SOLID%TEMP_ngrp_tot = new_size
2909 n, grp_id_name, p%SOLID%TEMP_ngrp_ID(old_size+1:))
2911 deallocate( grp_id_name )
2923 integer(kind=kint) :: ctrl
2924 integer(kind=kint) :: counter
2927 integer(kind=kint) :: rcode
2928 character(HECMW_NAME_LEN) :: amp
2929 integer(kind=kint) :: amp_id
2930 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
2931 real(kind=kreal),
pointer :: val_ptr(:)
2932 integer(kind=kint),
pointer :: id_ptr(:)
2933 integer(kind=kint) :: i, n, old_size, new_size
2934 integer(kind=kint) :: gid
2936 if( p%SOLID%file_type /=
kbcffstr )
return
2941 old_size = p%SOLID%SPRING_ngrp_tot
2942 new_size = old_size + n
2943 p%SOLID%SPRING_ngrp_tot = new_size
2950 allocate( grp_id_name(n))
2951 allocate( id_ptr(n) )
2952 allocate( val_ptr(n) )
2961 p%SOLID%SPRING_ngrp_amp(old_size+i) = amp_id
2962 p%SOLID%SPRING_ngrp_DOF(old_size+i) = id_ptr(i)
2963 p%SOLID%SPRING_ngrp_val(old_size+i) = val_ptr(i)
2965 p%SOLID%SPRING_ngrp_GRPID(old_size+1:new_size) = gid
2968 deallocate( grp_id_name )
2969 deallocate( id_ptr )
2970 deallocate( val_ptr )
2971 nullify( grp_id_name )
2984 integer(kind=kint) :: ctrl
2985 integer(kind=kint) :: counter
2988 integer(kind=kint) :: rcode
3006 integer(kind=kint) :: ctrl
3007 integer(kind=kint) :: counter
3010 integer(kind=kint) :: rcode
3011 integer(kind=kint) :: n
3012 character(len=HECMW_NAME_LEN) :: mName
3013 integer(kind=kint) :: i
3025 p%PARAM%analysis_n = n
3032 p%PARAM%eps = 1.0e-6
3033 p%PARAM%timepoint_id = 0
3044 if( rcode /= 0 )
then
3048 if(
associated(p%PARAM%timepoints) )
then
3049 do i=1,
size(p%PARAM%timepoints)
3050 if(
fstr_streqr( p%PARAM%timepoints(i)%name, mname ) )
then
3051 p%PARAM%timepoint_id = i;
exit
3062 p%HEAT%STEP_DLTIME = p%PARAM%dtime
3063 p%HEAT%STEP_EETIME = p%PARAM%etime
3064 p%HEAT%STEP_DELMIN = p%PARAM%dtmin
3065 p%HEAT%STEP_DELMAX = p%PARAM%delmax
3066 p%HEAT%timepoint_id = p%PARAM%timepoint_id
3076 integer(kind=kint) :: ctrl
3077 integer(kind=kint) :: counter
3080 integer(kind=kint) :: rcode
3081 character(HECMW_NAME_LEN) :: amp
3082 integer(kind=kint) :: amp_id
3083 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
3084 real(kind=kreal),
pointer :: value(:)
3085 integer(kind=kint) :: i, j, n, m, head, id, member_n, old_size, new_size
3086 integer(kind=kint),
pointer :: member(:)
3087 integer(kind=kint) :: local_id, rtc
3093 allocate( grp_id_name(n))
3098 grp_id_name, hecmw_name_len,
value )
3109 else if( rtc < 0 )
then
3115 deallocate( grp_id_name )
3121 old_size = p%HEAT%T_FIX_tot
3122 new_size = old_size + m
3126 p%HEAT%T_FIX_tot = new_size
3129 member => p%HEAT%T_FIX_node(head:)
3135 member(1) = local_id
3137 else if( rtc < 0 )
then
3138 member_n =
get_grp_member( p%MESH,
'node_grp', grp_id_name(i), member )
3143 member => member( member_n+1 : )
3146 p%HEAT%T_FIX_val (id) = value(i)
3147 p%HEAT%T_FIX_ampl (id) = amp_id
3152 deallocate( grp_id_name )
3163 integer(kind=kint) :: ctrl
3164 integer(kind=kint) :: counter
3167 integer(kind=kint) :: rcode
3168 character(HECMW_NAME_LEN) :: amp
3169 integer(kind=kint) :: amp_id
3170 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
3171 real(kind=kreal),
pointer :: value(:)
3172 integer(kind=kint) :: i, j, n, m, head, id, member_n, old_size, new_size
3173 integer(kind=kint),
pointer :: member(:)
3174 integer(kind=kint) :: local_id, rtc
3180 allocate( grp_id_name(n))
3185 grp_id_name, hecmw_name_len,
value )
3196 else if( rtc < 0 )
then
3202 deallocate( grp_id_name )
3208 old_size = p%HEAT%Q_NOD_tot
3209 new_size = old_size + m
3213 p%HEAT%Q_NOD_tot = new_size
3216 member => p%HEAT%Q_NOD_node(head:)
3221 member(1) = local_id
3223 else if( rtc < 0 )
then
3224 member_n =
get_grp_member( p%MESH,
'node_grp', grp_id_name(i), member )
3228 if( i<n ) member => member( member_n+1 : )
3230 p%HEAT%Q_NOD_val (id) = value(i)
3231 p%HEAT%Q_NOD_ampl (id) = amp_id
3236 deallocate( grp_id_name )
3248 integer(kind=kint) :: ctrl
3249 integer(kind=kint) :: counter
3252 integer(kind=kint) :: rcode
3253 character(HECMW_NAME_LEN) :: amp
3254 integer(kind=kint) :: amp_id
3255 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
3256 integer(kind=kint),
pointer :: load_type(:)
3257 real(kind=kreal),
pointer :: value(:)
3258 integer(kind=kint) :: i, j, n, m, head, id, member_n, old_size, new_size
3259 integer(kind=kint),
pointer :: member(:)
3260 integer(kind=kint) :: local_id, rtc
3266 allocate( grp_id_name(n))
3267 allocate( load_type(n))
3272 grp_id_name, hecmw_name_len, load_type,
value )
3282 else if( rtc < 0 )
then
3288 deallocate( grp_id_name )
3289 deallocate( load_type )
3295 old_size = p%HEAT%Q_SUF_tot
3296 new_size = old_size + m
3301 p%HEAT%Q_SUF_tot = new_size
3304 member => p%HEAT%Q_SUF_elem(head:)
3309 member(1) = local_id
3311 else if( rtc < 0 )
then
3312 member_n =
get_grp_member( p%MESH,
'elem_grp', grp_id_name(i), member )
3316 if( i<n ) member => member( member_n+1 : )
3318 p%HEAT%Q_SUF_surf (id) = load_type(i)
3319 p%HEAT%Q_SUF_val (id) = value(i)
3320 p%HEAT%Q_SUF_ampl (id) = amp_id
3325 deallocate( grp_id_name )
3326 deallocate( load_type )
3338 integer(kind=kint) :: ctrl
3339 integer(kind=kint) :: counter
3342 integer(kind=kint) :: rcode
3343 character(HECMW_NAME_LEN) :: amp
3344 integer(kind=kint) :: amp_id
3345 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
3346 real(kind=kreal),
pointer :: value(:)
3347 integer(kind=kint) :: i, j, n, m, head, id, member_n, old_size, new_size
3348 integer(kind=kint),
pointer :: member1(:), member2(:)
3354 allocate( grp_id_name(n))
3359 grp_id_name, hecmw_name_len,
value )
3370 deallocate( grp_id_name )
3376 old_size = p%HEAT%Q_SUF_tot
3377 new_size = old_size + m
3382 p%HEAT%Q_SUF_tot = new_size
3385 member1 => p%HEAT%Q_SUF_elem(head:)
3386 member2 => p%HEAT%Q_SUF_surf(head:)
3389 member_n =
get_grp_member( p%MESH,
'surf_grp', grp_id_name(i), member1, member2 )
3391 member1 => member1( member_n+1 : )
3392 member2 => member2( member_n+1 : )
3395 p%HEAT%Q_SUF_val (id) = value(i)
3396 p%HEAT%Q_SUF_ampl (id) = amp_id
3401 deallocate( grp_id_name )
3413 integer(kind=kint) :: ctrl
3414 integer(kind=kint) :: counter
3417 integer(kind=kint) :: rcode
3418 character(HECMW_NAME_LEN) :: amp1, amp2
3419 integer(kind=kint) :: amp_id1, amp_id2
3420 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
3421 integer(kind=kint),
pointer :: load_type(:)
3422 real(kind=kreal),
pointer :: value(:)
3423 real(kind=kreal),
pointer :: shink(:)
3424 integer(kind=kint) :: i, j, n, m, head, id, member_n, old_size, new_size
3425 integer(kind=kint),
pointer :: member(:)
3426 integer(kind=kint) :: local_id, rtc
3432 allocate( grp_id_name(n))
3433 allocate( load_type(n))
3441 grp_id_name, hecmw_name_len, load_type,
value, shink )
3452 else if( rtc < 0 )
then
3458 deallocate( grp_id_name )
3459 deallocate( load_type )
3466 old_size = p%HEAT%H_SUF_tot
3467 new_size = old_size + m
3472 p%HEAT%H_SUF_tot = new_size
3475 member => p%HEAT%H_SUF_elem(head:)
3480 member(1) = local_id
3482 else if( rtc < 0 )
then
3483 member_n =
get_grp_member( p%MESH,
'elem_grp', grp_id_name(i), member )
3487 if( i<n ) member => member( member_n+1 : )
3489 p%HEAT%H_SUF_surf (id) = load_type(i)
3490 p%HEAT%H_SUF_val (id,1) = value(i)
3491 p%HEAT%H_SUF_val (id,2) = shink(i)
3492 p%HEAT%H_SUF_ampl (id,1) = amp_id1
3493 p%HEAT%H_SUF_ampl (id,2) = amp_id2
3498 deallocate( grp_id_name )
3499 deallocate( load_type )
3512 integer(kind=kint) :: ctrl
3513 integer(kind=kint) :: counter
3516 integer(kind=kint) :: rcode
3517 character(HECMW_NAME_LEN) :: amp1, amp2
3518 integer(kind=kint) :: amp_id1, amp_id2
3519 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
3520 real(kind=kreal),
pointer :: value(:)
3521 real(kind=kreal),
pointer :: shink(:)
3522 integer(kind=kint) :: i, j, n, m, head, id, member_n, old_size, new_size
3523 integer(kind=kint),
pointer :: member1(:), member2(:)
3529 allocate( grp_id_name(n))
3536 grp_id_name, hecmw_name_len,
value, shink )
3548 deallocate( grp_id_name )
3555 old_size = p%HEAT%H_SUF_tot
3556 new_size = old_size + m
3561 p%HEAT%H_SUF_tot = new_size
3564 member1 => p%HEAT%H_SUF_elem(head:)
3565 member2 => p%HEAT%H_SUF_surf(head:)
3568 member_n =
get_grp_member( p%MESH,
'surf_grp', grp_id_name(i), member1, member2 )
3570 member1 => member1( member_n+1 : )
3571 member2 => member2( member_n+1 : )
3574 p%HEAT%H_SUF_val (id,1) = value(i)
3575 p%HEAT%H_SUF_val (id,2) = shink(i)
3576 p%HEAT%H_SUF_ampl (id,1) = amp_id1
3577 p%HEAT%H_SUF_ampl (id,2) = amp_id2
3582 deallocate( grp_id_name )
3595 integer(kind=kint) :: ctrl
3596 integer(kind=kint) :: counter
3599 integer(kind=kint) :: rcode
3600 character(HECMW_NAME_LEN) :: amp1, amp2
3601 integer(kind=kint) :: amp_id1, amp_id2
3602 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
3603 integer(kind=kint),
pointer :: load_type(:)
3604 real(kind=kreal),
pointer :: value(:)
3605 real(kind=kreal),
pointer :: shink(:)
3606 integer(kind=kint) :: i, j, n, m, head, id, member_n, old_size, new_size
3607 integer(kind=kint),
pointer :: member(:)
3608 integer(kind=kint) :: local_id, rtc
3614 allocate( grp_id_name(n))
3615 allocate( load_type(n))
3622 grp_id_name, hecmw_name_len, load_type,
value, shink )
3633 else if( rtc < 0 )
then
3639 deallocate( grp_id_name )
3640 deallocate( load_type )
3647 old_size = p%HEAT%R_SUF_tot
3648 new_size = old_size + m
3653 p%HEAT%R_SUF_tot = new_size
3656 member => p%HEAT%R_SUF_elem(head:)
3661 member(1) = local_id
3663 else if( rtc < 0 )
then
3664 member_n =
get_grp_member( p%MESH,
'elem_grp', grp_id_name(i), member )
3668 if( i<n ) member => member( member_n+1 : )
3670 p%HEAT%R_SUF_surf (id) = load_type(i)
3671 p%HEAT%R_SUF_val (id,1) = value(i)
3672 p%HEAT%R_SUF_val (id,2) = shink(i)
3673 p%HEAT%R_SUF_ampl (id,1) = amp_id1
3674 p%HEAT%R_SUF_ampl (id,2) = amp_id2
3679 deallocate( grp_id_name )
3680 deallocate( load_type )
3693 integer(kind=kint) :: ctrl
3694 integer(kind=kint) :: counter
3697 integer(kind=kint) :: rcode
3698 character(HECMW_NAME_LEN) :: amp1, amp2
3699 integer(kind=kint) :: amp_id1, amp_id2
3700 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
3701 real(kind=kreal),
pointer :: value(:)
3702 real(kind=kreal),
pointer :: shink(:)
3703 integer(kind=kint) :: i, j, n, m, head, id, member_n, old_size, new_size
3704 integer(kind=kint),
pointer :: member1(:), member2(:)
3710 allocate( grp_id_name(n))
3728 deallocate( grp_id_name )
3735 old_size = p%HEAT%R_SUF_tot
3736 new_size = old_size + m
3741 p%HEAT%R_SUF_tot = new_size
3744 member1 => p%HEAT%R_SUF_elem(head:)
3745 member2 => p%HEAT%R_SUF_surf(head:)
3748 member_n =
get_grp_member( p%MESH,
'surf_grp', grp_id_name(i), member1, member2 )
3750 member1 => member1( member_n+1 : )
3751 member2 => member2( member_n+1 : )
3754 p%HEAT%R_SUF_val (id,1) = value(i)
3755 p%HEAT%R_SUF_val (id,2) = shink(i)
3756 p%HEAT%R_SUF_ampl (id,1) = amp_id1
3757 p%HEAT%R_SUF_ampl (id,2) = amp_id2
3762 deallocate( grp_id_name )
3778 integer(kind=kint) :: ctrl
3779 integer(kind=kint) :: counter
3782 integer(kind=kint) :: rcode
3800 integer(kind=kint) :: ctrl
3801 integer(kind=kint) :: counter
3803 integer(kind=kint) :: rcode
3804 character(HECMW_NAME_LEN) :: grp_id_name(1)
3805 integer(kind=kint) :: grp_id(1)
3822 grp_id_name(1), hecmw_name_len, &
3828 if (p%DYN%idx_resp == 1)
then
3830 p%DYN%ngrp_monit = grp_id(1)
3832 read(grp_id_name,*) p%DYN%ngrp_monit
3844 integer(kind=kint) :: ctrl
3845 integer(kind=kint) :: counter
3848 integer(kind=kint) :: rcode
3849 integer(kind=kint) :: vType
3850 character(HECMW_NAME_LEN) :: amp
3851 integer(kind=kint) :: amp_id
3852 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
3853 integer(kind=kint),
pointer :: dof_ids (:)
3854 integer(kind=kint),
pointer :: dof_ide (:)
3855 real(kind=kreal),
pointer :: val_ptr(:)
3856 integer(kind=kint) :: i, j, n, old_size, new_size
3857 integer(kind=kint) :: gid
3864 old_size = p%SOLID%VELOCITY_ngrp_tot
3865 new_size = old_size + n
3866 p%SOLID%VELOCITY_ngrp_tot = new_size
3874 allocate( grp_id_name(n))
3875 allocate( dof_ids(n))
3876 allocate( dof_ide(n))
3877 allocate( val_ptr(n) )
3882 grp_id_name, hecmw_name_len, &
3883 dof_ids, dof_ide, val_ptr )
3885 p%SOLID%VELOCITY_type = vtype
3886 if( vtype ==
kbcinitial ) p%DYN%VarInitialize = .true.
3889 n, grp_id_name, p%SOLID%VELOCITY_ngrp_ID(old_size+1:))
3890 p%SOLID%VELOCITY_ngrp_GRPID(old_size+1:new_size) = gid
3894 if( (dof_ids(i) < 1).or.(6 < dof_ids(i)).or.(dof_ide(i) < 1).or.(6 < dof_ide(i)) )
then
3895 write(
ilog,*)
'fstr control file error : !VELOCITY : range of dof_ids and dof_ide is from 1 to 6'
3898 p%SOLID%VELOCITY_ngrp_type(j) = 10 * dof_ids(i) + dof_ide(i)
3899 p%SOLID%VELOCITY_ngrp_amp(j) = amp_id
3900 p%SOLID%VELOCITY_ngrp_val(old_size+i) = val_ptr(i)
3904 deallocate( grp_id_name )
3905 deallocate( dof_ids )
3906 deallocate( dof_ide )
3907 deallocate( val_ptr )
3908 nullify( grp_id_name )
3922 integer(kind=kint) :: ctrl
3923 integer(kind=kint) :: counter
3926 integer(kind=kint) :: rcode
3927 integer(kind=kint) :: aType
3928 character(HECMW_NAME_LEN) :: amp
3929 integer(kind=kint) :: amp_id
3930 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
3931 integer(kind=kint),
pointer :: dof_ids (:)
3932 integer(kind=kint),
pointer :: dof_ide (:)
3933 real(kind=kreal),
pointer :: val_ptr(:)
3934 integer(kind=kint) :: i, j, n, old_size, new_size
3935 integer(kind=kint) :: gid
3942 old_size = p%SOLID%ACCELERATION_ngrp_tot
3943 new_size = old_size + n
3944 p%SOLID%ACCELERATION_ngrp_tot = new_size
3952 allocate( grp_id_name(n))
3953 allocate( dof_ids(n))
3954 allocate( dof_ide(n))
3955 allocate( val_ptr(n))
3960 grp_id_name, hecmw_name_len, &
3961 dof_ids, dof_ide, val_ptr)
3963 p%SOLID%ACCELERATION_type = atype
3964 if( atype ==
kbcinitial )p%DYN%VarInitialize = .true.
3967 n, grp_id_name, p%SOLID%ACCELERATION_ngrp_ID(old_size+1:))
3968 p%SOLID%ACCELERATION_ngrp_GRPID(old_size+1:new_size) = gid
3972 if( (dof_ids(i) < 1).or.(6 < dof_ids(i)).or.(dof_ide(i) < 1).or.(6 < dof_ide(i)) )
then
3973 write(
ilog,*)
'fstr control file error : !ACCELERATION : range of dof_ids and dof_ide is from 1 to 6'
3976 p%SOLID%ACCELERATION_ngrp_type(j) = 10 * dof_ids(i) + dof_ide(i)
3977 p%SOLID%ACCELERATION_ngrp_amp(j) = amp_id
3978 p%SOLID%ACCELERATION_ngrp_val(old_size+i) = val_ptr(i)
3982 deallocate( grp_id_name )
3983 deallocate( dof_ids )
3984 deallocate( dof_ide )
3985 deallocate( val_ptr )
3986 nullify( grp_id_name )
4003 integer(kind=kint) :: ctrl
4004 integer(kind=kint) :: counter
4007 integer(kind=kint) :: rcode
4053 integer(kind=kint) :: ctrl
4054 type (hecmwST_local_mesh) :: hecMESH
4055 type (fstr_solid ) :: fstrSOLID
4056 write(
ilog,*)
'### Error : In !BOUNDARY, TYPE=NASTRAN is not supported.'
4057 call hecmw_abort( hecmw_comm_get_comm())
4066 integer(kind=kint) :: ctrl
4070 integer(kind=kint) :: rcode
4084 integer(kind=kint) :: ctrl
4087 integer(kind=kint) :: rcode, nid
4088 character(len=HECMW_NAME_LEN) :: data_fmt
4090 data_fmt =
'SOLUTION,MATERIAL '
4103 type(hecmwst_local_mesh),
pointer :: hecMESH
4104 integer(kind=kint) :: n, i, sgrp_id, ngrp_id, ngrp_id2
4106 n = hecmesh%contact_pair%n_pair
4108 if( hecmesh%contact_pair%type(i) /= hecmw_contact_type_surf_surf ) cycle
4109 sgrp_id = hecmesh%contact_pair%slave_grp_id(i)
4112 hecmesh%contact_pair%type(i) = hecmw_contact_type_node_surf
4113 hecmesh%contact_pair%slave_grp_id(i) = ngrp_id
int fstr_ctrl_get_param_ex(int *ctrl, const char *param_name, const char *value_list, int *necessity, char *type, void *val)
int fstr_ctrl_get_data_array_ex(int *ctrl, const char *format,...)
int fstr_ctrl_open(char *filename)
int fstr_ctrl_get_c_h_name(int *ctrl, char *header_name, int *buff_size)
int fstr_ctrl_get_data_ex(int *ctrl, int *line_no, const char *format,...)
integer(kind=kint) function fstr_ctrl_get_fload(ctrl, node_id, node_id_len, dof_id, value)
This module encapsulate the basic functions of all elements provide by this software.
integer function numofquadpoints(fetype)
Obtains the number of quadrature points of the element.
integer(kind=kind(2)) function getspacedimension(etype)
Obtain the space dimension of the element.
This module contains fstr control file data obtaining functions.
integer(kind=kint) function fstr_ctrl_get_element_activation(ctrl, amp, eps, grp_id_name, mode, measure, state, thlow, thup)
Read in !ELEMENT_ACTIVATION.
integer(kind=kint) function fstr_ctrl_get_contactparam(ctrl, contactparam)
Read in !CONTACT_PARAM !
integer(kind=kint) function fstr_ctrl_get_solution(ctrl, type, nlgeom)
Read in !SOLUTION.
integer(kind=kint) function fstr_ctrl_get_contactalgo(ctrl, algo, augiter)
Read in !CONTACT.
integer(kind=kint) function fstr_ctrl_get_contact_if(ctrl, n, contact_if)
Read in contact interference.
integer(kind=kint) function fstr_ctrl_get_couple(ctrl, fg_type, fg_first, fg_window, surf_id, surf_id_len)
Read in !COUPLE.
integer(kind=kint) function fstr_get_autoinc(ctrl, aincparam)
Read in !AUTOINC_PARAM !
integer(kind=kint) function fstr_ctrl_get_amplitude(ctrl, nline, name, type_def, type_time, type_val, n, val, table)
Read in !AMPLITUDE.
logical function fstr_ctrl_get_outitem(ctrl, hecMESH, outinfo)
Read in !OUTPUT_RES & !OUTPUT_VIS.
integer(kind=kint) function fstr_ctrl_get_elemopt(ctrl, elemopt361)
Read in !ELEMOPT.
integer(kind=kint) function fstr_ctrl_get_timepoints(ctrl, tp)
Read in !TIME_POINTS.
integer(kind=kint) function fstr_ctrl_get_solver(ctrl, method, precond, nset, iterlog, timelog, steplog, nier, iterpremax, nrest, nBFGS, scaling, dumptype, dumpexit, usejad, ncolor_in, mpc_method, estcond, method2, recyclepre, solver_opt, contact_elim, resid, singma_diag, sigma, thresh, filter)
Read in !SOLVER.
integer(kind=kint) function fstr_ctrl_get_echo(ctrl, echo)
Read in !ECHO.
logical function fstr_ctrl_get_contact(ctrl, n, contact, np, tp, ntol, ttol, ctAlgo, cpname, smoothing)
Read in contact definition.
integer(kind=kint) function fstr_ctrl_get_nonlinear_solver(ctrl, method)
Read in !NONLINEAR_SOLVER.
integer(kind=kint) function fstr_ctrl_get_mpc(ctrl, penalty)
Read in !MPC.
integer function fstr_ctrl_get_section(ctrl, hecMESH, sections)
Read in !SECTION.
logical function fstr_ctrl_get_istep(ctrl, hecMESH, steps, tpname, apname)
Read in !STEP and !ISTEP.
integer(kind=kint) function fstr_ctrl_get_write(ctrl, res, visual, femap)
Read in !WRITE.
integer(kind=kint) function fstr_ctrl_get_step(ctrl, amp, iproc)
Read in !STEP.
logical function fstr_ctrl_get_embed(ctrl, n, embed, cpname, smoothing)
Read in contact definition.
This module contains control file data obtaining functions for dynamic analysis.
integer(kind=kint) function fstr_ctrl_get_dynamic(ctrl, nlgeom, idx_eqa, idx_resp, n_step, t_start, t_end, t_delta, gamma, beta, idx_mas, idx_dmp, ray_m, ray_k, nout, node_id, node_id_len, nout_monit, iout_list)
Read in !DYNAMIC.
integer(kind=kint) function fstr_ctrl_get_velocity(ctrl, vType, amp, node_id, node_id_len, dof_ids, dof_ide, value)
Read in !VELOCITY.
integer(kind=kint) function fstr_ctrl_get_acceleration(ctrl, aType, amp, node_id, node_id_len, dof_ids, dof_ide, value)
Read in !ACCELERATION.
This module contains control file data obtaining functions for dynamic analysis.
integer(kind=kint) function fstr_ctrl_get_eigen(ctrl, nget, tolerance, maxiter)
Read in !EIGEN (struct)
This module contains control file data obtaining functions for heat conductive analysis.
integer(kind=kint) function fstr_ctrl_get_dflux(ctrl, amp, elem_grp_name, elem_grp_name_len, load_type, value)
Read in !DFLUX (heat)
integer(kind=kint) function fstr_ctrl_get_sflux(ctrl, amp, surface_grp_name, surface_grp_name_len, value)
Read in !SFLUX (heat)
integer(kind=kint) function fstr_ctrl_get_weldline(ctrl, hecMESH, grp_name_len, weldline)
Read in !WELD_LINE (heat)
integer(kind=kint) function fstr_ctrl_get_heat(ctrl, dt, etime, dtmin, deltmx, itmax, eps, tpname, beta)
Read in !HEAT.
integer(kind=kint) function fstr_ctrl_get_film(ctrl, amp1, amp2, elem_grp_name, elem_grp_name_len, load_type, value, sink)
Read in !FILM (heat)
integer(kind=kint) function fstr_ctrl_get_radiate(ctrl, amp1, amp2, elem_grp_name, elem_grp_name_len, load_type, value, sink)
Read in !RADIATE (heat)
integer(kind=kint) function fstr_ctrl_get_cflux(ctrl, amp, node_grp_name, node_grp_name_len, value)
Read in !CFLUX (heat)
integer(kind=kint) function fstr_ctrl_get_fixtemp(ctrl, amp, node_grp_name, node_grp_name_len, value)
Read in !FIXTEMP.
integer(kind=kint) function fstr_ctrl_get_sfilm(ctrl, amp1, amp2, surface_grp_name, surface_grp_name_len, value, sink)
Read in !SFILM (heat)
integer(kind=kint) function fstr_ctrl_get_sradiate(ctrl, amp1, amp2, surface_grp_name, surface_grp_name_len, value, sink)
Read in !SRADIATE (heat)
This module manages read in of various material properties.
integer function fstr_ctrl_get_dashpot_d(ctrl, mattype, nlgeom, matval_i, dict)
Read in !DASHPOT_D.
integer function fstr_ctrl_get_hyperelastic(ctrl, mattype, nlgeom, matval)
Read in !HYPERELASTIC.
integer function fstr_ctrl_get_viscoelasticity(ctrl, mattype, nlgeom, dict)
Read in !VISCOELASTIC.
integer function fstr_ctrl_get_viscoplasticity(ctrl, mattype, nlgeom, dict)
Read in !CREEP.
integer function fstr_ctrl_get_usermaterial(ctrl, mattype, nlgeom, nstatus, matval)
Read in !USER_MATERIAL.
integer function fstr_ctrl_get_expansion_coeff(ctrl, matval, dict)
Read in !EXPANSION_COEFF.
integer function fstr_ctrl_get_trs(ctrl, mattype, matval)
Read in !TRS.
integer function fstr_ctrl_get_elasticity(ctrl, mattype, nlgeom, matval, dict)
Read in !ELASTIC.
integer function fstr_ctrl_get_plasticity(ctrl, mattype, nlgeom, matval, mattable, dict)
Read in !PLASTIC.
integer function fstr_ctrl_get_dashpot_a(ctrl, mattype, nlgeom, matval_i, dict)
Read in !DASHPOT_A.
integer function fstr_ctrl_get_material(ctrl, matname)
Read in !MATERIAL.
integer function fstr_ctrl_get_density(ctrl, matval)
Read in !DENSITY.
integer function fstr_ctrl_get_spring_a(ctrl, mattype, nlgeom, matval_i, dict)
Read in !SPRING_A.
integer function fstr_ctrl_get_rayleigh_damping(ctrl, matval, is_RD)
Read in !RAYLEIGH_DAMPING.
integer function fstr_ctrl_get_fluid(ctrl, mattype, nlgeom, matval, dict)
Read in !FLUID.
integer function fstr_ctrl_get_spring_d(ctrl, mattype, nlgeom, matval_i, dict)
Read in !SPRING_D.
This module contains control file data obtaining functions for static analysis.
integer(kind=kint) function fstr_ctrl_get_spring(ctrl, amp, node_id, node_id_len, dof_id, value)
Read in !SPRING.
integer(kind=kint) function fstr_ctrl_get_static(ctrl, dtime, etime, itime, eps, restart_nout, idx_elpl, iout_list, sig_y0, h_dash, nout, nout_monit, node_monit_1, elem_monit_1, intg_monit_1)
Read in !STATIC.
integer(kind=kint) function fstr_ctrl_get_boundary(ctrl, amp, node_id, node_id_len, dof_ids, dof_ide, value)
Read in !BOUNDARY.
integer(kind=kint) function fstr_ctrl_get_reftemp(ctrl, value)
Read in !REFTEMP.
integer(kind=kint) function fstr_ctrl_get_dload(ctrl, amp, follow, element_id, element_id_len, load_type, params)
Read in !DLOAD.
integer(kind=kint) function fstr_ctrl_get_temperature(ctrl, irres, tstep, tintl, rtype, node_id, node_id_len, value)
Read in !TEMPERATURE.
integer(kind=kint) function fstr_ctrl_get_cload(ctrl, amp, node_id, node_id_len, dof_id, value)
Read in !CLOAD.
integer function fstr_ctrl_get_userload(ctrl)
Read in !ULOAD.
This module contains auxiliary functions in calculation setup.
integer(kind=kint) function get_grp_member_n(hecMESH, grp_type_name, name)
subroutine fstr_ctrl_err_stop
subroutine node_grp_name_to_id_ex(hecMESH, header_name, n, grp_id_name, grp_ID)
subroutine surf_grp_name_to_id_ex(hecMESH, header_name, n, grp_id_name, grp_ID)
subroutine dload_grp_name_to_id_ex(hecMESH, n, grp_id_name, fg_surface, grp_ID)
subroutine fstr_setup_visualize(ctrl, hecMESH)
subroutine nodesurf_grp_name_to_id_ex(hecMESH, header_name, n, grp_id_name, grp_ID, grp_TYPE)
integer(kind=kint) function get_local_member_index(hecMESH, type_name, name, local_id)
subroutine fstr_expand_real_array2(array, column, old_size, new_size)
integer(kind=kint) function get_grp_member(hecMESH, grp_type_name, name, member1, member2)
subroutine fstr_expand_integer_array(array, old_size, new_size)
subroutine fstr_expand_real_array(array, old_size, new_size)
subroutine amp_name_to_id(hecMESH, header_name, aname, id)
subroutine append_new_amplitude(amp, name, type_def, type_time, type_val, np, val, table)
Append new amplitude table at the end of existing amplitude tables.
subroutine append_node_grp_from_surf_grp(hecMESH, sgrp_id, ngrp_id)
integer(kind=kint) function node_global_to_local(hecMESH, list, n)
subroutine elem_grp_name_to_id_ex(hecMESH, header_name, n, grp_id_name, grp_ID)
subroutine fstr_strupr(s)
subroutine reallocate_real(array, n)
subroutine reallocate_integer(array, n)
integer(kind=kint) function get_sorted_local_member_index(hecMESH, hecPARAM, type_name, name, local_id)
subroutine fstr_expand_integer_array2(array, column, old_size, new_size)
logical function fstr_streqr(s1, s2)
This module provides functions to read in data from control file and do necessary preparation for fol...
subroutine fstr_setup_boundary(ctrl, counter, P)
Read in !BOUNDARY !
subroutine fstr_setup_eigenread(ctrl, counter, P)
Read in !EIGENREAD !
subroutine fstr_setup_static(ctrl, counter, P)
Read in !STATIC(old) !
subroutine fstr_setup_mpc(ctrl, counter, P)
Read in !MPC !
integer(kind=kint) function fstr_setup_initial(ctrl, cond, hecMESH)
subroutine fstr_setup_sradiate(ctrl, counter, P)
Read in !SRADIATE !
subroutine fstr_setup_radiate(ctrl, counter, P)
Read in !RADIATE !
subroutine fstr_setup_element_activation(ctrl, counter, P)
Read in !ELEMENT_ACTIVATION.
subroutine fstr_setup_fload(ctrl, counter, P)
Read in !FLOAD !
subroutine fstr_setup_contactalgo(ctrl, P)
Read in !CONTACT !
subroutine fstr_setup_dload(ctrl, counter, P)
Read in !DLOAD.
subroutine fstr_eigen_init(fstrEIG)
Initial setting of eigen ca;culation.
subroutine fstr_setup_dflux(ctrl, counter, P)
Read in !DFLUX !
subroutine fstr_setup_post_phys_alloc(phys, NDOF, n_node, n_elem)
Initial setting of postprecessor.
subroutine fstr_solid_finalize(fstrSOLID)
Finalizer of fstr_solid.
subroutine fstr_setup_cflux(ctrl, counter, P)
Read in !CFLUX !
subroutine fstr_smoothed_element_calcmaxcon(hecMESH, fstrSOLID)
subroutine fstr_smoothed_element_init(hecMESH, fstrSOLID)
subroutine fstr_setup_amplitude(ctrl, P)
Read in !AMPLITUDE !
subroutine fstr_convert_contact_type(hecMESH)
Convert SURF-SURF contact to NODE-SURF contact !
subroutine fstr_setup_couple(ctrl, counter, P)
Read in !COUPLE !
subroutine fstr_solid_init(hecMESH, fstrSOLID)
Initializer of structure fstr_solid.
subroutine fstr_setup_step(ctrl, counter, P)
Read in !STEP !
subroutine fstr_dynamic_init(fstrDYNAMIC)
Initial setting of dynamic calculation.
subroutine fstr_setup_solid_nastran(ctrl, hecMESH, fstrSOLID)
subroutine fstr_setup_solver(ctrl, counter, P)
Read in !SOLVER !
subroutine fstr_setup_restart(ctrl, nout, version)
Read in !RESTART !
subroutine fstr_setup_cload(ctrl, counter, P)
Read in !CLOAD !
subroutine fstr_heat_init(fstrHEAT)
Initial setting of heat analysis.
subroutine fstr_setup_output_sstype(ctrl, P)
Read in !OUTPUT_SSTYPE !
subroutine fstr_setup_write(ctrl, counter, P)
Read in !WRITE !
subroutine fstr_setup_eigen(ctrl, counter, P)
Read in !EIGEN !
subroutine fstr_setup_film(ctrl, counter, P)
Read in !FILM !
subroutine fstr_setup_solution(ctrl, counter, P)
Read in !SOLUTION !
subroutine fstr_setup_acceleration(ctrl, counter, P)
Read in !ACCELERATION !
subroutine fstr_setup_velocity(ctrl, counter, P)
Read in !VELOCITY !
subroutine fstr_setup_heat(ctrl, counter, P)
Read in !HEAT !
subroutine fstr_setup_temperature(ctrl, counter, P)
Read in !TEMPERATURE !
subroutine fstr_setup_dynamic(ctrl, counter, P)
Read in !DYNAMIC !
subroutine fstr_setup_nonlinear_solver(ctrl, counter, P)
Read in !NONLINEAR_SOLVER !
subroutine fstr_setup(cntl_filename, hecMESH, fstrPARAM, fstrSOLID, fstrEIG, fstrHEAT, fstrDYNAMIC, fstrCPL, fstrFREQ)
Read in and initialize control data !
integer function fstr_setup_orientation(ctrl, hecMESH, cnt, coordsys)
Read in !ORIENTATION.
subroutine fstr_setup_fixtemp(ctrl, counter, P)
Read in !FIXTEMP !
subroutine fstr_element_init(hecMESH, fstrSOLID, solution_type)
Initialize elements info in static calculation.
subroutine fstr_setup_reftemp(ctrl, counter, P)
Read in !REFTEMP !
subroutine fstr_setup_echo(ctrl, counter, P)
Read in !ECHO !
subroutine fstr_setup_post(ctrl, P)
subroutine fstr_expand_dload_array(array, old_size, new_size)
Reset !DLOAD !
subroutine fstr_setup_sfilm(ctrl, counter, P)
Read in !SFILM !
subroutine fstr_dynamic_alloc(hecMESH, fstrDYNAMIC)
Initial setting of dynamic calculation.
subroutine fstr_setup_spring(ctrl, counter, P)
Read in !SPRING !
subroutine fstr_dynamic_finalize(fstrDYNAMIC)
Finalizer of fstr_solid.
subroutine fstr_setup_sflux(ctrl, counter, P)
Read in !SFLUX !
subroutine fstr_solid_alloc(hecMESH, fstrSOLID)
Initializer of structure fstr_solid.
This module defines common data and basic structures for analysis.
integer(kind=kint), parameter iutb
integer(kind=kint) myrank
PARALLEL EXECUTION.
integer(kind=kint), parameter kel341sesns
integer(kind=kint), parameter kbcffstr
boundary condition file type (bcf)
real(kind=kreal), dimension(100) svrarray
integer(kind=kint), parameter kstdynamic
integer(kind=kint), parameter kel341fi
section control
integer(kind=kint), parameter idbg
integer(kind=kint), parameter kel361fi
integer(kind=kint) opsstype
integer(kind=kint), dimension(100) sviarray
SOLVER CONTROL.
integer(kind=kint), parameter kon
integer(kind=kint), parameter kfloadcase_im
integer(kind=kint), parameter kel361ic
integer(kind=kint), parameter ilog
FILE HANDLER.
real(kind=kreal) dt
ANALYSIS CONTROL for NLGEOM and HEAT.
integer(kind=kint), parameter kststatic
integer(kind=kint), parameter kbcinitial
integer(kind=kint), parameter kcaalagrange
integer(kind=kint), parameter kststaticeigen
integer(kind=kint), parameter kstheat
real(kind=kreal), pointer ref_temp
REFTEMP.
integer(kind=kint), parameter kel361fbar
integer(kind=kint), parameter ksteigen
type(tinitialcondition), dimension(:), pointer, save g_initialcnd
logical paracontactflag
PARALLEL CONTACT FLAG.
integer(kind=kint), parameter kfloadcase_re
This module manages step information.
subroutine fstr_init_outctrl(outctrl)
subroutine fstr_copy_outctrl(outctrl1, outctrl2)
subroutine fstr_ctrl_get_output(ctrl, outctrl, islog, res, visual, femap)
This module provides a function to fetch material properties from hecmw.
subroutine fstr_get_prop(hecMESH, shell_var, isect, ee, pp, rho, alpha, thick, n_totlyr, alpha_over_mu, beam_radius, beam_angle1, beam_angle2, beam_angle3, beam_angle4, beam_angle5, beam_angle6)
This module contains several strategy to free locking problem in Eight-node hexagonal element.
integer(kind=kint) function, public return_nn_comp_c3d4_sesns(nn, nodlocal)
This module manages step information.
subroutine free_stepinfo(step)
Finalizer.
subroutine init_stepinfo(stepinfo)
Initializer.
integer, parameter stepfixedinc
subroutine init_aincparam(aincparam)
Initializer.
subroutine setup_stepinfo_starttime(stepinfos)
This module provides aux functions.
subroutine cross_product(v1, v2, vn)
This module summarizes all information of material properties.
integer(kind=kint), parameter m_youngs
integer(kind=kint), parameter m_beam_radius
integer(kind=kint), parameter viscoelastic
integer(kind=kint), parameter m_exapnsion
integer(kind=kint), parameter m_beam_angle6
integer(kind=kint), parameter elastic
integer(kind=kint), parameter m_beam_angle3
integer(kind=kint), parameter m_density
integer(kind=kint), parameter m_beam_angle4
integer(kind=kint), parameter m_poisson
integer(kind=kint), parameter m_beam_angle1
integer(kind=kint), parameter m_thick
integer(kind=kint), parameter m_beam_angle5
integer(kind=kint), parameter m_beam_angle2
integer(kind=kint), parameter m_alpha_over_mu
subroutine initmaterial(material)
Initializer.
This modules defines a structure to record history dependent parameter in static analysis.
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.