WANtaroHP (Fortran90 tips)

toEN

ページ概要

Contents


π (パイ:円周率) の値

real(8),parameter::pi=3.14159265358979323846D0


コマンドラインから文字列を取得する

call getarg(1,dummy)
call getarg(2,fnameR)
call getarg(3,fnameW)


文字列を数値に変換する

read(dummy,*) negv


数値を文字列に変換する

write(dummy,'(",",e15.7)') vec(i)


連番ファイル名を生成して書き出す

do n=1,ntout+1
    write (filename,'("_inp_xyz_",i2.2,".txt")') n
    open(13,file=filename,status='replace')
    do ne=1,NELT
        i=kakom(ne,1)
        write(13,*) x(i),y(i),tempe_s(i,n)
    end do
    close(13)
end do


行数の不明なファイルからデータを読み込む

    integer,parameter::nn=1000,mm=100
    character(len=mm)::str(1:nn)
    integer::i,io,nd
    character(len=50)::fnameR

    call getarg(1,fnameR)

    open(11,file=fnameR,status='old')
        do i=1,nn
            read(11,'(a)',iostat=io) str(i)
            if(io<0)exit
        end do
    close(11)
    nd=i-1


ファイル出力

open(12, file=fnameW, status='replace')
do i=1,nd
    write(12,'(a)') trim(adjustl(str(i)))
end do
close(12)


出力書式指定

fmt3="(i5,2(',',e15.7),3(',',e15.7))"
write(linebuf,FMT=fmt3) i,x(i),z(i),hvec(i),q0vec(i),hvec(i)


文字列に含まれる全ての空白を削除する

call del_spaces(linebuf)
write (12,'(a)') trim(linebuf)
subroutine del_spaces(s)
    character (*), intent (inout) :: s
    character (len=len(s)) tmp
    integer i, j
    j = 1
    do i = 1, len(s)
       if (s(i:i)==' ') cycle
        tmp(j:j) = s(i:i)
        j = j + 1
    end do
    s = tmp(1:j-1)
end subroutine del_spaces


文字列に含まれるアンダーバーを空白に置き換える

dummy=str1(i)
call rep_ub(dummy)
str1(i)=dummy
subroutine rep_ub(s)
    !Replaceing underbar with space
    character (*), intent (inout) :: s
    integer i
    do i = 1, len(s)
        if (s(i:i)=='_') s(i:i)=' '
    end do
end subroutine rep_ub


π (pi) の値をモジュールを使って定義する

module defpi
    implicit none
    real(8),parameter::pi=3.14159265358979323846D0
end module defpi

program f90_test
    use defpi
    implicit none
    .... .... ....
end program

toEN
inserted by FC2 system