c234567---------------------------------------------------------------72 c================== calcolo funzioni di forma per l'isoparam. 4 nodi === subroutine defN(xi, eta, N) implicit none c versione A double precision xi, eta, N(*) c versione B, alternativa c double precision xi, eta, N c dimension N(4) N(1) = (1d0-xi)*(1d0-eta)/4d0 N(2) = (1d0+xi)*(1d0-eta)/4d0 N(3) = (1d0+xi)*(1d0+eta)/4d0 N(4) = (1d0-xi)*(1d0+eta)/4d0 return end subroutine c========= calcolo derivate funzioni di forma per l'isoparam. 4 nodi === subroutine defdN(xi,eta,dN) implicit none double precision xi, eta, dN(2,*) dN(1,1) = -(1d0-eta)/4.d+0 dN(1,2) = (1d0-eta)/4.d+0 dN(1,3) = (eta+1d0)/4.d+0 dN(1,4) = -(eta+1d0)/4.d+0 dN(2,1) = -(1d0- xi)/4.d+0 dN(2,2) = -( xi+1d0)/4.d+0 dN(2,3) = ( xi+1d0)/4.d+0 dN(2,4) = (1d0- xi)/4.d+0 return end c234567---------------------------------------------------------------72 c========== programma chiamante, giusto per testare le subroutine... === program prova implicit none double precision N(4) , dN(2,4) integer i,j call defN ( 0.0d0 , 0.0d0 , N ) call defdN( 0.0d0 , 0.0d0 , dN ) write(*,*) 'N' c equivalenti, il secondo è più dinamico c write(*,*) N(1),N(2),N(3),N(4) write(*,*) (N(i),i=1,4) write(*,*) 'dN' c ciclo "do" secondo fortran 77 do 10 i=1,2 write(*,*) (dN(i,j),j=1,4) 10 continue c ciclo "do" accettato da tutti i compilatori attuali, non compatibile c con standard ANSI Fortran 77, ma introdotto nello c standard MIL-STD 1753 del 1978 c do i=1,2 c write(*,*) (dN(i,j),j=1,4) c enddo stop end