#author("2023-12-21T18:05:23+09:00","default:Miyashita","Miyashita") #author("2023-12-21T18:08:13+09:00","default:Miyashita","Miyashita") * function [#m148737b] Fortran の function は subrountine よりもっと単純な式で戻り値が1つのときに使う. ** 基本 [#kf9f3f2d] Fortran の function は subrountine よりもっと単純な式で戻り値が1つのときに使う.~ #codeprettify(lang-fortran){{ ! 風速に応じた海面抵抗係数Cdを返す関数 function dragcoef_seasurf(windvel) result(cd) implicit none real(kind=8) :: windvel real(kind=8) :: cd if (windvel < 8.0d0) then cd = (1.290d0 - 0.024d0*windvel) * 1.0d-3 else cd = (0.581d0 + 0.063d0*min(45.0d0,windvel)) * 1.0d-3 endif end function dragcoef_seasurf }} 上記の #codeprettify(lang-fortran){{ result(cd) }} という箇所を書かなかった場合は,関数名を戻り値の変数として使う. #codeprettify(lang-fortran){{ ! 風速に応じた海面抵抗係数Cdを返す関数 real(kind=8) function dragcoef_seasurf(windvel) implicit none real(kind=8) :: windvel if (windvel < 8.0d0) then dragcoef_seasurf = (1.290d0 - 0.024d0*windvel) * 1.0d-3 else dragcoef_seasurf = (0.581d0 + 0.063d0*min(45.0d0,windvel)) * 1.0d-3 endif end function dragcoef_seasurf }} こっちはちょっと読みにくいし,grep や検索する時も邪魔なので,result を使ったほうが良いと思う. こっちはちょっと読みにくいし,grep や検索する時も邪魔なので,result を使ったほうが良いと思う.~ ~ 戻り値を2つ以上にしたい場合は,配列を定義して1つの変数に押し込めばできなくもないけど,それなら素直に subroutine を使ったほうが良いかも.~ ~ ~