module param !include "link_fnl_shared.h" integer,parameter :: NX=64,NY=36,Nh=8,Nd=31,NNdol=NX/2,NNQ=2 character*2,parameter :: Nino='La' ! 'El' ! real(8),parameter :: pi=3.1415926535897932,pi2=pi*2.,Dl=pi2/NX,Dfi=pi/NY,FI0=-87.5,Dlgr=DL*180./pi,DfiGR=Dfi*180./pi integer,parameter :: iYEAR0=1990 , iYEARN=2013 end module param use param real(4),dimension (NX,NY) :: vPER,PER real(4),dimension (NX,NY,48) :: dT,HEATING !integer,dimension (7) :: YEAR5=(/1992,1995,1998,2003,2005,2007,2010/) ! ПОЛОЖИТ !integer,dimension (7) :: YEAR5=(/1999,2000,2001,2008,2009,2011,2012/) ! ОТРИЦАТ !integer,dimension (NNQ) :: YEAR5=(/1998,2011/) ! Эль-Ниньо ПОЛОЖИТ ЭльНиньо, КДК положит и отрицат integer,dimension (NNQ) :: YEAR5=(/2006,2010/) ! Ла-Ниньо ОТРИЦАТ ЭльНиньо, КДК положит и отрицат character NameD*30,chYear*4,chZ*4,cYear0*4,cYearN*4 character*100,dimension (NNQ) :: name open(1,file='namelist'//Nino//'.txt') read(1,*) i=1 DO WHILE (.NOT. EOF(1)) read(1,'(a100)')name(i) print*,trim(name(i)) i=i+1 enddo do iYE=1,1 !5 ! HEATING=0 write(chYear,'(i4)') YEAR5(iYE) open(1,file=trim(name(iYE)),access='direct',form='unformatted',recl=NX*NY) open(2,file=chYear//'_1_31jan.dat',access='direct',form='unformatted',recl=NX*NY*10) idd=1 do id=1,31 !Nd PER=0 do ih=1,Nh read(1,rec=i) vPER(:,:) i=i+1 PER=vPER*24*3600 ! Перевод из мм/сек в мм/3 часа, при том что значение характеризует дождь за 3 часа do ix=1,NX ! Перевод в нагрев за 24 часа do iy=1,NY do k=1,10 z1=(z(k)-6.5)/5.39 z1=z1*z1 z2=-z(k)/1.31 dT(ix,iy,k)=PER(ix,iy)*0.086*5.34*(exp(-z1)-0.23*exp(z2)) enddo enddo enddo write(2,rec=idd) dT(:,:,1:10) idd=idd+1 ; !write(*,*) idd-1 HEATING(:,:,1:10)=HEATING(:,:,1:10)+dT(:,:,1:10) ! в К/сутки enddo !ih enddo ! iday write(*,*) idd-1 close(1) ! HEATING(:,:,1:10)=HEATING(:,:,1:10)/(idd-1.) ! в К/сутки ! open(1,file='./outMUAM/2016/'//Nino//'/delTsutki_'//Nino//chYear//'Jan_64x36x10.dat',access='direct',form='unformatted',recl=NX*NY*10) ! write(1,rec=1) HEATING(:,:,1:10) ! среднее за месяц ! close(1) enddo !iYear close(2) stop end FUNCTION Z(k) z_48 =135000. dz=z_48/(48.-0.5) zunten=dz*0.5 ! do k=1,48 z=zunten/1000.+float(k-1)*dz/1000. !write(88,*) z !End do !write(*,*) z !Z=float(k) return end