このライブラリ libgm に含まれる各ルーチンのソースは,
いずれもC言語で記述されており,そのプロトタイプと機能概要を以下に示す.
ルーチン名の末尾が '_
' のものは,FORTRAN言語用である.
FORTRAN言語からのより詳細な利用法については,使用説明書HTML文書を
用意してあり,その目次ページ libf.html から
アクセスできる.
C言語用のルーチンは,大部分が整数値を返す関数となっており,関数値を返すこと
自体が目的となっている場合を除くと,返される値は,正常に動作終了したとき 0,プ
ログラムの続行が無意味と判断されるエラーのとき -1,軽微なエラーの場合に 正の値
となっている.
(参考) 利用を容易にするための .cshrcなどでの設定(LINUXでの例) alias cc 'gcc \!* -L/home/SHARE/lib -lgm -lm' alias f77 'g77 \!* -L/home/SHARE/lib -lgm'
PSPLOT は,PostScriptプリンタへの線画出力を行うためのルーチン群
である.
線画を描く基本機能として,C言語用の関数群(psopn, plots, plote, pscls,
plot, clspath, scisor, factor, penatr, newpen, qpatr, qpsfp, qapos, where,
wrect, wcirc
)があり,これらの関数と FORTRAN言語とのインタフェイスを
はかる基本ルーチン群(psopn_, plots_, plote_, pscls_, plot_, scisor_,
factor_, penatr_, newpen_, where_, wrect_, wpolyg_, wcirc_
)を
用意してある.
int psopn(char *pfile, char *sheet); void psopn_(char *pfile, char *sheet); 使用用紙(sheet)を指定し,PostScript出力ファイル(pfile)をオープンする. int plots(double xo, double yo); void plots_(float *xo, float *yo); 頁の開始を宣言し,初期原点(xo,yo)を指定する. int plote(void); void plote_(void); 頁の終了を宣言する. int pscls(void); void pscls_(void); PostScript出力ファイルをクローズする. int plot(double xp, double yp, int md); void plot_(float *xp, float *yp, int *md); モード(md)に従って,ペンを指定位置(xp,yp)へ移動する. md が ±2 ならペン ダウンで,その他のときペンアップで移動し,md<0 のとき 移動先を原点に再設 定する. int clspath(int join); 連続するペンダウンでの線描画の始点まで線を引き,閉じた多角形を構成する. 引数(join)は折点の角の処理方法を指定し,0 を与えると Miter join,2 を与え ると Bevel join,それ以外の場合は Round join になる. int scisor(double xlm, double ylm, double wlm, double hlm); void scisor_(float *xlm, float *ylm, float *wlm, float *hlm); 描画の有効範囲を,基点座標(xlm,ylm),横幅(wlm>0.),高さ(hlm>0.)で指定す る.この範囲の外側の描画要求は,シザリングされる(wrect, wcirc を除く). int factor(double fac); void factor_(float *fac); 使用座標系の拡大率(fac)を指定する.fac=1. のとき,長さの単位が cm となる. int penatr(int jpen, int icol, int ityp, double thick); void penatr_(int *jpen, int *icol, int *ityp, float *thick); 指定のペン番号(jpen)に対する色(icol)・線種(ityp)・線幅(thick)を設定する. int newpen(int npen); void newpen_(int *npen); 描画に使用するペン番号(npen)を指定する. int qpatr(int mpen, int *lcol, int *ltyp, double *wthick); 現在のペンをペンアップ状態とし,ペン番号mpen に設定されている色(lcol)・線種 (ltyp)・線幅(wthick)を得る.また,現在のペン番号を関数値とする. int qpsfp(FILE **fps); int qapos(int *ixp, int *iyp); PS出力ファイルのファイルポインタ(fps)/ペンの現絶対座標位置(ixp,iyp)を得る. int where(double *wx, double *wy, double *wfac); void where_(float *wx, float *wy, float *wfac); 現在のペンの位置座標(wx,wy),座標系拡大率(wfac)を得る. int wrect(double xl, double yl, double wide, double high); void wrect_(float *xl, float *yl, float *wide, float *high); 基点座標(xl,yl),横幅(wide),高さ(high)を指定して,矩形を描く. void wpolyg_(float *xm, float *ym, int *npt, int *inc); 頂点座標を配列(xm,ym)で指定して,頂点数が npt(>2) の多角形を描く. (inc は配列から座標値を取り出す間隔を指定する.) int wcirc(double xc, double yc, double radius, double ang1, double ang2); void wcirc_(float *xc, float *yc, float *radius, float *ang1, float *ang2); 中心座標(xc,yc),半径(radius),始・終点の角度(ang1,ang2)を指定して,円(弧) を描く.
PSPAINT は,PostScriptプリンタへの面描画出力を行うためのルーチン群
であり,PSPLOTの配下で動作する.C言語用の関数群として,dftone, dfrgbt,
dfcols, dresol, dframe, paintm, paintw
及び dfpcol, paintc,
paintr, paintp
があり,FORTRAN言語からも同じ名称でコールできるように
インタフェイスルーチンを用意してある.
int dftone(int nlevel, int mtone[], int ktnlo, int ktnhi, int ktnvd); void dftone_(int *nlevel, int mtone[], int *ktnlo, int *ktnhi, int *ktnvd); paintm ルーチンによる2次元配列データ表示をモノクロ表示に指定し,その濃淡階 調を,階調数(nlevel),階調数に対応した濃淡レベルを指定する配列(mtone),下限 以下の値/上限以上の値/未定義データ領域 に対応させる濃淡レベル(ktnlo/ktnhi/ ktnvd)で指定する. int dfcols(int nclev, double fh, double fd, int kcnv); void dfcols_(int *nclev, float *fh, float *fd, int *kcnv); paintm ルーチンによる2次元配列データ表示をカラー表示に指定し,paintm/paintw ルーチンが使用するカラー階調テーブルを,階調数(nclev),色相/暗度の変化範囲割 合(fh/fd),未定義データ領域のカラーコード(kcnv)の指定から自動生成する. int dfrgbt(int nclev, int mrgb[], int kclo, int kchi, int kcnv); void dfrgbt_(int *nclev, int mrgb[], int *kclo, int *kchi, int *kcnv); paintm ルーチンによる2次元配列データ表示をカラー表示に指定し,そのカラー階 調を,階調数(nclev),階調数に対応したカラーコードを指定する配列(mrgb),下限 以下の値/上限以上の値/未定義データ領域 に対応させるカラーコード(kclo/kchi/ kcnv)で指定する. int dresol(int nras); void dresol_(int *nras); paintm/paintw ルーチンによる2次元配列データ表示のラスター化分解能の既定値を 25.4mm * (nras / 600) に変更する. int dframe(double xo, double yo, double wd, double hi, int imax, int jmax); void dframe_(float *xo, float *yo, float *wd, float *hi, int *imax, int *jmax); paintm/paintw ルーチンによる2次元配列データ表示を,指定の基準(左下)座標(xo, yo),幅(wd),高さ(hi),配列整合寸法(imax,jmax) で行うよう設定する. int dframo(double x0, double y0, double x1, double y1, double x2, double y2, int imax, int jmax); void dframo_(float *x0, float *y0, float *x1, float *y1, float *x2, float *y2, int *imax, int *jmax); paintm/paintw ルーチンによる2次元配列データ表示を,3頂点 (x0,y0), (x1,y1), (x2,y2) と 第4頂点 (x1+x2-x0, y1+y2-y0) で囲まれる 一般に傾斜した斜交格子に 設定する(俯瞰図表現).配列整合寸法は(imax,jmax) に指定する. int paintm(float *v, float vlo, float vhi, float vnvd); void paintm_(float *v, float *vlo, float *vhi, float *vnvd); 2次元配列(v)で格子点上に与えられたデータについて,下限/上限/未定義データの 値(vlo/vhi/vnvd)を指定して,データの線形補間によるラスター化を行い,濃淡表現 またはカラー表現で図化する. int paintw(float *v, float vlo, float vhi, float vnvd, float *u); void paintw_(float *v, float *vlo, float *vhi, float *vnvd, float *u); 2次元配列(v)で格子点上に与えられたデータについて,下限/上限/未定義データの値 (vlo/vhi/vnvd)を指定したデータのカラー表現を,明度値が2次元配列(u)で指定され る陰影とともに図化する. int dfpcol(int key, int mcol); void dfpcol_(int *key, int *mcol); paintc/paintr/paintp ルーチンで 円形/矩形/多角形 のぬりつぶしに用いる濃淡レ ベルまたはカラーを指定する.key=0 のとき 0〜255 の濃淡レベル値,key=1 のと き 0〜16777215 のカラーコード値,key=2 のとき 現用の階調レベル番号 を mclo に指定する. int paintc(double xc, double yc, double radius); void paintc_(float *xc, float *yc, float *radius); 中心座標(xc,yc),半径(radius) を指定して,円を塗りつぶす. int paintr(double xorg, double yorg, double wide, double high); void paintr_(float *xorg, float *yorg, float *wide, float *high); 基点座標(xorg,yorg),横幅(wide),高さ(high) を指定して,矩形を塗りつぶす. int paintp(float xa[], float ya[], int npt, int inc); void paintp_(float xa[], float ya[], int *npt, int *inc); 頂点座標(xa,ya),頂点数(npt),座標値取出し間隔(inc) による多角形について, non-zero winding rule による塗りつぶしを行う.
int lstyle(char *fnt, double high, double ang, int tcol, int bcol); void lstyle_(char fnt[3], float *high, float *ang, int *tcol, int *bcol); ptext ルーチンで文字列を描く際に使用する字体のフォント(fnt)・サイズ(high)・ 方向角(ang)・色(tcol)および背景色(bcol)を指定する. int ptext(char *text, int ltxt, double xp, double yp, int kp); void ptext_(char *text, int *ltxt, float *xp, float *yp, int *kp); lstyle で指定された字体で,(xp,yp) の位置に長さ ltxt の文字列 text を描く. kp=0 なら始点(文字列の左下),kp=1 なら終点(文字列の右下),kp=2 なら文字列 中央 が指定位置となるように位置決めされる. int pcstr(double xp, double yp, double chi, char *text, double ang, int ns); void pcstr_(float *xp, float *yp, float *chi, char *text, float *ang, int *ns); 長さ ns の文字列 text を,実文字高さ chi の Courierフォントで,(xp,yp) の位置 を始点に ang の角度方向で描く. int pmark(int mark, double xc, double yc, double size, double thick, int mcol); void pmark_(int *mark, float *xc, float *yc, float *sz, float *th, int *mcol); マークの種別(mark)・マークの中心位置(xc,yc)・マークの大きさ(size)・マークを描 く線の幅(thick)・マークの色(mcol)を指定して,マークの作画を行う.
int conts(double xorg, double yorg, double wide, double high, int imax, int jmax, double csize); void conts_(float *xorg, float *yorg, float *wide, float *high, int *imax, int *jmax, float *csize); contx ルーチンによる2次元配列データのコンター図化を,指定の基準(左下)座標 (xorg,yorg),幅(wide),高さ(high),配列整合寸法(imax,jmax),数値表示文字サイ ズ(csize) で行うよう設定する. int contso(double x0, double y0, double x1, double y1, double x2, double y2, int imax, int jmax); void contso_(float *x0, float *y0, float *x1, float *y1, float *x2, float *y2, int *imax, int *jmax); contx ルーチンによる2次元配列データのコンター図化を,3頂点 (x0,y0), (x1,y1), (x2,y2) と 第4頂点 (x1+x2-x0, y1+y2-y0) で囲まれる 一般に傾斜した斜交格子に 設定する(俯瞰図表現).配列整合寸法は(imax,jmax)に指定し,コンター値の記入は 行わない. int contx(float *v, float undef, int istep, int lcapt, int lml, int lmh, int kln); void contx_(float *v, float *undef, int *istep, int *lcapt, int *lml, int *lmh, int *kln); 2次元配列(v)で格子点上に与えられたデータ(未定義データの値を undef とする) について,下限値(lml)・上限値(lmh)の範囲のコンター図を実線・破線・点線または 1点鎖線(kln による指定)で描く.コンターは主曲線(間隔 istep)と計曲線(主曲線の lcapt 本目ごと)からなり,コンターの密な部分は計曲線のみを描き,計曲線の両端に (閉曲線となる場合は1ヶ所に)コンター値を記入する.
void rshore(int m, int is, int in, int kw, int ke); void rshore_(int *m, int *is, int *in, int *kw, int *ke); pshore ルーチンで海岸線等を図化する緯度範囲 (is〜in)・経度範囲 (kw〜ke) [分単 位] と測地系(m=0 なら旧東京測地系,m=1 なら世界測地系)の選択を行う. void pshore(double xorg, double yorg, int mpen, double scl, void (*conv)(float *alat, float *alon, float *xe, float *yn)); void pshore_(float *xorg, float *yorg, int *mpen, float *scl, void (*conv)(float *alat, float *alon, float *xe, float *yn)); rshore ルーチンによる指定に基づき,大縮尺図(1/100万以上)用の海岸線・湖沼河 川・都府県境の作図を行う. void wshore(double xorg, double yorg, int mpen, double scl, void (*conv)(float *alat, float *alon, float *xe, float *yn)); void wshore_(float *xorg, float *yorg, int *mpen, float *scl, void (*conv)(float *alat, float *alon, float *xe, float *yn)); 小縮尺図(1/500万以下)作成を想定した海岸線と湖沼河川の描画を行う. conv は,描画の図法を規定する外部手続き名であり,それによる図法展開の原点(xe =yn=0.)を 図上の (xorg,yorg) に位置させ,展開座標値の scl を 図上の 1cm の 長さに縮尺する.mpen は,10進3桁以下の数値であり,10進での各桁が,海岸線(1の 位)・湖沼河川(10の位)・都府県境(100の位) を描画するときに用いるペン番号に割り 当てられ,0 が割り当てられたものは線を描かない. (ペン番号については,PSPLOTの説明を参照.)
int chtype(double ang, double slope, double high, double ratio); void chtype_(float *ang, float *slope, float *high, float *ratio); pchar ルーチンで描く文字の 方向角(ang)・傾き(slope)・高さ(high)・縦横比倍率 (ratio) を与える.(ratio=1 のとき,文字間隔は高さの 6/7 倍となる.) int p1char(char c); 文字 c を,ペンの現在位置に,chtype ルーチンで設定されたストロークテーブルに よる文字で描く. int pchars(char *bcd); 文字列 bcd を,ペンの現在位置に,chtype ルーチンで設定されたストロークテーブ ルによる文字で描く. void pchar_(char *s, int *nc, float *xs, float *ys, int *kk); 文字数 nc の文字列 s を,chtype ルーチンで設定されたストロークテーブルによる 文字で描く.kk≠0 のとき (xs,ys) を始点とするが,kk=0 のときペンの現在位置が 始点となる int psmset(int ksms); ストロークテーブルによる文字列描画のモードを ksms にする.ksms=0 が ノーマル モード,ksms=1 が 下つきモード,ksms=2 が 上つきモード である. void pnorm_(void); ストロークテーブルによる文字列描画をノーマルモードにする. void psubsc_(void); ストロークテーブルによる文字列描画を下つきモードにする. void psupsc_(void); ストロークテーブルによる文字列描画を上つきモードにする. int pscdef(char csb, char csp); void pshift_(char cs[2]); ストロークテーブルによる文字列描画に際しシフトコードとみなす2文字(下つきシフ トコード csb/cs[0],上つきシフトコード csp/cs[1] の順)を指定する.下(上)つき シフトコードと指定された文字は,上(下)つきモード中を除いて文字は描かれず,描 く文字のモードをノーマルから下(上)つきへ,下(上)つきからノーマルへ変更する機 能を持つ. void gsymbl_(float *xs, float *ys, float *high, char *s, float *ang, int *nc); chtype ルーチンによる設定を,文字方向角 ang,傾き slope=0.,文字高さ high, 縦横比倍率 ratio=1. に再設定した上で,(xs,ys) を始点とし,文字数 nc の文字列 s をストロークテーブルによる文字で描く. int pcsymb(int ics, double size, double ang); ics 番のストロークテーブルによるセンターシンボルを,大きさ size,回転角 ang で,ペンの現在位置に描く. void csymbl_(float *xs, float *ys, float *sz, int *ics, float *ang, int *mp); モード(mp)に従ってペンを現在位置から (xs,ys) まで移動し,大きさ sz の ics 番 のストロークテーブルによるセンターシンボルを,回転角 ang で描く. int symbol(double xp, double yp, double high, char *text, double ang, int nc); void symbol_(float *xp, float *yp, float *high, char *text, float *ang, int *nc); (xp,yp) を始点とし,文字間隔=文字高さ=high,文字方向角 ang で,文字数 nc の 文字列 text を,ストロークテーブルによる文字で描く. int number(double xp, double yp, double high, double fv, double ang, int ndec); void number_(float *xp, float *yp, float *high, float *fv, float *ang, int *ndec); (xp,yp) を始点とし,文字間隔=文字高さ=high,文字方向角 ang で,数値 fv を 小数以下 ndec桁まで,ストロークテーブルによる文字で描く. int scale(float va[], double axlen, int npt, int inc); void scale_(float va[], float *axlen, int *npt, int *inc); 配列(va)で指定された座標データ群(個数 npt,データ取出し間隔 inc)を 指定の座 標軸長(axlen)におさめるのに必要な 軸目盛の初期値と増分値を求めて,配列中に格 納する. int line(float xa[], float ya[], int npt, int inc, int ltype, int mark); void line_(float xa[], float ya[], int *npt, int *inc, int *ltype, int *mark); 配列(xa,ya)に格納されている座標データ(個数 npt,データ取出し間隔 inc)を用い て,指定されたタイプ(ltype/mark)の折れ線・マークを作画する. int axis(double xp, double yp, char *text, int ltx, double axlen, double angle, double firstv, double deltav); void axis_(float *xp, float *yp, char *text, int *ltx, float *axlen, float *angle, float *firstv, float *deltav); (xp,yp) を始点とし,長さ axlen,方向角 angle の座標軸を描き,初期値 firstv, 1cmあたりの増分値 deltav の座標目盛と,文字列長 ltx の座標軸名称 text を記入 する.
int cvinit(int nca, double gi, double gk, double sp1, double sp2); void cvinit_(int *nca, float *gi, float *gk, float *sp1, float *sp2); void cvdinit_(int *nca, double *gi, double *gk, double *sp1, double *sp2); cviken/cvdiken または cvenik/cvdenik ルーチンで座標変換を行うため,図法番号と そのパラメータを指定する.現在,用意されている図法/座標系とその番号は,ベッ セル楕円体に対して次の通りであり,GRS楕円体では 200 を加算したものである. (図法番号=nca) (図法/座標系) 0 国土調査法に基づく平面直角座標[JTM座標](ガウスクルィーゲル図法) 1-60 UTM座標(ガウスクルィーゲル図法) 61 北極UPS座標(Universal Polar Stereographic Projection) 62 南極UPS座標( = 国際極心平射図法 ) 65 UTM座標と同様であるが非標準の中央経線を指定できる 70 メルカトール図法 71 ランベルト等角円錐図法(1基本緯線) 72 ランベルト等角円錐図法(2基本緯線) 100 ランベルト等積方位図法(楕円体と表面積の等しい球からの投影) 109 ランベルト等積方位図法(楕円体の長半径を半径とする球から投影) 199 緯経度の分単位の値をそのまま km 単位の北・東向き座標値とみなす UTM座標/UPS座標 以外の場合,座標原点(X=Y=0.)の緯度(gi)・経度(gk)を分単位 で指定し,2基本緯線タイプのランベルト等角円錐図法の場合はさらに,その2基本緯 線の緯度(sp1,sp2)を分単位で与える. int cviken(double fi, double fk, double *ye, double *xn); void cviken_(float *fi, float *fk, float *ye, float *xn); void cvdiken_(double *fi, double *fk, double *ye, double *xn); cvinit/cvdinit ルーチンで設定された図法/座標系において,緯度(fi)・経度(fk) [分単位] から 直角座標値(xn,ye) [km単位] への変換を行う. int cvenik(double ye, double xn, double *fi, double *fk); void cvenik_(float *ye, float *xn, float *fi, float *fk); void cvdenik_(double *ye, double *xn, double *fi, double *fk); cvinit/cvdinit ルーチンで設定された図法/座標系において,直角座標値(xn,ye) [km単位] から 緯度(fi)・経度(fk) [分単位] への変換を行う. void xyconv_(float *gi, float *gk, float *fi, float *fk, float *x, float *y); void nxycnv_(float *gi, float *gk, float *fi, float *fk, float *x, float *y); 座標原点の緯度(gi)・経度(gk)と計算点の緯度(fi)・経度(fk) [分単位] を与えて, 国土調査法に基づく平面直角座標の座標値(x,y) [km単位] を計算する.xyconv は 2002年3月以前の旧東京測地系,nxycnv は 2002年4月以降の「日本測地系2000」に基 づいた計算を行う. void utm_(int *nz, float *fi, float *fk, float *x, float *y); 緯度(fi)・経度(fk) [分単位] を与えて,指定のゾーン番号(nz)における UTM座標(x, y)の値 [km単位] を計算する.日本測地系2000 の場合 200 を加算した 201〜260 の 値で,そのゾーン番号を指定する. void ikconv_(float *gi, float *gk, float *x, float *y, float *fi, float *fk); void nikcnv_(float *gi, float *gk, float *x, float *y, float *fi, float *fk); xyconv/nxycnv ルーチンの逆変換(座標値 x,y から 緯度 fi, 経度 fk へ)を行う. void utmik_(int *nz, float *x, float *y, float *fi, float *fk); utm ルーチンの逆変換(座標値 x,y から 緯度 fi, 経度 fk へ)を行う.
void xw84t(double wlat, double wlon, double walt, double *tlat, double *tlon, double *talt); void xw84t_(float *wlat, float *wlon, float *walt, float *tlat, float *tlon, float *talt); void xw84td_(double *wlat, double *wlon, double *walt, double *tlat, double *tlon, double *talt); WGS84測地系(世界測地系)における緯度(wlat)・経度(wlon)・高度(walt)を与えて, 旧東京測地系における緯度(tlat)・経度(tlon)・高度(talt)を得る. 緯度・経度の単位は 分,高度の単位は m である. void xtw84(double tlat, double tlon, double talt, double *wlat, double *wlon, double *walt); void xtw84_(float *tlat, float *tlon, float *talt, float *wlat, float *wlon, float *walt); void xtw84d_(double *tlat, double *tlon, double *talt, double *wlat, double *wlon, double *walt); 旧東京測地系における緯度(tlat)・経度(tlon)・高度(talt)を与えて,WGS84測地系 (世界測地系)における緯度(wlat)・経度(wlon)・高度(walt)を得る. 緯度・経度の単位は 分,高度の単位は m である.
void field(double are, double aflat, double ara, int maxoda); IGRF計算のため,楕円体パラメータの赤道半径(are)・扁平率の逆数(aflat)・ガウス 係数基準球面半径(ara)・モデルの最大次数(maxoda) を与える. void tcoef(double agh[MxOD+1][MxOD+1], double aght[MxOD+1][MxOD+1], double atzero, int kexta, double aext[3]); IGRF計算のため,ガウス係数(agh),その経年変化率(aght),基準年(atzero),外部ソ ース項を含ませるか否かのフラグ(kexta),外部ソース項の係数(aext) を与える. void tyear(double ayear); IGRF計算のための計算年(ayear) を与える. void mfldg(double alat, double alon, double ahi, double *ax, double *ay, double *az, double *af); 楕円体上の緯度(alat)・経度(alon)・高度(ahi) を与えて,IGRFモデルの地心座標系 での3成分(ax,ay,az) と全磁力(af) を得る. void mfldc(double athe, double alon, double ar, double *ax, double *ay, double *az, double *af); 地心座標系での余緯度(athe)・経度(alon)・地心距離(ar) を与えて,IGRFモデルの地 心座標系での3成分(ax,ay,az) と全磁力(af) を得る. void gcomp(double *axg, double *ayg, double *azg); 直前に IGRFモデルの計算を行った点の測地座標系での3成分(axg,ayg,azg) を得る. void stigrf(int l, double year); void stdgrf(int l, double year); void stpgrf(int l, double year); 計算するIGRFモデルの選択と計算年(year)の設定を行う.ガウス係数配列の順序番号 (l) でモデル基準年を選択する. 以上は,主として内部サブルーチンとしての使用を意図しており,通常のIGRF計算以 外の特殊な用途以外には,利用が見込まれない. void igrfs(double year); void igrfs_(float *year); void dgrfs(double year); void dgrfs_(float *year); void pgrfs(double year); void pgrfs_(float *year); 計算するIGRFモデルの選択と計算年(year)の設定を行う.year の値により適切なモデ ル基準年が選ばれる. void igrfs2(double year, int mdl); void igrfs2_(float *year, int *mdl); void dgrfs2(double year, int mdl); void dgrfs2_(float *year, int *mdl); void pgrfs2(double year, int mdl); void pgrfs2_(float *year, int *mdl); 計算するIGRFモデルの選択と計算年(year)の設定を行う.year の値に関わらず,指定 のモデル基準年(mdl) を選択する. void igrfc(double fido, double fkeido, double high, double *tf); void igrfc_(float *fi, float *fk, float *h, float *f); 緯度(fi:度単位)・経度(fk:度単位)・高度(h:m単位) を与えて指定済のIGRFモデル の計算を行い,全磁力値(f:nT単位)を返す. void igrfm(double fm[6]); void igrfm_(float fm[6]); 直前に IGRFモデルの計算を行った点における磁場ベクトルを,6成分の値(X, Y, Z, H, 伏角, 偏角)として,配列 fm で返す.X, Y, Z, H の単位は nT,伏角, 偏角 の 単位は 度 である.
void magafd(double am, double the, double phi, double dip, double dec); void magafd_(float *am, float *the, float *phi, float *dip, float *dec); 計算する磁化ソースの磁化の強度(am)と伏角(the)・偏角(phi)および地球磁場の伏角 (dip)・偏角(dec)を設定する.[磁化強度の単位は A/m,角度の単位は 度.] void mpoint(double xc, double yc, double zc, double vol); void mpoint_(float *xc, float *yc, float *zc, float *vol); 計算するソースのモデルを 点 に設定し,その水平位置座標(xc,yc),深度座標(zc), ソースの等価体積(vol) を設定する. void mvline(double xc, double yc, double zs, double w, double area); void mvline_(float *xc, float *yc, float *zs, float *w, float *area); 計算するソースのモデルを 鉛直な線分 に設定し,そのソースの X座標(xc),Y座標 (yc),深度方向のひろがりの下限(=上面深度)(zs) と厚さ(w),体積換算のための 等価な水平断面積(area) を設定する.但し,w=0. のとき底なしモデル(w→∞)と みなす. void mhrect(double xs, double xt, double ys, double yt, double zc, double h); void mhrect_(float *xs, float *xt, float *ys, float *yt, float *zc, float *h); 計算するソースのモデルを 水平な矩形の面 に設定し,そのソースの X座標方向のひ ろがりの下限と上限(xs,xt),Y座標方向のひろがりの下限と上限(ys,yt),深度座標 (zc),体積換算のための等価な厚さ(h) を設定する. void mprism(double xs, double xt, double ys, double yt, double zs, double w); void mprism_(float *xs, float *xt, float *ys, float *yt, float *zs, float *w); 計算するソースのモデルを 直方体 に設定し,そのソースの X座標方向のひろがりの 下限と上限(xs,xt),Y座標方向のひろがりの下限と上限(ys,yt),深度方向のひろがり の下限(=上面深度)(zs) と厚さ(w) を設定する.但し,w=0. のとき底なしモデル (w→∞)とみなす. double calma(double xp, double yp, double zp); float calma_(float *xp, float *yp, float *zp); 観測点の位置座標(xp,yp,zp) を指定して,設定済みのモデルの磁気異常を計算し,そ の結果を関数値とする.
int sm1opn(int nvar, int nsrc); void sm1opn_(int *nvar, int *nsrc); n元1次の回帰分析(8元まで)の処理の初期化を行う. (元の数 nvar は 8 まで,変量の個数 nsrc は 5 まで.) int sm1ex(double var[], double src[]); void sm1ex_(float fv[], float fs[]); n元1次の回帰分析を適用すべき変量値(src) と独立変数(元)(var) を与える. (繰返し呼び出し.) int sm1cls(double *coef); void sm1cls_(float *fc, int *mc, int *nc); n元1次の回帰分析に対する回帰係数を求め,配列 fc で返す. mc,nc は配列 fc の整合寸法. int sm1rv(double vr[], double sr[]); void sm1rv_(float fvr[], float fsr[]); n元1次の回帰分析結果の回帰係数を用いて,独立変数(元)(vr) の値に対する回帰式 の値(sr) の計算を行う. int sm2opn(int ndg2, int nsrc); void sm2opn_(int *ndg2, int *nsrc); 2元n次の回帰分析(8次まで)の処理の初期化を行う. (次数 ndg2 は 8 まで,変量の個数 nsrc は 5 まで.) int sm2ex(double u, double v, double src[]); void sm2ex_(float *fu, float *fv, float fs[]); 2元n次のの回帰分析を適用すべき変量値(src) と2個の独立変数(u,v) を与える. (繰返し呼び出し.) int sm2cls(double *coef); void sm2cls_(float *fc, int *mc, int *nc); 2元n次の回帰分析に対する回帰係数を求め,配列 fc で返す. mc,nc は配列 fc の整合寸法. int sm2rv(double ur, double vr, double sr[]); void sm2rv_(float *fur, float *fvr, float fsr[]); 2元n次の回帰分析結果の回帰係数を用いて,2個の独立変数(ur,vr) の値に対する回帰 式の値(sr) の計算を行う. int sm3opn(int ndg3, int nsrc); void sm3opn_(int *ndg3, int *nsrc); 3元n次の回帰分析(5次まで)の処理の初期化を行う. (次数 ndg3 は 5 まで,変量の個数 nsrc は 5 まで.) int sm3ex(double x, double y, double z, double src[]); void sm3ex_(float *fx, float *fy, float *fz, float fs[]); 3元n次の回帰分析を適用すべき変量値(src) と3個の独立変数(x,y,z) を与える. (繰返し呼び出し.) int sm3cls(double *coef); void sm3cls_(float *fc, int *mc, int *nc); 3元n次の回帰分析に対する回帰係数を求め,配列 fc で返す. mc,nc は配列 fc の整合寸法. int sm3rv(double xr, double yr, double zr, double sr[]); void sm3rv_(float *fxr, float *fyr, float *fzr, float fsr[]); 3元n次の回帰分析結果の回帰係数を用いて,3個の独立変数(xr,yx,zr) の値に対する 回帰式の値(sr) の計算を行う.
double rand1(void); float rand1_(void); -1. から +1. の範囲の一様乱数を関数値として得る. double randg(void); float randg_(void); 平均が 0. で,分散が 1. の正規乱数の値を関数値として得る.
int prompt(char *str); void prompt_(char *str, size_t ls); void premsg_(char *str, size_t ls); メッセージ str を標準エラー出力に書き出す.premsg_ では改行コードを付加する. (str の長さ ls は,FORTRANコンパイラが自動付加する.) int dpcent(int m, int n); void dpcent_(int *m, int *n); 長時間を要するループ処理の実行時などにおいて,その進捗状況を%表示する. 合計n回の繰返しのうち,m回の処理を終了したことを意味する. int opnpin(void); void opnpin_(void); パラメータ入力を既存ファイル読み取りに変更する機会を与える. int clspin(void); void clspin_(void); opnpin による設定を解除する. int parmin(int lbuf, char *buf); パラメータ入力をそのままの文字列 buf (lbuf 文字以下) として受け取る. void parmin_(char *str, int lbuf, char *buf, size_t ls); プロンプト str を出力して,パラメータ入力を lbuf 文字以下の 生のままの文字列 buf として受け取る.(str の長さ ls は,FORTRANコンパイラが自動付加する.) int get_wkdir(char *dnm, size_t len); int lwkdir_(int *len, char *dnm); 作業ディレクトリの入力操作を受け付け,その絶対パス名 dnm (文字数 len 以下)を 返す.lwkdir_ では,そのディレクトリのファイル一覧も表示される. void gparma(char *str, int lnam, char *nam); void gparma_(char *str, int *lnam, char *nam, size_t ls); プロンプト str を出力し,パラメータ入力として lnam 文字以下の文字列データ nam を受け取る. void gparmi(char *str, int *iv); void gparmi_(char *str, int *iv, size_t ls); プロンプト str を出力し,パラメータ入力として intデータ iv を受け取る. void gparmf(char *str, float *fv); void gparmf_(char *str, float *fv, size_t ls); プロンプト str を出力し,パラメータ入力として floatデータ fv を受け取る. void gparmd(char *str, double *dv); void gparmd_(char *str, double *dv, size_t ls); プロンプト str を出力し,パラメータ入力として doubleデータ dv を受け取る. void gparmif(char *str, int *iv, float *fv); void gparmif_(char *str, int *iv, float *fv, size_t ls); プロンプト str を出力し,パラメータ入力として intデータ iv と floatデータ fv を受け取る. void gparmid(char *str, int *iv, double *dv); void gparmid_(char *str, int *iv, double *dv, size_t ls); プロンプト str を出力し,パラメータ入力として intデータ iv と doubleデータ dv を受け取る. void gparmi2(char *str, int *iv1, int *iv2); void gparmi2_(char *str, int *iv1, int *iv2, size_t ls); プロンプト str を出力し,パラメータ入力として 2つの intデータ iv1,iv2 を受け 取る. void gparmf2(char *str, float *fv1, float *fv2); void gparmf2_(char *str, float *fv1, float *fv2, size_t ls); プロンプト str を出力し,パラメータ入力として 2つの floatデータ fv1,fv2 を受 け取る. void gparmd2(char *str, double *dv1, double *dv2); void gparmd2_(char *str, double *dv1, double *dv2, size_t ls); プロンプト str を出力し,パラメータ入力として 2つの doubleデータ dv1,dv2 を受 け取る. (いずれの場合も,str の長さ引数 ls は,FORTRANコンパイラが自動付加する.)