From 897bbb763ddd6684f32a24c6c3adddc157ec7c5b Mon Sep 17 00:00:00 2001 From: troufflard <> Date: Tue, 27 Sep 2016 14:24:16 +0000 Subject: [PATCH] ajout test en attente debug : Tests_en_attente_debug/Test_R_contact_TYPE_MATRICE/ (bug lors de l utilisation conjointe des fonctions : contact + TYPE_MATRICE + TYPE_RESOLUTION_S_SECONDAIRE_S_; voir commentaires dans le README); modif du script Perl/test.pl : ajout d un nouveau message d erreur produisant un ECHEC de test (voir evolution des mises a jour dans doc_procedure_verification.pdf) --- Doc/doc_procedure_verification.tex | 6 + Perl/test.pl | 9 +- .../Test_R_contact_TYPE_MATRICE/README | 62 ++++ .../contact_TYPE_MATRICE.CVisu1 | 298 ++++++++++++++++++ .../contact_TYPE_MATRICE.info | 97 ++++++ .../Test_R_contact_TYPE_MATRICE/cube.her | 18 ++ .../Test_R_contact_TYPE_MATRICE/cube.lis | 158 ++++++++++ .../Test_R_contact_TYPE_MATRICE/plateau.her | 18 ++ .../Test_R_contact_TYPE_MATRICE/plateau.lis | 158 ++++++++++ doc_procedure_verification.pdf | Bin 249763 -> 250152 bytes 10 files changed, 821 insertions(+), 3 deletions(-) create mode 100644 Tests_en_attente_debug/Test_R_contact_TYPE_MATRICE/README create mode 100644 Tests_en_attente_debug/Test_R_contact_TYPE_MATRICE/contact_TYPE_MATRICE.CVisu1 create mode 100644 Tests_en_attente_debug/Test_R_contact_TYPE_MATRICE/contact_TYPE_MATRICE.info create mode 100644 Tests_en_attente_debug/Test_R_contact_TYPE_MATRICE/cube.her create mode 100644 Tests_en_attente_debug/Test_R_contact_TYPE_MATRICE/cube.lis create mode 100644 Tests_en_attente_debug/Test_R_contact_TYPE_MATRICE/plateau.her create mode 100644 Tests_en_attente_debug/Test_R_contact_TYPE_MATRICE/plateau.lis diff --git a/Doc/doc_procedure_verification.tex b/Doc/doc_procedure_verification.tex index 07b5749..375dc19 100644 --- a/Doc/doc_procedure_verification.tex +++ b/Doc/doc_procedure_verification.tex @@ -1139,6 +1139,12 @@ pour ces 2 scripts, une gestion des signaux d'interruption \verb|INT| et \verb|T \item[-] modif du script \verb|test.pl| : désormais, la vérification du status d'un calcul se fait avant l'exécution d'un éventuel script de post-traitement. Concernant le status, il y a désormais une vérification de la présence de messages d'erreur dans la subroutine \verb|lancement_calcul()|. Pour l'instant, seul le message \verb|Segmentation fault| figure dans cette liste. Cette liste a vocation à répertorier les messages d'erreur d'ordre "informatique", pas d'ordre "mécanique" ou en lien avec les éléments finis (la logique veut que les aspects numériques ou mécaniques sont des domaines qui doivent \^etre vérifiés par un \verb|.maple.ref|). La raison de cette nouvelle vérification est que les tests ayant \verb|Segmentation fault| étaient considérés comme réussis d'un point de vue informatique... ce qui pouvait conduire à croire qu'un test n'avait pas de problème. \end{itemize}%tiret +~\\ +\item[$\bullet$] 2016-09-27 (Julien Troufflard) : +\begin{itemize} +\item[-] modif du script \verb|test.pl| : ajout d'un nouveau message d'erreur fatal dans la liste des erreurs à repérer dans le fichier de redirection \verb|.log|. Désormais, si Herezh++ produit un message de la forme "\verb|erreur (...message...) detectee|", le test est considéré comme \verb|ECHEC| +\end{itemize}%tiret + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %template d ajout d une nouvelle mise à jour (composé d'une puce "bullet" avec Date et auteur de la modif, suivie d une série de puce "-" %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/Perl/test.pl b/Perl/test.pl index c823582..67e9a28 100755 --- a/Perl/test.pl +++ b/Perl/test.pl @@ -1406,7 +1406,10 @@ sub lancement_commande { # Remarques : 1) il s agit de repertorier les messages d erreur fatal. C'est-a-dire des problemes # plutot en lien avec l informatique, et pas la mecanique. # 2) ATTENTION a bien recopier le message d erreur fourni par Herezh (les majuscules et le nombre d espaces comptent!!!) - my @liste_message_erreur = ('Segmentation fault'); + + my @liste_message_erreur = ('Segmentation fault', + 'erreur \(.+\) detectee' #ce motif permet de reconnaitre la chaine 'erreur ' suivie d un message quelconque entre parentheses, suivi de la chaine ' detectee' + ); #initilisation du status a "ok" $status_calcul = 'ok'; @@ -1415,8 +1418,8 @@ sub lancement_commande { open(my $Hlocal, "<$fredir_tee"); LECTURE_FIC:while(<$Hlocal>) { foreach my $message (@liste_message_erreur) { - if(/$message/) { - $status_calcul = $message; + if(/($message)/) { + $status_calcul = $1; last LECTURE_FIC; } } diff --git a/Tests_en_attente_debug/Test_R_contact_TYPE_MATRICE/README b/Tests_en_attente_debug/Test_R_contact_TYPE_MATRICE/README new file mode 100644 index 0000000..d2a7805 --- /dev/null +++ b/Tests_en_attente_debug/Test_R_contact_TYPE_MATRICE/README @@ -0,0 +1,62 @@ +------------------------------------------------------ +Auteur +------------------------------------------------------ +Julien Troufflard (troufflard@univ-ubs.fr) + +------------------------------------------------------ +Mots-cles +------------------------------------------------------ +compression +contact +TYPE_MATRICE +BANDE_SYMETRIQUE_LAPACK +MATRICE_S_SECONDAIRE_S_ +TYPE_RESOLUTION_S_SECONDAIRE_S_ + +------------------------------------------------------ +But du test +------------------------------------------------------ +test purement "informatique" de l utilisation conjointe des fonctionnalités : + - contact + - para_syteme_lineaire $\rightarrow$ TYPE_MATRICE BANDE_SYMETRIQUE_LAPACK + - para_syteme_lineaire $\rightarrow$ MATRICE_S_SECONDAIRE_S_ + - para_syteme_lineaire $\rightarrow$ TYPE_RESOLUTION_S_SECONDAIRE_S_ + +@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +--- à effacer du README --- + +Sans contact, le calcul tourne (TYPE_MATRICE + MATRICE_S_SECONDAIRE_S_= OK) + +Sans matrice secondaire, le calcul tourne (contact + TYPE_MATRICE = OK). + +La conjonction des 3 ne tourne pas (contact + TYPE_MATRICE + MATRICE_S_SECONDAIRE_S_ = ECHEC) + +La conjonction des 3 tourne avec la version 6.768 + +IMPORTANT : le .CVisu actuel fait une sortie .maple pour tous les noeuds des 2 maillages de diverses grandeurs + liées au contact et aux réactions. La plupart sont nulles. Peut-etre que certaines d entre-elles + ne devrait pas etre nulles ? + => sorties à vérfier avant de générer un .maple.ref + + +@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ + +------------------------------------------------------ +Description du calcul +------------------------------------------------------ +compression uniaxiale suivant Y d un cube unitaire. La compression est appliquée par contact avec un second maillage (également un maillage à un seul élément). Les déplacements de ce second maillage sont entièrement gouvernés par les conditions limites (cube infiniment rigide). Le cube déformable a des conditions de symétrie usuelles pour une compression uniaxiale. + + +------------------------------------------------------------- +Grandeurs de comparaison +------------------------------------------------------------- +@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +--- à effacer du README --- + +à définir + +@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ diff --git a/Tests_en_attente_debug/Test_R_contact_TYPE_MATRICE/contact_TYPE_MATRICE.CVisu1 b/Tests_en_attente_debug/Test_R_contact_TYPE_MATRICE/contact_TYPE_MATRICE.CVisu1 new file mode 100644 index 0000000..09caed5 --- /dev/null +++ b/Tests_en_attente_debug/Test_R_contact_TYPE_MATRICE/contact_TYPE_MATRICE.CVisu1 @@ -0,0 +1,298 @@ +############################################################################################### +# Fichier de commande pour la visualisation elements finis # +# Herezh++ V6.774 # +# Copyright (c) 1997-2016, Gerard Rio (gerard.rio@univ-ubs.fr) http://kleger.univ-ubs.fr/Herezh/ # +# http://www-lg2m.univ-ubs.fr # +############################################################################################### + + + + debut_fichier_commande_visu # >>>>>> le mot cle: + # permet au programme de se positionner au debut du fichier, il est indispensable + + + # ================================================================================= + # || ***** demande d'une visualisation maple: ***** || + # ================================================================================= + # un mot cle de debut (debut_visualisation_maple) + # un mot cle de fin ( fin_visualisation_maple) + # la seule presence de ces deux mots cle suffit a activer la visualisation maple + debut_visualisation_maple + + # ----------------------------- definition de la liste des increments a balayer: ---------------- + debut_list_increment # un mot cle de debut de liste + actif 1 # <0 ou 1> indique si l'ordre est actif ou non + # une liste d'entier separee par des blancs, ou le mot cle (tous_les_increments) + # un mot cle de fin de liste ( fin_list_increment) + dernier_increment fin_list_increment + + # ----------------------------- choix des maillages a visualiser: ---------------- + # la liste est facultative, par defaut la visualisation concerne le premier maillage + debut_choix_maillage # un mot cle de debut, + actif 0 # <0 ou 1> indique si l'ordre est actif ou non + # une liste d'entiers , puis , sur une meme ligne + 1 2 fin_choix_maillage + + # ----------------------------- definition des grandeurs a visualiser (maple): ---------------- + debut_grandeurs_maple # un mot cle de debut (debut_grandeurs_maple), + actif 1 # <0 ou 1> indique si l'ordre est actif ou non + # les grandeurs globales (energie, puissance ....) un mot cle de debut, le nom des grandeurs puis un mot de fin + debut_grandeurs_globales fin_grandeurs_globales + # ensuite pour chaque maillage:, + # le numero du maillage , + # les infos pour la visualisation eventuelle des torseurs de reaction, + # les infos pour la visualisation eventuelle aux noeud, + # - tout d'abord les ddl principaux (position, deplacements, temperature etc.) + # - puis les ddl etendus et particulieres qui peuvent representer des grandeurs diverses + # les infos pour la visualisation eventuelle aux elements, + # - tout d'abord les grandeurs generiques (deformations, contraintes etc.) + # - puis les grandeurs particulieres, par exemple specifique a une loi de comp ou une mesure de def + # enfin un mot cle de fin ( fin_grandeurs_maple) + 1 # le numero de maillage + # les torseurs de reaction: un mot cle de debut: debut_list_torseur_reaction + # une liste de nom , puis + debut_list_torseur_reaction fin_list_torseur_reaction + # les sommes, moyennes etc. sur ref de noeuds: un mot cle de debut: debut_list_SM_sur_refN + # une liste de nom de ref , puis + debut_list_SM_sur_refN fin_list__SM_sur_refN + # debut de la liste des ddl a considerer , (une liste de ddl), puis + deb_list_ddl_SM_sur_refN fin_list_ddl_SM_sur_refN + # debut de la liste des ddl etendus a considerer, (une liste de ddl), puis + deb_list_ddl_etendu__SM_sur_refN fin_list_ddl_etendu__SM_sur_refN # fin des ddl etendu pour _SM_sur_refNs + # debut de la liste des grandeurs particulieres a considerer, (une liste de string), puis + deb_list_GrandParticuliere__SM_sur_refN fin_list_GrandParticuliere__SM_sur_refN # fin des grandeurs particulieres aux _SM_sur_refNs + # les SM sur ref d'elements: un mot cle de debut: debut_list_SM_sur_refE + # une liste de nom de ref d'elements , le pti associe + # puis + debut_list_SM_sur_refE fin_list__SM_sur_refE + # les SMs sur ref de pti: un mot cle de debut: debut_list_SM_sur_refpti + # une liste de nom de ref , puis + debut_list_SM_sur_refpti fin_list__SM_sur_refpti + # debut de la liste des ddl a considerer , (une liste de ddl), puis + deb_list_ddl__SM_sur_refEpti fin_list_ddl__SM_sur_refEpti # fin de la liste de ddl a considerer pour les elements + # debut de la liste des grandeurs particulieres a considerer pour les _SM_sur_refEptis, (une liste de string), puis + deb_list_GrandParticuliere__SM_sur_refEpti fin_list_GrandParticuliere__SM_sur_refEpti # fin des grandeurs particulieres aux _SM_sur_refEptis + # tableau de grandeurs evoluees aux _SM_sur_refEptis a visualiser, un par maillage + deb_list_GrandEvoluee__SM_sur_refEpti fin_list_GrandEvoluee__SM_sur_refEpti + debut_liste_ddl_et_noeud # ** debut des ddl principaux aux noeuds + # debut de la liste de noeuds, puis une liste de numero de noeud , puis + deb_list_noeud fin_list_noeud + # debut de la liste des ref de noeuds, puis une liste de nom , puis + deb_list_ref_noeud N_tout fin_list_ref_noeud + # debut de la liste des ddl a considerer aux noeuds, (une liste de ddl), puis + deb_list_ddl_noeud X1 X2 X3 R_X1 R_X2 R_X3 fin_list_ddl_noeud + type_sortie_ddl_retenue= 0 + # debut de la liste des ddl etendus a considerer aux noeuds, (une liste de ddl), puis + deb_list_ddl_etendu_noeud fin_list_ddl_etendu_noeud # fin des ddl etendu aux noeuds + # debut de la liste des grandeurs particulieres a considerer aux noeuds, (une liste de string), puis + deb_list_GrandParticuliere_noeud VECT_REAC_N PENETRATION_CONTACT FORCE_CONTACT fin_list_GrandParticuliere_noeud # fin des grandeurs particulieres aux noeuds + fin_liste_ddl_et_noeud # fin des grandeurs aux noeuds + debut_liste_ddl_ptinteg # ** debut des grandeurs aux elements + # debut de la liste des elements et points d'integration, une liste de (un element, un numero de pt d'integ), puis + deb_list_NbElement_NbPtInteg 1 1 fin_list_NbElement_NbPtInteg + # debut de la liste des ref d'elements, puis une liste de: nom + numero d'integ, puis + deb_list_ref_element fin_list_ref_element + # debut de la liste des ref de ptinteg d'elements, puis une liste de: nom puis + deb_list_ref_ptinteg_element fin_list_ref_ptinteg_element + # debut de la liste des ddl a considerer pour les elements, (une liste de ddl), puis + deb_list_ddl_element SIG11 EPS11 EPS22 EPS33 fin_list_ddl_element # fin de la liste de ddl a considerer pour les elements + # debut de la liste des grandeurs particulieres a considerer pour les elements, (une liste de string), puis + deb_list_GrandParticuliere_element fin_list_GrandParticuliere_element # fin des grandeurs particulieres aux elements + # tableau de grandeurs evoluees aux elements a visualiser, un par maillage + deb_list_GrandEvoluee_element fin_list_GrandEvoluee_element + fin_liste_ddl_ptinteg # fin des grandeurs aux elements + 2 # le numero de maillage + # les torseurs de reaction: un mot cle de debut: debut_list_torseur_reaction + # une liste de nom , puis + debut_list_torseur_reaction fin_list_torseur_reaction + # les sommes, moyennes etc. sur ref de noeuds: un mot cle de debut: debut_list_SM_sur_refN + # une liste de nom de ref , puis + debut_list_SM_sur_refN fin_list__SM_sur_refN + # debut de la liste des ddl a considerer , (une liste de ddl), puis + deb_list_ddl_SM_sur_refN fin_list_ddl_SM_sur_refN + # debut de la liste des ddl etendus a considerer, (une liste de ddl), puis + deb_list_ddl_etendu__SM_sur_refN fin_list_ddl_etendu__SM_sur_refN # fin des ddl etendu pour _SM_sur_refNs + # debut de la liste des grandeurs particulieres a considerer, (une liste de string), puis + deb_list_GrandParticuliere__SM_sur_refN fin_list_GrandParticuliere__SM_sur_refN # fin des grandeurs particulieres aux _SM_sur_refNs + # les SM sur ref d'elements: un mot cle de debut: debut_list_SM_sur_refE + # une liste de nom de ref d'elements , le pti associe + # puis + debut_list_SM_sur_refE fin_list__SM_sur_refE + # les SMs sur ref de pti: un mot cle de debut: debut_list_SM_sur_refpti + # une liste de nom de ref , puis + debut_list_SM_sur_refpti fin_list__SM_sur_refpti + # debut de la liste des ddl a considerer , (une liste de ddl), puis + deb_list_ddl__SM_sur_refEpti fin_list_ddl__SM_sur_refEpti # fin de la liste de ddl a considerer pour les elements + # debut de la liste des grandeurs particulieres a considerer pour les _SM_sur_refEptis, (une liste de string), puis + deb_list_GrandParticuliere__SM_sur_refEpti fin_list_GrandParticuliere__SM_sur_refEpti # fin des grandeurs particulieres aux _SM_sur_refEptis + # tableau de grandeurs evoluees aux _SM_sur_refEptis a visualiser, un par maillage + deb_list_GrandEvoluee__SM_sur_refEpti fin_list_GrandEvoluee__SM_sur_refEpti + debut_liste_ddl_et_noeud # ** debut des ddl principaux aux noeuds + # debut de la liste de noeuds, puis une liste de numero de noeud , puis + deb_list_noeud fin_list_noeud + # debut de la liste des ref de noeuds, puis une liste de nom , puis + deb_list_ref_noeud N_tout fin_list_ref_noeud + # debut de la liste des ddl a considerer aux noeuds, (une liste de ddl), puis + deb_list_ddl_noeud X1 X2 X3 R_X1 R_X2 R_X3 fin_list_ddl_noeud + type_sortie_ddl_retenue= 0 + # debut de la liste des ddl etendus a considerer aux noeuds, (une liste de ddl), puis + deb_list_ddl_etendu_noeud fin_list_ddl_etendu_noeud # fin des ddl etendu aux noeuds + # debut de la liste des grandeurs particulieres a considerer aux noeuds, (une liste de string), puis + deb_list_GrandParticuliere_noeud VECT_REAC_N PENETRATION_CONTACT FORCE_CONTACT fin_list_GrandParticuliere_noeud # fin des grandeurs particulieres aux noeuds + fin_liste_ddl_et_noeud # fin des grandeurs aux noeuds + debut_liste_ddl_ptinteg # ** debut des grandeurs aux elements + # debut de la liste des elements et points d'integration, une liste de (un element, un numero de pt d'integ), puis + deb_list_NbElement_NbPtInteg 1 1 fin_list_NbElement_NbPtInteg + # debut de la liste des ref d'elements, puis une liste de: nom + numero d'integ, puis + deb_list_ref_element fin_list_ref_element + # debut de la liste des ref de ptinteg d'elements, puis une liste de: nom puis + deb_list_ref_ptinteg_element fin_list_ref_ptinteg_element + # debut de la liste des ddl a considerer pour les elements, (une liste de ddl), puis + deb_list_ddl_element X2 fin_list_ddl_element # fin de la liste de ddl a considerer pour les elements + # debut de la liste des grandeurs particulieres a considerer pour les elements, (une liste de string), puis + deb_list_GrandParticuliere_element fin_list_GrandParticuliere_element # fin des grandeurs particulieres aux elements + # tableau de grandeurs evoluees aux elements a visualiser, un par maillage + deb_list_GrandEvoluee_element fin_list_GrandEvoluee_element + fin_liste_ddl_ptinteg # fin des grandeurs aux elements +# informations particuliere dans le cas ou il y a une animation +# type_xi indique si oui ou non les grandeurs a tracer sont aux noeuds (sinon c'est au elements) +# x1 et x2 indiquent les noms des ddls des grandeurs en x et y. accroi_x1 et accroi_x2 indiquent +# si oui ou non x1 et x2 represente l'accroissement entre 0 et t de la grandeur ou bien la grandeur elle meme. + debut_info_particulier grandeur_au_noeud? 1 x1= NU_DDL x2= NU_DDL accroi_x1= 0 accroi_x2= 1 fin_info_particulier +# un parametre de pilotage du style de sortie + parametre_style_de_sortie 1 +# un parametre indiquant si les tenseurs sont en absolue (rep 1) ou suivant un repere ad hoc +# (tangent pour les coques, suivant la fibre moyenne pour les element 1D ) + tenseur_en_absolue_ 0 + fin_grandeurs_maple # fin des grandeurs a visualiser au format maple + + # ----------------------------- definition des parametres d'animation: ---------------- + debut_animation # un mot cle de debut de liste (debut_animation) + actif 0 # <0 ou 1> indique si l'ordre est actif ou non + # des parametres avec des valeurs: (sur une meme ligne) + cycleInterval 8 # cycleInterval (indique le temps en seconde du cycle de l'animation) + fin_animation # un mot cle de fin + + fin_visualisation_maple + # ================================================================================= + # || fin de la visualisation maple || + # ================================================================================= + + + # ================================================================================= + # || ***** demande d'une visualisation Gmsh: ***** || + # ================================================================================= + # un mot cle de debut (debut_visualisation_Gmsh) + # un mot cle de fin ( fin_visualisation_Gmsh) apres tous les ordres particuliers + # la seule presence du premier mots cle suffit a activer la visualisation Gmsh + # la presence du second permet une meilleur lisibilite du fichier, mais n'est pas indispensable + debut_visualisation_Gmsh + + # ----------------------------- definition des parametres du maillage initial: ---------------- + debut_maillage_initial # un mot cle de debut de liste + actif 1 # <0 ou 1> indique si l'ordre est actif ou non + pseudo-homothetie_sur_les_maillages_ 0 # 0 = aucune homothetie, 1 = il y en a + # --- def eventuelle de la pseudo-homothetie: une par maillage, + # pseudo-homothetie pour le maillage : 1 +# maillage_ 1 + # mot cle: maillage_ puis le numero du maillage, +# pseudo-homothetie_ 0 # 0 = non active, 1 = active + # ensuite si c'est active, on trouve : + # mot cle: centre_homothetie_ puis les coordonnees du centre d'homothetie + # puis mot cle: fact_mult_ puis les coordonnees donnant les coefs multiplicatifs selon les axes. +# centre_homothetie_ +# fact_mult_ + # pseudo-homothetie pour le maillage : 2 +# maillage_ 2 + # mot cle: maillage_ puis le numero du maillage, +# pseudo-homothetie_ 0 # 0 = non active, 1 = active + # ensuite si c'est active, on trouve : + # mot cle: centre_homothetie_ puis les coordonnees du centre d'homothetie + # puis mot cle: fact_mult_ puis les coordonnees donnant les coefs multiplicatifs selon les axes. +# centre_homothetie_ +# fact_mult_ + visualisation_references_sur_les_maillages_ 1 # 0 = pas de visualisation des reference, 1 = sortie des ref dans fichier unique 2= sortie des ref dans plusieurs fichiers + fin_maillage_initial # le mot cle de fin + + # ----------------------------- definition des parametres pour les isovaleurs : ---------------- + debut_isovaleur_Gmsh # mot cle de debut des parametres pour les isovaleurs + actif 1 # <0 ou 1> indique si l'ordre est actif ou non + ancien_format_ 0 # 1 = ancien format, 0 = nouveau format +# un parametre indiquant si les tenseurs sont en absolue (rep 1) ou suivant un repere ad hoc +# (tangent pour les coques, suivant la fibre moyenne pour les element 1D ) + tenseur_en_absolue_ 1 + 1 # le numero de maillage + # tableau des ddl aux noeuds a visualiser, un par maillage + debut_tableau_ddl_aux_noeuds X1 X2 X3 fin_tableau_ddl_aux_noeuds + # tableau des choix_var aux noeuds a visualiser, un par maillage + # choix_var (=1 ou 0) indique si oui ou non il s'agit de la variation + debut_tableau_choix_var_ddl_aux_noeuds 1 1 1 fin_tableau_choix_var_ddl_aux_noeuds + # tableau des ddl_etendu aux noeuds a visualiser, un par maillage + debut_tableau_ddl_etendu_aux_noeuds fin_tableau_ddl_etendu_aux_noeuds + # tableau de grandeurs evoluees aux noeuds a visualiser, un par maillage + deb_list_GrandEvoluee_noeud fin_list_GrandEvoluee_noeud + # tableau de ddl aux elements a visualiser, un par maillage + debut_tableau_ddl_aux_elements SIG11 SIG22 SIG33 SIG12 SIG23 SIG13 EPS11 EPS22 EPS33 EPS12 EPS23 EPS13 fin_tableau_ddl_aux_elements + # tableau de grandeurs evoluees aux elements a visualiser, un par maillage + deb_list_GrandEvoluee_element fin_list_GrandEvoluee_element + # tableau de grandeurs particulieres aux elements a visualiser, un par maillage + deb_list_GrandParticuliere_element fin_list_GrandParticuliere_element + 2 # le numero de maillage + # tableau des ddl aux noeuds a visualiser, un par maillage + debut_tableau_ddl_aux_noeuds X1 X2 X3 fin_tableau_ddl_aux_noeuds + # tableau des choix_var aux noeuds a visualiser, un par maillage + # choix_var (=1 ou 0) indique si oui ou non il s'agit de la variation + debut_tableau_choix_var_ddl_aux_noeuds 1 1 1 fin_tableau_choix_var_ddl_aux_noeuds + # tableau des ddl_etendu aux noeuds a visualiser, un par maillage + debut_tableau_ddl_etendu_aux_noeuds fin_tableau_ddl_etendu_aux_noeuds + # tableau de grandeurs evoluees aux noeuds a visualiser, un par maillage + deb_list_GrandEvoluee_noeud fin_list_GrandEvoluee_noeud + # tableau de ddl aux elements a visualiser, un par maillage + debut_tableau_ddl_aux_elements SIG11 SIG22 SIG33 SIG12 SIG23 SIG13 EPS11 EPS22 EPS33 EPS12 EPS23 EPS13 fin_tableau_ddl_aux_elements + # tableau de grandeurs evoluees aux elements a visualiser, un par maillage + deb_list_GrandEvoluee_element fin_list_GrandEvoluee_element + # tableau de grandeurs particulieres aux elements a visualiser, un par maillage + deb_list_GrandParticuliere_element fin_list_GrandParticuliere_element + fin_isovaleur_Gmsh # mot cle de fin des parametres pour les isovaleurs + + # ----------------------------- definition des parametres de deformee: ---------------- + debut_deformee # un mot cle de debut de liste + actif 1 # <0 ou 1> indique si l'ordre est actif ou non + # definition des alertes: deb_list_alerte + # un mot clef de debut + # puis deux nombres: un mini et un maxi, et un nom + # un mot clef de fin: fin_list_alerte + deb_list_alerte + fin_list_alerte + fin_deformee # un mot cle de fin + + # ----------------------------- definition de la liste des increments a balayer: ---------------- + debut_list_increment # un mot cle de debut de liste + actif 1 # <0 ou 1> indique si l'ordre est actif ou non + # une liste d'entier separee par des blancs, ou le mot cle (tous_les_increments) + # un mot cle de fin de liste ( fin_list_increment) + tous_les_increments fin_list_increment + + # ----------------------------- choix des maillages a visualiser: ---------------- + # la liste est facultative, par defaut la visualisation concerne le premier maillage + debut_choix_maillage # un mot cle de debut, + actif 0 # <0 ou 1> indique si l'ordre est actif ou non + # une liste d'entiers , puis , sur une meme ligne + 1 2 fin_choix_maillage + + fin_visualisation_Gmsh + # ================================================================================= + # || fin de la visualisation Gmsh || + # ================================================================================= + + + + + + fin_fichier_commande_visu # <<<<<< le mot cle permet + # l'arret de la lecture des commandes, apres ce mot cle, aucune commande n'est lu, de plus + # sans le mot cle de fin de fichier, le fichier n'est pas valide + + ############################################################################################### + + diff --git a/Tests_en_attente_debug/Test_R_contact_TYPE_MATRICE/contact_TYPE_MATRICE.info b/Tests_en_attente_debug/Test_R_contact_TYPE_MATRICE/contact_TYPE_MATRICE.info new file mode 100644 index 0000000..cbf8891 --- /dev/null +++ b/Tests_en_attente_debug/Test_R_contact_TYPE_MATRICE/contact_TYPE_MATRICE.info @@ -0,0 +1,97 @@ +dimension 3 + + +niveau_commentaire 3 + + +TYPE_DE_CALCUL +non_dynamique # avec plus visualisation + + +< cube.her +< cube.lis + +< plateau.her +< plateau.lis + +domaine_esclave +1 #nb premiers maillages definis comme esclave + + +les_courbes_1D + + +choix_materiaux +nom_mail= cube E_tout MAT +nom_mail= plateau E_tout MAT + + +materiaux +MAT ISOELAS +1000. 0.3 + + +masse_volumique +nom_mail= cube E_tout 1. +nom_mail= plateau E_tout 1. + + +charges + + +blocages +nom_mail= cube N_droit UX +nom_mail= cube N_arriere UY +nom_mail= cube N_bas UZ + +nom_mail= plateau N_tout UX 'UY=-0.1' UZ + + +controle + +DELTAtMINI 1.e-6 +DELTAtMAXI 0.1 +TEMPSFIN 1. +DELTAt 0.05 +ITERATIONS 15 +PRECISION 1e-3 +SAUVEGARDE 1 +MAXINCRE 9999999 +NORME Residu/Reaction_et_VarRes +#RESTART --- + + +para_contact ------------------------------------ + +#CONTACT_TYPE : +# > 0 : pas de contact +# > 1 : contact avec une methode sans multiplicateur de Lagrange ni penalisation +# > 2 : contact avec une methode de penalisation +CONTACT_TYPE 2 + +PENALISATION_PENETRATION 0.1 +TYPE_PENALISATION_PENETRATION 4 +NB_DECOLLEMENT_MAXI 1 +DISTANCE_MAXI_AU_PT_PROJETE 2. +TYPE_DE_DECOLLEMENT 1 +PENETRATION_BORNE_REGULARISATION 1e-2 +PENETRATION_CONTACT_MAXI 1.e-8 + + +para_pilotage_equi_global + + +para_syteme_lineaire +TYPE_MATRICE BANDE_SYMETRIQUE_LAPACK +MATRICE_S_SECONDAIRE_S_ BANDE_SYMETRIQUE FIN_TYPE_MAT_SECONDAIRES_ +TYPE_RESOLUTION_S_SECONDAIRE_S_ CHOLESKY FIN_TYPE_RESOLUTION_SECONDAIRES_ + + +para_affichage +FREQUENCE_SORTIE_FIL_DU_CALCUL 1 # INTER_TEMPS 2.e-3 + + +resultats pas_de_sortie_finale_ +COPIE 0 + +_fin_point_info_ diff --git a/Tests_en_attente_debug/Test_R_contact_TYPE_MATRICE/cube.her b/Tests_en_attente_debug/Test_R_contact_TYPE_MATRICE/cube.her new file mode 100644 index 0000000..4ea69ea --- /dev/null +++ b/Tests_en_attente_debug/Test_R_contact_TYPE_MATRICE/cube.her @@ -0,0 +1,18 @@ + nom_maillage cube + + noeuds + 8 NOEUDS + + 1 -0.5 0 -0.5 + 2 -0.5 0 0.5 + 3 -0.5 1 -0.5 + 4 -0.5 1 0.5 + 5 0.5 0 -0.5 + 6 0.5 0 0.5 + 7 0.5 1 -0.5 + 8 0.5 1 0.5 + + elements + 1 ELEMENTS + + 1 HEXAEDRE LINEAIRE 5 7 3 1 6 8 4 2 diff --git a/Tests_en_attente_debug/Test_R_contact_TYPE_MATRICE/cube.lis b/Tests_en_attente_debug/Test_R_contact_TYPE_MATRICE/cube.lis new file mode 100644 index 0000000..7050686 --- /dev/null +++ b/Tests_en_attente_debug/Test_R_contact_TYPE_MATRICE/cube.lis @@ -0,0 +1,158 @@ +# CORRESPONDANCE label => position +# +# gauche => X=0.5 +# +# droit => X=-0.5 +# +# avant => Y=1 +# +# arriere => Y=0 +# +# haut => Z=0.5 +# +# bas => Z=-0.5 +# + + N_avant 3 4 7 8 + + N_arriere 1 2 5 6 + + N_haut 2 4 6 8 + + N_bas 1 3 5 7 + + N_droit 1 2 3 4 + + N_gauche 5 6 7 8 + + N_haut_droit 2 4 + + N_haut_gauche 6 8 + + N_haut_arriere 2 6 + + N_haut_avant 4 8 + + N_bas_droit 1 3 + + N_bas_gauche 5 7 + + N_bas_arriere 1 5 + + N_bas_avant 3 7 + + N_arriere_droit 1 2 + + N_arriere_gauche 5 6 + + N_avant_droit 3 4 + + N_avant_gauche 7 8 + + N_haut_arriere_droit 2 + + N_haut_arriere_gauche 6 + + N_haut_avant_gauche 8 + + N_haut_avant_droit 4 + + N_bas_arriere_droit 1 + + N_bas_arriere_gauche 5 + + N_bas_avant_gauche 7 + + N_bas_avant_droit 3 + + N_to 1 2 3 4 5 6 7 8 + + E_avant 1 + + E_derriere 1 + + E_haut 1 + + E_bas 1 + + E_droit 1 + + E_gauche 1 + + E_haut_droit 1 + + E_haut_gauche 1 + + E_haut_arriere 1 + + E_haut_avant 1 + + E_bas_droit 1 + + E_bas_gauche 1 + + E_bas_arriere 1 + + E_bas_avant 1 + + E_arriere_droit 1 + + E_arriere_gauche 1 + + E_avant_droit 1 + + E_avant_gauche 1 + + E_haut_arriere_droit 1 + + E_haut_arriere_gauche 1 + + E_haut_avant_gauche 1 + + E_haut_avant_droit 1 + + E_bas_arriere_droit 1 + + E_bas_arriere_gauche 1 + + E_bas_avant_gauche 1 + + E_bas_avant_droit 1 + + E_to 1 + + F_avant 1 5 + + F_arriere 1 2 + + F_haut 1 4 + + F_bas 1 1 + + F_droit 1 6 + + F_gauche 1 3 + + A_haut_droit 1 11 + + A_haut_gauche 1 9 + + A_haut_arriere 1 12 + + A_haut_avant 1 10 + + A_bas_droit 1 3 + + A_bas_gauche 1 1 + + A_bas_arriere 1 4 + + A_bas_avant 1 2 + + A_arriere_droit 1 8 + + A_arriere_gauche 1 5 + + A_avant_droit 1 7 + + A_avant_gauche 1 6 diff --git a/Tests_en_attente_debug/Test_R_contact_TYPE_MATRICE/plateau.her b/Tests_en_attente_debug/Test_R_contact_TYPE_MATRICE/plateau.her new file mode 100644 index 0000000..e4784a7 --- /dev/null +++ b/Tests_en_attente_debug/Test_R_contact_TYPE_MATRICE/plateau.her @@ -0,0 +1,18 @@ + nom_maillage plateau + + noeuds + 8 NOEUDS + + 1 -5 1.000001 -5 + 2 -5 1.000001 5 + 3 -5 2 -5 + 4 -5 2 5 + 5 5 1.000001 -5 + 6 5 1.000001 5 + 7 5 2 -5 + 8 5 2 5 + + elements + 1 ELEMENTS + + 1 HEXAEDRE LINEAIRE 5 7 3 1 6 8 4 2 diff --git a/Tests_en_attente_debug/Test_R_contact_TYPE_MATRICE/plateau.lis b/Tests_en_attente_debug/Test_R_contact_TYPE_MATRICE/plateau.lis new file mode 100644 index 0000000..b42043c --- /dev/null +++ b/Tests_en_attente_debug/Test_R_contact_TYPE_MATRICE/plateau.lis @@ -0,0 +1,158 @@ +# CORRESPONDANCE label => position +# +# gauche => X=5 +# +# droit => X=-5 +# +# avant => Y=2 +# +# arriere => Y=1.000001 +# +# haut => Z=5 +# +# bas => Z=-5 +# + + N_avant 3 4 7 8 + + N_arriere 1 2 5 6 + + N_haut 2 4 6 8 + + N_bas 1 3 5 7 + + N_droit 1 2 3 4 + + N_gauche 5 6 7 8 + + N_haut_droit 2 4 + + N_haut_gauche 6 8 + + N_haut_arriere 2 6 + + N_haut_avant 4 8 + + N_bas_droit 1 3 + + N_bas_gauche 5 7 + + N_bas_arriere 1 5 + + N_bas_avant 3 7 + + N_arriere_droit 1 2 + + N_arriere_gauche 5 6 + + N_avant_droit 3 4 + + N_avant_gauche 7 8 + + N_haut_arriere_droit 2 + + N_haut_arriere_gauche 6 + + N_haut_avant_gauche 8 + + N_haut_avant_droit 4 + + N_bas_arriere_droit 1 + + N_bas_arriere_gauche 5 + + N_bas_avant_gauche 7 + + N_bas_avant_droit 3 + + N_to 1 2 3 4 5 6 7 8 + + E_avant 1 + + E_derriere 1 + + E_haut 1 + + E_bas 1 + + E_droit 1 + + E_gauche 1 + + E_haut_droit 1 + + E_haut_gauche 1 + + E_haut_arriere 1 + + E_haut_avant 1 + + E_bas_droit 1 + + E_bas_gauche 1 + + E_bas_arriere 1 + + E_bas_avant 1 + + E_arriere_droit 1 + + E_arriere_gauche 1 + + E_avant_droit 1 + + E_avant_gauche 1 + + E_haut_arriere_droit 1 + + E_haut_arriere_gauche 1 + + E_haut_avant_gauche 1 + + E_haut_avant_droit 1 + + E_bas_arriere_droit 1 + + E_bas_arriere_gauche 1 + + E_bas_avant_gauche 1 + + E_bas_avant_droit 1 + + E_to 1 + + F_avant 1 5 + + F_arriere 1 2 + + F_haut 1 4 + + F_bas 1 1 + + F_droit 1 6 + + F_gauche 1 3 + + A_haut_droit 1 11 + + A_haut_gauche 1 9 + + A_haut_arriere 1 12 + + A_haut_avant 1 10 + + A_bas_droit 1 3 + + A_bas_gauche 1 1 + + A_bas_arriere 1 4 + + A_bas_avant 1 2 + + A_arriere_droit 1 8 + + A_arriere_gauche 1 5 + + A_avant_droit 1 7 + + A_avant_gauche 1 6 diff --git a/doc_procedure_verification.pdf b/doc_procedure_verification.pdf index a72738e4b07dead14699c794e00ac9bb5f8899fd..02ddbe377a50b10637e41feada8247a96ce8bf59 100644 GIT binary patch delta 18392 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