34 integer(kind=kint) :: contact_elim, solver_type, iterlog, timelog, myrank
42 writelog = (myrank==0 .and. (iterlog>0 .or. timelog>0))
44 if( contact_elim==0 )
then
45 if( solver_type==1 )
then
53 if( contact_elim==1 )
then
54 if( writelog )
write(*,*)
'solve contact with elimination'
57 if( writelog )
write(*,*)
'solve contact without elimination'
58 if( solver_type==1 )
then
59 write(*,*)
'ERROR: iterative solver without elimination not available in contact analysis'
61 elseif( solver_type==2 )
then
63 else if( solver_type==3 )
then
65 elseif( solver_type==5 )
then
79 type (hecmwst_ebc) :: hecebc
80 integer(kind=kint),
intent(out) :: istat
81 real(kind=
kreal),
optional :: rf
82 logical :: is_contact_active
84 real(kind=
kreal) :: factor
85 real(kind=
kreal) :: t1, t2
86 integer(kind=kint) :: ndof
87 integer(kind=kint) :: contact_elim, solver_type
93 if(
present(rf) )factor = rf
103 if( contact_elim==1 )
then
106 if( solver_type==1 )
then
107 write(*,*)
'ERROR: iterative solver without elimination not available in contact analysis'
109 elseif( solver_type==2 )
then
111 write(*,*)
'ERROR: !SOLVER,METHOD=DIRECT not available in parallel contact analysis;',&
112 ' please use MUMPS or DIRECTmkl instead'
115 call add_conmat_to_hecmat(hecmat,conmat,heclagmat)
118 elseif( solver_type==3 )
then
122 call add_conmat_to_hecmat(hecmat,conmat,heclagmat)
125 elseif( solver_type==5 )
then
138 hecmat%X=factor*hecmat%X
143 subroutine add_conmat_to_hecmat(hecMAT,conMAT,hecLagMat)
149 integer(kind=kint) :: ndof,ndof2,i
154 do i=1,hecmat%NP*ndof + heclagmat%num_lagrange
155 hecmat%B(i) = hecmat%B(i) + conmat%B(i)
158 do i=1,hecmat%NP*ndof2
159 hecmat%D(i) = hecmat%D(i) + conmat%D(i)
162 do i=1,hecmat%NPL*ndof2
163 hecmat%AL(i) = hecmat%AL(i) + conmat%AL(i)
166 do i=1,hecmat%NPU*ndof2
167 hecmat%AU(i) = hecmat%AU(i) + conmat%AU(i)
169 end subroutine add_conmat_to_hecmat
Essential boundary conditions kept as per-DOF marks and values so that they can be imposed on the mat...
integer(kind=kint) function, public hecmw_mat_get_solver_type(hecMAT)
subroutine, public hecmw_mat_set_contact_elim(hecMAT, contact_elim)
subroutine, public hecmw_mat_set_flag_diverged(hecMAT, flag_diverged)
subroutine, public hecmw_mat_set_flag_converged(hecMAT, flag_converged)
integer(kind=kint) function, public hecmw_mat_get_iterlog(hecMAT)
integer(kind=kint) function, public hecmw_mat_get_timelog(hecMAT)
integer(kind=kint) function, public hecmw_mat_get_contact_elim(hecMAT)
subroutine hecmw_abort(comm, code)
integer(kind=kint) function hecmw_comm_get_size()
integer(kind=kint) function hecmw_comm_get_comm()
integer(kind=4), parameter kreal
integer(kind=kint) function hecmw_comm_get_rank()
real(kind=kreal) function hecmw_wtime()
subroutine hecmw_update_r(hecMESH, val, n, m)
subroutine solve_lineq_serial_lag_hecmw_init(hecMAT, hecLagMAT, is_sym)
subroutine solve_lineq_serial_lag_hecmw(hecMESH, hecMAT, hecLagMAT, hecEBC)
Structure for Lagrange multiplier-related part of stiffness matrix (Lagrange multiplier-related matri...