1% `IsotropicStrainHardeningMisesCreep` 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