28 type (hecmwst_local_mesh) :: hecmesh
29 type (hecmwst_matrix) :: hecmat
30 type (fstrst_matrix_contact_lagrange) :: fstrmat
33 if( hecmat%Iarray(99)==1 )
then
35 elseif( hecmat%Iarray(99)==2 )
then
37 else if( hecmat%Iarray(99)==3 )
then
39 elseif( hecmat%Iarray(99)==5 )
then
48 type (hecmwst_local_mesh) :: hecmesh
49 type (hecmwst_matrix) :: hecmat
50 type (fstrst_matrix_contact_lagrange) :: fstrmat
51 integer(kind=kint),
intent(out) :: istat
52 real(kind=kreal),
optional :: rf
53 type (hecmwst_matrix),
optional :: conmat
55 real(kind=kreal) :: factor
56 real(kind=kreal) :: resid
57 real(kind=kreal) :: t1, t2
58 integer(kind=kint) :: ndof
61 if(
present(rf) )factor = rf
66 if( hecmat%Iarray(99)==1 )
then
72 elseif( hecmat%Iarray(99)==2 )
then
74 elseif( hecmat%Iarray(99)==3 )
then
80 elseif( hecmat%Iarray(99)==5 )
then
91 call hecmw_update_3_r(hecmesh,hecmat%X,hecmesh%n_node)
92 else if( ndof==2 )
then
93 call hecmw_update_2_r(hecmesh,hecmat%X,hecmesh%n_node)
94 else if( ndof==4 )
then
95 call hecmw_update_4_r(hecmesh,hecmat%X,hecmesh%n_node)
96 else if( ndof==6 )
then
97 call hecmw_update_m_r(hecmesh,hecmat%X,hecmesh%n_node,6)
101 if (hecmw_mat_get_timelog(hecmat) .ge. 1)
then
102 if (
myrank==0)
write(*,*)
' solve time :', t2 - t1
109 write(*,*)
' maximum residual = ', resid
110 if( hecmw_mat_get_solver_type(hecmat) /= 1 .and. resid >= 1.0d-8)
then
111 write(*,*)
' ###Maximum residual exceeded 1.0d-8---Direct Solver### '
117 hecmat%X=factor*hecmat%X
This module defined coomon data and basic structures for analysis.
integer(kind=kint) myrank
PARALLEL EXECUTION.
logical paracontactflag
PARALLEL CONTACT FLAG.
subroutine solve_lineq_serial_lag_hecmw(hecmesh, hecmat, fstrmat)
subroutine solve_lineq_serial_lag_hecmw_init(hecmat, fstrmat, is_sym)