Commit Graph

228 Commits

Author SHA1 Message Date
Christoph Kords 14594dc9e2 * OpenMP does not like unbounded array subscripts in function calls
* some write statements were still not enclosed by CRITICAL construct, some needed a MASTER construct
2010-11-11 13:14:53 +00:00
Christoph Kords 405d5529e7 * checked and corrected parallelization of code. compiles now successfully, but simply aborts computation with first parallel directive without any comment :-(((
* also put a call to constitutive_microstructure at the start of each crystallite_integration subroutine like it was before. need that for nonlocal model in case of crystallite cutback
2010-11-03 17:22:48 +00:00
Philip Eisenlohr 0dd99cb965 lattice: (re)introduced _symmetryType function to replace unsafe lookup array
numerics: polishing

mpie_cpfem_marc: polishing

..powerlaw: aware of symmetryType function

crystallite: aware of symmetryType function, smaller leapfrog acceleration

IO: new warning 101

CPFEM: range of odd stress is now -1e15...+1e15, H_sym is used for stiffness
2010-11-03 14:58:11 +00:00
Christoph Kords 4c20daa00d state loop count was wrong for adaptive euler integration 2010-10-28 12:22:17 +00:00
Christoph Kords 9320d48305 in RKCK45 state integration: dotState was not saved in last Runge-Kutta step 2010-10-27 08:48:04 +00:00
Christoph Kords f5f3ef5ecc * have to reset dotState to zero before call to collectDotState (only important for nonlocal calculation)
* in Fixed Point Iteration: update dependent states after state preguess was missing; on the other hand, the first call to constitutive_microstructure was obsolete
2010-10-26 14:04:33 +00:00
Christoph Kords 366d52bd71 * former "relevantRho" and "relevantResistance" is renamed to "atol_rho" and "atol_resistance" and now used as an absolute tolerance for the state residuum. before it was used rather as significant state, so whenever the state dropped below that value it was considered converged. (In dislotwin and titanmod constitutive law there is only one value atol_rho which is used for all the states, though the state array consists not only of densities. We need further parameters here!)
* somewhat simplified convergence check for adaptive euler and runge-kutta
2010-10-26 13:16:37 +00:00
Christoph Kords e49de75fe3 stiffness calculation now only needs a single function call to the respective integrator method instead of one call per grain (which seems to heavily slow down the computation). also no special treatment for non-local material points anymore. 2010-10-15 14:57:13 +00:00
Christoph Kords fffe731447 * had to correct nonlocal slip system compatibility and flux calculation. last update gave wrong results. 2010-10-15 13:19:26 +00:00
Christoph Kords 724960686f * in nonlocal model: dislocation flux now with valid description also for large angle grain boundaries; transfer of dislocations from one slip system to the other according to new variable "constitutive_nonlocal_compatibility" which depends on the angle between slip plane normals and slip directions and is updated once per cycle in function "crystallite_orientations"
* reactivated debugging functionality for "non-standard" integration methods
2010-10-12 13:08:54 +00:00
Christoph Kords fce7590c17 * now able to choose method for state integration (integrator and integratorStiffness in numerics.config); standard is "Fixed Point Iteration", which is basically the same as before; others available are "Explicit Euler", "AdaptiveEuler", "Classical Runge-Kutta" and "Runge-Kutta Cash-Karp"
* now remembering stiffness similar to how we do it for Lp etc.; avoids undefined stiffness values for nonconverged stiffness calculation

* non-local stuff:
   * changed non-local kinetics (Gilman2002)
   * enforce zero shearrate for overall carrrier density below relevant density
   * enforce zero density for those states that become negative and were below relevant density before
   * dislocation velocity is not limited by V^(1/3) / dt anymore
2010-10-01 12:18:49 +00:00
Philip Eisenlohr b259fbd9c6 1) added distribution of leapfrog breaks
2) lattice_symmetryType is now a function (former lookup array was buggy)
3) stricter check of state var values (>0!) and memory deallocation done
2010-09-30 07:31:53 +00:00
Philip Eisenlohr 83a921eec2 crystallite: polishing
rest: added "$ID" and line ending settings...
2010-09-23 08:05:50 +00:00
Alankar Alankar 7548858ffa Some useful changes in damper for quicker convergence. 2010-09-22 08:54:36 +00:00
Alankar Alankar 18c86ca0b1 Updated corresponding files for titanmod constitutive 2010-09-13 09:29:03 +00:00
Philip Eisenlohr 9a20f742ea leaner memory requirement to store states and their rates when calculating the crystallite stiffness 2010-09-13 09:13:25 +00:00
Philip Eisenlohr a3c92061f9 1) terminallyIll was reset before FE did cutback --> useless extra calculations of same problem over and over...
2) local stiffness calculation is now standard for non-local grains
3) stressLoopDistribution discriminates between (a) central solution and (b) stiffness perturbation
4) debugger is switched on as standard... (but verboseDebugger not!)
2010-09-06 16:06:41 +00:00
Christoph Kords 05568ef73b calculation of state damper was erroneous for use with nonlocal and other constitution at the same time 2010-08-26 12:54:31 +00:00
Christoph Kords 197d7ea8d9 rearranged output statements in crystallite init for better readability in output file 2010-08-26 09:52:40 +00:00
Philip Eisenlohr c352146fe6 exchanged forall (warning causers) to nested do loops
deleted (currently unused) symmetrization of H tensor in CPFEM.f90 --> Denny pls advise?
2010-08-19 21:35:38 +00:00
Philip Eisenlohr 298cecbfec corrected syntax errors (long lines, line continuation by \) and logical mistake in mpie_cpfem_marc / abq_std which went unnoticed in ifort. Using SunStudio f90 surfaced those... 2010-08-03 23:47:00 +00:00
Christoph Kords 6d874e2c1f nonlocal stiffness calculation:
rather perturb all components at once (and optionally decrease the frequency of the Jacobian update with the iJaco parameter) than perturbing only a single component per cycle
2010-06-17 06:32:56 +00:00
Christoph Kords 3ce1882d29 when calculating dislocation stress at grain boundaries, densities are now extrapolated similarly to like it was already done at free surfaces 2010-06-07 16:01:37 +00:00
Denny Tjahjanto 9932c90c73 restoring the crystallite.f90, IO.f90 and material.f90 to the version 575. the version 576 of these files contain some uncleared debugging statements. 2010-05-26 16:34:44 +00:00
Denny Tjahjanto d114a600c3 fixed some errors in QuaternionToEuler, RToQuaternion to get the correct texture representation in the output. 2010-05-26 15:52:54 +00:00
Christoph Kords 51da3b6242 sorry, in rev 568 some variables were not declared in crystallite_postResults 2010-05-18 12:36:09 +00:00
Christoph Kords d96780967b added some output variables in crystallite: F, Fe, Fp, Ee, P, S 2010-05-18 07:57:13 +00:00
Claudio Zambaldi 15328e51cf Like this Euler angles AND grain rotation should be OK. 2010-05-11 15:06:21 +00:00
Claudio Zambaldi 2405a51042 crystallite:
- grainrotation calculation now is done with symmetryID 0, i.e. without symmetry reduction since we want the absolute misorientation.
- While math has everything in radians, post results eulerangles and axisangle are given in degrees.
And: grain rotation seems OK after the previous changes in math module.
2010-05-07 12:01:46 +00:00
Christoph Kords ea718573ef return 180° disorientation about 100 for neighbors with different phases 2010-04-29 12:28:51 +00:00
Christoph Kords c34c07a6ff statedamper has to be local (specific for each e,i,g); with a global damping we may produce spurious convergence 2010-04-29 07:41:29 +00:00
Claudio Zambaldi 79f286f24c small typo 2010-04-28 17:45:30 +00:00
Claudio Zambaldi 0b83fa0fb2 corrected (?) disorientation calc and introduced some new assisting functions 2010-04-28 17:19:58 +00:00
Claudio Zambaldi cab2261693 New array crystallite_symmetryID(i,g,e) is now filled during initialization run with 1 for bcc and fcc phase and 2 for hexagonal phase. The values are needed for misorientation calculations to apply the correct symmetry operators for cubic and hexagonal phases. 2010-04-19 10:03:34 +00:00
Claudio Zambaldi 249042c2d3 New output can be requested from crystallite:
(output) grainrotation
it gives the deviation from the initial grain orientation 
in axis-angle representation with the angle in degrees.
2010-04-12 11:14:36 +00:00
Philip Eisenlohr 9b5047c828 corrected two OMP CRITICAL terminations 2010-04-06 06:47:15 +00:00
Denny Tjahjanto 9026cc4016 again corrections. but this version must work. 2010-03-24 16:23:21 +00:00
Denny Tjahjanto 40b1478dac the latest RGC model + corrections for "element homogeneous" feature 2010-03-24 13:20:12 +00:00
Christoph Kords f4e5d32cde added flag verboseDebugger to debug in order to have more control about debugging statements
set this to true if you want extended debugging info in the output file
2010-03-19 14:14:08 +00:00
Christoph Kords 948c119ee9 changed internal representation of orientation and misorientation from euler angles to quaternions (this should also fix some bugs in the math_misorientation subroutine). includes a couple of new functions in math.f90 and some changes in crystallite.f90.
beware that crystallite output "orientation" now by default returns the orientation as quaternion. if you want euler angles instead, you have to add "eulerangles"  as a crystallite output in your material.config file (see material.config template).

for input of orientations in the texture block of the material.config you still have to specify the rotation in terms of euler angles, quaternions are not yet supported for input.
2010-03-18 12:23:17 +00:00
Christoph Kords e6fdfdfc36 iJacoStiffness belongs to numerics, not debug
sorry for not having checked that before
2010-03-17 17:00:54 +00:00
Christoph Kords 1a992e1aef nonlocal stiffness calculation produced segmentation fault for cycle number > 16. Corrected calculation of perturbation indices k and l. 2010-03-10 09:53:41 +00:00
Christoph Kords 61bd0224c1 - corrected an if statement in the state loop
- nonlocal stiffness calculation: we perturb all material points at the same time, so instead of N^2 loops we just need N
- set "forceLocalStiffnessCalculation" to false as standard
2010-03-04 17:27:39 +00:00
Philip Eisenlohr 8c8ed34356 reworked crystallite part to allow for flexible user output
--> new "crystallite" part in config file
--> new "crystallite" option for microstructures
--> new output file "...job.outputCrystallite" to be used in conjunction with marc_addUserOutput for meaningful naming of User Defined Vars.
2010-02-25 17:39:11 +00:00
Christoph Kords c1717329ac only need 2 logicals in crystallite_stressAndItsTangent to reflect all possible integration states, so crystallite_onTrack was obsolete and replaced by crystallite_todo; broken state update now directly produces a cutback 2010-02-23 09:46:39 +00:00
Christoph Kords aab5598d96 detabbed file for better readability 2010-02-19 13:44:38 +00:00
Philip Eisenlohr 8c5852dedf corrected messed up output of grain orientation in t16-file.
this bug affected at least all calculations done after revision 480 (Dec 18, 2009)
2010-02-18 16:09:45 +00:00
Claudio Zambaldi d60d8a4103 small readability improvement 2010-02-18 15:06:08 +00:00
Franz Roters 7e632e8132 corrcected definition of forceLocalStiffnessCalculation 2010-02-18 14:43:40 +00:00
Christoph Kords 97db70cf23 constitutive_nonlocal:
- reworked contribution of immobile dislocation density for rate equations
- flux is now calculated on the basis of interpolated velocities and densities at the interface; both incoming and outgoing fluxes are considered, so every material point only changes his own dotState
- dislocation velocity is now globally defined and calculated by subroutine constitutive_nonlocal_kinetics; the subroutine is called inside _LpAndItsTangent as well as _microstructure; therefore, microstructure now needs Tstar_v as additional input; in the future one should perhaps create a subroutine constitutive_kinetics that calls constitutive_nonlocal_kinetics separately, to clearly distinguish between microstructural and kinetic variables 
- better use flux density vector as output variable instead of scalar flux values for each interface
- added output variables internal and external resolved stress

crystallite:
- added flag to force local stiffness calculation in case of nonlocal model
- misorientation angle is explicitly set to zero when no neighbor can be found

debug:
- added flag "selectiveDebugger" that is used when debugging statements should only affect a specific element, ip and grain; these are specified with the new variables debug_e, debug_i and debug_g
- debugger can now be used in its original sense
2010-02-17 13:21:36 +00:00
Christoph Kords 2098c106ad misorientation is set to 400 degrees if our neighbor has a different phase 2010-01-05 16:03:45 +00:00
Denny Tjahjanto 043356e8a9 homogenization_RGC.f90 >> just switching-off one of the debugging statement.
crystallite.f90 >> optimizing the perturbation algorithm for local tangent.
2009-12-22 12:28:02 +00:00
Christoph Kords 1f7aebfa4d new subroutine crystallite_orientations: calculates the orientation matrix and the euler angles and - in case of single grain ips - the misorientation for each neighboring ip.
The calculation of the misorientation is now done once in crystallite init and at the end of every FE increment. This saves a lot of time compared to doing it in dotState for every crystallite subinc.
2009-12-18 15:46:33 +00:00
Christoph Kords 26e9056f90 added stiffness state loop counter to nonlocal stiffness calculation 2009-12-15 09:03:04 +00:00
Christoph Kords d784153e0c constitutive_nonlocal:
- corrected flux term
- multiplication is now aware of dislocation type
- corrected change rate for "dipole size" dupper
- corrected term for dipole dissociation by stress change
- added transmissivity term in fluxes which accounts for misorientation between two neighboring grains (yet hardcoded transmissivity according to misorientation angle)
- added more output variables

constitutive:
-  2 additional variables "previousDotState" and "previousDotState2", which are used to store the previous and second previous dotState (used in crystallite for acceleration/stabilization of state integration)
- timer for dotState now measures the time for calls to constitutive_ collectState (used to reside in crystallite_updateState, which is not critical in terms of calculation time anymore) 

crystallite:
- convergence check for nonlocal elments is now done at end of crystallite loop, not at the beginning; we simple set all elements to not converged if there is at least one nonlocal element that did not converge
- need call to microstructure before first call to collect dotState for dependent states
- stiffness calculation (jacobian): if there are nonlocal elements, we also have to consider changes in our neighborhood's states; so for every perturbed component in a single ip, we have to loop over all elements; since this is extremely time-consuming, we just perturb one component per cycle, starting with the one that changes the most during regular time step.
- updateState gets a damping prefactor for our dotState that helps to improve convergence; prefactor is calculated according to change of dotState

IO:
- additional warning message for unknown crystal symmetry
2009-12-15 08:20:31 +00:00
Denny Tjahjanto 59d22d47b2 introduction of a possibility to have homogeneous element (all ips in one element are identical, sort of reduced integration)
and bugs-fixing in crystallite.f90, homogenization_RGC.f90, numerics.f90.
2009-11-24 15:00:25 +00:00
Denny Tjahjanto cb88019aa6 introduced a flexibility in cut-backing scheme in homogenization.f90 and in crystallite.f90:
(1) subStepSizeHomog and subStepSizeCryst := size of substep when cut-back is applied (initially was hard-coded).
(2) stepIncreaseHomog and stepIncreaseCryst := step increase when calculation for substep converge (was also hardcoded).

introduced a possibility to choose different finite difference scheme, i.e., forward-, backward- and central-difference, for computing grain numerical tangent. note that central-difference scheme will slow down the computation significantly. please use it only if necessary.

parameters to set these new features have been included in numerics.f90 and numerics.config, whereas corresponding error messages have been introduced in the IO.f90
2009-11-10 13:36:27 +00:00
Christoph Kords c766ba2e3a minimum substepping size in homogenization and crystallite is now controlled by two independent parameters subStepMinHomog and subStepMinCryst respectively.
deleted flush statements where they are not needed, since they seriously slow down computation.
2009-10-26 16:43:43 +00:00
Denny Tjahjanto f50d3291f9 sorry, back to the previous version. grain deformation output is part of crystallite.f90, no longer done by homogenization. material.config reflects the changes. 2009-10-22 16:59:24 +00:00
Christoph Kords c1ee34d235 constitutive_nonlocal:
- read in activation energy for dislocation glide from material.config
- changed naming of dDipMin/Max to dLower/dUpper
- added new outputs: rho_dot, rho_dot_dip, rho_dot_gen, rho_dot_sgl2dip, rho_dot_dip2sgl, rho_dot_ann_ath, rho_dot_ann_the, rho_dot_flux, d_upper_edge, d_upper_screw, d_upper_dot_edge, d_upper_dot_screw
- poisson's ratio is now calculated from elastic constants
- microstrucutre has state as first argument, since this is our output variable
- periodic boundary conditions are taken into account for fluxes and internal stresses. for the moment, flag has to be set in constitutive_nonlocal. 
- corrected calculation for dipole formation by glide
- added terms for dipole formation/annihilation by stress decrease/increase 

constitutive:
- passing of arguments is adapted for constitutive_nonlocal model

crystallite:
- in stiffness calculation: call to collect_dotState used wrong arguments
- crystallite_postResults uses own Tstar_v and temperature, no need for passing them from materialpoint_postResults

homogenization:
- crystallite_postResults uses own Tstar_v and temperature, no need for passing them from materialpoint_postResults

IO:
- changed error message 229

material.config:
- changed example for nonlocal constitution according to constitutive_nonlocal

all:
- added some flush statements
2009-10-20 14:36:03 +00:00
Philip Eisenlohr ba27947142 material point now cuts back by 1/8
crystallite does not accelerate anymore, since, typically, longer step immediately fails and uses resources in vain. (future: remember number of successful steps to increase step size after x of those...)
2009-10-19 12:50:59 +00:00
Christoph Kords 9b3a59646a constitutive_nonlocal
- take orientation gradients into account when calculating dislocation stress and dislocation fluxes
- hard coded value for nu
- changed kinetics (parameter G0 is currently defined as a parameter, needs to be read from material.config)
- added some output statements

constitutive: 
- some functions and subroutines needed additional input variables for passing to constitutive_nonlocal 

crystallite:
- some functions and subroutines needed additional input variables for passing to constitutive
- call microstructure with current temperature, Fp, Fe, not "sub0" values
- show number of IPs, that are "onTrack" instead of those not "onTrack"
- calculate Fe at beginning of substep, since we need it for state preguess
2009-10-07 15:31:52 +00:00
Franz Roters c5865bb7ec corrected calculation of dTdLp 2009-10-02 06:40:12 +00:00
Christoph Kords b09b2b17f3 convergence of state in crystallite is now tested as follows:
(state < relevant state) or (residuum < relative tolerance * state)
since the relevant value for the state variables depend on their nature and can vary by large scales (e.g. volume fraction: 1e-10, dislocation density: 1e5) it is not possible to set a unique value. instead the constitutive law has to decide what is relevant. therefore, all constitutive laws now read in parameters from the material.config that determine the values for relevantState [@luc: in dislobased law relevant State is for the moment generally set to 1e-200, so no additional parameters necessary in material.config. if you also want this feature, we can still implement it, no big deal]

- added sanity checks in constitutive_nonlocal.f90

- corrected coordinate transformation for backstress calculation in constitutive_nonlocal.f90

- corrected equations for evolution of dipole dislocation densities (athermal annihilation and formation by glide)
2009-09-18 15:37:14 +00:00
Franz Roters 2029b23f98 added version information to all files
do NOT edit text like this:
$Id: constitutive_phenopowerlaw.f90 406 2009-08-31 14:13:10Z MPIE\f.roters $
2009-08-31 15:09:15 +00:00
Franz Roters c0d1140234 added a missing "then" 2009-08-28 15:14:27 +00:00
Denny Tjahjanto 3ea17dd2fd CPFEM.f90 >>> A very small, not important thing.
homogenization.f90 and crystallite.f90 >>> Correction in the algorithm to count the iteration distribution (for better statistics).

material.config and numerics.config >>> more collection of parameters.
2009-08-28 15:05:14 +00:00
Christoph Kords f27d66a9ae constitutive_nonlocal:
- dipole dislocations with evolution

crystallite.f90:
- collect state uses subdt and subTstar0_v
- in nonlocal modus: set all crystallites to broken if one is not on track anymore after either stress integration or state update
- constitutive_microstructure is now called inside state update and not in integrate_stress anymore

material.config:
- new parameter for nonlocal constitution

CPFEM.f90:
- age Tstar after increment was finished
2009-08-28 13:50:47 +00:00
Denny Tjahjanto b25396374a homogenization_RGC.f90 >>> adding some lines, mostly for debugging purpose. no critical change.
constitutive_phenopowerlaw.f90 >>> adding new parameter: constitutive_phenopowerlaw_w0_slip, i.e., the hardening rate exponent.
homogenization.f90 >>> most important change is to add an if-else statement (line 379-380) to switch crystallite_requeted = .false. for already converged material point iteration (el/ip). the rest of the changes are cosmetics and debugging stuffs.
crystallite.f90 >>> similar to homogenization.f90, the most important change is to add additional if-else statement (line 574) in the jacobian (perturbation) loop. now the jacobian calculation will only be performed when crystallite_requested = .true.. the rest is only cosmetic.
2009-08-27 12:10:06 +00:00
Christoph Kords 1dbd0865db constitutive_nonlocal.f90
- completed postResults output function
- connecting vector of neighboring material points is mapped to intermediate configuration of my neighbor

crystallite.f90
- zero out dotState only when crystallite is non-finished
- set nonfinished flag to false if crystallite is not on Track after state update
- in updateState: set onTrack flag to false if encounter NaN
- removed some old debugging outputs and added others

homogenization.f90
- in debugging mode now telling when a cutback happens
2009-08-24 08:16:01 +00:00
Luc Hantcherli 93543c21e9 In crystallite_stressAndItsTangent:
state is now correctly collected during perturbation method
2009-08-13 10:04:14 +00:00
Christoph Kords 2aae7b7574 added dislocation multiplication to dotState in constitutive_nonlocal.f90
cleaned up debugging output statements to *.out file
2009-08-12 11:22:02 +00:00
Christoph Kords 8ed3ddc03b now with first draft of nonlocal constitutive law
debugging memory leak closed
debugging counters corrected

center of gravity stored in mesh

state updated is now split into a collecting loop and an execution

updateState and updateTemperature fill sequentially separate logicals and evaluate afterwards to converged

added 3x3 transposition function, norm for 3x1 matrix and 33x3 matrix multiplication in math

non-converged crystallite triggers materialpoint cutback (used to respond elastically)

non-converged materialpoint raises terminal illness which in turn renders whole FE increment useless by means of odd stress/stiffness and thus waits for FE cutback
2009-08-11 16:31:57 +00:00
Denny Tjahjanto 360fb069ba List of changes/modifications:
* IO.f90 :: Adding error messages for RGC homogenization
* crystallite.f90 :: Modifying convergent criteria in crystalline_updateState and crystalline_updateTemperature
* material.f90 :: Adding IO_lc in homogenization_type(Name)
* debug.f90 :: Adding debbugging statement and counter for material point loop
* homogenization.f90 :: Adding homogenization_RGC blocks
* homogenization_isostrain.f90 :: Modifying argument of homogenization_isostrain_stateInit
* mpie_cpfem_marc.f90 :: Adding homogenization_RGC include
* numerics.f90 :: Adding numerical parameters for RGC scheme
* math.f90 :: Changing function name: math_permut to math_civita
2009-07-31 12:02:20 +00:00
Philip Eisenlohr f337847f35 quite some changes:
# non-greedy memory allocation
# generation of outputConstitutive to allow for script-based T16 extraction
# exchange of phenomenological by more general phenopowerlaw
# lattice is based on slip and twin families which can be treated as individual entities (switched on/off, separate hardening, etc.)
# nicer debugging output
# changed some error/warning codes
# plus potentially some minor additional brushes here and there
2009-07-22 16:07:19 +00:00
Luc Hantcherli 4aed2ade80 Major Update: all modules are now correctly submitted 2009-07-01 10:55:31 +00:00
Luc Hantcherli a16b8a619d Major update: corrected treatment of temperature 2009-07-01 10:29:35 +00:00
Franz Roters a6ccfe2e44 restructured the repository: renamed trunk into code, moved documentation one directory up, therefore you can now checkout either code or documentation only if you like 2009-06-25 07:17:59 +00:00