Ask Question

Name:
Title:
Your Question:

Answer Question

Name:
Your Answer:
User Submitted Source Code!


Description:
  laplace
Language: FORTRAN
Code:
!// ForQuill v1.01 Beta www.fcode.cn
! FINITE ELEMENT PROGRAM FOR LAPLACE'S EQUATION. TRANGULAR ELEMENTS.
  Real nx, ny
  Dimension x(25), y(25), h(25), g(25, 25), kode(25)
  Dimension nx(3), ny(3), node(3)
  Print 1AT(1H1, 'ECHO OF INPUT CARDS', //)
  Read 5, nnode, nelem
  Do l = 1, nnode
    Read 11, x(l), y(l), kode(l), h(l)
    Print 11, x(l), y(l), kode(l), h(l)
  End Do
  Do l = 1, noode
    Do jj = 1, nnode
      g(l, jj) = 0
    End Do
  End Do
  Do k = 1, nelem
    Read 31, i, j, m
    Print 31, i, j, m
    a = 0.5*((x(i)*y(j)-x(j)*y(i))+(x(m)*y(i)-x(i)*y(m))+(x(j)*y(m)-x(m)*y(j)))
    nx(1) = 0.5*(y(j)-y(m))/a
    nx(2) = 0.5*(y(m)-y(i))/a
    nx(3) = 0.5*(y(i)-y(j))/a
    ny(1) = 0.5*(x(m)-x(j))/a
    ny(2) = 0.5*(x(i)-x(m))/a
    ny(3) = 0.5*(x(j)-x(i))/a
    node(1) = i
    node(2) = j
    node(3) = m
    Do kk = 1, 3
      l = node(kk)
      g(l, i) = g(l, i) + a*(nx(1)*nx(kk)+ny(1)*ny(kk))
      g(l, j) = g(l, j) + a*(nx(2)*nx(kk)+ny(2)*ny(kk))
      g(l, m) = g(l, m) + a*(nx(3)*nx(kk)+ny(3)*ny(kk))
    End Do
  End Do
  Print 999, ((g(i,j),i=1,nnode), j=1, nnode)
!
! BLOCK 3. SOLVE SYSTEM OF EQUATIONS BY ITERATION.
!
  200 amax = 0
  Do l = 1, nnode
! EXCLUDE FIXED BOUNDARY HEADS FROM ITERATION.
    If (kode(l)==1) Goto 400
    oldval = h(l)
    sum = 0.
    Do jj = 1, nnode
      If (jj==l) Goto 300
      sum = sum + g(l, jj)*h(jj)
    300 End Do
    h(l) = -sum/g(l, l)
    err = abs(oldval-h(l))
    If (err>amax) amax = err
  400 End Do
  If (amax>0.01) Goto 200
  Print 405
  Do l = 1, nnode
    Print 411, l, h(l)
  End Do
  Stop
  5 Format (2I10)
  11 Format (2F10.2, I10, F10.2)
  31 Format (3Il0)
  999 Format ('1', 'CONDUCTANCE MATRIX'//, 16(16F5.1//))
  405 Format (////, Lx, 'NODE NUMBER', 6X, 'HEAD')
  411 Format (I7, 5X, F10.2)
End Program
Comments: