1ヶ月の日数を計算する

コンパイルと実行例

$ 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 !n
end 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"
  endif
end 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
                                                                       
 END

makefile

  • makefile - 2011/09/20 22:32、A M (バージョン 1) 削除
    • 3KB ダウンロード

パラメータファイル para.txt

&para
mclim=2
&end