SIFEL/MEFEL/SRC/arclength_new.cpp File Reference

#include "arclength.h"
#include "nssolver.h"
#include "mechprint.h"
#include "mathem.h"
#include "global.h"
#include "globmat.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)
double displincr (double *dr1, double *dr2, long n)
double garclength (long lcid, nonlinman *nlman, double *ra, double *fa, double *fc, double *fp, long li, double ilambda, flagsw outres)
double loadincr (double *fp, long n, double lambda, nonlinman *nlman)
 The function calculates generalized norm of the load vector.
long one_step_arcl (long lcid, nonlinman *nlman, double *ra, double *fa, double *fc, double *fp, aux_arcl_vec &aav, double norfp, long i, long li, double &lambda, double &totl, double &psi, double &psi0, long modif_psi, long &modif, flagsw outres)
void quadeqcoeff (double *ddr, double *v, long n, double ddlambda, double psi, double norfp, double dl, double &a0, double &a1, double &a2)
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 962 of file arclength_new.cpp.

References sgn().

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 
)

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)
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 by TKo, 8.2011

Definition at line 823 of file arclength_new.cpp.

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

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

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
Returns:
The function returns required norm.

Created by JK,

Definition at line 694 of file arclength_new.cpp.

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

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

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 on -> 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 36 of file arclength_new.cpp.

References assemble_attained_load_vector(), nonlinman::check_lambdar, nonlinman::check_tot_al, compute_req_val(), nonlinman::dlal, nonlinman::dlmaxal, nonlinman::dlminal, nonlinman::erral, nonlinman::errl, f, probdesc::hdbcont, nonlinman::lambdar, nonlinman::max_tot_al, Mespr, Mp, Ndofm, nonlinman::nial, nonlinman::niilal, normv(), on, one_step_arcl(), print_err(), print_flush(), print_step_forced(), nonlinman::psial, hdbcontr::save_stat(), and solver_save().

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 645 of file arclength_new.cpp.

References addv(), alldofs, nonlinman::check_lambdar, nonlinman::displnorm, nonlinman::lambdar, loadincr(), Mp, probdesc::nlman, nodesdistincr, nonlinman::nsdofal, nullv(), off, nonlinman::seldofal, seldofs, seldofscoord, selecnodes, and ss().

long one_step_arcl ( long  lcid,
nonlinman nlman,
double *  ra,
double *  fa,
double *  fc,
double *  fp,
aux_arcl_vec &  aav,
double  norfp,
long  i,
long  li,
double &  lambda,
double &  totl,
double &  psi,
double &  psi0,
long  modif_psi,
long &  modif,
flagsw  outres 
)

The function performs one step of arc-length method which solves the system of nonlinear algebraic equations. 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
aav - structure with auxiliary vectors used in the inner iteration loop, they are allocated once outside the function due to speed
norfp - norm of proportional load vector
li - initial value of step id (default is 0)
i - actual step id
lambda - actual value of load coefficient which will be modified in the case of performing of the given step sucessfully
totl - actual value of total (cummulative) length of arc corresponding to the actual load level, which will be modified in the case of performing of the given step sucessfully
psi - proportional coefficient between load vector and displacement vector
psi0 - initial value of proportional coefficient psi
modif - flag for adaptive increasing of length of arc (modif == 2 => increase length)
modif_psi - flag for adaptive modification of psi coefficient
outres - flag for performing of output of results (if on -> print_step procedure is called for the each step)
Return values:
0 - equilibrium was attained in the given i-th step of arc-length method
1 - equilibrium cannot be attained in the given i-th step of arc-length method

Created by JK, 16.8.2001 Rewritten by TKo, JK 12.2011

Definition at line 243 of file arclength_new.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, nonlinman::dlmaxal, nonlinman::dlminal, nonlinman::erral, f, fillm(), fillv(), Gtm, internal_forces(), probdesc::istep, probdesc::jstep, nonlinman::lambdar, nonlinman::max_tot_al, Mespr, Mm, Mp, Ndofm, nonlinman::niilal, normv(), off, on, probdesc::otherstate, Out, print_flush(), print_step(), nonlinman::psial, Smat, slesolv::solve_system(), probdesc::ssle, probdesc::strainstate, probdesc::stressstate, subv(), mechmat::updateipval(), yes, and probdesc::zero.

Referenced by garclength().

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

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)
Returns:
The function returns evaluated coefficient in the parameters a0, a1 and a2.

Created by JK,

Definition at line 763 of file arclength_new.cpp.

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

void seldofinit (  ) 

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

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 568 of file arclength_new.cpp.

References alldofs, nonlinman::displnorm, mechtop::give_dof(), mechtop::give_ndofn(), gtopology::gnodes, Gtm, length(), Mp, Mt, probdesc::nlman, nodesdistincr, nonlinman::nsdofal, nonlinman::nsnal, nonlinman::nxal, nonlinman::nyal, nonlinman::nzal, nonlinman::seldofal, seldofs, seldofscoord, selecnodes, nonlinman::selnodal, gnode::x, gnode::y, and gnode::z.


Generated by  doxygen 1.6.2