Podsumowanie SNESu

Składnia podstawowych procedur SNESu:
Składnia
opis
int SNESCreate(MPI_Comm comm,SNESProblemType mode,SNES *MojSnes)  tworzy obiekt typu SNES; 
int SNESSetFunction(SNES MojSnes, Vec R, int (*Funkcja)(SNES,Vec,Vec,void*),void *FunCtx Przekazuje SNESowi procedurę obliczającą F(X)
int SNESSetJacobian(SNES MojSnes,Mat Jac,Mat Prec, int(*Jakobian)(SNES,Vec,Mat*,Mat*,MatStructure*,void*), void *JacCtx)  Przekazuje SNESowi procedurę obliczającą jakobian F'(X)
int SNESSetFromOptions(SNES MojSnes)  ustawia opcje SNESu zgodnie z argumentami przekazanymi w linii komend przy wywołaniu programu; 
int SNESSolve(SNES MojSnes,Vec X,int *its)  Rozwiązuje równanie F(X)=0; 
int SNESView(SNES MojSnes,Viewer viewer)  Wypisuje parametry SNESu. 
 
Ważne argumenty tych procedur:
Mniej ważne argumenty:
 
Schemat wykorzystania SNESu do rozwiązania równania nieliniowego: 
  • określić kontekst USERCTX używany przez SNES; 
  • zdefiniować funkcję F i jej jakobian F', tworząc odpowiednie procedury Funkcja() i Jakobian(); korzystające z kontekstu typu USERCTX
  • w programie głównym zadeklarować potrzebne obiekty: USERCTX UserCtx; SNES MojSnes; Vec X,R; Mat Jac; int flag,its; a następnie wygenerować wektory, macierze i (zapewne) kontekst użytkownika; 
  • wygenerować SNES: 
SNESCreate(MPI_COMM_WORLD, SNES_NONLINEAR_EQUATIONS, &MojSnes); 
  • przekazać SNESowi naszą funkcję i jakobian: 
SNESSetFunction(MojSnes, X, Funkcja, (void *) &UserCtx); oraz 
SNESSetJacobian(MojSnes, Jac, Jac, Jakobian, (void *) &UserCtx); 
  • ustawić opcje w SNESie, SNESSetFromOptions(MojSnes); 
  • wpisać przybliżenie początkowe do wektora X
  • rozwiązać równanie! SNESSolve(MojSnes, X, &its); 
 
Na zakończenie, podkreślmy raz jeszcze kilka istotnych kwestii odnoszących się do implementacji ogólnego schematu użycia SNESu.
Zarówno procedura obliczająca funkcję F(X), jak procedura obliczająca jakobian F'(X), muszą być ściśle określonego typu. Przed użyciem SNESu, musimy wygenerować niezłe przybliżenie początkowe. Efektywność całego procesu rozwiązywania równania będzie zależała przede wszystkim od sposobu implementacji F(X) oraz F'(X). Warto także zastanowić się, czy dobrze są dobrane parametry SNESu.
 
Co jeszcze warto wiedzieć o SNESie? Spis treści O czym nie napisaliśmy
 

Copyright (C) Marcin Bojko i Piotr Krzyzanowski, 1998.
Ostatnia modyfikacja: 09.X.98.