NonlinearScheme_Newton Class
This class inherits from the base class 'NonlinearScheme' to implement a fully implicit time integration scheme using the Newton-Raphson method for solving nonlinear systems.
Contents
Authors
- Danilo Cavalcanti
Class definition
classdef NonlinearScheme_Newton < NonlinearScheme
Constructor method
methods %------------------------------------------------------------------ function this = NonlinearScheme_Newton() this = this@NonlinearScheme(); end end
Public methods
methods %------------------------------------------------------------------ % Assemble the Jacobian matrix and the residual vector. function [J,r] = assembleLinearSystem(~,C,K,fi,fe,dfidx,x,xOld,dt) % Residual vector r = fi + K * x + C * (x - xOld) / dt - fe; % Jacobian matrix J = K + dfidx + C / dt; end %------------------------------------------------------------------ % Apply boundary conditions to the right-hand side of the system. function bf = applyBCtoRHS(~,~,b,~,doffree,~) bf = b(doffree); end %------------------------------------------------------------------ % Add nodal forces to the right-hand side vector. function b = addNodalForces(~,b,fe) b = b - fe; end %------------------------------------------------------------------ % Evaluate the solution increment and updates the solution vector. function [X,dx] = eval(~,J,r,X,~,freedof,~) % Compute increment of variables dx = -J\r; % Update variables X(freedof) = X(freedof) + dx; end %------------------------------------------------------------------ % Check for convergence of the nonlinear scheme. function convFlg = convergence(this,~,~,~,r,~,iter,echo) if echo fprintf("\t\t iter.: %3d , ||R|| = %7.3e \n",iter,norm(r)); end if (norm(r) < this.tol) && (iter > 1) convFlg = true; else convFlg = false; end end end
end