PDESolve[cdata,bcdata,vd,sd,mdata]
solves a PDE based on coefficient data cdata, boundary condition data bcdata, variable data vd, solution data sd and method data mdata to return new solution data.
PDESolve
PDESolve[cdata,bcdata,vd,sd,mdata]
solves a PDE based on coefficient data cdata, boundary condition data bcdata, variable data vd, solution data sd and method data mdata to return new solution data.
Details and Options
- PDESolve solves linear and nonlinear stationary partial differential equations.
- PDESolve returns a list that is the solution data.
- The coefficient data cdata is a PDECoefficientData object generated by InitializePDECoefficients.
- The boundary condition data bcdata is a BoundaryConditionData object generated by InitializeBoundaryConditions.
- Variable data vd and solution data sd are corresponding lists of variables and values. Templates for vd and sd may be generated using NDSolve`VariableData and NDSolve`SolutionData, and components may be set using NDSolve`SetSolutionDataComponent.
- The method data mdata is a PDE method data object, such as FEMMethodData, generated through InitializePDEMethodData.
- PDESolve takes the following options:
-
"FindRootOptions" Automatic specify options for FindRoot "LinearSolver" Automatic specify a linear solver and options for it - Options given to PDESolve can be given to NDSolve by specifying "PDESolveOptions". »
- Setting the option from NDSolve and related functions is explained in NDSolve Finite Element Options.
Examples
open all close allBasic Examples (3)
Load the finite element package:
Needs["NDSolve`FEM`"]Set up a NumericalRegion:
nRegion = ToNumericalRegion[Rectangle[{0, 0}, {1, 1 / 2}]]Set up variable and solution data:
vd = NDSolve`VariableData[{"DependentVariables", "Space"} -> {{u}, {x, y}}];
sd = NDSolve`SolutionData[{"Space"} -> {nRegion}];Initialize the partial differential equation data:
methodData = InitializePDEMethodData[vd, sd]Set up the solution of the linear PDE
. Initialize the linear coefficients:
pdeData = InitializePDECoefficients[vd, sd, "DiffusionCoefficients" -> {{-IdentityMatrix[2]}}]Initialize the linear boundary condition data:
bcData = InitializeBoundaryConditions[vd, sd, {{DirichletCondition[u[x, y] == 0., x == 0]}}]sdNew = PDESolve[pdeData, bcData, vd, sd, methodData];ProcessPDESolutions[methodData, sdNew]Set up the solution of the nonlinear PDE
. Initialize the nonlinear coefficients:
npdeData = InitializePDECoefficients[vd, sd, "DiffusionCoefficients" -> {{-Sqrt[u[x, y]] * IdentityMatrix[2]}}]Initialize nonlinear boundary condition data:
nbcData = InitializeBoundaryConditions[vd, sd, {{DirichletCondition[u[x, y] == 0., x == 0], NeumannValue[u[x, y] ^ 2, x == 1]}}]NDSolve`SetSolutionDataComponent[sd, "Dependent", {1}]sdnew = PDESolve[npdeData, nbcData, vd, sd, methodData];ProcessPDESolutions[methodData, sdNew]Options (8)
"FindRootOptions" (5)
Inspect the number of function calls, steps and Jacobian evaluations needed:
Block[{e = 0, s = 0, j = 0},
PDESolve[npdeData, nbcData, vd, sd, methodData,
"FindRootOptions" -> {
Jacobian -> {Automatic, EvaluationMonitor :> j++}
, EvaluationMonitor :> e++, StepMonitor :> s++}
];
Print["Function Evaluations = ", e, "
Steps = ", s, "
Jacobian Evaluations = ", j];
]Specify that PDESolve is to use the default FindRoot root-finding algorithm:
Block[{e = 0, s = 0, j = 0},
PDESolve[npdeData, nbcData, vd, sd, methodData,
"FindRootOptions" -> {
Method -> {"Newton"}
, Jacobian -> {Automatic, EvaluationMonitor :> j++}
, EvaluationMonitor :> e++, StepMonitor :> s++}
];
Print["Function Evaluations = ", e, "
Steps = ", s, "
Jacobian Evaluations = ", j];
]Specify that PDESolve is to use the default affine covariant Newton method:
Block[{e = 0, s = 0, j = 0},
PDESolve[npdeData, nbcData, vd, sd, methodData,
"FindRootOptions" -> {
Method -> {"AffineCovariantNewton"}
, Jacobian -> {Automatic, EvaluationMonitor :> j++}
, EvaluationMonitor :> e++, StepMonitor :> s++}
];
Print["Function Evaluations = ", e, "
Steps = ", s, "
Jacobian Evaluations = ", j];
]Set up PDESolve to not use Broyden updates:
Block[{e = 0, s = 0, j = 0},
PDESolve[npdeData, nbcData, vd, sd, methodData,
"FindRootOptions" -> {
Method -> {"AffineCovariantNewton", "BroydenUpdates" -> False}
, Jacobian -> {Automatic, EvaluationMonitor :> j++}
, EvaluationMonitor :> e++, StepMonitor :> s++}
];
Print["Function Evaluations = ", e, "
Steps = ", s, "
Jacobian Evaluations = ", j];
]Set a PrecisionGoal for the default PDESolve FindRoot method:
Block[{e = 0, s = 0, j = 0},
PDESolve[npdeData, nbcData, vd, sd, methodData,
"FindRootOptions" -> {PrecisionGoal -> 4,
Jacobian -> {Automatic, EvaluationMonitor :> j++},
EvaluationMonitor :> e++, StepMonitor :> s++}
];
Print["Function Evaluations = ", e, "
Steps = ", s, "
Jacobian Evaluations = ", j];
]"LinearSolver" (3)
Specify PDESolve to use a direct method for LinearSolve:
Block[{e = 0, s = 0, j = 0},
PDESolve[npdeData, nbcData, vd, sd, methodData,
"LinearSolver" -> {LinearSolve, "Method" -> "Direct"},
"FindRootOptions" -> {Jacobian -> {Automatic, EvaluationMonitor :> j++},
EvaluationMonitor :> e++, StepMonitor :> s++}
];
Print["Function Evaluations = ", e, "
Steps = ", s, "
Jacobian Evaluations = ", j];
]Specify PDESolve to use a Krylov method for LinearSolve:
Block[{e = 0, s = 0, j = 0},
PDESolve[npdeData, nbcData, vd, sd, methodData,
"LinearSolver" -> {Automatic, "Method" -> "Krylov"},
"FindRootOptions" -> {
Jacobian -> {Automatic, EvaluationMonitor :> j++}
, EvaluationMonitor :> e++, StepMonitor :> s++}
];
Print["Function Evaluations = ", e, "
Steps = ", s, "
Jacobian Evaluations = ", j];
]Specify PDESolve to use a customer function for LinearSolve:
Block[{e = 0, s = 0, j = 0},
PDESolve[npdeData, nbcData, vd, sd, methodData,
"LinearSolver" -> {(Print["LinearSolverCall"];LinearSolve[#])&},
"FindRootOptions" -> {
Jacobian -> {Automatic, EvaluationMonitor :> j++},
EvaluationMonitor :> e++, StepMonitor :> s++}
];
Print["Function Evaluations = ", e, "
Steps = ", s, "
Jacobian Evaluations = ", j];
]Properties & Relations (1)
Options given to PDESolve can be given to NDSolve by specifying "PDESolveOptions":
Block[{e = 0, s = 0, j = 0},
NDSolve[{-Inactive[Div][(1/Sqrt[1 + Grad[u[x, y], {x, y}] . Grad[u[x, y], {x, y}]])*
Inactive[Grad][u[x, y], {x, y}], {x, y}] == 0, DirichletCondition[u[x, y] == Sin[2π * (x + y)], True]}, u, {x, y}∈Disk[], Method -> {"FiniteElement", "PDESolveOptions" -> "FindRootOptions" -> {
Jacobian -> {Automatic, EvaluationMonitor :> j++}
, EvaluationMonitor :> e++, StepMonitor :> s++}}];
Print["Function Evaluations = ", e, "
Steps = ", s, "
Jacobian Evaluations = ", j];
]Related Guides
Text
Wolfram Research (2019), PDESolve, Wolfram Language function, https://reference.wolfram.com/language/FEMDocumentation/ref/PDESolve.html (updated 2020).
CMS
Wolfram Language. 2019. "PDESolve." Wolfram Language & System Documentation Center. Wolfram Research. Last Modified 2020. https://reference.wolfram.com/language/FEMDocumentation/ref/PDESolve.html.
APA
Wolfram Language. (2019). PDESolve. Wolfram Language & System Documentation Center. Retrieved from https://reference.wolfram.com/language/FEMDocumentation/ref/PDESolve.html
BibTeX
@misc{reference.wolfram_2026_pdesolve, author="Wolfram Research", title="{PDESolve}", year="2020", howpublished="\url{https://reference.wolfram.com/language/FEMDocumentation/ref/PDESolve.html}", note=[Accessed: 13-June-2026]}
BibLaTeX
@online{reference.wolfram_2026_pdesolve, organization={Wolfram Research}, title={PDESolve}, year={2020}, url={https://reference.wolfram.com/language/FEMDocumentation/ref/PDESolve.html}, note=[Accessed: 13-June-2026]}