39 type(hecmwst_local_mesh),
target :: hecMESH
44 fstrsolid%BOUNDARY_ngrp_tot = 0
45 fstrsolid%BOUNDARY_ngrp_rot = 0
46 fstrsolid%CLOAD_ngrp_tot = 0
47 fstrsolid%CLOAD_ngrp_rot = 0
48 fstrsolid%DLOAD_ngrp_tot = 0
49 fstrsolid%DLOAD_follow = 1
50 fstrsolid%TEMP_ngrp_tot = 0
51 fstrsolid%SPRING_ngrp_tot = 0
52 fstrsolid%TEMP_irres = 0
53 fstrsolid%TEMP_tstep = 1
54 fstrsolid%TEMP_interval = 1
55 fstrsolid%TEMP_rtype = 1
56 fstrsolid%TEMP_factor = 1.d0
57 fstrsolid%VELOCITY_ngrp_tot = 0
58 fstrsolid%VELOCITY_ngrp_rot = 0
59 fstrsolid%ACCELERATION_ngrp_tot = 0
60 fstrsolid%COUPLE_ngrp_tot = 0
62 fstrsolid%restart_nout= 0
63 fstrsolid%is_smoothing_active = .false.
64 fstrsolid%has_finite_rotation_kinematics = .false.
65 fstrsolid%finite_rotation_state_ready = .false.
67 fstrsolid%elemopt361 = 0
68 fstrsolid%AutoINC_stat = 0
69 fstrsolid%CutBack_stat = 0
70 fstrsolid%NRstat_i(:) = 0
71 fstrsolid%NRstat_r(:) = 0.d0
80 type(hecmwst_local_mesh),
target :: hecMESH
83 integer :: ndof, ntotal, ierror
86 ntotal=ndof*hecmesh%n_node
87 fstrsolid%has_finite_rotation_kinematics = &
89 fstrsolid%finite_rotation_state_ready = .false.
91 allocate ( fstrsolid%GL( ntotal ) ,stat=ierror )
92 if( ierror /= 0 )
then
93 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, GL>'
94 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
96 call hecmw_abort( hecmw_comm_get_comm())
98 allocate ( fstrsolid%GL0( ntotal ) ,stat=ierror )
99 if( ierror /= 0 )
then
100 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, GL0>'
101 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
103 call hecmw_abort( hecmw_comm_get_comm())
105 allocate ( fstrsolid%EFORCE( ntotal ) ,stat=ierror )
106 if( ierror /= 0 )
then
107 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, EFORCE>'
108 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
110 call hecmw_abort( hecmw_comm_get_comm())
119 allocate ( fstrsolid%unode( ntotal ) ,stat=ierror )
120 if( ierror /= 0 )
then
121 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, unode>'
122 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
124 call hecmw_abort( hecmw_comm_get_comm())
126 allocate ( fstrsolid%unode_bak( ntotal ) ,stat=ierror )
127 if( ierror /= 0 )
then
128 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, unode>'
129 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
131 call hecmw_abort( hecmw_comm_get_comm())
133 allocate ( fstrsolid%dunode( ntotal ) ,stat=ierror )
134 if( ierror /= 0 )
then
135 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, dunode>'
136 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
138 call hecmw_abort( hecmw_comm_get_comm())
140 allocate ( fstrsolid%ddunode( ntotal ) ,stat=ierror )
141 if( ierror /= 0 )
then
142 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, ddunode>'
143 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
145 call hecmw_abort( hecmw_comm_get_comm())
147 if( fstrsolid%has_finite_rotation_kinematics )
then
148 allocate ( fstrsolid%shell_node_mode( hecmesh%n_node ) ,stat=ierror )
149 if( ierror /= 0 )
then
150 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, shell_node_mode>'
151 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
153 call hecmw_abort( hecmw_comm_get_comm())
156 allocate ( fstrsolid%shell_rot_state( hecmesh%n_node ) ,stat=ierror )
157 if( ierror /= 0 )
then
158 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, shell_rot_state>'
159 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
161 call hecmw_abort( hecmw_comm_get_comm())
163 allocate ( fstrsolid%shell_ref_triad( 9*hecmesh%n_node ) ,stat=ierror )
164 if( ierror /= 0 )
then
165 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, shell_ref_triad>'
166 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
168 call hecmw_abort( hecmw_comm_get_comm())
170 allocate ( fstrsolid%shell_triad( 9*hecmesh%n_node ) ,stat=ierror )
171 if( ierror /= 0 )
then
172 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, shell_triad>'
173 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
175 call hecmw_abort( hecmw_comm_get_comm())
177 allocate ( fstrsolid%shell_triad_bak( 9*hecmesh%n_node ) ,stat=ierror )
178 if( ierror /= 0 )
then
179 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, shell_triad_bak>'
180 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
182 call hecmw_abort( hecmw_comm_get_comm())
184 allocate ( fstrsolid%shell_dtriad( 9*hecmesh%n_node ) ,stat=ierror )
185 if( ierror /= 0 )
then
186 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, shell_dtriad>'
187 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
189 call hecmw_abort( hecmw_comm_get_comm())
191 allocate ( fstrsolid%shell_drill( hecmesh%n_node ) ,stat=ierror )
192 if( ierror /= 0 )
then
193 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, shell_drill>'
194 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
196 call hecmw_abort( hecmw_comm_get_comm())
198 allocate ( fstrsolid%shell_drill_bak( hecmesh%n_node ) ,stat=ierror )
199 if( ierror /= 0 )
then
200 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, shell_drill_bak>'
201 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
203 call hecmw_abort( hecmw_comm_get_comm())
205 allocate ( fstrsolid%shell_ddrill( hecmesh%n_node ) ,stat=ierror )
206 if( ierror /= 0 )
then
207 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, shell_ddrill>'
208 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
210 call hecmw_abort( hecmw_comm_get_comm())
213 allocate ( fstrsolid%QFORCE( ntotal ) ,stat=ierror )
214 if( ierror /= 0 )
then
215 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, QFORCE>'
216 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
218 call hecmw_abort( hecmw_comm_get_comm())
220 allocate ( fstrsolid%DFORCE( ntotal ) ,stat=ierror )
221 if( ierror /= 0 )
then
222 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, DFORCE>'
223 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
225 call hecmw_abort( hecmw_comm_get_comm())
227 allocate ( fstrsolid%QFORCE_bak( ntotal ) ,stat=ierror )
228 if( ierror /= 0 )
then
229 write(
idbg,*)
'stop due to allocation error <FSTR_SOLID, QFORCE_bak>'
230 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
232 call hecmw_abort( hecmw_comm_get_comm())
236 fstrsolid%GL0(:)=0.d0
238 fstrsolid%unode(:) = 0.d0
239 fstrsolid%unode_bak(:) = 0.d0
240 fstrsolid%dunode(:) = 0.d0
241 fstrsolid%ddunode(:) = 0.d0
242 if(
associated(fstrsolid%shell_rot_state) ) fstrsolid%shell_rot_state(:) = 0
243 if(
associated(fstrsolid%shell_ref_triad) ) fstrsolid%shell_ref_triad(:) = 0.d0
244 if(
associated(fstrsolid%shell_triad) ) fstrsolid%shell_triad(:) = 0.d0
245 if(
associated(fstrsolid%shell_triad_bak) ) fstrsolid%shell_triad_bak(:) = 0.d0
246 if(
associated(fstrsolid%shell_dtriad) ) fstrsolid%shell_dtriad(:) = 0.d0
247 if(
associated(fstrsolid%shell_drill) ) fstrsolid%shell_drill(:) = 0.d0
248 if(
associated(fstrsolid%shell_drill_bak) ) fstrsolid%shell_drill_bak(:) = 0.d0
249 if(
associated(fstrsolid%shell_ddrill) ) fstrsolid%shell_ddrill(:) = 0.d0
250 fstrsolid%QFORCE(:) = 0.d0
251 fstrsolid%QFORCE_bak(:) = 0.d0
254 fstrsolid%DFORCE(:) = 0.d0
255 fstrsolid%FACTOR( 1:2 ) = 0.d0
258 fstrsolid%n_fix_mpc = hecmesh%mpc%n_mpc
259 if( fstrsolid%n_fix_mpc>0 )
then
260 allocate( fstrsolid%mpc_const( fstrsolid%n_fix_mpc ) )
261 fstrsolid%mpc_const(:) = hecmesh%mpc%mpc_const(:)
265 fstrsolid%FACTOR(2)=1.d0
266 fstrsolid%FACTOR(1)=0.d0
270 type(hecmwst_local_mesh),
target :: hecMESH
273 logical,
allocatable :: is_selem_list(:)
276 do isect=1,hecmesh%section%n_sect
277 if( fstrsolid%sections(isect)%elemopt341 ==
kel341sesns ) fstrsolid%is_smoothing_active = .true.
279 if( .not. fstrsolid%is_smoothing_active )
return
281 allocate(is_selem_list(hecmesh%n_elem), stat=i)
283 write(*,*)
'Allocation error: is_selem_list'
286 is_selem_list(:) = .false.
288 do i=1,hecmesh%n_elem
289 isect= hecmesh%section_ID(i)
290 if( hecmesh%elem_type(i) /= fe_tet4n ) cycle
291 if( fstrsolid%sections(isect)%elemopt341 ==
kel341sesns ) is_selem_list(i) = .true.
294 call hecmw_create_smoothing_element_connectivity(hecmesh,is_selem_list)
296 deallocate(is_selem_list)
302 type(hecmwst_local_mesh),
target :: hecMESH
305 integer :: i, nodlocal(fstrSOLID%max_ncon), iiS, nn, con_stf
307 if( fstrsolid%max_ncon_stf > 20 ) fstrsolid%max_ncon_stf = 20
309 do i=1,hecmesh%elem_type_index(hecmesh%n_elem_type)
310 if( hecmesh%elem_type(i) /= fe_nodesmooth_tet4n .and. hecmesh%elem_type(i) /= fe_edgesmooth_tet4n ) cycle
311 iis = hecmesh%elem_node_index(i-1)
312 nn = hecmesh%elem_node_index(i) - iis
313 nodlocal(1:nn) = hecmesh%elem_node_item(iis+1:iis+nn)
315 if( con_stf > fstrsolid%max_ncon_stf ) fstrsolid%max_ncon_stf = con_stf
325 type(hecmwst_local_mesh),
target :: hecMESH
327 integer(kind=kint),
intent(in) :: solution_type
329 integer :: i, j, ng, isect, ndof, id, nn, n_elem, nthick
331 if( hecmesh%n_elem <=0 )
then
332 stop
"no element defined!"
335 fstrsolid%maxn_gauss = 0
336 fstrsolid%max_ncon = 0
342 n_elem = hecmesh%elem_type_index(hecmesh%n_elem_type)
343 allocate( fstrsolid%elements(n_elem) )
346 fstrsolid%elements(i)%elemact_flag = kelact_undefined
347 if( solution_type ==
kstheat) cycle
349 fstrsolid%elements(i)%etype = hecmesh%elem_type(i)
350 if( hecmesh%elem_type(i)==301 ) fstrsolid%elements(i)%etype=111
351 if (hecmw_is_etype_link(fstrsolid%elements(i)%etype)) cycle
352 if (hecmw_is_etype_patch(fstrsolid%elements(i)%etype)) cycle
354 if( ng > fstrsolid%maxn_gauss ) fstrsolid%maxn_gauss = ng
355 if(ng>0)
allocate( fstrsolid%elements(i)%gausses( ng ) )
357 isect= hecmesh%section_ID(i)
360 id=hecmesh%section%sect_opt(isect)
362 fstrsolid%elements(i)%iset=1
364 fstrsolid%elements(i)%iset=0
366 fstrsolid%elements(i)%iset=2
370 if( isect<0 .or. isect>hecmesh%section%n_sect ) &
371 stop
"Error in element's section definition"
372 id = hecmesh%section%sect_mat_ID_item(isect)
373 fstrsolid%materials(id)%cdsys_ID = hecmesh%section%sect_orien_ID(isect)
374 nn = hecmesh%elem_node_index(i)-hecmesh%elem_node_index(i-1)
376 fstrsolid%elements(i)%gausses(j)%pMaterial => fstrsolid%materials(id)
381 fstrsolid%materials(id) ) .or. &
383 fstrsolid%materials(id)) )
then
387 fstrsolid%materials(id)%totallyr, nthick )
389 allocate(fstrsolid%elements(i)%equiForces(nn*ndof))
390 fstrsolid%elements(i)%equiForces = 0.0d0
391 if( nn > fstrsolid%max_ncon ) fstrsolid%max_ncon = nn
393 if( hecmesh%elem_type(i)==361 )
then
394 if( fstrsolid%sections(isect)%elemopt361==
kel361ic )
then
395 allocate( fstrsolid%elements(i)%aux(3,3) )
396 fstrsolid%elements(i)%aux = 0.0d0
398 fstrsolid%elements(i)%p(1) = 0.0d0
403 fstrsolid%max_ncon_stf = fstrsolid%max_ncon
406 call hecmw_allreduce_i1(hecmesh,fstrsolid%maxn_gauss,hecmw_max)
415 if(
associated(phys%STRESS))
deallocate(phys%STRESS)
416 if(
associated(phys%STRAIN))
deallocate(phys%STRAIN)
417 if(
associated(phys%MISES))
deallocate(phys%MISES)
419 if(
associated(phys%PSTRESS))
deallocate(phys%PSTRESS)
420 if(
associated(phys%PSTRAIN))
deallocate(phys%PSTRAIN)
421 if(
associated(phys%PSTRESS_VECT))
deallocate(phys%PSTRESS_VECT)
422 if(
associated(phys%PSTRAIN_VECT))
deallocate(phys%PSTRAIN_VECT)
424 if(
associated(phys%ESTRESS))
deallocate(phys%ESTRESS)
425 if(
associated(phys%ESTRAIN))
deallocate(phys%ESTRAIN)
426 if(
associated(phys%EMISES))
deallocate(phys%EMISES)
427 if(
associated(phys%EPLSTRAIN))
deallocate(phys%EPLSTRAIN)
429 if(
associated(phys%EPSTRESS))
deallocate(phys%EPSTRESS)
430 if(
associated(phys%EPSTRAIN))
deallocate(phys%EPSTRAIN)
431 if(
associated(phys%EPSTRESS_VECT))
deallocate(phys%EPSTRESS_VECT)
432 if(
associated(phys%EPSTRAIN_VECT))
deallocate(phys%EPSTRAIN_VECT)
433 if(
associated(phys%ENQM))
deallocate(phys%ENQM)
435 if(
associated(phys%LAYER))
then
436 do i=1,
size(phys%LAYER)
439 deallocate(phys%LAYER)
441 if(
associated(phys%PLUS))
then
443 deallocate(phys%PLUS)
445 if(
associated(phys%MINUS))
then
447 deallocate(phys%MINUS)
456 integer :: i, j, ierror
457 if(
associated(fstrsolid%materials) )
then
458 do j=1,
size(fstrsolid%materials)
459 call finalizematerial(fstrsolid%materials(j))
461 deallocate( fstrsolid%materials )
463 if( .not.
associated(fstrsolid%elements ) )
return
464 do i=1,
size(fstrsolid%elements)
465 if(
associated(fstrsolid%elements(i)%gausses) )
then
466 do j=1,
size(fstrsolid%elements(i)%gausses)
467 call fstr_finalize_gauss(fstrsolid%elements(i)%gausses(j))
469 deallocate( fstrsolid%elements(i)%gausses )
472 if(
associated(fstrsolid%elements(i)%equiForces) )
then
473 deallocate(fstrsolid%elements(i)%equiForces)
475 if(
associated(fstrsolid%elements(i)%aux) )
then
476 deallocate(fstrsolid%elements(i)%aux)
480 deallocate( fstrsolid%elements )
481 if(
associated( fstrsolid%mpc_const ) )
then
482 deallocate( fstrsolid%mpc_const )
484 call free_stepinfo( fstrsolid%step_ctrl_restart )
485 if(
associated(fstrsolid%step_ctrl) )
then
486 do i=1,
size(fstrsolid%step_ctrl)
487 call free_stepinfo( fstrsolid%step_ctrl(i) )
489 deallocate( fstrsolid%step_ctrl )
491 if(
associated(fstrsolid%output_ctrl) )
then
492 do i=1,
size(fstrsolid%output_ctrl)
493 if( fstrsolid%output_ctrl(i)%filenum==
iutb ) &
494 close(fstrsolid%output_ctrl(i)%filenum)
496 deallocate(fstrsolid%output_ctrl)
498 if(
associated( fstrsolid%sections ) )
then
499 deallocate( fstrsolid%sections )
502 if(
associated(fstrsolid%GL) )
then
503 deallocate(fstrsolid%GL ,stat=ierror)
504 if( ierror /= 0 )
then
505 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, GL>'
507 call hecmw_abort( hecmw_comm_get_comm())
510 if(
associated(fstrsolid%EFORCE) )
then
511 deallocate(fstrsolid%EFORCE ,stat=ierror)
512 if( ierror /= 0 )
then
513 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, EFORCE>'
515 call hecmw_abort( hecmw_comm_get_comm())
518 if(
associated(fstrsolid%unode) )
then
519 deallocate(fstrsolid%unode ,stat=ierror)
520 if( ierror /= 0 )
then
521 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, unode>'
523 call hecmw_abort( hecmw_comm_get_comm())
526 if(
associated(fstrsolid%unode_bak) )
then
527 deallocate(fstrsolid%unode_bak ,stat=ierror)
528 if( ierror /= 0 )
then
529 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, unode_bak>'
531 call hecmw_abort( hecmw_comm_get_comm())
534 if(
associated(fstrsolid%dunode) )
then
535 deallocate(fstrsolid%dunode ,stat=ierror)
536 if( ierror /= 0 )
then
537 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, dunode>'
539 call hecmw_abort( hecmw_comm_get_comm())
542 if(
associated(fstrsolid%ddunode) )
then
543 deallocate(fstrsolid%ddunode ,stat=ierror)
544 if( ierror /= 0 )
then
545 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, ddunode>'
547 call hecmw_abort( hecmw_comm_get_comm())
550 if(
associated(fstrsolid%shell_node_mode) )
then
551 deallocate(fstrsolid%shell_node_mode ,stat=ierror)
552 if( ierror /= 0 )
then
553 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, shell_node_mode>'
555 call hecmw_abort( hecmw_comm_get_comm())
558 if(
associated(fstrsolid%shell_rot_state) )
then
559 deallocate(fstrsolid%shell_rot_state ,stat=ierror)
560 if( ierror /= 0 )
then
561 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, shell_rot_state>'
563 call hecmw_abort( hecmw_comm_get_comm())
566 if(
associated(fstrsolid%shell_ref_triad) )
then
567 deallocate(fstrsolid%shell_ref_triad ,stat=ierror)
568 if( ierror /= 0 )
then
569 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, shell_ref_triad>'
571 call hecmw_abort( hecmw_comm_get_comm())
574 if(
associated(fstrsolid%shell_triad) )
then
575 deallocate(fstrsolid%shell_triad ,stat=ierror)
576 if( ierror /= 0 )
then
577 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, shell_triad>'
579 call hecmw_abort( hecmw_comm_get_comm())
582 if(
associated(fstrsolid%shell_triad_bak) )
then
583 deallocate(fstrsolid%shell_triad_bak ,stat=ierror)
584 if( ierror /= 0 )
then
585 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, shell_triad_bak>'
587 call hecmw_abort( hecmw_comm_get_comm())
590 if(
associated(fstrsolid%shell_dtriad) )
then
591 deallocate(fstrsolid%shell_dtriad ,stat=ierror)
592 if( ierror /= 0 )
then
593 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, shell_dtriad>'
595 call hecmw_abort( hecmw_comm_get_comm())
598 if(
associated(fstrsolid%shell_drill) )
then
599 deallocate(fstrsolid%shell_drill ,stat=ierror)
600 if( ierror /= 0 )
then
601 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, shell_drill>'
603 call hecmw_abort( hecmw_comm_get_comm())
606 if(
associated(fstrsolid%shell_drill_bak) )
then
607 deallocate(fstrsolid%shell_drill_bak ,stat=ierror)
608 if( ierror /= 0 )
then
609 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, shell_drill_bak>'
611 call hecmw_abort( hecmw_comm_get_comm())
614 if(
associated(fstrsolid%shell_ddrill) )
then
615 deallocate(fstrsolid%shell_ddrill ,stat=ierror)
616 if( ierror /= 0 )
then
617 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, shell_ddrill>'
619 call hecmw_abort( hecmw_comm_get_comm())
622 if(
associated(fstrsolid%QFORCE) )
then
623 deallocate(fstrsolid%QFORCE ,stat=ierror)
624 if( ierror /= 0 )
then
625 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, QFORCE>'
627 call hecmw_abort( hecmw_comm_get_comm())
630 if(
associated(fstrsolid%DFORCE) )
then
631 deallocate(fstrsolid%DFORCE ,stat=ierror)
632 if( ierror /= 0 )
then
633 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, DFORCE>'
635 call hecmw_abort( hecmw_comm_get_comm())
638 if(
associated(fstrsolid%temperature) )
then
639 deallocate(fstrsolid%temperature ,stat=ierror)
640 if( ierror /= 0 )
then
641 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, temperature>'
643 call hecmw_abort( hecmw_comm_get_comm())
646 if(
associated(fstrsolid%last_temp) )
then
647 deallocate(fstrsolid%last_temp ,stat=ierror)
648 if( ierror /= 0 )
then
649 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, reftemp>'
651 call hecmw_abort( hecmw_comm_get_comm())
654 if(
associated(fstrsolid%temp_bak) )
then
655 deallocate(fstrsolid%temp_bak ,stat=ierror)
656 if( ierror /= 0 )
then
657 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, reftemp>'
659 call hecmw_abort( hecmw_comm_get_comm())
664 if(
associated(fstrsolid%BOUNDARY_ngrp_GRPID) )
then
665 deallocate(fstrsolid%BOUNDARY_ngrp_GRPID, stat=ierror)
666 if( ierror /= 0 )
then
667 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, BOUNDARY_ngrp_GRPID>'
669 call hecmw_abort( hecmw_comm_get_comm())
672 if(
associated(fstrsolid%BOUNDARY_ngrp_ID) )
then
673 deallocate(fstrsolid%BOUNDARY_ngrp_ID, stat=ierror)
674 if( ierror /= 0 )
then
675 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, BOUNDARY_ngrp_ID>'
677 call hecmw_abort( hecmw_comm_get_comm())
680 if(
associated(fstrsolid%BOUNDARY_ngrp_type) )
then
681 deallocate(fstrsolid%BOUNDARY_ngrp_type, stat=ierror)
682 if( ierror /= 0 )
then
683 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, BOUNDARY_ngrp_type>'
685 call hecmw_abort( hecmw_comm_get_comm())
688 if(
associated(fstrsolid%BOUNDARY_ngrp_val) )
then
689 deallocate(fstrsolid%BOUNDARY_ngrp_val, stat=ierror)
690 if( ierror /= 0 )
then
691 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, BOUNDARY_ngrp_val>'
693 call hecmw_abort( hecmw_comm_get_comm())
696 if(
associated(fstrsolid%BOUNDARY_ngrp_amp) )
then
697 deallocate(fstrsolid%BOUNDARY_ngrp_amp, stat=ierror)
698 if( ierror /= 0 )
then
699 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, BOUNDARY_ngrp_amp>'
701 call hecmw_abort( hecmw_comm_get_comm())
704 if(
associated(fstrsolid%BOUNDARY_ngrp_istot) )
then
705 deallocate(fstrsolid%BOUNDARY_ngrp_istot, stat=ierror)
706 if( ierror /= 0 )
then
707 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, BOUNDARY_ngrp_istot>'
709 call hecmw_abort( hecmw_comm_get_comm())
712 if(
associated(fstrsolid%BOUNDARY_ngrp_rotID) )
then
713 deallocate(fstrsolid%BOUNDARY_ngrp_rotID, stat=ierror)
714 if( ierror /= 0 )
then
715 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, BOUNDARY_ngrp_rotID>'
717 call hecmw_abort( hecmw_comm_get_comm())
720 if(
associated(fstrsolid%BOUNDARY_ngrp_centerID) )
then
721 deallocate(fstrsolid%BOUNDARY_ngrp_centerID, stat=ierror)
722 if( ierror /= 0 )
then
723 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, BOUNDARY_ngrp_centerID>'
725 call hecmw_abort( hecmw_comm_get_comm())
729 if(
associated(fstrsolid%VELOCITY_ngrp_GRPID))
deallocate(fstrsolid%VELOCITY_ngrp_GRPID)
730 if(
associated(fstrsolid%VELOCITY_ngrp_ID))
deallocate(fstrsolid%VELOCITY_ngrp_ID)
731 if(
associated(fstrsolid%VELOCITY_ngrp_type))
deallocate(fstrsolid%VELOCITY_ngrp_type)
732 if(
associated(fstrsolid%VELOCITY_ngrp_amp))
deallocate(fstrsolid%VELOCITY_ngrp_amp)
733 if(
associated(fstrsolid%VELOCITY_ngrp_val))
deallocate(fstrsolid%VELOCITY_ngrp_val)
734 if(
associated(fstrsolid%VELOCITY_ngrp_rotID))
deallocate(fstrsolid%VELOCITY_ngrp_rotID)
735 if(
associated(fstrsolid%VELOCITY_ngrp_centerID))
deallocate(fstrsolid%VELOCITY_ngrp_centerID)
737 if(
associated(fstrsolid%ACCELERATION_ngrp_GRPID))
deallocate(fstrsolid%ACCELERATION_ngrp_GRPID)
738 if(
associated(fstrsolid%ACCELERATION_ngrp_ID))
deallocate(fstrsolid%ACCELERATION_ngrp_ID)
739 if(
associated(fstrsolid%ACCELERATION_ngrp_type))
deallocate(fstrsolid%ACCELERATION_ngrp_type)
740 if(
associated(fstrsolid%ACCELERATION_ngrp_amp))
deallocate(fstrsolid%ACCELERATION_ngrp_amp)
741 if(
associated(fstrsolid%ACCELERATION_ngrp_val))
deallocate(fstrsolid%ACCELERATION_ngrp_val)
744 if(
associated(fstrsolid%CLOAD_ngrp_GRPID) )
then
745 deallocate(fstrsolid%CLOAD_ngrp_GRPID, stat=ierror)
746 if( ierror /= 0 )
then
747 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, CLOAD_ngrp_GRPID>'
749 call hecmw_abort( hecmw_comm_get_comm())
752 if(
associated(fstrsolid%CLOAD_ngrp_ID) )
then
753 deallocate(fstrsolid%CLOAD_ngrp_ID, stat=ierror)
754 if( ierror /= 0 )
then
755 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, CLOAD_ngrp_ID>'
757 call hecmw_abort( hecmw_comm_get_comm())
760 if(
associated(fstrsolid%CLOAD_ngrp_DOF) )
then
761 deallocate(fstrsolid%CLOAD_ngrp_DOF, stat=ierror)
762 if( ierror /= 0 )
then
763 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, CLOAD_ngrp_DOF>'
765 call hecmw_abort( hecmw_comm_get_comm())
768 if(
associated(fstrsolid%CLOAD_ngrp_val) )
then
769 deallocate(fstrsolid%CLOAD_ngrp_val, stat=ierror)
770 if( ierror /= 0 )
then
771 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, CLOAD_ngrp_val>'
773 call hecmw_abort( hecmw_comm_get_comm())
776 if(
associated(fstrsolid%CLOAD_ngrp_amp) )
then
777 deallocate(fstrsolid%CLOAD_ngrp_amp, stat=ierror)
778 if( ierror /= 0 )
then
779 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, CLOAD_ngrp_amp>'
781 call hecmw_abort( hecmw_comm_get_comm())
784 if(
associated(fstrsolid%CLOAD_ngrp_rotID) )
then
785 deallocate(fstrsolid%CLOAD_ngrp_rotID, stat=ierror)
786 if( ierror /= 0 )
then
787 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, CLOAD_ngrp_rotID>'
789 call hecmw_abort( hecmw_comm_get_comm())
792 if(
associated(fstrsolid%CLOAD_ngrp_centerID) )
then
793 deallocate(fstrsolid%CLOAD_ngrp_centerID, stat=ierror)
794 if( ierror /= 0 )
then
795 write(
idbg,*)
'stop due to deallocation error <FSTR_SOLID, CLOAD_ngrp_centerID>'
797 call hecmw_abort( hecmw_comm_get_comm())
801 if(
associated(fstrsolid%DLOAD_ngrp_GRPID))
deallocate(fstrsolid%DLOAD_ngrp_GRPID)
802 if(
associated(fstrsolid%DLOAD_ngrp_ID))
deallocate(fstrsolid%DLOAD_ngrp_ID)
803 if(
associated(fstrsolid%DLOAD_ngrp_LID))
deallocate(fstrsolid%DLOAD_ngrp_LID)
804 if(
associated(fstrsolid%DLOAD_ngrp_amp))
deallocate(fstrsolid%DLOAD_ngrp_amp)
805 if(
associated(fstrsolid%DLOAD_ngrp_params))
deallocate(fstrsolid%DLOAD_ngrp_params)
807 if(
associated(fstrsolid%TEMP_ngrp_GRPID))
deallocate(fstrsolid%TEMP_ngrp_GRPID)
808 if(
associated(fstrsolid%TEMP_ngrp_ID))
deallocate(fstrsolid%TEMP_ngrp_ID)
809 if(
associated(fstrsolid%TEMP_ngrp_val))
deallocate(fstrsolid%TEMP_ngrp_val)
811 if(
associated(fstrsolid%SPRING_ngrp_GRPID))
deallocate(fstrsolid%SPRING_ngrp_GRPID)
812 if(
associated(fstrsolid%SPRING_ngrp_ID))
deallocate(fstrsolid%SPRING_ngrp_ID)
813 if(
associated(fstrsolid%SPRING_ngrp_DOF))
deallocate(fstrsolid%SPRING_ngrp_DOF)
814 if(
associated(fstrsolid%SPRING_ngrp_amp))
deallocate(fstrsolid%SPRING_ngrp_amp)
815 if(
associated(fstrsolid%SPRING_ngrp_val))
deallocate(fstrsolid%SPRING_ngrp_val)
816 if(
associated(fstrsolid%SPRING_incremental))
deallocate(fstrsolid%SPRING_incremental)
818 if(
associated(fstrsolid%COUPLE_ngrp_ID))
deallocate(fstrsolid%COUPLE_ngrp_ID)
838 if(
associated(fstrsolid%TNSTRAIN))
deallocate(fstrsolid%TNSTRAIN)
839 if(
associated(fstrsolid%TESTRAIN))
deallocate(fstrsolid%TESTRAIN)
841 if(
associated(fstrsolid%YIELD_RATIO))
deallocate(fstrsolid%YIELD_RATIO)
844 if(
associated(fstrsolid%REACTION))
deallocate(fstrsolid%REACTION)
846 if(
associated(fstrsolid%CONT_NFORCE))
deallocate(fstrsolid%CONT_NFORCE)
847 if(
associated(fstrsolid%CONT_FRIC))
deallocate(fstrsolid%CONT_FRIC)
848 if(
associated(fstrsolid%CONT_RELVEL))
deallocate(fstrsolid%CONT_RELVEL)
849 if(
associated(fstrsolid%CONT_STATE))
deallocate(fstrsolid%CONT_STATE)
850 if(
associated(fstrsolid%CONT_SGRP_ID))
deallocate(fstrsolid%CONT_SGRP_ID)
851 if(
associated(fstrsolid%CONT_AREA))
deallocate(fstrsolid%CONT_AREA)
852 if(
associated(fstrsolid%CONT_NTRAC))
deallocate(fstrsolid%CONT_NTRAC)
853 if(
associated(fstrsolid%CONT_FTRAC))
deallocate(fstrsolid%CONT_FTRAC)
854 if(
associated(fstrsolid%EMBED_NFORCE))
deallocate(fstrsolid%EMBED_NFORCE)
860 if(
associated(fstrsolid%is_rot))
deallocate(fstrsolid%is_rot)
861 if(
associated(fstrsolid%GL0))
deallocate(fstrsolid%GL0)
862 if(
associated(fstrsolid%QFORCE_bak))
deallocate(fstrsolid%QFORCE_bak)
864 if(
associated(fstrsolid%contacts))
then
868 deallocate(fstrsolid%contacts)
870 if(
associated(fstrsolid%embeds))
then
874 deallocate(fstrsolid%embeds)
876 if(
associated(fstrsolid%unode_bkup))
deallocate(fstrsolid%unode_bkup)
877 if(
associated(fstrsolid%QFORCE_bkup))
deallocate(fstrsolid%QFORCE_bkup)
878 if(
associated(fstrsolid%DFORCE_bkup))
deallocate(fstrsolid%DFORCE_bkup)
879 if(
associated(fstrsolid%last_temp_bkup))
deallocate(fstrsolid%last_temp_bkup)
880 if(
associated(fstrsolid%shell_triad_bkup))
deallocate(fstrsolid%shell_triad_bkup)
881 if(
associated(fstrsolid%shell_drill_bkup))
deallocate(fstrsolid%shell_drill_bkup)
882 if(
associated(fstrsolid%elements_bkup))
then
883 do i=1,
size(fstrsolid%elements_bkup)
884 if(
associated(fstrsolid%elements_bkup(i)%gausses) )
then
885 do j=1,
size(fstrsolid%elements_bkup(i)%gausses)
886 call fstr_finalize_gauss(fstrsolid%elements_bkup(i)%gausses(j))
888 deallocate( fstrsolid%elements_bkup(i)%gausses )
891 if(
associated(fstrsolid%elements_bkup(i)%equiForces) )
then
892 deallocate(fstrsolid%elements_bkup(i)%equiForces)
894 if(
associated(fstrsolid%elements_bkup(i)%aux) )
then
895 deallocate(fstrsolid%elements_bkup(i)%aux)
898 deallocate(fstrsolid%elements_bkup)
900 if(
associated(fstrsolid%contacts_bkup))
then
904 deallocate(fstrsolid%contacts_bkup)
906 if(
associated(fstrsolid%embeds_bkup))
then
910 deallocate(fstrsolid%embeds_bkup)
921 integer(kind=kint) :: ctrl
923 character(HECMW_NAME_LEN) :: amp
924 integer(kind=kint) :: amp_id
926 integer(kind=kint) :: rcode, iproc
939 type( step_info ),
intent(inout) :: stepinfo
940 character(len=*),
intent(in) :: cpname
941 type( tparamconverg ),
intent(in) :: cnvparam(0:)
942 integer(kind=kint),
intent(in) :: istep
944 integer(kind=kint) :: i, id
947 if( len_trim(cpname) > 0 )
then
948 do i=1,ubound(cnvparam,1)
954 write(*,*)
'### Error: CONVERG_PARAM referred to by STEP is not defined before it : ', trim(cpname)
955 write(
ilog,*)
'### Error: CONVERG_PARAM referred to by STEP is not defined before it : ', trim(cpname)
956 stop hecmw_exit_input
960 call setup_stepinfo_converg( stepinfo, cnvparam(id) )
962 if( .not. any( stepinfo%cnv_check(kcnvresidual:kcnvcorrection, kcnvtranslation:kcnvrotation, :) ) )
then
963 write(*,*)
'### Error: RESIDUAL and CORRECTION are all SKIP in step : ', istep
964 write(
ilog,*)
'### Error: RESIDUAL and CORRECTION are all SKIP in step : ', istep
965 stop hecmw_exit_input
977 integer(kind=kint),
intent(in) :: istep
978 character(len=*),
intent(in) :: tp_name
979 character(len=*),
intent(in) :: ainc_name
980 character(len=*),
intent(in) :: cnv_name
982 integer(kind=kint) :: i
988 if( fstrparam%solution_type==
kstdynamic .and. &
989 & fstrsolid%step_ctrl(istep)%inc_type == stepfixedinc )
then
990 fstrsolid%step_ctrl(istep)%initdt = fstrdynamic%t_delta
991 fstrsolid%step_ctrl(istep)%mindt = fstrdynamic%t_delta
992 fstrsolid%step_ctrl(istep)%maxdt = fstrdynamic%t_delta
994 if(
associated(fstrparam%timepoints) )
then
995 do i=1,
size(fstrparam%timepoints)
996 if(
hecmw_streqr( fstrparam%timepoints(i)%name, tp_name ) )
then
997 fstrsolid%step_ctrl(istep)%timepoint_id = i;
exit
1001 if(
associated(fstrparam%ainc) )
then
1002 do i=1,
size(fstrparam%ainc)-1
1003 if(
hecmw_streqr( fstrparam%ainc(i)%name, ainc_name ) )
then
1004 fstrsolid%step_ctrl(istep)%AincParam_id = i;
exit
1013 integer(kind=kint) :: ctrl
1016 type(t_output_ctrl) :: outctrl
1017 integer(kind=kint) :: islog, result, visual, femap
1019 call fstr_ctrl_get_output( ctrl, outctrl, islog, result, visual, femap )
1020 if( visual==1 ) p%PARAM%fg_visual= 1
1021 if( result==1 ) p%PARAM%fg_result = 1
1028 integer(kind=kint) :: ctrl
1032 type(t_output_ctrl) :: outctrl
1033 integer(kind=kint) :: islog, result, visual, femap, c_output, ierror
1034 character(len=HECMW_FILENAME_LEN) :: logfileNAME
1036 fstrsolid => p%SOLID
1037 write( logfilename,
'(i5,''.log'')' )
myrank
1039 call fstr_ctrl_get_output( ctrl, outctrl, islog, result, visual, femap )
1040 if( islog == 1 )
then
1042 outctrl%filename = trim(logfilename)
1043 outctrl%filenum =
ilog
1044 call fstr_copy_outctrl(fstrsolid%output_ctrl(c_output), outctrl)
1046 if( femap == 1 )
then
1048 write( outctrl%filename,
'(a,i0,a)')
'utable.',
myrank,
'.dat'
1049 outctrl%filenum =
iutb
1050 call fstr_copy_outctrl(fstrsolid%output_ctrl(c_output), outctrl)
1051 open( unit=outctrl%filenum, file=outctrl%filename, status=
'REPLACE', iostat=ierror )
1052 if( ierror /= 0 )
then
1053 write(*,*)
'Warning: cannot open output file: ', trim(outctrl%filename)
1055 fstrsolid%output_ctrl(c_output)%outinfo%grp_id = 1
1057 if( result == 1 )
then
1059 call fstr_copy_outctrl(fstrsolid%output_ctrl(c_output), outctrl)
1061 if( visual == 1 )
then
1063 call fstr_copy_outctrl(fstrsolid%output_ctrl(c_output), outctrl)
1073 integer(kind=kint) :: ctrl
1075 integer(kind=kint) :: rcode
1076 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
1077 integer(kind=kint) :: n
1079 if( p%SOLID%file_type /=
kbcffstr )
return
1084 allocate( grp_id_name(n))
1086 p%PARAM%fg_couple_type, &
1087 p%PARAM%fg_couple_first, &
1088 p%PARAM%fg_couple_window, &
1089 grp_id_name, hecmw_name_len )
1094 deallocate( grp_id_name )
1101 integer(kind=kint) :: ctrl
1104 integer(kind=kint) :: rcode
1105 character(HECMW_NAME_LEN) :: amp
1106 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
1107 integer(kind=kint) :: n
1108 integer(kind=kint) :: gid, mode, measure, state
1109 real(kind=kreal) :: eps
1110 real(kind=kreal),
pointer :: thlow(:), thup(:)
1118 allocate( grp_id_name(n), thlow(n), thup(n) )
1125 amp, eps, measure, state, n, grp_id_name, thlow, thup )
1127 deallocate( grp_id_name )
1136 integer(kind=kint) :: ctrl
1138 integer(kind=kint) :: rcode
1140 integer :: nout, nout_monit,node_monit_1 ,elem_monit_1 ,intg_monit_1
1141 integer :: ipt, idx_elpl, iout_list(6)
1142 real(kind=kreal) :: sig_y0, h_dash
1143 real(kind=kreal) :: dt, etime, eps
1148 if( slot%first > 1 )
then
1155 if( ipt == 2 ) p%PARAM%nlgeom = .true.
1159 write(*,*)
"Warning : !STATIC : parameter 'TYPE=INFINITE' is deprecated." &
1160 & //
" Please use the replacement parameter 'TYPE=INFINITESIMAL'"
1164 dt, etime, itmax, eps, p%SOLID%restart_nout, &
1168 nout, nout_monit, node_monit_1, &
1169 elem_monit_1, intg_monit_1 )
1181 integer(kind=kint) :: ctrl
1184 integer(kind=kint) :: rcode
1185 character(HECMW_NAME_LEN) :: amp, rotc_name(1)
1186 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
1187 integer(kind=kint),
pointer :: dof_ids (:)
1188 integer(kind=kint),
pointer :: dof_ide (:)
1189 real(kind=kreal),
pointer :: val_ptr(:)
1190 integer(kind=kint) :: n
1192 integer(kind=kint) :: gid, istot
1210 allocate( grp_id_name(n) )
1211 allocate( dof_ids(n) )
1212 allocate( dof_ide(n) )
1213 allocate( val_ptr(n) )
1222 amp, n, grp_id_name, dof_ids, dof_ide, val_ptr )
1224 deallocate( grp_id_name )
1225 deallocate( dof_ids )
1226 deallocate( dof_ide )
1227 deallocate( val_ptr )
1228 nullify( grp_id_name )
1241 integer(kind=kint) :: ctrl
1244 integer(kind=kint) :: rcode
1245 character(HECMW_NAME_LEN) :: amp, rotc_name(1)
1246 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
1247 real(kind=kreal),
pointer :: val_ptr(:)
1248 integer(kind=kint),
pointer :: id_ptr(:)
1249 integer(kind=kint) :: n
1250 integer(kind=kint) :: gid
1252 if( p%SOLID%file_type /=
kbcffstr )
return
1263 allocate( grp_id_name(n))
1264 allocate( id_ptr(n) )
1265 allocate( val_ptr(n) )
1274 amp, n, grp_id_name, id_ptr, val_ptr )
1276 deallocate( grp_id_name )
1277 deallocate( id_ptr )
1278 deallocate( val_ptr )
1279 nullify( grp_id_name )
1288 integer(kind=kint) :: ctrl
1291 integer(kind=kint) :: rcode
1292 character(HECMW_NAME_LEN) :: amp
1293 integer(kind=kint) :: follow
1294 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
1295 real(kind=kreal),
pointer :: new_params(:,:)
1296 integer(kind=kint),
pointer :: lid_ptr(:)
1297 integer(kind=kint) :: n
1298 integer(kind=kint) :: gid
1300 if( p%SOLID%file_type /=
kbcffstr )
return
1308 allocate( grp_id_name(n))
1309 allocate( lid_ptr(n) )
1310 allocate( new_params(0:6,n))
1313 follow = p%SOLID%DLOAD_follow
1314 if( .not. p%PARAM%nlgeom ) follow = 0
1316 grp_id_name, hecmw_name_len, &
1317 lid_ptr, new_params )
1320 amp, n, grp_id_name, lid_ptr, new_params )
1321 deallocate( grp_id_name )
1322 deallocate( lid_ptr )
1323 deallocate( new_params )
1324 nullify( grp_id_name )
1326 nullify( new_params )
1335 integer(kind=kint) :: ctrl
1338 integer(kind=kint) :: rcode, gid
1339 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
1340 real(kind=kreal),
pointer :: val_ptr(:)
1341 integer(kind=kint) :: n
1343 if( p%SOLID%file_type /=
kbcffstr )
return
1349 allocate( grp_id_name(n))
1350 allocate( val_ptr(n) )
1354 p%SOLID%TEMP_irres, &
1355 p%SOLID%TEMP_tstep, &
1356 p%SOLID%TEMP_interval, &
1357 p%SOLID%TEMP_rtype, &
1358 grp_id_name, hecmw_name_len, &
1361 if( p%SOLID%TEMP_irres == 0 )
then
1365 deallocate( grp_id_name )
1366 deallocate( val_ptr )
1367 nullify( grp_id_name )
1378 integer(kind=kint) :: ctrl
1381 integer(kind=kint) :: rcode, incremental
1382 character(HECMW_NAME_LEN) :: amp
1383 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
1384 real(kind=kreal),
pointer :: val_ptr(:)
1385 integer(kind=kint),
pointer :: id_ptr(:)
1386 integer(kind=kint) :: n
1387 integer(kind=kint) :: gid
1389 if( p%SOLID%file_type /=
kbcffstr )
return
1395 allocate( grp_id_name(n))
1396 allocate( id_ptr(n) )
1397 allocate( val_ptr(n) )
1402 rcode =
fstr_ctrl_get_spring( ctrl, amp, grp_id_name, hecmw_name_len, id_ptr, val_ptr, incremental )
1405 amp, n, grp_id_name, id_ptr, val_ptr )
1407 deallocate( grp_id_name )
1408 deallocate( id_ptr )
1409 deallocate( val_ptr )
1410 nullify( grp_id_name )
1422 integer(kind=kint) :: ctrl
1425 integer(kind=kint) :: rcode
1426 integer(kind=kint) :: vType
1427 character(HECMW_NAME_LEN) :: amp, rotc_name(1)
1428 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
1429 integer(kind=kint),
pointer :: dof_ids (:)
1430 integer(kind=kint),
pointer :: dof_ide (:)
1431 real(kind=kreal),
pointer :: val_ptr(:)
1432 integer(kind=kint) :: n
1433 integer(kind=kint) :: gid
1444 allocate( grp_id_name(n))
1445 allocate( dof_ids(n))
1446 allocate( dof_ide(n))
1447 allocate( val_ptr(n) )
1454 grp_id_name, hecmw_name_len, &
1455 dof_ids, dof_ide, val_ptr )
1459 amp, n, grp_id_name, dof_ids, dof_ide, val_ptr )
1461 deallocate( grp_id_name )
1462 deallocate( dof_ids )
1463 deallocate( dof_ide )
1464 deallocate( val_ptr )
1465 nullify( grp_id_name )
1478 integer(kind=kint) :: ctrl
1481 integer(kind=kint) :: rcode
1482 integer(kind=kint) :: aType
1483 character(HECMW_NAME_LEN) :: amp
1484 character(HECMW_NAME_LEN),
pointer :: grp_id_name(:)
1485 integer(kind=kint),
pointer :: dof_ids (:)
1486 integer(kind=kint),
pointer :: dof_ide (:)
1487 real(kind=kreal),
pointer :: val_ptr(:)
1488 integer(kind=kint) :: n
1489 integer(kind=kint) :: gid
1497 allocate( grp_id_name(n))
1498 allocate( dof_ids(n))
1499 allocate( dof_ide(n))
1500 allocate( val_ptr(n))
1505 grp_id_name, hecmw_name_len, &
1506 dof_ids, dof_ide, val_ptr)
1509 amp, n, grp_id_name, dof_ids, dof_ide, val_ptr )
1511 deallocate( grp_id_name )
1512 deallocate( dof_ids )
1513 deallocate( dof_ide )
1514 deallocate( val_ptr )
1515 nullify( grp_id_name )
1523 integer(kind=kint) :: ctrl
1524 type (hecmwST_local_mesh) :: hecMESH
1525 type (fstr_solid ) :: fstrSOLID
1526 write(
ilog,*)
'### Error : In !BOUNDARY, TYPE=NASTRAN is not supported.'
1535 integer(kind=kint) :: ctrl
1540 integer(kind=kint) :: c_contact, n, k
1541 real(kind=kreal) :: ee, pp, rho, alpha
1542 character(len=HECMW_FILENAME_LEN) :: mName
1546 fstrparam => p%PARAM
1547 fstrsolid => p%SOLID
1550 c_contact = slot%first - 1
1552 ,ee, pp, rho, alpha, mname, k ) )
then
1553 write(*,*)
'### Error: Fail in read in contact condition : ', c_contact
1554 write(
ilog,*)
'### Error: Fail in read in contact condition : ', c_contact
1555 stop hecmw_exit_input
1558 if( rho>0.d0 ) cgn = rho
1559 if( alpha>0.d0 ) cgt = alpha
1568 integer(kind=kint) :: ctrl
1573 integer(kind=kint) :: c_embed, n, k
1574 character(len=HECMW_FILENAME_LEN) :: mName
1578 fstrparam => p%PARAM
1579 fstrsolid => p%SOLID
1582 c_embed = slot%first - 1
1583 if( .not.
fstr_ctrl_get_embed( ctrl, n, fstrsolid%embeds(slot%first:slot%last), mname, k ) )
then
1584 write(*,*)
'### Error: Fail in read in embed condition : ', c_embed
1585 write(
ilog,*)
'### Error: Fail in read in embed condition : ', c_embed
1586 stop hecmw_exit_input
1596 integer(kind=kint) :: ctrl
1599 type(hecmwst_local_mesh),
pointer :: hecMESH
1602 integer(kind=kint) :: i
1603 character(len=HECMW_FILENAME_LEN) :: mName, mName2, mName3
1608 fstrparam => p%PARAM
1609 fstrsolid => p%SOLID
1611 if( .not.
fstr_ctrl_get_istep( ctrl, hecmesh, fstrsolid%step_ctrl(slot%first), mname, mname2, mname3 ) )
then
1612 write(*,*)
'### Error: Fail in read in step definition : ' , slot%first
1613 write(
ilog,*)
'### Error: Fail in read in step definition : ', slot%first
1614 stop hecmw_exit_input
1617 if(
associated(fstrparam%timepoints) )
then
1618 do i=1,
size(fstrparam%timepoints)
1619 if(
hecmw_streqr( fstrparam%timepoints(i)%name, mname ) )
then
1620 fstrsolid%step_ctrl(slot%first)%timepoint_id = i;
exit
1624 if(
associated(fstrparam%ainc) )
then
1625 do i=1,
size(fstrparam%ainc)-1
1626 if(
hecmw_streqr( fstrparam%ainc(i)%name, mname2 ) )
then
1627 fstrsolid%step_ctrl(slot%first)%AincParam_id = i;
exit
1639 integer(kind=kint) :: ctrl
1642 type(hecmwst_local_mesh),
pointer :: hecMESH
1646 character(len=HECMW_FILENAME_LEN) :: mName, mName2, mName3
1651 fstrparam => p%PARAM
1652 fstrsolid => p%SOLID
1653 fstrdynamic => p%DYN
1655 if( .not.
fstr_ctrl_get_istep( ctrl, hecmesh, fstrsolid%step_ctrl(slot%first), mname, mname2, mname3 ) )
then
1656 write(*,*)
'### Error: Fail in read in step definition : ' , slot%first
1657 write(
ilog,*)
'### Error: Fail in read in step definition : ', slot%first
1658 stop hecmw_exit_input
1668 integer(kind=kint) :: ctrl
1671 type(hecmwst_local_mesh),
pointer :: hecMESH
1677 fstrsolid => p%SOLID
1680 write(*,*)
'### Error: Fail in read in SECTION definition : ' , slot%first
1681 write(
ilog,*)
'### Error: Fail in read in SECTION definition : ', slot%first
1682 stop hecmw_exit_input
1691 integer(kind=kint) :: ctrl
1698 fstrsolid => p%SOLID
1701 write(*,*)
'### Error: Fail in read in ELEMOPT definition : ' , slot%first
1702 write(
ilog,*)
'### Error: Fail in read in ELEMOPT definition : ', slot%first
1703 stop hecmw_exit_input
1714 integer(kind=kint) :: ctrl
1717 type(hecmwst_local_mesh),
pointer :: hecMESH
1719 integer(kind=kint) :: i, cid, cache
1720 character(len=HECMW_FILENAME_LEN) :: mName
1725 fstrsolid => p%SOLID
1726 cache = p%STATE%cache
1729 write(*,*)
'### Error: Fail in read in material definition : ' , slot%first
1730 write(
ilog,*)
'### Error: Fail in read in material definition : ', slot%first
1731 stop hecmw_exit_input
1734 if(cache < hecmesh%material%n_mat)
then
1735 if(
hecmw_streqr( hecmesh%material%mat_name(cache), mname ))
then
1741 do i=1,hecmesh%material%n_mat
1742 if(
hecmw_streqr( hecmesh%material%mat_name(i), mname ) )
then
1750 write(*,*)
'### Error: Fail in read in material definition : ' , slot%first
1751 write(
ilog,*)
'### Error: Fail in read in material definition : ', slot%first
1752 stop hecmw_exit_input
1754 fstrsolid%materials(cid)%name = hecmesh%material%mat_name(cid)
1755 if(slot%first>hecmesh%material%n_mat)
call initmaterial( fstrsolid%materials(cid) )
1757 p%STATE%cache = cache
1763 integer(kind=kint) :: ctrl
1766 integer(kind=kint) :: rcode
1767 character(len=HECMW_NAME_LEN) :: header_name
1769 if( p%STATE%cid == 0 )
then
1772 ' : given before the first !MATERIAL; put it after !MATERIAL, NAME=<material name>' )
1782 integer(kind=kint) :: ctrl
1786 integer(kind=kint) :: cid
1789 fstrsolid => p%SOLID
1792 fstrsolid%materials(cid)%mtype, &
1793 fstrsolid%materials(cid)%nlgeom_flag, &
1794 fstrsolid%materials(cid)%variables, &
1795 fstrsolid%materials(cid)%dict)/=0 )
then
1796 write(*,*)
'### Error: Fail in read in elasticity definition : ' , cid
1797 write(
ilog,*)
'### Error: Fail in read in elasticity definition : ', cid
1798 stop hecmw_exit_input
1807 integer(kind=kint) :: ctrl
1811 integer(kind=kint) :: cid
1814 fstrsolid => p%SOLID
1817 fstrsolid%materials(cid)%mtype, &
1818 fstrsolid%materials(cid)%nlgeom_flag, &
1819 fstrsolid%materials(cid)%variables, &
1820 fstrsolid%materials(cid)%dict)/=0 )
then
1821 write(*,*)
'### Error: Fail in read in plasticity definition : ' , cid
1822 write(
ilog,*)
'### Error: Fail in read in plasticity definition : ', cid
1823 stop hecmw_exit_input
1832 integer(kind=kint) :: ctrl
1836 integer(kind=kint) :: cid
1839 fstrsolid => p%SOLID
1842 fstrsolid%materials(cid)%mtype, &
1843 fstrsolid%materials(cid)%nlgeom_flag, &
1844 fstrsolid%materials(cid)%variables )/=0 )
then
1845 write(*,*)
'### Error: Fail in read in elasticity definition : ' , cid
1846 write(
ilog,*)
'### Error: Fail in read in elasticity definition : ', cid
1847 stop hecmw_exit_input
1856 integer(kind=kint) :: ctrl
1860 integer(kind=kint) :: cid
1863 fstrsolid => p%SOLID
1866 fstrsolid%materials(cid)%mtype, &
1867 fstrsolid%materials(cid)%nlgeom_flag, &
1868 fstrsolid%materials(cid)%dict)/=0 )
then
1869 write(*,*)
'### Error: Fail in read in plasticity definition : ' , cid
1870 write(
ilog,*)
'### Error: Fail in read in plasticity definition : ', cid
1871 stop hecmw_exit_input
1881 integer(kind=kint) :: ctrl
1885 integer(kind=kint) :: cid
1888 fstrsolid => p%SOLID
1890 if( fstrsolid%materials(cid)%mtype/=
viscoelastic )
then
1891 write(*,*)
'### WARNING: TRS can only be defined for viscoelastic material! It is ignored! '
1892 write(
ilog,*)
'### WARNING: TRS can only be defined for viscoelastic material! It is ignored! '
1894 if(
fstr_ctrl_get_trs( ctrl, fstrsolid%materials(cid)%mtype, fstrsolid%materials(cid)%variables)/=0 )
then
1895 write(*,*)
'### Error: Fail in read in TRS definition : ' , cid
1896 write(
ilog,*)
'### Error: Fail in read in TRS definition : ', cid
1897 stop hecmw_exit_input
1907 integer(kind=kint) :: ctrl
1911 integer(kind=kint) :: cid
1914 fstrsolid => p%SOLID
1917 fstrsolid%materials(cid)%mtype, &
1918 fstrsolid%materials(cid)%nlgeom_flag, &
1919 fstrsolid%materials(cid)%dict)/=0 )
then
1920 write(*,*)
'### Error: Fail in read in plasticity definition : ' , cid
1921 write(
ilog,*)
'### Error: Fail in read in plasticity definition : ', cid
1922 stop hecmw_exit_input
1931 integer(kind=kint) :: ctrl
1935 integer(kind=kint) :: cid
1938 fstrsolid => p%SOLID
1941 write(*,*)
'### Error: Fail in read in density definition : ' , cid
1942 write(
ilog,*)
'### Error: Fail in read in density definition : ', cid
1943 stop hecmw_exit_input
1952 integer(kind=kint) :: ctrl
1956 integer(kind=kint) :: cid
1959 fstrsolid => p%SOLID
1962 fstrsolid%materials(cid)%dict)/=0 )
then
1963 write(*,*)
'### Error: Fail in read in expansion coefficient definition : ' , cid
1964 write(
ilog,*)
'### Error: Fail in read in expansion coefficient definition : ', cid
1965 stop hecmw_exit_input
1974 integer(kind=kint) :: ctrl
1978 integer(kind=kint) :: cid
1981 fstrsolid => p%SOLID
1984 fstrsolid%materials(cid)%is_elem_Rayleigh_damping)/=0 )
then
1985 write(*,*)
'### Error: Fail in read in damping definition : ' , cid
1986 write(
ilog,*)
'### Error: Fail in read in damping definition : ', cid
1987 stop hecmw_exit_input
1996 integer(kind=kint) :: ctrl
2000 integer(kind=kint) :: cid
2003 fstrsolid => p%SOLID
2006 fstrsolid%materials(cid)%mtype, &
2007 fstrsolid%materials(cid)%nlgeom_flag, &
2008 fstrsolid%materials(cid)%variables, &
2009 fstrsolid%materials(cid)%dict)/=0 )
then
2010 write(*,*)
'### Error: Fail in read in fluid definition : ' , cid
2011 write(
ilog,*)
'### Error: Fail in read in fluid definition : ', cid
2012 stop hecmw_exit_input
2021 integer(kind=kint) :: ctrl
2025 integer(kind=kint) :: cid
2028 fstrsolid => p%SOLID
2031 fstrsolid%materials(cid)%mtype, &
2032 fstrsolid%materials(cid)%nlgeom_flag, &
2033 fstrsolid%materials(cid)%variables_i, &
2034 fstrsolid%materials(cid)%dict)/=0 )
then
2035 write(*,*)
'### Error: Fail in read in spring_d definition : ' , cid
2036 write(
ilog,*)
'### Error: Fail in read in spring_d definition : ', cid
2037 stop hecmw_exit_input
2046 integer(kind=kint) :: ctrl
2050 integer(kind=kint) :: cid
2053 fstrsolid => p%SOLID
2056 fstrsolid%materials(cid)%mtype, &
2057 fstrsolid%materials(cid)%nlgeom_flag, &
2058 fstrsolid%materials(cid)%variables_i, &
2059 fstrsolid%materials(cid)%dict)/=0 )
then
2060 write(*,*)
'### Error: Fail in read in spring_a definition : ' , cid
2061 write(
ilog,*)
'### Error: Fail in read in spring_a definition : ', cid
2062 stop hecmw_exit_input
2071 integer(kind=kint) :: ctrl
2075 integer(kind=kint) :: cid
2078 fstrsolid => p%SOLID
2081 fstrsolid%materials(cid)%mtype, &
2082 fstrsolid%materials(cid)%nlgeom_flag, &
2083 fstrsolid%materials(cid)%variables_i, &
2084 fstrsolid%materials(cid)%dict)/=0 )
then
2085 write(*,*)
'### Error: Fail in read in spring_d definition : ' , cid
2086 write(
ilog,*)
'### Error: Fail in read in spring_d definition : ', cid
2087 stop hecmw_exit_input
2096 integer(kind=kint) :: ctrl
2100 integer(kind=kint) :: cid
2103 fstrsolid => p%SOLID
2106 fstrsolid%materials(cid)%mtype, &
2107 fstrsolid%materials(cid)%nlgeom_flag, &
2108 fstrsolid%materials(cid)%variables_i, &
2109 fstrsolid%materials(cid)%dict)/=0 )
then
2110 write(*,*)
'### Error: Fail in read in spring_a definition : ' , cid
2111 write(
ilog,*)
'### Error: Fail in read in spring_a definition : ', cid
2112 stop hecmw_exit_input
2121 integer(kind=kint) :: ctrl
2125 integer(kind=kint) :: cid
2128 fstrsolid => p%SOLID
2131 fstrsolid%materials(cid)%nlgeom_flag, fstrsolid%materials(cid)%nfstatus, &
2132 fstrsolid%materials(cid)%variables(101:) )/=0 )
then
2133 write(*,*)
'### Error: Fail in read in user defined material : ' , cid
2134 write(
ilog,*)
'### Error: Fail in read in user defined material : ', cid
2135 stop hecmw_exit_input
2144 integer(kind=kint) :: ctrl
2147 type(hecmwst_local_mesh),
pointer :: hecMESH
2149 integer(kind=kint) :: c_output, i
2152 fstrsolid => p%SOLID
2156 write(*,*)
'### Error: Fail in read in node output definition : ' , c_output
2157 write(
ilog,*)
'### Error: Fail in read in node output definition : ', c_output
2158 stop hecmw_exit_input
2160 if( fstrsolid%output_ctrl(c_output)%outinfo%grp_id_name /=
'ALL' )
then
2162 do i=1,hecmesh%node_group%n_grp
2163 if( fstrsolid%output_ctrl(c_output)%outinfo%grp_id_name == hecmesh%node_group%grp_name(i) )
then
2164 fstrsolid%output_ctrl(c_output)%outinfo%grp_id = i;
exit
2175 integer(kind=kint) :: ctrl
2178 type(hecmwst_local_mesh),
pointer :: hecMESH
2180 integer(kind=kint) :: c_output, i
2183 fstrsolid => p%SOLID
2187 write(*,*)
'### Error: Fail in read in element output definition : ' , c_output
2188 write(
ilog,*)
'### Error: Fail in read in element output definition : ', c_output
2189 stop hecmw_exit_input
2191 if( fstrsolid%output_ctrl(c_output)%outinfo%grp_id_name /=
'ALL' )
then
2193 do i=1,hecmesh%node_group%n_grp
2194 if( fstrsolid%output_ctrl(c_output)%outinfo%grp_id_name == hecmesh%node_group%grp_name(i) )
then
2195 fstrsolid%output_ctrl(c_output)%outinfo%grp_id = i;
exit
2206 integer(kind=kint) :: ctrl
2210 write(*,*)
'### Error: Fail in read in ULOAD definition : '
2211 write(
ilog,*)
'### Error: Fail in read in ULOAD definition : '
2212 stop hecmw_exit_input
2221 amp_name, n, grp_names, dof_ids, dof_ide, vals )
2223 type(hecmwst_local_mesh),
target :: hecMESH
2225 character(len=*),
intent(in) :: header_name
2226 integer(kind=kint),
intent(in) :: gid
2227 integer(kind=kint),
intent(in) :: istot
2228 character(len=HECMW_NAME_LEN),
intent(in) :: rotc_name
2229 character(len=HECMW_NAME_LEN),
intent(in) :: amp_name
2230 integer(kind=kint),
intent(in) :: n
2231 character(len=HECMW_NAME_LEN),
intent(in) :: grp_names(:)
2232 integer(kind=kint),
intent(in) :: dof_ids(:)
2233 integer(kind=kint),
intent(in) :: dof_ide(:)
2234 real(kind=kreal),
intent(in) :: vals(:)
2236 character(len=HECMW_NAME_LEN) :: rotc(1)
2237 integer(kind=kint) :: amp_id, rotc_id(1), n_rotc
2238 integer(kind=kint) :: i, old_size, new_size
2242 if( rotc_name /=
' ' )
then
2244 ' : rotational boundary cannot be specified with total value' )
2245 fstrsolid%BOUNDARY_ngrp_rot = fstrsolid%BOUNDARY_ngrp_rot + 1
2246 n_rotc = fstrsolid%BOUNDARY_ngrp_rot
2252 old_size = fstrsolid%BOUNDARY_ngrp_tot
2253 new_size = old_size + n
2254 fstrsolid%BOUNDARY_ngrp_tot = new_size
2265 fstrsolid%BOUNDARY_ngrp_GRPID(old_size+1:new_size) = gid
2266 call node_grp_name_to_id_ex( hecmesh, header_name, n, grp_names, fstrsolid%BOUNDARY_ngrp_ID(old_size+1:))
2267 fstrsolid%BOUNDARY_ngrp_istot(old_size+1:new_size) = istot
2270 fstrsolid%BOUNDARY_ngrp_rotID(old_size+1:) = n_rotc
2271 fstrsolid%BOUNDARY_ngrp_centerID(old_size+1:) = rotc_id(1)
2274 if( (dof_ids(i) < 1).or.(6 < dof_ids(i)).or.(dof_ide(i) < 1).or.(6 < dof_ide(i)) )
then
2276 ' : range of dof_ids and dof_ide is from 1 to 6' )
2278 fstrsolid%BOUNDARY_ngrp_val(old_size+i) = vals(i)
2279 fstrsolid%BOUNDARY_ngrp_type(old_size+i) = 10 * dof_ids(i) + dof_ide(i)
2280 fstrsolid%BOUNDARY_ngrp_amp(old_size+i) = amp_id
2290 amp_name, n, grp_names, dofs, vals )
2292 type(hecmwst_local_mesh),
target :: hecMESH
2294 character(len=*),
intent(in) :: header_name
2295 integer(kind=kint),
intent(in) :: gid
2296 character(len=HECMW_NAME_LEN),
intent(in) :: rotc_name
2297 character(len=HECMW_NAME_LEN),
intent(in) :: amp_name
2298 integer(kind=kint),
intent(in) :: n
2299 character(len=HECMW_NAME_LEN),
intent(in) :: grp_names(:)
2300 integer(kind=kint),
intent(in) :: dofs(:)
2301 real(kind=kreal),
intent(in) :: vals(:)
2303 character(len=HECMW_NAME_LEN) :: rotc(1)
2304 integer(kind=kint) :: amp_id, rotc_id(1), n_rotc
2305 integer(kind=kint) :: i, old_size, new_size
2306 integer(kind=kint) :: ngrp_id, nnode_grp
2307 character(len=HECMW_MSG_LEN) :: msg(2)
2311 if( rotc_name /=
' ' )
then
2312 fstrsolid%CLOAD_ngrp_rot = fstrsolid%CLOAD_ngrp_rot + 1
2313 n_rotc = fstrsolid%CLOAD_ngrp_rot
2319 old_size = fstrsolid%CLOAD_ngrp_tot
2320 new_size = old_size + n
2321 fstrsolid%CLOAD_ngrp_tot = new_size
2331 fstrsolid%CLOAD_ngrp_rotID(old_size+1:) = n_rotc
2332 fstrsolid%CLOAD_ngrp_centerID(old_size+1:) = rotc_id(1)
2336 fstrsolid%CLOAD_ngrp_amp(old_size+i) = amp_id
2337 fstrsolid%CLOAD_ngrp_DOF(old_size+i) = dofs(i)
2338 fstrsolid%CLOAD_ngrp_val(old_size+i) = vals(i)
2340 fstrsolid%CLOAD_ngrp_GRPID(old_size+1:new_size) = gid
2345 if( hecmesh%n_refine > 0 )
then
2347 ngrp_id = fstrsolid%CLOAD_ngrp_ID(old_size+i)
2348 nnode_grp = hecmw_ngrp_get_number(hecmesh, ngrp_id)
2349 if( nnode_grp > 1 .and. hecmesh%my_rank == 0 )
then
2350 msg(1) =
' ### Warning: '//header_name//
' on a refined mesh'
2351 write(msg(2),
'(a,a,a,i0,a)')
' node group "', trim(hecmesh%node_group%grp_name(ngrp_id)), &
2352 '" now has ', nnode_grp,
' nodes; the same load is applied to each of them'
2353 write(*,
'(/a/a/)') trim(msg(1)), trim(msg(2))
2354 write(
ilog,
'(/a/a/)') trim(msg(1)), trim(msg(2))
2367 real(kind=kreal),
pointer :: array(:,:)
2368 integer(kind=kint) :: old_size, new_size, i, j
2369 real(kind=kreal),
pointer :: temp(:,:)
2371 if( old_size >= new_size )
then
2375 if(
associated( array ) )
then
2376 allocate(temp(0:6, old_size))
2379 allocate(array(0:6, new_size))
2383 array(j,i) = temp(j,i)
2388 allocate(array(0:6, new_size))
2398 amp_name, n, grp_names, lids, params )
2400 type(hecmwst_local_mesh),
target :: hecmesh
2402 character(len=*),
intent(in) :: header_name
2403 integer(kind=kint),
intent(in) :: gid
2404 integer(kind=kint),
intent(in) :: follow
2405 character(len=HECMW_NAME_LEN),
intent(in) :: amp_name
2406 integer(kind=kint),
intent(in) :: n
2407 character(len=HECMW_NAME_LEN),
intent(in) :: grp_names(:)
2408 integer(kind=kint),
intent(in) :: lids(:)
2409 real(kind=kreal),
intent(in) :: params(0:,:)
2411 logical,
allocatable :: fg_surface(:)
2412 integer(kind=kint) :: amp_id
2413 integer(kind=kint) :: i, j, old_size, new_size
2416 old_size = fstrsolid%DLOAD_ngrp_tot
2417 new_size = old_size + n
2418 fstrsolid%DLOAD_ngrp_tot = new_size
2425 allocate( fg_surface(n) )
2427 fstrsolid%DLOAD_follow = follow
2429 fstrsolid%DLOAD_ngrp_amp(old_size+i) = amp_id
2430 fstrsolid%DLOAD_ngrp_LID(old_size+i) = lids(i)
2432 fstrsolid%DLOAD_ngrp_params(j,old_size+i) = params(j,i)
2434 fg_surface(i) = ( lids(i) == 100 )
2436 fstrsolid%DLOAD_ngrp_GRPID(old_size+1:new_size) = gid
2438 deallocate( fg_surface )
2448 type(hecmwst_local_mesh),
target :: hecMESH
2450 character(len=*),
intent(in) :: header_name
2451 integer(kind=kint),
intent(in) :: gid
2452 integer(kind=kint),
intent(in) :: n
2453 character(len=HECMW_NAME_LEN),
intent(in) :: grp_names(:)
2454 real(kind=kreal),
intent(in) :: vals(:)
2456 integer(kind=kint) :: i, old_size, new_size
2459 old_size = fstrsolid%TEMP_ngrp_tot
2460 new_size = old_size + n
2466 fstrsolid%TEMP_ngrp_val(old_size+i) = vals(i)
2468 fstrsolid%TEMP_ngrp_GRPID(old_size+1:new_size) = gid
2469 fstrsolid%TEMP_ngrp_tot = new_size
2478 amp_name, n, grp_names, dofs, vals )
2480 type(hecmwst_local_mesh),
target :: hecMESH
2482 character(len=*),
intent(in) :: header_name
2483 integer(kind=kint),
intent(in) :: gid
2484 integer(kind=kint),
intent(in) :: incremental
2485 character(len=HECMW_NAME_LEN),
intent(in) :: amp_name
2486 integer(kind=kint),
intent(in) :: n
2487 character(len=HECMW_NAME_LEN),
intent(in) :: grp_names(:)
2488 integer(kind=kint),
intent(in) :: dofs(:)
2489 real(kind=kreal),
intent(in) :: vals(:)
2491 integer(kind=kint) :: amp_id
2492 integer(kind=kint) :: i, old_size, new_size
2495 old_size = fstrsolid%SPRING_ngrp_tot
2496 new_size = old_size + n
2497 fstrsolid%SPRING_ngrp_tot = new_size
2507 fstrsolid%SPRING_ngrp_amp(old_size+i) = amp_id
2508 fstrsolid%SPRING_ngrp_DOF(old_size+i) = dofs(i)
2509 fstrsolid%SPRING_ngrp_val(old_size+i) = vals(i)
2511 fstrsolid%SPRING_ngrp_GRPID(old_size+1:new_size) = gid
2513 fstrsolid%SPRING_incremental(old_size+1:new_size) = incremental
2523 rotc_name, amp_name, n, grp_names, dof_ids, dof_ide, vals )
2525 type(hecmwst_local_mesh),
target :: hecMESH
2528 character(len=*),
intent(in) :: header_name
2529 integer(kind=kint),
intent(in) :: gid
2530 integer(kind=kint),
intent(in) :: vtype
2531 character(len=HECMW_NAME_LEN),
intent(in) :: rotc_name
2532 character(len=HECMW_NAME_LEN),
intent(in) :: amp_name
2533 integer(kind=kint),
intent(in) :: n
2534 character(len=HECMW_NAME_LEN),
intent(in) :: grp_names(:)
2535 integer(kind=kint),
intent(in) :: dof_ids(:)
2536 integer(kind=kint),
intent(in) :: dof_ide(:)
2537 real(kind=kreal),
intent(in) :: vals(:)
2539 character(len=HECMW_NAME_LEN) :: rotc(1)
2540 integer(kind=kint) :: amp_id, rotc_id(1), n_rotc
2541 integer(kind=kint) :: i, j, old_size, new_size
2545 if( rotc_name /=
' ' )
then
2546 fstrsolid%VELOCITY_ngrp_rot = fstrsolid%VELOCITY_ngrp_rot + 1
2547 n_rotc = fstrsolid%VELOCITY_ngrp_rot
2553 old_size = fstrsolid%VELOCITY_ngrp_tot
2554 new_size = old_size + n
2555 fstrsolid%VELOCITY_ngrp_tot = new_size
2565 fstrsolid%VELOCITY_type = vtype
2566 if( vtype ==
kbcinitial ) fstrdynamic%VarInitialize = .true.
2569 n, grp_names, fstrsolid%VELOCITY_ngrp_ID(old_size+1:))
2570 fstrsolid%VELOCITY_ngrp_GRPID(old_size+1:new_size) = gid
2573 fstrsolid%VELOCITY_ngrp_rotID(old_size+1:) = n_rotc
2574 fstrsolid%VELOCITY_ngrp_centerID(old_size+1:) = rotc_id(1)
2578 if( (dof_ids(i) < 1).or.(6 < dof_ids(i)).or.(dof_ide(i) < 1).or.(6 < dof_ide(i)) )
then
2580 ' : range of dof_ids and dof_ide is from 1 to 6' )
2582 fstrsolid%VELOCITY_ngrp_type(j) = 10 * dof_ids(i) + dof_ide(i)
2583 fstrsolid%VELOCITY_ngrp_amp(j) = amp_id
2584 fstrsolid%VELOCITY_ngrp_val(old_size+i) = vals(i)
2595 amp_name, n, grp_names, dof_ids, dof_ide, vals )
2597 type(hecmwst_local_mesh),
target :: hecMESH
2600 character(len=*),
intent(in) :: header_name
2601 integer(kind=kint),
intent(in) :: gid
2602 integer(kind=kint),
intent(in) :: atype
2603 character(len=HECMW_NAME_LEN),
intent(in) :: amp_name
2604 integer(kind=kint),
intent(in) :: n
2605 character(len=HECMW_NAME_LEN),
intent(in) :: grp_names(:)
2606 integer(kind=kint),
intent(in) :: dof_ids(:)
2607 integer(kind=kint),
intent(in) :: dof_ide(:)
2608 real(kind=kreal),
intent(in) :: vals(:)
2610 integer(kind=kint) :: amp_id
2611 integer(kind=kint) :: i, j, old_size, new_size
2614 old_size = fstrsolid%ACCELERATION_ngrp_tot
2615 new_size = old_size + n
2616 fstrsolid%ACCELERATION_ngrp_tot = new_size
2624 fstrsolid%ACCELERATION_type = atype
2625 if( atype ==
kbcinitial )fstrdynamic%VarInitialize = .true.
2628 n, grp_names, fstrsolid%ACCELERATION_ngrp_ID(old_size+1:))
2629 fstrsolid%ACCELERATION_ngrp_GRPID(old_size+1:new_size) = gid
2633 if( (dof_ids(i) < 1).or.(6 < dof_ids(i)).or.(dof_ide(i) < 1).or.(6 < dof_ide(i)) )
then
2635 ' : range of dof_ids and dof_ide is from 1 to 6' )
2637 fstrsolid%ACCELERATION_ngrp_type(j) = 10 * dof_ids(i) + dof_ide(i)
2638 fstrsolid%ACCELERATION_ngrp_amp(j) = amp_id
2639 fstrsolid%ACCELERATION_ngrp_val(old_size+i) = vals(i)
2650 type(hecmwst_local_mesh),
target :: hecMESH
2653 character(len=*),
intent(in) :: header_name
2654 integer(kind=kint),
intent(in) :: n
2655 character(len=HECMW_NAME_LEN),
intent(in) :: grp_names(:)
2657 integer(kind=kint) :: old_size, new_size
2660 old_size = fstrsolid%COUPLE_ngrp_tot
2661 new_size = old_size + n
2662 fstrsolid%COUPLE_ngrp_tot = new_size
2667 n, grp_names, fstrsolid%COUPLE_ngrp_ID(old_size+1:))
2669 fstrparam%fg_couple = 1
2677 amp_name, eps, measure, state, n, grp_names, thlow, thup )
2679 type(hecmwst_local_mesh),
target :: hecMESH
2681 character(len=*),
intent(in) :: header_name
2682 integer(kind=kint),
intent(in) :: gid
2683 character(len=HECMW_NAME_LEN),
intent(in) :: amp_name
2684 real(kind=kreal),
intent(in) :: eps
2685 integer(kind=kint),
intent(in) :: measure
2686 integer(kind=kint),
intent(in) :: state
2687 integer(kind=kint),
intent(in) :: n
2688 character(len=HECMW_NAME_LEN),
intent(in) :: grp_names(:)
2689 real(kind=kreal),
intent(in) :: thlow(:)
2690 real(kind=kreal),
intent(in) :: thup(:)
2692 integer(kind=kint) :: amp_id
2693 integer(kind=kint) :: i, old_size, new_size
2696 old_size = fstrsolid%elemact%ELEMACT_egrp_tot
2697 new_size = old_size + n
2698 fstrsolid%elemact%ELEMACT_egrp_tot = new_size
2711 fstrsolid%elemact%ELEMACT_egrp_amp(old_size+i) = amp_id
2712 fstrsolid%elemact%ELEMACT_egrp_eps(old_size+i) = eps
2714 fstrsolid%elemact%ELEMACT_egrp_GRPID(old_size+1:new_size) = gid
2715 fstrsolid%elemact%ELEMACT_egrp_depends(old_size+1:new_size) = measure
2716 fstrsolid%elemact%ELEMACT_egrp_ts_lower(old_size+1:new_size) = thlow(1:n)
2717 fstrsolid%elemact%ELEMACT_egrp_ts_upper(old_size+1:new_size) = thup(1:n)
2718 fstrsolid%elemact%ELEMACT_egrp_state(old_size+1:new_size) = state
2720 call elem_grp_name_to_id_ex( hecmesh, header_name, n, grp_names, fstrsolid%elemact%ELEMACT_egrp_ID(old_size+1:))
2731 type(hecmwst_local_mesh),
pointer :: hecMESH
2734 integer(kind=kint),
intent(in) :: is
2735 integer(kind=kint),
intent(in) :: n
2736 character(len=HECMW_NAME_LEN),
intent(in) :: cparam_name
2737 integer(kind=kint),
intent(in) :: smoothing
2739 integer(kind=kint) :: i, cparam_id
2740 integer(kind=kint) :: ss_nslav, ss_nmas_vis, ss_nmas_glob, ss_bad
2744 do i=1,
size(fstrparam%contactparam)-1
2745 if(
hecmw_streqr( fstrparam%contactparam(i)%name, cparam_name ) )
then
2750 fstrsolid%contacts(is+i)%smoothing = smoothing
2751 if( .not. fstr_contact_check( fstrsolid%contacts(is+i), hecmesh ) )
then
2752 write(*,*)
'### Error: Inconsistence in contact and surface definition : ' , i+is
2753 write(
ilog,*)
'### Error: Inconsistence in contact and surface definition : ', i+is
2754 stop hecmw_exit_model
2756 isok = fstr_contact_init( fstrsolid%contacts(is+i), hecmesh, fstrparam%contactparam(cparam_id))
2759 fstrsolid%contacts(is+i)%symmetric = .not. fstrparam%fric_cone_follow
2760 fstrsolid%contacts(is+i)%eps_fric_band = fstrparam%eps_fric_band
2762 if( fstrsolid%contacts(is+i)%method == contacts2s )
then
2771 if( fstrparam%solution_type /=
kststatic .and. &
2773 & fstrparam%solution_type /=
kstnzprof )
then
2774 write(*,*)
'### Error: MORTAR=YES is supported only in static analysis : ', i+is
2775 write(
ilog,*)
'### Error: MORTAR=YES is supported only in static analysis : ', i+is
2776 write(*,*)
' Specify !SOLUTION, TYPE=STATIC or TYPE=NLSTATIC.'
2777 write(
ilog,*)
' Specify !SOLUTION, TYPE=STATIC or TYPE=NLSTATIC.'
2778 stop hecmw_exit_model
2785 if( fstrsolid%restart_nout < 0 )
then
2786 write(*,*)
'### Error: MORTAR=YES does not support restart : ', i+is
2787 write(
ilog,*)
'### Error: MORTAR=YES does not support restart : ', i+is
2788 write(*,*)
' The contact state of mortar pairs is not saved in the restart file.'
2789 write(
ilog,*)
' The contact state of mortar pairs is not saved in the restart file.'
2790 stop hecmw_exit_model
2793 write(*,*)
'### Error: MORTAR=YES is not supported with !CONTACT_ALGO TYPE=SLAGRANGE : ', i+is
2794 write(
ilog,*)
'### Error: MORTAR=YES is not supported with !CONTACT_ALGO TYPE=SLAGRANGE : ', i+is
2795 stop hecmw_exit_model
2797 if( fstrsolid%contacts(is+i)%surf_id1_sgrp <= 0 )
then
2798 write(*,*)
'### Error: MORTAR=YES requires !CONTACT_PAIR TYPE=SURF-SURF : ', i+is
2799 write(
ilog,*)
'### Error: MORTAR=YES requires !CONTACT_PAIR TYPE=SURF-SURF : ', i+is
2800 stop hecmw_exit_model
2806 if( fstrsolid%contacts(is+i)%algtype /= contactfslid )
then
2807 write(*,*)
'### Error: MORTAR=YES is supported only with INTERACTION=FSLID : ', i+is
2808 write(
ilog,*)
'### Error: MORTAR=YES is supported only with INTERACTION=FSLID : ', i+is
2809 write(*,*)
' Specify INTERACTION=FSLID on !CONTACT (the default is SSLID).'
2810 write(
ilog,*)
' Specify INTERACTION=FSLID on !CONTACT (the default is SSLID).'
2811 stop hecmw_exit_model
2813 if( fstrsolid%contacts(is+i)%smoothing /= kcsnone )
then
2814 write(*,*)
'### Error: MORTAR=YES is not supported with SMOOTHING= : ', i+is
2815 write(
ilog,*)
'### Error: MORTAR=YES is not supported with SMOOTHING= : ', i+is
2816 stop hecmw_exit_model
2823 if( hecmw_comm_get_size() > 1 )
then
2824 ss_nslav =
size( fstrsolid%contacts(is+i)%slave_surf )
2825 ss_nmas_vis =
size( fstrsolid%contacts(is+i)%master )
2826 ss_nmas_glob = fstrsolid%contacts(is+i)%n_master_owned
2827 call hecmw_allreduce_i1( hecmesh, ss_nmas_glob, hecmw_sum )
2829 if( ss_nslav > 0 .and. ss_nmas_vis /= ss_nmas_glob )
then
2834 call hecmw_allreduce_i1( hecmesh, ss_bad, hecmw_max )
2835 if( ss_bad /= 0 )
then
2836 write(*,*)
'### Error: MORTAR=YES contact pair has incomplete master ghost : ', i+is
2837 write(
ilog,*)
'### Error: MORTAR=YES contact pair has incomplete master ghost : ', i+is
2838 write(*,*)
' A rank owning slave faces cannot see the full master surface.'
2839 write(
ilog,*)
' A rank owning slave faces cannot see the full master surface.'
2840 write(*,*)
' Re-partition the mesh with !PARTITION, CONTACT_OWNER=SLAVE,'
2841 write(
ilog,*)
' Re-partition the mesh with !PARTITION, CONTACT_OWNER=SLAVE,'
2842 write(*,*)
' or run serial (np=1).'
2843 write(
ilog,*)
' or run serial (np=1).'
2844 stop hecmw_exit_model
2859 type(hecmwst_local_mesh),
pointer :: hecMESH
2862 integer(kind=kint),
intent(in) :: is
2863 integer(kind=kint),
intent(in) :: n
2864 character(len=HECMW_NAME_LEN),
intent(in) :: cparam_name
2865 integer(kind=kint),
intent(in) :: smoothing
2867 integer(kind=kint) :: i, cparam_id
2871 do i=1,
size(fstrparam%contactparam)-1
2872 if(
hecmw_streqr( fstrparam%contactparam(i)%name, cparam_name ) )
then
2877 fstrsolid%embeds(is+i)%smoothing = smoothing
2878 if( .not. fstr_contact_check( fstrsolid%embeds(is+i), hecmesh ) )
then
2879 write(*,*)
'### Error: Inconsistence in contact and surface definition : ' , i+is
2880 write(
ilog,*)
'### Error: Inconsistence in contact and surface definition : ', i+is
2881 stop hecmw_exit_model
2883 isok = fstr_embed_init( fstrsolid%embeds(is+i), hecmesh, fstrparam%contactparam(cparam_id))
int fstr_ctrl_get_param_ex(int *ctrl, const char *param_name, const char *value_list, int *necessity, char *type, void *val)
int fstr_ctrl_get_c_h_name(int *ctrl, char *header_name, int *buff_size)
This module encapsulate the basic functions of all elements provide by this software.
integer function numofquadpoints(fetype)
Obtains the number of quadrature points of the element.
integer(kind=kind(2)) function getspacedimension(etype)
Obtain the space dimension of the element.
This module contains fstr control file data obtaining functions.
integer(kind=kint) function fstr_ctrl_get_element_activation(ctrl, amp, eps, grp_id_name, mode, measure, state, thlow, thup)
Read in !ELEMENT_ACTIVATION.
integer(kind=kint) function fstr_ctrl_get_couple(ctrl, fg_type, fg_first, fg_window, surf_id, surf_id_len)
Read in !COUPLE.
logical function fstr_ctrl_get_contact(ctrl, n, contact, np, tp, ntol, ttol, cpname, smoothing)
Read in contact definition.
logical function fstr_ctrl_get_outitem(ctrl, hecMESH, outinfo)
Read in !OUTPUT_RES & !OUTPUT_VIS.
integer(kind=kint) function fstr_ctrl_get_elemopt(ctrl, elemopt361)
Read in !ELEMOPT.
logical function fstr_ctrl_get_istep(ctrl, hecMESH, steps, tpname, apname, cpname)
Read in !STEP and !ISTEP.
integer function fstr_ctrl_get_section(ctrl, hecMESH, sections)
Read in !SECTION.
integer(kind=kint) function fstr_ctrl_get_step(ctrl, amp, iproc)
Read in !STEP.
logical function fstr_ctrl_get_embed(ctrl, n, embed, cpname, smoothing)
Read in contact definition.
This module contains control file data obtaining functions for dynamic analysis.
integer(kind=kint) function fstr_ctrl_get_velocity(ctrl, vType, amp, node_id, node_id_len, dof_ids, dof_ide, value)
Read in !VELOCITY.
integer(kind=kint) function fstr_ctrl_get_acceleration(ctrl, aType, amp, node_id, node_id_len, dof_ids, dof_ide, value)
Read in !ACCELERATION.
This module manages read in of various material properties.
integer function fstr_ctrl_get_dashpot_d(ctrl, mattype, nlgeom, matval_i, dict)
Read in !DASHPOT_D.
integer function fstr_ctrl_get_hyperelastic(ctrl, mattype, nlgeom, matval)
Read in !HYPERELASTIC.
integer function fstr_ctrl_get_viscoelasticity(ctrl, mattype, nlgeom, dict)
Read in !VISCOELASTIC.
integer function fstr_ctrl_get_viscoplasticity(ctrl, mattype, nlgeom, dict)
Read in !CREEP.
integer function fstr_ctrl_get_usermaterial(ctrl, mattype, nlgeom, nstatus, matval)
Read in !USER_MATERIAL.
integer function fstr_ctrl_get_expansion_coeff(ctrl, matval, dict)
Read in !EXPANSION_COEFF.
integer function fstr_ctrl_get_trs(ctrl, mattype, matval)
Read in !TRS.
integer function fstr_ctrl_get_elasticity(ctrl, mattype, nlgeom, matval, dict)
Read in !ELASTIC.
integer function fstr_ctrl_get_dashpot_a(ctrl, mattype, nlgeom, matval_i, dict)
Read in !DASHPOT_A.
integer function fstr_ctrl_get_material(ctrl, matname)
Read in !MATERIAL.
integer function fstr_ctrl_get_density(ctrl, matval)
Read in !DENSITY.
integer function fstr_ctrl_get_spring_a(ctrl, mattype, nlgeom, matval_i, dict)
Read in !SPRING_A.
integer function fstr_ctrl_get_rayleigh_damping(ctrl, matval, is_RD)
Read in !DAMPING (element-wise Rayleigh damping)
integer function fstr_ctrl_get_fluid(ctrl, mattype, nlgeom, matval, dict)
Read in !FLUID.
integer function fstr_ctrl_get_spring_d(ctrl, mattype, nlgeom, matval_i, dict)
Read in !SPRING_D.
integer function fstr_ctrl_get_plasticity(ctrl, mattype, nlgeom, matval, dict)
Read in !PLASTIC.
This module contains control file data obtaining functions for static analysis.
integer(kind=kint) function fstr_ctrl_get_static(ctrl, dtime, etime, itime, eps, restart_nout, idx_elpl, iout_list, sig_y0, h_dash, nout, nout_monit, node_monit_1, elem_monit_1, intg_monit_1)
Read in !STATIC.
integer(kind=kint) function fstr_ctrl_get_boundary(ctrl, amp, node_id, node_id_len, dof_ids, dof_ide, value)
Read in !BOUNDARY.
integer(kind=kint) function fstr_ctrl_get_spring(ctrl, amp, node_id, node_id_len, dof_id, value, incremental)
Read in !SPRING.
integer(kind=kint) function fstr_ctrl_get_dload(ctrl, amp, follow, element_id, element_id_len, load_type, params)
Read in !DLOAD.
integer(kind=kint) function fstr_ctrl_get_temperature(ctrl, irres, tstep, tintl, rtype, node_id, node_id_len, value)
Read in !TEMPERATURE.
integer(kind=kint) function fstr_ctrl_get_cload(ctrl, amp, node_id, node_id_len, dof_id, value)
Read in !CLOAD.
integer function fstr_ctrl_get_userload(ctrl)
Read in !ULOAD.
This module contains auxiliary functions in calculation setup.
subroutine fstr_ctrl_err_stop
subroutine dload_grp_name_to_id_ex(hecMESH, n, grp_id_name, fg_surface, grp_ID)
subroutine amp_name_to_id(hecMESH, header_name, aname, id)
subroutine fstr_setup_util_err_stop(msg)
This module contains auxiliary functions in calculation setup.
subroutine hecmw_expand_integer_array(array, old_size, new_size)
subroutine node_grp_name_to_id_ex(hecMESH, header_name, n, grp_id_name, grp_ID)
subroutine hecmw_expand_real_array(array, old_size, new_size)
subroutine surf_grp_name_to_id_ex(hecMESH, header_name, n, grp_id_name, grp_ID)
logical function hecmw_streqr(s1, s2)
subroutine elem_grp_name_to_id_ex(hecMESH, header_name, n, grp_id_name, grp_ID)
Shared finite-rotation nodal kinematics and rotation algebra.
logical function, public fstr_has_finite_rotation_kinematics(hecMESH, fstrSOLID)
logical function, public fstr_uses_finite_rotation_kinematics(etype, nn, material)
subroutine, public fstr_mark_finite_rotation_nodes(hecMESH, fstrSOLID, ndof, shell_node_mode)
This module provides subroutines to initialize, allocate and finalize fstr_solid, and to read the car...
subroutine fstr_solid_init_embeds(hecMESH, fstrSOLID, fstrPARAM, is, n, cparam_name, smoothing)
Initialize !EMBED !
subroutine fstr_setup_dashpot_a(ctrl, P)
Read in !DASHPOT_A !
subroutine fstr_setup_step_convergence(stepinfo, cpname, cnvparam, istep)
Fix the convergence criteria of a step from !STEP and the !CONVERG_PARAM it refers to.
subroutine fstr_setup_plastic(ctrl, P)
Read in !PLASTIC !
subroutine fstr_setup_material(ctrl, P)
Read in !MATERIAL !
subroutine fstr_solid_init(hecMESH, fstrSOLID)
Initializer of structure fstr_solid.
subroutine fstr_element_init(hecMESH, fstrSOLID, solution_type)
Initialize elements info in static calculation.
subroutine fstr_expand_dload_array(array, old_size, new_size)
Reset !DLOAD !
subroutine fstr_solid_append_element_activation(hecMESH, fstrSOLID, header_name, gid, amp_name, eps, measure, state, n, grp_names, thlow, thup)
Append !ELEMENT_ACTIVATION !
subroutine fstr_setup_trs(ctrl, P)
Read in !TRS !
subroutine fstr_setup_spring_d(ctrl, P)
Read in !SPRING_D !
subroutine fstr_setup_solid_nastran(ctrl, hecMESH, fstrSOLID)
subroutine fstr_setup_acceleration(ctrl, P)
Read in !ACCELERATION !
subroutine fstr_setup_elemopt(ctrl, P)
Read in !ELEMOPT !
subroutine fstr_setup_output_vis(ctrl, P)
Read in !OUTPUT_VIS !
subroutine fstr_setup_output_res(ctrl, P)
Read in !OUTPUT_RES !
subroutine fstr_setup_step_store(ctrl, P)
Read in !STEP !
subroutine fstr_solid_append_spring(hecMESH, fstrSOLID, header_name, gid, incremental, amp_name, n, grp_names, dofs, vals)
Append !SPRING !
subroutine fstr_setup_creep(ctrl, P)
Read in !CREEP !
subroutine fstr_solid_append_dload(hecMESH, fstrSOLID, header_name, gid, follow, amp_name, n, grp_names, lids, params)
Append !DLOAD !
subroutine fstr_solid_finalize(fstrSOLID)
Finalizer of fstr_solid.
integer(kind=kint) function fstr_setup_current_material(ctrl, P)
Material of the last !MATERIAL, for a material card. Stops at a material card given before the first ...
subroutine fstr_setup_boundary(ctrl, P)
Read in !BOUNDARY !
subroutine fstr_setup_damping(ctrl, P)
Read in !DAMPING !
subroutine fstr_solid_alloc(hecMESH, fstrSOLID)
Initializer of structure fstr_solid.
subroutine fstr_setup_expansion_coeff(ctrl, P)
Read in !EXPANSION_COEF !
subroutine fstr_setup_viscoelastic(ctrl, P)
Read in !VISCOELASTIC !
subroutine fstr_setup_density(ctrl, P)
Read in !DENSITY !
subroutine fstr_solid_init_contacts(hecMESH, fstrSOLID, fstrPARAM, is, n, cparam_name, smoothing)
Initialize !CONTACT !
subroutine fstr_setup_fluid(ctrl, P)
Read in !FLUID !
subroutine fstr_setup_step(ctrl, P)
Read in !STEP !
subroutine fstr_setup_step_links(fstrPARAM, fstrSOLID, fstrDYNAMIC, istep, tp_name, ainc_name, cnv_name)
Links step_ctrl(istep), whose step is already read, to !TIME_POINTS, !AUTOINC_PARAM and !...
subroutine fstr_solid_append_acceleration(hecMESH, fstrSOLID, fstrDYNAMIC, header_name, gid, atype, amp_name, n, grp_names, dof_ids, dof_ide, vals)
Append !ACCELERATION !
subroutine fstr_setup_section(ctrl, P)
Read in !SECTION !
subroutine fstr_solid_append_velocity(hecMESH, fstrSOLID, fstrDYNAMIC, header_name, gid, vtype, rotc_name, amp_name, n, grp_names, dof_ids, dof_ide, vals)
Append !VELOCITY !
subroutine fstr_setup_istep(ctrl, P)
Read in !ISTEP !
subroutine fstr_smoothed_element_init(hecMESH, fstrSOLID)
subroutine fstr_setup_user_material(ctrl, P)
Read in !USER_MATERIAL !
subroutine fstr_setup_dload(ctrl, P)
Read in !DLOAD.
subroutine fstr_setup_cload(ctrl, P)
Read in !CLOAD !
subroutine fstr_setup_spring_a(ctrl, P)
Read in !SPRING_A !
subroutine fstr_setup_write_store(ctrl, P)
Read in !WRITE after fstr_setup_prepare and store the output controls. fg_result and fg_visual are se...
subroutine fstr_setup_spring(ctrl, P)
Read in !SPRING !
subroutine fstr_setup_contact(ctrl, P)
Read in !CONTACT !
subroutine fstr_setup_dashpot_d(ctrl, P)
Read in !DASHPOT_D !
subroutine fstr_solid_append_temperature(hecMESH, fstrSOLID, header_name, gid, n, grp_names, vals)
Append !TEMPERATURE !
subroutine fstr_setup_embed(ctrl, P)
Read in !EMBED !
subroutine fstr_solid_append_couple(hecMESH, fstrSOLID, fstrPARAM, header_name, n, grp_names)
Append !COUPLE !
subroutine fstr_setup_static(ctrl, P)
Read in !STATIC(old) !
subroutine fstr_solid_append_boundary(hecMESH, fstrSOLID, header_name, gid, istot, rotc_name, amp_name, n, grp_names, dof_ids, dof_ide, vals)
Append !BOUNDARY !
subroutine fstr_setup_write_flags(ctrl, P)
Read in !WRITE before fstr_setup_prepare and set fg_result and fg_visual.
subroutine fstr_smoothed_element_calcmaxcon(hecMESH, fstrSOLID)
recursive subroutine fstr_solid_physic_val_finalize(phys)
subroutine fstr_solid_append_cload(hecMESH, fstrSOLID, header_name, gid, rotc_name, amp_name, n, grp_names, dofs, vals)
Append !CLOAD !
subroutine fstr_setup_element_activation(ctrl, P)
Read in !ELEMENT_ACTIVATION.
subroutine fstr_setup_temperature(ctrl, P)
Read in !TEMPERATURE !
subroutine fstr_setup_velocity(ctrl, P)
Read in !VELOCITY !
subroutine fstr_setup_uload(ctrl, P)
Read in !ULOAD !
subroutine fstr_setup_couple(ctrl, P)
Read in !COUPLE !
subroutine fstr_setup_elastic(ctrl, P)
Read in !ELASTIC !
subroutine fstr_setup_hyperelastic(ctrl, P)
Read in !HYPERELASTIC !
This module defines common data and basic structures for analysis.
integer(kind=kint), parameter iutb
integer(kind=kint) myrank
PARALLEL EXECUTION.
integer(kind=kint), parameter kel341sesns
integer(kind=kint), parameter kbcffstr
boundary condition file type (bcf)
integer(kind=kint), parameter kstdynamic
integer(kind=kint), parameter idbg
integer(kind=kint), parameter kel361ic
subroutine fstr_abort(code)
Terminate the analysis with a classified exit status. MPI_ABORT does not perform the Fortran I/O fina...
integer(kind=kint), parameter kcaslagrange
contact analysis algorithm
integer(kind=kint), parameter ilog
FILE HANDLER.
integer(kind=kint), parameter kststatic
integer(kind=kint), parameter kbcinitial
integer(kind=kint), parameter kstprecheck
solution type (st)
integer(kind=kint), parameter kstheat
integer(kind=kint), parameter kstnzprof
integer(kind=kint), parameter kbctransit
This module contains several strategy to free locking problem in Eight-node hexagonal element.
integer(kind=kint) function, public return_nn_comp_c3d4_sesns(nn, nodlocal)
This module summarizes all information of material properties.
integer(kind=kint), parameter viscoelastic
subroutine initmaterial(material)
Initializer.
This modules defines a structure to record history dependent parameter in static analysis.
integer(kind=kint) function fstr_shell_num_thickness_points(etype)
Compatibility accessor for shell history allocation. The quadrature rule itself is defined in element...
subroutine fstr_init_gauss(gauss)
Initializer.
subroutine fstr_init_shell_layer_gausses(element, ng, nlayer, nthick)
Allocate shell history for every surface Gauss point, layer, and thickness point.
subroutine fstr_finalize_shell_layer_gausses(element)
Release shell layer/thickness history.
logical function fstr_uses_plane_stress_j2_shell(etype, nn, material)
Return whether the element and material are supported by the plane-stress J2 shell path.
Places of a card in its sequence, from first to last. A card counted one by one has one place (first ...
Package of all data needs to initialize.
Data for DYNAMIC ANSLYSIS (fstrDYNAMIC)
FSTR INNER CONTROL PARAMETERS (fstrPARAM)
Data for STATIC ANSLYSIS (fstrSOLID)