fvOptionsを使う理由ですが、今回周期境界を使ってチャンネル流れを発達させたいということはご理解いただけると思います。
次になぜgradPを知りたいかというと、上記ソース項を使った方法で流れ場を計算した場合、チャンネル内の圧力は一定となり、場のpから
私の知りたいgradPは得ることができません。->なのでfiniteVolumeクラスのメンバ関数では得ることはできないと考えています。
pressureGradientExplicitSourceの使い方としてgradPを外で使うことが想定されていないことは、.Hを見ればその変数が
private指定されていることから一目瞭然ですが、そのことはあまり気にせず、メンバ関数にgetter関数return (gradP_)を
定義してfv::pressureGradientExplicitSource::correct(U)を呼んだ後にそのインスタンスのgradP()で呼べるのでは?と考えた次第です。
fvOptionsの特性上、それに関わるインスタンスの初期化は、ソルバーの初期段階で行うべきで、時々刻々呼ばれるfv::press〜::correctを呼ぶためにその都度初期化するのはまずいと思い、私の使いたいクラスでは、staticでインスタンスを定義した方がいい?(できるかわからん…やったことがない!(^_^;))とか想像していたところです。(ソルバーまで遡って何か呼べるようにするとかも考えました)
要はfvOptionsクラスが呼ばれるときのdictが必要なのだと考えています。
と、ここまで考えてからなかがわさまのコンストラクタの定義の疑問に答えようとした時、上のstatic定義するくらいなら、ローカルに?newでインスタンスを作るのではなく、クラスのメンバ変数にしたり、fv::press〜クラスを継承する方がいいのかな?とも思い直しました。
->この時には、私の作りたいクラスのインスタンスが呼ばれたときのためにコンストラクタが必要だと思います。最初の①と②が今までごっちゃになってました。
このコンストラクタにはやはりdictが重要で、こうなれば、私の派生クラスのDictionaryにfvOptionsと同じ内容を転記するしかないか、と思い始めました。
->私の派生クラスからは絶対にfvOptionsのDictionaryは読めないと判断。
なかがわさまご指摘のようにgradPを二度計算することになりますが、元々独立にやるべきことを同時にやろうとしているので少し不恰好になりそうですが、再利用をあまり考えなくていい?末端派生クラスなのでまぁいいかなと感じる次第です。