- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Jim:
I have talked about ULARC before now.
It was written by Powell's group in about 1970 and I have been using it since 1980. Quick, simple, dirty Fortran but powerful.
It was designed for Plastic Analysis of Frames.
I have been using it on a large bridge in Europe and it has been good as a Monte Carlo base.
I had to add the entry bridge span, a flat slab to the big model. It is crashing with an interesting set of errors, took me a while to work out what was missing from the original code, they had not thought of a flat beam by itself.
Line 1 has the axial load at V(?), and with portal frames there is always axial load, so no problems from Xmas 1981 until Thanksgiving 2023, a blasted long time.
But with a flat beam there is no axial load and line 49 gives me IX = 0
So then line 55 throws an exception as I am trying to look up the zeroth element of the applied moments, with IX. We are after the ratio of the applied moments and axial loads to the allowed to determine where the plastic hinges should be placed. So here it is a first guess. Only took 2 weeks to solve to and work out if it was an insurmountable problem in the time available.
ULARC is the precursor to Drain. Anyway, A. SUDHAKAR. wrote ULARC and in the 1990s I tried to track him down to talk about the program. His kind wife replied and said that he had died. I wrote her a very nice letter saying her husband was a tremendous engineer and a good programmer. A nice response from her.
A master's student in six months wrote a world class analysis program for those of us who do not mind quick, dirty Fortran of the 77 kind. Powell's group was fantastic, pity they are all gone.
Any way merry XMAS
John
S(NE,1)=E(N)*AA(N)*V(1)/ELL
S(NE,2)=XM*(SKII(N)*V(2)+SKIJ(N)*V(3))
S(NE,3)=XM*(SKIJ(N)*V(2)+SKJJ(N)*V(3))
!
! CHECK PLASTIC WORK FOR CLOSED HINGES
!
IF (STOT(NE,2)*VP(NE,2).GE.0.) GO TO 70
ICLOSE=1
IHI(NE)=0
write (sw,60) NE,NODI(NE)
write (sw,61) NE,NODI(NE)
60 FORMAT(//21H HINGE CLOSES, MEMBER,I4,6H, NODE,I4)
61 FORMAT( 21H HINGE CLOSES, MEMBER,I4,6H, NODE,I4)
70 IF (STOT(NE,3)*VP(NE,3).GE.0.) GO TO 80
ICLOSE=1
IHJ(NE)=0
write (sw,60) NE,NODJ(NE)
!
80 CONTINUE
!
! REPEAT IF HINGES CLOSED
Factor = 1.0
max = 0.0
!
IF (ICLOSE.EQ.1) RETURN
!
! DETERMINE MINIMUM LOAD FACTOR INCREMENT FOR NEXT HINGE
!
outer: do I = 1,10
RATIOI=1.E10
RATIOJ=1.E10
INEL=0
JNEL=0
!write(*,86)
86 Format(" Lambda Factor Table",/&
" Type Elem SECT AXIAL Moments Moment LAMBDA AXIAL Axial Axial Bending Adjusted",/&
" Num Type FORCE 1 2 Capacity VALUE Capacity Vector Force Moment Lambda"/&
" kN kNm kNm kNm kN Offset Table Data",/&
" kN kNm",/)
DO 160 NE=1,NELS
!write(*,*)IHI(NE)
IF (IHI(NE) .GT. 0) GO TO 120
NS=NSECI(NE)
DELS=S(NE,2)
write(*,*)NE, S(NE,2),DELS ! Checks if moment is applied
IF (DELS) 100,120,90
90 RAT=(YMP(NS)-STOT(NE,2))/DELS
IX = ceiling(ABS(S(NE,1)*FACTOR(I))/(MM*MM)) ! Checks if there is an axial load
IF(IX .eq. 0) then
write(*,*)" Here 1",ne
ix = 1
endif
write(sRT,*)1,IX,NS,S(NE,1),FACTOR(I)
RATA = RAT * (YA(IX,NS)/(YMP(NS)))
ELTYPE = 1
!write(*,85)1,NE,NS,S(NE,1)/MM,S(NE,2)/MM,S(NE,3)/MM,YMP(NS)/MM,RAT,LIMIT(NS),IX,(XA(IX,NS)/MM),(YA(IX,NS)/MM),RATA
85 format(" ",3I5,4(" ",F9.0),2(" ", F10.1)," ",I4,2(" ",F9.1)," ",E9.4,\)
RAT = RATA
GO TO 110
100 RAT=(-YMN(NS)-STOT(NE,2))/DELS
write(sRT,*)2,IX,NS,S(NE,1),FACTOR(I)
IX = ceiling(ABS(S(NE,1)*FACTOR(I))/(MM*MM))
IF(IX .eq. 0) then
write(*,*)" Here 2",ne
ix = 1
endif
RATA = RAT *(YA(IX,NS)/(YMP(NS)))
ELTYPE = 2
! write(*,85)ELTYPE,NE,NS,S(NE,1)/MM,S(NE,2)/MM,S(NE,3)/MM,YMP(NS)/MM,RAT,LIMIT(NS),IX,(XA(IX,NS)/MM),(YA(IX,NS)/MM),RATA
RAT = RATA
110 IF (RAT.GT.RATIOI) GO TO 120
RATIOI=RAT
INEL=NE
120 IF (IHJ(NE).GT.0) GO TO 160
NS=NSECJ(NE)
DELS=S(NE,3)
IF (DELS) 140,160,130
130 RAT=(YMP(NS)-STOT(NE,3))/DELS
!write(*,131)rat
131 Format(" ",F7.2)
GO TO 150
140 RAT=(-YMN(N
Long live Fortran and death to the pirates. (Adapted from Swallows and Amazons)
Link Copied
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Are you sure that by setting XI = 1 is the correct thing to do?
An alternative to consider is to dimension the arrays that use XI as an index to include a lower bound of 0. And then you provide the values to use in those arrays should a flat beam be used.
A second alternative to not model a flat beam. Give it some minimal thickness (or whatever dimension/property is missing).
Jim Dempsey
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I could do either, but my way uses a minimum capacity as a check, I also count the number of times it occurs which means you had better check it. It means that the axial load is zero, so it really is not a constraint.
By flat I mean it is a straight beam not a Portal Frame. The original programmer used only Portal Frames, which is a real limit, think a roof hanging from the edge of a portal frame to cover something like a car.
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page