SIFEL/MEFEL/SRC/arclength.cpp File Reference

#include "arclength.h"
#include "nssolver.h"
#include "mechprint.h"
#include "mathem.h"
#include "global.h"
#include "globmat.h"
#include "loadcase.h"
#include "mtsolver.h"
#include <stdlib.h>

Go to the source code of this file.

Functions

void adapt_psi_coeff (long i, double ddlambda, double &ddlambda0, double &psi0, double &psi)
 The function modifies the psi coefficient according to the ddlambda increment adaptively.
void determine_dlambda (double *ddr, double *u, double *v, double *ddrprev, long n, double ddlambda, double psi, double norfp, double dl, double &dlambda, long &stop, nonlinman *nlman, long lcid)
 The function computes increment of load coefficient.
double displincr (double *dr1, double *dr2, long n, long lcid)
 The function computes square of the generalized norm of displacement vector.
double garclength (long lcid, nonlinman *nlman, double *ra, double *fa, double *fc, double *fp, double *flc, double *flp, long li, double ilambda, answertype outres)
 The main procedure which solves the system of the nonlinear equations by the arclength method.
double loadincr (double *fp, long n, double lambda, nonlinman *nlman)
 The function calculates generalized norm of the load vector.
double prdisplincr (long i, long lcid)
 The function returns prescribed displacements for the i-th seleceted dof in nonlinman.
void quadeqcoeff (double *ddr, double *v, long n, double ddlambda, double psi, double norfp, double dl, double &a0, double &a1, double &a2, long lcid)
 The function computes coefficiets of quadratic equation solved in the spherical arclength method.
void seldofinit ()
 The function initializes selected dofs used for the arclength method controling.

Function Documentation

void adapt_psi_coeff ( long  i,
double  ddlambda,
double &  ddlambda0,
double &  psi0,
double &  psi 
)

The function modifies the psi coefficient according to the ddlambda increment adaptively.

The function modifies the psi coefficient according to the ddlambda increment adaptively. If the increment decreases comparing to the initial/reference ddlambda increment (ddlamda0) than the value should be also decreased and thus the arclength is controlled rather by the displacements than by the load. The initial/reference value of the load increment ddlambda0 and proportional coefficient psi0 are updated at the beginning of the main iteration loop and if the ddlambda changes the sign comparing to the ddlambda 0 (peak point of loading curve).

Parameters:
i - step id
ddlambda - actual increment of the load coefficeint lambda
ddlambda0 - initial/reference value of the load coefficeint lambda increment (input/output parameter)
psi0 - initial/reference value of the proportional coefficeint (input/output parameter)
psi - actual value of the proportional coefficeint (input/output parameter)
Returns:
The function returns the actual value of psi in the correspondign parameter. Also the parameters ddlambda0 and psi0 can be changed.

Created by Tomas Koudelka 07.2011

Definition at line 1500 of file arclength.cpp.

Referenced by arclengthrv(), garclength(), one_step_arcl(), and quadeqcoeff().

void determine_dlambda ( double *  ddr,
double *  u,
double *  v,
double *  ddrprev,
long  n,
double  ddlambda,
double  psi,
double  norfp,
double  dl,
double &  dlambda,
long &  stop,
nonlinman nlman,
long  lcid 
)

The function computes increment of load coefficient.

The function determines increment of lambda (delta lambda).

Parameters:
ddr - Delta r + u
u - u = K^{-1}*(fa-fi)
v - v = K^{-1}*fp
ddrprev - Delta r (not updated by the vector u)
n - number of unknowns
ddlambda - Delta lambda
psi - proportional coefficient between load and displacement vectors
norfp - the norm of proportional vector
dl - length of the arc
dlambda - delta lambda (output of this function)
stop - indicator of end of iteration (output of this function)
nlman - pointer to structure with arclength setup (it is used for full arclength method)
lcid - load case id
Returns:
The function returns delta lambda in the parameter dlambda and it sets the stop parameter to indicate the end of the arclength due to nonsolvable constrained conditions.

Created by JK, 30.8.2010 Modified

Definition at line 1361 of file arclength.cpp.

References displincr(), nonlinman::dlam, fullmethod, linearizedmeth, maxvalue, minangle, minvalue, Mp, probdesc::nlman, nodetermination, print_err(), quadeqcoeff(), and solv_polynom_2().

Referenced by arclengthrv(), garclength(), one_step_arcl(), and quadeqcoeff().

double displincr ( double *  dr1,
double *  dr2,
long  n,
long  lcid 
)

The function computes square of the generalized norm of displacement vector.

The function computes square of generalized norm of vector of displacemnt increments. The function returns either square of vector norm computed from the selected componets or it returns increment of distance between selected nodes. It is used in the arclength method.

Parameters:
dr1 - array with components of the first vector of displacement increments
dr2 - array with components of the second vector of displacement increments
n - number of components of displincr array
lcid - load case id
Returns:
The function returns required norm.

Created by JK,

Definition at line 1192 of file arclength.cpp.

References alldofs, nonlinman::displnorm, Mp, probdesc::nlman, nodesdistincr, nonlinman::nsdofal, nonlinman::nxal, nonlinman::nyal, nonlinman::nzal, prdisplincr(), print_err(), nonlinman::probdimal, scprd(), nonlinman::seldofal, seldofs, seldofscoord, and selecnodes.

Referenced by arclength(), arclength15(), arclengthadapt(), arclengthrv(), arclengthrv1(), determine_dlambda(), garclength(), one_step_arcl(), and quadeqcoeff().

double garclength ( long  lcid,
nonlinman nlman,
double *  ra,
double *  fa,
double *  fc,
double *  fp,
double *  flc,
double *  flp,
long  li,
double  ilambda,
answertype  outres 
)

The main procedure which solves the system of the nonlinear equations by the arclength method.

The function solves system of nonlinear algebraic equations by the arc-length method. This method was modified to reach the given value lambdar of the lambda parameter. lambdar value is reached with required error errl. Only one right hand side vector is supported with respect to nonlinearity and absence of superposition. Proportional vector grows until the nial number of steps is reached.

Parameters:
lcid - load case id
nlman - pointer to structure conatining setup of the solver
ra - vector of attained displacements
fa - attained load vector
fc - constant part of load vector (it is not influenced by lambda)
fp - proportional part of load vector (it is increased by load coefficient lambda up to the nlman->lambdar)
flc - constant component of load vector due to forces
flp - proportional component of load vector due to forces
li - initial value of step id (default is 0)
ilambda - initial value of load coefficient (default is 0)
outres - flag for performing of output of results (if yes -> print_step procedure is called for the each step)
Returns:
The function returns reached lambda parameter.

Created by JK, 16.8.2001 Rewritten by TKo, JK 08.2011

Definition at line 39 of file arclength.cpp.

References adapt_psi_coeff(), addmultv(), addv(), assemble_stiffness_matrix(), check_divergency(), nonlinman::check_lambdar, nonlinman::check_tot_al, compute_req_val(), copymultv(), copyv(), determine_dlambda(), displincr(), nonlinman::dlal, probdesc::dlambda, nonlinman::dlmaxal, nonlinman::dlminal, mechmat::dstep_red_mat(), nonlinman::erral, nonlinman::errl, f, fillm(), fillv(), Gtm, probdesc::hdbcont, internal_forces(), probdesc::istep, probdesc::jstep, probdesc::lambda, nonlinman::lambdar, nonlinman::max_tot_al, Mespr, Mm, Mp, Ndofm, nonlinman::nial, nonlinman::niilal, normv(), off, on, probdesc::otherstate, Out, print_err(), print_flush(), print_step(), print_step_forced(), nonlinman::psial, hdbcontr::save_stat(), Smat, slesolv::solve_system(), solver_save(), probdesc::ssle, probdesc::strainstate, probdesc::stressstate, subv(), mechmat::updateipval(), yes, and probdesc::zero.

Referenced by nonlinear_solver().

double loadincr ( double *  fp,
long  n,
double  lambda,
nonlinman nlman 
)

The function calculates generalized norm of the load vector.

The function computes generalized norm of load vector. It is used in the arclength method.

Parameters:
fc - array with components of constant load vector
n - the number of components of displincr array
lambda - attained value of the load coefficient
nlman - structure with setup of handling of lambda and lambda tresholds
Returns:
The function returns required norm.

Created by JK,

Definition at line 1142 of file arclength.cpp.

Referenced by arclengthrv(), and loadincr().

double prdisplincr ( long  i,
long  lcid 
)

The function returns prescribed displacements for the i-th seleceted dof in nonlinman.

The function returns in the case of prescribed displacement in the i-th selected dof from nonlinman.

Parameters:
i - id of selected dof
lcid - load case id
Returns:
The function returns contribution of to the length of arc from prescribed displacement of i-th selected dof.

Created by Tomas Koudelka, 5.2014

Definition at line 1261 of file arclength.cpp.

References mechbclc::lc, Mb, Mp, probdesc::nlman, loadcase::pd, and nonlinman::seldofal.

Referenced by displincr().

void quadeqcoeff ( double *  ddr,
double *  v,
long  n,
double  ddlambda,
double  psi,
double  norfp,
double  dl,
double &  a0,
double &  a1,
double &  a2,
long  lcid 
)

The function computes coefficiets of quadratic equation solved in the spherical arclength method.

Function computes coefficients of the quadratic equation used in the arclength method. The coefficients are computed with respect to type of load/displacement control.

Parameters:
ddr - increment of load coefficient lambda for the given step
v - vector of displacement increments
n - total number of DOFs (i.e. size of ddr and v arrays)
ddlambda - correction of increment of load coefficient lambda
psi - proportional weight coeffient (swithces between load/displacement control)
norfp - norm of proportional load vector
dl - length of arc
a0 - zero order coefficient (output)
a1 - first order coefficient (output)
a2 - second order coefficient (output)
lcid - load case id
Returns:
The function returns evaluated coefficient in the parameters a0, a1 and a2.

Created by JK,

Definition at line 1300 of file arclength.cpp.

References alldofs, displincr(), nonlinman::displnorm, Mp, probdesc::nlman, nodesdistincr, print_err(), seldofs, seldofscoord, and selecnodes.

Referenced by arclength(), arclength15(), arclengthadapt(), arclengthrv(), arclengthrv1(), determine_dlambda(), and quadeqcoeff().

void seldofinit (  ) 

The function initializes selected dofs used for the arclength method controling.

The function solves system of nonlinear algebraic equations by the arc-length method. This method was modified to reach the given value lambdar of the lambda parameter. lambdar value is reached with required error errl. Only one right hand side vector is supported with respect to nonlinearity and absence of superposition. Proportional vector grows until the nial number of steps is reached.

Parameters:
lcid - load case id
nlman - pointer to structure conatining setup of the solver
ra - vector of attained displacements
fa - attained load vector
fc - constant part of load vector (it is not influenced by lambda)
fp - proportional part of load vector (it is increased by load coefficient lambda up to the nlman->lambdar)
li - initial value of step id (default is 0)
ilambda - initial value of load coefficient (default is 0)
outres - flag for performing of output of results (if yes -> print_step procedure is called for the each step)
Returns:
The function returns reached lambda parameter.

Created by JK, 16.8.2001 Rewritten by TKo, JK 08.2011 Function performs calculation of one load/time step of the Newton-Raphson method for the given load case. Solved equation system does not contain time variable.

Parameters:
lcid - load case id
nlman - pointer to structure conatining setup of the solver
fa - attained load vector
ra - vector of attained displacements
fb - residual vector or load vector increment - righthand side vector
dr - vector of displacement increment - lefthand side vector
fb - vector of internal forces
f - auxiliary vector of actual load (call of solve_system rewrite it during solution)
istep - time/load step id
j - inner loop step id (output parameter, set to -1 if no inner loop was performed)
li - initial value of time/load step id
Returns:
The function returns reached lambda parameter.

Created by Tomas Koudelka, 11.2012 The function initializes dof numbers for the particular types of displacement control. It is used in the arclength method.

Returns:
The function does not return anything, it performs initialization of Mp->nlman.

Created by JK,

Definition at line 1065 of file arclength.cpp.

Referenced by par_solve_nonlinear_statics(), and solve_nonlinear_statics().


Generated by  doxygen 1.6.2