ccccccc Programa per a buscar la diferencia entre dues matrius
	real*8 matriu1,matriu2,resta
	real*8 resta_min,resta_max
	integer i,j
	integer n_a1,n_a2,n_as,n_ubic1,n_ubic2
	integer nx,ny,dim1,dim2
	character*80 arxiu_1,arxiu_2,arxiu_sortida
	character*200 ubicacio1,ubicacio2
	dimension matriu1(300,300),matriu2(300,300),resta(300,300)
	dimension dim1(2),dim2(2)
	
	call llegir(ubicacio1,ubicacio2,arxiu_1,arxiu_2,arxiu_sortida)
	
	n_a1=0
	n_a2=0
	n_as=0
	n_ubic1=0
	n_ubic2=0
		
	do i=1,80
	if ((ichar(arxiu_1(i:i))-48).ne.(-16)) n_a1=n_a1+1
	if ((ichar(arxiu_2(i:i))-48).ne.(-16)) n_a2=n_a2+1
	if ((ichar(arxiu_sortida(i:i))-48).ne.(-16)) n_as=n_as+1
	enddo

	do i=1,200
	if ((ichar(ubicacio1(i:i))-48).ne.(-16)) n_ubic1=n_ubic1+1
	if ((ichar(ubicacio2(i:i))-48).ne.(-16)) n_ubic2=n_ubic2+1
	enddo
	
	write(6,*)'Tenim les dimensions de les matrius...'
	call dimensions(arxiu_1,n_a1,ubicacio1,n_ubic1,dim1(1),dim1(2))
	write(6,*)'Matriu 1 a arxiu... ',arxiu_1(1:n_a1),dim1(1),
     &' x ',dim1(2)
	write(6,*)' '
	call dimensions(arxiu_2,n_a2,ubicacio2,n_ubic2,dim2(1),dim2(2))
	write(6,*)'Matriu 2 a arxiu... ',arxiu_2(1:n_a2),dim2(1),
     &' x ',dim2(2)
	write(6,*)' '
	
	if (dim1(1).ne.dim2(1)) then
	write(6,*)'Dimensions de les matrius diferents !!!!'
	stop
	endif
	if (dim1(2).ne.dim2(2)) then
	write(6,*)'Dimensions de les matrius diferents !!!!'
	stop
	endif

	nx=dim1(1)
	ny=dim1(2)
	write(6,*)'Dimensions de les matrius... ',nx,' x ',ny	
	write(6,*)' '

	open(unit=1,file=ubicacio1(1:n_ubic1) // char(47) // 
     &arxiu_1(1:n_a1),status='old')
  	open(unit=2,file=ubicacio2(1:n_ubic2) // char(47) // 
     &arxiu_2(1:n_a2),status='old')
   	
	do i=1,nx
	read(1,40)(matriu1(i,j),j=1,ny)
	read(2,40)(matriu2(i,j),j=1,ny)
  40	format(300(f16.6))
	enddo

	close(unit=1)
	close(unit=2)

	resta_min=10.**(10.)
	resta_max=-10.**(10.)

	write(6,*)'Calcaulant la diferencia...'
	write(6,*)'Matriu 2 - Matriu 1'
	write(6,*)' '
	do i=1,nx
	do j=1,ny
	resta(i,j)=matriu2(i,j)-matriu1(i,j)
	if (resta(i,j).lt.resta_min) resta_min=resta(i,j)
	if (resta(i,j).gt.resta_max) resta_max=resta(i,j)	
	enddo
	enddo

  	open(unit=3,file=ubicacio1(1:n_ubic1) // char(47) // 
     &arxiu_sortida(1:n_as),status='unknown')

	write(6,*)'Escrivint arxiu de sortida.... '
	write(6,*)'Resultats percentuals respecte el valor de la matriu 2'
	write(6,*)' '
	write(6,*)ubicacio1(1:n_ubic1) // char(47) // 
     &arxiu_sortida(1:n_as)
	write(6,*)' '

	do i=1,nx
	write(3,50)(100.*resta(i,j)/abs(matriu2(i,j)),j=1,ny)
   50	format(300(f20.10,1x))
	enddo

	close(unit=3)
	
	
	end
	
cccccc	SUBROUITNA per a llegir les dades i buscar-ne la seva dimensio
	subroutine dimensions(arxiu,n_ar,ubic,n_u,dx,dy)
	real*8 dad,min
	integer i,j
	integer dx,dy,n_ar,n_u
	character*80 arxiu
	character*200 ubic
	dimension dad(300,300)
	
	dx=0
	dy=0
	open(unit=3,file=ubic(1:n_u) // char(47) // arxiu(1:n_ar)
     &,status='old')
	do i=1,300
	read(3,*,end=100)min
	dx=dx+1
	enddo
  100	continue
  	close(unit=3)
	
	open(unit=3,file=ubic(1:n_u) // char(47) // arxiu(1:n_ar)
     &,status='old')
	min=100.
	max=-100.
	
	do i=1,dx
	read(3,50)(dad(i,j),j=1,300)
  50 	format(300(f16.6))
	enddo
	close(unit=3)

	min=-100000.
	do i=1,dx
	do j=1,300
	if (dad(i,j).gt.min) min=dad(i,j)
	enddo
	enddo

	do i=1,300
	if (abs(dad(1,i)-min).ne.abs(min)) dy=dy+1 
	enddo

	end

ccccccc Programa per a llegir dades d'un arxiu de text
	subroutine llegir(ubic1,ubic2,arx_1,arx_2,arx_s)
	character*10 linia
	character*2 2lletres
	character*80 arx_1,arx_2,arx_s
	character*200 ubic1,ubic2
	
	open(unit=8,file='matriu_dif.txt',status='old')
	
	read(8,1)linia
  1	format(a10)
	read(8,2)linia
  2	format(a10)
	read(8,3)ubic1
  3	format(a200)
	read(8,4)linia
  4	format(a10)
	read(8,5)linia
  5	format(a10)
	read(8,7)ubic2
  7	format(a200)
	read(8,8)linia
  8	format(a10)
	read(8,9)linia
  9	format(a10)
	read(8,10)arx_1
 10	format(a80)	
	read(8,11)linia
 11	format(a10)
	read(8,12)linia
 12	format(a10)
	read(8,13)arx_2
 13	format(a80)	
	read(8,14)linia
 14	format(a10)
	read(8,15)linia
 15	format(a10)
	read(8,16)arx_s
 16	format(a80)	

	write(6,*)'Tenim:'
	write(6,*)'Dimensions matriu de dades: Dim x ',nx,' Dim y ',ny
	write(6,*)'Ubicacio dels arxius: ',ubic1
	write(6,*)'Ubicacio dels arxius: ',ubic2	
	write(6,*)'Arxiu de la 1a matriu: ',arx_1
	write(6,*)'Arxiu de la 2a matriu: ',arx_2
	write(6,*)'Arxiu de sortida de la matriu: ',arx_s

	close(unit=8)
	end
	
	
	
