fortran66のブログ

fortran について書きます。

【メモ帳】gfortran: elemental function automatic array ??

gfortran の elemental function で automatic array 取れない

Intel fortran では通るので、gfortran のバグかも知れないが、Intel fortran は gfortran 以上に文法にガバガバだしw

elemental でなければ pure でも通る。impure でも elemental つけると通らない。意味的には elemental で困る点は無いが、elemental subroutine/function の制約かも知れない。文法書をみてもすぐには分からない。 gfortran-7 でも -8 でも -9 でも引っかかる。

binder output

Modern Fortran Explained: Incorporating Fortran 2018 (Numerical Mathematics and Scientific Computation)

Modern Fortran Explained: Incorporating Fortran 2018 (Numerical Mathematics and Scientific Computation)

ASCII 出力

%compiler: gfortran-9
module m_divisor
    implicit none
contains
    pure integer function ifun(n) 
        integer, intent(in) :: n
        integer :: k(n) 
        k = 1
        ifun = sum(k)
    end function ifun 
end module m_divisor

program test
    use m_divisor
    implicit none
    print *, ifun(10)
    stop 'normal end'
end program test
          10


STOP normal end
%compiler: gfortran-9
module m_divisor
    implicit none
contains
    pure elemental integer function ifun(n) 
        integer, intent(in) :: n
        integer :: k(n) 
        k = 1
        ifun = sum(k)
    end function ifun 
end module m_divisor

program test
    use m_divisor
    implicit none
    print *, ifun(10)
    stop 'normal end'
end program test
/mnt/d/ubuntu18/binder/modern_fortran/examples/temp/tmpih_fplg0.f90:6:21:

    6 |         integer :: k(n)
      |                     1
Error: Dummy argument ‘n’ not allowed in expression at (1)
/mnt/d/ubuntu18/binder/modern_fortran/examples/temp/tmpih_fplg0.f90:6:21:

    6 |         integer :: k(n)
      |                     1
Error: Dummy argument ‘n’ not allowed in expression at (1)
/mnt/d/ubuntu18/binder/modern_fortran/examples/temp/tmpih_fplg0.f90:13:8:

   13 |     use m_divisor
      |        1
Fatal Error: Cannot open module file ‘m_divisor.mod’ for reading at (1): No such file or directory
compilation terminated.


[gfort kernel] fortran exited with code 1, the executable will not be executed



    
    
  

【寝言】遠藤誉 調子良し van Rossum 形無し

中国「開戦警告」発表:中国の本気度

我こそは真の支那通なりと、いつも一ひねりしてくる遠藤誉もしばらくぶりにテンション上がっています。

戦前の支那通の皆さんも、我こそは支那人の神髄に通じた者なりと自称して、散々色々言ってましたが、儒教廃止で共産化とか誰も予想してません。

www.newsweekjapan.jp

なお news.yahoo 版には、末尾に Newsweek 再録版には無い注記がついています。ここでは前に移動させました。

要するに超限戦ということだと思います。ゲリラ人海戦術でw

<注記>このコラムで書いた「戦争」というのは「貿易戦争」とか「ハイテク戦争」の意味であって、決して武器を使った、いわゆる「戦争」ではない。日本でも将棋などで「名人戦」と称するのと同じ「戦」の意味だ。中国が今、武器を使った戦争をアメリカとなど出来るはずがなく、もし武器を使った戦争などをしたら、現状で言うならば、「100%!」中国が敗けるのは明白だ。だから中国が「武器を使った戦争」をアメリカとなどやるはずがないし、またそのようなことをすれば一党支配体制崩壊につながるので、さらにやらないと断言してもいい。もっとも、今日までは、「勿謂言之不預」という「開戦警告」は、「武器を使った戦争」が始まる1,2ヵ月ほど前に宣言されてきた。したがって、「武器を使った戦争」と勘違いしてしまうのも無理からぬこととは思う。現に中国のメディアは、過去の「武器を使った戦争」に言及している。しかしこれはあくまでも「レアアース・カードの本気度」と「信頼できない企業」リスト発表の本気度を測るための物差しにはなるとしても、決して「武器を使った戦争」を指しているとは思えない。つまり、米中貿易戦あるいは米中ハイテク戦は長引くとみなして、日本は国益に適った道を選ばなければならないだろということになる。本コラムは、その注意を喚起するために、中国の現状を紹介したまでだ。

 5月29日の人民日報は、中国がこれまで開戦前に使ってきた常套句「勿謂言之不預」(警告しなかったとは言わせない)を発表した。貿易戦であれハイテク戦であれ、中国の本気度を窺わせる。(最後の<注記>をご覧いただきたい。)

◆人民日報が「勿謂言之不預」(警告しなかったとは言わせない)  5月29日付の中国共産党機関紙「人民日報」が第3面の「国際論壇」のコーナーで、「アメリカは中国の反撃能力を甘く見るな」という見出しで、「勿謂言之不預」という言葉を用いた。リンク先の最初のPDFで、赤線で囲んだ部分を少し拡大してご覧になると、簡体字で書いた「勿謂言之不預」という文字が読み取れるだろう。

 これは直訳すれば、「警告しなかったと言うこと勿(なか)れ」だが、平たく言えば「中国が警告しなかったとは言わせない」となる。

 中国が本気で戦闘を開始する前に「開戦警告」ときには「開戦宣言」として使われてきた常套句だ。

◆1962年の中印国境紛争  第一回目の「開戦前の辞」は1962年10月に起きた中印国境紛争である。

 1949年10月1日に中華人民共和国(以下、中国)が誕生したころは、中国とインド(ネルー首相当時)は「平和五原則(領土主権の尊重、相互不可侵、内政不干渉、平等互恵、平和共存)」を掲げて兄弟の契りを結んでいたが、1956年にチベット動乱が起き、1959年に拿来・ラマ14世がインドに亡命政府を樹立すると、中印の関係は悪化していった。

 そこでインドとパキスタンおよびインドの国境が交差するカシミール地域のアクサイチンにおいて、中印双方が相手が進入したと言い出して小競り合いとなったとき、中国は「勿謂言之不預」という言葉を1962年9月22日付の人民日報に載せた。

 リンク先の2番目のPDFがそれだ。

 これが第一回目の「開戦前の辞」すなわち「開戦警告」である。

 その2ヵ月後に戦闘が始まり、中国人民解放軍の圧勝に終わった。こうしてアクサイチンは今も中国が実効支配し、インドが領有権を主張している。

◆二回目は中越戦争  二回目は1978年12月25日の人民日報第一面の社説だ。

 リンク先の3番目のPDFがそれだ。見出しは「我々の忍耐には限界がある」。

 こうして1979年2月17日に、中越戦争の幕が切って落とされた。

 この「開戦前の辞」を発布したが最後、中国は必ず「戦争を開始する」のである。

 もっとも、この中越戦争で中国は勝てなかった。

 敗北したとは言わないが、勝利もしていない。アメリカとの長い戦争(ベトナム戦争)を戦って疲弊しているはずのベトナム軍に勝てなかったのだ。

 これが中国人民解放軍の100万人リストラへとつながっていく。

 そしてその中に、後にHuaweiを創設する任正非氏がいたわけだ。

 100万人も解雇したのは、長年にわたる文化大革命(1966年~76年)で、中国経済は壊滅的な打撃を受けていたため、100万人もの「無駄な兵士」を雇用しているだけのお金が軍にはないからだ。だから解雇した。

 その軍人崩れが、香港の電話交換機の代理販売という、言うならばブローカーを生業とする華為(Huawei)という民間企業を創ったからと言って、いったいどこから「軍が支援した」「背後には軍がいる」などという理屈が出てくるのか。

 当時は雨後の竹の子のように民間企業が生まれては消えて行った。その中の一つだ。

 この流れから見てもHuaweiの背後には軍があるなどという実しやかな流言には注意しなければならないことが見えてくるだろう。

◆米中ハイテク戦、中国の本気度  米中貿易戦争というか、その根幹となっている米中ハイテク戦に対する中国の本気度は、これまでの「開戦前の辞」発表とその後の断行から考えて、勝ち負けは別としても、中国が本気であることが窺える。

 レアアースのカードも本気なら、「信頼できない企業」リスト発表も本気だ。

 今年5月29日の人民日報は再度「(この戦争は)戦いたくはない。しかし中国は戦うことを恐れていない。戦わなければならない時は戦う」という、いつもの言葉を載せている。その本気度こそは「勿謂言之不預」に凝縮されているとも書いている。

 そして結んだ。

 ――こんにちの中国は、かつて虐められていた中国とは違い、独立自主の新中国だ。したがって、何人(なんぴと)たりとも中国の偉大なる復興への歩みを阻止することはできないのである。

 なるほど。

 ではこちらも、そのつもりで考察を続けるとしようか。

型について van Rossum氏

対照的に、動的型付け言語では、開発者が変数や関数パラメーターの型を指定する必要はない。そのため、動的型付け言語はこれまで、開発者の負担を軽減すると考えられてきた。 

 しかし、動的型付けは一般に大規模で複雑なコードベースには適していない、とvan Rossum氏は同イベントで述べた。

今頃かよw

japan.techrepublic.com

www.techrepublic.com

FORTRAN と型

FORTRAN I が開発された IBM 704 は、当時の計算機で初めて浮動小数点数計算ハードウェアが実装されたので、固定小数点数浮動小数点数を明確に区別する必要がありました。

また固定小数点数の方は、小数点位置を右端に固定して整数としてのみ用いることとしたので、今に至る「型」が生まれたと思います。

無論、それ以前のアセンブラ時代にも、使い分けていますが、質的に明確になったと思われます。

追記:別売りオプション品としての浮動小数点数計算ハードウェアは 704 以前にもあったようです。486DX で 8087 コプロが内臓される前みたいなものか。

【寝言】富坂聰 天安門事件を無視w

支那狗 富坂聰 

米中交渉のあいだ、中共の方針が定まらないらしく、ゴシップ的な記事ばかり書いていた富坂聰が、先週あたりから発狂したような面白記事を書き出しました。支離滅裂で笑えます。支那人からの指令が乱れているのでしょう。

支那人の慌てふためき振りが、蟻の巣に水を流し込んで遊んだ時の蟻のようでとても面白いです。

日本を味方につけたいなら、まず肉袒して羊をかついだ使者が、切り落とした江沢民の首を塩漬けにしてお土産によこす位の誠意を見せなければ。入り口にも進まない。

www.zakzak.co.jp

“無知”による米国追従論は愚か…米中貿易摩擦、日本にも打撃!? 中国が「冷戦やむなし」と腹をくくれば…

 トランプ大統領の訪日を終えて、日米貿易の懸案はいったん先送りされた。

 一方で、やはり世界の注目は米中の貿易摩擦の行方にそそがれている。その様相は「経済戦争」にまで発展している。

 これまで反論を控えてきた中国のメディアも、5月中旬過ぎには、にわかにギアを入れかえてアメリカを攻撃し始めた。

 米中激突の最前線に立たされたファーウェイ(華為技術)の問題も含め、しばらくはこの問題をしっかり書いていかざるを得ない。実に多種多様な情報が飛び交い、整理も必要だ。

 単純にZTE(中興通訊)と比較して、部品供給を止められたことで「大変だ」とするのは論外だが、「ファーウェイは追い詰められている」「いやいや、ファーウェイには勝算がある」といった論争にも違和感が拭えない。そもそも、あらかじめ勝敗が決まっている話などない。今後の風向き次第で状況は二転三転が予測されるのだ。

 その裏側で続く米中の駆け引きは最大の変数だが、もし中国が「冷戦やむなし」と腹をくくれば、計算は一から狂う。

 その変数を占うためにも、まずは中国が始めたアメリカへの反論をしっかり整理してみたい。論点は大雑把に5つある。

 一つは、トランプ政権がさらなる関税の引き上げを決め、米中貿易交渉が決裂した5月10日、CCTV(中国中央テレビ)の取材に応じた劉鶴副首相は、「(米中が)不一致の点」に言及し「重大な原則問題」と語った。その後の国内メディアは、知的財産権の強制移転問題や補助金問題では、すでに十分な提案をし、行動もしているとの論調へと変じ、「主権にかかわる問題に触れた」とアメリカを攻撃し始めたのだ。

 アメリカはこれまで中国に対する要求を段階的に引き上げてきた。

 事実、2017年秋のトランプ大統領訪中までの焦点は、エタノールや自動車の関税、金融市場の開放が両者の話し合いの最前線であった。

 それが時間の経過とともに、オバマ大統領がかつてTPP(環太平洋戦略的経済連携協定)によって中国から勝ち取ろうとしていた知的財産権の強制移転阻止などの問題へと焦点が移っていったのだ。

 こんなことなら素直にTPPをやっておけば良いって話だ。そうすれば中国包囲網でEU(欧州連合)内で刃こぼれも起きなかった。知的財産権の強制移転問題なら中国も予測の範囲で、穏やかな反応でいられたはずだ。

 日本では、いまだ「知的財産権の問題で頑張っているトランプ政権を応援すべきだ」など、基本情報さえ押さえてないトンデモ解説が聞かれるが、これは自分の家が燃えることを覚悟して、「隣家に火を付けてくれてありがとう」といっているようなものだ。

 事実、日本経済は、唯一好調だった自動車の一部品やスマートフォンなど基幹部品を中国へ輸出するビジネスが米中対立で大きく傷ついた。それを応援しろとは……。

 この愚かさは、ここで書かなくとも、あと1年、対中制裁が続けば、嫌でも強烈な痛みとなって実感することになるだろう。

 ■富坂聰(とみさか・さとし) 拓殖大学海外事情研究所教授。1964年生まれ。北京大学中文系に留学したのち、週刊誌記者などを経てジャーナリストとして活動。中国の政・官・財界に豊富な人脈を持つ。『中国人民解放軍の内幕』(文春新書)など著書多数。近著に『中国は腹の底で日本をどう思っているのか』(PHP新書)。

【メモ帳】binder で schur (と flang, caf)

binder

schur をコンソールから起動。
(flang&CAFもコンソールからのみ利用可)

https://mybinder.org/v2/gh/f66blog/fortran8/master?urlpath=lab

https://img.shields.io/badge/Fortran%20Jupyter-Binder-E66581.svg?logo=data:image/png;base64,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

github.com




schur は apt.txt では入れられないので(生の apt install 出来ない)、postBuild に突っ込む必要がある。しかし、この段階では root ではないので、apt install 出来ない。したがってローカルに構成する必要がある。

まず sourceforge から落としてきて、dpkg -x でローカルに展開して、そこに path を通すことにする。HELP FILE 用の SCHUR_LIB 環境変数も必要。

さらに Ubuntu 18.xx には libreadline6 が無いので、これも同じようにして落としてきて、ローカルに置いて,
LD_LIBRARY_PATH を通してやる必要がある。

メモ帳:Schur 群論プログラム - fortran66のブログ

mkdir schur
cd schur
wget https://sourceforge.net/projects/schur/files/Debian%20package/6.10/schur_6.10-2_amd64.deb
dpkg -x ./schur_6.10-2_amd64.deb .
rm schur_6.10-2_amd64.deb   
wget http://http.us.debian.org/debian/pool/main/r/readline6/libreadline6_6.3-8+b3_amd64.deb
dpkg -x libreadline6_6.3-8+b3_amd64.deb .
rm libreadline6_6.3-8+b3_amd64.deb   
cd ..
echo export SCHURLIB=~/schur/usr/share/schur  >>~/.bashrc  
echo export LD_LIBRARY_PATH=~/flang/lib:~/schur/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH >> ~/.bashrc
echo export PATH=~/flang/bin:~/schur/usr/bin:$PATH             >> ~/.bashrc

[:large]
Binder Schur

多分 apt.txt に less が必要?

flang

バイナリを落としてきて適宜やればよい。

mkdir flang
cd flang
wget https://github.com/flang-compiler/flang/releases/download/flang_20190329/flang-20190329-x86-70.tgz
tar zxvf flang-20190329-x86-70.tgz
rm flang-20190329-x86-70.tgz
cd ..

CAF (CoArray Fortran)

apt.txt に open-coarrays-bin で若干古めのバイナリが入る。

【メモ帳】gfortran-9 インストール Ubuntu-test PPA

Ubuntu-test PPA

先日、個人ビルドの gfortran-9 のインストール方法について書きましたが、 Ubuntu-test PPA にも gfortran-9 が上がったようです。

fortran66.hatenablog.com

scivision さんのサイト参照のこと

www.scivision.dev

add-apt-repository ppa:ubuntu-toolchain-r/test

apt update

apt install gfortran-9

解除

sudo add-apt-repository --remove ppa:ubuntu-toolchain-r/test

【メモ帳】Wolfram Engine on Jupyter TeX 表示 ついでに FortranForm 利用

Jupyter TeX 表示

黒木玄氏による「Free Wolfram EngineをJupyterで使う方法」
後半の TeX 表示が便利。

nbviewer.jupyter.org

毎回初めに入力

追記 R2.9.22 現在、効かなくなっているようです。 //TeXForm とフルで書く必要があるようです。

TeX[expr_] := ToString[TeXForm[expr]]
JupyterOutTextForm = "TeX"
メモ帳

\int_0^1\log(1/t)^{s-1}dt
\text{ConditionalExpression}[\Gamma (s),\Re(s)>0]

Integrate[Log[1/t]^(s-1), {t, 0, 1}] // TeXForm
 Refine[Integrate[Log[1/t]^(s-1), {t, 0, 1}], Assumptions -> s > 0] // TeX

FortranForm の利用

Wolfram Language で tan(x) を Taylor 展開させ、それを Fortran 形式で出力させ、コピペして Kernel を Fortran に換えて、計算して組み込み関数の tan(x) と比較する。
(Kernel を変えると、トラブルが起きやすい)

f:id:fortran66:20190603031709p:plain
Taylor 展開

入力

TeX[expr_] := ToString[TeXForm[expr]]
JupyterOutTextForm = "TeX"
Series[Tan[x], {x, 0, 5}] // TeX
Normal[Series[Tan[x], {x, 0, 5}]] // FortranForm
do i = 1, 10
  x = i * 0.1
  print *, i, x, x + x**3/3. + (2*x**5)/15., tan(x),  x + x**3/3. + (2*x**5)/15. - tan(x)
end do
end
           1  0.1000000      0.1003347      0.1003347     -7.4505806E-09
           2  0.2000000      0.2027093      0.2027100     -7.0035458E-07
           3  0.3000000      0.3093240      0.3093363     -1.2248755E-05
           4  0.4000000      0.4226987      0.4227932     -9.4562769E-05
           5  0.5000000      0.5458333      0.5463025     -4.6914816E-04
           6  0.6000000      0.6823680      0.6841369     -1.7688274E-03
           7  0.7000000      0.8367426      0.8422884     -5.5457354E-03
           8  0.8000000       1.014357       1.029639     -1.5281200E-02
           9  0.9000000       1.221732       1.260158     -3.8426161E-02
          10   1.000000       1.466667       1.557408     -9.0741038E-02