Civil Engineering Reference
In-Depth Information
WRITE(11,'(/A,i3,A,E12.4)')" Load step",iy,"
Load factor ",total_load
oldis=zero; iters=0
its: DO
iters=iters+1; WRITE(*,*)"iteration no",iters; loads=zero
DO i=1,loaded_nodes; loads(nf(:,node(i)))=dload(iy)*val(i,:); END DO
loads=loads+bdylds; bdylds=zero
!-----------------------forward/back-substitution and check convergence---
CALL spabac(kv,loads,kdiag); loads(0)=zero
CALL checon(loads,oldis,tol,converged)
!-----------------------inspect moments in all elements-------------------
elements_3: DO iel=1,nels
num=g_num(:,iel); coord=TRANSPOSE(g_coord(:,num))
CALL rigid_jointed(km,prop,gamma,etype,iel,coord); g=g_g(:,iel)
eld=loads(g); action=MATMUL(km,eld); react=zero
!------------------if plastic moments exceeded generate correction vector-
IF(limit/=1)THEN
CALL hinge(coord,holdr,action,react,prop,iel,etype,gamma)
bdylds(g)=bdylds(g)-react; bdylds(0)=zero
END IF
!-----------------------at convergence update element reactions-----------
IF(iters==limit.OR.converged)
&
holdr(:,iel)=holdr(:,iel)+react(:)+action(:)
END DO elements_3
IF(iters==limit.OR.converged)EXIT its
END DO its
eldtot=loads+eldtot;
WRITE(11,'(A)') " Node
Displacement(s) and Rotation(s)"
DO i=1,loaded_nodes
WRITE(11,'(I5,6E12.4)')node(i),eldtot(nf(:,node(i)))
END DO
WRITE(11,'(A,I5,A)')" Converged in",iters," iterations"
IF(iters==limit.AND.limit/=1)EXIT load_incs
END DO load_incs
STOP
END PROGRAM p45
New scalar integers:
incs
number of load increments
counts plastic iterations
iters
counts load increments
iy
plastic iteration ceiling
limit
New scalar reals:
tol plastic convergence tolerance
total load running total of dload ( = λ)
Scalar logical:
converged
set to .TRUE. if algorithm has converged
New dynamic real arrays:
bdylds
internal correction “forces” to redistribute moments
load increment values
dload
eldtot
keeps a running total of nodal displacements
Search WWH ::




Custom Search