24 include
'fstr_ctrl_util_f.inc'
28 type(hecmwst_local_mesh),
pointer :: mesh
43 subroutine fstr_setup( cntl_filename, hecMESH, fstrPARAM, &
44 fstrSOLID, fstrEIG, fstrHEAT, fstrDYNAMIC, fstrCPL, fstrFREQ )
46 character(len=HECMW_FILENAME_LEN) :: cntl_filename, input_filename
47 type(hecmwst_local_mesh),
target :: hecMESH
56 integer(kind=kint) :: ctrl, ctrl_list(20), ictrl
59 integer,
parameter :: MAXOUTFILE = 10
60 double precision,
parameter :: dpi = 3.14159265358979323846d0
62 external fstr_ctrl_get_c_h_name
63 integer(kind=kint) :: fstr_ctrl_get_c_h_name
65 integer(kind=kint) :: version, result, visual, femap, n_totlyr
66 integer(kind=kint) :: rcode, n, i, j, cid, nout, nin, ierror, cparam_id
67 character(len=HECMW_NAME_LEN) :: header_name, fname(MAXOUTFILE)
68 real(kind=kreal) :: ee, pp, rho, alpha, thick, alpha_over_mu
69 real(kind=kreal) :: beam_radius, &
70 beam_angle1, beam_angle2, beam_angle3,&
71 beam_angle4, beam_angle5, beam_angle6
75 character(len=HECMW_FILENAME_LEN) :: logfileNAME, mName, mName2
78 integer(kind=kint) :: c_solution, c_solver, c_nlsolver, c_step, c_write, c_echo, c_amplitude
79 integer(kind=kint) :: c_static, c_boundary, c_cload, c_dload, c_temperature, c_reftemp, c_spring
80 integer(kind=kint) :: c_heat, c_fixtemp, c_cflux, c_dflux, c_sflux, c_film, c_sfilm, c_radiate, c_sradiate
81 integer(kind=kint) :: c_eigen, c_contact, c_contactparam, c_embed
82 integer(kind=kint) :: c_dynamic, c_velocity, c_acceleration
83 integer(kind=kint) :: c_fload, c_eigenread
84 integer(kind=kint) :: c_couple, c_material
85 integer(kind=kint) :: c_mpc, c_weldline, c_initial
86 integer(kind=kint) :: c_istep, c_localcoord, c_section
87 integer(kind=kint) :: c_elemopt, c_aincparam, c_timepoints
88 integer(kind=kint) :: c_output, islog
89 integer(kind=kint) :: k
90 integer(kind=kint) :: cache = 1
92 write( logfilename,
'(i5,''.log'')' )
myrank
106 c_solution = 0; c_solver = 0; c_nlsolver = 0; c_step = 0; c_output = 0; c_echo = 0; c_amplitude = 0
107 c_static = 0; c_boundary = 0; c_cload = 0; c_dload = 0; c_temperature = 0; c_reftemp = 0; c_spring = 0;
108 c_heat = 0; c_fixtemp = 0; c_cflux = 0; c_dflux = 0; c_sflux = 0
109 c_film = 0; c_sfilm = 0; c_radiate= 0; c_sradiate = 0
110 c_eigen = 0; c_contact = 0; c_contactparam = 0; c_embed = 0
111 c_dynamic = 0; c_velocity = 0; c_acceleration = 0
112 c_couple = 0; c_material = 0; c_section =0
113 c_mpc = 0; c_weldline = 0; c_initial = 0
114 c_istep = 0; c_localcoord = 0
115 c_fload = 0; c_eigenread = 0
117 c_aincparam= 0; c_timepoints = 0
123 write(*,*)
'### Error: Cannot open FSTR control file : ', cntl_filename
124 write(
ilog,*)
'### Error: Cannot open FSTR control file : ', cntl_filename
131 if( header_name ==
'!VERSION' )
then
133 else if( header_name ==
'!SOLUTION' )
then
134 c_solution = c_solution + 1
136 else if( header_name ==
'!NONLINEAR_SOLVER' )
then
137 c_nlsolver = c_nlsolver + 1
139 else if( header_name ==
'!SOLVER' )
then
140 c_solver = c_solver + 1
142 else if( header_name ==
'!ISTEP' )
then
143 c_istep = c_istep + 1
144 else if( header_name ==
'!STEP' )
then
145 if( version==0 )
then
149 c_istep = c_istep + 1
151 else if( header_name ==
'!WRITE' )
then
153 if( visual==1 ) p%PARAM%fg_visual= 1
154 if( result==1 ) p%PARAM%fg_result = 1
155 c_output = c_output+1
156 else if( header_name ==
'!ECHO' )
then
159 else if( header_name ==
'!RESTART' )
then
161 fstrsolid%restart_nout= nout
162 fstrdynamic%restart_nout= nout
163 fstrheat%restart_nout= nout
164 else if( header_name ==
'!ORIENTATION' )
then
165 c_localcoord = c_localcoord + 1
166 else if( header_name ==
'!AUTOINC_PARAM' )
then
167 c_aincparam = c_aincparam + 1
168 else if( header_name ==
'!TIME_POINTS' )
then
169 c_timepoints = c_timepoints + 1
170 else if( header_name ==
'!OUTPUT_SSTYPE' )
then
172 else if( header_name ==
'!INITIAL_CONDITION' )
then
173 c_initial = c_initial + 1
174 else if( header_name ==
'!AMPLITUDE' )
then
175 c_amplitude = c_amplitude + 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 ==
'!MATERIAL' )
then
204 c_material = c_material + 1
205 else if( header_name ==
'!TEMPERATURE' )
then
206 c_temperature = c_temperature + 1
208 else if( header_name ==
'!SPRING' )
then
209 c_spring = c_spring + 1
211 else if( header_name ==
'!REFTEMP' )
then
212 c_reftemp = c_reftemp + 1
217 else if( header_name ==
'!HEAT' )
then
219 else if( header_name ==
'!FIXTEMP' )
then
220 c_fixtemp = c_fixtemp + 1
222 else if( header_name ==
'!CFLUX' )
then
223 c_cflux = c_cflux + 1
225 else if( header_name ==
'!DFLUX' )
then
226 c_dflux = c_dflux + 1
228 else if( header_name ==
'!SFLUX' )
then
229 c_sflux = c_sflux + 1
231 else if( header_name ==
'!FILM' )
then
234 else if( header_name ==
'!SFILM' )
then
235 c_sfilm = c_sfilm + 1
237 else if( header_name ==
'!RADIATE' )
then
238 c_radiate = c_radiate + 1
240 else if( header_name ==
'!SRADIATE' )
then
241 c_sradiate = c_sradiate + 1
243 else if( header_name ==
'!WELD_LINE' )
then
244 c_weldline = c_weldline + 1
248 else if( header_name ==
'!EIGEN' )
then
249 c_eigen = c_eigen + 1
254 else if( header_name ==
'!DYNAMIC' )
then
255 c_dynamic = c_dynamic + 1
257 else if( header_name ==
'!VELOCITY' )
then
258 c_velocity = c_velocity + 1
260 else if( header_name ==
'!ACCELERATION' )
then
261 c_acceleration = c_acceleration + 1
263 else if( header_name ==
'!FLOAD' )
then
264 c_fload = c_fload + 1
266 else if( header_name ==
'!EIGENREAD' )
then
267 c_eigenread = c_eigenread + 1
272 else if( header_name ==
'!COUPLE' )
then
273 c_couple = c_couple + 1
278 else if( header_name ==
'!MPC' )
then
284 else if( header_name ==
'!INCLUDE' )
then
285 ctrl_list(ictrl) = ctrl
290 write(*,*)
'### Error: Cannot open FSTR control file : ', input_filename
291 write(
ilog,*)
'### Error: Cannot open FSTR control file : ', input_filename
299 else if( header_name ==
'!END' )
then
310 ctrl = ctrl_list(ictrl)
317 fstrsolid%n_contacts = c_contact
318 if( c_contact>0 )
then
319 allocate( fstrsolid%contacts( c_contact ) )
323 fstrsolid%n_embeds = c_embed
324 if( c_embed>0 )
allocate( fstrsolid%embeds( c_embed ) )
325 if( c_weldline>0 )
allocate( fstrheat%weldline( c_weldline ) )
327 if( c_istep>0 )
allocate( fstrsolid%step_ctrl( c_istep ) )
328 if( c_localcoord>0 )
allocate( g_localcoordsys(c_localcoord) )
329 allocate( fstrparam%ainc(0:c_aincparam) )
333 if( c_timepoints>0 )
allocate( fstrparam%timepoints(c_timepoints) )
334 allocate( fstrparam%contactparam(0:c_contactparam) )
335 do i=0,c_contactparam
339 p%SOLID%is_33shell = 0
340 p%SOLID%is_33beam = 0
342 do i=1,hecmesh%n_elem_type
343 n = hecmesh%elem_type_item(i)
344 if (n == 781 .or. n == 761)
then
345 p%SOLID%is_33shell = 1
346 elseif (n == 641)
then
347 p%SOLID%is_33beam = 1
352 if( hecmesh%material%n_mat>n ) n= hecmesh%material%n_mat
353 if( n==0 ) stop
"material property not defined!"
354 allocate( fstrsolid%materials( n ) )
358 if( hecmesh%section%n_sect >0 )
then
359 do i=1,hecmesh%section%n_sect
360 if( hecmesh%section%sect_type(i) == 4 ) cycle
361 cid = hecmesh%section%sect_mat_ID_item(i)
362 if( cid>n ) stop
"Error in material property definition!"
363 if( fstrparam%nlgeom .or. fstrparam%solution_type==
kststaticeigen ) &
364 fstrsolid%materials(cid)%nlgeom_flag = 1
367 n_totlyr,alpha_over_mu, &
368 beam_radius,beam_angle1,beam_angle2,beam_angle3, &
369 beam_angle4,beam_angle5,beam_angle6)
370 fstrsolid%materials(cid)%name = hecmesh%material%mat_name(cid)
371 fstrsolid%materials(cid)%variables(
m_youngs)=ee
372 fstrsolid%materials(cid)%variables(
m_poisson)=pp
373 fstrsolid%materials(cid)%variables(
m_density)=rho
374 fstrsolid%materials(cid)%variables(
m_exapnsion)=alpha
375 fstrsolid%materials(cid)%variables(
m_thick)=thick
377 fstrsolid%materials(cid)%variables(
m_beam_radius)=beam_radius
378 fstrsolid%materials(cid)%variables(
m_beam_angle1)=beam_angle1
379 fstrsolid%materials(cid)%variables(
m_beam_angle2)=beam_angle2
380 fstrsolid%materials(cid)%variables(
m_beam_angle3)=beam_angle3
381 fstrsolid%materials(cid)%variables(
m_beam_angle4)=beam_angle4
382 fstrsolid%materials(cid)%variables(
m_beam_angle5)=beam_angle5
383 fstrsolid%materials(cid)%variables(
m_beam_angle6)=beam_angle6
384 fstrsolid%materials(cid)%mtype =
elastic
385 fstrsolid%materials(cid)%totallyr = n_totlyr
386 fstrsolid%materials(cid)%shell_var => shmat
391 allocate( fstrsolid%sections(hecmesh%section%n_sect) )
392 do i=1,hecmesh%section%n_sect
395 if( p%PARAM%nlgeom )
then
398 fstrsolid%sections(i)%elemopt361 =
kel361ic
400 else if( p%PARAM%solution_type==
ksteigen )
then
401 fstrsolid%sections(i)%elemopt361 =
kel361ic
405 fstrsolid%sections(i)%elemopt361 =
kel361fi
407 fstrsolid%sections(i)%elemopt341 =
kel341fi
410 allocate( fstrsolid%output_ctrl( 4 ) )
412 fstrsolid%output_ctrl( 1 )%filename = trim(logfilename)
413 fstrsolid%output_ctrl( 1 )%filenum =
ilog
435 fstrsolid%elemopt361 = 0
436 fstrsolid%AutoINC_stat = 0
437 fstrsolid%CutBack_stat = 0
438 fstrsolid%NRstat_i(:) = 0
439 fstrsolid%NRstat_r(:) = 0.d0
444 if( header_name ==
'!ORIENTATION' )
then
445 c_localcoord = c_localcoord + 1
447 write(*,*)
'### Error: Fail in read in ORIENTATION definition : ', c_localcoord
448 write(
ilog,*)
'### Error: Fail in read in ORIENTATION definition : ', c_localcoord
453 elseif( header_name ==
'!CONTACT' )
then
456 ,ee, pp, rho, alpha, p%PARAM%contact_algo, mname ) )
then
457 write(*,*)
'### Error: Fail in read in contact condition : ', c_contact
458 write(
ilog,*)
'### Error: Fail in read in contact condition : ', c_contact
462 do i=1,
size(fstrparam%contactparam)-1
463 if(
fstr_streqr( fstrparam%contactparam(i)%name, mname ) )
then
468 if( ee>0.d0 )
cdotp = ee
469 if( pp>0.d0 )
mut = pp
470 if( rho>0.d0 )
cgn = rho
471 if( alpha>0.d0 )
cgt = alpha
473 if( .not. fstr_contact_check( fstrsolid%contacts(c_contact+i), p%MESH ) )
then
474 write(*,*)
'### Error: Inconsistence in contact and surface definition : ' , i+c_contact
475 write(
ilog,*)
'### Error: Inconsistence in contact and surface definition : ', i+c_contact
479 isok = fstr_contact_init( fstrsolid%contacts(c_contact+i), p%MESH, fstrparam%contactparam(cparam_id),
myrank)
481 isok = fstr_contact_init( fstrsolid%contacts(c_contact+i), p%MESH, fstrparam%contactparam(cparam_id))
486 c_contact = c_contact+n
489 elseif( header_name ==
'!EMBED' )
then
491 if( .not.
fstr_ctrl_get_embed( ctrl, n, fstrsolid%embeds(c_embed+1:c_embed+n), mname ) )
then
492 write(*,*)
'### Error: Fail in read in embed condition : ', c_embed
493 write(
ilog,*)
'### Error: Fail in read in embed condition : ', c_embed
497 do i=1,
size(fstrparam%contactparam)-1
498 if(
fstr_streqr( fstrparam%contactparam(i)%name, mname ) )
then
503 if( .not. fstr_contact_check( fstrsolid%embeds(c_embed+i), p%MESH ) )
then
504 write(*,*)
'### Error: Inconsistence in contact and surface definition : ' , i+c_embed
505 write(
ilog,*)
'### Error: Inconsistence in contact and surface definition : ', i+c_embed
509 isok = fstr_embed_init( fstrsolid%embeds(c_embed+i), p%MESH, fstrparam%contactparam(cparam_id),
myrank)
511 isok = fstr_embed_init( fstrsolid%embeds(c_embed+i), p%MESH, fstrparam%contactparam(cparam_id))
517 else if( header_name ==
'!ISTEP' )
then
519 if( .not.
fstr_ctrl_get_istep( ctrl, hecmesh, fstrsolid%step_ctrl(c_istep), mname, mname2 ) )
then
520 write(*,*)
'### Error: Fail in read in step definition : ' , c_istep
521 write(
ilog,*)
'### Error: Fail in read in step definition : ', c_istep
524 if(
associated(fstrparam%timepoints) )
then
525 do i=1,
size(fstrparam%timepoints)
526 if(
fstr_streqr( fstrparam%timepoints(i)%name, mname ) )
then
527 fstrsolid%step_ctrl(c_istep)%timepoint_id = i;
exit
531 if(
associated(fstrparam%ainc) )
then
532 do i=1,
size(fstrparam%ainc)
533 if(
fstr_streqr( fstrparam%ainc(i)%name, mname2 ) )
then
534 fstrsolid%step_ctrl(c_istep)%AincParam_id = i;
exit
538 else if( header_name ==
'!STEP' .and. version>=1 )
then
540 if( .not.
fstr_ctrl_get_istep( ctrl, hecmesh, fstrsolid%step_ctrl(c_istep), mname, mname2 ) )
then
541 write(*,*)
'### Error: Fail in read in step definition : ' , c_istep
542 write(
ilog,*)
'### Error: Fail in read in step definition : ', c_istep
545 if(
associated(fstrparam%timepoints) )
then
546 do i=1,
size(fstrparam%timepoints)
547 if(
fstr_streqr( fstrparam%timepoints(i)%name, mname ) )
then
548 fstrsolid%step_ctrl(c_istep)%timepoint_id = i;
exit
552 if(
associated(fstrparam%ainc) )
then
553 do i=1,
size(fstrparam%ainc)-1
554 if(
fstr_streqr( fstrparam%ainc(i)%name, mname2 ) )
then
555 fstrsolid%step_ctrl(c_istep)%AincParam_id = i;
exit
560 else if( header_name ==
'!HEAT' )
then
564 else if( header_name ==
'!WELD_LINE' )
then
565 fstrheat%WL_tot = fstrheat%WL_tot+1
567 write(*,*)
'### Error: Fail in read in Weld Line definition : ' , fstrheat%WL_tot
568 write(
ilog,*)
'### Error: Fail in read in Weld Line definition : ', fstrheat%WL_tot
572 else if( header_name ==
'!INITIAL_CONDITION' .or. header_name ==
'!INITIAL CONDITION' )
then
573 c_initial = c_initial+1
575 write(*,*)
'### Error: Fail in read in INITIAL CONDITION definition : ' ,c_initial
576 write(
ilog,*)
'### Error: Fail in read in INITIAL CONDITION definition : ', c_initial
580 else if( header_name ==
'!SECTION' )
then
581 c_section = c_section+1
583 write(*,*)
'### Error: Fail in read in SECTION definition : ' , c_section
584 write(
ilog,*)
'### Error: Fail in read in SECTION definition : ', c_section
588 else if( header_name ==
'!ELEMOPT' )
then
589 c_elemopt = c_elemopt+1
591 write(*,*)
'### Error: Fail in read in ELEMOPT definition : ' , c_elemopt
592 write(
ilog,*)
'### Error: Fail in read in ELEMOPT definition : ', c_elemopt
597 else if( header_name ==
'!MATERIAL' )
then
598 c_material = c_material+1
600 write(*,*)
'### Error: Fail in read in material definition : ' , c_material
601 write(
ilog,*)
'### Error: Fail in read in material definition : ', c_material
605 if(cache < hecmesh%material%n_mat)
then
606 if(
fstr_streqr( hecmesh%material%mat_name(cache), mname ))
then
612 do i=1,hecmesh%material%n_mat
613 if(
fstr_streqr( hecmesh%material%mat_name(i), mname ) )
then
621 write(*,*)
'### Error: Fail in read in material definition : ' , c_material
622 write(
ilog,*)
'### Error: Fail in read in material definition : ', c_material
625 fstrsolid%materials(cid)%name = mname
626 if(c_material>hecmesh%material%n_mat)
call initmaterial( fstrsolid%materials(cid) )
628 else if( header_name ==
'!ELASTIC' )
then
629 if( c_material >0 )
then
631 fstrsolid%materials(cid)%mtype, &
632 fstrsolid%materials(cid)%nlgeom_flag, &
633 fstrsolid%materials(cid)%variables, &
634 fstrsolid%materials(cid)%dict)/=0 )
then
635 write(*,*)
'### Error: Fail in read in elasticity definition : ' , cid
636 write(
ilog,*)
'### Error: Fail in read in elasticity definition : ', cid
640 else if( header_name ==
'!PLASTIC' )
then
643 fstrsolid%materials(cid)%mtype, &
644 fstrsolid%materials(cid)%nlgeom_flag, &
645 fstrsolid%materials(cid)%variables, &
646 fstrsolid%materials(cid)%table, &
647 fstrsolid%materials(cid)%dict)/=0 )
then
648 write(*,*)
'### Error: Fail in read in plasticity definition : ' , cid
649 write(
ilog,*)
'### Error: Fail in read in plasticity definition : ', cid
653 else if( header_name ==
'!HYPERELASTIC' )
then
656 fstrsolid%materials(cid)%mtype, &
657 fstrsolid%materials(cid)%nlgeom_flag, &
658 fstrsolid%materials(cid)%variables )/=0 )
then
659 write(*,*)
'### Error: Fail in read in elasticity definition : ' , cid
660 write(
ilog,*)
'### Error: Fail in read in elasticity definition : ', cid
664 else if( header_name ==
'!VISCOELASTIC' )
then
667 fstrsolid%materials(cid)%mtype, &
668 fstrsolid%materials(cid)%nlgeom_flag, &
669 fstrsolid%materials(cid)%dict)/=0 )
then
670 write(*,*)
'### Error: Fail in read in plasticity definition : ' , cid
671 write(
ilog,*)
'### Error: Fail in read in plasticity definition : ', cid
675 else if( header_name ==
'!TRS' )
then
678 write(*,*)
'### WARNING: TRS can only be defined for viscoelastic material! It is ignored! '
679 write(
ilog,*)
'### WARNING: TRS can only be defined for viscoelastic material! It is ignored! '
681 if(
fstr_ctrl_get_trs( ctrl, fstrsolid%materials(cid)%mtype, fstrsolid%materials(cid)%variables)/=0 )
then
682 write(*,*)
'### Error: Fail in read in TRS definition : ' , cid
683 write(
ilog,*)
'### Error: Fail in read in TRS definition : ', cid
688 else if( header_name ==
'!CREEP' )
then
691 fstrsolid%materials(cid)%mtype, &
692 fstrsolid%materials(cid)%nlgeom_flag, &
693 fstrsolid%materials(cid)%dict)/=0 )
then
694 write(*,*)
'### Error: Fail in read in plasticity definition : ' , cid
695 write(
ilog,*)
'### Error: Fail in read in plasticity definition : ', cid
699 else if( header_name ==
'!DENSITY' )
then
702 write(*,*)
'### Error: Fail in read in density definition : ' , cid
703 write(
ilog,*)
'### Error: Fail in read in density definition : ', cid
707 else if( header_name ==
'!EXPANSION_COEF' .or. header_name ==
'!EXPANSION_COEFF' .or. &
708 header_name ==
'!EXPANSION')
then
711 fstrsolid%materials(cid)%dict)/=0 )
then
712 write(*,*)
'### Error: Fail in read in expansion coefficient definition : ' , cid
713 write(
ilog,*)
'### Error: Fail in read in expansion coefficient definition : ', cid
717 else if( header_name ==
'!FLUID' )
then
718 if( c_material >0 )
then
720 fstrsolid%materials(cid)%mtype, &
721 fstrsolid%materials(cid)%nlgeom_flag, &
722 fstrsolid%materials(cid)%variables, &
723 fstrsolid%materials(cid)%dict)/=0 )
then
724 write(*,*)
'### Error: Fail in read in fluid definition : ' , cid
725 write(
ilog,*)
'### Error: Fail in read in fluid definition : ', cid
729 else if( header_name ==
'!SPRING_D' )
then
730 if( c_material >0 )
then
732 fstrsolid%materials(cid)%mtype, &
733 fstrsolid%materials(cid)%nlgeom_flag, &
734 fstrsolid%materials(cid)%variables_i, &
735 fstrsolid%materials(cid)%dict)/=0 )
then
736 write(*,*)
'### Error: Fail in read in spring_d definition : ' , cid
737 write(
ilog,*)
'### Error: Fail in read in spring_d definition : ', cid
741 else if( header_name ==
'!SPRING_A' )
then
742 if( c_material >0 )
then
744 fstrsolid%materials(cid)%mtype, &
745 fstrsolid%materials(cid)%nlgeom_flag, &
746 fstrsolid%materials(cid)%variables_i, &
747 fstrsolid%materials(cid)%dict)/=0 )
then
748 write(*,*)
'### Error: Fail in read in spring_a definition : ' , cid
749 write(
ilog,*)
'### Error: Fail in read in spring_a definition : ', cid
753 else if( header_name ==
'!DASHPOT_D' )
then
754 if( c_material >0 )
then
756 fstrsolid%materials(cid)%mtype, &
757 fstrsolid%materials(cid)%nlgeom_flag, &
758 fstrsolid%materials(cid)%variables_i, &
759 fstrsolid%materials(cid)%dict)/=0 )
then
760 write(*,*)
'### Error: Fail in read in spring_d definition : ' , cid
761 write(
ilog,*)
'### Error: Fail in read in spring_d definition : ', cid
765 else if( header_name ==
'!DASHPOT_A' )
then
766 if( c_material >0 )
then
768 fstrsolid%materials(cid)%mtype, &
769 fstrsolid%materials(cid)%nlgeom_flag, &
770 fstrsolid%materials(cid)%variables_i, &
771 fstrsolid%materials(cid)%dict)/=0 )
then
772 write(*,*)
'### Error: Fail in read in spring_a definition : ' , cid
773 write(
ilog,*)
'### Error: Fail in read in spring_a definition : ', cid
777 else if( header_name ==
'!USER_MATERIAL' )
then
780 fstrsolid%materials(cid)%nlgeom_flag, fstrsolid%materials(cid)%nfstatus, &
781 fstrsolid%materials(cid)%variables(101:) )/=0 )
then
782 write(*,*)
'### Error: Fail in read in user defined material : ' , cid
783 write(
ilog,*)
'### Error: Fail in read in user defined material : ', cid
790 else if( header_name ==
'!WRITE' )
then
792 if( islog == 1 )
then
794 outctrl%filename = trim(logfilename)
795 outctrl%filenum =
ilog
798 if( femap == 1 )
then
800 write( outctrl%filename, *)
'utable.',
myrank,
".dat"
801 outctrl%filenum =
iutb
803 open( unit=outctrl%filenum, file=outctrl%filename, status=
'REPLACE' )
805 if( result == 1 )
then
809 if( visual == 1 )
then
814 else if( header_name ==
'!OUTPUT_RES' )
then
817 write(*,*)
'### Error: Fail in read in node output definition : ' , c_output
818 write(
ilog,*)
'### Error: Fail in read in node output definition : ', c_output
821 if( fstrsolid%output_ctrl(c_output)%outinfo%grp_id_name /=
'ALL' )
then
823 do i=1,hecmesh%node_group%n_grp
824 if( fstrsolid%output_ctrl(c_output)%outinfo%grp_id_name == hecmesh%node_group%grp_name(i) )
then
825 fstrsolid%output_ctrl(c_output)%outinfo%grp_id = i;
exit
829 else if( header_name ==
'!OUTPUT_VIS' )
then
832 write(*,*)
'### Error: Fail in read in element output definition : ' , c_output
833 write(
ilog,*)
'### Error: Fail in read in element output definition : ', c_output
836 if( fstrsolid%output_ctrl(c_output)%outinfo%grp_id_name /=
'ALL' )
then
838 do i=1,hecmesh%node_group%n_grp
839 if( fstrsolid%output_ctrl(c_output)%outinfo%grp_id_name == hecmesh%node_group%grp_name(i) )
then
840 fstrsolid%output_ctrl(c_output)%outinfo%grp_id = i;
exit
844 else if( header_name ==
'!AUTOINC_PARAM' )
then
845 c_aincparam = c_aincparam + 1
847 write(*,*)
'### Error: Fail in read in AUTOINC_PARAM definition : ' , c_aincparam
848 write(
ilog,*)
'### Error: Fail in read in AUTOINC_PARAM definition : ', c_aincparam
851 else if( header_name ==
'!TIME_POINTS' )
then
852 c_timepoints = c_timepoints + 1
854 write(*,*)
'### Error: Fail in read in TIME_POINTS definition : ' , c_timepoints
855 write(
ilog,*)
'### Error: Fail in read in TIME_POINTS definition : ', c_timepoints
858 else if( header_name ==
'!CONTACT_PARAM' )
then
859 c_contactparam = c_contactparam + 1
861 write(*,*)
'### Error: Fail in read in CONTACT_PARAM definition : ' , c_contactparam
862 write(
ilog,*)
'### Error: Fail in read in CONTACT_PARAM definition : ', c_contactparam
865 else if( header_name ==
'!ULOAD' )
then
867 write(*,*)
'### Error: Fail in read in ULOAD definition : '
868 write(
ilog,*)
'### Error: Fail in read in ULOAD definition : '
872 else if( header_name ==
'!INCLUDE' )
then
873 ctrl_list(ictrl) = ctrl
878 write(*,*)
'### Error: Cannot open FSTR control file : ', input_filename
879 write(
ilog,*)
'### Error: Cannot open FSTR control file : ', input_filename
885 else if( header_name ==
'!END' )
then
896 ctrl = ctrl_list(ictrl)
904 if( .not. p%PARAM%nlgeom )
then
906 fstrsolid%materials(i)%nlgeom_flag = 0
910 if( fstrsolid%TEMP_ngrp_tot > 0 .or. fstrsolid%TEMP_irres > 0 )
then
911 allocate ( fstrsolid%temperature( hecmesh%n_node ) ,stat=ierror )
912 if( ierror /= 0 )
then
913 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, TEMPERATURE>'
914 write(
idbg,*)
' rank = ',
myrank,
' ierror = ',ierror
916 call hecmw_abort( hecmw_comm_get_comm())
919 allocate ( fstrsolid%last_temp( hecmesh%n_node ) ,stat=ierror )
920 if( ierror /= 0 )
then
921 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, LAST_TEMP>'
922 write(
idbg,*)
' rank = ',
myrank,
' ierror = ',ierror
924 call hecmw_abort( hecmw_comm_get_comm())
926 fstrsolid%last_temp = 0.d0
927 allocate ( fstrsolid%temp_bak( hecmesh%n_node ) ,stat=ierror )
928 if( ierror /= 0 )
then
929 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, TEMP_BAK>'
930 write(
idbg,*)
' rank = ',
myrank,
' ierror = ',ierror
932 call hecmw_abort( hecmw_comm_get_comm())
934 fstrsolid%temp_bak = 0.d0
937 if(
associated(fstrsolid%step_ctrl) )
then
938 fstrsolid%nstep_tot =
size(fstrsolid%step_ctrl)
942 if( p%PARAM%solution_type==
kststatic .and. p%PARAM%nlgeom )
then
943 write( *,* )
" ERROR: STEP not defined!"
944 write(
idbg,* )
"ERROR: STEP not defined!"
946 call hecmw_abort( hecmw_comm_get_comm())
949 if(
myrank==0 )
write(*,*)
"Step control not defined! Using default step=1"
950 fstrsolid%nstep_tot = 1
951 allocate( fstrsolid%step_ctrl(1) )
953 n = fstrsolid%BOUNDARY_ngrp_tot
954 if( n>0 )
allocate( fstrsolid%step_ctrl(1)%Boundary(n) )
956 fstrsolid%step_ctrl(1)%Boundary(i) = fstrsolid%BOUNDARY_ngrp_GRPID(i)
958 n = fstrsolid%CLOAD_ngrp_tot + fstrsolid%DLOAD_ngrp_tot + fstrsolid%TEMP_ngrp_tot + fstrsolid%SPRING_ngrp_tot
959 if( n>0 )
allocate( fstrsolid%step_ctrl(1)%Load(n) )
961 do i = 1, fstrsolid%CLOAD_ngrp_tot
963 fstrsolid%step_ctrl(1)%Load(n) = fstrsolid%CLOAD_ngrp_GRPID(i)
965 do i = 1, fstrsolid%DLOAD_ngrp_tot
967 fstrsolid%step_ctrl(1)%Load(n) = fstrsolid%DLOAD_ngrp_GRPID(i)
969 do i = 1, fstrsolid%TEMP_ngrp_tot
971 fstrsolid%step_ctrl(1)%Load(n) = fstrsolid%TEMP_ngrp_GRPID(i)
973 do i = 1, fstrsolid%SPRING_ngrp_tot
975 fstrsolid%step_ctrl(1)%Load(n) = fstrsolid%SPRING_ngrp_GRPID(i)
984 if( p%PARAM%solution_type ==
kstheat)
then
985 p%PARAM%fg_irres = fstrsolid%output_ctrl(3)%frequency
986 p%PARAM%fg_iwres = fstrsolid%output_ctrl(4)%frequency
990 do i=1,hecmesh%section%n_sect
991 cid = hecmesh%section%sect_mat_ID_item(i)
992 n = fstrsolid%materials(cid)%totallyr
993 if (n > n_totlyr)
then
997 p%SOLID%max_lyr = n_totlyr
1008 type(hecmwst_local_mesh),
target :: hecMESH
1011 integer :: ndof, ntotal, ierror, ic_type
1015 fstrsolid%BOUNDARY_ngrp_tot = 0
1016 fstrsolid%BOUNDARY_ngrp_rot = 0
1017 fstrsolid%CLOAD_ngrp_tot = 0
1018 fstrsolid%CLOAD_ngrp_rot = 0
1019 fstrsolid%DLOAD_ngrp_tot = 0
1020 fstrsolid%DLOAD_follow = 1
1021 fstrsolid%TEMP_ngrp_tot = 0
1022 fstrsolid%SPRING_ngrp_tot = 0
1023 fstrsolid%TEMP_irres = 0
1024 fstrsolid%TEMP_tstep = 1
1025 fstrsolid%TEMP_interval = 1
1026 fstrsolid%TEMP_rtype = 1
1027 fstrsolid%TEMP_factor = 1.d0
1028 fstrsolid%VELOCITY_ngrp_tot = 0
1029 fstrsolid%ACCELERATION_ngrp_tot = 0
1030 fstrsolid%COUPLE_ngrp_tot = 0
1032 fstrsolid%restart_nout= 0
1033 fstrsolid%is_smoothing_active = .false.
1040 type(hecmwst_local_mesh),
target :: hecMESH
1043 integer :: ndof, ntotal, ierror, ic_type
1046 ntotal=ndof*hecmesh%n_node
1048 allocate ( fstrsolid%GL( ntotal ) ,stat=ierror )
1049 if( ierror /= 0 )
then
1050 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, GL>'
1051 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1053 call hecmw_abort( hecmw_comm_get_comm())
1055 allocate ( fstrsolid%GL0( ntotal ) ,stat=ierror )
1056 if( ierror /= 0 )
then
1057 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, GL0>'
1058 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1060 call hecmw_abort( hecmw_comm_get_comm())
1062 allocate ( fstrsolid%EFORCE( ntotal ) ,stat=ierror )
1063 if( ierror /= 0 )
then
1064 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, EFORCE>'
1065 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1067 call hecmw_abort( hecmw_comm_get_comm())
1076 allocate ( fstrsolid%unode( ntotal ) ,stat=ierror )
1077 if( ierror /= 0 )
then
1078 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, unode>'
1079 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1081 call hecmw_abort( hecmw_comm_get_comm())
1083 allocate ( fstrsolid%unode_bak( ntotal ) ,stat=ierror )
1084 if( ierror /= 0 )
then
1085 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, unode>'
1086 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1088 call hecmw_abort( hecmw_comm_get_comm())
1090 allocate ( fstrsolid%dunode( ntotal ) ,stat=ierror )
1091 if( ierror /= 0 )
then
1092 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, dunode>'
1093 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1095 call hecmw_abort( hecmw_comm_get_comm())
1097 allocate ( fstrsolid%ddunode( ntotal ) ,stat=ierror )
1098 if( ierror /= 0 )
then
1099 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, ddunode>'
1100 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1102 call hecmw_abort( hecmw_comm_get_comm())
1104 allocate ( fstrsolid%QFORCE( ntotal ) ,stat=ierror )
1105 if( ierror /= 0 )
then
1106 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, QFORCE>'
1107 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1109 call hecmw_abort( hecmw_comm_get_comm())
1111 allocate ( fstrsolid%QFORCE_bak( ntotal ) ,stat=ierror )
1112 if( ierror /= 0 )
then
1113 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, QFORCE_bak>'
1114 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1116 call hecmw_abort( hecmw_comm_get_comm())
1119 fstrsolid%GL(:)=0.d0
1120 fstrsolid%GL0(:)=0.d0
1122 fstrsolid%unode(:) = 0.d0
1123 fstrsolid%unode_bak(:) = 0.d0
1124 fstrsolid%dunode(:) = 0.d0
1125 fstrsolid%ddunode(:) = 0.d0
1126 fstrsolid%QFORCE(:) = 0.d0
1127 fstrsolid%QFORCE_bak(:) = 0.d0
1128 fstrsolid%FACTOR( 1:2 ) = 0.d0
1131 fstrsolid%n_fix_mpc = hecmesh%mpc%n_mpc
1132 if( fstrsolid%n_fix_mpc>0 )
then
1133 allocate( fstrsolid%mpc_const( fstrsolid%n_fix_mpc ) )
1134 fstrsolid%mpc_const(:) = hecmesh%mpc%mpc_const(:)
1138 fstrsolid%FACTOR(2)=1.d0
1139 fstrsolid%FACTOR(1)=0.d0
1143 type(hecmwst_local_mesh),
target :: hecMESH
1146 logical,
allocatable :: is_selem_list(:)
1149 do isect=1,hecmesh%section%n_sect
1150 if( fstrsolid%sections(isect)%elemopt341 ==
kel341sesns ) fstrsolid%is_smoothing_active = .true.
1152 if( .not. fstrsolid%is_smoothing_active )
return
1154 allocate(is_selem_list(hecmesh%n_elem))
1155 is_selem_list(:) = .false.
1157 do i=1,hecmesh%n_elem
1158 isect= hecmesh%section_ID(i)
1159 if( hecmesh%elem_type(i) /= fe_tet4n ) cycle
1160 if( fstrsolid%sections(isect)%elemopt341 ==
kel341sesns ) is_selem_list(i) = .true.
1163 call hecmw_create_smoothing_element_connectivity(hecmesh,is_selem_list)
1165 deallocate(is_selem_list)
1171 type(hecmwst_local_mesh),
target :: hecMESH
1174 integer :: i, isect, nodlocal(fstrSOLID%max_ncon), iiS, nn, con_stf
1176 if( fstrsolid%max_ncon_stf > 20 ) fstrsolid%max_ncon_stf = 20
1178 do i=1,hecmesh%n_elem
1179 isect= hecmesh%section_ID(i)
1180 if( hecmesh%elem_type(i) /= fe_tet4n ) cycle
1181 if( fstrsolid%sections(isect)%elemopt341 /=
kel341sesns ) cycle
1182 iis = hecmesh%elem_node_index(i-1)
1183 nn = hecmesh%elem_node_index(i-1) - iis
1184 nodlocal(1:nn) = hecmesh%elem_node_item(iis+1:iis+nn)
1186 if( con_stf > fstrsolid%max_ncon_stf ) fstrsolid%max_ncon_stf = con_stf
1195 type(hecmwst_local_mesh),
target :: hecMESH
1198 integer :: i, j, ng, isect, ndof, id, nn, n_elem
1201 if( hecmesh%n_elem <=0 )
then
1202 stop
"no element defined!"
1205 fstrsolid%maxn_gauss = 0
1206 fstrsolid%max_ncon = 0
1212 n_elem = hecmesh%elem_type_index(hecmesh%n_elem_type)
1213 allocate( fstrsolid%elements(n_elem) )
1216 fstrsolid%elements(i)%etype = hecmesh%elem_type(i)
1217 if( hecmesh%elem_type(i)==301 ) fstrsolid%elements(i)%etype=111
1218 if (hecmw_is_etype_link(fstrsolid%elements(i)%etype)) cycle
1219 if (hecmw_is_etype_patch(fstrsolid%elements(i)%etype)) cycle
1221 if( ng > fstrsolid%maxn_gauss ) fstrsolid%maxn_gauss = ng
1222 if( ng > 0 )
allocate( fstrsolid%elements(i)%gausses( ng ) )
1224 isect= hecmesh%section_ID(i)
1227 id=hecmesh%section%sect_opt(isect)
1229 fstrsolid%elements(i)%iset=1
1230 else if( id==1)
then
1231 fstrsolid%elements(i)%iset=0
1232 else if( id==2)
then
1233 fstrsolid%elements(i)%iset=2
1237 if( isect<0 .or. isect>hecmesh%section%n_sect ) &
1238 stop
"Error in element's section definition"
1239 id = hecmesh%section%sect_mat_ID_item(isect)
1240 fstrsolid%materials(id)%cdsys_ID = hecmesh%section%sect_orien_ID(isect)
1242 fstrsolid%elements(i)%gausses(j)%pMaterial => fstrsolid%materials(id)
1246 nn = hecmesh%elem_node_index(i)-hecmesh%elem_node_index(i-1)
1247 allocate(fstrsolid%elements(i)%equiForces(nn*ndof))
1248 fstrsolid%elements(i)%equiForces = 0.0d0
1249 if( nn > fstrsolid%max_ncon ) fstrsolid%max_ncon = nn
1251 if( hecmesh%elem_type(i)==361 )
then
1252 if( fstrsolid%sections(isect)%elemopt361==
kel361ic )
then
1253 allocate( fstrsolid%elements(i)%aux(3,3) )
1254 fstrsolid%elements(i)%aux = 0.0d0
1260 fstrsolid%max_ncon_stf = fstrsolid%max_ncon
1263 call hecmw_allreduce_i1(hecmesh,fstrsolid%maxn_gauss,hecmw_max)
1269 integer :: i, j, ierror
1270 if(
associated(fstrsolid%materials) )
then
1271 do j=1,
size(fstrsolid%materials)
1272 call finalizematerial(fstrsolid%materials(j))
1274 deallocate( fstrsolid%materials )
1276 if( .not.
associated(fstrsolid%elements ) )
return
1277 do i=1,
size(fstrsolid%elements)
1278 if(
associated(fstrsolid%elements(i)%gausses) )
then
1279 do j=1,
size(fstrsolid%elements(i)%gausses)
1280 call fstr_finalize_gauss(fstrsolid%elements(i)%gausses(j))
1282 deallocate( fstrsolid%elements(i)%gausses )
1284 if(
associated(fstrsolid%elements(i)%equiForces) )
then
1285 deallocate(fstrsolid%elements(i)%equiForces)
1287 if(
associated(fstrsolid%elements(i)%aux) )
then
1288 deallocate(fstrsolid%elements(i)%aux)
1292 deallocate( fstrsolid%elements )
1293 if(
associated( fstrsolid%mpc_const ) )
then
1294 deallocate( fstrsolid%mpc_const )
1297 if(
associated(fstrsolid%step_ctrl) )
then
1298 do i=1,
size(fstrsolid%step_ctrl)
1301 deallocate( fstrsolid%step_ctrl )
1303 if(
associated(fstrsolid%output_ctrl) )
then
1304 do i=1,
size(fstrsolid%output_ctrl)
1305 if( fstrsolid%output_ctrl(i)%filenum==
iutb ) &
1306 close(fstrsolid%output_ctrl(i)%filenum)
1308 deallocate(fstrsolid%output_ctrl)
1310 if(
associated( fstrsolid%sections ) )
then
1311 deallocate( fstrsolid%sections )
1314 if(
associated(fstrsolid%GL) )
then
1315 deallocate(fstrsolid%GL ,stat=ierror)
1316 if( ierror /= 0 )
then
1317 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, GL>'
1319 call hecmw_abort( hecmw_comm_get_comm())
1322 if(
associated(fstrsolid%EFORCE) )
then
1323 deallocate(fstrsolid%EFORCE ,stat=ierror)
1324 if( ierror /= 0 )
then
1325 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, EFORCE>'
1327 call hecmw_abort( hecmw_comm_get_comm())
1330 if(
associated(fstrsolid%unode) )
then
1331 deallocate(fstrsolid%unode ,stat=ierror)
1332 if( ierror /= 0 )
then
1333 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, unode>'
1335 call hecmw_abort( hecmw_comm_get_comm())
1338 if(
associated(fstrsolid%unode_bak) )
then
1339 deallocate(fstrsolid%unode_bak ,stat=ierror)
1340 if( ierror /= 0 )
then
1341 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, unode_bak>'
1343 call hecmw_abort( hecmw_comm_get_comm())
1346 if(
associated(fstrsolid%dunode) )
then
1347 deallocate(fstrsolid%dunode ,stat=ierror)
1348 if( ierror /= 0 )
then
1349 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, dunode>'
1351 call hecmw_abort( hecmw_comm_get_comm())
1354 if(
associated(fstrsolid%ddunode) )
then
1355 deallocate(fstrsolid%ddunode ,stat=ierror)
1356 if( ierror /= 0 )
then
1357 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, ddunode>'
1359 call hecmw_abort( hecmw_comm_get_comm())
1362 if(
associated(fstrsolid%QFORCE) )
then
1363 deallocate(fstrsolid%QFORCE ,stat=ierror)
1364 if( ierror /= 0 )
then
1365 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, QFORCE>'
1367 call hecmw_abort( hecmw_comm_get_comm())
1370 if(
associated(fstrsolid%temperature) )
then
1371 deallocate(fstrsolid%temperature ,stat=ierror)
1372 if( ierror /= 0 )
then
1373 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, temperature>'
1375 call hecmw_abort( hecmw_comm_get_comm())
1378 if(
associated(fstrsolid%last_temp) )
then
1379 deallocate(fstrsolid%last_temp ,stat=ierror)
1380 if( ierror /= 0 )
then
1381 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, reftemp>'
1383 call hecmw_abort( hecmw_comm_get_comm())
1386 if(
associated(fstrsolid%temp_bak) )
then
1387 deallocate(fstrsolid%temp_bak ,stat=ierror)
1388 if( ierror /= 0 )
then
1389 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, reftemp>'
1391 call hecmw_abort( hecmw_comm_get_comm())
1396 if(
associated(fstrsolid%BOUNDARY_ngrp_GRPID) )
then
1397 deallocate(fstrsolid%BOUNDARY_ngrp_GRPID, stat=ierror)
1398 if( ierror /= 0 )
then
1399 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, BOUNDARY_ngrp_GRPID>'
1401 call hecmw_abort( hecmw_comm_get_comm())
1404 if(
associated(fstrsolid%BOUNDARY_ngrp_ID) )
then
1405 deallocate(fstrsolid%BOUNDARY_ngrp_ID, stat=ierror)
1406 if( ierror /= 0 )
then
1407 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, BOUNDARY_ngrp_ID>'
1409 call hecmw_abort( hecmw_comm_get_comm())
1412 if(
associated(fstrsolid%BOUNDARY_ngrp_type) )
then
1413 deallocate(fstrsolid%BOUNDARY_ngrp_type, stat=ierror)
1414 if( ierror /= 0 )
then
1415 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, BOUNDARY_ngrp_type>'
1417 call hecmw_abort( hecmw_comm_get_comm())
1420 if(
associated(fstrsolid%BOUNDARY_ngrp_val) )
then
1421 deallocate(fstrsolid%BOUNDARY_ngrp_val, stat=ierror)
1422 if( ierror /= 0 )
then
1423 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, BOUNDARY_ngrp_val>'
1425 call hecmw_abort( hecmw_comm_get_comm())
1428 if(
associated(fstrsolid%BOUNDARY_ngrp_amp) )
then
1429 deallocate(fstrsolid%BOUNDARY_ngrp_amp, stat=ierror)
1430 if( ierror /= 0 )
then
1431 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, BOUNDARY_ngrp_amp>'
1433 call hecmw_abort( hecmw_comm_get_comm())
1436 if(
associated(fstrsolid%BOUNDARY_ngrp_istot) )
then
1437 deallocate(fstrsolid%BOUNDARY_ngrp_istot, stat=ierror)
1438 if( ierror /= 0 )
then
1439 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, BOUNDARY_ngrp_istot>'
1441 call hecmw_abort( hecmw_comm_get_comm())
1444 if(
associated(fstrsolid%BOUNDARY_ngrp_rotID) )
then
1445 deallocate(fstrsolid%BOUNDARY_ngrp_rotID, stat=ierror)
1446 if( ierror /= 0 )
then
1447 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, BOUNDARY_ngrp_rotID>'
1449 call hecmw_abort( hecmw_comm_get_comm())
1452 if(
associated(fstrsolid%BOUNDARY_ngrp_centerID) )
then
1453 deallocate(fstrsolid%BOUNDARY_ngrp_centerID, stat=ierror)
1454 if( ierror /= 0 )
then
1455 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, BOUNDARY_ngrp_centerID>'
1457 call hecmw_abort( hecmw_comm_get_comm())
1462 if(
associated(fstrsolid%CLOAD_ngrp_GRPID) )
then
1463 deallocate(fstrsolid%CLOAD_ngrp_GRPID, stat=ierror)
1464 if( ierror /= 0 )
then
1465 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, CLOAD_ngrp_GRPID>'
1467 call hecmw_abort( hecmw_comm_get_comm())
1470 if(
associated(fstrsolid%CLOAD_ngrp_ID) )
then
1471 deallocate(fstrsolid%CLOAD_ngrp_ID, stat=ierror)
1472 if( ierror /= 0 )
then
1473 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, CLOAD_ngrp_ID>'
1475 call hecmw_abort( hecmw_comm_get_comm())
1478 if(
associated(fstrsolid%CLOAD_ngrp_DOF) )
then
1479 deallocate(fstrsolid%CLOAD_ngrp_DOF, stat=ierror)
1480 if( ierror /= 0 )
then
1481 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, CLOAD_ngrp_DOF>'
1483 call hecmw_abort( hecmw_comm_get_comm())
1486 if(
associated(fstrsolid%CLOAD_ngrp_val) )
then
1487 deallocate(fstrsolid%CLOAD_ngrp_val, stat=ierror)
1488 if( ierror /= 0 )
then
1489 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, CLOAD_ngrp_val>'
1491 call hecmw_abort( hecmw_comm_get_comm())
1494 if(
associated(fstrsolid%CLOAD_ngrp_amp) )
then
1495 deallocate(fstrsolid%CLOAD_ngrp_amp, stat=ierror)
1496 if( ierror /= 0 )
then
1497 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, CLOAD_ngrp_amp>'
1499 call hecmw_abort( hecmw_comm_get_comm())
1502 if(
associated(fstrsolid%CLOAD_ngrp_rotID) )
then
1503 deallocate(fstrsolid%CLOAD_ngrp_rotID, stat=ierror)
1504 if( ierror /= 0 )
then
1505 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, CLOAD_ngrp_rotID>'
1507 call hecmw_abort( hecmw_comm_get_comm())
1510 if(
associated(fstrsolid%CLOAD_ngrp_centerID) )
then
1511 deallocate(fstrsolid%CLOAD_ngrp_centerID, stat=ierror)
1512 if( ierror /= 0 )
then
1513 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, CLOAD_ngrp_centerID>'
1515 call hecmw_abort( hecmw_comm_get_comm())
1526 fstrheat%STEPtot = 0
1527 fstrheat%MATERIALtot = 0
1528 fstrheat%AMPLITUDEtot= 0
1529 fstrheat%T_FIX_tot = 0
1530 fstrheat%Q_NOD_tot = 0
1531 fstrheat%Q_VOL_tot = 0
1532 fstrheat%Q_SUF_tot = 0
1533 fstrheat%R_SUF_tot = 0
1534 fstrheat%H_SUF_tot = 0
1536 fstrheat%beta = -1.0d0
1545 fstreig%maxiter = 60
1547 fstreig%sigma = 0.0d0
1548 fstreig%tolerance = 1.0d-6
1549 fstreig%totalmass = 0.0d0
1556 fstrdynamic%idx_eqa = 1
1557 fstrdynamic%idx_resp = 1
1558 fstrdynamic%n_step = 1
1559 fstrdynamic%t_start = 0.0
1560 fstrdynamic%t_curr = 0.0d0
1561 fstrdynamic%t_end = 1.0
1562 fstrdynamic%t_delta = 1.0
1563 fstrdynamic%ganma = 0.5
1564 fstrdynamic%beta = 0.25
1565 fstrdynamic%idx_mas = 1
1566 fstrdynamic%idx_dmp = 1
1567 fstrdynamic%ray_m = 0.0
1568 fstrdynamic%ray_k = 0.0
1569 fstrdynamic%restart_nout = 0
1570 fstrdynamic%nout = 100
1571 fstrdynamic%ngrp_monit = 0
1572 fstrdynamic%nout_monit = 1
1573 fstrdynamic%iout_list(1) = 0
1574 fstrdynamic%iout_list(2) = 0
1575 fstrdynamic%iout_list(3) = 0
1576 fstrdynamic%iout_list(4) = 0
1577 fstrdynamic%iout_list(5) = 0
1578 fstrdynamic%iout_list(6) = 0
1586 type(hecmwst_local_mesh),
target :: hecMESH
1589 integer :: ierror, ndof,nnod
1593 if(fstrdynamic%idx_eqa == 11)
then
1594 allocate( fstrdynamic%DISP(ndof*nnod,3) ,stat=ierror )
1595 if( ierror /= 0 )
then
1596 write(
idbg,*)
'stop due to allocation error <fstr_solve_LINEAR_DYNAMIC, DISP>'
1597 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1599 call hecmw_abort( hecmw_comm_get_comm())
1601 allocate( fstrdynamic%VEL (ndof*nnod,1) ,stat=ierror )
1602 if( ierror /= 0 )
then
1603 write(
idbg,*)
'stop due to allocation error <fstr_solve_LINEAR_DYNAMIC, VEL>'
1604 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1606 call hecmw_abort( hecmw_comm_get_comm())
1608 allocate( fstrdynamic%ACC (ndof*nnod,1) ,stat=ierror )
1609 if( ierror /= 0 )
then
1610 write(
idbg,*)
'stop due to allocation error <fstr_solve_LINEAR_DYNAMIC, ACC>'
1611 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1613 call hecmw_abort( hecmw_comm_get_comm())
1616 allocate( fstrdynamic%DISP(ndof*nnod,2) ,stat=ierror )
1617 if( ierror /= 0 )
then
1618 write(
idbg,*)
'stop due to allocation error <fstr_solve_LINEAR_DYNAMIC, DISP>'
1619 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1621 call hecmw_abort( hecmw_comm_get_comm())
1623 allocate( fstrdynamic%VEL (ndof*nnod,2) ,stat=ierror )
1624 if( ierror /= 0 )
then
1625 write(
idbg,*)
'stop due to allocation error <fstr_solve_LINEAR_DYNAMIC, VEL>'
1626 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1628 call hecmw_abort( hecmw_comm_get_comm())
1630 allocate( fstrdynamic%ACC (ndof*nnod,2) ,stat=ierror )
1631 if( ierror /= 0 )
then
1632 write(
idbg,*)
'stop due to allocation error <fstr_solve_LINEAR_DYNAMIC, ACC>'
1633 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1635 call hecmw_abort( hecmw_comm_get_comm())
1640 allocate( fstrdynamic%VEC1(ndof*nnod) ,stat=ierror )
1641 if( ierror /= 0 )
then
1642 write(
idbg,*)
'stop due to allocation error <fstr_solve_LINEAR_DYNAMIC, VEC1>'
1643 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1645 call hecmw_abort( hecmw_comm_get_comm())
1647 allocate( fstrdynamic%VEC2(ndof*nnod) ,stat=ierror )
1648 if( ierror /= 0 )
then
1649 write(
idbg,*)
'stop due to allocation error <fstr_solve_LINEAR_DYNAMIC, VEC2>'
1650 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1652 call hecmw_abort( hecmw_comm_get_comm())
1654 allocate( fstrdynamic%VEC3(ndof*nnod) ,stat=ierror )
1655 if( ierror /= 0 )
then
1656 write(
idbg,*)
'stop due to allocation error <fstr_solve_LINEAR_DYNAMIC, VEC3>'
1657 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1659 call hecmw_abort( hecmw_comm_get_comm())
1669 if(
associated(fstrdynamic%DISP) ) &
1670 deallocate( fstrdynamic%DISP ,stat=ierror )
1671 if( ierror /= 0 )
then
1672 write(
idbg,*)
'stop due to deallocation error <fstr_solve_LINEAR_DYNAMIC, DISP>'
1674 call hecmw_abort( hecmw_comm_get_comm())
1676 if(
associated(fstrdynamic%VEL) ) &
1677 deallocate( fstrdynamic%VEL ,stat=ierror )
1678 if( ierror /= 0 )
then
1679 write(
idbg,*)
'stop due to deallocation error <fstr_solve_LINEAR_DYNAMIC, VEL>'
1681 call hecmw_abort( hecmw_comm_get_comm())
1683 if(
associated(fstrdynamic%ACC) ) &
1684 deallocate( fstrdynamic%ACC ,stat=ierror )
1685 if( ierror /= 0 )
then
1686 write(
idbg,*)
'stop due to deallocation error <fstr_solve_LINEAR_DYNAMIC, ACC>'
1688 call hecmw_abort( hecmw_comm_get_comm())
1690 if(
associated(fstrdynamic%VEC1) ) &
1691 deallocate( fstrdynamic%VEC1 ,stat=ierror )
1692 if( ierror /= 0 )
then
1693 write(
idbg,*)
'stop due to deallocation error <fstr_solve_LINEAR_DYNAMIC, VEC1>'
1695 call hecmw_abort( hecmw_comm_get_comm())
1697 if(
associated(fstrdynamic%VEC2) ) &
1698 deallocate( fstrdynamic%VEC2 ,stat=ierror )
1699 if( ierror /= 0 )
then
1700 write(
idbg,*)
'stop due to deallocation error <fstr_solve_LINEAR_DYNAMIC, VEC2>'
1702 call hecmw_abort( hecmw_comm_get_comm())
1704 if(
associated(fstrdynamic%VEC3) ) &
1705 deallocate( fstrdynamic%VEC3 ,stat=ierror )
1706 if( ierror /= 0 )
then
1707 write(
idbg,*)
'stop due to deallocation error <fstr_solve_LINEAR_DYNAMIC, VEC3>'
1709 call hecmw_abort( hecmw_comm_get_comm())
1721 integer(kind=kint) :: NDOF, n_node, n_elem, mdof
1722 mdof = (ndof*ndof+ndof)/2;
1723 allocate ( phys%STRAIN (mdof*n_node))
1724 allocate ( phys%STRESS (mdof*n_node))
1725 allocate ( phys%MISES ( n_node))
1726 allocate ( phys%ESTRAIN (mdof*n_elem))
1727 allocate ( phys%ESTRESS (mdof*n_elem))
1728 allocate ( phys%EMISES ( n_elem))
1729 allocate ( phys%EPLSTRAIN ( n_elem))
1730 allocate ( phys%ENQM (12*n_elem))
1735 integer(kind=kint) :: ctrl, i
1739 if( p%PARAM%solution_type ==
kststatic &
1740 .or. p%PARAM%solution_type ==
ksteigen &
1744 if( p%MESH%n_dof == 6 .or. p%SOLID%is_33shell == 1 )
then
1745 allocate ( p%SOLID%SHELL )
1747 allocate ( p%SOLID%SHELL%LAYER(p%SOLID%max_lyr) )
1748 do i=1,p%SOLID%max_lyr
1749 allocate ( p%SOLID%SHELL%LAYER(i)%PLUS )
1750 allocate ( p%SOLID%SHELL%LAYER(i)%MINUS )
1754 phys => p%SOLID%SHELL
1756 allocate ( p%SOLID%SOLID )
1757 phys => p%SOLID%SOLID
1760 p%SOLID%STRAIN => phys%STRAIN
1761 p%SOLID%STRESS => phys%STRESS
1762 p%SOLID%MISES => phys%MISES
1763 p%SOLID%ESTRAIN => phys%ESTRAIN
1764 p%SOLID%ESTRESS => phys%ESTRESS
1765 p%SOLID%EMISES => phys%EMISES
1766 p%SOLID%ENQM => phys%ENQM
1767 allocate( p%SOLID%REACTION( p%MESH%n_dof*p%MESH%n_node ) )
1770 if( p%PARAM%fg_visual ==
kon )
then
1774 call hecmw_barrier( p%MESH )
1776 if( p%HEAT%STEPtot == 0 )
then
1777 if( p%PARAM%analysis_n == 0 )
then
1784 p%PARAM%analysis_n = 1
1790 p%PARAM%eps = 1.0e-6
1797 p%HEAT%STEP_DLTIME = 0
1798 p%HEAT%STEP_EETIME = 0
1799 p%HEAT%STEP_DELMIN = 0
1800 p%HEAT%STEP_DELMAX = 0
1814 integer(kind=kint) :: ctrl
1815 integer(kind=kint) :: counter
1818 integer(kind=kint) :: rcode
1831 integer(kind=kint) :: ctrl
1832 integer(kind=kint) :: counter
1835 integer(kind=kint) :: rcode
1848 integer(kind=kint) :: ctrl
1849 integer(kind=kint) :: counter
1852 integer(kind=kint) :: rcode
1854 if( counter >= 2 )
then
1855 write(
ilog,*)
'### Error : !SOLVER exists twice in FSTR control file.'
1910 integer(kind=kint) :: ctrl
1911 type( hecmwst_local_mesh ) :: hecmesh
1913 type( tlocalcoordsys ) :: coordsys
1915 integer :: j, is, ie, grp_id(1)
1916 character(len=HECMW_NAME_LEN) :: grp_id_name(1)
1918 integer :: nid, dtype
1919 character(len=HECMW_NAME_LEN) :: data_fmt
1920 real(kind=kreal) :: fdum, xyza(3), xyzb(3), xyzc(3), ff1(3), ff2(3), ff3(3)
1925 coordsys%sys_type = 10
1928 data_fmt =
'COORDINATES,NODES '
1931 coordsys%sys_type = coordsys%sys_type + dtype
1934 coordsys%sys_name = grp_id_name(1)
1938 data_fmt =
"RRRRRRrrr "
1941 xyza(3), xyzb(1), xyzb(2), xyzb(3), xyzc(1), xyzc(2), xyzc(3) )/=0 )
return
1942 if( coordsys%sys_type==10 )
then
1944 fdum = dsqrt( dot_product(ff1, ff1) )
1945 if( fdum==0.d0 )
return
1949 coordsys%CoordSys(1,:) = ff1
1951 fdum = dsqrt( dot_product(ff3, ff3) )
1952 if( fdum==0.d0 )
return
1953 coordsys%CoordSys(3,:) = ff3/fdum
1955 call cross_product(coordsys%CoordSys(3,:), coordsys%CoordSys(1,:), coordsys%CoordSys(2,:) )
1957 coordsys%CoordSys(1,:) = xyza
1958 coordsys%CoordSys(2,:) = xyzb
1962 coordsys%node_ID(3) = 0
1965 coordsys%node_ID(2), coordsys%node_ID(3) )/=0 )
return
1966 if( coordsys%node_ID(3) == 0 )
then
1968 if( nid/=0 .and. nid/=2 )
then
1969 write(*,*)
"We cannot define coordinate system using nodes in other CPU!"
1970 write(
idbg,*)
"We cannot define coordinate system using nodes in other CPU!"
1975 if( nid/=0 .and. nid/=3 )
then
1976 write(*,*)
"We cannot define coordinate system using nodes in other CPU!"
1977 write(
idbg,*)
"We cannot define coordinate system using nodes in other CPU!"
1993 integer(kind=kint) :: ctrl
1994 integer(kind=kint) :: counter
1996 character(HECMW_NAME_LEN) :: amp
1997 integer(kind=kint) :: amp_id
1999 integer(kind=kint) :: rcode, iproc
2011 integer(kind=kint) :: ctrl
2013 type(hecmwst_local_mesh) :: hecmesh
2014 integer,
pointer :: grp_id(:), dof(:)
2015 real(kind=kreal),
pointer :: temp(:)
2016 character(len=HECMW_NAME_LEN),
pointer :: grp_id_name(:)
2017 character(len=HECMW_NAME_LEN) :: data_fmt, ss
2018 integer :: i,j,n, is, ie, gid, nid, rcode
2022 ss =
'TEMPERATURE,VELOCITY,ACCELERATION '
2025 cond%cond_name =
"temperature"
2026 allocate( cond%intval(hecmesh%n_node) )
2027 allocate( cond%realval(hecmesh%n_node) )
2028 elseif( nid==2 )
then
2029 cond%cond_name =
"velocity"
2030 allocate( cond%intval(hecmesh%n_node) )
2031 allocate( cond%realval(hecmesh%n_node) )
2032 elseif( nid==3 )
then
2033 cond%cond_name =
"acceleration"
2034 allocate( cond%intval(hecmesh%n_node) )
2035 allocate( cond%realval(hecmesh%n_node) )
2045 allocate( temp(n), grp_id_name(n), grp_id(n), dof(n) )
2047 write(ss,*) hecmw_name_len
2049 write(data_fmt,
'(a,a,a)')
'S',trim(adjustl(ss)),
'R '
2053 write(data_fmt,
'(a,a,a)')
'S',trim(adjustl(ss)),
'IR '
2059 if(
associated(grp_id) )
deallocate( grp_id )
2060 if(
associated(temp) )
deallocate( temp )
2061 if(
associated(dof) )
deallocate( dof )
2062 if(
associated(grp_id_name) )
deallocate( grp_id_name )
2069 is = hecmesh%node_group%grp_index(gid-1) + 1
2070 ie = hecmesh%node_group%grp_index(gid )
2072 nid = hecmesh%node_group%grp_item(j)
2073 cond%realval(nid) = temp(i)
2074 cond%intval(nid) = dof(i)
2078 if(
associated(grp_id) )
deallocate( grp_id )
2079 if(
associated(temp) )
deallocate( temp )
2080 if(
associated(dof) )
deallocate( dof )
2081 if(
associated(grp_id_name) )
deallocate( grp_id_name )
2090 integer(kind=kint) :: ctrl
2091 integer(kind=kint) :: counter
2093 integer(kind=kint) :: res, visual, neutral
2095 integer(kind=kint) :: rcode
2099 if( res == 1 ) p%PARAM%fg_result = 1
2100 if( visual == 1 ) p%PARAM%fg_visual = 1
2101 if( neutral == 1 ) p%PARAM%fg_neutral = 1
2111 integer(kind=kint) :: ctrl
2112 integer(kind=kint) :: counter
2115 integer(kind=kint) :: rcode
2129 integer(kind=kint) :: ctrl
2130 integer(kind=kint) :: nout
2131 integer(kind=kint) :: version
2133 integer(kind=kint) :: rcode
2149 integer(kind=kint) :: ctrl
2150 integer(kind=kint) :: counter
2152 integer(kind=kint) :: rcode
2153 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
2154 integer(kind=kint) :: i, n, old_size, new_size
2156 if( p%SOLID%file_type /=
kbcffstr )
return
2160 old_size = p%SOLID%COUPLE_ngrp_tot
2161 new_size = old_size + n
2162 p%SOLID%COUPLE_ngrp_tot = new_size
2166 allocate( grp_id_name(n))
2168 p%PARAM%fg_couple_type, &
2169 p%PARAM%fg_couple_first, &
2170 p%PARAM%fg_couple_window, &
2171 grp_id_name, hecmw_name_len )
2175 n, grp_id_name, p%SOLID%COUPLE_ngrp_ID(old_size+1:))
2177 deallocate( grp_id_name )
2178 p%PARAM%fg_couple = 1
2188 integer(kind=kint) :: ctrl
2190 real(kind=kreal),
pointer :: val(:), table(:)
2191 character(len=HECMW_NAME_LEN) :: name
2192 integer :: nline, n, type_def, type_time, type_val, rcode
2195 if( nline<=0 )
return
2196 allocate( val(nline*4) )
2197 allocate( table(nline*4) )
2204 if(
associated(val) )
deallocate( val )
2205 if(
associated(table) )
deallocate( table )
2219 integer(kind=kint) :: ctrl
2220 integer(kind=kint) :: counter
2222 integer(kind=kint) :: rcode
2224 integer :: nout, nout_monit,node_monit_1 ,elem_monit_1 ,intg_monit_1
2225 integer :: ipt, idx_elpl, iout_list(6)
2226 real(kind=kreal) :: sig_y0, h_dash
2228 if( counter > 1 )
then
2235 if( ipt == 2 ) p%PARAM%nlgeom = .true.
2239 write(*,*)
"Warning : !STATIC : parameter 'TYPE=INFINITE' is deprecated." &
2240 & //
" Please use the replacement parameter 'TYPE=INFINITESIMAL'"
2248 nout, nout_monit, node_monit_1, &
2249 elem_monit_1, intg_monit_1 )
2262 integer(kind=kint) :: ctrl
2263 integer(kind=kint) :: counter
2266 integer(kind=kint) :: rcode
2267 integer(kind=kint) ::
type = 0
2268 character(HECMW_NAME_LEN) :: amp, rotc_name(1)
2269 integer(kind=kint) :: amp_id, rotc_id(1), n_rotc
2270 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
2271 integer(kind=kint),
pointer :: dof_ids (:)
2272 integer(kind=kint),
pointer :: dof_ide (:)
2273 real(kind=kreal),
pointer :: val_ptr(:)
2274 integer(kind=kint) :: i, n, old_size, new_size
2276 integer(kind=kint) :: gid, istot
2296 if( rotc_name(1) /=
' ' )
then
2297 if( istot /= 0 )
then
2298 write(*,*)
'fstr control file error : !BOUNDARY : rotational boundary cannot be specified with total value'
2299 write(
ilog,*)
'fstr control file error : !BOUNDARY : rotational boundary cannot be specified with total value'
2302 p%SOLID%BOUNDARY_ngrp_rot = p%SOLID%BOUNDARY_ngrp_rot + 1
2303 n_rotc = p%SOLID%BOUNDARY_ngrp_rot
2313 old_size = p%SOLID%BOUNDARY_ngrp_tot
2314 new_size = old_size + n
2315 p%SOLID%BOUNDARY_ngrp_tot = new_size
2325 allocate( grp_id_name(n) )
2326 allocate( dof_ids(n) )
2327 allocate( dof_ide(n) )
2330 val_ptr => p%SOLID%BOUNDARY_ngrp_val(old_size+1:)
2335 p%SOLID%BOUNDARY_ngrp_GRPID(old_size+1:new_size) = gid
2337 p%SOLID%BOUNDARY_ngrp_istot(old_size+1:new_size) = istot
2340 p%SOLID%BOUNDARY_ngrp_rotID(old_size+1:) = n_rotc
2341 p%SOLID%BOUNDARY_ngrp_centerID(old_size+1:) = rotc_id(1)
2344 if( (dof_ids(i) < 1).or.(6 < dof_ids(i)).or.(dof_ide(i) < 1).or.(6 < dof_ide(i)) )
then
2345 write(*,*)
'fstr control file error : !BOUNDARY : range of dof_ids and dof_ide is from 1 to 6'
2346 write(
ilog,*)
'fstr control file error : !BOUNDARY : range of dof_ids and dof_ide is from 1 to 6'
2349 p%SOLID%BOUNDARY_ngrp_type(old_size+i) = 10 * dof_ids(i) + dof_ide(i)
2350 p%SOLID%BOUNDARY_ngrp_amp(old_size+i) = amp_id
2353 deallocate( grp_id_name )
2354 deallocate( dof_ids )
2355 deallocate( dof_ide )
2372 integer(kind=kint) :: ctrl
2373 integer(kind=kint) :: counter
2376 integer(kind=kint) :: rcode
2377 character(HECMW_NAME_LEN) :: amp, rotc_name(1)
2378 integer(kind=kint) :: amp_id, rotc_id(1), n_rotc
2379 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
2380 real(kind=kreal),
pointer :: val_ptr(:)
2381 integer(kind=kint),
pointer :: id_ptr(:)
2382 integer(kind=kint) :: i, n, old_size, new_size
2383 integer(kind=kint) :: gid
2385 if( p%SOLID%file_type /=
kbcffstr )
return
2396 if( rotc_name(1) /=
' ' )
then
2397 p%SOLID%CLOAD_ngrp_rot = p%SOLID%CLOAD_ngrp_rot + 1
2398 n_rotc = p%SOLID%CLOAD_ngrp_rot
2404 old_size = p%SOLID%CLOAD_ngrp_tot
2405 new_size = old_size + n
2406 p%SOLID%CLOAD_ngrp_tot = new_size
2417 allocate( grp_id_name(n))
2419 val_ptr => p%SOLID%CLOAD_ngrp_val(old_size+1:)
2420 id_ptr =>p%SOLID%CLOAD_ngrp_DOF(old_size+1:)
2426 p%SOLID%CLOAD_ngrp_rotID(old_size+1:) = n_rotc
2427 p%SOLID%CLOAD_ngrp_centerID(old_size+1:) = rotc_id(1)
2431 p%SOLID%CLOAD_ngrp_amp(old_size+i) = amp_id
2433 p%SOLID%CLOAD_ngrp_GRPID(old_size+1:new_size) = gid
2436 deallocate( grp_id_name )
2443 include
'fstr_ctrl_freq.f90'
2451 real(kind=kreal),
pointer :: array(:,:)
2452 integer(kind=kint) :: old_size, new_size, i, j
2453 real(kind=kreal),
pointer :: temp(:,:)
2455 if( old_size >= new_size )
then
2459 if(
associated( array ) )
then
2460 allocate(temp(0:6, old_size))
2463 allocate(array(0:6, new_size))
2467 array(j,i) = temp(j,i)
2472 allocate(array(0:6, new_size))
2480 integer(kind=kint) :: ctrl
2481 integer(kind=kint) :: counter
2484 integer(kind=kint) :: rcode
2485 character(HECMW_NAME_LEN) :: amp
2486 integer(kind=kint) :: amp_id
2487 integer(kind=kint) :: follow
2488 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
2489 real(kind=kreal),
pointer :: new_params(:,:)
2490 logical,
pointer :: fg_surface(:)
2491 integer(kind=kint),
pointer :: lid_ptr(:)
2492 integer(kind=kint) :: i, j, n, old_size, new_size
2493 integer(kind=kint) :: gid
2495 if( p%SOLID%file_type /=
kbcffstr )
return
2502 old_size = p%SOLID%DLOAD_ngrp_tot
2503 new_size = old_size + n
2504 p%SOLID%DLOAD_ngrp_tot = new_size
2513 allocate( grp_id_name(n))
2514 allocate( new_params(0:6,n))
2515 allocate( fg_surface(n))
2518 follow = p%SOLID%DLOAD_follow
2519 if( .not. p%PARAM%nlgeom ) follow = 0
2520 lid_ptr => p%SOLID%DLOAD_ngrp_LID(old_size+1:)
2522 grp_id_name, hecmw_name_len, &
2523 lid_ptr, new_params )
2526 p%SOLID%DLOAD_follow = follow
2528 p%SOLID%DLOAD_ngrp_amp(old_size+i) = amp_id
2530 p%SOLID%DLOAD_ngrp_params(j,old_size+i) = new_params(j,i)
2532 fg_surface(i) = ( lid_ptr(i) == 100 )
2534 p%SOLID%DLOAD_ngrp_GRPID(old_size+1:new_size) = gid
2536 deallocate( grp_id_name )
2537 deallocate( new_params )
2538 deallocate( fg_surface )
2548 integer(kind=kint) :: ctrl
2549 integer(kind=kint) :: counter
2552 integer(kind=kint) :: rcode, gid
2553 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
2554 real(kind=kreal),
pointer :: val_ptr(:)
2555 integer(kind=kint) :: n, old_size, new_size
2557 if( p%SOLID%file_type /=
kbcffstr )
return
2563 old_size = p%SOLID%TEMP_ngrp_tot
2565 new_size = old_size + n
2567 new_size = old_size + 1
2573 allocate( grp_id_name(n))
2574 val_ptr => p%SOLID%TEMP_ngrp_val( old_size+1: )
2577 p%SOLID%TEMP_irres, &
2578 p%SOLID%TEMP_tstep, &
2579 p%SOLID%TEMP_interval, &
2580 p%SOLID%TEMP_rtype, &
2581 grp_id_name, hecmw_name_len, &
2585 p%SOLID%TEMP_ngrp_GRPID(old_size+1:new_size) = gid
2587 if( p%SOLID%TEMP_irres == 0 )
then
2588 p%SOLID%TEMP_ngrp_tot = new_size
2590 n, grp_id_name, p%SOLID%TEMP_ngrp_ID(old_size+1:))
2592 deallocate( grp_id_name )
2604 integer(kind=kint) :: ctrl
2605 integer(kind=kint) :: counter
2608 integer(kind=kint) :: rcode
2609 character(HECMW_NAME_LEN) :: amp
2610 integer(kind=kint) :: amp_id
2611 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
2612 real(kind=kreal),
pointer :: val_ptr(:)
2613 integer(kind=kint),
pointer :: id_ptr(:)
2614 integer(kind=kint) :: i, n, old_size, new_size
2615 integer(kind=kint) :: gid
2617 if( p%SOLID%file_type /=
kbcffstr )
return
2622 old_size = p%SOLID%SPRING_ngrp_tot
2623 new_size = old_size + n
2624 p%SOLID%SPRING_ngrp_tot = new_size
2631 allocate( grp_id_name(n))
2633 val_ptr => p%SOLID%SPRING_ngrp_val(old_size+1:)
2634 id_ptr =>p%SOLID%SPRING_ngrp_DOF(old_size+1:)
2641 p%SOLID%SPRING_ngrp_amp(old_size+i) = amp_id
2643 p%SOLID%SPRING_ngrp_GRPID(old_size+1:new_size) = gid
2646 deallocate( grp_id_name )
2657 integer(kind=kint) :: ctrl
2658 integer(kind=kint) :: counter
2661 integer(kind=kint) :: rcode
2679 integer(kind=kint) :: ctrl
2680 integer(kind=kint) :: counter
2683 integer(kind=kint) :: rcode
2684 integer(kind=kint) :: n
2685 character(len=HECMW_NAME_LEN) :: mName
2686 integer(kind=kint) :: i
2698 p%PARAM%analysis_n = n
2705 p%PARAM%eps = 1.0e-6
2706 p%PARAM%timepoint_id = 0
2717 if( rcode /= 0 )
then
2721 if(
associated(p%PARAM%timepoints) )
then
2722 do i=1,
size(p%PARAM%timepoints)
2723 if(
fstr_streqr( p%PARAM%timepoints(i)%name, mname ) )
then
2724 p%PARAM%timepoint_id = i;
exit
2735 p%HEAT%STEP_DLTIME = p%PARAM%dtime
2736 p%HEAT%STEP_EETIME = p%PARAM%etime
2737 p%HEAT%STEP_DELMIN = p%PARAM%dtmin
2738 p%HEAT%STEP_DELMAX = p%PARAM%delmax
2739 p%HEAT%timepoint_id = p%PARAM%timepoint_id
2749 integer(kind=kint) :: ctrl
2750 integer(kind=kint) :: counter
2753 integer(kind=kint) :: rcode
2754 character(HECMW_NAME_LEN) :: amp
2755 integer(kind=kint) :: amp_id
2756 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
2757 real(kind=kreal),
pointer :: value(:)
2758 integer(kind=kint) :: i, j, n, m, head, id, member_n, old_size, new_size
2759 integer(kind=kint),
pointer :: member(:)
2760 integer(kind=kint) :: local_id, rtc
2766 allocate( grp_id_name(n))
2771 grp_id_name, hecmw_name_len,
value )
2782 else if( rtc < 0 )
then
2788 deallocate( grp_id_name )
2794 old_size = p%HEAT%T_FIX_tot
2795 new_size = old_size + m
2799 p%HEAT%T_FIX_tot = new_size
2802 member => p%HEAT%T_FIX_node(head:)
2808 member(1) = local_id
2810 else if( rtc < 0 )
then
2811 member_n =
get_grp_member( p%MESH,
'node_grp', grp_id_name(i), member )
2816 member => member( member_n+1 : )
2819 p%HEAT%T_FIX_val (id) = value(i)
2820 p%HEAT%T_FIX_ampl (id) = amp_id
2825 deallocate( grp_id_name )
2836 integer(kind=kint) :: ctrl
2837 integer(kind=kint) :: counter
2840 integer(kind=kint) :: rcode
2841 character(HECMW_NAME_LEN) :: amp
2842 integer(kind=kint) :: amp_id
2843 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
2844 real(kind=kreal),
pointer :: value(:)
2845 integer(kind=kint) :: i, j, n, m, head, id, member_n, old_size, new_size
2846 integer(kind=kint),
pointer :: member(:)
2847 integer(kind=kint) :: local_id, rtc
2853 allocate( grp_id_name(n))
2858 grp_id_name, hecmw_name_len,
value )
2869 else if( rtc < 0 )
then
2875 deallocate( grp_id_name )
2881 old_size = p%HEAT%Q_NOD_tot
2882 new_size = old_size + m
2886 p%HEAT%Q_NOD_tot = new_size
2889 member => p%HEAT%Q_NOD_node(head:)
2894 member(1) = local_id
2896 else if( rtc < 0 )
then
2897 member_n =
get_grp_member( p%MESH,
'node_grp', grp_id_name(i), member )
2901 if( i<n ) member => member( member_n+1 : )
2903 p%HEAT%Q_NOD_val (id) = value(i)
2904 p%HEAT%Q_NOD_ampl (id) = amp_id
2909 deallocate( grp_id_name )
2921 integer(kind=kint) :: ctrl
2922 integer(kind=kint) :: counter
2925 integer(kind=kint) :: rcode
2926 character(HECMW_NAME_LEN) :: amp
2927 integer(kind=kint) :: amp_id
2928 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
2929 integer(kind=kint),
pointer :: load_type(:)
2930 real(kind=kreal),
pointer :: value(:)
2931 integer(kind=kint) :: i, j, n, m, head, id, member_n, old_size, new_size
2932 integer(kind=kint),
pointer :: member(:)
2933 integer(kind=kint) :: local_id, rtc
2939 allocate( grp_id_name(n))
2940 allocate( load_type(n))
2945 grp_id_name, hecmw_name_len, load_type,
value )
2955 else if( rtc < 0 )
then
2961 deallocate( grp_id_name )
2962 deallocate( load_type )
2968 old_size = p%HEAT%Q_SUF_tot
2969 new_size = old_size + m
2974 p%HEAT%Q_SUF_tot = new_size
2977 member => p%HEAT%Q_SUF_elem(head:)
2982 member(1) = local_id
2984 else if( rtc < 0 )
then
2985 member_n =
get_grp_member( p%MESH,
'elem_grp', grp_id_name(i), member )
2989 if( i<n ) member => member( member_n+1 : )
2991 p%HEAT%Q_SUF_surf (id) = load_type(i)
2992 p%HEAT%Q_SUF_val (id) = value(i)
2993 p%HEAT%Q_SUF_ampl (id) = amp_id
2998 deallocate( grp_id_name )
2999 deallocate( load_type )
3011 integer(kind=kint) :: ctrl
3012 integer(kind=kint) :: counter
3015 integer(kind=kint) :: rcode
3016 character(HECMW_NAME_LEN) :: amp
3017 integer(kind=kint) :: amp_id
3018 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
3019 real(kind=kreal),
pointer :: value(:)
3020 integer(kind=kint) :: i, j, n, m, head, id, member_n, old_size, new_size
3021 integer(kind=kint),
pointer :: member1(:), member2(:)
3027 allocate( grp_id_name(n))
3032 grp_id_name, hecmw_name_len,
value )
3043 deallocate( grp_id_name )
3049 old_size = p%HEAT%Q_SUF_tot
3050 new_size = old_size + m
3055 p%HEAT%Q_SUF_tot = new_size
3058 member1 => p%HEAT%Q_SUF_elem(head:)
3059 member2 => p%HEAT%Q_SUF_surf(head:)
3062 member_n =
get_grp_member( p%MESH,
'surf_grp', grp_id_name(i), member1, member2 )
3064 member1 => member1( member_n+1 : )
3065 member2 => member2( member_n+1 : )
3068 p%HEAT%Q_SUF_val (id) = value(i)
3069 p%HEAT%Q_SUF_ampl (id) = amp_id
3074 deallocate( grp_id_name )
3086 integer(kind=kint) :: ctrl
3087 integer(kind=kint) :: counter
3090 integer(kind=kint) :: rcode
3091 character(HECMW_NAME_LEN) :: amp1, amp2
3092 integer(kind=kint) :: amp_id1, amp_id2
3093 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
3094 integer(kind=kint),
pointer :: load_type(:)
3095 real(kind=kreal),
pointer :: value(:)
3096 real(kind=kreal),
pointer :: shink(:)
3097 integer(kind=kint) :: i, j, n, m, head, id, member_n, old_size, new_size
3098 integer(kind=kint),
pointer :: member(:)
3099 integer(kind=kint) :: local_id, rtc
3105 allocate( grp_id_name(n))
3106 allocate( load_type(n))
3114 grp_id_name, hecmw_name_len, load_type,
value, shink )
3125 else if( rtc < 0 )
then
3131 deallocate( grp_id_name )
3132 deallocate( load_type )
3139 old_size = p%HEAT%H_SUF_tot
3140 new_size = old_size + m
3145 p%HEAT%H_SUF_tot = new_size
3148 member => p%HEAT%H_SUF_elem(head:)
3153 member(1) = local_id
3155 else if( rtc < 0 )
then
3156 member_n =
get_grp_member( p%MESH,
'elem_grp', grp_id_name(i), member )
3160 if( i<n ) member => member( member_n+1 : )
3162 p%HEAT%H_SUF_surf (id) = load_type(i)
3163 p%HEAT%H_SUF_val (id,1) = value(i)
3164 p%HEAT%H_SUF_val (id,2) = shink(i)
3165 p%HEAT%H_SUF_ampl (id,1) = amp_id1
3166 p%HEAT%H_SUF_ampl (id,2) = amp_id2
3171 deallocate( grp_id_name )
3172 deallocate( load_type )
3185 integer(kind=kint) :: ctrl
3186 integer(kind=kint) :: counter
3189 integer(kind=kint) :: rcode
3190 character(HECMW_NAME_LEN) :: amp1, amp2
3191 integer(kind=kint) :: amp_id1, amp_id2
3192 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
3193 real(kind=kreal),
pointer :: value(:)
3194 real(kind=kreal),
pointer :: shink(:)
3195 integer(kind=kint) :: i, j, n, m, head, id, member_n, old_size, new_size
3196 integer(kind=kint),
pointer :: member1(:), member2(:)
3202 allocate( grp_id_name(n))
3209 grp_id_name, hecmw_name_len,
value, shink )
3221 deallocate( grp_id_name )
3228 old_size = p%HEAT%H_SUF_tot
3229 new_size = old_size + m
3234 p%HEAT%H_SUF_tot = new_size
3237 member1 => p%HEAT%H_SUF_elem(head:)
3238 member2 => p%HEAT%H_SUF_surf(head:)
3241 member_n =
get_grp_member( p%MESH,
'surf_grp', grp_id_name(i), member1, member2 )
3243 member1 => member1( member_n+1 : )
3244 member2 => member2( member_n+1 : )
3247 p%HEAT%H_SUF_val (id,1) = value(i)
3248 p%HEAT%H_SUF_val (id,2) = shink(i)
3249 p%HEAT%H_SUF_ampl (id,1) = amp_id1
3250 p%HEAT%H_SUF_ampl (id,2) = amp_id2
3255 deallocate( grp_id_name )
3268 integer(kind=kint) :: ctrl
3269 integer(kind=kint) :: counter
3272 integer(kind=kint) :: rcode
3273 character(HECMW_NAME_LEN) :: amp1, amp2
3274 integer(kind=kint) :: amp_id1, amp_id2
3275 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
3276 integer(kind=kint),
pointer :: load_type(:)
3277 real(kind=kreal),
pointer :: value(:)
3278 real(kind=kreal),
pointer :: shink(:)
3279 integer(kind=kint) :: i, j, n, m, head, id, member_n, old_size, new_size
3280 integer(kind=kint),
pointer :: member(:)
3281 integer(kind=kint) :: local_id, rtc
3287 allocate( grp_id_name(n))
3288 allocate( load_type(n))
3295 grp_id_name, hecmw_name_len, load_type,
value, shink )
3306 else if( rtc < 0 )
then
3312 deallocate( grp_id_name )
3313 deallocate( load_type )
3320 old_size = p%HEAT%R_SUF_tot
3321 new_size = old_size + m
3326 p%HEAT%R_SUF_tot = new_size
3329 member => p%HEAT%R_SUF_elem(head:)
3334 member(1) = local_id
3336 else if( rtc < 0 )
then
3337 member_n =
get_grp_member( p%MESH,
'elem_grp', grp_id_name(i), member )
3341 if( i<n ) member => member( member_n+1 : )
3343 p%HEAT%R_SUF_surf (id) = load_type(i)
3344 p%HEAT%R_SUF_val (id,1) = value(i)
3345 p%HEAT%R_SUF_val (id,2) = shink(i)
3346 p%HEAT%R_SUF_ampl (id,1) = amp_id1
3347 p%HEAT%R_SUF_ampl (id,2) = amp_id2
3352 deallocate( grp_id_name )
3353 deallocate( load_type )
3366 integer(kind=kint) :: ctrl
3367 integer(kind=kint) :: counter
3370 integer(kind=kint) :: rcode
3371 character(HECMW_NAME_LEN) :: amp1, amp2
3372 integer(kind=kint) :: amp_id1, amp_id2
3373 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
3374 real(kind=kreal),
pointer :: value(:)
3375 real(kind=kreal),
pointer :: shink(:)
3376 integer(kind=kint) :: i, j, n, m, head, id, member_n, old_size, new_size
3377 integer(kind=kint),
pointer :: member1(:), member2(:)
3383 allocate( grp_id_name(n))
3401 deallocate( grp_id_name )
3408 old_size = p%HEAT%R_SUF_tot
3409 new_size = old_size + m
3414 p%HEAT%R_SUF_tot = new_size
3417 member1 => p%HEAT%R_SUF_elem(head:)
3418 member2 => p%HEAT%R_SUF_surf(head:)
3421 member_n =
get_grp_member( p%MESH,
'surf_grp', grp_id_name(i), member1, member2 )
3423 member1 => member1( member_n+1 : )
3424 member2 => member2( member_n+1 : )
3427 p%HEAT%R_SUF_val (id,1) = value(i)
3428 p%HEAT%R_SUF_val (id,2) = shink(i)
3429 p%HEAT%R_SUF_ampl (id,1) = amp_id1
3430 p%HEAT%R_SUF_ampl (id,2) = amp_id2
3435 deallocate( grp_id_name )
3451 integer(kind=kint) :: ctrl
3452 integer(kind=kint) :: counter
3455 integer(kind=kint) :: rcode
3473 integer(kind=kint) :: ctrl
3474 integer(kind=kint) :: counter
3476 integer(kind=kint) :: rcode
3477 character(HECMW_NAME_LEN) :: grp_id_name(1)
3478 integer(kind=kint) :: grp_id(1)
3495 grp_id_name(1), hecmw_name_len, &
3501 if (p%DYN%idx_resp == 1)
then
3503 p%DYN%ngrp_monit = grp_id(1)
3505 read(grp_id_name,*) p%DYN%ngrp_monit
3517 integer(kind=kint) :: ctrl
3518 integer(kind=kint) :: counter
3521 integer(kind=kint) :: rcode
3522 integer(kind=kint) :: vType
3523 character(HECMW_NAME_LEN) :: amp
3524 integer(kind=kint) :: amp_id
3525 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
3526 integer(kind=kint),
pointer :: dof_ids (:)
3527 integer(kind=kint),
pointer :: dof_ide (:)
3528 real(kind=kreal),
pointer :: val_ptr(:)
3529 integer(kind=kint) :: i, j, n, old_size, new_size
3533 old_size = p%SOLID%VELOCITY_ngrp_tot
3534 new_size = old_size + n
3535 p%SOLID%VELOCITY_ngrp_tot = new_size
3542 allocate( grp_id_name(n))
3543 allocate( dof_ids(n))
3544 allocate( dof_ide(n))
3547 val_ptr => p%SOLID%VELOCITY_ngrp_val(old_size+1:)
3550 grp_id_name, hecmw_name_len, &
3551 dof_ids, dof_ide, val_ptr )
3553 p%SOLID%VELOCITY_type = vtype
3554 if( vtype ==
kbcinitial ) p%DYN%VarInitialize = .true.
3557 n, grp_id_name, p%SOLID%VELOCITY_ngrp_ID(old_size+1:))
3561 if( (dof_ids(i) < 1).or.(6 < dof_ids(i)).or.(dof_ide(i) < 1).or.(6 < dof_ide(i)) )
then
3562 write(
ilog,*)
'fstr control file error : !VELOCITY : range of dof_ids and dof_ide is from 1 to 6'
3565 p%SOLID%VELOCITY_ngrp_type(j) = 10 * dof_ids(i) + dof_ide(i)
3566 p%SOLID%VELOCITY_ngrp_amp(j) = amp_id
3570 deallocate( grp_id_name )
3571 deallocate( dof_ids )
3572 deallocate( dof_ide )
3583 integer(kind=kint) :: ctrl
3584 integer(kind=kint) :: counter
3587 integer(kind=kint) :: rcode
3588 integer(kind=kint) :: aType
3589 character(HECMW_NAME_LEN) :: amp
3590 integer(kind=kint) :: amp_id
3591 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
3592 integer(kind=kint),
pointer :: dof_ids (:)
3593 integer(kind=kint),
pointer :: dof_ide (:)
3594 real(kind=kreal),
pointer :: val_ptr(:)
3595 integer(kind=kint) :: i, j, n, old_size, new_size
3600 old_size = p%SOLID%ACCELERATION_ngrp_tot
3601 new_size = old_size + n
3602 p%SOLID%ACCELERATION_ngrp_tot = new_size
3609 allocate( grp_id_name(n))
3610 allocate( dof_ids(n))
3611 allocate( dof_ide(n))
3614 val_ptr => p%SOLID%ACCELERATION_ngrp_val(old_size+1:)
3617 grp_id_name, hecmw_name_len, &
3618 dof_ids, dof_ide, val_ptr)
3620 p%SOLID%ACCELERATION_type = atype
3621 if( atype ==
kbcinitial )p%DYN%VarInitialize = .true.
3624 n, grp_id_name, p%SOLID%ACCELERATION_ngrp_ID(old_size+1:))
3628 if( (dof_ids(i) < 1).or.(6 < dof_ids(i)).or.(dof_ide(i) < 1).or.(6 < dof_ide(i)) )
then
3629 write(
ilog,*)
'fstr control file error : !ACCELERATION : range of dof_ids and dof_ide is from 1 to 6'
3632 p%SOLID%ACCELERATION_ngrp_type(j) = 10 * dof_ids(i) + dof_ide(i)
3633 p%SOLID%ACCELERATION_ngrp_amp(j) = amp_id
3637 deallocate( grp_id_name )
3638 deallocate( dof_ids )
3639 deallocate( dof_ide )
3653 integer(kind=kint) :: ctrl
3654 integer(kind=kint) :: counter
3657 integer(kind=kint) :: rcode
3703 integer(kind=kint) :: ctrl
3704 type (hecmwST_local_mesh) :: hecMESH
3705 type (fstr_solid ) :: fstrSOLID
3706 write(
ilog,*)
'### Error : In !BOUNDARY, TYPE=NASTRAN is not supported.'
3707 call hecmw_abort( hecmw_comm_get_comm())
3716 integer(kind=kint) :: ctrl
3720 integer(kind=kint) :: rcode
3734 integer(kind=kint) :: ctrl
3737 integer(kind=kint) :: rcode, nid
3738 character(len=HECMW_NAME_LEN) :: data_fmt
3740 data_fmt =
'SOLUTION,MATERIAL '
3753 type(hecmwst_local_mesh),
pointer :: hecMESH
3754 integer(kind=kint) :: n, i, sgrp_id, ngrp_id, ngrp_id2
3756 n = hecmesh%contact_pair%n_pair
3758 if( hecmesh%contact_pair%type(i) /= hecmw_contact_type_surf_surf ) cycle
3759 sgrp_id = hecmesh%contact_pair%slave_grp_id(i)
3762 hecmesh%contact_pair%type(i) = hecmw_contact_type_node_surf
3763 hecmesh%contact_pair%slave_grp_id(i) = ngrp_id