* VARIHCSU PROCEDUR BR232186 16/12/05 22:04:41 9238 **************************************************** * Procedure de tracking par resolution d'un probleme * de convection-diffusion thermique stationnaire * Application au modele E-FEM * Version : * Variable online global tracking * Creation : * Francesco RICCARDI 22/08/2016 * Benjamin RICHARD * Contact : * Francesco.Riccardi[at]cea.fr * Benjamin.Richard[at]cea.fr * Institution : * CEA\DEN\DANS\DM2S\SEMT\EMSI **************************************************** * Voir notice TRACKING pour plus d'informations **************************************************** * *******----DEBUT Procedure VARIHCSU----******* * * Indice d'evolution NPAS = NPAS - 1; *LIST NPAS; * Modeles MODEL1 = TAB2. 'MODELE'; * Modele et materiau EFEM MODEL11 = MODELS. 1; SURFACE1 = MODELS. 2; MATr1 = TAB2. 'WTABLE'. 'CARACTERISTIQUES'; * Coordonnees de la geometrie * Nombre de root elements NROOTS = TAB2. 'NROOTS'; *LIST NROOTS; * Nombre maximum de fissures MAXR = TAB2. 'NRMAX'; * Variables internes : NFLA *TRAC FLAG MODEL11; * Variables internes : diffusion artificielle DIFART * Maximum des contraintes principales SIG1 = TAB2. 'CONTINUATION'. 'CONTRAINTES'; * *----- Debut algorithme de tracking --------------------------- * SI ((SIGMAX > 0.) ET (NPAS < (TAB2. 'NPAS_TRACKING'))); * Elements qui violent le critere de resistance ***dans la phase elastique lineaire VFLAG=0*** SI (VFLAG EGA 0.); SINON; MESH0 = TAB2. 'MESH'. (NPAS - 1); ***pour assurer que les points test n'appartiennent pas a MESH0*** ***cela peut se passer si on a des bloccages*** FINSI; SI (NTEST > 0); FINSI; TABISO0 = TABLE; TABROOT = TABLE; TABEROOT = TABLE; SI (VFLAG EGA 0); SI (NROOTS EGA 1); TABROOT. 1 = TAB2. 'PROOTS'. 1; TABEROOT. 1 = TAB2. 'EROOTS'. 1; FINSI; SINON; i = 0; ***NROOTS est surement >0*** REPETER BOUCLE1 NROOTS; indice = i * 4; LXIN0 = TAB2. 'TABISO'. (indice + 1); LYIN0 = TAB2. 'TABISO'. (indice + 2); LXOUT0 = TAB2. 'TABISO'. (indice + 3); LYOUT0 = TAB2. 'TABISO'. (indice + 4); MESH0 = TAB2. 'MESH_ISO'. (i + 1); * Nombre de points qui composent la fissure ***si tous les elements sont actives on touche rien*** SI ((NACT > 0) ET (NACT < DIMM0)); SI ((NACT + 1) EGA DIMM0); LISTEN0 = DIMM0; SINON; FINSI; * Partie activee de la fissure FINSI; LXG0 = (LXIN0 + LXOUT0) / 2.; LYG0 = (LYIN0 + LYOUT0) / 2.; TABROOT. (i + 1) = TAB2. 'PROOTS'. (i + 1); TABEROOT. (i + 1) = TAB2. 'EROOTS'. (i + 1); ***le point root est le point output du dernier element active*** ***si NACT=0 il coincide avec celui du pas precedent*** SI (NACT > 0); FINSI; TABISO0. (indice + 1) = LXIN0; TABISO0. (indice + 2) = LYIN0; TABISO0. (indice + 3) = LXOUT0; TABISO0. (indice + 4) = LYOUT0; i = i + 1; FIN BOUCLE1; FINSI; SI (NTEST > 0); * Points root potentiels ordonnes par contrainte decroissante TABTEST = TABLE; i = 0; REPETER BOUCLE2 NTEST; i = i + 1; SI (i EGA 1); SINON; FINSI; FIN BOUCLE2; TABTEST. 1 = LPTEST; TABTEST. 2 = LSP11; FINSI; * *\\\\ Resolution du probleme de convection-diffusion ////* * * Cosinus des tangentes * Champ vectoriel des tangentes *SIGMA22 = MANU 'CHML' MODEL11 'SI22' 1. 'TYPE' *'CONTRAINTES PRINCIPALES' 'STRESSES'; *PRIN12 = (SIGMA22 ET COS2X ET COS2Y ET COS2Z); *VECTAN = VECT PRIN12 MODEL11 0.001 'SI22'; * Modele de Navier-Stokes * Champ de vitesse UXX = COS2X; UYY = COS2Y; CHPON = ((CHPO1 ** 2) + (CHPO2 ** 2)) ** 0.5; (CHPO1 ET CHPO2); * Conditions aux limites thermiques LCL1 = TAB1. 'LBC'; VALCL1 = TAB2. 'BCSTH'; * Diffusion artificielle *DIFART = 1.E-9; * Table de resolution 'OPTI' 'EF' 'IMPL' 'CENTRE' 'ZONE' $MS1 'OPER' 'KONV' 1. 'UN' 'ALF' 'INCO' 'TN' 'OPTI' 'EF' 'IMPL' 'CENTREE' 'ZONE' $MS1 'OPER' 'LAPN' 'ALF' 'INCO' 'TN' 'CLIM' LCL1 'TN' 'TIMP' VALCL1; RV . 'INCO' = TABLE 'INCO'; RV . 'INCO' . 'UN' = CHO; *RV . 'INCO' . 'ALF' = KCHT $MS1 'SCAL' 'CENTRE' DIFART; RV . 'INCO' . 'ALF' = DIFART; * Resolution EXEC RV; RESF = RV. 'INCO'. 'TN'; TAB2. 'RESTH'. NPAS = RESF; * *\\\\ Extraction des isovaleurs ////* * SI (NROOTS EGA MAXR); NTEST = 0; FINSI; TISOPAS = TABLE; TABMESH1 = TABLE; ***on choisit un point du domaine en faisant l'hypothese*** ***que aucune fissure passe par ceci*** i = 0; REPETER BOUCLE3 (NROOTS + NTEST); i = i + 1; * Fissure activees aux pas precedents SI (i <EG NROOTS); PPA = TABROOT. i; * TRAC (ISOVG ET (CONT SURFACE1)); ***cette phase est critique*** ***si on perd l'unicite de la solution ORDO ne marche pas*** ***arreter la procedure de tracking*** T01 = T0 - T0G; * Extraction du maillage ISOVG = TAB2. 'ISOTEST'. i; FINSI; MESH1 = MESH1 ET MESHISO; TISOPAS. i = ISOVG; TABMESH1. i = MESHISO; TAB2. 'ISOTEST'. i = ISOVG; * Nouvelles fissures ***on fait l'hypothese d'avoir une seule nouvelle fissure*** ***par pas de temps*** SINON; * Extraction du maillage T01 = T0 - T0G; * On verifie s'il y a des intersection entre maillages ***dans ce cas la on ecarte l'isovaleur*** * TRAC (ISOVG ET (CONT SURFACE1)); ***on fait l'hypothese que le root element appartient au contour*** FINSI; TABROOT. (NROOTS + 1) = PROOT; TABEROOT. (NROOTS + 1) = ETEST; TISOPAS. (NROOTS + 1) = ISOVG; TAB2. 'ISOTEST'. (NROOTS + 1) = ISOVG; TABMESH1. (NROOTS + 1) = MESHISO; TAB2. 'NROOTS' = (TAB2. 'NROOTS') + 1; QUIT BOUCLE3; FINSI; FINSI; FIN BOUCLE3; TAB2. 'PROOTS' = TABROOT; TAB2. 'EROOTS' = TABEROOT; ***cette partie sert a creer un systeme d'abscisses curvilignes*** ***avec sense positif selon celui de propagation des fissures*** ***l'origine est en pointe de fissure*** TABISO1 = TABLE; *LIST NN; i = 0; REPETER BOUCLE4 NN; i = i + 1; indice = (i - 1) * 4; PROOT = TABROOT. i; EROOT = TABEROOT. i; ISOVG = TISOPAS. i; MESHISO = TABMESH1. i; NACT = 0; SI ((VFLAG > 0.) ET (i <EG NROOTS)); FINSI; j = 0; REPETER B_INT NUMP; j = j + 1; SI (Pj EGA PROOT 1.E-10); jroot = j; * LIST jroot; * LIST NUMP; QUIT B_INT; FINSI; FIN B_INT; LISABSC1 = LISABSC - ((LISP / LISP) * SROOT); TABABS = TABLE; TABABS. 1 = LISABSC1; TABABS. 2 = LISP; TABABS. 3 = LISX; TABABS. 4 = LISY; SI (NACT EGA 0); ***si MM=0 il faut changer le signe*** SI ((MM EGA 0.)); TABABS. 1 = -1. * LISABSC1; FINSI; ***le dernier point est un point de sortie*** ***le premier point est un point d'entree*** TABISO1. (indice + 1) = LXIN; TABISO1. (indice + 2) = LYIN; TABISO1. (indice + 3) = LXOUT; TABISO1. (indice + 4) = LYOUT; SINON; TABISO1. (indice + 1) = TABISO0. (indice + 1); TABISO1. (indice + 2) = TABISO0. (indice + 2); TABISO1. (indice + 3) = TABISO0. (indice + 3); TABISO1. (indice + 4) = TABISO0. (indice + 4); SI (NACT < NUMEL); ***on cherche le point correspondant a la pointe de fissure*** SI (TEST > 0); TABABS. 1 = -1. * LISABSC1; jroot = (NUMP - jroot) + 1; FINSI; SI (jroot EGA 2); LISTEN = 1; SINON; FINSI; * Partie potentielle de la fissure * On integre avec la partie activee TABISO1. (indice + 1) = TABISO0. (indice + 1) ET LXIN1; TABISO1. (indice + 2) = TABISO0. (indice + 2) ET LYIN1; TABISO1. (indice + 3) = TABISO0. (indice + 3) ET LXOUT1; TABISO1. (indice + 4) = TABISO0. (indice + 4) ET LYOUT1; FINSI; FINSI; FIN BOUCLE4; TAB2. 'TABISO' = TABISO1; * *\\\\ Creation des chamelem ////* * ***CHM vaut sur les isovaleurs et 0 ailleurs*** CHM = SIGMA11 * 0.; * Abscisses des points d'entree des fissures CHIX = CHM; * Ordonnees des points d'entree des fissures CHIY = CHM; * Composante x des normales CHNX = CHM; * Composante y des normales CHNY = CHM; i = 0; REPETER BOUCLE5 NN; i = i + 1; indice = (i - 1) * 4; MESHISO = TABMESH1. i; NACT = 0; SI ((VFLAG > 0.) ET (i <EG NROOTS)); FINSI; LXIN = TABISO1. (indice + 1); LYIN = TABISO1. (indice + 2); LXOUT = TABISO1. (indice + 3); LYOUT = TABISO1. (indice + 4); LXG = (LXIN + LXOUT) / 2.; LYG = (LYIN + LYOUT) / 2.; SI (NACT EGA 0); MTEST = MESHISO; SINON; MTEST = MDIFF ET MESHACT; FINSI; j = 0; j = j + 1; * Coordonnees des points entree et sortie * Coordonnees des points moyens PGj = XGj YGj; * Calcul de la tangente et de la normale a la fissure LL = (((XIj - XOj) ** 2) + ((YIj - YOj) ** 2)) ** 0.5; SI (YIj > YOj); TY = (YIj - YOj) / LL; TX = (XIj - XOj) / LL; SINON; TY = (YOj - YIj) / LL; TX = (XOj - XIj) / LL; FINSI; SI (YIj EGA YOj); TY = 0.; TX = -1.; FINSI; NX = TY; NY = -1. * TX; * Element contenant le point moyen * Champ nul sauf dans ELi CHP = CHPX * CHPY; * Champs par elements pour le model EFEM CHM = CHM + CHP; CHIX = CHIX + (CHP * XIj); CHIY = CHIY + (CHP * YIj); CHNX = CHNX + (CHP * NX); CHNY = CHNY + (CHP * NY); * Extraction de la mesh de la fissure potentielle SI(j EGA 1); MESHi = ELj; SINON; MESHi = MESHi ET ELj; FINSI; FIN B_INT; TAB2. 'ISOTOT'. i = LISO; TAB2. 'MESH_ISO'. i = MESHi; TAB2. 'MESH'. NPAS = (TAB2. 'MESH'. NPAS) ET MESHi; FIN BOUCLE5; *TRAC CHM MODEL11; * *\\\\ Mise a jour des parametres materiaux ////* * MATr2 = MATE MODEL11 YOUN E11 NU NU11 FT P11 XNX CHNX XNY CHNY IND1 CHM XIE CHIX YIE CHIY; MATr1 = MATr2; TAB2. 'WTABLE'. 'CARACTERISTIQUES' = MATR1; FINSI; FINP MATR1;
© Cast3M 2003 - Tous droits réservés.
Mentions légales