nAGお客様事例

イーストアングリア大学 教授 Simon Clegg様

お客様事例
業種 大学
ソリューション 大気化学モデルの計算
使用された製品 nAG Fortran ライブラリ
使用された関数 最小値問題(E04UCF)

イーストアングリア大学のSimon Clegg教授は、大気質や気候科学に関する大気粒子の化学熱力学に活用される大気化学モデルの計算にnAG Fortran ライブラリのルーチンE04UCFを使用しました。このお客様の事例を以下にご紹介します。


Professor Simon Clegg
School of Environmental Sciences
University of East Anglia

Professor Anthony Wexler
Air Quality Research Centre
University of California at Davis

Web 上での大気化学

E-AIM モデル (http://www.aim.env.uea.ac.uk/aim/aim.php) は、年間13,000に及ぶ計算を実行する研究者や学生に10年以上利用されてきた Fortran webインターフェースをもつ大気化学モデルです。モデルの主な活用は大気質や気候科学に関する大気粒子の化学熱力学です。両者とも重大な環境問題として認識されています。nAG のソフトウェアは始まって以来このモデルの重要な要素でした。そして本稿ではnAGとの提携により私たちがどのような恩恵を受けたか述べています。私たちは、このモデルをweb上で利用可能とした事によりその使用量や影響が大幅に増加したことを見いだしました。Web上で利用可能とするための実装は比較的簡単ですが、ここではそれを示す簡単な例と、多くの分野の Fortran プログラマや nAG ユーザにとって役に立つであろう手引きを記載しています。

科学

大気中に浮遊しているミクロサイズの粒子は、大気の視界に影響を与え、光を散乱させる力や雲の形成における凝縮核としての役割を通じて大気質や気候変動などの問題の中心となっています。これらのエアロゾルの影響を予測するために、大気科学者は温度や相対湿度の変化、固体か液体か、大気と粒子とを分離する硝酸やアンモニウムなどの揮発性成分の程度に応じて粒子(多くは水溶性)の水分吸収を計算する必要があります。

私たちのモデルは、システムのギブズエネルギーの線形制約つき多次元最小化として一定のエアロゾル成分を含む大量の大気の平衡状態を計算します。システムの様々な化学種の量(計算では'x'変数)が変数間で15桁以上異なる場合もあり、問題を解くことを困難にしています。非線形制約は、制約が適用可能であるか定かでない状況があるため使用できていません。例えば大気中のアンモニアの分圧は液体エアロゾル粒子のアンモニア活量と関係していますが、液体粒子が存在しているかどうかは初めはわからず、つまり制約が適用可能かどうかの判断ができません。

nAGは変数や目的関数でより広範囲な値が利用可能となるように、nAG FortranライブラリルーチンE04UCFを拡張精度(REAL*16)に対応させ、更に変数や制約のスケーリング方法を示すことにより私たちに解決策を提供してくれました。E04UCF ルーチンは私たちの化学モデルがより複雑になって行く中、10年以上に渡って使用されその信頼性を証明しました。直近ではモデルに含まれる大気有機化合物の数が増やされ、更に変数の数を増やす疎水性(無水)の粒子相が追加されました。私たちは、自分たちのコードを別のマシンやコンパイラに移植するために、また時には競合する最小化ツールを評価するために nAGと共に研究を続けています。私たちの研究は英国、ヨーロッパそしてアメリカの資金提供機関によりサポートされています。

Fortran アプリケーションと Web

複雑な科学コンピュータモデルへweb インターフェースを加えることで以下の利益がもたらされます:

  • インターネット接続により世界中の誰でも可能なアクセス;
  • HTMLを使用して作成された様々な種類の計算に対する利用しやすいインターフェース;
  • メールによってのみ配布される"command line"版のプログラムと比べて大幅に増加した使用量と影響;
  • アプリケーションを実行するサーバ上で、シングルコピーのソフトウェアのみがアプリケーションの維持に必要;
  • 使用量が詳細に(実行された計算の種類やアプリケーションの使用頻度だけでなく、IP Addressに基づくユーザに関する統計情報も)トラッキング可能

Fortranエアロゾル無機モデル(http://www.aim.env.uea.ac.uk/aim/aim.php)を1998年にwebに掲載した後、 私たち独自の分野ではありますが、他の多くの webベースのアプリケーションが追随してくると予想しました。これは実際には起こりませんでした。おそらくFortran プログラマはwebページからFortranプログラムを呼び出したり、プログラムから入力を読み込んだり、ユーザのブラウザ画面に表示される出力結果を書き込むことがいかに簡単かを必ずしも有難く思わないからです。このセクションでは、ユーザがWebのフォームで入力した2つの数字をFortranプログラムが読み込み、それらを加算し、合計をブラウザ画面に表示する2つの簡単な例を用いてどのようにこれが行われるか示します。

最初の例では、結果がブラウザの新しいページに出力されます。2番目の例では入力で使用されたページと同じhtmlのページの'box'に出力されます。nAG Fortran コンパイラの使用を前提としますが、コンパイラ依存も認識し、私たちが経験してきたIntel や Lahey/Fujitsuコンパイラのユーザに必要なマイナーなコード変更を説明します。また、web サーバとして機能するようWindows PC 上の開発環境の設定のしかたを説明します。 私たちのサイトの進化-以下の例よりも若干複雑なもので始まっています-はインターネットアーカイブ (http://www.archive.org/index.php ページのアドレス入力ボックスで"www.uea.ac.uk/~e770/aim.html"を入力)で参照いただけます。この件でご質問がございましたら、Simon Clegg ( s.clegg@uea.ac.uk) までお問い合わせください。

例 1

最初に、加算する2つの数字を入力できる簡単な html ページを含むテキストファイル(example1.htmlという名前)を作成:

‹html› 
‹body› 
‹p›Enter numbers in the two boxes, and press the "Calculate Sum" button:‹/p› 
‹form action="/cgi-bin/example1.exe" method="post"› 
‹p›First number: ‹input type="text" name="number1" id="num1" value="" size="10" /› ‹/p› 
‹p›Second number: ‹input type="text" name="number2" id="num2" value="" size="10" /› ‹/p› 
‹input type="submit" value=" Calculate Sum" /› 
‹/form› 
‹/body› 
‹/html› 

このページは、開始の ‹form› タグと終わりの‹/form› タグの間にhtml フォームを含みます。 フォームは"number1" と "number2"という名前の2つの入力テキストボックスとsubmit ボタンを含みます。このボタンが押されると、2つのボックスの内容がwebサーバのcgi-bin ディレクトリに存在するFortran 実行ファイル example1.exe に送信されます。‹p› タグと ‹/p› タグは段落の最初と最後につけます。この例では、テキストと2つの入力ボックスが画面の異なる行に確実に表示されるよう使用されています。入力ボックスは固有のid 値("num1" と "num2")を持ちます。それらは2つめの例でのみ使用されています。web フォーム及びhtml マークアップ言語の使用は多くの書籍で詳しく説明されており、 http://www.w3schools.com/tags/default.asp でも説明されています。

Common Gateway Interface 標準 (CGI) はFortran 実行ファイルとweb サーバ間のやりとりに使用されています。またhtmlフォームで入力されたデータは‹form› タグで特定の"post"メソッドを使用してFortran 実行ファイルに送信されます。データはwebサーバソフトウェア(この場合Apache)によってプログラムで利用できるようになります。これにより標準入力(unit 5、もしくは*)から読み込むことができます。同様に、プログラムからの標準出力(unit 6、もしくは *) への出力はユーザのブラウザウィンドウに表示されます。

フォームからのデータは、連続した"name=value" の組み合わせで構成されアンパサンド記号で分けられたテキスト文字列としてFortran実行ファイルに送信されます。そのため、もしユーザが最初の数字に1.5、2番目の数字に2.9を入力した場合、Fortran実行ファイルに送られるテキスト文字列は次のようになります:"number1=1.5&number2=2.9"。"post"メソッドで送信されるデータ列の最も長い長さはweb サーバの設定によって決まるように思われますが、通常非常に長く限界がないように思われます。

いくつかの文字は実行ファイルに送信される前のエンコードされたURL です。例えば、ユーザによりテキストボックスに入力された空白は送信される文字列では"+"として現れます。ユーザが入力した"+" は"%2B"として現れます。 そのまま送信される文字は、 *、-、_、a-z、A-Z、0-9 と小数点 "."です。 エンコードされた文字は文字列から値を読み込もうとする前に元の値に戻す必要があります(Fortran プログラムの中で)。簡単にするために、私たちは入力のエラーをトラップするために必要とされるコードと同様にサンプルプログラムからこれを除外しました。nAG は、html フォームデータがFortran 文字配列に読み込まれるFortran CGI インターフェースライブラリモジュールを作成しました。 (http://www.nag.com/nagware/Examples/cgi.f90)。

html ページからデータを読むためのサンプルプログラムを以下に示します。その後に、番号のついたそれぞれのセクションでコードの簡単な説明をしています。

 
     program example1 
     implicit none 
C  ..(1) Declarations 
C    ---------------- 
     character (len=100) :: LineIn = ' ' 
     character (len=10) :: string = ' ' 
     integer :: lenLineIn, startValue, endValue, ichar 
     real :: sum_of_numbers, var1, var2 
C    ..(2) Determine the length of the data string 
C    that is to be read in the next section. 
C    ------------------------------------------ 
     Call Get_Environment_Variable('CONTENT_LENGTH', string) 
     READ(string,*) lenLineIn 
C    ..(3) Read the data from the html form into the 
C    variable LineIn, a single character at a time. 
C    ---------------------------------------------- 
     DO ichar=1,lenLineIn 
     READ(*,ADVANCE='NO',FMT='(A)') LineIn(ichar:ichar) 
     ENDDO 

C    ..(4a) Locate and read the value of 'number1' from LineIn
C    ------------------------------------------------------ 
     startValue = INDEX(LineIn,'number1=') + 8 
     endValue = startValue + INDEX(LineIn(startValue:),'&') - 2 
     READ(LineIn(startValue:endValue),*) var1 
C    ..(4b) Locate and read the value of 'number2' from LineIn 
C    ------------------------------------------------------ 
     startValue = INDEX(LineIn,'number2=') + 8 
     READ(LineIn(startValue:),*) var2 
     sum_of_numbers = var1 + var2 ! add the numbers together 
C    ..(5) Send a header to the browser, identifying 
C    the type of information that will be sent. 
C    --------------------------------------------- 
     WRITE(*,'(''Content-type: text/html'',//)') ! remove for the second example 
C    ..(6) Write the html results page to the browser, 
C    with the sum of the two numbers. 
C    ----------------------------------------------- 
     WRITE(*,'(1X,''‹html›‹body›'')') ! remove for the second example 
     WRITE(*,100) sum_of_numbers 
     WRITE(*,'(1X,''‹/html›‹/body›'')') ! remove for the second example 
     STOP 
100  FORMAT(1X, ! change "1X" to "/1X" for the second example 
    > '‹p›Success! The sum of the two numbers is given below:‹/p›', 
    > E12.4) 

     END 

(1)文字変数 LineIn (web ページから入力されたデータを保持するため)とstring (CONTENT_LENGTH 環境変数の値を受け取るため)があります。整数変数はLineIn の文字の長さを示すlenLineIn 、テキスト文字列の"number1"の値の最初の文字と最後の文字のインデックス番号である startValue とendValue 、そして"number2"の最初の文字のインデックス番号です。実変数var1 と var2 はnumber1 とnumber2の値が与えられる変数です。そしてsum_of_numbers が結果として出力されるvar1 と var2 の合計です。

(2) web ページから送られるデータの文字数は環境変数 CONTENT_LENGTHで提供されます。 CONTENT_LENGTHの値それ自体は文字列です。内部のサブルーチンGet_Environment_Variableを用いてローカルな文字変数string にセットされます。最後に、READ 文とlist-directedフォーマットを使用してstring から整数値 lenLineIn を読み込みます。

ルーチン Get_Environment_Variable はnAGコンパイラが提供するFortran 拡張機能です。Intel と Lahey/Fujitsu コンパイラ(おそらく他のコンパイラも)は代わりに同様の機能をもつルーチン getenvを提供しています。 (このルーチンも nAG Fortran のモジュールf90_unix_env にあり、Get_Environment_Variable の代わりに使用できます。)

(3) ここではhtml フォームからのデータは、標準入力から1度に1文字ずつ読み込まれています。これはプログラムの中で最もコンパイラに依存する部分のように思われます。サンプルプログラムの READ 文はIntel や Lahey/Fujitsu コンパイラでは機能しません。これらのコンパイラの場合は、以下で置き換える必要があります: iErr = getC(LineIn(ichar:ichar)) ここでiErr は上記の他の整数変数とともに宣言される必要のある整数変数です。それは文字が読み込まれる都度 getC からエラーコードを受け取ります(ゼロ値は成功を意味します)。

(4) "number1"と"number2"という名前のテキストボックスの値はLineIn から実変数 var1 と var2 へ読み込まれ、加算されます。

(5) 新しいページとしてユーザのブラウザに結果を書き出す前に、送信される出力の種類を特定するため空白行に続けてヘッダーを書くことが必要です。このヘッダーは一度書くだけです。プリンターへの WRITE 文は通常改行制御のために使用されますが、他の出力装置に対して定義される標準は特にありません。またコンパイラによって動きが異なります。nAG Fortran を使用する場合、ヘッダー出力のための正しい命令文は以下です:

   WRITE(*,'(''Content-type: text/html'',//)') 

Intel や Lahey/Fujitsu コンパイラでは、最初のスペースが必要です:

   WRITE(*,'('' Content-type: text/html'',//)') 

もしこのヘッダーが正しく書かれていない場合、ブラウザは曖昧なエラーメッセージを表示するか、もしくは表示するコンテンツではなくダウンロードするコンテンツとしてFortran プログラムの結果を処理する可能性があります。

(6) 最後に、計算結果はhtmlページとして標準出力に書き出されます。これは一つの WRITE 文で実行できますが、わかりやすくするために3つに分けました。

最初の行は‹html› タグと‹body› タグから始まります。この時点では出力の書式設定をする2つの選択肢があります。もしFortranプログラムが画面あるいはプリンターへの出力用に既にフォーマット済みの大量の出力を行う場合、 ‹pre› タグと ‹/pre› タグ("pre-formatted"用)内に書くことによりそのまま使用できます。 出力はプログラムによりプリンターかビデオ画面に書かれる場合と同様に、書式化されユーザのブラウザにCourier (monospace)のフォントで表示されます。もう一つの方法として、ユーザはページを必要に応じてデザインする(フォント、レイアウトや色に関して)フォーマット文に他の html マークアップ言語を含めることができます。この例では後者、すなわち ‹p › タグと ‹/p ›タグ(パラグラフ)の間にテキストを入れるということを行っています。これによりプログラムが計算した数の合計がテキストの下に現れます。

最後に、‹/body› と ‹/html› タグでhmtlページを締めくくっています。

例 2

多くの計算では解答が1行だけである可能性が高いです。実用的な理由によりそれが望ましいとされています。また、ページの他のコンテンツを変えずに問題が送信されたページと同じページに現れるFortran プログラムの計算結果については、優れたユーザインタフェースを実現していると思われます。液体有機化合物の密度の推定量において私たちのwebサイトでこれを実践しました。 (http://www.aim.env.uea.ac.uk/aim/density/density.php)

どのようにこれは行われるでしょう?最初の例とほとんど変わらないFortranアプリケーションを使用する一方で、私たちは問題を送信し解答を受け取るのにAjax (Asynchronous JavaScript and XML) を使用します。Ajax メソッドが非常に広く使用されていますが、ブラウザによって実装の違いがあります。幸いにも、プロトタイプJavaScript フレームワークを使用することによって複雑にならないようにすることができます。このフレームワークは、内部でブラウザの依存性に対処しあらゆるブラウザからFortran実行ファイルを呼び出すことができるシンプルな機能を提供しています。プロトタイプソースコード(無料)はhttp://www.prototypejs.org/download からテキストファイルprototype.js としてダウンロードすることができます。 ユーザのブラウザへダウンロードできるよう、サンプルのhtmlページにこのコードが含まれています。そしてページをロードすると全ての機能を利用できます。

新しいhtml サンプルページ example2.html が以下に示されています。html コメントは‹!-- --› タグの間にエンコードされています。また JavaScript では "//" に続くテキストはコメントとして扱われます。(Fortranの "!"と同様)

‹html› 
‹head›

‹!-- Javascript library --› 
‹script src="prototype.js" type="text/javascript"›‹/script› 
‹!-- define a local function --› 
‹script type="text/javascript"› 
function ajaxPost() { 
// Post data from the web page to the cgi-bin program using Ajax, 
// and write the results to the named ‹div› on the same page. 
// 
// The first argument of Ajax.Updater is the name of the container 
// (a ‹div›) where the output obtained from the url (the second 
// argument) will go. In the {} are a series of options: 
// 
// method: 'post', ..send information to the url using Post 
// parameters: {..}, ..the posted data 
// onCreate: a function() {..}, not used 
// onError: a function() {..}, writes a simple message 
// onComplete: a function() {..}, not used 
// 
new Ajax.Updater("results_div", "/cgi-bin/example2.exe", 
                 {method: 'post', 
                  parameters: {number1: $F('num1'), 
                               number2: $F('num2')}, 
                  onCreate: function() { 
                            // do nothing.. 
                            }, 
                  onError: function() { 
                            // show an error message 
                           var errMessage = 'An error occurred before ' + 
                           'the Fortran program was called. Please try again.'; 
                           $('results_div').innerHTML = errMessage; 
                           }, 
                           
                  onComplete: function() { 
                              // do nothing... 
                              } 
                              
                  } //end Ajax.Updater options 
                  
                ); //end Ajax.Updater function 
} //end ajaxPost function 

‹/script› 

‹/head›
 
‹body›
 
‹p›Enter numbers in the two boxes, and press "Calculate Sum":‹/p› 

‹form›
‹p›First number: ‹input type="text" name="number1" id="num1" value="" size="10" /› ‹/p› 
‹p›Second number: ‹input type="text" name="number2" id="num2" value="" size="10" /› ‹/p› 
‹p›Results will appear in the box. Click here: 
‹input type="button" value=" Calculate Sum " onclick="ajaxPost();" /› 
‹/p›

‹/form›
 
‹div id="results_div" style="border-style:solid; border-width:2px; 
border-color:black; height:5em; padding:1em;"› ‹/div›

‹/body› 
‹/html› 

まず、example2.htmlの‹body›タグ と‹/body› タグの間にある最後のセクションをご覧下さい。 初めのサンプルとは2つの違いがあります。一つめは、‹form› タグが "action=" 属性をもたない点です。2つめは、ページ上のボタンがtype="button" (type="submit"ではなく) であり、新しい属性onclick="ajaxPost();"があることです。 これは文字通りの意味があります:ユーザがマウスを使用してボタンをクリックすると、ヘッダーで定義された JavaScript 関数 ajaxPost()が呼び出されます。

"results_div"というid を与えた‹div› 要素は、Fortran プログラムによる計算結果が書かれる場所です。固定の高さを指定し、ブラウザ画面でわかりやすくするよう黒のボーダーを指定しています。

example2.htmlの上の部分では、新しいタグ: ‹head› があります。この要素内では2つの処理を行います:1つめは、一組の ‹script› タグを使用してprototype.js ソースコードファイルをロードします。なお、src="prototype.js" 属性でパスは指定しません。これはファイルがexample2.htmlと同じディレクトリに存在する必要があるということを意味します。

2つめは、別の一組の‹script›タグ内で、'Calculate Sum'ボタンが押されたときに呼び出される JavaScript 関数 ajaxPost() を定義します。この関数は一つの処理だけ行います:これはプロトタイプ関数 ajaxUpdaterを呼び出します。(詳細は、プロトタイプ webサイトを参照) この関数は以下の4つの主要な引数を持ちます:

  1. Fortran プログラムの結果が書かれるhtml ‹div›要素のid 値、
  2. 呼び出されるURL(ここでは cgi-bin プログラム)、
  3. データを形成するメソッド(post)(ユーザがページで入力した数がcgi-bin プログラムに受け渡されます)、
  4. 送信されるパラメータ(name:value の組み合わせで表されます)

number1 と number2 はページ上の入力テキストボックスの名前です。"$F" はプロトタイプ関数(prototype.jsで定義される)です。式 "$F('num1');" は関数が'num1'と等しいidを持つhtml要素の値を返すことを意味します。言い換えると、関数はユーザが最初のテキストボックスに入力した値を受け取り、パラメータ"number1"と関連づけます。$F 関数は2つめのテキストボックスについて同様に呼び出されます。 最終的に、fortran 実行ファイルに渡されるテキスト文字列が最初の例の文字列と同一になります。

残りの AjaxUpdater の引数は関数の作成時や完了時の他の処理(この場合はなし)を行います。そしてここでは述べていない単純なエラーメッセージを処理します。

Fortran プログラムはこの2番目の例で使用される変更を必要としますか? 変更は2つあります:一つめは、コードのパート(6)のヘッダー行とパート (7)の最初と最後のWRITE 文が不要で、削除可能な点です。これはプログラムが新規ではなく既存のhtmlページに書いているからです。 2番目は、出力が空白行から始まる必要がある点です。そのため、残りのWRITE 文は "1X" の代わりに "/1X,"で始まる必要があります。

その他の考慮点

本稿では、webページからのFortranプログラムの呼び出しが単純なコードのみ必要であることを示しました。以下に現実の世界のアプリケーションにとって重要で役にたつ多くの問題を簡単に要約しています。本稿の最後で、その他のFortran/web アプリケーションについて記述しているサイトへのリンクを掲載しています。

(1) PCの開発環境。5つの異なるFortran cgi-bin 実行ファイルを含む私たちのwebサイトは最初にPCで開発されてテストが行われ、その後公にアクセス可能なwebサーバに転送されます。私たちは無料のwindows版Xampplite パッケージを使用しています。それはPHP (スクリプト言語)や MySQL(データベース)同様に Apache web サーバソフトウェアを含んでいます。Xampplite は設定や使用するのに簡単ですが、初心者の場合はApache がhtmlファイルやcgi-bin プログラムを置いてあるディレクトリを認識するよう設定されているか確認するためにIT support を受けることをお勧めします。これは重要で、httpd.conf テキストファイルの設定やエントリの確認も必要です。

PCの設定では、ディレクトリ e:\www\projects は全てのhtml ファイルが置かれている場所で、httpd.conf ファイルの中にエイリアスが与えられています(Alias /projects "e:/www/projects" という文で)。アドレス"http://localhost/projects/example1.html" はopensXampplite 実行中にe:\www\projects フォルダーのexample1.html ファイルを開きます。

example1.htmlでは、 Fortran実行ファイルの場所が "/cgi-bin/example1.exe"で与えられています。 PC上で、 ファイル example1.exe は実際にはディレクトリ c:\xampplite\cgi-binに存在し、httpd.conf ファイルは以下の文を含みます: ScriptAlias /cgi-bin/ "/xampplite/cgi-bin/", また‹Directory "/xampplite/cgi-bin"› ‹/Directory›タグ内にこのディレクトリの一連のパーミッションも含まれています。詳細は Apache documentation を参照ください。

Firefox は多くの無料のアドオンが利用できるため開発作業で最も広く使用されているブラウザです。これらのうち最も便利なのはJavaScript エラーを検知するFirebugと、html 妥当性チェック(http://validator.w3.orgへのリンクを介して) を含む多くのツールを提供しているWeb Developer です。多くのブラウザで動作することを確認するためにコードはテストされる必要があります。ほとんどのユーザは大学の研究者や学生です。そしてFirefox と Internet Explorer は、サイトのアクセスでは主要なブラウザ(それぞれユーザのうち49% と 45%が使用)で、Opera(2%)や Safari(2.5%)がそれに続いています。

(2) ユーザ入力の妥当性チェック。Fortran コードでエラートラップの書き込みに代わる方法は、不正なユーザ入力を見つけるJavaScript を使用することです。これはほとんどのJavaScript テキストブックに記述されており、以下の方法で動作します: "Submit" ボタンが押されると、JavaScript 関数が最初にフォームデータの妥当性をチェックするよう、html ページはコーディングされます。もしエラーが見つかった場合、関数はユーザのブラウザにメッセージを表示し、cgi-bin プログラムは呼び出されません。もしエラーがない場合は、関数は'success'値を返し、データが通常どおりFortran実行ファイルに受け渡されます。

(3) Fortran コードの実行エラー。Fortran cgi-bin プログラムがトレースオプションとデバッグオプション付きでコンパイルされる場合、プログラムがhtmlページから呼び出される際に実行エラーを表示するメッセージがユーザの画面ではなくwebサーバのエラーログに現れる可能性が高いです。もしサーバソフトウェアがApacheである場合、このログはapache\logs サブディレクトリにあるerror.log という名前のテキストファイルです。

(4) 結果のプロットグラフ。.gif や.png ファイルとしてプロットファイルを出力できるGINOなどのFortranライブラリを使用することによって、計算結果をプロットするために図形をwebサイトに組み込むことができます。以下の方法で、私たちのwebサイトでこれを実施しました。(例 http://www.aim.env.uea.ac.uk/aim/model2/mod2t.php) 最初に、ユーザの入力データを計算するFortran プログラムが計算結果を一時ファイルに書き込みます。そしてどんなグラフをプロットするか(例:x や y 変数の選択、 座標軸の範囲など)ユーザが選択できる html ページをブラウザに出力します。次に、ユーザがhtmlフォームでこれらの選択をし"Submit" ボタンを押すことにより情報が2つめのFortran cgi-bin 実行ファイルに送られます。まず最初にこれは一時ファイルからデータを読み、サーバ上に.gif あるいは .png ファイルとしてグラフを作成します。次にhmtlフレームをユーザのブラウザに出力し、ファイルを参照するページが自動的に表示されます。

(4) web サイトの使用量を記録。利用ログは計算が実行されたとき(Date_and_Time 内部ルーチンを使用)に計算の種類を記録するfortranプログラムによって作成できます。また環境変数 REMOTE_HOSTとREMOTE_ADDRESS を読む込むことによって計算を要求したホストマシンの情報を得てログを作成できます。Webサイトの使用量はGoogle Analytics サービスを使用して詳細にトラッキングできます。これは無料で、JavaScript の数行をサイトのそれぞれの html ページに追加するだけで簡単に実装されます。

その他の例

Native Fortran-77 CGI Interface: http://www.nber.org/sys-admin/fortran-cgi/
Doppler Shift (POSTメソッドの例): http://www.fcc.gov/mb/audio/bickel/doppler-shift.html
COLORIT (GETメソッドの例): http://www.fcc.gov/mb/audio/bickel/colorit.html

関連情報
MENU
© 日本ニューメリカルアルゴリズムズグループ株式会社 2025
Privacy Policy  /  Trademarks