Architecture of DEFI_COMPOR =========================== Illustration on an example: test SSNV194 ------------------------------------------ Let's start with an example (ssnv194 test). Modeling A: a small aggregate comprising 10 grains: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ACIER = DEFI_MATERIAU (ELAS =_F (E=145200.0, NU=0.3,), MONO_VISC1 =_F (N=10.0, K=40.0, C=1.0,), MONO_ISOT1 =_F (R_0=75.5, Q=9.77, B=19.34), MONO_CINE1 =_F (D=36.68,),); MONO1 = DEFI_COMPOR (MONOCRISTAL =( _F (MATER = ACIER, ELAS =' ELAS ', ECOULEMENT =' MONO_VISC1 ', ECRO_ISOT =' MONO_ISOT1 ', ECRO_CINE =' MONO_CINE1 ', FAMI_SYST_GLIS =' BCC24 ',),),); ORIEN = AFFE_CARA_ELEM (MODELE = TROISD, MASSIF =( _F (GROUP_MA =' GM1 ', ANGL_EULER =( -150.646,33.864,55.646,),), _F (GROUP_MA =' GM2 ', ANGL_EULER =( -137.138,41.5917,142.138,),), _F (GROUP_MA =' GM3 ', ANGL_EULER =( -166.271,35.46958,171.271,),), _F (GROUP_MA =' GM4 ', ANGL_EULER =( -77.676,15.61819,154.676,),), _F (GROUP_MA =' GM5 ', ANGL_EULER =( -78.6463,33.864,155.646,),), _F (GROUP_MA =' GM6 ', ANGL_EULER =( -65.1378,41.5917,142.138,),), _F (GROUP_MA =' GM7 ', ANGL_EULER =( -94.2711,35.46958,71.271,),), _F (GROUP_MA =' GM8 ', ANGL_EULER =( -5.67599,15.61819,154.676,),), _F (GROUP_MA =' GM9 ', ANGL_EULER =( -6.64634,33.864,155.646,),), _F (GROUP_MA =' GM10 ', ANGL_EULER =( 6.86224,41.5917,142.138,),), ),); SOLNL = STAT_NON_LINE (MODELE =... , CHAM_MATER =..., EXCIT =_ ... , CARA_ELEM = ORIEN, COMPORTEMENT =_F (RELATION =' MONOCRISTAL ', COMPOR = MONO1, ),) B and C models: polycrystal comprising 10 grains: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ A hardware point, 10 grains with identical volume fractions :math:`(0.1)`, and orientations similar to those of modeling A (which makes it possible to find the same average solution): MONO1 = DEFI_COMPOR (MONOCRISTAL =(... same as modeling A) COMPORP = DEFI_COMPOR (POLYCRISTAL =( _F (MONOCRISTAL = COMPORT, FRAC_VOL =0.1, ANGL_EULER =( -150.646,33.864,55.646,),), _F (MONOCRISTAL = MONO1, FRAC_VOL =0.1, ANGL_EULER =( -137.138,41.5917,142.138,),), _F (MONOCRISTAL = MONO1, FRAC_VOL =0.1, ANGL_EULER =( -166.271,35.46958,171.271,),), _F (MONOCRISTAL = MONO1, FRAC_VOL =0.1, ANGL_EULER =( -77.676,15.61819,154.676,),), _F (MONOCRISTAL = MONO1, FRAC_VOL =0.1, ANGL_EULER =( -78.6463,33.864,155.646,),), _F (MONOCRISTAL = MONO1, FRAC_VOL =0.1, ANGL_EULER =( -65.1378,41.5917,142.138,),), _F (MONOCRISTAL = MONO1, FRAC_VOL =0.1, ANGL_EULER =( -94.2711,35.46958,71.271,),), _F (MONOCRISTAL = MONO1, FRAC_VOL =0.1, ANGL_EULER =( -5.67599,15.61819,154.676,),), _F (MONOCRISTAL = MONO1, FRAC_VOL =0.1, ANGL_EULER =( -6.64634,33.864,155.646,),), _F (MONOCRISTAL = MONO1, FRAC_VOL =0.1, ANGL_EULER =( 6.86224,41.5917,142.138,),), ), LOCALISATION =' BETA ', DL=0. , DA=0., MU_LOCA =145200./2.6,); **Modeling B: (mesh with only one element)** **...** SOLNL = STAT_NON_LINE (MODELE = TROISD, CHAM_MATER = MAT2, EXCIT =( _F (CHARGE = TRAC, FONC_MULT = COEF, TYPE_CHARGE =' FIXE_CSTE ',),), INCREMENT =( _F (LIST_INST = LINST,),), COMPORTEMENT =( _F (RELATION =' POLYCRISTAL ', COMPOR = COMPORP2, DEFORMATION =' PETIT ', ALGO_INTE =' RUNGE_KUTTA ', TOUT =' OUI ', RESI_INTE_RELA =1.E-6 ),), NEWTON =( _F (PREDICTION =' EXTRAPOLE ', MATRICE =' ELASTIQUE ', REAC_ITER =0,),), CONVERGENCE =( _F (ITER_GLOB_MAXI =50, RESI_GLOB_RELA =1.E-4 ),),); **C modeling: (hardware point)** SOLNL = SIMU_POINT_MAT (COMPORTEMENT =_F (RELATION =' POLYCRISTAL ', COMPOR = COMPORP, ALGO_INTE =' RUNGE_KUTTA ',), NEWTON =_F (MATRICE =' ELASTIQUE ', REAC_ITER =0), MATER =..., NB_VARI_TABLE =6, INCREMENT = ... , EPSI_IMPOSE =... ); Description of DEFI_COMPOR -------------------------- Structure: ~~~~~~~~~~~ The aim of routine OP0050 is to produce the data structure described in [:ref:`D4.06.24 `]: the objects composing this SD are different depending on whether one treats a single crystal (routine OP5901) or a polycrystal (routine OP5902). Addition of crystalline behavior to the catalog of DEFI_MATERIAU/DEFI_COMPOR ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ If the new crystalline behavior uses material parameters different from those already available in the keywords MONO\ _\ *of DEFI_MATERIAU, it suffices to introduce these new behavior parameters, either under a single keyword (case of behaviors MONO_DD\ _\*), or by separating the coefficients relating to isotropic work hardening, kinematic work hardening, and flow (cf. MONO_ISOT *, MONO_CINE*, MONO_VISC *,). These parameters will be used in the integration (routines LCMMAT, LCMMAP), and the corresponding factor keywords will be used in DEFI_COMPOR. Example: catalog of DEFI_MATERIAU .. code-block:: text MONO_DD_CFC = FACT (status='f', rules =( UN_PARMI ('H', 'H1'), PRESENT_PRESENT ('H1', 'H2', 'H2', 'H3', 'H4', 'H5'), PRESENT_ABSENT ('H', 'H1', 'H2', 'H2', 'H3', 'H4', 'H5'),), GAMMA0 = SIMP (status='f', typ='R', default=0.001, units: s**-1"), TAU_F = SIMP (status='O', typ='R', fr="in a unit of constraints ex 20 MPa "), A = SIMP (status='f', typ='R', default=0.13, fr="parameter A, unit-less"), B = SIMP (status='f', typ='R', default=0.005, en="parameter B, unit-less"), N = SIMP (status='f', typ='R', default=200. , fr="parameter n, without units"), Y = SIMP (status='O', typ='R', fr="in unit of length ex 2.5 A"), ALPHA = SIMP (status='f', typ='R', default=0.35, fr="alpha parameter"), BETA = SIMP (status='o', typ='R', fr="parameter b, in unit of length"), ... ), This makes it possible to describe each coefficient, its optional nature (with a possible value by default) or mandatory (for more details, refer to [:ref:`D5.01.01 `]). Depending on the case, the catalog of DEFI_COMPOR is: **MONOCRISTAL** = FACT (status='f', max=5, MATER = SIMP (status='o', typ=mater_sdaster, max=1), ECOULEMENT = SIMP (status='o', typ=' TXM ', into =(' MONO_VISC1 ',' MONO_VISC2 ', 'MONO_DD_CFC', 'MONO_DD_CC', ... ), en="viscoplastic flow type"), ELAS = SIMP (status='f', typ=' TXM ',), # case of a MONO_VISC behavior* b_non_dd= BLOC (condition=" ECOULEMENT ==' MONO_VISC1 ' or ECOULEMENT ==' MONO_VISC2 ', ECRO_ISOT = SIMP (status='f', typ=' TXM ', max=1, en="Give the type of isotropic work hardening"), ECRO_CINE = SIMP (status='f', typ=' TXM ', max=1, en="Give type of kinematic work hardening"), FAMI_SYST_GLIS = SIMP (status='f', typ=' TXM ', into =( 'OCTAEDRIQUE', 'BCC24', '', 'CUBIQUE1', 'CUBIQUE2', 'ZIRCONIUM', 'UNIAXIAL', 'UTILISATEUR'),), b_util = BLOC (condition=" FAMI_SYST_GLIS ==' UTILISATEUR '", TABL_SYST_GLIS = SIMP (status='f', typ=table_saster,),),), # case of DD-like behavior b_dd_cc= BLOC (condition="" ECOULEMENT ==' MONO_DD_CC '", FAMI_SYST_GLIS = SIMP (status='f', typ=' TXM ', into =(' CUBIQUE1 ',' UTILISATEUR ',), b_util= BLOC (condition=" FAMI_SYST_GLIS ==' UTILISATEUR '", TABL_SYST_GLIS = SIMP (status='f', typ=table_saster),),),), MATR_INTER = SIMP (status='f', typ=table_sdaster, max=1,), ROTA_RESEAU = SIMP (status='f', typ=' TXM ', typ='', max=1, into =( 'NON', 'POST', 'CALC'), default=' NON ', fr="network rotation: NON, POST, CALC "), **POLYCRISTAL** = FACT (status='f', max='**', rules= (UN_PARMI ('ANGL_REP', '', 'ANGL_EULER'), MONOCRISTAL = SIMP (status='o', typ=compor_sdaster, max=1), FRAC_VOL = SIMP (status='O', typ='R', fr="volume fraction"), ANGL_REP = SIMP (status='f', typ='R', max=3, fr="nautical angles in degrees"), ANGL_EULER = SIMP (status='f', typ='R', max=3, fr="Euler angles in degrees"), b_poly = BLOC (condition = "POLYCRISTAL! =None", MU_LOCA = SIMP (status='o', typ='R', max=1), LOCALISATION = SIMP (status='f', typ=' TXM ', type='', max=1, into =( 'BZ', 'BETA',), fr=tr ("Give the name of the location rule")), b_beta = BLOC (condition = "LOCALISATION ==' BETA '", DL = SIMP (status='o', typ='R', max=1), DA = SIMP (status='o', typ='R', max=1),), ), The architecture of routines OP5901 and OP5902 is simple, and consists in filling in the sd_compor data structure, intended to prepare the calculations. To do this, several pieces of information are deduced from the user's data: * For single crystal: *the number of sliding systems, either by using the routine** LCMMSG ****, which defines the families of pre-established sliding systems, or by reading the table provided for each family (which is itself stored in the sd_compor) * the number of internal variables that can be deduced from the total number of sliding systems, which will be associated with behavior MONOCRISTAL in COMPORTEMENT. * For polycrystal: * the different monocrystals relating to each grain, with the volume fraction and the orientation * the location rule and its settings. * The total number of internal variables, deduced from the single crystals and the number of grains, which will be associated with behavior POLYCRISTAL in COMPORTMENT. The addition of crystal-clear behavior is therefore reduced, in DEFI_COMPOR, to modifying the catalog for part MONOCRISTAL (for syntactic verification). The addition of a family of sliding systems also means a modification of the DEFI_COMPOR catalog, with possible blocks to manage the possibilities of association between flow laws and families of sliding systems. For part POLYCRISTAL, adding crystal-clear behavior does not change the DEFI_COMPOR catalog, one of the only changes would be the addition of a location rule. You can print the data structure produced using IMPR_CO.