ccccccc	Programa per a 
	real*8 variable
	integer i,j,k
	integer nivells,num_nivells,dimx,dimy
	integer n_variable,n_arxiu_0,n_ubicacio
	character*4 nivells_S
	character*14 data,nom_variable
	character*80 arxiu_0
	character*200 ubicacio,mapa
	dimension nivells(100),variable(300,300),nivells_S(100)
	
ccccccccccccccc	Variables
c	variable: Matriu de la variable que en volem el perfil vertical
c	nom_variable: Nom de la variable
c	n_variable: Nombre de caracters de la variable
c	nivells: Vector amb els nivells verticals de la sortida del model
c	num_nivells: Nombre de nivells verticals
c	nivells_S: Nivells verticals en format de 4 caracters
c	dimx,dimy: Dimensions de la matriu
c	data: Data dels arxius de dades
c	arxiu_0: Nom d'arxiu preliminar
c	n_arxiu_0: Nombre de caracters d'arxiu_0
c	ubicacio: Ruta d'acces a les dades
c	n_ubicacio: Nombre de caracters d'ubicacio
c	mapa: Arxiu i ruta d'acces del mapa de la representacio

ccccccccccccccc	Subroutines
c	llegir_config: LLegeix la configuracio de l'execucio
c	dimensions: Determina la dimensio de la matriu de dades
c	I_S4: Transforma d'un integer a un String de 4 caracters

	call llegir_config(ubicacio,num_nivells,nivells,nom_variable,
     &data,mapa)

	n_variable=0
	do i=1,14
	if ((ichar(nom_variable(i:i))-48).ne.(-16)) n_variable=
     &n_variable+1
	enddo

	do i=1,num_nivells
	call I_S4(nivells(i),nivells_S(i))
	enddo

	arxiu_0=data(1:2) // data(4:5) // data(7:8) // data(10:11) //
     &data(13:14) //'-GNU'// nom_variable(1:n_variable) // '-p'//
     &nivells_S(1)//'.grd'
 
	n_arxiu_0=0
	do i=1,80
	if ((ichar(arxiu_0(i:i))-48).ne.(-16)) n_arxiu_0=n_arxiu_0+1
	enddo

	n_ubicacio=0
	do i=1,200
	if ((ichar(ubicacio(i:i))-48).ne.(-16)) n_ubicacio=n_ubicacio+1
	enddo

	call dimensions(arxiu_0,ubicacio,dimx,dimy)
	
	end
	
ccccccc	SUBROUTINA per a passar d'integer a String de 4 caracters
	subroutine I_S4(Int,Str)
	integer Int,IM,IC,ID,IU
	character*4 Str
	
	IM=Int/1000
	IC=(Int-IM*1000)/100
	ID=(Int-IM*1000-IC*100)/10
	IU=Int-IM*1000-IC*100-ID*10
	
	Str=char(IM+48)//char(IC+48)//char(ID+48)//char(IU+48)
	end


ccccccc	SUBROUTINA per a llegir les dades i buscar-ne la seva dimensio
	subroutine dimensions(arxiu,ubic,dx,dy)
	real*8 dad,min
	integer i,j
	integer dx,dy,n_ar,n_u,p1,p2,punt
	character*120 arxiu
	character*200 ubic
	character*5000 linia 
	dimension dad(300,300)
	
	n_ar=0
	do i=1,80
	if ((ichar(arxiu(i:i))-48).ne.(-16)) n_ar=n_ar+1
	enddo
	
	n_u=0
	do i=1,200
	if ((ichar(ubic(i:i))-48).ne.(-16)) n_u=n_u+1
	enddo

	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(E16.6))
c  50 	format(300(f20.10,1x))
	enddo
	close(unit=3)
	
	open(unit=3,file=ubic(1:n_u) // char(47) // arxiu(1:n_ar)
     &,status='old')
	
	read(3,70)linia
  70 	format(5000a)

	close(unit=3)

	p1=0
	p2=0
	do i=1,50
	if (((ichar(linia(i:i))-48).eq.(-2)).and.(p1.ne.0)) then 
	p2=i
	goto 200
	endif
	if (((ichar(linia(i:i))-48).eq.(-2)).and.(p1.eq.0)) p1=i
	enddo
 200	continue

	punt=p1
	dy=1
	do i=1,5000
	if ((ichar(linia(i:i))-48).eq.(-2)) then
	punt=i
	if ((ichar(linia(punt+p2-p1:punt+p2-p1))-48).eq.(-2)) dy=dy+1
	if ((ichar(linia(punt+p2-p1:punt+p2-p1))-48).eq.(-16)) goto 300
	endif
	enddo
 300	continue
c 	write(6,*)'La dimensio de la matriu ',dx,' x ',dy
	end

ccccccc	SUBROUTINA de carrega de la configuracio del programa
	subroutine llegir_config(ubic,niv,nivs,var,dates,map)
	integer i
	integer niv,nivs
	character*14 var,dates,linia
	character*200 ubic,map
	dimension nivs(100)
	
	open(unit=1,file='inf_capcalera.txt',status='old')
	read(1,10)linia
	read(1,10)linia
	read(1,20)ubic
	read(1,10)linia
	read(1,10)linia
	read(1,10)dates
	read(1,10)linia
	read(1,10)linia
	read(1,10)var
	read(1,10)linia
	read(1,10)linia
	read(1,*)niv
	read(1,10)linia
	read(1,10)linia
	do i=1,niv
	read(1,*)nivs(i)
	enddo
	read(1,10)linia
	read(1,10)linia
	read(1,20)map

  80	format(a80)
  40	format(a4)	
  20	format(a200)
  10	format(a14)
	
	close(unit=1)
	
	write(6,*)'Tenim :'
	write(6,*)'Ubicacio arxius ',ubic
	write(6,*)'Data del cas: ',dates
	write(6,*)'Variable :',var
	write(6,*)'Nombre de nivells de pressio de la variable ',niv
	write(6,*)'Nivells de pressio: ',(nivs(i),' ',i=1,niv)
	write(6,*)'Mapa per a la representacio: ',map
	end
