コンパイルと実行例
$ make
if [ ! -d ../obj ]; then \
mkdir -p ../obj ; \
fi
ifort -c -module ../obj -c -o ../obj/num_day.o num_day.f90
ifort -o ../test_monthly_mean ../obj/test_monthly_mean.o ../obj/num_day.o ../obj/leapyr.o -module ../obj
$ cd ..
$ ./test_monthly_mean
mclim= 2
ys, ye, yn= 2000 2009 10
yr,mclim,mn= 2000 2 29
yr,mclim,mn= 2001 2 28
yr,mclim,mn= 2002 2 28
yr,mclim,mn= 2003 2 28
yr,mclim,mn= 2004 2 29
yr,mclim,mn= 2005 2 28
yr,mclim,mn= 2006 2 28
yr,mclim,mn= 2007 2 28
yr,mclim,mn= 2008 2 29
yr,mclim,mn= 2009 2 28
主プログラム
program test_monthly_mean! Description:!! Author: am!! Host: aofd30! Directory: /work2/am/12.Work11/22.Climatology_2/71.Monthly_Mean/11.Test_Monthly_Mean/src!! Revision history:! This file is created by /usr/local/mybin/nff.sh at 13:29 on 09-21-2011. integer ys,ye,yn,yr namelist/para/mclim open(1,file="para.txt",action="read") read(1,para) close(1) print *,"mclim= ",mclim ys=2000 ye=2009 yn=ye-ys+1 print *,"ys, ye, yn= ",ys, ye, yn do n=1,yn yr=ys+n-1 call num_day(yr,mclim,mn) print '(A,i5,2i3)','yr,mclim,mn= ',yr,mclim,mn do m=1,mn enddo !m enddo !nend program test_monthly_mean副プログラム1
subroutine num_day(year,month,day)! Description:!! Author: am!! Host: aofd30! Directory: /work2/am/12.Work11/22.Climatology_2/71.Monthly_Mean/11.Test_Monthly_Mean/src!! Revision history:! This file is created by /usr/local/mybin/nff.sh at 13:38 on 09-21-2011. implicit none integer,intent(in)::year,month integer,intent(out)::day integer leapyr if(month == 1)day=31 if(month == 3)day=31 if(month == 4)day=30 if(month == 5)day=31 if(month == 6)day=30 if(month == 7)day=31 if(month == 8)day=31 if(month == 9)day=30 if(month == 10)day=31 if(month == 11)day=30 if(month == 12)day=31 if(month == 2)then if(leapyr(year) == 0)then day=28 else day=29 endif endif if(month > 12 .or. month < 1)then stop "Error in num_day : invalid month" endifend subroutine num_day副プログラム2
! Description:!! Author: am!! Host: aofd30! Directory: /work2/am/12.Work11/22.Climatology_2/71.Monthly_Mean/11.Test_Monthly_Mean/src!! Revision history:! This file is created by /usr/local/mybin/nff.sh at 14:21 on 09-21-2011.! integer FUNCTION LEAPYR(Y) integer,intent(in)::Y LEAPYR=0 IF(MOD(Y,4)/= 0) RETURN IF((MOD(Y,100) /= 0).AND.(MOD(Y,400) /= 0) ) RETURN LEAPYR=1 ENDmakefile
パラメータファイル para.txt
¶mclim=2&end