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, c_contact_if
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; c_contact_if = 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 ==
'!CONTACT_INTERFERENCE' )
then
205 c_contact_if = c_contact_if + n
206 else if( header_name ==
'!MATERIAL' )
then
207 c_material = c_material + 1
208 else if( header_name ==
'!TEMPERATURE' )
then
209 c_temperature = c_temperature + 1
211 else if( header_name ==
'!SPRING' )
then
212 c_spring = c_spring + 1
214 else if( header_name ==
'!REFTEMP' )
then
215 c_reftemp = c_reftemp + 1
220 else if( header_name ==
'!HEAT' )
then
222 else if( header_name ==
'!FIXTEMP' )
then
223 c_fixtemp = c_fixtemp + 1
225 else if( header_name ==
'!CFLUX' )
then
226 c_cflux = c_cflux + 1
228 else if( header_name ==
'!DFLUX' )
then
229 c_dflux = c_dflux + 1
231 else if( header_name ==
'!SFLUX' )
then
232 c_sflux = c_sflux + 1
234 else if( header_name ==
'!FILM' )
then
237 else if( header_name ==
'!SFILM' )
then
238 c_sfilm = c_sfilm + 1
240 else if( header_name ==
'!RADIATE' )
then
241 c_radiate = c_radiate + 1
243 else if( header_name ==
'!SRADIATE' )
then
244 c_sradiate = c_sradiate + 1
246 else if( header_name ==
'!WELD_LINE' )
then
247 c_weldline = c_weldline + 1
251 else if( header_name ==
'!EIGEN' )
then
252 c_eigen = c_eigen + 1
257 else if( header_name ==
'!DYNAMIC' )
then
258 c_dynamic = c_dynamic + 1
260 else if( header_name ==
'!VELOCITY' )
then
261 c_velocity = c_velocity + 1
263 else if( header_name ==
'!ACCELERATION' )
then
264 c_acceleration = c_acceleration + 1
266 else if( header_name ==
'!FLOAD' )
then
267 c_fload = c_fload + 1
269 else if( header_name ==
'!EIGENREAD' )
then
270 c_eigenread = c_eigenread + 1
275 else if( header_name ==
'!COUPLE' )
then
276 c_couple = c_couple + 1
281 else if( header_name ==
'!MPC' )
then
287 else if( header_name ==
'!INCLUDE' )
then
288 ctrl_list(ictrl) = ctrl
293 write(*,*)
'### Error: Cannot open FSTR control file : ', input_filename
294 write(
ilog,*)
'### Error: Cannot open FSTR control file : ', input_filename
302 else if( header_name ==
'!END' )
then
313 ctrl = ctrl_list(ictrl)
320 fstrsolid%n_contacts = c_contact
321 if( c_contact>0 )
then
322 allocate( fstrsolid%contacts( c_contact ) )
326 fstrsolid%n_embeds = c_embed
327 if( c_embed>0 )
allocate( fstrsolid%embeds( c_embed ) )
328 if( c_weldline>0 )
allocate( fstrheat%weldline( c_weldline ) )
330 if( c_istep>0 )
allocate( fstrsolid%step_ctrl( c_istep ) )
331 if( c_localcoord>0 )
allocate( g_localcoordsys(c_localcoord) )
332 allocate( fstrparam%ainc(0:c_aincparam) )
336 if( c_timepoints>0 )
allocate( fstrparam%timepoints(c_timepoints) )
337 allocate( fstrparam%contactparam(0:c_contactparam) )
338 do i=0,c_contactparam
341 if( c_contact_if>0 )
then
342 allocate( fstrparam%contact_if( c_contact_if ) )
348 p%SOLID%is_33shell = 0
349 p%SOLID%is_33beam = 0
351 do i=1,hecmesh%n_elem_type
352 n = hecmesh%elem_type_item(i)
353 if (n == 781 .or. n == 761)
then
354 p%SOLID%is_33shell = 1
355 elseif (n == 641)
then
356 p%SOLID%is_33beam = 1
361 if( hecmesh%material%n_mat>n ) n= hecmesh%material%n_mat
362 if( n==0 ) stop
"material property not defined!"
363 allocate( fstrsolid%materials( n ) )
367 if( hecmesh%section%n_sect >0 )
then
368 do i=1,hecmesh%section%n_sect
369 if( hecmesh%section%sect_type(i) == 4 ) cycle
370 cid = hecmesh%section%sect_mat_ID_item(i)
371 if( cid>n ) stop
"Error in material property definition!"
372 if( fstrparam%nlgeom .or. fstrparam%solution_type==
kststaticeigen ) &
373 fstrsolid%materials(cid)%nlgeom_flag = 1
376 n_totlyr,alpha_over_mu, &
377 beam_radius,beam_angle1,beam_angle2,beam_angle3, &
378 beam_angle4,beam_angle5,beam_angle6)
379 fstrsolid%materials(cid)%name = hecmesh%material%mat_name(cid)
380 fstrsolid%materials(cid)%variables(
m_youngs)=ee
381 fstrsolid%materials(cid)%variables(
m_poisson)=pp
382 fstrsolid%materials(cid)%variables(
m_density)=rho
383 fstrsolid%materials(cid)%variables(
m_exapnsion)=alpha
384 fstrsolid%materials(cid)%variables(
m_thick)=thick
386 fstrsolid%materials(cid)%variables(
m_beam_radius)=beam_radius
387 fstrsolid%materials(cid)%variables(
m_beam_angle1)=beam_angle1
388 fstrsolid%materials(cid)%variables(
m_beam_angle2)=beam_angle2
389 fstrsolid%materials(cid)%variables(
m_beam_angle3)=beam_angle3
390 fstrsolid%materials(cid)%variables(
m_beam_angle4)=beam_angle4
391 fstrsolid%materials(cid)%variables(
m_beam_angle5)=beam_angle5
392 fstrsolid%materials(cid)%variables(
m_beam_angle6)=beam_angle6
393 fstrsolid%materials(cid)%mtype =
elastic
394 fstrsolid%materials(cid)%totallyr = n_totlyr
395 fstrsolid%materials(cid)%shell_var => shmat
400 allocate( fstrsolid%sections(hecmesh%section%n_sect) )
401 do i=1,hecmesh%section%n_sect
404 if( p%PARAM%nlgeom )
then
407 fstrsolid%sections(i)%elemopt361 =
kel361ic
409 else if( p%PARAM%solution_type==
ksteigen )
then
410 fstrsolid%sections(i)%elemopt361 =
kel361ic
414 fstrsolid%sections(i)%elemopt361 =
kel361fi
416 fstrsolid%sections(i)%elemopt341 =
kel341fi
419 allocate( fstrsolid%output_ctrl( 4 ) )
421 fstrsolid%output_ctrl( 1 )%filename = trim(logfilename)
422 fstrsolid%output_ctrl( 1 )%filenum =
ilog
445 fstrsolid%elemopt361 = 0
446 fstrsolid%AutoINC_stat = 0
447 fstrsolid%CutBack_stat = 0
448 fstrsolid%NRstat_i(:) = 0
449 fstrsolid%NRstat_r(:) = 0.d0
454 if( header_name ==
'!ORIENTATION' )
then
455 c_localcoord = c_localcoord + 1
457 write(*,*)
'### Error: Fail in read in ORIENTATION definition : ', c_localcoord
458 write(
ilog,*)
'### Error: Fail in read in ORIENTATION definition : ', c_localcoord
463 elseif( header_name ==
'!CONTACT' )
then
466 ,ee, pp, rho, alpha, p%PARAM%contact_algo, mname ) )
then
467 write(*,*)
'### Error: Fail in read in contact condition : ', c_contact
468 write(
ilog,*)
'### Error: Fail in read in contact condition : ', c_contact
472 do i=1,
size(fstrparam%contactparam)-1
473 if(
fstr_streqr( fstrparam%contactparam(i)%name, mname ) )
then
478 if( ee>0.d0 )
cdotp = ee
479 if( pp>0.d0 )
mut = pp
480 if( rho>0.d0 )
cgn = rho
481 if( alpha>0.d0 )
cgt = alpha
483 if( .not. fstr_contact_check( fstrsolid%contacts(c_contact+i), p%MESH ) )
then
484 write(*,*)
'### Error: Inconsistence in contact and surface definition : ' , i+c_contact
485 write(
ilog,*)
'### Error: Inconsistence in contact and surface definition : ', i+c_contact
489 isok = fstr_contact_init( fstrsolid%contacts(c_contact+i), p%MESH, fstrparam%contactparam(cparam_id),
myrank)
491 isok = fstr_contact_init( fstrsolid%contacts(c_contact+i), p%MESH, fstrparam%contactparam(cparam_id))
496 c_contact = c_contact+n
499 elseif( header_name ==
'!EMBED' )
then
501 if( .not.
fstr_ctrl_get_embed( ctrl, n, fstrsolid%embeds(c_embed+1:c_embed+n), mname ) )
then
502 write(*,*)
'### Error: Fail in read in embed condition : ', c_embed
503 write(
ilog,*)
'### Error: Fail in read in embed condition : ', c_embed
507 do i=1,
size(fstrparam%contactparam)-1
508 if(
fstr_streqr( fstrparam%contactparam(i)%name, mname ) )
then
513 if( .not. fstr_contact_check( fstrsolid%embeds(c_embed+i), p%MESH ) )
then
514 write(*,*)
'### Error: Inconsistence in contact and surface definition : ' , i+c_embed
515 write(
ilog,*)
'### Error: Inconsistence in contact and surface definition : ', i+c_embed
519 isok = fstr_embed_init( fstrsolid%embeds(c_embed+i), p%MESH, fstrparam%contactparam(cparam_id),
myrank)
521 isok = fstr_embed_init( fstrsolid%embeds(c_embed+i), p%MESH, fstrparam%contactparam(cparam_id))
527 else if( header_name ==
'!ISTEP' )
then
529 if( .not.
fstr_ctrl_get_istep( ctrl, hecmesh, fstrsolid%step_ctrl(c_istep), mname, mname2 ) )
then
530 write(*,*)
'### Error: Fail in read in step definition : ' , c_istep
531 write(
ilog,*)
'### Error: Fail in read in step definition : ', c_istep
534 if(
associated(fstrparam%timepoints) )
then
535 do i=1,
size(fstrparam%timepoints)
536 if(
fstr_streqr( fstrparam%timepoints(i)%name, mname ) )
then
537 fstrsolid%step_ctrl(c_istep)%timepoint_id = i;
exit
541 if(
associated(fstrparam%ainc) )
then
542 do i=1,
size(fstrparam%ainc)
543 if(
fstr_streqr( fstrparam%ainc(i)%name, mname2 ) )
then
544 fstrsolid%step_ctrl(c_istep)%AincParam_id = i;
exit
548 else if( header_name ==
'!STEP' .and. version>=1 )
then
550 if( .not.
fstr_ctrl_get_istep( ctrl, hecmesh, fstrsolid%step_ctrl(c_istep), mname, mname2 ) )
then
551 write(*,*)
'### Error: Fail in read in step definition : ' , c_istep
552 write(
ilog,*)
'### Error: Fail in read in step definition : ', c_istep
555 if(
associated(fstrparam%timepoints) )
then
556 do i=1,
size(fstrparam%timepoints)
557 if(
fstr_streqr( fstrparam%timepoints(i)%name, mname ) )
then
558 fstrsolid%step_ctrl(c_istep)%timepoint_id = i;
exit
562 if(
associated(fstrparam%ainc) )
then
563 do i=1,
size(fstrparam%ainc)-1
564 if(
fstr_streqr( fstrparam%ainc(i)%name, mname2 ) )
then
565 fstrsolid%step_ctrl(c_istep)%AincParam_id = i;
exit
570 else if( header_name ==
'!HEAT' )
then
574 else if( header_name ==
'!WELD_LINE' )
then
575 fstrheat%WL_tot = fstrheat%WL_tot+1
577 write(*,*)
'### Error: Fail in read in Weld Line definition : ' , fstrheat%WL_tot
578 write(
ilog,*)
'### Error: Fail in read in Weld Line definition : ', fstrheat%WL_tot
582 else if( header_name ==
'!INITIAL_CONDITION' .or. header_name ==
'!INITIAL CONDITION' )
then
583 c_initial = c_initial+1
585 write(*,*)
'### Error: Fail in read in INITIAL CONDITION definition : ' ,c_initial
586 write(
ilog,*)
'### Error: Fail in read in INITIAL CONDITION definition : ', c_initial
590 else if( header_name ==
'!SECTION' )
then
591 c_section = c_section+1
593 write(*,*)
'### Error: Fail in read in SECTION definition : ' , c_section
594 write(
ilog,*)
'### Error: Fail in read in SECTION definition : ', c_section
598 else if( header_name ==
'!ELEMOPT' )
then
599 c_elemopt = c_elemopt+1
601 write(*,*)
'### Error: Fail in read in ELEMOPT definition : ' , c_elemopt
602 write(
ilog,*)
'### Error: Fail in read in ELEMOPT definition : ', c_elemopt
607 else if( header_name ==
'!MATERIAL' )
then
608 c_material = c_material+1
610 write(*,*)
'### Error: Fail in read in material definition : ' , c_material
611 write(
ilog,*)
'### Error: Fail in read in material definition : ', c_material
615 if(cache < hecmesh%material%n_mat)
then
616 if(
fstr_streqr( hecmesh%material%mat_name(cache), mname ))
then
622 do i=1,hecmesh%material%n_mat
623 if(
fstr_streqr( hecmesh%material%mat_name(i), mname ) )
then
631 write(*,*)
'### Error: Fail in read in material definition : ' , c_material
632 write(
ilog,*)
'### Error: Fail in read in material definition : ', c_material
635 fstrsolid%materials(cid)%name = mname
636 if(c_material>hecmesh%material%n_mat)
call initmaterial( fstrsolid%materials(cid) )
638 else if( header_name ==
'!ELASTIC' )
then
639 if( c_material >0 )
then
641 fstrsolid%materials(cid)%mtype, &
642 fstrsolid%materials(cid)%nlgeom_flag, &
643 fstrsolid%materials(cid)%variables, &
644 fstrsolid%materials(cid)%dict)/=0 )
then
645 write(*,*)
'### Error: Fail in read in elasticity definition : ' , cid
646 write(
ilog,*)
'### Error: Fail in read in elasticity definition : ', cid
650 else if( header_name ==
'!PLASTIC' )
then
653 fstrsolid%materials(cid)%mtype, &
654 fstrsolid%materials(cid)%nlgeom_flag, &
655 fstrsolid%materials(cid)%variables, &
656 fstrsolid%materials(cid)%table, &
657 fstrsolid%materials(cid)%dict)/=0 )
then
658 write(*,*)
'### Error: Fail in read in plasticity definition : ' , cid
659 write(
ilog,*)
'### Error: Fail in read in plasticity definition : ', cid
663 else if( header_name ==
'!HYPERELASTIC' )
then
666 fstrsolid%materials(cid)%mtype, &
667 fstrsolid%materials(cid)%nlgeom_flag, &
668 fstrsolid%materials(cid)%variables )/=0 )
then
669 write(*,*)
'### Error: Fail in read in elasticity definition : ' , cid
670 write(
ilog,*)
'### Error: Fail in read in elasticity definition : ', cid
674 else if( header_name ==
'!VISCOELASTIC' )
then
677 fstrsolid%materials(cid)%mtype, &
678 fstrsolid%materials(cid)%nlgeom_flag, &
679 fstrsolid%materials(cid)%dict)/=0 )
then
680 write(*,*)
'### Error: Fail in read in plasticity definition : ' , cid
681 write(
ilog,*)
'### Error: Fail in read in plasticity definition : ', cid
685 else if( header_name ==
'!TRS' )
then
688 write(*,*)
'### WARNING: TRS can only be defined for viscoelastic material! It is ignored! '
689 write(
ilog,*)
'### WARNING: TRS can only be defined for viscoelastic material! It is ignored! '
691 if(
fstr_ctrl_get_trs( ctrl, fstrsolid%materials(cid)%mtype, fstrsolid%materials(cid)%variables)/=0 )
then
692 write(*,*)
'### Error: Fail in read in TRS definition : ' , cid
693 write(
ilog,*)
'### Error: Fail in read in TRS definition : ', cid
698 else if( header_name ==
'!CREEP' )
then
701 fstrsolid%materials(cid)%mtype, &
702 fstrsolid%materials(cid)%nlgeom_flag, &
703 fstrsolid%materials(cid)%dict)/=0 )
then
704 write(*,*)
'### Error: Fail in read in plasticity definition : ' , cid
705 write(
ilog,*)
'### Error: Fail in read in plasticity definition : ', cid
709 else if( header_name ==
'!DENSITY' )
then
712 write(*,*)
'### Error: Fail in read in density definition : ' , cid
713 write(
ilog,*)
'### Error: Fail in read in density definition : ', cid
717 else if( header_name ==
'!EXPANSION_COEF' .or. header_name ==
'!EXPANSION_COEFF' .or. &
718 header_name ==
'!EXPANSION')
then
721 fstrsolid%materials(cid)%dict)/=0 )
then
722 write(*,*)
'### Error: Fail in read in expansion coefficient definition : ' , cid
723 write(
ilog,*)
'### Error: Fail in read in expansion coefficient definition : ', cid
727 else if( header_name ==
'!FLUID' )
then
728 if( c_material >0 )
then
730 fstrsolid%materials(cid)%mtype, &
731 fstrsolid%materials(cid)%nlgeom_flag, &
732 fstrsolid%materials(cid)%variables, &
733 fstrsolid%materials(cid)%dict)/=0 )
then
734 write(*,*)
'### Error: Fail in read in fluid definition : ' , cid
735 write(
ilog,*)
'### Error: Fail in read in fluid definition : ', cid
739 else if( header_name ==
'!SPRING_D' )
then
740 if( c_material >0 )
then
742 fstrsolid%materials(cid)%mtype, &
743 fstrsolid%materials(cid)%nlgeom_flag, &
744 fstrsolid%materials(cid)%variables_i, &
745 fstrsolid%materials(cid)%dict)/=0 )
then
746 write(*,*)
'### Error: Fail in read in spring_d definition : ' , cid
747 write(
ilog,*)
'### Error: Fail in read in spring_d definition : ', cid
751 else if( header_name ==
'!SPRING_A' )
then
752 if( c_material >0 )
then
754 fstrsolid%materials(cid)%mtype, &
755 fstrsolid%materials(cid)%nlgeom_flag, &
756 fstrsolid%materials(cid)%variables_i, &
757 fstrsolid%materials(cid)%dict)/=0 )
then
758 write(*,*)
'### Error: Fail in read in spring_a definition : ' , cid
759 write(
ilog,*)
'### Error: Fail in read in spring_a definition : ', cid
763 else if( header_name ==
'!DASHPOT_D' )
then
764 if( c_material >0 )
then
766 fstrsolid%materials(cid)%mtype, &
767 fstrsolid%materials(cid)%nlgeom_flag, &
768 fstrsolid%materials(cid)%variables_i, &
769 fstrsolid%materials(cid)%dict)/=0 )
then
770 write(*,*)
'### Error: Fail in read in spring_d definition : ' , cid
771 write(
ilog,*)
'### Error: Fail in read in spring_d definition : ', cid
775 else if( header_name ==
'!DASHPOT_A' )
then
776 if( c_material >0 )
then
778 fstrsolid%materials(cid)%mtype, &
779 fstrsolid%materials(cid)%nlgeom_flag, &
780 fstrsolid%materials(cid)%variables_i, &
781 fstrsolid%materials(cid)%dict)/=0 )
then
782 write(*,*)
'### Error: Fail in read in spring_a definition : ' , cid
783 write(
ilog,*)
'### Error: Fail in read in spring_a definition : ', cid
787 else if( header_name ==
'!USER_MATERIAL' )
then
790 fstrsolid%materials(cid)%nlgeom_flag, fstrsolid%materials(cid)%nfstatus, &
791 fstrsolid%materials(cid)%variables(101:) )/=0 )
then
792 write(*,*)
'### Error: Fail in read in user defined material : ' , cid
793 write(
ilog,*)
'### Error: Fail in read in user defined material : ', cid
800 else if( header_name ==
'!WRITE' )
then
802 if( islog == 1 )
then
804 outctrl%filename = trim(logfilename)
805 outctrl%filenum =
ilog
808 if( femap == 1 )
then
810 write( outctrl%filename, *)
'utable.',
myrank,
".dat"
811 outctrl%filenum =
iutb
813 open( unit=outctrl%filenum, file=outctrl%filename, status=
'REPLACE' )
815 if( result == 1 )
then
819 if( visual == 1 )
then
824 else if( header_name ==
'!OUTPUT_RES' )
then
827 write(*,*)
'### Error: Fail in read in node output definition : ' , c_output
828 write(
ilog,*)
'### Error: Fail in read in node output definition : ', c_output
831 if( fstrsolid%output_ctrl(c_output)%outinfo%grp_id_name /=
'ALL' )
then
833 do i=1,hecmesh%node_group%n_grp
834 if( fstrsolid%output_ctrl(c_output)%outinfo%grp_id_name == hecmesh%node_group%grp_name(i) )
then
835 fstrsolid%output_ctrl(c_output)%outinfo%grp_id = i;
exit
839 else if( header_name ==
'!OUTPUT_VIS' )
then
842 write(*,*)
'### Error: Fail in read in element output definition : ' , c_output
843 write(
ilog,*)
'### Error: Fail in read in element output definition : ', c_output
846 if( fstrsolid%output_ctrl(c_output)%outinfo%grp_id_name /=
'ALL' )
then
848 do i=1,hecmesh%node_group%n_grp
849 if( fstrsolid%output_ctrl(c_output)%outinfo%grp_id_name == hecmesh%node_group%grp_name(i) )
then
850 fstrsolid%output_ctrl(c_output)%outinfo%grp_id = i;
exit
854 else if( header_name ==
'!AUTOINC_PARAM' )
then
855 c_aincparam = c_aincparam + 1
857 write(*,*)
'### Error: Fail in read in AUTOINC_PARAM definition : ' , c_aincparam
858 write(
ilog,*)
'### Error: Fail in read in AUTOINC_PARAM definition : ', c_aincparam
861 else if( header_name ==
'!TIME_POINTS' )
then
862 c_timepoints = c_timepoints + 1
864 write(*,*)
'### Error: Fail in read in TIME_POINTS definition : ' , c_timepoints
865 write(
ilog,*)
'### Error: Fail in read in TIME_POINTS definition : ', c_timepoints
868 else if( header_name ==
'!CONTACT_PARAM' )
then
869 c_contactparam = c_contactparam + 1
871 write(*,*)
'### Error: Fail in read in CONTACT_PARAM definition : ' , c_contactparam
872 write(
ilog,*)
'### Error: Fail in read in CONTACT_PARAM definition : ', c_contactparam
875 else if( header_name ==
'!CONTACT_INTERFERENCE' )
then
878 write(*,*)
'### Error: Fail in read in CONTACT_INTERFERENCE definition : ' , c_contact_if
879 write(
ilog,*)
'### Error: Fail in read in CONTACT_INTERFERENCE definition : ', c_contact_if
883 if( check_apply_contact_if(fstrparam%contact_if(c_contact_if+i), fstrsolid%contacts) /= 0)
then
884 write(*,*)
'### Error:(INTERFERENCE) Inconsistence of contact_pair in CONTACTS: ' , i+c_contact_if
885 write(
ilog,*)
'### Error:(INTERFERENCE) Inconsistence of contact_pair in CONTACTS: ', i+c_contact_if
889 c_contact_if = c_contact_if + n
890 else if( header_name ==
'!ULOAD' )
then
892 write(*,*)
'### Error: Fail in read in ULOAD definition : '
893 write(
ilog,*)
'### Error: Fail in read in ULOAD definition : '
897 else if( header_name ==
'!INCLUDE' )
then
898 ctrl_list(ictrl) = ctrl
903 write(*,*)
'### Error: Cannot open FSTR control file : ', input_filename
904 write(
ilog,*)
'### Error: Cannot open FSTR control file : ', input_filename
910 else if( header_name ==
'!END' )
then
921 ctrl = ctrl_list(ictrl)
929 if( .not. p%PARAM%nlgeom )
then
931 fstrsolid%materials(i)%nlgeom_flag = 0
935 if( fstrsolid%TEMP_ngrp_tot > 0 .or. fstrsolid%TEMP_irres > 0 )
then
936 allocate ( fstrsolid%temperature( hecmesh%n_node ) ,stat=ierror )
937 if( ierror /= 0 )
then
938 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, TEMPERATURE>'
939 write(
idbg,*)
' rank = ',
myrank,
' ierror = ',ierror
941 call hecmw_abort( hecmw_comm_get_comm())
944 allocate ( fstrsolid%last_temp( hecmesh%n_node ) ,stat=ierror )
945 if( ierror /= 0 )
then
946 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, LAST_TEMP>'
947 write(
idbg,*)
' rank = ',
myrank,
' ierror = ',ierror
949 call hecmw_abort( hecmw_comm_get_comm())
951 fstrsolid%last_temp = 0.d0
952 allocate ( fstrsolid%temp_bak( hecmesh%n_node ) ,stat=ierror )
953 if( ierror /= 0 )
then
954 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, TEMP_BAK>'
955 write(
idbg,*)
' rank = ',
myrank,
' ierror = ',ierror
957 call hecmw_abort( hecmw_comm_get_comm())
959 fstrsolid%temp_bak = 0.d0
962 if(
associated(fstrsolid%step_ctrl) )
then
963 fstrsolid%nstep_tot =
size(fstrsolid%step_ctrl)
967 if( p%PARAM%solution_type==
kststatic .and. p%PARAM%nlgeom )
then
968 write( *,* )
" ERROR: STEP not defined!"
969 write(
idbg,* )
"ERROR: STEP not defined!"
971 call hecmw_abort( hecmw_comm_get_comm())
974 if(
myrank==0 )
write(*,*)
"Step control not defined! Using default step=1"
975 fstrsolid%nstep_tot = 1
976 allocate( fstrsolid%step_ctrl(1) )
978 n = fstrsolid%BOUNDARY_ngrp_tot
979 if( n>0 )
allocate( fstrsolid%step_ctrl(1)%Boundary(n) )
981 fstrsolid%step_ctrl(1)%Boundary(i) = fstrsolid%BOUNDARY_ngrp_GRPID(i)
983 n = fstrsolid%CLOAD_ngrp_tot + fstrsolid%DLOAD_ngrp_tot + fstrsolid%TEMP_ngrp_tot + fstrsolid%SPRING_ngrp_tot
984 if( n>0 )
allocate( fstrsolid%step_ctrl(1)%Load(n) )
986 do i = 1, fstrsolid%CLOAD_ngrp_tot
988 fstrsolid%step_ctrl(1)%Load(n) = fstrsolid%CLOAD_ngrp_GRPID(i)
990 do i = 1, fstrsolid%DLOAD_ngrp_tot
992 fstrsolid%step_ctrl(1)%Load(n) = fstrsolid%DLOAD_ngrp_GRPID(i)
994 do i = 1, fstrsolid%TEMP_ngrp_tot
996 fstrsolid%step_ctrl(1)%Load(n) = fstrsolid%TEMP_ngrp_GRPID(i)
998 do i = 1, fstrsolid%SPRING_ngrp_tot
1000 fstrsolid%step_ctrl(1)%Load(n) = fstrsolid%SPRING_ngrp_GRPID(i)
1009 if( p%PARAM%solution_type ==
kstheat)
then
1010 p%PARAM%fg_irres = fstrsolid%output_ctrl(3)%frequency
1011 p%PARAM%fg_iwres = fstrsolid%output_ctrl(4)%frequency
1015 do i=1,hecmesh%section%n_sect
1016 cid = hecmesh%section%sect_mat_ID_item(i)
1017 n = fstrsolid%materials(cid)%totallyr
1018 if (n > n_totlyr)
then
1022 p%SOLID%max_lyr = n_totlyr
1033 type(hecmwst_local_mesh),
target :: hecMESH
1036 integer :: ndof, ntotal, ierror, ic_type
1040 fstrsolid%BOUNDARY_ngrp_tot = 0
1041 fstrsolid%BOUNDARY_ngrp_rot = 0
1042 fstrsolid%CLOAD_ngrp_tot = 0
1043 fstrsolid%CLOAD_ngrp_rot = 0
1044 fstrsolid%DLOAD_ngrp_tot = 0
1045 fstrsolid%DLOAD_follow = 1
1046 fstrsolid%TEMP_ngrp_tot = 0
1047 fstrsolid%SPRING_ngrp_tot = 0
1048 fstrsolid%TEMP_irres = 0
1049 fstrsolid%TEMP_tstep = 1
1050 fstrsolid%TEMP_interval = 1
1051 fstrsolid%TEMP_rtype = 1
1052 fstrsolid%TEMP_factor = 1.d0
1053 fstrsolid%VELOCITY_ngrp_tot = 0
1054 fstrsolid%ACCELERATION_ngrp_tot = 0
1055 fstrsolid%COUPLE_ngrp_tot = 0
1057 fstrsolid%restart_nout= 0
1058 fstrsolid%is_smoothing_active = .false.
1065 type(hecmwst_local_mesh),
target :: hecMESH
1068 integer :: ndof, ntotal, ierror, ic_type
1071 ntotal=ndof*hecmesh%n_node
1073 allocate ( fstrsolid%GL( ntotal ) ,stat=ierror )
1074 if( ierror /= 0 )
then
1075 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, GL>'
1076 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1078 call hecmw_abort( hecmw_comm_get_comm())
1080 allocate ( fstrsolid%GL0( ntotal ) ,stat=ierror )
1081 if( ierror /= 0 )
then
1082 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, GL0>'
1083 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1085 call hecmw_abort( hecmw_comm_get_comm())
1087 allocate ( fstrsolid%EFORCE( ntotal ) ,stat=ierror )
1088 if( ierror /= 0 )
then
1089 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, EFORCE>'
1090 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1092 call hecmw_abort( hecmw_comm_get_comm())
1101 allocate ( fstrsolid%unode( ntotal ) ,stat=ierror )
1102 if( ierror /= 0 )
then
1103 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, unode>'
1104 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1106 call hecmw_abort( hecmw_comm_get_comm())
1108 allocate ( fstrsolid%unode_bak( ntotal ) ,stat=ierror )
1109 if( ierror /= 0 )
then
1110 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, unode>'
1111 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1113 call hecmw_abort( hecmw_comm_get_comm())
1115 allocate ( fstrsolid%dunode( ntotal ) ,stat=ierror )
1116 if( ierror /= 0 )
then
1117 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, dunode>'
1118 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1120 call hecmw_abort( hecmw_comm_get_comm())
1122 allocate ( fstrsolid%ddunode( ntotal ) ,stat=ierror )
1123 if( ierror /= 0 )
then
1124 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, ddunode>'
1125 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1127 call hecmw_abort( hecmw_comm_get_comm())
1129 allocate ( fstrsolid%QFORCE( ntotal ) ,stat=ierror )
1130 if( ierror /= 0 )
then
1131 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, QFORCE>'
1132 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1134 call hecmw_abort( hecmw_comm_get_comm())
1136 allocate ( fstrsolid%QFORCE_bak( ntotal ) ,stat=ierror )
1137 if( ierror /= 0 )
then
1138 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, QFORCE_bak>'
1139 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1141 call hecmw_abort( hecmw_comm_get_comm())
1144 fstrsolid%GL(:)=0.d0
1145 fstrsolid%GL0(:)=0.d0
1147 fstrsolid%unode(:) = 0.d0
1148 fstrsolid%unode_bak(:) = 0.d0
1149 fstrsolid%dunode(:) = 0.d0
1150 fstrsolid%ddunode(:) = 0.d0
1151 fstrsolid%QFORCE(:) = 0.d0
1152 fstrsolid%QFORCE_bak(:) = 0.d0
1153 fstrsolid%FACTOR( 1:2 ) = 0.d0
1156 fstrsolid%n_fix_mpc = hecmesh%mpc%n_mpc
1157 if( fstrsolid%n_fix_mpc>0 )
then
1158 allocate( fstrsolid%mpc_const( fstrsolid%n_fix_mpc ) )
1159 fstrsolid%mpc_const(:) = hecmesh%mpc%mpc_const(:)
1163 fstrsolid%FACTOR(2)=1.d0
1164 fstrsolid%FACTOR(1)=0.d0
1168 type(hecmwst_local_mesh),
target :: hecMESH
1171 logical,
allocatable :: is_selem_list(:)
1174 do isect=1,hecmesh%section%n_sect
1175 if( fstrsolid%sections(isect)%elemopt341 ==
kel341sesns ) fstrsolid%is_smoothing_active = .true.
1177 if( .not. fstrsolid%is_smoothing_active )
return
1179 allocate(is_selem_list(hecmesh%n_elem))
1180 is_selem_list(:) = .false.
1182 do i=1,hecmesh%n_elem
1183 isect= hecmesh%section_ID(i)
1184 if( hecmesh%elem_type(i) /= fe_tet4n ) cycle
1185 if( fstrsolid%sections(isect)%elemopt341 ==
kel341sesns ) is_selem_list(i) = .true.
1188 call hecmw_create_smoothing_element_connectivity(hecmesh,is_selem_list)
1190 deallocate(is_selem_list)
1196 type(hecmwst_local_mesh),
target :: hecMESH
1199 integer :: i, isect, nodlocal(fstrSOLID%max_ncon), iiS, nn, con_stf
1201 if( fstrsolid%max_ncon_stf > 20 ) fstrsolid%max_ncon_stf = 20
1203 do i=1,hecmesh%n_elem
1204 isect= hecmesh%section_ID(i)
1205 if( hecmesh%elem_type(i) /= fe_tet4n ) cycle
1206 if( fstrsolid%sections(isect)%elemopt341 /=
kel341sesns ) cycle
1207 iis = hecmesh%elem_node_index(i-1)
1208 nn = hecmesh%elem_node_index(i-1) - iis
1209 nodlocal(1:nn) = hecmesh%elem_node_item(iis+1:iis+nn)
1211 if( con_stf > fstrsolid%max_ncon_stf ) fstrsolid%max_ncon_stf = con_stf
1220 type(hecmwst_local_mesh),
target :: hecMESH
1223 integer :: i, j, ng, isect, ndof, id, nn, n_elem
1226 if( hecmesh%n_elem <=0 )
then
1227 stop
"no element defined!"
1230 fstrsolid%maxn_gauss = 0
1231 fstrsolid%max_ncon = 0
1237 n_elem = hecmesh%elem_type_index(hecmesh%n_elem_type)
1238 allocate( fstrsolid%elements(n_elem) )
1241 fstrsolid%elements(i)%etype = hecmesh%elem_type(i)
1242 if( hecmesh%elem_type(i)==301 ) fstrsolid%elements(i)%etype=111
1243 if (hecmw_is_etype_link(fstrsolid%elements(i)%etype)) cycle
1244 if (hecmw_is_etype_patch(fstrsolid%elements(i)%etype)) cycle
1246 if( ng > fstrsolid%maxn_gauss ) fstrsolid%maxn_gauss = ng
1247 if( ng > 0 )
allocate( fstrsolid%elements(i)%gausses( ng ) )
1249 isect= hecmesh%section_ID(i)
1252 id=hecmesh%section%sect_opt(isect)
1254 fstrsolid%elements(i)%iset=1
1255 else if( id==1)
then
1256 fstrsolid%elements(i)%iset=0
1257 else if( id==2)
then
1258 fstrsolid%elements(i)%iset=2
1262 if( isect<0 .or. isect>hecmesh%section%n_sect ) &
1263 stop
"Error in element's section definition"
1264 id = hecmesh%section%sect_mat_ID_item(isect)
1265 fstrsolid%materials(id)%cdsys_ID = hecmesh%section%sect_orien_ID(isect)
1267 fstrsolid%elements(i)%gausses(j)%pMaterial => fstrsolid%materials(id)
1271 nn = hecmesh%elem_node_index(i)-hecmesh%elem_node_index(i-1)
1272 allocate(fstrsolid%elements(i)%equiForces(nn*ndof))
1273 fstrsolid%elements(i)%equiForces = 0.0d0
1274 if( nn > fstrsolid%max_ncon ) fstrsolid%max_ncon = nn
1276 if( hecmesh%elem_type(i)==361 )
then
1277 if( fstrsolid%sections(isect)%elemopt361==
kel361ic )
then
1278 allocate( fstrsolid%elements(i)%aux(3,3) )
1279 fstrsolid%elements(i)%aux = 0.0d0
1285 fstrsolid%max_ncon_stf = fstrsolid%max_ncon
1288 call hecmw_allreduce_i1(hecmesh,fstrsolid%maxn_gauss,hecmw_max)
1294 integer :: i, j, ierror
1295 if(
associated(fstrsolid%materials) )
then
1296 do j=1,
size(fstrsolid%materials)
1297 call finalizematerial(fstrsolid%materials(j))
1299 deallocate( fstrsolid%materials )
1301 if( .not.
associated(fstrsolid%elements ) )
return
1302 do i=1,
size(fstrsolid%elements)
1303 if(
associated(fstrsolid%elements(i)%gausses) )
then
1304 do j=1,
size(fstrsolid%elements(i)%gausses)
1305 call fstr_finalize_gauss(fstrsolid%elements(i)%gausses(j))
1307 deallocate( fstrsolid%elements(i)%gausses )
1309 if(
associated(fstrsolid%elements(i)%equiForces) )
then
1310 deallocate(fstrsolid%elements(i)%equiForces)
1312 if(
associated(fstrsolid%elements(i)%aux) )
then
1313 deallocate(fstrsolid%elements(i)%aux)
1317 deallocate( fstrsolid%elements )
1318 if(
associated( fstrsolid%mpc_const ) )
then
1319 deallocate( fstrsolid%mpc_const )
1322 if(
associated(fstrsolid%step_ctrl) )
then
1323 do i=1,
size(fstrsolid%step_ctrl)
1326 deallocate( fstrsolid%step_ctrl )
1328 if(
associated(fstrsolid%output_ctrl) )
then
1329 do i=1,
size(fstrsolid%output_ctrl)
1330 if( fstrsolid%output_ctrl(i)%filenum==
iutb ) &
1331 close(fstrsolid%output_ctrl(i)%filenum)
1333 deallocate(fstrsolid%output_ctrl)
1335 if(
associated( fstrsolid%sections ) )
then
1336 deallocate( fstrsolid%sections )
1339 if(
associated(fstrsolid%GL) )
then
1340 deallocate(fstrsolid%GL ,stat=ierror)
1341 if( ierror /= 0 )
then
1342 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, GL>'
1344 call hecmw_abort( hecmw_comm_get_comm())
1347 if(
associated(fstrsolid%EFORCE) )
then
1348 deallocate(fstrsolid%EFORCE ,stat=ierror)
1349 if( ierror /= 0 )
then
1350 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, EFORCE>'
1352 call hecmw_abort( hecmw_comm_get_comm())
1355 if(
associated(fstrsolid%unode) )
then
1356 deallocate(fstrsolid%unode ,stat=ierror)
1357 if( ierror /= 0 )
then
1358 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, unode>'
1360 call hecmw_abort( hecmw_comm_get_comm())
1363 if(
associated(fstrsolid%unode_bak) )
then
1364 deallocate(fstrsolid%unode_bak ,stat=ierror)
1365 if( ierror /= 0 )
then
1366 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, unode_bak>'
1368 call hecmw_abort( hecmw_comm_get_comm())
1371 if(
associated(fstrsolid%dunode) )
then
1372 deallocate(fstrsolid%dunode ,stat=ierror)
1373 if( ierror /= 0 )
then
1374 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, dunode>'
1376 call hecmw_abort( hecmw_comm_get_comm())
1379 if(
associated(fstrsolid%ddunode) )
then
1380 deallocate(fstrsolid%ddunode ,stat=ierror)
1381 if( ierror /= 0 )
then
1382 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, ddunode>'
1384 call hecmw_abort( hecmw_comm_get_comm())
1387 if(
associated(fstrsolid%QFORCE) )
then
1388 deallocate(fstrsolid%QFORCE ,stat=ierror)
1389 if( ierror /= 0 )
then
1390 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, QFORCE>'
1392 call hecmw_abort( hecmw_comm_get_comm())
1395 if(
associated(fstrsolid%temperature) )
then
1396 deallocate(fstrsolid%temperature ,stat=ierror)
1397 if( ierror /= 0 )
then
1398 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, temperature>'
1400 call hecmw_abort( hecmw_comm_get_comm())
1403 if(
associated(fstrsolid%last_temp) )
then
1404 deallocate(fstrsolid%last_temp ,stat=ierror)
1405 if( ierror /= 0 )
then
1406 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, reftemp>'
1408 call hecmw_abort( hecmw_comm_get_comm())
1411 if(
associated(fstrsolid%temp_bak) )
then
1412 deallocate(fstrsolid%temp_bak ,stat=ierror)
1413 if( ierror /= 0 )
then
1414 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, reftemp>'
1416 call hecmw_abort( hecmw_comm_get_comm())
1421 if(
associated(fstrsolid%BOUNDARY_ngrp_GRPID) )
then
1422 deallocate(fstrsolid%BOUNDARY_ngrp_GRPID, stat=ierror)
1423 if( ierror /= 0 )
then
1424 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, BOUNDARY_ngrp_GRPID>'
1426 call hecmw_abort( hecmw_comm_get_comm())
1429 if(
associated(fstrsolid%BOUNDARY_ngrp_ID) )
then
1430 deallocate(fstrsolid%BOUNDARY_ngrp_ID, stat=ierror)
1431 if( ierror /= 0 )
then
1432 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, BOUNDARY_ngrp_ID>'
1434 call hecmw_abort( hecmw_comm_get_comm())
1437 if(
associated(fstrsolid%BOUNDARY_ngrp_type) )
then
1438 deallocate(fstrsolid%BOUNDARY_ngrp_type, stat=ierror)
1439 if( ierror /= 0 )
then
1440 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, BOUNDARY_ngrp_type>'
1442 call hecmw_abort( hecmw_comm_get_comm())
1445 if(
associated(fstrsolid%BOUNDARY_ngrp_val) )
then
1446 deallocate(fstrsolid%BOUNDARY_ngrp_val, stat=ierror)
1447 if( ierror /= 0 )
then
1448 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, BOUNDARY_ngrp_val>'
1450 call hecmw_abort( hecmw_comm_get_comm())
1453 if(
associated(fstrsolid%BOUNDARY_ngrp_amp) )
then
1454 deallocate(fstrsolid%BOUNDARY_ngrp_amp, stat=ierror)
1455 if( ierror /= 0 )
then
1456 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, BOUNDARY_ngrp_amp>'
1458 call hecmw_abort( hecmw_comm_get_comm())
1461 if(
associated(fstrsolid%BOUNDARY_ngrp_istot) )
then
1462 deallocate(fstrsolid%BOUNDARY_ngrp_istot, stat=ierror)
1463 if( ierror /= 0 )
then
1464 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, BOUNDARY_ngrp_istot>'
1466 call hecmw_abort( hecmw_comm_get_comm())
1469 if(
associated(fstrsolid%BOUNDARY_ngrp_rotID) )
then
1470 deallocate(fstrsolid%BOUNDARY_ngrp_rotID, stat=ierror)
1471 if( ierror /= 0 )
then
1472 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, BOUNDARY_ngrp_rotID>'
1474 call hecmw_abort( hecmw_comm_get_comm())
1477 if(
associated(fstrsolid%BOUNDARY_ngrp_centerID) )
then
1478 deallocate(fstrsolid%BOUNDARY_ngrp_centerID, stat=ierror)
1479 if( ierror /= 0 )
then
1480 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, BOUNDARY_ngrp_centerID>'
1482 call hecmw_abort( hecmw_comm_get_comm())
1487 if(
associated(fstrsolid%CLOAD_ngrp_GRPID) )
then
1488 deallocate(fstrsolid%CLOAD_ngrp_GRPID, stat=ierror)
1489 if( ierror /= 0 )
then
1490 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, CLOAD_ngrp_GRPID>'
1492 call hecmw_abort( hecmw_comm_get_comm())
1495 if(
associated(fstrsolid%CLOAD_ngrp_ID) )
then
1496 deallocate(fstrsolid%CLOAD_ngrp_ID, stat=ierror)
1497 if( ierror /= 0 )
then
1498 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, CLOAD_ngrp_ID>'
1500 call hecmw_abort( hecmw_comm_get_comm())
1503 if(
associated(fstrsolid%CLOAD_ngrp_DOF) )
then
1504 deallocate(fstrsolid%CLOAD_ngrp_DOF, stat=ierror)
1505 if( ierror /= 0 )
then
1506 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, CLOAD_ngrp_DOF>'
1508 call hecmw_abort( hecmw_comm_get_comm())
1511 if(
associated(fstrsolid%CLOAD_ngrp_val) )
then
1512 deallocate(fstrsolid%CLOAD_ngrp_val, stat=ierror)
1513 if( ierror /= 0 )
then
1514 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, CLOAD_ngrp_val>'
1516 call hecmw_abort( hecmw_comm_get_comm())
1519 if(
associated(fstrsolid%CLOAD_ngrp_amp) )
then
1520 deallocate(fstrsolid%CLOAD_ngrp_amp, stat=ierror)
1521 if( ierror /= 0 )
then
1522 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, CLOAD_ngrp_amp>'
1524 call hecmw_abort( hecmw_comm_get_comm())
1527 if(
associated(fstrsolid%CLOAD_ngrp_rotID) )
then
1528 deallocate(fstrsolid%CLOAD_ngrp_rotID, stat=ierror)
1529 if( ierror /= 0 )
then
1530 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, CLOAD_ngrp_rotID>'
1532 call hecmw_abort( hecmw_comm_get_comm())
1535 if(
associated(fstrsolid%CLOAD_ngrp_centerID) )
then
1536 deallocate(fstrsolid%CLOAD_ngrp_centerID, stat=ierror)
1537 if( ierror /= 0 )
then
1538 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, CLOAD_ngrp_centerID>'
1540 call hecmw_abort( hecmw_comm_get_comm())
1551 fstrheat%STEPtot = 0
1552 fstrheat%MATERIALtot = 0
1553 fstrheat%AMPLITUDEtot= 0
1554 fstrheat%T_FIX_tot = 0
1555 fstrheat%Q_NOD_tot = 0
1556 fstrheat%Q_VOL_tot = 0
1557 fstrheat%Q_SUF_tot = 0
1558 fstrheat%R_SUF_tot = 0
1559 fstrheat%H_SUF_tot = 0
1561 fstrheat%beta = -1.0d0
1570 fstreig%maxiter = 60
1572 fstreig%sigma = 0.0d0
1573 fstreig%tolerance = 1.0d-6
1574 fstreig%totalmass = 0.0d0
1581 fstrdynamic%idx_eqa = 1
1582 fstrdynamic%idx_resp = 1
1583 fstrdynamic%n_step = 1
1584 fstrdynamic%t_start = 0.0
1585 fstrdynamic%t_curr = 0.0d0
1586 fstrdynamic%t_end = 1.0
1587 fstrdynamic%t_delta = 1.0
1588 fstrdynamic%ganma = 0.5
1589 fstrdynamic%beta = 0.25
1590 fstrdynamic%idx_mas = 1
1591 fstrdynamic%idx_dmp = 1
1592 fstrdynamic%ray_m = 0.0
1593 fstrdynamic%ray_k = 0.0
1594 fstrdynamic%restart_nout = 0
1595 fstrdynamic%nout = 100
1596 fstrdynamic%ngrp_monit = 0
1597 fstrdynamic%nout_monit = 1
1598 fstrdynamic%iout_list(1) = 0
1599 fstrdynamic%iout_list(2) = 0
1600 fstrdynamic%iout_list(3) = 0
1601 fstrdynamic%iout_list(4) = 0
1602 fstrdynamic%iout_list(5) = 0
1603 fstrdynamic%iout_list(6) = 0
1611 type(hecmwst_local_mesh),
target :: hecMESH
1614 integer :: ierror, ndof,nnod
1618 if(fstrdynamic%idx_eqa == 11)
then
1619 allocate( fstrdynamic%DISP(ndof*nnod,3) ,stat=ierror )
1620 if( ierror /= 0 )
then
1621 write(
idbg,*)
'stop due to allocation error <fstr_solve_LINEAR_DYNAMIC, DISP>'
1622 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1624 call hecmw_abort( hecmw_comm_get_comm())
1626 allocate( fstrdynamic%VEL (ndof*nnod,1) ,stat=ierror )
1627 if( ierror /= 0 )
then
1628 write(
idbg,*)
'stop due to allocation error <fstr_solve_LINEAR_DYNAMIC, VEL>'
1629 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1631 call hecmw_abort( hecmw_comm_get_comm())
1633 allocate( fstrdynamic%ACC (ndof*nnod,1) ,stat=ierror )
1634 if( ierror /= 0 )
then
1635 write(
idbg,*)
'stop due to allocation error <fstr_solve_LINEAR_DYNAMIC, ACC>'
1636 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1638 call hecmw_abort( hecmw_comm_get_comm())
1641 allocate( fstrdynamic%DISP(ndof*nnod,2) ,stat=ierror )
1642 if( ierror /= 0 )
then
1643 write(
idbg,*)
'stop due to allocation error <fstr_solve_LINEAR_DYNAMIC, DISP>'
1644 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1646 call hecmw_abort( hecmw_comm_get_comm())
1648 allocate( fstrdynamic%VEL (ndof*nnod,2) ,stat=ierror )
1649 if( ierror /= 0 )
then
1650 write(
idbg,*)
'stop due to allocation error <fstr_solve_LINEAR_DYNAMIC, VEL>'
1651 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1653 call hecmw_abort( hecmw_comm_get_comm())
1655 allocate( fstrdynamic%ACC (ndof*nnod,2) ,stat=ierror )
1656 if( ierror /= 0 )
then
1657 write(
idbg,*)
'stop due to allocation error <fstr_solve_LINEAR_DYNAMIC, ACC>'
1658 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1660 call hecmw_abort( hecmw_comm_get_comm())
1665 allocate( fstrdynamic%VEC1(ndof*nnod) ,stat=ierror )
1666 if( ierror /= 0 )
then
1667 write(
idbg,*)
'stop due to allocation error <fstr_solve_LINEAR_DYNAMIC, VEC1>'
1668 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1670 call hecmw_abort( hecmw_comm_get_comm())
1672 allocate( fstrdynamic%VEC2(ndof*nnod) ,stat=ierror )
1673 if( ierror /= 0 )
then
1674 write(
idbg,*)
'stop due to allocation error <fstr_solve_LINEAR_DYNAMIC, VEC2>'
1675 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1677 call hecmw_abort( hecmw_comm_get_comm())
1679 allocate( fstrdynamic%VEC3(ndof*nnod) ,stat=ierror )
1680 if( ierror /= 0 )
then
1681 write(
idbg,*)
'stop due to allocation error <fstr_solve_LINEAR_DYNAMIC, VEC3>'
1682 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
1684 call hecmw_abort( hecmw_comm_get_comm())
1694 if(
associated(fstrdynamic%DISP) ) &
1695 deallocate( fstrdynamic%DISP ,stat=ierror )
1696 if( ierror /= 0 )
then
1697 write(
idbg,*)
'stop due to deallocation error <fstr_solve_LINEAR_DYNAMIC, DISP>'
1699 call hecmw_abort( hecmw_comm_get_comm())
1701 if(
associated(fstrdynamic%VEL) ) &
1702 deallocate( fstrdynamic%VEL ,stat=ierror )
1703 if( ierror /= 0 )
then
1704 write(
idbg,*)
'stop due to deallocation error <fstr_solve_LINEAR_DYNAMIC, VEL>'
1706 call hecmw_abort( hecmw_comm_get_comm())
1708 if(
associated(fstrdynamic%ACC) ) &
1709 deallocate( fstrdynamic%ACC ,stat=ierror )
1710 if( ierror /= 0 )
then
1711 write(
idbg,*)
'stop due to deallocation error <fstr_solve_LINEAR_DYNAMIC, ACC>'
1713 call hecmw_abort( hecmw_comm_get_comm())
1715 if(
associated(fstrdynamic%VEC1) ) &
1716 deallocate( fstrdynamic%VEC1 ,stat=ierror )
1717 if( ierror /= 0 )
then
1718 write(
idbg,*)
'stop due to deallocation error <fstr_solve_LINEAR_DYNAMIC, VEC1>'
1720 call hecmw_abort( hecmw_comm_get_comm())
1722 if(
associated(fstrdynamic%VEC2) ) &
1723 deallocate( fstrdynamic%VEC2 ,stat=ierror )
1724 if( ierror /= 0 )
then
1725 write(
idbg,*)
'stop due to deallocation error <fstr_solve_LINEAR_DYNAMIC, VEC2>'
1727 call hecmw_abort( hecmw_comm_get_comm())
1729 if(
associated(fstrdynamic%VEC3) ) &
1730 deallocate( fstrdynamic%VEC3 ,stat=ierror )
1731 if( ierror /= 0 )
then
1732 write(
idbg,*)
'stop due to deallocation error <fstr_solve_LINEAR_DYNAMIC, VEC3>'
1734 call hecmw_abort( hecmw_comm_get_comm())
1746 integer(kind=kint) :: NDOF, n_node, n_elem, mdof
1747 mdof = (ndof*ndof+ndof)/2;
1748 allocate ( phys%STRAIN (mdof*n_node))
1749 allocate ( phys%STRESS (mdof*n_node))
1750 allocate ( phys%MISES ( n_node))
1751 allocate ( phys%ESTRAIN (mdof*n_elem))
1752 allocate ( phys%ESTRESS (mdof*n_elem))
1753 allocate ( phys%EMISES ( n_elem))
1754 allocate ( phys%EPLSTRAIN ( n_elem))
1755 allocate ( phys%ENQM (12*n_elem))
1760 integer(kind=kint) :: ctrl, i
1764 if( p%PARAM%solution_type ==
kststatic &
1765 .or. p%PARAM%solution_type ==
ksteigen &
1769 if( p%MESH%n_dof == 6 .or. p%SOLID%is_33shell == 1 )
then
1770 allocate ( p%SOLID%SHELL )
1772 allocate ( p%SOLID%SHELL%LAYER(p%SOLID%max_lyr) )
1773 do i=1,p%SOLID%max_lyr
1774 allocate ( p%SOLID%SHELL%LAYER(i)%PLUS )
1775 allocate ( p%SOLID%SHELL%LAYER(i)%MINUS )
1779 phys => p%SOLID%SHELL
1781 allocate ( p%SOLID%SOLID )
1782 phys => p%SOLID%SOLID
1785 p%SOLID%STRAIN => phys%STRAIN
1786 p%SOLID%STRESS => phys%STRESS
1787 p%SOLID%MISES => phys%MISES
1788 p%SOLID%ESTRAIN => phys%ESTRAIN
1789 p%SOLID%ESTRESS => phys%ESTRESS
1790 p%SOLID%EMISES => phys%EMISES
1791 p%SOLID%ENQM => phys%ENQM
1792 allocate( p%SOLID%REACTION( p%MESH%n_dof*p%MESH%n_node ) )
1795 if( p%PARAM%fg_visual ==
kon )
then
1799 call hecmw_barrier( p%MESH )
1801 if( p%HEAT%STEPtot == 0 )
then
1802 if( p%PARAM%analysis_n == 0 )
then
1809 p%PARAM%analysis_n = 1
1815 p%PARAM%eps = 1.0e-6
1822 p%HEAT%STEP_DLTIME = 0
1823 p%HEAT%STEP_EETIME = 0
1824 p%HEAT%STEP_DELMIN = 0
1825 p%HEAT%STEP_DELMAX = 0
1839 integer(kind=kint) :: ctrl
1840 integer(kind=kint) :: counter
1843 integer(kind=kint) :: rcode
1856 integer(kind=kint) :: ctrl
1857 integer(kind=kint) :: counter
1860 integer(kind=kint) :: rcode
1873 integer(kind=kint) :: ctrl
1874 integer(kind=kint) :: counter
1877 integer(kind=kint) :: rcode
1879 if( counter >= 2 )
then
1880 write(
ilog,*)
'### Error : !SOLVER exists twice in FSTR control file.'
1935 integer(kind=kint) :: ctrl
1936 type( hecmwst_local_mesh ) :: hecmesh
1938 type( tlocalcoordsys ) :: coordsys
1940 integer :: j, is, ie, grp_id(1)
1941 character(len=HECMW_NAME_LEN) :: grp_id_name(1)
1943 integer :: nid, dtype
1944 character(len=HECMW_NAME_LEN) :: data_fmt
1945 real(kind=kreal) :: fdum, xyza(3), xyzb(3), xyzc(3), ff1(3), ff2(3), ff3(3)
1950 coordsys%sys_type = 10
1953 data_fmt =
'COORDINATES,NODES '
1956 coordsys%sys_type = coordsys%sys_type + dtype
1959 coordsys%sys_name = grp_id_name(1)
1963 data_fmt =
"RRRRRRrrr "
1966 xyza(3), xyzb(1), xyzb(2), xyzb(3), xyzc(1), xyzc(2), xyzc(3) )/=0 )
return
1967 if( coordsys%sys_type==10 )
then
1969 fdum = dsqrt( dot_product(ff1, ff1) )
1970 if( fdum==0.d0 )
return
1974 coordsys%CoordSys(1,:) = ff1
1976 fdum = dsqrt( dot_product(ff3, ff3) )
1977 if( fdum==0.d0 )
return
1978 coordsys%CoordSys(3,:) = ff3/fdum
1980 call cross_product(coordsys%CoordSys(3,:), coordsys%CoordSys(1,:), coordsys%CoordSys(2,:) )
1982 coordsys%CoordSys(1,:) = xyza
1983 coordsys%CoordSys(2,:) = xyzb
1987 coordsys%node_ID(3) = 0
1990 coordsys%node_ID(2), coordsys%node_ID(3) )/=0 )
return
1991 if( coordsys%node_ID(3) == 0 )
then
1993 if( nid/=0 .and. nid/=2 )
then
1994 write(*,*)
"We cannot define coordinate system using nodes in other CPU!"
1995 write(
idbg,*)
"We cannot define coordinate system using nodes in other CPU!"
2000 if( nid/=0 .and. nid/=3 )
then
2001 write(*,*)
"We cannot define coordinate system using nodes in other CPU!"
2002 write(
idbg,*)
"We cannot define coordinate system using nodes in other CPU!"
2018 integer(kind=kint) :: ctrl
2019 integer(kind=kint) :: counter
2021 character(HECMW_NAME_LEN) :: amp
2022 integer(kind=kint) :: amp_id
2024 integer(kind=kint) :: rcode, iproc
2036 integer(kind=kint) :: ctrl
2038 type(hecmwst_local_mesh) :: hecmesh
2039 integer,
pointer :: grp_id(:), dof(:)
2040 real(kind=kreal),
pointer :: temp(:)
2041 character(len=HECMW_NAME_LEN),
pointer :: grp_id_name(:)
2042 character(len=HECMW_NAME_LEN) :: data_fmt, ss
2043 integer :: i,j,n, is, ie, gid, nid, rcode
2047 ss =
'TEMPERATURE,VELOCITY,ACCELERATION '
2050 cond%cond_name =
"temperature"
2051 allocate( cond%intval(hecmesh%n_node) )
2052 allocate( cond%realval(hecmesh%n_node) )
2053 elseif( nid==2 )
then
2054 cond%cond_name =
"velocity"
2055 allocate( cond%intval(hecmesh%n_node) )
2056 allocate( cond%realval(hecmesh%n_node) )
2057 elseif( nid==3 )
then
2058 cond%cond_name =
"acceleration"
2059 allocate( cond%intval(hecmesh%n_node) )
2060 allocate( cond%realval(hecmesh%n_node) )
2070 allocate( temp(n), grp_id_name(n), grp_id(n), dof(n) )
2072 write(ss,*) hecmw_name_len
2074 write(data_fmt,
'(a,a,a)')
'S',trim(adjustl(ss)),
'R '
2078 write(data_fmt,
'(a,a,a)')
'S',trim(adjustl(ss)),
'IR '
2084 if(
associated(grp_id) )
deallocate( grp_id )
2085 if(
associated(temp) )
deallocate( temp )
2086 if(
associated(dof) )
deallocate( dof )
2087 if(
associated(grp_id_name) )
deallocate( grp_id_name )
2094 is = hecmesh%node_group%grp_index(gid-1) + 1
2095 ie = hecmesh%node_group%grp_index(gid )
2097 nid = hecmesh%node_group%grp_item(j)
2098 cond%realval(nid) = temp(i)
2099 cond%intval(nid) = dof(i)
2103 if(
associated(grp_id) )
deallocate( grp_id )
2104 if(
associated(temp) )
deallocate( temp )
2105 if(
associated(dof) )
deallocate( dof )
2106 if(
associated(grp_id_name) )
deallocate( grp_id_name )
2115 integer(kind=kint) :: ctrl
2116 integer(kind=kint) :: counter
2118 integer(kind=kint) :: res, visual, neutral
2120 integer(kind=kint) :: rcode
2124 if( res == 1 ) p%PARAM%fg_result = 1
2125 if( visual == 1 ) p%PARAM%fg_visual = 1
2126 if( neutral == 1 ) p%PARAM%fg_neutral = 1
2136 integer(kind=kint) :: ctrl
2137 integer(kind=kint) :: counter
2140 integer(kind=kint) :: rcode
2154 integer(kind=kint) :: ctrl
2155 integer(kind=kint) :: nout
2156 integer(kind=kint) :: version
2158 integer(kind=kint) :: rcode
2174 integer(kind=kint) :: ctrl
2175 integer(kind=kint) :: counter
2177 integer(kind=kint) :: rcode
2178 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
2179 integer(kind=kint) :: i, n, old_size, new_size
2181 if( p%SOLID%file_type /=
kbcffstr )
return
2185 old_size = p%SOLID%COUPLE_ngrp_tot
2186 new_size = old_size + n
2187 p%SOLID%COUPLE_ngrp_tot = new_size
2191 allocate( grp_id_name(n))
2193 p%PARAM%fg_couple_type, &
2194 p%PARAM%fg_couple_first, &
2195 p%PARAM%fg_couple_window, &
2196 grp_id_name, hecmw_name_len )
2200 n, grp_id_name, p%SOLID%COUPLE_ngrp_ID(old_size+1:))
2202 deallocate( grp_id_name )
2203 p%PARAM%fg_couple = 1
2213 integer(kind=kint) :: ctrl
2215 real(kind=kreal),
pointer :: val(:), table(:)
2216 character(len=HECMW_NAME_LEN) :: name
2217 integer :: nline, n, type_def, type_time, type_val, rcode
2220 if( nline<=0 )
return
2221 allocate( val(nline*4) )
2222 allocate( table(nline*4) )
2229 if(
associated(val) )
deallocate( val )
2230 if(
associated(table) )
deallocate( table )
2244 integer(kind=kint) :: ctrl
2245 integer(kind=kint) :: counter
2247 integer(kind=kint) :: rcode
2249 integer :: nout, nout_monit,node_monit_1 ,elem_monit_1 ,intg_monit_1
2250 integer :: ipt, idx_elpl, iout_list(6)
2251 real(kind=kreal) :: sig_y0, h_dash
2253 if( counter > 1 )
then
2260 if( ipt == 2 ) p%PARAM%nlgeom = .true.
2264 write(*,*)
"Warning : !STATIC : parameter 'TYPE=INFINITE' is deprecated." &
2265 & //
" Please use the replacement parameter 'TYPE=INFINITESIMAL'"
2273 nout, nout_monit, node_monit_1, &
2274 elem_monit_1, intg_monit_1 )
2287 integer(kind=kint) :: ctrl
2288 integer(kind=kint) :: counter
2291 integer(kind=kint) :: rcode
2292 integer(kind=kint) ::
type = 0
2293 character(HECMW_NAME_LEN) :: amp, rotc_name(1)
2294 integer(kind=kint) :: amp_id, rotc_id(1), n_rotc
2295 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
2296 integer(kind=kint),
pointer :: dof_ids (:)
2297 integer(kind=kint),
pointer :: dof_ide (:)
2298 real(kind=kreal),
pointer :: val_ptr(:)
2299 integer(kind=kint) :: i, n, old_size, new_size
2301 integer(kind=kint) :: gid, istot
2321 if( rotc_name(1) /=
' ' )
then
2322 if( istot /= 0 )
then
2323 write(*,*)
'fstr control file error : !BOUNDARY : rotational boundary cannot be specified with total value'
2324 write(
ilog,*)
'fstr control file error : !BOUNDARY : rotational boundary cannot be specified with total value'
2327 p%SOLID%BOUNDARY_ngrp_rot = p%SOLID%BOUNDARY_ngrp_rot + 1
2328 n_rotc = p%SOLID%BOUNDARY_ngrp_rot
2338 old_size = p%SOLID%BOUNDARY_ngrp_tot
2339 new_size = old_size + n
2340 p%SOLID%BOUNDARY_ngrp_tot = new_size
2350 allocate( grp_id_name(n) )
2351 allocate( dof_ids(n) )
2352 allocate( dof_ide(n) )
2355 val_ptr => p%SOLID%BOUNDARY_ngrp_val(old_size+1:)
2360 p%SOLID%BOUNDARY_ngrp_GRPID(old_size+1:new_size) = gid
2362 p%SOLID%BOUNDARY_ngrp_istot(old_size+1:new_size) = istot
2365 p%SOLID%BOUNDARY_ngrp_rotID(old_size+1:) = n_rotc
2366 p%SOLID%BOUNDARY_ngrp_centerID(old_size+1:) = rotc_id(1)
2369 if( (dof_ids(i) < 1).or.(6 < dof_ids(i)).or.(dof_ide(i) < 1).or.(6 < dof_ide(i)) )
then
2370 write(*,*)
'fstr control file error : !BOUNDARY : range of dof_ids and dof_ide is from 1 to 6'
2371 write(
ilog,*)
'fstr control file error : !BOUNDARY : range of dof_ids and dof_ide is from 1 to 6'
2374 p%SOLID%BOUNDARY_ngrp_type(old_size+i) = 10 * dof_ids(i) + dof_ide(i)
2375 p%SOLID%BOUNDARY_ngrp_amp(old_size+i) = amp_id
2378 deallocate( grp_id_name )
2379 deallocate( dof_ids )
2380 deallocate( dof_ide )
2397 integer(kind=kint) :: ctrl
2398 integer(kind=kint) :: counter
2401 integer(kind=kint) :: rcode
2402 character(HECMW_NAME_LEN) :: amp, rotc_name(1)
2403 integer(kind=kint) :: amp_id, rotc_id(1), n_rotc
2404 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
2405 real(kind=kreal),
pointer :: val_ptr(:)
2406 integer(kind=kint),
pointer :: id_ptr(:)
2407 integer(kind=kint) :: i, n, old_size, new_size
2408 integer(kind=kint) :: gid
2410 if( p%SOLID%file_type /=
kbcffstr )
return
2421 if( rotc_name(1) /=
' ' )
then
2422 p%SOLID%CLOAD_ngrp_rot = p%SOLID%CLOAD_ngrp_rot + 1
2423 n_rotc = p%SOLID%CLOAD_ngrp_rot
2429 old_size = p%SOLID%CLOAD_ngrp_tot
2430 new_size = old_size + n
2431 p%SOLID%CLOAD_ngrp_tot = new_size
2442 allocate( grp_id_name(n))
2444 val_ptr => p%SOLID%CLOAD_ngrp_val(old_size+1:)
2445 id_ptr =>p%SOLID%CLOAD_ngrp_DOF(old_size+1:)
2451 p%SOLID%CLOAD_ngrp_rotID(old_size+1:) = n_rotc
2452 p%SOLID%CLOAD_ngrp_centerID(old_size+1:) = rotc_id(1)
2456 p%SOLID%CLOAD_ngrp_amp(old_size+i) = amp_id
2458 p%SOLID%CLOAD_ngrp_GRPID(old_size+1:new_size) = gid
2461 deallocate( grp_id_name )
2468 include
'fstr_ctrl_freq.f90'
2476 real(kind=kreal),
pointer :: array(:,:)
2477 integer(kind=kint) :: old_size, new_size, i, j
2478 real(kind=kreal),
pointer :: temp(:,:)
2480 if( old_size >= new_size )
then
2484 if(
associated( array ) )
then
2485 allocate(temp(0:6, old_size))
2488 allocate(array(0:6, new_size))
2492 array(j,i) = temp(j,i)
2497 allocate(array(0:6, new_size))
2505 integer(kind=kint) :: ctrl
2506 integer(kind=kint) :: counter
2509 integer(kind=kint) :: rcode
2510 character(HECMW_NAME_LEN) :: amp
2511 integer(kind=kint) :: amp_id
2512 integer(kind=kint) :: follow
2513 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
2514 real(kind=kreal),
pointer :: new_params(:,:)
2515 logical,
pointer :: fg_surface(:)
2516 integer(kind=kint),
pointer :: lid_ptr(:)
2517 integer(kind=kint) :: i, j, n, old_size, new_size
2518 integer(kind=kint) :: gid
2520 if( p%SOLID%file_type /=
kbcffstr )
return
2527 old_size = p%SOLID%DLOAD_ngrp_tot
2528 new_size = old_size + n
2529 p%SOLID%DLOAD_ngrp_tot = new_size
2538 allocate( grp_id_name(n))
2539 allocate( new_params(0:6,n))
2540 allocate( fg_surface(n))
2543 follow = p%SOLID%DLOAD_follow
2544 if( .not. p%PARAM%nlgeom ) follow = 0
2545 lid_ptr => p%SOLID%DLOAD_ngrp_LID(old_size+1:)
2547 grp_id_name, hecmw_name_len, &
2548 lid_ptr, new_params )
2551 p%SOLID%DLOAD_follow = follow
2553 p%SOLID%DLOAD_ngrp_amp(old_size+i) = amp_id
2555 p%SOLID%DLOAD_ngrp_params(j,old_size+i) = new_params(j,i)
2557 fg_surface(i) = ( lid_ptr(i) == 100 )
2559 p%SOLID%DLOAD_ngrp_GRPID(old_size+1:new_size) = gid
2561 deallocate( grp_id_name )
2562 deallocate( new_params )
2563 deallocate( fg_surface )
2573 integer(kind=kint) :: ctrl
2574 integer(kind=kint) :: counter
2577 integer(kind=kint) :: rcode, gid
2578 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
2579 real(kind=kreal),
pointer :: val_ptr(:)
2580 integer(kind=kint) :: n, old_size, new_size
2582 if( p%SOLID%file_type /=
kbcffstr )
return
2588 old_size = p%SOLID%TEMP_ngrp_tot
2590 new_size = old_size + n
2592 new_size = old_size + 1
2598 allocate( grp_id_name(n))
2599 val_ptr => p%SOLID%TEMP_ngrp_val( old_size+1: )
2602 p%SOLID%TEMP_irres, &
2603 p%SOLID%TEMP_tstep, &
2604 p%SOLID%TEMP_interval, &
2605 p%SOLID%TEMP_rtype, &
2606 grp_id_name, hecmw_name_len, &
2610 p%SOLID%TEMP_ngrp_GRPID(old_size+1:new_size) = gid
2612 if( p%SOLID%TEMP_irres == 0 )
then
2613 p%SOLID%TEMP_ngrp_tot = new_size
2615 n, grp_id_name, p%SOLID%TEMP_ngrp_ID(old_size+1:))
2617 deallocate( grp_id_name )
2629 integer(kind=kint) :: ctrl
2630 integer(kind=kint) :: counter
2633 integer(kind=kint) :: rcode
2634 character(HECMW_NAME_LEN) :: amp
2635 integer(kind=kint) :: amp_id
2636 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
2637 real(kind=kreal),
pointer :: val_ptr(:)
2638 integer(kind=kint),
pointer :: id_ptr(:)
2639 integer(kind=kint) :: i, n, old_size, new_size
2640 integer(kind=kint) :: gid
2642 if( p%SOLID%file_type /=
kbcffstr )
return
2647 old_size = p%SOLID%SPRING_ngrp_tot
2648 new_size = old_size + n
2649 p%SOLID%SPRING_ngrp_tot = new_size
2656 allocate( grp_id_name(n))
2658 val_ptr => p%SOLID%SPRING_ngrp_val(old_size+1:)
2659 id_ptr =>p%SOLID%SPRING_ngrp_DOF(old_size+1:)
2666 p%SOLID%SPRING_ngrp_amp(old_size+i) = amp_id
2668 p%SOLID%SPRING_ngrp_GRPID(old_size+1:new_size) = gid
2671 deallocate( grp_id_name )
2682 integer(kind=kint) :: ctrl
2683 integer(kind=kint) :: counter
2686 integer(kind=kint) :: rcode
2704 integer(kind=kint) :: ctrl
2705 integer(kind=kint) :: counter
2708 integer(kind=kint) :: rcode
2709 integer(kind=kint) :: n
2710 character(len=HECMW_NAME_LEN) :: mName
2711 integer(kind=kint) :: i
2723 p%PARAM%analysis_n = n
2730 p%PARAM%eps = 1.0e-6
2731 p%PARAM%timepoint_id = 0
2742 if( rcode /= 0 )
then
2746 if(
associated(p%PARAM%timepoints) )
then
2747 do i=1,
size(p%PARAM%timepoints)
2748 if(
fstr_streqr( p%PARAM%timepoints(i)%name, mname ) )
then
2749 p%PARAM%timepoint_id = i;
exit
2760 p%HEAT%STEP_DLTIME = p%PARAM%dtime
2761 p%HEAT%STEP_EETIME = p%PARAM%etime
2762 p%HEAT%STEP_DELMIN = p%PARAM%dtmin
2763 p%HEAT%STEP_DELMAX = p%PARAM%delmax
2764 p%HEAT%timepoint_id = p%PARAM%timepoint_id
2774 integer(kind=kint) :: ctrl
2775 integer(kind=kint) :: counter
2778 integer(kind=kint) :: rcode
2779 character(HECMW_NAME_LEN) :: amp
2780 integer(kind=kint) :: amp_id
2781 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
2782 real(kind=kreal),
pointer :: value(:)
2783 integer(kind=kint) :: i, j, n, m, head, id, member_n, old_size, new_size
2784 integer(kind=kint),
pointer :: member(:)
2785 integer(kind=kint) :: local_id, rtc
2791 allocate( grp_id_name(n))
2796 grp_id_name, hecmw_name_len,
value )
2807 else if( rtc < 0 )
then
2813 deallocate( grp_id_name )
2819 old_size = p%HEAT%T_FIX_tot
2820 new_size = old_size + m
2824 p%HEAT%T_FIX_tot = new_size
2827 member => p%HEAT%T_FIX_node(head:)
2833 member(1) = local_id
2835 else if( rtc < 0 )
then
2836 member_n =
get_grp_member( p%MESH,
'node_grp', grp_id_name(i), member )
2841 member => member( member_n+1 : )
2844 p%HEAT%T_FIX_val (id) = value(i)
2845 p%HEAT%T_FIX_ampl (id) = amp_id
2850 deallocate( grp_id_name )
2861 integer(kind=kint) :: ctrl
2862 integer(kind=kint) :: counter
2865 integer(kind=kint) :: rcode
2866 character(HECMW_NAME_LEN) :: amp
2867 integer(kind=kint) :: amp_id
2868 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
2869 real(kind=kreal),
pointer :: value(:)
2870 integer(kind=kint) :: i, j, n, m, head, id, member_n, old_size, new_size
2871 integer(kind=kint),
pointer :: member(:)
2872 integer(kind=kint) :: local_id, rtc
2878 allocate( grp_id_name(n))
2883 grp_id_name, hecmw_name_len,
value )
2894 else if( rtc < 0 )
then
2900 deallocate( grp_id_name )
2906 old_size = p%HEAT%Q_NOD_tot
2907 new_size = old_size + m
2911 p%HEAT%Q_NOD_tot = new_size
2914 member => p%HEAT%Q_NOD_node(head:)
2919 member(1) = local_id
2921 else if( rtc < 0 )
then
2922 member_n =
get_grp_member( p%MESH,
'node_grp', grp_id_name(i), member )
2926 if( i<n ) member => member( member_n+1 : )
2928 p%HEAT%Q_NOD_val (id) = value(i)
2929 p%HEAT%Q_NOD_ampl (id) = amp_id
2934 deallocate( grp_id_name )
2946 integer(kind=kint) :: ctrl
2947 integer(kind=kint) :: counter
2950 integer(kind=kint) :: rcode
2951 character(HECMW_NAME_LEN) :: amp
2952 integer(kind=kint) :: amp_id
2953 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
2954 integer(kind=kint),
pointer :: load_type(:)
2955 real(kind=kreal),
pointer :: value(:)
2956 integer(kind=kint) :: i, j, n, m, head, id, member_n, old_size, new_size
2957 integer(kind=kint),
pointer :: member(:)
2958 integer(kind=kint) :: local_id, rtc
2964 allocate( grp_id_name(n))
2965 allocate( load_type(n))
2970 grp_id_name, hecmw_name_len, load_type,
value )
2980 else if( rtc < 0 )
then
2986 deallocate( grp_id_name )
2987 deallocate( load_type )
2993 old_size = p%HEAT%Q_SUF_tot
2994 new_size = old_size + m
2999 p%HEAT%Q_SUF_tot = new_size
3002 member => p%HEAT%Q_SUF_elem(head:)
3007 member(1) = local_id
3009 else if( rtc < 0 )
then
3010 member_n =
get_grp_member( p%MESH,
'elem_grp', grp_id_name(i), member )
3014 if( i<n ) member => member( member_n+1 : )
3016 p%HEAT%Q_SUF_surf (id) = load_type(i)
3017 p%HEAT%Q_SUF_val (id) = value(i)
3018 p%HEAT%Q_SUF_ampl (id) = amp_id
3023 deallocate( grp_id_name )
3024 deallocate( load_type )
3036 integer(kind=kint) :: ctrl
3037 integer(kind=kint) :: counter
3040 integer(kind=kint) :: rcode
3041 character(HECMW_NAME_LEN) :: amp
3042 integer(kind=kint) :: amp_id
3043 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
3044 real(kind=kreal),
pointer :: value(:)
3045 integer(kind=kint) :: i, j, n, m, head, id, member_n, old_size, new_size
3046 integer(kind=kint),
pointer :: member1(:), member2(:)
3052 allocate( grp_id_name(n))
3057 grp_id_name, hecmw_name_len,
value )
3068 deallocate( grp_id_name )
3074 old_size = p%HEAT%Q_SUF_tot
3075 new_size = old_size + m
3080 p%HEAT%Q_SUF_tot = new_size
3083 member1 => p%HEAT%Q_SUF_elem(head:)
3084 member2 => p%HEAT%Q_SUF_surf(head:)
3087 member_n =
get_grp_member( p%MESH,
'surf_grp', grp_id_name(i), member1, member2 )
3089 member1 => member1( member_n+1 : )
3090 member2 => member2( member_n+1 : )
3093 p%HEAT%Q_SUF_val (id) = value(i)
3094 p%HEAT%Q_SUF_ampl (id) = amp_id
3099 deallocate( grp_id_name )
3111 integer(kind=kint) :: ctrl
3112 integer(kind=kint) :: counter
3115 integer(kind=kint) :: rcode
3116 character(HECMW_NAME_LEN) :: amp1, amp2
3117 integer(kind=kint) :: amp_id1, amp_id2
3118 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
3119 integer(kind=kint),
pointer :: load_type(:)
3120 real(kind=kreal),
pointer :: value(:)
3121 real(kind=kreal),
pointer :: shink(:)
3122 integer(kind=kint) :: i, j, n, m, head, id, member_n, old_size, new_size
3123 integer(kind=kint),
pointer :: member(:)
3124 integer(kind=kint) :: local_id, rtc
3130 allocate( grp_id_name(n))
3131 allocate( load_type(n))
3139 grp_id_name, hecmw_name_len, load_type,
value, shink )
3150 else if( rtc < 0 )
then
3156 deallocate( grp_id_name )
3157 deallocate( load_type )
3164 old_size = p%HEAT%H_SUF_tot
3165 new_size = old_size + m
3170 p%HEAT%H_SUF_tot = new_size
3173 member => p%HEAT%H_SUF_elem(head:)
3178 member(1) = local_id
3180 else if( rtc < 0 )
then
3181 member_n =
get_grp_member( p%MESH,
'elem_grp', grp_id_name(i), member )
3185 if( i<n ) member => member( member_n+1 : )
3187 p%HEAT%H_SUF_surf (id) = load_type(i)
3188 p%HEAT%H_SUF_val (id,1) = value(i)
3189 p%HEAT%H_SUF_val (id,2) = shink(i)
3190 p%HEAT%H_SUF_ampl (id,1) = amp_id1
3191 p%HEAT%H_SUF_ampl (id,2) = amp_id2
3196 deallocate( grp_id_name )
3197 deallocate( load_type )
3210 integer(kind=kint) :: ctrl
3211 integer(kind=kint) :: counter
3214 integer(kind=kint) :: rcode
3215 character(HECMW_NAME_LEN) :: amp1, amp2
3216 integer(kind=kint) :: amp_id1, amp_id2
3217 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
3218 real(kind=kreal),
pointer :: value(:)
3219 real(kind=kreal),
pointer :: shink(:)
3220 integer(kind=kint) :: i, j, n, m, head, id, member_n, old_size, new_size
3221 integer(kind=kint),
pointer :: member1(:), member2(:)
3227 allocate( grp_id_name(n))
3234 grp_id_name, hecmw_name_len,
value, shink )
3246 deallocate( grp_id_name )
3253 old_size = p%HEAT%H_SUF_tot
3254 new_size = old_size + m
3259 p%HEAT%H_SUF_tot = new_size
3262 member1 => p%HEAT%H_SUF_elem(head:)
3263 member2 => p%HEAT%H_SUF_surf(head:)
3266 member_n =
get_grp_member( p%MESH,
'surf_grp', grp_id_name(i), member1, member2 )
3268 member1 => member1( member_n+1 : )
3269 member2 => member2( member_n+1 : )
3272 p%HEAT%H_SUF_val (id,1) = value(i)
3273 p%HEAT%H_SUF_val (id,2) = shink(i)
3274 p%HEAT%H_SUF_ampl (id,1) = amp_id1
3275 p%HEAT%H_SUF_ampl (id,2) = amp_id2
3280 deallocate( grp_id_name )
3293 integer(kind=kint) :: ctrl
3294 integer(kind=kint) :: counter
3297 integer(kind=kint) :: rcode
3298 character(HECMW_NAME_LEN) :: amp1, amp2
3299 integer(kind=kint) :: amp_id1, amp_id2
3300 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
3301 integer(kind=kint),
pointer :: load_type(:)
3302 real(kind=kreal),
pointer :: value(:)
3303 real(kind=kreal),
pointer :: shink(:)
3304 integer(kind=kint) :: i, j, n, m, head, id, member_n, old_size, new_size
3305 integer(kind=kint),
pointer :: member(:)
3306 integer(kind=kint) :: local_id, rtc
3312 allocate( grp_id_name(n))
3313 allocate( load_type(n))
3320 grp_id_name, hecmw_name_len, load_type,
value, shink )
3331 else if( rtc < 0 )
then
3337 deallocate( grp_id_name )
3338 deallocate( load_type )
3345 old_size = p%HEAT%R_SUF_tot
3346 new_size = old_size + m
3351 p%HEAT%R_SUF_tot = new_size
3354 member => p%HEAT%R_SUF_elem(head:)
3359 member(1) = local_id
3361 else if( rtc < 0 )
then
3362 member_n =
get_grp_member( p%MESH,
'elem_grp', grp_id_name(i), member )
3366 if( i<n ) member => member( member_n+1 : )
3368 p%HEAT%R_SUF_surf (id) = load_type(i)
3369 p%HEAT%R_SUF_val (id,1) = value(i)
3370 p%HEAT%R_SUF_val (id,2) = shink(i)
3371 p%HEAT%R_SUF_ampl (id,1) = amp_id1
3372 p%HEAT%R_SUF_ampl (id,2) = amp_id2
3377 deallocate( grp_id_name )
3378 deallocate( load_type )
3391 integer(kind=kint) :: ctrl
3392 integer(kind=kint) :: counter
3395 integer(kind=kint) :: rcode
3396 character(HECMW_NAME_LEN) :: amp1, amp2
3397 integer(kind=kint) :: amp_id1, amp_id2
3398 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
3399 real(kind=kreal),
pointer :: value(:)
3400 real(kind=kreal),
pointer :: shink(:)
3401 integer(kind=kint) :: i, j, n, m, head, id, member_n, old_size, new_size
3402 integer(kind=kint),
pointer :: member1(:), member2(:)
3408 allocate( grp_id_name(n))
3426 deallocate( grp_id_name )
3433 old_size = p%HEAT%R_SUF_tot
3434 new_size = old_size + m
3439 p%HEAT%R_SUF_tot = new_size
3442 member1 => p%HEAT%R_SUF_elem(head:)
3443 member2 => p%HEAT%R_SUF_surf(head:)
3446 member_n =
get_grp_member( p%MESH,
'surf_grp', grp_id_name(i), member1, member2 )
3448 member1 => member1( member_n+1 : )
3449 member2 => member2( member_n+1 : )
3452 p%HEAT%R_SUF_val (id,1) = value(i)
3453 p%HEAT%R_SUF_val (id,2) = shink(i)
3454 p%HEAT%R_SUF_ampl (id,1) = amp_id1
3455 p%HEAT%R_SUF_ampl (id,2) = amp_id2
3460 deallocate( grp_id_name )
3476 integer(kind=kint) :: ctrl
3477 integer(kind=kint) :: counter
3480 integer(kind=kint) :: rcode
3498 integer(kind=kint) :: ctrl
3499 integer(kind=kint) :: counter
3501 integer(kind=kint) :: rcode
3502 character(HECMW_NAME_LEN) :: grp_id_name(1)
3503 integer(kind=kint) :: grp_id(1)
3520 grp_id_name(1), hecmw_name_len, &
3526 if (p%DYN%idx_resp == 1)
then
3528 p%DYN%ngrp_monit = grp_id(1)
3530 read(grp_id_name,*) p%DYN%ngrp_monit
3542 integer(kind=kint) :: ctrl
3543 integer(kind=kint) :: counter
3546 integer(kind=kint) :: rcode
3547 integer(kind=kint) :: vType
3548 character(HECMW_NAME_LEN) :: amp
3549 integer(kind=kint) :: amp_id
3550 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
3551 integer(kind=kint),
pointer :: dof_ids (:)
3552 integer(kind=kint),
pointer :: dof_ide (:)
3553 real(kind=kreal),
pointer :: val_ptr(:)
3554 integer(kind=kint) :: i, j, n, old_size, new_size
3558 old_size = p%SOLID%VELOCITY_ngrp_tot
3559 new_size = old_size + n
3560 p%SOLID%VELOCITY_ngrp_tot = new_size
3567 allocate( grp_id_name(n))
3568 allocate( dof_ids(n))
3569 allocate( dof_ide(n))
3572 val_ptr => p%SOLID%VELOCITY_ngrp_val(old_size+1:)
3575 grp_id_name, hecmw_name_len, &
3576 dof_ids, dof_ide, val_ptr )
3578 p%SOLID%VELOCITY_type = vtype
3579 if( vtype ==
kbcinitial ) p%DYN%VarInitialize = .true.
3582 n, grp_id_name, p%SOLID%VELOCITY_ngrp_ID(old_size+1:))
3586 if( (dof_ids(i) < 1).or.(6 < dof_ids(i)).or.(dof_ide(i) < 1).or.(6 < dof_ide(i)) )
then
3587 write(
ilog,*)
'fstr control file error : !VELOCITY : range of dof_ids and dof_ide is from 1 to 6'
3590 p%SOLID%VELOCITY_ngrp_type(j) = 10 * dof_ids(i) + dof_ide(i)
3591 p%SOLID%VELOCITY_ngrp_amp(j) = amp_id
3595 deallocate( grp_id_name )
3596 deallocate( dof_ids )
3597 deallocate( dof_ide )
3608 integer(kind=kint) :: ctrl
3609 integer(kind=kint) :: counter
3612 integer(kind=kint) :: rcode
3613 integer(kind=kint) :: aType
3614 character(HECMW_NAME_LEN) :: amp
3615 integer(kind=kint) :: amp_id
3616 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
3617 integer(kind=kint),
pointer :: dof_ids (:)
3618 integer(kind=kint),
pointer :: dof_ide (:)
3619 real(kind=kreal),
pointer :: val_ptr(:)
3620 integer(kind=kint) :: i, j, n, old_size, new_size
3625 old_size = p%SOLID%ACCELERATION_ngrp_tot
3626 new_size = old_size + n
3627 p%SOLID%ACCELERATION_ngrp_tot = new_size
3634 allocate( grp_id_name(n))
3635 allocate( dof_ids(n))
3636 allocate( dof_ide(n))
3639 val_ptr => p%SOLID%ACCELERATION_ngrp_val(old_size+1:)
3642 grp_id_name, hecmw_name_len, &
3643 dof_ids, dof_ide, val_ptr)
3645 p%SOLID%ACCELERATION_type = atype
3646 if( atype ==
kbcinitial )p%DYN%VarInitialize = .true.
3649 n, grp_id_name, p%SOLID%ACCELERATION_ngrp_ID(old_size+1:))
3653 if( (dof_ids(i) < 1).or.(6 < dof_ids(i)).or.(dof_ide(i) < 1).or.(6 < dof_ide(i)) )
then
3654 write(
ilog,*)
'fstr control file error : !ACCELERATION : range of dof_ids and dof_ide is from 1 to 6'
3657 p%SOLID%ACCELERATION_ngrp_type(j) = 10 * dof_ids(i) + dof_ide(i)
3658 p%SOLID%ACCELERATION_ngrp_amp(j) = amp_id
3662 deallocate( grp_id_name )
3663 deallocate( dof_ids )
3664 deallocate( dof_ide )
3678 integer(kind=kint) :: ctrl
3679 integer(kind=kint) :: counter
3682 integer(kind=kint) :: rcode
3728 integer(kind=kint) :: ctrl
3729 type (hecmwST_local_mesh) :: hecMESH
3730 type (fstr_solid ) :: fstrSOLID
3731 write(
ilog,*)
'### Error : In !BOUNDARY, TYPE=NASTRAN is not supported.'
3732 call hecmw_abort( hecmw_comm_get_comm())
3741 integer(kind=kint) :: ctrl
3745 integer(kind=kint) :: rcode
3759 integer(kind=kint) :: ctrl
3762 integer(kind=kint) :: rcode, nid
3763 character(len=HECMW_NAME_LEN) :: data_fmt
3765 data_fmt =
'SOLUTION,MATERIAL '
3778 type(hecmwst_local_mesh),
pointer :: hecMESH
3779 integer(kind=kint) :: n, i, sgrp_id, ngrp_id, ngrp_id2
3781 n = hecmesh%contact_pair%n_pair
3783 if( hecmesh%contact_pair%type(i) /= hecmw_contact_type_surf_surf ) cycle
3784 sgrp_id = hecmesh%contact_pair%slave_grp_id(i)
3787 hecmesh%contact_pair%type(i) = hecmw_contact_type_node_surf
3788 hecmesh%contact_pair%slave_grp_id(i) = ngrp_id