1% `IsotropicMisesCreep` keywords
2
3
4# The `@Author` keyword
5
6The `@Author` keyword is used give the name of the person who wrote
7the `mfront` file.
8
9All the following words are appended to the author's name up to a
10final semi-colon.
11
12Note: The name of the person who formulated the material property,
13behaviour or model shall be given in the description section (see the
14`@Description` keyword).
15
16## Example
17
18~~~~ {#Author .cpp}
19@Author Éric Brunon;
20~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
21
22
23
24# The `@AuxiliaryStateVar` keyword
25
26The `@AuxiliaryStateVar` keyword is a deprecated synonymous of
27`@AuxiliaryStateVariable`.
28
29# The `@AuxiliaryStateVariable` keyword
30
31The `AuxiliaryStateVariable` keyword introduces one or several new
32auxiliary state variables. It is followed by a type name and the
33name(s) of the variable(s) declared, separated by commas.
34
35## Example
36
37~~~~{.cpp}
38// scalar auxiliary state variable
39@AuxiliaryStateVariables strain p;
40// symmetric tensors auxiliary state variable
41@AuxiliaryStateVariables StrainStensor evp,evp2;
42~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
43
44# The `@Behaviour` keyword
45
46The `@Behaviour` defines the name of the behaviour. The name must be a
47valid `C++` class name.
48
49The following characters are legal as the first character of an
50identifier, or any subsequent character:
51
52`_` `a` `b` `c` `d` `e` `f` `g` `h` `i` `j` `k` `l` `m`
53`n` `o` `p` `q` `r` `s` `t` `u` `v` `w` `x` `y` `z`
54`A` `B` `C` `D` `E` `F` `G` `H` `I` `J` `K` `L` `M`
55`N` `O` `P` `Q` `R` `S` `T` `U` `V` `W` `X` `Y` `Z`
56
57The following characters are legal as any character in an identifier
58except the first:
59
60`0` `1` `2` `3` `4` `5` `6` `7` `8` `9`
61
62## Example
63
64~~~~{.cpp}
65@Behaviour Norton;
66~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
67
68# The `@Bounds` keyword
69
70The `@Bounds` keyword let the user define the domain of validity of
71the law.
72
73The `@Bounds` keyword is followed by a variable name, the keyword in
74and an interval. The interval may contain the infinity, represented by
75the '*' character.
76
77## Effect
78
79What happens if a variable if found to be out of its bounds depends on
80the interface used. Most interfaces let the user choose one of three
81following policies:
82
83- `None`, which means that nothing is done.
84- `Warning`, which means that a message is displayed, but computations
85  are not stopped.
86- `Strict`, which means that computations are stopped with an error
87  message.
88
89## Example
90
91~~~~{.cpp}
92@Bounds T in [293.15:873.15];
93~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
94
95
96# The `@Brick` keyword
97
98The `@Brick` keyword introduces a behaviour brick.
99
100## Example
101
102~~~~{.cpp}
103@Brick "StandardElasticity";
104~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
105
106# The `@Coef` keyword
107
108The `@Coef` keyword is a deprecated synonymous of
109`@MaterialProperty`.
110
111# The `@ComputeThermalExpansion` keyword
112
113The keyword `@ComputeThermalExpansion` is not documented yet
114
115# The `@DSL` keyword
116
117The `@DSL` keyword specify the domain specific language (dsl) used.
118
119The list of available dsl's is returned by the `--list-dsl` option of
120`mfront`:
121
122~~~~{.bash}
123$ mfront --list-dsl
124~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
125
126As the time of writting this notice, the following dsl's are available:
127
128- `DefaultDSL`: this parser is the most generic one as it does not
129  make any restriction on the behaviour or the integration method that
130  may be used.
131- `DefaultCZMDSL`: this parser is the most generic one as it does not
132  make any restriction on the behaviour or the integration method that
133  may be used.
134- `DefaultFiniteStrainDSL`: this parser is the most generic one as it
135  does not make any restriction on the behaviour or the integration
136  method that may be used.
137- `Implicit`: this parser provides a generic integrator based on an
138  implicit scheme. The elastic strain is not automatically defined as
139  a state variable
140- `ImplicitII`: this parser provides a generic integrator based on a
141  theta method. Unlike `Implicit`, the elastic strain is not
142  automatically defined as a state variable.
143- `ImplicitFiniteStrain`: this parser provides a generic integrator
144  based on a theta method..
145- `IsotropicMisesCreep`: this parser is used for standard creep
146  behaviours of the form \(\dot{p}=f(s)\) where \(p\) is the equivalent
147  creep strain and \(s\) the equivalent mises stress.
148- `IsotropicPlasticMisesFlow`: this parser is used for standard
149  plastics behaviours with yield surface of the form \(f(s,p)=0\)
150  where \(p\) is the equivalent creep strain and \(s\) the equivalent
151  mises stress.
152- `IsotropicStrainHardeningMisesCreep`: this parser is used for
153  standard strain hardening creep behaviours of the form
154  \(\dot{p}=f(s,p)\) where \(p\) is the equivalent creep strain and
155  \(s\) the equivalent mises stress.
156- `MaterialLaw`: this parser is used to define material properties.
157- `Model`: this parser is used to define simple material models.
158- `MultipleIsotropicMisesFlows `: this parser is used to define
159  behaviours combining several isotropic flows. Supported flow type
160  are 'Creep' (\(\dot{p}=f(s)\)) 'StrainHardeningCreep'
161  (\(\dot{p}=f(s,p)\)) and 'Plasticity' (\(f(p,s)=0\)) where \(p\) is
162  the equivalent plastic strain and \(s\) the equivalent mises stress.
163- `RungeKutta`: this parser provides a generic integrator based on one
164  of the many Runge-Kutta algorithm.
165
166## Example
167
168~~~~{.cpp}
169@DSL Implicit;
170~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
171
172# The `@Date` keyword
173
174The `@Date` keyword allows the user to precise when the mfront file
175was written.
176
177All the following words are appended to the date up to a final
178semi-colon.
179
180## Example
181
182~~~~{.cpp}
183@Date 2008-11-17;
184~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
185
186
187# The `@Description` keyword
188
189The `@Description` describes the material property, behaviour or model
190which is implemented in a mfront file.
191
192This keyword is followed by a block containing all the relevant piece
193of information including:
194
195- the references of the article or technical report from which the
196  material property, behaviour or model is extracted
197- the name of the authors
198- the modifications made
199
200## Example
201
202~~~~{.cpp}
203@Description
204{
205  Corrélation établie sur la nuance V-4Cr-4Ti.
206
207  Propriétés extraites du document :
208
209  Propriétés et comportement mécanique d alliages
210   de Vanadium avant, après et sous irradiation
211
212  Marion Le Flem, Jean-Luc Bechade, Annick Bougault,
213  Aurore Michaux, Lionel Gosmain, Jean-Louis Seran
214  DMN/SRMA/LA2M/NT/2008-2967/A
215}
216~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
217
218# The `@Epsilon` keyword
219
220The `@Epsilon` keyword let the user define the convergence criterion
221value. It is followed by a positive floating-point number.
222
223## The epsilon parameter
224
225The `@Epsilon` keyword defines the default value for the `epsilon`
226parameter. This parameter can be changed at runtime.
227
228## Example
229
230~~~~{.cpp}
231@Epsilon 1.e-12;
232~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
233
234# The `@ExternalStateVar` keyword
235
236The `@ExternalStateVar` keyword is a deprecated synonymous of
237`@ExternalStateVariable`.
238
239# The `@ExternalStateVariable` keyword
240
241The `ExternalStateVariable` keyword introduces one or several new
242external state variables. It is followed by a type name and the
243name(s) of the variable(s) declared, separated by commas.
244
245The external state variables names must be valid `C++` identifiers.
246
247The following characters are legal as the first character of an
248identifier, or any subsequent character:
249
250`_` `a` `b` `c` `d` `e` `f` `g` `h` `i` `j` `k` `l` `m`
251`n` `o` `p` `q` `r` `s` `t` `u` `v` `w` `x` `y` `z`
252`A` `B` `C` `D` `E` `F` `G` `H` `I` `J` `K` `L` `M`
253`N` `O` `P` `Q` `R` `S` `T` `U` `V` `W` `X` `Y` `Z`
254
255The following characters are legal as any character in an identifier
256except the first:
257
258`0` `1` `2` `3` `4` `5` `6` `7` `8` `9`
259
260## Arrays
261
262One may declare an array of external state variables by specifying the
263array size after the external state variable name.
264
265## External names
266
267It is recommended to associate to a external state variable a glossary
268or an entry name through the methods `setGlossaryName` or
269`setEntryName` respectively.
270
271## Example
272
273~~~~{.cpp}
274// scalar external state variable
275@ExternalStateVariable strain s;
276~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
277
278# The `@FlowRule` keyword
279
280The keyword `@FlowRule` is not documented yet
281
282# The `@Import` keyword
283
284The `@Import` keyword allows the inclusion of one or several
285(external) mfront files. This keyword is followed by a string or an
286array of strings. Each string stands for a mfront file name that is
287meant to be imported.
288
289This instruction interrupts the treatment of the current file and
290starts the sequential treatment of each file to be imported.
291
292## Search paths
293
294Files to be imported are searched, in that order:
295
296- starting from the current directory.
297- starting from directories specified with one of the `--search-path`
298  or the `--include` (`-I`) `mfront`' command line options.
299- staring from directories specified through the `MFRONT_INCLUDE_PATH`
300  environment variable.
301
302## Example
303
304~~~~{.cpp}
305@Import "SlidingSystemsCC.mfront";
306~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
307
308# The `@Includes` keyword
309
310The `@Includes` introduces a block were the user may define some
311preprocessor directives, typically #include directives (hence the
312name).
313
314## Example
315
316~~~~{.cpp}
317@Includes{
318#include<fstream>
319}
320~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
321
322# The `@InitLocalVariables` keyword
323
324The `@InitLocalVariables` keyword is a deprecated synonymous of
325`@InitializeLocalVariables`.
326
327# The `@InitLocalVars` keyword
328
329The `@InitLocalVars` keyword is a deprecated synonymous of
330`@InitializeLocalVariables`.
331
332# The `@InitializeLocalVariables` keyword
333
334The `@InitializeLocalVariables` introduces a code block meant to
335initialize the local variables (see the `@LocalVariable` keyword).
336
337## Example
338
339~~~~{.cpp}
340//! volumic fraction of each phase
341@LocalVariable real  fv[Np];
342//! interaction matrix
343@LocalVariable tfel::math::tmatrix<Nss,Nss,real> mh;
344
345@InitLocalVariables<Append>{
346  // volumic fraction of each phase
347  for(unsigned short i=0;i!=Np;++i){
348    fv[i]=1.0/static_cast<real>(Np) ;
349  }
350  // interaction matrix
351  const real h1 = 1.;
352  const real h2 = 1.;
353  const real h3 = 1.;
354  const real h4 = 1.;
355  const real h5 = 1.;
356  const real h6 = 1.;
357  mh = InteractionMatrix::getInteractionMatrix(h1,h2,h3,
358					       h4,h5,h6);
359}
360~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
361
362
363
364# The `@IntegerConstant` keyword
365
366The keyword `@IntegerConstant` is not documented yet
367
368# The `@Integrator` keyword
369
370The keyword `@Integrator` is not documented yet
371
372# The `@Interface` keyword
373
374The `@Interface` keyword let the user specify interfaces to be
375used. The keyword is followed by a list of interface name, separated
376by commas.
377
378Using this keyword is considered a bad pratice. The user shall use the
379`--interface` command line argument to specify which interface shall
380be used.
381
382## Example
383
384~~~~{.cpp}
385@Interface castem;
386~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
387
388# The `@IsotropicBehaviour` keyword
389
390The `@IsotropicBehaviour` declares the behaviour to be isotropic. As
391this symmetry is the default one, this keyword is seldom used.
392
393## Example
394
395~~~~{.cpp}
396@IsotropicBehaviour;
397~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
398
399# The `@IsotropicElasticBehaviour` keyword
400
401The `@IsotropicElasticBehaviour` is used to declare that the elastic
402behaviour is isotropic even though the material as been declared
403orthotropic. This declaration affects the `@RequireStiffnessTensor`
404behaviour.
405
406## Example
407
408~~~~{.cpp}
409@IsotropicElasticBehaviour;
410~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
411
412# The `@IterMax` keyword
413
414The `@IterMax` keyword is a deprecated synonymous of
415`@MaximumNumberOfIterations`.
416
417# The `@Library` keyword
418
419The `@Library` keyword let the user specify part of the generated
420libary name. This keyword is followed by the name of library.
421
422This name must be a valid C++ identifier. The following characters are
423legal as the first character of an identifier, or any subsequent
424character:
425
426`_` `a` `b` `c` `d` `e` `f` `g` `h` `i` `j` `k` `l` `m`
427`n` `o` `p` `q` `r` `s` `t` `u` `v` `w` `x` `y` `z`
428`A` `B` `C` `D` `E` `F` `G` `H` `I` `J` `K` `L` `M`
429`N` `O` `P` `Q` `R` `S` `T` `U` `V` `W` `X` `Y` `Z`
430
431The following characters are legal as any character in an identifier
432except the first:
433
434`0` `1` `2` `3` `4` `5` `6` `7` `8` `9`
435
436## Example
437
438~~~~{.cpp}
439@Library AlcyoneLibrary;
440~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
441
442# The `@Link` keyword
443
444The `@Link` keyword let the user specify additional linker flags used
445to build their shared library/executables. This keyword must be
446followed by a string or an array of strings.
447
448Usage of the `@Link` keyword is deprecated a linker flags are not
449portable. The user may prefer using the `LDFLAGS` environment
450variable.
451
452## Example
453
454~~~~{.cpp}
455// explicit link with libm.so
456// (not necessary in pratice)
457@Link "-lm";
458~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
459
460
461# The `@LocalVar` keyword
462
463The `@LocalVar` keyword is a deprecated synonymous of
464`@LocalVariable`.
465
466# The `@LocalVariable` keyword
467
468The keyword `@LocalVariable` is not documented yet
469
470# The `@MFront` keyword
471
472The keyword `@MFront` is not documented yet
473
474# The `@Material` keyword
475
476The `@Material` keyword let the user specify which material is treated
477by the current file. This keyword is followed by the name of the
478material.
479
480This name must be a valid `C++` identifier. The following characters
481are legal as the first character of an identifier, or any subsequent
482character:
483
484`_` `a` `b` `c` `d` `e` `f` `g` `h` `i` `j` `k` `l` `m`
485`n` `o` `p` `q` `r` `s` `t` `u` `v` `w` `x` `y` `z`
486`A` `B` `C` `D` `E` `F` `G` `H` `I` `J` `K` `L` `M`
487`N` `O` `P` `Q` `R` `S` `T` `U` `V` `W` `X` `Y` `Z`
488
489The following characters are legal as any character in an identifier
490except the first:
491
492`0` `1` `2` `3` `4` `5` `6` `7` `8` `9`
493
494## Example
495
496~~~~{.cpp}
497@Material UO2;
498~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
499
500# The `@MaterialLaw` keyword
501
502The `@MaterialLaw` keyword imports the definition of a material law
503defined in a mfront file and compiles, as part of the current library,
504an function using the `mfront` interface. This function is available
505in every standard code blocks.
506
507The `@MaterialLaw` keyword is followed by a string or an array of
508string identifying `mfront` files.
509
510## Search paths
511
512Files to be imported are searched, in that order:
513
514- starting from the current directory.
515- starting from directories specified with one of the `--search-path`
516  or the `--include` (`-I`) `mfront`' command line options.
517- staring from directories specified through the `MFRONT_INCLUDE_PATH`
518  environment variable.
519
520## Note
521
522The `mfront` interface has been created to avoid names conflict.
523
524For internal reasons, `mfront` reports the creation of an auxiliary
525library which is of no use.
526
527## Example
528
529~~~~{.cpp}
530@MaterialLaw "UO2_YoungModulus.mfront";
531~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
532
533# The `@MaterialProperty` keyword
534
535The `@MaterialProperty` keyword let the user define one or several
536material properties. This keyword is followed by the type of the
537material property and a list of material properties names separated by
538commas.
539
540The material properties names must be valid `C++` identifiers.
541
542The following characters are legal as the first character of an
543identifier, or any subsequent character:
544
545`_` `a` `b` `c` `d` `e` `f` `g` `h` `i` `j` `k` `l` `m`
546`n` `o` `p` `q` `r` `s` `t` `u` `v` `w` `x` `y` `z`
547`A` `B` `C` `D` `E` `F` `G` `H` `I` `J` `K` `L` `M`
548`N` `O` `P` `Q` `R` `S` `T` `U` `V` `W` `X` `Y` `Z`
549
550The following characters are legal as any character in an identifier
551except the first:
552
553`0` `1` `2` `3` `4` `5` `6` `7` `8` `9`
554
555## Arrays
556
557One may declare an array of material properties by specifying the
558array size after the material property name.
559
560## External names
561
562It is recommended to associate to a material property a glossary or an
563entry name through the methods `setGlossaryName` or `setEntryName`
564respectively.
565
566## Example
567
568~~~~{.cpp}
569// scalar material property
570@MaterialProperty stress young;
571young.setGlossaryName("YoungModulus");
572~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
573
574# The `@Members` keyword
575
576The keyword `@Members` is not documented yet
577
578# The `@ModellingHypotheses` keyword
579
580The keyword `@ModellingHypotheses` is not documented yet
581
582# The `@ModellingHypothesis` keyword
583
584The keyword `@ModellingHypothesis` is not documented yet
585
586# The `@OrthotropicBehaviour` keyword
587
588The `@OrthotropicBehaviour` declares the behaviour to be orthotropic.
589
590## Example
591
592~~~~{.cpp}
593@OrthotropicBehaviour;
594~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
595
596# The `@Parameter` keyword
597
598The `@Parameter` keyword declares a new parameter or a list of new
599parameters. Optionally, the default value of the declared parameters
600may also be given following various C++ standard assignment syntaxes.
601
602The default value of a parameter can also be declared after its
603declaration using the `setDefaultValue` method.
604
605## Example
606
607~~~~{.cpp}
608@Parameter  R0 = 500;
609@Parameter  Q1{1000000000},b1{0.000001};
610@Parameter  Q2(0),b2(0);
611@Parameter  fc;
612fc.setDefaultValue(1.e-2);
613~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
614
615
616# The `@Parser` keyword
617
618The `@Paser` keyword is a deprecated synonymous of `@DSL`.
619
620# The `@PhysicalBounds` keyword
621
622The `@PhysicalBounds` keyword let the use define the physical domain
623of a variable.
624
625The `@PhysicalBounds` keyword is followed by a variable name, the
626keyword in and an interval. The interval may contain the infinity,
627represented by the '*' character.
628
629## Effect
630
631In implicit schemes, if physical bounds are set on a integration
632variable, this variable is bounded to satisfy them during the internal
633iterations.
634
635If a variable is found to be out of its physical bounds, the
636computations are stopped. The tests are performed at different stages
637of the integration depending on the nature of the variable.
638
639## Example
640
641~~~~{.cpp}
642// a temperature (in Kelvin) can't be negative
643@Bounds T in [0:*[;
644~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
645
646
647# The `@PredictionOperator` keyword
648
649The keyword `@PredictionOperator` is not documented yet
650
651# The `@Private` keyword
652
653The `@Private` keyword let the user define private methods or members
654of in the generated behaviour class.
655
656## Example
657
658~~~~{.cpp}
659@Private{
660  void display(void) const{
661    std::cout << "eto " << this->eto << std::endl;
662  }
663} // end of @Private
664~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
665
666# The `@Profiling` keyword
667
668The `@Profiling` keyword is followed by a boolean. If true, several
669high resolutions clocks will be introduced in the generated code to
670profile performance bottlenecks. The total time spend in various
671portions of the generated code will be stored and displayed when the
672calling process exits.
673
674## Example
675
676~~~~{.cpp}
677@Profiling true;
678~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
679
680# The `@RequireStiffnessOperator` keyword
681
682The `@RequireStiffnessOperator` keyword is a deprecated synonymous of
683`@RequireStiffnessTensor`.
684
685# The `@RequireStiffnessTensor` keyword
686
687The `@RequireStiffnessTensor` keyword requires the stiffness tensor to
688be computed by the calling code. This generally means that some extra
689material properties will be introduced and handled by the interface
690before the behaviour integration.
691
692By default, the stiffness tensor will have the same symmetry than the
693behaviour (see `@IsotropicElasticBehaviour` to change this in the case
694of an orthotropic behaviour).
695
696~~~~{.cpp}
697@RequireStiffnessTensor true;
698~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
699
700
701
702# The `@RequireThermalExpansionCoefficientTensor` keyword
703
704The `@RequireThermalExpansionCoefficientTensor` keyword requires the
705thermal expansion coefficient tensor to be computed by the calling
706code. This generally means that some extra material properties will be
707introduced and handled by the interface before the behaviour
708integration.
709
710The thermal expansion tensor will have the same symmetry than the
711behaviour. For example, for an isotropic behaviour, the thermal
712expansion tensor will be proportional to the identity. For an
713orthotropic behaviour, the thermal expansion tensor is diagonal and
714expressed in the material frame.
715
716~~~~{.cpp}
717@RequireThermalExpansionCoefficientTensor true;
718~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
719
720# The `@Sources` keyword
721
722The `@Sources` keyword let the user define a code block that will be
723integrated in the generated sources of a behaviour. This allows the
724user to implement their own classes or functions. This declarations of
725such classes or functions can be made in a code block introduced by
726the `@Includes` keyword.
727
728~~~~{.cpp}
729@Includes{
730  //! declaration of the function f
731  void f(void);
732}
733
734@Sources{
735  // source of the function
736  void f(void){
737    std::cout << "Example of a function " << std::endl;
738  } // end of f
739}
740~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
741
742
743# The `@StateVar` keyword
744
745The `@StateVar` keyword is a deprecated synonymous of
746`@StateVariable`.
747
748# The `@StateVariable` keyword
749
750The `StateVariable` keyword introduces one or several new state
751variables. It is followed by a type name and the name(s) of the
752variable(s) declared, separated by commas.
753
754The state variables names must be valid `C++` identifiers.
755
756The following characters are legal as the first character of an
757identifier, or any subsequent character:
758
759`_` `a` `b` `c` `d` `e` `f` `g` `h` `i` `j` `k` `l` `m`
760`n` `o` `p` `q` `r` `s` `t` `u` `v` `w` `x` `y` `z`
761`A` `B` `C` `D` `E` `F` `G` `H` `I` `J` `K` `L` `M`
762`N` `O` `P` `Q` `R` `S` `T` `U` `V` `W` `X` `Y` `Z`
763
764The following characters are legal as any character in an identifier
765except the first:
766
767`0` `1` `2` `3` `4` `5` `6` `7` `8` `9`
768
769## Arrays
770
771One may declare an array of state variables by specifying the array
772size after the state variable name.
773
774## External names
775
776It is recommended to associate to a state variable a glossary or an
777entry name through the methods `setGlossaryName` or `setEntryName`
778respectively.
779
780## Example
781
782~~~~{.cpp}
783// scalar state variable
784@StateVariables strain p;
785// symmetric tensors state variable
786@StateVariables StrainStensor evp,evp2;
787~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
788
789# The `@StaticVar` keyword
790
791The `@StaticVar` keyword is a deprecated synonymous of
792`@StaticVariable`.
793
794# The `@StaticVariable` keyword
795
796The `@StaticVariable` keyword let the user define a constant
797value. Unlike parameters (see the `@Parameter` keyword), static
798variables' values can't be changed after compilation.
799
800This keyword must be followed by the type of the constant, its name,
801an equal sign and its value.
802
803## Example
804
805~~~~{.cpp}
806@StaticVariable real A = 1.234e56;
807~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
808
809# The `@Theta` keyword
810
811The `Theta` keyword is used to define the default value of \(\theta\)
812parameter used by implicit schemes. If the `Theta` keyword is not
813used, implicit domain specific languages provide their own specific
814default value (either \(0.5\) or \(1\)).
815
816The value given to \(\theta\) must be in the range \(]0:1]).
817
818The value of \(\theta\) can be changed at runtime by modifying the
819`theta` parameter (see the `@Parameter` keyword).
820
821## Example
822
823~~~~{.cpp}
824@Theta 0.5;
825~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
826
827# The `@UpdateAuxiliaryStateVariables` keyword
828
829The `UpdateAuxiliaryStateVariables` introduces a code block meant to
830update the auxiliary state variables after integration.
831
832In implicit domain specific languages, the code declared by
833`UpdateAuxiliaryStateVariables` is called once the integration
834variables (including state variables) and stresses (see the
835`@ComputeFinalStress` keyword) have been updated. The external state
836variables are not updated.
837
838In Runge-Kutta domain specific languages, the code declared by
839`UpdateAuxiliaryStateVariables` is called after each successful time
840step. Keep in mind that most Runge-Kutta algorithms performs internal
841substeppings: in this case, the code declared by
842`UpdateAuxiliaryStateVariables` may be called several time during the
843behaviour integration. An additional variable called `dt_`, which is
844lower than the total time step increment `dt` if substeppings is
845performed, gives the current time increment. The external state
846variables are set to their values at the current date.
847
848## Example (Implicit dsl)
849
850~~~~{.cpp}
851@UpdateAuxiliaryStateVariables{
852  // valeur de milieu de pas, q ayant
853  // déjà été mis à jour
854  const real q_ = q-(1-theta)*dq;
855  const real Q = Q0 + (Qm - Q0) * (1 - exp(-2 * Mu * q_) );
856  R+=b*(Q-R)*dp;
857}
858~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
859
860## Example (Runge-Kutta dsl)
861
862~~~~{.cpp}
863@UpdateAuxiliaryStateVariables{
864  sigeq = sqrt(sig|sig);
865}
866~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
867
868# The `@UpdateAuxiliaryStateVars` keyword
869
870The `@UpdateAuxiliaryStateVars` keyword is a deprecated synonymous of
871`@UpdateAuxiliaryStateVariables`.
872
873# The `@UsableInPurelyImplicitResolution` keyword
874
875The `@UsableInPurelyImplicitResolution` is a specifier which states
876that the behaviour is usable in a purely implicit resolution, i. e. if
877we can call the behaviour by only providing the values of external
878state variables at the end of the time step and by setting their
879increments to zero.
880
881This behaviour characteristic may or may not have any influence
882depending on the calling code. As the time of writting this notice,
883only the `Licos` fuel performance code take advantage of this
884characteristic. If true, the `Licos` code will simplify the definition
885of the external state variables (called material loadings in this
886context) which may result in some gain in time and memory space.
887
888## Example
889
890~~~~{.cpp}
891@UsableInPurelyImplicitResolution true;
892~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
893
894
895# The `@UseQt` keyword
896
897The `UseQt` keyword (use quantities) specify if the behaviour
898compilation should perform compile-time units checks. It is followed
899by a boolean.
900
901## Note
902
903This feature is still experimental and is disabled in most cases.
904
905## Example
906
907~~~~{.cpp}
908@UseQt true;
909~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
910