一次元メッシュ上での 緩和ステップの可能な記述を考える.
図2.1: leftフィールドと rightフィールドでつながれたセルオブジェクト
class cell
{
// value in the current/next step
double value, new_value;
// pointers to neighbors
cell * left, * right;
public:
double current_value () { return value; }
void step ();
};
void cell::step ()
{
double lv = left->current_value ();
double rv = right->current_value ();
new_value = ((lv + rv) - (value * 2.0)) / 2.0;
}
図2.1のように, cell オブジェクトの集合がleft とrightを 通じて二重リンクリストを形づくる. 緩和のステップでは, 全てのセルオブジェクトで step メソッドを 起動する. 各 step メソッドはまず current_value メソッドによって 現在の隣接するセルの値を問い合わせ, それらの値を使って 自分自身を更新する.