10 & fstrSOLID, fstrPARAM, fstrHEAT, ISTEP, iterALL, next_time, delta_time)
18 integer(kind=kint) :: i, iterALL, ISTEP, bup_n_dof
19 real(kind=kreal) :: delta_time, next_time
20 type(hecmwst_local_mesh) :: hecmesh
21 type(hecmwst_matrix) :: hecMAT
25 type(hecmwst_local_mesh),
pointer :: hecMESHmpc
26 type(hecmwst_matrix),
pointer :: hecMATmpc
27 logical :: is_congerged
29 if( fstrheat%elemact%ELEMACT_egrp_tot>0 ) &
38 if(fstrheat%is_steady == 0)
call heat_mat_ass_capacity(hecmesh, hecmat, fstrsolid, fstrheat, delta_time)
40 & fstrsolid, fstrheat, next_time, delta_time)
42 hecmatmpc%Iarray(97) = 1
43 bup_n_dof = hecmesh%n_dof
46 hecmesh%n_dof = bup_n_dof
47 call hecmw_mpc_tback_sol(hecmesh, hecmat, hecmatmpc)
49 do i = 1, hecmesh%n_node
50 fstrheat%TEMPC(i) = fstrheat%TEMP(i)
51 fstrheat%TEMP (i) = hecmat%X(i)
54 if( fstrheat%elemact%ELEMACT_egrp_tot>0 ) &
55 &
call fstr_updatedof_elemact( 1, hecmesh, fstrheat%elemact, fstrsolid%elements, fstrheat%TEMP0, fstrheat%TEMP )
59 if(is_congerged .or. fstrheat%is_iter_max_limit .or. fstrheat%beta == 0.0d0)
exit
66 integer(kind=kint) :: i, iterALL, iter_max, ISTEP
67 real(kind=kreal) :: val, iter_eps
68 type(hecmwst_local_mesh) :: hecmesh
71 logical :: is_congerged
73 is_congerged = .false.
74 fstrheat%is_iter_max_limit = .false.
75 iter_max = fstrparam%itmax(istep)
76 iter_eps = fstrparam%eps(istep)
79 do i = 1, hecmesh%nn_internal
80 val = val + (fstrheat%TEMP(i) - fstrheat%TEMPC(i))**2
82 call hecmw_allreduce_r1(hecmesh, val, hecmw_sum)
85 if(hecmesh%my_rank == 0)
then
86 write(*,
'(i8,1pe16.6)') iterall, val
89 if(val < iter_eps)
then
90 if(hecmesh%my_rank == 0)
write(
imsg,*)
' !!! CONVERGENCE ACHIEVED '
94 if(iter_max <= iterall)
then
95 if(hecmesh%my_rank == 0)
write(*,*)
' !!! ITERATION COUNT OVER : MAX = ', iter_max
96 fstrheat%is_iter_max_limit = .true.
This module provide a function to elemact elements.
subroutine fstr_update_elemact_heat(hecMESH, elemact, ctime, elements)
subroutine fstr_updatedof_elemact(ndof, hecMESH, elemact, elements, vec_old, vec_new)
This module defines common data and basic structures for analysis.
integer(kind=kint), parameter imsg
This module provides a subroutine for all boundary conditions needed in heat analysis.
subroutine heat_mat_ass_boundary(hecMESH, hecMAT, hecMESHmpc, hecMATmpc, fstrSOLID, fstrHEAT, next_time, delta_time)
This module provides a subroutine to assemble heat capacity matrix.
subroutine heat_mat_ass_capacity(hecMESH, hecMAT, fstrSOLID, fstrHEAT, delta_time)
subroutine heat_mat_ass_conductivity(hecMESH, hecMAT, fstrSOLID, fstrHEAT, beta)
This module provides a function for stationary heat analysis.
subroutine heat_check_convergence(hecMESH, fstrHEAT, fstrPARAM, ISTEP, iterALL, is_congerged)
subroutine heat_solve_main(hecMESH, hecMAT, hecMESHmpc, hecMATmpc, fstrSOLID, fstrPARAM, fstrHEAT, ISTEP, iterALL, next_time, delta_time)
subroutine, public solve_lineq(hecMESH, hecMAT)
Data for HEAT ANSLYSIS (fstrHEAT)
FSTR INNER CONTROL PARAMETERS (fstrPARAM)