program vertical
implicit none
integer::i,j,m,p,q,r,s,neq,k, nod=2, nodof,ndof=4,t,nels,iel
integer, allocatable::nf(:,:),kdiag(:),loads(:),g(:),num(:),g_g(:,:)
!open(20,file='cubes.dat')
q=2
r=5
allocate(nf(q,r))
nf=1
m=0
write (*,*) 'Hello' ,nf(1,1),nf(1,2),nf(1,3),nf(1,4),nf(1,5)
write (*,*) 'Hello' ,nf(2,1),nf(2,2),nf(2,3),nf(2,4),nf(2,5)
nf(1,1)=0
nf(1,4)=0
p=UBOUND(nf,dim=1)
s=UBOUND(nf,dim=2)
do j=1,UBOUND (nf,2)
do i=1,UBOUND(nf,1)
if(nf(i,j)/=0) then
m=m+1
nf(i,j)=m
endif
end do
end do
write (*,*) 'nf ', nf(:,5)
neq=MAXVAL(nf)
!write (*,*) 'Hello' ,nf(1,1),nf(1,2),nf(1,3),nf(1,4),nf(1,5)
!write (*,*) 'Hello' ,nf(2,1),nf(2,2),nf(2,3),nf(2,4),nf(2,5)
write(*,*) 'Hello',neq
allocate(kdiag(neq))
allocate(loads(0:neq),num(2),g(ndof),g_g(4,4))
kdiag=5
loads=7
write(*,*) 'Hello' , kdiag(6)
write(*,*) 'Hello' , loads(1),loads(2),loads(3),loads(4),loads(7),loads(8)
!allocate(num(nod))
nels=4
Do iel=1,nels
num=(/iel,iel+1/)
!allocate(num(nod))
nod=UBOUND(num,1)
nodof=UBOUND(nf,1)
!nodof=2
elements_1: DO i=1,nod
k=i*nodof
g(k-nodof+1:k)=nf(:,num(i))
! write (*,*) 'nf (i) and nf(2)', nf(:,num(i)), nf(:,2)
! write(*,*) 'nod, k, nodof' ,nod,k,nodof
! write(*,*) 'Num',num(1),num(2)
! write(*,*) 'hello, g(_:g_)=' ,k-nodof+1,k,g(k-nodof+1),g(k)
END DO elements_1
g_g(:,iel)=g
END DO
write (*,*) 'Hello' ,g_g(1,1),g_g(1,2),g_g(1,3),g_g(1,4)
write (*,*) 'Hello' ,g_g(2,1),g_g(2,2),g_g(2,3),g_g(2,4)
write (*,*) 'Hello' ,g_g(3,1),g_g(3,2),g_g(3,3),g_g(3,4)
write (*,*) 'Hello' ,g_g(4,1),g_g(4,2),g_g(4,3),g_g(4,4)
close(20)
end program vertical
cHJvZ3JhbSB2ZXJ0aWNhbAoKaW1wbGljaXQgbm9uZQppbnRlZ2VyOjppLGosbSxwLHEscixzLG5lcSxrLCBub2Q9Miwgbm9kb2YsbmRvZj00LHQsbmVscyxpZWwKaW50ZWdlciwgYWxsb2NhdGFibGU6Om5mKDosOiksa2RpYWcoOiksbG9hZHMoOiksZyg6KSxudW0oOiksZ19nKDosOikKIW9wZW4oMjAsZmlsZT0nY3ViZXMuZGF0JykKcT0yCnI9NQphbGxvY2F0ZShuZihxLHIpKQpuZj0xCgptPTAKCndyaXRlICgqLCopICdIZWxsbycgLG5mKDEsMSksbmYoMSwyKSxuZigxLDMpLG5mKDEsNCksbmYoMSw1KQp3cml0ZSAoKiwqKSAnSGVsbG8nICxuZigyLDEpLG5mKDIsMiksbmYoMiwzKSxuZigyLDQpLG5mKDIsNSkKbmYoMSwxKT0wCm5mKDEsNCk9MApwPVVCT1VORChuZixkaW09MSkKcz1VQk9VTkQobmYsZGltPTIpCmRvIGo9MSxVQk9VTkQgKG5mLDIpCglkbyBpPTEsVUJPVU5EKG5mLDEpCglpZihuZihpLGopLz0wKSB0aGVuCgltPW0rMQoJbmYoaSxqKT1tCgllbmRpZgoJZW5kIGRvCmVuZCBkbwp3cml0ZSAoKiwqKSAnbmYgJywgbmYoOiw1KQpuZXE9TUFYVkFMKG5mKQoKIXdyaXRlICgqLCopICdIZWxsbycgLG5mKDEsMSksbmYoMSwyKSxuZigxLDMpLG5mKDEsNCksbmYoMSw1KQohd3JpdGUgKCosKikgJ0hlbGxvJyAsbmYoMiwxKSxuZigyLDIpLG5mKDIsMyksbmYoMiw0KSxuZigyLDUpCndyaXRlKCosKikgJ0hlbGxvJyxuZXEKYWxsb2NhdGUoa2RpYWcobmVxKSkKYWxsb2NhdGUobG9hZHMoMDpuZXEpLG51bSgyKSxnKG5kb2YpLGdfZyg0LDQpKQprZGlhZz01CmxvYWRzPTcKd3JpdGUoKiwqKSAnSGVsbG8nICwga2RpYWcoNikKd3JpdGUoKiwqKSAnSGVsbG8nICwgbG9hZHMoMSksbG9hZHMoMiksbG9hZHMoMyksbG9hZHMoNCksbG9hZHMoNyksbG9hZHMoOCkKCiFhbGxvY2F0ZShudW0obm9kKSkKbmVscz00CkRvIGllbD0xLG5lbHMKCm51bT0oL2llbCxpZWwrMS8pCgohYWxsb2NhdGUobnVtKG5vZCkpCiBub2Q9VUJPVU5EKG51bSwxKQoKbm9kb2Y9VUJPVU5EKG5mLDEpCiFub2RvZj0yCmVsZW1lbnRzXzE6CURPIGk9MSxub2QKIAlrPWkqbm9kb2YKIAkgZyhrLW5vZG9mKzE6ayk9bmYoOixudW0oaSkpCiEJd3JpdGUgKCosKikgJ25mIChpKSBhbmQgbmYoMiknLCBuZig6LG51bShpKSksIG5mKDosMikKIQl3cml0ZSgqLCopICdub2QsIGssIG5vZG9mJyAsbm9kLGssbm9kb2YKIQl3cml0ZSgqLCopICdOdW0nLG51bSgxKSxudW0oMikKIQl3cml0ZSgqLCopICdoZWxsbywgZyhfOmdfKT0nICxrLW5vZG9mKzEsayxnKGstbm9kb2YrMSksZyhrKQogCUVORCBETyBlbGVtZW50c18xCiBnX2coOixpZWwpPWcKIEVORCBETwp3cml0ZSAoKiwqKSAnSGVsbG8nICxnX2coMSwxKSxnX2coMSwyKSxnX2coMSwzKSxnX2coMSw0KQp3cml0ZSAoKiwqKSAnSGVsbG8nICxnX2coMiwxKSxnX2coMiwyKSxnX2coMiwzKSxnX2coMiw0KQp3cml0ZSAoKiwqKSAnSGVsbG8nICxnX2coMywxKSxnX2coMywyKSxnX2coMywzKSxnX2coMyw0KQp3cml0ZSAoKiwqKSAnSGVsbG8nICxnX2coNCwxKSxnX2coNCwyKSxnX2coNCwzKSxnX2coNCw0KQpjbG9zZSgyMCkKZW5kIHByb2dyYW0gdmVydGljYWwK